<?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>38402</bug_id>
          
          <creation_ts>2010-04-30 13:36:14 -0700</creation_ts>
          <short_desc>Paginate and column-break at layout time rather than when painting</short_desc>
          <delta_ts>2010-09-22 09:23:46 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>
          
          <blocked>41130</blocked>
    
    <blocked>45957</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter>mitz</reporter>
          <assigned_to name="Dave Hyatt">hyatt</assigned_to>
          <cc>abarth</cc>
    
    <cc>adele</cc>
    
    <cc>eric</cc>
    
    <cc>hyatt</cc>
    
    <cc>jorlow</cc>
    
    <cc>ossy</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>219601</commentid>
    <comment_count>0</comment_count>
    <who name="">mitz</who>
    <bug_when>2010-04-30 13:36:14 -0700</bug_when>
    <thetext>&lt;rdar://problem/7928898&gt;

The current paint-time implementation of pagination and columns is limited by its inability to move objects around or resize them for pagination. Perform pagination and breaking into columns during layout instead of when painting.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>224750</commentid>
    <comment_count>1</comment_count>
    <who name="">mitz</who>
    <bug_when>2010-05-12 11:25:47 -0700</bug_when>
    <thetext>A couple of notable limitations in the current paint-time solution:
- when lines’ vertical visual overflow areas overlap (such as with certain text shadow parameters), lines get split in the middle
- objects in layers (positioned elements, media) don’t respect column layout</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254499</commentid>
    <comment_count>2</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-07-21 13:44:45 -0700</bug_when>
    <thetext>&gt; - objects in layers (positioned elements, media) don’t respect column layout

This is fixed now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277396</commentid>
    <comment_count>3</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-09-10 13:11:22 -0700</bug_when>
    <thetext>*** Bug 45497 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277397</commentid>
    <comment_count>4</comment_count>
      <attachid>67226</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-09-10 13:15:32 -0700</bug_when>
    <thetext>Created attachment 67226
Implement internal pagination of floats

There are two big remaining issues with this patch:

(1) Being willing to insert a &quot;strut&quot; between the top of a block and its first line box creates really ugly visual artifacts, especially if the block has a border or background.  Similar to how margins can collapse out through the top of a block, we need to push pagination info for first lines out through block ancestors, so that all of those blocks move to the next page/column instead.  This is a very complicated problem, but I think solving it is essential to treating drop caps floats as unsplittable (because the line and the rest of the block go together).  As a first pass I may only push through to the immediate enclosing block.

(2) There is no pagination of unsplittable floats yet.  Those need to push down to the next page when they don&apos;t fit, and they need to bring the line they are on along with them.

I don&apos;t expect (2) to be all that difficult, but (1) is going to be a monster.  Once these problems are solved, though, I&apos;ll be in a position to land, since all the multicol tests will be passing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277479</commentid>
    <comment_count>5</comment_count>
      <attachid>67248</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-09-10 15:26:29 -0700</bug_when>
    <thetext>Created attachment 67248
This patch propagates first line pagination info outwards

Here&apos;s what is left:

(1) Make floats honor the pagination strut that gets pushed outwards and move themselves down.
(2) Make floats move down when they are unsplittable also.
(3) Move lines down when a float moves down as a result of (1) or (2), as long as there is no higher float on the line already.  Basically make the line be at the min y-position of all the floats that occur on that line.
(4) There are minor 1px glitches with placement at the top of columns on Roc&apos;s blog.
(5) Margins aren&apos;t collapsing away like they should in one specific entry on Roc&apos;s blog (something to do with lists).
(6) Columns still end up a bit too tall. The balancing algorithm needs some more smarts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277588</commentid>
    <comment_count>6</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-09-10 18:24:19 -0700</bug_when>
    <thetext>(7) Table cell vertical alignment can throw off pagination.  I have to figure something out there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277635</commentid>
    <comment_count>7</comment_count>
      <attachid>67289</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-09-10 22:32:49 -0700</bug_when>
    <thetext>Created attachment 67289
This patch moves floats to the next page correctly.

This patch gets floats moved.  Now to handle moving lines as a result of a float moving.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277729</commentid>
    <comment_count>8</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-09-11 09:54:07 -0700</bug_when>
    <thetext>(8) Dirty tables properly as part of markDescendantBlocksAndLines.
(9) Make lines account for varying line widths when they paginate (need more dirtying and relayout instead of just moving).
(10) Make block children call markDescendantBlocksAndLines if their y positions change (tricky, don&apos;t O(n^2) it somehow, might need new kind of layout flag).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277841</commentid>
    <comment_count>9</comment_count>
      <attachid>67332</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-09-11 23:17:58 -0700</bug_when>
    <thetext>Created attachment 67332
Improve line layout pagination

This patch improves line layout pagination.  It makes sure that the start/end position lines that are clean re-paginate by removing their pagination spacing.  It allow markDescendantBlocksAndLines to not have to trigger a full line layout, which helps performance a bit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277896</commentid>
    <comment_count>10</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-09-12 12:58:31 -0700</bug_when>
    <thetext>More notes:

Don&apos;t use markDescendantBlocksAndLines except when page height changes.  Instead cache the page offset for all RenderBlocks (rename MaxMargin struct to RenderBlockRareData and put it in there).  If that changes then just do setChildNeedsLayout).

When a line doesn&apos;t fit vertically, need to check available line width.  If it&apos;s different have to rewind line layout by 1 line and re-run it.  Make sure floats encountered a second time don&apos;t mess up (they should already be inserted/positioned).

Need to fix the yPosEstimate issue with &lt;body&gt;&lt;p&gt;.  It&apos;s just going to be too painful if the entire document lays out at the wrong vertical position and then has to relayout again.  We need to just get that right on the first layout.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>278378</commentid>
    <comment_count>11</comment_count>
      <attachid>67448</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-09-13 12:11:40 -0700</bug_when>
    <thetext>Created attachment 67448
Improve dirtying when objects in a pagination context move

This change cuts down on relayout when paginated objects move.  It doesn&apos;t try to relayout if your overall absolute position relative to the first page top doesn&apos;t change.

Here are the big remaining issues that block review:

(1) Floats need to bring lines along with them when they move to the next page.  The exact circumstances under which they should do this are debatable.  I&apos;m still trying to decide when this should happen.
(2) When a line paginates, I have to re-run line layout on that line if the line width at the new position is different.
(3) Tables and flexible boxes are still unpatched.  They need to setPageY on themselves in their layout methods.  They both need to handle dirtying their children if their pageYs are different.
(4) Tables need to do something about movement of cells, e.g., when a row grows to take over remaining space, shoving other rows down.  Vertical alignment is also problematic, since the cell contents shift in that case too.
(5) Column breaks need to just be disabled for non-normal-flow content for now.
(6) The column balancing algorithm needs to be smart about tracking page breaks and not trying to grow column heights if forced page breaks have already given you too many columns. It also needs to balance around the size of the contents between the forced breaks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>279060</commentid>
    <comment_count>12</comment_count>
      <attachid>67583</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-09-14 11:57:25 -0700</bug_when>
    <thetext>Created attachment 67583
This patch makes floats move lines they are anchored to when needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>279061</commentid>
    <comment_count>13</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-09-14 11:58:01 -0700</bug_when>
    <thetext>No new issues, so down to (2)-(6) on the last posted list.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>279189</commentid>
    <comment_count>14</comment_count>
      <attachid>67609</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-09-14 14:46:12 -0700</bug_when>
    <thetext>Created attachment 67609
Make line layout rewind by 1 line when a line paginates.

This patch fixes line layout so that if the line width changes after a line paginates, we rewind line layout the proper amount and re-run it.  We keep floats positioned properly that were above the unpaginated top of the line.

Down to only the following issues now:

(1) Tables and flexible boxes are still unpatched.  They need to setPageY on themselves in their layout methods.  They both need to handle dirtying their children if their pageYs are different.
(2) Tables need to do something about movement of cells, e.g., when a row grows to take over remaining space, shoving other rows down.  Vertical alignment is also problematic, since the cell contents shift in that case too.
(3) Column breaks need to just be disabled for non-normal-flow content for now.
(4) The column balancing algorithm needs to be smart about tracking page breaks and not trying to grow column heights if forced page breaks have already given you too many columns. It also needs to balance around the size of the contents between the forced breaks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>279204</commentid>
    <comment_count>15</comment_count>
      <attachid>67612</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-09-14 15:24:55 -0700</bug_when>
    <thetext>Created attachment 67612
Make table vertical alignment and growth do something vaguely sensible

Down to just fixing up dirtying and setPageY stuff and then fixing column breaks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>279205</commentid>
    <comment_count>16</comment_count>
      <attachid>67613</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-09-14 15:26:06 -0700</bug_when>
    <thetext>Created attachment 67613
Incorporate the layout tests I&apos;ve written so far into the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>279631</commentid>
    <comment_count>17</comment_count>
      <attachid>67691</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-09-15 11:18:57 -0700</bug_when>
    <thetext>Created attachment 67691
Fix pageY dirtying / checking for positioned objects and tables and flexible boxes

Down now to:

(1) Column breaks need to just be disabled for non-normal-flow content for now.
(2) The column balancing algorithm needs to be smart about tracking page breaks and not trying to grow column heights if forced page breaks have already given you too many columns. It also needs to balance around the size of the contents between the forced breaks.
(3) Improve the yPosEstimate check to handle &lt;!doctype html&gt;&lt;body&gt;&lt;p&gt; without having to relayout the world.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>279711</commentid>
    <comment_count>18</comment_count>
      <attachid>67713</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-09-15 14:19:37 -0700</bug_when>
    <thetext>Created attachment 67713
Patch (excluding layout test results, which are too big to attach)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>279714</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-15 14:22:00 -0700</bug_when>
    <thetext>Attachment 67713 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/rendering/LayoutState.h:77:  One space before end of line comments  [whitespace/comments] [5]
WebCore/rendering/LayoutState.h:78:  One space before end of line comments  [whitespace/comments] [5]
WebCore/rendering/LayoutState.h:83:  One space before end of line comments  [whitespace/comments] [5]
WebCore/rendering/LayoutState.h:84:  One space before end of line comments  [whitespace/comments] [5]
WebCore/rendering/LayoutState.h:85:  One space before end of line comments  [whitespace/comments] [5]
WebCore/rendering/RenderBlock.cpp:3895:  One line control clauses should not use braces.  [whitespace/braces] [4]
WebCore/rendering/RenderBlock.cpp:5601:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/rendering/RenderBlock.cpp:5611:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/rendering/ColumnInfo.h:32:  Use &apos;using namespace std;&apos; instead of &apos;using std::max;&apos;.  [build/using_std] [4]
WebCore/rendering/ColumnInfo.h:83:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 10 in 36 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>280218</commentid>
    <comment_count>20</comment_count>
      <attachid>67819</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-09-16 11:12:32 -0700</bug_when>
    <thetext>Created attachment 67819
New patch

Improved estimateVerticalPosition to account for a block&apos;s paginationStrut (similar logic to how collapsedMarginTop is used inside that function).

Fixed the style errors with the previous patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>280221</commentid>
    <comment_count>21</comment_count>
      <attachid>67819</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-09-16 11:22:19 -0700</bug_when>
    <thetext>Comment on attachment 67819
New patch

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

I reviewed a lot but I’m still not sure I read enough of the actual algorithms. I am going to say review+ but you probably want at least a bit of review from people who will read more of the layout algorithms.

&gt; WebCore/rendering/ColumnInfo.h:60
&gt; +    void setColumnCountAndHeight(int c, int h)

I would prefer argument names of count and height rather than c and h.

&gt; WebCore/rendering/ColumnInfo.h:97
&gt; +    int m_forcedBreaks; // FIXME: We will ultimately need to cache way more information to balance around forced breaks properly.

I don’t think “way more” is way better than “more” here.

I don’t know what “balance around” means, but maybe experts would know.

&gt; WebCore/rendering/LayoutState.cpp:38
&gt; +LayoutState::LayoutState(LayoutState* prev, RenderBox* renderer, const IntSize&amp; offset, int pageHeight, ColumnInfo* colInfo)
&gt; +    : m_columnInfo(colInfo)

I’d prefer “columnInfo” to “colInfo”.

&gt; WebCore/rendering/LayoutState.cpp:88
&gt; +        m_pageOffset = IntSize(m_layoutOffset.width() + renderer-&gt;borderLeft() + renderer-&gt;paddingLeft(),
&gt; +                               m_layoutOffset.height() + renderer-&gt;borderTop() + renderer-&gt;paddingTop());

I know it’s pretty, but we normally don’t line up the second line with the parenthesis like this. Makes it look bad if you ever rename things.

&gt; WebCore/rendering/LayoutState.h:66
&gt; +    bool paginatingColumns() const { return m_columnInfo; }
&gt; +    bool paginated() const { return m_pageHeight || m_columnInfo; }

I think these would be more readable as isPaginatingColumns and isPaginated.

&gt; WebCore/rendering/LayoutState.h:81
&gt; +    IntSize m_layoutDelta; // Transient offset from the final position of the object
&gt; +                           // used to ensure that repaints happen in the correct place.
&gt; +                           // This is a total delta accumulated from the root.

Same comment about indented lines. It’s better not to do this, so things stay good even if we rename later. I know the existing code already did it.

&gt; WebCore/rendering/RenderBlock.cpp:1141
&gt; +    ColumnInfo* colInfo = columnInfo();

I’d prefer columnInfo to colInfo.

&gt; WebCore/rendering/RenderBlock.cpp:2916
&gt; +    // Our location is irrelevant if we&apos;re unsplittable or no pagination is in effect.  Just go ahead
&gt; +    // and lay out the float.

Would read better if you broke lines where you broke sentences.

&gt; WebCore/rendering/RenderBlock.cpp:2956
&gt; +void RenderBlock::removeFloatingObjects(FloatingObject* f, int y)

Instead of “f” it would be good to name this in some way that made clear what the argument is.

I think this function is confusing. It’s “remove floatingObjects after this one that are below this y coordinate”? Is there some better way to explain that in the function name?

&gt; WebCore/rendering/RenderBlock.cpp:4442
&gt; +                    int distanceBetweenBreaks = max(colInfo-&gt;maximumDistanceBetweenForcedBreaks(),
&gt; +                                                    view()-&gt;layoutState()-&gt;pageY(borderTop() + paddingTop() + contentHeight()) - colInfo-&gt;forcedBreakOffset());

Better not to try to line up lines like these as I said before.

&gt; WebCore/rendering/RenderBlock.h:606
&gt; +    RenderBlockRareData* m_rareData;

Can we use an OwnPtr for rare data? If it’s really rare, can we use a hash map and a bit for it instead of a pointer?

&gt; WebCore/rendering/RenderTable.h:145
&gt; -
&gt; +    

You should just revert the whitespace-only change to RenderTable.h.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>280229</commentid>
    <comment_count>22</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-09-16 11:36:31 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt;
&gt; Can we use an OwnPtr for rare data? If it’s really rare, can we use a hash map and a bit for it instead of a pointer?
&gt; 

It&apos;s not that rare.  We&apos;d probably need to investigate to see how often it gets allocated, but it&apos;s more common than say having a continuation (which I&apos;d target first for the hashing).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>280232</commentid>
    <comment_count>23</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-09-16 11:37:33 -0700</bug_when>
    <thetext>(In reply to comment #21)

&gt; I think this function is confusing. It’s “remove floatingObjects after this one that are below this y coordinate”? Is there some better way to explain that in the function name?
&gt; 

I agree.  I struggled with some really really long names before just giving up.  I&apos;m open to suggestions...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>280300</commentid>
    <comment_count>24</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-09-16 13:20:36 -0700</bug_when>
    <thetext>Fixed in r67660.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>280325</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-16 13:42:43 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/67660 might have broken Qt Linux Release
The following changes are on the blame list:
http://trac.webkit.org/changeset/67659
http://trac.webkit.org/changeset/67660</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281025</commentid>
    <comment_count>26</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-09-17 17:37:57 -0700</bug_when>
    <thetext>28 hours later, these still seem to be broken:

fast/multicol/span/span-as-immediate-child-generated-content.html
fast/multicol/span/span-as-immediate-child-property-removal.html
fast/multicol/span/span-as-immediate-columns-child-dynamic.html
fast/multicol/span/span-as-immediate-columns-child-removal.html
fast/multicol/span/span-as-immediate-columns-child.html

Am I misreading the bots?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281037</commentid>
    <comment_count>27</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-09-17 17:58:18 -0700</bug_when>
    <thetext>Hopefully resolved in http://trac.webkit.org/changeset/67766.

Dave, can you make sure the above change is correct?  Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281501</commentid>
    <comment_count>28</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2010-09-20 05:39:37 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; http://trac.webkit.org/changeset/67660 might have broken Qt Linux Release
&gt; The following changes are on the blame list:
&gt; http://trac.webkit.org/changeset/67659
&gt; http://trac.webkit.org/changeset/67660

Qt specific expected results fix landed in http://trac.webkit.org/changeset/67842</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282960</commentid>
    <comment_count>29</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-09-22 09:01:05 -0700</bug_when>
    <thetext>As documented in https://bugs.webkit.org/show_bug.cgi?id=45957 it appears this change actually did break things and there&apos;s no sign of imminent fixes.  I&apos;m preparing a revert right now for the following CLs:

http://trac.webkit.org/changeset/67660
http://trac.webkit.org/changeset/67766
http://trac.webkit.org/changeset/67842</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282964</commentid>
    <comment_count>30</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-09-22 09:09:11 -0700</bug_when>
    <thetext>Hyatt did a huge amount of work to land this patch. Can we just hope he&apos;ll fix things up?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282969</commentid>
    <comment_count>31</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-09-22 09:16:28 -0700</bug_when>
    <thetext>(In reply to comment #30)
&gt; Hyatt did a huge amount of work to land this patch. Can we just hope he&apos;ll fix things up?

We filed this 5 days ago https://bugs.webkit.org/show_bug.cgi?id=45957 and haven&apos;t gotten any response.  Normally, I would have advocated simply reverting at that first sign of trouble, but since there had obviously been a lot of work put into landing it, we filed the bug in the hopes we could avoid that.  (In hindsight, maybe we should have posted something more obvious in this bug before now.  Sorry about that.)

But unless you have some inside information that David will probably have a chance to look at this soon, I feel like reverting is the only course of action here.  (I did take a look at the patch trying to find some easy-to-spot defect causing the issue, but I didn&apos;t see anything--though I am completely unfamiliar with this code.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282973</commentid>
    <comment_count>32</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-09-22 09:23:46 -0700</bug_when>
    <thetext>(In reply to comment #31)
&gt; (In reply to comment #30)
&gt; &gt; Hyatt did a huge amount of work to land this patch. Can we just hope he&apos;ll fix things up?
&gt; 
&gt; We filed this 5 days ago https://bugs.webkit.org/show_bug.cgi?id=45957 and haven&apos;t gotten any response.  Normally, I would have advocated simply reverting at that first sign of trouble, but since there had obviously been a lot of work put into landing it, we filed the bug in the hopes we could avoid that.  (In hindsight, maybe we should have posted something more obvious in this bug before now.  Sorry about that.)
&gt; 
&gt; But unless you have some inside information that David will probably have a chance to look at this soon, I feel like reverting is the only course of action here.  (I did take a look at the patch trying to find some easy-to-spot defect causing the issue, but I didn&apos;t see anything--though I am completely unfamiliar with this code.)

Unfortunately it looks like a simple revert may not be possible.  Simon, do you have a few cycles to look at this column thing?  If not, any idea who could?  (In the future, I guess we shouldn&apos;t wait on the revert. :-(</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67226</attachid>
            <date>2010-09-10 13:15:32 -0700</date>
            <delta_ts>2010-09-10 15:26:29 -0700</delta_ts>
            <desc>Implement internal pagination of floats</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>64312</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL0NvbHVtbkluZm8uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9Db2x1bW5JbmZvLmgJKHJldmlzaW9uIDY2OTAzKQorKysgV2ViQ29yZS9y
ZW5kZXJpbmcvQ29sdW1uSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw5IEBAIHB1
YmxpYzoKICAgICBDb2x1bW5JbmZvKCkKICAgICAgICAgOiBtX2Rlc2lyZWRDb2x1bW5XaWR0aCgw
KQogICAgICAgICAsIG1fZGVzaXJlZENvbHVtbkNvdW50KDEpCisgICAgICAgICwgbV9jb2x1bW5D
b3VudCgxKQorICAgICAgICAsIG1fY29sdW1uSGVpZ2h0KDApCisgICAgICAgICwgbV9taW5pbXVt
Q29sdW1uSGVpZ2h0KDApCiAgICAgICAgIHsgfQogICAgIAogICAgIGludCBkZXNpcmVkQ29sdW1u
V2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2Rlc2lyZWRDb2x1bW5XaWR0aDsgfQpAQCAtNDQsMTkg
KzQ3LDI4IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBkZXNpcmVkQ29sdW1uQ291bnQoKSBjb25z
dCB7IHJldHVybiBtX2Rlc2lyZWRDb2x1bW5Db3VudDsgfQogICAgIHZvaWQgc2V0RGVzaXJlZENv
bHVtbkNvdW50KHVuc2lnbmVkIGNvdW50KSB7IG1fZGVzaXJlZENvbHVtbkNvdW50ID0gY291bnQ7
IH0KIAotICAgIC8vIEVuY2Fwc3VsYXRlZCBmb3IgdGhlIGZ1dHVyZSB3aGVyZSB3ZSBjYW4gYXZv
aWQgc3RvcmluZyB0aGUgcmVjdHMgYW5kIGp1c3QgY29tcHV0ZSB0aGVtIGR5bmFtaWNhbGx5Lgot
ICAgIHNpemVfdCBjb2x1bW5Db3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fY29sdW1uUmVjdHMuc2l6
ZSgpOyB9Ci0gICAgY29uc3QgSW50UmVjdCYgY29sdW1uUmVjdEF0KHNpemVfdCBpKSBjb25zdCB7
IHJldHVybiBtX2NvbHVtblJlY3RzW2ldOyB9CisgICAgdW5zaWduZWQgY29sdW1uQ291bnQoKSBj
b25zdCB7IHJldHVybiBtX2NvbHVtbkNvdW50OyB9CisgICAgaW50IGNvbHVtbkhlaWdodCgpIGNv
bnN0IHsgcmV0dXJuIG1fY29sdW1uSGVpZ2h0OyB9CiAKLSAgICB2b2lkIGNsZWFyQ29sdW1ucygp
IHsgbV9jb2x1bW5SZWN0cy5jbGVhcigpOyB9CisgICAgLy8gU2V0IG91ciBjb3VudCBhbmQgaGVp
Z2h0LiAgVGhpcyBpcyBlbm91Z2ggaW5mbyBmb3IgYSBSZW5kZXJCbG9jayB0byBjb21wdXRlIHBh
Z2UgcmVjdHMKKyAgICAvLyBkeW5hbWljYWxseS4KKyAgICB2b2lkIHNldENvbHVtbkNvdW50QW5k
SGVpZ2h0KGludCBjLCBpbnQgaCkKKyAgICB7IAorICAgICAgICBtX2NvbHVtbkNvdW50ID0gYzsK
KyAgICAgICAgbV9jb2x1bW5IZWlnaHQgPSBoOworICAgIH0KKyAgICB2b2lkIHNldENvbHVtbkhl
aWdodChpbnQgaCkgeyBtX2NvbHVtbkhlaWdodCA9IGg7IH0KKworICAgIHZvaWQgdXBkYXRlTWlu
aW11bUNvbHVtbkhlaWdodChpbnQgaCkgeyBtX21pbmltdW1Db2x1bW5IZWlnaHQgPSBtYXgoaCwg
bV9taW5pbXVtQ29sdW1uSGVpZ2h0KTsgfQorICAgIGludCBtaW5pbXVtQ29sdW1uSGVpZ2h0KCkg
Y29uc3QgeyByZXR1cm4gbV9taW5pbXVtQ29sdW1uSGVpZ2h0OyB9CiAKLSAgICAvLyBGSVhNRTog
V2lsbCBnbyBhd2F5IG9uY2Ugd2UgZG9uJ3QgdXNlIHRoZSBWZWN0b3IuCi0gICAgdm9pZCBhZGRD
b2x1bW5SZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpIHsgbV9jb2x1bW5SZWN0cy5hcHBlbmQocmVj
dCk7IH0KLSAgICAKIHByaXZhdGU6CiAgICAgaW50IG1fZGVzaXJlZENvbHVtbldpZHRoOwogICAg
IHVuc2lnbmVkIG1fZGVzaXJlZENvbHVtbkNvdW50OwotICAgIFZlY3RvcjxJbnRSZWN0PiBtX2Nv
bHVtblJlY3RzOworICAgIAorICAgIHVuc2lnbmVkIG1fY29sdW1uQ291bnQ7CisgICAgaW50IG1f
Y29sdW1uSGVpZ2h0OworICAgIGludCBtX21pbmltdW1Db2x1bW5IZWlnaHQ7CiB9OwogCiB9Cklu
ZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvTGF5b3V0U3RhdGUuY3BwCShyZXZpc2lvbiA2Njg4NikKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsOCArMzMs
OSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUxheW91dFN0YXRlOjpMYXlvdXRTdGF0ZShM
YXlvdXRTdGF0ZSogcHJldiwgUmVuZGVyQm94KiByZW5kZXJlciwgY29uc3QgSW50U2l6ZSYgb2Zm
c2V0KQotICAgIDogbV9uZXh0KHByZXYpCitMYXlvdXRTdGF0ZTo6TGF5b3V0U3RhdGUoTGF5b3V0
U3RhdGUqIHByZXYsIFJlbmRlckJveCogcmVuZGVyZXIsIGNvbnN0IEludFNpemUmIG9mZnNldCwg
aW50IHBhZ2VIZWlnaHQsIENvbHVtbkluZm8qIGNvbEluZm8pCisgICAgOiBtX2NvbHVtbkluZm8o
Y29sSW5mbykKKyAgICAsIG1fbmV4dChwcmV2KQogI2lmbmRlZiBOREVCVUcKICAgICAsIG1fcmVu
ZGVyZXIocmVuZGVyZXIpCiAjZW5kaWYKQEAgLTQ1LDQzICs0Niw2NyBAQCBMYXlvdXRTdGF0ZTo6
TGF5b3V0U3RhdGUoTGF5b3V0U3RhdGUqIHByCiAgICAgaWYgKGZpeGVkKSB7CiAgICAgICAgIC8v
IEZJWE1FOiBUaGlzIGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgd2l0aCB0cmFuc2Zvcm1zLgogICAg
ICAgICBGbG9hdFBvaW50IGZpeGVkT2Zmc2V0ID0gcmVuZGVyZXItPnZpZXcoKS0+bG9jYWxUb0Fi
c29sdXRlKEZsb2F0UG9pbnQoKSwgdHJ1ZSk7Ci0gICAgICAgIG1fb2Zmc2V0ID0gSW50U2l6ZShm
aXhlZE9mZnNldC54KCksIGZpeGVkT2Zmc2V0LnkoKSkgKyBvZmZzZXQ7CisgICAgICAgIG1fcGFp
bnRPZmZzZXQgPSBJbnRTaXplKGZpeGVkT2Zmc2V0LngoKSwgZml4ZWRPZmZzZXQueSgpKSArIG9m
ZnNldDsKICAgICB9IGVsc2UKLSAgICAgICAgbV9vZmZzZXQgPSBwcmV2LT5tX29mZnNldCArIG9m
ZnNldDsKKyAgICAgICAgbV9wYWludE9mZnNldCA9IHByZXYtPm1fcGFpbnRPZmZzZXQgKyBvZmZz
ZXQ7CiAKLSAgICBpZiAocmVuZGVyZXItPmlzUmVsUG9zaXRpb25lZCgpKSB7Ci0gICAgICAgIGlm
IChyZW5kZXJlci0+aGFzTGF5ZXIoKSkKLSAgICAgICAgICAgIG1fb2Zmc2V0ICs9IHJlbmRlcmVy
LT5sYXllcigpLT5yZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0KCk7Ci0gICAgfSBlbHNlIGlmIChyZW5k
ZXJlci0+aXNQb3NpdGlvbmVkKCkgJiYgIWZpeGVkKSB7CisgICAgaWYgKHJlbmRlcmVyLT5pc1Bv
c2l0aW9uZWQoKSAmJiAhZml4ZWQpIHsKICAgICAgICAgaWYgKFJlbmRlck9iamVjdCogY29udGFp
bmVyID0gcmVuZGVyZXItPmNvbnRhaW5lcigpKSB7CiAgICAgICAgICAgICBpZiAoY29udGFpbmVy
LT5pc1JlbFBvc2l0aW9uZWQoKSAmJiBjb250YWluZXItPmlzUmVuZGVySW5saW5lKCkpCi0gICAg
ICAgICAgICAgICAgbV9vZmZzZXQgKz0gdG9SZW5kZXJJbmxpbmUoY29udGFpbmVyKS0+cmVsYXRp
dmVQb3NpdGlvbmVkSW5saW5lT2Zmc2V0KHJlbmRlcmVyKTsKKyAgICAgICAgICAgICAgICBtX3Bh
aW50T2Zmc2V0ICs9IHRvUmVuZGVySW5saW5lKGNvbnRhaW5lciktPnJlbGF0aXZlUG9zaXRpb25l
ZElubGluZU9mZnNldChyZW5kZXJlcik7CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBtX2xheW91
dE9mZnNldCA9IG1fcGFpbnRPZmZzZXQ7CisKKyAgICBpZiAocmVuZGVyZXItPmlzUmVsUG9zaXRp
b25lZCgpICYmIHJlbmRlcmVyLT5oYXNMYXllcigpKQorICAgICAgICBtX3BhaW50T2Zmc2V0ICs9
IHJlbmRlcmVyLT5sYXllcigpLT5yZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0KCk7CisKICAgICBtX2Ns
aXBwZWQgPSAhZml4ZWQgJiYgcHJldi0+bV9jbGlwcGVkOwogICAgIGlmIChtX2NsaXBwZWQpCiAg
ICAgICAgIG1fY2xpcFJlY3QgPSBwcmV2LT5tX2NsaXBSZWN0OwogCiAgICAgaWYgKHJlbmRlcmVy
LT5oYXNPdmVyZmxvd0NsaXAoKSkgewogICAgICAgICBSZW5kZXJMYXllciogbGF5ZXIgPSByZW5k
ZXJlci0+bGF5ZXIoKTsKLSAgICAgICAgSW50UmVjdCBjbGlwUmVjdCh0b1BvaW50KG1fb2Zmc2V0
KSArIHJlbmRlcmVyLT52aWV3KCktPmxheW91dERlbHRhKCksIGxheWVyLT5zaXplKCkpOworICAg
ICAgICBJbnRSZWN0IGNsaXBSZWN0KHRvUG9pbnQobV9wYWludE9mZnNldCkgKyByZW5kZXJlci0+
dmlldygpLT5sYXlvdXREZWx0YSgpLCBsYXllci0+c2l6ZSgpKTsKICAgICAgICAgaWYgKG1fY2xp
cHBlZCkKICAgICAgICAgICAgIG1fY2xpcFJlY3QuaW50ZXJzZWN0KGNsaXBSZWN0KTsKICAgICAg
ICAgZWxzZSB7CiAgICAgICAgICAgICBtX2NsaXBSZWN0ID0gY2xpcFJlY3Q7CiAgICAgICAgICAg
ICBtX2NsaXBwZWQgPSB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIG1fb2Zmc2V0IC09IGxheWVy
LT5zY3JvbGxlZENvbnRlbnRPZmZzZXQoKTsKKworICAgICAgICBtX3BhaW50T2Zmc2V0IC09IGxh
eWVyLT5zY3JvbGxlZENvbnRlbnRPZmZzZXQoKTsKICAgICB9CiAKLSAgICBtX2xheW91dERlbHRh
ID0gbV9uZXh0LT5tX2xheW91dERlbHRhOworICAgIC8vIERpc2FibGUgcGFnaW5hdGlvbiBmb3Ig
b2JqZWN0cyB3ZSBkb24ndCBzdXBwb3J0LiAgRm9yIG5vdyB0aGlzIGluY2x1ZGVzIG92ZXJmbG93
OnNjcm9sbC9hdXRvIGFuZCBpbmxpbmUgYmxvY2tzLgorICAgIGlmIChyZW5kZXJlci0+aXNSZXBs
YWNlZCgpIHx8IHJlbmRlcmVyLT5zY3JvbGxzT3ZlcmZsb3coKSkKKyAgICAgICAgbV9wYWdlSGVp
Z2h0ID0gMDsKKworICAgIC8vIElmIHdlIGVzdGFibGlzaCBhIG5ldyBwYWdlIGhlaWdodCwgdGhl
biBjYWNoZSB0aGUgb2Zmc2V0IHRvIHRoZSB0b3Agb2YgdGhlIGZpcnN0IHBhZ2UuCisgICAgLy8g
V2UgY2FuIGNvbXBhcmUgdGhpcyBsYXRlciBvbiB0byBmaWd1cmUgb3V0IHdoYXQgcGFydCBvZiB0
aGUgcGFnZSB3ZSdyZSBhY3R1YWxseSBvbiwKKyAgICBpZiAocGFnZUhlaWdodCkgeworICAgICAg
ICBtX3BhZ2VIZWlnaHQgPSBwYWdlSGVpZ2h0OworICAgICAgICBtX3BhZ2VPZmZzZXQgPSBJbnRT
aXplKG1fcGFpbnRPZmZzZXQud2lkdGgoKSArIHJlbmRlcmVyLT5ib3JkZXJMZWZ0KCkgKyByZW5k
ZXJlci0+cGFkZGluZ0xlZnQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3Bh
aW50T2Zmc2V0LmhlaWdodCgpICsgcmVuZGVyZXItPmJvcmRlclRvcCgpICsgcmVuZGVyZXItPnBh
ZGRpbmdUb3AoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gSWYgd2UgZG9uJ3QgZXN0YWJs
aXNoIGEgbmV3IHBhZ2UgaGVpZ2h0LCB0aGVuIHByb3BhZ2F0ZSB0aGUgb2xkIHBhZ2UgaGVpZ2h0
IGFuZCBvZmZzZXQgZG93bi4KKyAgICAgICAgbV9wYWdlSGVpZ2h0ID0gbV9uZXh0LT5tX3BhZ2VI
ZWlnaHQ7CisgICAgICAgIG1fcGFnZU9mZnNldCA9IG1fbmV4dC0+bV9wYWdlT2Zmc2V0OworICAg
IH0KKyAgICAKKyAgICBpZiAoIW1fY29sdW1uSW5mbykKKyAgICAgICAgbV9jb2x1bW5JbmZvID0g
bV9uZXh0LT5tX2NvbHVtbkluZm87CiAKKyAgICBtX2xheW91dERlbHRhID0gbV9uZXh0LT5tX2xh
eW91dERlbHRhOworICAgIAogICAgIC8vIEZJWE1FOiA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTM0NDM+IEFwcGx5IGNvbnRyb2wgY2xpcCBpZiBwcmVzZW50LgogfQog
CiBMYXlvdXRTdGF0ZTo6TGF5b3V0U3RhdGUoUmVuZGVyT2JqZWN0KiByb290KQogICAgIDogbV9j
bGlwcGVkKGZhbHNlKQorICAgICwgbV9wYWdlSGVpZ2h0KDApCisgICAgLCBtX2NvbHVtbkluZm8o
MCkKICAgICAsIG1fbmV4dCgwKQogI2lmbmRlZiBOREVCVUcKICAgICAsIG1fcmVuZGVyZXIocm9v
dCkKQEAgLTg5LDEzICsxMTQsMTMgQEAgTGF5b3V0U3RhdGU6OkxheW91dFN0YXRlKFJlbmRlck9i
amVjdCogcgogewogICAgIFJlbmRlck9iamVjdCogY29udGFpbmVyID0gcm9vdC0+Y29udGFpbmVy
KCk7CiAgICAgRmxvYXRQb2ludCBhYnNDb250ZW50UG9pbnQgPSBjb250YWluZXItPmxvY2FsVG9B
YnNvbHV0ZShGbG9hdFBvaW50KCksIGZhbHNlLCB0cnVlKTsKLSAgICBtX29mZnNldCA9IEludFNp
emUoYWJzQ29udGVudFBvaW50LngoKSwgYWJzQ29udGVudFBvaW50LnkoKSk7CisgICAgbV9wYWlu
dE9mZnNldCA9IEludFNpemUoYWJzQ29udGVudFBvaW50LngoKSwgYWJzQ29udGVudFBvaW50Lnko
KSk7CiAKICAgICBpZiAoY29udGFpbmVyLT5oYXNPdmVyZmxvd0NsaXAoKSkgewogICAgICAgICBS
ZW5kZXJMYXllciogbGF5ZXIgPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KGNvbnRhaW5lciktPmxh
eWVyKCk7CiAgICAgICAgIG1fY2xpcHBlZCA9IHRydWU7Ci0gICAgICAgIG1fY2xpcFJlY3QgPSBJ
bnRSZWN0KHRvUG9pbnQobV9vZmZzZXQpLCBsYXllci0+c2l6ZSgpKTsKLSAgICAgICAgbV9vZmZz
ZXQgLT0gbGF5ZXItPnNjcm9sbGVkQ29udGVudE9mZnNldCgpOworICAgICAgICBtX2NsaXBSZWN0
ID0gSW50UmVjdCh0b1BvaW50KG1fcGFpbnRPZmZzZXQpLCBsYXllci0+c2l6ZSgpKTsKKyAgICAg
ICAgbV9wYWludE9mZnNldCAtPSBsYXllci0+c2Nyb2xsZWRDb250ZW50T2Zmc2V0KCk7CiAgICAg
fQogfQogCkBAIC0xMjYsNCArMTUxLDExIEBAIHZvaWQgTGF5b3V0U3RhdGU6Om9wZXJhdG9yIGRl
bGV0ZSh2b2lkKiAKICAgICAqKHNpemVfdCopcHRyID0gc3o7CiB9CiAKK3ZvaWQgTGF5b3V0U3Rh
dGU6OmNsZWFyUGFnaW5hdGlvbkluZm9ybWF0aW9uKCkKK3sKKyAgICBtX3BhZ2VIZWlnaHQgPSBt
X25leHQtPm1fcGFnZUhlaWdodDsKKyAgICBtX3BhZ2VPZmZzZXQgPSBtX25leHQtPm1fcGFnZU9m
ZnNldDsKKyAgICBtX2NvbHVtbkluZm8gPSBtX25leHQtPm1fY29sdW1uSW5mbzsKK30KKwogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0U3RhdGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRTdGF0ZS5oCShyZXZpc2lv
biA2Njg4NikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMyLDYgKzMyLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBDb2x1
bW5JbmZvOwogY2xhc3MgUmVuZGVyQXJlbmE7CiBjbGFzcyBSZW5kZXJCb3g7CiBjbGFzcyBSZW5k
ZXJPYmplY3Q7CkBAIC00MCw2ICs0MSw4IEBAIGNsYXNzIExheW91dFN0YXRlIDogcHVibGljIE5v
bmNvcHlhYmxlIHsKIHB1YmxpYzoKICAgICBMYXlvdXRTdGF0ZSgpCiAgICAgICAgIDogbV9jbGlw
cGVkKGZhbHNlKQorICAgICAgICAsIG1fcGFnZUhlaWdodCgwKQorICAgICAgICAsIG1fY29sdW1u
SW5mbygwKQogICAgICAgICAsIG1fbmV4dCgwKQogI2lmbmRlZiBOREVCVUcKICAgICAgICAgLCBt
X3JlbmRlcmVyKDApCkBAIC00Nyw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0g
ICAgTGF5b3V0U3RhdGUoTGF5b3V0U3RhdGUqLCBSZW5kZXJCb3gqLCBjb25zdCBJbnRTaXplJiBv
ZmZzZXQpOworICAgIExheW91dFN0YXRlKExheW91dFN0YXRlKiwgUmVuZGVyQm94KiwgY29uc3Qg
SW50U2l6ZSYgb2Zmc2V0LCBpbnQgcGFnZUhlaWdodCwgQ29sdW1uSW5mbyopOwogICAgIExheW91
dFN0YXRlKFJlbmRlck9iamVjdCopOwogCiAgICAgdm9pZCBkZXN0cm95KFJlbmRlckFyZW5hKik7
CkBAIC01OCw2ICs2MSwxMCBAQCBwdWJsaWM6CiAgICAgLy8gT3ZlcnJpZGRlbiB0byBwcmV2ZW50
IHRoZSBub3JtYWwgZGVsZXRlIGZyb20gYmVpbmcgY2FsbGVkLgogICAgIHZvaWQgb3BlcmF0b3Ig
ZGVsZXRlKHZvaWQqLCBzaXplX3QpOwogCisgICAgdm9pZCBjbGVhclBhZ2luYXRpb25JbmZvcm1h
dGlvbigpOworICAgIGJvb2wgcGFnaW5hdGluZ0NvbHVtbnMoKSBjb25zdCB7IHJldHVybiBtX2Nv
bHVtbkluZm87IH0KKyAgICBib29sIHBhZ2luYXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZUhl
aWdodCB8fCBtX2NvbHVtbkluZm87IH0KKwogcHJpdmF0ZToKICAgICAvLyBUaGUgbm9ybWFsIG9w
ZXJhdG9yIG5ldyBpcyBkaXNhbGxvd2VkLgogICAgIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3Qp
IHRocm93KCk7CkBAIC02NSwxMCArNzIsMTYgQEAgcHJpdmF0ZToKIHB1YmxpYzoKICAgICBib29s
IG1fY2xpcHBlZDsKICAgICBJbnRSZWN0IG1fY2xpcFJlY3Q7Ci0gICAgSW50U2l6ZSBtX29mZnNl
dDsgICAgICAgLy8geC95IG9mZnNldCBmcm9tIGNvbnRhaW5lci4KKyAgICBJbnRTaXplIG1fcGFp
bnRPZmZzZXQ7ICAgICAgIC8vIHgveSBvZmZzZXQgZnJvbSBjb250YWluZXIuICBJbmNsdWRlcyBy
ZWxhdGl2ZSBwb3NpdGlvbmluZyBhbmQgc2Nyb2xsIG9mZnNldHMuCisgICAgSW50U2l6ZSBtX2xh
eW91dE9mZnNldDsgICAgICAvLyB4L3kgb2Zmc2V0IGZyb20gY29udGFpbmVyLiAgRG9lcyBub3Qg
aW5jbHVkZSByZWxhdGl2ZSBwb3NpdGlvbmluZyBvciBzY3JvbGwgb2Zmc2V0cy4KICAgICBJbnRT
aXplIG1fbGF5b3V0RGVsdGE7ICAvLyBUcmFuc2llbnQgb2Zmc2V0IGZyb20gdGhlIGZpbmFsIHBv
c2l0aW9uIG9mIHRoZSBvYmplY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB1c2Vk
IHRvIGVuc3VyZSB0aGF0IHJlcGFpbnRzIGhhcHBlbiBpbiB0aGUgY29ycmVjdCBwbGFjZS4KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgdG90YWwgZGVsdGEgYWNjdW11
bGF0ZWQgZnJvbSB0aGUgcm9vdC4KKworICAgIGludCBtX3BhZ2VIZWlnaHQ7ICAgICAgICAgICAg
Ly8gVGhlIGN1cnJlbnQgcGFnZSBoZWlnaHQgZm9yIHRoZSBwYWdpbmF0aW9uIG1vZGVsIHRoYXQg
ZW5jbG9zZXMgdXMuCisgICAgSW50U2l6ZSBtX3BhZ2VPZmZzZXQ7ICAgICAgICAvLyBUaGUgb2Zm
c2V0IG9mIHRoZSBzdGFydCBvZiB0aGUgZmlyc3QgcGFnZSBpbiB0aGUgbmVhcmVzdCBlbmNsb3Np
bmcgcGFnaW5hdGlvbiBtb2RlbC4KKyAgICBDb2x1bW5JbmZvKiBtX2NvbHVtbkluZm87ICAgIC8v
IElmIHRoZSBlbmNsb3NpbmcgcGFnaW5hdGlvbiBtb2RlbCBpcyBhIGNvbHVtbiBtb2RlbCwgdGhl
biB0aGlzIHdpbGwgc3RvcmUgY29sdW1uIGluZm9ybWF0aW9uIGZvciBlYXN5IHJldHJpZXZhbC9t
YW5pcHVsYXRpb24uCisKICAgICBMYXlvdXRTdGF0ZSogbV9uZXh0OwogI2lmbmRlZiBOREVCVUcK
ICAgICBSZW5kZXJPYmplY3QqIG1fcmVuZGVyZXI7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2suY3BwCShyZXZpc2lvbiA2NjkwMykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2Nr
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTExMiw3ICsxMTEyLDcgQEAgdm9pZCBSZW5kZXJCbG9j
azo6bGF5b3V0KCkKICAgICAgICAgY2xlYXJMYXlvdXRPdmVyZmxvdygpOwogfQogCi12b2lkIFJl
bmRlckJsb2NrOjpsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4pCit2b2lkIFJlbmRl
ckJsb2NrOjpsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIGludCBwYWdlSGVpZ2h0
KQogewogICAgIEFTU0VSVChuZWVkc0xheW91dCgpKTsKIApAQCAtMTEyMiw5ICsxMTIyLDYgQEAg
dm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2soYm9vbCByZWxheQogICAgIGlmICghcmVsYXlv
dXRDaGlsZHJlbiAmJiBsYXlvdXRPbmx5UG9zaXRpb25lZE9iamVjdHMoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgTGF5b3V0UmVwYWludGVyIHJlcGFpbnRlcigqdGhpcywgbV9ldmVySGFkTGF5
b3V0ICYmIGNoZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgpKTsKLSAgICBMYXlvdXRTdGF0ZU1h
aW50YWluZXIgc3RhdGVQdXNoZXIodmlldygpLCB0aGlzLCBJbnRTaXplKHgoKSwgeSgpKSwgaGFz
Q29sdW1ucygpIHx8IGhhc1RyYW5zZm9ybSgpIHx8IGhhc1JlZmxlY3Rpb24oKSk7Ci0KICAgICBp
bnQgb2xkV2lkdGggPSB3aWR0aCgpOwogICAgIGludCBvbGRDb2x1bW5XaWR0aCA9IGRlc2lyZWRD
b2x1bW5XaWR0aCgpOwogCkBAIC0xMTQwLDYgKzExMzcsMjggQEAgdm9pZCBSZW5kZXJCbG9jazo6
bGF5b3V0QmxvY2soYm9vbCByZWxheQogCiAgICAgaW50IHByZXZpb3VzSGVpZ2h0ID0gaGVpZ2h0
KCk7CiAgICAgc2V0SGVpZ2h0KDApOworICAgIGJvb2wgaGFzU3BlY2lmaWVkUGFnZUhlaWdodCA9
IGZhbHNlOworICAgIENvbHVtbkluZm8qIGNvbEluZm8gPSBjb2x1bW5JbmZvKCk7CisgICAgaWYg
KGhhc0NvbHVtbnMoKSkgeworICAgICAgICBpZiAoIXBhZ2VIZWlnaHQpIHsKKyAgICAgICAgICAg
IC8vIFdlIG5lZWQgdG8gZ28gYWhlYWQgYW5kIHNldCBvdXIgZXhwbGljaXQgcGFnZSBoZWlnaHQg
aWYgb25lIGV4aXN0cywgc28gdGhhdCB3ZSBjYW4KKyAgICAgICAgICAgIC8vIGF2b2lkIGRvaW5n
IHR3byBsYXlvdXQgcGFzc2VzLgorICAgICAgICAgICAgY2FsY0hlaWdodCgpOworICAgICAgICAg
ICAgaW50IGNvbHVtbkhlaWdodCA9IGNvbnRlbnRIZWlnaHQoKTsKKyAgICAgICAgICAgIGlmIChj
b2x1bW5IZWlnaHQgPiAwKSB7CisgICAgICAgICAgICAgICAgcGFnZUhlaWdodCA9IGNvbHVtbkhl
aWdodDsKKyAgICAgICAgICAgICAgICBoYXNTcGVjaWZpZWRQYWdlSGVpZ2h0ID0gdHJ1ZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHNldEhlaWdodCgwKTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoY29sSW5mby0+Y29sdW1uSGVpZ2h0KCkgIT0gcGFnZUhlaWdodCAmJiBtX2V2ZXJIYWRM
YXlvdXQpIHsKKyAgICAgICAgICAgIGNvbEluZm8tPnNldENvbHVtbkhlaWdodChwYWdlSGVpZ2h0
KTsKKyAgICAgICAgICAgIG1hcmtEZXNjZW5kYW50QmxvY2tzQW5kTGluZXNGb3JMYXlvdXQoKTsg
Ly8gV2UgbmVlZCB0byBkaXJ0eSBhbGwgZGVzY2VuZGFudCBibG9ja3MgYW5kIGxpbmVzLCBzaW5j
ZSB0aGUgY29sdW1uIGhlaWdodCBpcyBkaWZmZXJlbnQgbm93LgorICAgICAgICB9CisgICAgfQor
CisgICAgTGF5b3V0UmVwYWludGVyIHJlcGFpbnRlcigqdGhpcywgbV9ldmVySGFkTGF5b3V0ICYm
IGNoZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgpKTsKKyAgICBMYXlvdXRTdGF0ZU1haW50YWlu
ZXIgc3RhdGVQdXNoZXIodmlldygpLCB0aGlzLCBJbnRTaXplKHgoKSwgeSgpKSwgaGFzQ29sdW1u
cygpIHx8IGhhc1RyYW5zZm9ybSgpIHx8IGhhc1JlZmxlY3Rpb24oKSwgcGFnZUhlaWdodCwgY29s
SW5mbyk7CiAKICAgICAvLyBXZSB1c2UgZm91ciB2YWx1ZXMsIG1heFRvcFBvcywgbWF4VG9wTmVn
LCBtYXhCb3R0b21Qb3MsIGFuZCBtYXhCb3R0b21OZWcsIHRvIHRyYWNrCiAgICAgLy8gb3VyIGN1
cnJlbnQgbWF4aW1hbCBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgbWFyZ2lucy4gIFRoZXNlIHZhbHVl
cyBhcmUgdXNlZCB3aGVuIHdlCkBAIC0xMTg5LDEwICsxMjA4LDkgQEAgdm9pZCBSZW5kZXJCbG9j
azo6bGF5b3V0QmxvY2soYm9vbCByZWxheQogICAgIGlmIChmbG9hdEJvdHRvbSgpID4gKGhlaWdo
dCgpIC0gdG9BZGQpICYmIGV4cGFuZHNUb0VuY2xvc2VPdmVyaGFuZ2luZ0Zsb2F0cygpKQogICAg
ICAgICBzZXRIZWlnaHQoZmxvYXRCb3R0b20oKSArIHRvQWRkKTsKICAgICAKLSAgICAvLyBOb3cg
bGF5IG91dCBvdXIgY29sdW1ucyB3aXRoaW4gdGhpcyBpbnRyaW5zaWMgaGVpZ2h0LCBzaW5jZSB0
aGV5IGNhbiBzbGlnaHRseSBhZmZlY3QgdGhlIGludHJpbnNpYyBoZWlnaHQgYXMKLSAgICAvLyB3
ZSBhZGp1c3QgZm9yIGNsZWFuIGNvbHVtbiBicmVha3MuCi0gICAgaW50IHNpbmdsZUNvbHVtbkJv
dHRvbSA9IGxheW91dENvbHVtbnMoKTsKLQorICAgIGlmIChsYXlvdXRDb2x1bW5zKGhhc1NwZWNp
ZmllZFBhZ2VIZWlnaHQsIHBhZ2VIZWlnaHQsIHN0YXRlUHVzaGVyKSkKKyAgICAgICAgcmV0dXJu
OworIAogICAgIC8vIENhbGN1bGF0ZSBvdXIgbmV3IGhlaWdodC4KICAgICBpbnQgb2xkSGVpZ2h0
ID0gaGVpZ2h0KCk7CiAgICAgY2FsY0hlaWdodCgpOwpAQCAtMTIwNywyMSArMTIyNSwxOCBAQCB2
b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayhib29sIHJlbGF5CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBXZSBoYXZl
IHRvIHJlYmFsYW5jZSBjb2x1bW5zIHRvIHRoZSBuZXcgaGVpZ2h0LgotICAgICAgICBsYXlvdXRD
b2x1bW5zKHNpbmdsZUNvbHVtbkJvdHRvbSk7CiAgICAgfQogCiAgICAgaWYgKHByZXZpb3VzSGVp
Z2h0ICE9IGhlaWdodCgpKQogICAgICAgICByZWxheW91dENoaWxkcmVuID0gdHJ1ZTsKIAotICAg
IC8vIFRoaXMgY2hlY2sgaXMgZGVzaWduZWQgdG8gY2F0Y2ggYW55b25lCi0gICAgLy8gd2hvIHdh
c24ndCBnb2luZyB0byBwcm9wYWdhdGUgZmxvYXQgaW5mb3JtYXRpb24gdXAgdG8gdGhlIHBhcmVu
dCBhbmQgeWV0IGNvdWxkIHBvdGVudGlhbGx5IGJlIHBhaW50ZWQgYnkgaXRzIGFuY2VzdG9yLgot
ICAgIGlmIChpc1Jvb3QoKSB8fCBleHBhbmRzVG9FbmNsb3NlT3ZlcmhhbmdpbmdGbG9hdHMoKSkK
LSAgICAgICAgYWRkT3ZlcmZsb3dGcm9tRmxvYXRzKCk7Ci0KICAgICAvLyBBZGQgb3ZlcmZsb3cg
ZnJvbSBjaGlsZHJlbiAodW5sZXNzIHdlJ3JlIG11bHRpLWNvbHVtbiwgc2luY2UgaW4gdGhhdCBj
YXNlIGFsbCBvdXIgY2hpbGQgb3ZlcmZsb3cgaXMgY2xpcHBlZCBhbnl3YXkpLgogICAgIGlmICgh
aGFzQ29sdW1ucygpKSB7CisgICAgICAgIC8vIFRoaXMgY2hlY2sgaXMgZGVzaWduZWQgdG8gY2F0
Y2ggYW55b25lCisgICAgICAgIC8vIHdobyB3YXNuJ3QgZ29pbmcgdG8gcHJvcGFnYXRlIGZsb2F0
IGluZm9ybWF0aW9uIHVwIHRvIHRoZSBwYXJlbnQgYW5kIHlldCBjb3VsZCBwb3RlbnRpYWxseSBi
ZSBwYWludGVkIGJ5IGl0cyBhbmNlc3Rvci4KKyAgICAgICAgaWYgKGlzUm9vdCgpIHx8IGV4cGFu
ZHNUb0VuY2xvc2VPdmVyaGFuZ2luZ0Zsb2F0cygpKQorICAgICAgICAgICAgYWRkT3ZlcmZsb3dG
cm9tRmxvYXRzKCk7CisKICAgICAgICAgaWYgKGNoaWxkcmVuSW5saW5lKCkpCiAgICAgICAgICAg
ICBhZGRPdmVyZmxvd0Zyb21JbmxpbmVDaGlsZHJlbigpOwogICAgICAgICBlbHNlCkBAIC0xNDg1
LDcgKzE1MDAsOCBAQCBpbnQgUmVuZGVyQmxvY2s6OmNvbGxhcHNlTWFyZ2lucyhSZW5kZXJCCiAg
ICAgaWYgKG1hcmdpbkluZm8ucXVpcmtDb250YWluZXIoKSAmJiBtYXJnaW5JbmZvLmF0VG9wT2ZC
bG9jaygpICYmIChwb3NUb3AgLSBuZWdUb3ApKQogICAgICAgICBtYXJnaW5JbmZvLnNldFRvcFF1
aXJrKHRvcFF1aXJrKTsKIAotICAgIGludCB5cG9zID0gaGVpZ2h0KCk7CisgICAgaW50IGJlZm9y
ZUNvbGxhcHNlWSA9IGhlaWdodCgpOworICAgIGludCB5cG9zID0gYmVmb3JlQ29sbGFwc2VZOwog
ICAgIGlmIChjaGlsZC0+aXNTZWxmQ29sbGFwc2luZ0Jsb2NrKCkpIHsKICAgICAgICAgLy8gVGhp
cyBjaGlsZCBoYXMgbm8gaGVpZ2h0LiAgV2UgbmVlZCB0byBjb21wdXRlIG91cgogICAgICAgICAv
LyBwb3NpdGlvbiBiZWZvcmUgd2UgY29sbGFwc2UgdGhlIGNoaWxkJ3MgbWFyZ2lucyB0b2dldGhl
ciwKQEAgLTE1MjcsNiArMTU0MywxNCBAQCBpbnQgUmVuZGVyQmxvY2s6OmNvbGxhcHNlTWFyZ2lu
cyhSZW5kZXJCCiAgICAgICAgICAgICBtYXJnaW5JbmZvLnNldEJvdHRvbVF1aXJrKGNoaWxkLT5p
c0JvdHRvbU1hcmdpblF1aXJrKCkgfHwgc3R5bGUoKS0+bWFyZ2luQm90dG9tQ29sbGFwc2UoKSA9
PSBNRElTQ0FSRCk7CiAgICAgfQogICAgIAorICAgIC8vIElmIG1hcmdpbnMgd291bGQgcHVsbCB1
cyBwYXN0IHRoZSB0b3Agb2YgdGhlIG5leHQgcGFnZSwgdGhlbiB3ZSBuZWVkIHRvIHB1bGwgYmFj
ayBhbmQgcHJldGVuZCBsaWtlIHRoZSBtYXJnaW5zCisgICAgLy8gY29sbGFwc2VkIGludG8gdGhl
IHBhZ2UgZWRnZS4KKyAgICBib29sIHBhZ2luYXRlZCA9IHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+
cGFnaW5hdGVkKCk7CisgICAgaWYgKHBhZ2luYXRlZCAmJiB5cG9zID4gYmVmb3JlQ29sbGFwc2VZ
KSB7CisgICAgICAgIGludCBvbGRZID0geXBvczsKKyAgICAgICAgeXBvcyA9IG1pbih5cG9zLCBu
ZXh0UGFnZVRvcChiZWZvcmVDb2xsYXBzZVkpKTsKKyAgICAgICAgc2V0SGVpZ2h0KGhlaWdodCgp
ICsgKHlwb3MgLSBvbGRZKSk7CisgICAgfQogICAgIHJldHVybiB5cG9zOwogfQogCkBAIC0xNTg2
LDcgKzE2MTAsMjQgQEAgaW50IFJlbmRlckJsb2NrOjplc3RpbWF0ZVZlcnRpY2FsUG9zaXRpbwog
ICAgICAgICBpbnQgY2hpbGRNYXJnaW5Ub3AgPSBjaGlsZC0+c2VsZk5lZWRzTGF5b3V0KCkgPyBj
aGlsZC0+bWFyZ2luVG9wKCkgOiBjaGlsZC0+Y29sbGFwc2VkTWFyZ2luVG9wKCk7CiAgICAgICAg
IHlQb3NFc3RpbWF0ZSArPSBtYXgobWFyZ2luSW5mby5tYXJnaW4oKSwgY2hpbGRNYXJnaW5Ub3Ap
OwogICAgIH0KKyAgICAKKyAgICBib29sIHBhZ2luYXRlZCA9IHZpZXcoKS0+bGF5b3V0U3RhdGUo
KS0+cGFnaW5hdGVkKCk7CisKKyAgICAvLyBBZGp1c3QgeVBvc0VzdGltYXRlIGRvd24gdG8gdGhl
IG5leHQgcGFnZSBpZiB0aGUgbWFyZ2lucyBhcmUgc28gbGFyZ2UgdGhhdCB3ZSBkb24ndCBmaXQg
b24gdGhlIGN1cnJlbnQKKyAgICAvLyBwYWdlLgorICAgIGlmIChwYWdpbmF0ZWQgJiYgeVBvc0Vz
dGltYXRlID4gaGVpZ2h0KCkpCisgICAgICAgIHlQb3NFc3RpbWF0ZSA9IG1pbih5UG9zRXN0aW1h
dGUsIG5leHRQYWdlVG9wKGhlaWdodCgpKSk7CisKICAgICB5UG9zRXN0aW1hdGUgKz0gZ2V0Q2xl
YXJEZWx0YShjaGlsZCwgeVBvc0VzdGltYXRlKTsKKyAgICAKKyAgICBpZiAocGFnaW5hdGVkKSB7
CisgICAgICAgIC8vIElmIHRoZSBvYmplY3QgaGFzIGEgcGFnZSBvciBjb2x1bW4gYnJlYWsgdmFs
dWUgb2YgImJlZm9yZSIsIHRoZW4gd2Ugc2hvdWxkIHNoaWZ0IHRvIHRoZSB0b3Agb2YgdGhlIG5l
eHQgcGFnZS4KKyAgICAgICAgeVBvc0VzdGltYXRlID0gYXBwbHlCZWZvcmVCcmVhayhjaGlsZCwg
eVBvc0VzdGltYXRlKTsKKyAgICAKKyAgICAgICAgLy8gRm9yIHJlcGxhY2VkIGVsZW1lbnRzIGFu
ZCBzY3JvbGxlZCBlbGVtZW50cywgd2Ugd2FudCB0byBzaGlmdCB0aGVtIHRvIHRoZSBuZXh0IHBh
Z2UgaWYgdGhleSBkb24ndCBmaXQgb24gdGhlIGN1cnJlbnQgb25lLgorICAgICAgICB5UG9zRXN0
aW1hdGUgPSBhZGp1c3RGb3JVbnNwbGl0dGFibGVDaGlsZChjaGlsZCwgeVBvc0VzdGltYXRlKTsK
KyAgICB9CisKICAgICByZXR1cm4geVBvc0VzdGltYXRlOwogfQogCkBAIC0xODA2LDYgKzE4NDcs
MjAgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2tDaGlsZChSZW5kZQogICAgIC8vIE5v
dyBjaGVjayBmb3IgY2xlYXIuCiAgICAgaW50IHlBZnRlckNsZWFyID0gY2xlYXJGbG9hdHNJZk5l
ZWRlZChjaGlsZCwgbWFyZ2luSW5mbywgb2xkVG9wUG9zTWFyZ2luLCBvbGRUb3BOZWdNYXJnaW4s
IHlCZWZvcmVDbGVhcik7CiAgICAgCisgICAgYm9vbCBwYWdpbmF0ZWQgPSB2aWV3KCktPmxheW91
dFN0YXRlKCktPnBhZ2luYXRlZCgpOworICAgIGlmIChwYWdpbmF0ZWQpIHsKKyAgICAgICAgaW50
IG9sZFkgPSB5QWZ0ZXJDbGVhcjsKKyAgICAgICAgCisgICAgICAgIC8vIElmIHRoZSBvYmplY3Qg
aGFzIGEgcGFnZSBvciBjb2x1bW4gYnJlYWsgdmFsdWUgb2YgImJlZm9yZSIsIHRoZW4gd2Ugc2hv
dWxkIHNoaWZ0IHRvIHRoZSB0b3Agb2YgdGhlIG5leHQgcGFnZS4KKyAgICAgICAgeUFmdGVyQ2xl
YXIgPSBhcHBseUJlZm9yZUJyZWFrKGNoaWxkLCB5QWZ0ZXJDbGVhcik7CisgICAgCisgICAgICAg
IC8vIEZvciByZXBsYWNlZCBlbGVtZW50cyBhbmQgc2Nyb2xsZWQgZWxlbWVudHMsIHdlIHdhbnQg
dG8gc2hpZnQgdGhlbSB0byB0aGUgbmV4dCBwYWdlIGlmIHRoZXkgZG9uJ3QgZml0IG9uIHRoZSBj
dXJyZW50IG9uZS4KKyAgICAgICAgeUFmdGVyQ2xlYXIgPSBhZGp1c3RGb3JVbnNwbGl0dGFibGVD
aGlsZChjaGlsZCwgeUFmdGVyQ2xlYXIpOworICAgICAgICAKKyAgICAgICAgLy8gU2ltaWxhciB0
byBob3cgd2UgYXBwbHkgY2xlYXJhbmNlLiAgR28gYWhlYWQgYW5kIGJvb3N0IGhlaWdodCgpIHRv
IGJlIHRoZSBwbGFjZSB3aGVyZSB3ZSdyZSBnb2luZyB0byBwb3NpdGlvbiB0aGUgY2hpbGQuCisg
ICAgICAgIHNldEhlaWdodChoZWlnaHQoKSArICh5QWZ0ZXJDbGVhciAtIG9sZFkpKTsKKyAgICB9
CisKICAgICB2aWV3KCktPmFkZExheW91dERlbHRhKEludFNpemUoMCwgeVBvc0VzdGltYXRlIC0g
eUFmdGVyQ2xlYXIpKTsKICAgICBjaGlsZC0+c2V0TG9jYXRpb24oY2hpbGQtPngoKSwgeUFmdGVy
Q2xlYXIpOwogCkBAIC0xODU5LDYgKzE5MTQsMTMgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0
QmxvY2tDaGlsZChSZW5kZQogICAgICAgICBjaGlsZC0+cmVwYWludE92ZXJoYW5naW5nRmxvYXRz
KHRydWUpOwogICAgIH0KIAorICAgIGlmIChwYWdpbmF0ZWQpIHsKKyAgICAgICAgLy8gQ2hlY2sg
Zm9yIGFuIGFmdGVyIHBhZ2UvY29sdW1uIGJyZWFrLgorICAgICAgICBpbnQgbmV3SGVpZ2h0ID0g
YXBwbHlBZnRlckJyZWFrKGNoaWxkLCBoZWlnaHQoKSwgbWFyZ2luSW5mbyk7CisgICAgICAgIGlm
IChuZXdIZWlnaHQgIT0gaGVpZ2h0KCkpCisgICAgICAgICAgICBzZXRIZWlnaHQobmV3SGVpZ2h0
KTsKKyAgICB9CisKICAgICBBU1NFUlQob2xkTGF5b3V0RGVsdGEgPT0gdmlldygpLT5sYXlvdXRE
ZWx0YSgpKTsKIH0KIApAQCAtMTg4OSw2ICsxOTUxLDkgQEAgYm9vbCBSZW5kZXJCbG9jazo6bGF5
b3V0T25seVBvc2l0aW9uZWRPYgogdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0UG9zaXRpb25lZE9i
amVjdHMoYm9vbCByZWxheW91dENoaWxkcmVuKQogewogICAgIGlmIChtX3Bvc2l0aW9uZWRPYmpl
Y3RzKSB7CisgICAgICAgIGlmIChoYXNDb2x1bW5zKCkpCisgICAgICAgICAgICB2aWV3KCktPmxh
eW91dFN0YXRlKCktPmNsZWFyUGFnaW5hdGlvbkluZm9ybWF0aW9uKCk7IC8vIFBvc2l0aW9uZWQg
b2JqZWN0cyBhcmUgbm90IHBhcnQgb2YgdGhlIGNvbHVtbiBmbG93LCBzbyB0aGV5IGRvbid0IHBh
Z2luYXRlIHdpdGggdGhlIGNvbHVtbnMuCisKICAgICAgICAgUmVuZGVyQm94KiByOwogICAgICAg
ICBJdGVyYXRvciBlbmQgPSBtX3Bvc2l0aW9uZWRPYmplY3RzLT5lbmQoKTsKICAgICAgICAgZm9y
IChJdGVyYXRvciBpdCA9IG1fcG9zaXRpb25lZE9iamVjdHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgewpAQCAtMTkxMCw2ICsxOTc1LDkgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0UG9z
aXRpb25lZE9iamVjdAogICAgICAgICAgICAgICAgIHItPnRyeUxheW91dERvaW5nUG9zaXRpb25l
ZE1vdmVtZW50T25seSgpOwogICAgICAgICAgICAgci0+bGF5b3V0SWZOZWVkZWQoKTsKICAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGhhc0NvbHVtbnMoKSkKKyAgICAgICAgICAgIHZp
ZXcoKS0+bGF5b3V0U3RhdGUoKS0+bV9jb2x1bW5JbmZvID0gY29sdW1uSW5mbygpOyAvLyBGSVhN
RTogS2luZCBvZiBncm9zcy4gV2UganVzdCBwdXQgdGhpcyBiYWNrIGludG8gdGhlIGxheW91dCBz
dGF0ZSBzbyB0aGF0IHBvcCgpIHdpbGwgd29yay4KICAgICB9CiB9CiAKQEAgLTE5OTcsMTIgKzIw
NjUsMTIgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRDb2x1bW5SdWxlcyhQYWludAogCiAgICAg
Ly8gV2UgbmVlZCB0byBkbyBtdWx0aXBsZSBwYXNzZXMsIGJyZWFraW5nIHVwIG91ciBjaGlsZCBw
YWludGluZyBpbnRvIHN0cmlwcy4KICAgICBDb2x1bW5JbmZvKiBjb2xJbmZvID0gY29sdW1uSW5m
bygpOwotICAgIHVuc2lnbmVkIGNvbENvdW50ID0gY29sSW5mby0+Y29sdW1uQ291bnQoKTsKKyAg
ICB1bnNpZ25lZCBjb2xDb3VudCA9IGNvbHVtbkNvdW50KGNvbEluZm8pOwogICAgIGludCBjdXJy
WE9mZnNldCA9IHN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUiA/IDAgOiBjb250ZW50V2lkdGgo
KTsKICAgICBpbnQgcnVsZUFkZCA9IGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCk7CiAgICAg
aW50IHJ1bGVYID0gc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8gMCA6IGNvbnRlbnRXaWR0
aCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb2xDb3VudDsgaSsrKSB7Ci0gICAg
ICAgIEludFJlY3QgY29sUmVjdCA9IGNvbEluZm8tPmNvbHVtblJlY3RBdChpKTsKKyAgICAgICAg
SW50UmVjdCBjb2xSZWN0ID0gY29sdW1uUmVjdEF0KGNvbEluZm8sIGkpOwogCiAgICAgICAgIC8v
IE1vdmUgdG8gdGhlIG5leHQgcG9zaXRpb24uCiAgICAgICAgIGlmIChzdHlsZSgpLT5kaXJlY3Rp
b24oKSA9PSBMVFIpIHsKQEAgLTIwMzMsMTQgKzIxMDEsMTQgQEAgdm9pZCBSZW5kZXJCbG9jazo6
cGFpbnRDb2x1bW5Db250ZW50cyhQYQogICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9IHBh
aW50SW5mby5jb250ZXh0OwogICAgIGludCBjb2xHYXAgPSBjb2x1bW5HYXAoKTsKICAgICBDb2x1
bW5JbmZvKiBjb2xJbmZvID0gY29sdW1uSW5mbygpOwotICAgIHVuc2lnbmVkIGNvbENvdW50ID0g
Y29sSW5mby0+Y29sdW1uQ291bnQoKTsKKyAgICB1bnNpZ25lZCBjb2xDb3VudCA9IGNvbHVtbkNv
dW50KGNvbEluZm8pOwogICAgIGlmICghY29sQ291bnQpCiAgICAgICAgIHJldHVybjsKLSAgICBp
bnQgY3VyclhPZmZzZXQgPSBzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIgPyAwIDogY29udGVu
dFdpZHRoKCkgLSBjb2xJbmZvLT5jb2x1bW5SZWN0QXQoMCkud2lkdGgoKTsKKyAgICBpbnQgY3Vy
clhPZmZzZXQgPSBzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIgPyAwIDogY29udGVudFdpZHRo
KCkgLSBjb2x1bW5SZWN0QXQoY29sSW5mbywgMCkud2lkdGgoKTsKICAgICBpbnQgY3VycllPZmZz
ZXQgPSAwOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb2xDb3VudDsgaSsrKSB7CiAg
ICAgICAgIC8vIEZvciBlYWNoIHJlY3QsIHdlIGNsaXAgdG8gdGhlIHJlY3QsIGFuZCB0aGVuIHdl
IGFkanVzdCBvdXIgY29vcmRzLgotICAgICAgICBJbnRSZWN0IGNvbFJlY3QgPSBjb2xJbmZvLT5j
b2x1bW5SZWN0QXQoaSk7CisgICAgICAgIEludFJlY3QgY29sUmVjdCA9IGNvbHVtblJlY3RBdChj
b2xJbmZvLCBpKTsKICAgICAgICAgY29sUmVjdC5tb3ZlKHR4LCB0eSk7CiAgICAgICAgIFBhaW50
SW5mbyBpbmZvKHBhaW50SW5mbyk7CiAgICAgICAgIGluZm8ucmVjdC5pbnRlcnNlY3QoY29sUmVj
dCk7CkBAIC0yMDk4LDE0ICsyMTY2LDEzIEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50Q2hpbGRy
ZW4oUGFpbnRJbmYKICAgICBpbmZvLnVwZGF0ZVBhaW50aW5nUm9vdEZvckNoaWxkcmVuKHRoaXMp
OwogICAgIAogICAgIFJlbmRlclZpZXcqIHJlbmRlclZpZXcgPSB2aWV3KCk7Ci0gICAgYm9vbCB1
c2VQcmludFJlY3QgPSAhcmVuZGVyVmlldy0+cHJpbnRSZWN0KCkuaXNFbXB0eSgpICYmICFkb2N1
bWVudCgpLT5zZXR0aW5ncygpLT5wYWdpbmF0ZUR1cmluZ0xheW91dEVuYWJsZWQoKTsKKyAgICBi
b29sIHVzZVByaW50UmVjdCA9ICFyZW5kZXJWaWV3LT5wcmludFJlY3QoKS5pc0VtcHR5KCk7CiAg
ICAgCiAgICAgYm9vbCBjaGVja1BhZ2VCcmVha3MgPSBkb2N1bWVudCgpLT5wYWdpbmF0ZWQoKSAm
JiAhZG9jdW1lbnQoKS0+c2V0dGluZ3MoKS0+cGFnaW5hdGVEdXJpbmdMYXlvdXRFbmFibGVkKCk7
Ci0gICAgYm9vbCBjaGVja0NvbHVtbkJyZWFrcyA9ICFjaGVja1BhZ2VCcmVha3MgJiYgdXNlUHJp
bnRSZWN0OwogCiAgICAgZm9yIChSZW5kZXJCb3gqIGNoaWxkID0gZmlyc3RDaGlsZEJveCgpOyBj
aGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmdCb3goKSkgeyAgICAgICAgCiAgICAgICAg
IC8vIENoZWNrIGZvciBwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzLCBhbmQgaWYgaXQncyBzZXQs
IGJyZWFrIGFuZCBiYWlsLgotICAgICAgICBib29sIGNoZWNrQmVmb3JlQWx3YXlzID0gIWNoaWxk
cmVuSW5saW5lKCkgJiYgKChjaGVja1BhZ2VCcmVha3MgJiYgY2hpbGQtPnN0eWxlKCktPnBhZ2VC
cmVha0JlZm9yZSgpID09IFBCQUxXQVlTKSB8fCAoY2hlY2tDb2x1bW5CcmVha3MgJiYgY2hpbGQt
PnN0eWxlKCktPmNvbHVtbkJyZWFrQmVmb3JlKCkgPT0gUEJBTFdBWVMpKTsKKyAgICAgICAgYm9v
bCBjaGVja0JlZm9yZUFsd2F5cyA9ICFjaGlsZHJlbklubGluZSgpICYmIChjaGVja1BhZ2VCcmVh
a3MgJiYgY2hpbGQtPnN0eWxlKCktPnBhZ2VCcmVha0JlZm9yZSgpID09IFBCQUxXQVlTKTsKICAg
ICAgICAgaWYgKGNoZWNrQmVmb3JlQWx3YXlzCiAgICAgICAgICAgICAmJiAodHkgKyBjaGlsZC0+
eSgpKSA+IHBhaW50SW5mby5yZWN0LnkoKQogICAgICAgICAgICAgJiYgKHR5ICsgY2hpbGQtPnko
KSkgPCBwYWludEluZm8ucmVjdC5ib3R0b20oKSkgewpAQCAtMjEyOCw3ICsyMTk1LDcgQEAgdm9p
ZCBSZW5kZXJCbG9jazo6cGFpbnRDaGlsZHJlbihQYWludEluZgogICAgICAgICAgICAgY2hpbGQt
PnBhaW50KGluZm8sIHR4LCB0eSk7CiAKICAgICAgICAgLy8gQ2hlY2sgZm9yIHBhZ2UtYnJlYWst
YWZ0ZXI6IGFsd2F5cywgYW5kIGlmIGl0J3Mgc2V0LCBicmVhayBhbmQgYmFpbC4KLSAgICAgICAg
Ym9vbCBjaGVja0FmdGVyQWx3YXlzID0gIWNoaWxkcmVuSW5saW5lKCkgJiYgKChjaGVja1BhZ2VC
cmVha3MgJiYgY2hpbGQtPnN0eWxlKCktPnBhZ2VCcmVha0FmdGVyKCkgPT0gUEJBTFdBWVMpIHx8
IChjaGVja0NvbHVtbkJyZWFrcyAmJiBjaGlsZC0+c3R5bGUoKS0+Y29sdW1uQnJlYWtBZnRlcigp
ID09IFBCQUxXQVlTKSk7CisgICAgICAgIGJvb2wgY2hlY2tBZnRlckFsd2F5cyA9ICFjaGlsZHJl
bklubGluZSgpICYmIChjaGVja1BhZ2VCcmVha3MgJiYgY2hpbGQtPnN0eWxlKCktPnBhZ2VCcmVh
a0FmdGVyKCkgPT0gUEJBTFdBWVMpOwogICAgICAgICBpZiAoY2hlY2tBZnRlckFsd2F5cwogICAg
ICAgICAgICAgJiYgKHR5ICsgY2hpbGQtPnkoKSArIGNoaWxkLT5oZWlnaHQoKSkgPiBwYWludElu
Zm8ucmVjdC55KCkKICAgICAgICAgICAgICYmICh0eSArIGNoaWxkLT55KCkgKyBjaGlsZC0+aGVp
Z2h0KCkpIDwgcGFpbnRJbmZvLnJlY3QuYm90dG9tKCkpIHsKQEAgLTI3OTYsMTMgKzI4NjMsMjIg
QEAgdm9pZCBSZW5kZXJCbG9jazo6aW5zZXJ0RmxvYXRpbmdPYmplY3QoUgogCiAgICAgLy8gQ3Jl
YXRlIHRoZSBzcGVjaWFsIG9iamVjdCBlbnRyeSAmIGFwcGVuZCBpdCB0byB0aGUgbGlzdAogCi0g
ICAgby0+bGF5b3V0SWZOZWVkZWQoKTsKLQogICAgIEZsb2F0aW5nT2JqZWN0KiBuZXdPYmogPSBu
ZXcgRmxvYXRpbmdPYmplY3Qoby0+c3R5bGUoKS0+ZmxvYXRpbmcoKSA9PSBGTEVGVCA/IEZsb2F0
aW5nT2JqZWN0OjpGbG9hdExlZnQgOiBGbG9hdGluZ09iamVjdDo6RmxvYXRSaWdodCk7CiAKICAg
ICBuZXdPYmotPm1fdG9wID0gLTE7CiAgICAgbmV3T2JqLT5tX2JvdHRvbSA9IC0xOworICAgIAor
ICAgIC8vIE91ciBsb2NhdGlvbiBpcyBpcnJlbGV2YW50IGlmIHdlJ3JlIHVuc3BsaXR0YWJsZSBv
ciBubyBwYWdpbmF0aW9uIGlzIGluIGVmZmVjdC4gIEp1c3QgZ28gYWhlYWQKKyAgICAvLyBhbmQg
bGF5IG91dCB0aGUgZmxvYXQuCisgICAgYm9vbCBhZmZlY3RlZEJ5UGFnaW5hdGlvbiA9IG8tPmlz
UmVuZGVyQmxvY2soKSAmJiB2aWV3KCktPmxheW91dFN0YXRlKCktPm1fcGFnZUhlaWdodDsKKyAg
ICBpZiAoIWFmZmVjdGVkQnlQYWdpbmF0aW9uKQorICAgICAgICBvLT5sYXlvdXRJZk5lZWRlZCgp
OworICAgIGVsc2UgeworICAgICAgICBvLT5jYWxjV2lkdGgoKTsKKyAgICAgICAgby0+Y2FsY1Zl
cnRpY2FsTWFyZ2lucygpOworICAgIH0KICAgICBuZXdPYmotPm1fd2lkdGggPSBvLT53aWR0aCgp
ICsgby0+bWFyZ2luTGVmdCgpICsgby0+bWFyZ2luUmlnaHQoKTsKKwogICAgIG5ld09iai0+bV9z
aG91bGRQYWludCA9ICFvLT5oYXNTZWxmUGFpbnRpbmdMYXllcigpOyAvLyBJZiBhIGxheWVyIGV4
aXN0cywgdGhlIGZsb2F0IHdpbGwgcGFpbnQgaXRzZWxmLiAgT3RoZXJ3aXNlIHNvbWVvbmUgZWxz
ZSB3aWxsLgogICAgIG5ld09iai0+bV9pc0Rlc2NlbmRhbnQgPSB0cnVlOwogICAgIG5ld09iai0+
bV9yZW5kZXJlciA9IG87CkBAIC0yODY3LDE2ICsyOTQzLDE1IEBAIGJvb2wgUmVuZGVyQmxvY2s6
OnBvc2l0aW9uTmV3RmxvYXRzKCkKICAgICAgICAgfQogCiAgICAgICAgIFJlbmRlckJveCogbyA9
IGYtPm1fcmVuZGVyZXI7Ci0gICAgICAgIGludCBfaGVpZ2h0ID0gby0+aGVpZ2h0KCkgKyBvLT5t
YXJnaW5Ub3AoKSArIG8tPm1hcmdpbkJvdHRvbSgpOwogCiAgICAgICAgIGludCBybyA9IHJpZ2h0
T2Zmc2V0KCk7IC8vIENvbnN0YW50IHBhcnQgb2YgcmlnaHQgb2Zmc2V0LgotICAgICAgICBpbnQg
bG8gPSBsZWZ0T2Zmc2V0KCk7IC8vIENvbnN0YXQgcGFydCBvZiBsZWZ0IG9mZnNldC4KKyAgICAg
ICAgaW50IGxvID0gbGVmdE9mZnNldCgpOyAvLyBDb25zdGFudCBwYXJ0IG9mIGxlZnQgb2Zmc2V0
LgogICAgICAgICBpbnQgZndpZHRoID0gZi0+bV93aWR0aDsgLy8gVGhlIHdpZHRoIHdlIGxvb2sg
Zm9yLgogICAgICAgICBpZiAocm8gLSBsbyA8IGZ3aWR0aCkKICAgICAgICAgICAgIGZ3aWR0aCA9
IHJvIC0gbG87IC8vIE5ldmVyIGxvb2sgZm9yIG1vcmUgdGhhbiB3aGF0IHdpbGwgYmUgYXZhaWxh
YmxlLgogICAgICAgICAKICAgICAgICAgSW50UmVjdCBvbGRSZWN0KG8tPngoKSwgby0+eSgpICwg
by0+d2lkdGgoKSwgby0+aGVpZ2h0KCkpOwotICAgICAgICAKKwogICAgICAgICBpZiAoby0+c3R5
bGUoKS0+Y2xlYXIoKSAmIENMRUZUKQogICAgICAgICAgICAgeSA9IG1heChsZWZ0Qm90dG9tKCks
IHkpOwogICAgICAgICBpZiAoby0+c3R5bGUoKS0+Y2xlYXIoKSAmIENSSUdIVCkKQEAgLTI5MDUs
OSArMjk4MCwxNiBAQCBib29sIFJlbmRlckJsb2NrOjpwb3NpdGlvbk5ld0Zsb2F0cygpCiAgICAg
ICAgICAgICBvLT5zZXRMb2NhdGlvbihmeCAtIG8tPm1hcmdpblJpZ2h0KCkgLSBvLT53aWR0aCgp
LCB5ICsgby0+bWFyZ2luVG9wKCkpOwogICAgICAgICB9CiAKLSAgICAgICAgZi0+bV90b3AgPSB5
OwotICAgICAgICBmLT5tX2JvdHRvbSA9IGYtPm1fdG9wICsgX2hlaWdodDsKKyAgICAgICAgYm9v
bCBhZmZlY3RlZEJ5UGFnaW5hdGlvbiA9IG8tPmlzUmVuZGVyQmxvY2soKSAmJiB2aWV3KCktPmxh
eW91dFN0YXRlKCktPm1fcGFnZUhlaWdodDsKKyAgICAgICAgaWYgKGFmZmVjdGVkQnlQYWdpbmF0
aW9uKSB7CisgICAgICAgICAgICBpZiAob2xkUmVjdC5sb2NhdGlvbigpICE9IG8tPmxvY2F0aW9u
KCkpCisgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyQmxvY2sqPihvKS0+bWFya0Rl
c2NlbmRhbnRCbG9ja3NBbmRMaW5lc0ZvckxheW91dCgpOworICAgICAgICAgICAgby0+bGF5b3V0
SWZOZWVkZWQoKTsKKyAgICAgICAgfQogCisgICAgICAgIGYtPm1fdG9wID0geTsKKyAgICAgICAg
Zi0+bV9ib3R0b20gPSBmLT5tX3RvcCArIG8tPm1hcmdpblRvcCgpICsgby0+aGVpZ2h0KCkgKyBv
LT5tYXJnaW5Cb3R0b20oKTsKKyAgICAgICAgCiAgICAgICAgIC8vIElmIHRoZSBjaGlsZCBtb3Zl
ZCwgd2UgaGF2ZSB0byByZXBhaW50IGl0LgogICAgICAgICBpZiAoby0+Y2hlY2tGb3JSZXBhaW50
RHVyaW5nTGF5b3V0KCkpCiAgICAgICAgICAgICBvLT5yZXBhaW50RHVyaW5nTGF5b3V0SWZNb3Zl
ZChvbGRSZWN0KTsKQEAgLTMxNTgsOCArMzI0MCw4IEBAIGludCBSZW5kZXJCbG9jazo6bG93ZXN0
UG9zaXRpb24oYm9vbCBpbmMKIAogICAgIGlmIChoYXNDb2x1bW5zKCkpIHsKICAgICAgICAgQ29s
dW1uSW5mbyogY29sSW5mbyA9IGNvbHVtbkluZm8oKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGNvbEluZm8tPmNvbHVtbkNvdW50KCk7IGkrKykKLSAgICAgICAgICAgIGJvdHRv
bSA9IG1heChib3R0b20sIGNvbEluZm8tPmNvbHVtblJlY3RBdChpKS5ib3R0b20oKSArIHJlbGF0
aXZlT2Zmc2V0KTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvbHVtbkNvdW50
KGNvbEluZm8pOyBpKyspCisgICAgICAgICAgICBib3R0b20gPSBtYXgoYm90dG9tLCBjb2x1bW5S
ZWN0QXQoY29sSW5mbywgaSkuYm90dG9tKCkgKyByZWxhdGl2ZU9mZnNldCk7CiAgICAgICAgIHJl
dHVybiBib3R0b207CiAgICAgfQogCkBAIC0zMjUzLDggKzMzMzUsOSBAQCBpbnQgUmVuZGVyQmxv
Y2s6OnJpZ2h0bW9zdFBvc2l0aW9uKGJvb2wgCiAgICAgICAgIC8vIFRoaXMgb25seSBtYXR0ZXJz
IGZvciBMVFIKICAgICAgICAgaWYgKHN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUikgewogICAg
ICAgICAgICAgQ29sdW1uSW5mbyogY29sSW5mbyA9IGNvbHVtbkluZm8oKTsKLSAgICAgICAgICAg
IGlmIChjb2xJbmZvLT5jb2x1bW5Db3VudCgpKQotICAgICAgICAgICAgICAgIHJpZ2h0ID0gbWF4
KGNvbEluZm8tPmNvbHVtblJlY3RBdChjb2xJbmZvLT5jb2x1bW5Db3VudCgpIC0gMSkucmlnaHQo
KSArIHJlbGF0aXZlT2Zmc2V0LCByaWdodCk7CisgICAgICAgICAgICB1bnNpZ25lZCBjb3VudCA9
IGNvbHVtbkNvdW50KGNvbEluZm8pOworICAgICAgICAgICAgaWYgKGNvdW50KQorICAgICAgICAg
ICAgICAgIHJpZ2h0ID0gbWF4KGNvbHVtblJlY3RBdChjb2xJbmZvLCBjb3VudCAtIDEpLnJpZ2h0
KCkgKyByZWxhdGl2ZU9mZnNldCwgcmlnaHQpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBy
aWdodDsKICAgICB9CkBAIC0zMzUzLDggKzM0MzYsOSBAQCBpbnQgUmVuZGVyQmxvY2s6OmxlZnRt
b3N0UG9zaXRpb24oYm9vbCBpCiAgICAgICAgIC8vIFRoaXMgb25seSBtYXR0ZXJzIGZvciBSVEwK
ICAgICAgICAgaWYgKHN0eWxlKCktPmRpcmVjdGlvbigpID09IFJUTCkgewogICAgICAgICAgICAg
Q29sdW1uSW5mbyogY29sSW5mbyA9IGNvbHVtbkluZm8oKTsKLSAgICAgICAgICAgIGlmIChjb2xJ
bmZvLT5jb2x1bW5Db3VudCgpKQotICAgICAgICAgICAgICAgIGxlZnQgPSBtaW4oY29sSW5mby0+
Y29sdW1uUmVjdEF0KGNvbEluZm8tPmNvbHVtbkNvdW50KCkgLSAxKS54KCkgKyByZWxhdGl2ZU9m
ZnNldCwgbGVmdCk7CisgICAgICAgICAgICB1bnNpZ25lZCBjb3VudCA9IGNvbHVtbkNvdW50KGNv
bEluZm8pOworICAgICAgICAgICAgaWYgKGNvdW50KQorICAgICAgICAgICAgICAgIGxlZnQgPSBt
aW4oY29sdW1uUmVjdEF0KGNvbEluZm8sIGNvdW50IC0gMSkueCgpICsgcmVsYXRpdmVPZmZzZXQs
IGxlZnQpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBsZWZ0OwogICAgIH0KQEAgLTM2NjQs
MzAgKzM3NDgsMjQgQEAgdm9pZCBSZW5kZXJCbG9jazo6bWFya0FsbERlc2NlbmRhbnRzV2l0aAog
ICAgIH0KIH0KIAotaW50IFJlbmRlckJsb2NrOjp2aXNpYmxlVG9wT2ZIaWdoZXN0RmxvYXRFeHRl
bmRpbmdCZWxvdyhpbnQgYm90dG9tLCBpbnQgbWF4SGVpZ2h0KSBjb25zdAordm9pZCBSZW5kZXJC
bG9jazo6bWFya0Rlc2NlbmRhbnRCbG9ja3NBbmRMaW5lc0ZvckxheW91dChib29sIGluTGF5b3V0
KQogewotICAgIGludCB0b3AgPSBib3R0b207Ci0gICAgaWYgKG1fZmxvYXRpbmdPYmplY3RzKSB7
Ci0gICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdDsKLSAgICAgICAgZm9yIChE
ZXByZWNhdGVkUHRyTGlzdEl0ZXJhdG9yPEZsb2F0aW5nT2JqZWN0PiBpdCgqbV9mbG9hdGluZ09i
amVjdHMpOyAoZmxvYXRpbmdPYmplY3QgPSBpdC5jdXJyZW50KCkpOyArK2l0KSB7Ci0gICAgICAg
ICAgICBSZW5kZXJCb3gqIGZsb2F0aW5nQm94ID0gZmxvYXRpbmdPYmplY3QtPm1fcmVuZGVyZXI7
Ci0gICAgICAgICAgICBJbnRSZWN0IHZpc2libGVPdmVyZmxvdyA9IGZsb2F0aW5nQm94LT52aXNp
YmxlT3ZlcmZsb3dSZWN0KCk7Ci0gICAgICAgICAgICB2aXNpYmxlT3ZlcmZsb3cubW92ZShmbG9h
dGluZ0JveC0+eCgpLCBmbG9hdGluZ0JveC0+eSgpKTsKLSAgICAgICAgICAgIGlmICh2aXNpYmxl
T3ZlcmZsb3cueSgpIDwgdG9wICYmIHZpc2libGVPdmVyZmxvdy5ib3R0b20oKSA+IGJvdHRvbSAm
JiB2aXNpYmxlT3ZlcmZsb3cuaGVpZ2h0KCkgPD0gbWF4SGVpZ2h0ICYmIGZsb2F0aW5nQm94LT5j
b250YWluaW5nQmxvY2soKSA9PSB0aGlzKQotICAgICAgICAgICAgICAgIHRvcCA9IHZpc2libGVP
dmVyZmxvdy55KCk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgaWYgKCFtX2V2ZXJIYWRMYXlvdXQp
CisgICAgICAgIHJldHVybjsKIAotICAgIGlmICghY2hpbGRyZW5JbmxpbmUoKSkgewotICAgICAg
ICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9
IGNoaWxkLT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgICAgICBpZiAoY2hpbGQtPmlzRmxvYXRp
bmdPclBvc2l0aW9uZWQoKSB8fCAhY2hpbGQtPmlzUmVuZGVyQmxvY2soKSkKLSAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIFJlbmRlckJsb2NrKiBjaGlsZEJsb2NrID0gdG9S
ZW5kZXJCbG9jayhjaGlsZCk7Ci0gICAgICAgICAgICB0b3AgPSBtaW4odG9wLCBjaGlsZEJsb2Nr
LT55KCkgKyBjaGlsZEJsb2NrLT52aXNpYmxlVG9wT2ZIaWdoZXN0RmxvYXRFeHRlbmRpbmdCZWxv
dyhib3R0b20gLSBjaGlsZEJsb2NrLT55KCksIG1heEhlaWdodCkpOwotICAgICAgICB9Ci0gICAg
fQorICAgIGlmIChjaGlsZHJlbklubGluZSgpKQorICAgICAgICBzZXROZWVkc0xheW91dCh0cnVl
LCAhaW5MYXlvdXQpOyAvLyBXZSB3YW50IHRvIGZvcmNlIGEgZnVsbCBsaW5lIGxheW91dCB0b28u
CisgICAgZWxzZQorICAgICAgICBzZXRDaGlsZE5lZWRzTGF5b3V0KHRydWUsICFpbkxheW91dCk7
CiAKLSAgICByZXR1cm4gdG9wOworICAgIC8vIEl0ZXJhdGUgb3ZlciBvdXIgY2hpbGRyZW4gYW5k
IG1hcmsgdGhlbSBhcyBuZWVkZWQuCisgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gZmly
c3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgeworICAgICAg
ICBpZiAoY2hpbGQtPmlzUG9zaXRpb25lZCgpIHx8ICFjaGlsZC0+aXNSZW5kZXJCbG9jaygpKQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIFJlbmRlckJsb2NrKiBjaGlsZEJsb2NrID0g
dG9SZW5kZXJCbG9jayhjaGlsZCk7CisgICAgICAgIGlmICghY2hpbGRCbG9jay0+aXNJbmxpbmUo
KSkKKyAgICAgICAgICAgIGNoaWxkQmxvY2stPm1hcmtEZXNjZW5kYW50QmxvY2tzQW5kTGluZXNG
b3JMYXlvdXQoaW5MYXlvdXQpOworICAgIH0KIH0KIAogaW50IFJlbmRlckJsb2NrOjpnZXRDbGVh
ckRlbHRhKFJlbmRlckJveCogY2hpbGQsIGludCB5UG9zKQpAQCAtMzg0NywxNiArMzkyNSwxNiBA
QCBib29sIFJlbmRlckJsb2NrOjpoaXRUZXN0Q29sdW1ucyhjb25zdCBICiB7CiAgICAgLy8gV2Ug
bmVlZCB0byBkbyBtdWx0aXBsZSBwYXNzZXMsIGJyZWFraW5nIHVwIG91ciBoaXQgdGVzdGluZyBp
bnRvIHN0cmlwcy4KICAgICBDb2x1bW5JbmZvKiBjb2xJbmZvID0gY29sdW1uSW5mbygpOwotICAg
IGludCBjb2xDb3VudCA9IGNvbEluZm8tPmNvbHVtbkNvdW50KCk7CisgICAgaW50IGNvbENvdW50
ID0gY29sdW1uQ291bnQoY29sSW5mbyk7CiAgICAgaWYgKCFjb2xDb3VudCkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIGludCBsZWZ0ID0gYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKTsK
ICAgICBpbnQgY3VycllPZmZzZXQgPSAwOwogICAgIGludCBpOwogICAgIGZvciAoaSA9IDA7IGkg
PCBjb2xDb3VudDsgaSsrKQotICAgICAgICBjdXJyWU9mZnNldCAtPSBjb2xJbmZvLT5jb2x1bW5S
ZWN0QXQoaSkuaGVpZ2h0KCk7CisgICAgICAgIGN1cnJZT2Zmc2V0IC09IGNvbHVtblJlY3RBdChj
b2xJbmZvLCBpKS5oZWlnaHQoKTsKICAgICBmb3IgKGkgPSBjb2xDb3VudCAtIDE7IGkgPj0gMDsg
aS0tKSB7Ci0gICAgICAgIEludFJlY3QgY29sUmVjdCA9IGNvbEluZm8tPmNvbHVtblJlY3RBdChp
KTsKKyAgICAgICAgSW50UmVjdCBjb2xSZWN0ID0gY29sdW1uUmVjdEF0KGNvbEluZm8sIGkpOwog
ICAgICAgICBpbnQgY3VyclhPZmZzZXQgPSBjb2xSZWN0LngoKSAtIGxlZnQ7CiAgICAgICAgIGN1
cnJZT2Zmc2V0ICs9IGNvbFJlY3QuaGVpZ2h0KCk7CiAgICAgICAgIGNvbFJlY3QubW92ZSh0eCwg
dHkpOwpAQCAtNDE1MCw4ICs0MjI4LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6c2V0RGVzaXJlZENv
bHVtbkNvdW50QQogICAgIGJvb2wgZGVzdHJveUNvbHVtbnMgPSAhZmlyc3RDaGlsZCgpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHx8IChjb3VudCA9PSAxICYmIHN0eWxlKCktPmhhc0F1dG9D
b2x1bW5XaWR0aCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBmaXJzdENoaWxkKCkt
PmlzQW5vbnltb3VzQ29sdW1uc0Jsb2NrKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgfHwg
Zmlyc3RDaGlsZCgpLT5pc0Fub255bW91c0NvbHVtblNwYW5CbG9jaygpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgIHx8IGRvY3VtZW50KCktPnNldHRpbmdzKCktPnBhZ2luYXRlRHVyaW5nTGF5
b3V0RW5hYmxlZCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBmaXJzdENoaWxkKCkt
PmlzQW5vbnltb3VzQ29sdW1uU3BhbkJsb2NrKCk7CiAgICAgaWYgKGRlc3Ryb3lDb2x1bW5zKSB7
CiAgICAgICAgIGlmIChoYXNDb2x1bW5zKCkpIHsKICAgICAgICAgICAgIGRlbGV0ZSBnQ29sdW1u
SW5mb01hcC0+dGFrZSh0aGlzKTsKQEAgLTQxOTQsMTMzICs0MjcxLDU4IEBAIENvbHVtbkluZm8q
IFJlbmRlckJsb2NrOjpjb2x1bW5JbmZvKCkgY28KICAgICByZXR1cm4gZ0NvbHVtbkluZm9NYXAt
PmdldCh0aGlzKTsgICAgCiB9CiAKLWludCBSZW5kZXJCbG9jazo6bGF5b3V0Q29sdW1ucyhpbnQg
ZW5kT2ZDb250ZW50LCBpbnQgcmVxdWVzdGVkQ29sdW1uSGVpZ2h0KQordW5zaWduZWQgUmVuZGVy
QmxvY2s6OmNvbHVtbkNvdW50KENvbHVtbkluZm8qIGNvbEluZm8pIGNvbnN0CiB7Ci0gICAgLy8g
RG9uJ3QgZG8gYW55dGhpbmcgaWYgd2UgaGF2ZSBubyBjb2x1bW5zCi0gICAgaWYgKCFoYXNDb2x1
bW5zKCkpCi0gICAgICAgIHJldHVybiAtMTsKKyAgICBBU1NFUlQoaGFzQ29sdW1ucygpICYmIGdD
b2x1bW5JbmZvTWFwLT5nZXQodGhpcykgPT0gY29sSW5mbyk7CisgICAgcmV0dXJuIGNvbEluZm8t
PmNvbHVtbkNvdW50KCk7Cit9CiAKLSAgICBDb2x1bW5JbmZvKiBpbmZvID0gZ0NvbHVtbkluZm9N
YXAtPmdldCh0aGlzKTsKLSAgICBpbnQgZGVzaXJlZENvbHVtbldpZHRoID0gaW5mby0+ZGVzaXJl
ZENvbHVtbldpZHRoKCk7Ci0gICAgaW50IGRlc2lyZWRDb2x1bW5Db3VudCA9IGluZm8tPmRlc2ly
ZWRDb2x1bW5Db3VudCgpOwotICAgIAotICAgIGJvb2wgY29tcHV0ZUludHJpbnNpY0hlaWdodCA9
IChlbmRPZkNvbnRlbnQgPT0gLTEpOwotCi0gICAgLy8gRmlsbCB0aGUgY29sdW1ucyBpbiB0byB0
aGUgYXZhaWxhYmxlIGhlaWdodC4gIEF0dGVtcHQgdG8gYmFsYW5jZSB0aGUgaGVpZ2h0IG9mIHRo
ZSBjb2x1bW5zLgotICAgIC8vIEFkZCBpbiBoYWxmIG91ciBsaW5lLWhlaWdodCB0byBoZWxwIHdp
dGggYmVzdC1ndWVzcyBpbml0aWFsIGJhbGFuY2luZy4KLSAgICBpbnQgY29sdW1uU2xvcCA9IGxp
bmVIZWlnaHQoZmFsc2UpIC8gMjsKLSAgICBpbnQgcmVtYWluaW5nU2xvcFNwYWNlID0gY29sdW1u
U2xvcCAqIGRlc2lyZWRDb2x1bW5Db3VudDsKLSAgICBpbnQgYXZhaWxhYmxlSGVpZ2h0ID0gY29u
dGVudEhlaWdodCgpOwotICAgIGludCBjb2xIZWlnaHQ7Ci0gICAgaWYgKGNvbXB1dGVJbnRyaW5z
aWNIZWlnaHQgJiYgcmVxdWVzdGVkQ29sdW1uSGVpZ2h0ID49IDApCi0gICAgICAgIGNvbEhlaWdo
dCA9IHJlcXVlc3RlZENvbHVtbkhlaWdodDsKLSAgICBlbHNlIGlmIChjb21wdXRlSW50cmluc2lj
SGVpZ2h0KQotICAgICAgICBjb2xIZWlnaHQgPSBtaW4oYXZhaWxhYmxlSGVpZ2h0LCBhdmFpbGFi
bGVIZWlnaHQgLyBkZXNpcmVkQ29sdW1uQ291bnQgKyBjb2x1bW5TbG9wKTsKLSAgICBlbHNlCi0g
ICAgICAgIGNvbEhlaWdodCA9IGF2YWlsYWJsZUhlaWdodDsKLSAgICBpbnQgb3JpZ2luYWxDb2xI
ZWlnaHQgPSBjb2xIZWlnaHQ7CitJbnRSZWN0IFJlbmRlckJsb2NrOjpjb2x1bW5SZWN0QXQoQ29s
dW1uSW5mbyogY29sSW5mbywgdW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7CisgICAgQVNTRVJUKGhh
c0NvbHVtbnMoKSAmJiBnQ29sdW1uSW5mb01hcC0+Z2V0KHRoaXMpID09IGNvbEluZm8pOwogCisg
ICAgLy8gQ29tcHV0ZSB0aGUgYXBwcm9wcmlhdGUgcmVjdCBiYXNlZCBvZmYgb3VyIGluZm9ybWF0
aW9uLgorICAgIGludCBjb2xXaWR0aCA9IGNvbEluZm8tPmRlc2lyZWRDb2x1bW5XaWR0aCgpOwor
ICAgIGludCBjb2xIZWlnaHQgPSBjb2xJbmZvLT5jb2x1bW5IZWlnaHQoKTsKKyAgICBpbnQgY29s
VG9wID0gYm9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCk7CiAgICAgaW50IGNvbEdhcCA9IGNvbHVt
bkdhcCgpOworICAgIGludCBjb2xMZWZ0ID0gc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8g
CisgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKSArIChp
bmRleCAqIChjb2xXaWR0aCArIGNvbEdhcCkpCisgICAgICAgICAgICAgICAgICAgICAgOiBib3Jk
ZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpICsgY29udGVudFdpZHRoKCkgLSBjb2xXaWR0aCAtIChp
bmRleCAqIChjb2xXaWR0aCArIGNvbEdhcCkpOworICAgIHJldHVybiBJbnRSZWN0KGNvbExlZnQs
IGNvbFRvcCwgY29sV2lkdGgsIGNvbEhlaWdodCk7Cit9CiAKLSAgICAvLyBDb21wdXRlIGEgY29s
bGVjdGlvbiBvZiBjb2x1bW4gcmVjdHMuCi0gICAgaW5mby0+Y2xlYXJDb2x1bW5zKCk7Ci0gICAg
Ci0gICAgLy8gVGhlbiB3ZSBkbyBhIHNpbXVsYXRlZCAicGFpbnQiIGludG8gdGhlIGNvbHVtbiBz
bGljZXMgYW5kIGFsbG93IHRoZSBjb250ZW50IHRvIHNsaWdodGx5IGFkanVzdCBvdXIgaW5kaXZp
ZHVhbCBjb2x1bW4gcmVjdHMuCi0gICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gdGFrZSBpbnRvIGFj
Y291bnQgbGF5ZXJzIHRoYXQgYXJlIGFmZmVjdGVkIGJ5IHRoZSBjb2x1bW5zIGFzIHdlbGwgaGVy
ZSBzbyB0aGF0IHRoZXkgY2FuIGhhdmUgYW4gb3Bwb3J0dW5pdHkKLSAgICAvLyB0byBhZGp1c3Qg
Y29sdW1uIHJlY3RzIGFsc28uCi0gICAgUmVuZGVyVmlldyogdiA9IHZpZXcoKTsKLSAgICBpbnQg
bGVmdCA9IGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCk7Ci0gICAgaW50IHRvcCA9IGJvcmRl
clRvcCgpICsgcGFkZGluZ1RvcCgpOwotICAgIGludCBjdXJyWCA9IHN0eWxlKCktPmRpcmVjdGlv
bigpID09IExUUiA/IGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCkgOiBib3JkZXJMZWZ0KCkg
KyBwYWRkaW5nTGVmdCgpICsgY29udGVudFdpZHRoKCkgLSBkZXNpcmVkQ29sdW1uV2lkdGg7Ci0g
ICAgaW50IGN1cnJZID0gdG9wOwotICAgIHVuc2lnbmVkIGNvbENvdW50ID0gZGVzaXJlZENvbHVt
bkNvdW50OwotICAgIGludCBtYXhDb2xCb3R0b20gPSBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3Ao
KTsKLSAgICBpbnQgY29udGVudEJvdHRvbSA9IHRvcCArIGF2YWlsYWJsZUhlaWdodDsKLSAgICBp
bnQgbWluaW11bUNvbHVtbkhlaWdodCA9IC0xOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBjb2xDb3VudDsgaSsrKSB7Ci0gICAgICAgIC8vIElmIHdlIGFyZW4ndCBjb25zdHJhaW5lZCwg
dGhlbiB0aGUgbGFzdCBjb2x1bW4gY2FuIGp1c3QgZ2V0IGFsbCB0aGUgcmVtYWluaW5nIHNwYWNl
LgotICAgICAgICBpZiAoY29tcHV0ZUludHJpbnNpY0hlaWdodCAmJiBpID09IGNvbENvdW50IC0g
MSkKLSAgICAgICAgICAgIGNvbEhlaWdodCA9IGF2YWlsYWJsZUhlaWdodDsKLQotICAgICAgICAv
LyBUaGlzIHJlcHJlc2VudHMgdGhlIHJlYWwgY29sdW1uIHBvc2l0aW9uLgotICAgICAgICBJbnRS
ZWN0IGNvbFJlY3QoY3VyclgsIHRvcCwgZGVzaXJlZENvbHVtbldpZHRoLCBjb2xIZWlnaHQpOwot
Ci0gICAgICAgIGludCB0cnVuY2F0aW9uUG9pbnQgPSB2aXNpYmxlVG9wT2ZIaWdoZXN0RmxvYXRF
eHRlbmRpbmdCZWxvdyhjdXJyWSArIGNvbEhlaWdodCwgY29sSGVpZ2h0KTsKLQotICAgICAgICAv
LyBGb3IgdGhlIHNpbXVsYXRlZCBwYWludCwgd2UgcHJldGVuZCBsaWtlIGV2ZXJ5dGhpbmcgaXMg
aW4gb25lIGxvbmcgc3RyaXAuCi0gICAgICAgIEludFJlY3QgcGFnZVJlY3QobGVmdCwgY3Vyclks
IGNvbnRlbnRXaWR0aCgpLCB0cnVuY2F0aW9uUG9pbnQgLSBjdXJyWSk7Ci0gICAgICAgIHYtPnNl
dFByaW50UmVjdChwYWdlUmVjdCk7Ci0gICAgICAgIHYtPnNldFRydW5jYXRlZEF0KHRydW5jYXRp
b25Qb2ludCk7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KChQbGF0Zm9ybUdyYXBo
aWNzQ29udGV4dCopMCk7Ci0gICAgICAgIFBhaW50SW5mbyBwYWludEluZm8oJmNvbnRleHQsIHBh
Z2VSZWN0LCBQYWludFBoYXNlRm9yZWdyb3VuZCwgZmFsc2UsIDAsIDApOworYm9vbCBSZW5kZXJC
bG9jazo6bGF5b3V0Q29sdW1ucyhib29sIGhhc1NwZWNpZmllZFBhZ2VIZWlnaHQsIGludCBwYWdl
SGVpZ2h0LCBMYXlvdXRTdGF0ZU1haW50YWluZXImIHN0YXRlUHVzaGVyKQoreworICAgIGlmICho
YXNDb2x1bW5zKCkpIHsKKyAgICAgICAgQ29sdW1uSW5mbyogY29sSW5mbyA9IGNvbHVtbkluZm8o
KTsKKyAgICAgICAgaWYgKHBhZ2VIZWlnaHQpIC8vIEZJWE1FOiBTaG91bGQgdXNlIGxvd2VzdFBv
c2l0aW9uIGluc3RlYWQgb2YgY29udGVudEhlaWdodCgpLCBidXQgbmVlZCB0byBleGNsdWRlIHBv
c2l0aW9uZWQgb2JqZWN0cy4KKyAgICAgICAgICAgIGNvbEluZm8tPnNldENvbHVtbkNvdW50QW5k
SGVpZ2h0KGNlaWxmKChmbG9hdCljb250ZW50SGVpZ2h0KCkgLyBwYWdlSGVpZ2h0KSwgcGFnZUhl
aWdodCk7CisgICAgICAgIGludCBkZXNpcmVkQ29sdW1uQ291bnQgPSBjb2xJbmZvLT5kZXNpcmVk
Q29sdW1uQ291bnQoKTsKKyAgICAgICAgaWYgKCFoYXNTcGVjaWZpZWRQYWdlSGVpZ2h0ICYmIGNv
bnRlbnRIZWlnaHQoKSA+IHBhZ2VIZWlnaHQgKiBkZXNpcmVkQ29sdW1uQ291bnQpIHsKKyAgICAg
ICAgICAgIC8vIE5vdyB0aGF0IHdlIGtub3cgdGhlIGludHJpbnNpYyBoZWlnaHQgb2YgdGhlIGNv
bHVtbnMsIHdlIGhhdmUgdG8gcmViYWxhbmNlIHRoZW0uCisgICAgICAgICAgICBpbnQgY29sdW1u
SGVpZ2h0ID0gbWF4KGNvbEluZm8tPm1pbmltdW1Db2x1bW5IZWlnaHQoKSwgKGludCljZWlsZigo
ZmxvYXQpY29udGVudEhlaWdodCgpIC8gZGVzaXJlZENvbHVtbkNvdW50KSk7CisgICAgICAgICAg
ICBpZiAoY29sdW1uSGVpZ2h0ID4gMCkgeworICAgICAgICAgICAgICAgIHN0YXRlUHVzaGVyLnBv
cCgpOworICAgICAgICAgICAgICAgIGxheW91dEJsb2NrKGZhbHNlLCBjb2x1bW5IZWlnaHQpOwor
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9IAog
ICAgICAgICAKLSAgICAgICAgc2V0SGFzQ29sdW1ucyhmYWxzZSk7Ci0gICAgICAgIHBhaW50T2Jq
ZWN0KHBhaW50SW5mbywgMCwgMCk7Ci0gICAgICAgIHNldEhhc0NvbHVtbnModHJ1ZSk7Ci0KLSAg
ICAgICAgaWYgKGNvbXB1dGVJbnRyaW5zaWNIZWlnaHQgJiYgdi0+bWluaW11bUNvbHVtbkhlaWdo
dCgpID4gb3JpZ2luYWxDb2xIZWlnaHQpIHsKLSAgICAgICAgICAgIC8vIFRoZSBpbml0aWFsIGNv
bHVtbiBoZWlnaHQgd2FzIHRvbyBzbWFsbCB0byBjb250YWluIG9uZSBsaW5lIG9mIHRleHQuCi0g
ICAgICAgICAgICBtaW5pbXVtQ29sdW1uSGVpZ2h0ID0gbWF4KG1pbmltdW1Db2x1bW5IZWlnaHQs
IHYtPm1pbmltdW1Db2x1bW5IZWlnaHQoKSk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKGNvbHVt
bkNvdW50KGNvbEluZm8pKSB7CisgICAgICAgICAgICBJbnRSZWN0IGxhc3RSZWN0ID0gY29sdW1u
UmVjdEF0KGNvbEluZm8sIGNvbHVtbkNvdW50KGNvbEluZm8pIC0gMSk7CisgICAgICAgICAgICBp
bnQgb3ZlcmZsb3dMZWZ0ID0gc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gUlRMID8gbWluKDAsIGxh
c3RSZWN0LngoKSkgOiAwOworICAgICAgICAgICAgaW50IG92ZXJmbG93UmlnaHQgPSBzdHlsZSgp
LT5kaXJlY3Rpb24oKSA9PSBMVFIgPyBtYXgod2lkdGgoKSwgbGFzdFJlY3QueCgpICsgbGFzdFJl
Y3Qud2lkdGgoKSkgOiAwOworICAgICAgICAgICAgaW50IG92ZXJmbG93SGVpZ2h0ID0gYm9yZGVy
VG9wKCkgKyBwYWRkaW5nVG9wKCkgKyBjb2xJbmZvLT5jb2x1bW5IZWlnaHQoKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgc2V0SGVpZ2h0KG92ZXJmbG93SGVpZ2h0ICsgYm9yZGVyQm90dG9t
KCkgKyBwYWRkaW5nQm90dG9tKCkgKyBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCkpOwogCi0g
ICAgICAgIGludCBhZGp1c3RlZEJvdHRvbSA9IHYtPmJlc3RUcnVuY2F0ZWRBdCgpOwotICAgICAg
ICBpZiAoYWRqdXN0ZWRCb3R0b20gPD0gY3VyclkpCi0gICAgICAgICAgICBhZGp1c3RlZEJvdHRv
bSA9IHRydW5jYXRpb25Qb2ludDsKLSAgICAgICAgCi0gICAgICAgIGNvbFJlY3Quc2V0SGVpZ2h0
KGFkanVzdGVkQm90dG9tIC0gY3VyclkpOwotICAgICAgICAKLSAgICAgICAgLy8gQWRkIGluIHRo
ZSBsb3N0IHNwYWNlIHRvIHRoZSBzdWJzZXF1ZW50IGNvbHVtbnMuCi0gICAgICAgIC8vIEZJWE1F
OiBUaGlzIHdpbGwgY3JlYXRlIGEgInN0YWlyY2FzZSIgZWZmZWN0IGlmIHRoZXJlIGFyZSBlbm91
Z2ggY29sdW1ucywgYnV0IHRoZSBlZmZlY3Qgc2hvdWxkIGJlIHByZXR0eSBzdWJ0bGUuCi0gICAg
ICAgIGlmIChjb21wdXRlSW50cmluc2ljSGVpZ2h0KSB7Ci0gICAgICAgICAgICBpbnQgbG9zdFNw
YWNlID0gY29sSGVpZ2h0IC0gY29sUmVjdC5oZWlnaHQoKTsKLSAgICAgICAgICAgIGlmIChsb3N0
U3BhY2UgPiByZW1haW5pbmdTbG9wU3BhY2UpIHsKLSAgICAgICAgICAgICAgICAvLyBSZWRlc3Ry
aWJ1dGUgdGhlIHNwYWNlIGFtb25nIHRoZSByZW1haW5pbmcgY29sdW1ucy4KLSAgICAgICAgICAg
ICAgICBpbnQgc3BhY2VUb1JlZGlzdHJpYnV0ZSA9IGxvc3RTcGFjZSAtIHJlbWFpbmluZ1Nsb3BT
cGFjZTsKLSAgICAgICAgICAgICAgICBpbnQgcmVtYWluaW5nQ29sdW1ucyA9IGNvbENvdW50IC0g
aSArIDE7Ci0gICAgICAgICAgICAgICAgY29sSGVpZ2h0ICs9IHNwYWNlVG9SZWRpc3RyaWJ1dGUg
LyByZW1haW5pbmdDb2x1bW5zOwotICAgICAgICAgICAgfSAKLSAgICAgICAgICAgIHJlbWFpbmlu
Z1Nsb3BTcGFjZSA9IG1heCgwLCByZW1haW5pbmdTbG9wU3BhY2UgLSBsb3N0U3BhY2UpOworICAg
ICAgICAgICAgbV9vdmVyZmxvdy5jbGVhcigpOworICAgICAgICAgICAgYWRkTGF5b3V0T3ZlcmZs
b3coSW50UmVjdChvdmVyZmxvd0xlZnQsIDAsIG92ZXJmbG93UmlnaHQgLSBvdmVyZmxvd0xlZnQs
IG92ZXJmbG93SGVpZ2h0KSk7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChzdHls
ZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIpCi0gICAgICAgICAgICBjdXJyWCArPSBkZXNpcmVkQ29s
dW1uV2lkdGggKyBjb2xHYXA7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGN1cnJYIC09IChk
ZXNpcmVkQ29sdW1uV2lkdGggKyBjb2xHYXApOwotCi0gICAgICAgIGN1cnJZICs9IGNvbFJlY3Qu
aGVpZ2h0KCk7Ci0gICAgICAgIGF2YWlsYWJsZUhlaWdodCAtPSBjb2xSZWN0LmhlaWdodCgpOwot
Ci0gICAgICAgIG1heENvbEJvdHRvbSA9IG1heChjb2xSZWN0LmJvdHRvbSgpLCBtYXhDb2xCb3R0
b20pOwotCi0gICAgICAgIGluZm8tPmFkZENvbHVtblJlY3QoY29sUmVjdCk7Ci0gICAgICAgIAot
ICAgICAgICAvLyBTdGFydCBhZGRpbmcgaW4gbW9yZSBjb2x1bW5zIGFzIGxvbmcgYXMgdGhlcmUn
cyBzdGlsbCBjb250ZW50IGxlZnQuCi0gICAgICAgIGlmIChjdXJyWSA8IGVuZE9mQ29udGVudCAm
JiBpID09IGNvbENvdW50IC0gMSAmJiAoY29tcHV0ZUludHJpbnNpY0hlaWdodCB8fCBjb250ZW50
SGVpZ2h0KCkpKQotICAgICAgICAgICAgY29sQ291bnQrKzsKLSAgICB9Ci0KLSAgICBpZiAobWlu
aW11bUNvbHVtbkhlaWdodCA+PSAwKSB7Ci0gICAgICAgIC8vIElmIG9yaWdpbmFsQ29sSGVpZ2h0
IHdhcyB0b28gc21hbGwsIHdlIG5lZWQgdG8gdHJ5IHRvIGxheW91dCBhZ2Fpbi4KLSAgICAgICAg
cmV0dXJuIGxheW91dENvbHVtbnMoZW5kT2ZDb250ZW50LCBtaW5pbXVtQ29sdW1uSGVpZ2h0KTsK
ICAgICB9Ci0KLSAgICBpbnQgb3ZlcmZsb3dSaWdodCA9IG1heCh3aWR0aCgpLCBjdXJyWCAtIGNv
bEdhcCk7Ci0gICAgaW50IG92ZXJmbG93TGVmdCA9IG1pbigwLCBjdXJyWCArIGRlc2lyZWRDb2x1
bW5XaWR0aCArIGNvbEdhcCk7Ci0gICAgaW50IG92ZXJmbG93SGVpZ2h0ID0gbWF4Q29sQm90dG9t
OwotICAgIGludCB0b0FkZCA9IGJvcmRlckJvdHRvbSgpICsgcGFkZGluZ0JvdHRvbSgpICsgaG9y
aXpvbnRhbFNjcm9sbGJhckhlaWdodCgpOwotICAgICAgICAKLSAgICBpZiAoY29tcHV0ZUludHJp
bnNpY0hlaWdodCkKLSAgICAgICAgc2V0SGVpZ2h0KG1heENvbEJvdHRvbSArIHRvQWRkKTsKLQot
ICAgIG1fb3ZlcmZsb3cuY2xlYXIoKTsKLSAgICBhZGRMYXlvdXRPdmVyZmxvdyhJbnRSZWN0KG92
ZXJmbG93TGVmdCwgMCwgb3ZlcmZsb3dSaWdodCAtIG92ZXJmbG93TGVmdCwgb3ZlcmZsb3dIZWln
aHQpKTsKLQotICAgIHYtPnNldFByaW50UmVjdChJbnRSZWN0KCkpOwotICAgIHYtPnNldFRydW5j
YXRlZEF0KDApOwogICAgIAotICAgIEFTU0VSVChjb2xDb3VudCA9PSBpbmZvLT5jb2x1bW5Db3Vu
dCgpKTsKLSAgICAKLSAgICByZXR1cm4gY29udGVudEJvdHRvbTsKKyAgICByZXR1cm4gZmFsc2U7
CiB9CiAKIHZvaWQgUmVuZGVyQmxvY2s6OmFkanVzdFBvaW50VG9Db2x1bW5Db250ZW50cyhJbnRQ
b2ludCYgcG9pbnQpIGNvbnN0CkBAIC00MzMwLDE3ICs0MzMyLDE3IEBAIHZvaWQgUmVuZGVyQmxv
Y2s6OmFkanVzdFBvaW50VG9Db2x1bW5Db24KICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIENv
bHVtbkluZm8qIGNvbEluZm8gPSBjb2x1bW5JbmZvKCk7Ci0gICAgaWYgKCFjb2xJbmZvLT5jb2x1
bW5Db3VudCgpKQorICAgIGlmICghY29sdW1uQ291bnQoY29sSW5mbykpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIC8vIERldGVybWluZSB3aGljaCBjb2x1bW5zIHdlIGludGVyc2VjdC4KICAgICBp
bnQgY29sR2FwID0gY29sdW1uR2FwKCk7CiAgICAgaW50IGxlZnRHYXAgPSBjb2xHYXAgLyAyOwot
ICAgIEludFBvaW50IGNvbHVtblBvaW50KGNvbEluZm8tPmNvbHVtblJlY3RBdCgwKS5sb2NhdGlv
bigpKTsKKyAgICBJbnRQb2ludCBjb2x1bW5Qb2ludChjb2x1bW5SZWN0QXQoY29sSW5mbywgMCku
bG9jYXRpb24oKSk7CiAgICAgaW50IHlPZmZzZXQgPSAwOwogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBjb2xJbmZvLT5jb2x1bW5Db3VudCgpOyBpKyspIHsKICAgICAgICAgLy8gQWRkIGlu
IGhhbGYgdGhlIGNvbHVtbiBnYXAgdG8gdGhlIGxlZnQgYW5kIHJpZ2h0IG9mIHRoZSByZWN0Lgot
ICAgICAgICBJbnRSZWN0IGNvbFJlY3QgPSBjb2xJbmZvLT5jb2x1bW5SZWN0QXQoaSk7CisgICAg
ICAgIEludFJlY3QgY29sUmVjdCA9IGNvbHVtblJlY3RBdChjb2xJbmZvLCBpKTsKICAgICAgICAg
SW50UmVjdCBnYXBBbmRDb2x1bW5SZWN0KGNvbFJlY3QueCgpIC0gbGVmdEdhcCwgY29sUmVjdC55
KCksIGNvbFJlY3Qud2lkdGgoKSArIGNvbEdhcCwgY29sUmVjdC5oZWlnaHQoKSk7CiAKICAgICAg
ICAgaWYgKHBvaW50LngoKSA+PSBnYXBBbmRDb2x1bW5SZWN0LngoKSAmJiBwb2ludC54KCkgPCBn
YXBBbmRDb2x1bW5SZWN0LnJpZ2h0KCkpIHsKQEAgLTQzNzgsNyArNDM4MCw3IEBAIHZvaWQgUmVu
ZGVyQmxvY2s6OmFkanVzdFJlY3RGb3JDb2x1bW5zKEkKICAgICBJbnRSZWN0IHJlc3VsdDsKICAg
ICAKICAgICAvLyBEZXRlcm1pbmUgd2hpY2ggY29sdW1ucyB3ZSBpbnRlcnNlY3QuCi0gICAgdW5z
aWduZWQgY29sQ291bnQgPSBjb2xJbmZvLT5jb2x1bW5Db3VudCgpOworICAgIHVuc2lnbmVkIGNv
bENvdW50ID0gY29sdW1uQ291bnQoY29sSW5mbyk7CiAgICAgaWYgKCFjb2xDb3VudCkKICAgICAg
ICAgcmV0dXJuOwogICAgIApAQCAtNDM4Niw3ICs0Mzg4LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6
YWRqdXN0UmVjdEZvckNvbHVtbnMoSQogICAgIAogICAgIGludCBjdXJyWU9mZnNldCA9IDA7CiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvbENvdW50OyBpKyspIHsKLSAgICAgICAgSW50
UmVjdCBjb2xSZWN0ID0gY29sSW5mby0+Y29sdW1uUmVjdEF0KGkpOworICAgICAgICBJbnRSZWN0
IGNvbFJlY3QgPSBjb2x1bW5SZWN0QXQoY29sSW5mbywgaSk7CiAgICAgICAgIGludCBjdXJyWE9m
ZnNldCA9IGNvbFJlY3QueCgpIC0gbGVmdDsKICAgICAgICAgCiAgICAgICAgIEludFJlY3QgcmVw
YWludFJlY3QgPSByOwpAQCAtNDQxMiw5ICs0NDE0LDkgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRq
dXN0Rm9yQ29sdW1ucyhJbnRTaQogCiAgICAgaW50IGxlZnQgPSBib3JkZXJMZWZ0KCkgKyBwYWRk
aW5nTGVmdCgpOwogICAgIGludCB5T2Zmc2V0ID0gMDsKLSAgICBzaXplX3QgY29sdW1uQ291bnQg
PSBjb2xJbmZvLT5jb2x1bW5Db3VudCgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29s
dW1uQ291bnQ7ICsraSkgewotICAgICAgICBJbnRSZWN0IGNvbHVtblJlY3QgPSBjb2xJbmZvLT5j
b2x1bW5SZWN0QXQoaSk7CisgICAgc2l6ZV90IGNvbENvdW50ID0gY29sdW1uQ291bnQoY29sSW5m
byk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb2xDb3VudDsgKytpKSB7CisgICAgICAg
IEludFJlY3QgY29sdW1uUmVjdCA9IGNvbHVtblJlY3RBdChjb2xJbmZvLCBpKTsKICAgICAgICAg
aW50IHhPZmZzZXQgPSBjb2x1bW5SZWN0LngoKSAtIGxlZnQ7CiAgICAgICAgIGlmIChwb2ludC55
KCkgPCBjb2x1bW5SZWN0LmJvdHRvbSgpICsgeU9mZnNldCkgewogICAgICAgICAgICAgb2Zmc2V0
LmV4cGFuZCh4T2Zmc2V0LCAteU9mZnNldCk7CkBAIC01NjcwLDYgKzU2NzIsNzEgQEAgUmVuZGVy
QmxvY2sqIFJlbmRlckJsb2NrOjpjcmVhdGVBbm9ueW1vdQogICAgIHJldHVybiBuZXdCb3g7CiB9
CiAKK2ludCBSZW5kZXJCbG9jazo6bmV4dFBhZ2VUb3AoaW50IHlQb3MpIGNvbnN0Cit7CisgICAg
TGF5b3V0U3RhdGUqIGxheW91dFN0YXRlID0gdmlldygpLT5sYXlvdXRTdGF0ZSgpOworICAgIGlm
ICghbGF5b3V0U3RhdGUtPm1fcGFnZUhlaWdodCkKKyAgICAgICAgcmV0dXJuIHlQb3M7CisgICAg
CisgICAgLy8gVGhlIHlQb3MgaXMgaW4gb3VyIGNvb3JkaW5hdGUgc3BhY2UuICBXZSBjYW4gYWRk
IGluIG91ciBwdXNoZWQgb2Zmc2V0LgorICAgIGludCBwYWdlSGVpZ2h0ID0gbGF5b3V0U3RhdGUt
Pm1fcGFnZUhlaWdodDsKKyAgICBpbnQgcmVtYWluaW5nSGVpZ2h0ID0gcGFnZUhlaWdodCAtICgo
bGF5b3V0U3RhdGUtPm1fbGF5b3V0T2Zmc2V0IC0gbGF5b3V0U3RhdGUtPm1fcGFnZU9mZnNldCku
aGVpZ2h0KCkgKyB5UG9zKSAlIHBhZ2VIZWlnaHQ7CisgICAgcmV0dXJuIHlQb3MgKyByZW1haW5p
bmdIZWlnaHQ7Cit9CisKK2ludCBSZW5kZXJCbG9jazo6YXBwbHlCZWZvcmVCcmVhayhSZW5kZXJC
b3gqIGNoaWxkLCBpbnQgeVBvcykKK3sKKyAgICBib29sIGNoZWNrUGFnZUJyZWFrcyA9IGRvY3Vt
ZW50KCktPnBhZ2luYXRlZCgpICYmIGRvY3VtZW50KCktPnNldHRpbmdzKCktPnBhZ2luYXRlRHVy
aW5nTGF5b3V0RW5hYmxlZCgpOworICAgIGJvb2wgY2hlY2tDb2x1bW5CcmVha3MgPSB2aWV3KCkt
PmxheW91dFN0YXRlKCktPnBhZ2luYXRpbmdDb2x1bW5zKCk7CisgICAgYm9vbCBjaGVja0JlZm9y
ZUFsd2F5cyA9IChjaGVja1BhZ2VCcmVha3MgJiYgY2hpbGQtPnN0eWxlKCktPnBhZ2VCcmVha0Jl
Zm9yZSgpID09IFBCQUxXQVlTKSB8fCAoY2hlY2tDb2x1bW5CcmVha3MgJiYgY2hpbGQtPnN0eWxl
KCktPmNvbHVtbkJyZWFrQmVmb3JlKCkgPT0gUEJBTFdBWVMpOworICAgIGlmIChjaGVja0JlZm9y
ZUFsd2F5cykKKyAgICAgICAgcmV0dXJuIG5leHRQYWdlVG9wKHlQb3MpOworICAgIHJldHVybiB5
UG9zOworfQorCitpbnQgUmVuZGVyQmxvY2s6OmFwcGx5QWZ0ZXJCcmVhayhSZW5kZXJCb3gqIGNo
aWxkLCBpbnQgeVBvcywgTWFyZ2luSW5mbyYgbWFyZ2luSW5mbykKK3sKKyAgICBib29sIGNoZWNr
UGFnZUJyZWFrcyA9IGRvY3VtZW50KCktPnBhZ2luYXRlZCgpICYmIGRvY3VtZW50KCktPnNldHRp
bmdzKCktPnBhZ2luYXRlRHVyaW5nTGF5b3V0RW5hYmxlZCgpOworICAgIGJvb2wgY2hlY2tDb2x1
bW5CcmVha3MgPSB2aWV3KCktPmxheW91dFN0YXRlKCktPnBhZ2luYXRpbmdDb2x1bW5zKCk7Cisg
ICAgYm9vbCBjaGVja0FmdGVyQWx3YXlzID0gKGNoZWNrUGFnZUJyZWFrcyAmJiBjaGlsZC0+c3R5
bGUoKS0+cGFnZUJyZWFrQWZ0ZXIoKSA9PSBQQkFMV0FZUykgfHwgKGNoZWNrQ29sdW1uQnJlYWtz
ICYmIGNoaWxkLT5zdHlsZSgpLT5jb2x1bW5CcmVha0FmdGVyKCkgPT0gUEJBTFdBWVMpOworICAg
IGlmIChjaGVja0FmdGVyQWx3YXlzKSB7CisgICAgICAgIG1hcmdpbkluZm8uc2V0Qm90dG9tUXVp
cmsodHJ1ZSk7IC8vIENhdXNlIG1hcmdpbnMgdG8gYmUgZGlzY2FyZGVkIGZvciBhbnkgZm9sbG93
aW5nIGNvbnRlbnQuCisgICAgICAgIHJldHVybiBuZXh0UGFnZVRvcCh5UG9zKTsKKyAgICB9Cisg
ICAgcmV0dXJuIHlQb3M7Cit9CisKK2ludCBSZW5kZXJCbG9jazo6YWRqdXN0Rm9yVW5zcGxpdHRh
YmxlQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCwgaW50IHlQb3MpCit7CisgICAgYm9vbCBpc1Vuc3Bs
aXR0YWJsZSA9IGNoaWxkLT5pc1JlcGxhY2VkKCkgfHwgY2hpbGQtPnNjcm9sbHNPdmVyZmxvdygp
OworICAgIExheW91dFN0YXRlKiBsYXlvdXRTdGF0ZSA9IHZpZXcoKS0+bGF5b3V0U3RhdGUoKTsK
KyAgICBpZiAoaXNVbnNwbGl0dGFibGUgJiYgbGF5b3V0U3RhdGUtPm1fY29sdW1uSW5mbykKKyAg
ICAgICAgbGF5b3V0U3RhdGUtPm1fY29sdW1uSW5mby0+dXBkYXRlTWluaW11bUNvbHVtbkhlaWdo
dChjaGlsZC0+aGVpZ2h0KCkpOworICAgIGludCBwYWdlSGVpZ2h0ID0gbGF5b3V0U3RhdGUtPm1f
cGFnZUhlaWdodDsKKyAgICBpZiAoIWlzVW5zcGxpdHRhYmxlIHx8ICFwYWdlSGVpZ2h0IHx8IGNo
aWxkLT5oZWlnaHQoKSA+IHBhZ2VIZWlnaHQpCisgICAgICAgIHJldHVybiB5UG9zOworICAgIGlu
dCByZW1haW5pbmdIZWlnaHQgPSBwYWdlSGVpZ2h0IC0gKChsYXlvdXRTdGF0ZS0+bV9sYXlvdXRP
ZmZzZXQgLSBsYXlvdXRTdGF0ZS0+bV9wYWdlT2Zmc2V0KS5oZWlnaHQoKSArIHlQb3MpICUgcGFn
ZUhlaWdodDsKKyAgICBpZiAocmVtYWluaW5nSGVpZ2h0IDwgY2hpbGQtPmhlaWdodCgpKQorICAg
ICAgICByZXR1cm4geVBvcyArIHJlbWFpbmluZ0hlaWdodDsKKyAgICByZXR1cm4geVBvczsKK30K
Kwordm9pZCBSZW5kZXJCbG9jazo6YWRqdXN0TGluZVBvc2l0aW9uRm9yUGFnaW5hdGlvbihSb290
SW5saW5lQm94KiBsaW5lQm94LCBpbnQmIGRlbHRhKQoreworICAgIExheW91dFN0YXRlKiBsYXlv
dXRTdGF0ZSA9IHZpZXcoKS0+bGF5b3V0U3RhdGUoKTsKKyAgICBpbnQgcGFnZUhlaWdodCA9IGxh
eW91dFN0YXRlLT5tX3BhZ2VIZWlnaHQ7CisgICAgaW50IHlQb3MgPSBsaW5lQm94LT50b3BWaXNp
YmxlT3ZlcmZsb3coKTsKKyAgICBpbnQgbGluZUhlaWdodCA9IGxpbmVCb3gtPmJvdHRvbVZpc2li
bGVPdmVyZmxvdygpIC0geVBvczsKKyAgICBpZiAobGF5b3V0U3RhdGUtPm1fY29sdW1uSW5mbykK
KyAgICAgICAgbGF5b3V0U3RhdGUtPm1fY29sdW1uSW5mby0+dXBkYXRlTWluaW11bUNvbHVtbkhl
aWdodChsaW5lSGVpZ2h0KTsKKyAgICB5UG9zICs9IGRlbHRhOworICAgIGlmICghcGFnZUhlaWdo
dCB8fCBsaW5lSGVpZ2h0ID4gcGFnZUhlaWdodCkKKyAgICAgICAgcmV0dXJuOworICAgIGludCBy
ZW1haW5pbmdIZWlnaHQgPSBwYWdlSGVpZ2h0IC0gKChsYXlvdXRTdGF0ZS0+bV9sYXlvdXRPZmZz
ZXQgLSBsYXlvdXRTdGF0ZS0+bV9wYWdlT2Zmc2V0KS5oZWlnaHQoKSArIHlQb3MpICUgcGFnZUhl
aWdodDsKKyAgICBpZiAocmVtYWluaW5nSGVpZ2h0IDwgbGluZUhlaWdodCkKKyAgICAgICAgZGVs
dGEgKz0gcmVtYWluaW5nSGVpZ2h0OworfQorIAogY29uc3QgY2hhciogUmVuZGVyQmxvY2s6OnJl
bmRlck5hbWUoKSBjb25zdAogewogICAgIGlmIChpc0JvZHkoKSkKSW5kZXg6IFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2suaAkocmV2aXNpb24gNjY5MDMpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
bG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgQ29sdW1uSW5mbzsKIGNsYXNzIElubGluZUl0ZXJhdG9yOworY2xhc3MgTGF5
b3V0U3RhdGVNYWludGFpbmVyOwogY2xhc3MgUmVuZGVySW5saW5lOwogCiBzdHJ1Y3QgQmlkaVJ1
bjsKQEAgLTcwLDcgKzcxLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZChS
ZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gMCk7CiAg
ICAgdmlydHVhbCB2b2lkIHJlbW92ZUNoaWxkKFJlbmRlck9iamVjdCopOwogCi0gICAgdmlydHVh
bCB2b2lkIGxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbik7CisgICAgdmlydHVhbCB2
b2lkIGxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgaW50IHBhZ2VIZWlnaHQgPSAw
KTsKIAogICAgIHZvaWQgaW5zZXJ0UG9zaXRpb25lZE9iamVjdChSZW5kZXJCb3gqKTsKICAgICB2
b2lkIHJlbW92ZVBvc2l0aW9uZWRPYmplY3QoUmVuZGVyQm94Kik7CkBAIC04OSw2ICs5MCw3IEBA
IHB1YmxpYzoKIAogICAgIHZvaWQgbWFya0FsbERlc2NlbmRhbnRzV2l0aEZsb2F0c0ZvckxheW91
dChSZW5kZXJCb3gqIGZsb2F0VG9SZW1vdmUgPSAwLCBib29sIGluTGF5b3V0ID0gdHJ1ZSk7CiAg
ICAgdm9pZCBtYXJrUG9zaXRpb25lZE9iamVjdHNGb3JMYXlvdXQoKTsKKyAgICB2b2lkIG1hcmtE
ZXNjZW5kYW50QmxvY2tzQW5kTGluZXNGb3JMYXlvdXQoYm9vbCBpbkxheW91dCA9IHRydWUpOwog
CiAgICAgYm9vbCBjb250YWluc0Zsb2F0cygpIHsgcmV0dXJuIG1fZmxvYXRpbmdPYmplY3RzICYm
ICFtX2Zsb2F0aW5nT2JqZWN0cy0+aXNFbXB0eSgpOyB9CiAgICAgYm9vbCBjb250YWluc0Zsb2F0
KFJlbmRlck9iamVjdCopOwpAQCAtMTUxLDYgKzE1MywxMCBAQCBwdWJsaWM6CiAKICAgICBDb2x1
bW5JbmZvKiBjb2x1bW5JbmZvKCkgY29uc3Q7CiAgICAgaW50IGNvbHVtbkdhcCgpIGNvbnN0Owor
ICAgIAorICAgIC8vIFRoZXNlIHR3byBmdW5jdGlvbnMgdGFrZSB0aGUgQ29sdW1uSW5mbyogdG8g
YXZvaWQgcmVwZWF0ZWQgbG9va3VwcyBvZiB0aGUgaW5mbyBpbiB0aGUgZ2xvYmFsIEhhc2hNYXAu
CisgICAgdW5zaWduZWQgY29sdW1uQ291bnQoQ29sdW1uSW5mbyopIGNvbnN0OworICAgIEludFJl
Y3QgY29sdW1uUmVjdEF0KENvbHVtbkluZm8qLCB1bnNpZ25lZCkgY29uc3Q7CiAKIHByb3RlY3Rl
ZDoKICAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIG9ubHkgdXNlZCBpbnRlcm5hbGx5IHRvIG1h
bmlwdWxhdGUgdGhlIHJlbmRlciB0cmVlIHN0cnVjdHVyZSB2aWEgcmVtb3ZlL2luc2VydC9hcHBl
bmRDaGlsZE5vZGUuCkBAIC0yOTcsNyArMzAzLDggQEAgcHJpdmF0ZToKIAogICAgIC8vIFRoZSBm
b2xsb3dpbmcgZnVuY3Rpb25zJyBpbXBsZW1lbnRhdGlvbnMgYXJlIGluIFJlbmRlckJsb2NrTGlu
ZUxheW91dC5jcHAuCiAgICAgUm9vdElubGluZUJveCogZGV0ZXJtaW5lU3RhcnRQb3NpdGlvbihi
b29sJiBmaXJzdExpbmUsIGJvb2wmIGZ1bGxMYXlvdXQsIGJvb2wmIHByZXZpb3VzTGluZUJyb2tl
Q2xlYW5seSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElubGlu
ZUJpZGlSZXNvbHZlciYsIFZlY3RvcjxGbG9hdFdpdGhSZWN0PiYgZmxvYXRzLCB1bnNpZ25lZCYg
bnVtQ2xlYW5GbG9hdHMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgSW5saW5lQmlkaVJlc29sdmVyJiwgVmVjdG9yPEZsb2F0V2l0aFJlY3Q+JiBmbG9hdHMsIHVu
c2lnbmVkJiBudW1DbGVhbkZsb2F0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wmIHVzZVJlcGFpbnRCb3VuZHMsIGludCYgcmVwYWludFRvcCwgaW50JiBy
ZXBhaW50Qm90dG9tKTsKICAgICBSb290SW5saW5lQm94KiBkZXRlcm1pbmVFbmRQb3NpdGlvbihS
b290SW5saW5lQm94KiBzdGFydEJveCwgSW5saW5lSXRlcmF0b3ImIGNsZWFuTGluZVN0YXJ0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZGlTdGF0dXMmIGNsZWFu
TGluZUJpZGlTdGF0dXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50JiB5UG9zKTsKQEAgLTQxNiw4ICs0MjMsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgb2Zmc2V0
Rm9yQ29udGVudHMoaW50JiB0eCwgaW50JiB0eSkgY29uc3Q7CiAKICAgICB2b2lkIGNhbGNDb2x1
bW5XaWR0aCgpOwotICAgIGludCBsYXlvdXRDb2x1bW5zKGludCBlbmRPZkNvbnRlbnQgPSAtMSwg
aW50IHJlcXVlc3RlZENvbHVtbkhlaWdodCA9IC0xKTsKLSAgICBpbnQgdmlzaWJsZVRvcE9mSGln
aGVzdEZsb2F0RXh0ZW5kaW5nQmVsb3coaW50IGJvdHRvbSwgaW50IG1heEhlaWdodCkgY29uc3Q7
CisgICAgYm9vbCBsYXlvdXRDb2x1bW5zKGJvb2wgaGFzU3BlY2lmaWVkUGFnZUhlaWdodCwgaW50
IHBhZ2VIZWlnaHQsIExheW91dFN0YXRlTWFpbnRhaW5lciYpOwogICAgIHZvaWQgbWFrZUNoaWxk
cmVuQW5vbnltb3VzQ29sdW1uQmxvY2tzKFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQsIFJlbmRl
ckJsb2NrKiBuZXdCbG9ja0JveCwgUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCk7CiAKICAgICBib29s
IGV4cGFuZHNUb0VuY2xvc2VPdmVyaGFuZ2luZ0Zsb2F0cygpIGNvbnN0OwpAQCAtNTM5LDYgKzU0
NSwxMyBAQCBwcml2YXRlOgogICAgIHZvaWQgc2V0Q29sbGFwc2VkQm90dG9tTWFyZ2luKGNvbnN0
IE1hcmdpbkluZm8mKTsKICAgICAvLyBFbmQgaGVscGVyIGZ1bmN0aW9ucyBhbmQgc3RydWN0cyB1
c2VkIGJ5IGxheW91dEJsb2NrQ2hpbGRyZW4uCiAKKyAgICAvLyBQYWdpbmF0aW9uIHJvdXRpbmVz
LgorICAgIGludCBuZXh0UGFnZVRvcChpbnQgeVBvcykgY29uc3Q7IC8vIFJldHVybnMgdGhlIHRv
cCBvZiB0aGUgbmV4dCBwYWdlIGZvbGxvd2luZyB5UG9zLgorICAgIGludCBhcHBseUJlZm9yZUJy
ZWFrKFJlbmRlckJveCogY2hpbGQsIGludCB5UG9zKTsgLy8gSWYgdGhlIGNoaWxkIGhhcyBhIGJl
Zm9yZSBicmVhaywgdGhlbiByZXR1cm4gYSBuZXcgeVBvcyB0aGF0IHNoaWZ0cyB0byB0aGUgdG9w
IG9mIHRoZSBuZXh0IHBhZ2UvY29sdW1uLgorICAgIGludCBhcHBseUFmdGVyQnJlYWsoUmVuZGVy
Qm94KiBjaGlsZCwgaW50IHlQb3MsIE1hcmdpbkluZm8mIG1hcmdpbkluZm8pOyAvLyBJZiB0aGUg
Y2hpbGQgaGFzIGFuIGFmdGVyIGJyZWFrLCB0aGVuIHJldHVybiBhIG5ldyB5UG9zIHRoYXQgc2hp
ZnRzIHRvIHRoZSB0b3Agb2YgdGhlIG5leHQgcGFnZS9jb2x1bW4uCisgICAgaW50IGFkanVzdEZv
clVuc3BsaXR0YWJsZUNoaWxkKFJlbmRlckJveCogY2hpbGQsIGludCB5UG9zKTsgLy8gSWYgdGhl
IGNoaWxkIGlzIHVuc3BsaXR0YWJsZSBhbmQgY2FuJ3QgZml0IG9uIHRoZSBjdXJyZW50IHBhZ2Us
IHJldHVybiB0aGUgdG9wIG9mIHRoZSBuZXh0IHBhZ2UvY29sdW1uLgorICAgIHZvaWQgYWRqdXN0
TGluZVBvc2l0aW9uRm9yUGFnaW5hdGlvbihSb290SW5saW5lQm94KiwgaW50JiBkZWx0YVkpOyAv
LyBDb21wdXRlcyBhIGRlbHRhWSB2YWx1ZSB0aGF0IHB1dCBhIGxpbmUgYXQgdGhlIHRvcCBvZiB0
aGUgbmV4dCBwYWdlIGlmIGl0IGRvZXNuJ3QgZml0IG9uIHRoZSBjdXJyZW50IHBhZ2UuCisKICAg
ICB0eXBlZGVmIFBvc2l0aW9uZWRPYmplY3RzTGlzdEhhc2hTZXQ6OmNvbnN0X2l0ZXJhdG9yIEl0
ZXJhdG9yOwogICAgIERlcHJlY2F0ZWRQdHJMaXN0PEZsb2F0aW5nT2JqZWN0PiogbV9mbG9hdGlu
Z09iamVjdHM7CiAgICAgCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVM
YXlvdXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGlu
ZUxheW91dC5jcHAJKHJldmlzaW9uIDY2ODg2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2tMaW5lTGF5b3V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2lu
Y2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdE1hcmtlci5oIgogI2lu
Y2x1ZGUgIlJlbmRlclZpZXcuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlRy
YWlsaW5nRmxvYXRzUm9vdElubGluZUJveC5oIgogI2luY2x1ZGUgImJyZWFrX2xpbmVzLmgiCiAj
aW5jbHVkZSA8d3RmL0Fsd2F5c0lubGluZS5oPgpAQCAtNTcwLDEyICs1NzEsMTEgQEAgdm9pZCBS
ZW5kZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4oYgogICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgaWYgKG8tPmlzUG9zaXRpb25lZCgpKQogICAgICAgICAgICAgICAgICAgICBvLT5j
b250YWluaW5nQmxvY2soKS0+aW5zZXJ0UG9zaXRpb25lZE9iamVjdChib3gpOwotICAgICAgICAg
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAoby0+aXNGbG9hdGluZygpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXRzLmFwcGVuZChGbG9hdFdpdGhSZWN0KGJveCkp
OwotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChmdWxsTGF5b3V0IHx8IG8tPm5lZWRzTGF5
b3V0KCkpIC8vIFJlcGxhY2VkIGVsZW1lbnRzCi0gICAgICAgICAgICAgICAgICAgICAgICB0b1Jl
bmRlckJveChvKS0+ZGlydHlMaW5lQm94ZXMoZnVsbExheW91dCk7Ci0KKyAgICAgICAgICAgICAg
ICBlbHNlIGlmIChvLT5pc0Zsb2F0aW5nKCkpCisgICAgICAgICAgICAgICAgICAgIGZsb2F0cy5h
cHBlbmQoRmxvYXRXaXRoUmVjdChib3gpKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChmdWxs
TGF5b3V0IHx8IG8tPm5lZWRzTGF5b3V0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gUmVw
bGFjZWQgZWxlbWVudHMKKyAgICAgICAgICAgICAgICAgICAgdG9SZW5kZXJCb3gobyktPmRpcnR5
TGluZUJveGVzKGZ1bGxMYXlvdXQpOwogICAgICAgICAgICAgICAgICAgICBvLT5sYXlvdXRJZk5l
ZWRlZCgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSBpZiAoby0+aXNU
ZXh0KCkgfHwgKG8tPmlzUmVuZGVySW5saW5lKCkgJiYgIWVuZE9mSW5saW5lKSkgewpAQCAtNTk0
LDcgKzU5NCw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dElubGluZUNoaWxkcmVuKGIKICAg
ICAgICAgdW5zaWduZWQgZmxvYXRJbmRleDsKICAgICAgICAgYm9vbCBmaXJzdExpbmUgPSB0cnVl
OwogICAgICAgICBib29sIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSA9IHRydWU7Ci0gICAgICAg
IFJvb3RJbmxpbmVCb3gqIHN0YXJ0TGluZSA9IGRldGVybWluZVN0YXJ0UG9zaXRpb24oZmlyc3RM
aW5lLCBmdWxsTGF5b3V0LCBwcmV2aW91c0xpbmVCcm9rZUNsZWFubHksIHJlc29sdmVyLCBmbG9h
dHMsIGZsb2F0SW5kZXgpOworICAgICAgICBSb290SW5saW5lQm94KiBzdGFydExpbmUgPSBkZXRl
cm1pbmVTdGFydFBvc2l0aW9uKGZpcnN0TGluZSwgZnVsbExheW91dCwgcHJldmlvdXNMaW5lQnJv
a2VDbGVhbmx5LCByZXNvbHZlciwgZmxvYXRzLCBmbG9hdEluZGV4LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZVJlcGFpbnRCb3Vu
ZHMsIHJlcGFpbnRUb3AsIHJlcGFpbnRCb3R0b20pOwogCiAgICAgICAgIGlmIChmdWxsTGF5b3V0
ICYmIGhhc0lubGluZUNoaWxkICYmICFzZWxmTmVlZHNMYXlvdXQoKSkgewogICAgICAgICAgICAg
c2V0TmVlZHNMYXlvdXQodHJ1ZSwgZmFsc2UpOyAgLy8gTWFyayBvdXJzZWx2ZXMgYXMgbmVlZGlu
ZyBhIGZ1bGwgbGF5b3V0LiBUaGlzIHdheSB3ZSdsbCByZXBhaW50IGxpa2UKQEAgLTYyMiw5ICs2
MjMsMTEgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4oYgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA6IGRldGVybWluZUVuZFBvc2l0aW9uKHN0YXJ0
TGluZSwgY2xlYW5MaW5lU3RhcnQsIGNsZWFuTGluZUJpZGlTdGF0dXMsIGVuZExpbmVZUG9zKTsK
IAogICAgICAgICBpZiAoc3RhcnRMaW5lKSB7Ci0gICAgICAgICAgICB1c2VSZXBhaW50Qm91bmRz
ID0gdHJ1ZTsKLSAgICAgICAgICAgIHJlcGFpbnRUb3AgPSBoZWlnaHQoKTsKLSAgICAgICAgICAg
IHJlcGFpbnRCb3R0b20gPSBoZWlnaHQoKTsKKyAgICAgICAgICAgIGlmICghdXNlUmVwYWludEJv
dW5kcykgeworICAgICAgICAgICAgICAgIHVzZVJlcGFpbnRCb3VuZHMgPSB0cnVlOworICAgICAg
ICAgICAgICAgIHJlcGFpbnRUb3AgPSBoZWlnaHQoKTsKKyAgICAgICAgICAgICAgICByZXBhaW50
Qm90dG9tID0gaGVpZ2h0KCk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBSZW5kZXJBcmVu
YSogYXJlbmEgPSByZW5kZXJBcmVuYSgpOwogICAgICAgICAgICAgUm9vdElubGluZUJveCogYm94
ID0gc3RhcnRMaW5lOwogICAgICAgICAgICAgd2hpbGUgKGJveCkgewpAQCAtNjU5LDYgKzY2Miw3
IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dElubGluZUNoaWxkcmVuKGIKICAgICAgICAgYm9v
bCBjaGVja0ZvckZsb2F0c0Zyb21MYXN0TGluZSA9IGZhbHNlOwogCiAgICAgICAgIGJvb2wgaXNM
aW5lRW1wdHkgPSB0cnVlOworICAgICAgICBib29sIHBhZ2luYXRlZCA9IHZpZXcoKS0+bGF5b3V0
U3RhdGUoKS0+cGFnaW5hdGVkKCk7CiAKICAgICAgICAgd2hpbGUgKCFlbmQuYXRFbmQoKSkgewog
ICAgICAgICAgICAgLy8gRklYTUU6IElzIHRoaXMgY2hlY2sgbmVjZXNzYXJ5IGJlZm9yZSB0aGUg
Zmlyc3QgaXRlcmF0aW9uIG9yIGNhbiBpdCBiZSBtb3ZlZCB0byB0aGUgZW5kPwpAQCAtNzg2LDYg
Kzc5MCwxNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVDaGlsZHJlbihiCiAgICAg
ICAgICAgICAgICAgICAgICAgICByZXBhaW50VG9wID0gbWluKHJlcGFpbnRUb3AsIGxpbmVCb3gt
PnRvcFZpc2libGVPdmVyZmxvdygpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGFpbnRC
b3R0b20gPSBtYXgocmVwYWludEJvdHRvbSwgbGluZUJveC0+Ym90dG9tVmlzaWJsZU92ZXJmbG93
KCkpOwogICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgICAgICBpZiAocGFnaW5hdGVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgYWRqdXN0bWVudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBhZGp1c3RMaW5lUG9z
aXRpb25Gb3JQYWdpbmF0aW9uKGxpbmVCb3gsIGFkanVzdG1lbnQpOworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGFkanVzdG1lbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
aW5lQm94LT5hZGp1c3RQb3NpdGlvbigwLCBhZGp1c3RtZW50KTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAodXNlUmVwYWludEJvdW5kcykgLy8gVGhpcyBjYW4gb25seSBiZSBhIHBv
c2l0aXZlIGFkanVzdG1lbnQsIHNvIG5vIG5lZWQgdG8gdXBkYXRlIHJlcGFpbnRUb3AuCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGFpbnRCb3R0b20gPSBtYXgocmVwYWludEJv
dHRvbSwgbGluZUJveC0+Ym90dG9tVmlzaWJsZU92ZXJmbG93KCkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNldEhlaWdodChsaW5lQm94LT5ibG9ja0hlaWdodCgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IH0KIAogICAgICAgICAgICAgICAgIGZpcnN0TGluZSA9IGZhbHNlOwpAQCAtODIwLDYgKzgzNSw4
IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dElubGluZUNoaWxkcmVuKGIKICAgICAgICAgICAg
ICAgICBpbnQgZGVsdGEgPSBoZWlnaHQoKSAtIGVuZExpbmVZUG9zOwogICAgICAgICAgICAgICAg
IGZvciAoUm9vdElubGluZUJveCogbGluZSA9IGVuZExpbmU7IGxpbmU7IGxpbmUgPSBsaW5lLT5u
ZXh0Um9vdEJveCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGxpbmUtPmF0dGFjaExpbmUoKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHBhZ2luYXRlZCkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGFkanVzdExpbmVQb3NpdGlvbkZvclBhZ2luYXRpb24obGluZSwgZGVsdGEpOwogICAgICAg
ICAgICAgICAgICAgICBpZiAoZGVsdGEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGFp
bnRUb3AgPSBtaW4ocmVwYWludFRvcCwgbGluZS0+dG9wVmlzaWJsZU92ZXJmbG93KCkgKyBtaW4o
ZGVsdGEsIDApKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGFpbnRCb3R0b20gPSBtYXgo
cmVwYWludEJvdHRvbSwgbGluZS0+Ym90dG9tVmlzaWJsZU92ZXJmbG93KCkgKyBtYXgoZGVsdGEs
IDApKTsKQEAgLTkwMCw3ICs5MTcsOCBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVD
aGlsZHJlbihiCiB9CiAKIFJvb3RJbmxpbmVCb3gqIFJlbmRlckJsb2NrOjpkZXRlcm1pbmVTdGFy
dFBvc2l0aW9uKGJvb2wmIGZpcnN0TGluZSwgYm9vbCYgZnVsbExheW91dCwgYm9vbCYgcHJldmlv
dXNMaW5lQnJva2VDbGVhbmx5LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIElubGluZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIsIFZlY3RvcjxGbG9h
dFdpdGhSZWN0PiYgZmxvYXRzLCB1bnNpZ25lZCYgbnVtQ2xlYW5GbG9hdHMpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmxpbmVCaWRpUmVzb2x2
ZXImIHJlc29sdmVyLCBWZWN0b3I8RmxvYXRXaXRoUmVjdD4mIGZsb2F0cywgdW5zaWduZWQmIG51
bUNsZWFuRmxvYXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCYgdXNlUmVwYWludEJvdW5kcywgaW50JiByZXBhaW50VG9wLCBpbnQmIHJl
cGFpbnRCb3R0b20pCiB7CiAgICAgUm9vdElubGluZUJveCogY3VyciA9IDA7CiAgICAgUm9vdElu
bGluZUJveCogbGFzdCA9IDA7CkBAIC05MTMsNyArOTMxLDggQEAgUm9vdElubGluZUJveCogUmVu
ZGVyQmxvY2s6OmRldGVybWluZVN0YQogICAgICAgICAgICAgICAgIFZlY3RvcjxSZW5kZXJCb3gq
Pjo6aXRlcmF0b3IgZW5kID0gY2xlYW5MaW5lRmxvYXRzLT5lbmQoKTsKICAgICAgICAgICAgICAg
ICBmb3IgKFZlY3RvcjxSZW5kZXJCb3gqPjo6aXRlcmF0b3IgbyA9IGNsZWFuTGluZUZsb2F0cy0+
YmVnaW4oKTsgbyAhPSBlbmQ7ICsrbykgewogICAgICAgICAgICAgICAgICAgICBSZW5kZXJCb3gq
IGYgPSAqbzsKLSAgICAgICAgICAgICAgICAgICAgSW50U2l6ZSBuZXdTaXplKGYtPndpZHRoKCkg
KyBmLT5tYXJnaW5MZWZ0KCkgK2YtPm1hcmdpblJpZ2h0KCksIGYtPmhlaWdodCgpICsgZi0+bWFy
Z2luVG9wKCkgKyBmLT5tYXJnaW5Cb3R0b20oKSk7CisgICAgICAgICAgICAgICAgICAgIGYtPmxh
eW91dElmTmVlZGVkKCk7CisgICAgICAgICAgICAgICAgICAgIEludFNpemUgbmV3U2l6ZShmLT53
aWR0aCgpICsgZi0+bWFyZ2luTGVmdCgpICsgZi0+bWFyZ2luUmlnaHQoKSwgZi0+aGVpZ2h0KCkg
KyBmLT5tYXJnaW5Ub3AoKSArIGYtPm1hcmdpbkJvdHRvbSgpKTsKICAgICAgICAgICAgICAgICAg
ICAgQVNTRVJUKGZsb2F0SW5kZXggPCBmbG9hdHMuc2l6ZSgpKTsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKGZsb2F0c1tmbG9hdEluZGV4XS5vYmplY3QgIT0gZikgewogICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gQSBuZXcgZmxvYXQgaGFzIGJlZW4gaW5zZXJ0ZWQgYmVmb3JlIHRoaXMgbGlu
ZSBvciBiZWZvcmUgaXRzIGxhc3Qga25vd24gZmxvYXQuCkBAIC05NzIsNiArOTkxLDIyIEBAIFJv
b3RJbmxpbmVCb3gqIFJlbmRlckJsb2NrOjpkZXRlcm1pbmVTdGEKICAgICAgICAgbGFzdCA9IGN1
cnIgPyBjdXJyLT5wcmV2Um9vdEJveCgpIDogbGFzdFJvb3RCb3goKTsKICAgICB9CiAKKyAgICAv
LyBQYWdpbmF0ZSBhbGwgb2YgdGhlIGNsZWFuIGxpbmVzLgorICAgIGJvb2wgcGFnaW5hdGVkID0g
dmlldygpLT5sYXlvdXRTdGF0ZSgpLT5wYWdpbmF0ZWQoKTsKKyAgICBpZiAocGFnaW5hdGVkKSB7
CisgICAgICAgIGludCBkZWx0YSA9IDA7CisgICAgICAgIGZvciAoUm9vdElubGluZUJveCogbGlu
ZUJveCA9IGZpcnN0Um9vdEJveCgpOyBsaW5lQm94ICE9IGN1cnI7IGxpbmVCb3ggPSBsaW5lQm94
LT5uZXh0Um9vdEJveCgpKSB7CisgICAgICAgICAgICBhZGp1c3RMaW5lUG9zaXRpb25Gb3JQYWdp
bmF0aW9uKGxpbmVCb3gsIGRlbHRhKTsKKyAgICAgICAgICAgIGlmIChkZWx0YSkgeworICAgICAg
ICAgICAgICAgIGxpbmVCb3gtPmFkanVzdFBvc2l0aW9uKDAsIGRlbHRhKTsKKyAgICAgICAgICAg
ICAgICBpZiAoIXVzZVJlcGFpbnRCb3VuZHMpCisgICAgICAgICAgICAgICAgICAgIHVzZVJlcGFp
bnRCb3VuZHMgPSB0cnVlOworICAgICAgICAgICAgICAgIHJlcGFpbnRUb3AgPSBtaW4ocmVwYWlu
dFRvcCwgbGluZUJveC0+dG9wVmlzaWJsZU92ZXJmbG93KCkpOworICAgICAgICAgICAgICAgIHJl
cGFpbnRCb3R0b20gPSBtYXgocmVwYWludEJvdHRvbSwgbGluZUJveC0+Ym90dG9tVmlzaWJsZU92
ZXJmbG93KCkgKyBkZWx0YSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKICAg
ICBudW1DbGVhbkZsb2F0cyA9IDA7CiAgICAgaWYgKCFmbG9hdHMuaXNFbXB0eSgpKSB7CiAgICAg
ICAgIGludCBzYXZlZEhlaWdodCA9IGhlaWdodCgpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3gu
Y3BwCShyZXZpc2lvbiA2Njg4NikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTk3Myw3ICs5NzMsNyBAQCB2b2lkIFJlbmRlckJveDo6bWFwTG9j
YWxUb0NvbnRhaW5lcihSZW5kCiAgICAgaWYgKFJlbmRlclZpZXcqIHYgPSB2aWV3KCkpIHsKICAg
ICAgICAgaWYgKHYtPmxheW91dFN0YXRlRW5hYmxlZCgpICYmICFyZXBhaW50Q29udGFpbmVyKSB7
CiAgICAgICAgICAgICBMYXlvdXRTdGF0ZSogbGF5b3V0U3RhdGUgPSB2LT5sYXlvdXRTdGF0ZSgp
OwotICAgICAgICAgICAgSW50U2l6ZSBvZmZzZXQgPSBsYXlvdXRTdGF0ZS0+bV9vZmZzZXQ7Cisg
ICAgICAgICAgICBJbnRTaXplIG9mZnNldCA9IGxheW91dFN0YXRlLT5tX3BhaW50T2Zmc2V0Owog
ICAgICAgICAgICAgb2Zmc2V0LmV4cGFuZCh4KCksIHkoKSk7CiAgICAgICAgICAgICBpZiAoc3R5
bGUoKS0+cG9zaXRpb24oKSA9PSBSZWxhdGl2ZVBvc2l0aW9uICYmIGxheWVyKCkpCiAgICAgICAg
ICAgICAgICAgb2Zmc2V0ICs9IGxheWVyKCktPnJlbGF0aXZlUG9zaXRpb25PZmZzZXQoKTsKQEAg
LTExNzAsNyArMTE3MCw3IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUmVjdEZvclJlcGFpbnQo
UmUKICAgICAgICAgICAgICAgICByZWN0Lm1vdmUobGF5ZXIoKS0+cmVsYXRpdmVQb3NpdGlvbk9m
ZnNldCgpKTsKIAogICAgICAgICAgICAgcmVjdC5tb3ZlKHgoKSwgeSgpKTsKLSAgICAgICAgICAg
IHJlY3QubW92ZShsYXlvdXRTdGF0ZS0+bV9vZmZzZXQpOworICAgICAgICAgICAgcmVjdC5tb3Zl
KGxheW91dFN0YXRlLT5tX3BhaW50T2Zmc2V0KTsKICAgICAgICAgICAgIGlmIChsYXlvdXRTdGF0
ZS0+bV9jbGlwcGVkKQogICAgICAgICAgICAgICAgIHJlY3QuaW50ZXJzZWN0KGxheW91dFN0YXRl
LT5tX2NsaXBSZWN0KTsKICAgICAgICAgICAgIHJldHVybjsKSW5kZXg6IFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckZsZXhpYmxlQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJGbGV4aWJsZUJveC5jcHAJKHJldmlzaW9uIDY2ODg2KQorKysgV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRmxleGlibGVCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDEsNyArMjAx
LDcgQEAgdm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6Y2FsY1ByZWZXaWR0aHMoKQogICAgIHNldFBy
ZWZXaWR0aHNEaXJ0eShmYWxzZSk7CiB9CiAKLXZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmxheW91
dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbikKK3ZvaWQgUmVuZGVyRmxleGlibGVCb3g6Omxh
eW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgaW50IC8qcGFnZUhlaWdodCBGSVhNRTog
SW1wbGVtZW50ICovKQogewogICAgIEFTU0VSVChuZWVkc0xheW91dCgpKTsKIApJbmRleDogV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5oCShyZXZpc2lvbiA2Njg4NikKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcg
KzM4LDcgQEAgcHVibGljOgogICAgIHZvaWQgY2FsY0hvcml6b250YWxQcmVmV2lkdGhzKCk7CiAg
ICAgdm9pZCBjYWxjVmVydGljYWxQcmVmV2lkdGhzKCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgbGF5
b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxkcmVuKTsKKyAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0
QmxvY2soYm9vbCByZWxheW91dENoaWxkcmVuLCBpbnQgcGFnZUhlaWdodCk7CiAgICAgdm9pZCBs
YXlvdXRIb3Jpem9udGFsQm94KGJvb2wgcmVsYXlvdXRDaGlsZHJlbik7CiAgICAgdm9pZCBsYXlv
dXRWZXJ0aWNhbEJveChib29sIHJlbGF5b3V0Q2hpbGRyZW4pOwogCkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlcklubGluZS5jcHAJKHJldmlzaW9uIDY2ODg2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVySW5saW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQ3LDcgKzY0Nyw3IEBAIHZvaWQg
UmVuZGVySW5saW5lOjpjb21wdXRlUmVjdEZvclJlcGFpbnQKICAgICAgICAgICAgIExheW91dFN0
YXRlKiBsYXlvdXRTdGF0ZSA9IHYtPmxheW91dFN0YXRlKCk7CiAgICAgICAgICAgICBpZiAoc3R5
bGUoKS0+cG9zaXRpb24oKSA9PSBSZWxhdGl2ZVBvc2l0aW9uICYmIGxheWVyKCkpCiAgICAgICAg
ICAgICAgICAgcmVjdC5tb3ZlKGxheWVyKCktPnJlbGF0aXZlUG9zaXRpb25PZmZzZXQoKSk7Ci0g
ICAgICAgICAgICByZWN0Lm1vdmUobGF5b3V0U3RhdGUtPm1fb2Zmc2V0KTsKKyAgICAgICAgICAg
IHJlY3QubW92ZShsYXlvdXRTdGF0ZS0+bV9wYWludE9mZnNldCk7CiAgICAgICAgICAgICBpZiAo
bGF5b3V0U3RhdGUtPm1fY2xpcHBlZCkKICAgICAgICAgICAgICAgICByZWN0LmludGVyc2VjdChs
YXlvdXRTdGF0ZS0+bV9jbGlwUmVjdCk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC03MzQsNyAr
NzM0LDcgQEAgdm9pZCBSZW5kZXJJbmxpbmU6Om1hcExvY2FsVG9Db250YWluZXIoUgogICAgIGlm
IChSZW5kZXJWaWV3ICp2ID0gdmlldygpKSB7CiAgICAgICAgIGlmICh2LT5sYXlvdXRTdGF0ZUVu
YWJsZWQoKSAmJiAhcmVwYWludENvbnRhaW5lcikgewogICAgICAgICAgICAgTGF5b3V0U3RhdGUq
IGxheW91dFN0YXRlID0gdi0+bGF5b3V0U3RhdGUoKTsKLSAgICAgICAgICAgIEludFNpemUgb2Zm
c2V0ID0gbGF5b3V0U3RhdGUtPm1fb2Zmc2V0OworICAgICAgICAgICAgSW50U2l6ZSBvZmZzZXQg
PSBsYXlvdXRTdGF0ZS0+bV9wYWludE9mZnNldDsKICAgICAgICAgICAgIGlmIChzdHlsZSgpLT5w
b3NpdGlvbigpID09IFJlbGF0aXZlUG9zaXRpb24gJiYgbGF5ZXIoKSkKICAgICAgICAgICAgICAg
ICBvZmZzZXQgKz0gbGF5ZXIoKS0+cmVsYXRpdmVQb3NpdGlvbk9mZnNldCgpOwogICAgICAgICAg
ICAgdHJhbnNmb3JtU3RhdGUubW92ZShvZmZzZXQpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyLmNwcAkocmV2aXNpb24gNjY5MDMpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1NDEsMTEgKzI1NDEsMTEgQEAgdm9pZCBSZW5kZXJM
YXllcjo6cGFpbnRDaGlsZExheWVySW50b0NvbAogICAgIGNvbHVtbkJsb2NrLT5sYXllcigpLT5j
b252ZXJ0VG9MYXllckNvb3Jkcyhyb290TGF5ZXIsIGxheWVyWCwgbGF5ZXJZKTsKICAgICAKICAg
ICBDb2x1bW5JbmZvKiBjb2xJbmZvID0gY29sdW1uQmxvY2stPmNvbHVtbkluZm8oKTsKLSAgICB1
bnNpZ25lZCBjb2xDb3VudCA9IGNvbEluZm8tPmNvbHVtbkNvdW50KCk7CisgICAgdW5zaWduZWQg
Y29sQ291bnQgPSBjb2x1bW5CbG9jay0+Y29sdW1uQ291bnQoY29sSW5mbyk7CiAgICAgaW50IGN1
cnJZT2Zmc2V0ID0gMDsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY29sQ291bnQ7IGkr
KykgewogICAgICAgICAvLyBGb3IgZWFjaCByZWN0LCB3ZSBjbGlwIHRvIHRoZSByZWN0LCBhbmQg
dGhlbiB3ZSBhZGp1c3Qgb3VyIGNvb3Jkcy4KLSAgICAgICAgSW50UmVjdCBjb2xSZWN0ID0gY29s
SW5mby0+Y29sdW1uUmVjdEF0KGkpOworICAgICAgICBJbnRSZWN0IGNvbFJlY3QgPSBjb2x1bW5C
bG9jay0+Y29sdW1uUmVjdEF0KGNvbEluZm8sIGkpOwogICAgICAgICBpbnQgY3VyclhPZmZzZXQg
PSBjb2xSZWN0LngoKSAtIChjb2x1bW5CbG9jay0+Ym9yZGVyTGVmdCgpICsgY29sdW1uQmxvY2st
PnBhZGRpbmdMZWZ0KCkpOwogICAgICAgICBjb2xSZWN0Lm1vdmUobGF5ZXJYLCBsYXllclkpOwog
CkBAIC0zMDA3LDE3ICszMDA3LDE3IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVz
dENoaWxkTGEKICAgICBjb2x1bW5CbG9jay0+bGF5ZXIoKS0+Y29udmVydFRvTGF5ZXJDb29yZHMo
cm9vdExheWVyLCBsYXllclgsIGxheWVyWSk7CiAgICAgCiAgICAgQ29sdW1uSW5mbyogY29sSW5m
byA9IGNvbHVtbkJsb2NrLT5jb2x1bW5JbmZvKCk7Ci0gICAgaW50IGNvbENvdW50ID0gY29sSW5m
by0+Y29sdW1uQ291bnQoKTsKKyAgICBpbnQgY29sQ291bnQgPSBjb2x1bW5CbG9jay0+Y29sdW1u
Q291bnQoY29sSW5mbyk7CiAgICAgCiAgICAgLy8gV2UgaGF2ZSB0byBnbyBiYWNrd2FyZHMgZnJv
bSB0aGUgbGFzdCBjb2x1bW4gdG8gdGhlIGZpcnN0LgogICAgIGludCBsZWZ0ID0gY29sdW1uQmxv
Y2stPmJvcmRlckxlZnQoKSArIGNvbHVtbkJsb2NrLT5wYWRkaW5nTGVmdCgpOwogICAgIGludCBj
dXJyWU9mZnNldCA9IDA7CiAgICAgaW50IGk7CiAgICAgZm9yIChpID0gMDsgaSA8IGNvbENvdW50
OyBpKyspCi0gICAgICAgIGN1cnJZT2Zmc2V0IC09IGNvbEluZm8tPmNvbHVtblJlY3RBdChpKS5o
ZWlnaHQoKTsKKyAgICAgICAgY3VycllPZmZzZXQgLT0gY29sdW1uQmxvY2stPmNvbHVtblJlY3RB
dChjb2xJbmZvLCBpKS5oZWlnaHQoKTsKICAgICBmb3IgKGkgPSBjb2xDb3VudCAtIDE7IGkgPj0g
MDsgaS0tKSB7CiAgICAgICAgIC8vIEZvciBlYWNoIHJlY3QsIHdlIGNsaXAgdG8gdGhlIHJlY3Qs
IGFuZCB0aGVuIHdlIGFkanVzdCBvdXIgY29vcmRzLgotICAgICAgICBJbnRSZWN0IGNvbFJlY3Qg
PSBjb2xJbmZvLT5jb2x1bW5SZWN0QXQoaSk7CisgICAgICAgIEludFJlY3QgY29sUmVjdCA9IGNv
bHVtbkJsb2NrLT5jb2x1bW5SZWN0QXQoY29sSW5mbywgaSk7CiAgICAgICAgIGludCBjdXJyWE9m
ZnNldCA9IGNvbFJlY3QueCgpIC0gbGVmdDsKICAgICAgICAgY3VycllPZmZzZXQgKz0gY29sUmVj
dC5oZWlnaHQoKTsKICAgICAgICAgY29sUmVjdC5tb3ZlKGxheWVyWCwgbGF5ZXJZKTsKSW5kZXg6
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5jcHAJKHJldmlzaW9uIDY2ODg2KQor
KysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNSw3ICszNSw2IEBACiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCiAjaW5jbHVkZSAi
UmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlJvb3RJbmxpbmVCb3guaCIKLSNpbmNsdWRlICJTZXR0
aW5ncy5oIiAvLyBGSVhNRTogVGhpcyBpbmNsdWRlIGNhbiBiZSByZW1vdmVkIHdoZW4gcGFnaW5h
dGVEdXJpbmdMYXlvdXRFbmFibGVkIGlzIHRha2VuIG91dC4KIAogdXNpbmcgbmFtZXNwYWNlIHN0
ZDsKIApAQCAtMTYxLDcgKzE2MCw3IEBAIHZvaWQgUmVuZGVyTGluZUJveExpc3Q6OnBhaW50KFJl
bmRlckJveE0KICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVuZGVyVmlldyogdiA9IHJlbmRlcmVy
LT52aWV3KCk7Ci0gICAgYm9vbCB1c2VQcmludFJlY3QgPSAhdi0+cHJpbnRSZWN0KCkuaXNFbXB0
eSgpICYmICFyZW5kZXJlci0+ZG9jdW1lbnQoKS0+c2V0dGluZ3MoKS0+cGFnaW5hdGVEdXJpbmdM
YXlvdXRFbmFibGVkKCk7CisgICAgYm9vbCB1c2VQcmludFJlY3QgPSAhdi0+cHJpbnRSZWN0KCku
aXNFbXB0eSgpOwogICAgIAogICAgIC8vIFdlIGNhbiBjaGVjayB0aGUgZmlyc3QgYm94IGFuZCBs
YXN0IGJveCBhbmQgYXZvaWQgcGFpbnRpbmcgaWYgd2UgZG9uJ3QKICAgICAvLyBpbnRlcnNlY3Qu
ICBUaGlzIGlzIGEgcXVpY2sgc2hvcnQtY2lyY3VpdCB0aGF0IHdlIGNhbiB0YWtlIHRvIGF2b2lk
IHdhbGtpbmcgYW55IGxpbmVzLgpAQCAtMjE1LDcgKzIxNCw2IEBAIHZvaWQgUmVuZGVyTGluZUJv
eExpc3Q6OnBhaW50KFJlbmRlckJveE0KICAgICAgICAgaW50IGJvdHRvbSA9IGN1cnItPmJvdHRv
bVZpc2libGVPdmVyZmxvdygpICsgcmVuZGVyZXItPm1heGltYWxPdXRsaW5lU2l6ZShpbmZvLnBo
YXNlKTsKICAgICAgICAgaCA9IGJvdHRvbSAtIHRvcDsKICAgICAgICAgeVBvcyA9IHR5ICsgdG9w
OwotICAgICAgICB2LT5zZXRNaW5pbXVtQ29sdW1uSGVpZ2h0KGgpOwogICAgICAgICBpZiAoeVBv
cyA8IGluZm8ucmVjdC5ib3R0b20oKSAmJiB5UG9zICsgaCA+IGluZm8ucmVjdC55KCkpCiAgICAg
ICAgICAgICBjdXJyLT5wYWludChpbmZvLCB0eCwgdHkpOwogICAgIH0KSW5kZXg6IFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclZpZXcuY3BwCShyZXZpc2lvbiA2Njg4NikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw2IEBAIFJlbmRlclZpZXc6
OlJlbmRlclZpZXcoTm9kZSogbm9kZSwgRnJhbWUKICAgICAsIG1fbWF4aW1hbE91dGxpbmVTaXpl
KDApCiAgICAgLCBtX2Jlc3RUcnVuY2F0ZWRBdCgwKQogICAgICwgbV90cnVuY2F0b3JXaWR0aCgw
KQotICAgICwgbV9taW5pbXVtQ29sdW1uSGVpZ2h0KDApCiAgICAgLCBtX2ZvcmNlZFBhZ2VCcmVh
ayhmYWxzZSkKICAgICAsIG1fbGF5b3V0U3RhdGUoMCkKICAgICAsIG1fbGF5b3V0U3RhdGVEaXNh
YmxlQ291bnQoMCkKQEAgLTY5NSw3ICs2OTQsNiBAQCB2b2lkIFJlbmRlclZpZXc6OnNldEJlc3RU
cnVuY2F0ZWRBdChpbnQgCiAKIHZvaWQgUmVuZGVyVmlldzo6cHVzaExheW91dFN0YXRlKFJlbmRl
ck9iamVjdCogcm9vdCkKIHsKLSAgICBBU1NFUlQoIWRvaW5nRnVsbFJlcGFpbnQoKSk7CiAgICAg
QVNTRVJUKG1fbGF5b3V0U3RhdGVEaXNhYmxlQ291bnQgPT0gMCk7CiAgICAgQVNTRVJUKG1fbGF5
b3V0U3RhdGUgPT0gMCk7CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgJKHJldmlzaW9uIDY2
ODg2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCSh3b3JraW5nIGNvcHkpCkBA
IC04MywxMiArODMsMTAgQEAgcHVibGljOgogICAgIEludFJlY3QgcHJpbnRSZWN0KCkgY29uc3Qg
eyByZXR1cm4gbV9wcmludFJlY3Q7IH0KICAgICB2b2lkIHNldFByaW50UmVjdChjb25zdCBJbnRS
ZWN0JiByKSB7IG1fcHJpbnRSZWN0ID0gcjsgfQogCi0gICAgdm9pZCBzZXRUcnVuY2F0ZWRBdChp
bnQgeSkgeyBtX3RydW5jYXRlZEF0ID0geTsgbV9iZXN0VHJ1bmNhdGVkQXQgPSBtX3RydW5jYXRv
cldpZHRoID0gMDsgbV9taW5pbXVtQ29sdW1uSGVpZ2h0ID0gMDsgbV9mb3JjZWRQYWdlQnJlYWsg
PSBmYWxzZTsgfQorICAgIHZvaWQgc2V0VHJ1bmNhdGVkQXQoaW50IHkpIHsgbV90cnVuY2F0ZWRB
dCA9IHk7IG1fYmVzdFRydW5jYXRlZEF0ID0gbV90cnVuY2F0b3JXaWR0aCA9IDA7IG1fZm9yY2Vk
UGFnZUJyZWFrID0gZmFsc2U7IH0KICAgICB2b2lkIHNldEJlc3RUcnVuY2F0ZWRBdChpbnQgeSwg
UmVuZGVyQm94TW9kZWxPYmplY3QqIGZvclJlbmRlcmVyLCBib29sIGZvcmNlZEJyZWFrID0gZmFs
c2UpOwotICAgIHZvaWQgc2V0TWluaW11bUNvbHVtbkhlaWdodChpbnQgaGVpZ2h0KSB7IG1fbWlu
aW11bUNvbHVtbkhlaWdodCA9IGhlaWdodDsgfQogICAgIGludCBiZXN0VHJ1bmNhdGVkQXQoKSBj
b25zdCB7IHJldHVybiBtX2Jlc3RUcnVuY2F0ZWRBdDsgfQotICAgIGludCBtaW5pbXVtQ29sdW1u
SGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9taW5pbXVtQ29sdW1uSGVpZ2h0OyB9Ci0KKyAgICAK
ICAgICBpbnQgdHJ1bmNhdGVkQXQoKSBjb25zdCB7IHJldHVybiBtX3RydW5jYXRlZEF0OyB9CiAK
ICAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBpbnQgdHgs
IGludCB0eSk7CkBAIC0xMjIsMjEgKzEyMCwyMCBAQCBwdWJsaWM6CiAKICAgICBib29sIGRvaW5n
RnVsbFJlcGFpbnQoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lVmlldy0+bmVlZHNGdWxsUmVwYWlu
dCgpOyB9CiAKLSAgICB2b2lkIHB1c2hMYXlvdXRTdGF0ZShSZW5kZXJCb3gqIHJlbmRlcmVyLCBj
b25zdCBJbnRTaXplJiBvZmZzZXQpCisgICAgdm9pZCBwdXNoTGF5b3V0U3RhdGUoUmVuZGVyQm94
KiByZW5kZXJlciwgY29uc3QgSW50U2l6ZSYgb2Zmc2V0LCBpbnQgcGFnZUhlaWdodCA9IDAsIENv
bHVtbkluZm8qIGNvbEluZm8gPSAwKQogICAgIHsKLSAgICAgICAgaWYgKGRvaW5nRnVsbFJlcGFp
bnQoKSkKLSAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgLy8gV2UgcHVzaCBMYXlvdXRTdGF0
ZSBldmVuIGlmIGxheW91dFN0YXRlIGlzIGRpc2FibGVkIGJlY2F1c2UgaXQgc3RvcmVzIGxheW91
dERlbHRhIHRvby4KLSAgICAgICAgbV9sYXlvdXRTdGF0ZSA9IG5ldyAocmVuZGVyQXJlbmEoKSkg
TGF5b3V0U3RhdGUobV9sYXlvdXRTdGF0ZSwgcmVuZGVyZXIsIG9mZnNldCk7CisgICAgICAgIGlm
ICghZG9pbmdGdWxsUmVwYWludCgpIHx8IHJlbmRlcmVyLT5oYXNDb2x1bW5zKCkgfHwgbV9sYXlv
dXRTdGF0ZS0+cGFnaW5hdGVkKCkpCisgICAgICAgICAgICBtX2xheW91dFN0YXRlID0gbmV3IChy
ZW5kZXJBcmVuYSgpKSBMYXlvdXRTdGF0ZShtX2xheW91dFN0YXRlLCByZW5kZXJlciwgb2Zmc2V0
LCBwYWdlSGVpZ2h0LCBjb2xJbmZvKTsKICAgICB9CiAKICAgICB2b2lkIHB1c2hMYXlvdXRTdGF0
ZShSZW5kZXJPYmplY3QqKTsKIAogICAgIHZvaWQgcG9wTGF5b3V0U3RhdGUoKQogICAgIHsKLSAg
ICAgICAgaWYgKGRvaW5nRnVsbFJlcGFpbnQoKSkKLSAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgTGF5b3V0U3RhdGUqIHN0YXRlID0gbV9sYXlvdXRTdGF0ZTsKKyAgICAgICAgaWYgKGRvaW5n
RnVsbFJlcGFpbnQoKSAmJiAhbV9sYXlvdXRTdGF0ZS0+cGFnaW5hdGVkKCkpCisgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIG1fbGF5b3V0U3RhdGUgPSBzdGF0ZS0+bV9uZXh0OwogICAgICAg
ICBzdGF0ZS0+ZGVzdHJveShyZW5kZXJBcmVuYSgpKTsKICAgICB9CkBAIC0xOTgsNyArMTk1LDYg
QEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICBpbnQgbV9iZXN0VHJ1bmNhdGVkQXQ7CiAgICAg
aW50IG1fdHJ1bmNhdG9yV2lkdGg7Ci0gICAgaW50IG1fbWluaW11bUNvbHVtbkhlaWdodDsKICAg
ICBib29sIG1fZm9yY2VkUGFnZUJyZWFrOwogICAgIExheW91dFN0YXRlKiBtX2xheW91dFN0YXRl
OwogICAgIHVuc2lnbmVkIG1fbGF5b3V0U3RhdGVEaXNhYmxlQ291bnQ7CkBAIC0yMjcsMTMgKzIy
MywxMyBAQCB2b2lkIHRvUmVuZGVyVmlldyhjb25zdCBSZW5kZXJWaWV3Kik7CiBjbGFzcyBMYXlv
dXRTdGF0ZU1haW50YWluZXIgOiBwdWJsaWMgTm9uY29weWFibGUgewogcHVibGljOgogICAgIC8v
IGN0b3IgdG8gcHVzaCBub3cKLSAgICBMYXlvdXRTdGF0ZU1haW50YWluZXIoUmVuZGVyVmlldyog
dmlldywgUmVuZGVyQm94KiByb290LCBJbnRTaXplIG9mZnNldCwgYm9vbCBkaXNhYmxlU3RhdGUg
PSBmYWxzZSkKKyAgICBMYXlvdXRTdGF0ZU1haW50YWluZXIoUmVuZGVyVmlldyogdmlldywgUmVu
ZGVyQm94KiByb290LCBJbnRTaXplIG9mZnNldCwgYm9vbCBkaXNhYmxlU3RhdGUgPSBmYWxzZSwg
aW50IHBhZ2VIZWlnaHQgPSAwLCBDb2x1bW5JbmZvKiBjb2xJbmZvID0gMCkKICAgICAgICAgOiBt
X3ZpZXcodmlldykKICAgICAgICAgLCBtX2Rpc2FibGVkKGRpc2FibGVTdGF0ZSkKICAgICAgICAg
LCBtX2RpZFN0YXJ0KGZhbHNlKQogICAgICAgICAsIG1fZGlkRW5kKGZhbHNlKQogICAgIHsKLSAg
ICAgICAgcHVzaChyb290LCBvZmZzZXQpOworICAgICAgICBwdXNoKHJvb3QsIG9mZnNldCwgcGFn
ZUhlaWdodCwgY29sSW5mbyk7CiAgICAgfQogICAgIAogICAgIC8vIGN0b3IgdG8gbWF5YmUgcHVz
aCBsYXRlcgpAQCAtMjUwLDExICsyNDYsMTEgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQobV9k
aWRTdGFydCA9PSBtX2RpZEVuZCk7ICAgLy8gaWYgdGhpcyBmaXJlcywgaXQgbWVhbnMgdGhhdCBz
b21lb25lIGRpZCBhIHB1c2goKSwgYnV0IGZvcmdvdCB0byBwb3AoKS4KICAgICB9CiAKLSAgICB2
b2lkIHB1c2goUmVuZGVyQm94KiByb290LCBJbnRTaXplIG9mZnNldCkKKyAgICB2b2lkIHB1c2go
UmVuZGVyQm94KiByb290LCBJbnRTaXplIG9mZnNldCwgaW50IHBhZ2VIZWlnaHQgPSAwLCBDb2x1
bW5JbmZvKiBjb2xJbmZvID0gMCkKICAgICB7CiAgICAgICAgIEFTU0VSVCghbV9kaWRTdGFydCk7
CiAgICAgICAgIC8vIFdlIHB1c2ggc3RhdGUgZXZlbiBpZiBkaXNhYmxlZCwgYmVjYXVzZSB3ZSBz
dGlsbCBuZWVkIHRvIHN0b3JlIGxheW91dERlbHRhCi0gICAgICAgIG1fdmlldy0+cHVzaExheW91
dFN0YXRlKHJvb3QsIG9mZnNldCk7CisgICAgICAgIG1fdmlldy0+cHVzaExheW91dFN0YXRlKHJv
b3QsIG9mZnNldCwgcGFnZUhlaWdodCwgY29sSW5mbyk7CiAgICAgICAgIGlmIChtX2Rpc2FibGVk
KQogICAgICAgICAgICAgbV92aWV3LT5kaXNhYmxlTGF5b3V0U3RhdGUoKTsKICAgICAgICAgbV9k
aWRTdGFydCA9IHRydWU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67248</attachid>
            <date>2010-09-10 15:26:29 -0700</date>
            <delta_ts>2010-09-10 22:32:49 -0700</delta_ts>
            <desc>This patch propagates first line pagination info outwards</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>69991</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL0NvbHVtbkluZm8uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9Db2x1bW5JbmZvLmgJKHJldmlzaW9uIDY2OTAzKQorKysgV2ViQ29yZS9y
ZW5kZXJpbmcvQ29sdW1uSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw5IEBAIHB1
YmxpYzoKICAgICBDb2x1bW5JbmZvKCkKICAgICAgICAgOiBtX2Rlc2lyZWRDb2x1bW5XaWR0aCgw
KQogICAgICAgICAsIG1fZGVzaXJlZENvbHVtbkNvdW50KDEpCisgICAgICAgICwgbV9jb2x1bW5D
b3VudCgxKQorICAgICAgICAsIG1fY29sdW1uSGVpZ2h0KDApCisgICAgICAgICwgbV9taW5pbXVt
Q29sdW1uSGVpZ2h0KDApCiAgICAgICAgIHsgfQogICAgIAogICAgIGludCBkZXNpcmVkQ29sdW1u
V2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2Rlc2lyZWRDb2x1bW5XaWR0aDsgfQpAQCAtNDQsMTkg
KzQ3LDI4IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBkZXNpcmVkQ29sdW1uQ291bnQoKSBjb25z
dCB7IHJldHVybiBtX2Rlc2lyZWRDb2x1bW5Db3VudDsgfQogICAgIHZvaWQgc2V0RGVzaXJlZENv
bHVtbkNvdW50KHVuc2lnbmVkIGNvdW50KSB7IG1fZGVzaXJlZENvbHVtbkNvdW50ID0gY291bnQ7
IH0KIAotICAgIC8vIEVuY2Fwc3VsYXRlZCBmb3IgdGhlIGZ1dHVyZSB3aGVyZSB3ZSBjYW4gYXZv
aWQgc3RvcmluZyB0aGUgcmVjdHMgYW5kIGp1c3QgY29tcHV0ZSB0aGVtIGR5bmFtaWNhbGx5Lgot
ICAgIHNpemVfdCBjb2x1bW5Db3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fY29sdW1uUmVjdHMuc2l6
ZSgpOyB9Ci0gICAgY29uc3QgSW50UmVjdCYgY29sdW1uUmVjdEF0KHNpemVfdCBpKSBjb25zdCB7
IHJldHVybiBtX2NvbHVtblJlY3RzW2ldOyB9CisgICAgdW5zaWduZWQgY29sdW1uQ291bnQoKSBj
b25zdCB7IHJldHVybiBtX2NvbHVtbkNvdW50OyB9CisgICAgaW50IGNvbHVtbkhlaWdodCgpIGNv
bnN0IHsgcmV0dXJuIG1fY29sdW1uSGVpZ2h0OyB9CiAKLSAgICB2b2lkIGNsZWFyQ29sdW1ucygp
IHsgbV9jb2x1bW5SZWN0cy5jbGVhcigpOyB9CisgICAgLy8gU2V0IG91ciBjb3VudCBhbmQgaGVp
Z2h0LiAgVGhpcyBpcyBlbm91Z2ggaW5mbyBmb3IgYSBSZW5kZXJCbG9jayB0byBjb21wdXRlIHBh
Z2UgcmVjdHMKKyAgICAvLyBkeW5hbWljYWxseS4KKyAgICB2b2lkIHNldENvbHVtbkNvdW50QW5k
SGVpZ2h0KGludCBjLCBpbnQgaCkKKyAgICB7IAorICAgICAgICBtX2NvbHVtbkNvdW50ID0gYzsK
KyAgICAgICAgbV9jb2x1bW5IZWlnaHQgPSBoOworICAgIH0KKyAgICB2b2lkIHNldENvbHVtbkhl
aWdodChpbnQgaCkgeyBtX2NvbHVtbkhlaWdodCA9IGg7IH0KKworICAgIHZvaWQgdXBkYXRlTWlu
aW11bUNvbHVtbkhlaWdodChpbnQgaCkgeyBtX21pbmltdW1Db2x1bW5IZWlnaHQgPSBtYXgoaCwg
bV9taW5pbXVtQ29sdW1uSGVpZ2h0KTsgfQorICAgIGludCBtaW5pbXVtQ29sdW1uSGVpZ2h0KCkg
Y29uc3QgeyByZXR1cm4gbV9taW5pbXVtQ29sdW1uSGVpZ2h0OyB9CiAKLSAgICAvLyBGSVhNRTog
V2lsbCBnbyBhd2F5IG9uY2Ugd2UgZG9uJ3QgdXNlIHRoZSBWZWN0b3IuCi0gICAgdm9pZCBhZGRD
b2x1bW5SZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpIHsgbV9jb2x1bW5SZWN0cy5hcHBlbmQocmVj
dCk7IH0KLSAgICAKIHByaXZhdGU6CiAgICAgaW50IG1fZGVzaXJlZENvbHVtbldpZHRoOwogICAg
IHVuc2lnbmVkIG1fZGVzaXJlZENvbHVtbkNvdW50OwotICAgIFZlY3RvcjxJbnRSZWN0PiBtX2Nv
bHVtblJlY3RzOworICAgIAorICAgIHVuc2lnbmVkIG1fY29sdW1uQ291bnQ7CisgICAgaW50IG1f
Y29sdW1uSGVpZ2h0OworICAgIGludCBtX21pbmltdW1Db2x1bW5IZWlnaHQ7CiB9OwogCiB9Cklu
ZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvTGF5b3V0U3RhdGUuY3BwCShyZXZpc2lvbiA2Njg4NikKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsOCArMzMs
OSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUxheW91dFN0YXRlOjpMYXlvdXRTdGF0ZShM
YXlvdXRTdGF0ZSogcHJldiwgUmVuZGVyQm94KiByZW5kZXJlciwgY29uc3QgSW50U2l6ZSYgb2Zm
c2V0KQotICAgIDogbV9uZXh0KHByZXYpCitMYXlvdXRTdGF0ZTo6TGF5b3V0U3RhdGUoTGF5b3V0
U3RhdGUqIHByZXYsIFJlbmRlckJveCogcmVuZGVyZXIsIGNvbnN0IEludFNpemUmIG9mZnNldCwg
aW50IHBhZ2VIZWlnaHQsIENvbHVtbkluZm8qIGNvbEluZm8pCisgICAgOiBtX2NvbHVtbkluZm8o
Y29sSW5mbykKKyAgICAsIG1fbmV4dChwcmV2KQogI2lmbmRlZiBOREVCVUcKICAgICAsIG1fcmVu
ZGVyZXIocmVuZGVyZXIpCiAjZW5kaWYKQEAgLTQ1LDQzICs0Niw2NyBAQCBMYXlvdXRTdGF0ZTo6
TGF5b3V0U3RhdGUoTGF5b3V0U3RhdGUqIHByCiAgICAgaWYgKGZpeGVkKSB7CiAgICAgICAgIC8v
IEZJWE1FOiBUaGlzIGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgd2l0aCB0cmFuc2Zvcm1zLgogICAg
ICAgICBGbG9hdFBvaW50IGZpeGVkT2Zmc2V0ID0gcmVuZGVyZXItPnZpZXcoKS0+bG9jYWxUb0Fi
c29sdXRlKEZsb2F0UG9pbnQoKSwgdHJ1ZSk7Ci0gICAgICAgIG1fb2Zmc2V0ID0gSW50U2l6ZShm
aXhlZE9mZnNldC54KCksIGZpeGVkT2Zmc2V0LnkoKSkgKyBvZmZzZXQ7CisgICAgICAgIG1fcGFp
bnRPZmZzZXQgPSBJbnRTaXplKGZpeGVkT2Zmc2V0LngoKSwgZml4ZWRPZmZzZXQueSgpKSArIG9m
ZnNldDsKICAgICB9IGVsc2UKLSAgICAgICAgbV9vZmZzZXQgPSBwcmV2LT5tX29mZnNldCArIG9m
ZnNldDsKKyAgICAgICAgbV9wYWludE9mZnNldCA9IHByZXYtPm1fcGFpbnRPZmZzZXQgKyBvZmZz
ZXQ7CiAKLSAgICBpZiAocmVuZGVyZXItPmlzUmVsUG9zaXRpb25lZCgpKSB7Ci0gICAgICAgIGlm
IChyZW5kZXJlci0+aGFzTGF5ZXIoKSkKLSAgICAgICAgICAgIG1fb2Zmc2V0ICs9IHJlbmRlcmVy
LT5sYXllcigpLT5yZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0KCk7Ci0gICAgfSBlbHNlIGlmIChyZW5k
ZXJlci0+aXNQb3NpdGlvbmVkKCkgJiYgIWZpeGVkKSB7CisgICAgaWYgKHJlbmRlcmVyLT5pc1Bv
c2l0aW9uZWQoKSAmJiAhZml4ZWQpIHsKICAgICAgICAgaWYgKFJlbmRlck9iamVjdCogY29udGFp
bmVyID0gcmVuZGVyZXItPmNvbnRhaW5lcigpKSB7CiAgICAgICAgICAgICBpZiAoY29udGFpbmVy
LT5pc1JlbFBvc2l0aW9uZWQoKSAmJiBjb250YWluZXItPmlzUmVuZGVySW5saW5lKCkpCi0gICAg
ICAgICAgICAgICAgbV9vZmZzZXQgKz0gdG9SZW5kZXJJbmxpbmUoY29udGFpbmVyKS0+cmVsYXRp
dmVQb3NpdGlvbmVkSW5saW5lT2Zmc2V0KHJlbmRlcmVyKTsKKyAgICAgICAgICAgICAgICBtX3Bh
aW50T2Zmc2V0ICs9IHRvUmVuZGVySW5saW5lKGNvbnRhaW5lciktPnJlbGF0aXZlUG9zaXRpb25l
ZElubGluZU9mZnNldChyZW5kZXJlcik7CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBtX2xheW91
dE9mZnNldCA9IG1fcGFpbnRPZmZzZXQ7CisKKyAgICBpZiAocmVuZGVyZXItPmlzUmVsUG9zaXRp
b25lZCgpICYmIHJlbmRlcmVyLT5oYXNMYXllcigpKQorICAgICAgICBtX3BhaW50T2Zmc2V0ICs9
IHJlbmRlcmVyLT5sYXllcigpLT5yZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0KCk7CisKICAgICBtX2Ns
aXBwZWQgPSAhZml4ZWQgJiYgcHJldi0+bV9jbGlwcGVkOwogICAgIGlmIChtX2NsaXBwZWQpCiAg
ICAgICAgIG1fY2xpcFJlY3QgPSBwcmV2LT5tX2NsaXBSZWN0OwogCiAgICAgaWYgKHJlbmRlcmVy
LT5oYXNPdmVyZmxvd0NsaXAoKSkgewogICAgICAgICBSZW5kZXJMYXllciogbGF5ZXIgPSByZW5k
ZXJlci0+bGF5ZXIoKTsKLSAgICAgICAgSW50UmVjdCBjbGlwUmVjdCh0b1BvaW50KG1fb2Zmc2V0
KSArIHJlbmRlcmVyLT52aWV3KCktPmxheW91dERlbHRhKCksIGxheWVyLT5zaXplKCkpOworICAg
ICAgICBJbnRSZWN0IGNsaXBSZWN0KHRvUG9pbnQobV9wYWludE9mZnNldCkgKyByZW5kZXJlci0+
dmlldygpLT5sYXlvdXREZWx0YSgpLCBsYXllci0+c2l6ZSgpKTsKICAgICAgICAgaWYgKG1fY2xp
cHBlZCkKICAgICAgICAgICAgIG1fY2xpcFJlY3QuaW50ZXJzZWN0KGNsaXBSZWN0KTsKICAgICAg
ICAgZWxzZSB7CiAgICAgICAgICAgICBtX2NsaXBSZWN0ID0gY2xpcFJlY3Q7CiAgICAgICAgICAg
ICBtX2NsaXBwZWQgPSB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIG1fb2Zmc2V0IC09IGxheWVy
LT5zY3JvbGxlZENvbnRlbnRPZmZzZXQoKTsKKworICAgICAgICBtX3BhaW50T2Zmc2V0IC09IGxh
eWVyLT5zY3JvbGxlZENvbnRlbnRPZmZzZXQoKTsKICAgICB9CiAKLSAgICBtX2xheW91dERlbHRh
ID0gbV9uZXh0LT5tX2xheW91dERlbHRhOworICAgIC8vIERpc2FibGUgcGFnaW5hdGlvbiBmb3Ig
b2JqZWN0cyB3ZSBkb24ndCBzdXBwb3J0LiAgRm9yIG5vdyB0aGlzIGluY2x1ZGVzIG92ZXJmbG93
OnNjcm9sbC9hdXRvIGFuZCBpbmxpbmUgYmxvY2tzLgorICAgIGlmIChyZW5kZXJlci0+aXNSZXBs
YWNlZCgpIHx8IHJlbmRlcmVyLT5zY3JvbGxzT3ZlcmZsb3coKSkKKyAgICAgICAgbV9wYWdlSGVp
Z2h0ID0gMDsKKworICAgIC8vIElmIHdlIGVzdGFibGlzaCBhIG5ldyBwYWdlIGhlaWdodCwgdGhl
biBjYWNoZSB0aGUgb2Zmc2V0IHRvIHRoZSB0b3Agb2YgdGhlIGZpcnN0IHBhZ2UuCisgICAgLy8g
V2UgY2FuIGNvbXBhcmUgdGhpcyBsYXRlciBvbiB0byBmaWd1cmUgb3V0IHdoYXQgcGFydCBvZiB0
aGUgcGFnZSB3ZSdyZSBhY3R1YWxseSBvbiwKKyAgICBpZiAocGFnZUhlaWdodCkgeworICAgICAg
ICBtX3BhZ2VIZWlnaHQgPSBwYWdlSGVpZ2h0OworICAgICAgICBtX3BhZ2VPZmZzZXQgPSBJbnRT
aXplKG1fcGFpbnRPZmZzZXQud2lkdGgoKSArIHJlbmRlcmVyLT5ib3JkZXJMZWZ0KCkgKyByZW5k
ZXJlci0+cGFkZGluZ0xlZnQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3Bh
aW50T2Zmc2V0LmhlaWdodCgpICsgcmVuZGVyZXItPmJvcmRlclRvcCgpICsgcmVuZGVyZXItPnBh
ZGRpbmdUb3AoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gSWYgd2UgZG9uJ3QgZXN0YWJs
aXNoIGEgbmV3IHBhZ2UgaGVpZ2h0LCB0aGVuIHByb3BhZ2F0ZSB0aGUgb2xkIHBhZ2UgaGVpZ2h0
IGFuZCBvZmZzZXQgZG93bi4KKyAgICAgICAgbV9wYWdlSGVpZ2h0ID0gbV9uZXh0LT5tX3BhZ2VI
ZWlnaHQ7CisgICAgICAgIG1fcGFnZU9mZnNldCA9IG1fbmV4dC0+bV9wYWdlT2Zmc2V0OworICAg
IH0KKyAgICAKKyAgICBpZiAoIW1fY29sdW1uSW5mbykKKyAgICAgICAgbV9jb2x1bW5JbmZvID0g
bV9uZXh0LT5tX2NvbHVtbkluZm87CiAKKyAgICBtX2xheW91dERlbHRhID0gbV9uZXh0LT5tX2xh
eW91dERlbHRhOworICAgIAogICAgIC8vIEZJWE1FOiA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTM0NDM+IEFwcGx5IGNvbnRyb2wgY2xpcCBpZiBwcmVzZW50LgogfQog
CiBMYXlvdXRTdGF0ZTo6TGF5b3V0U3RhdGUoUmVuZGVyT2JqZWN0KiByb290KQogICAgIDogbV9j
bGlwcGVkKGZhbHNlKQorICAgICwgbV9wYWdlSGVpZ2h0KDApCisgICAgLCBtX2NvbHVtbkluZm8o
MCkKICAgICAsIG1fbmV4dCgwKQogI2lmbmRlZiBOREVCVUcKICAgICAsIG1fcmVuZGVyZXIocm9v
dCkKQEAgLTg5LDEzICsxMTQsMTMgQEAgTGF5b3V0U3RhdGU6OkxheW91dFN0YXRlKFJlbmRlck9i
amVjdCogcgogewogICAgIFJlbmRlck9iamVjdCogY29udGFpbmVyID0gcm9vdC0+Y29udGFpbmVy
KCk7CiAgICAgRmxvYXRQb2ludCBhYnNDb250ZW50UG9pbnQgPSBjb250YWluZXItPmxvY2FsVG9B
YnNvbHV0ZShGbG9hdFBvaW50KCksIGZhbHNlLCB0cnVlKTsKLSAgICBtX29mZnNldCA9IEludFNp
emUoYWJzQ29udGVudFBvaW50LngoKSwgYWJzQ29udGVudFBvaW50LnkoKSk7CisgICAgbV9wYWlu
dE9mZnNldCA9IEludFNpemUoYWJzQ29udGVudFBvaW50LngoKSwgYWJzQ29udGVudFBvaW50Lnko
KSk7CiAKICAgICBpZiAoY29udGFpbmVyLT5oYXNPdmVyZmxvd0NsaXAoKSkgewogICAgICAgICBS
ZW5kZXJMYXllciogbGF5ZXIgPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KGNvbnRhaW5lciktPmxh
eWVyKCk7CiAgICAgICAgIG1fY2xpcHBlZCA9IHRydWU7Ci0gICAgICAgIG1fY2xpcFJlY3QgPSBJ
bnRSZWN0KHRvUG9pbnQobV9vZmZzZXQpLCBsYXllci0+c2l6ZSgpKTsKLSAgICAgICAgbV9vZmZz
ZXQgLT0gbGF5ZXItPnNjcm9sbGVkQ29udGVudE9mZnNldCgpOworICAgICAgICBtX2NsaXBSZWN0
ID0gSW50UmVjdCh0b1BvaW50KG1fcGFpbnRPZmZzZXQpLCBsYXllci0+c2l6ZSgpKTsKKyAgICAg
ICAgbV9wYWludE9mZnNldCAtPSBsYXllci0+c2Nyb2xsZWRDb250ZW50T2Zmc2V0KCk7CiAgICAg
fQogfQogCkBAIC0xMjYsNCArMTUxLDExIEBAIHZvaWQgTGF5b3V0U3RhdGU6Om9wZXJhdG9yIGRl
bGV0ZSh2b2lkKiAKICAgICAqKHNpemVfdCopcHRyID0gc3o7CiB9CiAKK3ZvaWQgTGF5b3V0U3Rh
dGU6OmNsZWFyUGFnaW5hdGlvbkluZm9ybWF0aW9uKCkKK3sKKyAgICBtX3BhZ2VIZWlnaHQgPSBt
X25leHQtPm1fcGFnZUhlaWdodDsKKyAgICBtX3BhZ2VPZmZzZXQgPSBtX25leHQtPm1fcGFnZU9m
ZnNldDsKKyAgICBtX2NvbHVtbkluZm8gPSBtX25leHQtPm1fY29sdW1uSW5mbzsKK30KKwogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0U3RhdGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRTdGF0ZS5oCShyZXZpc2lv
biA2Njg4NikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMyLDYgKzMyLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBDb2x1
bW5JbmZvOwogY2xhc3MgUmVuZGVyQXJlbmE7CiBjbGFzcyBSZW5kZXJCb3g7CiBjbGFzcyBSZW5k
ZXJPYmplY3Q7CkBAIC00MCw2ICs0MSw4IEBAIGNsYXNzIExheW91dFN0YXRlIDogcHVibGljIE5v
bmNvcHlhYmxlIHsKIHB1YmxpYzoKICAgICBMYXlvdXRTdGF0ZSgpCiAgICAgICAgIDogbV9jbGlw
cGVkKGZhbHNlKQorICAgICAgICAsIG1fcGFnZUhlaWdodCgwKQorICAgICAgICAsIG1fY29sdW1u
SW5mbygwKQogICAgICAgICAsIG1fbmV4dCgwKQogI2lmbmRlZiBOREVCVUcKICAgICAgICAgLCBt
X3JlbmRlcmVyKDApCkBAIC00Nyw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0g
ICAgTGF5b3V0U3RhdGUoTGF5b3V0U3RhdGUqLCBSZW5kZXJCb3gqLCBjb25zdCBJbnRTaXplJiBv
ZmZzZXQpOworICAgIExheW91dFN0YXRlKExheW91dFN0YXRlKiwgUmVuZGVyQm94KiwgY29uc3Qg
SW50U2l6ZSYgb2Zmc2V0LCBpbnQgcGFnZUhlaWdodCwgQ29sdW1uSW5mbyopOwogICAgIExheW91
dFN0YXRlKFJlbmRlck9iamVjdCopOwogCiAgICAgdm9pZCBkZXN0cm95KFJlbmRlckFyZW5hKik7
CkBAIC01OCw2ICs2MSwxMCBAQCBwdWJsaWM6CiAgICAgLy8gT3ZlcnJpZGRlbiB0byBwcmV2ZW50
IHRoZSBub3JtYWwgZGVsZXRlIGZyb20gYmVpbmcgY2FsbGVkLgogICAgIHZvaWQgb3BlcmF0b3Ig
ZGVsZXRlKHZvaWQqLCBzaXplX3QpOwogCisgICAgdm9pZCBjbGVhclBhZ2luYXRpb25JbmZvcm1h
dGlvbigpOworICAgIGJvb2wgcGFnaW5hdGluZ0NvbHVtbnMoKSBjb25zdCB7IHJldHVybiBtX2Nv
bHVtbkluZm87IH0KKyAgICBib29sIHBhZ2luYXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZUhl
aWdodCB8fCBtX2NvbHVtbkluZm87IH0KKwogcHJpdmF0ZToKICAgICAvLyBUaGUgbm9ybWFsIG9w
ZXJhdG9yIG5ldyBpcyBkaXNhbGxvd2VkLgogICAgIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3Qp
IHRocm93KCk7CkBAIC02NSwxMCArNzIsMTYgQEAgcHJpdmF0ZToKIHB1YmxpYzoKICAgICBib29s
IG1fY2xpcHBlZDsKICAgICBJbnRSZWN0IG1fY2xpcFJlY3Q7Ci0gICAgSW50U2l6ZSBtX29mZnNl
dDsgICAgICAgLy8geC95IG9mZnNldCBmcm9tIGNvbnRhaW5lci4KKyAgICBJbnRTaXplIG1fcGFp
bnRPZmZzZXQ7ICAgICAgIC8vIHgveSBvZmZzZXQgZnJvbSBjb250YWluZXIuICBJbmNsdWRlcyBy
ZWxhdGl2ZSBwb3NpdGlvbmluZyBhbmQgc2Nyb2xsIG9mZnNldHMuCisgICAgSW50U2l6ZSBtX2xh
eW91dE9mZnNldDsgICAgICAvLyB4L3kgb2Zmc2V0IGZyb20gY29udGFpbmVyLiAgRG9lcyBub3Qg
aW5jbHVkZSByZWxhdGl2ZSBwb3NpdGlvbmluZyBvciBzY3JvbGwgb2Zmc2V0cy4KICAgICBJbnRT
aXplIG1fbGF5b3V0RGVsdGE7ICAvLyBUcmFuc2llbnQgb2Zmc2V0IGZyb20gdGhlIGZpbmFsIHBv
c2l0aW9uIG9mIHRoZSBvYmplY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB1c2Vk
IHRvIGVuc3VyZSB0aGF0IHJlcGFpbnRzIGhhcHBlbiBpbiB0aGUgY29ycmVjdCBwbGFjZS4KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgdG90YWwgZGVsdGEgYWNjdW11
bGF0ZWQgZnJvbSB0aGUgcm9vdC4KKworICAgIGludCBtX3BhZ2VIZWlnaHQ7ICAgICAgICAgICAg
Ly8gVGhlIGN1cnJlbnQgcGFnZSBoZWlnaHQgZm9yIHRoZSBwYWdpbmF0aW9uIG1vZGVsIHRoYXQg
ZW5jbG9zZXMgdXMuCisgICAgSW50U2l6ZSBtX3BhZ2VPZmZzZXQ7ICAgICAgICAvLyBUaGUgb2Zm
c2V0IG9mIHRoZSBzdGFydCBvZiB0aGUgZmlyc3QgcGFnZSBpbiB0aGUgbmVhcmVzdCBlbmNsb3Np
bmcgcGFnaW5hdGlvbiBtb2RlbC4KKyAgICBDb2x1bW5JbmZvKiBtX2NvbHVtbkluZm87ICAgIC8v
IElmIHRoZSBlbmNsb3NpbmcgcGFnaW5hdGlvbiBtb2RlbCBpcyBhIGNvbHVtbiBtb2RlbCwgdGhl
biB0aGlzIHdpbGwgc3RvcmUgY29sdW1uIGluZm9ybWF0aW9uIGZvciBlYXN5IHJldHJpZXZhbC9t
YW5pcHVsYXRpb24uCisKICAgICBMYXlvdXRTdGF0ZSogbV9uZXh0OwogI2lmbmRlZiBOREVCVUcK
ICAgICBSZW5kZXJPYmplY3QqIG1fcmVuZGVyZXI7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2suY3BwCShyZXZpc2lvbiA2NjkwMykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2Nr
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTExMiw3ICsxMTEyLDcgQEAgdm9pZCBSZW5kZXJCbG9j
azo6bGF5b3V0KCkKICAgICAgICAgY2xlYXJMYXlvdXRPdmVyZmxvdygpOwogfQogCi12b2lkIFJl
bmRlckJsb2NrOjpsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4pCit2b2lkIFJlbmRl
ckJsb2NrOjpsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIGludCBwYWdlSGVpZ2h0
KQogewogICAgIEFTU0VSVChuZWVkc0xheW91dCgpKTsKIApAQCAtMTEyMiw5ICsxMTIyLDYgQEAg
dm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2soYm9vbCByZWxheQogICAgIGlmICghcmVsYXlv
dXRDaGlsZHJlbiAmJiBsYXlvdXRPbmx5UG9zaXRpb25lZE9iamVjdHMoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgTGF5b3V0UmVwYWludGVyIHJlcGFpbnRlcigqdGhpcywgbV9ldmVySGFkTGF5
b3V0ICYmIGNoZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgpKTsKLSAgICBMYXlvdXRTdGF0ZU1h
aW50YWluZXIgc3RhdGVQdXNoZXIodmlldygpLCB0aGlzLCBJbnRTaXplKHgoKSwgeSgpKSwgaGFz
Q29sdW1ucygpIHx8IGhhc1RyYW5zZm9ybSgpIHx8IGhhc1JlZmxlY3Rpb24oKSk7Ci0KICAgICBp
bnQgb2xkV2lkdGggPSB3aWR0aCgpOwogICAgIGludCBvbGRDb2x1bW5XaWR0aCA9IGRlc2lyZWRD
b2x1bW5XaWR0aCgpOwogCkBAIC0xMTQwLDYgKzExMzcsMjggQEAgdm9pZCBSZW5kZXJCbG9jazo6
bGF5b3V0QmxvY2soYm9vbCByZWxheQogCiAgICAgaW50IHByZXZpb3VzSGVpZ2h0ID0gaGVpZ2h0
KCk7CiAgICAgc2V0SGVpZ2h0KDApOworICAgIGJvb2wgaGFzU3BlY2lmaWVkUGFnZUhlaWdodCA9
IGZhbHNlOworICAgIENvbHVtbkluZm8qIGNvbEluZm8gPSBjb2x1bW5JbmZvKCk7CisgICAgaWYg
KGhhc0NvbHVtbnMoKSkgeworICAgICAgICBpZiAoIXBhZ2VIZWlnaHQpIHsKKyAgICAgICAgICAg
IC8vIFdlIG5lZWQgdG8gZ28gYWhlYWQgYW5kIHNldCBvdXIgZXhwbGljaXQgcGFnZSBoZWlnaHQg
aWYgb25lIGV4aXN0cywgc28gdGhhdCB3ZSBjYW4KKyAgICAgICAgICAgIC8vIGF2b2lkIGRvaW5n
IHR3byBsYXlvdXQgcGFzc2VzLgorICAgICAgICAgICAgY2FsY0hlaWdodCgpOworICAgICAgICAg
ICAgaW50IGNvbHVtbkhlaWdodCA9IGNvbnRlbnRIZWlnaHQoKTsKKyAgICAgICAgICAgIGlmIChj
b2x1bW5IZWlnaHQgPiAwKSB7CisgICAgICAgICAgICAgICAgcGFnZUhlaWdodCA9IGNvbHVtbkhl
aWdodDsKKyAgICAgICAgICAgICAgICBoYXNTcGVjaWZpZWRQYWdlSGVpZ2h0ID0gdHJ1ZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHNldEhlaWdodCgwKTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoY29sSW5mby0+Y29sdW1uSGVpZ2h0KCkgIT0gcGFnZUhlaWdodCAmJiBtX2V2ZXJIYWRM
YXlvdXQpIHsKKyAgICAgICAgICAgIGNvbEluZm8tPnNldENvbHVtbkhlaWdodChwYWdlSGVpZ2h0
KTsKKyAgICAgICAgICAgIG1hcmtEZXNjZW5kYW50QmxvY2tzQW5kTGluZXNGb3JMYXlvdXQoKTsg
Ly8gV2UgbmVlZCB0byBkaXJ0eSBhbGwgZGVzY2VuZGFudCBibG9ja3MgYW5kIGxpbmVzLCBzaW5j
ZSB0aGUgY29sdW1uIGhlaWdodCBpcyBkaWZmZXJlbnQgbm93LgorICAgICAgICB9CisgICAgfQor
CisgICAgTGF5b3V0UmVwYWludGVyIHJlcGFpbnRlcigqdGhpcywgbV9ldmVySGFkTGF5b3V0ICYm
IGNoZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgpKTsKKyAgICBMYXlvdXRTdGF0ZU1haW50YWlu
ZXIgc3RhdGVQdXNoZXIodmlldygpLCB0aGlzLCBJbnRTaXplKHgoKSwgeSgpKSwgaGFzQ29sdW1u
cygpIHx8IGhhc1RyYW5zZm9ybSgpIHx8IGhhc1JlZmxlY3Rpb24oKSwgcGFnZUhlaWdodCwgY29s
SW5mbyk7CiAKICAgICAvLyBXZSB1c2UgZm91ciB2YWx1ZXMsIG1heFRvcFBvcywgbWF4VG9wTmVn
LCBtYXhCb3R0b21Qb3MsIGFuZCBtYXhCb3R0b21OZWcsIHRvIHRyYWNrCiAgICAgLy8gb3VyIGN1
cnJlbnQgbWF4aW1hbCBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgbWFyZ2lucy4gIFRoZXNlIHZhbHVl
cyBhcmUgdXNlZCB3aGVuIHdlCkBAIC0xMTg5LDEwICsxMjA4LDkgQEAgdm9pZCBSZW5kZXJCbG9j
azo6bGF5b3V0QmxvY2soYm9vbCByZWxheQogICAgIGlmIChmbG9hdEJvdHRvbSgpID4gKGhlaWdo
dCgpIC0gdG9BZGQpICYmIGV4cGFuZHNUb0VuY2xvc2VPdmVyaGFuZ2luZ0Zsb2F0cygpKQogICAg
ICAgICBzZXRIZWlnaHQoZmxvYXRCb3R0b20oKSArIHRvQWRkKTsKICAgICAKLSAgICAvLyBOb3cg
bGF5IG91dCBvdXIgY29sdW1ucyB3aXRoaW4gdGhpcyBpbnRyaW5zaWMgaGVpZ2h0LCBzaW5jZSB0
aGV5IGNhbiBzbGlnaHRseSBhZmZlY3QgdGhlIGludHJpbnNpYyBoZWlnaHQgYXMKLSAgICAvLyB3
ZSBhZGp1c3QgZm9yIGNsZWFuIGNvbHVtbiBicmVha3MuCi0gICAgaW50IHNpbmdsZUNvbHVtbkJv
dHRvbSA9IGxheW91dENvbHVtbnMoKTsKLQorICAgIGlmIChsYXlvdXRDb2x1bW5zKGhhc1NwZWNp
ZmllZFBhZ2VIZWlnaHQsIHBhZ2VIZWlnaHQsIHN0YXRlUHVzaGVyKSkKKyAgICAgICAgcmV0dXJu
OworIAogICAgIC8vIENhbGN1bGF0ZSBvdXIgbmV3IGhlaWdodC4KICAgICBpbnQgb2xkSGVpZ2h0
ID0gaGVpZ2h0KCk7CiAgICAgY2FsY0hlaWdodCgpOwpAQCAtMTIwNywyMSArMTIyNSwxOCBAQCB2
b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayhib29sIHJlbGF5CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBXZSBoYXZl
IHRvIHJlYmFsYW5jZSBjb2x1bW5zIHRvIHRoZSBuZXcgaGVpZ2h0LgotICAgICAgICBsYXlvdXRD
b2x1bW5zKHNpbmdsZUNvbHVtbkJvdHRvbSk7CiAgICAgfQogCiAgICAgaWYgKHByZXZpb3VzSGVp
Z2h0ICE9IGhlaWdodCgpKQogICAgICAgICByZWxheW91dENoaWxkcmVuID0gdHJ1ZTsKIAotICAg
IC8vIFRoaXMgY2hlY2sgaXMgZGVzaWduZWQgdG8gY2F0Y2ggYW55b25lCi0gICAgLy8gd2hvIHdh
c24ndCBnb2luZyB0byBwcm9wYWdhdGUgZmxvYXQgaW5mb3JtYXRpb24gdXAgdG8gdGhlIHBhcmVu
dCBhbmQgeWV0IGNvdWxkIHBvdGVudGlhbGx5IGJlIHBhaW50ZWQgYnkgaXRzIGFuY2VzdG9yLgot
ICAgIGlmIChpc1Jvb3QoKSB8fCBleHBhbmRzVG9FbmNsb3NlT3ZlcmhhbmdpbmdGbG9hdHMoKSkK
LSAgICAgICAgYWRkT3ZlcmZsb3dGcm9tRmxvYXRzKCk7Ci0KICAgICAvLyBBZGQgb3ZlcmZsb3cg
ZnJvbSBjaGlsZHJlbiAodW5sZXNzIHdlJ3JlIG11bHRpLWNvbHVtbiwgc2luY2UgaW4gdGhhdCBj
YXNlIGFsbCBvdXIgY2hpbGQgb3ZlcmZsb3cgaXMgY2xpcHBlZCBhbnl3YXkpLgogICAgIGlmICgh
aGFzQ29sdW1ucygpKSB7CisgICAgICAgIC8vIFRoaXMgY2hlY2sgaXMgZGVzaWduZWQgdG8gY2F0
Y2ggYW55b25lCisgICAgICAgIC8vIHdobyB3YXNuJ3QgZ29pbmcgdG8gcHJvcGFnYXRlIGZsb2F0
IGluZm9ybWF0aW9uIHVwIHRvIHRoZSBwYXJlbnQgYW5kIHlldCBjb3VsZCBwb3RlbnRpYWxseSBi
ZSBwYWludGVkIGJ5IGl0cyBhbmNlc3Rvci4KKyAgICAgICAgaWYgKGlzUm9vdCgpIHx8IGV4cGFu
ZHNUb0VuY2xvc2VPdmVyaGFuZ2luZ0Zsb2F0cygpKQorICAgICAgICAgICAgYWRkT3ZlcmZsb3dG
cm9tRmxvYXRzKCk7CisKICAgICAgICAgaWYgKGNoaWxkcmVuSW5saW5lKCkpCiAgICAgICAgICAg
ICBhZGRPdmVyZmxvd0Zyb21JbmxpbmVDaGlsZHJlbigpOwogICAgICAgICBlbHNlCkBAIC0xNDg1
LDcgKzE1MDAsOCBAQCBpbnQgUmVuZGVyQmxvY2s6OmNvbGxhcHNlTWFyZ2lucyhSZW5kZXJCCiAg
ICAgaWYgKG1hcmdpbkluZm8ucXVpcmtDb250YWluZXIoKSAmJiBtYXJnaW5JbmZvLmF0VG9wT2ZC
bG9jaygpICYmIChwb3NUb3AgLSBuZWdUb3ApKQogICAgICAgICBtYXJnaW5JbmZvLnNldFRvcFF1
aXJrKHRvcFF1aXJrKTsKIAotICAgIGludCB5cG9zID0gaGVpZ2h0KCk7CisgICAgaW50IGJlZm9y
ZUNvbGxhcHNlWSA9IGhlaWdodCgpOworICAgIGludCB5cG9zID0gYmVmb3JlQ29sbGFwc2VZOwog
ICAgIGlmIChjaGlsZC0+aXNTZWxmQ29sbGFwc2luZ0Jsb2NrKCkpIHsKICAgICAgICAgLy8gVGhp
cyBjaGlsZCBoYXMgbm8gaGVpZ2h0LiAgV2UgbmVlZCB0byBjb21wdXRlIG91cgogICAgICAgICAv
LyBwb3NpdGlvbiBiZWZvcmUgd2UgY29sbGFwc2UgdGhlIGNoaWxkJ3MgbWFyZ2lucyB0b2dldGhl
ciwKQEAgLTE1MjcsNiArMTU0MywxNCBAQCBpbnQgUmVuZGVyQmxvY2s6OmNvbGxhcHNlTWFyZ2lu
cyhSZW5kZXJCCiAgICAgICAgICAgICBtYXJnaW5JbmZvLnNldEJvdHRvbVF1aXJrKGNoaWxkLT5p
c0JvdHRvbU1hcmdpblF1aXJrKCkgfHwgc3R5bGUoKS0+bWFyZ2luQm90dG9tQ29sbGFwc2UoKSA9
PSBNRElTQ0FSRCk7CiAgICAgfQogICAgIAorICAgIC8vIElmIG1hcmdpbnMgd291bGQgcHVsbCB1
cyBwYXN0IHRoZSB0b3Agb2YgdGhlIG5leHQgcGFnZSwgdGhlbiB3ZSBuZWVkIHRvIHB1bGwgYmFj
ayBhbmQgcHJldGVuZCBsaWtlIHRoZSBtYXJnaW5zCisgICAgLy8gY29sbGFwc2VkIGludG8gdGhl
IHBhZ2UgZWRnZS4KKyAgICBib29sIHBhZ2luYXRlZCA9IHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+
cGFnaW5hdGVkKCk7CisgICAgaWYgKHBhZ2luYXRlZCAmJiB5cG9zID4gYmVmb3JlQ29sbGFwc2VZ
KSB7CisgICAgICAgIGludCBvbGRZID0geXBvczsKKyAgICAgICAgeXBvcyA9IG1pbih5cG9zLCBu
ZXh0UGFnZVRvcChiZWZvcmVDb2xsYXBzZVkpKTsKKyAgICAgICAgc2V0SGVpZ2h0KGhlaWdodCgp
ICsgKHlwb3MgLSBvbGRZKSk7CisgICAgfQogICAgIHJldHVybiB5cG9zOwogfQogCkBAIC0xNTg2
LDcgKzE2MTAsMjQgQEAgaW50IFJlbmRlckJsb2NrOjplc3RpbWF0ZVZlcnRpY2FsUG9zaXRpbwog
ICAgICAgICBpbnQgY2hpbGRNYXJnaW5Ub3AgPSBjaGlsZC0+c2VsZk5lZWRzTGF5b3V0KCkgPyBj
aGlsZC0+bWFyZ2luVG9wKCkgOiBjaGlsZC0+Y29sbGFwc2VkTWFyZ2luVG9wKCk7CiAgICAgICAg
IHlQb3NFc3RpbWF0ZSArPSBtYXgobWFyZ2luSW5mby5tYXJnaW4oKSwgY2hpbGRNYXJnaW5Ub3Ap
OwogICAgIH0KKyAgICAKKyAgICBib29sIHBhZ2luYXRlZCA9IHZpZXcoKS0+bGF5b3V0U3RhdGUo
KS0+cGFnaW5hdGVkKCk7CisKKyAgICAvLyBBZGp1c3QgeVBvc0VzdGltYXRlIGRvd24gdG8gdGhl
IG5leHQgcGFnZSBpZiB0aGUgbWFyZ2lucyBhcmUgc28gbGFyZ2UgdGhhdCB3ZSBkb24ndCBmaXQg
b24gdGhlIGN1cnJlbnQKKyAgICAvLyBwYWdlLgorICAgIGlmIChwYWdpbmF0ZWQgJiYgeVBvc0Vz
dGltYXRlID4gaGVpZ2h0KCkpCisgICAgICAgIHlQb3NFc3RpbWF0ZSA9IG1pbih5UG9zRXN0aW1h
dGUsIG5leHRQYWdlVG9wKGhlaWdodCgpKSk7CisKICAgICB5UG9zRXN0aW1hdGUgKz0gZ2V0Q2xl
YXJEZWx0YShjaGlsZCwgeVBvc0VzdGltYXRlKTsKKyAgICAKKyAgICBpZiAocGFnaW5hdGVkKSB7
CisgICAgICAgIC8vIElmIHRoZSBvYmplY3QgaGFzIGEgcGFnZSBvciBjb2x1bW4gYnJlYWsgdmFs
dWUgb2YgImJlZm9yZSIsIHRoZW4gd2Ugc2hvdWxkIHNoaWZ0IHRvIHRoZSB0b3Agb2YgdGhlIG5l
eHQgcGFnZS4KKyAgICAgICAgeVBvc0VzdGltYXRlID0gYXBwbHlCZWZvcmVCcmVhayhjaGlsZCwg
eVBvc0VzdGltYXRlKTsKKyAgICAKKyAgICAgICAgLy8gRm9yIHJlcGxhY2VkIGVsZW1lbnRzIGFu
ZCBzY3JvbGxlZCBlbGVtZW50cywgd2Ugd2FudCB0byBzaGlmdCB0aGVtIHRvIHRoZSBuZXh0IHBh
Z2UgaWYgdGhleSBkb24ndCBmaXQgb24gdGhlIGN1cnJlbnQgb25lLgorICAgICAgICB5UG9zRXN0
aW1hdGUgPSBhZGp1c3RGb3JVbnNwbGl0dGFibGVDaGlsZChjaGlsZCwgeVBvc0VzdGltYXRlKTsK
KyAgICB9CisKICAgICByZXR1cm4geVBvc0VzdGltYXRlOwogfQogCkBAIC0xNzg3LDEwICsxODI4
LDEwIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrQ2hpbGQoUmVuZGUKICAgICAgICAg
ICAgIG1hcmtEZXNjZW5kYW50c1dpdGhGbG9hdHMgPSB0cnVlOwogICAgIH0KIAotICAgIGlmIChj
aGlsZC0+aXNSZW5kZXJCbG9jaygpKSB7CisgICAgUmVuZGVyQmxvY2sqIGNoaWxkQmxvY2tGbG93
ID0gY2hpbGQtPmlzQmxvY2tGbG93KCkgPyB0b1JlbmRlckJsb2NrKGNoaWxkKSA6IDA7CisgICAg
aWYgKGNoaWxkQmxvY2tGbG93KSB7CiAgICAgICAgIGlmIChtYXJrRGVzY2VuZGFudHNXaXRoRmxv
YXRzKQotICAgICAgICAgICAgdG9SZW5kZXJCbG9jayhjaGlsZCktPm1hcmtBbGxEZXNjZW5kYW50
c1dpdGhGbG9hdHNGb3JMYXlvdXQoKTsKLQorICAgICAgICAgICAgY2hpbGRCbG9ja0Zsb3ctPm1h
cmtBbGxEZXNjZW5kYW50c1dpdGhGbG9hdHNGb3JMYXlvdXQoKTsKICAgICAgICAgcHJldmlvdXNG
bG9hdEJvdHRvbSA9IG1heChwcmV2aW91c0Zsb2F0Qm90dG9tLCBvbGRSZWN0LnkoKSArIHRvUmVu
ZGVyQmxvY2soY2hpbGQpLT5mbG9hdEJvdHRvbSgpKTsKICAgICB9CiAKQEAgLTE3OTksNiArMTg0
MCw5IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrQ2hpbGQoUmVuZGUKICAgICBpZiAo
Y2hpbGROZWVkZWRMYXlvdXQpCiAgICAgICAgIGNoaWxkLT5sYXlvdXQoKTsKIAorICAgIC8vIENh
Y2hlIGlmIHdlIGFyZSBhdCB0aGUgdG9wIG9mIHRoZSBibG9jayByaWdodCBub3cuCisgICAgYm9v
bCBhdFRvcE9mQmxvY2sgPSBtYXJnaW5JbmZvLmF0VG9wT2ZCbG9jaygpOworCiAgICAgLy8gTm93
IGRldGVybWluZSB0aGUgY29ycmVjdCB5cG9zIGJhc2VkIG9mZiBleGFtaW5hdGlvbiBvZiBjb2xs
YXBzaW5nIG1hcmdpbgogICAgIC8vIHZhbHVlcy4KICAgICBpbnQgeUJlZm9yZUNsZWFyID0gY29s
bGFwc2VNYXJnaW5zKGNoaWxkLCBtYXJnaW5JbmZvKTsKQEAgLTE4MDYsNiArMTg1MCwzMiBAQCB2
b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9ja0NoaWxkKFJlbmRlCiAgICAgLy8gTm93IGNoZWNr
IGZvciBjbGVhci4KICAgICBpbnQgeUFmdGVyQ2xlYXIgPSBjbGVhckZsb2F0c0lmTmVlZGVkKGNo
aWxkLCBtYXJnaW5JbmZvLCBvbGRUb3BQb3NNYXJnaW4sIG9sZFRvcE5lZ01hcmdpbiwgeUJlZm9y
ZUNsZWFyKTsKICAgICAKKyAgICBib29sIHBhZ2luYXRlZCA9IHZpZXcoKS0+bGF5b3V0U3RhdGUo
KS0+cGFnaW5hdGVkKCk7CisgICAgaWYgKHBhZ2luYXRlZCkgeworICAgICAgICBpbnQgb2xkWSA9
IHlBZnRlckNsZWFyOworICAgICAgICAKKyAgICAgICAgLy8gSWYgdGhlIG9iamVjdCBoYXMgYSBw
YWdlIG9yIGNvbHVtbiBicmVhayB2YWx1ZSBvZiAiYmVmb3JlIiwgdGhlbiB3ZSBzaG91bGQgc2hp
ZnQgdG8gdGhlIHRvcCBvZiB0aGUgbmV4dCBwYWdlLgorICAgICAgICB5QWZ0ZXJDbGVhciA9IGFw
cGx5QmVmb3JlQnJlYWsoY2hpbGQsIHlBZnRlckNsZWFyKTsKKyAgICAKKyAgICAgICAgLy8gRm9y
IHJlcGxhY2VkIGVsZW1lbnRzIGFuZCBzY3JvbGxlZCBlbGVtZW50cywgd2Ugd2FudCB0byBzaGlm
dCB0aGVtIHRvIHRoZSBuZXh0IHBhZ2UgaWYgdGhleSBkb24ndCBmaXQgb24gdGhlIGN1cnJlbnQg
b25lLgorICAgICAgICB5QWZ0ZXJDbGVhciA9IGFkanVzdEZvclVuc3BsaXR0YWJsZUNoaWxkKGNo
aWxkLCB5QWZ0ZXJDbGVhcik7CisgICAgICAgIAorICAgICAgICBpZiAoY2hpbGRCbG9ja0Zsb3ct
PnBhZ2luYXRpb25TdHJ1dCgpKSB7CisgICAgICAgICAgICAvLyBXZSBhcmUgd2lsbGluZyB0byBw
cm9wYWdhdGUgb3V0IHRvIG91ciBwYXJlbnQgYmxvY2sgYXMgbG9uZyBhcyB3ZSB3ZXJlIGF0IHRo
ZSB0b3Agb2YgdGhlIGJsb2NrIHByaW9yCisgICAgICAgICAgICAvLyB0byBjb2xsYXBzaW5nIG91
ciBtYXJnaW5zLCBhbmQgYXMgbG9uZyBhcyB3ZSBkaWRuJ3QgY2xlYXIgb3IgbW92ZSBhcyBhIHJl
c3VsdCBvZiBvdGhlciBwYWdpbmF0aW9uLgorICAgICAgICAgICAgaWYgKGF0VG9wT2ZCbG9jayAm
JiBvbGRZID09IHlCZWZvcmVDbGVhcikKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogU2hvdWxk
IHJlYWxseSBjaGVjayBpZiB3ZSdyZSBleGNlZWRpbmcgdGhlIHBhZ2UgaGVpZ2h0IGJlZm9yZSBw
cm9wYWdhdGluZyB0aGUgc3RydXQsIGJ1dCB3ZSBkb24ndAorICAgICAgICAgICAgICAgIC8vIGhh
dmUgYWxsIHRoZSBpbmZvcm1hdGlvbiB0byBkbyBzbyAodGhlIHN0cnV0IG9ubHkgaGFzIHRoZSBy
ZW1haW5pbmcgYW1vdW50IHRvIHB1c2gpLiAgR2Vja28gZ2V0cyB0aGlzIHdyb25nIHRvbworICAg
ICAgICAgICAgICAgIC8vIGFuZCBwdXNoZXMgdG8gdGhlIG5leHQgcGFnZSBhbnl3YXksIHNvIG5v
dCB0b28gY29uY2VybmVkIGFib3V0IGl0LgorICAgICAgICAgICAgICAgIHNldFBhZ2luYXRpb25T
dHJ1dCh5QWZ0ZXJDbGVhciArIGNoaWxkQmxvY2tGbG93LT5wYWdpbmF0aW9uU3RydXQoKSk7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeUFmdGVyQ2xlYXIgKz0gY2hpbGRCbG9j
a0Zsb3ctPnBhZ2luYXRpb25TdHJ1dCgpOworICAgICAgICB9CisKKyAgICAgICAgLy8gU2ltaWxh
ciB0byBob3cgd2UgYXBwbHkgY2xlYXJhbmNlLiAgR28gYWhlYWQgYW5kIGJvb3N0IGhlaWdodCgp
IHRvIGJlIHRoZSBwbGFjZSB3aGVyZSB3ZSdyZSBnb2luZyB0byBwb3NpdGlvbiB0aGUgY2hpbGQu
CisgICAgICAgIHNldEhlaWdodChoZWlnaHQoKSArICh5QWZ0ZXJDbGVhciAtIG9sZFkpKTsKKyAg
ICB9CisKICAgICB2aWV3KCktPmFkZExheW91dERlbHRhKEludFNpemUoMCwgeVBvc0VzdGltYXRl
IC0geUFmdGVyQ2xlYXIpKTsKICAgICBjaGlsZC0+c2V0TG9jYXRpb24oY2hpbGQtPngoKSwgeUFm
dGVyQ2xlYXIpOwogCkBAIC0xODE4LDggKzE4ODgsMTMgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5
b3V0QmxvY2tDaGlsZChSZW5kZQogICAgICAgICAgICAgLy8gU28gZ28gYWhlYWQgYW5kIG1hcmsg
dGhlIGl0ZW0gYXMgZGlydHkuCiAgICAgICAgICAgICBjaGlsZC0+c2V0Q2hpbGROZWVkc0xheW91
dCh0cnVlLCBmYWxzZSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCFjaGlsZC0+YXZvaWRzRmxv
YXRzKCkgJiYgY2hpbGQtPmlzQmxvY2tGbG93KCkgJiYgdG9SZW5kZXJCbG9jayhjaGlsZCktPmNv
bnRhaW5zRmxvYXRzKCkpCi0gICAgICAgICAgICB0b1JlbmRlckJsb2NrKGNoaWxkKS0+bWFya0Fs
bERlc2NlbmRhbnRzV2l0aEZsb2F0c0ZvckxheW91dCgpOworICAgICAgICBpZiAoY2hpbGRCbG9j
a0Zsb3cpIHsKKyAgICAgICAgICAgIGlmIChwYWdpbmF0ZWQpCisgICAgICAgICAgICAgICAgY2hp
bGRCbG9ja0Zsb3ctPm1hcmtEZXNjZW5kYW50QmxvY2tzQW5kTGluZXNGb3JMYXlvdXQoKTsKKyAg
ICAgICAgICAgIGVsc2UgaWYgKCFjaGlsZC0+YXZvaWRzRmxvYXRzKCkgJiYgY2hpbGRCbG9ja0Zs
b3ctPmNvbnRhaW5zRmxvYXRzKCkpCisgICAgICAgICAgICAgICAgY2hpbGRCbG9ja0Zsb3ctPm1h
cmtBbGxEZXNjZW5kYW50c1dpdGhGbG9hdHNGb3JMYXlvdXQoKTsKKyAgICAgICAgfQorCiAgICAg
ICAgIC8vIE91ciBndWVzcyB3YXMgd3JvbmcuIE1ha2UgdGhlIGNoaWxkIGxheSBpdHNlbGYgb3V0
IGFnYWluLgogICAgICAgICBjaGlsZC0+bGF5b3V0SWZOZWVkZWQoKTsKICAgICB9CkBAIC0xODQw
LDcgKzE5MTUsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9ja0NoaWxkKFJlbmRlCiAg
ICAgfQogICAgIC8vIElmIHRoZSBjaGlsZCBoYXMgb3ZlcmhhbmdpbmcgZmxvYXRzIHRoYXQgaW50
cnVkZSBpbnRvIGZvbGxvd2luZyBzaWJsaW5ncyAob3IgcG9zc2libHkgb3V0CiAgICAgLy8gb2Yg
dGhpcyBibG9jayksIHRoZW4gdGhlIHBhcmVudCBnZXRzIG5vdGlmaWVkIG9mIHRoZSBmbG9hdHMg
bm93LgotICAgIGlmIChjaGlsZC0+aXNCbG9ja0Zsb3coKSAmJiB0b1JlbmRlckJsb2NrKGNoaWxk
KS0+Y29udGFpbnNGbG9hdHMoKSkKKyAgICBpZiAoY2hpbGRCbG9ja0Zsb3cgJiYgY2hpbGRCbG9j
a0Zsb3ctPmNvbnRhaW5zRmxvYXRzKCkpCiAgICAgICAgIG1heEZsb2F0Qm90dG9tID0gbWF4KG1h
eEZsb2F0Qm90dG9tLCBhZGRPdmVyaGFuZ2luZ0Zsb2F0cyh0b1JlbmRlckJsb2NrKGNoaWxkKSwg
LWNoaWxkLT54KCksIC1jaGlsZC0+eSgpLCAhY2hpbGROZWVkZWRMYXlvdXQpKTsKIAogICAgIElu
dFNpemUgY2hpbGRPZmZzZXQoY2hpbGQtPngoKSAtIG9sZFJlY3QueCgpLCBjaGlsZC0+eSgpIC0g
b2xkUmVjdC55KCkpOwpAQCAtMTg1OSw2ICsxOTM0LDEzIEBAIHZvaWQgUmVuZGVyQmxvY2s6Omxh
eW91dEJsb2NrQ2hpbGQoUmVuZGUKICAgICAgICAgY2hpbGQtPnJlcGFpbnRPdmVyaGFuZ2luZ0Zs
b2F0cyh0cnVlKTsKICAgICB9CiAKKyAgICBpZiAocGFnaW5hdGVkKSB7CisgICAgICAgIC8vIENo
ZWNrIGZvciBhbiBhZnRlciBwYWdlL2NvbHVtbiBicmVhay4KKyAgICAgICAgaW50IG5ld0hlaWdo
dCA9IGFwcGx5QWZ0ZXJCcmVhayhjaGlsZCwgaGVpZ2h0KCksIG1hcmdpbkluZm8pOworICAgICAg
ICBpZiAobmV3SGVpZ2h0ICE9IGhlaWdodCgpKQorICAgICAgICAgICAgc2V0SGVpZ2h0KG5ld0hl
aWdodCk7CisgICAgfQorCiAgICAgQVNTRVJUKG9sZExheW91dERlbHRhID09IHZpZXcoKS0+bGF5
b3V0RGVsdGEoKSk7CiB9CiAKQEAgLTE4ODksNiArMTk3MSw5IEBAIGJvb2wgUmVuZGVyQmxvY2s6
OmxheW91dE9ubHlQb3NpdGlvbmVkT2IKIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dFBvc2l0aW9u
ZWRPYmplY3RzKGJvb2wgcmVsYXlvdXRDaGlsZHJlbikKIHsKICAgICBpZiAobV9wb3NpdGlvbmVk
T2JqZWN0cykgeworICAgICAgICBpZiAoaGFzQ29sdW1ucygpKQorICAgICAgICAgICAgdmlldygp
LT5sYXlvdXRTdGF0ZSgpLT5jbGVhclBhZ2luYXRpb25JbmZvcm1hdGlvbigpOyAvLyBQb3NpdGlv
bmVkIG9iamVjdHMgYXJlIG5vdCBwYXJ0IG9mIHRoZSBjb2x1bW4gZmxvdywgc28gdGhleSBkb24n
dCBwYWdpbmF0ZSB3aXRoIHRoZSBjb2x1bW5zLgorCiAgICAgICAgIFJlbmRlckJveCogcjsKICAg
ICAgICAgSXRlcmF0b3IgZW5kID0gbV9wb3NpdGlvbmVkT2JqZWN0cy0+ZW5kKCk7CiAgICAgICAg
IGZvciAoSXRlcmF0b3IgaXQgPSBtX3Bvc2l0aW9uZWRPYmplY3RzLT5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKQEAgLTE5MTAsNiArMTk5NSw5IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91
dFBvc2l0aW9uZWRPYmplY3QKICAgICAgICAgICAgICAgICByLT50cnlMYXlvdXREb2luZ1Bvc2l0
aW9uZWRNb3ZlbWVudE9ubHkoKTsKICAgICAgICAgICAgIHItPmxheW91dElmTmVlZGVkKCk7CiAg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChoYXNDb2x1bW5zKCkpCisgICAgICAgICAg
ICB2aWV3KCktPmxheW91dFN0YXRlKCktPm1fY29sdW1uSW5mbyA9IGNvbHVtbkluZm8oKTsgLy8g
RklYTUU6IEtpbmQgb2YgZ3Jvc3MuIFdlIGp1c3QgcHV0IHRoaXMgYmFjayBpbnRvIHRoZSBsYXlv
dXQgc3RhdGUgc28gdGhhdCBwb3AoKSB3aWxsIHdvcmsuCiAgICAgfQogfQogCkBAIC0xOTk3LDEy
ICsyMDg1LDEyIEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50Q29sdW1uUnVsZXMoUGFpbnQKIAog
ICAgIC8vIFdlIG5lZWQgdG8gZG8gbXVsdGlwbGUgcGFzc2VzLCBicmVha2luZyB1cCBvdXIgY2hp
bGQgcGFpbnRpbmcgaW50byBzdHJpcHMuCiAgICAgQ29sdW1uSW5mbyogY29sSW5mbyA9IGNvbHVt
bkluZm8oKTsKLSAgICB1bnNpZ25lZCBjb2xDb3VudCA9IGNvbEluZm8tPmNvbHVtbkNvdW50KCk7
CisgICAgdW5zaWduZWQgY29sQ291bnQgPSBjb2x1bW5Db3VudChjb2xJbmZvKTsKICAgICBpbnQg
Y3VyclhPZmZzZXQgPSBzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIgPyAwIDogY29udGVudFdp
ZHRoKCk7CiAgICAgaW50IHJ1bGVBZGQgPSBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpOwog
ICAgIGludCBydWxlWCA9IHN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUiA/IDAgOiBjb250ZW50
V2lkdGgoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY29sQ291bnQ7IGkrKykgewot
ICAgICAgICBJbnRSZWN0IGNvbFJlY3QgPSBjb2xJbmZvLT5jb2x1bW5SZWN0QXQoaSk7CisgICAg
ICAgIEludFJlY3QgY29sUmVjdCA9IGNvbHVtblJlY3RBdChjb2xJbmZvLCBpKTsKIAogICAgICAg
ICAvLyBNb3ZlIHRvIHRoZSBuZXh0IHBvc2l0aW9uLgogICAgICAgICBpZiAoc3R5bGUoKS0+ZGly
ZWN0aW9uKCkgPT0gTFRSKSB7CkBAIC0yMDMzLDE0ICsyMTIxLDE0IEBAIHZvaWQgUmVuZGVyQmxv
Y2s6OnBhaW50Q29sdW1uQ29udGVudHMoUGEKICAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQg
PSBwYWludEluZm8uY29udGV4dDsKICAgICBpbnQgY29sR2FwID0gY29sdW1uR2FwKCk7CiAgICAg
Q29sdW1uSW5mbyogY29sSW5mbyA9IGNvbHVtbkluZm8oKTsKLSAgICB1bnNpZ25lZCBjb2xDb3Vu
dCA9IGNvbEluZm8tPmNvbHVtbkNvdW50KCk7CisgICAgdW5zaWduZWQgY29sQ291bnQgPSBjb2x1
bW5Db3VudChjb2xJbmZvKTsKICAgICBpZiAoIWNvbENvdW50KQogICAgICAgICByZXR1cm47Ci0g
ICAgaW50IGN1cnJYT2Zmc2V0ID0gc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8gMCA6IGNv
bnRlbnRXaWR0aCgpIC0gY29sSW5mby0+Y29sdW1uUmVjdEF0KDApLndpZHRoKCk7CisgICAgaW50
IGN1cnJYT2Zmc2V0ID0gc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8gMCA6IGNvbnRlbnRX
aWR0aCgpIC0gY29sdW1uUmVjdEF0KGNvbEluZm8sIDApLndpZHRoKCk7CiAgICAgaW50IGN1cnJZ
T2Zmc2V0ID0gMDsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY29sQ291bnQ7IGkrKykg
ewogICAgICAgICAvLyBGb3IgZWFjaCByZWN0LCB3ZSBjbGlwIHRvIHRoZSByZWN0LCBhbmQgdGhl
biB3ZSBhZGp1c3Qgb3VyIGNvb3Jkcy4KLSAgICAgICAgSW50UmVjdCBjb2xSZWN0ID0gY29sSW5m
by0+Y29sdW1uUmVjdEF0KGkpOworICAgICAgICBJbnRSZWN0IGNvbFJlY3QgPSBjb2x1bW5SZWN0
QXQoY29sSW5mbywgaSk7CiAgICAgICAgIGNvbFJlY3QubW92ZSh0eCwgdHkpOwogICAgICAgICBQ
YWludEluZm8gaW5mbyhwYWludEluZm8pOwogICAgICAgICBpbmZvLnJlY3QuaW50ZXJzZWN0KGNv
bFJlY3QpOwpAQCAtMjA5OCwxNCArMjE4NiwxMyBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWludENo
aWxkcmVuKFBhaW50SW5mCiAgICAgaW5mby51cGRhdGVQYWludGluZ1Jvb3RGb3JDaGlsZHJlbih0
aGlzKTsKICAgICAKICAgICBSZW5kZXJWaWV3KiByZW5kZXJWaWV3ID0gdmlldygpOwotICAgIGJv
b2wgdXNlUHJpbnRSZWN0ID0gIXJlbmRlclZpZXctPnByaW50UmVjdCgpLmlzRW1wdHkoKSAmJiAh
ZG9jdW1lbnQoKS0+c2V0dGluZ3MoKS0+cGFnaW5hdGVEdXJpbmdMYXlvdXRFbmFibGVkKCk7Cisg
ICAgYm9vbCB1c2VQcmludFJlY3QgPSAhcmVuZGVyVmlldy0+cHJpbnRSZWN0KCkuaXNFbXB0eSgp
OwogICAgIAogICAgIGJvb2wgY2hlY2tQYWdlQnJlYWtzID0gZG9jdW1lbnQoKS0+cGFnaW5hdGVk
KCkgJiYgIWRvY3VtZW50KCktPnNldHRpbmdzKCktPnBhZ2luYXRlRHVyaW5nTGF5b3V0RW5hYmxl
ZCgpOwotICAgIGJvb2wgY2hlY2tDb2x1bW5CcmVha3MgPSAhY2hlY2tQYWdlQnJlYWtzICYmIHVz
ZVByaW50UmVjdDsKIAogICAgIGZvciAoUmVuZGVyQm94KiBjaGlsZCA9IGZpcnN0Q2hpbGRCb3go
KTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nQm94KCkpIHsgICAgICAgIAogICAg
ICAgICAvLyBDaGVjayBmb3IgcGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cywgYW5kIGlmIGl0J3Mg
c2V0LCBicmVhayBhbmQgYmFpbC4KLSAgICAgICAgYm9vbCBjaGVja0JlZm9yZUFsd2F5cyA9ICFj
aGlsZHJlbklubGluZSgpICYmICgoY2hlY2tQYWdlQnJlYWtzICYmIGNoaWxkLT5zdHlsZSgpLT5w
YWdlQnJlYWtCZWZvcmUoKSA9PSBQQkFMV0FZUykgfHwgKGNoZWNrQ29sdW1uQnJlYWtzICYmIGNo
aWxkLT5zdHlsZSgpLT5jb2x1bW5CcmVha0JlZm9yZSgpID09IFBCQUxXQVlTKSk7CisgICAgICAg
IGJvb2wgY2hlY2tCZWZvcmVBbHdheXMgPSAhY2hpbGRyZW5JbmxpbmUoKSAmJiAoY2hlY2tQYWdl
QnJlYWtzICYmIGNoaWxkLT5zdHlsZSgpLT5wYWdlQnJlYWtCZWZvcmUoKSA9PSBQQkFMV0FZUyk7
CiAgICAgICAgIGlmIChjaGVja0JlZm9yZUFsd2F5cwogICAgICAgICAgICAgJiYgKHR5ICsgY2hp
bGQtPnkoKSkgPiBwYWludEluZm8ucmVjdC55KCkKICAgICAgICAgICAgICYmICh0eSArIGNoaWxk
LT55KCkpIDwgcGFpbnRJbmZvLnJlY3QuYm90dG9tKCkpIHsKQEAgLTIxMjgsNyArMjIxNSw3IEBA
IHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50Q2hpbGRyZW4oUGFpbnRJbmYKICAgICAgICAgICAgIGNo
aWxkLT5wYWludChpbmZvLCB0eCwgdHkpOwogCiAgICAgICAgIC8vIENoZWNrIGZvciBwYWdlLWJy
ZWFrLWFmdGVyOiBhbHdheXMsIGFuZCBpZiBpdCdzIHNldCwgYnJlYWsgYW5kIGJhaWwuCi0gICAg
ICAgIGJvb2wgY2hlY2tBZnRlckFsd2F5cyA9ICFjaGlsZHJlbklubGluZSgpICYmICgoY2hlY2tQ
YWdlQnJlYWtzICYmIGNoaWxkLT5zdHlsZSgpLT5wYWdlQnJlYWtBZnRlcigpID09IFBCQUxXQVlT
KSB8fCAoY2hlY2tDb2x1bW5CcmVha3MgJiYgY2hpbGQtPnN0eWxlKCktPmNvbHVtbkJyZWFrQWZ0
ZXIoKSA9PSBQQkFMV0FZUykpOworICAgICAgICBib29sIGNoZWNrQWZ0ZXJBbHdheXMgPSAhY2hp
bGRyZW5JbmxpbmUoKSAmJiAoY2hlY2tQYWdlQnJlYWtzICYmIGNoaWxkLT5zdHlsZSgpLT5wYWdl
QnJlYWtBZnRlcigpID09IFBCQUxXQVlTKTsKICAgICAgICAgaWYgKGNoZWNrQWZ0ZXJBbHdheXMK
ICAgICAgICAgICAgICYmICh0eSArIGNoaWxkLT55KCkgKyBjaGlsZC0+aGVpZ2h0KCkpID4gcGFp
bnRJbmZvLnJlY3QueSgpCiAgICAgICAgICAgICAmJiAodHkgKyBjaGlsZC0+eSgpICsgY2hpbGQt
PmhlaWdodCgpKSA8IHBhaW50SW5mby5yZWN0LmJvdHRvbSgpKSB7CkBAIC0yNzk2LDEzICsyODgz
LDIyIEBAIHZvaWQgUmVuZGVyQmxvY2s6Omluc2VydEZsb2F0aW5nT2JqZWN0KFIKIAogICAgIC8v
IENyZWF0ZSB0aGUgc3BlY2lhbCBvYmplY3QgZW50cnkgJiBhcHBlbmQgaXQgdG8gdGhlIGxpc3QK
IAotICAgIG8tPmxheW91dElmTmVlZGVkKCk7Ci0KICAgICBGbG9hdGluZ09iamVjdCogbmV3T2Jq
ID0gbmV3IEZsb2F0aW5nT2JqZWN0KG8tPnN0eWxlKCktPmZsb2F0aW5nKCkgPT0gRkxFRlQgPyBG
bG9hdGluZ09iamVjdDo6RmxvYXRMZWZ0IDogRmxvYXRpbmdPYmplY3Q6OkZsb2F0UmlnaHQpOwog
CiAgICAgbmV3T2JqLT5tX3RvcCA9IC0xOwogICAgIG5ld09iai0+bV9ib3R0b20gPSAtMTsKKyAg
ICAKKyAgICAvLyBPdXIgbG9jYXRpb24gaXMgaXJyZWxldmFudCBpZiB3ZSdyZSB1bnNwbGl0dGFi
bGUgb3Igbm8gcGFnaW5hdGlvbiBpcyBpbiBlZmZlY3QuICBKdXN0IGdvIGFoZWFkCisgICAgLy8g
YW5kIGxheSBvdXQgdGhlIGZsb2F0LgorICAgIGJvb2wgYWZmZWN0ZWRCeVBhZ2luYXRpb24gPSBv
LT5pc1JlbmRlckJsb2NrKCkgJiYgdmlldygpLT5sYXlvdXRTdGF0ZSgpLT5tX3BhZ2VIZWlnaHQ7
CisgICAgaWYgKCFhZmZlY3RlZEJ5UGFnaW5hdGlvbikKKyAgICAgICAgby0+bGF5b3V0SWZOZWVk
ZWQoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgby0+Y2FsY1dpZHRoKCk7CisgICAgICAgIG8tPmNh
bGNWZXJ0aWNhbE1hcmdpbnMoKTsKKyAgICB9CiAgICAgbmV3T2JqLT5tX3dpZHRoID0gby0+d2lk
dGgoKSArIG8tPm1hcmdpbkxlZnQoKSArIG8tPm1hcmdpblJpZ2h0KCk7CisKICAgICBuZXdPYmot
Pm1fc2hvdWxkUGFpbnQgPSAhby0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKTsgLy8gSWYgYSBsYXll
ciBleGlzdHMsIHRoZSBmbG9hdCB3aWxsIHBhaW50IGl0c2VsZi4gIE90aGVyd2lzZSBzb21lb25l
IGVsc2Ugd2lsbC4KICAgICBuZXdPYmotPm1faXNEZXNjZW5kYW50ID0gdHJ1ZTsKICAgICBuZXdP
YmotPm1fcmVuZGVyZXIgPSBvOwpAQCAtMjg2NywxNiArMjk2MywxNSBAQCBib29sIFJlbmRlckJs
b2NrOjpwb3NpdGlvbk5ld0Zsb2F0cygpCiAgICAgICAgIH0KIAogICAgICAgICBSZW5kZXJCb3gq
IG8gPSBmLT5tX3JlbmRlcmVyOwotICAgICAgICBpbnQgX2hlaWdodCA9IG8tPmhlaWdodCgpICsg
by0+bWFyZ2luVG9wKCkgKyBvLT5tYXJnaW5Cb3R0b20oKTsKIAogICAgICAgICBpbnQgcm8gPSBy
aWdodE9mZnNldCgpOyAvLyBDb25zdGFudCBwYXJ0IG9mIHJpZ2h0IG9mZnNldC4KLSAgICAgICAg
aW50IGxvID0gbGVmdE9mZnNldCgpOyAvLyBDb25zdGF0IHBhcnQgb2YgbGVmdCBvZmZzZXQuCisg
ICAgICAgIGludCBsbyA9IGxlZnRPZmZzZXQoKTsgLy8gQ29uc3RhbnQgcGFydCBvZiBsZWZ0IG9m
ZnNldC4KICAgICAgICAgaW50IGZ3aWR0aCA9IGYtPm1fd2lkdGg7IC8vIFRoZSB3aWR0aCB3ZSBs
b29rIGZvci4KICAgICAgICAgaWYgKHJvIC0gbG8gPCBmd2lkdGgpCiAgICAgICAgICAgICBmd2lk
dGggPSBybyAtIGxvOyAvLyBOZXZlciBsb29rIGZvciBtb3JlIHRoYW4gd2hhdCB3aWxsIGJlIGF2
YWlsYWJsZS4KICAgICAgICAgCiAgICAgICAgIEludFJlY3Qgb2xkUmVjdChvLT54KCksIG8tPnko
KSAsIG8tPndpZHRoKCksIG8tPmhlaWdodCgpKTsKLSAgICAgICAgCisKICAgICAgICAgaWYgKG8t
PnN0eWxlKCktPmNsZWFyKCkgJiBDTEVGVCkKICAgICAgICAgICAgIHkgPSBtYXgobGVmdEJvdHRv
bSgpLCB5KTsKICAgICAgICAgaWYgKG8tPnN0eWxlKCktPmNsZWFyKCkgJiBDUklHSFQpCkBAIC0y
OTA1LDkgKzMwMDAsMTYgQEAgYm9vbCBSZW5kZXJCbG9jazo6cG9zaXRpb25OZXdGbG9hdHMoKQog
ICAgICAgICAgICAgby0+c2V0TG9jYXRpb24oZnggLSBvLT5tYXJnaW5SaWdodCgpIC0gby0+d2lk
dGgoKSwgeSArIG8tPm1hcmdpblRvcCgpKTsKICAgICAgICAgfQogCi0gICAgICAgIGYtPm1fdG9w
ID0geTsKLSAgICAgICAgZi0+bV9ib3R0b20gPSBmLT5tX3RvcCArIF9oZWlnaHQ7CisgICAgICAg
IGJvb2wgYWZmZWN0ZWRCeVBhZ2luYXRpb24gPSBvLT5pc1JlbmRlckJsb2NrKCkgJiYgdmlldygp
LT5sYXlvdXRTdGF0ZSgpLT5tX3BhZ2VIZWlnaHQ7CisgICAgICAgIGlmIChhZmZlY3RlZEJ5UGFn
aW5hdGlvbikgeworICAgICAgICAgICAgaWYgKG9sZFJlY3QubG9jYXRpb24oKSAhPSBvLT5sb2Nh
dGlvbigpKQorICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlckJsb2NrKj4obyktPm1h
cmtEZXNjZW5kYW50QmxvY2tzQW5kTGluZXNGb3JMYXlvdXQoKTsKKyAgICAgICAgICAgIG8tPmxh
eW91dElmTmVlZGVkKCk7CisgICAgICAgIH0KIAorICAgICAgICBmLT5tX3RvcCA9IHk7CisgICAg
ICAgIGYtPm1fYm90dG9tID0gZi0+bV90b3AgKyBvLT5tYXJnaW5Ub3AoKSArIG8tPmhlaWdodCgp
ICsgby0+bWFyZ2luQm90dG9tKCk7CisgICAgICAgIAogICAgICAgICAvLyBJZiB0aGUgY2hpbGQg
bW92ZWQsIHdlIGhhdmUgdG8gcmVwYWludCBpdC4KICAgICAgICAgaWYgKG8tPmNoZWNrRm9yUmVw
YWludER1cmluZ0xheW91dCgpKQogICAgICAgICAgICAgby0+cmVwYWludER1cmluZ0xheW91dElm
TW92ZWQob2xkUmVjdCk7CkBAIC0zMTU4LDggKzMyNjAsOCBAQCBpbnQgUmVuZGVyQmxvY2s6Omxv
d2VzdFBvc2l0aW9uKGJvb2wgaW5jCiAKICAgICBpZiAoaGFzQ29sdW1ucygpKSB7CiAgICAgICAg
IENvbHVtbkluZm8qIGNvbEluZm8gPSBjb2x1bW5JbmZvKCk7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBjb2xJbmZvLT5jb2x1bW5Db3VudCgpOyBpKyspCi0gICAgICAgICAgICBi
b3R0b20gPSBtYXgoYm90dG9tLCBjb2xJbmZvLT5jb2x1bW5SZWN0QXQoaSkuYm90dG9tKCkgKyBy
ZWxhdGl2ZU9mZnNldCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb2x1bW5D
b3VudChjb2xJbmZvKTsgaSsrKQorICAgICAgICAgICAgYm90dG9tID0gbWF4KGJvdHRvbSwgY29s
dW1uUmVjdEF0KGNvbEluZm8sIGkpLmJvdHRvbSgpICsgcmVsYXRpdmVPZmZzZXQpOwogICAgICAg
ICByZXR1cm4gYm90dG9tOwogICAgIH0KIApAQCAtMzI1Myw4ICszMzU1LDkgQEAgaW50IFJlbmRl
ckJsb2NrOjpyaWdodG1vc3RQb3NpdGlvbihib29sIAogICAgICAgICAvLyBUaGlzIG9ubHkgbWF0
dGVycyBmb3IgTFRSCiAgICAgICAgIGlmIChzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIpIHsK
ICAgICAgICAgICAgIENvbHVtbkluZm8qIGNvbEluZm8gPSBjb2x1bW5JbmZvKCk7Ci0gICAgICAg
ICAgICBpZiAoY29sSW5mby0+Y29sdW1uQ291bnQoKSkKLSAgICAgICAgICAgICAgICByaWdodCA9
IG1heChjb2xJbmZvLT5jb2x1bW5SZWN0QXQoY29sSW5mby0+Y29sdW1uQ291bnQoKSAtIDEpLnJp
Z2h0KCkgKyByZWxhdGl2ZU9mZnNldCwgcmlnaHQpOworICAgICAgICAgICAgdW5zaWduZWQgY291
bnQgPSBjb2x1bW5Db3VudChjb2xJbmZvKTsKKyAgICAgICAgICAgIGlmIChjb3VudCkKKyAgICAg
ICAgICAgICAgICByaWdodCA9IG1heChjb2x1bW5SZWN0QXQoY29sSW5mbywgY291bnQgLSAxKS5y
aWdodCgpICsgcmVsYXRpdmVPZmZzZXQsIHJpZ2h0KTsKICAgICAgICAgfQogICAgICAgICByZXR1
cm4gcmlnaHQ7CiAgICAgfQpAQCAtMzM1Myw4ICszNDU2LDkgQEAgaW50IFJlbmRlckJsb2NrOjps
ZWZ0bW9zdFBvc2l0aW9uKGJvb2wgaQogICAgICAgICAvLyBUaGlzIG9ubHkgbWF0dGVycyBmb3Ig
UlRMCiAgICAgICAgIGlmIChzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBSVEwpIHsKICAgICAgICAg
ICAgIENvbHVtbkluZm8qIGNvbEluZm8gPSBjb2x1bW5JbmZvKCk7Ci0gICAgICAgICAgICBpZiAo
Y29sSW5mby0+Y29sdW1uQ291bnQoKSkKLSAgICAgICAgICAgICAgICBsZWZ0ID0gbWluKGNvbElu
Zm8tPmNvbHVtblJlY3RBdChjb2xJbmZvLT5jb2x1bW5Db3VudCgpIC0gMSkueCgpICsgcmVsYXRp
dmVPZmZzZXQsIGxlZnQpOworICAgICAgICAgICAgdW5zaWduZWQgY291bnQgPSBjb2x1bW5Db3Vu
dChjb2xJbmZvKTsKKyAgICAgICAgICAgIGlmIChjb3VudCkKKyAgICAgICAgICAgICAgICBsZWZ0
ID0gbWluKGNvbHVtblJlY3RBdChjb2xJbmZvLCBjb3VudCAtIDEpLngoKSArIHJlbGF0aXZlT2Zm
c2V0LCBsZWZ0KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gbGVmdDsKICAgICB9CkBAIC0z
NjY0LDMwICszNzY4LDI0IEBAIHZvaWQgUmVuZGVyQmxvY2s6Om1hcmtBbGxEZXNjZW5kYW50c1dp
dGgKICAgICB9CiB9CiAKLWludCBSZW5kZXJCbG9jazo6dmlzaWJsZVRvcE9mSGlnaGVzdEZsb2F0
RXh0ZW5kaW5nQmVsb3coaW50IGJvdHRvbSwgaW50IG1heEhlaWdodCkgY29uc3QKK3ZvaWQgUmVu
ZGVyQmxvY2s6Om1hcmtEZXNjZW5kYW50QmxvY2tzQW5kTGluZXNGb3JMYXlvdXQoYm9vbCBpbkxh
eW91dCkKIHsKLSAgICBpbnQgdG9wID0gYm90dG9tOwotICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0
cykgewotICAgICAgICBGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3Q7Ci0gICAgICAgIGZv
ciAoRGVwcmVjYXRlZFB0ckxpc3RJdGVyYXRvcjxGbG9hdGluZ09iamVjdD4gaXQoKm1fZmxvYXRp
bmdPYmplY3RzKTsgKGZsb2F0aW5nT2JqZWN0ID0gaXQuY3VycmVudCgpKTsgKytpdCkgewotICAg
ICAgICAgICAgUmVuZGVyQm94KiBmbG9hdGluZ0JveCA9IGZsb2F0aW5nT2JqZWN0LT5tX3JlbmRl
cmVyOwotICAgICAgICAgICAgSW50UmVjdCB2aXNpYmxlT3ZlcmZsb3cgPSBmbG9hdGluZ0JveC0+
dmlzaWJsZU92ZXJmbG93UmVjdCgpOwotICAgICAgICAgICAgdmlzaWJsZU92ZXJmbG93Lm1vdmUo
ZmxvYXRpbmdCb3gtPngoKSwgZmxvYXRpbmdCb3gtPnkoKSk7Ci0gICAgICAgICAgICBpZiAodmlz
aWJsZU92ZXJmbG93LnkoKSA8IHRvcCAmJiB2aXNpYmxlT3ZlcmZsb3cuYm90dG9tKCkgPiBib3R0
b20gJiYgdmlzaWJsZU92ZXJmbG93LmhlaWdodCgpIDw9IG1heEhlaWdodCAmJiBmbG9hdGluZ0Jv
eC0+Y29udGFpbmluZ0Jsb2NrKCkgPT0gdGhpcykKLSAgICAgICAgICAgICAgICB0b3AgPSB2aXNp
YmxlT3ZlcmZsb3cueSgpOwotICAgICAgICB9Ci0gICAgfQorICAgIGlmICghbV9ldmVySGFkTGF5
b3V0KQorICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIWNoaWxkcmVuSW5saW5lKCkpIHsKLSAg
ICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hp
bGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICAgICAgaWYgKGNoaWxkLT5pc0Zs
b2F0aW5nT3JQb3NpdGlvbmVkKCkgfHwgIWNoaWxkLT5pc1JlbmRlckJsb2NrKCkpCi0gICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBSZW5kZXJCbG9jayogY2hpbGRCbG9jayA9
IHRvUmVuZGVyQmxvY2soY2hpbGQpOwotICAgICAgICAgICAgdG9wID0gbWluKHRvcCwgY2hpbGRC
bG9jay0+eSgpICsgY2hpbGRCbG9jay0+dmlzaWJsZVRvcE9mSGlnaGVzdEZsb2F0RXh0ZW5kaW5n
QmVsb3coYm90dG9tIC0gY2hpbGRCbG9jay0+eSgpLCBtYXhIZWlnaHQpKTsKLSAgICAgICAgfQot
ICAgIH0KKyAgICBpZiAoY2hpbGRyZW5JbmxpbmUoKSkKKyAgICAgICAgc2V0TmVlZHNMYXlvdXQo
dHJ1ZSwgIWluTGF5b3V0KTsgLy8gV2Ugd2FudCB0byBmb3JjZSBhIGZ1bGwgbGluZSBsYXlvdXQg
dG9vLgorICAgIGVsc2UKKyAgICAgICAgc2V0Q2hpbGROZWVkc0xheW91dCh0cnVlLCAhaW5MYXlv
dXQpOwogCi0gICAgcmV0dXJuIHRvcDsKKyAgICAvLyBJdGVyYXRlIG92ZXIgb3VyIGNoaWxkcmVu
IGFuZCBtYXJrIHRoZW0gYXMgbmVlZGVkLgorICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9
IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKKyAg
ICAgICAgaWYgKGNoaWxkLT5pc1Bvc2l0aW9uZWQoKSB8fCAhY2hpbGQtPmlzUmVuZGVyQmxvY2so
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBSZW5kZXJCbG9jayogY2hpbGRCbG9j
ayA9IHRvUmVuZGVyQmxvY2soY2hpbGQpOworICAgICAgICBpZiAoIWNoaWxkQmxvY2stPmlzSW5s
aW5lKCkpCisgICAgICAgICAgICBjaGlsZEJsb2NrLT5tYXJrRGVzY2VuZGFudEJsb2Nrc0FuZExp
bmVzRm9yTGF5b3V0KGluTGF5b3V0KTsKKyAgICB9CiB9CiAKIGludCBSZW5kZXJCbG9jazo6Z2V0
Q2xlYXJEZWx0YShSZW5kZXJCb3gqIGNoaWxkLCBpbnQgeVBvcykKQEAgLTM4NDcsMTYgKzM5NDUs
MTYgQEAgYm9vbCBSZW5kZXJCbG9jazo6aGl0VGVzdENvbHVtbnMoY29uc3QgSAogewogICAgIC8v
IFdlIG5lZWQgdG8gZG8gbXVsdGlwbGUgcGFzc2VzLCBicmVha2luZyB1cCBvdXIgaGl0IHRlc3Rp
bmcgaW50byBzdHJpcHMuCiAgICAgQ29sdW1uSW5mbyogY29sSW5mbyA9IGNvbHVtbkluZm8oKTsK
LSAgICBpbnQgY29sQ291bnQgPSBjb2xJbmZvLT5jb2x1bW5Db3VudCgpOworICAgIGludCBjb2xD
b3VudCA9IGNvbHVtbkNvdW50KGNvbEluZm8pOwogICAgIGlmICghY29sQ291bnQpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICBpbnQgbGVmdCA9IGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0
KCk7CiAgICAgaW50IGN1cnJZT2Zmc2V0ID0gMDsKICAgICBpbnQgaTsKICAgICBmb3IgKGkgPSAw
OyBpIDwgY29sQ291bnQ7IGkrKykKLSAgICAgICAgY3VycllPZmZzZXQgLT0gY29sSW5mby0+Y29s
dW1uUmVjdEF0KGkpLmhlaWdodCgpOworICAgICAgICBjdXJyWU9mZnNldCAtPSBjb2x1bW5SZWN0
QXQoY29sSW5mbywgaSkuaGVpZ2h0KCk7CiAgICAgZm9yIChpID0gY29sQ291bnQgLSAxOyBpID49
IDA7IGktLSkgewotICAgICAgICBJbnRSZWN0IGNvbFJlY3QgPSBjb2xJbmZvLT5jb2x1bW5SZWN0
QXQoaSk7CisgICAgICAgIEludFJlY3QgY29sUmVjdCA9IGNvbHVtblJlY3RBdChjb2xJbmZvLCBp
KTsKICAgICAgICAgaW50IGN1cnJYT2Zmc2V0ID0gY29sUmVjdC54KCkgLSBsZWZ0OwogICAgICAg
ICBjdXJyWU9mZnNldCArPSBjb2xSZWN0LmhlaWdodCgpOwogICAgICAgICBjb2xSZWN0Lm1vdmUo
dHgsIHR5KTsKQEAgLTQxNTAsOCArNDI0OCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnNldERlc2ly
ZWRDb2x1bW5Db3VudEEKICAgICBib29sIGRlc3Ryb3lDb2x1bW5zID0gIWZpcnN0Q2hpbGQoKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoY291bnQgPT0gMSAmJiBzdHlsZSgpLT5oYXNB
dXRvQ29sdW1uV2lkdGgoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgZmlyc3RDaGls
ZCgpLT5pc0Fub255bW91c0NvbHVtbnNCbG9jaygpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
IHx8IGZpcnN0Q2hpbGQoKS0+aXNBbm9ueW1vdXNDb2x1bW5TcGFuQmxvY2soKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICB8fCBkb2N1bWVudCgpLT5zZXR0aW5ncygpLT5wYWdpbmF0ZUR1cmlu
Z0xheW91dEVuYWJsZWQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgZmlyc3RDaGls
ZCgpLT5pc0Fub255bW91c0NvbHVtblNwYW5CbG9jaygpOwogICAgIGlmIChkZXN0cm95Q29sdW1u
cykgewogICAgICAgICBpZiAoaGFzQ29sdW1ucygpKSB7CiAgICAgICAgICAgICBkZWxldGUgZ0Nv
bHVtbkluZm9NYXAtPnRha2UodGhpcyk7CkBAIC00MTk0LDEzMyArNDI5MSw1OCBAQCBDb2x1bW5J
bmZvKiBSZW5kZXJCbG9jazo6Y29sdW1uSW5mbygpIGNvCiAgICAgcmV0dXJuIGdDb2x1bW5JbmZv
TWFwLT5nZXQodGhpcyk7ICAgIAogfQogCi1pbnQgUmVuZGVyQmxvY2s6OmxheW91dENvbHVtbnMo
aW50IGVuZE9mQ29udGVudCwgaW50IHJlcXVlc3RlZENvbHVtbkhlaWdodCkKK3Vuc2lnbmVkIFJl
bmRlckJsb2NrOjpjb2x1bW5Db3VudChDb2x1bW5JbmZvKiBjb2xJbmZvKSBjb25zdAogewotICAg
IC8vIERvbid0IGRvIGFueXRoaW5nIGlmIHdlIGhhdmUgbm8gY29sdW1ucwotICAgIGlmICghaGFz
Q29sdW1ucygpKQotICAgICAgICByZXR1cm4gLTE7CisgICAgQVNTRVJUKGhhc0NvbHVtbnMoKSAm
JiBnQ29sdW1uSW5mb01hcC0+Z2V0KHRoaXMpID09IGNvbEluZm8pOworICAgIHJldHVybiBjb2xJ
bmZvLT5jb2x1bW5Db3VudCgpOworfQogCi0gICAgQ29sdW1uSW5mbyogaW5mbyA9IGdDb2x1bW5J
bmZvTWFwLT5nZXQodGhpcyk7Ci0gICAgaW50IGRlc2lyZWRDb2x1bW5XaWR0aCA9IGluZm8tPmRl
c2lyZWRDb2x1bW5XaWR0aCgpOwotICAgIGludCBkZXNpcmVkQ29sdW1uQ291bnQgPSBpbmZvLT5k
ZXNpcmVkQ29sdW1uQ291bnQoKTsKLSAgICAKLSAgICBib29sIGNvbXB1dGVJbnRyaW5zaWNIZWln
aHQgPSAoZW5kT2ZDb250ZW50ID09IC0xKTsKLQotICAgIC8vIEZpbGwgdGhlIGNvbHVtbnMgaW4g
dG8gdGhlIGF2YWlsYWJsZSBoZWlnaHQuICBBdHRlbXB0IHRvIGJhbGFuY2UgdGhlIGhlaWdodCBv
ZiB0aGUgY29sdW1ucy4KLSAgICAvLyBBZGQgaW4gaGFsZiBvdXIgbGluZS1oZWlnaHQgdG8gaGVs
cCB3aXRoIGJlc3QtZ3Vlc3MgaW5pdGlhbCBiYWxhbmNpbmcuCi0gICAgaW50IGNvbHVtblNsb3Ag
PSBsaW5lSGVpZ2h0KGZhbHNlKSAvIDI7Ci0gICAgaW50IHJlbWFpbmluZ1Nsb3BTcGFjZSA9IGNv
bHVtblNsb3AgKiBkZXNpcmVkQ29sdW1uQ291bnQ7Ci0gICAgaW50IGF2YWlsYWJsZUhlaWdodCA9
IGNvbnRlbnRIZWlnaHQoKTsKLSAgICBpbnQgY29sSGVpZ2h0OwotICAgIGlmIChjb21wdXRlSW50
cmluc2ljSGVpZ2h0ICYmIHJlcXVlc3RlZENvbHVtbkhlaWdodCA+PSAwKQotICAgICAgICBjb2xI
ZWlnaHQgPSByZXF1ZXN0ZWRDb2x1bW5IZWlnaHQ7Ci0gICAgZWxzZSBpZiAoY29tcHV0ZUludHJp
bnNpY0hlaWdodCkKLSAgICAgICAgY29sSGVpZ2h0ID0gbWluKGF2YWlsYWJsZUhlaWdodCwgYXZh
aWxhYmxlSGVpZ2h0IC8gZGVzaXJlZENvbHVtbkNvdW50ICsgY29sdW1uU2xvcCk7Ci0gICAgZWxz
ZQotICAgICAgICBjb2xIZWlnaHQgPSBhdmFpbGFibGVIZWlnaHQ7Ci0gICAgaW50IG9yaWdpbmFs
Q29sSGVpZ2h0ID0gY29sSGVpZ2h0OworSW50UmVjdCBSZW5kZXJCbG9jazo6Y29sdW1uUmVjdEF0
KENvbHVtbkluZm8qIGNvbEluZm8sIHVuc2lnbmVkIGluZGV4KSBjb25zdAoreworICAgIEFTU0VS
VChoYXNDb2x1bW5zKCkgJiYgZ0NvbHVtbkluZm9NYXAtPmdldCh0aGlzKSA9PSBjb2xJbmZvKTsK
IAorICAgIC8vIENvbXB1dGUgdGhlIGFwcHJvcHJpYXRlIHJlY3QgYmFzZWQgb2ZmIG91ciBpbmZv
cm1hdGlvbi4KKyAgICBpbnQgY29sV2lkdGggPSBjb2xJbmZvLT5kZXNpcmVkQ29sdW1uV2lkdGgo
KTsKKyAgICBpbnQgY29sSGVpZ2h0ID0gY29sSW5mby0+Y29sdW1uSGVpZ2h0KCk7CisgICAgaW50
IGNvbFRvcCA9IGJvcmRlclRvcCgpICsgcGFkZGluZ1RvcCgpOwogICAgIGludCBjb2xHYXAgPSBj
b2x1bW5HYXAoKTsKKyAgICBpbnQgY29sTGVmdCA9IHN0eWxlKCktPmRpcmVjdGlvbigpID09IExU
UiA/IAorICAgICAgICAgICAgICAgICAgICAgIGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCkg
KyAoaW5kZXggKiAoY29sV2lkdGggKyBjb2xHYXApKQorICAgICAgICAgICAgICAgICAgICAgIDog
Ym9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKSArIGNvbnRlbnRXaWR0aCgpIC0gY29sV2lkdGgg
LSAoaW5kZXggKiAoY29sV2lkdGggKyBjb2xHYXApKTsKKyAgICByZXR1cm4gSW50UmVjdChjb2xM
ZWZ0LCBjb2xUb3AsIGNvbFdpZHRoLCBjb2xIZWlnaHQpOworfQogCi0gICAgLy8gQ29tcHV0ZSBh
IGNvbGxlY3Rpb24gb2YgY29sdW1uIHJlY3RzLgotICAgIGluZm8tPmNsZWFyQ29sdW1ucygpOwot
ICAgIAotICAgIC8vIFRoZW4gd2UgZG8gYSBzaW11bGF0ZWQgInBhaW50IiBpbnRvIHRoZSBjb2x1
bW4gc2xpY2VzIGFuZCBhbGxvdyB0aGUgY29udGVudCB0byBzbGlnaHRseSBhZGp1c3Qgb3VyIGlu
ZGl2aWR1YWwgY29sdW1uIHJlY3RzLgotICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIHRha2UgaW50
byBhY2NvdW50IGxheWVycyB0aGF0IGFyZSBhZmZlY3RlZCBieSB0aGUgY29sdW1ucyBhcyB3ZWxs
IGhlcmUgc28gdGhhdCB0aGV5IGNhbiBoYXZlIGFuIG9wcG9ydHVuaXR5Ci0gICAgLy8gdG8gYWRq
dXN0IGNvbHVtbiByZWN0cyBhbHNvLgotICAgIFJlbmRlclZpZXcqIHYgPSB2aWV3KCk7Ci0gICAg
aW50IGxlZnQgPSBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpOwotICAgIGludCB0b3AgPSBi
b3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKTsKLSAgICBpbnQgY3VyclggPSBzdHlsZSgpLT5kaXJl
Y3Rpb24oKSA9PSBMVFIgPyBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpIDogYm9yZGVyTGVm
dCgpICsgcGFkZGluZ0xlZnQoKSArIGNvbnRlbnRXaWR0aCgpIC0gZGVzaXJlZENvbHVtbldpZHRo
OwotICAgIGludCBjdXJyWSA9IHRvcDsKLSAgICB1bnNpZ25lZCBjb2xDb3VudCA9IGRlc2lyZWRD
b2x1bW5Db3VudDsKLSAgICBpbnQgbWF4Q29sQm90dG9tID0gYm9yZGVyVG9wKCkgKyBwYWRkaW5n
VG9wKCk7Ci0gICAgaW50IGNvbnRlbnRCb3R0b20gPSB0b3AgKyBhdmFpbGFibGVIZWlnaHQ7Ci0g
ICAgaW50IG1pbmltdW1Db2x1bW5IZWlnaHQgPSAtMTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgY29sQ291bnQ7IGkrKykgewotICAgICAgICAvLyBJZiB3ZSBhcmVuJ3QgY29uc3RyYWlu
ZWQsIHRoZW4gdGhlIGxhc3QgY29sdW1uIGNhbiBqdXN0IGdldCBhbGwgdGhlIHJlbWFpbmluZyBz
cGFjZS4KLSAgICAgICAgaWYgKGNvbXB1dGVJbnRyaW5zaWNIZWlnaHQgJiYgaSA9PSBjb2xDb3Vu
dCAtIDEpCi0gICAgICAgICAgICBjb2xIZWlnaHQgPSBhdmFpbGFibGVIZWlnaHQ7Ci0KLSAgICAg
ICAgLy8gVGhpcyByZXByZXNlbnRzIHRoZSByZWFsIGNvbHVtbiBwb3NpdGlvbi4KLSAgICAgICAg
SW50UmVjdCBjb2xSZWN0KGN1cnJYLCB0b3AsIGRlc2lyZWRDb2x1bW5XaWR0aCwgY29sSGVpZ2h0
KTsKLQotICAgICAgICBpbnQgdHJ1bmNhdGlvblBvaW50ID0gdmlzaWJsZVRvcE9mSGlnaGVzdEZs
b2F0RXh0ZW5kaW5nQmVsb3coY3VyclkgKyBjb2xIZWlnaHQsIGNvbEhlaWdodCk7Ci0KLSAgICAg
ICAgLy8gRm9yIHRoZSBzaW11bGF0ZWQgcGFpbnQsIHdlIHByZXRlbmQgbGlrZSBldmVyeXRoaW5n
IGlzIGluIG9uZSBsb25nIHN0cmlwLgotICAgICAgICBJbnRSZWN0IHBhZ2VSZWN0KGxlZnQsIGN1
cnJZLCBjb250ZW50V2lkdGgoKSwgdHJ1bmNhdGlvblBvaW50IC0gY3VyclkpOwotICAgICAgICB2
LT5zZXRQcmludFJlY3QocGFnZVJlY3QpOwotICAgICAgICB2LT5zZXRUcnVuY2F0ZWRBdCh0cnVu
Y2F0aW9uUG9pbnQpOwotICAgICAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dCgoUGxhdGZvcm1H
cmFwaGljc0NvbnRleHQqKTApOwotICAgICAgICBQYWludEluZm8gcGFpbnRJbmZvKCZjb250ZXh0
LCBwYWdlUmVjdCwgUGFpbnRQaGFzZUZvcmVncm91bmQsIGZhbHNlLCAwLCAwKTsKK2Jvb2wgUmVu
ZGVyQmxvY2s6OmxheW91dENvbHVtbnMoYm9vbCBoYXNTcGVjaWZpZWRQYWdlSGVpZ2h0LCBpbnQg
cGFnZUhlaWdodCwgTGF5b3V0U3RhdGVNYWludGFpbmVyJiBzdGF0ZVB1c2hlcikKK3sKKyAgICBp
ZiAoaGFzQ29sdW1ucygpKSB7CisgICAgICAgIENvbHVtbkluZm8qIGNvbEluZm8gPSBjb2x1bW5J
bmZvKCk7CisgICAgICAgIGlmIChwYWdlSGVpZ2h0KSAvLyBGSVhNRTogU2hvdWxkIHVzZSBsb3dl
c3RQb3NpdGlvbiBpbnN0ZWFkIG9mIGNvbnRlbnRIZWlnaHQoKSwgYnV0IG5lZWQgdG8gZXhjbHVk
ZSBwb3NpdGlvbmVkIG9iamVjdHMuCisgICAgICAgICAgICBjb2xJbmZvLT5zZXRDb2x1bW5Db3Vu
dEFuZEhlaWdodChjZWlsZigoZmxvYXQpY29udGVudEhlaWdodCgpIC8gcGFnZUhlaWdodCksIHBh
Z2VIZWlnaHQpOworICAgICAgICBpbnQgZGVzaXJlZENvbHVtbkNvdW50ID0gY29sSW5mby0+ZGVz
aXJlZENvbHVtbkNvdW50KCk7CisgICAgICAgIGlmICghaGFzU3BlY2lmaWVkUGFnZUhlaWdodCAm
JiBjb250ZW50SGVpZ2h0KCkgPiBwYWdlSGVpZ2h0ICogZGVzaXJlZENvbHVtbkNvdW50KSB7Cisg
ICAgICAgICAgICAvLyBOb3cgdGhhdCB3ZSBrbm93IHRoZSBpbnRyaW5zaWMgaGVpZ2h0IG9mIHRo
ZSBjb2x1bW5zLCB3ZSBoYXZlIHRvIHJlYmFsYW5jZSB0aGVtLgorICAgICAgICAgICAgaW50IGNv
bHVtbkhlaWdodCA9IG1heChjb2xJbmZvLT5taW5pbXVtQ29sdW1uSGVpZ2h0KCksIChpbnQpY2Vp
bGYoKGZsb2F0KWNvbnRlbnRIZWlnaHQoKSAvIGRlc2lyZWRDb2x1bW5Db3VudCkpOworICAgICAg
ICAgICAgaWYgKGNvbHVtbkhlaWdodCA+IDApIHsKKyAgICAgICAgICAgICAgICBzdGF0ZVB1c2hl
ci5wb3AoKTsKKyAgICAgICAgICAgICAgICBsYXlvdXRCbG9jayhmYWxzZSwgY29sdW1uSGVpZ2h0
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fSAKICAgICAgICAgCi0gICAgICAgIHNldEhhc0NvbHVtbnMoZmFsc2UpOwotICAgICAgICBwYWlu
dE9iamVjdChwYWludEluZm8sIDAsIDApOwotICAgICAgICBzZXRIYXNDb2x1bW5zKHRydWUpOwot
Ci0gICAgICAgIGlmIChjb21wdXRlSW50cmluc2ljSGVpZ2h0ICYmIHYtPm1pbmltdW1Db2x1bW5I
ZWlnaHQoKSA+IG9yaWdpbmFsQ29sSGVpZ2h0KSB7Ci0gICAgICAgICAgICAvLyBUaGUgaW5pdGlh
bCBjb2x1bW4gaGVpZ2h0IHdhcyB0b28gc21hbGwgdG8gY29udGFpbiBvbmUgbGluZSBvZiB0ZXh0
LgotICAgICAgICAgICAgbWluaW11bUNvbHVtbkhlaWdodCA9IG1heChtaW5pbXVtQ29sdW1uSGVp
Z2h0LCB2LT5taW5pbXVtQ29sdW1uSGVpZ2h0KCkpOwotICAgICAgICB9CisgICAgICAgIGlmIChj
b2x1bW5Db3VudChjb2xJbmZvKSkgeworICAgICAgICAgICAgSW50UmVjdCBsYXN0UmVjdCA9IGNv
bHVtblJlY3RBdChjb2xJbmZvLCBjb2x1bW5Db3VudChjb2xJbmZvKSAtIDEpOworICAgICAgICAg
ICAgaW50IG92ZXJmbG93TGVmdCA9IHN0eWxlKCktPmRpcmVjdGlvbigpID09IFJUTCA/IG1pbigw
LCBsYXN0UmVjdC54KCkpIDogMDsKKyAgICAgICAgICAgIGludCBvdmVyZmxvd1JpZ2h0ID0gc3R5
bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8gbWF4KHdpZHRoKCksIGxhc3RSZWN0LngoKSArIGxh
c3RSZWN0LndpZHRoKCkpIDogMDsKKyAgICAgICAgICAgIGludCBvdmVyZmxvd0hlaWdodCA9IGJv
cmRlclRvcCgpICsgcGFkZGluZ1RvcCgpICsgY29sSW5mby0+Y29sdW1uSGVpZ2h0KCk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIHNldEhlaWdodChvdmVyZmxvd0hlaWdodCArIGJvcmRlckJv
dHRvbSgpICsgcGFkZGluZ0JvdHRvbSgpICsgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCgpKTsK
IAotICAgICAgICBpbnQgYWRqdXN0ZWRCb3R0b20gPSB2LT5iZXN0VHJ1bmNhdGVkQXQoKTsKLSAg
ICAgICAgaWYgKGFkanVzdGVkQm90dG9tIDw9IGN1cnJZKQotICAgICAgICAgICAgYWRqdXN0ZWRC
b3R0b20gPSB0cnVuY2F0aW9uUG9pbnQ7Ci0gICAgICAgIAotICAgICAgICBjb2xSZWN0LnNldEhl
aWdodChhZGp1c3RlZEJvdHRvbSAtIGN1cnJZKTsKLSAgICAgICAgCi0gICAgICAgIC8vIEFkZCBp
biB0aGUgbG9zdCBzcGFjZSB0byB0aGUgc3Vic2VxdWVudCBjb2x1bW5zLgotICAgICAgICAvLyBG
SVhNRTogVGhpcyB3aWxsIGNyZWF0ZSBhICJzdGFpcmNhc2UiIGVmZmVjdCBpZiB0aGVyZSBhcmUg
ZW5vdWdoIGNvbHVtbnMsIGJ1dCB0aGUgZWZmZWN0IHNob3VsZCBiZSBwcmV0dHkgc3VidGxlLgot
ICAgICAgICBpZiAoY29tcHV0ZUludHJpbnNpY0hlaWdodCkgewotICAgICAgICAgICAgaW50IGxv
c3RTcGFjZSA9IGNvbEhlaWdodCAtIGNvbFJlY3QuaGVpZ2h0KCk7Ci0gICAgICAgICAgICBpZiAo
bG9zdFNwYWNlID4gcmVtYWluaW5nU2xvcFNwYWNlKSB7Ci0gICAgICAgICAgICAgICAgLy8gUmVk
ZXN0cmlidXRlIHRoZSBzcGFjZSBhbW9uZyB0aGUgcmVtYWluaW5nIGNvbHVtbnMuCi0gICAgICAg
ICAgICAgICAgaW50IHNwYWNlVG9SZWRpc3RyaWJ1dGUgPSBsb3N0U3BhY2UgLSByZW1haW5pbmdT
bG9wU3BhY2U7Ci0gICAgICAgICAgICAgICAgaW50IHJlbWFpbmluZ0NvbHVtbnMgPSBjb2xDb3Vu
dCAtIGkgKyAxOwotICAgICAgICAgICAgICAgIGNvbEhlaWdodCArPSBzcGFjZVRvUmVkaXN0cmli
dXRlIC8gcmVtYWluaW5nQ29sdW1uczsKLSAgICAgICAgICAgIH0gCi0gICAgICAgICAgICByZW1h
aW5pbmdTbG9wU3BhY2UgPSBtYXgoMCwgcmVtYWluaW5nU2xvcFNwYWNlIC0gbG9zdFNwYWNlKTsK
KyAgICAgICAgICAgIG1fb3ZlcmZsb3cuY2xlYXIoKTsKKyAgICAgICAgICAgIGFkZExheW91dE92
ZXJmbG93KEludFJlY3Qob3ZlcmZsb3dMZWZ0LCAwLCBvdmVyZmxvd1JpZ2h0IC0gb3ZlcmZsb3dM
ZWZ0LCBvdmVyZmxvd0hlaWdodCkpOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAo
c3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSKQotICAgICAgICAgICAgY3VyclggKz0gZGVzaXJl
ZENvbHVtbldpZHRoICsgY29sR2FwOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjdXJyWCAt
PSAoZGVzaXJlZENvbHVtbldpZHRoICsgY29sR2FwKTsKLQotICAgICAgICBjdXJyWSArPSBjb2xS
ZWN0LmhlaWdodCgpOwotICAgICAgICBhdmFpbGFibGVIZWlnaHQgLT0gY29sUmVjdC5oZWlnaHQo
KTsKLQotICAgICAgICBtYXhDb2xCb3R0b20gPSBtYXgoY29sUmVjdC5ib3R0b20oKSwgbWF4Q29s
Qm90dG9tKTsKLQotICAgICAgICBpbmZvLT5hZGRDb2x1bW5SZWN0KGNvbFJlY3QpOwotICAgICAg
ICAKLSAgICAgICAgLy8gU3RhcnQgYWRkaW5nIGluIG1vcmUgY29sdW1ucyBhcyBsb25nIGFzIHRo
ZXJlJ3Mgc3RpbGwgY29udGVudCBsZWZ0LgotICAgICAgICBpZiAoY3VyclkgPCBlbmRPZkNvbnRl
bnQgJiYgaSA9PSBjb2xDb3VudCAtIDEgJiYgKGNvbXB1dGVJbnRyaW5zaWNIZWlnaHQgfHwgY29u
dGVudEhlaWdodCgpKSkKLSAgICAgICAgICAgIGNvbENvdW50Kys7CiAgICAgfQotCi0gICAgaWYg
KG1pbmltdW1Db2x1bW5IZWlnaHQgPj0gMCkgewotICAgICAgICAvLyBJZiBvcmlnaW5hbENvbEhl
aWdodCB3YXMgdG9vIHNtYWxsLCB3ZSBuZWVkIHRvIHRyeSB0byBsYXlvdXQgYWdhaW4uCi0gICAg
ICAgIHJldHVybiBsYXlvdXRDb2x1bW5zKGVuZE9mQ29udGVudCwgbWluaW11bUNvbHVtbkhlaWdo
dCk7Ci0gICAgfQotCi0gICAgaW50IG92ZXJmbG93UmlnaHQgPSBtYXgod2lkdGgoKSwgY3Vyclgg
LSBjb2xHYXApOwotICAgIGludCBvdmVyZmxvd0xlZnQgPSBtaW4oMCwgY3VyclggKyBkZXNpcmVk
Q29sdW1uV2lkdGggKyBjb2xHYXApOwotICAgIGludCBvdmVyZmxvd0hlaWdodCA9IG1heENvbEJv
dHRvbTsKLSAgICBpbnQgdG9BZGQgPSBib3JkZXJCb3R0b20oKSArIHBhZGRpbmdCb3R0b20oKSAr
IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoKTsKLSAgICAgICAgCi0gICAgaWYgKGNvbXB1dGVJ
bnRyaW5zaWNIZWlnaHQpCi0gICAgICAgIHNldEhlaWdodChtYXhDb2xCb3R0b20gKyB0b0FkZCk7
Ci0KLSAgICBtX292ZXJmbG93LmNsZWFyKCk7Ci0gICAgYWRkTGF5b3V0T3ZlcmZsb3coSW50UmVj
dChvdmVyZmxvd0xlZnQsIDAsIG92ZXJmbG93UmlnaHQgLSBvdmVyZmxvd0xlZnQsIG92ZXJmbG93
SGVpZ2h0KSk7Ci0KLSAgICB2LT5zZXRQcmludFJlY3QoSW50UmVjdCgpKTsKLSAgICB2LT5zZXRU
cnVuY2F0ZWRBdCgwKTsKICAgICAKLSAgICBBU1NFUlQoY29sQ291bnQgPT0gaW5mby0+Y29sdW1u
Q291bnQoKSk7Ci0gICAgCi0gICAgcmV0dXJuIGNvbnRlbnRCb3R0b207CisgICAgcmV0dXJuIGZh
bHNlOwogfQogCiB2b2lkIFJlbmRlckJsb2NrOjphZGp1c3RQb2ludFRvQ29sdW1uQ29udGVudHMo
SW50UG9pbnQmIHBvaW50KSBjb25zdApAQCAtNDMzMCwxNyArNDM1MiwxNyBAQCB2b2lkIFJlbmRl
ckJsb2NrOjphZGp1c3RQb2ludFRvQ29sdW1uQ29uCiAgICAgICAgIHJldHVybjsKICAgICAKICAg
ICBDb2x1bW5JbmZvKiBjb2xJbmZvID0gY29sdW1uSW5mbygpOwotICAgIGlmICghY29sSW5mby0+
Y29sdW1uQ291bnQoKSkKKyAgICBpZiAoIWNvbHVtbkNvdW50KGNvbEluZm8pKQogICAgICAgICBy
ZXR1cm47CiAKICAgICAvLyBEZXRlcm1pbmUgd2hpY2ggY29sdW1ucyB3ZSBpbnRlcnNlY3QuCiAg
ICAgaW50IGNvbEdhcCA9IGNvbHVtbkdhcCgpOwogICAgIGludCBsZWZ0R2FwID0gY29sR2FwIC8g
MjsKLSAgICBJbnRQb2ludCBjb2x1bW5Qb2ludChjb2xJbmZvLT5jb2x1bW5SZWN0QXQoMCkubG9j
YXRpb24oKSk7CisgICAgSW50UG9pbnQgY29sdW1uUG9pbnQoY29sdW1uUmVjdEF0KGNvbEluZm8s
IDApLmxvY2F0aW9uKCkpOwogICAgIGludCB5T2Zmc2V0ID0gMDsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgY29sSW5mby0+Y29sdW1uQ291bnQoKTsgaSsrKSB7CiAgICAgICAgIC8vIEFk
ZCBpbiBoYWxmIHRoZSBjb2x1bW4gZ2FwIHRvIHRoZSBsZWZ0IGFuZCByaWdodCBvZiB0aGUgcmVj
dC4KLSAgICAgICAgSW50UmVjdCBjb2xSZWN0ID0gY29sSW5mby0+Y29sdW1uUmVjdEF0KGkpOwor
ICAgICAgICBJbnRSZWN0IGNvbFJlY3QgPSBjb2x1bW5SZWN0QXQoY29sSW5mbywgaSk7CiAgICAg
ICAgIEludFJlY3QgZ2FwQW5kQ29sdW1uUmVjdChjb2xSZWN0LngoKSAtIGxlZnRHYXAsIGNvbFJl
Y3QueSgpLCBjb2xSZWN0LndpZHRoKCkgKyBjb2xHYXAsIGNvbFJlY3QuaGVpZ2h0KCkpOwogCiAg
ICAgICAgIGlmIChwb2ludC54KCkgPj0gZ2FwQW5kQ29sdW1uUmVjdC54KCkgJiYgcG9pbnQueCgp
IDwgZ2FwQW5kQ29sdW1uUmVjdC5yaWdodCgpKSB7CkBAIC00Mzc4LDcgKzQ0MDAsNyBAQCB2b2lk
IFJlbmRlckJsb2NrOjphZGp1c3RSZWN0Rm9yQ29sdW1ucyhJCiAgICAgSW50UmVjdCByZXN1bHQ7
CiAgICAgCiAgICAgLy8gRGV0ZXJtaW5lIHdoaWNoIGNvbHVtbnMgd2UgaW50ZXJzZWN0LgotICAg
IHVuc2lnbmVkIGNvbENvdW50ID0gY29sSW5mby0+Y29sdW1uQ291bnQoKTsKKyAgICB1bnNpZ25l
ZCBjb2xDb3VudCA9IGNvbHVtbkNvdW50KGNvbEluZm8pOwogICAgIGlmICghY29sQ291bnQpCiAg
ICAgICAgIHJldHVybjsKICAgICAKQEAgLTQzODYsNyArNDQwOCw3IEBAIHZvaWQgUmVuZGVyQmxv
Y2s6OmFkanVzdFJlY3RGb3JDb2x1bW5zKEkKICAgICAKICAgICBpbnQgY3VycllPZmZzZXQgPSAw
OwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb2xDb3VudDsgaSsrKSB7Ci0gICAgICAg
IEludFJlY3QgY29sUmVjdCA9IGNvbEluZm8tPmNvbHVtblJlY3RBdChpKTsKKyAgICAgICAgSW50
UmVjdCBjb2xSZWN0ID0gY29sdW1uUmVjdEF0KGNvbEluZm8sIGkpOwogICAgICAgICBpbnQgY3Vy
clhPZmZzZXQgPSBjb2xSZWN0LngoKSAtIGxlZnQ7CiAgICAgICAgIAogICAgICAgICBJbnRSZWN0
IHJlcGFpbnRSZWN0ID0gcjsKQEAgLTQ0MTIsOSArNDQzNCw5IEBAIHZvaWQgUmVuZGVyQmxvY2s6
OmFkanVzdEZvckNvbHVtbnMoSW50U2kKIAogICAgIGludCBsZWZ0ID0gYm9yZGVyTGVmdCgpICsg
cGFkZGluZ0xlZnQoKTsKICAgICBpbnQgeU9mZnNldCA9IDA7Ci0gICAgc2l6ZV90IGNvbHVtbkNv
dW50ID0gY29sSW5mby0+Y29sdW1uQ291bnQoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGNvbHVtbkNvdW50OyArK2kpIHsKLSAgICAgICAgSW50UmVjdCBjb2x1bW5SZWN0ID0gY29sSW5m
by0+Y29sdW1uUmVjdEF0KGkpOworICAgIHNpemVfdCBjb2xDb3VudCA9IGNvbHVtbkNvdW50KGNv
bEluZm8pOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29sQ291bnQ7ICsraSkgeworICAg
ICAgICBJbnRSZWN0IGNvbHVtblJlY3QgPSBjb2x1bW5SZWN0QXQoY29sSW5mbywgaSk7CiAgICAg
ICAgIGludCB4T2Zmc2V0ID0gY29sdW1uUmVjdC54KCkgLSBsZWZ0OwogICAgICAgICBpZiAocG9p
bnQueSgpIDwgY29sdW1uUmVjdC5ib3R0b20oKSArIHlPZmZzZXQpIHsKICAgICAgICAgICAgIG9m
ZnNldC5leHBhbmQoeE9mZnNldCwgLXlPZmZzZXQpOwpAQCAtNTQxMiw2ICs1NDM0LDE2IEBAIHZv
aWQgUmVuZGVyQmxvY2s6OnNldE1heEJvdHRvbU1hcmdpbnMoaW4KICAgICBtX21heE1hcmdpbi0+
bV9ib3R0b21OZWcgPSBuZWc7CiB9CiAKK3ZvaWQgUmVuZGVyQmxvY2s6OnNldFBhZ2luYXRpb25T
dHJ1dChpbnQgc3RydXQpCit7CisgICAgaWYgKCFtX21heE1hcmdpbikgeworICAgICAgICBpZiAo
c3RydXQgPT0gMCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV9tYXhNYXJnaW4gPSBu
ZXcgTWF4TWFyZ2luKHRoaXMpOworICAgIH0KKyAgICBtX21heE1hcmdpbi0+bV9wYWdpbmF0aW9u
U3RydXQgPSBzdHJ1dDsKK30KKwogdm9pZCBSZW5kZXJCbG9jazo6YWJzb2x1dGVSZWN0cyhWZWN0
b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQgdHgsIGludCB0eSkKIHsKICAgICAvLyBGb3IgYmxvY2tz
IGluc2lkZSBpbmxpbmVzLCB3ZSBnbyBhaGVhZCBhbmQgaW5jbHVkZSBtYXJnaW5zIHNvIHRoYXQg
d2UgcnVuIHJpZ2h0IHVwIHRvIHRoZQpAQCAtNTY3MCw2ICs1NzAyLDc1IEBAIFJlbmRlckJsb2Nr
KiBSZW5kZXJCbG9jazo6Y3JlYXRlQW5vbnltb3UKICAgICByZXR1cm4gbmV3Qm94OwogfQogCitp
bnQgUmVuZGVyQmxvY2s6Om5leHRQYWdlVG9wKGludCB5UG9zKSBjb25zdAoreworICAgIExheW91
dFN0YXRlKiBsYXlvdXRTdGF0ZSA9IHZpZXcoKS0+bGF5b3V0U3RhdGUoKTsKKyAgICBpZiAoIWxh
eW91dFN0YXRlLT5tX3BhZ2VIZWlnaHQpCisgICAgICAgIHJldHVybiB5UG9zOworICAgIAorICAg
IC8vIFRoZSB5UG9zIGlzIGluIG91ciBjb29yZGluYXRlIHNwYWNlLiAgV2UgY2FuIGFkZCBpbiBv
dXIgcHVzaGVkIG9mZnNldC4KKyAgICBpbnQgcGFnZUhlaWdodCA9IGxheW91dFN0YXRlLT5tX3Bh
Z2VIZWlnaHQ7CisgICAgaW50IHJlbWFpbmluZ0hlaWdodCA9IHBhZ2VIZWlnaHQgLSAoKGxheW91
dFN0YXRlLT5tX2xheW91dE9mZnNldCAtIGxheW91dFN0YXRlLT5tX3BhZ2VPZmZzZXQpLmhlaWdo
dCgpICsgeVBvcykgJSBwYWdlSGVpZ2h0OworICAgIHJldHVybiB5UG9zICsgcmVtYWluaW5nSGVp
Z2h0OworfQorCitpbnQgUmVuZGVyQmxvY2s6OmFwcGx5QmVmb3JlQnJlYWsoUmVuZGVyQm94KiBj
aGlsZCwgaW50IHlQb3MpCit7CisgICAgYm9vbCBjaGVja1BhZ2VCcmVha3MgPSBkb2N1bWVudCgp
LT5wYWdpbmF0ZWQoKSAmJiBkb2N1bWVudCgpLT5zZXR0aW5ncygpLT5wYWdpbmF0ZUR1cmluZ0xh
eW91dEVuYWJsZWQoKTsKKyAgICBib29sIGNoZWNrQ29sdW1uQnJlYWtzID0gdmlldygpLT5sYXlv
dXRTdGF0ZSgpLT5wYWdpbmF0aW5nQ29sdW1ucygpOworICAgIGJvb2wgY2hlY2tCZWZvcmVBbHdh
eXMgPSAoY2hlY2tQYWdlQnJlYWtzICYmIGNoaWxkLT5zdHlsZSgpLT5wYWdlQnJlYWtCZWZvcmUo
KSA9PSBQQkFMV0FZUykgfHwgKGNoZWNrQ29sdW1uQnJlYWtzICYmIGNoaWxkLT5zdHlsZSgpLT5j
b2x1bW5CcmVha0JlZm9yZSgpID09IFBCQUxXQVlTKTsKKyAgICBpZiAoY2hlY2tCZWZvcmVBbHdh
eXMpCisgICAgICAgIHJldHVybiBuZXh0UGFnZVRvcCh5UG9zKTsKKyAgICByZXR1cm4geVBvczsK
K30KKworaW50IFJlbmRlckJsb2NrOjphcHBseUFmdGVyQnJlYWsoUmVuZGVyQm94KiBjaGlsZCwg
aW50IHlQb3MsIE1hcmdpbkluZm8mIG1hcmdpbkluZm8pCit7CisgICAgYm9vbCBjaGVja1BhZ2VC
cmVha3MgPSBkb2N1bWVudCgpLT5wYWdpbmF0ZWQoKSAmJiBkb2N1bWVudCgpLT5zZXR0aW5ncygp
LT5wYWdpbmF0ZUR1cmluZ0xheW91dEVuYWJsZWQoKTsKKyAgICBib29sIGNoZWNrQ29sdW1uQnJl
YWtzID0gdmlldygpLT5sYXlvdXRTdGF0ZSgpLT5wYWdpbmF0aW5nQ29sdW1ucygpOworICAgIGJv
b2wgY2hlY2tBZnRlckFsd2F5cyA9IChjaGVja1BhZ2VCcmVha3MgJiYgY2hpbGQtPnN0eWxlKCkt
PnBhZ2VCcmVha0FmdGVyKCkgPT0gUEJBTFdBWVMpIHx8IChjaGVja0NvbHVtbkJyZWFrcyAmJiBj
aGlsZC0+c3R5bGUoKS0+Y29sdW1uQnJlYWtBZnRlcigpID09IFBCQUxXQVlTKTsKKyAgICBpZiAo
Y2hlY2tBZnRlckFsd2F5cykgeworICAgICAgICBtYXJnaW5JbmZvLnNldEJvdHRvbVF1aXJrKHRy
dWUpOyAvLyBDYXVzZSBtYXJnaW5zIHRvIGJlIGRpc2NhcmRlZCBmb3IgYW55IGZvbGxvd2luZyBj
b250ZW50LgorICAgICAgICByZXR1cm4gbmV4dFBhZ2VUb3AoeVBvcyk7CisgICAgfQorICAgIHJl
dHVybiB5UG9zOworfQorCitpbnQgUmVuZGVyQmxvY2s6OmFkanVzdEZvclVuc3BsaXR0YWJsZUNo
aWxkKFJlbmRlckJveCogY2hpbGQsIGludCB5UG9zKQoreworICAgIGJvb2wgaXNVbnNwbGl0dGFi
bGUgPSBjaGlsZC0+aXNSZXBsYWNlZCgpIHx8IGNoaWxkLT5zY3JvbGxzT3ZlcmZsb3coKTsKKyAg
ICBMYXlvdXRTdGF0ZSogbGF5b3V0U3RhdGUgPSB2aWV3KCktPmxheW91dFN0YXRlKCk7CisgICAg
aWYgKGlzVW5zcGxpdHRhYmxlICYmIGxheW91dFN0YXRlLT5tX2NvbHVtbkluZm8pCisgICAgICAg
IGxheW91dFN0YXRlLT5tX2NvbHVtbkluZm8tPnVwZGF0ZU1pbmltdW1Db2x1bW5IZWlnaHQoY2hp
bGQtPmhlaWdodCgpKTsKKyAgICBpbnQgcGFnZUhlaWdodCA9IGxheW91dFN0YXRlLT5tX3BhZ2VI
ZWlnaHQ7CisgICAgaWYgKCFpc1Vuc3BsaXR0YWJsZSB8fCAhcGFnZUhlaWdodCB8fCBjaGlsZC0+
aGVpZ2h0KCkgPiBwYWdlSGVpZ2h0KQorICAgICAgICByZXR1cm4geVBvczsKKyAgICBpbnQgcmVt
YWluaW5nSGVpZ2h0ID0gcGFnZUhlaWdodCAtICgobGF5b3V0U3RhdGUtPm1fbGF5b3V0T2Zmc2V0
IC0gbGF5b3V0U3RhdGUtPm1fcGFnZU9mZnNldCkuaGVpZ2h0KCkgKyB5UG9zKSAlIHBhZ2VIZWln
aHQ7CisgICAgaWYgKHJlbWFpbmluZ0hlaWdodCA8IGNoaWxkLT5oZWlnaHQoKSkKKyAgICAgICAg
cmV0dXJuIHlQb3MgKyByZW1haW5pbmdIZWlnaHQ7CisgICAgcmV0dXJuIHlQb3M7Cit9CisKK3Zv
aWQgUmVuZGVyQmxvY2s6OmFkanVzdExpbmVQb3NpdGlvbkZvclBhZ2luYXRpb24oUm9vdElubGlu
ZUJveCogbGluZUJveCwgaW50JiBkZWx0YSkKK3sKKyAgICBMYXlvdXRTdGF0ZSogbGF5b3V0U3Rh
dGUgPSB2aWV3KCktPmxheW91dFN0YXRlKCk7CisgICAgaW50IHBhZ2VIZWlnaHQgPSBsYXlvdXRT
dGF0ZS0+bV9wYWdlSGVpZ2h0OworICAgIGludCB5UG9zID0gbGluZUJveC0+dG9wVmlzaWJsZU92
ZXJmbG93KCk7CisgICAgaW50IGxpbmVIZWlnaHQgPSBsaW5lQm94LT5ib3R0b21WaXNpYmxlT3Zl
cmZsb3coKSAtIHlQb3M7CisgICAgaWYgKGxheW91dFN0YXRlLT5tX2NvbHVtbkluZm8pCisgICAg
ICAgIGxheW91dFN0YXRlLT5tX2NvbHVtbkluZm8tPnVwZGF0ZU1pbmltdW1Db2x1bW5IZWlnaHQo
bGluZUhlaWdodCk7CisgICAgeVBvcyArPSBkZWx0YTsKKyAgICBpZiAoIXBhZ2VIZWlnaHQgfHwg
bGluZUhlaWdodCA+IHBhZ2VIZWlnaHQpCisgICAgICAgIHJldHVybjsKKyAgICBpbnQgcmVtYWlu
aW5nSGVpZ2h0ID0gcGFnZUhlaWdodCAtICgobGF5b3V0U3RhdGUtPm1fbGF5b3V0T2Zmc2V0IC0g
bGF5b3V0U3RhdGUtPm1fcGFnZU9mZnNldCkuaGVpZ2h0KCkgKyB5UG9zKSAlIHBhZ2VIZWlnaHQ7
CisgICAgaWYgKHJlbWFpbmluZ0hlaWdodCA8IGxpbmVIZWlnaHQpIHsKKyAgICAgICAgaWYgKGxp
bmVCb3ggPT0gZmlyc3RSb290Qm94KCkpCisgICAgICAgICAgICBzZXRQYWdpbmF0aW9uU3RydXQo
cmVtYWluaW5nSGVpZ2h0ICsgKCh5UG9zID4gMCAmJiBsaW5lSGVpZ2h0ICsgeVBvcyA8PSBwYWdl
SGVpZ2h0KSA/IHlQb3MgOiAwKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRlbHRhICs9
IHJlbWFpbmluZ0hlaWdodDsKKyAgICB9Cit9CisgCiBjb25zdCBjaGFyKiBSZW5kZXJCbG9jazo6
cmVuZGVyTmFtZSgpIGNvbnN0CiB7CiAgICAgaWYgKGlzQm9keSgpKQpJbmRleDogV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9jay5oCShyZXZpc2lvbiA2NjkwMykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBDb2x1bW5JbmZvOwogY2xhc3MgSW5saW5lSXRlcmF0b3I7CitjbGFzcyBM
YXlvdXRTdGF0ZU1haW50YWluZXI7CiBjbGFzcyBSZW5kZXJJbmxpbmU7CiAKIHN0cnVjdCBCaWRp
UnVuOwpAQCAtNzAsNyArNzEsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGFkZENoaWxk
KFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSAwKTsK
ICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2hpbGQoUmVuZGVyT2JqZWN0Kik7CiAKLSAgICB2aXJ0
dWFsIHZvaWQgbGF5b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxkcmVuKTsKKyAgICB2aXJ0dWFs
IHZvaWQgbGF5b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxkcmVuLCBpbnQgcGFnZUhlaWdodCA9
IDApOwogCiAgICAgdm9pZCBpbnNlcnRQb3NpdGlvbmVkT2JqZWN0KFJlbmRlckJveCopOwogICAg
IHZvaWQgcmVtb3ZlUG9zaXRpb25lZE9iamVjdChSZW5kZXJCb3gqKTsKQEAgLTg5LDYgKzkwLDcg
QEAgcHVibGljOgogCiAgICAgdm9pZCBtYXJrQWxsRGVzY2VuZGFudHNXaXRoRmxvYXRzRm9yTGF5
b3V0KFJlbmRlckJveCogZmxvYXRUb1JlbW92ZSA9IDAsIGJvb2wgaW5MYXlvdXQgPSB0cnVlKTsK
ICAgICB2b2lkIG1hcmtQb3NpdGlvbmVkT2JqZWN0c0ZvckxheW91dCgpOworICAgIHZvaWQgbWFy
a0Rlc2NlbmRhbnRCbG9ja3NBbmRMaW5lc0ZvckxheW91dChib29sIGluTGF5b3V0ID0gdHJ1ZSk7
CiAKICAgICBib29sIGNvbnRhaW5zRmxvYXRzKCkgeyByZXR1cm4gbV9mbG9hdGluZ09iamVjdHMg
JiYgIW1fZmxvYXRpbmdPYmplY3RzLT5pc0VtcHR5KCk7IH0KICAgICBib29sIGNvbnRhaW5zRmxv
YXQoUmVuZGVyT2JqZWN0Kik7CkBAIC0xNTEsNiArMTUzLDEwIEBAIHB1YmxpYzoKIAogICAgIENv
bHVtbkluZm8qIGNvbHVtbkluZm8oKSBjb25zdDsKICAgICBpbnQgY29sdW1uR2FwKCkgY29uc3Q7
CisgICAgCisgICAgLy8gVGhlc2UgdHdvIGZ1bmN0aW9ucyB0YWtlIHRoZSBDb2x1bW5JbmZvKiB0
byBhdm9pZCByZXBlYXRlZCBsb29rdXBzIG9mIHRoZSBpbmZvIGluIHRoZSBnbG9iYWwgSGFzaE1h
cC4KKyAgICB1bnNpZ25lZCBjb2x1bW5Db3VudChDb2x1bW5JbmZvKikgY29uc3Q7CisgICAgSW50
UmVjdCBjb2x1bW5SZWN0QXQoQ29sdW1uSW5mbyosIHVuc2lnbmVkKSBjb25zdDsKIAogcHJvdGVj
dGVkOgogICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBhcmUgb25seSB1c2VkIGludGVybmFsbHkgdG8g
bWFuaXB1bGF0ZSB0aGUgcmVuZGVyIHRyZWUgc3RydWN0dXJlIHZpYSByZW1vdmUvaW5zZXJ0L2Fw
cGVuZENoaWxkTm9kZS4KQEAgLTE4MSw5ICsxODcsMTEgQEAgcHJvdGVjdGVkOgogICAgIGludCBt
YXhUb3BOZWdNYXJnaW4oKSBjb25zdCB7IHJldHVybiBtX21heE1hcmdpbiA/IG1fbWF4TWFyZ2lu
LT5tX3RvcE5lZyA6IE1heE1hcmdpbjo6dG9wTmVnRGVmYXVsdCh0aGlzKTsgfQogICAgIGludCBt
YXhCb3R0b21Qb3NNYXJnaW4oKSBjb25zdCB7IHJldHVybiBtX21heE1hcmdpbiA/IG1fbWF4TWFy
Z2luLT5tX2JvdHRvbVBvcyA6IE1heE1hcmdpbjo6Ym90dG9tUG9zRGVmYXVsdCh0aGlzKTsgfQog
ICAgIGludCBtYXhCb3R0b21OZWdNYXJnaW4oKSBjb25zdCB7IHJldHVybiBtX21heE1hcmdpbiA/
IG1fbWF4TWFyZ2luLT5tX2JvdHRvbU5lZyA6IE1heE1hcmdpbjo6Ym90dG9tTmVnRGVmYXVsdCh0
aGlzKTsgfQorICAgIGludCBwYWdpbmF0aW9uU3RydXQoKSBjb25zdCB7IHJldHVybiBtX21heE1h
cmdpbiA/IG1fbWF4TWFyZ2luLT5tX3BhZ2luYXRpb25TdHJ1dCA6IDA7IH0KICAgICB2b2lkIHNl
dE1heFRvcE1hcmdpbnMoaW50IHBvcywgaW50IG5lZyk7CiAgICAgdm9pZCBzZXRNYXhCb3R0b21N
YXJnaW5zKGludCBwb3MsIGludCBuZWcpOwotICAgIAorICAgIHZvaWQgc2V0UGFnaW5hdGlvblN0
cnV0KGludCBzdHJ1dCk7CisKICAgICB2b2lkIGluaXRNYXhNYXJnaW5WYWx1ZXMoKQogICAgIHsK
ICAgICAgICAgaWYgKG1fbWF4TWFyZ2luKSB7CkBAIC0xOTEsNiArMTk5LDcgQEAgcHJvdGVjdGVk
OgogICAgICAgICAgICAgbV9tYXhNYXJnaW4tPm1fdG9wTmVnID0gTWF4TWFyZ2luOjp0b3BOZWdE
ZWZhdWx0KHRoaXMpOwogICAgICAgICAgICAgbV9tYXhNYXJnaW4tPm1fYm90dG9tUG9zID0gTWF4
TWFyZ2luOjpib3R0b21Qb3NEZWZhdWx0KHRoaXMpOwogICAgICAgICAgICAgbV9tYXhNYXJnaW4t
Pm1fYm90dG9tTmVnID0gTWF4TWFyZ2luOjpib3R0b21OZWdEZWZhdWx0KHRoaXMpOworICAgICAg
ICAgICAgbV9tYXhNYXJnaW4tPm1fcGFnaW5hdGlvblN0cnV0ID0gMDsKICAgICAgICAgfQogICAg
IH0KIApAQCAtMjk3LDcgKzMwNiw4IEBAIHByaXZhdGU6CiAKICAgICAvLyBUaGUgZm9sbG93aW5n
IGZ1bmN0aW9ucycgaW1wbGVtZW50YXRpb25zIGFyZSBpbiBSZW5kZXJCbG9ja0xpbmVMYXlvdXQu
Y3BwLgogICAgIFJvb3RJbmxpbmVCb3gqIGRldGVybWluZVN0YXJ0UG9zaXRpb24oYm9vbCYgZmly
c3RMaW5lLCBib29sJiBmdWxsTGF5b3V0LCBib29sJiBwcmV2aW91c0xpbmVCcm9rZUNsZWFubHks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmxpbmVCaWRpUmVz
b2x2ZXImLCBWZWN0b3I8RmxvYXRXaXRoUmVjdD4mIGZsb2F0cywgdW5zaWduZWQmIG51bUNsZWFu
RmxvYXRzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElubGlu
ZUJpZGlSZXNvbHZlciYsIFZlY3RvcjxGbG9hdFdpdGhSZWN0PiYgZmxvYXRzLCB1bnNpZ25lZCYg
bnVtQ2xlYW5GbG9hdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBib29sJiB1c2VSZXBhaW50Qm91bmRzLCBpbnQmIHJlcGFpbnRUb3AsIGludCYgcmVwYWludEJv
dHRvbSk7CiAgICAgUm9vdElubGluZUJveCogZGV0ZXJtaW5lRW5kUG9zaXRpb24oUm9vdElubGlu
ZUJveCogc3RhcnRCb3gsIElubGluZUl0ZXJhdG9yJiBjbGVhbkxpbmVTdGFydCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWRpU3RhdHVzJiBjbGVhbkxpbmVCaWRp
U3RhdHVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCYgeVBv
cyk7CkBAIC00MTYsOCArNDI2LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIG9mZnNldEZvckNvbnRl
bnRzKGludCYgdHgsIGludCYgdHkpIGNvbnN0OwogCiAgICAgdm9pZCBjYWxjQ29sdW1uV2lkdGgo
KTsKLSAgICBpbnQgbGF5b3V0Q29sdW1ucyhpbnQgZW5kT2ZDb250ZW50ID0gLTEsIGludCByZXF1
ZXN0ZWRDb2x1bW5IZWlnaHQgPSAtMSk7Ci0gICAgaW50IHZpc2libGVUb3BPZkhpZ2hlc3RGbG9h
dEV4dGVuZGluZ0JlbG93KGludCBib3R0b20sIGludCBtYXhIZWlnaHQpIGNvbnN0OworICAgIGJv
b2wgbGF5b3V0Q29sdW1ucyhib29sIGhhc1NwZWNpZmllZFBhZ2VIZWlnaHQsIGludCBwYWdlSGVp
Z2h0LCBMYXlvdXRTdGF0ZU1haW50YWluZXImKTsKICAgICB2b2lkIG1ha2VDaGlsZHJlbkFub255
bW91c0NvbHVtbkJsb2NrcyhSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkLCBSZW5kZXJCbG9jayog
bmV3QmxvY2tCb3gsIFJlbmRlck9iamVjdCogbmV3Q2hpbGQpOwogCiAgICAgYm9vbCBleHBhbmRz
VG9FbmNsb3NlT3ZlcmhhbmdpbmdGbG9hdHMoKSBjb25zdDsKQEAgLTUzOSw2ICs1NDgsMTMgQEAg
cHJpdmF0ZToKICAgICB2b2lkIHNldENvbGxhcHNlZEJvdHRvbU1hcmdpbihjb25zdCBNYXJnaW5J
bmZvJik7CiAgICAgLy8gRW5kIGhlbHBlciBmdW5jdGlvbnMgYW5kIHN0cnVjdHMgdXNlZCBieSBs
YXlvdXRCbG9ja0NoaWxkcmVuLgogCisgICAgLy8gUGFnaW5hdGlvbiByb3V0aW5lcy4KKyAgICBp
bnQgbmV4dFBhZ2VUb3AoaW50IHlQb3MpIGNvbnN0OyAvLyBSZXR1cm5zIHRoZSB0b3Agb2YgdGhl
IG5leHQgcGFnZSBmb2xsb3dpbmcgeVBvcy4KKyAgICBpbnQgYXBwbHlCZWZvcmVCcmVhayhSZW5k
ZXJCb3gqIGNoaWxkLCBpbnQgeVBvcyk7IC8vIElmIHRoZSBjaGlsZCBoYXMgYSBiZWZvcmUgYnJl
YWssIHRoZW4gcmV0dXJuIGEgbmV3IHlQb3MgdGhhdCBzaGlmdHMgdG8gdGhlIHRvcCBvZiB0aGUg
bmV4dCBwYWdlL2NvbHVtbi4KKyAgICBpbnQgYXBwbHlBZnRlckJyZWFrKFJlbmRlckJveCogY2hp
bGQsIGludCB5UG9zLCBNYXJnaW5JbmZvJiBtYXJnaW5JbmZvKTsgLy8gSWYgdGhlIGNoaWxkIGhh
cyBhbiBhZnRlciBicmVhaywgdGhlbiByZXR1cm4gYSBuZXcgeVBvcyB0aGF0IHNoaWZ0cyB0byB0
aGUgdG9wIG9mIHRoZSBuZXh0IHBhZ2UvY29sdW1uLgorICAgIGludCBhZGp1c3RGb3JVbnNwbGl0
dGFibGVDaGlsZChSZW5kZXJCb3gqIGNoaWxkLCBpbnQgeVBvcyk7IC8vIElmIHRoZSBjaGlsZCBp
cyB1bnNwbGl0dGFibGUgYW5kIGNhbid0IGZpdCBvbiB0aGUgY3VycmVudCBwYWdlLCByZXR1cm4g
dGhlIHRvcCBvZiB0aGUgbmV4dCBwYWdlL2NvbHVtbi4KKyAgICB2b2lkIGFkanVzdExpbmVQb3Np
dGlvbkZvclBhZ2luYXRpb24oUm9vdElubGluZUJveCosIGludCYgZGVsdGFZKTsgLy8gQ29tcHV0
ZXMgYSBkZWx0YVkgdmFsdWUgdGhhdCBwdXQgYSBsaW5lIGF0IHRoZSB0b3Agb2YgdGhlIG5leHQg
cGFnZSBpZiBpdCBkb2Vzbid0IGZpdCBvbiB0aGUgY3VycmVudCBwYWdlLgorCiAgICAgdHlwZWRl
ZiBQb3NpdGlvbmVkT2JqZWN0c0xpc3RIYXNoU2V0Ojpjb25zdF9pdGVyYXRvciBJdGVyYXRvcjsK
ICAgICBEZXByZWNhdGVkUHRyTGlzdDxGbG9hdGluZ09iamVjdD4qIG1fZmxvYXRpbmdPYmplY3Rz
OwogICAgIApAQCAtNTU3LDYgKzU3Myw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAsIG1fdG9w
TmVnKHRvcE5lZ0RlZmF1bHQobykpCiAgICAgICAgICAgICAsIG1fYm90dG9tUG9zKGJvdHRvbVBv
c0RlZmF1bHQobykpCiAgICAgICAgICAgICAsIG1fYm90dG9tTmVnKGJvdHRvbU5lZ0RlZmF1bHQo
bykpCisgICAgICAgICAgICAsIG1fcGFnaW5hdGlvblN0cnV0KDApCiAgICAgICAgIHsgCiAgICAg
ICAgIH0KIApAQCAtNTY0LDExICs1ODEsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgc3RhdGljIGlu
dCB0b3BOZWdEZWZhdWx0KGNvbnN0IFJlbmRlckJsb2NrKiBvKSB7IHJldHVybiBvLT5tYXJnaW5U
b3AoKSA8IDAgPyAtby0+bWFyZ2luVG9wKCkgOiAwOyB9CiAgICAgICAgIHN0YXRpYyBpbnQgYm90
dG9tUG9zRGVmYXVsdChjb25zdCBSZW5kZXJCbG9jayogbykgeyByZXR1cm4gby0+bWFyZ2luQm90
dG9tKCkgPiAwID8gby0+bWFyZ2luQm90dG9tKCkgOiAwOyB9CiAgICAgICAgIHN0YXRpYyBpbnQg
Ym90dG9tTmVnRGVmYXVsdChjb25zdCBSZW5kZXJCbG9jayogbykgeyByZXR1cm4gby0+bWFyZ2lu
Qm90dG9tKCkgPCAwID8gLW8tPm1hcmdpbkJvdHRvbSgpIDogMDsgfQotCisgICAgICAgIAogICAg
ICAgICBpbnQgbV90b3BQb3M7CiAgICAgICAgIGludCBtX3RvcE5lZzsKICAgICAgICAgaW50IG1f
Ym90dG9tUG9zOwogICAgICAgICBpbnQgbV9ib3R0b21OZWc7CisgICAgICAgIGludCBtX3BhZ2lu
YXRpb25TdHJ1dDsKICAgICAgfTsKIAogICAgIE1heE1hcmdpbiogbV9tYXhNYXJnaW47CkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAJKHJldmlzaW9u
IDY2ODg2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgi
CiAjaW5jbHVkZSAiUmVuZGVyTGlzdE1hcmtlci5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIK
KyNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlRyYWlsaW5nRmxvYXRzUm9vdElubGlu
ZUJveC5oIgogI2luY2x1ZGUgImJyZWFrX2xpbmVzLmgiCiAjaW5jbHVkZSA8d3RmL0Fsd2F5c0lu
bGluZS5oPgpAQCAtNTcwLDEyICs1NzEsMTEgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0SW5s
aW5lQ2hpbGRyZW4oYgogICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKG8tPmlzUG9z
aXRpb25lZCgpKQogICAgICAgICAgICAgICAgICAgICBvLT5jb250YWluaW5nQmxvY2soKS0+aW5z
ZXJ0UG9zaXRpb25lZE9iamVjdChib3gpOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICBpZiAoby0+aXNGbG9hdGluZygpKQotICAgICAgICAgICAgICAgICAgICAg
ICAgZmxvYXRzLmFwcGVuZChGbG9hdFdpdGhSZWN0KGJveCkpOwotICAgICAgICAgICAgICAgICAg
ICBlbHNlIGlmIChmdWxsTGF5b3V0IHx8IG8tPm5lZWRzTGF5b3V0KCkpIC8vIFJlcGxhY2VkIGVs
ZW1lbnRzCi0gICAgICAgICAgICAgICAgICAgICAgICB0b1JlbmRlckJveChvKS0+ZGlydHlMaW5l
Qm94ZXMoZnVsbExheW91dCk7Ci0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChvLT5pc0Zsb2F0
aW5nKCkpCisgICAgICAgICAgICAgICAgICAgIGZsb2F0cy5hcHBlbmQoRmxvYXRXaXRoUmVjdChi
b3gpKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChmdWxsTGF5b3V0IHx8IG8tPm5lZWRzTGF5
b3V0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gUmVwbGFjZWQgZWxlbWVudHMKKyAgICAg
ICAgICAgICAgICAgICAgdG9SZW5kZXJCb3gobyktPmRpcnR5TGluZUJveGVzKGZ1bGxMYXlvdXQp
OwogICAgICAgICAgICAgICAgICAgICBvLT5sYXlvdXRJZk5lZWRlZCgpOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0gZWxzZSBpZiAoby0+aXNUZXh0KCkgfHwgKG8tPmlzUmVuZGVy
SW5saW5lKCkgJiYgIWVuZE9mSW5saW5lKSkgewpAQCAtNTk0LDcgKzU5NCw4IEBAIHZvaWQgUmVu
ZGVyQmxvY2s6OmxheW91dElubGluZUNoaWxkcmVuKGIKICAgICAgICAgdW5zaWduZWQgZmxvYXRJ
bmRleDsKICAgICAgICAgYm9vbCBmaXJzdExpbmUgPSB0cnVlOwogICAgICAgICBib29sIHByZXZp
b3VzTGluZUJyb2tlQ2xlYW5seSA9IHRydWU7Ci0gICAgICAgIFJvb3RJbmxpbmVCb3gqIHN0YXJ0
TGluZSA9IGRldGVybWluZVN0YXJ0UG9zaXRpb24oZmlyc3RMaW5lLCBmdWxsTGF5b3V0LCBwcmV2
aW91c0xpbmVCcm9rZUNsZWFubHksIHJlc29sdmVyLCBmbG9hdHMsIGZsb2F0SW5kZXgpOworICAg
ICAgICBSb290SW5saW5lQm94KiBzdGFydExpbmUgPSBkZXRlcm1pbmVTdGFydFBvc2l0aW9uKGZp
cnN0TGluZSwgZnVsbExheW91dCwgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5LCByZXNvbHZlciwg
ZmxvYXRzLCBmbG9hdEluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVzZVJlcGFpbnRCb3VuZHMsIHJlcGFpbnRUb3AsIHJlcGFp
bnRCb3R0b20pOwogCiAgICAgICAgIGlmIChmdWxsTGF5b3V0ICYmIGhhc0lubGluZUNoaWxkICYm
ICFzZWxmTmVlZHNMYXlvdXQoKSkgewogICAgICAgICAgICAgc2V0TmVlZHNMYXlvdXQodHJ1ZSwg
ZmFsc2UpOyAgLy8gTWFyayBvdXJzZWx2ZXMgYXMgbmVlZGluZyBhIGZ1bGwgbGF5b3V0LiBUaGlz
IHdheSB3ZSdsbCByZXBhaW50IGxpa2UKQEAgLTYyMiw5ICs2MjMsMTEgQEAgdm9pZCBSZW5kZXJC
bG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4oYgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMCA6IGRldGVybWluZUVuZFBvc2l0aW9uKHN0YXJ0TGluZSwgY2xlYW5MaW5lU3RhcnQs
IGNsZWFuTGluZUJpZGlTdGF0dXMsIGVuZExpbmVZUG9zKTsKIAogICAgICAgICBpZiAoc3RhcnRM
aW5lKSB7Ci0gICAgICAgICAgICB1c2VSZXBhaW50Qm91bmRzID0gdHJ1ZTsKLSAgICAgICAgICAg
IHJlcGFpbnRUb3AgPSBoZWlnaHQoKTsKLSAgICAgICAgICAgIHJlcGFpbnRCb3R0b20gPSBoZWln
aHQoKTsKKyAgICAgICAgICAgIGlmICghdXNlUmVwYWludEJvdW5kcykgeworICAgICAgICAgICAg
ICAgIHVzZVJlcGFpbnRCb3VuZHMgPSB0cnVlOworICAgICAgICAgICAgICAgIHJlcGFpbnRUb3Ag
PSBoZWlnaHQoKTsKKyAgICAgICAgICAgICAgICByZXBhaW50Qm90dG9tID0gaGVpZ2h0KCk7Cisg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBSZW5kZXJBcmVuYSogYXJlbmEgPSByZW5kZXJBcmVu
YSgpOwogICAgICAgICAgICAgUm9vdElubGluZUJveCogYm94ID0gc3RhcnRMaW5lOwogICAgICAg
ICAgICAgd2hpbGUgKGJveCkgewpAQCAtNjU5LDYgKzY2Miw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6
OmxheW91dElubGluZUNoaWxkcmVuKGIKICAgICAgICAgYm9vbCBjaGVja0ZvckZsb2F0c0Zyb21M
YXN0TGluZSA9IGZhbHNlOwogCiAgICAgICAgIGJvb2wgaXNMaW5lRW1wdHkgPSB0cnVlOworICAg
ICAgICBib29sIHBhZ2luYXRlZCA9IHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+cGFnaW5hdGVkKCk7
CiAKICAgICAgICAgd2hpbGUgKCFlbmQuYXRFbmQoKSkgewogICAgICAgICAgICAgLy8gRklYTUU6
IElzIHRoaXMgY2hlY2sgbmVjZXNzYXJ5IGJlZm9yZSB0aGUgZmlyc3QgaXRlcmF0aW9uIG9yIGNh
biBpdCBiZSBtb3ZlZCB0byB0aGUgZW5kPwpAQCAtNzg2LDYgKzc5MCwxNyBAQCB2b2lkIFJlbmRl
ckJsb2NrOjpsYXlvdXRJbmxpbmVDaGlsZHJlbihiCiAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXBhaW50VG9wID0gbWluKHJlcGFpbnRUb3AsIGxpbmVCb3gtPnRvcFZpc2libGVPdmVyZmxvdygp
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGFpbnRCb3R0b20gPSBtYXgocmVwYWludEJv
dHRvbSwgbGluZUJveC0+Ym90dG9tVmlzaWJsZU92ZXJmbG93KCkpOwogICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAocGFn
aW5hdGVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWRqdXN0bWVudCA9IDA7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBhZGp1c3RMaW5lUG9zaXRpb25Gb3JQYWdpbmF0aW9uKGxp
bmVCb3gsIGFkanVzdG1lbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFkanVzdG1l
bnQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lQm94LT5hZGp1c3RQb3NpdGlv
bigwLCBhZGp1c3RtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodXNlUmVw
YWludEJvdW5kcykgLy8gVGhpcyBjYW4gb25seSBiZSBhIHBvc2l0aXZlIGFkanVzdG1lbnQsIHNv
IG5vIG5lZWQgdG8gdXBkYXRlIHJlcGFpbnRUb3AuCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlcGFpbnRCb3R0b20gPSBtYXgocmVwYWludEJvdHRvbSwgbGluZUJveC0+Ym90dG9t
VmlzaWJsZU92ZXJmbG93KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEhlaWdo
dChsaW5lQm94LT5ibG9ja0hlaWdodCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAg
IGZpcnN0TGluZSA9IGZhbHNlOwpAQCAtODIwLDYgKzgzNSw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6
OmxheW91dElubGluZUNoaWxkcmVuKGIKICAgICAgICAgICAgICAgICBpbnQgZGVsdGEgPSBoZWln
aHQoKSAtIGVuZExpbmVZUG9zOwogICAgICAgICAgICAgICAgIGZvciAoUm9vdElubGluZUJveCog
bGluZSA9IGVuZExpbmU7IGxpbmU7IGxpbmUgPSBsaW5lLT5uZXh0Um9vdEJveCgpKSB7CiAgICAg
ICAgICAgICAgICAgICAgIGxpbmUtPmF0dGFjaExpbmUoKTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHBhZ2luYXRlZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkanVzdExpbmVQb3NpdGlv
bkZvclBhZ2luYXRpb24obGluZSwgZGVsdGEpOwogICAgICAgICAgICAgICAgICAgICBpZiAoZGVs
dGEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGFpbnRUb3AgPSBtaW4ocmVwYWludFRv
cCwgbGluZS0+dG9wVmlzaWJsZU92ZXJmbG93KCkgKyBtaW4oZGVsdGEsIDApKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlcGFpbnRCb3R0b20gPSBtYXgocmVwYWludEJvdHRvbSwgbGluZS0+
Ym90dG9tVmlzaWJsZU92ZXJmbG93KCkgKyBtYXgoZGVsdGEsIDApKTsKQEAgLTkwMCw3ICs5MTcs
OCBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVDaGlsZHJlbihiCiB9CiAKIFJvb3RJ
bmxpbmVCb3gqIFJlbmRlckJsb2NrOjpkZXRlcm1pbmVTdGFydFBvc2l0aW9uKGJvb2wmIGZpcnN0
TGluZSwgYm9vbCYgZnVsbExheW91dCwgYm9vbCYgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5LCAK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElubGlu
ZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIsIFZlY3RvcjxGbG9hdFdpdGhSZWN0PiYgZmxvYXRzLCB1
bnNpZ25lZCYgbnVtQ2xlYW5GbG9hdHMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sdmVyLCBWZWN0b3I8
RmxvYXRXaXRoUmVjdD4mIGZsb2F0cywgdW5zaWduZWQmIG51bUNsZWFuRmxvYXRzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCYgdXNlUmVw
YWludEJvdW5kcywgaW50JiByZXBhaW50VG9wLCBpbnQmIHJlcGFpbnRCb3R0b20pCiB7CiAgICAg
Um9vdElubGluZUJveCogY3VyciA9IDA7CiAgICAgUm9vdElubGluZUJveCogbGFzdCA9IDA7CkBA
IC05MTMsNyArOTMxLDggQEAgUm9vdElubGluZUJveCogUmVuZGVyQmxvY2s6OmRldGVybWluZVN0
YQogICAgICAgICAgICAgICAgIFZlY3RvcjxSZW5kZXJCb3gqPjo6aXRlcmF0b3IgZW5kID0gY2xl
YW5MaW5lRmxvYXRzLT5lbmQoKTsKICAgICAgICAgICAgICAgICBmb3IgKFZlY3RvcjxSZW5kZXJC
b3gqPjo6aXRlcmF0b3IgbyA9IGNsZWFuTGluZUZsb2F0cy0+YmVnaW4oKTsgbyAhPSBlbmQ7ICsr
bykgewogICAgICAgICAgICAgICAgICAgICBSZW5kZXJCb3gqIGYgPSAqbzsKLSAgICAgICAgICAg
ICAgICAgICAgSW50U2l6ZSBuZXdTaXplKGYtPndpZHRoKCkgKyBmLT5tYXJnaW5MZWZ0KCkgK2Yt
Pm1hcmdpblJpZ2h0KCksIGYtPmhlaWdodCgpICsgZi0+bWFyZ2luVG9wKCkgKyBmLT5tYXJnaW5C
b3R0b20oKSk7CisgICAgICAgICAgICAgICAgICAgIGYtPmxheW91dElmTmVlZGVkKCk7CisgICAg
ICAgICAgICAgICAgICAgIEludFNpemUgbmV3U2l6ZShmLT53aWR0aCgpICsgZi0+bWFyZ2luTGVm
dCgpICsgZi0+bWFyZ2luUmlnaHQoKSwgZi0+aGVpZ2h0KCkgKyBmLT5tYXJnaW5Ub3AoKSArIGYt
Pm1hcmdpbkJvdHRvbSgpKTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGZsb2F0SW5kZXgg
PCBmbG9hdHMuc2l6ZSgpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGZsb2F0c1tmbG9hdElu
ZGV4XS5vYmplY3QgIT0gZikgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gQSBuZXcgZmxv
YXQgaGFzIGJlZW4gaW5zZXJ0ZWQgYmVmb3JlIHRoaXMgbGluZSBvciBiZWZvcmUgaXRzIGxhc3Qg
a25vd24gZmxvYXQuCkBAIC05NzIsNiArOTkxLDIyIEBAIFJvb3RJbmxpbmVCb3gqIFJlbmRlckJs
b2NrOjpkZXRlcm1pbmVTdGEKICAgICAgICAgbGFzdCA9IGN1cnIgPyBjdXJyLT5wcmV2Um9vdEJv
eCgpIDogbGFzdFJvb3RCb3goKTsKICAgICB9CiAKKyAgICAvLyBQYWdpbmF0ZSBhbGwgb2YgdGhl
IGNsZWFuIGxpbmVzLgorICAgIGJvb2wgcGFnaW5hdGVkID0gdmlldygpLT5sYXlvdXRTdGF0ZSgp
LT5wYWdpbmF0ZWQoKTsKKyAgICBpZiAocGFnaW5hdGVkKSB7CisgICAgICAgIGludCBkZWx0YSA9
IDA7CisgICAgICAgIGZvciAoUm9vdElubGluZUJveCogbGluZUJveCA9IGZpcnN0Um9vdEJveCgp
OyBsaW5lQm94ICE9IGN1cnI7IGxpbmVCb3ggPSBsaW5lQm94LT5uZXh0Um9vdEJveCgpKSB7Cisg
ICAgICAgICAgICBhZGp1c3RMaW5lUG9zaXRpb25Gb3JQYWdpbmF0aW9uKGxpbmVCb3gsIGRlbHRh
KTsKKyAgICAgICAgICAgIGlmIChkZWx0YSkgeworICAgICAgICAgICAgICAgIGxpbmVCb3gtPmFk
anVzdFBvc2l0aW9uKDAsIGRlbHRhKTsKKyAgICAgICAgICAgICAgICBpZiAoIXVzZVJlcGFpbnRC
b3VuZHMpCisgICAgICAgICAgICAgICAgICAgIHVzZVJlcGFpbnRCb3VuZHMgPSB0cnVlOworICAg
ICAgICAgICAgICAgIHJlcGFpbnRUb3AgPSBtaW4ocmVwYWludFRvcCwgbGluZUJveC0+dG9wVmlz
aWJsZU92ZXJmbG93KCkpOworICAgICAgICAgICAgICAgIHJlcGFpbnRCb3R0b20gPSBtYXgocmVw
YWludEJvdHRvbSwgbGluZUJveC0+Ym90dG9tVmlzaWJsZU92ZXJmbG93KCkgKyBkZWx0YSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKICAgICBudW1DbGVhbkZsb2F0cyA9IDA7
CiAgICAgaWYgKCFmbG9hdHMuaXNFbXB0eSgpKSB7CiAgICAgICAgIGludCBzYXZlZEhlaWdodCA9
IGhlaWdodCgpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCShyZXZpc2lvbiA2Njg4NikK
KysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3
Myw3ICs5NzMsNyBAQCB2b2lkIFJlbmRlckJveDo6bWFwTG9jYWxUb0NvbnRhaW5lcihSZW5kCiAg
ICAgaWYgKFJlbmRlclZpZXcqIHYgPSB2aWV3KCkpIHsKICAgICAgICAgaWYgKHYtPmxheW91dFN0
YXRlRW5hYmxlZCgpICYmICFyZXBhaW50Q29udGFpbmVyKSB7CiAgICAgICAgICAgICBMYXlvdXRT
dGF0ZSogbGF5b3V0U3RhdGUgPSB2LT5sYXlvdXRTdGF0ZSgpOwotICAgICAgICAgICAgSW50U2l6
ZSBvZmZzZXQgPSBsYXlvdXRTdGF0ZS0+bV9vZmZzZXQ7CisgICAgICAgICAgICBJbnRTaXplIG9m
ZnNldCA9IGxheW91dFN0YXRlLT5tX3BhaW50T2Zmc2V0OwogICAgICAgICAgICAgb2Zmc2V0LmV4
cGFuZCh4KCksIHkoKSk7CiAgICAgICAgICAgICBpZiAoc3R5bGUoKS0+cG9zaXRpb24oKSA9PSBS
ZWxhdGl2ZVBvc2l0aW9uICYmIGxheWVyKCkpCiAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IGxh
eWVyKCktPnJlbGF0aXZlUG9zaXRpb25PZmZzZXQoKTsKQEAgLTExNzAsNyArMTE3MCw3IEBAIHZv
aWQgUmVuZGVyQm94Ojpjb21wdXRlUmVjdEZvclJlcGFpbnQoUmUKICAgICAgICAgICAgICAgICBy
ZWN0Lm1vdmUobGF5ZXIoKS0+cmVsYXRpdmVQb3NpdGlvbk9mZnNldCgpKTsKIAogICAgICAgICAg
ICAgcmVjdC5tb3ZlKHgoKSwgeSgpKTsKLSAgICAgICAgICAgIHJlY3QubW92ZShsYXlvdXRTdGF0
ZS0+bV9vZmZzZXQpOworICAgICAgICAgICAgcmVjdC5tb3ZlKGxheW91dFN0YXRlLT5tX3BhaW50
T2Zmc2V0KTsKICAgICAgICAgICAgIGlmIChsYXlvdXRTdGF0ZS0+bV9jbGlwcGVkKQogICAgICAg
ICAgICAgICAgIHJlY3QuaW50ZXJzZWN0KGxheW91dFN0YXRlLT5tX2NsaXBSZWN0KTsKICAgICAg
ICAgICAgIHJldHVybjsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5j
cHAJKHJldmlzaW9uIDY2ODg2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVC
b3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDEsNyArMjAxLDcgQEAgdm9pZCBSZW5kZXJGbGV4
aWJsZUJveDo6Y2FsY1ByZWZXaWR0aHMoKQogICAgIHNldFByZWZXaWR0aHNEaXJ0eShmYWxzZSk7
CiB9CiAKLXZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRD
aGlsZHJlbikKK3ZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmxheW91dEJsb2NrKGJvb2wgcmVsYXlv
dXRDaGlsZHJlbiwgaW50IC8qcGFnZUhlaWdodCBGSVhNRTogSW1wbGVtZW50ICovKQogewogICAg
IEFTU0VSVChuZWVkc0xheW91dCgpKTsKIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
RmxleGlibGVCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4
aWJsZUJveC5oCShyZXZpc2lvbiA2Njg4NikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZs
ZXhpYmxlQm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgcHVibGljOgogICAg
IHZvaWQgY2FsY0hvcml6b250YWxQcmVmV2lkdGhzKCk7CiAgICAgdm9pZCBjYWxjVmVydGljYWxQ
cmVmV2lkdGhzKCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0QmxvY2soYm9vbCByZWxheW91
dENoaWxkcmVuKTsKKyAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0QmxvY2soYm9vbCByZWxheW91dENo
aWxkcmVuLCBpbnQgcGFnZUhlaWdodCk7CiAgICAgdm9pZCBsYXlvdXRIb3Jpem9udGFsQm94KGJv
b2wgcmVsYXlvdXRDaGlsZHJlbik7CiAgICAgdm9pZCBsYXlvdXRWZXJ0aWNhbEJveChib29sIHJl
bGF5b3V0Q2hpbGRyZW4pOwogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAJKHJl
dmlzaW9uIDY2ODg2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjQ3LDcgKzY0Nyw3IEBAIHZvaWQgUmVuZGVySW5saW5lOjpjb21wdXRl
UmVjdEZvclJlcGFpbnQKICAgICAgICAgICAgIExheW91dFN0YXRlKiBsYXlvdXRTdGF0ZSA9IHYt
PmxheW91dFN0YXRlKCk7CiAgICAgICAgICAgICBpZiAoc3R5bGUoKS0+cG9zaXRpb24oKSA9PSBS
ZWxhdGl2ZVBvc2l0aW9uICYmIGxheWVyKCkpCiAgICAgICAgICAgICAgICAgcmVjdC5tb3ZlKGxh
eWVyKCktPnJlbGF0aXZlUG9zaXRpb25PZmZzZXQoKSk7Ci0gICAgICAgICAgICByZWN0Lm1vdmUo
bGF5b3V0U3RhdGUtPm1fb2Zmc2V0KTsKKyAgICAgICAgICAgIHJlY3QubW92ZShsYXlvdXRTdGF0
ZS0+bV9wYWludE9mZnNldCk7CiAgICAgICAgICAgICBpZiAobGF5b3V0U3RhdGUtPm1fY2xpcHBl
ZCkKICAgICAgICAgICAgICAgICByZWN0LmludGVyc2VjdChsYXlvdXRTdGF0ZS0+bV9jbGlwUmVj
dCk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC03MzQsNyArNzM0LDcgQEAgdm9pZCBSZW5kZXJJ
bmxpbmU6Om1hcExvY2FsVG9Db250YWluZXIoUgogICAgIGlmIChSZW5kZXJWaWV3ICp2ID0gdmll
dygpKSB7CiAgICAgICAgIGlmICh2LT5sYXlvdXRTdGF0ZUVuYWJsZWQoKSAmJiAhcmVwYWludENv
bnRhaW5lcikgewogICAgICAgICAgICAgTGF5b3V0U3RhdGUqIGxheW91dFN0YXRlID0gdi0+bGF5
b3V0U3RhdGUoKTsKLSAgICAgICAgICAgIEludFNpemUgb2Zmc2V0ID0gbGF5b3V0U3RhdGUtPm1f
b2Zmc2V0OworICAgICAgICAgICAgSW50U2l6ZSBvZmZzZXQgPSBsYXlvdXRTdGF0ZS0+bV9wYWlu
dE9mZnNldDsKICAgICAgICAgICAgIGlmIChzdHlsZSgpLT5wb3NpdGlvbigpID09IFJlbGF0aXZl
UG9zaXRpb24gJiYgbGF5ZXIoKSkKICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gbGF5ZXIoKS0+
cmVsYXRpdmVQb3NpdGlvbk9mZnNldCgpOwogICAgICAgICAgICAgdHJhbnNmb3JtU3RhdGUubW92
ZShvZmZzZXQpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24gNjY5
MDMpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI1NDEsMTEgKzI1NDEsMTEgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRDaGlsZExheWVy
SW50b0NvbAogICAgIGNvbHVtbkJsb2NrLT5sYXllcigpLT5jb252ZXJ0VG9MYXllckNvb3Jkcyhy
b290TGF5ZXIsIGxheWVyWCwgbGF5ZXJZKTsKICAgICAKICAgICBDb2x1bW5JbmZvKiBjb2xJbmZv
ID0gY29sdW1uQmxvY2stPmNvbHVtbkluZm8oKTsKLSAgICB1bnNpZ25lZCBjb2xDb3VudCA9IGNv
bEluZm8tPmNvbHVtbkNvdW50KCk7CisgICAgdW5zaWduZWQgY29sQ291bnQgPSBjb2x1bW5CbG9j
ay0+Y29sdW1uQ291bnQoY29sSW5mbyk7CiAgICAgaW50IGN1cnJZT2Zmc2V0ID0gMDsKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY29sQ291bnQ7IGkrKykgewogICAgICAgICAvLyBGb3Ig
ZWFjaCByZWN0LCB3ZSBjbGlwIHRvIHRoZSByZWN0LCBhbmQgdGhlbiB3ZSBhZGp1c3Qgb3VyIGNv
b3Jkcy4KLSAgICAgICAgSW50UmVjdCBjb2xSZWN0ID0gY29sSW5mby0+Y29sdW1uUmVjdEF0KGkp
OworICAgICAgICBJbnRSZWN0IGNvbFJlY3QgPSBjb2x1bW5CbG9jay0+Y29sdW1uUmVjdEF0KGNv
bEluZm8sIGkpOwogICAgICAgICBpbnQgY3VyclhPZmZzZXQgPSBjb2xSZWN0LngoKSAtIChjb2x1
bW5CbG9jay0+Ym9yZGVyTGVmdCgpICsgY29sdW1uQmxvY2stPnBhZGRpbmdMZWZ0KCkpOwogICAg
ICAgICBjb2xSZWN0Lm1vdmUobGF5ZXJYLCBsYXllclkpOwogCkBAIC0zMDA3LDE3ICszMDA3LDE3
IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdENoaWxkTGEKICAgICBjb2x1bW5C
bG9jay0+bGF5ZXIoKS0+Y29udmVydFRvTGF5ZXJDb29yZHMocm9vdExheWVyLCBsYXllclgsIGxh
eWVyWSk7CiAgICAgCiAgICAgQ29sdW1uSW5mbyogY29sSW5mbyA9IGNvbHVtbkJsb2NrLT5jb2x1
bW5JbmZvKCk7Ci0gICAgaW50IGNvbENvdW50ID0gY29sSW5mby0+Y29sdW1uQ291bnQoKTsKKyAg
ICBpbnQgY29sQ291bnQgPSBjb2x1bW5CbG9jay0+Y29sdW1uQ291bnQoY29sSW5mbyk7CiAgICAg
CiAgICAgLy8gV2UgaGF2ZSB0byBnbyBiYWNrd2FyZHMgZnJvbSB0aGUgbGFzdCBjb2x1bW4gdG8g
dGhlIGZpcnN0LgogICAgIGludCBsZWZ0ID0gY29sdW1uQmxvY2stPmJvcmRlckxlZnQoKSArIGNv
bHVtbkJsb2NrLT5wYWRkaW5nTGVmdCgpOwogICAgIGludCBjdXJyWU9mZnNldCA9IDA7CiAgICAg
aW50IGk7CiAgICAgZm9yIChpID0gMDsgaSA8IGNvbENvdW50OyBpKyspCi0gICAgICAgIGN1cnJZ
T2Zmc2V0IC09IGNvbEluZm8tPmNvbHVtblJlY3RBdChpKS5oZWlnaHQoKTsKKyAgICAgICAgY3Vy
cllPZmZzZXQgLT0gY29sdW1uQmxvY2stPmNvbHVtblJlY3RBdChjb2xJbmZvLCBpKS5oZWlnaHQo
KTsKICAgICBmb3IgKGkgPSBjb2xDb3VudCAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAgICAgIC8v
IEZvciBlYWNoIHJlY3QsIHdlIGNsaXAgdG8gdGhlIHJlY3QsIGFuZCB0aGVuIHdlIGFkanVzdCBv
dXIgY29vcmRzLgotICAgICAgICBJbnRSZWN0IGNvbFJlY3QgPSBjb2xJbmZvLT5jb2x1bW5SZWN0
QXQoaSk7CisgICAgICAgIEludFJlY3QgY29sUmVjdCA9IGNvbHVtbkJsb2NrLT5jb2x1bW5SZWN0
QXQoY29sSW5mbywgaSk7CiAgICAgICAgIGludCBjdXJyWE9mZnNldCA9IGNvbFJlY3QueCgpIC0g
bGVmdDsKICAgICAgICAgY3VycllPZmZzZXQgKz0gY29sUmVjdC5oZWlnaHQoKTsKICAgICAgICAg
Y29sUmVjdC5tb3ZlKGxheWVyWCwgbGF5ZXJZKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxpbmVCb3hMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMaW5lQm94TGlzdC5jcHAJKHJldmlzaW9uIDY2ODg2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGluZUJveExpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw2IEBACiAj
aW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1
ZGUgIlJvb3RJbmxpbmVCb3guaCIKLSNpbmNsdWRlICJTZXR0aW5ncy5oIiAvLyBGSVhNRTogVGhp
cyBpbmNsdWRlIGNhbiBiZSByZW1vdmVkIHdoZW4gcGFnaW5hdGVEdXJpbmdMYXlvdXRFbmFibGVk
IGlzIHRha2VuIG91dC4KIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIApAQCAtMTYxLDcgKzE2MCw3
IEBAIHZvaWQgUmVuZGVyTGluZUJveExpc3Q6OnBhaW50KFJlbmRlckJveE0KICAgICAgICAgcmV0
dXJuOwogCiAgICAgUmVuZGVyVmlldyogdiA9IHJlbmRlcmVyLT52aWV3KCk7Ci0gICAgYm9vbCB1
c2VQcmludFJlY3QgPSAhdi0+cHJpbnRSZWN0KCkuaXNFbXB0eSgpICYmICFyZW5kZXJlci0+ZG9j
dW1lbnQoKS0+c2V0dGluZ3MoKS0+cGFnaW5hdGVEdXJpbmdMYXlvdXRFbmFibGVkKCk7CisgICAg
Ym9vbCB1c2VQcmludFJlY3QgPSAhdi0+cHJpbnRSZWN0KCkuaXNFbXB0eSgpOwogICAgIAogICAg
IC8vIFdlIGNhbiBjaGVjayB0aGUgZmlyc3QgYm94IGFuZCBsYXN0IGJveCBhbmQgYXZvaWQgcGFp
bnRpbmcgaWYgd2UgZG9uJ3QKICAgICAvLyBpbnRlcnNlY3QuICBUaGlzIGlzIGEgcXVpY2sgc2hv
cnQtY2lyY3VpdCB0aGF0IHdlIGNhbiB0YWtlIHRvIGF2b2lkIHdhbGtpbmcgYW55IGxpbmVzLgpA
QCAtMjE1LDcgKzIxNCw2IEBAIHZvaWQgUmVuZGVyTGluZUJveExpc3Q6OnBhaW50KFJlbmRlckJv
eE0KICAgICAgICAgaW50IGJvdHRvbSA9IGN1cnItPmJvdHRvbVZpc2libGVPdmVyZmxvdygpICsg
cmVuZGVyZXItPm1heGltYWxPdXRsaW5lU2l6ZShpbmZvLnBoYXNlKTsKICAgICAgICAgaCA9IGJv
dHRvbSAtIHRvcDsKICAgICAgICAgeVBvcyA9IHR5ICsgdG9wOwotICAgICAgICB2LT5zZXRNaW5p
bXVtQ29sdW1uSGVpZ2h0KGgpOwogICAgICAgICBpZiAoeVBvcyA8IGluZm8ucmVjdC5ib3R0b20o
KSAmJiB5UG9zICsgaCA+IGluZm8ucmVjdC55KCkpCiAgICAgICAgICAgICBjdXJyLT5wYWludChp
bmZvLCB0eCwgdHkpOwogICAgIH0KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCShyZXZp
c2lvbiA2Njg4NikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01Miw3ICs1Miw2IEBAIFJlbmRlclZpZXc6OlJlbmRlclZpZXcoTm9kZSogbm9k
ZSwgRnJhbWUKICAgICAsIG1fbWF4aW1hbE91dGxpbmVTaXplKDApCiAgICAgLCBtX2Jlc3RUcnVu
Y2F0ZWRBdCgwKQogICAgICwgbV90cnVuY2F0b3JXaWR0aCgwKQotICAgICwgbV9taW5pbXVtQ29s
dW1uSGVpZ2h0KDApCiAgICAgLCBtX2ZvcmNlZFBhZ2VCcmVhayhmYWxzZSkKICAgICAsIG1fbGF5
b3V0U3RhdGUoMCkKICAgICAsIG1fbGF5b3V0U3RhdGVEaXNhYmxlQ291bnQoMCkKQEAgLTY5NSw3
ICs2OTQsNiBAQCB2b2lkIFJlbmRlclZpZXc6OnNldEJlc3RUcnVuY2F0ZWRBdChpbnQgCiAKIHZv
aWQgUmVuZGVyVmlldzo6cHVzaExheW91dFN0YXRlKFJlbmRlck9iamVjdCogcm9vdCkKIHsKLSAg
ICBBU1NFUlQoIWRvaW5nRnVsbFJlcGFpbnQoKSk7CiAgICAgQVNTRVJUKG1fbGF5b3V0U3RhdGVE
aXNhYmxlQ291bnQgPT0gMCk7CiAgICAgQVNTRVJUKG1fbGF5b3V0U3RhdGUgPT0gMCk7CiAKSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJWaWV3LmgJKHJldmlzaW9uIDY2ODg2KQorKysgV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC04MywxMiArODMsMTAgQEAgcHVi
bGljOgogICAgIEludFJlY3QgcHJpbnRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9wcmludFJlY3Q7
IH0KICAgICB2b2lkIHNldFByaW50UmVjdChjb25zdCBJbnRSZWN0JiByKSB7IG1fcHJpbnRSZWN0
ID0gcjsgfQogCi0gICAgdm9pZCBzZXRUcnVuY2F0ZWRBdChpbnQgeSkgeyBtX3RydW5jYXRlZEF0
ID0geTsgbV9iZXN0VHJ1bmNhdGVkQXQgPSBtX3RydW5jYXRvcldpZHRoID0gMDsgbV9taW5pbXVt
Q29sdW1uSGVpZ2h0ID0gMDsgbV9mb3JjZWRQYWdlQnJlYWsgPSBmYWxzZTsgfQorICAgIHZvaWQg
c2V0VHJ1bmNhdGVkQXQoaW50IHkpIHsgbV90cnVuY2F0ZWRBdCA9IHk7IG1fYmVzdFRydW5jYXRl
ZEF0ID0gbV90cnVuY2F0b3JXaWR0aCA9IDA7IG1fZm9yY2VkUGFnZUJyZWFrID0gZmFsc2U7IH0K
ICAgICB2b2lkIHNldEJlc3RUcnVuY2F0ZWRBdChpbnQgeSwgUmVuZGVyQm94TW9kZWxPYmplY3Qq
IGZvclJlbmRlcmVyLCBib29sIGZvcmNlZEJyZWFrID0gZmFsc2UpOwotICAgIHZvaWQgc2V0TWlu
aW11bUNvbHVtbkhlaWdodChpbnQgaGVpZ2h0KSB7IG1fbWluaW11bUNvbHVtbkhlaWdodCA9IGhl
aWdodDsgfQogICAgIGludCBiZXN0VHJ1bmNhdGVkQXQoKSBjb25zdCB7IHJldHVybiBtX2Jlc3RU
cnVuY2F0ZWRBdDsgfQotICAgIGludCBtaW5pbXVtQ29sdW1uSGVpZ2h0KCkgY29uc3QgeyByZXR1
cm4gbV9taW5pbXVtQ29sdW1uSGVpZ2h0OyB9Ci0KKyAgICAKICAgICBpbnQgdHJ1bmNhdGVkQXQo
KSBjb25zdCB7IHJldHVybiBtX3RydW5jYXRlZEF0OyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgYWJz
b2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBpbnQgdHgsIGludCB0eSk7CkBAIC0xMjIsMjEg
KzEyMCwyMCBAQCBwdWJsaWM6CiAKICAgICBib29sIGRvaW5nRnVsbFJlcGFpbnQoKSBjb25zdCB7
IHJldHVybiBtX2ZyYW1lVmlldy0+bmVlZHNGdWxsUmVwYWludCgpOyB9CiAKLSAgICB2b2lkIHB1
c2hMYXlvdXRTdGF0ZShSZW5kZXJCb3gqIHJlbmRlcmVyLCBjb25zdCBJbnRTaXplJiBvZmZzZXQp
CisgICAgdm9pZCBwdXNoTGF5b3V0U3RhdGUoUmVuZGVyQm94KiByZW5kZXJlciwgY29uc3QgSW50
U2l6ZSYgb2Zmc2V0LCBpbnQgcGFnZUhlaWdodCA9IDAsIENvbHVtbkluZm8qIGNvbEluZm8gPSAw
KQogICAgIHsKLSAgICAgICAgaWYgKGRvaW5nRnVsbFJlcGFpbnQoKSkKLSAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgLy8gV2UgcHVzaCBMYXlvdXRTdGF0ZSBldmVuIGlmIGxheW91dFN0YXRl
IGlzIGRpc2FibGVkIGJlY2F1c2UgaXQgc3RvcmVzIGxheW91dERlbHRhIHRvby4KLSAgICAgICAg
bV9sYXlvdXRTdGF0ZSA9IG5ldyAocmVuZGVyQXJlbmEoKSkgTGF5b3V0U3RhdGUobV9sYXlvdXRT
dGF0ZSwgcmVuZGVyZXIsIG9mZnNldCk7CisgICAgICAgIGlmICghZG9pbmdGdWxsUmVwYWludCgp
IHx8IHJlbmRlcmVyLT5oYXNDb2x1bW5zKCkgfHwgbV9sYXlvdXRTdGF0ZS0+cGFnaW5hdGVkKCkp
CisgICAgICAgICAgICBtX2xheW91dFN0YXRlID0gbmV3IChyZW5kZXJBcmVuYSgpKSBMYXlvdXRT
dGF0ZShtX2xheW91dFN0YXRlLCByZW5kZXJlciwgb2Zmc2V0LCBwYWdlSGVpZ2h0LCBjb2xJbmZv
KTsKICAgICB9CiAKICAgICB2b2lkIHB1c2hMYXlvdXRTdGF0ZShSZW5kZXJPYmplY3QqKTsKIAog
ICAgIHZvaWQgcG9wTGF5b3V0U3RhdGUoKQogICAgIHsKLSAgICAgICAgaWYgKGRvaW5nRnVsbFJl
cGFpbnQoKSkKLSAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgTGF5b3V0U3RhdGUqIHN0YXRl
ID0gbV9sYXlvdXRTdGF0ZTsKKyAgICAgICAgaWYgKGRvaW5nRnVsbFJlcGFpbnQoKSAmJiAhbV9s
YXlvdXRTdGF0ZS0+cGFnaW5hdGVkKCkpCisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIG1f
bGF5b3V0U3RhdGUgPSBzdGF0ZS0+bV9uZXh0OwogICAgICAgICBzdGF0ZS0+ZGVzdHJveShyZW5k
ZXJBcmVuYSgpKTsKICAgICB9CkBAIC0xOTgsNyArMTk1LDYgQEAgcHJvdGVjdGVkOgogcHJpdmF0
ZToKICAgICBpbnQgbV9iZXN0VHJ1bmNhdGVkQXQ7CiAgICAgaW50IG1fdHJ1bmNhdG9yV2lkdGg7
Ci0gICAgaW50IG1fbWluaW11bUNvbHVtbkhlaWdodDsKICAgICBib29sIG1fZm9yY2VkUGFnZUJy
ZWFrOwogICAgIExheW91dFN0YXRlKiBtX2xheW91dFN0YXRlOwogICAgIHVuc2lnbmVkIG1fbGF5
b3V0U3RhdGVEaXNhYmxlQ291bnQ7CkBAIC0yMjcsMTMgKzIyMywxMyBAQCB2b2lkIHRvUmVuZGVy
Vmlldyhjb25zdCBSZW5kZXJWaWV3Kik7CiBjbGFzcyBMYXlvdXRTdGF0ZU1haW50YWluZXIgOiBw
dWJsaWMgTm9uY29weWFibGUgewogcHVibGljOgogICAgIC8vIGN0b3IgdG8gcHVzaCBub3cKLSAg
ICBMYXlvdXRTdGF0ZU1haW50YWluZXIoUmVuZGVyVmlldyogdmlldywgUmVuZGVyQm94KiByb290
LCBJbnRTaXplIG9mZnNldCwgYm9vbCBkaXNhYmxlU3RhdGUgPSBmYWxzZSkKKyAgICBMYXlvdXRT
dGF0ZU1haW50YWluZXIoUmVuZGVyVmlldyogdmlldywgUmVuZGVyQm94KiByb290LCBJbnRTaXpl
IG9mZnNldCwgYm9vbCBkaXNhYmxlU3RhdGUgPSBmYWxzZSwgaW50IHBhZ2VIZWlnaHQgPSAwLCBD
b2x1bW5JbmZvKiBjb2xJbmZvID0gMCkKICAgICAgICAgOiBtX3ZpZXcodmlldykKICAgICAgICAg
LCBtX2Rpc2FibGVkKGRpc2FibGVTdGF0ZSkKICAgICAgICAgLCBtX2RpZFN0YXJ0KGZhbHNlKQog
ICAgICAgICAsIG1fZGlkRW5kKGZhbHNlKQogICAgIHsKLSAgICAgICAgcHVzaChyb290LCBvZmZz
ZXQpOworICAgICAgICBwdXNoKHJvb3QsIG9mZnNldCwgcGFnZUhlaWdodCwgY29sSW5mbyk7CiAg
ICAgfQogICAgIAogICAgIC8vIGN0b3IgdG8gbWF5YmUgcHVzaCBsYXRlcgpAQCAtMjUwLDExICsy
NDYsMTEgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQobV9kaWRTdGFydCA9PSBtX2RpZEVuZCk7
ICAgLy8gaWYgdGhpcyBmaXJlcywgaXQgbWVhbnMgdGhhdCBzb21lb25lIGRpZCBhIHB1c2goKSwg
YnV0IGZvcmdvdCB0byBwb3AoKS4KICAgICB9CiAKLSAgICB2b2lkIHB1c2goUmVuZGVyQm94KiBy
b290LCBJbnRTaXplIG9mZnNldCkKKyAgICB2b2lkIHB1c2goUmVuZGVyQm94KiByb290LCBJbnRT
aXplIG9mZnNldCwgaW50IHBhZ2VIZWlnaHQgPSAwLCBDb2x1bW5JbmZvKiBjb2xJbmZvID0gMCkK
ICAgICB7CiAgICAgICAgIEFTU0VSVCghbV9kaWRTdGFydCk7CiAgICAgICAgIC8vIFdlIHB1c2gg
c3RhdGUgZXZlbiBpZiBkaXNhYmxlZCwgYmVjYXVzZSB3ZSBzdGlsbCBuZWVkIHRvIHN0b3JlIGxh
eW91dERlbHRhCi0gICAgICAgIG1fdmlldy0+cHVzaExheW91dFN0YXRlKHJvb3QsIG9mZnNldCk7
CisgICAgICAgIG1fdmlldy0+cHVzaExheW91dFN0YXRlKHJvb3QsIG9mZnNldCwgcGFnZUhlaWdo
dCwgY29sSW5mbyk7CiAgICAgICAgIGlmIChtX2Rpc2FibGVkKQogICAgICAgICAgICAgbV92aWV3
LT5kaXNhYmxlTGF5b3V0U3RhdGUoKTsKICAgICAgICAgbV9kaWRTdGFydCA9IHRydWU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67289</attachid>
            <date>2010-09-10 22:32:49 -0700</date>
            <delta_ts>2010-09-11 23:17:58 -0700</delta_ts>
            <desc>This patch moves floats to the next page correctly.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>72299</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL0NvbHVtbkluZm8uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9Db2x1bW5JbmZvLmgJKHJldmlzaW9uIDY2OTAzKQorKysgV2ViQ29yZS9y
ZW5kZXJpbmcvQ29sdW1uSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw5IEBAIHB1
YmxpYzoKICAgICBDb2x1bW5JbmZvKCkKICAgICAgICAgOiBtX2Rlc2lyZWRDb2x1bW5XaWR0aCgw
KQogICAgICAgICAsIG1fZGVzaXJlZENvbHVtbkNvdW50KDEpCisgICAgICAgICwgbV9jb2x1bW5D
b3VudCgxKQorICAgICAgICAsIG1fY29sdW1uSGVpZ2h0KDApCisgICAgICAgICwgbV9taW5pbXVt
Q29sdW1uSGVpZ2h0KDApCiAgICAgICAgIHsgfQogICAgIAogICAgIGludCBkZXNpcmVkQ29sdW1u
V2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2Rlc2lyZWRDb2x1bW5XaWR0aDsgfQpAQCAtNDQsMTkg
KzQ3LDI4IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBkZXNpcmVkQ29sdW1uQ291bnQoKSBjb25z
dCB7IHJldHVybiBtX2Rlc2lyZWRDb2x1bW5Db3VudDsgfQogICAgIHZvaWQgc2V0RGVzaXJlZENv
bHVtbkNvdW50KHVuc2lnbmVkIGNvdW50KSB7IG1fZGVzaXJlZENvbHVtbkNvdW50ID0gY291bnQ7
IH0KIAotICAgIC8vIEVuY2Fwc3VsYXRlZCBmb3IgdGhlIGZ1dHVyZSB3aGVyZSB3ZSBjYW4gYXZv
aWQgc3RvcmluZyB0aGUgcmVjdHMgYW5kIGp1c3QgY29tcHV0ZSB0aGVtIGR5bmFtaWNhbGx5Lgot
ICAgIHNpemVfdCBjb2x1bW5Db3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fY29sdW1uUmVjdHMuc2l6
ZSgpOyB9Ci0gICAgY29uc3QgSW50UmVjdCYgY29sdW1uUmVjdEF0KHNpemVfdCBpKSBjb25zdCB7
IHJldHVybiBtX2NvbHVtblJlY3RzW2ldOyB9CisgICAgdW5zaWduZWQgY29sdW1uQ291bnQoKSBj
b25zdCB7IHJldHVybiBtX2NvbHVtbkNvdW50OyB9CisgICAgaW50IGNvbHVtbkhlaWdodCgpIGNv
bnN0IHsgcmV0dXJuIG1fY29sdW1uSGVpZ2h0OyB9CiAKLSAgICB2b2lkIGNsZWFyQ29sdW1ucygp
IHsgbV9jb2x1bW5SZWN0cy5jbGVhcigpOyB9CisgICAgLy8gU2V0IG91ciBjb3VudCBhbmQgaGVp
Z2h0LiAgVGhpcyBpcyBlbm91Z2ggaW5mbyBmb3IgYSBSZW5kZXJCbG9jayB0byBjb21wdXRlIHBh
Z2UgcmVjdHMKKyAgICAvLyBkeW5hbWljYWxseS4KKyAgICB2b2lkIHNldENvbHVtbkNvdW50QW5k
SGVpZ2h0KGludCBjLCBpbnQgaCkKKyAgICB7IAorICAgICAgICBtX2NvbHVtbkNvdW50ID0gYzsK
KyAgICAgICAgbV9jb2x1bW5IZWlnaHQgPSBoOworICAgIH0KKyAgICB2b2lkIHNldENvbHVtbkhl
aWdodChpbnQgaCkgeyBtX2NvbHVtbkhlaWdodCA9IGg7IH0KKworICAgIHZvaWQgdXBkYXRlTWlu
aW11bUNvbHVtbkhlaWdodChpbnQgaCkgeyBtX21pbmltdW1Db2x1bW5IZWlnaHQgPSBtYXgoaCwg
bV9taW5pbXVtQ29sdW1uSGVpZ2h0KTsgfQorICAgIGludCBtaW5pbXVtQ29sdW1uSGVpZ2h0KCkg
Y29uc3QgeyByZXR1cm4gbV9taW5pbXVtQ29sdW1uSGVpZ2h0OyB9CiAKLSAgICAvLyBGSVhNRTog
V2lsbCBnbyBhd2F5IG9uY2Ugd2UgZG9uJ3QgdXNlIHRoZSBWZWN0b3IuCi0gICAgdm9pZCBhZGRD
b2x1bW5SZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpIHsgbV9jb2x1bW5SZWN0cy5hcHBlbmQocmVj
dCk7IH0KLSAgICAKIHByaXZhdGU6CiAgICAgaW50IG1fZGVzaXJlZENvbHVtbldpZHRoOwogICAg
IHVuc2lnbmVkIG1fZGVzaXJlZENvbHVtbkNvdW50OwotICAgIFZlY3RvcjxJbnRSZWN0PiBtX2Nv
bHVtblJlY3RzOworICAgIAorICAgIHVuc2lnbmVkIG1fY29sdW1uQ291bnQ7CisgICAgaW50IG1f
Y29sdW1uSGVpZ2h0OworICAgIGludCBtX21pbmltdW1Db2x1bW5IZWlnaHQ7CiB9OwogCiB9Cklu
ZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvTGF5b3V0U3RhdGUuY3BwCShyZXZpc2lvbiA2Njg4NikKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsOCArMzMs
OSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUxheW91dFN0YXRlOjpMYXlvdXRTdGF0ZShM
YXlvdXRTdGF0ZSogcHJldiwgUmVuZGVyQm94KiByZW5kZXJlciwgY29uc3QgSW50U2l6ZSYgb2Zm
c2V0KQotICAgIDogbV9uZXh0KHByZXYpCitMYXlvdXRTdGF0ZTo6TGF5b3V0U3RhdGUoTGF5b3V0
U3RhdGUqIHByZXYsIFJlbmRlckJveCogcmVuZGVyZXIsIGNvbnN0IEludFNpemUmIG9mZnNldCwg
aW50IHBhZ2VIZWlnaHQsIENvbHVtbkluZm8qIGNvbEluZm8pCisgICAgOiBtX2NvbHVtbkluZm8o
Y29sSW5mbykKKyAgICAsIG1fbmV4dChwcmV2KQogI2lmbmRlZiBOREVCVUcKICAgICAsIG1fcmVu
ZGVyZXIocmVuZGVyZXIpCiAjZW5kaWYKQEAgLTQ1LDQzICs0Niw2NyBAQCBMYXlvdXRTdGF0ZTo6
TGF5b3V0U3RhdGUoTGF5b3V0U3RhdGUqIHByCiAgICAgaWYgKGZpeGVkKSB7CiAgICAgICAgIC8v
IEZJWE1FOiBUaGlzIGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgd2l0aCB0cmFuc2Zvcm1zLgogICAg
ICAgICBGbG9hdFBvaW50IGZpeGVkT2Zmc2V0ID0gcmVuZGVyZXItPnZpZXcoKS0+bG9jYWxUb0Fi
c29sdXRlKEZsb2F0UG9pbnQoKSwgdHJ1ZSk7Ci0gICAgICAgIG1fb2Zmc2V0ID0gSW50U2l6ZShm
aXhlZE9mZnNldC54KCksIGZpeGVkT2Zmc2V0LnkoKSkgKyBvZmZzZXQ7CisgICAgICAgIG1fcGFp
bnRPZmZzZXQgPSBJbnRTaXplKGZpeGVkT2Zmc2V0LngoKSwgZml4ZWRPZmZzZXQueSgpKSArIG9m
ZnNldDsKICAgICB9IGVsc2UKLSAgICAgICAgbV9vZmZzZXQgPSBwcmV2LT5tX29mZnNldCArIG9m
ZnNldDsKKyAgICAgICAgbV9wYWludE9mZnNldCA9IHByZXYtPm1fcGFpbnRPZmZzZXQgKyBvZmZz
ZXQ7CiAKLSAgICBpZiAocmVuZGVyZXItPmlzUmVsUG9zaXRpb25lZCgpKSB7Ci0gICAgICAgIGlm
IChyZW5kZXJlci0+aGFzTGF5ZXIoKSkKLSAgICAgICAgICAgIG1fb2Zmc2V0ICs9IHJlbmRlcmVy
LT5sYXllcigpLT5yZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0KCk7Ci0gICAgfSBlbHNlIGlmIChyZW5k
ZXJlci0+aXNQb3NpdGlvbmVkKCkgJiYgIWZpeGVkKSB7CisgICAgaWYgKHJlbmRlcmVyLT5pc1Bv
c2l0aW9uZWQoKSAmJiAhZml4ZWQpIHsKICAgICAgICAgaWYgKFJlbmRlck9iamVjdCogY29udGFp
bmVyID0gcmVuZGVyZXItPmNvbnRhaW5lcigpKSB7CiAgICAgICAgICAgICBpZiAoY29udGFpbmVy
LT5pc1JlbFBvc2l0aW9uZWQoKSAmJiBjb250YWluZXItPmlzUmVuZGVySW5saW5lKCkpCi0gICAg
ICAgICAgICAgICAgbV9vZmZzZXQgKz0gdG9SZW5kZXJJbmxpbmUoY29udGFpbmVyKS0+cmVsYXRp
dmVQb3NpdGlvbmVkSW5saW5lT2Zmc2V0KHJlbmRlcmVyKTsKKyAgICAgICAgICAgICAgICBtX3Bh
aW50T2Zmc2V0ICs9IHRvUmVuZGVySW5saW5lKGNvbnRhaW5lciktPnJlbGF0aXZlUG9zaXRpb25l
ZElubGluZU9mZnNldChyZW5kZXJlcik7CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBtX2xheW91
dE9mZnNldCA9IG1fcGFpbnRPZmZzZXQ7CisKKyAgICBpZiAocmVuZGVyZXItPmlzUmVsUG9zaXRp
b25lZCgpICYmIHJlbmRlcmVyLT5oYXNMYXllcigpKQorICAgICAgICBtX3BhaW50T2Zmc2V0ICs9
IHJlbmRlcmVyLT5sYXllcigpLT5yZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0KCk7CisKICAgICBtX2Ns
aXBwZWQgPSAhZml4ZWQgJiYgcHJldi0+bV9jbGlwcGVkOwogICAgIGlmIChtX2NsaXBwZWQpCiAg
ICAgICAgIG1fY2xpcFJlY3QgPSBwcmV2LT5tX2NsaXBSZWN0OwogCiAgICAgaWYgKHJlbmRlcmVy
LT5oYXNPdmVyZmxvd0NsaXAoKSkgewogICAgICAgICBSZW5kZXJMYXllciogbGF5ZXIgPSByZW5k
ZXJlci0+bGF5ZXIoKTsKLSAgICAgICAgSW50UmVjdCBjbGlwUmVjdCh0b1BvaW50KG1fb2Zmc2V0
KSArIHJlbmRlcmVyLT52aWV3KCktPmxheW91dERlbHRhKCksIGxheWVyLT5zaXplKCkpOworICAg
ICAgICBJbnRSZWN0IGNsaXBSZWN0KHRvUG9pbnQobV9wYWludE9mZnNldCkgKyByZW5kZXJlci0+
dmlldygpLT5sYXlvdXREZWx0YSgpLCBsYXllci0+c2l6ZSgpKTsKICAgICAgICAgaWYgKG1fY2xp
cHBlZCkKICAgICAgICAgICAgIG1fY2xpcFJlY3QuaW50ZXJzZWN0KGNsaXBSZWN0KTsKICAgICAg
ICAgZWxzZSB7CiAgICAgICAgICAgICBtX2NsaXBSZWN0ID0gY2xpcFJlY3Q7CiAgICAgICAgICAg
ICBtX2NsaXBwZWQgPSB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIG1fb2Zmc2V0IC09IGxheWVy
LT5zY3JvbGxlZENvbnRlbnRPZmZzZXQoKTsKKworICAgICAgICBtX3BhaW50T2Zmc2V0IC09IGxh
eWVyLT5zY3JvbGxlZENvbnRlbnRPZmZzZXQoKTsKICAgICB9CiAKLSAgICBtX2xheW91dERlbHRh
ID0gbV9uZXh0LT5tX2xheW91dERlbHRhOworICAgIC8vIERpc2FibGUgcGFnaW5hdGlvbiBmb3Ig
b2JqZWN0cyB3ZSBkb24ndCBzdXBwb3J0LiAgRm9yIG5vdyB0aGlzIGluY2x1ZGVzIG92ZXJmbG93
OnNjcm9sbC9hdXRvIGFuZCBpbmxpbmUgYmxvY2tzLgorICAgIGlmIChyZW5kZXJlci0+aXNSZXBs
YWNlZCgpIHx8IHJlbmRlcmVyLT5zY3JvbGxzT3ZlcmZsb3coKSkKKyAgICAgICAgbV9wYWdlSGVp
Z2h0ID0gMDsKKworICAgIC8vIElmIHdlIGVzdGFibGlzaCBhIG5ldyBwYWdlIGhlaWdodCwgdGhl
biBjYWNoZSB0aGUgb2Zmc2V0IHRvIHRoZSB0b3Agb2YgdGhlIGZpcnN0IHBhZ2UuCisgICAgLy8g
V2UgY2FuIGNvbXBhcmUgdGhpcyBsYXRlciBvbiB0byBmaWd1cmUgb3V0IHdoYXQgcGFydCBvZiB0
aGUgcGFnZSB3ZSdyZSBhY3R1YWxseSBvbiwKKyAgICBpZiAocGFnZUhlaWdodCkgeworICAgICAg
ICBtX3BhZ2VIZWlnaHQgPSBwYWdlSGVpZ2h0OworICAgICAgICBtX3BhZ2VPZmZzZXQgPSBJbnRT
aXplKG1fcGFpbnRPZmZzZXQud2lkdGgoKSArIHJlbmRlcmVyLT5ib3JkZXJMZWZ0KCkgKyByZW5k
ZXJlci0+cGFkZGluZ0xlZnQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3Bh
aW50T2Zmc2V0LmhlaWdodCgpICsgcmVuZGVyZXItPmJvcmRlclRvcCgpICsgcmVuZGVyZXItPnBh
ZGRpbmdUb3AoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gSWYgd2UgZG9uJ3QgZXN0YWJs
aXNoIGEgbmV3IHBhZ2UgaGVpZ2h0LCB0aGVuIHByb3BhZ2F0ZSB0aGUgb2xkIHBhZ2UgaGVpZ2h0
IGFuZCBvZmZzZXQgZG93bi4KKyAgICAgICAgbV9wYWdlSGVpZ2h0ID0gbV9uZXh0LT5tX3BhZ2VI
ZWlnaHQ7CisgICAgICAgIG1fcGFnZU9mZnNldCA9IG1fbmV4dC0+bV9wYWdlT2Zmc2V0OworICAg
IH0KKyAgICAKKyAgICBpZiAoIW1fY29sdW1uSW5mbykKKyAgICAgICAgbV9jb2x1bW5JbmZvID0g
bV9uZXh0LT5tX2NvbHVtbkluZm87CiAKKyAgICBtX2xheW91dERlbHRhID0gbV9uZXh0LT5tX2xh
eW91dERlbHRhOworICAgIAogICAgIC8vIEZJWE1FOiA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTM0NDM+IEFwcGx5IGNvbnRyb2wgY2xpcCBpZiBwcmVzZW50LgogfQog
CiBMYXlvdXRTdGF0ZTo6TGF5b3V0U3RhdGUoUmVuZGVyT2JqZWN0KiByb290KQogICAgIDogbV9j
bGlwcGVkKGZhbHNlKQorICAgICwgbV9wYWdlSGVpZ2h0KDApCisgICAgLCBtX2NvbHVtbkluZm8o
MCkKICAgICAsIG1fbmV4dCgwKQogI2lmbmRlZiBOREVCVUcKICAgICAsIG1fcmVuZGVyZXIocm9v
dCkKQEAgLTg5LDEzICsxMTQsMTMgQEAgTGF5b3V0U3RhdGU6OkxheW91dFN0YXRlKFJlbmRlck9i
amVjdCogcgogewogICAgIFJlbmRlck9iamVjdCogY29udGFpbmVyID0gcm9vdC0+Y29udGFpbmVy
KCk7CiAgICAgRmxvYXRQb2ludCBhYnNDb250ZW50UG9pbnQgPSBjb250YWluZXItPmxvY2FsVG9B
YnNvbHV0ZShGbG9hdFBvaW50KCksIGZhbHNlLCB0cnVlKTsKLSAgICBtX29mZnNldCA9IEludFNp
emUoYWJzQ29udGVudFBvaW50LngoKSwgYWJzQ29udGVudFBvaW50LnkoKSk7CisgICAgbV9wYWlu
dE9mZnNldCA9IEludFNpemUoYWJzQ29udGVudFBvaW50LngoKSwgYWJzQ29udGVudFBvaW50Lnko
KSk7CiAKICAgICBpZiAoY29udGFpbmVyLT5oYXNPdmVyZmxvd0NsaXAoKSkgewogICAgICAgICBS
ZW5kZXJMYXllciogbGF5ZXIgPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KGNvbnRhaW5lciktPmxh
eWVyKCk7CiAgICAgICAgIG1fY2xpcHBlZCA9IHRydWU7Ci0gICAgICAgIG1fY2xpcFJlY3QgPSBJ
bnRSZWN0KHRvUG9pbnQobV9vZmZzZXQpLCBsYXllci0+c2l6ZSgpKTsKLSAgICAgICAgbV9vZmZz
ZXQgLT0gbGF5ZXItPnNjcm9sbGVkQ29udGVudE9mZnNldCgpOworICAgICAgICBtX2NsaXBSZWN0
ID0gSW50UmVjdCh0b1BvaW50KG1fcGFpbnRPZmZzZXQpLCBsYXllci0+c2l6ZSgpKTsKKyAgICAg
ICAgbV9wYWludE9mZnNldCAtPSBsYXllci0+c2Nyb2xsZWRDb250ZW50T2Zmc2V0KCk7CiAgICAg
fQogfQogCkBAIC0xMjYsNCArMTUxLDExIEBAIHZvaWQgTGF5b3V0U3RhdGU6Om9wZXJhdG9yIGRl
bGV0ZSh2b2lkKiAKICAgICAqKHNpemVfdCopcHRyID0gc3o7CiB9CiAKK3ZvaWQgTGF5b3V0U3Rh
dGU6OmNsZWFyUGFnaW5hdGlvbkluZm9ybWF0aW9uKCkKK3sKKyAgICBtX3BhZ2VIZWlnaHQgPSBt
X25leHQtPm1fcGFnZUhlaWdodDsKKyAgICBtX3BhZ2VPZmZzZXQgPSBtX25leHQtPm1fcGFnZU9m
ZnNldDsKKyAgICBtX2NvbHVtbkluZm8gPSBtX25leHQtPm1fY29sdW1uSW5mbzsKK30KKwogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0U3RhdGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRTdGF0ZS5oCShyZXZpc2lv
biA2Njg4NikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMyLDYgKzMyLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBDb2x1
bW5JbmZvOwogY2xhc3MgUmVuZGVyQXJlbmE7CiBjbGFzcyBSZW5kZXJCb3g7CiBjbGFzcyBSZW5k
ZXJPYmplY3Q7CkBAIC00MCw2ICs0MSw4IEBAIGNsYXNzIExheW91dFN0YXRlIDogcHVibGljIE5v
bmNvcHlhYmxlIHsKIHB1YmxpYzoKICAgICBMYXlvdXRTdGF0ZSgpCiAgICAgICAgIDogbV9jbGlw
cGVkKGZhbHNlKQorICAgICAgICAsIG1fcGFnZUhlaWdodCgwKQorICAgICAgICAsIG1fY29sdW1u
SW5mbygwKQogICAgICAgICAsIG1fbmV4dCgwKQogI2lmbmRlZiBOREVCVUcKICAgICAgICAgLCBt
X3JlbmRlcmVyKDApCkBAIC00Nyw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0g
ICAgTGF5b3V0U3RhdGUoTGF5b3V0U3RhdGUqLCBSZW5kZXJCb3gqLCBjb25zdCBJbnRTaXplJiBv
ZmZzZXQpOworICAgIExheW91dFN0YXRlKExheW91dFN0YXRlKiwgUmVuZGVyQm94KiwgY29uc3Qg
SW50U2l6ZSYgb2Zmc2V0LCBpbnQgcGFnZUhlaWdodCwgQ29sdW1uSW5mbyopOwogICAgIExheW91
dFN0YXRlKFJlbmRlck9iamVjdCopOwogCiAgICAgdm9pZCBkZXN0cm95KFJlbmRlckFyZW5hKik7
CkBAIC01OCw2ICs2MSwxMCBAQCBwdWJsaWM6CiAgICAgLy8gT3ZlcnJpZGRlbiB0byBwcmV2ZW50
IHRoZSBub3JtYWwgZGVsZXRlIGZyb20gYmVpbmcgY2FsbGVkLgogICAgIHZvaWQgb3BlcmF0b3Ig
ZGVsZXRlKHZvaWQqLCBzaXplX3QpOwogCisgICAgdm9pZCBjbGVhclBhZ2luYXRpb25JbmZvcm1h
dGlvbigpOworICAgIGJvb2wgcGFnaW5hdGluZ0NvbHVtbnMoKSBjb25zdCB7IHJldHVybiBtX2Nv
bHVtbkluZm87IH0KKyAgICBib29sIHBhZ2luYXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZUhl
aWdodCB8fCBtX2NvbHVtbkluZm87IH0KKwogcHJpdmF0ZToKICAgICAvLyBUaGUgbm9ybWFsIG9w
ZXJhdG9yIG5ldyBpcyBkaXNhbGxvd2VkLgogICAgIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3Qp
IHRocm93KCk7CkBAIC02NSwxMCArNzIsMTYgQEAgcHJpdmF0ZToKIHB1YmxpYzoKICAgICBib29s
IG1fY2xpcHBlZDsKICAgICBJbnRSZWN0IG1fY2xpcFJlY3Q7Ci0gICAgSW50U2l6ZSBtX29mZnNl
dDsgICAgICAgLy8geC95IG9mZnNldCBmcm9tIGNvbnRhaW5lci4KKyAgICBJbnRTaXplIG1fcGFp
bnRPZmZzZXQ7ICAgICAgIC8vIHgveSBvZmZzZXQgZnJvbSBjb250YWluZXIuICBJbmNsdWRlcyBy
ZWxhdGl2ZSBwb3NpdGlvbmluZyBhbmQgc2Nyb2xsIG9mZnNldHMuCisgICAgSW50U2l6ZSBtX2xh
eW91dE9mZnNldDsgICAgICAvLyB4L3kgb2Zmc2V0IGZyb20gY29udGFpbmVyLiAgRG9lcyBub3Qg
aW5jbHVkZSByZWxhdGl2ZSBwb3NpdGlvbmluZyBvciBzY3JvbGwgb2Zmc2V0cy4KICAgICBJbnRT
aXplIG1fbGF5b3V0RGVsdGE7ICAvLyBUcmFuc2llbnQgb2Zmc2V0IGZyb20gdGhlIGZpbmFsIHBv
c2l0aW9uIG9mIHRoZSBvYmplY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB1c2Vk
IHRvIGVuc3VyZSB0aGF0IHJlcGFpbnRzIGhhcHBlbiBpbiB0aGUgY29ycmVjdCBwbGFjZS4KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgdG90YWwgZGVsdGEgYWNjdW11
bGF0ZWQgZnJvbSB0aGUgcm9vdC4KKworICAgIGludCBtX3BhZ2VIZWlnaHQ7ICAgICAgICAgICAg
Ly8gVGhlIGN1cnJlbnQgcGFnZSBoZWlnaHQgZm9yIHRoZSBwYWdpbmF0aW9uIG1vZGVsIHRoYXQg
ZW5jbG9zZXMgdXMuCisgICAgSW50U2l6ZSBtX3BhZ2VPZmZzZXQ7ICAgICAgICAvLyBUaGUgb2Zm
c2V0IG9mIHRoZSBzdGFydCBvZiB0aGUgZmlyc3QgcGFnZSBpbiB0aGUgbmVhcmVzdCBlbmNsb3Np
bmcgcGFnaW5hdGlvbiBtb2RlbC4KKyAgICBDb2x1bW5JbmZvKiBtX2NvbHVtbkluZm87ICAgIC8v
IElmIHRoZSBlbmNsb3NpbmcgcGFnaW5hdGlvbiBtb2RlbCBpcyBhIGNvbHVtbiBtb2RlbCwgdGhl
biB0aGlzIHdpbGwgc3RvcmUgY29sdW1uIGluZm9ybWF0aW9uIGZvciBlYXN5IHJldHJpZXZhbC9t
YW5pcHVsYXRpb24uCisKICAgICBMYXlvdXRTdGF0ZSogbV9uZXh0OwogI2lmbmRlZiBOREVCVUcK
ICAgICBSZW5kZXJPYmplY3QqIG1fcmVuZGVyZXI7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2suY3BwCShyZXZpc2lvbiA2NjkwMykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2Nr
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTExMiw3ICsxMTEyLDcgQEAgdm9pZCBSZW5kZXJCbG9j
azo6bGF5b3V0KCkKICAgICAgICAgY2xlYXJMYXlvdXRPdmVyZmxvdygpOwogfQogCi12b2lkIFJl
bmRlckJsb2NrOjpsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4pCit2b2lkIFJlbmRl
ckJsb2NrOjpsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIGludCBwYWdlSGVpZ2h0
KQogewogICAgIEFTU0VSVChuZWVkc0xheW91dCgpKTsKIApAQCAtMTEyMiw5ICsxMTIyLDYgQEAg
dm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2soYm9vbCByZWxheQogICAgIGlmICghcmVsYXlv
dXRDaGlsZHJlbiAmJiBsYXlvdXRPbmx5UG9zaXRpb25lZE9iamVjdHMoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgTGF5b3V0UmVwYWludGVyIHJlcGFpbnRlcigqdGhpcywgbV9ldmVySGFkTGF5
b3V0ICYmIGNoZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgpKTsKLSAgICBMYXlvdXRTdGF0ZU1h
aW50YWluZXIgc3RhdGVQdXNoZXIodmlldygpLCB0aGlzLCBJbnRTaXplKHgoKSwgeSgpKSwgaGFz
Q29sdW1ucygpIHx8IGhhc1RyYW5zZm9ybSgpIHx8IGhhc1JlZmxlY3Rpb24oKSk7Ci0KICAgICBp
bnQgb2xkV2lkdGggPSB3aWR0aCgpOwogICAgIGludCBvbGRDb2x1bW5XaWR0aCA9IGRlc2lyZWRD
b2x1bW5XaWR0aCgpOwogCkBAIC0xMTQwLDYgKzExMzcsMjggQEAgdm9pZCBSZW5kZXJCbG9jazo6
bGF5b3V0QmxvY2soYm9vbCByZWxheQogCiAgICAgaW50IHByZXZpb3VzSGVpZ2h0ID0gaGVpZ2h0
KCk7CiAgICAgc2V0SGVpZ2h0KDApOworICAgIGJvb2wgaGFzU3BlY2lmaWVkUGFnZUhlaWdodCA9
IGZhbHNlOworICAgIENvbHVtbkluZm8qIGNvbEluZm8gPSBjb2x1bW5JbmZvKCk7CisgICAgaWYg
KGhhc0NvbHVtbnMoKSkgeworICAgICAgICBpZiAoIXBhZ2VIZWlnaHQpIHsKKyAgICAgICAgICAg
IC8vIFdlIG5lZWQgdG8gZ28gYWhlYWQgYW5kIHNldCBvdXIgZXhwbGljaXQgcGFnZSBoZWlnaHQg
aWYgb25lIGV4aXN0cywgc28gdGhhdCB3ZSBjYW4KKyAgICAgICAgICAgIC8vIGF2b2lkIGRvaW5n
IHR3byBsYXlvdXQgcGFzc2VzLgorICAgICAgICAgICAgY2FsY0hlaWdodCgpOworICAgICAgICAg
ICAgaW50IGNvbHVtbkhlaWdodCA9IGNvbnRlbnRIZWlnaHQoKTsKKyAgICAgICAgICAgIGlmIChj
b2x1bW5IZWlnaHQgPiAwKSB7CisgICAgICAgICAgICAgICAgcGFnZUhlaWdodCA9IGNvbHVtbkhl
aWdodDsKKyAgICAgICAgICAgICAgICBoYXNTcGVjaWZpZWRQYWdlSGVpZ2h0ID0gdHJ1ZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHNldEhlaWdodCgwKTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoY29sSW5mby0+Y29sdW1uSGVpZ2h0KCkgIT0gcGFnZUhlaWdodCAmJiBtX2V2ZXJIYWRM
YXlvdXQpIHsKKyAgICAgICAgICAgIGNvbEluZm8tPnNldENvbHVtbkhlaWdodChwYWdlSGVpZ2h0
KTsKKyAgICAgICAgICAgIG1hcmtEZXNjZW5kYW50QmxvY2tzQW5kTGluZXNGb3JMYXlvdXQoKTsg
Ly8gV2UgbmVlZCB0byBkaXJ0eSBhbGwgZGVzY2VuZGFudCBibG9ja3MgYW5kIGxpbmVzLCBzaW5j
ZSB0aGUgY29sdW1uIGhlaWdodCBpcyBkaWZmZXJlbnQgbm93LgorICAgICAgICB9CisgICAgfQor
CisgICAgTGF5b3V0UmVwYWludGVyIHJlcGFpbnRlcigqdGhpcywgbV9ldmVySGFkTGF5b3V0ICYm
IGNoZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgpKTsKKyAgICBMYXlvdXRTdGF0ZU1haW50YWlu
ZXIgc3RhdGVQdXNoZXIodmlldygpLCB0aGlzLCBJbnRTaXplKHgoKSwgeSgpKSwgaGFzQ29sdW1u
cygpIHx8IGhhc1RyYW5zZm9ybSgpIHx8IGhhc1JlZmxlY3Rpb24oKSwgcGFnZUhlaWdodCwgY29s
SW5mbyk7CiAKICAgICAvLyBXZSB1c2UgZm91ciB2YWx1ZXMsIG1heFRvcFBvcywgbWF4VG9wTmVn
LCBtYXhCb3R0b21Qb3MsIGFuZCBtYXhCb3R0b21OZWcsIHRvIHRyYWNrCiAgICAgLy8gb3VyIGN1
cnJlbnQgbWF4aW1hbCBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgbWFyZ2lucy4gIFRoZXNlIHZhbHVl
cyBhcmUgdXNlZCB3aGVuIHdlCkBAIC0xMTg5LDEwICsxMjA4LDkgQEAgdm9pZCBSZW5kZXJCbG9j
azo6bGF5b3V0QmxvY2soYm9vbCByZWxheQogICAgIGlmIChmbG9hdEJvdHRvbSgpID4gKGhlaWdo
dCgpIC0gdG9BZGQpICYmIGV4cGFuZHNUb0VuY2xvc2VPdmVyaGFuZ2luZ0Zsb2F0cygpKQogICAg
ICAgICBzZXRIZWlnaHQoZmxvYXRCb3R0b20oKSArIHRvQWRkKTsKICAgICAKLSAgICAvLyBOb3cg
bGF5IG91dCBvdXIgY29sdW1ucyB3aXRoaW4gdGhpcyBpbnRyaW5zaWMgaGVpZ2h0LCBzaW5jZSB0
aGV5IGNhbiBzbGlnaHRseSBhZmZlY3QgdGhlIGludHJpbnNpYyBoZWlnaHQgYXMKLSAgICAvLyB3
ZSBhZGp1c3QgZm9yIGNsZWFuIGNvbHVtbiBicmVha3MuCi0gICAgaW50IHNpbmdsZUNvbHVtbkJv
dHRvbSA9IGxheW91dENvbHVtbnMoKTsKLQorICAgIGlmIChsYXlvdXRDb2x1bW5zKGhhc1NwZWNp
ZmllZFBhZ2VIZWlnaHQsIHBhZ2VIZWlnaHQsIHN0YXRlUHVzaGVyKSkKKyAgICAgICAgcmV0dXJu
OworIAogICAgIC8vIENhbGN1bGF0ZSBvdXIgbmV3IGhlaWdodC4KICAgICBpbnQgb2xkSGVpZ2h0
ID0gaGVpZ2h0KCk7CiAgICAgY2FsY0hlaWdodCgpOwpAQCAtMTIwNywyMSArMTIyNSwxOCBAQCB2
b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayhib29sIHJlbGF5CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBXZSBoYXZl
IHRvIHJlYmFsYW5jZSBjb2x1bW5zIHRvIHRoZSBuZXcgaGVpZ2h0LgotICAgICAgICBsYXlvdXRD
b2x1bW5zKHNpbmdsZUNvbHVtbkJvdHRvbSk7CiAgICAgfQogCiAgICAgaWYgKHByZXZpb3VzSGVp
Z2h0ICE9IGhlaWdodCgpKQogICAgICAgICByZWxheW91dENoaWxkcmVuID0gdHJ1ZTsKIAotICAg
IC8vIFRoaXMgY2hlY2sgaXMgZGVzaWduZWQgdG8gY2F0Y2ggYW55b25lCi0gICAgLy8gd2hvIHdh
c24ndCBnb2luZyB0byBwcm9wYWdhdGUgZmxvYXQgaW5mb3JtYXRpb24gdXAgdG8gdGhlIHBhcmVu
dCBhbmQgeWV0IGNvdWxkIHBvdGVudGlhbGx5IGJlIHBhaW50ZWQgYnkgaXRzIGFuY2VzdG9yLgot
ICAgIGlmIChpc1Jvb3QoKSB8fCBleHBhbmRzVG9FbmNsb3NlT3ZlcmhhbmdpbmdGbG9hdHMoKSkK
LSAgICAgICAgYWRkT3ZlcmZsb3dGcm9tRmxvYXRzKCk7Ci0KICAgICAvLyBBZGQgb3ZlcmZsb3cg
ZnJvbSBjaGlsZHJlbiAodW5sZXNzIHdlJ3JlIG11bHRpLWNvbHVtbiwgc2luY2UgaW4gdGhhdCBj
YXNlIGFsbCBvdXIgY2hpbGQgb3ZlcmZsb3cgaXMgY2xpcHBlZCBhbnl3YXkpLgogICAgIGlmICgh
aGFzQ29sdW1ucygpKSB7CisgICAgICAgIC8vIFRoaXMgY2hlY2sgaXMgZGVzaWduZWQgdG8gY2F0
Y2ggYW55b25lCisgICAgICAgIC8vIHdobyB3YXNuJ3QgZ29pbmcgdG8gcHJvcGFnYXRlIGZsb2F0
IGluZm9ybWF0aW9uIHVwIHRvIHRoZSBwYXJlbnQgYW5kIHlldCBjb3VsZCBwb3RlbnRpYWxseSBi
ZSBwYWludGVkIGJ5IGl0cyBhbmNlc3Rvci4KKyAgICAgICAgaWYgKGlzUm9vdCgpIHx8IGV4cGFu
ZHNUb0VuY2xvc2VPdmVyaGFuZ2luZ0Zsb2F0cygpKQorICAgICAgICAgICAgYWRkT3ZlcmZsb3dG
cm9tRmxvYXRzKCk7CisKICAgICAgICAgaWYgKGNoaWxkcmVuSW5saW5lKCkpCiAgICAgICAgICAg
ICBhZGRPdmVyZmxvd0Zyb21JbmxpbmVDaGlsZHJlbigpOwogICAgICAgICBlbHNlCkBAIC0xNDg1
LDcgKzE1MDAsOCBAQCBpbnQgUmVuZGVyQmxvY2s6OmNvbGxhcHNlTWFyZ2lucyhSZW5kZXJCCiAg
ICAgaWYgKG1hcmdpbkluZm8ucXVpcmtDb250YWluZXIoKSAmJiBtYXJnaW5JbmZvLmF0VG9wT2ZC
bG9jaygpICYmIChwb3NUb3AgLSBuZWdUb3ApKQogICAgICAgICBtYXJnaW5JbmZvLnNldFRvcFF1
aXJrKHRvcFF1aXJrKTsKIAotICAgIGludCB5cG9zID0gaGVpZ2h0KCk7CisgICAgaW50IGJlZm9y
ZUNvbGxhcHNlWSA9IGhlaWdodCgpOworICAgIGludCB5cG9zID0gYmVmb3JlQ29sbGFwc2VZOwog
ICAgIGlmIChjaGlsZC0+aXNTZWxmQ29sbGFwc2luZ0Jsb2NrKCkpIHsKICAgICAgICAgLy8gVGhp
cyBjaGlsZCBoYXMgbm8gaGVpZ2h0LiAgV2UgbmVlZCB0byBjb21wdXRlIG91cgogICAgICAgICAv
LyBwb3NpdGlvbiBiZWZvcmUgd2UgY29sbGFwc2UgdGhlIGNoaWxkJ3MgbWFyZ2lucyB0b2dldGhl
ciwKQEAgLTE1MjcsNiArMTU0MywxNCBAQCBpbnQgUmVuZGVyQmxvY2s6OmNvbGxhcHNlTWFyZ2lu
cyhSZW5kZXJCCiAgICAgICAgICAgICBtYXJnaW5JbmZvLnNldEJvdHRvbVF1aXJrKGNoaWxkLT5p
c0JvdHRvbU1hcmdpblF1aXJrKCkgfHwgc3R5bGUoKS0+bWFyZ2luQm90dG9tQ29sbGFwc2UoKSA9
PSBNRElTQ0FSRCk7CiAgICAgfQogICAgIAorICAgIC8vIElmIG1hcmdpbnMgd291bGQgcHVsbCB1
cyBwYXN0IHRoZSB0b3Agb2YgdGhlIG5leHQgcGFnZSwgdGhlbiB3ZSBuZWVkIHRvIHB1bGwgYmFj
ayBhbmQgcHJldGVuZCBsaWtlIHRoZSBtYXJnaW5zCisgICAgLy8gY29sbGFwc2VkIGludG8gdGhl
IHBhZ2UgZWRnZS4KKyAgICBib29sIHBhZ2luYXRlZCA9IHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+
cGFnaW5hdGVkKCk7CisgICAgaWYgKHBhZ2luYXRlZCAmJiB5cG9zID4gYmVmb3JlQ29sbGFwc2VZ
KSB7CisgICAgICAgIGludCBvbGRZID0geXBvczsKKyAgICAgICAgeXBvcyA9IG1pbih5cG9zLCBu
ZXh0UGFnZVRvcChiZWZvcmVDb2xsYXBzZVkpKTsKKyAgICAgICAgc2V0SGVpZ2h0KGhlaWdodCgp
ICsgKHlwb3MgLSBvbGRZKSk7CisgICAgfQogICAgIHJldHVybiB5cG9zOwogfQogCkBAIC0xNTg2
LDcgKzE2MTAsMjQgQEAgaW50IFJlbmRlckJsb2NrOjplc3RpbWF0ZVZlcnRpY2FsUG9zaXRpbwog
ICAgICAgICBpbnQgY2hpbGRNYXJnaW5Ub3AgPSBjaGlsZC0+c2VsZk5lZWRzTGF5b3V0KCkgPyBj
aGlsZC0+bWFyZ2luVG9wKCkgOiBjaGlsZC0+Y29sbGFwc2VkTWFyZ2luVG9wKCk7CiAgICAgICAg
IHlQb3NFc3RpbWF0ZSArPSBtYXgobWFyZ2luSW5mby5tYXJnaW4oKSwgY2hpbGRNYXJnaW5Ub3Ap
OwogICAgIH0KKyAgICAKKyAgICBib29sIHBhZ2luYXRlZCA9IHZpZXcoKS0+bGF5b3V0U3RhdGUo
KS0+cGFnaW5hdGVkKCk7CisKKyAgICAvLyBBZGp1c3QgeVBvc0VzdGltYXRlIGRvd24gdG8gdGhl
IG5leHQgcGFnZSBpZiB0aGUgbWFyZ2lucyBhcmUgc28gbGFyZ2UgdGhhdCB3ZSBkb24ndCBmaXQg
b24gdGhlIGN1cnJlbnQKKyAgICAvLyBwYWdlLgorICAgIGlmIChwYWdpbmF0ZWQgJiYgeVBvc0Vz
dGltYXRlID4gaGVpZ2h0KCkpCisgICAgICAgIHlQb3NFc3RpbWF0ZSA9IG1pbih5UG9zRXN0aW1h
dGUsIG5leHRQYWdlVG9wKGhlaWdodCgpKSk7CisKICAgICB5UG9zRXN0aW1hdGUgKz0gZ2V0Q2xl
YXJEZWx0YShjaGlsZCwgeVBvc0VzdGltYXRlKTsKKyAgICAKKyAgICBpZiAocGFnaW5hdGVkKSB7
CisgICAgICAgIC8vIElmIHRoZSBvYmplY3QgaGFzIGEgcGFnZSBvciBjb2x1bW4gYnJlYWsgdmFs
dWUgb2YgImJlZm9yZSIsIHRoZW4gd2Ugc2hvdWxkIHNoaWZ0IHRvIHRoZSB0b3Agb2YgdGhlIG5l
eHQgcGFnZS4KKyAgICAgICAgeVBvc0VzdGltYXRlID0gYXBwbHlCZWZvcmVCcmVhayhjaGlsZCwg
eVBvc0VzdGltYXRlKTsKKyAgICAKKyAgICAgICAgLy8gRm9yIHJlcGxhY2VkIGVsZW1lbnRzIGFu
ZCBzY3JvbGxlZCBlbGVtZW50cywgd2Ugd2FudCB0byBzaGlmdCB0aGVtIHRvIHRoZSBuZXh0IHBh
Z2UgaWYgdGhleSBkb24ndCBmaXQgb24gdGhlIGN1cnJlbnQgb25lLgorICAgICAgICB5UG9zRXN0
aW1hdGUgPSBhZGp1c3RGb3JVbnNwbGl0dGFibGVDaGlsZChjaGlsZCwgeVBvc0VzdGltYXRlKTsK
KyAgICB9CisKICAgICByZXR1cm4geVBvc0VzdGltYXRlOwogfQogCkBAIC0xNzg3LDEwICsxODI4
LDEwIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrQ2hpbGQoUmVuZGUKICAgICAgICAg
ICAgIG1hcmtEZXNjZW5kYW50c1dpdGhGbG9hdHMgPSB0cnVlOwogICAgIH0KIAotICAgIGlmIChj
aGlsZC0+aXNSZW5kZXJCbG9jaygpKSB7CisgICAgUmVuZGVyQmxvY2sqIGNoaWxkQmxvY2tGbG93
ID0gY2hpbGQtPmlzQmxvY2tGbG93KCkgPyB0b1JlbmRlckJsb2NrKGNoaWxkKSA6IDA7CisgICAg
aWYgKGNoaWxkQmxvY2tGbG93KSB7CiAgICAgICAgIGlmIChtYXJrRGVzY2VuZGFudHNXaXRoRmxv
YXRzKQotICAgICAgICAgICAgdG9SZW5kZXJCbG9jayhjaGlsZCktPm1hcmtBbGxEZXNjZW5kYW50
c1dpdGhGbG9hdHNGb3JMYXlvdXQoKTsKLQorICAgICAgICAgICAgY2hpbGRCbG9ja0Zsb3ctPm1h
cmtBbGxEZXNjZW5kYW50c1dpdGhGbG9hdHNGb3JMYXlvdXQoKTsKICAgICAgICAgcHJldmlvdXNG
bG9hdEJvdHRvbSA9IG1heChwcmV2aW91c0Zsb2F0Qm90dG9tLCBvbGRSZWN0LnkoKSArIHRvUmVu
ZGVyQmxvY2soY2hpbGQpLT5mbG9hdEJvdHRvbSgpKTsKICAgICB9CiAKQEAgLTE3OTksNiArMTg0
MCw5IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrQ2hpbGQoUmVuZGUKICAgICBpZiAo
Y2hpbGROZWVkZWRMYXlvdXQpCiAgICAgICAgIGNoaWxkLT5sYXlvdXQoKTsKIAorICAgIC8vIENh
Y2hlIGlmIHdlIGFyZSBhdCB0aGUgdG9wIG9mIHRoZSBibG9jayByaWdodCBub3cuCisgICAgYm9v
bCBhdFRvcE9mQmxvY2sgPSBtYXJnaW5JbmZvLmF0VG9wT2ZCbG9jaygpOworCiAgICAgLy8gTm93
IGRldGVybWluZSB0aGUgY29ycmVjdCB5cG9zIGJhc2VkIG9mZiBleGFtaW5hdGlvbiBvZiBjb2xs
YXBzaW5nIG1hcmdpbgogICAgIC8vIHZhbHVlcy4KICAgICBpbnQgeUJlZm9yZUNsZWFyID0gY29s
bGFwc2VNYXJnaW5zKGNoaWxkLCBtYXJnaW5JbmZvKTsKQEAgLTE4MDYsNiArMTg1MCwzMiBAQCB2
b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9ja0NoaWxkKFJlbmRlCiAgICAgLy8gTm93IGNoZWNr
IGZvciBjbGVhci4KICAgICBpbnQgeUFmdGVyQ2xlYXIgPSBjbGVhckZsb2F0c0lmTmVlZGVkKGNo
aWxkLCBtYXJnaW5JbmZvLCBvbGRUb3BQb3NNYXJnaW4sIG9sZFRvcE5lZ01hcmdpbiwgeUJlZm9y
ZUNsZWFyKTsKICAgICAKKyAgICBib29sIHBhZ2luYXRlZCA9IHZpZXcoKS0+bGF5b3V0U3RhdGUo
KS0+cGFnaW5hdGVkKCk7CisgICAgaWYgKHBhZ2luYXRlZCkgeworICAgICAgICBpbnQgb2xkWSA9
IHlBZnRlckNsZWFyOworICAgICAgICAKKyAgICAgICAgLy8gSWYgdGhlIG9iamVjdCBoYXMgYSBw
YWdlIG9yIGNvbHVtbiBicmVhayB2YWx1ZSBvZiAiYmVmb3JlIiwgdGhlbiB3ZSBzaG91bGQgc2hp
ZnQgdG8gdGhlIHRvcCBvZiB0aGUgbmV4dCBwYWdlLgorICAgICAgICB5QWZ0ZXJDbGVhciA9IGFw
cGx5QmVmb3JlQnJlYWsoY2hpbGQsIHlBZnRlckNsZWFyKTsKKyAgICAKKyAgICAgICAgLy8gRm9y
IHJlcGxhY2VkIGVsZW1lbnRzIGFuZCBzY3JvbGxlZCBlbGVtZW50cywgd2Ugd2FudCB0byBzaGlm
dCB0aGVtIHRvIHRoZSBuZXh0IHBhZ2UgaWYgdGhleSBkb24ndCBmaXQgb24gdGhlIGN1cnJlbnQg
b25lLgorICAgICAgICB5QWZ0ZXJDbGVhciA9IGFkanVzdEZvclVuc3BsaXR0YWJsZUNoaWxkKGNo
aWxkLCB5QWZ0ZXJDbGVhcik7CisgICAgICAgIAorICAgICAgICBpZiAoY2hpbGRCbG9ja0Zsb3ct
PnBhZ2luYXRpb25TdHJ1dCgpKSB7CisgICAgICAgICAgICAvLyBXZSBhcmUgd2lsbGluZyB0byBw
cm9wYWdhdGUgb3V0IHRvIG91ciBwYXJlbnQgYmxvY2sgYXMgbG9uZyBhcyB3ZSB3ZXJlIGF0IHRo
ZSB0b3Agb2YgdGhlIGJsb2NrIHByaW9yCisgICAgICAgICAgICAvLyB0byBjb2xsYXBzaW5nIG91
ciBtYXJnaW5zLCBhbmQgYXMgbG9uZyBhcyB3ZSBkaWRuJ3QgY2xlYXIgb3IgbW92ZSBhcyBhIHJl
c3VsdCBvZiBvdGhlciBwYWdpbmF0aW9uLgorICAgICAgICAgICAgaWYgKGF0VG9wT2ZCbG9jayAm
JiBvbGRZID09IHlCZWZvcmVDbGVhciAmJiAhaXNQb3NpdGlvbmVkKCkgJiYgIWlzVGFibGVDZWxs
KCkpCisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFNob3VsZCByZWFsbHkgY2hlY2sgaWYgd2Un
cmUgZXhjZWVkaW5nIHRoZSBwYWdlIGhlaWdodCBiZWZvcmUgcHJvcGFnYXRpbmcgdGhlIHN0cnV0
LCBidXQgd2UgZG9uJ3QKKyAgICAgICAgICAgICAgICAvLyBoYXZlIGFsbCB0aGUgaW5mb3JtYXRp
b24gdG8gZG8gc28gKHRoZSBzdHJ1dCBvbmx5IGhhcyB0aGUgcmVtYWluaW5nIGFtb3VudCB0byBw
dXNoKS4gIEdlY2tvIGdldHMgdGhpcyB3cm9uZyB0b28KKyAgICAgICAgICAgICAgICAvLyBhbmQg
cHVzaGVzIHRvIHRoZSBuZXh0IHBhZ2UgYW55d2F5LCBzbyBub3QgdG9vIGNvbmNlcm5lZCBhYm91
dCBpdC4KKyAgICAgICAgICAgICAgICBzZXRQYWdpbmF0aW9uU3RydXQoeUFmdGVyQ2xlYXIgKyBj
aGlsZEJsb2NrRmxvdy0+cGFnaW5hdGlvblN0cnV0KCkpOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIHlBZnRlckNsZWFyICs9IGNoaWxkQmxvY2tGbG93LT5wYWdpbmF0aW9uU3Ry
dXQoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFNpbWlsYXIgdG8gaG93IHdlIGFwcGx5IGNs
ZWFyYW5jZS4gIEdvIGFoZWFkIGFuZCBib29zdCBoZWlnaHQoKSB0byBiZSB0aGUgcGxhY2Ugd2hl
cmUgd2UncmUgZ29pbmcgdG8gcG9zaXRpb24gdGhlIGNoaWxkLgorICAgICAgICBzZXRIZWlnaHQo
aGVpZ2h0KCkgKyAoeUFmdGVyQ2xlYXIgLSBvbGRZKSk7CisgICAgfQorCiAgICAgdmlldygpLT5h
ZGRMYXlvdXREZWx0YShJbnRTaXplKDAsIHlQb3NFc3RpbWF0ZSAtIHlBZnRlckNsZWFyKSk7CiAg
ICAgY2hpbGQtPnNldExvY2F0aW9uKGNoaWxkLT54KCksIHlBZnRlckNsZWFyKTsKIApAQCAtMTgx
OCw4ICsxODg4LDEzIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrQ2hpbGQoUmVuZGUK
ICAgICAgICAgICAgIC8vIFNvIGdvIGFoZWFkIGFuZCBtYXJrIHRoZSBpdGVtIGFzIGRpcnR5Lgog
ICAgICAgICAgICAgY2hpbGQtPnNldENoaWxkTmVlZHNMYXlvdXQodHJ1ZSwgZmFsc2UpOwogICAg
ICAgICB9Ci0gICAgICAgIGlmICghY2hpbGQtPmF2b2lkc0Zsb2F0cygpICYmIGNoaWxkLT5pc0Js
b2NrRmxvdygpICYmIHRvUmVuZGVyQmxvY2soY2hpbGQpLT5jb250YWluc0Zsb2F0cygpKQotICAg
ICAgICAgICAgdG9SZW5kZXJCbG9jayhjaGlsZCktPm1hcmtBbGxEZXNjZW5kYW50c1dpdGhGbG9h
dHNGb3JMYXlvdXQoKTsKKyAgICAgICAgaWYgKGNoaWxkQmxvY2tGbG93KSB7CisgICAgICAgICAg
ICBpZiAocGFnaW5hdGVkKQorICAgICAgICAgICAgICAgIGNoaWxkQmxvY2tGbG93LT5tYXJrRGVz
Y2VuZGFudEJsb2Nrc0FuZExpbmVzRm9yTGF5b3V0KCk7CisgICAgICAgICAgICBlbHNlIGlmICgh
Y2hpbGQtPmF2b2lkc0Zsb2F0cygpICYmIGNoaWxkQmxvY2tGbG93LT5jb250YWluc0Zsb2F0cygp
KQorICAgICAgICAgICAgICAgIGNoaWxkQmxvY2tGbG93LT5tYXJrQWxsRGVzY2VuZGFudHNXaXRo
RmxvYXRzRm9yTGF5b3V0KCk7CisgICAgICAgIH0KKwogICAgICAgICAvLyBPdXIgZ3Vlc3Mgd2Fz
IHdyb25nLiBNYWtlIHRoZSBjaGlsZCBsYXkgaXRzZWxmIG91dCBhZ2Fpbi4KICAgICAgICAgY2hp
bGQtPmxheW91dElmTmVlZGVkKCk7CiAgICAgfQpAQCAtMTg0MCw3ICsxOTE1LDcgQEAgdm9pZCBS
ZW5kZXJCbG9jazo6bGF5b3V0QmxvY2tDaGlsZChSZW5kZQogICAgIH0KICAgICAvLyBJZiB0aGUg
Y2hpbGQgaGFzIG92ZXJoYW5naW5nIGZsb2F0cyB0aGF0IGludHJ1ZGUgaW50byBmb2xsb3dpbmcg
c2libGluZ3MgKG9yIHBvc3NpYmx5IG91dAogICAgIC8vIG9mIHRoaXMgYmxvY2spLCB0aGVuIHRo
ZSBwYXJlbnQgZ2V0cyBub3RpZmllZCBvZiB0aGUgZmxvYXRzIG5vdy4KLSAgICBpZiAoY2hpbGQt
PmlzQmxvY2tGbG93KCkgJiYgdG9SZW5kZXJCbG9jayhjaGlsZCktPmNvbnRhaW5zRmxvYXRzKCkp
CisgICAgaWYgKGNoaWxkQmxvY2tGbG93ICYmIGNoaWxkQmxvY2tGbG93LT5jb250YWluc0Zsb2F0
cygpKQogICAgICAgICBtYXhGbG9hdEJvdHRvbSA9IG1heChtYXhGbG9hdEJvdHRvbSwgYWRkT3Zl
cmhhbmdpbmdGbG9hdHModG9SZW5kZXJCbG9jayhjaGlsZCksIC1jaGlsZC0+eCgpLCAtY2hpbGQt
PnkoKSwgIWNoaWxkTmVlZGVkTGF5b3V0KSk7CiAKICAgICBJbnRTaXplIGNoaWxkT2Zmc2V0KGNo
aWxkLT54KCkgLSBvbGRSZWN0LngoKSwgY2hpbGQtPnkoKSAtIG9sZFJlY3QueSgpKTsKQEAgLTE4
NTksNiArMTkzNCwxMyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9ja0NoaWxkKFJlbmRl
CiAgICAgICAgIGNoaWxkLT5yZXBhaW50T3ZlcmhhbmdpbmdGbG9hdHModHJ1ZSk7CiAgICAgfQog
CisgICAgaWYgKHBhZ2luYXRlZCkgeworICAgICAgICAvLyBDaGVjayBmb3IgYW4gYWZ0ZXIgcGFn
ZS9jb2x1bW4gYnJlYWsuCisgICAgICAgIGludCBuZXdIZWlnaHQgPSBhcHBseUFmdGVyQnJlYWso
Y2hpbGQsIGhlaWdodCgpLCBtYXJnaW5JbmZvKTsKKyAgICAgICAgaWYgKG5ld0hlaWdodCAhPSBo
ZWlnaHQoKSkKKyAgICAgICAgICAgIHNldEhlaWdodChuZXdIZWlnaHQpOworICAgIH0KKwogICAg
IEFTU0VSVChvbGRMYXlvdXREZWx0YSA9PSB2aWV3KCktPmxheW91dERlbHRhKCkpOwogfQogCkBA
IC0xODg5LDYgKzE5NzEsOSBAQCBib29sIFJlbmRlckJsb2NrOjpsYXlvdXRPbmx5UG9zaXRpb25l
ZE9iCiB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRQb3NpdGlvbmVkT2JqZWN0cyhib29sIHJlbGF5
b3V0Q2hpbGRyZW4pCiB7CiAgICAgaWYgKG1fcG9zaXRpb25lZE9iamVjdHMpIHsKKyAgICAgICAg
aWYgKGhhc0NvbHVtbnMoKSkKKyAgICAgICAgICAgIHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+Y2xl
YXJQYWdpbmF0aW9uSW5mb3JtYXRpb24oKTsgLy8gUG9zaXRpb25lZCBvYmplY3RzIGFyZSBub3Qg
cGFydCBvZiB0aGUgY29sdW1uIGZsb3csIHNvIHRoZXkgZG9uJ3QgcGFnaW5hdGUgd2l0aCB0aGUg
Y29sdW1ucy4KKwogICAgICAgICBSZW5kZXJCb3gqIHI7CiAgICAgICAgIEl0ZXJhdG9yIGVuZCA9
IG1fcG9zaXRpb25lZE9iamVjdHMtPmVuZCgpOwogICAgICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0g
bV9wb3NpdGlvbmVkT2JqZWN0cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CkBAIC0xOTEw
LDYgKzE5OTUsOSBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRQb3NpdGlvbmVkT2JqZWN0CiAg
ICAgICAgICAgICAgICAgci0+dHJ5TGF5b3V0RG9pbmdQb3NpdGlvbmVkTW92ZW1lbnRPbmx5KCk7
CiAgICAgICAgICAgICByLT5sYXlvdXRJZk5lZWRlZCgpOwogICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBpZiAoaGFzQ29sdW1ucygpKQorICAgICAgICAgICAgdmlldygpLT5sYXlvdXRTdGF0
ZSgpLT5tX2NvbHVtbkluZm8gPSBjb2x1bW5JbmZvKCk7IC8vIEZJWE1FOiBLaW5kIG9mIGdyb3Nz
LiBXZSBqdXN0IHB1dCB0aGlzIGJhY2sgaW50byB0aGUgbGF5b3V0IHN0YXRlIHNvIHRoYXQgcG9w
KCkgd2lsbCB3b3JrLgogICAgIH0KIH0KIApAQCAtMTk5NywxMiArMjA4NSwxMiBAQCB2b2lkIFJl
bmRlckJsb2NrOjpwYWludENvbHVtblJ1bGVzKFBhaW50CiAKICAgICAvLyBXZSBuZWVkIHRvIGRv
IG11bHRpcGxlIHBhc3NlcywgYnJlYWtpbmcgdXAgb3VyIGNoaWxkIHBhaW50aW5nIGludG8gc3Ry
aXBzLgogICAgIENvbHVtbkluZm8qIGNvbEluZm8gPSBjb2x1bW5JbmZvKCk7Ci0gICAgdW5zaWdu
ZWQgY29sQ291bnQgPSBjb2xJbmZvLT5jb2x1bW5Db3VudCgpOworICAgIHVuc2lnbmVkIGNvbENv
dW50ID0gY29sdW1uQ291bnQoY29sSW5mbyk7CiAgICAgaW50IGN1cnJYT2Zmc2V0ID0gc3R5bGUo
KS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8gMCA6IGNvbnRlbnRXaWR0aCgpOwogICAgIGludCBydWxl
QWRkID0gYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKTsKICAgICBpbnQgcnVsZVggPSBzdHls
ZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIgPyAwIDogY29udGVudFdpZHRoKCk7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGNvbENvdW50OyBpKyspIHsKLSAgICAgICAgSW50UmVjdCBjb2xS
ZWN0ID0gY29sSW5mby0+Y29sdW1uUmVjdEF0KGkpOworICAgICAgICBJbnRSZWN0IGNvbFJlY3Qg
PSBjb2x1bW5SZWN0QXQoY29sSW5mbywgaSk7CiAKICAgICAgICAgLy8gTW92ZSB0byB0aGUgbmV4
dCBwb3NpdGlvbi4KICAgICAgICAgaWYgKHN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUikgewpA
QCAtMjAzMywxNCArMjEyMSwxNCBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWludENvbHVtbkNvbnRl
bnRzKFBhCiAgICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQ7
CiAgICAgaW50IGNvbEdhcCA9IGNvbHVtbkdhcCgpOwogICAgIENvbHVtbkluZm8qIGNvbEluZm8g
PSBjb2x1bW5JbmZvKCk7Ci0gICAgdW5zaWduZWQgY29sQ291bnQgPSBjb2xJbmZvLT5jb2x1bW5D
b3VudCgpOworICAgIHVuc2lnbmVkIGNvbENvdW50ID0gY29sdW1uQ291bnQoY29sSW5mbyk7CiAg
ICAgaWYgKCFjb2xDb3VudCkKICAgICAgICAgcmV0dXJuOwotICAgIGludCBjdXJyWE9mZnNldCA9
IHN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUiA/IDAgOiBjb250ZW50V2lkdGgoKSAtIGNvbElu
Zm8tPmNvbHVtblJlY3RBdCgwKS53aWR0aCgpOworICAgIGludCBjdXJyWE9mZnNldCA9IHN0eWxl
KCktPmRpcmVjdGlvbigpID09IExUUiA/IDAgOiBjb250ZW50V2lkdGgoKSAtIGNvbHVtblJlY3RB
dChjb2xJbmZvLCAwKS53aWR0aCgpOwogICAgIGludCBjdXJyWU9mZnNldCA9IDA7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvbENvdW50OyBpKyspIHsKICAgICAgICAgLy8gRm9yIGVh
Y2ggcmVjdCwgd2UgY2xpcCB0byB0aGUgcmVjdCwgYW5kIHRoZW4gd2UgYWRqdXN0IG91ciBjb29y
ZHMuCi0gICAgICAgIEludFJlY3QgY29sUmVjdCA9IGNvbEluZm8tPmNvbHVtblJlY3RBdChpKTsK
KyAgICAgICAgSW50UmVjdCBjb2xSZWN0ID0gY29sdW1uUmVjdEF0KGNvbEluZm8sIGkpOwogICAg
ICAgICBjb2xSZWN0Lm1vdmUodHgsIHR5KTsKICAgICAgICAgUGFpbnRJbmZvIGluZm8ocGFpbnRJ
bmZvKTsKICAgICAgICAgaW5mby5yZWN0LmludGVyc2VjdChjb2xSZWN0KTsKQEAgLTIwOTgsMTQg
KzIxODYsMTMgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRDaGlsZHJlbihQYWludEluZgogICAg
IGluZm8udXBkYXRlUGFpbnRpbmdSb290Rm9yQ2hpbGRyZW4odGhpcyk7CiAgICAgCiAgICAgUmVu
ZGVyVmlldyogcmVuZGVyVmlldyA9IHZpZXcoKTsKLSAgICBib29sIHVzZVByaW50UmVjdCA9ICFy
ZW5kZXJWaWV3LT5wcmludFJlY3QoKS5pc0VtcHR5KCkgJiYgIWRvY3VtZW50KCktPnNldHRpbmdz
KCktPnBhZ2luYXRlRHVyaW5nTGF5b3V0RW5hYmxlZCgpOworICAgIGJvb2wgdXNlUHJpbnRSZWN0
ID0gIXJlbmRlclZpZXctPnByaW50UmVjdCgpLmlzRW1wdHkoKTsKICAgICAKICAgICBib29sIGNo
ZWNrUGFnZUJyZWFrcyA9IGRvY3VtZW50KCktPnBhZ2luYXRlZCgpICYmICFkb2N1bWVudCgpLT5z
ZXR0aW5ncygpLT5wYWdpbmF0ZUR1cmluZ0xheW91dEVuYWJsZWQoKTsKLSAgICBib29sIGNoZWNr
Q29sdW1uQnJlYWtzID0gIWNoZWNrUGFnZUJyZWFrcyAmJiB1c2VQcmludFJlY3Q7CiAKICAgICBm
b3IgKFJlbmRlckJveCogY2hpbGQgPSBmaXJzdENoaWxkQm94KCk7IGNoaWxkOyBjaGlsZCA9IGNo
aWxkLT5uZXh0U2libGluZ0JveCgpKSB7ICAgICAgICAKICAgICAgICAgLy8gQ2hlY2sgZm9yIHBh
Z2UtYnJlYWstYmVmb3JlOiBhbHdheXMsIGFuZCBpZiBpdCdzIHNldCwgYnJlYWsgYW5kIGJhaWwu
Ci0gICAgICAgIGJvb2wgY2hlY2tCZWZvcmVBbHdheXMgPSAhY2hpbGRyZW5JbmxpbmUoKSAmJiAo
KGNoZWNrUGFnZUJyZWFrcyAmJiBjaGlsZC0+c3R5bGUoKS0+cGFnZUJyZWFrQmVmb3JlKCkgPT0g
UEJBTFdBWVMpIHx8IChjaGVja0NvbHVtbkJyZWFrcyAmJiBjaGlsZC0+c3R5bGUoKS0+Y29sdW1u
QnJlYWtCZWZvcmUoKSA9PSBQQkFMV0FZUykpOworICAgICAgICBib29sIGNoZWNrQmVmb3JlQWx3
YXlzID0gIWNoaWxkcmVuSW5saW5lKCkgJiYgKGNoZWNrUGFnZUJyZWFrcyAmJiBjaGlsZC0+c3R5
bGUoKS0+cGFnZUJyZWFrQmVmb3JlKCkgPT0gUEJBTFdBWVMpOwogICAgICAgICBpZiAoY2hlY2tC
ZWZvcmVBbHdheXMKICAgICAgICAgICAgICYmICh0eSArIGNoaWxkLT55KCkpID4gcGFpbnRJbmZv
LnJlY3QueSgpCiAgICAgICAgICAgICAmJiAodHkgKyBjaGlsZC0+eSgpKSA8IHBhaW50SW5mby5y
ZWN0LmJvdHRvbSgpKSB7CkBAIC0yMTI4LDcgKzIyMTUsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpw
YWludENoaWxkcmVuKFBhaW50SW5mCiAgICAgICAgICAgICBjaGlsZC0+cGFpbnQoaW5mbywgdHgs
IHR5KTsKIAogICAgICAgICAvLyBDaGVjayBmb3IgcGFnZS1icmVhay1hZnRlcjogYWx3YXlzLCBh
bmQgaWYgaXQncyBzZXQsIGJyZWFrIGFuZCBiYWlsLgotICAgICAgICBib29sIGNoZWNrQWZ0ZXJB
bHdheXMgPSAhY2hpbGRyZW5JbmxpbmUoKSAmJiAoKGNoZWNrUGFnZUJyZWFrcyAmJiBjaGlsZC0+
c3R5bGUoKS0+cGFnZUJyZWFrQWZ0ZXIoKSA9PSBQQkFMV0FZUykgfHwgKGNoZWNrQ29sdW1uQnJl
YWtzICYmIGNoaWxkLT5zdHlsZSgpLT5jb2x1bW5CcmVha0FmdGVyKCkgPT0gUEJBTFdBWVMpKTsK
KyAgICAgICAgYm9vbCBjaGVja0FmdGVyQWx3YXlzID0gIWNoaWxkcmVuSW5saW5lKCkgJiYgKGNo
ZWNrUGFnZUJyZWFrcyAmJiBjaGlsZC0+c3R5bGUoKS0+cGFnZUJyZWFrQWZ0ZXIoKSA9PSBQQkFM
V0FZUyk7CiAgICAgICAgIGlmIChjaGVja0FmdGVyQWx3YXlzCiAgICAgICAgICAgICAmJiAodHkg
KyBjaGlsZC0+eSgpICsgY2hpbGQtPmhlaWdodCgpKSA+IHBhaW50SW5mby5yZWN0LnkoKQogICAg
ICAgICAgICAgJiYgKHR5ICsgY2hpbGQtPnkoKSArIGNoaWxkLT5oZWlnaHQoKSkgPCBwYWludElu
Zm8ucmVjdC5ib3R0b20oKSkgewpAQCAtMjc5NiwxMyArMjg4MywyMiBAQCB2b2lkIFJlbmRlckJs
b2NrOjppbnNlcnRGbG9hdGluZ09iamVjdChSCiAKICAgICAvLyBDcmVhdGUgdGhlIHNwZWNpYWwg
b2JqZWN0IGVudHJ5ICYgYXBwZW5kIGl0IHRvIHRoZSBsaXN0CiAKLSAgICBvLT5sYXlvdXRJZk5l
ZWRlZCgpOwotCiAgICAgRmxvYXRpbmdPYmplY3QqIG5ld09iaiA9IG5ldyBGbG9hdGluZ09iamVj
dChvLT5zdHlsZSgpLT5mbG9hdGluZygpID09IEZMRUZUID8gRmxvYXRpbmdPYmplY3Q6OkZsb2F0
TGVmdCA6IEZsb2F0aW5nT2JqZWN0OjpGbG9hdFJpZ2h0KTsKIAogICAgIG5ld09iai0+bV90b3Ag
PSAtMTsKICAgICBuZXdPYmotPm1fYm90dG9tID0gLTE7CisgICAgCisgICAgLy8gT3VyIGxvY2F0
aW9uIGlzIGlycmVsZXZhbnQgaWYgd2UncmUgdW5zcGxpdHRhYmxlIG9yIG5vIHBhZ2luYXRpb24g
aXMgaW4gZWZmZWN0LiAgSnVzdCBnbyBhaGVhZAorICAgIC8vIGFuZCBsYXkgb3V0IHRoZSBmbG9h
dC4KKyAgICBib29sIGFmZmVjdGVkQnlQYWdpbmF0aW9uID0gby0+aXNSZW5kZXJCbG9jaygpICYm
IHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+bV9wYWdlSGVpZ2h0OworICAgIGlmICghYWZmZWN0ZWRC
eVBhZ2luYXRpb24pCisgICAgICAgIG8tPmxheW91dElmTmVlZGVkKCk7CisgICAgZWxzZSB7Cisg
ICAgICAgIG8tPmNhbGNXaWR0aCgpOworICAgICAgICBvLT5jYWxjVmVydGljYWxNYXJnaW5zKCk7
CisgICAgfQogICAgIG5ld09iai0+bV93aWR0aCA9IG8tPndpZHRoKCkgKyBvLT5tYXJnaW5MZWZ0
KCkgKyBvLT5tYXJnaW5SaWdodCgpOworCiAgICAgbmV3T2JqLT5tX3Nob3VsZFBhaW50ID0gIW8t
Pmhhc1NlbGZQYWludGluZ0xheWVyKCk7IC8vIElmIGEgbGF5ZXIgZXhpc3RzLCB0aGUgZmxvYXQg
d2lsbCBwYWludCBpdHNlbGYuICBPdGhlcndpc2Ugc29tZW9uZSBlbHNlIHdpbGwuCiAgICAgbmV3
T2JqLT5tX2lzRGVzY2VuZGFudCA9IHRydWU7CiAgICAgbmV3T2JqLT5tX3JlbmRlcmVyID0gbzsK
QEAgLTI4NjcsMTYgKzI5NjMsMTUgQEAgYm9vbCBSZW5kZXJCbG9jazo6cG9zaXRpb25OZXdGbG9h
dHMoKQogICAgICAgICB9CiAKICAgICAgICAgUmVuZGVyQm94KiBvID0gZi0+bV9yZW5kZXJlcjsK
LSAgICAgICAgaW50IF9oZWlnaHQgPSBvLT5oZWlnaHQoKSArIG8tPm1hcmdpblRvcCgpICsgby0+
bWFyZ2luQm90dG9tKCk7CiAKICAgICAgICAgaW50IHJvID0gcmlnaHRPZmZzZXQoKTsgLy8gQ29u
c3RhbnQgcGFydCBvZiByaWdodCBvZmZzZXQuCi0gICAgICAgIGludCBsbyA9IGxlZnRPZmZzZXQo
KTsgLy8gQ29uc3RhdCBwYXJ0IG9mIGxlZnQgb2Zmc2V0LgorICAgICAgICBpbnQgbG8gPSBsZWZ0
T2Zmc2V0KCk7IC8vIENvbnN0YW50IHBhcnQgb2YgbGVmdCBvZmZzZXQuCiAgICAgICAgIGludCBm
d2lkdGggPSBmLT5tX3dpZHRoOyAvLyBUaGUgd2lkdGggd2UgbG9vayBmb3IuCiAgICAgICAgIGlm
IChybyAtIGxvIDwgZndpZHRoKQogICAgICAgICAgICAgZndpZHRoID0gcm8gLSBsbzsgLy8gTmV2
ZXIgbG9vayBmb3IgbW9yZSB0aGFuIHdoYXQgd2lsbCBiZSBhdmFpbGFibGUuCiAgICAgICAgIAog
ICAgICAgICBJbnRSZWN0IG9sZFJlY3Qoby0+eCgpLCBvLT55KCkgLCBvLT53aWR0aCgpLCBvLT5o
ZWlnaHQoKSk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChvLT5zdHlsZSgpLT5jbGVhcigpICYg
Q0xFRlQpCiAgICAgICAgICAgICB5ID0gbWF4KGxlZnRCb3R0b20oKSwgeSk7CiAgICAgICAgIGlm
IChvLT5zdHlsZSgpLT5jbGVhcigpICYgQ1JJR0hUKQpAQCAtMjkwNSw5ICszMDAwLDM1IEBAIGJv
b2wgUmVuZGVyQmxvY2s6OnBvc2l0aW9uTmV3RmxvYXRzKCkKICAgICAgICAgICAgIG8tPnNldExv
Y2F0aW9uKGZ4IC0gby0+bWFyZ2luUmlnaHQoKSAtIG8tPndpZHRoKCksIHkgKyBvLT5tYXJnaW5U
b3AoKSk7CiAgICAgICAgIH0KIAotICAgICAgICBmLT5tX3RvcCA9IHk7Ci0gICAgICAgIGYtPm1f
Ym90dG9tID0gZi0+bV90b3AgKyBfaGVpZ2h0OworICAgICAgICBpZiAodmlldygpLT5sYXlvdXRT
dGF0ZSgpLT5tX3BhZ2VIZWlnaHQpIHsKKyAgICAgICAgICAgIFJlbmRlckJsb2NrKiBjaGlsZEJs
b2NrID0gby0+aXNSZW5kZXJCbG9jaygpID8gdG9SZW5kZXJCbG9jayhvKSA6IDA7CiAKKyAgICAg
ICAgICAgIGlmIChjaGlsZEJsb2NrICYmIG9sZFJlY3QubG9jYXRpb24oKSAhPSBvLT5sb2NhdGlv
bigpKQorICAgICAgICAgICAgICAgIGNoaWxkQmxvY2stPm1hcmtEZXNjZW5kYW50QmxvY2tzQW5k
TGluZXNGb3JMYXlvdXQoKTsKKyAgICAgICAgICAgIG8tPmxheW91dElmTmVlZGVkKCk7CisKKyAg
ICAgICAgICAgIC8vIElmIHdlIGFyZSB1bnNwbGl0dGFibGUgYW5kIGRvbid0IGZpdCwgdGhlbiB3
ZSBuZWVkIHRvIG1vdmUgZG93bi4KKyAgICAgICAgICAgIC8vIFdlIGluY2x1ZGUgb3VyIG1hcmdp
bnMgYXMgcGFydCBvZiB0aGUgdW5zcGxpdHRhYmxlIGFyZWEuCisgICAgICAgICAgICBpbnQgbmV3
WSA9IGFkanVzdEZvclVuc3BsaXR0YWJsZUNoaWxkKG8sIHksIHRydWUpOworICAgICAgICAgICAg
CisgICAgICAgICAgICAvLyBTZWUgaWYgd2UgaGF2ZSBhIHBhZ2luYXRpb24gc3RydXQgdGhhdCBp
cyBtYWtpbmcgdXMgbW92ZSBkb3duIGZ1cnRoZXIuCisgICAgICAgICAgICAvLyBOb3RlIHRoYXQg
YW4gdW5zcGxpdHRhYmxlIGNoaWxkIGNhbid0IGFsc28gaGF2ZSBhIHBhZ2luYXRpb24gc3RydXQs
IHNvIHRoaXMgaXMKKyAgICAgICAgICAgIC8vIGV4Y2x1c2l2ZSB3aXRoIHRoZSBjYXNlIGFib3Zl
LgorICAgICAgICAgICAgaWYgKGNoaWxkQmxvY2sgJiYgY2hpbGRCbG9jay0+cGFnaW5hdGlvblN0
cnV0KCkpCisgICAgICAgICAgICAgICAgbmV3WSArPSBjaGlsZEJsb2NrLT5wYWdpbmF0aW9uU3Ry
dXQoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG5ld1kgIT0geSkgeworICAgICAg
ICAgICAgICAgIHkgPSBuZXdZOworICAgICAgICAgICAgICAgIG8tPnNldFkoeSArIG8tPm1hcmdp
blRvcCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoY2hpbGRCbG9jaykKKyAgICAgICAgICAgICAg
ICAgICAgY2hpbGRCbG9jay0+bWFya0Rlc2NlbmRhbnRCbG9ja3NBbmRMaW5lc0ZvckxheW91dCgp
OworICAgICAgICAgICAgICAgIG8tPmxheW91dElmTmVlZGVkKCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICBmLT5tX3RvcCA9IHk7CisgICAgICAgIGYtPm1fYm90dG9tID0g
Zi0+bV90b3AgKyBvLT5tYXJnaW5Ub3AoKSArIG8tPmhlaWdodCgpICsgby0+bWFyZ2luQm90dG9t
KCk7CisgICAgICAgIAogICAgICAgICAvLyBJZiB0aGUgY2hpbGQgbW92ZWQsIHdlIGhhdmUgdG8g
cmVwYWludCBpdC4KICAgICAgICAgaWYgKG8tPmNoZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgp
KQogICAgICAgICAgICAgby0+cmVwYWludER1cmluZ0xheW91dElmTW92ZWQob2xkUmVjdCk7CkBA
IC0zMTU4LDggKzMyNzksOCBAQCBpbnQgUmVuZGVyQmxvY2s6Omxvd2VzdFBvc2l0aW9uKGJvb2wg
aW5jCiAKICAgICBpZiAoaGFzQ29sdW1ucygpKSB7CiAgICAgICAgIENvbHVtbkluZm8qIGNvbElu
Zm8gPSBjb2x1bW5JbmZvKCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb2xJ
bmZvLT5jb2x1bW5Db3VudCgpOyBpKyspCi0gICAgICAgICAgICBib3R0b20gPSBtYXgoYm90dG9t
LCBjb2xJbmZvLT5jb2x1bW5SZWN0QXQoaSkuYm90dG9tKCkgKyByZWxhdGl2ZU9mZnNldCk7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb2x1bW5Db3VudChjb2xJbmZvKTsgaSsr
KQorICAgICAgICAgICAgYm90dG9tID0gbWF4KGJvdHRvbSwgY29sdW1uUmVjdEF0KGNvbEluZm8s
IGkpLmJvdHRvbSgpICsgcmVsYXRpdmVPZmZzZXQpOwogICAgICAgICByZXR1cm4gYm90dG9tOwog
ICAgIH0KIApAQCAtMzI1Myw4ICszMzc0LDkgQEAgaW50IFJlbmRlckJsb2NrOjpyaWdodG1vc3RQ
b3NpdGlvbihib29sIAogICAgICAgICAvLyBUaGlzIG9ubHkgbWF0dGVycyBmb3IgTFRSCiAgICAg
ICAgIGlmIChzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIpIHsKICAgICAgICAgICAgIENvbHVt
bkluZm8qIGNvbEluZm8gPSBjb2x1bW5JbmZvKCk7Ci0gICAgICAgICAgICBpZiAoY29sSW5mby0+
Y29sdW1uQ291bnQoKSkKLSAgICAgICAgICAgICAgICByaWdodCA9IG1heChjb2xJbmZvLT5jb2x1
bW5SZWN0QXQoY29sSW5mby0+Y29sdW1uQ291bnQoKSAtIDEpLnJpZ2h0KCkgKyByZWxhdGl2ZU9m
ZnNldCwgcmlnaHQpOworICAgICAgICAgICAgdW5zaWduZWQgY291bnQgPSBjb2x1bW5Db3VudChj
b2xJbmZvKTsKKyAgICAgICAgICAgIGlmIChjb3VudCkKKyAgICAgICAgICAgICAgICByaWdodCA9
IG1heChjb2x1bW5SZWN0QXQoY29sSW5mbywgY291bnQgLSAxKS5yaWdodCgpICsgcmVsYXRpdmVP
ZmZzZXQsIHJpZ2h0KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gcmlnaHQ7CiAgICAgfQpA
QCAtMzM1Myw4ICszNDc1LDkgQEAgaW50IFJlbmRlckJsb2NrOjpsZWZ0bW9zdFBvc2l0aW9uKGJv
b2wgaQogICAgICAgICAvLyBUaGlzIG9ubHkgbWF0dGVycyBmb3IgUlRMCiAgICAgICAgIGlmIChz
dHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBSVEwpIHsKICAgICAgICAgICAgIENvbHVtbkluZm8qIGNv
bEluZm8gPSBjb2x1bW5JbmZvKCk7Ci0gICAgICAgICAgICBpZiAoY29sSW5mby0+Y29sdW1uQ291
bnQoKSkKLSAgICAgICAgICAgICAgICBsZWZ0ID0gbWluKGNvbEluZm8tPmNvbHVtblJlY3RBdChj
b2xJbmZvLT5jb2x1bW5Db3VudCgpIC0gMSkueCgpICsgcmVsYXRpdmVPZmZzZXQsIGxlZnQpOwor
ICAgICAgICAgICAgdW5zaWduZWQgY291bnQgPSBjb2x1bW5Db3VudChjb2xJbmZvKTsKKyAgICAg
ICAgICAgIGlmIChjb3VudCkKKyAgICAgICAgICAgICAgICBsZWZ0ID0gbWluKGNvbHVtblJlY3RB
dChjb2xJbmZvLCBjb3VudCAtIDEpLngoKSArIHJlbGF0aXZlT2Zmc2V0LCBsZWZ0KTsKICAgICAg
ICAgfQogICAgICAgICByZXR1cm4gbGVmdDsKICAgICB9CkBAIC0zNjY0LDMwICszNzg3LDIxIEBA
IHZvaWQgUmVuZGVyQmxvY2s6Om1hcmtBbGxEZXNjZW5kYW50c1dpdGgKICAgICB9CiB9CiAKLWlu
dCBSZW5kZXJCbG9jazo6dmlzaWJsZVRvcE9mSGlnaGVzdEZsb2F0RXh0ZW5kaW5nQmVsb3coaW50
IGJvdHRvbSwgaW50IG1heEhlaWdodCkgY29uc3QKK3ZvaWQgUmVuZGVyQmxvY2s6Om1hcmtEZXNj
ZW5kYW50QmxvY2tzQW5kTGluZXNGb3JMYXlvdXQoYm9vbCBpbkxheW91dCkKIHsKLSAgICBpbnQg
dG9wID0gYm90dG9tOwotICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0cykgewotICAgICAgICBGbG9h
dGluZ09iamVjdCogZmxvYXRpbmdPYmplY3Q7Ci0gICAgICAgIGZvciAoRGVwcmVjYXRlZFB0ckxp
c3RJdGVyYXRvcjxGbG9hdGluZ09iamVjdD4gaXQoKm1fZmxvYXRpbmdPYmplY3RzKTsgKGZsb2F0
aW5nT2JqZWN0ID0gaXQuY3VycmVudCgpKTsgKytpdCkgewotICAgICAgICAgICAgUmVuZGVyQm94
KiBmbG9hdGluZ0JveCA9IGZsb2F0aW5nT2JqZWN0LT5tX3JlbmRlcmVyOwotICAgICAgICAgICAg
SW50UmVjdCB2aXNpYmxlT3ZlcmZsb3cgPSBmbG9hdGluZ0JveC0+dmlzaWJsZU92ZXJmbG93UmVj
dCgpOwotICAgICAgICAgICAgdmlzaWJsZU92ZXJmbG93Lm1vdmUoZmxvYXRpbmdCb3gtPngoKSwg
ZmxvYXRpbmdCb3gtPnkoKSk7Ci0gICAgICAgICAgICBpZiAodmlzaWJsZU92ZXJmbG93LnkoKSA8
IHRvcCAmJiB2aXNpYmxlT3ZlcmZsb3cuYm90dG9tKCkgPiBib3R0b20gJiYgdmlzaWJsZU92ZXJm
bG93LmhlaWdodCgpIDw9IG1heEhlaWdodCAmJiBmbG9hdGluZ0JveC0+Y29udGFpbmluZ0Jsb2Nr
KCkgPT0gdGhpcykKLSAgICAgICAgICAgICAgICB0b3AgPSB2aXNpYmxlT3ZlcmZsb3cueSgpOwot
ICAgICAgICB9Ci0gICAgfQorICAgIGlmICghbV9ldmVySGFkTGF5b3V0KQorICAgICAgICByZXR1
cm47CiAKLSAgICBpZiAoIWNoaWxkcmVuSW5saW5lKCkpIHsKLSAgICAgICAgZm9yIChSZW5kZXJP
YmplY3QqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNp
YmxpbmcoKSkgewotICAgICAgICAgICAgaWYgKGNoaWxkLT5pc0Zsb2F0aW5nT3JQb3NpdGlvbmVk
KCkgfHwgIWNoaWxkLT5pc1JlbmRlckJsb2NrKCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICBSZW5kZXJCbG9jayogY2hpbGRCbG9jayA9IHRvUmVuZGVyQmxvY2soY2hp
bGQpOwotICAgICAgICAgICAgdG9wID0gbWluKHRvcCwgY2hpbGRCbG9jay0+eSgpICsgY2hpbGRC
bG9jay0+dmlzaWJsZVRvcE9mSGlnaGVzdEZsb2F0RXh0ZW5kaW5nQmVsb3coYm90dG9tIC0gY2hp
bGRCbG9jay0+eSgpLCBtYXhIZWlnaHQpKTsKLSAgICAgICAgfQotICAgIH0KKyAgICBzZXRDaGls
ZE5lZWRzTGF5b3V0KHRydWUsICFpbkxheW91dCk7CiAKLSAgICByZXR1cm4gdG9wOworICAgIC8v
IEl0ZXJhdGUgb3ZlciBvdXIgY2hpbGRyZW4gYW5kIG1hcmsgdGhlbSBhcyBuZWVkZWQuCisgICAg
Zm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBj
aGlsZC0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBpZiAoY2hpbGQtPmlzUG9zaXRpb25lZCgp
IHx8ICFjaGlsZC0+aXNSZW5kZXJCbG9jaygpKQorICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIFJlbmRlckJsb2NrKiBjaGlsZEJsb2NrID0gdG9SZW5kZXJCbG9jayhjaGlsZCk7CisgICAg
ICAgIGlmICghY2hpbGRCbG9jay0+aXNJbmxpbmUoKSkKKyAgICAgICAgICAgIGNoaWxkQmxvY2st
Pm1hcmtEZXNjZW5kYW50QmxvY2tzQW5kTGluZXNGb3JMYXlvdXQoaW5MYXlvdXQpOworICAgIH0K
IH0KIAogaW50IFJlbmRlckJsb2NrOjpnZXRDbGVhckRlbHRhKFJlbmRlckJveCogY2hpbGQsIGlu
dCB5UG9zKQpAQCAtMzg0NywxNiArMzk2MSwxNiBAQCBib29sIFJlbmRlckJsb2NrOjpoaXRUZXN0
Q29sdW1ucyhjb25zdCBICiB7CiAgICAgLy8gV2UgbmVlZCB0byBkbyBtdWx0aXBsZSBwYXNzZXMs
IGJyZWFraW5nIHVwIG91ciBoaXQgdGVzdGluZyBpbnRvIHN0cmlwcy4KICAgICBDb2x1bW5JbmZv
KiBjb2xJbmZvID0gY29sdW1uSW5mbygpOwotICAgIGludCBjb2xDb3VudCA9IGNvbEluZm8tPmNv
bHVtbkNvdW50KCk7CisgICAgaW50IGNvbENvdW50ID0gY29sdW1uQ291bnQoY29sSW5mbyk7CiAg
ICAgaWYgKCFjb2xDb3VudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGludCBsZWZ0ID0g
Ym9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKTsKICAgICBpbnQgY3VycllPZmZzZXQgPSAwOwog
ICAgIGludCBpOwogICAgIGZvciAoaSA9IDA7IGkgPCBjb2xDb3VudDsgaSsrKQotICAgICAgICBj
dXJyWU9mZnNldCAtPSBjb2xJbmZvLT5jb2x1bW5SZWN0QXQoaSkuaGVpZ2h0KCk7CisgICAgICAg
IGN1cnJZT2Zmc2V0IC09IGNvbHVtblJlY3RBdChjb2xJbmZvLCBpKS5oZWlnaHQoKTsKICAgICBm
b3IgKGkgPSBjb2xDb3VudCAtIDE7IGkgPj0gMDsgaS0tKSB7Ci0gICAgICAgIEludFJlY3QgY29s
UmVjdCA9IGNvbEluZm8tPmNvbHVtblJlY3RBdChpKTsKKyAgICAgICAgSW50UmVjdCBjb2xSZWN0
ID0gY29sdW1uUmVjdEF0KGNvbEluZm8sIGkpOwogICAgICAgICBpbnQgY3VyclhPZmZzZXQgPSBj
b2xSZWN0LngoKSAtIGxlZnQ7CiAgICAgICAgIGN1cnJZT2Zmc2V0ICs9IGNvbFJlY3QuaGVpZ2h0
KCk7CiAgICAgICAgIGNvbFJlY3QubW92ZSh0eCwgdHkpOwpAQCAtNDE1MCw4ICs0MjY0LDcgQEAg
dm9pZCBSZW5kZXJCbG9jazo6c2V0RGVzaXJlZENvbHVtbkNvdW50QQogICAgIGJvb2wgZGVzdHJv
eUNvbHVtbnMgPSAhZmlyc3RDaGlsZCgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChj
b3VudCA9PSAxICYmIHN0eWxlKCktPmhhc0F1dG9Db2x1bW5XaWR0aCgpKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICB8fCBmaXJzdENoaWxkKCktPmlzQW5vbnltb3VzQ29sdW1uc0Jsb2NrKCkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgZmlyc3RDaGlsZCgpLT5pc0Fub255bW91c0Nv
bHVtblNwYW5CbG9jaygpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGRvY3VtZW50KCkt
PnNldHRpbmdzKCktPnBhZ2luYXRlRHVyaW5nTGF5b3V0RW5hYmxlZCgpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICB8fCBmaXJzdENoaWxkKCktPmlzQW5vbnltb3VzQ29sdW1uU3BhbkJsb2Nr
KCk7CiAgICAgaWYgKGRlc3Ryb3lDb2x1bW5zKSB7CiAgICAgICAgIGlmIChoYXNDb2x1bW5zKCkp
IHsKICAgICAgICAgICAgIGRlbGV0ZSBnQ29sdW1uSW5mb01hcC0+dGFrZSh0aGlzKTsKQEAgLTQx
OTQsMTMzICs0MzA3LDU4IEBAIENvbHVtbkluZm8qIFJlbmRlckJsb2NrOjpjb2x1bW5JbmZvKCkg
Y28KICAgICByZXR1cm4gZ0NvbHVtbkluZm9NYXAtPmdldCh0aGlzKTsgICAgCiB9CiAKLWludCBS
ZW5kZXJCbG9jazo6bGF5b3V0Q29sdW1ucyhpbnQgZW5kT2ZDb250ZW50LCBpbnQgcmVxdWVzdGVk
Q29sdW1uSGVpZ2h0KQordW5zaWduZWQgUmVuZGVyQmxvY2s6OmNvbHVtbkNvdW50KENvbHVtbklu
Zm8qIGNvbEluZm8pIGNvbnN0CiB7Ci0gICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgd2UgaGF2
ZSBubyBjb2x1bW5zCi0gICAgaWYgKCFoYXNDb2x1bW5zKCkpCi0gICAgICAgIHJldHVybiAtMTsK
KyAgICBBU1NFUlQoaGFzQ29sdW1ucygpICYmIGdDb2x1bW5JbmZvTWFwLT5nZXQodGhpcykgPT0g
Y29sSW5mbyk7CisgICAgcmV0dXJuIGNvbEluZm8tPmNvbHVtbkNvdW50KCk7Cit9CiAKLSAgICBD
b2x1bW5JbmZvKiBpbmZvID0gZ0NvbHVtbkluZm9NYXAtPmdldCh0aGlzKTsKLSAgICBpbnQgZGVz
aXJlZENvbHVtbldpZHRoID0gaW5mby0+ZGVzaXJlZENvbHVtbldpZHRoKCk7Ci0gICAgaW50IGRl
c2lyZWRDb2x1bW5Db3VudCA9IGluZm8tPmRlc2lyZWRDb2x1bW5Db3VudCgpOwotICAgIAotICAg
IGJvb2wgY29tcHV0ZUludHJpbnNpY0hlaWdodCA9IChlbmRPZkNvbnRlbnQgPT0gLTEpOwotCi0g
ICAgLy8gRmlsbCB0aGUgY29sdW1ucyBpbiB0byB0aGUgYXZhaWxhYmxlIGhlaWdodC4gIEF0dGVt
cHQgdG8gYmFsYW5jZSB0aGUgaGVpZ2h0IG9mIHRoZSBjb2x1bW5zLgotICAgIC8vIEFkZCBpbiBo
YWxmIG91ciBsaW5lLWhlaWdodCB0byBoZWxwIHdpdGggYmVzdC1ndWVzcyBpbml0aWFsIGJhbGFu
Y2luZy4KLSAgICBpbnQgY29sdW1uU2xvcCA9IGxpbmVIZWlnaHQoZmFsc2UpIC8gMjsKLSAgICBp
bnQgcmVtYWluaW5nU2xvcFNwYWNlID0gY29sdW1uU2xvcCAqIGRlc2lyZWRDb2x1bW5Db3VudDsK
LSAgICBpbnQgYXZhaWxhYmxlSGVpZ2h0ID0gY29udGVudEhlaWdodCgpOwotICAgIGludCBjb2xI
ZWlnaHQ7Ci0gICAgaWYgKGNvbXB1dGVJbnRyaW5zaWNIZWlnaHQgJiYgcmVxdWVzdGVkQ29sdW1u
SGVpZ2h0ID49IDApCi0gICAgICAgIGNvbEhlaWdodCA9IHJlcXVlc3RlZENvbHVtbkhlaWdodDsK
LSAgICBlbHNlIGlmIChjb21wdXRlSW50cmluc2ljSGVpZ2h0KQotICAgICAgICBjb2xIZWlnaHQg
PSBtaW4oYXZhaWxhYmxlSGVpZ2h0LCBhdmFpbGFibGVIZWlnaHQgLyBkZXNpcmVkQ29sdW1uQ291
bnQgKyBjb2x1bW5TbG9wKTsKLSAgICBlbHNlCi0gICAgICAgIGNvbEhlaWdodCA9IGF2YWlsYWJs
ZUhlaWdodDsKLSAgICBpbnQgb3JpZ2luYWxDb2xIZWlnaHQgPSBjb2xIZWlnaHQ7CitJbnRSZWN0
IFJlbmRlckJsb2NrOjpjb2x1bW5SZWN0QXQoQ29sdW1uSW5mbyogY29sSW5mbywgdW5zaWduZWQg
aW5kZXgpIGNvbnN0Cit7CisgICAgQVNTRVJUKGhhc0NvbHVtbnMoKSAmJiBnQ29sdW1uSW5mb01h
cC0+Z2V0KHRoaXMpID09IGNvbEluZm8pOwogCisgICAgLy8gQ29tcHV0ZSB0aGUgYXBwcm9wcmlh
dGUgcmVjdCBiYXNlZCBvZmYgb3VyIGluZm9ybWF0aW9uLgorICAgIGludCBjb2xXaWR0aCA9IGNv
bEluZm8tPmRlc2lyZWRDb2x1bW5XaWR0aCgpOworICAgIGludCBjb2xIZWlnaHQgPSBjb2xJbmZv
LT5jb2x1bW5IZWlnaHQoKTsKKyAgICBpbnQgY29sVG9wID0gYm9yZGVyVG9wKCkgKyBwYWRkaW5n
VG9wKCk7CiAgICAgaW50IGNvbEdhcCA9IGNvbHVtbkdhcCgpOworICAgIGludCBjb2xMZWZ0ID0g
c3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8gCisgICAgICAgICAgICAgICAgICAgICAgYm9y
ZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKSArIChpbmRleCAqIChjb2xXaWR0aCArIGNvbEdhcCkp
CisgICAgICAgICAgICAgICAgICAgICAgOiBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpICsg
Y29udGVudFdpZHRoKCkgLSBjb2xXaWR0aCAtIChpbmRleCAqIChjb2xXaWR0aCArIGNvbEdhcCkp
OworICAgIHJldHVybiBJbnRSZWN0KGNvbExlZnQsIGNvbFRvcCwgY29sV2lkdGgsIGNvbEhlaWdo
dCk7Cit9CiAKLSAgICAvLyBDb21wdXRlIGEgY29sbGVjdGlvbiBvZiBjb2x1bW4gcmVjdHMuCi0g
ICAgaW5mby0+Y2xlYXJDb2x1bW5zKCk7Ci0gICAgCi0gICAgLy8gVGhlbiB3ZSBkbyBhIHNpbXVs
YXRlZCAicGFpbnQiIGludG8gdGhlIGNvbHVtbiBzbGljZXMgYW5kIGFsbG93IHRoZSBjb250ZW50
IHRvIHNsaWdodGx5IGFkanVzdCBvdXIgaW5kaXZpZHVhbCBjb2x1bW4gcmVjdHMuCi0gICAgLy8g
RklYTUU6IFdlIG5lZWQgdG8gdGFrZSBpbnRvIGFjY291bnQgbGF5ZXJzIHRoYXQgYXJlIGFmZmVj
dGVkIGJ5IHRoZSBjb2x1bW5zIGFzIHdlbGwgaGVyZSBzbyB0aGF0IHRoZXkgY2FuIGhhdmUgYW4g
b3Bwb3J0dW5pdHkKLSAgICAvLyB0byBhZGp1c3QgY29sdW1uIHJlY3RzIGFsc28uCi0gICAgUmVu
ZGVyVmlldyogdiA9IHZpZXcoKTsKLSAgICBpbnQgbGVmdCA9IGJvcmRlckxlZnQoKSArIHBhZGRp
bmdMZWZ0KCk7Ci0gICAgaW50IHRvcCA9IGJvcmRlclRvcCgpICsgcGFkZGluZ1RvcCgpOwotICAg
IGludCBjdXJyWCA9IHN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUiA/IGJvcmRlckxlZnQoKSAr
IHBhZGRpbmdMZWZ0KCkgOiBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpICsgY29udGVudFdp
ZHRoKCkgLSBkZXNpcmVkQ29sdW1uV2lkdGg7Ci0gICAgaW50IGN1cnJZID0gdG9wOwotICAgIHVu
c2lnbmVkIGNvbENvdW50ID0gZGVzaXJlZENvbHVtbkNvdW50OwotICAgIGludCBtYXhDb2xCb3R0
b20gPSBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKTsKLSAgICBpbnQgY29udGVudEJvdHRvbSA9
IHRvcCArIGF2YWlsYWJsZUhlaWdodDsKLSAgICBpbnQgbWluaW11bUNvbHVtbkhlaWdodCA9IC0x
OwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb2xDb3VudDsgaSsrKSB7Ci0gICAgICAg
IC8vIElmIHdlIGFyZW4ndCBjb25zdHJhaW5lZCwgdGhlbiB0aGUgbGFzdCBjb2x1bW4gY2FuIGp1
c3QgZ2V0IGFsbCB0aGUgcmVtYWluaW5nIHNwYWNlLgotICAgICAgICBpZiAoY29tcHV0ZUludHJp
bnNpY0hlaWdodCAmJiBpID09IGNvbENvdW50IC0gMSkKLSAgICAgICAgICAgIGNvbEhlaWdodCA9
IGF2YWlsYWJsZUhlaWdodDsKLQotICAgICAgICAvLyBUaGlzIHJlcHJlc2VudHMgdGhlIHJlYWwg
Y29sdW1uIHBvc2l0aW9uLgotICAgICAgICBJbnRSZWN0IGNvbFJlY3QoY3VyclgsIHRvcCwgZGVz
aXJlZENvbHVtbldpZHRoLCBjb2xIZWlnaHQpOwotCi0gICAgICAgIGludCB0cnVuY2F0aW9uUG9p
bnQgPSB2aXNpYmxlVG9wT2ZIaWdoZXN0RmxvYXRFeHRlbmRpbmdCZWxvdyhjdXJyWSArIGNvbEhl
aWdodCwgY29sSGVpZ2h0KTsKLQotICAgICAgICAvLyBGb3IgdGhlIHNpbXVsYXRlZCBwYWludCwg
d2UgcHJldGVuZCBsaWtlIGV2ZXJ5dGhpbmcgaXMgaW4gb25lIGxvbmcgc3RyaXAuCi0gICAgICAg
IEludFJlY3QgcGFnZVJlY3QobGVmdCwgY3VyclksIGNvbnRlbnRXaWR0aCgpLCB0cnVuY2F0aW9u
UG9pbnQgLSBjdXJyWSk7Ci0gICAgICAgIHYtPnNldFByaW50UmVjdChwYWdlUmVjdCk7Ci0gICAg
ICAgIHYtPnNldFRydW5jYXRlZEF0KHRydW5jYXRpb25Qb2ludCk7Ci0gICAgICAgIEdyYXBoaWNz
Q29udGV4dCBjb250ZXh0KChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCopMCk7Ci0gICAgICAgIFBh
aW50SW5mbyBwYWludEluZm8oJmNvbnRleHQsIHBhZ2VSZWN0LCBQYWludFBoYXNlRm9yZWdyb3Vu
ZCwgZmFsc2UsIDAsIDApOworYm9vbCBSZW5kZXJCbG9jazo6bGF5b3V0Q29sdW1ucyhib29sIGhh
c1NwZWNpZmllZFBhZ2VIZWlnaHQsIGludCBwYWdlSGVpZ2h0LCBMYXlvdXRTdGF0ZU1haW50YWlu
ZXImIHN0YXRlUHVzaGVyKQoreworICAgIGlmIChoYXNDb2x1bW5zKCkpIHsKKyAgICAgICAgQ29s
dW1uSW5mbyogY29sSW5mbyA9IGNvbHVtbkluZm8oKTsKKyAgICAgICAgaWYgKHBhZ2VIZWlnaHQp
IC8vIEZJWE1FOiBTaG91bGQgdXNlIGxvd2VzdFBvc2l0aW9uIGluc3RlYWQgb2YgY29udGVudEhl
aWdodCgpLCBidXQgbmVlZCB0byBleGNsdWRlIHBvc2l0aW9uZWQgb2JqZWN0cy4KKyAgICAgICAg
ICAgIGNvbEluZm8tPnNldENvbHVtbkNvdW50QW5kSGVpZ2h0KGNlaWxmKChmbG9hdCljb250ZW50
SGVpZ2h0KCkgLyBwYWdlSGVpZ2h0KSwgcGFnZUhlaWdodCk7CisgICAgICAgIGludCBkZXNpcmVk
Q29sdW1uQ291bnQgPSBjb2xJbmZvLT5kZXNpcmVkQ29sdW1uQ291bnQoKTsKKyAgICAgICAgaWYg
KCFoYXNTcGVjaWZpZWRQYWdlSGVpZ2h0ICYmIGNvbnRlbnRIZWlnaHQoKSA+IHBhZ2VIZWlnaHQg
KiBkZXNpcmVkQ29sdW1uQ291bnQpIHsKKyAgICAgICAgICAgIC8vIE5vdyB0aGF0IHdlIGtub3cg
dGhlIGludHJpbnNpYyBoZWlnaHQgb2YgdGhlIGNvbHVtbnMsIHdlIGhhdmUgdG8gcmViYWxhbmNl
IHRoZW0uCisgICAgICAgICAgICBpbnQgY29sdW1uSGVpZ2h0ID0gbWF4KGNvbEluZm8tPm1pbmlt
dW1Db2x1bW5IZWlnaHQoKSwgKGludCljZWlsZigoZmxvYXQpY29udGVudEhlaWdodCgpIC8gZGVz
aXJlZENvbHVtbkNvdW50KSk7CisgICAgICAgICAgICBpZiAoY29sdW1uSGVpZ2h0ID4gMCkgewor
ICAgICAgICAgICAgICAgIHN0YXRlUHVzaGVyLnBvcCgpOworICAgICAgICAgICAgICAgIGxheW91
dEJsb2NrKGZhbHNlLCBjb2x1bW5IZWlnaHQpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICAgICAgfQorICAgICAgICB9IAogICAgICAgICAKLSAgICAgICAgc2V0SGFzQ29s
dW1ucyhmYWxzZSk7Ci0gICAgICAgIHBhaW50T2JqZWN0KHBhaW50SW5mbywgMCwgMCk7Ci0gICAg
ICAgIHNldEhhc0NvbHVtbnModHJ1ZSk7Ci0KLSAgICAgICAgaWYgKGNvbXB1dGVJbnRyaW5zaWNI
ZWlnaHQgJiYgdi0+bWluaW11bUNvbHVtbkhlaWdodCgpID4gb3JpZ2luYWxDb2xIZWlnaHQpIHsK
LSAgICAgICAgICAgIC8vIFRoZSBpbml0aWFsIGNvbHVtbiBoZWlnaHQgd2FzIHRvbyBzbWFsbCB0
byBjb250YWluIG9uZSBsaW5lIG9mIHRleHQuCi0gICAgICAgICAgICBtaW5pbXVtQ29sdW1uSGVp
Z2h0ID0gbWF4KG1pbmltdW1Db2x1bW5IZWlnaHQsIHYtPm1pbmltdW1Db2x1bW5IZWlnaHQoKSk7
Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKGNvbHVtbkNvdW50KGNvbEluZm8pKSB7CisgICAgICAg
ICAgICBJbnRSZWN0IGxhc3RSZWN0ID0gY29sdW1uUmVjdEF0KGNvbEluZm8sIGNvbHVtbkNvdW50
KGNvbEluZm8pIC0gMSk7CisgICAgICAgICAgICBpbnQgb3ZlcmZsb3dMZWZ0ID0gc3R5bGUoKS0+
ZGlyZWN0aW9uKCkgPT0gUlRMID8gbWluKDAsIGxhc3RSZWN0LngoKSkgOiAwOworICAgICAgICAg
ICAgaW50IG92ZXJmbG93UmlnaHQgPSBzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIgPyBtYXgo
d2lkdGgoKSwgbGFzdFJlY3QueCgpICsgbGFzdFJlY3Qud2lkdGgoKSkgOiAwOworICAgICAgICAg
ICAgaW50IG92ZXJmbG93SGVpZ2h0ID0gYm9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCkgKyBjb2xJ
bmZvLT5jb2x1bW5IZWlnaHQoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc2V0SGVpZ2h0
KG92ZXJmbG93SGVpZ2h0ICsgYm9yZGVyQm90dG9tKCkgKyBwYWRkaW5nQm90dG9tKCkgKyBob3Jp
em9udGFsU2Nyb2xsYmFySGVpZ2h0KCkpOwogCi0gICAgICAgIGludCBhZGp1c3RlZEJvdHRvbSA9
IHYtPmJlc3RUcnVuY2F0ZWRBdCgpOwotICAgICAgICBpZiAoYWRqdXN0ZWRCb3R0b20gPD0gY3Vy
clkpCi0gICAgICAgICAgICBhZGp1c3RlZEJvdHRvbSA9IHRydW5jYXRpb25Qb2ludDsKLSAgICAg
ICAgCi0gICAgICAgIGNvbFJlY3Quc2V0SGVpZ2h0KGFkanVzdGVkQm90dG9tIC0gY3VyclkpOwot
ICAgICAgICAKLSAgICAgICAgLy8gQWRkIGluIHRoZSBsb3N0IHNwYWNlIHRvIHRoZSBzdWJzZXF1
ZW50IGNvbHVtbnMuCi0gICAgICAgIC8vIEZJWE1FOiBUaGlzIHdpbGwgY3JlYXRlIGEgInN0YWly
Y2FzZSIgZWZmZWN0IGlmIHRoZXJlIGFyZSBlbm91Z2ggY29sdW1ucywgYnV0IHRoZSBlZmZlY3Qg
c2hvdWxkIGJlIHByZXR0eSBzdWJ0bGUuCi0gICAgICAgIGlmIChjb21wdXRlSW50cmluc2ljSGVp
Z2h0KSB7Ci0gICAgICAgICAgICBpbnQgbG9zdFNwYWNlID0gY29sSGVpZ2h0IC0gY29sUmVjdC5o
ZWlnaHQoKTsKLSAgICAgICAgICAgIGlmIChsb3N0U3BhY2UgPiByZW1haW5pbmdTbG9wU3BhY2Up
IHsKLSAgICAgICAgICAgICAgICAvLyBSZWRlc3RyaWJ1dGUgdGhlIHNwYWNlIGFtb25nIHRoZSBy
ZW1haW5pbmcgY29sdW1ucy4KLSAgICAgICAgICAgICAgICBpbnQgc3BhY2VUb1JlZGlzdHJpYnV0
ZSA9IGxvc3RTcGFjZSAtIHJlbWFpbmluZ1Nsb3BTcGFjZTsKLSAgICAgICAgICAgICAgICBpbnQg
cmVtYWluaW5nQ29sdW1ucyA9IGNvbENvdW50IC0gaSArIDE7Ci0gICAgICAgICAgICAgICAgY29s
SGVpZ2h0ICs9IHNwYWNlVG9SZWRpc3RyaWJ1dGUgLyByZW1haW5pbmdDb2x1bW5zOwotICAgICAg
ICAgICAgfSAKLSAgICAgICAgICAgIHJlbWFpbmluZ1Nsb3BTcGFjZSA9IG1heCgwLCByZW1haW5p
bmdTbG9wU3BhY2UgLSBsb3N0U3BhY2UpOworICAgICAgICAgICAgbV9vdmVyZmxvdy5jbGVhcigp
OworICAgICAgICAgICAgYWRkTGF5b3V0T3ZlcmZsb3coSW50UmVjdChvdmVyZmxvd0xlZnQsIDAs
IG92ZXJmbG93UmlnaHQgLSBvdmVyZmxvd0xlZnQsIG92ZXJmbG93SGVpZ2h0KSk7CiAgICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIGlmIChzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIpCi0g
ICAgICAgICAgICBjdXJyWCArPSBkZXNpcmVkQ29sdW1uV2lkdGggKyBjb2xHYXA7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIGN1cnJYIC09IChkZXNpcmVkQ29sdW1uV2lkdGggKyBjb2xHYXAp
OwotCi0gICAgICAgIGN1cnJZICs9IGNvbFJlY3QuaGVpZ2h0KCk7Ci0gICAgICAgIGF2YWlsYWJs
ZUhlaWdodCAtPSBjb2xSZWN0LmhlaWdodCgpOwotCi0gICAgICAgIG1heENvbEJvdHRvbSA9IG1h
eChjb2xSZWN0LmJvdHRvbSgpLCBtYXhDb2xCb3R0b20pOwotCi0gICAgICAgIGluZm8tPmFkZENv
bHVtblJlY3QoY29sUmVjdCk7Ci0gICAgICAgIAotICAgICAgICAvLyBTdGFydCBhZGRpbmcgaW4g
bW9yZSBjb2x1bW5zIGFzIGxvbmcgYXMgdGhlcmUncyBzdGlsbCBjb250ZW50IGxlZnQuCi0gICAg
ICAgIGlmIChjdXJyWSA8IGVuZE9mQ29udGVudCAmJiBpID09IGNvbENvdW50IC0gMSAmJiAoY29t
cHV0ZUludHJpbnNpY0hlaWdodCB8fCBjb250ZW50SGVpZ2h0KCkpKQotICAgICAgICAgICAgY29s
Q291bnQrKzsKICAgICB9Ci0KLSAgICBpZiAobWluaW11bUNvbHVtbkhlaWdodCA+PSAwKSB7Ci0g
ICAgICAgIC8vIElmIG9yaWdpbmFsQ29sSGVpZ2h0IHdhcyB0b28gc21hbGwsIHdlIG5lZWQgdG8g
dHJ5IHRvIGxheW91dCBhZ2Fpbi4KLSAgICAgICAgcmV0dXJuIGxheW91dENvbHVtbnMoZW5kT2ZD
b250ZW50LCBtaW5pbXVtQ29sdW1uSGVpZ2h0KTsKLSAgICB9Ci0KLSAgICBpbnQgb3ZlcmZsb3dS
aWdodCA9IG1heCh3aWR0aCgpLCBjdXJyWCAtIGNvbEdhcCk7Ci0gICAgaW50IG92ZXJmbG93TGVm
dCA9IG1pbigwLCBjdXJyWCArIGRlc2lyZWRDb2x1bW5XaWR0aCArIGNvbEdhcCk7Ci0gICAgaW50
IG92ZXJmbG93SGVpZ2h0ID0gbWF4Q29sQm90dG9tOwotICAgIGludCB0b0FkZCA9IGJvcmRlckJv
dHRvbSgpICsgcGFkZGluZ0JvdHRvbSgpICsgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCgpOwot
ICAgICAgICAKLSAgICBpZiAoY29tcHV0ZUludHJpbnNpY0hlaWdodCkKLSAgICAgICAgc2V0SGVp
Z2h0KG1heENvbEJvdHRvbSArIHRvQWRkKTsKLQotICAgIG1fb3ZlcmZsb3cuY2xlYXIoKTsKLSAg
ICBhZGRMYXlvdXRPdmVyZmxvdyhJbnRSZWN0KG92ZXJmbG93TGVmdCwgMCwgb3ZlcmZsb3dSaWdo
dCAtIG92ZXJmbG93TGVmdCwgb3ZlcmZsb3dIZWlnaHQpKTsKLQotICAgIHYtPnNldFByaW50UmVj
dChJbnRSZWN0KCkpOwotICAgIHYtPnNldFRydW5jYXRlZEF0KDApOwogICAgIAotICAgIEFTU0VS
VChjb2xDb3VudCA9PSBpbmZvLT5jb2x1bW5Db3VudCgpKTsKLSAgICAKLSAgICByZXR1cm4gY29u
dGVudEJvdHRvbTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHZvaWQgUmVuZGVyQmxvY2s6OmFk
anVzdFBvaW50VG9Db2x1bW5Db250ZW50cyhJbnRQb2ludCYgcG9pbnQpIGNvbnN0CkBAIC00MzMw
LDE3ICs0MzY4LDE3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkanVzdFBvaW50VG9Db2x1bW5Db24K
ICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIENvbHVtbkluZm8qIGNvbEluZm8gPSBjb2x1bW5J
bmZvKCk7Ci0gICAgaWYgKCFjb2xJbmZvLT5jb2x1bW5Db3VudCgpKQorICAgIGlmICghY29sdW1u
Q291bnQoY29sSW5mbykpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIERldGVybWluZSB3aGlj
aCBjb2x1bW5zIHdlIGludGVyc2VjdC4KICAgICBpbnQgY29sR2FwID0gY29sdW1uR2FwKCk7CiAg
ICAgaW50IGxlZnRHYXAgPSBjb2xHYXAgLyAyOwotICAgIEludFBvaW50IGNvbHVtblBvaW50KGNv
bEluZm8tPmNvbHVtblJlY3RBdCgwKS5sb2NhdGlvbigpKTsKKyAgICBJbnRQb2ludCBjb2x1bW5Q
b2ludChjb2x1bW5SZWN0QXQoY29sSW5mbywgMCkubG9jYXRpb24oKSk7CiAgICAgaW50IHlPZmZz
ZXQgPSAwOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb2xJbmZvLT5jb2x1bW5Db3Vu
dCgpOyBpKyspIHsKICAgICAgICAgLy8gQWRkIGluIGhhbGYgdGhlIGNvbHVtbiBnYXAgdG8gdGhl
IGxlZnQgYW5kIHJpZ2h0IG9mIHRoZSByZWN0LgotICAgICAgICBJbnRSZWN0IGNvbFJlY3QgPSBj
b2xJbmZvLT5jb2x1bW5SZWN0QXQoaSk7CisgICAgICAgIEludFJlY3QgY29sUmVjdCA9IGNvbHVt
blJlY3RBdChjb2xJbmZvLCBpKTsKICAgICAgICAgSW50UmVjdCBnYXBBbmRDb2x1bW5SZWN0KGNv
bFJlY3QueCgpIC0gbGVmdEdhcCwgY29sUmVjdC55KCksIGNvbFJlY3Qud2lkdGgoKSArIGNvbEdh
cCwgY29sUmVjdC5oZWlnaHQoKSk7CiAKICAgICAgICAgaWYgKHBvaW50LngoKSA+PSBnYXBBbmRD
b2x1bW5SZWN0LngoKSAmJiBwb2ludC54KCkgPCBnYXBBbmRDb2x1bW5SZWN0LnJpZ2h0KCkpIHsK
QEAgLTQzNzgsNyArNDQxNiw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkanVzdFJlY3RGb3JDb2x1
bW5zKEkKICAgICBJbnRSZWN0IHJlc3VsdDsKICAgICAKICAgICAvLyBEZXRlcm1pbmUgd2hpY2gg
Y29sdW1ucyB3ZSBpbnRlcnNlY3QuCi0gICAgdW5zaWduZWQgY29sQ291bnQgPSBjb2xJbmZvLT5j
b2x1bW5Db3VudCgpOworICAgIHVuc2lnbmVkIGNvbENvdW50ID0gY29sdW1uQ291bnQoY29sSW5m
byk7CiAgICAgaWYgKCFjb2xDb3VudCkKICAgICAgICAgcmV0dXJuOwogICAgIApAQCAtNDM4Niw3
ICs0NDI0LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRqdXN0UmVjdEZvckNvbHVtbnMoSQogICAg
IAogICAgIGludCBjdXJyWU9mZnNldCA9IDA7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGNvbENvdW50OyBpKyspIHsKLSAgICAgICAgSW50UmVjdCBjb2xSZWN0ID0gY29sSW5mby0+Y29s
dW1uUmVjdEF0KGkpOworICAgICAgICBJbnRSZWN0IGNvbFJlY3QgPSBjb2x1bW5SZWN0QXQoY29s
SW5mbywgaSk7CiAgICAgICAgIGludCBjdXJyWE9mZnNldCA9IGNvbFJlY3QueCgpIC0gbGVmdDsK
ICAgICAgICAgCiAgICAgICAgIEludFJlY3QgcmVwYWludFJlY3QgPSByOwpAQCAtNDQxMiw5ICs0
NDUwLDkgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRqdXN0Rm9yQ29sdW1ucyhJbnRTaQogCiAgICAg
aW50IGxlZnQgPSBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpOwogICAgIGludCB5T2Zmc2V0
ID0gMDsKLSAgICBzaXplX3QgY29sdW1uQ291bnQgPSBjb2xJbmZvLT5jb2x1bW5Db3VudCgpOwot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29sdW1uQ291bnQ7ICsraSkgewotICAgICAgICBJ
bnRSZWN0IGNvbHVtblJlY3QgPSBjb2xJbmZvLT5jb2x1bW5SZWN0QXQoaSk7CisgICAgc2l6ZV90
IGNvbENvdW50ID0gY29sdW1uQ291bnQoY29sSW5mbyk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBjb2xDb3VudDsgKytpKSB7CisgICAgICAgIEludFJlY3QgY29sdW1uUmVjdCA9IGNvbHVt
blJlY3RBdChjb2xJbmZvLCBpKTsKICAgICAgICAgaW50IHhPZmZzZXQgPSBjb2x1bW5SZWN0Lngo
KSAtIGxlZnQ7CiAgICAgICAgIGlmIChwb2ludC55KCkgPCBjb2x1bW5SZWN0LmJvdHRvbSgpICsg
eU9mZnNldCkgewogICAgICAgICAgICAgb2Zmc2V0LmV4cGFuZCh4T2Zmc2V0LCAteU9mZnNldCk7
CkBAIC01NDEyLDYgKzU0NTAsMTYgQEAgdm9pZCBSZW5kZXJCbG9jazo6c2V0TWF4Qm90dG9tTWFy
Z2lucyhpbgogICAgIG1fbWF4TWFyZ2luLT5tX2JvdHRvbU5lZyA9IG5lZzsKIH0KIAordm9pZCBS
ZW5kZXJCbG9jazo6c2V0UGFnaW5hdGlvblN0cnV0KGludCBzdHJ1dCkKK3sKKyAgICBpZiAoIW1f
bWF4TWFyZ2luKSB7CisgICAgICAgIGlmIChzdHJ1dCA9PSAwKQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICBtX21heE1hcmdpbiA9IG5ldyBNYXhNYXJnaW4odGhpcyk7CisgICAgfQorICAg
IG1fbWF4TWFyZ2luLT5tX3BhZ2luYXRpb25TdHJ1dCA9IHN0cnV0OworfQorCiB2b2lkIFJlbmRl
ckJsb2NrOjphYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGludCB0eCwgaW50
IHR5KQogewogICAgIC8vIEZvciBibG9ja3MgaW5zaWRlIGlubGluZXMsIHdlIGdvIGFoZWFkIGFu
ZCBpbmNsdWRlIG1hcmdpbnMgc28gdGhhdCB3ZSBydW4gcmlnaHQgdXAgdG8gdGhlCkBAIC01Njcw
LDYgKzU3MTgsOTQgQEAgUmVuZGVyQmxvY2sqIFJlbmRlckJsb2NrOjpjcmVhdGVBbm9ueW1vdQog
ICAgIHJldHVybiBuZXdCb3g7CiB9CiAKK2ludCBSZW5kZXJCbG9jazo6bmV4dFBhZ2VUb3AoaW50
IHlQb3MpIGNvbnN0Cit7CisgICAgTGF5b3V0U3RhdGUqIGxheW91dFN0YXRlID0gdmlldygpLT5s
YXlvdXRTdGF0ZSgpOworICAgIGlmICghbGF5b3V0U3RhdGUtPm1fcGFnZUhlaWdodCkKKyAgICAg
ICAgcmV0dXJuIHlQb3M7CisgICAgCisgICAgLy8gVGhlIHlQb3MgaXMgaW4gb3VyIGNvb3JkaW5h
dGUgc3BhY2UuICBXZSBjYW4gYWRkIGluIG91ciBwdXNoZWQgb2Zmc2V0LgorICAgIGludCBwYWdl
SGVpZ2h0ID0gbGF5b3V0U3RhdGUtPm1fcGFnZUhlaWdodDsKKyAgICBpbnQgcmVtYWluaW5nSGVp
Z2h0ID0gcGFnZUhlaWdodCAtICgobGF5b3V0U3RhdGUtPm1fbGF5b3V0T2Zmc2V0IC0gbGF5b3V0
U3RhdGUtPm1fcGFnZU9mZnNldCkuaGVpZ2h0KCkgKyB5UG9zKSAlIHBhZ2VIZWlnaHQ7CisgICAg
cmV0dXJuIHlQb3MgKyByZW1haW5pbmdIZWlnaHQ7Cit9CisKK2ludCBSZW5kZXJCbG9jazo6YXBw
bHlCZWZvcmVCcmVhayhSZW5kZXJCb3gqIGNoaWxkLCBpbnQgeVBvcykKK3sKKyAgICBib29sIGNo
ZWNrUGFnZUJyZWFrcyA9IGRvY3VtZW50KCktPnBhZ2luYXRlZCgpICYmIGRvY3VtZW50KCktPnNl
dHRpbmdzKCktPnBhZ2luYXRlRHVyaW5nTGF5b3V0RW5hYmxlZCgpOworICAgIGJvb2wgY2hlY2tD
b2x1bW5CcmVha3MgPSB2aWV3KCktPmxheW91dFN0YXRlKCktPnBhZ2luYXRpbmdDb2x1bW5zKCk7
CisgICAgYm9vbCBjaGVja0JlZm9yZUFsd2F5cyA9IChjaGVja1BhZ2VCcmVha3MgJiYgY2hpbGQt
PnN0eWxlKCktPnBhZ2VCcmVha0JlZm9yZSgpID09IFBCQUxXQVlTKSB8fCAoY2hlY2tDb2x1bW5C
cmVha3MgJiYgY2hpbGQtPnN0eWxlKCktPmNvbHVtbkJyZWFrQmVmb3JlKCkgPT0gUEJBTFdBWVMp
OworICAgIGlmIChjaGVja0JlZm9yZUFsd2F5cykKKyAgICAgICAgcmV0dXJuIG5leHRQYWdlVG9w
KHlQb3MpOworICAgIHJldHVybiB5UG9zOworfQorCitpbnQgUmVuZGVyQmxvY2s6OmFwcGx5QWZ0
ZXJCcmVhayhSZW5kZXJCb3gqIGNoaWxkLCBpbnQgeVBvcywgTWFyZ2luSW5mbyYgbWFyZ2luSW5m
bykKK3sKKyAgICBib29sIGNoZWNrUGFnZUJyZWFrcyA9IGRvY3VtZW50KCktPnBhZ2luYXRlZCgp
ICYmIGRvY3VtZW50KCktPnNldHRpbmdzKCktPnBhZ2luYXRlRHVyaW5nTGF5b3V0RW5hYmxlZCgp
OworICAgIGJvb2wgY2hlY2tDb2x1bW5CcmVha3MgPSB2aWV3KCktPmxheW91dFN0YXRlKCktPnBh
Z2luYXRpbmdDb2x1bW5zKCk7CisgICAgYm9vbCBjaGVja0FmdGVyQWx3YXlzID0gKGNoZWNrUGFn
ZUJyZWFrcyAmJiBjaGlsZC0+c3R5bGUoKS0+cGFnZUJyZWFrQWZ0ZXIoKSA9PSBQQkFMV0FZUykg
fHwgKGNoZWNrQ29sdW1uQnJlYWtzICYmIGNoaWxkLT5zdHlsZSgpLT5jb2x1bW5CcmVha0FmdGVy
KCkgPT0gUEJBTFdBWVMpOworICAgIGlmIChjaGVja0FmdGVyQWx3YXlzKSB7CisgICAgICAgIG1h
cmdpbkluZm8uc2V0Qm90dG9tUXVpcmsodHJ1ZSk7IC8vIENhdXNlIG1hcmdpbnMgdG8gYmUgZGlz
Y2FyZGVkIGZvciBhbnkgZm9sbG93aW5nIGNvbnRlbnQuCisgICAgICAgIHJldHVybiBuZXh0UGFn
ZVRvcCh5UG9zKTsKKyAgICB9CisgICAgcmV0dXJuIHlQb3M7Cit9CisKK2ludCBSZW5kZXJCbG9j
azo6YWRqdXN0Rm9yVW5zcGxpdHRhYmxlQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCwgaW50IHlQb3Ms
IGJvb2wgaW5jbHVkZU1hcmdpbnMpCit7CisgICAgYm9vbCBpc1Vuc3BsaXR0YWJsZSA9IGNoaWxk
LT5pc1JlcGxhY2VkKCkgfHwgY2hpbGQtPnNjcm9sbHNPdmVyZmxvdygpOworICAgIGlmICghaXNV
bnNwbGl0dGFibGUpCisgICAgICAgIHJldHVybiB5UG9zOworICAgIGludCBjaGlsZEhlaWdodCA9
IGNoaWxkLT5oZWlnaHQoKSArIChpbmNsdWRlTWFyZ2lucyA/IGNoaWxkLT5tYXJnaW5Ub3AoKSAr
IGNoaWxkLT5tYXJnaW5Cb3R0b20oKSA6IDApOworICAgIExheW91dFN0YXRlKiBsYXlvdXRTdGF0
ZSA9IHZpZXcoKS0+bGF5b3V0U3RhdGUoKTsKKyAgICBpZiAobGF5b3V0U3RhdGUtPm1fY29sdW1u
SW5mbykKKyAgICAgICAgbGF5b3V0U3RhdGUtPm1fY29sdW1uSW5mby0+dXBkYXRlTWluaW11bUNv
bHVtbkhlaWdodChjaGlsZEhlaWdodCk7CisgICAgaW50IHBhZ2VIZWlnaHQgPSBsYXlvdXRTdGF0
ZS0+bV9wYWdlSGVpZ2h0OworICAgIGlmICghcGFnZUhlaWdodCB8fCBjaGlsZEhlaWdodCA+IHBh
Z2VIZWlnaHQpCisgICAgICAgIHJldHVybiB5UG9zOworICAgIGludCByZW1haW5pbmdIZWlnaHQg
PSBwYWdlSGVpZ2h0IC0gKChsYXlvdXRTdGF0ZS0+bV9sYXlvdXRPZmZzZXQgLSBsYXlvdXRTdGF0
ZS0+bV9wYWdlT2Zmc2V0KS5oZWlnaHQoKSArIHlQb3MpICUgcGFnZUhlaWdodDsKKyAgICBpZiAo
cmVtYWluaW5nSGVpZ2h0IDwgY2hpbGRIZWlnaHQpCisgICAgICAgIHJldHVybiB5UG9zICsgcmVt
YWluaW5nSGVpZ2h0OworICAgIHJldHVybiB5UG9zOworfQorCit2b2lkIFJlbmRlckJsb2NrOjph
ZGp1c3RMaW5lUG9zaXRpb25Gb3JQYWdpbmF0aW9uKFJvb3RJbmxpbmVCb3gqIGxpbmVCb3gsIGlu
dCYgZGVsdGEpCit7CisgICAgLy8gRklYTUU6IEZvciBub3cgd2UgcGFnaW5hdGUgdXNpbmcgbGlu
ZSBvdmVyZmxvdy4gIFRoaXMgZW5zdXJlcyB0aGF0IGxpbmVzIGRvbid0IG92ZXJsYXAgYXQgYWxs
IHdoZW4gd2UKKyAgICAvLyBwdXQgYSBzdHJ1dCBiZXR3ZWVuIHRoZW0gZm9yIHBhZ2luYXRpb24g
cHVycG9zZXMuICBIb3dldmVyLCB0aGlzIHJlYWxseSBpc24ndCB0aGUgZGVzaXJlZCByZW5kZXJp
bmcsIHNpbmNlCisgICAgLy8gdGhlIGxpbmUgb24gdGhlIHRvcCBvZiB0aGUgbmV4dCBwYWdlIHdp
bGwgYXBwZWFyIHRvbyBmYXIgZG93biByZWxhdGl2ZSB0byB0aGUgc2FtZSBraW5kIG9mIGxpbmUg
YXQgdGhlIHRvcAorICAgIC8vIG9mIHRoZSBmaXJzdCBjb2x1bW4uCisgICAgLy8KKyAgICAvLyBU
aGUgcmVuZGVyaW5nIHdlIHdvdWxkIGxpa2UgdG8gc2VlIGlzIG9uZSB3aGVyZSB0aGUgbGluZVRv
cCBpcyBhdCB0aGUgdG9wIG9mIHRoZSBjb2x1bW4sIGFuZCBhbnkgbGluZSBvdmVyZmxvdworICAg
IC8vIHNpbXBseSBzcGlsbHMgb3V0IGFib3ZlIHRoZSB0b3Agb2YgdGhlIGNvbHVtbi4gIFRoaXMg
ZWZmZWN0IHdvdWxkIG1hdGNoIHdoYXQgaGFwcGVucyBhdCB0aGUgdG9wIG9mIHRoZSBmaXJzdCBj
b2x1bW4uCisgICAgLy8gV2UgY2FuJ3QgYWNoaWV2ZSB0aGlzIHJlbmRlcmluZywgaG93ZXZlciwg
dW50aWwgd2Ugc3RvcCBjb2x1bW5zIGZyb20gY2xpcHBpbmcgdG8gdGhlIGNvbHVtbiBib3VuZHMg
KHRodXMgYWxsb3dpbmcKKyAgICAvLyBmb3Igb3ZlcmZsb3cgdG8gb2NjdXIpLCBhbmQgdGhlbiBj
YWNoZSB2aXNpYmxlIG92ZXJmbG93IGZvciBlYWNoIGNvbHVtbiByZWN0LgorICAgIC8vCisgICAg
Ly8gRnVydGhlcm1vcmUsIHRoZSBwYWludCB3ZSBoYXZlIHRvIGRvIHdoZW4gYSBjb2x1bW4gaGFz
IG92ZXJmbG93IGhhcyB0byBiZSBzcGVjaWFsLiAgV2UgbmVlZCB0byBleGNsdWRlCisgICAgLy8g
Y29udGVudCB0aGF0IHBhaW50cyBpbiBhIHByZXZpb3VzIGNvbHVtbiAoYW5kIGNvbnRlbnQgdGhh
dCBwYWludHMgaW4gdGhlIGZvbGxvd2luZyBjb2x1bW4pLgorICAgIC8vCisgICAgLy8gRklYTUU6
IEFub3RoZXIgcHJvYmxlbSB3aXRoIHNpbXBseSBtb3ZpbmcgbGluZXMgaXMgdGhhdCB0aGUgYXZh
aWxhYmxlIGxpbmUgd2lkdGggbWF5IGNoYW5nZSAoYmVjYXVzZSBvZiBmbG9hdHMpLgorICAgIC8v
IFRlY2huaWNhbGx5IGlmIHRoZSBsb2NhdGlvbiB3ZSBtb3ZlIHRoZSBsaW5lIHRvIGhhcyBhIGRp
ZmZlcmVudCBsaW5lIHdpZHRoIHRoYW4gb3VyIG9sZCBwb3NpdGlvbiwgdGhlbiB3ZSBuZWVkIHRv
IGRpcnR5IHRoZQorICAgIC8vIGxpbmUgYW5kIGFsbCBmb2xsb3dpbmcgbGluZXMuCisgICAgTGF5
b3V0U3RhdGUqIGxheW91dFN0YXRlID0gdmlldygpLT5sYXlvdXRTdGF0ZSgpOworICAgIGludCBw
YWdlSGVpZ2h0ID0gbGF5b3V0U3RhdGUtPm1fcGFnZUhlaWdodDsKKyAgICBpbnQgeVBvcyA9IGxp
bmVCb3gtPnRvcFZpc2libGVPdmVyZmxvdygpOworICAgIGludCBsaW5lSGVpZ2h0ID0gbGluZUJv
eC0+Ym90dG9tVmlzaWJsZU92ZXJmbG93KCkgLSB5UG9zOworICAgIGlmIChsYXlvdXRTdGF0ZS0+
bV9jb2x1bW5JbmZvKQorICAgICAgICBsYXlvdXRTdGF0ZS0+bV9jb2x1bW5JbmZvLT51cGRhdGVN
aW5pbXVtQ29sdW1uSGVpZ2h0KGxpbmVIZWlnaHQpOworICAgIHlQb3MgKz0gZGVsdGE7CisgICAg
aWYgKCFwYWdlSGVpZ2h0IHx8IGxpbmVIZWlnaHQgPiBwYWdlSGVpZ2h0KQorICAgICAgICByZXR1
cm47CisgICAgaW50IHJlbWFpbmluZ0hlaWdodCA9IHBhZ2VIZWlnaHQgLSAoKGxheW91dFN0YXRl
LT5tX2xheW91dE9mZnNldCAtIGxheW91dFN0YXRlLT5tX3BhZ2VPZmZzZXQpLmhlaWdodCgpICsg
eVBvcykgJSBwYWdlSGVpZ2h0OworICAgIGlmIChyZW1haW5pbmdIZWlnaHQgPCBsaW5lSGVpZ2h0
KSB7CisgICAgICAgIGlmIChsaW5lQm94ID09IGZpcnN0Um9vdEJveCgpICYmICFpc1Bvc2l0aW9u
ZWQoKSAmJiAhaXNUYWJsZUNlbGwoKSkKKyAgICAgICAgICAgIHNldFBhZ2luYXRpb25TdHJ1dChy
ZW1haW5pbmdIZWlnaHQgKyAoKHlQb3MgPiAwICYmIGxpbmVIZWlnaHQgKyB5UG9zIDw9IHBhZ2VI
ZWlnaHQpID8geVBvcyA6IDApKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZGVsdGEgKz0g
cmVtYWluaW5nSGVpZ2h0OworICAgIH0KK30KKyAKIGNvbnN0IGNoYXIqIFJlbmRlckJsb2NrOjpy
ZW5kZXJOYW1lKCkgY29uc3QKIHsKICAgICBpZiAoaXNCb2R5KCkpCkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrLmgJKHJldmlzaW9uIDY2OTAzKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIENvbHVtbkluZm87CiBjbGFzcyBJbmxpbmVJdGVyYXRvcjsKK2NsYXNzIExh
eW91dFN0YXRlTWFpbnRhaW5lcjsKIGNsYXNzIFJlbmRlcklubGluZTsKIAogc3RydWN0IEJpZGlS
dW47CkBAIC03MCw3ICs3MSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGQo
UmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IDApOwog
ICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDaGlsZChSZW5kZXJPYmplY3QqKTsKIAotICAgIHZpcnR1
YWwgdm9pZCBsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4pOworICAgIHZpcnR1YWwg
dm9pZCBsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIGludCBwYWdlSGVpZ2h0ID0g
MCk7CiAKICAgICB2b2lkIGluc2VydFBvc2l0aW9uZWRPYmplY3QoUmVuZGVyQm94Kik7CiAgICAg
dm9pZCByZW1vdmVQb3NpdGlvbmVkT2JqZWN0KFJlbmRlckJveCopOwpAQCAtODksNiArOTAsNyBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIG1hcmtBbGxEZXNjZW5kYW50c1dpdGhGbG9hdHNGb3JMYXlv
dXQoUmVuZGVyQm94KiBmbG9hdFRvUmVtb3ZlID0gMCwgYm9vbCBpbkxheW91dCA9IHRydWUpOwog
ICAgIHZvaWQgbWFya1Bvc2l0aW9uZWRPYmplY3RzRm9yTGF5b3V0KCk7CisgICAgdm9pZCBtYXJr
RGVzY2VuZGFudEJsb2Nrc0FuZExpbmVzRm9yTGF5b3V0KGJvb2wgaW5MYXlvdXQgPSB0cnVlKTsK
IAogICAgIGJvb2wgY29udGFpbnNGbG9hdHMoKSB7IHJldHVybiBtX2Zsb2F0aW5nT2JqZWN0cyAm
JiAhbV9mbG9hdGluZ09iamVjdHMtPmlzRW1wdHkoKTsgfQogICAgIGJvb2wgY29udGFpbnNGbG9h
dChSZW5kZXJPYmplY3QqKTsKQEAgLTE1MSw2ICsxNTMsMTAgQEAgcHVibGljOgogCiAgICAgQ29s
dW1uSW5mbyogY29sdW1uSW5mbygpIGNvbnN0OwogICAgIGludCBjb2x1bW5HYXAoKSBjb25zdDsK
KyAgICAKKyAgICAvLyBUaGVzZSB0d28gZnVuY3Rpb25zIHRha2UgdGhlIENvbHVtbkluZm8qIHRv
IGF2b2lkIHJlcGVhdGVkIGxvb2t1cHMgb2YgdGhlIGluZm8gaW4gdGhlIGdsb2JhbCBIYXNoTWFw
LgorICAgIHVuc2lnbmVkIGNvbHVtbkNvdW50KENvbHVtbkluZm8qKSBjb25zdDsKKyAgICBJbnRS
ZWN0IGNvbHVtblJlY3RBdChDb2x1bW5JbmZvKiwgdW5zaWduZWQpIGNvbnN0OwogCiBwcm90ZWN0
ZWQ6CiAgICAgLy8gVGhlc2UgZnVuY3Rpb25zIGFyZSBvbmx5IHVzZWQgaW50ZXJuYWxseSB0byBt
YW5pcHVsYXRlIHRoZSByZW5kZXIgdHJlZSBzdHJ1Y3R1cmUgdmlhIHJlbW92ZS9pbnNlcnQvYXBw
ZW5kQ2hpbGROb2RlLgpAQCAtMTgxLDkgKzE4NywxMSBAQCBwcm90ZWN0ZWQ6CiAgICAgaW50IG1h
eFRvcE5lZ01hcmdpbigpIGNvbnN0IHsgcmV0dXJuIG1fbWF4TWFyZ2luID8gbV9tYXhNYXJnaW4t
Pm1fdG9wTmVnIDogTWF4TWFyZ2luOjp0b3BOZWdEZWZhdWx0KHRoaXMpOyB9CiAgICAgaW50IG1h
eEJvdHRvbVBvc01hcmdpbigpIGNvbnN0IHsgcmV0dXJuIG1fbWF4TWFyZ2luID8gbV9tYXhNYXJn
aW4tPm1fYm90dG9tUG9zIDogTWF4TWFyZ2luOjpib3R0b21Qb3NEZWZhdWx0KHRoaXMpOyB9CiAg
ICAgaW50IG1heEJvdHRvbU5lZ01hcmdpbigpIGNvbnN0IHsgcmV0dXJuIG1fbWF4TWFyZ2luID8g
bV9tYXhNYXJnaW4tPm1fYm90dG9tTmVnIDogTWF4TWFyZ2luOjpib3R0b21OZWdEZWZhdWx0KHRo
aXMpOyB9CisgICAgaW50IHBhZ2luYXRpb25TdHJ1dCgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4TWFy
Z2luID8gbV9tYXhNYXJnaW4tPm1fcGFnaW5hdGlvblN0cnV0IDogMDsgfQogICAgIHZvaWQgc2V0
TWF4VG9wTWFyZ2lucyhpbnQgcG9zLCBpbnQgbmVnKTsKICAgICB2b2lkIHNldE1heEJvdHRvbU1h
cmdpbnMoaW50IHBvcywgaW50IG5lZyk7Ci0gICAgCisgICAgdm9pZCBzZXRQYWdpbmF0aW9uU3Ry
dXQoaW50IHN0cnV0KTsKKwogICAgIHZvaWQgaW5pdE1heE1hcmdpblZhbHVlcygpCiAgICAgewog
ICAgICAgICBpZiAobV9tYXhNYXJnaW4pIHsKQEAgLTE5MSw2ICsxOTksNyBAQCBwcm90ZWN0ZWQ6
CiAgICAgICAgICAgICBtX21heE1hcmdpbi0+bV90b3BOZWcgPSBNYXhNYXJnaW46OnRvcE5lZ0Rl
ZmF1bHQodGhpcyk7CiAgICAgICAgICAgICBtX21heE1hcmdpbi0+bV9ib3R0b21Qb3MgPSBNYXhN
YXJnaW46OmJvdHRvbVBvc0RlZmF1bHQodGhpcyk7CiAgICAgICAgICAgICBtX21heE1hcmdpbi0+
bV9ib3R0b21OZWcgPSBNYXhNYXJnaW46OmJvdHRvbU5lZ0RlZmF1bHQodGhpcyk7CisgICAgICAg
ICAgICBtX21heE1hcmdpbi0+bV9wYWdpbmF0aW9uU3RydXQgPSAwOwogICAgICAgICB9CiAgICAg
fQogCkBAIC0yOTcsNyArMzA2LDggQEAgcHJpdmF0ZToKIAogICAgIC8vIFRoZSBmb2xsb3dpbmcg
ZnVuY3Rpb25zJyBpbXBsZW1lbnRhdGlvbnMgYXJlIGluIFJlbmRlckJsb2NrTGluZUxheW91dC5j
cHAuCiAgICAgUm9vdElubGluZUJveCogZGV0ZXJtaW5lU3RhcnRQb3NpdGlvbihib29sJiBmaXJz
dExpbmUsIGJvb2wmIGZ1bGxMYXlvdXQsIGJvb2wmIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElubGluZUJpZGlSZXNv
bHZlciYsIFZlY3RvcjxGbG9hdFdpdGhSZWN0PiYgZmxvYXRzLCB1bnNpZ25lZCYgbnVtQ2xlYW5G
bG9hdHMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5saW5l
QmlkaVJlc29sdmVyJiwgVmVjdG9yPEZsb2F0V2l0aFJlY3Q+JiBmbG9hdHMsIHVuc2lnbmVkJiBu
dW1DbGVhbkZsb2F0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wmIHVzZVJlcGFpbnRCb3VuZHMsIGludCYgcmVwYWludFRvcCwgaW50JiByZXBhaW50Qm90
dG9tKTsKICAgICBSb290SW5saW5lQm94KiBkZXRlcm1pbmVFbmRQb3NpdGlvbihSb290SW5saW5l
Qm94KiBzdGFydEJveCwgSW5saW5lSXRlcmF0b3ImIGNsZWFuTGluZVN0YXJ0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZGlTdGF0dXMmIGNsZWFuTGluZUJpZGlT
dGF0dXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50JiB5UG9z
KTsKQEAgLTQxNiw4ICs0MjYsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgb2Zmc2V0Rm9yQ29udGVu
dHMoaW50JiB0eCwgaW50JiB0eSkgY29uc3Q7CiAKICAgICB2b2lkIGNhbGNDb2x1bW5XaWR0aCgp
OwotICAgIGludCBsYXlvdXRDb2x1bW5zKGludCBlbmRPZkNvbnRlbnQgPSAtMSwgaW50IHJlcXVl
c3RlZENvbHVtbkhlaWdodCA9IC0xKTsKLSAgICBpbnQgdmlzaWJsZVRvcE9mSGlnaGVzdEZsb2F0
RXh0ZW5kaW5nQmVsb3coaW50IGJvdHRvbSwgaW50IG1heEhlaWdodCkgY29uc3Q7CisgICAgYm9v
bCBsYXlvdXRDb2x1bW5zKGJvb2wgaGFzU3BlY2lmaWVkUGFnZUhlaWdodCwgaW50IHBhZ2VIZWln
aHQsIExheW91dFN0YXRlTWFpbnRhaW5lciYpOwogICAgIHZvaWQgbWFrZUNoaWxkcmVuQW5vbnlt
b3VzQ29sdW1uQmxvY2tzKFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQsIFJlbmRlckJsb2NrKiBu
ZXdCbG9ja0JveCwgUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCk7CiAKICAgICBib29sIGV4cGFuZHNU
b0VuY2xvc2VPdmVyaGFuZ2luZ0Zsb2F0cygpIGNvbnN0OwpAQCAtNTM5LDYgKzU0OCwxMyBAQCBw
cml2YXRlOgogICAgIHZvaWQgc2V0Q29sbGFwc2VkQm90dG9tTWFyZ2luKGNvbnN0IE1hcmdpbklu
Zm8mKTsKICAgICAvLyBFbmQgaGVscGVyIGZ1bmN0aW9ucyBhbmQgc3RydWN0cyB1c2VkIGJ5IGxh
eW91dEJsb2NrQ2hpbGRyZW4uCiAKKyAgICAvLyBQYWdpbmF0aW9uIHJvdXRpbmVzLgorICAgIGlu
dCBuZXh0UGFnZVRvcChpbnQgeVBvcykgY29uc3Q7IC8vIFJldHVybnMgdGhlIHRvcCBvZiB0aGUg
bmV4dCBwYWdlIGZvbGxvd2luZyB5UG9zLgorICAgIGludCBhcHBseUJlZm9yZUJyZWFrKFJlbmRl
ckJveCogY2hpbGQsIGludCB5UG9zKTsgLy8gSWYgdGhlIGNoaWxkIGhhcyBhIGJlZm9yZSBicmVh
aywgdGhlbiByZXR1cm4gYSBuZXcgeVBvcyB0aGF0IHNoaWZ0cyB0byB0aGUgdG9wIG9mIHRoZSBu
ZXh0IHBhZ2UvY29sdW1uLgorICAgIGludCBhcHBseUFmdGVyQnJlYWsoUmVuZGVyQm94KiBjaGls
ZCwgaW50IHlQb3MsIE1hcmdpbkluZm8mIG1hcmdpbkluZm8pOyAvLyBJZiB0aGUgY2hpbGQgaGFz
IGFuIGFmdGVyIGJyZWFrLCB0aGVuIHJldHVybiBhIG5ldyB5UG9zIHRoYXQgc2hpZnRzIHRvIHRo
ZSB0b3Agb2YgdGhlIG5leHQgcGFnZS9jb2x1bW4uCisgICAgaW50IGFkanVzdEZvclVuc3BsaXR0
YWJsZUNoaWxkKFJlbmRlckJveCogY2hpbGQsIGludCB5UG9zLCBib29sIGluY2x1ZGVNYXJnaW5z
ID0gZmFsc2UpOyAvLyBJZiB0aGUgY2hpbGQgaXMgdW5zcGxpdHRhYmxlIGFuZCBjYW4ndCBmaXQg
b24gdGhlIGN1cnJlbnQgcGFnZSwgcmV0dXJuIHRoZSB0b3Agb2YgdGhlIG5leHQgcGFnZS9jb2x1
bW4uCisgICAgdm9pZCBhZGp1c3RMaW5lUG9zaXRpb25Gb3JQYWdpbmF0aW9uKFJvb3RJbmxpbmVC
b3gqLCBpbnQmIGRlbHRhWSk7IC8vIENvbXB1dGVzIGEgZGVsdGFZIHZhbHVlIHRoYXQgcHV0IGEg
bGluZSBhdCB0aGUgdG9wIG9mIHRoZSBuZXh0IHBhZ2UgaWYgaXQgZG9lc24ndCBmaXQgb24gdGhl
IGN1cnJlbnQgcGFnZS4KKwogICAgIHR5cGVkZWYgUG9zaXRpb25lZE9iamVjdHNMaXN0SGFzaFNl
dDo6Y29uc3RfaXRlcmF0b3IgSXRlcmF0b3I7CiAgICAgRGVwcmVjYXRlZFB0ckxpc3Q8RmxvYXRp
bmdPYmplY3Q+KiBtX2Zsb2F0aW5nT2JqZWN0czsKICAgICAKQEAgLTU1Nyw2ICs1NzMsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgLCBtX3RvcE5lZyh0b3BOZWdEZWZhdWx0KG8pKQogICAgICAg
ICAgICAgLCBtX2JvdHRvbVBvcyhib3R0b21Qb3NEZWZhdWx0KG8pKQogICAgICAgICAgICAgLCBt
X2JvdHRvbU5lZyhib3R0b21OZWdEZWZhdWx0KG8pKQorICAgICAgICAgICAgLCBtX3BhZ2luYXRp
b25TdHJ1dCgwKQogICAgICAgICB7IAogICAgICAgICB9CiAKQEAgLTU2NCwxMSArNTgxLDEyIEBA
IHByaXZhdGU6CiAgICAgICAgIHN0YXRpYyBpbnQgdG9wTmVnRGVmYXVsdChjb25zdCBSZW5kZXJC
bG9jayogbykgeyByZXR1cm4gby0+bWFyZ2luVG9wKCkgPCAwID8gLW8tPm1hcmdpblRvcCgpIDog
MDsgfQogICAgICAgICBzdGF0aWMgaW50IGJvdHRvbVBvc0RlZmF1bHQoY29uc3QgUmVuZGVyQmxv
Y2sqIG8pIHsgcmV0dXJuIG8tPm1hcmdpbkJvdHRvbSgpID4gMCA/IG8tPm1hcmdpbkJvdHRvbSgp
IDogMDsgfQogICAgICAgICBzdGF0aWMgaW50IGJvdHRvbU5lZ0RlZmF1bHQoY29uc3QgUmVuZGVy
QmxvY2sqIG8pIHsgcmV0dXJuIG8tPm1hcmdpbkJvdHRvbSgpIDwgMCA/IC1vLT5tYXJnaW5Cb3R0
b20oKSA6IDA7IH0KLQorICAgICAgICAKICAgICAgICAgaW50IG1fdG9wUG9zOwogICAgICAgICBp
bnQgbV90b3BOZWc7CiAgICAgICAgIGludCBtX2JvdHRvbVBvczsKICAgICAgICAgaW50IG1fYm90
dG9tTmVnOworICAgICAgICBpbnQgbV9wYWdpbmF0aW9uU3RydXQ7CiAgICAgIH07CiAKICAgICBN
YXhNYXJnaW4qIG1fbWF4TWFyZ2luOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2tMaW5lTGF5b3V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
bG9ja0xpbmVMYXlvdXQuY3BwCShyZXZpc2lvbiA2Njg4NikKKysrIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcg
QEAKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RNYXJrZXIu
aCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNs
dWRlICJUcmFpbGluZ0Zsb2F0c1Jvb3RJbmxpbmVCb3guaCIKICNpbmNsdWRlICJicmVha19saW5l
cy5oIgogI2luY2x1ZGUgPHd0Zi9BbHdheXNJbmxpbmUuaD4KQEAgLTU3MCwxMiArNTcxLDExIEBA
IHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dElubGluZUNoaWxkcmVuKGIKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIGlmIChvLT5pc1Bvc2l0aW9uZWQoKSkKICAgICAgICAgICAgICAgICAg
ICAgby0+Y29udGFpbmluZ0Jsb2NrKCktPmluc2VydFBvc2l0aW9uZWRPYmplY3QoYm94KTsKLSAg
ICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG8tPmlzRmxvYXRp
bmcoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0cy5hcHBlbmQoRmxvYXRXaXRoUmVj
dChib3gpKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZnVsbExheW91dCB8fCBvLT5u
ZWVkc0xheW91dCgpKSAvLyBSZXBsYWNlZCBlbGVtZW50cwotICAgICAgICAgICAgICAgICAgICAg
ICAgdG9SZW5kZXJCb3gobyktPmRpcnR5TGluZUJveGVzKGZ1bGxMYXlvdXQpOwotCisgICAgICAg
ICAgICAgICAgZWxzZSBpZiAoby0+aXNGbG9hdGluZygpKQorICAgICAgICAgICAgICAgICAgICBm
bG9hdHMuYXBwZW5kKEZsb2F0V2l0aFJlY3QoYm94KSk7CisgICAgICAgICAgICAgICAgZWxzZSBp
ZiAoZnVsbExheW91dCB8fCBvLT5uZWVkc0xheW91dCgpKSB7CisgICAgICAgICAgICAgICAgICAg
IC8vIFJlcGxhY2VkIGVsZW1lbnRzCisgICAgICAgICAgICAgICAgICAgIHRvUmVuZGVyQm94KG8p
LT5kaXJ0eUxpbmVCb3hlcyhmdWxsTGF5b3V0KTsKICAgICAgICAgICAgICAgICAgICAgby0+bGF5
b3V0SWZOZWVkZWQoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgaWYg
KG8tPmlzVGV4dCgpIHx8IChvLT5pc1JlbmRlcklubGluZSgpICYmICFlbmRPZklubGluZSkpIHsK
QEAgLTU5NCw3ICs1OTQsOCBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVDaGlsZHJl
bihiCiAgICAgICAgIHVuc2lnbmVkIGZsb2F0SW5kZXg7CiAgICAgICAgIGJvb2wgZmlyc3RMaW5l
ID0gdHJ1ZTsKICAgICAgICAgYm9vbCBwcmV2aW91c0xpbmVCcm9rZUNsZWFubHkgPSB0cnVlOwot
ICAgICAgICBSb290SW5saW5lQm94KiBzdGFydExpbmUgPSBkZXRlcm1pbmVTdGFydFBvc2l0aW9u
KGZpcnN0TGluZSwgZnVsbExheW91dCwgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5LCByZXNvbHZl
ciwgZmxvYXRzLCBmbG9hdEluZGV4KTsKKyAgICAgICAgUm9vdElubGluZUJveCogc3RhcnRMaW5l
ID0gZGV0ZXJtaW5lU3RhcnRQb3NpdGlvbihmaXJzdExpbmUsIGZ1bGxMYXlvdXQsIHByZXZpb3Vz
TGluZUJyb2tlQ2xlYW5seSwgcmVzb2x2ZXIsIGZsb2F0cywgZmxvYXRJbmRleCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VSZXBh
aW50Qm91bmRzLCByZXBhaW50VG9wLCByZXBhaW50Qm90dG9tKTsKIAogICAgICAgICBpZiAoZnVs
bExheW91dCAmJiBoYXNJbmxpbmVDaGlsZCAmJiAhc2VsZk5lZWRzTGF5b3V0KCkpIHsKICAgICAg
ICAgICAgIHNldE5lZWRzTGF5b3V0KHRydWUsIGZhbHNlKTsgIC8vIE1hcmsgb3Vyc2VsdmVzIGFz
IG5lZWRpbmcgYSBmdWxsIGxheW91dC4gVGhpcyB3YXkgd2UnbGwgcmVwYWludCBsaWtlCkBAIC02
MjIsOSArNjIzLDExIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dElubGluZUNoaWxkcmVuKGIK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgOiBkZXRlcm1pbmVFbmRQb3NpdGlv
bihzdGFydExpbmUsIGNsZWFuTGluZVN0YXJ0LCBjbGVhbkxpbmVCaWRpU3RhdHVzLCBlbmRMaW5l
WVBvcyk7CiAKICAgICAgICAgaWYgKHN0YXJ0TGluZSkgewotICAgICAgICAgICAgdXNlUmVwYWlu
dEJvdW5kcyA9IHRydWU7Ci0gICAgICAgICAgICByZXBhaW50VG9wID0gaGVpZ2h0KCk7Ci0gICAg
ICAgICAgICByZXBhaW50Qm90dG9tID0gaGVpZ2h0KCk7CisgICAgICAgICAgICBpZiAoIXVzZVJl
cGFpbnRCb3VuZHMpIHsKKyAgICAgICAgICAgICAgICB1c2VSZXBhaW50Qm91bmRzID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICByZXBhaW50VG9wID0gaGVpZ2h0KCk7CisgICAgICAgICAgICAgICAg
cmVwYWludEJvdHRvbSA9IGhlaWdodCgpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgUmVu
ZGVyQXJlbmEqIGFyZW5hID0gcmVuZGVyQXJlbmEoKTsKICAgICAgICAgICAgIFJvb3RJbmxpbmVC
b3gqIGJveCA9IHN0YXJ0TGluZTsKICAgICAgICAgICAgIHdoaWxlIChib3gpIHsKQEAgLTY1OSw2
ICs2NjIsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVDaGlsZHJlbihiCiAgICAg
ICAgIGJvb2wgY2hlY2tGb3JGbG9hdHNGcm9tTGFzdExpbmUgPSBmYWxzZTsKIAogICAgICAgICBi
b29sIGlzTGluZUVtcHR5ID0gdHJ1ZTsKKyAgICAgICAgYm9vbCBwYWdpbmF0ZWQgPSB2aWV3KCkt
PmxheW91dFN0YXRlKCktPnBhZ2luYXRlZCgpOwogCiAgICAgICAgIHdoaWxlICghZW5kLmF0RW5k
KCkpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBJcyB0aGlzIGNoZWNrIG5lY2Vzc2FyeSBiZWZv
cmUgdGhlIGZpcnN0IGl0ZXJhdGlvbiBvciBjYW4gaXQgYmUgbW92ZWQgdG8gdGhlIGVuZD8KQEAg
LTc4Niw2ICs3OTAsMTcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4o
YgogICAgICAgICAgICAgICAgICAgICAgICAgcmVwYWludFRvcCA9IG1pbihyZXBhaW50VG9wLCBs
aW5lQm94LT50b3BWaXNpYmxlT3ZlcmZsb3coKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXBhaW50Qm90dG9tID0gbWF4KHJlcGFpbnRCb3R0b20sIGxpbmVCb3gtPmJvdHRvbVZpc2libGVP
dmVyZmxvdygpKTsKICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHBhZ2luYXRlZCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGFkanVzdG1lbnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgYWRqdXN0
TGluZVBvc2l0aW9uRm9yUGFnaW5hdGlvbihsaW5lQm94LCBhZGp1c3RtZW50KTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChhZGp1c3RtZW50KSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbGluZUJveC0+YWRqdXN0UG9zaXRpb24oMCwgYWRqdXN0bWVudCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHVzZVJlcGFpbnRCb3VuZHMpIC8vIFRoaXMgY2FuIG9ubHkg
YmUgYSBwb3NpdGl2ZSBhZGp1c3RtZW50LCBzbyBubyBuZWVkIHRvIHVwZGF0ZSByZXBhaW50VG9w
LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBhaW50Qm90dG9tID0gbWF4KHJl
cGFpbnRCb3R0b20sIGxpbmVCb3gtPmJvdHRvbVZpc2libGVPdmVyZmxvdygpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzZXRIZWlnaHQobGluZUJveC0+YmxvY2tIZWlnaHQoKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBmaXJzdExpbmUgPSBmYWxzZTsKQEAgLTgyMCw2
ICs4MzUsOCBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVDaGlsZHJlbihiCiAgICAg
ICAgICAgICAgICAgaW50IGRlbHRhID0gaGVpZ2h0KCkgLSBlbmRMaW5lWVBvczsKICAgICAgICAg
ICAgICAgICBmb3IgKFJvb3RJbmxpbmVCb3gqIGxpbmUgPSBlbmRMaW5lOyBsaW5lOyBsaW5lID0g
bGluZS0+bmV4dFJvb3RCb3goKSkgewogICAgICAgICAgICAgICAgICAgICBsaW5lLT5hdHRhY2hM
aW5lKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChwYWdpbmF0ZWQpCisgICAgICAgICAgICAg
ICAgICAgICAgICBhZGp1c3RMaW5lUG9zaXRpb25Gb3JQYWdpbmF0aW9uKGxpbmUsIGRlbHRhKTsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKGRlbHRhKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICByZXBhaW50VG9wID0gbWluKHJlcGFpbnRUb3AsIGxpbmUtPnRvcFZpc2libGVPdmVyZmxvdygp
ICsgbWluKGRlbHRhLCAwKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXBhaW50Qm90dG9t
ID0gbWF4KHJlcGFpbnRCb3R0b20sIGxpbmUtPmJvdHRvbVZpc2libGVPdmVyZmxvdygpICsgbWF4
KGRlbHRhLCAwKSk7CkBAIC05MDAsNyArOTE3LDggQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0
SW5saW5lQ2hpbGRyZW4oYgogfQogCiBSb290SW5saW5lQm94KiBSZW5kZXJCbG9jazo6ZGV0ZXJt
aW5lU3RhcnRQb3NpdGlvbihib29sJiBmaXJzdExpbmUsIGJvb2wmIGZ1bGxMYXlvdXQsIGJvb2wm
IHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sdmVyLCBWZWN0
b3I8RmxvYXRXaXRoUmVjdD4mIGZsb2F0cywgdW5zaWduZWQmIG51bUNsZWFuRmxvYXRzKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5saW5lQmlk
aVJlc29sdmVyJiByZXNvbHZlciwgVmVjdG9yPEZsb2F0V2l0aFJlY3Q+JiBmbG9hdHMsIHVuc2ln
bmVkJiBudW1DbGVhbkZsb2F0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wmIHVzZVJlcGFpbnRCb3VuZHMsIGludCYgcmVwYWludFRvcCwg
aW50JiByZXBhaW50Qm90dG9tKQogewogICAgIFJvb3RJbmxpbmVCb3gqIGN1cnIgPSAwOwogICAg
IFJvb3RJbmxpbmVCb3gqIGxhc3QgPSAwOwpAQCAtOTEzLDcgKzkzMSw4IEBAIFJvb3RJbmxpbmVC
b3gqIFJlbmRlckJsb2NrOjpkZXRlcm1pbmVTdGEKICAgICAgICAgICAgICAgICBWZWN0b3I8UmVu
ZGVyQm94Kj46Oml0ZXJhdG9yIGVuZCA9IGNsZWFuTGluZUZsb2F0cy0+ZW5kKCk7CiAgICAgICAg
ICAgICAgICAgZm9yIChWZWN0b3I8UmVuZGVyQm94Kj46Oml0ZXJhdG9yIG8gPSBjbGVhbkxpbmVG
bG9hdHMtPmJlZ2luKCk7IG8gIT0gZW5kOyArK28pIHsKICAgICAgICAgICAgICAgICAgICAgUmVu
ZGVyQm94KiBmID0gKm87Ci0gICAgICAgICAgICAgICAgICAgIEludFNpemUgbmV3U2l6ZShmLT53
aWR0aCgpICsgZi0+bWFyZ2luTGVmdCgpICtmLT5tYXJnaW5SaWdodCgpLCBmLT5oZWlnaHQoKSAr
IGYtPm1hcmdpblRvcCgpICsgZi0+bWFyZ2luQm90dG9tKCkpOworICAgICAgICAgICAgICAgICAg
ICBmLT5sYXlvdXRJZk5lZWRlZCgpOworICAgICAgICAgICAgICAgICAgICBJbnRTaXplIG5ld1Np
emUoZi0+d2lkdGgoKSArIGYtPm1hcmdpbkxlZnQoKSArIGYtPm1hcmdpblJpZ2h0KCksIGYtPmhl
aWdodCgpICsgZi0+bWFyZ2luVG9wKCkgKyBmLT5tYXJnaW5Cb3R0b20oKSk7CiAgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChmbG9hdEluZGV4IDwgZmxvYXRzLnNpemUoKSk7CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChmbG9hdHNbZmxvYXRJbmRleF0ub2JqZWN0ICE9IGYpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIEEgbmV3IGZsb2F0IGhhcyBiZWVuIGluc2VydGVkIGJlZm9yZSB0
aGlzIGxpbmUgb3IgYmVmb3JlIGl0cyBsYXN0IGtub3duIGZsb2F0LgpAQCAtOTcyLDYgKzk5MSwy
MiBAQCBSb290SW5saW5lQm94KiBSZW5kZXJCbG9jazo6ZGV0ZXJtaW5lU3RhCiAgICAgICAgIGxh
c3QgPSBjdXJyID8gY3Vyci0+cHJldlJvb3RCb3goKSA6IGxhc3RSb290Qm94KCk7CiAgICAgfQog
CisgICAgLy8gUGFnaW5hdGUgYWxsIG9mIHRoZSBjbGVhbiBsaW5lcy4KKyAgICBib29sIHBhZ2lu
YXRlZCA9IHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+cGFnaW5hdGVkKCk7CisgICAgaWYgKHBhZ2lu
YXRlZCkgeworICAgICAgICBpbnQgZGVsdGEgPSAwOworICAgICAgICBmb3IgKFJvb3RJbmxpbmVC
b3gqIGxpbmVCb3ggPSBmaXJzdFJvb3RCb3goKTsgbGluZUJveCAhPSBjdXJyOyBsaW5lQm94ID0g
bGluZUJveC0+bmV4dFJvb3RCb3goKSkgeworICAgICAgICAgICAgYWRqdXN0TGluZVBvc2l0aW9u
Rm9yUGFnaW5hdGlvbihsaW5lQm94LCBkZWx0YSk7CisgICAgICAgICAgICBpZiAoZGVsdGEpIHsK
KyAgICAgICAgICAgICAgICBsaW5lQm94LT5hZGp1c3RQb3NpdGlvbigwLCBkZWx0YSk7CisgICAg
ICAgICAgICAgICAgaWYgKCF1c2VSZXBhaW50Qm91bmRzKQorICAgICAgICAgICAgICAgICAgICB1
c2VSZXBhaW50Qm91bmRzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZXBhaW50VG9wID0gbWlu
KHJlcGFpbnRUb3AsIGxpbmVCb3gtPnRvcFZpc2libGVPdmVyZmxvdygpKTsKKyAgICAgICAgICAg
ICAgICByZXBhaW50Qm90dG9tID0gbWF4KHJlcGFpbnRCb3R0b20sIGxpbmVCb3gtPmJvdHRvbVZp
c2libGVPdmVyZmxvdygpICsgZGVsdGEpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorCiAgICAgbnVtQ2xlYW5GbG9hdHMgPSAwOwogICAgIGlmICghZmxvYXRzLmlzRW1wdHkoKSkg
ewogICAgICAgICBpbnQgc2F2ZWRIZWlnaHQgPSBoZWlnaHQoKTsKSW5kZXg6IFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94LmNwcAkocmV2aXNpb24gNjY4ODYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NzMsNyArOTczLDcgQEAgdm9pZCBSZW5kZXJCb3g6
Om1hcExvY2FsVG9Db250YWluZXIoUmVuZAogICAgIGlmIChSZW5kZXJWaWV3KiB2ID0gdmlldygp
KSB7CiAgICAgICAgIGlmICh2LT5sYXlvdXRTdGF0ZUVuYWJsZWQoKSAmJiAhcmVwYWludENvbnRh
aW5lcikgewogICAgICAgICAgICAgTGF5b3V0U3RhdGUqIGxheW91dFN0YXRlID0gdi0+bGF5b3V0
U3RhdGUoKTsKLSAgICAgICAgICAgIEludFNpemUgb2Zmc2V0ID0gbGF5b3V0U3RhdGUtPm1fb2Zm
c2V0OworICAgICAgICAgICAgSW50U2l6ZSBvZmZzZXQgPSBsYXlvdXRTdGF0ZS0+bV9wYWludE9m
ZnNldDsKICAgICAgICAgICAgIG9mZnNldC5leHBhbmQoeCgpLCB5KCkpOwogICAgICAgICAgICAg
aWYgKHN0eWxlKCktPnBvc2l0aW9uKCkgPT0gUmVsYXRpdmVQb3NpdGlvbiAmJiBsYXllcigpKQog
ICAgICAgICAgICAgICAgIG9mZnNldCArPSBsYXllcigpLT5yZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0
KCk7CkBAIC0xMTcwLDcgKzExNzAsNyBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZVJlY3RGb3JS
ZXBhaW50KFJlCiAgICAgICAgICAgICAgICAgcmVjdC5tb3ZlKGxheWVyKCktPnJlbGF0aXZlUG9z
aXRpb25PZmZzZXQoKSk7CiAKICAgICAgICAgICAgIHJlY3QubW92ZSh4KCksIHkoKSk7Ci0gICAg
ICAgICAgICByZWN0Lm1vdmUobGF5b3V0U3RhdGUtPm1fb2Zmc2V0KTsKKyAgICAgICAgICAgIHJl
Y3QubW92ZShsYXlvdXRTdGF0ZS0+bV9wYWludE9mZnNldCk7CiAgICAgICAgICAgICBpZiAobGF5
b3V0U3RhdGUtPm1fY2xpcHBlZCkKICAgICAgICAgICAgICAgICByZWN0LmludGVyc2VjdChsYXlv
dXRTdGF0ZS0+bV9jbGlwUmVjdCk7CiAgICAgICAgICAgICByZXR1cm47CkluZGV4OiBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guY3BwCShyZXZpc2lvbiA2Njg4NikKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAx
LDcgKzIwMSw3IEBAIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmNhbGNQcmVmV2lkdGhzKCkKICAg
ICBzZXRQcmVmV2lkdGhzRGlydHkoZmFsc2UpOwogfQogCi12b2lkIFJlbmRlckZsZXhpYmxlQm94
OjpsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4pCit2b2lkIFJlbmRlckZsZXhpYmxl
Qm94OjpsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIGludCAvKnBhZ2VIZWlnaHQg
RklYTUU6IEltcGxlbWVudCAqLykKIHsKICAgICBBU1NFUlQobmVlZHNMYXlvdXQoKSk7CiAKSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guaAkocmV2aXNpb24gNjY4ODYpCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zOCw3ICszOCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNhbGNIb3Jpem9udGFsUHJlZldpZHRo
cygpOwogICAgIHZvaWQgY2FsY1ZlcnRpY2FsUHJlZldpZHRocygpOwogCi0gICAgdmlydHVhbCB2
b2lkIGxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbik7CisgICAgdmlydHVhbCB2b2lk
IGxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgaW50IHBhZ2VIZWlnaHQpOwogICAg
IHZvaWQgbGF5b3V0SG9yaXpvbnRhbEJveChib29sIHJlbGF5b3V0Q2hpbGRyZW4pOwogICAgIHZv
aWQgbGF5b3V0VmVydGljYWxCb3goYm9vbCByZWxheW91dENoaWxkcmVuKTsKIApJbmRleDogV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCShyZXZpc2lvbiA2Njg4NikKKysrIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlcklubGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0Nyw3ICs2NDcsNyBA
QCB2b2lkIFJlbmRlcklubGluZTo6Y29tcHV0ZVJlY3RGb3JSZXBhaW50CiAgICAgICAgICAgICBM
YXlvdXRTdGF0ZSogbGF5b3V0U3RhdGUgPSB2LT5sYXlvdXRTdGF0ZSgpOwogICAgICAgICAgICAg
aWYgKHN0eWxlKCktPnBvc2l0aW9uKCkgPT0gUmVsYXRpdmVQb3NpdGlvbiAmJiBsYXllcigpKQog
ICAgICAgICAgICAgICAgIHJlY3QubW92ZShsYXllcigpLT5yZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0
KCkpOwotICAgICAgICAgICAgcmVjdC5tb3ZlKGxheW91dFN0YXRlLT5tX29mZnNldCk7CisgICAg
ICAgICAgICByZWN0Lm1vdmUobGF5b3V0U3RhdGUtPm1fcGFpbnRPZmZzZXQpOwogICAgICAgICAg
ICAgaWYgKGxheW91dFN0YXRlLT5tX2NsaXBwZWQpCiAgICAgICAgICAgICAgICAgcmVjdC5pbnRl
cnNlY3QobGF5b3V0U3RhdGUtPm1fY2xpcFJlY3QpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAt
NzM0LDcgKzczNCw3IEBAIHZvaWQgUmVuZGVySW5saW5lOjptYXBMb2NhbFRvQ29udGFpbmVyKFIK
ICAgICBpZiAoUmVuZGVyVmlldyAqdiA9IHZpZXcoKSkgewogICAgICAgICBpZiAodi0+bGF5b3V0
U3RhdGVFbmFibGVkKCkgJiYgIXJlcGFpbnRDb250YWluZXIpIHsKICAgICAgICAgICAgIExheW91
dFN0YXRlKiBsYXlvdXRTdGF0ZSA9IHYtPmxheW91dFN0YXRlKCk7Ci0gICAgICAgICAgICBJbnRT
aXplIG9mZnNldCA9IGxheW91dFN0YXRlLT5tX29mZnNldDsKKyAgICAgICAgICAgIEludFNpemUg
b2Zmc2V0ID0gbGF5b3V0U3RhdGUtPm1fcGFpbnRPZmZzZXQ7CiAgICAgICAgICAgICBpZiAoc3R5
bGUoKS0+cG9zaXRpb24oKSA9PSBSZWxhdGl2ZVBvc2l0aW9uICYmIGxheWVyKCkpCiAgICAgICAg
ICAgICAgICAgb2Zmc2V0ICs9IGxheWVyKCktPnJlbGF0aXZlUG9zaXRpb25PZmZzZXQoKTsKICAg
ICAgICAgICAgIHRyYW5zZm9ybVN0YXRlLm1vdmUob2Zmc2V0KTsKSW5kZXg6IFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllci5jcHAJKHJldmlzaW9uIDY2OTAzKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTQxLDExICsyNTQxLDExIEBAIHZvaWQg
UmVuZGVyTGF5ZXI6OnBhaW50Q2hpbGRMYXllckludG9Db2wKICAgICBjb2x1bW5CbG9jay0+bGF5
ZXIoKS0+Y29udmVydFRvTGF5ZXJDb29yZHMocm9vdExheWVyLCBsYXllclgsIGxheWVyWSk7CiAg
ICAgCiAgICAgQ29sdW1uSW5mbyogY29sSW5mbyA9IGNvbHVtbkJsb2NrLT5jb2x1bW5JbmZvKCk7
Ci0gICAgdW5zaWduZWQgY29sQ291bnQgPSBjb2xJbmZvLT5jb2x1bW5Db3VudCgpOworICAgIHVu
c2lnbmVkIGNvbENvdW50ID0gY29sdW1uQmxvY2stPmNvbHVtbkNvdW50KGNvbEluZm8pOwogICAg
IGludCBjdXJyWU9mZnNldCA9IDA7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvbENv
dW50OyBpKyspIHsKICAgICAgICAgLy8gRm9yIGVhY2ggcmVjdCwgd2UgY2xpcCB0byB0aGUgcmVj
dCwgYW5kIHRoZW4gd2UgYWRqdXN0IG91ciBjb29yZHMuCi0gICAgICAgIEludFJlY3QgY29sUmVj
dCA9IGNvbEluZm8tPmNvbHVtblJlY3RBdChpKTsKKyAgICAgICAgSW50UmVjdCBjb2xSZWN0ID0g
Y29sdW1uQmxvY2stPmNvbHVtblJlY3RBdChjb2xJbmZvLCBpKTsKICAgICAgICAgaW50IGN1cnJY
T2Zmc2V0ID0gY29sUmVjdC54KCkgLSAoY29sdW1uQmxvY2stPmJvcmRlckxlZnQoKSArIGNvbHVt
bkJsb2NrLT5wYWRkaW5nTGVmdCgpKTsKICAgICAgICAgY29sUmVjdC5tb3ZlKGxheWVyWCwgbGF5
ZXJZKTsKIApAQCAtMzAwNywxNyArMzAwNywxNyBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6
OmhpdFRlc3RDaGlsZExhCiAgICAgY29sdW1uQmxvY2stPmxheWVyKCktPmNvbnZlcnRUb0xheWVy
Q29vcmRzKHJvb3RMYXllciwgbGF5ZXJYLCBsYXllclkpOwogICAgIAogICAgIENvbHVtbkluZm8q
IGNvbEluZm8gPSBjb2x1bW5CbG9jay0+Y29sdW1uSW5mbygpOwotICAgIGludCBjb2xDb3VudCA9
IGNvbEluZm8tPmNvbHVtbkNvdW50KCk7CisgICAgaW50IGNvbENvdW50ID0gY29sdW1uQmxvY2st
PmNvbHVtbkNvdW50KGNvbEluZm8pOwogICAgIAogICAgIC8vIFdlIGhhdmUgdG8gZ28gYmFja3dh
cmRzIGZyb20gdGhlIGxhc3QgY29sdW1uIHRvIHRoZSBmaXJzdC4KICAgICBpbnQgbGVmdCA9IGNv
bHVtbkJsb2NrLT5ib3JkZXJMZWZ0KCkgKyBjb2x1bW5CbG9jay0+cGFkZGluZ0xlZnQoKTsKICAg
ICBpbnQgY3VycllPZmZzZXQgPSAwOwogICAgIGludCBpOwogICAgIGZvciAoaSA9IDA7IGkgPCBj
b2xDb3VudDsgaSsrKQotICAgICAgICBjdXJyWU9mZnNldCAtPSBjb2xJbmZvLT5jb2x1bW5SZWN0
QXQoaSkuaGVpZ2h0KCk7CisgICAgICAgIGN1cnJZT2Zmc2V0IC09IGNvbHVtbkJsb2NrLT5jb2x1
bW5SZWN0QXQoY29sSW5mbywgaSkuaGVpZ2h0KCk7CiAgICAgZm9yIChpID0gY29sQ291bnQgLSAx
OyBpID49IDA7IGktLSkgewogICAgICAgICAvLyBGb3IgZWFjaCByZWN0LCB3ZSBjbGlwIHRvIHRo
ZSByZWN0LCBhbmQgdGhlbiB3ZSBhZGp1c3Qgb3VyIGNvb3Jkcy4KLSAgICAgICAgSW50UmVjdCBj
b2xSZWN0ID0gY29sSW5mby0+Y29sdW1uUmVjdEF0KGkpOworICAgICAgICBJbnRSZWN0IGNvbFJl
Y3QgPSBjb2x1bW5CbG9jay0+Y29sdW1uUmVjdEF0KGNvbEluZm8sIGkpOwogICAgICAgICBpbnQg
Y3VyclhPZmZzZXQgPSBjb2xSZWN0LngoKSAtIGxlZnQ7CiAgICAgICAgIGN1cnJZT2Zmc2V0ICs9
IGNvbFJlY3QuaGVpZ2h0KCk7CiAgICAgICAgIGNvbFJlY3QubW92ZShsYXllclgsIGxheWVyWSk7
CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuY3BwCShyZXZpc2lvbiA2
Njg4NikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzUsNyArMzUsNiBAQAogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgogI2lu
Y2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJSb290SW5saW5lQm94LmgiCi0jaW5jbHVk
ZSAiU2V0dGluZ3MuaCIgLy8gRklYTUU6IFRoaXMgaW5jbHVkZSBjYW4gYmUgcmVtb3ZlZCB3aGVu
IHBhZ2luYXRlRHVyaW5nTGF5b3V0RW5hYmxlZCBpcyB0YWtlbiBvdXQuCiAKIHVzaW5nIG5hbWVz
cGFjZSBzdGQ7CiAKQEAgLTE2MSw3ICsxNjAsNyBAQCB2b2lkIFJlbmRlckxpbmVCb3hMaXN0Ojpw
YWludChSZW5kZXJCb3hNCiAgICAgICAgIHJldHVybjsKIAogICAgIFJlbmRlclZpZXcqIHYgPSBy
ZW5kZXJlci0+dmlldygpOwotICAgIGJvb2wgdXNlUHJpbnRSZWN0ID0gIXYtPnByaW50UmVjdCgp
LmlzRW1wdHkoKSAmJiAhcmVuZGVyZXItPmRvY3VtZW50KCktPnNldHRpbmdzKCktPnBhZ2luYXRl
RHVyaW5nTGF5b3V0RW5hYmxlZCgpOworICAgIGJvb2wgdXNlUHJpbnRSZWN0ID0gIXYtPnByaW50
UmVjdCgpLmlzRW1wdHkoKTsKICAgICAKICAgICAvLyBXZSBjYW4gY2hlY2sgdGhlIGZpcnN0IGJv
eCBhbmQgbGFzdCBib3ggYW5kIGF2b2lkIHBhaW50aW5nIGlmIHdlIGRvbid0CiAgICAgLy8gaW50
ZXJzZWN0LiAgVGhpcyBpcyBhIHF1aWNrIHNob3J0LWNpcmN1aXQgdGhhdCB3ZSBjYW4gdGFrZSB0
byBhdm9pZCB3YWxraW5nIGFueSBsaW5lcy4KQEAgLTIxNSw3ICsyMTQsNiBAQCB2b2lkIFJlbmRl
ckxpbmVCb3hMaXN0OjpwYWludChSZW5kZXJCb3hNCiAgICAgICAgIGludCBib3R0b20gPSBjdXJy
LT5ib3R0b21WaXNpYmxlT3ZlcmZsb3coKSArIHJlbmRlcmVyLT5tYXhpbWFsT3V0bGluZVNpemUo
aW5mby5waGFzZSk7CiAgICAgICAgIGggPSBib3R0b20gLSB0b3A7CiAgICAgICAgIHlQb3MgPSB0
eSArIHRvcDsKLSAgICAgICAgdi0+c2V0TWluaW11bUNvbHVtbkhlaWdodChoKTsKICAgICAgICAg
aWYgKHlQb3MgPCBpbmZvLnJlY3QuYm90dG9tKCkgJiYgeVBvcyArIGggPiBpbmZvLnJlY3QueSgp
KQogICAgICAgICAgICAgY3Vyci0+cGFpbnQoaW5mbywgdHgsIHR5KTsKICAgICB9CkluZGV4OiBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJWaWV3LmNwcAkocmV2aXNpb24gNjY4ODYpCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNiBAQCBSZW5k
ZXJWaWV3OjpSZW5kZXJWaWV3KE5vZGUqIG5vZGUsIEZyYW1lCiAgICAgLCBtX21heGltYWxPdXRs
aW5lU2l6ZSgwKQogICAgICwgbV9iZXN0VHJ1bmNhdGVkQXQoMCkKICAgICAsIG1fdHJ1bmNhdG9y
V2lkdGgoMCkKLSAgICAsIG1fbWluaW11bUNvbHVtbkhlaWdodCgwKQogICAgICwgbV9mb3JjZWRQ
YWdlQnJlYWsoZmFsc2UpCiAgICAgLCBtX2xheW91dFN0YXRlKDApCiAgICAgLCBtX2xheW91dFN0
YXRlRGlzYWJsZUNvdW50KDApCkBAIC02OTUsNyArNjk0LDYgQEAgdm9pZCBSZW5kZXJWaWV3Ojpz
ZXRCZXN0VHJ1bmNhdGVkQXQoaW50IAogCiB2b2lkIFJlbmRlclZpZXc6OnB1c2hMYXlvdXRTdGF0
ZShSZW5kZXJPYmplY3QqIHJvb3QpCiB7Ci0gICAgQVNTRVJUKCFkb2luZ0Z1bGxSZXBhaW50KCkp
OwogICAgIEFTU0VSVChtX2xheW91dFN0YXRlRGlzYWJsZUNvdW50ID09IDApOwogICAgIEFTU0VS
VChtX2xheW91dFN0YXRlID09IDApOwogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJW
aWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCShyZXZp
c2lvbiA2Njg4NikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAkod29ya2luZyBj
b3B5KQpAQCAtODMsMTIgKzgzLDEwIEBAIHB1YmxpYzoKICAgICBJbnRSZWN0IHByaW50UmVjdCgp
IGNvbnN0IHsgcmV0dXJuIG1fcHJpbnRSZWN0OyB9CiAgICAgdm9pZCBzZXRQcmludFJlY3QoY29u
c3QgSW50UmVjdCYgcikgeyBtX3ByaW50UmVjdCA9IHI7IH0KIAotICAgIHZvaWQgc2V0VHJ1bmNh
dGVkQXQoaW50IHkpIHsgbV90cnVuY2F0ZWRBdCA9IHk7IG1fYmVzdFRydW5jYXRlZEF0ID0gbV90
cnVuY2F0b3JXaWR0aCA9IDA7IG1fbWluaW11bUNvbHVtbkhlaWdodCA9IDA7IG1fZm9yY2VkUGFn
ZUJyZWFrID0gZmFsc2U7IH0KKyAgICB2b2lkIHNldFRydW5jYXRlZEF0KGludCB5KSB7IG1fdHJ1
bmNhdGVkQXQgPSB5OyBtX2Jlc3RUcnVuY2F0ZWRBdCA9IG1fdHJ1bmNhdG9yV2lkdGggPSAwOyBt
X2ZvcmNlZFBhZ2VCcmVhayA9IGZhbHNlOyB9CiAgICAgdm9pZCBzZXRCZXN0VHJ1bmNhdGVkQXQo
aW50IHksIFJlbmRlckJveE1vZGVsT2JqZWN0KiBmb3JSZW5kZXJlciwgYm9vbCBmb3JjZWRCcmVh
ayA9IGZhbHNlKTsKLSAgICB2b2lkIHNldE1pbmltdW1Db2x1bW5IZWlnaHQoaW50IGhlaWdodCkg
eyBtX21pbmltdW1Db2x1bW5IZWlnaHQgPSBoZWlnaHQ7IH0KICAgICBpbnQgYmVzdFRydW5jYXRl
ZEF0KCkgY29uc3QgeyByZXR1cm4gbV9iZXN0VHJ1bmNhdGVkQXQ7IH0KLSAgICBpbnQgbWluaW11
bUNvbHVtbkhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fbWluaW11bUNvbHVtbkhlaWdodDsgfQot
CisgICAgCiAgICAgaW50IHRydW5jYXRlZEF0KCkgY29uc3QgeyByZXR1cm4gbV90cnVuY2F0ZWRB
dDsgfQogCiAgICAgdmlydHVhbCB2b2lkIGFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+Jiwg
aW50IHR4LCBpbnQgdHkpOwpAQCAtMTIyLDIxICsxMjAsMjAgQEAgcHVibGljOgogCiAgICAgYm9v
bCBkb2luZ0Z1bGxSZXBhaW50KCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZVZpZXctPm5lZWRzRnVs
bFJlcGFpbnQoKTsgfQogCi0gICAgdm9pZCBwdXNoTGF5b3V0U3RhdGUoUmVuZGVyQm94KiByZW5k
ZXJlciwgY29uc3QgSW50U2l6ZSYgb2Zmc2V0KQorICAgIHZvaWQgcHVzaExheW91dFN0YXRlKFJl
bmRlckJveCogcmVuZGVyZXIsIGNvbnN0IEludFNpemUmIG9mZnNldCwgaW50IHBhZ2VIZWlnaHQg
PSAwLCBDb2x1bW5JbmZvKiBjb2xJbmZvID0gMCkKICAgICB7Ci0gICAgICAgIGlmIChkb2luZ0Z1
bGxSZXBhaW50KCkpCi0gICAgICAgICAgICByZXR1cm47CiAgICAgICAgIC8vIFdlIHB1c2ggTGF5
b3V0U3RhdGUgZXZlbiBpZiBsYXlvdXRTdGF0ZSBpcyBkaXNhYmxlZCBiZWNhdXNlIGl0IHN0b3Jl
cyBsYXlvdXREZWx0YSB0b28uCi0gICAgICAgIG1fbGF5b3V0U3RhdGUgPSBuZXcgKHJlbmRlckFy
ZW5hKCkpIExheW91dFN0YXRlKG1fbGF5b3V0U3RhdGUsIHJlbmRlcmVyLCBvZmZzZXQpOworICAg
ICAgICBpZiAoIWRvaW5nRnVsbFJlcGFpbnQoKSB8fCByZW5kZXJlci0+aGFzQ29sdW1ucygpIHx8
IG1fbGF5b3V0U3RhdGUtPnBhZ2luYXRlZCgpKQorICAgICAgICAgICAgbV9sYXlvdXRTdGF0ZSA9
IG5ldyAocmVuZGVyQXJlbmEoKSkgTGF5b3V0U3RhdGUobV9sYXlvdXRTdGF0ZSwgcmVuZGVyZXIs
IG9mZnNldCwgcGFnZUhlaWdodCwgY29sSW5mbyk7CiAgICAgfQogCiAgICAgdm9pZCBwdXNoTGF5
b3V0U3RhdGUoUmVuZGVyT2JqZWN0Kik7CiAKICAgICB2b2lkIHBvcExheW91dFN0YXRlKCkKICAg
ICB7Ci0gICAgICAgIGlmIChkb2luZ0Z1bGxSZXBhaW50KCkpCi0gICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIExheW91dFN0YXRlKiBzdGF0ZSA9IG1fbGF5b3V0U3RhdGU7CisgICAgICAgIGlm
IChkb2luZ0Z1bGxSZXBhaW50KCkgJiYgIW1fbGF5b3V0U3RhdGUtPnBhZ2luYXRlZCgpKQorICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICBtX2xheW91dFN0YXRlID0gc3RhdGUtPm1fbmV4dDsK
ICAgICAgICAgc3RhdGUtPmRlc3Ryb3kocmVuZGVyQXJlbmEoKSk7CiAgICAgfQpAQCAtMTk4LDcg
KzE5NSw2IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAgaW50IG1fYmVzdFRydW5jYXRlZEF0
OwogICAgIGludCBtX3RydW5jYXRvcldpZHRoOwotICAgIGludCBtX21pbmltdW1Db2x1bW5IZWln
aHQ7CiAgICAgYm9vbCBtX2ZvcmNlZFBhZ2VCcmVhazsKICAgICBMYXlvdXRTdGF0ZSogbV9sYXlv
dXRTdGF0ZTsKICAgICB1bnNpZ25lZCBtX2xheW91dFN0YXRlRGlzYWJsZUNvdW50OwpAQCAtMjI3
LDEzICsyMjMsMTMgQEAgdm9pZCB0b1JlbmRlclZpZXcoY29uc3QgUmVuZGVyVmlldyopOwogY2xh
c3MgTGF5b3V0U3RhdGVNYWludGFpbmVyIDogcHVibGljIE5vbmNvcHlhYmxlIHsKIHB1YmxpYzoK
ICAgICAvLyBjdG9yIHRvIHB1c2ggbm93Ci0gICAgTGF5b3V0U3RhdGVNYWludGFpbmVyKFJlbmRl
clZpZXcqIHZpZXcsIFJlbmRlckJveCogcm9vdCwgSW50U2l6ZSBvZmZzZXQsIGJvb2wgZGlzYWJs
ZVN0YXRlID0gZmFsc2UpCisgICAgTGF5b3V0U3RhdGVNYWludGFpbmVyKFJlbmRlclZpZXcqIHZp
ZXcsIFJlbmRlckJveCogcm9vdCwgSW50U2l6ZSBvZmZzZXQsIGJvb2wgZGlzYWJsZVN0YXRlID0g
ZmFsc2UsIGludCBwYWdlSGVpZ2h0ID0gMCwgQ29sdW1uSW5mbyogY29sSW5mbyA9IDApCiAgICAg
ICAgIDogbV92aWV3KHZpZXcpCiAgICAgICAgICwgbV9kaXNhYmxlZChkaXNhYmxlU3RhdGUpCiAg
ICAgICAgICwgbV9kaWRTdGFydChmYWxzZSkKICAgICAgICAgLCBtX2RpZEVuZChmYWxzZSkKICAg
ICB7Ci0gICAgICAgIHB1c2gocm9vdCwgb2Zmc2V0KTsKKyAgICAgICAgcHVzaChyb290LCBvZmZz
ZXQsIHBhZ2VIZWlnaHQsIGNvbEluZm8pOwogICAgIH0KICAgICAKICAgICAvLyBjdG9yIHRvIG1h
eWJlIHB1c2ggbGF0ZXIKQEAgLTI1MCwxMSArMjQ2LDExIEBAIHB1YmxpYzoKICAgICAgICAgQVNT
RVJUKG1fZGlkU3RhcnQgPT0gbV9kaWRFbmQpOyAgIC8vIGlmIHRoaXMgZmlyZXMsIGl0IG1lYW5z
IHRoYXQgc29tZW9uZSBkaWQgYSBwdXNoKCksIGJ1dCBmb3Jnb3QgdG8gcG9wKCkuCiAgICAgfQog
Ci0gICAgdm9pZCBwdXNoKFJlbmRlckJveCogcm9vdCwgSW50U2l6ZSBvZmZzZXQpCisgICAgdm9p
ZCBwdXNoKFJlbmRlckJveCogcm9vdCwgSW50U2l6ZSBvZmZzZXQsIGludCBwYWdlSGVpZ2h0ID0g
MCwgQ29sdW1uSW5mbyogY29sSW5mbyA9IDApCiAgICAgewogICAgICAgICBBU1NFUlQoIW1fZGlk
U3RhcnQpOwogICAgICAgICAvLyBXZSBwdXNoIHN0YXRlIGV2ZW4gaWYgZGlzYWJsZWQsIGJlY2F1
c2Ugd2Ugc3RpbGwgbmVlZCB0byBzdG9yZSBsYXlvdXREZWx0YQotICAgICAgICBtX3ZpZXctPnB1
c2hMYXlvdXRTdGF0ZShyb290LCBvZmZzZXQpOworICAgICAgICBtX3ZpZXctPnB1c2hMYXlvdXRT
dGF0ZShyb290LCBvZmZzZXQsIHBhZ2VIZWlnaHQsIGNvbEluZm8pOwogICAgICAgICBpZiAobV9k
aXNhYmxlZCkKICAgICAgICAgICAgIG1fdmlldy0+ZGlzYWJsZUxheW91dFN0YXRlKCk7CiAgICAg
ICAgIG1fZGlkU3RhcnQgPSB0cnVlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67332</attachid>
            <date>2010-09-11 23:17:58 -0700</date>
            <delta_ts>2010-09-13 12:11:40 -0700</delta_ts>
            <desc>Improve line layout pagination</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>75412</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL0NvbHVtbkluZm8uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9Db2x1bW5JbmZvLmgJKHJldmlzaW9uIDY2OTAzKQorKysgV2ViQ29yZS9y
ZW5kZXJpbmcvQ29sdW1uSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw5IEBAIHB1
YmxpYzoKICAgICBDb2x1bW5JbmZvKCkKICAgICAgICAgOiBtX2Rlc2lyZWRDb2x1bW5XaWR0aCgw
KQogICAgICAgICAsIG1fZGVzaXJlZENvbHVtbkNvdW50KDEpCisgICAgICAgICwgbV9jb2x1bW5D
b3VudCgxKQorICAgICAgICAsIG1fY29sdW1uSGVpZ2h0KDApCisgICAgICAgICwgbV9taW5pbXVt
Q29sdW1uSGVpZ2h0KDApCiAgICAgICAgIHsgfQogICAgIAogICAgIGludCBkZXNpcmVkQ29sdW1u
V2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2Rlc2lyZWRDb2x1bW5XaWR0aDsgfQpAQCAtNDQsMTkg
KzQ3LDI4IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBkZXNpcmVkQ29sdW1uQ291bnQoKSBjb25z
dCB7IHJldHVybiBtX2Rlc2lyZWRDb2x1bW5Db3VudDsgfQogICAgIHZvaWQgc2V0RGVzaXJlZENv
bHVtbkNvdW50KHVuc2lnbmVkIGNvdW50KSB7IG1fZGVzaXJlZENvbHVtbkNvdW50ID0gY291bnQ7
IH0KIAotICAgIC8vIEVuY2Fwc3VsYXRlZCBmb3IgdGhlIGZ1dHVyZSB3aGVyZSB3ZSBjYW4gYXZv
aWQgc3RvcmluZyB0aGUgcmVjdHMgYW5kIGp1c3QgY29tcHV0ZSB0aGVtIGR5bmFtaWNhbGx5Lgot
ICAgIHNpemVfdCBjb2x1bW5Db3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fY29sdW1uUmVjdHMuc2l6
ZSgpOyB9Ci0gICAgY29uc3QgSW50UmVjdCYgY29sdW1uUmVjdEF0KHNpemVfdCBpKSBjb25zdCB7
IHJldHVybiBtX2NvbHVtblJlY3RzW2ldOyB9CisgICAgdW5zaWduZWQgY29sdW1uQ291bnQoKSBj
b25zdCB7IHJldHVybiBtX2NvbHVtbkNvdW50OyB9CisgICAgaW50IGNvbHVtbkhlaWdodCgpIGNv
bnN0IHsgcmV0dXJuIG1fY29sdW1uSGVpZ2h0OyB9CiAKLSAgICB2b2lkIGNsZWFyQ29sdW1ucygp
IHsgbV9jb2x1bW5SZWN0cy5jbGVhcigpOyB9CisgICAgLy8gU2V0IG91ciBjb3VudCBhbmQgaGVp
Z2h0LiAgVGhpcyBpcyBlbm91Z2ggaW5mbyBmb3IgYSBSZW5kZXJCbG9jayB0byBjb21wdXRlIHBh
Z2UgcmVjdHMKKyAgICAvLyBkeW5hbWljYWxseS4KKyAgICB2b2lkIHNldENvbHVtbkNvdW50QW5k
SGVpZ2h0KGludCBjLCBpbnQgaCkKKyAgICB7IAorICAgICAgICBtX2NvbHVtbkNvdW50ID0gYzsK
KyAgICAgICAgbV9jb2x1bW5IZWlnaHQgPSBoOworICAgIH0KKyAgICB2b2lkIHNldENvbHVtbkhl
aWdodChpbnQgaCkgeyBtX2NvbHVtbkhlaWdodCA9IGg7IH0KKworICAgIHZvaWQgdXBkYXRlTWlu
aW11bUNvbHVtbkhlaWdodChpbnQgaCkgeyBtX21pbmltdW1Db2x1bW5IZWlnaHQgPSBtYXgoaCwg
bV9taW5pbXVtQ29sdW1uSGVpZ2h0KTsgfQorICAgIGludCBtaW5pbXVtQ29sdW1uSGVpZ2h0KCkg
Y29uc3QgeyByZXR1cm4gbV9taW5pbXVtQ29sdW1uSGVpZ2h0OyB9CiAKLSAgICAvLyBGSVhNRTog
V2lsbCBnbyBhd2F5IG9uY2Ugd2UgZG9uJ3QgdXNlIHRoZSBWZWN0b3IuCi0gICAgdm9pZCBhZGRD
b2x1bW5SZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpIHsgbV9jb2x1bW5SZWN0cy5hcHBlbmQocmVj
dCk7IH0KLSAgICAKIHByaXZhdGU6CiAgICAgaW50IG1fZGVzaXJlZENvbHVtbldpZHRoOwogICAg
IHVuc2lnbmVkIG1fZGVzaXJlZENvbHVtbkNvdW50OwotICAgIFZlY3RvcjxJbnRSZWN0PiBtX2Nv
bHVtblJlY3RzOworICAgIAorICAgIHVuc2lnbmVkIG1fY29sdW1uQ291bnQ7CisgICAgaW50IG1f
Y29sdW1uSGVpZ2h0OworICAgIGludCBtX21pbmltdW1Db2x1bW5IZWlnaHQ7CiB9OwogCiB9Cklu
ZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvTGF5b3V0U3RhdGUuY3BwCShyZXZpc2lvbiA2Njg4NikKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsOCArMzMs
OSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUxheW91dFN0YXRlOjpMYXlvdXRTdGF0ZShM
YXlvdXRTdGF0ZSogcHJldiwgUmVuZGVyQm94KiByZW5kZXJlciwgY29uc3QgSW50U2l6ZSYgb2Zm
c2V0KQotICAgIDogbV9uZXh0KHByZXYpCitMYXlvdXRTdGF0ZTo6TGF5b3V0U3RhdGUoTGF5b3V0
U3RhdGUqIHByZXYsIFJlbmRlckJveCogcmVuZGVyZXIsIGNvbnN0IEludFNpemUmIG9mZnNldCwg
aW50IHBhZ2VIZWlnaHQsIENvbHVtbkluZm8qIGNvbEluZm8pCisgICAgOiBtX2NvbHVtbkluZm8o
Y29sSW5mbykKKyAgICAsIG1fbmV4dChwcmV2KQogI2lmbmRlZiBOREVCVUcKICAgICAsIG1fcmVu
ZGVyZXIocmVuZGVyZXIpCiAjZW5kaWYKQEAgLTQ1LDQzICs0Niw2NyBAQCBMYXlvdXRTdGF0ZTo6
TGF5b3V0U3RhdGUoTGF5b3V0U3RhdGUqIHByCiAgICAgaWYgKGZpeGVkKSB7CiAgICAgICAgIC8v
IEZJWE1FOiBUaGlzIGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgd2l0aCB0cmFuc2Zvcm1zLgogICAg
ICAgICBGbG9hdFBvaW50IGZpeGVkT2Zmc2V0ID0gcmVuZGVyZXItPnZpZXcoKS0+bG9jYWxUb0Fi
c29sdXRlKEZsb2F0UG9pbnQoKSwgdHJ1ZSk7Ci0gICAgICAgIG1fb2Zmc2V0ID0gSW50U2l6ZShm
aXhlZE9mZnNldC54KCksIGZpeGVkT2Zmc2V0LnkoKSkgKyBvZmZzZXQ7CisgICAgICAgIG1fcGFp
bnRPZmZzZXQgPSBJbnRTaXplKGZpeGVkT2Zmc2V0LngoKSwgZml4ZWRPZmZzZXQueSgpKSArIG9m
ZnNldDsKICAgICB9IGVsc2UKLSAgICAgICAgbV9vZmZzZXQgPSBwcmV2LT5tX29mZnNldCArIG9m
ZnNldDsKKyAgICAgICAgbV9wYWludE9mZnNldCA9IHByZXYtPm1fcGFpbnRPZmZzZXQgKyBvZmZz
ZXQ7CiAKLSAgICBpZiAocmVuZGVyZXItPmlzUmVsUG9zaXRpb25lZCgpKSB7Ci0gICAgICAgIGlm
IChyZW5kZXJlci0+aGFzTGF5ZXIoKSkKLSAgICAgICAgICAgIG1fb2Zmc2V0ICs9IHJlbmRlcmVy
LT5sYXllcigpLT5yZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0KCk7Ci0gICAgfSBlbHNlIGlmIChyZW5k
ZXJlci0+aXNQb3NpdGlvbmVkKCkgJiYgIWZpeGVkKSB7CisgICAgaWYgKHJlbmRlcmVyLT5pc1Bv
c2l0aW9uZWQoKSAmJiAhZml4ZWQpIHsKICAgICAgICAgaWYgKFJlbmRlck9iamVjdCogY29udGFp
bmVyID0gcmVuZGVyZXItPmNvbnRhaW5lcigpKSB7CiAgICAgICAgICAgICBpZiAoY29udGFpbmVy
LT5pc1JlbFBvc2l0aW9uZWQoKSAmJiBjb250YWluZXItPmlzUmVuZGVySW5saW5lKCkpCi0gICAg
ICAgICAgICAgICAgbV9vZmZzZXQgKz0gdG9SZW5kZXJJbmxpbmUoY29udGFpbmVyKS0+cmVsYXRp
dmVQb3NpdGlvbmVkSW5saW5lT2Zmc2V0KHJlbmRlcmVyKTsKKyAgICAgICAgICAgICAgICBtX3Bh
aW50T2Zmc2V0ICs9IHRvUmVuZGVySW5saW5lKGNvbnRhaW5lciktPnJlbGF0aXZlUG9zaXRpb25l
ZElubGluZU9mZnNldChyZW5kZXJlcik7CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBtX2xheW91
dE9mZnNldCA9IG1fcGFpbnRPZmZzZXQ7CisKKyAgICBpZiAocmVuZGVyZXItPmlzUmVsUG9zaXRp
b25lZCgpICYmIHJlbmRlcmVyLT5oYXNMYXllcigpKQorICAgICAgICBtX3BhaW50T2Zmc2V0ICs9
IHJlbmRlcmVyLT5sYXllcigpLT5yZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0KCk7CisKICAgICBtX2Ns
aXBwZWQgPSAhZml4ZWQgJiYgcHJldi0+bV9jbGlwcGVkOwogICAgIGlmIChtX2NsaXBwZWQpCiAg
ICAgICAgIG1fY2xpcFJlY3QgPSBwcmV2LT5tX2NsaXBSZWN0OwogCiAgICAgaWYgKHJlbmRlcmVy
LT5oYXNPdmVyZmxvd0NsaXAoKSkgewogICAgICAgICBSZW5kZXJMYXllciogbGF5ZXIgPSByZW5k
ZXJlci0+bGF5ZXIoKTsKLSAgICAgICAgSW50UmVjdCBjbGlwUmVjdCh0b1BvaW50KG1fb2Zmc2V0
KSArIHJlbmRlcmVyLT52aWV3KCktPmxheW91dERlbHRhKCksIGxheWVyLT5zaXplKCkpOworICAg
ICAgICBJbnRSZWN0IGNsaXBSZWN0KHRvUG9pbnQobV9wYWludE9mZnNldCkgKyByZW5kZXJlci0+
dmlldygpLT5sYXlvdXREZWx0YSgpLCBsYXllci0+c2l6ZSgpKTsKICAgICAgICAgaWYgKG1fY2xp
cHBlZCkKICAgICAgICAgICAgIG1fY2xpcFJlY3QuaW50ZXJzZWN0KGNsaXBSZWN0KTsKICAgICAg
ICAgZWxzZSB7CiAgICAgICAgICAgICBtX2NsaXBSZWN0ID0gY2xpcFJlY3Q7CiAgICAgICAgICAg
ICBtX2NsaXBwZWQgPSB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIG1fb2Zmc2V0IC09IGxheWVy
LT5zY3JvbGxlZENvbnRlbnRPZmZzZXQoKTsKKworICAgICAgICBtX3BhaW50T2Zmc2V0IC09IGxh
eWVyLT5zY3JvbGxlZENvbnRlbnRPZmZzZXQoKTsKICAgICB9CiAKLSAgICBtX2xheW91dERlbHRh
ID0gbV9uZXh0LT5tX2xheW91dERlbHRhOworICAgIC8vIERpc2FibGUgcGFnaW5hdGlvbiBmb3Ig
b2JqZWN0cyB3ZSBkb24ndCBzdXBwb3J0LiAgRm9yIG5vdyB0aGlzIGluY2x1ZGVzIG92ZXJmbG93
OnNjcm9sbC9hdXRvIGFuZCBpbmxpbmUgYmxvY2tzLgorICAgIGlmIChyZW5kZXJlci0+aXNSZXBs
YWNlZCgpIHx8IHJlbmRlcmVyLT5zY3JvbGxzT3ZlcmZsb3coKSkKKyAgICAgICAgbV9wYWdlSGVp
Z2h0ID0gMDsKKworICAgIC8vIElmIHdlIGVzdGFibGlzaCBhIG5ldyBwYWdlIGhlaWdodCwgdGhl
biBjYWNoZSB0aGUgb2Zmc2V0IHRvIHRoZSB0b3Agb2YgdGhlIGZpcnN0IHBhZ2UuCisgICAgLy8g
V2UgY2FuIGNvbXBhcmUgdGhpcyBsYXRlciBvbiB0byBmaWd1cmUgb3V0IHdoYXQgcGFydCBvZiB0
aGUgcGFnZSB3ZSdyZSBhY3R1YWxseSBvbiwKKyAgICBpZiAocGFnZUhlaWdodCkgeworICAgICAg
ICBtX3BhZ2VIZWlnaHQgPSBwYWdlSGVpZ2h0OworICAgICAgICBtX3BhZ2VPZmZzZXQgPSBJbnRT
aXplKG1fcGFpbnRPZmZzZXQud2lkdGgoKSArIHJlbmRlcmVyLT5ib3JkZXJMZWZ0KCkgKyByZW5k
ZXJlci0+cGFkZGluZ0xlZnQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3Bh
aW50T2Zmc2V0LmhlaWdodCgpICsgcmVuZGVyZXItPmJvcmRlclRvcCgpICsgcmVuZGVyZXItPnBh
ZGRpbmdUb3AoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gSWYgd2UgZG9uJ3QgZXN0YWJs
aXNoIGEgbmV3IHBhZ2UgaGVpZ2h0LCB0aGVuIHByb3BhZ2F0ZSB0aGUgb2xkIHBhZ2UgaGVpZ2h0
IGFuZCBvZmZzZXQgZG93bi4KKyAgICAgICAgbV9wYWdlSGVpZ2h0ID0gbV9uZXh0LT5tX3BhZ2VI
ZWlnaHQ7CisgICAgICAgIG1fcGFnZU9mZnNldCA9IG1fbmV4dC0+bV9wYWdlT2Zmc2V0OworICAg
IH0KKyAgICAKKyAgICBpZiAoIW1fY29sdW1uSW5mbykKKyAgICAgICAgbV9jb2x1bW5JbmZvID0g
bV9uZXh0LT5tX2NvbHVtbkluZm87CiAKKyAgICBtX2xheW91dERlbHRhID0gbV9uZXh0LT5tX2xh
eW91dERlbHRhOworICAgIAogICAgIC8vIEZJWE1FOiA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTM0NDM+IEFwcGx5IGNvbnRyb2wgY2xpcCBpZiBwcmVzZW50LgogfQog
CiBMYXlvdXRTdGF0ZTo6TGF5b3V0U3RhdGUoUmVuZGVyT2JqZWN0KiByb290KQogICAgIDogbV9j
bGlwcGVkKGZhbHNlKQorICAgICwgbV9wYWdlSGVpZ2h0KDApCisgICAgLCBtX2NvbHVtbkluZm8o
MCkKICAgICAsIG1fbmV4dCgwKQogI2lmbmRlZiBOREVCVUcKICAgICAsIG1fcmVuZGVyZXIocm9v
dCkKQEAgLTg5LDEzICsxMTQsMTMgQEAgTGF5b3V0U3RhdGU6OkxheW91dFN0YXRlKFJlbmRlck9i
amVjdCogcgogewogICAgIFJlbmRlck9iamVjdCogY29udGFpbmVyID0gcm9vdC0+Y29udGFpbmVy
KCk7CiAgICAgRmxvYXRQb2ludCBhYnNDb250ZW50UG9pbnQgPSBjb250YWluZXItPmxvY2FsVG9B
YnNvbHV0ZShGbG9hdFBvaW50KCksIGZhbHNlLCB0cnVlKTsKLSAgICBtX29mZnNldCA9IEludFNp
emUoYWJzQ29udGVudFBvaW50LngoKSwgYWJzQ29udGVudFBvaW50LnkoKSk7CisgICAgbV9wYWlu
dE9mZnNldCA9IEludFNpemUoYWJzQ29udGVudFBvaW50LngoKSwgYWJzQ29udGVudFBvaW50Lnko
KSk7CiAKICAgICBpZiAoY29udGFpbmVyLT5oYXNPdmVyZmxvd0NsaXAoKSkgewogICAgICAgICBS
ZW5kZXJMYXllciogbGF5ZXIgPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KGNvbnRhaW5lciktPmxh
eWVyKCk7CiAgICAgICAgIG1fY2xpcHBlZCA9IHRydWU7Ci0gICAgICAgIG1fY2xpcFJlY3QgPSBJ
bnRSZWN0KHRvUG9pbnQobV9vZmZzZXQpLCBsYXllci0+c2l6ZSgpKTsKLSAgICAgICAgbV9vZmZz
ZXQgLT0gbGF5ZXItPnNjcm9sbGVkQ29udGVudE9mZnNldCgpOworICAgICAgICBtX2NsaXBSZWN0
ID0gSW50UmVjdCh0b1BvaW50KG1fcGFpbnRPZmZzZXQpLCBsYXllci0+c2l6ZSgpKTsKKyAgICAg
ICAgbV9wYWludE9mZnNldCAtPSBsYXllci0+c2Nyb2xsZWRDb250ZW50T2Zmc2V0KCk7CiAgICAg
fQogfQogCkBAIC0xMjYsNCArMTUxLDExIEBAIHZvaWQgTGF5b3V0U3RhdGU6Om9wZXJhdG9yIGRl
bGV0ZSh2b2lkKiAKICAgICAqKHNpemVfdCopcHRyID0gc3o7CiB9CiAKK3ZvaWQgTGF5b3V0U3Rh
dGU6OmNsZWFyUGFnaW5hdGlvbkluZm9ybWF0aW9uKCkKK3sKKyAgICBtX3BhZ2VIZWlnaHQgPSBt
X25leHQtPm1fcGFnZUhlaWdodDsKKyAgICBtX3BhZ2VPZmZzZXQgPSBtX25leHQtPm1fcGFnZU9m
ZnNldDsKKyAgICBtX2NvbHVtbkluZm8gPSBtX25leHQtPm1fY29sdW1uSW5mbzsKK30KKwogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0U3RhdGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRTdGF0ZS5oCShyZXZpc2lv
biA2Njg4NikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMyLDYgKzMyLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBDb2x1
bW5JbmZvOwogY2xhc3MgUmVuZGVyQXJlbmE7CiBjbGFzcyBSZW5kZXJCb3g7CiBjbGFzcyBSZW5k
ZXJPYmplY3Q7CkBAIC00MCw2ICs0MSw4IEBAIGNsYXNzIExheW91dFN0YXRlIDogcHVibGljIE5v
bmNvcHlhYmxlIHsKIHB1YmxpYzoKICAgICBMYXlvdXRTdGF0ZSgpCiAgICAgICAgIDogbV9jbGlw
cGVkKGZhbHNlKQorICAgICAgICAsIG1fcGFnZUhlaWdodCgwKQorICAgICAgICAsIG1fY29sdW1u
SW5mbygwKQogICAgICAgICAsIG1fbmV4dCgwKQogI2lmbmRlZiBOREVCVUcKICAgICAgICAgLCBt
X3JlbmRlcmVyKDApCkBAIC00Nyw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0g
ICAgTGF5b3V0U3RhdGUoTGF5b3V0U3RhdGUqLCBSZW5kZXJCb3gqLCBjb25zdCBJbnRTaXplJiBv
ZmZzZXQpOworICAgIExheW91dFN0YXRlKExheW91dFN0YXRlKiwgUmVuZGVyQm94KiwgY29uc3Qg
SW50U2l6ZSYgb2Zmc2V0LCBpbnQgcGFnZUhlaWdodCwgQ29sdW1uSW5mbyopOwogICAgIExheW91
dFN0YXRlKFJlbmRlck9iamVjdCopOwogCiAgICAgdm9pZCBkZXN0cm95KFJlbmRlckFyZW5hKik7
CkBAIC01OCw2ICs2MSwxMCBAQCBwdWJsaWM6CiAgICAgLy8gT3ZlcnJpZGRlbiB0byBwcmV2ZW50
IHRoZSBub3JtYWwgZGVsZXRlIGZyb20gYmVpbmcgY2FsbGVkLgogICAgIHZvaWQgb3BlcmF0b3Ig
ZGVsZXRlKHZvaWQqLCBzaXplX3QpOwogCisgICAgdm9pZCBjbGVhclBhZ2luYXRpb25JbmZvcm1h
dGlvbigpOworICAgIGJvb2wgcGFnaW5hdGluZ0NvbHVtbnMoKSBjb25zdCB7IHJldHVybiBtX2Nv
bHVtbkluZm87IH0KKyAgICBib29sIHBhZ2luYXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZUhl
aWdodCB8fCBtX2NvbHVtbkluZm87IH0KKwogcHJpdmF0ZToKICAgICAvLyBUaGUgbm9ybWFsIG9w
ZXJhdG9yIG5ldyBpcyBkaXNhbGxvd2VkLgogICAgIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3Qp
IHRocm93KCk7CkBAIC02NSwxMCArNzIsMTYgQEAgcHJpdmF0ZToKIHB1YmxpYzoKICAgICBib29s
IG1fY2xpcHBlZDsKICAgICBJbnRSZWN0IG1fY2xpcFJlY3Q7Ci0gICAgSW50U2l6ZSBtX29mZnNl
dDsgICAgICAgLy8geC95IG9mZnNldCBmcm9tIGNvbnRhaW5lci4KKyAgICBJbnRTaXplIG1fcGFp
bnRPZmZzZXQ7ICAgICAgIC8vIHgveSBvZmZzZXQgZnJvbSBjb250YWluZXIuICBJbmNsdWRlcyBy
ZWxhdGl2ZSBwb3NpdGlvbmluZyBhbmQgc2Nyb2xsIG9mZnNldHMuCisgICAgSW50U2l6ZSBtX2xh
eW91dE9mZnNldDsgICAgICAvLyB4L3kgb2Zmc2V0IGZyb20gY29udGFpbmVyLiAgRG9lcyBub3Qg
aW5jbHVkZSByZWxhdGl2ZSBwb3NpdGlvbmluZyBvciBzY3JvbGwgb2Zmc2V0cy4KICAgICBJbnRT
aXplIG1fbGF5b3V0RGVsdGE7ICAvLyBUcmFuc2llbnQgb2Zmc2V0IGZyb20gdGhlIGZpbmFsIHBv
c2l0aW9uIG9mIHRoZSBvYmplY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB1c2Vk
IHRvIGVuc3VyZSB0aGF0IHJlcGFpbnRzIGhhcHBlbiBpbiB0aGUgY29ycmVjdCBwbGFjZS4KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgdG90YWwgZGVsdGEgYWNjdW11
bGF0ZWQgZnJvbSB0aGUgcm9vdC4KKworICAgIGludCBtX3BhZ2VIZWlnaHQ7ICAgICAgICAgICAg
Ly8gVGhlIGN1cnJlbnQgcGFnZSBoZWlnaHQgZm9yIHRoZSBwYWdpbmF0aW9uIG1vZGVsIHRoYXQg
ZW5jbG9zZXMgdXMuCisgICAgSW50U2l6ZSBtX3BhZ2VPZmZzZXQ7ICAgICAgICAvLyBUaGUgb2Zm
c2V0IG9mIHRoZSBzdGFydCBvZiB0aGUgZmlyc3QgcGFnZSBpbiB0aGUgbmVhcmVzdCBlbmNsb3Np
bmcgcGFnaW5hdGlvbiBtb2RlbC4KKyAgICBDb2x1bW5JbmZvKiBtX2NvbHVtbkluZm87ICAgIC8v
IElmIHRoZSBlbmNsb3NpbmcgcGFnaW5hdGlvbiBtb2RlbCBpcyBhIGNvbHVtbiBtb2RlbCwgdGhl
biB0aGlzIHdpbGwgc3RvcmUgY29sdW1uIGluZm9ybWF0aW9uIGZvciBlYXN5IHJldHJpZXZhbC9t
YW5pcHVsYXRpb24uCisKICAgICBMYXlvdXRTdGF0ZSogbV9uZXh0OwogI2lmbmRlZiBOREVCVUcK
ICAgICBSZW5kZXJPYmplY3QqIG1fcmVuZGVyZXI7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2suY3BwCShyZXZpc2lvbiA2NjkwMykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2Nr
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTExMiw3ICsxMTEyLDcgQEAgdm9pZCBSZW5kZXJCbG9j
azo6bGF5b3V0KCkKICAgICAgICAgY2xlYXJMYXlvdXRPdmVyZmxvdygpOwogfQogCi12b2lkIFJl
bmRlckJsb2NrOjpsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4pCit2b2lkIFJlbmRl
ckJsb2NrOjpsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIGludCBwYWdlSGVpZ2h0
KQogewogICAgIEFTU0VSVChuZWVkc0xheW91dCgpKTsKIApAQCAtMTEyMiw5ICsxMTIyLDYgQEAg
dm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2soYm9vbCByZWxheQogICAgIGlmICghcmVsYXlv
dXRDaGlsZHJlbiAmJiBsYXlvdXRPbmx5UG9zaXRpb25lZE9iamVjdHMoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgTGF5b3V0UmVwYWludGVyIHJlcGFpbnRlcigqdGhpcywgbV9ldmVySGFkTGF5
b3V0ICYmIGNoZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgpKTsKLSAgICBMYXlvdXRTdGF0ZU1h
aW50YWluZXIgc3RhdGVQdXNoZXIodmlldygpLCB0aGlzLCBJbnRTaXplKHgoKSwgeSgpKSwgaGFz
Q29sdW1ucygpIHx8IGhhc1RyYW5zZm9ybSgpIHx8IGhhc1JlZmxlY3Rpb24oKSk7Ci0KICAgICBp
bnQgb2xkV2lkdGggPSB3aWR0aCgpOwogICAgIGludCBvbGRDb2x1bW5XaWR0aCA9IGRlc2lyZWRD
b2x1bW5XaWR0aCgpOwogCkBAIC0xMTQwLDYgKzExMzcsMjggQEAgdm9pZCBSZW5kZXJCbG9jazo6
bGF5b3V0QmxvY2soYm9vbCByZWxheQogCiAgICAgaW50IHByZXZpb3VzSGVpZ2h0ID0gaGVpZ2h0
KCk7CiAgICAgc2V0SGVpZ2h0KDApOworICAgIGJvb2wgaGFzU3BlY2lmaWVkUGFnZUhlaWdodCA9
IGZhbHNlOworICAgIENvbHVtbkluZm8qIGNvbEluZm8gPSBjb2x1bW5JbmZvKCk7CisgICAgaWYg
KGhhc0NvbHVtbnMoKSkgeworICAgICAgICBpZiAoIXBhZ2VIZWlnaHQpIHsKKyAgICAgICAgICAg
IC8vIFdlIG5lZWQgdG8gZ28gYWhlYWQgYW5kIHNldCBvdXIgZXhwbGljaXQgcGFnZSBoZWlnaHQg
aWYgb25lIGV4aXN0cywgc28gdGhhdCB3ZSBjYW4KKyAgICAgICAgICAgIC8vIGF2b2lkIGRvaW5n
IHR3byBsYXlvdXQgcGFzc2VzLgorICAgICAgICAgICAgY2FsY0hlaWdodCgpOworICAgICAgICAg
ICAgaW50IGNvbHVtbkhlaWdodCA9IGNvbnRlbnRIZWlnaHQoKTsKKyAgICAgICAgICAgIGlmIChj
b2x1bW5IZWlnaHQgPiAwKSB7CisgICAgICAgICAgICAgICAgcGFnZUhlaWdodCA9IGNvbHVtbkhl
aWdodDsKKyAgICAgICAgICAgICAgICBoYXNTcGVjaWZpZWRQYWdlSGVpZ2h0ID0gdHJ1ZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHNldEhlaWdodCgwKTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoY29sSW5mby0+Y29sdW1uSGVpZ2h0KCkgIT0gcGFnZUhlaWdodCAmJiBtX2V2ZXJIYWRM
YXlvdXQpIHsKKyAgICAgICAgICAgIGNvbEluZm8tPnNldENvbHVtbkhlaWdodChwYWdlSGVpZ2h0
KTsKKyAgICAgICAgICAgIG1hcmtEZXNjZW5kYW50QmxvY2tzQW5kTGluZXNGb3JMYXlvdXQoKTsg
Ly8gV2UgbmVlZCB0byBkaXJ0eSBhbGwgZGVzY2VuZGFudCBibG9ja3MgYW5kIGxpbmVzLCBzaW5j
ZSB0aGUgY29sdW1uIGhlaWdodCBpcyBkaWZmZXJlbnQgbm93LgorICAgICAgICB9CisgICAgfQor
CisgICAgTGF5b3V0UmVwYWludGVyIHJlcGFpbnRlcigqdGhpcywgbV9ldmVySGFkTGF5b3V0ICYm
IGNoZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgpKTsKKyAgICBMYXlvdXRTdGF0ZU1haW50YWlu
ZXIgc3RhdGVQdXNoZXIodmlldygpLCB0aGlzLCBJbnRTaXplKHgoKSwgeSgpKSwgaGFzQ29sdW1u
cygpIHx8IGhhc1RyYW5zZm9ybSgpIHx8IGhhc1JlZmxlY3Rpb24oKSwgcGFnZUhlaWdodCwgY29s
SW5mbyk7CiAKICAgICAvLyBXZSB1c2UgZm91ciB2YWx1ZXMsIG1heFRvcFBvcywgbWF4VG9wTmVn
LCBtYXhCb3R0b21Qb3MsIGFuZCBtYXhCb3R0b21OZWcsIHRvIHRyYWNrCiAgICAgLy8gb3VyIGN1
cnJlbnQgbWF4aW1hbCBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgbWFyZ2lucy4gIFRoZXNlIHZhbHVl
cyBhcmUgdXNlZCB3aGVuIHdlCkBAIC0xMTg5LDEwICsxMjA4LDkgQEAgdm9pZCBSZW5kZXJCbG9j
azo6bGF5b3V0QmxvY2soYm9vbCByZWxheQogICAgIGlmIChmbG9hdEJvdHRvbSgpID4gKGhlaWdo
dCgpIC0gdG9BZGQpICYmIGV4cGFuZHNUb0VuY2xvc2VPdmVyaGFuZ2luZ0Zsb2F0cygpKQogICAg
ICAgICBzZXRIZWlnaHQoZmxvYXRCb3R0b20oKSArIHRvQWRkKTsKICAgICAKLSAgICAvLyBOb3cg
bGF5IG91dCBvdXIgY29sdW1ucyB3aXRoaW4gdGhpcyBpbnRyaW5zaWMgaGVpZ2h0LCBzaW5jZSB0
aGV5IGNhbiBzbGlnaHRseSBhZmZlY3QgdGhlIGludHJpbnNpYyBoZWlnaHQgYXMKLSAgICAvLyB3
ZSBhZGp1c3QgZm9yIGNsZWFuIGNvbHVtbiBicmVha3MuCi0gICAgaW50IHNpbmdsZUNvbHVtbkJv
dHRvbSA9IGxheW91dENvbHVtbnMoKTsKLQorICAgIGlmIChsYXlvdXRDb2x1bW5zKGhhc1NwZWNp
ZmllZFBhZ2VIZWlnaHQsIHBhZ2VIZWlnaHQsIHN0YXRlUHVzaGVyKSkKKyAgICAgICAgcmV0dXJu
OworIAogICAgIC8vIENhbGN1bGF0ZSBvdXIgbmV3IGhlaWdodC4KICAgICBpbnQgb2xkSGVpZ2h0
ID0gaGVpZ2h0KCk7CiAgICAgY2FsY0hlaWdodCgpOwpAQCAtMTIwNywyMSArMTIyNSwxOCBAQCB2
b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayhib29sIHJlbGF5CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBXZSBoYXZl
IHRvIHJlYmFsYW5jZSBjb2x1bW5zIHRvIHRoZSBuZXcgaGVpZ2h0LgotICAgICAgICBsYXlvdXRD
b2x1bW5zKHNpbmdsZUNvbHVtbkJvdHRvbSk7CiAgICAgfQogCiAgICAgaWYgKHByZXZpb3VzSGVp
Z2h0ICE9IGhlaWdodCgpKQogICAgICAgICByZWxheW91dENoaWxkcmVuID0gdHJ1ZTsKIAotICAg
IC8vIFRoaXMgY2hlY2sgaXMgZGVzaWduZWQgdG8gY2F0Y2ggYW55b25lCi0gICAgLy8gd2hvIHdh
c24ndCBnb2luZyB0byBwcm9wYWdhdGUgZmxvYXQgaW5mb3JtYXRpb24gdXAgdG8gdGhlIHBhcmVu
dCBhbmQgeWV0IGNvdWxkIHBvdGVudGlhbGx5IGJlIHBhaW50ZWQgYnkgaXRzIGFuY2VzdG9yLgot
ICAgIGlmIChpc1Jvb3QoKSB8fCBleHBhbmRzVG9FbmNsb3NlT3ZlcmhhbmdpbmdGbG9hdHMoKSkK
LSAgICAgICAgYWRkT3ZlcmZsb3dGcm9tRmxvYXRzKCk7Ci0KICAgICAvLyBBZGQgb3ZlcmZsb3cg
ZnJvbSBjaGlsZHJlbiAodW5sZXNzIHdlJ3JlIG11bHRpLWNvbHVtbiwgc2luY2UgaW4gdGhhdCBj
YXNlIGFsbCBvdXIgY2hpbGQgb3ZlcmZsb3cgaXMgY2xpcHBlZCBhbnl3YXkpLgogICAgIGlmICgh
aGFzQ29sdW1ucygpKSB7CisgICAgICAgIC8vIFRoaXMgY2hlY2sgaXMgZGVzaWduZWQgdG8gY2F0
Y2ggYW55b25lCisgICAgICAgIC8vIHdobyB3YXNuJ3QgZ29pbmcgdG8gcHJvcGFnYXRlIGZsb2F0
IGluZm9ybWF0aW9uIHVwIHRvIHRoZSBwYXJlbnQgYW5kIHlldCBjb3VsZCBwb3RlbnRpYWxseSBi
ZSBwYWludGVkIGJ5IGl0cyBhbmNlc3Rvci4KKyAgICAgICAgaWYgKGlzUm9vdCgpIHx8IGV4cGFu
ZHNUb0VuY2xvc2VPdmVyaGFuZ2luZ0Zsb2F0cygpKQorICAgICAgICAgICAgYWRkT3ZlcmZsb3dG
cm9tRmxvYXRzKCk7CisKICAgICAgICAgaWYgKGNoaWxkcmVuSW5saW5lKCkpCiAgICAgICAgICAg
ICBhZGRPdmVyZmxvd0Zyb21JbmxpbmVDaGlsZHJlbigpOwogICAgICAgICBlbHNlCkBAIC0xNDg1
LDcgKzE1MDAsOCBAQCBpbnQgUmVuZGVyQmxvY2s6OmNvbGxhcHNlTWFyZ2lucyhSZW5kZXJCCiAg
ICAgaWYgKG1hcmdpbkluZm8ucXVpcmtDb250YWluZXIoKSAmJiBtYXJnaW5JbmZvLmF0VG9wT2ZC
bG9jaygpICYmIChwb3NUb3AgLSBuZWdUb3ApKQogICAgICAgICBtYXJnaW5JbmZvLnNldFRvcFF1
aXJrKHRvcFF1aXJrKTsKIAotICAgIGludCB5cG9zID0gaGVpZ2h0KCk7CisgICAgaW50IGJlZm9y
ZUNvbGxhcHNlWSA9IGhlaWdodCgpOworICAgIGludCB5cG9zID0gYmVmb3JlQ29sbGFwc2VZOwog
ICAgIGlmIChjaGlsZC0+aXNTZWxmQ29sbGFwc2luZ0Jsb2NrKCkpIHsKICAgICAgICAgLy8gVGhp
cyBjaGlsZCBoYXMgbm8gaGVpZ2h0LiAgV2UgbmVlZCB0byBjb21wdXRlIG91cgogICAgICAgICAv
LyBwb3NpdGlvbiBiZWZvcmUgd2UgY29sbGFwc2UgdGhlIGNoaWxkJ3MgbWFyZ2lucyB0b2dldGhl
ciwKQEAgLTE1MjcsNiArMTU0MywxNCBAQCBpbnQgUmVuZGVyQmxvY2s6OmNvbGxhcHNlTWFyZ2lu
cyhSZW5kZXJCCiAgICAgICAgICAgICBtYXJnaW5JbmZvLnNldEJvdHRvbVF1aXJrKGNoaWxkLT5p
c0JvdHRvbU1hcmdpblF1aXJrKCkgfHwgc3R5bGUoKS0+bWFyZ2luQm90dG9tQ29sbGFwc2UoKSA9
PSBNRElTQ0FSRCk7CiAgICAgfQogICAgIAorICAgIC8vIElmIG1hcmdpbnMgd291bGQgcHVsbCB1
cyBwYXN0IHRoZSB0b3Agb2YgdGhlIG5leHQgcGFnZSwgdGhlbiB3ZSBuZWVkIHRvIHB1bGwgYmFj
ayBhbmQgcHJldGVuZCBsaWtlIHRoZSBtYXJnaW5zCisgICAgLy8gY29sbGFwc2VkIGludG8gdGhl
IHBhZ2UgZWRnZS4KKyAgICBib29sIHBhZ2luYXRlZCA9IHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+
cGFnaW5hdGVkKCk7CisgICAgaWYgKHBhZ2luYXRlZCAmJiB5cG9zID4gYmVmb3JlQ29sbGFwc2VZ
KSB7CisgICAgICAgIGludCBvbGRZID0geXBvczsKKyAgICAgICAgeXBvcyA9IG1pbih5cG9zLCBu
ZXh0UGFnZVRvcChiZWZvcmVDb2xsYXBzZVkpKTsKKyAgICAgICAgc2V0SGVpZ2h0KGhlaWdodCgp
ICsgKHlwb3MgLSBvbGRZKSk7CisgICAgfQogICAgIHJldHVybiB5cG9zOwogfQogCkBAIC0xNTg2
LDcgKzE2MTAsMjQgQEAgaW50IFJlbmRlckJsb2NrOjplc3RpbWF0ZVZlcnRpY2FsUG9zaXRpbwog
ICAgICAgICBpbnQgY2hpbGRNYXJnaW5Ub3AgPSBjaGlsZC0+c2VsZk5lZWRzTGF5b3V0KCkgPyBj
aGlsZC0+bWFyZ2luVG9wKCkgOiBjaGlsZC0+Y29sbGFwc2VkTWFyZ2luVG9wKCk7CiAgICAgICAg
IHlQb3NFc3RpbWF0ZSArPSBtYXgobWFyZ2luSW5mby5tYXJnaW4oKSwgY2hpbGRNYXJnaW5Ub3Ap
OwogICAgIH0KKyAgICAKKyAgICBib29sIHBhZ2luYXRlZCA9IHZpZXcoKS0+bGF5b3V0U3RhdGUo
KS0+cGFnaW5hdGVkKCk7CisKKyAgICAvLyBBZGp1c3QgeVBvc0VzdGltYXRlIGRvd24gdG8gdGhl
IG5leHQgcGFnZSBpZiB0aGUgbWFyZ2lucyBhcmUgc28gbGFyZ2UgdGhhdCB3ZSBkb24ndCBmaXQg
b24gdGhlIGN1cnJlbnQKKyAgICAvLyBwYWdlLgorICAgIGlmIChwYWdpbmF0ZWQgJiYgeVBvc0Vz
dGltYXRlID4gaGVpZ2h0KCkpCisgICAgICAgIHlQb3NFc3RpbWF0ZSA9IG1pbih5UG9zRXN0aW1h
dGUsIG5leHRQYWdlVG9wKGhlaWdodCgpKSk7CisKICAgICB5UG9zRXN0aW1hdGUgKz0gZ2V0Q2xl
YXJEZWx0YShjaGlsZCwgeVBvc0VzdGltYXRlKTsKKyAgICAKKyAgICBpZiAocGFnaW5hdGVkKSB7
CisgICAgICAgIC8vIElmIHRoZSBvYmplY3QgaGFzIGEgcGFnZSBvciBjb2x1bW4gYnJlYWsgdmFs
dWUgb2YgImJlZm9yZSIsIHRoZW4gd2Ugc2hvdWxkIHNoaWZ0IHRvIHRoZSB0b3Agb2YgdGhlIG5l
eHQgcGFnZS4KKyAgICAgICAgeVBvc0VzdGltYXRlID0gYXBwbHlCZWZvcmVCcmVhayhjaGlsZCwg
eVBvc0VzdGltYXRlKTsKKyAgICAKKyAgICAgICAgLy8gRm9yIHJlcGxhY2VkIGVsZW1lbnRzIGFu
ZCBzY3JvbGxlZCBlbGVtZW50cywgd2Ugd2FudCB0byBzaGlmdCB0aGVtIHRvIHRoZSBuZXh0IHBh
Z2UgaWYgdGhleSBkb24ndCBmaXQgb24gdGhlIGN1cnJlbnQgb25lLgorICAgICAgICB5UG9zRXN0
aW1hdGUgPSBhZGp1c3RGb3JVbnNwbGl0dGFibGVDaGlsZChjaGlsZCwgeVBvc0VzdGltYXRlKTsK
KyAgICB9CisKICAgICByZXR1cm4geVBvc0VzdGltYXRlOwogfQogCkBAIC0xNzc2LDggKzE4MTcs
OSBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9ja0NoaWxkKFJlbmRlCiAgICAgdmlldygp
LT5hZGRMYXlvdXREZWx0YShJbnRTaXplKDAsIGNoaWxkLT55KCkgLSB5UG9zRXN0aW1hdGUpKTsK
ICAgICBjaGlsZC0+c2V0TG9jYXRpb24oY2hpbGQtPngoKSwgeVBvc0VzdGltYXRlKTsKIAorICAg
IFJlbmRlckJsb2NrKiBjaGlsZEJsb2NrRmxvdyA9IGNoaWxkLT5pc0Jsb2NrRmxvdygpID8gdG9S
ZW5kZXJCbG9jayhjaGlsZCkgOiAwOwogICAgIGJvb2wgbWFya0Rlc2NlbmRhbnRzV2l0aEZsb2F0
cyA9IGZhbHNlOwotICAgIGlmICh5UG9zRXN0aW1hdGUgIT0gb2xkUmVjdC55KCkgJiYgIWNoaWxk
LT5hdm9pZHNGbG9hdHMoKSAmJiBjaGlsZC0+aXNCbG9ja0Zsb3coKSAmJiB0b1JlbmRlckJsb2Nr
KGNoaWxkKS0+Y29udGFpbnNGbG9hdHMoKSkKKyAgICBpZiAoeVBvc0VzdGltYXRlICE9IG9sZFJl
Y3QueSgpICYmICFjaGlsZC0+YXZvaWRzRmxvYXRzKCkgJiYgY2hpbGRCbG9ja0Zsb3cgJiYgY2hp
bGRCbG9ja0Zsb3ctPmNvbnRhaW5zRmxvYXRzKCkpCiAgICAgICAgIG1hcmtEZXNjZW5kYW50c1dp
dGhGbG9hdHMgPSB0cnVlOwogICAgIGVsc2UgaWYgKCFjaGlsZC0+YXZvaWRzRmxvYXRzKCkgfHwg
Y2hpbGQtPnNocmlua1RvQXZvaWRGbG9hdHMoKSkgewogICAgICAgICAvLyBJZiBhbiBlbGVtZW50
IG1pZ2h0IGJlIGFmZmVjdGVkIGJ5IHRoZSBwcmVzZW5jZSBvZiBmbG9hdHMsIHRoZW4gYWx3YXlz
IG1hcmsgaXQgZm9yCkBAIC0xNzg3LDE4ICsxODI5LDI0IEBAIHZvaWQgUmVuZGVyQmxvY2s6Omxh
eW91dEJsb2NrQ2hpbGQoUmVuZGUKICAgICAgICAgICAgIG1hcmtEZXNjZW5kYW50c1dpdGhGbG9h
dHMgPSB0cnVlOwogICAgIH0KIAotICAgIGlmIChjaGlsZC0+aXNSZW5kZXJCbG9jaygpKSB7Cisg
ICAgaWYgKGNoaWxkQmxvY2tGbG93KSB7CiAgICAgICAgIGlmIChtYXJrRGVzY2VuZGFudHNXaXRo
RmxvYXRzKQotICAgICAgICAgICAgdG9SZW5kZXJCbG9jayhjaGlsZCktPm1hcmtBbGxEZXNjZW5k
YW50c1dpdGhGbG9hdHNGb3JMYXlvdXQoKTsKLQorICAgICAgICAgICAgY2hpbGRCbG9ja0Zsb3ct
Pm1hcmtBbGxEZXNjZW5kYW50c1dpdGhGbG9hdHNGb3JMYXlvdXQoKTsKICAgICAgICAgcHJldmlv
dXNGbG9hdEJvdHRvbSA9IG1heChwcmV2aW91c0Zsb2F0Qm90dG9tLCBvbGRSZWN0LnkoKSArIHRv
UmVuZGVyQmxvY2soY2hpbGQpLT5mbG9hdEJvdHRvbSgpKTsKICAgICB9CiAKKyAgICBib29sIHBh
Z2luYXRlZCA9IHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+cGFnaW5hdGVkKCk7CisgICAgaWYgKHBh
Z2luYXRlZCAmJiBjaGlsZEJsb2NrRmxvdyAmJiB5UG9zRXN0aW1hdGUgIT0gb2xkUmVjdC55KCkp
IC8vIEZJWE1FOiBUaGlzIGlzIHByZXR0eSBwYWluZnVsLiBTaG91bGQgb3B0aW1pemUgZm9yIG9i
amVjdHMgdGhhdCBjb250YWluIG5vIGJyZWFrcy4KKyAgICAgICAgY2hpbGRCbG9ja0Zsb3ctPm1h
cmtEZXNjZW5kYW50QmxvY2tzQW5kTGluZXNGb3JMYXlvdXQoKTsKKwogICAgIGJvb2wgY2hpbGRI
YWRMYXlvdXQgPSBjaGlsZC0+bV9ldmVySGFkTGF5b3V0OwogICAgIGJvb2wgY2hpbGROZWVkZWRM
YXlvdXQgPSBjaGlsZC0+bmVlZHNMYXlvdXQoKTsKICAgICBpZiAoY2hpbGROZWVkZWRMYXlvdXQp
CiAgICAgICAgIGNoaWxkLT5sYXlvdXQoKTsKIAorICAgIC8vIENhY2hlIGlmIHdlIGFyZSBhdCB0
aGUgdG9wIG9mIHRoZSBibG9jayByaWdodCBub3cuCisgICAgYm9vbCBhdFRvcE9mQmxvY2sgPSBt
YXJnaW5JbmZvLmF0VG9wT2ZCbG9jaygpOworCiAgICAgLy8gTm93IGRldGVybWluZSB0aGUgY29y
cmVjdCB5cG9zIGJhc2VkIG9mZiBleGFtaW5hdGlvbiBvZiBjb2xsYXBzaW5nIG1hcmdpbgogICAg
IC8vIHZhbHVlcy4KICAgICBpbnQgeUJlZm9yZUNsZWFyID0gY29sbGFwc2VNYXJnaW5zKGNoaWxk
LCBtYXJnaW5JbmZvKTsKQEAgLTE4MDYsNiArMTg1NCwzMSBAQCB2b2lkIFJlbmRlckJsb2NrOjps
YXlvdXRCbG9ja0NoaWxkKFJlbmRlCiAgICAgLy8gTm93IGNoZWNrIGZvciBjbGVhci4KICAgICBp
bnQgeUFmdGVyQ2xlYXIgPSBjbGVhckZsb2F0c0lmTmVlZGVkKGNoaWxkLCBtYXJnaW5JbmZvLCBv
bGRUb3BQb3NNYXJnaW4sIG9sZFRvcE5lZ01hcmdpbiwgeUJlZm9yZUNsZWFyKTsKICAgICAKKyAg
ICBpZiAocGFnaW5hdGVkKSB7CisgICAgICAgIGludCBvbGRZID0geUFmdGVyQ2xlYXI7CisgICAg
ICAgIAorICAgICAgICAvLyBJZiB0aGUgb2JqZWN0IGhhcyBhIHBhZ2Ugb3IgY29sdW1uIGJyZWFr
IHZhbHVlIG9mICJiZWZvcmUiLCB0aGVuIHdlIHNob3VsZCBzaGlmdCB0byB0aGUgdG9wIG9mIHRo
ZSBuZXh0IHBhZ2UuCisgICAgICAgIHlBZnRlckNsZWFyID0gYXBwbHlCZWZvcmVCcmVhayhjaGls
ZCwgeUFmdGVyQ2xlYXIpOworICAgIAorICAgICAgICAvLyBGb3IgcmVwbGFjZWQgZWxlbWVudHMg
YW5kIHNjcm9sbGVkIGVsZW1lbnRzLCB3ZSB3YW50IHRvIHNoaWZ0IHRoZW0gdG8gdGhlIG5leHQg
cGFnZSBpZiB0aGV5IGRvbid0IGZpdCBvbiB0aGUgY3VycmVudCBvbmUuCisgICAgICAgIHlBZnRl
ckNsZWFyID0gYWRqdXN0Rm9yVW5zcGxpdHRhYmxlQ2hpbGQoY2hpbGQsIHlBZnRlckNsZWFyKTsK
KyAgICAgICAgCisgICAgICAgIGlmIChjaGlsZEJsb2NrRmxvdy0+cGFnaW5hdGlvblN0cnV0KCkp
IHsKKyAgICAgICAgICAgIC8vIFdlIGFyZSB3aWxsaW5nIHRvIHByb3BhZ2F0ZSBvdXQgdG8gb3Vy
IHBhcmVudCBibG9jayBhcyBsb25nIGFzIHdlIHdlcmUgYXQgdGhlIHRvcCBvZiB0aGUgYmxvY2sg
cHJpb3IKKyAgICAgICAgICAgIC8vIHRvIGNvbGxhcHNpbmcgb3VyIG1hcmdpbnMsIGFuZCBhcyBs
b25nIGFzIHdlIGRpZG4ndCBjbGVhciBvciBtb3ZlIGFzIGEgcmVzdWx0IG9mIG90aGVyIHBhZ2lu
YXRpb24uCisgICAgICAgICAgICBpZiAoYXRUb3BPZkJsb2NrICYmIG9sZFkgPT0geUJlZm9yZUNs
ZWFyICYmICFpc1Bvc2l0aW9uZWQoKSAmJiAhaXNUYWJsZUNlbGwoKSkKKyAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogU2hvdWxkIHJlYWxseSBjaGVjayBpZiB3ZSdyZSBleGNlZWRpbmcgdGhlIHBh
Z2UgaGVpZ2h0IGJlZm9yZSBwcm9wYWdhdGluZyB0aGUgc3RydXQsIGJ1dCB3ZSBkb24ndAorICAg
ICAgICAgICAgICAgIC8vIGhhdmUgYWxsIHRoZSBpbmZvcm1hdGlvbiB0byBkbyBzbyAodGhlIHN0
cnV0IG9ubHkgaGFzIHRoZSByZW1haW5pbmcgYW1vdW50IHRvIHB1c2gpLiAgR2Vja28gZ2V0cyB0
aGlzIHdyb25nIHRvbworICAgICAgICAgICAgICAgIC8vIGFuZCBwdXNoZXMgdG8gdGhlIG5leHQg
cGFnZSBhbnl3YXksIHNvIG5vdCB0b28gY29uY2VybmVkIGFib3V0IGl0LgorICAgICAgICAgICAg
ICAgIHNldFBhZ2luYXRpb25TdHJ1dCh5QWZ0ZXJDbGVhciArIGNoaWxkQmxvY2tGbG93LT5wYWdp
bmF0aW9uU3RydXQoKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeUFmdGVy
Q2xlYXIgKz0gY2hpbGRCbG9ja0Zsb3ctPnBhZ2luYXRpb25TdHJ1dCgpOworICAgICAgICB9CisK
KyAgICAgICAgLy8gU2ltaWxhciB0byBob3cgd2UgYXBwbHkgY2xlYXJhbmNlLiAgR28gYWhlYWQg
YW5kIGJvb3N0IGhlaWdodCgpIHRvIGJlIHRoZSBwbGFjZSB3aGVyZSB3ZSdyZSBnb2luZyB0byBw
b3NpdGlvbiB0aGUgY2hpbGQuCisgICAgICAgIHNldEhlaWdodChoZWlnaHQoKSArICh5QWZ0ZXJD
bGVhciAtIG9sZFkpKTsKKyAgICB9CisKICAgICB2aWV3KCktPmFkZExheW91dERlbHRhKEludFNp
emUoMCwgeVBvc0VzdGltYXRlIC0geUFmdGVyQ2xlYXIpKTsKICAgICBjaGlsZC0+c2V0TG9jYXRp
b24oY2hpbGQtPngoKSwgeUFmdGVyQ2xlYXIpOwogCkBAIC0xODE4LDggKzE4OTEsMTMgQEAgdm9p
ZCBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2tDaGlsZChSZW5kZQogICAgICAgICAgICAgLy8gU28g
Z28gYWhlYWQgYW5kIG1hcmsgdGhlIGl0ZW0gYXMgZGlydHkuCiAgICAgICAgICAgICBjaGlsZC0+
c2V0Q2hpbGROZWVkc0xheW91dCh0cnVlLCBmYWxzZSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYg
KCFjaGlsZC0+YXZvaWRzRmxvYXRzKCkgJiYgY2hpbGQtPmlzQmxvY2tGbG93KCkgJiYgdG9SZW5k
ZXJCbG9jayhjaGlsZCktPmNvbnRhaW5zRmxvYXRzKCkpCi0gICAgICAgICAgICB0b1JlbmRlckJs
b2NrKGNoaWxkKS0+bWFya0FsbERlc2NlbmRhbnRzV2l0aEZsb2F0c0ZvckxheW91dCgpOworICAg
ICAgICBpZiAoY2hpbGRCbG9ja0Zsb3cpIHsKKyAgICAgICAgICAgIGlmIChwYWdpbmF0ZWQpIC8v
IEZJWE1FOiBUaGlzIGlzIHByZXR0eSBwYWluZnVsLiBTaG91bGQgb3B0aW1pemUgZm9yIG9iamVj
dHMgdGhhdCBjb250YWluIG5vIGJyZWFrcy4KKyAgICAgICAgICAgICAgICBjaGlsZEJsb2NrRmxv
dy0+bWFya0Rlc2NlbmRhbnRCbG9ja3NBbmRMaW5lc0ZvckxheW91dCgpOworICAgICAgICAgICAg
ZWxzZSBpZiAoIWNoaWxkLT5hdm9pZHNGbG9hdHMoKSAmJiBjaGlsZEJsb2NrRmxvdy0+Y29udGFp
bnNGbG9hdHMoKSkKKyAgICAgICAgICAgICAgICBjaGlsZEJsb2NrRmxvdy0+bWFya0FsbERlc2Nl
bmRhbnRzV2l0aEZsb2F0c0ZvckxheW91dCgpOworICAgICAgICB9CisKICAgICAgICAgLy8gT3Vy
IGd1ZXNzIHdhcyB3cm9uZy4gTWFrZSB0aGUgY2hpbGQgbGF5IGl0c2VsZiBvdXQgYWdhaW4uCiAg
ICAgICAgIGNoaWxkLT5sYXlvdXRJZk5lZWRlZCgpOwogICAgIH0KQEAgLTE4NDAsNyArMTkxOCw3
IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrQ2hpbGQoUmVuZGUKICAgICB9CiAgICAg
Ly8gSWYgdGhlIGNoaWxkIGhhcyBvdmVyaGFuZ2luZyBmbG9hdHMgdGhhdCBpbnRydWRlIGludG8g
Zm9sbG93aW5nIHNpYmxpbmdzIChvciBwb3NzaWJseSBvdXQKICAgICAvLyBvZiB0aGlzIGJsb2Nr
KSwgdGhlbiB0aGUgcGFyZW50IGdldHMgbm90aWZpZWQgb2YgdGhlIGZsb2F0cyBub3cuCi0gICAg
aWYgKGNoaWxkLT5pc0Jsb2NrRmxvdygpICYmIHRvUmVuZGVyQmxvY2soY2hpbGQpLT5jb250YWlu
c0Zsb2F0cygpKQorICAgIGlmIChjaGlsZEJsb2NrRmxvdyAmJiBjaGlsZEJsb2NrRmxvdy0+Y29u
dGFpbnNGbG9hdHMoKSkKICAgICAgICAgbWF4RmxvYXRCb3R0b20gPSBtYXgobWF4RmxvYXRCb3R0
b20sIGFkZE92ZXJoYW5naW5nRmxvYXRzKHRvUmVuZGVyQmxvY2soY2hpbGQpLCAtY2hpbGQtPngo
KSwgLWNoaWxkLT55KCksICFjaGlsZE5lZWRlZExheW91dCkpOwogCiAgICAgSW50U2l6ZSBjaGls
ZE9mZnNldChjaGlsZC0+eCgpIC0gb2xkUmVjdC54KCksIGNoaWxkLT55KCkgLSBvbGRSZWN0Lnko
KSk7CkBAIC0xODU5LDYgKzE5MzcsMTMgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2tD
aGlsZChSZW5kZQogICAgICAgICBjaGlsZC0+cmVwYWludE92ZXJoYW5naW5nRmxvYXRzKHRydWUp
OwogICAgIH0KIAorICAgIGlmIChwYWdpbmF0ZWQpIHsKKyAgICAgICAgLy8gQ2hlY2sgZm9yIGFu
IGFmdGVyIHBhZ2UvY29sdW1uIGJyZWFrLgorICAgICAgICBpbnQgbmV3SGVpZ2h0ID0gYXBwbHlB
ZnRlckJyZWFrKGNoaWxkLCBoZWlnaHQoKSwgbWFyZ2luSW5mbyk7CisgICAgICAgIGlmIChuZXdI
ZWlnaHQgIT0gaGVpZ2h0KCkpCisgICAgICAgICAgICBzZXRIZWlnaHQobmV3SGVpZ2h0KTsKKyAg
ICB9CisKICAgICBBU1NFUlQob2xkTGF5b3V0RGVsdGEgPT0gdmlldygpLT5sYXlvdXREZWx0YSgp
KTsKIH0KIApAQCAtMTg4OSw2ICsxOTc0LDkgQEAgYm9vbCBSZW5kZXJCbG9jazo6bGF5b3V0T25s
eVBvc2l0aW9uZWRPYgogdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0UG9zaXRpb25lZE9iamVjdHMo
Ym9vbCByZWxheW91dENoaWxkcmVuKQogewogICAgIGlmIChtX3Bvc2l0aW9uZWRPYmplY3RzKSB7
CisgICAgICAgIGlmIChoYXNDb2x1bW5zKCkpCisgICAgICAgICAgICB2aWV3KCktPmxheW91dFN0
YXRlKCktPmNsZWFyUGFnaW5hdGlvbkluZm9ybWF0aW9uKCk7IC8vIFBvc2l0aW9uZWQgb2JqZWN0
cyBhcmUgbm90IHBhcnQgb2YgdGhlIGNvbHVtbiBmbG93LCBzbyB0aGV5IGRvbid0IHBhZ2luYXRl
IHdpdGggdGhlIGNvbHVtbnMuCisKICAgICAgICAgUmVuZGVyQm94KiByOwogICAgICAgICBJdGVy
YXRvciBlbmQgPSBtX3Bvc2l0aW9uZWRPYmplY3RzLT5lbmQoKTsKICAgICAgICAgZm9yIChJdGVy
YXRvciBpdCA9IG1fcG9zaXRpb25lZE9iamVjdHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewpAQCAtMTkxMCw2ICsxOTk4LDkgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0UG9zaXRpb25l
ZE9iamVjdAogICAgICAgICAgICAgICAgIHItPnRyeUxheW91dERvaW5nUG9zaXRpb25lZE1vdmVt
ZW50T25seSgpOwogICAgICAgICAgICAgci0+bGF5b3V0SWZOZWVkZWQoKTsKICAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgaWYgKGhhc0NvbHVtbnMoKSkKKyAgICAgICAgICAgIHZpZXcoKS0+
bGF5b3V0U3RhdGUoKS0+bV9jb2x1bW5JbmZvID0gY29sdW1uSW5mbygpOyAvLyBGSVhNRTogS2lu
ZCBvZiBncm9zcy4gV2UganVzdCBwdXQgdGhpcyBiYWNrIGludG8gdGhlIGxheW91dCBzdGF0ZSBz
byB0aGF0IHBvcCgpIHdpbGwgd29yay4KICAgICB9CiB9CiAKQEAgLTE5OTcsMTIgKzIwODgsMTIg
QEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRDb2x1bW5SdWxlcyhQYWludAogCiAgICAgLy8gV2Ug
bmVlZCB0byBkbyBtdWx0aXBsZSBwYXNzZXMsIGJyZWFraW5nIHVwIG91ciBjaGlsZCBwYWludGlu
ZyBpbnRvIHN0cmlwcy4KICAgICBDb2x1bW5JbmZvKiBjb2xJbmZvID0gY29sdW1uSW5mbygpOwot
ICAgIHVuc2lnbmVkIGNvbENvdW50ID0gY29sSW5mby0+Y29sdW1uQ291bnQoKTsKKyAgICB1bnNp
Z25lZCBjb2xDb3VudCA9IGNvbHVtbkNvdW50KGNvbEluZm8pOwogICAgIGludCBjdXJyWE9mZnNl
dCA9IHN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUiA/IDAgOiBjb250ZW50V2lkdGgoKTsKICAg
ICBpbnQgcnVsZUFkZCA9IGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCk7CiAgICAgaW50IHJ1
bGVYID0gc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8gMCA6IGNvbnRlbnRXaWR0aCgpOwog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb2xDb3VudDsgaSsrKSB7Ci0gICAgICAgIElu
dFJlY3QgY29sUmVjdCA9IGNvbEluZm8tPmNvbHVtblJlY3RBdChpKTsKKyAgICAgICAgSW50UmVj
dCBjb2xSZWN0ID0gY29sdW1uUmVjdEF0KGNvbEluZm8sIGkpOwogCiAgICAgICAgIC8vIE1vdmUg
dG8gdGhlIG5leHQgcG9zaXRpb24uCiAgICAgICAgIGlmIChzdHlsZSgpLT5kaXJlY3Rpb24oKSA9
PSBMVFIpIHsKQEAgLTIwMzMsMTQgKzIxMjQsMTQgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRD
b2x1bW5Db250ZW50cyhQYQogICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9IHBhaW50SW5m
by5jb250ZXh0OwogICAgIGludCBjb2xHYXAgPSBjb2x1bW5HYXAoKTsKICAgICBDb2x1bW5JbmZv
KiBjb2xJbmZvID0gY29sdW1uSW5mbygpOwotICAgIHVuc2lnbmVkIGNvbENvdW50ID0gY29sSW5m
by0+Y29sdW1uQ291bnQoKTsKKyAgICB1bnNpZ25lZCBjb2xDb3VudCA9IGNvbHVtbkNvdW50KGNv
bEluZm8pOwogICAgIGlmICghY29sQ291bnQpCiAgICAgICAgIHJldHVybjsKLSAgICBpbnQgY3Vy
clhPZmZzZXQgPSBzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIgPyAwIDogY29udGVudFdpZHRo
KCkgLSBjb2xJbmZvLT5jb2x1bW5SZWN0QXQoMCkud2lkdGgoKTsKKyAgICBpbnQgY3VyclhPZmZz
ZXQgPSBzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIgPyAwIDogY29udGVudFdpZHRoKCkgLSBj
b2x1bW5SZWN0QXQoY29sSW5mbywgMCkud2lkdGgoKTsKICAgICBpbnQgY3VycllPZmZzZXQgPSAw
OwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb2xDb3VudDsgaSsrKSB7CiAgICAgICAg
IC8vIEZvciBlYWNoIHJlY3QsIHdlIGNsaXAgdG8gdGhlIHJlY3QsIGFuZCB0aGVuIHdlIGFkanVz
dCBvdXIgY29vcmRzLgotICAgICAgICBJbnRSZWN0IGNvbFJlY3QgPSBjb2xJbmZvLT5jb2x1bW5S
ZWN0QXQoaSk7CisgICAgICAgIEludFJlY3QgY29sUmVjdCA9IGNvbHVtblJlY3RBdChjb2xJbmZv
LCBpKTsKICAgICAgICAgY29sUmVjdC5tb3ZlKHR4LCB0eSk7CiAgICAgICAgIFBhaW50SW5mbyBp
bmZvKHBhaW50SW5mbyk7CiAgICAgICAgIGluZm8ucmVjdC5pbnRlcnNlY3QoY29sUmVjdCk7CkBA
IC0yMDk4LDE0ICsyMTg5LDEzIEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50Q2hpbGRyZW4oUGFp
bnRJbmYKICAgICBpbmZvLnVwZGF0ZVBhaW50aW5nUm9vdEZvckNoaWxkcmVuKHRoaXMpOwogICAg
IAogICAgIFJlbmRlclZpZXcqIHJlbmRlclZpZXcgPSB2aWV3KCk7Ci0gICAgYm9vbCB1c2VQcmlu
dFJlY3QgPSAhcmVuZGVyVmlldy0+cHJpbnRSZWN0KCkuaXNFbXB0eSgpICYmICFkb2N1bWVudCgp
LT5zZXR0aW5ncygpLT5wYWdpbmF0ZUR1cmluZ0xheW91dEVuYWJsZWQoKTsKKyAgICBib29sIHVz
ZVByaW50UmVjdCA9ICFyZW5kZXJWaWV3LT5wcmludFJlY3QoKS5pc0VtcHR5KCk7CiAgICAgCiAg
ICAgYm9vbCBjaGVja1BhZ2VCcmVha3MgPSBkb2N1bWVudCgpLT5wYWdpbmF0ZWQoKSAmJiAhZG9j
dW1lbnQoKS0+c2V0dGluZ3MoKS0+cGFnaW5hdGVEdXJpbmdMYXlvdXRFbmFibGVkKCk7Ci0gICAg
Ym9vbCBjaGVja0NvbHVtbkJyZWFrcyA9ICFjaGVja1BhZ2VCcmVha3MgJiYgdXNlUHJpbnRSZWN0
OwogCiAgICAgZm9yIChSZW5kZXJCb3gqIGNoaWxkID0gZmlyc3RDaGlsZEJveCgpOyBjaGlsZDsg
Y2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmdCb3goKSkgeyAgICAgICAgCiAgICAgICAgIC8vIENo
ZWNrIGZvciBwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzLCBhbmQgaWYgaXQncyBzZXQsIGJyZWFr
IGFuZCBiYWlsLgotICAgICAgICBib29sIGNoZWNrQmVmb3JlQWx3YXlzID0gIWNoaWxkcmVuSW5s
aW5lKCkgJiYgKChjaGVja1BhZ2VCcmVha3MgJiYgY2hpbGQtPnN0eWxlKCktPnBhZ2VCcmVha0Jl
Zm9yZSgpID09IFBCQUxXQVlTKSB8fCAoY2hlY2tDb2x1bW5CcmVha3MgJiYgY2hpbGQtPnN0eWxl
KCktPmNvbHVtbkJyZWFrQmVmb3JlKCkgPT0gUEJBTFdBWVMpKTsKKyAgICAgICAgYm9vbCBjaGVj
a0JlZm9yZUFsd2F5cyA9ICFjaGlsZHJlbklubGluZSgpICYmIChjaGVja1BhZ2VCcmVha3MgJiYg
Y2hpbGQtPnN0eWxlKCktPnBhZ2VCcmVha0JlZm9yZSgpID09IFBCQUxXQVlTKTsKICAgICAgICAg
aWYgKGNoZWNrQmVmb3JlQWx3YXlzCiAgICAgICAgICAgICAmJiAodHkgKyBjaGlsZC0+eSgpKSA+
IHBhaW50SW5mby5yZWN0LnkoKQogICAgICAgICAgICAgJiYgKHR5ICsgY2hpbGQtPnkoKSkgPCBw
YWludEluZm8ucmVjdC5ib3R0b20oKSkgewpAQCAtMjEyOCw3ICsyMjE4LDcgQEAgdm9pZCBSZW5k
ZXJCbG9jazo6cGFpbnRDaGlsZHJlbihQYWludEluZgogICAgICAgICAgICAgY2hpbGQtPnBhaW50
KGluZm8sIHR4LCB0eSk7CiAKICAgICAgICAgLy8gQ2hlY2sgZm9yIHBhZ2UtYnJlYWstYWZ0ZXI6
IGFsd2F5cywgYW5kIGlmIGl0J3Mgc2V0LCBicmVhayBhbmQgYmFpbC4KLSAgICAgICAgYm9vbCBj
aGVja0FmdGVyQWx3YXlzID0gIWNoaWxkcmVuSW5saW5lKCkgJiYgKChjaGVja1BhZ2VCcmVha3Mg
JiYgY2hpbGQtPnN0eWxlKCktPnBhZ2VCcmVha0FmdGVyKCkgPT0gUEJBTFdBWVMpIHx8IChjaGVj
a0NvbHVtbkJyZWFrcyAmJiBjaGlsZC0+c3R5bGUoKS0+Y29sdW1uQnJlYWtBZnRlcigpID09IFBC
QUxXQVlTKSk7CisgICAgICAgIGJvb2wgY2hlY2tBZnRlckFsd2F5cyA9ICFjaGlsZHJlbklubGlu
ZSgpICYmIChjaGVja1BhZ2VCcmVha3MgJiYgY2hpbGQtPnN0eWxlKCktPnBhZ2VCcmVha0FmdGVy
KCkgPT0gUEJBTFdBWVMpOwogICAgICAgICBpZiAoY2hlY2tBZnRlckFsd2F5cwogICAgICAgICAg
ICAgJiYgKHR5ICsgY2hpbGQtPnkoKSArIGNoaWxkLT5oZWlnaHQoKSkgPiBwYWludEluZm8ucmVj
dC55KCkKICAgICAgICAgICAgICYmICh0eSArIGNoaWxkLT55KCkgKyBjaGlsZC0+aGVpZ2h0KCkp
IDwgcGFpbnRJbmZvLnJlY3QuYm90dG9tKCkpIHsKQEAgLTI3OTYsMTMgKzI4ODYsMjIgQEAgdm9p
ZCBSZW5kZXJCbG9jazo6aW5zZXJ0RmxvYXRpbmdPYmplY3QoUgogCiAgICAgLy8gQ3JlYXRlIHRo
ZSBzcGVjaWFsIG9iamVjdCBlbnRyeSAmIGFwcGVuZCBpdCB0byB0aGUgbGlzdAogCi0gICAgby0+
bGF5b3V0SWZOZWVkZWQoKTsKLQogICAgIEZsb2F0aW5nT2JqZWN0KiBuZXdPYmogPSBuZXcgRmxv
YXRpbmdPYmplY3Qoby0+c3R5bGUoKS0+ZmxvYXRpbmcoKSA9PSBGTEVGVCA/IEZsb2F0aW5nT2Jq
ZWN0OjpGbG9hdExlZnQgOiBGbG9hdGluZ09iamVjdDo6RmxvYXRSaWdodCk7CiAKICAgICBuZXdP
YmotPm1fdG9wID0gLTE7CiAgICAgbmV3T2JqLT5tX2JvdHRvbSA9IC0xOworICAgIAorICAgIC8v
IE91ciBsb2NhdGlvbiBpcyBpcnJlbGV2YW50IGlmIHdlJ3JlIHVuc3BsaXR0YWJsZSBvciBubyBw
YWdpbmF0aW9uIGlzIGluIGVmZmVjdC4gIEp1c3QgZ28gYWhlYWQKKyAgICAvLyBhbmQgbGF5IG91
dCB0aGUgZmxvYXQuCisgICAgYm9vbCBhZmZlY3RlZEJ5UGFnaW5hdGlvbiA9IG8tPmlzUmVuZGVy
QmxvY2soKSAmJiB2aWV3KCktPmxheW91dFN0YXRlKCktPm1fcGFnZUhlaWdodDsKKyAgICBpZiAo
IWFmZmVjdGVkQnlQYWdpbmF0aW9uKQorICAgICAgICBvLT5sYXlvdXRJZk5lZWRlZCgpOworICAg
IGVsc2UgeworICAgICAgICBvLT5jYWxjV2lkdGgoKTsKKyAgICAgICAgby0+Y2FsY1ZlcnRpY2Fs
TWFyZ2lucygpOworICAgIH0KICAgICBuZXdPYmotPm1fd2lkdGggPSBvLT53aWR0aCgpICsgby0+
bWFyZ2luTGVmdCgpICsgby0+bWFyZ2luUmlnaHQoKTsKKwogICAgIG5ld09iai0+bV9zaG91bGRQ
YWludCA9ICFvLT5oYXNTZWxmUGFpbnRpbmdMYXllcigpOyAvLyBJZiBhIGxheWVyIGV4aXN0cywg
dGhlIGZsb2F0IHdpbGwgcGFpbnQgaXRzZWxmLiAgT3RoZXJ3aXNlIHNvbWVvbmUgZWxzZSB3aWxs
LgogICAgIG5ld09iai0+bV9pc0Rlc2NlbmRhbnQgPSB0cnVlOwogICAgIG5ld09iai0+bV9yZW5k
ZXJlciA9IG87CkBAIC0yODY3LDE2ICsyOTY2LDE1IEBAIGJvb2wgUmVuZGVyQmxvY2s6OnBvc2l0
aW9uTmV3RmxvYXRzKCkKICAgICAgICAgfQogCiAgICAgICAgIFJlbmRlckJveCogbyA9IGYtPm1f
cmVuZGVyZXI7Ci0gICAgICAgIGludCBfaGVpZ2h0ID0gby0+aGVpZ2h0KCkgKyBvLT5tYXJnaW5U
b3AoKSArIG8tPm1hcmdpbkJvdHRvbSgpOwogCiAgICAgICAgIGludCBybyA9IHJpZ2h0T2Zmc2V0
KCk7IC8vIENvbnN0YW50IHBhcnQgb2YgcmlnaHQgb2Zmc2V0LgotICAgICAgICBpbnQgbG8gPSBs
ZWZ0T2Zmc2V0KCk7IC8vIENvbnN0YXQgcGFydCBvZiBsZWZ0IG9mZnNldC4KKyAgICAgICAgaW50
IGxvID0gbGVmdE9mZnNldCgpOyAvLyBDb25zdGFudCBwYXJ0IG9mIGxlZnQgb2Zmc2V0LgogICAg
ICAgICBpbnQgZndpZHRoID0gZi0+bV93aWR0aDsgLy8gVGhlIHdpZHRoIHdlIGxvb2sgZm9yLgog
ICAgICAgICBpZiAocm8gLSBsbyA8IGZ3aWR0aCkKICAgICAgICAgICAgIGZ3aWR0aCA9IHJvIC0g
bG87IC8vIE5ldmVyIGxvb2sgZm9yIG1vcmUgdGhhbiB3aGF0IHdpbGwgYmUgYXZhaWxhYmxlLgog
ICAgICAgICAKICAgICAgICAgSW50UmVjdCBvbGRSZWN0KG8tPngoKSwgby0+eSgpICwgby0+d2lk
dGgoKSwgby0+aGVpZ2h0KCkpOwotICAgICAgICAKKwogICAgICAgICBpZiAoby0+c3R5bGUoKS0+
Y2xlYXIoKSAmIENMRUZUKQogICAgICAgICAgICAgeSA9IG1heChsZWZ0Qm90dG9tKCksIHkpOwog
ICAgICAgICBpZiAoby0+c3R5bGUoKS0+Y2xlYXIoKSAmIENSSUdIVCkKQEAgLTI5MDUsOSArMzAw
MywzNSBAQCBib29sIFJlbmRlckJsb2NrOjpwb3NpdGlvbk5ld0Zsb2F0cygpCiAgICAgICAgICAg
ICBvLT5zZXRMb2NhdGlvbihmeCAtIG8tPm1hcmdpblJpZ2h0KCkgLSBvLT53aWR0aCgpLCB5ICsg
by0+bWFyZ2luVG9wKCkpOwogICAgICAgICB9CiAKLSAgICAgICAgZi0+bV90b3AgPSB5OwotICAg
ICAgICBmLT5tX2JvdHRvbSA9IGYtPm1fdG9wICsgX2hlaWdodDsKKyAgICAgICAgaWYgKHZpZXco
KS0+bGF5b3V0U3RhdGUoKS0+bV9wYWdlSGVpZ2h0KSB7CisgICAgICAgICAgICBSZW5kZXJCbG9j
ayogY2hpbGRCbG9jayA9IG8tPmlzUmVuZGVyQmxvY2soKSA/IHRvUmVuZGVyQmxvY2sobykgOiAw
OworCisgICAgICAgICAgICBpZiAoY2hpbGRCbG9jayAmJiBvbGRSZWN0LmxvY2F0aW9uKCkgIT0g
by0+bG9jYXRpb24oKSkKKyAgICAgICAgICAgICAgICBjaGlsZEJsb2NrLT5tYXJrRGVzY2VuZGFu
dEJsb2Nrc0FuZExpbmVzRm9yTGF5b3V0KCk7CisgICAgICAgICAgICBvLT5sYXlvdXRJZk5lZWRl
ZCgpOworCisgICAgICAgICAgICAvLyBJZiB3ZSBhcmUgdW5zcGxpdHRhYmxlIGFuZCBkb24ndCBm
aXQsIHRoZW4gd2UgbmVlZCB0byBtb3ZlIGRvd24uCisgICAgICAgICAgICAvLyBXZSBpbmNsdWRl
IG91ciBtYXJnaW5zIGFzIHBhcnQgb2YgdGhlIHVuc3BsaXR0YWJsZSBhcmVhLgorICAgICAgICAg
ICAgaW50IG5ld1kgPSBhZGp1c3RGb3JVbnNwbGl0dGFibGVDaGlsZChvLCB5LCB0cnVlKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgLy8gU2VlIGlmIHdlIGhhdmUgYSBwYWdpbmF0aW9uIHN0
cnV0IHRoYXQgaXMgbWFraW5nIHVzIG1vdmUgZG93biBmdXJ0aGVyLgorICAgICAgICAgICAgLy8g
Tm90ZSB0aGF0IGFuIHVuc3BsaXR0YWJsZSBjaGlsZCBjYW4ndCBhbHNvIGhhdmUgYSBwYWdpbmF0
aW9uIHN0cnV0LCBzbyB0aGlzIGlzCisgICAgICAgICAgICAvLyBleGNsdXNpdmUgd2l0aCB0aGUg
Y2FzZSBhYm92ZS4KKyAgICAgICAgICAgIGlmIChjaGlsZEJsb2NrICYmIGNoaWxkQmxvY2stPnBh
Z2luYXRpb25TdHJ1dCgpKQorICAgICAgICAgICAgICAgIG5ld1kgKz0gY2hpbGRCbG9jay0+cGFn
aW5hdGlvblN0cnV0KCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChuZXdZICE9IHkp
IHsKKyAgICAgICAgICAgICAgICB5ID0gbmV3WTsKKyAgICAgICAgICAgICAgICBvLT5zZXRZKHkg
KyBvLT5tYXJnaW5Ub3AoKSk7CisgICAgICAgICAgICAgICAgaWYgKGNoaWxkQmxvY2spCisgICAg
ICAgICAgICAgICAgICAgIGNoaWxkQmxvY2stPm1hcmtEZXNjZW5kYW50QmxvY2tzQW5kTGluZXNG
b3JMYXlvdXQoKTsKKyAgICAgICAgICAgICAgICBvLT5sYXlvdXRJZk5lZWRlZCgpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CiAKKyAgICAgICAgZi0+bV90b3AgPSB5OworICAgICAgICBmLT5t
X2JvdHRvbSA9IGYtPm1fdG9wICsgby0+bWFyZ2luVG9wKCkgKyBvLT5oZWlnaHQoKSArIG8tPm1h
cmdpbkJvdHRvbSgpOworICAgICAgICAKICAgICAgICAgLy8gSWYgdGhlIGNoaWxkIG1vdmVkLCB3
ZSBoYXZlIHRvIHJlcGFpbnQgaXQuCiAgICAgICAgIGlmIChvLT5jaGVja0ZvclJlcGFpbnREdXJp
bmdMYXlvdXQoKSkKICAgICAgICAgICAgIG8tPnJlcGFpbnREdXJpbmdMYXlvdXRJZk1vdmVkKG9s
ZFJlY3QpOwpAQCAtMzE1OCw4ICszMjgyLDggQEAgaW50IFJlbmRlckJsb2NrOjpsb3dlc3RQb3Np
dGlvbihib29sIGluYwogCiAgICAgaWYgKGhhc0NvbHVtbnMoKSkgewogICAgICAgICBDb2x1bW5J
bmZvKiBjb2xJbmZvID0gY29sdW1uSW5mbygpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgY29sSW5mby0+Y29sdW1uQ291bnQoKTsgaSsrKQotICAgICAgICAgICAgYm90dG9tID0g
bWF4KGJvdHRvbSwgY29sSW5mby0+Y29sdW1uUmVjdEF0KGkpLmJvdHRvbSgpICsgcmVsYXRpdmVP
ZmZzZXQpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY29sdW1uQ291bnQoY29s
SW5mbyk7IGkrKykKKyAgICAgICAgICAgIGJvdHRvbSA9IG1heChib3R0b20sIGNvbHVtblJlY3RB
dChjb2xJbmZvLCBpKS5ib3R0b20oKSArIHJlbGF0aXZlT2Zmc2V0KTsKICAgICAgICAgcmV0dXJu
IGJvdHRvbTsKICAgICB9CiAKQEAgLTMyNTMsOCArMzM3Nyw5IEBAIGludCBSZW5kZXJCbG9jazo6
cmlnaHRtb3N0UG9zaXRpb24oYm9vbCAKICAgICAgICAgLy8gVGhpcyBvbmx5IG1hdHRlcnMgZm9y
IExUUgogICAgICAgICBpZiAoc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSKSB7CiAgICAgICAg
ICAgICBDb2x1bW5JbmZvKiBjb2xJbmZvID0gY29sdW1uSW5mbygpOwotICAgICAgICAgICAgaWYg
KGNvbEluZm8tPmNvbHVtbkNvdW50KCkpCi0gICAgICAgICAgICAgICAgcmlnaHQgPSBtYXgoY29s
SW5mby0+Y29sdW1uUmVjdEF0KGNvbEluZm8tPmNvbHVtbkNvdW50KCkgLSAxKS5yaWdodCgpICsg
cmVsYXRpdmVPZmZzZXQsIHJpZ2h0KTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNvdW50ID0gY29s
dW1uQ291bnQoY29sSW5mbyk7CisgICAgICAgICAgICBpZiAoY291bnQpCisgICAgICAgICAgICAg
ICAgcmlnaHQgPSBtYXgoY29sdW1uUmVjdEF0KGNvbEluZm8sIGNvdW50IC0gMSkucmlnaHQoKSAr
IHJlbGF0aXZlT2Zmc2V0LCByaWdodCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHJpZ2h0
OwogICAgIH0KQEAgLTMzNTMsOCArMzQ3OCw5IEBAIGludCBSZW5kZXJCbG9jazo6bGVmdG1vc3RQ
b3NpdGlvbihib29sIGkKICAgICAgICAgLy8gVGhpcyBvbmx5IG1hdHRlcnMgZm9yIFJUTAogICAg
ICAgICBpZiAoc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gUlRMKSB7CiAgICAgICAgICAgICBDb2x1
bW5JbmZvKiBjb2xJbmZvID0gY29sdW1uSW5mbygpOwotICAgICAgICAgICAgaWYgKGNvbEluZm8t
PmNvbHVtbkNvdW50KCkpCi0gICAgICAgICAgICAgICAgbGVmdCA9IG1pbihjb2xJbmZvLT5jb2x1
bW5SZWN0QXQoY29sSW5mby0+Y29sdW1uQ291bnQoKSAtIDEpLngoKSArIHJlbGF0aXZlT2Zmc2V0
LCBsZWZ0KTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNvdW50ID0gY29sdW1uQ291bnQoY29sSW5m
byk7CisgICAgICAgICAgICBpZiAoY291bnQpCisgICAgICAgICAgICAgICAgbGVmdCA9IG1pbihj
b2x1bW5SZWN0QXQoY29sSW5mbywgY291bnQgLSAxKS54KCkgKyByZWxhdGl2ZU9mZnNldCwgbGVm
dCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGxlZnQ7CiAgICAgfQpAQCAtMzY0Nyw2ICsz
NzczLDkgQEAgYm9vbCBSZW5kZXJCbG9jazo6Y29udGFpbnNGbG9hdChSZW5kZXJPYgogCiB2b2lk
IFJlbmRlckJsb2NrOjptYXJrQWxsRGVzY2VuZGFudHNXaXRoRmxvYXRzRm9yTGF5b3V0KFJlbmRl
ckJveCogZmxvYXRUb1JlbW92ZSwgYm9vbCBpbkxheW91dCkKIHsKKyAgICBpZiAoIW1fZXZlckhh
ZExheW91dCkKKyAgICAgICAgcmV0dXJuOworCiAgICAgc2V0Q2hpbGROZWVkc0xheW91dCh0cnVl
LCAhaW5MYXlvdXQpOwogCiAgICAgaWYgKGZsb2F0VG9SZW1vdmUpCkBAIC0zNjY0LDMwICszNzkz
LDIxIEBAIHZvaWQgUmVuZGVyQmxvY2s6Om1hcmtBbGxEZXNjZW5kYW50c1dpdGgKICAgICB9CiB9
CiAKLWludCBSZW5kZXJCbG9jazo6dmlzaWJsZVRvcE9mSGlnaGVzdEZsb2F0RXh0ZW5kaW5nQmVs
b3coaW50IGJvdHRvbSwgaW50IG1heEhlaWdodCkgY29uc3QKK3ZvaWQgUmVuZGVyQmxvY2s6Om1h
cmtEZXNjZW5kYW50QmxvY2tzQW5kTGluZXNGb3JMYXlvdXQoYm9vbCBpbkxheW91dCkKIHsKLSAg
ICBpbnQgdG9wID0gYm90dG9tOwotICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0cykgewotICAgICAg
ICBGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3Q7Ci0gICAgICAgIGZvciAoRGVwcmVjYXRl
ZFB0ckxpc3RJdGVyYXRvcjxGbG9hdGluZ09iamVjdD4gaXQoKm1fZmxvYXRpbmdPYmplY3RzKTsg
KGZsb2F0aW5nT2JqZWN0ID0gaXQuY3VycmVudCgpKTsgKytpdCkgewotICAgICAgICAgICAgUmVu
ZGVyQm94KiBmbG9hdGluZ0JveCA9IGZsb2F0aW5nT2JqZWN0LT5tX3JlbmRlcmVyOwotICAgICAg
ICAgICAgSW50UmVjdCB2aXNpYmxlT3ZlcmZsb3cgPSBmbG9hdGluZ0JveC0+dmlzaWJsZU92ZXJm
bG93UmVjdCgpOwotICAgICAgICAgICAgdmlzaWJsZU92ZXJmbG93Lm1vdmUoZmxvYXRpbmdCb3gt
PngoKSwgZmxvYXRpbmdCb3gtPnkoKSk7Ci0gICAgICAgICAgICBpZiAodmlzaWJsZU92ZXJmbG93
LnkoKSA8IHRvcCAmJiB2aXNpYmxlT3ZlcmZsb3cuYm90dG9tKCkgPiBib3R0b20gJiYgdmlzaWJs
ZU92ZXJmbG93LmhlaWdodCgpIDw9IG1heEhlaWdodCAmJiBmbG9hdGluZ0JveC0+Y29udGFpbmlu
Z0Jsb2NrKCkgPT0gdGhpcykKLSAgICAgICAgICAgICAgICB0b3AgPSB2aXNpYmxlT3ZlcmZsb3cu
eSgpOwotICAgICAgICB9Ci0gICAgfQorICAgIGlmICghbV9ldmVySGFkTGF5b3V0KQorICAgICAg
ICByZXR1cm47CiAKLSAgICBpZiAoIWNoaWxkcmVuSW5saW5lKCkpIHsKLSAgICAgICAgZm9yIChS
ZW5kZXJPYmplY3QqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+
bmV4dFNpYmxpbmcoKSkgewotICAgICAgICAgICAgaWYgKGNoaWxkLT5pc0Zsb2F0aW5nT3JQb3Np
dGlvbmVkKCkgfHwgIWNoaWxkLT5pc1JlbmRlckJsb2NrKCkpCi0gICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICBSZW5kZXJCbG9jayogY2hpbGRCbG9jayA9IHRvUmVuZGVyQmxv
Y2soY2hpbGQpOwotICAgICAgICAgICAgdG9wID0gbWluKHRvcCwgY2hpbGRCbG9jay0+eSgpICsg
Y2hpbGRCbG9jay0+dmlzaWJsZVRvcE9mSGlnaGVzdEZsb2F0RXh0ZW5kaW5nQmVsb3coYm90dG9t
IC0gY2hpbGRCbG9jay0+eSgpLCBtYXhIZWlnaHQpKTsKLSAgICAgICAgfQotICAgIH0KKyAgICBz
ZXRDaGlsZE5lZWRzTGF5b3V0KHRydWUsICFpbkxheW91dCk7CiAKLSAgICByZXR1cm4gdG9wOwor
ICAgIC8vIEl0ZXJhdGUgb3ZlciBvdXIgY2hpbGRyZW4gYW5kIG1hcmsgdGhlbSBhcyBuZWVkZWQu
CisgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hp
bGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBpZiAoY2hpbGQtPmlzUG9zaXRp
b25lZCgpIHx8ICFjaGlsZC0+aXNSZW5kZXJCbG9jaygpKQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIFJlbmRlckJsb2NrKiBjaGlsZEJsb2NrID0gdG9SZW5kZXJCbG9jayhjaGlsZCk7
CisgICAgICAgIGlmICghY2hpbGRCbG9jay0+aXNJbmxpbmUoKSkKKyAgICAgICAgICAgIGNoaWxk
QmxvY2stPm1hcmtEZXNjZW5kYW50QmxvY2tzQW5kTGluZXNGb3JMYXlvdXQoaW5MYXlvdXQpOwor
ICAgIH0KIH0KIAogaW50IFJlbmRlckJsb2NrOjpnZXRDbGVhckRlbHRhKFJlbmRlckJveCogY2hp
bGQsIGludCB5UG9zKQpAQCAtMzg0NywxNiArMzk2NywxNiBAQCBib29sIFJlbmRlckJsb2NrOjpo
aXRUZXN0Q29sdW1ucyhjb25zdCBICiB7CiAgICAgLy8gV2UgbmVlZCB0byBkbyBtdWx0aXBsZSBw
YXNzZXMsIGJyZWFraW5nIHVwIG91ciBoaXQgdGVzdGluZyBpbnRvIHN0cmlwcy4KICAgICBDb2x1
bW5JbmZvKiBjb2xJbmZvID0gY29sdW1uSW5mbygpOwotICAgIGludCBjb2xDb3VudCA9IGNvbElu
Zm8tPmNvbHVtbkNvdW50KCk7CisgICAgaW50IGNvbENvdW50ID0gY29sdW1uQ291bnQoY29sSW5m
byk7CiAgICAgaWYgKCFjb2xDb3VudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGludCBs
ZWZ0ID0gYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKTsKICAgICBpbnQgY3VycllPZmZzZXQg
PSAwOwogICAgIGludCBpOwogICAgIGZvciAoaSA9IDA7IGkgPCBjb2xDb3VudDsgaSsrKQotICAg
ICAgICBjdXJyWU9mZnNldCAtPSBjb2xJbmZvLT5jb2x1bW5SZWN0QXQoaSkuaGVpZ2h0KCk7Cisg
ICAgICAgIGN1cnJZT2Zmc2V0IC09IGNvbHVtblJlY3RBdChjb2xJbmZvLCBpKS5oZWlnaHQoKTsK
ICAgICBmb3IgKGkgPSBjb2xDb3VudCAtIDE7IGkgPj0gMDsgaS0tKSB7Ci0gICAgICAgIEludFJl
Y3QgY29sUmVjdCA9IGNvbEluZm8tPmNvbHVtblJlY3RBdChpKTsKKyAgICAgICAgSW50UmVjdCBj
b2xSZWN0ID0gY29sdW1uUmVjdEF0KGNvbEluZm8sIGkpOwogICAgICAgICBpbnQgY3VyclhPZmZz
ZXQgPSBjb2xSZWN0LngoKSAtIGxlZnQ7CiAgICAgICAgIGN1cnJZT2Zmc2V0ICs9IGNvbFJlY3Qu
aGVpZ2h0KCk7CiAgICAgICAgIGNvbFJlY3QubW92ZSh0eCwgdHkpOwpAQCAtNDE1MCw4ICs0Mjcw
LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6c2V0RGVzaXJlZENvbHVtbkNvdW50QQogICAgIGJvb2wg
ZGVzdHJveUNvbHVtbnMgPSAhZmlyc3RDaGlsZCgpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
IHx8IChjb3VudCA9PSAxICYmIHN0eWxlKCktPmhhc0F1dG9Db2x1bW5XaWR0aCgpKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICB8fCBmaXJzdENoaWxkKCktPmlzQW5vbnltb3VzQ29sdW1uc0Js
b2NrKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgZmlyc3RDaGlsZCgpLT5pc0Fub255
bW91c0NvbHVtblNwYW5CbG9jaygpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGRvY3Vt
ZW50KCktPnNldHRpbmdzKCktPnBhZ2luYXRlRHVyaW5nTGF5b3V0RW5hYmxlZCgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICB8fCBmaXJzdENoaWxkKCktPmlzQW5vbnltb3VzQ29sdW1uU3Bh
bkJsb2NrKCk7CiAgICAgaWYgKGRlc3Ryb3lDb2x1bW5zKSB7CiAgICAgICAgIGlmIChoYXNDb2x1
bW5zKCkpIHsKICAgICAgICAgICAgIGRlbGV0ZSBnQ29sdW1uSW5mb01hcC0+dGFrZSh0aGlzKTsK
QEAgLTQxOTQsMTMzICs0MzEzLDYwIEBAIENvbHVtbkluZm8qIFJlbmRlckJsb2NrOjpjb2x1bW5J
bmZvKCkgY28KICAgICByZXR1cm4gZ0NvbHVtbkluZm9NYXAtPmdldCh0aGlzKTsgICAgCiB9CiAK
LWludCBSZW5kZXJCbG9jazo6bGF5b3V0Q29sdW1ucyhpbnQgZW5kT2ZDb250ZW50LCBpbnQgcmVx
dWVzdGVkQ29sdW1uSGVpZ2h0KQordW5zaWduZWQgUmVuZGVyQmxvY2s6OmNvbHVtbkNvdW50KENv
bHVtbkluZm8qIGNvbEluZm8pIGNvbnN0CiB7Ci0gICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYg
d2UgaGF2ZSBubyBjb2x1bW5zCi0gICAgaWYgKCFoYXNDb2x1bW5zKCkpCi0gICAgICAgIHJldHVy
biAtMTsKKyAgICBBU1NFUlQoaGFzQ29sdW1ucygpICYmIGdDb2x1bW5JbmZvTWFwLT5nZXQodGhp
cykgPT0gY29sSW5mbyk7CisgICAgcmV0dXJuIGNvbEluZm8tPmNvbHVtbkNvdW50KCk7Cit9CiAK
LSAgICBDb2x1bW5JbmZvKiBpbmZvID0gZ0NvbHVtbkluZm9NYXAtPmdldCh0aGlzKTsKLSAgICBp
bnQgZGVzaXJlZENvbHVtbldpZHRoID0gaW5mby0+ZGVzaXJlZENvbHVtbldpZHRoKCk7Ci0gICAg
aW50IGRlc2lyZWRDb2x1bW5Db3VudCA9IGluZm8tPmRlc2lyZWRDb2x1bW5Db3VudCgpOwotICAg
IAotICAgIGJvb2wgY29tcHV0ZUludHJpbnNpY0hlaWdodCA9IChlbmRPZkNvbnRlbnQgPT0gLTEp
OwotCi0gICAgLy8gRmlsbCB0aGUgY29sdW1ucyBpbiB0byB0aGUgYXZhaWxhYmxlIGhlaWdodC4g
IEF0dGVtcHQgdG8gYmFsYW5jZSB0aGUgaGVpZ2h0IG9mIHRoZSBjb2x1bW5zLgotICAgIC8vIEFk
ZCBpbiBoYWxmIG91ciBsaW5lLWhlaWdodCB0byBoZWxwIHdpdGggYmVzdC1ndWVzcyBpbml0aWFs
IGJhbGFuY2luZy4KLSAgICBpbnQgY29sdW1uU2xvcCA9IGxpbmVIZWlnaHQoZmFsc2UpIC8gMjsK
LSAgICBpbnQgcmVtYWluaW5nU2xvcFNwYWNlID0gY29sdW1uU2xvcCAqIGRlc2lyZWRDb2x1bW5D
b3VudDsKLSAgICBpbnQgYXZhaWxhYmxlSGVpZ2h0ID0gY29udGVudEhlaWdodCgpOwotICAgIGlu
dCBjb2xIZWlnaHQ7Ci0gICAgaWYgKGNvbXB1dGVJbnRyaW5zaWNIZWlnaHQgJiYgcmVxdWVzdGVk
Q29sdW1uSGVpZ2h0ID49IDApCi0gICAgICAgIGNvbEhlaWdodCA9IHJlcXVlc3RlZENvbHVtbkhl
aWdodDsKLSAgICBlbHNlIGlmIChjb21wdXRlSW50cmluc2ljSGVpZ2h0KQotICAgICAgICBjb2xI
ZWlnaHQgPSBtaW4oYXZhaWxhYmxlSGVpZ2h0LCBhdmFpbGFibGVIZWlnaHQgLyBkZXNpcmVkQ29s
dW1uQ291bnQgKyBjb2x1bW5TbG9wKTsKLSAgICBlbHNlCi0gICAgICAgIGNvbEhlaWdodCA9IGF2
YWlsYWJsZUhlaWdodDsKLSAgICBpbnQgb3JpZ2luYWxDb2xIZWlnaHQgPSBjb2xIZWlnaHQ7CitJ
bnRSZWN0IFJlbmRlckJsb2NrOjpjb2x1bW5SZWN0QXQoQ29sdW1uSW5mbyogY29sSW5mbywgdW5z
aWduZWQgaW5kZXgpIGNvbnN0Cit7CisgICAgQVNTRVJUKGhhc0NvbHVtbnMoKSAmJiBnQ29sdW1u
SW5mb01hcC0+Z2V0KHRoaXMpID09IGNvbEluZm8pOwogCisgICAgLy8gQ29tcHV0ZSB0aGUgYXBw
cm9wcmlhdGUgcmVjdCBiYXNlZCBvZmYgb3VyIGluZm9ybWF0aW9uLgorICAgIGludCBjb2xXaWR0
aCA9IGNvbEluZm8tPmRlc2lyZWRDb2x1bW5XaWR0aCgpOworICAgIGludCBjb2xIZWlnaHQgPSBj
b2xJbmZvLT5jb2x1bW5IZWlnaHQoKTsKKyAgICBpbnQgY29sVG9wID0gYm9yZGVyVG9wKCkgKyBw
YWRkaW5nVG9wKCk7CiAgICAgaW50IGNvbEdhcCA9IGNvbHVtbkdhcCgpOworICAgIGludCBjb2xM
ZWZ0ID0gc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8gCisgICAgICAgICAgICAgICAgICAg
ICAgYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKSArIChpbmRleCAqIChjb2xXaWR0aCArIGNv
bEdhcCkpCisgICAgICAgICAgICAgICAgICAgICAgOiBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVm
dCgpICsgY29udGVudFdpZHRoKCkgLSBjb2xXaWR0aCAtIChpbmRleCAqIChjb2xXaWR0aCArIGNv
bEdhcCkpOworICAgIHJldHVybiBJbnRSZWN0KGNvbExlZnQsIGNvbFRvcCwgY29sV2lkdGgsIGNv
bEhlaWdodCk7Cit9CiAKLSAgICAvLyBDb21wdXRlIGEgY29sbGVjdGlvbiBvZiBjb2x1bW4gcmVj
dHMuCi0gICAgaW5mby0+Y2xlYXJDb2x1bW5zKCk7Ci0gICAgCi0gICAgLy8gVGhlbiB3ZSBkbyBh
IHNpbXVsYXRlZCAicGFpbnQiIGludG8gdGhlIGNvbHVtbiBzbGljZXMgYW5kIGFsbG93IHRoZSBj
b250ZW50IHRvIHNsaWdodGx5IGFkanVzdCBvdXIgaW5kaXZpZHVhbCBjb2x1bW4gcmVjdHMuCi0g
ICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gdGFrZSBpbnRvIGFjY291bnQgbGF5ZXJzIHRoYXQgYXJl
IGFmZmVjdGVkIGJ5IHRoZSBjb2x1bW5zIGFzIHdlbGwgaGVyZSBzbyB0aGF0IHRoZXkgY2FuIGhh
dmUgYW4gb3Bwb3J0dW5pdHkKLSAgICAvLyB0byBhZGp1c3QgY29sdW1uIHJlY3RzIGFsc28uCi0g
ICAgUmVuZGVyVmlldyogdiA9IHZpZXcoKTsKLSAgICBpbnQgbGVmdCA9IGJvcmRlckxlZnQoKSAr
IHBhZGRpbmdMZWZ0KCk7Ci0gICAgaW50IHRvcCA9IGJvcmRlclRvcCgpICsgcGFkZGluZ1RvcCgp
OwotICAgIGludCBjdXJyWCA9IHN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUiA/IGJvcmRlckxl
ZnQoKSArIHBhZGRpbmdMZWZ0KCkgOiBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpICsgY29u
dGVudFdpZHRoKCkgLSBkZXNpcmVkQ29sdW1uV2lkdGg7Ci0gICAgaW50IGN1cnJZID0gdG9wOwot
ICAgIHVuc2lnbmVkIGNvbENvdW50ID0gZGVzaXJlZENvbHVtbkNvdW50OwotICAgIGludCBtYXhD
b2xCb3R0b20gPSBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKTsKLSAgICBpbnQgY29udGVudEJv
dHRvbSA9IHRvcCArIGF2YWlsYWJsZUhlaWdodDsKLSAgICBpbnQgbWluaW11bUNvbHVtbkhlaWdo
dCA9IC0xOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb2xDb3VudDsgaSsrKSB7Ci0g
ICAgICAgIC8vIElmIHdlIGFyZW4ndCBjb25zdHJhaW5lZCwgdGhlbiB0aGUgbGFzdCBjb2x1bW4g
Y2FuIGp1c3QgZ2V0IGFsbCB0aGUgcmVtYWluaW5nIHNwYWNlLgotICAgICAgICBpZiAoY29tcHV0
ZUludHJpbnNpY0hlaWdodCAmJiBpID09IGNvbENvdW50IC0gMSkKLSAgICAgICAgICAgIGNvbEhl
aWdodCA9IGF2YWlsYWJsZUhlaWdodDsKLQotICAgICAgICAvLyBUaGlzIHJlcHJlc2VudHMgdGhl
IHJlYWwgY29sdW1uIHBvc2l0aW9uLgotICAgICAgICBJbnRSZWN0IGNvbFJlY3QoY3VyclgsIHRv
cCwgZGVzaXJlZENvbHVtbldpZHRoLCBjb2xIZWlnaHQpOwotCi0gICAgICAgIGludCB0cnVuY2F0
aW9uUG9pbnQgPSB2aXNpYmxlVG9wT2ZIaWdoZXN0RmxvYXRFeHRlbmRpbmdCZWxvdyhjdXJyWSAr
IGNvbEhlaWdodCwgY29sSGVpZ2h0KTsKLQotICAgICAgICAvLyBGb3IgdGhlIHNpbXVsYXRlZCBw
YWludCwgd2UgcHJldGVuZCBsaWtlIGV2ZXJ5dGhpbmcgaXMgaW4gb25lIGxvbmcgc3RyaXAuCi0g
ICAgICAgIEludFJlY3QgcGFnZVJlY3QobGVmdCwgY3VyclksIGNvbnRlbnRXaWR0aCgpLCB0cnVu
Y2F0aW9uUG9pbnQgLSBjdXJyWSk7Ci0gICAgICAgIHYtPnNldFByaW50UmVjdChwYWdlUmVjdCk7
Ci0gICAgICAgIHYtPnNldFRydW5jYXRlZEF0KHRydW5jYXRpb25Qb2ludCk7Ci0gICAgICAgIEdy
YXBoaWNzQ29udGV4dCBjb250ZXh0KChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCopMCk7Ci0gICAg
ICAgIFBhaW50SW5mbyBwYWludEluZm8oJmNvbnRleHQsIHBhZ2VSZWN0LCBQYWludFBoYXNlRm9y
ZWdyb3VuZCwgZmFsc2UsIDAsIDApOwotICAgICAgICAKLSAgICAgICAgc2V0SGFzQ29sdW1ucyhm
YWxzZSk7Ci0gICAgICAgIHBhaW50T2JqZWN0KHBhaW50SW5mbywgMCwgMCk7Ci0gICAgICAgIHNl
dEhhc0NvbHVtbnModHJ1ZSk7Ci0KLSAgICAgICAgaWYgKGNvbXB1dGVJbnRyaW5zaWNIZWlnaHQg
JiYgdi0+bWluaW11bUNvbHVtbkhlaWdodCgpID4gb3JpZ2luYWxDb2xIZWlnaHQpIHsKLSAgICAg
ICAgICAgIC8vIFRoZSBpbml0aWFsIGNvbHVtbiBoZWlnaHQgd2FzIHRvbyBzbWFsbCB0byBjb250
YWluIG9uZSBsaW5lIG9mIHRleHQuCi0gICAgICAgICAgICBtaW5pbXVtQ29sdW1uSGVpZ2h0ID0g
bWF4KG1pbmltdW1Db2x1bW5IZWlnaHQsIHYtPm1pbmltdW1Db2x1bW5IZWlnaHQoKSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpbnQgYWRqdXN0ZWRCb3R0b20gPSB2LT5iZXN0VHJ1bmNhdGVkQXQo
KTsKLSAgICAgICAgaWYgKGFkanVzdGVkQm90dG9tIDw9IGN1cnJZKQotICAgICAgICAgICAgYWRq
dXN0ZWRCb3R0b20gPSB0cnVuY2F0aW9uUG9pbnQ7Ci0gICAgICAgIAotICAgICAgICBjb2xSZWN0
LnNldEhlaWdodChhZGp1c3RlZEJvdHRvbSAtIGN1cnJZKTsKLSAgICAgICAgCi0gICAgICAgIC8v
IEFkZCBpbiB0aGUgbG9zdCBzcGFjZSB0byB0aGUgc3Vic2VxdWVudCBjb2x1bW5zLgotICAgICAg
ICAvLyBGSVhNRTogVGhpcyB3aWxsIGNyZWF0ZSBhICJzdGFpcmNhc2UiIGVmZmVjdCBpZiB0aGVy
ZSBhcmUgZW5vdWdoIGNvbHVtbnMsIGJ1dCB0aGUgZWZmZWN0IHNob3VsZCBiZSBwcmV0dHkgc3Vi
dGxlLgotICAgICAgICBpZiAoY29tcHV0ZUludHJpbnNpY0hlaWdodCkgewotICAgICAgICAgICAg
aW50IGxvc3RTcGFjZSA9IGNvbEhlaWdodCAtIGNvbFJlY3QuaGVpZ2h0KCk7Ci0gICAgICAgICAg
ICBpZiAobG9zdFNwYWNlID4gcmVtYWluaW5nU2xvcFNwYWNlKSB7Ci0gICAgICAgICAgICAgICAg
Ly8gUmVkZXN0cmlidXRlIHRoZSBzcGFjZSBhbW9uZyB0aGUgcmVtYWluaW5nIGNvbHVtbnMuCi0g
ICAgICAgICAgICAgICAgaW50IHNwYWNlVG9SZWRpc3RyaWJ1dGUgPSBsb3N0U3BhY2UgLSByZW1h
aW5pbmdTbG9wU3BhY2U7Ci0gICAgICAgICAgICAgICAgaW50IHJlbWFpbmluZ0NvbHVtbnMgPSBj
b2xDb3VudCAtIGkgKyAxOwotICAgICAgICAgICAgICAgIGNvbEhlaWdodCArPSBzcGFjZVRvUmVk
aXN0cmlidXRlIC8gcmVtYWluaW5nQ29sdW1uczsKLSAgICAgICAgICAgIH0gCi0gICAgICAgICAg
ICByZW1haW5pbmdTbG9wU3BhY2UgPSBtYXgoMCwgcmVtYWluaW5nU2xvcFNwYWNlIC0gbG9zdFNw
YWNlKTsKLSAgICAgICAgfQorYm9vbCBSZW5kZXJCbG9jazo6bGF5b3V0Q29sdW1ucyhib29sIGhh
c1NwZWNpZmllZFBhZ2VIZWlnaHQsIGludCBwYWdlSGVpZ2h0LCBMYXlvdXRTdGF0ZU1haW50YWlu
ZXImIHN0YXRlUHVzaGVyKQoreworICAgIGlmIChoYXNDb2x1bW5zKCkpIHsKKyAgICAgICAgQ29s
dW1uSW5mbyogY29sSW5mbyA9IGNvbHVtbkluZm8oKTsKKyAgICAgICAgaW50IGRlc2lyZWRDb2x1
bW5Db3VudCA9IGNvbEluZm8tPmRlc2lyZWRDb2x1bW5Db3VudCgpOworICAgICAgICBpZiAoIWhh
c1NwZWNpZmllZFBhZ2VIZWlnaHQgJiYgY29udGVudEhlaWdodCgpID4gcGFnZUhlaWdodCAqIGRl
c2lyZWRDb2x1bW5Db3VudCkgeworICAgICAgICAgICAgLy8gTm93IHRoYXQgd2Uga25vdyB0aGUg
aW50cmluc2ljIGhlaWdodCBvZiB0aGUgY29sdW1ucywgd2UgaGF2ZSB0byByZWJhbGFuY2UgdGhl
bS4KKyAgICAgICAgICAgIGludCBjb2x1bW5IZWlnaHQgPSBtYXgoY29sSW5mby0+bWluaW11bUNv
bHVtbkhlaWdodCgpLCAoaW50KWNlaWxmKChmbG9hdCljb250ZW50SGVpZ2h0KCkgLyBkZXNpcmVk
Q29sdW1uQ291bnQpKTsKKyAgICAgICAgICAgIGlmIChjb2x1bW5IZWlnaHQgPiAwKSB7CisgICAg
ICAgICAgICAgICAgc3RhdGVQdXNoZXIucG9wKCk7CisgICAgICAgICAgICAgICAgbV9ldmVySGFk
TGF5b3V0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBsYXlvdXRCbG9jayhmYWxzZSwgY29sdW1u
SGVpZ2h0KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSAKICAgICAgICAgCi0gICAgICAgIGlmIChzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBM
VFIpCi0gICAgICAgICAgICBjdXJyWCArPSBkZXNpcmVkQ29sdW1uV2lkdGggKyBjb2xHYXA7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIGN1cnJYIC09IChkZXNpcmVkQ29sdW1uV2lkdGggKyBj
b2xHYXApOwotCi0gICAgICAgIGN1cnJZICs9IGNvbFJlY3QuaGVpZ2h0KCk7Ci0gICAgICAgIGF2
YWlsYWJsZUhlaWdodCAtPSBjb2xSZWN0LmhlaWdodCgpOwotCi0gICAgICAgIG1heENvbEJvdHRv
bSA9IG1heChjb2xSZWN0LmJvdHRvbSgpLCBtYXhDb2xCb3R0b20pOworICAgICAgICBpZiAocGFn
ZUhlaWdodCkgLy8gRklYTUU6IFNob3VsZCB3ZSB1c2UgbG93ZXN0UG9zaXRpb24gKGV4Y2x1ZGlu
ZyBvdXIgcG9zaXRpb25lZCBvYmplY3RzKSBpbnN0ZWFkIG9mIGNvbnRlbnRIZWlnaHQoKT8KKyAg
ICAgICAgICAgIGNvbEluZm8tPnNldENvbHVtbkNvdW50QW5kSGVpZ2h0KGNlaWxmKChmbG9hdClj
b250ZW50SGVpZ2h0KCkgLyBwYWdlSGVpZ2h0KSwgcGFnZUhlaWdodCk7CiAKLSAgICAgICAgaW5m
by0+YWRkQ29sdW1uUmVjdChjb2xSZWN0KTsKLSAgICAgICAgCi0gICAgICAgIC8vIFN0YXJ0IGFk
ZGluZyBpbiBtb3JlIGNvbHVtbnMgYXMgbG9uZyBhcyB0aGVyZSdzIHN0aWxsIGNvbnRlbnQgbGVm
dC4KLSAgICAgICAgaWYgKGN1cnJZIDwgZW5kT2ZDb250ZW50ICYmIGkgPT0gY29sQ291bnQgLSAx
ICYmIChjb21wdXRlSW50cmluc2ljSGVpZ2h0IHx8IGNvbnRlbnRIZWlnaHQoKSkpCi0gICAgICAg
ICAgICBjb2xDb3VudCsrOwotICAgIH0KKyAgICAgICAgaWYgKGNvbHVtbkNvdW50KGNvbEluZm8p
KSB7CisgICAgICAgICAgICBJbnRSZWN0IGxhc3RSZWN0ID0gY29sdW1uUmVjdEF0KGNvbEluZm8s
IGNvbHVtbkNvdW50KGNvbEluZm8pIC0gMSk7CisgICAgICAgICAgICBpbnQgb3ZlcmZsb3dMZWZ0
ID0gc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gUlRMID8gbWluKDAsIGxhc3RSZWN0LngoKSkgOiAw
OworICAgICAgICAgICAgaW50IG92ZXJmbG93UmlnaHQgPSBzdHlsZSgpLT5kaXJlY3Rpb24oKSA9
PSBMVFIgPyBtYXgod2lkdGgoKSwgbGFzdFJlY3QueCgpICsgbGFzdFJlY3Qud2lkdGgoKSkgOiAw
OworICAgICAgICAgICAgaW50IG92ZXJmbG93SGVpZ2h0ID0gYm9yZGVyVG9wKCkgKyBwYWRkaW5n
VG9wKCkgKyBjb2xJbmZvLT5jb2x1bW5IZWlnaHQoKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgc2V0SGVpZ2h0KG92ZXJmbG93SGVpZ2h0ICsgYm9yZGVyQm90dG9tKCkgKyBwYWRkaW5nQm90
dG9tKCkgKyBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCkpOwogCi0gICAgaWYgKG1pbmltdW1D
b2x1bW5IZWlnaHQgPj0gMCkgewotICAgICAgICAvLyBJZiBvcmlnaW5hbENvbEhlaWdodCB3YXMg
dG9vIHNtYWxsLCB3ZSBuZWVkIHRvIHRyeSB0byBsYXlvdXQgYWdhaW4uCi0gICAgICAgIHJldHVy
biBsYXlvdXRDb2x1bW5zKGVuZE9mQ29udGVudCwgbWluaW11bUNvbHVtbkhlaWdodCk7CisgICAg
ICAgICAgICBtX292ZXJmbG93LmNsZWFyKCk7CisgICAgICAgICAgICBhZGRMYXlvdXRPdmVyZmxv
dyhJbnRSZWN0KG92ZXJmbG93TGVmdCwgMCwgb3ZlcmZsb3dSaWdodCAtIG92ZXJmbG93TGVmdCwg
b3ZlcmZsb3dIZWlnaHQpKTsKKyAgICAgICAgfQogICAgIH0KLQotICAgIGludCBvdmVyZmxvd1Jp
Z2h0ID0gbWF4KHdpZHRoKCksIGN1cnJYIC0gY29sR2FwKTsKLSAgICBpbnQgb3ZlcmZsb3dMZWZ0
ID0gbWluKDAsIGN1cnJYICsgZGVzaXJlZENvbHVtbldpZHRoICsgY29sR2FwKTsKLSAgICBpbnQg
b3ZlcmZsb3dIZWlnaHQgPSBtYXhDb2xCb3R0b207Ci0gICAgaW50IHRvQWRkID0gYm9yZGVyQm90
dG9tKCkgKyBwYWRkaW5nQm90dG9tKCkgKyBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCk7Ci0g
ICAgICAgIAotICAgIGlmIChjb21wdXRlSW50cmluc2ljSGVpZ2h0KQotICAgICAgICBzZXRIZWln
aHQobWF4Q29sQm90dG9tICsgdG9BZGQpOwotCi0gICAgbV9vdmVyZmxvdy5jbGVhcigpOwotICAg
IGFkZExheW91dE92ZXJmbG93KEludFJlY3Qob3ZlcmZsb3dMZWZ0LCAwLCBvdmVyZmxvd1JpZ2h0
IC0gb3ZlcmZsb3dMZWZ0LCBvdmVyZmxvd0hlaWdodCkpOwotCi0gICAgdi0+c2V0UHJpbnRSZWN0
KEludFJlY3QoKSk7Ci0gICAgdi0+c2V0VHJ1bmNhdGVkQXQoMCk7Ci0gICAgCi0gICAgQVNTRVJU
KGNvbENvdW50ID09IGluZm8tPmNvbHVtbkNvdW50KCkpOwogICAgIAotICAgIHJldHVybiBjb250
ZW50Qm90dG9tOworICAgIHJldHVybiBmYWxzZTsKIH0KIAogdm9pZCBSZW5kZXJCbG9jazo6YWRq
dXN0UG9pbnRUb0NvbHVtbkNvbnRlbnRzKEludFBvaW50JiBwb2ludCkgY29uc3QKQEAgLTQzMzAs
MTcgKzQzNzYsMTcgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRqdXN0UG9pbnRUb0NvbHVtbkNvbgog
ICAgICAgICByZXR1cm47CiAgICAgCiAgICAgQ29sdW1uSW5mbyogY29sSW5mbyA9IGNvbHVtbklu
Zm8oKTsKLSAgICBpZiAoIWNvbEluZm8tPmNvbHVtbkNvdW50KCkpCisgICAgaWYgKCFjb2x1bW5D
b3VudChjb2xJbmZvKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRGV0ZXJtaW5lIHdoaWNo
IGNvbHVtbnMgd2UgaW50ZXJzZWN0LgogICAgIGludCBjb2xHYXAgPSBjb2x1bW5HYXAoKTsKICAg
ICBpbnQgbGVmdEdhcCA9IGNvbEdhcCAvIDI7Ci0gICAgSW50UG9pbnQgY29sdW1uUG9pbnQoY29s
SW5mby0+Y29sdW1uUmVjdEF0KDApLmxvY2F0aW9uKCkpOworICAgIEludFBvaW50IGNvbHVtblBv
aW50KGNvbHVtblJlY3RBdChjb2xJbmZvLCAwKS5sb2NhdGlvbigpKTsKICAgICBpbnQgeU9mZnNl
dCA9IDA7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvbEluZm8tPmNvbHVtbkNvdW50
KCk7IGkrKykgewogICAgICAgICAvLyBBZGQgaW4gaGFsZiB0aGUgY29sdW1uIGdhcCB0byB0aGUg
bGVmdCBhbmQgcmlnaHQgb2YgdGhlIHJlY3QuCi0gICAgICAgIEludFJlY3QgY29sUmVjdCA9IGNv
bEluZm8tPmNvbHVtblJlY3RBdChpKTsKKyAgICAgICAgSW50UmVjdCBjb2xSZWN0ID0gY29sdW1u
UmVjdEF0KGNvbEluZm8sIGkpOwogICAgICAgICBJbnRSZWN0IGdhcEFuZENvbHVtblJlY3QoY29s
UmVjdC54KCkgLSBsZWZ0R2FwLCBjb2xSZWN0LnkoKSwgY29sUmVjdC53aWR0aCgpICsgY29sR2Fw
LCBjb2xSZWN0LmhlaWdodCgpKTsKIAogICAgICAgICBpZiAocG9pbnQueCgpID49IGdhcEFuZENv
bHVtblJlY3QueCgpICYmIHBvaW50LngoKSA8IGdhcEFuZENvbHVtblJlY3QucmlnaHQoKSkgewpA
QCAtNDM3OCw3ICs0NDI0LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRqdXN0UmVjdEZvckNvbHVt
bnMoSQogICAgIEludFJlY3QgcmVzdWx0OwogICAgIAogICAgIC8vIERldGVybWluZSB3aGljaCBj
b2x1bW5zIHdlIGludGVyc2VjdC4KLSAgICB1bnNpZ25lZCBjb2xDb3VudCA9IGNvbEluZm8tPmNv
bHVtbkNvdW50KCk7CisgICAgdW5zaWduZWQgY29sQ291bnQgPSBjb2x1bW5Db3VudChjb2xJbmZv
KTsKICAgICBpZiAoIWNvbENvdW50KQogICAgICAgICByZXR1cm47CiAgICAgCkBAIC00Mzg2LDcg
KzQ0MzIsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGp1c3RSZWN0Rm9yQ29sdW1ucyhJCiAgICAg
CiAgICAgaW50IGN1cnJZT2Zmc2V0ID0gMDsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
Y29sQ291bnQ7IGkrKykgewotICAgICAgICBJbnRSZWN0IGNvbFJlY3QgPSBjb2xJbmZvLT5jb2x1
bW5SZWN0QXQoaSk7CisgICAgICAgIEludFJlY3QgY29sUmVjdCA9IGNvbHVtblJlY3RBdChjb2xJ
bmZvLCBpKTsKICAgICAgICAgaW50IGN1cnJYT2Zmc2V0ID0gY29sUmVjdC54KCkgLSBsZWZ0Owog
ICAgICAgICAKICAgICAgICAgSW50UmVjdCByZXBhaW50UmVjdCA9IHI7CkBAIC00NDEyLDkgKzQ0
NTgsOSBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGp1c3RGb3JDb2x1bW5zKEludFNpCiAKICAgICBp
bnQgbGVmdCA9IGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCk7CiAgICAgaW50IHlPZmZzZXQg
PSAwOwotICAgIHNpemVfdCBjb2x1bW5Db3VudCA9IGNvbEluZm8tPmNvbHVtbkNvdW50KCk7Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb2x1bW5Db3VudDsgKytpKSB7Ci0gICAgICAgIElu
dFJlY3QgY29sdW1uUmVjdCA9IGNvbEluZm8tPmNvbHVtblJlY3RBdChpKTsKKyAgICBzaXplX3Qg
Y29sQ291bnQgPSBjb2x1bW5Db3VudChjb2xJbmZvKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGNvbENvdW50OyArK2kpIHsKKyAgICAgICAgSW50UmVjdCBjb2x1bW5SZWN0ID0gY29sdW1u
UmVjdEF0KGNvbEluZm8sIGkpOwogICAgICAgICBpbnQgeE9mZnNldCA9IGNvbHVtblJlY3QueCgp
IC0gbGVmdDsKICAgICAgICAgaWYgKHBvaW50LnkoKSA8IGNvbHVtblJlY3QuYm90dG9tKCkgKyB5
T2Zmc2V0KSB7CiAgICAgICAgICAgICBvZmZzZXQuZXhwYW5kKHhPZmZzZXQsIC15T2Zmc2V0KTsK
QEAgLTU0MTIsNiArNTQ1OCwxNiBAQCB2b2lkIFJlbmRlckJsb2NrOjpzZXRNYXhCb3R0b21NYXJn
aW5zKGluCiAgICAgbV9tYXhNYXJnaW4tPm1fYm90dG9tTmVnID0gbmVnOwogfQogCit2b2lkIFJl
bmRlckJsb2NrOjpzZXRQYWdpbmF0aW9uU3RydXQoaW50IHN0cnV0KQoreworICAgIGlmICghbV9t
YXhNYXJnaW4pIHsKKyAgICAgICAgaWYgKHN0cnV0ID09IDApCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIG1fbWF4TWFyZ2luID0gbmV3IE1heE1hcmdpbih0aGlzKTsKKyAgICB9CisgICAg
bV9tYXhNYXJnaW4tPm1fcGFnaW5hdGlvblN0cnV0ID0gc3RydXQ7Cit9CisKIHZvaWQgUmVuZGVy
QmxvY2s6OmFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgaW50IHR4LCBpbnQg
dHkpCiB7CiAgICAgLy8gRm9yIGJsb2NrcyBpbnNpZGUgaW5saW5lcywgd2UgZ28gYWhlYWQgYW5k
IGluY2x1ZGUgbWFyZ2lucyBzbyB0aGF0IHdlIHJ1biByaWdodCB1cCB0byB0aGUKQEAgLTU2NzAs
NiArNTcyNiw5NyBAQCBSZW5kZXJCbG9jayogUmVuZGVyQmxvY2s6OmNyZWF0ZUFub255bW91CiAg
ICAgcmV0dXJuIG5ld0JveDsKIH0KIAoraW50IFJlbmRlckJsb2NrOjpuZXh0UGFnZVRvcChpbnQg
eVBvcykgY29uc3QKK3sKKyAgICBMYXlvdXRTdGF0ZSogbGF5b3V0U3RhdGUgPSB2aWV3KCktPmxh
eW91dFN0YXRlKCk7CisgICAgaWYgKCFsYXlvdXRTdGF0ZS0+bV9wYWdlSGVpZ2h0KQorICAgICAg
ICByZXR1cm4geVBvczsKKyAgICAKKyAgICAvLyBUaGUgeVBvcyBpcyBpbiBvdXIgY29vcmRpbmF0
ZSBzcGFjZS4gIFdlIGNhbiBhZGQgaW4gb3VyIHB1c2hlZCBvZmZzZXQuCisgICAgaW50IHBhZ2VI
ZWlnaHQgPSBsYXlvdXRTdGF0ZS0+bV9wYWdlSGVpZ2h0OworICAgIGludCByZW1haW5pbmdIZWln
aHQgPSBwYWdlSGVpZ2h0IC0gKChsYXlvdXRTdGF0ZS0+bV9sYXlvdXRPZmZzZXQgLSBsYXlvdXRT
dGF0ZS0+bV9wYWdlT2Zmc2V0KS5oZWlnaHQoKSArIHlQb3MpICUgcGFnZUhlaWdodDsKKyAgICBy
ZXR1cm4geVBvcyArIHJlbWFpbmluZ0hlaWdodDsKK30KKworaW50IFJlbmRlckJsb2NrOjphcHBs
eUJlZm9yZUJyZWFrKFJlbmRlckJveCogY2hpbGQsIGludCB5UG9zKQoreworICAgIGJvb2wgY2hl
Y2tQYWdlQnJlYWtzID0gZG9jdW1lbnQoKS0+cGFnaW5hdGVkKCkgJiYgZG9jdW1lbnQoKS0+c2V0
dGluZ3MoKS0+cGFnaW5hdGVEdXJpbmdMYXlvdXRFbmFibGVkKCk7CisgICAgYm9vbCBjaGVja0Nv
bHVtbkJyZWFrcyA9IHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+cGFnaW5hdGluZ0NvbHVtbnMoKTsK
KyAgICBib29sIGNoZWNrQmVmb3JlQWx3YXlzID0gKGNoZWNrUGFnZUJyZWFrcyAmJiBjaGlsZC0+
c3R5bGUoKS0+cGFnZUJyZWFrQmVmb3JlKCkgPT0gUEJBTFdBWVMpIHx8IChjaGVja0NvbHVtbkJy
ZWFrcyAmJiBjaGlsZC0+c3R5bGUoKS0+Y29sdW1uQnJlYWtCZWZvcmUoKSA9PSBQQkFMV0FZUyk7
CisgICAgaWYgKGNoZWNrQmVmb3JlQWx3YXlzKQorICAgICAgICByZXR1cm4gbmV4dFBhZ2VUb3Ao
eVBvcyk7CisgICAgcmV0dXJuIHlQb3M7Cit9CisKK2ludCBSZW5kZXJCbG9jazo6YXBwbHlBZnRl
ckJyZWFrKFJlbmRlckJveCogY2hpbGQsIGludCB5UG9zLCBNYXJnaW5JbmZvJiBtYXJnaW5JbmZv
KQoreworICAgIGJvb2wgY2hlY2tQYWdlQnJlYWtzID0gZG9jdW1lbnQoKS0+cGFnaW5hdGVkKCkg
JiYgZG9jdW1lbnQoKS0+c2V0dGluZ3MoKS0+cGFnaW5hdGVEdXJpbmdMYXlvdXRFbmFibGVkKCk7
CisgICAgYm9vbCBjaGVja0NvbHVtbkJyZWFrcyA9IHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+cGFn
aW5hdGluZ0NvbHVtbnMoKTsKKyAgICBib29sIGNoZWNrQWZ0ZXJBbHdheXMgPSAoY2hlY2tQYWdl
QnJlYWtzICYmIGNoaWxkLT5zdHlsZSgpLT5wYWdlQnJlYWtBZnRlcigpID09IFBCQUxXQVlTKSB8
fCAoY2hlY2tDb2x1bW5CcmVha3MgJiYgY2hpbGQtPnN0eWxlKCktPmNvbHVtbkJyZWFrQWZ0ZXIo
KSA9PSBQQkFMV0FZUyk7CisgICAgaWYgKGNoZWNrQWZ0ZXJBbHdheXMpIHsKKyAgICAgICAgbWFy
Z2luSW5mby5zZXRCb3R0b21RdWlyayh0cnVlKTsgLy8gQ2F1c2UgbWFyZ2lucyB0byBiZSBkaXNj
YXJkZWQgZm9yIGFueSBmb2xsb3dpbmcgY29udGVudC4KKyAgICAgICAgcmV0dXJuIG5leHRQYWdl
VG9wKHlQb3MpOworICAgIH0KKyAgICByZXR1cm4geVBvczsKK30KKworaW50IFJlbmRlckJsb2Nr
OjphZGp1c3RGb3JVbnNwbGl0dGFibGVDaGlsZChSZW5kZXJCb3gqIGNoaWxkLCBpbnQgeVBvcywg
Ym9vbCBpbmNsdWRlTWFyZ2lucykKK3sKKyAgICBib29sIGlzVW5zcGxpdHRhYmxlID0gY2hpbGQt
PmlzUmVwbGFjZWQoKSB8fCBjaGlsZC0+c2Nyb2xsc092ZXJmbG93KCk7CisgICAgaWYgKCFpc1Vu
c3BsaXR0YWJsZSkKKyAgICAgICAgcmV0dXJuIHlQb3M7CisgICAgaW50IGNoaWxkSGVpZ2h0ID0g
Y2hpbGQtPmhlaWdodCgpICsgKGluY2x1ZGVNYXJnaW5zID8gY2hpbGQtPm1hcmdpblRvcCgpICsg
Y2hpbGQtPm1hcmdpbkJvdHRvbSgpIDogMCk7CisgICAgTGF5b3V0U3RhdGUqIGxheW91dFN0YXRl
ID0gdmlldygpLT5sYXlvdXRTdGF0ZSgpOworICAgIGlmIChsYXlvdXRTdGF0ZS0+bV9jb2x1bW5J
bmZvKQorICAgICAgICBsYXlvdXRTdGF0ZS0+bV9jb2x1bW5JbmZvLT51cGRhdGVNaW5pbXVtQ29s
dW1uSGVpZ2h0KGNoaWxkSGVpZ2h0KTsKKyAgICBpbnQgcGFnZUhlaWdodCA9IGxheW91dFN0YXRl
LT5tX3BhZ2VIZWlnaHQ7CisgICAgaWYgKCFwYWdlSGVpZ2h0IHx8IGNoaWxkSGVpZ2h0ID4gcGFn
ZUhlaWdodCkKKyAgICAgICAgcmV0dXJuIHlQb3M7CisgICAgaW50IHJlbWFpbmluZ0hlaWdodCA9
IHBhZ2VIZWlnaHQgLSAoKGxheW91dFN0YXRlLT5tX2xheW91dE9mZnNldCAtIGxheW91dFN0YXRl
LT5tX3BhZ2VPZmZzZXQpLmhlaWdodCgpICsgeVBvcykgJSBwYWdlSGVpZ2h0OworICAgIGlmIChy
ZW1haW5pbmdIZWlnaHQgPCBjaGlsZEhlaWdodCkKKyAgICAgICAgcmV0dXJuIHlQb3MgKyByZW1h
aW5pbmdIZWlnaHQ7CisgICAgcmV0dXJuIHlQb3M7Cit9CisKK3ZvaWQgUmVuZGVyQmxvY2s6OmFk
anVzdExpbmVQb3NpdGlvbkZvclBhZ2luYXRpb24oUm9vdElubGluZUJveCogbGluZUJveCwgaW50
JiBkZWx0YSkKK3sKKyAgICAvLyBGSVhNRTogRm9yIG5vdyB3ZSBwYWdpbmF0ZSB1c2luZyBsaW5l
IG92ZXJmbG93LiAgVGhpcyBlbnN1cmVzIHRoYXQgbGluZXMgZG9uJ3Qgb3ZlcmxhcCBhdCBhbGwg
d2hlbiB3ZQorICAgIC8vIHB1dCBhIHN0cnV0IGJldHdlZW4gdGhlbSBmb3IgcGFnaW5hdGlvbiBw
dXJwb3Nlcy4gIEhvd2V2ZXIsIHRoaXMgcmVhbGx5IGlzbid0IHRoZSBkZXNpcmVkIHJlbmRlcmlu
Zywgc2luY2UKKyAgICAvLyB0aGUgbGluZSBvbiB0aGUgdG9wIG9mIHRoZSBuZXh0IHBhZ2Ugd2ls
bCBhcHBlYXIgdG9vIGZhciBkb3duIHJlbGF0aXZlIHRvIHRoZSBzYW1lIGtpbmQgb2YgbGluZSBh
dCB0aGUgdG9wCisgICAgLy8gb2YgdGhlIGZpcnN0IGNvbHVtbi4KKyAgICAvLworICAgIC8vIFRo
ZSByZW5kZXJpbmcgd2Ugd291bGQgbGlrZSB0byBzZWUgaXMgb25lIHdoZXJlIHRoZSBsaW5lVG9w
IGlzIGF0IHRoZSB0b3Agb2YgdGhlIGNvbHVtbiwgYW5kIGFueSBsaW5lIG92ZXJmbG93CisgICAg
Ly8gc2ltcGx5IHNwaWxscyBvdXQgYWJvdmUgdGhlIHRvcCBvZiB0aGUgY29sdW1uLiAgVGhpcyBl
ZmZlY3Qgd291bGQgbWF0Y2ggd2hhdCBoYXBwZW5zIGF0IHRoZSB0b3Agb2YgdGhlIGZpcnN0IGNv
bHVtbi4KKyAgICAvLyBXZSBjYW4ndCBhY2hpZXZlIHRoaXMgcmVuZGVyaW5nLCBob3dldmVyLCB1
bnRpbCB3ZSBzdG9wIGNvbHVtbnMgZnJvbSBjbGlwcGluZyB0byB0aGUgY29sdW1uIGJvdW5kcyAo
dGh1cyBhbGxvd2luZworICAgIC8vIGZvciBvdmVyZmxvdyB0byBvY2N1ciksIGFuZCB0aGVuIGNh
Y2hlIHZpc2libGUgb3ZlcmZsb3cgZm9yIGVhY2ggY29sdW1uIHJlY3QuCisgICAgLy8KKyAgICAv
LyBGdXJ0aGVybW9yZSwgdGhlIHBhaW50IHdlIGhhdmUgdG8gZG8gd2hlbiBhIGNvbHVtbiBoYXMg
b3ZlcmZsb3cgaGFzIHRvIGJlIHNwZWNpYWwuICBXZSBuZWVkIHRvIGV4Y2x1ZGUKKyAgICAvLyBj
b250ZW50IHRoYXQgcGFpbnRzIGluIGEgcHJldmlvdXMgY29sdW1uIChhbmQgY29udGVudCB0aGF0
IHBhaW50cyBpbiB0aGUgZm9sbG93aW5nIGNvbHVtbikuCisgICAgLy8KKyAgICAvLyBGSVhNRTog
QW5vdGhlciBwcm9ibGVtIHdpdGggc2ltcGx5IG1vdmluZyBsaW5lcyBpcyB0aGF0IHRoZSBhdmFp
bGFibGUgbGluZSB3aWR0aCBtYXkgY2hhbmdlIChiZWNhdXNlIG9mIGZsb2F0cykuCisgICAgLy8g
VGVjaG5pY2FsbHkgaWYgdGhlIGxvY2F0aW9uIHdlIG1vdmUgdGhlIGxpbmUgdG8gaGFzIGEgZGlm
ZmVyZW50IGxpbmUgd2lkdGggdGhhbiBvdXIgb2xkIHBvc2l0aW9uLCB0aGVuIHdlIG5lZWQgdG8g
ZGlydHkgdGhlCisgICAgLy8gbGluZSBhbmQgYWxsIGZvbGxvd2luZyBsaW5lcy4KKyAgICBMYXlv
dXRTdGF0ZSogbGF5b3V0U3RhdGUgPSB2aWV3KCktPmxheW91dFN0YXRlKCk7CisgICAgaW50IHBh
Z2VIZWlnaHQgPSBsYXlvdXRTdGF0ZS0+bV9wYWdlSGVpZ2h0OworICAgIGludCB5UG9zID0gbGlu
ZUJveC0+dG9wVmlzaWJsZU92ZXJmbG93KCk7CisgICAgaW50IGxpbmVIZWlnaHQgPSBsaW5lQm94
LT5ib3R0b21WaXNpYmxlT3ZlcmZsb3coKSAtIHlQb3M7CisgICAgaWYgKGxheW91dFN0YXRlLT5t
X2NvbHVtbkluZm8pCisgICAgICAgIGxheW91dFN0YXRlLT5tX2NvbHVtbkluZm8tPnVwZGF0ZU1p
bmltdW1Db2x1bW5IZWlnaHQobGluZUhlaWdodCk7CisgICAgeVBvcyArPSBkZWx0YTsKKyAgICBs
aW5lQm94LT5zZXRQYWdpbmF0aW9uU3RydXQoMCk7CisgICAgaWYgKCFwYWdlSGVpZ2h0IHx8IGxp
bmVIZWlnaHQgPiBwYWdlSGVpZ2h0KQorICAgICAgICByZXR1cm47CisgICAgaW50IHJlbWFpbmlu
Z0hlaWdodCA9IHBhZ2VIZWlnaHQgLSAoKGxheW91dFN0YXRlLT5tX2xheW91dE9mZnNldCAtIGxh
eW91dFN0YXRlLT5tX3BhZ2VPZmZzZXQpLmhlaWdodCgpICsgeVBvcykgJSBwYWdlSGVpZ2h0Owor
ICAgIGlmIChyZW1haW5pbmdIZWlnaHQgPCBsaW5lSGVpZ2h0KSB7CisgICAgICAgIGlmIChsaW5l
Qm94ID09IGZpcnN0Um9vdEJveCgpICYmICFpc1Bvc2l0aW9uZWQoKSAmJiAhaXNUYWJsZUNlbGwo
KSkKKyAgICAgICAgICAgIHNldFBhZ2luYXRpb25TdHJ1dChyZW1haW5pbmdIZWlnaHQgKyAoKHlQ
b3MgPiAwICYmIGxpbmVIZWlnaHQgKyB5UG9zIDw9IHBhZ2VIZWlnaHQpID8geVBvcyA6IDApKTsK
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBkZWx0YSArPSByZW1haW5pbmdIZWlnaHQ7Cisg
ICAgICAgICAgICBsaW5lQm94LT5zZXRQYWdpbmF0aW9uU3RydXQocmVtYWluaW5nSGVpZ2h0KTsK
KyAgICAgICAgfQorICAgIH0gIAorfQorIAogY29uc3QgY2hhciogUmVuZGVyQmxvY2s6OnJlbmRl
ck5hbWUoKSBjb25zdAogewogICAgIGlmIChpc0JvZHkoKSkKSW5kZXg6IFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2suaAkocmV2aXNpb24gNjY5MDMpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
ay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgQ29sdW1uSW5mbzsKIGNsYXNzIElubGluZUl0ZXJhdG9yOworY2xhc3MgTGF5b3V0
U3RhdGVNYWludGFpbmVyOwogY2xhc3MgUmVuZGVySW5saW5lOwogCiBzdHJ1Y3QgQmlkaVJ1bjsK
QEAgLTcwLDcgKzcxLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZChSZW5k
ZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gMCk7CiAgICAg
dmlydHVhbCB2b2lkIHJlbW92ZUNoaWxkKFJlbmRlck9iamVjdCopOwogCi0gICAgdmlydHVhbCB2
b2lkIGxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbik7CisgICAgdmlydHVhbCB2b2lk
IGxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgaW50IHBhZ2VIZWlnaHQgPSAwKTsK
IAogICAgIHZvaWQgaW5zZXJ0UG9zaXRpb25lZE9iamVjdChSZW5kZXJCb3gqKTsKICAgICB2b2lk
IHJlbW92ZVBvc2l0aW9uZWRPYmplY3QoUmVuZGVyQm94Kik7CkBAIC04OSw2ICs5MCw3IEBAIHB1
YmxpYzoKIAogICAgIHZvaWQgbWFya0FsbERlc2NlbmRhbnRzV2l0aEZsb2F0c0ZvckxheW91dChS
ZW5kZXJCb3gqIGZsb2F0VG9SZW1vdmUgPSAwLCBib29sIGluTGF5b3V0ID0gdHJ1ZSk7CiAgICAg
dm9pZCBtYXJrUG9zaXRpb25lZE9iamVjdHNGb3JMYXlvdXQoKTsKKyAgICB2b2lkIG1hcmtEZXNj
ZW5kYW50QmxvY2tzQW5kTGluZXNGb3JMYXlvdXQoYm9vbCBpbkxheW91dCA9IHRydWUpOwogCiAg
ICAgYm9vbCBjb250YWluc0Zsb2F0cygpIHsgcmV0dXJuIG1fZmxvYXRpbmdPYmplY3RzICYmICFt
X2Zsb2F0aW5nT2JqZWN0cy0+aXNFbXB0eSgpOyB9CiAgICAgYm9vbCBjb250YWluc0Zsb2F0KFJl
bmRlck9iamVjdCopOwpAQCAtMTUxLDYgKzE1MywxMCBAQCBwdWJsaWM6CiAKICAgICBDb2x1bW5J
bmZvKiBjb2x1bW5JbmZvKCkgY29uc3Q7CiAgICAgaW50IGNvbHVtbkdhcCgpIGNvbnN0OworICAg
IAorICAgIC8vIFRoZXNlIHR3byBmdW5jdGlvbnMgdGFrZSB0aGUgQ29sdW1uSW5mbyogdG8gYXZv
aWQgcmVwZWF0ZWQgbG9va3VwcyBvZiB0aGUgaW5mbyBpbiB0aGUgZ2xvYmFsIEhhc2hNYXAuCisg
ICAgdW5zaWduZWQgY29sdW1uQ291bnQoQ29sdW1uSW5mbyopIGNvbnN0OworICAgIEludFJlY3Qg
Y29sdW1uUmVjdEF0KENvbHVtbkluZm8qLCB1bnNpZ25lZCkgY29uc3Q7CiAKIHByb3RlY3RlZDoK
ICAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIG9ubHkgdXNlZCBpbnRlcm5hbGx5IHRvIG1hbmlw
dWxhdGUgdGhlIHJlbmRlciB0cmVlIHN0cnVjdHVyZSB2aWEgcmVtb3ZlL2luc2VydC9hcHBlbmRD
aGlsZE5vZGUuCkBAIC0xODEsOSArMTg3LDExIEBAIHByb3RlY3RlZDoKICAgICBpbnQgbWF4VG9w
TmVnTWFyZ2luKCkgY29uc3QgeyByZXR1cm4gbV9tYXhNYXJnaW4gPyBtX21heE1hcmdpbi0+bV90
b3BOZWcgOiBNYXhNYXJnaW46OnRvcE5lZ0RlZmF1bHQodGhpcyk7IH0KICAgICBpbnQgbWF4Qm90
dG9tUG9zTWFyZ2luKCkgY29uc3QgeyByZXR1cm4gbV9tYXhNYXJnaW4gPyBtX21heE1hcmdpbi0+
bV9ib3R0b21Qb3MgOiBNYXhNYXJnaW46OmJvdHRvbVBvc0RlZmF1bHQodGhpcyk7IH0KICAgICBp
bnQgbWF4Qm90dG9tTmVnTWFyZ2luKCkgY29uc3QgeyByZXR1cm4gbV9tYXhNYXJnaW4gPyBtX21h
eE1hcmdpbi0+bV9ib3R0b21OZWcgOiBNYXhNYXJnaW46OmJvdHRvbU5lZ0RlZmF1bHQodGhpcyk7
IH0KKyAgICBpbnQgcGFnaW5hdGlvblN0cnV0KCkgY29uc3QgeyByZXR1cm4gbV9tYXhNYXJnaW4g
PyBtX21heE1hcmdpbi0+bV9wYWdpbmF0aW9uU3RydXQgOiAwOyB9CiAgICAgdm9pZCBzZXRNYXhU
b3BNYXJnaW5zKGludCBwb3MsIGludCBuZWcpOwogICAgIHZvaWQgc2V0TWF4Qm90dG9tTWFyZ2lu
cyhpbnQgcG9zLCBpbnQgbmVnKTsKLSAgICAKKyAgICB2b2lkIHNldFBhZ2luYXRpb25TdHJ1dChp
bnQgc3RydXQpOworCiAgICAgdm9pZCBpbml0TWF4TWFyZ2luVmFsdWVzKCkKICAgICB7CiAgICAg
ICAgIGlmIChtX21heE1hcmdpbikgewpAQCAtMTkxLDYgKzE5OSw3IEBAIHByb3RlY3RlZDoKICAg
ICAgICAgICAgIG1fbWF4TWFyZ2luLT5tX3RvcE5lZyA9IE1heE1hcmdpbjo6dG9wTmVnRGVmYXVs
dCh0aGlzKTsKICAgICAgICAgICAgIG1fbWF4TWFyZ2luLT5tX2JvdHRvbVBvcyA9IE1heE1hcmdp
bjo6Ym90dG9tUG9zRGVmYXVsdCh0aGlzKTsKICAgICAgICAgICAgIG1fbWF4TWFyZ2luLT5tX2Jv
dHRvbU5lZyA9IE1heE1hcmdpbjo6Ym90dG9tTmVnRGVmYXVsdCh0aGlzKTsKKyAgICAgICAgICAg
IG1fbWF4TWFyZ2luLT5tX3BhZ2luYXRpb25TdHJ1dCA9IDA7CiAgICAgICAgIH0KICAgICB9CiAK
QEAgLTI5Nyw3ICszMDYsOCBAQCBwcml2YXRlOgogCiAgICAgLy8gVGhlIGZvbGxvd2luZyBmdW5j
dGlvbnMnIGltcGxlbWVudGF0aW9ucyBhcmUgaW4gUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcC4K
ICAgICBSb290SW5saW5lQm94KiBkZXRlcm1pbmVTdGFydFBvc2l0aW9uKGJvb2wmIGZpcnN0TGlu
ZSwgYm9vbCYgZnVsbExheW91dCwgYm9vbCYgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5saW5lQmlkaVJlc29sdmVy
JiwgVmVjdG9yPEZsb2F0V2l0aFJlY3Q+JiBmbG9hdHMsIHVuc2lnbmVkJiBudW1DbGVhbkZsb2F0
cyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmxpbmVCaWRp
UmVzb2x2ZXImLCBWZWN0b3I8RmxvYXRXaXRoUmVjdD4mIGZsb2F0cywgdW5zaWduZWQmIG51bUNs
ZWFuRmxvYXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCYgdXNlUmVwYWludEJvdW5kcywgaW50JiByZXBhaW50VG9wLCBpbnQmIHJlcGFpbnRCb3R0b20p
OwogICAgIFJvb3RJbmxpbmVCb3gqIGRldGVybWluZUVuZFBvc2l0aW9uKFJvb3RJbmxpbmVCb3gq
IHN0YXJ0Qm94LCBJbmxpbmVJdGVyYXRvciYgY2xlYW5MaW5lU3RhcnQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQmlkaVN0YXR1cyYgY2xlYW5MaW5lQmlkaVN0YXR1
cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIHlQb3MpOwpA
QCAtNDE2LDggKzQyNiw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBvZmZzZXRGb3JDb250ZW50cyhp
bnQmIHR4LCBpbnQmIHR5KSBjb25zdDsKIAogICAgIHZvaWQgY2FsY0NvbHVtbldpZHRoKCk7Ci0g
ICAgaW50IGxheW91dENvbHVtbnMoaW50IGVuZE9mQ29udGVudCA9IC0xLCBpbnQgcmVxdWVzdGVk
Q29sdW1uSGVpZ2h0ID0gLTEpOwotICAgIGludCB2aXNpYmxlVG9wT2ZIaWdoZXN0RmxvYXRFeHRl
bmRpbmdCZWxvdyhpbnQgYm90dG9tLCBpbnQgbWF4SGVpZ2h0KSBjb25zdDsKKyAgICBib29sIGxh
eW91dENvbHVtbnMoYm9vbCBoYXNTcGVjaWZpZWRQYWdlSGVpZ2h0LCBpbnQgcGFnZUhlaWdodCwg
TGF5b3V0U3RhdGVNYWludGFpbmVyJik7CiAgICAgdm9pZCBtYWtlQ2hpbGRyZW5Bbm9ueW1vdXND
b2x1bW5CbG9ja3MoUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCwgUmVuZGVyQmxvY2sqIG5ld0Js
b2NrQm94LCBSZW5kZXJPYmplY3QqIG5ld0NoaWxkKTsKIAogICAgIGJvb2wgZXhwYW5kc1RvRW5j
bG9zZU92ZXJoYW5naW5nRmxvYXRzKCkgY29uc3Q7CkBAIC01MzksNiArNTQ4LDEzIEBAIHByaXZh
dGU6CiAgICAgdm9pZCBzZXRDb2xsYXBzZWRCb3R0b21NYXJnaW4oY29uc3QgTWFyZ2luSW5mbyYp
OwogICAgIC8vIEVuZCBoZWxwZXIgZnVuY3Rpb25zIGFuZCBzdHJ1Y3RzIHVzZWQgYnkgbGF5b3V0
QmxvY2tDaGlsZHJlbi4KIAorICAgIC8vIFBhZ2luYXRpb24gcm91dGluZXMuCisgICAgaW50IG5l
eHRQYWdlVG9wKGludCB5UG9zKSBjb25zdDsgLy8gUmV0dXJucyB0aGUgdG9wIG9mIHRoZSBuZXh0
IHBhZ2UgZm9sbG93aW5nIHlQb3MuCisgICAgaW50IGFwcGx5QmVmb3JlQnJlYWsoUmVuZGVyQm94
KiBjaGlsZCwgaW50IHlQb3MpOyAvLyBJZiB0aGUgY2hpbGQgaGFzIGEgYmVmb3JlIGJyZWFrLCB0
aGVuIHJldHVybiBhIG5ldyB5UG9zIHRoYXQgc2hpZnRzIHRvIHRoZSB0b3Agb2YgdGhlIG5leHQg
cGFnZS9jb2x1bW4uCisgICAgaW50IGFwcGx5QWZ0ZXJCcmVhayhSZW5kZXJCb3gqIGNoaWxkLCBp
bnQgeVBvcywgTWFyZ2luSW5mbyYgbWFyZ2luSW5mbyk7IC8vIElmIHRoZSBjaGlsZCBoYXMgYW4g
YWZ0ZXIgYnJlYWssIHRoZW4gcmV0dXJuIGEgbmV3IHlQb3MgdGhhdCBzaGlmdHMgdG8gdGhlIHRv
cCBvZiB0aGUgbmV4dCBwYWdlL2NvbHVtbi4KKyAgICBpbnQgYWRqdXN0Rm9yVW5zcGxpdHRhYmxl
Q2hpbGQoUmVuZGVyQm94KiBjaGlsZCwgaW50IHlQb3MsIGJvb2wgaW5jbHVkZU1hcmdpbnMgPSBm
YWxzZSk7IC8vIElmIHRoZSBjaGlsZCBpcyB1bnNwbGl0dGFibGUgYW5kIGNhbid0IGZpdCBvbiB0
aGUgY3VycmVudCBwYWdlLCByZXR1cm4gdGhlIHRvcCBvZiB0aGUgbmV4dCBwYWdlL2NvbHVtbi4K
KyAgICB2b2lkIGFkanVzdExpbmVQb3NpdGlvbkZvclBhZ2luYXRpb24oUm9vdElubGluZUJveCos
IGludCYgZGVsdGFZKTsgLy8gQ29tcHV0ZXMgYSBkZWx0YVkgdmFsdWUgdGhhdCBwdXQgYSBsaW5l
IGF0IHRoZSB0b3Agb2YgdGhlIG5leHQgcGFnZSBpZiBpdCBkb2Vzbid0IGZpdCBvbiB0aGUgY3Vy
cmVudCBwYWdlLgorCiAgICAgdHlwZWRlZiBQb3NpdGlvbmVkT2JqZWN0c0xpc3RIYXNoU2V0Ojpj
b25zdF9pdGVyYXRvciBJdGVyYXRvcjsKICAgICBEZXByZWNhdGVkUHRyTGlzdDxGbG9hdGluZ09i
amVjdD4qIG1fZmxvYXRpbmdPYmplY3RzOwogICAgIApAQCAtNTU3LDYgKzU3Myw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAsIG1fdG9wTmVnKHRvcE5lZ0RlZmF1bHQobykpCiAgICAgICAgICAg
ICAsIG1fYm90dG9tUG9zKGJvdHRvbVBvc0RlZmF1bHQobykpCiAgICAgICAgICAgICAsIG1fYm90
dG9tTmVnKGJvdHRvbU5lZ0RlZmF1bHQobykpCisgICAgICAgICAgICAsIG1fcGFnaW5hdGlvblN0
cnV0KDApCiAgICAgICAgIHsgCiAgICAgICAgIH0KIApAQCAtNTY0LDExICs1ODEsMTIgQEAgcHJp
dmF0ZToKICAgICAgICAgc3RhdGljIGludCB0b3BOZWdEZWZhdWx0KGNvbnN0IFJlbmRlckJsb2Nr
KiBvKSB7IHJldHVybiBvLT5tYXJnaW5Ub3AoKSA8IDAgPyAtby0+bWFyZ2luVG9wKCkgOiAwOyB9
CiAgICAgICAgIHN0YXRpYyBpbnQgYm90dG9tUG9zRGVmYXVsdChjb25zdCBSZW5kZXJCbG9jayog
bykgeyByZXR1cm4gby0+bWFyZ2luQm90dG9tKCkgPiAwID8gby0+bWFyZ2luQm90dG9tKCkgOiAw
OyB9CiAgICAgICAgIHN0YXRpYyBpbnQgYm90dG9tTmVnRGVmYXVsdChjb25zdCBSZW5kZXJCbG9j
ayogbykgeyByZXR1cm4gby0+bWFyZ2luQm90dG9tKCkgPCAwID8gLW8tPm1hcmdpbkJvdHRvbSgp
IDogMDsgfQotCisgICAgICAgIAogICAgICAgICBpbnQgbV90b3BQb3M7CiAgICAgICAgIGludCBt
X3RvcE5lZzsKICAgICAgICAgaW50IG1fYm90dG9tUG9zOwogICAgICAgICBpbnQgbV9ib3R0b21O
ZWc7CisgICAgICAgIGludCBtX3BhZ2luYXRpb25TdHJ1dDsKICAgICAgfTsKIAogICAgIE1heE1h
cmdpbiogbV9tYXhNYXJnaW47CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xp
bmVMYXlvdXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2Nr
TGluZUxheW91dC5jcHAJKHJldmlzaW9uIDY2ODg2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAog
I2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdE1hcmtlci5oIgog
I2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUg
IlRyYWlsaW5nRmxvYXRzUm9vdElubGluZUJveC5oIgogI2luY2x1ZGUgImJyZWFrX2xpbmVzLmgi
CiAjaW5jbHVkZSA8d3RmL0Fsd2F5c0lubGluZS5oPgpAQCAtNTcwLDEyICs1NzEsMTEgQEAgdm9p
ZCBSZW5kZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4oYgogICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgaWYgKG8tPmlzUG9zaXRpb25lZCgpKQogICAgICAgICAgICAgICAgICAgICBv
LT5jb250YWluaW5nQmxvY2soKS0+aW5zZXJ0UG9zaXRpb25lZE9iamVjdChib3gpOwotICAgICAg
ICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAoby0+aXNGbG9hdGluZygp
KQotICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXRzLmFwcGVuZChGbG9hdFdpdGhSZWN0KGJv
eCkpOwotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChmdWxsTGF5b3V0IHx8IG8tPm5lZWRz
TGF5b3V0KCkpIC8vIFJlcGxhY2VkIGVsZW1lbnRzCi0gICAgICAgICAgICAgICAgICAgICAgICB0
b1JlbmRlckJveChvKS0+ZGlydHlMaW5lQm94ZXMoZnVsbExheW91dCk7Ci0KKyAgICAgICAgICAg
ICAgICBlbHNlIGlmIChvLT5pc0Zsb2F0aW5nKCkpCisgICAgICAgICAgICAgICAgICAgIGZsb2F0
cy5hcHBlbmQoRmxvYXRXaXRoUmVjdChib3gpKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChm
dWxsTGF5b3V0IHx8IG8tPm5lZWRzTGF5b3V0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8g
UmVwbGFjZWQgZWxlbWVudHMKKyAgICAgICAgICAgICAgICAgICAgdG9SZW5kZXJCb3gobyktPmRp
cnR5TGluZUJveGVzKGZ1bGxMYXlvdXQpOwogICAgICAgICAgICAgICAgICAgICBvLT5sYXlvdXRJ
Zk5lZWRlZCgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSBpZiAoby0+
aXNUZXh0KCkgfHwgKG8tPmlzUmVuZGVySW5saW5lKCkgJiYgIWVuZE9mSW5saW5lKSkgewpAQCAt
NTk0LDcgKzU5NCw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dElubGluZUNoaWxkcmVuKGIK
ICAgICAgICAgdW5zaWduZWQgZmxvYXRJbmRleDsKICAgICAgICAgYm9vbCBmaXJzdExpbmUgPSB0
cnVlOwogICAgICAgICBib29sIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSA9IHRydWU7Ci0gICAg
ICAgIFJvb3RJbmxpbmVCb3gqIHN0YXJ0TGluZSA9IGRldGVybWluZVN0YXJ0UG9zaXRpb24oZmly
c3RMaW5lLCBmdWxsTGF5b3V0LCBwcmV2aW91c0xpbmVCcm9rZUNsZWFubHksIHJlc29sdmVyLCBm
bG9hdHMsIGZsb2F0SW5kZXgpOworICAgICAgICBSb290SW5saW5lQm94KiBzdGFydExpbmUgPSBk
ZXRlcm1pbmVTdGFydFBvc2l0aW9uKGZpcnN0TGluZSwgZnVsbExheW91dCwgcHJldmlvdXNMaW5l
QnJva2VDbGVhbmx5LCByZXNvbHZlciwgZmxvYXRzLCBmbG9hdEluZGV4LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZVJlcGFpbnRC
b3VuZHMsIHJlcGFpbnRUb3AsIHJlcGFpbnRCb3R0b20pOwogCiAgICAgICAgIGlmIChmdWxsTGF5
b3V0ICYmIGhhc0lubGluZUNoaWxkICYmICFzZWxmTmVlZHNMYXlvdXQoKSkgewogICAgICAgICAg
ICAgc2V0TmVlZHNMYXlvdXQodHJ1ZSwgZmFsc2UpOyAgLy8gTWFyayBvdXJzZWx2ZXMgYXMgbmVl
ZGluZyBhIGZ1bGwgbGF5b3V0LiBUaGlzIHdheSB3ZSdsbCByZXBhaW50IGxpa2UKQEAgLTYyMiw5
ICs2MjMsMTEgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4oYgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA6IGRldGVybWluZUVuZFBvc2l0aW9uKHN0
YXJ0TGluZSwgY2xlYW5MaW5lU3RhcnQsIGNsZWFuTGluZUJpZGlTdGF0dXMsIGVuZExpbmVZUG9z
KTsKIAogICAgICAgICBpZiAoc3RhcnRMaW5lKSB7Ci0gICAgICAgICAgICB1c2VSZXBhaW50Qm91
bmRzID0gdHJ1ZTsKLSAgICAgICAgICAgIHJlcGFpbnRUb3AgPSBoZWlnaHQoKTsKLSAgICAgICAg
ICAgIHJlcGFpbnRCb3R0b20gPSBoZWlnaHQoKTsKKyAgICAgICAgICAgIGlmICghdXNlUmVwYWlu
dEJvdW5kcykgeworICAgICAgICAgICAgICAgIHVzZVJlcGFpbnRCb3VuZHMgPSB0cnVlOworICAg
ICAgICAgICAgICAgIHJlcGFpbnRUb3AgPSBoZWlnaHQoKTsKKyAgICAgICAgICAgICAgICByZXBh
aW50Qm90dG9tID0gaGVpZ2h0KCk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBSZW5kZXJB
cmVuYSogYXJlbmEgPSByZW5kZXJBcmVuYSgpOwogICAgICAgICAgICAgUm9vdElubGluZUJveCog
Ym94ID0gc3RhcnRMaW5lOwogICAgICAgICAgICAgd2hpbGUgKGJveCkgewpAQCAtNjU5LDYgKzY2
Miw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dElubGluZUNoaWxkcmVuKGIKICAgICAgICAg
Ym9vbCBjaGVja0ZvckZsb2F0c0Zyb21MYXN0TGluZSA9IGZhbHNlOwogCiAgICAgICAgIGJvb2wg
aXNMaW5lRW1wdHkgPSB0cnVlOworICAgICAgICBib29sIHBhZ2luYXRlZCA9IHZpZXcoKS0+bGF5
b3V0U3RhdGUoKS0+cGFnaW5hdGVkKCk7CiAKICAgICAgICAgd2hpbGUgKCFlbmQuYXRFbmQoKSkg
ewogICAgICAgICAgICAgLy8gRklYTUU6IElzIHRoaXMgY2hlY2sgbmVjZXNzYXJ5IGJlZm9yZSB0
aGUgZmlyc3QgaXRlcmF0aW9uIG9yIGNhbiBpdCBiZSBtb3ZlZCB0byB0aGUgZW5kPwpAQCAtNzg2
LDYgKzc5MCwxNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVDaGlsZHJlbihiCiAg
ICAgICAgICAgICAgICAgICAgICAgICByZXBhaW50VG9wID0gbWluKHJlcGFpbnRUb3AsIGxpbmVC
b3gtPnRvcFZpc2libGVPdmVyZmxvdygpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGFp
bnRCb3R0b20gPSBtYXgocmVwYWludEJvdHRvbSwgbGluZUJveC0+Ym90dG9tVmlzaWJsZU92ZXJm
bG93KCkpOwogICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICBpZiAocGFnaW5hdGVkKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgYWRqdXN0bWVudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBhZGp1c3RMaW5l
UG9zaXRpb25Gb3JQYWdpbmF0aW9uKGxpbmVCb3gsIGFkanVzdG1lbnQpOworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGFkanVzdG1lbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsaW5lQm94LT5hZGp1c3RQb3NpdGlvbigwLCBhZGp1c3RtZW50KTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAodXNlUmVwYWludEJvdW5kcykgLy8gVGhpcyBjYW4gb25seSBiZSBh
IHBvc2l0aXZlIGFkanVzdG1lbnQsIHNvIG5vIG5lZWQgdG8gdXBkYXRlIHJlcGFpbnRUb3AuCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGFpbnRCb3R0b20gPSBtYXgocmVwYWlu
dEJvdHRvbSwgbGluZUJveC0+Ym90dG9tVmlzaWJsZU92ZXJmbG93KCkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNldEhlaWdodChsaW5lQm94LT5ibG9ja0hlaWdodCgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIH0KIAogICAgICAgICAgICAgICAgIGZpcnN0TGluZSA9IGZhbHNlOwpAQCAtODIwLDYgKzgz
NSwxMCBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVDaGlsZHJlbihiCiAgICAgICAg
ICAgICAgICAgaW50IGRlbHRhID0gaGVpZ2h0KCkgLSBlbmRMaW5lWVBvczsKICAgICAgICAgICAg
ICAgICBmb3IgKFJvb3RJbmxpbmVCb3gqIGxpbmUgPSBlbmRMaW5lOyBsaW5lOyBsaW5lID0gbGlu
ZS0+bmV4dFJvb3RCb3goKSkgewogICAgICAgICAgICAgICAgICAgICBsaW5lLT5hdHRhY2hMaW5l
KCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChwYWdpbmF0ZWQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRlbHRhIC09IGxpbmUtPnBhZ2luYXRpb25TdHJ1dCgpOworICAgICAgICAgICAg
ICAgICAgICAgICAgYWRqdXN0TGluZVBvc2l0aW9uRm9yUGFnaW5hdGlvbihsaW5lLCBkZWx0YSk7
CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgaWYgKGRlbHRhKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICByZXBhaW50VG9wID0gbWluKHJlcGFpbnRUb3AsIGxp
bmUtPnRvcFZpc2libGVPdmVyZmxvdygpICsgbWluKGRlbHRhLCAwKSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICByZXBhaW50Qm90dG9tID0gbWF4KHJlcGFpbnRCb3R0b20sIGxpbmUtPmJvdHRv
bVZpc2libGVPdmVyZmxvdygpICsgbWF4KGRlbHRhLCAwKSk7CkBAIC05MDAsMjAgKzkxOSw0NCBA
QCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVDaGlsZHJlbihiCiB9CiAKIFJvb3RJbmxp
bmVCb3gqIFJlbmRlckJsb2NrOjpkZXRlcm1pbmVTdGFydFBvc2l0aW9uKGJvb2wmIGZpcnN0TGlu
ZSwgYm9vbCYgZnVsbExheW91dCwgYm9vbCYgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5LCAKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElubGluZUJp
ZGlSZXNvbHZlciYgcmVzb2x2ZXIsIFZlY3RvcjxGbG9hdFdpdGhSZWN0PiYgZmxvYXRzLCB1bnNp
Z25lZCYgbnVtQ2xlYW5GbG9hdHMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sdmVyLCBWZWN0b3I8Rmxv
YXRXaXRoUmVjdD4mIGZsb2F0cywgdW5zaWduZWQmIG51bUNsZWFuRmxvYXRzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCYgdXNlUmVwYWlu
dEJvdW5kcywgaW50JiByZXBhaW50VG9wLCBpbnQmIHJlcGFpbnRCb3R0b20pCiB7CiAgICAgUm9v
dElubGluZUJveCogY3VyciA9IDA7CiAgICAgUm9vdElubGluZUJveCogbGFzdCA9IDA7CiAKICAg
ICBib29sIGRpcnRpZWRCeUZsb2F0ID0gZmFsc2U7CiAgICAgaWYgKCFmdWxsTGF5b3V0KSB7Cisg
ICAgICAgIC8vIFBhZ2luYXRlIGFsbCBvZiB0aGUgY2xlYW4gbGluZXMuCisgICAgICAgIGJvb2wg
cGFnaW5hdGVkID0gdmlldygpLT5sYXlvdXRTdGF0ZSgpLT5wYWdpbmF0ZWQoKTsKKyAgICAgICAg
aW50IHBhZ2luYXRpb25EZWx0YSA9IDA7CiAgICAgICAgIHNpemVfdCBmbG9hdEluZGV4ID0gMDsK
ICAgICAgICAgZm9yIChjdXJyID0gZmlyc3RSb290Qm94KCk7IGN1cnIgJiYgIWN1cnItPmlzRGly
dHkoKTsgY3VyciA9IGN1cnItPm5leHRSb290Qm94KCkpIHsKKyAgICAgICAgICAgIGlmIChwYWdp
bmF0ZWQpIHsKKyAgICAgICAgICAgICAgICBwYWdpbmF0aW9uRGVsdGEgLT0gY3Vyci0+cGFnaW5h
dGlvblN0cnV0KCk7CisgICAgICAgICAgICAgICAgYWRqdXN0TGluZVBvc2l0aW9uRm9yUGFnaW5h
dGlvbihjdXJyLCBwYWdpbmF0aW9uRGVsdGEpOworICAgICAgICAgICAgICAgIGlmIChwYWdpbmF0
aW9uRGVsdGEpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRhaW5zRmxvYXRzKCkgfHwg
IWZsb2F0cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBE
byBiZXR0ZXIgZXZlbnR1YWxseS4gIEZvciBub3cgaWYgd2UgZXZlciBzaGlmdCBiZWNhdXNlIG9m
IHBhZ2luYXRpb24gYW5kIGZsb2F0cyBhcmUgcHJlc2VudCBqdXN0IGdvIHRvIGEgZnVsbCBsYXlv
dXQuCisgICAgICAgICAgICAgICAgICAgICAgICBmdWxsTGF5b3V0ID0gdHJ1ZTsgCisgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKCF1c2VSZXBhaW50Qm91bmRzKQor
ICAgICAgICAgICAgICAgICAgICAgICAgdXNlUmVwYWludEJvdW5kcyA9IHRydWU7CisgICAgICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgcmVwYWludFRvcCA9IG1pbihy
ZXBhaW50VG9wLCBjdXJyLT50b3BWaXNpYmxlT3ZlcmZsb3coKSArIG1pbihwYWdpbmF0aW9uRGVs
dGEsIDApKTsKKyAgICAgICAgICAgICAgICAgICAgcmVwYWludEJvdHRvbSA9IG1heChyZXBhaW50
Qm90dG9tLCBjdXJyLT5ib3R0b21WaXNpYmxlT3ZlcmZsb3coKSArIG1heChwYWdpbmF0aW9uRGVs
dGEsIDApKTsKKyAgICAgICAgICAgICAgICAgICAgY3Vyci0+YWRqdXN0UG9zaXRpb24oMCwgcGFn
aW5hdGlvbkRlbHRhKTsKKyAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoVmVjdG9yPFJlbmRlckJveCo+
KiBjbGVhbkxpbmVGbG9hdHMgPSBjdXJyLT5mbG9hdHNQdHIoKSkgewogICAgICAgICAgICAgICAg
IFZlY3RvcjxSZW5kZXJCb3gqPjo6aXRlcmF0b3IgZW5kID0gY2xlYW5MaW5lRmxvYXRzLT5lbmQo
KTsKICAgICAgICAgICAgICAgICBmb3IgKFZlY3RvcjxSZW5kZXJCb3gqPjo6aXRlcmF0b3IgbyA9
IGNsZWFuTGluZUZsb2F0cy0+YmVnaW4oKTsgbyAhPSBlbmQ7ICsrbykgewogICAgICAgICAgICAg
ICAgICAgICBSZW5kZXJCb3gqIGYgPSAqbzsKLSAgICAgICAgICAgICAgICAgICAgSW50U2l6ZSBu
ZXdTaXplKGYtPndpZHRoKCkgKyBmLT5tYXJnaW5MZWZ0KCkgK2YtPm1hcmdpblJpZ2h0KCksIGYt
PmhlaWdodCgpICsgZi0+bWFyZ2luVG9wKCkgKyBmLT5tYXJnaW5Cb3R0b20oKSk7CisgICAgICAg
ICAgICAgICAgICAgIGYtPmxheW91dElmTmVlZGVkKCk7CisgICAgICAgICAgICAgICAgICAgIElu
dFNpemUgbmV3U2l6ZShmLT53aWR0aCgpICsgZi0+bWFyZ2luTGVmdCgpICsgZi0+bWFyZ2luUmln
aHQoKSwgZi0+aGVpZ2h0KCkgKyBmLT5tYXJnaW5Ub3AoKSArIGYtPm1hcmdpbkJvdHRvbSgpKTsK
ICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGZsb2F0SW5kZXggPCBmbG9hdHMuc2l6ZSgpKTsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKGZsb2F0c1tmbG9hdEluZGV4XS5vYmplY3QgIT0gZikg
ewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gQSBuZXcgZmxvYXQgaGFzIGJlZW4gaW5zZXJ0
ZWQgYmVmb3JlIHRoaXMgbGluZSBvciBiZWZvcmUgaXRzIGxhc3Qga25vd24gZmxvYXQuCkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHJldmlzaW9uIDY2ODg2KQorKysgV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTczLDcgKzk3Myw3IEBAIHZv
aWQgUmVuZGVyQm94OjptYXBMb2NhbFRvQ29udGFpbmVyKFJlbmQKICAgICBpZiAoUmVuZGVyVmll
dyogdiA9IHZpZXcoKSkgewogICAgICAgICBpZiAodi0+bGF5b3V0U3RhdGVFbmFibGVkKCkgJiYg
IXJlcGFpbnRDb250YWluZXIpIHsKICAgICAgICAgICAgIExheW91dFN0YXRlKiBsYXlvdXRTdGF0
ZSA9IHYtPmxheW91dFN0YXRlKCk7Ci0gICAgICAgICAgICBJbnRTaXplIG9mZnNldCA9IGxheW91
dFN0YXRlLT5tX29mZnNldDsKKyAgICAgICAgICAgIEludFNpemUgb2Zmc2V0ID0gbGF5b3V0U3Rh
dGUtPm1fcGFpbnRPZmZzZXQ7CiAgICAgICAgICAgICBvZmZzZXQuZXhwYW5kKHgoKSwgeSgpKTsK
ICAgICAgICAgICAgIGlmIChzdHlsZSgpLT5wb3NpdGlvbigpID09IFJlbGF0aXZlUG9zaXRpb24g
JiYgbGF5ZXIoKSkKICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gbGF5ZXIoKS0+cmVsYXRpdmVQ
b3NpdGlvbk9mZnNldCgpOwpAQCAtMTE3MCw3ICsxMTcwLDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNv
bXB1dGVSZWN0Rm9yUmVwYWludChSZQogICAgICAgICAgICAgICAgIHJlY3QubW92ZShsYXllcigp
LT5yZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0KCkpOwogCiAgICAgICAgICAgICByZWN0Lm1vdmUoeCgp
LCB5KCkpOwotICAgICAgICAgICAgcmVjdC5tb3ZlKGxheW91dFN0YXRlLT5tX29mZnNldCk7Cisg
ICAgICAgICAgICByZWN0Lm1vdmUobGF5b3V0U3RhdGUtPm1fcGFpbnRPZmZzZXQpOwogICAgICAg
ICAgICAgaWYgKGxheW91dFN0YXRlLT5tX2NsaXBwZWQpCiAgICAgICAgICAgICAgICAgcmVjdC5p
bnRlcnNlY3QobGF5b3V0U3RhdGUtPm1fY2xpcFJlY3QpOwogICAgICAgICAgICAgcmV0dXJuOwpJ
bmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmNwcAkocmV2aXNpb24gNjY4
ODYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIwMSw3ICsyMDEsNyBAQCB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjpjYWxjUHJl
ZldpZHRocygpCiAgICAgc2V0UHJlZldpZHRoc0RpcnR5KGZhbHNlKTsKIH0KIAotdm9pZCBSZW5k
ZXJGbGV4aWJsZUJveDo6bGF5b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxkcmVuKQordm9pZCBS
ZW5kZXJGbGV4aWJsZUJveDo6bGF5b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxkcmVuLCBpbnQg
LypwYWdlSGVpZ2h0IEZJWE1FOiBJbXBsZW1lbnQgKi8pCiB7CiAgICAgQVNTRVJUKG5lZWRzTGF5
b3V0KCkpOwogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmgJKHJldmlz
aW9uIDY2ODg2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guaAkod29y
a2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjYWxjSG9yaXpv
bnRhbFByZWZXaWR0aHMoKTsKICAgICB2b2lkIGNhbGNWZXJ0aWNhbFByZWZXaWR0aHMoKTsKIAot
ICAgIHZpcnR1YWwgdm9pZCBsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4pOworICAg
IHZpcnR1YWwgdm9pZCBsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIGludCBwYWdl
SGVpZ2h0KTsKICAgICB2b2lkIGxheW91dEhvcml6b250YWxCb3goYm9vbCByZWxheW91dENoaWxk
cmVuKTsKICAgICB2b2lkIGxheW91dFZlcnRpY2FsQm94KGJvb2wgcmVsYXlvdXRDaGlsZHJlbik7
CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAkocmV2aXNpb24gNjY4ODYpCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
NDcsNyArNjQ3LDcgQEAgdm9pZCBSZW5kZXJJbmxpbmU6OmNvbXB1dGVSZWN0Rm9yUmVwYWludAog
ICAgICAgICAgICAgTGF5b3V0U3RhdGUqIGxheW91dFN0YXRlID0gdi0+bGF5b3V0U3RhdGUoKTsK
ICAgICAgICAgICAgIGlmIChzdHlsZSgpLT5wb3NpdGlvbigpID09IFJlbGF0aXZlUG9zaXRpb24g
JiYgbGF5ZXIoKSkKICAgICAgICAgICAgICAgICByZWN0Lm1vdmUobGF5ZXIoKS0+cmVsYXRpdmVQ
b3NpdGlvbk9mZnNldCgpKTsKLSAgICAgICAgICAgIHJlY3QubW92ZShsYXlvdXRTdGF0ZS0+bV9v
ZmZzZXQpOworICAgICAgICAgICAgcmVjdC5tb3ZlKGxheW91dFN0YXRlLT5tX3BhaW50T2Zmc2V0
KTsKICAgICAgICAgICAgIGlmIChsYXlvdXRTdGF0ZS0+bV9jbGlwcGVkKQogICAgICAgICAgICAg
ICAgIHJlY3QuaW50ZXJzZWN0KGxheW91dFN0YXRlLT5tX2NsaXBSZWN0KTsKICAgICAgICAgICAg
IHJldHVybjsKQEAgLTczNCw3ICs3MzQsNyBAQCB2b2lkIFJlbmRlcklubGluZTo6bWFwTG9jYWxU
b0NvbnRhaW5lcihSCiAgICAgaWYgKFJlbmRlclZpZXcgKnYgPSB2aWV3KCkpIHsKICAgICAgICAg
aWYgKHYtPmxheW91dFN0YXRlRW5hYmxlZCgpICYmICFyZXBhaW50Q29udGFpbmVyKSB7CiAgICAg
ICAgICAgICBMYXlvdXRTdGF0ZSogbGF5b3V0U3RhdGUgPSB2LT5sYXlvdXRTdGF0ZSgpOwotICAg
ICAgICAgICAgSW50U2l6ZSBvZmZzZXQgPSBsYXlvdXRTdGF0ZS0+bV9vZmZzZXQ7CisgICAgICAg
ICAgICBJbnRTaXplIG9mZnNldCA9IGxheW91dFN0YXRlLT5tX3BhaW50T2Zmc2V0OwogICAgICAg
ICAgICAgaWYgKHN0eWxlKCktPnBvc2l0aW9uKCkgPT0gUmVsYXRpdmVQb3NpdGlvbiAmJiBsYXll
cigpKQogICAgICAgICAgICAgICAgIG9mZnNldCArPSBsYXllcigpLT5yZWxhdGl2ZVBvc2l0aW9u
T2Zmc2V0KCk7CiAgICAgICAgICAgICB0cmFuc2Zvcm1TdGF0ZS5tb3ZlKG9mZnNldCk7CkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCShyZXZpc2lvbiA2NjkwMykKKysrIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU0MSwxMSArMjU0
MSwxMSBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludENoaWxkTGF5ZXJJbnRvQ29sCiAgICAgY29s
dW1uQmxvY2stPmxheWVyKCktPmNvbnZlcnRUb0xheWVyQ29vcmRzKHJvb3RMYXllciwgbGF5ZXJY
LCBsYXllclkpOwogICAgIAogICAgIENvbHVtbkluZm8qIGNvbEluZm8gPSBjb2x1bW5CbG9jay0+
Y29sdW1uSW5mbygpOwotICAgIHVuc2lnbmVkIGNvbENvdW50ID0gY29sSW5mby0+Y29sdW1uQ291
bnQoKTsKKyAgICB1bnNpZ25lZCBjb2xDb3VudCA9IGNvbHVtbkJsb2NrLT5jb2x1bW5Db3VudChj
b2xJbmZvKTsKICAgICBpbnQgY3VycllPZmZzZXQgPSAwOwogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBjb2xDb3VudDsgaSsrKSB7CiAgICAgICAgIC8vIEZvciBlYWNoIHJlY3QsIHdlIGNs
aXAgdG8gdGhlIHJlY3QsIGFuZCB0aGVuIHdlIGFkanVzdCBvdXIgY29vcmRzLgotICAgICAgICBJ
bnRSZWN0IGNvbFJlY3QgPSBjb2xJbmZvLT5jb2x1bW5SZWN0QXQoaSk7CisgICAgICAgIEludFJl
Y3QgY29sUmVjdCA9IGNvbHVtbkJsb2NrLT5jb2x1bW5SZWN0QXQoY29sSW5mbywgaSk7CiAgICAg
ICAgIGludCBjdXJyWE9mZnNldCA9IGNvbFJlY3QueCgpIC0gKGNvbHVtbkJsb2NrLT5ib3JkZXJM
ZWZ0KCkgKyBjb2x1bW5CbG9jay0+cGFkZGluZ0xlZnQoKSk7CiAgICAgICAgIGNvbFJlY3QubW92
ZShsYXllclgsIGxheWVyWSk7CiAKQEAgLTMwMDcsMTcgKzMwMDcsMTcgQEAgUmVuZGVyTGF5ZXIq
IFJlbmRlckxheWVyOjpoaXRUZXN0Q2hpbGRMYQogICAgIGNvbHVtbkJsb2NrLT5sYXllcigpLT5j
b252ZXJ0VG9MYXllckNvb3Jkcyhyb290TGF5ZXIsIGxheWVyWCwgbGF5ZXJZKTsKICAgICAKICAg
ICBDb2x1bW5JbmZvKiBjb2xJbmZvID0gY29sdW1uQmxvY2stPmNvbHVtbkluZm8oKTsKLSAgICBp
bnQgY29sQ291bnQgPSBjb2xJbmZvLT5jb2x1bW5Db3VudCgpOworICAgIGludCBjb2xDb3VudCA9
IGNvbHVtbkJsb2NrLT5jb2x1bW5Db3VudChjb2xJbmZvKTsKICAgICAKICAgICAvLyBXZSBoYXZl
IHRvIGdvIGJhY2t3YXJkcyBmcm9tIHRoZSBsYXN0IGNvbHVtbiB0byB0aGUgZmlyc3QuCiAgICAg
aW50IGxlZnQgPSBjb2x1bW5CbG9jay0+Ym9yZGVyTGVmdCgpICsgY29sdW1uQmxvY2stPnBhZGRp
bmdMZWZ0KCk7CiAgICAgaW50IGN1cnJZT2Zmc2V0ID0gMDsKICAgICBpbnQgaTsKICAgICBmb3Ig
KGkgPSAwOyBpIDwgY29sQ291bnQ7IGkrKykKLSAgICAgICAgY3VycllPZmZzZXQgLT0gY29sSW5m
by0+Y29sdW1uUmVjdEF0KGkpLmhlaWdodCgpOworICAgICAgICBjdXJyWU9mZnNldCAtPSBjb2x1
bW5CbG9jay0+Y29sdW1uUmVjdEF0KGNvbEluZm8sIGkpLmhlaWdodCgpOwogICAgIGZvciAoaSA9
IGNvbENvdW50IC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgICAgLy8gRm9yIGVhY2ggcmVjdCwg
d2UgY2xpcCB0byB0aGUgcmVjdCwgYW5kIHRoZW4gd2UgYWRqdXN0IG91ciBjb29yZHMuCi0gICAg
ICAgIEludFJlY3QgY29sUmVjdCA9IGNvbEluZm8tPmNvbHVtblJlY3RBdChpKTsKKyAgICAgICAg
SW50UmVjdCBjb2xSZWN0ID0gY29sdW1uQmxvY2stPmNvbHVtblJlY3RBdChjb2xJbmZvLCBpKTsK
ICAgICAgICAgaW50IGN1cnJYT2Zmc2V0ID0gY29sUmVjdC54KCkgLSBsZWZ0OwogICAgICAgICBj
dXJyWU9mZnNldCArPSBjb2xSZWN0LmhlaWdodCgpOwogICAgICAgICBjb2xSZWN0Lm1vdmUobGF5
ZXJYLCBsYXllclkpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmNw
cAkocmV2aXNpb24gNjY4ODYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlz
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDYgQEAKICNpbmNsdWRlICJSZW5kZXJJ
bmxpbmUuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiUm9vdElubGluZUJv
eC5oIgotI2luY2x1ZGUgIlNldHRpbmdzLmgiIC8vIEZJWE1FOiBUaGlzIGluY2x1ZGUgY2FuIGJl
IHJlbW92ZWQgd2hlbiBwYWdpbmF0ZUR1cmluZ0xheW91dEVuYWJsZWQgaXMgdGFrZW4gb3V0Lgog
CiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCkBAIC0xNjEsNyArMTYwLDcgQEAgdm9pZCBSZW5kZXJM
aW5lQm94TGlzdDo6cGFpbnQoUmVuZGVyQm94TQogICAgICAgICByZXR1cm47CiAKICAgICBSZW5k
ZXJWaWV3KiB2ID0gcmVuZGVyZXItPnZpZXcoKTsKLSAgICBib29sIHVzZVByaW50UmVjdCA9ICF2
LT5wcmludFJlY3QoKS5pc0VtcHR5KCkgJiYgIXJlbmRlcmVyLT5kb2N1bWVudCgpLT5zZXR0aW5n
cygpLT5wYWdpbmF0ZUR1cmluZ0xheW91dEVuYWJsZWQoKTsKKyAgICBib29sIHVzZVByaW50UmVj
dCA9ICF2LT5wcmludFJlY3QoKS5pc0VtcHR5KCk7CiAgICAgCiAgICAgLy8gV2UgY2FuIGNoZWNr
IHRoZSBmaXJzdCBib3ggYW5kIGxhc3QgYm94IGFuZCBhdm9pZCBwYWludGluZyBpZiB3ZSBkb24n
dAogICAgIC8vIGludGVyc2VjdC4gIFRoaXMgaXMgYSBxdWljayBzaG9ydC1jaXJjdWl0IHRoYXQg
d2UgY2FuIHRha2UgdG8gYXZvaWQgd2Fsa2luZyBhbnkgbGluZXMuCkBAIC0yMTUsNyArMjE0LDYg
QEAgdm9pZCBSZW5kZXJMaW5lQm94TGlzdDo6cGFpbnQoUmVuZGVyQm94TQogICAgICAgICBpbnQg
Ym90dG9tID0gY3Vyci0+Ym90dG9tVmlzaWJsZU92ZXJmbG93KCkgKyByZW5kZXJlci0+bWF4aW1h
bE91dGxpbmVTaXplKGluZm8ucGhhc2UpOwogICAgICAgICBoID0gYm90dG9tIC0gdG9wOwogICAg
ICAgICB5UG9zID0gdHkgKyB0b3A7Ci0gICAgICAgIHYtPnNldE1pbmltdW1Db2x1bW5IZWlnaHQo
aCk7CiAgICAgICAgIGlmICh5UG9zIDwgaW5mby5yZWN0LmJvdHRvbSgpICYmIHlQb3MgKyBoID4g
aW5mby5yZWN0LnkoKSkKICAgICAgICAgICAgIGN1cnItPnBhaW50KGluZm8sIHR4LCB0eSk7CiAg
ICAgfQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAJKHJldmlzaW9uIDY2ODg2KQorKysg
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcg
KzUyLDYgQEAgUmVuZGVyVmlldzo6UmVuZGVyVmlldyhOb2RlKiBub2RlLCBGcmFtZQogICAgICwg
bV9tYXhpbWFsT3V0bGluZVNpemUoMCkKICAgICAsIG1fYmVzdFRydW5jYXRlZEF0KDApCiAgICAg
LCBtX3RydW5jYXRvcldpZHRoKDApCi0gICAgLCBtX21pbmltdW1Db2x1bW5IZWlnaHQoMCkKICAg
ICAsIG1fZm9yY2VkUGFnZUJyZWFrKGZhbHNlKQogICAgICwgbV9sYXlvdXRTdGF0ZSgwKQogICAg
ICwgbV9sYXlvdXRTdGF0ZURpc2FibGVDb3VudCgwKQpAQCAtNjk1LDcgKzY5NCw2IEBAIHZvaWQg
UmVuZGVyVmlldzo6c2V0QmVzdFRydW5jYXRlZEF0KGludCAKIAogdm9pZCBSZW5kZXJWaWV3Ojpw
dXNoTGF5b3V0U3RhdGUoUmVuZGVyT2JqZWN0KiByb290KQogewotICAgIEFTU0VSVCghZG9pbmdG
dWxsUmVwYWludCgpKTsKICAgICBBU1NFUlQobV9sYXlvdXRTdGF0ZURpc2FibGVDb3VudCA9PSAw
KTsKICAgICBBU1NFUlQobV9sYXlvdXRTdGF0ZSA9PSAwKTsKIApJbmRleDogV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clZpZXcuaAkocmV2aXNpb24gNjY4ODYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3
LmgJKHdvcmtpbmcgY29weSkKQEAgLTgzLDEyICs4MywxMCBAQCBwdWJsaWM6CiAgICAgSW50UmVj
dCBwcmludFJlY3QoKSBjb25zdCB7IHJldHVybiBtX3ByaW50UmVjdDsgfQogICAgIHZvaWQgc2V0
UHJpbnRSZWN0KGNvbnN0IEludFJlY3QmIHIpIHsgbV9wcmludFJlY3QgPSByOyB9CiAKLSAgICB2
b2lkIHNldFRydW5jYXRlZEF0KGludCB5KSB7IG1fdHJ1bmNhdGVkQXQgPSB5OyBtX2Jlc3RUcnVu
Y2F0ZWRBdCA9IG1fdHJ1bmNhdG9yV2lkdGggPSAwOyBtX21pbmltdW1Db2x1bW5IZWlnaHQgPSAw
OyBtX2ZvcmNlZFBhZ2VCcmVhayA9IGZhbHNlOyB9CisgICAgdm9pZCBzZXRUcnVuY2F0ZWRBdChp
bnQgeSkgeyBtX3RydW5jYXRlZEF0ID0geTsgbV9iZXN0VHJ1bmNhdGVkQXQgPSBtX3RydW5jYXRv
cldpZHRoID0gMDsgbV9mb3JjZWRQYWdlQnJlYWsgPSBmYWxzZTsgfQogICAgIHZvaWQgc2V0QmVz
dFRydW5jYXRlZEF0KGludCB5LCBSZW5kZXJCb3hNb2RlbE9iamVjdCogZm9yUmVuZGVyZXIsIGJv
b2wgZm9yY2VkQnJlYWsgPSBmYWxzZSk7Ci0gICAgdm9pZCBzZXRNaW5pbXVtQ29sdW1uSGVpZ2h0
KGludCBoZWlnaHQpIHsgbV9taW5pbXVtQ29sdW1uSGVpZ2h0ID0gaGVpZ2h0OyB9CiAgICAgaW50
IGJlc3RUcnVuY2F0ZWRBdCgpIGNvbnN0IHsgcmV0dXJuIG1fYmVzdFRydW5jYXRlZEF0OyB9Ci0g
ICAgaW50IG1pbmltdW1Db2x1bW5IZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX21pbmltdW1Db2x1
bW5IZWlnaHQ7IH0KLQorICAgIAogICAgIGludCB0cnVuY2F0ZWRBdCgpIGNvbnN0IHsgcmV0dXJu
IG1fdHJ1bmNhdGVkQXQ7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVJlY3RzKFZlY3Rv
cjxJbnRSZWN0PiYsIGludCB0eCwgaW50IHR5KTsKQEAgLTEyMiwyMSArMTIwLDIwIEBAIHB1Ymxp
YzoKIAogICAgIGJvb2wgZG9pbmdGdWxsUmVwYWludCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVW
aWV3LT5uZWVkc0Z1bGxSZXBhaW50KCk7IH0KIAotICAgIHZvaWQgcHVzaExheW91dFN0YXRlKFJl
bmRlckJveCogcmVuZGVyZXIsIGNvbnN0IEludFNpemUmIG9mZnNldCkKKyAgICB2b2lkIHB1c2hM
YXlvdXRTdGF0ZShSZW5kZXJCb3gqIHJlbmRlcmVyLCBjb25zdCBJbnRTaXplJiBvZmZzZXQsIGlu
dCBwYWdlSGVpZ2h0ID0gMCwgQ29sdW1uSW5mbyogY29sSW5mbyA9IDApCiAgICAgewotICAgICAg
ICBpZiAoZG9pbmdGdWxsUmVwYWludCgpKQotICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAv
LyBXZSBwdXNoIExheW91dFN0YXRlIGV2ZW4gaWYgbGF5b3V0U3RhdGUgaXMgZGlzYWJsZWQgYmVj
YXVzZSBpdCBzdG9yZXMgbGF5b3V0RGVsdGEgdG9vLgotICAgICAgICBtX2xheW91dFN0YXRlID0g
bmV3IChyZW5kZXJBcmVuYSgpKSBMYXlvdXRTdGF0ZShtX2xheW91dFN0YXRlLCByZW5kZXJlciwg
b2Zmc2V0KTsKKyAgICAgICAgaWYgKCFkb2luZ0Z1bGxSZXBhaW50KCkgfHwgcmVuZGVyZXItPmhh
c0NvbHVtbnMoKSB8fCBtX2xheW91dFN0YXRlLT5wYWdpbmF0ZWQoKSkKKyAgICAgICAgICAgIG1f
bGF5b3V0U3RhdGUgPSBuZXcgKHJlbmRlckFyZW5hKCkpIExheW91dFN0YXRlKG1fbGF5b3V0U3Rh
dGUsIHJlbmRlcmVyLCBvZmZzZXQsIHBhZ2VIZWlnaHQsIGNvbEluZm8pOwogICAgIH0KIAogICAg
IHZvaWQgcHVzaExheW91dFN0YXRlKFJlbmRlck9iamVjdCopOwogCiAgICAgdm9pZCBwb3BMYXlv
dXRTdGF0ZSgpCiAgICAgewotICAgICAgICBpZiAoZG9pbmdGdWxsUmVwYWludCgpKQotICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICBMYXlvdXRTdGF0ZSogc3RhdGUgPSBtX2xheW91dFN0YXRl
OworICAgICAgICBpZiAoZG9pbmdGdWxsUmVwYWludCgpICYmICFtX2xheW91dFN0YXRlLT5wYWdp
bmF0ZWQoKSkKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgbV9sYXlvdXRTdGF0ZSA9IHN0
YXRlLT5tX25leHQ7CiAgICAgICAgIHN0YXRlLT5kZXN0cm95KHJlbmRlckFyZW5hKCkpOwogICAg
IH0KQEAgLTE5OCw3ICsxOTUsNiBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIGludCBtX2Jl
c3RUcnVuY2F0ZWRBdDsKICAgICBpbnQgbV90cnVuY2F0b3JXaWR0aDsKLSAgICBpbnQgbV9taW5p
bXVtQ29sdW1uSGVpZ2h0OwogICAgIGJvb2wgbV9mb3JjZWRQYWdlQnJlYWs7CiAgICAgTGF5b3V0
U3RhdGUqIG1fbGF5b3V0U3RhdGU7CiAgICAgdW5zaWduZWQgbV9sYXlvdXRTdGF0ZURpc2FibGVD
b3VudDsKQEAgLTIyNywxMyArMjIzLDEzIEBAIHZvaWQgdG9SZW5kZXJWaWV3KGNvbnN0IFJlbmRl
clZpZXcqKTsKIGNsYXNzIExheW91dFN0YXRlTWFpbnRhaW5lciA6IHB1YmxpYyBOb25jb3B5YWJs
ZSB7CiBwdWJsaWM6CiAgICAgLy8gY3RvciB0byBwdXNoIG5vdwotICAgIExheW91dFN0YXRlTWFp
bnRhaW5lcihSZW5kZXJWaWV3KiB2aWV3LCBSZW5kZXJCb3gqIHJvb3QsIEludFNpemUgb2Zmc2V0
LCBib29sIGRpc2FibGVTdGF0ZSA9IGZhbHNlKQorICAgIExheW91dFN0YXRlTWFpbnRhaW5lcihS
ZW5kZXJWaWV3KiB2aWV3LCBSZW5kZXJCb3gqIHJvb3QsIEludFNpemUgb2Zmc2V0LCBib29sIGRp
c2FibGVTdGF0ZSA9IGZhbHNlLCBpbnQgcGFnZUhlaWdodCA9IDAsIENvbHVtbkluZm8qIGNvbElu
Zm8gPSAwKQogICAgICAgICA6IG1fdmlldyh2aWV3KQogICAgICAgICAsIG1fZGlzYWJsZWQoZGlz
YWJsZVN0YXRlKQogICAgICAgICAsIG1fZGlkU3RhcnQoZmFsc2UpCiAgICAgICAgICwgbV9kaWRF
bmQoZmFsc2UpCiAgICAgewotICAgICAgICBwdXNoKHJvb3QsIG9mZnNldCk7CisgICAgICAgIHB1
c2gocm9vdCwgb2Zmc2V0LCBwYWdlSGVpZ2h0LCBjb2xJbmZvKTsKICAgICB9CiAgICAgCiAgICAg
Ly8gY3RvciB0byBtYXliZSBwdXNoIGxhdGVyCkBAIC0yNTAsMTEgKzI0NiwxMSBAQCBwdWJsaWM6
CiAgICAgICAgIEFTU0VSVChtX2RpZFN0YXJ0ID09IG1fZGlkRW5kKTsgICAvLyBpZiB0aGlzIGZp
cmVzLCBpdCBtZWFucyB0aGF0IHNvbWVvbmUgZGlkIGEgcHVzaCgpLCBidXQgZm9yZ290IHRvIHBv
cCgpLgogICAgIH0KIAotICAgIHZvaWQgcHVzaChSZW5kZXJCb3gqIHJvb3QsIEludFNpemUgb2Zm
c2V0KQorICAgIHZvaWQgcHVzaChSZW5kZXJCb3gqIHJvb3QsIEludFNpemUgb2Zmc2V0LCBpbnQg
cGFnZUhlaWdodCA9IDAsIENvbHVtbkluZm8qIGNvbEluZm8gPSAwKQogICAgIHsKICAgICAgICAg
QVNTRVJUKCFtX2RpZFN0YXJ0KTsKICAgICAgICAgLy8gV2UgcHVzaCBzdGF0ZSBldmVuIGlmIGRp
c2FibGVkLCBiZWNhdXNlIHdlIHN0aWxsIG5lZWQgdG8gc3RvcmUgbGF5b3V0RGVsdGEKLSAgICAg
ICAgbV92aWV3LT5wdXNoTGF5b3V0U3RhdGUocm9vdCwgb2Zmc2V0KTsKKyAgICAgICAgbV92aWV3
LT5wdXNoTGF5b3V0U3RhdGUocm9vdCwgb2Zmc2V0LCBwYWdlSGVpZ2h0LCBjb2xJbmZvKTsKICAg
ICAgICAgaWYgKG1fZGlzYWJsZWQpCiAgICAgICAgICAgICBtX3ZpZXctPmRpc2FibGVMYXlvdXRT
dGF0ZSgpOwogICAgICAgICBtX2RpZFN0YXJ0ID0gdHJ1ZTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVy
aW5nL1Jvb3RJbmxpbmVCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9Sb290
SW5saW5lQm94LmgJKHJldmlzaW9uIDY2ODg2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElu
bGluZUJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBAIHB1YmxpYzoKICAgICAg
ICAgLCBtX2xpbmVCcmVha1BvcygwKQogICAgICAgICAsIG1fbGluZVRvcCgwKQogICAgICAgICAs
IG1fbGluZUJvdHRvbSgwKQorICAgICAgICAsIG1fcGFnaW5hdGlvblN0cnV0KDApCiAgICAgewog
ICAgIH0KIApAQCAtNTcsNiArNTgsOSBAQCBwdWJsaWM6CiAgICAgaW50IGxpbmVUb3AoKSBjb25z
dCB7IHJldHVybiBtX2xpbmVUb3A7IH0KICAgICBpbnQgbGluZUJvdHRvbSgpIGNvbnN0IHsgcmV0
dXJuIG1fbGluZUJvdHRvbTsgfQogCisgICAgaW50IHBhZ2luYXRpb25TdHJ1dCgpIGNvbnN0IHsg
cmV0dXJuIG1fcGFnaW5hdGlvblN0cnV0OyB9CisgICAgdm9pZCBzZXRQYWdpbmF0aW9uU3RydXQo
aW50IHMpIHsgbV9wYWdpbmF0aW9uU3RydXQgPSBzOyB9CisKICAgICBpbnQgc2VsZWN0aW9uVG9w
KCkgY29uc3Q7CiAgICAgaW50IHNlbGVjdGlvbkJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIGxpbmVC
b3R0b20oKTsgfQogICAgIGludCBzZWxlY3Rpb25IZWlnaHQoKSBjb25zdCB7IHJldHVybiBtYXgo
MCwgc2VsZWN0aW9uQm90dG9tKCkgLSBzZWxlY3Rpb25Ub3AoKSk7IH0KQEAgLTE0MSw2ICsxNDUs
OCBAQCBwcml2YXRlOgogICAgIGludCBtX2xpbmVUb3A7CiAgICAgaW50IG1fbGluZUJvdHRvbTsK
IAorICAgIGludCBtX3BhZ2luYXRpb25TdHJ1dDsKKwogICAgIC8vIEZsb2F0cyBoYW5naW5nIG9m
ZiB0aGUgbGluZSBhcmUgcHVzaGVkIGludG8gdGhpcyB2ZWN0b3IgZHVyaW5nIGxheW91dC4gSXQg
aXMgb25seQogICAgIC8vIGdvb2QgZm9yIGFzIGxvbmcgYXMgdGhlIGxpbmUgaGFzIG5vdCBiZWVu
IG1hcmtlZCBkaXJ0eS4KICAgICBPd25QdHI8VmVjdG9yPFJlbmRlckJveCo+ID4gbV9mbG9hdHM7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67448</attachid>
            <date>2010-09-13 12:11:40 -0700</date>
            <delta_ts>2010-09-14 11:57:25 -0700</delta_ts>
            <desc>Improve dirtying when objects in a pagination context move</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>80447</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL0NvbHVtbkluZm8uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9Db2x1bW5JbmZvLmgJKHJldmlzaW9uIDY2OTAzKQorKysgV2ViQ29yZS9y
ZW5kZXJpbmcvQ29sdW1uSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw5IEBAIHB1
YmxpYzoKICAgICBDb2x1bW5JbmZvKCkKICAgICAgICAgOiBtX2Rlc2lyZWRDb2x1bW5XaWR0aCgw
KQogICAgICAgICAsIG1fZGVzaXJlZENvbHVtbkNvdW50KDEpCisgICAgICAgICwgbV9jb2x1bW5D
b3VudCgxKQorICAgICAgICAsIG1fY29sdW1uSGVpZ2h0KDApCisgICAgICAgICwgbV9taW5pbXVt
Q29sdW1uSGVpZ2h0KDApCiAgICAgICAgIHsgfQogICAgIAogICAgIGludCBkZXNpcmVkQ29sdW1u
V2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2Rlc2lyZWRDb2x1bW5XaWR0aDsgfQpAQCAtNDQsMTkg
KzQ3LDI4IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBkZXNpcmVkQ29sdW1uQ291bnQoKSBjb25z
dCB7IHJldHVybiBtX2Rlc2lyZWRDb2x1bW5Db3VudDsgfQogICAgIHZvaWQgc2V0RGVzaXJlZENv
bHVtbkNvdW50KHVuc2lnbmVkIGNvdW50KSB7IG1fZGVzaXJlZENvbHVtbkNvdW50ID0gY291bnQ7
IH0KIAotICAgIC8vIEVuY2Fwc3VsYXRlZCBmb3IgdGhlIGZ1dHVyZSB3aGVyZSB3ZSBjYW4gYXZv
aWQgc3RvcmluZyB0aGUgcmVjdHMgYW5kIGp1c3QgY29tcHV0ZSB0aGVtIGR5bmFtaWNhbGx5Lgot
ICAgIHNpemVfdCBjb2x1bW5Db3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fY29sdW1uUmVjdHMuc2l6
ZSgpOyB9Ci0gICAgY29uc3QgSW50UmVjdCYgY29sdW1uUmVjdEF0KHNpemVfdCBpKSBjb25zdCB7
IHJldHVybiBtX2NvbHVtblJlY3RzW2ldOyB9CisgICAgdW5zaWduZWQgY29sdW1uQ291bnQoKSBj
b25zdCB7IHJldHVybiBtX2NvbHVtbkNvdW50OyB9CisgICAgaW50IGNvbHVtbkhlaWdodCgpIGNv
bnN0IHsgcmV0dXJuIG1fY29sdW1uSGVpZ2h0OyB9CiAKLSAgICB2b2lkIGNsZWFyQ29sdW1ucygp
IHsgbV9jb2x1bW5SZWN0cy5jbGVhcigpOyB9CisgICAgLy8gU2V0IG91ciBjb3VudCBhbmQgaGVp
Z2h0LiAgVGhpcyBpcyBlbm91Z2ggaW5mbyBmb3IgYSBSZW5kZXJCbG9jayB0byBjb21wdXRlIHBh
Z2UgcmVjdHMKKyAgICAvLyBkeW5hbWljYWxseS4KKyAgICB2b2lkIHNldENvbHVtbkNvdW50QW5k
SGVpZ2h0KGludCBjLCBpbnQgaCkKKyAgICB7IAorICAgICAgICBtX2NvbHVtbkNvdW50ID0gYzsK
KyAgICAgICAgbV9jb2x1bW5IZWlnaHQgPSBoOworICAgIH0KKyAgICB2b2lkIHNldENvbHVtbkhl
aWdodChpbnQgaCkgeyBtX2NvbHVtbkhlaWdodCA9IGg7IH0KKworICAgIHZvaWQgdXBkYXRlTWlu
aW11bUNvbHVtbkhlaWdodChpbnQgaCkgeyBtX21pbmltdW1Db2x1bW5IZWlnaHQgPSBtYXgoaCwg
bV9taW5pbXVtQ29sdW1uSGVpZ2h0KTsgfQorICAgIGludCBtaW5pbXVtQ29sdW1uSGVpZ2h0KCkg
Y29uc3QgeyByZXR1cm4gbV9taW5pbXVtQ29sdW1uSGVpZ2h0OyB9CiAKLSAgICAvLyBGSVhNRTog
V2lsbCBnbyBhd2F5IG9uY2Ugd2UgZG9uJ3QgdXNlIHRoZSBWZWN0b3IuCi0gICAgdm9pZCBhZGRD
b2x1bW5SZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpIHsgbV9jb2x1bW5SZWN0cy5hcHBlbmQocmVj
dCk7IH0KLSAgICAKIHByaXZhdGU6CiAgICAgaW50IG1fZGVzaXJlZENvbHVtbldpZHRoOwogICAg
IHVuc2lnbmVkIG1fZGVzaXJlZENvbHVtbkNvdW50OwotICAgIFZlY3RvcjxJbnRSZWN0PiBtX2Nv
bHVtblJlY3RzOworICAgIAorICAgIHVuc2lnbmVkIG1fY29sdW1uQ291bnQ7CisgICAgaW50IG1f
Y29sdW1uSGVpZ2h0OworICAgIGludCBtX21pbmltdW1Db2x1bW5IZWlnaHQ7CiB9OwogCiB9Cklu
ZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvTGF5b3V0U3RhdGUuY3BwCShyZXZpc2lvbiA2Njg4NikKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsOCArMzMs
OSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUxheW91dFN0YXRlOjpMYXlvdXRTdGF0ZShM
YXlvdXRTdGF0ZSogcHJldiwgUmVuZGVyQm94KiByZW5kZXJlciwgY29uc3QgSW50U2l6ZSYgb2Zm
c2V0KQotICAgIDogbV9uZXh0KHByZXYpCitMYXlvdXRTdGF0ZTo6TGF5b3V0U3RhdGUoTGF5b3V0
U3RhdGUqIHByZXYsIFJlbmRlckJveCogcmVuZGVyZXIsIGNvbnN0IEludFNpemUmIG9mZnNldCwg
aW50IHBhZ2VIZWlnaHQsIENvbHVtbkluZm8qIGNvbEluZm8pCisgICAgOiBtX2NvbHVtbkluZm8o
Y29sSW5mbykKKyAgICAsIG1fbmV4dChwcmV2KQogI2lmbmRlZiBOREVCVUcKICAgICAsIG1fcmVu
ZGVyZXIocmVuZGVyZXIpCiAjZW5kaWYKQEAgLTQ1LDQzICs0Niw2NyBAQCBMYXlvdXRTdGF0ZTo6
TGF5b3V0U3RhdGUoTGF5b3V0U3RhdGUqIHByCiAgICAgaWYgKGZpeGVkKSB7CiAgICAgICAgIC8v
IEZJWE1FOiBUaGlzIGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgd2l0aCB0cmFuc2Zvcm1zLgogICAg
ICAgICBGbG9hdFBvaW50IGZpeGVkT2Zmc2V0ID0gcmVuZGVyZXItPnZpZXcoKS0+bG9jYWxUb0Fi
c29sdXRlKEZsb2F0UG9pbnQoKSwgdHJ1ZSk7Ci0gICAgICAgIG1fb2Zmc2V0ID0gSW50U2l6ZShm
aXhlZE9mZnNldC54KCksIGZpeGVkT2Zmc2V0LnkoKSkgKyBvZmZzZXQ7CisgICAgICAgIG1fcGFp
bnRPZmZzZXQgPSBJbnRTaXplKGZpeGVkT2Zmc2V0LngoKSwgZml4ZWRPZmZzZXQueSgpKSArIG9m
ZnNldDsKICAgICB9IGVsc2UKLSAgICAgICAgbV9vZmZzZXQgPSBwcmV2LT5tX29mZnNldCArIG9m
ZnNldDsKKyAgICAgICAgbV9wYWludE9mZnNldCA9IHByZXYtPm1fcGFpbnRPZmZzZXQgKyBvZmZz
ZXQ7CiAKLSAgICBpZiAocmVuZGVyZXItPmlzUmVsUG9zaXRpb25lZCgpKSB7Ci0gICAgICAgIGlm
IChyZW5kZXJlci0+aGFzTGF5ZXIoKSkKLSAgICAgICAgICAgIG1fb2Zmc2V0ICs9IHJlbmRlcmVy
LT5sYXllcigpLT5yZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0KCk7Ci0gICAgfSBlbHNlIGlmIChyZW5k
ZXJlci0+aXNQb3NpdGlvbmVkKCkgJiYgIWZpeGVkKSB7CisgICAgaWYgKHJlbmRlcmVyLT5pc1Bv
c2l0aW9uZWQoKSAmJiAhZml4ZWQpIHsKICAgICAgICAgaWYgKFJlbmRlck9iamVjdCogY29udGFp
bmVyID0gcmVuZGVyZXItPmNvbnRhaW5lcigpKSB7CiAgICAgICAgICAgICBpZiAoY29udGFpbmVy
LT5pc1JlbFBvc2l0aW9uZWQoKSAmJiBjb250YWluZXItPmlzUmVuZGVySW5saW5lKCkpCi0gICAg
ICAgICAgICAgICAgbV9vZmZzZXQgKz0gdG9SZW5kZXJJbmxpbmUoY29udGFpbmVyKS0+cmVsYXRp
dmVQb3NpdGlvbmVkSW5saW5lT2Zmc2V0KHJlbmRlcmVyKTsKKyAgICAgICAgICAgICAgICBtX3Bh
aW50T2Zmc2V0ICs9IHRvUmVuZGVySW5saW5lKGNvbnRhaW5lciktPnJlbGF0aXZlUG9zaXRpb25l
ZElubGluZU9mZnNldChyZW5kZXJlcik7CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBtX2xheW91
dE9mZnNldCA9IG1fcGFpbnRPZmZzZXQ7CisKKyAgICBpZiAocmVuZGVyZXItPmlzUmVsUG9zaXRp
b25lZCgpICYmIHJlbmRlcmVyLT5oYXNMYXllcigpKQorICAgICAgICBtX3BhaW50T2Zmc2V0ICs9
IHJlbmRlcmVyLT5sYXllcigpLT5yZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0KCk7CisKICAgICBtX2Ns
aXBwZWQgPSAhZml4ZWQgJiYgcHJldi0+bV9jbGlwcGVkOwogICAgIGlmIChtX2NsaXBwZWQpCiAg
ICAgICAgIG1fY2xpcFJlY3QgPSBwcmV2LT5tX2NsaXBSZWN0OwogCiAgICAgaWYgKHJlbmRlcmVy
LT5oYXNPdmVyZmxvd0NsaXAoKSkgewogICAgICAgICBSZW5kZXJMYXllciogbGF5ZXIgPSByZW5k
ZXJlci0+bGF5ZXIoKTsKLSAgICAgICAgSW50UmVjdCBjbGlwUmVjdCh0b1BvaW50KG1fb2Zmc2V0
KSArIHJlbmRlcmVyLT52aWV3KCktPmxheW91dERlbHRhKCksIGxheWVyLT5zaXplKCkpOworICAg
ICAgICBJbnRSZWN0IGNsaXBSZWN0KHRvUG9pbnQobV9wYWludE9mZnNldCkgKyByZW5kZXJlci0+
dmlldygpLT5sYXlvdXREZWx0YSgpLCBsYXllci0+c2l6ZSgpKTsKICAgICAgICAgaWYgKG1fY2xp
cHBlZCkKICAgICAgICAgICAgIG1fY2xpcFJlY3QuaW50ZXJzZWN0KGNsaXBSZWN0KTsKICAgICAg
ICAgZWxzZSB7CiAgICAgICAgICAgICBtX2NsaXBSZWN0ID0gY2xpcFJlY3Q7CiAgICAgICAgICAg
ICBtX2NsaXBwZWQgPSB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIG1fb2Zmc2V0IC09IGxheWVy
LT5zY3JvbGxlZENvbnRlbnRPZmZzZXQoKTsKKworICAgICAgICBtX3BhaW50T2Zmc2V0IC09IGxh
eWVyLT5zY3JvbGxlZENvbnRlbnRPZmZzZXQoKTsKICAgICB9CiAKLSAgICBtX2xheW91dERlbHRh
ID0gbV9uZXh0LT5tX2xheW91dERlbHRhOworICAgIC8vIERpc2FibGUgcGFnaW5hdGlvbiBmb3Ig
b2JqZWN0cyB3ZSBkb24ndCBzdXBwb3J0LiAgRm9yIG5vdyB0aGlzIGluY2x1ZGVzIG92ZXJmbG93
OnNjcm9sbC9hdXRvIGFuZCBpbmxpbmUgYmxvY2tzLgorICAgIGlmIChyZW5kZXJlci0+aXNSZXBs
YWNlZCgpIHx8IHJlbmRlcmVyLT5zY3JvbGxzT3ZlcmZsb3coKSkKKyAgICAgICAgbV9wYWdlSGVp
Z2h0ID0gMDsKKworICAgIC8vIElmIHdlIGVzdGFibGlzaCBhIG5ldyBwYWdlIGhlaWdodCwgdGhl
biBjYWNoZSB0aGUgb2Zmc2V0IHRvIHRoZSB0b3Agb2YgdGhlIGZpcnN0IHBhZ2UuCisgICAgLy8g
V2UgY2FuIGNvbXBhcmUgdGhpcyBsYXRlciBvbiB0byBmaWd1cmUgb3V0IHdoYXQgcGFydCBvZiB0
aGUgcGFnZSB3ZSdyZSBhY3R1YWxseSBvbiwKKyAgICBpZiAocGFnZUhlaWdodCkgeworICAgICAg
ICBtX3BhZ2VIZWlnaHQgPSBwYWdlSGVpZ2h0OworICAgICAgICBtX3BhZ2VPZmZzZXQgPSBJbnRT
aXplKG1fcGFpbnRPZmZzZXQud2lkdGgoKSArIHJlbmRlcmVyLT5ib3JkZXJMZWZ0KCkgKyByZW5k
ZXJlci0+cGFkZGluZ0xlZnQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3Bh
aW50T2Zmc2V0LmhlaWdodCgpICsgcmVuZGVyZXItPmJvcmRlclRvcCgpICsgcmVuZGVyZXItPnBh
ZGRpbmdUb3AoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gSWYgd2UgZG9uJ3QgZXN0YWJs
aXNoIGEgbmV3IHBhZ2UgaGVpZ2h0LCB0aGVuIHByb3BhZ2F0ZSB0aGUgb2xkIHBhZ2UgaGVpZ2h0
IGFuZCBvZmZzZXQgZG93bi4KKyAgICAgICAgbV9wYWdlSGVpZ2h0ID0gbV9uZXh0LT5tX3BhZ2VI
ZWlnaHQ7CisgICAgICAgIG1fcGFnZU9mZnNldCA9IG1fbmV4dC0+bV9wYWdlT2Zmc2V0OworICAg
IH0KKyAgICAKKyAgICBpZiAoIW1fY29sdW1uSW5mbykKKyAgICAgICAgbV9jb2x1bW5JbmZvID0g
bV9uZXh0LT5tX2NvbHVtbkluZm87CiAKKyAgICBtX2xheW91dERlbHRhID0gbV9uZXh0LT5tX2xh
eW91dERlbHRhOworICAgIAogICAgIC8vIEZJWE1FOiA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTM0NDM+IEFwcGx5IGNvbnRyb2wgY2xpcCBpZiBwcmVzZW50LgogfQog
CiBMYXlvdXRTdGF0ZTo6TGF5b3V0U3RhdGUoUmVuZGVyT2JqZWN0KiByb290KQogICAgIDogbV9j
bGlwcGVkKGZhbHNlKQorICAgICwgbV9wYWdlSGVpZ2h0KDApCisgICAgLCBtX2NvbHVtbkluZm8o
MCkKICAgICAsIG1fbmV4dCgwKQogI2lmbmRlZiBOREVCVUcKICAgICAsIG1fcmVuZGVyZXIocm9v
dCkKQEAgLTg5LDEzICsxMTQsMTMgQEAgTGF5b3V0U3RhdGU6OkxheW91dFN0YXRlKFJlbmRlck9i
amVjdCogcgogewogICAgIFJlbmRlck9iamVjdCogY29udGFpbmVyID0gcm9vdC0+Y29udGFpbmVy
KCk7CiAgICAgRmxvYXRQb2ludCBhYnNDb250ZW50UG9pbnQgPSBjb250YWluZXItPmxvY2FsVG9B
YnNvbHV0ZShGbG9hdFBvaW50KCksIGZhbHNlLCB0cnVlKTsKLSAgICBtX29mZnNldCA9IEludFNp
emUoYWJzQ29udGVudFBvaW50LngoKSwgYWJzQ29udGVudFBvaW50LnkoKSk7CisgICAgbV9wYWlu
dE9mZnNldCA9IEludFNpemUoYWJzQ29udGVudFBvaW50LngoKSwgYWJzQ29udGVudFBvaW50Lnko
KSk7CiAKICAgICBpZiAoY29udGFpbmVyLT5oYXNPdmVyZmxvd0NsaXAoKSkgewogICAgICAgICBS
ZW5kZXJMYXllciogbGF5ZXIgPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KGNvbnRhaW5lciktPmxh
eWVyKCk7CiAgICAgICAgIG1fY2xpcHBlZCA9IHRydWU7Ci0gICAgICAgIG1fY2xpcFJlY3QgPSBJ
bnRSZWN0KHRvUG9pbnQobV9vZmZzZXQpLCBsYXllci0+c2l6ZSgpKTsKLSAgICAgICAgbV9vZmZz
ZXQgLT0gbGF5ZXItPnNjcm9sbGVkQ29udGVudE9mZnNldCgpOworICAgICAgICBtX2NsaXBSZWN0
ID0gSW50UmVjdCh0b1BvaW50KG1fcGFpbnRPZmZzZXQpLCBsYXllci0+c2l6ZSgpKTsKKyAgICAg
ICAgbV9wYWludE9mZnNldCAtPSBsYXllci0+c2Nyb2xsZWRDb250ZW50T2Zmc2V0KCk7CiAgICAg
fQogfQogCkBAIC0xMjYsNCArMTUxLDE5IEBAIHZvaWQgTGF5b3V0U3RhdGU6Om9wZXJhdG9yIGRl
bGV0ZSh2b2lkKiAKICAgICAqKHNpemVfdCopcHRyID0gc3o7CiB9CiAKK3ZvaWQgTGF5b3V0U3Rh
dGU6OmNsZWFyUGFnaW5hdGlvbkluZm9ybWF0aW9uKCkKK3sKKyAgICBtX3BhZ2VIZWlnaHQgPSBt
X25leHQtPm1fcGFnZUhlaWdodDsKKyAgICBtX3BhZ2VPZmZzZXQgPSBtX25leHQtPm1fcGFnZU9m
ZnNldDsKKyAgICBtX2NvbHVtbkluZm8gPSBtX25leHQtPm1fY29sdW1uSW5mbzsKK30KKworaW50
IExheW91dFN0YXRlOjpwYWdlWShpbnQgY2hpbGRZKSBjb25zdAoreworICAgIEFTU0VSVChtX3Bh
Z2VIZWlnaHQpOworICAgIGludCBsYXlvdXRZID0gbV9sYXlvdXRPZmZzZXQuaGVpZ2h0KCkgKyBj
aGlsZFk7CisgICAgaW50IHBhZ2VZID0gbV9wYWdlT2Zmc2V0LmhlaWdodCgpOworICAgIHJldHVy
biBsYXlvdXRZIC0gcGFnZVk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdl
YkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5k
ZXJpbmcvTGF5b3V0U3RhdGUuaAkocmV2aXNpb24gNjY4ODYpCisrKyBXZWJDb3JlL3JlbmRlcmlu
Zy9MYXlvdXRTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ29sdW1uSW5mbzsKIGNsYXNzIFJlbmRlckFyZW5hOwog
Y2xhc3MgUmVuZGVyQm94OwogY2xhc3MgUmVuZGVyT2JqZWN0OwpAQCAtNDAsNiArNDEsOCBAQCBj
bGFzcyBMYXlvdXRTdGF0ZSA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiBwdWJsaWM6CiAgICAgTGF5
b3V0U3RhdGUoKQogICAgICAgICA6IG1fY2xpcHBlZChmYWxzZSkKKyAgICAgICAgLCBtX3BhZ2VI
ZWlnaHQoMCkKKyAgICAgICAgLCBtX2NvbHVtbkluZm8oMCkKICAgICAgICAgLCBtX25leHQoMCkK
ICNpZm5kZWYgTkRFQlVHCiAgICAgICAgICwgbV9yZW5kZXJlcigwKQpAQCAtNDcsNyArNTAsNyBA
QCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIExheW91dFN0YXRlKExheW91dFN0YXRlKiwg
UmVuZGVyQm94KiwgY29uc3QgSW50U2l6ZSYgb2Zmc2V0KTsKKyAgICBMYXlvdXRTdGF0ZShMYXlv
dXRTdGF0ZSosIFJlbmRlckJveCosIGNvbnN0IEludFNpemUmIG9mZnNldCwgaW50IHBhZ2VIZWln
aHQsIENvbHVtbkluZm8qKTsKICAgICBMYXlvdXRTdGF0ZShSZW5kZXJPYmplY3QqKTsKIAogICAg
IHZvaWQgZGVzdHJveShSZW5kZXJBcmVuYSopOwpAQCAtNTgsNiArNjEsMTEgQEAgcHVibGljOgog
ICAgIC8vIE92ZXJyaWRkZW4gdG8gcHJldmVudCB0aGUgbm9ybWFsIGRlbGV0ZSBmcm9tIGJlaW5n
IGNhbGxlZC4KICAgICB2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkKiwgc2l6ZV90KTsKIAorICAg
IHZvaWQgY2xlYXJQYWdpbmF0aW9uSW5mb3JtYXRpb24oKTsKKyAgICBib29sIHBhZ2luYXRpbmdD
b2x1bW5zKCkgY29uc3QgeyByZXR1cm4gbV9jb2x1bW5JbmZvOyB9CisgICAgYm9vbCBwYWdpbmF0
ZWQoKSBjb25zdCB7IHJldHVybiBtX3BhZ2VIZWlnaHQgfHwgbV9jb2x1bW5JbmZvOyB9CisgICAg
aW50IHBhZ2VZKGludCBjaGlsZFkpIGNvbnN0OworCiBwcml2YXRlOgogICAgIC8vIFRoZSBub3Jt
YWwgb3BlcmF0b3IgbmV3IGlzIGRpc2FsbG93ZWQuCiAgICAgdm9pZCogb3BlcmF0b3IgbmV3KHNp
emVfdCkgdGhyb3coKTsKQEAgLTY1LDEwICs3MywxNiBAQCBwcml2YXRlOgogcHVibGljOgogICAg
IGJvb2wgbV9jbGlwcGVkOwogICAgIEludFJlY3QgbV9jbGlwUmVjdDsKLSAgICBJbnRTaXplIG1f
b2Zmc2V0OyAgICAgICAvLyB4L3kgb2Zmc2V0IGZyb20gY29udGFpbmVyLgorICAgIEludFNpemUg
bV9wYWludE9mZnNldDsgICAgICAgLy8geC95IG9mZnNldCBmcm9tIGNvbnRhaW5lci4gIEluY2x1
ZGVzIHJlbGF0aXZlIHBvc2l0aW9uaW5nIGFuZCBzY3JvbGwgb2Zmc2V0cy4KKyAgICBJbnRTaXpl
IG1fbGF5b3V0T2Zmc2V0OyAgICAgIC8vIHgveSBvZmZzZXQgZnJvbSBjb250YWluZXIuICBEb2Vz
IG5vdCBpbmNsdWRlIHJlbGF0aXZlIHBvc2l0aW9uaW5nIG9yIHNjcm9sbCBvZmZzZXRzLgogICAg
IEludFNpemUgbV9sYXlvdXREZWx0YTsgIC8vIFRyYW5zaWVudCBvZmZzZXQgZnJvbSB0aGUgZmlu
YWwgcG9zaXRpb24gb2YgdGhlIG9iamVjdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IHVzZWQgdG8gZW5zdXJlIHRoYXQgcmVwYWludHMgaGFwcGVuIGluIHRoZSBjb3JyZWN0IHBsYWNl
LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSB0b3RhbCBkZWx0YSBh
Y2N1bXVsYXRlZCBmcm9tIHRoZSByb290LgorCisgICAgaW50IG1fcGFnZUhlaWdodDsgICAgICAg
ICAgICAvLyBUaGUgY3VycmVudCBwYWdlIGhlaWdodCBmb3IgdGhlIHBhZ2luYXRpb24gbW9kZWwg
dGhhdCBlbmNsb3NlcyB1cy4KKyAgICBJbnRTaXplIG1fcGFnZU9mZnNldDsgICAgICAgIC8vIFRo
ZSBvZmZzZXQgb2YgdGhlIHN0YXJ0IG9mIHRoZSBmaXJzdCBwYWdlIGluIHRoZSBuZWFyZXN0IGVu
Y2xvc2luZyBwYWdpbmF0aW9uIG1vZGVsLgorICAgIENvbHVtbkluZm8qIG1fY29sdW1uSW5mbzsg
ICAgLy8gSWYgdGhlIGVuY2xvc2luZyBwYWdpbmF0aW9uIG1vZGVsIGlzIGEgY29sdW1uIG1vZGVs
LCB0aGVuIHRoaXMgd2lsbCBzdG9yZSBjb2x1bW4gaW5mb3JtYXRpb24gZm9yIGVhc3kgcmV0cmll
dmFsL21hbmlwdWxhdGlvbi4KKwogICAgIExheW91dFN0YXRlKiBtX25leHQ7CiAjaWZuZGVmIE5E
RUJVRwogICAgIFJlbmRlck9iamVjdCogbV9yZW5kZXJlcjsKSW5kZXg6IFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9jay5jcHAJKHJldmlzaW9uIDY2OTAzKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsNyArMTE0LDcgQEAgUmVuZGVyQmxvY2s6
OlJlbmRlckJsb2NrKE5vZGUqIG5vZGUpCiAgICAgICAsIG1fZmxvYXRpbmdPYmplY3RzKDApCiAg
ICAgICAsIG1fcG9zaXRpb25lZE9iamVjdHMoMCkKICAgICAgICwgbV9jb250aW51YXRpb24oMCkK
LSAgICAgICwgbV9tYXhNYXJnaW4oMCkKKyAgICAgICwgbV9yYXJlRGF0YSgwKQogICAgICAgLCBt
X2xpbmVIZWlnaHQoLTEpCiB7CiAgICAgc2V0Q2hpbGRyZW5JbmxpbmUodHJ1ZSk7CkBAIC0xMjQs
NyArMTI0LDcgQEAgUmVuZGVyQmxvY2s6On5SZW5kZXJCbG9jaygpCiB7CiAgICAgZGVsZXRlIG1f
ZmxvYXRpbmdPYmplY3RzOwogICAgIGRlbGV0ZSBtX3Bvc2l0aW9uZWRPYmplY3RzOwotICAgIGRl
bGV0ZSBtX21heE1hcmdpbjsKKyAgICBkZWxldGUgbV9yYXJlRGF0YTsKICAgICAKICAgICBpZiAo
aGFzQ29sdW1ucygpKQogICAgICAgICBkZWxldGUgZ0NvbHVtbkluZm9NYXAtPnRha2UodGhpcyk7
CkBAIC0xMTEyLDcgKzExMTIsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXQoKQogICAgICAg
ICBjbGVhckxheW91dE92ZXJmbG93KCk7CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJs
b2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbikKK3ZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2Nr
KGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgaW50IHBhZ2VIZWlnaHQpCiB7CiAgICAgQVNTRVJUKG5l
ZWRzTGF5b3V0KCkpOwogCkBAIC0xMTIyLDkgKzExMjIsNiBAQCB2b2lkIFJlbmRlckJsb2NrOjps
YXlvdXRCbG9jayhib29sIHJlbGF5CiAgICAgaWYgKCFyZWxheW91dENoaWxkcmVuICYmIGxheW91
dE9ubHlQb3NpdGlvbmVkT2JqZWN0cygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBMYXlvdXRS
ZXBhaW50ZXIgcmVwYWludGVyKCp0aGlzLCBtX2V2ZXJIYWRMYXlvdXQgJiYgY2hlY2tGb3JSZXBh
aW50RHVyaW5nTGF5b3V0KCkpOwotICAgIExheW91dFN0YXRlTWFpbnRhaW5lciBzdGF0ZVB1c2hl
cih2aWV3KCksIHRoaXMsIEludFNpemUoeCgpLCB5KCkpLCBoYXNDb2x1bW5zKCkgfHwgaGFzVHJh
bnNmb3JtKCkgfHwgaGFzUmVmbGVjdGlvbigpKTsKLQogICAgIGludCBvbGRXaWR0aCA9IHdpZHRo
KCk7CiAgICAgaW50IG9sZENvbHVtbldpZHRoID0gZGVzaXJlZENvbHVtbldpZHRoKCk7CiAKQEAg
LTExNDAsNiArMTEzNywyOCBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayhib29sIHJl
bGF5CiAKICAgICBpbnQgcHJldmlvdXNIZWlnaHQgPSBoZWlnaHQoKTsKICAgICBzZXRIZWlnaHQo
MCk7CisgICAgYm9vbCBoYXNTcGVjaWZpZWRQYWdlSGVpZ2h0ID0gZmFsc2U7CisgICAgQ29sdW1u
SW5mbyogY29sSW5mbyA9IGNvbHVtbkluZm8oKTsKKyAgICBpZiAoaGFzQ29sdW1ucygpKSB7Cisg
ICAgICAgIGlmICghcGFnZUhlaWdodCkgeworICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBnbyBh
aGVhZCBhbmQgc2V0IG91ciBleHBsaWNpdCBwYWdlIGhlaWdodCBpZiBvbmUgZXhpc3RzLCBzbyB0
aGF0IHdlIGNhbgorICAgICAgICAgICAgLy8gYXZvaWQgZG9pbmcgdHdvIGxheW91dCBwYXNzZXMu
CisgICAgICAgICAgICBjYWxjSGVpZ2h0KCk7CisgICAgICAgICAgICBpbnQgY29sdW1uSGVpZ2h0
ID0gY29udGVudEhlaWdodCgpOworICAgICAgICAgICAgaWYgKGNvbHVtbkhlaWdodCA+IDApIHsK
KyAgICAgICAgICAgICAgICBwYWdlSGVpZ2h0ID0gY29sdW1uSGVpZ2h0OworICAgICAgICAgICAg
ICAgIGhhc1NwZWNpZmllZFBhZ2VIZWlnaHQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgc2V0SGVpZ2h0KDApOworICAgICAgICB9CisgICAgICAgIGlmIChjb2xJbmZvLT5jb2x1
bW5IZWlnaHQoKSAhPSBwYWdlSGVpZ2h0ICYmIG1fZXZlckhhZExheW91dCkgeworICAgICAgICAg
ICAgY29sSW5mby0+c2V0Q29sdW1uSGVpZ2h0KHBhZ2VIZWlnaHQpOworICAgICAgICAgICAgbWFy
a0Rlc2NlbmRhbnRCbG9ja3NBbmRMaW5lc0ZvckxheW91dCgpOyAvLyBXZSBuZWVkIHRvIGRpcnR5
IGFsbCBkZXNjZW5kYW50IGJsb2NrcyBhbmQgbGluZXMsIHNpbmNlIHRoZSBjb2x1bW4gaGVpZ2h0
IGlzIGRpZmZlcmVudCBub3cuCisgICAgICAgIH0KKyAgICB9CisKKyAgICBMYXlvdXRSZXBhaW50
ZXIgcmVwYWludGVyKCp0aGlzLCBtX2V2ZXJIYWRMYXlvdXQgJiYgY2hlY2tGb3JSZXBhaW50RHVy
aW5nTGF5b3V0KCkpOworICAgIExheW91dFN0YXRlTWFpbnRhaW5lciBzdGF0ZVB1c2hlcih2aWV3
KCksIHRoaXMsIEludFNpemUoeCgpLCB5KCkpLCBoYXNDb2x1bW5zKCkgfHwgaGFzVHJhbnNmb3Jt
KCkgfHwgaGFzUmVmbGVjdGlvbigpLCBwYWdlSGVpZ2h0LCBjb2xJbmZvKTsKIAogICAgIC8vIFdl
IHVzZSBmb3VyIHZhbHVlcywgbWF4VG9wUG9zLCBtYXhUb3BOZWcsIG1heEJvdHRvbVBvcywgYW5k
IG1heEJvdHRvbU5lZywgdG8gdHJhY2sKICAgICAvLyBvdXIgY3VycmVudCBtYXhpbWFsIHBvc2l0
aXZlIGFuZCBuZWdhdGl2ZSBtYXJnaW5zLiAgVGhlc2UgdmFsdWVzIGFyZSB1c2VkIHdoZW4gd2UK
QEAgLTExODksMTAgKzEyMDgsOSBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayhib29s
IHJlbGF5CiAgICAgaWYgKGZsb2F0Qm90dG9tKCkgPiAoaGVpZ2h0KCkgLSB0b0FkZCkgJiYgZXhw
YW5kc1RvRW5jbG9zZU92ZXJoYW5naW5nRmxvYXRzKCkpCiAgICAgICAgIHNldEhlaWdodChmbG9h
dEJvdHRvbSgpICsgdG9BZGQpOwogICAgIAotICAgIC8vIE5vdyBsYXkgb3V0IG91ciBjb2x1bW5z
IHdpdGhpbiB0aGlzIGludHJpbnNpYyBoZWlnaHQsIHNpbmNlIHRoZXkgY2FuIHNsaWdodGx5IGFm
ZmVjdCB0aGUgaW50cmluc2ljIGhlaWdodCBhcwotICAgIC8vIHdlIGFkanVzdCBmb3IgY2xlYW4g
Y29sdW1uIGJyZWFrcy4KLSAgICBpbnQgc2luZ2xlQ29sdW1uQm90dG9tID0gbGF5b3V0Q29sdW1u
cygpOwotCisgICAgaWYgKGxheW91dENvbHVtbnMoaGFzU3BlY2lmaWVkUGFnZUhlaWdodCwgcGFn
ZUhlaWdodCwgc3RhdGVQdXNoZXIpKQorICAgICAgICByZXR1cm47CisgCiAgICAgLy8gQ2FsY3Vs
YXRlIG91ciBuZXcgaGVpZ2h0LgogICAgIGludCBvbGRIZWlnaHQgPSBoZWlnaHQoKTsKICAgICBj
YWxjSGVpZ2h0KCk7CkBAIC0xMjA3LDIxICsxMjI1LDE4IEBAIHZvaWQgUmVuZGVyQmxvY2s6Omxh
eW91dEJsb2NrKGJvb2wgcmVsYXkKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIFdlIGhhdmUgdG8gcmViYWxhbmNlIGNvbHVt
bnMgdG8gdGhlIG5ldyBoZWlnaHQuCi0gICAgICAgIGxheW91dENvbHVtbnMoc2luZ2xlQ29sdW1u
Qm90dG9tKTsKICAgICB9CiAKICAgICBpZiAocHJldmlvdXNIZWlnaHQgIT0gaGVpZ2h0KCkpCiAg
ICAgICAgIHJlbGF5b3V0Q2hpbGRyZW4gPSB0cnVlOwogCi0gICAgLy8gVGhpcyBjaGVjayBpcyBk
ZXNpZ25lZCB0byBjYXRjaCBhbnlvbmUKLSAgICAvLyB3aG8gd2Fzbid0IGdvaW5nIHRvIHByb3Bh
Z2F0ZSBmbG9hdCBpbmZvcm1hdGlvbiB1cCB0byB0aGUgcGFyZW50IGFuZCB5ZXQgY291bGQgcG90
ZW50aWFsbHkgYmUgcGFpbnRlZCBieSBpdHMgYW5jZXN0b3IuCi0gICAgaWYgKGlzUm9vdCgpIHx8
IGV4cGFuZHNUb0VuY2xvc2VPdmVyaGFuZ2luZ0Zsb2F0cygpKQotICAgICAgICBhZGRPdmVyZmxv
d0Zyb21GbG9hdHMoKTsKLQogICAgIC8vIEFkZCBvdmVyZmxvdyBmcm9tIGNoaWxkcmVuICh1bmxl
c3Mgd2UncmUgbXVsdGktY29sdW1uLCBzaW5jZSBpbiB0aGF0IGNhc2UgYWxsIG91ciBjaGlsZCBv
dmVyZmxvdyBpcyBjbGlwcGVkIGFueXdheSkuCiAgICAgaWYgKCFoYXNDb2x1bW5zKCkpIHsKKyAg
ICAgICAgLy8gVGhpcyBjaGVjayBpcyBkZXNpZ25lZCB0byBjYXRjaCBhbnlvbmUKKyAgICAgICAg
Ly8gd2hvIHdhc24ndCBnb2luZyB0byBwcm9wYWdhdGUgZmxvYXQgaW5mb3JtYXRpb24gdXAgdG8g
dGhlIHBhcmVudCBhbmQgeWV0IGNvdWxkIHBvdGVudGlhbGx5IGJlIHBhaW50ZWQgYnkgaXRzIGFu
Y2VzdG9yLgorICAgICAgICBpZiAoaXNSb290KCkgfHwgZXhwYW5kc1RvRW5jbG9zZU92ZXJoYW5n
aW5nRmxvYXRzKCkpCisgICAgICAgICAgICBhZGRPdmVyZmxvd0Zyb21GbG9hdHMoKTsKKwogICAg
ICAgICBpZiAoY2hpbGRyZW5JbmxpbmUoKSkKICAgICAgICAgICAgIGFkZE92ZXJmbG93RnJvbUlu
bGluZUNoaWxkcmVuKCk7CiAgICAgICAgIGVsc2UKQEAgLTEyMzcsNiArMTI1Miw5IEBAIHZvaWQg
UmVuZGVyQmxvY2s6OmxheW91dEJsb2NrKGJvb2wgcmVsYXkKICAgICAKICAgICBzdGF0ZVB1c2hl
ci5wb3AoKTsKIAorICAgIGlmICh2aWV3KCktPmxheW91dFN0YXRlKCktPm1fcGFnZUhlaWdodCkK
KyAgICAgICAgc2V0UGFnZVkodmlldygpLT5sYXlvdXRTdGF0ZSgpLT5wYWdlWSh5KCkpKTsKKwog
ICAgIC8vIFVwZGF0ZSBvdXIgc2Nyb2xsIGluZm9ybWF0aW9uIGlmIHdlJ3JlIG92ZXJmbG93OmF1
dG8vc2Nyb2xsL2hpZGRlbiBub3cgdGhhdCB3ZSBrbm93IGlmCiAgICAgLy8gd2Ugb3ZlcmZsb3cg
b3Igbm90LgogICAgIHVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgpOwpAQCAtMTQ4NSw3ICsx
NTAzLDggQEAgaW50IFJlbmRlckJsb2NrOjpjb2xsYXBzZU1hcmdpbnMoUmVuZGVyQgogICAgIGlm
IChtYXJnaW5JbmZvLnF1aXJrQ29udGFpbmVyKCkgJiYgbWFyZ2luSW5mby5hdFRvcE9mQmxvY2so
KSAmJiAocG9zVG9wIC0gbmVnVG9wKSkKICAgICAgICAgbWFyZ2luSW5mby5zZXRUb3BRdWlyayh0
b3BRdWlyayk7CiAKLSAgICBpbnQgeXBvcyA9IGhlaWdodCgpOworICAgIGludCBiZWZvcmVDb2xs
YXBzZVkgPSBoZWlnaHQoKTsKKyAgICBpbnQgeXBvcyA9IGJlZm9yZUNvbGxhcHNlWTsKICAgICBp
ZiAoY2hpbGQtPmlzU2VsZkNvbGxhcHNpbmdCbG9jaygpKSB7CiAgICAgICAgIC8vIFRoaXMgY2hp
bGQgaGFzIG5vIGhlaWdodC4gIFdlIG5lZWQgdG8gY29tcHV0ZSBvdXIKICAgICAgICAgLy8gcG9z
aXRpb24gYmVmb3JlIHdlIGNvbGxhcHNlIHRoZSBjaGlsZCdzIG1hcmdpbnMgdG9nZXRoZXIsCkBA
IC0xNTI3LDYgKzE1NDYsMTQgQEAgaW50IFJlbmRlckJsb2NrOjpjb2xsYXBzZU1hcmdpbnMoUmVu
ZGVyQgogICAgICAgICAgICAgbWFyZ2luSW5mby5zZXRCb3R0b21RdWlyayhjaGlsZC0+aXNCb3R0
b21NYXJnaW5RdWlyaygpIHx8IHN0eWxlKCktPm1hcmdpbkJvdHRvbUNvbGxhcHNlKCkgPT0gTURJ
U0NBUkQpOwogICAgIH0KICAgICAKKyAgICAvLyBJZiBtYXJnaW5zIHdvdWxkIHB1bGwgdXMgcGFz
dCB0aGUgdG9wIG9mIHRoZSBuZXh0IHBhZ2UsIHRoZW4gd2UgbmVlZCB0byBwdWxsIGJhY2sgYW5k
IHByZXRlbmQgbGlrZSB0aGUgbWFyZ2lucworICAgIC8vIGNvbGxhcHNlZCBpbnRvIHRoZSBwYWdl
IGVkZ2UuCisgICAgYm9vbCBwYWdpbmF0ZWQgPSB2aWV3KCktPmxheW91dFN0YXRlKCktPnBhZ2lu
YXRlZCgpOworICAgIGlmIChwYWdpbmF0ZWQgJiYgeXBvcyA+IGJlZm9yZUNvbGxhcHNlWSkgewor
ICAgICAgICBpbnQgb2xkWSA9IHlwb3M7CisgICAgICAgIHlwb3MgPSBtaW4oeXBvcywgbmV4dFBh
Z2VUb3AoYmVmb3JlQ29sbGFwc2VZKSk7CisgICAgICAgIHNldEhlaWdodChoZWlnaHQoKSArICh5
cG9zIC0gb2xkWSkpOworICAgIH0KICAgICByZXR1cm4geXBvczsKIH0KIApAQCAtMTU4Niw3ICsx
NjEzLDI0IEBAIGludCBSZW5kZXJCbG9jazo6ZXN0aW1hdGVWZXJ0aWNhbFBvc2l0aW8KICAgICAg
ICAgaW50IGNoaWxkTWFyZ2luVG9wID0gY2hpbGQtPnNlbGZOZWVkc0xheW91dCgpID8gY2hpbGQt
Pm1hcmdpblRvcCgpIDogY2hpbGQtPmNvbGxhcHNlZE1hcmdpblRvcCgpOwogICAgICAgICB5UG9z
RXN0aW1hdGUgKz0gbWF4KG1hcmdpbkluZm8ubWFyZ2luKCksIGNoaWxkTWFyZ2luVG9wKTsKICAg
ICB9CisgICAgCisgICAgYm9vbCBwYWdpbmF0ZWQgPSB2aWV3KCktPmxheW91dFN0YXRlKCktPnBh
Z2luYXRlZCgpOworCisgICAgLy8gQWRqdXN0IHlQb3NFc3RpbWF0ZSBkb3duIHRvIHRoZSBuZXh0
IHBhZ2UgaWYgdGhlIG1hcmdpbnMgYXJlIHNvIGxhcmdlIHRoYXQgd2UgZG9uJ3QgZml0IG9uIHRo
ZSBjdXJyZW50CisgICAgLy8gcGFnZS4KKyAgICBpZiAocGFnaW5hdGVkICYmIHlQb3NFc3RpbWF0
ZSA+IGhlaWdodCgpKQorICAgICAgICB5UG9zRXN0aW1hdGUgPSBtaW4oeVBvc0VzdGltYXRlLCBu
ZXh0UGFnZVRvcChoZWlnaHQoKSkpOworCiAgICAgeVBvc0VzdGltYXRlICs9IGdldENsZWFyRGVs
dGEoY2hpbGQsIHlQb3NFc3RpbWF0ZSk7CisgICAgCisgICAgaWYgKHBhZ2luYXRlZCkgeworICAg
ICAgICAvLyBJZiB0aGUgb2JqZWN0IGhhcyBhIHBhZ2Ugb3IgY29sdW1uIGJyZWFrIHZhbHVlIG9m
ICJiZWZvcmUiLCB0aGVuIHdlIHNob3VsZCBzaGlmdCB0byB0aGUgdG9wIG9mIHRoZSBuZXh0IHBh
Z2UuCisgICAgICAgIHlQb3NFc3RpbWF0ZSA9IGFwcGx5QmVmb3JlQnJlYWsoY2hpbGQsIHlQb3NF
c3RpbWF0ZSk7CisgICAgCisgICAgICAgIC8vIEZvciByZXBsYWNlZCBlbGVtZW50cyBhbmQgc2Ny
b2xsZWQgZWxlbWVudHMsIHdlIHdhbnQgdG8gc2hpZnQgdGhlbSB0byB0aGUgbmV4dCBwYWdlIGlm
IHRoZXkgZG9uJ3QgZml0IG9uIHRoZSBjdXJyZW50IG9uZS4KKyAgICAgICAgeVBvc0VzdGltYXRl
ID0gYWRqdXN0Rm9yVW5zcGxpdHRhYmxlQ2hpbGQoY2hpbGQsIHlQb3NFc3RpbWF0ZSk7CisgICAg
fQorCiAgICAgcmV0dXJuIHlQb3NFc3RpbWF0ZTsKIH0KIApAQCAtMTc3Niw4ICsxODIwLDkgQEAg
dm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2tDaGlsZChSZW5kZQogICAgIHZpZXcoKS0+YWRk
TGF5b3V0RGVsdGEoSW50U2l6ZSgwLCBjaGlsZC0+eSgpIC0geVBvc0VzdGltYXRlKSk7CiAgICAg
Y2hpbGQtPnNldExvY2F0aW9uKGNoaWxkLT54KCksIHlQb3NFc3RpbWF0ZSk7CiAKKyAgICBSZW5k
ZXJCbG9jayogY2hpbGRCbG9ja0Zsb3cgPSBjaGlsZC0+aXNCbG9ja0Zsb3coKSA/IHRvUmVuZGVy
QmxvY2soY2hpbGQpIDogMDsKICAgICBib29sIG1hcmtEZXNjZW5kYW50c1dpdGhGbG9hdHMgPSBm
YWxzZTsKLSAgICBpZiAoeVBvc0VzdGltYXRlICE9IG9sZFJlY3QueSgpICYmICFjaGlsZC0+YXZv
aWRzRmxvYXRzKCkgJiYgY2hpbGQtPmlzQmxvY2tGbG93KCkgJiYgdG9SZW5kZXJCbG9jayhjaGls
ZCktPmNvbnRhaW5zRmxvYXRzKCkpCisgICAgaWYgKHlQb3NFc3RpbWF0ZSAhPSBvbGRSZWN0Lnko
KSAmJiAhY2hpbGQtPmF2b2lkc0Zsb2F0cygpICYmIGNoaWxkQmxvY2tGbG93ICYmIGNoaWxkQmxv
Y2tGbG93LT5jb250YWluc0Zsb2F0cygpKQogICAgICAgICBtYXJrRGVzY2VuZGFudHNXaXRoRmxv
YXRzID0gdHJ1ZTsKICAgICBlbHNlIGlmICghY2hpbGQtPmF2b2lkc0Zsb2F0cygpIHx8IGNoaWxk
LT5zaHJpbmtUb0F2b2lkRmxvYXRzKCkpIHsKICAgICAgICAgLy8gSWYgYW4gZWxlbWVudCBtaWdo
dCBiZSBhZmZlY3RlZCBieSB0aGUgcHJlc2VuY2Ugb2YgZmxvYXRzLCB0aGVuIGFsd2F5cyBtYXJr
IGl0IGZvcgpAQCAtMTc4NywxOCArMTgzMiwyNCBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRC
bG9ja0NoaWxkKFJlbmRlCiAgICAgICAgICAgICBtYXJrRGVzY2VuZGFudHNXaXRoRmxvYXRzID0g
dHJ1ZTsKICAgICB9CiAKLSAgICBpZiAoY2hpbGQtPmlzUmVuZGVyQmxvY2soKSkgeworICAgIGlm
IChjaGlsZEJsb2NrRmxvdykgewogICAgICAgICBpZiAobWFya0Rlc2NlbmRhbnRzV2l0aEZsb2F0
cykKLSAgICAgICAgICAgIHRvUmVuZGVyQmxvY2soY2hpbGQpLT5tYXJrQWxsRGVzY2VuZGFudHNX
aXRoRmxvYXRzRm9yTGF5b3V0KCk7Ci0KKyAgICAgICAgICAgIGNoaWxkQmxvY2tGbG93LT5tYXJr
QWxsRGVzY2VuZGFudHNXaXRoRmxvYXRzRm9yTGF5b3V0KCk7CiAgICAgICAgIHByZXZpb3VzRmxv
YXRCb3R0b20gPSBtYXgocHJldmlvdXNGbG9hdEJvdHRvbSwgb2xkUmVjdC55KCkgKyB0b1JlbmRl
ckJsb2NrKGNoaWxkKS0+ZmxvYXRCb3R0b20oKSk7CiAgICAgfQogCisgICAgYm9vbCBwYWdpbmF0
ZWQgPSB2aWV3KCktPmxheW91dFN0YXRlKCktPnBhZ2luYXRlZCgpOworICAgIGlmIChwYWdpbmF0
ZWQgJiYgdmlldygpLT5sYXlvdXRTdGF0ZSgpLT5tX3BhZ2VIZWlnaHQgJiYgY2hpbGRCbG9ja0Zs
b3cgJiYgdmlldygpLT5sYXlvdXRTdGF0ZSgpLT5wYWdlWShjaGlsZC0+eSgpKSAhPSBjaGlsZEJs
b2NrRmxvdy0+cGFnZVkoKSkKKyAgICAgICAgY2hpbGRCbG9ja0Zsb3ctPnNldENoaWxkTmVlZHNM
YXlvdXQodHJ1ZSwgZmFsc2UpOworCiAgICAgYm9vbCBjaGlsZEhhZExheW91dCA9IGNoaWxkLT5t
X2V2ZXJIYWRMYXlvdXQ7CiAgICAgYm9vbCBjaGlsZE5lZWRlZExheW91dCA9IGNoaWxkLT5uZWVk
c0xheW91dCgpOwogICAgIGlmIChjaGlsZE5lZWRlZExheW91dCkKICAgICAgICAgY2hpbGQtPmxh
eW91dCgpOwogCisgICAgLy8gQ2FjaGUgaWYgd2UgYXJlIGF0IHRoZSB0b3Agb2YgdGhlIGJsb2Nr
IHJpZ2h0IG5vdy4KKyAgICBib29sIGF0VG9wT2ZCbG9jayA9IG1hcmdpbkluZm8uYXRUb3BPZkJs
b2NrKCk7CisKICAgICAvLyBOb3cgZGV0ZXJtaW5lIHRoZSBjb3JyZWN0IHlwb3MgYmFzZWQgb2Zm
IGV4YW1pbmF0aW9uIG9mIGNvbGxhcHNpbmcgbWFyZ2luCiAgICAgLy8gdmFsdWVzLgogICAgIGlu
dCB5QmVmb3JlQ2xlYXIgPSBjb2xsYXBzZU1hcmdpbnMoY2hpbGQsIG1hcmdpbkluZm8pOwpAQCAt
MTgwNiw2ICsxODU3LDMxIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrQ2hpbGQoUmVu
ZGUKICAgICAvLyBOb3cgY2hlY2sgZm9yIGNsZWFyLgogICAgIGludCB5QWZ0ZXJDbGVhciA9IGNs
ZWFyRmxvYXRzSWZOZWVkZWQoY2hpbGQsIG1hcmdpbkluZm8sIG9sZFRvcFBvc01hcmdpbiwgb2xk
VG9wTmVnTWFyZ2luLCB5QmVmb3JlQ2xlYXIpOwogICAgIAorICAgIGlmIChwYWdpbmF0ZWQpIHsK
KyAgICAgICAgaW50IG9sZFkgPSB5QWZ0ZXJDbGVhcjsKKyAgICAgICAgCisgICAgICAgIC8vIElm
IHRoZSBvYmplY3QgaGFzIGEgcGFnZSBvciBjb2x1bW4gYnJlYWsgdmFsdWUgb2YgImJlZm9yZSIs
IHRoZW4gd2Ugc2hvdWxkIHNoaWZ0IHRvIHRoZSB0b3Agb2YgdGhlIG5leHQgcGFnZS4KKyAgICAg
ICAgeUFmdGVyQ2xlYXIgPSBhcHBseUJlZm9yZUJyZWFrKGNoaWxkLCB5QWZ0ZXJDbGVhcik7Cisg
ICAgCisgICAgICAgIC8vIEZvciByZXBsYWNlZCBlbGVtZW50cyBhbmQgc2Nyb2xsZWQgZWxlbWVu
dHMsIHdlIHdhbnQgdG8gc2hpZnQgdGhlbSB0byB0aGUgbmV4dCBwYWdlIGlmIHRoZXkgZG9uJ3Qg
Zml0IG9uIHRoZSBjdXJyZW50IG9uZS4KKyAgICAgICAgeUFmdGVyQ2xlYXIgPSBhZGp1c3RGb3JV
bnNwbGl0dGFibGVDaGlsZChjaGlsZCwgeUFmdGVyQ2xlYXIpOworICAgICAgICAKKyAgICAgICAg
aWYgKGNoaWxkQmxvY2tGbG93LT5wYWdpbmF0aW9uU3RydXQoKSkgeworICAgICAgICAgICAgLy8g
V2UgYXJlIHdpbGxpbmcgdG8gcHJvcGFnYXRlIG91dCB0byBvdXIgcGFyZW50IGJsb2NrIGFzIGxv
bmcgYXMgd2Ugd2VyZSBhdCB0aGUgdG9wIG9mIHRoZSBibG9jayBwcmlvcgorICAgICAgICAgICAg
Ly8gdG8gY29sbGFwc2luZyBvdXIgbWFyZ2lucywgYW5kIGFzIGxvbmcgYXMgd2UgZGlkbid0IGNs
ZWFyIG9yIG1vdmUgYXMgYSByZXN1bHQgb2Ygb3RoZXIgcGFnaW5hdGlvbi4KKyAgICAgICAgICAg
IGlmIChhdFRvcE9mQmxvY2sgJiYgb2xkWSA9PSB5QmVmb3JlQ2xlYXIgJiYgIWlzUG9zaXRpb25l
ZCgpICYmICFpc1RhYmxlQ2VsbCgpKQorICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQg
cmVhbGx5IGNoZWNrIGlmIHdlJ3JlIGV4Y2VlZGluZyB0aGUgcGFnZSBoZWlnaHQgYmVmb3JlIHBy
b3BhZ2F0aW5nIHRoZSBzdHJ1dCwgYnV0IHdlIGRvbid0CisgICAgICAgICAgICAgICAgLy8gaGF2
ZSBhbGwgdGhlIGluZm9ybWF0aW9uIHRvIGRvIHNvICh0aGUgc3RydXQgb25seSBoYXMgdGhlIHJl
bWFpbmluZyBhbW91bnQgdG8gcHVzaCkuICBHZWNrbyBnZXRzIHRoaXMgd3JvbmcgdG9vCisgICAg
ICAgICAgICAgICAgLy8gYW5kIHB1c2hlcyB0byB0aGUgbmV4dCBwYWdlIGFueXdheSwgc28gbm90
IHRvbyBjb25jZXJuZWQgYWJvdXQgaXQuCisgICAgICAgICAgICAgICAgc2V0UGFnaW5hdGlvblN0
cnV0KHlBZnRlckNsZWFyICsgY2hpbGRCbG9ja0Zsb3ctPnBhZ2luYXRpb25TdHJ1dCgpKTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB5QWZ0ZXJDbGVhciArPSBjaGlsZEJsb2Nr
Rmxvdy0+cGFnaW5hdGlvblN0cnV0KCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBTaW1pbGFy
IHRvIGhvdyB3ZSBhcHBseSBjbGVhcmFuY2UuICBHbyBhaGVhZCBhbmQgYm9vc3QgaGVpZ2h0KCkg
dG8gYmUgdGhlIHBsYWNlIHdoZXJlIHdlJ3JlIGdvaW5nIHRvIHBvc2l0aW9uIHRoZSBjaGlsZC4K
KyAgICAgICAgc2V0SGVpZ2h0KGhlaWdodCgpICsgKHlBZnRlckNsZWFyIC0gb2xkWSkpOworICAg
IH0KKwogICAgIHZpZXcoKS0+YWRkTGF5b3V0RGVsdGEoSW50U2l6ZSgwLCB5UG9zRXN0aW1hdGUg
LSB5QWZ0ZXJDbGVhcikpOwogICAgIGNoaWxkLT5zZXRMb2NhdGlvbihjaGlsZC0+eCgpLCB5QWZ0
ZXJDbGVhcik7CiAKQEAgLTE4MTgsOCArMTg5NCwxMyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlv
dXRCbG9ja0NoaWxkKFJlbmRlCiAgICAgICAgICAgICAvLyBTbyBnbyBhaGVhZCBhbmQgbWFyayB0
aGUgaXRlbSBhcyBkaXJ0eS4KICAgICAgICAgICAgIGNoaWxkLT5zZXRDaGlsZE5lZWRzTGF5b3V0
KHRydWUsIGZhbHNlKTsKICAgICAgICAgfQotICAgICAgICBpZiAoIWNoaWxkLT5hdm9pZHNGbG9h
dHMoKSAmJiBjaGlsZC0+aXNCbG9ja0Zsb3coKSAmJiB0b1JlbmRlckJsb2NrKGNoaWxkKS0+Y29u
dGFpbnNGbG9hdHMoKSkKLSAgICAgICAgICAgIHRvUmVuZGVyQmxvY2soY2hpbGQpLT5tYXJrQWxs
RGVzY2VuZGFudHNXaXRoRmxvYXRzRm9yTGF5b3V0KCk7CisgICAgICAgIGlmIChjaGlsZEJsb2Nr
RmxvdykgeworICAgICAgICAgICAgaWYgKCFjaGlsZC0+YXZvaWRzRmxvYXRzKCkgJiYgY2hpbGRC
bG9ja0Zsb3ctPmNvbnRhaW5zRmxvYXRzKCkpCisgICAgICAgICAgICAgICAgY2hpbGRCbG9ja0Zs
b3ctPm1hcmtBbGxEZXNjZW5kYW50c1dpdGhGbG9hdHNGb3JMYXlvdXQoKTsKKyAgICAgICAgICAg
IGlmIChwYWdpbmF0ZWQgJiYgIWNoaWxkLT5uZWVkc0xheW91dCgpICYmIHZpZXcoKS0+bGF5b3V0
U3RhdGUoKS0+bV9wYWdlSGVpZ2h0ICYmIHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+cGFnZVkoY2hp
bGQtPnkoKSkgIT0gY2hpbGRCbG9ja0Zsb3ctPnBhZ2VZKCkpCisgICAgICAgICAgICAgICAgY2hp
bGQtPnNldENoaWxkTmVlZHNMYXlvdXQodHJ1ZSwgZmFsc2UpOworICAgICAgICB9CisKICAgICAg
ICAgLy8gT3VyIGd1ZXNzIHdhcyB3cm9uZy4gTWFrZSB0aGUgY2hpbGQgbGF5IGl0c2VsZiBvdXQg
YWdhaW4uCiAgICAgICAgIGNoaWxkLT5sYXlvdXRJZk5lZWRlZCgpOwogICAgIH0KQEAgLTE4NDAs
NyArMTkyMSw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrQ2hpbGQoUmVuZGUKICAg
ICB9CiAgICAgLy8gSWYgdGhlIGNoaWxkIGhhcyBvdmVyaGFuZ2luZyBmbG9hdHMgdGhhdCBpbnRy
dWRlIGludG8gZm9sbG93aW5nIHNpYmxpbmdzIChvciBwb3NzaWJseSBvdXQKICAgICAvLyBvZiB0
aGlzIGJsb2NrKSwgdGhlbiB0aGUgcGFyZW50IGdldHMgbm90aWZpZWQgb2YgdGhlIGZsb2F0cyBu
b3cuCi0gICAgaWYgKGNoaWxkLT5pc0Jsb2NrRmxvdygpICYmIHRvUmVuZGVyQmxvY2soY2hpbGQp
LT5jb250YWluc0Zsb2F0cygpKQorICAgIGlmIChjaGlsZEJsb2NrRmxvdyAmJiBjaGlsZEJsb2Nr
Rmxvdy0+Y29udGFpbnNGbG9hdHMoKSkKICAgICAgICAgbWF4RmxvYXRCb3R0b20gPSBtYXgobWF4
RmxvYXRCb3R0b20sIGFkZE92ZXJoYW5naW5nRmxvYXRzKHRvUmVuZGVyQmxvY2soY2hpbGQpLCAt
Y2hpbGQtPngoKSwgLWNoaWxkLT55KCksICFjaGlsZE5lZWRlZExheW91dCkpOwogCiAgICAgSW50
U2l6ZSBjaGlsZE9mZnNldChjaGlsZC0+eCgpIC0gb2xkUmVjdC54KCksIGNoaWxkLT55KCkgLSBv
bGRSZWN0LnkoKSk7CkBAIC0xODU5LDYgKzE5NDAsMTMgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5
b3V0QmxvY2tDaGlsZChSZW5kZQogICAgICAgICBjaGlsZC0+cmVwYWludE92ZXJoYW5naW5nRmxv
YXRzKHRydWUpOwogICAgIH0KIAorICAgIGlmIChwYWdpbmF0ZWQpIHsKKyAgICAgICAgLy8gQ2hl
Y2sgZm9yIGFuIGFmdGVyIHBhZ2UvY29sdW1uIGJyZWFrLgorICAgICAgICBpbnQgbmV3SGVpZ2h0
ID0gYXBwbHlBZnRlckJyZWFrKGNoaWxkLCBoZWlnaHQoKSwgbWFyZ2luSW5mbyk7CisgICAgICAg
IGlmIChuZXdIZWlnaHQgIT0gaGVpZ2h0KCkpCisgICAgICAgICAgICBzZXRIZWlnaHQobmV3SGVp
Z2h0KTsKKyAgICB9CisKICAgICBBU1NFUlQob2xkTGF5b3V0RGVsdGEgPT0gdmlldygpLT5sYXlv
dXREZWx0YSgpKTsKIH0KIApAQCAtMTg4OSw2ICsxOTc3LDkgQEAgYm9vbCBSZW5kZXJCbG9jazo6
bGF5b3V0T25seVBvc2l0aW9uZWRPYgogdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0UG9zaXRpb25l
ZE9iamVjdHMoYm9vbCByZWxheW91dENoaWxkcmVuKQogewogICAgIGlmIChtX3Bvc2l0aW9uZWRP
YmplY3RzKSB7CisgICAgICAgIGlmIChoYXNDb2x1bW5zKCkpCisgICAgICAgICAgICB2aWV3KCkt
PmxheW91dFN0YXRlKCktPmNsZWFyUGFnaW5hdGlvbkluZm9ybWF0aW9uKCk7IC8vIFBvc2l0aW9u
ZWQgb2JqZWN0cyBhcmUgbm90IHBhcnQgb2YgdGhlIGNvbHVtbiBmbG93LCBzbyB0aGV5IGRvbid0
IHBhZ2luYXRlIHdpdGggdGhlIGNvbHVtbnMuCisKICAgICAgICAgUmVuZGVyQm94KiByOwogICAg
ICAgICBJdGVyYXRvciBlbmQgPSBtX3Bvc2l0aW9uZWRPYmplY3RzLT5lbmQoKTsKICAgICAgICAg
Zm9yIChJdGVyYXRvciBpdCA9IG1fcG9zaXRpb25lZE9iamVjdHMtPmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewpAQCAtMTkxMCw2ICsyMDAxLDkgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0
UG9zaXRpb25lZE9iamVjdAogICAgICAgICAgICAgICAgIHItPnRyeUxheW91dERvaW5nUG9zaXRp
b25lZE1vdmVtZW50T25seSgpOwogICAgICAgICAgICAgci0+bGF5b3V0SWZOZWVkZWQoKTsKICAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGhhc0NvbHVtbnMoKSkKKyAgICAgICAgICAg
IHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+bV9jb2x1bW5JbmZvID0gY29sdW1uSW5mbygpOyAvLyBG
SVhNRTogS2luZCBvZiBncm9zcy4gV2UganVzdCBwdXQgdGhpcyBiYWNrIGludG8gdGhlIGxheW91
dCBzdGF0ZSBzbyB0aGF0IHBvcCgpIHdpbGwgd29yay4KICAgICB9CiB9CiAKQEAgLTE5OTcsMTIg
KzIwOTEsMTIgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRDb2x1bW5SdWxlcyhQYWludAogCiAg
ICAgLy8gV2UgbmVlZCB0byBkbyBtdWx0aXBsZSBwYXNzZXMsIGJyZWFraW5nIHVwIG91ciBjaGls
ZCBwYWludGluZyBpbnRvIHN0cmlwcy4KICAgICBDb2x1bW5JbmZvKiBjb2xJbmZvID0gY29sdW1u
SW5mbygpOwotICAgIHVuc2lnbmVkIGNvbENvdW50ID0gY29sSW5mby0+Y29sdW1uQ291bnQoKTsK
KyAgICB1bnNpZ25lZCBjb2xDb3VudCA9IGNvbHVtbkNvdW50KGNvbEluZm8pOwogICAgIGludCBj
dXJyWE9mZnNldCA9IHN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUiA/IDAgOiBjb250ZW50V2lk
dGgoKTsKICAgICBpbnQgcnVsZUFkZCA9IGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCk7CiAg
ICAgaW50IHJ1bGVYID0gc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8gMCA6IGNvbnRlbnRX
aWR0aCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb2xDb3VudDsgaSsrKSB7Ci0g
ICAgICAgIEludFJlY3QgY29sUmVjdCA9IGNvbEluZm8tPmNvbHVtblJlY3RBdChpKTsKKyAgICAg
ICAgSW50UmVjdCBjb2xSZWN0ID0gY29sdW1uUmVjdEF0KGNvbEluZm8sIGkpOwogCiAgICAgICAg
IC8vIE1vdmUgdG8gdGhlIG5leHQgcG9zaXRpb24uCiAgICAgICAgIGlmIChzdHlsZSgpLT5kaXJl
Y3Rpb24oKSA9PSBMVFIpIHsKQEAgLTIwMzMsMTQgKzIxMjcsMTQgQEAgdm9pZCBSZW5kZXJCbG9j
azo6cGFpbnRDb2x1bW5Db250ZW50cyhQYQogICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9
IHBhaW50SW5mby5jb250ZXh0OwogICAgIGludCBjb2xHYXAgPSBjb2x1bW5HYXAoKTsKICAgICBD
b2x1bW5JbmZvKiBjb2xJbmZvID0gY29sdW1uSW5mbygpOwotICAgIHVuc2lnbmVkIGNvbENvdW50
ID0gY29sSW5mby0+Y29sdW1uQ291bnQoKTsKKyAgICB1bnNpZ25lZCBjb2xDb3VudCA9IGNvbHVt
bkNvdW50KGNvbEluZm8pOwogICAgIGlmICghY29sQ291bnQpCiAgICAgICAgIHJldHVybjsKLSAg
ICBpbnQgY3VyclhPZmZzZXQgPSBzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIgPyAwIDogY29u
dGVudFdpZHRoKCkgLSBjb2xJbmZvLT5jb2x1bW5SZWN0QXQoMCkud2lkdGgoKTsKKyAgICBpbnQg
Y3VyclhPZmZzZXQgPSBzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIgPyAwIDogY29udGVudFdp
ZHRoKCkgLSBjb2x1bW5SZWN0QXQoY29sSW5mbywgMCkud2lkdGgoKTsKICAgICBpbnQgY3VycllP
ZmZzZXQgPSAwOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb2xDb3VudDsgaSsrKSB7
CiAgICAgICAgIC8vIEZvciBlYWNoIHJlY3QsIHdlIGNsaXAgdG8gdGhlIHJlY3QsIGFuZCB0aGVu
IHdlIGFkanVzdCBvdXIgY29vcmRzLgotICAgICAgICBJbnRSZWN0IGNvbFJlY3QgPSBjb2xJbmZv
LT5jb2x1bW5SZWN0QXQoaSk7CisgICAgICAgIEludFJlY3QgY29sUmVjdCA9IGNvbHVtblJlY3RB
dChjb2xJbmZvLCBpKTsKICAgICAgICAgY29sUmVjdC5tb3ZlKHR4LCB0eSk7CiAgICAgICAgIFBh
aW50SW5mbyBpbmZvKHBhaW50SW5mbyk7CiAgICAgICAgIGluZm8ucmVjdC5pbnRlcnNlY3QoY29s
UmVjdCk7CkBAIC0yMDk4LDE0ICsyMTkyLDEzIEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50Q2hp
bGRyZW4oUGFpbnRJbmYKICAgICBpbmZvLnVwZGF0ZVBhaW50aW5nUm9vdEZvckNoaWxkcmVuKHRo
aXMpOwogICAgIAogICAgIFJlbmRlclZpZXcqIHJlbmRlclZpZXcgPSB2aWV3KCk7Ci0gICAgYm9v
bCB1c2VQcmludFJlY3QgPSAhcmVuZGVyVmlldy0+cHJpbnRSZWN0KCkuaXNFbXB0eSgpICYmICFk
b2N1bWVudCgpLT5zZXR0aW5ncygpLT5wYWdpbmF0ZUR1cmluZ0xheW91dEVuYWJsZWQoKTsKKyAg
ICBib29sIHVzZVByaW50UmVjdCA9ICFyZW5kZXJWaWV3LT5wcmludFJlY3QoKS5pc0VtcHR5KCk7
CiAgICAgCiAgICAgYm9vbCBjaGVja1BhZ2VCcmVha3MgPSBkb2N1bWVudCgpLT5wYWdpbmF0ZWQo
KSAmJiAhZG9jdW1lbnQoKS0+c2V0dGluZ3MoKS0+cGFnaW5hdGVEdXJpbmdMYXlvdXRFbmFibGVk
KCk7Ci0gICAgYm9vbCBjaGVja0NvbHVtbkJyZWFrcyA9ICFjaGVja1BhZ2VCcmVha3MgJiYgdXNl
UHJpbnRSZWN0OwogCiAgICAgZm9yIChSZW5kZXJCb3gqIGNoaWxkID0gZmlyc3RDaGlsZEJveCgp
OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmdCb3goKSkgeyAgICAgICAgCiAgICAg
ICAgIC8vIENoZWNrIGZvciBwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzLCBhbmQgaWYgaXQncyBz
ZXQsIGJyZWFrIGFuZCBiYWlsLgotICAgICAgICBib29sIGNoZWNrQmVmb3JlQWx3YXlzID0gIWNo
aWxkcmVuSW5saW5lKCkgJiYgKChjaGVja1BhZ2VCcmVha3MgJiYgY2hpbGQtPnN0eWxlKCktPnBh
Z2VCcmVha0JlZm9yZSgpID09IFBCQUxXQVlTKSB8fCAoY2hlY2tDb2x1bW5CcmVha3MgJiYgY2hp
bGQtPnN0eWxlKCktPmNvbHVtbkJyZWFrQmVmb3JlKCkgPT0gUEJBTFdBWVMpKTsKKyAgICAgICAg
Ym9vbCBjaGVja0JlZm9yZUFsd2F5cyA9ICFjaGlsZHJlbklubGluZSgpICYmIChjaGVja1BhZ2VC
cmVha3MgJiYgY2hpbGQtPnN0eWxlKCktPnBhZ2VCcmVha0JlZm9yZSgpID09IFBCQUxXQVlTKTsK
ICAgICAgICAgaWYgKGNoZWNrQmVmb3JlQWx3YXlzCiAgICAgICAgICAgICAmJiAodHkgKyBjaGls
ZC0+eSgpKSA+IHBhaW50SW5mby5yZWN0LnkoKQogICAgICAgICAgICAgJiYgKHR5ICsgY2hpbGQt
PnkoKSkgPCBwYWludEluZm8ucmVjdC5ib3R0b20oKSkgewpAQCAtMjEyOCw3ICsyMjIxLDcgQEAg
dm9pZCBSZW5kZXJCbG9jazo6cGFpbnRDaGlsZHJlbihQYWludEluZgogICAgICAgICAgICAgY2hp
bGQtPnBhaW50KGluZm8sIHR4LCB0eSk7CiAKICAgICAgICAgLy8gQ2hlY2sgZm9yIHBhZ2UtYnJl
YWstYWZ0ZXI6IGFsd2F5cywgYW5kIGlmIGl0J3Mgc2V0LCBicmVhayBhbmQgYmFpbC4KLSAgICAg
ICAgYm9vbCBjaGVja0FmdGVyQWx3YXlzID0gIWNoaWxkcmVuSW5saW5lKCkgJiYgKChjaGVja1Bh
Z2VCcmVha3MgJiYgY2hpbGQtPnN0eWxlKCktPnBhZ2VCcmVha0FmdGVyKCkgPT0gUEJBTFdBWVMp
IHx8IChjaGVja0NvbHVtbkJyZWFrcyAmJiBjaGlsZC0+c3R5bGUoKS0+Y29sdW1uQnJlYWtBZnRl
cigpID09IFBCQUxXQVlTKSk7CisgICAgICAgIGJvb2wgY2hlY2tBZnRlckFsd2F5cyA9ICFjaGls
ZHJlbklubGluZSgpICYmIChjaGVja1BhZ2VCcmVha3MgJiYgY2hpbGQtPnN0eWxlKCktPnBhZ2VC
cmVha0FmdGVyKCkgPT0gUEJBTFdBWVMpOwogICAgICAgICBpZiAoY2hlY2tBZnRlckFsd2F5cwog
ICAgICAgICAgICAgJiYgKHR5ICsgY2hpbGQtPnkoKSArIGNoaWxkLT5oZWlnaHQoKSkgPiBwYWlu
dEluZm8ucmVjdC55KCkKICAgICAgICAgICAgICYmICh0eSArIGNoaWxkLT55KCkgKyBjaGlsZC0+
aGVpZ2h0KCkpIDwgcGFpbnRJbmZvLnJlY3QuYm90dG9tKCkpIHsKQEAgLTI3OTYsMTMgKzI4ODks
MjIgQEAgdm9pZCBSZW5kZXJCbG9jazo6aW5zZXJ0RmxvYXRpbmdPYmplY3QoUgogCiAgICAgLy8g
Q3JlYXRlIHRoZSBzcGVjaWFsIG9iamVjdCBlbnRyeSAmIGFwcGVuZCBpdCB0byB0aGUgbGlzdAog
Ci0gICAgby0+bGF5b3V0SWZOZWVkZWQoKTsKLQogICAgIEZsb2F0aW5nT2JqZWN0KiBuZXdPYmog
PSBuZXcgRmxvYXRpbmdPYmplY3Qoby0+c3R5bGUoKS0+ZmxvYXRpbmcoKSA9PSBGTEVGVCA/IEZs
b2F0aW5nT2JqZWN0OjpGbG9hdExlZnQgOiBGbG9hdGluZ09iamVjdDo6RmxvYXRSaWdodCk7CiAK
ICAgICBuZXdPYmotPm1fdG9wID0gLTE7CiAgICAgbmV3T2JqLT5tX2JvdHRvbSA9IC0xOworICAg
IAorICAgIC8vIE91ciBsb2NhdGlvbiBpcyBpcnJlbGV2YW50IGlmIHdlJ3JlIHVuc3BsaXR0YWJs
ZSBvciBubyBwYWdpbmF0aW9uIGlzIGluIGVmZmVjdC4gIEp1c3QgZ28gYWhlYWQKKyAgICAvLyBh
bmQgbGF5IG91dCB0aGUgZmxvYXQuCisgICAgYm9vbCBhZmZlY3RlZEJ5UGFnaW5hdGlvbiA9IG8t
PmlzUmVuZGVyQmxvY2soKSAmJiB2aWV3KCktPmxheW91dFN0YXRlKCktPm1fcGFnZUhlaWdodDsK
KyAgICBpZiAoIWFmZmVjdGVkQnlQYWdpbmF0aW9uKQorICAgICAgICBvLT5sYXlvdXRJZk5lZWRl
ZCgpOworICAgIGVsc2UgeworICAgICAgICBvLT5jYWxjV2lkdGgoKTsKKyAgICAgICAgby0+Y2Fs
Y1ZlcnRpY2FsTWFyZ2lucygpOworICAgIH0KICAgICBuZXdPYmotPm1fd2lkdGggPSBvLT53aWR0
aCgpICsgby0+bWFyZ2luTGVmdCgpICsgby0+bWFyZ2luUmlnaHQoKTsKKwogICAgIG5ld09iai0+
bV9zaG91bGRQYWludCA9ICFvLT5oYXNTZWxmUGFpbnRpbmdMYXllcigpOyAvLyBJZiBhIGxheWVy
IGV4aXN0cywgdGhlIGZsb2F0IHdpbGwgcGFpbnQgaXRzZWxmLiAgT3RoZXJ3aXNlIHNvbWVvbmUg
ZWxzZSB3aWxsLgogICAgIG5ld09iai0+bV9pc0Rlc2NlbmRhbnQgPSB0cnVlOwogICAgIG5ld09i
ai0+bV9yZW5kZXJlciA9IG87CkBAIC0yODY3LDE2ICsyOTY5LDE1IEBAIGJvb2wgUmVuZGVyQmxv
Y2s6OnBvc2l0aW9uTmV3RmxvYXRzKCkKICAgICAgICAgfQogCiAgICAgICAgIFJlbmRlckJveCog
byA9IGYtPm1fcmVuZGVyZXI7Ci0gICAgICAgIGludCBfaGVpZ2h0ID0gby0+aGVpZ2h0KCkgKyBv
LT5tYXJnaW5Ub3AoKSArIG8tPm1hcmdpbkJvdHRvbSgpOwogCiAgICAgICAgIGludCBybyA9IHJp
Z2h0T2Zmc2V0KCk7IC8vIENvbnN0YW50IHBhcnQgb2YgcmlnaHQgb2Zmc2V0LgotICAgICAgICBp
bnQgbG8gPSBsZWZ0T2Zmc2V0KCk7IC8vIENvbnN0YXQgcGFydCBvZiBsZWZ0IG9mZnNldC4KKyAg
ICAgICAgaW50IGxvID0gbGVmdE9mZnNldCgpOyAvLyBDb25zdGFudCBwYXJ0IG9mIGxlZnQgb2Zm
c2V0LgogICAgICAgICBpbnQgZndpZHRoID0gZi0+bV93aWR0aDsgLy8gVGhlIHdpZHRoIHdlIGxv
b2sgZm9yLgogICAgICAgICBpZiAocm8gLSBsbyA8IGZ3aWR0aCkKICAgICAgICAgICAgIGZ3aWR0
aCA9IHJvIC0gbG87IC8vIE5ldmVyIGxvb2sgZm9yIG1vcmUgdGhhbiB3aGF0IHdpbGwgYmUgYXZh
aWxhYmxlLgogICAgICAgICAKICAgICAgICAgSW50UmVjdCBvbGRSZWN0KG8tPngoKSwgby0+eSgp
ICwgby0+d2lkdGgoKSwgby0+aGVpZ2h0KCkpOwotICAgICAgICAKKwogICAgICAgICBpZiAoby0+
c3R5bGUoKS0+Y2xlYXIoKSAmIENMRUZUKQogICAgICAgICAgICAgeSA9IG1heChsZWZ0Qm90dG9t
KCksIHkpOwogICAgICAgICBpZiAoby0+c3R5bGUoKS0+Y2xlYXIoKSAmIENSSUdIVCkKQEAgLTI5
MDUsOSArMzAwNiwzNSBAQCBib29sIFJlbmRlckJsb2NrOjpwb3NpdGlvbk5ld0Zsb2F0cygpCiAg
ICAgICAgICAgICBvLT5zZXRMb2NhdGlvbihmeCAtIG8tPm1hcmdpblJpZ2h0KCkgLSBvLT53aWR0
aCgpLCB5ICsgby0+bWFyZ2luVG9wKCkpOwogICAgICAgICB9CiAKLSAgICAgICAgZi0+bV90b3Ag
PSB5OwotICAgICAgICBmLT5tX2JvdHRvbSA9IGYtPm1fdG9wICsgX2hlaWdodDsKKyAgICAgICAg
aWYgKHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+bV9wYWdlSGVpZ2h0KSB7CisgICAgICAgICAgICBS
ZW5kZXJCbG9jayogY2hpbGRCbG9jayA9IG8tPmlzUmVuZGVyQmxvY2soKSA/IHRvUmVuZGVyQmxv
Y2sobykgOiAwOwogCisgICAgICAgICAgICBpZiAoY2hpbGRCbG9jayAmJiB2aWV3KCktPmxheW91
dFN0YXRlKCktPm1fcGFnZUhlaWdodCAmJiB2aWV3KCktPmxheW91dFN0YXRlKCktPnBhZ2VZKG8t
PnkoKSkgIT0gY2hpbGRCbG9jay0+cGFnZVkoKSkKKyAgICAgICAgICAgICAgICBjaGlsZEJsb2Nr
LT5zZXRDaGlsZE5lZWRzTGF5b3V0KHRydWUsIGZhbHNlKTsKKyAgICAgICAgICAgIG8tPmxheW91
dElmTmVlZGVkKCk7CisKKyAgICAgICAgICAgIC8vIElmIHdlIGFyZSB1bnNwbGl0dGFibGUgYW5k
IGRvbid0IGZpdCwgdGhlbiB3ZSBuZWVkIHRvIG1vdmUgZG93bi4KKyAgICAgICAgICAgIC8vIFdl
IGluY2x1ZGUgb3VyIG1hcmdpbnMgYXMgcGFydCBvZiB0aGUgdW5zcGxpdHRhYmxlIGFyZWEuCisg
ICAgICAgICAgICBpbnQgbmV3WSA9IGFkanVzdEZvclVuc3BsaXR0YWJsZUNoaWxkKG8sIHksIHRy
dWUpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBTZWUgaWYgd2UgaGF2ZSBhIHBhZ2lu
YXRpb24gc3RydXQgdGhhdCBpcyBtYWtpbmcgdXMgbW92ZSBkb3duIGZ1cnRoZXIuCisgICAgICAg
ICAgICAvLyBOb3RlIHRoYXQgYW4gdW5zcGxpdHRhYmxlIGNoaWxkIGNhbid0IGFsc28gaGF2ZSBh
IHBhZ2luYXRpb24gc3RydXQsIHNvIHRoaXMgaXMKKyAgICAgICAgICAgIC8vIGV4Y2x1c2l2ZSB3
aXRoIHRoZSBjYXNlIGFib3ZlLgorICAgICAgICAgICAgaWYgKGNoaWxkQmxvY2sgJiYgY2hpbGRC
bG9jay0+cGFnaW5hdGlvblN0cnV0KCkpCisgICAgICAgICAgICAgICAgbmV3WSArPSBjaGlsZEJs
b2NrLT5wYWdpbmF0aW9uU3RydXQoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG5l
d1kgIT0geSkgeworICAgICAgICAgICAgICAgIHkgPSBuZXdZOworICAgICAgICAgICAgICAgIG8t
PnNldFkoeSArIG8tPm1hcmdpblRvcCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoY2hpbGRCbG9j
aykKKyAgICAgICAgICAgICAgICAgICAgY2hpbGRCbG9jay0+c2V0Q2hpbGROZWVkc0xheW91dCh0
cnVlLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgby0+bGF5b3V0SWZOZWVkZWQoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGYtPm1fdG9wID0geTsKKyAgICAgICAgZi0+
bV9ib3R0b20gPSBmLT5tX3RvcCArIG8tPm1hcmdpblRvcCgpICsgby0+aGVpZ2h0KCkgKyBvLT5t
YXJnaW5Cb3R0b20oKTsKKyAgICAgICAgCiAgICAgICAgIC8vIElmIHRoZSBjaGlsZCBtb3ZlZCwg
d2UgaGF2ZSB0byByZXBhaW50IGl0LgogICAgICAgICBpZiAoby0+Y2hlY2tGb3JSZXBhaW50RHVy
aW5nTGF5b3V0KCkpCiAgICAgICAgICAgICBvLT5yZXBhaW50RHVyaW5nTGF5b3V0SWZNb3ZlZChv
bGRSZWN0KTsKQEAgLTMxNTgsOCArMzI4NSw4IEBAIGludCBSZW5kZXJCbG9jazo6bG93ZXN0UG9z
aXRpb24oYm9vbCBpbmMKIAogICAgIGlmIChoYXNDb2x1bW5zKCkpIHsKICAgICAgICAgQ29sdW1u
SW5mbyogY29sSW5mbyA9IGNvbHVtbkluZm8oKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGNvbEluZm8tPmNvbHVtbkNvdW50KCk7IGkrKykKLSAgICAgICAgICAgIGJvdHRvbSA9
IG1heChib3R0b20sIGNvbEluZm8tPmNvbHVtblJlY3RBdChpKS5ib3R0b20oKSArIHJlbGF0aXZl
T2Zmc2V0KTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvbHVtbkNvdW50KGNv
bEluZm8pOyBpKyspCisgICAgICAgICAgICBib3R0b20gPSBtYXgoYm90dG9tLCBjb2x1bW5SZWN0
QXQoY29sSW5mbywgaSkuYm90dG9tKCkgKyByZWxhdGl2ZU9mZnNldCk7CiAgICAgICAgIHJldHVy
biBib3R0b207CiAgICAgfQogCkBAIC0zMjUzLDggKzMzODAsOSBAQCBpbnQgUmVuZGVyQmxvY2s6
OnJpZ2h0bW9zdFBvc2l0aW9uKGJvb2wgCiAgICAgICAgIC8vIFRoaXMgb25seSBtYXR0ZXJzIGZv
ciBMVFIKICAgICAgICAgaWYgKHN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUikgewogICAgICAg
ICAgICAgQ29sdW1uSW5mbyogY29sSW5mbyA9IGNvbHVtbkluZm8oKTsKLSAgICAgICAgICAgIGlm
IChjb2xJbmZvLT5jb2x1bW5Db3VudCgpKQotICAgICAgICAgICAgICAgIHJpZ2h0ID0gbWF4KGNv
bEluZm8tPmNvbHVtblJlY3RBdChjb2xJbmZvLT5jb2x1bW5Db3VudCgpIC0gMSkucmlnaHQoKSAr
IHJlbGF0aXZlT2Zmc2V0LCByaWdodCk7CisgICAgICAgICAgICB1bnNpZ25lZCBjb3VudCA9IGNv
bHVtbkNvdW50KGNvbEluZm8pOworICAgICAgICAgICAgaWYgKGNvdW50KQorICAgICAgICAgICAg
ICAgIHJpZ2h0ID0gbWF4KGNvbHVtblJlY3RBdChjb2xJbmZvLCBjb3VudCAtIDEpLnJpZ2h0KCkg
KyByZWxhdGl2ZU9mZnNldCwgcmlnaHQpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiByaWdo
dDsKICAgICB9CkBAIC0zMzUzLDggKzM0ODEsOSBAQCBpbnQgUmVuZGVyQmxvY2s6OmxlZnRtb3N0
UG9zaXRpb24oYm9vbCBpCiAgICAgICAgIC8vIFRoaXMgb25seSBtYXR0ZXJzIGZvciBSVEwKICAg
ICAgICAgaWYgKHN0eWxlKCktPmRpcmVjdGlvbigpID09IFJUTCkgewogICAgICAgICAgICAgQ29s
dW1uSW5mbyogY29sSW5mbyA9IGNvbHVtbkluZm8oKTsKLSAgICAgICAgICAgIGlmIChjb2xJbmZv
LT5jb2x1bW5Db3VudCgpKQotICAgICAgICAgICAgICAgIGxlZnQgPSBtaW4oY29sSW5mby0+Y29s
dW1uUmVjdEF0KGNvbEluZm8tPmNvbHVtbkNvdW50KCkgLSAxKS54KCkgKyByZWxhdGl2ZU9mZnNl
dCwgbGVmdCk7CisgICAgICAgICAgICB1bnNpZ25lZCBjb3VudCA9IGNvbHVtbkNvdW50KGNvbElu
Zm8pOworICAgICAgICAgICAgaWYgKGNvdW50KQorICAgICAgICAgICAgICAgIGxlZnQgPSBtaW4o
Y29sdW1uUmVjdEF0KGNvbEluZm8sIGNvdW50IC0gMSkueCgpICsgcmVsYXRpdmVPZmZzZXQsIGxl
ZnQpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBsZWZ0OwogICAgIH0KQEAgLTM2NDcsNiAr
Mzc3Niw5IEBAIGJvb2wgUmVuZGVyQmxvY2s6OmNvbnRhaW5zRmxvYXQoUmVuZGVyT2IKIAogdm9p
ZCBSZW5kZXJCbG9jazo6bWFya0FsbERlc2NlbmRhbnRzV2l0aEZsb2F0c0ZvckxheW91dChSZW5k
ZXJCb3gqIGZsb2F0VG9SZW1vdmUsIGJvb2wgaW5MYXlvdXQpCiB7CisgICAgaWYgKCFtX2V2ZXJI
YWRMYXlvdXQpCisgICAgICAgIHJldHVybjsKKwogICAgIHNldENoaWxkTmVlZHNMYXlvdXQodHJ1
ZSwgIWluTGF5b3V0KTsKIAogICAgIGlmIChmbG9hdFRvUmVtb3ZlKQpAQCAtMzY2NCwzMCArMzc5
Niw0NSBAQCB2b2lkIFJlbmRlckJsb2NrOjptYXJrQWxsRGVzY2VuZGFudHNXaXRoCiAgICAgfQog
fQogCi1pbnQgUmVuZGVyQmxvY2s6OnZpc2libGVUb3BPZkhpZ2hlc3RGbG9hdEV4dGVuZGluZ0Jl
bG93KGludCBib3R0b20sIGludCBtYXhIZWlnaHQpIGNvbnN0Cit2b2lkIFJlbmRlckJsb2NrOjpt
YXJrRGVzY2VuZGFudEJsb2Nrc0FuZExpbmVzRm9yTGF5b3V0KGJvb2wgaW5MYXlvdXQpCiB7Ci0g
ICAgaW50IHRvcCA9IGJvdHRvbTsKLSAgICBpZiAobV9mbG9hdGluZ09iamVjdHMpIHsKLSAgICAg
ICAgRmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0OwotICAgICAgICBmb3IgKERlcHJlY2F0
ZWRQdHJMaXN0SXRlcmF0b3I8RmxvYXRpbmdPYmplY3Q+IGl0KCptX2Zsb2F0aW5nT2JqZWN0cyk7
IChmbG9hdGluZ09iamVjdCA9IGl0LmN1cnJlbnQoKSk7ICsraXQpIHsKLSAgICAgICAgICAgIFJl
bmRlckJveCogZmxvYXRpbmdCb3ggPSBmbG9hdGluZ09iamVjdC0+bV9yZW5kZXJlcjsKLSAgICAg
ICAgICAgIEludFJlY3QgdmlzaWJsZU92ZXJmbG93ID0gZmxvYXRpbmdCb3gtPnZpc2libGVPdmVy
Zmxvd1JlY3QoKTsKLSAgICAgICAgICAgIHZpc2libGVPdmVyZmxvdy5tb3ZlKGZsb2F0aW5nQm94
LT54KCksIGZsb2F0aW5nQm94LT55KCkpOwotICAgICAgICAgICAgaWYgKHZpc2libGVPdmVyZmxv
dy55KCkgPCB0b3AgJiYgdmlzaWJsZU92ZXJmbG93LmJvdHRvbSgpID4gYm90dG9tICYmIHZpc2li
bGVPdmVyZmxvdy5oZWlnaHQoKSA8PSBtYXhIZWlnaHQgJiYgZmxvYXRpbmdCb3gtPmNvbnRhaW5p
bmdCbG9jaygpID09IHRoaXMpCi0gICAgICAgICAgICAgICAgdG9wID0gdmlzaWJsZU92ZXJmbG93
LnkoKTsKLSAgICAgICAgfQotICAgIH0KKyAgICBpZiAoIW1fZXZlckhhZExheW91dCkKKyAgICAg
ICAgcmV0dXJuOwogCisgICAgc2V0Q2hpbGROZWVkc0xheW91dCh0cnVlLCAhaW5MYXlvdXQpOwor
CisgICAgLy8gSXRlcmF0ZSBvdmVyIG91ciBjaGlsZHJlbiBhbmQgbWFyayB0aGVtIGFzIG5lZWRl
ZC4KICAgICBpZiAoIWNoaWxkcmVuSW5saW5lKCkpIHsKICAgICAgICAgZm9yIChSZW5kZXJPYmpl
Y3QqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxp
bmcoKSkgewogICAgICAgICAgICAgaWYgKGNoaWxkLT5pc0Zsb2F0aW5nT3JQb3NpdGlvbmVkKCkg
fHwgIWNoaWxkLT5pc1JlbmRlckJsb2NrKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICBSZW5kZXJCbG9jayogY2hpbGRCbG9jayA9IHRvUmVuZGVyQmxvY2soY2hpbGQp
OwotICAgICAgICAgICAgdG9wID0gbWluKHRvcCwgY2hpbGRCbG9jay0+eSgpICsgY2hpbGRCbG9j
ay0+dmlzaWJsZVRvcE9mSGlnaGVzdEZsb2F0RXh0ZW5kaW5nQmVsb3coYm90dG9tIC0gY2hpbGRC
bG9jay0+eSgpLCBtYXhIZWlnaHQpKTsKKyAgICAgICAgICAgIHRvUmVuZGVyQmxvY2soY2hpbGQp
LT5tYXJrRGVzY2VuZGFudEJsb2Nrc0FuZExpbmVzRm9yTGF5b3V0KGluTGF5b3V0KTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBXYWxrIG91ciBmbG9hdGluZyBvYmplY3RzIGFuZCBt
YXJrIHRoZW0gdG9vLgorICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0cykgeworICAgICAgICBEZXBy
ZWNhdGVkUHRyTGlzdEl0ZXJhdG9yPEZsb2F0aW5nT2JqZWN0PiBpdCgqbV9mbG9hdGluZ09iamVj
dHMpOworICAgICAgICB3aGlsZSAoaXQuY3VycmVudCgpKSB7CisgICAgICAgICAgICBpZiAoaXQu
Y3VycmVudCgpLT5tX3JlbmRlcmVyLT5pc1JlbmRlckJsb2NrKCkpCisgICAgICAgICAgICAgICAg
dG9SZW5kZXJCbG9jayhpdC5jdXJyZW50KCktPm1fcmVuZGVyZXIpLT5tYXJrRGVzY2VuZGFudEJs
b2Nrc0FuZExpbmVzRm9yTGF5b3V0KGluTGF5b3V0KTsKKyAgICAgICAgICAgICsraXQ7CiAgICAg
ICAgIH0KICAgICB9CiAKLSAgICByZXR1cm4gdG9wOworICAgIGlmIChtX3Bvc2l0aW9uZWRPYmpl
Y3RzKSB7CisgICAgICAgIC8vIEZJWE1FOiBUZWNobmljYWxseSB3ZSBkb24ndCBoYXZlIHRvIG1h
cmsgdGhlIHBvc2l0aW9uZWQgb2JqZWN0cyBpZiB3ZSdyZSB0aGUgYmxvY2sKKyAgICAgICAgLy8g
dGhhdCBlc3RhYmxpc2hlZCB0aGUgY29sdW1ucywgYnV0IHdlIGRvbid0IHJlYWxseSBoYXZlIHRo
YXQgaW5mb3JtYXRpb24gaGVyZS4KKyAgICAgICAgUmVuZGVyQm94KiByOworICAgICAgICBJdGVy
YXRvciBlbmQgPSBtX3Bvc2l0aW9uZWRPYmplY3RzLT5lbmQoKTsKKyAgICAgICAgZm9yIChJdGVy
YXRvciBpdCA9IG1fcG9zaXRpb25lZE9iamVjdHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
eworICAgICAgICAgICAgciA9ICppdDsKKyAgICAgICAgICAgIGlmIChyLT5pc1JlbmRlckJsb2Nr
KCkpCisgICAgICAgICAgICAgICAgdG9SZW5kZXJCbG9jayhyKS0+bWFya0Rlc2NlbmRhbnRCbG9j
a3NBbmRMaW5lc0ZvckxheW91dCgpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gRklYTUU6
IElmIHdlJ3JlIGEgdGFibGUsIHRoZW4gd2UgaGF2ZSB0byBtYXJrIGV2ZXJ5IHNpbmdsZSBjZWxs
LgogfQogCiBpbnQgUmVuZGVyQmxvY2s6OmdldENsZWFyRGVsdGEoUmVuZGVyQm94KiBjaGlsZCwg
aW50IHlQb3MpCkBAIC0zODQ3LDE2ICszOTk0LDE2IEBAIGJvb2wgUmVuZGVyQmxvY2s6OmhpdFRl
c3RDb2x1bW5zKGNvbnN0IEgKIHsKICAgICAvLyBXZSBuZWVkIHRvIGRvIG11bHRpcGxlIHBhc3Nl
cywgYnJlYWtpbmcgdXAgb3VyIGhpdCB0ZXN0aW5nIGludG8gc3RyaXBzLgogICAgIENvbHVtbklu
Zm8qIGNvbEluZm8gPSBjb2x1bW5JbmZvKCk7Ci0gICAgaW50IGNvbENvdW50ID0gY29sSW5mby0+
Y29sdW1uQ291bnQoKTsKKyAgICBpbnQgY29sQ291bnQgPSBjb2x1bW5Db3VudChjb2xJbmZvKTsK
ICAgICBpZiAoIWNvbENvdW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW50IGxlZnQg
PSBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpOwogICAgIGludCBjdXJyWU9mZnNldCA9IDA7
CiAgICAgaW50IGk7CiAgICAgZm9yIChpID0gMDsgaSA8IGNvbENvdW50OyBpKyspCi0gICAgICAg
IGN1cnJZT2Zmc2V0IC09IGNvbEluZm8tPmNvbHVtblJlY3RBdChpKS5oZWlnaHQoKTsKKyAgICAg
ICAgY3VycllPZmZzZXQgLT0gY29sdW1uUmVjdEF0KGNvbEluZm8sIGkpLmhlaWdodCgpOwogICAg
IGZvciAoaSA9IGNvbENvdW50IC0gMTsgaSA+PSAwOyBpLS0pIHsKLSAgICAgICAgSW50UmVjdCBj
b2xSZWN0ID0gY29sSW5mby0+Y29sdW1uUmVjdEF0KGkpOworICAgICAgICBJbnRSZWN0IGNvbFJl
Y3QgPSBjb2x1bW5SZWN0QXQoY29sSW5mbywgaSk7CiAgICAgICAgIGludCBjdXJyWE9mZnNldCA9
IGNvbFJlY3QueCgpIC0gbGVmdDsKICAgICAgICAgY3VycllPZmZzZXQgKz0gY29sUmVjdC5oZWln
aHQoKTsKICAgICAgICAgY29sUmVjdC5tb3ZlKHR4LCB0eSk7CkBAIC00MTUwLDggKzQyOTcsNyBA
QCB2b2lkIFJlbmRlckJsb2NrOjpzZXREZXNpcmVkQ29sdW1uQ291bnRBCiAgICAgYm9vbCBkZXN0
cm95Q29sdW1ucyA9ICFmaXJzdENoaWxkKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwg
KGNvdW50ID09IDEgJiYgc3R5bGUoKS0+aGFzQXV0b0NvbHVtbldpZHRoKCkpCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHx8IGZpcnN0Q2hpbGQoKS0+aXNBbm9ueW1vdXNDb2x1bW5zQmxvY2so
KQotICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBmaXJzdENoaWxkKCktPmlzQW5vbnltb3Vz
Q29sdW1uU3BhbkJsb2NrKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgZG9jdW1lbnQo
KS0+c2V0dGluZ3MoKS0+cGFnaW5hdGVEdXJpbmdMYXlvdXRFbmFibGVkKCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgIHx8IGZpcnN0Q2hpbGQoKS0+aXNBbm9ueW1vdXNDb2x1bW5TcGFuQmxv
Y2soKTsKICAgICBpZiAoZGVzdHJveUNvbHVtbnMpIHsKICAgICAgICAgaWYgKGhhc0NvbHVtbnMo
KSkgewogICAgICAgICAgICAgZGVsZXRlIGdDb2x1bW5JbmZvTWFwLT50YWtlKHRoaXMpOwpAQCAt
NDE5NCwxMzMgKzQzNDAsNjAgQEAgQ29sdW1uSW5mbyogUmVuZGVyQmxvY2s6OmNvbHVtbkluZm8o
KSBjbwogICAgIHJldHVybiBnQ29sdW1uSW5mb01hcC0+Z2V0KHRoaXMpOyAgICAKIH0KIAotaW50
IFJlbmRlckJsb2NrOjpsYXlvdXRDb2x1bW5zKGludCBlbmRPZkNvbnRlbnQsIGludCByZXF1ZXN0
ZWRDb2x1bW5IZWlnaHQpCit1bnNpZ25lZCBSZW5kZXJCbG9jazo6Y29sdW1uQ291bnQoQ29sdW1u
SW5mbyogY29sSW5mbykgY29uc3QKIHsKLSAgICAvLyBEb24ndCBkbyBhbnl0aGluZyBpZiB3ZSBo
YXZlIG5vIGNvbHVtbnMKLSAgICBpZiAoIWhhc0NvbHVtbnMoKSkKLSAgICAgICAgcmV0dXJuIC0x
OworICAgIEFTU0VSVChoYXNDb2x1bW5zKCkgJiYgZ0NvbHVtbkluZm9NYXAtPmdldCh0aGlzKSA9
PSBjb2xJbmZvKTsKKyAgICByZXR1cm4gY29sSW5mby0+Y29sdW1uQ291bnQoKTsKK30KIAotICAg
IENvbHVtbkluZm8qIGluZm8gPSBnQ29sdW1uSW5mb01hcC0+Z2V0KHRoaXMpOwotICAgIGludCBk
ZXNpcmVkQ29sdW1uV2lkdGggPSBpbmZvLT5kZXNpcmVkQ29sdW1uV2lkdGgoKTsKLSAgICBpbnQg
ZGVzaXJlZENvbHVtbkNvdW50ID0gaW5mby0+ZGVzaXJlZENvbHVtbkNvdW50KCk7Ci0gICAgCi0g
ICAgYm9vbCBjb21wdXRlSW50cmluc2ljSGVpZ2h0ID0gKGVuZE9mQ29udGVudCA9PSAtMSk7Ci0K
LSAgICAvLyBGaWxsIHRoZSBjb2x1bW5zIGluIHRvIHRoZSBhdmFpbGFibGUgaGVpZ2h0LiAgQXR0
ZW1wdCB0byBiYWxhbmNlIHRoZSBoZWlnaHQgb2YgdGhlIGNvbHVtbnMuCi0gICAgLy8gQWRkIGlu
IGhhbGYgb3VyIGxpbmUtaGVpZ2h0IHRvIGhlbHAgd2l0aCBiZXN0LWd1ZXNzIGluaXRpYWwgYmFs
YW5jaW5nLgotICAgIGludCBjb2x1bW5TbG9wID0gbGluZUhlaWdodChmYWxzZSkgLyAyOwotICAg
IGludCByZW1haW5pbmdTbG9wU3BhY2UgPSBjb2x1bW5TbG9wICogZGVzaXJlZENvbHVtbkNvdW50
OwotICAgIGludCBhdmFpbGFibGVIZWlnaHQgPSBjb250ZW50SGVpZ2h0KCk7Ci0gICAgaW50IGNv
bEhlaWdodDsKLSAgICBpZiAoY29tcHV0ZUludHJpbnNpY0hlaWdodCAmJiByZXF1ZXN0ZWRDb2x1
bW5IZWlnaHQgPj0gMCkKLSAgICAgICAgY29sSGVpZ2h0ID0gcmVxdWVzdGVkQ29sdW1uSGVpZ2h0
OwotICAgIGVsc2UgaWYgKGNvbXB1dGVJbnRyaW5zaWNIZWlnaHQpCi0gICAgICAgIGNvbEhlaWdo
dCA9IG1pbihhdmFpbGFibGVIZWlnaHQsIGF2YWlsYWJsZUhlaWdodCAvIGRlc2lyZWRDb2x1bW5D
b3VudCArIGNvbHVtblNsb3ApOwotICAgIGVsc2UKLSAgICAgICAgY29sSGVpZ2h0ID0gYXZhaWxh
YmxlSGVpZ2h0OwotICAgIGludCBvcmlnaW5hbENvbEhlaWdodCA9IGNvbEhlaWdodDsKK0ludFJl
Y3QgUmVuZGVyQmxvY2s6OmNvbHVtblJlY3RBdChDb2x1bW5JbmZvKiBjb2xJbmZvLCB1bnNpZ25l
ZCBpbmRleCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaGFzQ29sdW1ucygpICYmIGdDb2x1bW5JbmZv
TWFwLT5nZXQodGhpcykgPT0gY29sSW5mbyk7CiAKKyAgICAvLyBDb21wdXRlIHRoZSBhcHByb3By
aWF0ZSByZWN0IGJhc2VkIG9mZiBvdXIgaW5mb3JtYXRpb24uCisgICAgaW50IGNvbFdpZHRoID0g
Y29sSW5mby0+ZGVzaXJlZENvbHVtbldpZHRoKCk7CisgICAgaW50IGNvbEhlaWdodCA9IGNvbElu
Zm8tPmNvbHVtbkhlaWdodCgpOworICAgIGludCBjb2xUb3AgPSBib3JkZXJUb3AoKSArIHBhZGRp
bmdUb3AoKTsKICAgICBpbnQgY29sR2FwID0gY29sdW1uR2FwKCk7CisgICAgaW50IGNvbExlZnQg
PSBzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIgPyAKKyAgICAgICAgICAgICAgICAgICAgICBi
b3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpICsgKGluZGV4ICogKGNvbFdpZHRoICsgY29sR2Fw
KSkKKyAgICAgICAgICAgICAgICAgICAgICA6IGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCkg
KyBjb250ZW50V2lkdGgoKSAtIGNvbFdpZHRoIC0gKGluZGV4ICogKGNvbFdpZHRoICsgY29sR2Fw
KSk7CisgICAgcmV0dXJuIEludFJlY3QoY29sTGVmdCwgY29sVG9wLCBjb2xXaWR0aCwgY29sSGVp
Z2h0KTsKK30KIAotICAgIC8vIENvbXB1dGUgYSBjb2xsZWN0aW9uIG9mIGNvbHVtbiByZWN0cy4K
LSAgICBpbmZvLT5jbGVhckNvbHVtbnMoKTsKLSAgICAKLSAgICAvLyBUaGVuIHdlIGRvIGEgc2lt
dWxhdGVkICJwYWludCIgaW50byB0aGUgY29sdW1uIHNsaWNlcyBhbmQgYWxsb3cgdGhlIGNvbnRl
bnQgdG8gc2xpZ2h0bHkgYWRqdXN0IG91ciBpbmRpdmlkdWFsIGNvbHVtbiByZWN0cy4KLSAgICAv
LyBGSVhNRTogV2UgbmVlZCB0byB0YWtlIGludG8gYWNjb3VudCBsYXllcnMgdGhhdCBhcmUgYWZm
ZWN0ZWQgYnkgdGhlIGNvbHVtbnMgYXMgd2VsbCBoZXJlIHNvIHRoYXQgdGhleSBjYW4gaGF2ZSBh
biBvcHBvcnR1bml0eQotICAgIC8vIHRvIGFkanVzdCBjb2x1bW4gcmVjdHMgYWxzby4KLSAgICBS
ZW5kZXJWaWV3KiB2ID0gdmlldygpOwotICAgIGludCBsZWZ0ID0gYm9yZGVyTGVmdCgpICsgcGFk
ZGluZ0xlZnQoKTsKLSAgICBpbnQgdG9wID0gYm9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCk7Ci0g
ICAgaW50IGN1cnJYID0gc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8gYm9yZGVyTGVmdCgp
ICsgcGFkZGluZ0xlZnQoKSA6IGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCkgKyBjb250ZW50
V2lkdGgoKSAtIGRlc2lyZWRDb2x1bW5XaWR0aDsKLSAgICBpbnQgY3VyclkgPSB0b3A7Ci0gICAg
dW5zaWduZWQgY29sQ291bnQgPSBkZXNpcmVkQ29sdW1uQ291bnQ7Ci0gICAgaW50IG1heENvbEJv
dHRvbSA9IGJvcmRlclRvcCgpICsgcGFkZGluZ1RvcCgpOwotICAgIGludCBjb250ZW50Qm90dG9t
ID0gdG9wICsgYXZhaWxhYmxlSGVpZ2h0OwotICAgIGludCBtaW5pbXVtQ29sdW1uSGVpZ2h0ID0g
LTE7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvbENvdW50OyBpKyspIHsKLSAgICAg
ICAgLy8gSWYgd2UgYXJlbid0IGNvbnN0cmFpbmVkLCB0aGVuIHRoZSBsYXN0IGNvbHVtbiBjYW4g
anVzdCBnZXQgYWxsIHRoZSByZW1haW5pbmcgc3BhY2UuCi0gICAgICAgIGlmIChjb21wdXRlSW50
cmluc2ljSGVpZ2h0ICYmIGkgPT0gY29sQ291bnQgLSAxKQotICAgICAgICAgICAgY29sSGVpZ2h0
ID0gYXZhaWxhYmxlSGVpZ2h0OwotCi0gICAgICAgIC8vIFRoaXMgcmVwcmVzZW50cyB0aGUgcmVh
bCBjb2x1bW4gcG9zaXRpb24uCi0gICAgICAgIEludFJlY3QgY29sUmVjdChjdXJyWCwgdG9wLCBk
ZXNpcmVkQ29sdW1uV2lkdGgsIGNvbEhlaWdodCk7Ci0KLSAgICAgICAgaW50IHRydW5jYXRpb25Q
b2ludCA9IHZpc2libGVUb3BPZkhpZ2hlc3RGbG9hdEV4dGVuZGluZ0JlbG93KGN1cnJZICsgY29s
SGVpZ2h0LCBjb2xIZWlnaHQpOwotCi0gICAgICAgIC8vIEZvciB0aGUgc2ltdWxhdGVkIHBhaW50
LCB3ZSBwcmV0ZW5kIGxpa2UgZXZlcnl0aGluZyBpcyBpbiBvbmUgbG9uZyBzdHJpcC4KLSAgICAg
ICAgSW50UmVjdCBwYWdlUmVjdChsZWZ0LCBjdXJyWSwgY29udGVudFdpZHRoKCksIHRydW5jYXRp
b25Qb2ludCAtIGN1cnJZKTsKLSAgICAgICAgdi0+c2V0UHJpbnRSZWN0KHBhZ2VSZWN0KTsKLSAg
ICAgICAgdi0+c2V0VHJ1bmNhdGVkQXQodHJ1bmNhdGlvblBvaW50KTsKLSAgICAgICAgR3JhcGhp
Y3NDb250ZXh0IGNvbnRleHQoKFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KikwKTsKLSAgICAgICAg
UGFpbnRJbmZvIHBhaW50SW5mbygmY29udGV4dCwgcGFnZVJlY3QsIFBhaW50UGhhc2VGb3JlZ3Jv
dW5kLCBmYWxzZSwgMCwgMCk7Ci0gICAgICAgIAotICAgICAgICBzZXRIYXNDb2x1bW5zKGZhbHNl
KTsKLSAgICAgICAgcGFpbnRPYmplY3QocGFpbnRJbmZvLCAwLCAwKTsKLSAgICAgICAgc2V0SGFz
Q29sdW1ucyh0cnVlKTsKLQotICAgICAgICBpZiAoY29tcHV0ZUludHJpbnNpY0hlaWdodCAmJiB2
LT5taW5pbXVtQ29sdW1uSGVpZ2h0KCkgPiBvcmlnaW5hbENvbEhlaWdodCkgewotICAgICAgICAg
ICAgLy8gVGhlIGluaXRpYWwgY29sdW1uIGhlaWdodCB3YXMgdG9vIHNtYWxsIHRvIGNvbnRhaW4g
b25lIGxpbmUgb2YgdGV4dC4KLSAgICAgICAgICAgIG1pbmltdW1Db2x1bW5IZWlnaHQgPSBtYXgo
bWluaW11bUNvbHVtbkhlaWdodCwgdi0+bWluaW11bUNvbHVtbkhlaWdodCgpKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGludCBhZGp1c3RlZEJvdHRvbSA9IHYtPmJlc3RUcnVuY2F0ZWRBdCgpOwot
ICAgICAgICBpZiAoYWRqdXN0ZWRCb3R0b20gPD0gY3VyclkpCi0gICAgICAgICAgICBhZGp1c3Rl
ZEJvdHRvbSA9IHRydW5jYXRpb25Qb2ludDsKLSAgICAgICAgCi0gICAgICAgIGNvbFJlY3Quc2V0
SGVpZ2h0KGFkanVzdGVkQm90dG9tIC0gY3VyclkpOwotICAgICAgICAKLSAgICAgICAgLy8gQWRk
IGluIHRoZSBsb3N0IHNwYWNlIHRvIHRoZSBzdWJzZXF1ZW50IGNvbHVtbnMuCi0gICAgICAgIC8v
IEZJWE1FOiBUaGlzIHdpbGwgY3JlYXRlIGEgInN0YWlyY2FzZSIgZWZmZWN0IGlmIHRoZXJlIGFy
ZSBlbm91Z2ggY29sdW1ucywgYnV0IHRoZSBlZmZlY3Qgc2hvdWxkIGJlIHByZXR0eSBzdWJ0bGUu
Ci0gICAgICAgIGlmIChjb21wdXRlSW50cmluc2ljSGVpZ2h0KSB7Ci0gICAgICAgICAgICBpbnQg
bG9zdFNwYWNlID0gY29sSGVpZ2h0IC0gY29sUmVjdC5oZWlnaHQoKTsKLSAgICAgICAgICAgIGlm
IChsb3N0U3BhY2UgPiByZW1haW5pbmdTbG9wU3BhY2UpIHsKLSAgICAgICAgICAgICAgICAvLyBS
ZWRlc3RyaWJ1dGUgdGhlIHNwYWNlIGFtb25nIHRoZSByZW1haW5pbmcgY29sdW1ucy4KLSAgICAg
ICAgICAgICAgICBpbnQgc3BhY2VUb1JlZGlzdHJpYnV0ZSA9IGxvc3RTcGFjZSAtIHJlbWFpbmlu
Z1Nsb3BTcGFjZTsKLSAgICAgICAgICAgICAgICBpbnQgcmVtYWluaW5nQ29sdW1ucyA9IGNvbENv
dW50IC0gaSArIDE7Ci0gICAgICAgICAgICAgICAgY29sSGVpZ2h0ICs9IHNwYWNlVG9SZWRpc3Ry
aWJ1dGUgLyByZW1haW5pbmdDb2x1bW5zOwotICAgICAgICAgICAgfSAKLSAgICAgICAgICAgIHJl
bWFpbmluZ1Nsb3BTcGFjZSA9IG1heCgwLCByZW1haW5pbmdTbG9wU3BhY2UgLSBsb3N0U3BhY2Up
OwotICAgICAgICB9Citib29sIFJlbmRlckJsb2NrOjpsYXlvdXRDb2x1bW5zKGJvb2wgaGFzU3Bl
Y2lmaWVkUGFnZUhlaWdodCwgaW50IHBhZ2VIZWlnaHQsIExheW91dFN0YXRlTWFpbnRhaW5lciYg
c3RhdGVQdXNoZXIpCit7CisgICAgaWYgKGhhc0NvbHVtbnMoKSkgeworICAgICAgICBDb2x1bW5J
bmZvKiBjb2xJbmZvID0gY29sdW1uSW5mbygpOworICAgICAgICBpbnQgZGVzaXJlZENvbHVtbkNv
dW50ID0gY29sSW5mby0+ZGVzaXJlZENvbHVtbkNvdW50KCk7CisgICAgICAgIGlmICghaGFzU3Bl
Y2lmaWVkUGFnZUhlaWdodCAmJiBjb250ZW50SGVpZ2h0KCkgPiBwYWdlSGVpZ2h0ICogZGVzaXJl
ZENvbHVtbkNvdW50KSB7CisgICAgICAgICAgICAvLyBOb3cgdGhhdCB3ZSBrbm93IHRoZSBpbnRy
aW5zaWMgaGVpZ2h0IG9mIHRoZSBjb2x1bW5zLCB3ZSBoYXZlIHRvIHJlYmFsYW5jZSB0aGVtLgor
ICAgICAgICAgICAgaW50IGNvbHVtbkhlaWdodCA9IG1heChjb2xJbmZvLT5taW5pbXVtQ29sdW1u
SGVpZ2h0KCksIChpbnQpY2VpbGYoKGZsb2F0KWNvbnRlbnRIZWlnaHQoKSAvIGRlc2lyZWRDb2x1
bW5Db3VudCkpOworICAgICAgICAgICAgaWYgKGNvbHVtbkhlaWdodCA+IDApIHsKKyAgICAgICAg
ICAgICAgICBzdGF0ZVB1c2hlci5wb3AoKTsKKyAgICAgICAgICAgICAgICBtX2V2ZXJIYWRMYXlv
dXQgPSB0cnVlOworICAgICAgICAgICAgICAgIGxheW91dEJsb2NrKGZhbHNlLCBjb2x1bW5IZWln
aHQpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAg
ICB9IAogICAgICAgICAKLSAgICAgICAgaWYgKHN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUikK
LSAgICAgICAgICAgIGN1cnJYICs9IGRlc2lyZWRDb2x1bW5XaWR0aCArIGNvbEdhcDsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgY3VyclggLT0gKGRlc2lyZWRDb2x1bW5XaWR0aCArIGNvbEdh
cCk7Ci0KLSAgICAgICAgY3VyclkgKz0gY29sUmVjdC5oZWlnaHQoKTsKLSAgICAgICAgYXZhaWxh
YmxlSGVpZ2h0IC09IGNvbFJlY3QuaGVpZ2h0KCk7CisgICAgICAgIGlmIChwYWdlSGVpZ2h0KSAv
LyBGSVhNRTogU2hvdWxkIHdlIHVzZSBsb3dlc3RQb3NpdGlvbiAoZXhjbHVkaW5nIG91ciBwb3Np
dGlvbmVkIG9iamVjdHMpIGluc3RlYWQgb2YgY29udGVudEhlaWdodCgpPworICAgICAgICAgICAg
Y29sSW5mby0+c2V0Q29sdW1uQ291bnRBbmRIZWlnaHQoY2VpbGYoKGZsb2F0KWNvbnRlbnRIZWln
aHQoKSAvIHBhZ2VIZWlnaHQpLCBwYWdlSGVpZ2h0KTsKIAotICAgICAgICBtYXhDb2xCb3R0b20g
PSBtYXgoY29sUmVjdC5ib3R0b20oKSwgbWF4Q29sQm90dG9tKTsKLQotICAgICAgICBpbmZvLT5h
ZGRDb2x1bW5SZWN0KGNvbFJlY3QpOwotICAgICAgICAKLSAgICAgICAgLy8gU3RhcnQgYWRkaW5n
IGluIG1vcmUgY29sdW1ucyBhcyBsb25nIGFzIHRoZXJlJ3Mgc3RpbGwgY29udGVudCBsZWZ0Lgot
ICAgICAgICBpZiAoY3VyclkgPCBlbmRPZkNvbnRlbnQgJiYgaSA9PSBjb2xDb3VudCAtIDEgJiYg
KGNvbXB1dGVJbnRyaW5zaWNIZWlnaHQgfHwgY29udGVudEhlaWdodCgpKSkKLSAgICAgICAgICAg
IGNvbENvdW50Kys7Ci0gICAgfQorICAgICAgICBpZiAoY29sdW1uQ291bnQoY29sSW5mbykpIHsK
KyAgICAgICAgICAgIEludFJlY3QgbGFzdFJlY3QgPSBjb2x1bW5SZWN0QXQoY29sSW5mbywgY29s
dW1uQ291bnQoY29sSW5mbykgLSAxKTsKKyAgICAgICAgICAgIGludCBvdmVyZmxvd0xlZnQgPSBz
dHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBSVEwgPyBtaW4oMCwgbGFzdFJlY3QueCgpKSA6IDA7Cisg
ICAgICAgICAgICBpbnQgb3ZlcmZsb3dSaWdodCA9IHN0eWxlKCktPmRpcmVjdGlvbigpID09IExU
UiA/IG1heCh3aWR0aCgpLCBsYXN0UmVjdC54KCkgKyBsYXN0UmVjdC53aWR0aCgpKSA6IDA7Cisg
ICAgICAgICAgICBpbnQgb3ZlcmZsb3dIZWlnaHQgPSBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3Ao
KSArIGNvbEluZm8tPmNvbHVtbkhlaWdodCgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBz
ZXRIZWlnaHQob3ZlcmZsb3dIZWlnaHQgKyBib3JkZXJCb3R0b20oKSArIHBhZGRpbmdCb3R0b20o
KSArIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoKSk7CiAKLSAgICBpZiAobWluaW11bUNvbHVt
bkhlaWdodCA+PSAwKSB7Ci0gICAgICAgIC8vIElmIG9yaWdpbmFsQ29sSGVpZ2h0IHdhcyB0b28g
c21hbGwsIHdlIG5lZWQgdG8gdHJ5IHRvIGxheW91dCBhZ2Fpbi4KLSAgICAgICAgcmV0dXJuIGxh
eW91dENvbHVtbnMoZW5kT2ZDb250ZW50LCBtaW5pbXVtQ29sdW1uSGVpZ2h0KTsKKyAgICAgICAg
ICAgIG1fb3ZlcmZsb3cuY2xlYXIoKTsKKyAgICAgICAgICAgIGFkZExheW91dE92ZXJmbG93KElu
dFJlY3Qob3ZlcmZsb3dMZWZ0LCAwLCBvdmVyZmxvd1JpZ2h0IC0gb3ZlcmZsb3dMZWZ0LCBvdmVy
Zmxvd0hlaWdodCkpOworICAgICAgICB9CiAgICAgfQotCi0gICAgaW50IG92ZXJmbG93UmlnaHQg
PSBtYXgod2lkdGgoKSwgY3VyclggLSBjb2xHYXApOwotICAgIGludCBvdmVyZmxvd0xlZnQgPSBt
aW4oMCwgY3VyclggKyBkZXNpcmVkQ29sdW1uV2lkdGggKyBjb2xHYXApOwotICAgIGludCBvdmVy
Zmxvd0hlaWdodCA9IG1heENvbEJvdHRvbTsKLSAgICBpbnQgdG9BZGQgPSBib3JkZXJCb3R0b20o
KSArIHBhZGRpbmdCb3R0b20oKSArIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoKTsKLSAgICAg
ICAgCi0gICAgaWYgKGNvbXB1dGVJbnRyaW5zaWNIZWlnaHQpCi0gICAgICAgIHNldEhlaWdodCht
YXhDb2xCb3R0b20gKyB0b0FkZCk7Ci0KLSAgICBtX292ZXJmbG93LmNsZWFyKCk7Ci0gICAgYWRk
TGF5b3V0T3ZlcmZsb3coSW50UmVjdChvdmVyZmxvd0xlZnQsIDAsIG92ZXJmbG93UmlnaHQgLSBv
dmVyZmxvd0xlZnQsIG92ZXJmbG93SGVpZ2h0KSk7Ci0KLSAgICB2LT5zZXRQcmludFJlY3QoSW50
UmVjdCgpKTsKLSAgICB2LT5zZXRUcnVuY2F0ZWRBdCgwKTsKICAgICAKLSAgICBBU1NFUlQoY29s
Q291bnQgPT0gaW5mby0+Y29sdW1uQ291bnQoKSk7Ci0gICAgCi0gICAgcmV0dXJuIGNvbnRlbnRC
b3R0b207CisgICAgcmV0dXJuIGZhbHNlOwogfQogCiB2b2lkIFJlbmRlckJsb2NrOjphZGp1c3RQ
b2ludFRvQ29sdW1uQ29udGVudHMoSW50UG9pbnQmIHBvaW50KSBjb25zdApAQCAtNDMzMCwxNyAr
NDQwMywxNyBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGp1c3RQb2ludFRvQ29sdW1uQ29uCiAgICAg
ICAgIHJldHVybjsKICAgICAKICAgICBDb2x1bW5JbmZvKiBjb2xJbmZvID0gY29sdW1uSW5mbygp
OwotICAgIGlmICghY29sSW5mby0+Y29sdW1uQ291bnQoKSkKKyAgICBpZiAoIWNvbHVtbkNvdW50
KGNvbEluZm8pKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBEZXRlcm1pbmUgd2hpY2ggY29s
dW1ucyB3ZSBpbnRlcnNlY3QuCiAgICAgaW50IGNvbEdhcCA9IGNvbHVtbkdhcCgpOwogICAgIGlu
dCBsZWZ0R2FwID0gY29sR2FwIC8gMjsKLSAgICBJbnRQb2ludCBjb2x1bW5Qb2ludChjb2xJbmZv
LT5jb2x1bW5SZWN0QXQoMCkubG9jYXRpb24oKSk7CisgICAgSW50UG9pbnQgY29sdW1uUG9pbnQo
Y29sdW1uUmVjdEF0KGNvbEluZm8sIDApLmxvY2F0aW9uKCkpOwogICAgIGludCB5T2Zmc2V0ID0g
MDsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY29sSW5mby0+Y29sdW1uQ291bnQoKTsg
aSsrKSB7CiAgICAgICAgIC8vIEFkZCBpbiBoYWxmIHRoZSBjb2x1bW4gZ2FwIHRvIHRoZSBsZWZ0
IGFuZCByaWdodCBvZiB0aGUgcmVjdC4KLSAgICAgICAgSW50UmVjdCBjb2xSZWN0ID0gY29sSW5m
by0+Y29sdW1uUmVjdEF0KGkpOworICAgICAgICBJbnRSZWN0IGNvbFJlY3QgPSBjb2x1bW5SZWN0
QXQoY29sSW5mbywgaSk7CiAgICAgICAgIEludFJlY3QgZ2FwQW5kQ29sdW1uUmVjdChjb2xSZWN0
LngoKSAtIGxlZnRHYXAsIGNvbFJlY3QueSgpLCBjb2xSZWN0LndpZHRoKCkgKyBjb2xHYXAsIGNv
bFJlY3QuaGVpZ2h0KCkpOwogCiAgICAgICAgIGlmIChwb2ludC54KCkgPj0gZ2FwQW5kQ29sdW1u
UmVjdC54KCkgJiYgcG9pbnQueCgpIDwgZ2FwQW5kQ29sdW1uUmVjdC5yaWdodCgpKSB7CkBAIC00
Mzc4LDcgKzQ0NTEsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGp1c3RSZWN0Rm9yQ29sdW1ucyhJ
CiAgICAgSW50UmVjdCByZXN1bHQ7CiAgICAgCiAgICAgLy8gRGV0ZXJtaW5lIHdoaWNoIGNvbHVt
bnMgd2UgaW50ZXJzZWN0LgotICAgIHVuc2lnbmVkIGNvbENvdW50ID0gY29sSW5mby0+Y29sdW1u
Q291bnQoKTsKKyAgICB1bnNpZ25lZCBjb2xDb3VudCA9IGNvbHVtbkNvdW50KGNvbEluZm8pOwog
ICAgIGlmICghY29sQ291bnQpCiAgICAgICAgIHJldHVybjsKICAgICAKQEAgLTQzODYsNyArNDQ1
OSw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkanVzdFJlY3RGb3JDb2x1bW5zKEkKICAgICAKICAg
ICBpbnQgY3VycllPZmZzZXQgPSAwOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb2xD
b3VudDsgaSsrKSB7Ci0gICAgICAgIEludFJlY3QgY29sUmVjdCA9IGNvbEluZm8tPmNvbHVtblJl
Y3RBdChpKTsKKyAgICAgICAgSW50UmVjdCBjb2xSZWN0ID0gY29sdW1uUmVjdEF0KGNvbEluZm8s
IGkpOwogICAgICAgICBpbnQgY3VyclhPZmZzZXQgPSBjb2xSZWN0LngoKSAtIGxlZnQ7CiAgICAg
ICAgIAogICAgICAgICBJbnRSZWN0IHJlcGFpbnRSZWN0ID0gcjsKQEAgLTQ0MTIsOSArNDQ4NSw5
IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkanVzdEZvckNvbHVtbnMoSW50U2kKIAogICAgIGludCBs
ZWZ0ID0gYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKTsKICAgICBpbnQgeU9mZnNldCA9IDA7
Ci0gICAgc2l6ZV90IGNvbHVtbkNvdW50ID0gY29sSW5mby0+Y29sdW1uQ291bnQoKTsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGNvbHVtbkNvdW50OyArK2kpIHsKLSAgICAgICAgSW50UmVj
dCBjb2x1bW5SZWN0ID0gY29sSW5mby0+Y29sdW1uUmVjdEF0KGkpOworICAgIHNpemVfdCBjb2xD
b3VudCA9IGNvbHVtbkNvdW50KGNvbEluZm8pOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
Y29sQ291bnQ7ICsraSkgeworICAgICAgICBJbnRSZWN0IGNvbHVtblJlY3QgPSBjb2x1bW5SZWN0
QXQoY29sSW5mbywgaSk7CiAgICAgICAgIGludCB4T2Zmc2V0ID0gY29sdW1uUmVjdC54KCkgLSBs
ZWZ0OwogICAgICAgICBpZiAocG9pbnQueSgpIDwgY29sdW1uUmVjdC5ib3R0b20oKSArIHlPZmZz
ZXQpIHsKICAgICAgICAgICAgIG9mZnNldC5leHBhbmQoeE9mZnNldCwgLXlPZmZzZXQpOwpAQCAt
NTM5MiwyNCArNTQ2NSw0NCBAQCB2b2lkIFJlbmRlckJsb2NrOjpjbGVhclRydW5jYXRpb24oKQog
CiB2b2lkIFJlbmRlckJsb2NrOjpzZXRNYXhUb3BNYXJnaW5zKGludCBwb3MsIGludCBuZWcpCiB7
Ci0gICAgaWYgKCFtX21heE1hcmdpbikgewotICAgICAgICBpZiAocG9zID09IE1heE1hcmdpbjo6
dG9wUG9zRGVmYXVsdCh0aGlzKSAmJiBuZWcgPT0gTWF4TWFyZ2luOjp0b3BOZWdEZWZhdWx0KHRo
aXMpKQorICAgIGlmICghbV9yYXJlRGF0YSkgeworICAgICAgICBpZiAocG9zID09IFJlbmRlckJs
b2NrUmFyZURhdGE6OnRvcFBvc0RlZmF1bHQodGhpcykgJiYgbmVnID09IFJlbmRlckJsb2NrUmFy
ZURhdGE6OnRvcE5lZ0RlZmF1bHQodGhpcykpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IG1fbWF4TWFyZ2luID0gbmV3IE1heE1hcmdpbih0aGlzKTsKKyAgICAgICAgbV9yYXJlRGF0YSA9
IG5ldyBSZW5kZXJCbG9ja1JhcmVEYXRhKHRoaXMpOwogICAgIH0KLSAgICBtX21heE1hcmdpbi0+
bV90b3BQb3MgPSBwb3M7Ci0gICAgbV9tYXhNYXJnaW4tPm1fdG9wTmVnID0gbmVnOworICAgIG1f
cmFyZURhdGEtPm1fdG9wUG9zID0gcG9zOworICAgIG1fcmFyZURhdGEtPm1fdG9wTmVnID0gbmVn
OwogfQogCiB2b2lkIFJlbmRlckJsb2NrOjpzZXRNYXhCb3R0b21NYXJnaW5zKGludCBwb3MsIGlu
dCBuZWcpCiB7Ci0gICAgaWYgKCFtX21heE1hcmdpbikgewotICAgICAgICBpZiAocG9zID09IE1h
eE1hcmdpbjo6Ym90dG9tUG9zRGVmYXVsdCh0aGlzKSAmJiBuZWcgPT0gTWF4TWFyZ2luOjpib3R0
b21OZWdEZWZhdWx0KHRoaXMpKQorICAgIGlmICghbV9yYXJlRGF0YSkgeworICAgICAgICBpZiAo
cG9zID09IFJlbmRlckJsb2NrUmFyZURhdGE6OmJvdHRvbVBvc0RlZmF1bHQodGhpcykgJiYgbmVn
ID09IFJlbmRlckJsb2NrUmFyZURhdGE6OmJvdHRvbU5lZ0RlZmF1bHQodGhpcykpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIG1fcmFyZURhdGEgPSBuZXcgUmVuZGVyQmxvY2tSYXJlRGF0
YSh0aGlzKTsKKyAgICB9CisgICAgbV9yYXJlRGF0YS0+bV9ib3R0b21Qb3MgPSBwb3M7CisgICAg
bV9yYXJlRGF0YS0+bV9ib3R0b21OZWcgPSBuZWc7Cit9CisKK3ZvaWQgUmVuZGVyQmxvY2s6OnNl
dFBhZ2luYXRpb25TdHJ1dChpbnQgc3RydXQpCit7CisgICAgaWYgKCFtX3JhcmVEYXRhKSB7Cisg
ICAgICAgIGlmIChzdHJ1dCA9PSAwKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX21h
eE1hcmdpbiA9IG5ldyBNYXhNYXJnaW4odGhpcyk7CisgICAgICAgIG1fcmFyZURhdGEgPSBuZXcg
UmVuZGVyQmxvY2tSYXJlRGF0YSh0aGlzKTsKICAgICB9Ci0gICAgbV9tYXhNYXJnaW4tPm1fYm90
dG9tUG9zID0gcG9zOwotICAgIG1fbWF4TWFyZ2luLT5tX2JvdHRvbU5lZyA9IG5lZzsKKyAgICBt
X3JhcmVEYXRhLT5tX3BhZ2luYXRpb25TdHJ1dCA9IHN0cnV0OworfQorCit2b2lkIFJlbmRlckJs
b2NrOjpzZXRQYWdlWShpbnQgeSkKK3sKKyAgICBpZiAoIW1fcmFyZURhdGEpIHsKKyAgICAgICAg
aWYgKHkgPT0gMCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV9yYXJlRGF0YSA9IG5l
dyBSZW5kZXJCbG9ja1JhcmVEYXRhKHRoaXMpOworICAgIH0KKyAgICBtX3JhcmVEYXRhLT5tX3Bh
Z2VZID0geTsKIH0KIAogdm9pZCBSZW5kZXJCbG9jazo6YWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50
UmVjdD4mIHJlY3RzLCBpbnQgdHgsIGludCB0eSkKQEAgLTU2NzAsNiArNTc2Myw5NyBAQCBSZW5k
ZXJCbG9jayogUmVuZGVyQmxvY2s6OmNyZWF0ZUFub255bW91CiAgICAgcmV0dXJuIG5ld0JveDsK
IH0KIAoraW50IFJlbmRlckJsb2NrOjpuZXh0UGFnZVRvcChpbnQgeVBvcykgY29uc3QKK3sKKyAg
ICBMYXlvdXRTdGF0ZSogbGF5b3V0U3RhdGUgPSB2aWV3KCktPmxheW91dFN0YXRlKCk7CisgICAg
aWYgKCFsYXlvdXRTdGF0ZS0+bV9wYWdlSGVpZ2h0KQorICAgICAgICByZXR1cm4geVBvczsKKyAg
ICAKKyAgICAvLyBUaGUgeVBvcyBpcyBpbiBvdXIgY29vcmRpbmF0ZSBzcGFjZS4gIFdlIGNhbiBh
ZGQgaW4gb3VyIHB1c2hlZCBvZmZzZXQuCisgICAgaW50IHBhZ2VIZWlnaHQgPSBsYXlvdXRTdGF0
ZS0+bV9wYWdlSGVpZ2h0OworICAgIGludCByZW1haW5pbmdIZWlnaHQgPSBwYWdlSGVpZ2h0IC0g
KChsYXlvdXRTdGF0ZS0+bV9sYXlvdXRPZmZzZXQgLSBsYXlvdXRTdGF0ZS0+bV9wYWdlT2Zmc2V0
KS5oZWlnaHQoKSArIHlQb3MpICUgcGFnZUhlaWdodDsKKyAgICByZXR1cm4geVBvcyArIHJlbWFp
bmluZ0hlaWdodDsKK30KKworaW50IFJlbmRlckJsb2NrOjphcHBseUJlZm9yZUJyZWFrKFJlbmRl
ckJveCogY2hpbGQsIGludCB5UG9zKQoreworICAgIGJvb2wgY2hlY2tQYWdlQnJlYWtzID0gZG9j
dW1lbnQoKS0+cGFnaW5hdGVkKCkgJiYgZG9jdW1lbnQoKS0+c2V0dGluZ3MoKS0+cGFnaW5hdGVE
dXJpbmdMYXlvdXRFbmFibGVkKCk7CisgICAgYm9vbCBjaGVja0NvbHVtbkJyZWFrcyA9IHZpZXco
KS0+bGF5b3V0U3RhdGUoKS0+cGFnaW5hdGluZ0NvbHVtbnMoKTsKKyAgICBib29sIGNoZWNrQmVm
b3JlQWx3YXlzID0gKGNoZWNrUGFnZUJyZWFrcyAmJiBjaGlsZC0+c3R5bGUoKS0+cGFnZUJyZWFr
QmVmb3JlKCkgPT0gUEJBTFdBWVMpIHx8IChjaGVja0NvbHVtbkJyZWFrcyAmJiBjaGlsZC0+c3R5
bGUoKS0+Y29sdW1uQnJlYWtCZWZvcmUoKSA9PSBQQkFMV0FZUyk7CisgICAgaWYgKGNoZWNrQmVm
b3JlQWx3YXlzKQorICAgICAgICByZXR1cm4gbmV4dFBhZ2VUb3AoeVBvcyk7CisgICAgcmV0dXJu
IHlQb3M7Cit9CisKK2ludCBSZW5kZXJCbG9jazo6YXBwbHlBZnRlckJyZWFrKFJlbmRlckJveCog
Y2hpbGQsIGludCB5UG9zLCBNYXJnaW5JbmZvJiBtYXJnaW5JbmZvKQoreworICAgIGJvb2wgY2hl
Y2tQYWdlQnJlYWtzID0gZG9jdW1lbnQoKS0+cGFnaW5hdGVkKCkgJiYgZG9jdW1lbnQoKS0+c2V0
dGluZ3MoKS0+cGFnaW5hdGVEdXJpbmdMYXlvdXRFbmFibGVkKCk7CisgICAgYm9vbCBjaGVja0Nv
bHVtbkJyZWFrcyA9IHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+cGFnaW5hdGluZ0NvbHVtbnMoKTsK
KyAgICBib29sIGNoZWNrQWZ0ZXJBbHdheXMgPSAoY2hlY2tQYWdlQnJlYWtzICYmIGNoaWxkLT5z
dHlsZSgpLT5wYWdlQnJlYWtBZnRlcigpID09IFBCQUxXQVlTKSB8fCAoY2hlY2tDb2x1bW5CcmVh
a3MgJiYgY2hpbGQtPnN0eWxlKCktPmNvbHVtbkJyZWFrQWZ0ZXIoKSA9PSBQQkFMV0FZUyk7Cisg
ICAgaWYgKGNoZWNrQWZ0ZXJBbHdheXMpIHsKKyAgICAgICAgbWFyZ2luSW5mby5zZXRCb3R0b21R
dWlyayh0cnVlKTsgLy8gQ2F1c2UgbWFyZ2lucyB0byBiZSBkaXNjYXJkZWQgZm9yIGFueSBmb2xs
b3dpbmcgY29udGVudC4KKyAgICAgICAgcmV0dXJuIG5leHRQYWdlVG9wKHlQb3MpOworICAgIH0K
KyAgICByZXR1cm4geVBvczsKK30KKworaW50IFJlbmRlckJsb2NrOjphZGp1c3RGb3JVbnNwbGl0
dGFibGVDaGlsZChSZW5kZXJCb3gqIGNoaWxkLCBpbnQgeVBvcywgYm9vbCBpbmNsdWRlTWFyZ2lu
cykKK3sKKyAgICBib29sIGlzVW5zcGxpdHRhYmxlID0gY2hpbGQtPmlzUmVwbGFjZWQoKSB8fCBj
aGlsZC0+c2Nyb2xsc092ZXJmbG93KCk7CisgICAgaWYgKCFpc1Vuc3BsaXR0YWJsZSkKKyAgICAg
ICAgcmV0dXJuIHlQb3M7CisgICAgaW50IGNoaWxkSGVpZ2h0ID0gY2hpbGQtPmhlaWdodCgpICsg
KGluY2x1ZGVNYXJnaW5zID8gY2hpbGQtPm1hcmdpblRvcCgpICsgY2hpbGQtPm1hcmdpbkJvdHRv
bSgpIDogMCk7CisgICAgTGF5b3V0U3RhdGUqIGxheW91dFN0YXRlID0gdmlldygpLT5sYXlvdXRT
dGF0ZSgpOworICAgIGlmIChsYXlvdXRTdGF0ZS0+bV9jb2x1bW5JbmZvKQorICAgICAgICBsYXlv
dXRTdGF0ZS0+bV9jb2x1bW5JbmZvLT51cGRhdGVNaW5pbXVtQ29sdW1uSGVpZ2h0KGNoaWxkSGVp
Z2h0KTsKKyAgICBpbnQgcGFnZUhlaWdodCA9IGxheW91dFN0YXRlLT5tX3BhZ2VIZWlnaHQ7Cisg
ICAgaWYgKCFwYWdlSGVpZ2h0IHx8IGNoaWxkSGVpZ2h0ID4gcGFnZUhlaWdodCkKKyAgICAgICAg
cmV0dXJuIHlQb3M7CisgICAgaW50IHJlbWFpbmluZ0hlaWdodCA9IHBhZ2VIZWlnaHQgLSAoKGxh
eW91dFN0YXRlLT5tX2xheW91dE9mZnNldCAtIGxheW91dFN0YXRlLT5tX3BhZ2VPZmZzZXQpLmhl
aWdodCgpICsgeVBvcykgJSBwYWdlSGVpZ2h0OworICAgIGlmIChyZW1haW5pbmdIZWlnaHQgPCBj
aGlsZEhlaWdodCkKKyAgICAgICAgcmV0dXJuIHlQb3MgKyByZW1haW5pbmdIZWlnaHQ7CisgICAg
cmV0dXJuIHlQb3M7Cit9CisKK3ZvaWQgUmVuZGVyQmxvY2s6OmFkanVzdExpbmVQb3NpdGlvbkZv
clBhZ2luYXRpb24oUm9vdElubGluZUJveCogbGluZUJveCwgaW50JiBkZWx0YSkKK3sKKyAgICAv
LyBGSVhNRTogRm9yIG5vdyB3ZSBwYWdpbmF0ZSB1c2luZyBsaW5lIG92ZXJmbG93LiAgVGhpcyBl
bnN1cmVzIHRoYXQgbGluZXMgZG9uJ3Qgb3ZlcmxhcCBhdCBhbGwgd2hlbiB3ZQorICAgIC8vIHB1
dCBhIHN0cnV0IGJldHdlZW4gdGhlbSBmb3IgcGFnaW5hdGlvbiBwdXJwb3Nlcy4gIEhvd2V2ZXIs
IHRoaXMgcmVhbGx5IGlzbid0IHRoZSBkZXNpcmVkIHJlbmRlcmluZywgc2luY2UKKyAgICAvLyB0
aGUgbGluZSBvbiB0aGUgdG9wIG9mIHRoZSBuZXh0IHBhZ2Ugd2lsbCBhcHBlYXIgdG9vIGZhciBk
b3duIHJlbGF0aXZlIHRvIHRoZSBzYW1lIGtpbmQgb2YgbGluZSBhdCB0aGUgdG9wCisgICAgLy8g
b2YgdGhlIGZpcnN0IGNvbHVtbi4KKyAgICAvLworICAgIC8vIFRoZSByZW5kZXJpbmcgd2Ugd291
bGQgbGlrZSB0byBzZWUgaXMgb25lIHdoZXJlIHRoZSBsaW5lVG9wIGlzIGF0IHRoZSB0b3Agb2Yg
dGhlIGNvbHVtbiwgYW5kIGFueSBsaW5lIG92ZXJmbG93CisgICAgLy8gc2ltcGx5IHNwaWxscyBv
dXQgYWJvdmUgdGhlIHRvcCBvZiB0aGUgY29sdW1uLiAgVGhpcyBlZmZlY3Qgd291bGQgbWF0Y2gg
d2hhdCBoYXBwZW5zIGF0IHRoZSB0b3Agb2YgdGhlIGZpcnN0IGNvbHVtbi4KKyAgICAvLyBXZSBj
YW4ndCBhY2hpZXZlIHRoaXMgcmVuZGVyaW5nLCBob3dldmVyLCB1bnRpbCB3ZSBzdG9wIGNvbHVt
bnMgZnJvbSBjbGlwcGluZyB0byB0aGUgY29sdW1uIGJvdW5kcyAodGh1cyBhbGxvd2luZworICAg
IC8vIGZvciBvdmVyZmxvdyB0byBvY2N1ciksIGFuZCB0aGVuIGNhY2hlIHZpc2libGUgb3ZlcmZs
b3cgZm9yIGVhY2ggY29sdW1uIHJlY3QuCisgICAgLy8KKyAgICAvLyBGdXJ0aGVybW9yZSwgdGhl
IHBhaW50IHdlIGhhdmUgdG8gZG8gd2hlbiBhIGNvbHVtbiBoYXMgb3ZlcmZsb3cgaGFzIHRvIGJl
IHNwZWNpYWwuICBXZSBuZWVkIHRvIGV4Y2x1ZGUKKyAgICAvLyBjb250ZW50IHRoYXQgcGFpbnRz
IGluIGEgcHJldmlvdXMgY29sdW1uIChhbmQgY29udGVudCB0aGF0IHBhaW50cyBpbiB0aGUgZm9s
bG93aW5nIGNvbHVtbikuCisgICAgLy8KKyAgICAvLyBGSVhNRTogQW5vdGhlciBwcm9ibGVtIHdp
dGggc2ltcGx5IG1vdmluZyBsaW5lcyBpcyB0aGF0IHRoZSBhdmFpbGFibGUgbGluZSB3aWR0aCBt
YXkgY2hhbmdlIChiZWNhdXNlIG9mIGZsb2F0cykuCisgICAgLy8gVGVjaG5pY2FsbHkgaWYgdGhl
IGxvY2F0aW9uIHdlIG1vdmUgdGhlIGxpbmUgdG8gaGFzIGEgZGlmZmVyZW50IGxpbmUgd2lkdGgg
dGhhbiBvdXIgb2xkIHBvc2l0aW9uLCB0aGVuIHdlIG5lZWQgdG8gZGlydHkgdGhlCisgICAgLy8g
bGluZSBhbmQgYWxsIGZvbGxvd2luZyBsaW5lcy4KKyAgICBMYXlvdXRTdGF0ZSogbGF5b3V0U3Rh
dGUgPSB2aWV3KCktPmxheW91dFN0YXRlKCk7CisgICAgaW50IHBhZ2VIZWlnaHQgPSBsYXlvdXRT
dGF0ZS0+bV9wYWdlSGVpZ2h0OworICAgIGludCB5UG9zID0gbGluZUJveC0+dG9wVmlzaWJsZU92
ZXJmbG93KCk7CisgICAgaW50IGxpbmVIZWlnaHQgPSBsaW5lQm94LT5ib3R0b21WaXNpYmxlT3Zl
cmZsb3coKSAtIHlQb3M7CisgICAgaWYgKGxheW91dFN0YXRlLT5tX2NvbHVtbkluZm8pCisgICAg
ICAgIGxheW91dFN0YXRlLT5tX2NvbHVtbkluZm8tPnVwZGF0ZU1pbmltdW1Db2x1bW5IZWlnaHQo
bGluZUhlaWdodCk7CisgICAgeVBvcyArPSBkZWx0YTsKKyAgICBsaW5lQm94LT5zZXRQYWdpbmF0
aW9uU3RydXQoMCk7CisgICAgaWYgKCFwYWdlSGVpZ2h0IHx8IGxpbmVIZWlnaHQgPiBwYWdlSGVp
Z2h0KQorICAgICAgICByZXR1cm47CisgICAgaW50IHJlbWFpbmluZ0hlaWdodCA9IHBhZ2VIZWln
aHQgLSAoKGxheW91dFN0YXRlLT5tX2xheW91dE9mZnNldCAtIGxheW91dFN0YXRlLT5tX3BhZ2VP
ZmZzZXQpLmhlaWdodCgpICsgeVBvcykgJSBwYWdlSGVpZ2h0OworICAgIGlmIChyZW1haW5pbmdI
ZWlnaHQgPCBsaW5lSGVpZ2h0KSB7CisgICAgICAgIGlmIChsaW5lQm94ID09IGZpcnN0Um9vdEJv
eCgpICYmICFpc1Bvc2l0aW9uZWQoKSAmJiAhaXNUYWJsZUNlbGwoKSkKKyAgICAgICAgICAgIHNl
dFBhZ2luYXRpb25TdHJ1dChyZW1haW5pbmdIZWlnaHQgKyAoKHlQb3MgPiAwICYmIGxpbmVIZWln
aHQgKyB5UG9zIDw9IHBhZ2VIZWlnaHQpID8geVBvcyA6IDApKTsKKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICBkZWx0YSArPSByZW1haW5pbmdIZWlnaHQ7CisgICAgICAgICAgICBsaW5lQm94
LT5zZXRQYWdpbmF0aW9uU3RydXQocmVtYWluaW5nSGVpZ2h0KTsKKyAgICAgICAgfQorICAgIH0g
IAorfQorIAogY29uc3QgY2hhciogUmVuZGVyQmxvY2s6OnJlbmRlck5hbWUoKSBjb25zdAogewog
ICAgIGlmIChpc0JvZHkoKSkKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAkocmV2aXNpb24g
NjY5MDMpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNCw2ICszNCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ29sdW1uSW5m
bzsKIGNsYXNzIElubGluZUl0ZXJhdG9yOworY2xhc3MgTGF5b3V0U3RhdGVNYWludGFpbmVyOwog
Y2xhc3MgUmVuZGVySW5saW5lOwogCiBzdHJ1Y3QgQmlkaVJ1bjsKQEAgLTcwLDcgKzcxLDcgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZChSZW5kZXJPYmplY3QqIG5ld0NoaWxk
LCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gMCk7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92
ZUNoaWxkKFJlbmRlck9iamVjdCopOwogCi0gICAgdmlydHVhbCB2b2lkIGxheW91dEJsb2NrKGJv
b2wgcmVsYXlvdXRDaGlsZHJlbik7CisgICAgdmlydHVhbCB2b2lkIGxheW91dEJsb2NrKGJvb2wg
cmVsYXlvdXRDaGlsZHJlbiwgaW50IHBhZ2VIZWlnaHQgPSAwKTsKIAogICAgIHZvaWQgaW5zZXJ0
UG9zaXRpb25lZE9iamVjdChSZW5kZXJCb3gqKTsKICAgICB2b2lkIHJlbW92ZVBvc2l0aW9uZWRP
YmplY3QoUmVuZGVyQm94Kik7CkBAIC04OSw2ICs5MCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQg
bWFya0FsbERlc2NlbmRhbnRzV2l0aEZsb2F0c0ZvckxheW91dChSZW5kZXJCb3gqIGZsb2F0VG9S
ZW1vdmUgPSAwLCBib29sIGluTGF5b3V0ID0gdHJ1ZSk7CiAgICAgdm9pZCBtYXJrUG9zaXRpb25l
ZE9iamVjdHNGb3JMYXlvdXQoKTsKKyAgICB2b2lkIG1hcmtEZXNjZW5kYW50QmxvY2tzQW5kTGlu
ZXNGb3JMYXlvdXQoYm9vbCBpbkxheW91dCA9IHRydWUpOwogCiAgICAgYm9vbCBjb250YWluc0Zs
b2F0cygpIHsgcmV0dXJuIG1fZmxvYXRpbmdPYmplY3RzICYmICFtX2Zsb2F0aW5nT2JqZWN0cy0+
aXNFbXB0eSgpOyB9CiAgICAgYm9vbCBjb250YWluc0Zsb2F0KFJlbmRlck9iamVjdCopOwpAQCAt
MTUxLDYgKzE1MywxMCBAQCBwdWJsaWM6CiAKICAgICBDb2x1bW5JbmZvKiBjb2x1bW5JbmZvKCkg
Y29uc3Q7CiAgICAgaW50IGNvbHVtbkdhcCgpIGNvbnN0OworICAgIAorICAgIC8vIFRoZXNlIHR3
byBmdW5jdGlvbnMgdGFrZSB0aGUgQ29sdW1uSW5mbyogdG8gYXZvaWQgcmVwZWF0ZWQgbG9va3Vw
cyBvZiB0aGUgaW5mbyBpbiB0aGUgZ2xvYmFsIEhhc2hNYXAuCisgICAgdW5zaWduZWQgY29sdW1u
Q291bnQoQ29sdW1uSW5mbyopIGNvbnN0OworICAgIEludFJlY3QgY29sdW1uUmVjdEF0KENvbHVt
bkluZm8qLCB1bnNpZ25lZCkgY29uc3Q7CiAKIHByb3RlY3RlZDoKICAgICAvLyBUaGVzZSBmdW5j
dGlvbnMgYXJlIG9ubHkgdXNlZCBpbnRlcm5hbGx5IHRvIG1hbmlwdWxhdGUgdGhlIHJlbmRlciB0
cmVlIHN0cnVjdHVyZSB2aWEgcmVtb3ZlL2luc2VydC9hcHBlbmRDaGlsZE5vZGUuCkBAIC0xNzcs
MjAgKzE4MywyNSBAQCBwcm90ZWN0ZWQ6CiAgICAgfQogICAgIHZvaWQgbW92ZUNoaWxkcmVuVG8o
UmVuZGVyQmxvY2sqIHRvLCBSZW5kZXJPYmplY3QqIHN0YXJ0Q2hpbGQsIFJlbmRlck9iamVjdCog
ZW5kQ2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQsIGJvb2wgZnVsbFJlbW92ZUluc2Vy
dCA9IGZhbHNlKTsKICAgICAKLSAgICBpbnQgbWF4VG9wUG9zTWFyZ2luKCkgY29uc3QgeyByZXR1
cm4gbV9tYXhNYXJnaW4gPyBtX21heE1hcmdpbi0+bV90b3BQb3MgOiBNYXhNYXJnaW46OnRvcFBv
c0RlZmF1bHQodGhpcyk7IH0KLSAgICBpbnQgbWF4VG9wTmVnTWFyZ2luKCkgY29uc3QgeyByZXR1
cm4gbV9tYXhNYXJnaW4gPyBtX21heE1hcmdpbi0+bV90b3BOZWcgOiBNYXhNYXJnaW46OnRvcE5l
Z0RlZmF1bHQodGhpcyk7IH0KLSAgICBpbnQgbWF4Qm90dG9tUG9zTWFyZ2luKCkgY29uc3QgeyBy
ZXR1cm4gbV9tYXhNYXJnaW4gPyBtX21heE1hcmdpbi0+bV9ib3R0b21Qb3MgOiBNYXhNYXJnaW46
OmJvdHRvbVBvc0RlZmF1bHQodGhpcyk7IH0KLSAgICBpbnQgbWF4Qm90dG9tTmVnTWFyZ2luKCkg
Y29uc3QgeyByZXR1cm4gbV9tYXhNYXJnaW4gPyBtX21heE1hcmdpbi0+bV9ib3R0b21OZWcgOiBN
YXhNYXJnaW46OmJvdHRvbU5lZ0RlZmF1bHQodGhpcyk7IH0KKyAgICBpbnQgbWF4VG9wUG9zTWFy
Z2luKCkgY29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1fdG9wUG9zIDog
UmVuZGVyQmxvY2tSYXJlRGF0YTo6dG9wUG9zRGVmYXVsdCh0aGlzKTsgfQorICAgIGludCBtYXhU
b3BOZWdNYXJnaW4oKSBjb25zdCB7IHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+bV90
b3BOZWcgOiBSZW5kZXJCbG9ja1JhcmVEYXRhOjp0b3BOZWdEZWZhdWx0KHRoaXMpOyB9CisgICAg
aW50IG1heEJvdHRvbVBvc01hcmdpbigpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3Jh
cmVEYXRhLT5tX2JvdHRvbVBvcyA6IFJlbmRlckJsb2NrUmFyZURhdGE6OmJvdHRvbVBvc0RlZmF1
bHQodGhpcyk7IH0KKyAgICBpbnQgbWF4Qm90dG9tTmVnTWFyZ2luKCkgY29uc3QgeyByZXR1cm4g
bV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1fYm90dG9tTmVnIDogUmVuZGVyQmxvY2tSYXJlRGF0
YTo6Ym90dG9tTmVnRGVmYXVsdCh0aGlzKTsgfQorICAgIGludCBwYWdpbmF0aW9uU3RydXQoKSBj
b25zdCB7IHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+bV9wYWdpbmF0aW9uU3RydXQg
OiAwOyB9CisgICAgaW50IHBhZ2VZKCkgY29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFy
ZURhdGEtPm1fcGFnZVkgOiAwOyB9CiAgICAgdm9pZCBzZXRNYXhUb3BNYXJnaW5zKGludCBwb3Ms
IGludCBuZWcpOwogICAgIHZvaWQgc2V0TWF4Qm90dG9tTWFyZ2lucyhpbnQgcG9zLCBpbnQgbmVn
KTsKLSAgICAKKyAgICB2b2lkIHNldFBhZ2luYXRpb25TdHJ1dChpbnQgc3RydXQpOworICAgIHZv
aWQgc2V0UGFnZVkoaW50IHkpOworCiAgICAgdm9pZCBpbml0TWF4TWFyZ2luVmFsdWVzKCkKICAg
ICB7Ci0gICAgICAgIGlmIChtX21heE1hcmdpbikgewotICAgICAgICAgICAgbV9tYXhNYXJnaW4t
Pm1fdG9wUG9zID0gTWF4TWFyZ2luOjp0b3BQb3NEZWZhdWx0KHRoaXMpOwotICAgICAgICAgICAg
bV9tYXhNYXJnaW4tPm1fdG9wTmVnID0gTWF4TWFyZ2luOjp0b3BOZWdEZWZhdWx0KHRoaXMpOwot
ICAgICAgICAgICAgbV9tYXhNYXJnaW4tPm1fYm90dG9tUG9zID0gTWF4TWFyZ2luOjpib3R0b21Q
b3NEZWZhdWx0KHRoaXMpOwotICAgICAgICAgICAgbV9tYXhNYXJnaW4tPm1fYm90dG9tTmVnID0g
TWF4TWFyZ2luOjpib3R0b21OZWdEZWZhdWx0KHRoaXMpOworICAgICAgICBpZiAobV9yYXJlRGF0
YSkgeworICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV90b3BQb3MgPSBSZW5kZXJCbG9ja1JhcmVE
YXRhOjp0b3BQb3NEZWZhdWx0KHRoaXMpOworICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV90b3BO
ZWcgPSBSZW5kZXJCbG9ja1JhcmVEYXRhOjp0b3BOZWdEZWZhdWx0KHRoaXMpOworICAgICAgICAg
ICAgbV9yYXJlRGF0YS0+bV9ib3R0b21Qb3MgPSBSZW5kZXJCbG9ja1JhcmVEYXRhOjpib3R0b21Q
b3NEZWZhdWx0KHRoaXMpOworICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9ib3R0b21OZWcgPSBS
ZW5kZXJCbG9ja1JhcmVEYXRhOjpib3R0b21OZWdEZWZhdWx0KHRoaXMpOworICAgICAgICAgICAg
bV9yYXJlRGF0YS0+bV9wYWdpbmF0aW9uU3RydXQgPSAwOwogICAgICAgICB9CiAgICAgfQogCkBA
IC0yOTcsNyArMzA4LDggQEAgcHJpdmF0ZToKIAogICAgIC8vIFRoZSBmb2xsb3dpbmcgZnVuY3Rp
b25zJyBpbXBsZW1lbnRhdGlvbnMgYXJlIGluIFJlbmRlckJsb2NrTGluZUxheW91dC5jcHAuCiAg
ICAgUm9vdElubGluZUJveCogZGV0ZXJtaW5lU3RhcnRQb3NpdGlvbihib29sJiBmaXJzdExpbmUs
IGJvb2wmIGZ1bGxMYXlvdXQsIGJvb2wmIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElubGluZUJpZGlSZXNvbHZlciYs
IFZlY3RvcjxGbG9hdFdpdGhSZWN0PiYgZmxvYXRzLCB1bnNpZ25lZCYgbnVtQ2xlYW5GbG9hdHMp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5saW5lQmlkaVJl
c29sdmVyJiwgVmVjdG9yPEZsb2F0V2l0aFJlY3Q+JiBmbG9hdHMsIHVuc2lnbmVkJiBudW1DbGVh
bkZsb2F0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wm
IHVzZVJlcGFpbnRCb3VuZHMsIGludCYgcmVwYWludFRvcCwgaW50JiByZXBhaW50Qm90dG9tKTsK
ICAgICBSb290SW5saW5lQm94KiBkZXRlcm1pbmVFbmRQb3NpdGlvbihSb290SW5saW5lQm94KiBz
dGFydEJveCwgSW5saW5lSXRlcmF0b3ImIGNsZWFuTGluZVN0YXJ0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEJpZGlTdGF0dXMmIGNsZWFuTGluZUJpZGlTdGF0dXMs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50JiB5UG9zKTsKQEAg
LTQxNiw4ICs0MjgsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgb2Zmc2V0Rm9yQ29udGVudHMoaW50
JiB0eCwgaW50JiB0eSkgY29uc3Q7CiAKICAgICB2b2lkIGNhbGNDb2x1bW5XaWR0aCgpOwotICAg
IGludCBsYXlvdXRDb2x1bW5zKGludCBlbmRPZkNvbnRlbnQgPSAtMSwgaW50IHJlcXVlc3RlZENv
bHVtbkhlaWdodCA9IC0xKTsKLSAgICBpbnQgdmlzaWJsZVRvcE9mSGlnaGVzdEZsb2F0RXh0ZW5k
aW5nQmVsb3coaW50IGJvdHRvbSwgaW50IG1heEhlaWdodCkgY29uc3Q7CisgICAgYm9vbCBsYXlv
dXRDb2x1bW5zKGJvb2wgaGFzU3BlY2lmaWVkUGFnZUhlaWdodCwgaW50IHBhZ2VIZWlnaHQsIExh
eW91dFN0YXRlTWFpbnRhaW5lciYpOwogICAgIHZvaWQgbWFrZUNoaWxkcmVuQW5vbnltb3VzQ29s
dW1uQmxvY2tzKFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQsIFJlbmRlckJsb2NrKiBuZXdCbG9j
a0JveCwgUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCk7CiAKICAgICBib29sIGV4cGFuZHNUb0VuY2xv
c2VPdmVyaGFuZ2luZ0Zsb2F0cygpIGNvbnN0OwpAQCAtNTM5LDYgKzU1MCwxMyBAQCBwcml2YXRl
OgogICAgIHZvaWQgc2V0Q29sbGFwc2VkQm90dG9tTWFyZ2luKGNvbnN0IE1hcmdpbkluZm8mKTsK
ICAgICAvLyBFbmQgaGVscGVyIGZ1bmN0aW9ucyBhbmQgc3RydWN0cyB1c2VkIGJ5IGxheW91dEJs
b2NrQ2hpbGRyZW4uCiAKKyAgICAvLyBQYWdpbmF0aW9uIHJvdXRpbmVzLgorICAgIGludCBuZXh0
UGFnZVRvcChpbnQgeVBvcykgY29uc3Q7IC8vIFJldHVybnMgdGhlIHRvcCBvZiB0aGUgbmV4dCBw
YWdlIGZvbGxvd2luZyB5UG9zLgorICAgIGludCBhcHBseUJlZm9yZUJyZWFrKFJlbmRlckJveCog
Y2hpbGQsIGludCB5UG9zKTsgLy8gSWYgdGhlIGNoaWxkIGhhcyBhIGJlZm9yZSBicmVhaywgdGhl
biByZXR1cm4gYSBuZXcgeVBvcyB0aGF0IHNoaWZ0cyB0byB0aGUgdG9wIG9mIHRoZSBuZXh0IHBh
Z2UvY29sdW1uLgorICAgIGludCBhcHBseUFmdGVyQnJlYWsoUmVuZGVyQm94KiBjaGlsZCwgaW50
IHlQb3MsIE1hcmdpbkluZm8mIG1hcmdpbkluZm8pOyAvLyBJZiB0aGUgY2hpbGQgaGFzIGFuIGFm
dGVyIGJyZWFrLCB0aGVuIHJldHVybiBhIG5ldyB5UG9zIHRoYXQgc2hpZnRzIHRvIHRoZSB0b3Ag
b2YgdGhlIG5leHQgcGFnZS9jb2x1bW4uCisgICAgaW50IGFkanVzdEZvclVuc3BsaXR0YWJsZUNo
aWxkKFJlbmRlckJveCogY2hpbGQsIGludCB5UG9zLCBib29sIGluY2x1ZGVNYXJnaW5zID0gZmFs
c2UpOyAvLyBJZiB0aGUgY2hpbGQgaXMgdW5zcGxpdHRhYmxlIGFuZCBjYW4ndCBmaXQgb24gdGhl
IGN1cnJlbnQgcGFnZSwgcmV0dXJuIHRoZSB0b3Agb2YgdGhlIG5leHQgcGFnZS9jb2x1bW4uCisg
ICAgdm9pZCBhZGp1c3RMaW5lUG9zaXRpb25Gb3JQYWdpbmF0aW9uKFJvb3RJbmxpbmVCb3gqLCBp
bnQmIGRlbHRhWSk7IC8vIENvbXB1dGVzIGEgZGVsdGFZIHZhbHVlIHRoYXQgcHV0IGEgbGluZSBh
dCB0aGUgdG9wIG9mIHRoZSBuZXh0IHBhZ2UgaWYgaXQgZG9lc24ndCBmaXQgb24gdGhlIGN1cnJl
bnQgcGFnZS4KKwogICAgIHR5cGVkZWYgUG9zaXRpb25lZE9iamVjdHNMaXN0SGFzaFNldDo6Y29u
c3RfaXRlcmF0b3IgSXRlcmF0b3I7CiAgICAgRGVwcmVjYXRlZFB0ckxpc3Q8RmxvYXRpbmdPYmpl
Y3Q+KiBtX2Zsb2F0aW5nT2JqZWN0czsKICAgICAKQEAgLTU1MSwxMiArNTY5LDE0IEBAIHByaXZh
dGU6CiAgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIG1fY29udGludWF0aW9uOwogCiAgICAgLy8g
QWxsb2NhdGVkIG9ubHkgd2hlbiBzb21lIG9mIHRoZXNlIGZpZWxkcyBoYXZlIG5vbi1kZWZhdWx0
IHZhbHVlcwotICAgIHN0cnVjdCBNYXhNYXJnaW4gOiBOb25jb3B5YWJsZSB7Ci0gICAgICAgIE1h
eE1hcmdpbihjb25zdCBSZW5kZXJCbG9jayogbykgCisgICAgc3RydWN0IFJlbmRlckJsb2NrUmFy
ZURhdGEgOiBOb25jb3B5YWJsZSB7CisgICAgICAgIFJlbmRlckJsb2NrUmFyZURhdGEoY29uc3Qg
UmVuZGVyQmxvY2sqIG8pIAogICAgICAgICAgICAgOiBtX3RvcFBvcyh0b3BQb3NEZWZhdWx0KG8p
KQogICAgICAgICAgICAgLCBtX3RvcE5lZyh0b3BOZWdEZWZhdWx0KG8pKQogICAgICAgICAgICAg
LCBtX2JvdHRvbVBvcyhib3R0b21Qb3NEZWZhdWx0KG8pKQogICAgICAgICAgICAgLCBtX2JvdHRv
bU5lZyhib3R0b21OZWdEZWZhdWx0KG8pKQorICAgICAgICAgICAgLCBtX3BhZ2luYXRpb25TdHJ1
dCgwKQorICAgICAgICAgICAgLCBtX3BhZ2VZKDApCiAgICAgICAgIHsgCiAgICAgICAgIH0KIApA
QCAtNTY0LDE0ICs1ODQsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgc3RhdGljIGludCB0b3BOZWdE
ZWZhdWx0KGNvbnN0IFJlbmRlckJsb2NrKiBvKSB7IHJldHVybiBvLT5tYXJnaW5Ub3AoKSA8IDAg
PyAtby0+bWFyZ2luVG9wKCkgOiAwOyB9CiAgICAgICAgIHN0YXRpYyBpbnQgYm90dG9tUG9zRGVm
YXVsdChjb25zdCBSZW5kZXJCbG9jayogbykgeyByZXR1cm4gby0+bWFyZ2luQm90dG9tKCkgPiAw
ID8gby0+bWFyZ2luQm90dG9tKCkgOiAwOyB9CiAgICAgICAgIHN0YXRpYyBpbnQgYm90dG9tTmVn
RGVmYXVsdChjb25zdCBSZW5kZXJCbG9jayogbykgeyByZXR1cm4gby0+bWFyZ2luQm90dG9tKCkg
PCAwID8gLW8tPm1hcmdpbkJvdHRvbSgpIDogMDsgfQotCisgICAgICAgIAogICAgICAgICBpbnQg
bV90b3BQb3M7CiAgICAgICAgIGludCBtX3RvcE5lZzsKICAgICAgICAgaW50IG1fYm90dG9tUG9z
OwogICAgICAgICBpbnQgbV9ib3R0b21OZWc7CisgICAgICAgIGludCBtX3BhZ2luYXRpb25TdHJ1
dDsKKyAgICAgICAgaW50IG1fcGFnZVk7CiAgICAgIH07CiAKLSAgICBNYXhNYXJnaW4qIG1fbWF4
TWFyZ2luOworICAgIFJlbmRlckJsb2NrUmFyZURhdGEqIG1fcmFyZURhdGE7CiAKICAgICBSZW5k
ZXJPYmplY3RDaGlsZExpc3QgbV9jaGlsZHJlbjsKICAgICBSZW5kZXJMaW5lQm94TGlzdCBtX2xp
bmVCb3hlczsgICAvLyBBbGwgb2YgdGhlIHJvb3QgbGluZSBib3hlcyBjcmVhdGVkIGZvciB0aGlz
IGJsb2NrIGZsb3cuICBGb3IgZXhhbXBsZSwgPGRpdj5IZWxsbzxicj53b3JsZC48L2Rpdj4gd2ls
bCBoYXZlIHR3byB0b3RhbCBsaW5lcyBmb3IgdGhlIDxkaXY+LgpJbmRleDogV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCShyZXZpc2lvbiA2Njg4NikKKysrIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJl
bmRlckxpc3RNYXJrZXIuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCisjaW5jbHVkZSAiU2V0
dGluZ3MuaCIKICNpbmNsdWRlICJUcmFpbGluZ0Zsb2F0c1Jvb3RJbmxpbmVCb3guaCIKICNpbmNs
dWRlICJicmVha19saW5lcy5oIgogI2luY2x1ZGUgPHd0Zi9BbHdheXNJbmxpbmUuaD4KQEAgLTU3
MCwxMiArNTcxLDExIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dElubGluZUNoaWxkcmVuKGIK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChvLT5pc1Bvc2l0aW9uZWQoKSkKICAg
ICAgICAgICAgICAgICAgICAgby0+Y29udGFpbmluZ0Jsb2NrKCktPmluc2VydFBvc2l0aW9uZWRP
YmplY3QoYm94KTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKG8tPmlzRmxvYXRpbmcoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0cy5hcHBl
bmQoRmxvYXRXaXRoUmVjdChib3gpKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZnVs
bExheW91dCB8fCBvLT5uZWVkc0xheW91dCgpKSAvLyBSZXBsYWNlZCBlbGVtZW50cwotICAgICAg
ICAgICAgICAgICAgICAgICAgdG9SZW5kZXJCb3gobyktPmRpcnR5TGluZUJveGVzKGZ1bGxMYXlv
dXQpOwotCisgICAgICAgICAgICAgICAgZWxzZSBpZiAoby0+aXNGbG9hdGluZygpKQorICAgICAg
ICAgICAgICAgICAgICBmbG9hdHMuYXBwZW5kKEZsb2F0V2l0aFJlY3QoYm94KSk7CisgICAgICAg
ICAgICAgICAgZWxzZSBpZiAoZnVsbExheW91dCB8fCBvLT5uZWVkc0xheW91dCgpKSB7CisgICAg
ICAgICAgICAgICAgICAgIC8vIFJlcGxhY2VkIGVsZW1lbnRzCisgICAgICAgICAgICAgICAgICAg
IHRvUmVuZGVyQm94KG8pLT5kaXJ0eUxpbmVCb3hlcyhmdWxsTGF5b3V0KTsKICAgICAgICAgICAg
ICAgICAgICAgby0+bGF5b3V0SWZOZWVkZWQoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9IGVsc2UgaWYgKG8tPmlzVGV4dCgpIHx8IChvLT5pc1JlbmRlcklubGluZSgpICYmICFl
bmRPZklubGluZSkpIHsKQEAgLTU5NCw3ICs1OTQsOCBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlv
dXRJbmxpbmVDaGlsZHJlbihiCiAgICAgICAgIHVuc2lnbmVkIGZsb2F0SW5kZXg7CiAgICAgICAg
IGJvb2wgZmlyc3RMaW5lID0gdHJ1ZTsKICAgICAgICAgYm9vbCBwcmV2aW91c0xpbmVCcm9rZUNs
ZWFubHkgPSB0cnVlOwotICAgICAgICBSb290SW5saW5lQm94KiBzdGFydExpbmUgPSBkZXRlcm1p
bmVTdGFydFBvc2l0aW9uKGZpcnN0TGluZSwgZnVsbExheW91dCwgcHJldmlvdXNMaW5lQnJva2VD
bGVhbmx5LCByZXNvbHZlciwgZmxvYXRzLCBmbG9hdEluZGV4KTsKKyAgICAgICAgUm9vdElubGlu
ZUJveCogc3RhcnRMaW5lID0gZGV0ZXJtaW5lU3RhcnRQb3NpdGlvbihmaXJzdExpbmUsIGZ1bGxM
YXlvdXQsIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSwgcmVzb2x2ZXIsIGZsb2F0cywgZmxvYXRJ
bmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1c2VSZXBhaW50Qm91bmRzLCByZXBhaW50VG9wLCByZXBhaW50Qm90dG9tKTsKIAog
ICAgICAgICBpZiAoZnVsbExheW91dCAmJiBoYXNJbmxpbmVDaGlsZCAmJiAhc2VsZk5lZWRzTGF5
b3V0KCkpIHsKICAgICAgICAgICAgIHNldE5lZWRzTGF5b3V0KHRydWUsIGZhbHNlKTsgIC8vIE1h
cmsgb3Vyc2VsdmVzIGFzIG5lZWRpbmcgYSBmdWxsIGxheW91dC4gVGhpcyB3YXkgd2UnbGwgcmVw
YWludCBsaWtlCkBAIC02MjIsOSArNjIzLDExIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dElu
bGluZUNoaWxkcmVuKGIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgOiBkZXRl
cm1pbmVFbmRQb3NpdGlvbihzdGFydExpbmUsIGNsZWFuTGluZVN0YXJ0LCBjbGVhbkxpbmVCaWRp
U3RhdHVzLCBlbmRMaW5lWVBvcyk7CiAKICAgICAgICAgaWYgKHN0YXJ0TGluZSkgewotICAgICAg
ICAgICAgdXNlUmVwYWludEJvdW5kcyA9IHRydWU7Ci0gICAgICAgICAgICByZXBhaW50VG9wID0g
aGVpZ2h0KCk7Ci0gICAgICAgICAgICByZXBhaW50Qm90dG9tID0gaGVpZ2h0KCk7CisgICAgICAg
ICAgICBpZiAoIXVzZVJlcGFpbnRCb3VuZHMpIHsKKyAgICAgICAgICAgICAgICB1c2VSZXBhaW50
Qm91bmRzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZXBhaW50VG9wID0gaGVpZ2h0KCk7Cisg
ICAgICAgICAgICAgICAgcmVwYWludEJvdHRvbSA9IGhlaWdodCgpOworICAgICAgICAgICAgfQog
ICAgICAgICAgICAgUmVuZGVyQXJlbmEqIGFyZW5hID0gcmVuZGVyQXJlbmEoKTsKICAgICAgICAg
ICAgIFJvb3RJbmxpbmVCb3gqIGJveCA9IHN0YXJ0TGluZTsKICAgICAgICAgICAgIHdoaWxlIChi
b3gpIHsKQEAgLTY1OSw2ICs2NjIsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVD
aGlsZHJlbihiCiAgICAgICAgIGJvb2wgY2hlY2tGb3JGbG9hdHNGcm9tTGFzdExpbmUgPSBmYWxz
ZTsKIAogICAgICAgICBib29sIGlzTGluZUVtcHR5ID0gdHJ1ZTsKKyAgICAgICAgYm9vbCBwYWdp
bmF0ZWQgPSB2aWV3KCktPmxheW91dFN0YXRlKCktPnBhZ2luYXRlZCgpOwogCiAgICAgICAgIHdo
aWxlICghZW5kLmF0RW5kKCkpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBJcyB0aGlzIGNoZWNr
IG5lY2Vzc2FyeSBiZWZvcmUgdGhlIGZpcnN0IGl0ZXJhdGlvbiBvciBjYW4gaXQgYmUgbW92ZWQg
dG8gdGhlIGVuZD8KQEAgLTc4Niw2ICs3OTAsMTcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0
SW5saW5lQ2hpbGRyZW4oYgogICAgICAgICAgICAgICAgICAgICAgICAgcmVwYWludFRvcCA9IG1p
bihyZXBhaW50VG9wLCBsaW5lQm94LT50b3BWaXNpYmxlT3ZlcmZsb3coKSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICByZXBhaW50Qm90dG9tID0gbWF4KHJlcGFpbnRCb3R0b20sIGxpbmVCb3gt
PmJvdHRvbVZpc2libGVPdmVyZmxvdygpKTsKICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBhZ2luYXRlZCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGFkanVzdG1lbnQgPSAwOworICAgICAgICAgICAgICAg
ICAgICAgICAgYWRqdXN0TGluZVBvc2l0aW9uRm9yUGFnaW5hdGlvbihsaW5lQm94LCBhZGp1c3Rt
ZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhZGp1c3RtZW50KSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbGluZUJveC0+YWRqdXN0UG9zaXRpb24oMCwgYWRqdXN0bWVu
dCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVzZVJlcGFpbnRCb3VuZHMpIC8v
IFRoaXMgY2FuIG9ubHkgYmUgYSBwb3NpdGl2ZSBhZGp1c3RtZW50LCBzbyBubyBuZWVkIHRvIHVw
ZGF0ZSByZXBhaW50VG9wLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBhaW50
Qm90dG9tID0gbWF4KHJlcGFpbnRCb3R0b20sIGxpbmVCb3gtPmJvdHRvbVZpc2libGVPdmVyZmxv
dygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRIZWlnaHQobGluZUJveC0+Ymxv
Y2tIZWlnaHQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBmaXJzdExpbmUgPSBm
YWxzZTsKQEAgLTgyMCw2ICs4MzUsMTAgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0SW5saW5l
Q2hpbGRyZW4oYgogICAgICAgICAgICAgICAgIGludCBkZWx0YSA9IGhlaWdodCgpIC0gZW5kTGlu
ZVlQb3M7CiAgICAgICAgICAgICAgICAgZm9yIChSb290SW5saW5lQm94KiBsaW5lID0gZW5kTGlu
ZTsgbGluZTsgbGluZSA9IGxpbmUtPm5leHRSb290Qm94KCkpIHsKICAgICAgICAgICAgICAgICAg
ICAgbGluZS0+YXR0YWNoTGluZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAocGFnaW5hdGVk
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWx0YSAtPSBsaW5lLT5wYWdpbmF0aW9uU3Ry
dXQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkanVzdExpbmVQb3NpdGlvbkZvclBhZ2lu
YXRpb24obGluZSwgZGVsdGEpOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgIGlmIChkZWx0YSkgewogICAgICAgICAgICAgICAgICAgICAgICAgcmVwYWludFRvcCA9
IG1pbihyZXBhaW50VG9wLCBsaW5lLT50b3BWaXNpYmxlT3ZlcmZsb3coKSArIG1pbihkZWx0YSwg
MCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmVwYWludEJvdHRvbSA9IG1heChyZXBhaW50
Qm90dG9tLCBsaW5lLT5ib3R0b21WaXNpYmxlT3ZlcmZsb3coKSArIG1heChkZWx0YSwgMCkpOwpA
QCAtOTAwLDIwICs5MTksNDQgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRy
ZW4oYgogfQogCiBSb290SW5saW5lQm94KiBSZW5kZXJCbG9jazo6ZGV0ZXJtaW5lU3RhcnRQb3Np
dGlvbihib29sJiBmaXJzdExpbmUsIGJvb2wmIGZ1bGxMYXlvdXQsIGJvb2wmIHByZXZpb3VzTGlu
ZUJyb2tlQ2xlYW5seSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sdmVyLCBWZWN0b3I8RmxvYXRXaXRo
UmVjdD4mIGZsb2F0cywgdW5zaWduZWQmIG51bUNsZWFuRmxvYXRzKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5saW5lQmlkaVJlc29sdmVyJiBy
ZXNvbHZlciwgVmVjdG9yPEZsb2F0V2l0aFJlY3Q+JiBmbG9hdHMsIHVuc2lnbmVkJiBudW1DbGVh
bkZsb2F0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wmIHVzZVJlcGFpbnRCb3VuZHMsIGludCYgcmVwYWludFRvcCwgaW50JiByZXBhaW50
Qm90dG9tKQogewogICAgIFJvb3RJbmxpbmVCb3gqIGN1cnIgPSAwOwogICAgIFJvb3RJbmxpbmVC
b3gqIGxhc3QgPSAwOwogCiAgICAgYm9vbCBkaXJ0aWVkQnlGbG9hdCA9IGZhbHNlOwogICAgIGlm
ICghZnVsbExheW91dCkgeworICAgICAgICAvLyBQYWdpbmF0ZSBhbGwgb2YgdGhlIGNsZWFuIGxp
bmVzLgorICAgICAgICBib29sIHBhZ2luYXRlZCA9IHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+cGFn
aW5hdGVkKCk7CisgICAgICAgIGludCBwYWdpbmF0aW9uRGVsdGEgPSAwOwogICAgICAgICBzaXpl
X3QgZmxvYXRJbmRleCA9IDA7CiAgICAgICAgIGZvciAoY3VyciA9IGZpcnN0Um9vdEJveCgpOyBj
dXJyICYmICFjdXJyLT5pc0RpcnR5KCk7IGN1cnIgPSBjdXJyLT5uZXh0Um9vdEJveCgpKSB7Cisg
ICAgICAgICAgICBpZiAocGFnaW5hdGVkKSB7CisgICAgICAgICAgICAgICAgcGFnaW5hdGlvbkRl
bHRhIC09IGN1cnItPnBhZ2luYXRpb25TdHJ1dCgpOworICAgICAgICAgICAgICAgIGFkanVzdExp
bmVQb3NpdGlvbkZvclBhZ2luYXRpb24oY3VyciwgcGFnaW5hdGlvbkRlbHRhKTsKKyAgICAgICAg
ICAgICAgICBpZiAocGFnaW5hdGlvbkRlbHRhKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChj
b250YWluc0Zsb2F0cygpIHx8ICFmbG9hdHMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogRG8gYmV0dGVyIGV2ZW50dWFsbHkuICBGb3Igbm93IGlmIHdlIGV2
ZXIgc2hpZnQgYmVjYXVzZSBvZiBwYWdpbmF0aW9uIGFuZCBmbG9hdHMgYXJlIHByZXNlbnQganVz
dCBnbyB0byBhIGZ1bGwgbGF5b3V0LgorICAgICAgICAgICAgICAgICAgICAgICAgZnVsbExheW91
dCA9IHRydWU7IAorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmICgh
dXNlUmVwYWludEJvdW5kcykKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzZVJlcGFpbnRCb3Vu
ZHMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAg
IHJlcGFpbnRUb3AgPSBtaW4ocmVwYWludFRvcCwgY3Vyci0+dG9wVmlzaWJsZU92ZXJmbG93KCkg
KyBtaW4ocGFnaW5hdGlvbkRlbHRhLCAwKSk7CisgICAgICAgICAgICAgICAgICAgIHJlcGFpbnRC
b3R0b20gPSBtYXgocmVwYWludEJvdHRvbSwgY3Vyci0+Ym90dG9tVmlzaWJsZU92ZXJmbG93KCkg
KyBtYXgocGFnaW5hdGlvbkRlbHRhLCAwKSk7CisgICAgICAgICAgICAgICAgICAgIGN1cnItPmFk
anVzdFBvc2l0aW9uKDAsIHBhZ2luYXRpb25EZWx0YSk7CisgICAgICAgICAgICAgICAgfSAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICAgICAgaWYg
KFZlY3RvcjxSZW5kZXJCb3gqPiogY2xlYW5MaW5lRmxvYXRzID0gY3Vyci0+ZmxvYXRzUHRyKCkp
IHsKICAgICAgICAgICAgICAgICBWZWN0b3I8UmVuZGVyQm94Kj46Oml0ZXJhdG9yIGVuZCA9IGNs
ZWFuTGluZUZsb2F0cy0+ZW5kKCk7CiAgICAgICAgICAgICAgICAgZm9yIChWZWN0b3I8UmVuZGVy
Qm94Kj46Oml0ZXJhdG9yIG8gPSBjbGVhbkxpbmVGbG9hdHMtPmJlZ2luKCk7IG8gIT0gZW5kOyAr
K28pIHsKICAgICAgICAgICAgICAgICAgICAgUmVuZGVyQm94KiBmID0gKm87Ci0gICAgICAgICAg
ICAgICAgICAgIEludFNpemUgbmV3U2l6ZShmLT53aWR0aCgpICsgZi0+bWFyZ2luTGVmdCgpICtm
LT5tYXJnaW5SaWdodCgpLCBmLT5oZWlnaHQoKSArIGYtPm1hcmdpblRvcCgpICsgZi0+bWFyZ2lu
Qm90dG9tKCkpOworICAgICAgICAgICAgICAgICAgICBmLT5sYXlvdXRJZk5lZWRlZCgpOworICAg
ICAgICAgICAgICAgICAgICBJbnRTaXplIG5ld1NpemUoZi0+d2lkdGgoKSArIGYtPm1hcmdpbkxl
ZnQoKSArIGYtPm1hcmdpblJpZ2h0KCksIGYtPmhlaWdodCgpICsgZi0+bWFyZ2luVG9wKCkgKyBm
LT5tYXJnaW5Cb3R0b20oKSk7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChmbG9hdEluZGV4
IDwgZmxvYXRzLnNpemUoKSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChmbG9hdHNbZmxvYXRJ
bmRleF0ub2JqZWN0ICE9IGYpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEEgbmV3IGZs
b2F0IGhhcyBiZWVuIGluc2VydGVkIGJlZm9yZSB0aGlzIGxpbmUgb3IgYmVmb3JlIGl0cyBsYXN0
IGtub3duIGZsb2F0LgpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCShyZXZpc2lvbiA2Njg4
NikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTk3Myw3ICs5NzMsNyBAQCB2b2lkIFJlbmRlckJveDo6bWFwTG9jYWxUb0NvbnRhaW5lcihSZW5k
CiAgICAgaWYgKFJlbmRlclZpZXcqIHYgPSB2aWV3KCkpIHsKICAgICAgICAgaWYgKHYtPmxheW91
dFN0YXRlRW5hYmxlZCgpICYmICFyZXBhaW50Q29udGFpbmVyKSB7CiAgICAgICAgICAgICBMYXlv
dXRTdGF0ZSogbGF5b3V0U3RhdGUgPSB2LT5sYXlvdXRTdGF0ZSgpOwotICAgICAgICAgICAgSW50
U2l6ZSBvZmZzZXQgPSBsYXlvdXRTdGF0ZS0+bV9vZmZzZXQ7CisgICAgICAgICAgICBJbnRTaXpl
IG9mZnNldCA9IGxheW91dFN0YXRlLT5tX3BhaW50T2Zmc2V0OwogICAgICAgICAgICAgb2Zmc2V0
LmV4cGFuZCh4KCksIHkoKSk7CiAgICAgICAgICAgICBpZiAoc3R5bGUoKS0+cG9zaXRpb24oKSA9
PSBSZWxhdGl2ZVBvc2l0aW9uICYmIGxheWVyKCkpCiAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9
IGxheWVyKCktPnJlbGF0aXZlUG9zaXRpb25PZmZzZXQoKTsKQEAgLTExNzAsNyArMTE3MCw3IEBA
IHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUmVjdEZvclJlcGFpbnQoUmUKICAgICAgICAgICAgICAg
ICByZWN0Lm1vdmUobGF5ZXIoKS0+cmVsYXRpdmVQb3NpdGlvbk9mZnNldCgpKTsKIAogICAgICAg
ICAgICAgcmVjdC5tb3ZlKHgoKSwgeSgpKTsKLSAgICAgICAgICAgIHJlY3QubW92ZShsYXlvdXRT
dGF0ZS0+bV9vZmZzZXQpOworICAgICAgICAgICAgcmVjdC5tb3ZlKGxheW91dFN0YXRlLT5tX3Bh
aW50T2Zmc2V0KTsKICAgICAgICAgICAgIGlmIChsYXlvdXRTdGF0ZS0+bV9jbGlwcGVkKQogICAg
ICAgICAgICAgICAgIHJlY3QuaW50ZXJzZWN0KGxheW91dFN0YXRlLT5tX2NsaXBSZWN0KTsKICAg
ICAgICAgICAgIHJldHVybjsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxl
Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJv
eC5jcHAJKHJldmlzaW9uIDY2ODg2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGli
bGVCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDEsNyArMjAxLDcgQEAgdm9pZCBSZW5kZXJG
bGV4aWJsZUJveDo6Y2FsY1ByZWZXaWR0aHMoKQogICAgIHNldFByZWZXaWR0aHNEaXJ0eShmYWxz
ZSk7CiB9CiAKLXZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmxheW91dEJsb2NrKGJvb2wgcmVsYXlv
dXRDaGlsZHJlbikKK3ZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmxheW91dEJsb2NrKGJvb2wgcmVs
YXlvdXRDaGlsZHJlbiwgaW50IC8qcGFnZUhlaWdodCBGSVhNRTogSW1wbGVtZW50ICovKQogewog
ICAgIEFTU0VSVChuZWVkc0xheW91dCgpKTsKIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRmxleGlibGVCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJG
bGV4aWJsZUJveC5oCShyZXZpc2lvbiA2Njg4NikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckZsZXhpYmxlQm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgcHVibGljOgog
ICAgIHZvaWQgY2FsY0hvcml6b250YWxQcmVmV2lkdGhzKCk7CiAgICAgdm9pZCBjYWxjVmVydGlj
YWxQcmVmV2lkdGhzKCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0QmxvY2soYm9vbCByZWxh
eW91dENoaWxkcmVuKTsKKyAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0QmxvY2soYm9vbCByZWxheW91
dENoaWxkcmVuLCBpbnQgcGFnZUhlaWdodCk7CiAgICAgdm9pZCBsYXlvdXRIb3Jpem9udGFsQm94
KGJvb2wgcmVsYXlvdXRDaGlsZHJlbik7CiAgICAgdm9pZCBsYXlvdXRWZXJ0aWNhbEJveChib29s
IHJlbGF5b3V0Q2hpbGRyZW4pOwogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxp
bmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAJ
KHJldmlzaW9uIDY2ODg2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjQ3LDcgKzY0Nyw3IEBAIHZvaWQgUmVuZGVySW5saW5lOjpjb21w
dXRlUmVjdEZvclJlcGFpbnQKICAgICAgICAgICAgIExheW91dFN0YXRlKiBsYXlvdXRTdGF0ZSA9
IHYtPmxheW91dFN0YXRlKCk7CiAgICAgICAgICAgICBpZiAoc3R5bGUoKS0+cG9zaXRpb24oKSA9
PSBSZWxhdGl2ZVBvc2l0aW9uICYmIGxheWVyKCkpCiAgICAgICAgICAgICAgICAgcmVjdC5tb3Zl
KGxheWVyKCktPnJlbGF0aXZlUG9zaXRpb25PZmZzZXQoKSk7Ci0gICAgICAgICAgICByZWN0Lm1v
dmUobGF5b3V0U3RhdGUtPm1fb2Zmc2V0KTsKKyAgICAgICAgICAgIHJlY3QubW92ZShsYXlvdXRT
dGF0ZS0+bV9wYWludE9mZnNldCk7CiAgICAgICAgICAgICBpZiAobGF5b3V0U3RhdGUtPm1fY2xp
cHBlZCkKICAgICAgICAgICAgICAgICByZWN0LmludGVyc2VjdChsYXlvdXRTdGF0ZS0+bV9jbGlw
UmVjdCk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC03MzQsNyArNzM0LDcgQEAgdm9pZCBSZW5k
ZXJJbmxpbmU6Om1hcExvY2FsVG9Db250YWluZXIoUgogICAgIGlmIChSZW5kZXJWaWV3ICp2ID0g
dmlldygpKSB7CiAgICAgICAgIGlmICh2LT5sYXlvdXRTdGF0ZUVuYWJsZWQoKSAmJiAhcmVwYWlu
dENvbnRhaW5lcikgewogICAgICAgICAgICAgTGF5b3V0U3RhdGUqIGxheW91dFN0YXRlID0gdi0+
bGF5b3V0U3RhdGUoKTsKLSAgICAgICAgICAgIEludFNpemUgb2Zmc2V0ID0gbGF5b3V0U3RhdGUt
Pm1fb2Zmc2V0OworICAgICAgICAgICAgSW50U2l6ZSBvZmZzZXQgPSBsYXlvdXRTdGF0ZS0+bV9w
YWludE9mZnNldDsKICAgICAgICAgICAgIGlmIChzdHlsZSgpLT5wb3NpdGlvbigpID09IFJlbGF0
aXZlUG9zaXRpb24gJiYgbGF5ZXIoKSkKICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gbGF5ZXIo
KS0+cmVsYXRpdmVQb3NpdGlvbk9mZnNldCgpOwogICAgICAgICAgICAgdHJhbnNmb3JtU3RhdGUu
bW92ZShvZmZzZXQpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24g
NjY5MDMpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI1NDEsMTEgKzI1NDEsMTEgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRDaGlsZExh
eWVySW50b0NvbAogICAgIGNvbHVtbkJsb2NrLT5sYXllcigpLT5jb252ZXJ0VG9MYXllckNvb3Jk
cyhyb290TGF5ZXIsIGxheWVyWCwgbGF5ZXJZKTsKICAgICAKICAgICBDb2x1bW5JbmZvKiBjb2xJ
bmZvID0gY29sdW1uQmxvY2stPmNvbHVtbkluZm8oKTsKLSAgICB1bnNpZ25lZCBjb2xDb3VudCA9
IGNvbEluZm8tPmNvbHVtbkNvdW50KCk7CisgICAgdW5zaWduZWQgY29sQ291bnQgPSBjb2x1bW5C
bG9jay0+Y29sdW1uQ291bnQoY29sSW5mbyk7CiAgICAgaW50IGN1cnJZT2Zmc2V0ID0gMDsKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY29sQ291bnQ7IGkrKykgewogICAgICAgICAvLyBG
b3IgZWFjaCByZWN0LCB3ZSBjbGlwIHRvIHRoZSByZWN0LCBhbmQgdGhlbiB3ZSBhZGp1c3Qgb3Vy
IGNvb3Jkcy4KLSAgICAgICAgSW50UmVjdCBjb2xSZWN0ID0gY29sSW5mby0+Y29sdW1uUmVjdEF0
KGkpOworICAgICAgICBJbnRSZWN0IGNvbFJlY3QgPSBjb2x1bW5CbG9jay0+Y29sdW1uUmVjdEF0
KGNvbEluZm8sIGkpOwogICAgICAgICBpbnQgY3VyclhPZmZzZXQgPSBjb2xSZWN0LngoKSAtIChj
b2x1bW5CbG9jay0+Ym9yZGVyTGVmdCgpICsgY29sdW1uQmxvY2stPnBhZGRpbmdMZWZ0KCkpOwog
ICAgICAgICBjb2xSZWN0Lm1vdmUobGF5ZXJYLCBsYXllclkpOwogCkBAIC0zMDA3LDE3ICszMDA3
LDE3IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdENoaWxkTGEKICAgICBjb2x1
bW5CbG9jay0+bGF5ZXIoKS0+Y29udmVydFRvTGF5ZXJDb29yZHMocm9vdExheWVyLCBsYXllclgs
IGxheWVyWSk7CiAgICAgCiAgICAgQ29sdW1uSW5mbyogY29sSW5mbyA9IGNvbHVtbkJsb2NrLT5j
b2x1bW5JbmZvKCk7Ci0gICAgaW50IGNvbENvdW50ID0gY29sSW5mby0+Y29sdW1uQ291bnQoKTsK
KyAgICBpbnQgY29sQ291bnQgPSBjb2x1bW5CbG9jay0+Y29sdW1uQ291bnQoY29sSW5mbyk7CiAg
ICAgCiAgICAgLy8gV2UgaGF2ZSB0byBnbyBiYWNrd2FyZHMgZnJvbSB0aGUgbGFzdCBjb2x1bW4g
dG8gdGhlIGZpcnN0LgogICAgIGludCBsZWZ0ID0gY29sdW1uQmxvY2stPmJvcmRlckxlZnQoKSAr
IGNvbHVtbkJsb2NrLT5wYWRkaW5nTGVmdCgpOwogICAgIGludCBjdXJyWU9mZnNldCA9IDA7CiAg
ICAgaW50IGk7CiAgICAgZm9yIChpID0gMDsgaSA8IGNvbENvdW50OyBpKyspCi0gICAgICAgIGN1
cnJZT2Zmc2V0IC09IGNvbEluZm8tPmNvbHVtblJlY3RBdChpKS5oZWlnaHQoKTsKKyAgICAgICAg
Y3VycllPZmZzZXQgLT0gY29sdW1uQmxvY2stPmNvbHVtblJlY3RBdChjb2xJbmZvLCBpKS5oZWln
aHQoKTsKICAgICBmb3IgKGkgPSBjb2xDb3VudCAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAgICAg
IC8vIEZvciBlYWNoIHJlY3QsIHdlIGNsaXAgdG8gdGhlIHJlY3QsIGFuZCB0aGVuIHdlIGFkanVz
dCBvdXIgY29vcmRzLgotICAgICAgICBJbnRSZWN0IGNvbFJlY3QgPSBjb2xJbmZvLT5jb2x1bW5S
ZWN0QXQoaSk7CisgICAgICAgIEludFJlY3QgY29sUmVjdCA9IGNvbHVtbkJsb2NrLT5jb2x1bW5S
ZWN0QXQoY29sSW5mbywgaSk7CiAgICAgICAgIGludCBjdXJyWE9mZnNldCA9IGNvbFJlY3QueCgp
IC0gbGVmdDsKICAgICAgICAgY3VycllPZmZzZXQgKz0gY29sUmVjdC5oZWlnaHQoKTsKICAgICAg
ICAgY29sUmVjdC5tb3ZlKGxheWVyWCwgbGF5ZXJZKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxpbmVCb3hMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMaW5lQm94TGlzdC5jcHAJKHJldmlzaW9uIDY2ODg2KQorKysgV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGluZUJveExpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw2IEBA
CiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2lu
Y2x1ZGUgIlJvb3RJbmxpbmVCb3guaCIKLSNpbmNsdWRlICJTZXR0aW5ncy5oIiAvLyBGSVhNRTog
VGhpcyBpbmNsdWRlIGNhbiBiZSByZW1vdmVkIHdoZW4gcGFnaW5hdGVEdXJpbmdMYXlvdXRFbmFi
bGVkIGlzIHRha2VuIG91dC4KIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIApAQCAtMTYxLDcgKzE2
MCw3IEBAIHZvaWQgUmVuZGVyTGluZUJveExpc3Q6OnBhaW50KFJlbmRlckJveE0KICAgICAgICAg
cmV0dXJuOwogCiAgICAgUmVuZGVyVmlldyogdiA9IHJlbmRlcmVyLT52aWV3KCk7Ci0gICAgYm9v
bCB1c2VQcmludFJlY3QgPSAhdi0+cHJpbnRSZWN0KCkuaXNFbXB0eSgpICYmICFyZW5kZXJlci0+
ZG9jdW1lbnQoKS0+c2V0dGluZ3MoKS0+cGFnaW5hdGVEdXJpbmdMYXlvdXRFbmFibGVkKCk7Cisg
ICAgYm9vbCB1c2VQcmludFJlY3QgPSAhdi0+cHJpbnRSZWN0KCkuaXNFbXB0eSgpOwogICAgIAog
ICAgIC8vIFdlIGNhbiBjaGVjayB0aGUgZmlyc3QgYm94IGFuZCBsYXN0IGJveCBhbmQgYXZvaWQg
cGFpbnRpbmcgaWYgd2UgZG9uJ3QKICAgICAvLyBpbnRlcnNlY3QuICBUaGlzIGlzIGEgcXVpY2sg
c2hvcnQtY2lyY3VpdCB0aGF0IHdlIGNhbiB0YWtlIHRvIGF2b2lkIHdhbGtpbmcgYW55IGxpbmVz
LgpAQCAtMjE1LDcgKzIxNCw2IEBAIHZvaWQgUmVuZGVyTGluZUJveExpc3Q6OnBhaW50KFJlbmRl
ckJveE0KICAgICAgICAgaW50IGJvdHRvbSA9IGN1cnItPmJvdHRvbVZpc2libGVPdmVyZmxvdygp
ICsgcmVuZGVyZXItPm1heGltYWxPdXRsaW5lU2l6ZShpbmZvLnBoYXNlKTsKICAgICAgICAgaCA9
IGJvdHRvbSAtIHRvcDsKICAgICAgICAgeVBvcyA9IHR5ICsgdG9wOwotICAgICAgICB2LT5zZXRN
aW5pbXVtQ29sdW1uSGVpZ2h0KGgpOwogICAgICAgICBpZiAoeVBvcyA8IGluZm8ucmVjdC5ib3R0
b20oKSAmJiB5UG9zICsgaCA+IGluZm8ucmVjdC55KCkpCiAgICAgICAgICAgICBjdXJyLT5wYWlu
dChpbmZvLCB0eCwgdHkpOwogICAgIH0KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZp
ZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCShy
ZXZpc2lvbiA2Njg4NikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Miw3ICs1Miw2IEBAIFJlbmRlclZpZXc6OlJlbmRlclZpZXcoTm9kZSog
bm9kZSwgRnJhbWUKICAgICAsIG1fbWF4aW1hbE91dGxpbmVTaXplKDApCiAgICAgLCBtX2Jlc3RU
cnVuY2F0ZWRBdCgwKQogICAgICwgbV90cnVuY2F0b3JXaWR0aCgwKQotICAgICwgbV9taW5pbXVt
Q29sdW1uSGVpZ2h0KDApCiAgICAgLCBtX2ZvcmNlZFBhZ2VCcmVhayhmYWxzZSkKICAgICAsIG1f
bGF5b3V0U3RhdGUoMCkKICAgICAsIG1fbGF5b3V0U3RhdGVEaXNhYmxlQ291bnQoMCkKQEAgLTY5
NSw3ICs2OTQsNiBAQCB2b2lkIFJlbmRlclZpZXc6OnNldEJlc3RUcnVuY2F0ZWRBdChpbnQgCiAK
IHZvaWQgUmVuZGVyVmlldzo6cHVzaExheW91dFN0YXRlKFJlbmRlck9iamVjdCogcm9vdCkKIHsK
LSAgICBBU1NFUlQoIWRvaW5nRnVsbFJlcGFpbnQoKSk7CiAgICAgQVNTRVJUKG1fbGF5b3V0U3Rh
dGVEaXNhYmxlQ291bnQgPT0gMCk7CiAgICAgQVNTRVJUKG1fbGF5b3V0U3RhdGUgPT0gMCk7CiAK
SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgJKHJldmlzaW9uIDY2ODg2KQorKysgV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC04MywxMiArODMsMTAgQEAg
cHVibGljOgogICAgIEludFJlY3QgcHJpbnRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9wcmludFJl
Y3Q7IH0KICAgICB2b2lkIHNldFByaW50UmVjdChjb25zdCBJbnRSZWN0JiByKSB7IG1fcHJpbnRS
ZWN0ID0gcjsgfQogCi0gICAgdm9pZCBzZXRUcnVuY2F0ZWRBdChpbnQgeSkgeyBtX3RydW5jYXRl
ZEF0ID0geTsgbV9iZXN0VHJ1bmNhdGVkQXQgPSBtX3RydW5jYXRvcldpZHRoID0gMDsgbV9taW5p
bXVtQ29sdW1uSGVpZ2h0ID0gMDsgbV9mb3JjZWRQYWdlQnJlYWsgPSBmYWxzZTsgfQorICAgIHZv
aWQgc2V0VHJ1bmNhdGVkQXQoaW50IHkpIHsgbV90cnVuY2F0ZWRBdCA9IHk7IG1fYmVzdFRydW5j
YXRlZEF0ID0gbV90cnVuY2F0b3JXaWR0aCA9IDA7IG1fZm9yY2VkUGFnZUJyZWFrID0gZmFsc2U7
IH0KICAgICB2b2lkIHNldEJlc3RUcnVuY2F0ZWRBdChpbnQgeSwgUmVuZGVyQm94TW9kZWxPYmpl
Y3QqIGZvclJlbmRlcmVyLCBib29sIGZvcmNlZEJyZWFrID0gZmFsc2UpOwotICAgIHZvaWQgc2V0
TWluaW11bUNvbHVtbkhlaWdodChpbnQgaGVpZ2h0KSB7IG1fbWluaW11bUNvbHVtbkhlaWdodCA9
IGhlaWdodDsgfQogICAgIGludCBiZXN0VHJ1bmNhdGVkQXQoKSBjb25zdCB7IHJldHVybiBtX2Jl
c3RUcnVuY2F0ZWRBdDsgfQotICAgIGludCBtaW5pbXVtQ29sdW1uSGVpZ2h0KCkgY29uc3QgeyBy
ZXR1cm4gbV9taW5pbXVtQ29sdW1uSGVpZ2h0OyB9Ci0KKyAgICAKICAgICBpbnQgdHJ1bmNhdGVk
QXQoKSBjb25zdCB7IHJldHVybiBtX3RydW5jYXRlZEF0OyB9CiAKICAgICB2aXJ0dWFsIHZvaWQg
YWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBpbnQgdHgsIGludCB0eSk7CkBAIC0xMjIs
MjEgKzEyMCwyMCBAQCBwdWJsaWM6CiAKICAgICBib29sIGRvaW5nRnVsbFJlcGFpbnQoKSBjb25z
dCB7IHJldHVybiBtX2ZyYW1lVmlldy0+bmVlZHNGdWxsUmVwYWludCgpOyB9CiAKLSAgICB2b2lk
IHB1c2hMYXlvdXRTdGF0ZShSZW5kZXJCb3gqIHJlbmRlcmVyLCBjb25zdCBJbnRTaXplJiBvZmZz
ZXQpCisgICAgdm9pZCBwdXNoTGF5b3V0U3RhdGUoUmVuZGVyQm94KiByZW5kZXJlciwgY29uc3Qg
SW50U2l6ZSYgb2Zmc2V0LCBpbnQgcGFnZUhlaWdodCA9IDAsIENvbHVtbkluZm8qIGNvbEluZm8g
PSAwKQogICAgIHsKLSAgICAgICAgaWYgKGRvaW5nRnVsbFJlcGFpbnQoKSkKLSAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgLy8gV2UgcHVzaCBMYXlvdXRTdGF0ZSBldmVuIGlmIGxheW91dFN0
YXRlIGlzIGRpc2FibGVkIGJlY2F1c2UgaXQgc3RvcmVzIGxheW91dERlbHRhIHRvby4KLSAgICAg
ICAgbV9sYXlvdXRTdGF0ZSA9IG5ldyAocmVuZGVyQXJlbmEoKSkgTGF5b3V0U3RhdGUobV9sYXlv
dXRTdGF0ZSwgcmVuZGVyZXIsIG9mZnNldCk7CisgICAgICAgIGlmICghZG9pbmdGdWxsUmVwYWlu
dCgpIHx8IHJlbmRlcmVyLT5oYXNDb2x1bW5zKCkgfHwgbV9sYXlvdXRTdGF0ZS0+cGFnaW5hdGVk
KCkpCisgICAgICAgICAgICBtX2xheW91dFN0YXRlID0gbmV3IChyZW5kZXJBcmVuYSgpKSBMYXlv
dXRTdGF0ZShtX2xheW91dFN0YXRlLCByZW5kZXJlciwgb2Zmc2V0LCBwYWdlSGVpZ2h0LCBjb2xJ
bmZvKTsKICAgICB9CiAKICAgICB2b2lkIHB1c2hMYXlvdXRTdGF0ZShSZW5kZXJPYmplY3QqKTsK
IAogICAgIHZvaWQgcG9wTGF5b3V0U3RhdGUoKQogICAgIHsKLSAgICAgICAgaWYgKGRvaW5nRnVs
bFJlcGFpbnQoKSkKLSAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgTGF5b3V0U3RhdGUqIHN0
YXRlID0gbV9sYXlvdXRTdGF0ZTsKKyAgICAgICAgaWYgKGRvaW5nRnVsbFJlcGFpbnQoKSAmJiAh
bV9sYXlvdXRTdGF0ZS0+cGFnaW5hdGVkKCkpCisgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IG1fbGF5b3V0U3RhdGUgPSBzdGF0ZS0+bV9uZXh0OwogICAgICAgICBzdGF0ZS0+ZGVzdHJveShy
ZW5kZXJBcmVuYSgpKTsKICAgICB9CkBAIC0xOTgsNyArMTk1LDYgQEAgcHJvdGVjdGVkOgogcHJp
dmF0ZToKICAgICBpbnQgbV9iZXN0VHJ1bmNhdGVkQXQ7CiAgICAgaW50IG1fdHJ1bmNhdG9yV2lk
dGg7Ci0gICAgaW50IG1fbWluaW11bUNvbHVtbkhlaWdodDsKICAgICBib29sIG1fZm9yY2VkUGFn
ZUJyZWFrOwogICAgIExheW91dFN0YXRlKiBtX2xheW91dFN0YXRlOwogICAgIHVuc2lnbmVkIG1f
bGF5b3V0U3RhdGVEaXNhYmxlQ291bnQ7CkBAIC0yMjcsMTMgKzIyMywxMyBAQCB2b2lkIHRvUmVu
ZGVyVmlldyhjb25zdCBSZW5kZXJWaWV3Kik7CiBjbGFzcyBMYXlvdXRTdGF0ZU1haW50YWluZXIg
OiBwdWJsaWMgTm9uY29weWFibGUgewogcHVibGljOgogICAgIC8vIGN0b3IgdG8gcHVzaCBub3cK
LSAgICBMYXlvdXRTdGF0ZU1haW50YWluZXIoUmVuZGVyVmlldyogdmlldywgUmVuZGVyQm94KiBy
b290LCBJbnRTaXplIG9mZnNldCwgYm9vbCBkaXNhYmxlU3RhdGUgPSBmYWxzZSkKKyAgICBMYXlv
dXRTdGF0ZU1haW50YWluZXIoUmVuZGVyVmlldyogdmlldywgUmVuZGVyQm94KiByb290LCBJbnRT
aXplIG9mZnNldCwgYm9vbCBkaXNhYmxlU3RhdGUgPSBmYWxzZSwgaW50IHBhZ2VIZWlnaHQgPSAw
LCBDb2x1bW5JbmZvKiBjb2xJbmZvID0gMCkKICAgICAgICAgOiBtX3ZpZXcodmlldykKICAgICAg
ICAgLCBtX2Rpc2FibGVkKGRpc2FibGVTdGF0ZSkKICAgICAgICAgLCBtX2RpZFN0YXJ0KGZhbHNl
KQogICAgICAgICAsIG1fZGlkRW5kKGZhbHNlKQogICAgIHsKLSAgICAgICAgcHVzaChyb290LCBv
ZmZzZXQpOworICAgICAgICBwdXNoKHJvb3QsIG9mZnNldCwgcGFnZUhlaWdodCwgY29sSW5mbyk7
CiAgICAgfQogICAgIAogICAgIC8vIGN0b3IgdG8gbWF5YmUgcHVzaCBsYXRlcgpAQCAtMjUwLDEx
ICsyNDYsMTEgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQobV9kaWRTdGFydCA9PSBtX2RpZEVu
ZCk7ICAgLy8gaWYgdGhpcyBmaXJlcywgaXQgbWVhbnMgdGhhdCBzb21lb25lIGRpZCBhIHB1c2go
KSwgYnV0IGZvcmdvdCB0byBwb3AoKS4KICAgICB9CiAKLSAgICB2b2lkIHB1c2goUmVuZGVyQm94
KiByb290LCBJbnRTaXplIG9mZnNldCkKKyAgICB2b2lkIHB1c2goUmVuZGVyQm94KiByb290LCBJ
bnRTaXplIG9mZnNldCwgaW50IHBhZ2VIZWlnaHQgPSAwLCBDb2x1bW5JbmZvKiBjb2xJbmZvID0g
MCkKICAgICB7CiAgICAgICAgIEFTU0VSVCghbV9kaWRTdGFydCk7CiAgICAgICAgIC8vIFdlIHB1
c2ggc3RhdGUgZXZlbiBpZiBkaXNhYmxlZCwgYmVjYXVzZSB3ZSBzdGlsbCBuZWVkIHRvIHN0b3Jl
IGxheW91dERlbHRhCi0gICAgICAgIG1fdmlldy0+cHVzaExheW91dFN0YXRlKHJvb3QsIG9mZnNl
dCk7CisgICAgICAgIG1fdmlldy0+cHVzaExheW91dFN0YXRlKHJvb3QsIG9mZnNldCwgcGFnZUhl
aWdodCwgY29sSW5mbyk7CiAgICAgICAgIGlmIChtX2Rpc2FibGVkKQogICAgICAgICAgICAgbV92
aWV3LT5kaXNhYmxlTGF5b3V0U3RhdGUoKTsKICAgICAgICAgbV9kaWRTdGFydCA9IHRydWU7Cklu
ZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5oCShyZXZpc2lvbiA2Njg4NikKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAs
NyBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9saW5lQnJlYWtQb3MoMCkKICAgICAgICAgLCBtX2xp
bmVUb3AoMCkKICAgICAgICAgLCBtX2xpbmVCb3R0b20oMCkKKyAgICAgICAgLCBtX3BhZ2luYXRp
b25TdHJ1dCgwKQogICAgIHsKICAgICB9CiAKQEAgLTU3LDYgKzU4LDkgQEAgcHVibGljOgogICAg
IGludCBsaW5lVG9wKCkgY29uc3QgeyByZXR1cm4gbV9saW5lVG9wOyB9CiAgICAgaW50IGxpbmVC
b3R0b20oKSBjb25zdCB7IHJldHVybiBtX2xpbmVCb3R0b207IH0KIAorICAgIGludCBwYWdpbmF0
aW9uU3RydXQoKSBjb25zdCB7IHJldHVybiBtX3BhZ2luYXRpb25TdHJ1dDsgfQorICAgIHZvaWQg
c2V0UGFnaW5hdGlvblN0cnV0KGludCBzKSB7IG1fcGFnaW5hdGlvblN0cnV0ID0gczsgfQorCiAg
ICAgaW50IHNlbGVjdGlvblRvcCgpIGNvbnN0OwogICAgIGludCBzZWxlY3Rpb25Cb3R0b20oKSBj
b25zdCB7IHJldHVybiBsaW5lQm90dG9tKCk7IH0KICAgICBpbnQgc2VsZWN0aW9uSGVpZ2h0KCkg
Y29uc3QgeyByZXR1cm4gbWF4KDAsIHNlbGVjdGlvbkJvdHRvbSgpIC0gc2VsZWN0aW9uVG9wKCkp
OyB9CkBAIC0xNDEsNiArMTQ1LDggQEAgcHJpdmF0ZToKICAgICBpbnQgbV9saW5lVG9wOwogICAg
IGludCBtX2xpbmVCb3R0b207CiAKKyAgICBpbnQgbV9wYWdpbmF0aW9uU3RydXQ7CisKICAgICAv
LyBGbG9hdHMgaGFuZ2luZyBvZmYgdGhlIGxpbmUgYXJlIHB1c2hlZCBpbnRvIHRoaXMgdmVjdG9y
IGR1cmluZyBsYXlvdXQuIEl0IGlzIG9ubHkKICAgICAvLyBnb29kIGZvciBhcyBsb25nIGFzIHRo
ZSBsaW5lIGhhcyBub3QgYmVlbiBtYXJrZWQgZGlydHkuCiAgICAgT3duUHRyPFZlY3RvcjxSZW5k
ZXJCb3gqPiA+IG1fZmxvYXRzOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67583</attachid>
            <date>2010-09-14 11:57:25 -0700</date>
            <delta_ts>2010-09-14 14:46:12 -0700</delta_ts>
            <desc>This patch makes floats move lines they are anchored to when needed.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>88987</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL0NvbHVtbkluZm8uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9Db2x1bW5JbmZvLmgJKHJldmlzaW9uIDY2OTAzKQorKysgV2ViQ29yZS9y
ZW5kZXJpbmcvQ29sdW1uSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw5IEBAIHB1
YmxpYzoKICAgICBDb2x1bW5JbmZvKCkKICAgICAgICAgOiBtX2Rlc2lyZWRDb2x1bW5XaWR0aCgw
KQogICAgICAgICAsIG1fZGVzaXJlZENvbHVtbkNvdW50KDEpCisgICAgICAgICwgbV9jb2x1bW5D
b3VudCgxKQorICAgICAgICAsIG1fY29sdW1uSGVpZ2h0KDApCisgICAgICAgICwgbV9taW5pbXVt
Q29sdW1uSGVpZ2h0KDApCiAgICAgICAgIHsgfQogICAgIAogICAgIGludCBkZXNpcmVkQ29sdW1u
V2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2Rlc2lyZWRDb2x1bW5XaWR0aDsgfQpAQCAtNDQsMTkg
KzQ3LDI4IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBkZXNpcmVkQ29sdW1uQ291bnQoKSBjb25z
dCB7IHJldHVybiBtX2Rlc2lyZWRDb2x1bW5Db3VudDsgfQogICAgIHZvaWQgc2V0RGVzaXJlZENv
bHVtbkNvdW50KHVuc2lnbmVkIGNvdW50KSB7IG1fZGVzaXJlZENvbHVtbkNvdW50ID0gY291bnQ7
IH0KIAotICAgIC8vIEVuY2Fwc3VsYXRlZCBmb3IgdGhlIGZ1dHVyZSB3aGVyZSB3ZSBjYW4gYXZv
aWQgc3RvcmluZyB0aGUgcmVjdHMgYW5kIGp1c3QgY29tcHV0ZSB0aGVtIGR5bmFtaWNhbGx5Lgot
ICAgIHNpemVfdCBjb2x1bW5Db3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fY29sdW1uUmVjdHMuc2l6
ZSgpOyB9Ci0gICAgY29uc3QgSW50UmVjdCYgY29sdW1uUmVjdEF0KHNpemVfdCBpKSBjb25zdCB7
IHJldHVybiBtX2NvbHVtblJlY3RzW2ldOyB9CisgICAgdW5zaWduZWQgY29sdW1uQ291bnQoKSBj
b25zdCB7IHJldHVybiBtX2NvbHVtbkNvdW50OyB9CisgICAgaW50IGNvbHVtbkhlaWdodCgpIGNv
bnN0IHsgcmV0dXJuIG1fY29sdW1uSGVpZ2h0OyB9CiAKLSAgICB2b2lkIGNsZWFyQ29sdW1ucygp
IHsgbV9jb2x1bW5SZWN0cy5jbGVhcigpOyB9CisgICAgLy8gU2V0IG91ciBjb3VudCBhbmQgaGVp
Z2h0LiAgVGhpcyBpcyBlbm91Z2ggaW5mbyBmb3IgYSBSZW5kZXJCbG9jayB0byBjb21wdXRlIHBh
Z2UgcmVjdHMKKyAgICAvLyBkeW5hbWljYWxseS4KKyAgICB2b2lkIHNldENvbHVtbkNvdW50QW5k
SGVpZ2h0KGludCBjLCBpbnQgaCkKKyAgICB7IAorICAgICAgICBtX2NvbHVtbkNvdW50ID0gYzsK
KyAgICAgICAgbV9jb2x1bW5IZWlnaHQgPSBoOworICAgIH0KKyAgICB2b2lkIHNldENvbHVtbkhl
aWdodChpbnQgaCkgeyBtX2NvbHVtbkhlaWdodCA9IGg7IH0KKworICAgIHZvaWQgdXBkYXRlTWlu
aW11bUNvbHVtbkhlaWdodChpbnQgaCkgeyBtX21pbmltdW1Db2x1bW5IZWlnaHQgPSBtYXgoaCwg
bV9taW5pbXVtQ29sdW1uSGVpZ2h0KTsgfQorICAgIGludCBtaW5pbXVtQ29sdW1uSGVpZ2h0KCkg
Y29uc3QgeyByZXR1cm4gbV9taW5pbXVtQ29sdW1uSGVpZ2h0OyB9CiAKLSAgICAvLyBGSVhNRTog
V2lsbCBnbyBhd2F5IG9uY2Ugd2UgZG9uJ3QgdXNlIHRoZSBWZWN0b3IuCi0gICAgdm9pZCBhZGRD
b2x1bW5SZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpIHsgbV9jb2x1bW5SZWN0cy5hcHBlbmQocmVj
dCk7IH0KLSAgICAKIHByaXZhdGU6CiAgICAgaW50IG1fZGVzaXJlZENvbHVtbldpZHRoOwogICAg
IHVuc2lnbmVkIG1fZGVzaXJlZENvbHVtbkNvdW50OwotICAgIFZlY3RvcjxJbnRSZWN0PiBtX2Nv
bHVtblJlY3RzOworICAgIAorICAgIHVuc2lnbmVkIG1fY29sdW1uQ291bnQ7CisgICAgaW50IG1f
Y29sdW1uSGVpZ2h0OworICAgIGludCBtX21pbmltdW1Db2x1bW5IZWlnaHQ7CiB9OwogCiB9Cklu
ZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvTGF5b3V0U3RhdGUuY3BwCShyZXZpc2lvbiA2Njg4NikKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsOCArMzMs
OSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUxheW91dFN0YXRlOjpMYXlvdXRTdGF0ZShM
YXlvdXRTdGF0ZSogcHJldiwgUmVuZGVyQm94KiByZW5kZXJlciwgY29uc3QgSW50U2l6ZSYgb2Zm
c2V0KQotICAgIDogbV9uZXh0KHByZXYpCitMYXlvdXRTdGF0ZTo6TGF5b3V0U3RhdGUoTGF5b3V0
U3RhdGUqIHByZXYsIFJlbmRlckJveCogcmVuZGVyZXIsIGNvbnN0IEludFNpemUmIG9mZnNldCwg
aW50IHBhZ2VIZWlnaHQsIENvbHVtbkluZm8qIGNvbEluZm8pCisgICAgOiBtX2NvbHVtbkluZm8o
Y29sSW5mbykKKyAgICAsIG1fbmV4dChwcmV2KQogI2lmbmRlZiBOREVCVUcKICAgICAsIG1fcmVu
ZGVyZXIocmVuZGVyZXIpCiAjZW5kaWYKQEAgLTQ1LDQzICs0Niw2NyBAQCBMYXlvdXRTdGF0ZTo6
TGF5b3V0U3RhdGUoTGF5b3V0U3RhdGUqIHByCiAgICAgaWYgKGZpeGVkKSB7CiAgICAgICAgIC8v
IEZJWE1FOiBUaGlzIGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgd2l0aCB0cmFuc2Zvcm1zLgogICAg
ICAgICBGbG9hdFBvaW50IGZpeGVkT2Zmc2V0ID0gcmVuZGVyZXItPnZpZXcoKS0+bG9jYWxUb0Fi
c29sdXRlKEZsb2F0UG9pbnQoKSwgdHJ1ZSk7Ci0gICAgICAgIG1fb2Zmc2V0ID0gSW50U2l6ZShm
aXhlZE9mZnNldC54KCksIGZpeGVkT2Zmc2V0LnkoKSkgKyBvZmZzZXQ7CisgICAgICAgIG1fcGFp
bnRPZmZzZXQgPSBJbnRTaXplKGZpeGVkT2Zmc2V0LngoKSwgZml4ZWRPZmZzZXQueSgpKSArIG9m
ZnNldDsKICAgICB9IGVsc2UKLSAgICAgICAgbV9vZmZzZXQgPSBwcmV2LT5tX29mZnNldCArIG9m
ZnNldDsKKyAgICAgICAgbV9wYWludE9mZnNldCA9IHByZXYtPm1fcGFpbnRPZmZzZXQgKyBvZmZz
ZXQ7CiAKLSAgICBpZiAocmVuZGVyZXItPmlzUmVsUG9zaXRpb25lZCgpKSB7Ci0gICAgICAgIGlm
IChyZW5kZXJlci0+aGFzTGF5ZXIoKSkKLSAgICAgICAgICAgIG1fb2Zmc2V0ICs9IHJlbmRlcmVy
LT5sYXllcigpLT5yZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0KCk7Ci0gICAgfSBlbHNlIGlmIChyZW5k
ZXJlci0+aXNQb3NpdGlvbmVkKCkgJiYgIWZpeGVkKSB7CisgICAgaWYgKHJlbmRlcmVyLT5pc1Bv
c2l0aW9uZWQoKSAmJiAhZml4ZWQpIHsKICAgICAgICAgaWYgKFJlbmRlck9iamVjdCogY29udGFp
bmVyID0gcmVuZGVyZXItPmNvbnRhaW5lcigpKSB7CiAgICAgICAgICAgICBpZiAoY29udGFpbmVy
LT5pc1JlbFBvc2l0aW9uZWQoKSAmJiBjb250YWluZXItPmlzUmVuZGVySW5saW5lKCkpCi0gICAg
ICAgICAgICAgICAgbV9vZmZzZXQgKz0gdG9SZW5kZXJJbmxpbmUoY29udGFpbmVyKS0+cmVsYXRp
dmVQb3NpdGlvbmVkSW5saW5lT2Zmc2V0KHJlbmRlcmVyKTsKKyAgICAgICAgICAgICAgICBtX3Bh
aW50T2Zmc2V0ICs9IHRvUmVuZGVySW5saW5lKGNvbnRhaW5lciktPnJlbGF0aXZlUG9zaXRpb25l
ZElubGluZU9mZnNldChyZW5kZXJlcik7CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBtX2xheW91
dE9mZnNldCA9IG1fcGFpbnRPZmZzZXQ7CisKKyAgICBpZiAocmVuZGVyZXItPmlzUmVsUG9zaXRp
b25lZCgpICYmIHJlbmRlcmVyLT5oYXNMYXllcigpKQorICAgICAgICBtX3BhaW50T2Zmc2V0ICs9
IHJlbmRlcmVyLT5sYXllcigpLT5yZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0KCk7CisKICAgICBtX2Ns
aXBwZWQgPSAhZml4ZWQgJiYgcHJldi0+bV9jbGlwcGVkOwogICAgIGlmIChtX2NsaXBwZWQpCiAg
ICAgICAgIG1fY2xpcFJlY3QgPSBwcmV2LT5tX2NsaXBSZWN0OwogCiAgICAgaWYgKHJlbmRlcmVy
LT5oYXNPdmVyZmxvd0NsaXAoKSkgewogICAgICAgICBSZW5kZXJMYXllciogbGF5ZXIgPSByZW5k
ZXJlci0+bGF5ZXIoKTsKLSAgICAgICAgSW50UmVjdCBjbGlwUmVjdCh0b1BvaW50KG1fb2Zmc2V0
KSArIHJlbmRlcmVyLT52aWV3KCktPmxheW91dERlbHRhKCksIGxheWVyLT5zaXplKCkpOworICAg
ICAgICBJbnRSZWN0IGNsaXBSZWN0KHRvUG9pbnQobV9wYWludE9mZnNldCkgKyByZW5kZXJlci0+
dmlldygpLT5sYXlvdXREZWx0YSgpLCBsYXllci0+c2l6ZSgpKTsKICAgICAgICAgaWYgKG1fY2xp
cHBlZCkKICAgICAgICAgICAgIG1fY2xpcFJlY3QuaW50ZXJzZWN0KGNsaXBSZWN0KTsKICAgICAg
ICAgZWxzZSB7CiAgICAgICAgICAgICBtX2NsaXBSZWN0ID0gY2xpcFJlY3Q7CiAgICAgICAgICAg
ICBtX2NsaXBwZWQgPSB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIG1fb2Zmc2V0IC09IGxheWVy
LT5zY3JvbGxlZENvbnRlbnRPZmZzZXQoKTsKKworICAgICAgICBtX3BhaW50T2Zmc2V0IC09IGxh
eWVyLT5zY3JvbGxlZENvbnRlbnRPZmZzZXQoKTsKICAgICB9CiAKLSAgICBtX2xheW91dERlbHRh
ID0gbV9uZXh0LT5tX2xheW91dERlbHRhOworICAgIC8vIERpc2FibGUgcGFnaW5hdGlvbiBmb3Ig
b2JqZWN0cyB3ZSBkb24ndCBzdXBwb3J0LiAgRm9yIG5vdyB0aGlzIGluY2x1ZGVzIG92ZXJmbG93
OnNjcm9sbC9hdXRvIGFuZCBpbmxpbmUgYmxvY2tzLgorICAgIGlmIChyZW5kZXJlci0+aXNSZXBs
YWNlZCgpIHx8IHJlbmRlcmVyLT5zY3JvbGxzT3ZlcmZsb3coKSkKKyAgICAgICAgbV9wYWdlSGVp
Z2h0ID0gMDsKKworICAgIC8vIElmIHdlIGVzdGFibGlzaCBhIG5ldyBwYWdlIGhlaWdodCwgdGhl
biBjYWNoZSB0aGUgb2Zmc2V0IHRvIHRoZSB0b3Agb2YgdGhlIGZpcnN0IHBhZ2UuCisgICAgLy8g
V2UgY2FuIGNvbXBhcmUgdGhpcyBsYXRlciBvbiB0byBmaWd1cmUgb3V0IHdoYXQgcGFydCBvZiB0
aGUgcGFnZSB3ZSdyZSBhY3R1YWxseSBvbiwKKyAgICBpZiAocGFnZUhlaWdodCkgeworICAgICAg
ICBtX3BhZ2VIZWlnaHQgPSBwYWdlSGVpZ2h0OworICAgICAgICBtX3BhZ2VPZmZzZXQgPSBJbnRT
aXplKG1fcGFpbnRPZmZzZXQud2lkdGgoKSArIHJlbmRlcmVyLT5ib3JkZXJMZWZ0KCkgKyByZW5k
ZXJlci0+cGFkZGluZ0xlZnQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3Bh
aW50T2Zmc2V0LmhlaWdodCgpICsgcmVuZGVyZXItPmJvcmRlclRvcCgpICsgcmVuZGVyZXItPnBh
ZGRpbmdUb3AoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gSWYgd2UgZG9uJ3QgZXN0YWJs
aXNoIGEgbmV3IHBhZ2UgaGVpZ2h0LCB0aGVuIHByb3BhZ2F0ZSB0aGUgb2xkIHBhZ2UgaGVpZ2h0
IGFuZCBvZmZzZXQgZG93bi4KKyAgICAgICAgbV9wYWdlSGVpZ2h0ID0gbV9uZXh0LT5tX3BhZ2VI
ZWlnaHQ7CisgICAgICAgIG1fcGFnZU9mZnNldCA9IG1fbmV4dC0+bV9wYWdlT2Zmc2V0OworICAg
IH0KKyAgICAKKyAgICBpZiAoIW1fY29sdW1uSW5mbykKKyAgICAgICAgbV9jb2x1bW5JbmZvID0g
bV9uZXh0LT5tX2NvbHVtbkluZm87CiAKKyAgICBtX2xheW91dERlbHRhID0gbV9uZXh0LT5tX2xh
eW91dERlbHRhOworICAgIAogICAgIC8vIEZJWE1FOiA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTM0NDM+IEFwcGx5IGNvbnRyb2wgY2xpcCBpZiBwcmVzZW50LgogfQog
CiBMYXlvdXRTdGF0ZTo6TGF5b3V0U3RhdGUoUmVuZGVyT2JqZWN0KiByb290KQogICAgIDogbV9j
bGlwcGVkKGZhbHNlKQorICAgICwgbV9wYWdlSGVpZ2h0KDApCisgICAgLCBtX2NvbHVtbkluZm8o
MCkKICAgICAsIG1fbmV4dCgwKQogI2lmbmRlZiBOREVCVUcKICAgICAsIG1fcmVuZGVyZXIocm9v
dCkKQEAgLTg5LDEzICsxMTQsMTMgQEAgTGF5b3V0U3RhdGU6OkxheW91dFN0YXRlKFJlbmRlck9i
amVjdCogcgogewogICAgIFJlbmRlck9iamVjdCogY29udGFpbmVyID0gcm9vdC0+Y29udGFpbmVy
KCk7CiAgICAgRmxvYXRQb2ludCBhYnNDb250ZW50UG9pbnQgPSBjb250YWluZXItPmxvY2FsVG9B
YnNvbHV0ZShGbG9hdFBvaW50KCksIGZhbHNlLCB0cnVlKTsKLSAgICBtX29mZnNldCA9IEludFNp
emUoYWJzQ29udGVudFBvaW50LngoKSwgYWJzQ29udGVudFBvaW50LnkoKSk7CisgICAgbV9wYWlu
dE9mZnNldCA9IEludFNpemUoYWJzQ29udGVudFBvaW50LngoKSwgYWJzQ29udGVudFBvaW50Lnko
KSk7CiAKICAgICBpZiAoY29udGFpbmVyLT5oYXNPdmVyZmxvd0NsaXAoKSkgewogICAgICAgICBS
ZW5kZXJMYXllciogbGF5ZXIgPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KGNvbnRhaW5lciktPmxh
eWVyKCk7CiAgICAgICAgIG1fY2xpcHBlZCA9IHRydWU7Ci0gICAgICAgIG1fY2xpcFJlY3QgPSBJ
bnRSZWN0KHRvUG9pbnQobV9vZmZzZXQpLCBsYXllci0+c2l6ZSgpKTsKLSAgICAgICAgbV9vZmZz
ZXQgLT0gbGF5ZXItPnNjcm9sbGVkQ29udGVudE9mZnNldCgpOworICAgICAgICBtX2NsaXBSZWN0
ID0gSW50UmVjdCh0b1BvaW50KG1fcGFpbnRPZmZzZXQpLCBsYXllci0+c2l6ZSgpKTsKKyAgICAg
ICAgbV9wYWludE9mZnNldCAtPSBsYXllci0+c2Nyb2xsZWRDb250ZW50T2Zmc2V0KCk7CiAgICAg
fQogfQogCkBAIC0xMjYsNCArMTUxLDE5IEBAIHZvaWQgTGF5b3V0U3RhdGU6Om9wZXJhdG9yIGRl
bGV0ZSh2b2lkKiAKICAgICAqKHNpemVfdCopcHRyID0gc3o7CiB9CiAKK3ZvaWQgTGF5b3V0U3Rh
dGU6OmNsZWFyUGFnaW5hdGlvbkluZm9ybWF0aW9uKCkKK3sKKyAgICBtX3BhZ2VIZWlnaHQgPSBt
X25leHQtPm1fcGFnZUhlaWdodDsKKyAgICBtX3BhZ2VPZmZzZXQgPSBtX25leHQtPm1fcGFnZU9m
ZnNldDsKKyAgICBtX2NvbHVtbkluZm8gPSBtX25leHQtPm1fY29sdW1uSW5mbzsKK30KKworaW50
IExheW91dFN0YXRlOjpwYWdlWShpbnQgY2hpbGRZKSBjb25zdAoreworICAgIEFTU0VSVChtX3Bh
Z2VIZWlnaHQpOworICAgIGludCBsYXlvdXRZID0gbV9sYXlvdXRPZmZzZXQuaGVpZ2h0KCkgKyBj
aGlsZFk7CisgICAgaW50IHBhZ2VZID0gbV9wYWdlT2Zmc2V0LmhlaWdodCgpOworICAgIHJldHVy
biBsYXlvdXRZIC0gcGFnZVk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdl
YkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5k
ZXJpbmcvTGF5b3V0U3RhdGUuaAkocmV2aXNpb24gNjY4ODYpCisrKyBXZWJDb3JlL3JlbmRlcmlu
Zy9MYXlvdXRTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ29sdW1uSW5mbzsKIGNsYXNzIFJlbmRlckFyZW5hOwog
Y2xhc3MgUmVuZGVyQm94OwogY2xhc3MgUmVuZGVyT2JqZWN0OwpAQCAtNDAsNiArNDEsOCBAQCBj
bGFzcyBMYXlvdXRTdGF0ZSA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiBwdWJsaWM6CiAgICAgTGF5
b3V0U3RhdGUoKQogICAgICAgICA6IG1fY2xpcHBlZChmYWxzZSkKKyAgICAgICAgLCBtX3BhZ2VI
ZWlnaHQoMCkKKyAgICAgICAgLCBtX2NvbHVtbkluZm8oMCkKICAgICAgICAgLCBtX25leHQoMCkK
ICNpZm5kZWYgTkRFQlVHCiAgICAgICAgICwgbV9yZW5kZXJlcigwKQpAQCAtNDcsNyArNTAsNyBA
QCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIExheW91dFN0YXRlKExheW91dFN0YXRlKiwg
UmVuZGVyQm94KiwgY29uc3QgSW50U2l6ZSYgb2Zmc2V0KTsKKyAgICBMYXlvdXRTdGF0ZShMYXlv
dXRTdGF0ZSosIFJlbmRlckJveCosIGNvbnN0IEludFNpemUmIG9mZnNldCwgaW50IHBhZ2VIZWln
aHQsIENvbHVtbkluZm8qKTsKICAgICBMYXlvdXRTdGF0ZShSZW5kZXJPYmplY3QqKTsKIAogICAg
IHZvaWQgZGVzdHJveShSZW5kZXJBcmVuYSopOwpAQCAtNTgsNiArNjEsMTEgQEAgcHVibGljOgog
ICAgIC8vIE92ZXJyaWRkZW4gdG8gcHJldmVudCB0aGUgbm9ybWFsIGRlbGV0ZSBmcm9tIGJlaW5n
IGNhbGxlZC4KICAgICB2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkKiwgc2l6ZV90KTsKIAorICAg
IHZvaWQgY2xlYXJQYWdpbmF0aW9uSW5mb3JtYXRpb24oKTsKKyAgICBib29sIHBhZ2luYXRpbmdD
b2x1bW5zKCkgY29uc3QgeyByZXR1cm4gbV9jb2x1bW5JbmZvOyB9CisgICAgYm9vbCBwYWdpbmF0
ZWQoKSBjb25zdCB7IHJldHVybiBtX3BhZ2VIZWlnaHQgfHwgbV9jb2x1bW5JbmZvOyB9CisgICAg
aW50IHBhZ2VZKGludCBjaGlsZFkpIGNvbnN0OworCiBwcml2YXRlOgogICAgIC8vIFRoZSBub3Jt
YWwgb3BlcmF0b3IgbmV3IGlzIGRpc2FsbG93ZWQuCiAgICAgdm9pZCogb3BlcmF0b3IgbmV3KHNp
emVfdCkgdGhyb3coKTsKQEAgLTY1LDEwICs3MywxNiBAQCBwcml2YXRlOgogcHVibGljOgogICAg
IGJvb2wgbV9jbGlwcGVkOwogICAgIEludFJlY3QgbV9jbGlwUmVjdDsKLSAgICBJbnRTaXplIG1f
b2Zmc2V0OyAgICAgICAvLyB4L3kgb2Zmc2V0IGZyb20gY29udGFpbmVyLgorICAgIEludFNpemUg
bV9wYWludE9mZnNldDsgICAgICAgLy8geC95IG9mZnNldCBmcm9tIGNvbnRhaW5lci4gIEluY2x1
ZGVzIHJlbGF0aXZlIHBvc2l0aW9uaW5nIGFuZCBzY3JvbGwgb2Zmc2V0cy4KKyAgICBJbnRTaXpl
IG1fbGF5b3V0T2Zmc2V0OyAgICAgIC8vIHgveSBvZmZzZXQgZnJvbSBjb250YWluZXIuICBEb2Vz
IG5vdCBpbmNsdWRlIHJlbGF0aXZlIHBvc2l0aW9uaW5nIG9yIHNjcm9sbCBvZmZzZXRzLgogICAg
IEludFNpemUgbV9sYXlvdXREZWx0YTsgIC8vIFRyYW5zaWVudCBvZmZzZXQgZnJvbSB0aGUgZmlu
YWwgcG9zaXRpb24gb2YgdGhlIG9iamVjdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IHVzZWQgdG8gZW5zdXJlIHRoYXQgcmVwYWludHMgaGFwcGVuIGluIHRoZSBjb3JyZWN0IHBsYWNl
LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSB0b3RhbCBkZWx0YSBh
Y2N1bXVsYXRlZCBmcm9tIHRoZSByb290LgorCisgICAgaW50IG1fcGFnZUhlaWdodDsgICAgICAg
ICAgICAvLyBUaGUgY3VycmVudCBwYWdlIGhlaWdodCBmb3IgdGhlIHBhZ2luYXRpb24gbW9kZWwg
dGhhdCBlbmNsb3NlcyB1cy4KKyAgICBJbnRTaXplIG1fcGFnZU9mZnNldDsgICAgICAgIC8vIFRo
ZSBvZmZzZXQgb2YgdGhlIHN0YXJ0IG9mIHRoZSBmaXJzdCBwYWdlIGluIHRoZSBuZWFyZXN0IGVu
Y2xvc2luZyBwYWdpbmF0aW9uIG1vZGVsLgorICAgIENvbHVtbkluZm8qIG1fY29sdW1uSW5mbzsg
ICAgLy8gSWYgdGhlIGVuY2xvc2luZyBwYWdpbmF0aW9uIG1vZGVsIGlzIGEgY29sdW1uIG1vZGVs
LCB0aGVuIHRoaXMgd2lsbCBzdG9yZSBjb2x1bW4gaW5mb3JtYXRpb24gZm9yIGVhc3kgcmV0cmll
dmFsL21hbmlwdWxhdGlvbi4KKwogICAgIExheW91dFN0YXRlKiBtX25leHQ7CiAjaWZuZGVmIE5E
RUJVRwogICAgIFJlbmRlck9iamVjdCogbV9yZW5kZXJlcjsKSW5kZXg6IFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9jay5jcHAJKHJldmlzaW9uIDY2OTAzKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsNyArMTE0LDcgQEAgUmVuZGVyQmxvY2s6
OlJlbmRlckJsb2NrKE5vZGUqIG5vZGUpCiAgICAgICAsIG1fZmxvYXRpbmdPYmplY3RzKDApCiAg
ICAgICAsIG1fcG9zaXRpb25lZE9iamVjdHMoMCkKICAgICAgICwgbV9jb250aW51YXRpb24oMCkK
LSAgICAgICwgbV9tYXhNYXJnaW4oMCkKKyAgICAgICwgbV9yYXJlRGF0YSgwKQogICAgICAgLCBt
X2xpbmVIZWlnaHQoLTEpCiB7CiAgICAgc2V0Q2hpbGRyZW5JbmxpbmUodHJ1ZSk7CkBAIC0xMjQs
NyArMTI0LDcgQEAgUmVuZGVyQmxvY2s6On5SZW5kZXJCbG9jaygpCiB7CiAgICAgZGVsZXRlIG1f
ZmxvYXRpbmdPYmplY3RzOwogICAgIGRlbGV0ZSBtX3Bvc2l0aW9uZWRPYmplY3RzOwotICAgIGRl
bGV0ZSBtX21heE1hcmdpbjsKKyAgICBkZWxldGUgbV9yYXJlRGF0YTsKICAgICAKICAgICBpZiAo
aGFzQ29sdW1ucygpKQogICAgICAgICBkZWxldGUgZ0NvbHVtbkluZm9NYXAtPnRha2UodGhpcyk7
CkBAIC0xMTEyLDcgKzExMTIsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXQoKQogICAgICAg
ICBjbGVhckxheW91dE92ZXJmbG93KCk7CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJs
b2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbikKK3ZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2Nr
KGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgaW50IHBhZ2VIZWlnaHQpCiB7CiAgICAgQVNTRVJUKG5l
ZWRzTGF5b3V0KCkpOwogCkBAIC0xMTIyLDkgKzExMjIsNiBAQCB2b2lkIFJlbmRlckJsb2NrOjps
YXlvdXRCbG9jayhib29sIHJlbGF5CiAgICAgaWYgKCFyZWxheW91dENoaWxkcmVuICYmIGxheW91
dE9ubHlQb3NpdGlvbmVkT2JqZWN0cygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBMYXlvdXRS
ZXBhaW50ZXIgcmVwYWludGVyKCp0aGlzLCBtX2V2ZXJIYWRMYXlvdXQgJiYgY2hlY2tGb3JSZXBh
aW50RHVyaW5nTGF5b3V0KCkpOwotICAgIExheW91dFN0YXRlTWFpbnRhaW5lciBzdGF0ZVB1c2hl
cih2aWV3KCksIHRoaXMsIEludFNpemUoeCgpLCB5KCkpLCBoYXNDb2x1bW5zKCkgfHwgaGFzVHJh
bnNmb3JtKCkgfHwgaGFzUmVmbGVjdGlvbigpKTsKLQogICAgIGludCBvbGRXaWR0aCA9IHdpZHRo
KCk7CiAgICAgaW50IG9sZENvbHVtbldpZHRoID0gZGVzaXJlZENvbHVtbldpZHRoKCk7CiAKQEAg
LTExNDAsNiArMTEzNywyOCBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayhib29sIHJl
bGF5CiAKICAgICBpbnQgcHJldmlvdXNIZWlnaHQgPSBoZWlnaHQoKTsKICAgICBzZXRIZWlnaHQo
MCk7CisgICAgYm9vbCBoYXNTcGVjaWZpZWRQYWdlSGVpZ2h0ID0gZmFsc2U7CisgICAgQ29sdW1u
SW5mbyogY29sSW5mbyA9IGNvbHVtbkluZm8oKTsKKyAgICBpZiAoaGFzQ29sdW1ucygpKSB7Cisg
ICAgICAgIGlmICghcGFnZUhlaWdodCkgeworICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBnbyBh
aGVhZCBhbmQgc2V0IG91ciBleHBsaWNpdCBwYWdlIGhlaWdodCBpZiBvbmUgZXhpc3RzLCBzbyB0
aGF0IHdlIGNhbgorICAgICAgICAgICAgLy8gYXZvaWQgZG9pbmcgdHdvIGxheW91dCBwYXNzZXMu
CisgICAgICAgICAgICBjYWxjSGVpZ2h0KCk7CisgICAgICAgICAgICBpbnQgY29sdW1uSGVpZ2h0
ID0gY29udGVudEhlaWdodCgpOworICAgICAgICAgICAgaWYgKGNvbHVtbkhlaWdodCA+IDApIHsK
KyAgICAgICAgICAgICAgICBwYWdlSGVpZ2h0ID0gY29sdW1uSGVpZ2h0OworICAgICAgICAgICAg
ICAgIGhhc1NwZWNpZmllZFBhZ2VIZWlnaHQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgc2V0SGVpZ2h0KDApOworICAgICAgICB9CisgICAgICAgIGlmIChjb2xJbmZvLT5jb2x1
bW5IZWlnaHQoKSAhPSBwYWdlSGVpZ2h0ICYmIG1fZXZlckhhZExheW91dCkgeworICAgICAgICAg
ICAgY29sSW5mby0+c2V0Q29sdW1uSGVpZ2h0KHBhZ2VIZWlnaHQpOworICAgICAgICAgICAgbWFy
a0Rlc2NlbmRhbnRCbG9ja3NBbmRMaW5lc0ZvckxheW91dCgpOyAvLyBXZSBuZWVkIHRvIGRpcnR5
IGFsbCBkZXNjZW5kYW50IGJsb2NrcyBhbmQgbGluZXMsIHNpbmNlIHRoZSBjb2x1bW4gaGVpZ2h0
IGlzIGRpZmZlcmVudCBub3cuCisgICAgICAgIH0KKyAgICB9CisKKyAgICBMYXlvdXRSZXBhaW50
ZXIgcmVwYWludGVyKCp0aGlzLCBtX2V2ZXJIYWRMYXlvdXQgJiYgY2hlY2tGb3JSZXBhaW50RHVy
aW5nTGF5b3V0KCkpOworICAgIExheW91dFN0YXRlTWFpbnRhaW5lciBzdGF0ZVB1c2hlcih2aWV3
KCksIHRoaXMsIEludFNpemUoeCgpLCB5KCkpLCBoYXNDb2x1bW5zKCkgfHwgaGFzVHJhbnNmb3Jt
KCkgfHwgaGFzUmVmbGVjdGlvbigpLCBwYWdlSGVpZ2h0LCBjb2xJbmZvKTsKIAogICAgIC8vIFdl
IHVzZSBmb3VyIHZhbHVlcywgbWF4VG9wUG9zLCBtYXhUb3BOZWcsIG1heEJvdHRvbVBvcywgYW5k
IG1heEJvdHRvbU5lZywgdG8gdHJhY2sKICAgICAvLyBvdXIgY3VycmVudCBtYXhpbWFsIHBvc2l0
aXZlIGFuZCBuZWdhdGl2ZSBtYXJnaW5zLiAgVGhlc2UgdmFsdWVzIGFyZSB1c2VkIHdoZW4gd2UK
QEAgLTExODksMTAgKzEyMDgsOSBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayhib29s
IHJlbGF5CiAgICAgaWYgKGZsb2F0Qm90dG9tKCkgPiAoaGVpZ2h0KCkgLSB0b0FkZCkgJiYgZXhw
YW5kc1RvRW5jbG9zZU92ZXJoYW5naW5nRmxvYXRzKCkpCiAgICAgICAgIHNldEhlaWdodChmbG9h
dEJvdHRvbSgpICsgdG9BZGQpOwogICAgIAotICAgIC8vIE5vdyBsYXkgb3V0IG91ciBjb2x1bW5z
IHdpdGhpbiB0aGlzIGludHJpbnNpYyBoZWlnaHQsIHNpbmNlIHRoZXkgY2FuIHNsaWdodGx5IGFm
ZmVjdCB0aGUgaW50cmluc2ljIGhlaWdodCBhcwotICAgIC8vIHdlIGFkanVzdCBmb3IgY2xlYW4g
Y29sdW1uIGJyZWFrcy4KLSAgICBpbnQgc2luZ2xlQ29sdW1uQm90dG9tID0gbGF5b3V0Q29sdW1u
cygpOwotCisgICAgaWYgKGxheW91dENvbHVtbnMoaGFzU3BlY2lmaWVkUGFnZUhlaWdodCwgcGFn
ZUhlaWdodCwgc3RhdGVQdXNoZXIpKQorICAgICAgICByZXR1cm47CisgCiAgICAgLy8gQ2FsY3Vs
YXRlIG91ciBuZXcgaGVpZ2h0LgogICAgIGludCBvbGRIZWlnaHQgPSBoZWlnaHQoKTsKICAgICBj
YWxjSGVpZ2h0KCk7CkBAIC0xMjA3LDIxICsxMjI1LDE4IEBAIHZvaWQgUmVuZGVyQmxvY2s6Omxh
eW91dEJsb2NrKGJvb2wgcmVsYXkKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIFdlIGhhdmUgdG8gcmViYWxhbmNlIGNvbHVt
bnMgdG8gdGhlIG5ldyBoZWlnaHQuCi0gICAgICAgIGxheW91dENvbHVtbnMoc2luZ2xlQ29sdW1u
Qm90dG9tKTsKICAgICB9CiAKICAgICBpZiAocHJldmlvdXNIZWlnaHQgIT0gaGVpZ2h0KCkpCiAg
ICAgICAgIHJlbGF5b3V0Q2hpbGRyZW4gPSB0cnVlOwogCi0gICAgLy8gVGhpcyBjaGVjayBpcyBk
ZXNpZ25lZCB0byBjYXRjaCBhbnlvbmUKLSAgICAvLyB3aG8gd2Fzbid0IGdvaW5nIHRvIHByb3Bh
Z2F0ZSBmbG9hdCBpbmZvcm1hdGlvbiB1cCB0byB0aGUgcGFyZW50IGFuZCB5ZXQgY291bGQgcG90
ZW50aWFsbHkgYmUgcGFpbnRlZCBieSBpdHMgYW5jZXN0b3IuCi0gICAgaWYgKGlzUm9vdCgpIHx8
IGV4cGFuZHNUb0VuY2xvc2VPdmVyaGFuZ2luZ0Zsb2F0cygpKQotICAgICAgICBhZGRPdmVyZmxv
d0Zyb21GbG9hdHMoKTsKLQogICAgIC8vIEFkZCBvdmVyZmxvdyBmcm9tIGNoaWxkcmVuICh1bmxl
c3Mgd2UncmUgbXVsdGktY29sdW1uLCBzaW5jZSBpbiB0aGF0IGNhc2UgYWxsIG91ciBjaGlsZCBv
dmVyZmxvdyBpcyBjbGlwcGVkIGFueXdheSkuCiAgICAgaWYgKCFoYXNDb2x1bW5zKCkpIHsKKyAg
ICAgICAgLy8gVGhpcyBjaGVjayBpcyBkZXNpZ25lZCB0byBjYXRjaCBhbnlvbmUKKyAgICAgICAg
Ly8gd2hvIHdhc24ndCBnb2luZyB0byBwcm9wYWdhdGUgZmxvYXQgaW5mb3JtYXRpb24gdXAgdG8g
dGhlIHBhcmVudCBhbmQgeWV0IGNvdWxkIHBvdGVudGlhbGx5IGJlIHBhaW50ZWQgYnkgaXRzIGFu
Y2VzdG9yLgorICAgICAgICBpZiAoaXNSb290KCkgfHwgZXhwYW5kc1RvRW5jbG9zZU92ZXJoYW5n
aW5nRmxvYXRzKCkpCisgICAgICAgICAgICBhZGRPdmVyZmxvd0Zyb21GbG9hdHMoKTsKKwogICAg
ICAgICBpZiAoY2hpbGRyZW5JbmxpbmUoKSkKICAgICAgICAgICAgIGFkZE92ZXJmbG93RnJvbUlu
bGluZUNoaWxkcmVuKCk7CiAgICAgICAgIGVsc2UKQEAgLTEyMzcsNiArMTI1Miw5IEBAIHZvaWQg
UmVuZGVyQmxvY2s6OmxheW91dEJsb2NrKGJvb2wgcmVsYXkKICAgICAKICAgICBzdGF0ZVB1c2hl
ci5wb3AoKTsKIAorICAgIGlmICh2aWV3KCktPmxheW91dFN0YXRlKCktPm1fcGFnZUhlaWdodCkK
KyAgICAgICAgc2V0UGFnZVkodmlldygpLT5sYXlvdXRTdGF0ZSgpLT5wYWdlWSh5KCkpKTsKKwog
ICAgIC8vIFVwZGF0ZSBvdXIgc2Nyb2xsIGluZm9ybWF0aW9uIGlmIHdlJ3JlIG92ZXJmbG93OmF1
dG8vc2Nyb2xsL2hpZGRlbiBub3cgdGhhdCB3ZSBrbm93IGlmCiAgICAgLy8gd2Ugb3ZlcmZsb3cg
b3Igbm90LgogICAgIHVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgpOwpAQCAtMTQ4NSw3ICsx
NTAzLDggQEAgaW50IFJlbmRlckJsb2NrOjpjb2xsYXBzZU1hcmdpbnMoUmVuZGVyQgogICAgIGlm
IChtYXJnaW5JbmZvLnF1aXJrQ29udGFpbmVyKCkgJiYgbWFyZ2luSW5mby5hdFRvcE9mQmxvY2so
KSAmJiAocG9zVG9wIC0gbmVnVG9wKSkKICAgICAgICAgbWFyZ2luSW5mby5zZXRUb3BRdWlyayh0
b3BRdWlyayk7CiAKLSAgICBpbnQgeXBvcyA9IGhlaWdodCgpOworICAgIGludCBiZWZvcmVDb2xs
YXBzZVkgPSBoZWlnaHQoKTsKKyAgICBpbnQgeXBvcyA9IGJlZm9yZUNvbGxhcHNlWTsKICAgICBp
ZiAoY2hpbGQtPmlzU2VsZkNvbGxhcHNpbmdCbG9jaygpKSB7CiAgICAgICAgIC8vIFRoaXMgY2hp
bGQgaGFzIG5vIGhlaWdodC4gIFdlIG5lZWQgdG8gY29tcHV0ZSBvdXIKICAgICAgICAgLy8gcG9z
aXRpb24gYmVmb3JlIHdlIGNvbGxhcHNlIHRoZSBjaGlsZCdzIG1hcmdpbnMgdG9nZXRoZXIsCkBA
IC0xNTI3LDYgKzE1NDYsMTQgQEAgaW50IFJlbmRlckJsb2NrOjpjb2xsYXBzZU1hcmdpbnMoUmVu
ZGVyQgogICAgICAgICAgICAgbWFyZ2luSW5mby5zZXRCb3R0b21RdWlyayhjaGlsZC0+aXNCb3R0
b21NYXJnaW5RdWlyaygpIHx8IHN0eWxlKCktPm1hcmdpbkJvdHRvbUNvbGxhcHNlKCkgPT0gTURJ
U0NBUkQpOwogICAgIH0KICAgICAKKyAgICAvLyBJZiBtYXJnaW5zIHdvdWxkIHB1bGwgdXMgcGFz
dCB0aGUgdG9wIG9mIHRoZSBuZXh0IHBhZ2UsIHRoZW4gd2UgbmVlZCB0byBwdWxsIGJhY2sgYW5k
IHByZXRlbmQgbGlrZSB0aGUgbWFyZ2lucworICAgIC8vIGNvbGxhcHNlZCBpbnRvIHRoZSBwYWdl
IGVkZ2UuCisgICAgYm9vbCBwYWdpbmF0ZWQgPSB2aWV3KCktPmxheW91dFN0YXRlKCktPnBhZ2lu
YXRlZCgpOworICAgIGlmIChwYWdpbmF0ZWQgJiYgeXBvcyA+IGJlZm9yZUNvbGxhcHNlWSkgewor
ICAgICAgICBpbnQgb2xkWSA9IHlwb3M7CisgICAgICAgIHlwb3MgPSBtaW4oeXBvcywgbmV4dFBh
Z2VUb3AoYmVmb3JlQ29sbGFwc2VZKSk7CisgICAgICAgIHNldEhlaWdodChoZWlnaHQoKSArICh5
cG9zIC0gb2xkWSkpOworICAgIH0KICAgICByZXR1cm4geXBvczsKIH0KIApAQCAtMTU4Niw3ICsx
NjEzLDI0IEBAIGludCBSZW5kZXJCbG9jazo6ZXN0aW1hdGVWZXJ0aWNhbFBvc2l0aW8KICAgICAg
ICAgaW50IGNoaWxkTWFyZ2luVG9wID0gY2hpbGQtPnNlbGZOZWVkc0xheW91dCgpID8gY2hpbGQt
Pm1hcmdpblRvcCgpIDogY2hpbGQtPmNvbGxhcHNlZE1hcmdpblRvcCgpOwogICAgICAgICB5UG9z
RXN0aW1hdGUgKz0gbWF4KG1hcmdpbkluZm8ubWFyZ2luKCksIGNoaWxkTWFyZ2luVG9wKTsKICAg
ICB9CisgICAgCisgICAgYm9vbCBwYWdpbmF0ZWQgPSB2aWV3KCktPmxheW91dFN0YXRlKCktPnBh
Z2luYXRlZCgpOworCisgICAgLy8gQWRqdXN0IHlQb3NFc3RpbWF0ZSBkb3duIHRvIHRoZSBuZXh0
IHBhZ2UgaWYgdGhlIG1hcmdpbnMgYXJlIHNvIGxhcmdlIHRoYXQgd2UgZG9uJ3QgZml0IG9uIHRo
ZSBjdXJyZW50CisgICAgLy8gcGFnZS4KKyAgICBpZiAocGFnaW5hdGVkICYmIHlQb3NFc3RpbWF0
ZSA+IGhlaWdodCgpKQorICAgICAgICB5UG9zRXN0aW1hdGUgPSBtaW4oeVBvc0VzdGltYXRlLCBu
ZXh0UGFnZVRvcChoZWlnaHQoKSkpOworCiAgICAgeVBvc0VzdGltYXRlICs9IGdldENsZWFyRGVs
dGEoY2hpbGQsIHlQb3NFc3RpbWF0ZSk7CisgICAgCisgICAgaWYgKHBhZ2luYXRlZCkgeworICAg
ICAgICAvLyBJZiB0aGUgb2JqZWN0IGhhcyBhIHBhZ2Ugb3IgY29sdW1uIGJyZWFrIHZhbHVlIG9m
ICJiZWZvcmUiLCB0aGVuIHdlIHNob3VsZCBzaGlmdCB0byB0aGUgdG9wIG9mIHRoZSBuZXh0IHBh
Z2UuCisgICAgICAgIHlQb3NFc3RpbWF0ZSA9IGFwcGx5QmVmb3JlQnJlYWsoY2hpbGQsIHlQb3NF
c3RpbWF0ZSk7CisgICAgCisgICAgICAgIC8vIEZvciByZXBsYWNlZCBlbGVtZW50cyBhbmQgc2Ny
b2xsZWQgZWxlbWVudHMsIHdlIHdhbnQgdG8gc2hpZnQgdGhlbSB0byB0aGUgbmV4dCBwYWdlIGlm
IHRoZXkgZG9uJ3QgZml0IG9uIHRoZSBjdXJyZW50IG9uZS4KKyAgICAgICAgeVBvc0VzdGltYXRl
ID0gYWRqdXN0Rm9yVW5zcGxpdHRhYmxlQ2hpbGQoY2hpbGQsIHlQb3NFc3RpbWF0ZSk7CisgICAg
fQorCiAgICAgcmV0dXJuIHlQb3NFc3RpbWF0ZTsKIH0KIApAQCAtMTc3Niw4ICsxODIwLDkgQEAg
dm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2tDaGlsZChSZW5kZQogICAgIHZpZXcoKS0+YWRk
TGF5b3V0RGVsdGEoSW50U2l6ZSgwLCBjaGlsZC0+eSgpIC0geVBvc0VzdGltYXRlKSk7CiAgICAg
Y2hpbGQtPnNldExvY2F0aW9uKGNoaWxkLT54KCksIHlQb3NFc3RpbWF0ZSk7CiAKKyAgICBSZW5k
ZXJCbG9jayogY2hpbGRCbG9ja0Zsb3cgPSBjaGlsZC0+aXNCbG9ja0Zsb3coKSA/IHRvUmVuZGVy
QmxvY2soY2hpbGQpIDogMDsKICAgICBib29sIG1hcmtEZXNjZW5kYW50c1dpdGhGbG9hdHMgPSBm
YWxzZTsKLSAgICBpZiAoeVBvc0VzdGltYXRlICE9IG9sZFJlY3QueSgpICYmICFjaGlsZC0+YXZv
aWRzRmxvYXRzKCkgJiYgY2hpbGQtPmlzQmxvY2tGbG93KCkgJiYgdG9SZW5kZXJCbG9jayhjaGls
ZCktPmNvbnRhaW5zRmxvYXRzKCkpCisgICAgaWYgKHlQb3NFc3RpbWF0ZSAhPSBvbGRSZWN0Lnko
KSAmJiAhY2hpbGQtPmF2b2lkc0Zsb2F0cygpICYmIGNoaWxkQmxvY2tGbG93ICYmIGNoaWxkQmxv
Y2tGbG93LT5jb250YWluc0Zsb2F0cygpKQogICAgICAgICBtYXJrRGVzY2VuZGFudHNXaXRoRmxv
YXRzID0gdHJ1ZTsKICAgICBlbHNlIGlmICghY2hpbGQtPmF2b2lkc0Zsb2F0cygpIHx8IGNoaWxk
LT5zaHJpbmtUb0F2b2lkRmxvYXRzKCkpIHsKICAgICAgICAgLy8gSWYgYW4gZWxlbWVudCBtaWdo
dCBiZSBhZmZlY3RlZCBieSB0aGUgcHJlc2VuY2Ugb2YgZmxvYXRzLCB0aGVuIGFsd2F5cyBtYXJr
IGl0IGZvcgpAQCAtMTc4NywxOCArMTgzMiwyNCBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRC
bG9ja0NoaWxkKFJlbmRlCiAgICAgICAgICAgICBtYXJrRGVzY2VuZGFudHNXaXRoRmxvYXRzID0g
dHJ1ZTsKICAgICB9CiAKLSAgICBpZiAoY2hpbGQtPmlzUmVuZGVyQmxvY2soKSkgeworICAgIGlm
IChjaGlsZEJsb2NrRmxvdykgewogICAgICAgICBpZiAobWFya0Rlc2NlbmRhbnRzV2l0aEZsb2F0
cykKLSAgICAgICAgICAgIHRvUmVuZGVyQmxvY2soY2hpbGQpLT5tYXJrQWxsRGVzY2VuZGFudHNX
aXRoRmxvYXRzRm9yTGF5b3V0KCk7Ci0KKyAgICAgICAgICAgIGNoaWxkQmxvY2tGbG93LT5tYXJr
QWxsRGVzY2VuZGFudHNXaXRoRmxvYXRzRm9yTGF5b3V0KCk7CiAgICAgICAgIHByZXZpb3VzRmxv
YXRCb3R0b20gPSBtYXgocHJldmlvdXNGbG9hdEJvdHRvbSwgb2xkUmVjdC55KCkgKyB0b1JlbmRl
ckJsb2NrKGNoaWxkKS0+ZmxvYXRCb3R0b20oKSk7CiAgICAgfQogCisgICAgYm9vbCBwYWdpbmF0
ZWQgPSB2aWV3KCktPmxheW91dFN0YXRlKCktPnBhZ2luYXRlZCgpOworICAgIGlmIChwYWdpbmF0
ZWQgJiYgdmlldygpLT5sYXlvdXRTdGF0ZSgpLT5tX3BhZ2VIZWlnaHQgJiYgY2hpbGRCbG9ja0Zs
b3cgJiYgdmlldygpLT5sYXlvdXRTdGF0ZSgpLT5wYWdlWShjaGlsZC0+eSgpKSAhPSBjaGlsZEJs
b2NrRmxvdy0+cGFnZVkoKSkKKyAgICAgICAgY2hpbGRCbG9ja0Zsb3ctPnNldENoaWxkTmVlZHNM
YXlvdXQodHJ1ZSwgZmFsc2UpOworCiAgICAgYm9vbCBjaGlsZEhhZExheW91dCA9IGNoaWxkLT5t
X2V2ZXJIYWRMYXlvdXQ7CiAgICAgYm9vbCBjaGlsZE5lZWRlZExheW91dCA9IGNoaWxkLT5uZWVk
c0xheW91dCgpOwogICAgIGlmIChjaGlsZE5lZWRlZExheW91dCkKICAgICAgICAgY2hpbGQtPmxh
eW91dCgpOwogCisgICAgLy8gQ2FjaGUgaWYgd2UgYXJlIGF0IHRoZSB0b3Agb2YgdGhlIGJsb2Nr
IHJpZ2h0IG5vdy4KKyAgICBib29sIGF0VG9wT2ZCbG9jayA9IG1hcmdpbkluZm8uYXRUb3BPZkJs
b2NrKCk7CisKICAgICAvLyBOb3cgZGV0ZXJtaW5lIHRoZSBjb3JyZWN0IHlwb3MgYmFzZWQgb2Zm
IGV4YW1pbmF0aW9uIG9mIGNvbGxhcHNpbmcgbWFyZ2luCiAgICAgLy8gdmFsdWVzLgogICAgIGlu
dCB5QmVmb3JlQ2xlYXIgPSBjb2xsYXBzZU1hcmdpbnMoY2hpbGQsIG1hcmdpbkluZm8pOwpAQCAt
MTgwNiw2ICsxODU3LDMyIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrQ2hpbGQoUmVu
ZGUKICAgICAvLyBOb3cgY2hlY2sgZm9yIGNsZWFyLgogICAgIGludCB5QWZ0ZXJDbGVhciA9IGNs
ZWFyRmxvYXRzSWZOZWVkZWQoY2hpbGQsIG1hcmdpbkluZm8sIG9sZFRvcFBvc01hcmdpbiwgb2xk
VG9wTmVnTWFyZ2luLCB5QmVmb3JlQ2xlYXIpOwogICAgIAorICAgIGlmIChwYWdpbmF0ZWQpIHsK
KyAgICAgICAgaW50IG9sZFkgPSB5QWZ0ZXJDbGVhcjsKKyAgICAgICAgCisgICAgICAgIC8vIElm
IHRoZSBvYmplY3QgaGFzIGEgcGFnZSBvciBjb2x1bW4gYnJlYWsgdmFsdWUgb2YgImJlZm9yZSIs
IHRoZW4gd2Ugc2hvdWxkIHNoaWZ0IHRvIHRoZSB0b3Agb2YgdGhlIG5leHQgcGFnZS4KKyAgICAg
ICAgeUFmdGVyQ2xlYXIgPSBhcHBseUJlZm9yZUJyZWFrKGNoaWxkLCB5QWZ0ZXJDbGVhcik7Cisg
ICAgCisgICAgICAgIC8vIEZvciByZXBsYWNlZCBlbGVtZW50cyBhbmQgc2Nyb2xsZWQgZWxlbWVu
dHMsIHdlIHdhbnQgdG8gc2hpZnQgdGhlbSB0byB0aGUgbmV4dCBwYWdlIGlmIHRoZXkgZG9uJ3Qg
Zml0IG9uIHRoZSBjdXJyZW50IG9uZS4KKyAgICAgICAgeUFmdGVyQ2xlYXIgPSBhZGp1c3RGb3JV
bnNwbGl0dGFibGVDaGlsZChjaGlsZCwgeUFmdGVyQ2xlYXIpOworICAgICAgICAKKyAgICAgICAg
aWYgKGNoaWxkQmxvY2tGbG93LT5wYWdpbmF0aW9uU3RydXQoKSkgeworICAgICAgICAgICAgLy8g
V2UgYXJlIHdpbGxpbmcgdG8gcHJvcGFnYXRlIG91dCB0byBvdXIgcGFyZW50IGJsb2NrIGFzIGxv
bmcgYXMgd2Ugd2VyZSBhdCB0aGUgdG9wIG9mIHRoZSBibG9jayBwcmlvcgorICAgICAgICAgICAg
Ly8gdG8gY29sbGFwc2luZyBvdXIgbWFyZ2lucywgYW5kIGFzIGxvbmcgYXMgd2UgZGlkbid0IGNs
ZWFyIG9yIG1vdmUgYXMgYSByZXN1bHQgb2Ygb3RoZXIgcGFnaW5hdGlvbi4KKyAgICAgICAgICAg
IGlmIChhdFRvcE9mQmxvY2sgJiYgb2xkWSA9PSB5QmVmb3JlQ2xlYXIgJiYgIWlzUG9zaXRpb25l
ZCgpICYmICFpc1RhYmxlQ2VsbCgpKSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFNob3Vs
ZCByZWFsbHkgY2hlY2sgaWYgd2UncmUgZXhjZWVkaW5nIHRoZSBwYWdlIGhlaWdodCBiZWZvcmUg
cHJvcGFnYXRpbmcgdGhlIHN0cnV0LCBidXQgd2UgZG9uJ3QKKyAgICAgICAgICAgICAgICAvLyBo
YXZlIGFsbCB0aGUgaW5mb3JtYXRpb24gdG8gZG8gc28gKHRoZSBzdHJ1dCBvbmx5IGhhcyB0aGUg
cmVtYWluaW5nIGFtb3VudCB0byBwdXNoKS4gIEdlY2tvIGdldHMgdGhpcyB3cm9uZyB0b28KKyAg
ICAgICAgICAgICAgICAvLyBhbmQgcHVzaGVzIHRvIHRoZSBuZXh0IHBhZ2UgYW55d2F5LCBzbyBu
b3QgdG9vIGNvbmNlcm5lZCBhYm91dCBpdC4KKyAgICAgICAgICAgICAgICBzZXRQYWdpbmF0aW9u
U3RydXQoeUFmdGVyQ2xlYXIgKyBjaGlsZEJsb2NrRmxvdy0+cGFnaW5hdGlvblN0cnV0KCkpOwor
ICAgICAgICAgICAgICAgIGNoaWxkQmxvY2tGbG93LT5zZXRQYWdpbmF0aW9uU3RydXQoMCk7Cisg
ICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICB5QWZ0ZXJDbGVhciArPSBjaGlsZEJs
b2NrRmxvdy0+cGFnaW5hdGlvblN0cnV0KCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBTaW1p
bGFyIHRvIGhvdyB3ZSBhcHBseSBjbGVhcmFuY2UuICBHbyBhaGVhZCBhbmQgYm9vc3QgaGVpZ2h0
KCkgdG8gYmUgdGhlIHBsYWNlIHdoZXJlIHdlJ3JlIGdvaW5nIHRvIHBvc2l0aW9uIHRoZSBjaGls
ZC4KKyAgICAgICAgc2V0SGVpZ2h0KGhlaWdodCgpICsgKHlBZnRlckNsZWFyIC0gb2xkWSkpOwor
ICAgIH0KKwogICAgIHZpZXcoKS0+YWRkTGF5b3V0RGVsdGEoSW50U2l6ZSgwLCB5UG9zRXN0aW1h
dGUgLSB5QWZ0ZXJDbGVhcikpOwogICAgIGNoaWxkLT5zZXRMb2NhdGlvbihjaGlsZC0+eCgpLCB5
QWZ0ZXJDbGVhcik7CiAKQEAgLTE4MTgsOCArMTg5NSwxMyBAQCB2b2lkIFJlbmRlckJsb2NrOjps
YXlvdXRCbG9ja0NoaWxkKFJlbmRlCiAgICAgICAgICAgICAvLyBTbyBnbyBhaGVhZCBhbmQgbWFy
ayB0aGUgaXRlbSBhcyBkaXJ0eS4KICAgICAgICAgICAgIGNoaWxkLT5zZXRDaGlsZE5lZWRzTGF5
b3V0KHRydWUsIGZhbHNlKTsKICAgICAgICAgfQotICAgICAgICBpZiAoIWNoaWxkLT5hdm9pZHNG
bG9hdHMoKSAmJiBjaGlsZC0+aXNCbG9ja0Zsb3coKSAmJiB0b1JlbmRlckJsb2NrKGNoaWxkKS0+
Y29udGFpbnNGbG9hdHMoKSkKLSAgICAgICAgICAgIHRvUmVuZGVyQmxvY2soY2hpbGQpLT5tYXJr
QWxsRGVzY2VuZGFudHNXaXRoRmxvYXRzRm9yTGF5b3V0KCk7CisgICAgICAgIGlmIChjaGlsZEJs
b2NrRmxvdykgeworICAgICAgICAgICAgaWYgKCFjaGlsZC0+YXZvaWRzRmxvYXRzKCkgJiYgY2hp
bGRCbG9ja0Zsb3ctPmNvbnRhaW5zRmxvYXRzKCkpCisgICAgICAgICAgICAgICAgY2hpbGRCbG9j
a0Zsb3ctPm1hcmtBbGxEZXNjZW5kYW50c1dpdGhGbG9hdHNGb3JMYXlvdXQoKTsKKyAgICAgICAg
ICAgIGlmIChwYWdpbmF0ZWQgJiYgIWNoaWxkLT5uZWVkc0xheW91dCgpICYmIHZpZXcoKS0+bGF5
b3V0U3RhdGUoKS0+bV9wYWdlSGVpZ2h0ICYmIHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+cGFnZVko
Y2hpbGQtPnkoKSkgIT0gY2hpbGRCbG9ja0Zsb3ctPnBhZ2VZKCkpCisgICAgICAgICAgICAgICAg
Y2hpbGQtPnNldENoaWxkTmVlZHNMYXlvdXQodHJ1ZSwgZmFsc2UpOworICAgICAgICB9CisKICAg
ICAgICAgLy8gT3VyIGd1ZXNzIHdhcyB3cm9uZy4gTWFrZSB0aGUgY2hpbGQgbGF5IGl0c2VsZiBv
dXQgYWdhaW4uCiAgICAgICAgIGNoaWxkLT5sYXlvdXRJZk5lZWRlZCgpOwogICAgIH0KQEAgLTE4
NDAsNyArMTkyMiw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrQ2hpbGQoUmVuZGUK
ICAgICB9CiAgICAgLy8gSWYgdGhlIGNoaWxkIGhhcyBvdmVyaGFuZ2luZyBmbG9hdHMgdGhhdCBp
bnRydWRlIGludG8gZm9sbG93aW5nIHNpYmxpbmdzIChvciBwb3NzaWJseSBvdXQKICAgICAvLyBv
ZiB0aGlzIGJsb2NrKSwgdGhlbiB0aGUgcGFyZW50IGdldHMgbm90aWZpZWQgb2YgdGhlIGZsb2F0
cyBub3cuCi0gICAgaWYgKGNoaWxkLT5pc0Jsb2NrRmxvdygpICYmIHRvUmVuZGVyQmxvY2soY2hp
bGQpLT5jb250YWluc0Zsb2F0cygpKQorICAgIGlmIChjaGlsZEJsb2NrRmxvdyAmJiBjaGlsZEJs
b2NrRmxvdy0+Y29udGFpbnNGbG9hdHMoKSkKICAgICAgICAgbWF4RmxvYXRCb3R0b20gPSBtYXgo
bWF4RmxvYXRCb3R0b20sIGFkZE92ZXJoYW5naW5nRmxvYXRzKHRvUmVuZGVyQmxvY2soY2hpbGQp
LCAtY2hpbGQtPngoKSwgLWNoaWxkLT55KCksICFjaGlsZE5lZWRlZExheW91dCkpOwogCiAgICAg
SW50U2l6ZSBjaGlsZE9mZnNldChjaGlsZC0+eCgpIC0gb2xkUmVjdC54KCksIGNoaWxkLT55KCkg
LSBvbGRSZWN0LnkoKSk7CkBAIC0xODU5LDYgKzE5NDEsMTMgQEAgdm9pZCBSZW5kZXJCbG9jazo6
bGF5b3V0QmxvY2tDaGlsZChSZW5kZQogICAgICAgICBjaGlsZC0+cmVwYWludE92ZXJoYW5naW5n
RmxvYXRzKHRydWUpOwogICAgIH0KIAorICAgIGlmIChwYWdpbmF0ZWQpIHsKKyAgICAgICAgLy8g
Q2hlY2sgZm9yIGFuIGFmdGVyIHBhZ2UvY29sdW1uIGJyZWFrLgorICAgICAgICBpbnQgbmV3SGVp
Z2h0ID0gYXBwbHlBZnRlckJyZWFrKGNoaWxkLCBoZWlnaHQoKSwgbWFyZ2luSW5mbyk7CisgICAg
ICAgIGlmIChuZXdIZWlnaHQgIT0gaGVpZ2h0KCkpCisgICAgICAgICAgICBzZXRIZWlnaHQobmV3
SGVpZ2h0KTsKKyAgICB9CisKICAgICBBU1NFUlQob2xkTGF5b3V0RGVsdGEgPT0gdmlldygpLT5s
YXlvdXREZWx0YSgpKTsKIH0KIApAQCAtMTg4OSw2ICsxOTc4LDkgQEAgYm9vbCBSZW5kZXJCbG9j
azo6bGF5b3V0T25seVBvc2l0aW9uZWRPYgogdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0UG9zaXRp
b25lZE9iamVjdHMoYm9vbCByZWxheW91dENoaWxkcmVuKQogewogICAgIGlmIChtX3Bvc2l0aW9u
ZWRPYmplY3RzKSB7CisgICAgICAgIGlmIChoYXNDb2x1bW5zKCkpCisgICAgICAgICAgICB2aWV3
KCktPmxheW91dFN0YXRlKCktPmNsZWFyUGFnaW5hdGlvbkluZm9ybWF0aW9uKCk7IC8vIFBvc2l0
aW9uZWQgb2JqZWN0cyBhcmUgbm90IHBhcnQgb2YgdGhlIGNvbHVtbiBmbG93LCBzbyB0aGV5IGRv
bid0IHBhZ2luYXRlIHdpdGggdGhlIGNvbHVtbnMuCisKICAgICAgICAgUmVuZGVyQm94KiByOwog
ICAgICAgICBJdGVyYXRvciBlbmQgPSBtX3Bvc2l0aW9uZWRPYmplY3RzLT5lbmQoKTsKICAgICAg
ICAgZm9yIChJdGVyYXRvciBpdCA9IG1fcG9zaXRpb25lZE9iamVjdHMtPmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgewpAQCAtMTkxMCw2ICsyMDAyLDkgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5
b3V0UG9zaXRpb25lZE9iamVjdAogICAgICAgICAgICAgICAgIHItPnRyeUxheW91dERvaW5nUG9z
aXRpb25lZE1vdmVtZW50T25seSgpOwogICAgICAgICAgICAgci0+bGF5b3V0SWZOZWVkZWQoKTsK
ICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGhhc0NvbHVtbnMoKSkKKyAgICAgICAg
ICAgIHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+bV9jb2x1bW5JbmZvID0gY29sdW1uSW5mbygpOyAv
LyBGSVhNRTogS2luZCBvZiBncm9zcy4gV2UganVzdCBwdXQgdGhpcyBiYWNrIGludG8gdGhlIGxh
eW91dCBzdGF0ZSBzbyB0aGF0IHBvcCgpIHdpbGwgd29yay4KICAgICB9CiB9CiAKQEAgLTE5OTcs
MTIgKzIwOTIsMTIgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRDb2x1bW5SdWxlcyhQYWludAog
CiAgICAgLy8gV2UgbmVlZCB0byBkbyBtdWx0aXBsZSBwYXNzZXMsIGJyZWFraW5nIHVwIG91ciBj
aGlsZCBwYWludGluZyBpbnRvIHN0cmlwcy4KICAgICBDb2x1bW5JbmZvKiBjb2xJbmZvID0gY29s
dW1uSW5mbygpOwotICAgIHVuc2lnbmVkIGNvbENvdW50ID0gY29sSW5mby0+Y29sdW1uQ291bnQo
KTsKKyAgICB1bnNpZ25lZCBjb2xDb3VudCA9IGNvbHVtbkNvdW50KGNvbEluZm8pOwogICAgIGlu
dCBjdXJyWE9mZnNldCA9IHN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUiA/IDAgOiBjb250ZW50
V2lkdGgoKTsKICAgICBpbnQgcnVsZUFkZCA9IGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCk7
CiAgICAgaW50IHJ1bGVYID0gc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8gMCA6IGNvbnRl
bnRXaWR0aCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb2xDb3VudDsgaSsrKSB7
Ci0gICAgICAgIEludFJlY3QgY29sUmVjdCA9IGNvbEluZm8tPmNvbHVtblJlY3RBdChpKTsKKyAg
ICAgICAgSW50UmVjdCBjb2xSZWN0ID0gY29sdW1uUmVjdEF0KGNvbEluZm8sIGkpOwogCiAgICAg
ICAgIC8vIE1vdmUgdG8gdGhlIG5leHQgcG9zaXRpb24uCiAgICAgICAgIGlmIChzdHlsZSgpLT5k
aXJlY3Rpb24oKSA9PSBMVFIpIHsKQEAgLTIwMzMsMTQgKzIxMjgsMTQgQEAgdm9pZCBSZW5kZXJC
bG9jazo6cGFpbnRDb2x1bW5Db250ZW50cyhQYQogICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCA9IHBhaW50SW5mby5jb250ZXh0OwogICAgIGludCBjb2xHYXAgPSBjb2x1bW5HYXAoKTsKICAg
ICBDb2x1bW5JbmZvKiBjb2xJbmZvID0gY29sdW1uSW5mbygpOwotICAgIHVuc2lnbmVkIGNvbENv
dW50ID0gY29sSW5mby0+Y29sdW1uQ291bnQoKTsKKyAgICB1bnNpZ25lZCBjb2xDb3VudCA9IGNv
bHVtbkNvdW50KGNvbEluZm8pOwogICAgIGlmICghY29sQ291bnQpCiAgICAgICAgIHJldHVybjsK
LSAgICBpbnQgY3VyclhPZmZzZXQgPSBzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIgPyAwIDog
Y29udGVudFdpZHRoKCkgLSBjb2xJbmZvLT5jb2x1bW5SZWN0QXQoMCkud2lkdGgoKTsKKyAgICBp
bnQgY3VyclhPZmZzZXQgPSBzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIgPyAwIDogY29udGVu
dFdpZHRoKCkgLSBjb2x1bW5SZWN0QXQoY29sSW5mbywgMCkud2lkdGgoKTsKICAgICBpbnQgY3Vy
cllPZmZzZXQgPSAwOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb2xDb3VudDsgaSsr
KSB7CiAgICAgICAgIC8vIEZvciBlYWNoIHJlY3QsIHdlIGNsaXAgdG8gdGhlIHJlY3QsIGFuZCB0
aGVuIHdlIGFkanVzdCBvdXIgY29vcmRzLgotICAgICAgICBJbnRSZWN0IGNvbFJlY3QgPSBjb2xJ
bmZvLT5jb2x1bW5SZWN0QXQoaSk7CisgICAgICAgIEludFJlY3QgY29sUmVjdCA9IGNvbHVtblJl
Y3RBdChjb2xJbmZvLCBpKTsKICAgICAgICAgY29sUmVjdC5tb3ZlKHR4LCB0eSk7CiAgICAgICAg
IFBhaW50SW5mbyBpbmZvKHBhaW50SW5mbyk7CiAgICAgICAgIGluZm8ucmVjdC5pbnRlcnNlY3Qo
Y29sUmVjdCk7CkBAIC0yMDk4LDE0ICsyMTkzLDEzIEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50
Q2hpbGRyZW4oUGFpbnRJbmYKICAgICBpbmZvLnVwZGF0ZVBhaW50aW5nUm9vdEZvckNoaWxkcmVu
KHRoaXMpOwogICAgIAogICAgIFJlbmRlclZpZXcqIHJlbmRlclZpZXcgPSB2aWV3KCk7Ci0gICAg
Ym9vbCB1c2VQcmludFJlY3QgPSAhcmVuZGVyVmlldy0+cHJpbnRSZWN0KCkuaXNFbXB0eSgpICYm
ICFkb2N1bWVudCgpLT5zZXR0aW5ncygpLT5wYWdpbmF0ZUR1cmluZ0xheW91dEVuYWJsZWQoKTsK
KyAgICBib29sIHVzZVByaW50UmVjdCA9ICFyZW5kZXJWaWV3LT5wcmludFJlY3QoKS5pc0VtcHR5
KCk7CiAgICAgCiAgICAgYm9vbCBjaGVja1BhZ2VCcmVha3MgPSBkb2N1bWVudCgpLT5wYWdpbmF0
ZWQoKSAmJiAhZG9jdW1lbnQoKS0+c2V0dGluZ3MoKS0+cGFnaW5hdGVEdXJpbmdMYXlvdXRFbmFi
bGVkKCk7Ci0gICAgYm9vbCBjaGVja0NvbHVtbkJyZWFrcyA9ICFjaGVja1BhZ2VCcmVha3MgJiYg
dXNlUHJpbnRSZWN0OwogCiAgICAgZm9yIChSZW5kZXJCb3gqIGNoaWxkID0gZmlyc3RDaGlsZEJv
eCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmdCb3goKSkgeyAgICAgICAgCiAg
ICAgICAgIC8vIENoZWNrIGZvciBwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzLCBhbmQgaWYgaXQn
cyBzZXQsIGJyZWFrIGFuZCBiYWlsLgotICAgICAgICBib29sIGNoZWNrQmVmb3JlQWx3YXlzID0g
IWNoaWxkcmVuSW5saW5lKCkgJiYgKChjaGVja1BhZ2VCcmVha3MgJiYgY2hpbGQtPnN0eWxlKCkt
PnBhZ2VCcmVha0JlZm9yZSgpID09IFBCQUxXQVlTKSB8fCAoY2hlY2tDb2x1bW5CcmVha3MgJiYg
Y2hpbGQtPnN0eWxlKCktPmNvbHVtbkJyZWFrQmVmb3JlKCkgPT0gUEJBTFdBWVMpKTsKKyAgICAg
ICAgYm9vbCBjaGVja0JlZm9yZUFsd2F5cyA9ICFjaGlsZHJlbklubGluZSgpICYmIChjaGVja1Bh
Z2VCcmVha3MgJiYgY2hpbGQtPnN0eWxlKCktPnBhZ2VCcmVha0JlZm9yZSgpID09IFBCQUxXQVlT
KTsKICAgICAgICAgaWYgKGNoZWNrQmVmb3JlQWx3YXlzCiAgICAgICAgICAgICAmJiAodHkgKyBj
aGlsZC0+eSgpKSA+IHBhaW50SW5mby5yZWN0LnkoKQogICAgICAgICAgICAgJiYgKHR5ICsgY2hp
bGQtPnkoKSkgPCBwYWludEluZm8ucmVjdC5ib3R0b20oKSkgewpAQCAtMjEyOCw3ICsyMjIyLDcg
QEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRDaGlsZHJlbihQYWludEluZgogICAgICAgICAgICAg
Y2hpbGQtPnBhaW50KGluZm8sIHR4LCB0eSk7CiAKICAgICAgICAgLy8gQ2hlY2sgZm9yIHBhZ2Ut
YnJlYWstYWZ0ZXI6IGFsd2F5cywgYW5kIGlmIGl0J3Mgc2V0LCBicmVhayBhbmQgYmFpbC4KLSAg
ICAgICAgYm9vbCBjaGVja0FmdGVyQWx3YXlzID0gIWNoaWxkcmVuSW5saW5lKCkgJiYgKChjaGVj
a1BhZ2VCcmVha3MgJiYgY2hpbGQtPnN0eWxlKCktPnBhZ2VCcmVha0FmdGVyKCkgPT0gUEJBTFdB
WVMpIHx8IChjaGVja0NvbHVtbkJyZWFrcyAmJiBjaGlsZC0+c3R5bGUoKS0+Y29sdW1uQnJlYWtB
ZnRlcigpID09IFBCQUxXQVlTKSk7CisgICAgICAgIGJvb2wgY2hlY2tBZnRlckFsd2F5cyA9ICFj
aGlsZHJlbklubGluZSgpICYmIChjaGVja1BhZ2VCcmVha3MgJiYgY2hpbGQtPnN0eWxlKCktPnBh
Z2VCcmVha0FmdGVyKCkgPT0gUEJBTFdBWVMpOwogICAgICAgICBpZiAoY2hlY2tBZnRlckFsd2F5
cwogICAgICAgICAgICAgJiYgKHR5ICsgY2hpbGQtPnkoKSArIGNoaWxkLT5oZWlnaHQoKSkgPiBw
YWludEluZm8ucmVjdC55KCkKICAgICAgICAgICAgICYmICh0eSArIGNoaWxkLT55KCkgKyBjaGls
ZC0+aGVpZ2h0KCkpIDwgcGFpbnRJbmZvLnJlY3QuYm90dG9tKCkpIHsKQEAgLTI3NzYsNyArMjg3
MCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnJlbW92ZVBvc2l0aW9uZWRPYmplY3QKICAgICAgICAg
bV9wb3NpdGlvbmVkT2JqZWN0cy0+cmVtb3ZlKGRlYWRPYmplY3RzLmF0KGkpKTsKIH0KIAotdm9p
ZCBSZW5kZXJCbG9jazo6aW5zZXJ0RmxvYXRpbmdPYmplY3QoUmVuZGVyQm94KiBvKQorUmVuZGVy
QmxvY2s6OkZsb2F0aW5nT2JqZWN0KiBSZW5kZXJCbG9jazo6aW5zZXJ0RmxvYXRpbmdPYmplY3Qo
UmVuZGVyQm94KiBvKQogewogICAgIEFTU0VSVChvLT5pc0Zsb2F0aW5nKCkpOwogCkBAIC0yNzg5
LDI1ICsyODgzLDM3IEBAIHZvaWQgUmVuZGVyQmxvY2s6Omluc2VydEZsb2F0aW5nT2JqZWN0KFIK
ICAgICAgICAgRGVwcmVjYXRlZFB0ckxpc3RJdGVyYXRvcjxGbG9hdGluZ09iamVjdD4gaXQoKm1f
ZmxvYXRpbmdPYmplY3RzKTsKICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGY7CiAgICAgICAgIHdo
aWxlICggKGYgPSBpdC5jdXJyZW50KCkpICkgewotICAgICAgICAgICAgaWYgKGYtPm1fcmVuZGVy
ZXIgPT0gbykgcmV0dXJuOworICAgICAgICAgICAgaWYgKGYtPm1fcmVuZGVyZXIgPT0gbykKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZjsKICAgICAgICAgICAgICsraXQ7CiAgICAgICAgIH0KICAg
ICB9CiAKICAgICAvLyBDcmVhdGUgdGhlIHNwZWNpYWwgb2JqZWN0IGVudHJ5ICYgYXBwZW5kIGl0
IHRvIHRoZSBsaXN0CiAKLSAgICBvLT5sYXlvdXRJZk5lZWRlZCgpOwotCiAgICAgRmxvYXRpbmdP
YmplY3QqIG5ld09iaiA9IG5ldyBGbG9hdGluZ09iamVjdChvLT5zdHlsZSgpLT5mbG9hdGluZygp
ID09IEZMRUZUID8gRmxvYXRpbmdPYmplY3Q6OkZsb2F0TGVmdCA6IEZsb2F0aW5nT2JqZWN0OjpG
bG9hdFJpZ2h0KTsKIAogICAgIG5ld09iai0+bV90b3AgPSAtMTsKICAgICBuZXdPYmotPm1fYm90
dG9tID0gLTE7CisgICAgCisgICAgLy8gT3VyIGxvY2F0aW9uIGlzIGlycmVsZXZhbnQgaWYgd2Un
cmUgdW5zcGxpdHRhYmxlIG9yIG5vIHBhZ2luYXRpb24gaXMgaW4gZWZmZWN0LiAgSnVzdCBnbyBh
aGVhZAorICAgIC8vIGFuZCBsYXkgb3V0IHRoZSBmbG9hdC4KKyAgICBib29sIGFmZmVjdGVkQnlQ
YWdpbmF0aW9uID0gby0+aXNSZW5kZXJCbG9jaygpICYmIHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+
bV9wYWdlSGVpZ2h0OworICAgIGlmICghYWZmZWN0ZWRCeVBhZ2luYXRpb24pCisgICAgICAgIG8t
PmxheW91dElmTmVlZGVkKCk7CisgICAgZWxzZSB7CisgICAgICAgIG8tPmNhbGNXaWR0aCgpOwor
ICAgICAgICBvLT5jYWxjVmVydGljYWxNYXJnaW5zKCk7CisgICAgfQogICAgIG5ld09iai0+bV93
aWR0aCA9IG8tPndpZHRoKCkgKyBvLT5tYXJnaW5MZWZ0KCkgKyBvLT5tYXJnaW5SaWdodCgpOwor
CiAgICAgbmV3T2JqLT5tX3Nob3VsZFBhaW50ID0gIW8tPmhhc1NlbGZQYWludGluZ0xheWVyKCk7
IC8vIElmIGEgbGF5ZXIgZXhpc3RzLCB0aGUgZmxvYXQgd2lsbCBwYWludCBpdHNlbGYuICBPdGhl
cndpc2Ugc29tZW9uZSBlbHNlIHdpbGwuCiAgICAgbmV3T2JqLT5tX2lzRGVzY2VuZGFudCA9IHRy
dWU7CiAgICAgbmV3T2JqLT5tX3JlbmRlcmVyID0gbzsKIAogICAgIG1fZmxvYXRpbmdPYmplY3Rz
LT5hcHBlbmQobmV3T2JqKTsKKyAgICAKKyAgICByZXR1cm4gbmV3T2JqOwogfQogCiB2b2lkIFJl
bmRlckJsb2NrOjpyZW1vdmVGbG9hdGluZ09iamVjdChSZW5kZXJCb3gqIG8pCkBAIC0yODY3LDE2
ICsyOTczLDE1IEBAIGJvb2wgUmVuZGVyQmxvY2s6OnBvc2l0aW9uTmV3RmxvYXRzKCkKICAgICAg
ICAgfQogCiAgICAgICAgIFJlbmRlckJveCogbyA9IGYtPm1fcmVuZGVyZXI7Ci0gICAgICAgIGlu
dCBfaGVpZ2h0ID0gby0+aGVpZ2h0KCkgKyBvLT5tYXJnaW5Ub3AoKSArIG8tPm1hcmdpbkJvdHRv
bSgpOwogCiAgICAgICAgIGludCBybyA9IHJpZ2h0T2Zmc2V0KCk7IC8vIENvbnN0YW50IHBhcnQg
b2YgcmlnaHQgb2Zmc2V0LgotICAgICAgICBpbnQgbG8gPSBsZWZ0T2Zmc2V0KCk7IC8vIENvbnN0
YXQgcGFydCBvZiBsZWZ0IG9mZnNldC4KKyAgICAgICAgaW50IGxvID0gbGVmdE9mZnNldCgpOyAv
LyBDb25zdGFudCBwYXJ0IG9mIGxlZnQgb2Zmc2V0LgogICAgICAgICBpbnQgZndpZHRoID0gZi0+
bV93aWR0aDsgLy8gVGhlIHdpZHRoIHdlIGxvb2sgZm9yLgogICAgICAgICBpZiAocm8gLSBsbyA8
IGZ3aWR0aCkKICAgICAgICAgICAgIGZ3aWR0aCA9IHJvIC0gbG87IC8vIE5ldmVyIGxvb2sgZm9y
IG1vcmUgdGhhbiB3aGF0IHdpbGwgYmUgYXZhaWxhYmxlLgogICAgICAgICAKICAgICAgICAgSW50
UmVjdCBvbGRSZWN0KG8tPngoKSwgby0+eSgpICwgby0+d2lkdGgoKSwgby0+aGVpZ2h0KCkpOwot
ICAgICAgICAKKwogICAgICAgICBpZiAoby0+c3R5bGUoKS0+Y2xlYXIoKSAmIENMRUZUKQogICAg
ICAgICAgICAgeSA9IG1heChsZWZ0Qm90dG9tKCksIHkpOwogICAgICAgICBpZiAoby0+c3R5bGUo
KS0+Y2xlYXIoKSAmIENSSUdIVCkKQEAgLTI5MDUsOSArMzAxMCwzOCBAQCBib29sIFJlbmRlckJs
b2NrOjpwb3NpdGlvbk5ld0Zsb2F0cygpCiAgICAgICAgICAgICBvLT5zZXRMb2NhdGlvbihmeCAt
IG8tPm1hcmdpblJpZ2h0KCkgLSBvLT53aWR0aCgpLCB5ICsgby0+bWFyZ2luVG9wKCkpOwogICAg
ICAgICB9CiAKLSAgICAgICAgZi0+bV90b3AgPSB5OwotICAgICAgICBmLT5tX2JvdHRvbSA9IGYt
Pm1fdG9wICsgX2hlaWdodDsKKyAgICAgICAgaWYgKHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+cGFn
aW5hdGVkKCkpIHsKKyAgICAgICAgICAgIFJlbmRlckJsb2NrKiBjaGlsZEJsb2NrID0gby0+aXNS
ZW5kZXJCbG9jaygpID8gdG9SZW5kZXJCbG9jayhvKSA6IDA7CiAKKyAgICAgICAgICAgIGlmIChj
aGlsZEJsb2NrICYmIHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+bV9wYWdlSGVpZ2h0ICYmIHZpZXco
KS0+bGF5b3V0U3RhdGUoKS0+cGFnZVkoby0+eSgpKSAhPSBjaGlsZEJsb2NrLT5wYWdlWSgpKQor
ICAgICAgICAgICAgICAgIGNoaWxkQmxvY2stPnNldENoaWxkTmVlZHNMYXlvdXQodHJ1ZSwgZmFs
c2UpOworICAgICAgICAgICAgby0+bGF5b3V0SWZOZWVkZWQoKTsKKworICAgICAgICAgICAgLy8g
SWYgd2UgYXJlIHVuc3BsaXR0YWJsZSBhbmQgZG9uJ3QgZml0LCB0aGVuIHdlIG5lZWQgdG8gbW92
ZSBkb3duLgorICAgICAgICAgICAgLy8gV2UgaW5jbHVkZSBvdXIgbWFyZ2lucyBhcyBwYXJ0IG9m
IHRoZSB1bnNwbGl0dGFibGUgYXJlYS4KKyAgICAgICAgICAgIGludCBuZXdZID0gYWRqdXN0Rm9y
VW5zcGxpdHRhYmxlQ2hpbGQobywgeSwgdHJ1ZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IC8vIFNlZSBpZiB3ZSBoYXZlIGEgcGFnaW5hdGlvbiBzdHJ1dCB0aGF0IGlzIG1ha2luZyB1cyBt
b3ZlIGRvd24gZnVydGhlci4KKyAgICAgICAgICAgIC8vIE5vdGUgdGhhdCBhbiB1bnNwbGl0dGFi
bGUgY2hpbGQgY2FuJ3QgYWxzbyBoYXZlIGEgcGFnaW5hdGlvbiBzdHJ1dCwgc28gdGhpcyBpcwor
ICAgICAgICAgICAgLy8gZXhjbHVzaXZlIHdpdGggdGhlIGNhc2UgYWJvdmUuCisgICAgICAgICAg
ICBpZiAoY2hpbGRCbG9jayAmJiBjaGlsZEJsb2NrLT5wYWdpbmF0aW9uU3RydXQoKSkgeworICAg
ICAgICAgICAgICAgIG5ld1kgKz0gY2hpbGRCbG9jay0+cGFnaW5hdGlvblN0cnV0KCk7CisgICAg
ICAgICAgICAgICAgY2hpbGRCbG9jay0+c2V0UGFnaW5hdGlvblN0cnV0KDApOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobmV3WSAhPSB5KSB7CisgICAgICAg
ICAgICAgICAgZi0+bV9wYWdpbmF0aW9uU3RydXQgPSBuZXdZIC0geTsKKyAgICAgICAgICAgICAg
ICB5ID0gbmV3WTsKKyAgICAgICAgICAgICAgICBvLT5zZXRZKHkgKyBvLT5tYXJnaW5Ub3AoKSk7
CisgICAgICAgICAgICAgICAgaWYgKGNoaWxkQmxvY2spCisgICAgICAgICAgICAgICAgICAgIGNo
aWxkQmxvY2stPnNldENoaWxkTmVlZHNMYXlvdXQodHJ1ZSwgZmFsc2UpOworICAgICAgICAgICAg
ICAgIG8tPmxheW91dElmTmVlZGVkKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICBmLT5tX3RvcCA9IHk7CisgICAgICAgIGYtPm1fYm90dG9tID0gZi0+bV90b3AgKyBvLT5t
YXJnaW5Ub3AoKSArIG8tPmhlaWdodCgpICsgby0+bWFyZ2luQm90dG9tKCk7CisgICAgICAgIAog
ICAgICAgICAvLyBJZiB0aGUgY2hpbGQgbW92ZWQsIHdlIGhhdmUgdG8gcmVwYWludCBpdC4KICAg
ICAgICAgaWYgKG8tPmNoZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgpKQogICAgICAgICAgICAg
by0+cmVwYWludER1cmluZ0xheW91dElmTW92ZWQob2xkUmVjdCk7CkBAIC0yOTE3LDYgKzMwNTEs
NDAgQEAgYm9vbCBSZW5kZXJCbG9jazo6cG9zaXRpb25OZXdGbG9hdHMoKQogICAgIHJldHVybiB0
cnVlOwogfQogCitib29sIFJlbmRlckJsb2NrOjpwb3NpdGlvbk5ld0Zsb2F0T25MaW5lKEZsb2F0
aW5nT2JqZWN0KiBuZXdGbG9hdCwgRmxvYXRpbmdPYmplY3QqIGxhc3RGbG9hdEZyb21QcmV2aW91
c0xpbmUpCit7CisgICAgYm9vbCBkaWRQb3NpdGlvbiA9IHBvc2l0aW9uTmV3RmxvYXRzKCk7Cisg
ICAgaWYgKCFkaWRQb3NpdGlvbiB8fCAhbmV3RmxvYXQtPm1fcGFnaW5hdGlvblN0cnV0KQorICAg
ICAgICByZXR1cm4gZGlkUG9zaXRpb247CisgICAgCisgICAgaW50IGZsb2F0VG9wID0gbmV3Rmxv
YXQtPm1fdG9wOworICAgIGludCBwYWdpbmF0aW9uU3RydXQgPSBuZXdGbG9hdC0+bV9wYWdpbmF0
aW9uU3RydXQ7CisgICAgRmxvYXRpbmdPYmplY3QqIGYgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+bGFz
dCgpOworICAgIAorICAgIEFTU0VSVChmID09IG5ld0Zsb2F0KTsKKworICAgIGlmIChmbG9hdFRv
cCAtIHBhZ2luYXRpb25TdHJ1dCAhPSBoZWlnaHQoKSkKKyAgICAgICAgcmV0dXJuIGRpZFBvc2l0
aW9uOworCisgICAgZm9yIChmID0gbV9mbG9hdGluZ09iamVjdHMtPnByZXYoKTsgZiAmJiBmICE9
IGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmU7IGYgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+cHJldigp
KSB7CisgICAgICAgIGlmIChmLT5tX3RvcCA9PSBoZWlnaHQoKSkgeworICAgICAgICAgICAgQVNT
RVJUKCFmLT5tX3BhZ2luYXRpb25TdHJ1dCk7CisgICAgICAgICAgICBmLT5tX3BhZ2luYXRpb25T
dHJ1dCA9IHBhZ2luYXRpb25TdHJ1dDsKKyAgICAgICAgICAgIFJlbmRlckJveCogbyA9IGYtPm1f
cmVuZGVyZXI7CisgICAgICAgICAgICBvLT5zZXRZKG8tPnkoKSArIG8tPm1hcmdpblRvcCgpICsg
cGFnaW5hdGlvblN0cnV0KTsKKyAgICAgICAgICAgIGlmIChvLT5pc1JlbmRlckJsb2NrKCkpCisg
ICAgICAgICAgICAgICAgdG9SZW5kZXJCbG9jayhvKS0+c2V0Q2hpbGROZWVkc0xheW91dCh0cnVl
LCBmYWxzZSk7CisgICAgICAgICAgICBvLT5sYXlvdXRJZk5lZWRlZCgpOworICAgICAgICAgICAg
Zi0+bV90b3AgKz0gZi0+bV9wYWdpbmF0aW9uU3RydXQ7CisgICAgICAgICAgICBmLT5tX2JvdHRv
bSArPSBmLT5tX3BhZ2luYXRpb25TdHJ1dDsKKyAgICAgICAgfQorICAgIH0KKyAgICAgICAgCisg
ICAgc2V0SGVpZ2h0KGhlaWdodCgpICsgcGFnaW5hdGlvblN0cnV0KTsKKyAgICAKKyAgICByZXR1
cm4gZGlkUG9zaXRpb247Cit9CisKIHZvaWQgUmVuZGVyQmxvY2s6Om5ld0xpbmUoRUNsZWFyIGNs
ZWFyKQogewogICAgIHBvc2l0aW9uTmV3RmxvYXRzKCk7CkBAIC0zMTU4LDggKzMzMjYsOCBAQCBp
bnQgUmVuZGVyQmxvY2s6Omxvd2VzdFBvc2l0aW9uKGJvb2wgaW5jCiAKICAgICBpZiAoaGFzQ29s
dW1ucygpKSB7CiAgICAgICAgIENvbHVtbkluZm8qIGNvbEluZm8gPSBjb2x1bW5JbmZvKCk7Ci0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb2xJbmZvLT5jb2x1bW5Db3VudCgpOyBp
KyspCi0gICAgICAgICAgICBib3R0b20gPSBtYXgoYm90dG9tLCBjb2xJbmZvLT5jb2x1bW5SZWN0
QXQoaSkuYm90dG9tKCkgKyByZWxhdGl2ZU9mZnNldCk7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBjb2x1bW5Db3VudChjb2xJbmZvKTsgaSsrKQorICAgICAgICAgICAgYm90dG9t
ID0gbWF4KGJvdHRvbSwgY29sdW1uUmVjdEF0KGNvbEluZm8sIGkpLmJvdHRvbSgpICsgcmVsYXRp
dmVPZmZzZXQpOwogICAgICAgICByZXR1cm4gYm90dG9tOwogICAgIH0KIApAQCAtMzI1Myw4ICsz
NDIxLDkgQEAgaW50IFJlbmRlckJsb2NrOjpyaWdodG1vc3RQb3NpdGlvbihib29sIAogICAgICAg
ICAvLyBUaGlzIG9ubHkgbWF0dGVycyBmb3IgTFRSCiAgICAgICAgIGlmIChzdHlsZSgpLT5kaXJl
Y3Rpb24oKSA9PSBMVFIpIHsKICAgICAgICAgICAgIENvbHVtbkluZm8qIGNvbEluZm8gPSBjb2x1
bW5JbmZvKCk7Ci0gICAgICAgICAgICBpZiAoY29sSW5mby0+Y29sdW1uQ291bnQoKSkKLSAgICAg
ICAgICAgICAgICByaWdodCA9IG1heChjb2xJbmZvLT5jb2x1bW5SZWN0QXQoY29sSW5mby0+Y29s
dW1uQ291bnQoKSAtIDEpLnJpZ2h0KCkgKyByZWxhdGl2ZU9mZnNldCwgcmlnaHQpOworICAgICAg
ICAgICAgdW5zaWduZWQgY291bnQgPSBjb2x1bW5Db3VudChjb2xJbmZvKTsKKyAgICAgICAgICAg
IGlmIChjb3VudCkKKyAgICAgICAgICAgICAgICByaWdodCA9IG1heChjb2x1bW5SZWN0QXQoY29s
SW5mbywgY291bnQgLSAxKS5yaWdodCgpICsgcmVsYXRpdmVPZmZzZXQsIHJpZ2h0KTsKICAgICAg
ICAgfQogICAgICAgICByZXR1cm4gcmlnaHQ7CiAgICAgfQpAQCAtMzM1Myw4ICszNTIyLDkgQEAg
aW50IFJlbmRlckJsb2NrOjpsZWZ0bW9zdFBvc2l0aW9uKGJvb2wgaQogICAgICAgICAvLyBUaGlz
IG9ubHkgbWF0dGVycyBmb3IgUlRMCiAgICAgICAgIGlmIChzdHlsZSgpLT5kaXJlY3Rpb24oKSA9
PSBSVEwpIHsKICAgICAgICAgICAgIENvbHVtbkluZm8qIGNvbEluZm8gPSBjb2x1bW5JbmZvKCk7
Ci0gICAgICAgICAgICBpZiAoY29sSW5mby0+Y29sdW1uQ291bnQoKSkKLSAgICAgICAgICAgICAg
ICBsZWZ0ID0gbWluKGNvbEluZm8tPmNvbHVtblJlY3RBdChjb2xJbmZvLT5jb2x1bW5Db3VudCgp
IC0gMSkueCgpICsgcmVsYXRpdmVPZmZzZXQsIGxlZnQpOworICAgICAgICAgICAgdW5zaWduZWQg
Y291bnQgPSBjb2x1bW5Db3VudChjb2xJbmZvKTsKKyAgICAgICAgICAgIGlmIChjb3VudCkKKyAg
ICAgICAgICAgICAgICBsZWZ0ID0gbWluKGNvbHVtblJlY3RBdChjb2xJbmZvLCBjb3VudCAtIDEp
LngoKSArIHJlbGF0aXZlT2Zmc2V0LCBsZWZ0KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4g
bGVmdDsKICAgICB9CkBAIC0zNjQ3LDYgKzM4MTcsOSBAQCBib29sIFJlbmRlckJsb2NrOjpjb250
YWluc0Zsb2F0KFJlbmRlck9iCiAKIHZvaWQgUmVuZGVyQmxvY2s6Om1hcmtBbGxEZXNjZW5kYW50
c1dpdGhGbG9hdHNGb3JMYXlvdXQoUmVuZGVyQm94KiBmbG9hdFRvUmVtb3ZlLCBib29sIGluTGF5
b3V0KQogeworICAgIGlmICghbV9ldmVySGFkTGF5b3V0KQorICAgICAgICByZXR1cm47CisKICAg
ICBzZXRDaGlsZE5lZWRzTGF5b3V0KHRydWUsICFpbkxheW91dCk7CiAKICAgICBpZiAoZmxvYXRU
b1JlbW92ZSkKQEAgLTM2NjQsMzAgKzM4MzcsNDUgQEAgdm9pZCBSZW5kZXJCbG9jazo6bWFya0Fs
bERlc2NlbmRhbnRzV2l0aAogICAgIH0KIH0KIAotaW50IFJlbmRlckJsb2NrOjp2aXNpYmxlVG9w
T2ZIaWdoZXN0RmxvYXRFeHRlbmRpbmdCZWxvdyhpbnQgYm90dG9tLCBpbnQgbWF4SGVpZ2h0KSBj
b25zdAordm9pZCBSZW5kZXJCbG9jazo6bWFya0Rlc2NlbmRhbnRCbG9ja3NBbmRMaW5lc0Zvckxh
eW91dChib29sIGluTGF5b3V0KQogewotICAgIGludCB0b3AgPSBib3R0b207Ci0gICAgaWYgKG1f
ZmxvYXRpbmdPYmplY3RzKSB7Ci0gICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVj
dDsKLSAgICAgICAgZm9yIChEZXByZWNhdGVkUHRyTGlzdEl0ZXJhdG9yPEZsb2F0aW5nT2JqZWN0
PiBpdCgqbV9mbG9hdGluZ09iamVjdHMpOyAoZmxvYXRpbmdPYmplY3QgPSBpdC5jdXJyZW50KCkp
OyArK2l0KSB7Ci0gICAgICAgICAgICBSZW5kZXJCb3gqIGZsb2F0aW5nQm94ID0gZmxvYXRpbmdP
YmplY3QtPm1fcmVuZGVyZXI7Ci0gICAgICAgICAgICBJbnRSZWN0IHZpc2libGVPdmVyZmxvdyA9
IGZsb2F0aW5nQm94LT52aXNpYmxlT3ZlcmZsb3dSZWN0KCk7Ci0gICAgICAgICAgICB2aXNpYmxl
T3ZlcmZsb3cubW92ZShmbG9hdGluZ0JveC0+eCgpLCBmbG9hdGluZ0JveC0+eSgpKTsKLSAgICAg
ICAgICAgIGlmICh2aXNpYmxlT3ZlcmZsb3cueSgpIDwgdG9wICYmIHZpc2libGVPdmVyZmxvdy5i
b3R0b20oKSA+IGJvdHRvbSAmJiB2aXNpYmxlT3ZlcmZsb3cuaGVpZ2h0KCkgPD0gbWF4SGVpZ2h0
ICYmIGZsb2F0aW5nQm94LT5jb250YWluaW5nQmxvY2soKSA9PSB0aGlzKQotICAgICAgICAgICAg
ICAgIHRvcCA9IHZpc2libGVPdmVyZmxvdy55KCk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgaWYg
KCFtX2V2ZXJIYWRMYXlvdXQpCisgICAgICAgIHJldHVybjsKIAorICAgIHNldENoaWxkTmVlZHNM
YXlvdXQodHJ1ZSwgIWluTGF5b3V0KTsKKworICAgIC8vIEl0ZXJhdGUgb3ZlciBvdXIgY2hpbGRy
ZW4gYW5kIG1hcmsgdGhlbSBhcyBuZWVkZWQuCiAgICAgaWYgKCFjaGlsZHJlbklubGluZSgpKSB7
CiAgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7
IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgICAgIGlmIChjaGlsZC0+
aXNGbG9hdGluZ09yUG9zaXRpb25lZCgpIHx8ICFjaGlsZC0+aXNSZW5kZXJCbG9jaygpKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGNoaWxkQmxv
Y2sgPSB0b1JlbmRlckJsb2NrKGNoaWxkKTsKLSAgICAgICAgICAgIHRvcCA9IG1pbih0b3AsIGNo
aWxkQmxvY2stPnkoKSArIGNoaWxkQmxvY2stPnZpc2libGVUb3BPZkhpZ2hlc3RGbG9hdEV4dGVu
ZGluZ0JlbG93KGJvdHRvbSAtIGNoaWxkQmxvY2stPnkoKSwgbWF4SGVpZ2h0KSk7CisgICAgICAg
ICAgICB0b1JlbmRlckJsb2NrKGNoaWxkKS0+bWFya0Rlc2NlbmRhbnRCbG9ja3NBbmRMaW5lc0Zv
ckxheW91dChpbkxheW91dCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gV2FsayBv
dXIgZmxvYXRpbmcgb2JqZWN0cyBhbmQgbWFyayB0aGVtIHRvby4KKyAgICBpZiAobV9mbG9hdGlu
Z09iamVjdHMpIHsKKyAgICAgICAgRGVwcmVjYXRlZFB0ckxpc3RJdGVyYXRvcjxGbG9hdGluZ09i
amVjdD4gaXQoKm1fZmxvYXRpbmdPYmplY3RzKTsKKyAgICAgICAgd2hpbGUgKGl0LmN1cnJlbnQo
KSkgeworICAgICAgICAgICAgaWYgKGl0LmN1cnJlbnQoKS0+bV9yZW5kZXJlci0+aXNSZW5kZXJC
bG9jaygpKQorICAgICAgICAgICAgICAgIHRvUmVuZGVyQmxvY2soaXQuY3VycmVudCgpLT5tX3Jl
bmRlcmVyKS0+bWFya0Rlc2NlbmRhbnRCbG9ja3NBbmRMaW5lc0ZvckxheW91dChpbkxheW91dCk7
CisgICAgICAgICAgICArK2l0OwogICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIHRvcDsK
KyAgICBpZiAobV9wb3NpdGlvbmVkT2JqZWN0cykgeworICAgICAgICAvLyBGSVhNRTogVGVjaG5p
Y2FsbHkgd2UgZG9uJ3QgaGF2ZSB0byBtYXJrIHRoZSBwb3NpdGlvbmVkIG9iamVjdHMgaWYgd2Un
cmUgdGhlIGJsb2NrCisgICAgICAgIC8vIHRoYXQgZXN0YWJsaXNoZWQgdGhlIGNvbHVtbnMsIGJ1
dCB3ZSBkb24ndCByZWFsbHkgaGF2ZSB0aGF0IGluZm9ybWF0aW9uIGhlcmUuCisgICAgICAgIFJl
bmRlckJveCogcjsKKyAgICAgICAgSXRlcmF0b3IgZW5kID0gbV9wb3NpdGlvbmVkT2JqZWN0cy0+
ZW5kKCk7CisgICAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSBtX3Bvc2l0aW9uZWRPYmplY3RzLT5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIHIgPSAqaXQ7CisgICAgICAg
ICAgICBpZiAoci0+aXNSZW5kZXJCbG9jaygpKQorICAgICAgICAgICAgICAgIHRvUmVuZGVyQmxv
Y2sociktPm1hcmtEZXNjZW5kYW50QmxvY2tzQW5kTGluZXNGb3JMYXlvdXQoKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIC8vIEZJWE1FOiBJZiB3ZSdyZSBhIHRhYmxlLCB0aGVuIHdlIGhhdmUg
dG8gbWFyayBldmVyeSBzaW5nbGUgY2VsbC4KIH0KIAogaW50IFJlbmRlckJsb2NrOjpnZXRDbGVh
ckRlbHRhKFJlbmRlckJveCogY2hpbGQsIGludCB5UG9zKQpAQCAtMzg0NywxNiArNDAzNSwxNiBA
QCBib29sIFJlbmRlckJsb2NrOjpoaXRUZXN0Q29sdW1ucyhjb25zdCBICiB7CiAgICAgLy8gV2Ug
bmVlZCB0byBkbyBtdWx0aXBsZSBwYXNzZXMsIGJyZWFraW5nIHVwIG91ciBoaXQgdGVzdGluZyBp
bnRvIHN0cmlwcy4KICAgICBDb2x1bW5JbmZvKiBjb2xJbmZvID0gY29sdW1uSW5mbygpOwotICAg
IGludCBjb2xDb3VudCA9IGNvbEluZm8tPmNvbHVtbkNvdW50KCk7CisgICAgaW50IGNvbENvdW50
ID0gY29sdW1uQ291bnQoY29sSW5mbyk7CiAgICAgaWYgKCFjb2xDb3VudCkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIGludCBsZWZ0ID0gYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKTsK
ICAgICBpbnQgY3VycllPZmZzZXQgPSAwOwogICAgIGludCBpOwogICAgIGZvciAoaSA9IDA7IGkg
PCBjb2xDb3VudDsgaSsrKQotICAgICAgICBjdXJyWU9mZnNldCAtPSBjb2xJbmZvLT5jb2x1bW5S
ZWN0QXQoaSkuaGVpZ2h0KCk7CisgICAgICAgIGN1cnJZT2Zmc2V0IC09IGNvbHVtblJlY3RBdChj
b2xJbmZvLCBpKS5oZWlnaHQoKTsKICAgICBmb3IgKGkgPSBjb2xDb3VudCAtIDE7IGkgPj0gMDsg
aS0tKSB7Ci0gICAgICAgIEludFJlY3QgY29sUmVjdCA9IGNvbEluZm8tPmNvbHVtblJlY3RBdChp
KTsKKyAgICAgICAgSW50UmVjdCBjb2xSZWN0ID0gY29sdW1uUmVjdEF0KGNvbEluZm8sIGkpOwog
ICAgICAgICBpbnQgY3VyclhPZmZzZXQgPSBjb2xSZWN0LngoKSAtIGxlZnQ7CiAgICAgICAgIGN1
cnJZT2Zmc2V0ICs9IGNvbFJlY3QuaGVpZ2h0KCk7CiAgICAgICAgIGNvbFJlY3QubW92ZSh0eCwg
dHkpOwpAQCAtNDE1MCw4ICs0MzM4LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6c2V0RGVzaXJlZENv
bHVtbkNvdW50QQogICAgIGJvb2wgZGVzdHJveUNvbHVtbnMgPSAhZmlyc3RDaGlsZCgpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHx8IChjb3VudCA9PSAxICYmIHN0eWxlKCktPmhhc0F1dG9D
b2x1bW5XaWR0aCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBmaXJzdENoaWxkKCkt
PmlzQW5vbnltb3VzQ29sdW1uc0Jsb2NrKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgfHwg
Zmlyc3RDaGlsZCgpLT5pc0Fub255bW91c0NvbHVtblNwYW5CbG9jaygpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgIHx8IGRvY3VtZW50KCktPnNldHRpbmdzKCktPnBhZ2luYXRlRHVyaW5nTGF5
b3V0RW5hYmxlZCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBmaXJzdENoaWxkKCkt
PmlzQW5vbnltb3VzQ29sdW1uU3BhbkJsb2NrKCk7CiAgICAgaWYgKGRlc3Ryb3lDb2x1bW5zKSB7
CiAgICAgICAgIGlmIChoYXNDb2x1bW5zKCkpIHsKICAgICAgICAgICAgIGRlbGV0ZSBnQ29sdW1u
SW5mb01hcC0+dGFrZSh0aGlzKTsKQEAgLTQxOTQsMTMzICs0MzgxLDYwIEBAIENvbHVtbkluZm8q
IFJlbmRlckJsb2NrOjpjb2x1bW5JbmZvKCkgY28KICAgICByZXR1cm4gZ0NvbHVtbkluZm9NYXAt
PmdldCh0aGlzKTsgICAgCiB9CiAKLWludCBSZW5kZXJCbG9jazo6bGF5b3V0Q29sdW1ucyhpbnQg
ZW5kT2ZDb250ZW50LCBpbnQgcmVxdWVzdGVkQ29sdW1uSGVpZ2h0KQordW5zaWduZWQgUmVuZGVy
QmxvY2s6OmNvbHVtbkNvdW50KENvbHVtbkluZm8qIGNvbEluZm8pIGNvbnN0CiB7Ci0gICAgLy8g
RG9uJ3QgZG8gYW55dGhpbmcgaWYgd2UgaGF2ZSBubyBjb2x1bW5zCi0gICAgaWYgKCFoYXNDb2x1
bW5zKCkpCi0gICAgICAgIHJldHVybiAtMTsKKyAgICBBU1NFUlQoaGFzQ29sdW1ucygpICYmIGdD
b2x1bW5JbmZvTWFwLT5nZXQodGhpcykgPT0gY29sSW5mbyk7CisgICAgcmV0dXJuIGNvbEluZm8t
PmNvbHVtbkNvdW50KCk7Cit9CiAKLSAgICBDb2x1bW5JbmZvKiBpbmZvID0gZ0NvbHVtbkluZm9N
YXAtPmdldCh0aGlzKTsKLSAgICBpbnQgZGVzaXJlZENvbHVtbldpZHRoID0gaW5mby0+ZGVzaXJl
ZENvbHVtbldpZHRoKCk7Ci0gICAgaW50IGRlc2lyZWRDb2x1bW5Db3VudCA9IGluZm8tPmRlc2ly
ZWRDb2x1bW5Db3VudCgpOwotICAgIAotICAgIGJvb2wgY29tcHV0ZUludHJpbnNpY0hlaWdodCA9
IChlbmRPZkNvbnRlbnQgPT0gLTEpOwotCi0gICAgLy8gRmlsbCB0aGUgY29sdW1ucyBpbiB0byB0
aGUgYXZhaWxhYmxlIGhlaWdodC4gIEF0dGVtcHQgdG8gYmFsYW5jZSB0aGUgaGVpZ2h0IG9mIHRo
ZSBjb2x1bW5zLgotICAgIC8vIEFkZCBpbiBoYWxmIG91ciBsaW5lLWhlaWdodCB0byBoZWxwIHdp
dGggYmVzdC1ndWVzcyBpbml0aWFsIGJhbGFuY2luZy4KLSAgICBpbnQgY29sdW1uU2xvcCA9IGxp
bmVIZWlnaHQoZmFsc2UpIC8gMjsKLSAgICBpbnQgcmVtYWluaW5nU2xvcFNwYWNlID0gY29sdW1u
U2xvcCAqIGRlc2lyZWRDb2x1bW5Db3VudDsKLSAgICBpbnQgYXZhaWxhYmxlSGVpZ2h0ID0gY29u
dGVudEhlaWdodCgpOwotICAgIGludCBjb2xIZWlnaHQ7Ci0gICAgaWYgKGNvbXB1dGVJbnRyaW5z
aWNIZWlnaHQgJiYgcmVxdWVzdGVkQ29sdW1uSGVpZ2h0ID49IDApCi0gICAgICAgIGNvbEhlaWdo
dCA9IHJlcXVlc3RlZENvbHVtbkhlaWdodDsKLSAgICBlbHNlIGlmIChjb21wdXRlSW50cmluc2lj
SGVpZ2h0KQotICAgICAgICBjb2xIZWlnaHQgPSBtaW4oYXZhaWxhYmxlSGVpZ2h0LCBhdmFpbGFi
bGVIZWlnaHQgLyBkZXNpcmVkQ29sdW1uQ291bnQgKyBjb2x1bW5TbG9wKTsKLSAgICBlbHNlCi0g
ICAgICAgIGNvbEhlaWdodCA9IGF2YWlsYWJsZUhlaWdodDsKLSAgICBpbnQgb3JpZ2luYWxDb2xI
ZWlnaHQgPSBjb2xIZWlnaHQ7CitJbnRSZWN0IFJlbmRlckJsb2NrOjpjb2x1bW5SZWN0QXQoQ29s
dW1uSW5mbyogY29sSW5mbywgdW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7CisgICAgQVNTRVJUKGhh
c0NvbHVtbnMoKSAmJiBnQ29sdW1uSW5mb01hcC0+Z2V0KHRoaXMpID09IGNvbEluZm8pOwogCisg
ICAgLy8gQ29tcHV0ZSB0aGUgYXBwcm9wcmlhdGUgcmVjdCBiYXNlZCBvZmYgb3VyIGluZm9ybWF0
aW9uLgorICAgIGludCBjb2xXaWR0aCA9IGNvbEluZm8tPmRlc2lyZWRDb2x1bW5XaWR0aCgpOwor
ICAgIGludCBjb2xIZWlnaHQgPSBjb2xJbmZvLT5jb2x1bW5IZWlnaHQoKTsKKyAgICBpbnQgY29s
VG9wID0gYm9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCk7CiAgICAgaW50IGNvbEdhcCA9IGNvbHVt
bkdhcCgpOworICAgIGludCBjb2xMZWZ0ID0gc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8g
CisgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKSArIChp
bmRleCAqIChjb2xXaWR0aCArIGNvbEdhcCkpCisgICAgICAgICAgICAgICAgICAgICAgOiBib3Jk
ZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpICsgY29udGVudFdpZHRoKCkgLSBjb2xXaWR0aCAtIChp
bmRleCAqIChjb2xXaWR0aCArIGNvbEdhcCkpOworICAgIHJldHVybiBJbnRSZWN0KGNvbExlZnQs
IGNvbFRvcCwgY29sV2lkdGgsIGNvbEhlaWdodCk7Cit9CiAKLSAgICAvLyBDb21wdXRlIGEgY29s
bGVjdGlvbiBvZiBjb2x1bW4gcmVjdHMuCi0gICAgaW5mby0+Y2xlYXJDb2x1bW5zKCk7Ci0gICAg
Ci0gICAgLy8gVGhlbiB3ZSBkbyBhIHNpbXVsYXRlZCAicGFpbnQiIGludG8gdGhlIGNvbHVtbiBz
bGljZXMgYW5kIGFsbG93IHRoZSBjb250ZW50IHRvIHNsaWdodGx5IGFkanVzdCBvdXIgaW5kaXZp
ZHVhbCBjb2x1bW4gcmVjdHMuCi0gICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gdGFrZSBpbnRvIGFj
Y291bnQgbGF5ZXJzIHRoYXQgYXJlIGFmZmVjdGVkIGJ5IHRoZSBjb2x1bW5zIGFzIHdlbGwgaGVy
ZSBzbyB0aGF0IHRoZXkgY2FuIGhhdmUgYW4gb3Bwb3J0dW5pdHkKLSAgICAvLyB0byBhZGp1c3Qg
Y29sdW1uIHJlY3RzIGFsc28uCi0gICAgUmVuZGVyVmlldyogdiA9IHZpZXcoKTsKLSAgICBpbnQg
bGVmdCA9IGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCk7Ci0gICAgaW50IHRvcCA9IGJvcmRl
clRvcCgpICsgcGFkZGluZ1RvcCgpOwotICAgIGludCBjdXJyWCA9IHN0eWxlKCktPmRpcmVjdGlv
bigpID09IExUUiA/IGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCkgOiBib3JkZXJMZWZ0KCkg
KyBwYWRkaW5nTGVmdCgpICsgY29udGVudFdpZHRoKCkgLSBkZXNpcmVkQ29sdW1uV2lkdGg7Ci0g
ICAgaW50IGN1cnJZID0gdG9wOwotICAgIHVuc2lnbmVkIGNvbENvdW50ID0gZGVzaXJlZENvbHVt
bkNvdW50OwotICAgIGludCBtYXhDb2xCb3R0b20gPSBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3Ao
KTsKLSAgICBpbnQgY29udGVudEJvdHRvbSA9IHRvcCArIGF2YWlsYWJsZUhlaWdodDsKLSAgICBp
bnQgbWluaW11bUNvbHVtbkhlaWdodCA9IC0xOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBjb2xDb3VudDsgaSsrKSB7Ci0gICAgICAgIC8vIElmIHdlIGFyZW4ndCBjb25zdHJhaW5lZCwg
dGhlbiB0aGUgbGFzdCBjb2x1bW4gY2FuIGp1c3QgZ2V0IGFsbCB0aGUgcmVtYWluaW5nIHNwYWNl
LgotICAgICAgICBpZiAoY29tcHV0ZUludHJpbnNpY0hlaWdodCAmJiBpID09IGNvbENvdW50IC0g
MSkKLSAgICAgICAgICAgIGNvbEhlaWdodCA9IGF2YWlsYWJsZUhlaWdodDsKLQotICAgICAgICAv
LyBUaGlzIHJlcHJlc2VudHMgdGhlIHJlYWwgY29sdW1uIHBvc2l0aW9uLgotICAgICAgICBJbnRS
ZWN0IGNvbFJlY3QoY3VyclgsIHRvcCwgZGVzaXJlZENvbHVtbldpZHRoLCBjb2xIZWlnaHQpOwot
Ci0gICAgICAgIGludCB0cnVuY2F0aW9uUG9pbnQgPSB2aXNpYmxlVG9wT2ZIaWdoZXN0RmxvYXRF
eHRlbmRpbmdCZWxvdyhjdXJyWSArIGNvbEhlaWdodCwgY29sSGVpZ2h0KTsKLQotICAgICAgICAv
LyBGb3IgdGhlIHNpbXVsYXRlZCBwYWludCwgd2UgcHJldGVuZCBsaWtlIGV2ZXJ5dGhpbmcgaXMg
aW4gb25lIGxvbmcgc3RyaXAuCi0gICAgICAgIEludFJlY3QgcGFnZVJlY3QobGVmdCwgY3Vyclks
IGNvbnRlbnRXaWR0aCgpLCB0cnVuY2F0aW9uUG9pbnQgLSBjdXJyWSk7Ci0gICAgICAgIHYtPnNl
dFByaW50UmVjdChwYWdlUmVjdCk7Ci0gICAgICAgIHYtPnNldFRydW5jYXRlZEF0KHRydW5jYXRp
b25Qb2ludCk7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KChQbGF0Zm9ybUdyYXBo
aWNzQ29udGV4dCopMCk7Ci0gICAgICAgIFBhaW50SW5mbyBwYWludEluZm8oJmNvbnRleHQsIHBh
Z2VSZWN0LCBQYWludFBoYXNlRm9yZWdyb3VuZCwgZmFsc2UsIDAsIDApOwotICAgICAgICAKLSAg
ICAgICAgc2V0SGFzQ29sdW1ucyhmYWxzZSk7Ci0gICAgICAgIHBhaW50T2JqZWN0KHBhaW50SW5m
bywgMCwgMCk7Ci0gICAgICAgIHNldEhhc0NvbHVtbnModHJ1ZSk7Ci0KLSAgICAgICAgaWYgKGNv
bXB1dGVJbnRyaW5zaWNIZWlnaHQgJiYgdi0+bWluaW11bUNvbHVtbkhlaWdodCgpID4gb3JpZ2lu
YWxDb2xIZWlnaHQpIHsKLSAgICAgICAgICAgIC8vIFRoZSBpbml0aWFsIGNvbHVtbiBoZWlnaHQg
d2FzIHRvbyBzbWFsbCB0byBjb250YWluIG9uZSBsaW5lIG9mIHRleHQuCi0gICAgICAgICAgICBt
aW5pbXVtQ29sdW1uSGVpZ2h0ID0gbWF4KG1pbmltdW1Db2x1bW5IZWlnaHQsIHYtPm1pbmltdW1D
b2x1bW5IZWlnaHQoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpbnQgYWRqdXN0ZWRCb3R0b20g
PSB2LT5iZXN0VHJ1bmNhdGVkQXQoKTsKLSAgICAgICAgaWYgKGFkanVzdGVkQm90dG9tIDw9IGN1
cnJZKQotICAgICAgICAgICAgYWRqdXN0ZWRCb3R0b20gPSB0cnVuY2F0aW9uUG9pbnQ7Ci0gICAg
ICAgIAotICAgICAgICBjb2xSZWN0LnNldEhlaWdodChhZGp1c3RlZEJvdHRvbSAtIGN1cnJZKTsK
LSAgICAgICAgCi0gICAgICAgIC8vIEFkZCBpbiB0aGUgbG9zdCBzcGFjZSB0byB0aGUgc3Vic2Vx
dWVudCBjb2x1bW5zLgotICAgICAgICAvLyBGSVhNRTogVGhpcyB3aWxsIGNyZWF0ZSBhICJzdGFp
cmNhc2UiIGVmZmVjdCBpZiB0aGVyZSBhcmUgZW5vdWdoIGNvbHVtbnMsIGJ1dCB0aGUgZWZmZWN0
IHNob3VsZCBiZSBwcmV0dHkgc3VidGxlLgotICAgICAgICBpZiAoY29tcHV0ZUludHJpbnNpY0hl
aWdodCkgewotICAgICAgICAgICAgaW50IGxvc3RTcGFjZSA9IGNvbEhlaWdodCAtIGNvbFJlY3Qu
aGVpZ2h0KCk7Ci0gICAgICAgICAgICBpZiAobG9zdFNwYWNlID4gcmVtYWluaW5nU2xvcFNwYWNl
KSB7Ci0gICAgICAgICAgICAgICAgLy8gUmVkZXN0cmlidXRlIHRoZSBzcGFjZSBhbW9uZyB0aGUg
cmVtYWluaW5nIGNvbHVtbnMuCi0gICAgICAgICAgICAgICAgaW50IHNwYWNlVG9SZWRpc3RyaWJ1
dGUgPSBsb3N0U3BhY2UgLSByZW1haW5pbmdTbG9wU3BhY2U7Ci0gICAgICAgICAgICAgICAgaW50
IHJlbWFpbmluZ0NvbHVtbnMgPSBjb2xDb3VudCAtIGkgKyAxOwotICAgICAgICAgICAgICAgIGNv
bEhlaWdodCArPSBzcGFjZVRvUmVkaXN0cmlidXRlIC8gcmVtYWluaW5nQ29sdW1uczsKLSAgICAg
ICAgICAgIH0gCi0gICAgICAgICAgICByZW1haW5pbmdTbG9wU3BhY2UgPSBtYXgoMCwgcmVtYWlu
aW5nU2xvcFNwYWNlIC0gbG9zdFNwYWNlKTsKLSAgICAgICAgfQorYm9vbCBSZW5kZXJCbG9jazo6
bGF5b3V0Q29sdW1ucyhib29sIGhhc1NwZWNpZmllZFBhZ2VIZWlnaHQsIGludCBwYWdlSGVpZ2h0
LCBMYXlvdXRTdGF0ZU1haW50YWluZXImIHN0YXRlUHVzaGVyKQoreworICAgIGlmIChoYXNDb2x1
bW5zKCkpIHsKKyAgICAgICAgQ29sdW1uSW5mbyogY29sSW5mbyA9IGNvbHVtbkluZm8oKTsKKyAg
ICAgICAgaW50IGRlc2lyZWRDb2x1bW5Db3VudCA9IGNvbEluZm8tPmRlc2lyZWRDb2x1bW5Db3Vu
dCgpOworICAgICAgICBpZiAoIWhhc1NwZWNpZmllZFBhZ2VIZWlnaHQgJiYgY29udGVudEhlaWdo
dCgpID4gcGFnZUhlaWdodCAqIGRlc2lyZWRDb2x1bW5Db3VudCkgeworICAgICAgICAgICAgLy8g
Tm93IHRoYXQgd2Uga25vdyB0aGUgaW50cmluc2ljIGhlaWdodCBvZiB0aGUgY29sdW1ucywgd2Ug
aGF2ZSB0byByZWJhbGFuY2UgdGhlbS4KKyAgICAgICAgICAgIGludCBjb2x1bW5IZWlnaHQgPSBt
YXgoY29sSW5mby0+bWluaW11bUNvbHVtbkhlaWdodCgpLCAoaW50KWNlaWxmKChmbG9hdCljb250
ZW50SGVpZ2h0KCkgLyBkZXNpcmVkQ29sdW1uQ291bnQpKTsKKyAgICAgICAgICAgIGlmIChjb2x1
bW5IZWlnaHQgPiAwKSB7CisgICAgICAgICAgICAgICAgc3RhdGVQdXNoZXIucG9wKCk7CisgICAg
ICAgICAgICAgICAgbV9ldmVySGFkTGF5b3V0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBsYXlv
dXRCbG9jayhmYWxzZSwgY29sdW1uSGVpZ2h0KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSAKICAgICAgICAgCi0gICAgICAgIGlmIChzdHls
ZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIpCi0gICAgICAgICAgICBjdXJyWCArPSBkZXNpcmVkQ29s
dW1uV2lkdGggKyBjb2xHYXA7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGN1cnJYIC09IChk
ZXNpcmVkQ29sdW1uV2lkdGggKyBjb2xHYXApOwotCi0gICAgICAgIGN1cnJZICs9IGNvbFJlY3Qu
aGVpZ2h0KCk7Ci0gICAgICAgIGF2YWlsYWJsZUhlaWdodCAtPSBjb2xSZWN0LmhlaWdodCgpOwor
ICAgICAgICBpZiAocGFnZUhlaWdodCkgLy8gRklYTUU6IFNob3VsZCB3ZSB1c2UgbG93ZXN0UG9z
aXRpb24gKGV4Y2x1ZGluZyBvdXIgcG9zaXRpb25lZCBvYmplY3RzKSBpbnN0ZWFkIG9mIGNvbnRl
bnRIZWlnaHQoKT8KKyAgICAgICAgICAgIGNvbEluZm8tPnNldENvbHVtbkNvdW50QW5kSGVpZ2h0
KGNlaWxmKChmbG9hdCljb250ZW50SGVpZ2h0KCkgLyBwYWdlSGVpZ2h0KSwgcGFnZUhlaWdodCk7
CiAKLSAgICAgICAgbWF4Q29sQm90dG9tID0gbWF4KGNvbFJlY3QuYm90dG9tKCksIG1heENvbEJv
dHRvbSk7Ci0KLSAgICAgICAgaW5mby0+YWRkQ29sdW1uUmVjdChjb2xSZWN0KTsKLSAgICAgICAg
Ci0gICAgICAgIC8vIFN0YXJ0IGFkZGluZyBpbiBtb3JlIGNvbHVtbnMgYXMgbG9uZyBhcyB0aGVy
ZSdzIHN0aWxsIGNvbnRlbnQgbGVmdC4KLSAgICAgICAgaWYgKGN1cnJZIDwgZW5kT2ZDb250ZW50
ICYmIGkgPT0gY29sQ291bnQgLSAxICYmIChjb21wdXRlSW50cmluc2ljSGVpZ2h0IHx8IGNvbnRl
bnRIZWlnaHQoKSkpCi0gICAgICAgICAgICBjb2xDb3VudCsrOwotICAgIH0KKyAgICAgICAgaWYg
KGNvbHVtbkNvdW50KGNvbEluZm8pKSB7CisgICAgICAgICAgICBJbnRSZWN0IGxhc3RSZWN0ID0g
Y29sdW1uUmVjdEF0KGNvbEluZm8sIGNvbHVtbkNvdW50KGNvbEluZm8pIC0gMSk7CisgICAgICAg
ICAgICBpbnQgb3ZlcmZsb3dMZWZ0ID0gc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gUlRMID8gbWlu
KDAsIGxhc3RSZWN0LngoKSkgOiAwOworICAgICAgICAgICAgaW50IG92ZXJmbG93UmlnaHQgPSBz
dHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIgPyBtYXgod2lkdGgoKSwgbGFzdFJlY3QueCgpICsg
bGFzdFJlY3Qud2lkdGgoKSkgOiAwOworICAgICAgICAgICAgaW50IG92ZXJmbG93SGVpZ2h0ID0g
Ym9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCkgKyBjb2xJbmZvLT5jb2x1bW5IZWlnaHQoKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgc2V0SGVpZ2h0KG92ZXJmbG93SGVpZ2h0ICsgYm9yZGVy
Qm90dG9tKCkgKyBwYWRkaW5nQm90dG9tKCkgKyBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCkp
OwogCi0gICAgaWYgKG1pbmltdW1Db2x1bW5IZWlnaHQgPj0gMCkgewotICAgICAgICAvLyBJZiBv
cmlnaW5hbENvbEhlaWdodCB3YXMgdG9vIHNtYWxsLCB3ZSBuZWVkIHRvIHRyeSB0byBsYXlvdXQg
YWdhaW4uCi0gICAgICAgIHJldHVybiBsYXlvdXRDb2x1bW5zKGVuZE9mQ29udGVudCwgbWluaW11
bUNvbHVtbkhlaWdodCk7CisgICAgICAgICAgICBtX292ZXJmbG93LmNsZWFyKCk7CisgICAgICAg
ICAgICBhZGRMYXlvdXRPdmVyZmxvdyhJbnRSZWN0KG92ZXJmbG93TGVmdCwgMCwgb3ZlcmZsb3dS
aWdodCAtIG92ZXJmbG93TGVmdCwgb3ZlcmZsb3dIZWlnaHQpKTsKKyAgICAgICAgfQogICAgIH0K
LQotICAgIGludCBvdmVyZmxvd1JpZ2h0ID0gbWF4KHdpZHRoKCksIGN1cnJYIC0gY29sR2FwKTsK
LSAgICBpbnQgb3ZlcmZsb3dMZWZ0ID0gbWluKDAsIGN1cnJYICsgZGVzaXJlZENvbHVtbldpZHRo
ICsgY29sR2FwKTsKLSAgICBpbnQgb3ZlcmZsb3dIZWlnaHQgPSBtYXhDb2xCb3R0b207Ci0gICAg
aW50IHRvQWRkID0gYm9yZGVyQm90dG9tKCkgKyBwYWRkaW5nQm90dG9tKCkgKyBob3Jpem9udGFs
U2Nyb2xsYmFySGVpZ2h0KCk7Ci0gICAgICAgIAotICAgIGlmIChjb21wdXRlSW50cmluc2ljSGVp
Z2h0KQotICAgICAgICBzZXRIZWlnaHQobWF4Q29sQm90dG9tICsgdG9BZGQpOwotCi0gICAgbV9v
dmVyZmxvdy5jbGVhcigpOwotICAgIGFkZExheW91dE92ZXJmbG93KEludFJlY3Qob3ZlcmZsb3dM
ZWZ0LCAwLCBvdmVyZmxvd1JpZ2h0IC0gb3ZlcmZsb3dMZWZ0LCBvdmVyZmxvd0hlaWdodCkpOwot
Ci0gICAgdi0+c2V0UHJpbnRSZWN0KEludFJlY3QoKSk7Ci0gICAgdi0+c2V0VHJ1bmNhdGVkQXQo
MCk7Ci0gICAgCi0gICAgQVNTRVJUKGNvbENvdW50ID09IGluZm8tPmNvbHVtbkNvdW50KCkpOwog
ICAgIAotICAgIHJldHVybiBjb250ZW50Qm90dG9tOworICAgIHJldHVybiBmYWxzZTsKIH0KIAog
dm9pZCBSZW5kZXJCbG9jazo6YWRqdXN0UG9pbnRUb0NvbHVtbkNvbnRlbnRzKEludFBvaW50JiBw
b2ludCkgY29uc3QKQEAgLTQzMzAsMTcgKzQ0NDQsMTcgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRq
dXN0UG9pbnRUb0NvbHVtbkNvbgogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgQ29sdW1uSW5m
byogY29sSW5mbyA9IGNvbHVtbkluZm8oKTsKLSAgICBpZiAoIWNvbEluZm8tPmNvbHVtbkNvdW50
KCkpCisgICAgaWYgKCFjb2x1bW5Db3VudChjb2xJbmZvKSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgLy8gRGV0ZXJtaW5lIHdoaWNoIGNvbHVtbnMgd2UgaW50ZXJzZWN0LgogICAgIGludCBjb2xH
YXAgPSBjb2x1bW5HYXAoKTsKICAgICBpbnQgbGVmdEdhcCA9IGNvbEdhcCAvIDI7Ci0gICAgSW50
UG9pbnQgY29sdW1uUG9pbnQoY29sSW5mby0+Y29sdW1uUmVjdEF0KDApLmxvY2F0aW9uKCkpOwor
ICAgIEludFBvaW50IGNvbHVtblBvaW50KGNvbHVtblJlY3RBdChjb2xJbmZvLCAwKS5sb2NhdGlv
bigpKTsKICAgICBpbnQgeU9mZnNldCA9IDA7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGNvbEluZm8tPmNvbHVtbkNvdW50KCk7IGkrKykgewogICAgICAgICAvLyBBZGQgaW4gaGFsZiB0
aGUgY29sdW1uIGdhcCB0byB0aGUgbGVmdCBhbmQgcmlnaHQgb2YgdGhlIHJlY3QuCi0gICAgICAg
IEludFJlY3QgY29sUmVjdCA9IGNvbEluZm8tPmNvbHVtblJlY3RBdChpKTsKKyAgICAgICAgSW50
UmVjdCBjb2xSZWN0ID0gY29sdW1uUmVjdEF0KGNvbEluZm8sIGkpOwogICAgICAgICBJbnRSZWN0
IGdhcEFuZENvbHVtblJlY3QoY29sUmVjdC54KCkgLSBsZWZ0R2FwLCBjb2xSZWN0LnkoKSwgY29s
UmVjdC53aWR0aCgpICsgY29sR2FwLCBjb2xSZWN0LmhlaWdodCgpKTsKIAogICAgICAgICBpZiAo
cG9pbnQueCgpID49IGdhcEFuZENvbHVtblJlY3QueCgpICYmIHBvaW50LngoKSA8IGdhcEFuZENv
bHVtblJlY3QucmlnaHQoKSkgewpAQCAtNDM3OCw3ICs0NDkyLDcgQEAgdm9pZCBSZW5kZXJCbG9j
azo6YWRqdXN0UmVjdEZvckNvbHVtbnMoSQogICAgIEludFJlY3QgcmVzdWx0OwogICAgIAogICAg
IC8vIERldGVybWluZSB3aGljaCBjb2x1bW5zIHdlIGludGVyc2VjdC4KLSAgICB1bnNpZ25lZCBj
b2xDb3VudCA9IGNvbEluZm8tPmNvbHVtbkNvdW50KCk7CisgICAgdW5zaWduZWQgY29sQ291bnQg
PSBjb2x1bW5Db3VudChjb2xJbmZvKTsKICAgICBpZiAoIWNvbENvdW50KQogICAgICAgICByZXR1
cm47CiAgICAgCkBAIC00Mzg2LDcgKzQ1MDAsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGp1c3RS
ZWN0Rm9yQ29sdW1ucyhJCiAgICAgCiAgICAgaW50IGN1cnJZT2Zmc2V0ID0gMDsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgY29sQ291bnQ7IGkrKykgewotICAgICAgICBJbnRSZWN0IGNv
bFJlY3QgPSBjb2xJbmZvLT5jb2x1bW5SZWN0QXQoaSk7CisgICAgICAgIEludFJlY3QgY29sUmVj
dCA9IGNvbHVtblJlY3RBdChjb2xJbmZvLCBpKTsKICAgICAgICAgaW50IGN1cnJYT2Zmc2V0ID0g
Y29sUmVjdC54KCkgLSBsZWZ0OwogICAgICAgICAKICAgICAgICAgSW50UmVjdCByZXBhaW50UmVj
dCA9IHI7CkBAIC00NDEyLDkgKzQ1MjYsOSBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGp1c3RGb3JD
b2x1bW5zKEludFNpCiAKICAgICBpbnQgbGVmdCA9IGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0
KCk7CiAgICAgaW50IHlPZmZzZXQgPSAwOwotICAgIHNpemVfdCBjb2x1bW5Db3VudCA9IGNvbElu
Zm8tPmNvbHVtbkNvdW50KCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb2x1bW5Db3Vu
dDsgKytpKSB7Ci0gICAgICAgIEludFJlY3QgY29sdW1uUmVjdCA9IGNvbEluZm8tPmNvbHVtblJl
Y3RBdChpKTsKKyAgICBzaXplX3QgY29sQ291bnQgPSBjb2x1bW5Db3VudChjb2xJbmZvKTsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvbENvdW50OyArK2kpIHsKKyAgICAgICAgSW50UmVj
dCBjb2x1bW5SZWN0ID0gY29sdW1uUmVjdEF0KGNvbEluZm8sIGkpOwogICAgICAgICBpbnQgeE9m
ZnNldCA9IGNvbHVtblJlY3QueCgpIC0gbGVmdDsKICAgICAgICAgaWYgKHBvaW50LnkoKSA8IGNv
bHVtblJlY3QuYm90dG9tKCkgKyB5T2Zmc2V0KSB7CiAgICAgICAgICAgICBvZmZzZXQuZXhwYW5k
KHhPZmZzZXQsIC15T2Zmc2V0KTsKQEAgLTUzOTIsMjQgKzU1MDYsNDQgQEAgdm9pZCBSZW5kZXJC
bG9jazo6Y2xlYXJUcnVuY2F0aW9uKCkKIAogdm9pZCBSZW5kZXJCbG9jazo6c2V0TWF4VG9wTWFy
Z2lucyhpbnQgcG9zLCBpbnQgbmVnKQogewotICAgIGlmICghbV9tYXhNYXJnaW4pIHsKLSAgICAg
ICAgaWYgKHBvcyA9PSBNYXhNYXJnaW46OnRvcFBvc0RlZmF1bHQodGhpcykgJiYgbmVnID09IE1h
eE1hcmdpbjo6dG9wTmVnRGVmYXVsdCh0aGlzKSkKKyAgICBpZiAoIW1fcmFyZURhdGEpIHsKKyAg
ICAgICAgaWYgKHBvcyA9PSBSZW5kZXJCbG9ja1JhcmVEYXRhOjp0b3BQb3NEZWZhdWx0KHRoaXMp
ICYmIG5lZyA9PSBSZW5kZXJCbG9ja1JhcmVEYXRhOjp0b3BOZWdEZWZhdWx0KHRoaXMpKQogICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX21heE1hcmdpbiA9IG5ldyBNYXhNYXJnaW4odGhp
cyk7CisgICAgICAgIG1fcmFyZURhdGEgPSBuZXcgUmVuZGVyQmxvY2tSYXJlRGF0YSh0aGlzKTsK
ICAgICB9Ci0gICAgbV9tYXhNYXJnaW4tPm1fdG9wUG9zID0gcG9zOwotICAgIG1fbWF4TWFyZ2lu
LT5tX3RvcE5lZyA9IG5lZzsKKyAgICBtX3JhcmVEYXRhLT5tX3RvcFBvcyA9IHBvczsKKyAgICBt
X3JhcmVEYXRhLT5tX3RvcE5lZyA9IG5lZzsKIH0KIAogdm9pZCBSZW5kZXJCbG9jazo6c2V0TWF4
Qm90dG9tTWFyZ2lucyhpbnQgcG9zLCBpbnQgbmVnKQogewotICAgIGlmICghbV9tYXhNYXJnaW4p
IHsKLSAgICAgICAgaWYgKHBvcyA9PSBNYXhNYXJnaW46OmJvdHRvbVBvc0RlZmF1bHQodGhpcykg
JiYgbmVnID09IE1heE1hcmdpbjo6Ym90dG9tTmVnRGVmYXVsdCh0aGlzKSkKKyAgICBpZiAoIW1f
cmFyZURhdGEpIHsKKyAgICAgICAgaWYgKHBvcyA9PSBSZW5kZXJCbG9ja1JhcmVEYXRhOjpib3R0
b21Qb3NEZWZhdWx0KHRoaXMpICYmIG5lZyA9PSBSZW5kZXJCbG9ja1JhcmVEYXRhOjpib3R0b21O
ZWdEZWZhdWx0KHRoaXMpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtX3JhcmVEYXRh
ID0gbmV3IFJlbmRlckJsb2NrUmFyZURhdGEodGhpcyk7CisgICAgfQorICAgIG1fcmFyZURhdGEt
Pm1fYm90dG9tUG9zID0gcG9zOworICAgIG1fcmFyZURhdGEtPm1fYm90dG9tTmVnID0gbmVnOwor
fQorCit2b2lkIFJlbmRlckJsb2NrOjpzZXRQYWdpbmF0aW9uU3RydXQoaW50IHN0cnV0KQorewor
ICAgIGlmICghbV9yYXJlRGF0YSkgeworICAgICAgICBpZiAoc3RydXQgPT0gMCkKICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgbV9tYXhNYXJnaW4gPSBuZXcgTWF4TWFyZ2luKHRoaXMpOwor
ICAgICAgICBtX3JhcmVEYXRhID0gbmV3IFJlbmRlckJsb2NrUmFyZURhdGEodGhpcyk7CiAgICAg
fQotICAgIG1fbWF4TWFyZ2luLT5tX2JvdHRvbVBvcyA9IHBvczsKLSAgICBtX21heE1hcmdpbi0+
bV9ib3R0b21OZWcgPSBuZWc7CisgICAgbV9yYXJlRGF0YS0+bV9wYWdpbmF0aW9uU3RydXQgPSBz
dHJ1dDsKK30KKwordm9pZCBSZW5kZXJCbG9jazo6c2V0UGFnZVkoaW50IHkpCit7CisgICAgaWYg
KCFtX3JhcmVEYXRhKSB7CisgICAgICAgIGlmICh5ID09IDApCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIG1fcmFyZURhdGEgPSBuZXcgUmVuZGVyQmxvY2tSYXJlRGF0YSh0aGlzKTsKKyAg
ICB9CisgICAgbV9yYXJlRGF0YS0+bV9wYWdlWSA9IHk7CiB9CiAKIHZvaWQgUmVuZGVyQmxvY2s6
OmFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgaW50IHR4LCBpbnQgdHkpCkBA
IC01NjcwLDYgKzU4MDQsOTcgQEAgUmVuZGVyQmxvY2sqIFJlbmRlckJsb2NrOjpjcmVhdGVBbm9u
eW1vdQogICAgIHJldHVybiBuZXdCb3g7CiB9CiAKK2ludCBSZW5kZXJCbG9jazo6bmV4dFBhZ2VU
b3AoaW50IHlQb3MpIGNvbnN0Cit7CisgICAgTGF5b3V0U3RhdGUqIGxheW91dFN0YXRlID0gdmll
dygpLT5sYXlvdXRTdGF0ZSgpOworICAgIGlmICghbGF5b3V0U3RhdGUtPm1fcGFnZUhlaWdodCkK
KyAgICAgICAgcmV0dXJuIHlQb3M7CisgICAgCisgICAgLy8gVGhlIHlQb3MgaXMgaW4gb3VyIGNv
b3JkaW5hdGUgc3BhY2UuICBXZSBjYW4gYWRkIGluIG91ciBwdXNoZWQgb2Zmc2V0LgorICAgIGlu
dCBwYWdlSGVpZ2h0ID0gbGF5b3V0U3RhdGUtPm1fcGFnZUhlaWdodDsKKyAgICBpbnQgcmVtYWlu
aW5nSGVpZ2h0ID0gcGFnZUhlaWdodCAtICgobGF5b3V0U3RhdGUtPm1fbGF5b3V0T2Zmc2V0IC0g
bGF5b3V0U3RhdGUtPm1fcGFnZU9mZnNldCkuaGVpZ2h0KCkgKyB5UG9zKSAlIHBhZ2VIZWlnaHQ7
CisgICAgcmV0dXJuIHlQb3MgKyByZW1haW5pbmdIZWlnaHQ7Cit9CisKK2ludCBSZW5kZXJCbG9j
azo6YXBwbHlCZWZvcmVCcmVhayhSZW5kZXJCb3gqIGNoaWxkLCBpbnQgeVBvcykKK3sKKyAgICBi
b29sIGNoZWNrUGFnZUJyZWFrcyA9IGRvY3VtZW50KCktPnBhZ2luYXRlZCgpICYmIGRvY3VtZW50
KCktPnNldHRpbmdzKCktPnBhZ2luYXRlRHVyaW5nTGF5b3V0RW5hYmxlZCgpOworICAgIGJvb2wg
Y2hlY2tDb2x1bW5CcmVha3MgPSB2aWV3KCktPmxheW91dFN0YXRlKCktPnBhZ2luYXRpbmdDb2x1
bW5zKCk7CisgICAgYm9vbCBjaGVja0JlZm9yZUFsd2F5cyA9IChjaGVja1BhZ2VCcmVha3MgJiYg
Y2hpbGQtPnN0eWxlKCktPnBhZ2VCcmVha0JlZm9yZSgpID09IFBCQUxXQVlTKSB8fCAoY2hlY2tD
b2x1bW5CcmVha3MgJiYgY2hpbGQtPnN0eWxlKCktPmNvbHVtbkJyZWFrQmVmb3JlKCkgPT0gUEJB
TFdBWVMpOworICAgIGlmIChjaGVja0JlZm9yZUFsd2F5cykKKyAgICAgICAgcmV0dXJuIG5leHRQ
YWdlVG9wKHlQb3MpOworICAgIHJldHVybiB5UG9zOworfQorCitpbnQgUmVuZGVyQmxvY2s6OmFw
cGx5QWZ0ZXJCcmVhayhSZW5kZXJCb3gqIGNoaWxkLCBpbnQgeVBvcywgTWFyZ2luSW5mbyYgbWFy
Z2luSW5mbykKK3sKKyAgICBib29sIGNoZWNrUGFnZUJyZWFrcyA9IGRvY3VtZW50KCktPnBhZ2lu
YXRlZCgpICYmIGRvY3VtZW50KCktPnNldHRpbmdzKCktPnBhZ2luYXRlRHVyaW5nTGF5b3V0RW5h
YmxlZCgpOworICAgIGJvb2wgY2hlY2tDb2x1bW5CcmVha3MgPSB2aWV3KCktPmxheW91dFN0YXRl
KCktPnBhZ2luYXRpbmdDb2x1bW5zKCk7CisgICAgYm9vbCBjaGVja0FmdGVyQWx3YXlzID0gKGNo
ZWNrUGFnZUJyZWFrcyAmJiBjaGlsZC0+c3R5bGUoKS0+cGFnZUJyZWFrQWZ0ZXIoKSA9PSBQQkFM
V0FZUykgfHwgKGNoZWNrQ29sdW1uQnJlYWtzICYmIGNoaWxkLT5zdHlsZSgpLT5jb2x1bW5CcmVh
a0FmdGVyKCkgPT0gUEJBTFdBWVMpOworICAgIGlmIChjaGVja0FmdGVyQWx3YXlzKSB7CisgICAg
ICAgIG1hcmdpbkluZm8uc2V0Qm90dG9tUXVpcmsodHJ1ZSk7IC8vIENhdXNlIG1hcmdpbnMgdG8g
YmUgZGlzY2FyZGVkIGZvciBhbnkgZm9sbG93aW5nIGNvbnRlbnQuCisgICAgICAgIHJldHVybiBu
ZXh0UGFnZVRvcCh5UG9zKTsKKyAgICB9CisgICAgcmV0dXJuIHlQb3M7Cit9CisKK2ludCBSZW5k
ZXJCbG9jazo6YWRqdXN0Rm9yVW5zcGxpdHRhYmxlQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCwgaW50
IHlQb3MsIGJvb2wgaW5jbHVkZU1hcmdpbnMpCit7CisgICAgYm9vbCBpc1Vuc3BsaXR0YWJsZSA9
IGNoaWxkLT5pc1JlcGxhY2VkKCkgfHwgY2hpbGQtPnNjcm9sbHNPdmVyZmxvdygpOworICAgIGlm
ICghaXNVbnNwbGl0dGFibGUpCisgICAgICAgIHJldHVybiB5UG9zOworICAgIGludCBjaGlsZEhl
aWdodCA9IGNoaWxkLT5oZWlnaHQoKSArIChpbmNsdWRlTWFyZ2lucyA/IGNoaWxkLT5tYXJnaW5U
b3AoKSArIGNoaWxkLT5tYXJnaW5Cb3R0b20oKSA6IDApOworICAgIExheW91dFN0YXRlKiBsYXlv
dXRTdGF0ZSA9IHZpZXcoKS0+bGF5b3V0U3RhdGUoKTsKKyAgICBpZiAobGF5b3V0U3RhdGUtPm1f
Y29sdW1uSW5mbykKKyAgICAgICAgbGF5b3V0U3RhdGUtPm1fY29sdW1uSW5mby0+dXBkYXRlTWlu
aW11bUNvbHVtbkhlaWdodChjaGlsZEhlaWdodCk7CisgICAgaW50IHBhZ2VIZWlnaHQgPSBsYXlv
dXRTdGF0ZS0+bV9wYWdlSGVpZ2h0OworICAgIGlmICghcGFnZUhlaWdodCB8fCBjaGlsZEhlaWdo
dCA+IHBhZ2VIZWlnaHQpCisgICAgICAgIHJldHVybiB5UG9zOworICAgIGludCByZW1haW5pbmdI
ZWlnaHQgPSBwYWdlSGVpZ2h0IC0gKChsYXlvdXRTdGF0ZS0+bV9sYXlvdXRPZmZzZXQgLSBsYXlv
dXRTdGF0ZS0+bV9wYWdlT2Zmc2V0KS5oZWlnaHQoKSArIHlQb3MpICUgcGFnZUhlaWdodDsKKyAg
ICBpZiAocmVtYWluaW5nSGVpZ2h0IDwgY2hpbGRIZWlnaHQpCisgICAgICAgIHJldHVybiB5UG9z
ICsgcmVtYWluaW5nSGVpZ2h0OworICAgIHJldHVybiB5UG9zOworfQorCit2b2lkIFJlbmRlckJs
b2NrOjphZGp1c3RMaW5lUG9zaXRpb25Gb3JQYWdpbmF0aW9uKFJvb3RJbmxpbmVCb3gqIGxpbmVC
b3gsIGludCYgZGVsdGEpCit7CisgICAgLy8gRklYTUU6IEZvciBub3cgd2UgcGFnaW5hdGUgdXNp
bmcgbGluZSBvdmVyZmxvdy4gIFRoaXMgZW5zdXJlcyB0aGF0IGxpbmVzIGRvbid0IG92ZXJsYXAg
YXQgYWxsIHdoZW4gd2UKKyAgICAvLyBwdXQgYSBzdHJ1dCBiZXR3ZWVuIHRoZW0gZm9yIHBhZ2lu
YXRpb24gcHVycG9zZXMuICBIb3dldmVyLCB0aGlzIHJlYWxseSBpc24ndCB0aGUgZGVzaXJlZCBy
ZW5kZXJpbmcsIHNpbmNlCisgICAgLy8gdGhlIGxpbmUgb24gdGhlIHRvcCBvZiB0aGUgbmV4dCBw
YWdlIHdpbGwgYXBwZWFyIHRvbyBmYXIgZG93biByZWxhdGl2ZSB0byB0aGUgc2FtZSBraW5kIG9m
IGxpbmUgYXQgdGhlIHRvcAorICAgIC8vIG9mIHRoZSBmaXJzdCBjb2x1bW4uCisgICAgLy8KKyAg
ICAvLyBUaGUgcmVuZGVyaW5nIHdlIHdvdWxkIGxpa2UgdG8gc2VlIGlzIG9uZSB3aGVyZSB0aGUg
bGluZVRvcCBpcyBhdCB0aGUgdG9wIG9mIHRoZSBjb2x1bW4sIGFuZCBhbnkgbGluZSBvdmVyZmxv
dworICAgIC8vIHNpbXBseSBzcGlsbHMgb3V0IGFib3ZlIHRoZSB0b3Agb2YgdGhlIGNvbHVtbi4g
IFRoaXMgZWZmZWN0IHdvdWxkIG1hdGNoIHdoYXQgaGFwcGVucyBhdCB0aGUgdG9wIG9mIHRoZSBm
aXJzdCBjb2x1bW4uCisgICAgLy8gV2UgY2FuJ3QgYWNoaWV2ZSB0aGlzIHJlbmRlcmluZywgaG93
ZXZlciwgdW50aWwgd2Ugc3RvcCBjb2x1bW5zIGZyb20gY2xpcHBpbmcgdG8gdGhlIGNvbHVtbiBi
b3VuZHMgKHRodXMgYWxsb3dpbmcKKyAgICAvLyBmb3Igb3ZlcmZsb3cgdG8gb2NjdXIpLCBhbmQg
dGhlbiBjYWNoZSB2aXNpYmxlIG92ZXJmbG93IGZvciBlYWNoIGNvbHVtbiByZWN0LgorICAgIC8v
CisgICAgLy8gRnVydGhlcm1vcmUsIHRoZSBwYWludCB3ZSBoYXZlIHRvIGRvIHdoZW4gYSBjb2x1
bW4gaGFzIG92ZXJmbG93IGhhcyB0byBiZSBzcGVjaWFsLiAgV2UgbmVlZCB0byBleGNsdWRlCisg
ICAgLy8gY29udGVudCB0aGF0IHBhaW50cyBpbiBhIHByZXZpb3VzIGNvbHVtbiAoYW5kIGNvbnRl
bnQgdGhhdCBwYWludHMgaW4gdGhlIGZvbGxvd2luZyBjb2x1bW4pLgorICAgIC8vCisgICAgLy8g
RklYTUU6IEFub3RoZXIgcHJvYmxlbSB3aXRoIHNpbXBseSBtb3ZpbmcgbGluZXMgaXMgdGhhdCB0
aGUgYXZhaWxhYmxlIGxpbmUgd2lkdGggbWF5IGNoYW5nZSAoYmVjYXVzZSBvZiBmbG9hdHMpLgor
ICAgIC8vIFRlY2huaWNhbGx5IGlmIHRoZSBsb2NhdGlvbiB3ZSBtb3ZlIHRoZSBsaW5lIHRvIGhh
cyBhIGRpZmZlcmVudCBsaW5lIHdpZHRoIHRoYW4gb3VyIG9sZCBwb3NpdGlvbiwgdGhlbiB3ZSBu
ZWVkIHRvIGRpcnR5IHRoZQorICAgIC8vIGxpbmUgYW5kIGFsbCBmb2xsb3dpbmcgbGluZXMuCisg
ICAgTGF5b3V0U3RhdGUqIGxheW91dFN0YXRlID0gdmlldygpLT5sYXlvdXRTdGF0ZSgpOworICAg
IGludCBwYWdlSGVpZ2h0ID0gbGF5b3V0U3RhdGUtPm1fcGFnZUhlaWdodDsKKyAgICBpbnQgeVBv
cyA9IGxpbmVCb3gtPnRvcFZpc2libGVPdmVyZmxvdygpOworICAgIGludCBsaW5lSGVpZ2h0ID0g
bGluZUJveC0+Ym90dG9tVmlzaWJsZU92ZXJmbG93KCkgLSB5UG9zOworICAgIGlmIChsYXlvdXRT
dGF0ZS0+bV9jb2x1bW5JbmZvKQorICAgICAgICBsYXlvdXRTdGF0ZS0+bV9jb2x1bW5JbmZvLT51
cGRhdGVNaW5pbXVtQ29sdW1uSGVpZ2h0KGxpbmVIZWlnaHQpOworICAgIHlQb3MgKz0gZGVsdGE7
CisgICAgbGluZUJveC0+c2V0UGFnaW5hdGlvblN0cnV0KDApOworICAgIGlmICghcGFnZUhlaWdo
dCB8fCBsaW5lSGVpZ2h0ID4gcGFnZUhlaWdodCkKKyAgICAgICAgcmV0dXJuOworICAgIGludCBy
ZW1haW5pbmdIZWlnaHQgPSBwYWdlSGVpZ2h0IC0gKChsYXlvdXRTdGF0ZS0+bV9sYXlvdXRPZmZz
ZXQgLSBsYXlvdXRTdGF0ZS0+bV9wYWdlT2Zmc2V0KS5oZWlnaHQoKSArIHlQb3MpICUgcGFnZUhl
aWdodDsKKyAgICBpZiAocmVtYWluaW5nSGVpZ2h0IDwgbGluZUhlaWdodCkgeworICAgICAgICBp
ZiAobGluZUJveCA9PSBmaXJzdFJvb3RCb3goKSAmJiAhaXNQb3NpdGlvbmVkKCkgJiYgIWlzVGFi
bGVDZWxsKCkpCisgICAgICAgICAgICBzZXRQYWdpbmF0aW9uU3RydXQocmVtYWluaW5nSGVpZ2h0
ICsgKCh5UG9zID4gMCAmJiBsaW5lSGVpZ2h0ICsgeVBvcyA8PSBwYWdlSGVpZ2h0KSA/IHlQb3Mg
OiAwKSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZGVsdGEgKz0gcmVtYWluaW5nSGVp
Z2h0OworICAgICAgICAgICAgbGluZUJveC0+c2V0UGFnaW5hdGlvblN0cnV0KHJlbWFpbmluZ0hl
aWdodCk7CisgICAgICAgIH0KKyAgICB9ICAKK30KKyAKIGNvbnN0IGNoYXIqIFJlbmRlckJsb2Nr
OjpyZW5kZXJOYW1lKCkgY29uc3QKIHsKICAgICBpZiAoaXNCb2R5KCkpCkluZGV4OiBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrLmgJKHJldmlzaW9uIDY2OTAzKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIENvbHVtbkluZm87CiBjbGFzcyBJbmxpbmVJdGVyYXRvcjsKK2NsYXNz
IExheW91dFN0YXRlTWFpbnRhaW5lcjsKIGNsYXNzIFJlbmRlcklubGluZTsKIAogc3RydWN0IEJp
ZGlSdW47CkBAIC03MCw3ICs3MSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hp
bGQoUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IDAp
OwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDaGlsZChSZW5kZXJPYmplY3QqKTsKIAotICAgIHZp
cnR1YWwgdm9pZCBsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4pOworICAgIHZpcnR1
YWwgdm9pZCBsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIGludCBwYWdlSGVpZ2h0
ID0gMCk7CiAKICAgICB2b2lkIGluc2VydFBvc2l0aW9uZWRPYmplY3QoUmVuZGVyQm94Kik7CiAg
ICAgdm9pZCByZW1vdmVQb3NpdGlvbmVkT2JqZWN0KFJlbmRlckJveCopOwpAQCAtODksNiArOTAs
NyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIG1hcmtBbGxEZXNjZW5kYW50c1dpdGhGbG9hdHNGb3JM
YXlvdXQoUmVuZGVyQm94KiBmbG9hdFRvUmVtb3ZlID0gMCwgYm9vbCBpbkxheW91dCA9IHRydWUp
OwogICAgIHZvaWQgbWFya1Bvc2l0aW9uZWRPYmplY3RzRm9yTGF5b3V0KCk7CisgICAgdm9pZCBt
YXJrRGVzY2VuZGFudEJsb2Nrc0FuZExpbmVzRm9yTGF5b3V0KGJvb2wgaW5MYXlvdXQgPSB0cnVl
KTsKIAogICAgIGJvb2wgY29udGFpbnNGbG9hdHMoKSB7IHJldHVybiBtX2Zsb2F0aW5nT2JqZWN0
cyAmJiAhbV9mbG9hdGluZ09iamVjdHMtPmlzRW1wdHkoKTsgfQogICAgIGJvb2wgY29udGFpbnNG
bG9hdChSZW5kZXJPYmplY3QqKTsKQEAgLTE1MSw2ICsxNTMsMTAgQEAgcHVibGljOgogCiAgICAg
Q29sdW1uSW5mbyogY29sdW1uSW5mbygpIGNvbnN0OwogICAgIGludCBjb2x1bW5HYXAoKSBjb25z
dDsKKyAgICAKKyAgICAvLyBUaGVzZSB0d28gZnVuY3Rpb25zIHRha2UgdGhlIENvbHVtbkluZm8q
IHRvIGF2b2lkIHJlcGVhdGVkIGxvb2t1cHMgb2YgdGhlIGluZm8gaW4gdGhlIGdsb2JhbCBIYXNo
TWFwLgorICAgIHVuc2lnbmVkIGNvbHVtbkNvdW50KENvbHVtbkluZm8qKSBjb25zdDsKKyAgICBJ
bnRSZWN0IGNvbHVtblJlY3RBdChDb2x1bW5JbmZvKiwgdW5zaWduZWQpIGNvbnN0OwogCiBwcm90
ZWN0ZWQ6CiAgICAgLy8gVGhlc2UgZnVuY3Rpb25zIGFyZSBvbmx5IHVzZWQgaW50ZXJuYWxseSB0
byBtYW5pcHVsYXRlIHRoZSByZW5kZXIgdHJlZSBzdHJ1Y3R1cmUgdmlhIHJlbW92ZS9pbnNlcnQv
YXBwZW5kQ2hpbGROb2RlLgpAQCAtMTc3LDIwICsxODMsMjUgQEAgcHJvdGVjdGVkOgogICAgIH0K
ICAgICB2b2lkIG1vdmVDaGlsZHJlblRvKFJlbmRlckJsb2NrKiB0bywgUmVuZGVyT2JqZWN0KiBz
dGFydENoaWxkLCBSZW5kZXJPYmplY3QqIGVuZENoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNo
aWxkLCBib29sIGZ1bGxSZW1vdmVJbnNlcnQgPSBmYWxzZSk7CiAgICAgCi0gICAgaW50IG1heFRv
cFBvc01hcmdpbigpIGNvbnN0IHsgcmV0dXJuIG1fbWF4TWFyZ2luID8gbV9tYXhNYXJnaW4tPm1f
dG9wUG9zIDogTWF4TWFyZ2luOjp0b3BQb3NEZWZhdWx0KHRoaXMpOyB9Ci0gICAgaW50IG1heFRv
cE5lZ01hcmdpbigpIGNvbnN0IHsgcmV0dXJuIG1fbWF4TWFyZ2luID8gbV9tYXhNYXJnaW4tPm1f
dG9wTmVnIDogTWF4TWFyZ2luOjp0b3BOZWdEZWZhdWx0KHRoaXMpOyB9Ci0gICAgaW50IG1heEJv
dHRvbVBvc01hcmdpbigpIGNvbnN0IHsgcmV0dXJuIG1fbWF4TWFyZ2luID8gbV9tYXhNYXJnaW4t
Pm1fYm90dG9tUG9zIDogTWF4TWFyZ2luOjpib3R0b21Qb3NEZWZhdWx0KHRoaXMpOyB9Ci0gICAg
aW50IG1heEJvdHRvbU5lZ01hcmdpbigpIGNvbnN0IHsgcmV0dXJuIG1fbWF4TWFyZ2luID8gbV9t
YXhNYXJnaW4tPm1fYm90dG9tTmVnIDogTWF4TWFyZ2luOjpib3R0b21OZWdEZWZhdWx0KHRoaXMp
OyB9CisgICAgaW50IG1heFRvcFBvc01hcmdpbigpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEg
PyBtX3JhcmVEYXRhLT5tX3RvcFBvcyA6IFJlbmRlckJsb2NrUmFyZURhdGE6OnRvcFBvc0RlZmF1
bHQodGhpcyk7IH0KKyAgICBpbnQgbWF4VG9wTmVnTWFyZ2luKCkgY29uc3QgeyByZXR1cm4gbV9y
YXJlRGF0YSA/IG1fcmFyZURhdGEtPm1fdG9wTmVnIDogUmVuZGVyQmxvY2tSYXJlRGF0YTo6dG9w
TmVnRGVmYXVsdCh0aGlzKTsgfQorICAgIGludCBtYXhCb3R0b21Qb3NNYXJnaW4oKSBjb25zdCB7
IHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+bV9ib3R0b21Qb3MgOiBSZW5kZXJCbG9j
a1JhcmVEYXRhOjpib3R0b21Qb3NEZWZhdWx0KHRoaXMpOyB9CisgICAgaW50IG1heEJvdHRvbU5l
Z01hcmdpbigpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVEYXRhLT5tX2JvdHRv
bU5lZyA6IFJlbmRlckJsb2NrUmFyZURhdGE6OmJvdHRvbU5lZ0RlZmF1bHQodGhpcyk7IH0KKyAg
ICBpbnQgcGFnaW5hdGlvblN0cnV0KCkgY29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFy
ZURhdGEtPm1fcGFnaW5hdGlvblN0cnV0IDogMDsgfQorICAgIGludCBwYWdlWSgpIGNvbnN0IHsg
cmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVEYXRhLT5tX3BhZ2VZIDogMDsgfQogICAgIHZvaWQg
c2V0TWF4VG9wTWFyZ2lucyhpbnQgcG9zLCBpbnQgbmVnKTsKICAgICB2b2lkIHNldE1heEJvdHRv
bU1hcmdpbnMoaW50IHBvcywgaW50IG5lZyk7Ci0gICAgCisgICAgdm9pZCBzZXRQYWdpbmF0aW9u
U3RydXQoaW50IHN0cnV0KTsKKyAgICB2b2lkIHNldFBhZ2VZKGludCB5KTsKKwogICAgIHZvaWQg
aW5pdE1heE1hcmdpblZhbHVlcygpCiAgICAgewotICAgICAgICBpZiAobV9tYXhNYXJnaW4pIHsK
LSAgICAgICAgICAgIG1fbWF4TWFyZ2luLT5tX3RvcFBvcyA9IE1heE1hcmdpbjo6dG9wUG9zRGVm
YXVsdCh0aGlzKTsKLSAgICAgICAgICAgIG1fbWF4TWFyZ2luLT5tX3RvcE5lZyA9IE1heE1hcmdp
bjo6dG9wTmVnRGVmYXVsdCh0aGlzKTsKLSAgICAgICAgICAgIG1fbWF4TWFyZ2luLT5tX2JvdHRv
bVBvcyA9IE1heE1hcmdpbjo6Ym90dG9tUG9zRGVmYXVsdCh0aGlzKTsKLSAgICAgICAgICAgIG1f
bWF4TWFyZ2luLT5tX2JvdHRvbU5lZyA9IE1heE1hcmdpbjo6Ym90dG9tTmVnRGVmYXVsdCh0aGlz
KTsKKyAgICAgICAgaWYgKG1fcmFyZURhdGEpIHsKKyAgICAgICAgICAgIG1fcmFyZURhdGEtPm1f
dG9wUG9zID0gUmVuZGVyQmxvY2tSYXJlRGF0YTo6dG9wUG9zRGVmYXVsdCh0aGlzKTsKKyAgICAg
ICAgICAgIG1fcmFyZURhdGEtPm1fdG9wTmVnID0gUmVuZGVyQmxvY2tSYXJlRGF0YTo6dG9wTmVn
RGVmYXVsdCh0aGlzKTsKKyAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fYm90dG9tUG9zID0gUmVu
ZGVyQmxvY2tSYXJlRGF0YTo6Ym90dG9tUG9zRGVmYXVsdCh0aGlzKTsKKyAgICAgICAgICAgIG1f
cmFyZURhdGEtPm1fYm90dG9tTmVnID0gUmVuZGVyQmxvY2tSYXJlRGF0YTo6Ym90dG9tTmVnRGVm
YXVsdCh0aGlzKTsKKyAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fcGFnaW5hdGlvblN0cnV0ID0g
MDsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjk1LDkgKzMwNiw0MiBAQCBwcml2YXRlOgogICAg
ICAgICBib29sIGV2ZXJIYWRMYXlvdXQ7CiAgICAgfTsKIAorICAgIHN0cnVjdCBGbG9hdGluZ09i
amVjdCA6IE5vbmNvcHlhYmxlIHsKKyAgICAgICAgZW51bSBUeXBlIHsKKyAgICAgICAgICAgIEZs
b2F0TGVmdCwKKyAgICAgICAgICAgIEZsb2F0UmlnaHQKKyAgICAgICAgfTsKKworICAgICAgICBG
bG9hdGluZ09iamVjdChUeXBlIHR5cGUpCisgICAgICAgICAgICA6IG1fcmVuZGVyZXIoMCkKKyAg
ICAgICAgICAgICwgbV90b3AoMCkKKyAgICAgICAgICAgICwgbV9ib3R0b20oMCkKKyAgICAgICAg
ICAgICwgbV9sZWZ0KDApCisgICAgICAgICAgICAsIG1fd2lkdGgoMCkKKyAgICAgICAgICAgICwg
bV9wYWdpbmF0aW9uU3RydXQoMCkKKyAgICAgICAgICAgICwgbV90eXBlKHR5cGUpCisgICAgICAg
ICAgICAsIG1fc2hvdWxkUGFpbnQodHJ1ZSkKKyAgICAgICAgICAgICwgbV9pc0Rlc2NlbmRhbnQo
ZmFsc2UpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIFR5cGUgdHlwZSgpIHsgcmV0
dXJuIHN0YXRpY19jYXN0PFR5cGU+KG1fdHlwZSk7IH0KKworICAgICAgICBSZW5kZXJCb3gqIG1f
cmVuZGVyZXI7CisgICAgICAgIGludCBtX3RvcDsKKyAgICAgICAgaW50IG1fYm90dG9tOworICAg
ICAgICBpbnQgbV9sZWZ0OworICAgICAgICBpbnQgbV93aWR0aDsKKyAgICAgICAgaW50IG1fcGFn
aW5hdGlvblN0cnV0OworICAgICAgICB1bnNpZ25lZCBtX3R5cGUgOiAxOyAvLyBUeXBlIChsZWZ0
IG9yIHJpZ2h0IGFsaWduZWQpCisgICAgICAgIGJvb2wgbV9zaG91bGRQYWludCA6IDE7CisgICAg
ICAgIGJvb2wgbV9pc0Rlc2NlbmRhbnQgOiAxOworICAgIH07CisKICAgICAvLyBUaGUgZm9sbG93
aW5nIGZ1bmN0aW9ucycgaW1wbGVtZW50YXRpb25zIGFyZSBpbiBSZW5kZXJCbG9ja0xpbmVMYXlv
dXQuY3BwLgogICAgIFJvb3RJbmxpbmVCb3gqIGRldGVybWluZVN0YXJ0UG9zaXRpb24oYm9vbCYg
Zmlyc3RMaW5lLCBib29sJiBmdWxsTGF5b3V0LCBib29sJiBwcmV2aW91c0xpbmVCcm9rZUNsZWFu
bHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmxpbmVCaWRp
UmVzb2x2ZXImLCBWZWN0b3I8RmxvYXRXaXRoUmVjdD4mIGZsb2F0cywgdW5zaWduZWQmIG51bUNs
ZWFuRmxvYXRzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElu
bGluZUJpZGlSZXNvbHZlciYsIFZlY3RvcjxGbG9hdFdpdGhSZWN0PiYgZmxvYXRzLCB1bnNpZ25l
ZCYgbnVtQ2xlYW5GbG9hdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sJiB1c2VSZXBhaW50Qm91bmRzLCBpbnQmIHJlcGFpbnRUb3AsIGludCYgcmVwYWlu
dEJvdHRvbSk7CiAgICAgUm9vdElubGluZUJveCogZGV0ZXJtaW5lRW5kUG9zaXRpb24oUm9vdElu
bGluZUJveCogc3RhcnRCb3gsIElubGluZUl0ZXJhdG9yJiBjbGVhbkxpbmVTdGFydCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWRpU3RhdHVzJiBjbGVhbkxpbmVC
aWRpU3RhdHVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCYg
eVBvcyk7CkBAIC0zMDUsNyArMzQ5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAg
ICAgIFJvb3RJbmxpbmVCb3gqJiBlbmRMaW5lLCBpbnQmIGVuZFlQb3MsIGludCYgcmVwYWludEJv
dHRvbSwgaW50JiByZXBhaW50VG9wKTsKIAogICAgIHZvaWQgc2tpcFRyYWlsaW5nV2hpdGVzcGFj
ZShJbmxpbmVJdGVyYXRvciYsIGJvb2wgaXNMaW5lRW1wdHksIGJvb2wgcHJldmlvdXNMaW5lQnJv
a2VDbGVhbmx5KTsKLSAgICBpbnQgc2tpcExlYWRpbmdXaGl0ZXNwYWNlKElubGluZUJpZGlSZXNv
bHZlciYsIGJvb2wgZmlyc3RMaW5lLCBib29sIGlzTGluZUVtcHR5LCBib29sIHByZXZpb3VzTGlu
ZUJyb2tlQ2xlYW5seSk7CisgICAgaW50IHNraXBMZWFkaW5nV2hpdGVzcGFjZShJbmxpbmVCaWRp
UmVzb2x2ZXImLCBib29sIGZpcnN0TGluZSwgYm9vbCBpc0xpbmVFbXB0eSwgYm9vbCBwcmV2aW91
c0xpbmVCcm9rZUNsZWFubHksIEZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXRGcm9tUHJldmlvdXNM
aW5lKTsKICAgICB2b2lkIGZpdEJlbG93RmxvYXRzKGludCB3aWR0aFRvRml0LCBib29sIGZpcnN0
TGluZSwgaW50JiBhdmFpbGFibGVXaWR0aCk7CiAgICAgSW5saW5lSXRlcmF0b3IgZmluZE5leHRM
aW5lQnJlYWsoSW5saW5lQmlkaVJlc29sdmVyJiwgYm9vbCBmaXJzdExpbmUsIGJvb2wmIGlzTGlu
ZUVtcHR5LCBib29sJiBwcmV2aW91c0xpbmVCcm9rZUNsZWFubHksIGJvb2wmIGh5cGhlbmF0ZWQs
IEVDbGVhciogPSAwKTsKICAgICBSb290SW5saW5lQm94KiBjb25zdHJ1Y3RMaW5lKHVuc2lnbmVk
IHJ1bkNvdW50LCBCaWRpUnVuKiBmaXJzdFJ1biwgQmlkaVJ1biogbGFzdFJ1biwgYm9vbCBmaXJz
dExpbmUsIGJvb2wgbGFzdExpbmUsIFJlbmRlck9iamVjdCogZW5kT2JqZWN0KTsKQEAgLTMyOSwx
MiArMzczLDE3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYWludFNlbGVjdGlvbihQYWludEluZm8m
LCBpbnQgdHgsIGludCB0eSk7CiAgICAgdm9pZCBwYWludENhcmV0KFBhaW50SW5mbyYsIGludCB0
eCwgaW50IHR5LCBDYXJldFR5cGUpOwogCi0gICAgdm9pZCBpbnNlcnRGbG9hdGluZ09iamVjdChS
ZW5kZXJCb3gqKTsKKyAgICBGbG9hdGluZ09iamVjdCogaW5zZXJ0RmxvYXRpbmdPYmplY3QoUmVu
ZGVyQm94Kik7CiAgICAgdm9pZCByZW1vdmVGbG9hdGluZ09iamVjdChSZW5kZXJCb3gqKTsKLQor
ICAgIAogICAgIC8vIENhbGxlZCBmcm9tIGxpbmVXaWR0aCwgdG8gcG9zaXRpb24gdGhlIGZsb2F0
cyBhZGRlZCBpbiB0aGUgbGFzdCBsaW5lLgotICAgIC8vIFJldHVybnMgdHVyZSBpZiBhbmQgb25s
eSBpZiBpdCBoYXMgcG9zaXRpb25lZCBhbnkgZmxvYXRzLgorICAgIC8vIFJldHVybnMgdHJ1ZSBp
ZiBhbmQgb25seSBpZiBpdCBoYXMgcG9zaXRpb25lZCBhbnkgZmxvYXRzLgogICAgIGJvb2wgcG9z
aXRpb25OZXdGbG9hdHMoKTsKKyAgICAKKyAgICAvLyBQb3NpdGlvbnMgbmV3IGZsb2F0cyBhbmQg
YWxzbyBhZGp1c3QgYWxsIGZsb2F0cyBlbmNvdW50ZXJlZCBvbiB0aGUgbGluZSBpZiBhbnkgb2Yg
dGhlbQorICAgIC8vIGhhdmUgdG8gbW92ZSB0byB0aGUgbmV4dCBwYWdlL2NvbHVtbi4KKyAgICBi
b29sIHBvc2l0aW9uTmV3RmxvYXRPbkxpbmUoRmxvYXRpbmdPYmplY3QqIG5ld0Zsb2F0LCBGbG9h
dGluZ09iamVjdCogbGFzdEZsb2F0RnJvbVByZXZpb3VzTGluZSk7CisKICAgICB2b2lkIGNsZWFy
RmxvYXRzKCk7CiAgICAgaW50IGdldENsZWFyRGVsdGEoUmVuZGVyQm94KiBjaGlsZCwgaW50IHlQ
b3MpOwogCkBAIC00MTYsOCArNDY1LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIG9mZnNldEZvckNv
bnRlbnRzKGludCYgdHgsIGludCYgdHkpIGNvbnN0OwogCiAgICAgdm9pZCBjYWxjQ29sdW1uV2lk
dGgoKTsKLSAgICBpbnQgbGF5b3V0Q29sdW1ucyhpbnQgZW5kT2ZDb250ZW50ID0gLTEsIGludCBy
ZXF1ZXN0ZWRDb2x1bW5IZWlnaHQgPSAtMSk7Ci0gICAgaW50IHZpc2libGVUb3BPZkhpZ2hlc3RG
bG9hdEV4dGVuZGluZ0JlbG93KGludCBib3R0b20sIGludCBtYXhIZWlnaHQpIGNvbnN0OworICAg
IGJvb2wgbGF5b3V0Q29sdW1ucyhib29sIGhhc1NwZWNpZmllZFBhZ2VIZWlnaHQsIGludCBwYWdl
SGVpZ2h0LCBMYXlvdXRTdGF0ZU1haW50YWluZXImKTsKICAgICB2b2lkIG1ha2VDaGlsZHJlbkFu
b255bW91c0NvbHVtbkJsb2NrcyhSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkLCBSZW5kZXJCbG9j
ayogbmV3QmxvY2tCb3gsIFJlbmRlck9iamVjdCogbmV3Q2hpbGQpOwogCiAgICAgYm9vbCBleHBh
bmRzVG9FbmNsb3NlT3ZlcmhhbmdpbmdGbG9hdHMoKSBjb25zdDsKQEAgLTQzMywzNiArNDgxLDYg
QEAgcHJpdmF0ZToKICAgICBSZW5kZXJCbG9jayogY29udGludWF0aW9uQmVmb3JlKFJlbmRlck9i
amVjdCogYmVmb3JlQ2hpbGQpOwogICAgIFJlbmRlckJsb2NrKiBjb250YWluaW5nQ29sdW1uc0Js
b2NrKGJvb2wgYWxsb3dBbm9ueW1vdXNDb2x1bW5CbG9jayA9IHRydWUpOwogICAgIFJlbmRlckJs
b2NrKiBjb2x1bW5zQmxvY2tGb3JTcGFubmluZ0VsZW1lbnQoUmVuZGVyT2JqZWN0KiBuZXdDaGls
ZCk7Ci0gICAgCi0gICAgc3RydWN0IEZsb2F0aW5nT2JqZWN0IDogTm9uY29weWFibGUgewotICAg
ICAgICBlbnVtIFR5cGUgewotICAgICAgICAgICAgRmxvYXRMZWZ0LAotICAgICAgICAgICAgRmxv
YXRSaWdodAotICAgICAgICB9OwotCi0gICAgICAgIEZsb2F0aW5nT2JqZWN0KFR5cGUgdHlwZSkK
LSAgICAgICAgICAgIDogbV9yZW5kZXJlcigwKQotICAgICAgICAgICAgLCBtX3RvcCgwKQotICAg
ICAgICAgICAgLCBtX2JvdHRvbSgwKQotICAgICAgICAgICAgLCBtX2xlZnQoMCkKLSAgICAgICAg
ICAgICwgbV93aWR0aCgwKQotICAgICAgICAgICAgLCBtX3R5cGUodHlwZSkKLSAgICAgICAgICAg
ICwgbV9zaG91bGRQYWludCh0cnVlKQotICAgICAgICAgICAgLCBtX2lzRGVzY2VuZGFudChmYWxz
ZSkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgVHlwZSB0eXBlKCkgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8VHlwZT4obV90eXBlKTsgfQotCi0gICAgICAgIFJlbmRlckJveCogbV9yZW5k
ZXJlcjsKLSAgICAgICAgaW50IG1fdG9wOwotICAgICAgICBpbnQgbV9ib3R0b207Ci0gICAgICAg
IGludCBtX2xlZnQ7Ci0gICAgICAgIGludCBtX3dpZHRoOwotICAgICAgICB1bnNpZ25lZCBtX3R5
cGUgOiAxOyAvLyBUeXBlIChsZWZ0IG9yIHJpZ2h0IGFsaWduZWQpCi0gICAgICAgIGJvb2wgbV9z
aG91bGRQYWludCA6IDE7Ci0gICAgICAgIGJvb2wgbV9pc0Rlc2NlbmRhbnQgOiAxOwotICAgIH07
CiAKICAgICBjbGFzcyBNYXJnaW5JbmZvIHsKICAgICAgICAgLy8gQ29sbGFwc2luZyBmbGFncyBm
b3Igd2hldGhlciB3ZSBjYW4gY29sbGFwc2Ugb3VyIG1hcmdpbnMgd2l0aCBvdXIgY2hpbGRyZW4n
cyBtYXJnaW5zLgpAQCAtNTM5LDYgKzU1NywxMyBAQCBwcml2YXRlOgogICAgIHZvaWQgc2V0Q29s
bGFwc2VkQm90dG9tTWFyZ2luKGNvbnN0IE1hcmdpbkluZm8mKTsKICAgICAvLyBFbmQgaGVscGVy
IGZ1bmN0aW9ucyBhbmQgc3RydWN0cyB1c2VkIGJ5IGxheW91dEJsb2NrQ2hpbGRyZW4uCiAKKyAg
ICAvLyBQYWdpbmF0aW9uIHJvdXRpbmVzLgorICAgIGludCBuZXh0UGFnZVRvcChpbnQgeVBvcykg
Y29uc3Q7IC8vIFJldHVybnMgdGhlIHRvcCBvZiB0aGUgbmV4dCBwYWdlIGZvbGxvd2luZyB5UG9z
LgorICAgIGludCBhcHBseUJlZm9yZUJyZWFrKFJlbmRlckJveCogY2hpbGQsIGludCB5UG9zKTsg
Ly8gSWYgdGhlIGNoaWxkIGhhcyBhIGJlZm9yZSBicmVhaywgdGhlbiByZXR1cm4gYSBuZXcgeVBv
cyB0aGF0IHNoaWZ0cyB0byB0aGUgdG9wIG9mIHRoZSBuZXh0IHBhZ2UvY29sdW1uLgorICAgIGlu
dCBhcHBseUFmdGVyQnJlYWsoUmVuZGVyQm94KiBjaGlsZCwgaW50IHlQb3MsIE1hcmdpbkluZm8m
IG1hcmdpbkluZm8pOyAvLyBJZiB0aGUgY2hpbGQgaGFzIGFuIGFmdGVyIGJyZWFrLCB0aGVuIHJl
dHVybiBhIG5ldyB5UG9zIHRoYXQgc2hpZnRzIHRvIHRoZSB0b3Agb2YgdGhlIG5leHQgcGFnZS9j
b2x1bW4uCisgICAgaW50IGFkanVzdEZvclVuc3BsaXR0YWJsZUNoaWxkKFJlbmRlckJveCogY2hp
bGQsIGludCB5UG9zLCBib29sIGluY2x1ZGVNYXJnaW5zID0gZmFsc2UpOyAvLyBJZiB0aGUgY2hp
bGQgaXMgdW5zcGxpdHRhYmxlIGFuZCBjYW4ndCBmaXQgb24gdGhlIGN1cnJlbnQgcGFnZSwgcmV0
dXJuIHRoZSB0b3Agb2YgdGhlIG5leHQgcGFnZS9jb2x1bW4uCisgICAgdm9pZCBhZGp1c3RMaW5l
UG9zaXRpb25Gb3JQYWdpbmF0aW9uKFJvb3RJbmxpbmVCb3gqLCBpbnQmIGRlbHRhWSk7IC8vIENv
bXB1dGVzIGEgZGVsdGFZIHZhbHVlIHRoYXQgcHV0IGEgbGluZSBhdCB0aGUgdG9wIG9mIHRoZSBu
ZXh0IHBhZ2UgaWYgaXQgZG9lc24ndCBmaXQgb24gdGhlIGN1cnJlbnQgcGFnZS4KKwogICAgIHR5
cGVkZWYgUG9zaXRpb25lZE9iamVjdHNMaXN0SGFzaFNldDo6Y29uc3RfaXRlcmF0b3IgSXRlcmF0
b3I7CiAgICAgRGVwcmVjYXRlZFB0ckxpc3Q8RmxvYXRpbmdPYmplY3Q+KiBtX2Zsb2F0aW5nT2Jq
ZWN0czsKICAgICAKQEAgLTU1MSwxMiArNTc2LDE0IEBAIHByaXZhdGU6CiAgICAgUmVuZGVyQm94
TW9kZWxPYmplY3QqIG1fY29udGludWF0aW9uOwogCiAgICAgLy8gQWxsb2NhdGVkIG9ubHkgd2hl
biBzb21lIG9mIHRoZXNlIGZpZWxkcyBoYXZlIG5vbi1kZWZhdWx0IHZhbHVlcwotICAgIHN0cnVj
dCBNYXhNYXJnaW4gOiBOb25jb3B5YWJsZSB7Ci0gICAgICAgIE1heE1hcmdpbihjb25zdCBSZW5k
ZXJCbG9jayogbykgCisgICAgc3RydWN0IFJlbmRlckJsb2NrUmFyZURhdGEgOiBOb25jb3B5YWJs
ZSB7CisgICAgICAgIFJlbmRlckJsb2NrUmFyZURhdGEoY29uc3QgUmVuZGVyQmxvY2sqIG8pIAog
ICAgICAgICAgICAgOiBtX3RvcFBvcyh0b3BQb3NEZWZhdWx0KG8pKQogICAgICAgICAgICAgLCBt
X3RvcE5lZyh0b3BOZWdEZWZhdWx0KG8pKQogICAgICAgICAgICAgLCBtX2JvdHRvbVBvcyhib3R0
b21Qb3NEZWZhdWx0KG8pKQogICAgICAgICAgICAgLCBtX2JvdHRvbU5lZyhib3R0b21OZWdEZWZh
dWx0KG8pKQorICAgICAgICAgICAgLCBtX3BhZ2luYXRpb25TdHJ1dCgwKQorICAgICAgICAgICAg
LCBtX3BhZ2VZKDApCiAgICAgICAgIHsgCiAgICAgICAgIH0KIApAQCAtNTY0LDE0ICs1OTEsMTYg
QEAgcHJpdmF0ZToKICAgICAgICAgc3RhdGljIGludCB0b3BOZWdEZWZhdWx0KGNvbnN0IFJlbmRl
ckJsb2NrKiBvKSB7IHJldHVybiBvLT5tYXJnaW5Ub3AoKSA8IDAgPyAtby0+bWFyZ2luVG9wKCkg
OiAwOyB9CiAgICAgICAgIHN0YXRpYyBpbnQgYm90dG9tUG9zRGVmYXVsdChjb25zdCBSZW5kZXJC
bG9jayogbykgeyByZXR1cm4gby0+bWFyZ2luQm90dG9tKCkgPiAwID8gby0+bWFyZ2luQm90dG9t
KCkgOiAwOyB9CiAgICAgICAgIHN0YXRpYyBpbnQgYm90dG9tTmVnRGVmYXVsdChjb25zdCBSZW5k
ZXJCbG9jayogbykgeyByZXR1cm4gby0+bWFyZ2luQm90dG9tKCkgPCAwID8gLW8tPm1hcmdpbkJv
dHRvbSgpIDogMDsgfQotCisgICAgICAgIAogICAgICAgICBpbnQgbV90b3BQb3M7CiAgICAgICAg
IGludCBtX3RvcE5lZzsKICAgICAgICAgaW50IG1fYm90dG9tUG9zOwogICAgICAgICBpbnQgbV9i
b3R0b21OZWc7CisgICAgICAgIGludCBtX3BhZ2luYXRpb25TdHJ1dDsKKyAgICAgICAgaW50IG1f
cGFnZVk7CiAgICAgIH07CiAKLSAgICBNYXhNYXJnaW4qIG1fbWF4TWFyZ2luOworICAgIFJlbmRl
ckJsb2NrUmFyZURhdGEqIG1fcmFyZURhdGE7CiAKICAgICBSZW5kZXJPYmplY3RDaGlsZExpc3Qg
bV9jaGlsZHJlbjsKICAgICBSZW5kZXJMaW5lQm94TGlzdCBtX2xpbmVCb3hlczsgICAvLyBBbGwg
b2YgdGhlIHJvb3QgbGluZSBib3hlcyBjcmVhdGVkIGZvciB0aGlzIGJsb2NrIGZsb3cuICBGb3Ig
ZXhhbXBsZSwgPGRpdj5IZWxsbzxicj53b3JsZC48L2Rpdj4gd2lsbCBoYXZlIHR3byB0b3RhbCBs
aW5lcyBmb3IgdGhlIDxkaXY+LgpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tM
aW5lTGF5b3V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
a0xpbmVMYXlvdXQuY3BwCShyZXZpc2lvbiA2Njg4NikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrTGluZUxheW91dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAK
ICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RNYXJrZXIuaCIK
ICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRl
ICJUcmFpbGluZ0Zsb2F0c1Jvb3RJbmxpbmVCb3guaCIKICNpbmNsdWRlICJicmVha19saW5lcy5o
IgogI2luY2x1ZGUgPHd0Zi9BbHdheXNJbmxpbmUuaD4KQEAgLTU3MCwxMiArNTcxLDExIEBAIHZv
aWQgUmVuZGVyQmxvY2s6OmxheW91dElubGluZUNoaWxkcmVuKGIKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgIGlmIChvLT5pc1Bvc2l0aW9uZWQoKSkKICAgICAgICAgICAgICAgICAgICAg
by0+Y29udGFpbmluZ0Jsb2NrKCktPmluc2VydFBvc2l0aW9uZWRPYmplY3QoYm94KTsKLSAgICAg
ICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG8tPmlzRmxvYXRpbmco
KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0cy5hcHBlbmQoRmxvYXRXaXRoUmVjdChi
b3gpKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZnVsbExheW91dCB8fCBvLT5uZWVk
c0xheW91dCgpKSAvLyBSZXBsYWNlZCBlbGVtZW50cwotICAgICAgICAgICAgICAgICAgICAgICAg
dG9SZW5kZXJCb3gobyktPmRpcnR5TGluZUJveGVzKGZ1bGxMYXlvdXQpOwotCisgICAgICAgICAg
ICAgICAgZWxzZSBpZiAoby0+aXNGbG9hdGluZygpKQorICAgICAgICAgICAgICAgICAgICBmbG9h
dHMuYXBwZW5kKEZsb2F0V2l0aFJlY3QoYm94KSk7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAo
ZnVsbExheW91dCB8fCBvLT5uZWVkc0xheW91dCgpKSB7CisgICAgICAgICAgICAgICAgICAgIC8v
IFJlcGxhY2VkIGVsZW1lbnRzCisgICAgICAgICAgICAgICAgICAgIHRvUmVuZGVyQm94KG8pLT5k
aXJ0eUxpbmVCb3hlcyhmdWxsTGF5b3V0KTsKICAgICAgICAgICAgICAgICAgICAgby0+bGF5b3V0
SWZOZWVkZWQoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgaWYgKG8t
PmlzVGV4dCgpIHx8IChvLT5pc1JlbmRlcklubGluZSgpICYmICFlbmRPZklubGluZSkpIHsKQEAg
LTU5NCw3ICs1OTQsOCBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVDaGlsZHJlbihi
CiAgICAgICAgIHVuc2lnbmVkIGZsb2F0SW5kZXg7CiAgICAgICAgIGJvb2wgZmlyc3RMaW5lID0g
dHJ1ZTsKICAgICAgICAgYm9vbCBwcmV2aW91c0xpbmVCcm9rZUNsZWFubHkgPSB0cnVlOwotICAg
ICAgICBSb290SW5saW5lQm94KiBzdGFydExpbmUgPSBkZXRlcm1pbmVTdGFydFBvc2l0aW9uKGZp
cnN0TGluZSwgZnVsbExheW91dCwgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5LCByZXNvbHZlciwg
ZmxvYXRzLCBmbG9hdEluZGV4KTsKKyAgICAgICAgUm9vdElubGluZUJveCogc3RhcnRMaW5lID0g
ZGV0ZXJtaW5lU3RhcnRQb3NpdGlvbihmaXJzdExpbmUsIGZ1bGxMYXlvdXQsIHByZXZpb3VzTGlu
ZUJyb2tlQ2xlYW5seSwgcmVzb2x2ZXIsIGZsb2F0cywgZmxvYXRJbmRleCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VSZXBhaW50
Qm91bmRzLCByZXBhaW50VG9wLCByZXBhaW50Qm90dG9tKTsKIAogICAgICAgICBpZiAoZnVsbExh
eW91dCAmJiBoYXNJbmxpbmVDaGlsZCAmJiAhc2VsZk5lZWRzTGF5b3V0KCkpIHsKICAgICAgICAg
ICAgIHNldE5lZWRzTGF5b3V0KHRydWUsIGZhbHNlKTsgIC8vIE1hcmsgb3Vyc2VsdmVzIGFzIG5l
ZWRpbmcgYSBmdWxsIGxheW91dC4gVGhpcyB3YXkgd2UnbGwgcmVwYWludCBsaWtlCkBAIC02MjIs
OSArNjIzLDExIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dElubGluZUNoaWxkcmVuKGIKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgOiBkZXRlcm1pbmVFbmRQb3NpdGlvbihz
dGFydExpbmUsIGNsZWFuTGluZVN0YXJ0LCBjbGVhbkxpbmVCaWRpU3RhdHVzLCBlbmRMaW5lWVBv
cyk7CiAKICAgICAgICAgaWYgKHN0YXJ0TGluZSkgewotICAgICAgICAgICAgdXNlUmVwYWludEJv
dW5kcyA9IHRydWU7Ci0gICAgICAgICAgICByZXBhaW50VG9wID0gaGVpZ2h0KCk7Ci0gICAgICAg
ICAgICByZXBhaW50Qm90dG9tID0gaGVpZ2h0KCk7CisgICAgICAgICAgICBpZiAoIXVzZVJlcGFp
bnRCb3VuZHMpIHsKKyAgICAgICAgICAgICAgICB1c2VSZXBhaW50Qm91bmRzID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICByZXBhaW50VG9wID0gaGVpZ2h0KCk7CisgICAgICAgICAgICAgICAgcmVw
YWludEJvdHRvbSA9IGhlaWdodCgpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgUmVuZGVy
QXJlbmEqIGFyZW5hID0gcmVuZGVyQXJlbmEoKTsKICAgICAgICAgICAgIFJvb3RJbmxpbmVCb3gq
IGJveCA9IHN0YXJ0TGluZTsKICAgICAgICAgICAgIHdoaWxlIChib3gpIHsKQEAgLTY1OSw2ICs2
NjIsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVDaGlsZHJlbihiCiAgICAgICAg
IGJvb2wgY2hlY2tGb3JGbG9hdHNGcm9tTGFzdExpbmUgPSBmYWxzZTsKIAogICAgICAgICBib29s
IGlzTGluZUVtcHR5ID0gdHJ1ZTsKKyAgICAgICAgYm9vbCBwYWdpbmF0ZWQgPSB2aWV3KCktPmxh
eW91dFN0YXRlKCktPnBhZ2luYXRlZCgpOwogCiAgICAgICAgIHdoaWxlICghZW5kLmF0RW5kKCkp
IHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBJcyB0aGlzIGNoZWNrIG5lY2Vzc2FyeSBiZWZvcmUg
dGhlIGZpcnN0IGl0ZXJhdGlvbiBvciBjYW4gaXQgYmUgbW92ZWQgdG8gdGhlIGVuZD8KQEAgLTc4
Niw2ICs3OTAsMTcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4oYgog
ICAgICAgICAgICAgICAgICAgICAgICAgcmVwYWludFRvcCA9IG1pbihyZXBhaW50VG9wLCBsaW5l
Qm94LT50b3BWaXNpYmxlT3ZlcmZsb3coKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXBh
aW50Qm90dG9tID0gbWF4KHJlcGFpbnRCb3R0b20sIGxpbmVCb3gtPmJvdHRvbVZpc2libGVPdmVy
ZmxvdygpKTsKICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHBhZ2luYXRlZCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGFkanVzdG1lbnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgYWRqdXN0TGlu
ZVBvc2l0aW9uRm9yUGFnaW5hdGlvbihsaW5lQm94LCBhZGp1c3RtZW50KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChhZGp1c3RtZW50KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbGluZUJveC0+YWRqdXN0UG9zaXRpb24oMCwgYWRqdXN0bWVudCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHVzZVJlcGFpbnRCb3VuZHMpIC8vIFRoaXMgY2FuIG9ubHkgYmUg
YSBwb3NpdGl2ZSBhZGp1c3RtZW50LCBzbyBubyBuZWVkIHRvIHVwZGF0ZSByZXBhaW50VG9wLgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBhaW50Qm90dG9tID0gbWF4KHJlcGFp
bnRCb3R0b20sIGxpbmVCb3gtPmJvdHRvbVZpc2libGVPdmVyZmxvdygpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzZXRIZWlnaHQobGluZUJveC0+YmxvY2tIZWlnaHQoKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgICAgICBmaXJzdExpbmUgPSBmYWxzZTsKQEAgLTgyMCw2ICs4
MzUsMTAgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4oYgogICAgICAg
ICAgICAgICAgIGludCBkZWx0YSA9IGhlaWdodCgpIC0gZW5kTGluZVlQb3M7CiAgICAgICAgICAg
ICAgICAgZm9yIChSb290SW5saW5lQm94KiBsaW5lID0gZW5kTGluZTsgbGluZTsgbGluZSA9IGxp
bmUtPm5leHRSb290Qm94KCkpIHsKICAgICAgICAgICAgICAgICAgICAgbGluZS0+YXR0YWNoTGlu
ZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAocGFnaW5hdGVkKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBkZWx0YSAtPSBsaW5lLT5wYWdpbmF0aW9uU3RydXQoKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGFkanVzdExpbmVQb3NpdGlvbkZvclBhZ2luYXRpb24obGluZSwgZGVsdGEp
OworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGlmIChkZWx0YSkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgcmVwYWludFRvcCA9IG1pbihyZXBhaW50VG9wLCBs
aW5lLT50b3BWaXNpYmxlT3ZlcmZsb3coKSArIG1pbihkZWx0YSwgMCkpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgcmVwYWludEJvdHRvbSA9IG1heChyZXBhaW50Qm90dG9tLCBsaW5lLT5ib3R0
b21WaXNpYmxlT3ZlcmZsb3coKSArIG1heChkZWx0YSwgMCkpOwpAQCAtOTAwLDIwICs5MTksNDQg
QEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4oYgogfQogCiBSb290SW5s
aW5lQm94KiBSZW5kZXJCbG9jazo6ZGV0ZXJtaW5lU3RhcnRQb3NpdGlvbihib29sJiBmaXJzdExp
bmUsIGJvb2wmIGZ1bGxMYXlvdXQsIGJvb2wmIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSwgCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmxpbmVC
aWRpUmVzb2x2ZXImIHJlc29sdmVyLCBWZWN0b3I8RmxvYXRXaXRoUmVjdD4mIGZsb2F0cywgdW5z
aWduZWQmIG51bUNsZWFuRmxvYXRzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgSW5saW5lQmlkaVJlc29sdmVyJiByZXNvbHZlciwgVmVjdG9yPEZs
b2F0V2l0aFJlY3Q+JiBmbG9hdHMsIHVuc2lnbmVkJiBudW1DbGVhbkZsb2F0cywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wmIHVzZVJlcGFp
bnRCb3VuZHMsIGludCYgcmVwYWludFRvcCwgaW50JiByZXBhaW50Qm90dG9tKQogewogICAgIFJv
b3RJbmxpbmVCb3gqIGN1cnIgPSAwOwogICAgIFJvb3RJbmxpbmVCb3gqIGxhc3QgPSAwOwogCiAg
ICAgYm9vbCBkaXJ0aWVkQnlGbG9hdCA9IGZhbHNlOwogICAgIGlmICghZnVsbExheW91dCkgewor
ICAgICAgICAvLyBQYWdpbmF0ZSBhbGwgb2YgdGhlIGNsZWFuIGxpbmVzLgorICAgICAgICBib29s
IHBhZ2luYXRlZCA9IHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+cGFnaW5hdGVkKCk7CisgICAgICAg
IGludCBwYWdpbmF0aW9uRGVsdGEgPSAwOwogICAgICAgICBzaXplX3QgZmxvYXRJbmRleCA9IDA7
CiAgICAgICAgIGZvciAoY3VyciA9IGZpcnN0Um9vdEJveCgpOyBjdXJyICYmICFjdXJyLT5pc0Rp
cnR5KCk7IGN1cnIgPSBjdXJyLT5uZXh0Um9vdEJveCgpKSB7CisgICAgICAgICAgICBpZiAocGFn
aW5hdGVkKSB7CisgICAgICAgICAgICAgICAgcGFnaW5hdGlvbkRlbHRhIC09IGN1cnItPnBhZ2lu
YXRpb25TdHJ1dCgpOworICAgICAgICAgICAgICAgIGFkanVzdExpbmVQb3NpdGlvbkZvclBhZ2lu
YXRpb24oY3VyciwgcGFnaW5hdGlvbkRlbHRhKTsKKyAgICAgICAgICAgICAgICBpZiAocGFnaW5h
dGlvbkRlbHRhKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChjb250YWluc0Zsb2F0cygpIHx8
ICFmbG9hdHMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTog
RG8gYmV0dGVyIGV2ZW50dWFsbHkuICBGb3Igbm93IGlmIHdlIGV2ZXIgc2hpZnQgYmVjYXVzZSBv
ZiBwYWdpbmF0aW9uIGFuZCBmbG9hdHMgYXJlIHByZXNlbnQganVzdCBnbyB0byBhIGZ1bGwgbGF5
b3V0LgorICAgICAgICAgICAgICAgICAgICAgICAgZnVsbExheW91dCA9IHRydWU7IAorICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmICghdXNlUmVwYWludEJvdW5kcykK
KyAgICAgICAgICAgICAgICAgICAgICAgIHVzZVJlcGFpbnRCb3VuZHMgPSB0cnVlOworICAgICAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIHJlcGFpbnRUb3AgPSBtaW4o
cmVwYWludFRvcCwgY3Vyci0+dG9wVmlzaWJsZU92ZXJmbG93KCkgKyBtaW4ocGFnaW5hdGlvbkRl
bHRhLCAwKSk7CisgICAgICAgICAgICAgICAgICAgIHJlcGFpbnRCb3R0b20gPSBtYXgocmVwYWlu
dEJvdHRvbSwgY3Vyci0+Ym90dG9tVmlzaWJsZU92ZXJmbG93KCkgKyBtYXgocGFnaW5hdGlvbkRl
bHRhLCAwKSk7CisgICAgICAgICAgICAgICAgICAgIGN1cnItPmFkanVzdFBvc2l0aW9uKDAsIHBh
Z2luYXRpb25EZWx0YSk7CisgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKFZlY3RvcjxSZW5kZXJCb3gq
PiogY2xlYW5MaW5lRmxvYXRzID0gY3Vyci0+ZmxvYXRzUHRyKCkpIHsKICAgICAgICAgICAgICAg
ICBWZWN0b3I8UmVuZGVyQm94Kj46Oml0ZXJhdG9yIGVuZCA9IGNsZWFuTGluZUZsb2F0cy0+ZW5k
KCk7CiAgICAgICAgICAgICAgICAgZm9yIChWZWN0b3I8UmVuZGVyQm94Kj46Oml0ZXJhdG9yIG8g
PSBjbGVhbkxpbmVGbG9hdHMtPmJlZ2luKCk7IG8gIT0gZW5kOyArK28pIHsKICAgICAgICAgICAg
ICAgICAgICAgUmVuZGVyQm94KiBmID0gKm87Ci0gICAgICAgICAgICAgICAgICAgIEludFNpemUg
bmV3U2l6ZShmLT53aWR0aCgpICsgZi0+bWFyZ2luTGVmdCgpICtmLT5tYXJnaW5SaWdodCgpLCBm
LT5oZWlnaHQoKSArIGYtPm1hcmdpblRvcCgpICsgZi0+bWFyZ2luQm90dG9tKCkpOworICAgICAg
ICAgICAgICAgICAgICBmLT5sYXlvdXRJZk5lZWRlZCgpOworICAgICAgICAgICAgICAgICAgICBJ
bnRTaXplIG5ld1NpemUoZi0+d2lkdGgoKSArIGYtPm1hcmdpbkxlZnQoKSArIGYtPm1hcmdpblJp
Z2h0KCksIGYtPmhlaWdodCgpICsgZi0+bWFyZ2luVG9wKCkgKyBmLT5tYXJnaW5Cb3R0b20oKSk7
CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChmbG9hdEluZGV4IDwgZmxvYXRzLnNpemUoKSk7
CiAgICAgICAgICAgICAgICAgICAgIGlmIChmbG9hdHNbZmxvYXRJbmRleF0ub2JqZWN0ICE9IGYp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEEgbmV3IGZsb2F0IGhhcyBiZWVuIGluc2Vy
dGVkIGJlZm9yZSB0aGlzIGxpbmUgb3IgYmVmb3JlIGl0cyBsYXN0IGtub3duIGZsb2F0LgpAQCAt
MTIzNiwxNCArMTI3OSwxNCBAQCB2b2lkIFJlbmRlckJsb2NrOjpza2lwVHJhaWxpbmdXaGl0ZXNw
YWNlCiAgICAgfQogfQogCi1pbnQgUmVuZGVyQmxvY2s6OnNraXBMZWFkaW5nV2hpdGVzcGFjZShJ
bmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sdmVyLCBib29sIGZpcnN0TGluZSwgYm9vbCBpc0xpbmVF
bXB0eSwgYm9vbCBwcmV2aW91c0xpbmVCcm9rZUNsZWFubHkpCitpbnQgUmVuZGVyQmxvY2s6OnNr
aXBMZWFkaW5nV2hpdGVzcGFjZShJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sdmVyLCBib29sIGZp
cnN0TGluZSwgYm9vbCBpc0xpbmVFbXB0eSwgYm9vbCBwcmV2aW91c0xpbmVCcm9rZUNsZWFubHks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdGluZ09iamVjdCog
bGFzdEZsb2F0RnJvbVByZXZpb3VzTGluZSkKIHsKICAgICBpbnQgYXZhaWxhYmxlV2lkdGggPSBs
aW5lV2lkdGgoaGVpZ2h0KCksIGZpcnN0TGluZSk7CiAgICAgd2hpbGUgKCFyZXNvbHZlci5wb3Np
dGlvbigpLmF0RW5kKCkgJiYgIXJlcXVpcmVzTGluZUJveChyZXNvbHZlci5wb3NpdGlvbigpLCBp
c0xpbmVFbXB0eSwgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5KSkgewogICAgICAgICBSZW5kZXJP
YmplY3QqIG9iamVjdCA9IHJlc29sdmVyLnBvc2l0aW9uKCkub2JqOwogICAgICAgICBpZiAob2Jq
ZWN0LT5pc0Zsb2F0aW5nKCkpIHsKLSAgICAgICAgICAgIGluc2VydEZsb2F0aW5nT2JqZWN0KHRv
UmVuZGVyQm94KG9iamVjdCkpOwotICAgICAgICAgICAgcG9zaXRpb25OZXdGbG9hdHMoKTsKKyAg
ICAgICAgICAgIHBvc2l0aW9uTmV3RmxvYXRPbkxpbmUoaW5zZXJ0RmxvYXRpbmdPYmplY3QodG9S
ZW5kZXJCb3gob2JqZWN0KSksIGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUpOwogICAgICAgICAg
ICAgYXZhaWxhYmxlV2lkdGggPSBsaW5lV2lkdGgoaGVpZ2h0KCksIGZpcnN0TGluZSk7CiAgICAg
ICAgIH0gZWxzZSBpZiAob2JqZWN0LT5pc1Bvc2l0aW9uZWQoKSkgewogICAgICAgICAgICAgLy8g
RklYTUU6IFRoZSBtYXRoIGhlcmUgaXMgYWN0dWFsbHkgbm90IHJlYWxseSByaWdodC4gIEl0J3Mg
YSBiZXN0LWd1ZXNzIGFwcHJveGltYXRpb24gdGhhdApAQCAtMTM1Niw3ICsxMzk5LDggQEAgSW5s
aW5lSXRlcmF0b3IgUmVuZGVyQmxvY2s6OmZpbmROZXh0TGluZQogICAgIGJvb2wgYXBwbGllZFN0
YXJ0V2lkdGggPSByZXNvbHZlci5wb3NpdGlvbigpLnBvcyA+IDA7CiAgICAgTGluZU1pZHBvaW50
U3RhdGUmIGxpbmVNaWRwb2ludFN0YXRlID0gcmVzb2x2ZXIubWlkcG9pbnRTdGF0ZSgpOwogICAg
IAotICAgIGludCB3aWR0aCA9IHNraXBMZWFkaW5nV2hpdGVzcGFjZShyZXNvbHZlciwgZmlyc3RM
aW5lLCBpc0xpbmVFbXB0eSwgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5KTsKKyAgICBGbG9hdGlu
Z09iamVjdCogbGFzdEZsb2F0RnJvbVByZXZpb3VzTGluZSA9IG1fZmxvYXRpbmdPYmplY3RzID8g
bV9mbG9hdGluZ09iamVjdHMtPmxhc3QoKSA6IDA7CisgICAgaW50IHdpZHRoID0gc2tpcExlYWRp
bmdXaGl0ZXNwYWNlKHJlc29sdmVyLCBmaXJzdExpbmUsIGlzTGluZUVtcHR5LCBwcmV2aW91c0xp
bmVCcm9rZUNsZWFubHksIGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUpOwogCiAgICAgaW50IHcg
PSAwOwogICAgIGludCB0bXBXID0gMDsKQEAgLTE0NDEsMTIgKzE0ODUsMTIgQEAgSW5saW5lSXRl
cmF0b3IgUmVuZGVyQmxvY2s6OmZpbmROZXh0TGluZQogICAgICAgICAgICAgLy8gYWRkIHRvIHNw
ZWNpYWwgb2JqZWN0cy4uLgogICAgICAgICAgICAgaWYgKG8tPmlzRmxvYXRpbmcoKSkgewogICAg
ICAgICAgICAgICAgIFJlbmRlckJveCogZmxvYXRCb3ggPSB0b1JlbmRlckJveChvKTsKLSAgICAg
ICAgICAgICAgICBpbnNlcnRGbG9hdGluZ09iamVjdChmbG9hdEJveCk7CisgICAgICAgICAgICAg
ICAgRmxvYXRpbmdPYmplY3QqIGYgPSBpbnNlcnRGbG9hdGluZ09iamVjdChmbG9hdEJveCk7CiAg
ICAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgaXQgZml0cyBpbiB0aGUgY3VycmVudCBsaW5lLgog
ICAgICAgICAgICAgICAgIC8vIElmIGl0IGRvZXMsIHBvc2l0aW9uIGl0IG5vdywgb3RoZXJ3aXNl
LCBwb3NpdGlvbgogICAgICAgICAgICAgICAgIC8vIGl0IGFmdGVyIG1vdmluZyB0byBuZXh0IGxp
bmUgKGluIG5ld0xpbmUoKSBmdW5jKQogICAgICAgICAgICAgICAgIGlmIChmbG9hdHNGaXRPbkxp
bmUgJiYgZmxvYXRCb3gtPndpZHRoKCkgKyBmbG9hdEJveC0+bWFyZ2luTGVmdCgpICsgZmxvYXRC
b3gtPm1hcmdpblJpZ2h0KCkgKyB3ICsgdG1wVyA8PSB3aWR0aCkgewotICAgICAgICAgICAgICAg
ICAgICBwb3NpdGlvbk5ld0Zsb2F0cygpOworICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbk5l
d0Zsb2F0T25MaW5lKGYsIGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUpOwogICAgICAgICAgICAg
ICAgICAgICB3aWR0aCA9IGxpbmVXaWR0aChoZWlnaHQoKSwgZmlyc3RMaW5lKTsKICAgICAgICAg
ICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgZmxvYXRzRml0T25MaW5lID0gZmFs
c2U7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHJldmlzaW9uIDY2ODg2KQorKysgV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTczLDcgKzk3
Myw3IEBAIHZvaWQgUmVuZGVyQm94OjptYXBMb2NhbFRvQ29udGFpbmVyKFJlbmQKICAgICBpZiAo
UmVuZGVyVmlldyogdiA9IHZpZXcoKSkgewogICAgICAgICBpZiAodi0+bGF5b3V0U3RhdGVFbmFi
bGVkKCkgJiYgIXJlcGFpbnRDb250YWluZXIpIHsKICAgICAgICAgICAgIExheW91dFN0YXRlKiBs
YXlvdXRTdGF0ZSA9IHYtPmxheW91dFN0YXRlKCk7Ci0gICAgICAgICAgICBJbnRTaXplIG9mZnNl
dCA9IGxheW91dFN0YXRlLT5tX29mZnNldDsKKyAgICAgICAgICAgIEludFNpemUgb2Zmc2V0ID0g
bGF5b3V0U3RhdGUtPm1fcGFpbnRPZmZzZXQ7CiAgICAgICAgICAgICBvZmZzZXQuZXhwYW5kKHgo
KSwgeSgpKTsKICAgICAgICAgICAgIGlmIChzdHlsZSgpLT5wb3NpdGlvbigpID09IFJlbGF0aXZl
UG9zaXRpb24gJiYgbGF5ZXIoKSkKICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gbGF5ZXIoKS0+
cmVsYXRpdmVQb3NpdGlvbk9mZnNldCgpOwpAQCAtMTE3MCw3ICsxMTcwLDcgQEAgdm9pZCBSZW5k
ZXJCb3g6OmNvbXB1dGVSZWN0Rm9yUmVwYWludChSZQogICAgICAgICAgICAgICAgIHJlY3QubW92
ZShsYXllcigpLT5yZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0KCkpOwogCiAgICAgICAgICAgICByZWN0
Lm1vdmUoeCgpLCB5KCkpOwotICAgICAgICAgICAgcmVjdC5tb3ZlKGxheW91dFN0YXRlLT5tX29m
ZnNldCk7CisgICAgICAgICAgICByZWN0Lm1vdmUobGF5b3V0U3RhdGUtPm1fcGFpbnRPZmZzZXQp
OwogICAgICAgICAgICAgaWYgKGxheW91dFN0YXRlLT5tX2NsaXBwZWQpCiAgICAgICAgICAgICAg
ICAgcmVjdC5pbnRlcnNlY3QobGF5b3V0U3RhdGUtPm1fY2xpcFJlY3QpOwogICAgICAgICAgICAg
cmV0dXJuOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmNwcAkocmV2
aXNpb24gNjY4ODYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIwMSw3ICsyMDEsNyBAQCB2b2lkIFJlbmRlckZsZXhpYmxlQm94
OjpjYWxjUHJlZldpZHRocygpCiAgICAgc2V0UHJlZldpZHRoc0RpcnR5KGZhbHNlKTsKIH0KIAot
dm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6bGF5b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxkcmVu
KQordm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6bGF5b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxk
cmVuLCBpbnQgLypwYWdlSGVpZ2h0IEZJWE1FOiBJbXBsZW1lbnQgKi8pCiB7CiAgICAgQVNTRVJU
KG5lZWRzTGF5b3V0KCkpOwogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4aWJs
ZUJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94
LmgJKHJldmlzaW9uIDY2ODg2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVC
b3guaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBj
YWxjSG9yaXpvbnRhbFByZWZXaWR0aHMoKTsKICAgICB2b2lkIGNhbGNWZXJ0aWNhbFByZWZXaWR0
aHMoKTsKIAotICAgIHZpcnR1YWwgdm9pZCBsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRy
ZW4pOworICAgIHZpcnR1YWwgdm9pZCBsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4s
IGludCBwYWdlSGVpZ2h0KTsKICAgICB2b2lkIGxheW91dEhvcml6b250YWxCb3goYm9vbCByZWxh
eW91dENoaWxkcmVuKTsKICAgICB2b2lkIGxheW91dFZlcnRpY2FsQm94KGJvb2wgcmVsYXlvdXRD
aGlsZHJlbik7CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAkocmV2aXNpb24g
NjY4ODYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02NDcsNyArNjQ3LDcgQEAgdm9pZCBSZW5kZXJJbmxpbmU6OmNvbXB1dGVSZWN0Rm9y
UmVwYWludAogICAgICAgICAgICAgTGF5b3V0U3RhdGUqIGxheW91dFN0YXRlID0gdi0+bGF5b3V0
U3RhdGUoKTsKICAgICAgICAgICAgIGlmIChzdHlsZSgpLT5wb3NpdGlvbigpID09IFJlbGF0aXZl
UG9zaXRpb24gJiYgbGF5ZXIoKSkKICAgICAgICAgICAgICAgICByZWN0Lm1vdmUobGF5ZXIoKS0+
cmVsYXRpdmVQb3NpdGlvbk9mZnNldCgpKTsKLSAgICAgICAgICAgIHJlY3QubW92ZShsYXlvdXRT
dGF0ZS0+bV9vZmZzZXQpOworICAgICAgICAgICAgcmVjdC5tb3ZlKGxheW91dFN0YXRlLT5tX3Bh
aW50T2Zmc2V0KTsKICAgICAgICAgICAgIGlmIChsYXlvdXRTdGF0ZS0+bV9jbGlwcGVkKQogICAg
ICAgICAgICAgICAgIHJlY3QuaW50ZXJzZWN0KGxheW91dFN0YXRlLT5tX2NsaXBSZWN0KTsKICAg
ICAgICAgICAgIHJldHVybjsKQEAgLTczNCw3ICs3MzQsNyBAQCB2b2lkIFJlbmRlcklubGluZTo6
bWFwTG9jYWxUb0NvbnRhaW5lcihSCiAgICAgaWYgKFJlbmRlclZpZXcgKnYgPSB2aWV3KCkpIHsK
ICAgICAgICAgaWYgKHYtPmxheW91dFN0YXRlRW5hYmxlZCgpICYmICFyZXBhaW50Q29udGFpbmVy
KSB7CiAgICAgICAgICAgICBMYXlvdXRTdGF0ZSogbGF5b3V0U3RhdGUgPSB2LT5sYXlvdXRTdGF0
ZSgpOwotICAgICAgICAgICAgSW50U2l6ZSBvZmZzZXQgPSBsYXlvdXRTdGF0ZS0+bV9vZmZzZXQ7
CisgICAgICAgICAgICBJbnRTaXplIG9mZnNldCA9IGxheW91dFN0YXRlLT5tX3BhaW50T2Zmc2V0
OwogICAgICAgICAgICAgaWYgKHN0eWxlKCktPnBvc2l0aW9uKCkgPT0gUmVsYXRpdmVQb3NpdGlv
biAmJiBsYXllcigpKQogICAgICAgICAgICAgICAgIG9mZnNldCArPSBsYXllcigpLT5yZWxhdGl2
ZVBvc2l0aW9uT2Zmc2V0KCk7CiAgICAgICAgICAgICB0cmFuc2Zvcm1TdGF0ZS5tb3ZlKG9mZnNl
dCk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCShyZXZpc2lvbiA2NjkwMykKKysr
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU0
MSwxMSArMjU0MSwxMSBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludENoaWxkTGF5ZXJJbnRvQ29s
CiAgICAgY29sdW1uQmxvY2stPmxheWVyKCktPmNvbnZlcnRUb0xheWVyQ29vcmRzKHJvb3RMYXll
ciwgbGF5ZXJYLCBsYXllclkpOwogICAgIAogICAgIENvbHVtbkluZm8qIGNvbEluZm8gPSBjb2x1
bW5CbG9jay0+Y29sdW1uSW5mbygpOwotICAgIHVuc2lnbmVkIGNvbENvdW50ID0gY29sSW5mby0+
Y29sdW1uQ291bnQoKTsKKyAgICB1bnNpZ25lZCBjb2xDb3VudCA9IGNvbHVtbkJsb2NrLT5jb2x1
bW5Db3VudChjb2xJbmZvKTsKICAgICBpbnQgY3VycllPZmZzZXQgPSAwOwogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBjb2xDb3VudDsgaSsrKSB7CiAgICAgICAgIC8vIEZvciBlYWNoIHJl
Y3QsIHdlIGNsaXAgdG8gdGhlIHJlY3QsIGFuZCB0aGVuIHdlIGFkanVzdCBvdXIgY29vcmRzLgot
ICAgICAgICBJbnRSZWN0IGNvbFJlY3QgPSBjb2xJbmZvLT5jb2x1bW5SZWN0QXQoaSk7CisgICAg
ICAgIEludFJlY3QgY29sUmVjdCA9IGNvbHVtbkJsb2NrLT5jb2x1bW5SZWN0QXQoY29sSW5mbywg
aSk7CiAgICAgICAgIGludCBjdXJyWE9mZnNldCA9IGNvbFJlY3QueCgpIC0gKGNvbHVtbkJsb2Nr
LT5ib3JkZXJMZWZ0KCkgKyBjb2x1bW5CbG9jay0+cGFkZGluZ0xlZnQoKSk7CiAgICAgICAgIGNv
bFJlY3QubW92ZShsYXllclgsIGxheWVyWSk7CiAKQEAgLTMwMDcsMTcgKzMwMDcsMTcgQEAgUmVu
ZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0Q2hpbGRMYQogICAgIGNvbHVtbkJsb2NrLT5s
YXllcigpLT5jb252ZXJ0VG9MYXllckNvb3Jkcyhyb290TGF5ZXIsIGxheWVyWCwgbGF5ZXJZKTsK
ICAgICAKICAgICBDb2x1bW5JbmZvKiBjb2xJbmZvID0gY29sdW1uQmxvY2stPmNvbHVtbkluZm8o
KTsKLSAgICBpbnQgY29sQ291bnQgPSBjb2xJbmZvLT5jb2x1bW5Db3VudCgpOworICAgIGludCBj
b2xDb3VudCA9IGNvbHVtbkJsb2NrLT5jb2x1bW5Db3VudChjb2xJbmZvKTsKICAgICAKICAgICAv
LyBXZSBoYXZlIHRvIGdvIGJhY2t3YXJkcyBmcm9tIHRoZSBsYXN0IGNvbHVtbiB0byB0aGUgZmly
c3QuCiAgICAgaW50IGxlZnQgPSBjb2x1bW5CbG9jay0+Ym9yZGVyTGVmdCgpICsgY29sdW1uQmxv
Y2stPnBhZGRpbmdMZWZ0KCk7CiAgICAgaW50IGN1cnJZT2Zmc2V0ID0gMDsKICAgICBpbnQgaTsK
ICAgICBmb3IgKGkgPSAwOyBpIDwgY29sQ291bnQ7IGkrKykKLSAgICAgICAgY3VycllPZmZzZXQg
LT0gY29sSW5mby0+Y29sdW1uUmVjdEF0KGkpLmhlaWdodCgpOworICAgICAgICBjdXJyWU9mZnNl
dCAtPSBjb2x1bW5CbG9jay0+Y29sdW1uUmVjdEF0KGNvbEluZm8sIGkpLmhlaWdodCgpOwogICAg
IGZvciAoaSA9IGNvbENvdW50IC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgICAgLy8gRm9yIGVh
Y2ggcmVjdCwgd2UgY2xpcCB0byB0aGUgcmVjdCwgYW5kIHRoZW4gd2UgYWRqdXN0IG91ciBjb29y
ZHMuCi0gICAgICAgIEludFJlY3QgY29sUmVjdCA9IGNvbEluZm8tPmNvbHVtblJlY3RBdChpKTsK
KyAgICAgICAgSW50UmVjdCBjb2xSZWN0ID0gY29sdW1uQmxvY2stPmNvbHVtblJlY3RBdChjb2xJ
bmZvLCBpKTsKICAgICAgICAgaW50IGN1cnJYT2Zmc2V0ID0gY29sUmVjdC54KCkgLSBsZWZ0Owog
ICAgICAgICBjdXJyWU9mZnNldCArPSBjb2xSZWN0LmhlaWdodCgpOwogICAgICAgICBjb2xSZWN0
Lm1vdmUobGF5ZXJYLCBsYXllclkpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlu
ZUJveExpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVC
b3hMaXN0LmNwcAkocmV2aXNpb24gNjY4ODYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
aW5lQm94TGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDYgQEAKICNpbmNsdWRl
ICJSZW5kZXJJbmxpbmUuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiUm9v
dElubGluZUJveC5oIgotI2luY2x1ZGUgIlNldHRpbmdzLmgiIC8vIEZJWE1FOiBUaGlzIGluY2x1
ZGUgY2FuIGJlIHJlbW92ZWQgd2hlbiBwYWdpbmF0ZUR1cmluZ0xheW91dEVuYWJsZWQgaXMgdGFr
ZW4gb3V0LgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCkBAIC0xNjEsNyArMTYwLDcgQEAgdm9p
ZCBSZW5kZXJMaW5lQm94TGlzdDo6cGFpbnQoUmVuZGVyQm94TQogICAgICAgICByZXR1cm47CiAK
ICAgICBSZW5kZXJWaWV3KiB2ID0gcmVuZGVyZXItPnZpZXcoKTsKLSAgICBib29sIHVzZVByaW50
UmVjdCA9ICF2LT5wcmludFJlY3QoKS5pc0VtcHR5KCkgJiYgIXJlbmRlcmVyLT5kb2N1bWVudCgp
LT5zZXR0aW5ncygpLT5wYWdpbmF0ZUR1cmluZ0xheW91dEVuYWJsZWQoKTsKKyAgICBib29sIHVz
ZVByaW50UmVjdCA9ICF2LT5wcmludFJlY3QoKS5pc0VtcHR5KCk7CiAgICAgCiAgICAgLy8gV2Ug
Y2FuIGNoZWNrIHRoZSBmaXJzdCBib3ggYW5kIGxhc3QgYm94IGFuZCBhdm9pZCBwYWludGluZyBp
ZiB3ZSBkb24ndAogICAgIC8vIGludGVyc2VjdC4gIFRoaXMgaXMgYSBxdWljayBzaG9ydC1jaXJj
dWl0IHRoYXQgd2UgY2FuIHRha2UgdG8gYXZvaWQgd2Fsa2luZyBhbnkgbGluZXMuCkBAIC0yMTUs
NyArMjE0LDYgQEAgdm9pZCBSZW5kZXJMaW5lQm94TGlzdDo6cGFpbnQoUmVuZGVyQm94TQogICAg
ICAgICBpbnQgYm90dG9tID0gY3Vyci0+Ym90dG9tVmlzaWJsZU92ZXJmbG93KCkgKyByZW5kZXJl
ci0+bWF4aW1hbE91dGxpbmVTaXplKGluZm8ucGhhc2UpOwogICAgICAgICBoID0gYm90dG9tIC0g
dG9wOwogICAgICAgICB5UG9zID0gdHkgKyB0b3A7Ci0gICAgICAgIHYtPnNldE1pbmltdW1Db2x1
bW5IZWlnaHQoaCk7CiAgICAgICAgIGlmICh5UG9zIDwgaW5mby5yZWN0LmJvdHRvbSgpICYmIHlQ
b3MgKyBoID4gaW5mby5yZWN0LnkoKSkKICAgICAgICAgICAgIGN1cnItPnBhaW50KGluZm8sIHR4
LCB0eSk7CiAgICAgfQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAJKHJldmlzaW9uIDY2
ODg2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUyLDcgKzUyLDYgQEAgUmVuZGVyVmlldzo6UmVuZGVyVmlldyhOb2RlKiBub2RlLCBGcmFt
ZQogICAgICwgbV9tYXhpbWFsT3V0bGluZVNpemUoMCkKICAgICAsIG1fYmVzdFRydW5jYXRlZEF0
KDApCiAgICAgLCBtX3RydW5jYXRvcldpZHRoKDApCi0gICAgLCBtX21pbmltdW1Db2x1bW5IZWln
aHQoMCkKICAgICAsIG1fZm9yY2VkUGFnZUJyZWFrKGZhbHNlKQogICAgICwgbV9sYXlvdXRTdGF0
ZSgwKQogICAgICwgbV9sYXlvdXRTdGF0ZURpc2FibGVDb3VudCgwKQpAQCAtNjk1LDcgKzY5NCw2
IEBAIHZvaWQgUmVuZGVyVmlldzo6c2V0QmVzdFRydW5jYXRlZEF0KGludCAKIAogdm9pZCBSZW5k
ZXJWaWV3OjpwdXNoTGF5b3V0U3RhdGUoUmVuZGVyT2JqZWN0KiByb290KQogewotICAgIEFTU0VS
VCghZG9pbmdGdWxsUmVwYWludCgpKTsKICAgICBBU1NFUlQobV9sYXlvdXRTdGF0ZURpc2FibGVD
b3VudCA9PSAwKTsKICAgICBBU1NFUlQobV9sYXlvdXRTdGF0ZSA9PSAwKTsKIApJbmRleDogV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclZpZXcuaAkocmV2aXNpb24gNjY4ODYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTgzLDEyICs4MywxMCBAQCBwdWJsaWM6CiAg
ICAgSW50UmVjdCBwcmludFJlY3QoKSBjb25zdCB7IHJldHVybiBtX3ByaW50UmVjdDsgfQogICAg
IHZvaWQgc2V0UHJpbnRSZWN0KGNvbnN0IEludFJlY3QmIHIpIHsgbV9wcmludFJlY3QgPSByOyB9
CiAKLSAgICB2b2lkIHNldFRydW5jYXRlZEF0KGludCB5KSB7IG1fdHJ1bmNhdGVkQXQgPSB5OyBt
X2Jlc3RUcnVuY2F0ZWRBdCA9IG1fdHJ1bmNhdG9yV2lkdGggPSAwOyBtX21pbmltdW1Db2x1bW5I
ZWlnaHQgPSAwOyBtX2ZvcmNlZFBhZ2VCcmVhayA9IGZhbHNlOyB9CisgICAgdm9pZCBzZXRUcnVu
Y2F0ZWRBdChpbnQgeSkgeyBtX3RydW5jYXRlZEF0ID0geTsgbV9iZXN0VHJ1bmNhdGVkQXQgPSBt
X3RydW5jYXRvcldpZHRoID0gMDsgbV9mb3JjZWRQYWdlQnJlYWsgPSBmYWxzZTsgfQogICAgIHZv
aWQgc2V0QmVzdFRydW5jYXRlZEF0KGludCB5LCBSZW5kZXJCb3hNb2RlbE9iamVjdCogZm9yUmVu
ZGVyZXIsIGJvb2wgZm9yY2VkQnJlYWsgPSBmYWxzZSk7Ci0gICAgdm9pZCBzZXRNaW5pbXVtQ29s
dW1uSGVpZ2h0KGludCBoZWlnaHQpIHsgbV9taW5pbXVtQ29sdW1uSGVpZ2h0ID0gaGVpZ2h0OyB9
CiAgICAgaW50IGJlc3RUcnVuY2F0ZWRBdCgpIGNvbnN0IHsgcmV0dXJuIG1fYmVzdFRydW5jYXRl
ZEF0OyB9Ci0gICAgaW50IG1pbmltdW1Db2x1bW5IZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX21p
bmltdW1Db2x1bW5IZWlnaHQ7IH0KLQorICAgIAogICAgIGludCB0cnVuY2F0ZWRBdCgpIGNvbnN0
IHsgcmV0dXJuIG1fdHJ1bmNhdGVkQXQ7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVJl
Y3RzKFZlY3RvcjxJbnRSZWN0PiYsIGludCB0eCwgaW50IHR5KTsKQEAgLTEyMiwyMSArMTIwLDIw
IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgZG9pbmdGdWxsUmVwYWludCgpIGNvbnN0IHsgcmV0dXJu
IG1fZnJhbWVWaWV3LT5uZWVkc0Z1bGxSZXBhaW50KCk7IH0KIAotICAgIHZvaWQgcHVzaExheW91
dFN0YXRlKFJlbmRlckJveCogcmVuZGVyZXIsIGNvbnN0IEludFNpemUmIG9mZnNldCkKKyAgICB2
b2lkIHB1c2hMYXlvdXRTdGF0ZShSZW5kZXJCb3gqIHJlbmRlcmVyLCBjb25zdCBJbnRTaXplJiBv
ZmZzZXQsIGludCBwYWdlSGVpZ2h0ID0gMCwgQ29sdW1uSW5mbyogY29sSW5mbyA9IDApCiAgICAg
ewotICAgICAgICBpZiAoZG9pbmdGdWxsUmVwYWludCgpKQotICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAvLyBXZSBwdXNoIExheW91dFN0YXRlIGV2ZW4gaWYgbGF5b3V0U3RhdGUgaXMgZGlz
YWJsZWQgYmVjYXVzZSBpdCBzdG9yZXMgbGF5b3V0RGVsdGEgdG9vLgotICAgICAgICBtX2xheW91
dFN0YXRlID0gbmV3IChyZW5kZXJBcmVuYSgpKSBMYXlvdXRTdGF0ZShtX2xheW91dFN0YXRlLCBy
ZW5kZXJlciwgb2Zmc2V0KTsKKyAgICAgICAgaWYgKCFkb2luZ0Z1bGxSZXBhaW50KCkgfHwgcmVu
ZGVyZXItPmhhc0NvbHVtbnMoKSB8fCBtX2xheW91dFN0YXRlLT5wYWdpbmF0ZWQoKSkKKyAgICAg
ICAgICAgIG1fbGF5b3V0U3RhdGUgPSBuZXcgKHJlbmRlckFyZW5hKCkpIExheW91dFN0YXRlKG1f
bGF5b3V0U3RhdGUsIHJlbmRlcmVyLCBvZmZzZXQsIHBhZ2VIZWlnaHQsIGNvbEluZm8pOwogICAg
IH0KIAogICAgIHZvaWQgcHVzaExheW91dFN0YXRlKFJlbmRlck9iamVjdCopOwogCiAgICAgdm9p
ZCBwb3BMYXlvdXRTdGF0ZSgpCiAgICAgewotICAgICAgICBpZiAoZG9pbmdGdWxsUmVwYWludCgp
KQotICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBMYXlvdXRTdGF0ZSogc3RhdGUgPSBtX2xh
eW91dFN0YXRlOworICAgICAgICBpZiAoZG9pbmdGdWxsUmVwYWludCgpICYmICFtX2xheW91dFN0
YXRlLT5wYWdpbmF0ZWQoKSkKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgbV9sYXlvdXRT
dGF0ZSA9IHN0YXRlLT5tX25leHQ7CiAgICAgICAgIHN0YXRlLT5kZXN0cm95KHJlbmRlckFyZW5h
KCkpOwogICAgIH0KQEAgLTE5OCw3ICsxOTUsNiBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAg
IGludCBtX2Jlc3RUcnVuY2F0ZWRBdDsKICAgICBpbnQgbV90cnVuY2F0b3JXaWR0aDsKLSAgICBp
bnQgbV9taW5pbXVtQ29sdW1uSGVpZ2h0OwogICAgIGJvb2wgbV9mb3JjZWRQYWdlQnJlYWs7CiAg
ICAgTGF5b3V0U3RhdGUqIG1fbGF5b3V0U3RhdGU7CiAgICAgdW5zaWduZWQgbV9sYXlvdXRTdGF0
ZURpc2FibGVDb3VudDsKQEAgLTIyNywxMyArMjIzLDEzIEBAIHZvaWQgdG9SZW5kZXJWaWV3KGNv
bnN0IFJlbmRlclZpZXcqKTsKIGNsYXNzIExheW91dFN0YXRlTWFpbnRhaW5lciA6IHB1YmxpYyBO
b25jb3B5YWJsZSB7CiBwdWJsaWM6CiAgICAgLy8gY3RvciB0byBwdXNoIG5vdwotICAgIExheW91
dFN0YXRlTWFpbnRhaW5lcihSZW5kZXJWaWV3KiB2aWV3LCBSZW5kZXJCb3gqIHJvb3QsIEludFNp
emUgb2Zmc2V0LCBib29sIGRpc2FibGVTdGF0ZSA9IGZhbHNlKQorICAgIExheW91dFN0YXRlTWFp
bnRhaW5lcihSZW5kZXJWaWV3KiB2aWV3LCBSZW5kZXJCb3gqIHJvb3QsIEludFNpemUgb2Zmc2V0
LCBib29sIGRpc2FibGVTdGF0ZSA9IGZhbHNlLCBpbnQgcGFnZUhlaWdodCA9IDAsIENvbHVtbklu
Zm8qIGNvbEluZm8gPSAwKQogICAgICAgICA6IG1fdmlldyh2aWV3KQogICAgICAgICAsIG1fZGlz
YWJsZWQoZGlzYWJsZVN0YXRlKQogICAgICAgICAsIG1fZGlkU3RhcnQoZmFsc2UpCiAgICAgICAg
ICwgbV9kaWRFbmQoZmFsc2UpCiAgICAgewotICAgICAgICBwdXNoKHJvb3QsIG9mZnNldCk7Cisg
ICAgICAgIHB1c2gocm9vdCwgb2Zmc2V0LCBwYWdlSGVpZ2h0LCBjb2xJbmZvKTsKICAgICB9CiAg
ICAgCiAgICAgLy8gY3RvciB0byBtYXliZSBwdXNoIGxhdGVyCkBAIC0yNTAsMTEgKzI0NiwxMSBA
QCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChtX2RpZFN0YXJ0ID09IG1fZGlkRW5kKTsgICAvLyBp
ZiB0aGlzIGZpcmVzLCBpdCBtZWFucyB0aGF0IHNvbWVvbmUgZGlkIGEgcHVzaCgpLCBidXQgZm9y
Z290IHRvIHBvcCgpLgogICAgIH0KIAotICAgIHZvaWQgcHVzaChSZW5kZXJCb3gqIHJvb3QsIElu
dFNpemUgb2Zmc2V0KQorICAgIHZvaWQgcHVzaChSZW5kZXJCb3gqIHJvb3QsIEludFNpemUgb2Zm
c2V0LCBpbnQgcGFnZUhlaWdodCA9IDAsIENvbHVtbkluZm8qIGNvbEluZm8gPSAwKQogICAgIHsK
ICAgICAgICAgQVNTRVJUKCFtX2RpZFN0YXJ0KTsKICAgICAgICAgLy8gV2UgcHVzaCBzdGF0ZSBl
dmVuIGlmIGRpc2FibGVkLCBiZWNhdXNlIHdlIHN0aWxsIG5lZWQgdG8gc3RvcmUgbGF5b3V0RGVs
dGEKLSAgICAgICAgbV92aWV3LT5wdXNoTGF5b3V0U3RhdGUocm9vdCwgb2Zmc2V0KTsKKyAgICAg
ICAgbV92aWV3LT5wdXNoTGF5b3V0U3RhdGUocm9vdCwgb2Zmc2V0LCBwYWdlSGVpZ2h0LCBjb2xJ
bmZvKTsKICAgICAgICAgaWYgKG1fZGlzYWJsZWQpCiAgICAgICAgICAgICBtX3ZpZXctPmRpc2Fi
bGVMYXlvdXRTdGF0ZSgpOwogICAgICAgICBtX2RpZFN0YXJ0ID0gdHJ1ZTsKSW5kZXg6IFdlYkNv
cmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRl
cmluZy9Sb290SW5saW5lQm94LmgJKHJldmlzaW9uIDY2ODg2KQorKysgV2ViQ29yZS9yZW5kZXJp
bmcvUm9vdElubGluZUJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBAIHB1Ymxp
YzoKICAgICAgICAgLCBtX2xpbmVCcmVha1BvcygwKQogICAgICAgICAsIG1fbGluZVRvcCgwKQog
ICAgICAgICAsIG1fbGluZUJvdHRvbSgwKQorICAgICAgICAsIG1fcGFnaW5hdGlvblN0cnV0KDAp
CiAgICAgewogICAgIH0KIApAQCAtNTcsNiArNTgsOSBAQCBwdWJsaWM6CiAgICAgaW50IGxpbmVU
b3AoKSBjb25zdCB7IHJldHVybiBtX2xpbmVUb3A7IH0KICAgICBpbnQgbGluZUJvdHRvbSgpIGNv
bnN0IHsgcmV0dXJuIG1fbGluZUJvdHRvbTsgfQogCisgICAgaW50IHBhZ2luYXRpb25TdHJ1dCgp
IGNvbnN0IHsgcmV0dXJuIG1fcGFnaW5hdGlvblN0cnV0OyB9CisgICAgdm9pZCBzZXRQYWdpbmF0
aW9uU3RydXQoaW50IHMpIHsgbV9wYWdpbmF0aW9uU3RydXQgPSBzOyB9CisKICAgICBpbnQgc2Vs
ZWN0aW9uVG9wKCkgY29uc3Q7CiAgICAgaW50IHNlbGVjdGlvbkJvdHRvbSgpIGNvbnN0IHsgcmV0
dXJuIGxpbmVCb3R0b20oKTsgfQogICAgIGludCBzZWxlY3Rpb25IZWlnaHQoKSBjb25zdCB7IHJl
dHVybiBtYXgoMCwgc2VsZWN0aW9uQm90dG9tKCkgLSBzZWxlY3Rpb25Ub3AoKSk7IH0KQEAgLTE0
MSw2ICsxNDUsOCBAQCBwcml2YXRlOgogICAgIGludCBtX2xpbmVUb3A7CiAgICAgaW50IG1fbGlu
ZUJvdHRvbTsKIAorICAgIGludCBtX3BhZ2luYXRpb25TdHJ1dDsKKwogICAgIC8vIEZsb2F0cyBo
YW5naW5nIG9mZiB0aGUgbGluZSBhcmUgcHVzaGVkIGludG8gdGhpcyB2ZWN0b3IgZHVyaW5nIGxh
eW91dC4gSXQgaXMgb25seQogICAgIC8vIGdvb2QgZm9yIGFzIGxvbmcgYXMgdGhlIGxpbmUgaGFz
IG5vdCBiZWVuIG1hcmtlZCBkaXJ0eS4KICAgICBPd25QdHI8VmVjdG9yPFJlbmRlckJveCo+ID4g
bV9mbG9hdHM7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67609</attachid>
            <date>2010-09-14 14:46:12 -0700</date>
            <delta_ts>2010-09-14 15:24:55 -0700</delta_ts>
            <desc>Make line layout rewind by 1 line when a line paginates.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>92127</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL0NvbHVtbkluZm8uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9Db2x1bW5JbmZvLmgJKHJldmlzaW9uIDY2OTAzKQorKysgV2ViQ29yZS9y
ZW5kZXJpbmcvQ29sdW1uSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw5IEBAIHB1
YmxpYzoKICAgICBDb2x1bW5JbmZvKCkKICAgICAgICAgOiBtX2Rlc2lyZWRDb2x1bW5XaWR0aCgw
KQogICAgICAgICAsIG1fZGVzaXJlZENvbHVtbkNvdW50KDEpCisgICAgICAgICwgbV9jb2x1bW5D
b3VudCgxKQorICAgICAgICAsIG1fY29sdW1uSGVpZ2h0KDApCisgICAgICAgICwgbV9taW5pbXVt
Q29sdW1uSGVpZ2h0KDApCiAgICAgICAgIHsgfQogICAgIAogICAgIGludCBkZXNpcmVkQ29sdW1u
V2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2Rlc2lyZWRDb2x1bW5XaWR0aDsgfQpAQCAtNDQsMTkg
KzQ3LDI4IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBkZXNpcmVkQ29sdW1uQ291bnQoKSBjb25z
dCB7IHJldHVybiBtX2Rlc2lyZWRDb2x1bW5Db3VudDsgfQogICAgIHZvaWQgc2V0RGVzaXJlZENv
bHVtbkNvdW50KHVuc2lnbmVkIGNvdW50KSB7IG1fZGVzaXJlZENvbHVtbkNvdW50ID0gY291bnQ7
IH0KIAotICAgIC8vIEVuY2Fwc3VsYXRlZCBmb3IgdGhlIGZ1dHVyZSB3aGVyZSB3ZSBjYW4gYXZv
aWQgc3RvcmluZyB0aGUgcmVjdHMgYW5kIGp1c3QgY29tcHV0ZSB0aGVtIGR5bmFtaWNhbGx5Lgot
ICAgIHNpemVfdCBjb2x1bW5Db3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fY29sdW1uUmVjdHMuc2l6
ZSgpOyB9Ci0gICAgY29uc3QgSW50UmVjdCYgY29sdW1uUmVjdEF0KHNpemVfdCBpKSBjb25zdCB7
IHJldHVybiBtX2NvbHVtblJlY3RzW2ldOyB9CisgICAgdW5zaWduZWQgY29sdW1uQ291bnQoKSBj
b25zdCB7IHJldHVybiBtX2NvbHVtbkNvdW50OyB9CisgICAgaW50IGNvbHVtbkhlaWdodCgpIGNv
bnN0IHsgcmV0dXJuIG1fY29sdW1uSGVpZ2h0OyB9CiAKLSAgICB2b2lkIGNsZWFyQ29sdW1ucygp
IHsgbV9jb2x1bW5SZWN0cy5jbGVhcigpOyB9CisgICAgLy8gU2V0IG91ciBjb3VudCBhbmQgaGVp
Z2h0LiAgVGhpcyBpcyBlbm91Z2ggaW5mbyBmb3IgYSBSZW5kZXJCbG9jayB0byBjb21wdXRlIHBh
Z2UgcmVjdHMKKyAgICAvLyBkeW5hbWljYWxseS4KKyAgICB2b2lkIHNldENvbHVtbkNvdW50QW5k
SGVpZ2h0KGludCBjLCBpbnQgaCkKKyAgICB7IAorICAgICAgICBtX2NvbHVtbkNvdW50ID0gYzsK
KyAgICAgICAgbV9jb2x1bW5IZWlnaHQgPSBoOworICAgIH0KKyAgICB2b2lkIHNldENvbHVtbkhl
aWdodChpbnQgaCkgeyBtX2NvbHVtbkhlaWdodCA9IGg7IH0KKworICAgIHZvaWQgdXBkYXRlTWlu
aW11bUNvbHVtbkhlaWdodChpbnQgaCkgeyBtX21pbmltdW1Db2x1bW5IZWlnaHQgPSBtYXgoaCwg
bV9taW5pbXVtQ29sdW1uSGVpZ2h0KTsgfQorICAgIGludCBtaW5pbXVtQ29sdW1uSGVpZ2h0KCkg
Y29uc3QgeyByZXR1cm4gbV9taW5pbXVtQ29sdW1uSGVpZ2h0OyB9CiAKLSAgICAvLyBGSVhNRTog
V2lsbCBnbyBhd2F5IG9uY2Ugd2UgZG9uJ3QgdXNlIHRoZSBWZWN0b3IuCi0gICAgdm9pZCBhZGRD
b2x1bW5SZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpIHsgbV9jb2x1bW5SZWN0cy5hcHBlbmQocmVj
dCk7IH0KLSAgICAKIHByaXZhdGU6CiAgICAgaW50IG1fZGVzaXJlZENvbHVtbldpZHRoOwogICAg
IHVuc2lnbmVkIG1fZGVzaXJlZENvbHVtbkNvdW50OwotICAgIFZlY3RvcjxJbnRSZWN0PiBtX2Nv
bHVtblJlY3RzOworICAgIAorICAgIHVuc2lnbmVkIG1fY29sdW1uQ291bnQ7CisgICAgaW50IG1f
Y29sdW1uSGVpZ2h0OworICAgIGludCBtX21pbmltdW1Db2x1bW5IZWlnaHQ7CiB9OwogCiB9Cklu
ZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvTGF5b3V0U3RhdGUuY3BwCShyZXZpc2lvbiA2Njg4NikKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsOCArMzMs
OSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUxheW91dFN0YXRlOjpMYXlvdXRTdGF0ZShM
YXlvdXRTdGF0ZSogcHJldiwgUmVuZGVyQm94KiByZW5kZXJlciwgY29uc3QgSW50U2l6ZSYgb2Zm
c2V0KQotICAgIDogbV9uZXh0KHByZXYpCitMYXlvdXRTdGF0ZTo6TGF5b3V0U3RhdGUoTGF5b3V0
U3RhdGUqIHByZXYsIFJlbmRlckJveCogcmVuZGVyZXIsIGNvbnN0IEludFNpemUmIG9mZnNldCwg
aW50IHBhZ2VIZWlnaHQsIENvbHVtbkluZm8qIGNvbEluZm8pCisgICAgOiBtX2NvbHVtbkluZm8o
Y29sSW5mbykKKyAgICAsIG1fbmV4dChwcmV2KQogI2lmbmRlZiBOREVCVUcKICAgICAsIG1fcmVu
ZGVyZXIocmVuZGVyZXIpCiAjZW5kaWYKQEAgLTQ1LDQzICs0Niw2NyBAQCBMYXlvdXRTdGF0ZTo6
TGF5b3V0U3RhdGUoTGF5b3V0U3RhdGUqIHByCiAgICAgaWYgKGZpeGVkKSB7CiAgICAgICAgIC8v
IEZJWE1FOiBUaGlzIGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgd2l0aCB0cmFuc2Zvcm1zLgogICAg
ICAgICBGbG9hdFBvaW50IGZpeGVkT2Zmc2V0ID0gcmVuZGVyZXItPnZpZXcoKS0+bG9jYWxUb0Fi
c29sdXRlKEZsb2F0UG9pbnQoKSwgdHJ1ZSk7Ci0gICAgICAgIG1fb2Zmc2V0ID0gSW50U2l6ZShm
aXhlZE9mZnNldC54KCksIGZpeGVkT2Zmc2V0LnkoKSkgKyBvZmZzZXQ7CisgICAgICAgIG1fcGFp
bnRPZmZzZXQgPSBJbnRTaXplKGZpeGVkT2Zmc2V0LngoKSwgZml4ZWRPZmZzZXQueSgpKSArIG9m
ZnNldDsKICAgICB9IGVsc2UKLSAgICAgICAgbV9vZmZzZXQgPSBwcmV2LT5tX29mZnNldCArIG9m
ZnNldDsKKyAgICAgICAgbV9wYWludE9mZnNldCA9IHByZXYtPm1fcGFpbnRPZmZzZXQgKyBvZmZz
ZXQ7CiAKLSAgICBpZiAocmVuZGVyZXItPmlzUmVsUG9zaXRpb25lZCgpKSB7Ci0gICAgICAgIGlm
IChyZW5kZXJlci0+aGFzTGF5ZXIoKSkKLSAgICAgICAgICAgIG1fb2Zmc2V0ICs9IHJlbmRlcmVy
LT5sYXllcigpLT5yZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0KCk7Ci0gICAgfSBlbHNlIGlmIChyZW5k
ZXJlci0+aXNQb3NpdGlvbmVkKCkgJiYgIWZpeGVkKSB7CisgICAgaWYgKHJlbmRlcmVyLT5pc1Bv
c2l0aW9uZWQoKSAmJiAhZml4ZWQpIHsKICAgICAgICAgaWYgKFJlbmRlck9iamVjdCogY29udGFp
bmVyID0gcmVuZGVyZXItPmNvbnRhaW5lcigpKSB7CiAgICAgICAgICAgICBpZiAoY29udGFpbmVy
LT5pc1JlbFBvc2l0aW9uZWQoKSAmJiBjb250YWluZXItPmlzUmVuZGVySW5saW5lKCkpCi0gICAg
ICAgICAgICAgICAgbV9vZmZzZXQgKz0gdG9SZW5kZXJJbmxpbmUoY29udGFpbmVyKS0+cmVsYXRp
dmVQb3NpdGlvbmVkSW5saW5lT2Zmc2V0KHJlbmRlcmVyKTsKKyAgICAgICAgICAgICAgICBtX3Bh
aW50T2Zmc2V0ICs9IHRvUmVuZGVySW5saW5lKGNvbnRhaW5lciktPnJlbGF0aXZlUG9zaXRpb25l
ZElubGluZU9mZnNldChyZW5kZXJlcik7CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBtX2xheW91
dE9mZnNldCA9IG1fcGFpbnRPZmZzZXQ7CisKKyAgICBpZiAocmVuZGVyZXItPmlzUmVsUG9zaXRp
b25lZCgpICYmIHJlbmRlcmVyLT5oYXNMYXllcigpKQorICAgICAgICBtX3BhaW50T2Zmc2V0ICs9
IHJlbmRlcmVyLT5sYXllcigpLT5yZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0KCk7CisKICAgICBtX2Ns
aXBwZWQgPSAhZml4ZWQgJiYgcHJldi0+bV9jbGlwcGVkOwogICAgIGlmIChtX2NsaXBwZWQpCiAg
ICAgICAgIG1fY2xpcFJlY3QgPSBwcmV2LT5tX2NsaXBSZWN0OwogCiAgICAgaWYgKHJlbmRlcmVy
LT5oYXNPdmVyZmxvd0NsaXAoKSkgewogICAgICAgICBSZW5kZXJMYXllciogbGF5ZXIgPSByZW5k
ZXJlci0+bGF5ZXIoKTsKLSAgICAgICAgSW50UmVjdCBjbGlwUmVjdCh0b1BvaW50KG1fb2Zmc2V0
KSArIHJlbmRlcmVyLT52aWV3KCktPmxheW91dERlbHRhKCksIGxheWVyLT5zaXplKCkpOworICAg
ICAgICBJbnRSZWN0IGNsaXBSZWN0KHRvUG9pbnQobV9wYWludE9mZnNldCkgKyByZW5kZXJlci0+
dmlldygpLT5sYXlvdXREZWx0YSgpLCBsYXllci0+c2l6ZSgpKTsKICAgICAgICAgaWYgKG1fY2xp
cHBlZCkKICAgICAgICAgICAgIG1fY2xpcFJlY3QuaW50ZXJzZWN0KGNsaXBSZWN0KTsKICAgICAg
ICAgZWxzZSB7CiAgICAgICAgICAgICBtX2NsaXBSZWN0ID0gY2xpcFJlY3Q7CiAgICAgICAgICAg
ICBtX2NsaXBwZWQgPSB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIG1fb2Zmc2V0IC09IGxheWVy
LT5zY3JvbGxlZENvbnRlbnRPZmZzZXQoKTsKKworICAgICAgICBtX3BhaW50T2Zmc2V0IC09IGxh
eWVyLT5zY3JvbGxlZENvbnRlbnRPZmZzZXQoKTsKICAgICB9CiAKLSAgICBtX2xheW91dERlbHRh
ID0gbV9uZXh0LT5tX2xheW91dERlbHRhOworICAgIC8vIERpc2FibGUgcGFnaW5hdGlvbiBmb3Ig
b2JqZWN0cyB3ZSBkb24ndCBzdXBwb3J0LiAgRm9yIG5vdyB0aGlzIGluY2x1ZGVzIG92ZXJmbG93
OnNjcm9sbC9hdXRvIGFuZCBpbmxpbmUgYmxvY2tzLgorICAgIGlmIChyZW5kZXJlci0+aXNSZXBs
YWNlZCgpIHx8IHJlbmRlcmVyLT5zY3JvbGxzT3ZlcmZsb3coKSkKKyAgICAgICAgbV9wYWdlSGVp
Z2h0ID0gMDsKKworICAgIC8vIElmIHdlIGVzdGFibGlzaCBhIG5ldyBwYWdlIGhlaWdodCwgdGhl
biBjYWNoZSB0aGUgb2Zmc2V0IHRvIHRoZSB0b3Agb2YgdGhlIGZpcnN0IHBhZ2UuCisgICAgLy8g
V2UgY2FuIGNvbXBhcmUgdGhpcyBsYXRlciBvbiB0byBmaWd1cmUgb3V0IHdoYXQgcGFydCBvZiB0
aGUgcGFnZSB3ZSdyZSBhY3R1YWxseSBvbiwKKyAgICBpZiAocGFnZUhlaWdodCkgeworICAgICAg
ICBtX3BhZ2VIZWlnaHQgPSBwYWdlSGVpZ2h0OworICAgICAgICBtX3BhZ2VPZmZzZXQgPSBJbnRT
aXplKG1fcGFpbnRPZmZzZXQud2lkdGgoKSArIHJlbmRlcmVyLT5ib3JkZXJMZWZ0KCkgKyByZW5k
ZXJlci0+cGFkZGluZ0xlZnQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3Bh
aW50T2Zmc2V0LmhlaWdodCgpICsgcmVuZGVyZXItPmJvcmRlclRvcCgpICsgcmVuZGVyZXItPnBh
ZGRpbmdUb3AoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gSWYgd2UgZG9uJ3QgZXN0YWJs
aXNoIGEgbmV3IHBhZ2UgaGVpZ2h0LCB0aGVuIHByb3BhZ2F0ZSB0aGUgb2xkIHBhZ2UgaGVpZ2h0
IGFuZCBvZmZzZXQgZG93bi4KKyAgICAgICAgbV9wYWdlSGVpZ2h0ID0gbV9uZXh0LT5tX3BhZ2VI
ZWlnaHQ7CisgICAgICAgIG1fcGFnZU9mZnNldCA9IG1fbmV4dC0+bV9wYWdlT2Zmc2V0OworICAg
IH0KKyAgICAKKyAgICBpZiAoIW1fY29sdW1uSW5mbykKKyAgICAgICAgbV9jb2x1bW5JbmZvID0g
bV9uZXh0LT5tX2NvbHVtbkluZm87CiAKKyAgICBtX2xheW91dERlbHRhID0gbV9uZXh0LT5tX2xh
eW91dERlbHRhOworICAgIAogICAgIC8vIEZJWE1FOiA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTM0NDM+IEFwcGx5IGNvbnRyb2wgY2xpcCBpZiBwcmVzZW50LgogfQog
CiBMYXlvdXRTdGF0ZTo6TGF5b3V0U3RhdGUoUmVuZGVyT2JqZWN0KiByb290KQogICAgIDogbV9j
bGlwcGVkKGZhbHNlKQorICAgICwgbV9wYWdlSGVpZ2h0KDApCisgICAgLCBtX2NvbHVtbkluZm8o
MCkKICAgICAsIG1fbmV4dCgwKQogI2lmbmRlZiBOREVCVUcKICAgICAsIG1fcmVuZGVyZXIocm9v
dCkKQEAgLTg5LDEzICsxMTQsMTMgQEAgTGF5b3V0U3RhdGU6OkxheW91dFN0YXRlKFJlbmRlck9i
amVjdCogcgogewogICAgIFJlbmRlck9iamVjdCogY29udGFpbmVyID0gcm9vdC0+Y29udGFpbmVy
KCk7CiAgICAgRmxvYXRQb2ludCBhYnNDb250ZW50UG9pbnQgPSBjb250YWluZXItPmxvY2FsVG9B
YnNvbHV0ZShGbG9hdFBvaW50KCksIGZhbHNlLCB0cnVlKTsKLSAgICBtX29mZnNldCA9IEludFNp
emUoYWJzQ29udGVudFBvaW50LngoKSwgYWJzQ29udGVudFBvaW50LnkoKSk7CisgICAgbV9wYWlu
dE9mZnNldCA9IEludFNpemUoYWJzQ29udGVudFBvaW50LngoKSwgYWJzQ29udGVudFBvaW50Lnko
KSk7CiAKICAgICBpZiAoY29udGFpbmVyLT5oYXNPdmVyZmxvd0NsaXAoKSkgewogICAgICAgICBS
ZW5kZXJMYXllciogbGF5ZXIgPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KGNvbnRhaW5lciktPmxh
eWVyKCk7CiAgICAgICAgIG1fY2xpcHBlZCA9IHRydWU7Ci0gICAgICAgIG1fY2xpcFJlY3QgPSBJ
bnRSZWN0KHRvUG9pbnQobV9vZmZzZXQpLCBsYXllci0+c2l6ZSgpKTsKLSAgICAgICAgbV9vZmZz
ZXQgLT0gbGF5ZXItPnNjcm9sbGVkQ29udGVudE9mZnNldCgpOworICAgICAgICBtX2NsaXBSZWN0
ID0gSW50UmVjdCh0b1BvaW50KG1fcGFpbnRPZmZzZXQpLCBsYXllci0+c2l6ZSgpKTsKKyAgICAg
ICAgbV9wYWludE9mZnNldCAtPSBsYXllci0+c2Nyb2xsZWRDb250ZW50T2Zmc2V0KCk7CiAgICAg
fQogfQogCkBAIC0xMjYsNCArMTUxLDE5IEBAIHZvaWQgTGF5b3V0U3RhdGU6Om9wZXJhdG9yIGRl
bGV0ZSh2b2lkKiAKICAgICAqKHNpemVfdCopcHRyID0gc3o7CiB9CiAKK3ZvaWQgTGF5b3V0U3Rh
dGU6OmNsZWFyUGFnaW5hdGlvbkluZm9ybWF0aW9uKCkKK3sKKyAgICBtX3BhZ2VIZWlnaHQgPSBt
X25leHQtPm1fcGFnZUhlaWdodDsKKyAgICBtX3BhZ2VPZmZzZXQgPSBtX25leHQtPm1fcGFnZU9m
ZnNldDsKKyAgICBtX2NvbHVtbkluZm8gPSBtX25leHQtPm1fY29sdW1uSW5mbzsKK30KKworaW50
IExheW91dFN0YXRlOjpwYWdlWShpbnQgY2hpbGRZKSBjb25zdAoreworICAgIEFTU0VSVChtX3Bh
Z2VIZWlnaHQpOworICAgIGludCBsYXlvdXRZID0gbV9sYXlvdXRPZmZzZXQuaGVpZ2h0KCkgKyBj
aGlsZFk7CisgICAgaW50IHBhZ2VZID0gbV9wYWdlT2Zmc2V0LmhlaWdodCgpOworICAgIHJldHVy
biBsYXlvdXRZIC0gcGFnZVk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdl
YkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5k
ZXJpbmcvTGF5b3V0U3RhdGUuaAkocmV2aXNpb24gNjY4ODYpCisrKyBXZWJDb3JlL3JlbmRlcmlu
Zy9MYXlvdXRTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ29sdW1uSW5mbzsKIGNsYXNzIFJlbmRlckFyZW5hOwog
Y2xhc3MgUmVuZGVyQm94OwogY2xhc3MgUmVuZGVyT2JqZWN0OwpAQCAtNDAsNiArNDEsOCBAQCBj
bGFzcyBMYXlvdXRTdGF0ZSA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiBwdWJsaWM6CiAgICAgTGF5
b3V0U3RhdGUoKQogICAgICAgICA6IG1fY2xpcHBlZChmYWxzZSkKKyAgICAgICAgLCBtX3BhZ2VI
ZWlnaHQoMCkKKyAgICAgICAgLCBtX2NvbHVtbkluZm8oMCkKICAgICAgICAgLCBtX25leHQoMCkK
ICNpZm5kZWYgTkRFQlVHCiAgICAgICAgICwgbV9yZW5kZXJlcigwKQpAQCAtNDcsNyArNTAsNyBA
QCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIExheW91dFN0YXRlKExheW91dFN0YXRlKiwg
UmVuZGVyQm94KiwgY29uc3QgSW50U2l6ZSYgb2Zmc2V0KTsKKyAgICBMYXlvdXRTdGF0ZShMYXlv
dXRTdGF0ZSosIFJlbmRlckJveCosIGNvbnN0IEludFNpemUmIG9mZnNldCwgaW50IHBhZ2VIZWln
aHQsIENvbHVtbkluZm8qKTsKICAgICBMYXlvdXRTdGF0ZShSZW5kZXJPYmplY3QqKTsKIAogICAg
IHZvaWQgZGVzdHJveShSZW5kZXJBcmVuYSopOwpAQCAtNTgsNiArNjEsMTEgQEAgcHVibGljOgog
ICAgIC8vIE92ZXJyaWRkZW4gdG8gcHJldmVudCB0aGUgbm9ybWFsIGRlbGV0ZSBmcm9tIGJlaW5n
IGNhbGxlZC4KICAgICB2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkKiwgc2l6ZV90KTsKIAorICAg
IHZvaWQgY2xlYXJQYWdpbmF0aW9uSW5mb3JtYXRpb24oKTsKKyAgICBib29sIHBhZ2luYXRpbmdD
b2x1bW5zKCkgY29uc3QgeyByZXR1cm4gbV9jb2x1bW5JbmZvOyB9CisgICAgYm9vbCBwYWdpbmF0
ZWQoKSBjb25zdCB7IHJldHVybiBtX3BhZ2VIZWlnaHQgfHwgbV9jb2x1bW5JbmZvOyB9CisgICAg
aW50IHBhZ2VZKGludCBjaGlsZFkpIGNvbnN0OworCiBwcml2YXRlOgogICAgIC8vIFRoZSBub3Jt
YWwgb3BlcmF0b3IgbmV3IGlzIGRpc2FsbG93ZWQuCiAgICAgdm9pZCogb3BlcmF0b3IgbmV3KHNp
emVfdCkgdGhyb3coKTsKQEAgLTY1LDEwICs3MywxNiBAQCBwcml2YXRlOgogcHVibGljOgogICAg
IGJvb2wgbV9jbGlwcGVkOwogICAgIEludFJlY3QgbV9jbGlwUmVjdDsKLSAgICBJbnRTaXplIG1f
b2Zmc2V0OyAgICAgICAvLyB4L3kgb2Zmc2V0IGZyb20gY29udGFpbmVyLgorICAgIEludFNpemUg
bV9wYWludE9mZnNldDsgICAgICAgLy8geC95IG9mZnNldCBmcm9tIGNvbnRhaW5lci4gIEluY2x1
ZGVzIHJlbGF0aXZlIHBvc2l0aW9uaW5nIGFuZCBzY3JvbGwgb2Zmc2V0cy4KKyAgICBJbnRTaXpl
IG1fbGF5b3V0T2Zmc2V0OyAgICAgIC8vIHgveSBvZmZzZXQgZnJvbSBjb250YWluZXIuICBEb2Vz
IG5vdCBpbmNsdWRlIHJlbGF0aXZlIHBvc2l0aW9uaW5nIG9yIHNjcm9sbCBvZmZzZXRzLgogICAg
IEludFNpemUgbV9sYXlvdXREZWx0YTsgIC8vIFRyYW5zaWVudCBvZmZzZXQgZnJvbSB0aGUgZmlu
YWwgcG9zaXRpb24gb2YgdGhlIG9iamVjdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IHVzZWQgdG8gZW5zdXJlIHRoYXQgcmVwYWludHMgaGFwcGVuIGluIHRoZSBjb3JyZWN0IHBsYWNl
LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSB0b3RhbCBkZWx0YSBh
Y2N1bXVsYXRlZCBmcm9tIHRoZSByb290LgorCisgICAgaW50IG1fcGFnZUhlaWdodDsgICAgICAg
ICAgICAvLyBUaGUgY3VycmVudCBwYWdlIGhlaWdodCBmb3IgdGhlIHBhZ2luYXRpb24gbW9kZWwg
dGhhdCBlbmNsb3NlcyB1cy4KKyAgICBJbnRTaXplIG1fcGFnZU9mZnNldDsgICAgICAgIC8vIFRo
ZSBvZmZzZXQgb2YgdGhlIHN0YXJ0IG9mIHRoZSBmaXJzdCBwYWdlIGluIHRoZSBuZWFyZXN0IGVu
Y2xvc2luZyBwYWdpbmF0aW9uIG1vZGVsLgorICAgIENvbHVtbkluZm8qIG1fY29sdW1uSW5mbzsg
ICAgLy8gSWYgdGhlIGVuY2xvc2luZyBwYWdpbmF0aW9uIG1vZGVsIGlzIGEgY29sdW1uIG1vZGVs
LCB0aGVuIHRoaXMgd2lsbCBzdG9yZSBjb2x1bW4gaW5mb3JtYXRpb24gZm9yIGVhc3kgcmV0cmll
dmFsL21hbmlwdWxhdGlvbi4KKwogICAgIExheW91dFN0YXRlKiBtX25leHQ7CiAjaWZuZGVmIE5E
RUJVRwogICAgIFJlbmRlck9iamVjdCogbV9yZW5kZXJlcjsKSW5kZXg6IFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9jay5jcHAJKHJldmlzaW9uIDY2OTAzKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsNyArMTE0LDcgQEAgUmVuZGVyQmxvY2s6
OlJlbmRlckJsb2NrKE5vZGUqIG5vZGUpCiAgICAgICAsIG1fZmxvYXRpbmdPYmplY3RzKDApCiAg
ICAgICAsIG1fcG9zaXRpb25lZE9iamVjdHMoMCkKICAgICAgICwgbV9jb250aW51YXRpb24oMCkK
LSAgICAgICwgbV9tYXhNYXJnaW4oMCkKKyAgICAgICwgbV9yYXJlRGF0YSgwKQogICAgICAgLCBt
X2xpbmVIZWlnaHQoLTEpCiB7CiAgICAgc2V0Q2hpbGRyZW5JbmxpbmUodHJ1ZSk7CkBAIC0xMjQs
NyArMTI0LDcgQEAgUmVuZGVyQmxvY2s6On5SZW5kZXJCbG9jaygpCiB7CiAgICAgZGVsZXRlIG1f
ZmxvYXRpbmdPYmplY3RzOwogICAgIGRlbGV0ZSBtX3Bvc2l0aW9uZWRPYmplY3RzOwotICAgIGRl
bGV0ZSBtX21heE1hcmdpbjsKKyAgICBkZWxldGUgbV9yYXJlRGF0YTsKICAgICAKICAgICBpZiAo
aGFzQ29sdW1ucygpKQogICAgICAgICBkZWxldGUgZ0NvbHVtbkluZm9NYXAtPnRha2UodGhpcyk7
CkBAIC0xMTEyLDcgKzExMTIsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXQoKQogICAgICAg
ICBjbGVhckxheW91dE92ZXJmbG93KCk7CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJs
b2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbikKK3ZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2Nr
KGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgaW50IHBhZ2VIZWlnaHQpCiB7CiAgICAgQVNTRVJUKG5l
ZWRzTGF5b3V0KCkpOwogCkBAIC0xMTIyLDkgKzExMjIsNiBAQCB2b2lkIFJlbmRlckJsb2NrOjps
YXlvdXRCbG9jayhib29sIHJlbGF5CiAgICAgaWYgKCFyZWxheW91dENoaWxkcmVuICYmIGxheW91
dE9ubHlQb3NpdGlvbmVkT2JqZWN0cygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBMYXlvdXRS
ZXBhaW50ZXIgcmVwYWludGVyKCp0aGlzLCBtX2V2ZXJIYWRMYXlvdXQgJiYgY2hlY2tGb3JSZXBh
aW50RHVyaW5nTGF5b3V0KCkpOwotICAgIExheW91dFN0YXRlTWFpbnRhaW5lciBzdGF0ZVB1c2hl
cih2aWV3KCksIHRoaXMsIEludFNpemUoeCgpLCB5KCkpLCBoYXNDb2x1bW5zKCkgfHwgaGFzVHJh
bnNmb3JtKCkgfHwgaGFzUmVmbGVjdGlvbigpKTsKLQogICAgIGludCBvbGRXaWR0aCA9IHdpZHRo
KCk7CiAgICAgaW50IG9sZENvbHVtbldpZHRoID0gZGVzaXJlZENvbHVtbldpZHRoKCk7CiAKQEAg
LTExNDAsNiArMTEzNywyOCBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayhib29sIHJl
bGF5CiAKICAgICBpbnQgcHJldmlvdXNIZWlnaHQgPSBoZWlnaHQoKTsKICAgICBzZXRIZWlnaHQo
MCk7CisgICAgYm9vbCBoYXNTcGVjaWZpZWRQYWdlSGVpZ2h0ID0gZmFsc2U7CisgICAgQ29sdW1u
SW5mbyogY29sSW5mbyA9IGNvbHVtbkluZm8oKTsKKyAgICBpZiAoaGFzQ29sdW1ucygpKSB7Cisg
ICAgICAgIGlmICghcGFnZUhlaWdodCkgeworICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBnbyBh
aGVhZCBhbmQgc2V0IG91ciBleHBsaWNpdCBwYWdlIGhlaWdodCBpZiBvbmUgZXhpc3RzLCBzbyB0
aGF0IHdlIGNhbgorICAgICAgICAgICAgLy8gYXZvaWQgZG9pbmcgdHdvIGxheW91dCBwYXNzZXMu
CisgICAgICAgICAgICBjYWxjSGVpZ2h0KCk7CisgICAgICAgICAgICBpbnQgY29sdW1uSGVpZ2h0
ID0gY29udGVudEhlaWdodCgpOworICAgICAgICAgICAgaWYgKGNvbHVtbkhlaWdodCA+IDApIHsK
KyAgICAgICAgICAgICAgICBwYWdlSGVpZ2h0ID0gY29sdW1uSGVpZ2h0OworICAgICAgICAgICAg
ICAgIGhhc1NwZWNpZmllZFBhZ2VIZWlnaHQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgc2V0SGVpZ2h0KDApOworICAgICAgICB9CisgICAgICAgIGlmIChjb2xJbmZvLT5jb2x1
bW5IZWlnaHQoKSAhPSBwYWdlSGVpZ2h0ICYmIG1fZXZlckhhZExheW91dCkgeworICAgICAgICAg
ICAgY29sSW5mby0+c2V0Q29sdW1uSGVpZ2h0KHBhZ2VIZWlnaHQpOworICAgICAgICAgICAgbWFy
a0Rlc2NlbmRhbnRCbG9ja3NBbmRMaW5lc0ZvckxheW91dCgpOyAvLyBXZSBuZWVkIHRvIGRpcnR5
IGFsbCBkZXNjZW5kYW50IGJsb2NrcyBhbmQgbGluZXMsIHNpbmNlIHRoZSBjb2x1bW4gaGVpZ2h0
IGlzIGRpZmZlcmVudCBub3cuCisgICAgICAgIH0KKyAgICB9CisKKyAgICBMYXlvdXRSZXBhaW50
ZXIgcmVwYWludGVyKCp0aGlzLCBtX2V2ZXJIYWRMYXlvdXQgJiYgY2hlY2tGb3JSZXBhaW50RHVy
aW5nTGF5b3V0KCkpOworICAgIExheW91dFN0YXRlTWFpbnRhaW5lciBzdGF0ZVB1c2hlcih2aWV3
KCksIHRoaXMsIEludFNpemUoeCgpLCB5KCkpLCBoYXNDb2x1bW5zKCkgfHwgaGFzVHJhbnNmb3Jt
KCkgfHwgaGFzUmVmbGVjdGlvbigpLCBwYWdlSGVpZ2h0LCBjb2xJbmZvKTsKIAogICAgIC8vIFdl
IHVzZSBmb3VyIHZhbHVlcywgbWF4VG9wUG9zLCBtYXhUb3BOZWcsIG1heEJvdHRvbVBvcywgYW5k
IG1heEJvdHRvbU5lZywgdG8gdHJhY2sKICAgICAvLyBvdXIgY3VycmVudCBtYXhpbWFsIHBvc2l0
aXZlIGFuZCBuZWdhdGl2ZSBtYXJnaW5zLiAgVGhlc2UgdmFsdWVzIGFyZSB1c2VkIHdoZW4gd2UK
QEAgLTExODksMTAgKzEyMDgsOSBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayhib29s
IHJlbGF5CiAgICAgaWYgKGZsb2F0Qm90dG9tKCkgPiAoaGVpZ2h0KCkgLSB0b0FkZCkgJiYgZXhw
YW5kc1RvRW5jbG9zZU92ZXJoYW5naW5nRmxvYXRzKCkpCiAgICAgICAgIHNldEhlaWdodChmbG9h
dEJvdHRvbSgpICsgdG9BZGQpOwogICAgIAotICAgIC8vIE5vdyBsYXkgb3V0IG91ciBjb2x1bW5z
IHdpdGhpbiB0aGlzIGludHJpbnNpYyBoZWlnaHQsIHNpbmNlIHRoZXkgY2FuIHNsaWdodGx5IGFm
ZmVjdCB0aGUgaW50cmluc2ljIGhlaWdodCBhcwotICAgIC8vIHdlIGFkanVzdCBmb3IgY2xlYW4g
Y29sdW1uIGJyZWFrcy4KLSAgICBpbnQgc2luZ2xlQ29sdW1uQm90dG9tID0gbGF5b3V0Q29sdW1u
cygpOwotCisgICAgaWYgKGxheW91dENvbHVtbnMoaGFzU3BlY2lmaWVkUGFnZUhlaWdodCwgcGFn
ZUhlaWdodCwgc3RhdGVQdXNoZXIpKQorICAgICAgICByZXR1cm47CisgCiAgICAgLy8gQ2FsY3Vs
YXRlIG91ciBuZXcgaGVpZ2h0LgogICAgIGludCBvbGRIZWlnaHQgPSBoZWlnaHQoKTsKICAgICBj
YWxjSGVpZ2h0KCk7CkBAIC0xMjA3LDIxICsxMjI1LDE4IEBAIHZvaWQgUmVuZGVyQmxvY2s6Omxh
eW91dEJsb2NrKGJvb2wgcmVsYXkKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIFdlIGhhdmUgdG8gcmViYWxhbmNlIGNvbHVt
bnMgdG8gdGhlIG5ldyBoZWlnaHQuCi0gICAgICAgIGxheW91dENvbHVtbnMoc2luZ2xlQ29sdW1u
Qm90dG9tKTsKICAgICB9CiAKICAgICBpZiAocHJldmlvdXNIZWlnaHQgIT0gaGVpZ2h0KCkpCiAg
ICAgICAgIHJlbGF5b3V0Q2hpbGRyZW4gPSB0cnVlOwogCi0gICAgLy8gVGhpcyBjaGVjayBpcyBk
ZXNpZ25lZCB0byBjYXRjaCBhbnlvbmUKLSAgICAvLyB3aG8gd2Fzbid0IGdvaW5nIHRvIHByb3Bh
Z2F0ZSBmbG9hdCBpbmZvcm1hdGlvbiB1cCB0byB0aGUgcGFyZW50IGFuZCB5ZXQgY291bGQgcG90
ZW50aWFsbHkgYmUgcGFpbnRlZCBieSBpdHMgYW5jZXN0b3IuCi0gICAgaWYgKGlzUm9vdCgpIHx8
IGV4cGFuZHNUb0VuY2xvc2VPdmVyaGFuZ2luZ0Zsb2F0cygpKQotICAgICAgICBhZGRPdmVyZmxv
d0Zyb21GbG9hdHMoKTsKLQogICAgIC8vIEFkZCBvdmVyZmxvdyBmcm9tIGNoaWxkcmVuICh1bmxl
c3Mgd2UncmUgbXVsdGktY29sdW1uLCBzaW5jZSBpbiB0aGF0IGNhc2UgYWxsIG91ciBjaGlsZCBv
dmVyZmxvdyBpcyBjbGlwcGVkIGFueXdheSkuCiAgICAgaWYgKCFoYXNDb2x1bW5zKCkpIHsKKyAg
ICAgICAgLy8gVGhpcyBjaGVjayBpcyBkZXNpZ25lZCB0byBjYXRjaCBhbnlvbmUKKyAgICAgICAg
Ly8gd2hvIHdhc24ndCBnb2luZyB0byBwcm9wYWdhdGUgZmxvYXQgaW5mb3JtYXRpb24gdXAgdG8g
dGhlIHBhcmVudCBhbmQgeWV0IGNvdWxkIHBvdGVudGlhbGx5IGJlIHBhaW50ZWQgYnkgaXRzIGFu
Y2VzdG9yLgorICAgICAgICBpZiAoaXNSb290KCkgfHwgZXhwYW5kc1RvRW5jbG9zZU92ZXJoYW5n
aW5nRmxvYXRzKCkpCisgICAgICAgICAgICBhZGRPdmVyZmxvd0Zyb21GbG9hdHMoKTsKKwogICAg
ICAgICBpZiAoY2hpbGRyZW5JbmxpbmUoKSkKICAgICAgICAgICAgIGFkZE92ZXJmbG93RnJvbUlu
bGluZUNoaWxkcmVuKCk7CiAgICAgICAgIGVsc2UKQEAgLTEyMzcsNiArMTI1Miw5IEBAIHZvaWQg
UmVuZGVyQmxvY2s6OmxheW91dEJsb2NrKGJvb2wgcmVsYXkKICAgICAKICAgICBzdGF0ZVB1c2hl
ci5wb3AoKTsKIAorICAgIGlmICh2aWV3KCktPmxheW91dFN0YXRlKCktPm1fcGFnZUhlaWdodCkK
KyAgICAgICAgc2V0UGFnZVkodmlldygpLT5sYXlvdXRTdGF0ZSgpLT5wYWdlWSh5KCkpKTsKKwog
ICAgIC8vIFVwZGF0ZSBvdXIgc2Nyb2xsIGluZm9ybWF0aW9uIGlmIHdlJ3JlIG92ZXJmbG93OmF1
dG8vc2Nyb2xsL2hpZGRlbiBub3cgdGhhdCB3ZSBrbm93IGlmCiAgICAgLy8gd2Ugb3ZlcmZsb3cg
b3Igbm90LgogICAgIHVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgpOwpAQCAtMTQ4NSw3ICsx
NTAzLDggQEAgaW50IFJlbmRlckJsb2NrOjpjb2xsYXBzZU1hcmdpbnMoUmVuZGVyQgogICAgIGlm
IChtYXJnaW5JbmZvLnF1aXJrQ29udGFpbmVyKCkgJiYgbWFyZ2luSW5mby5hdFRvcE9mQmxvY2so
KSAmJiAocG9zVG9wIC0gbmVnVG9wKSkKICAgICAgICAgbWFyZ2luSW5mby5zZXRUb3BRdWlyayh0
b3BRdWlyayk7CiAKLSAgICBpbnQgeXBvcyA9IGhlaWdodCgpOworICAgIGludCBiZWZvcmVDb2xs
YXBzZVkgPSBoZWlnaHQoKTsKKyAgICBpbnQgeXBvcyA9IGJlZm9yZUNvbGxhcHNlWTsKICAgICBp
ZiAoY2hpbGQtPmlzU2VsZkNvbGxhcHNpbmdCbG9jaygpKSB7CiAgICAgICAgIC8vIFRoaXMgY2hp
bGQgaGFzIG5vIGhlaWdodC4gIFdlIG5lZWQgdG8gY29tcHV0ZSBvdXIKICAgICAgICAgLy8gcG9z
aXRpb24gYmVmb3JlIHdlIGNvbGxhcHNlIHRoZSBjaGlsZCdzIG1hcmdpbnMgdG9nZXRoZXIsCkBA
IC0xNTI3LDYgKzE1NDYsMTQgQEAgaW50IFJlbmRlckJsb2NrOjpjb2xsYXBzZU1hcmdpbnMoUmVu
ZGVyQgogICAgICAgICAgICAgbWFyZ2luSW5mby5zZXRCb3R0b21RdWlyayhjaGlsZC0+aXNCb3R0
b21NYXJnaW5RdWlyaygpIHx8IHN0eWxlKCktPm1hcmdpbkJvdHRvbUNvbGxhcHNlKCkgPT0gTURJ
U0NBUkQpOwogICAgIH0KICAgICAKKyAgICAvLyBJZiBtYXJnaW5zIHdvdWxkIHB1bGwgdXMgcGFz
dCB0aGUgdG9wIG9mIHRoZSBuZXh0IHBhZ2UsIHRoZW4gd2UgbmVlZCB0byBwdWxsIGJhY2sgYW5k
IHByZXRlbmQgbGlrZSB0aGUgbWFyZ2lucworICAgIC8vIGNvbGxhcHNlZCBpbnRvIHRoZSBwYWdl
IGVkZ2UuCisgICAgYm9vbCBwYWdpbmF0ZWQgPSB2aWV3KCktPmxheW91dFN0YXRlKCktPnBhZ2lu
YXRlZCgpOworICAgIGlmIChwYWdpbmF0ZWQgJiYgeXBvcyA+IGJlZm9yZUNvbGxhcHNlWSkgewor
ICAgICAgICBpbnQgb2xkWSA9IHlwb3M7CisgICAgICAgIHlwb3MgPSBtaW4oeXBvcywgbmV4dFBh
Z2VUb3AoYmVmb3JlQ29sbGFwc2VZKSk7CisgICAgICAgIHNldEhlaWdodChoZWlnaHQoKSArICh5
cG9zIC0gb2xkWSkpOworICAgIH0KICAgICByZXR1cm4geXBvczsKIH0KIApAQCAtMTU4Niw3ICsx
NjEzLDI0IEBAIGludCBSZW5kZXJCbG9jazo6ZXN0aW1hdGVWZXJ0aWNhbFBvc2l0aW8KICAgICAg
ICAgaW50IGNoaWxkTWFyZ2luVG9wID0gY2hpbGQtPnNlbGZOZWVkc0xheW91dCgpID8gY2hpbGQt
Pm1hcmdpblRvcCgpIDogY2hpbGQtPmNvbGxhcHNlZE1hcmdpblRvcCgpOwogICAgICAgICB5UG9z
RXN0aW1hdGUgKz0gbWF4KG1hcmdpbkluZm8ubWFyZ2luKCksIGNoaWxkTWFyZ2luVG9wKTsKICAg
ICB9CisgICAgCisgICAgYm9vbCBwYWdpbmF0ZWQgPSB2aWV3KCktPmxheW91dFN0YXRlKCktPnBh
Z2luYXRlZCgpOworCisgICAgLy8gQWRqdXN0IHlQb3NFc3RpbWF0ZSBkb3duIHRvIHRoZSBuZXh0
IHBhZ2UgaWYgdGhlIG1hcmdpbnMgYXJlIHNvIGxhcmdlIHRoYXQgd2UgZG9uJ3QgZml0IG9uIHRo
ZSBjdXJyZW50CisgICAgLy8gcGFnZS4KKyAgICBpZiAocGFnaW5hdGVkICYmIHlQb3NFc3RpbWF0
ZSA+IGhlaWdodCgpKQorICAgICAgICB5UG9zRXN0aW1hdGUgPSBtaW4oeVBvc0VzdGltYXRlLCBu
ZXh0UGFnZVRvcChoZWlnaHQoKSkpOworCiAgICAgeVBvc0VzdGltYXRlICs9IGdldENsZWFyRGVs
dGEoY2hpbGQsIHlQb3NFc3RpbWF0ZSk7CisgICAgCisgICAgaWYgKHBhZ2luYXRlZCkgeworICAg
ICAgICAvLyBJZiB0aGUgb2JqZWN0IGhhcyBhIHBhZ2Ugb3IgY29sdW1uIGJyZWFrIHZhbHVlIG9m
ICJiZWZvcmUiLCB0aGVuIHdlIHNob3VsZCBzaGlmdCB0byB0aGUgdG9wIG9mIHRoZSBuZXh0IHBh
Z2UuCisgICAgICAgIHlQb3NFc3RpbWF0ZSA9IGFwcGx5QmVmb3JlQnJlYWsoY2hpbGQsIHlQb3NF
c3RpbWF0ZSk7CisgICAgCisgICAgICAgIC8vIEZvciByZXBsYWNlZCBlbGVtZW50cyBhbmQgc2Ny
b2xsZWQgZWxlbWVudHMsIHdlIHdhbnQgdG8gc2hpZnQgdGhlbSB0byB0aGUgbmV4dCBwYWdlIGlm
IHRoZXkgZG9uJ3QgZml0IG9uIHRoZSBjdXJyZW50IG9uZS4KKyAgICAgICAgeVBvc0VzdGltYXRl
ID0gYWRqdXN0Rm9yVW5zcGxpdHRhYmxlQ2hpbGQoY2hpbGQsIHlQb3NFc3RpbWF0ZSk7CisgICAg
fQorCiAgICAgcmV0dXJuIHlQb3NFc3RpbWF0ZTsKIH0KIApAQCAtMTc3Niw4ICsxODIwLDkgQEAg
dm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2tDaGlsZChSZW5kZQogICAgIHZpZXcoKS0+YWRk
TGF5b3V0RGVsdGEoSW50U2l6ZSgwLCBjaGlsZC0+eSgpIC0geVBvc0VzdGltYXRlKSk7CiAgICAg
Y2hpbGQtPnNldExvY2F0aW9uKGNoaWxkLT54KCksIHlQb3NFc3RpbWF0ZSk7CiAKKyAgICBSZW5k
ZXJCbG9jayogY2hpbGRCbG9ja0Zsb3cgPSBjaGlsZC0+aXNCbG9ja0Zsb3coKSA/IHRvUmVuZGVy
QmxvY2soY2hpbGQpIDogMDsKICAgICBib29sIG1hcmtEZXNjZW5kYW50c1dpdGhGbG9hdHMgPSBm
YWxzZTsKLSAgICBpZiAoeVBvc0VzdGltYXRlICE9IG9sZFJlY3QueSgpICYmICFjaGlsZC0+YXZv
aWRzRmxvYXRzKCkgJiYgY2hpbGQtPmlzQmxvY2tGbG93KCkgJiYgdG9SZW5kZXJCbG9jayhjaGls
ZCktPmNvbnRhaW5zRmxvYXRzKCkpCisgICAgaWYgKHlQb3NFc3RpbWF0ZSAhPSBvbGRSZWN0Lnko
KSAmJiAhY2hpbGQtPmF2b2lkc0Zsb2F0cygpICYmIGNoaWxkQmxvY2tGbG93ICYmIGNoaWxkQmxv
Y2tGbG93LT5jb250YWluc0Zsb2F0cygpKQogICAgICAgICBtYXJrRGVzY2VuZGFudHNXaXRoRmxv
YXRzID0gdHJ1ZTsKICAgICBlbHNlIGlmICghY2hpbGQtPmF2b2lkc0Zsb2F0cygpIHx8IGNoaWxk
LT5zaHJpbmtUb0F2b2lkRmxvYXRzKCkpIHsKICAgICAgICAgLy8gSWYgYW4gZWxlbWVudCBtaWdo
dCBiZSBhZmZlY3RlZCBieSB0aGUgcHJlc2VuY2Ugb2YgZmxvYXRzLCB0aGVuIGFsd2F5cyBtYXJr
IGl0IGZvcgpAQCAtMTc4NywxOCArMTgzMiwyNCBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRC
bG9ja0NoaWxkKFJlbmRlCiAgICAgICAgICAgICBtYXJrRGVzY2VuZGFudHNXaXRoRmxvYXRzID0g
dHJ1ZTsKICAgICB9CiAKLSAgICBpZiAoY2hpbGQtPmlzUmVuZGVyQmxvY2soKSkgeworICAgIGlm
IChjaGlsZEJsb2NrRmxvdykgewogICAgICAgICBpZiAobWFya0Rlc2NlbmRhbnRzV2l0aEZsb2F0
cykKLSAgICAgICAgICAgIHRvUmVuZGVyQmxvY2soY2hpbGQpLT5tYXJrQWxsRGVzY2VuZGFudHNX
aXRoRmxvYXRzRm9yTGF5b3V0KCk7Ci0KKyAgICAgICAgICAgIGNoaWxkQmxvY2tGbG93LT5tYXJr
QWxsRGVzY2VuZGFudHNXaXRoRmxvYXRzRm9yTGF5b3V0KCk7CiAgICAgICAgIHByZXZpb3VzRmxv
YXRCb3R0b20gPSBtYXgocHJldmlvdXNGbG9hdEJvdHRvbSwgb2xkUmVjdC55KCkgKyB0b1JlbmRl
ckJsb2NrKGNoaWxkKS0+ZmxvYXRCb3R0b20oKSk7CiAgICAgfQogCisgICAgYm9vbCBwYWdpbmF0
ZWQgPSB2aWV3KCktPmxheW91dFN0YXRlKCktPnBhZ2luYXRlZCgpOworICAgIGlmIChwYWdpbmF0
ZWQgJiYgdmlldygpLT5sYXlvdXRTdGF0ZSgpLT5tX3BhZ2VIZWlnaHQgJiYgY2hpbGRCbG9ja0Zs
b3cgJiYgdmlldygpLT5sYXlvdXRTdGF0ZSgpLT5wYWdlWShjaGlsZC0+eSgpKSAhPSBjaGlsZEJs
b2NrRmxvdy0+cGFnZVkoKSkKKyAgICAgICAgY2hpbGRCbG9ja0Zsb3ctPnNldENoaWxkTmVlZHNM
YXlvdXQodHJ1ZSwgZmFsc2UpOworCiAgICAgYm9vbCBjaGlsZEhhZExheW91dCA9IGNoaWxkLT5t
X2V2ZXJIYWRMYXlvdXQ7CiAgICAgYm9vbCBjaGlsZE5lZWRlZExheW91dCA9IGNoaWxkLT5uZWVk
c0xheW91dCgpOwogICAgIGlmIChjaGlsZE5lZWRlZExheW91dCkKICAgICAgICAgY2hpbGQtPmxh
eW91dCgpOwogCisgICAgLy8gQ2FjaGUgaWYgd2UgYXJlIGF0IHRoZSB0b3Agb2YgdGhlIGJsb2Nr
IHJpZ2h0IG5vdy4KKyAgICBib29sIGF0VG9wT2ZCbG9jayA9IG1hcmdpbkluZm8uYXRUb3BPZkJs
b2NrKCk7CisKICAgICAvLyBOb3cgZGV0ZXJtaW5lIHRoZSBjb3JyZWN0IHlwb3MgYmFzZWQgb2Zm
IGV4YW1pbmF0aW9uIG9mIGNvbGxhcHNpbmcgbWFyZ2luCiAgICAgLy8gdmFsdWVzLgogICAgIGlu
dCB5QmVmb3JlQ2xlYXIgPSBjb2xsYXBzZU1hcmdpbnMoY2hpbGQsIG1hcmdpbkluZm8pOwpAQCAt
MTgwNiw2ICsxODU3LDMyIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrQ2hpbGQoUmVu
ZGUKICAgICAvLyBOb3cgY2hlY2sgZm9yIGNsZWFyLgogICAgIGludCB5QWZ0ZXJDbGVhciA9IGNs
ZWFyRmxvYXRzSWZOZWVkZWQoY2hpbGQsIG1hcmdpbkluZm8sIG9sZFRvcFBvc01hcmdpbiwgb2xk
VG9wTmVnTWFyZ2luLCB5QmVmb3JlQ2xlYXIpOwogICAgIAorICAgIGlmIChwYWdpbmF0ZWQpIHsK
KyAgICAgICAgaW50IG9sZFkgPSB5QWZ0ZXJDbGVhcjsKKyAgICAgICAgCisgICAgICAgIC8vIElm
IHRoZSBvYmplY3QgaGFzIGEgcGFnZSBvciBjb2x1bW4gYnJlYWsgdmFsdWUgb2YgImJlZm9yZSIs
IHRoZW4gd2Ugc2hvdWxkIHNoaWZ0IHRvIHRoZSB0b3Agb2YgdGhlIG5leHQgcGFnZS4KKyAgICAg
ICAgeUFmdGVyQ2xlYXIgPSBhcHBseUJlZm9yZUJyZWFrKGNoaWxkLCB5QWZ0ZXJDbGVhcik7Cisg
ICAgCisgICAgICAgIC8vIEZvciByZXBsYWNlZCBlbGVtZW50cyBhbmQgc2Nyb2xsZWQgZWxlbWVu
dHMsIHdlIHdhbnQgdG8gc2hpZnQgdGhlbSB0byB0aGUgbmV4dCBwYWdlIGlmIHRoZXkgZG9uJ3Qg
Zml0IG9uIHRoZSBjdXJyZW50IG9uZS4KKyAgICAgICAgeUFmdGVyQ2xlYXIgPSBhZGp1c3RGb3JV
bnNwbGl0dGFibGVDaGlsZChjaGlsZCwgeUFmdGVyQ2xlYXIpOworICAgICAgICAKKyAgICAgICAg
aWYgKGNoaWxkQmxvY2tGbG93LT5wYWdpbmF0aW9uU3RydXQoKSkgeworICAgICAgICAgICAgLy8g
V2UgYXJlIHdpbGxpbmcgdG8gcHJvcGFnYXRlIG91dCB0byBvdXIgcGFyZW50IGJsb2NrIGFzIGxv
bmcgYXMgd2Ugd2VyZSBhdCB0aGUgdG9wIG9mIHRoZSBibG9jayBwcmlvcgorICAgICAgICAgICAg
Ly8gdG8gY29sbGFwc2luZyBvdXIgbWFyZ2lucywgYW5kIGFzIGxvbmcgYXMgd2UgZGlkbid0IGNs
ZWFyIG9yIG1vdmUgYXMgYSByZXN1bHQgb2Ygb3RoZXIgcGFnaW5hdGlvbi4KKyAgICAgICAgICAg
IGlmIChhdFRvcE9mQmxvY2sgJiYgb2xkWSA9PSB5QmVmb3JlQ2xlYXIgJiYgIWlzUG9zaXRpb25l
ZCgpICYmICFpc1RhYmxlQ2VsbCgpKSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFNob3Vs
ZCByZWFsbHkgY2hlY2sgaWYgd2UncmUgZXhjZWVkaW5nIHRoZSBwYWdlIGhlaWdodCBiZWZvcmUg
cHJvcGFnYXRpbmcgdGhlIHN0cnV0LCBidXQgd2UgZG9uJ3QKKyAgICAgICAgICAgICAgICAvLyBo
YXZlIGFsbCB0aGUgaW5mb3JtYXRpb24gdG8gZG8gc28gKHRoZSBzdHJ1dCBvbmx5IGhhcyB0aGUg
cmVtYWluaW5nIGFtb3VudCB0byBwdXNoKS4gIEdlY2tvIGdldHMgdGhpcyB3cm9uZyB0b28KKyAg
ICAgICAgICAgICAgICAvLyBhbmQgcHVzaGVzIHRvIHRoZSBuZXh0IHBhZ2UgYW55d2F5LCBzbyBu
b3QgdG9vIGNvbmNlcm5lZCBhYm91dCBpdC4KKyAgICAgICAgICAgICAgICBzZXRQYWdpbmF0aW9u
U3RydXQoeUFmdGVyQ2xlYXIgKyBjaGlsZEJsb2NrRmxvdy0+cGFnaW5hdGlvblN0cnV0KCkpOwor
ICAgICAgICAgICAgICAgIGNoaWxkQmxvY2tGbG93LT5zZXRQYWdpbmF0aW9uU3RydXQoMCk7Cisg
ICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICB5QWZ0ZXJDbGVhciArPSBjaGlsZEJs
b2NrRmxvdy0+cGFnaW5hdGlvblN0cnV0KCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBTaW1p
bGFyIHRvIGhvdyB3ZSBhcHBseSBjbGVhcmFuY2UuICBHbyBhaGVhZCBhbmQgYm9vc3QgaGVpZ2h0
KCkgdG8gYmUgdGhlIHBsYWNlIHdoZXJlIHdlJ3JlIGdvaW5nIHRvIHBvc2l0aW9uIHRoZSBjaGls
ZC4KKyAgICAgICAgc2V0SGVpZ2h0KGhlaWdodCgpICsgKHlBZnRlckNsZWFyIC0gb2xkWSkpOwor
ICAgIH0KKwogICAgIHZpZXcoKS0+YWRkTGF5b3V0RGVsdGEoSW50U2l6ZSgwLCB5UG9zRXN0aW1h
dGUgLSB5QWZ0ZXJDbGVhcikpOwogICAgIGNoaWxkLT5zZXRMb2NhdGlvbihjaGlsZC0+eCgpLCB5
QWZ0ZXJDbGVhcik7CiAKQEAgLTE4MTgsOCArMTg5NSwxMyBAQCB2b2lkIFJlbmRlckJsb2NrOjps
YXlvdXRCbG9ja0NoaWxkKFJlbmRlCiAgICAgICAgICAgICAvLyBTbyBnbyBhaGVhZCBhbmQgbWFy
ayB0aGUgaXRlbSBhcyBkaXJ0eS4KICAgICAgICAgICAgIGNoaWxkLT5zZXRDaGlsZE5lZWRzTGF5
b3V0KHRydWUsIGZhbHNlKTsKICAgICAgICAgfQotICAgICAgICBpZiAoIWNoaWxkLT5hdm9pZHNG
bG9hdHMoKSAmJiBjaGlsZC0+aXNCbG9ja0Zsb3coKSAmJiB0b1JlbmRlckJsb2NrKGNoaWxkKS0+
Y29udGFpbnNGbG9hdHMoKSkKLSAgICAgICAgICAgIHRvUmVuZGVyQmxvY2soY2hpbGQpLT5tYXJr
QWxsRGVzY2VuZGFudHNXaXRoRmxvYXRzRm9yTGF5b3V0KCk7CisgICAgICAgIGlmIChjaGlsZEJs
b2NrRmxvdykgeworICAgICAgICAgICAgaWYgKCFjaGlsZC0+YXZvaWRzRmxvYXRzKCkgJiYgY2hp
bGRCbG9ja0Zsb3ctPmNvbnRhaW5zRmxvYXRzKCkpCisgICAgICAgICAgICAgICAgY2hpbGRCbG9j
a0Zsb3ctPm1hcmtBbGxEZXNjZW5kYW50c1dpdGhGbG9hdHNGb3JMYXlvdXQoKTsKKyAgICAgICAg
ICAgIGlmIChwYWdpbmF0ZWQgJiYgIWNoaWxkLT5uZWVkc0xheW91dCgpICYmIHZpZXcoKS0+bGF5
b3V0U3RhdGUoKS0+bV9wYWdlSGVpZ2h0ICYmIHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+cGFnZVko
Y2hpbGQtPnkoKSkgIT0gY2hpbGRCbG9ja0Zsb3ctPnBhZ2VZKCkpCisgICAgICAgICAgICAgICAg
Y2hpbGQtPnNldENoaWxkTmVlZHNMYXlvdXQodHJ1ZSwgZmFsc2UpOworICAgICAgICB9CisKICAg
ICAgICAgLy8gT3VyIGd1ZXNzIHdhcyB3cm9uZy4gTWFrZSB0aGUgY2hpbGQgbGF5IGl0c2VsZiBv
dXQgYWdhaW4uCiAgICAgICAgIGNoaWxkLT5sYXlvdXRJZk5lZWRlZCgpOwogICAgIH0KQEAgLTE4
NDAsNyArMTkyMiw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrQ2hpbGQoUmVuZGUK
ICAgICB9CiAgICAgLy8gSWYgdGhlIGNoaWxkIGhhcyBvdmVyaGFuZ2luZyBmbG9hdHMgdGhhdCBp
bnRydWRlIGludG8gZm9sbG93aW5nIHNpYmxpbmdzIChvciBwb3NzaWJseSBvdXQKICAgICAvLyBv
ZiB0aGlzIGJsb2NrKSwgdGhlbiB0aGUgcGFyZW50IGdldHMgbm90aWZpZWQgb2YgdGhlIGZsb2F0
cyBub3cuCi0gICAgaWYgKGNoaWxkLT5pc0Jsb2NrRmxvdygpICYmIHRvUmVuZGVyQmxvY2soY2hp
bGQpLT5jb250YWluc0Zsb2F0cygpKQorICAgIGlmIChjaGlsZEJsb2NrRmxvdyAmJiBjaGlsZEJs
b2NrRmxvdy0+Y29udGFpbnNGbG9hdHMoKSkKICAgICAgICAgbWF4RmxvYXRCb3R0b20gPSBtYXgo
bWF4RmxvYXRCb3R0b20sIGFkZE92ZXJoYW5naW5nRmxvYXRzKHRvUmVuZGVyQmxvY2soY2hpbGQp
LCAtY2hpbGQtPngoKSwgLWNoaWxkLT55KCksICFjaGlsZE5lZWRlZExheW91dCkpOwogCiAgICAg
SW50U2l6ZSBjaGlsZE9mZnNldChjaGlsZC0+eCgpIC0gb2xkUmVjdC54KCksIGNoaWxkLT55KCkg
LSBvbGRSZWN0LnkoKSk7CkBAIC0xODU5LDYgKzE5NDEsMTMgQEAgdm9pZCBSZW5kZXJCbG9jazo6
bGF5b3V0QmxvY2tDaGlsZChSZW5kZQogICAgICAgICBjaGlsZC0+cmVwYWludE92ZXJoYW5naW5n
RmxvYXRzKHRydWUpOwogICAgIH0KIAorICAgIGlmIChwYWdpbmF0ZWQpIHsKKyAgICAgICAgLy8g
Q2hlY2sgZm9yIGFuIGFmdGVyIHBhZ2UvY29sdW1uIGJyZWFrLgorICAgICAgICBpbnQgbmV3SGVp
Z2h0ID0gYXBwbHlBZnRlckJyZWFrKGNoaWxkLCBoZWlnaHQoKSwgbWFyZ2luSW5mbyk7CisgICAg
ICAgIGlmIChuZXdIZWlnaHQgIT0gaGVpZ2h0KCkpCisgICAgICAgICAgICBzZXRIZWlnaHQobmV3
SGVpZ2h0KTsKKyAgICB9CisKICAgICBBU1NFUlQob2xkTGF5b3V0RGVsdGEgPT0gdmlldygpLT5s
YXlvdXREZWx0YSgpKTsKIH0KIApAQCAtMTg4OSw2ICsxOTc4LDkgQEAgYm9vbCBSZW5kZXJCbG9j
azo6bGF5b3V0T25seVBvc2l0aW9uZWRPYgogdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0UG9zaXRp
b25lZE9iamVjdHMoYm9vbCByZWxheW91dENoaWxkcmVuKQogewogICAgIGlmIChtX3Bvc2l0aW9u
ZWRPYmplY3RzKSB7CisgICAgICAgIGlmIChoYXNDb2x1bW5zKCkpCisgICAgICAgICAgICB2aWV3
KCktPmxheW91dFN0YXRlKCktPmNsZWFyUGFnaW5hdGlvbkluZm9ybWF0aW9uKCk7IC8vIFBvc2l0
aW9uZWQgb2JqZWN0cyBhcmUgbm90IHBhcnQgb2YgdGhlIGNvbHVtbiBmbG93LCBzbyB0aGV5IGRv
bid0IHBhZ2luYXRlIHdpdGggdGhlIGNvbHVtbnMuCisKICAgICAgICAgUmVuZGVyQm94KiByOwog
ICAgICAgICBJdGVyYXRvciBlbmQgPSBtX3Bvc2l0aW9uZWRPYmplY3RzLT5lbmQoKTsKICAgICAg
ICAgZm9yIChJdGVyYXRvciBpdCA9IG1fcG9zaXRpb25lZE9iamVjdHMtPmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgewpAQCAtMTkxMCw2ICsyMDAyLDkgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5
b3V0UG9zaXRpb25lZE9iamVjdAogICAgICAgICAgICAgICAgIHItPnRyeUxheW91dERvaW5nUG9z
aXRpb25lZE1vdmVtZW50T25seSgpOwogICAgICAgICAgICAgci0+bGF5b3V0SWZOZWVkZWQoKTsK
ICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGhhc0NvbHVtbnMoKSkKKyAgICAgICAg
ICAgIHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+bV9jb2x1bW5JbmZvID0gY29sdW1uSW5mbygpOyAv
LyBGSVhNRTogS2luZCBvZiBncm9zcy4gV2UganVzdCBwdXQgdGhpcyBiYWNrIGludG8gdGhlIGxh
eW91dCBzdGF0ZSBzbyB0aGF0IHBvcCgpIHdpbGwgd29yay4KICAgICB9CiB9CiAKQEAgLTE5OTcs
MTIgKzIwOTIsMTIgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRDb2x1bW5SdWxlcyhQYWludAog
CiAgICAgLy8gV2UgbmVlZCB0byBkbyBtdWx0aXBsZSBwYXNzZXMsIGJyZWFraW5nIHVwIG91ciBj
aGlsZCBwYWludGluZyBpbnRvIHN0cmlwcy4KICAgICBDb2x1bW5JbmZvKiBjb2xJbmZvID0gY29s
dW1uSW5mbygpOwotICAgIHVuc2lnbmVkIGNvbENvdW50ID0gY29sSW5mby0+Y29sdW1uQ291bnQo
KTsKKyAgICB1bnNpZ25lZCBjb2xDb3VudCA9IGNvbHVtbkNvdW50KGNvbEluZm8pOwogICAgIGlu
dCBjdXJyWE9mZnNldCA9IHN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUiA/IDAgOiBjb250ZW50
V2lkdGgoKTsKICAgICBpbnQgcnVsZUFkZCA9IGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCk7
CiAgICAgaW50IHJ1bGVYID0gc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8gMCA6IGNvbnRl
bnRXaWR0aCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb2xDb3VudDsgaSsrKSB7
Ci0gICAgICAgIEludFJlY3QgY29sUmVjdCA9IGNvbEluZm8tPmNvbHVtblJlY3RBdChpKTsKKyAg
ICAgICAgSW50UmVjdCBjb2xSZWN0ID0gY29sdW1uUmVjdEF0KGNvbEluZm8sIGkpOwogCiAgICAg
ICAgIC8vIE1vdmUgdG8gdGhlIG5leHQgcG9zaXRpb24uCiAgICAgICAgIGlmIChzdHlsZSgpLT5k
aXJlY3Rpb24oKSA9PSBMVFIpIHsKQEAgLTIwMzMsMTQgKzIxMjgsMTQgQEAgdm9pZCBSZW5kZXJC
bG9jazo6cGFpbnRDb2x1bW5Db250ZW50cyhQYQogICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCA9IHBhaW50SW5mby5jb250ZXh0OwogICAgIGludCBjb2xHYXAgPSBjb2x1bW5HYXAoKTsKICAg
ICBDb2x1bW5JbmZvKiBjb2xJbmZvID0gY29sdW1uSW5mbygpOwotICAgIHVuc2lnbmVkIGNvbENv
dW50ID0gY29sSW5mby0+Y29sdW1uQ291bnQoKTsKKyAgICB1bnNpZ25lZCBjb2xDb3VudCA9IGNv
bHVtbkNvdW50KGNvbEluZm8pOwogICAgIGlmICghY29sQ291bnQpCiAgICAgICAgIHJldHVybjsK
LSAgICBpbnQgY3VyclhPZmZzZXQgPSBzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIgPyAwIDog
Y29udGVudFdpZHRoKCkgLSBjb2xJbmZvLT5jb2x1bW5SZWN0QXQoMCkud2lkdGgoKTsKKyAgICBp
bnQgY3VyclhPZmZzZXQgPSBzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIgPyAwIDogY29udGVu
dFdpZHRoKCkgLSBjb2x1bW5SZWN0QXQoY29sSW5mbywgMCkud2lkdGgoKTsKICAgICBpbnQgY3Vy
cllPZmZzZXQgPSAwOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb2xDb3VudDsgaSsr
KSB7CiAgICAgICAgIC8vIEZvciBlYWNoIHJlY3QsIHdlIGNsaXAgdG8gdGhlIHJlY3QsIGFuZCB0
aGVuIHdlIGFkanVzdCBvdXIgY29vcmRzLgotICAgICAgICBJbnRSZWN0IGNvbFJlY3QgPSBjb2xJ
bmZvLT5jb2x1bW5SZWN0QXQoaSk7CisgICAgICAgIEludFJlY3QgY29sUmVjdCA9IGNvbHVtblJl
Y3RBdChjb2xJbmZvLCBpKTsKICAgICAgICAgY29sUmVjdC5tb3ZlKHR4LCB0eSk7CiAgICAgICAg
IFBhaW50SW5mbyBpbmZvKHBhaW50SW5mbyk7CiAgICAgICAgIGluZm8ucmVjdC5pbnRlcnNlY3Qo
Y29sUmVjdCk7CkBAIC0yMDk4LDE0ICsyMTkzLDEzIEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50
Q2hpbGRyZW4oUGFpbnRJbmYKICAgICBpbmZvLnVwZGF0ZVBhaW50aW5nUm9vdEZvckNoaWxkcmVu
KHRoaXMpOwogICAgIAogICAgIFJlbmRlclZpZXcqIHJlbmRlclZpZXcgPSB2aWV3KCk7Ci0gICAg
Ym9vbCB1c2VQcmludFJlY3QgPSAhcmVuZGVyVmlldy0+cHJpbnRSZWN0KCkuaXNFbXB0eSgpICYm
ICFkb2N1bWVudCgpLT5zZXR0aW5ncygpLT5wYWdpbmF0ZUR1cmluZ0xheW91dEVuYWJsZWQoKTsK
KyAgICBib29sIHVzZVByaW50UmVjdCA9ICFyZW5kZXJWaWV3LT5wcmludFJlY3QoKS5pc0VtcHR5
KCk7CiAgICAgCiAgICAgYm9vbCBjaGVja1BhZ2VCcmVha3MgPSBkb2N1bWVudCgpLT5wYWdpbmF0
ZWQoKSAmJiAhZG9jdW1lbnQoKS0+c2V0dGluZ3MoKS0+cGFnaW5hdGVEdXJpbmdMYXlvdXRFbmFi
bGVkKCk7Ci0gICAgYm9vbCBjaGVja0NvbHVtbkJyZWFrcyA9ICFjaGVja1BhZ2VCcmVha3MgJiYg
dXNlUHJpbnRSZWN0OwogCiAgICAgZm9yIChSZW5kZXJCb3gqIGNoaWxkID0gZmlyc3RDaGlsZEJv
eCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmdCb3goKSkgeyAgICAgICAgCiAg
ICAgICAgIC8vIENoZWNrIGZvciBwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzLCBhbmQgaWYgaXQn
cyBzZXQsIGJyZWFrIGFuZCBiYWlsLgotICAgICAgICBib29sIGNoZWNrQmVmb3JlQWx3YXlzID0g
IWNoaWxkcmVuSW5saW5lKCkgJiYgKChjaGVja1BhZ2VCcmVha3MgJiYgY2hpbGQtPnN0eWxlKCkt
PnBhZ2VCcmVha0JlZm9yZSgpID09IFBCQUxXQVlTKSB8fCAoY2hlY2tDb2x1bW5CcmVha3MgJiYg
Y2hpbGQtPnN0eWxlKCktPmNvbHVtbkJyZWFrQmVmb3JlKCkgPT0gUEJBTFdBWVMpKTsKKyAgICAg
ICAgYm9vbCBjaGVja0JlZm9yZUFsd2F5cyA9ICFjaGlsZHJlbklubGluZSgpICYmIChjaGVja1Bh
Z2VCcmVha3MgJiYgY2hpbGQtPnN0eWxlKCktPnBhZ2VCcmVha0JlZm9yZSgpID09IFBCQUxXQVlT
KTsKICAgICAgICAgaWYgKGNoZWNrQmVmb3JlQWx3YXlzCiAgICAgICAgICAgICAmJiAodHkgKyBj
aGlsZC0+eSgpKSA+IHBhaW50SW5mby5yZWN0LnkoKQogICAgICAgICAgICAgJiYgKHR5ICsgY2hp
bGQtPnkoKSkgPCBwYWludEluZm8ucmVjdC5ib3R0b20oKSkgewpAQCAtMjEyOCw3ICsyMjIyLDcg
QEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRDaGlsZHJlbihQYWludEluZgogICAgICAgICAgICAg
Y2hpbGQtPnBhaW50KGluZm8sIHR4LCB0eSk7CiAKICAgICAgICAgLy8gQ2hlY2sgZm9yIHBhZ2Ut
YnJlYWstYWZ0ZXI6IGFsd2F5cywgYW5kIGlmIGl0J3Mgc2V0LCBicmVhayBhbmQgYmFpbC4KLSAg
ICAgICAgYm9vbCBjaGVja0FmdGVyQWx3YXlzID0gIWNoaWxkcmVuSW5saW5lKCkgJiYgKChjaGVj
a1BhZ2VCcmVha3MgJiYgY2hpbGQtPnN0eWxlKCktPnBhZ2VCcmVha0FmdGVyKCkgPT0gUEJBTFdB
WVMpIHx8IChjaGVja0NvbHVtbkJyZWFrcyAmJiBjaGlsZC0+c3R5bGUoKS0+Y29sdW1uQnJlYWtB
ZnRlcigpID09IFBCQUxXQVlTKSk7CisgICAgICAgIGJvb2wgY2hlY2tBZnRlckFsd2F5cyA9ICFj
aGlsZHJlbklubGluZSgpICYmIChjaGVja1BhZ2VCcmVha3MgJiYgY2hpbGQtPnN0eWxlKCktPnBh
Z2VCcmVha0FmdGVyKCkgPT0gUEJBTFdBWVMpOwogICAgICAgICBpZiAoY2hlY2tBZnRlckFsd2F5
cwogICAgICAgICAgICAgJiYgKHR5ICsgY2hpbGQtPnkoKSArIGNoaWxkLT5oZWlnaHQoKSkgPiBw
YWludEluZm8ucmVjdC55KCkKICAgICAgICAgICAgICYmICh0eSArIGNoaWxkLT55KCkgKyBjaGls
ZC0+aGVpZ2h0KCkpIDwgcGFpbnRJbmZvLnJlY3QuYm90dG9tKCkpIHsKQEAgLTI3NzYsNyArMjg3
MCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnJlbW92ZVBvc2l0aW9uZWRPYmplY3QKICAgICAgICAg
bV9wb3NpdGlvbmVkT2JqZWN0cy0+cmVtb3ZlKGRlYWRPYmplY3RzLmF0KGkpKTsKIH0KIAotdm9p
ZCBSZW5kZXJCbG9jazo6aW5zZXJ0RmxvYXRpbmdPYmplY3QoUmVuZGVyQm94KiBvKQorUmVuZGVy
QmxvY2s6OkZsb2F0aW5nT2JqZWN0KiBSZW5kZXJCbG9jazo6aW5zZXJ0RmxvYXRpbmdPYmplY3Qo
UmVuZGVyQm94KiBvKQogewogICAgIEFTU0VSVChvLT5pc0Zsb2F0aW5nKCkpOwogCkBAIC0yNzg5
LDI1ICsyODgzLDM3IEBAIHZvaWQgUmVuZGVyQmxvY2s6Omluc2VydEZsb2F0aW5nT2JqZWN0KFIK
ICAgICAgICAgRGVwcmVjYXRlZFB0ckxpc3RJdGVyYXRvcjxGbG9hdGluZ09iamVjdD4gaXQoKm1f
ZmxvYXRpbmdPYmplY3RzKTsKICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGY7CiAgICAgICAgIHdo
aWxlICggKGYgPSBpdC5jdXJyZW50KCkpICkgewotICAgICAgICAgICAgaWYgKGYtPm1fcmVuZGVy
ZXIgPT0gbykgcmV0dXJuOworICAgICAgICAgICAgaWYgKGYtPm1fcmVuZGVyZXIgPT0gbykKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZjsKICAgICAgICAgICAgICsraXQ7CiAgICAgICAgIH0KICAg
ICB9CiAKICAgICAvLyBDcmVhdGUgdGhlIHNwZWNpYWwgb2JqZWN0IGVudHJ5ICYgYXBwZW5kIGl0
IHRvIHRoZSBsaXN0CiAKLSAgICBvLT5sYXlvdXRJZk5lZWRlZCgpOwotCiAgICAgRmxvYXRpbmdP
YmplY3QqIG5ld09iaiA9IG5ldyBGbG9hdGluZ09iamVjdChvLT5zdHlsZSgpLT5mbG9hdGluZygp
ID09IEZMRUZUID8gRmxvYXRpbmdPYmplY3Q6OkZsb2F0TGVmdCA6IEZsb2F0aW5nT2JqZWN0OjpG
bG9hdFJpZ2h0KTsKIAogICAgIG5ld09iai0+bV90b3AgPSAtMTsKICAgICBuZXdPYmotPm1fYm90
dG9tID0gLTE7CisgICAgCisgICAgLy8gT3VyIGxvY2F0aW9uIGlzIGlycmVsZXZhbnQgaWYgd2Un
cmUgdW5zcGxpdHRhYmxlIG9yIG5vIHBhZ2luYXRpb24gaXMgaW4gZWZmZWN0LiAgSnVzdCBnbyBh
aGVhZAorICAgIC8vIGFuZCBsYXkgb3V0IHRoZSBmbG9hdC4KKyAgICBib29sIGFmZmVjdGVkQnlQ
YWdpbmF0aW9uID0gby0+aXNSZW5kZXJCbG9jaygpICYmIHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+
bV9wYWdlSGVpZ2h0OworICAgIGlmICghYWZmZWN0ZWRCeVBhZ2luYXRpb24pCisgICAgICAgIG8t
PmxheW91dElmTmVlZGVkKCk7CisgICAgZWxzZSB7CisgICAgICAgIG8tPmNhbGNXaWR0aCgpOwor
ICAgICAgICBvLT5jYWxjVmVydGljYWxNYXJnaW5zKCk7CisgICAgfQogICAgIG5ld09iai0+bV93
aWR0aCA9IG8tPndpZHRoKCkgKyBvLT5tYXJnaW5MZWZ0KCkgKyBvLT5tYXJnaW5SaWdodCgpOwor
CiAgICAgbmV3T2JqLT5tX3Nob3VsZFBhaW50ID0gIW8tPmhhc1NlbGZQYWludGluZ0xheWVyKCk7
IC8vIElmIGEgbGF5ZXIgZXhpc3RzLCB0aGUgZmxvYXQgd2lsbCBwYWludCBpdHNlbGYuICBPdGhl
cndpc2Ugc29tZW9uZSBlbHNlIHdpbGwuCiAgICAgbmV3T2JqLT5tX2lzRGVzY2VuZGFudCA9IHRy
dWU7CiAgICAgbmV3T2JqLT5tX3JlbmRlcmVyID0gbzsKIAogICAgIG1fZmxvYXRpbmdPYmplY3Rz
LT5hcHBlbmQobmV3T2JqKTsKKyAgICAKKyAgICByZXR1cm4gbmV3T2JqOwogfQogCiB2b2lkIFJl
bmRlckJsb2NrOjpyZW1vdmVGbG9hdGluZ09iamVjdChSZW5kZXJCb3gqIG8pCkBAIC0yODMxLDYg
KzI5MzcsMTggQEAgdm9pZCBSZW5kZXJCbG9jazo6cmVtb3ZlRmxvYXRpbmdPYmplY3QoUgogICAg
IH0KIH0KIAordm9pZCBSZW5kZXJCbG9jazo6cmVtb3ZlRmxvYXRpbmdPYmplY3RzKEZsb2F0aW5n
T2JqZWN0KiBmLCBpbnQgeSkKK3sKKyAgICBpZiAoIW1fZmxvYXRpbmdPYmplY3RzKQorICAgICAg
ICByZXR1cm47CisgICAgCisgICAgRmxvYXRpbmdPYmplY3QqIGN1cnIgPSBtX2Zsb2F0aW5nT2Jq
ZWN0cy0+bGFzdCgpOworICAgIHdoaWxlIChjdXJyICE9IGYgJiYgKGN1cnItPm1fdG9wID09IC0x
IHx8IGN1cnItPm1fdG9wID49IHkpKSB7CisgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5yZW1v
dmVMYXN0KCk7CisgICAgICAgIGN1cnIgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+bGFzdCgpOworICAg
IH0KK30KKwogYm9vbCBSZW5kZXJCbG9jazo6cG9zaXRpb25OZXdGbG9hdHMoKQogewogICAgIGlm
ICghbV9mbG9hdGluZ09iamVjdHMpCkBAIC0yODY3LDE2ICsyOTg1LDE1IEBAIGJvb2wgUmVuZGVy
QmxvY2s6OnBvc2l0aW9uTmV3RmxvYXRzKCkKICAgICAgICAgfQogCiAgICAgICAgIFJlbmRlckJv
eCogbyA9IGYtPm1fcmVuZGVyZXI7Ci0gICAgICAgIGludCBfaGVpZ2h0ID0gby0+aGVpZ2h0KCkg
KyBvLT5tYXJnaW5Ub3AoKSArIG8tPm1hcmdpbkJvdHRvbSgpOwogCiAgICAgICAgIGludCBybyA9
IHJpZ2h0T2Zmc2V0KCk7IC8vIENvbnN0YW50IHBhcnQgb2YgcmlnaHQgb2Zmc2V0LgotICAgICAg
ICBpbnQgbG8gPSBsZWZ0T2Zmc2V0KCk7IC8vIENvbnN0YXQgcGFydCBvZiBsZWZ0IG9mZnNldC4K
KyAgICAgICAgaW50IGxvID0gbGVmdE9mZnNldCgpOyAvLyBDb25zdGFudCBwYXJ0IG9mIGxlZnQg
b2Zmc2V0LgogICAgICAgICBpbnQgZndpZHRoID0gZi0+bV93aWR0aDsgLy8gVGhlIHdpZHRoIHdl
IGxvb2sgZm9yLgogICAgICAgICBpZiAocm8gLSBsbyA8IGZ3aWR0aCkKICAgICAgICAgICAgIGZ3
aWR0aCA9IHJvIC0gbG87IC8vIE5ldmVyIGxvb2sgZm9yIG1vcmUgdGhhbiB3aGF0IHdpbGwgYmUg
YXZhaWxhYmxlLgogICAgICAgICAKICAgICAgICAgSW50UmVjdCBvbGRSZWN0KG8tPngoKSwgby0+
eSgpICwgby0+d2lkdGgoKSwgby0+aGVpZ2h0KCkpOwotICAgICAgICAKKwogICAgICAgICBpZiAo
by0+c3R5bGUoKS0+Y2xlYXIoKSAmIENMRUZUKQogICAgICAgICAgICAgeSA9IG1heChsZWZ0Qm90
dG9tKCksIHkpOwogICAgICAgICBpZiAoby0+c3R5bGUoKS0+Y2xlYXIoKSAmIENSSUdIVCkKQEAg
LTI5MDUsOSArMzAyMiwzOCBAQCBib29sIFJlbmRlckJsb2NrOjpwb3NpdGlvbk5ld0Zsb2F0cygp
CiAgICAgICAgICAgICBvLT5zZXRMb2NhdGlvbihmeCAtIG8tPm1hcmdpblJpZ2h0KCkgLSBvLT53
aWR0aCgpLCB5ICsgby0+bWFyZ2luVG9wKCkpOwogICAgICAgICB9CiAKLSAgICAgICAgZi0+bV90
b3AgPSB5OwotICAgICAgICBmLT5tX2JvdHRvbSA9IGYtPm1fdG9wICsgX2hlaWdodDsKKyAgICAg
ICAgaWYgKHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+cGFnaW5hdGVkKCkpIHsKKyAgICAgICAgICAg
IFJlbmRlckJsb2NrKiBjaGlsZEJsb2NrID0gby0+aXNSZW5kZXJCbG9jaygpID8gdG9SZW5kZXJC
bG9jayhvKSA6IDA7CiAKKyAgICAgICAgICAgIGlmIChjaGlsZEJsb2NrICYmIHZpZXcoKS0+bGF5
b3V0U3RhdGUoKS0+bV9wYWdlSGVpZ2h0ICYmIHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+cGFnZVko
by0+eSgpKSAhPSBjaGlsZEJsb2NrLT5wYWdlWSgpKQorICAgICAgICAgICAgICAgIGNoaWxkQmxv
Y2stPnNldENoaWxkTmVlZHNMYXlvdXQodHJ1ZSwgZmFsc2UpOworICAgICAgICAgICAgby0+bGF5
b3V0SWZOZWVkZWQoKTsKKworICAgICAgICAgICAgLy8gSWYgd2UgYXJlIHVuc3BsaXR0YWJsZSBh
bmQgZG9uJ3QgZml0LCB0aGVuIHdlIG5lZWQgdG8gbW92ZSBkb3duLgorICAgICAgICAgICAgLy8g
V2UgaW5jbHVkZSBvdXIgbWFyZ2lucyBhcyBwYXJ0IG9mIHRoZSB1bnNwbGl0dGFibGUgYXJlYS4K
KyAgICAgICAgICAgIGludCBuZXdZID0gYWRqdXN0Rm9yVW5zcGxpdHRhYmxlQ2hpbGQobywgeSwg
dHJ1ZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFNlZSBpZiB3ZSBoYXZlIGEgcGFn
aW5hdGlvbiBzdHJ1dCB0aGF0IGlzIG1ha2luZyB1cyBtb3ZlIGRvd24gZnVydGhlci4KKyAgICAg
ICAgICAgIC8vIE5vdGUgdGhhdCBhbiB1bnNwbGl0dGFibGUgY2hpbGQgY2FuJ3QgYWxzbyBoYXZl
IGEgcGFnaW5hdGlvbiBzdHJ1dCwgc28gdGhpcyBpcworICAgICAgICAgICAgLy8gZXhjbHVzaXZl
IHdpdGggdGhlIGNhc2UgYWJvdmUuCisgICAgICAgICAgICBpZiAoY2hpbGRCbG9jayAmJiBjaGls
ZEJsb2NrLT5wYWdpbmF0aW9uU3RydXQoKSkgeworICAgICAgICAgICAgICAgIG5ld1kgKz0gY2hp
bGRCbG9jay0+cGFnaW5hdGlvblN0cnV0KCk7CisgICAgICAgICAgICAgICAgY2hpbGRCbG9jay0+
c2V0UGFnaW5hdGlvblN0cnV0KDApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgICAgICBpZiAobmV3WSAhPSB5KSB7CisgICAgICAgICAgICAgICAgZi0+bV9wYWdpbmF0aW9u
U3RydXQgPSBuZXdZIC0geTsKKyAgICAgICAgICAgICAgICB5ID0gbmV3WTsKKyAgICAgICAgICAg
ICAgICBvLT5zZXRZKHkgKyBvLT5tYXJnaW5Ub3AoKSk7CisgICAgICAgICAgICAgICAgaWYgKGNo
aWxkQmxvY2spCisgICAgICAgICAgICAgICAgICAgIGNoaWxkQmxvY2stPnNldENoaWxkTmVlZHNM
YXlvdXQodHJ1ZSwgZmFsc2UpOworICAgICAgICAgICAgICAgIG8tPmxheW91dElmTmVlZGVkKCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmLT5tX3RvcCA9IHk7CisgICAg
ICAgIGYtPm1fYm90dG9tID0gZi0+bV90b3AgKyBvLT5tYXJnaW5Ub3AoKSArIG8tPmhlaWdodCgp
ICsgby0+bWFyZ2luQm90dG9tKCk7CisgICAgICAgIAogICAgICAgICAvLyBJZiB0aGUgY2hpbGQg
bW92ZWQsIHdlIGhhdmUgdG8gcmVwYWludCBpdC4KICAgICAgICAgaWYgKG8tPmNoZWNrRm9yUmVw
YWludER1cmluZ0xheW91dCgpKQogICAgICAgICAgICAgby0+cmVwYWludER1cmluZ0xheW91dElm
TW92ZWQob2xkUmVjdCk7CkBAIC0yOTE3LDYgKzMwNjMsNDAgQEAgYm9vbCBSZW5kZXJCbG9jazo6
cG9zaXRpb25OZXdGbG9hdHMoKQogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIFJlbmRlckJs
b2NrOjpwb3NpdGlvbk5ld0Zsb2F0T25MaW5lKEZsb2F0aW5nT2JqZWN0KiBuZXdGbG9hdCwgRmxv
YXRpbmdPYmplY3QqIGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUpCit7CisgICAgYm9vbCBkaWRQ
b3NpdGlvbiA9IHBvc2l0aW9uTmV3RmxvYXRzKCk7CisgICAgaWYgKCFkaWRQb3NpdGlvbiB8fCAh
bmV3RmxvYXQtPm1fcGFnaW5hdGlvblN0cnV0KQorICAgICAgICByZXR1cm4gZGlkUG9zaXRpb247
CisgICAgCisgICAgaW50IGZsb2F0VG9wID0gbmV3RmxvYXQtPm1fdG9wOworICAgIGludCBwYWdp
bmF0aW9uU3RydXQgPSBuZXdGbG9hdC0+bV9wYWdpbmF0aW9uU3RydXQ7CisgICAgRmxvYXRpbmdP
YmplY3QqIGYgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+bGFzdCgpOworICAgIAorICAgIEFTU0VSVChm
ID09IG5ld0Zsb2F0KTsKKworICAgIGlmIChmbG9hdFRvcCAtIHBhZ2luYXRpb25TdHJ1dCAhPSBo
ZWlnaHQoKSkKKyAgICAgICAgcmV0dXJuIGRpZFBvc2l0aW9uOworCisgICAgZm9yIChmID0gbV9m
bG9hdGluZ09iamVjdHMtPnByZXYoKTsgZiAmJiBmICE9IGxhc3RGbG9hdEZyb21QcmV2aW91c0xp
bmU7IGYgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+cHJldigpKSB7CisgICAgICAgIGlmIChmLT5tX3Rv
cCA9PSBoZWlnaHQoKSkgeworICAgICAgICAgICAgQVNTRVJUKCFmLT5tX3BhZ2luYXRpb25TdHJ1
dCk7CisgICAgICAgICAgICBmLT5tX3BhZ2luYXRpb25TdHJ1dCA9IHBhZ2luYXRpb25TdHJ1dDsK
KyAgICAgICAgICAgIFJlbmRlckJveCogbyA9IGYtPm1fcmVuZGVyZXI7CisgICAgICAgICAgICBv
LT5zZXRZKG8tPnkoKSArIG8tPm1hcmdpblRvcCgpICsgcGFnaW5hdGlvblN0cnV0KTsKKyAgICAg
ICAgICAgIGlmIChvLT5pc1JlbmRlckJsb2NrKCkpCisgICAgICAgICAgICAgICAgdG9SZW5kZXJC
bG9jayhvKS0+c2V0Q2hpbGROZWVkc0xheW91dCh0cnVlLCBmYWxzZSk7CisgICAgICAgICAgICBv
LT5sYXlvdXRJZk5lZWRlZCgpOworICAgICAgICAgICAgZi0+bV90b3AgKz0gZi0+bV9wYWdpbmF0
aW9uU3RydXQ7CisgICAgICAgICAgICBmLT5tX2JvdHRvbSArPSBmLT5tX3BhZ2luYXRpb25TdHJ1
dDsKKyAgICAgICAgfQorICAgIH0KKyAgICAgICAgCisgICAgc2V0SGVpZ2h0KGhlaWdodCgpICsg
cGFnaW5hdGlvblN0cnV0KTsKKyAgICAKKyAgICByZXR1cm4gZGlkUG9zaXRpb247Cit9CisKIHZv
aWQgUmVuZGVyQmxvY2s6Om5ld0xpbmUoRUNsZWFyIGNsZWFyKQogewogICAgIHBvc2l0aW9uTmV3
RmxvYXRzKCk7CkBAIC0zMTU4LDggKzMzMzgsOCBAQCBpbnQgUmVuZGVyQmxvY2s6Omxvd2VzdFBv
c2l0aW9uKGJvb2wgaW5jCiAKICAgICBpZiAoaGFzQ29sdW1ucygpKSB7CiAgICAgICAgIENvbHVt
bkluZm8qIGNvbEluZm8gPSBjb2x1bW5JbmZvKCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBjb2xJbmZvLT5jb2x1bW5Db3VudCgpOyBpKyspCi0gICAgICAgICAgICBib3R0b20g
PSBtYXgoYm90dG9tLCBjb2xJbmZvLT5jb2x1bW5SZWN0QXQoaSkuYm90dG9tKCkgKyByZWxhdGl2
ZU9mZnNldCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb2x1bW5Db3VudChj
b2xJbmZvKTsgaSsrKQorICAgICAgICAgICAgYm90dG9tID0gbWF4KGJvdHRvbSwgY29sdW1uUmVj
dEF0KGNvbEluZm8sIGkpLmJvdHRvbSgpICsgcmVsYXRpdmVPZmZzZXQpOwogICAgICAgICByZXR1
cm4gYm90dG9tOwogICAgIH0KIApAQCAtMzI1Myw4ICszNDMzLDkgQEAgaW50IFJlbmRlckJsb2Nr
OjpyaWdodG1vc3RQb3NpdGlvbihib29sIAogICAgICAgICAvLyBUaGlzIG9ubHkgbWF0dGVycyBm
b3IgTFRSCiAgICAgICAgIGlmIChzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIpIHsKICAgICAg
ICAgICAgIENvbHVtbkluZm8qIGNvbEluZm8gPSBjb2x1bW5JbmZvKCk7Ci0gICAgICAgICAgICBp
ZiAoY29sSW5mby0+Y29sdW1uQ291bnQoKSkKLSAgICAgICAgICAgICAgICByaWdodCA9IG1heChj
b2xJbmZvLT5jb2x1bW5SZWN0QXQoY29sSW5mby0+Y29sdW1uQ291bnQoKSAtIDEpLnJpZ2h0KCkg
KyByZWxhdGl2ZU9mZnNldCwgcmlnaHQpOworICAgICAgICAgICAgdW5zaWduZWQgY291bnQgPSBj
b2x1bW5Db3VudChjb2xJbmZvKTsKKyAgICAgICAgICAgIGlmIChjb3VudCkKKyAgICAgICAgICAg
ICAgICByaWdodCA9IG1heChjb2x1bW5SZWN0QXQoY29sSW5mbywgY291bnQgLSAxKS5yaWdodCgp
ICsgcmVsYXRpdmVPZmZzZXQsIHJpZ2h0KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gcmln
aHQ7CiAgICAgfQpAQCAtMzM1Myw4ICszNTM0LDkgQEAgaW50IFJlbmRlckJsb2NrOjpsZWZ0bW9z
dFBvc2l0aW9uKGJvb2wgaQogICAgICAgICAvLyBUaGlzIG9ubHkgbWF0dGVycyBmb3IgUlRMCiAg
ICAgICAgIGlmIChzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBSVEwpIHsKICAgICAgICAgICAgIENv
bHVtbkluZm8qIGNvbEluZm8gPSBjb2x1bW5JbmZvKCk7Ci0gICAgICAgICAgICBpZiAoY29sSW5m
by0+Y29sdW1uQ291bnQoKSkKLSAgICAgICAgICAgICAgICBsZWZ0ID0gbWluKGNvbEluZm8tPmNv
bHVtblJlY3RBdChjb2xJbmZvLT5jb2x1bW5Db3VudCgpIC0gMSkueCgpICsgcmVsYXRpdmVPZmZz
ZXQsIGxlZnQpOworICAgICAgICAgICAgdW5zaWduZWQgY291bnQgPSBjb2x1bW5Db3VudChjb2xJ
bmZvKTsKKyAgICAgICAgICAgIGlmIChjb3VudCkKKyAgICAgICAgICAgICAgICBsZWZ0ID0gbWlu
KGNvbHVtblJlY3RBdChjb2xJbmZvLCBjb3VudCAtIDEpLngoKSArIHJlbGF0aXZlT2Zmc2V0LCBs
ZWZ0KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gbGVmdDsKICAgICB9CkBAIC0zNjQ3LDYg
KzM4MjksOSBAQCBib29sIFJlbmRlckJsb2NrOjpjb250YWluc0Zsb2F0KFJlbmRlck9iCiAKIHZv
aWQgUmVuZGVyQmxvY2s6Om1hcmtBbGxEZXNjZW5kYW50c1dpdGhGbG9hdHNGb3JMYXlvdXQoUmVu
ZGVyQm94KiBmbG9hdFRvUmVtb3ZlLCBib29sIGluTGF5b3V0KQogeworICAgIGlmICghbV9ldmVy
SGFkTGF5b3V0KQorICAgICAgICByZXR1cm47CisKICAgICBzZXRDaGlsZE5lZWRzTGF5b3V0KHRy
dWUsICFpbkxheW91dCk7CiAKICAgICBpZiAoZmxvYXRUb1JlbW92ZSkKQEAgLTM2NjQsMzAgKzM4
NDksNDUgQEAgdm9pZCBSZW5kZXJCbG9jazo6bWFya0FsbERlc2NlbmRhbnRzV2l0aAogICAgIH0K
IH0KIAotaW50IFJlbmRlckJsb2NrOjp2aXNpYmxlVG9wT2ZIaWdoZXN0RmxvYXRFeHRlbmRpbmdC
ZWxvdyhpbnQgYm90dG9tLCBpbnQgbWF4SGVpZ2h0KSBjb25zdAordm9pZCBSZW5kZXJCbG9jazo6
bWFya0Rlc2NlbmRhbnRCbG9ja3NBbmRMaW5lc0ZvckxheW91dChib29sIGluTGF5b3V0KQogewot
ICAgIGludCB0b3AgPSBib3R0b207Ci0gICAgaWYgKG1fZmxvYXRpbmdPYmplY3RzKSB7Ci0gICAg
ICAgIEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdDsKLSAgICAgICAgZm9yIChEZXByZWNh
dGVkUHRyTGlzdEl0ZXJhdG9yPEZsb2F0aW5nT2JqZWN0PiBpdCgqbV9mbG9hdGluZ09iamVjdHMp
OyAoZmxvYXRpbmdPYmplY3QgPSBpdC5jdXJyZW50KCkpOyArK2l0KSB7Ci0gICAgICAgICAgICBS
ZW5kZXJCb3gqIGZsb2F0aW5nQm94ID0gZmxvYXRpbmdPYmplY3QtPm1fcmVuZGVyZXI7Ci0gICAg
ICAgICAgICBJbnRSZWN0IHZpc2libGVPdmVyZmxvdyA9IGZsb2F0aW5nQm94LT52aXNpYmxlT3Zl
cmZsb3dSZWN0KCk7Ci0gICAgICAgICAgICB2aXNpYmxlT3ZlcmZsb3cubW92ZShmbG9hdGluZ0Jv
eC0+eCgpLCBmbG9hdGluZ0JveC0+eSgpKTsKLSAgICAgICAgICAgIGlmICh2aXNpYmxlT3ZlcmZs
b3cueSgpIDwgdG9wICYmIHZpc2libGVPdmVyZmxvdy5ib3R0b20oKSA+IGJvdHRvbSAmJiB2aXNp
YmxlT3ZlcmZsb3cuaGVpZ2h0KCkgPD0gbWF4SGVpZ2h0ICYmIGZsb2F0aW5nQm94LT5jb250YWlu
aW5nQmxvY2soKSA9PSB0aGlzKQotICAgICAgICAgICAgICAgIHRvcCA9IHZpc2libGVPdmVyZmxv
dy55KCk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgaWYgKCFtX2V2ZXJIYWRMYXlvdXQpCisgICAg
ICAgIHJldHVybjsKKworICAgIHNldENoaWxkTmVlZHNMYXlvdXQodHJ1ZSwgIWluTGF5b3V0KTsK
IAorICAgIC8vIEl0ZXJhdGUgb3ZlciBvdXIgY2hpbGRyZW4gYW5kIG1hcmsgdGhlbSBhcyBuZWVk
ZWQuCiAgICAgaWYgKCFjaGlsZHJlbklubGluZSgpKSB7CiAgICAgICAgIGZvciAoUmVuZGVyT2Jq
ZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJs
aW5nKCkpIHsKICAgICAgICAgICAgIGlmIChjaGlsZC0+aXNGbG9hdGluZ09yUG9zaXRpb25lZCgp
IHx8ICFjaGlsZC0+aXNSZW5kZXJCbG9jaygpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGNoaWxkQmxvY2sgPSB0b1JlbmRlckJsb2NrKGNoaWxk
KTsKLSAgICAgICAgICAgIHRvcCA9IG1pbih0b3AsIGNoaWxkQmxvY2stPnkoKSArIGNoaWxkQmxv
Y2stPnZpc2libGVUb3BPZkhpZ2hlc3RGbG9hdEV4dGVuZGluZ0JlbG93KGJvdHRvbSAtIGNoaWxk
QmxvY2stPnkoKSwgbWF4SGVpZ2h0KSk7CisgICAgICAgICAgICB0b1JlbmRlckJsb2NrKGNoaWxk
KS0+bWFya0Rlc2NlbmRhbnRCbG9ja3NBbmRMaW5lc0ZvckxheW91dChpbkxheW91dCk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gV2FsayBvdXIgZmxvYXRpbmcgb2JqZWN0cyBhbmQg
bWFyayB0aGVtIHRvby4KKyAgICBpZiAobV9mbG9hdGluZ09iamVjdHMpIHsKKyAgICAgICAgRGVw
cmVjYXRlZFB0ckxpc3RJdGVyYXRvcjxGbG9hdGluZ09iamVjdD4gaXQoKm1fZmxvYXRpbmdPYmpl
Y3RzKTsKKyAgICAgICAgd2hpbGUgKGl0LmN1cnJlbnQoKSkgeworICAgICAgICAgICAgaWYgKGl0
LmN1cnJlbnQoKS0+bV9yZW5kZXJlci0+aXNSZW5kZXJCbG9jaygpKQorICAgICAgICAgICAgICAg
IHRvUmVuZGVyQmxvY2soaXQuY3VycmVudCgpLT5tX3JlbmRlcmVyKS0+bWFya0Rlc2NlbmRhbnRC
bG9ja3NBbmRMaW5lc0ZvckxheW91dChpbkxheW91dCk7CisgICAgICAgICAgICArK2l0OworICAg
ICAgICB9CisgICAgfQorCisgICAgaWYgKG1fcG9zaXRpb25lZE9iamVjdHMpIHsKKyAgICAgICAg
Ly8gRklYTUU6IFRlY2huaWNhbGx5IHdlIGRvbid0IGhhdmUgdG8gbWFyayB0aGUgcG9zaXRpb25l
ZCBvYmplY3RzIGlmIHdlJ3JlIHRoZSBibG9jaworICAgICAgICAvLyB0aGF0IGVzdGFibGlzaGVk
IHRoZSBjb2x1bW5zLCBidXQgd2UgZG9uJ3QgcmVhbGx5IGhhdmUgdGhhdCBpbmZvcm1hdGlvbiBo
ZXJlLgorICAgICAgICBSZW5kZXJCb3gqIHI7CisgICAgICAgIEl0ZXJhdG9yIGVuZCA9IG1fcG9z
aXRpb25lZE9iamVjdHMtPmVuZCgpOworICAgICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gbV9wb3Np
dGlvbmVkT2JqZWN0cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBy
ID0gKml0OworICAgICAgICAgICAgaWYgKHItPmlzUmVuZGVyQmxvY2soKSkKKyAgICAgICAgICAg
ICAgICB0b1JlbmRlckJsb2NrKHIpLT5tYXJrRGVzY2VuZGFudEJsb2Nrc0FuZExpbmVzRm9yTGF5
b3V0KCk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICByZXR1cm4gdG9wOworICAgIC8vIEZJWE1F
OiBJZiB3ZSdyZSBhIHRhYmxlLCB0aGVuIHdlIGhhdmUgdG8gbWFyayBldmVyeSBzaW5nbGUgY2Vs
bC4KIH0KIAogaW50IFJlbmRlckJsb2NrOjpnZXRDbGVhckRlbHRhKFJlbmRlckJveCogY2hpbGQs
IGludCB5UG9zKQpAQCAtMzg0NywxNiArNDA0NywxNiBAQCBib29sIFJlbmRlckJsb2NrOjpoaXRU
ZXN0Q29sdW1ucyhjb25zdCBICiB7CiAgICAgLy8gV2UgbmVlZCB0byBkbyBtdWx0aXBsZSBwYXNz
ZXMsIGJyZWFraW5nIHVwIG91ciBoaXQgdGVzdGluZyBpbnRvIHN0cmlwcy4KICAgICBDb2x1bW5J
bmZvKiBjb2xJbmZvID0gY29sdW1uSW5mbygpOwotICAgIGludCBjb2xDb3VudCA9IGNvbEluZm8t
PmNvbHVtbkNvdW50KCk7CisgICAgaW50IGNvbENvdW50ID0gY29sdW1uQ291bnQoY29sSW5mbyk7
CiAgICAgaWYgKCFjb2xDb3VudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGludCBsZWZ0
ID0gYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKTsKICAgICBpbnQgY3VycllPZmZzZXQgPSAw
OwogICAgIGludCBpOwogICAgIGZvciAoaSA9IDA7IGkgPCBjb2xDb3VudDsgaSsrKQotICAgICAg
ICBjdXJyWU9mZnNldCAtPSBjb2xJbmZvLT5jb2x1bW5SZWN0QXQoaSkuaGVpZ2h0KCk7CisgICAg
ICAgIGN1cnJZT2Zmc2V0IC09IGNvbHVtblJlY3RBdChjb2xJbmZvLCBpKS5oZWlnaHQoKTsKICAg
ICBmb3IgKGkgPSBjb2xDb3VudCAtIDE7IGkgPj0gMDsgaS0tKSB7Ci0gICAgICAgIEludFJlY3Qg
Y29sUmVjdCA9IGNvbEluZm8tPmNvbHVtblJlY3RBdChpKTsKKyAgICAgICAgSW50UmVjdCBjb2xS
ZWN0ID0gY29sdW1uUmVjdEF0KGNvbEluZm8sIGkpOwogICAgICAgICBpbnQgY3VyclhPZmZzZXQg
PSBjb2xSZWN0LngoKSAtIGxlZnQ7CiAgICAgICAgIGN1cnJZT2Zmc2V0ICs9IGNvbFJlY3QuaGVp
Z2h0KCk7CiAgICAgICAgIGNvbFJlY3QubW92ZSh0eCwgdHkpOwpAQCAtNDE1MCw4ICs0MzUwLDcg
QEAgdm9pZCBSZW5kZXJCbG9jazo6c2V0RGVzaXJlZENvbHVtbkNvdW50QQogICAgIGJvb2wgZGVz
dHJveUNvbHVtbnMgPSAhZmlyc3RDaGlsZCgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8
IChjb3VudCA9PSAxICYmIHN0eWxlKCktPmhhc0F1dG9Db2x1bW5XaWR0aCgpKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICB8fCBmaXJzdENoaWxkKCktPmlzQW5vbnltb3VzQ29sdW1uc0Jsb2Nr
KCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgZmlyc3RDaGlsZCgpLT5pc0Fub255bW91
c0NvbHVtblNwYW5CbG9jaygpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGRvY3VtZW50
KCktPnNldHRpbmdzKCktPnBhZ2luYXRlRHVyaW5nTGF5b3V0RW5hYmxlZCgpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICB8fCBmaXJzdENoaWxkKCktPmlzQW5vbnltb3VzQ29sdW1uU3BhbkJs
b2NrKCk7CiAgICAgaWYgKGRlc3Ryb3lDb2x1bW5zKSB7CiAgICAgICAgIGlmIChoYXNDb2x1bW5z
KCkpIHsKICAgICAgICAgICAgIGRlbGV0ZSBnQ29sdW1uSW5mb01hcC0+dGFrZSh0aGlzKTsKQEAg
LTQxOTQsMTMzICs0MzkzLDYwIEBAIENvbHVtbkluZm8qIFJlbmRlckJsb2NrOjpjb2x1bW5JbmZv
KCkgY28KICAgICByZXR1cm4gZ0NvbHVtbkluZm9NYXAtPmdldCh0aGlzKTsgICAgCiB9CiAKLWlu
dCBSZW5kZXJCbG9jazo6bGF5b3V0Q29sdW1ucyhpbnQgZW5kT2ZDb250ZW50LCBpbnQgcmVxdWVz
dGVkQ29sdW1uSGVpZ2h0KQordW5zaWduZWQgUmVuZGVyQmxvY2s6OmNvbHVtbkNvdW50KENvbHVt
bkluZm8qIGNvbEluZm8pIGNvbnN0CiB7Ci0gICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgd2Ug
aGF2ZSBubyBjb2x1bW5zCi0gICAgaWYgKCFoYXNDb2x1bW5zKCkpCi0gICAgICAgIHJldHVybiAt
MTsKKyAgICBBU1NFUlQoaGFzQ29sdW1ucygpICYmIGdDb2x1bW5JbmZvTWFwLT5nZXQodGhpcykg
PT0gY29sSW5mbyk7CisgICAgcmV0dXJuIGNvbEluZm8tPmNvbHVtbkNvdW50KCk7Cit9CiAKLSAg
ICBDb2x1bW5JbmZvKiBpbmZvID0gZ0NvbHVtbkluZm9NYXAtPmdldCh0aGlzKTsKLSAgICBpbnQg
ZGVzaXJlZENvbHVtbldpZHRoID0gaW5mby0+ZGVzaXJlZENvbHVtbldpZHRoKCk7Ci0gICAgaW50
IGRlc2lyZWRDb2x1bW5Db3VudCA9IGluZm8tPmRlc2lyZWRDb2x1bW5Db3VudCgpOwotICAgIAot
ICAgIGJvb2wgY29tcHV0ZUludHJpbnNpY0hlaWdodCA9IChlbmRPZkNvbnRlbnQgPT0gLTEpOwot
Ci0gICAgLy8gRmlsbCB0aGUgY29sdW1ucyBpbiB0byB0aGUgYXZhaWxhYmxlIGhlaWdodC4gIEF0
dGVtcHQgdG8gYmFsYW5jZSB0aGUgaGVpZ2h0IG9mIHRoZSBjb2x1bW5zLgotICAgIC8vIEFkZCBp
biBoYWxmIG91ciBsaW5lLWhlaWdodCB0byBoZWxwIHdpdGggYmVzdC1ndWVzcyBpbml0aWFsIGJh
bGFuY2luZy4KLSAgICBpbnQgY29sdW1uU2xvcCA9IGxpbmVIZWlnaHQoZmFsc2UpIC8gMjsKLSAg
ICBpbnQgcmVtYWluaW5nU2xvcFNwYWNlID0gY29sdW1uU2xvcCAqIGRlc2lyZWRDb2x1bW5Db3Vu
dDsKLSAgICBpbnQgYXZhaWxhYmxlSGVpZ2h0ID0gY29udGVudEhlaWdodCgpOwotICAgIGludCBj
b2xIZWlnaHQ7Ci0gICAgaWYgKGNvbXB1dGVJbnRyaW5zaWNIZWlnaHQgJiYgcmVxdWVzdGVkQ29s
dW1uSGVpZ2h0ID49IDApCi0gICAgICAgIGNvbEhlaWdodCA9IHJlcXVlc3RlZENvbHVtbkhlaWdo
dDsKLSAgICBlbHNlIGlmIChjb21wdXRlSW50cmluc2ljSGVpZ2h0KQotICAgICAgICBjb2xIZWln
aHQgPSBtaW4oYXZhaWxhYmxlSGVpZ2h0LCBhdmFpbGFibGVIZWlnaHQgLyBkZXNpcmVkQ29sdW1u
Q291bnQgKyBjb2x1bW5TbG9wKTsKLSAgICBlbHNlCi0gICAgICAgIGNvbEhlaWdodCA9IGF2YWls
YWJsZUhlaWdodDsKLSAgICBpbnQgb3JpZ2luYWxDb2xIZWlnaHQgPSBjb2xIZWlnaHQ7CitJbnRS
ZWN0IFJlbmRlckJsb2NrOjpjb2x1bW5SZWN0QXQoQ29sdW1uSW5mbyogY29sSW5mbywgdW5zaWdu
ZWQgaW5kZXgpIGNvbnN0Cit7CisgICAgQVNTRVJUKGhhc0NvbHVtbnMoKSAmJiBnQ29sdW1uSW5m
b01hcC0+Z2V0KHRoaXMpID09IGNvbEluZm8pOwogCisgICAgLy8gQ29tcHV0ZSB0aGUgYXBwcm9w
cmlhdGUgcmVjdCBiYXNlZCBvZmYgb3VyIGluZm9ybWF0aW9uLgorICAgIGludCBjb2xXaWR0aCA9
IGNvbEluZm8tPmRlc2lyZWRDb2x1bW5XaWR0aCgpOworICAgIGludCBjb2xIZWlnaHQgPSBjb2xJ
bmZvLT5jb2x1bW5IZWlnaHQoKTsKKyAgICBpbnQgY29sVG9wID0gYm9yZGVyVG9wKCkgKyBwYWRk
aW5nVG9wKCk7CiAgICAgaW50IGNvbEdhcCA9IGNvbHVtbkdhcCgpOworICAgIGludCBjb2xMZWZ0
ID0gc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8gCisgICAgICAgICAgICAgICAgICAgICAg
Ym9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKSArIChpbmRleCAqIChjb2xXaWR0aCArIGNvbEdh
cCkpCisgICAgICAgICAgICAgICAgICAgICAgOiBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgp
ICsgY29udGVudFdpZHRoKCkgLSBjb2xXaWR0aCAtIChpbmRleCAqIChjb2xXaWR0aCArIGNvbEdh
cCkpOworICAgIHJldHVybiBJbnRSZWN0KGNvbExlZnQsIGNvbFRvcCwgY29sV2lkdGgsIGNvbEhl
aWdodCk7Cit9CiAKLSAgICAvLyBDb21wdXRlIGEgY29sbGVjdGlvbiBvZiBjb2x1bW4gcmVjdHMu
Ci0gICAgaW5mby0+Y2xlYXJDb2x1bW5zKCk7Ci0gICAgCi0gICAgLy8gVGhlbiB3ZSBkbyBhIHNp
bXVsYXRlZCAicGFpbnQiIGludG8gdGhlIGNvbHVtbiBzbGljZXMgYW5kIGFsbG93IHRoZSBjb250
ZW50IHRvIHNsaWdodGx5IGFkanVzdCBvdXIgaW5kaXZpZHVhbCBjb2x1bW4gcmVjdHMuCi0gICAg
Ly8gRklYTUU6IFdlIG5lZWQgdG8gdGFrZSBpbnRvIGFjY291bnQgbGF5ZXJzIHRoYXQgYXJlIGFm
ZmVjdGVkIGJ5IHRoZSBjb2x1bW5zIGFzIHdlbGwgaGVyZSBzbyB0aGF0IHRoZXkgY2FuIGhhdmUg
YW4gb3Bwb3J0dW5pdHkKLSAgICAvLyB0byBhZGp1c3QgY29sdW1uIHJlY3RzIGFsc28uCi0gICAg
UmVuZGVyVmlldyogdiA9IHZpZXcoKTsKLSAgICBpbnQgbGVmdCA9IGJvcmRlckxlZnQoKSArIHBh
ZGRpbmdMZWZ0KCk7Ci0gICAgaW50IHRvcCA9IGJvcmRlclRvcCgpICsgcGFkZGluZ1RvcCgpOwot
ICAgIGludCBjdXJyWCA9IHN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUiA/IGJvcmRlckxlZnQo
KSArIHBhZGRpbmdMZWZ0KCkgOiBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpICsgY29udGVu
dFdpZHRoKCkgLSBkZXNpcmVkQ29sdW1uV2lkdGg7Ci0gICAgaW50IGN1cnJZID0gdG9wOwotICAg
IHVuc2lnbmVkIGNvbENvdW50ID0gZGVzaXJlZENvbHVtbkNvdW50OwotICAgIGludCBtYXhDb2xC
b3R0b20gPSBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKTsKLSAgICBpbnQgY29udGVudEJvdHRv
bSA9IHRvcCArIGF2YWlsYWJsZUhlaWdodDsKLSAgICBpbnQgbWluaW11bUNvbHVtbkhlaWdodCA9
IC0xOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb2xDb3VudDsgaSsrKSB7Ci0gICAg
ICAgIC8vIElmIHdlIGFyZW4ndCBjb25zdHJhaW5lZCwgdGhlbiB0aGUgbGFzdCBjb2x1bW4gY2Fu
IGp1c3QgZ2V0IGFsbCB0aGUgcmVtYWluaW5nIHNwYWNlLgotICAgICAgICBpZiAoY29tcHV0ZUlu
dHJpbnNpY0hlaWdodCAmJiBpID09IGNvbENvdW50IC0gMSkKLSAgICAgICAgICAgIGNvbEhlaWdo
dCA9IGF2YWlsYWJsZUhlaWdodDsKLQotICAgICAgICAvLyBUaGlzIHJlcHJlc2VudHMgdGhlIHJl
YWwgY29sdW1uIHBvc2l0aW9uLgotICAgICAgICBJbnRSZWN0IGNvbFJlY3QoY3VyclgsIHRvcCwg
ZGVzaXJlZENvbHVtbldpZHRoLCBjb2xIZWlnaHQpOwotCi0gICAgICAgIGludCB0cnVuY2F0aW9u
UG9pbnQgPSB2aXNpYmxlVG9wT2ZIaWdoZXN0RmxvYXRFeHRlbmRpbmdCZWxvdyhjdXJyWSArIGNv
bEhlaWdodCwgY29sSGVpZ2h0KTsKLQotICAgICAgICAvLyBGb3IgdGhlIHNpbXVsYXRlZCBwYWlu
dCwgd2UgcHJldGVuZCBsaWtlIGV2ZXJ5dGhpbmcgaXMgaW4gb25lIGxvbmcgc3RyaXAuCi0gICAg
ICAgIEludFJlY3QgcGFnZVJlY3QobGVmdCwgY3VyclksIGNvbnRlbnRXaWR0aCgpLCB0cnVuY2F0
aW9uUG9pbnQgLSBjdXJyWSk7Ci0gICAgICAgIHYtPnNldFByaW50UmVjdChwYWdlUmVjdCk7Ci0g
ICAgICAgIHYtPnNldFRydW5jYXRlZEF0KHRydW5jYXRpb25Qb2ludCk7Ci0gICAgICAgIEdyYXBo
aWNzQ29udGV4dCBjb250ZXh0KChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCopMCk7Ci0gICAgICAg
IFBhaW50SW5mbyBwYWludEluZm8oJmNvbnRleHQsIHBhZ2VSZWN0LCBQYWludFBoYXNlRm9yZWdy
b3VuZCwgZmFsc2UsIDAsIDApOwotICAgICAgICAKLSAgICAgICAgc2V0SGFzQ29sdW1ucyhmYWxz
ZSk7Ci0gICAgICAgIHBhaW50T2JqZWN0KHBhaW50SW5mbywgMCwgMCk7Ci0gICAgICAgIHNldEhh
c0NvbHVtbnModHJ1ZSk7Ci0KLSAgICAgICAgaWYgKGNvbXB1dGVJbnRyaW5zaWNIZWlnaHQgJiYg
di0+bWluaW11bUNvbHVtbkhlaWdodCgpID4gb3JpZ2luYWxDb2xIZWlnaHQpIHsKLSAgICAgICAg
ICAgIC8vIFRoZSBpbml0aWFsIGNvbHVtbiBoZWlnaHQgd2FzIHRvbyBzbWFsbCB0byBjb250YWlu
IG9uZSBsaW5lIG9mIHRleHQuCi0gICAgICAgICAgICBtaW5pbXVtQ29sdW1uSGVpZ2h0ID0gbWF4
KG1pbmltdW1Db2x1bW5IZWlnaHQsIHYtPm1pbmltdW1Db2x1bW5IZWlnaHQoKSk7Ci0gICAgICAg
IH0KLQotICAgICAgICBpbnQgYWRqdXN0ZWRCb3R0b20gPSB2LT5iZXN0VHJ1bmNhdGVkQXQoKTsK
LSAgICAgICAgaWYgKGFkanVzdGVkQm90dG9tIDw9IGN1cnJZKQotICAgICAgICAgICAgYWRqdXN0
ZWRCb3R0b20gPSB0cnVuY2F0aW9uUG9pbnQ7Ci0gICAgICAgIAotICAgICAgICBjb2xSZWN0LnNl
dEhlaWdodChhZGp1c3RlZEJvdHRvbSAtIGN1cnJZKTsKLSAgICAgICAgCi0gICAgICAgIC8vIEFk
ZCBpbiB0aGUgbG9zdCBzcGFjZSB0byB0aGUgc3Vic2VxdWVudCBjb2x1bW5zLgotICAgICAgICAv
LyBGSVhNRTogVGhpcyB3aWxsIGNyZWF0ZSBhICJzdGFpcmNhc2UiIGVmZmVjdCBpZiB0aGVyZSBh
cmUgZW5vdWdoIGNvbHVtbnMsIGJ1dCB0aGUgZWZmZWN0IHNob3VsZCBiZSBwcmV0dHkgc3VidGxl
LgotICAgICAgICBpZiAoY29tcHV0ZUludHJpbnNpY0hlaWdodCkgewotICAgICAgICAgICAgaW50
IGxvc3RTcGFjZSA9IGNvbEhlaWdodCAtIGNvbFJlY3QuaGVpZ2h0KCk7Ci0gICAgICAgICAgICBp
ZiAobG9zdFNwYWNlID4gcmVtYWluaW5nU2xvcFNwYWNlKSB7Ci0gICAgICAgICAgICAgICAgLy8g
UmVkZXN0cmlidXRlIHRoZSBzcGFjZSBhbW9uZyB0aGUgcmVtYWluaW5nIGNvbHVtbnMuCi0gICAg
ICAgICAgICAgICAgaW50IHNwYWNlVG9SZWRpc3RyaWJ1dGUgPSBsb3N0U3BhY2UgLSByZW1haW5p
bmdTbG9wU3BhY2U7Ci0gICAgICAgICAgICAgICAgaW50IHJlbWFpbmluZ0NvbHVtbnMgPSBjb2xD
b3VudCAtIGkgKyAxOwotICAgICAgICAgICAgICAgIGNvbEhlaWdodCArPSBzcGFjZVRvUmVkaXN0
cmlidXRlIC8gcmVtYWluaW5nQ29sdW1uczsKLSAgICAgICAgICAgIH0gCi0gICAgICAgICAgICBy
ZW1haW5pbmdTbG9wU3BhY2UgPSBtYXgoMCwgcmVtYWluaW5nU2xvcFNwYWNlIC0gbG9zdFNwYWNl
KTsKLSAgICAgICAgfQorYm9vbCBSZW5kZXJCbG9jazo6bGF5b3V0Q29sdW1ucyhib29sIGhhc1Nw
ZWNpZmllZFBhZ2VIZWlnaHQsIGludCBwYWdlSGVpZ2h0LCBMYXlvdXRTdGF0ZU1haW50YWluZXIm
IHN0YXRlUHVzaGVyKQoreworICAgIGlmIChoYXNDb2x1bW5zKCkpIHsKKyAgICAgICAgQ29sdW1u
SW5mbyogY29sSW5mbyA9IGNvbHVtbkluZm8oKTsKKyAgICAgICAgaW50IGRlc2lyZWRDb2x1bW5D
b3VudCA9IGNvbEluZm8tPmRlc2lyZWRDb2x1bW5Db3VudCgpOworICAgICAgICBpZiAoIWhhc1Nw
ZWNpZmllZFBhZ2VIZWlnaHQgJiYgY29udGVudEhlaWdodCgpID4gcGFnZUhlaWdodCAqIGRlc2ly
ZWRDb2x1bW5Db3VudCkgeworICAgICAgICAgICAgLy8gTm93IHRoYXQgd2Uga25vdyB0aGUgaW50
cmluc2ljIGhlaWdodCBvZiB0aGUgY29sdW1ucywgd2UgaGF2ZSB0byByZWJhbGFuY2UgdGhlbS4K
KyAgICAgICAgICAgIGludCBjb2x1bW5IZWlnaHQgPSBtYXgoY29sSW5mby0+bWluaW11bUNvbHVt
bkhlaWdodCgpLCAoaW50KWNlaWxmKChmbG9hdCljb250ZW50SGVpZ2h0KCkgLyBkZXNpcmVkQ29s
dW1uQ291bnQpKTsKKyAgICAgICAgICAgIGlmIChjb2x1bW5IZWlnaHQgPiAwKSB7CisgICAgICAg
ICAgICAgICAgc3RhdGVQdXNoZXIucG9wKCk7CisgICAgICAgICAgICAgICAgbV9ldmVySGFkTGF5
b3V0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBsYXlvdXRCbG9jayhmYWxzZSwgY29sdW1uSGVp
Z2h0KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSAKICAgICAgICAgCi0gICAgICAgIGlmIChzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIp
Ci0gICAgICAgICAgICBjdXJyWCArPSBkZXNpcmVkQ29sdW1uV2lkdGggKyBjb2xHYXA7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIGN1cnJYIC09IChkZXNpcmVkQ29sdW1uV2lkdGggKyBjb2xH
YXApOwotCi0gICAgICAgIGN1cnJZICs9IGNvbFJlY3QuaGVpZ2h0KCk7Ci0gICAgICAgIGF2YWls
YWJsZUhlaWdodCAtPSBjb2xSZWN0LmhlaWdodCgpOwotCi0gICAgICAgIG1heENvbEJvdHRvbSA9
IG1heChjb2xSZWN0LmJvdHRvbSgpLCBtYXhDb2xCb3R0b20pOworICAgICAgICBpZiAocGFnZUhl
aWdodCkgLy8gRklYTUU6IFNob3VsZCB3ZSB1c2UgbG93ZXN0UG9zaXRpb24gKGV4Y2x1ZGluZyBv
dXIgcG9zaXRpb25lZCBvYmplY3RzKSBpbnN0ZWFkIG9mIGNvbnRlbnRIZWlnaHQoKT8KKyAgICAg
ICAgICAgIGNvbEluZm8tPnNldENvbHVtbkNvdW50QW5kSGVpZ2h0KGNlaWxmKChmbG9hdCljb250
ZW50SGVpZ2h0KCkgLyBwYWdlSGVpZ2h0KSwgcGFnZUhlaWdodCk7CiAKLSAgICAgICAgaW5mby0+
YWRkQ29sdW1uUmVjdChjb2xSZWN0KTsKLSAgICAgICAgCi0gICAgICAgIC8vIFN0YXJ0IGFkZGlu
ZyBpbiBtb3JlIGNvbHVtbnMgYXMgbG9uZyBhcyB0aGVyZSdzIHN0aWxsIGNvbnRlbnQgbGVmdC4K
LSAgICAgICAgaWYgKGN1cnJZIDwgZW5kT2ZDb250ZW50ICYmIGkgPT0gY29sQ291bnQgLSAxICYm
IChjb21wdXRlSW50cmluc2ljSGVpZ2h0IHx8IGNvbnRlbnRIZWlnaHQoKSkpCi0gICAgICAgICAg
ICBjb2xDb3VudCsrOwotICAgIH0KKyAgICAgICAgaWYgKGNvbHVtbkNvdW50KGNvbEluZm8pKSB7
CisgICAgICAgICAgICBJbnRSZWN0IGxhc3RSZWN0ID0gY29sdW1uUmVjdEF0KGNvbEluZm8sIGNv
bHVtbkNvdW50KGNvbEluZm8pIC0gMSk7CisgICAgICAgICAgICBpbnQgb3ZlcmZsb3dMZWZ0ID0g
c3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gUlRMID8gbWluKDAsIGxhc3RSZWN0LngoKSkgOiAwOwor
ICAgICAgICAgICAgaW50IG92ZXJmbG93UmlnaHQgPSBzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBM
VFIgPyBtYXgod2lkdGgoKSwgbGFzdFJlY3QueCgpICsgbGFzdFJlY3Qud2lkdGgoKSkgOiAwOwor
ICAgICAgICAgICAgaW50IG92ZXJmbG93SGVpZ2h0ID0gYm9yZGVyVG9wKCkgKyBwYWRkaW5nVG9w
KCkgKyBjb2xJbmZvLT5jb2x1bW5IZWlnaHQoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
c2V0SGVpZ2h0KG92ZXJmbG93SGVpZ2h0ICsgYm9yZGVyQm90dG9tKCkgKyBwYWRkaW5nQm90dG9t
KCkgKyBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCkpOwogCi0gICAgaWYgKG1pbmltdW1Db2x1
bW5IZWlnaHQgPj0gMCkgewotICAgICAgICAvLyBJZiBvcmlnaW5hbENvbEhlaWdodCB3YXMgdG9v
IHNtYWxsLCB3ZSBuZWVkIHRvIHRyeSB0byBsYXlvdXQgYWdhaW4uCi0gICAgICAgIHJldHVybiBs
YXlvdXRDb2x1bW5zKGVuZE9mQ29udGVudCwgbWluaW11bUNvbHVtbkhlaWdodCk7CisgICAgICAg
ICAgICBtX292ZXJmbG93LmNsZWFyKCk7CisgICAgICAgICAgICBhZGRMYXlvdXRPdmVyZmxvdyhJ
bnRSZWN0KG92ZXJmbG93TGVmdCwgMCwgb3ZlcmZsb3dSaWdodCAtIG92ZXJmbG93TGVmdCwgb3Zl
cmZsb3dIZWlnaHQpKTsKKyAgICAgICAgfQogICAgIH0KLQotICAgIGludCBvdmVyZmxvd1JpZ2h0
ID0gbWF4KHdpZHRoKCksIGN1cnJYIC0gY29sR2FwKTsKLSAgICBpbnQgb3ZlcmZsb3dMZWZ0ID0g
bWluKDAsIGN1cnJYICsgZGVzaXJlZENvbHVtbldpZHRoICsgY29sR2FwKTsKLSAgICBpbnQgb3Zl
cmZsb3dIZWlnaHQgPSBtYXhDb2xCb3R0b207Ci0gICAgaW50IHRvQWRkID0gYm9yZGVyQm90dG9t
KCkgKyBwYWRkaW5nQm90dG9tKCkgKyBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCk7Ci0gICAg
ICAgIAotICAgIGlmIChjb21wdXRlSW50cmluc2ljSGVpZ2h0KQotICAgICAgICBzZXRIZWlnaHQo
bWF4Q29sQm90dG9tICsgdG9BZGQpOwotCi0gICAgbV9vdmVyZmxvdy5jbGVhcigpOwotICAgIGFk
ZExheW91dE92ZXJmbG93KEludFJlY3Qob3ZlcmZsb3dMZWZ0LCAwLCBvdmVyZmxvd1JpZ2h0IC0g
b3ZlcmZsb3dMZWZ0LCBvdmVyZmxvd0hlaWdodCkpOwotCi0gICAgdi0+c2V0UHJpbnRSZWN0KElu
dFJlY3QoKSk7Ci0gICAgdi0+c2V0VHJ1bmNhdGVkQXQoMCk7Ci0gICAgCi0gICAgQVNTRVJUKGNv
bENvdW50ID09IGluZm8tPmNvbHVtbkNvdW50KCkpOwogICAgIAotICAgIHJldHVybiBjb250ZW50
Qm90dG9tOworICAgIHJldHVybiBmYWxzZTsKIH0KIAogdm9pZCBSZW5kZXJCbG9jazo6YWRqdXN0
UG9pbnRUb0NvbHVtbkNvbnRlbnRzKEludFBvaW50JiBwb2ludCkgY29uc3QKQEAgLTQzMzAsMTcg
KzQ0NTYsMTcgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRqdXN0UG9pbnRUb0NvbHVtbkNvbgogICAg
ICAgICByZXR1cm47CiAgICAgCiAgICAgQ29sdW1uSW5mbyogY29sSW5mbyA9IGNvbHVtbkluZm8o
KTsKLSAgICBpZiAoIWNvbEluZm8tPmNvbHVtbkNvdW50KCkpCisgICAgaWYgKCFjb2x1bW5Db3Vu
dChjb2xJbmZvKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRGV0ZXJtaW5lIHdoaWNoIGNv
bHVtbnMgd2UgaW50ZXJzZWN0LgogICAgIGludCBjb2xHYXAgPSBjb2x1bW5HYXAoKTsKICAgICBp
bnQgbGVmdEdhcCA9IGNvbEdhcCAvIDI7Ci0gICAgSW50UG9pbnQgY29sdW1uUG9pbnQoY29sSW5m
by0+Y29sdW1uUmVjdEF0KDApLmxvY2F0aW9uKCkpOworICAgIEludFBvaW50IGNvbHVtblBvaW50
KGNvbHVtblJlY3RBdChjb2xJbmZvLCAwKS5sb2NhdGlvbigpKTsKICAgICBpbnQgeU9mZnNldCA9
IDA7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvbEluZm8tPmNvbHVtbkNvdW50KCk7
IGkrKykgewogICAgICAgICAvLyBBZGQgaW4gaGFsZiB0aGUgY29sdW1uIGdhcCB0byB0aGUgbGVm
dCBhbmQgcmlnaHQgb2YgdGhlIHJlY3QuCi0gICAgICAgIEludFJlY3QgY29sUmVjdCA9IGNvbElu
Zm8tPmNvbHVtblJlY3RBdChpKTsKKyAgICAgICAgSW50UmVjdCBjb2xSZWN0ID0gY29sdW1uUmVj
dEF0KGNvbEluZm8sIGkpOwogICAgICAgICBJbnRSZWN0IGdhcEFuZENvbHVtblJlY3QoY29sUmVj
dC54KCkgLSBsZWZ0R2FwLCBjb2xSZWN0LnkoKSwgY29sUmVjdC53aWR0aCgpICsgY29sR2FwLCBj
b2xSZWN0LmhlaWdodCgpKTsKIAogICAgICAgICBpZiAocG9pbnQueCgpID49IGdhcEFuZENvbHVt
blJlY3QueCgpICYmIHBvaW50LngoKSA8IGdhcEFuZENvbHVtblJlY3QucmlnaHQoKSkgewpAQCAt
NDM3OCw3ICs0NTA0LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRqdXN0UmVjdEZvckNvbHVtbnMo
SQogICAgIEludFJlY3QgcmVzdWx0OwogICAgIAogICAgIC8vIERldGVybWluZSB3aGljaCBjb2x1
bW5zIHdlIGludGVyc2VjdC4KLSAgICB1bnNpZ25lZCBjb2xDb3VudCA9IGNvbEluZm8tPmNvbHVt
bkNvdW50KCk7CisgICAgdW5zaWduZWQgY29sQ291bnQgPSBjb2x1bW5Db3VudChjb2xJbmZvKTsK
ICAgICBpZiAoIWNvbENvdW50KQogICAgICAgICByZXR1cm47CiAgICAgCkBAIC00Mzg2LDcgKzQ1
MTIsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGp1c3RSZWN0Rm9yQ29sdW1ucyhJCiAgICAgCiAg
ICAgaW50IGN1cnJZT2Zmc2V0ID0gMDsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY29s
Q291bnQ7IGkrKykgewotICAgICAgICBJbnRSZWN0IGNvbFJlY3QgPSBjb2xJbmZvLT5jb2x1bW5S
ZWN0QXQoaSk7CisgICAgICAgIEludFJlY3QgY29sUmVjdCA9IGNvbHVtblJlY3RBdChjb2xJbmZv
LCBpKTsKICAgICAgICAgaW50IGN1cnJYT2Zmc2V0ID0gY29sUmVjdC54KCkgLSBsZWZ0OwogICAg
ICAgICAKICAgICAgICAgSW50UmVjdCByZXBhaW50UmVjdCA9IHI7CkBAIC00NDEyLDkgKzQ1Mzgs
OSBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGp1c3RGb3JDb2x1bW5zKEludFNpCiAKICAgICBpbnQg
bGVmdCA9IGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCk7CiAgICAgaW50IHlPZmZzZXQgPSAw
OwotICAgIHNpemVfdCBjb2x1bW5Db3VudCA9IGNvbEluZm8tPmNvbHVtbkNvdW50KCk7Ci0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb2x1bW5Db3VudDsgKytpKSB7Ci0gICAgICAgIEludFJl
Y3QgY29sdW1uUmVjdCA9IGNvbEluZm8tPmNvbHVtblJlY3RBdChpKTsKKyAgICBzaXplX3QgY29s
Q291bnQgPSBjb2x1bW5Db3VudChjb2xJbmZvKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGNvbENvdW50OyArK2kpIHsKKyAgICAgICAgSW50UmVjdCBjb2x1bW5SZWN0ID0gY29sdW1uUmVj
dEF0KGNvbEluZm8sIGkpOwogICAgICAgICBpbnQgeE9mZnNldCA9IGNvbHVtblJlY3QueCgpIC0g
bGVmdDsKICAgICAgICAgaWYgKHBvaW50LnkoKSA8IGNvbHVtblJlY3QuYm90dG9tKCkgKyB5T2Zm
c2V0KSB7CiAgICAgICAgICAgICBvZmZzZXQuZXhwYW5kKHhPZmZzZXQsIC15T2Zmc2V0KTsKQEAg
LTUzOTIsMjQgKzU1MTgsNDQgQEAgdm9pZCBSZW5kZXJCbG9jazo6Y2xlYXJUcnVuY2F0aW9uKCkK
IAogdm9pZCBSZW5kZXJCbG9jazo6c2V0TWF4VG9wTWFyZ2lucyhpbnQgcG9zLCBpbnQgbmVnKQog
ewotICAgIGlmICghbV9tYXhNYXJnaW4pIHsKLSAgICAgICAgaWYgKHBvcyA9PSBNYXhNYXJnaW46
OnRvcFBvc0RlZmF1bHQodGhpcykgJiYgbmVnID09IE1heE1hcmdpbjo6dG9wTmVnRGVmYXVsdCh0
aGlzKSkKKyAgICBpZiAoIW1fcmFyZURhdGEpIHsKKyAgICAgICAgaWYgKHBvcyA9PSBSZW5kZXJC
bG9ja1JhcmVEYXRhOjp0b3BQb3NEZWZhdWx0KHRoaXMpICYmIG5lZyA9PSBSZW5kZXJCbG9ja1Jh
cmVEYXRhOjp0b3BOZWdEZWZhdWx0KHRoaXMpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBtX21heE1hcmdpbiA9IG5ldyBNYXhNYXJnaW4odGhpcyk7CisgICAgICAgIG1fcmFyZURhdGEg
PSBuZXcgUmVuZGVyQmxvY2tSYXJlRGF0YSh0aGlzKTsKICAgICB9Ci0gICAgbV9tYXhNYXJnaW4t
Pm1fdG9wUG9zID0gcG9zOwotICAgIG1fbWF4TWFyZ2luLT5tX3RvcE5lZyA9IG5lZzsKKyAgICBt
X3JhcmVEYXRhLT5tX3RvcFBvcyA9IHBvczsKKyAgICBtX3JhcmVEYXRhLT5tX3RvcE5lZyA9IG5l
ZzsKIH0KIAogdm9pZCBSZW5kZXJCbG9jazo6c2V0TWF4Qm90dG9tTWFyZ2lucyhpbnQgcG9zLCBp
bnQgbmVnKQogewotICAgIGlmICghbV9tYXhNYXJnaW4pIHsKLSAgICAgICAgaWYgKHBvcyA9PSBN
YXhNYXJnaW46OmJvdHRvbVBvc0RlZmF1bHQodGhpcykgJiYgbmVnID09IE1heE1hcmdpbjo6Ym90
dG9tTmVnRGVmYXVsdCh0aGlzKSkKKyAgICBpZiAoIW1fcmFyZURhdGEpIHsKKyAgICAgICAgaWYg
KHBvcyA9PSBSZW5kZXJCbG9ja1JhcmVEYXRhOjpib3R0b21Qb3NEZWZhdWx0KHRoaXMpICYmIG5l
ZyA9PSBSZW5kZXJCbG9ja1JhcmVEYXRhOjpib3R0b21OZWdEZWZhdWx0KHRoaXMpKQogICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBtX21heE1hcmdpbiA9IG5ldyBNYXhNYXJnaW4odGhpcyk7
CisgICAgICAgIG1fcmFyZURhdGEgPSBuZXcgUmVuZGVyQmxvY2tSYXJlRGF0YSh0aGlzKTsKICAg
ICB9Ci0gICAgbV9tYXhNYXJnaW4tPm1fYm90dG9tUG9zID0gcG9zOwotICAgIG1fbWF4TWFyZ2lu
LT5tX2JvdHRvbU5lZyA9IG5lZzsKKyAgICBtX3JhcmVEYXRhLT5tX2JvdHRvbVBvcyA9IHBvczsK
KyAgICBtX3JhcmVEYXRhLT5tX2JvdHRvbU5lZyA9IG5lZzsKK30KKwordm9pZCBSZW5kZXJCbG9j
azo6c2V0UGFnaW5hdGlvblN0cnV0KGludCBzdHJ1dCkKK3sKKyAgICBpZiAoIW1fcmFyZURhdGEp
IHsKKyAgICAgICAgaWYgKHN0cnV0ID09IDApCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IG1fcmFyZURhdGEgPSBuZXcgUmVuZGVyQmxvY2tSYXJlRGF0YSh0aGlzKTsKKyAgICB9CisgICAg
bV9yYXJlRGF0YS0+bV9wYWdpbmF0aW9uU3RydXQgPSBzdHJ1dDsKK30KKwordm9pZCBSZW5kZXJC
bG9jazo6c2V0UGFnZVkoaW50IHkpCit7CisgICAgaWYgKCFtX3JhcmVEYXRhKSB7CisgICAgICAg
IGlmICh5ID09IDApCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fcmFyZURhdGEgPSBu
ZXcgUmVuZGVyQmxvY2tSYXJlRGF0YSh0aGlzKTsKKyAgICB9CisgICAgbV9yYXJlRGF0YS0+bV9w
YWdlWSA9IHk7CiB9CiAKIHZvaWQgUmVuZGVyQmxvY2s6OmFic29sdXRlUmVjdHMoVmVjdG9yPElu
dFJlY3Q+JiByZWN0cywgaW50IHR4LCBpbnQgdHkpCkBAIC01NjcwLDYgKzU4MTYsOTggQEAgUmVu
ZGVyQmxvY2sqIFJlbmRlckJsb2NrOjpjcmVhdGVBbm9ueW1vdQogICAgIHJldHVybiBuZXdCb3g7
CiB9CiAKK2ludCBSZW5kZXJCbG9jazo6bmV4dFBhZ2VUb3AoaW50IHlQb3MpIGNvbnN0Cit7Cisg
ICAgTGF5b3V0U3RhdGUqIGxheW91dFN0YXRlID0gdmlldygpLT5sYXlvdXRTdGF0ZSgpOworICAg
IGlmICghbGF5b3V0U3RhdGUtPm1fcGFnZUhlaWdodCkKKyAgICAgICAgcmV0dXJuIHlQb3M7Cisg
ICAgCisgICAgLy8gVGhlIHlQb3MgaXMgaW4gb3VyIGNvb3JkaW5hdGUgc3BhY2UuICBXZSBjYW4g
YWRkIGluIG91ciBwdXNoZWQgb2Zmc2V0LgorICAgIGludCBwYWdlSGVpZ2h0ID0gbGF5b3V0U3Rh
dGUtPm1fcGFnZUhlaWdodDsKKyAgICBpbnQgcmVtYWluaW5nSGVpZ2h0ID0gcGFnZUhlaWdodCAt
ICgobGF5b3V0U3RhdGUtPm1fbGF5b3V0T2Zmc2V0IC0gbGF5b3V0U3RhdGUtPm1fcGFnZU9mZnNl
dCkuaGVpZ2h0KCkgKyB5UG9zKSAlIHBhZ2VIZWlnaHQ7CisgICAgcmV0dXJuIHlQb3MgKyByZW1h
aW5pbmdIZWlnaHQ7Cit9CisKK2ludCBSZW5kZXJCbG9jazo6YXBwbHlCZWZvcmVCcmVhayhSZW5k
ZXJCb3gqIGNoaWxkLCBpbnQgeVBvcykKK3sKKyAgICBib29sIGNoZWNrUGFnZUJyZWFrcyA9IGRv
Y3VtZW50KCktPnBhZ2luYXRlZCgpICYmIGRvY3VtZW50KCktPnNldHRpbmdzKCktPnBhZ2luYXRl
RHVyaW5nTGF5b3V0RW5hYmxlZCgpOworICAgIGJvb2wgY2hlY2tDb2x1bW5CcmVha3MgPSB2aWV3
KCktPmxheW91dFN0YXRlKCktPnBhZ2luYXRpbmdDb2x1bW5zKCk7CisgICAgYm9vbCBjaGVja0Jl
Zm9yZUFsd2F5cyA9IChjaGVja1BhZ2VCcmVha3MgJiYgY2hpbGQtPnN0eWxlKCktPnBhZ2VCcmVh
a0JlZm9yZSgpID09IFBCQUxXQVlTKSB8fCAoY2hlY2tDb2x1bW5CcmVha3MgJiYgY2hpbGQtPnN0
eWxlKCktPmNvbHVtbkJyZWFrQmVmb3JlKCkgPT0gUEJBTFdBWVMpOworICAgIGlmIChjaGVja0Jl
Zm9yZUFsd2F5cykKKyAgICAgICAgcmV0dXJuIG5leHRQYWdlVG9wKHlQb3MpOworICAgIHJldHVy
biB5UG9zOworfQorCitpbnQgUmVuZGVyQmxvY2s6OmFwcGx5QWZ0ZXJCcmVhayhSZW5kZXJCb3gq
IGNoaWxkLCBpbnQgeVBvcywgTWFyZ2luSW5mbyYgbWFyZ2luSW5mbykKK3sKKyAgICBib29sIGNo
ZWNrUGFnZUJyZWFrcyA9IGRvY3VtZW50KCktPnBhZ2luYXRlZCgpICYmIGRvY3VtZW50KCktPnNl
dHRpbmdzKCktPnBhZ2luYXRlRHVyaW5nTGF5b3V0RW5hYmxlZCgpOworICAgIGJvb2wgY2hlY2tD
b2x1bW5CcmVha3MgPSB2aWV3KCktPmxheW91dFN0YXRlKCktPnBhZ2luYXRpbmdDb2x1bW5zKCk7
CisgICAgYm9vbCBjaGVja0FmdGVyQWx3YXlzID0gKGNoZWNrUGFnZUJyZWFrcyAmJiBjaGlsZC0+
c3R5bGUoKS0+cGFnZUJyZWFrQWZ0ZXIoKSA9PSBQQkFMV0FZUykgfHwgKGNoZWNrQ29sdW1uQnJl
YWtzICYmIGNoaWxkLT5zdHlsZSgpLT5jb2x1bW5CcmVha0FmdGVyKCkgPT0gUEJBTFdBWVMpOwor
ICAgIGlmIChjaGVja0FmdGVyQWx3YXlzKSB7CisgICAgICAgIG1hcmdpbkluZm8uc2V0Qm90dG9t
UXVpcmsodHJ1ZSk7IC8vIENhdXNlIG1hcmdpbnMgdG8gYmUgZGlzY2FyZGVkIGZvciBhbnkgZm9s
bG93aW5nIGNvbnRlbnQuCisgICAgICAgIHJldHVybiBuZXh0UGFnZVRvcCh5UG9zKTsKKyAgICB9
CisgICAgcmV0dXJuIHlQb3M7Cit9CisKK2ludCBSZW5kZXJCbG9jazo6YWRqdXN0Rm9yVW5zcGxp
dHRhYmxlQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCwgaW50IHlQb3MsIGJvb2wgaW5jbHVkZU1hcmdp
bnMpCit7CisgICAgYm9vbCBpc1Vuc3BsaXR0YWJsZSA9IGNoaWxkLT5pc1JlcGxhY2VkKCkgfHwg
Y2hpbGQtPnNjcm9sbHNPdmVyZmxvdygpOworICAgIGlmICghaXNVbnNwbGl0dGFibGUpCisgICAg
ICAgIHJldHVybiB5UG9zOworICAgIGludCBjaGlsZEhlaWdodCA9IGNoaWxkLT5oZWlnaHQoKSAr
IChpbmNsdWRlTWFyZ2lucyA/IGNoaWxkLT5tYXJnaW5Ub3AoKSArIGNoaWxkLT5tYXJnaW5Cb3R0
b20oKSA6IDApOworICAgIExheW91dFN0YXRlKiBsYXlvdXRTdGF0ZSA9IHZpZXcoKS0+bGF5b3V0
U3RhdGUoKTsKKyAgICBpZiAobGF5b3V0U3RhdGUtPm1fY29sdW1uSW5mbykKKyAgICAgICAgbGF5
b3V0U3RhdGUtPm1fY29sdW1uSW5mby0+dXBkYXRlTWluaW11bUNvbHVtbkhlaWdodChjaGlsZEhl
aWdodCk7CisgICAgaW50IHBhZ2VIZWlnaHQgPSBsYXlvdXRTdGF0ZS0+bV9wYWdlSGVpZ2h0Owor
ICAgIGlmICghcGFnZUhlaWdodCB8fCBjaGlsZEhlaWdodCA+IHBhZ2VIZWlnaHQpCisgICAgICAg
IHJldHVybiB5UG9zOworICAgIGludCByZW1haW5pbmdIZWlnaHQgPSBwYWdlSGVpZ2h0IC0gKChs
YXlvdXRTdGF0ZS0+bV9sYXlvdXRPZmZzZXQgLSBsYXlvdXRTdGF0ZS0+bV9wYWdlT2Zmc2V0KS5o
ZWlnaHQoKSArIHlQb3MpICUgcGFnZUhlaWdodDsKKyAgICBpZiAocmVtYWluaW5nSGVpZ2h0IDwg
Y2hpbGRIZWlnaHQpCisgICAgICAgIHJldHVybiB5UG9zICsgcmVtYWluaW5nSGVpZ2h0OworICAg
IHJldHVybiB5UG9zOworfQorCit2b2lkIFJlbmRlckJsb2NrOjphZGp1c3RMaW5lUG9zaXRpb25G
b3JQYWdpbmF0aW9uKFJvb3RJbmxpbmVCb3gqIGxpbmVCb3gsIGludCYgZGVsdGEpCit7CisgICAg
Ly8gRklYTUU6IEZvciBub3cgd2UgcGFnaW5hdGUgdXNpbmcgbGluZSBvdmVyZmxvdy4gIFRoaXMg
ZW5zdXJlcyB0aGF0IGxpbmVzIGRvbid0IG92ZXJsYXAgYXQgYWxsIHdoZW4gd2UKKyAgICAvLyBw
dXQgYSBzdHJ1dCBiZXR3ZWVuIHRoZW0gZm9yIHBhZ2luYXRpb24gcHVycG9zZXMuICBIb3dldmVy
LCB0aGlzIHJlYWxseSBpc24ndCB0aGUgZGVzaXJlZCByZW5kZXJpbmcsIHNpbmNlCisgICAgLy8g
dGhlIGxpbmUgb24gdGhlIHRvcCBvZiB0aGUgbmV4dCBwYWdlIHdpbGwgYXBwZWFyIHRvbyBmYXIg
ZG93biByZWxhdGl2ZSB0byB0aGUgc2FtZSBraW5kIG9mIGxpbmUgYXQgdGhlIHRvcAorICAgIC8v
IG9mIHRoZSBmaXJzdCBjb2x1bW4uCisgICAgLy8KKyAgICAvLyBUaGUgcmVuZGVyaW5nIHdlIHdv
dWxkIGxpa2UgdG8gc2VlIGlzIG9uZSB3aGVyZSB0aGUgbGluZVRvcCBpcyBhdCB0aGUgdG9wIG9m
IHRoZSBjb2x1bW4sIGFuZCBhbnkgbGluZSBvdmVyZmxvdworICAgIC8vIHNpbXBseSBzcGlsbHMg
b3V0IGFib3ZlIHRoZSB0b3Agb2YgdGhlIGNvbHVtbi4gIFRoaXMgZWZmZWN0IHdvdWxkIG1hdGNo
IHdoYXQgaGFwcGVucyBhdCB0aGUgdG9wIG9mIHRoZSBmaXJzdCBjb2x1bW4uCisgICAgLy8gV2Ug
Y2FuJ3QgYWNoaWV2ZSB0aGlzIHJlbmRlcmluZywgaG93ZXZlciwgdW50aWwgd2Ugc3RvcCBjb2x1
bW5zIGZyb20gY2xpcHBpbmcgdG8gdGhlIGNvbHVtbiBib3VuZHMgKHRodXMgYWxsb3dpbmcKKyAg
ICAvLyBmb3Igb3ZlcmZsb3cgdG8gb2NjdXIpLCBhbmQgdGhlbiBjYWNoZSB2aXNpYmxlIG92ZXJm
bG93IGZvciBlYWNoIGNvbHVtbiByZWN0LgorICAgIC8vCisgICAgLy8gRnVydGhlcm1vcmUsIHRo
ZSBwYWludCB3ZSBoYXZlIHRvIGRvIHdoZW4gYSBjb2x1bW4gaGFzIG92ZXJmbG93IGhhcyB0byBi
ZSBzcGVjaWFsLiAgV2UgbmVlZCB0byBleGNsdWRlCisgICAgLy8gY29udGVudCB0aGF0IHBhaW50
cyBpbiBhIHByZXZpb3VzIGNvbHVtbiAoYW5kIGNvbnRlbnQgdGhhdCBwYWludHMgaW4gdGhlIGZv
bGxvd2luZyBjb2x1bW4pLgorICAgIC8vCisgICAgLy8gRklYTUU6IEFub3RoZXIgcHJvYmxlbSB3
aXRoIHNpbXBseSBtb3ZpbmcgbGluZXMgaXMgdGhhdCB0aGUgYXZhaWxhYmxlIGxpbmUgd2lkdGgg
bWF5IGNoYW5nZSAoYmVjYXVzZSBvZiBmbG9hdHMpLgorICAgIC8vIFRlY2huaWNhbGx5IGlmIHRo
ZSBsb2NhdGlvbiB3ZSBtb3ZlIHRoZSBsaW5lIHRvIGhhcyBhIGRpZmZlcmVudCBsaW5lIHdpZHRo
IHRoYW4gb3VyIG9sZCBwb3NpdGlvbiwgdGhlbiB3ZSBuZWVkIHRvIGRpcnR5IHRoZQorICAgIC8v
IGxpbmUgYW5kIGFsbCBmb2xsb3dpbmcgbGluZXMuCisgICAgTGF5b3V0U3RhdGUqIGxheW91dFN0
YXRlID0gdmlldygpLT5sYXlvdXRTdGF0ZSgpOworICAgIGludCBwYWdlSGVpZ2h0ID0gbGF5b3V0
U3RhdGUtPm1fcGFnZUhlaWdodDsKKyAgICBpbnQgeVBvcyA9IGxpbmVCb3gtPnRvcFZpc2libGVP
dmVyZmxvdygpOworICAgIGludCBsaW5lSGVpZ2h0ID0gbGluZUJveC0+Ym90dG9tVmlzaWJsZU92
ZXJmbG93KCkgLSB5UG9zOworICAgIGlmIChsYXlvdXRTdGF0ZS0+bV9jb2x1bW5JbmZvKQorICAg
ICAgICBsYXlvdXRTdGF0ZS0+bV9jb2x1bW5JbmZvLT51cGRhdGVNaW5pbXVtQ29sdW1uSGVpZ2h0
KGxpbmVIZWlnaHQpOworICAgIHlQb3MgKz0gZGVsdGE7CisgICAgbGluZUJveC0+c2V0UGFnaW5h
dGlvblN0cnV0KDApOworICAgIGlmICghcGFnZUhlaWdodCB8fCBsaW5lSGVpZ2h0ID4gcGFnZUhl
aWdodCkKKyAgICAgICAgcmV0dXJuOworICAgIGludCByZW1haW5pbmdIZWlnaHQgPSBwYWdlSGVp
Z2h0IC0gKChsYXlvdXRTdGF0ZS0+bV9sYXlvdXRPZmZzZXQgLSBsYXlvdXRTdGF0ZS0+bV9wYWdl
T2Zmc2V0KS5oZWlnaHQoKSArIHlQb3MpICUgcGFnZUhlaWdodDsKKyAgICBpZiAocmVtYWluaW5n
SGVpZ2h0IDwgbGluZUhlaWdodCkgeworICAgICAgICBpbnQgdG90YWxIZWlnaHQgPSBsaW5lSGVp
Z2h0ICsgbWF4KDAsIHlQb3MpOworICAgICAgICBpZiAobGluZUJveCA9PSBmaXJzdFJvb3RCb3go
KSAmJiB0b3RhbEhlaWdodCA8IHBhZ2VIZWlnaHQgJiYgIWlzUG9zaXRpb25lZCgpICYmICFpc1Rh
YmxlQ2VsbCgpKQorICAgICAgICAgICAgc2V0UGFnaW5hdGlvblN0cnV0KHJlbWFpbmluZ0hlaWdo
dCArIG1heCgwLCB5UG9zKSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZGVsdGEgKz0g
cmVtYWluaW5nSGVpZ2h0OworICAgICAgICAgICAgbGluZUJveC0+c2V0UGFnaW5hdGlvblN0cnV0
KHJlbWFpbmluZ0hlaWdodCk7CisgICAgICAgIH0KKyAgICB9ICAKK30KKyAKIGNvbnN0IGNoYXIq
IFJlbmRlckJsb2NrOjpyZW5kZXJOYW1lKCkgY29uc3QKIHsKICAgICBpZiAoaXNCb2R5KCkpCklu
ZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHJldmlzaW9uIDY2OTAzKQorKysgV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENvbHVtbkluZm87CiBjbGFzcyBJbmxpbmVJdGVy
YXRvcjsKK2NsYXNzIExheW91dFN0YXRlTWFpbnRhaW5lcjsKIGNsYXNzIFJlbmRlcklubGluZTsK
IAogc3RydWN0IEJpZGlSdW47CkBAIC03MCw3ICs3MSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IHZvaWQgYWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZv
cmVDaGlsZCA9IDApOwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDaGlsZChSZW5kZXJPYmplY3Qq
KTsKIAotICAgIHZpcnR1YWwgdm9pZCBsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4p
OworICAgIHZpcnR1YWwgdm9pZCBsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIGlu
dCBwYWdlSGVpZ2h0ID0gMCk7CiAKICAgICB2b2lkIGluc2VydFBvc2l0aW9uZWRPYmplY3QoUmVu
ZGVyQm94Kik7CiAgICAgdm9pZCByZW1vdmVQb3NpdGlvbmVkT2JqZWN0KFJlbmRlckJveCopOwpA
QCAtODksNiArOTAsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIG1hcmtBbGxEZXNjZW5kYW50c1dp
dGhGbG9hdHNGb3JMYXlvdXQoUmVuZGVyQm94KiBmbG9hdFRvUmVtb3ZlID0gMCwgYm9vbCBpbkxh
eW91dCA9IHRydWUpOwogICAgIHZvaWQgbWFya1Bvc2l0aW9uZWRPYmplY3RzRm9yTGF5b3V0KCk7
CisgICAgdm9pZCBtYXJrRGVzY2VuZGFudEJsb2Nrc0FuZExpbmVzRm9yTGF5b3V0KGJvb2wgaW5M
YXlvdXQgPSB0cnVlKTsKIAogICAgIGJvb2wgY29udGFpbnNGbG9hdHMoKSB7IHJldHVybiBtX2Zs
b2F0aW5nT2JqZWN0cyAmJiAhbV9mbG9hdGluZ09iamVjdHMtPmlzRW1wdHkoKTsgfQogICAgIGJv
b2wgY29udGFpbnNGbG9hdChSZW5kZXJPYmplY3QqKTsKQEAgLTE1MSw2ICsxNTMsMTAgQEAgcHVi
bGljOgogCiAgICAgQ29sdW1uSW5mbyogY29sdW1uSW5mbygpIGNvbnN0OwogICAgIGludCBjb2x1
bW5HYXAoKSBjb25zdDsKKyAgICAKKyAgICAvLyBUaGVzZSB0d28gZnVuY3Rpb25zIHRha2UgdGhl
IENvbHVtbkluZm8qIHRvIGF2b2lkIHJlcGVhdGVkIGxvb2t1cHMgb2YgdGhlIGluZm8gaW4gdGhl
IGdsb2JhbCBIYXNoTWFwLgorICAgIHVuc2lnbmVkIGNvbHVtbkNvdW50KENvbHVtbkluZm8qKSBj
b25zdDsKKyAgICBJbnRSZWN0IGNvbHVtblJlY3RBdChDb2x1bW5JbmZvKiwgdW5zaWduZWQpIGNv
bnN0OwogCiBwcm90ZWN0ZWQ6CiAgICAgLy8gVGhlc2UgZnVuY3Rpb25zIGFyZSBvbmx5IHVzZWQg
aW50ZXJuYWxseSB0byBtYW5pcHVsYXRlIHRoZSByZW5kZXIgdHJlZSBzdHJ1Y3R1cmUgdmlhIHJl
bW92ZS9pbnNlcnQvYXBwZW5kQ2hpbGROb2RlLgpAQCAtMTc3LDIwICsxODMsMjUgQEAgcHJvdGVj
dGVkOgogICAgIH0KICAgICB2b2lkIG1vdmVDaGlsZHJlblRvKFJlbmRlckJsb2NrKiB0bywgUmVu
ZGVyT2JqZWN0KiBzdGFydENoaWxkLCBSZW5kZXJPYmplY3QqIGVuZENoaWxkLCBSZW5kZXJPYmpl
Y3QqIGJlZm9yZUNoaWxkLCBib29sIGZ1bGxSZW1vdmVJbnNlcnQgPSBmYWxzZSk7CiAgICAgCi0g
ICAgaW50IG1heFRvcFBvc01hcmdpbigpIGNvbnN0IHsgcmV0dXJuIG1fbWF4TWFyZ2luID8gbV9t
YXhNYXJnaW4tPm1fdG9wUG9zIDogTWF4TWFyZ2luOjp0b3BQb3NEZWZhdWx0KHRoaXMpOyB9Ci0g
ICAgaW50IG1heFRvcE5lZ01hcmdpbigpIGNvbnN0IHsgcmV0dXJuIG1fbWF4TWFyZ2luID8gbV9t
YXhNYXJnaW4tPm1fdG9wTmVnIDogTWF4TWFyZ2luOjp0b3BOZWdEZWZhdWx0KHRoaXMpOyB9Ci0g
ICAgaW50IG1heEJvdHRvbVBvc01hcmdpbigpIGNvbnN0IHsgcmV0dXJuIG1fbWF4TWFyZ2luID8g
bV9tYXhNYXJnaW4tPm1fYm90dG9tUG9zIDogTWF4TWFyZ2luOjpib3R0b21Qb3NEZWZhdWx0KHRo
aXMpOyB9Ci0gICAgaW50IG1heEJvdHRvbU5lZ01hcmdpbigpIGNvbnN0IHsgcmV0dXJuIG1fbWF4
TWFyZ2luID8gbV9tYXhNYXJnaW4tPm1fYm90dG9tTmVnIDogTWF4TWFyZ2luOjpib3R0b21OZWdE
ZWZhdWx0KHRoaXMpOyB9CisgICAgaW50IG1heFRvcFBvc01hcmdpbigpIGNvbnN0IHsgcmV0dXJu
IG1fcmFyZURhdGEgPyBtX3JhcmVEYXRhLT5tX3RvcFBvcyA6IFJlbmRlckJsb2NrUmFyZURhdGE6
OnRvcFBvc0RlZmF1bHQodGhpcyk7IH0KKyAgICBpbnQgbWF4VG9wTmVnTWFyZ2luKCkgY29uc3Qg
eyByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1fdG9wTmVnIDogUmVuZGVyQmxvY2tS
YXJlRGF0YTo6dG9wTmVnRGVmYXVsdCh0aGlzKTsgfQorICAgIGludCBtYXhCb3R0b21Qb3NNYXJn
aW4oKSBjb25zdCB7IHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+bV9ib3R0b21Qb3Mg
OiBSZW5kZXJCbG9ja1JhcmVEYXRhOjpib3R0b21Qb3NEZWZhdWx0KHRoaXMpOyB9CisgICAgaW50
IG1heEJvdHRvbU5lZ01hcmdpbigpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVE
YXRhLT5tX2JvdHRvbU5lZyA6IFJlbmRlckJsb2NrUmFyZURhdGE6OmJvdHRvbU5lZ0RlZmF1bHQo
dGhpcyk7IH0KKyAgICBpbnQgcGFnaW5hdGlvblN0cnV0KCkgY29uc3QgeyByZXR1cm4gbV9yYXJl
RGF0YSA/IG1fcmFyZURhdGEtPm1fcGFnaW5hdGlvblN0cnV0IDogMDsgfQorICAgIGludCBwYWdl
WSgpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVEYXRhLT5tX3BhZ2VZIDogMDsg
fQogICAgIHZvaWQgc2V0TWF4VG9wTWFyZ2lucyhpbnQgcG9zLCBpbnQgbmVnKTsKICAgICB2b2lk
IHNldE1heEJvdHRvbU1hcmdpbnMoaW50IHBvcywgaW50IG5lZyk7Ci0gICAgCisgICAgdm9pZCBz
ZXRQYWdpbmF0aW9uU3RydXQoaW50IHN0cnV0KTsKKyAgICB2b2lkIHNldFBhZ2VZKGludCB5KTsK
KwogICAgIHZvaWQgaW5pdE1heE1hcmdpblZhbHVlcygpCiAgICAgewotICAgICAgICBpZiAobV9t
YXhNYXJnaW4pIHsKLSAgICAgICAgICAgIG1fbWF4TWFyZ2luLT5tX3RvcFBvcyA9IE1heE1hcmdp
bjo6dG9wUG9zRGVmYXVsdCh0aGlzKTsKLSAgICAgICAgICAgIG1fbWF4TWFyZ2luLT5tX3RvcE5l
ZyA9IE1heE1hcmdpbjo6dG9wTmVnRGVmYXVsdCh0aGlzKTsKLSAgICAgICAgICAgIG1fbWF4TWFy
Z2luLT5tX2JvdHRvbVBvcyA9IE1heE1hcmdpbjo6Ym90dG9tUG9zRGVmYXVsdCh0aGlzKTsKLSAg
ICAgICAgICAgIG1fbWF4TWFyZ2luLT5tX2JvdHRvbU5lZyA9IE1heE1hcmdpbjo6Ym90dG9tTmVn
RGVmYXVsdCh0aGlzKTsKKyAgICAgICAgaWYgKG1fcmFyZURhdGEpIHsKKyAgICAgICAgICAgIG1f
cmFyZURhdGEtPm1fdG9wUG9zID0gUmVuZGVyQmxvY2tSYXJlRGF0YTo6dG9wUG9zRGVmYXVsdCh0
aGlzKTsKKyAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fdG9wTmVnID0gUmVuZGVyQmxvY2tSYXJl
RGF0YTo6dG9wTmVnRGVmYXVsdCh0aGlzKTsKKyAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fYm90
dG9tUG9zID0gUmVuZGVyQmxvY2tSYXJlRGF0YTo6Ym90dG9tUG9zRGVmYXVsdCh0aGlzKTsKKyAg
ICAgICAgICAgIG1fcmFyZURhdGEtPm1fYm90dG9tTmVnID0gUmVuZGVyQmxvY2tSYXJlRGF0YTo6
Ym90dG9tTmVnRGVmYXVsdCh0aGlzKTsKKyAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fcGFnaW5h
dGlvblN0cnV0ID0gMDsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjk1LDkgKzMwNiw0MiBAQCBw
cml2YXRlOgogICAgICAgICBib29sIGV2ZXJIYWRMYXlvdXQ7CiAgICAgfTsKIAorICAgIHN0cnVj
dCBGbG9hdGluZ09iamVjdCA6IE5vbmNvcHlhYmxlIHsKKyAgICAgICAgZW51bSBUeXBlIHsKKyAg
ICAgICAgICAgIEZsb2F0TGVmdCwKKyAgICAgICAgICAgIEZsb2F0UmlnaHQKKyAgICAgICAgfTsK
KworICAgICAgICBGbG9hdGluZ09iamVjdChUeXBlIHR5cGUpCisgICAgICAgICAgICA6IG1fcmVu
ZGVyZXIoMCkKKyAgICAgICAgICAgICwgbV90b3AoMCkKKyAgICAgICAgICAgICwgbV9ib3R0b20o
MCkKKyAgICAgICAgICAgICwgbV9sZWZ0KDApCisgICAgICAgICAgICAsIG1fd2lkdGgoMCkKKyAg
ICAgICAgICAgICwgbV9wYWdpbmF0aW9uU3RydXQoMCkKKyAgICAgICAgICAgICwgbV90eXBlKHR5
cGUpCisgICAgICAgICAgICAsIG1fc2hvdWxkUGFpbnQodHJ1ZSkKKyAgICAgICAgICAgICwgbV9p
c0Rlc2NlbmRhbnQoZmFsc2UpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIFR5cGUg
dHlwZSgpIHsgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGU+KG1fdHlwZSk7IH0KKworICAgICAgICBS
ZW5kZXJCb3gqIG1fcmVuZGVyZXI7CisgICAgICAgIGludCBtX3RvcDsKKyAgICAgICAgaW50IG1f
Ym90dG9tOworICAgICAgICBpbnQgbV9sZWZ0OworICAgICAgICBpbnQgbV93aWR0aDsKKyAgICAg
ICAgaW50IG1fcGFnaW5hdGlvblN0cnV0OworICAgICAgICB1bnNpZ25lZCBtX3R5cGUgOiAxOyAv
LyBUeXBlIChsZWZ0IG9yIHJpZ2h0IGFsaWduZWQpCisgICAgICAgIGJvb2wgbV9zaG91bGRQYWlu
dCA6IDE7CisgICAgICAgIGJvb2wgbV9pc0Rlc2NlbmRhbnQgOiAxOworICAgIH07CisKICAgICAv
LyBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucycgaW1wbGVtZW50YXRpb25zIGFyZSBpbiBSZW5kZXJC
bG9ja0xpbmVMYXlvdXQuY3BwLgogICAgIFJvb3RJbmxpbmVCb3gqIGRldGVybWluZVN0YXJ0UG9z
aXRpb24oYm9vbCYgZmlyc3RMaW5lLCBib29sJiBmdWxsTGF5b3V0LCBib29sJiBwcmV2aW91c0xp
bmVCcm9rZUNsZWFubHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBJbmxpbmVCaWRpUmVzb2x2ZXImLCBWZWN0b3I8RmxvYXRXaXRoUmVjdD4mIGZsb2F0cywgdW5z
aWduZWQmIG51bUNsZWFuRmxvYXRzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIElubGluZUJpZGlSZXNvbHZlciYsIFZlY3RvcjxGbG9hdFdpdGhSZWN0PiYgZmxv
YXRzLCB1bnNpZ25lZCYgbnVtQ2xlYW5GbG9hdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBib29sJiB1c2VSZXBhaW50Qm91bmRzLCBpbnQmIHJlcGFpbnRUb3As
IGludCYgcmVwYWludEJvdHRvbSk7CiAgICAgUm9vdElubGluZUJveCogZGV0ZXJtaW5lRW5kUG9z
aXRpb24oUm9vdElubGluZUJveCogc3RhcnRCb3gsIElubGluZUl0ZXJhdG9yJiBjbGVhbkxpbmVT
dGFydCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWRpU3RhdHVz
JiBjbGVhbkxpbmVCaWRpU3RhdHVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCYgeVBvcyk7CkBAIC0zMDUsOSArMzQ5LDkgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICAgICAgICAgIFJvb3RJbmxpbmVCb3gqJiBlbmRMaW5lLCBpbnQmIGVuZFlQb3MsIGlu
dCYgcmVwYWludEJvdHRvbSwgaW50JiByZXBhaW50VG9wKTsKIAogICAgIHZvaWQgc2tpcFRyYWls
aW5nV2hpdGVzcGFjZShJbmxpbmVJdGVyYXRvciYsIGJvb2wgaXNMaW5lRW1wdHksIGJvb2wgcHJl
dmlvdXNMaW5lQnJva2VDbGVhbmx5KTsKLSAgICBpbnQgc2tpcExlYWRpbmdXaGl0ZXNwYWNlKElu
bGluZUJpZGlSZXNvbHZlciYsIGJvb2wgZmlyc3RMaW5lLCBib29sIGlzTGluZUVtcHR5LCBib29s
IHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSk7CisgICAgaW50IHNraXBMZWFkaW5nV2hpdGVzcGFj
ZShJbmxpbmVCaWRpUmVzb2x2ZXImLCBib29sIGZpcnN0TGluZSwgYm9vbCBpc0xpbmVFbXB0eSwg
Ym9vbCBwcmV2aW91c0xpbmVCcm9rZUNsZWFubHksIEZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXRG
cm9tUHJldmlvdXNMaW5lKTsKICAgICB2b2lkIGZpdEJlbG93RmxvYXRzKGludCB3aWR0aFRvRml0
LCBib29sIGZpcnN0TGluZSwgaW50JiBhdmFpbGFibGVXaWR0aCk7Ci0gICAgSW5saW5lSXRlcmF0
b3IgZmluZE5leHRMaW5lQnJlYWsoSW5saW5lQmlkaVJlc29sdmVyJiwgYm9vbCBmaXJzdExpbmUs
IGJvb2wmIGlzTGluZUVtcHR5LCBib29sJiBwcmV2aW91c0xpbmVCcm9rZUNsZWFubHksIGJvb2wm
IGh5cGhlbmF0ZWQsIEVDbGVhciogPSAwKTsKKyAgICBJbmxpbmVJdGVyYXRvciBmaW5kTmV4dExp
bmVCcmVhayhJbmxpbmVCaWRpUmVzb2x2ZXImLCBib29sIGZpcnN0TGluZSwgYm9vbCYgaXNMaW5l
RW1wdHksIGJvb2wmIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSwgYm9vbCYgaHlwaGVuYXRlZCwg
RUNsZWFyKiwgRmxvYXRpbmdPYmplY3QqIGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUpOwogICAg
IFJvb3RJbmxpbmVCb3gqIGNvbnN0cnVjdExpbmUodW5zaWduZWQgcnVuQ291bnQsIEJpZGlSdW4q
IGZpcnN0UnVuLCBCaWRpUnVuKiBsYXN0UnVuLCBib29sIGZpcnN0TGluZSwgYm9vbCBsYXN0TGlu
ZSwgUmVuZGVyT2JqZWN0KiBlbmRPYmplY3QpOwogICAgIElubGluZUZsb3dCb3gqIGNyZWF0ZUxp
bmVCb3hlcyhSZW5kZXJPYmplY3QqLCBib29sIGZpcnN0TGluZSk7CiAgICAgdm9pZCBjb21wdXRl
SG9yaXpvbnRhbFBvc2l0aW9uc0ZvckxpbmUoUm9vdElubGluZUJveCosIGJvb2wgZmlyc3RMaW5l
LCBCaWRpUnVuKiBmaXJzdFJ1biwgQmlkaVJ1biogdHJhaWxpbmdTcGFjZVJ1biwgYm9vbCByZWFj
aGVkRW5kLCBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcCYpOwpAQCAtMzI5LDEyICsz
NzMsMTggQEAgcHJpdmF0ZToKICAgICB2b2lkIHBhaW50U2VsZWN0aW9uKFBhaW50SW5mbyYsIGlu
dCB0eCwgaW50IHR5KTsKICAgICB2b2lkIHBhaW50Q2FyZXQoUGFpbnRJbmZvJiwgaW50IHR4LCBp
bnQgdHksIENhcmV0VHlwZSk7CiAKLSAgICB2b2lkIGluc2VydEZsb2F0aW5nT2JqZWN0KFJlbmRl
ckJveCopOworICAgIEZsb2F0aW5nT2JqZWN0KiBpbnNlcnRGbG9hdGluZ09iamVjdChSZW5kZXJC
b3gqKTsKICAgICB2b2lkIHJlbW92ZUZsb2F0aW5nT2JqZWN0KFJlbmRlckJveCopOwotCisgICAg
dm9pZCByZW1vdmVGbG9hdGluZ09iamVjdHMoRmxvYXRpbmdPYmplY3QqLCBpbnQgeSk7CisgICAg
CiAgICAgLy8gQ2FsbGVkIGZyb20gbGluZVdpZHRoLCB0byBwb3NpdGlvbiB0aGUgZmxvYXRzIGFk
ZGVkIGluIHRoZSBsYXN0IGxpbmUuCi0gICAgLy8gUmV0dXJucyB0dXJlIGlmIGFuZCBvbmx5IGlm
IGl0IGhhcyBwb3NpdGlvbmVkIGFueSBmbG9hdHMuCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIGFu
ZCBvbmx5IGlmIGl0IGhhcyBwb3NpdGlvbmVkIGFueSBmbG9hdHMuCiAgICAgYm9vbCBwb3NpdGlv
bk5ld0Zsb2F0cygpOworICAgIAorICAgIC8vIFBvc2l0aW9ucyBuZXcgZmxvYXRzIGFuZCBhbHNv
IGFkanVzdCBhbGwgZmxvYXRzIGVuY291bnRlcmVkIG9uIHRoZSBsaW5lIGlmIGFueSBvZiB0aGVt
CisgICAgLy8gaGF2ZSB0byBtb3ZlIHRvIHRoZSBuZXh0IHBhZ2UvY29sdW1uLgorICAgIGJvb2wg
cG9zaXRpb25OZXdGbG9hdE9uTGluZShGbG9hdGluZ09iamVjdCogbmV3RmxvYXQsIEZsb2F0aW5n
T2JqZWN0KiBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lKTsKKwogICAgIHZvaWQgY2xlYXJGbG9h
dHMoKTsKICAgICBpbnQgZ2V0Q2xlYXJEZWx0YShSZW5kZXJCb3gqIGNoaWxkLCBpbnQgeVBvcyk7
CiAKQEAgLTQxNiw4ICs0NjYsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgb2Zmc2V0Rm9yQ29udGVu
dHMoaW50JiB0eCwgaW50JiB0eSkgY29uc3Q7CiAKICAgICB2b2lkIGNhbGNDb2x1bW5XaWR0aCgp
OwotICAgIGludCBsYXlvdXRDb2x1bW5zKGludCBlbmRPZkNvbnRlbnQgPSAtMSwgaW50IHJlcXVl
c3RlZENvbHVtbkhlaWdodCA9IC0xKTsKLSAgICBpbnQgdmlzaWJsZVRvcE9mSGlnaGVzdEZsb2F0
RXh0ZW5kaW5nQmVsb3coaW50IGJvdHRvbSwgaW50IG1heEhlaWdodCkgY29uc3Q7CisgICAgYm9v
bCBsYXlvdXRDb2x1bW5zKGJvb2wgaGFzU3BlY2lmaWVkUGFnZUhlaWdodCwgaW50IHBhZ2VIZWln
aHQsIExheW91dFN0YXRlTWFpbnRhaW5lciYpOwogICAgIHZvaWQgbWFrZUNoaWxkcmVuQW5vbnlt
b3VzQ29sdW1uQmxvY2tzKFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQsIFJlbmRlckJsb2NrKiBu
ZXdCbG9ja0JveCwgUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCk7CiAKICAgICBib29sIGV4cGFuZHNU
b0VuY2xvc2VPdmVyaGFuZ2luZ0Zsb2F0cygpIGNvbnN0OwpAQCAtNDMzLDM2ICs0ODIsNiBAQCBw
cml2YXRlOgogICAgIFJlbmRlckJsb2NrKiBjb250aW51YXRpb25CZWZvcmUoUmVuZGVyT2JqZWN0
KiBiZWZvcmVDaGlsZCk7CiAgICAgUmVuZGVyQmxvY2sqIGNvbnRhaW5pbmdDb2x1bW5zQmxvY2so
Ym9vbCBhbGxvd0Fub255bW91c0NvbHVtbkJsb2NrID0gdHJ1ZSk7CiAgICAgUmVuZGVyQmxvY2sq
IGNvbHVtbnNCbG9ja0ZvclNwYW5uaW5nRWxlbWVudChSZW5kZXJPYmplY3QqIG5ld0NoaWxkKTsK
LSAgICAKLSAgICBzdHJ1Y3QgRmxvYXRpbmdPYmplY3QgOiBOb25jb3B5YWJsZSB7Ci0gICAgICAg
IGVudW0gVHlwZSB7Ci0gICAgICAgICAgICBGbG9hdExlZnQsCi0gICAgICAgICAgICBGbG9hdFJp
Z2h0Ci0gICAgICAgIH07Ci0KLSAgICAgICAgRmxvYXRpbmdPYmplY3QoVHlwZSB0eXBlKQotICAg
ICAgICAgICAgOiBtX3JlbmRlcmVyKDApCi0gICAgICAgICAgICAsIG1fdG9wKDApCi0gICAgICAg
ICAgICAsIG1fYm90dG9tKDApCi0gICAgICAgICAgICAsIG1fbGVmdCgwKQotICAgICAgICAgICAg
LCBtX3dpZHRoKDApCi0gICAgICAgICAgICAsIG1fdHlwZSh0eXBlKQotICAgICAgICAgICAgLCBt
X3Nob3VsZFBhaW50KHRydWUpCi0gICAgICAgICAgICAsIG1faXNEZXNjZW5kYW50KGZhbHNlKQot
ICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBUeXBlIHR5cGUoKSB7IHJldHVybiBzdGF0
aWNfY2FzdDxUeXBlPihtX3R5cGUpOyB9Ci0KLSAgICAgICAgUmVuZGVyQm94KiBtX3JlbmRlcmVy
OwotICAgICAgICBpbnQgbV90b3A7Ci0gICAgICAgIGludCBtX2JvdHRvbTsKLSAgICAgICAgaW50
IG1fbGVmdDsKLSAgICAgICAgaW50IG1fd2lkdGg7Ci0gICAgICAgIHVuc2lnbmVkIG1fdHlwZSA6
IDE7IC8vIFR5cGUgKGxlZnQgb3IgcmlnaHQgYWxpZ25lZCkKLSAgICAgICAgYm9vbCBtX3Nob3Vs
ZFBhaW50IDogMTsKLSAgICAgICAgYm9vbCBtX2lzRGVzY2VuZGFudCA6IDE7Ci0gICAgfTsKIAog
ICAgIGNsYXNzIE1hcmdpbkluZm8gewogICAgICAgICAvLyBDb2xsYXBzaW5nIGZsYWdzIGZvciB3
aGV0aGVyIHdlIGNhbiBjb2xsYXBzZSBvdXIgbWFyZ2lucyB3aXRoIG91ciBjaGlsZHJlbidzIG1h
cmdpbnMuCkBAIC01MzksNiArNTU4LDEzIEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXRDb2xsYXBz
ZWRCb3R0b21NYXJnaW4oY29uc3QgTWFyZ2luSW5mbyYpOwogICAgIC8vIEVuZCBoZWxwZXIgZnVu
Y3Rpb25zIGFuZCBzdHJ1Y3RzIHVzZWQgYnkgbGF5b3V0QmxvY2tDaGlsZHJlbi4KIAorICAgIC8v
IFBhZ2luYXRpb24gcm91dGluZXMuCisgICAgaW50IG5leHRQYWdlVG9wKGludCB5UG9zKSBjb25z
dDsgLy8gUmV0dXJucyB0aGUgdG9wIG9mIHRoZSBuZXh0IHBhZ2UgZm9sbG93aW5nIHlQb3MuCisg
ICAgaW50IGFwcGx5QmVmb3JlQnJlYWsoUmVuZGVyQm94KiBjaGlsZCwgaW50IHlQb3MpOyAvLyBJ
ZiB0aGUgY2hpbGQgaGFzIGEgYmVmb3JlIGJyZWFrLCB0aGVuIHJldHVybiBhIG5ldyB5UG9zIHRo
YXQgc2hpZnRzIHRvIHRoZSB0b3Agb2YgdGhlIG5leHQgcGFnZS9jb2x1bW4uCisgICAgaW50IGFw
cGx5QWZ0ZXJCcmVhayhSZW5kZXJCb3gqIGNoaWxkLCBpbnQgeVBvcywgTWFyZ2luSW5mbyYgbWFy
Z2luSW5mbyk7IC8vIElmIHRoZSBjaGlsZCBoYXMgYW4gYWZ0ZXIgYnJlYWssIHRoZW4gcmV0dXJu
IGEgbmV3IHlQb3MgdGhhdCBzaGlmdHMgdG8gdGhlIHRvcCBvZiB0aGUgbmV4dCBwYWdlL2NvbHVt
bi4KKyAgICBpbnQgYWRqdXN0Rm9yVW5zcGxpdHRhYmxlQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCwg
aW50IHlQb3MsIGJvb2wgaW5jbHVkZU1hcmdpbnMgPSBmYWxzZSk7IC8vIElmIHRoZSBjaGlsZCBp
cyB1bnNwbGl0dGFibGUgYW5kIGNhbid0IGZpdCBvbiB0aGUgY3VycmVudCBwYWdlLCByZXR1cm4g
dGhlIHRvcCBvZiB0aGUgbmV4dCBwYWdlL2NvbHVtbi4KKyAgICB2b2lkIGFkanVzdExpbmVQb3Np
dGlvbkZvclBhZ2luYXRpb24oUm9vdElubGluZUJveCosIGludCYgZGVsdGFZKTsgLy8gQ29tcHV0
ZXMgYSBkZWx0YVkgdmFsdWUgdGhhdCBwdXQgYSBsaW5lIGF0IHRoZSB0b3Agb2YgdGhlIG5leHQg
cGFnZSBpZiBpdCBkb2Vzbid0IGZpdCBvbiB0aGUgY3VycmVudCBwYWdlLgorCiAgICAgdHlwZWRl
ZiBQb3NpdGlvbmVkT2JqZWN0c0xpc3RIYXNoU2V0Ojpjb25zdF9pdGVyYXRvciBJdGVyYXRvcjsK
ICAgICBEZXByZWNhdGVkUHRyTGlzdDxGbG9hdGluZ09iamVjdD4qIG1fZmxvYXRpbmdPYmplY3Rz
OwogICAgIApAQCAtNTUxLDEyICs1NzcsMTQgQEAgcHJpdmF0ZToKICAgICBSZW5kZXJCb3hNb2Rl
bE9iamVjdCogbV9jb250aW51YXRpb247CiAKICAgICAvLyBBbGxvY2F0ZWQgb25seSB3aGVuIHNv
bWUgb2YgdGhlc2UgZmllbGRzIGhhdmUgbm9uLWRlZmF1bHQgdmFsdWVzCi0gICAgc3RydWN0IE1h
eE1hcmdpbiA6IE5vbmNvcHlhYmxlIHsKLSAgICAgICAgTWF4TWFyZ2luKGNvbnN0IFJlbmRlckJs
b2NrKiBvKSAKKyAgICBzdHJ1Y3QgUmVuZGVyQmxvY2tSYXJlRGF0YSA6IE5vbmNvcHlhYmxlIHsK
KyAgICAgICAgUmVuZGVyQmxvY2tSYXJlRGF0YShjb25zdCBSZW5kZXJCbG9jayogbykgCiAgICAg
ICAgICAgICA6IG1fdG9wUG9zKHRvcFBvc0RlZmF1bHQobykpCiAgICAgICAgICAgICAsIG1fdG9w
TmVnKHRvcE5lZ0RlZmF1bHQobykpCiAgICAgICAgICAgICAsIG1fYm90dG9tUG9zKGJvdHRvbVBv
c0RlZmF1bHQobykpCiAgICAgICAgICAgICAsIG1fYm90dG9tTmVnKGJvdHRvbU5lZ0RlZmF1bHQo
bykpCisgICAgICAgICAgICAsIG1fcGFnaW5hdGlvblN0cnV0KDApCisgICAgICAgICAgICAsIG1f
cGFnZVkoMCkKICAgICAgICAgeyAKICAgICAgICAgfQogCkBAIC01NjQsMTQgKzU5MiwxNiBAQCBw
cml2YXRlOgogICAgICAgICBzdGF0aWMgaW50IHRvcE5lZ0RlZmF1bHQoY29uc3QgUmVuZGVyQmxv
Y2sqIG8pIHsgcmV0dXJuIG8tPm1hcmdpblRvcCgpIDwgMCA/IC1vLT5tYXJnaW5Ub3AoKSA6IDA7
IH0KICAgICAgICAgc3RhdGljIGludCBib3R0b21Qb3NEZWZhdWx0KGNvbnN0IFJlbmRlckJsb2Nr
KiBvKSB7IHJldHVybiBvLT5tYXJnaW5Cb3R0b20oKSA+IDAgPyBvLT5tYXJnaW5Cb3R0b20oKSA6
IDA7IH0KICAgICAgICAgc3RhdGljIGludCBib3R0b21OZWdEZWZhdWx0KGNvbnN0IFJlbmRlckJs
b2NrKiBvKSB7IHJldHVybiBvLT5tYXJnaW5Cb3R0b20oKSA8IDAgPyAtby0+bWFyZ2luQm90dG9t
KCkgOiAwOyB9Ci0KKyAgICAgICAgCiAgICAgICAgIGludCBtX3RvcFBvczsKICAgICAgICAgaW50
IG1fdG9wTmVnOwogICAgICAgICBpbnQgbV9ib3R0b21Qb3M7CiAgICAgICAgIGludCBtX2JvdHRv
bU5lZzsKKyAgICAgICAgaW50IG1fcGFnaW5hdGlvblN0cnV0OworICAgICAgICBpbnQgbV9wYWdl
WTsKICAgICAgfTsKIAotICAgIE1heE1hcmdpbiogbV9tYXhNYXJnaW47CisgICAgUmVuZGVyQmxv
Y2tSYXJlRGF0YSogbV9yYXJlRGF0YTsKIAogICAgIFJlbmRlck9iamVjdENoaWxkTGlzdCBtX2No
aWxkcmVuOwogICAgIFJlbmRlckxpbmVCb3hMaXN0IG1fbGluZUJveGVzOyAgIC8vIEFsbCBvZiB0
aGUgcm9vdCBsaW5lIGJveGVzIGNyZWF0ZWQgZm9yIHRoaXMgYmxvY2sgZmxvdy4gIEZvciBleGFt
cGxlLCA8ZGl2PkhlbGxvPGJyPndvcmxkLjwvZGl2PiB3aWxsIGhhdmUgdHdvIHRvdGFsIGxpbmVz
IGZvciB0aGUgPGRpdj4uCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVM
YXlvdXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGlu
ZUxheW91dC5jcHAJKHJldmlzaW9uIDY2ODg2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2tMaW5lTGF5b3V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2lu
Y2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdE1hcmtlci5oIgogI2lu
Y2x1ZGUgIlJlbmRlclZpZXcuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlRy
YWlsaW5nRmxvYXRzUm9vdElubGluZUJveC5oIgogI2luY2x1ZGUgImJyZWFrX2xpbmVzLmgiCiAj
aW5jbHVkZSA8d3RmL0Fsd2F5c0lubGluZS5oPgpAQCAtNTcwLDEyICs1NzEsMTEgQEAgdm9pZCBS
ZW5kZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4oYgogICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgaWYgKG8tPmlzUG9zaXRpb25lZCgpKQogICAgICAgICAgICAgICAgICAgICBvLT5j
b250YWluaW5nQmxvY2soKS0+aW5zZXJ0UG9zaXRpb25lZE9iamVjdChib3gpOwotICAgICAgICAg
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAoby0+aXNGbG9hdGluZygpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXRzLmFwcGVuZChGbG9hdFdpdGhSZWN0KGJveCkp
OwotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChmdWxsTGF5b3V0IHx8IG8tPm5lZWRzTGF5
b3V0KCkpIC8vIFJlcGxhY2VkIGVsZW1lbnRzCi0gICAgICAgICAgICAgICAgICAgICAgICB0b1Jl
bmRlckJveChvKS0+ZGlydHlMaW5lQm94ZXMoZnVsbExheW91dCk7Ci0KKyAgICAgICAgICAgICAg
ICBlbHNlIGlmIChvLT5pc0Zsb2F0aW5nKCkpCisgICAgICAgICAgICAgICAgICAgIGZsb2F0cy5h
cHBlbmQoRmxvYXRXaXRoUmVjdChib3gpKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChmdWxs
TGF5b3V0IHx8IG8tPm5lZWRzTGF5b3V0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gUmVw
bGFjZWQgZWxlbWVudHMKKyAgICAgICAgICAgICAgICAgICAgdG9SZW5kZXJCb3gobyktPmRpcnR5
TGluZUJveGVzKGZ1bGxMYXlvdXQpOwogICAgICAgICAgICAgICAgICAgICBvLT5sYXlvdXRJZk5l
ZWRlZCgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSBpZiAoby0+aXNU
ZXh0KCkgfHwgKG8tPmlzUmVuZGVySW5saW5lKCkgJiYgIWVuZE9mSW5saW5lKSkgewpAQCAtNTk0
LDcgKzU5NCw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dElubGluZUNoaWxkcmVuKGIKICAg
ICAgICAgdW5zaWduZWQgZmxvYXRJbmRleDsKICAgICAgICAgYm9vbCBmaXJzdExpbmUgPSB0cnVl
OwogICAgICAgICBib29sIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSA9IHRydWU7Ci0gICAgICAg
IFJvb3RJbmxpbmVCb3gqIHN0YXJ0TGluZSA9IGRldGVybWluZVN0YXJ0UG9zaXRpb24oZmlyc3RM
aW5lLCBmdWxsTGF5b3V0LCBwcmV2aW91c0xpbmVCcm9rZUNsZWFubHksIHJlc29sdmVyLCBmbG9h
dHMsIGZsb2F0SW5kZXgpOworICAgICAgICBSb290SW5saW5lQm94KiBzdGFydExpbmUgPSBkZXRl
cm1pbmVTdGFydFBvc2l0aW9uKGZpcnN0TGluZSwgZnVsbExheW91dCwgcHJldmlvdXNMaW5lQnJv
a2VDbGVhbmx5LCByZXNvbHZlciwgZmxvYXRzLCBmbG9hdEluZGV4LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZVJlcGFpbnRCb3Vu
ZHMsIHJlcGFpbnRUb3AsIHJlcGFpbnRCb3R0b20pOwogCiAgICAgICAgIGlmIChmdWxsTGF5b3V0
ICYmIGhhc0lubGluZUNoaWxkICYmICFzZWxmTmVlZHNMYXlvdXQoKSkgewogICAgICAgICAgICAg
c2V0TmVlZHNMYXlvdXQodHJ1ZSwgZmFsc2UpOyAgLy8gTWFyayBvdXJzZWx2ZXMgYXMgbmVlZGlu
ZyBhIGZ1bGwgbGF5b3V0LiBUaGlzIHdheSB3ZSdsbCByZXBhaW50IGxpa2UKQEAgLTYyMiw5ICs2
MjMsMTEgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4oYgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA6IGRldGVybWluZUVuZFBvc2l0aW9uKHN0YXJ0
TGluZSwgY2xlYW5MaW5lU3RhcnQsIGNsZWFuTGluZUJpZGlTdGF0dXMsIGVuZExpbmVZUG9zKTsK
IAogICAgICAgICBpZiAoc3RhcnRMaW5lKSB7Ci0gICAgICAgICAgICB1c2VSZXBhaW50Qm91bmRz
ID0gdHJ1ZTsKLSAgICAgICAgICAgIHJlcGFpbnRUb3AgPSBoZWlnaHQoKTsKLSAgICAgICAgICAg
IHJlcGFpbnRCb3R0b20gPSBoZWlnaHQoKTsKKyAgICAgICAgICAgIGlmICghdXNlUmVwYWludEJv
dW5kcykgeworICAgICAgICAgICAgICAgIHVzZVJlcGFpbnRCb3VuZHMgPSB0cnVlOworICAgICAg
ICAgICAgICAgIHJlcGFpbnRUb3AgPSBoZWlnaHQoKTsKKyAgICAgICAgICAgICAgICByZXBhaW50
Qm90dG9tID0gaGVpZ2h0KCk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBSZW5kZXJBcmVu
YSogYXJlbmEgPSByZW5kZXJBcmVuYSgpOwogICAgICAgICAgICAgUm9vdElubGluZUJveCogYm94
ID0gc3RhcnRMaW5lOwogICAgICAgICAgICAgd2hpbGUgKGJveCkgewpAQCAtNjU5LDYgKzY2Miw3
IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dElubGluZUNoaWxkcmVuKGIKICAgICAgICAgYm9v
bCBjaGVja0ZvckZsb2F0c0Zyb21MYXN0TGluZSA9IGZhbHNlOwogCiAgICAgICAgIGJvb2wgaXNM
aW5lRW1wdHkgPSB0cnVlOworICAgICAgICBib29sIHBhZ2luYXRlZCA9IHZpZXcoKS0+bGF5b3V0
U3RhdGUoKS0+cGFnaW5hdGVkKCk7CiAKICAgICAgICAgd2hpbGUgKCFlbmQuYXRFbmQoKSkgewog
ICAgICAgICAgICAgLy8gRklYTUU6IElzIHRoaXMgY2hlY2sgbmVjZXNzYXJ5IGJlZm9yZSB0aGUg
Zmlyc3QgaXRlcmF0aW9uIG9yIGNhbiBpdCBiZSBtb3ZlZCB0byB0aGUgZW5kPwpAQCAtNjcxLDcg
KzY3NSwxMCBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVDaGlsZHJlbihiCiAgICAg
ICAgICAgICAKICAgICAgICAgICAgIEVDbGVhciBjbGVhciA9IENOT05FOwogICAgICAgICAgICAg
Ym9vbCBoeXBoZW5hdGVkOwotICAgICAgICAgICAgZW5kID0gZmluZE5leHRMaW5lQnJlYWsocmVz
b2x2ZXIsIGZpcnN0TGluZSwgaXNMaW5lRW1wdHksIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSwg
aHlwaGVuYXRlZCwgJmNsZWFyKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgSW5saW5lSXRl
cmF0b3Igb2xkRW5kID0gZW5kOworICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGxhc3RGbG9h
dEZyb21QcmV2aW91c0xpbmUgPSBtX2Zsb2F0aW5nT2JqZWN0cyA/IG1fZmxvYXRpbmdPYmplY3Rz
LT5sYXN0KCkgOiAwOworICAgICAgICAgICAgZW5kID0gZmluZE5leHRMaW5lQnJlYWsocmVzb2x2
ZXIsIGZpcnN0TGluZSwgaXNMaW5lRW1wdHksIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSwgaHlw
aGVuYXRlZCwgJmNsZWFyLCBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lKTsKICAgICAgICAgICAg
IGlmIChyZXNvbHZlci5wb3NpdGlvbigpLmF0RW5kKCkpIHsKICAgICAgICAgICAgICAgICByZXNv
bHZlci5kZWxldGVSdW5zKCk7CiAgICAgICAgICAgICAgICAgY2hlY2tGb3JGbG9hdHNGcm9tTGFz
dExpbmUgPSB0cnVlOwpAQCAtNzM2LDYgKzc0Myw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91
dElubGluZUNoaWxkcmVuKGIKICAgICAgICAgICAgICAgICAvLyBpbmxpbmUgZmxvdyBib3hlcy4K
IAogICAgICAgICAgICAgICAgIFJvb3RJbmxpbmVCb3gqIGxpbmVCb3ggPSAwOworICAgICAgICAg
ICAgICAgIGludCBvbGRIZWlnaHQgPSBoZWlnaHQoKTsKICAgICAgICAgICAgICAgICBpZiAocmVz
b2x2ZXIucnVuQ291bnQoKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoaHlwaGVuYXRlZCkK
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVyLmxvZ2ljYWxseUxhc3RSdW4oKS0+bV9o
YXNIeXBoZW4gPSB0cnVlOwpAQCAtNzg2LDYgKzc5NCwyOSBAQCB2b2lkIFJlbmRlckJsb2NrOjps
YXlvdXRJbmxpbmVDaGlsZHJlbihiCiAgICAgICAgICAgICAgICAgICAgICAgICByZXBhaW50VG9w
ID0gbWluKHJlcGFpbnRUb3AsIGxpbmVCb3gtPnRvcFZpc2libGVPdmVyZmxvdygpKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlcGFpbnRCb3R0b20gPSBtYXgocmVwYWludEJvdHRvbSwgbGlu
ZUJveC0+Ym90dG9tVmlzaWJsZU92ZXJmbG93KCkpOwogICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAocGFnaW5hdGVkKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWRqdXN0bWVudCA9IDA7CisgICAgICAgICAg
ICAgICAgICAgICAgICBhZGp1c3RMaW5lUG9zaXRpb25Gb3JQYWdpbmF0aW9uKGxpbmVCb3gsIGFk
anVzdG1lbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFkanVzdG1lbnQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb2xkTGluZVdpZHRoID0gbGluZVdpZHRoKG9s
ZEhlaWdodCwgZmlyc3RMaW5lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lQm94
LT5hZGp1c3RQb3NpdGlvbigwLCBhZGp1c3RtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAodXNlUmVwYWludEJvdW5kcykgLy8gVGhpcyBjYW4gb25seSBiZSBhIHBvc2l0aXZl
IGFkanVzdG1lbnQsIHNvIG5vIG5lZWQgdG8gdXBkYXRlIHJlcGFpbnRUb3AuCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlcGFpbnRCb3R0b20gPSBtYXgocmVwYWludEJvdHRvbSwg
bGluZUJveC0+Ym90dG9tVmlzaWJsZU92ZXJmbG93KCkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGluZVdpZHRoKG9s
ZEhlaWdodCArIGFkanVzdG1lbnQsIGZpcnN0TGluZSkgIT0gb2xkTGluZVdpZHRoKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8gZGVsZXRlIHRoaXMgbGlu
ZSwgcmVtb3ZlIGFsbCBmbG9hdHMgdGhhdCBnb3QgYWRkZWQsIGFuZCBsZXQgbGluZSBsYXlvdXQg
cmUtcnVuLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lQm94LT5kZWxldGVM
aW5lKHJlbmRlckFyZW5hKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1v
dmVGbG9hdGluZ09iamVjdHMobGFzdEZsb2F0RnJvbVByZXZpb3VzTGluZSwgb2xkSGVpZ2h0KTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SGVpZ2h0KG9sZEhlaWdodCArIGFk
anVzdG1lbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlci5zZXRQ
b3NpdGlvbihvbGRFbmQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQgPSBv
bGRFbmQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNl
dEhlaWdodChsaW5lQm94LT5ibG9ja0hlaWdodCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAg
ICAgICAgIGZpcnN0TGluZSA9IGZhbHNlOwpAQCAtODIwLDYgKzg1MSwxMCBAQCB2b2lkIFJlbmRl
ckJsb2NrOjpsYXlvdXRJbmxpbmVDaGlsZHJlbihiCiAgICAgICAgICAgICAgICAgaW50IGRlbHRh
ID0gaGVpZ2h0KCkgLSBlbmRMaW5lWVBvczsKICAgICAgICAgICAgICAgICBmb3IgKFJvb3RJbmxp
bmVCb3gqIGxpbmUgPSBlbmRMaW5lOyBsaW5lOyBsaW5lID0gbGluZS0+bmV4dFJvb3RCb3goKSkg
ewogICAgICAgICAgICAgICAgICAgICBsaW5lLT5hdHRhY2hMaW5lKCk7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChwYWdpbmF0ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbHRhIC09
IGxpbmUtPnBhZ2luYXRpb25TdHJ1dCgpOworICAgICAgICAgICAgICAgICAgICAgICAgYWRqdXN0
TGluZVBvc2l0aW9uRm9yUGFnaW5hdGlvbihsaW5lLCBkZWx0YSk7CisgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgaWYgKGRlbHRhKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICByZXBhaW50VG9wID0gbWluKHJlcGFpbnRUb3AsIGxpbmUtPnRvcFZpc2libGVPdmVy
ZmxvdygpICsgbWluKGRlbHRhLCAwKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXBhaW50
Qm90dG9tID0gbWF4KHJlcGFpbnRCb3R0b20sIGxpbmUtPmJvdHRvbVZpc2libGVPdmVyZmxvdygp
ICsgbWF4KGRlbHRhLCAwKSk7CkBAIC05MDAsMjAgKzkzNSw0NCBAQCB2b2lkIFJlbmRlckJsb2Nr
OjpsYXlvdXRJbmxpbmVDaGlsZHJlbihiCiB9CiAKIFJvb3RJbmxpbmVCb3gqIFJlbmRlckJsb2Nr
OjpkZXRlcm1pbmVTdGFydFBvc2l0aW9uKGJvb2wmIGZpcnN0TGluZSwgYm9vbCYgZnVsbExheW91
dCwgYm9vbCYgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5LCAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElubGluZUJpZGlSZXNvbHZlciYgcmVzb2x2
ZXIsIFZlY3RvcjxGbG9hdFdpdGhSZWN0PiYgZmxvYXRzLCB1bnNpZ25lZCYgbnVtQ2xlYW5GbG9h
dHMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJ
bmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sdmVyLCBWZWN0b3I8RmxvYXRXaXRoUmVjdD4mIGZsb2F0
cywgdW5zaWduZWQmIG51bUNsZWFuRmxvYXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCYgdXNlUmVwYWludEJvdW5kcywgaW50JiByZXBh
aW50VG9wLCBpbnQmIHJlcGFpbnRCb3R0b20pCiB7CiAgICAgUm9vdElubGluZUJveCogY3VyciA9
IDA7CiAgICAgUm9vdElubGluZUJveCogbGFzdCA9IDA7CiAKICAgICBib29sIGRpcnRpZWRCeUZs
b2F0ID0gZmFsc2U7CiAgICAgaWYgKCFmdWxsTGF5b3V0KSB7CisgICAgICAgIC8vIFBhZ2luYXRl
IGFsbCBvZiB0aGUgY2xlYW4gbGluZXMuCisgICAgICAgIGJvb2wgcGFnaW5hdGVkID0gdmlldygp
LT5sYXlvdXRTdGF0ZSgpLT5wYWdpbmF0ZWQoKTsKKyAgICAgICAgaW50IHBhZ2luYXRpb25EZWx0
YSA9IDA7CiAgICAgICAgIHNpemVfdCBmbG9hdEluZGV4ID0gMDsKICAgICAgICAgZm9yIChjdXJy
ID0gZmlyc3RSb290Qm94KCk7IGN1cnIgJiYgIWN1cnItPmlzRGlydHkoKTsgY3VyciA9IGN1cnIt
Pm5leHRSb290Qm94KCkpIHsKKyAgICAgICAgICAgIGlmIChwYWdpbmF0ZWQpIHsKKyAgICAgICAg
ICAgICAgICBwYWdpbmF0aW9uRGVsdGEgLT0gY3Vyci0+cGFnaW5hdGlvblN0cnV0KCk7CisgICAg
ICAgICAgICAgICAgYWRqdXN0TGluZVBvc2l0aW9uRm9yUGFnaW5hdGlvbihjdXJyLCBwYWdpbmF0
aW9uRGVsdGEpOworICAgICAgICAgICAgICAgIGlmIChwYWdpbmF0aW9uRGVsdGEpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGNvbnRhaW5zRmxvYXRzKCkgfHwgIWZsb2F0cy5pc0VtcHR5KCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBEbyBiZXR0ZXIgZXZlbnR1YWxs
eS4gIEZvciBub3cgaWYgd2UgZXZlciBzaGlmdCBiZWNhdXNlIG9mIHBhZ2luYXRpb24gYW5kIGZs
b2F0cyBhcmUgcHJlc2VudCBqdXN0IGdvIHRvIGEgZnVsbCBsYXlvdXQuCisgICAgICAgICAgICAg
ICAgICAgICAgICBmdWxsTGF5b3V0ID0gdHJ1ZTsgCisgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCF1c2VSZXBhaW50Qm91bmRzKQorICAgICAgICAgICAgICAgICAg
ICAgICAgdXNlUmVwYWludEJvdW5kcyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAgICAgcmVwYWludFRvcCA9IG1pbihyZXBhaW50VG9wLCBjdXJyLT50
b3BWaXNpYmxlT3ZlcmZsb3coKSArIG1pbihwYWdpbmF0aW9uRGVsdGEsIDApKTsKKyAgICAgICAg
ICAgICAgICAgICAgcmVwYWludEJvdHRvbSA9IG1heChyZXBhaW50Qm90dG9tLCBjdXJyLT5ib3R0
b21WaXNpYmxlT3ZlcmZsb3coKSArIG1heChwYWdpbmF0aW9uRGVsdGEsIDApKTsKKyAgICAgICAg
ICAgICAgICAgICAgY3Vyci0+YWRqdXN0UG9zaXRpb24oMCwgcGFnaW5hdGlvbkRlbHRhKTsKKyAg
ICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgfQorICAgICAgICAg
ICAgCiAgICAgICAgICAgICBpZiAoVmVjdG9yPFJlbmRlckJveCo+KiBjbGVhbkxpbmVGbG9hdHMg
PSBjdXJyLT5mbG9hdHNQdHIoKSkgewogICAgICAgICAgICAgICAgIFZlY3RvcjxSZW5kZXJCb3gq
Pjo6aXRlcmF0b3IgZW5kID0gY2xlYW5MaW5lRmxvYXRzLT5lbmQoKTsKICAgICAgICAgICAgICAg
ICBmb3IgKFZlY3RvcjxSZW5kZXJCb3gqPjo6aXRlcmF0b3IgbyA9IGNsZWFuTGluZUZsb2F0cy0+
YmVnaW4oKTsgbyAhPSBlbmQ7ICsrbykgewogICAgICAgICAgICAgICAgICAgICBSZW5kZXJCb3gq
IGYgPSAqbzsKLSAgICAgICAgICAgICAgICAgICAgSW50U2l6ZSBuZXdTaXplKGYtPndpZHRoKCkg
KyBmLT5tYXJnaW5MZWZ0KCkgK2YtPm1hcmdpblJpZ2h0KCksIGYtPmhlaWdodCgpICsgZi0+bWFy
Z2luVG9wKCkgKyBmLT5tYXJnaW5Cb3R0b20oKSk7CisgICAgICAgICAgICAgICAgICAgIGYtPmxh
eW91dElmTmVlZGVkKCk7CisgICAgICAgICAgICAgICAgICAgIEludFNpemUgbmV3U2l6ZShmLT53
aWR0aCgpICsgZi0+bWFyZ2luTGVmdCgpICsgZi0+bWFyZ2luUmlnaHQoKSwgZi0+aGVpZ2h0KCkg
KyBmLT5tYXJnaW5Ub3AoKSArIGYtPm1hcmdpbkJvdHRvbSgpKTsKICAgICAgICAgICAgICAgICAg
ICAgQVNTRVJUKGZsb2F0SW5kZXggPCBmbG9hdHMuc2l6ZSgpKTsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKGZsb2F0c1tmbG9hdEluZGV4XS5vYmplY3QgIT0gZikgewogICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gQSBuZXcgZmxvYXQgaGFzIGJlZW4gaW5zZXJ0ZWQgYmVmb3JlIHRoaXMgbGlu
ZSBvciBiZWZvcmUgaXRzIGxhc3Qga25vd24gZmxvYXQuCkBAIC0xMjM2LDE0ICsxMjk1LDE0IEBA
IHZvaWQgUmVuZGVyQmxvY2s6OnNraXBUcmFpbGluZ1doaXRlc3BhY2UKICAgICB9CiB9CiAKLWlu
dCBSZW5kZXJCbG9jazo6c2tpcExlYWRpbmdXaGl0ZXNwYWNlKElubGluZUJpZGlSZXNvbHZlciYg
cmVzb2x2ZXIsIGJvb2wgZmlyc3RMaW5lLCBib29sIGlzTGluZUVtcHR5LCBib29sIHByZXZpb3Vz
TGluZUJyb2tlQ2xlYW5seSkKK2ludCBSZW5kZXJCbG9jazo6c2tpcExlYWRpbmdXaGl0ZXNwYWNl
KElubGluZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIsIGJvb2wgZmlyc3RMaW5lLCBib29sIGlzTGlu
ZUVtcHR5LCBib29sIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXRGcm9tUHJldmlv
dXNMaW5lKQogewogICAgIGludCBhdmFpbGFibGVXaWR0aCA9IGxpbmVXaWR0aChoZWlnaHQoKSwg
Zmlyc3RMaW5lKTsKICAgICB3aGlsZSAoIXJlc29sdmVyLnBvc2l0aW9uKCkuYXRFbmQoKSAmJiAh
cmVxdWlyZXNMaW5lQm94KHJlc29sdmVyLnBvc2l0aW9uKCksIGlzTGluZUVtcHR5LCBwcmV2aW91
c0xpbmVCcm9rZUNsZWFubHkpKSB7CiAgICAgICAgIFJlbmRlck9iamVjdCogb2JqZWN0ID0gcmVz
b2x2ZXIucG9zaXRpb24oKS5vYmo7CiAgICAgICAgIGlmIChvYmplY3QtPmlzRmxvYXRpbmcoKSkg
ewotICAgICAgICAgICAgaW5zZXJ0RmxvYXRpbmdPYmplY3QodG9SZW5kZXJCb3gob2JqZWN0KSk7
Ci0gICAgICAgICAgICBwb3NpdGlvbk5ld0Zsb2F0cygpOworICAgICAgICAgICAgcG9zaXRpb25O
ZXdGbG9hdE9uTGluZShpbnNlcnRGbG9hdGluZ09iamVjdCh0b1JlbmRlckJveChvYmplY3QpKSwg
bGFzdEZsb2F0RnJvbVByZXZpb3VzTGluZSk7CiAgICAgICAgICAgICBhdmFpbGFibGVXaWR0aCA9
IGxpbmVXaWR0aChoZWlnaHQoKSwgZmlyc3RMaW5lKTsKICAgICAgICAgfSBlbHNlIGlmIChvYmpl
Y3QtPmlzUG9zaXRpb25lZCgpKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogVGhlIG1hdGggaGVy
ZSBpcyBhY3R1YWxseSBub3QgcmVhbGx5IHJpZ2h0LiAgSXQncyBhIGJlc3QtZ3Vlc3MgYXBwcm94
aW1hdGlvbiB0aGF0CkBAIC0xMzQ5LDE0ICsxNDA4LDE0IEBAIHN0YXRpYyB2b2lkIHRyeUh5cGhl
bmF0aW5nKFJlbmRlclRleHQqIHQKIH0KIAogSW5saW5lSXRlcmF0b3IgUmVuZGVyQmxvY2s6OmZp
bmROZXh0TGluZUJyZWFrKElubGluZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIsIGJvb2wgZmlyc3RM
aW5lLCAgYm9vbCYgaXNMaW5lRW1wdHksIGJvb2wmIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSwg
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCYgaHlw
aGVuYXRlZCwgRUNsZWFyKiBjbGVhcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBib29sJiBoeXBoZW5hdGVkLCBFQ2xlYXIqIGNsZWFyLCBGbG9hdGluZ09i
amVjdCogbGFzdEZsb2F0RnJvbVByZXZpb3VzTGluZSkKIHsKICAgICBBU1NFUlQocmVzb2x2ZXIu
cG9zaXRpb24oKS5ibG9jayA9PSB0aGlzKTsKIAogICAgIGJvb2wgYXBwbGllZFN0YXJ0V2lkdGgg
PSByZXNvbHZlci5wb3NpdGlvbigpLnBvcyA+IDA7CiAgICAgTGluZU1pZHBvaW50U3RhdGUmIGxp
bmVNaWRwb2ludFN0YXRlID0gcmVzb2x2ZXIubWlkcG9pbnRTdGF0ZSgpOwogICAgIAotICAgIGlu
dCB3aWR0aCA9IHNraXBMZWFkaW5nV2hpdGVzcGFjZShyZXNvbHZlciwgZmlyc3RMaW5lLCBpc0xp
bmVFbXB0eSwgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5KTsKKyAgICBpbnQgd2lkdGggPSBza2lw
TGVhZGluZ1doaXRlc3BhY2UocmVzb2x2ZXIsIGZpcnN0TGluZSwgaXNMaW5lRW1wdHksIHByZXZp
b3VzTGluZUJyb2tlQ2xlYW5seSwgbGFzdEZsb2F0RnJvbVByZXZpb3VzTGluZSk7CiAKICAgICBp
bnQgdyA9IDA7CiAgICAgaW50IHRtcFcgPSAwOwpAQCAtMTQ0MSwxMiArMTUwMCwxMiBAQCBJbmxp
bmVJdGVyYXRvciBSZW5kZXJCbG9jazo6ZmluZE5leHRMaW5lCiAgICAgICAgICAgICAvLyBhZGQg
dG8gc3BlY2lhbCBvYmplY3RzLi4uCiAgICAgICAgICAgICBpZiAoby0+aXNGbG9hdGluZygpKSB7
CiAgICAgICAgICAgICAgICAgUmVuZGVyQm94KiBmbG9hdEJveCA9IHRvUmVuZGVyQm94KG8pOwot
ICAgICAgICAgICAgICAgIGluc2VydEZsb2F0aW5nT2JqZWN0KGZsb2F0Qm94KTsKKyAgICAgICAg
ICAgICAgICBGbG9hdGluZ09iamVjdCogZiA9IGluc2VydEZsb2F0aW5nT2JqZWN0KGZsb2F0Qm94
KTsKICAgICAgICAgICAgICAgICAvLyBjaGVjayBpZiBpdCBmaXRzIGluIHRoZSBjdXJyZW50IGxp
bmUuCiAgICAgICAgICAgICAgICAgLy8gSWYgaXQgZG9lcywgcG9zaXRpb24gaXQgbm93LCBvdGhl
cndpc2UsIHBvc2l0aW9uCiAgICAgICAgICAgICAgICAgLy8gaXQgYWZ0ZXIgbW92aW5nIHRvIG5l
eHQgbGluZSAoaW4gbmV3TGluZSgpIGZ1bmMpCiAgICAgICAgICAgICAgICAgaWYgKGZsb2F0c0Zp
dE9uTGluZSAmJiBmbG9hdEJveC0+d2lkdGgoKSArIGZsb2F0Qm94LT5tYXJnaW5MZWZ0KCkgKyBm
bG9hdEJveC0+bWFyZ2luUmlnaHQoKSArIHcgKyB0bXBXIDw9IHdpZHRoKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHBvc2l0aW9uTmV3RmxvYXRzKCk7CisgICAgICAgICAgICAgICAgICAgIHBvc2l0
aW9uTmV3RmxvYXRPbkxpbmUoZiwgbGFzdEZsb2F0RnJvbVByZXZpb3VzTGluZSk7CiAgICAgICAg
ICAgICAgICAgICAgIHdpZHRoID0gbGluZVdpZHRoKGhlaWdodCgpLCBmaXJzdExpbmUpOwogICAg
ICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICBmbG9hdHNGaXRPbkxpbmUg
PSBmYWxzZTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkocmV2aXNpb24gNjY4ODYpCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NzMs
NyArOTczLDcgQEAgdm9pZCBSZW5kZXJCb3g6Om1hcExvY2FsVG9Db250YWluZXIoUmVuZAogICAg
IGlmIChSZW5kZXJWaWV3KiB2ID0gdmlldygpKSB7CiAgICAgICAgIGlmICh2LT5sYXlvdXRTdGF0
ZUVuYWJsZWQoKSAmJiAhcmVwYWludENvbnRhaW5lcikgewogICAgICAgICAgICAgTGF5b3V0U3Rh
dGUqIGxheW91dFN0YXRlID0gdi0+bGF5b3V0U3RhdGUoKTsKLSAgICAgICAgICAgIEludFNpemUg
b2Zmc2V0ID0gbGF5b3V0U3RhdGUtPm1fb2Zmc2V0OworICAgICAgICAgICAgSW50U2l6ZSBvZmZz
ZXQgPSBsYXlvdXRTdGF0ZS0+bV9wYWludE9mZnNldDsKICAgICAgICAgICAgIG9mZnNldC5leHBh
bmQoeCgpLCB5KCkpOwogICAgICAgICAgICAgaWYgKHN0eWxlKCktPnBvc2l0aW9uKCkgPT0gUmVs
YXRpdmVQb3NpdGlvbiAmJiBsYXllcigpKQogICAgICAgICAgICAgICAgIG9mZnNldCArPSBsYXll
cigpLT5yZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0KCk7CkBAIC0xMTcwLDcgKzExNzAsNyBAQCB2b2lk
IFJlbmRlckJveDo6Y29tcHV0ZVJlY3RGb3JSZXBhaW50KFJlCiAgICAgICAgICAgICAgICAgcmVj
dC5tb3ZlKGxheWVyKCktPnJlbGF0aXZlUG9zaXRpb25PZmZzZXQoKSk7CiAKICAgICAgICAgICAg
IHJlY3QubW92ZSh4KCksIHkoKSk7Ci0gICAgICAgICAgICByZWN0Lm1vdmUobGF5b3V0U3RhdGUt
Pm1fb2Zmc2V0KTsKKyAgICAgICAgICAgIHJlY3QubW92ZShsYXlvdXRTdGF0ZS0+bV9wYWludE9m
ZnNldCk7CiAgICAgICAgICAgICBpZiAobGF5b3V0U3RhdGUtPm1fY2xpcHBlZCkKICAgICAgICAg
ICAgICAgICByZWN0LmludGVyc2VjdChsYXlvdXRTdGF0ZS0+bV9jbGlwUmVjdCk7CiAgICAgICAg
ICAgICByZXR1cm47CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guY3Bw
CShyZXZpc2lvbiA2Njg4NikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAxLDcgKzIwMSw3IEBAIHZvaWQgUmVuZGVyRmxleGli
bGVCb3g6OmNhbGNQcmVmV2lkdGhzKCkKICAgICBzZXRQcmVmV2lkdGhzRGlydHkoZmFsc2UpOwog
fQogCi12b2lkIFJlbmRlckZsZXhpYmxlQm94OjpsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hp
bGRyZW4pCit2b2lkIFJlbmRlckZsZXhpYmxlQm94OjpsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0
Q2hpbGRyZW4sIGludCAvKnBhZ2VIZWlnaHQgRklYTUU6IEltcGxlbWVudCAqLykKIHsKICAgICBB
U1NFUlQobmVlZHNMYXlvdXQoKSk7CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZs
ZXhpYmxlQm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGli
bGVCb3guaAkocmV2aXNpb24gNjY4ODYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4
aWJsZUJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIGNhbGNIb3Jpem9udGFsUHJlZldpZHRocygpOwogICAgIHZvaWQgY2FsY1ZlcnRpY2FsUHJl
ZldpZHRocygpOwogCi0gICAgdmlydHVhbCB2b2lkIGxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRD
aGlsZHJlbik7CisgICAgdmlydHVhbCB2b2lkIGxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGls
ZHJlbiwgaW50IHBhZ2VIZWlnaHQpOwogICAgIHZvaWQgbGF5b3V0SG9yaXpvbnRhbEJveChib29s
IHJlbGF5b3V0Q2hpbGRyZW4pOwogICAgIHZvaWQgbGF5b3V0VmVydGljYWxCb3goYm9vbCByZWxh
eW91dENoaWxkcmVuKTsKIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCShyZXZp
c2lvbiA2Njg4NikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY0Nyw3ICs2NDcsNyBAQCB2b2lkIFJlbmRlcklubGluZTo6Y29tcHV0ZVJl
Y3RGb3JSZXBhaW50CiAgICAgICAgICAgICBMYXlvdXRTdGF0ZSogbGF5b3V0U3RhdGUgPSB2LT5s
YXlvdXRTdGF0ZSgpOwogICAgICAgICAgICAgaWYgKHN0eWxlKCktPnBvc2l0aW9uKCkgPT0gUmVs
YXRpdmVQb3NpdGlvbiAmJiBsYXllcigpKQogICAgICAgICAgICAgICAgIHJlY3QubW92ZShsYXll
cigpLT5yZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0KCkpOwotICAgICAgICAgICAgcmVjdC5tb3ZlKGxh
eW91dFN0YXRlLT5tX29mZnNldCk7CisgICAgICAgICAgICByZWN0Lm1vdmUobGF5b3V0U3RhdGUt
Pm1fcGFpbnRPZmZzZXQpOwogICAgICAgICAgICAgaWYgKGxheW91dFN0YXRlLT5tX2NsaXBwZWQp
CiAgICAgICAgICAgICAgICAgcmVjdC5pbnRlcnNlY3QobGF5b3V0U3RhdGUtPm1fY2xpcFJlY3Qp
OwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtNzM0LDcgKzczNCw3IEBAIHZvaWQgUmVuZGVySW5s
aW5lOjptYXBMb2NhbFRvQ29udGFpbmVyKFIKICAgICBpZiAoUmVuZGVyVmlldyAqdiA9IHZpZXco
KSkgewogICAgICAgICBpZiAodi0+bGF5b3V0U3RhdGVFbmFibGVkKCkgJiYgIXJlcGFpbnRDb250
YWluZXIpIHsKICAgICAgICAgICAgIExheW91dFN0YXRlKiBsYXlvdXRTdGF0ZSA9IHYtPmxheW91
dFN0YXRlKCk7Ci0gICAgICAgICAgICBJbnRTaXplIG9mZnNldCA9IGxheW91dFN0YXRlLT5tX29m
ZnNldDsKKyAgICAgICAgICAgIEludFNpemUgb2Zmc2V0ID0gbGF5b3V0U3RhdGUtPm1fcGFpbnRP
ZmZzZXQ7CiAgICAgICAgICAgICBpZiAoc3R5bGUoKS0+cG9zaXRpb24oKSA9PSBSZWxhdGl2ZVBv
c2l0aW9uICYmIGxheWVyKCkpCiAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IGxheWVyKCktPnJl
bGF0aXZlUG9zaXRpb25PZmZzZXQoKTsKICAgICAgICAgICAgIHRyYW5zZm9ybVN0YXRlLm1vdmUo
b2Zmc2V0KTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHJldmlzaW9uIDY2OTAz
KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNTQxLDExICsyNTQxLDExIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50Q2hpbGRMYXllcklu
dG9Db2wKICAgICBjb2x1bW5CbG9jay0+bGF5ZXIoKS0+Y29udmVydFRvTGF5ZXJDb29yZHMocm9v
dExheWVyLCBsYXllclgsIGxheWVyWSk7CiAgICAgCiAgICAgQ29sdW1uSW5mbyogY29sSW5mbyA9
IGNvbHVtbkJsb2NrLT5jb2x1bW5JbmZvKCk7Ci0gICAgdW5zaWduZWQgY29sQ291bnQgPSBjb2xJ
bmZvLT5jb2x1bW5Db3VudCgpOworICAgIHVuc2lnbmVkIGNvbENvdW50ID0gY29sdW1uQmxvY2st
PmNvbHVtbkNvdW50KGNvbEluZm8pOwogICAgIGludCBjdXJyWU9mZnNldCA9IDA7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvbENvdW50OyBpKyspIHsKICAgICAgICAgLy8gRm9yIGVh
Y2ggcmVjdCwgd2UgY2xpcCB0byB0aGUgcmVjdCwgYW5kIHRoZW4gd2UgYWRqdXN0IG91ciBjb29y
ZHMuCi0gICAgICAgIEludFJlY3QgY29sUmVjdCA9IGNvbEluZm8tPmNvbHVtblJlY3RBdChpKTsK
KyAgICAgICAgSW50UmVjdCBjb2xSZWN0ID0gY29sdW1uQmxvY2stPmNvbHVtblJlY3RBdChjb2xJ
bmZvLCBpKTsKICAgICAgICAgaW50IGN1cnJYT2Zmc2V0ID0gY29sUmVjdC54KCkgLSAoY29sdW1u
QmxvY2stPmJvcmRlckxlZnQoKSArIGNvbHVtbkJsb2NrLT5wYWRkaW5nTGVmdCgpKTsKICAgICAg
ICAgY29sUmVjdC5tb3ZlKGxheWVyWCwgbGF5ZXJZKTsKIApAQCAtMzAwNywxNyArMzAwNywxNyBA
QCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RDaGlsZExhCiAgICAgY29sdW1uQmxv
Y2stPmxheWVyKCktPmNvbnZlcnRUb0xheWVyQ29vcmRzKHJvb3RMYXllciwgbGF5ZXJYLCBsYXll
clkpOwogICAgIAogICAgIENvbHVtbkluZm8qIGNvbEluZm8gPSBjb2x1bW5CbG9jay0+Y29sdW1u
SW5mbygpOwotICAgIGludCBjb2xDb3VudCA9IGNvbEluZm8tPmNvbHVtbkNvdW50KCk7CisgICAg
aW50IGNvbENvdW50ID0gY29sdW1uQmxvY2stPmNvbHVtbkNvdW50KGNvbEluZm8pOwogICAgIAog
ICAgIC8vIFdlIGhhdmUgdG8gZ28gYmFja3dhcmRzIGZyb20gdGhlIGxhc3QgY29sdW1uIHRvIHRo
ZSBmaXJzdC4KICAgICBpbnQgbGVmdCA9IGNvbHVtbkJsb2NrLT5ib3JkZXJMZWZ0KCkgKyBjb2x1
bW5CbG9jay0+cGFkZGluZ0xlZnQoKTsKICAgICBpbnQgY3VycllPZmZzZXQgPSAwOwogICAgIGlu
dCBpOwogICAgIGZvciAoaSA9IDA7IGkgPCBjb2xDb3VudDsgaSsrKQotICAgICAgICBjdXJyWU9m
ZnNldCAtPSBjb2xJbmZvLT5jb2x1bW5SZWN0QXQoaSkuaGVpZ2h0KCk7CisgICAgICAgIGN1cnJZ
T2Zmc2V0IC09IGNvbHVtbkJsb2NrLT5jb2x1bW5SZWN0QXQoY29sSW5mbywgaSkuaGVpZ2h0KCk7
CiAgICAgZm9yIChpID0gY29sQ291bnQgLSAxOyBpID49IDA7IGktLSkgewogICAgICAgICAvLyBG
b3IgZWFjaCByZWN0LCB3ZSBjbGlwIHRvIHRoZSByZWN0LCBhbmQgdGhlbiB3ZSBhZGp1c3Qgb3Vy
IGNvb3Jkcy4KLSAgICAgICAgSW50UmVjdCBjb2xSZWN0ID0gY29sSW5mby0+Y29sdW1uUmVjdEF0
KGkpOworICAgICAgICBJbnRSZWN0IGNvbFJlY3QgPSBjb2x1bW5CbG9jay0+Y29sdW1uUmVjdEF0
KGNvbEluZm8sIGkpOwogICAgICAgICBpbnQgY3VyclhPZmZzZXQgPSBjb2xSZWN0LngoKSAtIGxl
ZnQ7CiAgICAgICAgIGN1cnJZT2Zmc2V0ICs9IGNvbFJlY3QuaGVpZ2h0KCk7CiAgICAgICAgIGNv
bFJlY3QubW92ZShsYXllclgsIGxheWVyWSk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMaW5lQm94TGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGluZUJveExpc3QuY3BwCShyZXZpc2lvbiA2Njg4NikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxpbmVCb3hMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNiBAQAogI2lu
Y2x1ZGUgIlJlbmRlcklubGluZS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRl
ICJSb290SW5saW5lQm94LmgiCi0jaW5jbHVkZSAiU2V0dGluZ3MuaCIgLy8gRklYTUU6IFRoaXMg
aW5jbHVkZSBjYW4gYmUgcmVtb3ZlZCB3aGVuIHBhZ2luYXRlRHVyaW5nTGF5b3V0RW5hYmxlZCBp
cyB0YWtlbiBvdXQuCiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKQEAgLTE2MSw3ICsxNjAsNyBA
QCB2b2lkIFJlbmRlckxpbmVCb3hMaXN0OjpwYWludChSZW5kZXJCb3hNCiAgICAgICAgIHJldHVy
bjsKIAogICAgIFJlbmRlclZpZXcqIHYgPSByZW5kZXJlci0+dmlldygpOwotICAgIGJvb2wgdXNl
UHJpbnRSZWN0ID0gIXYtPnByaW50UmVjdCgpLmlzRW1wdHkoKSAmJiAhcmVuZGVyZXItPmRvY3Vt
ZW50KCktPnNldHRpbmdzKCktPnBhZ2luYXRlRHVyaW5nTGF5b3V0RW5hYmxlZCgpOworICAgIGJv
b2wgdXNlUHJpbnRSZWN0ID0gIXYtPnByaW50UmVjdCgpLmlzRW1wdHkoKTsKICAgICAKICAgICAv
LyBXZSBjYW4gY2hlY2sgdGhlIGZpcnN0IGJveCBhbmQgbGFzdCBib3ggYW5kIGF2b2lkIHBhaW50
aW5nIGlmIHdlIGRvbid0CiAgICAgLy8gaW50ZXJzZWN0LiAgVGhpcyBpcyBhIHF1aWNrIHNob3J0
LWNpcmN1aXQgdGhhdCB3ZSBjYW4gdGFrZSB0byBhdm9pZCB3YWxraW5nIGFueSBsaW5lcy4KQEAg
LTIxNSw3ICsyMTQsNiBAQCB2b2lkIFJlbmRlckxpbmVCb3hMaXN0OjpwYWludChSZW5kZXJCb3hN
CiAgICAgICAgIGludCBib3R0b20gPSBjdXJyLT5ib3R0b21WaXNpYmxlT3ZlcmZsb3coKSArIHJl
bmRlcmVyLT5tYXhpbWFsT3V0bGluZVNpemUoaW5mby5waGFzZSk7CiAgICAgICAgIGggPSBib3R0
b20gLSB0b3A7CiAgICAgICAgIHlQb3MgPSB0eSArIHRvcDsKLSAgICAgICAgdi0+c2V0TWluaW11
bUNvbHVtbkhlaWdodChoKTsKICAgICAgICAgaWYgKHlQb3MgPCBpbmZvLnJlY3QuYm90dG9tKCkg
JiYgeVBvcyArIGggPiBpbmZvLnJlY3QueSgpKQogICAgICAgICAgICAgY3Vyci0+cGFpbnQoaW5m
bywgdHgsIHR5KTsKICAgICB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAkocmV2aXNp
b24gNjY4ODYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTIsNyArNTIsNiBAQCBSZW5kZXJWaWV3OjpSZW5kZXJWaWV3KE5vZGUqIG5vZGUs
IEZyYW1lCiAgICAgLCBtX21heGltYWxPdXRsaW5lU2l6ZSgwKQogICAgICwgbV9iZXN0VHJ1bmNh
dGVkQXQoMCkKICAgICAsIG1fdHJ1bmNhdG9yV2lkdGgoMCkKLSAgICAsIG1fbWluaW11bUNvbHVt
bkhlaWdodCgwKQogICAgICwgbV9mb3JjZWRQYWdlQnJlYWsoZmFsc2UpCiAgICAgLCBtX2xheW91
dFN0YXRlKDApCiAgICAgLCBtX2xheW91dFN0YXRlRGlzYWJsZUNvdW50KDApCkBAIC02OTUsNyAr
Njk0LDYgQEAgdm9pZCBSZW5kZXJWaWV3OjpzZXRCZXN0VHJ1bmNhdGVkQXQoaW50IAogCiB2b2lk
IFJlbmRlclZpZXc6OnB1c2hMYXlvdXRTdGF0ZShSZW5kZXJPYmplY3QqIHJvb3QpCiB7Ci0gICAg
QVNTRVJUKCFkb2luZ0Z1bGxSZXBhaW50KCkpOwogICAgIEFTU0VSVChtX2xheW91dFN0YXRlRGlz
YWJsZUNvdW50ID09IDApOwogICAgIEFTU0VSVChtX2xheW91dFN0YXRlID09IDApOwogCkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVmlldy5oCShyZXZpc2lvbiA2Njg4NikKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtODMsMTIgKzgzLDEwIEBAIHB1Ymxp
YzoKICAgICBJbnRSZWN0IHByaW50UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJpbnRSZWN0OyB9
CiAgICAgdm9pZCBzZXRQcmludFJlY3QoY29uc3QgSW50UmVjdCYgcikgeyBtX3ByaW50UmVjdCA9
IHI7IH0KIAotICAgIHZvaWQgc2V0VHJ1bmNhdGVkQXQoaW50IHkpIHsgbV90cnVuY2F0ZWRBdCA9
IHk7IG1fYmVzdFRydW5jYXRlZEF0ID0gbV90cnVuY2F0b3JXaWR0aCA9IDA7IG1fbWluaW11bUNv
bHVtbkhlaWdodCA9IDA7IG1fZm9yY2VkUGFnZUJyZWFrID0gZmFsc2U7IH0KKyAgICB2b2lkIHNl
dFRydW5jYXRlZEF0KGludCB5KSB7IG1fdHJ1bmNhdGVkQXQgPSB5OyBtX2Jlc3RUcnVuY2F0ZWRB
dCA9IG1fdHJ1bmNhdG9yV2lkdGggPSAwOyBtX2ZvcmNlZFBhZ2VCcmVhayA9IGZhbHNlOyB9CiAg
ICAgdm9pZCBzZXRCZXN0VHJ1bmNhdGVkQXQoaW50IHksIFJlbmRlckJveE1vZGVsT2JqZWN0KiBm
b3JSZW5kZXJlciwgYm9vbCBmb3JjZWRCcmVhayA9IGZhbHNlKTsKLSAgICB2b2lkIHNldE1pbmlt
dW1Db2x1bW5IZWlnaHQoaW50IGhlaWdodCkgeyBtX21pbmltdW1Db2x1bW5IZWlnaHQgPSBoZWln
aHQ7IH0KICAgICBpbnQgYmVzdFRydW5jYXRlZEF0KCkgY29uc3QgeyByZXR1cm4gbV9iZXN0VHJ1
bmNhdGVkQXQ7IH0KLSAgICBpbnQgbWluaW11bUNvbHVtbkhlaWdodCgpIGNvbnN0IHsgcmV0dXJu
IG1fbWluaW11bUNvbHVtbkhlaWdodDsgfQotCisgICAgCiAgICAgaW50IHRydW5jYXRlZEF0KCkg
Y29uc3QgeyByZXR1cm4gbV90cnVuY2F0ZWRBdDsgfQogCiAgICAgdmlydHVhbCB2b2lkIGFic29s
dXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgaW50IHR4LCBpbnQgdHkpOwpAQCAtMTIyLDIxICsx
MjAsMjAgQEAgcHVibGljOgogCiAgICAgYm9vbCBkb2luZ0Z1bGxSZXBhaW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9mcmFtZVZpZXctPm5lZWRzRnVsbFJlcGFpbnQoKTsgfQogCi0gICAgdm9pZCBwdXNo
TGF5b3V0U3RhdGUoUmVuZGVyQm94KiByZW5kZXJlciwgY29uc3QgSW50U2l6ZSYgb2Zmc2V0KQor
ICAgIHZvaWQgcHVzaExheW91dFN0YXRlKFJlbmRlckJveCogcmVuZGVyZXIsIGNvbnN0IEludFNp
emUmIG9mZnNldCwgaW50IHBhZ2VIZWlnaHQgPSAwLCBDb2x1bW5JbmZvKiBjb2xJbmZvID0gMCkK
ICAgICB7Ci0gICAgICAgIGlmIChkb2luZ0Z1bGxSZXBhaW50KCkpCi0gICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIC8vIFdlIHB1c2ggTGF5b3V0U3RhdGUgZXZlbiBpZiBsYXlvdXRTdGF0ZSBp
cyBkaXNhYmxlZCBiZWNhdXNlIGl0IHN0b3JlcyBsYXlvdXREZWx0YSB0b28uCi0gICAgICAgIG1f
bGF5b3V0U3RhdGUgPSBuZXcgKHJlbmRlckFyZW5hKCkpIExheW91dFN0YXRlKG1fbGF5b3V0U3Rh
dGUsIHJlbmRlcmVyLCBvZmZzZXQpOworICAgICAgICBpZiAoIWRvaW5nRnVsbFJlcGFpbnQoKSB8
fCByZW5kZXJlci0+aGFzQ29sdW1ucygpIHx8IG1fbGF5b3V0U3RhdGUtPnBhZ2luYXRlZCgpKQor
ICAgICAgICAgICAgbV9sYXlvdXRTdGF0ZSA9IG5ldyAocmVuZGVyQXJlbmEoKSkgTGF5b3V0U3Rh
dGUobV9sYXlvdXRTdGF0ZSwgcmVuZGVyZXIsIG9mZnNldCwgcGFnZUhlaWdodCwgY29sSW5mbyk7
CiAgICAgfQogCiAgICAgdm9pZCBwdXNoTGF5b3V0U3RhdGUoUmVuZGVyT2JqZWN0Kik7CiAKICAg
ICB2b2lkIHBvcExheW91dFN0YXRlKCkKICAgICB7Ci0gICAgICAgIGlmIChkb2luZ0Z1bGxSZXBh
aW50KCkpCi0gICAgICAgICAgICByZXR1cm47CiAgICAgICAgIExheW91dFN0YXRlKiBzdGF0ZSA9
IG1fbGF5b3V0U3RhdGU7CisgICAgICAgIGlmIChkb2luZ0Z1bGxSZXBhaW50KCkgJiYgIW1fbGF5
b3V0U3RhdGUtPnBhZ2luYXRlZCgpKQorICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBtX2xh
eW91dFN0YXRlID0gc3RhdGUtPm1fbmV4dDsKICAgICAgICAgc3RhdGUtPmRlc3Ryb3kocmVuZGVy
QXJlbmEoKSk7CiAgICAgfQpAQCAtMTk4LDcgKzE5NSw2IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6
CiAgICAgaW50IG1fYmVzdFRydW5jYXRlZEF0OwogICAgIGludCBtX3RydW5jYXRvcldpZHRoOwot
ICAgIGludCBtX21pbmltdW1Db2x1bW5IZWlnaHQ7CiAgICAgYm9vbCBtX2ZvcmNlZFBhZ2VCcmVh
azsKICAgICBMYXlvdXRTdGF0ZSogbV9sYXlvdXRTdGF0ZTsKICAgICB1bnNpZ25lZCBtX2xheW91
dFN0YXRlRGlzYWJsZUNvdW50OwpAQCAtMjI3LDEzICsyMjMsMTMgQEAgdm9pZCB0b1JlbmRlclZp
ZXcoY29uc3QgUmVuZGVyVmlldyopOwogY2xhc3MgTGF5b3V0U3RhdGVNYWludGFpbmVyIDogcHVi
bGljIE5vbmNvcHlhYmxlIHsKIHB1YmxpYzoKICAgICAvLyBjdG9yIHRvIHB1c2ggbm93Ci0gICAg
TGF5b3V0U3RhdGVNYWludGFpbmVyKFJlbmRlclZpZXcqIHZpZXcsIFJlbmRlckJveCogcm9vdCwg
SW50U2l6ZSBvZmZzZXQsIGJvb2wgZGlzYWJsZVN0YXRlID0gZmFsc2UpCisgICAgTGF5b3V0U3Rh
dGVNYWludGFpbmVyKFJlbmRlclZpZXcqIHZpZXcsIFJlbmRlckJveCogcm9vdCwgSW50U2l6ZSBv
ZmZzZXQsIGJvb2wgZGlzYWJsZVN0YXRlID0gZmFsc2UsIGludCBwYWdlSGVpZ2h0ID0gMCwgQ29s
dW1uSW5mbyogY29sSW5mbyA9IDApCiAgICAgICAgIDogbV92aWV3KHZpZXcpCiAgICAgICAgICwg
bV9kaXNhYmxlZChkaXNhYmxlU3RhdGUpCiAgICAgICAgICwgbV9kaWRTdGFydChmYWxzZSkKICAg
ICAgICAgLCBtX2RpZEVuZChmYWxzZSkKICAgICB7Ci0gICAgICAgIHB1c2gocm9vdCwgb2Zmc2V0
KTsKKyAgICAgICAgcHVzaChyb290LCBvZmZzZXQsIHBhZ2VIZWlnaHQsIGNvbEluZm8pOwogICAg
IH0KICAgICAKICAgICAvLyBjdG9yIHRvIG1heWJlIHB1c2ggbGF0ZXIKQEAgLTI1MCwxMSArMjQ2
LDExIEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKG1fZGlkU3RhcnQgPT0gbV9kaWRFbmQpOyAg
IC8vIGlmIHRoaXMgZmlyZXMsIGl0IG1lYW5zIHRoYXQgc29tZW9uZSBkaWQgYSBwdXNoKCksIGJ1
dCBmb3Jnb3QgdG8gcG9wKCkuCiAgICAgfQogCi0gICAgdm9pZCBwdXNoKFJlbmRlckJveCogcm9v
dCwgSW50U2l6ZSBvZmZzZXQpCisgICAgdm9pZCBwdXNoKFJlbmRlckJveCogcm9vdCwgSW50U2l6
ZSBvZmZzZXQsIGludCBwYWdlSGVpZ2h0ID0gMCwgQ29sdW1uSW5mbyogY29sSW5mbyA9IDApCiAg
ICAgewogICAgICAgICBBU1NFUlQoIW1fZGlkU3RhcnQpOwogICAgICAgICAvLyBXZSBwdXNoIHN0
YXRlIGV2ZW4gaWYgZGlzYWJsZWQsIGJlY2F1c2Ugd2Ugc3RpbGwgbmVlZCB0byBzdG9yZSBsYXlv
dXREZWx0YQotICAgICAgICBtX3ZpZXctPnB1c2hMYXlvdXRTdGF0ZShyb290LCBvZmZzZXQpOwor
ICAgICAgICBtX3ZpZXctPnB1c2hMYXlvdXRTdGF0ZShyb290LCBvZmZzZXQsIHBhZ2VIZWlnaHQs
IGNvbEluZm8pOwogICAgICAgICBpZiAobV9kaXNhYmxlZCkKICAgICAgICAgICAgIG1fdmlldy0+
ZGlzYWJsZUxheW91dFN0YXRlKCk7CiAgICAgICAgIG1fZGlkU3RhcnQgPSB0cnVlOwpJbmRleDog
V2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guaAkocmV2aXNpb24gNjY4ODYpCisrKyBXZWJDb3JlL3Jl
bmRlcmluZy9Sb290SW5saW5lQm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAg
cHVibGljOgogICAgICAgICAsIG1fbGluZUJyZWFrUG9zKDApCiAgICAgICAgICwgbV9saW5lVG9w
KDApCiAgICAgICAgICwgbV9saW5lQm90dG9tKDApCisgICAgICAgICwgbV9wYWdpbmF0aW9uU3Ry
dXQoMCkKICAgICB7CiAgICAgfQogCkBAIC01Nyw2ICs1OCw5IEBAIHB1YmxpYzoKICAgICBpbnQg
bGluZVRvcCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZVRvcDsgfQogICAgIGludCBsaW5lQm90dG9t
KCkgY29uc3QgeyByZXR1cm4gbV9saW5lQm90dG9tOyB9CiAKKyAgICBpbnQgcGFnaW5hdGlvblN0
cnV0KCkgY29uc3QgeyByZXR1cm4gbV9wYWdpbmF0aW9uU3RydXQ7IH0KKyAgICB2b2lkIHNldFBh
Z2luYXRpb25TdHJ1dChpbnQgcykgeyBtX3BhZ2luYXRpb25TdHJ1dCA9IHM7IH0KKwogICAgIGlu
dCBzZWxlY3Rpb25Ub3AoKSBjb25zdDsKICAgICBpbnQgc2VsZWN0aW9uQm90dG9tKCkgY29uc3Qg
eyByZXR1cm4gbGluZUJvdHRvbSgpOyB9CiAgICAgaW50IHNlbGVjdGlvbkhlaWdodCgpIGNvbnN0
IHsgcmV0dXJuIG1heCgwLCBzZWxlY3Rpb25Cb3R0b20oKSAtIHNlbGVjdGlvblRvcCgpKTsgfQpA
QCAtMTQxLDYgKzE0NSw4IEBAIHByaXZhdGU6CiAgICAgaW50IG1fbGluZVRvcDsKICAgICBpbnQg
bV9saW5lQm90dG9tOwogCisgICAgaW50IG1fcGFnaW5hdGlvblN0cnV0OworCiAgICAgLy8gRmxv
YXRzIGhhbmdpbmcgb2ZmIHRoZSBsaW5lIGFyZSBwdXNoZWQgaW50byB0aGlzIHZlY3RvciBkdXJp
bmcgbGF5b3V0LiBJdCBpcyBvbmx5CiAgICAgLy8gZ29vZCBmb3IgYXMgbG9uZyBhcyB0aGUgbGlu
ZSBoYXMgbm90IGJlZW4gbWFya2VkIGRpcnR5LgogICAgIE93blB0cjxWZWN0b3I8UmVuZGVyQm94
Kj4gPiBtX2Zsb2F0czsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67612</attachid>
            <date>2010-09-14 15:24:55 -0700</date>
            <delta_ts>2010-09-14 15:26:06 -0700</delta_ts>
            <desc>Make table vertical alignment and growth do something vaguely sensible</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>92975</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL0NvbHVtbkluZm8uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9Db2x1bW5JbmZvLmgJKHJldmlzaW9uIDY2OTAzKQorKysgV2ViQ29yZS9y
ZW5kZXJpbmcvQ29sdW1uSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw5IEBAIHB1
YmxpYzoKICAgICBDb2x1bW5JbmZvKCkKICAgICAgICAgOiBtX2Rlc2lyZWRDb2x1bW5XaWR0aCgw
KQogICAgICAgICAsIG1fZGVzaXJlZENvbHVtbkNvdW50KDEpCisgICAgICAgICwgbV9jb2x1bW5D
b3VudCgxKQorICAgICAgICAsIG1fY29sdW1uSGVpZ2h0KDApCisgICAgICAgICwgbV9taW5pbXVt
Q29sdW1uSGVpZ2h0KDApCiAgICAgICAgIHsgfQogICAgIAogICAgIGludCBkZXNpcmVkQ29sdW1u
V2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2Rlc2lyZWRDb2x1bW5XaWR0aDsgfQpAQCAtNDQsMTkg
KzQ3LDI4IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBkZXNpcmVkQ29sdW1uQ291bnQoKSBjb25z
dCB7IHJldHVybiBtX2Rlc2lyZWRDb2x1bW5Db3VudDsgfQogICAgIHZvaWQgc2V0RGVzaXJlZENv
bHVtbkNvdW50KHVuc2lnbmVkIGNvdW50KSB7IG1fZGVzaXJlZENvbHVtbkNvdW50ID0gY291bnQ7
IH0KIAotICAgIC8vIEVuY2Fwc3VsYXRlZCBmb3IgdGhlIGZ1dHVyZSB3aGVyZSB3ZSBjYW4gYXZv
aWQgc3RvcmluZyB0aGUgcmVjdHMgYW5kIGp1c3QgY29tcHV0ZSB0aGVtIGR5bmFtaWNhbGx5Lgot
ICAgIHNpemVfdCBjb2x1bW5Db3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fY29sdW1uUmVjdHMuc2l6
ZSgpOyB9Ci0gICAgY29uc3QgSW50UmVjdCYgY29sdW1uUmVjdEF0KHNpemVfdCBpKSBjb25zdCB7
IHJldHVybiBtX2NvbHVtblJlY3RzW2ldOyB9CisgICAgdW5zaWduZWQgY29sdW1uQ291bnQoKSBj
b25zdCB7IHJldHVybiBtX2NvbHVtbkNvdW50OyB9CisgICAgaW50IGNvbHVtbkhlaWdodCgpIGNv
bnN0IHsgcmV0dXJuIG1fY29sdW1uSGVpZ2h0OyB9CiAKLSAgICB2b2lkIGNsZWFyQ29sdW1ucygp
IHsgbV9jb2x1bW5SZWN0cy5jbGVhcigpOyB9CisgICAgLy8gU2V0IG91ciBjb3VudCBhbmQgaGVp
Z2h0LiAgVGhpcyBpcyBlbm91Z2ggaW5mbyBmb3IgYSBSZW5kZXJCbG9jayB0byBjb21wdXRlIHBh
Z2UgcmVjdHMKKyAgICAvLyBkeW5hbWljYWxseS4KKyAgICB2b2lkIHNldENvbHVtbkNvdW50QW5k
SGVpZ2h0KGludCBjLCBpbnQgaCkKKyAgICB7IAorICAgICAgICBtX2NvbHVtbkNvdW50ID0gYzsK
KyAgICAgICAgbV9jb2x1bW5IZWlnaHQgPSBoOworICAgIH0KKyAgICB2b2lkIHNldENvbHVtbkhl
aWdodChpbnQgaCkgeyBtX2NvbHVtbkhlaWdodCA9IGg7IH0KKworICAgIHZvaWQgdXBkYXRlTWlu
aW11bUNvbHVtbkhlaWdodChpbnQgaCkgeyBtX21pbmltdW1Db2x1bW5IZWlnaHQgPSBtYXgoaCwg
bV9taW5pbXVtQ29sdW1uSGVpZ2h0KTsgfQorICAgIGludCBtaW5pbXVtQ29sdW1uSGVpZ2h0KCkg
Y29uc3QgeyByZXR1cm4gbV9taW5pbXVtQ29sdW1uSGVpZ2h0OyB9CiAKLSAgICAvLyBGSVhNRTog
V2lsbCBnbyBhd2F5IG9uY2Ugd2UgZG9uJ3QgdXNlIHRoZSBWZWN0b3IuCi0gICAgdm9pZCBhZGRD
b2x1bW5SZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpIHsgbV9jb2x1bW5SZWN0cy5hcHBlbmQocmVj
dCk7IH0KLSAgICAKIHByaXZhdGU6CiAgICAgaW50IG1fZGVzaXJlZENvbHVtbldpZHRoOwogICAg
IHVuc2lnbmVkIG1fZGVzaXJlZENvbHVtbkNvdW50OwotICAgIFZlY3RvcjxJbnRSZWN0PiBtX2Nv
bHVtblJlY3RzOworICAgIAorICAgIHVuc2lnbmVkIG1fY29sdW1uQ291bnQ7CisgICAgaW50IG1f
Y29sdW1uSGVpZ2h0OworICAgIGludCBtX21pbmltdW1Db2x1bW5IZWlnaHQ7CiB9OwogCiB9Cklu
ZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvTGF5b3V0U3RhdGUuY3BwCShyZXZpc2lvbiA2Njg4NikKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsOCArMzMs
OSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUxheW91dFN0YXRlOjpMYXlvdXRTdGF0ZShM
YXlvdXRTdGF0ZSogcHJldiwgUmVuZGVyQm94KiByZW5kZXJlciwgY29uc3QgSW50U2l6ZSYgb2Zm
c2V0KQotICAgIDogbV9uZXh0KHByZXYpCitMYXlvdXRTdGF0ZTo6TGF5b3V0U3RhdGUoTGF5b3V0
U3RhdGUqIHByZXYsIFJlbmRlckJveCogcmVuZGVyZXIsIGNvbnN0IEludFNpemUmIG9mZnNldCwg
aW50IHBhZ2VIZWlnaHQsIENvbHVtbkluZm8qIGNvbEluZm8pCisgICAgOiBtX2NvbHVtbkluZm8o
Y29sSW5mbykKKyAgICAsIG1fbmV4dChwcmV2KQogI2lmbmRlZiBOREVCVUcKICAgICAsIG1fcmVu
ZGVyZXIocmVuZGVyZXIpCiAjZW5kaWYKQEAgLTQ1LDQzICs0Niw2NyBAQCBMYXlvdXRTdGF0ZTo6
TGF5b3V0U3RhdGUoTGF5b3V0U3RhdGUqIHByCiAgICAgaWYgKGZpeGVkKSB7CiAgICAgICAgIC8v
IEZJWE1FOiBUaGlzIGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgd2l0aCB0cmFuc2Zvcm1zLgogICAg
ICAgICBGbG9hdFBvaW50IGZpeGVkT2Zmc2V0ID0gcmVuZGVyZXItPnZpZXcoKS0+bG9jYWxUb0Fi
c29sdXRlKEZsb2F0UG9pbnQoKSwgdHJ1ZSk7Ci0gICAgICAgIG1fb2Zmc2V0ID0gSW50U2l6ZShm
aXhlZE9mZnNldC54KCksIGZpeGVkT2Zmc2V0LnkoKSkgKyBvZmZzZXQ7CisgICAgICAgIG1fcGFp
bnRPZmZzZXQgPSBJbnRTaXplKGZpeGVkT2Zmc2V0LngoKSwgZml4ZWRPZmZzZXQueSgpKSArIG9m
ZnNldDsKICAgICB9IGVsc2UKLSAgICAgICAgbV9vZmZzZXQgPSBwcmV2LT5tX29mZnNldCArIG9m
ZnNldDsKKyAgICAgICAgbV9wYWludE9mZnNldCA9IHByZXYtPm1fcGFpbnRPZmZzZXQgKyBvZmZz
ZXQ7CiAKLSAgICBpZiAocmVuZGVyZXItPmlzUmVsUG9zaXRpb25lZCgpKSB7Ci0gICAgICAgIGlm
IChyZW5kZXJlci0+aGFzTGF5ZXIoKSkKLSAgICAgICAgICAgIG1fb2Zmc2V0ICs9IHJlbmRlcmVy
LT5sYXllcigpLT5yZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0KCk7Ci0gICAgfSBlbHNlIGlmIChyZW5k
ZXJlci0+aXNQb3NpdGlvbmVkKCkgJiYgIWZpeGVkKSB7CisgICAgaWYgKHJlbmRlcmVyLT5pc1Bv
c2l0aW9uZWQoKSAmJiAhZml4ZWQpIHsKICAgICAgICAgaWYgKFJlbmRlck9iamVjdCogY29udGFp
bmVyID0gcmVuZGVyZXItPmNvbnRhaW5lcigpKSB7CiAgICAgICAgICAgICBpZiAoY29udGFpbmVy
LT5pc1JlbFBvc2l0aW9uZWQoKSAmJiBjb250YWluZXItPmlzUmVuZGVySW5saW5lKCkpCi0gICAg
ICAgICAgICAgICAgbV9vZmZzZXQgKz0gdG9SZW5kZXJJbmxpbmUoY29udGFpbmVyKS0+cmVsYXRp
dmVQb3NpdGlvbmVkSW5saW5lT2Zmc2V0KHJlbmRlcmVyKTsKKyAgICAgICAgICAgICAgICBtX3Bh
aW50T2Zmc2V0ICs9IHRvUmVuZGVySW5saW5lKGNvbnRhaW5lciktPnJlbGF0aXZlUG9zaXRpb25l
ZElubGluZU9mZnNldChyZW5kZXJlcik7CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBtX2xheW91
dE9mZnNldCA9IG1fcGFpbnRPZmZzZXQ7CisKKyAgICBpZiAocmVuZGVyZXItPmlzUmVsUG9zaXRp
b25lZCgpICYmIHJlbmRlcmVyLT5oYXNMYXllcigpKQorICAgICAgICBtX3BhaW50T2Zmc2V0ICs9
IHJlbmRlcmVyLT5sYXllcigpLT5yZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0KCk7CisKICAgICBtX2Ns
aXBwZWQgPSAhZml4ZWQgJiYgcHJldi0+bV9jbGlwcGVkOwogICAgIGlmIChtX2NsaXBwZWQpCiAg
ICAgICAgIG1fY2xpcFJlY3QgPSBwcmV2LT5tX2NsaXBSZWN0OwogCiAgICAgaWYgKHJlbmRlcmVy
LT5oYXNPdmVyZmxvd0NsaXAoKSkgewogICAgICAgICBSZW5kZXJMYXllciogbGF5ZXIgPSByZW5k
ZXJlci0+bGF5ZXIoKTsKLSAgICAgICAgSW50UmVjdCBjbGlwUmVjdCh0b1BvaW50KG1fb2Zmc2V0
KSArIHJlbmRlcmVyLT52aWV3KCktPmxheW91dERlbHRhKCksIGxheWVyLT5zaXplKCkpOworICAg
ICAgICBJbnRSZWN0IGNsaXBSZWN0KHRvUG9pbnQobV9wYWludE9mZnNldCkgKyByZW5kZXJlci0+
dmlldygpLT5sYXlvdXREZWx0YSgpLCBsYXllci0+c2l6ZSgpKTsKICAgICAgICAgaWYgKG1fY2xp
cHBlZCkKICAgICAgICAgICAgIG1fY2xpcFJlY3QuaW50ZXJzZWN0KGNsaXBSZWN0KTsKICAgICAg
ICAgZWxzZSB7CiAgICAgICAgICAgICBtX2NsaXBSZWN0ID0gY2xpcFJlY3Q7CiAgICAgICAgICAg
ICBtX2NsaXBwZWQgPSB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIG1fb2Zmc2V0IC09IGxheWVy
LT5zY3JvbGxlZENvbnRlbnRPZmZzZXQoKTsKKworICAgICAgICBtX3BhaW50T2Zmc2V0IC09IGxh
eWVyLT5zY3JvbGxlZENvbnRlbnRPZmZzZXQoKTsKICAgICB9CiAKLSAgICBtX2xheW91dERlbHRh
ID0gbV9uZXh0LT5tX2xheW91dERlbHRhOworICAgIC8vIERpc2FibGUgcGFnaW5hdGlvbiBmb3Ig
b2JqZWN0cyB3ZSBkb24ndCBzdXBwb3J0LiAgRm9yIG5vdyB0aGlzIGluY2x1ZGVzIG92ZXJmbG93
OnNjcm9sbC9hdXRvIGFuZCBpbmxpbmUgYmxvY2tzLgorICAgIGlmIChyZW5kZXJlci0+aXNSZXBs
YWNlZCgpIHx8IHJlbmRlcmVyLT5zY3JvbGxzT3ZlcmZsb3coKSkKKyAgICAgICAgbV9wYWdlSGVp
Z2h0ID0gMDsKKworICAgIC8vIElmIHdlIGVzdGFibGlzaCBhIG5ldyBwYWdlIGhlaWdodCwgdGhl
biBjYWNoZSB0aGUgb2Zmc2V0IHRvIHRoZSB0b3Agb2YgdGhlIGZpcnN0IHBhZ2UuCisgICAgLy8g
V2UgY2FuIGNvbXBhcmUgdGhpcyBsYXRlciBvbiB0byBmaWd1cmUgb3V0IHdoYXQgcGFydCBvZiB0
aGUgcGFnZSB3ZSdyZSBhY3R1YWxseSBvbiwKKyAgICBpZiAocGFnZUhlaWdodCkgeworICAgICAg
ICBtX3BhZ2VIZWlnaHQgPSBwYWdlSGVpZ2h0OworICAgICAgICBtX3BhZ2VPZmZzZXQgPSBJbnRT
aXplKG1fcGFpbnRPZmZzZXQud2lkdGgoKSArIHJlbmRlcmVyLT5ib3JkZXJMZWZ0KCkgKyByZW5k
ZXJlci0+cGFkZGluZ0xlZnQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3Bh
aW50T2Zmc2V0LmhlaWdodCgpICsgcmVuZGVyZXItPmJvcmRlclRvcCgpICsgcmVuZGVyZXItPnBh
ZGRpbmdUb3AoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gSWYgd2UgZG9uJ3QgZXN0YWJs
aXNoIGEgbmV3IHBhZ2UgaGVpZ2h0LCB0aGVuIHByb3BhZ2F0ZSB0aGUgb2xkIHBhZ2UgaGVpZ2h0
IGFuZCBvZmZzZXQgZG93bi4KKyAgICAgICAgbV9wYWdlSGVpZ2h0ID0gbV9uZXh0LT5tX3BhZ2VI
ZWlnaHQ7CisgICAgICAgIG1fcGFnZU9mZnNldCA9IG1fbmV4dC0+bV9wYWdlT2Zmc2V0OworICAg
IH0KKyAgICAKKyAgICBpZiAoIW1fY29sdW1uSW5mbykKKyAgICAgICAgbV9jb2x1bW5JbmZvID0g
bV9uZXh0LT5tX2NvbHVtbkluZm87CiAKKyAgICBtX2xheW91dERlbHRhID0gbV9uZXh0LT5tX2xh
eW91dERlbHRhOworICAgIAogICAgIC8vIEZJWE1FOiA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTM0NDM+IEFwcGx5IGNvbnRyb2wgY2xpcCBpZiBwcmVzZW50LgogfQog
CiBMYXlvdXRTdGF0ZTo6TGF5b3V0U3RhdGUoUmVuZGVyT2JqZWN0KiByb290KQogICAgIDogbV9j
bGlwcGVkKGZhbHNlKQorICAgICwgbV9wYWdlSGVpZ2h0KDApCisgICAgLCBtX2NvbHVtbkluZm8o
MCkKICAgICAsIG1fbmV4dCgwKQogI2lmbmRlZiBOREVCVUcKICAgICAsIG1fcmVuZGVyZXIocm9v
dCkKQEAgLTg5LDEzICsxMTQsMTMgQEAgTGF5b3V0U3RhdGU6OkxheW91dFN0YXRlKFJlbmRlck9i
amVjdCogcgogewogICAgIFJlbmRlck9iamVjdCogY29udGFpbmVyID0gcm9vdC0+Y29udGFpbmVy
KCk7CiAgICAgRmxvYXRQb2ludCBhYnNDb250ZW50UG9pbnQgPSBjb250YWluZXItPmxvY2FsVG9B
YnNvbHV0ZShGbG9hdFBvaW50KCksIGZhbHNlLCB0cnVlKTsKLSAgICBtX29mZnNldCA9IEludFNp
emUoYWJzQ29udGVudFBvaW50LngoKSwgYWJzQ29udGVudFBvaW50LnkoKSk7CisgICAgbV9wYWlu
dE9mZnNldCA9IEludFNpemUoYWJzQ29udGVudFBvaW50LngoKSwgYWJzQ29udGVudFBvaW50Lnko
KSk7CiAKICAgICBpZiAoY29udGFpbmVyLT5oYXNPdmVyZmxvd0NsaXAoKSkgewogICAgICAgICBS
ZW5kZXJMYXllciogbGF5ZXIgPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KGNvbnRhaW5lciktPmxh
eWVyKCk7CiAgICAgICAgIG1fY2xpcHBlZCA9IHRydWU7Ci0gICAgICAgIG1fY2xpcFJlY3QgPSBJ
bnRSZWN0KHRvUG9pbnQobV9vZmZzZXQpLCBsYXllci0+c2l6ZSgpKTsKLSAgICAgICAgbV9vZmZz
ZXQgLT0gbGF5ZXItPnNjcm9sbGVkQ29udGVudE9mZnNldCgpOworICAgICAgICBtX2NsaXBSZWN0
ID0gSW50UmVjdCh0b1BvaW50KG1fcGFpbnRPZmZzZXQpLCBsYXllci0+c2l6ZSgpKTsKKyAgICAg
ICAgbV9wYWludE9mZnNldCAtPSBsYXllci0+c2Nyb2xsZWRDb250ZW50T2Zmc2V0KCk7CiAgICAg
fQogfQogCkBAIC0xMjYsNCArMTUxLDE5IEBAIHZvaWQgTGF5b3V0U3RhdGU6Om9wZXJhdG9yIGRl
bGV0ZSh2b2lkKiAKICAgICAqKHNpemVfdCopcHRyID0gc3o7CiB9CiAKK3ZvaWQgTGF5b3V0U3Rh
dGU6OmNsZWFyUGFnaW5hdGlvbkluZm9ybWF0aW9uKCkKK3sKKyAgICBtX3BhZ2VIZWlnaHQgPSBt
X25leHQtPm1fcGFnZUhlaWdodDsKKyAgICBtX3BhZ2VPZmZzZXQgPSBtX25leHQtPm1fcGFnZU9m
ZnNldDsKKyAgICBtX2NvbHVtbkluZm8gPSBtX25leHQtPm1fY29sdW1uSW5mbzsKK30KKworaW50
IExheW91dFN0YXRlOjpwYWdlWShpbnQgY2hpbGRZKSBjb25zdAoreworICAgIEFTU0VSVChtX3Bh
Z2VIZWlnaHQpOworICAgIGludCBsYXlvdXRZID0gbV9sYXlvdXRPZmZzZXQuaGVpZ2h0KCkgKyBj
aGlsZFk7CisgICAgaW50IHBhZ2VZID0gbV9wYWdlT2Zmc2V0LmhlaWdodCgpOworICAgIHJldHVy
biBsYXlvdXRZIC0gcGFnZVk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdl
YkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5k
ZXJpbmcvTGF5b3V0U3RhdGUuaAkocmV2aXNpb24gNjY4ODYpCisrKyBXZWJDb3JlL3JlbmRlcmlu
Zy9MYXlvdXRTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ29sdW1uSW5mbzsKIGNsYXNzIFJlbmRlckFyZW5hOwog
Y2xhc3MgUmVuZGVyQm94OwogY2xhc3MgUmVuZGVyT2JqZWN0OwpAQCAtNDAsNiArNDEsOCBAQCBj
bGFzcyBMYXlvdXRTdGF0ZSA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiBwdWJsaWM6CiAgICAgTGF5
b3V0U3RhdGUoKQogICAgICAgICA6IG1fY2xpcHBlZChmYWxzZSkKKyAgICAgICAgLCBtX3BhZ2VI
ZWlnaHQoMCkKKyAgICAgICAgLCBtX2NvbHVtbkluZm8oMCkKICAgICAgICAgLCBtX25leHQoMCkK
ICNpZm5kZWYgTkRFQlVHCiAgICAgICAgICwgbV9yZW5kZXJlcigwKQpAQCAtNDcsNyArNTAsNyBA
QCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIExheW91dFN0YXRlKExheW91dFN0YXRlKiwg
UmVuZGVyQm94KiwgY29uc3QgSW50U2l6ZSYgb2Zmc2V0KTsKKyAgICBMYXlvdXRTdGF0ZShMYXlv
dXRTdGF0ZSosIFJlbmRlckJveCosIGNvbnN0IEludFNpemUmIG9mZnNldCwgaW50IHBhZ2VIZWln
aHQsIENvbHVtbkluZm8qKTsKICAgICBMYXlvdXRTdGF0ZShSZW5kZXJPYmplY3QqKTsKIAogICAg
IHZvaWQgZGVzdHJveShSZW5kZXJBcmVuYSopOwpAQCAtNTgsNiArNjEsMTEgQEAgcHVibGljOgog
ICAgIC8vIE92ZXJyaWRkZW4gdG8gcHJldmVudCB0aGUgbm9ybWFsIGRlbGV0ZSBmcm9tIGJlaW5n
IGNhbGxlZC4KICAgICB2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkKiwgc2l6ZV90KTsKIAorICAg
IHZvaWQgY2xlYXJQYWdpbmF0aW9uSW5mb3JtYXRpb24oKTsKKyAgICBib29sIHBhZ2luYXRpbmdD
b2x1bW5zKCkgY29uc3QgeyByZXR1cm4gbV9jb2x1bW5JbmZvOyB9CisgICAgYm9vbCBwYWdpbmF0
ZWQoKSBjb25zdCB7IHJldHVybiBtX3BhZ2VIZWlnaHQgfHwgbV9jb2x1bW5JbmZvOyB9CisgICAg
aW50IHBhZ2VZKGludCBjaGlsZFkpIGNvbnN0OworCiBwcml2YXRlOgogICAgIC8vIFRoZSBub3Jt
YWwgb3BlcmF0b3IgbmV3IGlzIGRpc2FsbG93ZWQuCiAgICAgdm9pZCogb3BlcmF0b3IgbmV3KHNp
emVfdCkgdGhyb3coKTsKQEAgLTY1LDEwICs3MywxNiBAQCBwcml2YXRlOgogcHVibGljOgogICAg
IGJvb2wgbV9jbGlwcGVkOwogICAgIEludFJlY3QgbV9jbGlwUmVjdDsKLSAgICBJbnRTaXplIG1f
b2Zmc2V0OyAgICAgICAvLyB4L3kgb2Zmc2V0IGZyb20gY29udGFpbmVyLgorICAgIEludFNpemUg
bV9wYWludE9mZnNldDsgICAgICAgLy8geC95IG9mZnNldCBmcm9tIGNvbnRhaW5lci4gIEluY2x1
ZGVzIHJlbGF0aXZlIHBvc2l0aW9uaW5nIGFuZCBzY3JvbGwgb2Zmc2V0cy4KKyAgICBJbnRTaXpl
IG1fbGF5b3V0T2Zmc2V0OyAgICAgIC8vIHgveSBvZmZzZXQgZnJvbSBjb250YWluZXIuICBEb2Vz
IG5vdCBpbmNsdWRlIHJlbGF0aXZlIHBvc2l0aW9uaW5nIG9yIHNjcm9sbCBvZmZzZXRzLgogICAg
IEludFNpemUgbV9sYXlvdXREZWx0YTsgIC8vIFRyYW5zaWVudCBvZmZzZXQgZnJvbSB0aGUgZmlu
YWwgcG9zaXRpb24gb2YgdGhlIG9iamVjdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IHVzZWQgdG8gZW5zdXJlIHRoYXQgcmVwYWludHMgaGFwcGVuIGluIHRoZSBjb3JyZWN0IHBsYWNl
LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSB0b3RhbCBkZWx0YSBh
Y2N1bXVsYXRlZCBmcm9tIHRoZSByb290LgorCisgICAgaW50IG1fcGFnZUhlaWdodDsgICAgICAg
ICAgICAvLyBUaGUgY3VycmVudCBwYWdlIGhlaWdodCBmb3IgdGhlIHBhZ2luYXRpb24gbW9kZWwg
dGhhdCBlbmNsb3NlcyB1cy4KKyAgICBJbnRTaXplIG1fcGFnZU9mZnNldDsgICAgICAgIC8vIFRo
ZSBvZmZzZXQgb2YgdGhlIHN0YXJ0IG9mIHRoZSBmaXJzdCBwYWdlIGluIHRoZSBuZWFyZXN0IGVu
Y2xvc2luZyBwYWdpbmF0aW9uIG1vZGVsLgorICAgIENvbHVtbkluZm8qIG1fY29sdW1uSW5mbzsg
ICAgLy8gSWYgdGhlIGVuY2xvc2luZyBwYWdpbmF0aW9uIG1vZGVsIGlzIGEgY29sdW1uIG1vZGVs
LCB0aGVuIHRoaXMgd2lsbCBzdG9yZSBjb2x1bW4gaW5mb3JtYXRpb24gZm9yIGVhc3kgcmV0cmll
dmFsL21hbmlwdWxhdGlvbi4KKwogICAgIExheW91dFN0YXRlKiBtX25leHQ7CiAjaWZuZGVmIE5E
RUJVRwogICAgIFJlbmRlck9iamVjdCogbV9yZW5kZXJlcjsKSW5kZXg6IFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9jay5jcHAJKHJldmlzaW9uIDY2OTAzKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsNyArMTE0LDcgQEAgUmVuZGVyQmxvY2s6
OlJlbmRlckJsb2NrKE5vZGUqIG5vZGUpCiAgICAgICAsIG1fZmxvYXRpbmdPYmplY3RzKDApCiAg
ICAgICAsIG1fcG9zaXRpb25lZE9iamVjdHMoMCkKICAgICAgICwgbV9jb250aW51YXRpb24oMCkK
LSAgICAgICwgbV9tYXhNYXJnaW4oMCkKKyAgICAgICwgbV9yYXJlRGF0YSgwKQogICAgICAgLCBt
X2xpbmVIZWlnaHQoLTEpCiB7CiAgICAgc2V0Q2hpbGRyZW5JbmxpbmUodHJ1ZSk7CkBAIC0xMjQs
NyArMTI0LDcgQEAgUmVuZGVyQmxvY2s6On5SZW5kZXJCbG9jaygpCiB7CiAgICAgZGVsZXRlIG1f
ZmxvYXRpbmdPYmplY3RzOwogICAgIGRlbGV0ZSBtX3Bvc2l0aW9uZWRPYmplY3RzOwotICAgIGRl
bGV0ZSBtX21heE1hcmdpbjsKKyAgICBkZWxldGUgbV9yYXJlRGF0YTsKICAgICAKICAgICBpZiAo
aGFzQ29sdW1ucygpKQogICAgICAgICBkZWxldGUgZ0NvbHVtbkluZm9NYXAtPnRha2UodGhpcyk7
CkBAIC0xMTEyLDcgKzExMTIsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXQoKQogICAgICAg
ICBjbGVhckxheW91dE92ZXJmbG93KCk7CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJs
b2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbikKK3ZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2Nr
KGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgaW50IHBhZ2VIZWlnaHQpCiB7CiAgICAgQVNTRVJUKG5l
ZWRzTGF5b3V0KCkpOwogCkBAIC0xMTIyLDkgKzExMjIsNiBAQCB2b2lkIFJlbmRlckJsb2NrOjps
YXlvdXRCbG9jayhib29sIHJlbGF5CiAgICAgaWYgKCFyZWxheW91dENoaWxkcmVuICYmIGxheW91
dE9ubHlQb3NpdGlvbmVkT2JqZWN0cygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBMYXlvdXRS
ZXBhaW50ZXIgcmVwYWludGVyKCp0aGlzLCBtX2V2ZXJIYWRMYXlvdXQgJiYgY2hlY2tGb3JSZXBh
aW50RHVyaW5nTGF5b3V0KCkpOwotICAgIExheW91dFN0YXRlTWFpbnRhaW5lciBzdGF0ZVB1c2hl
cih2aWV3KCksIHRoaXMsIEludFNpemUoeCgpLCB5KCkpLCBoYXNDb2x1bW5zKCkgfHwgaGFzVHJh
bnNmb3JtKCkgfHwgaGFzUmVmbGVjdGlvbigpKTsKLQogICAgIGludCBvbGRXaWR0aCA9IHdpZHRo
KCk7CiAgICAgaW50IG9sZENvbHVtbldpZHRoID0gZGVzaXJlZENvbHVtbldpZHRoKCk7CiAKQEAg
LTExNDAsNiArMTEzNywyOCBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayhib29sIHJl
bGF5CiAKICAgICBpbnQgcHJldmlvdXNIZWlnaHQgPSBoZWlnaHQoKTsKICAgICBzZXRIZWlnaHQo
MCk7CisgICAgYm9vbCBoYXNTcGVjaWZpZWRQYWdlSGVpZ2h0ID0gZmFsc2U7CisgICAgQ29sdW1u
SW5mbyogY29sSW5mbyA9IGNvbHVtbkluZm8oKTsKKyAgICBpZiAoaGFzQ29sdW1ucygpKSB7Cisg
ICAgICAgIGlmICghcGFnZUhlaWdodCkgeworICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBnbyBh
aGVhZCBhbmQgc2V0IG91ciBleHBsaWNpdCBwYWdlIGhlaWdodCBpZiBvbmUgZXhpc3RzLCBzbyB0
aGF0IHdlIGNhbgorICAgICAgICAgICAgLy8gYXZvaWQgZG9pbmcgdHdvIGxheW91dCBwYXNzZXMu
CisgICAgICAgICAgICBjYWxjSGVpZ2h0KCk7CisgICAgICAgICAgICBpbnQgY29sdW1uSGVpZ2h0
ID0gY29udGVudEhlaWdodCgpOworICAgICAgICAgICAgaWYgKGNvbHVtbkhlaWdodCA+IDApIHsK
KyAgICAgICAgICAgICAgICBwYWdlSGVpZ2h0ID0gY29sdW1uSGVpZ2h0OworICAgICAgICAgICAg
ICAgIGhhc1NwZWNpZmllZFBhZ2VIZWlnaHQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgc2V0SGVpZ2h0KDApOworICAgICAgICB9CisgICAgICAgIGlmIChjb2xJbmZvLT5jb2x1
bW5IZWlnaHQoKSAhPSBwYWdlSGVpZ2h0ICYmIG1fZXZlckhhZExheW91dCkgeworICAgICAgICAg
ICAgY29sSW5mby0+c2V0Q29sdW1uSGVpZ2h0KHBhZ2VIZWlnaHQpOworICAgICAgICAgICAgbWFy
a0Rlc2NlbmRhbnRCbG9ja3NBbmRMaW5lc0ZvckxheW91dCgpOyAvLyBXZSBuZWVkIHRvIGRpcnR5
IGFsbCBkZXNjZW5kYW50IGJsb2NrcyBhbmQgbGluZXMsIHNpbmNlIHRoZSBjb2x1bW4gaGVpZ2h0
IGlzIGRpZmZlcmVudCBub3cuCisgICAgICAgIH0KKyAgICB9CisKKyAgICBMYXlvdXRSZXBhaW50
ZXIgcmVwYWludGVyKCp0aGlzLCBtX2V2ZXJIYWRMYXlvdXQgJiYgY2hlY2tGb3JSZXBhaW50RHVy
aW5nTGF5b3V0KCkpOworICAgIExheW91dFN0YXRlTWFpbnRhaW5lciBzdGF0ZVB1c2hlcih2aWV3
KCksIHRoaXMsIEludFNpemUoeCgpLCB5KCkpLCBoYXNDb2x1bW5zKCkgfHwgaGFzVHJhbnNmb3Jt
KCkgfHwgaGFzUmVmbGVjdGlvbigpLCBwYWdlSGVpZ2h0LCBjb2xJbmZvKTsKIAogICAgIC8vIFdl
IHVzZSBmb3VyIHZhbHVlcywgbWF4VG9wUG9zLCBtYXhUb3BOZWcsIG1heEJvdHRvbVBvcywgYW5k
IG1heEJvdHRvbU5lZywgdG8gdHJhY2sKICAgICAvLyBvdXIgY3VycmVudCBtYXhpbWFsIHBvc2l0
aXZlIGFuZCBuZWdhdGl2ZSBtYXJnaW5zLiAgVGhlc2UgdmFsdWVzIGFyZSB1c2VkIHdoZW4gd2UK
QEAgLTExODksMTAgKzEyMDgsOSBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayhib29s
IHJlbGF5CiAgICAgaWYgKGZsb2F0Qm90dG9tKCkgPiAoaGVpZ2h0KCkgLSB0b0FkZCkgJiYgZXhw
YW5kc1RvRW5jbG9zZU92ZXJoYW5naW5nRmxvYXRzKCkpCiAgICAgICAgIHNldEhlaWdodChmbG9h
dEJvdHRvbSgpICsgdG9BZGQpOwogICAgIAotICAgIC8vIE5vdyBsYXkgb3V0IG91ciBjb2x1bW5z
IHdpdGhpbiB0aGlzIGludHJpbnNpYyBoZWlnaHQsIHNpbmNlIHRoZXkgY2FuIHNsaWdodGx5IGFm
ZmVjdCB0aGUgaW50cmluc2ljIGhlaWdodCBhcwotICAgIC8vIHdlIGFkanVzdCBmb3IgY2xlYW4g
Y29sdW1uIGJyZWFrcy4KLSAgICBpbnQgc2luZ2xlQ29sdW1uQm90dG9tID0gbGF5b3V0Q29sdW1u
cygpOwotCisgICAgaWYgKGxheW91dENvbHVtbnMoaGFzU3BlY2lmaWVkUGFnZUhlaWdodCwgcGFn
ZUhlaWdodCwgc3RhdGVQdXNoZXIpKQorICAgICAgICByZXR1cm47CisgCiAgICAgLy8gQ2FsY3Vs
YXRlIG91ciBuZXcgaGVpZ2h0LgogICAgIGludCBvbGRIZWlnaHQgPSBoZWlnaHQoKTsKICAgICBj
YWxjSGVpZ2h0KCk7CkBAIC0xMjA3LDIxICsxMjI1LDE4IEBAIHZvaWQgUmVuZGVyQmxvY2s6Omxh
eW91dEJsb2NrKGJvb2wgcmVsYXkKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIFdlIGhhdmUgdG8gcmViYWxhbmNlIGNvbHVt
bnMgdG8gdGhlIG5ldyBoZWlnaHQuCi0gICAgICAgIGxheW91dENvbHVtbnMoc2luZ2xlQ29sdW1u
Qm90dG9tKTsKICAgICB9CiAKICAgICBpZiAocHJldmlvdXNIZWlnaHQgIT0gaGVpZ2h0KCkpCiAg
ICAgICAgIHJlbGF5b3V0Q2hpbGRyZW4gPSB0cnVlOwogCi0gICAgLy8gVGhpcyBjaGVjayBpcyBk
ZXNpZ25lZCB0byBjYXRjaCBhbnlvbmUKLSAgICAvLyB3aG8gd2Fzbid0IGdvaW5nIHRvIHByb3Bh
Z2F0ZSBmbG9hdCBpbmZvcm1hdGlvbiB1cCB0byB0aGUgcGFyZW50IGFuZCB5ZXQgY291bGQgcG90
ZW50aWFsbHkgYmUgcGFpbnRlZCBieSBpdHMgYW5jZXN0b3IuCi0gICAgaWYgKGlzUm9vdCgpIHx8
IGV4cGFuZHNUb0VuY2xvc2VPdmVyaGFuZ2luZ0Zsb2F0cygpKQotICAgICAgICBhZGRPdmVyZmxv
d0Zyb21GbG9hdHMoKTsKLQogICAgIC8vIEFkZCBvdmVyZmxvdyBmcm9tIGNoaWxkcmVuICh1bmxl
c3Mgd2UncmUgbXVsdGktY29sdW1uLCBzaW5jZSBpbiB0aGF0IGNhc2UgYWxsIG91ciBjaGlsZCBv
dmVyZmxvdyBpcyBjbGlwcGVkIGFueXdheSkuCiAgICAgaWYgKCFoYXNDb2x1bW5zKCkpIHsKKyAg
ICAgICAgLy8gVGhpcyBjaGVjayBpcyBkZXNpZ25lZCB0byBjYXRjaCBhbnlvbmUKKyAgICAgICAg
Ly8gd2hvIHdhc24ndCBnb2luZyB0byBwcm9wYWdhdGUgZmxvYXQgaW5mb3JtYXRpb24gdXAgdG8g
dGhlIHBhcmVudCBhbmQgeWV0IGNvdWxkIHBvdGVudGlhbGx5IGJlIHBhaW50ZWQgYnkgaXRzIGFu
Y2VzdG9yLgorICAgICAgICBpZiAoaXNSb290KCkgfHwgZXhwYW5kc1RvRW5jbG9zZU92ZXJoYW5n
aW5nRmxvYXRzKCkpCisgICAgICAgICAgICBhZGRPdmVyZmxvd0Zyb21GbG9hdHMoKTsKKwogICAg
ICAgICBpZiAoY2hpbGRyZW5JbmxpbmUoKSkKICAgICAgICAgICAgIGFkZE92ZXJmbG93RnJvbUlu
bGluZUNoaWxkcmVuKCk7CiAgICAgICAgIGVsc2UKQEAgLTEyMzcsNiArMTI1Miw5IEBAIHZvaWQg
UmVuZGVyQmxvY2s6OmxheW91dEJsb2NrKGJvb2wgcmVsYXkKICAgICAKICAgICBzdGF0ZVB1c2hl
ci5wb3AoKTsKIAorICAgIGlmICh2aWV3KCktPmxheW91dFN0YXRlKCktPm1fcGFnZUhlaWdodCkK
KyAgICAgICAgc2V0UGFnZVkodmlldygpLT5sYXlvdXRTdGF0ZSgpLT5wYWdlWSh5KCkpKTsKKwog
ICAgIC8vIFVwZGF0ZSBvdXIgc2Nyb2xsIGluZm9ybWF0aW9uIGlmIHdlJ3JlIG92ZXJmbG93OmF1
dG8vc2Nyb2xsL2hpZGRlbiBub3cgdGhhdCB3ZSBrbm93IGlmCiAgICAgLy8gd2Ugb3ZlcmZsb3cg
b3Igbm90LgogICAgIHVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgpOwpAQCAtMTQ4NSw3ICsx
NTAzLDggQEAgaW50IFJlbmRlckJsb2NrOjpjb2xsYXBzZU1hcmdpbnMoUmVuZGVyQgogICAgIGlm
IChtYXJnaW5JbmZvLnF1aXJrQ29udGFpbmVyKCkgJiYgbWFyZ2luSW5mby5hdFRvcE9mQmxvY2so
KSAmJiAocG9zVG9wIC0gbmVnVG9wKSkKICAgICAgICAgbWFyZ2luSW5mby5zZXRUb3BRdWlyayh0
b3BRdWlyayk7CiAKLSAgICBpbnQgeXBvcyA9IGhlaWdodCgpOworICAgIGludCBiZWZvcmVDb2xs
YXBzZVkgPSBoZWlnaHQoKTsKKyAgICBpbnQgeXBvcyA9IGJlZm9yZUNvbGxhcHNlWTsKICAgICBp
ZiAoY2hpbGQtPmlzU2VsZkNvbGxhcHNpbmdCbG9jaygpKSB7CiAgICAgICAgIC8vIFRoaXMgY2hp
bGQgaGFzIG5vIGhlaWdodC4gIFdlIG5lZWQgdG8gY29tcHV0ZSBvdXIKICAgICAgICAgLy8gcG9z
aXRpb24gYmVmb3JlIHdlIGNvbGxhcHNlIHRoZSBjaGlsZCdzIG1hcmdpbnMgdG9nZXRoZXIsCkBA
IC0xNTI3LDYgKzE1NDYsMTQgQEAgaW50IFJlbmRlckJsb2NrOjpjb2xsYXBzZU1hcmdpbnMoUmVu
ZGVyQgogICAgICAgICAgICAgbWFyZ2luSW5mby5zZXRCb3R0b21RdWlyayhjaGlsZC0+aXNCb3R0
b21NYXJnaW5RdWlyaygpIHx8IHN0eWxlKCktPm1hcmdpbkJvdHRvbUNvbGxhcHNlKCkgPT0gTURJ
U0NBUkQpOwogICAgIH0KICAgICAKKyAgICAvLyBJZiBtYXJnaW5zIHdvdWxkIHB1bGwgdXMgcGFz
dCB0aGUgdG9wIG9mIHRoZSBuZXh0IHBhZ2UsIHRoZW4gd2UgbmVlZCB0byBwdWxsIGJhY2sgYW5k
IHByZXRlbmQgbGlrZSB0aGUgbWFyZ2lucworICAgIC8vIGNvbGxhcHNlZCBpbnRvIHRoZSBwYWdl
IGVkZ2UuCisgICAgYm9vbCBwYWdpbmF0ZWQgPSB2aWV3KCktPmxheW91dFN0YXRlKCktPnBhZ2lu
YXRlZCgpOworICAgIGlmIChwYWdpbmF0ZWQgJiYgeXBvcyA+IGJlZm9yZUNvbGxhcHNlWSkgewor
ICAgICAgICBpbnQgb2xkWSA9IHlwb3M7CisgICAgICAgIHlwb3MgPSBtaW4oeXBvcywgbmV4dFBh
Z2VUb3AoYmVmb3JlQ29sbGFwc2VZKSk7CisgICAgICAgIHNldEhlaWdodChoZWlnaHQoKSArICh5
cG9zIC0gb2xkWSkpOworICAgIH0KICAgICByZXR1cm4geXBvczsKIH0KIApAQCAtMTU4Niw3ICsx
NjEzLDI0IEBAIGludCBSZW5kZXJCbG9jazo6ZXN0aW1hdGVWZXJ0aWNhbFBvc2l0aW8KICAgICAg
ICAgaW50IGNoaWxkTWFyZ2luVG9wID0gY2hpbGQtPnNlbGZOZWVkc0xheW91dCgpID8gY2hpbGQt
Pm1hcmdpblRvcCgpIDogY2hpbGQtPmNvbGxhcHNlZE1hcmdpblRvcCgpOwogICAgICAgICB5UG9z
RXN0aW1hdGUgKz0gbWF4KG1hcmdpbkluZm8ubWFyZ2luKCksIGNoaWxkTWFyZ2luVG9wKTsKICAg
ICB9CisgICAgCisgICAgYm9vbCBwYWdpbmF0ZWQgPSB2aWV3KCktPmxheW91dFN0YXRlKCktPnBh
Z2luYXRlZCgpOworCisgICAgLy8gQWRqdXN0IHlQb3NFc3RpbWF0ZSBkb3duIHRvIHRoZSBuZXh0
IHBhZ2UgaWYgdGhlIG1hcmdpbnMgYXJlIHNvIGxhcmdlIHRoYXQgd2UgZG9uJ3QgZml0IG9uIHRo
ZSBjdXJyZW50CisgICAgLy8gcGFnZS4KKyAgICBpZiAocGFnaW5hdGVkICYmIHlQb3NFc3RpbWF0
ZSA+IGhlaWdodCgpKQorICAgICAgICB5UG9zRXN0aW1hdGUgPSBtaW4oeVBvc0VzdGltYXRlLCBu
ZXh0UGFnZVRvcChoZWlnaHQoKSkpOworCiAgICAgeVBvc0VzdGltYXRlICs9IGdldENsZWFyRGVs
dGEoY2hpbGQsIHlQb3NFc3RpbWF0ZSk7CisgICAgCisgICAgaWYgKHBhZ2luYXRlZCkgeworICAg
ICAgICAvLyBJZiB0aGUgb2JqZWN0IGhhcyBhIHBhZ2Ugb3IgY29sdW1uIGJyZWFrIHZhbHVlIG9m
ICJiZWZvcmUiLCB0aGVuIHdlIHNob3VsZCBzaGlmdCB0byB0aGUgdG9wIG9mIHRoZSBuZXh0IHBh
Z2UuCisgICAgICAgIHlQb3NFc3RpbWF0ZSA9IGFwcGx5QmVmb3JlQnJlYWsoY2hpbGQsIHlQb3NF
c3RpbWF0ZSk7CisgICAgCisgICAgICAgIC8vIEZvciByZXBsYWNlZCBlbGVtZW50cyBhbmQgc2Ny
b2xsZWQgZWxlbWVudHMsIHdlIHdhbnQgdG8gc2hpZnQgdGhlbSB0byB0aGUgbmV4dCBwYWdlIGlm
IHRoZXkgZG9uJ3QgZml0IG9uIHRoZSBjdXJyZW50IG9uZS4KKyAgICAgICAgeVBvc0VzdGltYXRl
ID0gYWRqdXN0Rm9yVW5zcGxpdHRhYmxlQ2hpbGQoY2hpbGQsIHlQb3NFc3RpbWF0ZSk7CisgICAg
fQorCiAgICAgcmV0dXJuIHlQb3NFc3RpbWF0ZTsKIH0KIApAQCAtMTc3Niw4ICsxODIwLDkgQEAg
dm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2tDaGlsZChSZW5kZQogICAgIHZpZXcoKS0+YWRk
TGF5b3V0RGVsdGEoSW50U2l6ZSgwLCBjaGlsZC0+eSgpIC0geVBvc0VzdGltYXRlKSk7CiAgICAg
Y2hpbGQtPnNldExvY2F0aW9uKGNoaWxkLT54KCksIHlQb3NFc3RpbWF0ZSk7CiAKKyAgICBSZW5k
ZXJCbG9jayogY2hpbGRCbG9ja0Zsb3cgPSBjaGlsZC0+aXNCbG9ja0Zsb3coKSA/IHRvUmVuZGVy
QmxvY2soY2hpbGQpIDogMDsKICAgICBib29sIG1hcmtEZXNjZW5kYW50c1dpdGhGbG9hdHMgPSBm
YWxzZTsKLSAgICBpZiAoeVBvc0VzdGltYXRlICE9IG9sZFJlY3QueSgpICYmICFjaGlsZC0+YXZv
aWRzRmxvYXRzKCkgJiYgY2hpbGQtPmlzQmxvY2tGbG93KCkgJiYgdG9SZW5kZXJCbG9jayhjaGls
ZCktPmNvbnRhaW5zRmxvYXRzKCkpCisgICAgaWYgKHlQb3NFc3RpbWF0ZSAhPSBvbGRSZWN0Lnko
KSAmJiAhY2hpbGQtPmF2b2lkc0Zsb2F0cygpICYmIGNoaWxkQmxvY2tGbG93ICYmIGNoaWxkQmxv
Y2tGbG93LT5jb250YWluc0Zsb2F0cygpKQogICAgICAgICBtYXJrRGVzY2VuZGFudHNXaXRoRmxv
YXRzID0gdHJ1ZTsKICAgICBlbHNlIGlmICghY2hpbGQtPmF2b2lkc0Zsb2F0cygpIHx8IGNoaWxk
LT5zaHJpbmtUb0F2b2lkRmxvYXRzKCkpIHsKICAgICAgICAgLy8gSWYgYW4gZWxlbWVudCBtaWdo
dCBiZSBhZmZlY3RlZCBieSB0aGUgcHJlc2VuY2Ugb2YgZmxvYXRzLCB0aGVuIGFsd2F5cyBtYXJr
IGl0IGZvcgpAQCAtMTc4NywxOCArMTgzMiwyNCBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRC
bG9ja0NoaWxkKFJlbmRlCiAgICAgICAgICAgICBtYXJrRGVzY2VuZGFudHNXaXRoRmxvYXRzID0g
dHJ1ZTsKICAgICB9CiAKLSAgICBpZiAoY2hpbGQtPmlzUmVuZGVyQmxvY2soKSkgeworICAgIGlm
IChjaGlsZEJsb2NrRmxvdykgewogICAgICAgICBpZiAobWFya0Rlc2NlbmRhbnRzV2l0aEZsb2F0
cykKLSAgICAgICAgICAgIHRvUmVuZGVyQmxvY2soY2hpbGQpLT5tYXJrQWxsRGVzY2VuZGFudHNX
aXRoRmxvYXRzRm9yTGF5b3V0KCk7Ci0KKyAgICAgICAgICAgIGNoaWxkQmxvY2tGbG93LT5tYXJr
QWxsRGVzY2VuZGFudHNXaXRoRmxvYXRzRm9yTGF5b3V0KCk7CiAgICAgICAgIHByZXZpb3VzRmxv
YXRCb3R0b20gPSBtYXgocHJldmlvdXNGbG9hdEJvdHRvbSwgb2xkUmVjdC55KCkgKyB0b1JlbmRl
ckJsb2NrKGNoaWxkKS0+ZmxvYXRCb3R0b20oKSk7CiAgICAgfQogCisgICAgYm9vbCBwYWdpbmF0
ZWQgPSB2aWV3KCktPmxheW91dFN0YXRlKCktPnBhZ2luYXRlZCgpOworICAgIGlmIChwYWdpbmF0
ZWQgJiYgdmlldygpLT5sYXlvdXRTdGF0ZSgpLT5tX3BhZ2VIZWlnaHQgJiYgY2hpbGRCbG9ja0Zs
b3cgJiYgdmlldygpLT5sYXlvdXRTdGF0ZSgpLT5wYWdlWShjaGlsZC0+eSgpKSAhPSBjaGlsZEJs
b2NrRmxvdy0+cGFnZVkoKSkKKyAgICAgICAgY2hpbGRCbG9ja0Zsb3ctPnNldENoaWxkTmVlZHNM
YXlvdXQodHJ1ZSwgZmFsc2UpOworCiAgICAgYm9vbCBjaGlsZEhhZExheW91dCA9IGNoaWxkLT5t
X2V2ZXJIYWRMYXlvdXQ7CiAgICAgYm9vbCBjaGlsZE5lZWRlZExheW91dCA9IGNoaWxkLT5uZWVk
c0xheW91dCgpOwogICAgIGlmIChjaGlsZE5lZWRlZExheW91dCkKICAgICAgICAgY2hpbGQtPmxh
eW91dCgpOwogCisgICAgLy8gQ2FjaGUgaWYgd2UgYXJlIGF0IHRoZSB0b3Agb2YgdGhlIGJsb2Nr
IHJpZ2h0IG5vdy4KKyAgICBib29sIGF0VG9wT2ZCbG9jayA9IG1hcmdpbkluZm8uYXRUb3BPZkJs
b2NrKCk7CisKICAgICAvLyBOb3cgZGV0ZXJtaW5lIHRoZSBjb3JyZWN0IHlwb3MgYmFzZWQgb2Zm
IGV4YW1pbmF0aW9uIG9mIGNvbGxhcHNpbmcgbWFyZ2luCiAgICAgLy8gdmFsdWVzLgogICAgIGlu
dCB5QmVmb3JlQ2xlYXIgPSBjb2xsYXBzZU1hcmdpbnMoY2hpbGQsIG1hcmdpbkluZm8pOwpAQCAt
MTgwNiw2ICsxODU3LDMyIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrQ2hpbGQoUmVu
ZGUKICAgICAvLyBOb3cgY2hlY2sgZm9yIGNsZWFyLgogICAgIGludCB5QWZ0ZXJDbGVhciA9IGNs
ZWFyRmxvYXRzSWZOZWVkZWQoY2hpbGQsIG1hcmdpbkluZm8sIG9sZFRvcFBvc01hcmdpbiwgb2xk
VG9wTmVnTWFyZ2luLCB5QmVmb3JlQ2xlYXIpOwogICAgIAorICAgIGlmIChwYWdpbmF0ZWQpIHsK
KyAgICAgICAgaW50IG9sZFkgPSB5QWZ0ZXJDbGVhcjsKKyAgICAgICAgCisgICAgICAgIC8vIElm
IHRoZSBvYmplY3QgaGFzIGEgcGFnZSBvciBjb2x1bW4gYnJlYWsgdmFsdWUgb2YgImJlZm9yZSIs
IHRoZW4gd2Ugc2hvdWxkIHNoaWZ0IHRvIHRoZSB0b3Agb2YgdGhlIG5leHQgcGFnZS4KKyAgICAg
ICAgeUFmdGVyQ2xlYXIgPSBhcHBseUJlZm9yZUJyZWFrKGNoaWxkLCB5QWZ0ZXJDbGVhcik7Cisg
ICAgCisgICAgICAgIC8vIEZvciByZXBsYWNlZCBlbGVtZW50cyBhbmQgc2Nyb2xsZWQgZWxlbWVu
dHMsIHdlIHdhbnQgdG8gc2hpZnQgdGhlbSB0byB0aGUgbmV4dCBwYWdlIGlmIHRoZXkgZG9uJ3Qg
Zml0IG9uIHRoZSBjdXJyZW50IG9uZS4KKyAgICAgICAgeUFmdGVyQ2xlYXIgPSBhZGp1c3RGb3JV
bnNwbGl0dGFibGVDaGlsZChjaGlsZCwgeUFmdGVyQ2xlYXIpOworICAgICAgICAKKyAgICAgICAg
aWYgKGNoaWxkQmxvY2tGbG93ICYmIGNoaWxkQmxvY2tGbG93LT5wYWdpbmF0aW9uU3RydXQoKSkg
eworICAgICAgICAgICAgLy8gV2UgYXJlIHdpbGxpbmcgdG8gcHJvcGFnYXRlIG91dCB0byBvdXIg
cGFyZW50IGJsb2NrIGFzIGxvbmcgYXMgd2Ugd2VyZSBhdCB0aGUgdG9wIG9mIHRoZSBibG9jayBw
cmlvcgorICAgICAgICAgICAgLy8gdG8gY29sbGFwc2luZyBvdXIgbWFyZ2lucywgYW5kIGFzIGxv
bmcgYXMgd2UgZGlkbid0IGNsZWFyIG9yIG1vdmUgYXMgYSByZXN1bHQgb2Ygb3RoZXIgcGFnaW5h
dGlvbi4KKyAgICAgICAgICAgIGlmIChhdFRvcE9mQmxvY2sgJiYgb2xkWSA9PSB5QmVmb3JlQ2xl
YXIgJiYgIWlzUG9zaXRpb25lZCgpICYmICFpc1RhYmxlQ2VsbCgpKSB7CisgICAgICAgICAgICAg
ICAgLy8gRklYTUU6IFNob3VsZCByZWFsbHkgY2hlY2sgaWYgd2UncmUgZXhjZWVkaW5nIHRoZSBw
YWdlIGhlaWdodCBiZWZvcmUgcHJvcGFnYXRpbmcgdGhlIHN0cnV0LCBidXQgd2UgZG9uJ3QKKyAg
ICAgICAgICAgICAgICAvLyBoYXZlIGFsbCB0aGUgaW5mb3JtYXRpb24gdG8gZG8gc28gKHRoZSBz
dHJ1dCBvbmx5IGhhcyB0aGUgcmVtYWluaW5nIGFtb3VudCB0byBwdXNoKS4gIEdlY2tvIGdldHMg
dGhpcyB3cm9uZyB0b28KKyAgICAgICAgICAgICAgICAvLyBhbmQgcHVzaGVzIHRvIHRoZSBuZXh0
IHBhZ2UgYW55d2F5LCBzbyBub3QgdG9vIGNvbmNlcm5lZCBhYm91dCBpdC4KKyAgICAgICAgICAg
ICAgICBzZXRQYWdpbmF0aW9uU3RydXQoeUFmdGVyQ2xlYXIgKyBjaGlsZEJsb2NrRmxvdy0+cGFn
aW5hdGlvblN0cnV0KCkpOworICAgICAgICAgICAgICAgIGNoaWxkQmxvY2tGbG93LT5zZXRQYWdp
bmF0aW9uU3RydXQoMCk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICB5QWZ0
ZXJDbGVhciArPSBjaGlsZEJsb2NrRmxvdy0+cGFnaW5hdGlvblN0cnV0KCk7CisgICAgICAgIH0K
KworICAgICAgICAvLyBTaW1pbGFyIHRvIGhvdyB3ZSBhcHBseSBjbGVhcmFuY2UuICBHbyBhaGVh
ZCBhbmQgYm9vc3QgaGVpZ2h0KCkgdG8gYmUgdGhlIHBsYWNlIHdoZXJlIHdlJ3JlIGdvaW5nIHRv
IHBvc2l0aW9uIHRoZSBjaGlsZC4KKyAgICAgICAgc2V0SGVpZ2h0KGhlaWdodCgpICsgKHlBZnRl
ckNsZWFyIC0gb2xkWSkpOworICAgIH0KKwogICAgIHZpZXcoKS0+YWRkTGF5b3V0RGVsdGEoSW50
U2l6ZSgwLCB5UG9zRXN0aW1hdGUgLSB5QWZ0ZXJDbGVhcikpOwogICAgIGNoaWxkLT5zZXRMb2Nh
dGlvbihjaGlsZC0+eCgpLCB5QWZ0ZXJDbGVhcik7CiAKQEAgLTE4MTgsOCArMTg5NSwxMyBAQCB2
b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9ja0NoaWxkKFJlbmRlCiAgICAgICAgICAgICAvLyBT
byBnbyBhaGVhZCBhbmQgbWFyayB0aGUgaXRlbSBhcyBkaXJ0eS4KICAgICAgICAgICAgIGNoaWxk
LT5zZXRDaGlsZE5lZWRzTGF5b3V0KHRydWUsIGZhbHNlKTsKICAgICAgICAgfQotICAgICAgICBp
ZiAoIWNoaWxkLT5hdm9pZHNGbG9hdHMoKSAmJiBjaGlsZC0+aXNCbG9ja0Zsb3coKSAmJiB0b1Jl
bmRlckJsb2NrKGNoaWxkKS0+Y29udGFpbnNGbG9hdHMoKSkKLSAgICAgICAgICAgIHRvUmVuZGVy
QmxvY2soY2hpbGQpLT5tYXJrQWxsRGVzY2VuZGFudHNXaXRoRmxvYXRzRm9yTGF5b3V0KCk7Cisg
ICAgICAgIGlmIChjaGlsZEJsb2NrRmxvdykgeworICAgICAgICAgICAgaWYgKCFjaGlsZC0+YXZv
aWRzRmxvYXRzKCkgJiYgY2hpbGRCbG9ja0Zsb3ctPmNvbnRhaW5zRmxvYXRzKCkpCisgICAgICAg
ICAgICAgICAgY2hpbGRCbG9ja0Zsb3ctPm1hcmtBbGxEZXNjZW5kYW50c1dpdGhGbG9hdHNGb3JM
YXlvdXQoKTsKKyAgICAgICAgICAgIGlmIChwYWdpbmF0ZWQgJiYgIWNoaWxkLT5uZWVkc0xheW91
dCgpICYmIHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+bV9wYWdlSGVpZ2h0ICYmIHZpZXcoKS0+bGF5
b3V0U3RhdGUoKS0+cGFnZVkoY2hpbGQtPnkoKSkgIT0gY2hpbGRCbG9ja0Zsb3ctPnBhZ2VZKCkp
CisgICAgICAgICAgICAgICAgY2hpbGQtPnNldENoaWxkTmVlZHNMYXlvdXQodHJ1ZSwgZmFsc2Up
OworICAgICAgICB9CisKICAgICAgICAgLy8gT3VyIGd1ZXNzIHdhcyB3cm9uZy4gTWFrZSB0aGUg
Y2hpbGQgbGF5IGl0c2VsZiBvdXQgYWdhaW4uCiAgICAgICAgIGNoaWxkLT5sYXlvdXRJZk5lZWRl
ZCgpOwogICAgIH0KQEAgLTE4NDAsNyArMTkyMiw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91
dEJsb2NrQ2hpbGQoUmVuZGUKICAgICB9CiAgICAgLy8gSWYgdGhlIGNoaWxkIGhhcyBvdmVyaGFu
Z2luZyBmbG9hdHMgdGhhdCBpbnRydWRlIGludG8gZm9sbG93aW5nIHNpYmxpbmdzIChvciBwb3Nz
aWJseSBvdXQKICAgICAvLyBvZiB0aGlzIGJsb2NrKSwgdGhlbiB0aGUgcGFyZW50IGdldHMgbm90
aWZpZWQgb2YgdGhlIGZsb2F0cyBub3cuCi0gICAgaWYgKGNoaWxkLT5pc0Jsb2NrRmxvdygpICYm
IHRvUmVuZGVyQmxvY2soY2hpbGQpLT5jb250YWluc0Zsb2F0cygpKQorICAgIGlmIChjaGlsZEJs
b2NrRmxvdyAmJiBjaGlsZEJsb2NrRmxvdy0+Y29udGFpbnNGbG9hdHMoKSkKICAgICAgICAgbWF4
RmxvYXRCb3R0b20gPSBtYXgobWF4RmxvYXRCb3R0b20sIGFkZE92ZXJoYW5naW5nRmxvYXRzKHRv
UmVuZGVyQmxvY2soY2hpbGQpLCAtY2hpbGQtPngoKSwgLWNoaWxkLT55KCksICFjaGlsZE5lZWRl
ZExheW91dCkpOwogCiAgICAgSW50U2l6ZSBjaGlsZE9mZnNldChjaGlsZC0+eCgpIC0gb2xkUmVj
dC54KCksIGNoaWxkLT55KCkgLSBvbGRSZWN0LnkoKSk7CkBAIC0xODU5LDYgKzE5NDEsMTMgQEAg
dm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2tDaGlsZChSZW5kZQogICAgICAgICBjaGlsZC0+
cmVwYWludE92ZXJoYW5naW5nRmxvYXRzKHRydWUpOwogICAgIH0KIAorICAgIGlmIChwYWdpbmF0
ZWQpIHsKKyAgICAgICAgLy8gQ2hlY2sgZm9yIGFuIGFmdGVyIHBhZ2UvY29sdW1uIGJyZWFrLgor
ICAgICAgICBpbnQgbmV3SGVpZ2h0ID0gYXBwbHlBZnRlckJyZWFrKGNoaWxkLCBoZWlnaHQoKSwg
bWFyZ2luSW5mbyk7CisgICAgICAgIGlmIChuZXdIZWlnaHQgIT0gaGVpZ2h0KCkpCisgICAgICAg
ICAgICBzZXRIZWlnaHQobmV3SGVpZ2h0KTsKKyAgICB9CisKICAgICBBU1NFUlQob2xkTGF5b3V0
RGVsdGEgPT0gdmlldygpLT5sYXlvdXREZWx0YSgpKTsKIH0KIApAQCAtMTg4OSw2ICsxOTc4LDkg
QEAgYm9vbCBSZW5kZXJCbG9jazo6bGF5b3V0T25seVBvc2l0aW9uZWRPYgogdm9pZCBSZW5kZXJC
bG9jazo6bGF5b3V0UG9zaXRpb25lZE9iamVjdHMoYm9vbCByZWxheW91dENoaWxkcmVuKQogewog
ICAgIGlmIChtX3Bvc2l0aW9uZWRPYmplY3RzKSB7CisgICAgICAgIGlmIChoYXNDb2x1bW5zKCkp
CisgICAgICAgICAgICB2aWV3KCktPmxheW91dFN0YXRlKCktPmNsZWFyUGFnaW5hdGlvbkluZm9y
bWF0aW9uKCk7IC8vIFBvc2l0aW9uZWQgb2JqZWN0cyBhcmUgbm90IHBhcnQgb2YgdGhlIGNvbHVt
biBmbG93LCBzbyB0aGV5IGRvbid0IHBhZ2luYXRlIHdpdGggdGhlIGNvbHVtbnMuCisKICAgICAg
ICAgUmVuZGVyQm94KiByOwogICAgICAgICBJdGVyYXRvciBlbmQgPSBtX3Bvc2l0aW9uZWRPYmpl
Y3RzLT5lbmQoKTsKICAgICAgICAgZm9yIChJdGVyYXRvciBpdCA9IG1fcG9zaXRpb25lZE9iamVj
dHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewpAQCAtMTkxMCw2ICsyMDAyLDkgQEAgdm9p
ZCBSZW5kZXJCbG9jazo6bGF5b3V0UG9zaXRpb25lZE9iamVjdAogICAgICAgICAgICAgICAgIHIt
PnRyeUxheW91dERvaW5nUG9zaXRpb25lZE1vdmVtZW50T25seSgpOwogICAgICAgICAgICAgci0+
bGF5b3V0SWZOZWVkZWQoKTsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGhhc0Nv
bHVtbnMoKSkKKyAgICAgICAgICAgIHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+bV9jb2x1bW5JbmZv
ID0gY29sdW1uSW5mbygpOyAvLyBGSVhNRTogS2luZCBvZiBncm9zcy4gV2UganVzdCBwdXQgdGhp
cyBiYWNrIGludG8gdGhlIGxheW91dCBzdGF0ZSBzbyB0aGF0IHBvcCgpIHdpbGwgd29yay4KICAg
ICB9CiB9CiAKQEAgLTE5OTcsMTIgKzIwOTIsMTIgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRD
b2x1bW5SdWxlcyhQYWludAogCiAgICAgLy8gV2UgbmVlZCB0byBkbyBtdWx0aXBsZSBwYXNzZXMs
IGJyZWFraW5nIHVwIG91ciBjaGlsZCBwYWludGluZyBpbnRvIHN0cmlwcy4KICAgICBDb2x1bW5J
bmZvKiBjb2xJbmZvID0gY29sdW1uSW5mbygpOwotICAgIHVuc2lnbmVkIGNvbENvdW50ID0gY29s
SW5mby0+Y29sdW1uQ291bnQoKTsKKyAgICB1bnNpZ25lZCBjb2xDb3VudCA9IGNvbHVtbkNvdW50
KGNvbEluZm8pOwogICAgIGludCBjdXJyWE9mZnNldCA9IHN0eWxlKCktPmRpcmVjdGlvbigpID09
IExUUiA/IDAgOiBjb250ZW50V2lkdGgoKTsKICAgICBpbnQgcnVsZUFkZCA9IGJvcmRlckxlZnQo
KSArIHBhZGRpbmdMZWZ0KCk7CiAgICAgaW50IHJ1bGVYID0gc3R5bGUoKS0+ZGlyZWN0aW9uKCkg
PT0gTFRSID8gMCA6IGNvbnRlbnRXaWR0aCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBjb2xDb3VudDsgaSsrKSB7Ci0gICAgICAgIEludFJlY3QgY29sUmVjdCA9IGNvbEluZm8tPmNv
bHVtblJlY3RBdChpKTsKKyAgICAgICAgSW50UmVjdCBjb2xSZWN0ID0gY29sdW1uUmVjdEF0KGNv
bEluZm8sIGkpOwogCiAgICAgICAgIC8vIE1vdmUgdG8gdGhlIG5leHQgcG9zaXRpb24uCiAgICAg
ICAgIGlmIChzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIpIHsKQEAgLTIwMzMsMTQgKzIxMjgs
MTQgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRDb2x1bW5Db250ZW50cyhQYQogICAgIEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0OwogICAgIGludCBjb2xHYXAg
PSBjb2x1bW5HYXAoKTsKICAgICBDb2x1bW5JbmZvKiBjb2xJbmZvID0gY29sdW1uSW5mbygpOwot
ICAgIHVuc2lnbmVkIGNvbENvdW50ID0gY29sSW5mby0+Y29sdW1uQ291bnQoKTsKKyAgICB1bnNp
Z25lZCBjb2xDb3VudCA9IGNvbHVtbkNvdW50KGNvbEluZm8pOwogICAgIGlmICghY29sQ291bnQp
CiAgICAgICAgIHJldHVybjsKLSAgICBpbnQgY3VyclhPZmZzZXQgPSBzdHlsZSgpLT5kaXJlY3Rp
b24oKSA9PSBMVFIgPyAwIDogY29udGVudFdpZHRoKCkgLSBjb2xJbmZvLT5jb2x1bW5SZWN0QXQo
MCkud2lkdGgoKTsKKyAgICBpbnQgY3VyclhPZmZzZXQgPSBzdHlsZSgpLT5kaXJlY3Rpb24oKSA9
PSBMVFIgPyAwIDogY29udGVudFdpZHRoKCkgLSBjb2x1bW5SZWN0QXQoY29sSW5mbywgMCkud2lk
dGgoKTsKICAgICBpbnQgY3VycllPZmZzZXQgPSAwOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBjb2xDb3VudDsgaSsrKSB7CiAgICAgICAgIC8vIEZvciBlYWNoIHJlY3QsIHdlIGNsaXAg
dG8gdGhlIHJlY3QsIGFuZCB0aGVuIHdlIGFkanVzdCBvdXIgY29vcmRzLgotICAgICAgICBJbnRS
ZWN0IGNvbFJlY3QgPSBjb2xJbmZvLT5jb2x1bW5SZWN0QXQoaSk7CisgICAgICAgIEludFJlY3Qg
Y29sUmVjdCA9IGNvbHVtblJlY3RBdChjb2xJbmZvLCBpKTsKICAgICAgICAgY29sUmVjdC5tb3Zl
KHR4LCB0eSk7CiAgICAgICAgIFBhaW50SW5mbyBpbmZvKHBhaW50SW5mbyk7CiAgICAgICAgIGlu
Zm8ucmVjdC5pbnRlcnNlY3QoY29sUmVjdCk7CkBAIC0yMDk4LDE0ICsyMTkzLDEzIEBAIHZvaWQg
UmVuZGVyQmxvY2s6OnBhaW50Q2hpbGRyZW4oUGFpbnRJbmYKICAgICBpbmZvLnVwZGF0ZVBhaW50
aW5nUm9vdEZvckNoaWxkcmVuKHRoaXMpOwogICAgIAogICAgIFJlbmRlclZpZXcqIHJlbmRlclZp
ZXcgPSB2aWV3KCk7Ci0gICAgYm9vbCB1c2VQcmludFJlY3QgPSAhcmVuZGVyVmlldy0+cHJpbnRS
ZWN0KCkuaXNFbXB0eSgpICYmICFkb2N1bWVudCgpLT5zZXR0aW5ncygpLT5wYWdpbmF0ZUR1cmlu
Z0xheW91dEVuYWJsZWQoKTsKKyAgICBib29sIHVzZVByaW50UmVjdCA9ICFyZW5kZXJWaWV3LT5w
cmludFJlY3QoKS5pc0VtcHR5KCk7CiAgICAgCiAgICAgYm9vbCBjaGVja1BhZ2VCcmVha3MgPSBk
b2N1bWVudCgpLT5wYWdpbmF0ZWQoKSAmJiAhZG9jdW1lbnQoKS0+c2V0dGluZ3MoKS0+cGFnaW5h
dGVEdXJpbmdMYXlvdXRFbmFibGVkKCk7Ci0gICAgYm9vbCBjaGVja0NvbHVtbkJyZWFrcyA9ICFj
aGVja1BhZ2VCcmVha3MgJiYgdXNlUHJpbnRSZWN0OwogCiAgICAgZm9yIChSZW5kZXJCb3gqIGNo
aWxkID0gZmlyc3RDaGlsZEJveCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmdC
b3goKSkgeyAgICAgICAgCiAgICAgICAgIC8vIENoZWNrIGZvciBwYWdlLWJyZWFrLWJlZm9yZTog
YWx3YXlzLCBhbmQgaWYgaXQncyBzZXQsIGJyZWFrIGFuZCBiYWlsLgotICAgICAgICBib29sIGNo
ZWNrQmVmb3JlQWx3YXlzID0gIWNoaWxkcmVuSW5saW5lKCkgJiYgKChjaGVja1BhZ2VCcmVha3Mg
JiYgY2hpbGQtPnN0eWxlKCktPnBhZ2VCcmVha0JlZm9yZSgpID09IFBCQUxXQVlTKSB8fCAoY2hl
Y2tDb2x1bW5CcmVha3MgJiYgY2hpbGQtPnN0eWxlKCktPmNvbHVtbkJyZWFrQmVmb3JlKCkgPT0g
UEJBTFdBWVMpKTsKKyAgICAgICAgYm9vbCBjaGVja0JlZm9yZUFsd2F5cyA9ICFjaGlsZHJlbklu
bGluZSgpICYmIChjaGVja1BhZ2VCcmVha3MgJiYgY2hpbGQtPnN0eWxlKCktPnBhZ2VCcmVha0Jl
Zm9yZSgpID09IFBCQUxXQVlTKTsKICAgICAgICAgaWYgKGNoZWNrQmVmb3JlQWx3YXlzCiAgICAg
ICAgICAgICAmJiAodHkgKyBjaGlsZC0+eSgpKSA+IHBhaW50SW5mby5yZWN0LnkoKQogICAgICAg
ICAgICAgJiYgKHR5ICsgY2hpbGQtPnkoKSkgPCBwYWludEluZm8ucmVjdC5ib3R0b20oKSkgewpA
QCAtMjEyOCw3ICsyMjIyLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRDaGlsZHJlbihQYWlu
dEluZgogICAgICAgICAgICAgY2hpbGQtPnBhaW50KGluZm8sIHR4LCB0eSk7CiAKICAgICAgICAg
Ly8gQ2hlY2sgZm9yIHBhZ2UtYnJlYWstYWZ0ZXI6IGFsd2F5cywgYW5kIGlmIGl0J3Mgc2V0LCBi
cmVhayBhbmQgYmFpbC4KLSAgICAgICAgYm9vbCBjaGVja0FmdGVyQWx3YXlzID0gIWNoaWxkcmVu
SW5saW5lKCkgJiYgKChjaGVja1BhZ2VCcmVha3MgJiYgY2hpbGQtPnN0eWxlKCktPnBhZ2VCcmVh
a0FmdGVyKCkgPT0gUEJBTFdBWVMpIHx8IChjaGVja0NvbHVtbkJyZWFrcyAmJiBjaGlsZC0+c3R5
bGUoKS0+Y29sdW1uQnJlYWtBZnRlcigpID09IFBCQUxXQVlTKSk7CisgICAgICAgIGJvb2wgY2hl
Y2tBZnRlckFsd2F5cyA9ICFjaGlsZHJlbklubGluZSgpICYmIChjaGVja1BhZ2VCcmVha3MgJiYg
Y2hpbGQtPnN0eWxlKCktPnBhZ2VCcmVha0FmdGVyKCkgPT0gUEJBTFdBWVMpOwogICAgICAgICBp
ZiAoY2hlY2tBZnRlckFsd2F5cwogICAgICAgICAgICAgJiYgKHR5ICsgY2hpbGQtPnkoKSArIGNo
aWxkLT5oZWlnaHQoKSkgPiBwYWludEluZm8ucmVjdC55KCkKICAgICAgICAgICAgICYmICh0eSAr
IGNoaWxkLT55KCkgKyBjaGlsZC0+aGVpZ2h0KCkpIDwgcGFpbnRJbmZvLnJlY3QuYm90dG9tKCkp
IHsKQEAgLTI3NzYsNyArMjg3MCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnJlbW92ZVBvc2l0aW9u
ZWRPYmplY3QKICAgICAgICAgbV9wb3NpdGlvbmVkT2JqZWN0cy0+cmVtb3ZlKGRlYWRPYmplY3Rz
LmF0KGkpKTsKIH0KIAotdm9pZCBSZW5kZXJCbG9jazo6aW5zZXJ0RmxvYXRpbmdPYmplY3QoUmVu
ZGVyQm94KiBvKQorUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0KiBSZW5kZXJCbG9jazo6aW5z
ZXJ0RmxvYXRpbmdPYmplY3QoUmVuZGVyQm94KiBvKQogewogICAgIEFTU0VSVChvLT5pc0Zsb2F0
aW5nKCkpOwogCkBAIC0yNzg5LDI1ICsyODgzLDM3IEBAIHZvaWQgUmVuZGVyQmxvY2s6Omluc2Vy
dEZsb2F0aW5nT2JqZWN0KFIKICAgICAgICAgRGVwcmVjYXRlZFB0ckxpc3RJdGVyYXRvcjxGbG9h
dGluZ09iamVjdD4gaXQoKm1fZmxvYXRpbmdPYmplY3RzKTsKICAgICAgICAgRmxvYXRpbmdPYmpl
Y3QqIGY7CiAgICAgICAgIHdoaWxlICggKGYgPSBpdC5jdXJyZW50KCkpICkgewotICAgICAgICAg
ICAgaWYgKGYtPm1fcmVuZGVyZXIgPT0gbykgcmV0dXJuOworICAgICAgICAgICAgaWYgKGYtPm1f
cmVuZGVyZXIgPT0gbykKKyAgICAgICAgICAgICAgICByZXR1cm4gZjsKICAgICAgICAgICAgICsr
aXQ7CiAgICAgICAgIH0KICAgICB9CiAKICAgICAvLyBDcmVhdGUgdGhlIHNwZWNpYWwgb2JqZWN0
IGVudHJ5ICYgYXBwZW5kIGl0IHRvIHRoZSBsaXN0CiAKLSAgICBvLT5sYXlvdXRJZk5lZWRlZCgp
OwotCiAgICAgRmxvYXRpbmdPYmplY3QqIG5ld09iaiA9IG5ldyBGbG9hdGluZ09iamVjdChvLT5z
dHlsZSgpLT5mbG9hdGluZygpID09IEZMRUZUID8gRmxvYXRpbmdPYmplY3Q6OkZsb2F0TGVmdCA6
IEZsb2F0aW5nT2JqZWN0OjpGbG9hdFJpZ2h0KTsKIAogICAgIG5ld09iai0+bV90b3AgPSAtMTsK
ICAgICBuZXdPYmotPm1fYm90dG9tID0gLTE7CisgICAgCisgICAgLy8gT3VyIGxvY2F0aW9uIGlz
IGlycmVsZXZhbnQgaWYgd2UncmUgdW5zcGxpdHRhYmxlIG9yIG5vIHBhZ2luYXRpb24gaXMgaW4g
ZWZmZWN0LiAgSnVzdCBnbyBhaGVhZAorICAgIC8vIGFuZCBsYXkgb3V0IHRoZSBmbG9hdC4KKyAg
ICBib29sIGFmZmVjdGVkQnlQYWdpbmF0aW9uID0gby0+aXNSZW5kZXJCbG9jaygpICYmIHZpZXco
KS0+bGF5b3V0U3RhdGUoKS0+bV9wYWdlSGVpZ2h0OworICAgIGlmICghYWZmZWN0ZWRCeVBhZ2lu
YXRpb24pCisgICAgICAgIG8tPmxheW91dElmTmVlZGVkKCk7CisgICAgZWxzZSB7CisgICAgICAg
IG8tPmNhbGNXaWR0aCgpOworICAgICAgICBvLT5jYWxjVmVydGljYWxNYXJnaW5zKCk7CisgICAg
fQogICAgIG5ld09iai0+bV93aWR0aCA9IG8tPndpZHRoKCkgKyBvLT5tYXJnaW5MZWZ0KCkgKyBv
LT5tYXJnaW5SaWdodCgpOworCiAgICAgbmV3T2JqLT5tX3Nob3VsZFBhaW50ID0gIW8tPmhhc1Nl
bGZQYWludGluZ0xheWVyKCk7IC8vIElmIGEgbGF5ZXIgZXhpc3RzLCB0aGUgZmxvYXQgd2lsbCBw
YWludCBpdHNlbGYuICBPdGhlcndpc2Ugc29tZW9uZSBlbHNlIHdpbGwuCiAgICAgbmV3T2JqLT5t
X2lzRGVzY2VuZGFudCA9IHRydWU7CiAgICAgbmV3T2JqLT5tX3JlbmRlcmVyID0gbzsKIAogICAg
IG1fZmxvYXRpbmdPYmplY3RzLT5hcHBlbmQobmV3T2JqKTsKKyAgICAKKyAgICByZXR1cm4gbmV3
T2JqOwogfQogCiB2b2lkIFJlbmRlckJsb2NrOjpyZW1vdmVGbG9hdGluZ09iamVjdChSZW5kZXJC
b3gqIG8pCkBAIC0yODMxLDYgKzI5MzcsMTggQEAgdm9pZCBSZW5kZXJCbG9jazo6cmVtb3ZlRmxv
YXRpbmdPYmplY3QoUgogICAgIH0KIH0KIAordm9pZCBSZW5kZXJCbG9jazo6cmVtb3ZlRmxvYXRp
bmdPYmplY3RzKEZsb2F0aW5nT2JqZWN0KiBmLCBpbnQgeSkKK3sKKyAgICBpZiAoIW1fZmxvYXRp
bmdPYmplY3RzKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgRmxvYXRpbmdPYmplY3QqIGN1
cnIgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+bGFzdCgpOworICAgIHdoaWxlIChjdXJyICE9IGYgJiYg
KGN1cnItPm1fdG9wID09IC0xIHx8IGN1cnItPm1fdG9wID49IHkpKSB7CisgICAgICAgIG1fZmxv
YXRpbmdPYmplY3RzLT5yZW1vdmVMYXN0KCk7CisgICAgICAgIGN1cnIgPSBtX2Zsb2F0aW5nT2Jq
ZWN0cy0+bGFzdCgpOworICAgIH0KK30KKwogYm9vbCBSZW5kZXJCbG9jazo6cG9zaXRpb25OZXdG
bG9hdHMoKQogewogICAgIGlmICghbV9mbG9hdGluZ09iamVjdHMpCkBAIC0yODY3LDE2ICsyOTg1
LDE1IEBAIGJvb2wgUmVuZGVyQmxvY2s6OnBvc2l0aW9uTmV3RmxvYXRzKCkKICAgICAgICAgfQog
CiAgICAgICAgIFJlbmRlckJveCogbyA9IGYtPm1fcmVuZGVyZXI7Ci0gICAgICAgIGludCBfaGVp
Z2h0ID0gby0+aGVpZ2h0KCkgKyBvLT5tYXJnaW5Ub3AoKSArIG8tPm1hcmdpbkJvdHRvbSgpOwog
CiAgICAgICAgIGludCBybyA9IHJpZ2h0T2Zmc2V0KCk7IC8vIENvbnN0YW50IHBhcnQgb2Ygcmln
aHQgb2Zmc2V0LgotICAgICAgICBpbnQgbG8gPSBsZWZ0T2Zmc2V0KCk7IC8vIENvbnN0YXQgcGFy
dCBvZiBsZWZ0IG9mZnNldC4KKyAgICAgICAgaW50IGxvID0gbGVmdE9mZnNldCgpOyAvLyBDb25z
dGFudCBwYXJ0IG9mIGxlZnQgb2Zmc2V0LgogICAgICAgICBpbnQgZndpZHRoID0gZi0+bV93aWR0
aDsgLy8gVGhlIHdpZHRoIHdlIGxvb2sgZm9yLgogICAgICAgICBpZiAocm8gLSBsbyA8IGZ3aWR0
aCkKICAgICAgICAgICAgIGZ3aWR0aCA9IHJvIC0gbG87IC8vIE5ldmVyIGxvb2sgZm9yIG1vcmUg
dGhhbiB3aGF0IHdpbGwgYmUgYXZhaWxhYmxlLgogICAgICAgICAKICAgICAgICAgSW50UmVjdCBv
bGRSZWN0KG8tPngoKSwgby0+eSgpICwgby0+d2lkdGgoKSwgby0+aGVpZ2h0KCkpOwotICAgICAg
ICAKKwogICAgICAgICBpZiAoby0+c3R5bGUoKS0+Y2xlYXIoKSAmIENMRUZUKQogICAgICAgICAg
ICAgeSA9IG1heChsZWZ0Qm90dG9tKCksIHkpOwogICAgICAgICBpZiAoby0+c3R5bGUoKS0+Y2xl
YXIoKSAmIENSSUdIVCkKQEAgLTI5MDUsOSArMzAyMiwzOCBAQCBib29sIFJlbmRlckJsb2NrOjpw
b3NpdGlvbk5ld0Zsb2F0cygpCiAgICAgICAgICAgICBvLT5zZXRMb2NhdGlvbihmeCAtIG8tPm1h
cmdpblJpZ2h0KCkgLSBvLT53aWR0aCgpLCB5ICsgby0+bWFyZ2luVG9wKCkpOwogICAgICAgICB9
CiAKLSAgICAgICAgZi0+bV90b3AgPSB5OwotICAgICAgICBmLT5tX2JvdHRvbSA9IGYtPm1fdG9w
ICsgX2hlaWdodDsKKyAgICAgICAgaWYgKHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+cGFnaW5hdGVk
KCkpIHsKKyAgICAgICAgICAgIFJlbmRlckJsb2NrKiBjaGlsZEJsb2NrID0gby0+aXNSZW5kZXJC
bG9jaygpID8gdG9SZW5kZXJCbG9jayhvKSA6IDA7CiAKKyAgICAgICAgICAgIGlmIChjaGlsZEJs
b2NrICYmIHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+bV9wYWdlSGVpZ2h0ICYmIHZpZXcoKS0+bGF5
b3V0U3RhdGUoKS0+cGFnZVkoby0+eSgpKSAhPSBjaGlsZEJsb2NrLT5wYWdlWSgpKQorICAgICAg
ICAgICAgICAgIGNoaWxkQmxvY2stPnNldENoaWxkTmVlZHNMYXlvdXQodHJ1ZSwgZmFsc2UpOwor
ICAgICAgICAgICAgby0+bGF5b3V0SWZOZWVkZWQoKTsKKworICAgICAgICAgICAgLy8gSWYgd2Ug
YXJlIHVuc3BsaXR0YWJsZSBhbmQgZG9uJ3QgZml0LCB0aGVuIHdlIG5lZWQgdG8gbW92ZSBkb3du
LgorICAgICAgICAgICAgLy8gV2UgaW5jbHVkZSBvdXIgbWFyZ2lucyBhcyBwYXJ0IG9mIHRoZSB1
bnNwbGl0dGFibGUgYXJlYS4KKyAgICAgICAgICAgIGludCBuZXdZID0gYWRqdXN0Rm9yVW5zcGxp
dHRhYmxlQ2hpbGQobywgeSwgdHJ1ZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFNl
ZSBpZiB3ZSBoYXZlIGEgcGFnaW5hdGlvbiBzdHJ1dCB0aGF0IGlzIG1ha2luZyB1cyBtb3ZlIGRv
d24gZnVydGhlci4KKyAgICAgICAgICAgIC8vIE5vdGUgdGhhdCBhbiB1bnNwbGl0dGFibGUgY2hp
bGQgY2FuJ3QgYWxzbyBoYXZlIGEgcGFnaW5hdGlvbiBzdHJ1dCwgc28gdGhpcyBpcworICAgICAg
ICAgICAgLy8gZXhjbHVzaXZlIHdpdGggdGhlIGNhc2UgYWJvdmUuCisgICAgICAgICAgICBpZiAo
Y2hpbGRCbG9jayAmJiBjaGlsZEJsb2NrLT5wYWdpbmF0aW9uU3RydXQoKSkgeworICAgICAgICAg
ICAgICAgIG5ld1kgKz0gY2hpbGRCbG9jay0+cGFnaW5hdGlvblN0cnV0KCk7CisgICAgICAgICAg
ICAgICAgY2hpbGRCbG9jay0+c2V0UGFnaW5hdGlvblN0cnV0KDApOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobmV3WSAhPSB5KSB7CisgICAgICAgICAgICAg
ICAgZi0+bV9wYWdpbmF0aW9uU3RydXQgPSBuZXdZIC0geTsKKyAgICAgICAgICAgICAgICB5ID0g
bmV3WTsKKyAgICAgICAgICAgICAgICBvLT5zZXRZKHkgKyBvLT5tYXJnaW5Ub3AoKSk7CisgICAg
ICAgICAgICAgICAgaWYgKGNoaWxkQmxvY2spCisgICAgICAgICAgICAgICAgICAgIGNoaWxkQmxv
Y2stPnNldENoaWxkTmVlZHNMYXlvdXQodHJ1ZSwgZmFsc2UpOworICAgICAgICAgICAgICAgIG8t
PmxheW91dElmTmVlZGVkKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBm
LT5tX3RvcCA9IHk7CisgICAgICAgIGYtPm1fYm90dG9tID0gZi0+bV90b3AgKyBvLT5tYXJnaW5U
b3AoKSArIG8tPmhlaWdodCgpICsgby0+bWFyZ2luQm90dG9tKCk7CisgICAgICAgIAogICAgICAg
ICAvLyBJZiB0aGUgY2hpbGQgbW92ZWQsIHdlIGhhdmUgdG8gcmVwYWludCBpdC4KICAgICAgICAg
aWYgKG8tPmNoZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgpKQogICAgICAgICAgICAgby0+cmVw
YWludER1cmluZ0xheW91dElmTW92ZWQob2xkUmVjdCk7CkBAIC0yOTE3LDYgKzMwNjMsNDAgQEAg
Ym9vbCBSZW5kZXJCbG9jazo6cG9zaXRpb25OZXdGbG9hdHMoKQogICAgIHJldHVybiB0cnVlOwog
fQogCitib29sIFJlbmRlckJsb2NrOjpwb3NpdGlvbk5ld0Zsb2F0T25MaW5lKEZsb2F0aW5nT2Jq
ZWN0KiBuZXdGbG9hdCwgRmxvYXRpbmdPYmplY3QqIGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUp
Cit7CisgICAgYm9vbCBkaWRQb3NpdGlvbiA9IHBvc2l0aW9uTmV3RmxvYXRzKCk7CisgICAgaWYg
KCFkaWRQb3NpdGlvbiB8fCAhbmV3RmxvYXQtPm1fcGFnaW5hdGlvblN0cnV0KQorICAgICAgICBy
ZXR1cm4gZGlkUG9zaXRpb247CisgICAgCisgICAgaW50IGZsb2F0VG9wID0gbmV3RmxvYXQtPm1f
dG9wOworICAgIGludCBwYWdpbmF0aW9uU3RydXQgPSBuZXdGbG9hdC0+bV9wYWdpbmF0aW9uU3Ry
dXQ7CisgICAgRmxvYXRpbmdPYmplY3QqIGYgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+bGFzdCgpOwor
ICAgIAorICAgIEFTU0VSVChmID09IG5ld0Zsb2F0KTsKKworICAgIGlmIChmbG9hdFRvcCAtIHBh
Z2luYXRpb25TdHJ1dCAhPSBoZWlnaHQoKSkKKyAgICAgICAgcmV0dXJuIGRpZFBvc2l0aW9uOwor
CisgICAgZm9yIChmID0gbV9mbG9hdGluZ09iamVjdHMtPnByZXYoKTsgZiAmJiBmICE9IGxhc3RG
bG9hdEZyb21QcmV2aW91c0xpbmU7IGYgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+cHJldigpKSB7Cisg
ICAgICAgIGlmIChmLT5tX3RvcCA9PSBoZWlnaHQoKSkgeworICAgICAgICAgICAgQVNTRVJUKCFm
LT5tX3BhZ2luYXRpb25TdHJ1dCk7CisgICAgICAgICAgICBmLT5tX3BhZ2luYXRpb25TdHJ1dCA9
IHBhZ2luYXRpb25TdHJ1dDsKKyAgICAgICAgICAgIFJlbmRlckJveCogbyA9IGYtPm1fcmVuZGVy
ZXI7CisgICAgICAgICAgICBvLT5zZXRZKG8tPnkoKSArIG8tPm1hcmdpblRvcCgpICsgcGFnaW5h
dGlvblN0cnV0KTsKKyAgICAgICAgICAgIGlmIChvLT5pc1JlbmRlckJsb2NrKCkpCisgICAgICAg
ICAgICAgICAgdG9SZW5kZXJCbG9jayhvKS0+c2V0Q2hpbGROZWVkc0xheW91dCh0cnVlLCBmYWxz
ZSk7CisgICAgICAgICAgICBvLT5sYXlvdXRJZk5lZWRlZCgpOworICAgICAgICAgICAgZi0+bV90
b3AgKz0gZi0+bV9wYWdpbmF0aW9uU3RydXQ7CisgICAgICAgICAgICBmLT5tX2JvdHRvbSArPSBm
LT5tX3BhZ2luYXRpb25TdHJ1dDsKKyAgICAgICAgfQorICAgIH0KKyAgICAgICAgCisgICAgc2V0
SGVpZ2h0KGhlaWdodCgpICsgcGFnaW5hdGlvblN0cnV0KTsKKyAgICAKKyAgICByZXR1cm4gZGlk
UG9zaXRpb247Cit9CisKIHZvaWQgUmVuZGVyQmxvY2s6Om5ld0xpbmUoRUNsZWFyIGNsZWFyKQog
ewogICAgIHBvc2l0aW9uTmV3RmxvYXRzKCk7CkBAIC0zMTU4LDggKzMzMzgsOCBAQCBpbnQgUmVu
ZGVyQmxvY2s6Omxvd2VzdFBvc2l0aW9uKGJvb2wgaW5jCiAKICAgICBpZiAoaGFzQ29sdW1ucygp
KSB7CiAgICAgICAgIENvbHVtbkluZm8qIGNvbEluZm8gPSBjb2x1bW5JbmZvKCk7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb2xJbmZvLT5jb2x1bW5Db3VudCgpOyBpKyspCi0g
ICAgICAgICAgICBib3R0b20gPSBtYXgoYm90dG9tLCBjb2xJbmZvLT5jb2x1bW5SZWN0QXQoaSku
Ym90dG9tKCkgKyByZWxhdGl2ZU9mZnNldCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBjb2x1bW5Db3VudChjb2xJbmZvKTsgaSsrKQorICAgICAgICAgICAgYm90dG9tID0gbWF4
KGJvdHRvbSwgY29sdW1uUmVjdEF0KGNvbEluZm8sIGkpLmJvdHRvbSgpICsgcmVsYXRpdmVPZmZz
ZXQpOwogICAgICAgICByZXR1cm4gYm90dG9tOwogICAgIH0KIApAQCAtMzI1Myw4ICszNDMzLDkg
QEAgaW50IFJlbmRlckJsb2NrOjpyaWdodG1vc3RQb3NpdGlvbihib29sIAogICAgICAgICAvLyBU
aGlzIG9ubHkgbWF0dGVycyBmb3IgTFRSCiAgICAgICAgIGlmIChzdHlsZSgpLT5kaXJlY3Rpb24o
KSA9PSBMVFIpIHsKICAgICAgICAgICAgIENvbHVtbkluZm8qIGNvbEluZm8gPSBjb2x1bW5JbmZv
KCk7Ci0gICAgICAgICAgICBpZiAoY29sSW5mby0+Y29sdW1uQ291bnQoKSkKLSAgICAgICAgICAg
ICAgICByaWdodCA9IG1heChjb2xJbmZvLT5jb2x1bW5SZWN0QXQoY29sSW5mby0+Y29sdW1uQ291
bnQoKSAtIDEpLnJpZ2h0KCkgKyByZWxhdGl2ZU9mZnNldCwgcmlnaHQpOworICAgICAgICAgICAg
dW5zaWduZWQgY291bnQgPSBjb2x1bW5Db3VudChjb2xJbmZvKTsKKyAgICAgICAgICAgIGlmIChj
b3VudCkKKyAgICAgICAgICAgICAgICByaWdodCA9IG1heChjb2x1bW5SZWN0QXQoY29sSW5mbywg
Y291bnQgLSAxKS5yaWdodCgpICsgcmVsYXRpdmVPZmZzZXQsIHJpZ2h0KTsKICAgICAgICAgfQog
ICAgICAgICByZXR1cm4gcmlnaHQ7CiAgICAgfQpAQCAtMzM1Myw4ICszNTM0LDkgQEAgaW50IFJl
bmRlckJsb2NrOjpsZWZ0bW9zdFBvc2l0aW9uKGJvb2wgaQogICAgICAgICAvLyBUaGlzIG9ubHkg
bWF0dGVycyBmb3IgUlRMCiAgICAgICAgIGlmIChzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBSVEwp
IHsKICAgICAgICAgICAgIENvbHVtbkluZm8qIGNvbEluZm8gPSBjb2x1bW5JbmZvKCk7Ci0gICAg
ICAgICAgICBpZiAoY29sSW5mby0+Y29sdW1uQ291bnQoKSkKLSAgICAgICAgICAgICAgICBsZWZ0
ID0gbWluKGNvbEluZm8tPmNvbHVtblJlY3RBdChjb2xJbmZvLT5jb2x1bW5Db3VudCgpIC0gMSku
eCgpICsgcmVsYXRpdmVPZmZzZXQsIGxlZnQpOworICAgICAgICAgICAgdW5zaWduZWQgY291bnQg
PSBjb2x1bW5Db3VudChjb2xJbmZvKTsKKyAgICAgICAgICAgIGlmIChjb3VudCkKKyAgICAgICAg
ICAgICAgICBsZWZ0ID0gbWluKGNvbHVtblJlY3RBdChjb2xJbmZvLCBjb3VudCAtIDEpLngoKSAr
IHJlbGF0aXZlT2Zmc2V0LCBsZWZ0KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gbGVmdDsK
ICAgICB9CkBAIC0zNjQ3LDYgKzM4MjksOSBAQCBib29sIFJlbmRlckJsb2NrOjpjb250YWluc0Zs
b2F0KFJlbmRlck9iCiAKIHZvaWQgUmVuZGVyQmxvY2s6Om1hcmtBbGxEZXNjZW5kYW50c1dpdGhG
bG9hdHNGb3JMYXlvdXQoUmVuZGVyQm94KiBmbG9hdFRvUmVtb3ZlLCBib29sIGluTGF5b3V0KQog
eworICAgIGlmICghbV9ldmVySGFkTGF5b3V0KQorICAgICAgICByZXR1cm47CisKICAgICBzZXRD
aGlsZE5lZWRzTGF5b3V0KHRydWUsICFpbkxheW91dCk7CiAKICAgICBpZiAoZmxvYXRUb1JlbW92
ZSkKQEAgLTM2NjQsMzAgKzM4NDksNDUgQEAgdm9pZCBSZW5kZXJCbG9jazo6bWFya0FsbERlc2Nl
bmRhbnRzV2l0aAogICAgIH0KIH0KIAotaW50IFJlbmRlckJsb2NrOjp2aXNpYmxlVG9wT2ZIaWdo
ZXN0RmxvYXRFeHRlbmRpbmdCZWxvdyhpbnQgYm90dG9tLCBpbnQgbWF4SGVpZ2h0KSBjb25zdAor
dm9pZCBSZW5kZXJCbG9jazo6bWFya0Rlc2NlbmRhbnRCbG9ja3NBbmRMaW5lc0ZvckxheW91dChi
b29sIGluTGF5b3V0KQogewotICAgIGludCB0b3AgPSBib3R0b207Ci0gICAgaWYgKG1fZmxvYXRp
bmdPYmplY3RzKSB7Ci0gICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdDsKLSAg
ICAgICAgZm9yIChEZXByZWNhdGVkUHRyTGlzdEl0ZXJhdG9yPEZsb2F0aW5nT2JqZWN0PiBpdCgq
bV9mbG9hdGluZ09iamVjdHMpOyAoZmxvYXRpbmdPYmplY3QgPSBpdC5jdXJyZW50KCkpOyArK2l0
KSB7Ci0gICAgICAgICAgICBSZW5kZXJCb3gqIGZsb2F0aW5nQm94ID0gZmxvYXRpbmdPYmplY3Qt
Pm1fcmVuZGVyZXI7Ci0gICAgICAgICAgICBJbnRSZWN0IHZpc2libGVPdmVyZmxvdyA9IGZsb2F0
aW5nQm94LT52aXNpYmxlT3ZlcmZsb3dSZWN0KCk7Ci0gICAgICAgICAgICB2aXNpYmxlT3ZlcmZs
b3cubW92ZShmbG9hdGluZ0JveC0+eCgpLCBmbG9hdGluZ0JveC0+eSgpKTsKLSAgICAgICAgICAg
IGlmICh2aXNpYmxlT3ZlcmZsb3cueSgpIDwgdG9wICYmIHZpc2libGVPdmVyZmxvdy5ib3R0b20o
KSA+IGJvdHRvbSAmJiB2aXNpYmxlT3ZlcmZsb3cuaGVpZ2h0KCkgPD0gbWF4SGVpZ2h0ICYmIGZs
b2F0aW5nQm94LT5jb250YWluaW5nQmxvY2soKSA9PSB0aGlzKQotICAgICAgICAgICAgICAgIHRv
cCA9IHZpc2libGVPdmVyZmxvdy55KCk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgaWYgKCFtX2V2
ZXJIYWRMYXlvdXQpCisgICAgICAgIHJldHVybjsKKworICAgIHNldENoaWxkTmVlZHNMYXlvdXQo
dHJ1ZSwgIWluTGF5b3V0KTsKIAorICAgIC8vIEl0ZXJhdGUgb3ZlciBvdXIgY2hpbGRyZW4gYW5k
IG1hcmsgdGhlbSBhcyBuZWVkZWQuCiAgICAgaWYgKCFjaGlsZHJlbklubGluZSgpKSB7CiAgICAg
ICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxk
ID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgICAgIGlmIChjaGlsZC0+aXNGbG9h
dGluZ09yUG9zaXRpb25lZCgpIHx8ICFjaGlsZC0+aXNSZW5kZXJCbG9jaygpKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGNoaWxkQmxvY2sgPSB0
b1JlbmRlckJsb2NrKGNoaWxkKTsKLSAgICAgICAgICAgIHRvcCA9IG1pbih0b3AsIGNoaWxkQmxv
Y2stPnkoKSArIGNoaWxkQmxvY2stPnZpc2libGVUb3BPZkhpZ2hlc3RGbG9hdEV4dGVuZGluZ0Jl
bG93KGJvdHRvbSAtIGNoaWxkQmxvY2stPnkoKSwgbWF4SGVpZ2h0KSk7CisgICAgICAgICAgICB0
b1JlbmRlckJsb2NrKGNoaWxkKS0+bWFya0Rlc2NlbmRhbnRCbG9ja3NBbmRMaW5lc0ZvckxheW91
dChpbkxheW91dCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gV2FsayBvdXIgZmxv
YXRpbmcgb2JqZWN0cyBhbmQgbWFyayB0aGVtIHRvby4KKyAgICBpZiAobV9mbG9hdGluZ09iamVj
dHMpIHsKKyAgICAgICAgRGVwcmVjYXRlZFB0ckxpc3RJdGVyYXRvcjxGbG9hdGluZ09iamVjdD4g
aXQoKm1fZmxvYXRpbmdPYmplY3RzKTsKKyAgICAgICAgd2hpbGUgKGl0LmN1cnJlbnQoKSkgewor
ICAgICAgICAgICAgaWYgKGl0LmN1cnJlbnQoKS0+bV9yZW5kZXJlci0+aXNSZW5kZXJCbG9jaygp
KQorICAgICAgICAgICAgICAgIHRvUmVuZGVyQmxvY2soaXQuY3VycmVudCgpLT5tX3JlbmRlcmVy
KS0+bWFya0Rlc2NlbmRhbnRCbG9ja3NBbmRMaW5lc0ZvckxheW91dChpbkxheW91dCk7CisgICAg
ICAgICAgICArK2l0OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1fcG9zaXRpb25lZE9i
amVjdHMpIHsKKyAgICAgICAgLy8gRklYTUU6IFRlY2huaWNhbGx5IHdlIGRvbid0IGhhdmUgdG8g
bWFyayB0aGUgcG9zaXRpb25lZCBvYmplY3RzIGlmIHdlJ3JlIHRoZSBibG9jaworICAgICAgICAv
LyB0aGF0IGVzdGFibGlzaGVkIHRoZSBjb2x1bW5zLCBidXQgd2UgZG9uJ3QgcmVhbGx5IGhhdmUg
dGhhdCBpbmZvcm1hdGlvbiBoZXJlLgorICAgICAgICBSZW5kZXJCb3gqIHI7CisgICAgICAgIEl0
ZXJhdG9yIGVuZCA9IG1fcG9zaXRpb25lZE9iamVjdHMtPmVuZCgpOworICAgICAgICBmb3IgKEl0
ZXJhdG9yIGl0ID0gbV9wb3NpdGlvbmVkT2JqZWN0cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7CisgICAgICAgICAgICByID0gKml0OworICAgICAgICAgICAgaWYgKHItPmlzUmVuZGVyQmxv
Y2soKSkKKyAgICAgICAgICAgICAgICB0b1JlbmRlckJsb2NrKHIpLT5tYXJrRGVzY2VuZGFudEJs
b2Nrc0FuZExpbmVzRm9yTGF5b3V0KCk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICByZXR1cm4g
dG9wOworICAgIC8vIEZJWE1FOiBJZiB3ZSdyZSBhIHRhYmxlLCB0aGVuIHdlIGhhdmUgdG8gbWFy
ayBldmVyeSBzaW5nbGUgY2VsbC4KIH0KIAogaW50IFJlbmRlckJsb2NrOjpnZXRDbGVhckRlbHRh
KFJlbmRlckJveCogY2hpbGQsIGludCB5UG9zKQpAQCAtMzg0NywxNiArNDA0NywxNiBAQCBib29s
IFJlbmRlckJsb2NrOjpoaXRUZXN0Q29sdW1ucyhjb25zdCBICiB7CiAgICAgLy8gV2UgbmVlZCB0
byBkbyBtdWx0aXBsZSBwYXNzZXMsIGJyZWFraW5nIHVwIG91ciBoaXQgdGVzdGluZyBpbnRvIHN0
cmlwcy4KICAgICBDb2x1bW5JbmZvKiBjb2xJbmZvID0gY29sdW1uSW5mbygpOwotICAgIGludCBj
b2xDb3VudCA9IGNvbEluZm8tPmNvbHVtbkNvdW50KCk7CisgICAgaW50IGNvbENvdW50ID0gY29s
dW1uQ291bnQoY29sSW5mbyk7CiAgICAgaWYgKCFjb2xDb3VudCkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIGludCBsZWZ0ID0gYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKTsKICAgICBp
bnQgY3VycllPZmZzZXQgPSAwOwogICAgIGludCBpOwogICAgIGZvciAoaSA9IDA7IGkgPCBjb2xD
b3VudDsgaSsrKQotICAgICAgICBjdXJyWU9mZnNldCAtPSBjb2xJbmZvLT5jb2x1bW5SZWN0QXQo
aSkuaGVpZ2h0KCk7CisgICAgICAgIGN1cnJZT2Zmc2V0IC09IGNvbHVtblJlY3RBdChjb2xJbmZv
LCBpKS5oZWlnaHQoKTsKICAgICBmb3IgKGkgPSBjb2xDb3VudCAtIDE7IGkgPj0gMDsgaS0tKSB7
Ci0gICAgICAgIEludFJlY3QgY29sUmVjdCA9IGNvbEluZm8tPmNvbHVtblJlY3RBdChpKTsKKyAg
ICAgICAgSW50UmVjdCBjb2xSZWN0ID0gY29sdW1uUmVjdEF0KGNvbEluZm8sIGkpOwogICAgICAg
ICBpbnQgY3VyclhPZmZzZXQgPSBjb2xSZWN0LngoKSAtIGxlZnQ7CiAgICAgICAgIGN1cnJZT2Zm
c2V0ICs9IGNvbFJlY3QuaGVpZ2h0KCk7CiAgICAgICAgIGNvbFJlY3QubW92ZSh0eCwgdHkpOwpA
QCAtNDE1MCw4ICs0MzUwLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6c2V0RGVzaXJlZENvbHVtbkNv
dW50QQogICAgIGJvb2wgZGVzdHJveUNvbHVtbnMgPSAhZmlyc3RDaGlsZCgpCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHx8IChjb3VudCA9PSAxICYmIHN0eWxlKCktPmhhc0F1dG9Db2x1bW5X
aWR0aCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBmaXJzdENoaWxkKCktPmlzQW5v
bnltb3VzQ29sdW1uc0Jsb2NrKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgZmlyc3RD
aGlsZCgpLT5pc0Fub255bW91c0NvbHVtblNwYW5CbG9jaygpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgIHx8IGRvY3VtZW50KCktPnNldHRpbmdzKCktPnBhZ2luYXRlRHVyaW5nTGF5b3V0RW5h
YmxlZCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBmaXJzdENoaWxkKCktPmlzQW5v
bnltb3VzQ29sdW1uU3BhbkJsb2NrKCk7CiAgICAgaWYgKGRlc3Ryb3lDb2x1bW5zKSB7CiAgICAg
ICAgIGlmIChoYXNDb2x1bW5zKCkpIHsKICAgICAgICAgICAgIGRlbGV0ZSBnQ29sdW1uSW5mb01h
cC0+dGFrZSh0aGlzKTsKQEAgLTQxOTQsMTMzICs0MzkzLDYwIEBAIENvbHVtbkluZm8qIFJlbmRl
ckJsb2NrOjpjb2x1bW5JbmZvKCkgY28KICAgICByZXR1cm4gZ0NvbHVtbkluZm9NYXAtPmdldCh0
aGlzKTsgICAgCiB9CiAKLWludCBSZW5kZXJCbG9jazo6bGF5b3V0Q29sdW1ucyhpbnQgZW5kT2ZD
b250ZW50LCBpbnQgcmVxdWVzdGVkQ29sdW1uSGVpZ2h0KQordW5zaWduZWQgUmVuZGVyQmxvY2s6
OmNvbHVtbkNvdW50KENvbHVtbkluZm8qIGNvbEluZm8pIGNvbnN0CiB7Ci0gICAgLy8gRG9uJ3Qg
ZG8gYW55dGhpbmcgaWYgd2UgaGF2ZSBubyBjb2x1bW5zCi0gICAgaWYgKCFoYXNDb2x1bW5zKCkp
Ci0gICAgICAgIHJldHVybiAtMTsKKyAgICBBU1NFUlQoaGFzQ29sdW1ucygpICYmIGdDb2x1bW5J
bmZvTWFwLT5nZXQodGhpcykgPT0gY29sSW5mbyk7CisgICAgcmV0dXJuIGNvbEluZm8tPmNvbHVt
bkNvdW50KCk7Cit9CiAKLSAgICBDb2x1bW5JbmZvKiBpbmZvID0gZ0NvbHVtbkluZm9NYXAtPmdl
dCh0aGlzKTsKLSAgICBpbnQgZGVzaXJlZENvbHVtbldpZHRoID0gaW5mby0+ZGVzaXJlZENvbHVt
bldpZHRoKCk7Ci0gICAgaW50IGRlc2lyZWRDb2x1bW5Db3VudCA9IGluZm8tPmRlc2lyZWRDb2x1
bW5Db3VudCgpOwotICAgIAotICAgIGJvb2wgY29tcHV0ZUludHJpbnNpY0hlaWdodCA9IChlbmRP
ZkNvbnRlbnQgPT0gLTEpOwotCi0gICAgLy8gRmlsbCB0aGUgY29sdW1ucyBpbiB0byB0aGUgYXZh
aWxhYmxlIGhlaWdodC4gIEF0dGVtcHQgdG8gYmFsYW5jZSB0aGUgaGVpZ2h0IG9mIHRoZSBjb2x1
bW5zLgotICAgIC8vIEFkZCBpbiBoYWxmIG91ciBsaW5lLWhlaWdodCB0byBoZWxwIHdpdGggYmVz
dC1ndWVzcyBpbml0aWFsIGJhbGFuY2luZy4KLSAgICBpbnQgY29sdW1uU2xvcCA9IGxpbmVIZWln
aHQoZmFsc2UpIC8gMjsKLSAgICBpbnQgcmVtYWluaW5nU2xvcFNwYWNlID0gY29sdW1uU2xvcCAq
IGRlc2lyZWRDb2x1bW5Db3VudDsKLSAgICBpbnQgYXZhaWxhYmxlSGVpZ2h0ID0gY29udGVudEhl
aWdodCgpOwotICAgIGludCBjb2xIZWlnaHQ7Ci0gICAgaWYgKGNvbXB1dGVJbnRyaW5zaWNIZWln
aHQgJiYgcmVxdWVzdGVkQ29sdW1uSGVpZ2h0ID49IDApCi0gICAgICAgIGNvbEhlaWdodCA9IHJl
cXVlc3RlZENvbHVtbkhlaWdodDsKLSAgICBlbHNlIGlmIChjb21wdXRlSW50cmluc2ljSGVpZ2h0
KQotICAgICAgICBjb2xIZWlnaHQgPSBtaW4oYXZhaWxhYmxlSGVpZ2h0LCBhdmFpbGFibGVIZWln
aHQgLyBkZXNpcmVkQ29sdW1uQ291bnQgKyBjb2x1bW5TbG9wKTsKLSAgICBlbHNlCi0gICAgICAg
IGNvbEhlaWdodCA9IGF2YWlsYWJsZUhlaWdodDsKLSAgICBpbnQgb3JpZ2luYWxDb2xIZWlnaHQg
PSBjb2xIZWlnaHQ7CitJbnRSZWN0IFJlbmRlckJsb2NrOjpjb2x1bW5SZWN0QXQoQ29sdW1uSW5m
byogY29sSW5mbywgdW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7CisgICAgQVNTRVJUKGhhc0NvbHVt
bnMoKSAmJiBnQ29sdW1uSW5mb01hcC0+Z2V0KHRoaXMpID09IGNvbEluZm8pOwogCisgICAgLy8g
Q29tcHV0ZSB0aGUgYXBwcm9wcmlhdGUgcmVjdCBiYXNlZCBvZmYgb3VyIGluZm9ybWF0aW9uLgor
ICAgIGludCBjb2xXaWR0aCA9IGNvbEluZm8tPmRlc2lyZWRDb2x1bW5XaWR0aCgpOworICAgIGlu
dCBjb2xIZWlnaHQgPSBjb2xJbmZvLT5jb2x1bW5IZWlnaHQoKTsKKyAgICBpbnQgY29sVG9wID0g
Ym9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCk7CiAgICAgaW50IGNvbEdhcCA9IGNvbHVtbkdhcCgp
OworICAgIGludCBjb2xMZWZ0ID0gc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8gCisgICAg
ICAgICAgICAgICAgICAgICAgYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKSArIChpbmRleCAq
IChjb2xXaWR0aCArIGNvbEdhcCkpCisgICAgICAgICAgICAgICAgICAgICAgOiBib3JkZXJMZWZ0
KCkgKyBwYWRkaW5nTGVmdCgpICsgY29udGVudFdpZHRoKCkgLSBjb2xXaWR0aCAtIChpbmRleCAq
IChjb2xXaWR0aCArIGNvbEdhcCkpOworICAgIHJldHVybiBJbnRSZWN0KGNvbExlZnQsIGNvbFRv
cCwgY29sV2lkdGgsIGNvbEhlaWdodCk7Cit9CiAKLSAgICAvLyBDb21wdXRlIGEgY29sbGVjdGlv
biBvZiBjb2x1bW4gcmVjdHMuCi0gICAgaW5mby0+Y2xlYXJDb2x1bW5zKCk7Ci0gICAgCi0gICAg
Ly8gVGhlbiB3ZSBkbyBhIHNpbXVsYXRlZCAicGFpbnQiIGludG8gdGhlIGNvbHVtbiBzbGljZXMg
YW5kIGFsbG93IHRoZSBjb250ZW50IHRvIHNsaWdodGx5IGFkanVzdCBvdXIgaW5kaXZpZHVhbCBj
b2x1bW4gcmVjdHMuCi0gICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gdGFrZSBpbnRvIGFjY291bnQg
bGF5ZXJzIHRoYXQgYXJlIGFmZmVjdGVkIGJ5IHRoZSBjb2x1bW5zIGFzIHdlbGwgaGVyZSBzbyB0
aGF0IHRoZXkgY2FuIGhhdmUgYW4gb3Bwb3J0dW5pdHkKLSAgICAvLyB0byBhZGp1c3QgY29sdW1u
IHJlY3RzIGFsc28uCi0gICAgUmVuZGVyVmlldyogdiA9IHZpZXcoKTsKLSAgICBpbnQgbGVmdCA9
IGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCk7Ci0gICAgaW50IHRvcCA9IGJvcmRlclRvcCgp
ICsgcGFkZGluZ1RvcCgpOwotICAgIGludCBjdXJyWCA9IHN0eWxlKCktPmRpcmVjdGlvbigpID09
IExUUiA/IGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCkgOiBib3JkZXJMZWZ0KCkgKyBwYWRk
aW5nTGVmdCgpICsgY29udGVudFdpZHRoKCkgLSBkZXNpcmVkQ29sdW1uV2lkdGg7Ci0gICAgaW50
IGN1cnJZID0gdG9wOwotICAgIHVuc2lnbmVkIGNvbENvdW50ID0gZGVzaXJlZENvbHVtbkNvdW50
OwotICAgIGludCBtYXhDb2xCb3R0b20gPSBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKTsKLSAg
ICBpbnQgY29udGVudEJvdHRvbSA9IHRvcCArIGF2YWlsYWJsZUhlaWdodDsKLSAgICBpbnQgbWlu
aW11bUNvbHVtbkhlaWdodCA9IC0xOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb2xD
b3VudDsgaSsrKSB7Ci0gICAgICAgIC8vIElmIHdlIGFyZW4ndCBjb25zdHJhaW5lZCwgdGhlbiB0
aGUgbGFzdCBjb2x1bW4gY2FuIGp1c3QgZ2V0IGFsbCB0aGUgcmVtYWluaW5nIHNwYWNlLgotICAg
ICAgICBpZiAoY29tcHV0ZUludHJpbnNpY0hlaWdodCAmJiBpID09IGNvbENvdW50IC0gMSkKLSAg
ICAgICAgICAgIGNvbEhlaWdodCA9IGF2YWlsYWJsZUhlaWdodDsKLQotICAgICAgICAvLyBUaGlz
IHJlcHJlc2VudHMgdGhlIHJlYWwgY29sdW1uIHBvc2l0aW9uLgotICAgICAgICBJbnRSZWN0IGNv
bFJlY3QoY3VyclgsIHRvcCwgZGVzaXJlZENvbHVtbldpZHRoLCBjb2xIZWlnaHQpOwotCi0gICAg
ICAgIGludCB0cnVuY2F0aW9uUG9pbnQgPSB2aXNpYmxlVG9wT2ZIaWdoZXN0RmxvYXRFeHRlbmRp
bmdCZWxvdyhjdXJyWSArIGNvbEhlaWdodCwgY29sSGVpZ2h0KTsKLQotICAgICAgICAvLyBGb3Ig
dGhlIHNpbXVsYXRlZCBwYWludCwgd2UgcHJldGVuZCBsaWtlIGV2ZXJ5dGhpbmcgaXMgaW4gb25l
IGxvbmcgc3RyaXAuCi0gICAgICAgIEludFJlY3QgcGFnZVJlY3QobGVmdCwgY3VyclksIGNvbnRl
bnRXaWR0aCgpLCB0cnVuY2F0aW9uUG9pbnQgLSBjdXJyWSk7Ci0gICAgICAgIHYtPnNldFByaW50
UmVjdChwYWdlUmVjdCk7Ci0gICAgICAgIHYtPnNldFRydW5jYXRlZEF0KHRydW5jYXRpb25Qb2lu
dCk7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KChQbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dCopMCk7Ci0gICAgICAgIFBhaW50SW5mbyBwYWludEluZm8oJmNvbnRleHQsIHBhZ2VSZWN0
LCBQYWludFBoYXNlRm9yZWdyb3VuZCwgZmFsc2UsIDAsIDApOwotICAgICAgICAKLSAgICAgICAg
c2V0SGFzQ29sdW1ucyhmYWxzZSk7Ci0gICAgICAgIHBhaW50T2JqZWN0KHBhaW50SW5mbywgMCwg
MCk7Ci0gICAgICAgIHNldEhhc0NvbHVtbnModHJ1ZSk7Ci0KLSAgICAgICAgaWYgKGNvbXB1dGVJ
bnRyaW5zaWNIZWlnaHQgJiYgdi0+bWluaW11bUNvbHVtbkhlaWdodCgpID4gb3JpZ2luYWxDb2xI
ZWlnaHQpIHsKLSAgICAgICAgICAgIC8vIFRoZSBpbml0aWFsIGNvbHVtbiBoZWlnaHQgd2FzIHRv
byBzbWFsbCB0byBjb250YWluIG9uZSBsaW5lIG9mIHRleHQuCi0gICAgICAgICAgICBtaW5pbXVt
Q29sdW1uSGVpZ2h0ID0gbWF4KG1pbmltdW1Db2x1bW5IZWlnaHQsIHYtPm1pbmltdW1Db2x1bW5I
ZWlnaHQoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpbnQgYWRqdXN0ZWRCb3R0b20gPSB2LT5i
ZXN0VHJ1bmNhdGVkQXQoKTsKLSAgICAgICAgaWYgKGFkanVzdGVkQm90dG9tIDw9IGN1cnJZKQot
ICAgICAgICAgICAgYWRqdXN0ZWRCb3R0b20gPSB0cnVuY2F0aW9uUG9pbnQ7Ci0gICAgICAgIAot
ICAgICAgICBjb2xSZWN0LnNldEhlaWdodChhZGp1c3RlZEJvdHRvbSAtIGN1cnJZKTsKLSAgICAg
ICAgCi0gICAgICAgIC8vIEFkZCBpbiB0aGUgbG9zdCBzcGFjZSB0byB0aGUgc3Vic2VxdWVudCBj
b2x1bW5zLgotICAgICAgICAvLyBGSVhNRTogVGhpcyB3aWxsIGNyZWF0ZSBhICJzdGFpcmNhc2Ui
IGVmZmVjdCBpZiB0aGVyZSBhcmUgZW5vdWdoIGNvbHVtbnMsIGJ1dCB0aGUgZWZmZWN0IHNob3Vs
ZCBiZSBwcmV0dHkgc3VidGxlLgotICAgICAgICBpZiAoY29tcHV0ZUludHJpbnNpY0hlaWdodCkg
ewotICAgICAgICAgICAgaW50IGxvc3RTcGFjZSA9IGNvbEhlaWdodCAtIGNvbFJlY3QuaGVpZ2h0
KCk7Ci0gICAgICAgICAgICBpZiAobG9zdFNwYWNlID4gcmVtYWluaW5nU2xvcFNwYWNlKSB7Ci0g
ICAgICAgICAgICAgICAgLy8gUmVkZXN0cmlidXRlIHRoZSBzcGFjZSBhbW9uZyB0aGUgcmVtYWlu
aW5nIGNvbHVtbnMuCi0gICAgICAgICAgICAgICAgaW50IHNwYWNlVG9SZWRpc3RyaWJ1dGUgPSBs
b3N0U3BhY2UgLSByZW1haW5pbmdTbG9wU3BhY2U7Ci0gICAgICAgICAgICAgICAgaW50IHJlbWFp
bmluZ0NvbHVtbnMgPSBjb2xDb3VudCAtIGkgKyAxOwotICAgICAgICAgICAgICAgIGNvbEhlaWdo
dCArPSBzcGFjZVRvUmVkaXN0cmlidXRlIC8gcmVtYWluaW5nQ29sdW1uczsKLSAgICAgICAgICAg
IH0gCi0gICAgICAgICAgICByZW1haW5pbmdTbG9wU3BhY2UgPSBtYXgoMCwgcmVtYWluaW5nU2xv
cFNwYWNlIC0gbG9zdFNwYWNlKTsKLSAgICAgICAgfQorYm9vbCBSZW5kZXJCbG9jazo6bGF5b3V0
Q29sdW1ucyhib29sIGhhc1NwZWNpZmllZFBhZ2VIZWlnaHQsIGludCBwYWdlSGVpZ2h0LCBMYXlv
dXRTdGF0ZU1haW50YWluZXImIHN0YXRlUHVzaGVyKQoreworICAgIGlmIChoYXNDb2x1bW5zKCkp
IHsKKyAgICAgICAgQ29sdW1uSW5mbyogY29sSW5mbyA9IGNvbHVtbkluZm8oKTsKKyAgICAgICAg
aW50IGRlc2lyZWRDb2x1bW5Db3VudCA9IGNvbEluZm8tPmRlc2lyZWRDb2x1bW5Db3VudCgpOwor
ICAgICAgICBpZiAoIWhhc1NwZWNpZmllZFBhZ2VIZWlnaHQgJiYgY29udGVudEhlaWdodCgpID4g
cGFnZUhlaWdodCAqIGRlc2lyZWRDb2x1bW5Db3VudCkgeworICAgICAgICAgICAgLy8gTm93IHRo
YXQgd2Uga25vdyB0aGUgaW50cmluc2ljIGhlaWdodCBvZiB0aGUgY29sdW1ucywgd2UgaGF2ZSB0
byByZWJhbGFuY2UgdGhlbS4KKyAgICAgICAgICAgIGludCBjb2x1bW5IZWlnaHQgPSBtYXgoY29s
SW5mby0+bWluaW11bUNvbHVtbkhlaWdodCgpLCAoaW50KWNlaWxmKChmbG9hdCljb250ZW50SGVp
Z2h0KCkgLyBkZXNpcmVkQ29sdW1uQ291bnQpKTsKKyAgICAgICAgICAgIGlmIChjb2x1bW5IZWln
aHQgPiAwKSB7CisgICAgICAgICAgICAgICAgc3RhdGVQdXNoZXIucG9wKCk7CisgICAgICAgICAg
ICAgICAgbV9ldmVySGFkTGF5b3V0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBsYXlvdXRCbG9j
ayhmYWxzZSwgY29sdW1uSGVpZ2h0KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSAKICAgICAgICAgCi0gICAgICAgIGlmIChzdHlsZSgpLT5k
aXJlY3Rpb24oKSA9PSBMVFIpCi0gICAgICAgICAgICBjdXJyWCArPSBkZXNpcmVkQ29sdW1uV2lk
dGggKyBjb2xHYXA7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGN1cnJYIC09IChkZXNpcmVk
Q29sdW1uV2lkdGggKyBjb2xHYXApOwotCi0gICAgICAgIGN1cnJZICs9IGNvbFJlY3QuaGVpZ2h0
KCk7Ci0gICAgICAgIGF2YWlsYWJsZUhlaWdodCAtPSBjb2xSZWN0LmhlaWdodCgpOwotCi0gICAg
ICAgIG1heENvbEJvdHRvbSA9IG1heChjb2xSZWN0LmJvdHRvbSgpLCBtYXhDb2xCb3R0b20pOwor
ICAgICAgICBpZiAocGFnZUhlaWdodCkgLy8gRklYTUU6IFNob3VsZCB3ZSB1c2UgbG93ZXN0UG9z
aXRpb24gKGV4Y2x1ZGluZyBvdXIgcG9zaXRpb25lZCBvYmplY3RzKSBpbnN0ZWFkIG9mIGNvbnRl
bnRIZWlnaHQoKT8KKyAgICAgICAgICAgIGNvbEluZm8tPnNldENvbHVtbkNvdW50QW5kSGVpZ2h0
KGNlaWxmKChmbG9hdCljb250ZW50SGVpZ2h0KCkgLyBwYWdlSGVpZ2h0KSwgcGFnZUhlaWdodCk7
CiAKLSAgICAgICAgaW5mby0+YWRkQ29sdW1uUmVjdChjb2xSZWN0KTsKLSAgICAgICAgCi0gICAg
ICAgIC8vIFN0YXJ0IGFkZGluZyBpbiBtb3JlIGNvbHVtbnMgYXMgbG9uZyBhcyB0aGVyZSdzIHN0
aWxsIGNvbnRlbnQgbGVmdC4KLSAgICAgICAgaWYgKGN1cnJZIDwgZW5kT2ZDb250ZW50ICYmIGkg
PT0gY29sQ291bnQgLSAxICYmIChjb21wdXRlSW50cmluc2ljSGVpZ2h0IHx8IGNvbnRlbnRIZWln
aHQoKSkpCi0gICAgICAgICAgICBjb2xDb3VudCsrOwotICAgIH0KKyAgICAgICAgaWYgKGNvbHVt
bkNvdW50KGNvbEluZm8pKSB7CisgICAgICAgICAgICBJbnRSZWN0IGxhc3RSZWN0ID0gY29sdW1u
UmVjdEF0KGNvbEluZm8sIGNvbHVtbkNvdW50KGNvbEluZm8pIC0gMSk7CisgICAgICAgICAgICBp
bnQgb3ZlcmZsb3dMZWZ0ID0gc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gUlRMID8gbWluKDAsIGxh
c3RSZWN0LngoKSkgOiAwOworICAgICAgICAgICAgaW50IG92ZXJmbG93UmlnaHQgPSBzdHlsZSgp
LT5kaXJlY3Rpb24oKSA9PSBMVFIgPyBtYXgod2lkdGgoKSwgbGFzdFJlY3QueCgpICsgbGFzdFJl
Y3Qud2lkdGgoKSkgOiAwOworICAgICAgICAgICAgaW50IG92ZXJmbG93SGVpZ2h0ID0gYm9yZGVy
VG9wKCkgKyBwYWRkaW5nVG9wKCkgKyBjb2xJbmZvLT5jb2x1bW5IZWlnaHQoKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgc2V0SGVpZ2h0KG92ZXJmbG93SGVpZ2h0ICsgYm9yZGVyQm90dG9t
KCkgKyBwYWRkaW5nQm90dG9tKCkgKyBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCkpOwogCi0g
ICAgaWYgKG1pbmltdW1Db2x1bW5IZWlnaHQgPj0gMCkgewotICAgICAgICAvLyBJZiBvcmlnaW5h
bENvbEhlaWdodCB3YXMgdG9vIHNtYWxsLCB3ZSBuZWVkIHRvIHRyeSB0byBsYXlvdXQgYWdhaW4u
Ci0gICAgICAgIHJldHVybiBsYXlvdXRDb2x1bW5zKGVuZE9mQ29udGVudCwgbWluaW11bUNvbHVt
bkhlaWdodCk7CisgICAgICAgICAgICBtX292ZXJmbG93LmNsZWFyKCk7CisgICAgICAgICAgICBh
ZGRMYXlvdXRPdmVyZmxvdyhJbnRSZWN0KG92ZXJmbG93TGVmdCwgMCwgb3ZlcmZsb3dSaWdodCAt
IG92ZXJmbG93TGVmdCwgb3ZlcmZsb3dIZWlnaHQpKTsKKyAgICAgICAgfQogICAgIH0KLQotICAg
IGludCBvdmVyZmxvd1JpZ2h0ID0gbWF4KHdpZHRoKCksIGN1cnJYIC0gY29sR2FwKTsKLSAgICBp
bnQgb3ZlcmZsb3dMZWZ0ID0gbWluKDAsIGN1cnJYICsgZGVzaXJlZENvbHVtbldpZHRoICsgY29s
R2FwKTsKLSAgICBpbnQgb3ZlcmZsb3dIZWlnaHQgPSBtYXhDb2xCb3R0b207Ci0gICAgaW50IHRv
QWRkID0gYm9yZGVyQm90dG9tKCkgKyBwYWRkaW5nQm90dG9tKCkgKyBob3Jpem9udGFsU2Nyb2xs
YmFySGVpZ2h0KCk7Ci0gICAgICAgIAotICAgIGlmIChjb21wdXRlSW50cmluc2ljSGVpZ2h0KQot
ICAgICAgICBzZXRIZWlnaHQobWF4Q29sQm90dG9tICsgdG9BZGQpOwotCi0gICAgbV9vdmVyZmxv
dy5jbGVhcigpOwotICAgIGFkZExheW91dE92ZXJmbG93KEludFJlY3Qob3ZlcmZsb3dMZWZ0LCAw
LCBvdmVyZmxvd1JpZ2h0IC0gb3ZlcmZsb3dMZWZ0LCBvdmVyZmxvd0hlaWdodCkpOwotCi0gICAg
di0+c2V0UHJpbnRSZWN0KEludFJlY3QoKSk7Ci0gICAgdi0+c2V0VHJ1bmNhdGVkQXQoMCk7Ci0g
ICAgCi0gICAgQVNTRVJUKGNvbENvdW50ID09IGluZm8tPmNvbHVtbkNvdW50KCkpOwogICAgIAot
ICAgIHJldHVybiBjb250ZW50Qm90dG9tOworICAgIHJldHVybiBmYWxzZTsKIH0KIAogdm9pZCBS
ZW5kZXJCbG9jazo6YWRqdXN0UG9pbnRUb0NvbHVtbkNvbnRlbnRzKEludFBvaW50JiBwb2ludCkg
Y29uc3QKQEAgLTQzMzAsMTcgKzQ0NTYsMTcgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRqdXN0UG9p
bnRUb0NvbHVtbkNvbgogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgQ29sdW1uSW5mbyogY29s
SW5mbyA9IGNvbHVtbkluZm8oKTsKLSAgICBpZiAoIWNvbEluZm8tPmNvbHVtbkNvdW50KCkpCisg
ICAgaWYgKCFjb2x1bW5Db3VudChjb2xJbmZvKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8g
RGV0ZXJtaW5lIHdoaWNoIGNvbHVtbnMgd2UgaW50ZXJzZWN0LgogICAgIGludCBjb2xHYXAgPSBj
b2x1bW5HYXAoKTsKICAgICBpbnQgbGVmdEdhcCA9IGNvbEdhcCAvIDI7Ci0gICAgSW50UG9pbnQg
Y29sdW1uUG9pbnQoY29sSW5mby0+Y29sdW1uUmVjdEF0KDApLmxvY2F0aW9uKCkpOworICAgIElu
dFBvaW50IGNvbHVtblBvaW50KGNvbHVtblJlY3RBdChjb2xJbmZvLCAwKS5sb2NhdGlvbigpKTsK
ICAgICBpbnQgeU9mZnNldCA9IDA7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvbElu
Zm8tPmNvbHVtbkNvdW50KCk7IGkrKykgewogICAgICAgICAvLyBBZGQgaW4gaGFsZiB0aGUgY29s
dW1uIGdhcCB0byB0aGUgbGVmdCBhbmQgcmlnaHQgb2YgdGhlIHJlY3QuCi0gICAgICAgIEludFJl
Y3QgY29sUmVjdCA9IGNvbEluZm8tPmNvbHVtblJlY3RBdChpKTsKKyAgICAgICAgSW50UmVjdCBj
b2xSZWN0ID0gY29sdW1uUmVjdEF0KGNvbEluZm8sIGkpOwogICAgICAgICBJbnRSZWN0IGdhcEFu
ZENvbHVtblJlY3QoY29sUmVjdC54KCkgLSBsZWZ0R2FwLCBjb2xSZWN0LnkoKSwgY29sUmVjdC53
aWR0aCgpICsgY29sR2FwLCBjb2xSZWN0LmhlaWdodCgpKTsKIAogICAgICAgICBpZiAocG9pbnQu
eCgpID49IGdhcEFuZENvbHVtblJlY3QueCgpICYmIHBvaW50LngoKSA8IGdhcEFuZENvbHVtblJl
Y3QucmlnaHQoKSkgewpAQCAtNDM3OCw3ICs0NTA0LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRq
dXN0UmVjdEZvckNvbHVtbnMoSQogICAgIEludFJlY3QgcmVzdWx0OwogICAgIAogICAgIC8vIERl
dGVybWluZSB3aGljaCBjb2x1bW5zIHdlIGludGVyc2VjdC4KLSAgICB1bnNpZ25lZCBjb2xDb3Vu
dCA9IGNvbEluZm8tPmNvbHVtbkNvdW50KCk7CisgICAgdW5zaWduZWQgY29sQ291bnQgPSBjb2x1
bW5Db3VudChjb2xJbmZvKTsKICAgICBpZiAoIWNvbENvdW50KQogICAgICAgICByZXR1cm47CiAg
ICAgCkBAIC00Mzg2LDcgKzQ1MTIsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGp1c3RSZWN0Rm9y
Q29sdW1ucyhJCiAgICAgCiAgICAgaW50IGN1cnJZT2Zmc2V0ID0gMDsKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgY29sQ291bnQ7IGkrKykgewotICAgICAgICBJbnRSZWN0IGNvbFJlY3Qg
PSBjb2xJbmZvLT5jb2x1bW5SZWN0QXQoaSk7CisgICAgICAgIEludFJlY3QgY29sUmVjdCA9IGNv
bHVtblJlY3RBdChjb2xJbmZvLCBpKTsKICAgICAgICAgaW50IGN1cnJYT2Zmc2V0ID0gY29sUmVj
dC54KCkgLSBsZWZ0OwogICAgICAgICAKICAgICAgICAgSW50UmVjdCByZXBhaW50UmVjdCA9IHI7
CkBAIC00NDEyLDkgKzQ1MzgsOSBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGp1c3RGb3JDb2x1bW5z
KEludFNpCiAKICAgICBpbnQgbGVmdCA9IGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCk7CiAg
ICAgaW50IHlPZmZzZXQgPSAwOwotICAgIHNpemVfdCBjb2x1bW5Db3VudCA9IGNvbEluZm8tPmNv
bHVtbkNvdW50KCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb2x1bW5Db3VudDsgKytp
KSB7Ci0gICAgICAgIEludFJlY3QgY29sdW1uUmVjdCA9IGNvbEluZm8tPmNvbHVtblJlY3RBdChp
KTsKKyAgICBzaXplX3QgY29sQ291bnQgPSBjb2x1bW5Db3VudChjb2xJbmZvKTsKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGNvbENvdW50OyArK2kpIHsKKyAgICAgICAgSW50UmVjdCBjb2x1
bW5SZWN0ID0gY29sdW1uUmVjdEF0KGNvbEluZm8sIGkpOwogICAgICAgICBpbnQgeE9mZnNldCA9
IGNvbHVtblJlY3QueCgpIC0gbGVmdDsKICAgICAgICAgaWYgKHBvaW50LnkoKSA8IGNvbHVtblJl
Y3QuYm90dG9tKCkgKyB5T2Zmc2V0KSB7CiAgICAgICAgICAgICBvZmZzZXQuZXhwYW5kKHhPZmZz
ZXQsIC15T2Zmc2V0KTsKQEAgLTUzOTIsMjQgKzU1MTgsNDQgQEAgdm9pZCBSZW5kZXJCbG9jazo6
Y2xlYXJUcnVuY2F0aW9uKCkKIAogdm9pZCBSZW5kZXJCbG9jazo6c2V0TWF4VG9wTWFyZ2lucyhp
bnQgcG9zLCBpbnQgbmVnKQogewotICAgIGlmICghbV9tYXhNYXJnaW4pIHsKLSAgICAgICAgaWYg
KHBvcyA9PSBNYXhNYXJnaW46OnRvcFBvc0RlZmF1bHQodGhpcykgJiYgbmVnID09IE1heE1hcmdp
bjo6dG9wTmVnRGVmYXVsdCh0aGlzKSkKKyAgICBpZiAoIW1fcmFyZURhdGEpIHsKKyAgICAgICAg
aWYgKHBvcyA9PSBSZW5kZXJCbG9ja1JhcmVEYXRhOjp0b3BQb3NEZWZhdWx0KHRoaXMpICYmIG5l
ZyA9PSBSZW5kZXJCbG9ja1JhcmVEYXRhOjp0b3BOZWdEZWZhdWx0KHRoaXMpKQogICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICBtX21heE1hcmdpbiA9IG5ldyBNYXhNYXJnaW4odGhpcyk7Cisg
ICAgICAgIG1fcmFyZURhdGEgPSBuZXcgUmVuZGVyQmxvY2tSYXJlRGF0YSh0aGlzKTsKICAgICB9
Ci0gICAgbV9tYXhNYXJnaW4tPm1fdG9wUG9zID0gcG9zOwotICAgIG1fbWF4TWFyZ2luLT5tX3Rv
cE5lZyA9IG5lZzsKKyAgICBtX3JhcmVEYXRhLT5tX3RvcFBvcyA9IHBvczsKKyAgICBtX3JhcmVE
YXRhLT5tX3RvcE5lZyA9IG5lZzsKIH0KIAogdm9pZCBSZW5kZXJCbG9jazo6c2V0TWF4Qm90dG9t
TWFyZ2lucyhpbnQgcG9zLCBpbnQgbmVnKQogewotICAgIGlmICghbV9tYXhNYXJnaW4pIHsKLSAg
ICAgICAgaWYgKHBvcyA9PSBNYXhNYXJnaW46OmJvdHRvbVBvc0RlZmF1bHQodGhpcykgJiYgbmVn
ID09IE1heE1hcmdpbjo6Ym90dG9tTmVnRGVmYXVsdCh0aGlzKSkKKyAgICBpZiAoIW1fcmFyZURh
dGEpIHsKKyAgICAgICAgaWYgKHBvcyA9PSBSZW5kZXJCbG9ja1JhcmVEYXRhOjpib3R0b21Qb3NE
ZWZhdWx0KHRoaXMpICYmIG5lZyA9PSBSZW5kZXJCbG9ja1JhcmVEYXRhOjpib3R0b21OZWdEZWZh
dWx0KHRoaXMpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX21heE1hcmdpbiA9IG5l
dyBNYXhNYXJnaW4odGhpcyk7CisgICAgICAgIG1fcmFyZURhdGEgPSBuZXcgUmVuZGVyQmxvY2tS
YXJlRGF0YSh0aGlzKTsKICAgICB9Ci0gICAgbV9tYXhNYXJnaW4tPm1fYm90dG9tUG9zID0gcG9z
OwotICAgIG1fbWF4TWFyZ2luLT5tX2JvdHRvbU5lZyA9IG5lZzsKKyAgICBtX3JhcmVEYXRhLT5t
X2JvdHRvbVBvcyA9IHBvczsKKyAgICBtX3JhcmVEYXRhLT5tX2JvdHRvbU5lZyA9IG5lZzsKK30K
Kwordm9pZCBSZW5kZXJCbG9jazo6c2V0UGFnaW5hdGlvblN0cnV0KGludCBzdHJ1dCkKK3sKKyAg
ICBpZiAoIW1fcmFyZURhdGEpIHsKKyAgICAgICAgaWYgKHN0cnV0ID09IDApCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIG1fcmFyZURhdGEgPSBuZXcgUmVuZGVyQmxvY2tSYXJlRGF0YSh0
aGlzKTsKKyAgICB9CisgICAgbV9yYXJlRGF0YS0+bV9wYWdpbmF0aW9uU3RydXQgPSBzdHJ1dDsK
K30KKwordm9pZCBSZW5kZXJCbG9jazo6c2V0UGFnZVkoaW50IHkpCit7CisgICAgaWYgKCFtX3Jh
cmVEYXRhKSB7CisgICAgICAgIGlmICh5ID09IDApCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIG1fcmFyZURhdGEgPSBuZXcgUmVuZGVyQmxvY2tSYXJlRGF0YSh0aGlzKTsKKyAgICB9Cisg
ICAgbV9yYXJlRGF0YS0+bV9wYWdlWSA9IHk7CiB9CiAKIHZvaWQgUmVuZGVyQmxvY2s6OmFic29s
dXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgaW50IHR4LCBpbnQgdHkpCkBAIC01Njcw
LDYgKzU4MTYsOTggQEAgUmVuZGVyQmxvY2sqIFJlbmRlckJsb2NrOjpjcmVhdGVBbm9ueW1vdQog
ICAgIHJldHVybiBuZXdCb3g7CiB9CiAKK2ludCBSZW5kZXJCbG9jazo6bmV4dFBhZ2VUb3AoaW50
IHlQb3MpIGNvbnN0Cit7CisgICAgTGF5b3V0U3RhdGUqIGxheW91dFN0YXRlID0gdmlldygpLT5s
YXlvdXRTdGF0ZSgpOworICAgIGlmICghbGF5b3V0U3RhdGUtPm1fcGFnZUhlaWdodCkKKyAgICAg
ICAgcmV0dXJuIHlQb3M7CisgICAgCisgICAgLy8gVGhlIHlQb3MgaXMgaW4gb3VyIGNvb3JkaW5h
dGUgc3BhY2UuICBXZSBjYW4gYWRkIGluIG91ciBwdXNoZWQgb2Zmc2V0LgorICAgIGludCBwYWdl
SGVpZ2h0ID0gbGF5b3V0U3RhdGUtPm1fcGFnZUhlaWdodDsKKyAgICBpbnQgcmVtYWluaW5nSGVp
Z2h0ID0gcGFnZUhlaWdodCAtICgobGF5b3V0U3RhdGUtPm1fbGF5b3V0T2Zmc2V0IC0gbGF5b3V0
U3RhdGUtPm1fcGFnZU9mZnNldCkuaGVpZ2h0KCkgKyB5UG9zKSAlIHBhZ2VIZWlnaHQ7CisgICAg
cmV0dXJuIHlQb3MgKyByZW1haW5pbmdIZWlnaHQ7Cit9CisKK2ludCBSZW5kZXJCbG9jazo6YXBw
bHlCZWZvcmVCcmVhayhSZW5kZXJCb3gqIGNoaWxkLCBpbnQgeVBvcykKK3sKKyAgICBib29sIGNo
ZWNrUGFnZUJyZWFrcyA9IGRvY3VtZW50KCktPnBhZ2luYXRlZCgpICYmIGRvY3VtZW50KCktPnNl
dHRpbmdzKCktPnBhZ2luYXRlRHVyaW5nTGF5b3V0RW5hYmxlZCgpOworICAgIGJvb2wgY2hlY2tD
b2x1bW5CcmVha3MgPSB2aWV3KCktPmxheW91dFN0YXRlKCktPnBhZ2luYXRpbmdDb2x1bW5zKCk7
CisgICAgYm9vbCBjaGVja0JlZm9yZUFsd2F5cyA9IChjaGVja1BhZ2VCcmVha3MgJiYgY2hpbGQt
PnN0eWxlKCktPnBhZ2VCcmVha0JlZm9yZSgpID09IFBCQUxXQVlTKSB8fCAoY2hlY2tDb2x1bW5C
cmVha3MgJiYgY2hpbGQtPnN0eWxlKCktPmNvbHVtbkJyZWFrQmVmb3JlKCkgPT0gUEJBTFdBWVMp
OworICAgIGlmIChjaGVja0JlZm9yZUFsd2F5cykKKyAgICAgICAgcmV0dXJuIG5leHRQYWdlVG9w
KHlQb3MpOworICAgIHJldHVybiB5UG9zOworfQorCitpbnQgUmVuZGVyQmxvY2s6OmFwcGx5QWZ0
ZXJCcmVhayhSZW5kZXJCb3gqIGNoaWxkLCBpbnQgeVBvcywgTWFyZ2luSW5mbyYgbWFyZ2luSW5m
bykKK3sKKyAgICBib29sIGNoZWNrUGFnZUJyZWFrcyA9IGRvY3VtZW50KCktPnBhZ2luYXRlZCgp
ICYmIGRvY3VtZW50KCktPnNldHRpbmdzKCktPnBhZ2luYXRlRHVyaW5nTGF5b3V0RW5hYmxlZCgp
OworICAgIGJvb2wgY2hlY2tDb2x1bW5CcmVha3MgPSB2aWV3KCktPmxheW91dFN0YXRlKCktPnBh
Z2luYXRpbmdDb2x1bW5zKCk7CisgICAgYm9vbCBjaGVja0FmdGVyQWx3YXlzID0gKGNoZWNrUGFn
ZUJyZWFrcyAmJiBjaGlsZC0+c3R5bGUoKS0+cGFnZUJyZWFrQWZ0ZXIoKSA9PSBQQkFMV0FZUykg
fHwgKGNoZWNrQ29sdW1uQnJlYWtzICYmIGNoaWxkLT5zdHlsZSgpLT5jb2x1bW5CcmVha0FmdGVy
KCkgPT0gUEJBTFdBWVMpOworICAgIGlmIChjaGVja0FmdGVyQWx3YXlzKSB7CisgICAgICAgIG1h
cmdpbkluZm8uc2V0Qm90dG9tUXVpcmsodHJ1ZSk7IC8vIENhdXNlIG1hcmdpbnMgdG8gYmUgZGlz
Y2FyZGVkIGZvciBhbnkgZm9sbG93aW5nIGNvbnRlbnQuCisgICAgICAgIHJldHVybiBuZXh0UGFn
ZVRvcCh5UG9zKTsKKyAgICB9CisgICAgcmV0dXJuIHlQb3M7Cit9CisKK2ludCBSZW5kZXJCbG9j
azo6YWRqdXN0Rm9yVW5zcGxpdHRhYmxlQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCwgaW50IHlQb3Ms
IGJvb2wgaW5jbHVkZU1hcmdpbnMpCit7CisgICAgYm9vbCBpc1Vuc3BsaXR0YWJsZSA9IGNoaWxk
LT5pc1JlcGxhY2VkKCkgfHwgY2hpbGQtPnNjcm9sbHNPdmVyZmxvdygpOworICAgIGlmICghaXNV
bnNwbGl0dGFibGUpCisgICAgICAgIHJldHVybiB5UG9zOworICAgIGludCBjaGlsZEhlaWdodCA9
IGNoaWxkLT5oZWlnaHQoKSArIChpbmNsdWRlTWFyZ2lucyA/IGNoaWxkLT5tYXJnaW5Ub3AoKSAr
IGNoaWxkLT5tYXJnaW5Cb3R0b20oKSA6IDApOworICAgIExheW91dFN0YXRlKiBsYXlvdXRTdGF0
ZSA9IHZpZXcoKS0+bGF5b3V0U3RhdGUoKTsKKyAgICBpZiAobGF5b3V0U3RhdGUtPm1fY29sdW1u
SW5mbykKKyAgICAgICAgbGF5b3V0U3RhdGUtPm1fY29sdW1uSW5mby0+dXBkYXRlTWluaW11bUNv
bHVtbkhlaWdodChjaGlsZEhlaWdodCk7CisgICAgaW50IHBhZ2VIZWlnaHQgPSBsYXlvdXRTdGF0
ZS0+bV9wYWdlSGVpZ2h0OworICAgIGlmICghcGFnZUhlaWdodCB8fCBjaGlsZEhlaWdodCA+IHBh
Z2VIZWlnaHQpCisgICAgICAgIHJldHVybiB5UG9zOworICAgIGludCByZW1haW5pbmdIZWlnaHQg
PSBwYWdlSGVpZ2h0IC0gKChsYXlvdXRTdGF0ZS0+bV9sYXlvdXRPZmZzZXQgLSBsYXlvdXRTdGF0
ZS0+bV9wYWdlT2Zmc2V0KS5oZWlnaHQoKSArIHlQb3MpICUgcGFnZUhlaWdodDsKKyAgICBpZiAo
cmVtYWluaW5nSGVpZ2h0IDwgY2hpbGRIZWlnaHQpCisgICAgICAgIHJldHVybiB5UG9zICsgcmVt
YWluaW5nSGVpZ2h0OworICAgIHJldHVybiB5UG9zOworfQorCit2b2lkIFJlbmRlckJsb2NrOjph
ZGp1c3RMaW5lUG9zaXRpb25Gb3JQYWdpbmF0aW9uKFJvb3RJbmxpbmVCb3gqIGxpbmVCb3gsIGlu
dCYgZGVsdGEpCit7CisgICAgLy8gRklYTUU6IEZvciBub3cgd2UgcGFnaW5hdGUgdXNpbmcgbGlu
ZSBvdmVyZmxvdy4gIFRoaXMgZW5zdXJlcyB0aGF0IGxpbmVzIGRvbid0IG92ZXJsYXAgYXQgYWxs
IHdoZW4gd2UKKyAgICAvLyBwdXQgYSBzdHJ1dCBiZXR3ZWVuIHRoZW0gZm9yIHBhZ2luYXRpb24g
cHVycG9zZXMuICBIb3dldmVyLCB0aGlzIHJlYWxseSBpc24ndCB0aGUgZGVzaXJlZCByZW5kZXJp
bmcsIHNpbmNlCisgICAgLy8gdGhlIGxpbmUgb24gdGhlIHRvcCBvZiB0aGUgbmV4dCBwYWdlIHdp
bGwgYXBwZWFyIHRvbyBmYXIgZG93biByZWxhdGl2ZSB0byB0aGUgc2FtZSBraW5kIG9mIGxpbmUg
YXQgdGhlIHRvcAorICAgIC8vIG9mIHRoZSBmaXJzdCBjb2x1bW4uCisgICAgLy8KKyAgICAvLyBU
aGUgcmVuZGVyaW5nIHdlIHdvdWxkIGxpa2UgdG8gc2VlIGlzIG9uZSB3aGVyZSB0aGUgbGluZVRv
cCBpcyBhdCB0aGUgdG9wIG9mIHRoZSBjb2x1bW4sIGFuZCBhbnkgbGluZSBvdmVyZmxvdworICAg
IC8vIHNpbXBseSBzcGlsbHMgb3V0IGFib3ZlIHRoZSB0b3Agb2YgdGhlIGNvbHVtbi4gIFRoaXMg
ZWZmZWN0IHdvdWxkIG1hdGNoIHdoYXQgaGFwcGVucyBhdCB0aGUgdG9wIG9mIHRoZSBmaXJzdCBj
b2x1bW4uCisgICAgLy8gV2UgY2FuJ3QgYWNoaWV2ZSB0aGlzIHJlbmRlcmluZywgaG93ZXZlciwg
dW50aWwgd2Ugc3RvcCBjb2x1bW5zIGZyb20gY2xpcHBpbmcgdG8gdGhlIGNvbHVtbiBib3VuZHMg
KHRodXMgYWxsb3dpbmcKKyAgICAvLyBmb3Igb3ZlcmZsb3cgdG8gb2NjdXIpLCBhbmQgdGhlbiBj
YWNoZSB2aXNpYmxlIG92ZXJmbG93IGZvciBlYWNoIGNvbHVtbiByZWN0LgorICAgIC8vCisgICAg
Ly8gRnVydGhlcm1vcmUsIHRoZSBwYWludCB3ZSBoYXZlIHRvIGRvIHdoZW4gYSBjb2x1bW4gaGFz
IG92ZXJmbG93IGhhcyB0byBiZSBzcGVjaWFsLiAgV2UgbmVlZCB0byBleGNsdWRlCisgICAgLy8g
Y29udGVudCB0aGF0IHBhaW50cyBpbiBhIHByZXZpb3VzIGNvbHVtbiAoYW5kIGNvbnRlbnQgdGhh
dCBwYWludHMgaW4gdGhlIGZvbGxvd2luZyBjb2x1bW4pLgorICAgIC8vCisgICAgLy8gRklYTUU6
IEFub3RoZXIgcHJvYmxlbSB3aXRoIHNpbXBseSBtb3ZpbmcgbGluZXMgaXMgdGhhdCB0aGUgYXZh
aWxhYmxlIGxpbmUgd2lkdGggbWF5IGNoYW5nZSAoYmVjYXVzZSBvZiBmbG9hdHMpLgorICAgIC8v
IFRlY2huaWNhbGx5IGlmIHRoZSBsb2NhdGlvbiB3ZSBtb3ZlIHRoZSBsaW5lIHRvIGhhcyBhIGRp
ZmZlcmVudCBsaW5lIHdpZHRoIHRoYW4gb3VyIG9sZCBwb3NpdGlvbiwgdGhlbiB3ZSBuZWVkIHRv
IGRpcnR5IHRoZQorICAgIC8vIGxpbmUgYW5kIGFsbCBmb2xsb3dpbmcgbGluZXMuCisgICAgTGF5
b3V0U3RhdGUqIGxheW91dFN0YXRlID0gdmlldygpLT5sYXlvdXRTdGF0ZSgpOworICAgIGludCBw
YWdlSGVpZ2h0ID0gbGF5b3V0U3RhdGUtPm1fcGFnZUhlaWdodDsKKyAgICBpbnQgeVBvcyA9IGxp
bmVCb3gtPnRvcFZpc2libGVPdmVyZmxvdygpOworICAgIGludCBsaW5lSGVpZ2h0ID0gbGluZUJv
eC0+Ym90dG9tVmlzaWJsZU92ZXJmbG93KCkgLSB5UG9zOworICAgIGlmIChsYXlvdXRTdGF0ZS0+
bV9jb2x1bW5JbmZvKQorICAgICAgICBsYXlvdXRTdGF0ZS0+bV9jb2x1bW5JbmZvLT51cGRhdGVN
aW5pbXVtQ29sdW1uSGVpZ2h0KGxpbmVIZWlnaHQpOworICAgIHlQb3MgKz0gZGVsdGE7CisgICAg
bGluZUJveC0+c2V0UGFnaW5hdGlvblN0cnV0KDApOworICAgIGlmICghcGFnZUhlaWdodCB8fCBs
aW5lSGVpZ2h0ID4gcGFnZUhlaWdodCkKKyAgICAgICAgcmV0dXJuOworICAgIGludCByZW1haW5p
bmdIZWlnaHQgPSBwYWdlSGVpZ2h0IC0gKChsYXlvdXRTdGF0ZS0+bV9sYXlvdXRPZmZzZXQgLSBs
YXlvdXRTdGF0ZS0+bV9wYWdlT2Zmc2V0KS5oZWlnaHQoKSArIHlQb3MpICUgcGFnZUhlaWdodDsK
KyAgICBpZiAocmVtYWluaW5nSGVpZ2h0IDwgbGluZUhlaWdodCkgeworICAgICAgICBpbnQgdG90
YWxIZWlnaHQgPSBsaW5lSGVpZ2h0ICsgbWF4KDAsIHlQb3MpOworICAgICAgICBpZiAobGluZUJv
eCA9PSBmaXJzdFJvb3RCb3goKSAmJiB0b3RhbEhlaWdodCA8IHBhZ2VIZWlnaHQgJiYgIWlzUG9z
aXRpb25lZCgpICYmICFpc1RhYmxlQ2VsbCgpKQorICAgICAgICAgICAgc2V0UGFnaW5hdGlvblN0
cnV0KHJlbWFpbmluZ0hlaWdodCArIG1heCgwLCB5UG9zKSk7CisgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgZGVsdGEgKz0gcmVtYWluaW5nSGVpZ2h0OworICAgICAgICAgICAgbGluZUJveC0+
c2V0UGFnaW5hdGlvblN0cnV0KHJlbWFpbmluZ0hlaWdodCk7CisgICAgICAgIH0KKyAgICB9ICAK
K30KKyAKIGNvbnN0IGNoYXIqIFJlbmRlckJsb2NrOjpyZW5kZXJOYW1lKCkgY29uc3QKIHsKICAg
ICBpZiAoaXNCb2R5KCkpCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHJldmlzaW9uIDY2
OTAzKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAkod29ya2luZyBjb3B5KQpA
QCAtMzQsNiArMzQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENvbHVtbkluZm87
CiBjbGFzcyBJbmxpbmVJdGVyYXRvcjsKK2NsYXNzIExheW91dFN0YXRlTWFpbnRhaW5lcjsKIGNs
YXNzIFJlbmRlcklubGluZTsKIAogc3RydWN0IEJpZGlSdW47CkBAIC03MCw3ICs3MSw3IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwg
UmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IDApOwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVD
aGlsZChSZW5kZXJPYmplY3QqKTsKIAotICAgIHZpcnR1YWwgdm9pZCBsYXlvdXRCbG9jayhib29s
IHJlbGF5b3V0Q2hpbGRyZW4pOworICAgIHZpcnR1YWwgdm9pZCBsYXlvdXRCbG9jayhib29sIHJl
bGF5b3V0Q2hpbGRyZW4sIGludCBwYWdlSGVpZ2h0ID0gMCk7CiAKICAgICB2b2lkIGluc2VydFBv
c2l0aW9uZWRPYmplY3QoUmVuZGVyQm94Kik7CiAgICAgdm9pZCByZW1vdmVQb3NpdGlvbmVkT2Jq
ZWN0KFJlbmRlckJveCopOwpAQCAtODksNiArOTAsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIG1h
cmtBbGxEZXNjZW5kYW50c1dpdGhGbG9hdHNGb3JMYXlvdXQoUmVuZGVyQm94KiBmbG9hdFRvUmVt
b3ZlID0gMCwgYm9vbCBpbkxheW91dCA9IHRydWUpOwogICAgIHZvaWQgbWFya1Bvc2l0aW9uZWRP
YmplY3RzRm9yTGF5b3V0KCk7CisgICAgdm9pZCBtYXJrRGVzY2VuZGFudEJsb2Nrc0FuZExpbmVz
Rm9yTGF5b3V0KGJvb2wgaW5MYXlvdXQgPSB0cnVlKTsKIAogICAgIGJvb2wgY29udGFpbnNGbG9h
dHMoKSB7IHJldHVybiBtX2Zsb2F0aW5nT2JqZWN0cyAmJiAhbV9mbG9hdGluZ09iamVjdHMtPmlz
RW1wdHkoKTsgfQogICAgIGJvb2wgY29udGFpbnNGbG9hdChSZW5kZXJPYmplY3QqKTsKQEAgLTE1
MSw2ICsxNTMsMTAgQEAgcHVibGljOgogCiAgICAgQ29sdW1uSW5mbyogY29sdW1uSW5mbygpIGNv
bnN0OwogICAgIGludCBjb2x1bW5HYXAoKSBjb25zdDsKKyAgICAKKyAgICAvLyBUaGVzZSB0d28g
ZnVuY3Rpb25zIHRha2UgdGhlIENvbHVtbkluZm8qIHRvIGF2b2lkIHJlcGVhdGVkIGxvb2t1cHMg
b2YgdGhlIGluZm8gaW4gdGhlIGdsb2JhbCBIYXNoTWFwLgorICAgIHVuc2lnbmVkIGNvbHVtbkNv
dW50KENvbHVtbkluZm8qKSBjb25zdDsKKyAgICBJbnRSZWN0IGNvbHVtblJlY3RBdChDb2x1bW5J
bmZvKiwgdW5zaWduZWQpIGNvbnN0OwogCiBwcm90ZWN0ZWQ6CiAgICAgLy8gVGhlc2UgZnVuY3Rp
b25zIGFyZSBvbmx5IHVzZWQgaW50ZXJuYWxseSB0byBtYW5pcHVsYXRlIHRoZSByZW5kZXIgdHJl
ZSBzdHJ1Y3R1cmUgdmlhIHJlbW92ZS9pbnNlcnQvYXBwZW5kQ2hpbGROb2RlLgpAQCAtMTc3LDIw
ICsxODMsMjUgQEAgcHJvdGVjdGVkOgogICAgIH0KICAgICB2b2lkIG1vdmVDaGlsZHJlblRvKFJl
bmRlckJsb2NrKiB0bywgUmVuZGVyT2JqZWN0KiBzdGFydENoaWxkLCBSZW5kZXJPYmplY3QqIGVu
ZENoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkLCBib29sIGZ1bGxSZW1vdmVJbnNlcnQg
PSBmYWxzZSk7CiAgICAgCi0gICAgaW50IG1heFRvcFBvc01hcmdpbigpIGNvbnN0IHsgcmV0dXJu
IG1fbWF4TWFyZ2luID8gbV9tYXhNYXJnaW4tPm1fdG9wUG9zIDogTWF4TWFyZ2luOjp0b3BQb3NE
ZWZhdWx0KHRoaXMpOyB9Ci0gICAgaW50IG1heFRvcE5lZ01hcmdpbigpIGNvbnN0IHsgcmV0dXJu
IG1fbWF4TWFyZ2luID8gbV9tYXhNYXJnaW4tPm1fdG9wTmVnIDogTWF4TWFyZ2luOjp0b3BOZWdE
ZWZhdWx0KHRoaXMpOyB9Ci0gICAgaW50IG1heEJvdHRvbVBvc01hcmdpbigpIGNvbnN0IHsgcmV0
dXJuIG1fbWF4TWFyZ2luID8gbV9tYXhNYXJnaW4tPm1fYm90dG9tUG9zIDogTWF4TWFyZ2luOjpi
b3R0b21Qb3NEZWZhdWx0KHRoaXMpOyB9Ci0gICAgaW50IG1heEJvdHRvbU5lZ01hcmdpbigpIGNv
bnN0IHsgcmV0dXJuIG1fbWF4TWFyZ2luID8gbV9tYXhNYXJnaW4tPm1fYm90dG9tTmVnIDogTWF4
TWFyZ2luOjpib3R0b21OZWdEZWZhdWx0KHRoaXMpOyB9CisgICAgaW50IG1heFRvcFBvc01hcmdp
bigpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVEYXRhLT5tX3RvcFBvcyA6IFJl
bmRlckJsb2NrUmFyZURhdGE6OnRvcFBvc0RlZmF1bHQodGhpcyk7IH0KKyAgICBpbnQgbWF4VG9w
TmVnTWFyZ2luKCkgY29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1fdG9w
TmVnIDogUmVuZGVyQmxvY2tSYXJlRGF0YTo6dG9wTmVnRGVmYXVsdCh0aGlzKTsgfQorICAgIGlu
dCBtYXhCb3R0b21Qb3NNYXJnaW4oKSBjb25zdCB7IHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJl
RGF0YS0+bV9ib3R0b21Qb3MgOiBSZW5kZXJCbG9ja1JhcmVEYXRhOjpib3R0b21Qb3NEZWZhdWx0
KHRoaXMpOyB9CisgICAgaW50IG1heEJvdHRvbU5lZ01hcmdpbigpIGNvbnN0IHsgcmV0dXJuIG1f
cmFyZURhdGEgPyBtX3JhcmVEYXRhLT5tX2JvdHRvbU5lZyA6IFJlbmRlckJsb2NrUmFyZURhdGE6
OmJvdHRvbU5lZ0RlZmF1bHQodGhpcyk7IH0KKyAgICBpbnQgcGFnaW5hdGlvblN0cnV0KCkgY29u
c3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1fcGFnaW5hdGlvblN0cnV0IDog
MDsgfQorICAgIGludCBwYWdlWSgpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVE
YXRhLT5tX3BhZ2VZIDogMDsgfQogICAgIHZvaWQgc2V0TWF4VG9wTWFyZ2lucyhpbnQgcG9zLCBp
bnQgbmVnKTsKICAgICB2b2lkIHNldE1heEJvdHRvbU1hcmdpbnMoaW50IHBvcywgaW50IG5lZyk7
Ci0gICAgCisgICAgdm9pZCBzZXRQYWdpbmF0aW9uU3RydXQoaW50IHN0cnV0KTsKKyAgICB2b2lk
IHNldFBhZ2VZKGludCB5KTsKKwogICAgIHZvaWQgaW5pdE1heE1hcmdpblZhbHVlcygpCiAgICAg
ewotICAgICAgICBpZiAobV9tYXhNYXJnaW4pIHsKLSAgICAgICAgICAgIG1fbWF4TWFyZ2luLT5t
X3RvcFBvcyA9IE1heE1hcmdpbjo6dG9wUG9zRGVmYXVsdCh0aGlzKTsKLSAgICAgICAgICAgIG1f
bWF4TWFyZ2luLT5tX3RvcE5lZyA9IE1heE1hcmdpbjo6dG9wTmVnRGVmYXVsdCh0aGlzKTsKLSAg
ICAgICAgICAgIG1fbWF4TWFyZ2luLT5tX2JvdHRvbVBvcyA9IE1heE1hcmdpbjo6Ym90dG9tUG9z
RGVmYXVsdCh0aGlzKTsKLSAgICAgICAgICAgIG1fbWF4TWFyZ2luLT5tX2JvdHRvbU5lZyA9IE1h
eE1hcmdpbjo6Ym90dG9tTmVnRGVmYXVsdCh0aGlzKTsKKyAgICAgICAgaWYgKG1fcmFyZURhdGEp
IHsKKyAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fdG9wUG9zID0gUmVuZGVyQmxvY2tSYXJlRGF0
YTo6dG9wUG9zRGVmYXVsdCh0aGlzKTsKKyAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fdG9wTmVn
ID0gUmVuZGVyQmxvY2tSYXJlRGF0YTo6dG9wTmVnRGVmYXVsdCh0aGlzKTsKKyAgICAgICAgICAg
IG1fcmFyZURhdGEtPm1fYm90dG9tUG9zID0gUmVuZGVyQmxvY2tSYXJlRGF0YTo6Ym90dG9tUG9z
RGVmYXVsdCh0aGlzKTsKKyAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fYm90dG9tTmVnID0gUmVu
ZGVyQmxvY2tSYXJlRGF0YTo6Ym90dG9tTmVnRGVmYXVsdCh0aGlzKTsKKyAgICAgICAgICAgIG1f
cmFyZURhdGEtPm1fcGFnaW5hdGlvblN0cnV0ID0gMDsKICAgICAgICAgfQogICAgIH0KIApAQCAt
Mjk1LDkgKzMwNiw0MiBAQCBwcml2YXRlOgogICAgICAgICBib29sIGV2ZXJIYWRMYXlvdXQ7CiAg
ICAgfTsKIAorICAgIHN0cnVjdCBGbG9hdGluZ09iamVjdCA6IE5vbmNvcHlhYmxlIHsKKyAgICAg
ICAgZW51bSBUeXBlIHsKKyAgICAgICAgICAgIEZsb2F0TGVmdCwKKyAgICAgICAgICAgIEZsb2F0
UmlnaHQKKyAgICAgICAgfTsKKworICAgICAgICBGbG9hdGluZ09iamVjdChUeXBlIHR5cGUpCisg
ICAgICAgICAgICA6IG1fcmVuZGVyZXIoMCkKKyAgICAgICAgICAgICwgbV90b3AoMCkKKyAgICAg
ICAgICAgICwgbV9ib3R0b20oMCkKKyAgICAgICAgICAgICwgbV9sZWZ0KDApCisgICAgICAgICAg
ICAsIG1fd2lkdGgoMCkKKyAgICAgICAgICAgICwgbV9wYWdpbmF0aW9uU3RydXQoMCkKKyAgICAg
ICAgICAgICwgbV90eXBlKHR5cGUpCisgICAgICAgICAgICAsIG1fc2hvdWxkUGFpbnQodHJ1ZSkK
KyAgICAgICAgICAgICwgbV9pc0Rlc2NlbmRhbnQoZmFsc2UpCisgICAgICAgIHsKKyAgICAgICAg
fQorCisgICAgICAgIFR5cGUgdHlwZSgpIHsgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGU+KG1fdHlw
ZSk7IH0KKworICAgICAgICBSZW5kZXJCb3gqIG1fcmVuZGVyZXI7CisgICAgICAgIGludCBtX3Rv
cDsKKyAgICAgICAgaW50IG1fYm90dG9tOworICAgICAgICBpbnQgbV9sZWZ0OworICAgICAgICBp
bnQgbV93aWR0aDsKKyAgICAgICAgaW50IG1fcGFnaW5hdGlvblN0cnV0OworICAgICAgICB1bnNp
Z25lZCBtX3R5cGUgOiAxOyAvLyBUeXBlIChsZWZ0IG9yIHJpZ2h0IGFsaWduZWQpCisgICAgICAg
IGJvb2wgbV9zaG91bGRQYWludCA6IDE7CisgICAgICAgIGJvb2wgbV9pc0Rlc2NlbmRhbnQgOiAx
OworICAgIH07CisKICAgICAvLyBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucycgaW1wbGVtZW50YXRp
b25zIGFyZSBpbiBSZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwLgogICAgIFJvb3RJbmxpbmVCb3gq
IGRldGVybWluZVN0YXJ0UG9zaXRpb24oYm9vbCYgZmlyc3RMaW5lLCBib29sJiBmdWxsTGF5b3V0
LCBib29sJiBwcmV2aW91c0xpbmVCcm9rZUNsZWFubHksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBJbmxpbmVCaWRpUmVzb2x2ZXImLCBWZWN0b3I8RmxvYXRXaXRo
UmVjdD4mIGZsb2F0cywgdW5zaWduZWQmIG51bUNsZWFuRmxvYXRzKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIElubGluZUJpZGlSZXNvbHZlciYsIFZlY3RvcjxG
bG9hdFdpdGhSZWN0PiYgZmxvYXRzLCB1bnNpZ25lZCYgbnVtQ2xlYW5GbG9hdHMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sJiB1c2VSZXBhaW50Qm91bmRz
LCBpbnQmIHJlcGFpbnRUb3AsIGludCYgcmVwYWludEJvdHRvbSk7CiAgICAgUm9vdElubGluZUJv
eCogZGV0ZXJtaW5lRW5kUG9zaXRpb24oUm9vdElubGluZUJveCogc3RhcnRCb3gsIElubGluZUl0
ZXJhdG9yJiBjbGVhbkxpbmVTdGFydCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBCaWRpU3RhdHVzJiBjbGVhbkxpbmVCaWRpU3RhdHVzLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCYgeVBvcyk7CkBAIC0zMDUsOSArMzQ5LDkgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgIFJvb3RJbmxpbmVCb3gqJiBlbmRMaW5l
LCBpbnQmIGVuZFlQb3MsIGludCYgcmVwYWludEJvdHRvbSwgaW50JiByZXBhaW50VG9wKTsKIAog
ICAgIHZvaWQgc2tpcFRyYWlsaW5nV2hpdGVzcGFjZShJbmxpbmVJdGVyYXRvciYsIGJvb2wgaXNM
aW5lRW1wdHksIGJvb2wgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5KTsKLSAgICBpbnQgc2tpcExl
YWRpbmdXaGl0ZXNwYWNlKElubGluZUJpZGlSZXNvbHZlciYsIGJvb2wgZmlyc3RMaW5lLCBib29s
IGlzTGluZUVtcHR5LCBib29sIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSk7CisgICAgaW50IHNr
aXBMZWFkaW5nV2hpdGVzcGFjZShJbmxpbmVCaWRpUmVzb2x2ZXImLCBib29sIGZpcnN0TGluZSwg
Ym9vbCBpc0xpbmVFbXB0eSwgYm9vbCBwcmV2aW91c0xpbmVCcm9rZUNsZWFubHksIEZsb2F0aW5n
T2JqZWN0KiBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lKTsKICAgICB2b2lkIGZpdEJlbG93Rmxv
YXRzKGludCB3aWR0aFRvRml0LCBib29sIGZpcnN0TGluZSwgaW50JiBhdmFpbGFibGVXaWR0aCk7
Ci0gICAgSW5saW5lSXRlcmF0b3IgZmluZE5leHRMaW5lQnJlYWsoSW5saW5lQmlkaVJlc29sdmVy
JiwgYm9vbCBmaXJzdExpbmUsIGJvb2wmIGlzTGluZUVtcHR5LCBib29sJiBwcmV2aW91c0xpbmVC
cm9rZUNsZWFubHksIGJvb2wmIGh5cGhlbmF0ZWQsIEVDbGVhciogPSAwKTsKKyAgICBJbmxpbmVJ
dGVyYXRvciBmaW5kTmV4dExpbmVCcmVhayhJbmxpbmVCaWRpUmVzb2x2ZXImLCBib29sIGZpcnN0
TGluZSwgYm9vbCYgaXNMaW5lRW1wdHksIGJvb2wmIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSwg
Ym9vbCYgaHlwaGVuYXRlZCwgRUNsZWFyKiwgRmxvYXRpbmdPYmplY3QqIGxhc3RGbG9hdEZyb21Q
cmV2aW91c0xpbmUpOwogICAgIFJvb3RJbmxpbmVCb3gqIGNvbnN0cnVjdExpbmUodW5zaWduZWQg
cnVuQ291bnQsIEJpZGlSdW4qIGZpcnN0UnVuLCBCaWRpUnVuKiBsYXN0UnVuLCBib29sIGZpcnN0
TGluZSwgYm9vbCBsYXN0TGluZSwgUmVuZGVyT2JqZWN0KiBlbmRPYmplY3QpOwogICAgIElubGlu
ZUZsb3dCb3gqIGNyZWF0ZUxpbmVCb3hlcyhSZW5kZXJPYmplY3QqLCBib29sIGZpcnN0TGluZSk7
CiAgICAgdm9pZCBjb21wdXRlSG9yaXpvbnRhbFBvc2l0aW9uc0ZvckxpbmUoUm9vdElubGluZUJv
eCosIGJvb2wgZmlyc3RMaW5lLCBCaWRpUnVuKiBmaXJzdFJ1biwgQmlkaVJ1biogdHJhaWxpbmdT
cGFjZVJ1biwgYm9vbCByZWFjaGVkRW5kLCBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01h
cCYpOwpAQCAtMzI5LDEyICszNzMsMTggQEAgcHJpdmF0ZToKICAgICB2b2lkIHBhaW50U2VsZWN0
aW9uKFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKICAgICB2b2lkIHBhaW50Q2FyZXQoUGFp
bnRJbmZvJiwgaW50IHR4LCBpbnQgdHksIENhcmV0VHlwZSk7CiAKLSAgICB2b2lkIGluc2VydEZs
b2F0aW5nT2JqZWN0KFJlbmRlckJveCopOworICAgIEZsb2F0aW5nT2JqZWN0KiBpbnNlcnRGbG9h
dGluZ09iamVjdChSZW5kZXJCb3gqKTsKICAgICB2b2lkIHJlbW92ZUZsb2F0aW5nT2JqZWN0KFJl
bmRlckJveCopOwotCisgICAgdm9pZCByZW1vdmVGbG9hdGluZ09iamVjdHMoRmxvYXRpbmdPYmpl
Y3QqLCBpbnQgeSk7CisgICAgCiAgICAgLy8gQ2FsbGVkIGZyb20gbGluZVdpZHRoLCB0byBwb3Np
dGlvbiB0aGUgZmxvYXRzIGFkZGVkIGluIHRoZSBsYXN0IGxpbmUuCi0gICAgLy8gUmV0dXJucyB0
dXJlIGlmIGFuZCBvbmx5IGlmIGl0IGhhcyBwb3NpdGlvbmVkIGFueSBmbG9hdHMuCisgICAgLy8g
UmV0dXJucyB0cnVlIGlmIGFuZCBvbmx5IGlmIGl0IGhhcyBwb3NpdGlvbmVkIGFueSBmbG9hdHMu
CiAgICAgYm9vbCBwb3NpdGlvbk5ld0Zsb2F0cygpOworICAgIAorICAgIC8vIFBvc2l0aW9ucyBu
ZXcgZmxvYXRzIGFuZCBhbHNvIGFkanVzdCBhbGwgZmxvYXRzIGVuY291bnRlcmVkIG9uIHRoZSBs
aW5lIGlmIGFueSBvZiB0aGVtCisgICAgLy8gaGF2ZSB0byBtb3ZlIHRvIHRoZSBuZXh0IHBhZ2Uv
Y29sdW1uLgorICAgIGJvb2wgcG9zaXRpb25OZXdGbG9hdE9uTGluZShGbG9hdGluZ09iamVjdCog
bmV3RmxvYXQsIEZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lKTsKKwog
ICAgIHZvaWQgY2xlYXJGbG9hdHMoKTsKICAgICBpbnQgZ2V0Q2xlYXJEZWx0YShSZW5kZXJCb3gq
IGNoaWxkLCBpbnQgeVBvcyk7CiAKQEAgLTQxNiw4ICs0NjYsNyBAQCBwcml2YXRlOgogICAgIHZv
aWQgb2Zmc2V0Rm9yQ29udGVudHMoaW50JiB0eCwgaW50JiB0eSkgY29uc3Q7CiAKICAgICB2b2lk
IGNhbGNDb2x1bW5XaWR0aCgpOwotICAgIGludCBsYXlvdXRDb2x1bW5zKGludCBlbmRPZkNvbnRl
bnQgPSAtMSwgaW50IHJlcXVlc3RlZENvbHVtbkhlaWdodCA9IC0xKTsKLSAgICBpbnQgdmlzaWJs
ZVRvcE9mSGlnaGVzdEZsb2F0RXh0ZW5kaW5nQmVsb3coaW50IGJvdHRvbSwgaW50IG1heEhlaWdo
dCkgY29uc3Q7CisgICAgYm9vbCBsYXlvdXRDb2x1bW5zKGJvb2wgaGFzU3BlY2lmaWVkUGFnZUhl
aWdodCwgaW50IHBhZ2VIZWlnaHQsIExheW91dFN0YXRlTWFpbnRhaW5lciYpOwogICAgIHZvaWQg
bWFrZUNoaWxkcmVuQW5vbnltb3VzQ29sdW1uQmxvY2tzKFJlbmRlck9iamVjdCogYmVmb3JlQ2hp
bGQsIFJlbmRlckJsb2NrKiBuZXdCbG9ja0JveCwgUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCk7CiAK
ICAgICBib29sIGV4cGFuZHNUb0VuY2xvc2VPdmVyaGFuZ2luZ0Zsb2F0cygpIGNvbnN0OwpAQCAt
NDMzLDM2ICs0ODIsNiBAQCBwcml2YXRlOgogICAgIFJlbmRlckJsb2NrKiBjb250aW51YXRpb25C
ZWZvcmUoUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCk7CiAgICAgUmVuZGVyQmxvY2sqIGNvbnRh
aW5pbmdDb2x1bW5zQmxvY2soYm9vbCBhbGxvd0Fub255bW91c0NvbHVtbkJsb2NrID0gdHJ1ZSk7
CiAgICAgUmVuZGVyQmxvY2sqIGNvbHVtbnNCbG9ja0ZvclNwYW5uaW5nRWxlbWVudChSZW5kZXJP
YmplY3QqIG5ld0NoaWxkKTsKLSAgICAKLSAgICBzdHJ1Y3QgRmxvYXRpbmdPYmplY3QgOiBOb25j
b3B5YWJsZSB7Ci0gICAgICAgIGVudW0gVHlwZSB7Ci0gICAgICAgICAgICBGbG9hdExlZnQsCi0g
ICAgICAgICAgICBGbG9hdFJpZ2h0Ci0gICAgICAgIH07Ci0KLSAgICAgICAgRmxvYXRpbmdPYmpl
Y3QoVHlwZSB0eXBlKQotICAgICAgICAgICAgOiBtX3JlbmRlcmVyKDApCi0gICAgICAgICAgICAs
IG1fdG9wKDApCi0gICAgICAgICAgICAsIG1fYm90dG9tKDApCi0gICAgICAgICAgICAsIG1fbGVm
dCgwKQotICAgICAgICAgICAgLCBtX3dpZHRoKDApCi0gICAgICAgICAgICAsIG1fdHlwZSh0eXBl
KQotICAgICAgICAgICAgLCBtX3Nob3VsZFBhaW50KHRydWUpCi0gICAgICAgICAgICAsIG1faXNE
ZXNjZW5kYW50KGZhbHNlKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBUeXBlIHR5
cGUoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxUeXBlPihtX3R5cGUpOyB9Ci0KLSAgICAgICAgUmVu
ZGVyQm94KiBtX3JlbmRlcmVyOwotICAgICAgICBpbnQgbV90b3A7Ci0gICAgICAgIGludCBtX2Jv
dHRvbTsKLSAgICAgICAgaW50IG1fbGVmdDsKLSAgICAgICAgaW50IG1fd2lkdGg7Ci0gICAgICAg
IHVuc2lnbmVkIG1fdHlwZSA6IDE7IC8vIFR5cGUgKGxlZnQgb3IgcmlnaHQgYWxpZ25lZCkKLSAg
ICAgICAgYm9vbCBtX3Nob3VsZFBhaW50IDogMTsKLSAgICAgICAgYm9vbCBtX2lzRGVzY2VuZGFu
dCA6IDE7Ci0gICAgfTsKIAogICAgIGNsYXNzIE1hcmdpbkluZm8gewogICAgICAgICAvLyBDb2xs
YXBzaW5nIGZsYWdzIGZvciB3aGV0aGVyIHdlIGNhbiBjb2xsYXBzZSBvdXIgbWFyZ2lucyB3aXRo
IG91ciBjaGlsZHJlbidzIG1hcmdpbnMuCkBAIC01MzksNiArNTU4LDEzIEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBzZXRDb2xsYXBzZWRCb3R0b21NYXJnaW4oY29uc3QgTWFyZ2luSW5mbyYpOwogICAg
IC8vIEVuZCBoZWxwZXIgZnVuY3Rpb25zIGFuZCBzdHJ1Y3RzIHVzZWQgYnkgbGF5b3V0QmxvY2tD
aGlsZHJlbi4KIAorICAgIC8vIFBhZ2luYXRpb24gcm91dGluZXMuCisgICAgaW50IG5leHRQYWdl
VG9wKGludCB5UG9zKSBjb25zdDsgLy8gUmV0dXJucyB0aGUgdG9wIG9mIHRoZSBuZXh0IHBhZ2Ug
Zm9sbG93aW5nIHlQb3MuCisgICAgaW50IGFwcGx5QmVmb3JlQnJlYWsoUmVuZGVyQm94KiBjaGls
ZCwgaW50IHlQb3MpOyAvLyBJZiB0aGUgY2hpbGQgaGFzIGEgYmVmb3JlIGJyZWFrLCB0aGVuIHJl
dHVybiBhIG5ldyB5UG9zIHRoYXQgc2hpZnRzIHRvIHRoZSB0b3Agb2YgdGhlIG5leHQgcGFnZS9j
b2x1bW4uCisgICAgaW50IGFwcGx5QWZ0ZXJCcmVhayhSZW5kZXJCb3gqIGNoaWxkLCBpbnQgeVBv
cywgTWFyZ2luSW5mbyYgbWFyZ2luSW5mbyk7IC8vIElmIHRoZSBjaGlsZCBoYXMgYW4gYWZ0ZXIg
YnJlYWssIHRoZW4gcmV0dXJuIGEgbmV3IHlQb3MgdGhhdCBzaGlmdHMgdG8gdGhlIHRvcCBvZiB0
aGUgbmV4dCBwYWdlL2NvbHVtbi4KKyAgICBpbnQgYWRqdXN0Rm9yVW5zcGxpdHRhYmxlQ2hpbGQo
UmVuZGVyQm94KiBjaGlsZCwgaW50IHlQb3MsIGJvb2wgaW5jbHVkZU1hcmdpbnMgPSBmYWxzZSk7
IC8vIElmIHRoZSBjaGlsZCBpcyB1bnNwbGl0dGFibGUgYW5kIGNhbid0IGZpdCBvbiB0aGUgY3Vy
cmVudCBwYWdlLCByZXR1cm4gdGhlIHRvcCBvZiB0aGUgbmV4dCBwYWdlL2NvbHVtbi4KKyAgICB2
b2lkIGFkanVzdExpbmVQb3NpdGlvbkZvclBhZ2luYXRpb24oUm9vdElubGluZUJveCosIGludCYg
ZGVsdGFZKTsgLy8gQ29tcHV0ZXMgYSBkZWx0YVkgdmFsdWUgdGhhdCBwdXQgYSBsaW5lIGF0IHRo
ZSB0b3Agb2YgdGhlIG5leHQgcGFnZSBpZiBpdCBkb2Vzbid0IGZpdCBvbiB0aGUgY3VycmVudCBw
YWdlLgorCiAgICAgdHlwZWRlZiBQb3NpdGlvbmVkT2JqZWN0c0xpc3RIYXNoU2V0Ojpjb25zdF9p
dGVyYXRvciBJdGVyYXRvcjsKICAgICBEZXByZWNhdGVkUHRyTGlzdDxGbG9hdGluZ09iamVjdD4q
IG1fZmxvYXRpbmdPYmplY3RzOwogICAgIApAQCAtNTUxLDEyICs1NzcsMTQgQEAgcHJpdmF0ZToK
ICAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogbV9jb250aW51YXRpb247CiAKICAgICAvLyBBbGxv
Y2F0ZWQgb25seSB3aGVuIHNvbWUgb2YgdGhlc2UgZmllbGRzIGhhdmUgbm9uLWRlZmF1bHQgdmFs
dWVzCi0gICAgc3RydWN0IE1heE1hcmdpbiA6IE5vbmNvcHlhYmxlIHsKLSAgICAgICAgTWF4TWFy
Z2luKGNvbnN0IFJlbmRlckJsb2NrKiBvKSAKKyAgICBzdHJ1Y3QgUmVuZGVyQmxvY2tSYXJlRGF0
YSA6IE5vbmNvcHlhYmxlIHsKKyAgICAgICAgUmVuZGVyQmxvY2tSYXJlRGF0YShjb25zdCBSZW5k
ZXJCbG9jayogbykgCiAgICAgICAgICAgICA6IG1fdG9wUG9zKHRvcFBvc0RlZmF1bHQobykpCiAg
ICAgICAgICAgICAsIG1fdG9wTmVnKHRvcE5lZ0RlZmF1bHQobykpCiAgICAgICAgICAgICAsIG1f
Ym90dG9tUG9zKGJvdHRvbVBvc0RlZmF1bHQobykpCiAgICAgICAgICAgICAsIG1fYm90dG9tTmVn
KGJvdHRvbU5lZ0RlZmF1bHQobykpCisgICAgICAgICAgICAsIG1fcGFnaW5hdGlvblN0cnV0KDAp
CisgICAgICAgICAgICAsIG1fcGFnZVkoMCkKICAgICAgICAgeyAKICAgICAgICAgfQogCkBAIC01
NjQsMTQgKzU5MiwxNiBAQCBwcml2YXRlOgogICAgICAgICBzdGF0aWMgaW50IHRvcE5lZ0RlZmF1
bHQoY29uc3QgUmVuZGVyQmxvY2sqIG8pIHsgcmV0dXJuIG8tPm1hcmdpblRvcCgpIDwgMCA/IC1v
LT5tYXJnaW5Ub3AoKSA6IDA7IH0KICAgICAgICAgc3RhdGljIGludCBib3R0b21Qb3NEZWZhdWx0
KGNvbnN0IFJlbmRlckJsb2NrKiBvKSB7IHJldHVybiBvLT5tYXJnaW5Cb3R0b20oKSA+IDAgPyBv
LT5tYXJnaW5Cb3R0b20oKSA6IDA7IH0KICAgICAgICAgc3RhdGljIGludCBib3R0b21OZWdEZWZh
dWx0KGNvbnN0IFJlbmRlckJsb2NrKiBvKSB7IHJldHVybiBvLT5tYXJnaW5Cb3R0b20oKSA8IDAg
PyAtby0+bWFyZ2luQm90dG9tKCkgOiAwOyB9Ci0KKyAgICAgICAgCiAgICAgICAgIGludCBtX3Rv
cFBvczsKICAgICAgICAgaW50IG1fdG9wTmVnOwogICAgICAgICBpbnQgbV9ib3R0b21Qb3M7CiAg
ICAgICAgIGludCBtX2JvdHRvbU5lZzsKKyAgICAgICAgaW50IG1fcGFnaW5hdGlvblN0cnV0Owor
ICAgICAgICBpbnQgbV9wYWdlWTsKICAgICAgfTsKIAotICAgIE1heE1hcmdpbiogbV9tYXhNYXJn
aW47CisgICAgUmVuZGVyQmxvY2tSYXJlRGF0YSogbV9yYXJlRGF0YTsKIAogICAgIFJlbmRlck9i
amVjdENoaWxkTGlzdCBtX2NoaWxkcmVuOwogICAgIFJlbmRlckxpbmVCb3hMaXN0IG1fbGluZUJv
eGVzOyAgIC8vIEFsbCBvZiB0aGUgcm9vdCBsaW5lIGJveGVzIGNyZWF0ZWQgZm9yIHRoaXMgYmxv
Y2sgZmxvdy4gIEZvciBleGFtcGxlLCA8ZGl2PkhlbGxvPGJyPndvcmxkLjwvZGl2PiB3aWxsIGhh
dmUgdHdvIHRvdGFsIGxpbmVzIGZvciB0aGUgPGRpdj4uCkluZGV4OiBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAJKHJldmlzaW9uIDY2ODg2KQorKysgV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVy
TGlzdE1hcmtlci5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKKyNpbmNsdWRlICJTZXR0aW5n
cy5oIgogI2luY2x1ZGUgIlRyYWlsaW5nRmxvYXRzUm9vdElubGluZUJveC5oIgogI2luY2x1ZGUg
ImJyZWFrX2xpbmVzLmgiCiAjaW5jbHVkZSA8d3RmL0Fsd2F5c0lubGluZS5oPgpAQCAtNTcwLDEy
ICs1NzEsMTEgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4oYgogICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKG8tPmlzUG9zaXRpb25lZCgpKQogICAgICAg
ICAgICAgICAgICAgICBvLT5jb250YWluaW5nQmxvY2soKS0+aW5zZXJ0UG9zaXRpb25lZE9iamVj
dChib3gpOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAo
by0+aXNGbG9hdGluZygpKQotICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXRzLmFwcGVuZChG
bG9hdFdpdGhSZWN0KGJveCkpOwotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChmdWxsTGF5
b3V0IHx8IG8tPm5lZWRzTGF5b3V0KCkpIC8vIFJlcGxhY2VkIGVsZW1lbnRzCi0gICAgICAgICAg
ICAgICAgICAgICAgICB0b1JlbmRlckJveChvKS0+ZGlydHlMaW5lQm94ZXMoZnVsbExheW91dCk7
Ci0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChvLT5pc0Zsb2F0aW5nKCkpCisgICAgICAgICAg
ICAgICAgICAgIGZsb2F0cy5hcHBlbmQoRmxvYXRXaXRoUmVjdChib3gpKTsKKyAgICAgICAgICAg
ICAgICBlbHNlIGlmIChmdWxsTGF5b3V0IHx8IG8tPm5lZWRzTGF5b3V0KCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgLy8gUmVwbGFjZWQgZWxlbWVudHMKKyAgICAgICAgICAgICAgICAgICAgdG9S
ZW5kZXJCb3gobyktPmRpcnR5TGluZUJveGVzKGZ1bGxMYXlvdXQpOwogICAgICAgICAgICAgICAg
ICAgICBvLT5sYXlvdXRJZk5lZWRlZCgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0gZWxzZSBpZiAoby0+aXNUZXh0KCkgfHwgKG8tPmlzUmVuZGVySW5saW5lKCkgJiYgIWVuZE9m
SW5saW5lKSkgewpAQCAtNTk0LDcgKzU5NCw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dElu
bGluZUNoaWxkcmVuKGIKICAgICAgICAgdW5zaWduZWQgZmxvYXRJbmRleDsKICAgICAgICAgYm9v
bCBmaXJzdExpbmUgPSB0cnVlOwogICAgICAgICBib29sIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5s
eSA9IHRydWU7Ci0gICAgICAgIFJvb3RJbmxpbmVCb3gqIHN0YXJ0TGluZSA9IGRldGVybWluZVN0
YXJ0UG9zaXRpb24oZmlyc3RMaW5lLCBmdWxsTGF5b3V0LCBwcmV2aW91c0xpbmVCcm9rZUNsZWFu
bHksIHJlc29sdmVyLCBmbG9hdHMsIGZsb2F0SW5kZXgpOworICAgICAgICBSb290SW5saW5lQm94
KiBzdGFydExpbmUgPSBkZXRlcm1pbmVTdGFydFBvc2l0aW9uKGZpcnN0TGluZSwgZnVsbExheW91
dCwgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5LCByZXNvbHZlciwgZmxvYXRzLCBmbG9hdEluZGV4
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVzZVJlcGFpbnRCb3VuZHMsIHJlcGFpbnRUb3AsIHJlcGFpbnRCb3R0b20pOwogCiAgICAg
ICAgIGlmIChmdWxsTGF5b3V0ICYmIGhhc0lubGluZUNoaWxkICYmICFzZWxmTmVlZHNMYXlvdXQo
KSkgewogICAgICAgICAgICAgc2V0TmVlZHNMYXlvdXQodHJ1ZSwgZmFsc2UpOyAgLy8gTWFyayBv
dXJzZWx2ZXMgYXMgbmVlZGluZyBhIGZ1bGwgbGF5b3V0LiBUaGlzIHdheSB3ZSdsbCByZXBhaW50
IGxpa2UKQEAgLTYyMiw5ICs2MjMsMTEgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0SW5saW5l
Q2hpbGRyZW4oYgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA6IGRldGVybWlu
ZUVuZFBvc2l0aW9uKHN0YXJ0TGluZSwgY2xlYW5MaW5lU3RhcnQsIGNsZWFuTGluZUJpZGlTdGF0
dXMsIGVuZExpbmVZUG9zKTsKIAogICAgICAgICBpZiAoc3RhcnRMaW5lKSB7Ci0gICAgICAgICAg
ICB1c2VSZXBhaW50Qm91bmRzID0gdHJ1ZTsKLSAgICAgICAgICAgIHJlcGFpbnRUb3AgPSBoZWln
aHQoKTsKLSAgICAgICAgICAgIHJlcGFpbnRCb3R0b20gPSBoZWlnaHQoKTsKKyAgICAgICAgICAg
IGlmICghdXNlUmVwYWludEJvdW5kcykgeworICAgICAgICAgICAgICAgIHVzZVJlcGFpbnRCb3Vu
ZHMgPSB0cnVlOworICAgICAgICAgICAgICAgIHJlcGFpbnRUb3AgPSBoZWlnaHQoKTsKKyAgICAg
ICAgICAgICAgICByZXBhaW50Qm90dG9tID0gaGVpZ2h0KCk7CisgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBSZW5kZXJBcmVuYSogYXJlbmEgPSByZW5kZXJBcmVuYSgpOwogICAgICAgICAgICAg
Um9vdElubGluZUJveCogYm94ID0gc3RhcnRMaW5lOwogICAgICAgICAgICAgd2hpbGUgKGJveCkg
ewpAQCAtNjU5LDYgKzY2Miw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dElubGluZUNoaWxk
cmVuKGIKICAgICAgICAgYm9vbCBjaGVja0ZvckZsb2F0c0Zyb21MYXN0TGluZSA9IGZhbHNlOwog
CiAgICAgICAgIGJvb2wgaXNMaW5lRW1wdHkgPSB0cnVlOworICAgICAgICBib29sIHBhZ2luYXRl
ZCA9IHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+cGFnaW5hdGVkKCk7CiAKICAgICAgICAgd2hpbGUg
KCFlbmQuYXRFbmQoKSkgewogICAgICAgICAgICAgLy8gRklYTUU6IElzIHRoaXMgY2hlY2sgbmVj
ZXNzYXJ5IGJlZm9yZSB0aGUgZmlyc3QgaXRlcmF0aW9uIG9yIGNhbiBpdCBiZSBtb3ZlZCB0byB0
aGUgZW5kPwpAQCAtNjcxLDcgKzY3NSwxMCBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRJbmxp
bmVDaGlsZHJlbihiCiAgICAgICAgICAgICAKICAgICAgICAgICAgIEVDbGVhciBjbGVhciA9IENO
T05FOwogICAgICAgICAgICAgYm9vbCBoeXBoZW5hdGVkOwotICAgICAgICAgICAgZW5kID0gZmlu
ZE5leHRMaW5lQnJlYWsocmVzb2x2ZXIsIGZpcnN0TGluZSwgaXNMaW5lRW1wdHksIHByZXZpb3Vz
TGluZUJyb2tlQ2xlYW5seSwgaHlwaGVuYXRlZCwgJmNsZWFyKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgSW5saW5lSXRlcmF0b3Igb2xkRW5kID0gZW5kOworICAgICAgICAgICAgRmxvYXRp
bmdPYmplY3QqIGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUgPSBtX2Zsb2F0aW5nT2JqZWN0cyA/
IG1fZmxvYXRpbmdPYmplY3RzLT5sYXN0KCkgOiAwOworICAgICAgICAgICAgZW5kID0gZmluZE5l
eHRMaW5lQnJlYWsocmVzb2x2ZXIsIGZpcnN0TGluZSwgaXNMaW5lRW1wdHksIHByZXZpb3VzTGlu
ZUJyb2tlQ2xlYW5seSwgaHlwaGVuYXRlZCwgJmNsZWFyLCBsYXN0RmxvYXRGcm9tUHJldmlvdXNM
aW5lKTsKICAgICAgICAgICAgIGlmIChyZXNvbHZlci5wb3NpdGlvbigpLmF0RW5kKCkpIHsKICAg
ICAgICAgICAgICAgICByZXNvbHZlci5kZWxldGVSdW5zKCk7CiAgICAgICAgICAgICAgICAgY2hl
Y2tGb3JGbG9hdHNGcm9tTGFzdExpbmUgPSB0cnVlOwpAQCAtNzM2LDYgKzc0Myw3IEBAIHZvaWQg
UmVuZGVyQmxvY2s6OmxheW91dElubGluZUNoaWxkcmVuKGIKICAgICAgICAgICAgICAgICAvLyBp
bmxpbmUgZmxvdyBib3hlcy4KIAogICAgICAgICAgICAgICAgIFJvb3RJbmxpbmVCb3gqIGxpbmVC
b3ggPSAwOworICAgICAgICAgICAgICAgIGludCBvbGRIZWlnaHQgPSBoZWlnaHQoKTsKICAgICAg
ICAgICAgICAgICBpZiAocmVzb2x2ZXIucnVuQ291bnQoKSkgewogICAgICAgICAgICAgICAgICAg
ICBpZiAoaHlwaGVuYXRlZCkKICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVyLmxvZ2lj
YWxseUxhc3RSdW4oKS0+bV9oYXNIeXBoZW4gPSB0cnVlOwpAQCAtNzg2LDYgKzc5NCwyOSBAQCB2
b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVDaGlsZHJlbihiCiAgICAgICAgICAgICAgICAg
ICAgICAgICByZXBhaW50VG9wID0gbWluKHJlcGFpbnRUb3AsIGxpbmVCb3gtPnRvcFZpc2libGVP
dmVyZmxvdygpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGFpbnRCb3R0b20gPSBtYXgo
cmVwYWludEJvdHRvbSwgbGluZUJveC0+Ym90dG9tVmlzaWJsZU92ZXJmbG93KCkpOwogICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAg
ICBpZiAocGFnaW5hdGVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWRqdXN0bWVu
dCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBhZGp1c3RMaW5lUG9zaXRpb25Gb3JQYWdp
bmF0aW9uKGxpbmVCb3gsIGFkanVzdG1lbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGFkanVzdG1lbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb2xkTGluZVdp
ZHRoID0gbGluZVdpZHRoKG9sZEhlaWdodCwgZmlyc3RMaW5lKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsaW5lQm94LT5hZGp1c3RQb3NpdGlvbigwLCBhZGp1c3RtZW50KTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAodXNlUmVwYWludEJvdW5kcykgLy8gVGhpcyBjYW4g
b25seSBiZSBhIHBvc2l0aXZlIGFkanVzdG1lbnQsIHNvIG5vIG5lZWQgdG8gdXBkYXRlIHJlcGFp
bnRUb3AuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGFpbnRCb3R0b20gPSBt
YXgocmVwYWludEJvdHRvbSwgbGluZUJveC0+Ym90dG9tVmlzaWJsZU92ZXJmbG93KCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAobGluZVdpZHRoKG9sZEhlaWdodCArIGFkanVzdG1lbnQsIGZpcnN0TGluZSkgIT0gb2xk
TGluZVdpZHRoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUg
dG8gZGVsZXRlIHRoaXMgbGluZSwgcmVtb3ZlIGFsbCBmbG9hdHMgdGhhdCBnb3QgYWRkZWQsIGFu
ZCBsZXQgbGluZSBsYXlvdXQgcmUtcnVuLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsaW5lQm94LT5kZWxldGVMaW5lKHJlbmRlckFyZW5hKCkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZW1vdmVGbG9hdGluZ09iamVjdHMobGFzdEZsb2F0RnJvbVByZXZpb3Vz
TGluZSwgb2xkSGVpZ2h0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SGVp
Z2h0KG9sZEhlaWdodCArIGFkanVzdG1lbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXNvbHZlci5zZXRQb3NpdGlvbihvbGRFbmQpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlbmQgPSBvbGRFbmQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNldEhlaWdodChsaW5lQm94LT5ibG9ja0hlaWdodCgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIH0KIAogICAgICAgICAgICAgICAgIGZpcnN0TGluZSA9IGZhbHNlOwpAQCAtODIwLDYgKzg1
MSwxMCBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVDaGlsZHJlbihiCiAgICAgICAg
ICAgICAgICAgaW50IGRlbHRhID0gaGVpZ2h0KCkgLSBlbmRMaW5lWVBvczsKICAgICAgICAgICAg
ICAgICBmb3IgKFJvb3RJbmxpbmVCb3gqIGxpbmUgPSBlbmRMaW5lOyBsaW5lOyBsaW5lID0gbGlu
ZS0+bmV4dFJvb3RCb3goKSkgewogICAgICAgICAgICAgICAgICAgICBsaW5lLT5hdHRhY2hMaW5l
KCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChwYWdpbmF0ZWQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRlbHRhIC09IGxpbmUtPnBhZ2luYXRpb25TdHJ1dCgpOworICAgICAgICAgICAg
ICAgICAgICAgICAgYWRqdXN0TGluZVBvc2l0aW9uRm9yUGFnaW5hdGlvbihsaW5lLCBkZWx0YSk7
CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgaWYgKGRlbHRhKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICByZXBhaW50VG9wID0gbWluKHJlcGFpbnRUb3AsIGxp
bmUtPnRvcFZpc2libGVPdmVyZmxvdygpICsgbWluKGRlbHRhLCAwKSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICByZXBhaW50Qm90dG9tID0gbWF4KHJlcGFpbnRCb3R0b20sIGxpbmUtPmJvdHRv
bVZpc2libGVPdmVyZmxvdygpICsgbWF4KGRlbHRhLCAwKSk7CkBAIC05MDAsMjAgKzkzNSw0NCBA
QCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVDaGlsZHJlbihiCiB9CiAKIFJvb3RJbmxp
bmVCb3gqIFJlbmRlckJsb2NrOjpkZXRlcm1pbmVTdGFydFBvc2l0aW9uKGJvb2wmIGZpcnN0TGlu
ZSwgYm9vbCYgZnVsbExheW91dCwgYm9vbCYgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5LCAKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElubGluZUJp
ZGlSZXNvbHZlciYgcmVzb2x2ZXIsIFZlY3RvcjxGbG9hdFdpdGhSZWN0PiYgZmxvYXRzLCB1bnNp
Z25lZCYgbnVtQ2xlYW5GbG9hdHMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sdmVyLCBWZWN0b3I8Rmxv
YXRXaXRoUmVjdD4mIGZsb2F0cywgdW5zaWduZWQmIG51bUNsZWFuRmxvYXRzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCYgdXNlUmVwYWlu
dEJvdW5kcywgaW50JiByZXBhaW50VG9wLCBpbnQmIHJlcGFpbnRCb3R0b20pCiB7CiAgICAgUm9v
dElubGluZUJveCogY3VyciA9IDA7CiAgICAgUm9vdElubGluZUJveCogbGFzdCA9IDA7CiAKICAg
ICBib29sIGRpcnRpZWRCeUZsb2F0ID0gZmFsc2U7CiAgICAgaWYgKCFmdWxsTGF5b3V0KSB7Cisg
ICAgICAgIC8vIFBhZ2luYXRlIGFsbCBvZiB0aGUgY2xlYW4gbGluZXMuCisgICAgICAgIGJvb2wg
cGFnaW5hdGVkID0gdmlldygpLT5sYXlvdXRTdGF0ZSgpLT5wYWdpbmF0ZWQoKTsKKyAgICAgICAg
aW50IHBhZ2luYXRpb25EZWx0YSA9IDA7CiAgICAgICAgIHNpemVfdCBmbG9hdEluZGV4ID0gMDsK
ICAgICAgICAgZm9yIChjdXJyID0gZmlyc3RSb290Qm94KCk7IGN1cnIgJiYgIWN1cnItPmlzRGly
dHkoKTsgY3VyciA9IGN1cnItPm5leHRSb290Qm94KCkpIHsKKyAgICAgICAgICAgIGlmIChwYWdp
bmF0ZWQpIHsKKyAgICAgICAgICAgICAgICBwYWdpbmF0aW9uRGVsdGEgLT0gY3Vyci0+cGFnaW5h
dGlvblN0cnV0KCk7CisgICAgICAgICAgICAgICAgYWRqdXN0TGluZVBvc2l0aW9uRm9yUGFnaW5h
dGlvbihjdXJyLCBwYWdpbmF0aW9uRGVsdGEpOworICAgICAgICAgICAgICAgIGlmIChwYWdpbmF0
aW9uRGVsdGEpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRhaW5zRmxvYXRzKCkgfHwg
IWZsb2F0cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBE
byBiZXR0ZXIgZXZlbnR1YWxseS4gIEZvciBub3cgaWYgd2UgZXZlciBzaGlmdCBiZWNhdXNlIG9m
IHBhZ2luYXRpb24gYW5kIGZsb2F0cyBhcmUgcHJlc2VudCBqdXN0IGdvIHRvIGEgZnVsbCBsYXlv
dXQuCisgICAgICAgICAgICAgICAgICAgICAgICBmdWxsTGF5b3V0ID0gdHJ1ZTsgCisgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKCF1c2VSZXBhaW50Qm91bmRzKQor
ICAgICAgICAgICAgICAgICAgICAgICAgdXNlUmVwYWludEJvdW5kcyA9IHRydWU7CisgICAgICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgcmVwYWludFRvcCA9IG1pbihy
ZXBhaW50VG9wLCBjdXJyLT50b3BWaXNpYmxlT3ZlcmZsb3coKSArIG1pbihwYWdpbmF0aW9uRGVs
dGEsIDApKTsKKyAgICAgICAgICAgICAgICAgICAgcmVwYWludEJvdHRvbSA9IG1heChyZXBhaW50
Qm90dG9tLCBjdXJyLT5ib3R0b21WaXNpYmxlT3ZlcmZsb3coKSArIG1heChwYWdpbmF0aW9uRGVs
dGEsIDApKTsKKyAgICAgICAgICAgICAgICAgICAgY3Vyci0+YWRqdXN0UG9zaXRpb24oMCwgcGFn
aW5hdGlvbkRlbHRhKTsKKyAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoVmVjdG9yPFJlbmRlckJveCo+
KiBjbGVhbkxpbmVGbG9hdHMgPSBjdXJyLT5mbG9hdHNQdHIoKSkgewogICAgICAgICAgICAgICAg
IFZlY3RvcjxSZW5kZXJCb3gqPjo6aXRlcmF0b3IgZW5kID0gY2xlYW5MaW5lRmxvYXRzLT5lbmQo
KTsKICAgICAgICAgICAgICAgICBmb3IgKFZlY3RvcjxSZW5kZXJCb3gqPjo6aXRlcmF0b3IgbyA9
IGNsZWFuTGluZUZsb2F0cy0+YmVnaW4oKTsgbyAhPSBlbmQ7ICsrbykgewogICAgICAgICAgICAg
ICAgICAgICBSZW5kZXJCb3gqIGYgPSAqbzsKLSAgICAgICAgICAgICAgICAgICAgSW50U2l6ZSBu
ZXdTaXplKGYtPndpZHRoKCkgKyBmLT5tYXJnaW5MZWZ0KCkgK2YtPm1hcmdpblJpZ2h0KCksIGYt
PmhlaWdodCgpICsgZi0+bWFyZ2luVG9wKCkgKyBmLT5tYXJnaW5Cb3R0b20oKSk7CisgICAgICAg
ICAgICAgICAgICAgIGYtPmxheW91dElmTmVlZGVkKCk7CisgICAgICAgICAgICAgICAgICAgIElu
dFNpemUgbmV3U2l6ZShmLT53aWR0aCgpICsgZi0+bWFyZ2luTGVmdCgpICsgZi0+bWFyZ2luUmln
aHQoKSwgZi0+aGVpZ2h0KCkgKyBmLT5tYXJnaW5Ub3AoKSArIGYtPm1hcmdpbkJvdHRvbSgpKTsK
ICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGZsb2F0SW5kZXggPCBmbG9hdHMuc2l6ZSgpKTsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKGZsb2F0c1tmbG9hdEluZGV4XS5vYmplY3QgIT0gZikg
ewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gQSBuZXcgZmxvYXQgaGFzIGJlZW4gaW5zZXJ0
ZWQgYmVmb3JlIHRoaXMgbGluZSBvciBiZWZvcmUgaXRzIGxhc3Qga25vd24gZmxvYXQuCkBAIC0x
MjM2LDE0ICsxMjk1LDE0IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnNraXBUcmFpbGluZ1doaXRlc3Bh
Y2UKICAgICB9CiB9CiAKLWludCBSZW5kZXJCbG9jazo6c2tpcExlYWRpbmdXaGl0ZXNwYWNlKElu
bGluZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIsIGJvb2wgZmlyc3RMaW5lLCBib29sIGlzTGluZUVt
cHR5LCBib29sIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSkKK2ludCBSZW5kZXJCbG9jazo6c2tp
cExlYWRpbmdXaGl0ZXNwYWNlKElubGluZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIsIGJvb2wgZmly
c3RMaW5lLCBib29sIGlzTGluZUVtcHR5LCBib29sIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBs
YXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lKQogewogICAgIGludCBhdmFpbGFibGVXaWR0aCA9IGxp
bmVXaWR0aChoZWlnaHQoKSwgZmlyc3RMaW5lKTsKICAgICB3aGlsZSAoIXJlc29sdmVyLnBvc2l0
aW9uKCkuYXRFbmQoKSAmJiAhcmVxdWlyZXNMaW5lQm94KHJlc29sdmVyLnBvc2l0aW9uKCksIGlz
TGluZUVtcHR5LCBwcmV2aW91c0xpbmVCcm9rZUNsZWFubHkpKSB7CiAgICAgICAgIFJlbmRlck9i
amVjdCogb2JqZWN0ID0gcmVzb2x2ZXIucG9zaXRpb24oKS5vYmo7CiAgICAgICAgIGlmIChvYmpl
Y3QtPmlzRmxvYXRpbmcoKSkgewotICAgICAgICAgICAgaW5zZXJ0RmxvYXRpbmdPYmplY3QodG9S
ZW5kZXJCb3gob2JqZWN0KSk7Ci0gICAgICAgICAgICBwb3NpdGlvbk5ld0Zsb2F0cygpOworICAg
ICAgICAgICAgcG9zaXRpb25OZXdGbG9hdE9uTGluZShpbnNlcnRGbG9hdGluZ09iamVjdCh0b1Jl
bmRlckJveChvYmplY3QpKSwgbGFzdEZsb2F0RnJvbVByZXZpb3VzTGluZSk7CiAgICAgICAgICAg
ICBhdmFpbGFibGVXaWR0aCA9IGxpbmVXaWR0aChoZWlnaHQoKSwgZmlyc3RMaW5lKTsKICAgICAg
ICAgfSBlbHNlIGlmIChvYmplY3QtPmlzUG9zaXRpb25lZCgpKSB7CiAgICAgICAgICAgICAvLyBG
SVhNRTogVGhlIG1hdGggaGVyZSBpcyBhY3R1YWxseSBub3QgcmVhbGx5IHJpZ2h0LiAgSXQncyBh
IGJlc3QtZ3Vlc3MgYXBwcm94aW1hdGlvbiB0aGF0CkBAIC0xMzQ5LDE0ICsxNDA4LDE0IEBAIHN0
YXRpYyB2b2lkIHRyeUh5cGhlbmF0aW5nKFJlbmRlclRleHQqIHQKIH0KIAogSW5saW5lSXRlcmF0
b3IgUmVuZGVyQmxvY2s6OmZpbmROZXh0TGluZUJyZWFrKElubGluZUJpZGlSZXNvbHZlciYgcmVz
b2x2ZXIsIGJvb2wgZmlyc3RMaW5lLCAgYm9vbCYgaXNMaW5lRW1wdHksIGJvb2wmIHByZXZpb3Vz
TGluZUJyb2tlQ2xlYW5seSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCYgaHlwaGVuYXRlZCwgRUNsZWFyKiBjbGVhcikKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sJiBoeXBoZW5hdGVkLCBFQ2xlYXIq
IGNsZWFyLCBGbG9hdGluZ09iamVjdCogbGFzdEZsb2F0RnJvbVByZXZpb3VzTGluZSkKIHsKICAg
ICBBU1NFUlQocmVzb2x2ZXIucG9zaXRpb24oKS5ibG9jayA9PSB0aGlzKTsKIAogICAgIGJvb2wg
YXBwbGllZFN0YXJ0V2lkdGggPSByZXNvbHZlci5wb3NpdGlvbigpLnBvcyA+IDA7CiAgICAgTGlu
ZU1pZHBvaW50U3RhdGUmIGxpbmVNaWRwb2ludFN0YXRlID0gcmVzb2x2ZXIubWlkcG9pbnRTdGF0
ZSgpOwogICAgIAotICAgIGludCB3aWR0aCA9IHNraXBMZWFkaW5nV2hpdGVzcGFjZShyZXNvbHZl
ciwgZmlyc3RMaW5lLCBpc0xpbmVFbXB0eSwgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5KTsKKyAg
ICBpbnQgd2lkdGggPSBza2lwTGVhZGluZ1doaXRlc3BhY2UocmVzb2x2ZXIsIGZpcnN0TGluZSwg
aXNMaW5lRW1wdHksIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSwgbGFzdEZsb2F0RnJvbVByZXZp
b3VzTGluZSk7CiAKICAgICBpbnQgdyA9IDA7CiAgICAgaW50IHRtcFcgPSAwOwpAQCAtMTQ0MSwx
MiArMTUwMCwxMiBAQCBJbmxpbmVJdGVyYXRvciBSZW5kZXJCbG9jazo6ZmluZE5leHRMaW5lCiAg
ICAgICAgICAgICAvLyBhZGQgdG8gc3BlY2lhbCBvYmplY3RzLi4uCiAgICAgICAgICAgICBpZiAo
by0+aXNGbG9hdGluZygpKSB7CiAgICAgICAgICAgICAgICAgUmVuZGVyQm94KiBmbG9hdEJveCA9
IHRvUmVuZGVyQm94KG8pOwotICAgICAgICAgICAgICAgIGluc2VydEZsb2F0aW5nT2JqZWN0KGZs
b2F0Qm94KTsKKyAgICAgICAgICAgICAgICBGbG9hdGluZ09iamVjdCogZiA9IGluc2VydEZsb2F0
aW5nT2JqZWN0KGZsb2F0Qm94KTsKICAgICAgICAgICAgICAgICAvLyBjaGVjayBpZiBpdCBmaXRz
IGluIHRoZSBjdXJyZW50IGxpbmUuCiAgICAgICAgICAgICAgICAgLy8gSWYgaXQgZG9lcywgcG9z
aXRpb24gaXQgbm93LCBvdGhlcndpc2UsIHBvc2l0aW9uCiAgICAgICAgICAgICAgICAgLy8gaXQg
YWZ0ZXIgbW92aW5nIHRvIG5leHQgbGluZSAoaW4gbmV3TGluZSgpIGZ1bmMpCiAgICAgICAgICAg
ICAgICAgaWYgKGZsb2F0c0ZpdE9uTGluZSAmJiBmbG9hdEJveC0+d2lkdGgoKSArIGZsb2F0Qm94
LT5tYXJnaW5MZWZ0KCkgKyBmbG9hdEJveC0+bWFyZ2luUmlnaHQoKSArIHcgKyB0bXBXIDw9IHdp
ZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uTmV3RmxvYXRzKCk7CisgICAgICAg
ICAgICAgICAgICAgIHBvc2l0aW9uTmV3RmxvYXRPbkxpbmUoZiwgbGFzdEZsb2F0RnJvbVByZXZp
b3VzTGluZSk7CiAgICAgICAgICAgICAgICAgICAgIHdpZHRoID0gbGluZVdpZHRoKGhlaWdodCgp
LCBmaXJzdExpbmUpOwogICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAg
ICBmbG9hdHNGaXRPbkxpbmUgPSBmYWxzZTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAko
cmV2aXNpb24gNjY4ODYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05NzMsNyArOTczLDcgQEAgdm9pZCBSZW5kZXJCb3g6Om1hcExvY2FsVG9D
b250YWluZXIoUmVuZAogICAgIGlmIChSZW5kZXJWaWV3KiB2ID0gdmlldygpKSB7CiAgICAgICAg
IGlmICh2LT5sYXlvdXRTdGF0ZUVuYWJsZWQoKSAmJiAhcmVwYWludENvbnRhaW5lcikgewogICAg
ICAgICAgICAgTGF5b3V0U3RhdGUqIGxheW91dFN0YXRlID0gdi0+bGF5b3V0U3RhdGUoKTsKLSAg
ICAgICAgICAgIEludFNpemUgb2Zmc2V0ID0gbGF5b3V0U3RhdGUtPm1fb2Zmc2V0OworICAgICAg
ICAgICAgSW50U2l6ZSBvZmZzZXQgPSBsYXlvdXRTdGF0ZS0+bV9wYWludE9mZnNldDsKICAgICAg
ICAgICAgIG9mZnNldC5leHBhbmQoeCgpLCB5KCkpOwogICAgICAgICAgICAgaWYgKHN0eWxlKCkt
PnBvc2l0aW9uKCkgPT0gUmVsYXRpdmVQb3NpdGlvbiAmJiBsYXllcigpKQogICAgICAgICAgICAg
ICAgIG9mZnNldCArPSBsYXllcigpLT5yZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0KCk7CkBAIC0xMTcw
LDcgKzExNzAsNyBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZVJlY3RGb3JSZXBhaW50KFJlCiAg
ICAgICAgICAgICAgICAgcmVjdC5tb3ZlKGxheWVyKCktPnJlbGF0aXZlUG9zaXRpb25PZmZzZXQo
KSk7CiAKICAgICAgICAgICAgIHJlY3QubW92ZSh4KCksIHkoKSk7Ci0gICAgICAgICAgICByZWN0
Lm1vdmUobGF5b3V0U3RhdGUtPm1fb2Zmc2V0KTsKKyAgICAgICAgICAgIHJlY3QubW92ZShsYXlv
dXRTdGF0ZS0+bV9wYWludE9mZnNldCk7CiAgICAgICAgICAgICBpZiAobGF5b3V0U3RhdGUtPm1f
Y2xpcHBlZCkKICAgICAgICAgICAgICAgICByZWN0LmludGVyc2VjdChsYXlvdXRTdGF0ZS0+bV9j
bGlwUmVjdCk7CiAgICAgICAgICAgICByZXR1cm47CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJGbGV4aWJsZUJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRmxleGlibGVCb3guY3BwCShyZXZpc2lvbiA2Njg4NikKKysrIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckZsZXhpYmxlQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAxLDcgKzIwMSw3IEBA
IHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmNhbGNQcmVmV2lkdGhzKCkKICAgICBzZXRQcmVmV2lk
dGhzRGlydHkoZmFsc2UpOwogfQogCi12b2lkIFJlbmRlckZsZXhpYmxlQm94OjpsYXlvdXRCbG9j
ayhib29sIHJlbGF5b3V0Q2hpbGRyZW4pCit2b2lkIFJlbmRlckZsZXhpYmxlQm94OjpsYXlvdXRC
bG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIGludCAvKnBhZ2VIZWlnaHQgRklYTUU6IEltcGxl
bWVudCAqLykKIHsKICAgICBBU1NFUlQobmVlZHNMYXlvdXQoKSk7CiAKSW5kZXg6IFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRmxleGlibGVCb3guaAkocmV2aXNpb24gNjY4ODYpCisrKyBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3
IEBAIHB1YmxpYzoKICAgICB2b2lkIGNhbGNIb3Jpem9udGFsUHJlZldpZHRocygpOwogICAgIHZv
aWQgY2FsY1ZlcnRpY2FsUHJlZldpZHRocygpOwogCi0gICAgdmlydHVhbCB2b2lkIGxheW91dEJs
b2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbik7CisgICAgdmlydHVhbCB2b2lkIGxheW91dEJsb2Nr
KGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgaW50IHBhZ2VIZWlnaHQpOwogICAgIHZvaWQgbGF5b3V0
SG9yaXpvbnRhbEJveChib29sIHJlbGF5b3V0Q2hpbGRyZW4pOwogICAgIHZvaWQgbGF5b3V0VmVy
dGljYWxCb3goYm9vbCByZWxheW91dENoaWxkcmVuKTsKIApJbmRleDogV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVySW5saW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJJbmxpbmUuY3BwCShyZXZpc2lvbiA2Njg4NikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
cklubGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0Nyw3ICs2NDcsNyBAQCB2b2lkIFJlbmRl
cklubGluZTo6Y29tcHV0ZVJlY3RGb3JSZXBhaW50CiAgICAgICAgICAgICBMYXlvdXRTdGF0ZSog
bGF5b3V0U3RhdGUgPSB2LT5sYXlvdXRTdGF0ZSgpOwogICAgICAgICAgICAgaWYgKHN0eWxlKCkt
PnBvc2l0aW9uKCkgPT0gUmVsYXRpdmVQb3NpdGlvbiAmJiBsYXllcigpKQogICAgICAgICAgICAg
ICAgIHJlY3QubW92ZShsYXllcigpLT5yZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0KCkpOwotICAgICAg
ICAgICAgcmVjdC5tb3ZlKGxheW91dFN0YXRlLT5tX29mZnNldCk7CisgICAgICAgICAgICByZWN0
Lm1vdmUobGF5b3V0U3RhdGUtPm1fcGFpbnRPZmZzZXQpOwogICAgICAgICAgICAgaWYgKGxheW91
dFN0YXRlLT5tX2NsaXBwZWQpCiAgICAgICAgICAgICAgICAgcmVjdC5pbnRlcnNlY3QobGF5b3V0
U3RhdGUtPm1fY2xpcFJlY3QpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtNzM0LDcgKzczNCw3
IEBAIHZvaWQgUmVuZGVySW5saW5lOjptYXBMb2NhbFRvQ29udGFpbmVyKFIKICAgICBpZiAoUmVu
ZGVyVmlldyAqdiA9IHZpZXcoKSkgewogICAgICAgICBpZiAodi0+bGF5b3V0U3RhdGVFbmFibGVk
KCkgJiYgIXJlcGFpbnRDb250YWluZXIpIHsKICAgICAgICAgICAgIExheW91dFN0YXRlKiBsYXlv
dXRTdGF0ZSA9IHYtPmxheW91dFN0YXRlKCk7Ci0gICAgICAgICAgICBJbnRTaXplIG9mZnNldCA9
IGxheW91dFN0YXRlLT5tX29mZnNldDsKKyAgICAgICAgICAgIEludFNpemUgb2Zmc2V0ID0gbGF5
b3V0U3RhdGUtPm1fcGFpbnRPZmZzZXQ7CiAgICAgICAgICAgICBpZiAoc3R5bGUoKS0+cG9zaXRp
b24oKSA9PSBSZWxhdGl2ZVBvc2l0aW9uICYmIGxheWVyKCkpCiAgICAgICAgICAgICAgICAgb2Zm
c2V0ICs9IGxheWVyKCktPnJlbGF0aXZlUG9zaXRpb25PZmZzZXQoKTsKICAgICAgICAgICAgIHRy
YW5zZm9ybVN0YXRlLm1vdmUob2Zmc2V0KTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5j
cHAJKHJldmlzaW9uIDY2OTAzKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNTQxLDExICsyNTQxLDExIEBAIHZvaWQgUmVuZGVyTGF5ZXI6
OnBhaW50Q2hpbGRMYXllckludG9Db2wKICAgICBjb2x1bW5CbG9jay0+bGF5ZXIoKS0+Y29udmVy
dFRvTGF5ZXJDb29yZHMocm9vdExheWVyLCBsYXllclgsIGxheWVyWSk7CiAgICAgCiAgICAgQ29s
dW1uSW5mbyogY29sSW5mbyA9IGNvbHVtbkJsb2NrLT5jb2x1bW5JbmZvKCk7Ci0gICAgdW5zaWdu
ZWQgY29sQ291bnQgPSBjb2xJbmZvLT5jb2x1bW5Db3VudCgpOworICAgIHVuc2lnbmVkIGNvbENv
dW50ID0gY29sdW1uQmxvY2stPmNvbHVtbkNvdW50KGNvbEluZm8pOwogICAgIGludCBjdXJyWU9m
ZnNldCA9IDA7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvbENvdW50OyBpKyspIHsK
ICAgICAgICAgLy8gRm9yIGVhY2ggcmVjdCwgd2UgY2xpcCB0byB0aGUgcmVjdCwgYW5kIHRoZW4g
d2UgYWRqdXN0IG91ciBjb29yZHMuCi0gICAgICAgIEludFJlY3QgY29sUmVjdCA9IGNvbEluZm8t
PmNvbHVtblJlY3RBdChpKTsKKyAgICAgICAgSW50UmVjdCBjb2xSZWN0ID0gY29sdW1uQmxvY2st
PmNvbHVtblJlY3RBdChjb2xJbmZvLCBpKTsKICAgICAgICAgaW50IGN1cnJYT2Zmc2V0ID0gY29s
UmVjdC54KCkgLSAoY29sdW1uQmxvY2stPmJvcmRlckxlZnQoKSArIGNvbHVtbkJsb2NrLT5wYWRk
aW5nTGVmdCgpKTsKICAgICAgICAgY29sUmVjdC5tb3ZlKGxheWVyWCwgbGF5ZXJZKTsKIApAQCAt
MzAwNywxNyArMzAwNywxNyBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RDaGls
ZExhCiAgICAgY29sdW1uQmxvY2stPmxheWVyKCktPmNvbnZlcnRUb0xheWVyQ29vcmRzKHJvb3RM
YXllciwgbGF5ZXJYLCBsYXllclkpOwogICAgIAogICAgIENvbHVtbkluZm8qIGNvbEluZm8gPSBj
b2x1bW5CbG9jay0+Y29sdW1uSW5mbygpOwotICAgIGludCBjb2xDb3VudCA9IGNvbEluZm8tPmNv
bHVtbkNvdW50KCk7CisgICAgaW50IGNvbENvdW50ID0gY29sdW1uQmxvY2stPmNvbHVtbkNvdW50
KGNvbEluZm8pOwogICAgIAogICAgIC8vIFdlIGhhdmUgdG8gZ28gYmFja3dhcmRzIGZyb20gdGhl
IGxhc3QgY29sdW1uIHRvIHRoZSBmaXJzdC4KICAgICBpbnQgbGVmdCA9IGNvbHVtbkJsb2NrLT5i
b3JkZXJMZWZ0KCkgKyBjb2x1bW5CbG9jay0+cGFkZGluZ0xlZnQoKTsKICAgICBpbnQgY3VycllP
ZmZzZXQgPSAwOwogICAgIGludCBpOwogICAgIGZvciAoaSA9IDA7IGkgPCBjb2xDb3VudDsgaSsr
KQotICAgICAgICBjdXJyWU9mZnNldCAtPSBjb2xJbmZvLT5jb2x1bW5SZWN0QXQoaSkuaGVpZ2h0
KCk7CisgICAgICAgIGN1cnJZT2Zmc2V0IC09IGNvbHVtbkJsb2NrLT5jb2x1bW5SZWN0QXQoY29s
SW5mbywgaSkuaGVpZ2h0KCk7CiAgICAgZm9yIChpID0gY29sQ291bnQgLSAxOyBpID49IDA7IGkt
LSkgewogICAgICAgICAvLyBGb3IgZWFjaCByZWN0LCB3ZSBjbGlwIHRvIHRoZSByZWN0LCBhbmQg
dGhlbiB3ZSBhZGp1c3Qgb3VyIGNvb3Jkcy4KLSAgICAgICAgSW50UmVjdCBjb2xSZWN0ID0gY29s
SW5mby0+Y29sdW1uUmVjdEF0KGkpOworICAgICAgICBJbnRSZWN0IGNvbFJlY3QgPSBjb2x1bW5C
bG9jay0+Y29sdW1uUmVjdEF0KGNvbEluZm8sIGkpOwogICAgICAgICBpbnQgY3VyclhPZmZzZXQg
PSBjb2xSZWN0LngoKSAtIGxlZnQ7CiAgICAgICAgIGN1cnJZT2Zmc2V0ICs9IGNvbFJlY3QuaGVp
Z2h0KCk7CiAgICAgICAgIGNvbFJlY3QubW92ZShsYXllclgsIGxheWVyWSk7CkluZGV4OiBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuY3BwCShyZXZpc2lvbiA2Njg4NikKKysrIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzUsNyArMzUsNiBAQAogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgogI2luY2x1ZGUgIlJlbmRl
clZpZXcuaCIKICNpbmNsdWRlICJSb290SW5saW5lQm94LmgiCi0jaW5jbHVkZSAiU2V0dGluZ3Mu
aCIgLy8gRklYTUU6IFRoaXMgaW5jbHVkZSBjYW4gYmUgcmVtb3ZlZCB3aGVuIHBhZ2luYXRlRHVy
aW5nTGF5b3V0RW5hYmxlZCBpcyB0YWtlbiBvdXQuCiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAK
QEAgLTE2MSw3ICsxNjAsNyBAQCB2b2lkIFJlbmRlckxpbmVCb3hMaXN0OjpwYWludChSZW5kZXJC
b3hNCiAgICAgICAgIHJldHVybjsKIAogICAgIFJlbmRlclZpZXcqIHYgPSByZW5kZXJlci0+dmll
dygpOwotICAgIGJvb2wgdXNlUHJpbnRSZWN0ID0gIXYtPnByaW50UmVjdCgpLmlzRW1wdHkoKSAm
JiAhcmVuZGVyZXItPmRvY3VtZW50KCktPnNldHRpbmdzKCktPnBhZ2luYXRlRHVyaW5nTGF5b3V0
RW5hYmxlZCgpOworICAgIGJvb2wgdXNlUHJpbnRSZWN0ID0gIXYtPnByaW50UmVjdCgpLmlzRW1w
dHkoKTsKICAgICAKICAgICAvLyBXZSBjYW4gY2hlY2sgdGhlIGZpcnN0IGJveCBhbmQgbGFzdCBi
b3ggYW5kIGF2b2lkIHBhaW50aW5nIGlmIHdlIGRvbid0CiAgICAgLy8gaW50ZXJzZWN0LiAgVGhp
cyBpcyBhIHF1aWNrIHNob3J0LWNpcmN1aXQgdGhhdCB3ZSBjYW4gdGFrZSB0byBhdm9pZCB3YWxr
aW5nIGFueSBsaW5lcy4KQEAgLTIxNSw3ICsyMTQsNiBAQCB2b2lkIFJlbmRlckxpbmVCb3hMaXN0
OjpwYWludChSZW5kZXJCb3hNCiAgICAgICAgIGludCBib3R0b20gPSBjdXJyLT5ib3R0b21WaXNp
YmxlT3ZlcmZsb3coKSArIHJlbmRlcmVyLT5tYXhpbWFsT3V0bGluZVNpemUoaW5mby5waGFzZSk7
CiAgICAgICAgIGggPSBib3R0b20gLSB0b3A7CiAgICAgICAgIHlQb3MgPSB0eSArIHRvcDsKLSAg
ICAgICAgdi0+c2V0TWluaW11bUNvbHVtbkhlaWdodChoKTsKICAgICAgICAgaWYgKHlQb3MgPCBp
bmZvLnJlY3QuYm90dG9tKCkgJiYgeVBvcyArIGggPiBpbmZvLnJlY3QueSgpKQogICAgICAgICAg
ICAgY3Vyci0+cGFpbnQoaW5mbywgdHgsIHR5KTsKICAgICB9CkluZGV4OiBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAJKHJldmlzaW9uIDY2ODg2KQorKysgV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjA1LDYg
KzYwNSw4IEBAIGludCBSZW5kZXJUYWJsZVNlY3Rpb246OmxheW91dFJvd3MoaW50IHQKICAgICAg
ICAgICAgIGlmICh0ZSAhPSBvbGRUZSB8fCBiZSAhPSBvbGRCZSkgewogICAgICAgICAgICAgICAg
IGNlbGwtPnNldE5lZWRzTGF5b3V0KHRydWUsIGZhbHNlKTsKICAgICAgICAgICAgICAgICBjZWxs
LT5sYXlvdXRJZk5lZWRlZCgpOworICAgICAgICAgICAgICAgIGlmICh2aWV3KCktPmxheW91dFN0
YXRlKCktPm1fcGFnZUhlaWdodCAmJiBjZWxsLT5oZWlnaHQoKSAhPSBySGVpZ2h0KQorICAgICAg
ICAgICAgICAgICAgICBjZWxsLT5zZXRIZWlnaHQockhlaWdodCk7IC8vIEZJWE1FOiBQYWdpbmF0
aW9uIG1pZ2h0IGhhdmUgbWFkZSB1cyBjaGFuZ2Ugc2l6ZS4gIEZvciBub3cganVzdCBzaHJpbmsg
b3IgZ3JvdyB0aGUgY2VsbCB0byBmaXQgd2l0aG91dCBkb2luZyBhIHJlbGF5b3V0LgogICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICBpZiAoKHRlICE9IG9sZFRlIHx8IGJlID4gb2xkQmUpICYm
ICF0YWJsZSgpLT5zZWxmTmVlZHNMYXlvdXQoKSAmJiBjZWxsLT5jaGVja0ZvclJlcGFpbnREdXJp
bmdMYXlvdXQoKSkKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCShyZXZpc2lvbiA2Njg4
NikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01Miw3ICs1Miw2IEBAIFJlbmRlclZpZXc6OlJlbmRlclZpZXcoTm9kZSogbm9kZSwgRnJhbWUK
ICAgICAsIG1fbWF4aW1hbE91dGxpbmVTaXplKDApCiAgICAgLCBtX2Jlc3RUcnVuY2F0ZWRBdCgw
KQogICAgICwgbV90cnVuY2F0b3JXaWR0aCgwKQotICAgICwgbV9taW5pbXVtQ29sdW1uSGVpZ2h0
KDApCiAgICAgLCBtX2ZvcmNlZFBhZ2VCcmVhayhmYWxzZSkKICAgICAsIG1fbGF5b3V0U3RhdGUo
MCkKICAgICAsIG1fbGF5b3V0U3RhdGVEaXNhYmxlQ291bnQoMCkKQEAgLTY5NSw3ICs2OTQsNiBA
QCB2b2lkIFJlbmRlclZpZXc6OnNldEJlc3RUcnVuY2F0ZWRBdChpbnQgCiAKIHZvaWQgUmVuZGVy
Vmlldzo6cHVzaExheW91dFN0YXRlKFJlbmRlck9iamVjdCogcm9vdCkKIHsKLSAgICBBU1NFUlQo
IWRvaW5nRnVsbFJlcGFpbnQoKSk7CiAgICAgQVNTRVJUKG1fbGF5b3V0U3RhdGVEaXNhYmxlQ291
bnQgPT0gMCk7CiAgICAgQVNTRVJUKG1fbGF5b3V0U3RhdGUgPT0gMCk7CiAKSW5kZXg6IFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJWaWV3LmgJKHJldmlzaW9uIDY2ODg2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC04MywxMiArODMsMTAgQEAgcHVibGljOgogICAg
IEludFJlY3QgcHJpbnRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9wcmludFJlY3Q7IH0KICAgICB2
b2lkIHNldFByaW50UmVjdChjb25zdCBJbnRSZWN0JiByKSB7IG1fcHJpbnRSZWN0ID0gcjsgfQog
Ci0gICAgdm9pZCBzZXRUcnVuY2F0ZWRBdChpbnQgeSkgeyBtX3RydW5jYXRlZEF0ID0geTsgbV9i
ZXN0VHJ1bmNhdGVkQXQgPSBtX3RydW5jYXRvcldpZHRoID0gMDsgbV9taW5pbXVtQ29sdW1uSGVp
Z2h0ID0gMDsgbV9mb3JjZWRQYWdlQnJlYWsgPSBmYWxzZTsgfQorICAgIHZvaWQgc2V0VHJ1bmNh
dGVkQXQoaW50IHkpIHsgbV90cnVuY2F0ZWRBdCA9IHk7IG1fYmVzdFRydW5jYXRlZEF0ID0gbV90
cnVuY2F0b3JXaWR0aCA9IDA7IG1fZm9yY2VkUGFnZUJyZWFrID0gZmFsc2U7IH0KICAgICB2b2lk
IHNldEJlc3RUcnVuY2F0ZWRBdChpbnQgeSwgUmVuZGVyQm94TW9kZWxPYmplY3QqIGZvclJlbmRl
cmVyLCBib29sIGZvcmNlZEJyZWFrID0gZmFsc2UpOwotICAgIHZvaWQgc2V0TWluaW11bUNvbHVt
bkhlaWdodChpbnQgaGVpZ2h0KSB7IG1fbWluaW11bUNvbHVtbkhlaWdodCA9IGhlaWdodDsgfQog
ICAgIGludCBiZXN0VHJ1bmNhdGVkQXQoKSBjb25zdCB7IHJldHVybiBtX2Jlc3RUcnVuY2F0ZWRB
dDsgfQotICAgIGludCBtaW5pbXVtQ29sdW1uSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9taW5p
bXVtQ29sdW1uSGVpZ2h0OyB9Ci0KKyAgICAKICAgICBpbnQgdHJ1bmNhdGVkQXQoKSBjb25zdCB7
IHJldHVybiBtX3RydW5jYXRlZEF0OyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVSZWN0
cyhWZWN0b3I8SW50UmVjdD4mLCBpbnQgdHgsIGludCB0eSk7CkBAIC0xMjIsMjEgKzEyMCwyMCBA
QCBwdWJsaWM6CiAKICAgICBib29sIGRvaW5nRnVsbFJlcGFpbnQoKSBjb25zdCB7IHJldHVybiBt
X2ZyYW1lVmlldy0+bmVlZHNGdWxsUmVwYWludCgpOyB9CiAKLSAgICB2b2lkIHB1c2hMYXlvdXRT
dGF0ZShSZW5kZXJCb3gqIHJlbmRlcmVyLCBjb25zdCBJbnRTaXplJiBvZmZzZXQpCisgICAgdm9p
ZCBwdXNoTGF5b3V0U3RhdGUoUmVuZGVyQm94KiByZW5kZXJlciwgY29uc3QgSW50U2l6ZSYgb2Zm
c2V0LCBpbnQgcGFnZUhlaWdodCA9IDAsIENvbHVtbkluZm8qIGNvbEluZm8gPSAwKQogICAgIHsK
LSAgICAgICAgaWYgKGRvaW5nRnVsbFJlcGFpbnQoKSkKLSAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgLy8gV2UgcHVzaCBMYXlvdXRTdGF0ZSBldmVuIGlmIGxheW91dFN0YXRlIGlzIGRpc2Fi
bGVkIGJlY2F1c2UgaXQgc3RvcmVzIGxheW91dERlbHRhIHRvby4KLSAgICAgICAgbV9sYXlvdXRT
dGF0ZSA9IG5ldyAocmVuZGVyQXJlbmEoKSkgTGF5b3V0U3RhdGUobV9sYXlvdXRTdGF0ZSwgcmVu
ZGVyZXIsIG9mZnNldCk7CisgICAgICAgIGlmICghZG9pbmdGdWxsUmVwYWludCgpIHx8IHJlbmRl
cmVyLT5oYXNDb2x1bW5zKCkgfHwgbV9sYXlvdXRTdGF0ZS0+cGFnaW5hdGVkKCkpCisgICAgICAg
ICAgICBtX2xheW91dFN0YXRlID0gbmV3IChyZW5kZXJBcmVuYSgpKSBMYXlvdXRTdGF0ZShtX2xh
eW91dFN0YXRlLCByZW5kZXJlciwgb2Zmc2V0LCBwYWdlSGVpZ2h0LCBjb2xJbmZvKTsKICAgICB9
CiAKICAgICB2b2lkIHB1c2hMYXlvdXRTdGF0ZShSZW5kZXJPYmplY3QqKTsKIAogICAgIHZvaWQg
cG9wTGF5b3V0U3RhdGUoKQogICAgIHsKLSAgICAgICAgaWYgKGRvaW5nRnVsbFJlcGFpbnQoKSkK
LSAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgTGF5b3V0U3RhdGUqIHN0YXRlID0gbV9sYXlv
dXRTdGF0ZTsKKyAgICAgICAgaWYgKGRvaW5nRnVsbFJlcGFpbnQoKSAmJiAhbV9sYXlvdXRTdGF0
ZS0+cGFnaW5hdGVkKCkpCisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIG1fbGF5b3V0U3Rh
dGUgPSBzdGF0ZS0+bV9uZXh0OwogICAgICAgICBzdGF0ZS0+ZGVzdHJveShyZW5kZXJBcmVuYSgp
KTsKICAgICB9CkBAIC0xOTgsNyArMTk1LDYgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICBp
bnQgbV9iZXN0VHJ1bmNhdGVkQXQ7CiAgICAgaW50IG1fdHJ1bmNhdG9yV2lkdGg7Ci0gICAgaW50
IG1fbWluaW11bUNvbHVtbkhlaWdodDsKICAgICBib29sIG1fZm9yY2VkUGFnZUJyZWFrOwogICAg
IExheW91dFN0YXRlKiBtX2xheW91dFN0YXRlOwogICAgIHVuc2lnbmVkIG1fbGF5b3V0U3RhdGVE
aXNhYmxlQ291bnQ7CkBAIC0yMjcsMTMgKzIyMywxMyBAQCB2b2lkIHRvUmVuZGVyVmlldyhjb25z
dCBSZW5kZXJWaWV3Kik7CiBjbGFzcyBMYXlvdXRTdGF0ZU1haW50YWluZXIgOiBwdWJsaWMgTm9u
Y29weWFibGUgewogcHVibGljOgogICAgIC8vIGN0b3IgdG8gcHVzaCBub3cKLSAgICBMYXlvdXRT
dGF0ZU1haW50YWluZXIoUmVuZGVyVmlldyogdmlldywgUmVuZGVyQm94KiByb290LCBJbnRTaXpl
IG9mZnNldCwgYm9vbCBkaXNhYmxlU3RhdGUgPSBmYWxzZSkKKyAgICBMYXlvdXRTdGF0ZU1haW50
YWluZXIoUmVuZGVyVmlldyogdmlldywgUmVuZGVyQm94KiByb290LCBJbnRTaXplIG9mZnNldCwg
Ym9vbCBkaXNhYmxlU3RhdGUgPSBmYWxzZSwgaW50IHBhZ2VIZWlnaHQgPSAwLCBDb2x1bW5JbmZv
KiBjb2xJbmZvID0gMCkKICAgICAgICAgOiBtX3ZpZXcodmlldykKICAgICAgICAgLCBtX2Rpc2Fi
bGVkKGRpc2FibGVTdGF0ZSkKICAgICAgICAgLCBtX2RpZFN0YXJ0KGZhbHNlKQogICAgICAgICAs
IG1fZGlkRW5kKGZhbHNlKQogICAgIHsKLSAgICAgICAgcHVzaChyb290LCBvZmZzZXQpOworICAg
ICAgICBwdXNoKHJvb3QsIG9mZnNldCwgcGFnZUhlaWdodCwgY29sSW5mbyk7CiAgICAgfQogICAg
IAogICAgIC8vIGN0b3IgdG8gbWF5YmUgcHVzaCBsYXRlcgpAQCAtMjUwLDExICsyNDYsMTEgQEAg
cHVibGljOgogICAgICAgICBBU1NFUlQobV9kaWRTdGFydCA9PSBtX2RpZEVuZCk7ICAgLy8gaWYg
dGhpcyBmaXJlcywgaXQgbWVhbnMgdGhhdCBzb21lb25lIGRpZCBhIHB1c2goKSwgYnV0IGZvcmdv
dCB0byBwb3AoKS4KICAgICB9CiAKLSAgICB2b2lkIHB1c2goUmVuZGVyQm94KiByb290LCBJbnRT
aXplIG9mZnNldCkKKyAgICB2b2lkIHB1c2goUmVuZGVyQm94KiByb290LCBJbnRTaXplIG9mZnNl
dCwgaW50IHBhZ2VIZWlnaHQgPSAwLCBDb2x1bW5JbmZvKiBjb2xJbmZvID0gMCkKICAgICB7CiAg
ICAgICAgIEFTU0VSVCghbV9kaWRTdGFydCk7CiAgICAgICAgIC8vIFdlIHB1c2ggc3RhdGUgZXZl
biBpZiBkaXNhYmxlZCwgYmVjYXVzZSB3ZSBzdGlsbCBuZWVkIHRvIHN0b3JlIGxheW91dERlbHRh
Ci0gICAgICAgIG1fdmlldy0+cHVzaExheW91dFN0YXRlKHJvb3QsIG9mZnNldCk7CisgICAgICAg
IG1fdmlldy0+cHVzaExheW91dFN0YXRlKHJvb3QsIG9mZnNldCwgcGFnZUhlaWdodCwgY29sSW5m
byk7CiAgICAgICAgIGlmIChtX2Rpc2FibGVkKQogICAgICAgICAgICAgbV92aWV3LT5kaXNhYmxl
TGF5b3V0U3RhdGUoKTsKICAgICAgICAgbV9kaWRTdGFydCA9IHRydWU7CkluZGV4OiBXZWJDb3Jl
L3JlbmRlcmluZy9Sb290SW5saW5lQm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJp
bmcvUm9vdElubGluZUJveC5oCShyZXZpc2lvbiA2Njg4NikKKysrIFdlYkNvcmUvcmVuZGVyaW5n
L1Jvb3RJbmxpbmVCb3guaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQCBwdWJsaWM6
CiAgICAgICAgICwgbV9saW5lQnJlYWtQb3MoMCkKICAgICAgICAgLCBtX2xpbmVUb3AoMCkKICAg
ICAgICAgLCBtX2xpbmVCb3R0b20oMCkKKyAgICAgICAgLCBtX3BhZ2luYXRpb25TdHJ1dCgwKQog
ICAgIHsKICAgICB9CiAKQEAgLTU3LDYgKzU4LDkgQEAgcHVibGljOgogICAgIGludCBsaW5lVG9w
KCkgY29uc3QgeyByZXR1cm4gbV9saW5lVG9wOyB9CiAgICAgaW50IGxpbmVCb3R0b20oKSBjb25z
dCB7IHJldHVybiBtX2xpbmVCb3R0b207IH0KIAorICAgIGludCBwYWdpbmF0aW9uU3RydXQoKSBj
b25zdCB7IHJldHVybiBtX3BhZ2luYXRpb25TdHJ1dDsgfQorICAgIHZvaWQgc2V0UGFnaW5hdGlv
blN0cnV0KGludCBzKSB7IG1fcGFnaW5hdGlvblN0cnV0ID0gczsgfQorCiAgICAgaW50IHNlbGVj
dGlvblRvcCgpIGNvbnN0OwogICAgIGludCBzZWxlY3Rpb25Cb3R0b20oKSBjb25zdCB7IHJldHVy
biBsaW5lQm90dG9tKCk7IH0KICAgICBpbnQgc2VsZWN0aW9uSGVpZ2h0KCkgY29uc3QgeyByZXR1
cm4gbWF4KDAsIHNlbGVjdGlvbkJvdHRvbSgpIC0gc2VsZWN0aW9uVG9wKCkpOyB9CkBAIC0xNDEs
NiArMTQ1LDggQEAgcHJpdmF0ZToKICAgICBpbnQgbV9saW5lVG9wOwogICAgIGludCBtX2xpbmVC
b3R0b207CiAKKyAgICBpbnQgbV9wYWdpbmF0aW9uU3RydXQ7CisKICAgICAvLyBGbG9hdHMgaGFu
Z2luZyBvZmYgdGhlIGxpbmUgYXJlIHB1c2hlZCBpbnRvIHRoaXMgdmVjdG9yIGR1cmluZyBsYXlv
dXQuIEl0IGlzIG9ubHkKICAgICAvLyBnb29kIGZvciBhcyBsb25nIGFzIHRoZSBsaW5lIGhhcyBu
b3QgYmVlbiBtYXJrZWQgZGlydHkuCiAgICAgT3duUHRyPFZlY3RvcjxSZW5kZXJCb3gqPiA+IG1f
ZmxvYXRzOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67613</attachid>
            <date>2010-09-14 15:26:06 -0700</date>
            <delta_ts>2010-09-15 11:18:57 -0700</delta_ts>
            <desc>Incorporate the layout tests I&apos;ve written so far into the patch.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>108137</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL0NvbHVtbkluZm8uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9Db2x1bW5JbmZvLmgJKHJldmlzaW9uIDY2OTAzKQorKysgV2ViQ29yZS9y
ZW5kZXJpbmcvQ29sdW1uSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw5IEBAIHB1
YmxpYzoKICAgICBDb2x1bW5JbmZvKCkKICAgICAgICAgOiBtX2Rlc2lyZWRDb2x1bW5XaWR0aCgw
KQogICAgICAgICAsIG1fZGVzaXJlZENvbHVtbkNvdW50KDEpCisgICAgICAgICwgbV9jb2x1bW5D
b3VudCgxKQorICAgICAgICAsIG1fY29sdW1uSGVpZ2h0KDApCisgICAgICAgICwgbV9taW5pbXVt
Q29sdW1uSGVpZ2h0KDApCiAgICAgICAgIHsgfQogICAgIAogICAgIGludCBkZXNpcmVkQ29sdW1u
V2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2Rlc2lyZWRDb2x1bW5XaWR0aDsgfQpAQCAtNDQsMTkg
KzQ3LDI4IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBkZXNpcmVkQ29sdW1uQ291bnQoKSBjb25z
dCB7IHJldHVybiBtX2Rlc2lyZWRDb2x1bW5Db3VudDsgfQogICAgIHZvaWQgc2V0RGVzaXJlZENv
bHVtbkNvdW50KHVuc2lnbmVkIGNvdW50KSB7IG1fZGVzaXJlZENvbHVtbkNvdW50ID0gY291bnQ7
IH0KIAotICAgIC8vIEVuY2Fwc3VsYXRlZCBmb3IgdGhlIGZ1dHVyZSB3aGVyZSB3ZSBjYW4gYXZv
aWQgc3RvcmluZyB0aGUgcmVjdHMgYW5kIGp1c3QgY29tcHV0ZSB0aGVtIGR5bmFtaWNhbGx5Lgot
ICAgIHNpemVfdCBjb2x1bW5Db3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fY29sdW1uUmVjdHMuc2l6
ZSgpOyB9Ci0gICAgY29uc3QgSW50UmVjdCYgY29sdW1uUmVjdEF0KHNpemVfdCBpKSBjb25zdCB7
IHJldHVybiBtX2NvbHVtblJlY3RzW2ldOyB9CisgICAgdW5zaWduZWQgY29sdW1uQ291bnQoKSBj
b25zdCB7IHJldHVybiBtX2NvbHVtbkNvdW50OyB9CisgICAgaW50IGNvbHVtbkhlaWdodCgpIGNv
bnN0IHsgcmV0dXJuIG1fY29sdW1uSGVpZ2h0OyB9CiAKLSAgICB2b2lkIGNsZWFyQ29sdW1ucygp
IHsgbV9jb2x1bW5SZWN0cy5jbGVhcigpOyB9CisgICAgLy8gU2V0IG91ciBjb3VudCBhbmQgaGVp
Z2h0LiAgVGhpcyBpcyBlbm91Z2ggaW5mbyBmb3IgYSBSZW5kZXJCbG9jayB0byBjb21wdXRlIHBh
Z2UgcmVjdHMKKyAgICAvLyBkeW5hbWljYWxseS4KKyAgICB2b2lkIHNldENvbHVtbkNvdW50QW5k
SGVpZ2h0KGludCBjLCBpbnQgaCkKKyAgICB7IAorICAgICAgICBtX2NvbHVtbkNvdW50ID0gYzsK
KyAgICAgICAgbV9jb2x1bW5IZWlnaHQgPSBoOworICAgIH0KKyAgICB2b2lkIHNldENvbHVtbkhl
aWdodChpbnQgaCkgeyBtX2NvbHVtbkhlaWdodCA9IGg7IH0KKworICAgIHZvaWQgdXBkYXRlTWlu
aW11bUNvbHVtbkhlaWdodChpbnQgaCkgeyBtX21pbmltdW1Db2x1bW5IZWlnaHQgPSBtYXgoaCwg
bV9taW5pbXVtQ29sdW1uSGVpZ2h0KTsgfQorICAgIGludCBtaW5pbXVtQ29sdW1uSGVpZ2h0KCkg
Y29uc3QgeyByZXR1cm4gbV9taW5pbXVtQ29sdW1uSGVpZ2h0OyB9CiAKLSAgICAvLyBGSVhNRTog
V2lsbCBnbyBhd2F5IG9uY2Ugd2UgZG9uJ3QgdXNlIHRoZSBWZWN0b3IuCi0gICAgdm9pZCBhZGRD
b2x1bW5SZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpIHsgbV9jb2x1bW5SZWN0cy5hcHBlbmQocmVj
dCk7IH0KLSAgICAKIHByaXZhdGU6CiAgICAgaW50IG1fZGVzaXJlZENvbHVtbldpZHRoOwogICAg
IHVuc2lnbmVkIG1fZGVzaXJlZENvbHVtbkNvdW50OwotICAgIFZlY3RvcjxJbnRSZWN0PiBtX2Nv
bHVtblJlY3RzOworICAgIAorICAgIHVuc2lnbmVkIG1fY29sdW1uQ291bnQ7CisgICAgaW50IG1f
Y29sdW1uSGVpZ2h0OworICAgIGludCBtX21pbmltdW1Db2x1bW5IZWlnaHQ7CiB9OwogCiB9Cklu
ZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvTGF5b3V0U3RhdGUuY3BwCShyZXZpc2lvbiA2Njg4NikKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsOCArMzMs
OSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUxheW91dFN0YXRlOjpMYXlvdXRTdGF0ZShM
YXlvdXRTdGF0ZSogcHJldiwgUmVuZGVyQm94KiByZW5kZXJlciwgY29uc3QgSW50U2l6ZSYgb2Zm
c2V0KQotICAgIDogbV9uZXh0KHByZXYpCitMYXlvdXRTdGF0ZTo6TGF5b3V0U3RhdGUoTGF5b3V0
U3RhdGUqIHByZXYsIFJlbmRlckJveCogcmVuZGVyZXIsIGNvbnN0IEludFNpemUmIG9mZnNldCwg
aW50IHBhZ2VIZWlnaHQsIENvbHVtbkluZm8qIGNvbEluZm8pCisgICAgOiBtX2NvbHVtbkluZm8o
Y29sSW5mbykKKyAgICAsIG1fbmV4dChwcmV2KQogI2lmbmRlZiBOREVCVUcKICAgICAsIG1fcmVu
ZGVyZXIocmVuZGVyZXIpCiAjZW5kaWYKQEAgLTQ1LDQzICs0Niw2NyBAQCBMYXlvdXRTdGF0ZTo6
TGF5b3V0U3RhdGUoTGF5b3V0U3RhdGUqIHByCiAgICAgaWYgKGZpeGVkKSB7CiAgICAgICAgIC8v
IEZJWE1FOiBUaGlzIGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgd2l0aCB0cmFuc2Zvcm1zLgogICAg
ICAgICBGbG9hdFBvaW50IGZpeGVkT2Zmc2V0ID0gcmVuZGVyZXItPnZpZXcoKS0+bG9jYWxUb0Fi
c29sdXRlKEZsb2F0UG9pbnQoKSwgdHJ1ZSk7Ci0gICAgICAgIG1fb2Zmc2V0ID0gSW50U2l6ZShm
aXhlZE9mZnNldC54KCksIGZpeGVkT2Zmc2V0LnkoKSkgKyBvZmZzZXQ7CisgICAgICAgIG1fcGFp
bnRPZmZzZXQgPSBJbnRTaXplKGZpeGVkT2Zmc2V0LngoKSwgZml4ZWRPZmZzZXQueSgpKSArIG9m
ZnNldDsKICAgICB9IGVsc2UKLSAgICAgICAgbV9vZmZzZXQgPSBwcmV2LT5tX29mZnNldCArIG9m
ZnNldDsKKyAgICAgICAgbV9wYWludE9mZnNldCA9IHByZXYtPm1fcGFpbnRPZmZzZXQgKyBvZmZz
ZXQ7CiAKLSAgICBpZiAocmVuZGVyZXItPmlzUmVsUG9zaXRpb25lZCgpKSB7Ci0gICAgICAgIGlm
IChyZW5kZXJlci0+aGFzTGF5ZXIoKSkKLSAgICAgICAgICAgIG1fb2Zmc2V0ICs9IHJlbmRlcmVy
LT5sYXllcigpLT5yZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0KCk7Ci0gICAgfSBlbHNlIGlmIChyZW5k
ZXJlci0+aXNQb3NpdGlvbmVkKCkgJiYgIWZpeGVkKSB7CisgICAgaWYgKHJlbmRlcmVyLT5pc1Bv
c2l0aW9uZWQoKSAmJiAhZml4ZWQpIHsKICAgICAgICAgaWYgKFJlbmRlck9iamVjdCogY29udGFp
bmVyID0gcmVuZGVyZXItPmNvbnRhaW5lcigpKSB7CiAgICAgICAgICAgICBpZiAoY29udGFpbmVy
LT5pc1JlbFBvc2l0aW9uZWQoKSAmJiBjb250YWluZXItPmlzUmVuZGVySW5saW5lKCkpCi0gICAg
ICAgICAgICAgICAgbV9vZmZzZXQgKz0gdG9SZW5kZXJJbmxpbmUoY29udGFpbmVyKS0+cmVsYXRp
dmVQb3NpdGlvbmVkSW5saW5lT2Zmc2V0KHJlbmRlcmVyKTsKKyAgICAgICAgICAgICAgICBtX3Bh
aW50T2Zmc2V0ICs9IHRvUmVuZGVySW5saW5lKGNvbnRhaW5lciktPnJlbGF0aXZlUG9zaXRpb25l
ZElubGluZU9mZnNldChyZW5kZXJlcik7CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBtX2xheW91
dE9mZnNldCA9IG1fcGFpbnRPZmZzZXQ7CisKKyAgICBpZiAocmVuZGVyZXItPmlzUmVsUG9zaXRp
b25lZCgpICYmIHJlbmRlcmVyLT5oYXNMYXllcigpKQorICAgICAgICBtX3BhaW50T2Zmc2V0ICs9
IHJlbmRlcmVyLT5sYXllcigpLT5yZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0KCk7CisKICAgICBtX2Ns
aXBwZWQgPSAhZml4ZWQgJiYgcHJldi0+bV9jbGlwcGVkOwogICAgIGlmIChtX2NsaXBwZWQpCiAg
ICAgICAgIG1fY2xpcFJlY3QgPSBwcmV2LT5tX2NsaXBSZWN0OwogCiAgICAgaWYgKHJlbmRlcmVy
LT5oYXNPdmVyZmxvd0NsaXAoKSkgewogICAgICAgICBSZW5kZXJMYXllciogbGF5ZXIgPSByZW5k
ZXJlci0+bGF5ZXIoKTsKLSAgICAgICAgSW50UmVjdCBjbGlwUmVjdCh0b1BvaW50KG1fb2Zmc2V0
KSArIHJlbmRlcmVyLT52aWV3KCktPmxheW91dERlbHRhKCksIGxheWVyLT5zaXplKCkpOworICAg
ICAgICBJbnRSZWN0IGNsaXBSZWN0KHRvUG9pbnQobV9wYWludE9mZnNldCkgKyByZW5kZXJlci0+
dmlldygpLT5sYXlvdXREZWx0YSgpLCBsYXllci0+c2l6ZSgpKTsKICAgICAgICAgaWYgKG1fY2xp
cHBlZCkKICAgICAgICAgICAgIG1fY2xpcFJlY3QuaW50ZXJzZWN0KGNsaXBSZWN0KTsKICAgICAg
ICAgZWxzZSB7CiAgICAgICAgICAgICBtX2NsaXBSZWN0ID0gY2xpcFJlY3Q7CiAgICAgICAgICAg
ICBtX2NsaXBwZWQgPSB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIG1fb2Zmc2V0IC09IGxheWVy
LT5zY3JvbGxlZENvbnRlbnRPZmZzZXQoKTsKKworICAgICAgICBtX3BhaW50T2Zmc2V0IC09IGxh
eWVyLT5zY3JvbGxlZENvbnRlbnRPZmZzZXQoKTsKICAgICB9CiAKLSAgICBtX2xheW91dERlbHRh
ID0gbV9uZXh0LT5tX2xheW91dERlbHRhOworICAgIC8vIERpc2FibGUgcGFnaW5hdGlvbiBmb3Ig
b2JqZWN0cyB3ZSBkb24ndCBzdXBwb3J0LiAgRm9yIG5vdyB0aGlzIGluY2x1ZGVzIG92ZXJmbG93
OnNjcm9sbC9hdXRvIGFuZCBpbmxpbmUgYmxvY2tzLgorICAgIGlmIChyZW5kZXJlci0+aXNSZXBs
YWNlZCgpIHx8IHJlbmRlcmVyLT5zY3JvbGxzT3ZlcmZsb3coKSkKKyAgICAgICAgbV9wYWdlSGVp
Z2h0ID0gMDsKKworICAgIC8vIElmIHdlIGVzdGFibGlzaCBhIG5ldyBwYWdlIGhlaWdodCwgdGhl
biBjYWNoZSB0aGUgb2Zmc2V0IHRvIHRoZSB0b3Agb2YgdGhlIGZpcnN0IHBhZ2UuCisgICAgLy8g
V2UgY2FuIGNvbXBhcmUgdGhpcyBsYXRlciBvbiB0byBmaWd1cmUgb3V0IHdoYXQgcGFydCBvZiB0
aGUgcGFnZSB3ZSdyZSBhY3R1YWxseSBvbiwKKyAgICBpZiAocGFnZUhlaWdodCkgeworICAgICAg
ICBtX3BhZ2VIZWlnaHQgPSBwYWdlSGVpZ2h0OworICAgICAgICBtX3BhZ2VPZmZzZXQgPSBJbnRT
aXplKG1fcGFpbnRPZmZzZXQud2lkdGgoKSArIHJlbmRlcmVyLT5ib3JkZXJMZWZ0KCkgKyByZW5k
ZXJlci0+cGFkZGluZ0xlZnQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3Bh
aW50T2Zmc2V0LmhlaWdodCgpICsgcmVuZGVyZXItPmJvcmRlclRvcCgpICsgcmVuZGVyZXItPnBh
ZGRpbmdUb3AoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gSWYgd2UgZG9uJ3QgZXN0YWJs
aXNoIGEgbmV3IHBhZ2UgaGVpZ2h0LCB0aGVuIHByb3BhZ2F0ZSB0aGUgb2xkIHBhZ2UgaGVpZ2h0
IGFuZCBvZmZzZXQgZG93bi4KKyAgICAgICAgbV9wYWdlSGVpZ2h0ID0gbV9uZXh0LT5tX3BhZ2VI
ZWlnaHQ7CisgICAgICAgIG1fcGFnZU9mZnNldCA9IG1fbmV4dC0+bV9wYWdlT2Zmc2V0OworICAg
IH0KKyAgICAKKyAgICBpZiAoIW1fY29sdW1uSW5mbykKKyAgICAgICAgbV9jb2x1bW5JbmZvID0g
bV9uZXh0LT5tX2NvbHVtbkluZm87CiAKKyAgICBtX2xheW91dERlbHRhID0gbV9uZXh0LT5tX2xh
eW91dERlbHRhOworICAgIAogICAgIC8vIEZJWE1FOiA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTM0NDM+IEFwcGx5IGNvbnRyb2wgY2xpcCBpZiBwcmVzZW50LgogfQog
CiBMYXlvdXRTdGF0ZTo6TGF5b3V0U3RhdGUoUmVuZGVyT2JqZWN0KiByb290KQogICAgIDogbV9j
bGlwcGVkKGZhbHNlKQorICAgICwgbV9wYWdlSGVpZ2h0KDApCisgICAgLCBtX2NvbHVtbkluZm8o
MCkKICAgICAsIG1fbmV4dCgwKQogI2lmbmRlZiBOREVCVUcKICAgICAsIG1fcmVuZGVyZXIocm9v
dCkKQEAgLTg5LDEzICsxMTQsMTMgQEAgTGF5b3V0U3RhdGU6OkxheW91dFN0YXRlKFJlbmRlck9i
amVjdCogcgogewogICAgIFJlbmRlck9iamVjdCogY29udGFpbmVyID0gcm9vdC0+Y29udGFpbmVy
KCk7CiAgICAgRmxvYXRQb2ludCBhYnNDb250ZW50UG9pbnQgPSBjb250YWluZXItPmxvY2FsVG9B
YnNvbHV0ZShGbG9hdFBvaW50KCksIGZhbHNlLCB0cnVlKTsKLSAgICBtX29mZnNldCA9IEludFNp
emUoYWJzQ29udGVudFBvaW50LngoKSwgYWJzQ29udGVudFBvaW50LnkoKSk7CisgICAgbV9wYWlu
dE9mZnNldCA9IEludFNpemUoYWJzQ29udGVudFBvaW50LngoKSwgYWJzQ29udGVudFBvaW50Lnko
KSk7CiAKICAgICBpZiAoY29udGFpbmVyLT5oYXNPdmVyZmxvd0NsaXAoKSkgewogICAgICAgICBS
ZW5kZXJMYXllciogbGF5ZXIgPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KGNvbnRhaW5lciktPmxh
eWVyKCk7CiAgICAgICAgIG1fY2xpcHBlZCA9IHRydWU7Ci0gICAgICAgIG1fY2xpcFJlY3QgPSBJ
bnRSZWN0KHRvUG9pbnQobV9vZmZzZXQpLCBsYXllci0+c2l6ZSgpKTsKLSAgICAgICAgbV9vZmZz
ZXQgLT0gbGF5ZXItPnNjcm9sbGVkQ29udGVudE9mZnNldCgpOworICAgICAgICBtX2NsaXBSZWN0
ID0gSW50UmVjdCh0b1BvaW50KG1fcGFpbnRPZmZzZXQpLCBsYXllci0+c2l6ZSgpKTsKKyAgICAg
ICAgbV9wYWludE9mZnNldCAtPSBsYXllci0+c2Nyb2xsZWRDb250ZW50T2Zmc2V0KCk7CiAgICAg
fQogfQogCkBAIC0xMjYsNCArMTUxLDE5IEBAIHZvaWQgTGF5b3V0U3RhdGU6Om9wZXJhdG9yIGRl
bGV0ZSh2b2lkKiAKICAgICAqKHNpemVfdCopcHRyID0gc3o7CiB9CiAKK3ZvaWQgTGF5b3V0U3Rh
dGU6OmNsZWFyUGFnaW5hdGlvbkluZm9ybWF0aW9uKCkKK3sKKyAgICBtX3BhZ2VIZWlnaHQgPSBt
X25leHQtPm1fcGFnZUhlaWdodDsKKyAgICBtX3BhZ2VPZmZzZXQgPSBtX25leHQtPm1fcGFnZU9m
ZnNldDsKKyAgICBtX2NvbHVtbkluZm8gPSBtX25leHQtPm1fY29sdW1uSW5mbzsKK30KKworaW50
IExheW91dFN0YXRlOjpwYWdlWShpbnQgY2hpbGRZKSBjb25zdAoreworICAgIEFTU0VSVChtX3Bh
Z2VIZWlnaHQpOworICAgIGludCBsYXlvdXRZID0gbV9sYXlvdXRPZmZzZXQuaGVpZ2h0KCkgKyBj
aGlsZFk7CisgICAgaW50IHBhZ2VZID0gbV9wYWdlT2Zmc2V0LmhlaWdodCgpOworICAgIHJldHVy
biBsYXlvdXRZIC0gcGFnZVk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdl
YkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5k
ZXJpbmcvTGF5b3V0U3RhdGUuaAkocmV2aXNpb24gNjY4ODYpCisrKyBXZWJDb3JlL3JlbmRlcmlu
Zy9MYXlvdXRTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ29sdW1uSW5mbzsKIGNsYXNzIFJlbmRlckFyZW5hOwog
Y2xhc3MgUmVuZGVyQm94OwogY2xhc3MgUmVuZGVyT2JqZWN0OwpAQCAtNDAsNiArNDEsOCBAQCBj
bGFzcyBMYXlvdXRTdGF0ZSA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiBwdWJsaWM6CiAgICAgTGF5
b3V0U3RhdGUoKQogICAgICAgICA6IG1fY2xpcHBlZChmYWxzZSkKKyAgICAgICAgLCBtX3BhZ2VI
ZWlnaHQoMCkKKyAgICAgICAgLCBtX2NvbHVtbkluZm8oMCkKICAgICAgICAgLCBtX25leHQoMCkK
ICNpZm5kZWYgTkRFQlVHCiAgICAgICAgICwgbV9yZW5kZXJlcigwKQpAQCAtNDcsNyArNTAsNyBA
QCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIExheW91dFN0YXRlKExheW91dFN0YXRlKiwg
UmVuZGVyQm94KiwgY29uc3QgSW50U2l6ZSYgb2Zmc2V0KTsKKyAgICBMYXlvdXRTdGF0ZShMYXlv
dXRTdGF0ZSosIFJlbmRlckJveCosIGNvbnN0IEludFNpemUmIG9mZnNldCwgaW50IHBhZ2VIZWln
aHQsIENvbHVtbkluZm8qKTsKICAgICBMYXlvdXRTdGF0ZShSZW5kZXJPYmplY3QqKTsKIAogICAg
IHZvaWQgZGVzdHJveShSZW5kZXJBcmVuYSopOwpAQCAtNTgsNiArNjEsMTEgQEAgcHVibGljOgog
ICAgIC8vIE92ZXJyaWRkZW4gdG8gcHJldmVudCB0aGUgbm9ybWFsIGRlbGV0ZSBmcm9tIGJlaW5n
IGNhbGxlZC4KICAgICB2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkKiwgc2l6ZV90KTsKIAorICAg
IHZvaWQgY2xlYXJQYWdpbmF0aW9uSW5mb3JtYXRpb24oKTsKKyAgICBib29sIHBhZ2luYXRpbmdD
b2x1bW5zKCkgY29uc3QgeyByZXR1cm4gbV9jb2x1bW5JbmZvOyB9CisgICAgYm9vbCBwYWdpbmF0
ZWQoKSBjb25zdCB7IHJldHVybiBtX3BhZ2VIZWlnaHQgfHwgbV9jb2x1bW5JbmZvOyB9CisgICAg
aW50IHBhZ2VZKGludCBjaGlsZFkpIGNvbnN0OworCiBwcml2YXRlOgogICAgIC8vIFRoZSBub3Jt
YWwgb3BlcmF0b3IgbmV3IGlzIGRpc2FsbG93ZWQuCiAgICAgdm9pZCogb3BlcmF0b3IgbmV3KHNp
emVfdCkgdGhyb3coKTsKQEAgLTY1LDEwICs3MywxNiBAQCBwcml2YXRlOgogcHVibGljOgogICAg
IGJvb2wgbV9jbGlwcGVkOwogICAgIEludFJlY3QgbV9jbGlwUmVjdDsKLSAgICBJbnRTaXplIG1f
b2Zmc2V0OyAgICAgICAvLyB4L3kgb2Zmc2V0IGZyb20gY29udGFpbmVyLgorICAgIEludFNpemUg
bV9wYWludE9mZnNldDsgICAgICAgLy8geC95IG9mZnNldCBmcm9tIGNvbnRhaW5lci4gIEluY2x1
ZGVzIHJlbGF0aXZlIHBvc2l0aW9uaW5nIGFuZCBzY3JvbGwgb2Zmc2V0cy4KKyAgICBJbnRTaXpl
IG1fbGF5b3V0T2Zmc2V0OyAgICAgIC8vIHgveSBvZmZzZXQgZnJvbSBjb250YWluZXIuICBEb2Vz
IG5vdCBpbmNsdWRlIHJlbGF0aXZlIHBvc2l0aW9uaW5nIG9yIHNjcm9sbCBvZmZzZXRzLgogICAg
IEludFNpemUgbV9sYXlvdXREZWx0YTsgIC8vIFRyYW5zaWVudCBvZmZzZXQgZnJvbSB0aGUgZmlu
YWwgcG9zaXRpb24gb2YgdGhlIG9iamVjdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IHVzZWQgdG8gZW5zdXJlIHRoYXQgcmVwYWludHMgaGFwcGVuIGluIHRoZSBjb3JyZWN0IHBsYWNl
LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSB0b3RhbCBkZWx0YSBh
Y2N1bXVsYXRlZCBmcm9tIHRoZSByb290LgorCisgICAgaW50IG1fcGFnZUhlaWdodDsgICAgICAg
ICAgICAvLyBUaGUgY3VycmVudCBwYWdlIGhlaWdodCBmb3IgdGhlIHBhZ2luYXRpb24gbW9kZWwg
dGhhdCBlbmNsb3NlcyB1cy4KKyAgICBJbnRTaXplIG1fcGFnZU9mZnNldDsgICAgICAgIC8vIFRo
ZSBvZmZzZXQgb2YgdGhlIHN0YXJ0IG9mIHRoZSBmaXJzdCBwYWdlIGluIHRoZSBuZWFyZXN0IGVu
Y2xvc2luZyBwYWdpbmF0aW9uIG1vZGVsLgorICAgIENvbHVtbkluZm8qIG1fY29sdW1uSW5mbzsg
ICAgLy8gSWYgdGhlIGVuY2xvc2luZyBwYWdpbmF0aW9uIG1vZGVsIGlzIGEgY29sdW1uIG1vZGVs
LCB0aGVuIHRoaXMgd2lsbCBzdG9yZSBjb2x1bW4gaW5mb3JtYXRpb24gZm9yIGVhc3kgcmV0cmll
dmFsL21hbmlwdWxhdGlvbi4KKwogICAgIExheW91dFN0YXRlKiBtX25leHQ7CiAjaWZuZGVmIE5E
RUJVRwogICAgIFJlbmRlck9iamVjdCogbV9yZW5kZXJlcjsKSW5kZXg6IFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9jay5jcHAJKHJldmlzaW9uIDY2OTAzKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsNyArMTE0LDcgQEAgUmVuZGVyQmxvY2s6
OlJlbmRlckJsb2NrKE5vZGUqIG5vZGUpCiAgICAgICAsIG1fZmxvYXRpbmdPYmplY3RzKDApCiAg
ICAgICAsIG1fcG9zaXRpb25lZE9iamVjdHMoMCkKICAgICAgICwgbV9jb250aW51YXRpb24oMCkK
LSAgICAgICwgbV9tYXhNYXJnaW4oMCkKKyAgICAgICwgbV9yYXJlRGF0YSgwKQogICAgICAgLCBt
X2xpbmVIZWlnaHQoLTEpCiB7CiAgICAgc2V0Q2hpbGRyZW5JbmxpbmUodHJ1ZSk7CkBAIC0xMjQs
NyArMTI0LDcgQEAgUmVuZGVyQmxvY2s6On5SZW5kZXJCbG9jaygpCiB7CiAgICAgZGVsZXRlIG1f
ZmxvYXRpbmdPYmplY3RzOwogICAgIGRlbGV0ZSBtX3Bvc2l0aW9uZWRPYmplY3RzOwotICAgIGRl
bGV0ZSBtX21heE1hcmdpbjsKKyAgICBkZWxldGUgbV9yYXJlRGF0YTsKICAgICAKICAgICBpZiAo
aGFzQ29sdW1ucygpKQogICAgICAgICBkZWxldGUgZ0NvbHVtbkluZm9NYXAtPnRha2UodGhpcyk7
CkBAIC0xMTEyLDcgKzExMTIsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXQoKQogICAgICAg
ICBjbGVhckxheW91dE92ZXJmbG93KCk7CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJs
b2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbikKK3ZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2Nr
KGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgaW50IHBhZ2VIZWlnaHQpCiB7CiAgICAgQVNTRVJUKG5l
ZWRzTGF5b3V0KCkpOwogCkBAIC0xMTIyLDkgKzExMjIsNiBAQCB2b2lkIFJlbmRlckJsb2NrOjps
YXlvdXRCbG9jayhib29sIHJlbGF5CiAgICAgaWYgKCFyZWxheW91dENoaWxkcmVuICYmIGxheW91
dE9ubHlQb3NpdGlvbmVkT2JqZWN0cygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBMYXlvdXRS
ZXBhaW50ZXIgcmVwYWludGVyKCp0aGlzLCBtX2V2ZXJIYWRMYXlvdXQgJiYgY2hlY2tGb3JSZXBh
aW50RHVyaW5nTGF5b3V0KCkpOwotICAgIExheW91dFN0YXRlTWFpbnRhaW5lciBzdGF0ZVB1c2hl
cih2aWV3KCksIHRoaXMsIEludFNpemUoeCgpLCB5KCkpLCBoYXNDb2x1bW5zKCkgfHwgaGFzVHJh
bnNmb3JtKCkgfHwgaGFzUmVmbGVjdGlvbigpKTsKLQogICAgIGludCBvbGRXaWR0aCA9IHdpZHRo
KCk7CiAgICAgaW50IG9sZENvbHVtbldpZHRoID0gZGVzaXJlZENvbHVtbldpZHRoKCk7CiAKQEAg
LTExNDAsNiArMTEzNywyOCBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayhib29sIHJl
bGF5CiAKICAgICBpbnQgcHJldmlvdXNIZWlnaHQgPSBoZWlnaHQoKTsKICAgICBzZXRIZWlnaHQo
MCk7CisgICAgYm9vbCBoYXNTcGVjaWZpZWRQYWdlSGVpZ2h0ID0gZmFsc2U7CisgICAgQ29sdW1u
SW5mbyogY29sSW5mbyA9IGNvbHVtbkluZm8oKTsKKyAgICBpZiAoaGFzQ29sdW1ucygpKSB7Cisg
ICAgICAgIGlmICghcGFnZUhlaWdodCkgeworICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBnbyBh
aGVhZCBhbmQgc2V0IG91ciBleHBsaWNpdCBwYWdlIGhlaWdodCBpZiBvbmUgZXhpc3RzLCBzbyB0
aGF0IHdlIGNhbgorICAgICAgICAgICAgLy8gYXZvaWQgZG9pbmcgdHdvIGxheW91dCBwYXNzZXMu
CisgICAgICAgICAgICBjYWxjSGVpZ2h0KCk7CisgICAgICAgICAgICBpbnQgY29sdW1uSGVpZ2h0
ID0gY29udGVudEhlaWdodCgpOworICAgICAgICAgICAgaWYgKGNvbHVtbkhlaWdodCA+IDApIHsK
KyAgICAgICAgICAgICAgICBwYWdlSGVpZ2h0ID0gY29sdW1uSGVpZ2h0OworICAgICAgICAgICAg
ICAgIGhhc1NwZWNpZmllZFBhZ2VIZWlnaHQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgc2V0SGVpZ2h0KDApOworICAgICAgICB9CisgICAgICAgIGlmIChjb2xJbmZvLT5jb2x1
bW5IZWlnaHQoKSAhPSBwYWdlSGVpZ2h0ICYmIG1fZXZlckhhZExheW91dCkgeworICAgICAgICAg
ICAgY29sSW5mby0+c2V0Q29sdW1uSGVpZ2h0KHBhZ2VIZWlnaHQpOworICAgICAgICAgICAgbWFy
a0Rlc2NlbmRhbnRCbG9ja3NBbmRMaW5lc0ZvckxheW91dCgpOyAvLyBXZSBuZWVkIHRvIGRpcnR5
IGFsbCBkZXNjZW5kYW50IGJsb2NrcyBhbmQgbGluZXMsIHNpbmNlIHRoZSBjb2x1bW4gaGVpZ2h0
IGlzIGRpZmZlcmVudCBub3cuCisgICAgICAgIH0KKyAgICB9CisKKyAgICBMYXlvdXRSZXBhaW50
ZXIgcmVwYWludGVyKCp0aGlzLCBtX2V2ZXJIYWRMYXlvdXQgJiYgY2hlY2tGb3JSZXBhaW50RHVy
aW5nTGF5b3V0KCkpOworICAgIExheW91dFN0YXRlTWFpbnRhaW5lciBzdGF0ZVB1c2hlcih2aWV3
KCksIHRoaXMsIEludFNpemUoeCgpLCB5KCkpLCBoYXNDb2x1bW5zKCkgfHwgaGFzVHJhbnNmb3Jt
KCkgfHwgaGFzUmVmbGVjdGlvbigpLCBwYWdlSGVpZ2h0LCBjb2xJbmZvKTsKIAogICAgIC8vIFdl
IHVzZSBmb3VyIHZhbHVlcywgbWF4VG9wUG9zLCBtYXhUb3BOZWcsIG1heEJvdHRvbVBvcywgYW5k
IG1heEJvdHRvbU5lZywgdG8gdHJhY2sKICAgICAvLyBvdXIgY3VycmVudCBtYXhpbWFsIHBvc2l0
aXZlIGFuZCBuZWdhdGl2ZSBtYXJnaW5zLiAgVGhlc2UgdmFsdWVzIGFyZSB1c2VkIHdoZW4gd2UK
QEAgLTExODksMTAgKzEyMDgsOSBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayhib29s
IHJlbGF5CiAgICAgaWYgKGZsb2F0Qm90dG9tKCkgPiAoaGVpZ2h0KCkgLSB0b0FkZCkgJiYgZXhw
YW5kc1RvRW5jbG9zZU92ZXJoYW5naW5nRmxvYXRzKCkpCiAgICAgICAgIHNldEhlaWdodChmbG9h
dEJvdHRvbSgpICsgdG9BZGQpOwogICAgIAotICAgIC8vIE5vdyBsYXkgb3V0IG91ciBjb2x1bW5z
IHdpdGhpbiB0aGlzIGludHJpbnNpYyBoZWlnaHQsIHNpbmNlIHRoZXkgY2FuIHNsaWdodGx5IGFm
ZmVjdCB0aGUgaW50cmluc2ljIGhlaWdodCBhcwotICAgIC8vIHdlIGFkanVzdCBmb3IgY2xlYW4g
Y29sdW1uIGJyZWFrcy4KLSAgICBpbnQgc2luZ2xlQ29sdW1uQm90dG9tID0gbGF5b3V0Q29sdW1u
cygpOwotCisgICAgaWYgKGxheW91dENvbHVtbnMoaGFzU3BlY2lmaWVkUGFnZUhlaWdodCwgcGFn
ZUhlaWdodCwgc3RhdGVQdXNoZXIpKQorICAgICAgICByZXR1cm47CisgCiAgICAgLy8gQ2FsY3Vs
YXRlIG91ciBuZXcgaGVpZ2h0LgogICAgIGludCBvbGRIZWlnaHQgPSBoZWlnaHQoKTsKICAgICBj
YWxjSGVpZ2h0KCk7CkBAIC0xMjA3LDIxICsxMjI1LDE4IEBAIHZvaWQgUmVuZGVyQmxvY2s6Omxh
eW91dEJsb2NrKGJvb2wgcmVsYXkKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIFdlIGhhdmUgdG8gcmViYWxhbmNlIGNvbHVt
bnMgdG8gdGhlIG5ldyBoZWlnaHQuCi0gICAgICAgIGxheW91dENvbHVtbnMoc2luZ2xlQ29sdW1u
Qm90dG9tKTsKICAgICB9CiAKICAgICBpZiAocHJldmlvdXNIZWlnaHQgIT0gaGVpZ2h0KCkpCiAg
ICAgICAgIHJlbGF5b3V0Q2hpbGRyZW4gPSB0cnVlOwogCi0gICAgLy8gVGhpcyBjaGVjayBpcyBk
ZXNpZ25lZCB0byBjYXRjaCBhbnlvbmUKLSAgICAvLyB3aG8gd2Fzbid0IGdvaW5nIHRvIHByb3Bh
Z2F0ZSBmbG9hdCBpbmZvcm1hdGlvbiB1cCB0byB0aGUgcGFyZW50IGFuZCB5ZXQgY291bGQgcG90
ZW50aWFsbHkgYmUgcGFpbnRlZCBieSBpdHMgYW5jZXN0b3IuCi0gICAgaWYgKGlzUm9vdCgpIHx8
IGV4cGFuZHNUb0VuY2xvc2VPdmVyaGFuZ2luZ0Zsb2F0cygpKQotICAgICAgICBhZGRPdmVyZmxv
d0Zyb21GbG9hdHMoKTsKLQogICAgIC8vIEFkZCBvdmVyZmxvdyBmcm9tIGNoaWxkcmVuICh1bmxl
c3Mgd2UncmUgbXVsdGktY29sdW1uLCBzaW5jZSBpbiB0aGF0IGNhc2UgYWxsIG91ciBjaGlsZCBv
dmVyZmxvdyBpcyBjbGlwcGVkIGFueXdheSkuCiAgICAgaWYgKCFoYXNDb2x1bW5zKCkpIHsKKyAg
ICAgICAgLy8gVGhpcyBjaGVjayBpcyBkZXNpZ25lZCB0byBjYXRjaCBhbnlvbmUKKyAgICAgICAg
Ly8gd2hvIHdhc24ndCBnb2luZyB0byBwcm9wYWdhdGUgZmxvYXQgaW5mb3JtYXRpb24gdXAgdG8g
dGhlIHBhcmVudCBhbmQgeWV0IGNvdWxkIHBvdGVudGlhbGx5IGJlIHBhaW50ZWQgYnkgaXRzIGFu
Y2VzdG9yLgorICAgICAgICBpZiAoaXNSb290KCkgfHwgZXhwYW5kc1RvRW5jbG9zZU92ZXJoYW5n
aW5nRmxvYXRzKCkpCisgICAgICAgICAgICBhZGRPdmVyZmxvd0Zyb21GbG9hdHMoKTsKKwogICAg
ICAgICBpZiAoY2hpbGRyZW5JbmxpbmUoKSkKICAgICAgICAgICAgIGFkZE92ZXJmbG93RnJvbUlu
bGluZUNoaWxkcmVuKCk7CiAgICAgICAgIGVsc2UKQEAgLTEyMzcsNiArMTI1Miw5IEBAIHZvaWQg
UmVuZGVyQmxvY2s6OmxheW91dEJsb2NrKGJvb2wgcmVsYXkKICAgICAKICAgICBzdGF0ZVB1c2hl
ci5wb3AoKTsKIAorICAgIGlmICh2aWV3KCktPmxheW91dFN0YXRlKCktPm1fcGFnZUhlaWdodCkK
KyAgICAgICAgc2V0UGFnZVkodmlldygpLT5sYXlvdXRTdGF0ZSgpLT5wYWdlWSh5KCkpKTsKKwog
ICAgIC8vIFVwZGF0ZSBvdXIgc2Nyb2xsIGluZm9ybWF0aW9uIGlmIHdlJ3JlIG92ZXJmbG93OmF1
dG8vc2Nyb2xsL2hpZGRlbiBub3cgdGhhdCB3ZSBrbm93IGlmCiAgICAgLy8gd2Ugb3ZlcmZsb3cg
b3Igbm90LgogICAgIHVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgpOwpAQCAtMTQ4NSw3ICsx
NTAzLDggQEAgaW50IFJlbmRlckJsb2NrOjpjb2xsYXBzZU1hcmdpbnMoUmVuZGVyQgogICAgIGlm
IChtYXJnaW5JbmZvLnF1aXJrQ29udGFpbmVyKCkgJiYgbWFyZ2luSW5mby5hdFRvcE9mQmxvY2so
KSAmJiAocG9zVG9wIC0gbmVnVG9wKSkKICAgICAgICAgbWFyZ2luSW5mby5zZXRUb3BRdWlyayh0
b3BRdWlyayk7CiAKLSAgICBpbnQgeXBvcyA9IGhlaWdodCgpOworICAgIGludCBiZWZvcmVDb2xs
YXBzZVkgPSBoZWlnaHQoKTsKKyAgICBpbnQgeXBvcyA9IGJlZm9yZUNvbGxhcHNlWTsKICAgICBp
ZiAoY2hpbGQtPmlzU2VsZkNvbGxhcHNpbmdCbG9jaygpKSB7CiAgICAgICAgIC8vIFRoaXMgY2hp
bGQgaGFzIG5vIGhlaWdodC4gIFdlIG5lZWQgdG8gY29tcHV0ZSBvdXIKICAgICAgICAgLy8gcG9z
aXRpb24gYmVmb3JlIHdlIGNvbGxhcHNlIHRoZSBjaGlsZCdzIG1hcmdpbnMgdG9nZXRoZXIsCkBA
IC0xNTI3LDYgKzE1NDYsMTQgQEAgaW50IFJlbmRlckJsb2NrOjpjb2xsYXBzZU1hcmdpbnMoUmVu
ZGVyQgogICAgICAgICAgICAgbWFyZ2luSW5mby5zZXRCb3R0b21RdWlyayhjaGlsZC0+aXNCb3R0
b21NYXJnaW5RdWlyaygpIHx8IHN0eWxlKCktPm1hcmdpbkJvdHRvbUNvbGxhcHNlKCkgPT0gTURJ
U0NBUkQpOwogICAgIH0KICAgICAKKyAgICAvLyBJZiBtYXJnaW5zIHdvdWxkIHB1bGwgdXMgcGFz
dCB0aGUgdG9wIG9mIHRoZSBuZXh0IHBhZ2UsIHRoZW4gd2UgbmVlZCB0byBwdWxsIGJhY2sgYW5k
IHByZXRlbmQgbGlrZSB0aGUgbWFyZ2lucworICAgIC8vIGNvbGxhcHNlZCBpbnRvIHRoZSBwYWdl
IGVkZ2UuCisgICAgYm9vbCBwYWdpbmF0ZWQgPSB2aWV3KCktPmxheW91dFN0YXRlKCktPnBhZ2lu
YXRlZCgpOworICAgIGlmIChwYWdpbmF0ZWQgJiYgeXBvcyA+IGJlZm9yZUNvbGxhcHNlWSkgewor
ICAgICAgICBpbnQgb2xkWSA9IHlwb3M7CisgICAgICAgIHlwb3MgPSBtaW4oeXBvcywgbmV4dFBh
Z2VUb3AoYmVmb3JlQ29sbGFwc2VZKSk7CisgICAgICAgIHNldEhlaWdodChoZWlnaHQoKSArICh5
cG9zIC0gb2xkWSkpOworICAgIH0KICAgICByZXR1cm4geXBvczsKIH0KIApAQCAtMTU4Niw3ICsx
NjEzLDI0IEBAIGludCBSZW5kZXJCbG9jazo6ZXN0aW1hdGVWZXJ0aWNhbFBvc2l0aW8KICAgICAg
ICAgaW50IGNoaWxkTWFyZ2luVG9wID0gY2hpbGQtPnNlbGZOZWVkc0xheW91dCgpID8gY2hpbGQt
Pm1hcmdpblRvcCgpIDogY2hpbGQtPmNvbGxhcHNlZE1hcmdpblRvcCgpOwogICAgICAgICB5UG9z
RXN0aW1hdGUgKz0gbWF4KG1hcmdpbkluZm8ubWFyZ2luKCksIGNoaWxkTWFyZ2luVG9wKTsKICAg
ICB9CisgICAgCisgICAgYm9vbCBwYWdpbmF0ZWQgPSB2aWV3KCktPmxheW91dFN0YXRlKCktPnBh
Z2luYXRlZCgpOworCisgICAgLy8gQWRqdXN0IHlQb3NFc3RpbWF0ZSBkb3duIHRvIHRoZSBuZXh0
IHBhZ2UgaWYgdGhlIG1hcmdpbnMgYXJlIHNvIGxhcmdlIHRoYXQgd2UgZG9uJ3QgZml0IG9uIHRo
ZSBjdXJyZW50CisgICAgLy8gcGFnZS4KKyAgICBpZiAocGFnaW5hdGVkICYmIHlQb3NFc3RpbWF0
ZSA+IGhlaWdodCgpKQorICAgICAgICB5UG9zRXN0aW1hdGUgPSBtaW4oeVBvc0VzdGltYXRlLCBu
ZXh0UGFnZVRvcChoZWlnaHQoKSkpOworCiAgICAgeVBvc0VzdGltYXRlICs9IGdldENsZWFyRGVs
dGEoY2hpbGQsIHlQb3NFc3RpbWF0ZSk7CisgICAgCisgICAgaWYgKHBhZ2luYXRlZCkgeworICAg
ICAgICAvLyBJZiB0aGUgb2JqZWN0IGhhcyBhIHBhZ2Ugb3IgY29sdW1uIGJyZWFrIHZhbHVlIG9m
ICJiZWZvcmUiLCB0aGVuIHdlIHNob3VsZCBzaGlmdCB0byB0aGUgdG9wIG9mIHRoZSBuZXh0IHBh
Z2UuCisgICAgICAgIHlQb3NFc3RpbWF0ZSA9IGFwcGx5QmVmb3JlQnJlYWsoY2hpbGQsIHlQb3NF
c3RpbWF0ZSk7CisgICAgCisgICAgICAgIC8vIEZvciByZXBsYWNlZCBlbGVtZW50cyBhbmQgc2Ny
b2xsZWQgZWxlbWVudHMsIHdlIHdhbnQgdG8gc2hpZnQgdGhlbSB0byB0aGUgbmV4dCBwYWdlIGlm
IHRoZXkgZG9uJ3QgZml0IG9uIHRoZSBjdXJyZW50IG9uZS4KKyAgICAgICAgeVBvc0VzdGltYXRl
ID0gYWRqdXN0Rm9yVW5zcGxpdHRhYmxlQ2hpbGQoY2hpbGQsIHlQb3NFc3RpbWF0ZSk7CisgICAg
fQorCiAgICAgcmV0dXJuIHlQb3NFc3RpbWF0ZTsKIH0KIApAQCAtMTc3Niw4ICsxODIwLDkgQEAg
dm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2tDaGlsZChSZW5kZQogICAgIHZpZXcoKS0+YWRk
TGF5b3V0RGVsdGEoSW50U2l6ZSgwLCBjaGlsZC0+eSgpIC0geVBvc0VzdGltYXRlKSk7CiAgICAg
Y2hpbGQtPnNldExvY2F0aW9uKGNoaWxkLT54KCksIHlQb3NFc3RpbWF0ZSk7CiAKKyAgICBSZW5k
ZXJCbG9jayogY2hpbGRCbG9ja0Zsb3cgPSBjaGlsZC0+aXNCbG9ja0Zsb3coKSA/IHRvUmVuZGVy
QmxvY2soY2hpbGQpIDogMDsKICAgICBib29sIG1hcmtEZXNjZW5kYW50c1dpdGhGbG9hdHMgPSBm
YWxzZTsKLSAgICBpZiAoeVBvc0VzdGltYXRlICE9IG9sZFJlY3QueSgpICYmICFjaGlsZC0+YXZv
aWRzRmxvYXRzKCkgJiYgY2hpbGQtPmlzQmxvY2tGbG93KCkgJiYgdG9SZW5kZXJCbG9jayhjaGls
ZCktPmNvbnRhaW5zRmxvYXRzKCkpCisgICAgaWYgKHlQb3NFc3RpbWF0ZSAhPSBvbGRSZWN0Lnko
KSAmJiAhY2hpbGQtPmF2b2lkc0Zsb2F0cygpICYmIGNoaWxkQmxvY2tGbG93ICYmIGNoaWxkQmxv
Y2tGbG93LT5jb250YWluc0Zsb2F0cygpKQogICAgICAgICBtYXJrRGVzY2VuZGFudHNXaXRoRmxv
YXRzID0gdHJ1ZTsKICAgICBlbHNlIGlmICghY2hpbGQtPmF2b2lkc0Zsb2F0cygpIHx8IGNoaWxk
LT5zaHJpbmtUb0F2b2lkRmxvYXRzKCkpIHsKICAgICAgICAgLy8gSWYgYW4gZWxlbWVudCBtaWdo
dCBiZSBhZmZlY3RlZCBieSB0aGUgcHJlc2VuY2Ugb2YgZmxvYXRzLCB0aGVuIGFsd2F5cyBtYXJr
IGl0IGZvcgpAQCAtMTc4NywxOCArMTgzMiwyNCBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRC
bG9ja0NoaWxkKFJlbmRlCiAgICAgICAgICAgICBtYXJrRGVzY2VuZGFudHNXaXRoRmxvYXRzID0g
dHJ1ZTsKICAgICB9CiAKLSAgICBpZiAoY2hpbGQtPmlzUmVuZGVyQmxvY2soKSkgeworICAgIGlm
IChjaGlsZEJsb2NrRmxvdykgewogICAgICAgICBpZiAobWFya0Rlc2NlbmRhbnRzV2l0aEZsb2F0
cykKLSAgICAgICAgICAgIHRvUmVuZGVyQmxvY2soY2hpbGQpLT5tYXJrQWxsRGVzY2VuZGFudHNX
aXRoRmxvYXRzRm9yTGF5b3V0KCk7Ci0KKyAgICAgICAgICAgIGNoaWxkQmxvY2tGbG93LT5tYXJr
QWxsRGVzY2VuZGFudHNXaXRoRmxvYXRzRm9yTGF5b3V0KCk7CiAgICAgICAgIHByZXZpb3VzRmxv
YXRCb3R0b20gPSBtYXgocHJldmlvdXNGbG9hdEJvdHRvbSwgb2xkUmVjdC55KCkgKyB0b1JlbmRl
ckJsb2NrKGNoaWxkKS0+ZmxvYXRCb3R0b20oKSk7CiAgICAgfQogCisgICAgYm9vbCBwYWdpbmF0
ZWQgPSB2aWV3KCktPmxheW91dFN0YXRlKCktPnBhZ2luYXRlZCgpOworICAgIGlmIChwYWdpbmF0
ZWQgJiYgdmlldygpLT5sYXlvdXRTdGF0ZSgpLT5tX3BhZ2VIZWlnaHQgJiYgY2hpbGRCbG9ja0Zs
b3cgJiYgdmlldygpLT5sYXlvdXRTdGF0ZSgpLT5wYWdlWShjaGlsZC0+eSgpKSAhPSBjaGlsZEJs
b2NrRmxvdy0+cGFnZVkoKSkKKyAgICAgICAgY2hpbGRCbG9ja0Zsb3ctPnNldENoaWxkTmVlZHNM
YXlvdXQodHJ1ZSwgZmFsc2UpOworCiAgICAgYm9vbCBjaGlsZEhhZExheW91dCA9IGNoaWxkLT5t
X2V2ZXJIYWRMYXlvdXQ7CiAgICAgYm9vbCBjaGlsZE5lZWRlZExheW91dCA9IGNoaWxkLT5uZWVk
c0xheW91dCgpOwogICAgIGlmIChjaGlsZE5lZWRlZExheW91dCkKICAgICAgICAgY2hpbGQtPmxh
eW91dCgpOwogCisgICAgLy8gQ2FjaGUgaWYgd2UgYXJlIGF0IHRoZSB0b3Agb2YgdGhlIGJsb2Nr
IHJpZ2h0IG5vdy4KKyAgICBib29sIGF0VG9wT2ZCbG9jayA9IG1hcmdpbkluZm8uYXRUb3BPZkJs
b2NrKCk7CisKICAgICAvLyBOb3cgZGV0ZXJtaW5lIHRoZSBjb3JyZWN0IHlwb3MgYmFzZWQgb2Zm
IGV4YW1pbmF0aW9uIG9mIGNvbGxhcHNpbmcgbWFyZ2luCiAgICAgLy8gdmFsdWVzLgogICAgIGlu
dCB5QmVmb3JlQ2xlYXIgPSBjb2xsYXBzZU1hcmdpbnMoY2hpbGQsIG1hcmdpbkluZm8pOwpAQCAt
MTgwNiw2ICsxODU3LDMyIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrQ2hpbGQoUmVu
ZGUKICAgICAvLyBOb3cgY2hlY2sgZm9yIGNsZWFyLgogICAgIGludCB5QWZ0ZXJDbGVhciA9IGNs
ZWFyRmxvYXRzSWZOZWVkZWQoY2hpbGQsIG1hcmdpbkluZm8sIG9sZFRvcFBvc01hcmdpbiwgb2xk
VG9wTmVnTWFyZ2luLCB5QmVmb3JlQ2xlYXIpOwogICAgIAorICAgIGlmIChwYWdpbmF0ZWQpIHsK
KyAgICAgICAgaW50IG9sZFkgPSB5QWZ0ZXJDbGVhcjsKKyAgICAgICAgCisgICAgICAgIC8vIElm
IHRoZSBvYmplY3QgaGFzIGEgcGFnZSBvciBjb2x1bW4gYnJlYWsgdmFsdWUgb2YgImJlZm9yZSIs
IHRoZW4gd2Ugc2hvdWxkIHNoaWZ0IHRvIHRoZSB0b3Agb2YgdGhlIG5leHQgcGFnZS4KKyAgICAg
ICAgeUFmdGVyQ2xlYXIgPSBhcHBseUJlZm9yZUJyZWFrKGNoaWxkLCB5QWZ0ZXJDbGVhcik7Cisg
ICAgCisgICAgICAgIC8vIEZvciByZXBsYWNlZCBlbGVtZW50cyBhbmQgc2Nyb2xsZWQgZWxlbWVu
dHMsIHdlIHdhbnQgdG8gc2hpZnQgdGhlbSB0byB0aGUgbmV4dCBwYWdlIGlmIHRoZXkgZG9uJ3Qg
Zml0IG9uIHRoZSBjdXJyZW50IG9uZS4KKyAgICAgICAgeUFmdGVyQ2xlYXIgPSBhZGp1c3RGb3JV
bnNwbGl0dGFibGVDaGlsZChjaGlsZCwgeUFmdGVyQ2xlYXIpOworICAgICAgICAKKyAgICAgICAg
aWYgKGNoaWxkQmxvY2tGbG93ICYmIGNoaWxkQmxvY2tGbG93LT5wYWdpbmF0aW9uU3RydXQoKSkg
eworICAgICAgICAgICAgLy8gV2UgYXJlIHdpbGxpbmcgdG8gcHJvcGFnYXRlIG91dCB0byBvdXIg
cGFyZW50IGJsb2NrIGFzIGxvbmcgYXMgd2Ugd2VyZSBhdCB0aGUgdG9wIG9mIHRoZSBibG9jayBw
cmlvcgorICAgICAgICAgICAgLy8gdG8gY29sbGFwc2luZyBvdXIgbWFyZ2lucywgYW5kIGFzIGxv
bmcgYXMgd2UgZGlkbid0IGNsZWFyIG9yIG1vdmUgYXMgYSByZXN1bHQgb2Ygb3RoZXIgcGFnaW5h
dGlvbi4KKyAgICAgICAgICAgIGlmIChhdFRvcE9mQmxvY2sgJiYgb2xkWSA9PSB5QmVmb3JlQ2xl
YXIgJiYgIWlzUG9zaXRpb25lZCgpICYmICFpc1RhYmxlQ2VsbCgpKSB7CisgICAgICAgICAgICAg
ICAgLy8gRklYTUU6IFNob3VsZCByZWFsbHkgY2hlY2sgaWYgd2UncmUgZXhjZWVkaW5nIHRoZSBw
YWdlIGhlaWdodCBiZWZvcmUgcHJvcGFnYXRpbmcgdGhlIHN0cnV0LCBidXQgd2UgZG9uJ3QKKyAg
ICAgICAgICAgICAgICAvLyBoYXZlIGFsbCB0aGUgaW5mb3JtYXRpb24gdG8gZG8gc28gKHRoZSBz
dHJ1dCBvbmx5IGhhcyB0aGUgcmVtYWluaW5nIGFtb3VudCB0byBwdXNoKS4gIEdlY2tvIGdldHMg
dGhpcyB3cm9uZyB0b28KKyAgICAgICAgICAgICAgICAvLyBhbmQgcHVzaGVzIHRvIHRoZSBuZXh0
IHBhZ2UgYW55d2F5LCBzbyBub3QgdG9vIGNvbmNlcm5lZCBhYm91dCBpdC4KKyAgICAgICAgICAg
ICAgICBzZXRQYWdpbmF0aW9uU3RydXQoeUFmdGVyQ2xlYXIgKyBjaGlsZEJsb2NrRmxvdy0+cGFn
aW5hdGlvblN0cnV0KCkpOworICAgICAgICAgICAgICAgIGNoaWxkQmxvY2tGbG93LT5zZXRQYWdp
bmF0aW9uU3RydXQoMCk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICB5QWZ0
ZXJDbGVhciArPSBjaGlsZEJsb2NrRmxvdy0+cGFnaW5hdGlvblN0cnV0KCk7CisgICAgICAgIH0K
KworICAgICAgICAvLyBTaW1pbGFyIHRvIGhvdyB3ZSBhcHBseSBjbGVhcmFuY2UuICBHbyBhaGVh
ZCBhbmQgYm9vc3QgaGVpZ2h0KCkgdG8gYmUgdGhlIHBsYWNlIHdoZXJlIHdlJ3JlIGdvaW5nIHRv
IHBvc2l0aW9uIHRoZSBjaGlsZC4KKyAgICAgICAgc2V0SGVpZ2h0KGhlaWdodCgpICsgKHlBZnRl
ckNsZWFyIC0gb2xkWSkpOworICAgIH0KKwogICAgIHZpZXcoKS0+YWRkTGF5b3V0RGVsdGEoSW50
U2l6ZSgwLCB5UG9zRXN0aW1hdGUgLSB5QWZ0ZXJDbGVhcikpOwogICAgIGNoaWxkLT5zZXRMb2Nh
dGlvbihjaGlsZC0+eCgpLCB5QWZ0ZXJDbGVhcik7CiAKQEAgLTE4MTgsOCArMTg5NSwxMyBAQCB2
b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9ja0NoaWxkKFJlbmRlCiAgICAgICAgICAgICAvLyBT
byBnbyBhaGVhZCBhbmQgbWFyayB0aGUgaXRlbSBhcyBkaXJ0eS4KICAgICAgICAgICAgIGNoaWxk
LT5zZXRDaGlsZE5lZWRzTGF5b3V0KHRydWUsIGZhbHNlKTsKICAgICAgICAgfQotICAgICAgICBp
ZiAoIWNoaWxkLT5hdm9pZHNGbG9hdHMoKSAmJiBjaGlsZC0+aXNCbG9ja0Zsb3coKSAmJiB0b1Jl
bmRlckJsb2NrKGNoaWxkKS0+Y29udGFpbnNGbG9hdHMoKSkKLSAgICAgICAgICAgIHRvUmVuZGVy
QmxvY2soY2hpbGQpLT5tYXJrQWxsRGVzY2VuZGFudHNXaXRoRmxvYXRzRm9yTGF5b3V0KCk7Cisg
ICAgICAgIGlmIChjaGlsZEJsb2NrRmxvdykgeworICAgICAgICAgICAgaWYgKCFjaGlsZC0+YXZv
aWRzRmxvYXRzKCkgJiYgY2hpbGRCbG9ja0Zsb3ctPmNvbnRhaW5zRmxvYXRzKCkpCisgICAgICAg
ICAgICAgICAgY2hpbGRCbG9ja0Zsb3ctPm1hcmtBbGxEZXNjZW5kYW50c1dpdGhGbG9hdHNGb3JM
YXlvdXQoKTsKKyAgICAgICAgICAgIGlmIChwYWdpbmF0ZWQgJiYgIWNoaWxkLT5uZWVkc0xheW91
dCgpICYmIHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+bV9wYWdlSGVpZ2h0ICYmIHZpZXcoKS0+bGF5
b3V0U3RhdGUoKS0+cGFnZVkoY2hpbGQtPnkoKSkgIT0gY2hpbGRCbG9ja0Zsb3ctPnBhZ2VZKCkp
CisgICAgICAgICAgICAgICAgY2hpbGQtPnNldENoaWxkTmVlZHNMYXlvdXQodHJ1ZSwgZmFsc2Up
OworICAgICAgICB9CisKICAgICAgICAgLy8gT3VyIGd1ZXNzIHdhcyB3cm9uZy4gTWFrZSB0aGUg
Y2hpbGQgbGF5IGl0c2VsZiBvdXQgYWdhaW4uCiAgICAgICAgIGNoaWxkLT5sYXlvdXRJZk5lZWRl
ZCgpOwogICAgIH0KQEAgLTE4NDAsNyArMTkyMiw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91
dEJsb2NrQ2hpbGQoUmVuZGUKICAgICB9CiAgICAgLy8gSWYgdGhlIGNoaWxkIGhhcyBvdmVyaGFu
Z2luZyBmbG9hdHMgdGhhdCBpbnRydWRlIGludG8gZm9sbG93aW5nIHNpYmxpbmdzIChvciBwb3Nz
aWJseSBvdXQKICAgICAvLyBvZiB0aGlzIGJsb2NrKSwgdGhlbiB0aGUgcGFyZW50IGdldHMgbm90
aWZpZWQgb2YgdGhlIGZsb2F0cyBub3cuCi0gICAgaWYgKGNoaWxkLT5pc0Jsb2NrRmxvdygpICYm
IHRvUmVuZGVyQmxvY2soY2hpbGQpLT5jb250YWluc0Zsb2F0cygpKQorICAgIGlmIChjaGlsZEJs
b2NrRmxvdyAmJiBjaGlsZEJsb2NrRmxvdy0+Y29udGFpbnNGbG9hdHMoKSkKICAgICAgICAgbWF4
RmxvYXRCb3R0b20gPSBtYXgobWF4RmxvYXRCb3R0b20sIGFkZE92ZXJoYW5naW5nRmxvYXRzKHRv
UmVuZGVyQmxvY2soY2hpbGQpLCAtY2hpbGQtPngoKSwgLWNoaWxkLT55KCksICFjaGlsZE5lZWRl
ZExheW91dCkpOwogCiAgICAgSW50U2l6ZSBjaGlsZE9mZnNldChjaGlsZC0+eCgpIC0gb2xkUmVj
dC54KCksIGNoaWxkLT55KCkgLSBvbGRSZWN0LnkoKSk7CkBAIC0xODU5LDYgKzE5NDEsMTMgQEAg
dm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2tDaGlsZChSZW5kZQogICAgICAgICBjaGlsZC0+
cmVwYWludE92ZXJoYW5naW5nRmxvYXRzKHRydWUpOwogICAgIH0KIAorICAgIGlmIChwYWdpbmF0
ZWQpIHsKKyAgICAgICAgLy8gQ2hlY2sgZm9yIGFuIGFmdGVyIHBhZ2UvY29sdW1uIGJyZWFrLgor
ICAgICAgICBpbnQgbmV3SGVpZ2h0ID0gYXBwbHlBZnRlckJyZWFrKGNoaWxkLCBoZWlnaHQoKSwg
bWFyZ2luSW5mbyk7CisgICAgICAgIGlmIChuZXdIZWlnaHQgIT0gaGVpZ2h0KCkpCisgICAgICAg
ICAgICBzZXRIZWlnaHQobmV3SGVpZ2h0KTsKKyAgICB9CisKICAgICBBU1NFUlQob2xkTGF5b3V0
RGVsdGEgPT0gdmlldygpLT5sYXlvdXREZWx0YSgpKTsKIH0KIApAQCAtMTg4OSw2ICsxOTc4LDkg
QEAgYm9vbCBSZW5kZXJCbG9jazo6bGF5b3V0T25seVBvc2l0aW9uZWRPYgogdm9pZCBSZW5kZXJC
bG9jazo6bGF5b3V0UG9zaXRpb25lZE9iamVjdHMoYm9vbCByZWxheW91dENoaWxkcmVuKQogewog
ICAgIGlmIChtX3Bvc2l0aW9uZWRPYmplY3RzKSB7CisgICAgICAgIGlmIChoYXNDb2x1bW5zKCkp
CisgICAgICAgICAgICB2aWV3KCktPmxheW91dFN0YXRlKCktPmNsZWFyUGFnaW5hdGlvbkluZm9y
bWF0aW9uKCk7IC8vIFBvc2l0aW9uZWQgb2JqZWN0cyBhcmUgbm90IHBhcnQgb2YgdGhlIGNvbHVt
biBmbG93LCBzbyB0aGV5IGRvbid0IHBhZ2luYXRlIHdpdGggdGhlIGNvbHVtbnMuCisKICAgICAg
ICAgUmVuZGVyQm94KiByOwogICAgICAgICBJdGVyYXRvciBlbmQgPSBtX3Bvc2l0aW9uZWRPYmpl
Y3RzLT5lbmQoKTsKICAgICAgICAgZm9yIChJdGVyYXRvciBpdCA9IG1fcG9zaXRpb25lZE9iamVj
dHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewpAQCAtMTkxMCw2ICsyMDAyLDkgQEAgdm9p
ZCBSZW5kZXJCbG9jazo6bGF5b3V0UG9zaXRpb25lZE9iamVjdAogICAgICAgICAgICAgICAgIHIt
PnRyeUxheW91dERvaW5nUG9zaXRpb25lZE1vdmVtZW50T25seSgpOwogICAgICAgICAgICAgci0+
bGF5b3V0SWZOZWVkZWQoKTsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGhhc0Nv
bHVtbnMoKSkKKyAgICAgICAgICAgIHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+bV9jb2x1bW5JbmZv
ID0gY29sdW1uSW5mbygpOyAvLyBGSVhNRTogS2luZCBvZiBncm9zcy4gV2UganVzdCBwdXQgdGhp
cyBiYWNrIGludG8gdGhlIGxheW91dCBzdGF0ZSBzbyB0aGF0IHBvcCgpIHdpbGwgd29yay4KICAg
ICB9CiB9CiAKQEAgLTE5OTcsMTIgKzIwOTIsMTIgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRD
b2x1bW5SdWxlcyhQYWludAogCiAgICAgLy8gV2UgbmVlZCB0byBkbyBtdWx0aXBsZSBwYXNzZXMs
IGJyZWFraW5nIHVwIG91ciBjaGlsZCBwYWludGluZyBpbnRvIHN0cmlwcy4KICAgICBDb2x1bW5J
bmZvKiBjb2xJbmZvID0gY29sdW1uSW5mbygpOwotICAgIHVuc2lnbmVkIGNvbENvdW50ID0gY29s
SW5mby0+Y29sdW1uQ291bnQoKTsKKyAgICB1bnNpZ25lZCBjb2xDb3VudCA9IGNvbHVtbkNvdW50
KGNvbEluZm8pOwogICAgIGludCBjdXJyWE9mZnNldCA9IHN0eWxlKCktPmRpcmVjdGlvbigpID09
IExUUiA/IDAgOiBjb250ZW50V2lkdGgoKTsKICAgICBpbnQgcnVsZUFkZCA9IGJvcmRlckxlZnQo
KSArIHBhZGRpbmdMZWZ0KCk7CiAgICAgaW50IHJ1bGVYID0gc3R5bGUoKS0+ZGlyZWN0aW9uKCkg
PT0gTFRSID8gMCA6IGNvbnRlbnRXaWR0aCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBjb2xDb3VudDsgaSsrKSB7Ci0gICAgICAgIEludFJlY3QgY29sUmVjdCA9IGNvbEluZm8tPmNv
bHVtblJlY3RBdChpKTsKKyAgICAgICAgSW50UmVjdCBjb2xSZWN0ID0gY29sdW1uUmVjdEF0KGNv
bEluZm8sIGkpOwogCiAgICAgICAgIC8vIE1vdmUgdG8gdGhlIG5leHQgcG9zaXRpb24uCiAgICAg
ICAgIGlmIChzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIpIHsKQEAgLTIwMzMsMTQgKzIxMjgs
MTQgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRDb2x1bW5Db250ZW50cyhQYQogICAgIEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0OwogICAgIGludCBjb2xHYXAg
PSBjb2x1bW5HYXAoKTsKICAgICBDb2x1bW5JbmZvKiBjb2xJbmZvID0gY29sdW1uSW5mbygpOwot
ICAgIHVuc2lnbmVkIGNvbENvdW50ID0gY29sSW5mby0+Y29sdW1uQ291bnQoKTsKKyAgICB1bnNp
Z25lZCBjb2xDb3VudCA9IGNvbHVtbkNvdW50KGNvbEluZm8pOwogICAgIGlmICghY29sQ291bnQp
CiAgICAgICAgIHJldHVybjsKLSAgICBpbnQgY3VyclhPZmZzZXQgPSBzdHlsZSgpLT5kaXJlY3Rp
b24oKSA9PSBMVFIgPyAwIDogY29udGVudFdpZHRoKCkgLSBjb2xJbmZvLT5jb2x1bW5SZWN0QXQo
MCkud2lkdGgoKTsKKyAgICBpbnQgY3VyclhPZmZzZXQgPSBzdHlsZSgpLT5kaXJlY3Rpb24oKSA9
PSBMVFIgPyAwIDogY29udGVudFdpZHRoKCkgLSBjb2x1bW5SZWN0QXQoY29sSW5mbywgMCkud2lk
dGgoKTsKICAgICBpbnQgY3VycllPZmZzZXQgPSAwOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBjb2xDb3VudDsgaSsrKSB7CiAgICAgICAgIC8vIEZvciBlYWNoIHJlY3QsIHdlIGNsaXAg
dG8gdGhlIHJlY3QsIGFuZCB0aGVuIHdlIGFkanVzdCBvdXIgY29vcmRzLgotICAgICAgICBJbnRS
ZWN0IGNvbFJlY3QgPSBjb2xJbmZvLT5jb2x1bW5SZWN0QXQoaSk7CisgICAgICAgIEludFJlY3Qg
Y29sUmVjdCA9IGNvbHVtblJlY3RBdChjb2xJbmZvLCBpKTsKICAgICAgICAgY29sUmVjdC5tb3Zl
KHR4LCB0eSk7CiAgICAgICAgIFBhaW50SW5mbyBpbmZvKHBhaW50SW5mbyk7CiAgICAgICAgIGlu
Zm8ucmVjdC5pbnRlcnNlY3QoY29sUmVjdCk7CkBAIC0yMDk4LDE0ICsyMTkzLDEzIEBAIHZvaWQg
UmVuZGVyQmxvY2s6OnBhaW50Q2hpbGRyZW4oUGFpbnRJbmYKICAgICBpbmZvLnVwZGF0ZVBhaW50
aW5nUm9vdEZvckNoaWxkcmVuKHRoaXMpOwogICAgIAogICAgIFJlbmRlclZpZXcqIHJlbmRlclZp
ZXcgPSB2aWV3KCk7Ci0gICAgYm9vbCB1c2VQcmludFJlY3QgPSAhcmVuZGVyVmlldy0+cHJpbnRS
ZWN0KCkuaXNFbXB0eSgpICYmICFkb2N1bWVudCgpLT5zZXR0aW5ncygpLT5wYWdpbmF0ZUR1cmlu
Z0xheW91dEVuYWJsZWQoKTsKKyAgICBib29sIHVzZVByaW50UmVjdCA9ICFyZW5kZXJWaWV3LT5w
cmludFJlY3QoKS5pc0VtcHR5KCk7CiAgICAgCiAgICAgYm9vbCBjaGVja1BhZ2VCcmVha3MgPSBk
b2N1bWVudCgpLT5wYWdpbmF0ZWQoKSAmJiAhZG9jdW1lbnQoKS0+c2V0dGluZ3MoKS0+cGFnaW5h
dGVEdXJpbmdMYXlvdXRFbmFibGVkKCk7Ci0gICAgYm9vbCBjaGVja0NvbHVtbkJyZWFrcyA9ICFj
aGVja1BhZ2VCcmVha3MgJiYgdXNlUHJpbnRSZWN0OwogCiAgICAgZm9yIChSZW5kZXJCb3gqIGNo
aWxkID0gZmlyc3RDaGlsZEJveCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmdC
b3goKSkgeyAgICAgICAgCiAgICAgICAgIC8vIENoZWNrIGZvciBwYWdlLWJyZWFrLWJlZm9yZTog
YWx3YXlzLCBhbmQgaWYgaXQncyBzZXQsIGJyZWFrIGFuZCBiYWlsLgotICAgICAgICBib29sIGNo
ZWNrQmVmb3JlQWx3YXlzID0gIWNoaWxkcmVuSW5saW5lKCkgJiYgKChjaGVja1BhZ2VCcmVha3Mg
JiYgY2hpbGQtPnN0eWxlKCktPnBhZ2VCcmVha0JlZm9yZSgpID09IFBCQUxXQVlTKSB8fCAoY2hl
Y2tDb2x1bW5CcmVha3MgJiYgY2hpbGQtPnN0eWxlKCktPmNvbHVtbkJyZWFrQmVmb3JlKCkgPT0g
UEJBTFdBWVMpKTsKKyAgICAgICAgYm9vbCBjaGVja0JlZm9yZUFsd2F5cyA9ICFjaGlsZHJlbklu
bGluZSgpICYmIChjaGVja1BhZ2VCcmVha3MgJiYgY2hpbGQtPnN0eWxlKCktPnBhZ2VCcmVha0Jl
Zm9yZSgpID09IFBCQUxXQVlTKTsKICAgICAgICAgaWYgKGNoZWNrQmVmb3JlQWx3YXlzCiAgICAg
ICAgICAgICAmJiAodHkgKyBjaGlsZC0+eSgpKSA+IHBhaW50SW5mby5yZWN0LnkoKQogICAgICAg
ICAgICAgJiYgKHR5ICsgY2hpbGQtPnkoKSkgPCBwYWludEluZm8ucmVjdC5ib3R0b20oKSkgewpA
QCAtMjEyOCw3ICsyMjIyLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRDaGlsZHJlbihQYWlu
dEluZgogICAgICAgICAgICAgY2hpbGQtPnBhaW50KGluZm8sIHR4LCB0eSk7CiAKICAgICAgICAg
Ly8gQ2hlY2sgZm9yIHBhZ2UtYnJlYWstYWZ0ZXI6IGFsd2F5cywgYW5kIGlmIGl0J3Mgc2V0LCBi
cmVhayBhbmQgYmFpbC4KLSAgICAgICAgYm9vbCBjaGVja0FmdGVyQWx3YXlzID0gIWNoaWxkcmVu
SW5saW5lKCkgJiYgKChjaGVja1BhZ2VCcmVha3MgJiYgY2hpbGQtPnN0eWxlKCktPnBhZ2VCcmVh
a0FmdGVyKCkgPT0gUEJBTFdBWVMpIHx8IChjaGVja0NvbHVtbkJyZWFrcyAmJiBjaGlsZC0+c3R5
bGUoKS0+Y29sdW1uQnJlYWtBZnRlcigpID09IFBCQUxXQVlTKSk7CisgICAgICAgIGJvb2wgY2hl
Y2tBZnRlckFsd2F5cyA9ICFjaGlsZHJlbklubGluZSgpICYmIChjaGVja1BhZ2VCcmVha3MgJiYg
Y2hpbGQtPnN0eWxlKCktPnBhZ2VCcmVha0FmdGVyKCkgPT0gUEJBTFdBWVMpOwogICAgICAgICBp
ZiAoY2hlY2tBZnRlckFsd2F5cwogICAgICAgICAgICAgJiYgKHR5ICsgY2hpbGQtPnkoKSArIGNo
aWxkLT5oZWlnaHQoKSkgPiBwYWludEluZm8ucmVjdC55KCkKICAgICAgICAgICAgICYmICh0eSAr
IGNoaWxkLT55KCkgKyBjaGlsZC0+aGVpZ2h0KCkpIDwgcGFpbnRJbmZvLnJlY3QuYm90dG9tKCkp
IHsKQEAgLTI3NzYsNyArMjg3MCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnJlbW92ZVBvc2l0aW9u
ZWRPYmplY3QKICAgICAgICAgbV9wb3NpdGlvbmVkT2JqZWN0cy0+cmVtb3ZlKGRlYWRPYmplY3Rz
LmF0KGkpKTsKIH0KIAotdm9pZCBSZW5kZXJCbG9jazo6aW5zZXJ0RmxvYXRpbmdPYmplY3QoUmVu
ZGVyQm94KiBvKQorUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0KiBSZW5kZXJCbG9jazo6aW5z
ZXJ0RmxvYXRpbmdPYmplY3QoUmVuZGVyQm94KiBvKQogewogICAgIEFTU0VSVChvLT5pc0Zsb2F0
aW5nKCkpOwogCkBAIC0yNzg5LDI1ICsyODgzLDM3IEBAIHZvaWQgUmVuZGVyQmxvY2s6Omluc2Vy
dEZsb2F0aW5nT2JqZWN0KFIKICAgICAgICAgRGVwcmVjYXRlZFB0ckxpc3RJdGVyYXRvcjxGbG9h
dGluZ09iamVjdD4gaXQoKm1fZmxvYXRpbmdPYmplY3RzKTsKICAgICAgICAgRmxvYXRpbmdPYmpl
Y3QqIGY7CiAgICAgICAgIHdoaWxlICggKGYgPSBpdC5jdXJyZW50KCkpICkgewotICAgICAgICAg
ICAgaWYgKGYtPm1fcmVuZGVyZXIgPT0gbykgcmV0dXJuOworICAgICAgICAgICAgaWYgKGYtPm1f
cmVuZGVyZXIgPT0gbykKKyAgICAgICAgICAgICAgICByZXR1cm4gZjsKICAgICAgICAgICAgICsr
aXQ7CiAgICAgICAgIH0KICAgICB9CiAKICAgICAvLyBDcmVhdGUgdGhlIHNwZWNpYWwgb2JqZWN0
IGVudHJ5ICYgYXBwZW5kIGl0IHRvIHRoZSBsaXN0CiAKLSAgICBvLT5sYXlvdXRJZk5lZWRlZCgp
OwotCiAgICAgRmxvYXRpbmdPYmplY3QqIG5ld09iaiA9IG5ldyBGbG9hdGluZ09iamVjdChvLT5z
dHlsZSgpLT5mbG9hdGluZygpID09IEZMRUZUID8gRmxvYXRpbmdPYmplY3Q6OkZsb2F0TGVmdCA6
IEZsb2F0aW5nT2JqZWN0OjpGbG9hdFJpZ2h0KTsKIAogICAgIG5ld09iai0+bV90b3AgPSAtMTsK
ICAgICBuZXdPYmotPm1fYm90dG9tID0gLTE7CisgICAgCisgICAgLy8gT3VyIGxvY2F0aW9uIGlz
IGlycmVsZXZhbnQgaWYgd2UncmUgdW5zcGxpdHRhYmxlIG9yIG5vIHBhZ2luYXRpb24gaXMgaW4g
ZWZmZWN0LiAgSnVzdCBnbyBhaGVhZAorICAgIC8vIGFuZCBsYXkgb3V0IHRoZSBmbG9hdC4KKyAg
ICBib29sIGFmZmVjdGVkQnlQYWdpbmF0aW9uID0gby0+aXNSZW5kZXJCbG9jaygpICYmIHZpZXco
KS0+bGF5b3V0U3RhdGUoKS0+bV9wYWdlSGVpZ2h0OworICAgIGlmICghYWZmZWN0ZWRCeVBhZ2lu
YXRpb24pCisgICAgICAgIG8tPmxheW91dElmTmVlZGVkKCk7CisgICAgZWxzZSB7CisgICAgICAg
IG8tPmNhbGNXaWR0aCgpOworICAgICAgICBvLT5jYWxjVmVydGljYWxNYXJnaW5zKCk7CisgICAg
fQogICAgIG5ld09iai0+bV93aWR0aCA9IG8tPndpZHRoKCkgKyBvLT5tYXJnaW5MZWZ0KCkgKyBv
LT5tYXJnaW5SaWdodCgpOworCiAgICAgbmV3T2JqLT5tX3Nob3VsZFBhaW50ID0gIW8tPmhhc1Nl
bGZQYWludGluZ0xheWVyKCk7IC8vIElmIGEgbGF5ZXIgZXhpc3RzLCB0aGUgZmxvYXQgd2lsbCBw
YWludCBpdHNlbGYuICBPdGhlcndpc2Ugc29tZW9uZSBlbHNlIHdpbGwuCiAgICAgbmV3T2JqLT5t
X2lzRGVzY2VuZGFudCA9IHRydWU7CiAgICAgbmV3T2JqLT5tX3JlbmRlcmVyID0gbzsKIAogICAg
IG1fZmxvYXRpbmdPYmplY3RzLT5hcHBlbmQobmV3T2JqKTsKKyAgICAKKyAgICByZXR1cm4gbmV3
T2JqOwogfQogCiB2b2lkIFJlbmRlckJsb2NrOjpyZW1vdmVGbG9hdGluZ09iamVjdChSZW5kZXJC
b3gqIG8pCkBAIC0yODMxLDYgKzI5MzcsMTggQEAgdm9pZCBSZW5kZXJCbG9jazo6cmVtb3ZlRmxv
YXRpbmdPYmplY3QoUgogICAgIH0KIH0KIAordm9pZCBSZW5kZXJCbG9jazo6cmVtb3ZlRmxvYXRp
bmdPYmplY3RzKEZsb2F0aW5nT2JqZWN0KiBmLCBpbnQgeSkKK3sKKyAgICBpZiAoIW1fZmxvYXRp
bmdPYmplY3RzKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgRmxvYXRpbmdPYmplY3QqIGN1
cnIgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+bGFzdCgpOworICAgIHdoaWxlIChjdXJyICE9IGYgJiYg
KGN1cnItPm1fdG9wID09IC0xIHx8IGN1cnItPm1fdG9wID49IHkpKSB7CisgICAgICAgIG1fZmxv
YXRpbmdPYmplY3RzLT5yZW1vdmVMYXN0KCk7CisgICAgICAgIGN1cnIgPSBtX2Zsb2F0aW5nT2Jq
ZWN0cy0+bGFzdCgpOworICAgIH0KK30KKwogYm9vbCBSZW5kZXJCbG9jazo6cG9zaXRpb25OZXdG
bG9hdHMoKQogewogICAgIGlmICghbV9mbG9hdGluZ09iamVjdHMpCkBAIC0yODY3LDE2ICsyOTg1
LDE1IEBAIGJvb2wgUmVuZGVyQmxvY2s6OnBvc2l0aW9uTmV3RmxvYXRzKCkKICAgICAgICAgfQog
CiAgICAgICAgIFJlbmRlckJveCogbyA9IGYtPm1fcmVuZGVyZXI7Ci0gICAgICAgIGludCBfaGVp
Z2h0ID0gby0+aGVpZ2h0KCkgKyBvLT5tYXJnaW5Ub3AoKSArIG8tPm1hcmdpbkJvdHRvbSgpOwog
CiAgICAgICAgIGludCBybyA9IHJpZ2h0T2Zmc2V0KCk7IC8vIENvbnN0YW50IHBhcnQgb2Ygcmln
aHQgb2Zmc2V0LgotICAgICAgICBpbnQgbG8gPSBsZWZ0T2Zmc2V0KCk7IC8vIENvbnN0YXQgcGFy
dCBvZiBsZWZ0IG9mZnNldC4KKyAgICAgICAgaW50IGxvID0gbGVmdE9mZnNldCgpOyAvLyBDb25z
dGFudCBwYXJ0IG9mIGxlZnQgb2Zmc2V0LgogICAgICAgICBpbnQgZndpZHRoID0gZi0+bV93aWR0
aDsgLy8gVGhlIHdpZHRoIHdlIGxvb2sgZm9yLgogICAgICAgICBpZiAocm8gLSBsbyA8IGZ3aWR0
aCkKICAgICAgICAgICAgIGZ3aWR0aCA9IHJvIC0gbG87IC8vIE5ldmVyIGxvb2sgZm9yIG1vcmUg
dGhhbiB3aGF0IHdpbGwgYmUgYXZhaWxhYmxlLgogICAgICAgICAKICAgICAgICAgSW50UmVjdCBv
bGRSZWN0KG8tPngoKSwgby0+eSgpICwgby0+d2lkdGgoKSwgby0+aGVpZ2h0KCkpOwotICAgICAg
ICAKKwogICAgICAgICBpZiAoby0+c3R5bGUoKS0+Y2xlYXIoKSAmIENMRUZUKQogICAgICAgICAg
ICAgeSA9IG1heChsZWZ0Qm90dG9tKCksIHkpOwogICAgICAgICBpZiAoby0+c3R5bGUoKS0+Y2xl
YXIoKSAmIENSSUdIVCkKQEAgLTI5MDUsOSArMzAyMiwzOCBAQCBib29sIFJlbmRlckJsb2NrOjpw
b3NpdGlvbk5ld0Zsb2F0cygpCiAgICAgICAgICAgICBvLT5zZXRMb2NhdGlvbihmeCAtIG8tPm1h
cmdpblJpZ2h0KCkgLSBvLT53aWR0aCgpLCB5ICsgby0+bWFyZ2luVG9wKCkpOwogICAgICAgICB9
CiAKLSAgICAgICAgZi0+bV90b3AgPSB5OwotICAgICAgICBmLT5tX2JvdHRvbSA9IGYtPm1fdG9w
ICsgX2hlaWdodDsKKyAgICAgICAgaWYgKHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+cGFnaW5hdGVk
KCkpIHsKKyAgICAgICAgICAgIFJlbmRlckJsb2NrKiBjaGlsZEJsb2NrID0gby0+aXNSZW5kZXJC
bG9jaygpID8gdG9SZW5kZXJCbG9jayhvKSA6IDA7CiAKKyAgICAgICAgICAgIGlmIChjaGlsZEJs
b2NrICYmIHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+bV9wYWdlSGVpZ2h0ICYmIHZpZXcoKS0+bGF5
b3V0U3RhdGUoKS0+cGFnZVkoby0+eSgpKSAhPSBjaGlsZEJsb2NrLT5wYWdlWSgpKQorICAgICAg
ICAgICAgICAgIGNoaWxkQmxvY2stPnNldENoaWxkTmVlZHNMYXlvdXQodHJ1ZSwgZmFsc2UpOwor
ICAgICAgICAgICAgby0+bGF5b3V0SWZOZWVkZWQoKTsKKworICAgICAgICAgICAgLy8gSWYgd2Ug
YXJlIHVuc3BsaXR0YWJsZSBhbmQgZG9uJ3QgZml0LCB0aGVuIHdlIG5lZWQgdG8gbW92ZSBkb3du
LgorICAgICAgICAgICAgLy8gV2UgaW5jbHVkZSBvdXIgbWFyZ2lucyBhcyBwYXJ0IG9mIHRoZSB1
bnNwbGl0dGFibGUgYXJlYS4KKyAgICAgICAgICAgIGludCBuZXdZID0gYWRqdXN0Rm9yVW5zcGxp
dHRhYmxlQ2hpbGQobywgeSwgdHJ1ZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFNl
ZSBpZiB3ZSBoYXZlIGEgcGFnaW5hdGlvbiBzdHJ1dCB0aGF0IGlzIG1ha2luZyB1cyBtb3ZlIGRv
d24gZnVydGhlci4KKyAgICAgICAgICAgIC8vIE5vdGUgdGhhdCBhbiB1bnNwbGl0dGFibGUgY2hp
bGQgY2FuJ3QgYWxzbyBoYXZlIGEgcGFnaW5hdGlvbiBzdHJ1dCwgc28gdGhpcyBpcworICAgICAg
ICAgICAgLy8gZXhjbHVzaXZlIHdpdGggdGhlIGNhc2UgYWJvdmUuCisgICAgICAgICAgICBpZiAo
Y2hpbGRCbG9jayAmJiBjaGlsZEJsb2NrLT5wYWdpbmF0aW9uU3RydXQoKSkgeworICAgICAgICAg
ICAgICAgIG5ld1kgKz0gY2hpbGRCbG9jay0+cGFnaW5hdGlvblN0cnV0KCk7CisgICAgICAgICAg
ICAgICAgY2hpbGRCbG9jay0+c2V0UGFnaW5hdGlvblN0cnV0KDApOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobmV3WSAhPSB5KSB7CisgICAgICAgICAgICAg
ICAgZi0+bV9wYWdpbmF0aW9uU3RydXQgPSBuZXdZIC0geTsKKyAgICAgICAgICAgICAgICB5ID0g
bmV3WTsKKyAgICAgICAgICAgICAgICBvLT5zZXRZKHkgKyBvLT5tYXJnaW5Ub3AoKSk7CisgICAg
ICAgICAgICAgICAgaWYgKGNoaWxkQmxvY2spCisgICAgICAgICAgICAgICAgICAgIGNoaWxkQmxv
Y2stPnNldENoaWxkTmVlZHNMYXlvdXQodHJ1ZSwgZmFsc2UpOworICAgICAgICAgICAgICAgIG8t
PmxheW91dElmTmVlZGVkKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBm
LT5tX3RvcCA9IHk7CisgICAgICAgIGYtPm1fYm90dG9tID0gZi0+bV90b3AgKyBvLT5tYXJnaW5U
b3AoKSArIG8tPmhlaWdodCgpICsgby0+bWFyZ2luQm90dG9tKCk7CisgICAgICAgIAogICAgICAg
ICAvLyBJZiB0aGUgY2hpbGQgbW92ZWQsIHdlIGhhdmUgdG8gcmVwYWludCBpdC4KICAgICAgICAg
aWYgKG8tPmNoZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgpKQogICAgICAgICAgICAgby0+cmVw
YWludER1cmluZ0xheW91dElmTW92ZWQob2xkUmVjdCk7CkBAIC0yOTE3LDYgKzMwNjMsNDAgQEAg
Ym9vbCBSZW5kZXJCbG9jazo6cG9zaXRpb25OZXdGbG9hdHMoKQogICAgIHJldHVybiB0cnVlOwog
fQogCitib29sIFJlbmRlckJsb2NrOjpwb3NpdGlvbk5ld0Zsb2F0T25MaW5lKEZsb2F0aW5nT2Jq
ZWN0KiBuZXdGbG9hdCwgRmxvYXRpbmdPYmplY3QqIGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUp
Cit7CisgICAgYm9vbCBkaWRQb3NpdGlvbiA9IHBvc2l0aW9uTmV3RmxvYXRzKCk7CisgICAgaWYg
KCFkaWRQb3NpdGlvbiB8fCAhbmV3RmxvYXQtPm1fcGFnaW5hdGlvblN0cnV0KQorICAgICAgICBy
ZXR1cm4gZGlkUG9zaXRpb247CisgICAgCisgICAgaW50IGZsb2F0VG9wID0gbmV3RmxvYXQtPm1f
dG9wOworICAgIGludCBwYWdpbmF0aW9uU3RydXQgPSBuZXdGbG9hdC0+bV9wYWdpbmF0aW9uU3Ry
dXQ7CisgICAgRmxvYXRpbmdPYmplY3QqIGYgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+bGFzdCgpOwor
ICAgIAorICAgIEFTU0VSVChmID09IG5ld0Zsb2F0KTsKKworICAgIGlmIChmbG9hdFRvcCAtIHBh
Z2luYXRpb25TdHJ1dCAhPSBoZWlnaHQoKSkKKyAgICAgICAgcmV0dXJuIGRpZFBvc2l0aW9uOwor
CisgICAgZm9yIChmID0gbV9mbG9hdGluZ09iamVjdHMtPnByZXYoKTsgZiAmJiBmICE9IGxhc3RG
bG9hdEZyb21QcmV2aW91c0xpbmU7IGYgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+cHJldigpKSB7Cisg
ICAgICAgIGlmIChmLT5tX3RvcCA9PSBoZWlnaHQoKSkgeworICAgICAgICAgICAgQVNTRVJUKCFm
LT5tX3BhZ2luYXRpb25TdHJ1dCk7CisgICAgICAgICAgICBmLT5tX3BhZ2luYXRpb25TdHJ1dCA9
IHBhZ2luYXRpb25TdHJ1dDsKKyAgICAgICAgICAgIFJlbmRlckJveCogbyA9IGYtPm1fcmVuZGVy
ZXI7CisgICAgICAgICAgICBvLT5zZXRZKG8tPnkoKSArIG8tPm1hcmdpblRvcCgpICsgcGFnaW5h
dGlvblN0cnV0KTsKKyAgICAgICAgICAgIGlmIChvLT5pc1JlbmRlckJsb2NrKCkpCisgICAgICAg
ICAgICAgICAgdG9SZW5kZXJCbG9jayhvKS0+c2V0Q2hpbGROZWVkc0xheW91dCh0cnVlLCBmYWxz
ZSk7CisgICAgICAgICAgICBvLT5sYXlvdXRJZk5lZWRlZCgpOworICAgICAgICAgICAgZi0+bV90
b3AgKz0gZi0+bV9wYWdpbmF0aW9uU3RydXQ7CisgICAgICAgICAgICBmLT5tX2JvdHRvbSArPSBm
LT5tX3BhZ2luYXRpb25TdHJ1dDsKKyAgICAgICAgfQorICAgIH0KKyAgICAgICAgCisgICAgc2V0
SGVpZ2h0KGhlaWdodCgpICsgcGFnaW5hdGlvblN0cnV0KTsKKyAgICAKKyAgICByZXR1cm4gZGlk
UG9zaXRpb247Cit9CisKIHZvaWQgUmVuZGVyQmxvY2s6Om5ld0xpbmUoRUNsZWFyIGNsZWFyKQog
ewogICAgIHBvc2l0aW9uTmV3RmxvYXRzKCk7CkBAIC0zMTU4LDggKzMzMzgsOCBAQCBpbnQgUmVu
ZGVyQmxvY2s6Omxvd2VzdFBvc2l0aW9uKGJvb2wgaW5jCiAKICAgICBpZiAoaGFzQ29sdW1ucygp
KSB7CiAgICAgICAgIENvbHVtbkluZm8qIGNvbEluZm8gPSBjb2x1bW5JbmZvKCk7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb2xJbmZvLT5jb2x1bW5Db3VudCgpOyBpKyspCi0g
ICAgICAgICAgICBib3R0b20gPSBtYXgoYm90dG9tLCBjb2xJbmZvLT5jb2x1bW5SZWN0QXQoaSku
Ym90dG9tKCkgKyByZWxhdGl2ZU9mZnNldCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBjb2x1bW5Db3VudChjb2xJbmZvKTsgaSsrKQorICAgICAgICAgICAgYm90dG9tID0gbWF4
KGJvdHRvbSwgY29sdW1uUmVjdEF0KGNvbEluZm8sIGkpLmJvdHRvbSgpICsgcmVsYXRpdmVPZmZz
ZXQpOwogICAgICAgICByZXR1cm4gYm90dG9tOwogICAgIH0KIApAQCAtMzI1Myw4ICszNDMzLDkg
QEAgaW50IFJlbmRlckJsb2NrOjpyaWdodG1vc3RQb3NpdGlvbihib29sIAogICAgICAgICAvLyBU
aGlzIG9ubHkgbWF0dGVycyBmb3IgTFRSCiAgICAgICAgIGlmIChzdHlsZSgpLT5kaXJlY3Rpb24o
KSA9PSBMVFIpIHsKICAgICAgICAgICAgIENvbHVtbkluZm8qIGNvbEluZm8gPSBjb2x1bW5JbmZv
KCk7Ci0gICAgICAgICAgICBpZiAoY29sSW5mby0+Y29sdW1uQ291bnQoKSkKLSAgICAgICAgICAg
ICAgICByaWdodCA9IG1heChjb2xJbmZvLT5jb2x1bW5SZWN0QXQoY29sSW5mby0+Y29sdW1uQ291
bnQoKSAtIDEpLnJpZ2h0KCkgKyByZWxhdGl2ZU9mZnNldCwgcmlnaHQpOworICAgICAgICAgICAg
dW5zaWduZWQgY291bnQgPSBjb2x1bW5Db3VudChjb2xJbmZvKTsKKyAgICAgICAgICAgIGlmIChj
b3VudCkKKyAgICAgICAgICAgICAgICByaWdodCA9IG1heChjb2x1bW5SZWN0QXQoY29sSW5mbywg
Y291bnQgLSAxKS5yaWdodCgpICsgcmVsYXRpdmVPZmZzZXQsIHJpZ2h0KTsKICAgICAgICAgfQog
ICAgICAgICByZXR1cm4gcmlnaHQ7CiAgICAgfQpAQCAtMzM1Myw4ICszNTM0LDkgQEAgaW50IFJl
bmRlckJsb2NrOjpsZWZ0bW9zdFBvc2l0aW9uKGJvb2wgaQogICAgICAgICAvLyBUaGlzIG9ubHkg
bWF0dGVycyBmb3IgUlRMCiAgICAgICAgIGlmIChzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBSVEwp
IHsKICAgICAgICAgICAgIENvbHVtbkluZm8qIGNvbEluZm8gPSBjb2x1bW5JbmZvKCk7Ci0gICAg
ICAgICAgICBpZiAoY29sSW5mby0+Y29sdW1uQ291bnQoKSkKLSAgICAgICAgICAgICAgICBsZWZ0
ID0gbWluKGNvbEluZm8tPmNvbHVtblJlY3RBdChjb2xJbmZvLT5jb2x1bW5Db3VudCgpIC0gMSku
eCgpICsgcmVsYXRpdmVPZmZzZXQsIGxlZnQpOworICAgICAgICAgICAgdW5zaWduZWQgY291bnQg
PSBjb2x1bW5Db3VudChjb2xJbmZvKTsKKyAgICAgICAgICAgIGlmIChjb3VudCkKKyAgICAgICAg
ICAgICAgICBsZWZ0ID0gbWluKGNvbHVtblJlY3RBdChjb2xJbmZvLCBjb3VudCAtIDEpLngoKSAr
IHJlbGF0aXZlT2Zmc2V0LCBsZWZ0KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gbGVmdDsK
ICAgICB9CkBAIC0zNjQ3LDYgKzM4MjksOSBAQCBib29sIFJlbmRlckJsb2NrOjpjb250YWluc0Zs
b2F0KFJlbmRlck9iCiAKIHZvaWQgUmVuZGVyQmxvY2s6Om1hcmtBbGxEZXNjZW5kYW50c1dpdGhG
bG9hdHNGb3JMYXlvdXQoUmVuZGVyQm94KiBmbG9hdFRvUmVtb3ZlLCBib29sIGluTGF5b3V0KQog
eworICAgIGlmICghbV9ldmVySGFkTGF5b3V0KQorICAgICAgICByZXR1cm47CisKICAgICBzZXRD
aGlsZE5lZWRzTGF5b3V0KHRydWUsICFpbkxheW91dCk7CiAKICAgICBpZiAoZmxvYXRUb1JlbW92
ZSkKQEAgLTM2NjQsMzAgKzM4NDksNDUgQEAgdm9pZCBSZW5kZXJCbG9jazo6bWFya0FsbERlc2Nl
bmRhbnRzV2l0aAogICAgIH0KIH0KIAotaW50IFJlbmRlckJsb2NrOjp2aXNpYmxlVG9wT2ZIaWdo
ZXN0RmxvYXRFeHRlbmRpbmdCZWxvdyhpbnQgYm90dG9tLCBpbnQgbWF4SGVpZ2h0KSBjb25zdAor
dm9pZCBSZW5kZXJCbG9jazo6bWFya0Rlc2NlbmRhbnRCbG9ja3NBbmRMaW5lc0ZvckxheW91dChi
b29sIGluTGF5b3V0KQogewotICAgIGludCB0b3AgPSBib3R0b207Ci0gICAgaWYgKG1fZmxvYXRp
bmdPYmplY3RzKSB7Ci0gICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdDsKLSAg
ICAgICAgZm9yIChEZXByZWNhdGVkUHRyTGlzdEl0ZXJhdG9yPEZsb2F0aW5nT2JqZWN0PiBpdCgq
bV9mbG9hdGluZ09iamVjdHMpOyAoZmxvYXRpbmdPYmplY3QgPSBpdC5jdXJyZW50KCkpOyArK2l0
KSB7Ci0gICAgICAgICAgICBSZW5kZXJCb3gqIGZsb2F0aW5nQm94ID0gZmxvYXRpbmdPYmplY3Qt
Pm1fcmVuZGVyZXI7Ci0gICAgICAgICAgICBJbnRSZWN0IHZpc2libGVPdmVyZmxvdyA9IGZsb2F0
aW5nQm94LT52aXNpYmxlT3ZlcmZsb3dSZWN0KCk7Ci0gICAgICAgICAgICB2aXNpYmxlT3ZlcmZs
b3cubW92ZShmbG9hdGluZ0JveC0+eCgpLCBmbG9hdGluZ0JveC0+eSgpKTsKLSAgICAgICAgICAg
IGlmICh2aXNpYmxlT3ZlcmZsb3cueSgpIDwgdG9wICYmIHZpc2libGVPdmVyZmxvdy5ib3R0b20o
KSA+IGJvdHRvbSAmJiB2aXNpYmxlT3ZlcmZsb3cuaGVpZ2h0KCkgPD0gbWF4SGVpZ2h0ICYmIGZs
b2F0aW5nQm94LT5jb250YWluaW5nQmxvY2soKSA9PSB0aGlzKQotICAgICAgICAgICAgICAgIHRv
cCA9IHZpc2libGVPdmVyZmxvdy55KCk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgaWYgKCFtX2V2
ZXJIYWRMYXlvdXQpCisgICAgICAgIHJldHVybjsKKworICAgIHNldENoaWxkTmVlZHNMYXlvdXQo
dHJ1ZSwgIWluTGF5b3V0KTsKIAorICAgIC8vIEl0ZXJhdGUgb3ZlciBvdXIgY2hpbGRyZW4gYW5k
IG1hcmsgdGhlbSBhcyBuZWVkZWQuCiAgICAgaWYgKCFjaGlsZHJlbklubGluZSgpKSB7CiAgICAg
ICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxk
ID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgICAgIGlmIChjaGlsZC0+aXNGbG9h
dGluZ09yUG9zaXRpb25lZCgpIHx8ICFjaGlsZC0+aXNSZW5kZXJCbG9jaygpKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGNoaWxkQmxvY2sgPSB0
b1JlbmRlckJsb2NrKGNoaWxkKTsKLSAgICAgICAgICAgIHRvcCA9IG1pbih0b3AsIGNoaWxkQmxv
Y2stPnkoKSArIGNoaWxkQmxvY2stPnZpc2libGVUb3BPZkhpZ2hlc3RGbG9hdEV4dGVuZGluZ0Jl
bG93KGJvdHRvbSAtIGNoaWxkQmxvY2stPnkoKSwgbWF4SGVpZ2h0KSk7CisgICAgICAgICAgICB0
b1JlbmRlckJsb2NrKGNoaWxkKS0+bWFya0Rlc2NlbmRhbnRCbG9ja3NBbmRMaW5lc0ZvckxheW91
dChpbkxheW91dCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gV2FsayBvdXIgZmxv
YXRpbmcgb2JqZWN0cyBhbmQgbWFyayB0aGVtIHRvby4KKyAgICBpZiAobV9mbG9hdGluZ09iamVj
dHMpIHsKKyAgICAgICAgRGVwcmVjYXRlZFB0ckxpc3RJdGVyYXRvcjxGbG9hdGluZ09iamVjdD4g
aXQoKm1fZmxvYXRpbmdPYmplY3RzKTsKKyAgICAgICAgd2hpbGUgKGl0LmN1cnJlbnQoKSkgewor
ICAgICAgICAgICAgaWYgKGl0LmN1cnJlbnQoKS0+bV9yZW5kZXJlci0+aXNSZW5kZXJCbG9jaygp
KQorICAgICAgICAgICAgICAgIHRvUmVuZGVyQmxvY2soaXQuY3VycmVudCgpLT5tX3JlbmRlcmVy
KS0+bWFya0Rlc2NlbmRhbnRCbG9ja3NBbmRMaW5lc0ZvckxheW91dChpbkxheW91dCk7CisgICAg
ICAgICAgICArK2l0OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1fcG9zaXRpb25lZE9i
amVjdHMpIHsKKyAgICAgICAgLy8gRklYTUU6IFRlY2huaWNhbGx5IHdlIGRvbid0IGhhdmUgdG8g
bWFyayB0aGUgcG9zaXRpb25lZCBvYmplY3RzIGlmIHdlJ3JlIHRoZSBibG9jaworICAgICAgICAv
LyB0aGF0IGVzdGFibGlzaGVkIHRoZSBjb2x1bW5zLCBidXQgd2UgZG9uJ3QgcmVhbGx5IGhhdmUg
dGhhdCBpbmZvcm1hdGlvbiBoZXJlLgorICAgICAgICBSZW5kZXJCb3gqIHI7CisgICAgICAgIEl0
ZXJhdG9yIGVuZCA9IG1fcG9zaXRpb25lZE9iamVjdHMtPmVuZCgpOworICAgICAgICBmb3IgKEl0
ZXJhdG9yIGl0ID0gbV9wb3NpdGlvbmVkT2JqZWN0cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7CisgICAgICAgICAgICByID0gKml0OworICAgICAgICAgICAgaWYgKHItPmlzUmVuZGVyQmxv
Y2soKSkKKyAgICAgICAgICAgICAgICB0b1JlbmRlckJsb2NrKHIpLT5tYXJrRGVzY2VuZGFudEJs
b2Nrc0FuZExpbmVzRm9yTGF5b3V0KCk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICByZXR1cm4g
dG9wOworICAgIC8vIEZJWE1FOiBJZiB3ZSdyZSBhIHRhYmxlLCB0aGVuIHdlIGhhdmUgdG8gbWFy
ayBldmVyeSBzaW5nbGUgY2VsbC4KIH0KIAogaW50IFJlbmRlckJsb2NrOjpnZXRDbGVhckRlbHRh
KFJlbmRlckJveCogY2hpbGQsIGludCB5UG9zKQpAQCAtMzg0NywxNiArNDA0NywxNiBAQCBib29s
IFJlbmRlckJsb2NrOjpoaXRUZXN0Q29sdW1ucyhjb25zdCBICiB7CiAgICAgLy8gV2UgbmVlZCB0
byBkbyBtdWx0aXBsZSBwYXNzZXMsIGJyZWFraW5nIHVwIG91ciBoaXQgdGVzdGluZyBpbnRvIHN0
cmlwcy4KICAgICBDb2x1bW5JbmZvKiBjb2xJbmZvID0gY29sdW1uSW5mbygpOwotICAgIGludCBj
b2xDb3VudCA9IGNvbEluZm8tPmNvbHVtbkNvdW50KCk7CisgICAgaW50IGNvbENvdW50ID0gY29s
dW1uQ291bnQoY29sSW5mbyk7CiAgICAgaWYgKCFjb2xDb3VudCkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIGludCBsZWZ0ID0gYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKTsKICAgICBp
bnQgY3VycllPZmZzZXQgPSAwOwogICAgIGludCBpOwogICAgIGZvciAoaSA9IDA7IGkgPCBjb2xD
b3VudDsgaSsrKQotICAgICAgICBjdXJyWU9mZnNldCAtPSBjb2xJbmZvLT5jb2x1bW5SZWN0QXQo
aSkuaGVpZ2h0KCk7CisgICAgICAgIGN1cnJZT2Zmc2V0IC09IGNvbHVtblJlY3RBdChjb2xJbmZv
LCBpKS5oZWlnaHQoKTsKICAgICBmb3IgKGkgPSBjb2xDb3VudCAtIDE7IGkgPj0gMDsgaS0tKSB7
Ci0gICAgICAgIEludFJlY3QgY29sUmVjdCA9IGNvbEluZm8tPmNvbHVtblJlY3RBdChpKTsKKyAg
ICAgICAgSW50UmVjdCBjb2xSZWN0ID0gY29sdW1uUmVjdEF0KGNvbEluZm8sIGkpOwogICAgICAg
ICBpbnQgY3VyclhPZmZzZXQgPSBjb2xSZWN0LngoKSAtIGxlZnQ7CiAgICAgICAgIGN1cnJZT2Zm
c2V0ICs9IGNvbFJlY3QuaGVpZ2h0KCk7CiAgICAgICAgIGNvbFJlY3QubW92ZSh0eCwgdHkpOwpA
QCAtNDE1MCw4ICs0MzUwLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6c2V0RGVzaXJlZENvbHVtbkNv
dW50QQogICAgIGJvb2wgZGVzdHJveUNvbHVtbnMgPSAhZmlyc3RDaGlsZCgpCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHx8IChjb3VudCA9PSAxICYmIHN0eWxlKCktPmhhc0F1dG9Db2x1bW5X
aWR0aCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBmaXJzdENoaWxkKCktPmlzQW5v
bnltb3VzQ29sdW1uc0Jsb2NrKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgZmlyc3RD
aGlsZCgpLT5pc0Fub255bW91c0NvbHVtblNwYW5CbG9jaygpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgIHx8IGRvY3VtZW50KCktPnNldHRpbmdzKCktPnBhZ2luYXRlRHVyaW5nTGF5b3V0RW5h
YmxlZCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBmaXJzdENoaWxkKCktPmlzQW5v
bnltb3VzQ29sdW1uU3BhbkJsb2NrKCk7CiAgICAgaWYgKGRlc3Ryb3lDb2x1bW5zKSB7CiAgICAg
ICAgIGlmIChoYXNDb2x1bW5zKCkpIHsKICAgICAgICAgICAgIGRlbGV0ZSBnQ29sdW1uSW5mb01h
cC0+dGFrZSh0aGlzKTsKQEAgLTQxOTQsMTMzICs0MzkzLDYwIEBAIENvbHVtbkluZm8qIFJlbmRl
ckJsb2NrOjpjb2x1bW5JbmZvKCkgY28KICAgICByZXR1cm4gZ0NvbHVtbkluZm9NYXAtPmdldCh0
aGlzKTsgICAgCiB9CiAKLWludCBSZW5kZXJCbG9jazo6bGF5b3V0Q29sdW1ucyhpbnQgZW5kT2ZD
b250ZW50LCBpbnQgcmVxdWVzdGVkQ29sdW1uSGVpZ2h0KQordW5zaWduZWQgUmVuZGVyQmxvY2s6
OmNvbHVtbkNvdW50KENvbHVtbkluZm8qIGNvbEluZm8pIGNvbnN0CiB7Ci0gICAgLy8gRG9uJ3Qg
ZG8gYW55dGhpbmcgaWYgd2UgaGF2ZSBubyBjb2x1bW5zCi0gICAgaWYgKCFoYXNDb2x1bW5zKCkp
Ci0gICAgICAgIHJldHVybiAtMTsKKyAgICBBU1NFUlQoaGFzQ29sdW1ucygpICYmIGdDb2x1bW5J
bmZvTWFwLT5nZXQodGhpcykgPT0gY29sSW5mbyk7CisgICAgcmV0dXJuIGNvbEluZm8tPmNvbHVt
bkNvdW50KCk7Cit9CiAKLSAgICBDb2x1bW5JbmZvKiBpbmZvID0gZ0NvbHVtbkluZm9NYXAtPmdl
dCh0aGlzKTsKLSAgICBpbnQgZGVzaXJlZENvbHVtbldpZHRoID0gaW5mby0+ZGVzaXJlZENvbHVt
bldpZHRoKCk7Ci0gICAgaW50IGRlc2lyZWRDb2x1bW5Db3VudCA9IGluZm8tPmRlc2lyZWRDb2x1
bW5Db3VudCgpOwotICAgIAotICAgIGJvb2wgY29tcHV0ZUludHJpbnNpY0hlaWdodCA9IChlbmRP
ZkNvbnRlbnQgPT0gLTEpOwotCi0gICAgLy8gRmlsbCB0aGUgY29sdW1ucyBpbiB0byB0aGUgYXZh
aWxhYmxlIGhlaWdodC4gIEF0dGVtcHQgdG8gYmFsYW5jZSB0aGUgaGVpZ2h0IG9mIHRoZSBjb2x1
bW5zLgotICAgIC8vIEFkZCBpbiBoYWxmIG91ciBsaW5lLWhlaWdodCB0byBoZWxwIHdpdGggYmVz
dC1ndWVzcyBpbml0aWFsIGJhbGFuY2luZy4KLSAgICBpbnQgY29sdW1uU2xvcCA9IGxpbmVIZWln
aHQoZmFsc2UpIC8gMjsKLSAgICBpbnQgcmVtYWluaW5nU2xvcFNwYWNlID0gY29sdW1uU2xvcCAq
IGRlc2lyZWRDb2x1bW5Db3VudDsKLSAgICBpbnQgYXZhaWxhYmxlSGVpZ2h0ID0gY29udGVudEhl
aWdodCgpOwotICAgIGludCBjb2xIZWlnaHQ7Ci0gICAgaWYgKGNvbXB1dGVJbnRyaW5zaWNIZWln
aHQgJiYgcmVxdWVzdGVkQ29sdW1uSGVpZ2h0ID49IDApCi0gICAgICAgIGNvbEhlaWdodCA9IHJl
cXVlc3RlZENvbHVtbkhlaWdodDsKLSAgICBlbHNlIGlmIChjb21wdXRlSW50cmluc2ljSGVpZ2h0
KQotICAgICAgICBjb2xIZWlnaHQgPSBtaW4oYXZhaWxhYmxlSGVpZ2h0LCBhdmFpbGFibGVIZWln
aHQgLyBkZXNpcmVkQ29sdW1uQ291bnQgKyBjb2x1bW5TbG9wKTsKLSAgICBlbHNlCi0gICAgICAg
IGNvbEhlaWdodCA9IGF2YWlsYWJsZUhlaWdodDsKLSAgICBpbnQgb3JpZ2luYWxDb2xIZWlnaHQg
PSBjb2xIZWlnaHQ7CitJbnRSZWN0IFJlbmRlckJsb2NrOjpjb2x1bW5SZWN0QXQoQ29sdW1uSW5m
byogY29sSW5mbywgdW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7CisgICAgQVNTRVJUKGhhc0NvbHVt
bnMoKSAmJiBnQ29sdW1uSW5mb01hcC0+Z2V0KHRoaXMpID09IGNvbEluZm8pOwogCisgICAgLy8g
Q29tcHV0ZSB0aGUgYXBwcm9wcmlhdGUgcmVjdCBiYXNlZCBvZmYgb3VyIGluZm9ybWF0aW9uLgor
ICAgIGludCBjb2xXaWR0aCA9IGNvbEluZm8tPmRlc2lyZWRDb2x1bW5XaWR0aCgpOworICAgIGlu
dCBjb2xIZWlnaHQgPSBjb2xJbmZvLT5jb2x1bW5IZWlnaHQoKTsKKyAgICBpbnQgY29sVG9wID0g
Ym9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCk7CiAgICAgaW50IGNvbEdhcCA9IGNvbHVtbkdhcCgp
OworICAgIGludCBjb2xMZWZ0ID0gc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8gCisgICAg
ICAgICAgICAgICAgICAgICAgYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKSArIChpbmRleCAq
IChjb2xXaWR0aCArIGNvbEdhcCkpCisgICAgICAgICAgICAgICAgICAgICAgOiBib3JkZXJMZWZ0
KCkgKyBwYWRkaW5nTGVmdCgpICsgY29udGVudFdpZHRoKCkgLSBjb2xXaWR0aCAtIChpbmRleCAq
IChjb2xXaWR0aCArIGNvbEdhcCkpOworICAgIHJldHVybiBJbnRSZWN0KGNvbExlZnQsIGNvbFRv
cCwgY29sV2lkdGgsIGNvbEhlaWdodCk7Cit9CiAKLSAgICAvLyBDb21wdXRlIGEgY29sbGVjdGlv
biBvZiBjb2x1bW4gcmVjdHMuCi0gICAgaW5mby0+Y2xlYXJDb2x1bW5zKCk7Ci0gICAgCi0gICAg
Ly8gVGhlbiB3ZSBkbyBhIHNpbXVsYXRlZCAicGFpbnQiIGludG8gdGhlIGNvbHVtbiBzbGljZXMg
YW5kIGFsbG93IHRoZSBjb250ZW50IHRvIHNsaWdodGx5IGFkanVzdCBvdXIgaW5kaXZpZHVhbCBj
b2x1bW4gcmVjdHMuCi0gICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gdGFrZSBpbnRvIGFjY291bnQg
bGF5ZXJzIHRoYXQgYXJlIGFmZmVjdGVkIGJ5IHRoZSBjb2x1bW5zIGFzIHdlbGwgaGVyZSBzbyB0
aGF0IHRoZXkgY2FuIGhhdmUgYW4gb3Bwb3J0dW5pdHkKLSAgICAvLyB0byBhZGp1c3QgY29sdW1u
IHJlY3RzIGFsc28uCi0gICAgUmVuZGVyVmlldyogdiA9IHZpZXcoKTsKLSAgICBpbnQgbGVmdCA9
IGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCk7Ci0gICAgaW50IHRvcCA9IGJvcmRlclRvcCgp
ICsgcGFkZGluZ1RvcCgpOwotICAgIGludCBjdXJyWCA9IHN0eWxlKCktPmRpcmVjdGlvbigpID09
IExUUiA/IGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCkgOiBib3JkZXJMZWZ0KCkgKyBwYWRk
aW5nTGVmdCgpICsgY29udGVudFdpZHRoKCkgLSBkZXNpcmVkQ29sdW1uV2lkdGg7Ci0gICAgaW50
IGN1cnJZID0gdG9wOwotICAgIHVuc2lnbmVkIGNvbENvdW50ID0gZGVzaXJlZENvbHVtbkNvdW50
OwotICAgIGludCBtYXhDb2xCb3R0b20gPSBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKTsKLSAg
ICBpbnQgY29udGVudEJvdHRvbSA9IHRvcCArIGF2YWlsYWJsZUhlaWdodDsKLSAgICBpbnQgbWlu
aW11bUNvbHVtbkhlaWdodCA9IC0xOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb2xD
b3VudDsgaSsrKSB7Ci0gICAgICAgIC8vIElmIHdlIGFyZW4ndCBjb25zdHJhaW5lZCwgdGhlbiB0
aGUgbGFzdCBjb2x1bW4gY2FuIGp1c3QgZ2V0IGFsbCB0aGUgcmVtYWluaW5nIHNwYWNlLgotICAg
ICAgICBpZiAoY29tcHV0ZUludHJpbnNpY0hlaWdodCAmJiBpID09IGNvbENvdW50IC0gMSkKLSAg
ICAgICAgICAgIGNvbEhlaWdodCA9IGF2YWlsYWJsZUhlaWdodDsKLQotICAgICAgICAvLyBUaGlz
IHJlcHJlc2VudHMgdGhlIHJlYWwgY29sdW1uIHBvc2l0aW9uLgotICAgICAgICBJbnRSZWN0IGNv
bFJlY3QoY3VyclgsIHRvcCwgZGVzaXJlZENvbHVtbldpZHRoLCBjb2xIZWlnaHQpOwotCi0gICAg
ICAgIGludCB0cnVuY2F0aW9uUG9pbnQgPSB2aXNpYmxlVG9wT2ZIaWdoZXN0RmxvYXRFeHRlbmRp
bmdCZWxvdyhjdXJyWSArIGNvbEhlaWdodCwgY29sSGVpZ2h0KTsKLQotICAgICAgICAvLyBGb3Ig
dGhlIHNpbXVsYXRlZCBwYWludCwgd2UgcHJldGVuZCBsaWtlIGV2ZXJ5dGhpbmcgaXMgaW4gb25l
IGxvbmcgc3RyaXAuCi0gICAgICAgIEludFJlY3QgcGFnZVJlY3QobGVmdCwgY3VyclksIGNvbnRl
bnRXaWR0aCgpLCB0cnVuY2F0aW9uUG9pbnQgLSBjdXJyWSk7Ci0gICAgICAgIHYtPnNldFByaW50
UmVjdChwYWdlUmVjdCk7Ci0gICAgICAgIHYtPnNldFRydW5jYXRlZEF0KHRydW5jYXRpb25Qb2lu
dCk7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KChQbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dCopMCk7Ci0gICAgICAgIFBhaW50SW5mbyBwYWludEluZm8oJmNvbnRleHQsIHBhZ2VSZWN0
LCBQYWludFBoYXNlRm9yZWdyb3VuZCwgZmFsc2UsIDAsIDApOwotICAgICAgICAKLSAgICAgICAg
c2V0SGFzQ29sdW1ucyhmYWxzZSk7Ci0gICAgICAgIHBhaW50T2JqZWN0KHBhaW50SW5mbywgMCwg
MCk7Ci0gICAgICAgIHNldEhhc0NvbHVtbnModHJ1ZSk7Ci0KLSAgICAgICAgaWYgKGNvbXB1dGVJ
bnRyaW5zaWNIZWlnaHQgJiYgdi0+bWluaW11bUNvbHVtbkhlaWdodCgpID4gb3JpZ2luYWxDb2xI
ZWlnaHQpIHsKLSAgICAgICAgICAgIC8vIFRoZSBpbml0aWFsIGNvbHVtbiBoZWlnaHQgd2FzIHRv
byBzbWFsbCB0byBjb250YWluIG9uZSBsaW5lIG9mIHRleHQuCi0gICAgICAgICAgICBtaW5pbXVt
Q29sdW1uSGVpZ2h0ID0gbWF4KG1pbmltdW1Db2x1bW5IZWlnaHQsIHYtPm1pbmltdW1Db2x1bW5I
ZWlnaHQoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpbnQgYWRqdXN0ZWRCb3R0b20gPSB2LT5i
ZXN0VHJ1bmNhdGVkQXQoKTsKLSAgICAgICAgaWYgKGFkanVzdGVkQm90dG9tIDw9IGN1cnJZKQot
ICAgICAgICAgICAgYWRqdXN0ZWRCb3R0b20gPSB0cnVuY2F0aW9uUG9pbnQ7Ci0gICAgICAgIAot
ICAgICAgICBjb2xSZWN0LnNldEhlaWdodChhZGp1c3RlZEJvdHRvbSAtIGN1cnJZKTsKLSAgICAg
ICAgCi0gICAgICAgIC8vIEFkZCBpbiB0aGUgbG9zdCBzcGFjZSB0byB0aGUgc3Vic2VxdWVudCBj
b2x1bW5zLgotICAgICAgICAvLyBGSVhNRTogVGhpcyB3aWxsIGNyZWF0ZSBhICJzdGFpcmNhc2Ui
IGVmZmVjdCBpZiB0aGVyZSBhcmUgZW5vdWdoIGNvbHVtbnMsIGJ1dCB0aGUgZWZmZWN0IHNob3Vs
ZCBiZSBwcmV0dHkgc3VidGxlLgotICAgICAgICBpZiAoY29tcHV0ZUludHJpbnNpY0hlaWdodCkg
ewotICAgICAgICAgICAgaW50IGxvc3RTcGFjZSA9IGNvbEhlaWdodCAtIGNvbFJlY3QuaGVpZ2h0
KCk7Ci0gICAgICAgICAgICBpZiAobG9zdFNwYWNlID4gcmVtYWluaW5nU2xvcFNwYWNlKSB7Ci0g
ICAgICAgICAgICAgICAgLy8gUmVkZXN0cmlidXRlIHRoZSBzcGFjZSBhbW9uZyB0aGUgcmVtYWlu
aW5nIGNvbHVtbnMuCi0gICAgICAgICAgICAgICAgaW50IHNwYWNlVG9SZWRpc3RyaWJ1dGUgPSBs
b3N0U3BhY2UgLSByZW1haW5pbmdTbG9wU3BhY2U7Ci0gICAgICAgICAgICAgICAgaW50IHJlbWFp
bmluZ0NvbHVtbnMgPSBjb2xDb3VudCAtIGkgKyAxOwotICAgICAgICAgICAgICAgIGNvbEhlaWdo
dCArPSBzcGFjZVRvUmVkaXN0cmlidXRlIC8gcmVtYWluaW5nQ29sdW1uczsKLSAgICAgICAgICAg
IH0gCi0gICAgICAgICAgICByZW1haW5pbmdTbG9wU3BhY2UgPSBtYXgoMCwgcmVtYWluaW5nU2xv
cFNwYWNlIC0gbG9zdFNwYWNlKTsKLSAgICAgICAgfQorYm9vbCBSZW5kZXJCbG9jazo6bGF5b3V0
Q29sdW1ucyhib29sIGhhc1NwZWNpZmllZFBhZ2VIZWlnaHQsIGludCBwYWdlSGVpZ2h0LCBMYXlv
dXRTdGF0ZU1haW50YWluZXImIHN0YXRlUHVzaGVyKQoreworICAgIGlmIChoYXNDb2x1bW5zKCkp
IHsKKyAgICAgICAgQ29sdW1uSW5mbyogY29sSW5mbyA9IGNvbHVtbkluZm8oKTsKKyAgICAgICAg
aW50IGRlc2lyZWRDb2x1bW5Db3VudCA9IGNvbEluZm8tPmRlc2lyZWRDb2x1bW5Db3VudCgpOwor
ICAgICAgICBpZiAoIWhhc1NwZWNpZmllZFBhZ2VIZWlnaHQgJiYgY29udGVudEhlaWdodCgpID4g
cGFnZUhlaWdodCAqIGRlc2lyZWRDb2x1bW5Db3VudCkgeworICAgICAgICAgICAgLy8gTm93IHRo
YXQgd2Uga25vdyB0aGUgaW50cmluc2ljIGhlaWdodCBvZiB0aGUgY29sdW1ucywgd2UgaGF2ZSB0
byByZWJhbGFuY2UgdGhlbS4KKyAgICAgICAgICAgIGludCBjb2x1bW5IZWlnaHQgPSBtYXgoY29s
SW5mby0+bWluaW11bUNvbHVtbkhlaWdodCgpLCAoaW50KWNlaWxmKChmbG9hdCljb250ZW50SGVp
Z2h0KCkgLyBkZXNpcmVkQ29sdW1uQ291bnQpKTsKKyAgICAgICAgICAgIGlmIChjb2x1bW5IZWln
aHQgPiAwKSB7CisgICAgICAgICAgICAgICAgc3RhdGVQdXNoZXIucG9wKCk7CisgICAgICAgICAg
ICAgICAgbV9ldmVySGFkTGF5b3V0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBsYXlvdXRCbG9j
ayhmYWxzZSwgY29sdW1uSGVpZ2h0KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSAKICAgICAgICAgCi0gICAgICAgIGlmIChzdHlsZSgpLT5k
aXJlY3Rpb24oKSA9PSBMVFIpCi0gICAgICAgICAgICBjdXJyWCArPSBkZXNpcmVkQ29sdW1uV2lk
dGggKyBjb2xHYXA7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGN1cnJYIC09IChkZXNpcmVk
Q29sdW1uV2lkdGggKyBjb2xHYXApOwotCi0gICAgICAgIGN1cnJZICs9IGNvbFJlY3QuaGVpZ2h0
KCk7Ci0gICAgICAgIGF2YWlsYWJsZUhlaWdodCAtPSBjb2xSZWN0LmhlaWdodCgpOwotCi0gICAg
ICAgIG1heENvbEJvdHRvbSA9IG1heChjb2xSZWN0LmJvdHRvbSgpLCBtYXhDb2xCb3R0b20pOwor
ICAgICAgICBpZiAocGFnZUhlaWdodCkgLy8gRklYTUU6IFNob3VsZCB3ZSB1c2UgbG93ZXN0UG9z
aXRpb24gKGV4Y2x1ZGluZyBvdXIgcG9zaXRpb25lZCBvYmplY3RzKSBpbnN0ZWFkIG9mIGNvbnRl
bnRIZWlnaHQoKT8KKyAgICAgICAgICAgIGNvbEluZm8tPnNldENvbHVtbkNvdW50QW5kSGVpZ2h0
KGNlaWxmKChmbG9hdCljb250ZW50SGVpZ2h0KCkgLyBwYWdlSGVpZ2h0KSwgcGFnZUhlaWdodCk7
CiAKLSAgICAgICAgaW5mby0+YWRkQ29sdW1uUmVjdChjb2xSZWN0KTsKLSAgICAgICAgCi0gICAg
ICAgIC8vIFN0YXJ0IGFkZGluZyBpbiBtb3JlIGNvbHVtbnMgYXMgbG9uZyBhcyB0aGVyZSdzIHN0
aWxsIGNvbnRlbnQgbGVmdC4KLSAgICAgICAgaWYgKGN1cnJZIDwgZW5kT2ZDb250ZW50ICYmIGkg
PT0gY29sQ291bnQgLSAxICYmIChjb21wdXRlSW50cmluc2ljSGVpZ2h0IHx8IGNvbnRlbnRIZWln
aHQoKSkpCi0gICAgICAgICAgICBjb2xDb3VudCsrOwotICAgIH0KKyAgICAgICAgaWYgKGNvbHVt
bkNvdW50KGNvbEluZm8pKSB7CisgICAgICAgICAgICBJbnRSZWN0IGxhc3RSZWN0ID0gY29sdW1u
UmVjdEF0KGNvbEluZm8sIGNvbHVtbkNvdW50KGNvbEluZm8pIC0gMSk7CisgICAgICAgICAgICBp
bnQgb3ZlcmZsb3dMZWZ0ID0gc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gUlRMID8gbWluKDAsIGxh
c3RSZWN0LngoKSkgOiAwOworICAgICAgICAgICAgaW50IG92ZXJmbG93UmlnaHQgPSBzdHlsZSgp
LT5kaXJlY3Rpb24oKSA9PSBMVFIgPyBtYXgod2lkdGgoKSwgbGFzdFJlY3QueCgpICsgbGFzdFJl
Y3Qud2lkdGgoKSkgOiAwOworICAgICAgICAgICAgaW50IG92ZXJmbG93SGVpZ2h0ID0gYm9yZGVy
VG9wKCkgKyBwYWRkaW5nVG9wKCkgKyBjb2xJbmZvLT5jb2x1bW5IZWlnaHQoKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgc2V0SGVpZ2h0KG92ZXJmbG93SGVpZ2h0ICsgYm9yZGVyQm90dG9t
KCkgKyBwYWRkaW5nQm90dG9tKCkgKyBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCkpOwogCi0g
ICAgaWYgKG1pbmltdW1Db2x1bW5IZWlnaHQgPj0gMCkgewotICAgICAgICAvLyBJZiBvcmlnaW5h
bENvbEhlaWdodCB3YXMgdG9vIHNtYWxsLCB3ZSBuZWVkIHRvIHRyeSB0byBsYXlvdXQgYWdhaW4u
Ci0gICAgICAgIHJldHVybiBsYXlvdXRDb2x1bW5zKGVuZE9mQ29udGVudCwgbWluaW11bUNvbHVt
bkhlaWdodCk7CisgICAgICAgICAgICBtX292ZXJmbG93LmNsZWFyKCk7CisgICAgICAgICAgICBh
ZGRMYXlvdXRPdmVyZmxvdyhJbnRSZWN0KG92ZXJmbG93TGVmdCwgMCwgb3ZlcmZsb3dSaWdodCAt
IG92ZXJmbG93TGVmdCwgb3ZlcmZsb3dIZWlnaHQpKTsKKyAgICAgICAgfQogICAgIH0KLQotICAg
IGludCBvdmVyZmxvd1JpZ2h0ID0gbWF4KHdpZHRoKCksIGN1cnJYIC0gY29sR2FwKTsKLSAgICBp
bnQgb3ZlcmZsb3dMZWZ0ID0gbWluKDAsIGN1cnJYICsgZGVzaXJlZENvbHVtbldpZHRoICsgY29s
R2FwKTsKLSAgICBpbnQgb3ZlcmZsb3dIZWlnaHQgPSBtYXhDb2xCb3R0b207Ci0gICAgaW50IHRv
QWRkID0gYm9yZGVyQm90dG9tKCkgKyBwYWRkaW5nQm90dG9tKCkgKyBob3Jpem9udGFsU2Nyb2xs
YmFySGVpZ2h0KCk7Ci0gICAgICAgIAotICAgIGlmIChjb21wdXRlSW50cmluc2ljSGVpZ2h0KQot
ICAgICAgICBzZXRIZWlnaHQobWF4Q29sQm90dG9tICsgdG9BZGQpOwotCi0gICAgbV9vdmVyZmxv
dy5jbGVhcigpOwotICAgIGFkZExheW91dE92ZXJmbG93KEludFJlY3Qob3ZlcmZsb3dMZWZ0LCAw
LCBvdmVyZmxvd1JpZ2h0IC0gb3ZlcmZsb3dMZWZ0LCBvdmVyZmxvd0hlaWdodCkpOwotCi0gICAg
di0+c2V0UHJpbnRSZWN0KEludFJlY3QoKSk7Ci0gICAgdi0+c2V0VHJ1bmNhdGVkQXQoMCk7Ci0g
ICAgCi0gICAgQVNTRVJUKGNvbENvdW50ID09IGluZm8tPmNvbHVtbkNvdW50KCkpOwogICAgIAot
ICAgIHJldHVybiBjb250ZW50Qm90dG9tOworICAgIHJldHVybiBmYWxzZTsKIH0KIAogdm9pZCBS
ZW5kZXJCbG9jazo6YWRqdXN0UG9pbnRUb0NvbHVtbkNvbnRlbnRzKEludFBvaW50JiBwb2ludCkg
Y29uc3QKQEAgLTQzMzAsMTcgKzQ0NTYsMTcgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRqdXN0UG9p
bnRUb0NvbHVtbkNvbgogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgQ29sdW1uSW5mbyogY29s
SW5mbyA9IGNvbHVtbkluZm8oKTsKLSAgICBpZiAoIWNvbEluZm8tPmNvbHVtbkNvdW50KCkpCisg
ICAgaWYgKCFjb2x1bW5Db3VudChjb2xJbmZvKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8g
RGV0ZXJtaW5lIHdoaWNoIGNvbHVtbnMgd2UgaW50ZXJzZWN0LgogICAgIGludCBjb2xHYXAgPSBj
b2x1bW5HYXAoKTsKICAgICBpbnQgbGVmdEdhcCA9IGNvbEdhcCAvIDI7Ci0gICAgSW50UG9pbnQg
Y29sdW1uUG9pbnQoY29sSW5mby0+Y29sdW1uUmVjdEF0KDApLmxvY2F0aW9uKCkpOworICAgIElu
dFBvaW50IGNvbHVtblBvaW50KGNvbHVtblJlY3RBdChjb2xJbmZvLCAwKS5sb2NhdGlvbigpKTsK
ICAgICBpbnQgeU9mZnNldCA9IDA7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvbElu
Zm8tPmNvbHVtbkNvdW50KCk7IGkrKykgewogICAgICAgICAvLyBBZGQgaW4gaGFsZiB0aGUgY29s
dW1uIGdhcCB0byB0aGUgbGVmdCBhbmQgcmlnaHQgb2YgdGhlIHJlY3QuCi0gICAgICAgIEludFJl
Y3QgY29sUmVjdCA9IGNvbEluZm8tPmNvbHVtblJlY3RBdChpKTsKKyAgICAgICAgSW50UmVjdCBj
b2xSZWN0ID0gY29sdW1uUmVjdEF0KGNvbEluZm8sIGkpOwogICAgICAgICBJbnRSZWN0IGdhcEFu
ZENvbHVtblJlY3QoY29sUmVjdC54KCkgLSBsZWZ0R2FwLCBjb2xSZWN0LnkoKSwgY29sUmVjdC53
aWR0aCgpICsgY29sR2FwLCBjb2xSZWN0LmhlaWdodCgpKTsKIAogICAgICAgICBpZiAocG9pbnQu
eCgpID49IGdhcEFuZENvbHVtblJlY3QueCgpICYmIHBvaW50LngoKSA8IGdhcEFuZENvbHVtblJl
Y3QucmlnaHQoKSkgewpAQCAtNDM3OCw3ICs0NTA0LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRq
dXN0UmVjdEZvckNvbHVtbnMoSQogICAgIEludFJlY3QgcmVzdWx0OwogICAgIAogICAgIC8vIERl
dGVybWluZSB3aGljaCBjb2x1bW5zIHdlIGludGVyc2VjdC4KLSAgICB1bnNpZ25lZCBjb2xDb3Vu
dCA9IGNvbEluZm8tPmNvbHVtbkNvdW50KCk7CisgICAgdW5zaWduZWQgY29sQ291bnQgPSBjb2x1
bW5Db3VudChjb2xJbmZvKTsKICAgICBpZiAoIWNvbENvdW50KQogICAgICAgICByZXR1cm47CiAg
ICAgCkBAIC00Mzg2LDcgKzQ1MTIsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGp1c3RSZWN0Rm9y
Q29sdW1ucyhJCiAgICAgCiAgICAgaW50IGN1cnJZT2Zmc2V0ID0gMDsKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgY29sQ291bnQ7IGkrKykgewotICAgICAgICBJbnRSZWN0IGNvbFJlY3Qg
PSBjb2xJbmZvLT5jb2x1bW5SZWN0QXQoaSk7CisgICAgICAgIEludFJlY3QgY29sUmVjdCA9IGNv
bHVtblJlY3RBdChjb2xJbmZvLCBpKTsKICAgICAgICAgaW50IGN1cnJYT2Zmc2V0ID0gY29sUmVj
dC54KCkgLSBsZWZ0OwogICAgICAgICAKICAgICAgICAgSW50UmVjdCByZXBhaW50UmVjdCA9IHI7
CkBAIC00NDEyLDkgKzQ1MzgsOSBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGp1c3RGb3JDb2x1bW5z
KEludFNpCiAKICAgICBpbnQgbGVmdCA9IGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCk7CiAg
ICAgaW50IHlPZmZzZXQgPSAwOwotICAgIHNpemVfdCBjb2x1bW5Db3VudCA9IGNvbEluZm8tPmNv
bHVtbkNvdW50KCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb2x1bW5Db3VudDsgKytp
KSB7Ci0gICAgICAgIEludFJlY3QgY29sdW1uUmVjdCA9IGNvbEluZm8tPmNvbHVtblJlY3RBdChp
KTsKKyAgICBzaXplX3QgY29sQ291bnQgPSBjb2x1bW5Db3VudChjb2xJbmZvKTsKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGNvbENvdW50OyArK2kpIHsKKyAgICAgICAgSW50UmVjdCBjb2x1
bW5SZWN0ID0gY29sdW1uUmVjdEF0KGNvbEluZm8sIGkpOwogICAgICAgICBpbnQgeE9mZnNldCA9
IGNvbHVtblJlY3QueCgpIC0gbGVmdDsKICAgICAgICAgaWYgKHBvaW50LnkoKSA8IGNvbHVtblJl
Y3QuYm90dG9tKCkgKyB5T2Zmc2V0KSB7CiAgICAgICAgICAgICBvZmZzZXQuZXhwYW5kKHhPZmZz
ZXQsIC15T2Zmc2V0KTsKQEAgLTUzOTIsMjQgKzU1MTgsNDQgQEAgdm9pZCBSZW5kZXJCbG9jazo6
Y2xlYXJUcnVuY2F0aW9uKCkKIAogdm9pZCBSZW5kZXJCbG9jazo6c2V0TWF4VG9wTWFyZ2lucyhp
bnQgcG9zLCBpbnQgbmVnKQogewotICAgIGlmICghbV9tYXhNYXJnaW4pIHsKLSAgICAgICAgaWYg
KHBvcyA9PSBNYXhNYXJnaW46OnRvcFBvc0RlZmF1bHQodGhpcykgJiYgbmVnID09IE1heE1hcmdp
bjo6dG9wTmVnRGVmYXVsdCh0aGlzKSkKKyAgICBpZiAoIW1fcmFyZURhdGEpIHsKKyAgICAgICAg
aWYgKHBvcyA9PSBSZW5kZXJCbG9ja1JhcmVEYXRhOjp0b3BQb3NEZWZhdWx0KHRoaXMpICYmIG5l
ZyA9PSBSZW5kZXJCbG9ja1JhcmVEYXRhOjp0b3BOZWdEZWZhdWx0KHRoaXMpKQogICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICBtX21heE1hcmdpbiA9IG5ldyBNYXhNYXJnaW4odGhpcyk7Cisg
ICAgICAgIG1fcmFyZURhdGEgPSBuZXcgUmVuZGVyQmxvY2tSYXJlRGF0YSh0aGlzKTsKICAgICB9
Ci0gICAgbV9tYXhNYXJnaW4tPm1fdG9wUG9zID0gcG9zOwotICAgIG1fbWF4TWFyZ2luLT5tX3Rv
cE5lZyA9IG5lZzsKKyAgICBtX3JhcmVEYXRhLT5tX3RvcFBvcyA9IHBvczsKKyAgICBtX3JhcmVE
YXRhLT5tX3RvcE5lZyA9IG5lZzsKIH0KIAogdm9pZCBSZW5kZXJCbG9jazo6c2V0TWF4Qm90dG9t
TWFyZ2lucyhpbnQgcG9zLCBpbnQgbmVnKQogewotICAgIGlmICghbV9tYXhNYXJnaW4pIHsKLSAg
ICAgICAgaWYgKHBvcyA9PSBNYXhNYXJnaW46OmJvdHRvbVBvc0RlZmF1bHQodGhpcykgJiYgbmVn
ID09IE1heE1hcmdpbjo6Ym90dG9tTmVnRGVmYXVsdCh0aGlzKSkKKyAgICBpZiAoIW1fcmFyZURh
dGEpIHsKKyAgICAgICAgaWYgKHBvcyA9PSBSZW5kZXJCbG9ja1JhcmVEYXRhOjpib3R0b21Qb3NE
ZWZhdWx0KHRoaXMpICYmIG5lZyA9PSBSZW5kZXJCbG9ja1JhcmVEYXRhOjpib3R0b21OZWdEZWZh
dWx0KHRoaXMpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX21heE1hcmdpbiA9IG5l
dyBNYXhNYXJnaW4odGhpcyk7CisgICAgICAgIG1fcmFyZURhdGEgPSBuZXcgUmVuZGVyQmxvY2tS
YXJlRGF0YSh0aGlzKTsKICAgICB9Ci0gICAgbV9tYXhNYXJnaW4tPm1fYm90dG9tUG9zID0gcG9z
OwotICAgIG1fbWF4TWFyZ2luLT5tX2JvdHRvbU5lZyA9IG5lZzsKKyAgICBtX3JhcmVEYXRhLT5t
X2JvdHRvbVBvcyA9IHBvczsKKyAgICBtX3JhcmVEYXRhLT5tX2JvdHRvbU5lZyA9IG5lZzsKK30K
Kwordm9pZCBSZW5kZXJCbG9jazo6c2V0UGFnaW5hdGlvblN0cnV0KGludCBzdHJ1dCkKK3sKKyAg
ICBpZiAoIW1fcmFyZURhdGEpIHsKKyAgICAgICAgaWYgKHN0cnV0ID09IDApCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIG1fcmFyZURhdGEgPSBuZXcgUmVuZGVyQmxvY2tSYXJlRGF0YSh0
aGlzKTsKKyAgICB9CisgICAgbV9yYXJlRGF0YS0+bV9wYWdpbmF0aW9uU3RydXQgPSBzdHJ1dDsK
K30KKwordm9pZCBSZW5kZXJCbG9jazo6c2V0UGFnZVkoaW50IHkpCit7CisgICAgaWYgKCFtX3Jh
cmVEYXRhKSB7CisgICAgICAgIGlmICh5ID09IDApCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIG1fcmFyZURhdGEgPSBuZXcgUmVuZGVyQmxvY2tSYXJlRGF0YSh0aGlzKTsKKyAgICB9Cisg
ICAgbV9yYXJlRGF0YS0+bV9wYWdlWSA9IHk7CiB9CiAKIHZvaWQgUmVuZGVyQmxvY2s6OmFic29s
dXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgaW50IHR4LCBpbnQgdHkpCkBAIC01Njcw
LDYgKzU4MTYsOTggQEAgUmVuZGVyQmxvY2sqIFJlbmRlckJsb2NrOjpjcmVhdGVBbm9ueW1vdQog
ICAgIHJldHVybiBuZXdCb3g7CiB9CiAKK2ludCBSZW5kZXJCbG9jazo6bmV4dFBhZ2VUb3AoaW50
IHlQb3MpIGNvbnN0Cit7CisgICAgTGF5b3V0U3RhdGUqIGxheW91dFN0YXRlID0gdmlldygpLT5s
YXlvdXRTdGF0ZSgpOworICAgIGlmICghbGF5b3V0U3RhdGUtPm1fcGFnZUhlaWdodCkKKyAgICAg
ICAgcmV0dXJuIHlQb3M7CisgICAgCisgICAgLy8gVGhlIHlQb3MgaXMgaW4gb3VyIGNvb3JkaW5h
dGUgc3BhY2UuICBXZSBjYW4gYWRkIGluIG91ciBwdXNoZWQgb2Zmc2V0LgorICAgIGludCBwYWdl
SGVpZ2h0ID0gbGF5b3V0U3RhdGUtPm1fcGFnZUhlaWdodDsKKyAgICBpbnQgcmVtYWluaW5nSGVp
Z2h0ID0gcGFnZUhlaWdodCAtICgobGF5b3V0U3RhdGUtPm1fbGF5b3V0T2Zmc2V0IC0gbGF5b3V0
U3RhdGUtPm1fcGFnZU9mZnNldCkuaGVpZ2h0KCkgKyB5UG9zKSAlIHBhZ2VIZWlnaHQ7CisgICAg
cmV0dXJuIHlQb3MgKyByZW1haW5pbmdIZWlnaHQ7Cit9CisKK2ludCBSZW5kZXJCbG9jazo6YXBw
bHlCZWZvcmVCcmVhayhSZW5kZXJCb3gqIGNoaWxkLCBpbnQgeVBvcykKK3sKKyAgICBib29sIGNo
ZWNrUGFnZUJyZWFrcyA9IGRvY3VtZW50KCktPnBhZ2luYXRlZCgpICYmIGRvY3VtZW50KCktPnNl
dHRpbmdzKCktPnBhZ2luYXRlRHVyaW5nTGF5b3V0RW5hYmxlZCgpOworICAgIGJvb2wgY2hlY2tD
b2x1bW5CcmVha3MgPSB2aWV3KCktPmxheW91dFN0YXRlKCktPnBhZ2luYXRpbmdDb2x1bW5zKCk7
CisgICAgYm9vbCBjaGVja0JlZm9yZUFsd2F5cyA9IChjaGVja1BhZ2VCcmVha3MgJiYgY2hpbGQt
PnN0eWxlKCktPnBhZ2VCcmVha0JlZm9yZSgpID09IFBCQUxXQVlTKSB8fCAoY2hlY2tDb2x1bW5C
cmVha3MgJiYgY2hpbGQtPnN0eWxlKCktPmNvbHVtbkJyZWFrQmVmb3JlKCkgPT0gUEJBTFdBWVMp
OworICAgIGlmIChjaGVja0JlZm9yZUFsd2F5cykKKyAgICAgICAgcmV0dXJuIG5leHRQYWdlVG9w
KHlQb3MpOworICAgIHJldHVybiB5UG9zOworfQorCitpbnQgUmVuZGVyQmxvY2s6OmFwcGx5QWZ0
ZXJCcmVhayhSZW5kZXJCb3gqIGNoaWxkLCBpbnQgeVBvcywgTWFyZ2luSW5mbyYgbWFyZ2luSW5m
bykKK3sKKyAgICBib29sIGNoZWNrUGFnZUJyZWFrcyA9IGRvY3VtZW50KCktPnBhZ2luYXRlZCgp
ICYmIGRvY3VtZW50KCktPnNldHRpbmdzKCktPnBhZ2luYXRlRHVyaW5nTGF5b3V0RW5hYmxlZCgp
OworICAgIGJvb2wgY2hlY2tDb2x1bW5CcmVha3MgPSB2aWV3KCktPmxheW91dFN0YXRlKCktPnBh
Z2luYXRpbmdDb2x1bW5zKCk7CisgICAgYm9vbCBjaGVja0FmdGVyQWx3YXlzID0gKGNoZWNrUGFn
ZUJyZWFrcyAmJiBjaGlsZC0+c3R5bGUoKS0+cGFnZUJyZWFrQWZ0ZXIoKSA9PSBQQkFMV0FZUykg
fHwgKGNoZWNrQ29sdW1uQnJlYWtzICYmIGNoaWxkLT5zdHlsZSgpLT5jb2x1bW5CcmVha0FmdGVy
KCkgPT0gUEJBTFdBWVMpOworICAgIGlmIChjaGVja0FmdGVyQWx3YXlzKSB7CisgICAgICAgIG1h
cmdpbkluZm8uc2V0Qm90dG9tUXVpcmsodHJ1ZSk7IC8vIENhdXNlIG1hcmdpbnMgdG8gYmUgZGlz
Y2FyZGVkIGZvciBhbnkgZm9sbG93aW5nIGNvbnRlbnQuCisgICAgICAgIHJldHVybiBuZXh0UGFn
ZVRvcCh5UG9zKTsKKyAgICB9CisgICAgcmV0dXJuIHlQb3M7Cit9CisKK2ludCBSZW5kZXJCbG9j
azo6YWRqdXN0Rm9yVW5zcGxpdHRhYmxlQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCwgaW50IHlQb3Ms
IGJvb2wgaW5jbHVkZU1hcmdpbnMpCit7CisgICAgYm9vbCBpc1Vuc3BsaXR0YWJsZSA9IGNoaWxk
LT5pc1JlcGxhY2VkKCkgfHwgY2hpbGQtPnNjcm9sbHNPdmVyZmxvdygpOworICAgIGlmICghaXNV
bnNwbGl0dGFibGUpCisgICAgICAgIHJldHVybiB5UG9zOworICAgIGludCBjaGlsZEhlaWdodCA9
IGNoaWxkLT5oZWlnaHQoKSArIChpbmNsdWRlTWFyZ2lucyA/IGNoaWxkLT5tYXJnaW5Ub3AoKSAr
IGNoaWxkLT5tYXJnaW5Cb3R0b20oKSA6IDApOworICAgIExheW91dFN0YXRlKiBsYXlvdXRTdGF0
ZSA9IHZpZXcoKS0+bGF5b3V0U3RhdGUoKTsKKyAgICBpZiAobGF5b3V0U3RhdGUtPm1fY29sdW1u
SW5mbykKKyAgICAgICAgbGF5b3V0U3RhdGUtPm1fY29sdW1uSW5mby0+dXBkYXRlTWluaW11bUNv
bHVtbkhlaWdodChjaGlsZEhlaWdodCk7CisgICAgaW50IHBhZ2VIZWlnaHQgPSBsYXlvdXRTdGF0
ZS0+bV9wYWdlSGVpZ2h0OworICAgIGlmICghcGFnZUhlaWdodCB8fCBjaGlsZEhlaWdodCA+IHBh
Z2VIZWlnaHQpCisgICAgICAgIHJldHVybiB5UG9zOworICAgIGludCByZW1haW5pbmdIZWlnaHQg
PSBwYWdlSGVpZ2h0IC0gKChsYXlvdXRTdGF0ZS0+bV9sYXlvdXRPZmZzZXQgLSBsYXlvdXRTdGF0
ZS0+bV9wYWdlT2Zmc2V0KS5oZWlnaHQoKSArIHlQb3MpICUgcGFnZUhlaWdodDsKKyAgICBpZiAo
cmVtYWluaW5nSGVpZ2h0IDwgY2hpbGRIZWlnaHQpCisgICAgICAgIHJldHVybiB5UG9zICsgcmVt
YWluaW5nSGVpZ2h0OworICAgIHJldHVybiB5UG9zOworfQorCit2b2lkIFJlbmRlckJsb2NrOjph
ZGp1c3RMaW5lUG9zaXRpb25Gb3JQYWdpbmF0aW9uKFJvb3RJbmxpbmVCb3gqIGxpbmVCb3gsIGlu
dCYgZGVsdGEpCit7CisgICAgLy8gRklYTUU6IEZvciBub3cgd2UgcGFnaW5hdGUgdXNpbmcgbGlu
ZSBvdmVyZmxvdy4gIFRoaXMgZW5zdXJlcyB0aGF0IGxpbmVzIGRvbid0IG92ZXJsYXAgYXQgYWxs
IHdoZW4gd2UKKyAgICAvLyBwdXQgYSBzdHJ1dCBiZXR3ZWVuIHRoZW0gZm9yIHBhZ2luYXRpb24g
cHVycG9zZXMuICBIb3dldmVyLCB0aGlzIHJlYWxseSBpc24ndCB0aGUgZGVzaXJlZCByZW5kZXJp
bmcsIHNpbmNlCisgICAgLy8gdGhlIGxpbmUgb24gdGhlIHRvcCBvZiB0aGUgbmV4dCBwYWdlIHdp
bGwgYXBwZWFyIHRvbyBmYXIgZG93biByZWxhdGl2ZSB0byB0aGUgc2FtZSBraW5kIG9mIGxpbmUg
YXQgdGhlIHRvcAorICAgIC8vIG9mIHRoZSBmaXJzdCBjb2x1bW4uCisgICAgLy8KKyAgICAvLyBU
aGUgcmVuZGVyaW5nIHdlIHdvdWxkIGxpa2UgdG8gc2VlIGlzIG9uZSB3aGVyZSB0aGUgbGluZVRv
cCBpcyBhdCB0aGUgdG9wIG9mIHRoZSBjb2x1bW4sIGFuZCBhbnkgbGluZSBvdmVyZmxvdworICAg
IC8vIHNpbXBseSBzcGlsbHMgb3V0IGFib3ZlIHRoZSB0b3Agb2YgdGhlIGNvbHVtbi4gIFRoaXMg
ZWZmZWN0IHdvdWxkIG1hdGNoIHdoYXQgaGFwcGVucyBhdCB0aGUgdG9wIG9mIHRoZSBmaXJzdCBj
b2x1bW4uCisgICAgLy8gV2UgY2FuJ3QgYWNoaWV2ZSB0aGlzIHJlbmRlcmluZywgaG93ZXZlciwg
dW50aWwgd2Ugc3RvcCBjb2x1bW5zIGZyb20gY2xpcHBpbmcgdG8gdGhlIGNvbHVtbiBib3VuZHMg
KHRodXMgYWxsb3dpbmcKKyAgICAvLyBmb3Igb3ZlcmZsb3cgdG8gb2NjdXIpLCBhbmQgdGhlbiBj
YWNoZSB2aXNpYmxlIG92ZXJmbG93IGZvciBlYWNoIGNvbHVtbiByZWN0LgorICAgIC8vCisgICAg
Ly8gRnVydGhlcm1vcmUsIHRoZSBwYWludCB3ZSBoYXZlIHRvIGRvIHdoZW4gYSBjb2x1bW4gaGFz
IG92ZXJmbG93IGhhcyB0byBiZSBzcGVjaWFsLiAgV2UgbmVlZCB0byBleGNsdWRlCisgICAgLy8g
Y29udGVudCB0aGF0IHBhaW50cyBpbiBhIHByZXZpb3VzIGNvbHVtbiAoYW5kIGNvbnRlbnQgdGhh
dCBwYWludHMgaW4gdGhlIGZvbGxvd2luZyBjb2x1bW4pLgorICAgIC8vCisgICAgLy8gRklYTUU6
IEFub3RoZXIgcHJvYmxlbSB3aXRoIHNpbXBseSBtb3ZpbmcgbGluZXMgaXMgdGhhdCB0aGUgYXZh
aWxhYmxlIGxpbmUgd2lkdGggbWF5IGNoYW5nZSAoYmVjYXVzZSBvZiBmbG9hdHMpLgorICAgIC8v
IFRlY2huaWNhbGx5IGlmIHRoZSBsb2NhdGlvbiB3ZSBtb3ZlIHRoZSBsaW5lIHRvIGhhcyBhIGRp
ZmZlcmVudCBsaW5lIHdpZHRoIHRoYW4gb3VyIG9sZCBwb3NpdGlvbiwgdGhlbiB3ZSBuZWVkIHRv
IGRpcnR5IHRoZQorICAgIC8vIGxpbmUgYW5kIGFsbCBmb2xsb3dpbmcgbGluZXMuCisgICAgTGF5
b3V0U3RhdGUqIGxheW91dFN0YXRlID0gdmlldygpLT5sYXlvdXRTdGF0ZSgpOworICAgIGludCBw
YWdlSGVpZ2h0ID0gbGF5b3V0U3RhdGUtPm1fcGFnZUhlaWdodDsKKyAgICBpbnQgeVBvcyA9IGxp
bmVCb3gtPnRvcFZpc2libGVPdmVyZmxvdygpOworICAgIGludCBsaW5lSGVpZ2h0ID0gbGluZUJv
eC0+Ym90dG9tVmlzaWJsZU92ZXJmbG93KCkgLSB5UG9zOworICAgIGlmIChsYXlvdXRTdGF0ZS0+
bV9jb2x1bW5JbmZvKQorICAgICAgICBsYXlvdXRTdGF0ZS0+bV9jb2x1bW5JbmZvLT51cGRhdGVN
aW5pbXVtQ29sdW1uSGVpZ2h0KGxpbmVIZWlnaHQpOworICAgIHlQb3MgKz0gZGVsdGE7CisgICAg
bGluZUJveC0+c2V0UGFnaW5hdGlvblN0cnV0KDApOworICAgIGlmICghcGFnZUhlaWdodCB8fCBs
aW5lSGVpZ2h0ID4gcGFnZUhlaWdodCkKKyAgICAgICAgcmV0dXJuOworICAgIGludCByZW1haW5p
bmdIZWlnaHQgPSBwYWdlSGVpZ2h0IC0gKChsYXlvdXRTdGF0ZS0+bV9sYXlvdXRPZmZzZXQgLSBs
YXlvdXRTdGF0ZS0+bV9wYWdlT2Zmc2V0KS5oZWlnaHQoKSArIHlQb3MpICUgcGFnZUhlaWdodDsK
KyAgICBpZiAocmVtYWluaW5nSGVpZ2h0IDwgbGluZUhlaWdodCkgeworICAgICAgICBpbnQgdG90
YWxIZWlnaHQgPSBsaW5lSGVpZ2h0ICsgbWF4KDAsIHlQb3MpOworICAgICAgICBpZiAobGluZUJv
eCA9PSBmaXJzdFJvb3RCb3goKSAmJiB0b3RhbEhlaWdodCA8IHBhZ2VIZWlnaHQgJiYgIWlzUG9z
aXRpb25lZCgpICYmICFpc1RhYmxlQ2VsbCgpKQorICAgICAgICAgICAgc2V0UGFnaW5hdGlvblN0
cnV0KHJlbWFpbmluZ0hlaWdodCArIG1heCgwLCB5UG9zKSk7CisgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgZGVsdGEgKz0gcmVtYWluaW5nSGVpZ2h0OworICAgICAgICAgICAgbGluZUJveC0+
c2V0UGFnaW5hdGlvblN0cnV0KHJlbWFpbmluZ0hlaWdodCk7CisgICAgICAgIH0KKyAgICB9ICAK
K30KKyAKIGNvbnN0IGNoYXIqIFJlbmRlckJsb2NrOjpyZW5kZXJOYW1lKCkgY29uc3QKIHsKICAg
ICBpZiAoaXNCb2R5KCkpCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHJldmlzaW9uIDY2
OTAzKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAkod29ya2luZyBjb3B5KQpA
QCAtMzQsNiArMzQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENvbHVtbkluZm87
CiBjbGFzcyBJbmxpbmVJdGVyYXRvcjsKK2NsYXNzIExheW91dFN0YXRlTWFpbnRhaW5lcjsKIGNs
YXNzIFJlbmRlcklubGluZTsKIAogc3RydWN0IEJpZGlSdW47CkBAIC03MCw3ICs3MSw3IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwg
UmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IDApOwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVD
aGlsZChSZW5kZXJPYmplY3QqKTsKIAotICAgIHZpcnR1YWwgdm9pZCBsYXlvdXRCbG9jayhib29s
IHJlbGF5b3V0Q2hpbGRyZW4pOworICAgIHZpcnR1YWwgdm9pZCBsYXlvdXRCbG9jayhib29sIHJl
bGF5b3V0Q2hpbGRyZW4sIGludCBwYWdlSGVpZ2h0ID0gMCk7CiAKICAgICB2b2lkIGluc2VydFBv
c2l0aW9uZWRPYmplY3QoUmVuZGVyQm94Kik7CiAgICAgdm9pZCByZW1vdmVQb3NpdGlvbmVkT2Jq
ZWN0KFJlbmRlckJveCopOwpAQCAtODksNiArOTAsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIG1h
cmtBbGxEZXNjZW5kYW50c1dpdGhGbG9hdHNGb3JMYXlvdXQoUmVuZGVyQm94KiBmbG9hdFRvUmVt
b3ZlID0gMCwgYm9vbCBpbkxheW91dCA9IHRydWUpOwogICAgIHZvaWQgbWFya1Bvc2l0aW9uZWRP
YmplY3RzRm9yTGF5b3V0KCk7CisgICAgdm9pZCBtYXJrRGVzY2VuZGFudEJsb2Nrc0FuZExpbmVz
Rm9yTGF5b3V0KGJvb2wgaW5MYXlvdXQgPSB0cnVlKTsKIAogICAgIGJvb2wgY29udGFpbnNGbG9h
dHMoKSB7IHJldHVybiBtX2Zsb2F0aW5nT2JqZWN0cyAmJiAhbV9mbG9hdGluZ09iamVjdHMtPmlz
RW1wdHkoKTsgfQogICAgIGJvb2wgY29udGFpbnNGbG9hdChSZW5kZXJPYmplY3QqKTsKQEAgLTE1
MSw2ICsxNTMsMTAgQEAgcHVibGljOgogCiAgICAgQ29sdW1uSW5mbyogY29sdW1uSW5mbygpIGNv
bnN0OwogICAgIGludCBjb2x1bW5HYXAoKSBjb25zdDsKKyAgICAKKyAgICAvLyBUaGVzZSB0d28g
ZnVuY3Rpb25zIHRha2UgdGhlIENvbHVtbkluZm8qIHRvIGF2b2lkIHJlcGVhdGVkIGxvb2t1cHMg
b2YgdGhlIGluZm8gaW4gdGhlIGdsb2JhbCBIYXNoTWFwLgorICAgIHVuc2lnbmVkIGNvbHVtbkNv
dW50KENvbHVtbkluZm8qKSBjb25zdDsKKyAgICBJbnRSZWN0IGNvbHVtblJlY3RBdChDb2x1bW5J
bmZvKiwgdW5zaWduZWQpIGNvbnN0OwogCiBwcm90ZWN0ZWQ6CiAgICAgLy8gVGhlc2UgZnVuY3Rp
b25zIGFyZSBvbmx5IHVzZWQgaW50ZXJuYWxseSB0byBtYW5pcHVsYXRlIHRoZSByZW5kZXIgdHJl
ZSBzdHJ1Y3R1cmUgdmlhIHJlbW92ZS9pbnNlcnQvYXBwZW5kQ2hpbGROb2RlLgpAQCAtMTc3LDIw
ICsxODMsMjUgQEAgcHJvdGVjdGVkOgogICAgIH0KICAgICB2b2lkIG1vdmVDaGlsZHJlblRvKFJl
bmRlckJsb2NrKiB0bywgUmVuZGVyT2JqZWN0KiBzdGFydENoaWxkLCBSZW5kZXJPYmplY3QqIGVu
ZENoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkLCBib29sIGZ1bGxSZW1vdmVJbnNlcnQg
PSBmYWxzZSk7CiAgICAgCi0gICAgaW50IG1heFRvcFBvc01hcmdpbigpIGNvbnN0IHsgcmV0dXJu
IG1fbWF4TWFyZ2luID8gbV9tYXhNYXJnaW4tPm1fdG9wUG9zIDogTWF4TWFyZ2luOjp0b3BQb3NE
ZWZhdWx0KHRoaXMpOyB9Ci0gICAgaW50IG1heFRvcE5lZ01hcmdpbigpIGNvbnN0IHsgcmV0dXJu
IG1fbWF4TWFyZ2luID8gbV9tYXhNYXJnaW4tPm1fdG9wTmVnIDogTWF4TWFyZ2luOjp0b3BOZWdE
ZWZhdWx0KHRoaXMpOyB9Ci0gICAgaW50IG1heEJvdHRvbVBvc01hcmdpbigpIGNvbnN0IHsgcmV0
dXJuIG1fbWF4TWFyZ2luID8gbV9tYXhNYXJnaW4tPm1fYm90dG9tUG9zIDogTWF4TWFyZ2luOjpi
b3R0b21Qb3NEZWZhdWx0KHRoaXMpOyB9Ci0gICAgaW50IG1heEJvdHRvbU5lZ01hcmdpbigpIGNv
bnN0IHsgcmV0dXJuIG1fbWF4TWFyZ2luID8gbV9tYXhNYXJnaW4tPm1fYm90dG9tTmVnIDogTWF4
TWFyZ2luOjpib3R0b21OZWdEZWZhdWx0KHRoaXMpOyB9CisgICAgaW50IG1heFRvcFBvc01hcmdp
bigpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVEYXRhLT5tX3RvcFBvcyA6IFJl
bmRlckJsb2NrUmFyZURhdGE6OnRvcFBvc0RlZmF1bHQodGhpcyk7IH0KKyAgICBpbnQgbWF4VG9w
TmVnTWFyZ2luKCkgY29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1fdG9w
TmVnIDogUmVuZGVyQmxvY2tSYXJlRGF0YTo6dG9wTmVnRGVmYXVsdCh0aGlzKTsgfQorICAgIGlu
dCBtYXhCb3R0b21Qb3NNYXJnaW4oKSBjb25zdCB7IHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJl
RGF0YS0+bV9ib3R0b21Qb3MgOiBSZW5kZXJCbG9ja1JhcmVEYXRhOjpib3R0b21Qb3NEZWZhdWx0
KHRoaXMpOyB9CisgICAgaW50IG1heEJvdHRvbU5lZ01hcmdpbigpIGNvbnN0IHsgcmV0dXJuIG1f
cmFyZURhdGEgPyBtX3JhcmVEYXRhLT5tX2JvdHRvbU5lZyA6IFJlbmRlckJsb2NrUmFyZURhdGE6
OmJvdHRvbU5lZ0RlZmF1bHQodGhpcyk7IH0KKyAgICBpbnQgcGFnaW5hdGlvblN0cnV0KCkgY29u
c3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1fcGFnaW5hdGlvblN0cnV0IDog
MDsgfQorICAgIGludCBwYWdlWSgpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVE
YXRhLT5tX3BhZ2VZIDogMDsgfQogICAgIHZvaWQgc2V0TWF4VG9wTWFyZ2lucyhpbnQgcG9zLCBp
bnQgbmVnKTsKICAgICB2b2lkIHNldE1heEJvdHRvbU1hcmdpbnMoaW50IHBvcywgaW50IG5lZyk7
Ci0gICAgCisgICAgdm9pZCBzZXRQYWdpbmF0aW9uU3RydXQoaW50IHN0cnV0KTsKKyAgICB2b2lk
IHNldFBhZ2VZKGludCB5KTsKKwogICAgIHZvaWQgaW5pdE1heE1hcmdpblZhbHVlcygpCiAgICAg
ewotICAgICAgICBpZiAobV9tYXhNYXJnaW4pIHsKLSAgICAgICAgICAgIG1fbWF4TWFyZ2luLT5t
X3RvcFBvcyA9IE1heE1hcmdpbjo6dG9wUG9zRGVmYXVsdCh0aGlzKTsKLSAgICAgICAgICAgIG1f
bWF4TWFyZ2luLT5tX3RvcE5lZyA9IE1heE1hcmdpbjo6dG9wTmVnRGVmYXVsdCh0aGlzKTsKLSAg
ICAgICAgICAgIG1fbWF4TWFyZ2luLT5tX2JvdHRvbVBvcyA9IE1heE1hcmdpbjo6Ym90dG9tUG9z
RGVmYXVsdCh0aGlzKTsKLSAgICAgICAgICAgIG1fbWF4TWFyZ2luLT5tX2JvdHRvbU5lZyA9IE1h
eE1hcmdpbjo6Ym90dG9tTmVnRGVmYXVsdCh0aGlzKTsKKyAgICAgICAgaWYgKG1fcmFyZURhdGEp
IHsKKyAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fdG9wUG9zID0gUmVuZGVyQmxvY2tSYXJlRGF0
YTo6dG9wUG9zRGVmYXVsdCh0aGlzKTsKKyAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fdG9wTmVn
ID0gUmVuZGVyQmxvY2tSYXJlRGF0YTo6dG9wTmVnRGVmYXVsdCh0aGlzKTsKKyAgICAgICAgICAg
IG1fcmFyZURhdGEtPm1fYm90dG9tUG9zID0gUmVuZGVyQmxvY2tSYXJlRGF0YTo6Ym90dG9tUG9z
RGVmYXVsdCh0aGlzKTsKKyAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fYm90dG9tTmVnID0gUmVu
ZGVyQmxvY2tSYXJlRGF0YTo6Ym90dG9tTmVnRGVmYXVsdCh0aGlzKTsKKyAgICAgICAgICAgIG1f
cmFyZURhdGEtPm1fcGFnaW5hdGlvblN0cnV0ID0gMDsKICAgICAgICAgfQogICAgIH0KIApAQCAt
Mjk1LDkgKzMwNiw0MiBAQCBwcml2YXRlOgogICAgICAgICBib29sIGV2ZXJIYWRMYXlvdXQ7CiAg
ICAgfTsKIAorICAgIHN0cnVjdCBGbG9hdGluZ09iamVjdCA6IE5vbmNvcHlhYmxlIHsKKyAgICAg
ICAgZW51bSBUeXBlIHsKKyAgICAgICAgICAgIEZsb2F0TGVmdCwKKyAgICAgICAgICAgIEZsb2F0
UmlnaHQKKyAgICAgICAgfTsKKworICAgICAgICBGbG9hdGluZ09iamVjdChUeXBlIHR5cGUpCisg
ICAgICAgICAgICA6IG1fcmVuZGVyZXIoMCkKKyAgICAgICAgICAgICwgbV90b3AoMCkKKyAgICAg
ICAgICAgICwgbV9ib3R0b20oMCkKKyAgICAgICAgICAgICwgbV9sZWZ0KDApCisgICAgICAgICAg
ICAsIG1fd2lkdGgoMCkKKyAgICAgICAgICAgICwgbV9wYWdpbmF0aW9uU3RydXQoMCkKKyAgICAg
ICAgICAgICwgbV90eXBlKHR5cGUpCisgICAgICAgICAgICAsIG1fc2hvdWxkUGFpbnQodHJ1ZSkK
KyAgICAgICAgICAgICwgbV9pc0Rlc2NlbmRhbnQoZmFsc2UpCisgICAgICAgIHsKKyAgICAgICAg
fQorCisgICAgICAgIFR5cGUgdHlwZSgpIHsgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGU+KG1fdHlw
ZSk7IH0KKworICAgICAgICBSZW5kZXJCb3gqIG1fcmVuZGVyZXI7CisgICAgICAgIGludCBtX3Rv
cDsKKyAgICAgICAgaW50IG1fYm90dG9tOworICAgICAgICBpbnQgbV9sZWZ0OworICAgICAgICBp
bnQgbV93aWR0aDsKKyAgICAgICAgaW50IG1fcGFnaW5hdGlvblN0cnV0OworICAgICAgICB1bnNp
Z25lZCBtX3R5cGUgOiAxOyAvLyBUeXBlIChsZWZ0IG9yIHJpZ2h0IGFsaWduZWQpCisgICAgICAg
IGJvb2wgbV9zaG91bGRQYWludCA6IDE7CisgICAgICAgIGJvb2wgbV9pc0Rlc2NlbmRhbnQgOiAx
OworICAgIH07CisKICAgICAvLyBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucycgaW1wbGVtZW50YXRp
b25zIGFyZSBpbiBSZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwLgogICAgIFJvb3RJbmxpbmVCb3gq
IGRldGVybWluZVN0YXJ0UG9zaXRpb24oYm9vbCYgZmlyc3RMaW5lLCBib29sJiBmdWxsTGF5b3V0
LCBib29sJiBwcmV2aW91c0xpbmVCcm9rZUNsZWFubHksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBJbmxpbmVCaWRpUmVzb2x2ZXImLCBWZWN0b3I8RmxvYXRXaXRo
UmVjdD4mIGZsb2F0cywgdW5zaWduZWQmIG51bUNsZWFuRmxvYXRzKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIElubGluZUJpZGlSZXNvbHZlciYsIFZlY3RvcjxG
bG9hdFdpdGhSZWN0PiYgZmxvYXRzLCB1bnNpZ25lZCYgbnVtQ2xlYW5GbG9hdHMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sJiB1c2VSZXBhaW50Qm91bmRz
LCBpbnQmIHJlcGFpbnRUb3AsIGludCYgcmVwYWludEJvdHRvbSk7CiAgICAgUm9vdElubGluZUJv
eCogZGV0ZXJtaW5lRW5kUG9zaXRpb24oUm9vdElubGluZUJveCogc3RhcnRCb3gsIElubGluZUl0
ZXJhdG9yJiBjbGVhbkxpbmVTdGFydCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBCaWRpU3RhdHVzJiBjbGVhbkxpbmVCaWRpU3RhdHVzLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCYgeVBvcyk7CkBAIC0zMDUsOSArMzQ5LDkgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgIFJvb3RJbmxpbmVCb3gqJiBlbmRMaW5l
LCBpbnQmIGVuZFlQb3MsIGludCYgcmVwYWludEJvdHRvbSwgaW50JiByZXBhaW50VG9wKTsKIAog
ICAgIHZvaWQgc2tpcFRyYWlsaW5nV2hpdGVzcGFjZShJbmxpbmVJdGVyYXRvciYsIGJvb2wgaXNM
aW5lRW1wdHksIGJvb2wgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5KTsKLSAgICBpbnQgc2tpcExl
YWRpbmdXaGl0ZXNwYWNlKElubGluZUJpZGlSZXNvbHZlciYsIGJvb2wgZmlyc3RMaW5lLCBib29s
IGlzTGluZUVtcHR5LCBib29sIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSk7CisgICAgaW50IHNr
aXBMZWFkaW5nV2hpdGVzcGFjZShJbmxpbmVCaWRpUmVzb2x2ZXImLCBib29sIGZpcnN0TGluZSwg
Ym9vbCBpc0xpbmVFbXB0eSwgYm9vbCBwcmV2aW91c0xpbmVCcm9rZUNsZWFubHksIEZsb2F0aW5n
T2JqZWN0KiBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lKTsKICAgICB2b2lkIGZpdEJlbG93Rmxv
YXRzKGludCB3aWR0aFRvRml0LCBib29sIGZpcnN0TGluZSwgaW50JiBhdmFpbGFibGVXaWR0aCk7
Ci0gICAgSW5saW5lSXRlcmF0b3IgZmluZE5leHRMaW5lQnJlYWsoSW5saW5lQmlkaVJlc29sdmVy
JiwgYm9vbCBmaXJzdExpbmUsIGJvb2wmIGlzTGluZUVtcHR5LCBib29sJiBwcmV2aW91c0xpbmVC
cm9rZUNsZWFubHksIGJvb2wmIGh5cGhlbmF0ZWQsIEVDbGVhciogPSAwKTsKKyAgICBJbmxpbmVJ
dGVyYXRvciBmaW5kTmV4dExpbmVCcmVhayhJbmxpbmVCaWRpUmVzb2x2ZXImLCBib29sIGZpcnN0
TGluZSwgYm9vbCYgaXNMaW5lRW1wdHksIGJvb2wmIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSwg
Ym9vbCYgaHlwaGVuYXRlZCwgRUNsZWFyKiwgRmxvYXRpbmdPYmplY3QqIGxhc3RGbG9hdEZyb21Q
cmV2aW91c0xpbmUpOwogICAgIFJvb3RJbmxpbmVCb3gqIGNvbnN0cnVjdExpbmUodW5zaWduZWQg
cnVuQ291bnQsIEJpZGlSdW4qIGZpcnN0UnVuLCBCaWRpUnVuKiBsYXN0UnVuLCBib29sIGZpcnN0
TGluZSwgYm9vbCBsYXN0TGluZSwgUmVuZGVyT2JqZWN0KiBlbmRPYmplY3QpOwogICAgIElubGlu
ZUZsb3dCb3gqIGNyZWF0ZUxpbmVCb3hlcyhSZW5kZXJPYmplY3QqLCBib29sIGZpcnN0TGluZSk7
CiAgICAgdm9pZCBjb21wdXRlSG9yaXpvbnRhbFBvc2l0aW9uc0ZvckxpbmUoUm9vdElubGluZUJv
eCosIGJvb2wgZmlyc3RMaW5lLCBCaWRpUnVuKiBmaXJzdFJ1biwgQmlkaVJ1biogdHJhaWxpbmdT
cGFjZVJ1biwgYm9vbCByZWFjaGVkRW5kLCBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01h
cCYpOwpAQCAtMzI5LDEyICszNzMsMTggQEAgcHJpdmF0ZToKICAgICB2b2lkIHBhaW50U2VsZWN0
aW9uKFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKICAgICB2b2lkIHBhaW50Q2FyZXQoUGFp
bnRJbmZvJiwgaW50IHR4LCBpbnQgdHksIENhcmV0VHlwZSk7CiAKLSAgICB2b2lkIGluc2VydEZs
b2F0aW5nT2JqZWN0KFJlbmRlckJveCopOworICAgIEZsb2F0aW5nT2JqZWN0KiBpbnNlcnRGbG9h
dGluZ09iamVjdChSZW5kZXJCb3gqKTsKICAgICB2b2lkIHJlbW92ZUZsb2F0aW5nT2JqZWN0KFJl
bmRlckJveCopOwotCisgICAgdm9pZCByZW1vdmVGbG9hdGluZ09iamVjdHMoRmxvYXRpbmdPYmpl
Y3QqLCBpbnQgeSk7CisgICAgCiAgICAgLy8gQ2FsbGVkIGZyb20gbGluZVdpZHRoLCB0byBwb3Np
dGlvbiB0aGUgZmxvYXRzIGFkZGVkIGluIHRoZSBsYXN0IGxpbmUuCi0gICAgLy8gUmV0dXJucyB0
dXJlIGlmIGFuZCBvbmx5IGlmIGl0IGhhcyBwb3NpdGlvbmVkIGFueSBmbG9hdHMuCisgICAgLy8g
UmV0dXJucyB0cnVlIGlmIGFuZCBvbmx5IGlmIGl0IGhhcyBwb3NpdGlvbmVkIGFueSBmbG9hdHMu
CiAgICAgYm9vbCBwb3NpdGlvbk5ld0Zsb2F0cygpOworICAgIAorICAgIC8vIFBvc2l0aW9ucyBu
ZXcgZmxvYXRzIGFuZCBhbHNvIGFkanVzdCBhbGwgZmxvYXRzIGVuY291bnRlcmVkIG9uIHRoZSBs
aW5lIGlmIGFueSBvZiB0aGVtCisgICAgLy8gaGF2ZSB0byBtb3ZlIHRvIHRoZSBuZXh0IHBhZ2Uv
Y29sdW1uLgorICAgIGJvb2wgcG9zaXRpb25OZXdGbG9hdE9uTGluZShGbG9hdGluZ09iamVjdCog
bmV3RmxvYXQsIEZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lKTsKKwog
ICAgIHZvaWQgY2xlYXJGbG9hdHMoKTsKICAgICBpbnQgZ2V0Q2xlYXJEZWx0YShSZW5kZXJCb3gq
IGNoaWxkLCBpbnQgeVBvcyk7CiAKQEAgLTQxNiw4ICs0NjYsNyBAQCBwcml2YXRlOgogICAgIHZv
aWQgb2Zmc2V0Rm9yQ29udGVudHMoaW50JiB0eCwgaW50JiB0eSkgY29uc3Q7CiAKICAgICB2b2lk
IGNhbGNDb2x1bW5XaWR0aCgpOwotICAgIGludCBsYXlvdXRDb2x1bW5zKGludCBlbmRPZkNvbnRl
bnQgPSAtMSwgaW50IHJlcXVlc3RlZENvbHVtbkhlaWdodCA9IC0xKTsKLSAgICBpbnQgdmlzaWJs
ZVRvcE9mSGlnaGVzdEZsb2F0RXh0ZW5kaW5nQmVsb3coaW50IGJvdHRvbSwgaW50IG1heEhlaWdo
dCkgY29uc3Q7CisgICAgYm9vbCBsYXlvdXRDb2x1bW5zKGJvb2wgaGFzU3BlY2lmaWVkUGFnZUhl
aWdodCwgaW50IHBhZ2VIZWlnaHQsIExheW91dFN0YXRlTWFpbnRhaW5lciYpOwogICAgIHZvaWQg
bWFrZUNoaWxkcmVuQW5vbnltb3VzQ29sdW1uQmxvY2tzKFJlbmRlck9iamVjdCogYmVmb3JlQ2hp
bGQsIFJlbmRlckJsb2NrKiBuZXdCbG9ja0JveCwgUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCk7CiAK
ICAgICBib29sIGV4cGFuZHNUb0VuY2xvc2VPdmVyaGFuZ2luZ0Zsb2F0cygpIGNvbnN0OwpAQCAt
NDMzLDM2ICs0ODIsNiBAQCBwcml2YXRlOgogICAgIFJlbmRlckJsb2NrKiBjb250aW51YXRpb25C
ZWZvcmUoUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCk7CiAgICAgUmVuZGVyQmxvY2sqIGNvbnRh
aW5pbmdDb2x1bW5zQmxvY2soYm9vbCBhbGxvd0Fub255bW91c0NvbHVtbkJsb2NrID0gdHJ1ZSk7
CiAgICAgUmVuZGVyQmxvY2sqIGNvbHVtbnNCbG9ja0ZvclNwYW5uaW5nRWxlbWVudChSZW5kZXJP
YmplY3QqIG5ld0NoaWxkKTsKLSAgICAKLSAgICBzdHJ1Y3QgRmxvYXRpbmdPYmplY3QgOiBOb25j
b3B5YWJsZSB7Ci0gICAgICAgIGVudW0gVHlwZSB7Ci0gICAgICAgICAgICBGbG9hdExlZnQsCi0g
ICAgICAgICAgICBGbG9hdFJpZ2h0Ci0gICAgICAgIH07Ci0KLSAgICAgICAgRmxvYXRpbmdPYmpl
Y3QoVHlwZSB0eXBlKQotICAgICAgICAgICAgOiBtX3JlbmRlcmVyKDApCi0gICAgICAgICAgICAs
IG1fdG9wKDApCi0gICAgICAgICAgICAsIG1fYm90dG9tKDApCi0gICAgICAgICAgICAsIG1fbGVm
dCgwKQotICAgICAgICAgICAgLCBtX3dpZHRoKDApCi0gICAgICAgICAgICAsIG1fdHlwZSh0eXBl
KQotICAgICAgICAgICAgLCBtX3Nob3VsZFBhaW50KHRydWUpCi0gICAgICAgICAgICAsIG1faXNE
ZXNjZW5kYW50KGZhbHNlKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBUeXBlIHR5
cGUoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxUeXBlPihtX3R5cGUpOyB9Ci0KLSAgICAgICAgUmVu
ZGVyQm94KiBtX3JlbmRlcmVyOwotICAgICAgICBpbnQgbV90b3A7Ci0gICAgICAgIGludCBtX2Jv
dHRvbTsKLSAgICAgICAgaW50IG1fbGVmdDsKLSAgICAgICAgaW50IG1fd2lkdGg7Ci0gICAgICAg
IHVuc2lnbmVkIG1fdHlwZSA6IDE7IC8vIFR5cGUgKGxlZnQgb3IgcmlnaHQgYWxpZ25lZCkKLSAg
ICAgICAgYm9vbCBtX3Nob3VsZFBhaW50IDogMTsKLSAgICAgICAgYm9vbCBtX2lzRGVzY2VuZGFu
dCA6IDE7Ci0gICAgfTsKIAogICAgIGNsYXNzIE1hcmdpbkluZm8gewogICAgICAgICAvLyBDb2xs
YXBzaW5nIGZsYWdzIGZvciB3aGV0aGVyIHdlIGNhbiBjb2xsYXBzZSBvdXIgbWFyZ2lucyB3aXRo
IG91ciBjaGlsZHJlbidzIG1hcmdpbnMuCkBAIC01MzksNiArNTU4LDEzIEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBzZXRDb2xsYXBzZWRCb3R0b21NYXJnaW4oY29uc3QgTWFyZ2luSW5mbyYpOwogICAg
IC8vIEVuZCBoZWxwZXIgZnVuY3Rpb25zIGFuZCBzdHJ1Y3RzIHVzZWQgYnkgbGF5b3V0QmxvY2tD
aGlsZHJlbi4KIAorICAgIC8vIFBhZ2luYXRpb24gcm91dGluZXMuCisgICAgaW50IG5leHRQYWdl
VG9wKGludCB5UG9zKSBjb25zdDsgLy8gUmV0dXJucyB0aGUgdG9wIG9mIHRoZSBuZXh0IHBhZ2Ug
Zm9sbG93aW5nIHlQb3MuCisgICAgaW50IGFwcGx5QmVmb3JlQnJlYWsoUmVuZGVyQm94KiBjaGls
ZCwgaW50IHlQb3MpOyAvLyBJZiB0aGUgY2hpbGQgaGFzIGEgYmVmb3JlIGJyZWFrLCB0aGVuIHJl
dHVybiBhIG5ldyB5UG9zIHRoYXQgc2hpZnRzIHRvIHRoZSB0b3Agb2YgdGhlIG5leHQgcGFnZS9j
b2x1bW4uCisgICAgaW50IGFwcGx5QWZ0ZXJCcmVhayhSZW5kZXJCb3gqIGNoaWxkLCBpbnQgeVBv
cywgTWFyZ2luSW5mbyYgbWFyZ2luSW5mbyk7IC8vIElmIHRoZSBjaGlsZCBoYXMgYW4gYWZ0ZXIg
YnJlYWssIHRoZW4gcmV0dXJuIGEgbmV3IHlQb3MgdGhhdCBzaGlmdHMgdG8gdGhlIHRvcCBvZiB0
aGUgbmV4dCBwYWdlL2NvbHVtbi4KKyAgICBpbnQgYWRqdXN0Rm9yVW5zcGxpdHRhYmxlQ2hpbGQo
UmVuZGVyQm94KiBjaGlsZCwgaW50IHlQb3MsIGJvb2wgaW5jbHVkZU1hcmdpbnMgPSBmYWxzZSk7
IC8vIElmIHRoZSBjaGlsZCBpcyB1bnNwbGl0dGFibGUgYW5kIGNhbid0IGZpdCBvbiB0aGUgY3Vy
cmVudCBwYWdlLCByZXR1cm4gdGhlIHRvcCBvZiB0aGUgbmV4dCBwYWdlL2NvbHVtbi4KKyAgICB2
b2lkIGFkanVzdExpbmVQb3NpdGlvbkZvclBhZ2luYXRpb24oUm9vdElubGluZUJveCosIGludCYg
ZGVsdGFZKTsgLy8gQ29tcHV0ZXMgYSBkZWx0YVkgdmFsdWUgdGhhdCBwdXQgYSBsaW5lIGF0IHRo
ZSB0b3Agb2YgdGhlIG5leHQgcGFnZSBpZiBpdCBkb2Vzbid0IGZpdCBvbiB0aGUgY3VycmVudCBw
YWdlLgorCiAgICAgdHlwZWRlZiBQb3NpdGlvbmVkT2JqZWN0c0xpc3RIYXNoU2V0Ojpjb25zdF9p
dGVyYXRvciBJdGVyYXRvcjsKICAgICBEZXByZWNhdGVkUHRyTGlzdDxGbG9hdGluZ09iamVjdD4q
IG1fZmxvYXRpbmdPYmplY3RzOwogICAgIApAQCAtNTUxLDEyICs1NzcsMTQgQEAgcHJpdmF0ZToK
ICAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogbV9jb250aW51YXRpb247CiAKICAgICAvLyBBbGxv
Y2F0ZWQgb25seSB3aGVuIHNvbWUgb2YgdGhlc2UgZmllbGRzIGhhdmUgbm9uLWRlZmF1bHQgdmFs
dWVzCi0gICAgc3RydWN0IE1heE1hcmdpbiA6IE5vbmNvcHlhYmxlIHsKLSAgICAgICAgTWF4TWFy
Z2luKGNvbnN0IFJlbmRlckJsb2NrKiBvKSAKKyAgICBzdHJ1Y3QgUmVuZGVyQmxvY2tSYXJlRGF0
YSA6IE5vbmNvcHlhYmxlIHsKKyAgICAgICAgUmVuZGVyQmxvY2tSYXJlRGF0YShjb25zdCBSZW5k
ZXJCbG9jayogbykgCiAgICAgICAgICAgICA6IG1fdG9wUG9zKHRvcFBvc0RlZmF1bHQobykpCiAg
ICAgICAgICAgICAsIG1fdG9wTmVnKHRvcE5lZ0RlZmF1bHQobykpCiAgICAgICAgICAgICAsIG1f
Ym90dG9tUG9zKGJvdHRvbVBvc0RlZmF1bHQobykpCiAgICAgICAgICAgICAsIG1fYm90dG9tTmVn
KGJvdHRvbU5lZ0RlZmF1bHQobykpCisgICAgICAgICAgICAsIG1fcGFnaW5hdGlvblN0cnV0KDAp
CisgICAgICAgICAgICAsIG1fcGFnZVkoMCkKICAgICAgICAgeyAKICAgICAgICAgfQogCkBAIC01
NjQsMTQgKzU5MiwxNiBAQCBwcml2YXRlOgogICAgICAgICBzdGF0aWMgaW50IHRvcE5lZ0RlZmF1
bHQoY29uc3QgUmVuZGVyQmxvY2sqIG8pIHsgcmV0dXJuIG8tPm1hcmdpblRvcCgpIDwgMCA/IC1v
LT5tYXJnaW5Ub3AoKSA6IDA7IH0KICAgICAgICAgc3RhdGljIGludCBib3R0b21Qb3NEZWZhdWx0
KGNvbnN0IFJlbmRlckJsb2NrKiBvKSB7IHJldHVybiBvLT5tYXJnaW5Cb3R0b20oKSA+IDAgPyBv
LT5tYXJnaW5Cb3R0b20oKSA6IDA7IH0KICAgICAgICAgc3RhdGljIGludCBib3R0b21OZWdEZWZh
dWx0KGNvbnN0IFJlbmRlckJsb2NrKiBvKSB7IHJldHVybiBvLT5tYXJnaW5Cb3R0b20oKSA8IDAg
PyAtby0+bWFyZ2luQm90dG9tKCkgOiAwOyB9Ci0KKyAgICAgICAgCiAgICAgICAgIGludCBtX3Rv
cFBvczsKICAgICAgICAgaW50IG1fdG9wTmVnOwogICAgICAgICBpbnQgbV9ib3R0b21Qb3M7CiAg
ICAgICAgIGludCBtX2JvdHRvbU5lZzsKKyAgICAgICAgaW50IG1fcGFnaW5hdGlvblN0cnV0Owor
ICAgICAgICBpbnQgbV9wYWdlWTsKICAgICAgfTsKIAotICAgIE1heE1hcmdpbiogbV9tYXhNYXJn
aW47CisgICAgUmVuZGVyQmxvY2tSYXJlRGF0YSogbV9yYXJlRGF0YTsKIAogICAgIFJlbmRlck9i
amVjdENoaWxkTGlzdCBtX2NoaWxkcmVuOwogICAgIFJlbmRlckxpbmVCb3hMaXN0IG1fbGluZUJv
eGVzOyAgIC8vIEFsbCBvZiB0aGUgcm9vdCBsaW5lIGJveGVzIGNyZWF0ZWQgZm9yIHRoaXMgYmxv
Y2sgZmxvdy4gIEZvciBleGFtcGxlLCA8ZGl2PkhlbGxvPGJyPndvcmxkLjwvZGl2PiB3aWxsIGhh
dmUgdHdvIHRvdGFsIGxpbmVzIGZvciB0aGUgPGRpdj4uCkluZGV4OiBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAJKHJldmlzaW9uIDY2ODg2KQorKysgV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVy
TGlzdE1hcmtlci5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKKyNpbmNsdWRlICJTZXR0aW5n
cy5oIgogI2luY2x1ZGUgIlRyYWlsaW5nRmxvYXRzUm9vdElubGluZUJveC5oIgogI2luY2x1ZGUg
ImJyZWFrX2xpbmVzLmgiCiAjaW5jbHVkZSA8d3RmL0Fsd2F5c0lubGluZS5oPgpAQCAtNTcwLDEy
ICs1NzEsMTEgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4oYgogICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKG8tPmlzUG9zaXRpb25lZCgpKQogICAgICAg
ICAgICAgICAgICAgICBvLT5jb250YWluaW5nQmxvY2soKS0+aW5zZXJ0UG9zaXRpb25lZE9iamVj
dChib3gpOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAo
by0+aXNGbG9hdGluZygpKQotICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXRzLmFwcGVuZChG
bG9hdFdpdGhSZWN0KGJveCkpOwotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChmdWxsTGF5
b3V0IHx8IG8tPm5lZWRzTGF5b3V0KCkpIC8vIFJlcGxhY2VkIGVsZW1lbnRzCi0gICAgICAgICAg
ICAgICAgICAgICAgICB0b1JlbmRlckJveChvKS0+ZGlydHlMaW5lQm94ZXMoZnVsbExheW91dCk7
Ci0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChvLT5pc0Zsb2F0aW5nKCkpCisgICAgICAgICAg
ICAgICAgICAgIGZsb2F0cy5hcHBlbmQoRmxvYXRXaXRoUmVjdChib3gpKTsKKyAgICAgICAgICAg
ICAgICBlbHNlIGlmIChmdWxsTGF5b3V0IHx8IG8tPm5lZWRzTGF5b3V0KCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgLy8gUmVwbGFjZWQgZWxlbWVudHMKKyAgICAgICAgICAgICAgICAgICAgdG9S
ZW5kZXJCb3gobyktPmRpcnR5TGluZUJveGVzKGZ1bGxMYXlvdXQpOwogICAgICAgICAgICAgICAg
ICAgICBvLT5sYXlvdXRJZk5lZWRlZCgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0gZWxzZSBpZiAoby0+aXNUZXh0KCkgfHwgKG8tPmlzUmVuZGVySW5saW5lKCkgJiYgIWVuZE9m
SW5saW5lKSkgewpAQCAtNTk0LDcgKzU5NCw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dElu
bGluZUNoaWxkcmVuKGIKICAgICAgICAgdW5zaWduZWQgZmxvYXRJbmRleDsKICAgICAgICAgYm9v
bCBmaXJzdExpbmUgPSB0cnVlOwogICAgICAgICBib29sIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5s
eSA9IHRydWU7Ci0gICAgICAgIFJvb3RJbmxpbmVCb3gqIHN0YXJ0TGluZSA9IGRldGVybWluZVN0
YXJ0UG9zaXRpb24oZmlyc3RMaW5lLCBmdWxsTGF5b3V0LCBwcmV2aW91c0xpbmVCcm9rZUNsZWFu
bHksIHJlc29sdmVyLCBmbG9hdHMsIGZsb2F0SW5kZXgpOworICAgICAgICBSb290SW5saW5lQm94
KiBzdGFydExpbmUgPSBkZXRlcm1pbmVTdGFydFBvc2l0aW9uKGZpcnN0TGluZSwgZnVsbExheW91
dCwgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5LCByZXNvbHZlciwgZmxvYXRzLCBmbG9hdEluZGV4
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVzZVJlcGFpbnRCb3VuZHMsIHJlcGFpbnRUb3AsIHJlcGFpbnRCb3R0b20pOwogCiAgICAg
ICAgIGlmIChmdWxsTGF5b3V0ICYmIGhhc0lubGluZUNoaWxkICYmICFzZWxmTmVlZHNMYXlvdXQo
KSkgewogICAgICAgICAgICAgc2V0TmVlZHNMYXlvdXQodHJ1ZSwgZmFsc2UpOyAgLy8gTWFyayBv
dXJzZWx2ZXMgYXMgbmVlZGluZyBhIGZ1bGwgbGF5b3V0LiBUaGlzIHdheSB3ZSdsbCByZXBhaW50
IGxpa2UKQEAgLTYyMiw5ICs2MjMsMTEgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0SW5saW5l
Q2hpbGRyZW4oYgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA6IGRldGVybWlu
ZUVuZFBvc2l0aW9uKHN0YXJ0TGluZSwgY2xlYW5MaW5lU3RhcnQsIGNsZWFuTGluZUJpZGlTdGF0
dXMsIGVuZExpbmVZUG9zKTsKIAogICAgICAgICBpZiAoc3RhcnRMaW5lKSB7Ci0gICAgICAgICAg
ICB1c2VSZXBhaW50Qm91bmRzID0gdHJ1ZTsKLSAgICAgICAgICAgIHJlcGFpbnRUb3AgPSBoZWln
aHQoKTsKLSAgICAgICAgICAgIHJlcGFpbnRCb3R0b20gPSBoZWlnaHQoKTsKKyAgICAgICAgICAg
IGlmICghdXNlUmVwYWludEJvdW5kcykgeworICAgICAgICAgICAgICAgIHVzZVJlcGFpbnRCb3Vu
ZHMgPSB0cnVlOworICAgICAgICAgICAgICAgIHJlcGFpbnRUb3AgPSBoZWlnaHQoKTsKKyAgICAg
ICAgICAgICAgICByZXBhaW50Qm90dG9tID0gaGVpZ2h0KCk7CisgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBSZW5kZXJBcmVuYSogYXJlbmEgPSByZW5kZXJBcmVuYSgpOwogICAgICAgICAgICAg
Um9vdElubGluZUJveCogYm94ID0gc3RhcnRMaW5lOwogICAgICAgICAgICAgd2hpbGUgKGJveCkg
ewpAQCAtNjU5LDYgKzY2Miw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dElubGluZUNoaWxk
cmVuKGIKICAgICAgICAgYm9vbCBjaGVja0ZvckZsb2F0c0Zyb21MYXN0TGluZSA9IGZhbHNlOwog
CiAgICAgICAgIGJvb2wgaXNMaW5lRW1wdHkgPSB0cnVlOworICAgICAgICBib29sIHBhZ2luYXRl
ZCA9IHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+cGFnaW5hdGVkKCk7CiAKICAgICAgICAgd2hpbGUg
KCFlbmQuYXRFbmQoKSkgewogICAgICAgICAgICAgLy8gRklYTUU6IElzIHRoaXMgY2hlY2sgbmVj
ZXNzYXJ5IGJlZm9yZSB0aGUgZmlyc3QgaXRlcmF0aW9uIG9yIGNhbiBpdCBiZSBtb3ZlZCB0byB0
aGUgZW5kPwpAQCAtNjcxLDcgKzY3NSwxMCBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRJbmxp
bmVDaGlsZHJlbihiCiAgICAgICAgICAgICAKICAgICAgICAgICAgIEVDbGVhciBjbGVhciA9IENO
T05FOwogICAgICAgICAgICAgYm9vbCBoeXBoZW5hdGVkOwotICAgICAgICAgICAgZW5kID0gZmlu
ZE5leHRMaW5lQnJlYWsocmVzb2x2ZXIsIGZpcnN0TGluZSwgaXNMaW5lRW1wdHksIHByZXZpb3Vz
TGluZUJyb2tlQ2xlYW5seSwgaHlwaGVuYXRlZCwgJmNsZWFyKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgSW5saW5lSXRlcmF0b3Igb2xkRW5kID0gZW5kOworICAgICAgICAgICAgRmxvYXRp
bmdPYmplY3QqIGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUgPSBtX2Zsb2F0aW5nT2JqZWN0cyA/
IG1fZmxvYXRpbmdPYmplY3RzLT5sYXN0KCkgOiAwOworICAgICAgICAgICAgZW5kID0gZmluZE5l
eHRMaW5lQnJlYWsocmVzb2x2ZXIsIGZpcnN0TGluZSwgaXNMaW5lRW1wdHksIHByZXZpb3VzTGlu
ZUJyb2tlQ2xlYW5seSwgaHlwaGVuYXRlZCwgJmNsZWFyLCBsYXN0RmxvYXRGcm9tUHJldmlvdXNM
aW5lKTsKICAgICAgICAgICAgIGlmIChyZXNvbHZlci5wb3NpdGlvbigpLmF0RW5kKCkpIHsKICAg
ICAgICAgICAgICAgICByZXNvbHZlci5kZWxldGVSdW5zKCk7CiAgICAgICAgICAgICAgICAgY2hl
Y2tGb3JGbG9hdHNGcm9tTGFzdExpbmUgPSB0cnVlOwpAQCAtNzM2LDYgKzc0Myw3IEBAIHZvaWQg
UmVuZGVyQmxvY2s6OmxheW91dElubGluZUNoaWxkcmVuKGIKICAgICAgICAgICAgICAgICAvLyBp
bmxpbmUgZmxvdyBib3hlcy4KIAogICAgICAgICAgICAgICAgIFJvb3RJbmxpbmVCb3gqIGxpbmVC
b3ggPSAwOworICAgICAgICAgICAgICAgIGludCBvbGRIZWlnaHQgPSBoZWlnaHQoKTsKICAgICAg
ICAgICAgICAgICBpZiAocmVzb2x2ZXIucnVuQ291bnQoKSkgewogICAgICAgICAgICAgICAgICAg
ICBpZiAoaHlwaGVuYXRlZCkKICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVyLmxvZ2lj
YWxseUxhc3RSdW4oKS0+bV9oYXNIeXBoZW4gPSB0cnVlOwpAQCAtNzg2LDYgKzc5NCwyOSBAQCB2
b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVDaGlsZHJlbihiCiAgICAgICAgICAgICAgICAg
ICAgICAgICByZXBhaW50VG9wID0gbWluKHJlcGFpbnRUb3AsIGxpbmVCb3gtPnRvcFZpc2libGVP
dmVyZmxvdygpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGFpbnRCb3R0b20gPSBtYXgo
cmVwYWludEJvdHRvbSwgbGluZUJveC0+Ym90dG9tVmlzaWJsZU92ZXJmbG93KCkpOwogICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAg
ICBpZiAocGFnaW5hdGVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWRqdXN0bWVu
dCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBhZGp1c3RMaW5lUG9zaXRpb25Gb3JQYWdp
bmF0aW9uKGxpbmVCb3gsIGFkanVzdG1lbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGFkanVzdG1lbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb2xkTGluZVdp
ZHRoID0gbGluZVdpZHRoKG9sZEhlaWdodCwgZmlyc3RMaW5lKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsaW5lQm94LT5hZGp1c3RQb3NpdGlvbigwLCBhZGp1c3RtZW50KTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAodXNlUmVwYWludEJvdW5kcykgLy8gVGhpcyBjYW4g
b25seSBiZSBhIHBvc2l0aXZlIGFkanVzdG1lbnQsIHNvIG5vIG5lZWQgdG8gdXBkYXRlIHJlcGFp
bnRUb3AuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGFpbnRCb3R0b20gPSBt
YXgocmVwYWludEJvdHRvbSwgbGluZUJveC0+Ym90dG9tVmlzaWJsZU92ZXJmbG93KCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAobGluZVdpZHRoKG9sZEhlaWdodCArIGFkanVzdG1lbnQsIGZpcnN0TGluZSkgIT0gb2xk
TGluZVdpZHRoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUg
dG8gZGVsZXRlIHRoaXMgbGluZSwgcmVtb3ZlIGFsbCBmbG9hdHMgdGhhdCBnb3QgYWRkZWQsIGFu
ZCBsZXQgbGluZSBsYXlvdXQgcmUtcnVuLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsaW5lQm94LT5kZWxldGVMaW5lKHJlbmRlckFyZW5hKCkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZW1vdmVGbG9hdGluZ09iamVjdHMobGFzdEZsb2F0RnJvbVByZXZpb3Vz
TGluZSwgb2xkSGVpZ2h0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SGVp
Z2h0KG9sZEhlaWdodCArIGFkanVzdG1lbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXNvbHZlci5zZXRQb3NpdGlvbihvbGRFbmQpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlbmQgPSBvbGRFbmQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNldEhlaWdodChsaW5lQm94LT5ibG9ja0hlaWdodCgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIH0KIAogICAgICAgICAgICAgICAgIGZpcnN0TGluZSA9IGZhbHNlOwpAQCAtODIwLDYgKzg1
MSwxMCBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVDaGlsZHJlbihiCiAgICAgICAg
ICAgICAgICAgaW50IGRlbHRhID0gaGVpZ2h0KCkgLSBlbmRMaW5lWVBvczsKICAgICAgICAgICAg
ICAgICBmb3IgKFJvb3RJbmxpbmVCb3gqIGxpbmUgPSBlbmRMaW5lOyBsaW5lOyBsaW5lID0gbGlu
ZS0+bmV4dFJvb3RCb3goKSkgewogICAgICAgICAgICAgICAgICAgICBsaW5lLT5hdHRhY2hMaW5l
KCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChwYWdpbmF0ZWQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRlbHRhIC09IGxpbmUtPnBhZ2luYXRpb25TdHJ1dCgpOworICAgICAgICAgICAg
ICAgICAgICAgICAgYWRqdXN0TGluZVBvc2l0aW9uRm9yUGFnaW5hdGlvbihsaW5lLCBkZWx0YSk7
CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgaWYgKGRlbHRhKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICByZXBhaW50VG9wID0gbWluKHJlcGFpbnRUb3AsIGxp
bmUtPnRvcFZpc2libGVPdmVyZmxvdygpICsgbWluKGRlbHRhLCAwKSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICByZXBhaW50Qm90dG9tID0gbWF4KHJlcGFpbnRCb3R0b20sIGxpbmUtPmJvdHRv
bVZpc2libGVPdmVyZmxvdygpICsgbWF4KGRlbHRhLCAwKSk7CkBAIC05MDAsMjAgKzkzNSw0NCBA
QCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVDaGlsZHJlbihiCiB9CiAKIFJvb3RJbmxp
bmVCb3gqIFJlbmRlckJsb2NrOjpkZXRlcm1pbmVTdGFydFBvc2l0aW9uKGJvb2wmIGZpcnN0TGlu
ZSwgYm9vbCYgZnVsbExheW91dCwgYm9vbCYgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5LCAKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElubGluZUJp
ZGlSZXNvbHZlciYgcmVzb2x2ZXIsIFZlY3RvcjxGbG9hdFdpdGhSZWN0PiYgZmxvYXRzLCB1bnNp
Z25lZCYgbnVtQ2xlYW5GbG9hdHMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sdmVyLCBWZWN0b3I8Rmxv
YXRXaXRoUmVjdD4mIGZsb2F0cywgdW5zaWduZWQmIG51bUNsZWFuRmxvYXRzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCYgdXNlUmVwYWlu
dEJvdW5kcywgaW50JiByZXBhaW50VG9wLCBpbnQmIHJlcGFpbnRCb3R0b20pCiB7CiAgICAgUm9v
dElubGluZUJveCogY3VyciA9IDA7CiAgICAgUm9vdElubGluZUJveCogbGFzdCA9IDA7CiAKICAg
ICBib29sIGRpcnRpZWRCeUZsb2F0ID0gZmFsc2U7CiAgICAgaWYgKCFmdWxsTGF5b3V0KSB7Cisg
ICAgICAgIC8vIFBhZ2luYXRlIGFsbCBvZiB0aGUgY2xlYW4gbGluZXMuCisgICAgICAgIGJvb2wg
cGFnaW5hdGVkID0gdmlldygpLT5sYXlvdXRTdGF0ZSgpLT5wYWdpbmF0ZWQoKTsKKyAgICAgICAg
aW50IHBhZ2luYXRpb25EZWx0YSA9IDA7CiAgICAgICAgIHNpemVfdCBmbG9hdEluZGV4ID0gMDsK
ICAgICAgICAgZm9yIChjdXJyID0gZmlyc3RSb290Qm94KCk7IGN1cnIgJiYgIWN1cnItPmlzRGly
dHkoKTsgY3VyciA9IGN1cnItPm5leHRSb290Qm94KCkpIHsKKyAgICAgICAgICAgIGlmIChwYWdp
bmF0ZWQpIHsKKyAgICAgICAgICAgICAgICBwYWdpbmF0aW9uRGVsdGEgLT0gY3Vyci0+cGFnaW5h
dGlvblN0cnV0KCk7CisgICAgICAgICAgICAgICAgYWRqdXN0TGluZVBvc2l0aW9uRm9yUGFnaW5h
dGlvbihjdXJyLCBwYWdpbmF0aW9uRGVsdGEpOworICAgICAgICAgICAgICAgIGlmIChwYWdpbmF0
aW9uRGVsdGEpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRhaW5zRmxvYXRzKCkgfHwg
IWZsb2F0cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBE
byBiZXR0ZXIgZXZlbnR1YWxseS4gIEZvciBub3cgaWYgd2UgZXZlciBzaGlmdCBiZWNhdXNlIG9m
IHBhZ2luYXRpb24gYW5kIGZsb2F0cyBhcmUgcHJlc2VudCBqdXN0IGdvIHRvIGEgZnVsbCBsYXlv
dXQuCisgICAgICAgICAgICAgICAgICAgICAgICBmdWxsTGF5b3V0ID0gdHJ1ZTsgCisgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKCF1c2VSZXBhaW50Qm91bmRzKQor
ICAgICAgICAgICAgICAgICAgICAgICAgdXNlUmVwYWludEJvdW5kcyA9IHRydWU7CisgICAgICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgcmVwYWludFRvcCA9IG1pbihy
ZXBhaW50VG9wLCBjdXJyLT50b3BWaXNpYmxlT3ZlcmZsb3coKSArIG1pbihwYWdpbmF0aW9uRGVs
dGEsIDApKTsKKyAgICAgICAgICAgICAgICAgICAgcmVwYWludEJvdHRvbSA9IG1heChyZXBhaW50
Qm90dG9tLCBjdXJyLT5ib3R0b21WaXNpYmxlT3ZlcmZsb3coKSArIG1heChwYWdpbmF0aW9uRGVs
dGEsIDApKTsKKyAgICAgICAgICAgICAgICAgICAgY3Vyci0+YWRqdXN0UG9zaXRpb24oMCwgcGFn
aW5hdGlvbkRlbHRhKTsKKyAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoVmVjdG9yPFJlbmRlckJveCo+
KiBjbGVhbkxpbmVGbG9hdHMgPSBjdXJyLT5mbG9hdHNQdHIoKSkgewogICAgICAgICAgICAgICAg
IFZlY3RvcjxSZW5kZXJCb3gqPjo6aXRlcmF0b3IgZW5kID0gY2xlYW5MaW5lRmxvYXRzLT5lbmQo
KTsKICAgICAgICAgICAgICAgICBmb3IgKFZlY3RvcjxSZW5kZXJCb3gqPjo6aXRlcmF0b3IgbyA9
IGNsZWFuTGluZUZsb2F0cy0+YmVnaW4oKTsgbyAhPSBlbmQ7ICsrbykgewogICAgICAgICAgICAg
ICAgICAgICBSZW5kZXJCb3gqIGYgPSAqbzsKLSAgICAgICAgICAgICAgICAgICAgSW50U2l6ZSBu
ZXdTaXplKGYtPndpZHRoKCkgKyBmLT5tYXJnaW5MZWZ0KCkgK2YtPm1hcmdpblJpZ2h0KCksIGYt
PmhlaWdodCgpICsgZi0+bWFyZ2luVG9wKCkgKyBmLT5tYXJnaW5Cb3R0b20oKSk7CisgICAgICAg
ICAgICAgICAgICAgIGYtPmxheW91dElmTmVlZGVkKCk7CisgICAgICAgICAgICAgICAgICAgIElu
dFNpemUgbmV3U2l6ZShmLT53aWR0aCgpICsgZi0+bWFyZ2luTGVmdCgpICsgZi0+bWFyZ2luUmln
aHQoKSwgZi0+aGVpZ2h0KCkgKyBmLT5tYXJnaW5Ub3AoKSArIGYtPm1hcmdpbkJvdHRvbSgpKTsK
ICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGZsb2F0SW5kZXggPCBmbG9hdHMuc2l6ZSgpKTsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKGZsb2F0c1tmbG9hdEluZGV4XS5vYmplY3QgIT0gZikg
ewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gQSBuZXcgZmxvYXQgaGFzIGJlZW4gaW5zZXJ0
ZWQgYmVmb3JlIHRoaXMgbGluZSBvciBiZWZvcmUgaXRzIGxhc3Qga25vd24gZmxvYXQuCkBAIC0x
MjM2LDE0ICsxMjk1LDE0IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnNraXBUcmFpbGluZ1doaXRlc3Bh
Y2UKICAgICB9CiB9CiAKLWludCBSZW5kZXJCbG9jazo6c2tpcExlYWRpbmdXaGl0ZXNwYWNlKElu
bGluZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIsIGJvb2wgZmlyc3RMaW5lLCBib29sIGlzTGluZUVt
cHR5LCBib29sIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSkKK2ludCBSZW5kZXJCbG9jazo6c2tp
cExlYWRpbmdXaGl0ZXNwYWNlKElubGluZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIsIGJvb2wgZmly
c3RMaW5lLCBib29sIGlzTGluZUVtcHR5LCBib29sIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBs
YXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lKQogewogICAgIGludCBhdmFpbGFibGVXaWR0aCA9IGxp
bmVXaWR0aChoZWlnaHQoKSwgZmlyc3RMaW5lKTsKICAgICB3aGlsZSAoIXJlc29sdmVyLnBvc2l0
aW9uKCkuYXRFbmQoKSAmJiAhcmVxdWlyZXNMaW5lQm94KHJlc29sdmVyLnBvc2l0aW9uKCksIGlz
TGluZUVtcHR5LCBwcmV2aW91c0xpbmVCcm9rZUNsZWFubHkpKSB7CiAgICAgICAgIFJlbmRlck9i
amVjdCogb2JqZWN0ID0gcmVzb2x2ZXIucG9zaXRpb24oKS5vYmo7CiAgICAgICAgIGlmIChvYmpl
Y3QtPmlzRmxvYXRpbmcoKSkgewotICAgICAgICAgICAgaW5zZXJ0RmxvYXRpbmdPYmplY3QodG9S
ZW5kZXJCb3gob2JqZWN0KSk7Ci0gICAgICAgICAgICBwb3NpdGlvbk5ld0Zsb2F0cygpOworICAg
ICAgICAgICAgcG9zaXRpb25OZXdGbG9hdE9uTGluZShpbnNlcnRGbG9hdGluZ09iamVjdCh0b1Jl
bmRlckJveChvYmplY3QpKSwgbGFzdEZsb2F0RnJvbVByZXZpb3VzTGluZSk7CiAgICAgICAgICAg
ICBhdmFpbGFibGVXaWR0aCA9IGxpbmVXaWR0aChoZWlnaHQoKSwgZmlyc3RMaW5lKTsKICAgICAg
ICAgfSBlbHNlIGlmIChvYmplY3QtPmlzUG9zaXRpb25lZCgpKSB7CiAgICAgICAgICAgICAvLyBG
SVhNRTogVGhlIG1hdGggaGVyZSBpcyBhY3R1YWxseSBub3QgcmVhbGx5IHJpZ2h0LiAgSXQncyBh
IGJlc3QtZ3Vlc3MgYXBwcm94aW1hdGlvbiB0aGF0CkBAIC0xMzQ5LDE0ICsxNDA4LDE0IEBAIHN0
YXRpYyB2b2lkIHRyeUh5cGhlbmF0aW5nKFJlbmRlclRleHQqIHQKIH0KIAogSW5saW5lSXRlcmF0
b3IgUmVuZGVyQmxvY2s6OmZpbmROZXh0TGluZUJyZWFrKElubGluZUJpZGlSZXNvbHZlciYgcmVz
b2x2ZXIsIGJvb2wgZmlyc3RMaW5lLCAgYm9vbCYgaXNMaW5lRW1wdHksIGJvb2wmIHByZXZpb3Vz
TGluZUJyb2tlQ2xlYW5seSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCYgaHlwaGVuYXRlZCwgRUNsZWFyKiBjbGVhcikKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sJiBoeXBoZW5hdGVkLCBFQ2xlYXIq
IGNsZWFyLCBGbG9hdGluZ09iamVjdCogbGFzdEZsb2F0RnJvbVByZXZpb3VzTGluZSkKIHsKICAg
ICBBU1NFUlQocmVzb2x2ZXIucG9zaXRpb24oKS5ibG9jayA9PSB0aGlzKTsKIAogICAgIGJvb2wg
YXBwbGllZFN0YXJ0V2lkdGggPSByZXNvbHZlci5wb3NpdGlvbigpLnBvcyA+IDA7CiAgICAgTGlu
ZU1pZHBvaW50U3RhdGUmIGxpbmVNaWRwb2ludFN0YXRlID0gcmVzb2x2ZXIubWlkcG9pbnRTdGF0
ZSgpOwogICAgIAotICAgIGludCB3aWR0aCA9IHNraXBMZWFkaW5nV2hpdGVzcGFjZShyZXNvbHZl
ciwgZmlyc3RMaW5lLCBpc0xpbmVFbXB0eSwgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5KTsKKyAg
ICBpbnQgd2lkdGggPSBza2lwTGVhZGluZ1doaXRlc3BhY2UocmVzb2x2ZXIsIGZpcnN0TGluZSwg
aXNMaW5lRW1wdHksIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSwgbGFzdEZsb2F0RnJvbVByZXZp
b3VzTGluZSk7CiAKICAgICBpbnQgdyA9IDA7CiAgICAgaW50IHRtcFcgPSAwOwpAQCAtMTQ0MSwx
MiArMTUwMCwxMiBAQCBJbmxpbmVJdGVyYXRvciBSZW5kZXJCbG9jazo6ZmluZE5leHRMaW5lCiAg
ICAgICAgICAgICAvLyBhZGQgdG8gc3BlY2lhbCBvYmplY3RzLi4uCiAgICAgICAgICAgICBpZiAo
by0+aXNGbG9hdGluZygpKSB7CiAgICAgICAgICAgICAgICAgUmVuZGVyQm94KiBmbG9hdEJveCA9
IHRvUmVuZGVyQm94KG8pOwotICAgICAgICAgICAgICAgIGluc2VydEZsb2F0aW5nT2JqZWN0KGZs
b2F0Qm94KTsKKyAgICAgICAgICAgICAgICBGbG9hdGluZ09iamVjdCogZiA9IGluc2VydEZsb2F0
aW5nT2JqZWN0KGZsb2F0Qm94KTsKICAgICAgICAgICAgICAgICAvLyBjaGVjayBpZiBpdCBmaXRz
IGluIHRoZSBjdXJyZW50IGxpbmUuCiAgICAgICAgICAgICAgICAgLy8gSWYgaXQgZG9lcywgcG9z
aXRpb24gaXQgbm93LCBvdGhlcndpc2UsIHBvc2l0aW9uCiAgICAgICAgICAgICAgICAgLy8gaXQg
YWZ0ZXIgbW92aW5nIHRvIG5leHQgbGluZSAoaW4gbmV3TGluZSgpIGZ1bmMpCiAgICAgICAgICAg
ICAgICAgaWYgKGZsb2F0c0ZpdE9uTGluZSAmJiBmbG9hdEJveC0+d2lkdGgoKSArIGZsb2F0Qm94
LT5tYXJnaW5MZWZ0KCkgKyBmbG9hdEJveC0+bWFyZ2luUmlnaHQoKSArIHcgKyB0bXBXIDw9IHdp
ZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uTmV3RmxvYXRzKCk7CisgICAgICAg
ICAgICAgICAgICAgIHBvc2l0aW9uTmV3RmxvYXRPbkxpbmUoZiwgbGFzdEZsb2F0RnJvbVByZXZp
b3VzTGluZSk7CiAgICAgICAgICAgICAgICAgICAgIHdpZHRoID0gbGluZVdpZHRoKGhlaWdodCgp
LCBmaXJzdExpbmUpOwogICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAg
ICBmbG9hdHNGaXRPbkxpbmUgPSBmYWxzZTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAko
cmV2aXNpb24gNjY4ODYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05NzMsNyArOTczLDcgQEAgdm9pZCBSZW5kZXJCb3g6Om1hcExvY2FsVG9D
b250YWluZXIoUmVuZAogICAgIGlmIChSZW5kZXJWaWV3KiB2ID0gdmlldygpKSB7CiAgICAgICAg
IGlmICh2LT5sYXlvdXRTdGF0ZUVuYWJsZWQoKSAmJiAhcmVwYWludENvbnRhaW5lcikgewogICAg
ICAgICAgICAgTGF5b3V0U3RhdGUqIGxheW91dFN0YXRlID0gdi0+bGF5b3V0U3RhdGUoKTsKLSAg
ICAgICAgICAgIEludFNpemUgb2Zmc2V0ID0gbGF5b3V0U3RhdGUtPm1fb2Zmc2V0OworICAgICAg
ICAgICAgSW50U2l6ZSBvZmZzZXQgPSBsYXlvdXRTdGF0ZS0+bV9wYWludE9mZnNldDsKICAgICAg
ICAgICAgIG9mZnNldC5leHBhbmQoeCgpLCB5KCkpOwogICAgICAgICAgICAgaWYgKHN0eWxlKCkt
PnBvc2l0aW9uKCkgPT0gUmVsYXRpdmVQb3NpdGlvbiAmJiBsYXllcigpKQogICAgICAgICAgICAg
ICAgIG9mZnNldCArPSBsYXllcigpLT5yZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0KCk7CkBAIC0xMTcw
LDcgKzExNzAsNyBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZVJlY3RGb3JSZXBhaW50KFJlCiAg
ICAgICAgICAgICAgICAgcmVjdC5tb3ZlKGxheWVyKCktPnJlbGF0aXZlUG9zaXRpb25PZmZzZXQo
KSk7CiAKICAgICAgICAgICAgIHJlY3QubW92ZSh4KCksIHkoKSk7Ci0gICAgICAgICAgICByZWN0
Lm1vdmUobGF5b3V0U3RhdGUtPm1fb2Zmc2V0KTsKKyAgICAgICAgICAgIHJlY3QubW92ZShsYXlv
dXRTdGF0ZS0+bV9wYWludE9mZnNldCk7CiAgICAgICAgICAgICBpZiAobGF5b3V0U3RhdGUtPm1f
Y2xpcHBlZCkKICAgICAgICAgICAgICAgICByZWN0LmludGVyc2VjdChsYXlvdXRTdGF0ZS0+bV9j
bGlwUmVjdCk7CiAgICAgICAgICAgICByZXR1cm47CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJGbGV4aWJsZUJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRmxleGlibGVCb3guY3BwCShyZXZpc2lvbiA2Njg4NikKKysrIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckZsZXhpYmxlQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAxLDcgKzIwMSw3IEBA
IHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmNhbGNQcmVmV2lkdGhzKCkKICAgICBzZXRQcmVmV2lk
dGhzRGlydHkoZmFsc2UpOwogfQogCi12b2lkIFJlbmRlckZsZXhpYmxlQm94OjpsYXlvdXRCbG9j
ayhib29sIHJlbGF5b3V0Q2hpbGRyZW4pCit2b2lkIFJlbmRlckZsZXhpYmxlQm94OjpsYXlvdXRC
bG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIGludCAvKnBhZ2VIZWlnaHQgRklYTUU6IEltcGxl
bWVudCAqLykKIHsKICAgICBBU1NFUlQobmVlZHNMYXlvdXQoKSk7CiAKSW5kZXg6IFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRmxleGlibGVCb3guaAkocmV2aXNpb24gNjY4ODYpCisrKyBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3
IEBAIHB1YmxpYzoKICAgICB2b2lkIGNhbGNIb3Jpem9udGFsUHJlZldpZHRocygpOwogICAgIHZv
aWQgY2FsY1ZlcnRpY2FsUHJlZldpZHRocygpOwogCi0gICAgdmlydHVhbCB2b2lkIGxheW91dEJs
b2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbik7CisgICAgdmlydHVhbCB2b2lkIGxheW91dEJsb2Nr
KGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgaW50IHBhZ2VIZWlnaHQpOwogICAgIHZvaWQgbGF5b3V0
SG9yaXpvbnRhbEJveChib29sIHJlbGF5b3V0Q2hpbGRyZW4pOwogICAgIHZvaWQgbGF5b3V0VmVy
dGljYWxCb3goYm9vbCByZWxheW91dENoaWxkcmVuKTsKIApJbmRleDogV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVySW5saW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJJbmxpbmUuY3BwCShyZXZpc2lvbiA2Njg4NikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
cklubGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0Nyw3ICs2NDcsNyBAQCB2b2lkIFJlbmRl
cklubGluZTo6Y29tcHV0ZVJlY3RGb3JSZXBhaW50CiAgICAgICAgICAgICBMYXlvdXRTdGF0ZSog
bGF5b3V0U3RhdGUgPSB2LT5sYXlvdXRTdGF0ZSgpOwogICAgICAgICAgICAgaWYgKHN0eWxlKCkt
PnBvc2l0aW9uKCkgPT0gUmVsYXRpdmVQb3NpdGlvbiAmJiBsYXllcigpKQogICAgICAgICAgICAg
ICAgIHJlY3QubW92ZShsYXllcigpLT5yZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0KCkpOwotICAgICAg
ICAgICAgcmVjdC5tb3ZlKGxheW91dFN0YXRlLT5tX29mZnNldCk7CisgICAgICAgICAgICByZWN0
Lm1vdmUobGF5b3V0U3RhdGUtPm1fcGFpbnRPZmZzZXQpOwogICAgICAgICAgICAgaWYgKGxheW91
dFN0YXRlLT5tX2NsaXBwZWQpCiAgICAgICAgICAgICAgICAgcmVjdC5pbnRlcnNlY3QobGF5b3V0
U3RhdGUtPm1fY2xpcFJlY3QpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtNzM0LDcgKzczNCw3
IEBAIHZvaWQgUmVuZGVySW5saW5lOjptYXBMb2NhbFRvQ29udGFpbmVyKFIKICAgICBpZiAoUmVu
ZGVyVmlldyAqdiA9IHZpZXcoKSkgewogICAgICAgICBpZiAodi0+bGF5b3V0U3RhdGVFbmFibGVk
KCkgJiYgIXJlcGFpbnRDb250YWluZXIpIHsKICAgICAgICAgICAgIExheW91dFN0YXRlKiBsYXlv
dXRTdGF0ZSA9IHYtPmxheW91dFN0YXRlKCk7Ci0gICAgICAgICAgICBJbnRTaXplIG9mZnNldCA9
IGxheW91dFN0YXRlLT5tX29mZnNldDsKKyAgICAgICAgICAgIEludFNpemUgb2Zmc2V0ID0gbGF5
b3V0U3RhdGUtPm1fcGFpbnRPZmZzZXQ7CiAgICAgICAgICAgICBpZiAoc3R5bGUoKS0+cG9zaXRp
b24oKSA9PSBSZWxhdGl2ZVBvc2l0aW9uICYmIGxheWVyKCkpCiAgICAgICAgICAgICAgICAgb2Zm
c2V0ICs9IGxheWVyKCktPnJlbGF0aXZlUG9zaXRpb25PZmZzZXQoKTsKICAgICAgICAgICAgIHRy
YW5zZm9ybVN0YXRlLm1vdmUob2Zmc2V0KTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5j
cHAJKHJldmlzaW9uIDY2OTAzKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNTQxLDExICsyNTQxLDExIEBAIHZvaWQgUmVuZGVyTGF5ZXI6
OnBhaW50Q2hpbGRMYXllckludG9Db2wKICAgICBjb2x1bW5CbG9jay0+bGF5ZXIoKS0+Y29udmVy
dFRvTGF5ZXJDb29yZHMocm9vdExheWVyLCBsYXllclgsIGxheWVyWSk7CiAgICAgCiAgICAgQ29s
dW1uSW5mbyogY29sSW5mbyA9IGNvbHVtbkJsb2NrLT5jb2x1bW5JbmZvKCk7Ci0gICAgdW5zaWdu
ZWQgY29sQ291bnQgPSBjb2xJbmZvLT5jb2x1bW5Db3VudCgpOworICAgIHVuc2lnbmVkIGNvbENv
dW50ID0gY29sdW1uQmxvY2stPmNvbHVtbkNvdW50KGNvbEluZm8pOwogICAgIGludCBjdXJyWU9m
ZnNldCA9IDA7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvbENvdW50OyBpKyspIHsK
ICAgICAgICAgLy8gRm9yIGVhY2ggcmVjdCwgd2UgY2xpcCB0byB0aGUgcmVjdCwgYW5kIHRoZW4g
d2UgYWRqdXN0IG91ciBjb29yZHMuCi0gICAgICAgIEludFJlY3QgY29sUmVjdCA9IGNvbEluZm8t
PmNvbHVtblJlY3RBdChpKTsKKyAgICAgICAgSW50UmVjdCBjb2xSZWN0ID0gY29sdW1uQmxvY2st
PmNvbHVtblJlY3RBdChjb2xJbmZvLCBpKTsKICAgICAgICAgaW50IGN1cnJYT2Zmc2V0ID0gY29s
UmVjdC54KCkgLSAoY29sdW1uQmxvY2stPmJvcmRlckxlZnQoKSArIGNvbHVtbkJsb2NrLT5wYWRk
aW5nTGVmdCgpKTsKICAgICAgICAgY29sUmVjdC5tb3ZlKGxheWVyWCwgbGF5ZXJZKTsKIApAQCAt
MzAwNywxNyArMzAwNywxNyBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RDaGls
ZExhCiAgICAgY29sdW1uQmxvY2stPmxheWVyKCktPmNvbnZlcnRUb0xheWVyQ29vcmRzKHJvb3RM
YXllciwgbGF5ZXJYLCBsYXllclkpOwogICAgIAogICAgIENvbHVtbkluZm8qIGNvbEluZm8gPSBj
b2x1bW5CbG9jay0+Y29sdW1uSW5mbygpOwotICAgIGludCBjb2xDb3VudCA9IGNvbEluZm8tPmNv
bHVtbkNvdW50KCk7CisgICAgaW50IGNvbENvdW50ID0gY29sdW1uQmxvY2stPmNvbHVtbkNvdW50
KGNvbEluZm8pOwogICAgIAogICAgIC8vIFdlIGhhdmUgdG8gZ28gYmFja3dhcmRzIGZyb20gdGhl
IGxhc3QgY29sdW1uIHRvIHRoZSBmaXJzdC4KICAgICBpbnQgbGVmdCA9IGNvbHVtbkJsb2NrLT5i
b3JkZXJMZWZ0KCkgKyBjb2x1bW5CbG9jay0+cGFkZGluZ0xlZnQoKTsKICAgICBpbnQgY3VycllP
ZmZzZXQgPSAwOwogICAgIGludCBpOwogICAgIGZvciAoaSA9IDA7IGkgPCBjb2xDb3VudDsgaSsr
KQotICAgICAgICBjdXJyWU9mZnNldCAtPSBjb2xJbmZvLT5jb2x1bW5SZWN0QXQoaSkuaGVpZ2h0
KCk7CisgICAgICAgIGN1cnJZT2Zmc2V0IC09IGNvbHVtbkJsb2NrLT5jb2x1bW5SZWN0QXQoY29s
SW5mbywgaSkuaGVpZ2h0KCk7CiAgICAgZm9yIChpID0gY29sQ291bnQgLSAxOyBpID49IDA7IGkt
LSkgewogICAgICAgICAvLyBGb3IgZWFjaCByZWN0LCB3ZSBjbGlwIHRvIHRoZSByZWN0LCBhbmQg
dGhlbiB3ZSBhZGp1c3Qgb3VyIGNvb3Jkcy4KLSAgICAgICAgSW50UmVjdCBjb2xSZWN0ID0gY29s
SW5mby0+Y29sdW1uUmVjdEF0KGkpOworICAgICAgICBJbnRSZWN0IGNvbFJlY3QgPSBjb2x1bW5C
bG9jay0+Y29sdW1uUmVjdEF0KGNvbEluZm8sIGkpOwogICAgICAgICBpbnQgY3VyclhPZmZzZXQg
PSBjb2xSZWN0LngoKSAtIGxlZnQ7CiAgICAgICAgIGN1cnJZT2Zmc2V0ICs9IGNvbFJlY3QuaGVp
Z2h0KCk7CiAgICAgICAgIGNvbFJlY3QubW92ZShsYXllclgsIGxheWVyWSk7CkluZGV4OiBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuY3BwCShyZXZpc2lvbiA2Njg4NikKKysrIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzUsNyArMzUsNiBAQAogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgogI2luY2x1ZGUgIlJlbmRl
clZpZXcuaCIKICNpbmNsdWRlICJSb290SW5saW5lQm94LmgiCi0jaW5jbHVkZSAiU2V0dGluZ3Mu
aCIgLy8gRklYTUU6IFRoaXMgaW5jbHVkZSBjYW4gYmUgcmVtb3ZlZCB3aGVuIHBhZ2luYXRlRHVy
aW5nTGF5b3V0RW5hYmxlZCBpcyB0YWtlbiBvdXQuCiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAK
QEAgLTE2MSw3ICsxNjAsNyBAQCB2b2lkIFJlbmRlckxpbmVCb3hMaXN0OjpwYWludChSZW5kZXJC
b3hNCiAgICAgICAgIHJldHVybjsKIAogICAgIFJlbmRlclZpZXcqIHYgPSByZW5kZXJlci0+dmll
dygpOwotICAgIGJvb2wgdXNlUHJpbnRSZWN0ID0gIXYtPnByaW50UmVjdCgpLmlzRW1wdHkoKSAm
JiAhcmVuZGVyZXItPmRvY3VtZW50KCktPnNldHRpbmdzKCktPnBhZ2luYXRlRHVyaW5nTGF5b3V0
RW5hYmxlZCgpOworICAgIGJvb2wgdXNlUHJpbnRSZWN0ID0gIXYtPnByaW50UmVjdCgpLmlzRW1w
dHkoKTsKICAgICAKICAgICAvLyBXZSBjYW4gY2hlY2sgdGhlIGZpcnN0IGJveCBhbmQgbGFzdCBi
b3ggYW5kIGF2b2lkIHBhaW50aW5nIGlmIHdlIGRvbid0CiAgICAgLy8gaW50ZXJzZWN0LiAgVGhp
cyBpcyBhIHF1aWNrIHNob3J0LWNpcmN1aXQgdGhhdCB3ZSBjYW4gdGFrZSB0byBhdm9pZCB3YWxr
aW5nIGFueSBsaW5lcy4KQEAgLTIxNSw3ICsyMTQsNiBAQCB2b2lkIFJlbmRlckxpbmVCb3hMaXN0
OjpwYWludChSZW5kZXJCb3hNCiAgICAgICAgIGludCBib3R0b20gPSBjdXJyLT5ib3R0b21WaXNp
YmxlT3ZlcmZsb3coKSArIHJlbmRlcmVyLT5tYXhpbWFsT3V0bGluZVNpemUoaW5mby5waGFzZSk7
CiAgICAgICAgIGggPSBib3R0b20gLSB0b3A7CiAgICAgICAgIHlQb3MgPSB0eSArIHRvcDsKLSAg
ICAgICAgdi0+c2V0TWluaW11bUNvbHVtbkhlaWdodChoKTsKICAgICAgICAgaWYgKHlQb3MgPCBp
bmZvLnJlY3QuYm90dG9tKCkgJiYgeVBvcyArIGggPiBpbmZvLnJlY3QueSgpKQogICAgICAgICAg
ICAgY3Vyci0+cGFpbnQoaW5mbywgdHgsIHR5KTsKICAgICB9CkluZGV4OiBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAJKHJldmlzaW9uIDY2ODg2KQorKysgV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjA1LDYg
KzYwNSw4IEBAIGludCBSZW5kZXJUYWJsZVNlY3Rpb246OmxheW91dFJvd3MoaW50IHQKICAgICAg
ICAgICAgIGlmICh0ZSAhPSBvbGRUZSB8fCBiZSAhPSBvbGRCZSkgewogICAgICAgICAgICAgICAg
IGNlbGwtPnNldE5lZWRzTGF5b3V0KHRydWUsIGZhbHNlKTsKICAgICAgICAgICAgICAgICBjZWxs
LT5sYXlvdXRJZk5lZWRlZCgpOworICAgICAgICAgICAgICAgIGlmICh2aWV3KCktPmxheW91dFN0
YXRlKCktPm1fcGFnZUhlaWdodCAmJiBjZWxsLT5oZWlnaHQoKSAhPSBySGVpZ2h0KQorICAgICAg
ICAgICAgICAgICAgICBjZWxsLT5zZXRIZWlnaHQockhlaWdodCk7IC8vIEZJWE1FOiBQYWdpbmF0
aW9uIG1pZ2h0IGhhdmUgbWFkZSB1cyBjaGFuZ2Ugc2l6ZS4gIEZvciBub3cganVzdCBzaHJpbmsg
b3IgZ3JvdyB0aGUgY2VsbCB0byBmaXQgd2l0aG91dCBkb2luZyBhIHJlbGF5b3V0LgogICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICBpZiAoKHRlICE9IG9sZFRlIHx8IGJlID4gb2xkQmUpICYm
ICF0YWJsZSgpLT5zZWxmTmVlZHNMYXlvdXQoKSAmJiBjZWxsLT5jaGVja0ZvclJlcGFpbnREdXJp
bmdMYXlvdXQoKSkKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCShyZXZpc2lvbiA2Njg4
NikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01Miw3ICs1Miw2IEBAIFJlbmRlclZpZXc6OlJlbmRlclZpZXcoTm9kZSogbm9kZSwgRnJhbWUK
ICAgICAsIG1fbWF4aW1hbE91dGxpbmVTaXplKDApCiAgICAgLCBtX2Jlc3RUcnVuY2F0ZWRBdCgw
KQogICAgICwgbV90cnVuY2F0b3JXaWR0aCgwKQotICAgICwgbV9taW5pbXVtQ29sdW1uSGVpZ2h0
KDApCiAgICAgLCBtX2ZvcmNlZFBhZ2VCcmVhayhmYWxzZSkKICAgICAsIG1fbGF5b3V0U3RhdGUo
MCkKICAgICAsIG1fbGF5b3V0U3RhdGVEaXNhYmxlQ291bnQoMCkKQEAgLTY5NSw3ICs2OTQsNiBA
QCB2b2lkIFJlbmRlclZpZXc6OnNldEJlc3RUcnVuY2F0ZWRBdChpbnQgCiAKIHZvaWQgUmVuZGVy
Vmlldzo6cHVzaExheW91dFN0YXRlKFJlbmRlck9iamVjdCogcm9vdCkKIHsKLSAgICBBU1NFUlQo
IWRvaW5nRnVsbFJlcGFpbnQoKSk7CiAgICAgQVNTRVJUKG1fbGF5b3V0U3RhdGVEaXNhYmxlQ291
bnQgPT0gMCk7CiAgICAgQVNTRVJUKG1fbGF5b3V0U3RhdGUgPT0gMCk7CiAKSW5kZXg6IFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJWaWV3LmgJKHJldmlzaW9uIDY2ODg2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC04MywxMiArODMsMTAgQEAgcHVibGljOgogICAg
IEludFJlY3QgcHJpbnRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9wcmludFJlY3Q7IH0KICAgICB2
b2lkIHNldFByaW50UmVjdChjb25zdCBJbnRSZWN0JiByKSB7IG1fcHJpbnRSZWN0ID0gcjsgfQog
Ci0gICAgdm9pZCBzZXRUcnVuY2F0ZWRBdChpbnQgeSkgeyBtX3RydW5jYXRlZEF0ID0geTsgbV9i
ZXN0VHJ1bmNhdGVkQXQgPSBtX3RydW5jYXRvcldpZHRoID0gMDsgbV9taW5pbXVtQ29sdW1uSGVp
Z2h0ID0gMDsgbV9mb3JjZWRQYWdlQnJlYWsgPSBmYWxzZTsgfQorICAgIHZvaWQgc2V0VHJ1bmNh
dGVkQXQoaW50IHkpIHsgbV90cnVuY2F0ZWRBdCA9IHk7IG1fYmVzdFRydW5jYXRlZEF0ID0gbV90
cnVuY2F0b3JXaWR0aCA9IDA7IG1fZm9yY2VkUGFnZUJyZWFrID0gZmFsc2U7IH0KICAgICB2b2lk
IHNldEJlc3RUcnVuY2F0ZWRBdChpbnQgeSwgUmVuZGVyQm94TW9kZWxPYmplY3QqIGZvclJlbmRl
cmVyLCBib29sIGZvcmNlZEJyZWFrID0gZmFsc2UpOwotICAgIHZvaWQgc2V0TWluaW11bUNvbHVt
bkhlaWdodChpbnQgaGVpZ2h0KSB7IG1fbWluaW11bUNvbHVtbkhlaWdodCA9IGhlaWdodDsgfQog
ICAgIGludCBiZXN0VHJ1bmNhdGVkQXQoKSBjb25zdCB7IHJldHVybiBtX2Jlc3RUcnVuY2F0ZWRB
dDsgfQotICAgIGludCBtaW5pbXVtQ29sdW1uSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9taW5p
bXVtQ29sdW1uSGVpZ2h0OyB9Ci0KKyAgICAKICAgICBpbnQgdHJ1bmNhdGVkQXQoKSBjb25zdCB7
IHJldHVybiBtX3RydW5jYXRlZEF0OyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVSZWN0
cyhWZWN0b3I8SW50UmVjdD4mLCBpbnQgdHgsIGludCB0eSk7CkBAIC0xMjIsMjEgKzEyMCwyMCBA
QCBwdWJsaWM6CiAKICAgICBib29sIGRvaW5nRnVsbFJlcGFpbnQoKSBjb25zdCB7IHJldHVybiBt
X2ZyYW1lVmlldy0+bmVlZHNGdWxsUmVwYWludCgpOyB9CiAKLSAgICB2b2lkIHB1c2hMYXlvdXRT
dGF0ZShSZW5kZXJCb3gqIHJlbmRlcmVyLCBjb25zdCBJbnRTaXplJiBvZmZzZXQpCisgICAgdm9p
ZCBwdXNoTGF5b3V0U3RhdGUoUmVuZGVyQm94KiByZW5kZXJlciwgY29uc3QgSW50U2l6ZSYgb2Zm
c2V0LCBpbnQgcGFnZUhlaWdodCA9IDAsIENvbHVtbkluZm8qIGNvbEluZm8gPSAwKQogICAgIHsK
LSAgICAgICAgaWYgKGRvaW5nRnVsbFJlcGFpbnQoKSkKLSAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgLy8gV2UgcHVzaCBMYXlvdXRTdGF0ZSBldmVuIGlmIGxheW91dFN0YXRlIGlzIGRpc2Fi
bGVkIGJlY2F1c2UgaXQgc3RvcmVzIGxheW91dERlbHRhIHRvby4KLSAgICAgICAgbV9sYXlvdXRT
dGF0ZSA9IG5ldyAocmVuZGVyQXJlbmEoKSkgTGF5b3V0U3RhdGUobV9sYXlvdXRTdGF0ZSwgcmVu
ZGVyZXIsIG9mZnNldCk7CisgICAgICAgIGlmICghZG9pbmdGdWxsUmVwYWludCgpIHx8IHJlbmRl
cmVyLT5oYXNDb2x1bW5zKCkgfHwgbV9sYXlvdXRTdGF0ZS0+cGFnaW5hdGVkKCkpCisgICAgICAg
ICAgICBtX2xheW91dFN0YXRlID0gbmV3IChyZW5kZXJBcmVuYSgpKSBMYXlvdXRTdGF0ZShtX2xh
eW91dFN0YXRlLCByZW5kZXJlciwgb2Zmc2V0LCBwYWdlSGVpZ2h0LCBjb2xJbmZvKTsKICAgICB9
CiAKICAgICB2b2lkIHB1c2hMYXlvdXRTdGF0ZShSZW5kZXJPYmplY3QqKTsKIAogICAgIHZvaWQg
cG9wTGF5b3V0U3RhdGUoKQogICAgIHsKLSAgICAgICAgaWYgKGRvaW5nRnVsbFJlcGFpbnQoKSkK
LSAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgTGF5b3V0U3RhdGUqIHN0YXRlID0gbV9sYXlv
dXRTdGF0ZTsKKyAgICAgICAgaWYgKGRvaW5nRnVsbFJlcGFpbnQoKSAmJiAhbV9sYXlvdXRTdGF0
ZS0+cGFnaW5hdGVkKCkpCisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIG1fbGF5b3V0U3Rh
dGUgPSBzdGF0ZS0+bV9uZXh0OwogICAgICAgICBzdGF0ZS0+ZGVzdHJveShyZW5kZXJBcmVuYSgp
KTsKICAgICB9CkBAIC0xOTgsNyArMTk1LDYgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICBp
bnQgbV9iZXN0VHJ1bmNhdGVkQXQ7CiAgICAgaW50IG1fdHJ1bmNhdG9yV2lkdGg7Ci0gICAgaW50
IG1fbWluaW11bUNvbHVtbkhlaWdodDsKICAgICBib29sIG1fZm9yY2VkUGFnZUJyZWFrOwogICAg
IExheW91dFN0YXRlKiBtX2xheW91dFN0YXRlOwogICAgIHVuc2lnbmVkIG1fbGF5b3V0U3RhdGVE
aXNhYmxlQ291bnQ7CkBAIC0yMjcsMTMgKzIyMywxMyBAQCB2b2lkIHRvUmVuZGVyVmlldyhjb25z
dCBSZW5kZXJWaWV3Kik7CiBjbGFzcyBMYXlvdXRTdGF0ZU1haW50YWluZXIgOiBwdWJsaWMgTm9u
Y29weWFibGUgewogcHVibGljOgogICAgIC8vIGN0b3IgdG8gcHVzaCBub3cKLSAgICBMYXlvdXRT
dGF0ZU1haW50YWluZXIoUmVuZGVyVmlldyogdmlldywgUmVuZGVyQm94KiByb290LCBJbnRTaXpl
IG9mZnNldCwgYm9vbCBkaXNhYmxlU3RhdGUgPSBmYWxzZSkKKyAgICBMYXlvdXRTdGF0ZU1haW50
YWluZXIoUmVuZGVyVmlldyogdmlldywgUmVuZGVyQm94KiByb290LCBJbnRTaXplIG9mZnNldCwg
Ym9vbCBkaXNhYmxlU3RhdGUgPSBmYWxzZSwgaW50IHBhZ2VIZWlnaHQgPSAwLCBDb2x1bW5JbmZv
KiBjb2xJbmZvID0gMCkKICAgICAgICAgOiBtX3ZpZXcodmlldykKICAgICAgICAgLCBtX2Rpc2Fi
bGVkKGRpc2FibGVTdGF0ZSkKICAgICAgICAgLCBtX2RpZFN0YXJ0KGZhbHNlKQogICAgICAgICAs
IG1fZGlkRW5kKGZhbHNlKQogICAgIHsKLSAgICAgICAgcHVzaChyb290LCBvZmZzZXQpOworICAg
ICAgICBwdXNoKHJvb3QsIG9mZnNldCwgcGFnZUhlaWdodCwgY29sSW5mbyk7CiAgICAgfQogICAg
IAogICAgIC8vIGN0b3IgdG8gbWF5YmUgcHVzaCBsYXRlcgpAQCAtMjUwLDExICsyNDYsMTEgQEAg
cHVibGljOgogICAgICAgICBBU1NFUlQobV9kaWRTdGFydCA9PSBtX2RpZEVuZCk7ICAgLy8gaWYg
dGhpcyBmaXJlcywgaXQgbWVhbnMgdGhhdCBzb21lb25lIGRpZCBhIHB1c2goKSwgYnV0IGZvcmdv
dCB0byBwb3AoKS4KICAgICB9CiAKLSAgICB2b2lkIHB1c2goUmVuZGVyQm94KiByb290LCBJbnRT
aXplIG9mZnNldCkKKyAgICB2b2lkIHB1c2goUmVuZGVyQm94KiByb290LCBJbnRTaXplIG9mZnNl
dCwgaW50IHBhZ2VIZWlnaHQgPSAwLCBDb2x1bW5JbmZvKiBjb2xJbmZvID0gMCkKICAgICB7CiAg
ICAgICAgIEFTU0VSVCghbV9kaWRTdGFydCk7CiAgICAgICAgIC8vIFdlIHB1c2ggc3RhdGUgZXZl
biBpZiBkaXNhYmxlZCwgYmVjYXVzZSB3ZSBzdGlsbCBuZWVkIHRvIHN0b3JlIGxheW91dERlbHRh
Ci0gICAgICAgIG1fdmlldy0+cHVzaExheW91dFN0YXRlKHJvb3QsIG9mZnNldCk7CisgICAgICAg
IG1fdmlldy0+cHVzaExheW91dFN0YXRlKHJvb3QsIG9mZnNldCwgcGFnZUhlaWdodCwgY29sSW5m
byk7CiAgICAgICAgIGlmIChtX2Rpc2FibGVkKQogICAgICAgICAgICAgbV92aWV3LT5kaXNhYmxl
TGF5b3V0U3RhdGUoKTsKICAgICAgICAgbV9kaWRTdGFydCA9IHRydWU7CkluZGV4OiBXZWJDb3Jl
L3JlbmRlcmluZy9Sb290SW5saW5lQm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJp
bmcvUm9vdElubGluZUJveC5oCShyZXZpc2lvbiA2Njg4NikKKysrIFdlYkNvcmUvcmVuZGVyaW5n
L1Jvb3RJbmxpbmVCb3guaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQCBwdWJsaWM6
CiAgICAgICAgICwgbV9saW5lQnJlYWtQb3MoMCkKICAgICAgICAgLCBtX2xpbmVUb3AoMCkKICAg
ICAgICAgLCBtX2xpbmVCb3R0b20oMCkKKyAgICAgICAgLCBtX3BhZ2luYXRpb25TdHJ1dCgwKQog
ICAgIHsKICAgICB9CiAKQEAgLTU3LDYgKzU4LDkgQEAgcHVibGljOgogICAgIGludCBsaW5lVG9w
KCkgY29uc3QgeyByZXR1cm4gbV9saW5lVG9wOyB9CiAgICAgaW50IGxpbmVCb3R0b20oKSBjb25z
dCB7IHJldHVybiBtX2xpbmVCb3R0b207IH0KIAorICAgIGludCBwYWdpbmF0aW9uU3RydXQoKSBj
b25zdCB7IHJldHVybiBtX3BhZ2luYXRpb25TdHJ1dDsgfQorICAgIHZvaWQgc2V0UGFnaW5hdGlv
blN0cnV0KGludCBzKSB7IG1fcGFnaW5hdGlvblN0cnV0ID0gczsgfQorCiAgICAgaW50IHNlbGVj
dGlvblRvcCgpIGNvbnN0OwogICAgIGludCBzZWxlY3Rpb25Cb3R0b20oKSBjb25zdCB7IHJldHVy
biBsaW5lQm90dG9tKCk7IH0KICAgICBpbnQgc2VsZWN0aW9uSGVpZ2h0KCkgY29uc3QgeyByZXR1
cm4gbWF4KDAsIHNlbGVjdGlvbkJvdHRvbSgpIC0gc2VsZWN0aW9uVG9wKCkpOyB9CkBAIC0xNDEs
NiArMTQ1LDggQEAgcHJpdmF0ZToKICAgICBpbnQgbV9saW5lVG9wOwogICAgIGludCBtX2xpbmVC
b3R0b207CiAKKyAgICBpbnQgbV9wYWdpbmF0aW9uU3RydXQ7CisKICAgICAvLyBGbG9hdHMgaGFu
Z2luZyBvZmYgdGhlIGxpbmUgYXJlIHB1c2hlZCBpbnRvIHRoaXMgdmVjdG9yIGR1cmluZyBsYXlv
dXQuIEl0IGlzIG9ubHkKICAgICAvLyBnb29kIGZvciBhcyBsb25nIGFzIHRoZSBsaW5lIGhhcyBu
b3QgYmVlbiBtYXJrZWQgZGlydHkuCiAgICAgT3duUHRyPFZlY3RvcjxSZW5kZXJCb3gqPiA+IG1f
ZmxvYXRzOwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9tdWx0aWNvbC9ib3JkZXItcGFkZGluZy1w
YWdpbmF0aW9uLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9tdWx0aWNvbC9i
b3JkZXItcGFkZGluZy1wYWdpbmF0aW9uLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9mYXN0L211bHRpY29sL2JvcmRlci1wYWRkaW5nLXBhZ2luYXRpb24uaHRtbAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw5IEBACis8aHRtbD4KKzxib2R5PgorPGRpdiBzdHlsZT0iLXdlYmtpdC1j
b2x1bW4tY291bnQ6MjstbW96LWNvbHVtbi1jb3VudDoyOyBib3JkZXI6MnB4IHNvbGlkIG1hcm9v
biI+Cis8ZGl2IHN0eWxlPSJoZWlnaHQ6MTEwcHgiPjwvZGl2PgorPGRpdiBzdHlsZT0iYmFja2dy
b3VuZC1jb2xvcjpsaW1lOyBib3JkZXI6MnB4IHNvbGlkIGJsYWNrOyB3aWR0aDozNzVweDsgIj4K
KzxkaXYgc3R5bGU9Im1hcmdpbjogMCAxMHB4OyBiYWNrZ3JvdW5kLWNvbG9yOmdyZWVuOyBib3Jk
ZXI6IDJweCBzb2xpZCBibHVlIj4KKzxzcGFuIHN0eWxlPSJmb250LXNpemU6NjRweCI+SW4gMm5k
IGNvbHVtbjwvc3Bhbj4KKzwvZGl2PgorPC9kaXY+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L211
bHRpY29sL2Zsb2F0LXBhZ2luYXRlLWNvbXBsZXguaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L211bHRpY29sL2Zsb2F0LXBhZ2luYXRlLWNvbXBsZXguaHRtbAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2Zhc3QvbXVsdGljb2wvZmxvYXQtcGFnaW5hdGUtY29tcGxleC5o
dG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ4IEBACis8ZGl2IHN0eWxlPSItd2Via2l0LWNv
bHVtbi13aWR0aDozMDBweDstbW96LWNvbHVtbi13aWR0aDozMDBweDsgYm9yZGVyOjJweCBzb2xp
ZCBibGFjazsgaGVpZ2h0OjQwMHB4Ij4KK1RoaXMgaXMgc29tZSB0ZXh0Ljxicj4KK1RoaXMgaXMg
c29tZSB0ZXh0Ljxicj5UaGlzIGlzIHNvbWUgdGV4dC48YnI+VGhpcyBpcyBzb21lIHRleHQuPGJy
PlRoaXMgaXMgc29tZSB0ZXh0Ljxicj5UaGlzIGlzIHNvbWUgdGV4dC48YnI+VGhpcyBpcyBzb21l
IHRleHQuPGJyPgorVGhpcyBpcyBzb21lIHRleHQuPGJyPlRoaXMgaXMgc29tZSB0ZXh0Ljxicj5U
aGlzIGlzIHNvbWUgdGV4dC48YnI+VGhpcyBpcyBzb21lIHRleHQuPGJyPlRoaXMgaXMgc29tZSB0
ZXh0Ljxicj5UaGlzIGlzIHNvbWUgdGV4dC48YnI+CitUaGlzIGlzIHNvbWUgdGV4dC48YnI+Cis8
cD48c3BhbiBzdHlsZT0iZmxvYXQ6bGVmdDtmb250LXNpemU6MTI4cHg7Ij5UPC9zcGFuPgoraGlz
IGlzIHNvbWUgdGV4dC48YnI+CitUaGlzIGlzIHNvbWUgdGV4dC48YnI+VGhpcyBpcyBzb21lIHRl
eHQuPGJyPgorVGhpcyBpcyBzb21lIHRleHQuPGJyPlRoaXMgaXMgc29tZSB0ZXh0Ljxicj5UaGlz
IGlzIHNvbWUgdGV4dC48YnI+VGhpcyBpcyBzb21lIHRleHQuPGJyPgorVGhpcyBpcyBzb21lIHRl
eHQuPGJyPlRoaXMgaXMgc29tZSB0ZXh0Ljxicj5UaGlzIGlzIHNvbWUgdGV4dC48YnI+VGhpcyBp
cyBzb21lIHRleHQuPGJyPgorVGhpcyBpcyBzb21lIHRleHQuPGJyPlRoaXMgaXMgc29tZSB0ZXh0
Ljxicj5UaGlzIGlzIHNvbWUgdGV4dC48YnI+VGhpcyBpcyBzb21lIHRleHQuPGJyPlRoaXMgaXMg
c29tZSB0ZXh0Ljxicj5UaGlzIGlzIHNvbWUgdGV4dC48YnI+CitUaGlzIGlzIHNvbWUgdGV4dC48
YnI+VGhpcyBpcyBzb21lIHRleHQuPGJyPlRoaXMgaXMgc29tZSB0ZXh0Ljxicj5UaGlzIGlzIHNv
bWUgdGV4dC48YnI+CitUaGlzIGlzIHNvbWUgdGV4dC48YnI+VGhpcyBpcyBzb21lIHRleHQuPGJy
PlRoaXMgaXMgc29tZSB0ZXh0Ljxicj5UaGlzIGlzIHNvbWUgdGV4dC48YnI+VGhpcyBpcyBzb21l
IHRleHQuPGJyPjwvcD4KKzwvZGl2PgorCis8ZGl2IHN0eWxlPSJtYXJnaW4tdG9wOjFlbTsgLXdl
YmtpdC1jb2x1bW4td2lkdGg6MzAwcHg7LW1vei1jb2x1bW4td2lkdGg6MzAwcHg7IGJvcmRlcjoy
cHggc29saWQgYmxhY2s7IGhlaWdodDo0MDBweCI+CitUaGlzIGlzIHNvbWUgdGV4dC48YnI+CitU
aGlzIGlzIHNvbWUgdGV4dC48YnI+VGhpcyBpcyBzb21lIHRleHQuPGJyPlRoaXMgaXMgc29tZSB0
ZXh0Ljxicj5UaGlzIGlzIHNvbWUgdGV4dC48YnI+VGhpcyBpcyBzb21lIHRleHQuPGJyPlRoaXMg
aXMgc29tZSB0ZXh0Ljxicj4KK1RoaXMgaXMgc29tZSB0ZXh0Ljxicj5UaGlzIGlzIHNvbWUgdGV4
dC48YnI+VGhpcyBpcyBzb21lIHRleHQuPGJyPlRoaXMgaXMgc29tZSB0ZXh0Ljxicj5UaGlzIGlz
IHNvbWUgdGV4dC48YnI+VGhpcyBpcyBzb21lIHRleHQuPGJyPgorVGhpcyBpcyBzb21lIHRleHQu
PGJyPgorPHA+PGltZyBzdHlsZT0iZmxvYXQ6bGVmdDt3aWR0aDoxMDBweDtoZWlnaHQ6MTAwcHg7
YmFja2dyb3VuZC1jb2xvcjpncmVlbiI+PGltZyBzdHlsZT0iZmxvYXQ6cmlnaHQ7d2lkdGg6MTAw
cHg7aGVpZ2h0OjIwMHB4O2JhY2tncm91bmQtY29sb3I6Z3JlZW4iPgorVGhpcyBpcyBzb21lIHRl
eHQ8YnI+CitUaGlzIGlzIHNvbWUgdGV4dC48YnI+VGhpcyBpcyBzb21lIHRleHQuPGJyPgorVGhp
cyBpcyBzb21lIHRleHQuPGJyPlRoaXMgaXMgc29tZSB0ZXh0Ljxicj5UaGlzIGlzIHNvbWUgdGV4
dC48YnI+VGhpcyBpcyBzb21lIHRleHQuPGJyPgorVGhpcyBpcyBzb21lIHRleHQuPGJyPlRoaXMg
aXMgc29tZSB0ZXh0Ljxicj5UaGlzIGlzIHNvbWUgdGV4dC48YnI+VGhpcyBpcyBzb21lIHRleHQu
PGJyPgorVGhpcyBpcyBzb21lIHRleHQuPGJyPlRoaXMgaXMgc29tZSB0ZXh0Ljxicj5UaGlzIGlz
IHNvbWUgdGV4dC48YnI+VGhpcyBpcyBzb21lIHRleHQuPGJyPlRoaXMgaXMgc29tZSB0ZXh0Ljxi
cj5UaGlzIGlzIHNvbWUgdGV4dC48YnI+CitUaGlzIGlzIHNvbWUgdGV4dC48YnI+VGhpcyBpcyBz
b21lIHRleHQuPGJyPlRoaXMgaXMgc29tZSB0ZXh0Ljxicj5UaGlzIGlzIHNvbWUgdGV4dC48YnI+
CitUaGlzIGlzIHNvbWUgdGV4dC48YnI+VGhpcyBpcyBzb21lIHRleHQuPGJyPlRoaXMgaXMgc29t
ZSB0ZXh0Ljxicj5UaGlzIGlzIHNvbWUgdGV4dC48YnI+VGhpcyBpcyBzb21lIHRleHQuPGJyPjwv
cD4KKzwvZGl2PgorCis8ZGl2IHN0eWxlPSJtYXJnaW4tdG9wOjFlbTsgLXdlYmtpdC1jb2x1bW4t
d2lkdGg6MzAwcHg7LW1vei1jb2x1bW4td2lkdGg6MzAwcHg7IGJvcmRlcjoycHggc29saWQgYmxh
Y2s7IGhlaWdodDo0MDBweCI+Cis8aW1nIHN0eWxlPSJmbG9hdDpsZWZ0O2JhY2tncm91bmQtY29s
b3I6Z3JlZW47IHdpZHRoOjMwMHB4O2hlaWdodDozOTBweCI+CitMb25nZXIgdGV4dCBkZXNpZ25l
ZCB0byB0ZXN0IGZsb2F0IGFuZCB3cmFwcGluZyBiZWhhdmlvci4gTG9uZ2VyIHRleHQgZGVzaWdu
ZWQgdG8gdGVzdCBmbG9hdCBhbmQgd3JhcHBpbmcgYmVoYXZpb3IuCitMb25nZXIgdGV4dCBkZXNp
Z25lZCB0byB0ZXN0IGZsb2F0IGFuZCB3cmFwcGluZyBiZWhhdmlvci4KK0xvbmdlciB0ZXh0IGRl
c2lnbmVkIHRvIHRlc3QgZmxvYXQgYW5kIHdyYXBwaW5nIGJlaGF2aW9yLgorTG9uZ2VyIHRleHQg
ZGVzaWduZWQgdG8gdGVzdCBmbG9hdCBhbmQgd3JhcHBpbmcgYmVoYXZpb3IuCis8L2Rpdj4KKwor
PGRpdiBzdHlsZT0ibWFyZ2luLXRvcDoxZW07IC13ZWJraXQtY29sdW1uLXdpZHRoOjMwMHB4Oy1t
b3otY29sdW1uLXdpZHRoOjMwMHB4OyBib3JkZXI6MnB4IHNvbGlkIGJsYWNrOyBoZWlnaHQ6NDAw
cHgiPgorPGltZyBzdHlsZT0iZmxvYXQ6bGVmdDtiYWNrZ3JvdW5kLWNvbG9yOmJsdWU7IHdpZHRo
OjEwMCU7aGVpZ2h0OjM4MHB4Ij4KKzxzcGFuIHN0eWxlPSJmb250LXNpemU6MjRweCI+PGltZyBz
dHlsZT0iZmxvYXQ6bGVmdDtiYWNrZ3JvdW5kLWNvbG9yOmdyZWVuO2hlaWdodDoyMHB4O3dpZHRo
OjEwMHB4Ij4KKworTG9uZ2VyIHRleHQgZGVzaWduZWQgPGltZyBzdHlsZT0iZmxvYXQ6cmlnaHQ7
YmFja2dyb3VuZC1jb2xvcjpncmVlbjtoZWlnaHQ6MjBweDt3aWR0aDoxMDBweCI+dG8gdGVzdCBm
bG9hdCBhbmQgd3JhcHBpbmcgYmVoYXZpb3IuIExvbmdlciB0ZXh0IGRlc2lnbmVkIHRvIHRlc3Qg
ZmxvYXQgYW5kIHdyYXBwaW5nIGJlaGF2aW9yLgorTG9uZ2VyIHRleHQgZGVzaWduZWQgdG8gdGVz
dCBmbG9hdCBhbmQgd3JhcHBpbmcgYmVoYXZpb3IuCitMb25nZXIgdGV4dCBkZXNpZ25lZCB0byB0
ZXN0IGZsb2F0IGFuZCB3cmFwcGluZyBiZWhhdmlvci4KK0xvbmdlciB0ZXh0IGRlc2lnbmVkIHRv
IHRlc3QgZmxvYXQgYW5kIHdyYXBwaW5nIGJlaGF2aW9yLgorPC9zcGFuPgorPC9kaXY+CkluZGV4
OiBMYXlvdXRUZXN0cy9mYXN0L211bHRpY29sL2Zsb2F0LXBhZ2luYXRlLmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9tdWx0aWNvbC9mbG9hdC1wYWdpbmF0ZS5odG1sCShyZXZp
c2lvbiA2Njg4NikKKysrIExheW91dFRlc3RzL2Zhc3QvbXVsdGljb2wvZmxvYXQtcGFnaW5hdGUu
aHRtbAkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDQgQEAKLTxkaXYgc3R5bGU9Ii13ZWJraXQt
Y29sdW1uLXdpZHRoOjMwMHB4O2JvcmRlcjoycHggc29saWQgYmxhY2s7IGhlaWdodDo0MDBweCI+
Cis8ZGl2IHN0eWxlPSItd2Via2l0LWNvbHVtbi13aWR0aDozMDBweDstbW96LWNvbHVtbi13aWR0
aDozMDBweDsgYm9yZGVyOjJweCBzb2xpZCBibGFjazsgaGVpZ2h0OjQwMHB4Ij4KIFRoaXMgaXMg
c29tZSB0ZXh0Ljxicj4KIFRoaXMgaXMgc29tZSB0ZXh0Ljxicj5UaGlzIGlzIHNvbWUgdGV4dC48
YnI+VGhpcyBpcyBzb21lIHRleHQuPGJyPlRoaXMgaXMgc29tZSB0ZXh0Ljxicj5UaGlzIGlzIHNv
bWUgdGV4dC48YnI+VGhpcyBpcyBzb21lIHRleHQuPGJyPgogVGhpcyBpcyBzb21lIHRleHQuPGJy
PlRoaXMgaXMgc29tZSB0ZXh0Ljxicj5UaGlzIGlzIHNvbWUgdGV4dC48YnI+CkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L211bHRpY29sL2Zsb2F0LXRydW5jYXRpb24uaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L211bHRpY29sL2Zsb2F0LXRydW5jYXRpb24uaHRtbAkocmV2aXNp
b24gNjY4ODYpCisrKyBMYXlvdXRUZXN0cy9mYXN0L211bHRpY29sL2Zsb2F0LXRydW5jYXRpb24u
aHRtbAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAogICAgICAgICA8L2Rpdj4KICAg
ICAgICAgdGV4dCBydW5zIGhlcmUgbmV4dCB0byB0aGUgZmxvYXQKICAgICA8L2Rpdj4KLSAgICA8
IS0tIEluIHRoaXMgY2FzZSwgdGhlIGZsb2F0IGZvcmNlcyBhbiBlYXJseSBjb2x1bW4gYnJlYWsu
IC0tPgorICAgIDwhLS0gSW4gdGhpcyBjYXNlLCB0aGUgZmxvYXQgcGFnaW5hdGVzIGFmdGVyIGl0
cyBzZWNvbmQgbGluZS4gLS0+CiAgICAgPGRpdiBjbGFzcz0iY29sdW1ucyIgc3R5bGU9ImhlaWdo
dDogNzBweDsiPgogICAgICAgICBvbmUgbGluZSB0d28gbGluZXMgdGhyZWUgbGluZXMKICAgICAg
ICAgPGRpdiBjbGFzcz0iZmxvYXQiIGlkPSJmMyI+CkBAIC00Miw3ICs0Miw3IEBACiAgICAgICAg
IDwvZGl2PgogICAgICAgICB0ZXh0IHJ1bnMgaGVyZSBuZXh0IHRvIHRoZSBmbG9hdAogICAgIDwv
ZGl2PgotICAgIDwhLS0gSW4gdGhpcyBjYXNlLCB0aGUgZmxvYXQgZm9yY2VzIGFuIGVhcmx5IGNv
bHVtbiBicmVhay4gLS0+CisgICAgPCEtLSBJbiB0aGlzIGNhc2UsIHRoZSBmbG9hdCBwYWdpbmF0
ZXMgYWZ0ZXIgaXRzIGZpcnN0IGxpbmUuIC0tPgogICAgIDxkaXYgY2xhc3M9ImNvbHVtbnMiIHN0
eWxlPSJoZWlnaHQ6IDcwcHg7Ij4KICAgICAgICAgb25lIGxpbmUgdHdvIGxpbmVzIHRocmVlIGxp
bmVzIGFuZCBzb21lIG1vcmUKICAgICAgICAgPGRpdiBjbGFzcz0iZmxvYXQiIGlkPSJmNCI+CkBA
IC01MCw4ICs1MCw3IEBACiAgICAgICAgIDwvZGl2PgogICAgICAgICB0ZXh0IHJ1bnMgaGVyZSBu
ZXh0IHRvIHRoZSBmbG9hdAogICAgIDwvZGl2PgotICAgIDwhLS0gSW4gdGhpcyBjYXNlLCB0aGUg
ZmxvYXQgaXMgdG9vIHRhbGwgdG8gZml0IGFueXdheSwgc28gaXQgZG9lc24ndAotICAgICAgICAg
YWZmZWN0IGNvbHVtbiBicmVha3MuIC0tPgorICAgIDwhLS0gSW4gdGhpcyBjYXNlLCB0aGUgZmxv
YXQgcGFnaW5hdGVzIGFmdGVyIGl0cyB0aGlyZCBsaW5lLiAtLT4KICAgICA8ZGl2IGNsYXNzPSJj
b2x1bW5zIiBzdHlsZT0iaGVpZ2h0OiA0NXB4OyI+CiAgICAgICAgIG9uZSBsaW5lCiAgICAgICAg
IDxkaXYgY2xhc3M9ImZsb2F0IiBpZD0iZjUiPgpAQCAtNzYsOCArNzUsOCBAQAogICAgIHZhciB0
ZXN0cyA9IFsKICAgICAgICAgWyJmMSIsIDAsIDQ1XSwKICAgICAgICAgWyJmMiIsIDAsIDQ1XSwK
LSAgICAgICAgWyJmMyIsIDEwMCwgNV0sCi0gICAgICAgIFsiZjQiLCAxMDAsIDVdLAorICAgICAg
ICBbImYzIiwgMCwgNDVdLAorICAgICAgICBbImY0IiwgMCwgNTVdLAogICAgICAgICBbImY1Iiwg
MCwgMTVdCiAgICAgXTsKIApJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9tdWx0aWNvbC9tYXJnaW4t
Y29sbGFwc2UuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L211bHRpY29sL21h
cmdpbi1jb2xsYXBzZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9tdWx0
aWNvbC9tYXJnaW4tY29sbGFwc2UuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMyBAQAor
PGh0bWw+Cis8aGVhZD4KKzxzdHlsZT4KKy5jb2x1bW5zIHsgLXdlYmtpdC1jb2x1bW4tY291bnQ6
MjsgLW1vei1jb2x1bW4tY291bnQ6IDI7IGNvbHVtbi1jb3VudDogMjsgYm9yZGVyOjJweCBzb2xp
ZCBibGFjazsgaGVpZ2h0OjMwMHB4IH0KKy5ibG9jayB7IGhlaWdodDoyMDBweDsgYmFja2dyb3Vu
ZC1jb2xvcjpwdXJwbGU7IH0KKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KK1RoZSB0d28gcHVy
cGxlIHJlY3RhbmdsZXMgYmVsb3cgc2hvdWxkIGJvdGggYmUgYXQgdGhlIHRvcCBvZiB0aGVpciBj
b2x1bW5zLiAgSWYgb25lIGlzIGxvd2VyIHRoYW4gdGhlIG90aGVyLCB0aGFuIHRoZSB0ZXN0IGhh
cyBmYWlsZWQuCis8ZGl2IGNsYXNzPSJjb2x1bW5zIj4KKzxkaXYgY2xhc3M9ImJsb2NrIiBzdHls
ZT0ibWFyZ2luLWJvdHRvbToyMDBweCI+PC9kaXY+Cis8ZGl2IGNsYXNzPSJibG9jayI+PC9kaXY+
Cis8L2Rpdj4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvbXVsdGljb2wvbWF4LWhlaWdodC1jb2x1
bW5zLWJsb2NrLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9tdWx0aWNvbC9t
YXgtaGVpZ2h0LWNvbHVtbnMtYmxvY2suaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2Zhc3QvbXVsdGljb2wvbWF4LWhlaWdodC1jb2x1bW5zLWJsb2NrLmh0bWwJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsOSBAQAorPGh0bWw+Cis8Ym9keT4KK1RoaXMgaXMgY2FwdHVyaW5nIGN1cnJl
bnQgYmVoYXZpb3IsIGJ1dCBpdCdzIG5vdCBjbGVhciB0aGF0IGl0IGlzIGNvcnJlY3QuICBJdCdz
IG5vdCBjbGVhciBpZiBtYXgtaGVpZ2h0IG9uIGEgY29sdW1ucyBibG9jayBjb25zdGl0dXRlcyBh
Citjb25zdHJhaW50IG9uIHRoZSBjb2x1bW5zIG9yIG5vdC4gIFlvdSBvYnZpb3VzbHkgYmVnaW4g
dHJ5aW5nIHRvIGJhbGFuY2UsIGJ1dCBvbmx5IHJ1biBpbnRvIHRoZSBjb25zdHJhaW50IG9uY2Ug
dGhlIGJhbGFuY2VkIGNvbHVtbnMgZXhjZWVkCit0aGUgbWF4LWhlaWdodC4gIEl0J3Mgbm90IGNs
ZWFyIHRoYXQgeW91IHNob3VsZCBzdWRkZW5seSBzaGlmdCB0byBhIGZpbGwuICBPdXIgY3VycmVu
dCBiZWhhdmlvciAod2hpY2ggbWF0Y2hlcyBGaXJlZm94KSBpcyB0byBqdXN0IG92ZXJmbG93Cit3
aXRob3V0IGNoYW5naW5nIGZyb20gYmFsYW5jZSB0byBmaWxsLgorCis8ZGl2IHN0eWxlPSItd2Vi
a2l0LWNvbHVtbi1jb3VudDo1OyAtbW96LWNvbHVtbi1jb3VudDo1OyBtYXgtaGVpZ2h0OjYwcHg7
Ym9yZGVyOjJweCBzb2xpZCBibGFjazsgZm9udC1zaXplOjI0cHg7IHdpZHRoOjQwMHB4Ij4KK1Ro
aXMgaXMgc29tZSB0ZXh0PGJyPlRoaXMgaXMgc29tZSB0ZXh0PGJyPlRoaXMgaXMgc29tZSB0ZXh0
PGJyPlRoaXMgaXMgc29tZSB0ZXh0PGJyPlRoaXMgaXMgc29tZSB0ZXh0PGJyPgpcIE5vIG5ld2xp
bmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvbXVsdGljb2wvc2hhZG93
LWJyZWFraW5nLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9tdWx0aWNvbC9z
aGFkb3ctYnJlYWtpbmcuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvbXVs
dGljb2wvc2hhZG93LWJyZWFraW5nLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzcgQEAK
KzwhRE9DVFlQRSBodG1sPgorPGh0bWw+CisJPGhlYWQ+CisJCTxzdHlsZT4KKyAgICAgICAgICAg
ICAgICAgICAgICAgIHAgeworCQkJCXBvc2l0aW9uOmFic29sdXRlOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBib3JkZXI6MnB4IHNvbGlkIGJsYWNrOworCQkJCW1heC13aWR0aDo0
MjBweDsKKwkJCQktd2Via2l0LWNvbHVtbi1nYXA6MjBweDsKKwkJCQktd2Via2l0LWNvbHVtbi13
aWR0aDoyMDBweDsKKwkJCQktd2Via2l0LWNvbHVtbi1ydWxlOjFweCBkb3R0ZWQgd2hpdGU7CisJ
CQkJZm9udC1zaXplOjE2cHg7CisJCQkJdG9wOjIwcHg7CisJCQkJbGVmdDoyMHB4OworCQkJCXRl
eHQtYWxpZ246anVzdGlmeTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC13
ZWlnaHQ6Ym9sZDsKKwkJCQl0ZXh0LXNoYWRvdzoxcHggMXB4IDEwcHggYmxhY2s7CisJCQl9CisJ
CQkKKwkJCXA6Zmlyc3QtbGV0dGVyIHsKKwkJCQlmb250LXNpemU6MzZweDsKKwkJCQltYXJnaW4t
cmlnaHQ6NHB4OworCQkJCW1hcmdpbi1ib3R0b206LTZweDsKKwkJCQlmbG9hdDpsZWZ0OworCQkJ
fQorCQkJCisJCQkKKwkJCQorCQk8L3N0eWxlPgorCTwvaGVhZD4KKwkKKwk8Ym9keT4KKwkJPGRp
diBjbGFzcz0ibWFnIj4KKwkJCTxwPkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0
ZXR1ciBhZGlwaXNjaW5nIGVsaXQuIENyYXMgcGhhcmV0cmEgbW9sbGlzIHBoYXJldHJhLiBTdXNw
ZW5kaXNzZSBsYWNpbmlhIG9yY2kgZXQgZmVsaXMgdHJpc3RpcXVlIHNpdCBhbWV0IHNlbXBlciBt
YXNzYSB0ZW1wdXMuIFN1c3BlbmRpc3NlIGNvbnNlY3RldHVyIHRlbXBvciBwdWx2aW5hci4gUHJv
aW4gZHVpIGVyb3MsIHVsdHJpY2llcyB2ZWwgbWFsZXN1YWRhIHZlbCwgdGVtcG9yIGF0IGFudGUu
IE5hbSBlZ2V0IG5pc2wgZHVpLiBEb25lYyBtb2xlc3RpZSBsZWN0dXMgYSBudW5jIHNjZWxlcmlz
cXVlIGJsYW5kaXQuIE5hbSBub24gbGlndWxhIG1hc3NhLCBzZWQgc3VzY2lwaXQgdHVycGlzLiBF
dGlhbSBlZ2V0IGxpZ3VsYSBzaXQgYW1ldCB0dXJwaXMgdmVuZW5hdGlzIGRpY3R1bSBpbiBlbGVp
ZmVuZCBhdWd1ZS4gRHVpcyB0ZWxsdXMgbGVjdHVzLCB2b2x1dHBhdCBldCBhZGlwaXNjaW5nIGEs
IHBlbGxlbnRlc3F1ZSBldSBtZXR1cy4gQWVuZWFuIHN1c2NpcGl0IGNvbmd1ZSBtYXVyaXMgYXQg
Z3JhdmlkYS4gSW50ZWdlciBsZWN0dXMgbGlndWxhLCBjb25zZWN0ZXR1ciBzaXQgYW1ldCB2ZW5l
bmF0aXMgaWQsIHNjZWxlcmlzcXVlIGVnZXQgbmlzbC4gTnVuYyBkYXBpYnVzIHBvc3VlcmUgcmlz
dXMsIHZpdGFlIHRlbXBvciBuaWJoIGlhY3VsaXMgZXQuPC9wPgorCQk8L2Rpdj4KKwk8L2JvZHk+
Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogTGF5b3V0VGVzdHMv
ZmFzdC9tdWx0aWNvbC90YWJsZS1tYXJnaW4tY29sbGFwc2UuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L211bHRpY29sL3RhYmxlLW1hcmdpbi1jb2xsYXBzZS5odG1sCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9tdWx0aWNvbC90YWJsZS1tYXJnaW4tY29sbGFw
c2UuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMiBAQAorPGh0bWw+Cis8aGVhZD4KKzxz
dHlsZT4KKy5jb2x1bW5zIHsgLXdlYmtpdC1jb2x1bW4tY291bnQ6MjsgLW1vei1jb2x1bW4tY291
bnQ6IDI7IGNvbHVtbi1jb3VudDogMjsgYm9yZGVyOjJweCBzb2xpZCBibGFjazsgaGVpZ2h0OjMw
MHB4IH0KKy5ibG9jayB7IGhlaWdodDoyMDBweDsgYmFja2dyb3VuZC1jb2xvcjpwdXJwbGU7IH0K
Kzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KK1RoZSBmb3VyIHJlY3RhbmdsZXMgYmVsb3cgc2hv
dWxkIGJvdGggYmUgYXQgdGhlIHRvcCBvZiB0aGVpciBjb2x1bW5zLiAgSWYgb25lIGlzIGxvd2Vy
IHRoYW4gdGhlIG90aGVyLCB0aGFuIHRoZSB0ZXN0IGhhcyBmYWlsZWQuICBUaGUgcGF0dGVybiBp
biBlYWNoCitjb2x1bW4gc2hvdWxkIGJlIHRoZSBzYW1lIChvcmFuZ2UveWVsbG93KS4KKzxkaXYg
Y2xhc3M9ImNvbHVtbnMiPgorPHRhYmxlIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBib3Jk
ZXI9MCB3aWR0aD0xMDAlPgorPHRyPjx0ZCB3aWR0aD01MCU+Cis8ZGl2IGNsYXNzPSJibG9jayIg
c3R5bGU9Im1hcmdpbi1ib3R0b206MjAwcHg7IGJhY2tncm91bmQtY29sb3I6b3JhbmdlIj48L2Rp
dj4KKzxkaXYgY2xhc3M9ImJsb2NrIiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjpvcmFuZ2UiPjwv
ZGl2PgorPC90ZD4KKzx0ZCB3aWR0aD01MCU+Cis8ZGl2IGNsYXNzPSJibG9jayIgc3R5bGU9Im1h
cmdpbi1ib3R0b206MjAwcHg7IGJhY2tncm91bmQtY29sb3I6eWVsbG93Ij48L2Rpdj4KKzxkaXYg
Y2xhc3M9ImJsb2NrIiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjp5ZWxsb3ciPjwvZGl2PgorPC90
ZD48L3RyPgorPC90YWJsZT4KKzwvZGl2PgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9tdWx0aWNv
bC90YWJsZS12ZXJ0aWNhbC1hbGlnbi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3QvbXVsdGljb2wvdGFibGUtdmVydGljYWwtYWxpZ24uaHRtbAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2Zhc3QvbXVsdGljb2wvdGFibGUtdmVydGljYWwtYWxpZ24uaHRtbAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwxMjMgQEAKKzxkaXYgc3R5bGU9Ii13ZWJraXQtY29sdW1uLWNvdW50
OjI7IGhlaWdodDozNTBweCI+Cis8dGFibGUgYm9yZGVyPTEgY2VsbHBhZGRpbmc9MTAgY2VsbHNw
YWNpbmc9MCI+Cis8dHIgc3R5bGU9InZlcnRpY2FsLWFsaWduOmJhc2VsaW5lIj48dGQ+CitUaGlz
IGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48
YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMg
b2YgdGV4dC48YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+CitUaGlzIGNlbGwg
aGFzIGxvdHMgb2YgdGV4dC48YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+CitU
aGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4
dC48YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+CitUaGlzIGNlbGwgaGFzIGxv
dHMgb2YgdGV4dC48YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+CitUaGlzIGNl
bGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+
CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2Yg
dGV4dC48YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+CitUaGlzIGNlbGwgaGFz
IGxvdHMgb2YgdGV4dC48YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+CitUaGlz
IGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48
YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMg
b2YgdGV4dC48YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+CitUaGlzIGNlbGwg
aGFzIGxvdHMgb2YgdGV4dC48YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+CitU
aGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4
dC48YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+CitUaGlzIGNlbGwgaGFzIGxv
dHMgb2YgdGV4dC48YnI+CisKKworPHRkPjxzcGFuIHN0eWxlPSJmb250LXNpemU6NjRweCI+T3Ro
ZXIgY2VsbC48L3NwYW4+PC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPC9kaXY+CisKKzxocj4KKwor
PGRpdiBzdHlsZT0iLXdlYmtpdC1jb2x1bW4tY291bnQ6MjsgaGVpZ2h0OjMwMHB4Ij4KKzx0YWJs
ZSBib3JkZXI9MSBjZWxscGFkZGluZz0xMCBjZWxsc3BhY2luZz0wIj4KKzx0ciBzdHlsZT0idmVy
dGljYWwtYWxpZ246bWlkZGxlIj48dGQ+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+
CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2Yg
dGV4dC48YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+CitUaGlzIGNlbGwgaGFz
IGxvdHMgb2YgdGV4dC48YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+CitUaGlz
IGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48
YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMg
b2YgdGV4dC48YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+CitUaGlzIGNlbGwg
aGFzIGxvdHMgb2YgdGV4dC48YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+CitU
aGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4
dC48YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+CitUaGlzIGNlbGwgaGFzIGxv
dHMgb2YgdGV4dC48YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+CitUaGlzIGNl
bGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+
CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2Yg
dGV4dC48YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+CitUaGlzIGNlbGwgaGFz
IGxvdHMgb2YgdGV4dC48YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+CitUaGlz
IGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48
YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMg
b2YgdGV4dC48YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+CisKKworPHRkPjxz
cGFuIHN0eWxlPSJmb250LXNpemU6NjRweCI+T3RoZXIgY2VsbC48L3NwYW4+PC90ZD4KKzwvdHI+
Cis8L3RhYmxlPgorPC9kaXY+CisKKzxocj4KKworPGRpdiBzdHlsZT0ibWFyZ2luLXRvcDoxZW07
IC13ZWJraXQtY29sdW1uLWNvdW50OjI7IGhlaWdodDozMDBweCI+Cis8dGFibGUgYm9yZGVyPTEg
Y2VsbHBhZGRpbmc9MTAgY2VsbHNwYWNpbmc9MCI+Cis8dHIgc3R5bGU9InZlcnRpY2FsLWFsaWdu
OmJvdHRvbSI+PHRkPgorVGhpcyBjZWxsIGhhcyBsb3RzIG9mIHRleHQuPGJyPgorVGhpcyBjZWxs
IGhhcyBsb3RzIG9mIHRleHQuPGJyPgorVGhpcyBjZWxsIGhhcyBsb3RzIG9mIHRleHQuPGJyPgor
VGhpcyBjZWxsIGhhcyBsb3RzIG9mIHRleHQuPGJyPgorVGhpcyBjZWxsIGhhcyBsb3RzIG9mIHRl
eHQuPGJyPgorVGhpcyBjZWxsIGhhcyBsb3RzIG9mIHRleHQuPGJyPgorVGhpcyBjZWxsIGhhcyBs
b3RzIG9mIHRleHQuPGJyPgorVGhpcyBjZWxsIGhhcyBsb3RzIG9mIHRleHQuPGJyPgorVGhpcyBj
ZWxsIGhhcyBsb3RzIG9mIHRleHQuPGJyPgorVGhpcyBjZWxsIGhhcyBsb3RzIG9mIHRleHQuPGJy
PgorVGhpcyBjZWxsIGhhcyBsb3RzIG9mIHRleHQuPGJyPgorVGhpcyBjZWxsIGhhcyBsb3RzIG9m
IHRleHQuPGJyPgorVGhpcyBjZWxsIGhhcyBsb3RzIG9mIHRleHQuPGJyPgorVGhpcyBjZWxsIGhh
cyBsb3RzIG9mIHRleHQuPGJyPgorVGhpcyBjZWxsIGhhcyBsb3RzIG9mIHRleHQuPGJyPgorVGhp
cyBjZWxsIGhhcyBsb3RzIG9mIHRleHQuPGJyPgorVGhpcyBjZWxsIGhhcyBsb3RzIG9mIHRleHQu
PGJyPgorVGhpcyBjZWxsIGhhcyBsb3RzIG9mIHRleHQuPGJyPgorVGhpcyBjZWxsIGhhcyBsb3Rz
IG9mIHRleHQuPGJyPgorVGhpcyBjZWxsIGhhcyBsb3RzIG9mIHRleHQuPGJyPgorVGhpcyBjZWxs
IGhhcyBsb3RzIG9mIHRleHQuPGJyPgorVGhpcyBjZWxsIGhhcyBsb3RzIG9mIHRleHQuPGJyPgor
VGhpcyBjZWxsIGhhcyBsb3RzIG9mIHRleHQuPGJyPgorVGhpcyBjZWxsIGhhcyBsb3RzIG9mIHRl
eHQuPGJyPgorVGhpcyBjZWxsIGhhcyBsb3RzIG9mIHRleHQuPGJyPgorVGhpcyBjZWxsIGhhcyBs
b3RzIG9mIHRleHQuPGJyPgorVGhpcyBjZWxsIGhhcyBsb3RzIG9mIHRleHQuPGJyPgorVGhpcyBj
ZWxsIGhhcyBsb3RzIG9mIHRleHQuPGJyPgorVGhpcyBjZWxsIGhhcyBsb3RzIG9mIHRleHQuPGJy
PgorVGhpcyBjZWxsIGhhcyBsb3RzIG9mIHRleHQuPGJyPgorCisKKzx0ZD48c3BhbiBzdHlsZT0i
Zm9udC1zaXplOjY0cHgiPk90aGVyIGNlbGwuPC9zcGFuPjwvdGQ+Cis8L3RyPgorPC90YWJsZT4K
KzwvZGl2Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67691</attachid>
            <date>2010-09-15 11:18:57 -0700</date>
            <delta_ts>2010-09-15 14:19:37 -0700</delta_ts>
            <desc>Fix pageY dirtying / checking for positioned objects and tables and flexible boxes</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>115645</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL0NvbHVtbkluZm8uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9Db2x1bW5JbmZvLmgJKHJldmlzaW9uIDY2OTAzKQorKysgV2ViQ29yZS9y
ZW5kZXJpbmcvQ29sdW1uSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw5IEBAIHB1
YmxpYzoKICAgICBDb2x1bW5JbmZvKCkKICAgICAgICAgOiBtX2Rlc2lyZWRDb2x1bW5XaWR0aCgw
KQogICAgICAgICAsIG1fZGVzaXJlZENvbHVtbkNvdW50KDEpCisgICAgICAgICwgbV9jb2x1bW5D
b3VudCgxKQorICAgICAgICAsIG1fY29sdW1uSGVpZ2h0KDApCisgICAgICAgICwgbV9taW5pbXVt
Q29sdW1uSGVpZ2h0KDApCiAgICAgICAgIHsgfQogICAgIAogICAgIGludCBkZXNpcmVkQ29sdW1u
V2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2Rlc2lyZWRDb2x1bW5XaWR0aDsgfQpAQCAtNDQsMTkg
KzQ3LDI4IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBkZXNpcmVkQ29sdW1uQ291bnQoKSBjb25z
dCB7IHJldHVybiBtX2Rlc2lyZWRDb2x1bW5Db3VudDsgfQogICAgIHZvaWQgc2V0RGVzaXJlZENv
bHVtbkNvdW50KHVuc2lnbmVkIGNvdW50KSB7IG1fZGVzaXJlZENvbHVtbkNvdW50ID0gY291bnQ7
IH0KIAotICAgIC8vIEVuY2Fwc3VsYXRlZCBmb3IgdGhlIGZ1dHVyZSB3aGVyZSB3ZSBjYW4gYXZv
aWQgc3RvcmluZyB0aGUgcmVjdHMgYW5kIGp1c3QgY29tcHV0ZSB0aGVtIGR5bmFtaWNhbGx5Lgot
ICAgIHNpemVfdCBjb2x1bW5Db3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fY29sdW1uUmVjdHMuc2l6
ZSgpOyB9Ci0gICAgY29uc3QgSW50UmVjdCYgY29sdW1uUmVjdEF0KHNpemVfdCBpKSBjb25zdCB7
IHJldHVybiBtX2NvbHVtblJlY3RzW2ldOyB9CisgICAgdW5zaWduZWQgY29sdW1uQ291bnQoKSBj
b25zdCB7IHJldHVybiBtX2NvbHVtbkNvdW50OyB9CisgICAgaW50IGNvbHVtbkhlaWdodCgpIGNv
bnN0IHsgcmV0dXJuIG1fY29sdW1uSGVpZ2h0OyB9CiAKLSAgICB2b2lkIGNsZWFyQ29sdW1ucygp
IHsgbV9jb2x1bW5SZWN0cy5jbGVhcigpOyB9CisgICAgLy8gU2V0IG91ciBjb3VudCBhbmQgaGVp
Z2h0LiAgVGhpcyBpcyBlbm91Z2ggaW5mbyBmb3IgYSBSZW5kZXJCbG9jayB0byBjb21wdXRlIHBh
Z2UgcmVjdHMKKyAgICAvLyBkeW5hbWljYWxseS4KKyAgICB2b2lkIHNldENvbHVtbkNvdW50QW5k
SGVpZ2h0KGludCBjLCBpbnQgaCkKKyAgICB7IAorICAgICAgICBtX2NvbHVtbkNvdW50ID0gYzsK
KyAgICAgICAgbV9jb2x1bW5IZWlnaHQgPSBoOworICAgIH0KKyAgICB2b2lkIHNldENvbHVtbkhl
aWdodChpbnQgaCkgeyBtX2NvbHVtbkhlaWdodCA9IGg7IH0KKworICAgIHZvaWQgdXBkYXRlTWlu
aW11bUNvbHVtbkhlaWdodChpbnQgaCkgeyBtX21pbmltdW1Db2x1bW5IZWlnaHQgPSBtYXgoaCwg
bV9taW5pbXVtQ29sdW1uSGVpZ2h0KTsgfQorICAgIGludCBtaW5pbXVtQ29sdW1uSGVpZ2h0KCkg
Y29uc3QgeyByZXR1cm4gbV9taW5pbXVtQ29sdW1uSGVpZ2h0OyB9CiAKLSAgICAvLyBGSVhNRTog
V2lsbCBnbyBhd2F5IG9uY2Ugd2UgZG9uJ3QgdXNlIHRoZSBWZWN0b3IuCi0gICAgdm9pZCBhZGRD
b2x1bW5SZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpIHsgbV9jb2x1bW5SZWN0cy5hcHBlbmQocmVj
dCk7IH0KLSAgICAKIHByaXZhdGU6CiAgICAgaW50IG1fZGVzaXJlZENvbHVtbldpZHRoOwogICAg
IHVuc2lnbmVkIG1fZGVzaXJlZENvbHVtbkNvdW50OwotICAgIFZlY3RvcjxJbnRSZWN0PiBtX2Nv
bHVtblJlY3RzOworICAgIAorICAgIHVuc2lnbmVkIG1fY29sdW1uQ291bnQ7CisgICAgaW50IG1f
Y29sdW1uSGVpZ2h0OworICAgIGludCBtX21pbmltdW1Db2x1bW5IZWlnaHQ7CiB9OwogCiB9Cklu
ZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvTGF5b3V0U3RhdGUuY3BwCShyZXZpc2lvbiA2Njg4NikKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsOCArMzMs
OSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUxheW91dFN0YXRlOjpMYXlvdXRTdGF0ZShM
YXlvdXRTdGF0ZSogcHJldiwgUmVuZGVyQm94KiByZW5kZXJlciwgY29uc3QgSW50U2l6ZSYgb2Zm
c2V0KQotICAgIDogbV9uZXh0KHByZXYpCitMYXlvdXRTdGF0ZTo6TGF5b3V0U3RhdGUoTGF5b3V0
U3RhdGUqIHByZXYsIFJlbmRlckJveCogcmVuZGVyZXIsIGNvbnN0IEludFNpemUmIG9mZnNldCwg
aW50IHBhZ2VIZWlnaHQsIENvbHVtbkluZm8qIGNvbEluZm8pCisgICAgOiBtX2NvbHVtbkluZm8o
Y29sSW5mbykKKyAgICAsIG1fbmV4dChwcmV2KQogI2lmbmRlZiBOREVCVUcKICAgICAsIG1fcmVu
ZGVyZXIocmVuZGVyZXIpCiAjZW5kaWYKQEAgLTQ1LDQzICs0Niw2NyBAQCBMYXlvdXRTdGF0ZTo6
TGF5b3V0U3RhdGUoTGF5b3V0U3RhdGUqIHByCiAgICAgaWYgKGZpeGVkKSB7CiAgICAgICAgIC8v
IEZJWE1FOiBUaGlzIGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgd2l0aCB0cmFuc2Zvcm1zLgogICAg
ICAgICBGbG9hdFBvaW50IGZpeGVkT2Zmc2V0ID0gcmVuZGVyZXItPnZpZXcoKS0+bG9jYWxUb0Fi
c29sdXRlKEZsb2F0UG9pbnQoKSwgdHJ1ZSk7Ci0gICAgICAgIG1fb2Zmc2V0ID0gSW50U2l6ZShm
aXhlZE9mZnNldC54KCksIGZpeGVkT2Zmc2V0LnkoKSkgKyBvZmZzZXQ7CisgICAgICAgIG1fcGFp
bnRPZmZzZXQgPSBJbnRTaXplKGZpeGVkT2Zmc2V0LngoKSwgZml4ZWRPZmZzZXQueSgpKSArIG9m
ZnNldDsKICAgICB9IGVsc2UKLSAgICAgICAgbV9vZmZzZXQgPSBwcmV2LT5tX29mZnNldCArIG9m
ZnNldDsKKyAgICAgICAgbV9wYWludE9mZnNldCA9IHByZXYtPm1fcGFpbnRPZmZzZXQgKyBvZmZz
ZXQ7CiAKLSAgICBpZiAocmVuZGVyZXItPmlzUmVsUG9zaXRpb25lZCgpKSB7Ci0gICAgICAgIGlm
IChyZW5kZXJlci0+aGFzTGF5ZXIoKSkKLSAgICAgICAgICAgIG1fb2Zmc2V0ICs9IHJlbmRlcmVy
LT5sYXllcigpLT5yZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0KCk7Ci0gICAgfSBlbHNlIGlmIChyZW5k
ZXJlci0+aXNQb3NpdGlvbmVkKCkgJiYgIWZpeGVkKSB7CisgICAgaWYgKHJlbmRlcmVyLT5pc1Bv
c2l0aW9uZWQoKSAmJiAhZml4ZWQpIHsKICAgICAgICAgaWYgKFJlbmRlck9iamVjdCogY29udGFp
bmVyID0gcmVuZGVyZXItPmNvbnRhaW5lcigpKSB7CiAgICAgICAgICAgICBpZiAoY29udGFpbmVy
LT5pc1JlbFBvc2l0aW9uZWQoKSAmJiBjb250YWluZXItPmlzUmVuZGVySW5saW5lKCkpCi0gICAg
ICAgICAgICAgICAgbV9vZmZzZXQgKz0gdG9SZW5kZXJJbmxpbmUoY29udGFpbmVyKS0+cmVsYXRp
dmVQb3NpdGlvbmVkSW5saW5lT2Zmc2V0KHJlbmRlcmVyKTsKKyAgICAgICAgICAgICAgICBtX3Bh
aW50T2Zmc2V0ICs9IHRvUmVuZGVySW5saW5lKGNvbnRhaW5lciktPnJlbGF0aXZlUG9zaXRpb25l
ZElubGluZU9mZnNldChyZW5kZXJlcik7CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBtX2xheW91
dE9mZnNldCA9IG1fcGFpbnRPZmZzZXQ7CisKKyAgICBpZiAocmVuZGVyZXItPmlzUmVsUG9zaXRp
b25lZCgpICYmIHJlbmRlcmVyLT5oYXNMYXllcigpKQorICAgICAgICBtX3BhaW50T2Zmc2V0ICs9
IHJlbmRlcmVyLT5sYXllcigpLT5yZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0KCk7CisKICAgICBtX2Ns
aXBwZWQgPSAhZml4ZWQgJiYgcHJldi0+bV9jbGlwcGVkOwogICAgIGlmIChtX2NsaXBwZWQpCiAg
ICAgICAgIG1fY2xpcFJlY3QgPSBwcmV2LT5tX2NsaXBSZWN0OwogCiAgICAgaWYgKHJlbmRlcmVy
LT5oYXNPdmVyZmxvd0NsaXAoKSkgewogICAgICAgICBSZW5kZXJMYXllciogbGF5ZXIgPSByZW5k
ZXJlci0+bGF5ZXIoKTsKLSAgICAgICAgSW50UmVjdCBjbGlwUmVjdCh0b1BvaW50KG1fb2Zmc2V0
KSArIHJlbmRlcmVyLT52aWV3KCktPmxheW91dERlbHRhKCksIGxheWVyLT5zaXplKCkpOworICAg
ICAgICBJbnRSZWN0IGNsaXBSZWN0KHRvUG9pbnQobV9wYWludE9mZnNldCkgKyByZW5kZXJlci0+
dmlldygpLT5sYXlvdXREZWx0YSgpLCBsYXllci0+c2l6ZSgpKTsKICAgICAgICAgaWYgKG1fY2xp
cHBlZCkKICAgICAgICAgICAgIG1fY2xpcFJlY3QuaW50ZXJzZWN0KGNsaXBSZWN0KTsKICAgICAg
ICAgZWxzZSB7CiAgICAgICAgICAgICBtX2NsaXBSZWN0ID0gY2xpcFJlY3Q7CiAgICAgICAgICAg
ICBtX2NsaXBwZWQgPSB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIG1fb2Zmc2V0IC09IGxheWVy
LT5zY3JvbGxlZENvbnRlbnRPZmZzZXQoKTsKKworICAgICAgICBtX3BhaW50T2Zmc2V0IC09IGxh
eWVyLT5zY3JvbGxlZENvbnRlbnRPZmZzZXQoKTsKICAgICB9CiAKLSAgICBtX2xheW91dERlbHRh
ID0gbV9uZXh0LT5tX2xheW91dERlbHRhOworICAgIC8vIERpc2FibGUgcGFnaW5hdGlvbiBmb3Ig
b2JqZWN0cyB3ZSBkb24ndCBzdXBwb3J0LiAgRm9yIG5vdyB0aGlzIGluY2x1ZGVzIG92ZXJmbG93
OnNjcm9sbC9hdXRvIGFuZCBpbmxpbmUgYmxvY2tzLgorICAgIGlmIChyZW5kZXJlci0+aXNSZXBs
YWNlZCgpIHx8IHJlbmRlcmVyLT5zY3JvbGxzT3ZlcmZsb3coKSkKKyAgICAgICAgbV9wYWdlSGVp
Z2h0ID0gMDsKKworICAgIC8vIElmIHdlIGVzdGFibGlzaCBhIG5ldyBwYWdlIGhlaWdodCwgdGhl
biBjYWNoZSB0aGUgb2Zmc2V0IHRvIHRoZSB0b3Agb2YgdGhlIGZpcnN0IHBhZ2UuCisgICAgLy8g
V2UgY2FuIGNvbXBhcmUgdGhpcyBsYXRlciBvbiB0byBmaWd1cmUgb3V0IHdoYXQgcGFydCBvZiB0
aGUgcGFnZSB3ZSdyZSBhY3R1YWxseSBvbiwKKyAgICBpZiAocGFnZUhlaWdodCkgeworICAgICAg
ICBtX3BhZ2VIZWlnaHQgPSBwYWdlSGVpZ2h0OworICAgICAgICBtX3BhZ2VPZmZzZXQgPSBJbnRT
aXplKG1fcGFpbnRPZmZzZXQud2lkdGgoKSArIHJlbmRlcmVyLT5ib3JkZXJMZWZ0KCkgKyByZW5k
ZXJlci0+cGFkZGluZ0xlZnQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3Bh
aW50T2Zmc2V0LmhlaWdodCgpICsgcmVuZGVyZXItPmJvcmRlclRvcCgpICsgcmVuZGVyZXItPnBh
ZGRpbmdUb3AoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gSWYgd2UgZG9uJ3QgZXN0YWJs
aXNoIGEgbmV3IHBhZ2UgaGVpZ2h0LCB0aGVuIHByb3BhZ2F0ZSB0aGUgb2xkIHBhZ2UgaGVpZ2h0
IGFuZCBvZmZzZXQgZG93bi4KKyAgICAgICAgbV9wYWdlSGVpZ2h0ID0gbV9uZXh0LT5tX3BhZ2VI
ZWlnaHQ7CisgICAgICAgIG1fcGFnZU9mZnNldCA9IG1fbmV4dC0+bV9wYWdlT2Zmc2V0OworICAg
IH0KKyAgICAKKyAgICBpZiAoIW1fY29sdW1uSW5mbykKKyAgICAgICAgbV9jb2x1bW5JbmZvID0g
bV9uZXh0LT5tX2NvbHVtbkluZm87CiAKKyAgICBtX2xheW91dERlbHRhID0gbV9uZXh0LT5tX2xh
eW91dERlbHRhOworICAgIAogICAgIC8vIEZJWE1FOiA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTM0NDM+IEFwcGx5IGNvbnRyb2wgY2xpcCBpZiBwcmVzZW50LgogfQog
CiBMYXlvdXRTdGF0ZTo6TGF5b3V0U3RhdGUoUmVuZGVyT2JqZWN0KiByb290KQogICAgIDogbV9j
bGlwcGVkKGZhbHNlKQorICAgICwgbV9wYWdlSGVpZ2h0KDApCisgICAgLCBtX2NvbHVtbkluZm8o
MCkKICAgICAsIG1fbmV4dCgwKQogI2lmbmRlZiBOREVCVUcKICAgICAsIG1fcmVuZGVyZXIocm9v
dCkKQEAgLTg5LDEzICsxMTQsMTMgQEAgTGF5b3V0U3RhdGU6OkxheW91dFN0YXRlKFJlbmRlck9i
amVjdCogcgogewogICAgIFJlbmRlck9iamVjdCogY29udGFpbmVyID0gcm9vdC0+Y29udGFpbmVy
KCk7CiAgICAgRmxvYXRQb2ludCBhYnNDb250ZW50UG9pbnQgPSBjb250YWluZXItPmxvY2FsVG9B
YnNvbHV0ZShGbG9hdFBvaW50KCksIGZhbHNlLCB0cnVlKTsKLSAgICBtX29mZnNldCA9IEludFNp
emUoYWJzQ29udGVudFBvaW50LngoKSwgYWJzQ29udGVudFBvaW50LnkoKSk7CisgICAgbV9wYWlu
dE9mZnNldCA9IEludFNpemUoYWJzQ29udGVudFBvaW50LngoKSwgYWJzQ29udGVudFBvaW50Lnko
KSk7CiAKICAgICBpZiAoY29udGFpbmVyLT5oYXNPdmVyZmxvd0NsaXAoKSkgewogICAgICAgICBS
ZW5kZXJMYXllciogbGF5ZXIgPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KGNvbnRhaW5lciktPmxh
eWVyKCk7CiAgICAgICAgIG1fY2xpcHBlZCA9IHRydWU7Ci0gICAgICAgIG1fY2xpcFJlY3QgPSBJ
bnRSZWN0KHRvUG9pbnQobV9vZmZzZXQpLCBsYXllci0+c2l6ZSgpKTsKLSAgICAgICAgbV9vZmZz
ZXQgLT0gbGF5ZXItPnNjcm9sbGVkQ29udGVudE9mZnNldCgpOworICAgICAgICBtX2NsaXBSZWN0
ID0gSW50UmVjdCh0b1BvaW50KG1fcGFpbnRPZmZzZXQpLCBsYXllci0+c2l6ZSgpKTsKKyAgICAg
ICAgbV9wYWludE9mZnNldCAtPSBsYXllci0+c2Nyb2xsZWRDb250ZW50T2Zmc2V0KCk7CiAgICAg
fQogfQogCkBAIC0xMjYsNCArMTUxLDE5IEBAIHZvaWQgTGF5b3V0U3RhdGU6Om9wZXJhdG9yIGRl
bGV0ZSh2b2lkKiAKICAgICAqKHNpemVfdCopcHRyID0gc3o7CiB9CiAKK3ZvaWQgTGF5b3V0U3Rh
dGU6OmNsZWFyUGFnaW5hdGlvbkluZm9ybWF0aW9uKCkKK3sKKyAgICBtX3BhZ2VIZWlnaHQgPSBt
X25leHQtPm1fcGFnZUhlaWdodDsKKyAgICBtX3BhZ2VPZmZzZXQgPSBtX25leHQtPm1fcGFnZU9m
ZnNldDsKKyAgICBtX2NvbHVtbkluZm8gPSBtX25leHQtPm1fY29sdW1uSW5mbzsKK30KKworaW50
IExheW91dFN0YXRlOjpwYWdlWShpbnQgY2hpbGRZKSBjb25zdAoreworICAgIEFTU0VSVChtX3Bh
Z2VIZWlnaHQpOworICAgIGludCBsYXlvdXRZID0gbV9sYXlvdXRPZmZzZXQuaGVpZ2h0KCkgKyBj
aGlsZFk7CisgICAgaW50IHBhZ2VZID0gbV9wYWdlT2Zmc2V0LmhlaWdodCgpOworICAgIHJldHVy
biBsYXlvdXRZIC0gcGFnZVk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdl
YkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5k
ZXJpbmcvTGF5b3V0U3RhdGUuaAkocmV2aXNpb24gNjY4ODYpCisrKyBXZWJDb3JlL3JlbmRlcmlu
Zy9MYXlvdXRTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ29sdW1uSW5mbzsKIGNsYXNzIFJlbmRlckFyZW5hOwog
Y2xhc3MgUmVuZGVyQm94OwogY2xhc3MgUmVuZGVyT2JqZWN0OwpAQCAtNDAsNiArNDEsOCBAQCBj
bGFzcyBMYXlvdXRTdGF0ZSA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiBwdWJsaWM6CiAgICAgTGF5
b3V0U3RhdGUoKQogICAgICAgICA6IG1fY2xpcHBlZChmYWxzZSkKKyAgICAgICAgLCBtX3BhZ2VI
ZWlnaHQoMCkKKyAgICAgICAgLCBtX2NvbHVtbkluZm8oMCkKICAgICAgICAgLCBtX25leHQoMCkK
ICNpZm5kZWYgTkRFQlVHCiAgICAgICAgICwgbV9yZW5kZXJlcigwKQpAQCAtNDcsNyArNTAsNyBA
QCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIExheW91dFN0YXRlKExheW91dFN0YXRlKiwg
UmVuZGVyQm94KiwgY29uc3QgSW50U2l6ZSYgb2Zmc2V0KTsKKyAgICBMYXlvdXRTdGF0ZShMYXlv
dXRTdGF0ZSosIFJlbmRlckJveCosIGNvbnN0IEludFNpemUmIG9mZnNldCwgaW50IHBhZ2VIZWln
aHQsIENvbHVtbkluZm8qKTsKICAgICBMYXlvdXRTdGF0ZShSZW5kZXJPYmplY3QqKTsKIAogICAg
IHZvaWQgZGVzdHJveShSZW5kZXJBcmVuYSopOwpAQCAtNTgsNiArNjEsMTEgQEAgcHVibGljOgog
ICAgIC8vIE92ZXJyaWRkZW4gdG8gcHJldmVudCB0aGUgbm9ybWFsIGRlbGV0ZSBmcm9tIGJlaW5n
IGNhbGxlZC4KICAgICB2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkKiwgc2l6ZV90KTsKIAorICAg
IHZvaWQgY2xlYXJQYWdpbmF0aW9uSW5mb3JtYXRpb24oKTsKKyAgICBib29sIHBhZ2luYXRpbmdD
b2x1bW5zKCkgY29uc3QgeyByZXR1cm4gbV9jb2x1bW5JbmZvOyB9CisgICAgYm9vbCBwYWdpbmF0
ZWQoKSBjb25zdCB7IHJldHVybiBtX3BhZ2VIZWlnaHQgfHwgbV9jb2x1bW5JbmZvOyB9CisgICAg
aW50IHBhZ2VZKGludCBjaGlsZFkpIGNvbnN0OworCiBwcml2YXRlOgogICAgIC8vIFRoZSBub3Jt
YWwgb3BlcmF0b3IgbmV3IGlzIGRpc2FsbG93ZWQuCiAgICAgdm9pZCogb3BlcmF0b3IgbmV3KHNp
emVfdCkgdGhyb3coKTsKQEAgLTY1LDEwICs3MywxNiBAQCBwcml2YXRlOgogcHVibGljOgogICAg
IGJvb2wgbV9jbGlwcGVkOwogICAgIEludFJlY3QgbV9jbGlwUmVjdDsKLSAgICBJbnRTaXplIG1f
b2Zmc2V0OyAgICAgICAvLyB4L3kgb2Zmc2V0IGZyb20gY29udGFpbmVyLgorICAgIEludFNpemUg
bV9wYWludE9mZnNldDsgICAgICAgLy8geC95IG9mZnNldCBmcm9tIGNvbnRhaW5lci4gIEluY2x1
ZGVzIHJlbGF0aXZlIHBvc2l0aW9uaW5nIGFuZCBzY3JvbGwgb2Zmc2V0cy4KKyAgICBJbnRTaXpl
IG1fbGF5b3V0T2Zmc2V0OyAgICAgIC8vIHgveSBvZmZzZXQgZnJvbSBjb250YWluZXIuICBEb2Vz
IG5vdCBpbmNsdWRlIHJlbGF0aXZlIHBvc2l0aW9uaW5nIG9yIHNjcm9sbCBvZmZzZXRzLgogICAg
IEludFNpemUgbV9sYXlvdXREZWx0YTsgIC8vIFRyYW5zaWVudCBvZmZzZXQgZnJvbSB0aGUgZmlu
YWwgcG9zaXRpb24gb2YgdGhlIG9iamVjdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IHVzZWQgdG8gZW5zdXJlIHRoYXQgcmVwYWludHMgaGFwcGVuIGluIHRoZSBjb3JyZWN0IHBsYWNl
LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSB0b3RhbCBkZWx0YSBh
Y2N1bXVsYXRlZCBmcm9tIHRoZSByb290LgorCisgICAgaW50IG1fcGFnZUhlaWdodDsgICAgICAg
ICAgICAvLyBUaGUgY3VycmVudCBwYWdlIGhlaWdodCBmb3IgdGhlIHBhZ2luYXRpb24gbW9kZWwg
dGhhdCBlbmNsb3NlcyB1cy4KKyAgICBJbnRTaXplIG1fcGFnZU9mZnNldDsgICAgICAgIC8vIFRo
ZSBvZmZzZXQgb2YgdGhlIHN0YXJ0IG9mIHRoZSBmaXJzdCBwYWdlIGluIHRoZSBuZWFyZXN0IGVu
Y2xvc2luZyBwYWdpbmF0aW9uIG1vZGVsLgorICAgIENvbHVtbkluZm8qIG1fY29sdW1uSW5mbzsg
ICAgLy8gSWYgdGhlIGVuY2xvc2luZyBwYWdpbmF0aW9uIG1vZGVsIGlzIGEgY29sdW1uIG1vZGVs
LCB0aGVuIHRoaXMgd2lsbCBzdG9yZSBjb2x1bW4gaW5mb3JtYXRpb24gZm9yIGVhc3kgcmV0cmll
dmFsL21hbmlwdWxhdGlvbi4KKwogICAgIExheW91dFN0YXRlKiBtX25leHQ7CiAjaWZuZGVmIE5E
RUJVRwogICAgIFJlbmRlck9iamVjdCogbV9yZW5kZXJlcjsKSW5kZXg6IFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9jay5jcHAJKHJldmlzaW9uIDY2OTAzKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsNyArMTE0LDcgQEAgUmVuZGVyQmxvY2s6
OlJlbmRlckJsb2NrKE5vZGUqIG5vZGUpCiAgICAgICAsIG1fZmxvYXRpbmdPYmplY3RzKDApCiAg
ICAgICAsIG1fcG9zaXRpb25lZE9iamVjdHMoMCkKICAgICAgICwgbV9jb250aW51YXRpb24oMCkK
LSAgICAgICwgbV9tYXhNYXJnaW4oMCkKKyAgICAgICwgbV9yYXJlRGF0YSgwKQogICAgICAgLCBt
X2xpbmVIZWlnaHQoLTEpCiB7CiAgICAgc2V0Q2hpbGRyZW5JbmxpbmUodHJ1ZSk7CkBAIC0xMjQs
NyArMTI0LDcgQEAgUmVuZGVyQmxvY2s6On5SZW5kZXJCbG9jaygpCiB7CiAgICAgZGVsZXRlIG1f
ZmxvYXRpbmdPYmplY3RzOwogICAgIGRlbGV0ZSBtX3Bvc2l0aW9uZWRPYmplY3RzOwotICAgIGRl
bGV0ZSBtX21heE1hcmdpbjsKKyAgICBkZWxldGUgbV9yYXJlRGF0YTsKICAgICAKICAgICBpZiAo
aGFzQ29sdW1ucygpKQogICAgICAgICBkZWxldGUgZ0NvbHVtbkluZm9NYXAtPnRha2UodGhpcyk7
CkBAIC0xMTEyLDcgKzExMTIsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXQoKQogICAgICAg
ICBjbGVhckxheW91dE92ZXJmbG93KCk7CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJs
b2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbikKK3ZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2Nr
KGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgaW50IHBhZ2VIZWlnaHQpCiB7CiAgICAgQVNTRVJUKG5l
ZWRzTGF5b3V0KCkpOwogCkBAIC0xMTIyLDkgKzExMjIsNiBAQCB2b2lkIFJlbmRlckJsb2NrOjps
YXlvdXRCbG9jayhib29sIHJlbGF5CiAgICAgaWYgKCFyZWxheW91dENoaWxkcmVuICYmIGxheW91
dE9ubHlQb3NpdGlvbmVkT2JqZWN0cygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBMYXlvdXRS
ZXBhaW50ZXIgcmVwYWludGVyKCp0aGlzLCBtX2V2ZXJIYWRMYXlvdXQgJiYgY2hlY2tGb3JSZXBh
aW50RHVyaW5nTGF5b3V0KCkpOwotICAgIExheW91dFN0YXRlTWFpbnRhaW5lciBzdGF0ZVB1c2hl
cih2aWV3KCksIHRoaXMsIEludFNpemUoeCgpLCB5KCkpLCBoYXNDb2x1bW5zKCkgfHwgaGFzVHJh
bnNmb3JtKCkgfHwgaGFzUmVmbGVjdGlvbigpKTsKLQogICAgIGludCBvbGRXaWR0aCA9IHdpZHRo
KCk7CiAgICAgaW50IG9sZENvbHVtbldpZHRoID0gZGVzaXJlZENvbHVtbldpZHRoKCk7CiAKQEAg
LTExNDAsNiArMTEzNywyOCBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayhib29sIHJl
bGF5CiAKICAgICBpbnQgcHJldmlvdXNIZWlnaHQgPSBoZWlnaHQoKTsKICAgICBzZXRIZWlnaHQo
MCk7CisgICAgYm9vbCBoYXNTcGVjaWZpZWRQYWdlSGVpZ2h0ID0gZmFsc2U7CisgICAgQ29sdW1u
SW5mbyogY29sSW5mbyA9IGNvbHVtbkluZm8oKTsKKyAgICBpZiAoaGFzQ29sdW1ucygpKSB7Cisg
ICAgICAgIGlmICghcGFnZUhlaWdodCkgeworICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBnbyBh
aGVhZCBhbmQgc2V0IG91ciBleHBsaWNpdCBwYWdlIGhlaWdodCBpZiBvbmUgZXhpc3RzLCBzbyB0
aGF0IHdlIGNhbgorICAgICAgICAgICAgLy8gYXZvaWQgZG9pbmcgdHdvIGxheW91dCBwYXNzZXMu
CisgICAgICAgICAgICBjYWxjSGVpZ2h0KCk7CisgICAgICAgICAgICBpbnQgY29sdW1uSGVpZ2h0
ID0gY29udGVudEhlaWdodCgpOworICAgICAgICAgICAgaWYgKGNvbHVtbkhlaWdodCA+IDApIHsK
KyAgICAgICAgICAgICAgICBwYWdlSGVpZ2h0ID0gY29sdW1uSGVpZ2h0OworICAgICAgICAgICAg
ICAgIGhhc1NwZWNpZmllZFBhZ2VIZWlnaHQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgc2V0SGVpZ2h0KDApOworICAgICAgICB9CisgICAgICAgIGlmIChjb2xJbmZvLT5jb2x1
bW5IZWlnaHQoKSAhPSBwYWdlSGVpZ2h0ICYmIG1fZXZlckhhZExheW91dCkgeworICAgICAgICAg
ICAgY29sSW5mby0+c2V0Q29sdW1uSGVpZ2h0KHBhZ2VIZWlnaHQpOworICAgICAgICAgICAgbWFy
a0Rlc2NlbmRhbnRCbG9ja3NBbmRMaW5lc0ZvckxheW91dCgpOyAvLyBXZSBuZWVkIHRvIGRpcnR5
IGFsbCBkZXNjZW5kYW50IGJsb2NrcyBhbmQgbGluZXMsIHNpbmNlIHRoZSBjb2x1bW4gaGVpZ2h0
IGlzIGRpZmZlcmVudCBub3cuCisgICAgICAgIH0KKyAgICB9CisKKyAgICBMYXlvdXRSZXBhaW50
ZXIgcmVwYWludGVyKCp0aGlzLCBtX2V2ZXJIYWRMYXlvdXQgJiYgY2hlY2tGb3JSZXBhaW50RHVy
aW5nTGF5b3V0KCkpOworICAgIExheW91dFN0YXRlTWFpbnRhaW5lciBzdGF0ZVB1c2hlcih2aWV3
KCksIHRoaXMsIEludFNpemUoeCgpLCB5KCkpLCBoYXNDb2x1bW5zKCkgfHwgaGFzVHJhbnNmb3Jt
KCkgfHwgaGFzUmVmbGVjdGlvbigpLCBwYWdlSGVpZ2h0LCBjb2xJbmZvKTsKIAogICAgIC8vIFdl
IHVzZSBmb3VyIHZhbHVlcywgbWF4VG9wUG9zLCBtYXhUb3BOZWcsIG1heEJvdHRvbVBvcywgYW5k
IG1heEJvdHRvbU5lZywgdG8gdHJhY2sKICAgICAvLyBvdXIgY3VycmVudCBtYXhpbWFsIHBvc2l0
aXZlIGFuZCBuZWdhdGl2ZSBtYXJnaW5zLiAgVGhlc2UgdmFsdWVzIGFyZSB1c2VkIHdoZW4gd2UK
QEAgLTExODksMTAgKzEyMDgsOSBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayhib29s
IHJlbGF5CiAgICAgaWYgKGZsb2F0Qm90dG9tKCkgPiAoaGVpZ2h0KCkgLSB0b0FkZCkgJiYgZXhw
YW5kc1RvRW5jbG9zZU92ZXJoYW5naW5nRmxvYXRzKCkpCiAgICAgICAgIHNldEhlaWdodChmbG9h
dEJvdHRvbSgpICsgdG9BZGQpOwogICAgIAotICAgIC8vIE5vdyBsYXkgb3V0IG91ciBjb2x1bW5z
IHdpdGhpbiB0aGlzIGludHJpbnNpYyBoZWlnaHQsIHNpbmNlIHRoZXkgY2FuIHNsaWdodGx5IGFm
ZmVjdCB0aGUgaW50cmluc2ljIGhlaWdodCBhcwotICAgIC8vIHdlIGFkanVzdCBmb3IgY2xlYW4g
Y29sdW1uIGJyZWFrcy4KLSAgICBpbnQgc2luZ2xlQ29sdW1uQm90dG9tID0gbGF5b3V0Q29sdW1u
cygpOwotCisgICAgaWYgKGxheW91dENvbHVtbnMoaGFzU3BlY2lmaWVkUGFnZUhlaWdodCwgcGFn
ZUhlaWdodCwgc3RhdGVQdXNoZXIpKQorICAgICAgICByZXR1cm47CisgCiAgICAgLy8gQ2FsY3Vs
YXRlIG91ciBuZXcgaGVpZ2h0LgogICAgIGludCBvbGRIZWlnaHQgPSBoZWlnaHQoKTsKICAgICBj
YWxjSGVpZ2h0KCk7CkBAIC0xMjA3LDIxICsxMjI1LDE4IEBAIHZvaWQgUmVuZGVyQmxvY2s6Omxh
eW91dEJsb2NrKGJvb2wgcmVsYXkKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIFdlIGhhdmUgdG8gcmViYWxhbmNlIGNvbHVt
bnMgdG8gdGhlIG5ldyBoZWlnaHQuCi0gICAgICAgIGxheW91dENvbHVtbnMoc2luZ2xlQ29sdW1u
Qm90dG9tKTsKICAgICB9CiAKICAgICBpZiAocHJldmlvdXNIZWlnaHQgIT0gaGVpZ2h0KCkpCiAg
ICAgICAgIHJlbGF5b3V0Q2hpbGRyZW4gPSB0cnVlOwogCi0gICAgLy8gVGhpcyBjaGVjayBpcyBk
ZXNpZ25lZCB0byBjYXRjaCBhbnlvbmUKLSAgICAvLyB3aG8gd2Fzbid0IGdvaW5nIHRvIHByb3Bh
Z2F0ZSBmbG9hdCBpbmZvcm1hdGlvbiB1cCB0byB0aGUgcGFyZW50IGFuZCB5ZXQgY291bGQgcG90
ZW50aWFsbHkgYmUgcGFpbnRlZCBieSBpdHMgYW5jZXN0b3IuCi0gICAgaWYgKGlzUm9vdCgpIHx8
IGV4cGFuZHNUb0VuY2xvc2VPdmVyaGFuZ2luZ0Zsb2F0cygpKQotICAgICAgICBhZGRPdmVyZmxv
d0Zyb21GbG9hdHMoKTsKLQogICAgIC8vIEFkZCBvdmVyZmxvdyBmcm9tIGNoaWxkcmVuICh1bmxl
c3Mgd2UncmUgbXVsdGktY29sdW1uLCBzaW5jZSBpbiB0aGF0IGNhc2UgYWxsIG91ciBjaGlsZCBv
dmVyZmxvdyBpcyBjbGlwcGVkIGFueXdheSkuCiAgICAgaWYgKCFoYXNDb2x1bW5zKCkpIHsKKyAg
ICAgICAgLy8gVGhpcyBjaGVjayBpcyBkZXNpZ25lZCB0byBjYXRjaCBhbnlvbmUKKyAgICAgICAg
Ly8gd2hvIHdhc24ndCBnb2luZyB0byBwcm9wYWdhdGUgZmxvYXQgaW5mb3JtYXRpb24gdXAgdG8g
dGhlIHBhcmVudCBhbmQgeWV0IGNvdWxkIHBvdGVudGlhbGx5IGJlIHBhaW50ZWQgYnkgaXRzIGFu
Y2VzdG9yLgorICAgICAgICBpZiAoaXNSb290KCkgfHwgZXhwYW5kc1RvRW5jbG9zZU92ZXJoYW5n
aW5nRmxvYXRzKCkpCisgICAgICAgICAgICBhZGRPdmVyZmxvd0Zyb21GbG9hdHMoKTsKKwogICAg
ICAgICBpZiAoY2hpbGRyZW5JbmxpbmUoKSkKICAgICAgICAgICAgIGFkZE92ZXJmbG93RnJvbUlu
bGluZUNoaWxkcmVuKCk7CiAgICAgICAgIGVsc2UKQEAgLTEyMzcsNiArMTI1Miw5IEBAIHZvaWQg
UmVuZGVyQmxvY2s6OmxheW91dEJsb2NrKGJvb2wgcmVsYXkKICAgICAKICAgICBzdGF0ZVB1c2hl
ci5wb3AoKTsKIAorICAgIGlmICh2aWV3KCktPmxheW91dFN0YXRlKCktPm1fcGFnZUhlaWdodCkK
KyAgICAgICAgc2V0UGFnZVkodmlldygpLT5sYXlvdXRTdGF0ZSgpLT5wYWdlWSh5KCkpKTsKKwog
ICAgIC8vIFVwZGF0ZSBvdXIgc2Nyb2xsIGluZm9ybWF0aW9uIGlmIHdlJ3JlIG92ZXJmbG93OmF1
dG8vc2Nyb2xsL2hpZGRlbiBub3cgdGhhdCB3ZSBrbm93IGlmCiAgICAgLy8gd2Ugb3ZlcmZsb3cg
b3Igbm90LgogICAgIHVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgpOwpAQCAtMTQ4NSw3ICsx
NTAzLDggQEAgaW50IFJlbmRlckJsb2NrOjpjb2xsYXBzZU1hcmdpbnMoUmVuZGVyQgogICAgIGlm
IChtYXJnaW5JbmZvLnF1aXJrQ29udGFpbmVyKCkgJiYgbWFyZ2luSW5mby5hdFRvcE9mQmxvY2so
KSAmJiAocG9zVG9wIC0gbmVnVG9wKSkKICAgICAgICAgbWFyZ2luSW5mby5zZXRUb3BRdWlyayh0
b3BRdWlyayk7CiAKLSAgICBpbnQgeXBvcyA9IGhlaWdodCgpOworICAgIGludCBiZWZvcmVDb2xs
YXBzZVkgPSBoZWlnaHQoKTsKKyAgICBpbnQgeXBvcyA9IGJlZm9yZUNvbGxhcHNlWTsKICAgICBp
ZiAoY2hpbGQtPmlzU2VsZkNvbGxhcHNpbmdCbG9jaygpKSB7CiAgICAgICAgIC8vIFRoaXMgY2hp
bGQgaGFzIG5vIGhlaWdodC4gIFdlIG5lZWQgdG8gY29tcHV0ZSBvdXIKICAgICAgICAgLy8gcG9z
aXRpb24gYmVmb3JlIHdlIGNvbGxhcHNlIHRoZSBjaGlsZCdzIG1hcmdpbnMgdG9nZXRoZXIsCkBA
IC0xNTI3LDYgKzE1NDYsMTQgQEAgaW50IFJlbmRlckJsb2NrOjpjb2xsYXBzZU1hcmdpbnMoUmVu
ZGVyQgogICAgICAgICAgICAgbWFyZ2luSW5mby5zZXRCb3R0b21RdWlyayhjaGlsZC0+aXNCb3R0
b21NYXJnaW5RdWlyaygpIHx8IHN0eWxlKCktPm1hcmdpbkJvdHRvbUNvbGxhcHNlKCkgPT0gTURJ
U0NBUkQpOwogICAgIH0KICAgICAKKyAgICAvLyBJZiBtYXJnaW5zIHdvdWxkIHB1bGwgdXMgcGFz
dCB0aGUgdG9wIG9mIHRoZSBuZXh0IHBhZ2UsIHRoZW4gd2UgbmVlZCB0byBwdWxsIGJhY2sgYW5k
IHByZXRlbmQgbGlrZSB0aGUgbWFyZ2lucworICAgIC8vIGNvbGxhcHNlZCBpbnRvIHRoZSBwYWdl
IGVkZ2UuCisgICAgYm9vbCBwYWdpbmF0ZWQgPSB2aWV3KCktPmxheW91dFN0YXRlKCktPnBhZ2lu
YXRlZCgpOworICAgIGlmIChwYWdpbmF0ZWQgJiYgeXBvcyA+IGJlZm9yZUNvbGxhcHNlWSkgewor
ICAgICAgICBpbnQgb2xkWSA9IHlwb3M7CisgICAgICAgIHlwb3MgPSBtaW4oeXBvcywgbmV4dFBh
Z2VUb3AoYmVmb3JlQ29sbGFwc2VZKSk7CisgICAgICAgIHNldEhlaWdodChoZWlnaHQoKSArICh5
cG9zIC0gb2xkWSkpOworICAgIH0KICAgICByZXR1cm4geXBvczsKIH0KIApAQCAtMTU4Niw3ICsx
NjEzLDI0IEBAIGludCBSZW5kZXJCbG9jazo6ZXN0aW1hdGVWZXJ0aWNhbFBvc2l0aW8KICAgICAg
ICAgaW50IGNoaWxkTWFyZ2luVG9wID0gY2hpbGQtPnNlbGZOZWVkc0xheW91dCgpID8gY2hpbGQt
Pm1hcmdpblRvcCgpIDogY2hpbGQtPmNvbGxhcHNlZE1hcmdpblRvcCgpOwogICAgICAgICB5UG9z
RXN0aW1hdGUgKz0gbWF4KG1hcmdpbkluZm8ubWFyZ2luKCksIGNoaWxkTWFyZ2luVG9wKTsKICAg
ICB9CisgICAgCisgICAgYm9vbCBwYWdpbmF0ZWQgPSB2aWV3KCktPmxheW91dFN0YXRlKCktPnBh
Z2luYXRlZCgpOworCisgICAgLy8gQWRqdXN0IHlQb3NFc3RpbWF0ZSBkb3duIHRvIHRoZSBuZXh0
IHBhZ2UgaWYgdGhlIG1hcmdpbnMgYXJlIHNvIGxhcmdlIHRoYXQgd2UgZG9uJ3QgZml0IG9uIHRo
ZSBjdXJyZW50CisgICAgLy8gcGFnZS4KKyAgICBpZiAocGFnaW5hdGVkICYmIHlQb3NFc3RpbWF0
ZSA+IGhlaWdodCgpKQorICAgICAgICB5UG9zRXN0aW1hdGUgPSBtaW4oeVBvc0VzdGltYXRlLCBu
ZXh0UGFnZVRvcChoZWlnaHQoKSkpOworCiAgICAgeVBvc0VzdGltYXRlICs9IGdldENsZWFyRGVs
dGEoY2hpbGQsIHlQb3NFc3RpbWF0ZSk7CisgICAgCisgICAgaWYgKHBhZ2luYXRlZCkgeworICAg
ICAgICAvLyBJZiB0aGUgb2JqZWN0IGhhcyBhIHBhZ2Ugb3IgY29sdW1uIGJyZWFrIHZhbHVlIG9m
ICJiZWZvcmUiLCB0aGVuIHdlIHNob3VsZCBzaGlmdCB0byB0aGUgdG9wIG9mIHRoZSBuZXh0IHBh
Z2UuCisgICAgICAgIHlQb3NFc3RpbWF0ZSA9IGFwcGx5QmVmb3JlQnJlYWsoY2hpbGQsIHlQb3NF
c3RpbWF0ZSk7CisgICAgCisgICAgICAgIC8vIEZvciByZXBsYWNlZCBlbGVtZW50cyBhbmQgc2Ny
b2xsZWQgZWxlbWVudHMsIHdlIHdhbnQgdG8gc2hpZnQgdGhlbSB0byB0aGUgbmV4dCBwYWdlIGlm
IHRoZXkgZG9uJ3QgZml0IG9uIHRoZSBjdXJyZW50IG9uZS4KKyAgICAgICAgeVBvc0VzdGltYXRl
ID0gYWRqdXN0Rm9yVW5zcGxpdHRhYmxlQ2hpbGQoY2hpbGQsIHlQb3NFc3RpbWF0ZSk7CisgICAg
fQorCiAgICAgcmV0dXJuIHlQb3NFc3RpbWF0ZTsKIH0KIApAQCAtMTc3Niw4ICsxODIwLDkgQEAg
dm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2tDaGlsZChSZW5kZQogICAgIHZpZXcoKS0+YWRk
TGF5b3V0RGVsdGEoSW50U2l6ZSgwLCBjaGlsZC0+eSgpIC0geVBvc0VzdGltYXRlKSk7CiAgICAg
Y2hpbGQtPnNldExvY2F0aW9uKGNoaWxkLT54KCksIHlQb3NFc3RpbWF0ZSk7CiAKKyAgICBSZW5k
ZXJCbG9jayogY2hpbGRSZW5kZXJCbG9jayA9IGNoaWxkLT5pc1JlbmRlckJsb2NrKCkgPyB0b1Jl
bmRlckJsb2NrKGNoaWxkKSA6IDA7CiAgICAgYm9vbCBtYXJrRGVzY2VuZGFudHNXaXRoRmxvYXRz
ID0gZmFsc2U7Ci0gICAgaWYgKHlQb3NFc3RpbWF0ZSAhPSBvbGRSZWN0LnkoKSAmJiAhY2hpbGQt
PmF2b2lkc0Zsb2F0cygpICYmIGNoaWxkLT5pc0Jsb2NrRmxvdygpICYmIHRvUmVuZGVyQmxvY2so
Y2hpbGQpLT5jb250YWluc0Zsb2F0cygpKQorICAgIGlmICh5UG9zRXN0aW1hdGUgIT0gb2xkUmVj
dC55KCkgJiYgIWNoaWxkLT5hdm9pZHNGbG9hdHMoKSAmJiBjaGlsZFJlbmRlckJsb2NrICYmIGNo
aWxkUmVuZGVyQmxvY2stPmNvbnRhaW5zRmxvYXRzKCkpCiAgICAgICAgIG1hcmtEZXNjZW5kYW50
c1dpdGhGbG9hdHMgPSB0cnVlOwogICAgIGVsc2UgaWYgKCFjaGlsZC0+YXZvaWRzRmxvYXRzKCkg
fHwgY2hpbGQtPnNocmlua1RvQXZvaWRGbG9hdHMoKSkgewogICAgICAgICAvLyBJZiBhbiBlbGVt
ZW50IG1pZ2h0IGJlIGFmZmVjdGVkIGJ5IHRoZSBwcmVzZW5jZSBvZiBmbG9hdHMsIHRoZW4gYWx3
YXlzIG1hcmsgaXQgZm9yCkBAIC0xNzg3LDE4ICsxODMyLDI1IEBAIHZvaWQgUmVuZGVyQmxvY2s6
OmxheW91dEJsb2NrQ2hpbGQoUmVuZGUKICAgICAgICAgICAgIG1hcmtEZXNjZW5kYW50c1dpdGhG
bG9hdHMgPSB0cnVlOwogICAgIH0KIAotICAgIGlmIChjaGlsZC0+aXNSZW5kZXJCbG9jaygpKSB7
CisgICAgaWYgKGNoaWxkUmVuZGVyQmxvY2spIHsKICAgICAgICAgaWYgKG1hcmtEZXNjZW5kYW50
c1dpdGhGbG9hdHMpCi0gICAgICAgICAgICB0b1JlbmRlckJsb2NrKGNoaWxkKS0+bWFya0FsbERl
c2NlbmRhbnRzV2l0aEZsb2F0c0ZvckxheW91dCgpOwotCisgICAgICAgICAgICBjaGlsZFJlbmRl
ckJsb2NrLT5tYXJrQWxsRGVzY2VuZGFudHNXaXRoRmxvYXRzRm9yTGF5b3V0KCk7CiAgICAgICAg
IHByZXZpb3VzRmxvYXRCb3R0b20gPSBtYXgocHJldmlvdXNGbG9hdEJvdHRvbSwgb2xkUmVjdC55
KCkgKyB0b1JlbmRlckJsb2NrKGNoaWxkKS0+ZmxvYXRCb3R0b20oKSk7CiAgICAgfQogCiAgICAg
Ym9vbCBjaGlsZEhhZExheW91dCA9IGNoaWxkLT5tX2V2ZXJIYWRMYXlvdXQ7CiAgICAgYm9vbCBj
aGlsZE5lZWRlZExheW91dCA9IGNoaWxkLT5uZWVkc0xheW91dCgpOworICAgIAorICAgIGJvb2wg
cGFnaW5hdGVkID0gdmlldygpLT5sYXlvdXRTdGF0ZSgpLT5wYWdpbmF0ZWQoKTsKKyAgICBpZiAo
IWNoaWxkTmVlZGVkTGF5b3V0ICYmIHBhZ2luYXRlZCAmJiB2aWV3KCktPmxheW91dFN0YXRlKCkt
Pm1fcGFnZUhlaWdodCAmJiBjaGlsZFJlbmRlckJsb2NrICYmIHZpZXcoKS0+bGF5b3V0U3RhdGUo
KS0+cGFnZVkoY2hpbGQtPnkoKSkgIT0gY2hpbGRSZW5kZXJCbG9jay0+cGFnZVkoKSkKKyAgICAg
ICAgY2hpbGRSZW5kZXJCbG9jay0+c2V0Q2hpbGROZWVkc0xheW91dCh0cnVlLCBmYWxzZSk7CisK
ICAgICBpZiAoY2hpbGROZWVkZWRMYXlvdXQpCiAgICAgICAgIGNoaWxkLT5sYXlvdXQoKTsKIAor
ICAgIC8vIENhY2hlIGlmIHdlIGFyZSBhdCB0aGUgdG9wIG9mIHRoZSBibG9jayByaWdodCBub3cu
CisgICAgYm9vbCBhdFRvcE9mQmxvY2sgPSBtYXJnaW5JbmZvLmF0VG9wT2ZCbG9jaygpOworCiAg
ICAgLy8gTm93IGRldGVybWluZSB0aGUgY29ycmVjdCB5cG9zIGJhc2VkIG9mZiBleGFtaW5hdGlv
biBvZiBjb2xsYXBzaW5nIG1hcmdpbgogICAgIC8vIHZhbHVlcy4KICAgICBpbnQgeUJlZm9yZUNs
ZWFyID0gY29sbGFwc2VNYXJnaW5zKGNoaWxkLCBtYXJnaW5JbmZvKTsKQEAgLTE4MDYsNiArMTg1
OCwzMiBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9ja0NoaWxkKFJlbmRlCiAgICAgLy8g
Tm93IGNoZWNrIGZvciBjbGVhci4KICAgICBpbnQgeUFmdGVyQ2xlYXIgPSBjbGVhckZsb2F0c0lm
TmVlZGVkKGNoaWxkLCBtYXJnaW5JbmZvLCBvbGRUb3BQb3NNYXJnaW4sIG9sZFRvcE5lZ01hcmdp
biwgeUJlZm9yZUNsZWFyKTsKICAgICAKKyAgICBpZiAocGFnaW5hdGVkKSB7CisgICAgICAgIGlu
dCBvbGRZID0geUFmdGVyQ2xlYXI7CisgICAgICAgIAorICAgICAgICAvLyBJZiB0aGUgb2JqZWN0
IGhhcyBhIHBhZ2Ugb3IgY29sdW1uIGJyZWFrIHZhbHVlIG9mICJiZWZvcmUiLCB0aGVuIHdlIHNo
b3VsZCBzaGlmdCB0byB0aGUgdG9wIG9mIHRoZSBuZXh0IHBhZ2UuCisgICAgICAgIHlBZnRlckNs
ZWFyID0gYXBwbHlCZWZvcmVCcmVhayhjaGlsZCwgeUFmdGVyQ2xlYXIpOworICAgIAorICAgICAg
ICAvLyBGb3IgcmVwbGFjZWQgZWxlbWVudHMgYW5kIHNjcm9sbGVkIGVsZW1lbnRzLCB3ZSB3YW50
IHRvIHNoaWZ0IHRoZW0gdG8gdGhlIG5leHQgcGFnZSBpZiB0aGV5IGRvbid0IGZpdCBvbiB0aGUg
Y3VycmVudCBvbmUuCisgICAgICAgIHlBZnRlckNsZWFyID0gYWRqdXN0Rm9yVW5zcGxpdHRhYmxl
Q2hpbGQoY2hpbGQsIHlBZnRlckNsZWFyKTsKKyAgICAgICAgCisgICAgICAgIGlmIChjaGlsZFJl
bmRlckJsb2NrICYmIGNoaWxkUmVuZGVyQmxvY2stPnBhZ2luYXRpb25TdHJ1dCgpKSB7CisgICAg
ICAgICAgICAvLyBXZSBhcmUgd2lsbGluZyB0byBwcm9wYWdhdGUgb3V0IHRvIG91ciBwYXJlbnQg
YmxvY2sgYXMgbG9uZyBhcyB3ZSB3ZXJlIGF0IHRoZSB0b3Agb2YgdGhlIGJsb2NrIHByaW9yCisg
ICAgICAgICAgICAvLyB0byBjb2xsYXBzaW5nIG91ciBtYXJnaW5zLCBhbmQgYXMgbG9uZyBhcyB3
ZSBkaWRuJ3QgY2xlYXIgb3IgbW92ZSBhcyBhIHJlc3VsdCBvZiBvdGhlciBwYWdpbmF0aW9uLgor
ICAgICAgICAgICAgaWYgKGF0VG9wT2ZCbG9jayAmJiBvbGRZID09IHlCZWZvcmVDbGVhciAmJiAh
aXNQb3NpdGlvbmVkKCkgJiYgIWlzVGFibGVDZWxsKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBG
SVhNRTogU2hvdWxkIHJlYWxseSBjaGVjayBpZiB3ZSdyZSBleGNlZWRpbmcgdGhlIHBhZ2UgaGVp
Z2h0IGJlZm9yZSBwcm9wYWdhdGluZyB0aGUgc3RydXQsIGJ1dCB3ZSBkb24ndAorICAgICAgICAg
ICAgICAgIC8vIGhhdmUgYWxsIHRoZSBpbmZvcm1hdGlvbiB0byBkbyBzbyAodGhlIHN0cnV0IG9u
bHkgaGFzIHRoZSByZW1haW5pbmcgYW1vdW50IHRvIHB1c2gpLiAgR2Vja28gZ2V0cyB0aGlzIHdy
b25nIHRvbworICAgICAgICAgICAgICAgIC8vIGFuZCBwdXNoZXMgdG8gdGhlIG5leHQgcGFnZSBh
bnl3YXksIHNvIG5vdCB0b28gY29uY2VybmVkIGFib3V0IGl0LgorICAgICAgICAgICAgICAgIHNl
dFBhZ2luYXRpb25TdHJ1dCh5QWZ0ZXJDbGVhciArIGNoaWxkUmVuZGVyQmxvY2stPnBhZ2luYXRp
b25TdHJ1dCgpKTsKKyAgICAgICAgICAgICAgICBjaGlsZFJlbmRlckJsb2NrLT5zZXRQYWdpbmF0
aW9uU3RydXQoMCk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICB5QWZ0ZXJD
bGVhciArPSBjaGlsZFJlbmRlckJsb2NrLT5wYWdpbmF0aW9uU3RydXQoKTsKKyAgICAgICAgfQor
CisgICAgICAgIC8vIFNpbWlsYXIgdG8gaG93IHdlIGFwcGx5IGNsZWFyYW5jZS4gIEdvIGFoZWFk
IGFuZCBib29zdCBoZWlnaHQoKSB0byBiZSB0aGUgcGxhY2Ugd2hlcmUgd2UncmUgZ29pbmcgdG8g
cG9zaXRpb24gdGhlIGNoaWxkLgorICAgICAgICBzZXRIZWlnaHQoaGVpZ2h0KCkgKyAoeUFmdGVy
Q2xlYXIgLSBvbGRZKSk7CisgICAgfQorCiAgICAgdmlldygpLT5hZGRMYXlvdXREZWx0YShJbnRT
aXplKDAsIHlQb3NFc3RpbWF0ZSAtIHlBZnRlckNsZWFyKSk7CiAgICAgY2hpbGQtPnNldExvY2F0
aW9uKGNoaWxkLT54KCksIHlBZnRlckNsZWFyKTsKIApAQCAtMTgxOCw4ICsxODk2LDEzIEBAIHZv
aWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrQ2hpbGQoUmVuZGUKICAgICAgICAgICAgIC8vIFNv
IGdvIGFoZWFkIGFuZCBtYXJrIHRoZSBpdGVtIGFzIGRpcnR5LgogICAgICAgICAgICAgY2hpbGQt
PnNldENoaWxkTmVlZHNMYXlvdXQodHJ1ZSwgZmFsc2UpOwogICAgICAgICB9Ci0gICAgICAgIGlm
ICghY2hpbGQtPmF2b2lkc0Zsb2F0cygpICYmIGNoaWxkLT5pc0Jsb2NrRmxvdygpICYmIHRvUmVu
ZGVyQmxvY2soY2hpbGQpLT5jb250YWluc0Zsb2F0cygpKQotICAgICAgICAgICAgdG9SZW5kZXJC
bG9jayhjaGlsZCktPm1hcmtBbGxEZXNjZW5kYW50c1dpdGhGbG9hdHNGb3JMYXlvdXQoKTsKKyAg
ICAgICAgaWYgKGNoaWxkUmVuZGVyQmxvY2spIHsKKyAgICAgICAgICAgIGlmICghY2hpbGQtPmF2
b2lkc0Zsb2F0cygpICYmIGNoaWxkUmVuZGVyQmxvY2stPmNvbnRhaW5zRmxvYXRzKCkpCisgICAg
ICAgICAgICAgICAgY2hpbGRSZW5kZXJCbG9jay0+bWFya0FsbERlc2NlbmRhbnRzV2l0aEZsb2F0
c0ZvckxheW91dCgpOworICAgICAgICAgICAgaWYgKHBhZ2luYXRlZCAmJiAhY2hpbGQtPm5lZWRz
TGF5b3V0KCkgJiYgdmlldygpLT5sYXlvdXRTdGF0ZSgpLT5tX3BhZ2VIZWlnaHQgJiYgdmlldygp
LT5sYXlvdXRTdGF0ZSgpLT5wYWdlWShjaGlsZC0+eSgpKSAhPSBjaGlsZFJlbmRlckJsb2NrLT5w
YWdlWSgpKQorICAgICAgICAgICAgICAgIGNoaWxkLT5zZXRDaGlsZE5lZWRzTGF5b3V0KHRydWUs
IGZhbHNlKTsKKyAgICAgICAgfQorCiAgICAgICAgIC8vIE91ciBndWVzcyB3YXMgd3JvbmcuIE1h
a2UgdGhlIGNoaWxkIGxheSBpdHNlbGYgb3V0IGFnYWluLgogICAgICAgICBjaGlsZC0+bGF5b3V0
SWZOZWVkZWQoKTsKICAgICB9CkBAIC0xODQwLDcgKzE5MjMsNyBAQCB2b2lkIFJlbmRlckJsb2Nr
OjpsYXlvdXRCbG9ja0NoaWxkKFJlbmRlCiAgICAgfQogICAgIC8vIElmIHRoZSBjaGlsZCBoYXMg
b3ZlcmhhbmdpbmcgZmxvYXRzIHRoYXQgaW50cnVkZSBpbnRvIGZvbGxvd2luZyBzaWJsaW5ncyAo
b3IgcG9zc2libHkgb3V0CiAgICAgLy8gb2YgdGhpcyBibG9jayksIHRoZW4gdGhlIHBhcmVudCBn
ZXRzIG5vdGlmaWVkIG9mIHRoZSBmbG9hdHMgbm93LgotICAgIGlmIChjaGlsZC0+aXNCbG9ja0Zs
b3coKSAmJiB0b1JlbmRlckJsb2NrKGNoaWxkKS0+Y29udGFpbnNGbG9hdHMoKSkKKyAgICBpZiAo
Y2hpbGRSZW5kZXJCbG9jayAmJiBjaGlsZFJlbmRlckJsb2NrLT5jb250YWluc0Zsb2F0cygpKQog
ICAgICAgICBtYXhGbG9hdEJvdHRvbSA9IG1heChtYXhGbG9hdEJvdHRvbSwgYWRkT3Zlcmhhbmdp
bmdGbG9hdHModG9SZW5kZXJCbG9jayhjaGlsZCksIC1jaGlsZC0+eCgpLCAtY2hpbGQtPnkoKSwg
IWNoaWxkTmVlZGVkTGF5b3V0KSk7CiAKICAgICBJbnRTaXplIGNoaWxkT2Zmc2V0KGNoaWxkLT54
KCkgLSBvbGRSZWN0LngoKSwgY2hpbGQtPnkoKSAtIG9sZFJlY3QueSgpKTsKQEAgLTE4NTksNiAr
MTk0MiwxMyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9ja0NoaWxkKFJlbmRlCiAgICAg
ICAgIGNoaWxkLT5yZXBhaW50T3ZlcmhhbmdpbmdGbG9hdHModHJ1ZSk7CiAgICAgfQogCisgICAg
aWYgKHBhZ2luYXRlZCkgeworICAgICAgICAvLyBDaGVjayBmb3IgYW4gYWZ0ZXIgcGFnZS9jb2x1
bW4gYnJlYWsuCisgICAgICAgIGludCBuZXdIZWlnaHQgPSBhcHBseUFmdGVyQnJlYWsoY2hpbGQs
IGhlaWdodCgpLCBtYXJnaW5JbmZvKTsKKyAgICAgICAgaWYgKG5ld0hlaWdodCAhPSBoZWlnaHQo
KSkKKyAgICAgICAgICAgIHNldEhlaWdodChuZXdIZWlnaHQpOworICAgIH0KKwogICAgIEFTU0VS
VChvbGRMYXlvdXREZWx0YSA9PSB2aWV3KCktPmxheW91dERlbHRhKCkpOwogfQogCkBAIC0xODg5
LDYgKzE5NzksMTEgQEAgYm9vbCBSZW5kZXJCbG9jazo6bGF5b3V0T25seVBvc2l0aW9uZWRPYgog
dm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0UG9zaXRpb25lZE9iamVjdHMoYm9vbCByZWxheW91dENo
aWxkcmVuKQogewogICAgIGlmIChtX3Bvc2l0aW9uZWRPYmplY3RzKSB7CisgICAgICAgIGlmICho
YXNDb2x1bW5zKCkpCisgICAgICAgICAgICB2aWV3KCktPmxheW91dFN0YXRlKCktPmNsZWFyUGFn
aW5hdGlvbkluZm9ybWF0aW9uKCk7IC8vIFBvc2l0aW9uZWQgb2JqZWN0cyBhcmUgbm90IHBhcnQg
b2YgdGhlIGNvbHVtbiBmbG93LCBzbyB0aGV5IGRvbid0IHBhZ2luYXRlIHdpdGggdGhlIGNvbHVt
bnMuCisKKyAgICAgICAgYm9vbCBwYWdpbmF0ZWQgPSB2aWV3KCktPmxheW91dFN0YXRlKCktPnBh
Z2luYXRlZCgpOworCiAgICAgICAgIFJlbmRlckJveCogcjsKICAgICAgICAgSXRlcmF0b3IgZW5k
ID0gbV9wb3NpdGlvbmVkT2JqZWN0cy0+ZW5kKCk7CiAgICAgICAgIGZvciAoSXRlcmF0b3IgaXQg
PSBtX3Bvc2l0aW9uZWRPYmplY3RzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKQEAgLTE5
MDQsMTIgKzE5OTksMjEgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0UG9zaXRpb25lZE9iamVj
dAogICAgICAgICAgICAgLy9pZiAocmVsYXlvdXRDaGlsZHJlbiAmJiAoci0+c3R5bGUoKS0+cGFk
ZGluZ0xlZnQoKS5pc1BlcmNlbnQoKSB8fCByLT5zdHlsZSgpLT5wYWRkaW5nUmlnaHQoKS5pc1Bl
cmNlbnQoKSkpCiAgICAgICAgICAgICAgICAgci0+c2V0UHJlZldpZHRoc0RpcnR5KHRydWUsIGZh
bHNlKTsKICAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFyLT5uZWVkc0xheW91dCgpICYm
IHBhZ2luYXRlZCAmJiB2aWV3KCktPmxheW91dFN0YXRlKCktPm1fcGFnZUhlaWdodCkgeworICAg
ICAgICAgICAgICAgIFJlbmRlckJsb2NrKiBjaGlsZFJlbmRlckJsb2NrID0gci0+aXNSZW5kZXJC
bG9jaygpID8gdG9SZW5kZXJCbG9jayhyKSA6IDA7CisgICAgICAgICAgICAgICAgaWYgKGNoaWxk
UmVuZGVyQmxvY2sgJiYgdmlldygpLT5sYXlvdXRTdGF0ZSgpLT5wYWdlWShjaGlsZFJlbmRlckJs
b2NrLT55KCkpICE9IGNoaWxkUmVuZGVyQmxvY2stPnBhZ2VZKCkpCisgICAgICAgICAgICAgICAg
ICAgIGNoaWxkUmVuZGVyQmxvY2stPnNldENoaWxkTmVlZHNMYXlvdXQodHJ1ZSwgZmFsc2UpOwor
ICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAvLyBXZSBkb24ndCBoYXZlIHRvIGRvIGEgZnVs
bCBsYXlvdXQuICBXZSBqdXN0IGhhdmUgdG8gdXBkYXRlIG91ciBwb3NpdGlvbi4gVHJ5IHRoYXQg
Zmlyc3QuIElmIHdlIGhhdmUgc2hyaW5rLXRvLWZpdCB3aWR0aAogICAgICAgICAgICAgLy8gYW5k
IHdlIGhpdCB0aGUgYXZhaWxhYmxlIHdpZHRoIGNvbnN0cmFpbnQsIHRoZSBsYXlvdXRJZk5lZWRl
ZCgpIHdpbGwgY2F0Y2ggaXQgYW5kIGRvIGEgZnVsbCBsYXlvdXQuCiAgICAgICAgICAgICBpZiAo
ci0+bmVlZHNQb3NpdGlvbmVkTW92ZW1lbnRMYXlvdXRPbmx5KCkpCiAgICAgICAgICAgICAgICAg
ci0+dHJ5TGF5b3V0RG9pbmdQb3NpdGlvbmVkTW92ZW1lbnRPbmx5KCk7CiAgICAgICAgICAgICBy
LT5sYXlvdXRJZk5lZWRlZCgpOwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoaGFz
Q29sdW1ucygpKQorICAgICAgICAgICAgdmlldygpLT5sYXlvdXRTdGF0ZSgpLT5tX2NvbHVtbklu
Zm8gPSBjb2x1bW5JbmZvKCk7IC8vIEZJWE1FOiBLaW5kIG9mIGdyb3NzLiBXZSBqdXN0IHB1dCB0
aGlzIGJhY2sgaW50byB0aGUgbGF5b3V0IHN0YXRlIHNvIHRoYXQgcG9wKCkgd2lsbCB3b3JrLgog
ICAgIH0KIH0KIApAQCAtMTk5NywxMiArMjEwMSwxMiBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWlu
dENvbHVtblJ1bGVzKFBhaW50CiAKICAgICAvLyBXZSBuZWVkIHRvIGRvIG11bHRpcGxlIHBhc3Nl
cywgYnJlYWtpbmcgdXAgb3VyIGNoaWxkIHBhaW50aW5nIGludG8gc3RyaXBzLgogICAgIENvbHVt
bkluZm8qIGNvbEluZm8gPSBjb2x1bW5JbmZvKCk7Ci0gICAgdW5zaWduZWQgY29sQ291bnQgPSBj
b2xJbmZvLT5jb2x1bW5Db3VudCgpOworICAgIHVuc2lnbmVkIGNvbENvdW50ID0gY29sdW1uQ291
bnQoY29sSW5mbyk7CiAgICAgaW50IGN1cnJYT2Zmc2V0ID0gc3R5bGUoKS0+ZGlyZWN0aW9uKCkg
PT0gTFRSID8gMCA6IGNvbnRlbnRXaWR0aCgpOwogICAgIGludCBydWxlQWRkID0gYm9yZGVyTGVm
dCgpICsgcGFkZGluZ0xlZnQoKTsKICAgICBpbnQgcnVsZVggPSBzdHlsZSgpLT5kaXJlY3Rpb24o
KSA9PSBMVFIgPyAwIDogY29udGVudFdpZHRoKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGNvbENvdW50OyBpKyspIHsKLSAgICAgICAgSW50UmVjdCBjb2xSZWN0ID0gY29sSW5mby0+
Y29sdW1uUmVjdEF0KGkpOworICAgICAgICBJbnRSZWN0IGNvbFJlY3QgPSBjb2x1bW5SZWN0QXQo
Y29sSW5mbywgaSk7CiAKICAgICAgICAgLy8gTW92ZSB0byB0aGUgbmV4dCBwb3NpdGlvbi4KICAg
ICAgICAgaWYgKHN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUikgewpAQCAtMjAzMywxNCArMjEz
NywxNCBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWludENvbHVtbkNvbnRlbnRzKFBhCiAgICAgR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQ7CiAgICAgaW50IGNvbEdh
cCA9IGNvbHVtbkdhcCgpOwogICAgIENvbHVtbkluZm8qIGNvbEluZm8gPSBjb2x1bW5JbmZvKCk7
Ci0gICAgdW5zaWduZWQgY29sQ291bnQgPSBjb2xJbmZvLT5jb2x1bW5Db3VudCgpOworICAgIHVu
c2lnbmVkIGNvbENvdW50ID0gY29sdW1uQ291bnQoY29sSW5mbyk7CiAgICAgaWYgKCFjb2xDb3Vu
dCkKICAgICAgICAgcmV0dXJuOwotICAgIGludCBjdXJyWE9mZnNldCA9IHN0eWxlKCktPmRpcmVj
dGlvbigpID09IExUUiA/IDAgOiBjb250ZW50V2lkdGgoKSAtIGNvbEluZm8tPmNvbHVtblJlY3RB
dCgwKS53aWR0aCgpOworICAgIGludCBjdXJyWE9mZnNldCA9IHN0eWxlKCktPmRpcmVjdGlvbigp
ID09IExUUiA/IDAgOiBjb250ZW50V2lkdGgoKSAtIGNvbHVtblJlY3RBdChjb2xJbmZvLCAwKS53
aWR0aCgpOwogICAgIGludCBjdXJyWU9mZnNldCA9IDA7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGNvbENvdW50OyBpKyspIHsKICAgICAgICAgLy8gRm9yIGVhY2ggcmVjdCwgd2UgY2xp
cCB0byB0aGUgcmVjdCwgYW5kIHRoZW4gd2UgYWRqdXN0IG91ciBjb29yZHMuCi0gICAgICAgIElu
dFJlY3QgY29sUmVjdCA9IGNvbEluZm8tPmNvbHVtblJlY3RBdChpKTsKKyAgICAgICAgSW50UmVj
dCBjb2xSZWN0ID0gY29sdW1uUmVjdEF0KGNvbEluZm8sIGkpOwogICAgICAgICBjb2xSZWN0Lm1v
dmUodHgsIHR5KTsKICAgICAgICAgUGFpbnRJbmZvIGluZm8ocGFpbnRJbmZvKTsKICAgICAgICAg
aW5mby5yZWN0LmludGVyc2VjdChjb2xSZWN0KTsKQEAgLTIwOTgsMTQgKzIyMDIsMTMgQEAgdm9p
ZCBSZW5kZXJCbG9jazo6cGFpbnRDaGlsZHJlbihQYWludEluZgogICAgIGluZm8udXBkYXRlUGFp
bnRpbmdSb290Rm9yQ2hpbGRyZW4odGhpcyk7CiAgICAgCiAgICAgUmVuZGVyVmlldyogcmVuZGVy
VmlldyA9IHZpZXcoKTsKLSAgICBib29sIHVzZVByaW50UmVjdCA9ICFyZW5kZXJWaWV3LT5wcmlu
dFJlY3QoKS5pc0VtcHR5KCkgJiYgIWRvY3VtZW50KCktPnNldHRpbmdzKCktPnBhZ2luYXRlRHVy
aW5nTGF5b3V0RW5hYmxlZCgpOworICAgIGJvb2wgdXNlUHJpbnRSZWN0ID0gIXJlbmRlclZpZXct
PnByaW50UmVjdCgpLmlzRW1wdHkoKTsKICAgICAKICAgICBib29sIGNoZWNrUGFnZUJyZWFrcyA9
IGRvY3VtZW50KCktPnBhZ2luYXRlZCgpICYmICFkb2N1bWVudCgpLT5zZXR0aW5ncygpLT5wYWdp
bmF0ZUR1cmluZ0xheW91dEVuYWJsZWQoKTsKLSAgICBib29sIGNoZWNrQ29sdW1uQnJlYWtzID0g
IWNoZWNrUGFnZUJyZWFrcyAmJiB1c2VQcmludFJlY3Q7CiAKICAgICBmb3IgKFJlbmRlckJveCog
Y2hpbGQgPSBmaXJzdENoaWxkQm94KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGlu
Z0JveCgpKSB7ICAgICAgICAKICAgICAgICAgLy8gQ2hlY2sgZm9yIHBhZ2UtYnJlYWstYmVmb3Jl
OiBhbHdheXMsIGFuZCBpZiBpdCdzIHNldCwgYnJlYWsgYW5kIGJhaWwuCi0gICAgICAgIGJvb2wg
Y2hlY2tCZWZvcmVBbHdheXMgPSAhY2hpbGRyZW5JbmxpbmUoKSAmJiAoKGNoZWNrUGFnZUJyZWFr
cyAmJiBjaGlsZC0+c3R5bGUoKS0+cGFnZUJyZWFrQmVmb3JlKCkgPT0gUEJBTFdBWVMpIHx8IChj
aGVja0NvbHVtbkJyZWFrcyAmJiBjaGlsZC0+c3R5bGUoKS0+Y29sdW1uQnJlYWtCZWZvcmUoKSA9
PSBQQkFMV0FZUykpOworICAgICAgICBib29sIGNoZWNrQmVmb3JlQWx3YXlzID0gIWNoaWxkcmVu
SW5saW5lKCkgJiYgKGNoZWNrUGFnZUJyZWFrcyAmJiBjaGlsZC0+c3R5bGUoKS0+cGFnZUJyZWFr
QmVmb3JlKCkgPT0gUEJBTFdBWVMpOwogICAgICAgICBpZiAoY2hlY2tCZWZvcmVBbHdheXMKICAg
ICAgICAgICAgICYmICh0eSArIGNoaWxkLT55KCkpID4gcGFpbnRJbmZvLnJlY3QueSgpCiAgICAg
ICAgICAgICAmJiAodHkgKyBjaGlsZC0+eSgpKSA8IHBhaW50SW5mby5yZWN0LmJvdHRvbSgpKSB7
CkBAIC0yMTI4LDcgKzIyMzEsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWludENoaWxkcmVuKFBh
aW50SW5mCiAgICAgICAgICAgICBjaGlsZC0+cGFpbnQoaW5mbywgdHgsIHR5KTsKIAogICAgICAg
ICAvLyBDaGVjayBmb3IgcGFnZS1icmVhay1hZnRlcjogYWx3YXlzLCBhbmQgaWYgaXQncyBzZXQs
IGJyZWFrIGFuZCBiYWlsLgotICAgICAgICBib29sIGNoZWNrQWZ0ZXJBbHdheXMgPSAhY2hpbGRy
ZW5JbmxpbmUoKSAmJiAoKGNoZWNrUGFnZUJyZWFrcyAmJiBjaGlsZC0+c3R5bGUoKS0+cGFnZUJy
ZWFrQWZ0ZXIoKSA9PSBQQkFMV0FZUykgfHwgKGNoZWNrQ29sdW1uQnJlYWtzICYmIGNoaWxkLT5z
dHlsZSgpLT5jb2x1bW5CcmVha0FmdGVyKCkgPT0gUEJBTFdBWVMpKTsKKyAgICAgICAgYm9vbCBj
aGVja0FmdGVyQWx3YXlzID0gIWNoaWxkcmVuSW5saW5lKCkgJiYgKGNoZWNrUGFnZUJyZWFrcyAm
JiBjaGlsZC0+c3R5bGUoKS0+cGFnZUJyZWFrQWZ0ZXIoKSA9PSBQQkFMV0FZUyk7CiAgICAgICAg
IGlmIChjaGVja0FmdGVyQWx3YXlzCiAgICAgICAgICAgICAmJiAodHkgKyBjaGlsZC0+eSgpICsg
Y2hpbGQtPmhlaWdodCgpKSA+IHBhaW50SW5mby5yZWN0LnkoKQogICAgICAgICAgICAgJiYgKHR5
ICsgY2hpbGQtPnkoKSArIGNoaWxkLT5oZWlnaHQoKSkgPCBwYWludEluZm8ucmVjdC5ib3R0b20o
KSkgewpAQCAtMjc3Niw3ICsyODc5LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6cmVtb3ZlUG9zaXRp
b25lZE9iamVjdAogICAgICAgICBtX3Bvc2l0aW9uZWRPYmplY3RzLT5yZW1vdmUoZGVhZE9iamVj
dHMuYXQoaSkpOwogfQogCi12b2lkIFJlbmRlckJsb2NrOjppbnNlcnRGbG9hdGluZ09iamVjdChS
ZW5kZXJCb3gqIG8pCitSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3QqIFJlbmRlckJsb2NrOjpp
bnNlcnRGbG9hdGluZ09iamVjdChSZW5kZXJCb3gqIG8pCiB7CiAgICAgQVNTRVJUKG8tPmlzRmxv
YXRpbmcoKSk7CiAKQEAgLTI3ODksMjUgKzI4OTIsMzcgQEAgdm9pZCBSZW5kZXJCbG9jazo6aW5z
ZXJ0RmxvYXRpbmdPYmplY3QoUgogICAgICAgICBEZXByZWNhdGVkUHRyTGlzdEl0ZXJhdG9yPEZs
b2F0aW5nT2JqZWN0PiBpdCgqbV9mbG9hdGluZ09iamVjdHMpOwogICAgICAgICBGbG9hdGluZ09i
amVjdCogZjsKICAgICAgICAgd2hpbGUgKCAoZiA9IGl0LmN1cnJlbnQoKSkgKSB7Ci0gICAgICAg
ICAgICBpZiAoZi0+bV9yZW5kZXJlciA9PSBvKSByZXR1cm47CisgICAgICAgICAgICBpZiAoZi0+
bV9yZW5kZXJlciA9PSBvKQorICAgICAgICAgICAgICAgIHJldHVybiBmOwogICAgICAgICAgICAg
KytpdDsKICAgICAgICAgfQogICAgIH0KIAogICAgIC8vIENyZWF0ZSB0aGUgc3BlY2lhbCBvYmpl
Y3QgZW50cnkgJiBhcHBlbmQgaXQgdG8gdGhlIGxpc3QKIAotICAgIG8tPmxheW91dElmTmVlZGVk
KCk7Ci0KICAgICBGbG9hdGluZ09iamVjdCogbmV3T2JqID0gbmV3IEZsb2F0aW5nT2JqZWN0KG8t
PnN0eWxlKCktPmZsb2F0aW5nKCkgPT0gRkxFRlQgPyBGbG9hdGluZ09iamVjdDo6RmxvYXRMZWZ0
IDogRmxvYXRpbmdPYmplY3Q6OkZsb2F0UmlnaHQpOwogCiAgICAgbmV3T2JqLT5tX3RvcCA9IC0x
OwogICAgIG5ld09iai0+bV9ib3R0b20gPSAtMTsKKyAgICAKKyAgICAvLyBPdXIgbG9jYXRpb24g
aXMgaXJyZWxldmFudCBpZiB3ZSdyZSB1bnNwbGl0dGFibGUgb3Igbm8gcGFnaW5hdGlvbiBpcyBp
biBlZmZlY3QuICBKdXN0IGdvIGFoZWFkCisgICAgLy8gYW5kIGxheSBvdXQgdGhlIGZsb2F0Lgor
ICAgIGJvb2wgYWZmZWN0ZWRCeVBhZ2luYXRpb24gPSBvLT5pc1JlbmRlckJsb2NrKCkgJiYgdmll
dygpLT5sYXlvdXRTdGF0ZSgpLT5tX3BhZ2VIZWlnaHQ7CisgICAgaWYgKCFhZmZlY3RlZEJ5UGFn
aW5hdGlvbikKKyAgICAgICAgby0+bGF5b3V0SWZOZWVkZWQoKTsKKyAgICBlbHNlIHsKKyAgICAg
ICAgby0+Y2FsY1dpZHRoKCk7CisgICAgICAgIG8tPmNhbGNWZXJ0aWNhbE1hcmdpbnMoKTsKKyAg
ICB9CiAgICAgbmV3T2JqLT5tX3dpZHRoID0gby0+d2lkdGgoKSArIG8tPm1hcmdpbkxlZnQoKSAr
IG8tPm1hcmdpblJpZ2h0KCk7CisKICAgICBuZXdPYmotPm1fc2hvdWxkUGFpbnQgPSAhby0+aGFz
U2VsZlBhaW50aW5nTGF5ZXIoKTsgLy8gSWYgYSBsYXllciBleGlzdHMsIHRoZSBmbG9hdCB3aWxs
IHBhaW50IGl0c2VsZi4gIE90aGVyd2lzZSBzb21lb25lIGVsc2Ugd2lsbC4KICAgICBuZXdPYmot
Pm1faXNEZXNjZW5kYW50ID0gdHJ1ZTsKICAgICBuZXdPYmotPm1fcmVuZGVyZXIgPSBvOwogCiAg
ICAgbV9mbG9hdGluZ09iamVjdHMtPmFwcGVuZChuZXdPYmopOworICAgIAorICAgIHJldHVybiBu
ZXdPYmo7CiB9CiAKIHZvaWQgUmVuZGVyQmxvY2s6OnJlbW92ZUZsb2F0aW5nT2JqZWN0KFJlbmRl
ckJveCogbykKQEAgLTI4MzEsNiArMjk0NiwxOCBAQCB2b2lkIFJlbmRlckJsb2NrOjpyZW1vdmVG
bG9hdGluZ09iamVjdChSCiAgICAgfQogfQogCit2b2lkIFJlbmRlckJsb2NrOjpyZW1vdmVGbG9h
dGluZ09iamVjdHMoRmxvYXRpbmdPYmplY3QqIGYsIGludCB5KQoreworICAgIGlmICghbV9mbG9h
dGluZ09iamVjdHMpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBGbG9hdGluZ09iamVjdCog
Y3VyciA9IG1fZmxvYXRpbmdPYmplY3RzLT5sYXN0KCk7CisgICAgd2hpbGUgKGN1cnIgIT0gZiAm
JiAoY3Vyci0+bV90b3AgPT0gLTEgfHwgY3Vyci0+bV90b3AgPj0geSkpIHsKKyAgICAgICAgbV9m
bG9hdGluZ09iamVjdHMtPnJlbW92ZUxhc3QoKTsKKyAgICAgICAgY3VyciA9IG1fZmxvYXRpbmdP
YmplY3RzLT5sYXN0KCk7CisgICAgfQorfQorCiBib29sIFJlbmRlckJsb2NrOjpwb3NpdGlvbk5l
d0Zsb2F0cygpCiB7CiAgICAgaWYgKCFtX2Zsb2F0aW5nT2JqZWN0cykKQEAgLTI4NjcsMTYgKzI5
OTQsMTUgQEAgYm9vbCBSZW5kZXJCbG9jazo6cG9zaXRpb25OZXdGbG9hdHMoKQogICAgICAgICB9
CiAKICAgICAgICAgUmVuZGVyQm94KiBvID0gZi0+bV9yZW5kZXJlcjsKLSAgICAgICAgaW50IF9o
ZWlnaHQgPSBvLT5oZWlnaHQoKSArIG8tPm1hcmdpblRvcCgpICsgby0+bWFyZ2luQm90dG9tKCk7
CiAKICAgICAgICAgaW50IHJvID0gcmlnaHRPZmZzZXQoKTsgLy8gQ29uc3RhbnQgcGFydCBvZiBy
aWdodCBvZmZzZXQuCi0gICAgICAgIGludCBsbyA9IGxlZnRPZmZzZXQoKTsgLy8gQ29uc3RhdCBw
YXJ0IG9mIGxlZnQgb2Zmc2V0LgorICAgICAgICBpbnQgbG8gPSBsZWZ0T2Zmc2V0KCk7IC8vIENv
bnN0YW50IHBhcnQgb2YgbGVmdCBvZmZzZXQuCiAgICAgICAgIGludCBmd2lkdGggPSBmLT5tX3dp
ZHRoOyAvLyBUaGUgd2lkdGggd2UgbG9vayBmb3IuCiAgICAgICAgIGlmIChybyAtIGxvIDwgZndp
ZHRoKQogICAgICAgICAgICAgZndpZHRoID0gcm8gLSBsbzsgLy8gTmV2ZXIgbG9vayBmb3IgbW9y
ZSB0aGFuIHdoYXQgd2lsbCBiZSBhdmFpbGFibGUuCiAgICAgICAgIAogICAgICAgICBJbnRSZWN0
IG9sZFJlY3Qoby0+eCgpLCBvLT55KCkgLCBvLT53aWR0aCgpLCBvLT5oZWlnaHQoKSk7Ci0gICAg
ICAgIAorCiAgICAgICAgIGlmIChvLT5zdHlsZSgpLT5jbGVhcigpICYgQ0xFRlQpCiAgICAgICAg
ICAgICB5ID0gbWF4KGxlZnRCb3R0b20oKSwgeSk7CiAgICAgICAgIGlmIChvLT5zdHlsZSgpLT5j
bGVhcigpICYgQ1JJR0hUKQpAQCAtMjkwNSw5ICszMDMxLDM4IEBAIGJvb2wgUmVuZGVyQmxvY2s6
OnBvc2l0aW9uTmV3RmxvYXRzKCkKICAgICAgICAgICAgIG8tPnNldExvY2F0aW9uKGZ4IC0gby0+
bWFyZ2luUmlnaHQoKSAtIG8tPndpZHRoKCksIHkgKyBvLT5tYXJnaW5Ub3AoKSk7CiAgICAgICAg
IH0KIAotICAgICAgICBmLT5tX3RvcCA9IHk7Ci0gICAgICAgIGYtPm1fYm90dG9tID0gZi0+bV90
b3AgKyBfaGVpZ2h0OworICAgICAgICBpZiAodmlldygpLT5sYXlvdXRTdGF0ZSgpLT5wYWdpbmF0
ZWQoKSkgeworICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGNoaWxkQmxvY2sgPSBvLT5pc1JlbmRl
ckJsb2NrKCkgPyB0b1JlbmRlckJsb2NrKG8pIDogMDsKKworICAgICAgICAgICAgaWYgKGNoaWxk
QmxvY2sgJiYgdmlldygpLT5sYXlvdXRTdGF0ZSgpLT5tX3BhZ2VIZWlnaHQgJiYgdmlldygpLT5s
YXlvdXRTdGF0ZSgpLT5wYWdlWShvLT55KCkpICE9IGNoaWxkQmxvY2stPnBhZ2VZKCkpCisgICAg
ICAgICAgICAgICAgY2hpbGRCbG9jay0+c2V0Q2hpbGROZWVkc0xheW91dCh0cnVlLCBmYWxzZSk7
CisgICAgICAgICAgICBvLT5sYXlvdXRJZk5lZWRlZCgpOworCisgICAgICAgICAgICAvLyBJZiB3
ZSBhcmUgdW5zcGxpdHRhYmxlIGFuZCBkb24ndCBmaXQsIHRoZW4gd2UgbmVlZCB0byBtb3ZlIGRv
d24uCisgICAgICAgICAgICAvLyBXZSBpbmNsdWRlIG91ciBtYXJnaW5zIGFzIHBhcnQgb2YgdGhl
IHVuc3BsaXR0YWJsZSBhcmVhLgorICAgICAgICAgICAgaW50IG5ld1kgPSBhZGp1c3RGb3JVbnNw
bGl0dGFibGVDaGlsZChvLCB5LCB0cnVlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8g
U2VlIGlmIHdlIGhhdmUgYSBwYWdpbmF0aW9uIHN0cnV0IHRoYXQgaXMgbWFraW5nIHVzIG1vdmUg
ZG93biBmdXJ0aGVyLgorICAgICAgICAgICAgLy8gTm90ZSB0aGF0IGFuIHVuc3BsaXR0YWJsZSBj
aGlsZCBjYW4ndCBhbHNvIGhhdmUgYSBwYWdpbmF0aW9uIHN0cnV0LCBzbyB0aGlzIGlzCisgICAg
ICAgICAgICAvLyBleGNsdXNpdmUgd2l0aCB0aGUgY2FzZSBhYm92ZS4KKyAgICAgICAgICAgIGlm
IChjaGlsZEJsb2NrICYmIGNoaWxkQmxvY2stPnBhZ2luYXRpb25TdHJ1dCgpKSB7CisgICAgICAg
ICAgICAgICAgbmV3WSArPSBjaGlsZEJsb2NrLT5wYWdpbmF0aW9uU3RydXQoKTsKKyAgICAgICAg
ICAgICAgICBjaGlsZEJsb2NrLT5zZXRQYWdpbmF0aW9uU3RydXQoMCk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChuZXdZICE9IHkpIHsKKyAgICAgICAgICAg
ICAgICBmLT5tX3BhZ2luYXRpb25TdHJ1dCA9IG5ld1kgLSB5OworICAgICAgICAgICAgICAgIHkg
PSBuZXdZOworICAgICAgICAgICAgICAgIG8tPnNldFkoeSArIG8tPm1hcmdpblRvcCgpKTsKKyAg
ICAgICAgICAgICAgICBpZiAoY2hpbGRCbG9jaykKKyAgICAgICAgICAgICAgICAgICAgY2hpbGRC
bG9jay0+c2V0Q2hpbGROZWVkc0xheW91dCh0cnVlLCBmYWxzZSk7CisgICAgICAgICAgICAgICAg
by0+bGF5b3V0SWZOZWVkZWQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogCisgICAgICAg
IGYtPm1fdG9wID0geTsKKyAgICAgICAgZi0+bV9ib3R0b20gPSBmLT5tX3RvcCArIG8tPm1hcmdp
blRvcCgpICsgby0+aGVpZ2h0KCkgKyBvLT5tYXJnaW5Cb3R0b20oKTsKKyAgICAgICAgCiAgICAg
ICAgIC8vIElmIHRoZSBjaGlsZCBtb3ZlZCwgd2UgaGF2ZSB0byByZXBhaW50IGl0LgogICAgICAg
ICBpZiAoby0+Y2hlY2tGb3JSZXBhaW50RHVyaW5nTGF5b3V0KCkpCiAgICAgICAgICAgICBvLT5y
ZXBhaW50RHVyaW5nTGF5b3V0SWZNb3ZlZChvbGRSZWN0KTsKQEAgLTI5MTcsNiArMzA3Miw0MCBA
QCBib29sIFJlbmRlckJsb2NrOjpwb3NpdGlvbk5ld0Zsb2F0cygpCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKK2Jvb2wgUmVuZGVyQmxvY2s6OnBvc2l0aW9uTmV3RmxvYXRPbkxpbmUoRmxvYXRpbmdP
YmplY3QqIG5ld0Zsb2F0LCBGbG9hdGluZ09iamVjdCogbGFzdEZsb2F0RnJvbVByZXZpb3VzTGlu
ZSkKK3sKKyAgICBib29sIGRpZFBvc2l0aW9uID0gcG9zaXRpb25OZXdGbG9hdHMoKTsKKyAgICBp
ZiAoIWRpZFBvc2l0aW9uIHx8ICFuZXdGbG9hdC0+bV9wYWdpbmF0aW9uU3RydXQpCisgICAgICAg
IHJldHVybiBkaWRQb3NpdGlvbjsKKyAgICAKKyAgICBpbnQgZmxvYXRUb3AgPSBuZXdGbG9hdC0+
bV90b3A7CisgICAgaW50IHBhZ2luYXRpb25TdHJ1dCA9IG5ld0Zsb2F0LT5tX3BhZ2luYXRpb25T
dHJ1dDsKKyAgICBGbG9hdGluZ09iamVjdCogZiA9IG1fZmxvYXRpbmdPYmplY3RzLT5sYXN0KCk7
CisgICAgCisgICAgQVNTRVJUKGYgPT0gbmV3RmxvYXQpOworCisgICAgaWYgKGZsb2F0VG9wIC0g
cGFnaW5hdGlvblN0cnV0ICE9IGhlaWdodCgpKQorICAgICAgICByZXR1cm4gZGlkUG9zaXRpb247
CisKKyAgICBmb3IgKGYgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+cHJldigpOyBmICYmIGYgIT0gbGFz
dEZsb2F0RnJvbVByZXZpb3VzTGluZTsgZiA9IG1fZmxvYXRpbmdPYmplY3RzLT5wcmV2KCkpIHsK
KyAgICAgICAgaWYgKGYtPm1fdG9wID09IGhlaWdodCgpKSB7CisgICAgICAgICAgICBBU1NFUlQo
IWYtPm1fcGFnaW5hdGlvblN0cnV0KTsKKyAgICAgICAgICAgIGYtPm1fcGFnaW5hdGlvblN0cnV0
ID0gcGFnaW5hdGlvblN0cnV0OworICAgICAgICAgICAgUmVuZGVyQm94KiBvID0gZi0+bV9yZW5k
ZXJlcjsKKyAgICAgICAgICAgIG8tPnNldFkoby0+eSgpICsgby0+bWFyZ2luVG9wKCkgKyBwYWdp
bmF0aW9uU3RydXQpOworICAgICAgICAgICAgaWYgKG8tPmlzUmVuZGVyQmxvY2soKSkKKyAgICAg
ICAgICAgICAgICB0b1JlbmRlckJsb2NrKG8pLT5zZXRDaGlsZE5lZWRzTGF5b3V0KHRydWUsIGZh
bHNlKTsKKyAgICAgICAgICAgIG8tPmxheW91dElmTmVlZGVkKCk7CisgICAgICAgICAgICBmLT5t
X3RvcCArPSBmLT5tX3BhZ2luYXRpb25TdHJ1dDsKKyAgICAgICAgICAgIGYtPm1fYm90dG9tICs9
IGYtPm1fcGFnaW5hdGlvblN0cnV0OworICAgICAgICB9CisgICAgfQorICAgICAgICAKKyAgICBz
ZXRIZWlnaHQoaGVpZ2h0KCkgKyBwYWdpbmF0aW9uU3RydXQpOworICAgIAorICAgIHJldHVybiBk
aWRQb3NpdGlvbjsKK30KKwogdm9pZCBSZW5kZXJCbG9jazo6bmV3TGluZShFQ2xlYXIgY2xlYXIp
CiB7CiAgICAgcG9zaXRpb25OZXdGbG9hdHMoKTsKQEAgLTMxNTgsOCArMzM0Nyw4IEBAIGludCBS
ZW5kZXJCbG9jazo6bG93ZXN0UG9zaXRpb24oYm9vbCBpbmMKIAogICAgIGlmIChoYXNDb2x1bW5z
KCkpIHsKICAgICAgICAgQ29sdW1uSW5mbyogY29sSW5mbyA9IGNvbHVtbkluZm8oKTsKLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvbEluZm8tPmNvbHVtbkNvdW50KCk7IGkrKykK
LSAgICAgICAgICAgIGJvdHRvbSA9IG1heChib3R0b20sIGNvbEluZm8tPmNvbHVtblJlY3RBdChp
KS5ib3R0b20oKSArIHJlbGF0aXZlT2Zmc2V0KTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGNvbHVtbkNvdW50KGNvbEluZm8pOyBpKyspCisgICAgICAgICAgICBib3R0b20gPSBt
YXgoYm90dG9tLCBjb2x1bW5SZWN0QXQoY29sSW5mbywgaSkuYm90dG9tKCkgKyByZWxhdGl2ZU9m
ZnNldCk7CiAgICAgICAgIHJldHVybiBib3R0b207CiAgICAgfQogCkBAIC0zMjUzLDggKzM0NDIs
OSBAQCBpbnQgUmVuZGVyQmxvY2s6OnJpZ2h0bW9zdFBvc2l0aW9uKGJvb2wgCiAgICAgICAgIC8v
IFRoaXMgb25seSBtYXR0ZXJzIGZvciBMVFIKICAgICAgICAgaWYgKHN0eWxlKCktPmRpcmVjdGlv
bigpID09IExUUikgewogICAgICAgICAgICAgQ29sdW1uSW5mbyogY29sSW5mbyA9IGNvbHVtbklu
Zm8oKTsKLSAgICAgICAgICAgIGlmIChjb2xJbmZvLT5jb2x1bW5Db3VudCgpKQotICAgICAgICAg
ICAgICAgIHJpZ2h0ID0gbWF4KGNvbEluZm8tPmNvbHVtblJlY3RBdChjb2xJbmZvLT5jb2x1bW5D
b3VudCgpIC0gMSkucmlnaHQoKSArIHJlbGF0aXZlT2Zmc2V0LCByaWdodCk7CisgICAgICAgICAg
ICB1bnNpZ25lZCBjb3VudCA9IGNvbHVtbkNvdW50KGNvbEluZm8pOworICAgICAgICAgICAgaWYg
KGNvdW50KQorICAgICAgICAgICAgICAgIHJpZ2h0ID0gbWF4KGNvbHVtblJlY3RBdChjb2xJbmZv
LCBjb3VudCAtIDEpLnJpZ2h0KCkgKyByZWxhdGl2ZU9mZnNldCwgcmlnaHQpOwogICAgICAgICB9
CiAgICAgICAgIHJldHVybiByaWdodDsKICAgICB9CkBAIC0zMzUzLDggKzM1NDMsOSBAQCBpbnQg
UmVuZGVyQmxvY2s6OmxlZnRtb3N0UG9zaXRpb24oYm9vbCBpCiAgICAgICAgIC8vIFRoaXMgb25s
eSBtYXR0ZXJzIGZvciBSVEwKICAgICAgICAgaWYgKHN0eWxlKCktPmRpcmVjdGlvbigpID09IFJU
TCkgewogICAgICAgICAgICAgQ29sdW1uSW5mbyogY29sSW5mbyA9IGNvbHVtbkluZm8oKTsKLSAg
ICAgICAgICAgIGlmIChjb2xJbmZvLT5jb2x1bW5Db3VudCgpKQotICAgICAgICAgICAgICAgIGxl
ZnQgPSBtaW4oY29sSW5mby0+Y29sdW1uUmVjdEF0KGNvbEluZm8tPmNvbHVtbkNvdW50KCkgLSAx
KS54KCkgKyByZWxhdGl2ZU9mZnNldCwgbGVmdCk7CisgICAgICAgICAgICB1bnNpZ25lZCBjb3Vu
dCA9IGNvbHVtbkNvdW50KGNvbEluZm8pOworICAgICAgICAgICAgaWYgKGNvdW50KQorICAgICAg
ICAgICAgICAgIGxlZnQgPSBtaW4oY29sdW1uUmVjdEF0KGNvbEluZm8sIGNvdW50IC0gMSkueCgp
ICsgcmVsYXRpdmVPZmZzZXQsIGxlZnQpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBsZWZ0
OwogICAgIH0KQEAgLTM2NDcsNiArMzgzOCw5IEBAIGJvb2wgUmVuZGVyQmxvY2s6OmNvbnRhaW5z
RmxvYXQoUmVuZGVyT2IKIAogdm9pZCBSZW5kZXJCbG9jazo6bWFya0FsbERlc2NlbmRhbnRzV2l0
aEZsb2F0c0ZvckxheW91dChSZW5kZXJCb3gqIGZsb2F0VG9SZW1vdmUsIGJvb2wgaW5MYXlvdXQp
CiB7CisgICAgaWYgKCFtX2V2ZXJIYWRMYXlvdXQpCisgICAgICAgIHJldHVybjsKKwogICAgIHNl
dENoaWxkTmVlZHNMYXlvdXQodHJ1ZSwgIWluTGF5b3V0KTsKIAogICAgIGlmIChmbG9hdFRvUmVt
b3ZlKQpAQCAtMzY2NCwzMCArMzg1OCw0MCBAQCB2b2lkIFJlbmRlckJsb2NrOjptYXJrQWxsRGVz
Y2VuZGFudHNXaXRoCiAgICAgfQogfQogCi1pbnQgUmVuZGVyQmxvY2s6OnZpc2libGVUb3BPZkhp
Z2hlc3RGbG9hdEV4dGVuZGluZ0JlbG93KGludCBib3R0b20sIGludCBtYXhIZWlnaHQpIGNvbnN0
Cit2b2lkIFJlbmRlckJsb2NrOjptYXJrRGVzY2VuZGFudEJsb2Nrc0FuZExpbmVzRm9yTGF5b3V0
KGJvb2wgaW5MYXlvdXQpCiB7Ci0gICAgaW50IHRvcCA9IGJvdHRvbTsKLSAgICBpZiAobV9mbG9h
dGluZ09iamVjdHMpIHsKLSAgICAgICAgRmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0Owot
ICAgICAgICBmb3IgKERlcHJlY2F0ZWRQdHJMaXN0SXRlcmF0b3I8RmxvYXRpbmdPYmplY3Q+IGl0
KCptX2Zsb2F0aW5nT2JqZWN0cyk7IChmbG9hdGluZ09iamVjdCA9IGl0LmN1cnJlbnQoKSk7ICsr
aXQpIHsKLSAgICAgICAgICAgIFJlbmRlckJveCogZmxvYXRpbmdCb3ggPSBmbG9hdGluZ09iamVj
dC0+bV9yZW5kZXJlcjsKLSAgICAgICAgICAgIEludFJlY3QgdmlzaWJsZU92ZXJmbG93ID0gZmxv
YXRpbmdCb3gtPnZpc2libGVPdmVyZmxvd1JlY3QoKTsKLSAgICAgICAgICAgIHZpc2libGVPdmVy
Zmxvdy5tb3ZlKGZsb2F0aW5nQm94LT54KCksIGZsb2F0aW5nQm94LT55KCkpOwotICAgICAgICAg
ICAgaWYgKHZpc2libGVPdmVyZmxvdy55KCkgPCB0b3AgJiYgdmlzaWJsZU92ZXJmbG93LmJvdHRv
bSgpID4gYm90dG9tICYmIHZpc2libGVPdmVyZmxvdy5oZWlnaHQoKSA8PSBtYXhIZWlnaHQgJiYg
ZmxvYXRpbmdCb3gtPmNvbnRhaW5pbmdCbG9jaygpID09IHRoaXMpCi0gICAgICAgICAgICAgICAg
dG9wID0gdmlzaWJsZU92ZXJmbG93LnkoKTsKLSAgICAgICAgfQotICAgIH0KKyAgICBpZiAoIW1f
ZXZlckhhZExheW91dCkKKyAgICAgICAgcmV0dXJuOwogCisgICAgc2V0Q2hpbGROZWVkc0xheW91
dCh0cnVlLCAhaW5MYXlvdXQpOworCisgICAgLy8gSXRlcmF0ZSBvdmVyIG91ciBjaGlsZHJlbiBh
bmQgbWFyayB0aGVtIGFzIG5lZWRlZC4KICAgICBpZiAoIWNoaWxkcmVuSW5saW5lKCkpIHsKLSAg
ICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hp
bGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICAgICAgaWYgKGNoaWxkLT5pc0Zs
b2F0aW5nT3JQb3NpdGlvbmVkKCkgfHwgIWNoaWxkLT5pc1JlbmRlckJsb2NrKCkpCisgICAgICAg
IGZvciAoUmVuZGVyQm94KiBjaGlsZCA9IGZpcnN0Q2hpbGRCb3goKTsgY2hpbGQ7IGNoaWxkID0g
Y2hpbGQtPm5leHRTaWJsaW5nQm94KCkpIHsKKyAgICAgICAgICAgIGlmIChjaGlsZC0+aXNGbG9h
dGluZ09yUG9zaXRpb25lZCgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgUmVuZGVyQmxvY2sqIGNoaWxkQmxvY2sgPSB0b1JlbmRlckJsb2NrKGNoaWxkKTsKLSAgICAg
ICAgICAgIHRvcCA9IG1pbih0b3AsIGNoaWxkQmxvY2stPnkoKSArIGNoaWxkQmxvY2stPnZpc2li
bGVUb3BPZkhpZ2hlc3RGbG9hdEV4dGVuZGluZ0JlbG93KGJvdHRvbSAtIGNoaWxkQmxvY2stPnko
KSwgbWF4SGVpZ2h0KSk7CisgICAgICAgICAgICBjaGlsZC0+bWFya0Rlc2NlbmRhbnRCbG9ja3NB
bmRMaW5lc0ZvckxheW91dChpbkxheW91dCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAg
Ly8gV2FsayBvdXIgZmxvYXRpbmcgb2JqZWN0cyBhbmQgbWFyayB0aGVtIHRvby4KKyAgICBpZiAo
bV9mbG9hdGluZ09iamVjdHMpIHsKKyAgICAgICAgRGVwcmVjYXRlZFB0ckxpc3RJdGVyYXRvcjxG
bG9hdGluZ09iamVjdD4gaXQoKm1fZmxvYXRpbmdPYmplY3RzKTsKKyAgICAgICAgd2hpbGUgKGl0
LmN1cnJlbnQoKSkgeworICAgICAgICAgICAgaWYgKGl0LmN1cnJlbnQoKS0+bV9yZW5kZXJlci0+
aXNSZW5kZXJCbG9jaygpKQorICAgICAgICAgICAgICAgIGl0LmN1cnJlbnQoKS0+bV9yZW5kZXJl
ci0+bWFya0Rlc2NlbmRhbnRCbG9ja3NBbmRMaW5lc0ZvckxheW91dChpbkxheW91dCk7CisgICAg
ICAgICAgICArK2l0OwogICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIHRvcDsKKyAgICBp
ZiAobV9wb3NpdGlvbmVkT2JqZWN0cykgeworICAgICAgICAvLyBGSVhNRTogVGVjaG5pY2FsbHkg
d2UgZG9uJ3QgaGF2ZSB0byBtYXJrIHRoZSBwb3NpdGlvbmVkIG9iamVjdHMgaWYgd2UncmUgdGhl
IGJsb2NrCisgICAgICAgIC8vIHRoYXQgZXN0YWJsaXNoZWQgdGhlIGNvbHVtbnMsIGJ1dCB3ZSBk
b24ndCByZWFsbHkgaGF2ZSB0aGF0IGluZm9ybWF0aW9uIGhlcmUuCisgICAgICAgIEl0ZXJhdG9y
IGVuZCA9IG1fcG9zaXRpb25lZE9iamVjdHMtPmVuZCgpOworICAgICAgICBmb3IgKEl0ZXJhdG9y
IGl0ID0gbV9wb3NpdGlvbmVkT2JqZWN0cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Cisg
ICAgICAgICAgICAoKml0KS0+bWFya0Rlc2NlbmRhbnRCbG9ja3NBbmRMaW5lc0ZvckxheW91dCgp
OworICAgICAgICB9CisgICAgfQogfQogCiBpbnQgUmVuZGVyQmxvY2s6OmdldENsZWFyRGVsdGEo
UmVuZGVyQm94KiBjaGlsZCwgaW50IHlQb3MpCkBAIC0zODQ3LDE2ICs0MDUxLDE2IEBAIGJvb2wg
UmVuZGVyQmxvY2s6OmhpdFRlc3RDb2x1bW5zKGNvbnN0IEgKIHsKICAgICAvLyBXZSBuZWVkIHRv
IGRvIG11bHRpcGxlIHBhc3NlcywgYnJlYWtpbmcgdXAgb3VyIGhpdCB0ZXN0aW5nIGludG8gc3Ry
aXBzLgogICAgIENvbHVtbkluZm8qIGNvbEluZm8gPSBjb2x1bW5JbmZvKCk7Ci0gICAgaW50IGNv
bENvdW50ID0gY29sSW5mby0+Y29sdW1uQ291bnQoKTsKKyAgICBpbnQgY29sQ291bnQgPSBjb2x1
bW5Db3VudChjb2xJbmZvKTsKICAgICBpZiAoIWNvbENvdW50KQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgaW50IGxlZnQgPSBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpOwogICAgIGlu
dCBjdXJyWU9mZnNldCA9IDA7CiAgICAgaW50IGk7CiAgICAgZm9yIChpID0gMDsgaSA8IGNvbENv
dW50OyBpKyspCi0gICAgICAgIGN1cnJZT2Zmc2V0IC09IGNvbEluZm8tPmNvbHVtblJlY3RBdChp
KS5oZWlnaHQoKTsKKyAgICAgICAgY3VycllPZmZzZXQgLT0gY29sdW1uUmVjdEF0KGNvbEluZm8s
IGkpLmhlaWdodCgpOwogICAgIGZvciAoaSA9IGNvbENvdW50IC0gMTsgaSA+PSAwOyBpLS0pIHsK
LSAgICAgICAgSW50UmVjdCBjb2xSZWN0ID0gY29sSW5mby0+Y29sdW1uUmVjdEF0KGkpOworICAg
ICAgICBJbnRSZWN0IGNvbFJlY3QgPSBjb2x1bW5SZWN0QXQoY29sSW5mbywgaSk7CiAgICAgICAg
IGludCBjdXJyWE9mZnNldCA9IGNvbFJlY3QueCgpIC0gbGVmdDsKICAgICAgICAgY3VycllPZmZz
ZXQgKz0gY29sUmVjdC5oZWlnaHQoKTsKICAgICAgICAgY29sUmVjdC5tb3ZlKHR4LCB0eSk7CkBA
IC00MTUwLDggKzQzNTQsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpzZXREZXNpcmVkQ29sdW1uQ291
bnRBCiAgICAgYm9vbCBkZXN0cm95Q29sdW1ucyA9ICFmaXJzdENoaWxkKCkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfHwgKGNvdW50ID09IDEgJiYgc3R5bGUoKS0+aGFzQXV0b0NvbHVtbldp
ZHRoKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGZpcnN0Q2hpbGQoKS0+aXNBbm9u
eW1vdXNDb2x1bW5zQmxvY2soKQotICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBmaXJzdENo
aWxkKCktPmlzQW5vbnltb3VzQ29sdW1uU3BhbkJsb2NrKCkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgfHwgZG9jdW1lbnQoKS0+c2V0dGluZ3MoKS0+cGFnaW5hdGVEdXJpbmdMYXlvdXRFbmFi
bGVkKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGZpcnN0Q2hpbGQoKS0+aXNBbm9u
eW1vdXNDb2x1bW5TcGFuQmxvY2soKTsKICAgICBpZiAoZGVzdHJveUNvbHVtbnMpIHsKICAgICAg
ICAgaWYgKGhhc0NvbHVtbnMoKSkgewogICAgICAgICAgICAgZGVsZXRlIGdDb2x1bW5JbmZvTWFw
LT50YWtlKHRoaXMpOwpAQCAtNDE5NCwxMzMgKzQzOTcsNjAgQEAgQ29sdW1uSW5mbyogUmVuZGVy
QmxvY2s6OmNvbHVtbkluZm8oKSBjbwogICAgIHJldHVybiBnQ29sdW1uSW5mb01hcC0+Z2V0KHRo
aXMpOyAgICAKIH0KIAotaW50IFJlbmRlckJsb2NrOjpsYXlvdXRDb2x1bW5zKGludCBlbmRPZkNv
bnRlbnQsIGludCByZXF1ZXN0ZWRDb2x1bW5IZWlnaHQpCit1bnNpZ25lZCBSZW5kZXJCbG9jazo6
Y29sdW1uQ291bnQoQ29sdW1uSW5mbyogY29sSW5mbykgY29uc3QKIHsKLSAgICAvLyBEb24ndCBk
byBhbnl0aGluZyBpZiB3ZSBoYXZlIG5vIGNvbHVtbnMKLSAgICBpZiAoIWhhc0NvbHVtbnMoKSkK
LSAgICAgICAgcmV0dXJuIC0xOworICAgIEFTU0VSVChoYXNDb2x1bW5zKCkgJiYgZ0NvbHVtbklu
Zm9NYXAtPmdldCh0aGlzKSA9PSBjb2xJbmZvKTsKKyAgICByZXR1cm4gY29sSW5mby0+Y29sdW1u
Q291bnQoKTsKK30KIAotICAgIENvbHVtbkluZm8qIGluZm8gPSBnQ29sdW1uSW5mb01hcC0+Z2V0
KHRoaXMpOwotICAgIGludCBkZXNpcmVkQ29sdW1uV2lkdGggPSBpbmZvLT5kZXNpcmVkQ29sdW1u
V2lkdGgoKTsKLSAgICBpbnQgZGVzaXJlZENvbHVtbkNvdW50ID0gaW5mby0+ZGVzaXJlZENvbHVt
bkNvdW50KCk7Ci0gICAgCi0gICAgYm9vbCBjb21wdXRlSW50cmluc2ljSGVpZ2h0ID0gKGVuZE9m
Q29udGVudCA9PSAtMSk7Ci0KLSAgICAvLyBGaWxsIHRoZSBjb2x1bW5zIGluIHRvIHRoZSBhdmFp
bGFibGUgaGVpZ2h0LiAgQXR0ZW1wdCB0byBiYWxhbmNlIHRoZSBoZWlnaHQgb2YgdGhlIGNvbHVt
bnMuCi0gICAgLy8gQWRkIGluIGhhbGYgb3VyIGxpbmUtaGVpZ2h0IHRvIGhlbHAgd2l0aCBiZXN0
LWd1ZXNzIGluaXRpYWwgYmFsYW5jaW5nLgotICAgIGludCBjb2x1bW5TbG9wID0gbGluZUhlaWdo
dChmYWxzZSkgLyAyOwotICAgIGludCByZW1haW5pbmdTbG9wU3BhY2UgPSBjb2x1bW5TbG9wICog
ZGVzaXJlZENvbHVtbkNvdW50OwotICAgIGludCBhdmFpbGFibGVIZWlnaHQgPSBjb250ZW50SGVp
Z2h0KCk7Ci0gICAgaW50IGNvbEhlaWdodDsKLSAgICBpZiAoY29tcHV0ZUludHJpbnNpY0hlaWdo
dCAmJiByZXF1ZXN0ZWRDb2x1bW5IZWlnaHQgPj0gMCkKLSAgICAgICAgY29sSGVpZ2h0ID0gcmVx
dWVzdGVkQ29sdW1uSGVpZ2h0OwotICAgIGVsc2UgaWYgKGNvbXB1dGVJbnRyaW5zaWNIZWlnaHQp
Ci0gICAgICAgIGNvbEhlaWdodCA9IG1pbihhdmFpbGFibGVIZWlnaHQsIGF2YWlsYWJsZUhlaWdo
dCAvIGRlc2lyZWRDb2x1bW5Db3VudCArIGNvbHVtblNsb3ApOwotICAgIGVsc2UKLSAgICAgICAg
Y29sSGVpZ2h0ID0gYXZhaWxhYmxlSGVpZ2h0OwotICAgIGludCBvcmlnaW5hbENvbEhlaWdodCA9
IGNvbEhlaWdodDsKK0ludFJlY3QgUmVuZGVyQmxvY2s6OmNvbHVtblJlY3RBdChDb2x1bW5JbmZv
KiBjb2xJbmZvLCB1bnNpZ25lZCBpbmRleCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaGFzQ29sdW1u
cygpICYmIGdDb2x1bW5JbmZvTWFwLT5nZXQodGhpcykgPT0gY29sSW5mbyk7CiAKKyAgICAvLyBD
b21wdXRlIHRoZSBhcHByb3ByaWF0ZSByZWN0IGJhc2VkIG9mZiBvdXIgaW5mb3JtYXRpb24uCisg
ICAgaW50IGNvbFdpZHRoID0gY29sSW5mby0+ZGVzaXJlZENvbHVtbldpZHRoKCk7CisgICAgaW50
IGNvbEhlaWdodCA9IGNvbEluZm8tPmNvbHVtbkhlaWdodCgpOworICAgIGludCBjb2xUb3AgPSBi
b3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKTsKICAgICBpbnQgY29sR2FwID0gY29sdW1uR2FwKCk7
CisgICAgaW50IGNvbExlZnQgPSBzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIgPyAKKyAgICAg
ICAgICAgICAgICAgICAgICBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpICsgKGluZGV4ICog
KGNvbFdpZHRoICsgY29sR2FwKSkKKyAgICAgICAgICAgICAgICAgICAgICA6IGJvcmRlckxlZnQo
KSArIHBhZGRpbmdMZWZ0KCkgKyBjb250ZW50V2lkdGgoKSAtIGNvbFdpZHRoIC0gKGluZGV4ICog
KGNvbFdpZHRoICsgY29sR2FwKSk7CisgICAgcmV0dXJuIEludFJlY3QoY29sTGVmdCwgY29sVG9w
LCBjb2xXaWR0aCwgY29sSGVpZ2h0KTsKK30KIAotICAgIC8vIENvbXB1dGUgYSBjb2xsZWN0aW9u
IG9mIGNvbHVtbiByZWN0cy4KLSAgICBpbmZvLT5jbGVhckNvbHVtbnMoKTsKLSAgICAKLSAgICAv
LyBUaGVuIHdlIGRvIGEgc2ltdWxhdGVkICJwYWludCIgaW50byB0aGUgY29sdW1uIHNsaWNlcyBh
bmQgYWxsb3cgdGhlIGNvbnRlbnQgdG8gc2xpZ2h0bHkgYWRqdXN0IG91ciBpbmRpdmlkdWFsIGNv
bHVtbiByZWN0cy4KLSAgICAvLyBGSVhNRTogV2UgbmVlZCB0byB0YWtlIGludG8gYWNjb3VudCBs
YXllcnMgdGhhdCBhcmUgYWZmZWN0ZWQgYnkgdGhlIGNvbHVtbnMgYXMgd2VsbCBoZXJlIHNvIHRo
YXQgdGhleSBjYW4gaGF2ZSBhbiBvcHBvcnR1bml0eQotICAgIC8vIHRvIGFkanVzdCBjb2x1bW4g
cmVjdHMgYWxzby4KLSAgICBSZW5kZXJWaWV3KiB2ID0gdmlldygpOwotICAgIGludCBsZWZ0ID0g
Ym9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKTsKLSAgICBpbnQgdG9wID0gYm9yZGVyVG9wKCkg
KyBwYWRkaW5nVG9wKCk7Ci0gICAgaW50IGN1cnJYID0gc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0g
TFRSID8gYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKSA6IGJvcmRlckxlZnQoKSArIHBhZGRp
bmdMZWZ0KCkgKyBjb250ZW50V2lkdGgoKSAtIGRlc2lyZWRDb2x1bW5XaWR0aDsKLSAgICBpbnQg
Y3VyclkgPSB0b3A7Ci0gICAgdW5zaWduZWQgY29sQ291bnQgPSBkZXNpcmVkQ29sdW1uQ291bnQ7
Ci0gICAgaW50IG1heENvbEJvdHRvbSA9IGJvcmRlclRvcCgpICsgcGFkZGluZ1RvcCgpOwotICAg
IGludCBjb250ZW50Qm90dG9tID0gdG9wICsgYXZhaWxhYmxlSGVpZ2h0OwotICAgIGludCBtaW5p
bXVtQ29sdW1uSGVpZ2h0ID0gLTE7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvbENv
dW50OyBpKyspIHsKLSAgICAgICAgLy8gSWYgd2UgYXJlbid0IGNvbnN0cmFpbmVkLCB0aGVuIHRo
ZSBsYXN0IGNvbHVtbiBjYW4ganVzdCBnZXQgYWxsIHRoZSByZW1haW5pbmcgc3BhY2UuCi0gICAg
ICAgIGlmIChjb21wdXRlSW50cmluc2ljSGVpZ2h0ICYmIGkgPT0gY29sQ291bnQgLSAxKQotICAg
ICAgICAgICAgY29sSGVpZ2h0ID0gYXZhaWxhYmxlSGVpZ2h0OwotCi0gICAgICAgIC8vIFRoaXMg
cmVwcmVzZW50cyB0aGUgcmVhbCBjb2x1bW4gcG9zaXRpb24uCi0gICAgICAgIEludFJlY3QgY29s
UmVjdChjdXJyWCwgdG9wLCBkZXNpcmVkQ29sdW1uV2lkdGgsIGNvbEhlaWdodCk7Ci0KLSAgICAg
ICAgaW50IHRydW5jYXRpb25Qb2ludCA9IHZpc2libGVUb3BPZkhpZ2hlc3RGbG9hdEV4dGVuZGlu
Z0JlbG93KGN1cnJZICsgY29sSGVpZ2h0LCBjb2xIZWlnaHQpOwotCi0gICAgICAgIC8vIEZvciB0
aGUgc2ltdWxhdGVkIHBhaW50LCB3ZSBwcmV0ZW5kIGxpa2UgZXZlcnl0aGluZyBpcyBpbiBvbmUg
bG9uZyBzdHJpcC4KLSAgICAgICAgSW50UmVjdCBwYWdlUmVjdChsZWZ0LCBjdXJyWSwgY29udGVu
dFdpZHRoKCksIHRydW5jYXRpb25Qb2ludCAtIGN1cnJZKTsKLSAgICAgICAgdi0+c2V0UHJpbnRS
ZWN0KHBhZ2VSZWN0KTsKLSAgICAgICAgdi0+c2V0VHJ1bmNhdGVkQXQodHJ1bmNhdGlvblBvaW50
KTsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQoKFBsYXRmb3JtR3JhcGhpY3NDb250
ZXh0KikwKTsKLSAgICAgICAgUGFpbnRJbmZvIHBhaW50SW5mbygmY29udGV4dCwgcGFnZVJlY3Qs
IFBhaW50UGhhc2VGb3JlZ3JvdW5kLCBmYWxzZSwgMCwgMCk7Ci0gICAgICAgIAotICAgICAgICBz
ZXRIYXNDb2x1bW5zKGZhbHNlKTsKLSAgICAgICAgcGFpbnRPYmplY3QocGFpbnRJbmZvLCAwLCAw
KTsKLSAgICAgICAgc2V0SGFzQ29sdW1ucyh0cnVlKTsKLQotICAgICAgICBpZiAoY29tcHV0ZUlu
dHJpbnNpY0hlaWdodCAmJiB2LT5taW5pbXVtQ29sdW1uSGVpZ2h0KCkgPiBvcmlnaW5hbENvbEhl
aWdodCkgewotICAgICAgICAgICAgLy8gVGhlIGluaXRpYWwgY29sdW1uIGhlaWdodCB3YXMgdG9v
IHNtYWxsIHRvIGNvbnRhaW4gb25lIGxpbmUgb2YgdGV4dC4KLSAgICAgICAgICAgIG1pbmltdW1D
b2x1bW5IZWlnaHQgPSBtYXgobWluaW11bUNvbHVtbkhlaWdodCwgdi0+bWluaW11bUNvbHVtbkhl
aWdodCgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGludCBhZGp1c3RlZEJvdHRvbSA9IHYtPmJl
c3RUcnVuY2F0ZWRBdCgpOwotICAgICAgICBpZiAoYWRqdXN0ZWRCb3R0b20gPD0gY3VyclkpCi0g
ICAgICAgICAgICBhZGp1c3RlZEJvdHRvbSA9IHRydW5jYXRpb25Qb2ludDsKLSAgICAgICAgCi0g
ICAgICAgIGNvbFJlY3Quc2V0SGVpZ2h0KGFkanVzdGVkQm90dG9tIC0gY3VyclkpOwotICAgICAg
ICAKLSAgICAgICAgLy8gQWRkIGluIHRoZSBsb3N0IHNwYWNlIHRvIHRoZSBzdWJzZXF1ZW50IGNv
bHVtbnMuCi0gICAgICAgIC8vIEZJWE1FOiBUaGlzIHdpbGwgY3JlYXRlIGEgInN0YWlyY2FzZSIg
ZWZmZWN0IGlmIHRoZXJlIGFyZSBlbm91Z2ggY29sdW1ucywgYnV0IHRoZSBlZmZlY3Qgc2hvdWxk
IGJlIHByZXR0eSBzdWJ0bGUuCi0gICAgICAgIGlmIChjb21wdXRlSW50cmluc2ljSGVpZ2h0KSB7
Ci0gICAgICAgICAgICBpbnQgbG9zdFNwYWNlID0gY29sSGVpZ2h0IC0gY29sUmVjdC5oZWlnaHQo
KTsKLSAgICAgICAgICAgIGlmIChsb3N0U3BhY2UgPiByZW1haW5pbmdTbG9wU3BhY2UpIHsKLSAg
ICAgICAgICAgICAgICAvLyBSZWRlc3RyaWJ1dGUgdGhlIHNwYWNlIGFtb25nIHRoZSByZW1haW5p
bmcgY29sdW1ucy4KLSAgICAgICAgICAgICAgICBpbnQgc3BhY2VUb1JlZGlzdHJpYnV0ZSA9IGxv
c3RTcGFjZSAtIHJlbWFpbmluZ1Nsb3BTcGFjZTsKLSAgICAgICAgICAgICAgICBpbnQgcmVtYWlu
aW5nQ29sdW1ucyA9IGNvbENvdW50IC0gaSArIDE7Ci0gICAgICAgICAgICAgICAgY29sSGVpZ2h0
ICs9IHNwYWNlVG9SZWRpc3RyaWJ1dGUgLyByZW1haW5pbmdDb2x1bW5zOwotICAgICAgICAgICAg
fSAKLSAgICAgICAgICAgIHJlbWFpbmluZ1Nsb3BTcGFjZSA9IG1heCgwLCByZW1haW5pbmdTbG9w
U3BhY2UgLSBsb3N0U3BhY2UpOwotICAgICAgICB9Citib29sIFJlbmRlckJsb2NrOjpsYXlvdXRD
b2x1bW5zKGJvb2wgaGFzU3BlY2lmaWVkUGFnZUhlaWdodCwgaW50IHBhZ2VIZWlnaHQsIExheW91
dFN0YXRlTWFpbnRhaW5lciYgc3RhdGVQdXNoZXIpCit7CisgICAgaWYgKGhhc0NvbHVtbnMoKSkg
eworICAgICAgICBDb2x1bW5JbmZvKiBjb2xJbmZvID0gY29sdW1uSW5mbygpOworICAgICAgICBp
bnQgZGVzaXJlZENvbHVtbkNvdW50ID0gY29sSW5mby0+ZGVzaXJlZENvbHVtbkNvdW50KCk7Cisg
ICAgICAgIGlmICghaGFzU3BlY2lmaWVkUGFnZUhlaWdodCAmJiBjb250ZW50SGVpZ2h0KCkgPiBw
YWdlSGVpZ2h0ICogZGVzaXJlZENvbHVtbkNvdW50KSB7CisgICAgICAgICAgICAvLyBOb3cgdGhh
dCB3ZSBrbm93IHRoZSBpbnRyaW5zaWMgaGVpZ2h0IG9mIHRoZSBjb2x1bW5zLCB3ZSBoYXZlIHRv
IHJlYmFsYW5jZSB0aGVtLgorICAgICAgICAgICAgaW50IGNvbHVtbkhlaWdodCA9IG1heChjb2xJ
bmZvLT5taW5pbXVtQ29sdW1uSGVpZ2h0KCksIChpbnQpY2VpbGYoKGZsb2F0KWNvbnRlbnRIZWln
aHQoKSAvIGRlc2lyZWRDb2x1bW5Db3VudCkpOworICAgICAgICAgICAgaWYgKGNvbHVtbkhlaWdo
dCA+IDApIHsKKyAgICAgICAgICAgICAgICBzdGF0ZVB1c2hlci5wb3AoKTsKKyAgICAgICAgICAg
ICAgICBtX2V2ZXJIYWRMYXlvdXQgPSB0cnVlOworICAgICAgICAgICAgICAgIGxheW91dEJsb2Nr
KGZhbHNlLCBjb2x1bW5IZWlnaHQpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgICAgfQorICAgICAgICB9IAogICAgICAgICAKLSAgICAgICAgaWYgKHN0eWxlKCktPmRp
cmVjdGlvbigpID09IExUUikKLSAgICAgICAgICAgIGN1cnJYICs9IGRlc2lyZWRDb2x1bW5XaWR0
aCArIGNvbEdhcDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY3VyclggLT0gKGRlc2lyZWRD
b2x1bW5XaWR0aCArIGNvbEdhcCk7Ci0KLSAgICAgICAgY3VyclkgKz0gY29sUmVjdC5oZWlnaHQo
KTsKLSAgICAgICAgYXZhaWxhYmxlSGVpZ2h0IC09IGNvbFJlY3QuaGVpZ2h0KCk7CisgICAgICAg
IGlmIChwYWdlSGVpZ2h0KSAvLyBGSVhNRTogU2hvdWxkIHdlIHVzZSBsb3dlc3RQb3NpdGlvbiAo
ZXhjbHVkaW5nIG91ciBwb3NpdGlvbmVkIG9iamVjdHMpIGluc3RlYWQgb2YgY29udGVudEhlaWdo
dCgpPworICAgICAgICAgICAgY29sSW5mby0+c2V0Q29sdW1uQ291bnRBbmRIZWlnaHQoY2VpbGYo
KGZsb2F0KWNvbnRlbnRIZWlnaHQoKSAvIHBhZ2VIZWlnaHQpLCBwYWdlSGVpZ2h0KTsKIAotICAg
ICAgICBtYXhDb2xCb3R0b20gPSBtYXgoY29sUmVjdC5ib3R0b20oKSwgbWF4Q29sQm90dG9tKTsK
LQotICAgICAgICBpbmZvLT5hZGRDb2x1bW5SZWN0KGNvbFJlY3QpOwotICAgICAgICAKLSAgICAg
ICAgLy8gU3RhcnQgYWRkaW5nIGluIG1vcmUgY29sdW1ucyBhcyBsb25nIGFzIHRoZXJlJ3Mgc3Rp
bGwgY29udGVudCBsZWZ0LgotICAgICAgICBpZiAoY3VyclkgPCBlbmRPZkNvbnRlbnQgJiYgaSA9
PSBjb2xDb3VudCAtIDEgJiYgKGNvbXB1dGVJbnRyaW5zaWNIZWlnaHQgfHwgY29udGVudEhlaWdo
dCgpKSkKLSAgICAgICAgICAgIGNvbENvdW50Kys7Ci0gICAgfQorICAgICAgICBpZiAoY29sdW1u
Q291bnQoY29sSW5mbykpIHsKKyAgICAgICAgICAgIEludFJlY3QgbGFzdFJlY3QgPSBjb2x1bW5S
ZWN0QXQoY29sSW5mbywgY29sdW1uQ291bnQoY29sSW5mbykgLSAxKTsKKyAgICAgICAgICAgIGlu
dCBvdmVyZmxvd0xlZnQgPSBzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBSVEwgPyBtaW4oMCwgbGFz
dFJlY3QueCgpKSA6IDA7CisgICAgICAgICAgICBpbnQgb3ZlcmZsb3dSaWdodCA9IHN0eWxlKCkt
PmRpcmVjdGlvbigpID09IExUUiA/IG1heCh3aWR0aCgpLCBsYXN0UmVjdC54KCkgKyBsYXN0UmVj
dC53aWR0aCgpKSA6IDA7CisgICAgICAgICAgICBpbnQgb3ZlcmZsb3dIZWlnaHQgPSBib3JkZXJU
b3AoKSArIHBhZGRpbmdUb3AoKSArIGNvbEluZm8tPmNvbHVtbkhlaWdodCgpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBzZXRIZWlnaHQob3ZlcmZsb3dIZWlnaHQgKyBib3JkZXJCb3R0b20o
KSArIHBhZGRpbmdCb3R0b20oKSArIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoKSk7CiAKLSAg
ICBpZiAobWluaW11bUNvbHVtbkhlaWdodCA+PSAwKSB7Ci0gICAgICAgIC8vIElmIG9yaWdpbmFs
Q29sSGVpZ2h0IHdhcyB0b28gc21hbGwsIHdlIG5lZWQgdG8gdHJ5IHRvIGxheW91dCBhZ2Fpbi4K
LSAgICAgICAgcmV0dXJuIGxheW91dENvbHVtbnMoZW5kT2ZDb250ZW50LCBtaW5pbXVtQ29sdW1u
SGVpZ2h0KTsKKyAgICAgICAgICAgIG1fb3ZlcmZsb3cuY2xlYXIoKTsKKyAgICAgICAgICAgIGFk
ZExheW91dE92ZXJmbG93KEludFJlY3Qob3ZlcmZsb3dMZWZ0LCAwLCBvdmVyZmxvd1JpZ2h0IC0g
b3ZlcmZsb3dMZWZ0LCBvdmVyZmxvd0hlaWdodCkpOworICAgICAgICB9CiAgICAgfQotCi0gICAg
aW50IG92ZXJmbG93UmlnaHQgPSBtYXgod2lkdGgoKSwgY3VyclggLSBjb2xHYXApOwotICAgIGlu
dCBvdmVyZmxvd0xlZnQgPSBtaW4oMCwgY3VyclggKyBkZXNpcmVkQ29sdW1uV2lkdGggKyBjb2xH
YXApOwotICAgIGludCBvdmVyZmxvd0hlaWdodCA9IG1heENvbEJvdHRvbTsKLSAgICBpbnQgdG9B
ZGQgPSBib3JkZXJCb3R0b20oKSArIHBhZGRpbmdCb3R0b20oKSArIGhvcml6b250YWxTY3JvbGxi
YXJIZWlnaHQoKTsKLSAgICAgICAgCi0gICAgaWYgKGNvbXB1dGVJbnRyaW5zaWNIZWlnaHQpCi0g
ICAgICAgIHNldEhlaWdodChtYXhDb2xCb3R0b20gKyB0b0FkZCk7Ci0KLSAgICBtX292ZXJmbG93
LmNsZWFyKCk7Ci0gICAgYWRkTGF5b3V0T3ZlcmZsb3coSW50UmVjdChvdmVyZmxvd0xlZnQsIDAs
IG92ZXJmbG93UmlnaHQgLSBvdmVyZmxvd0xlZnQsIG92ZXJmbG93SGVpZ2h0KSk7Ci0KLSAgICB2
LT5zZXRQcmludFJlY3QoSW50UmVjdCgpKTsKLSAgICB2LT5zZXRUcnVuY2F0ZWRBdCgwKTsKICAg
ICAKLSAgICBBU1NFUlQoY29sQ291bnQgPT0gaW5mby0+Y29sdW1uQ291bnQoKSk7Ci0gICAgCi0g
ICAgcmV0dXJuIGNvbnRlbnRCb3R0b207CisgICAgcmV0dXJuIGZhbHNlOwogfQogCiB2b2lkIFJl
bmRlckJsb2NrOjphZGp1c3RQb2ludFRvQ29sdW1uQ29udGVudHMoSW50UG9pbnQmIHBvaW50KSBj
b25zdApAQCAtNDMzMCwxNyArNDQ2MCwxNyBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGp1c3RQb2lu
dFRvQ29sdW1uQ29uCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBDb2x1bW5JbmZvKiBjb2xJ
bmZvID0gY29sdW1uSW5mbygpOwotICAgIGlmICghY29sSW5mby0+Y29sdW1uQ291bnQoKSkKKyAg
ICBpZiAoIWNvbHVtbkNvdW50KGNvbEluZm8pKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBE
ZXRlcm1pbmUgd2hpY2ggY29sdW1ucyB3ZSBpbnRlcnNlY3QuCiAgICAgaW50IGNvbEdhcCA9IGNv
bHVtbkdhcCgpOwogICAgIGludCBsZWZ0R2FwID0gY29sR2FwIC8gMjsKLSAgICBJbnRQb2ludCBj
b2x1bW5Qb2ludChjb2xJbmZvLT5jb2x1bW5SZWN0QXQoMCkubG9jYXRpb24oKSk7CisgICAgSW50
UG9pbnQgY29sdW1uUG9pbnQoY29sdW1uUmVjdEF0KGNvbEluZm8sIDApLmxvY2F0aW9uKCkpOwog
ICAgIGludCB5T2Zmc2V0ID0gMDsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY29sSW5m
by0+Y29sdW1uQ291bnQoKTsgaSsrKSB7CiAgICAgICAgIC8vIEFkZCBpbiBoYWxmIHRoZSBjb2x1
bW4gZ2FwIHRvIHRoZSBsZWZ0IGFuZCByaWdodCBvZiB0aGUgcmVjdC4KLSAgICAgICAgSW50UmVj
dCBjb2xSZWN0ID0gY29sSW5mby0+Y29sdW1uUmVjdEF0KGkpOworICAgICAgICBJbnRSZWN0IGNv
bFJlY3QgPSBjb2x1bW5SZWN0QXQoY29sSW5mbywgaSk7CiAgICAgICAgIEludFJlY3QgZ2FwQW5k
Q29sdW1uUmVjdChjb2xSZWN0LngoKSAtIGxlZnRHYXAsIGNvbFJlY3QueSgpLCBjb2xSZWN0Lndp
ZHRoKCkgKyBjb2xHYXAsIGNvbFJlY3QuaGVpZ2h0KCkpOwogCiAgICAgICAgIGlmIChwb2ludC54
KCkgPj0gZ2FwQW5kQ29sdW1uUmVjdC54KCkgJiYgcG9pbnQueCgpIDwgZ2FwQW5kQ29sdW1uUmVj
dC5yaWdodCgpKSB7CkBAIC00Mzc4LDcgKzQ1MDgsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGp1
c3RSZWN0Rm9yQ29sdW1ucyhJCiAgICAgSW50UmVjdCByZXN1bHQ7CiAgICAgCiAgICAgLy8gRGV0
ZXJtaW5lIHdoaWNoIGNvbHVtbnMgd2UgaW50ZXJzZWN0LgotICAgIHVuc2lnbmVkIGNvbENvdW50
ID0gY29sSW5mby0+Y29sdW1uQ291bnQoKTsKKyAgICB1bnNpZ25lZCBjb2xDb3VudCA9IGNvbHVt
bkNvdW50KGNvbEluZm8pOwogICAgIGlmICghY29sQ291bnQpCiAgICAgICAgIHJldHVybjsKICAg
ICAKQEAgLTQzODYsNyArNDUxNiw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkanVzdFJlY3RGb3JD
b2x1bW5zKEkKICAgICAKICAgICBpbnQgY3VycllPZmZzZXQgPSAwOwogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBjb2xDb3VudDsgaSsrKSB7Ci0gICAgICAgIEludFJlY3QgY29sUmVjdCA9
IGNvbEluZm8tPmNvbHVtblJlY3RBdChpKTsKKyAgICAgICAgSW50UmVjdCBjb2xSZWN0ID0gY29s
dW1uUmVjdEF0KGNvbEluZm8sIGkpOwogICAgICAgICBpbnQgY3VyclhPZmZzZXQgPSBjb2xSZWN0
LngoKSAtIGxlZnQ7CiAgICAgICAgIAogICAgICAgICBJbnRSZWN0IHJlcGFpbnRSZWN0ID0gcjsK
QEAgLTQ0MTIsOSArNDU0Miw5IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkanVzdEZvckNvbHVtbnMo
SW50U2kKIAogICAgIGludCBsZWZ0ID0gYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKTsKICAg
ICBpbnQgeU9mZnNldCA9IDA7Ci0gICAgc2l6ZV90IGNvbHVtbkNvdW50ID0gY29sSW5mby0+Y29s
dW1uQ291bnQoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvbHVtbkNvdW50OyArK2kp
IHsKLSAgICAgICAgSW50UmVjdCBjb2x1bW5SZWN0ID0gY29sSW5mby0+Y29sdW1uUmVjdEF0KGkp
OworICAgIHNpemVfdCBjb2xDb3VudCA9IGNvbHVtbkNvdW50KGNvbEluZm8pOworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgY29sQ291bnQ7ICsraSkgeworICAgICAgICBJbnRSZWN0IGNvbHVt
blJlY3QgPSBjb2x1bW5SZWN0QXQoY29sSW5mbywgaSk7CiAgICAgICAgIGludCB4T2Zmc2V0ID0g
Y29sdW1uUmVjdC54KCkgLSBsZWZ0OwogICAgICAgICBpZiAocG9pbnQueSgpIDwgY29sdW1uUmVj
dC5ib3R0b20oKSArIHlPZmZzZXQpIHsKICAgICAgICAgICAgIG9mZnNldC5leHBhbmQoeE9mZnNl
dCwgLXlPZmZzZXQpOwpAQCAtNTM5MiwyNCArNTUyMiw0NCBAQCB2b2lkIFJlbmRlckJsb2NrOjpj
bGVhclRydW5jYXRpb24oKQogCiB2b2lkIFJlbmRlckJsb2NrOjpzZXRNYXhUb3BNYXJnaW5zKGlu
dCBwb3MsIGludCBuZWcpCiB7Ci0gICAgaWYgKCFtX21heE1hcmdpbikgewotICAgICAgICBpZiAo
cG9zID09IE1heE1hcmdpbjo6dG9wUG9zRGVmYXVsdCh0aGlzKSAmJiBuZWcgPT0gTWF4TWFyZ2lu
Ojp0b3BOZWdEZWZhdWx0KHRoaXMpKQorICAgIGlmICghbV9yYXJlRGF0YSkgeworICAgICAgICBp
ZiAocG9zID09IFJlbmRlckJsb2NrUmFyZURhdGE6OnRvcFBvc0RlZmF1bHQodGhpcykgJiYgbmVn
ID09IFJlbmRlckJsb2NrUmFyZURhdGE6OnRvcE5lZ0RlZmF1bHQodGhpcykpCiAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIG1fbWF4TWFyZ2luID0gbmV3IE1heE1hcmdpbih0aGlzKTsKKyAg
ICAgICAgbV9yYXJlRGF0YSA9IG5ldyBSZW5kZXJCbG9ja1JhcmVEYXRhKHRoaXMpOwogICAgIH0K
LSAgICBtX21heE1hcmdpbi0+bV90b3BQb3MgPSBwb3M7Ci0gICAgbV9tYXhNYXJnaW4tPm1fdG9w
TmVnID0gbmVnOworICAgIG1fcmFyZURhdGEtPm1fdG9wUG9zID0gcG9zOworICAgIG1fcmFyZURh
dGEtPm1fdG9wTmVnID0gbmVnOwogfQogCiB2b2lkIFJlbmRlckJsb2NrOjpzZXRNYXhCb3R0b21N
YXJnaW5zKGludCBwb3MsIGludCBuZWcpCiB7Ci0gICAgaWYgKCFtX21heE1hcmdpbikgewotICAg
ICAgICBpZiAocG9zID09IE1heE1hcmdpbjo6Ym90dG9tUG9zRGVmYXVsdCh0aGlzKSAmJiBuZWcg
PT0gTWF4TWFyZ2luOjpib3R0b21OZWdEZWZhdWx0KHRoaXMpKQorICAgIGlmICghbV9yYXJlRGF0
YSkgeworICAgICAgICBpZiAocG9zID09IFJlbmRlckJsb2NrUmFyZURhdGE6OmJvdHRvbVBvc0Rl
ZmF1bHQodGhpcykgJiYgbmVnID09IFJlbmRlckJsb2NrUmFyZURhdGE6OmJvdHRvbU5lZ0RlZmF1
bHQodGhpcykpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fcmFyZURhdGEgPSBuZXcg
UmVuZGVyQmxvY2tSYXJlRGF0YSh0aGlzKTsKKyAgICB9CisgICAgbV9yYXJlRGF0YS0+bV9ib3R0
b21Qb3MgPSBwb3M7CisgICAgbV9yYXJlRGF0YS0+bV9ib3R0b21OZWcgPSBuZWc7Cit9CisKK3Zv
aWQgUmVuZGVyQmxvY2s6OnNldFBhZ2luYXRpb25TdHJ1dChpbnQgc3RydXQpCit7CisgICAgaWYg
KCFtX3JhcmVEYXRhKSB7CisgICAgICAgIGlmIChzdHJ1dCA9PSAwKQogICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICBtX21heE1hcmdpbiA9IG5ldyBNYXhNYXJnaW4odGhpcyk7CisgICAgICAg
IG1fcmFyZURhdGEgPSBuZXcgUmVuZGVyQmxvY2tSYXJlRGF0YSh0aGlzKTsKICAgICB9Ci0gICAg
bV9tYXhNYXJnaW4tPm1fYm90dG9tUG9zID0gcG9zOwotICAgIG1fbWF4TWFyZ2luLT5tX2JvdHRv
bU5lZyA9IG5lZzsKKyAgICBtX3JhcmVEYXRhLT5tX3BhZ2luYXRpb25TdHJ1dCA9IHN0cnV0Owor
fQorCit2b2lkIFJlbmRlckJsb2NrOjpzZXRQYWdlWShpbnQgeSkKK3sKKyAgICBpZiAoIW1fcmFy
ZURhdGEpIHsKKyAgICAgICAgaWYgKHkgPT0gMCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgbV9yYXJlRGF0YSA9IG5ldyBSZW5kZXJCbG9ja1JhcmVEYXRhKHRoaXMpOworICAgIH0KKyAg
ICBtX3JhcmVEYXRhLT5tX3BhZ2VZID0geTsKIH0KIAogdm9pZCBSZW5kZXJCbG9jazo6YWJzb2x1
dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQgdHgsIGludCB0eSkKQEAgLTU2NzAs
NiArNTgyMCw5OCBAQCBSZW5kZXJCbG9jayogUmVuZGVyQmxvY2s6OmNyZWF0ZUFub255bW91CiAg
ICAgcmV0dXJuIG5ld0JveDsKIH0KIAoraW50IFJlbmRlckJsb2NrOjpuZXh0UGFnZVRvcChpbnQg
eVBvcykgY29uc3QKK3sKKyAgICBMYXlvdXRTdGF0ZSogbGF5b3V0U3RhdGUgPSB2aWV3KCktPmxh
eW91dFN0YXRlKCk7CisgICAgaWYgKCFsYXlvdXRTdGF0ZS0+bV9wYWdlSGVpZ2h0KQorICAgICAg
ICByZXR1cm4geVBvczsKKyAgICAKKyAgICAvLyBUaGUgeVBvcyBpcyBpbiBvdXIgY29vcmRpbmF0
ZSBzcGFjZS4gIFdlIGNhbiBhZGQgaW4gb3VyIHB1c2hlZCBvZmZzZXQuCisgICAgaW50IHBhZ2VI
ZWlnaHQgPSBsYXlvdXRTdGF0ZS0+bV9wYWdlSGVpZ2h0OworICAgIGludCByZW1haW5pbmdIZWln
aHQgPSBwYWdlSGVpZ2h0IC0gKChsYXlvdXRTdGF0ZS0+bV9sYXlvdXRPZmZzZXQgLSBsYXlvdXRT
dGF0ZS0+bV9wYWdlT2Zmc2V0KS5oZWlnaHQoKSArIHlQb3MpICUgcGFnZUhlaWdodDsKKyAgICBy
ZXR1cm4geVBvcyArIHJlbWFpbmluZ0hlaWdodDsKK30KKworaW50IFJlbmRlckJsb2NrOjphcHBs
eUJlZm9yZUJyZWFrKFJlbmRlckJveCogY2hpbGQsIGludCB5UG9zKQoreworICAgIGJvb2wgY2hl
Y2tQYWdlQnJlYWtzID0gZG9jdW1lbnQoKS0+cGFnaW5hdGVkKCkgJiYgZG9jdW1lbnQoKS0+c2V0
dGluZ3MoKS0+cGFnaW5hdGVEdXJpbmdMYXlvdXRFbmFibGVkKCk7CisgICAgYm9vbCBjaGVja0Nv
bHVtbkJyZWFrcyA9IHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+cGFnaW5hdGluZ0NvbHVtbnMoKTsK
KyAgICBib29sIGNoZWNrQmVmb3JlQWx3YXlzID0gKGNoZWNrUGFnZUJyZWFrcyAmJiBjaGlsZC0+
c3R5bGUoKS0+cGFnZUJyZWFrQmVmb3JlKCkgPT0gUEJBTFdBWVMpIHx8IChjaGVja0NvbHVtbkJy
ZWFrcyAmJiBjaGlsZC0+c3R5bGUoKS0+Y29sdW1uQnJlYWtCZWZvcmUoKSA9PSBQQkFMV0FZUyk7
CisgICAgaWYgKGNoZWNrQmVmb3JlQWx3YXlzKQorICAgICAgICByZXR1cm4gbmV4dFBhZ2VUb3Ao
eVBvcyk7CisgICAgcmV0dXJuIHlQb3M7Cit9CisKK2ludCBSZW5kZXJCbG9jazo6YXBwbHlBZnRl
ckJyZWFrKFJlbmRlckJveCogY2hpbGQsIGludCB5UG9zLCBNYXJnaW5JbmZvJiBtYXJnaW5JbmZv
KQoreworICAgIGJvb2wgY2hlY2tQYWdlQnJlYWtzID0gZG9jdW1lbnQoKS0+cGFnaW5hdGVkKCkg
JiYgZG9jdW1lbnQoKS0+c2V0dGluZ3MoKS0+cGFnaW5hdGVEdXJpbmdMYXlvdXRFbmFibGVkKCk7
CisgICAgYm9vbCBjaGVja0NvbHVtbkJyZWFrcyA9IHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+cGFn
aW5hdGluZ0NvbHVtbnMoKTsKKyAgICBib29sIGNoZWNrQWZ0ZXJBbHdheXMgPSAoY2hlY2tQYWdl
QnJlYWtzICYmIGNoaWxkLT5zdHlsZSgpLT5wYWdlQnJlYWtBZnRlcigpID09IFBCQUxXQVlTKSB8
fCAoY2hlY2tDb2x1bW5CcmVha3MgJiYgY2hpbGQtPnN0eWxlKCktPmNvbHVtbkJyZWFrQWZ0ZXIo
KSA9PSBQQkFMV0FZUyk7CisgICAgaWYgKGNoZWNrQWZ0ZXJBbHdheXMpIHsKKyAgICAgICAgbWFy
Z2luSW5mby5zZXRCb3R0b21RdWlyayh0cnVlKTsgLy8gQ2F1c2UgbWFyZ2lucyB0byBiZSBkaXNj
YXJkZWQgZm9yIGFueSBmb2xsb3dpbmcgY29udGVudC4KKyAgICAgICAgcmV0dXJuIG5leHRQYWdl
VG9wKHlQb3MpOworICAgIH0KKyAgICByZXR1cm4geVBvczsKK30KKworaW50IFJlbmRlckJsb2Nr
OjphZGp1c3RGb3JVbnNwbGl0dGFibGVDaGlsZChSZW5kZXJCb3gqIGNoaWxkLCBpbnQgeVBvcywg
Ym9vbCBpbmNsdWRlTWFyZ2lucykKK3sKKyAgICBib29sIGlzVW5zcGxpdHRhYmxlID0gY2hpbGQt
PmlzUmVwbGFjZWQoKSB8fCBjaGlsZC0+c2Nyb2xsc092ZXJmbG93KCk7CisgICAgaWYgKCFpc1Vu
c3BsaXR0YWJsZSkKKyAgICAgICAgcmV0dXJuIHlQb3M7CisgICAgaW50IGNoaWxkSGVpZ2h0ID0g
Y2hpbGQtPmhlaWdodCgpICsgKGluY2x1ZGVNYXJnaW5zID8gY2hpbGQtPm1hcmdpblRvcCgpICsg
Y2hpbGQtPm1hcmdpbkJvdHRvbSgpIDogMCk7CisgICAgTGF5b3V0U3RhdGUqIGxheW91dFN0YXRl
ID0gdmlldygpLT5sYXlvdXRTdGF0ZSgpOworICAgIGlmIChsYXlvdXRTdGF0ZS0+bV9jb2x1bW5J
bmZvKQorICAgICAgICBsYXlvdXRTdGF0ZS0+bV9jb2x1bW5JbmZvLT51cGRhdGVNaW5pbXVtQ29s
dW1uSGVpZ2h0KGNoaWxkSGVpZ2h0KTsKKyAgICBpbnQgcGFnZUhlaWdodCA9IGxheW91dFN0YXRl
LT5tX3BhZ2VIZWlnaHQ7CisgICAgaWYgKCFwYWdlSGVpZ2h0IHx8IGNoaWxkSGVpZ2h0ID4gcGFn
ZUhlaWdodCkKKyAgICAgICAgcmV0dXJuIHlQb3M7CisgICAgaW50IHJlbWFpbmluZ0hlaWdodCA9
IHBhZ2VIZWlnaHQgLSAoKGxheW91dFN0YXRlLT5tX2xheW91dE9mZnNldCAtIGxheW91dFN0YXRl
LT5tX3BhZ2VPZmZzZXQpLmhlaWdodCgpICsgeVBvcykgJSBwYWdlSGVpZ2h0OworICAgIGlmIChy
ZW1haW5pbmdIZWlnaHQgPCBjaGlsZEhlaWdodCkKKyAgICAgICAgcmV0dXJuIHlQb3MgKyByZW1h
aW5pbmdIZWlnaHQ7CisgICAgcmV0dXJuIHlQb3M7Cit9CisKK3ZvaWQgUmVuZGVyQmxvY2s6OmFk
anVzdExpbmVQb3NpdGlvbkZvclBhZ2luYXRpb24oUm9vdElubGluZUJveCogbGluZUJveCwgaW50
JiBkZWx0YSkKK3sKKyAgICAvLyBGSVhNRTogRm9yIG5vdyB3ZSBwYWdpbmF0ZSB1c2luZyBsaW5l
IG92ZXJmbG93LiAgVGhpcyBlbnN1cmVzIHRoYXQgbGluZXMgZG9uJ3Qgb3ZlcmxhcCBhdCBhbGwg
d2hlbiB3ZQorICAgIC8vIHB1dCBhIHN0cnV0IGJldHdlZW4gdGhlbSBmb3IgcGFnaW5hdGlvbiBw
dXJwb3Nlcy4gIEhvd2V2ZXIsIHRoaXMgcmVhbGx5IGlzbid0IHRoZSBkZXNpcmVkIHJlbmRlcmlu
Zywgc2luY2UKKyAgICAvLyB0aGUgbGluZSBvbiB0aGUgdG9wIG9mIHRoZSBuZXh0IHBhZ2Ugd2ls
bCBhcHBlYXIgdG9vIGZhciBkb3duIHJlbGF0aXZlIHRvIHRoZSBzYW1lIGtpbmQgb2YgbGluZSBh
dCB0aGUgdG9wCisgICAgLy8gb2YgdGhlIGZpcnN0IGNvbHVtbi4KKyAgICAvLworICAgIC8vIFRo
ZSByZW5kZXJpbmcgd2Ugd291bGQgbGlrZSB0byBzZWUgaXMgb25lIHdoZXJlIHRoZSBsaW5lVG9w
IGlzIGF0IHRoZSB0b3Agb2YgdGhlIGNvbHVtbiwgYW5kIGFueSBsaW5lIG92ZXJmbG93CisgICAg
Ly8gc2ltcGx5IHNwaWxscyBvdXQgYWJvdmUgdGhlIHRvcCBvZiB0aGUgY29sdW1uLiAgVGhpcyBl
ZmZlY3Qgd291bGQgbWF0Y2ggd2hhdCBoYXBwZW5zIGF0IHRoZSB0b3Agb2YgdGhlIGZpcnN0IGNv
bHVtbi4KKyAgICAvLyBXZSBjYW4ndCBhY2hpZXZlIHRoaXMgcmVuZGVyaW5nLCBob3dldmVyLCB1
bnRpbCB3ZSBzdG9wIGNvbHVtbnMgZnJvbSBjbGlwcGluZyB0byB0aGUgY29sdW1uIGJvdW5kcyAo
dGh1cyBhbGxvd2luZworICAgIC8vIGZvciBvdmVyZmxvdyB0byBvY2N1ciksIGFuZCB0aGVuIGNh
Y2hlIHZpc2libGUgb3ZlcmZsb3cgZm9yIGVhY2ggY29sdW1uIHJlY3QuCisgICAgLy8KKyAgICAv
LyBGdXJ0aGVybW9yZSwgdGhlIHBhaW50IHdlIGhhdmUgdG8gZG8gd2hlbiBhIGNvbHVtbiBoYXMg
b3ZlcmZsb3cgaGFzIHRvIGJlIHNwZWNpYWwuICBXZSBuZWVkIHRvIGV4Y2x1ZGUKKyAgICAvLyBj
b250ZW50IHRoYXQgcGFpbnRzIGluIGEgcHJldmlvdXMgY29sdW1uIChhbmQgY29udGVudCB0aGF0
IHBhaW50cyBpbiB0aGUgZm9sbG93aW5nIGNvbHVtbikuCisgICAgLy8KKyAgICAvLyBGSVhNRTog
QW5vdGhlciBwcm9ibGVtIHdpdGggc2ltcGx5IG1vdmluZyBsaW5lcyBpcyB0aGF0IHRoZSBhdmFp
bGFibGUgbGluZSB3aWR0aCBtYXkgY2hhbmdlIChiZWNhdXNlIG9mIGZsb2F0cykuCisgICAgLy8g
VGVjaG5pY2FsbHkgaWYgdGhlIGxvY2F0aW9uIHdlIG1vdmUgdGhlIGxpbmUgdG8gaGFzIGEgZGlm
ZmVyZW50IGxpbmUgd2lkdGggdGhhbiBvdXIgb2xkIHBvc2l0aW9uLCB0aGVuIHdlIG5lZWQgdG8g
ZGlydHkgdGhlCisgICAgLy8gbGluZSBhbmQgYWxsIGZvbGxvd2luZyBsaW5lcy4KKyAgICBMYXlv
dXRTdGF0ZSogbGF5b3V0U3RhdGUgPSB2aWV3KCktPmxheW91dFN0YXRlKCk7CisgICAgaW50IHBh
Z2VIZWlnaHQgPSBsYXlvdXRTdGF0ZS0+bV9wYWdlSGVpZ2h0OworICAgIGludCB5UG9zID0gbGlu
ZUJveC0+dG9wVmlzaWJsZU92ZXJmbG93KCk7CisgICAgaW50IGxpbmVIZWlnaHQgPSBsaW5lQm94
LT5ib3R0b21WaXNpYmxlT3ZlcmZsb3coKSAtIHlQb3M7CisgICAgaWYgKGxheW91dFN0YXRlLT5t
X2NvbHVtbkluZm8pCisgICAgICAgIGxheW91dFN0YXRlLT5tX2NvbHVtbkluZm8tPnVwZGF0ZU1p
bmltdW1Db2x1bW5IZWlnaHQobGluZUhlaWdodCk7CisgICAgeVBvcyArPSBkZWx0YTsKKyAgICBs
aW5lQm94LT5zZXRQYWdpbmF0aW9uU3RydXQoMCk7CisgICAgaWYgKCFwYWdlSGVpZ2h0IHx8IGxp
bmVIZWlnaHQgPiBwYWdlSGVpZ2h0KQorICAgICAgICByZXR1cm47CisgICAgaW50IHJlbWFpbmlu
Z0hlaWdodCA9IHBhZ2VIZWlnaHQgLSAoKGxheW91dFN0YXRlLT5tX2xheW91dE9mZnNldCAtIGxh
eW91dFN0YXRlLT5tX3BhZ2VPZmZzZXQpLmhlaWdodCgpICsgeVBvcykgJSBwYWdlSGVpZ2h0Owor
ICAgIGlmIChyZW1haW5pbmdIZWlnaHQgPCBsaW5lSGVpZ2h0KSB7CisgICAgICAgIGludCB0b3Rh
bEhlaWdodCA9IGxpbmVIZWlnaHQgKyBtYXgoMCwgeVBvcyk7CisgICAgICAgIGlmIChsaW5lQm94
ID09IGZpcnN0Um9vdEJveCgpICYmIHRvdGFsSGVpZ2h0IDwgcGFnZUhlaWdodCAmJiAhaXNQb3Np
dGlvbmVkKCkgJiYgIWlzVGFibGVDZWxsKCkpCisgICAgICAgICAgICBzZXRQYWdpbmF0aW9uU3Ry
dXQocmVtYWluaW5nSGVpZ2h0ICsgbWF4KDAsIHlQb3MpKTsKKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICBkZWx0YSArPSByZW1haW5pbmdIZWlnaHQ7CisgICAgICAgICAgICBsaW5lQm94LT5z
ZXRQYWdpbmF0aW9uU3RydXQocmVtYWluaW5nSGVpZ2h0KTsKKyAgICAgICAgfQorICAgIH0gIAor
fQorIAogY29uc3QgY2hhciogUmVuZGVyQmxvY2s6OnJlbmRlck5hbWUoKSBjb25zdAogewogICAg
IGlmIChpc0JvZHkoKSkKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAkocmV2aXNpb24gNjY5
MDMpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNCw2ICszNCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ29sdW1uSW5mbzsK
IGNsYXNzIElubGluZUl0ZXJhdG9yOworY2xhc3MgTGF5b3V0U3RhdGVNYWludGFpbmVyOwogY2xh
c3MgUmVuZGVySW5saW5lOwogCiBzdHJ1Y3QgQmlkaVJ1bjsKQEAgLTcwLDcgKzcxLDcgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZChSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBS
ZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gMCk7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUNo
aWxkKFJlbmRlck9iamVjdCopOwogCi0gICAgdmlydHVhbCB2b2lkIGxheW91dEJsb2NrKGJvb2wg
cmVsYXlvdXRDaGlsZHJlbik7CisgICAgdmlydHVhbCB2b2lkIGxheW91dEJsb2NrKGJvb2wgcmVs
YXlvdXRDaGlsZHJlbiwgaW50IHBhZ2VIZWlnaHQgPSAwKTsKIAogICAgIHZvaWQgaW5zZXJ0UG9z
aXRpb25lZE9iamVjdChSZW5kZXJCb3gqKTsKICAgICB2b2lkIHJlbW92ZVBvc2l0aW9uZWRPYmpl
Y3QoUmVuZGVyQm94Kik7CkBAIC04OSw2ICs5MCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgbWFy
a0FsbERlc2NlbmRhbnRzV2l0aEZsb2F0c0ZvckxheW91dChSZW5kZXJCb3gqIGZsb2F0VG9SZW1v
dmUgPSAwLCBib29sIGluTGF5b3V0ID0gdHJ1ZSk7CiAgICAgdm9pZCBtYXJrUG9zaXRpb25lZE9i
amVjdHNGb3JMYXlvdXQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgbWFya0Rlc2NlbmRhbnRCbG9ja3NB
bmRMaW5lc0ZvckxheW91dChib29sIGluTGF5b3V0ID0gdHJ1ZSk7CiAKICAgICBib29sIGNvbnRh
aW5zRmxvYXRzKCkgeyByZXR1cm4gbV9mbG9hdGluZ09iamVjdHMgJiYgIW1fZmxvYXRpbmdPYmpl
Y3RzLT5pc0VtcHR5KCk7IH0KICAgICBib29sIGNvbnRhaW5zRmxvYXQoUmVuZGVyT2JqZWN0Kik7
CkBAIC0xNTEsNiArMTUzLDE1IEBAIHB1YmxpYzoKIAogICAgIENvbHVtbkluZm8qIGNvbHVtbklu
Zm8oKSBjb25zdDsKICAgICBpbnQgY29sdW1uR2FwKCkgY29uc3Q7CisgICAgCisgICAgLy8gVGhl
c2UgdHdvIGZ1bmN0aW9ucyB0YWtlIHRoZSBDb2x1bW5JbmZvKiB0byBhdm9pZCByZXBlYXRlZCBs
b29rdXBzIG9mIHRoZSBpbmZvIGluIHRoZSBnbG9iYWwgSGFzaE1hcC4KKyAgICB1bnNpZ25lZCBj
b2x1bW5Db3VudChDb2x1bW5JbmZvKikgY29uc3Q7CisgICAgSW50UmVjdCBjb2x1bW5SZWN0QXQo
Q29sdW1uSW5mbyosIHVuc2lnbmVkKSBjb25zdDsKKworICAgIGludCBwYWdpbmF0aW9uU3RydXQo
KSBjb25zdCB7IHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+bV9wYWdpbmF0aW9uU3Ry
dXQgOiAwOyB9CisgICAgaW50IHBhZ2VZKCkgY29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1f
cmFyZURhdGEtPm1fcGFnZVkgOiAwOyB9CisgICAgdm9pZCBzZXRQYWdpbmF0aW9uU3RydXQoaW50
IHN0cnV0KTsKKyAgICB2b2lkIHNldFBhZ2VZKGludCB5KTsKIAogcHJvdGVjdGVkOgogICAgIC8v
IFRoZXNlIGZ1bmN0aW9ucyBhcmUgb25seSB1c2VkIGludGVybmFsbHkgdG8gbWFuaXB1bGF0ZSB0
aGUgcmVuZGVyIHRyZWUgc3RydWN0dXJlIHZpYSByZW1vdmUvaW5zZXJ0L2FwcGVuZENoaWxkTm9k
ZS4KQEAgLTE3NywyMCArMTg4LDIyIEBAIHByb3RlY3RlZDoKICAgICB9CiAgICAgdm9pZCBtb3Zl
Q2hpbGRyZW5UbyhSZW5kZXJCbG9jayogdG8sIFJlbmRlck9iamVjdCogc3RhcnRDaGlsZCwgUmVu
ZGVyT2JqZWN0KiBlbmRDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCwgYm9vbCBmdWxs
UmVtb3ZlSW5zZXJ0ID0gZmFsc2UpOwogICAgIAotICAgIGludCBtYXhUb3BQb3NNYXJnaW4oKSBj
b25zdCB7IHJldHVybiBtX21heE1hcmdpbiA/IG1fbWF4TWFyZ2luLT5tX3RvcFBvcyA6IE1heE1h
cmdpbjo6dG9wUG9zRGVmYXVsdCh0aGlzKTsgfQotICAgIGludCBtYXhUb3BOZWdNYXJnaW4oKSBj
b25zdCB7IHJldHVybiBtX21heE1hcmdpbiA/IG1fbWF4TWFyZ2luLT5tX3RvcE5lZyA6IE1heE1h
cmdpbjo6dG9wTmVnRGVmYXVsdCh0aGlzKTsgfQotICAgIGludCBtYXhCb3R0b21Qb3NNYXJnaW4o
KSBjb25zdCB7IHJldHVybiBtX21heE1hcmdpbiA/IG1fbWF4TWFyZ2luLT5tX2JvdHRvbVBvcyA6
IE1heE1hcmdpbjo6Ym90dG9tUG9zRGVmYXVsdCh0aGlzKTsgfQotICAgIGludCBtYXhCb3R0b21O
ZWdNYXJnaW4oKSBjb25zdCB7IHJldHVybiBtX21heE1hcmdpbiA/IG1fbWF4TWFyZ2luLT5tX2Jv
dHRvbU5lZyA6IE1heE1hcmdpbjo6Ym90dG9tTmVnRGVmYXVsdCh0aGlzKTsgfQorICAgIGludCBt
YXhUb3BQb3NNYXJnaW4oKSBjb25zdCB7IHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+
bV90b3BQb3MgOiBSZW5kZXJCbG9ja1JhcmVEYXRhOjp0b3BQb3NEZWZhdWx0KHRoaXMpOyB9Cisg
ICAgaW50IG1heFRvcE5lZ01hcmdpbigpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3Jh
cmVEYXRhLT5tX3RvcE5lZyA6IFJlbmRlckJsb2NrUmFyZURhdGE6OnRvcE5lZ0RlZmF1bHQodGhp
cyk7IH0KKyAgICBpbnQgbWF4Qm90dG9tUG9zTWFyZ2luKCkgY29uc3QgeyByZXR1cm4gbV9yYXJl
RGF0YSA/IG1fcmFyZURhdGEtPm1fYm90dG9tUG9zIDogUmVuZGVyQmxvY2tSYXJlRGF0YTo6Ym90
dG9tUG9zRGVmYXVsdCh0aGlzKTsgfQorICAgIGludCBtYXhCb3R0b21OZWdNYXJnaW4oKSBjb25z
dCB7IHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+bV9ib3R0b21OZWcgOiBSZW5kZXJC
bG9ja1JhcmVEYXRhOjpib3R0b21OZWdEZWZhdWx0KHRoaXMpOyB9CisgICAgCiAgICAgdm9pZCBz
ZXRNYXhUb3BNYXJnaW5zKGludCBwb3MsIGludCBuZWcpOwogICAgIHZvaWQgc2V0TWF4Qm90dG9t
TWFyZ2lucyhpbnQgcG9zLCBpbnQgbmVnKTsKLSAgICAKKwogICAgIHZvaWQgaW5pdE1heE1hcmdp
blZhbHVlcygpCiAgICAgewotICAgICAgICBpZiAobV9tYXhNYXJnaW4pIHsKLSAgICAgICAgICAg
IG1fbWF4TWFyZ2luLT5tX3RvcFBvcyA9IE1heE1hcmdpbjo6dG9wUG9zRGVmYXVsdCh0aGlzKTsK
LSAgICAgICAgICAgIG1fbWF4TWFyZ2luLT5tX3RvcE5lZyA9IE1heE1hcmdpbjo6dG9wTmVnRGVm
YXVsdCh0aGlzKTsKLSAgICAgICAgICAgIG1fbWF4TWFyZ2luLT5tX2JvdHRvbVBvcyA9IE1heE1h
cmdpbjo6Ym90dG9tUG9zRGVmYXVsdCh0aGlzKTsKLSAgICAgICAgICAgIG1fbWF4TWFyZ2luLT5t
X2JvdHRvbU5lZyA9IE1heE1hcmdpbjo6Ym90dG9tTmVnRGVmYXVsdCh0aGlzKTsKKyAgICAgICAg
aWYgKG1fcmFyZURhdGEpIHsKKyAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fdG9wUG9zID0gUmVu
ZGVyQmxvY2tSYXJlRGF0YTo6dG9wUG9zRGVmYXVsdCh0aGlzKTsKKyAgICAgICAgICAgIG1fcmFy
ZURhdGEtPm1fdG9wTmVnID0gUmVuZGVyQmxvY2tSYXJlRGF0YTo6dG9wTmVnRGVmYXVsdCh0aGlz
KTsKKyAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fYm90dG9tUG9zID0gUmVuZGVyQmxvY2tSYXJl
RGF0YTo6Ym90dG9tUG9zRGVmYXVsdCh0aGlzKTsKKyAgICAgICAgICAgIG1fcmFyZURhdGEtPm1f
Ym90dG9tTmVnID0gUmVuZGVyQmxvY2tSYXJlRGF0YTo6Ym90dG9tTmVnRGVmYXVsdCh0aGlzKTsK
KyAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fcGFnaW5hdGlvblN0cnV0ID0gMDsKICAgICAgICAg
fQogICAgIH0KIApAQCAtMjk1LDkgKzMwOCw0MiBAQCBwcml2YXRlOgogICAgICAgICBib29sIGV2
ZXJIYWRMYXlvdXQ7CiAgICAgfTsKIAorICAgIHN0cnVjdCBGbG9hdGluZ09iamVjdCA6IE5vbmNv
cHlhYmxlIHsKKyAgICAgICAgZW51bSBUeXBlIHsKKyAgICAgICAgICAgIEZsb2F0TGVmdCwKKyAg
ICAgICAgICAgIEZsb2F0UmlnaHQKKyAgICAgICAgfTsKKworICAgICAgICBGbG9hdGluZ09iamVj
dChUeXBlIHR5cGUpCisgICAgICAgICAgICA6IG1fcmVuZGVyZXIoMCkKKyAgICAgICAgICAgICwg
bV90b3AoMCkKKyAgICAgICAgICAgICwgbV9ib3R0b20oMCkKKyAgICAgICAgICAgICwgbV9sZWZ0
KDApCisgICAgICAgICAgICAsIG1fd2lkdGgoMCkKKyAgICAgICAgICAgICwgbV9wYWdpbmF0aW9u
U3RydXQoMCkKKyAgICAgICAgICAgICwgbV90eXBlKHR5cGUpCisgICAgICAgICAgICAsIG1fc2hv
dWxkUGFpbnQodHJ1ZSkKKyAgICAgICAgICAgICwgbV9pc0Rlc2NlbmRhbnQoZmFsc2UpCisgICAg
ICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIFR5cGUgdHlwZSgpIHsgcmV0dXJuIHN0YXRpY19j
YXN0PFR5cGU+KG1fdHlwZSk7IH0KKworICAgICAgICBSZW5kZXJCb3gqIG1fcmVuZGVyZXI7Cisg
ICAgICAgIGludCBtX3RvcDsKKyAgICAgICAgaW50IG1fYm90dG9tOworICAgICAgICBpbnQgbV9s
ZWZ0OworICAgICAgICBpbnQgbV93aWR0aDsKKyAgICAgICAgaW50IG1fcGFnaW5hdGlvblN0cnV0
OworICAgICAgICB1bnNpZ25lZCBtX3R5cGUgOiAxOyAvLyBUeXBlIChsZWZ0IG9yIHJpZ2h0IGFs
aWduZWQpCisgICAgICAgIGJvb2wgbV9zaG91bGRQYWludCA6IDE7CisgICAgICAgIGJvb2wgbV9p
c0Rlc2NlbmRhbnQgOiAxOworICAgIH07CisKICAgICAvLyBUaGUgZm9sbG93aW5nIGZ1bmN0aW9u
cycgaW1wbGVtZW50YXRpb25zIGFyZSBpbiBSZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwLgogICAg
IFJvb3RJbmxpbmVCb3gqIGRldGVybWluZVN0YXJ0UG9zaXRpb24oYm9vbCYgZmlyc3RMaW5lLCBi
b29sJiBmdWxsTGF5b3V0LCBib29sJiBwcmV2aW91c0xpbmVCcm9rZUNsZWFubHksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmxpbmVCaWRpUmVzb2x2ZXImLCBW
ZWN0b3I8RmxvYXRXaXRoUmVjdD4mIGZsb2F0cywgdW5zaWduZWQmIG51bUNsZWFuRmxvYXRzKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElubGluZUJpZGlSZXNv
bHZlciYsIFZlY3RvcjxGbG9hdFdpdGhSZWN0PiYgZmxvYXRzLCB1bnNpZ25lZCYgbnVtQ2xlYW5G
bG9hdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sJiB1
c2VSZXBhaW50Qm91bmRzLCBpbnQmIHJlcGFpbnRUb3AsIGludCYgcmVwYWludEJvdHRvbSk7CiAg
ICAgUm9vdElubGluZUJveCogZGV0ZXJtaW5lRW5kUG9zaXRpb24oUm9vdElubGluZUJveCogc3Rh
cnRCb3gsIElubGluZUl0ZXJhdG9yJiBjbGVhbkxpbmVTdGFydCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBCaWRpU3RhdHVzJiBjbGVhbkxpbmVCaWRpU3RhdHVzLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCYgeVBvcyk7CkBAIC0z
MDUsOSArMzUxLDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgIFJvb3RJbmxp
bmVCb3gqJiBlbmRMaW5lLCBpbnQmIGVuZFlQb3MsIGludCYgcmVwYWludEJvdHRvbSwgaW50JiBy
ZXBhaW50VG9wKTsKIAogICAgIHZvaWQgc2tpcFRyYWlsaW5nV2hpdGVzcGFjZShJbmxpbmVJdGVy
YXRvciYsIGJvb2wgaXNMaW5lRW1wdHksIGJvb2wgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5KTsK
LSAgICBpbnQgc2tpcExlYWRpbmdXaGl0ZXNwYWNlKElubGluZUJpZGlSZXNvbHZlciYsIGJvb2wg
Zmlyc3RMaW5lLCBib29sIGlzTGluZUVtcHR5LCBib29sIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5s
eSk7CisgICAgaW50IHNraXBMZWFkaW5nV2hpdGVzcGFjZShJbmxpbmVCaWRpUmVzb2x2ZXImLCBi
b29sIGZpcnN0TGluZSwgYm9vbCBpc0xpbmVFbXB0eSwgYm9vbCBwcmV2aW91c0xpbmVCcm9rZUNs
ZWFubHksIEZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lKTsKICAgICB2
b2lkIGZpdEJlbG93RmxvYXRzKGludCB3aWR0aFRvRml0LCBib29sIGZpcnN0TGluZSwgaW50JiBh
dmFpbGFibGVXaWR0aCk7Ci0gICAgSW5saW5lSXRlcmF0b3IgZmluZE5leHRMaW5lQnJlYWsoSW5s
aW5lQmlkaVJlc29sdmVyJiwgYm9vbCBmaXJzdExpbmUsIGJvb2wmIGlzTGluZUVtcHR5LCBib29s
JiBwcmV2aW91c0xpbmVCcm9rZUNsZWFubHksIGJvb2wmIGh5cGhlbmF0ZWQsIEVDbGVhciogPSAw
KTsKKyAgICBJbmxpbmVJdGVyYXRvciBmaW5kTmV4dExpbmVCcmVhayhJbmxpbmVCaWRpUmVzb2x2
ZXImLCBib29sIGZpcnN0TGluZSwgYm9vbCYgaXNMaW5lRW1wdHksIGJvb2wmIHByZXZpb3VzTGlu
ZUJyb2tlQ2xlYW5seSwgYm9vbCYgaHlwaGVuYXRlZCwgRUNsZWFyKiwgRmxvYXRpbmdPYmplY3Qq
IGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUpOwogICAgIFJvb3RJbmxpbmVCb3gqIGNvbnN0cnVj
dExpbmUodW5zaWduZWQgcnVuQ291bnQsIEJpZGlSdW4qIGZpcnN0UnVuLCBCaWRpUnVuKiBsYXN0
UnVuLCBib29sIGZpcnN0TGluZSwgYm9vbCBsYXN0TGluZSwgUmVuZGVyT2JqZWN0KiBlbmRPYmpl
Y3QpOwogICAgIElubGluZUZsb3dCb3gqIGNyZWF0ZUxpbmVCb3hlcyhSZW5kZXJPYmplY3QqLCBi
b29sIGZpcnN0TGluZSk7CiAgICAgdm9pZCBjb21wdXRlSG9yaXpvbnRhbFBvc2l0aW9uc0Zvckxp
bmUoUm9vdElubGluZUJveCosIGJvb2wgZmlyc3RMaW5lLCBCaWRpUnVuKiBmaXJzdFJ1biwgQmlk
aVJ1biogdHJhaWxpbmdTcGFjZVJ1biwgYm9vbCByZWFjaGVkRW5kLCBHbHlwaE92ZXJmbG93QW5k
RmFsbGJhY2tGb250c01hcCYpOwpAQCAtMzI5LDEyICszNzUsMTggQEAgcHJpdmF0ZToKICAgICB2
b2lkIHBhaW50U2VsZWN0aW9uKFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKICAgICB2b2lk
IHBhaW50Q2FyZXQoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHksIENhcmV0VHlwZSk7CiAKLSAg
ICB2b2lkIGluc2VydEZsb2F0aW5nT2JqZWN0KFJlbmRlckJveCopOworICAgIEZsb2F0aW5nT2Jq
ZWN0KiBpbnNlcnRGbG9hdGluZ09iamVjdChSZW5kZXJCb3gqKTsKICAgICB2b2lkIHJlbW92ZUZs
b2F0aW5nT2JqZWN0KFJlbmRlckJveCopOwotCisgICAgdm9pZCByZW1vdmVGbG9hdGluZ09iamVj
dHMoRmxvYXRpbmdPYmplY3QqLCBpbnQgeSk7CisgICAgCiAgICAgLy8gQ2FsbGVkIGZyb20gbGlu
ZVdpZHRoLCB0byBwb3NpdGlvbiB0aGUgZmxvYXRzIGFkZGVkIGluIHRoZSBsYXN0IGxpbmUuCi0g
ICAgLy8gUmV0dXJucyB0dXJlIGlmIGFuZCBvbmx5IGlmIGl0IGhhcyBwb3NpdGlvbmVkIGFueSBm
bG9hdHMuCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIGFuZCBvbmx5IGlmIGl0IGhhcyBwb3NpdGlv
bmVkIGFueSBmbG9hdHMuCiAgICAgYm9vbCBwb3NpdGlvbk5ld0Zsb2F0cygpOworICAgIAorICAg
IC8vIFBvc2l0aW9ucyBuZXcgZmxvYXRzIGFuZCBhbHNvIGFkanVzdCBhbGwgZmxvYXRzIGVuY291
bnRlcmVkIG9uIHRoZSBsaW5lIGlmIGFueSBvZiB0aGVtCisgICAgLy8gaGF2ZSB0byBtb3ZlIHRv
IHRoZSBuZXh0IHBhZ2UvY29sdW1uLgorICAgIGJvb2wgcG9zaXRpb25OZXdGbG9hdE9uTGluZShG
bG9hdGluZ09iamVjdCogbmV3RmxvYXQsIEZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXRGcm9tUHJl
dmlvdXNMaW5lKTsKKwogICAgIHZvaWQgY2xlYXJGbG9hdHMoKTsKICAgICBpbnQgZ2V0Q2xlYXJE
ZWx0YShSZW5kZXJCb3gqIGNoaWxkLCBpbnQgeVBvcyk7CiAKQEAgLTQxNiw4ICs0NjgsNyBAQCBw
cml2YXRlOgogICAgIHZvaWQgb2Zmc2V0Rm9yQ29udGVudHMoaW50JiB0eCwgaW50JiB0eSkgY29u
c3Q7CiAKICAgICB2b2lkIGNhbGNDb2x1bW5XaWR0aCgpOwotICAgIGludCBsYXlvdXRDb2x1bW5z
KGludCBlbmRPZkNvbnRlbnQgPSAtMSwgaW50IHJlcXVlc3RlZENvbHVtbkhlaWdodCA9IC0xKTsK
LSAgICBpbnQgdmlzaWJsZVRvcE9mSGlnaGVzdEZsb2F0RXh0ZW5kaW5nQmVsb3coaW50IGJvdHRv
bSwgaW50IG1heEhlaWdodCkgY29uc3Q7CisgICAgYm9vbCBsYXlvdXRDb2x1bW5zKGJvb2wgaGFz
U3BlY2lmaWVkUGFnZUhlaWdodCwgaW50IHBhZ2VIZWlnaHQsIExheW91dFN0YXRlTWFpbnRhaW5l
ciYpOwogICAgIHZvaWQgbWFrZUNoaWxkcmVuQW5vbnltb3VzQ29sdW1uQmxvY2tzKFJlbmRlck9i
amVjdCogYmVmb3JlQ2hpbGQsIFJlbmRlckJsb2NrKiBuZXdCbG9ja0JveCwgUmVuZGVyT2JqZWN0
KiBuZXdDaGlsZCk7CiAKICAgICBib29sIGV4cGFuZHNUb0VuY2xvc2VPdmVyaGFuZ2luZ0Zsb2F0
cygpIGNvbnN0OwpAQCAtNDMzLDM2ICs0ODQsNiBAQCBwcml2YXRlOgogICAgIFJlbmRlckJsb2Nr
KiBjb250aW51YXRpb25CZWZvcmUoUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCk7CiAgICAgUmVu
ZGVyQmxvY2sqIGNvbnRhaW5pbmdDb2x1bW5zQmxvY2soYm9vbCBhbGxvd0Fub255bW91c0NvbHVt
bkJsb2NrID0gdHJ1ZSk7CiAgICAgUmVuZGVyQmxvY2sqIGNvbHVtbnNCbG9ja0ZvclNwYW5uaW5n
RWxlbWVudChSZW5kZXJPYmplY3QqIG5ld0NoaWxkKTsKLSAgICAKLSAgICBzdHJ1Y3QgRmxvYXRp
bmdPYmplY3QgOiBOb25jb3B5YWJsZSB7Ci0gICAgICAgIGVudW0gVHlwZSB7Ci0gICAgICAgICAg
ICBGbG9hdExlZnQsCi0gICAgICAgICAgICBGbG9hdFJpZ2h0Ci0gICAgICAgIH07Ci0KLSAgICAg
ICAgRmxvYXRpbmdPYmplY3QoVHlwZSB0eXBlKQotICAgICAgICAgICAgOiBtX3JlbmRlcmVyKDAp
Ci0gICAgICAgICAgICAsIG1fdG9wKDApCi0gICAgICAgICAgICAsIG1fYm90dG9tKDApCi0gICAg
ICAgICAgICAsIG1fbGVmdCgwKQotICAgICAgICAgICAgLCBtX3dpZHRoKDApCi0gICAgICAgICAg
ICAsIG1fdHlwZSh0eXBlKQotICAgICAgICAgICAgLCBtX3Nob3VsZFBhaW50KHRydWUpCi0gICAg
ICAgICAgICAsIG1faXNEZXNjZW5kYW50KGZhbHNlKQotICAgICAgICB7Ci0gICAgICAgIH0KLQot
ICAgICAgICBUeXBlIHR5cGUoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxUeXBlPihtX3R5cGUpOyB9
Ci0KLSAgICAgICAgUmVuZGVyQm94KiBtX3JlbmRlcmVyOwotICAgICAgICBpbnQgbV90b3A7Ci0g
ICAgICAgIGludCBtX2JvdHRvbTsKLSAgICAgICAgaW50IG1fbGVmdDsKLSAgICAgICAgaW50IG1f
d2lkdGg7Ci0gICAgICAgIHVuc2lnbmVkIG1fdHlwZSA6IDE7IC8vIFR5cGUgKGxlZnQgb3Igcmln
aHQgYWxpZ25lZCkKLSAgICAgICAgYm9vbCBtX3Nob3VsZFBhaW50IDogMTsKLSAgICAgICAgYm9v
bCBtX2lzRGVzY2VuZGFudCA6IDE7Ci0gICAgfTsKIAogICAgIGNsYXNzIE1hcmdpbkluZm8gewog
ICAgICAgICAvLyBDb2xsYXBzaW5nIGZsYWdzIGZvciB3aGV0aGVyIHdlIGNhbiBjb2xsYXBzZSBv
dXIgbWFyZ2lucyB3aXRoIG91ciBjaGlsZHJlbidzIG1hcmdpbnMuCkBAIC01MzksNiArNTYwLDEz
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXRDb2xsYXBzZWRCb3R0b21NYXJnaW4oY29uc3QgTWFy
Z2luSW5mbyYpOwogICAgIC8vIEVuZCBoZWxwZXIgZnVuY3Rpb25zIGFuZCBzdHJ1Y3RzIHVzZWQg
YnkgbGF5b3V0QmxvY2tDaGlsZHJlbi4KIAorICAgIC8vIFBhZ2luYXRpb24gcm91dGluZXMuCisg
ICAgaW50IG5leHRQYWdlVG9wKGludCB5UG9zKSBjb25zdDsgLy8gUmV0dXJucyB0aGUgdG9wIG9m
IHRoZSBuZXh0IHBhZ2UgZm9sbG93aW5nIHlQb3MuCisgICAgaW50IGFwcGx5QmVmb3JlQnJlYWso
UmVuZGVyQm94KiBjaGlsZCwgaW50IHlQb3MpOyAvLyBJZiB0aGUgY2hpbGQgaGFzIGEgYmVmb3Jl
IGJyZWFrLCB0aGVuIHJldHVybiBhIG5ldyB5UG9zIHRoYXQgc2hpZnRzIHRvIHRoZSB0b3Agb2Yg
dGhlIG5leHQgcGFnZS9jb2x1bW4uCisgICAgaW50IGFwcGx5QWZ0ZXJCcmVhayhSZW5kZXJCb3gq
IGNoaWxkLCBpbnQgeVBvcywgTWFyZ2luSW5mbyYgbWFyZ2luSW5mbyk7IC8vIElmIHRoZSBjaGls
ZCBoYXMgYW4gYWZ0ZXIgYnJlYWssIHRoZW4gcmV0dXJuIGEgbmV3IHlQb3MgdGhhdCBzaGlmdHMg
dG8gdGhlIHRvcCBvZiB0aGUgbmV4dCBwYWdlL2NvbHVtbi4KKyAgICBpbnQgYWRqdXN0Rm9yVW5z
cGxpdHRhYmxlQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCwgaW50IHlQb3MsIGJvb2wgaW5jbHVkZU1h
cmdpbnMgPSBmYWxzZSk7IC8vIElmIHRoZSBjaGlsZCBpcyB1bnNwbGl0dGFibGUgYW5kIGNhbid0
IGZpdCBvbiB0aGUgY3VycmVudCBwYWdlLCByZXR1cm4gdGhlIHRvcCBvZiB0aGUgbmV4dCBwYWdl
L2NvbHVtbi4KKyAgICB2b2lkIGFkanVzdExpbmVQb3NpdGlvbkZvclBhZ2luYXRpb24oUm9vdElu
bGluZUJveCosIGludCYgZGVsdGFZKTsgLy8gQ29tcHV0ZXMgYSBkZWx0YVkgdmFsdWUgdGhhdCBw
dXQgYSBsaW5lIGF0IHRoZSB0b3Agb2YgdGhlIG5leHQgcGFnZSBpZiBpdCBkb2Vzbid0IGZpdCBv
biB0aGUgY3VycmVudCBwYWdlLgorCiAgICAgdHlwZWRlZiBQb3NpdGlvbmVkT2JqZWN0c0xpc3RI
YXNoU2V0Ojpjb25zdF9pdGVyYXRvciBJdGVyYXRvcjsKICAgICBEZXByZWNhdGVkUHRyTGlzdDxG
bG9hdGluZ09iamVjdD4qIG1fZmxvYXRpbmdPYmplY3RzOwogICAgIApAQCAtNTUxLDEyICs1Nzks
MTQgQEAgcHJpdmF0ZToKICAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogbV9jb250aW51YXRpb247
CiAKICAgICAvLyBBbGxvY2F0ZWQgb25seSB3aGVuIHNvbWUgb2YgdGhlc2UgZmllbGRzIGhhdmUg
bm9uLWRlZmF1bHQgdmFsdWVzCi0gICAgc3RydWN0IE1heE1hcmdpbiA6IE5vbmNvcHlhYmxlIHsK
LSAgICAgICAgTWF4TWFyZ2luKGNvbnN0IFJlbmRlckJsb2NrKiBvKSAKKyAgICBzdHJ1Y3QgUmVu
ZGVyQmxvY2tSYXJlRGF0YSA6IE5vbmNvcHlhYmxlIHsKKyAgICAgICAgUmVuZGVyQmxvY2tSYXJl
RGF0YShjb25zdCBSZW5kZXJCbG9jayogbykgCiAgICAgICAgICAgICA6IG1fdG9wUG9zKHRvcFBv
c0RlZmF1bHQobykpCiAgICAgICAgICAgICAsIG1fdG9wTmVnKHRvcE5lZ0RlZmF1bHQobykpCiAg
ICAgICAgICAgICAsIG1fYm90dG9tUG9zKGJvdHRvbVBvc0RlZmF1bHQobykpCiAgICAgICAgICAg
ICAsIG1fYm90dG9tTmVnKGJvdHRvbU5lZ0RlZmF1bHQobykpCisgICAgICAgICAgICAsIG1fcGFn
aW5hdGlvblN0cnV0KDApCisgICAgICAgICAgICAsIG1fcGFnZVkoMCkKICAgICAgICAgeyAKICAg
ICAgICAgfQogCkBAIC01NjQsMTQgKzU5NCwxNiBAQCBwcml2YXRlOgogICAgICAgICBzdGF0aWMg
aW50IHRvcE5lZ0RlZmF1bHQoY29uc3QgUmVuZGVyQmxvY2sqIG8pIHsgcmV0dXJuIG8tPm1hcmdp
blRvcCgpIDwgMCA/IC1vLT5tYXJnaW5Ub3AoKSA6IDA7IH0KICAgICAgICAgc3RhdGljIGludCBi
b3R0b21Qb3NEZWZhdWx0KGNvbnN0IFJlbmRlckJsb2NrKiBvKSB7IHJldHVybiBvLT5tYXJnaW5C
b3R0b20oKSA+IDAgPyBvLT5tYXJnaW5Cb3R0b20oKSA6IDA7IH0KICAgICAgICAgc3RhdGljIGlu
dCBib3R0b21OZWdEZWZhdWx0KGNvbnN0IFJlbmRlckJsb2NrKiBvKSB7IHJldHVybiBvLT5tYXJn
aW5Cb3R0b20oKSA8IDAgPyAtby0+bWFyZ2luQm90dG9tKCkgOiAwOyB9Ci0KKyAgICAgICAgCiAg
ICAgICAgIGludCBtX3RvcFBvczsKICAgICAgICAgaW50IG1fdG9wTmVnOwogICAgICAgICBpbnQg
bV9ib3R0b21Qb3M7CiAgICAgICAgIGludCBtX2JvdHRvbU5lZzsKKyAgICAgICAgaW50IG1fcGFn
aW5hdGlvblN0cnV0OworICAgICAgICBpbnQgbV9wYWdlWTsKICAgICAgfTsKIAotICAgIE1heE1h
cmdpbiogbV9tYXhNYXJnaW47CisgICAgUmVuZGVyQmxvY2tSYXJlRGF0YSogbV9yYXJlRGF0YTsK
IAogICAgIFJlbmRlck9iamVjdENoaWxkTGlzdCBtX2NoaWxkcmVuOwogICAgIFJlbmRlckxpbmVC
b3hMaXN0IG1fbGluZUJveGVzOyAgIC8vIEFsbCBvZiB0aGUgcm9vdCBsaW5lIGJveGVzIGNyZWF0
ZWQgZm9yIHRoaXMgYmxvY2sgZmxvdy4gIEZvciBleGFtcGxlLCA8ZGl2PkhlbGxvPGJyPndvcmxk
LjwvZGl2PiB3aWxsIGhhdmUgdHdvIHRvdGFsIGxpbmVzIGZvciB0aGUgPGRpdj4uCkluZGV4OiBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAJKHJldmlzaW9uIDY2
ODg2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAj
aW5jbHVkZSAiUmVuZGVyTGlzdE1hcmtlci5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKKyNp
bmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlRyYWlsaW5nRmxvYXRzUm9vdElubGluZUJv
eC5oIgogI2luY2x1ZGUgImJyZWFrX2xpbmVzLmgiCiAjaW5jbHVkZSA8d3RmL0Fsd2F5c0lubGlu
ZS5oPgpAQCAtNTcwLDEyICs1NzEsMTEgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0SW5saW5l
Q2hpbGRyZW4oYgogICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKG8tPmlzUG9zaXRp
b25lZCgpKQogICAgICAgICAgICAgICAgICAgICBvLT5jb250YWluaW5nQmxvY2soKS0+aW5zZXJ0
UG9zaXRpb25lZE9iamVjdChib3gpOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICBpZiAoby0+aXNGbG9hdGluZygpKQotICAgICAgICAgICAgICAgICAgICAgICAg
ZmxvYXRzLmFwcGVuZChGbG9hdFdpdGhSZWN0KGJveCkpOwotICAgICAgICAgICAgICAgICAgICBl
bHNlIGlmIChmdWxsTGF5b3V0IHx8IG8tPm5lZWRzTGF5b3V0KCkpIC8vIFJlcGxhY2VkIGVsZW1l
bnRzCi0gICAgICAgICAgICAgICAgICAgICAgICB0b1JlbmRlckJveChvKS0+ZGlydHlMaW5lQm94
ZXMoZnVsbExheW91dCk7Ci0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChvLT5pc0Zsb2F0aW5n
KCkpCisgICAgICAgICAgICAgICAgICAgIGZsb2F0cy5hcHBlbmQoRmxvYXRXaXRoUmVjdChib3gp
KTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChmdWxsTGF5b3V0IHx8IG8tPm5lZWRzTGF5b3V0
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gUmVwbGFjZWQgZWxlbWVudHMKKyAgICAgICAg
ICAgICAgICAgICAgdG9SZW5kZXJCb3gobyktPmRpcnR5TGluZUJveGVzKGZ1bGxMYXlvdXQpOwog
ICAgICAgICAgICAgICAgICAgICBvLT5sYXlvdXRJZk5lZWRlZCgpOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0gZWxzZSBpZiAoby0+aXNUZXh0KCkgfHwgKG8tPmlzUmVuZGVySW5s
aW5lKCkgJiYgIWVuZE9mSW5saW5lKSkgewpAQCAtNTk0LDcgKzU5NCw4IEBAIHZvaWQgUmVuZGVy
QmxvY2s6OmxheW91dElubGluZUNoaWxkcmVuKGIKICAgICAgICAgdW5zaWduZWQgZmxvYXRJbmRl
eDsKICAgICAgICAgYm9vbCBmaXJzdExpbmUgPSB0cnVlOwogICAgICAgICBib29sIHByZXZpb3Vz
TGluZUJyb2tlQ2xlYW5seSA9IHRydWU7Ci0gICAgICAgIFJvb3RJbmxpbmVCb3gqIHN0YXJ0TGlu
ZSA9IGRldGVybWluZVN0YXJ0UG9zaXRpb24oZmlyc3RMaW5lLCBmdWxsTGF5b3V0LCBwcmV2aW91
c0xpbmVCcm9rZUNsZWFubHksIHJlc29sdmVyLCBmbG9hdHMsIGZsb2F0SW5kZXgpOworICAgICAg
ICBSb290SW5saW5lQm94KiBzdGFydExpbmUgPSBkZXRlcm1pbmVTdGFydFBvc2l0aW9uKGZpcnN0
TGluZSwgZnVsbExheW91dCwgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5LCByZXNvbHZlciwgZmxv
YXRzLCBmbG9hdEluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVzZVJlcGFpbnRCb3VuZHMsIHJlcGFpbnRUb3AsIHJlcGFpbnRC
b3R0b20pOwogCiAgICAgICAgIGlmIChmdWxsTGF5b3V0ICYmIGhhc0lubGluZUNoaWxkICYmICFz
ZWxmTmVlZHNMYXlvdXQoKSkgewogICAgICAgICAgICAgc2V0TmVlZHNMYXlvdXQodHJ1ZSwgZmFs
c2UpOyAgLy8gTWFyayBvdXJzZWx2ZXMgYXMgbmVlZGluZyBhIGZ1bGwgbGF5b3V0LiBUaGlzIHdh
eSB3ZSdsbCByZXBhaW50IGxpa2UKQEAgLTYyMiw5ICs2MjMsMTEgQEAgdm9pZCBSZW5kZXJCbG9j
azo6bGF5b3V0SW5saW5lQ2hpbGRyZW4oYgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMCA6IGRldGVybWluZUVuZFBvc2l0aW9uKHN0YXJ0TGluZSwgY2xlYW5MaW5lU3RhcnQsIGNs
ZWFuTGluZUJpZGlTdGF0dXMsIGVuZExpbmVZUG9zKTsKIAogICAgICAgICBpZiAoc3RhcnRMaW5l
KSB7Ci0gICAgICAgICAgICB1c2VSZXBhaW50Qm91bmRzID0gdHJ1ZTsKLSAgICAgICAgICAgIHJl
cGFpbnRUb3AgPSBoZWlnaHQoKTsKLSAgICAgICAgICAgIHJlcGFpbnRCb3R0b20gPSBoZWlnaHQo
KTsKKyAgICAgICAgICAgIGlmICghdXNlUmVwYWludEJvdW5kcykgeworICAgICAgICAgICAgICAg
IHVzZVJlcGFpbnRCb3VuZHMgPSB0cnVlOworICAgICAgICAgICAgICAgIHJlcGFpbnRUb3AgPSBo
ZWlnaHQoKTsKKyAgICAgICAgICAgICAgICByZXBhaW50Qm90dG9tID0gaGVpZ2h0KCk7CisgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBSZW5kZXJBcmVuYSogYXJlbmEgPSByZW5kZXJBcmVuYSgp
OwogICAgICAgICAgICAgUm9vdElubGluZUJveCogYm94ID0gc3RhcnRMaW5lOwogICAgICAgICAg
ICAgd2hpbGUgKGJveCkgewpAQCAtNjU5LDYgKzY2Miw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6Omxh
eW91dElubGluZUNoaWxkcmVuKGIKICAgICAgICAgYm9vbCBjaGVja0ZvckZsb2F0c0Zyb21MYXN0
TGluZSA9IGZhbHNlOwogCiAgICAgICAgIGJvb2wgaXNMaW5lRW1wdHkgPSB0cnVlOworICAgICAg
ICBib29sIHBhZ2luYXRlZCA9IHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+cGFnaW5hdGVkKCk7CiAK
ICAgICAgICAgd2hpbGUgKCFlbmQuYXRFbmQoKSkgewogICAgICAgICAgICAgLy8gRklYTUU6IElz
IHRoaXMgY2hlY2sgbmVjZXNzYXJ5IGJlZm9yZSB0aGUgZmlyc3QgaXRlcmF0aW9uIG9yIGNhbiBp
dCBiZSBtb3ZlZCB0byB0aGUgZW5kPwpAQCAtNjcxLDcgKzY3NSwxMCBAQCB2b2lkIFJlbmRlckJs
b2NrOjpsYXlvdXRJbmxpbmVDaGlsZHJlbihiCiAgICAgICAgICAgICAKICAgICAgICAgICAgIEVD
bGVhciBjbGVhciA9IENOT05FOwogICAgICAgICAgICAgYm9vbCBoeXBoZW5hdGVkOwotICAgICAg
ICAgICAgZW5kID0gZmluZE5leHRMaW5lQnJlYWsocmVzb2x2ZXIsIGZpcnN0TGluZSwgaXNMaW5l
RW1wdHksIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSwgaHlwaGVuYXRlZCwgJmNsZWFyKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgSW5saW5lSXRlcmF0b3Igb2xkRW5kID0gZW5kOworICAg
ICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUgPSBtX2Zs
b2F0aW5nT2JqZWN0cyA/IG1fZmxvYXRpbmdPYmplY3RzLT5sYXN0KCkgOiAwOworICAgICAgICAg
ICAgZW5kID0gZmluZE5leHRMaW5lQnJlYWsocmVzb2x2ZXIsIGZpcnN0TGluZSwgaXNMaW5lRW1w
dHksIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSwgaHlwaGVuYXRlZCwgJmNsZWFyLCBsYXN0Rmxv
YXRGcm9tUHJldmlvdXNMaW5lKTsKICAgICAgICAgICAgIGlmIChyZXNvbHZlci5wb3NpdGlvbigp
LmF0RW5kKCkpIHsKICAgICAgICAgICAgICAgICByZXNvbHZlci5kZWxldGVSdW5zKCk7CiAgICAg
ICAgICAgICAgICAgY2hlY2tGb3JGbG9hdHNGcm9tTGFzdExpbmUgPSB0cnVlOwpAQCAtNzM2LDYg
Kzc0Myw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dElubGluZUNoaWxkcmVuKGIKICAgICAg
ICAgICAgICAgICAvLyBpbmxpbmUgZmxvdyBib3hlcy4KIAogICAgICAgICAgICAgICAgIFJvb3RJ
bmxpbmVCb3gqIGxpbmVCb3ggPSAwOworICAgICAgICAgICAgICAgIGludCBvbGRIZWlnaHQgPSBo
ZWlnaHQoKTsKICAgICAgICAgICAgICAgICBpZiAocmVzb2x2ZXIucnVuQ291bnQoKSkgewogICAg
ICAgICAgICAgICAgICAgICBpZiAoaHlwaGVuYXRlZCkKICAgICAgICAgICAgICAgICAgICAgICAg
IHJlc29sdmVyLmxvZ2ljYWxseUxhc3RSdW4oKS0+bV9oYXNIeXBoZW4gPSB0cnVlOwpAQCAtNzg2
LDYgKzc5NCwyOSBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVDaGlsZHJlbihiCiAg
ICAgICAgICAgICAgICAgICAgICAgICByZXBhaW50VG9wID0gbWluKHJlcGFpbnRUb3AsIGxpbmVC
b3gtPnRvcFZpc2libGVPdmVyZmxvdygpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGFp
bnRCb3R0b20gPSBtYXgocmVwYWludEJvdHRvbSwgbGluZUJveC0+Ym90dG9tVmlzaWJsZU92ZXJm
bG93KCkpOwogICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICBpZiAocGFnaW5hdGVkKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgYWRqdXN0bWVudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBhZGp1c3RMaW5l
UG9zaXRpb25Gb3JQYWdpbmF0aW9uKGxpbmVCb3gsIGFkanVzdG1lbnQpOworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGFkanVzdG1lbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgb2xkTGluZVdpZHRoID0gbGluZVdpZHRoKG9sZEhlaWdodCwgZmlyc3RMaW5lKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lQm94LT5hZGp1c3RQb3NpdGlvbigwLCBhZGp1
c3RtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodXNlUmVwYWludEJvdW5k
cykgLy8gVGhpcyBjYW4gb25seSBiZSBhIHBvc2l0aXZlIGFkanVzdG1lbnQsIHNvIG5vIG5lZWQg
dG8gdXBkYXRlIHJlcGFpbnRUb3AuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
cGFpbnRCb3R0b20gPSBtYXgocmVwYWludEJvdHRvbSwgbGluZUJveC0+Ym90dG9tVmlzaWJsZU92
ZXJmbG93KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAobGluZVdpZHRoKG9sZEhlaWdodCArIGFkanVzdG1lbnQsIGZp
cnN0TGluZSkgIT0gb2xkTGluZVdpZHRoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIFdlIGhhdmUgdG8gZGVsZXRlIHRoaXMgbGluZSwgcmVtb3ZlIGFsbCBmbG9hdHMgdGhh
dCBnb3QgYWRkZWQsIGFuZCBsZXQgbGluZSBsYXlvdXQgcmUtcnVuLgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsaW5lQm94LT5kZWxldGVMaW5lKHJlbmRlckFyZW5hKCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVGbG9hdGluZ09iamVjdHMobGFzdEZs
b2F0RnJvbVByZXZpb3VzTGluZSwgb2xkSGVpZ2h0KTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2V0SGVpZ2h0KG9sZEhlaWdodCArIGFkanVzdG1lbnQpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXNvbHZlci5zZXRQb3NpdGlvbihvbGRFbmQpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQgPSBvbGRFbmQ7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEhlaWdodChsaW5lQm94LT5ibG9ja0hl
aWdodCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGZpcnN0TGluZSA9IGZhbHNl
OwpAQCAtODIwLDYgKzg1MSwxMCBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVDaGls
ZHJlbihiCiAgICAgICAgICAgICAgICAgaW50IGRlbHRhID0gaGVpZ2h0KCkgLSBlbmRMaW5lWVBv
czsKICAgICAgICAgICAgICAgICBmb3IgKFJvb3RJbmxpbmVCb3gqIGxpbmUgPSBlbmRMaW5lOyBs
aW5lOyBsaW5lID0gbGluZS0+bmV4dFJvb3RCb3goKSkgewogICAgICAgICAgICAgICAgICAgICBs
aW5lLT5hdHRhY2hMaW5lKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChwYWdpbmF0ZWQpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGRlbHRhIC09IGxpbmUtPnBhZ2luYXRpb25TdHJ1dCgp
OworICAgICAgICAgICAgICAgICAgICAgICAgYWRqdXN0TGluZVBvc2l0aW9uRm9yUGFnaW5hdGlv
bihsaW5lLCBkZWx0YSk7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgaWYgKGRlbHRhKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXBhaW50VG9wID0gbWlu
KHJlcGFpbnRUb3AsIGxpbmUtPnRvcFZpc2libGVPdmVyZmxvdygpICsgbWluKGRlbHRhLCAwKSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICByZXBhaW50Qm90dG9tID0gbWF4KHJlcGFpbnRCb3R0
b20sIGxpbmUtPmJvdHRvbVZpc2libGVPdmVyZmxvdygpICsgbWF4KGRlbHRhLCAwKSk7CkBAIC05
MDAsMjAgKzkzNSw0NCBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVDaGlsZHJlbihi
CiB9CiAKIFJvb3RJbmxpbmVCb3gqIFJlbmRlckJsb2NrOjpkZXRlcm1pbmVTdGFydFBvc2l0aW9u
KGJvb2wmIGZpcnN0TGluZSwgYm9vbCYgZnVsbExheW91dCwgYm9vbCYgcHJldmlvdXNMaW5lQnJv
a2VDbGVhbmx5LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIElubGluZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIsIFZlY3RvcjxGbG9hdFdpdGhSZWN0
PiYgZmxvYXRzLCB1bnNpZ25lZCYgbnVtQ2xlYW5GbG9hdHMpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29s
dmVyLCBWZWN0b3I8RmxvYXRXaXRoUmVjdD4mIGZsb2F0cywgdW5zaWduZWQmIG51bUNsZWFuRmxv
YXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCYgdXNlUmVwYWludEJvdW5kcywgaW50JiByZXBhaW50VG9wLCBpbnQmIHJlcGFpbnRCb3R0
b20pCiB7CiAgICAgUm9vdElubGluZUJveCogY3VyciA9IDA7CiAgICAgUm9vdElubGluZUJveCog
bGFzdCA9IDA7CiAKICAgICBib29sIGRpcnRpZWRCeUZsb2F0ID0gZmFsc2U7CiAgICAgaWYgKCFm
dWxsTGF5b3V0KSB7CisgICAgICAgIC8vIFBhZ2luYXRlIGFsbCBvZiB0aGUgY2xlYW4gbGluZXMu
CisgICAgICAgIGJvb2wgcGFnaW5hdGVkID0gdmlldygpLT5sYXlvdXRTdGF0ZSgpLT5wYWdpbmF0
ZWQoKTsKKyAgICAgICAgaW50IHBhZ2luYXRpb25EZWx0YSA9IDA7CiAgICAgICAgIHNpemVfdCBm
bG9hdEluZGV4ID0gMDsKICAgICAgICAgZm9yIChjdXJyID0gZmlyc3RSb290Qm94KCk7IGN1cnIg
JiYgIWN1cnItPmlzRGlydHkoKTsgY3VyciA9IGN1cnItPm5leHRSb290Qm94KCkpIHsKKyAgICAg
ICAgICAgIGlmIChwYWdpbmF0ZWQpIHsKKyAgICAgICAgICAgICAgICBwYWdpbmF0aW9uRGVsdGEg
LT0gY3Vyci0+cGFnaW5hdGlvblN0cnV0KCk7CisgICAgICAgICAgICAgICAgYWRqdXN0TGluZVBv
c2l0aW9uRm9yUGFnaW5hdGlvbihjdXJyLCBwYWdpbmF0aW9uRGVsdGEpOworICAgICAgICAgICAg
ICAgIGlmIChwYWdpbmF0aW9uRGVsdGEpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRh
aW5zRmxvYXRzKCkgfHwgIWZsb2F0cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOiBEbyBiZXR0ZXIgZXZlbnR1YWxseS4gIEZvciBub3cgaWYgd2UgZXZlciBz
aGlmdCBiZWNhdXNlIG9mIHBhZ2luYXRpb24gYW5kIGZsb2F0cyBhcmUgcHJlc2VudCBqdXN0IGdv
IHRvIGEgZnVsbCBsYXlvdXQuCisgICAgICAgICAgICAgICAgICAgICAgICBmdWxsTGF5b3V0ID0g
dHJ1ZTsgCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKCF1c2VS
ZXBhaW50Qm91bmRzKQorICAgICAgICAgICAgICAgICAgICAgICAgdXNlUmVwYWludEJvdW5kcyA9
IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgcmVw
YWludFRvcCA9IG1pbihyZXBhaW50VG9wLCBjdXJyLT50b3BWaXNpYmxlT3ZlcmZsb3coKSArIG1p
bihwYWdpbmF0aW9uRGVsdGEsIDApKTsKKyAgICAgICAgICAgICAgICAgICAgcmVwYWludEJvdHRv
bSA9IG1heChyZXBhaW50Qm90dG9tLCBjdXJyLT5ib3R0b21WaXNpYmxlT3ZlcmZsb3coKSArIG1h
eChwYWdpbmF0aW9uRGVsdGEsIDApKTsKKyAgICAgICAgICAgICAgICAgICAgY3Vyci0+YWRqdXN0
UG9zaXRpb24oMCwgcGFnaW5hdGlvbkRlbHRhKTsKKyAgICAgICAgICAgICAgICB9ICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoVmVj
dG9yPFJlbmRlckJveCo+KiBjbGVhbkxpbmVGbG9hdHMgPSBjdXJyLT5mbG9hdHNQdHIoKSkgewog
ICAgICAgICAgICAgICAgIFZlY3RvcjxSZW5kZXJCb3gqPjo6aXRlcmF0b3IgZW5kID0gY2xlYW5M
aW5lRmxvYXRzLT5lbmQoKTsKICAgICAgICAgICAgICAgICBmb3IgKFZlY3RvcjxSZW5kZXJCb3gq
Pjo6aXRlcmF0b3IgbyA9IGNsZWFuTGluZUZsb2F0cy0+YmVnaW4oKTsgbyAhPSBlbmQ7ICsrbykg
ewogICAgICAgICAgICAgICAgICAgICBSZW5kZXJCb3gqIGYgPSAqbzsKLSAgICAgICAgICAgICAg
ICAgICAgSW50U2l6ZSBuZXdTaXplKGYtPndpZHRoKCkgKyBmLT5tYXJnaW5MZWZ0KCkgK2YtPm1h
cmdpblJpZ2h0KCksIGYtPmhlaWdodCgpICsgZi0+bWFyZ2luVG9wKCkgKyBmLT5tYXJnaW5Cb3R0
b20oKSk7CisgICAgICAgICAgICAgICAgICAgIGYtPmxheW91dElmTmVlZGVkKCk7CisgICAgICAg
ICAgICAgICAgICAgIEludFNpemUgbmV3U2l6ZShmLT53aWR0aCgpICsgZi0+bWFyZ2luTGVmdCgp
ICsgZi0+bWFyZ2luUmlnaHQoKSwgZi0+aGVpZ2h0KCkgKyBmLT5tYXJnaW5Ub3AoKSArIGYtPm1h
cmdpbkJvdHRvbSgpKTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGZsb2F0SW5kZXggPCBm
bG9hdHMuc2l6ZSgpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGZsb2F0c1tmbG9hdEluZGV4
XS5vYmplY3QgIT0gZikgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gQSBuZXcgZmxvYXQg
aGFzIGJlZW4gaW5zZXJ0ZWQgYmVmb3JlIHRoaXMgbGluZSBvciBiZWZvcmUgaXRzIGxhc3Qga25v
d24gZmxvYXQuCkBAIC0xMjM2LDE0ICsxMjk1LDE0IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnNraXBU
cmFpbGluZ1doaXRlc3BhY2UKICAgICB9CiB9CiAKLWludCBSZW5kZXJCbG9jazo6c2tpcExlYWRp
bmdXaGl0ZXNwYWNlKElubGluZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIsIGJvb2wgZmlyc3RMaW5l
LCBib29sIGlzTGluZUVtcHR5LCBib29sIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSkKK2ludCBS
ZW5kZXJCbG9jazo6c2tpcExlYWRpbmdXaGl0ZXNwYWNlKElubGluZUJpZGlSZXNvbHZlciYgcmVz
b2x2ZXIsIGJvb2wgZmlyc3RMaW5lLCBib29sIGlzTGluZUVtcHR5LCBib29sIHByZXZpb3VzTGlu
ZUJyb2tlQ2xlYW5seSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZs
b2F0aW5nT2JqZWN0KiBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lKQogewogICAgIGludCBhdmFp
bGFibGVXaWR0aCA9IGxpbmVXaWR0aChoZWlnaHQoKSwgZmlyc3RMaW5lKTsKICAgICB3aGlsZSAo
IXJlc29sdmVyLnBvc2l0aW9uKCkuYXRFbmQoKSAmJiAhcmVxdWlyZXNMaW5lQm94KHJlc29sdmVy
LnBvc2l0aW9uKCksIGlzTGluZUVtcHR5LCBwcmV2aW91c0xpbmVCcm9rZUNsZWFubHkpKSB7CiAg
ICAgICAgIFJlbmRlck9iamVjdCogb2JqZWN0ID0gcmVzb2x2ZXIucG9zaXRpb24oKS5vYmo7CiAg
ICAgICAgIGlmIChvYmplY3QtPmlzRmxvYXRpbmcoKSkgewotICAgICAgICAgICAgaW5zZXJ0Rmxv
YXRpbmdPYmplY3QodG9SZW5kZXJCb3gob2JqZWN0KSk7Ci0gICAgICAgICAgICBwb3NpdGlvbk5l
d0Zsb2F0cygpOworICAgICAgICAgICAgcG9zaXRpb25OZXdGbG9hdE9uTGluZShpbnNlcnRGbG9h
dGluZ09iamVjdCh0b1JlbmRlckJveChvYmplY3QpKSwgbGFzdEZsb2F0RnJvbVByZXZpb3VzTGlu
ZSk7CiAgICAgICAgICAgICBhdmFpbGFibGVXaWR0aCA9IGxpbmVXaWR0aChoZWlnaHQoKSwgZmly
c3RMaW5lKTsKICAgICAgICAgfSBlbHNlIGlmIChvYmplY3QtPmlzUG9zaXRpb25lZCgpKSB7CiAg
ICAgICAgICAgICAvLyBGSVhNRTogVGhlIG1hdGggaGVyZSBpcyBhY3R1YWxseSBub3QgcmVhbGx5
IHJpZ2h0LiAgSXQncyBhIGJlc3QtZ3Vlc3MgYXBwcm94aW1hdGlvbiB0aGF0CkBAIC0xMzQ5LDE0
ICsxNDA4LDE0IEBAIHN0YXRpYyB2b2lkIHRyeUh5cGhlbmF0aW5nKFJlbmRlclRleHQqIHQKIH0K
IAogSW5saW5lSXRlcmF0b3IgUmVuZGVyQmxvY2s6OmZpbmROZXh0TGluZUJyZWFrKElubGluZUJp
ZGlSZXNvbHZlciYgcmVzb2x2ZXIsIGJvb2wgZmlyc3RMaW5lLCAgYm9vbCYgaXNMaW5lRW1wdHks
IGJvb2wmIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSwgCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCYgaHlwaGVuYXRlZCwgRUNsZWFyKiBjbGVhcikK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sJiBoeXBo
ZW5hdGVkLCBFQ2xlYXIqIGNsZWFyLCBGbG9hdGluZ09iamVjdCogbGFzdEZsb2F0RnJvbVByZXZp
b3VzTGluZSkKIHsKICAgICBBU1NFUlQocmVzb2x2ZXIucG9zaXRpb24oKS5ibG9jayA9PSB0aGlz
KTsKIAogICAgIGJvb2wgYXBwbGllZFN0YXJ0V2lkdGggPSByZXNvbHZlci5wb3NpdGlvbigpLnBv
cyA+IDA7CiAgICAgTGluZU1pZHBvaW50U3RhdGUmIGxpbmVNaWRwb2ludFN0YXRlID0gcmVzb2x2
ZXIubWlkcG9pbnRTdGF0ZSgpOwogICAgIAotICAgIGludCB3aWR0aCA9IHNraXBMZWFkaW5nV2hp
dGVzcGFjZShyZXNvbHZlciwgZmlyc3RMaW5lLCBpc0xpbmVFbXB0eSwgcHJldmlvdXNMaW5lQnJv
a2VDbGVhbmx5KTsKKyAgICBpbnQgd2lkdGggPSBza2lwTGVhZGluZ1doaXRlc3BhY2UocmVzb2x2
ZXIsIGZpcnN0TGluZSwgaXNMaW5lRW1wdHksIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSwgbGFz
dEZsb2F0RnJvbVByZXZpb3VzTGluZSk7CiAKICAgICBpbnQgdyA9IDA7CiAgICAgaW50IHRtcFcg
PSAwOwpAQCAtMTQ0MSwxMiArMTUwMCwxMiBAQCBJbmxpbmVJdGVyYXRvciBSZW5kZXJCbG9jazo6
ZmluZE5leHRMaW5lCiAgICAgICAgICAgICAvLyBhZGQgdG8gc3BlY2lhbCBvYmplY3RzLi4uCiAg
ICAgICAgICAgICBpZiAoby0+aXNGbG9hdGluZygpKSB7CiAgICAgICAgICAgICAgICAgUmVuZGVy
Qm94KiBmbG9hdEJveCA9IHRvUmVuZGVyQm94KG8pOwotICAgICAgICAgICAgICAgIGluc2VydEZs
b2F0aW5nT2JqZWN0KGZsb2F0Qm94KTsKKyAgICAgICAgICAgICAgICBGbG9hdGluZ09iamVjdCog
ZiA9IGluc2VydEZsb2F0aW5nT2JqZWN0KGZsb2F0Qm94KTsKICAgICAgICAgICAgICAgICAvLyBj
aGVjayBpZiBpdCBmaXRzIGluIHRoZSBjdXJyZW50IGxpbmUuCiAgICAgICAgICAgICAgICAgLy8g
SWYgaXQgZG9lcywgcG9zaXRpb24gaXQgbm93LCBvdGhlcndpc2UsIHBvc2l0aW9uCiAgICAgICAg
ICAgICAgICAgLy8gaXQgYWZ0ZXIgbW92aW5nIHRvIG5leHQgbGluZSAoaW4gbmV3TGluZSgpIGZ1
bmMpCiAgICAgICAgICAgICAgICAgaWYgKGZsb2F0c0ZpdE9uTGluZSAmJiBmbG9hdEJveC0+d2lk
dGgoKSArIGZsb2F0Qm94LT5tYXJnaW5MZWZ0KCkgKyBmbG9hdEJveC0+bWFyZ2luUmlnaHQoKSAr
IHcgKyB0bXBXIDw9IHdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uTmV3Rmxv
YXRzKCk7CisgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uTmV3RmxvYXRPbkxpbmUoZiwgbGFz
dEZsb2F0RnJvbVByZXZpb3VzTGluZSk7CiAgICAgICAgICAgICAgICAgICAgIHdpZHRoID0gbGlu
ZVdpZHRoKGhlaWdodCgpLCBmaXJzdExpbmUpOwogICAgICAgICAgICAgICAgIH0gZWxzZQogICAg
ICAgICAgICAgICAgICAgICBmbG9hdHNGaXRPbkxpbmUgPSBmYWxzZTsKSW5kZXg6IFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94LmNwcAkocmV2aXNpb24gNjY4ODYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NzMsNyArOTczLDcgQEAgdm9pZCBSZW5kZXJC
b3g6Om1hcExvY2FsVG9Db250YWluZXIoUmVuZAogICAgIGlmIChSZW5kZXJWaWV3KiB2ID0gdmll
dygpKSB7CiAgICAgICAgIGlmICh2LT5sYXlvdXRTdGF0ZUVuYWJsZWQoKSAmJiAhcmVwYWludENv
bnRhaW5lcikgewogICAgICAgICAgICAgTGF5b3V0U3RhdGUqIGxheW91dFN0YXRlID0gdi0+bGF5
b3V0U3RhdGUoKTsKLSAgICAgICAgICAgIEludFNpemUgb2Zmc2V0ID0gbGF5b3V0U3RhdGUtPm1f
b2Zmc2V0OworICAgICAgICAgICAgSW50U2l6ZSBvZmZzZXQgPSBsYXlvdXRTdGF0ZS0+bV9wYWlu
dE9mZnNldDsKICAgICAgICAgICAgIG9mZnNldC5leHBhbmQoeCgpLCB5KCkpOwogICAgICAgICAg
ICAgaWYgKHN0eWxlKCktPnBvc2l0aW9uKCkgPT0gUmVsYXRpdmVQb3NpdGlvbiAmJiBsYXllcigp
KQogICAgICAgICAgICAgICAgIG9mZnNldCArPSBsYXllcigpLT5yZWxhdGl2ZVBvc2l0aW9uT2Zm
c2V0KCk7CkBAIC0xMTcwLDcgKzExNzAsNyBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZVJlY3RG
b3JSZXBhaW50KFJlCiAgICAgICAgICAgICAgICAgcmVjdC5tb3ZlKGxheWVyKCktPnJlbGF0aXZl
UG9zaXRpb25PZmZzZXQoKSk7CiAKICAgICAgICAgICAgIHJlY3QubW92ZSh4KCksIHkoKSk7Ci0g
ICAgICAgICAgICByZWN0Lm1vdmUobGF5b3V0U3RhdGUtPm1fb2Zmc2V0KTsKKyAgICAgICAgICAg
IHJlY3QubW92ZShsYXlvdXRTdGF0ZS0+bV9wYWludE9mZnNldCk7CiAgICAgICAgICAgICBpZiAo
bGF5b3V0U3RhdGUtPm1fY2xpcHBlZCkKICAgICAgICAgICAgICAgICByZWN0LmludGVyc2VjdChs
YXlvdXRTdGF0ZS0+bV9jbGlwUmVjdCk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0yOTE1LDQg
KzI5MTUsMTkgQEAgdm9pZCBSZW5kZXJCb3g6OmNsZWFyTGF5b3V0T3ZlcmZsb3coKQogICAgIG1f
b3ZlcmZsb3ctPnJlc2V0TGF5b3V0T3ZlcmZsb3coYm9yZGVyQm94UmVjdCgpKTsKIH0KIAordm9p
ZCBSZW5kZXJCb3g6Om1hcmtEZXNjZW5kYW50QmxvY2tzQW5kTGluZXNGb3JMYXlvdXQoYm9vbCBp
bkxheW91dCkKK3sKKyAgICBpZiAoIW1fZXZlckhhZExheW91dCB8fCBpc1JlcGxhY2VkKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIHNldENoaWxkTmVlZHNMYXlvdXQodHJ1ZSwgIWluTGF5b3V0
KTsKKworICAgIC8vIEl0ZXJhdGUgb3ZlciBvdXIgY2hpbGRyZW4gYW5kIG1hcmsgdGhlbSBhcyBu
ZWVkZWQuCisgICAgZm9yIChSZW5kZXJCb3gqIGNoaWxkID0gZmlyc3RDaGlsZEJveCgpOyBjaGls
ZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmdCb3goKSkgeworICAgICAgICBpZiAoY2hpbGQt
PmlzRmxvYXRpbmdPclBvc2l0aW9uZWQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICBjaGlsZC0+bWFya0Rlc2NlbmRhbnRCbG9ja3NBbmRMaW5lc0ZvckxheW91dChpbkxheW91dCk7
CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3guaAkocmV2aXNpb24gNjY4ODYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAko
d29ya2luZyBjb3B5KQpAQCAtMjk3LDYgKzI5Nyw4IEBAIHB1YmxpYzoKICAgICBib29sIHNocmlu
a1RvQXZvaWRGbG9hdHMoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgYXZvaWRzRmxvYXRzKCkg
Y29uc3Q7CiAKKyAgICB2aXJ0dWFsIHZvaWQgbWFya0Rlc2NlbmRhbnRCbG9ja3NBbmRMaW5lc0Zv
ckxheW91dChib29sIGluTGF5b3V0ID0gdHJ1ZSk7CisgICAgCiBwcm90ZWN0ZWQ6CiAgICAgdmly
dHVhbCB2b2lkIHN0eWxlV2lsbENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0
eWxlKiBuZXdTdHlsZSk7CiAgICAgdmlydHVhbCB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlm
ZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsKSW5kZXg6IFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHAJKHJldmlzaW9uIDY2ODg2KQorKysgV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDEsNyAr
MjAxLDcgQEAgdm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6Y2FsY1ByZWZXaWR0aHMoKQogICAgIHNl
dFByZWZXaWR0aHNEaXJ0eShmYWxzZSk7CiB9CiAKLXZvaWQgUmVuZGVyRmxleGlibGVCb3g6Omxh
eW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbikKK3ZvaWQgUmVuZGVyRmxleGlibGVCb3g6
OmxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgaW50IC8qcGFnZUhlaWdodCBGSVhN
RTogSW1wbGVtZW50ICovKQogewogICAgIEFTU0VSVChuZWVkc0xheW91dCgpKTsKIApAQCAtMjc4
LDYgKzI3OCw5IEBAIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmxheW91dEJsb2NrKGJvb2wKIAog
ICAgIHN0YXRlUHVzaGVyLnBvcCgpOwogCisgICAgaWYgKHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+
bV9wYWdlSGVpZ2h0KQorICAgICAgICBzZXRQYWdlWSh2aWV3KCktPmxheW91dFN0YXRlKCktPnBh
Z2VZKHkoKSkpOworCiAgICAgLy8gVXBkYXRlIG91ciBzY3JvbGxiYXJzIGlmIHdlJ3JlIG92ZXJm
bG93OmF1dG8vc2Nyb2xsL2hpZGRlbiBub3cgdGhhdCB3ZSBrbm93IGlmCiAgICAgLy8gd2Ugb3Zl
cmZsb3cgb3Igbm90LgogICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSkKQEAgLTMzMSw2ICszMzQs
OCBAQCB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjpsYXlvdXRIb3Jpem9udGFsCiAgICAgYm9vbCBo
YXZlRmxleCA9IGZhbHNlOwogICAgIGdhdGhlckZsZXhDaGlsZHJlbkluZm8oaXRlcmF0b3IsIHJl
bGF5b3V0Q2hpbGRyZW4sIGhpZ2hlc3RGbGV4R3JvdXAsIGxvd2VzdEZsZXhHcm91cCwgaGF2ZUZs
ZXgpOwogCisgICAgYm9vbCBwYWdpbmF0ZWQgPSB2aWV3KCktPmxheW91dFN0YXRlKCktPnBhZ2lu
YXRlZCgpOworCiAgICAgUmVuZGVyQm94KiBjaGlsZDsKIAogICAgIFJlbmRlckJsb2NrOjpzdGFy
dERlbGF5VXBkYXRlU2Nyb2xsSW5mbygpOwpAQCAtMzYxLDYgKzM2NiwxMiBAQCB2b2lkIFJlbmRl
ckZsZXhpYmxlQm94OjpsYXlvdXRIb3Jpem9udGFsCiAgICAgICAgICAgICAvLyBDb21wdXRlIHRo
ZSBjaGlsZCdzIHZlcnRpY2FsIG1hcmdpbnMuCiAgICAgICAgICAgICBjaGlsZC0+Y2FsY1ZlcnRp
Y2FsTWFyZ2lucygpOwogICAgIAorICAgICAgICAgICAgaWYgKCFjaGlsZC0+bmVlZHNMYXlvdXQo
KSAmJiBwYWdpbmF0ZWQgJiYgdmlldygpLT5sYXlvdXRTdGF0ZSgpLT5tX3BhZ2VIZWlnaHQpIHsK
KyAgICAgICAgICAgICAgICBSZW5kZXJCbG9jayogY2hpbGRSZW5kZXJCbG9jayA9IGNoaWxkLT5p
c1JlbmRlckJsb2NrKCkgPyB0b1JlbmRlckJsb2NrKGNoaWxkKSA6IDA7CisgICAgICAgICAgICAg
ICAgaWYgKGNoaWxkUmVuZGVyQmxvY2sgJiYgdmlldygpLT5sYXlvdXRTdGF0ZSgpLT5wYWdlWShj
aGlsZC0+eSgpKSAhPSBjaGlsZFJlbmRlckJsb2NrLT5wYWdlWSgpKQorICAgICAgICAgICAgICAg
ICAgICBjaGlsZFJlbmRlckJsb2NrLT5zZXRDaGlsZE5lZWRzTGF5b3V0KHRydWUsIGZhbHNlKTsK
KyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgLy8gTm93IGRvIHRoZSBsYXlvdXQuCiAgICAg
ICAgICAgICBjaGlsZC0+bGF5b3V0SWZOZWVkZWQoKTsKICAgICAKQEAgLTQyOCw2ICs0MzksMTMg
QEAgdm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6bGF5b3V0SG9yaXpvbnRhbAogICAgICAgICAgICAg
Y2hpbGQtPmNhbGNIZWlnaHQoKTsKICAgICAgICAgICAgIGlmIChvbGRDaGlsZEhlaWdodCAhPSBj
aGlsZC0+aGVpZ2h0KCkpCiAgICAgICAgICAgICAgICAgY2hpbGQtPnNldENoaWxkTmVlZHNMYXlv
dXQodHJ1ZSwgZmFsc2UpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFjaGls
ZC0+bmVlZHNMYXlvdXQoKSAmJiBwYWdpbmF0ZWQgJiYgdmlldygpLT5sYXlvdXRTdGF0ZSgpLT5t
X3BhZ2VIZWlnaHQpIHsKKyAgICAgICAgICAgICAgICBSZW5kZXJCbG9jayogY2hpbGRSZW5kZXJC
bG9jayA9IGNoaWxkLT5pc1JlbmRlckJsb2NrKCkgPyB0b1JlbmRlckJsb2NrKGNoaWxkKSA6IDA7
CisgICAgICAgICAgICAgICAgaWYgKGNoaWxkUmVuZGVyQmxvY2sgJiYgdmlldygpLT5sYXlvdXRT
dGF0ZSgpLT5wYWdlWShjaGlsZC0+eSgpKSAhPSBjaGlsZFJlbmRlckJsb2NrLT5wYWdlWSgpKQor
ICAgICAgICAgICAgICAgICAgICBjaGlsZFJlbmRlckJsb2NrLT5zZXRDaGlsZE5lZWRzTGF5b3V0
KHRydWUsIGZhbHNlKTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgY2hpbGQtPmxheW91
dElmTmVlZGVkKCk7CiAgICAgCiAgICAgICAgICAgICAvLyBXZSBjYW4gcGxhY2UgdGhlIGNoaWxk
IG5vdywgdXNpbmcgb3VyIHZhbHVlIG9mIGJveC1hbGlnbi4KQEAgLTY0MSw2ICs2NTksOCBAQCB2
b2lkIFJlbmRlckZsZXhpYmxlQm94OjpsYXlvdXRWZXJ0aWNhbEJvCiAgICAgYm9vbCBoYXZlRmxl
eCA9IGZhbHNlOwogICAgIGdhdGhlckZsZXhDaGlsZHJlbkluZm8oaXRlcmF0b3IsIHJlbGF5b3V0
Q2hpbGRyZW4sIGhpZ2hlc3RGbGV4R3JvdXAsIGxvd2VzdEZsZXhHcm91cCwgaGF2ZUZsZXgpOwog
CisgICAgYm9vbCBwYWdpbmF0ZWQgPSB2aWV3KCktPmxheW91dFN0YXRlKCktPnBhZ2luYXRlZCgp
OworCiAgICAgUmVuZGVyQm94KiBjaGlsZDsKIAogICAgIC8vIFdlIGNvbmZpbmUgdGhlIGxpbmUg
Y2xhbXAgdWdsaW5lc3MgdG8gdmVydGljYWwgZmxleGlibGUgYm94ZXMgKHRodXMga2VlcGluZyBp
dCBvdXQgb2YKQEAgLTc4OSw2ICs4MDksMTIgQEAgdm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6bGF5
b3V0VmVydGljYWxCbwogICAgICAgICAgICAgLy8gQWRkIGluIHRoZSBjaGlsZCdzIG1hcmdpblRv
cCB0byBvdXIgaGVpZ2h0LgogICAgICAgICAgICAgc2V0SGVpZ2h0KGhlaWdodCgpICsgY2hpbGQt
Pm1hcmdpblRvcCgpKTsKICAgICAKKyAgICAgICAgICAgIGlmICghY2hpbGQtPm5lZWRzTGF5b3V0
KCkgJiYgcGFnaW5hdGVkICYmIHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+bV9wYWdlSGVpZ2h0KSB7
CisgICAgICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGNoaWxkUmVuZGVyQmxvY2sgPSBjaGlsZC0+
aXNSZW5kZXJCbG9jaygpID8gdG9SZW5kZXJCbG9jayhjaGlsZCkgOiAwOworICAgICAgICAgICAg
ICAgIGlmIChjaGlsZFJlbmRlckJsb2NrICYmIHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+cGFnZVko
Y2hpbGQtPnkoKSkgIT0gY2hpbGRSZW5kZXJCbG9jay0+cGFnZVkoKSkKKyAgICAgICAgICAgICAg
ICAgICAgY2hpbGRSZW5kZXJCbG9jay0+c2V0Q2hpbGROZWVkc0xheW91dCh0cnVlLCBmYWxzZSk7
CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIC8vIE5vdyBkbyBhIGxheW91dC4KICAgICAg
ICAgICAgIGNoaWxkLT5sYXlvdXRJZk5lZWRlZCgpOwogICAgIApJbmRleDogV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRmxleGlibGVCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJGbGV4aWJsZUJveC5oCShyZXZpc2lvbiA2Njg4NikKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckZsZXhpYmxlQm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAg
cHVibGljOgogICAgIHZvaWQgY2FsY0hvcml6b250YWxQcmVmV2lkdGhzKCk7CiAgICAgdm9pZCBj
YWxjVmVydGljYWxQcmVmV2lkdGhzKCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0QmxvY2so
Ym9vbCByZWxheW91dENoaWxkcmVuKTsKKyAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0QmxvY2soYm9v
bCByZWxheW91dENoaWxkcmVuLCBpbnQgcGFnZUhlaWdodCk7CiAgICAgdm9pZCBsYXlvdXRIb3Jp
em9udGFsQm94KGJvb2wgcmVsYXlvdXRDaGlsZHJlbik7CiAgICAgdm9pZCBsYXlvdXRWZXJ0aWNh
bEJveChib29sIHJlbGF5b3V0Q2hpbGRyZW4pOwogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJJbmxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklu
bGluZS5jcHAJKHJldmlzaW9uIDY2ODg2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5s
aW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQ3LDcgKzY0Nyw3IEBAIHZvaWQgUmVuZGVySW5s
aW5lOjpjb21wdXRlUmVjdEZvclJlcGFpbnQKICAgICAgICAgICAgIExheW91dFN0YXRlKiBsYXlv
dXRTdGF0ZSA9IHYtPmxheW91dFN0YXRlKCk7CiAgICAgICAgICAgICBpZiAoc3R5bGUoKS0+cG9z
aXRpb24oKSA9PSBSZWxhdGl2ZVBvc2l0aW9uICYmIGxheWVyKCkpCiAgICAgICAgICAgICAgICAg
cmVjdC5tb3ZlKGxheWVyKCktPnJlbGF0aXZlUG9zaXRpb25PZmZzZXQoKSk7Ci0gICAgICAgICAg
ICByZWN0Lm1vdmUobGF5b3V0U3RhdGUtPm1fb2Zmc2V0KTsKKyAgICAgICAgICAgIHJlY3QubW92
ZShsYXlvdXRTdGF0ZS0+bV9wYWludE9mZnNldCk7CiAgICAgICAgICAgICBpZiAobGF5b3V0U3Rh
dGUtPm1fY2xpcHBlZCkKICAgICAgICAgICAgICAgICByZWN0LmludGVyc2VjdChsYXlvdXRTdGF0
ZS0+bV9jbGlwUmVjdCk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC03MzQsNyArNzM0LDcgQEAg
dm9pZCBSZW5kZXJJbmxpbmU6Om1hcExvY2FsVG9Db250YWluZXIoUgogICAgIGlmIChSZW5kZXJW
aWV3ICp2ID0gdmlldygpKSB7CiAgICAgICAgIGlmICh2LT5sYXlvdXRTdGF0ZUVuYWJsZWQoKSAm
JiAhcmVwYWludENvbnRhaW5lcikgewogICAgICAgICAgICAgTGF5b3V0U3RhdGUqIGxheW91dFN0
YXRlID0gdi0+bGF5b3V0U3RhdGUoKTsKLSAgICAgICAgICAgIEludFNpemUgb2Zmc2V0ID0gbGF5
b3V0U3RhdGUtPm1fb2Zmc2V0OworICAgICAgICAgICAgSW50U2l6ZSBvZmZzZXQgPSBsYXlvdXRT
dGF0ZS0+bV9wYWludE9mZnNldDsKICAgICAgICAgICAgIGlmIChzdHlsZSgpLT5wb3NpdGlvbigp
ID09IFJlbGF0aXZlUG9zaXRpb24gJiYgbGF5ZXIoKSkKICAgICAgICAgICAgICAgICBvZmZzZXQg
Kz0gbGF5ZXIoKS0+cmVsYXRpdmVQb3NpdGlvbk9mZnNldCgpOwogICAgICAgICAgICAgdHJhbnNm
b3JtU3RhdGUubW92ZShvZmZzZXQpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAko
cmV2aXNpb24gNjY5MDMpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI1NDEsMTEgKzI1NDEsMTEgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFp
bnRDaGlsZExheWVySW50b0NvbAogICAgIGNvbHVtbkJsb2NrLT5sYXllcigpLT5jb252ZXJ0VG9M
YXllckNvb3Jkcyhyb290TGF5ZXIsIGxheWVyWCwgbGF5ZXJZKTsKICAgICAKICAgICBDb2x1bW5J
bmZvKiBjb2xJbmZvID0gY29sdW1uQmxvY2stPmNvbHVtbkluZm8oKTsKLSAgICB1bnNpZ25lZCBj
b2xDb3VudCA9IGNvbEluZm8tPmNvbHVtbkNvdW50KCk7CisgICAgdW5zaWduZWQgY29sQ291bnQg
PSBjb2x1bW5CbG9jay0+Y29sdW1uQ291bnQoY29sSW5mbyk7CiAgICAgaW50IGN1cnJZT2Zmc2V0
ID0gMDsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY29sQ291bnQ7IGkrKykgewogICAg
ICAgICAvLyBGb3IgZWFjaCByZWN0LCB3ZSBjbGlwIHRvIHRoZSByZWN0LCBhbmQgdGhlbiB3ZSBh
ZGp1c3Qgb3VyIGNvb3Jkcy4KLSAgICAgICAgSW50UmVjdCBjb2xSZWN0ID0gY29sSW5mby0+Y29s
dW1uUmVjdEF0KGkpOworICAgICAgICBJbnRSZWN0IGNvbFJlY3QgPSBjb2x1bW5CbG9jay0+Y29s
dW1uUmVjdEF0KGNvbEluZm8sIGkpOwogICAgICAgICBpbnQgY3VyclhPZmZzZXQgPSBjb2xSZWN0
LngoKSAtIChjb2x1bW5CbG9jay0+Ym9yZGVyTGVmdCgpICsgY29sdW1uQmxvY2stPnBhZGRpbmdM
ZWZ0KCkpOwogICAgICAgICBjb2xSZWN0Lm1vdmUobGF5ZXJYLCBsYXllclkpOwogCkBAIC0zMDA3
LDE3ICszMDA3LDE3IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdENoaWxkTGEK
ICAgICBjb2x1bW5CbG9jay0+bGF5ZXIoKS0+Y29udmVydFRvTGF5ZXJDb29yZHMocm9vdExheWVy
LCBsYXllclgsIGxheWVyWSk7CiAgICAgCiAgICAgQ29sdW1uSW5mbyogY29sSW5mbyA9IGNvbHVt
bkJsb2NrLT5jb2x1bW5JbmZvKCk7Ci0gICAgaW50IGNvbENvdW50ID0gY29sSW5mby0+Y29sdW1u
Q291bnQoKTsKKyAgICBpbnQgY29sQ291bnQgPSBjb2x1bW5CbG9jay0+Y29sdW1uQ291bnQoY29s
SW5mbyk7CiAgICAgCiAgICAgLy8gV2UgaGF2ZSB0byBnbyBiYWNrd2FyZHMgZnJvbSB0aGUgbGFz
dCBjb2x1bW4gdG8gdGhlIGZpcnN0LgogICAgIGludCBsZWZ0ID0gY29sdW1uQmxvY2stPmJvcmRl
ckxlZnQoKSArIGNvbHVtbkJsb2NrLT5wYWRkaW5nTGVmdCgpOwogICAgIGludCBjdXJyWU9mZnNl
dCA9IDA7CiAgICAgaW50IGk7CiAgICAgZm9yIChpID0gMDsgaSA8IGNvbENvdW50OyBpKyspCi0g
ICAgICAgIGN1cnJZT2Zmc2V0IC09IGNvbEluZm8tPmNvbHVtblJlY3RBdChpKS5oZWlnaHQoKTsK
KyAgICAgICAgY3VycllPZmZzZXQgLT0gY29sdW1uQmxvY2stPmNvbHVtblJlY3RBdChjb2xJbmZv
LCBpKS5oZWlnaHQoKTsKICAgICBmb3IgKGkgPSBjb2xDb3VudCAtIDE7IGkgPj0gMDsgaS0tKSB7
CiAgICAgICAgIC8vIEZvciBlYWNoIHJlY3QsIHdlIGNsaXAgdG8gdGhlIHJlY3QsIGFuZCB0aGVu
IHdlIGFkanVzdCBvdXIgY29vcmRzLgotICAgICAgICBJbnRSZWN0IGNvbFJlY3QgPSBjb2xJbmZv
LT5jb2x1bW5SZWN0QXQoaSk7CisgICAgICAgIEludFJlY3QgY29sUmVjdCA9IGNvbHVtbkJsb2Nr
LT5jb2x1bW5SZWN0QXQoY29sSW5mbywgaSk7CiAgICAgICAgIGludCBjdXJyWE9mZnNldCA9IGNv
bFJlY3QueCgpIC0gbGVmdDsKICAgICAgICAgY3VycllPZmZzZXQgKz0gY29sUmVjdC5oZWlnaHQo
KTsKICAgICAgICAgY29sUmVjdC5tb3ZlKGxheWVyWCwgbGF5ZXJZKTsKSW5kZXg6IFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5jcHAJKHJldmlzaW9uIDY2ODg2KQorKysgV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3
ICszNSw2IEBACiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmll
dy5oIgogI2luY2x1ZGUgIlJvb3RJbmxpbmVCb3guaCIKLSNpbmNsdWRlICJTZXR0aW5ncy5oIiAv
LyBGSVhNRTogVGhpcyBpbmNsdWRlIGNhbiBiZSByZW1vdmVkIHdoZW4gcGFnaW5hdGVEdXJpbmdM
YXlvdXRFbmFibGVkIGlzIHRha2VuIG91dC4KIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIApAQCAt
MTYxLDcgKzE2MCw3IEBAIHZvaWQgUmVuZGVyTGluZUJveExpc3Q6OnBhaW50KFJlbmRlckJveE0K
ICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVuZGVyVmlldyogdiA9IHJlbmRlcmVyLT52aWV3KCk7
Ci0gICAgYm9vbCB1c2VQcmludFJlY3QgPSAhdi0+cHJpbnRSZWN0KCkuaXNFbXB0eSgpICYmICFy
ZW5kZXJlci0+ZG9jdW1lbnQoKS0+c2V0dGluZ3MoKS0+cGFnaW5hdGVEdXJpbmdMYXlvdXRFbmFi
bGVkKCk7CisgICAgYm9vbCB1c2VQcmludFJlY3QgPSAhdi0+cHJpbnRSZWN0KCkuaXNFbXB0eSgp
OwogICAgIAogICAgIC8vIFdlIGNhbiBjaGVjayB0aGUgZmlyc3QgYm94IGFuZCBsYXN0IGJveCBh
bmQgYXZvaWQgcGFpbnRpbmcgaWYgd2UgZG9uJ3QKICAgICAvLyBpbnRlcnNlY3QuICBUaGlzIGlz
IGEgcXVpY2sgc2hvcnQtY2lyY3VpdCB0aGF0IHdlIGNhbiB0YWtlIHRvIGF2b2lkIHdhbGtpbmcg
YW55IGxpbmVzLgpAQCAtMjE1LDcgKzIxNCw2IEBAIHZvaWQgUmVuZGVyTGluZUJveExpc3Q6OnBh
aW50KFJlbmRlckJveE0KICAgICAgICAgaW50IGJvdHRvbSA9IGN1cnItPmJvdHRvbVZpc2libGVP
dmVyZmxvdygpICsgcmVuZGVyZXItPm1heGltYWxPdXRsaW5lU2l6ZShpbmZvLnBoYXNlKTsKICAg
ICAgICAgaCA9IGJvdHRvbSAtIHRvcDsKICAgICAgICAgeVBvcyA9IHR5ICsgdG9wOwotICAgICAg
ICB2LT5zZXRNaW5pbXVtQ29sdW1uSGVpZ2h0KGgpOwogICAgICAgICBpZiAoeVBvcyA8IGluZm8u
cmVjdC5ib3R0b20oKSAmJiB5UG9zICsgaCA+IGluZm8ucmVjdC55KCkpCiAgICAgICAgICAgICBj
dXJyLT5wYWludChpbmZvLCB0eCwgdHkpOwogICAgIH0KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
YWJsZS5jcHAJKHJldmlzaW9uIDY2ODg2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFi
bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw4ICs1OSwxMCBAQCBSZW5kZXJUYWJsZTo6UmVu
ZGVyVGFibGUoTm9kZSogbm9kZSkKICAgICAsIG1fYm9yZGVyTGVmdCgwKQogICAgICwgbV9ib3Jk
ZXJSaWdodCgwKQogeworICAgIHNldENoaWxkcmVuSW5saW5lKGZhbHNlKTsKICAgICBtX2NvbHVt
blBvcy5maWxsKDAsIDIpOwogICAgIG1fY29sdW1ucy5maWxsKENvbHVtblN0cnVjdCgpLCAxKTsK
KyAgICAKIH0KIAogdm9pZCBSZW5kZXJUYWJsZTo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJl
bmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKQEAgLTM5OSw2ICs0MDEsOSBA
QCB2b2lkIFJlbmRlclRhYmxlOjpsYXlvdXQoKQogCiAgICAgc3RhdGVQdXNoZXIucG9wKCk7CiAK
KyAgICBpZiAodmlldygpLT5sYXlvdXRTdGF0ZSgpLT5tX3BhZ2VIZWlnaHQpCisgICAgICAgIHNl
dFBhZ2VZKHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+cGFnZVkoeSgpKSk7CisKICAgICBib29sIGRp
ZEZ1bGxSZXBhaW50ID0gcmVwYWludGVyLnJlcGFpbnRBZnRlckxheW91dCgpOwogICAgIC8vIFJl
cGFpbnQgd2l0aCBvdXIgbmV3IGJvdW5kcyBpZiB0aGV5IGFyZSBkaWZmZXJlbnQgZnJvbSBvdXIg
b2xkIGJvdW5kcy4KICAgICBpZiAoIWRpZEZ1bGxSZXBhaW50ICYmIHNlY3Rpb25Nb3ZlZCkKSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuaAkocmV2aXNpb24gNjY4ODYpCisrKyBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDIsNyArMTQyLDcgQEAg
cHVibGljOgogICAgICAgICBpZiAobV9uZWVkc1NlY3Rpb25SZWNhbGMpCiAgICAgICAgICAgICBy
ZWNhbGNTZWN0aW9ucygpOwogICAgIH0KLQorICAgIAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwg
dm9pZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBv
bGRTdHlsZSk7CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5jcHAJKHJldmlz
aW9uIDY2ODg2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTcsOSArMTE3LDE0IEBAIHZvaWQgUmVuZGVyVGFibGVSb3c6OmxheW91
dCgpCiAgICAgLy8gVGFibGUgcm93cyBkbyBub3QgYWRkIHRyYW5zbGF0aW9uLgogICAgIExheW91
dFN0YXRlTWFpbnRhaW5lciBzdGF0ZVB1c2hlcih2aWV3KCksIHRoaXMsIEludFNpemUoKSk7CiAK
KyAgICBib29sIHBhZ2luYXRlZCA9IHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+cGFnaW5hdGVkKCk7
CisgICAgICAgICAgICAgICAgCiAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gZmlyc3RD
aGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICBp
ZiAoY2hpbGQtPmlzVGFibGVDZWxsKCkpIHsKICAgICAgICAgICAgIFJlbmRlclRhYmxlQ2VsbCog
Y2VsbCA9IHRvUmVuZGVyVGFibGVDZWxsKGNoaWxkKTsKKyAgICAgICAgICAgIGlmICghY2VsbC0+
bmVlZHNMYXlvdXQoKSAmJiBwYWdpbmF0ZWQgJiYgdmlldygpLT5sYXlvdXRTdGF0ZSgpLT5tX3Bh
Z2VIZWlnaHQgJiYgdmlldygpLT5sYXlvdXRTdGF0ZSgpLT5wYWdlWShjZWxsLT55KCkpICE9IGNl
bGwtPnBhZ2VZKCkpCisgICAgICAgICAgICAgICAgY2VsbC0+c2V0Q2hpbGROZWVkc0xheW91dCh0
cnVlLCBmYWxzZSk7CisKICAgICAgICAgICAgIGlmIChjaGlsZC0+bmVlZHNMYXlvdXQoKSkgewog
ICAgICAgICAgICAgICAgIGNlbGwtPmNhbGNWZXJ0aWNhbE1hcmdpbnMoKTsKICAgICAgICAgICAg
ICAgICBjZWxsLT5sYXlvdXQoKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxl
U2VjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVT
ZWN0aW9uLmNwcAkocmV2aXNpb24gNjY4ODYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
YWJsZVNlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MDUsNiArNjA1LDggQEAgaW50IFJl
bmRlclRhYmxlU2VjdGlvbjo6bGF5b3V0Um93cyhpbnQgdAogICAgICAgICAgICAgaWYgKHRlICE9
IG9sZFRlIHx8IGJlICE9IG9sZEJlKSB7CiAgICAgICAgICAgICAgICAgY2VsbC0+c2V0TmVlZHNM
YXlvdXQodHJ1ZSwgZmFsc2UpOwogICAgICAgICAgICAgICAgIGNlbGwtPmxheW91dElmTmVlZGVk
KCk7CisgICAgICAgICAgICAgICAgaWYgKHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+bV9wYWdlSGVp
Z2h0ICYmIGNlbGwtPmhlaWdodCgpICE9IHJIZWlnaHQpCisgICAgICAgICAgICAgICAgICAgIGNl
bGwtPnNldEhlaWdodChySGVpZ2h0KTsgLy8gRklYTUU6IFBhZ2luYXRpb24gbWlnaHQgaGF2ZSBt
YWRlIHVzIGNoYW5nZSBzaXplLiAgRm9yIG5vdyBqdXN0IHNocmluayBvciBncm93IHRoZSBjZWxs
IHRvIGZpdCB3aXRob3V0IGRvaW5nIGEgcmVsYXlvdXQuCiAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgIGlmICgodGUgIT0gb2xkVGUgfHwgYmUgPiBvbGRCZSkgJiYgIXRhYmxlKCktPnNlbGZO
ZWVkc0xheW91dCgpICYmIGNlbGwtPmNoZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgpKQpJbmRl
eDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAJKHJldmlzaW9uIDY2ODg2KQorKysgV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDYgQEAg
UmVuZGVyVmlldzo6UmVuZGVyVmlldyhOb2RlKiBub2RlLCBGcmFtZQogICAgICwgbV9tYXhpbWFs
T3V0bGluZVNpemUoMCkKICAgICAsIG1fYmVzdFRydW5jYXRlZEF0KDApCiAgICAgLCBtX3RydW5j
YXRvcldpZHRoKDApCi0gICAgLCBtX21pbmltdW1Db2x1bW5IZWlnaHQoMCkKICAgICAsIG1fZm9y
Y2VkUGFnZUJyZWFrKGZhbHNlKQogICAgICwgbV9sYXlvdXRTdGF0ZSgwKQogICAgICwgbV9sYXlv
dXRTdGF0ZURpc2FibGVDb3VudCgwKQpAQCAtNjk1LDcgKzY5NCw2IEBAIHZvaWQgUmVuZGVyVmll
dzo6c2V0QmVzdFRydW5jYXRlZEF0KGludCAKIAogdm9pZCBSZW5kZXJWaWV3OjpwdXNoTGF5b3V0
U3RhdGUoUmVuZGVyT2JqZWN0KiByb290KQogewotICAgIEFTU0VSVCghZG9pbmdGdWxsUmVwYWlu
dCgpKTsKICAgICBBU1NFUlQobV9sYXlvdXRTdGF0ZURpc2FibGVDb3VudCA9PSAwKTsKICAgICBB
U1NFUlQobV9sYXlvdXRTdGF0ZSA9PSAwKTsKIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAko
cmV2aXNpb24gNjY4ODYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgJKHdvcmtp
bmcgY29weSkKQEAgLTgzLDEyICs4MywxMCBAQCBwdWJsaWM6CiAgICAgSW50UmVjdCBwcmludFJl
Y3QoKSBjb25zdCB7IHJldHVybiBtX3ByaW50UmVjdDsgfQogICAgIHZvaWQgc2V0UHJpbnRSZWN0
KGNvbnN0IEludFJlY3QmIHIpIHsgbV9wcmludFJlY3QgPSByOyB9CiAKLSAgICB2b2lkIHNldFRy
dW5jYXRlZEF0KGludCB5KSB7IG1fdHJ1bmNhdGVkQXQgPSB5OyBtX2Jlc3RUcnVuY2F0ZWRBdCA9
IG1fdHJ1bmNhdG9yV2lkdGggPSAwOyBtX21pbmltdW1Db2x1bW5IZWlnaHQgPSAwOyBtX2ZvcmNl
ZFBhZ2VCcmVhayA9IGZhbHNlOyB9CisgICAgdm9pZCBzZXRUcnVuY2F0ZWRBdChpbnQgeSkgeyBt
X3RydW5jYXRlZEF0ID0geTsgbV9iZXN0VHJ1bmNhdGVkQXQgPSBtX3RydW5jYXRvcldpZHRoID0g
MDsgbV9mb3JjZWRQYWdlQnJlYWsgPSBmYWxzZTsgfQogICAgIHZvaWQgc2V0QmVzdFRydW5jYXRl
ZEF0KGludCB5LCBSZW5kZXJCb3hNb2RlbE9iamVjdCogZm9yUmVuZGVyZXIsIGJvb2wgZm9yY2Vk
QnJlYWsgPSBmYWxzZSk7Ci0gICAgdm9pZCBzZXRNaW5pbXVtQ29sdW1uSGVpZ2h0KGludCBoZWln
aHQpIHsgbV9taW5pbXVtQ29sdW1uSGVpZ2h0ID0gaGVpZ2h0OyB9CiAgICAgaW50IGJlc3RUcnVu
Y2F0ZWRBdCgpIGNvbnN0IHsgcmV0dXJuIG1fYmVzdFRydW5jYXRlZEF0OyB9Ci0gICAgaW50IG1p
bmltdW1Db2x1bW5IZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX21pbmltdW1Db2x1bW5IZWlnaHQ7
IH0KLQorICAgIAogICAgIGludCB0cnVuY2F0ZWRBdCgpIGNvbnN0IHsgcmV0dXJuIG1fdHJ1bmNh
dGVkQXQ7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0
PiYsIGludCB0eCwgaW50IHR5KTsKQEAgLTEyMiwyMSArMTIwLDIwIEBAIHB1YmxpYzoKIAogICAg
IGJvb2wgZG9pbmdGdWxsUmVwYWludCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVWaWV3LT5uZWVk
c0Z1bGxSZXBhaW50KCk7IH0KIAotICAgIHZvaWQgcHVzaExheW91dFN0YXRlKFJlbmRlckJveCog
cmVuZGVyZXIsIGNvbnN0IEludFNpemUmIG9mZnNldCkKKyAgICB2b2lkIHB1c2hMYXlvdXRTdGF0
ZShSZW5kZXJCb3gqIHJlbmRlcmVyLCBjb25zdCBJbnRTaXplJiBvZmZzZXQsIGludCBwYWdlSGVp
Z2h0ID0gMCwgQ29sdW1uSW5mbyogY29sSW5mbyA9IDApCiAgICAgewotICAgICAgICBpZiAoZG9p
bmdGdWxsUmVwYWludCgpKQotICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAvLyBXZSBwdXNo
IExheW91dFN0YXRlIGV2ZW4gaWYgbGF5b3V0U3RhdGUgaXMgZGlzYWJsZWQgYmVjYXVzZSBpdCBz
dG9yZXMgbGF5b3V0RGVsdGEgdG9vLgotICAgICAgICBtX2xheW91dFN0YXRlID0gbmV3IChyZW5k
ZXJBcmVuYSgpKSBMYXlvdXRTdGF0ZShtX2xheW91dFN0YXRlLCByZW5kZXJlciwgb2Zmc2V0KTsK
KyAgICAgICAgaWYgKCFkb2luZ0Z1bGxSZXBhaW50KCkgfHwgcmVuZGVyZXItPmhhc0NvbHVtbnMo
KSB8fCBtX2xheW91dFN0YXRlLT5wYWdpbmF0ZWQoKSkKKyAgICAgICAgICAgIG1fbGF5b3V0U3Rh
dGUgPSBuZXcgKHJlbmRlckFyZW5hKCkpIExheW91dFN0YXRlKG1fbGF5b3V0U3RhdGUsIHJlbmRl
cmVyLCBvZmZzZXQsIHBhZ2VIZWlnaHQsIGNvbEluZm8pOwogICAgIH0KIAogICAgIHZvaWQgcHVz
aExheW91dFN0YXRlKFJlbmRlck9iamVjdCopOwogCiAgICAgdm9pZCBwb3BMYXlvdXRTdGF0ZSgp
CiAgICAgewotICAgICAgICBpZiAoZG9pbmdGdWxsUmVwYWludCgpKQotICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICBMYXlvdXRTdGF0ZSogc3RhdGUgPSBtX2xheW91dFN0YXRlOworICAgICAg
ICBpZiAoZG9pbmdGdWxsUmVwYWludCgpICYmICFtX2xheW91dFN0YXRlLT5wYWdpbmF0ZWQoKSkK
KyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgbV9sYXlvdXRTdGF0ZSA9IHN0YXRlLT5tX25l
eHQ7CiAgICAgICAgIHN0YXRlLT5kZXN0cm95KHJlbmRlckFyZW5hKCkpOwogICAgIH0KQEAgLTE5
OCw3ICsxOTUsNiBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIGludCBtX2Jlc3RUcnVuY2F0
ZWRBdDsKICAgICBpbnQgbV90cnVuY2F0b3JXaWR0aDsKLSAgICBpbnQgbV9taW5pbXVtQ29sdW1u
SGVpZ2h0OwogICAgIGJvb2wgbV9mb3JjZWRQYWdlQnJlYWs7CiAgICAgTGF5b3V0U3RhdGUqIG1f
bGF5b3V0U3RhdGU7CiAgICAgdW5zaWduZWQgbV9sYXlvdXRTdGF0ZURpc2FibGVDb3VudDsKQEAg
LTIyNywxMyArMjIzLDEzIEBAIHZvaWQgdG9SZW5kZXJWaWV3KGNvbnN0IFJlbmRlclZpZXcqKTsK
IGNsYXNzIExheW91dFN0YXRlTWFpbnRhaW5lciA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiBwdWJs
aWM6CiAgICAgLy8gY3RvciB0byBwdXNoIG5vdwotICAgIExheW91dFN0YXRlTWFpbnRhaW5lcihS
ZW5kZXJWaWV3KiB2aWV3LCBSZW5kZXJCb3gqIHJvb3QsIEludFNpemUgb2Zmc2V0LCBib29sIGRp
c2FibGVTdGF0ZSA9IGZhbHNlKQorICAgIExheW91dFN0YXRlTWFpbnRhaW5lcihSZW5kZXJWaWV3
KiB2aWV3LCBSZW5kZXJCb3gqIHJvb3QsIEludFNpemUgb2Zmc2V0LCBib29sIGRpc2FibGVTdGF0
ZSA9IGZhbHNlLCBpbnQgcGFnZUhlaWdodCA9IDAsIENvbHVtbkluZm8qIGNvbEluZm8gPSAwKQog
ICAgICAgICA6IG1fdmlldyh2aWV3KQogICAgICAgICAsIG1fZGlzYWJsZWQoZGlzYWJsZVN0YXRl
KQogICAgICAgICAsIG1fZGlkU3RhcnQoZmFsc2UpCiAgICAgICAgICwgbV9kaWRFbmQoZmFsc2Up
CiAgICAgewotICAgICAgICBwdXNoKHJvb3QsIG9mZnNldCk7CisgICAgICAgIHB1c2gocm9vdCwg
b2Zmc2V0LCBwYWdlSGVpZ2h0LCBjb2xJbmZvKTsKICAgICB9CiAgICAgCiAgICAgLy8gY3RvciB0
byBtYXliZSBwdXNoIGxhdGVyCkBAIC0yNTAsMTEgKzI0NiwxMSBAQCBwdWJsaWM6CiAgICAgICAg
IEFTU0VSVChtX2RpZFN0YXJ0ID09IG1fZGlkRW5kKTsgICAvLyBpZiB0aGlzIGZpcmVzLCBpdCBt
ZWFucyB0aGF0IHNvbWVvbmUgZGlkIGEgcHVzaCgpLCBidXQgZm9yZ290IHRvIHBvcCgpLgogICAg
IH0KIAotICAgIHZvaWQgcHVzaChSZW5kZXJCb3gqIHJvb3QsIEludFNpemUgb2Zmc2V0KQorICAg
IHZvaWQgcHVzaChSZW5kZXJCb3gqIHJvb3QsIEludFNpemUgb2Zmc2V0LCBpbnQgcGFnZUhlaWdo
dCA9IDAsIENvbHVtbkluZm8qIGNvbEluZm8gPSAwKQogICAgIHsKICAgICAgICAgQVNTRVJUKCFt
X2RpZFN0YXJ0KTsKICAgICAgICAgLy8gV2UgcHVzaCBzdGF0ZSBldmVuIGlmIGRpc2FibGVkLCBi
ZWNhdXNlIHdlIHN0aWxsIG5lZWQgdG8gc3RvcmUgbGF5b3V0RGVsdGEKLSAgICAgICAgbV92aWV3
LT5wdXNoTGF5b3V0U3RhdGUocm9vdCwgb2Zmc2V0KTsKKyAgICAgICAgbV92aWV3LT5wdXNoTGF5
b3V0U3RhdGUocm9vdCwgb2Zmc2V0LCBwYWdlSGVpZ2h0LCBjb2xJbmZvKTsKICAgICAgICAgaWYg
KG1fZGlzYWJsZWQpCiAgICAgICAgICAgICBtX3ZpZXctPmRpc2FibGVMYXlvdXRTdGF0ZSgpOwog
ICAgICAgICBtX2RpZFN0YXJ0ID0gdHJ1ZTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJ
bmxpbmVCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94
LmgJKHJldmlzaW9uIDY2ODg2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5o
CSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2xp
bmVCcmVha1BvcygwKQogICAgICAgICAsIG1fbGluZVRvcCgwKQogICAgICAgICAsIG1fbGluZUJv
dHRvbSgwKQorICAgICAgICAsIG1fcGFnaW5hdGlvblN0cnV0KDApCiAgICAgewogICAgIH0KIApA
QCAtNTcsNiArNTgsOSBAQCBwdWJsaWM6CiAgICAgaW50IGxpbmVUb3AoKSBjb25zdCB7IHJldHVy
biBtX2xpbmVUb3A7IH0KICAgICBpbnQgbGluZUJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlu
ZUJvdHRvbTsgfQogCisgICAgaW50IHBhZ2luYXRpb25TdHJ1dCgpIGNvbnN0IHsgcmV0dXJuIG1f
cGFnaW5hdGlvblN0cnV0OyB9CisgICAgdm9pZCBzZXRQYWdpbmF0aW9uU3RydXQoaW50IHMpIHsg
bV9wYWdpbmF0aW9uU3RydXQgPSBzOyB9CisKICAgICBpbnQgc2VsZWN0aW9uVG9wKCkgY29uc3Q7
CiAgICAgaW50IHNlbGVjdGlvbkJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIGxpbmVCb3R0b20oKTsg
fQogICAgIGludCBzZWxlY3Rpb25IZWlnaHQoKSBjb25zdCB7IHJldHVybiBtYXgoMCwgc2VsZWN0
aW9uQm90dG9tKCkgLSBzZWxlY3Rpb25Ub3AoKSk7IH0KQEAgLTE0MSw2ICsxNDUsOCBAQCBwcml2
YXRlOgogICAgIGludCBtX2xpbmVUb3A7CiAgICAgaW50IG1fbGluZUJvdHRvbTsKIAorICAgIGlu
dCBtX3BhZ2luYXRpb25TdHJ1dDsKKwogICAgIC8vIEZsb2F0cyBoYW5naW5nIG9mZiB0aGUgbGlu
ZSBhcmUgcHVzaGVkIGludG8gdGhpcyB2ZWN0b3IgZHVyaW5nIGxheW91dC4gSXQgaXMgb25seQog
ICAgIC8vIGdvb2QgZm9yIGFzIGxvbmcgYXMgdGhlIGxpbmUgaGFzIG5vdCBiZWVuIG1hcmtlZCBk
aXJ0eS4KICAgICBPd25QdHI8VmVjdG9yPFJlbmRlckJveCo+ID4gbV9mbG9hdHM7CkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L211bHRpY29sL2JvcmRlci1wYWRkaW5nLXBhZ2luYXRpb24uaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L211bHRpY29sL2JvcmRlci1wYWRkaW5nLXBh
Z2luYXRpb24uaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvbXVsdGljb2wv
Ym9yZGVyLXBhZGRpbmctcGFnaW5hdGlvbi5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkg
QEAKKzxodG1sPgorPGJvZHk+Cis8ZGl2IHN0eWxlPSItd2Via2l0LWNvbHVtbi1jb3VudDoyOy1t
b3otY29sdW1uLWNvdW50OjI7IGJvcmRlcjoycHggc29saWQgbWFyb29uIj4KKzxkaXYgc3R5bGU9
ImhlaWdodDoxMTBweCI+PC9kaXY+Cis8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOmxpbWU7
IGJvcmRlcjoycHggc29saWQgYmxhY2s7IHdpZHRoOjM3NXB4OyAiPgorPGRpdiBzdHlsZT0ibWFy
Z2luOiAwIDEwcHg7IGJhY2tncm91bmQtY29sb3I6Z3JlZW47IGJvcmRlcjogMnB4IHNvbGlkIGJs
dWUiPgorPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTo2NHB4Ij5JbiAybmQgY29sdW1uPC9zcGFuPgor
PC9kaXY+Cis8L2Rpdj4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvbXVsdGljb2wvZmxvYXQtcGFn
aW5hdGUtY29tcGxleC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvbXVsdGlj
b2wvZmxvYXQtcGFnaW5hdGUtY29tcGxleC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvZmFzdC9tdWx0aWNvbC9mbG9hdC1wYWdpbmF0ZS1jb21wbGV4Lmh0bWwJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNDggQEAKKzxkaXYgc3R5bGU9Ii13ZWJraXQtY29sdW1uLXdpZHRoOjMwMHB4
Oy1tb3otY29sdW1uLXdpZHRoOjMwMHB4OyBib3JkZXI6MnB4IHNvbGlkIGJsYWNrOyBoZWlnaHQ6
NDAwcHgiPgorVGhpcyBpcyBzb21lIHRleHQuPGJyPgorVGhpcyBpcyBzb21lIHRleHQuPGJyPlRo
aXMgaXMgc29tZSB0ZXh0Ljxicj5UaGlzIGlzIHNvbWUgdGV4dC48YnI+VGhpcyBpcyBzb21lIHRl
eHQuPGJyPlRoaXMgaXMgc29tZSB0ZXh0Ljxicj5UaGlzIGlzIHNvbWUgdGV4dC48YnI+CitUaGlz
IGlzIHNvbWUgdGV4dC48YnI+VGhpcyBpcyBzb21lIHRleHQuPGJyPlRoaXMgaXMgc29tZSB0ZXh0
Ljxicj5UaGlzIGlzIHNvbWUgdGV4dC48YnI+VGhpcyBpcyBzb21lIHRleHQuPGJyPlRoaXMgaXMg
c29tZSB0ZXh0Ljxicj4KK1RoaXMgaXMgc29tZSB0ZXh0Ljxicj4KKzxwPjxzcGFuIHN0eWxlPSJm
bG9hdDpsZWZ0O2ZvbnQtc2l6ZToxMjhweDsiPlQ8L3NwYW4+CitoaXMgaXMgc29tZSB0ZXh0Ljxi
cj4KK1RoaXMgaXMgc29tZSB0ZXh0Ljxicj5UaGlzIGlzIHNvbWUgdGV4dC48YnI+CitUaGlzIGlz
IHNvbWUgdGV4dC48YnI+VGhpcyBpcyBzb21lIHRleHQuPGJyPlRoaXMgaXMgc29tZSB0ZXh0Ljxi
cj5UaGlzIGlzIHNvbWUgdGV4dC48YnI+CitUaGlzIGlzIHNvbWUgdGV4dC48YnI+VGhpcyBpcyBz
b21lIHRleHQuPGJyPlRoaXMgaXMgc29tZSB0ZXh0Ljxicj5UaGlzIGlzIHNvbWUgdGV4dC48YnI+
CitUaGlzIGlzIHNvbWUgdGV4dC48YnI+VGhpcyBpcyBzb21lIHRleHQuPGJyPlRoaXMgaXMgc29t
ZSB0ZXh0Ljxicj5UaGlzIGlzIHNvbWUgdGV4dC48YnI+VGhpcyBpcyBzb21lIHRleHQuPGJyPlRo
aXMgaXMgc29tZSB0ZXh0Ljxicj4KK1RoaXMgaXMgc29tZSB0ZXh0Ljxicj5UaGlzIGlzIHNvbWUg
dGV4dC48YnI+VGhpcyBpcyBzb21lIHRleHQuPGJyPlRoaXMgaXMgc29tZSB0ZXh0Ljxicj4KK1Ro
aXMgaXMgc29tZSB0ZXh0Ljxicj5UaGlzIGlzIHNvbWUgdGV4dC48YnI+VGhpcyBpcyBzb21lIHRl
eHQuPGJyPlRoaXMgaXMgc29tZSB0ZXh0Ljxicj5UaGlzIGlzIHNvbWUgdGV4dC48YnI+PC9wPgor
PC9kaXY+CisKKzxkaXYgc3R5bGU9Im1hcmdpbi10b3A6MWVtOyAtd2Via2l0LWNvbHVtbi13aWR0
aDozMDBweDstbW96LWNvbHVtbi13aWR0aDozMDBweDsgYm9yZGVyOjJweCBzb2xpZCBibGFjazsg
aGVpZ2h0OjQwMHB4Ij4KK1RoaXMgaXMgc29tZSB0ZXh0Ljxicj4KK1RoaXMgaXMgc29tZSB0ZXh0
Ljxicj5UaGlzIGlzIHNvbWUgdGV4dC48YnI+VGhpcyBpcyBzb21lIHRleHQuPGJyPlRoaXMgaXMg
c29tZSB0ZXh0Ljxicj5UaGlzIGlzIHNvbWUgdGV4dC48YnI+VGhpcyBpcyBzb21lIHRleHQuPGJy
PgorVGhpcyBpcyBzb21lIHRleHQuPGJyPlRoaXMgaXMgc29tZSB0ZXh0Ljxicj5UaGlzIGlzIHNv
bWUgdGV4dC48YnI+VGhpcyBpcyBzb21lIHRleHQuPGJyPlRoaXMgaXMgc29tZSB0ZXh0Ljxicj5U
aGlzIGlzIHNvbWUgdGV4dC48YnI+CitUaGlzIGlzIHNvbWUgdGV4dC48YnI+Cis8cD48aW1nIHN0
eWxlPSJmbG9hdDpsZWZ0O3dpZHRoOjEwMHB4O2hlaWdodDoxMDBweDtiYWNrZ3JvdW5kLWNvbG9y
OmdyZWVuIj48aW1nIHN0eWxlPSJmbG9hdDpyaWdodDt3aWR0aDoxMDBweDtoZWlnaHQ6MjAwcHg7
YmFja2dyb3VuZC1jb2xvcjpncmVlbiI+CitUaGlzIGlzIHNvbWUgdGV4dDxicj4KK1RoaXMgaXMg
c29tZSB0ZXh0Ljxicj5UaGlzIGlzIHNvbWUgdGV4dC48YnI+CitUaGlzIGlzIHNvbWUgdGV4dC48
YnI+VGhpcyBpcyBzb21lIHRleHQuPGJyPlRoaXMgaXMgc29tZSB0ZXh0Ljxicj5UaGlzIGlzIHNv
bWUgdGV4dC48YnI+CitUaGlzIGlzIHNvbWUgdGV4dC48YnI+VGhpcyBpcyBzb21lIHRleHQuPGJy
PlRoaXMgaXMgc29tZSB0ZXh0Ljxicj5UaGlzIGlzIHNvbWUgdGV4dC48YnI+CitUaGlzIGlzIHNv
bWUgdGV4dC48YnI+VGhpcyBpcyBzb21lIHRleHQuPGJyPlRoaXMgaXMgc29tZSB0ZXh0Ljxicj5U
aGlzIGlzIHNvbWUgdGV4dC48YnI+VGhpcyBpcyBzb21lIHRleHQuPGJyPlRoaXMgaXMgc29tZSB0
ZXh0Ljxicj4KK1RoaXMgaXMgc29tZSB0ZXh0Ljxicj5UaGlzIGlzIHNvbWUgdGV4dC48YnI+VGhp
cyBpcyBzb21lIHRleHQuPGJyPlRoaXMgaXMgc29tZSB0ZXh0Ljxicj4KK1RoaXMgaXMgc29tZSB0
ZXh0Ljxicj5UaGlzIGlzIHNvbWUgdGV4dC48YnI+VGhpcyBpcyBzb21lIHRleHQuPGJyPlRoaXMg
aXMgc29tZSB0ZXh0Ljxicj5UaGlzIGlzIHNvbWUgdGV4dC48YnI+PC9wPgorPC9kaXY+CisKKzxk
aXYgc3R5bGU9Im1hcmdpbi10b3A6MWVtOyAtd2Via2l0LWNvbHVtbi13aWR0aDozMDBweDstbW96
LWNvbHVtbi13aWR0aDozMDBweDsgYm9yZGVyOjJweCBzb2xpZCBibGFjazsgaGVpZ2h0OjQwMHB4
Ij4KKzxpbWcgc3R5bGU9ImZsb2F0OmxlZnQ7YmFja2dyb3VuZC1jb2xvcjpncmVlbjsgd2lkdGg6
MzAwcHg7aGVpZ2h0OjM5MHB4Ij4KK0xvbmdlciB0ZXh0IGRlc2lnbmVkIHRvIHRlc3QgZmxvYXQg
YW5kIHdyYXBwaW5nIGJlaGF2aW9yLiBMb25nZXIgdGV4dCBkZXNpZ25lZCB0byB0ZXN0IGZsb2F0
IGFuZCB3cmFwcGluZyBiZWhhdmlvci4KK0xvbmdlciB0ZXh0IGRlc2lnbmVkIHRvIHRlc3QgZmxv
YXQgYW5kIHdyYXBwaW5nIGJlaGF2aW9yLgorTG9uZ2VyIHRleHQgZGVzaWduZWQgdG8gdGVzdCBm
bG9hdCBhbmQgd3JhcHBpbmcgYmVoYXZpb3IuCitMb25nZXIgdGV4dCBkZXNpZ25lZCB0byB0ZXN0
IGZsb2F0IGFuZCB3cmFwcGluZyBiZWhhdmlvci4KKzwvZGl2PgorCis8ZGl2IHN0eWxlPSJtYXJn
aW4tdG9wOjFlbTsgLXdlYmtpdC1jb2x1bW4td2lkdGg6MzAwcHg7LW1vei1jb2x1bW4td2lkdGg6
MzAwcHg7IGJvcmRlcjoycHggc29saWQgYmxhY2s7IGhlaWdodDo0MDBweCI+Cis8aW1nIHN0eWxl
PSJmbG9hdDpsZWZ0O2JhY2tncm91bmQtY29sb3I6Ymx1ZTsgd2lkdGg6MTAwJTtoZWlnaHQ6Mzgw
cHgiPgorPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToyNHB4Ij48aW1nIHN0eWxlPSJmbG9hdDpsZWZ0
O2JhY2tncm91bmQtY29sb3I6Z3JlZW47aGVpZ2h0OjIwcHg7d2lkdGg6MTAwcHgiPgorCitMb25n
ZXIgdGV4dCBkZXNpZ25lZCA8aW1nIHN0eWxlPSJmbG9hdDpyaWdodDtiYWNrZ3JvdW5kLWNvbG9y
OmdyZWVuO2hlaWdodDoyMHB4O3dpZHRoOjEwMHB4Ij50byB0ZXN0IGZsb2F0IGFuZCB3cmFwcGlu
ZyBiZWhhdmlvci4gTG9uZ2VyIHRleHQgZGVzaWduZWQgdG8gdGVzdCBmbG9hdCBhbmQgd3JhcHBp
bmcgYmVoYXZpb3IuCitMb25nZXIgdGV4dCBkZXNpZ25lZCB0byB0ZXN0IGZsb2F0IGFuZCB3cmFw
cGluZyBiZWhhdmlvci4KK0xvbmdlciB0ZXh0IGRlc2lnbmVkIHRvIHRlc3QgZmxvYXQgYW5kIHdy
YXBwaW5nIGJlaGF2aW9yLgorTG9uZ2VyIHRleHQgZGVzaWduZWQgdG8gdGVzdCBmbG9hdCBhbmQg
d3JhcHBpbmcgYmVoYXZpb3IuCis8L3NwYW4+Cis8L2Rpdj4KSW5kZXg6IExheW91dFRlc3RzL2Zh
c3QvbXVsdGljb2wvZmxvYXQtcGFnaW5hdGUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9mYXN0L211bHRpY29sL2Zsb2F0LXBhZ2luYXRlLmh0bWwJKHJldmlzaW9uIDY2ODg2KQorKysg
TGF5b3V0VGVzdHMvZmFzdC9tdWx0aWNvbC9mbG9hdC1wYWdpbmF0ZS5odG1sCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDQgKzEsNCBAQAotPGRpdiBzdHlsZT0iLXdlYmtpdC1jb2x1bW4td2lkdGg6MzAw
cHg7Ym9yZGVyOjJweCBzb2xpZCBibGFjazsgaGVpZ2h0OjQwMHB4Ij4KKzxkaXYgc3R5bGU9Ii13
ZWJraXQtY29sdW1uLXdpZHRoOjMwMHB4Oy1tb3otY29sdW1uLXdpZHRoOjMwMHB4OyBib3JkZXI6
MnB4IHNvbGlkIGJsYWNrOyBoZWlnaHQ6NDAwcHgiPgogVGhpcyBpcyBzb21lIHRleHQuPGJyPgog
VGhpcyBpcyBzb21lIHRleHQuPGJyPlRoaXMgaXMgc29tZSB0ZXh0Ljxicj5UaGlzIGlzIHNvbWUg
dGV4dC48YnI+VGhpcyBpcyBzb21lIHRleHQuPGJyPlRoaXMgaXMgc29tZSB0ZXh0Ljxicj5UaGlz
IGlzIHNvbWUgdGV4dC48YnI+CiBUaGlzIGlzIHNvbWUgdGV4dC48YnI+VGhpcyBpcyBzb21lIHRl
eHQuPGJyPlRoaXMgaXMgc29tZSB0ZXh0Ljxicj4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvbXVs
dGljb2wvZmxvYXQtdHJ1bmNhdGlvbi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3QvbXVsdGljb2wvZmxvYXQtdHJ1bmNhdGlvbi5odG1sCShyZXZpc2lvbiA2Njg4NikKKysrIExh
eW91dFRlc3RzL2Zhc3QvbXVsdGljb2wvZmxvYXQtdHJ1bmNhdGlvbi5odG1sCSh3b3JraW5nIGNv
cHkpCkBAIC0zNCw3ICszNCw3IEBACiAgICAgICAgIDwvZGl2PgogICAgICAgICB0ZXh0IHJ1bnMg
aGVyZSBuZXh0IHRvIHRoZSBmbG9hdAogICAgIDwvZGl2PgotICAgIDwhLS0gSW4gdGhpcyBjYXNl
LCB0aGUgZmxvYXQgZm9yY2VzIGFuIGVhcmx5IGNvbHVtbiBicmVhay4gLS0+CisgICAgPCEtLSBJ
biB0aGlzIGNhc2UsIHRoZSBmbG9hdCBwYWdpbmF0ZXMgYWZ0ZXIgaXRzIHNlY29uZCBsaW5lLiAt
LT4KICAgICA8ZGl2IGNsYXNzPSJjb2x1bW5zIiBzdHlsZT0iaGVpZ2h0OiA3MHB4OyI+CiAgICAg
ICAgIG9uZSBsaW5lIHR3byBsaW5lcyB0aHJlZSBsaW5lcwogICAgICAgICA8ZGl2IGNsYXNzPSJm
bG9hdCIgaWQ9ImYzIj4KQEAgLTQyLDcgKzQyLDcgQEAKICAgICAgICAgPC9kaXY+CiAgICAgICAg
IHRleHQgcnVucyBoZXJlIG5leHQgdG8gdGhlIGZsb2F0CiAgICAgPC9kaXY+Ci0gICAgPCEtLSBJ
biB0aGlzIGNhc2UsIHRoZSBmbG9hdCBmb3JjZXMgYW4gZWFybHkgY29sdW1uIGJyZWFrLiAtLT4K
KyAgICA8IS0tIEluIHRoaXMgY2FzZSwgdGhlIGZsb2F0IHBhZ2luYXRlcyBhZnRlciBpdHMgZmly
c3QgbGluZS4gLS0+CiAgICAgPGRpdiBjbGFzcz0iY29sdW1ucyIgc3R5bGU9ImhlaWdodDogNzBw
eDsiPgogICAgICAgICBvbmUgbGluZSB0d28gbGluZXMgdGhyZWUgbGluZXMgYW5kIHNvbWUgbW9y
ZQogICAgICAgICA8ZGl2IGNsYXNzPSJmbG9hdCIgaWQ9ImY0Ij4KQEAgLTUwLDggKzUwLDcgQEAK
ICAgICAgICAgPC9kaXY+CiAgICAgICAgIHRleHQgcnVucyBoZXJlIG5leHQgdG8gdGhlIGZsb2F0
CiAgICAgPC9kaXY+Ci0gICAgPCEtLSBJbiB0aGlzIGNhc2UsIHRoZSBmbG9hdCBpcyB0b28gdGFs
bCB0byBmaXQgYW55d2F5LCBzbyBpdCBkb2Vzbid0Ci0gICAgICAgICBhZmZlY3QgY29sdW1uIGJy
ZWFrcy4gLS0+CisgICAgPCEtLSBJbiB0aGlzIGNhc2UsIHRoZSBmbG9hdCBwYWdpbmF0ZXMgYWZ0
ZXIgaXRzIHRoaXJkIGxpbmUuIC0tPgogICAgIDxkaXYgY2xhc3M9ImNvbHVtbnMiIHN0eWxlPSJo
ZWlnaHQ6IDQ1cHg7Ij4KICAgICAgICAgb25lIGxpbmUKICAgICAgICAgPGRpdiBjbGFzcz0iZmxv
YXQiIGlkPSJmNSI+CkBAIC03Niw4ICs3NSw4IEBACiAgICAgdmFyIHRlc3RzID0gWwogICAgICAg
ICBbImYxIiwgMCwgNDVdLAogICAgICAgICBbImYyIiwgMCwgNDVdLAotICAgICAgICBbImYzIiwg
MTAwLCA1XSwKLSAgICAgICAgWyJmNCIsIDEwMCwgNV0sCisgICAgICAgIFsiZjMiLCAwLCA0NV0s
CisgICAgICAgIFsiZjQiLCAwLCA1NV0sCiAgICAgICAgIFsiZjUiLCAwLCAxNV0KICAgICBdOwog
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L211bHRpY29sL21hcmdpbi1jb2xsYXBzZS5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvbXVsdGljb2wvbWFyZ2luLWNvbGxhcHNlLmh0
bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L211bHRpY29sL21hcmdpbi1jb2xs
YXBzZS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzIEBACis8aHRtbD4KKzxoZWFkPgor
PHN0eWxlPgorLmNvbHVtbnMgeyAtd2Via2l0LWNvbHVtbi1jb3VudDoyOyAtbW96LWNvbHVtbi1j
b3VudDogMjsgY29sdW1uLWNvdW50OiAyOyBib3JkZXI6MnB4IHNvbGlkIGJsYWNrOyBoZWlnaHQ6
MzAwcHggfQorLmJsb2NrIHsgaGVpZ2h0OjIwMHB4OyBiYWNrZ3JvdW5kLWNvbG9yOnB1cnBsZTsg
fQorPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorVGhlIHR3byBwdXJwbGUgcmVjdGFuZ2xlcyBi
ZWxvdyBzaG91bGQgYm90aCBiZSBhdCB0aGUgdG9wIG9mIHRoZWlyIGNvbHVtbnMuICBJZiBvbmUg
aXMgbG93ZXIgdGhhbiB0aGUgb3RoZXIsIHRoYW4gdGhlIHRlc3QgaGFzIGZhaWxlZC4KKzxkaXYg
Y2xhc3M9ImNvbHVtbnMiPgorPGRpdiBjbGFzcz0iYmxvY2siIHN0eWxlPSJtYXJnaW4tYm90dG9t
OjIwMHB4Ij48L2Rpdj4KKzxkaXYgY2xhc3M9ImJsb2NrIj48L2Rpdj4KKzwvZGl2PgpJbmRleDog
TGF5b3V0VGVzdHMvZmFzdC9tdWx0aWNvbC9tYXgtaGVpZ2h0LWNvbHVtbnMtYmxvY2suaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L211bHRpY29sL21heC1oZWlnaHQtY29sdW1u
cy1ibG9jay5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9tdWx0aWNvbC9t
YXgtaGVpZ2h0LWNvbHVtbnMtYmxvY2suaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5IEBA
Cis8aHRtbD4KKzxib2R5PgorVGhpcyBpcyBjYXB0dXJpbmcgY3VycmVudCBiZWhhdmlvciwgYnV0
IGl0J3Mgbm90IGNsZWFyIHRoYXQgaXQgaXMgY29ycmVjdC4gIEl0J3Mgbm90IGNsZWFyIGlmIG1h
eC1oZWlnaHQgb24gYSBjb2x1bW5zIGJsb2NrIGNvbnN0aXR1dGVzIGEKK2NvbnN0cmFpbnQgb24g
dGhlIGNvbHVtbnMgb3Igbm90LiAgWW91IG9idmlvdXNseSBiZWdpbiB0cnlpbmcgdG8gYmFsYW5j
ZSwgYnV0IG9ubHkgcnVuIGludG8gdGhlIGNvbnN0cmFpbnQgb25jZSB0aGUgYmFsYW5jZWQgY29s
dW1ucyBleGNlZWQKK3RoZSBtYXgtaGVpZ2h0LiAgSXQncyBub3QgY2xlYXIgdGhhdCB5b3Ugc2hv
dWxkIHN1ZGRlbmx5IHNoaWZ0IHRvIGEgZmlsbC4gIE91ciBjdXJyZW50IGJlaGF2aW9yICh3aGlj
aCBtYXRjaGVzIEZpcmVmb3gpIGlzIHRvIGp1c3Qgb3ZlcmZsb3cKK3dpdGhvdXQgY2hhbmdpbmcg
ZnJvbSBiYWxhbmNlIHRvIGZpbGwuCisKKzxkaXYgc3R5bGU9Ii13ZWJraXQtY29sdW1uLWNvdW50
OjU7IC1tb3otY29sdW1uLWNvdW50OjU7IG1heC1oZWlnaHQ6NjBweDtib3JkZXI6MnB4IHNvbGlk
IGJsYWNrOyBmb250LXNpemU6MjRweDsgd2lkdGg6NDAwcHgiPgorVGhpcyBpcyBzb21lIHRleHQ8
YnI+VGhpcyBpcyBzb21lIHRleHQ8YnI+VGhpcyBpcyBzb21lIHRleHQ8YnI+VGhpcyBpcyBzb21l
IHRleHQ8YnI+VGhpcyBpcyBzb21lIHRleHQ8YnI+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmls
ZQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9tdWx0aWNvbC9zaGFkb3ctYnJlYWtpbmcuaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L211bHRpY29sL3NoYWRvdy1icmVha2luZy5o
dG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9tdWx0aWNvbC9zaGFkb3ctYnJl
YWtpbmcuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNyBAQAorPCFET0NUWVBFIGh0bWw+
Cis8aHRtbD4KKwk8aGVhZD4KKwkJPHN0eWxlPgorICAgICAgICAgICAgICAgICAgICAgICAgcCB7
CisJCQkJcG9zaXRpb246YWJzb2x1dGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvcmRlcjoycHggc29saWQgYmxhY2s7CisJCQkJbWF4LXdpZHRoOjQyMHB4OworCQkJCS13ZWJr
aXQtY29sdW1uLWdhcDoyMHB4OworCQkJCS13ZWJraXQtY29sdW1uLXdpZHRoOjIwMHB4OworCQkJ
CS13ZWJraXQtY29sdW1uLXJ1bGU6MXB4IGRvdHRlZCB3aGl0ZTsKKwkJCQlmb250LXNpemU6MTZw
eDsKKwkJCQl0b3A6MjBweDsKKwkJCQlsZWZ0OjIwcHg7CisJCQkJdGV4dC1hbGlnbjpqdXN0aWZ5
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LXdlaWdodDpib2xkOworCQkJ
CXRleHQtc2hhZG93OjFweCAxcHggMTBweCBibGFjazsKKwkJCX0KKwkJCQorCQkJcDpmaXJzdC1s
ZXR0ZXIgeworCQkJCWZvbnQtc2l6ZTozNnB4OworCQkJCW1hcmdpbi1yaWdodDo0cHg7CisJCQkJ
bWFyZ2luLWJvdHRvbTotNnB4OworCQkJCWZsb2F0OmxlZnQ7CisJCQl9CisJCQkKKwkJCQorCQkJ
CisJCTwvc3R5bGU+CisJPC9oZWFkPgorCQorCTxib2R5PgorCQk8ZGl2IGNsYXNzPSJtYWciPgor
CQkJPHA+TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2Npbmcg
ZWxpdC4gQ3JhcyBwaGFyZXRyYSBtb2xsaXMgcGhhcmV0cmEuIFN1c3BlbmRpc3NlIGxhY2luaWEg
b3JjaSBldCBmZWxpcyB0cmlzdGlxdWUgc2l0IGFtZXQgc2VtcGVyIG1hc3NhIHRlbXB1cy4gU3Vz
cGVuZGlzc2UgY29uc2VjdGV0dXIgdGVtcG9yIHB1bHZpbmFyLiBQcm9pbiBkdWkgZXJvcywgdWx0
cmljaWVzIHZlbCBtYWxlc3VhZGEgdmVsLCB0ZW1wb3IgYXQgYW50ZS4gTmFtIGVnZXQgbmlzbCBk
dWkuIERvbmVjIG1vbGVzdGllIGxlY3R1cyBhIG51bmMgc2NlbGVyaXNxdWUgYmxhbmRpdC4gTmFt
IG5vbiBsaWd1bGEgbWFzc2EsIHNlZCBzdXNjaXBpdCB0dXJwaXMuIEV0aWFtIGVnZXQgbGlndWxh
IHNpdCBhbWV0IHR1cnBpcyB2ZW5lbmF0aXMgZGljdHVtIGluIGVsZWlmZW5kIGF1Z3VlLiBEdWlz
IHRlbGx1cyBsZWN0dXMsIHZvbHV0cGF0IGV0IGFkaXBpc2NpbmcgYSwgcGVsbGVudGVzcXVlIGV1
IG1ldHVzLiBBZW5lYW4gc3VzY2lwaXQgY29uZ3VlIG1hdXJpcyBhdCBncmF2aWRhLiBJbnRlZ2Vy
IGxlY3R1cyBsaWd1bGEsIGNvbnNlY3RldHVyIHNpdCBhbWV0IHZlbmVuYXRpcyBpZCwgc2NlbGVy
aXNxdWUgZWdldCBuaXNsLiBOdW5jIGRhcGlidXMgcG9zdWVyZSByaXN1cywgdml0YWUgdGVtcG9y
IG5pYmggaWFjdWxpcyBldC48L3A+CisJCTwvZGl2PgorCTwvYm9keT4KKzwvaHRtbD4KXCBObyBu
ZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L211bHRpY29sL3Rh
YmxlLW1hcmdpbi1jb2xsYXBzZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qv
bXVsdGljb2wvdGFibGUtbWFyZ2luLWNvbGxhcHNlLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9mYXN0L211bHRpY29sL3RhYmxlLW1hcmdpbi1jb2xsYXBzZS5odG1sCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDIyIEBACis8aHRtbD4KKzxoZWFkPgorPHN0eWxlPgorLmNvbHVtbnMg
eyAtd2Via2l0LWNvbHVtbi1jb3VudDoyOyAtbW96LWNvbHVtbi1jb3VudDogMjsgY29sdW1uLWNv
dW50OiAyOyBib3JkZXI6MnB4IHNvbGlkIGJsYWNrOyBoZWlnaHQ6MzAwcHggfQorLmJsb2NrIHsg
aGVpZ2h0OjIwMHB4OyBiYWNrZ3JvdW5kLWNvbG9yOnB1cnBsZTsgfQorPC9zdHlsZT4KKzwvaGVh
ZD4KKzxib2R5PgorVGhlIGZvdXIgcmVjdGFuZ2xlcyBiZWxvdyBzaG91bGQgYm90aCBiZSBhdCB0
aGUgdG9wIG9mIHRoZWlyIGNvbHVtbnMuICBJZiBvbmUgaXMgbG93ZXIgdGhhbiB0aGUgb3RoZXIs
IHRoYW4gdGhlIHRlc3QgaGFzIGZhaWxlZC4gIFRoZSBwYXR0ZXJuIGluIGVhY2gKK2NvbHVtbiBz
aG91bGQgYmUgdGhlIHNhbWUgKG9yYW5nZS95ZWxsb3cpLgorPGRpdiBjbGFzcz0iY29sdW1ucyI+
Cis8dGFibGUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGJvcmRlcj0wIHdpZHRoPTEwMCU+
Cis8dHI+PHRkIHdpZHRoPTUwJT4KKzxkaXYgY2xhc3M9ImJsb2NrIiBzdHlsZT0ibWFyZ2luLWJv
dHRvbToyMDBweDsgYmFja2dyb3VuZC1jb2xvcjpvcmFuZ2UiPjwvZGl2PgorPGRpdiBjbGFzcz0i
YmxvY2siIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOm9yYW5nZSI+PC9kaXY+Cis8L3RkPgorPHRk
IHdpZHRoPTUwJT4KKzxkaXYgY2xhc3M9ImJsb2NrIiBzdHlsZT0ibWFyZ2luLWJvdHRvbToyMDBw
eDsgYmFja2dyb3VuZC1jb2xvcjp5ZWxsb3ciPjwvZGl2PgorPGRpdiBjbGFzcz0iYmxvY2siIHN0
eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOnllbGxvdyI+PC9kaXY+Cis8L3RkPjwvdHI+Cis8L3RhYmxl
PgorPC9kaXY+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L211bHRpY29sL3RhYmxlLXZlcnRpY2Fs
LWFsaWduLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9tdWx0aWNvbC90YWJs
ZS12ZXJ0aWNhbC1hbGlnbi5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9t
dWx0aWNvbC90YWJsZS12ZXJ0aWNhbC1hbGlnbi5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDEyMyBAQAorPGRpdiBzdHlsZT0iLXdlYmtpdC1jb2x1bW4tY291bnQ6MjsgaGVpZ2h0OjM1MHB4
Ij4KKzx0YWJsZSBib3JkZXI9MSBjZWxscGFkZGluZz0xMCBjZWxsc3BhY2luZz0wIj4KKzx0ciBz
dHlsZT0idmVydGljYWwtYWxpZ246YmFzZWxpbmUiPjx0ZD4KK1RoaXMgY2VsbCBoYXMgbG90cyBv
ZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBo
YXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1Ro
aXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0
Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90
cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2Vs
bCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4K
K1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0
ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMg
bG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMg
Y2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxi
cj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBv
ZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBo
YXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1Ro
aXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0
Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90
cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2Vs
bCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4K
KworCis8dGQ+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTo2NHB4Ij5PdGhlciBjZWxsLjwvc3Bhbj48
L3RkPgorPC90cj4KKzwvdGFibGU+Cis8L2Rpdj4KKworPGhyPgorCis8ZGl2IHN0eWxlPSItd2Vi
a2l0LWNvbHVtbi1jb3VudDoyOyBoZWlnaHQ6MzAwcHgiPgorPHRhYmxlIGJvcmRlcj0xIGNlbGxw
YWRkaW5nPTEwIGNlbGxzcGFjaW5nPTAiPgorPHRyIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjptaWRk
bGUiPjx0ZD4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMg
bG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMg
Y2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxi
cj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBv
ZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBo
YXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1Ro
aXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0
Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90
cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2Vs
bCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4K
K1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0
ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMg
bG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMg
Y2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxi
cj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBv
ZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBo
YXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1Ro
aXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KKworCis8dGQ+PHNwYW4gc3R5bGU9ImZvbnQt
c2l6ZTo2NHB4Ij5PdGhlciBjZWxsLjwvc3Bhbj48L3RkPgorPC90cj4KKzwvdGFibGU+Cis8L2Rp
dj4KKworPGhyPgorCis8ZGl2IHN0eWxlPSJtYXJnaW4tdG9wOjFlbTsgLXdlYmtpdC1jb2x1bW4t
Y291bnQ6MjsgaGVpZ2h0OjMwMHB4Ij4KKzx0YWJsZSBib3JkZXI9MSBjZWxscGFkZGluZz0xMCBj
ZWxsc3BhY2luZz0wIj4KKzx0ciBzdHlsZT0idmVydGljYWwtYWxpZ246Ym90dG9tIj48dGQ+CitU
aGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4
dC48YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+CitUaGlzIGNlbGwgaGFzIGxv
dHMgb2YgdGV4dC48YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+CitUaGlzIGNl
bGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+
CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2Yg
dGV4dC48YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+CitUaGlzIGNlbGwgaGFz
IGxvdHMgb2YgdGV4dC48YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+CitUaGlz
IGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48
YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMg
b2YgdGV4dC48YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+CitUaGlzIGNlbGwg
aGFzIGxvdHMgb2YgdGV4dC48YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+CitU
aGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4
dC48YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+CitUaGlzIGNlbGwgaGFzIGxv
dHMgb2YgdGV4dC48YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+CitUaGlzIGNl
bGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+
CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2Yg
dGV4dC48YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+CitUaGlzIGNlbGwgaGFz
IGxvdHMgb2YgdGV4dC48YnI+CisKKworPHRkPjxzcGFuIHN0eWxlPSJmb250LXNpemU6NjRweCI+
T3RoZXIgY2VsbC48L3NwYW4+PC90ZD4KKzwvdHI+Cis8L3RhYmxlPgorPC9kaXY+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67713</attachid>
            <date>2010-09-15 14:19:37 -0700</date>
            <delta_ts>2010-09-16 11:12:32 -0700</delta_ts>
            <desc>Patch (excluding layout test results, which are too big to attach)</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>240512</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NzU2NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTM1IEBACisyMDEwLTA5LTE1ICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzg0MDIsIHBhZ2luYXRlIGNvbHVt
bnMgYXQgbGF5b3V0IHRpbWUgcmF0aGVyIHRoYW4gYXQgcGFpbnQgdGltZS4KKworICAgICAgICBU
aGlzIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgY29sdW1uIGJyZWFraW5nIGF0IGxheW91dCB0aW1l
IHJhdGhlciB0aGFuIGF0IHBhaW50IHRpbWUuICBOZXcgdmFyaWFibGVzIGhhdmUgYmVlbgorICAg
ICAgICBhZGRlZCB0byBMYXlvdXRTdGF0ZSBhbmQgdG8gQ29sdW1uSW5mbyB0byB0cmFjayBjb2x1
bW4gaW5mb3JtYXRpb24gd2hpbGUgbGF5aW5nIG91dC4KKyAgICAgICAgCisgICAgICAgIFRoZSBi
YXNpYyBpZGVhIGJlaGluZCB0aGlzIHBhdGNoIGlzIHRvIHJldGFpbiB0aGUgY29sdW1ucycgcGFp
bnQtdGltZSBoYWNrZXJ5IG9mIHRyYW5zZm9ybWluZyBvbmUgbG9uZyB2ZXJ0aWNhbCBzdHJpcAor
ICAgICAgICBpbnRvIG11bHRpcGxlIGNvbHVtbnMuICBOb3csIGhvd2V2ZXIsIGxheW91dCBpcyBh
d2FyZSBvZiB0aGUgY29sdW1ucyBhbmQgd2lsbCBtb3ZlIG9iamVjdHMgdXAgYW5kIGRvd24gdmVy
dGljYWxseSBpbiBvcmRlcgorICAgICAgICB0byBlbnN1cmUgdGhleSBkb24ndCBpbnRlcnNlY3Qg
YSBicmVhay4KKyAgICAgICAgCisgICAgICAgIE1hbnkgbmV3IHRlc3RzIGFkZGVkIGluIGZhc3Qv
bXVsdGljb2wgYW5kIG5ldyByZXN1bHRzIGFkZGVkIGZvciBleGlzdGluZyBmYXN0L211bHRpY29s
IHRlc3RzLgorCisgICAgICAgICogcmVuZGVyaW5nL0NvbHVtbkluZm8uaDoKKyAgICAgICAgKFdl
YkNvcmU6OkNvbHVtbkluZm86OkNvbHVtbkluZm8pOgorICAgICAgICAoV2ViQ29yZTo6Q29sdW1u
SW5mbzo6Y29sdW1uQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6Q29sdW1uSW5mbzo6Y29sdW1u
SGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbHVtbkluZm86OnNldENvbHVtbkNvdW50QW5k
SGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbHVtbkluZm86OnNldENvbHVtbkhlaWdodCk6
CisgICAgICAgIChXZWJDb3JlOjpDb2x1bW5JbmZvOjp1cGRhdGVNaW5pbXVtQ29sdW1uSGVpZ2h0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbHVtbkluZm86Om1pbmltdW1Db2x1bW5IZWlnaHQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29sdW1uSW5mbzo6Zm9yY2VkQnJlYWtzKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbHVtbkluZm86OmZvcmNlZEJyZWFrT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbHVtbkluZm86Om1heGltdW1EaXN0YW5jZUJldHdlZW5Gb3JjZWRCcmVha3MpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29sdW1uSW5mbzo6Y2xlYXJGb3JjZWRCcmVha3MpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29sdW1uSW5mbzo6YWRkRm9yY2VkQnJlYWspOgorICAgICAgICAqIHJlbmRlcmluZy9M
YXlvdXRTdGF0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRTdGF0ZTo6TGF5b3V0U3Rh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0U3RhdGU6OmNsZWFyUGFnaW5hdGlvbkluZm9y
bWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dFN0YXRlOjpwYWdlWSk6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXRTdGF0ZTo6YWRkRm9yY2VkQ29sdW1uQnJlYWspOgorICAgICAgICAq
IHJlbmRlcmluZy9MYXlvdXRTdGF0ZS5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0U3RhdGU6
OkxheW91dFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dFN0YXRlOjpwYWdpbmF0aW5n
Q29sdW1ucyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRTdGF0ZTo6cGFnaW5hdGVkKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQmxvY2s6OlJlbmRlckJsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjp+
UmVuZGVyQmxvY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxheW91dEJsb2Nr
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpjb2xsYXBzZU1hcmdpbnMpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmVzdGltYXRlVmVydGljYWxQb3NpdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2tDaGlsZCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bGF5b3V0UG9zaXRpb25lZE9iamVjdHMpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnBhaW50Q29sdW1uUnVsZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQmxvY2s6OnBhaW50Q29sdW1uQ29udGVudHMpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2s6OnBhaW50Q2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2s6Omluc2VydEZsb2F0aW5nT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJs
b2NrOjpyZW1vdmVGbG9hdGluZ09iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxv
Y2s6OnBvc2l0aW9uTmV3RmxvYXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpw
b3NpdGlvbk5ld0Zsb2F0T25MaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjps
b3dlc3RQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cmlnaHRtb3N0
UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxlZnRtb3N0UG9zaXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Om1hcmtBbGxEZXNjZW5kYW50c1dp
dGhGbG9hdHNGb3JMYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Om1hcmtE
ZXNjZW5kYW50QmxvY2tzQW5kTGluZXNGb3JMYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQmxvY2s6OmhpdFRlc3RDb2x1bW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2Nr
OjpzZXREZXNpcmVkQ29sdW1uQ291bnRBbmRXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCbG9jazo6Y29sdW1uQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmNv
bHVtblJlY3RBdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bGF5b3V0Q29sdW1u
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6YWRqdXN0UG9pbnRUb0NvbHVtbkNv
bnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjphZGp1c3RSZWN0Rm9yQ29s
dW1ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6YWRqdXN0Rm9yQ29sdW1ucyk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6c2V0TWF4VG9wTWFyZ2lucyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6c2V0TWF4Qm90dG9tTWFyZ2lucyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6c2V0UGFnaW5hdGlvblN0cnV0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjpzZXRQYWdlWSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
bG9jazo6bmV4dFBhZ2VUb3ApOgorICAgICAgICAoV2ViQ29yZTo6aW5Ob3JtYWxGbG93KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjphcHBseUJlZm9yZUJyZWFrKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJsb2NrOjphcHBseUFmdGVyQnJlYWspOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2s6OmFkanVzdEZvclVuc3BsaXR0YWJsZUNoaWxkKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjphZGp1c3RMaW5lUG9zaXRpb25Gb3JQYWdpbmF0aW9uKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJsb2NrOjpwYWdpbmF0aW9uU3RydXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
OnBhZ2VZKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjptYXhUb3BQb3NNYXJnaW4p
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Om1heFRvcE5lZ01hcmdpbik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bWF4Qm90dG9tUG9zTWFyZ2luKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJsb2NrOjptYXhCb3R0b21OZWdNYXJnaW4pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQmxvY2s6OmluaXRNYXhNYXJnaW5WYWx1ZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0OjpGbG9hdGluZ09iamVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3Q6OnR5cGUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQmxvY2s6OlJlbmRlckJsb2NrUmFyZURhdGE6OlJlbmRlckJsb2NrUmFy
ZURhdGEpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxheW91dElubGluZUNoaWxkcmVuKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpkZXRlcm1pbmVTdGFydFBvc2l0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpza2lwTGVhZGluZ1doaXRlc3BhY2UpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmZpbmROZXh0TGluZUJyZWFrKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6
bWFwTG9jYWxUb0NvbnRhaW5lcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbXB1
dGVSZWN0Rm9yUmVwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6Om1hcmtEZXNj
ZW5kYW50QmxvY2tzQW5kTGluZXNGb3JMYXlvdXQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyRmxleGlibGVCb3g6OmxheW91dEJsb2NrKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckZsZXhpYmxlQm94OjpsYXlvdXRIb3Jpem9udGFsQm94KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckZsZXhpYmxlQm94OjpsYXlvdXRWZXJ0aWNhbEJveCk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94Lmg6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlcklubGluZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OmNvbXB1
dGVSZWN0Rm9yUmVwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6Om1hcExv
Y2FsVG9Db250YWluZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlUGFnaW5hdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnRDaGlsZExheWVySW50b0NvbHVtbnMpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmhpdFRlc3RDaGlsZExheWVyQ29sdW1ucyk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxpbmVCb3hMaXN0OjpwYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clRhYmxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpSZW5kZXJUYWJsZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6bGF5b3V0KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyVGFibGUuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVSb3c6OmxheW91dCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUYWJsZVNlY3Rpb246OmxheW91dFJvd3MpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OlJlbmRlclZpZXcpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6cHVzaExheW91dFN0YXRlKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyVmlldy5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6
c2V0VHJ1bmNhdGVkQXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6cHVzaExheW91
dFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OnBvcExheW91dFN0YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dFN0YXRlTWFpbnRhaW5lcjo6TGF5b3V0U3RhdGVNYWlu
dGFpbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dFN0YXRlTWFpbnRhaW5lcjo6cHVzaCk6
CisgICAgICAgICogcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guaDoKKyAgICAgICAgKFdlYkNvcmU6
OlJvb3RJbmxpbmVCb3g6OlJvb3RJbmxpbmVCb3gpOgorICAgICAgICAoV2ViQ29yZTo6Um9vdElu
bGluZUJveDo6cGFnaW5hdGlvblN0cnV0KToKKyAgICAgICAgKFdlYkNvcmU6OlJvb3RJbmxpbmVC
b3g6OnNldFBhZ2luYXRpb25TdHJ1dCk6CisKIDIwMTAtMDktMTQgIE1hcnRpbiBSb2JpbnNvbiAg
PG1yb2JpbnNvbkBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFhhbiBMb3Blei4K
SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL0NvbHVtbkluZm8uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9Db2x1bW5JbmZvLmgJKHJldmlzaW9uIDY3NTY3KQorKysgV2ViQ29yZS9y
ZW5kZXJpbmcvQ29sdW1uSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw4IEBACiAj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgIkludFJlY3QuaCIKIAordXNpbmcgc3Rk
OjptYXg7CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ29sdW1uSW5mbyA6IHB1Ymxp
YyBOb25jb3B5YWJsZSB7CkBAIC0zNiw2ICszOCwxMiBAQCBwdWJsaWM6CiAgICAgQ29sdW1uSW5m
bygpCiAgICAgICAgIDogbV9kZXNpcmVkQ29sdW1uV2lkdGgoMCkKICAgICAgICAgLCBtX2Rlc2ly
ZWRDb2x1bW5Db3VudCgxKQorICAgICAgICAsIG1fY29sdW1uQ291bnQoMSkKKyAgICAgICAgLCBt
X2NvbHVtbkhlaWdodCgwKQorICAgICAgICAsIG1fbWluaW11bUNvbHVtbkhlaWdodCgwKQorICAg
ICAgICAsIG1fZm9yY2VkQnJlYWtzKDApCisgICAgICAgICwgbV9tYXhpbXVtRGlzdGFuY2VCZXR3
ZWVuRm9yY2VkQnJlYWtzKDApCisgICAgICAgICwgbV9mb3JjZWRCcmVha09mZnNldCgwKQogICAg
ICAgICB7IH0KICAgICAKICAgICBpbnQgZGVzaXJlZENvbHVtbldpZHRoKCkgY29uc3QgeyByZXR1
cm4gbV9kZXNpcmVkQ29sdW1uV2lkdGg7IH0KQEAgLTQ0LDE5ICs1Miw1MSBAQCBwdWJsaWM6CiAg
ICAgdW5zaWduZWQgZGVzaXJlZENvbHVtbkNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9kZXNpcmVk
Q29sdW1uQ291bnQ7IH0KICAgICB2b2lkIHNldERlc2lyZWRDb2x1bW5Db3VudCh1bnNpZ25lZCBj
b3VudCkgeyBtX2Rlc2lyZWRDb2x1bW5Db3VudCA9IGNvdW50OyB9CiAKLSAgICAvLyBFbmNhcHN1
bGF0ZWQgZm9yIHRoZSBmdXR1cmUgd2hlcmUgd2UgY2FuIGF2b2lkIHN0b3JpbmcgdGhlIHJlY3Rz
IGFuZCBqdXN0IGNvbXB1dGUgdGhlbSBkeW5hbWljYWxseS4KLSAgICBzaXplX3QgY29sdW1uQ291
bnQoKSBjb25zdCB7IHJldHVybiBtX2NvbHVtblJlY3RzLnNpemUoKTsgfQotICAgIGNvbnN0IElu
dFJlY3QmIGNvbHVtblJlY3RBdChzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gbV9jb2x1bW5SZWN0
c1tpXTsgfQorICAgIHVuc2lnbmVkIGNvbHVtbkNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9jb2x1
bW5Db3VudDsgfQorICAgIGludCBjb2x1bW5IZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2NvbHVt
bkhlaWdodDsgfQogCi0gICAgdm9pZCBjbGVhckNvbHVtbnMoKSB7IG1fY29sdW1uUmVjdHMuY2xl
YXIoKTsgfQorICAgIC8vIFNldCBvdXIgY291bnQgYW5kIGhlaWdodC4gIFRoaXMgaXMgZW5vdWdo
IGluZm8gZm9yIGEgUmVuZGVyQmxvY2sgdG8gY29tcHV0ZSBwYWdlIHJlY3RzCisgICAgLy8gZHlu
YW1pY2FsbHkuCisgICAgdm9pZCBzZXRDb2x1bW5Db3VudEFuZEhlaWdodChpbnQgYywgaW50IGgp
CisgICAgeyAKKyAgICAgICAgbV9jb2x1bW5Db3VudCA9IGM7CisgICAgICAgIG1fY29sdW1uSGVp
Z2h0ID0gaDsKKyAgICB9CisgICAgdm9pZCBzZXRDb2x1bW5IZWlnaHQoaW50IGgpIHsgbV9jb2x1
bW5IZWlnaHQgPSBoOyB9CisKKyAgICB2b2lkIHVwZGF0ZU1pbmltdW1Db2x1bW5IZWlnaHQoaW50
IGgpIHsgbV9taW5pbXVtQ29sdW1uSGVpZ2h0ID0gbWF4KGgsIG1fbWluaW11bUNvbHVtbkhlaWdo
dCk7IH0KKyAgICBpbnQgbWluaW11bUNvbHVtbkhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fbWlu
aW11bUNvbHVtbkhlaWdodDsgfQorCisgICAgaW50IGZvcmNlZEJyZWFrcygpIGNvbnN0IHsgcmV0
dXJuIG1fZm9yY2VkQnJlYWtzOyB9CisgICAgaW50IGZvcmNlZEJyZWFrT2Zmc2V0KCkgY29uc3Qg
eyByZXR1cm4gbV9mb3JjZWRCcmVha09mZnNldDsgfQorICAgIGludCBtYXhpbXVtRGlzdGFuY2VC
ZXR3ZWVuRm9yY2VkQnJlYWtzKCkgY29uc3QgeyByZXR1cm4gbV9tYXhpbXVtRGlzdGFuY2VCZXR3
ZWVuRm9yY2VkQnJlYWtzOyB9CisgICAgdm9pZCBjbGVhckZvcmNlZEJyZWFrcygpCisgICAgeyAK
KyAgICAgICAgbV9mb3JjZWRCcmVha3MgPSAwOworICAgICAgICBtX21heGltdW1EaXN0YW5jZUJl
dHdlZW5Gb3JjZWRCcmVha3MgPSAwOworICAgICAgICBtX2ZvcmNlZEJyZWFrT2Zmc2V0ID0gMDsK
KyAgICB9CisgICAgdm9pZCBhZGRGb3JjZWRCcmVhayhpbnQgb2Zmc2V0RnJvbUZpcnN0UGFnZSkK
KyAgICB7IAorICAgICAgICBBU1NFUlQoIW1fY29sdW1uSGVpZ2h0KTsKKyAgICAgICAgaW50IGRp
c3RhbmNlRnJvbUxhc3RCcmVhayA9IG9mZnNldEZyb21GaXJzdFBhZ2UgLSBtX2ZvcmNlZEJyZWFr
T2Zmc2V0OworICAgICAgICBpZiAoZGlzdGFuY2VGcm9tTGFzdEJyZWFrID09IDApCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIG1fZm9yY2VkQnJlYWtzKys7CisgICAgICAgIG1fbWF4aW11
bURpc3RhbmNlQmV0d2VlbkZvcmNlZEJyZWFrcyA9IG1heChtX21heGltdW1EaXN0YW5jZUJldHdl
ZW5Gb3JjZWRCcmVha3MsIGRpc3RhbmNlRnJvbUxhc3RCcmVhayk7CisgICAgICAgIG1fZm9yY2Vk
QnJlYWtPZmZzZXQgPSBvZmZzZXRGcm9tRmlyc3RQYWdlOworICAgIH0KIAotICAgIC8vIEZJWE1F
OiBXaWxsIGdvIGF3YXkgb25jZSB3ZSBkb24ndCB1c2UgdGhlIFZlY3Rvci4KLSAgICB2b2lkIGFk
ZENvbHVtblJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkgeyBtX2NvbHVtblJlY3RzLmFwcGVuZChy
ZWN0KTsgfQotICAgIAogcHJpdmF0ZToKICAgICBpbnQgbV9kZXNpcmVkQ29sdW1uV2lkdGg7CiAg
ICAgdW5zaWduZWQgbV9kZXNpcmVkQ29sdW1uQ291bnQ7Ci0gICAgVmVjdG9yPEludFJlY3Q+IG1f
Y29sdW1uUmVjdHM7CisgICAgCisgICAgdW5zaWduZWQgbV9jb2x1bW5Db3VudDsKKyAgICBpbnQg
bV9jb2x1bW5IZWlnaHQ7CisgICAgaW50IG1fbWluaW11bUNvbHVtbkhlaWdodDsKKyAgICBpbnQg
bV9mb3JjZWRCcmVha3M7IC8vIEZJWE1FOiBXZSB3aWxsIHVsdGltYXRlbHkgbmVlZCB0byBjYWNo
ZSB3YXkgbW9yZSBpbmZvcm1hdGlvbiB0byBiYWxhbmNlIGFyb3VuZCBmb3JjZWQgYnJlYWtzIHBy
b3Blcmx5LgorICAgIGludCBtX21heGltdW1EaXN0YW5jZUJldHdlZW5Gb3JjZWRCcmVha3M7Cisg
ICAgaW50IG1fZm9yY2VkQnJlYWtPZmZzZXQ7CiB9OwogCiB9CkluZGV4OiBXZWJDb3JlL3JlbmRl
cmluZy9MYXlvdXRTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvTGF5
b3V0U3RhdGUuY3BwCShyZXZpc2lvbiA2NzU2NykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL0xheW91
dFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIkxheW91dFN0YXRlLmgiCiAKKyNpbmNsdWRlICJDb2x1bW5JbmZv
LmgiCiAjaW5jbHVkZSAiUmVuZGVyQXJlbmEuaCIKICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIK
ICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgpAQCAtMzMsOCArMzQsOSBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLUxheW91dFN0YXRlOjpMYXlvdXRTdGF0ZShMYXlvdXRTdGF0ZSogcHJldiwg
UmVuZGVyQm94KiByZW5kZXJlciwgY29uc3QgSW50U2l6ZSYgb2Zmc2V0KQotICAgIDogbV9uZXh0
KHByZXYpCitMYXlvdXRTdGF0ZTo6TGF5b3V0U3RhdGUoTGF5b3V0U3RhdGUqIHByZXYsIFJlbmRl
ckJveCogcmVuZGVyZXIsIGNvbnN0IEludFNpemUmIG9mZnNldCwgaW50IHBhZ2VIZWlnaHQsIENv
bHVtbkluZm8qIGNvbEluZm8pCisgICAgOiBtX2NvbHVtbkluZm8oY29sSW5mbykKKyAgICAsIG1f
bmV4dChwcmV2KQogI2lmbmRlZiBOREVCVUcKICAgICAsIG1fcmVuZGVyZXIocmVuZGVyZXIpCiAj
ZW5kaWYKQEAgLTQ1LDQzICs0Nyw2NyBAQCBMYXlvdXRTdGF0ZTo6TGF5b3V0U3RhdGUoTGF5b3V0
U3RhdGUqIHByCiAgICAgaWYgKGZpeGVkKSB7CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGRvZXNu
J3Qgd29yayBjb3JyZWN0bHkgd2l0aCB0cmFuc2Zvcm1zLgogICAgICAgICBGbG9hdFBvaW50IGZp
eGVkT2Zmc2V0ID0gcmVuZGVyZXItPnZpZXcoKS0+bG9jYWxUb0Fic29sdXRlKEZsb2F0UG9pbnQo
KSwgdHJ1ZSk7Ci0gICAgICAgIG1fb2Zmc2V0ID0gSW50U2l6ZShmaXhlZE9mZnNldC54KCksIGZp
eGVkT2Zmc2V0LnkoKSkgKyBvZmZzZXQ7CisgICAgICAgIG1fcGFpbnRPZmZzZXQgPSBJbnRTaXpl
KGZpeGVkT2Zmc2V0LngoKSwgZml4ZWRPZmZzZXQueSgpKSArIG9mZnNldDsKICAgICB9IGVsc2UK
LSAgICAgICAgbV9vZmZzZXQgPSBwcmV2LT5tX29mZnNldCArIG9mZnNldDsKKyAgICAgICAgbV9w
YWludE9mZnNldCA9IHByZXYtPm1fcGFpbnRPZmZzZXQgKyBvZmZzZXQ7CiAKLSAgICBpZiAocmVu
ZGVyZXItPmlzUmVsUG9zaXRpb25lZCgpKSB7Ci0gICAgICAgIGlmIChyZW5kZXJlci0+aGFzTGF5
ZXIoKSkKLSAgICAgICAgICAgIG1fb2Zmc2V0ICs9IHJlbmRlcmVyLT5sYXllcigpLT5yZWxhdGl2
ZVBvc2l0aW9uT2Zmc2V0KCk7Ci0gICAgfSBlbHNlIGlmIChyZW5kZXJlci0+aXNQb3NpdGlvbmVk
KCkgJiYgIWZpeGVkKSB7CisgICAgaWYgKHJlbmRlcmVyLT5pc1Bvc2l0aW9uZWQoKSAmJiAhZml4
ZWQpIHsKICAgICAgICAgaWYgKFJlbmRlck9iamVjdCogY29udGFpbmVyID0gcmVuZGVyZXItPmNv
bnRhaW5lcigpKSB7CiAgICAgICAgICAgICBpZiAoY29udGFpbmVyLT5pc1JlbFBvc2l0aW9uZWQo
KSAmJiBjb250YWluZXItPmlzUmVuZGVySW5saW5lKCkpCi0gICAgICAgICAgICAgICAgbV9vZmZz
ZXQgKz0gdG9SZW5kZXJJbmxpbmUoY29udGFpbmVyKS0+cmVsYXRpdmVQb3NpdGlvbmVkSW5saW5l
T2Zmc2V0KHJlbmRlcmVyKTsKKyAgICAgICAgICAgICAgICBtX3BhaW50T2Zmc2V0ICs9IHRvUmVu
ZGVySW5saW5lKGNvbnRhaW5lciktPnJlbGF0aXZlUG9zaXRpb25lZElubGluZU9mZnNldChyZW5k
ZXJlcik7CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBtX2xheW91dE9mZnNldCA9IG1fcGFpbnRP
ZmZzZXQ7CisKKyAgICBpZiAocmVuZGVyZXItPmlzUmVsUG9zaXRpb25lZCgpICYmIHJlbmRlcmVy
LT5oYXNMYXllcigpKQorICAgICAgICBtX3BhaW50T2Zmc2V0ICs9IHJlbmRlcmVyLT5sYXllcigp
LT5yZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0KCk7CisKICAgICBtX2NsaXBwZWQgPSAhZml4ZWQgJiYg
cHJldi0+bV9jbGlwcGVkOwogICAgIGlmIChtX2NsaXBwZWQpCiAgICAgICAgIG1fY2xpcFJlY3Qg
PSBwcmV2LT5tX2NsaXBSZWN0OwogCiAgICAgaWYgKHJlbmRlcmVyLT5oYXNPdmVyZmxvd0NsaXAo
KSkgewogICAgICAgICBSZW5kZXJMYXllciogbGF5ZXIgPSByZW5kZXJlci0+bGF5ZXIoKTsKLSAg
ICAgICAgSW50UmVjdCBjbGlwUmVjdCh0b1BvaW50KG1fb2Zmc2V0KSArIHJlbmRlcmVyLT52aWV3
KCktPmxheW91dERlbHRhKCksIGxheWVyLT5zaXplKCkpOworICAgICAgICBJbnRSZWN0IGNsaXBS
ZWN0KHRvUG9pbnQobV9wYWludE9mZnNldCkgKyByZW5kZXJlci0+dmlldygpLT5sYXlvdXREZWx0
YSgpLCBsYXllci0+c2l6ZSgpKTsKICAgICAgICAgaWYgKG1fY2xpcHBlZCkKICAgICAgICAgICAg
IG1fY2xpcFJlY3QuaW50ZXJzZWN0KGNsaXBSZWN0KTsKICAgICAgICAgZWxzZSB7CiAgICAgICAg
ICAgICBtX2NsaXBSZWN0ID0gY2xpcFJlY3Q7CiAgICAgICAgICAgICBtX2NsaXBwZWQgPSB0cnVl
OwogICAgICAgICB9Ci0gICAgICAgIG1fb2Zmc2V0IC09IGxheWVyLT5zY3JvbGxlZENvbnRlbnRP
ZmZzZXQoKTsKKworICAgICAgICBtX3BhaW50T2Zmc2V0IC09IGxheWVyLT5zY3JvbGxlZENvbnRl
bnRPZmZzZXQoKTsKICAgICB9CiAKLSAgICBtX2xheW91dERlbHRhID0gbV9uZXh0LT5tX2xheW91
dERlbHRhOworICAgIC8vIElmIHdlIGVzdGFibGlzaCBhIG5ldyBwYWdlIGhlaWdodCwgdGhlbiBj
YWNoZSB0aGUgb2Zmc2V0IHRvIHRoZSB0b3Agb2YgdGhlIGZpcnN0IHBhZ2UuCisgICAgLy8gV2Ug
Y2FuIGNvbXBhcmUgdGhpcyBsYXRlciBvbiB0byBmaWd1cmUgb3V0IHdoYXQgcGFydCBvZiB0aGUg
cGFnZSB3ZSdyZSBhY3R1YWxseSBvbiwKKyAgICBpZiAocGFnZUhlaWdodCB8fCBtX2NvbHVtbklu
Zm8pIHsKKyAgICAgICAgbV9wYWdlSGVpZ2h0ID0gcGFnZUhlaWdodDsKKyAgICAgICAgbV9wYWdl
T2Zmc2V0ID0gSW50U2l6ZShtX2xheW91dE9mZnNldC53aWR0aCgpICsgcmVuZGVyZXItPmJvcmRl
ckxlZnQoKSArIHJlbmRlcmVyLT5wYWRkaW5nTGVmdCgpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fbGF5b3V0T2Zmc2V0LmhlaWdodCgpICsgcmVuZGVyZXItPmJvcmRlclRvcCgp
ICsgcmVuZGVyZXItPnBhZGRpbmdUb3AoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gSWYg
d2UgZG9uJ3QgZXN0YWJsaXNoIGEgbmV3IHBhZ2UgaGVpZ2h0LCB0aGVuIHByb3BhZ2F0ZSB0aGUg
b2xkIHBhZ2UgaGVpZ2h0IGFuZCBvZmZzZXQgZG93bi4KKyAgICAgICAgbV9wYWdlSGVpZ2h0ID0g
bV9uZXh0LT5tX3BhZ2VIZWlnaHQ7CisgICAgICAgIG1fcGFnZU9mZnNldCA9IG1fbmV4dC0+bV9w
YWdlT2Zmc2V0OworICAgICAgICAKKyAgICAgICAgLy8gRGlzYWJsZSBwYWdpbmF0aW9uIGZvciBv
YmplY3RzIHdlIGRvbid0IHN1cHBvcnQuICBGb3Igbm93IHRoaXMgaW5jbHVkZXMgb3ZlcmZsb3c6
c2Nyb2xsL2F1dG8gYW5kIGlubGluZSBibG9ja3MuCisgICAgICAgIGlmIChyZW5kZXJlci0+aXNS
ZXBsYWNlZCgpIHx8IHJlbmRlcmVyLT5zY3JvbGxzT3ZlcmZsb3coKSkKKyAgICAgICAgICAgIG1f
cGFnZUhlaWdodCA9IDA7CisgICAgfQorICAgIAorICAgIGlmICghbV9jb2x1bW5JbmZvKQorICAg
ICAgICBtX2NvbHVtbkluZm8gPSBtX25leHQtPm1fY29sdW1uSW5mbzsKIAorICAgIG1fbGF5b3V0
RGVsdGEgPSBtX25leHQtPm1fbGF5b3V0RGVsdGE7CisgICAgCiAgICAgLy8gRklYTUU6IDxodHRw
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzQ0Mz4gQXBwbHkgY29udHJvbCBj
bGlwIGlmIHByZXNlbnQuCiB9CiAKIExheW91dFN0YXRlOjpMYXlvdXRTdGF0ZShSZW5kZXJPYmpl
Y3QqIHJvb3QpCiAgICAgOiBtX2NsaXBwZWQoZmFsc2UpCisgICAgLCBtX3BhZ2VIZWlnaHQoMCkK
KyAgICAsIG1fY29sdW1uSW5mbygwKQogICAgICwgbV9uZXh0KDApCiAjaWZuZGVmIE5ERUJVRwog
ICAgICwgbV9yZW5kZXJlcihyb290KQpAQCAtODksMTMgKzExNSwxMyBAQCBMYXlvdXRTdGF0ZTo6
TGF5b3V0U3RhdGUoUmVuZGVyT2JqZWN0KiByCiB7CiAgICAgUmVuZGVyT2JqZWN0KiBjb250YWlu
ZXIgPSByb290LT5jb250YWluZXIoKTsKICAgICBGbG9hdFBvaW50IGFic0NvbnRlbnRQb2ludCA9
IGNvbnRhaW5lci0+bG9jYWxUb0Fic29sdXRlKEZsb2F0UG9pbnQoKSwgZmFsc2UsIHRydWUpOwot
ICAgIG1fb2Zmc2V0ID0gSW50U2l6ZShhYnNDb250ZW50UG9pbnQueCgpLCBhYnNDb250ZW50UG9p
bnQueSgpKTsKKyAgICBtX3BhaW50T2Zmc2V0ID0gSW50U2l6ZShhYnNDb250ZW50UG9pbnQueCgp
LCBhYnNDb250ZW50UG9pbnQueSgpKTsKIAogICAgIGlmIChjb250YWluZXItPmhhc092ZXJmbG93
Q2xpcCgpKSB7CiAgICAgICAgIFJlbmRlckxheWVyKiBsYXllciA9IHRvUmVuZGVyQm94TW9kZWxP
YmplY3QoY29udGFpbmVyKS0+bGF5ZXIoKTsKICAgICAgICAgbV9jbGlwcGVkID0gdHJ1ZTsKLSAg
ICAgICAgbV9jbGlwUmVjdCA9IEludFJlY3QodG9Qb2ludChtX29mZnNldCksIGxheWVyLT5zaXpl
KCkpOwotICAgICAgICBtX29mZnNldCAtPSBsYXllci0+c2Nyb2xsZWRDb250ZW50T2Zmc2V0KCk7
CisgICAgICAgIG1fY2xpcFJlY3QgPSBJbnRSZWN0KHRvUG9pbnQobV9wYWludE9mZnNldCksIGxh
eWVyLT5zaXplKCkpOworICAgICAgICBtX3BhaW50T2Zmc2V0IC09IGxheWVyLT5zY3JvbGxlZENv
bnRlbnRPZmZzZXQoKTsKICAgICB9CiB9CiAKQEAgLTEyNiw0ICsxNTIsMjMgQEAgdm9pZCBMYXlv
dXRTdGF0ZTo6b3BlcmF0b3IgZGVsZXRlKHZvaWQqIAogICAgICooc2l6ZV90KilwdHIgPSBzejsK
IH0KIAordm9pZCBMYXlvdXRTdGF0ZTo6Y2xlYXJQYWdpbmF0aW9uSW5mb3JtYXRpb24oKQorewor
ICAgIG1fcGFnZUhlaWdodCA9IG1fbmV4dC0+bV9wYWdlSGVpZ2h0OworICAgIG1fcGFnZU9mZnNl
dCA9IG1fbmV4dC0+bV9wYWdlT2Zmc2V0OworICAgIG1fY29sdW1uSW5mbyA9IG1fbmV4dC0+bV9j
b2x1bW5JbmZvOworfQorCitpbnQgTGF5b3V0U3RhdGU6OnBhZ2VZKGludCBjaGlsZFkpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fbGF5b3V0T2Zmc2V0LmhlaWdodCgpICsgY2hpbGRZIC0gbV9wYWdl
T2Zmc2V0LmhlaWdodCgpOworfQorCit2b2lkIExheW91dFN0YXRlOjphZGRGb3JjZWRDb2x1bW5C
cmVhayhpbnQgY2hpbGRZKQoreworICAgIGlmICghbV9jb2x1bW5JbmZvIHx8IG1fY29sdW1uSW5m
by0+Y29sdW1uSGVpZ2h0KCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbHVtbkluZm8tPmFk
ZEZvcmNlZEJyZWFrKHBhZ2VZKGNoaWxkWSkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRTdGF0ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmgJKHJldmlzaW9uIDY3NTY3KQorKysgV2ViQ29y
ZS9yZW5kZXJpbmcvTGF5b3V0U3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIENvbHVtbkluZm87CiBjbGFzcyBSZW5k
ZXJBcmVuYTsKIGNsYXNzIFJlbmRlckJveDsKIGNsYXNzIFJlbmRlck9iamVjdDsKQEAgLTQwLDYg
KzQxLDggQEAgY2xhc3MgTGF5b3V0U3RhdGUgOiBwdWJsaWMgTm9uY29weWFibGUgewogcHVibGlj
OgogICAgIExheW91dFN0YXRlKCkKICAgICAgICAgOiBtX2NsaXBwZWQoZmFsc2UpCisgICAgICAg
ICwgbV9wYWdlSGVpZ2h0KDApCisgICAgICAgICwgbV9jb2x1bW5JbmZvKDApCiAgICAgICAgICwg
bV9uZXh0KDApCiAjaWZuZGVmIE5ERUJVRwogICAgICAgICAsIG1fcmVuZGVyZXIoMCkKQEAgLTQ3
LDcgKzUwLDcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICBMYXlvdXRTdGF0ZShMYXlv
dXRTdGF0ZSosIFJlbmRlckJveCosIGNvbnN0IEludFNpemUmIG9mZnNldCk7CisgICAgTGF5b3V0
U3RhdGUoTGF5b3V0U3RhdGUqLCBSZW5kZXJCb3gqLCBjb25zdCBJbnRTaXplJiBvZmZzZXQsIGlu
dCBwYWdlSGVpZ2h0LCBDb2x1bW5JbmZvKik7CiAgICAgTGF5b3V0U3RhdGUoUmVuZGVyT2JqZWN0
Kik7CiAKICAgICB2b2lkIGRlc3Ryb3koUmVuZGVyQXJlbmEqKTsKQEAgLTU4LDYgKzYxLDEyIEBA
IHB1YmxpYzoKICAgICAvLyBPdmVycmlkZGVuIHRvIHByZXZlbnQgdGhlIG5vcm1hbCBkZWxldGUg
ZnJvbSBiZWluZyBjYWxsZWQuCiAgICAgdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCosIHNpemVf
dCk7CiAKKyAgICB2b2lkIGNsZWFyUGFnaW5hdGlvbkluZm9ybWF0aW9uKCk7CisgICAgYm9vbCBw
YWdpbmF0aW5nQ29sdW1ucygpIGNvbnN0IHsgcmV0dXJuIG1fY29sdW1uSW5mbzsgfQorICAgIGJv
b2wgcGFnaW5hdGVkKCkgY29uc3QgeyByZXR1cm4gbV9wYWdlSGVpZ2h0IHx8IG1fY29sdW1uSW5m
bzsgfQorICAgIGludCBwYWdlWShpbnQgY2hpbGRZKSBjb25zdDsKKyAgICB2b2lkIGFkZEZvcmNl
ZENvbHVtbkJyZWFrKGludCBjaGlsZFkpOworICAgIAogcHJpdmF0ZToKICAgICAvLyBUaGUgbm9y
bWFsIG9wZXJhdG9yIG5ldyBpcyBkaXNhbGxvd2VkLgogICAgIHZvaWQqIG9wZXJhdG9yIG5ldyhz
aXplX3QpIHRocm93KCk7CkBAIC02NSwxMCArNzQsMTYgQEAgcHJpdmF0ZToKIHB1YmxpYzoKICAg
ICBib29sIG1fY2xpcHBlZDsKICAgICBJbnRSZWN0IG1fY2xpcFJlY3Q7Ci0gICAgSW50U2l6ZSBt
X29mZnNldDsgICAgICAgLy8geC95IG9mZnNldCBmcm9tIGNvbnRhaW5lci4KKyAgICBJbnRTaXpl
IG1fcGFpbnRPZmZzZXQ7ICAgICAgIC8vIHgveSBvZmZzZXQgZnJvbSBjb250YWluZXIuICBJbmNs
dWRlcyByZWxhdGl2ZSBwb3NpdGlvbmluZyBhbmQgc2Nyb2xsIG9mZnNldHMuCisgICAgSW50U2l6
ZSBtX2xheW91dE9mZnNldDsgICAgICAvLyB4L3kgb2Zmc2V0IGZyb20gY29udGFpbmVyLiAgRG9l
cyBub3QgaW5jbHVkZSByZWxhdGl2ZSBwb3NpdGlvbmluZyBvciBzY3JvbGwgb2Zmc2V0cy4KICAg
ICBJbnRTaXplIG1fbGF5b3V0RGVsdGE7ICAvLyBUcmFuc2llbnQgb2Zmc2V0IGZyb20gdGhlIGZp
bmFsIHBvc2l0aW9uIG9mIHRoZSBvYmplY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyB1c2VkIHRvIGVuc3VyZSB0aGF0IHJlcGFpbnRzIGhhcHBlbiBpbiB0aGUgY29ycmVjdCBwbGFj
ZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgdG90YWwgZGVsdGEg
YWNjdW11bGF0ZWQgZnJvbSB0aGUgcm9vdC4KKworICAgIGludCBtX3BhZ2VIZWlnaHQ7ICAgICAg
ICAgICAgLy8gVGhlIGN1cnJlbnQgcGFnZSBoZWlnaHQgZm9yIHRoZSBwYWdpbmF0aW9uIG1vZGVs
IHRoYXQgZW5jbG9zZXMgdXMuCisgICAgSW50U2l6ZSBtX3BhZ2VPZmZzZXQ7ICAgICAgICAvLyBU
aGUgb2Zmc2V0IG9mIHRoZSBzdGFydCBvZiB0aGUgZmlyc3QgcGFnZSBpbiB0aGUgbmVhcmVzdCBl
bmNsb3NpbmcgcGFnaW5hdGlvbiBtb2RlbC4KKyAgICBDb2x1bW5JbmZvKiBtX2NvbHVtbkluZm87
ICAgIC8vIElmIHRoZSBlbmNsb3NpbmcgcGFnaW5hdGlvbiBtb2RlbCBpcyBhIGNvbHVtbiBtb2Rl
bCwgdGhlbiB0aGlzIHdpbGwgc3RvcmUgY29sdW1uIGluZm9ybWF0aW9uIGZvciBlYXN5IHJldHJp
ZXZhbC9tYW5pcHVsYXRpb24uCisKICAgICBMYXlvdXRTdGF0ZSogbV9uZXh0OwogI2lmbmRlZiBO
REVCVUcKICAgICBSZW5kZXJPYmplY3QqIG1fcmVuZGVyZXI7CkluZGV4OiBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2suY3BwCShyZXZpc2lvbiA2NzU2NykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDcgKzExNCw3IEBAIFJlbmRlckJsb2Nr
OjpSZW5kZXJCbG9jayhOb2RlKiBub2RlKQogICAgICAgLCBtX2Zsb2F0aW5nT2JqZWN0cygwKQog
ICAgICAgLCBtX3Bvc2l0aW9uZWRPYmplY3RzKDApCiAgICAgICAsIG1fY29udGludWF0aW9uKDAp
Ci0gICAgICAsIG1fbWF4TWFyZ2luKDApCisgICAgICAsIG1fcmFyZURhdGEoMCkKICAgICAgICwg
bV9saW5lSGVpZ2h0KC0xKQogewogICAgIHNldENoaWxkcmVuSW5saW5lKHRydWUpOwpAQCAtMTI0
LDcgKzEyNCw3IEBAIFJlbmRlckJsb2NrOjp+UmVuZGVyQmxvY2soKQogewogICAgIGRlbGV0ZSBt
X2Zsb2F0aW5nT2JqZWN0czsKICAgICBkZWxldGUgbV9wb3NpdGlvbmVkT2JqZWN0czsKLSAgICBk
ZWxldGUgbV9tYXhNYXJnaW47CisgICAgZGVsZXRlIG1fcmFyZURhdGE7CiAgICAgCiAgICAgaWYg
KGhhc0NvbHVtbnMoKSkKICAgICAgICAgZGVsZXRlIGdDb2x1bW5JbmZvTWFwLT50YWtlKHRoaXMp
OwpAQCAtMTExMiw3ICsxMTEyLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0KCkKICAgICAg
ICAgY2xlYXJMYXlvdXRPdmVyZmxvdygpOwogfQogCi12b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRC
bG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4pCit2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9j
ayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIGludCBwYWdlSGVpZ2h0KQogewogICAgIEFTU0VSVChu
ZWVkc0xheW91dCgpKTsKIApAQCAtMTEyMiw5ICsxMTIyLDYgQEAgdm9pZCBSZW5kZXJCbG9jazo6
bGF5b3V0QmxvY2soYm9vbCByZWxheQogICAgIGlmICghcmVsYXlvdXRDaGlsZHJlbiAmJiBsYXlv
dXRPbmx5UG9zaXRpb25lZE9iamVjdHMoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgTGF5b3V0
UmVwYWludGVyIHJlcGFpbnRlcigqdGhpcywgbV9ldmVySGFkTGF5b3V0ICYmIGNoZWNrRm9yUmVw
YWludER1cmluZ0xheW91dCgpKTsKLSAgICBMYXlvdXRTdGF0ZU1haW50YWluZXIgc3RhdGVQdXNo
ZXIodmlldygpLCB0aGlzLCBJbnRTaXplKHgoKSwgeSgpKSwgaGFzQ29sdW1ucygpIHx8IGhhc1Ry
YW5zZm9ybSgpIHx8IGhhc1JlZmxlY3Rpb24oKSk7Ci0KICAgICBpbnQgb2xkV2lkdGggPSB3aWR0
aCgpOwogICAgIGludCBvbGRDb2x1bW5XaWR0aCA9IGRlc2lyZWRDb2x1bW5XaWR0aCgpOwogCkBA
IC0xMTQwLDYgKzExMzcsMzEgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2soYm9vbCBy
ZWxheQogCiAgICAgaW50IHByZXZpb3VzSGVpZ2h0ID0gaGVpZ2h0KCk7CiAgICAgc2V0SGVpZ2h0
KDApOworICAgIGJvb2wgaGFzU3BlY2lmaWVkUGFnZUhlaWdodCA9IGZhbHNlOworICAgIENvbHVt
bkluZm8qIGNvbEluZm8gPSBjb2x1bW5JbmZvKCk7CisgICAgaWYgKGhhc0NvbHVtbnMoKSkgewor
ICAgICAgICBpZiAoIXBhZ2VIZWlnaHQpIHsKKyAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gZ28g
YWhlYWQgYW5kIHNldCBvdXIgZXhwbGljaXQgcGFnZSBoZWlnaHQgaWYgb25lIGV4aXN0cywgc28g
dGhhdCB3ZSBjYW4KKyAgICAgICAgICAgIC8vIGF2b2lkIGRvaW5nIHR3byBsYXlvdXQgcGFzc2Vz
LgorICAgICAgICAgICAgY2FsY0hlaWdodCgpOworICAgICAgICAgICAgaW50IGNvbHVtbkhlaWdo
dCA9IGNvbnRlbnRIZWlnaHQoKTsKKyAgICAgICAgICAgIGlmIChjb2x1bW5IZWlnaHQgPiAwKSB7
CisgICAgICAgICAgICAgICAgcGFnZUhlaWdodCA9IGNvbHVtbkhlaWdodDsKKyAgICAgICAgICAg
ICAgICBoYXNTcGVjaWZpZWRQYWdlSGVpZ2h0ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHNldEhlaWdodCgwKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY29sSW5mby0+Y29s
dW1uSGVpZ2h0KCkgIT0gcGFnZUhlaWdodCAmJiBtX2V2ZXJIYWRMYXlvdXQpIHsKKyAgICAgICAg
ICAgIGNvbEluZm8tPnNldENvbHVtbkhlaWdodChwYWdlSGVpZ2h0KTsKKyAgICAgICAgICAgIG1h
cmtEZXNjZW5kYW50QmxvY2tzQW5kTGluZXNGb3JMYXlvdXQoKTsgLy8gV2UgbmVlZCB0byBkaXJ0
eSBhbGwgZGVzY2VuZGFudCBibG9ja3MgYW5kIGxpbmVzLCBzaW5jZSB0aGUgY29sdW1uIGhlaWdo
dCBpcyBkaWZmZXJlbnQgbm93LgorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIWhh
c1NwZWNpZmllZFBhZ2VIZWlnaHQgJiYgIXBhZ2VIZWlnaHQpCisgICAgICAgICAgICBjb2xJbmZv
LT5jbGVhckZvcmNlZEJyZWFrcygpOworICAgIH0KKworICAgIExheW91dFJlcGFpbnRlciByZXBh
aW50ZXIoKnRoaXMsIG1fZXZlckhhZExheW91dCAmJiBjaGVja0ZvclJlcGFpbnREdXJpbmdMYXlv
dXQoKSk7CisgICAgTGF5b3V0U3RhdGVNYWludGFpbmVyIHN0YXRlUHVzaGVyKHZpZXcoKSwgdGhp
cywgSW50U2l6ZSh4KCksIHkoKSksIGhhc0NvbHVtbnMoKSB8fCBoYXNUcmFuc2Zvcm0oKSB8fCBo
YXNSZWZsZWN0aW9uKCksIHBhZ2VIZWlnaHQsIGNvbEluZm8pOwogCiAgICAgLy8gV2UgdXNlIGZv
dXIgdmFsdWVzLCBtYXhUb3BQb3MsIG1heFRvcE5lZywgbWF4Qm90dG9tUG9zLCBhbmQgbWF4Qm90
dG9tTmVnLCB0byB0cmFjawogICAgIC8vIG91ciBjdXJyZW50IG1heGltYWwgcG9zaXRpdmUgYW5k
IG5lZ2F0aXZlIG1hcmdpbnMuICBUaGVzZSB2YWx1ZXMgYXJlIHVzZWQgd2hlbiB3ZQpAQCAtMTE4
OSwxMCArMTIxMSw5IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrKGJvb2wgcmVsYXkK
ICAgICBpZiAoZmxvYXRCb3R0b20oKSA+IChoZWlnaHQoKSAtIHRvQWRkKSAmJiBleHBhbmRzVG9F
bmNsb3NlT3ZlcmhhbmdpbmdGbG9hdHMoKSkKICAgICAgICAgc2V0SGVpZ2h0KGZsb2F0Qm90dG9t
KCkgKyB0b0FkZCk7CiAgICAgCi0gICAgLy8gTm93IGxheSBvdXQgb3VyIGNvbHVtbnMgd2l0aGlu
IHRoaXMgaW50cmluc2ljIGhlaWdodCwgc2luY2UgdGhleSBjYW4gc2xpZ2h0bHkgYWZmZWN0IHRo
ZSBpbnRyaW5zaWMgaGVpZ2h0IGFzCi0gICAgLy8gd2UgYWRqdXN0IGZvciBjbGVhbiBjb2x1bW4g
YnJlYWtzLgotICAgIGludCBzaW5nbGVDb2x1bW5Cb3R0b20gPSBsYXlvdXRDb2x1bW5zKCk7Ci0K
KyAgICBpZiAobGF5b3V0Q29sdW1ucyhoYXNTcGVjaWZpZWRQYWdlSGVpZ2h0LCBwYWdlSGVpZ2h0
LCBzdGF0ZVB1c2hlcikpCisgICAgICAgIHJldHVybjsKKyAKICAgICAvLyBDYWxjdWxhdGUgb3Vy
IG5ldyBoZWlnaHQuCiAgICAgaW50IG9sZEhlaWdodCA9IGhlaWdodCgpOwogICAgIGNhbGNIZWln
aHQoKTsKQEAgLTEyMDcsMjEgKzEyMjgsMTggQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0Qmxv
Y2soYm9vbCByZWxheQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgLy8gV2UgaGF2ZSB0byByZWJhbGFuY2UgY29sdW1ucyB0byB0
aGUgbmV3IGhlaWdodC4KLSAgICAgICAgbGF5b3V0Q29sdW1ucyhzaW5nbGVDb2x1bW5Cb3R0b20p
OwogICAgIH0KIAogICAgIGlmIChwcmV2aW91c0hlaWdodCAhPSBoZWlnaHQoKSkKICAgICAgICAg
cmVsYXlvdXRDaGlsZHJlbiA9IHRydWU7CiAKLSAgICAvLyBUaGlzIGNoZWNrIGlzIGRlc2lnbmVk
IHRvIGNhdGNoIGFueW9uZQotICAgIC8vIHdobyB3YXNuJ3QgZ29pbmcgdG8gcHJvcGFnYXRlIGZs
b2F0IGluZm9ybWF0aW9uIHVwIHRvIHRoZSBwYXJlbnQgYW5kIHlldCBjb3VsZCBwb3RlbnRpYWxs
eSBiZSBwYWludGVkIGJ5IGl0cyBhbmNlc3Rvci4KLSAgICBpZiAoaXNSb290KCkgfHwgZXhwYW5k
c1RvRW5jbG9zZU92ZXJoYW5naW5nRmxvYXRzKCkpCi0gICAgICAgIGFkZE92ZXJmbG93RnJvbUZs
b2F0cygpOwotCiAgICAgLy8gQWRkIG92ZXJmbG93IGZyb20gY2hpbGRyZW4gKHVubGVzcyB3ZSdy
ZSBtdWx0aS1jb2x1bW4sIHNpbmNlIGluIHRoYXQgY2FzZSBhbGwgb3VyIGNoaWxkIG92ZXJmbG93
IGlzIGNsaXBwZWQgYW55d2F5KS4KICAgICBpZiAoIWhhc0NvbHVtbnMoKSkgeworICAgICAgICAv
LyBUaGlzIGNoZWNrIGlzIGRlc2lnbmVkIHRvIGNhdGNoIGFueW9uZQorICAgICAgICAvLyB3aG8g
d2Fzbid0IGdvaW5nIHRvIHByb3BhZ2F0ZSBmbG9hdCBpbmZvcm1hdGlvbiB1cCB0byB0aGUgcGFy
ZW50IGFuZCB5ZXQgY291bGQgcG90ZW50aWFsbHkgYmUgcGFpbnRlZCBieSBpdHMgYW5jZXN0b3Iu
CisgICAgICAgIGlmIChpc1Jvb3QoKSB8fCBleHBhbmRzVG9FbmNsb3NlT3ZlcmhhbmdpbmdGbG9h
dHMoKSkKKyAgICAgICAgICAgIGFkZE92ZXJmbG93RnJvbUZsb2F0cygpOworCiAgICAgICAgIGlm
IChjaGlsZHJlbklubGluZSgpKQogICAgICAgICAgICAgYWRkT3ZlcmZsb3dGcm9tSW5saW5lQ2hp
bGRyZW4oKTsKICAgICAgICAgZWxzZQpAQCAtMTIzNyw2ICsxMjU1LDkgQEAgdm9pZCBSZW5kZXJC
bG9jazo6bGF5b3V0QmxvY2soYm9vbCByZWxheQogICAgIAogICAgIHN0YXRlUHVzaGVyLnBvcCgp
OwogCisgICAgaWYgKHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+bV9wYWdlSGVpZ2h0KQorICAgICAg
ICBzZXRQYWdlWSh2aWV3KCktPmxheW91dFN0YXRlKCktPnBhZ2VZKHkoKSkpOworCiAgICAgLy8g
VXBkYXRlIG91ciBzY3JvbGwgaW5mb3JtYXRpb24gaWYgd2UncmUgb3ZlcmZsb3c6YXV0by9zY3Jv
bGwvaGlkZGVuIG5vdyB0aGF0IHdlIGtub3cgaWYKICAgICAvLyB3ZSBvdmVyZmxvdyBvciBub3Qu
CiAgICAgdXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCk7CkBAIC0xNDg1LDcgKzE1MDYsOCBA
QCBpbnQgUmVuZGVyQmxvY2s6OmNvbGxhcHNlTWFyZ2lucyhSZW5kZXJCCiAgICAgaWYgKG1hcmdp
bkluZm8ucXVpcmtDb250YWluZXIoKSAmJiBtYXJnaW5JbmZvLmF0VG9wT2ZCbG9jaygpICYmIChw
b3NUb3AgLSBuZWdUb3ApKQogICAgICAgICBtYXJnaW5JbmZvLnNldFRvcFF1aXJrKHRvcFF1aXJr
KTsKIAotICAgIGludCB5cG9zID0gaGVpZ2h0KCk7CisgICAgaW50IGJlZm9yZUNvbGxhcHNlWSA9
IGhlaWdodCgpOworICAgIGludCB5cG9zID0gYmVmb3JlQ29sbGFwc2VZOwogICAgIGlmIChjaGls
ZC0+aXNTZWxmQ29sbGFwc2luZ0Jsb2NrKCkpIHsKICAgICAgICAgLy8gVGhpcyBjaGlsZCBoYXMg
bm8gaGVpZ2h0LiAgV2UgbmVlZCB0byBjb21wdXRlIG91cgogICAgICAgICAvLyBwb3NpdGlvbiBi
ZWZvcmUgd2UgY29sbGFwc2UgdGhlIGNoaWxkJ3MgbWFyZ2lucyB0b2dldGhlciwKQEAgLTE1Mjcs
NiArMTU0OSwxNCBAQCBpbnQgUmVuZGVyQmxvY2s6OmNvbGxhcHNlTWFyZ2lucyhSZW5kZXJCCiAg
ICAgICAgICAgICBtYXJnaW5JbmZvLnNldEJvdHRvbVF1aXJrKGNoaWxkLT5pc0JvdHRvbU1hcmdp
blF1aXJrKCkgfHwgc3R5bGUoKS0+bWFyZ2luQm90dG9tQ29sbGFwc2UoKSA9PSBNRElTQ0FSRCk7
CiAgICAgfQogICAgIAorICAgIC8vIElmIG1hcmdpbnMgd291bGQgcHVsbCB1cyBwYXN0IHRoZSB0
b3Agb2YgdGhlIG5leHQgcGFnZSwgdGhlbiB3ZSBuZWVkIHRvIHB1bGwgYmFjayBhbmQgcHJldGVu
ZCBsaWtlIHRoZSBtYXJnaW5zCisgICAgLy8gY29sbGFwc2VkIGludG8gdGhlIHBhZ2UgZWRnZS4K
KyAgICBib29sIHBhZ2luYXRlZCA9IHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+cGFnaW5hdGVkKCk7
CisgICAgaWYgKHBhZ2luYXRlZCAmJiB5cG9zID4gYmVmb3JlQ29sbGFwc2VZKSB7CisgICAgICAg
IGludCBvbGRZID0geXBvczsKKyAgICAgICAgeXBvcyA9IG1pbih5cG9zLCBuZXh0UGFnZVRvcChi
ZWZvcmVDb2xsYXBzZVkpKTsKKyAgICAgICAgc2V0SGVpZ2h0KGhlaWdodCgpICsgKHlwb3MgLSBv
bGRZKSk7CisgICAgfQogICAgIHJldHVybiB5cG9zOwogfQogCkBAIC0xNTg2LDcgKzE2MTYsMjQg
QEAgaW50IFJlbmRlckJsb2NrOjplc3RpbWF0ZVZlcnRpY2FsUG9zaXRpbwogICAgICAgICBpbnQg
Y2hpbGRNYXJnaW5Ub3AgPSBjaGlsZC0+c2VsZk5lZWRzTGF5b3V0KCkgPyBjaGlsZC0+bWFyZ2lu
VG9wKCkgOiBjaGlsZC0+Y29sbGFwc2VkTWFyZ2luVG9wKCk7CiAgICAgICAgIHlQb3NFc3RpbWF0
ZSArPSBtYXgobWFyZ2luSW5mby5tYXJnaW4oKSwgY2hpbGRNYXJnaW5Ub3ApOwogICAgIH0KKyAg
ICAKKyAgICBib29sIHBhZ2luYXRlZCA9IHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+cGFnaW5hdGVk
KCk7CisKKyAgICAvLyBBZGp1c3QgeVBvc0VzdGltYXRlIGRvd24gdG8gdGhlIG5leHQgcGFnZSBp
ZiB0aGUgbWFyZ2lucyBhcmUgc28gbGFyZ2UgdGhhdCB3ZSBkb24ndCBmaXQgb24gdGhlIGN1cnJl
bnQKKyAgICAvLyBwYWdlLgorICAgIGlmIChwYWdpbmF0ZWQgJiYgeVBvc0VzdGltYXRlID4gaGVp
Z2h0KCkpCisgICAgICAgIHlQb3NFc3RpbWF0ZSA9IG1pbih5UG9zRXN0aW1hdGUsIG5leHRQYWdl
VG9wKGhlaWdodCgpKSk7CisKICAgICB5UG9zRXN0aW1hdGUgKz0gZ2V0Q2xlYXJEZWx0YShjaGls
ZCwgeVBvc0VzdGltYXRlKTsKKyAgICAKKyAgICBpZiAocGFnaW5hdGVkKSB7CisgICAgICAgIC8v
IElmIHRoZSBvYmplY3QgaGFzIGEgcGFnZSBvciBjb2x1bW4gYnJlYWsgdmFsdWUgb2YgImJlZm9y
ZSIsIHRoZW4gd2Ugc2hvdWxkIHNoaWZ0IHRvIHRoZSB0b3Agb2YgdGhlIG5leHQgcGFnZS4KKyAg
ICAgICAgeVBvc0VzdGltYXRlID0gYXBwbHlCZWZvcmVCcmVhayhjaGlsZCwgeVBvc0VzdGltYXRl
KTsKKyAgICAKKyAgICAgICAgLy8gRm9yIHJlcGxhY2VkIGVsZW1lbnRzIGFuZCBzY3JvbGxlZCBl
bGVtZW50cywgd2Ugd2FudCB0byBzaGlmdCB0aGVtIHRvIHRoZSBuZXh0IHBhZ2UgaWYgdGhleSBk
b24ndCBmaXQgb24gdGhlIGN1cnJlbnQgb25lLgorICAgICAgICB5UG9zRXN0aW1hdGUgPSBhZGp1
c3RGb3JVbnNwbGl0dGFibGVDaGlsZChjaGlsZCwgeVBvc0VzdGltYXRlKTsKKyAgICB9CisKICAg
ICByZXR1cm4geVBvc0VzdGltYXRlOwogfQogCkBAIC0xNzc2LDggKzE4MjMsOSBAQCB2b2lkIFJl
bmRlckJsb2NrOjpsYXlvdXRCbG9ja0NoaWxkKFJlbmRlCiAgICAgdmlldygpLT5hZGRMYXlvdXRE
ZWx0YShJbnRTaXplKDAsIGNoaWxkLT55KCkgLSB5UG9zRXN0aW1hdGUpKTsKICAgICBjaGlsZC0+
c2V0TG9jYXRpb24oY2hpbGQtPngoKSwgeVBvc0VzdGltYXRlKTsKIAorICAgIFJlbmRlckJsb2Nr
KiBjaGlsZFJlbmRlckJsb2NrID0gY2hpbGQtPmlzUmVuZGVyQmxvY2soKSA/IHRvUmVuZGVyQmxv
Y2soY2hpbGQpIDogMDsKICAgICBib29sIG1hcmtEZXNjZW5kYW50c1dpdGhGbG9hdHMgPSBmYWxz
ZTsKLSAgICBpZiAoeVBvc0VzdGltYXRlICE9IG9sZFJlY3QueSgpICYmICFjaGlsZC0+YXZvaWRz
RmxvYXRzKCkgJiYgY2hpbGQtPmlzQmxvY2tGbG93KCkgJiYgdG9SZW5kZXJCbG9jayhjaGlsZCkt
PmNvbnRhaW5zRmxvYXRzKCkpCisgICAgaWYgKHlQb3NFc3RpbWF0ZSAhPSBvbGRSZWN0LnkoKSAm
JiAhY2hpbGQtPmF2b2lkc0Zsb2F0cygpICYmIGNoaWxkUmVuZGVyQmxvY2sgJiYgY2hpbGRSZW5k
ZXJCbG9jay0+Y29udGFpbnNGbG9hdHMoKSkKICAgICAgICAgbWFya0Rlc2NlbmRhbnRzV2l0aEZs
b2F0cyA9IHRydWU7CiAgICAgZWxzZSBpZiAoIWNoaWxkLT5hdm9pZHNGbG9hdHMoKSB8fCBjaGls
ZC0+c2hyaW5rVG9Bdm9pZEZsb2F0cygpKSB7CiAgICAgICAgIC8vIElmIGFuIGVsZW1lbnQgbWln
aHQgYmUgYWZmZWN0ZWQgYnkgdGhlIHByZXNlbmNlIG9mIGZsb2F0cywgdGhlbiBhbHdheXMgbWFy
ayBpdCBmb3IKQEAgLTE3ODcsMTggKzE4MzUsMjQgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0
QmxvY2tDaGlsZChSZW5kZQogICAgICAgICAgICAgbWFya0Rlc2NlbmRhbnRzV2l0aEZsb2F0cyA9
IHRydWU7CiAgICAgfQogCi0gICAgaWYgKGNoaWxkLT5pc1JlbmRlckJsb2NrKCkpIHsKKyAgICBp
ZiAoY2hpbGRSZW5kZXJCbG9jaykgewogICAgICAgICBpZiAobWFya0Rlc2NlbmRhbnRzV2l0aEZs
b2F0cykKLSAgICAgICAgICAgIHRvUmVuZGVyQmxvY2soY2hpbGQpLT5tYXJrQWxsRGVzY2VuZGFu
dHNXaXRoRmxvYXRzRm9yTGF5b3V0KCk7Ci0KKyAgICAgICAgICAgIGNoaWxkUmVuZGVyQmxvY2st
Pm1hcmtBbGxEZXNjZW5kYW50c1dpdGhGbG9hdHNGb3JMYXlvdXQoKTsKICAgICAgICAgcHJldmlv
dXNGbG9hdEJvdHRvbSA9IG1heChwcmV2aW91c0Zsb2F0Qm90dG9tLCBvbGRSZWN0LnkoKSArIHRv
UmVuZGVyQmxvY2soY2hpbGQpLT5mbG9hdEJvdHRvbSgpKTsKICAgICB9CiAKKyAgICBib29sIHBh
Z2luYXRlZCA9IHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+cGFnaW5hdGVkKCk7CisgICAgaWYgKCFj
aGlsZC0+bmVlZHNMYXlvdXQoKSAmJiBwYWdpbmF0ZWQgJiYgdmlldygpLT5sYXlvdXRTdGF0ZSgp
LT5tX3BhZ2VIZWlnaHQgJiYgY2hpbGRSZW5kZXJCbG9jayAmJiB2aWV3KCktPmxheW91dFN0YXRl
KCktPnBhZ2VZKGNoaWxkLT55KCkpICE9IGNoaWxkUmVuZGVyQmxvY2stPnBhZ2VZKCkpCisgICAg
ICAgIGNoaWxkUmVuZGVyQmxvY2stPnNldENoaWxkTmVlZHNMYXlvdXQodHJ1ZSwgZmFsc2UpOwor
CiAgICAgYm9vbCBjaGlsZEhhZExheW91dCA9IGNoaWxkLT5tX2V2ZXJIYWRMYXlvdXQ7CiAgICAg
Ym9vbCBjaGlsZE5lZWRlZExheW91dCA9IGNoaWxkLT5uZWVkc0xheW91dCgpOwogICAgIGlmIChj
aGlsZE5lZWRlZExheW91dCkKICAgICAgICAgY2hpbGQtPmxheW91dCgpOwogCisgICAgLy8gQ2Fj
aGUgaWYgd2UgYXJlIGF0IHRoZSB0b3Agb2YgdGhlIGJsb2NrIHJpZ2h0IG5vdy4KKyAgICBib29s
IGF0VG9wT2ZCbG9jayA9IG1hcmdpbkluZm8uYXRUb3BPZkJsb2NrKCk7CisKICAgICAvLyBOb3cg
ZGV0ZXJtaW5lIHRoZSBjb3JyZWN0IHlwb3MgYmFzZWQgb2ZmIGV4YW1pbmF0aW9uIG9mIGNvbGxh
cHNpbmcgbWFyZ2luCiAgICAgLy8gdmFsdWVzLgogICAgIGludCB5QmVmb3JlQ2xlYXIgPSBjb2xs
YXBzZU1hcmdpbnMoY2hpbGQsIG1hcmdpbkluZm8pOwpAQCAtMTgwNiw2ICsxODYwLDMyIEBAIHZv
aWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrQ2hpbGQoUmVuZGUKICAgICAvLyBOb3cgY2hlY2sg
Zm9yIGNsZWFyLgogICAgIGludCB5QWZ0ZXJDbGVhciA9IGNsZWFyRmxvYXRzSWZOZWVkZWQoY2hp
bGQsIG1hcmdpbkluZm8sIG9sZFRvcFBvc01hcmdpbiwgb2xkVG9wTmVnTWFyZ2luLCB5QmVmb3Jl
Q2xlYXIpOwogICAgIAorICAgIGlmIChwYWdpbmF0ZWQpIHsKKyAgICAgICAgaW50IG9sZFkgPSB5
QWZ0ZXJDbGVhcjsKKyAgICAgICAgCisgICAgICAgIC8vIElmIHRoZSBvYmplY3QgaGFzIGEgcGFn
ZSBvciBjb2x1bW4gYnJlYWsgdmFsdWUgb2YgImJlZm9yZSIsIHRoZW4gd2Ugc2hvdWxkIHNoaWZ0
IHRvIHRoZSB0b3Agb2YgdGhlIG5leHQgcGFnZS4KKyAgICAgICAgeUFmdGVyQ2xlYXIgPSBhcHBs
eUJlZm9yZUJyZWFrKGNoaWxkLCB5QWZ0ZXJDbGVhcik7CisgICAgCisgICAgICAgIC8vIEZvciBy
ZXBsYWNlZCBlbGVtZW50cyBhbmQgc2Nyb2xsZWQgZWxlbWVudHMsIHdlIHdhbnQgdG8gc2hpZnQg
dGhlbSB0byB0aGUgbmV4dCBwYWdlIGlmIHRoZXkgZG9uJ3QgZml0IG9uIHRoZSBjdXJyZW50IG9u
ZS4KKyAgICAgICAgeUFmdGVyQ2xlYXIgPSBhZGp1c3RGb3JVbnNwbGl0dGFibGVDaGlsZChjaGls
ZCwgeUFmdGVyQ2xlYXIpOworICAgICAgICAKKyAgICAgICAgaWYgKGNoaWxkUmVuZGVyQmxvY2sg
JiYgY2hpbGRSZW5kZXJCbG9jay0+cGFnaW5hdGlvblN0cnV0KCkpIHsKKyAgICAgICAgICAgIC8v
IFdlIGFyZSB3aWxsaW5nIHRvIHByb3BhZ2F0ZSBvdXQgdG8gb3VyIHBhcmVudCBibG9jayBhcyBs
b25nIGFzIHdlIHdlcmUgYXQgdGhlIHRvcCBvZiB0aGUgYmxvY2sgcHJpb3IKKyAgICAgICAgICAg
IC8vIHRvIGNvbGxhcHNpbmcgb3VyIG1hcmdpbnMsIGFuZCBhcyBsb25nIGFzIHdlIGRpZG4ndCBj
bGVhciBvciBtb3ZlIGFzIGEgcmVzdWx0IG9mIG90aGVyIHBhZ2luYXRpb24uCisgICAgICAgICAg
ICBpZiAoYXRUb3BPZkJsb2NrICYmIG9sZFkgPT0geUJlZm9yZUNsZWFyICYmICFpc1Bvc2l0aW9u
ZWQoKSAmJiAhaXNUYWJsZUNlbGwoKSkgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBTaG91
bGQgcmVhbGx5IGNoZWNrIGlmIHdlJ3JlIGV4Y2VlZGluZyB0aGUgcGFnZSBoZWlnaHQgYmVmb3Jl
IHByb3BhZ2F0aW5nIHRoZSBzdHJ1dCwgYnV0IHdlIGRvbid0CisgICAgICAgICAgICAgICAgLy8g
aGF2ZSBhbGwgdGhlIGluZm9ybWF0aW9uIHRvIGRvIHNvICh0aGUgc3RydXQgb25seSBoYXMgdGhl
IHJlbWFpbmluZyBhbW91bnQgdG8gcHVzaCkuICBHZWNrbyBnZXRzIHRoaXMgd3JvbmcgdG9vCisg
ICAgICAgICAgICAgICAgLy8gYW5kIHB1c2hlcyB0byB0aGUgbmV4dCBwYWdlIGFueXdheSwgc28g
bm90IHRvbyBjb25jZXJuZWQgYWJvdXQgaXQuCisgICAgICAgICAgICAgICAgc2V0UGFnaW5hdGlv
blN0cnV0KHlBZnRlckNsZWFyICsgY2hpbGRSZW5kZXJCbG9jay0+cGFnaW5hdGlvblN0cnV0KCkp
OworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgeUFmdGVyQ2xlYXIgKz0gY2hp
bGRSZW5kZXJCbG9jay0+cGFnaW5hdGlvblN0cnV0KCk7CisgICAgICAgICAgICBjaGlsZFJlbmRl
ckJsb2NrLT5zZXRQYWdpbmF0aW9uU3RydXQoMCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBT
aW1pbGFyIHRvIGhvdyB3ZSBhcHBseSBjbGVhcmFuY2UuICBHbyBhaGVhZCBhbmQgYm9vc3QgaGVp
Z2h0KCkgdG8gYmUgdGhlIHBsYWNlIHdoZXJlIHdlJ3JlIGdvaW5nIHRvIHBvc2l0aW9uIHRoZSBj
aGlsZC4KKyAgICAgICAgc2V0SGVpZ2h0KGhlaWdodCgpICsgKHlBZnRlckNsZWFyIC0gb2xkWSkp
OworICAgIH0KKwogICAgIHZpZXcoKS0+YWRkTGF5b3V0RGVsdGEoSW50U2l6ZSgwLCB5UG9zRXN0
aW1hdGUgLSB5QWZ0ZXJDbGVhcikpOwogICAgIGNoaWxkLT5zZXRMb2NhdGlvbihjaGlsZC0+eCgp
LCB5QWZ0ZXJDbGVhcik7CiAKQEAgLTE4MTgsOCArMTg5OCwxMyBAQCB2b2lkIFJlbmRlckJsb2Nr
OjpsYXlvdXRCbG9ja0NoaWxkKFJlbmRlCiAgICAgICAgICAgICAvLyBTbyBnbyBhaGVhZCBhbmQg
bWFyayB0aGUgaXRlbSBhcyBkaXJ0eS4KICAgICAgICAgICAgIGNoaWxkLT5zZXRDaGlsZE5lZWRz
TGF5b3V0KHRydWUsIGZhbHNlKTsKICAgICAgICAgfQotICAgICAgICBpZiAoIWNoaWxkLT5hdm9p
ZHNGbG9hdHMoKSAmJiBjaGlsZC0+aXNCbG9ja0Zsb3coKSAmJiB0b1JlbmRlckJsb2NrKGNoaWxk
KS0+Y29udGFpbnNGbG9hdHMoKSkKLSAgICAgICAgICAgIHRvUmVuZGVyQmxvY2soY2hpbGQpLT5t
YXJrQWxsRGVzY2VuZGFudHNXaXRoRmxvYXRzRm9yTGF5b3V0KCk7CisgICAgICAgIGlmIChjaGls
ZFJlbmRlckJsb2NrKSB7CisgICAgICAgICAgICBpZiAoIWNoaWxkLT5hdm9pZHNGbG9hdHMoKSAm
JiBjaGlsZFJlbmRlckJsb2NrLT5jb250YWluc0Zsb2F0cygpKQorICAgICAgICAgICAgICAgIGNo
aWxkUmVuZGVyQmxvY2stPm1hcmtBbGxEZXNjZW5kYW50c1dpdGhGbG9hdHNGb3JMYXlvdXQoKTsK
KyAgICAgICAgICAgIGlmIChwYWdpbmF0ZWQgJiYgIWNoaWxkLT5uZWVkc0xheW91dCgpICYmIHZp
ZXcoKS0+bGF5b3V0U3RhdGUoKS0+bV9wYWdlSGVpZ2h0ICYmIHZpZXcoKS0+bGF5b3V0U3RhdGUo
KS0+cGFnZVkoY2hpbGQtPnkoKSkgIT0gY2hpbGRSZW5kZXJCbG9jay0+cGFnZVkoKSkKKyAgICAg
ICAgICAgICAgICBjaGlsZC0+c2V0Q2hpbGROZWVkc0xheW91dCh0cnVlLCBmYWxzZSk7CisgICAg
ICAgIH0KKwogICAgICAgICAvLyBPdXIgZ3Vlc3Mgd2FzIHdyb25nLiBNYWtlIHRoZSBjaGlsZCBs
YXkgaXRzZWxmIG91dCBhZ2Fpbi4KICAgICAgICAgY2hpbGQtPmxheW91dElmTmVlZGVkKCk7CiAg
ICAgfQpAQCAtMTg0MCw3ICsxOTI1LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2tD
aGlsZChSZW5kZQogICAgIH0KICAgICAvLyBJZiB0aGUgY2hpbGQgaGFzIG92ZXJoYW5naW5nIGZs
b2F0cyB0aGF0IGludHJ1ZGUgaW50byBmb2xsb3dpbmcgc2libGluZ3MgKG9yIHBvc3NpYmx5IG91
dAogICAgIC8vIG9mIHRoaXMgYmxvY2spLCB0aGVuIHRoZSBwYXJlbnQgZ2V0cyBub3RpZmllZCBv
ZiB0aGUgZmxvYXRzIG5vdy4KLSAgICBpZiAoY2hpbGQtPmlzQmxvY2tGbG93KCkgJiYgdG9SZW5k
ZXJCbG9jayhjaGlsZCktPmNvbnRhaW5zRmxvYXRzKCkpCisgICAgaWYgKGNoaWxkUmVuZGVyQmxv
Y2sgJiYgY2hpbGRSZW5kZXJCbG9jay0+Y29udGFpbnNGbG9hdHMoKSkKICAgICAgICAgbWF4Rmxv
YXRCb3R0b20gPSBtYXgobWF4RmxvYXRCb3R0b20sIGFkZE92ZXJoYW5naW5nRmxvYXRzKHRvUmVu
ZGVyQmxvY2soY2hpbGQpLCAtY2hpbGQtPngoKSwgLWNoaWxkLT55KCksICFjaGlsZE5lZWRlZExh
eW91dCkpOwogCiAgICAgSW50U2l6ZSBjaGlsZE9mZnNldChjaGlsZC0+eCgpIC0gb2xkUmVjdC54
KCksIGNoaWxkLT55KCkgLSBvbGRSZWN0LnkoKSk7CkBAIC0xODU5LDYgKzE5NDQsMTMgQEAgdm9p
ZCBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2tDaGlsZChSZW5kZQogICAgICAgICBjaGlsZC0+cmVw
YWludE92ZXJoYW5naW5nRmxvYXRzKHRydWUpOwogICAgIH0KIAorICAgIGlmIChwYWdpbmF0ZWQp
IHsKKyAgICAgICAgLy8gQ2hlY2sgZm9yIGFuIGFmdGVyIHBhZ2UvY29sdW1uIGJyZWFrLgorICAg
ICAgICBpbnQgbmV3SGVpZ2h0ID0gYXBwbHlBZnRlckJyZWFrKGNoaWxkLCBoZWlnaHQoKSwgbWFy
Z2luSW5mbyk7CisgICAgICAgIGlmIChuZXdIZWlnaHQgIT0gaGVpZ2h0KCkpCisgICAgICAgICAg
ICBzZXRIZWlnaHQobmV3SGVpZ2h0KTsKKyAgICB9CisKICAgICBBU1NFUlQob2xkTGF5b3V0RGVs
dGEgPT0gdmlldygpLT5sYXlvdXREZWx0YSgpKTsKIH0KIApAQCAtMTg4OSw2ICsxOTgxLDExIEBA
IGJvb2wgUmVuZGVyQmxvY2s6OmxheW91dE9ubHlQb3NpdGlvbmVkT2IKIHZvaWQgUmVuZGVyQmxv
Y2s6OmxheW91dFBvc2l0aW9uZWRPYmplY3RzKGJvb2wgcmVsYXlvdXRDaGlsZHJlbikKIHsKICAg
ICBpZiAobV9wb3NpdGlvbmVkT2JqZWN0cykgeworICAgICAgICBpZiAoaGFzQ29sdW1ucygpKQor
ICAgICAgICAgICAgdmlldygpLT5sYXlvdXRTdGF0ZSgpLT5jbGVhclBhZ2luYXRpb25JbmZvcm1h
dGlvbigpOyAvLyBQb3NpdGlvbmVkIG9iamVjdHMgYXJlIG5vdCBwYXJ0IG9mIHRoZSBjb2x1bW4g
Zmxvdywgc28gdGhleSBkb24ndCBwYWdpbmF0ZSB3aXRoIHRoZSBjb2x1bW5zLgorCisgICAgICAg
IGJvb2wgcGFnaW5hdGVkID0gdmlldygpLT5sYXlvdXRTdGF0ZSgpLT5wYWdpbmF0ZWQoKTsKKwog
ICAgICAgICBSZW5kZXJCb3gqIHI7CiAgICAgICAgIEl0ZXJhdG9yIGVuZCA9IG1fcG9zaXRpb25l
ZE9iamVjdHMtPmVuZCgpOwogICAgICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gbV9wb3NpdGlvbmVk
T2JqZWN0cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CkBAIC0xOTA0LDEyICsyMDAxLDIx
IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dFBvc2l0aW9uZWRPYmplY3QKICAgICAgICAgICAg
IC8vaWYgKHJlbGF5b3V0Q2hpbGRyZW4gJiYgKHItPnN0eWxlKCktPnBhZGRpbmdMZWZ0KCkuaXNQ
ZXJjZW50KCkgfHwgci0+c3R5bGUoKS0+cGFkZGluZ1JpZ2h0KCkuaXNQZXJjZW50KCkpKQogICAg
ICAgICAgICAgICAgIHItPnNldFByZWZXaWR0aHNEaXJ0eSh0cnVlLCBmYWxzZSk7CiAgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGlmICghci0+bmVlZHNMYXlvdXQoKSAmJiBwYWdpbmF0ZWQgJiYg
dmlldygpLT5sYXlvdXRTdGF0ZSgpLT5tX3BhZ2VIZWlnaHQpIHsKKyAgICAgICAgICAgICAgICBS
ZW5kZXJCbG9jayogY2hpbGRSZW5kZXJCbG9jayA9IHItPmlzUmVuZGVyQmxvY2soKSA/IHRvUmVu
ZGVyQmxvY2socikgOiAwOworICAgICAgICAgICAgICAgIGlmIChjaGlsZFJlbmRlckJsb2NrICYm
IHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+cGFnZVkoY2hpbGRSZW5kZXJCbG9jay0+eSgpKSAhPSBj
aGlsZFJlbmRlckJsb2NrLT5wYWdlWSgpKQorICAgICAgICAgICAgICAgICAgICBjaGlsZFJlbmRl
ckJsb2NrLT5zZXRDaGlsZE5lZWRzTGF5b3V0KHRydWUsIGZhbHNlKTsKKyAgICAgICAgICAgIH0K
KwogICAgICAgICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSB0byBkbyBhIGZ1bGwgbGF5b3V0LiAgV2Ug
anVzdCBoYXZlIHRvIHVwZGF0ZSBvdXIgcG9zaXRpb24uIFRyeSB0aGF0IGZpcnN0LiBJZiB3ZSBo
YXZlIHNocmluay10by1maXQgd2lkdGgKICAgICAgICAgICAgIC8vIGFuZCB3ZSBoaXQgdGhlIGF2
YWlsYWJsZSB3aWR0aCBjb25zdHJhaW50LCB0aGUgbGF5b3V0SWZOZWVkZWQoKSB3aWxsIGNhdGNo
IGl0IGFuZCBkbyBhIGZ1bGwgbGF5b3V0LgogICAgICAgICAgICAgaWYgKHItPm5lZWRzUG9zaXRp
b25lZE1vdmVtZW50TGF5b3V0T25seSgpKQogICAgICAgICAgICAgICAgIHItPnRyeUxheW91dERv
aW5nUG9zaXRpb25lZE1vdmVtZW50T25seSgpOwogICAgICAgICAgICAgci0+bGF5b3V0SWZOZWVk
ZWQoKTsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGhhc0NvbHVtbnMoKSkKKyAg
ICAgICAgICAgIHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+bV9jb2x1bW5JbmZvID0gY29sdW1uSW5m
bygpOyAvLyBGSVhNRTogS2luZCBvZiBncm9zcy4gV2UganVzdCBwdXQgdGhpcyBiYWNrIGludG8g
dGhlIGxheW91dCBzdGF0ZSBzbyB0aGF0IHBvcCgpIHdpbGwgd29yay4KICAgICB9CiB9CiAKQEAg
LTE5OTcsMTIgKzIxMDMsMTIgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRDb2x1bW5SdWxlcyhQ
YWludAogCiAgICAgLy8gV2UgbmVlZCB0byBkbyBtdWx0aXBsZSBwYXNzZXMsIGJyZWFraW5nIHVw
IG91ciBjaGlsZCBwYWludGluZyBpbnRvIHN0cmlwcy4KICAgICBDb2x1bW5JbmZvKiBjb2xJbmZv
ID0gY29sdW1uSW5mbygpOwotICAgIHVuc2lnbmVkIGNvbENvdW50ID0gY29sSW5mby0+Y29sdW1u
Q291bnQoKTsKKyAgICB1bnNpZ25lZCBjb2xDb3VudCA9IGNvbHVtbkNvdW50KGNvbEluZm8pOwog
ICAgIGludCBjdXJyWE9mZnNldCA9IHN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUiA/IDAgOiBj
b250ZW50V2lkdGgoKTsKICAgICBpbnQgcnVsZUFkZCA9IGJvcmRlckxlZnQoKSArIHBhZGRpbmdM
ZWZ0KCk7CiAgICAgaW50IHJ1bGVYID0gc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8gMCA6
IGNvbnRlbnRXaWR0aCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb2xDb3VudDsg
aSsrKSB7Ci0gICAgICAgIEludFJlY3QgY29sUmVjdCA9IGNvbEluZm8tPmNvbHVtblJlY3RBdChp
KTsKKyAgICAgICAgSW50UmVjdCBjb2xSZWN0ID0gY29sdW1uUmVjdEF0KGNvbEluZm8sIGkpOwog
CiAgICAgICAgIC8vIE1vdmUgdG8gdGhlIG5leHQgcG9zaXRpb24uCiAgICAgICAgIGlmIChzdHls
ZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIpIHsKQEAgLTIwMzMsMTQgKzIxMzksMTQgQEAgdm9pZCBS
ZW5kZXJCbG9jazo6cGFpbnRDb2x1bW5Db250ZW50cyhQYQogICAgIEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0OwogICAgIGludCBjb2xHYXAgPSBjb2x1bW5HYXAo
KTsKICAgICBDb2x1bW5JbmZvKiBjb2xJbmZvID0gY29sdW1uSW5mbygpOwotICAgIHVuc2lnbmVk
IGNvbENvdW50ID0gY29sSW5mby0+Y29sdW1uQ291bnQoKTsKKyAgICB1bnNpZ25lZCBjb2xDb3Vu
dCA9IGNvbHVtbkNvdW50KGNvbEluZm8pOwogICAgIGlmICghY29sQ291bnQpCiAgICAgICAgIHJl
dHVybjsKLSAgICBpbnQgY3VyclhPZmZzZXQgPSBzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIg
PyAwIDogY29udGVudFdpZHRoKCkgLSBjb2xJbmZvLT5jb2x1bW5SZWN0QXQoMCkud2lkdGgoKTsK
KyAgICBpbnQgY3VyclhPZmZzZXQgPSBzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIgPyAwIDog
Y29udGVudFdpZHRoKCkgLSBjb2x1bW5SZWN0QXQoY29sSW5mbywgMCkud2lkdGgoKTsKICAgICBp
bnQgY3VycllPZmZzZXQgPSAwOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb2xDb3Vu
dDsgaSsrKSB7CiAgICAgICAgIC8vIEZvciBlYWNoIHJlY3QsIHdlIGNsaXAgdG8gdGhlIHJlY3Qs
IGFuZCB0aGVuIHdlIGFkanVzdCBvdXIgY29vcmRzLgotICAgICAgICBJbnRSZWN0IGNvbFJlY3Qg
PSBjb2xJbmZvLT5jb2x1bW5SZWN0QXQoaSk7CisgICAgICAgIEludFJlY3QgY29sUmVjdCA9IGNv
bHVtblJlY3RBdChjb2xJbmZvLCBpKTsKICAgICAgICAgY29sUmVjdC5tb3ZlKHR4LCB0eSk7CiAg
ICAgICAgIFBhaW50SW5mbyBpbmZvKHBhaW50SW5mbyk7CiAgICAgICAgIGluZm8ucmVjdC5pbnRl
cnNlY3QoY29sUmVjdCk7CkBAIC0yMDk4LDE0ICsyMjA0LDEzIEBAIHZvaWQgUmVuZGVyQmxvY2s6
OnBhaW50Q2hpbGRyZW4oUGFpbnRJbmYKICAgICBpbmZvLnVwZGF0ZVBhaW50aW5nUm9vdEZvckNo
aWxkcmVuKHRoaXMpOwogICAgIAogICAgIFJlbmRlclZpZXcqIHJlbmRlclZpZXcgPSB2aWV3KCk7
Ci0gICAgYm9vbCB1c2VQcmludFJlY3QgPSAhcmVuZGVyVmlldy0+cHJpbnRSZWN0KCkuaXNFbXB0
eSgpICYmICFkb2N1bWVudCgpLT5zZXR0aW5ncygpLT5wYWdpbmF0ZUR1cmluZ0xheW91dEVuYWJs
ZWQoKTsKKyAgICBib29sIHVzZVByaW50UmVjdCA9ICFyZW5kZXJWaWV3LT5wcmludFJlY3QoKS5p
c0VtcHR5KCk7CiAgICAgCiAgICAgYm9vbCBjaGVja1BhZ2VCcmVha3MgPSBkb2N1bWVudCgpLT5w
YWdpbmF0ZWQoKSAmJiAhZG9jdW1lbnQoKS0+c2V0dGluZ3MoKS0+cGFnaW5hdGVEdXJpbmdMYXlv
dXRFbmFibGVkKCk7Ci0gICAgYm9vbCBjaGVja0NvbHVtbkJyZWFrcyA9ICFjaGVja1BhZ2VCcmVh
a3MgJiYgdXNlUHJpbnRSZWN0OwogCiAgICAgZm9yIChSZW5kZXJCb3gqIGNoaWxkID0gZmlyc3RD
aGlsZEJveCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmdCb3goKSkgeyAgICAg
ICAgCiAgICAgICAgIC8vIENoZWNrIGZvciBwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzLCBhbmQg
aWYgaXQncyBzZXQsIGJyZWFrIGFuZCBiYWlsLgotICAgICAgICBib29sIGNoZWNrQmVmb3JlQWx3
YXlzID0gIWNoaWxkcmVuSW5saW5lKCkgJiYgKChjaGVja1BhZ2VCcmVha3MgJiYgY2hpbGQtPnN0
eWxlKCktPnBhZ2VCcmVha0JlZm9yZSgpID09IFBCQUxXQVlTKSB8fCAoY2hlY2tDb2x1bW5CcmVh
a3MgJiYgY2hpbGQtPnN0eWxlKCktPmNvbHVtbkJyZWFrQmVmb3JlKCkgPT0gUEJBTFdBWVMpKTsK
KyAgICAgICAgYm9vbCBjaGVja0JlZm9yZUFsd2F5cyA9ICFjaGlsZHJlbklubGluZSgpICYmIChj
aGVja1BhZ2VCcmVha3MgJiYgY2hpbGQtPnN0eWxlKCktPnBhZ2VCcmVha0JlZm9yZSgpID09IFBC
QUxXQVlTKTsKICAgICAgICAgaWYgKGNoZWNrQmVmb3JlQWx3YXlzCiAgICAgICAgICAgICAmJiAo
dHkgKyBjaGlsZC0+eSgpKSA+IHBhaW50SW5mby5yZWN0LnkoKQogICAgICAgICAgICAgJiYgKHR5
ICsgY2hpbGQtPnkoKSkgPCBwYWludEluZm8ucmVjdC5ib3R0b20oKSkgewpAQCAtMjEyOCw3ICsy
MjMzLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRDaGlsZHJlbihQYWludEluZgogICAgICAg
ICAgICAgY2hpbGQtPnBhaW50KGluZm8sIHR4LCB0eSk7CiAKICAgICAgICAgLy8gQ2hlY2sgZm9y
IHBhZ2UtYnJlYWstYWZ0ZXI6IGFsd2F5cywgYW5kIGlmIGl0J3Mgc2V0LCBicmVhayBhbmQgYmFp
bC4KLSAgICAgICAgYm9vbCBjaGVja0FmdGVyQWx3YXlzID0gIWNoaWxkcmVuSW5saW5lKCkgJiYg
KChjaGVja1BhZ2VCcmVha3MgJiYgY2hpbGQtPnN0eWxlKCktPnBhZ2VCcmVha0FmdGVyKCkgPT0g
UEJBTFdBWVMpIHx8IChjaGVja0NvbHVtbkJyZWFrcyAmJiBjaGlsZC0+c3R5bGUoKS0+Y29sdW1u
QnJlYWtBZnRlcigpID09IFBCQUxXQVlTKSk7CisgICAgICAgIGJvb2wgY2hlY2tBZnRlckFsd2F5
cyA9ICFjaGlsZHJlbklubGluZSgpICYmIChjaGVja1BhZ2VCcmVha3MgJiYgY2hpbGQtPnN0eWxl
KCktPnBhZ2VCcmVha0FmdGVyKCkgPT0gUEJBTFdBWVMpOwogICAgICAgICBpZiAoY2hlY2tBZnRl
ckFsd2F5cwogICAgICAgICAgICAgJiYgKHR5ICsgY2hpbGQtPnkoKSArIGNoaWxkLT5oZWlnaHQo
KSkgPiBwYWludEluZm8ucmVjdC55KCkKICAgICAgICAgICAgICYmICh0eSArIGNoaWxkLT55KCkg
KyBjaGlsZC0+aGVpZ2h0KCkpIDwgcGFpbnRJbmZvLnJlY3QuYm90dG9tKCkpIHsKQEAgLTI3NzYs
NyArMjg4MSw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnJlbW92ZVBvc2l0aW9uZWRPYmplY3QKICAg
ICAgICAgbV9wb3NpdGlvbmVkT2JqZWN0cy0+cmVtb3ZlKGRlYWRPYmplY3RzLmF0KGkpKTsKIH0K
IAotdm9pZCBSZW5kZXJCbG9jazo6aW5zZXJ0RmxvYXRpbmdPYmplY3QoUmVuZGVyQm94KiBvKQor
UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0KiBSZW5kZXJCbG9jazo6aW5zZXJ0RmxvYXRpbmdP
YmplY3QoUmVuZGVyQm94KiBvKQogewogICAgIEFTU0VSVChvLT5pc0Zsb2F0aW5nKCkpOwogCkBA
IC0yNzg5LDI1ICsyODk0LDM3IEBAIHZvaWQgUmVuZGVyQmxvY2s6Omluc2VydEZsb2F0aW5nT2Jq
ZWN0KFIKICAgICAgICAgRGVwcmVjYXRlZFB0ckxpc3RJdGVyYXRvcjxGbG9hdGluZ09iamVjdD4g
aXQoKm1fZmxvYXRpbmdPYmplY3RzKTsKICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGY7CiAgICAg
ICAgIHdoaWxlICggKGYgPSBpdC5jdXJyZW50KCkpICkgewotICAgICAgICAgICAgaWYgKGYtPm1f
cmVuZGVyZXIgPT0gbykgcmV0dXJuOworICAgICAgICAgICAgaWYgKGYtPm1fcmVuZGVyZXIgPT0g
bykKKyAgICAgICAgICAgICAgICByZXR1cm4gZjsKICAgICAgICAgICAgICsraXQ7CiAgICAgICAg
IH0KICAgICB9CiAKICAgICAvLyBDcmVhdGUgdGhlIHNwZWNpYWwgb2JqZWN0IGVudHJ5ICYgYXBw
ZW5kIGl0IHRvIHRoZSBsaXN0CiAKLSAgICBvLT5sYXlvdXRJZk5lZWRlZCgpOwotCiAgICAgRmxv
YXRpbmdPYmplY3QqIG5ld09iaiA9IG5ldyBGbG9hdGluZ09iamVjdChvLT5zdHlsZSgpLT5mbG9h
dGluZygpID09IEZMRUZUID8gRmxvYXRpbmdPYmplY3Q6OkZsb2F0TGVmdCA6IEZsb2F0aW5nT2Jq
ZWN0OjpGbG9hdFJpZ2h0KTsKIAogICAgIG5ld09iai0+bV90b3AgPSAtMTsKICAgICBuZXdPYmot
Pm1fYm90dG9tID0gLTE7CisgICAgCisgICAgLy8gT3VyIGxvY2F0aW9uIGlzIGlycmVsZXZhbnQg
aWYgd2UncmUgdW5zcGxpdHRhYmxlIG9yIG5vIHBhZ2luYXRpb24gaXMgaW4gZWZmZWN0LiAgSnVz
dCBnbyBhaGVhZAorICAgIC8vIGFuZCBsYXkgb3V0IHRoZSBmbG9hdC4KKyAgICBib29sIGFmZmVj
dGVkQnlQYWdpbmF0aW9uID0gby0+aXNSZW5kZXJCbG9jaygpICYmIHZpZXcoKS0+bGF5b3V0U3Rh
dGUoKS0+bV9wYWdlSGVpZ2h0OworICAgIGlmICghYWZmZWN0ZWRCeVBhZ2luYXRpb24pCisgICAg
ICAgIG8tPmxheW91dElmTmVlZGVkKCk7CisgICAgZWxzZSB7CisgICAgICAgIG8tPmNhbGNXaWR0
aCgpOworICAgICAgICBvLT5jYWxjVmVydGljYWxNYXJnaW5zKCk7CisgICAgfQogICAgIG5ld09i
ai0+bV93aWR0aCA9IG8tPndpZHRoKCkgKyBvLT5tYXJnaW5MZWZ0KCkgKyBvLT5tYXJnaW5SaWdo
dCgpOworCiAgICAgbmV3T2JqLT5tX3Nob3VsZFBhaW50ID0gIW8tPmhhc1NlbGZQYWludGluZ0xh
eWVyKCk7IC8vIElmIGEgbGF5ZXIgZXhpc3RzLCB0aGUgZmxvYXQgd2lsbCBwYWludCBpdHNlbGYu
ICBPdGhlcndpc2Ugc29tZW9uZSBlbHNlIHdpbGwuCiAgICAgbmV3T2JqLT5tX2lzRGVzY2VuZGFu
dCA9IHRydWU7CiAgICAgbmV3T2JqLT5tX3JlbmRlcmVyID0gbzsKIAogICAgIG1fZmxvYXRpbmdP
YmplY3RzLT5hcHBlbmQobmV3T2JqKTsKKyAgICAKKyAgICByZXR1cm4gbmV3T2JqOwogfQogCiB2
b2lkIFJlbmRlckJsb2NrOjpyZW1vdmVGbG9hdGluZ09iamVjdChSZW5kZXJCb3gqIG8pCkBAIC0y
ODMxLDYgKzI5NDgsMTggQEAgdm9pZCBSZW5kZXJCbG9jazo6cmVtb3ZlRmxvYXRpbmdPYmplY3Qo
UgogICAgIH0KIH0KIAordm9pZCBSZW5kZXJCbG9jazo6cmVtb3ZlRmxvYXRpbmdPYmplY3RzKEZs
b2F0aW5nT2JqZWN0KiBmLCBpbnQgeSkKK3sKKyAgICBpZiAoIW1fZmxvYXRpbmdPYmplY3RzKQor
ICAgICAgICByZXR1cm47CisgICAgCisgICAgRmxvYXRpbmdPYmplY3QqIGN1cnIgPSBtX2Zsb2F0
aW5nT2JqZWN0cy0+bGFzdCgpOworICAgIHdoaWxlIChjdXJyICE9IGYgJiYgKGN1cnItPm1fdG9w
ID09IC0xIHx8IGN1cnItPm1fdG9wID49IHkpKSB7CisgICAgICAgIG1fZmxvYXRpbmdPYmplY3Rz
LT5yZW1vdmVMYXN0KCk7CisgICAgICAgIGN1cnIgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+bGFzdCgp
OworICAgIH0KK30KKwogYm9vbCBSZW5kZXJCbG9jazo6cG9zaXRpb25OZXdGbG9hdHMoKQogewog
ICAgIGlmICghbV9mbG9hdGluZ09iamVjdHMpCkBAIC0yODY3LDE2ICsyOTk2LDE1IEBAIGJvb2wg
UmVuZGVyQmxvY2s6OnBvc2l0aW9uTmV3RmxvYXRzKCkKICAgICAgICAgfQogCiAgICAgICAgIFJl
bmRlckJveCogbyA9IGYtPm1fcmVuZGVyZXI7Ci0gICAgICAgIGludCBfaGVpZ2h0ID0gby0+aGVp
Z2h0KCkgKyBvLT5tYXJnaW5Ub3AoKSArIG8tPm1hcmdpbkJvdHRvbSgpOwogCiAgICAgICAgIGlu
dCBybyA9IHJpZ2h0T2Zmc2V0KCk7IC8vIENvbnN0YW50IHBhcnQgb2YgcmlnaHQgb2Zmc2V0Lgot
ICAgICAgICBpbnQgbG8gPSBsZWZ0T2Zmc2V0KCk7IC8vIENvbnN0YXQgcGFydCBvZiBsZWZ0IG9m
ZnNldC4KKyAgICAgICAgaW50IGxvID0gbGVmdE9mZnNldCgpOyAvLyBDb25zdGFudCBwYXJ0IG9m
IGxlZnQgb2Zmc2V0LgogICAgICAgICBpbnQgZndpZHRoID0gZi0+bV93aWR0aDsgLy8gVGhlIHdp
ZHRoIHdlIGxvb2sgZm9yLgogICAgICAgICBpZiAocm8gLSBsbyA8IGZ3aWR0aCkKICAgICAgICAg
ICAgIGZ3aWR0aCA9IHJvIC0gbG87IC8vIE5ldmVyIGxvb2sgZm9yIG1vcmUgdGhhbiB3aGF0IHdp
bGwgYmUgYXZhaWxhYmxlLgogICAgICAgICAKICAgICAgICAgSW50UmVjdCBvbGRSZWN0KG8tPngo
KSwgby0+eSgpICwgby0+d2lkdGgoKSwgby0+aGVpZ2h0KCkpOwotICAgICAgICAKKwogICAgICAg
ICBpZiAoby0+c3R5bGUoKS0+Y2xlYXIoKSAmIENMRUZUKQogICAgICAgICAgICAgeSA9IG1heChs
ZWZ0Qm90dG9tKCksIHkpOwogICAgICAgICBpZiAoby0+c3R5bGUoKS0+Y2xlYXIoKSAmIENSSUdI
VCkKQEAgLTI5MDUsOSArMzAzMywzOCBAQCBib29sIFJlbmRlckJsb2NrOjpwb3NpdGlvbk5ld0Zs
b2F0cygpCiAgICAgICAgICAgICBvLT5zZXRMb2NhdGlvbihmeCAtIG8tPm1hcmdpblJpZ2h0KCkg
LSBvLT53aWR0aCgpLCB5ICsgby0+bWFyZ2luVG9wKCkpOwogICAgICAgICB9CiAKLSAgICAgICAg
Zi0+bV90b3AgPSB5OwotICAgICAgICBmLT5tX2JvdHRvbSA9IGYtPm1fdG9wICsgX2hlaWdodDsK
KyAgICAgICAgaWYgKHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+cGFnaW5hdGVkKCkpIHsKKyAgICAg
ICAgICAgIFJlbmRlckJsb2NrKiBjaGlsZEJsb2NrID0gby0+aXNSZW5kZXJCbG9jaygpID8gdG9S
ZW5kZXJCbG9jayhvKSA6IDA7CiAKKyAgICAgICAgICAgIGlmIChjaGlsZEJsb2NrICYmIHZpZXco
KS0+bGF5b3V0U3RhdGUoKS0+bV9wYWdlSGVpZ2h0ICYmIHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+
cGFnZVkoby0+eSgpKSAhPSBjaGlsZEJsb2NrLT5wYWdlWSgpKQorICAgICAgICAgICAgICAgIGNo
aWxkQmxvY2stPnNldENoaWxkTmVlZHNMYXlvdXQodHJ1ZSwgZmFsc2UpOworICAgICAgICAgICAg
by0+bGF5b3V0SWZOZWVkZWQoKTsKKworICAgICAgICAgICAgLy8gSWYgd2UgYXJlIHVuc3BsaXR0
YWJsZSBhbmQgZG9uJ3QgZml0LCB0aGVuIHdlIG5lZWQgdG8gbW92ZSBkb3duLgorICAgICAgICAg
ICAgLy8gV2UgaW5jbHVkZSBvdXIgbWFyZ2lucyBhcyBwYXJ0IG9mIHRoZSB1bnNwbGl0dGFibGUg
YXJlYS4KKyAgICAgICAgICAgIGludCBuZXdZID0gYWRqdXN0Rm9yVW5zcGxpdHRhYmxlQ2hpbGQo
bywgeSwgdHJ1ZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFNlZSBpZiB3ZSBoYXZl
IGEgcGFnaW5hdGlvbiBzdHJ1dCB0aGF0IGlzIG1ha2luZyB1cyBtb3ZlIGRvd24gZnVydGhlci4K
KyAgICAgICAgICAgIC8vIE5vdGUgdGhhdCBhbiB1bnNwbGl0dGFibGUgY2hpbGQgY2FuJ3QgYWxz
byBoYXZlIGEgcGFnaW5hdGlvbiBzdHJ1dCwgc28gdGhpcyBpcworICAgICAgICAgICAgLy8gZXhj
bHVzaXZlIHdpdGggdGhlIGNhc2UgYWJvdmUuCisgICAgICAgICAgICBpZiAoY2hpbGRCbG9jayAm
JiBjaGlsZEJsb2NrLT5wYWdpbmF0aW9uU3RydXQoKSkgeworICAgICAgICAgICAgICAgIG5ld1kg
Kz0gY2hpbGRCbG9jay0+cGFnaW5hdGlvblN0cnV0KCk7CisgICAgICAgICAgICAgICAgY2hpbGRC
bG9jay0+c2V0UGFnaW5hdGlvblN0cnV0KDApOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgICAgICBpZiAobmV3WSAhPSB5KSB7CisgICAgICAgICAgICAgICAgZi0+bV9wYWdp
bmF0aW9uU3RydXQgPSBuZXdZIC0geTsKKyAgICAgICAgICAgICAgICB5ID0gbmV3WTsKKyAgICAg
ICAgICAgICAgICBvLT5zZXRZKHkgKyBvLT5tYXJnaW5Ub3AoKSk7CisgICAgICAgICAgICAgICAg
aWYgKGNoaWxkQmxvY2spCisgICAgICAgICAgICAgICAgICAgIGNoaWxkQmxvY2stPnNldENoaWxk
TmVlZHNMYXlvdXQodHJ1ZSwgZmFsc2UpOworICAgICAgICAgICAgICAgIG8tPmxheW91dElmTmVl
ZGVkKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmLT5tX3RvcCA9IHk7
CisgICAgICAgIGYtPm1fYm90dG9tID0gZi0+bV90b3AgKyBvLT5tYXJnaW5Ub3AoKSArIG8tPmhl
aWdodCgpICsgby0+bWFyZ2luQm90dG9tKCk7CisgICAgICAgIAogICAgICAgICAvLyBJZiB0aGUg
Y2hpbGQgbW92ZWQsIHdlIGhhdmUgdG8gcmVwYWludCBpdC4KICAgICAgICAgaWYgKG8tPmNoZWNr
Rm9yUmVwYWludER1cmluZ0xheW91dCgpKQogICAgICAgICAgICAgby0+cmVwYWludER1cmluZ0xh
eW91dElmTW92ZWQob2xkUmVjdCk7CkBAIC0yOTE3LDYgKzMwNzQsNDAgQEAgYm9vbCBSZW5kZXJC
bG9jazo6cG9zaXRpb25OZXdGbG9hdHMoKQogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIFJl
bmRlckJsb2NrOjpwb3NpdGlvbk5ld0Zsb2F0T25MaW5lKEZsb2F0aW5nT2JqZWN0KiBuZXdGbG9h
dCwgRmxvYXRpbmdPYmplY3QqIGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUpCit7CisgICAgYm9v
bCBkaWRQb3NpdGlvbiA9IHBvc2l0aW9uTmV3RmxvYXRzKCk7CisgICAgaWYgKCFkaWRQb3NpdGlv
biB8fCAhbmV3RmxvYXQtPm1fcGFnaW5hdGlvblN0cnV0KQorICAgICAgICByZXR1cm4gZGlkUG9z
aXRpb247CisgICAgCisgICAgaW50IGZsb2F0VG9wID0gbmV3RmxvYXQtPm1fdG9wOworICAgIGlu
dCBwYWdpbmF0aW9uU3RydXQgPSBuZXdGbG9hdC0+bV9wYWdpbmF0aW9uU3RydXQ7CisgICAgRmxv
YXRpbmdPYmplY3QqIGYgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+bGFzdCgpOworICAgIAorICAgIEFT
U0VSVChmID09IG5ld0Zsb2F0KTsKKworICAgIGlmIChmbG9hdFRvcCAtIHBhZ2luYXRpb25TdHJ1
dCAhPSBoZWlnaHQoKSkKKyAgICAgICAgcmV0dXJuIGRpZFBvc2l0aW9uOworCisgICAgZm9yIChm
ID0gbV9mbG9hdGluZ09iamVjdHMtPnByZXYoKTsgZiAmJiBmICE9IGxhc3RGbG9hdEZyb21QcmV2
aW91c0xpbmU7IGYgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+cHJldigpKSB7CisgICAgICAgIGlmIChm
LT5tX3RvcCA9PSBoZWlnaHQoKSkgeworICAgICAgICAgICAgQVNTRVJUKCFmLT5tX3BhZ2luYXRp
b25TdHJ1dCk7CisgICAgICAgICAgICBmLT5tX3BhZ2luYXRpb25TdHJ1dCA9IHBhZ2luYXRpb25T
dHJ1dDsKKyAgICAgICAgICAgIFJlbmRlckJveCogbyA9IGYtPm1fcmVuZGVyZXI7CisgICAgICAg
ICAgICBvLT5zZXRZKG8tPnkoKSArIG8tPm1hcmdpblRvcCgpICsgcGFnaW5hdGlvblN0cnV0KTsK
KyAgICAgICAgICAgIGlmIChvLT5pc1JlbmRlckJsb2NrKCkpCisgICAgICAgICAgICAgICAgdG9S
ZW5kZXJCbG9jayhvKS0+c2V0Q2hpbGROZWVkc0xheW91dCh0cnVlLCBmYWxzZSk7CisgICAgICAg
ICAgICBvLT5sYXlvdXRJZk5lZWRlZCgpOworICAgICAgICAgICAgZi0+bV90b3AgKz0gZi0+bV9w
YWdpbmF0aW9uU3RydXQ7CisgICAgICAgICAgICBmLT5tX2JvdHRvbSArPSBmLT5tX3BhZ2luYXRp
b25TdHJ1dDsKKyAgICAgICAgfQorICAgIH0KKyAgICAgICAgCisgICAgc2V0SGVpZ2h0KGhlaWdo
dCgpICsgcGFnaW5hdGlvblN0cnV0KTsKKyAgICAKKyAgICByZXR1cm4gZGlkUG9zaXRpb247Cit9
CisKIHZvaWQgUmVuZGVyQmxvY2s6Om5ld0xpbmUoRUNsZWFyIGNsZWFyKQogewogICAgIHBvc2l0
aW9uTmV3RmxvYXRzKCk7CkBAIC0zMTU4LDggKzMzNDksOCBAQCBpbnQgUmVuZGVyQmxvY2s6Omxv
d2VzdFBvc2l0aW9uKGJvb2wgaW5jCiAKICAgICBpZiAoaGFzQ29sdW1ucygpKSB7CiAgICAgICAg
IENvbHVtbkluZm8qIGNvbEluZm8gPSBjb2x1bW5JbmZvKCk7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBjb2xJbmZvLT5jb2x1bW5Db3VudCgpOyBpKyspCi0gICAgICAgICAgICBi
b3R0b20gPSBtYXgoYm90dG9tLCBjb2xJbmZvLT5jb2x1bW5SZWN0QXQoaSkuYm90dG9tKCkgKyBy
ZWxhdGl2ZU9mZnNldCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb2x1bW5D
b3VudChjb2xJbmZvKTsgaSsrKQorICAgICAgICAgICAgYm90dG9tID0gbWF4KGJvdHRvbSwgY29s
dW1uUmVjdEF0KGNvbEluZm8sIGkpLmJvdHRvbSgpICsgcmVsYXRpdmVPZmZzZXQpOwogICAgICAg
ICByZXR1cm4gYm90dG9tOwogICAgIH0KIApAQCAtMzI1Myw4ICszNDQ0LDkgQEAgaW50IFJlbmRl
ckJsb2NrOjpyaWdodG1vc3RQb3NpdGlvbihib29sIAogICAgICAgICAvLyBUaGlzIG9ubHkgbWF0
dGVycyBmb3IgTFRSCiAgICAgICAgIGlmIChzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIpIHsK
ICAgICAgICAgICAgIENvbHVtbkluZm8qIGNvbEluZm8gPSBjb2x1bW5JbmZvKCk7Ci0gICAgICAg
ICAgICBpZiAoY29sSW5mby0+Y29sdW1uQ291bnQoKSkKLSAgICAgICAgICAgICAgICByaWdodCA9
IG1heChjb2xJbmZvLT5jb2x1bW5SZWN0QXQoY29sSW5mby0+Y29sdW1uQ291bnQoKSAtIDEpLnJp
Z2h0KCkgKyByZWxhdGl2ZU9mZnNldCwgcmlnaHQpOworICAgICAgICAgICAgdW5zaWduZWQgY291
bnQgPSBjb2x1bW5Db3VudChjb2xJbmZvKTsKKyAgICAgICAgICAgIGlmIChjb3VudCkKKyAgICAg
ICAgICAgICAgICByaWdodCA9IG1heChjb2x1bW5SZWN0QXQoY29sSW5mbywgY291bnQgLSAxKS5y
aWdodCgpICsgcmVsYXRpdmVPZmZzZXQsIHJpZ2h0KTsKICAgICAgICAgfQogICAgICAgICByZXR1
cm4gcmlnaHQ7CiAgICAgfQpAQCAtMzM1Myw4ICszNTQ1LDkgQEAgaW50IFJlbmRlckJsb2NrOjps
ZWZ0bW9zdFBvc2l0aW9uKGJvb2wgaQogICAgICAgICAvLyBUaGlzIG9ubHkgbWF0dGVycyBmb3Ig
UlRMCiAgICAgICAgIGlmIChzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBSVEwpIHsKICAgICAgICAg
ICAgIENvbHVtbkluZm8qIGNvbEluZm8gPSBjb2x1bW5JbmZvKCk7Ci0gICAgICAgICAgICBpZiAo
Y29sSW5mby0+Y29sdW1uQ291bnQoKSkKLSAgICAgICAgICAgICAgICBsZWZ0ID0gbWluKGNvbElu
Zm8tPmNvbHVtblJlY3RBdChjb2xJbmZvLT5jb2x1bW5Db3VudCgpIC0gMSkueCgpICsgcmVsYXRp
dmVPZmZzZXQsIGxlZnQpOworICAgICAgICAgICAgdW5zaWduZWQgY291bnQgPSBjb2x1bW5Db3Vu
dChjb2xJbmZvKTsKKyAgICAgICAgICAgIGlmIChjb3VudCkKKyAgICAgICAgICAgICAgICBsZWZ0
ID0gbWluKGNvbHVtblJlY3RBdChjb2xJbmZvLCBjb3VudCAtIDEpLngoKSArIHJlbGF0aXZlT2Zm
c2V0LCBsZWZ0KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gbGVmdDsKICAgICB9CkBAIC0z
NjQ3LDYgKzM4NDAsOSBAQCBib29sIFJlbmRlckJsb2NrOjpjb250YWluc0Zsb2F0KFJlbmRlck9i
CiAKIHZvaWQgUmVuZGVyQmxvY2s6Om1hcmtBbGxEZXNjZW5kYW50c1dpdGhGbG9hdHNGb3JMYXlv
dXQoUmVuZGVyQm94KiBmbG9hdFRvUmVtb3ZlLCBib29sIGluTGF5b3V0KQogeworICAgIGlmICgh
bV9ldmVySGFkTGF5b3V0KQorICAgICAgICByZXR1cm47CisKICAgICBzZXRDaGlsZE5lZWRzTGF5
b3V0KHRydWUsICFpbkxheW91dCk7CiAKICAgICBpZiAoZmxvYXRUb1JlbW92ZSkKQEAgLTM2NjQs
MzAgKzM4NjAsNDAgQEAgdm9pZCBSZW5kZXJCbG9jazo6bWFya0FsbERlc2NlbmRhbnRzV2l0aAog
ICAgIH0KIH0KIAotaW50IFJlbmRlckJsb2NrOjp2aXNpYmxlVG9wT2ZIaWdoZXN0RmxvYXRFeHRl
bmRpbmdCZWxvdyhpbnQgYm90dG9tLCBpbnQgbWF4SGVpZ2h0KSBjb25zdAordm9pZCBSZW5kZXJC
bG9jazo6bWFya0Rlc2NlbmRhbnRCbG9ja3NBbmRMaW5lc0ZvckxheW91dChib29sIGluTGF5b3V0
KQogewotICAgIGludCB0b3AgPSBib3R0b207Ci0gICAgaWYgKG1fZmxvYXRpbmdPYmplY3RzKSB7
Ci0gICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdDsKLSAgICAgICAgZm9yIChE
ZXByZWNhdGVkUHRyTGlzdEl0ZXJhdG9yPEZsb2F0aW5nT2JqZWN0PiBpdCgqbV9mbG9hdGluZ09i
amVjdHMpOyAoZmxvYXRpbmdPYmplY3QgPSBpdC5jdXJyZW50KCkpOyArK2l0KSB7Ci0gICAgICAg
ICAgICBSZW5kZXJCb3gqIGZsb2F0aW5nQm94ID0gZmxvYXRpbmdPYmplY3QtPm1fcmVuZGVyZXI7
Ci0gICAgICAgICAgICBJbnRSZWN0IHZpc2libGVPdmVyZmxvdyA9IGZsb2F0aW5nQm94LT52aXNp
YmxlT3ZlcmZsb3dSZWN0KCk7Ci0gICAgICAgICAgICB2aXNpYmxlT3ZlcmZsb3cubW92ZShmbG9h
dGluZ0JveC0+eCgpLCBmbG9hdGluZ0JveC0+eSgpKTsKLSAgICAgICAgICAgIGlmICh2aXNpYmxl
T3ZlcmZsb3cueSgpIDwgdG9wICYmIHZpc2libGVPdmVyZmxvdy5ib3R0b20oKSA+IGJvdHRvbSAm
JiB2aXNpYmxlT3ZlcmZsb3cuaGVpZ2h0KCkgPD0gbWF4SGVpZ2h0ICYmIGZsb2F0aW5nQm94LT5j
b250YWluaW5nQmxvY2soKSA9PSB0aGlzKQotICAgICAgICAgICAgICAgIHRvcCA9IHZpc2libGVP
dmVyZmxvdy55KCk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgaWYgKCFtX2V2ZXJIYWRMYXlvdXQp
CisgICAgICAgIHJldHVybjsKIAorICAgIHNldENoaWxkTmVlZHNMYXlvdXQodHJ1ZSwgIWluTGF5
b3V0KTsKKworICAgIC8vIEl0ZXJhdGUgb3ZlciBvdXIgY2hpbGRyZW4gYW5kIG1hcmsgdGhlbSBh
cyBuZWVkZWQuCiAgICAgaWYgKCFjaGlsZHJlbklubGluZSgpKSB7Ci0gICAgICAgIGZvciAoUmVu
ZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5l
eHRTaWJsaW5nKCkpIHsKLSAgICAgICAgICAgIGlmIChjaGlsZC0+aXNGbG9hdGluZ09yUG9zaXRp
b25lZCgpIHx8ICFjaGlsZC0+aXNSZW5kZXJCbG9jaygpKQorICAgICAgICBmb3IgKFJlbmRlckJv
eCogY2hpbGQgPSBmaXJzdENoaWxkQm94KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2li
bGluZ0JveCgpKSB7CisgICAgICAgICAgICBpZiAoY2hpbGQtPmlzRmxvYXRpbmdPclBvc2l0aW9u
ZWQoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIFJlbmRlckJsb2Nr
KiBjaGlsZEJsb2NrID0gdG9SZW5kZXJCbG9jayhjaGlsZCk7Ci0gICAgICAgICAgICB0b3AgPSBt
aW4odG9wLCBjaGlsZEJsb2NrLT55KCkgKyBjaGlsZEJsb2NrLT52aXNpYmxlVG9wT2ZIaWdoZXN0
RmxvYXRFeHRlbmRpbmdCZWxvdyhib3R0b20gLSBjaGlsZEJsb2NrLT55KCksIG1heEhlaWdodCkp
OworICAgICAgICAgICAgY2hpbGQtPm1hcmtEZXNjZW5kYW50QmxvY2tzQW5kTGluZXNGb3JMYXlv
dXQoaW5MYXlvdXQpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIFdhbGsgb3VyIGZs
b2F0aW5nIG9iamVjdHMgYW5kIG1hcmsgdGhlbSB0b28uCisgICAgaWYgKG1fZmxvYXRpbmdPYmpl
Y3RzKSB7CisgICAgICAgIERlcHJlY2F0ZWRQdHJMaXN0SXRlcmF0b3I8RmxvYXRpbmdPYmplY3Q+
IGl0KCptX2Zsb2F0aW5nT2JqZWN0cyk7CisgICAgICAgIHdoaWxlIChpdC5jdXJyZW50KCkpIHsK
KyAgICAgICAgICAgIGlmIChpdC5jdXJyZW50KCktPm1fcmVuZGVyZXItPmlzUmVuZGVyQmxvY2so
KSkKKyAgICAgICAgICAgICAgICBpdC5jdXJyZW50KCktPm1fcmVuZGVyZXItPm1hcmtEZXNjZW5k
YW50QmxvY2tzQW5kTGluZXNGb3JMYXlvdXQoaW5MYXlvdXQpOworICAgICAgICAgICAgKytpdDsK
ICAgICAgICAgfQogICAgIH0KIAotICAgIHJldHVybiB0b3A7CisgICAgaWYgKG1fcG9zaXRpb25l
ZE9iamVjdHMpIHsKKyAgICAgICAgLy8gRklYTUU6IFRlY2huaWNhbGx5IHdlIGRvbid0IGhhdmUg
dG8gbWFyayB0aGUgcG9zaXRpb25lZCBvYmplY3RzIGlmIHdlJ3JlIHRoZSBibG9jaworICAgICAg
ICAvLyB0aGF0IGVzdGFibGlzaGVkIHRoZSBjb2x1bW5zLCBidXQgd2UgZG9uJ3QgcmVhbGx5IGhh
dmUgdGhhdCBpbmZvcm1hdGlvbiBoZXJlLgorICAgICAgICBJdGVyYXRvciBlbmQgPSBtX3Bvc2l0
aW9uZWRPYmplY3RzLT5lbmQoKTsKKyAgICAgICAgZm9yIChJdGVyYXRvciBpdCA9IG1fcG9zaXRp
b25lZE9iamVjdHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgKCpp
dCktPm1hcmtEZXNjZW5kYW50QmxvY2tzQW5kTGluZXNGb3JMYXlvdXQoKTsKKyAgICAgICAgfQor
ICAgIH0KIH0KIAogaW50IFJlbmRlckJsb2NrOjpnZXRDbGVhckRlbHRhKFJlbmRlckJveCogY2hp
bGQsIGludCB5UG9zKQpAQCAtMzg0NywxNiArNDA1MywxNiBAQCBib29sIFJlbmRlckJsb2NrOjpo
aXRUZXN0Q29sdW1ucyhjb25zdCBICiB7CiAgICAgLy8gV2UgbmVlZCB0byBkbyBtdWx0aXBsZSBw
YXNzZXMsIGJyZWFraW5nIHVwIG91ciBoaXQgdGVzdGluZyBpbnRvIHN0cmlwcy4KICAgICBDb2x1
bW5JbmZvKiBjb2xJbmZvID0gY29sdW1uSW5mbygpOwotICAgIGludCBjb2xDb3VudCA9IGNvbElu
Zm8tPmNvbHVtbkNvdW50KCk7CisgICAgaW50IGNvbENvdW50ID0gY29sdW1uQ291bnQoY29sSW5m
byk7CiAgICAgaWYgKCFjb2xDb3VudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGludCBs
ZWZ0ID0gYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKTsKICAgICBpbnQgY3VycllPZmZzZXQg
PSAwOwogICAgIGludCBpOwogICAgIGZvciAoaSA9IDA7IGkgPCBjb2xDb3VudDsgaSsrKQotICAg
ICAgICBjdXJyWU9mZnNldCAtPSBjb2xJbmZvLT5jb2x1bW5SZWN0QXQoaSkuaGVpZ2h0KCk7Cisg
ICAgICAgIGN1cnJZT2Zmc2V0IC09IGNvbHVtblJlY3RBdChjb2xJbmZvLCBpKS5oZWlnaHQoKTsK
ICAgICBmb3IgKGkgPSBjb2xDb3VudCAtIDE7IGkgPj0gMDsgaS0tKSB7Ci0gICAgICAgIEludFJl
Y3QgY29sUmVjdCA9IGNvbEluZm8tPmNvbHVtblJlY3RBdChpKTsKKyAgICAgICAgSW50UmVjdCBj
b2xSZWN0ID0gY29sdW1uUmVjdEF0KGNvbEluZm8sIGkpOwogICAgICAgICBpbnQgY3VyclhPZmZz
ZXQgPSBjb2xSZWN0LngoKSAtIGxlZnQ7CiAgICAgICAgIGN1cnJZT2Zmc2V0ICs9IGNvbFJlY3Qu
aGVpZ2h0KCk7CiAgICAgICAgIGNvbFJlY3QubW92ZSh0eCwgdHkpOwpAQCAtNDE1MCw4ICs0MzU2
LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6c2V0RGVzaXJlZENvbHVtbkNvdW50QQogICAgIGJvb2wg
ZGVzdHJveUNvbHVtbnMgPSAhZmlyc3RDaGlsZCgpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
IHx8IChjb3VudCA9PSAxICYmIHN0eWxlKCktPmhhc0F1dG9Db2x1bW5XaWR0aCgpKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICB8fCBmaXJzdENoaWxkKCktPmlzQW5vbnltb3VzQ29sdW1uc0Js
b2NrKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgZmlyc3RDaGlsZCgpLT5pc0Fub255
bW91c0NvbHVtblNwYW5CbG9jaygpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGRvY3Vt
ZW50KCktPnNldHRpbmdzKCktPnBhZ2luYXRlRHVyaW5nTGF5b3V0RW5hYmxlZCgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICB8fCBmaXJzdENoaWxkKCktPmlzQW5vbnltb3VzQ29sdW1uU3Bh
bkJsb2NrKCk7CiAgICAgaWYgKGRlc3Ryb3lDb2x1bW5zKSB7CiAgICAgICAgIGlmIChoYXNDb2x1
bW5zKCkpIHsKICAgICAgICAgICAgIGRlbGV0ZSBnQ29sdW1uSW5mb01hcC0+dGFrZSh0aGlzKTsK
QEAgLTQxOTQsMTMzICs0Mzk5LDc1IEBAIENvbHVtbkluZm8qIFJlbmRlckJsb2NrOjpjb2x1bW5J
bmZvKCkgY28KICAgICByZXR1cm4gZ0NvbHVtbkluZm9NYXAtPmdldCh0aGlzKTsgICAgCiB9CiAK
LWludCBSZW5kZXJCbG9jazo6bGF5b3V0Q29sdW1ucyhpbnQgZW5kT2ZDb250ZW50LCBpbnQgcmVx
dWVzdGVkQ29sdW1uSGVpZ2h0KQordW5zaWduZWQgUmVuZGVyQmxvY2s6OmNvbHVtbkNvdW50KENv
bHVtbkluZm8qIGNvbEluZm8pIGNvbnN0CiB7Ci0gICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYg
d2UgaGF2ZSBubyBjb2x1bW5zCi0gICAgaWYgKCFoYXNDb2x1bW5zKCkpCi0gICAgICAgIHJldHVy
biAtMTsKKyAgICBBU1NFUlQoaGFzQ29sdW1ucygpICYmIGdDb2x1bW5JbmZvTWFwLT5nZXQodGhp
cykgPT0gY29sSW5mbyk7CisgICAgcmV0dXJuIGNvbEluZm8tPmNvbHVtbkNvdW50KCk7Cit9CiAK
LSAgICBDb2x1bW5JbmZvKiBpbmZvID0gZ0NvbHVtbkluZm9NYXAtPmdldCh0aGlzKTsKLSAgICBp
bnQgZGVzaXJlZENvbHVtbldpZHRoID0gaW5mby0+ZGVzaXJlZENvbHVtbldpZHRoKCk7Ci0gICAg
aW50IGRlc2lyZWRDb2x1bW5Db3VudCA9IGluZm8tPmRlc2lyZWRDb2x1bW5Db3VudCgpOwotICAg
IAotICAgIGJvb2wgY29tcHV0ZUludHJpbnNpY0hlaWdodCA9IChlbmRPZkNvbnRlbnQgPT0gLTEp
OwotCi0gICAgLy8gRmlsbCB0aGUgY29sdW1ucyBpbiB0byB0aGUgYXZhaWxhYmxlIGhlaWdodC4g
IEF0dGVtcHQgdG8gYmFsYW5jZSB0aGUgaGVpZ2h0IG9mIHRoZSBjb2x1bW5zLgotICAgIC8vIEFk
ZCBpbiBoYWxmIG91ciBsaW5lLWhlaWdodCB0byBoZWxwIHdpdGggYmVzdC1ndWVzcyBpbml0aWFs
IGJhbGFuY2luZy4KLSAgICBpbnQgY29sdW1uU2xvcCA9IGxpbmVIZWlnaHQoZmFsc2UpIC8gMjsK
LSAgICBpbnQgcmVtYWluaW5nU2xvcFNwYWNlID0gY29sdW1uU2xvcCAqIGRlc2lyZWRDb2x1bW5D
b3VudDsKLSAgICBpbnQgYXZhaWxhYmxlSGVpZ2h0ID0gY29udGVudEhlaWdodCgpOwotICAgIGlu
dCBjb2xIZWlnaHQ7Ci0gICAgaWYgKGNvbXB1dGVJbnRyaW5zaWNIZWlnaHQgJiYgcmVxdWVzdGVk
Q29sdW1uSGVpZ2h0ID49IDApCi0gICAgICAgIGNvbEhlaWdodCA9IHJlcXVlc3RlZENvbHVtbkhl
aWdodDsKLSAgICBlbHNlIGlmIChjb21wdXRlSW50cmluc2ljSGVpZ2h0KQotICAgICAgICBjb2xI
ZWlnaHQgPSBtaW4oYXZhaWxhYmxlSGVpZ2h0LCBhdmFpbGFibGVIZWlnaHQgLyBkZXNpcmVkQ29s
dW1uQ291bnQgKyBjb2x1bW5TbG9wKTsKLSAgICBlbHNlCi0gICAgICAgIGNvbEhlaWdodCA9IGF2
YWlsYWJsZUhlaWdodDsKLSAgICBpbnQgb3JpZ2luYWxDb2xIZWlnaHQgPSBjb2xIZWlnaHQ7CitJ
bnRSZWN0IFJlbmRlckJsb2NrOjpjb2x1bW5SZWN0QXQoQ29sdW1uSW5mbyogY29sSW5mbywgdW5z
aWduZWQgaW5kZXgpIGNvbnN0Cit7CisgICAgQVNTRVJUKGhhc0NvbHVtbnMoKSAmJiBnQ29sdW1u
SW5mb01hcC0+Z2V0KHRoaXMpID09IGNvbEluZm8pOwogCisgICAgLy8gQ29tcHV0ZSB0aGUgYXBw
cm9wcmlhdGUgcmVjdCBiYXNlZCBvZmYgb3VyIGluZm9ybWF0aW9uLgorICAgIGludCBjb2xXaWR0
aCA9IGNvbEluZm8tPmRlc2lyZWRDb2x1bW5XaWR0aCgpOworICAgIGludCBjb2xIZWlnaHQgPSBj
b2xJbmZvLT5jb2x1bW5IZWlnaHQoKTsKKyAgICBpbnQgY29sVG9wID0gYm9yZGVyVG9wKCkgKyBw
YWRkaW5nVG9wKCk7CiAgICAgaW50IGNvbEdhcCA9IGNvbHVtbkdhcCgpOworICAgIGludCBjb2xM
ZWZ0ID0gc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8gCisgICAgICAgICAgICAgICAgICAg
ICAgYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKSArIChpbmRleCAqIChjb2xXaWR0aCArIGNv
bEdhcCkpCisgICAgICAgICAgICAgICAgICAgICAgOiBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVm
dCgpICsgY29udGVudFdpZHRoKCkgLSBjb2xXaWR0aCAtIChpbmRleCAqIChjb2xXaWR0aCArIGNv
bEdhcCkpOworICAgIHJldHVybiBJbnRSZWN0KGNvbExlZnQsIGNvbFRvcCwgY29sV2lkdGgsIGNv
bEhlaWdodCk7Cit9CiAKLSAgICAvLyBDb21wdXRlIGEgY29sbGVjdGlvbiBvZiBjb2x1bW4gcmVj
dHMuCi0gICAgaW5mby0+Y2xlYXJDb2x1bW5zKCk7Ci0gICAgCi0gICAgLy8gVGhlbiB3ZSBkbyBh
IHNpbXVsYXRlZCAicGFpbnQiIGludG8gdGhlIGNvbHVtbiBzbGljZXMgYW5kIGFsbG93IHRoZSBj
b250ZW50IHRvIHNsaWdodGx5IGFkanVzdCBvdXIgaW5kaXZpZHVhbCBjb2x1bW4gcmVjdHMuCi0g
ICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gdGFrZSBpbnRvIGFjY291bnQgbGF5ZXJzIHRoYXQgYXJl
IGFmZmVjdGVkIGJ5IHRoZSBjb2x1bW5zIGFzIHdlbGwgaGVyZSBzbyB0aGF0IHRoZXkgY2FuIGhh
dmUgYW4gb3Bwb3J0dW5pdHkKLSAgICAvLyB0byBhZGp1c3QgY29sdW1uIHJlY3RzIGFsc28uCi0g
ICAgUmVuZGVyVmlldyogdiA9IHZpZXcoKTsKLSAgICBpbnQgbGVmdCA9IGJvcmRlckxlZnQoKSAr
IHBhZGRpbmdMZWZ0KCk7Ci0gICAgaW50IHRvcCA9IGJvcmRlclRvcCgpICsgcGFkZGluZ1RvcCgp
OwotICAgIGludCBjdXJyWCA9IHN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUiA/IGJvcmRlckxl
ZnQoKSArIHBhZGRpbmdMZWZ0KCkgOiBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpICsgY29u
dGVudFdpZHRoKCkgLSBkZXNpcmVkQ29sdW1uV2lkdGg7Ci0gICAgaW50IGN1cnJZID0gdG9wOwot
ICAgIHVuc2lnbmVkIGNvbENvdW50ID0gZGVzaXJlZENvbHVtbkNvdW50OwotICAgIGludCBtYXhD
b2xCb3R0b20gPSBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKTsKLSAgICBpbnQgY29udGVudEJv
dHRvbSA9IHRvcCArIGF2YWlsYWJsZUhlaWdodDsKLSAgICBpbnQgbWluaW11bUNvbHVtbkhlaWdo
dCA9IC0xOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb2xDb3VudDsgaSsrKSB7Ci0g
ICAgICAgIC8vIElmIHdlIGFyZW4ndCBjb25zdHJhaW5lZCwgdGhlbiB0aGUgbGFzdCBjb2x1bW4g
Y2FuIGp1c3QgZ2V0IGFsbCB0aGUgcmVtYWluaW5nIHNwYWNlLgotICAgICAgICBpZiAoY29tcHV0
ZUludHJpbnNpY0hlaWdodCAmJiBpID09IGNvbENvdW50IC0gMSkKLSAgICAgICAgICAgIGNvbEhl
aWdodCA9IGF2YWlsYWJsZUhlaWdodDsKLQotICAgICAgICAvLyBUaGlzIHJlcHJlc2VudHMgdGhl
IHJlYWwgY29sdW1uIHBvc2l0aW9uLgotICAgICAgICBJbnRSZWN0IGNvbFJlY3QoY3VyclgsIHRv
cCwgZGVzaXJlZENvbHVtbldpZHRoLCBjb2xIZWlnaHQpOwotCi0gICAgICAgIGludCB0cnVuY2F0
aW9uUG9pbnQgPSB2aXNpYmxlVG9wT2ZIaWdoZXN0RmxvYXRFeHRlbmRpbmdCZWxvdyhjdXJyWSAr
IGNvbEhlaWdodCwgY29sSGVpZ2h0KTsKLQotICAgICAgICAvLyBGb3IgdGhlIHNpbXVsYXRlZCBw
YWludCwgd2UgcHJldGVuZCBsaWtlIGV2ZXJ5dGhpbmcgaXMgaW4gb25lIGxvbmcgc3RyaXAuCi0g
ICAgICAgIEludFJlY3QgcGFnZVJlY3QobGVmdCwgY3VyclksIGNvbnRlbnRXaWR0aCgpLCB0cnVu
Y2F0aW9uUG9pbnQgLSBjdXJyWSk7Ci0gICAgICAgIHYtPnNldFByaW50UmVjdChwYWdlUmVjdCk7
Ci0gICAgICAgIHYtPnNldFRydW5jYXRlZEF0KHRydW5jYXRpb25Qb2ludCk7Ci0gICAgICAgIEdy
YXBoaWNzQ29udGV4dCBjb250ZXh0KChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCopMCk7Ci0gICAg
ICAgIFBhaW50SW5mbyBwYWludEluZm8oJmNvbnRleHQsIHBhZ2VSZWN0LCBQYWludFBoYXNlRm9y
ZWdyb3VuZCwgZmFsc2UsIDAsIDApOwotICAgICAgICAKLSAgICAgICAgc2V0SGFzQ29sdW1ucyhm
YWxzZSk7Ci0gICAgICAgIHBhaW50T2JqZWN0KHBhaW50SW5mbywgMCwgMCk7Ci0gICAgICAgIHNl
dEhhc0NvbHVtbnModHJ1ZSk7Ci0KLSAgICAgICAgaWYgKGNvbXB1dGVJbnRyaW5zaWNIZWlnaHQg
JiYgdi0+bWluaW11bUNvbHVtbkhlaWdodCgpID4gb3JpZ2luYWxDb2xIZWlnaHQpIHsKLSAgICAg
ICAgICAgIC8vIFRoZSBpbml0aWFsIGNvbHVtbiBoZWlnaHQgd2FzIHRvbyBzbWFsbCB0byBjb250
YWluIG9uZSBsaW5lIG9mIHRleHQuCi0gICAgICAgICAgICBtaW5pbXVtQ29sdW1uSGVpZ2h0ID0g
bWF4KG1pbmltdW1Db2x1bW5IZWlnaHQsIHYtPm1pbmltdW1Db2x1bW5IZWlnaHQoKSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpbnQgYWRqdXN0ZWRCb3R0b20gPSB2LT5iZXN0VHJ1bmNhdGVkQXQo
KTsKLSAgICAgICAgaWYgKGFkanVzdGVkQm90dG9tIDw9IGN1cnJZKQotICAgICAgICAgICAgYWRq
dXN0ZWRCb3R0b20gPSB0cnVuY2F0aW9uUG9pbnQ7Ci0gICAgICAgIAotICAgICAgICBjb2xSZWN0
LnNldEhlaWdodChhZGp1c3RlZEJvdHRvbSAtIGN1cnJZKTsKLSAgICAgICAgCi0gICAgICAgIC8v
IEFkZCBpbiB0aGUgbG9zdCBzcGFjZSB0byB0aGUgc3Vic2VxdWVudCBjb2x1bW5zLgotICAgICAg
ICAvLyBGSVhNRTogVGhpcyB3aWxsIGNyZWF0ZSBhICJzdGFpcmNhc2UiIGVmZmVjdCBpZiB0aGVy
ZSBhcmUgZW5vdWdoIGNvbHVtbnMsIGJ1dCB0aGUgZWZmZWN0IHNob3VsZCBiZSBwcmV0dHkgc3Vi
dGxlLgotICAgICAgICBpZiAoY29tcHV0ZUludHJpbnNpY0hlaWdodCkgewotICAgICAgICAgICAg
aW50IGxvc3RTcGFjZSA9IGNvbEhlaWdodCAtIGNvbFJlY3QuaGVpZ2h0KCk7Ci0gICAgICAgICAg
ICBpZiAobG9zdFNwYWNlID4gcmVtYWluaW5nU2xvcFNwYWNlKSB7Ci0gICAgICAgICAgICAgICAg
Ly8gUmVkZXN0cmlidXRlIHRoZSBzcGFjZSBhbW9uZyB0aGUgcmVtYWluaW5nIGNvbHVtbnMuCi0g
ICAgICAgICAgICAgICAgaW50IHNwYWNlVG9SZWRpc3RyaWJ1dGUgPSBsb3N0U3BhY2UgLSByZW1h
aW5pbmdTbG9wU3BhY2U7Ci0gICAgICAgICAgICAgICAgaW50IHJlbWFpbmluZ0NvbHVtbnMgPSBj
b2xDb3VudCAtIGkgKyAxOwotICAgICAgICAgICAgICAgIGNvbEhlaWdodCArPSBzcGFjZVRvUmVk
aXN0cmlidXRlIC8gcmVtYWluaW5nQ29sdW1uczsKLSAgICAgICAgICAgIH0gCi0gICAgICAgICAg
ICByZW1haW5pbmdTbG9wU3BhY2UgPSBtYXgoMCwgcmVtYWluaW5nU2xvcFNwYWNlIC0gbG9zdFNw
YWNlKTsKLSAgICAgICAgfQorYm9vbCBSZW5kZXJCbG9jazo6bGF5b3V0Q29sdW1ucyhib29sIGhh
c1NwZWNpZmllZFBhZ2VIZWlnaHQsIGludCBwYWdlSGVpZ2h0LCBMYXlvdXRTdGF0ZU1haW50YWlu
ZXImIHN0YXRlUHVzaGVyKQoreworICAgIGlmIChoYXNDb2x1bW5zKCkpIHsKKyAgICAgICAgLy8g
RklYTUU6IFdlIGRvbid0IGJhbGFuY2UgcHJvcGVybHkgYXQgYWxsIGluIHRoZSBwcmVzZW5jZSBv
ZiBmb3JjZWQgcGFnZSBicmVha3MuICBXZSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdAorICAgICAg
ICAvLyB0aGUgZGlzdGFuY2UgYmV0d2VlbiBmb3JjZWQgcGFnZSBicmVha3MgaXMgc28gdGhhdCB3
ZSBjYW4gYXZvaWQgbWFraW5nIHRoZSBtaW5pbXVtIGNvbHVtbiBoZWlnaHQgdG9vIHRhbGwuCisg
ICAgICAgIENvbHVtbkluZm8qIGNvbEluZm8gPSBjb2x1bW5JbmZvKCk7CisgICAgICAgIGludCBk
ZXNpcmVkQ29sdW1uQ291bnQgPSBjb2xJbmZvLT5kZXNpcmVkQ29sdW1uQ291bnQoKTsKKyAgICAg
ICAgaWYgKCFoYXNTcGVjaWZpZWRQYWdlSGVpZ2h0KSB7CisgICAgICAgICAgICBpbnQgY29sdW1u
SGVpZ2h0ID0gcGFnZUhlaWdodDsKKyAgICAgICAgICAgIGludCBtaW5Db2x1bW5Db3VudCA9IGNv
bEluZm8tPmZvcmNlZEJyZWFrcygpICsgMTsKKyAgICAgICAgICAgIGlmIChtaW5Db2x1bW5Db3Vu
dCA+PSBkZXNpcmVkQ29sdW1uQ291bnQpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgZm9yY2Vk
IHBhZ2UgYnJlYWtzIGFyZSBpbiBjb250cm9sIG9mIHRoZSBiYWxhbmNpbmcuICBKdXN0IHNldCB0
aGUgY29sdW1uIGhlaWdodCB0byB0aGUKKyAgICAgICAgICAgICAgICAvLyBtYXhpbXVtIHBhZ2Ug
YnJlYWsgZGlzdGFuY2UuCisgICAgICAgICAgICAgICAgaWYgKCFwYWdlSGVpZ2h0KSB7CisgICAg
ICAgICAgICAgICAgICAgIGludCBkaXN0YW5jZUJldHdlZW5CcmVha3MgPSBtYXgoY29sSW5mby0+
bWF4aW11bURpc3RhbmNlQmV0d2VlbkZvcmNlZEJyZWFrcygpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+
cGFnZVkoYm9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCkgKyBjb250ZW50SGVpZ2h0KCkpIC0gY29s
SW5mby0+Zm9yY2VkQnJlYWtPZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIGNvbHVtbkhl
aWdodCA9IG1heChjb2xJbmZvLT5taW5pbXVtQ29sdW1uSGVpZ2h0KCksIGRpc3RhbmNlQmV0d2Vl
bkJyZWFrcyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChjb250
ZW50SGVpZ2h0KCkgPiBwYWdlSGVpZ2h0ICogZGVzaXJlZENvbHVtbkNvdW50KSB7CisgICAgICAg
ICAgICAgICAgLy8gTm93IHRoYXQgd2Uga25vdyB0aGUgaW50cmluc2ljIGhlaWdodCBvZiB0aGUg
Y29sdW1ucywgd2UgaGF2ZSB0byByZWJhbGFuY2UgdGhlbS4KKyAgICAgICAgICAgICAgICBjb2x1
bW5IZWlnaHQgPSBtYXgoY29sSW5mby0+bWluaW11bUNvbHVtbkhlaWdodCgpLCAoaW50KWNlaWxm
KChmbG9hdCljb250ZW50SGVpZ2h0KCkgLyBkZXNpcmVkQ29sdW1uQ291bnQpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGNvbHVtbkhlaWdodCAmJiBjb2x1
bW5IZWlnaHQgIT0gcGFnZUhlaWdodCkgeworICAgICAgICAgICAgICAgIHN0YXRlUHVzaGVyLnBv
cCgpOworICAgICAgICAgICAgICAgIG1fZXZlckhhZExheW91dCA9IHRydWU7CisgICAgICAgICAg
ICAgICAgbGF5b3V0QmxvY2soZmFsc2UsIGNvbHVtbkhlaWdodCk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0gCiAgICAgICAgIAotICAgICAg
ICBpZiAoc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSKQotICAgICAgICAgICAgY3VyclggKz0g
ZGVzaXJlZENvbHVtbldpZHRoICsgY29sR2FwOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBj
dXJyWCAtPSAoZGVzaXJlZENvbHVtbldpZHRoICsgY29sR2FwKTsKKyAgICAgICAgaWYgKHBhZ2VI
ZWlnaHQpIC8vIEZJWE1FOiBTaG91bGQgd2UgdXNlIGxvd2VzdFBvc2l0aW9uIChleGNsdWRpbmcg
b3VyIHBvc2l0aW9uZWQgb2JqZWN0cykgaW5zdGVhZCBvZiBjb250ZW50SGVpZ2h0KCk/CisgICAg
ICAgICAgICBjb2xJbmZvLT5zZXRDb2x1bW5Db3VudEFuZEhlaWdodChjZWlsZigoZmxvYXQpY29u
dGVudEhlaWdodCgpIC8gcGFnZUhlaWdodCksIHBhZ2VIZWlnaHQpOwogCi0gICAgICAgIGN1cnJZ
ICs9IGNvbFJlY3QuaGVpZ2h0KCk7Ci0gICAgICAgIGF2YWlsYWJsZUhlaWdodCAtPSBjb2xSZWN0
LmhlaWdodCgpOwotCi0gICAgICAgIG1heENvbEJvdHRvbSA9IG1heChjb2xSZWN0LmJvdHRvbSgp
LCBtYXhDb2xCb3R0b20pOwotCi0gICAgICAgIGluZm8tPmFkZENvbHVtblJlY3QoY29sUmVjdCk7
Ci0gICAgICAgIAotICAgICAgICAvLyBTdGFydCBhZGRpbmcgaW4gbW9yZSBjb2x1bW5zIGFzIGxv
bmcgYXMgdGhlcmUncyBzdGlsbCBjb250ZW50IGxlZnQuCi0gICAgICAgIGlmIChjdXJyWSA8IGVu
ZE9mQ29udGVudCAmJiBpID09IGNvbENvdW50IC0gMSAmJiAoY29tcHV0ZUludHJpbnNpY0hlaWdo
dCB8fCBjb250ZW50SGVpZ2h0KCkpKQotICAgICAgICAgICAgY29sQ291bnQrKzsKLSAgICB9Cisg
ICAgICAgIGlmIChjb2x1bW5Db3VudChjb2xJbmZvKSkgeworICAgICAgICAgICAgSW50UmVjdCBs
YXN0UmVjdCA9IGNvbHVtblJlY3RBdChjb2xJbmZvLCBjb2x1bW5Db3VudChjb2xJbmZvKSAtIDEp
OworICAgICAgICAgICAgaW50IG92ZXJmbG93TGVmdCA9IHN0eWxlKCktPmRpcmVjdGlvbigpID09
IFJUTCA/IG1pbigwLCBsYXN0UmVjdC54KCkpIDogMDsKKyAgICAgICAgICAgIGludCBvdmVyZmxv
d1JpZ2h0ID0gc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8gbWF4KHdpZHRoKCksIGxhc3RS
ZWN0LngoKSArIGxhc3RSZWN0LndpZHRoKCkpIDogMDsKKyAgICAgICAgICAgIGludCBvdmVyZmxv
d0hlaWdodCA9IGJvcmRlclRvcCgpICsgcGFkZGluZ1RvcCgpICsgY29sSW5mby0+Y29sdW1uSGVp
Z2h0KCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHNldEhlaWdodChvdmVyZmxvd0hlaWdo
dCArIGJvcmRlckJvdHRvbSgpICsgcGFkZGluZ0JvdHRvbSgpICsgaG9yaXpvbnRhbFNjcm9sbGJh
ckhlaWdodCgpKTsKIAotICAgIGlmIChtaW5pbXVtQ29sdW1uSGVpZ2h0ID49IDApIHsKLSAgICAg
ICAgLy8gSWYgb3JpZ2luYWxDb2xIZWlnaHQgd2FzIHRvbyBzbWFsbCwgd2UgbmVlZCB0byB0cnkg
dG8gbGF5b3V0IGFnYWluLgotICAgICAgICByZXR1cm4gbGF5b3V0Q29sdW1ucyhlbmRPZkNvbnRl
bnQsIG1pbmltdW1Db2x1bW5IZWlnaHQpOworICAgICAgICAgICAgbV9vdmVyZmxvdy5jbGVhcigp
OworICAgICAgICAgICAgYWRkTGF5b3V0T3ZlcmZsb3coSW50UmVjdChvdmVyZmxvd0xlZnQsIDAs
IG92ZXJmbG93UmlnaHQgLSBvdmVyZmxvd0xlZnQsIG92ZXJmbG93SGVpZ2h0KSk7CisgICAgICAg
IH0KICAgICB9Ci0KLSAgICBpbnQgb3ZlcmZsb3dSaWdodCA9IG1heCh3aWR0aCgpLCBjdXJyWCAt
IGNvbEdhcCk7Ci0gICAgaW50IG92ZXJmbG93TGVmdCA9IG1pbigwLCBjdXJyWCArIGRlc2lyZWRD
b2x1bW5XaWR0aCArIGNvbEdhcCk7Ci0gICAgaW50IG92ZXJmbG93SGVpZ2h0ID0gbWF4Q29sQm90
dG9tOwotICAgIGludCB0b0FkZCA9IGJvcmRlckJvdHRvbSgpICsgcGFkZGluZ0JvdHRvbSgpICsg
aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCgpOwotICAgICAgICAKLSAgICBpZiAoY29tcHV0ZUlu
dHJpbnNpY0hlaWdodCkKLSAgICAgICAgc2V0SGVpZ2h0KG1heENvbEJvdHRvbSArIHRvQWRkKTsK
LQotICAgIG1fb3ZlcmZsb3cuY2xlYXIoKTsKLSAgICBhZGRMYXlvdXRPdmVyZmxvdyhJbnRSZWN0
KG92ZXJmbG93TGVmdCwgMCwgb3ZlcmZsb3dSaWdodCAtIG92ZXJmbG93TGVmdCwgb3ZlcmZsb3dI
ZWlnaHQpKTsKLQotICAgIHYtPnNldFByaW50UmVjdChJbnRSZWN0KCkpOwotICAgIHYtPnNldFRy
dW5jYXRlZEF0KDApOwotICAgIAotICAgIEFTU0VSVChjb2xDb3VudCA9PSBpbmZvLT5jb2x1bW5D
b3VudCgpKTsKICAgICAKLSAgICByZXR1cm4gY29udGVudEJvdHRvbTsKKyAgICByZXR1cm4gZmFs
c2U7CiB9CiAKIHZvaWQgUmVuZGVyQmxvY2s6OmFkanVzdFBvaW50VG9Db2x1bW5Db250ZW50cyhJ
bnRQb2ludCYgcG9pbnQpIGNvbnN0CkBAIC00MzMwLDE3ICs0NDc3LDE3IEBAIHZvaWQgUmVuZGVy
QmxvY2s6OmFkanVzdFBvaW50VG9Db2x1bW5Db24KICAgICAgICAgcmV0dXJuOwogICAgIAogICAg
IENvbHVtbkluZm8qIGNvbEluZm8gPSBjb2x1bW5JbmZvKCk7Ci0gICAgaWYgKCFjb2xJbmZvLT5j
b2x1bW5Db3VudCgpKQorICAgIGlmICghY29sdW1uQ291bnQoY29sSW5mbykpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIC8vIERldGVybWluZSB3aGljaCBjb2x1bW5zIHdlIGludGVyc2VjdC4KICAg
ICBpbnQgY29sR2FwID0gY29sdW1uR2FwKCk7CiAgICAgaW50IGxlZnRHYXAgPSBjb2xHYXAgLyAy
OwotICAgIEludFBvaW50IGNvbHVtblBvaW50KGNvbEluZm8tPmNvbHVtblJlY3RBdCgwKS5sb2Nh
dGlvbigpKTsKKyAgICBJbnRQb2ludCBjb2x1bW5Qb2ludChjb2x1bW5SZWN0QXQoY29sSW5mbywg
MCkubG9jYXRpb24oKSk7CiAgICAgaW50IHlPZmZzZXQgPSAwOwogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBjb2xJbmZvLT5jb2x1bW5Db3VudCgpOyBpKyspIHsKICAgICAgICAgLy8gQWRk
IGluIGhhbGYgdGhlIGNvbHVtbiBnYXAgdG8gdGhlIGxlZnQgYW5kIHJpZ2h0IG9mIHRoZSByZWN0
LgotICAgICAgICBJbnRSZWN0IGNvbFJlY3QgPSBjb2xJbmZvLT5jb2x1bW5SZWN0QXQoaSk7Cisg
ICAgICAgIEludFJlY3QgY29sUmVjdCA9IGNvbHVtblJlY3RBdChjb2xJbmZvLCBpKTsKICAgICAg
ICAgSW50UmVjdCBnYXBBbmRDb2x1bW5SZWN0KGNvbFJlY3QueCgpIC0gbGVmdEdhcCwgY29sUmVj
dC55KCksIGNvbFJlY3Qud2lkdGgoKSArIGNvbEdhcCwgY29sUmVjdC5oZWlnaHQoKSk7CiAKICAg
ICAgICAgaWYgKHBvaW50LngoKSA+PSBnYXBBbmRDb2x1bW5SZWN0LngoKSAmJiBwb2ludC54KCkg
PCBnYXBBbmRDb2x1bW5SZWN0LnJpZ2h0KCkpIHsKQEAgLTQzNzgsNyArNDUyNSw3IEBAIHZvaWQg
UmVuZGVyQmxvY2s6OmFkanVzdFJlY3RGb3JDb2x1bW5zKEkKICAgICBJbnRSZWN0IHJlc3VsdDsK
ICAgICAKICAgICAvLyBEZXRlcm1pbmUgd2hpY2ggY29sdW1ucyB3ZSBpbnRlcnNlY3QuCi0gICAg
dW5zaWduZWQgY29sQ291bnQgPSBjb2xJbmZvLT5jb2x1bW5Db3VudCgpOworICAgIHVuc2lnbmVk
IGNvbENvdW50ID0gY29sdW1uQ291bnQoY29sSW5mbyk7CiAgICAgaWYgKCFjb2xDb3VudCkKICAg
ICAgICAgcmV0dXJuOwogICAgIApAQCAtNDM4Niw3ICs0NTMzLDcgQEAgdm9pZCBSZW5kZXJCbG9j
azo6YWRqdXN0UmVjdEZvckNvbHVtbnMoSQogICAgIAogICAgIGludCBjdXJyWU9mZnNldCA9IDA7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvbENvdW50OyBpKyspIHsKLSAgICAgICAg
SW50UmVjdCBjb2xSZWN0ID0gY29sSW5mby0+Y29sdW1uUmVjdEF0KGkpOworICAgICAgICBJbnRS
ZWN0IGNvbFJlY3QgPSBjb2x1bW5SZWN0QXQoY29sSW5mbywgaSk7CiAgICAgICAgIGludCBjdXJy
WE9mZnNldCA9IGNvbFJlY3QueCgpIC0gbGVmdDsKICAgICAgICAgCiAgICAgICAgIEludFJlY3Qg
cmVwYWludFJlY3QgPSByOwpAQCAtNDQxMiw5ICs0NTU5LDkgQEAgdm9pZCBSZW5kZXJCbG9jazo6
YWRqdXN0Rm9yQ29sdW1ucyhJbnRTaQogCiAgICAgaW50IGxlZnQgPSBib3JkZXJMZWZ0KCkgKyBw
YWRkaW5nTGVmdCgpOwogICAgIGludCB5T2Zmc2V0ID0gMDsKLSAgICBzaXplX3QgY29sdW1uQ291
bnQgPSBjb2xJbmZvLT5jb2x1bW5Db3VudCgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
Y29sdW1uQ291bnQ7ICsraSkgewotICAgICAgICBJbnRSZWN0IGNvbHVtblJlY3QgPSBjb2xJbmZv
LT5jb2x1bW5SZWN0QXQoaSk7CisgICAgc2l6ZV90IGNvbENvdW50ID0gY29sdW1uQ291bnQoY29s
SW5mbyk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb2xDb3VudDsgKytpKSB7CisgICAg
ICAgIEludFJlY3QgY29sdW1uUmVjdCA9IGNvbHVtblJlY3RBdChjb2xJbmZvLCBpKTsKICAgICAg
ICAgaW50IHhPZmZzZXQgPSBjb2x1bW5SZWN0LngoKSAtIGxlZnQ7CiAgICAgICAgIGlmIChwb2lu
dC55KCkgPCBjb2x1bW5SZWN0LmJvdHRvbSgpICsgeU9mZnNldCkgewogICAgICAgICAgICAgb2Zm
c2V0LmV4cGFuZCh4T2Zmc2V0LCAteU9mZnNldCk7CkBAIC01NDI4LDI0ICs1NTc1LDQ0IEBAIHZv
aWQgUmVuZGVyQmxvY2s6OmNsZWFyVHJ1bmNhdGlvbigpCiAKIHZvaWQgUmVuZGVyQmxvY2s6OnNl
dE1heFRvcE1hcmdpbnMoaW50IHBvcywgaW50IG5lZykKIHsKLSAgICBpZiAoIW1fbWF4TWFyZ2lu
KSB7Ci0gICAgICAgIGlmIChwb3MgPT0gTWF4TWFyZ2luOjp0b3BQb3NEZWZhdWx0KHRoaXMpICYm
IG5lZyA9PSBNYXhNYXJnaW46OnRvcE5lZ0RlZmF1bHQodGhpcykpCisgICAgaWYgKCFtX3JhcmVE
YXRhKSB7CisgICAgICAgIGlmIChwb3MgPT0gUmVuZGVyQmxvY2tSYXJlRGF0YTo6dG9wUG9zRGVm
YXVsdCh0aGlzKSAmJiBuZWcgPT0gUmVuZGVyQmxvY2tSYXJlRGF0YTo6dG9wTmVnRGVmYXVsdCh0
aGlzKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9tYXhNYXJnaW4gPSBuZXcgTWF4
TWFyZ2luKHRoaXMpOworICAgICAgICBtX3JhcmVEYXRhID0gbmV3IFJlbmRlckJsb2NrUmFyZURh
dGEodGhpcyk7CiAgICAgfQotICAgIG1fbWF4TWFyZ2luLT5tX3RvcFBvcyA9IHBvczsKLSAgICBt
X21heE1hcmdpbi0+bV90b3BOZWcgPSBuZWc7CisgICAgbV9yYXJlRGF0YS0+bV90b3BQb3MgPSBw
b3M7CisgICAgbV9yYXJlRGF0YS0+bV90b3BOZWcgPSBuZWc7CiB9CiAKIHZvaWQgUmVuZGVyQmxv
Y2s6OnNldE1heEJvdHRvbU1hcmdpbnMoaW50IHBvcywgaW50IG5lZykKIHsKLSAgICBpZiAoIW1f
bWF4TWFyZ2luKSB7Ci0gICAgICAgIGlmIChwb3MgPT0gTWF4TWFyZ2luOjpib3R0b21Qb3NEZWZh
dWx0KHRoaXMpICYmIG5lZyA9PSBNYXhNYXJnaW46OmJvdHRvbU5lZ0RlZmF1bHQodGhpcykpCisg
ICAgaWYgKCFtX3JhcmVEYXRhKSB7CisgICAgICAgIGlmIChwb3MgPT0gUmVuZGVyQmxvY2tSYXJl
RGF0YTo6Ym90dG9tUG9zRGVmYXVsdCh0aGlzKSAmJiBuZWcgPT0gUmVuZGVyQmxvY2tSYXJlRGF0
YTo6Ym90dG9tTmVnRGVmYXVsdCh0aGlzKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
bV9yYXJlRGF0YSA9IG5ldyBSZW5kZXJCbG9ja1JhcmVEYXRhKHRoaXMpOworICAgIH0KKyAgICBt
X3JhcmVEYXRhLT5tX2JvdHRvbVBvcyA9IHBvczsKKyAgICBtX3JhcmVEYXRhLT5tX2JvdHRvbU5l
ZyA9IG5lZzsKK30KKwordm9pZCBSZW5kZXJCbG9jazo6c2V0UGFnaW5hdGlvblN0cnV0KGludCBz
dHJ1dCkKK3sKKyAgICBpZiAoIW1fcmFyZURhdGEpIHsKKyAgICAgICAgaWYgKHN0cnV0ID09IDAp
CiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fbWF4TWFyZ2luID0gbmV3IE1heE1hcmdp
bih0aGlzKTsKKyAgICAgICAgbV9yYXJlRGF0YSA9IG5ldyBSZW5kZXJCbG9ja1JhcmVEYXRhKHRo
aXMpOwogICAgIH0KLSAgICBtX21heE1hcmdpbi0+bV9ib3R0b21Qb3MgPSBwb3M7Ci0gICAgbV9t
YXhNYXJnaW4tPm1fYm90dG9tTmVnID0gbmVnOworICAgIG1fcmFyZURhdGEtPm1fcGFnaW5hdGlv
blN0cnV0ID0gc3RydXQ7Cit9CisKK3ZvaWQgUmVuZGVyQmxvY2s6OnNldFBhZ2VZKGludCB5KQor
eworICAgIGlmICghbV9yYXJlRGF0YSkgeworICAgICAgICBpZiAoeSA9PSAwKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBtX3JhcmVEYXRhID0gbmV3IFJlbmRlckJsb2NrUmFyZURhdGEo
dGhpcyk7CisgICAgfQorICAgIG1fcmFyZURhdGEtPm1fcGFnZVkgPSB5OwogfQogCiB2b2lkIFJl
bmRlckJsb2NrOjphYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGludCB0eCwg
aW50IHR5KQpAQCAtNTcwNiw2ICs1ODczLDExNyBAQCBSZW5kZXJCbG9jayogUmVuZGVyQmxvY2s6
OmNyZWF0ZUFub255bW91CiAgICAgcmV0dXJuIG5ld0JveDsKIH0KIAoraW50IFJlbmRlckJsb2Nr
OjpuZXh0UGFnZVRvcChpbnQgeVBvcykgY29uc3QKK3sKKyAgICBMYXlvdXRTdGF0ZSogbGF5b3V0
U3RhdGUgPSB2aWV3KCktPmxheW91dFN0YXRlKCk7CisgICAgaWYgKCFsYXlvdXRTdGF0ZS0+bV9w
YWdlSGVpZ2h0KQorICAgICAgICByZXR1cm4geVBvczsKKyAgICAKKyAgICAvLyBUaGUgeVBvcyBp
cyBpbiBvdXIgY29vcmRpbmF0ZSBzcGFjZS4gIFdlIGNhbiBhZGQgaW4gb3VyIHB1c2hlZCBvZmZz
ZXQuCisgICAgaW50IHBhZ2VIZWlnaHQgPSBsYXlvdXRTdGF0ZS0+bV9wYWdlSGVpZ2h0OworICAg
IGludCByZW1haW5pbmdIZWlnaHQgPSAocGFnZUhlaWdodCAtICgobGF5b3V0U3RhdGUtPm1fbGF5
b3V0T2Zmc2V0IC0gbGF5b3V0U3RhdGUtPm1fcGFnZU9mZnNldCkuaGVpZ2h0KCkgKyB5UG9zKSAl
IHBhZ2VIZWlnaHQpICUgcGFnZUhlaWdodDsKKyAgICByZXR1cm4geVBvcyArIHJlbWFpbmluZ0hl
aWdodDsKK30KKworc3RhdGljIGJvb2wgaW5Ob3JtYWxGbG93KFJlbmRlckJveCogY2hpbGQpCit7
CisgICAgUmVuZGVyQmxvY2sqIGN1cnIgPSBjaGlsZC0+Y29udGFpbmluZ0Jsb2NrKCk7CisgICAg
UmVuZGVyQmxvY2sqIGluaXRpYWxCbG9jayA9IGNoaWxkLT52aWV3KCk7CisgICAgd2hpbGUgKGN1
cnIgJiYgY3VyciAhPSBpbml0aWFsQmxvY2spIHsKKyAgICAgICAgaWYgKGN1cnItPmhhc0NvbHVt
bnMoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoY3Vyci0+aXNGbG9h
dGluZ09yUG9zaXRpb25lZCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBj
dXJyID0gY3Vyci0+Y29udGFpbmluZ0Jsb2NrKCk7CisgICAgfQorICAgIHJldHVybiB0cnVlOwor
fQorCitpbnQgUmVuZGVyQmxvY2s6OmFwcGx5QmVmb3JlQnJlYWsoUmVuZGVyQm94KiBjaGlsZCwg
aW50IHlQb3MpCit7CisgICAgLy8gRklYTUU6IEFkZCBwYWdlIGJyZWFrIGNoZWNraW5nIGhlcmUg
d2hlbiB3ZSBzdXBwb3J0IHByaW50aW5nLgorICAgIGJvb2wgY2hlY2tDb2x1bW5CcmVha3MgPSB2
aWV3KCktPmxheW91dFN0YXRlKCktPnBhZ2luYXRpbmdDb2x1bW5zKCk7CisgICAgYm9vbCBjaGVj
a0JlZm9yZUFsd2F5cyA9IGNoZWNrQ29sdW1uQnJlYWtzICYmIGNoaWxkLT5zdHlsZSgpLT5jb2x1
bW5CcmVha0JlZm9yZSgpID09IFBCQUxXQVlTOworICAgIGlmIChjaGVja0JlZm9yZUFsd2F5cyAm
JiBpbk5vcm1hbEZsb3coY2hpbGQpKSB7CisgICAgICAgIGlmIChjaGVja0NvbHVtbkJyZWFrcykK
KyAgICAgICAgICAgIHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+YWRkRm9yY2VkQ29sdW1uQnJlYWso
eVBvcyk7CisgICAgICAgIHJldHVybiBuZXh0UGFnZVRvcCh5UG9zKTsKKyAgICB9CisgICAgcmV0
dXJuIHlQb3M7Cit9CisKK2ludCBSZW5kZXJCbG9jazo6YXBwbHlBZnRlckJyZWFrKFJlbmRlckJv
eCogY2hpbGQsIGludCB5UG9zLCBNYXJnaW5JbmZvJiBtYXJnaW5JbmZvKQoreworICAgIC8vIEZJ
WE1FOiBBZGQgcGFnZSBicmVhayBjaGVja2luZyBoZXJlIHdoZW4gd2Ugc3VwcG9ydCBwcmludGlu
Zy4KKyAgICBib29sIGNoZWNrQ29sdW1uQnJlYWtzID0gdmlldygpLT5sYXlvdXRTdGF0ZSgpLT5w
YWdpbmF0aW5nQ29sdW1ucygpOworICAgIGJvb2wgY2hlY2tBZnRlckFsd2F5cyA9IGNoZWNrQ29s
dW1uQnJlYWtzICYmIGNoaWxkLT5zdHlsZSgpLT5jb2x1bW5CcmVha0FmdGVyKCkgPT0gUEJBTFdB
WVM7CisgICAgaWYgKGNoZWNrQWZ0ZXJBbHdheXMgJiYgaW5Ob3JtYWxGbG93KGNoaWxkKSkgewor
ICAgICAgICBtYXJnaW5JbmZvLnNldEJvdHRvbVF1aXJrKHRydWUpOyAvLyBDYXVzZSBtYXJnaW5z
IHRvIGJlIGRpc2NhcmRlZCBmb3IgYW55IGZvbGxvd2luZyBjb250ZW50LgorICAgICAgICBpZiAo
Y2hlY2tDb2x1bW5CcmVha3MpCisgICAgICAgICAgICB2aWV3KCktPmxheW91dFN0YXRlKCktPmFk
ZEZvcmNlZENvbHVtbkJyZWFrKHlQb3MpOworICAgICAgICByZXR1cm4gbmV4dFBhZ2VUb3AoeVBv
cyk7CisgICAgfQorICAgIHJldHVybiB5UG9zOworfQorCitpbnQgUmVuZGVyQmxvY2s6OmFkanVz
dEZvclVuc3BsaXR0YWJsZUNoaWxkKFJlbmRlckJveCogY2hpbGQsIGludCB5UG9zLCBib29sIGlu
Y2x1ZGVNYXJnaW5zKQoreworICAgIGJvb2wgaXNVbnNwbGl0dGFibGUgPSBjaGlsZC0+aXNSZXBs
YWNlZCgpIHx8IGNoaWxkLT5zY3JvbGxzT3ZlcmZsb3coKTsKKyAgICBpZiAoIWlzVW5zcGxpdHRh
YmxlKQorICAgICAgICByZXR1cm4geVBvczsKKyAgICBpbnQgY2hpbGRIZWlnaHQgPSBjaGlsZC0+
aGVpZ2h0KCkgKyAoaW5jbHVkZU1hcmdpbnMgPyBjaGlsZC0+bWFyZ2luVG9wKCkgKyBjaGlsZC0+
bWFyZ2luQm90dG9tKCkgOiAwKTsKKyAgICBMYXlvdXRTdGF0ZSogbGF5b3V0U3RhdGUgPSB2aWV3
KCktPmxheW91dFN0YXRlKCk7CisgICAgaWYgKGxheW91dFN0YXRlLT5tX2NvbHVtbkluZm8pCisg
ICAgICAgIGxheW91dFN0YXRlLT5tX2NvbHVtbkluZm8tPnVwZGF0ZU1pbmltdW1Db2x1bW5IZWln
aHQoY2hpbGRIZWlnaHQpOworICAgIGludCBwYWdlSGVpZ2h0ID0gbGF5b3V0U3RhdGUtPm1fcGFn
ZUhlaWdodDsKKyAgICBpZiAoIXBhZ2VIZWlnaHQgfHwgY2hpbGRIZWlnaHQgPiBwYWdlSGVpZ2h0
KQorICAgICAgICByZXR1cm4geVBvczsKKyAgICBpbnQgcmVtYWluaW5nSGVpZ2h0ID0gKHBhZ2VI
ZWlnaHQgLSAoKGxheW91dFN0YXRlLT5tX2xheW91dE9mZnNldCAtIGxheW91dFN0YXRlLT5tX3Bh
Z2VPZmZzZXQpLmhlaWdodCgpICsgeVBvcykgJSBwYWdlSGVpZ2h0KSAlIHBhZ2VIZWlnaHQ7Cisg
ICAgaWYgKHJlbWFpbmluZ0hlaWdodCA8IGNoaWxkSGVpZ2h0KQorICAgICAgICByZXR1cm4geVBv
cyArIHJlbWFpbmluZ0hlaWdodDsKKyAgICByZXR1cm4geVBvczsKK30KKwordm9pZCBSZW5kZXJC
bG9jazo6YWRqdXN0TGluZVBvc2l0aW9uRm9yUGFnaW5hdGlvbihSb290SW5saW5lQm94KiBsaW5l
Qm94LCBpbnQmIGRlbHRhKQoreworICAgIC8vIEZJWE1FOiBGb3Igbm93IHdlIHBhZ2luYXRlIHVz
aW5nIGxpbmUgb3ZlcmZsb3cuICBUaGlzIGVuc3VyZXMgdGhhdCBsaW5lcyBkb24ndCBvdmVybGFw
IGF0IGFsbCB3aGVuIHdlCisgICAgLy8gcHV0IGEgc3RydXQgYmV0d2VlbiB0aGVtIGZvciBwYWdp
bmF0aW9uIHB1cnBvc2VzLiAgSG93ZXZlciwgdGhpcyByZWFsbHkgaXNuJ3QgdGhlIGRlc2lyZWQg
cmVuZGVyaW5nLCBzaW5jZQorICAgIC8vIHRoZSBsaW5lIG9uIHRoZSB0b3Agb2YgdGhlIG5leHQg
cGFnZSB3aWxsIGFwcGVhciB0b28gZmFyIGRvd24gcmVsYXRpdmUgdG8gdGhlIHNhbWUga2luZCBv
ZiBsaW5lIGF0IHRoZSB0b3AKKyAgICAvLyBvZiB0aGUgZmlyc3QgY29sdW1uLgorICAgIC8vCisg
ICAgLy8gVGhlIHJlbmRlcmluZyB3ZSB3b3VsZCBsaWtlIHRvIHNlZSBpcyBvbmUgd2hlcmUgdGhl
IGxpbmVUb3AgaXMgYXQgdGhlIHRvcCBvZiB0aGUgY29sdW1uLCBhbmQgYW55IGxpbmUgb3ZlcmZs
b3cKKyAgICAvLyBzaW1wbHkgc3BpbGxzIG91dCBhYm92ZSB0aGUgdG9wIG9mIHRoZSBjb2x1bW4u
ICBUaGlzIGVmZmVjdCB3b3VsZCBtYXRjaCB3aGF0IGhhcHBlbnMgYXQgdGhlIHRvcCBvZiB0aGUg
Zmlyc3QgY29sdW1uLgorICAgIC8vIFdlIGNhbid0IGFjaGlldmUgdGhpcyByZW5kZXJpbmcsIGhv
d2V2ZXIsIHVudGlsIHdlIHN0b3AgY29sdW1ucyBmcm9tIGNsaXBwaW5nIHRvIHRoZSBjb2x1bW4g
Ym91bmRzICh0aHVzIGFsbG93aW5nCisgICAgLy8gZm9yIG92ZXJmbG93IHRvIG9jY3VyKSwgYW5k
IHRoZW4gY2FjaGUgdmlzaWJsZSBvdmVyZmxvdyBmb3IgZWFjaCBjb2x1bW4gcmVjdC4KKyAgICAv
LworICAgIC8vIEZ1cnRoZXJtb3JlLCB0aGUgcGFpbnQgd2UgaGF2ZSB0byBkbyB3aGVuIGEgY29s
dW1uIGhhcyBvdmVyZmxvdyBoYXMgdG8gYmUgc3BlY2lhbC4gIFdlIG5lZWQgdG8gZXhjbHVkZQor
ICAgIC8vIGNvbnRlbnQgdGhhdCBwYWludHMgaW4gYSBwcmV2aW91cyBjb2x1bW4gKGFuZCBjb250
ZW50IHRoYXQgcGFpbnRzIGluIHRoZSBmb2xsb3dpbmcgY29sdW1uKS4KKyAgICAvLworICAgIC8v
IEZJWE1FOiBBbm90aGVyIHByb2JsZW0gd2l0aCBzaW1wbHkgbW92aW5nIGxpbmVzIGlzIHRoYXQg
dGhlIGF2YWlsYWJsZSBsaW5lIHdpZHRoIG1heSBjaGFuZ2UgKGJlY2F1c2Ugb2YgZmxvYXRzKS4K
KyAgICAvLyBUZWNobmljYWxseSBpZiB0aGUgbG9jYXRpb24gd2UgbW92ZSB0aGUgbGluZSB0byBo
YXMgYSBkaWZmZXJlbnQgbGluZSB3aWR0aCB0aGFuIG91ciBvbGQgcG9zaXRpb24sIHRoZW4gd2Ug
bmVlZCB0byBkaXJ0eSB0aGUKKyAgICAvLyBsaW5lIGFuZCBhbGwgZm9sbG93aW5nIGxpbmVzLgor
ICAgIExheW91dFN0YXRlKiBsYXlvdXRTdGF0ZSA9IHZpZXcoKS0+bGF5b3V0U3RhdGUoKTsKKyAg
ICBpbnQgcGFnZUhlaWdodCA9IGxheW91dFN0YXRlLT5tX3BhZ2VIZWlnaHQ7CisgICAgaW50IHlQ
b3MgPSBsaW5lQm94LT50b3BWaXNpYmxlT3ZlcmZsb3coKTsKKyAgICBpbnQgbGluZUhlaWdodCA9
IGxpbmVCb3gtPmJvdHRvbVZpc2libGVPdmVyZmxvdygpIC0geVBvczsKKyAgICBpZiAobGF5b3V0
U3RhdGUtPm1fY29sdW1uSW5mbykKKyAgICAgICAgbGF5b3V0U3RhdGUtPm1fY29sdW1uSW5mby0+
dXBkYXRlTWluaW11bUNvbHVtbkhlaWdodChsaW5lSGVpZ2h0KTsKKyAgICB5UG9zICs9IGRlbHRh
OworICAgIGxpbmVCb3gtPnNldFBhZ2luYXRpb25TdHJ1dCgwKTsKKyAgICBpZiAoIXBhZ2VIZWln
aHQgfHwgbGluZUhlaWdodCA+IHBhZ2VIZWlnaHQpCisgICAgICAgIHJldHVybjsKKyAgICBpbnQg
cmVtYWluaW5nSGVpZ2h0ID0gcGFnZUhlaWdodCAtICgobGF5b3V0U3RhdGUtPm1fbGF5b3V0T2Zm
c2V0IC0gbGF5b3V0U3RhdGUtPm1fcGFnZU9mZnNldCkuaGVpZ2h0KCkgKyB5UG9zKSAlIHBhZ2VI
ZWlnaHQ7CisgICAgaWYgKHJlbWFpbmluZ0hlaWdodCA8IGxpbmVIZWlnaHQpIHsKKyAgICAgICAg
aW50IHRvdGFsSGVpZ2h0ID0gbGluZUhlaWdodCArIG1heCgwLCB5UG9zKTsKKyAgICAgICAgaWYg
KGxpbmVCb3ggPT0gZmlyc3RSb290Qm94KCkgJiYgdG90YWxIZWlnaHQgPCBwYWdlSGVpZ2h0ICYm
ICFpc1Bvc2l0aW9uZWQoKSAmJiAhaXNUYWJsZUNlbGwoKSkKKyAgICAgICAgICAgIHNldFBhZ2lu
YXRpb25TdHJ1dChyZW1haW5pbmdIZWlnaHQgKyBtYXgoMCwgeVBvcykpOworICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgIGRlbHRhICs9IHJlbWFpbmluZ0hlaWdodDsKKyAgICAgICAgICAgIGxp
bmVCb3gtPnNldFBhZ2luYXRpb25TdHJ1dChyZW1haW5pbmdIZWlnaHQpOworICAgICAgICB9Cisg
ICAgfSAgCit9CisgCiBjb25zdCBjaGFyKiBSZW5kZXJCbG9jazo6cmVuZGVyTmFtZSgpIGNvbnN0
CiB7CiAgICAgaWYgKGlzQm9keSgpKQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCShyZXZp
c2lvbiA2NzU2NykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM0LDYgKzM0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDb2x1
bW5JbmZvOwogY2xhc3MgSW5saW5lSXRlcmF0b3I7CitjbGFzcyBMYXlvdXRTdGF0ZU1haW50YWlu
ZXI7CiBjbGFzcyBSZW5kZXJJbmxpbmU7CiAKIHN0cnVjdCBCaWRpUnVuOwpAQCAtNzAsNyArNzEs
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGFkZENoaWxkKFJlbmRlck9iamVjdCogbmV3
Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSAwKTsKICAgICB2aXJ0dWFsIHZvaWQg
cmVtb3ZlQ2hpbGQoUmVuZGVyT2JqZWN0Kik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0Qmxv
Y2soYm9vbCByZWxheW91dENoaWxkcmVuKTsKKyAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0QmxvY2so
Ym9vbCByZWxheW91dENoaWxkcmVuLCBpbnQgcGFnZUhlaWdodCA9IDApOwogCiAgICAgdm9pZCBp
bnNlcnRQb3NpdGlvbmVkT2JqZWN0KFJlbmRlckJveCopOwogICAgIHZvaWQgcmVtb3ZlUG9zaXRp
b25lZE9iamVjdChSZW5kZXJCb3gqKTsKQEAgLTg5LDYgKzkwLDcgQEAgcHVibGljOgogCiAgICAg
dm9pZCBtYXJrQWxsRGVzY2VuZGFudHNXaXRoRmxvYXRzRm9yTGF5b3V0KFJlbmRlckJveCogZmxv
YXRUb1JlbW92ZSA9IDAsIGJvb2wgaW5MYXlvdXQgPSB0cnVlKTsKICAgICB2b2lkIG1hcmtQb3Np
dGlvbmVkT2JqZWN0c0ZvckxheW91dCgpOworICAgIHZpcnR1YWwgdm9pZCBtYXJrRGVzY2VuZGFu
dEJsb2Nrc0FuZExpbmVzRm9yTGF5b3V0KGJvb2wgaW5MYXlvdXQgPSB0cnVlKTsKIAogICAgIGJv
b2wgY29udGFpbnNGbG9hdHMoKSB7IHJldHVybiBtX2Zsb2F0aW5nT2JqZWN0cyAmJiAhbV9mbG9h
dGluZ09iamVjdHMtPmlzRW1wdHkoKTsgfQogICAgIGJvb2wgY29udGFpbnNGbG9hdChSZW5kZXJP
YmplY3QqKTsKQEAgLTE1MSw2ICsxNTMsMTUgQEAgcHVibGljOgogCiAgICAgQ29sdW1uSW5mbyog
Y29sdW1uSW5mbygpIGNvbnN0OwogICAgIGludCBjb2x1bW5HYXAoKSBjb25zdDsKKyAgICAKKyAg
ICAvLyBUaGVzZSB0d28gZnVuY3Rpb25zIHRha2UgdGhlIENvbHVtbkluZm8qIHRvIGF2b2lkIHJl
cGVhdGVkIGxvb2t1cHMgb2YgdGhlIGluZm8gaW4gdGhlIGdsb2JhbCBIYXNoTWFwLgorICAgIHVu
c2lnbmVkIGNvbHVtbkNvdW50KENvbHVtbkluZm8qKSBjb25zdDsKKyAgICBJbnRSZWN0IGNvbHVt
blJlY3RBdChDb2x1bW5JbmZvKiwgdW5zaWduZWQpIGNvbnN0OworCisgICAgaW50IHBhZ2luYXRp
b25TdHJ1dCgpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVEYXRhLT5tX3BhZ2lu
YXRpb25TdHJ1dCA6IDA7IH0KKyAgICBpbnQgcGFnZVkoKSBjb25zdCB7IHJldHVybiBtX3JhcmVE
YXRhID8gbV9yYXJlRGF0YS0+bV9wYWdlWSA6IDA7IH0KKyAgICB2b2lkIHNldFBhZ2luYXRpb25T
dHJ1dChpbnQgc3RydXQpOworICAgIHZvaWQgc2V0UGFnZVkoaW50IHkpOwogCiBwcm90ZWN0ZWQ6
CiAgICAgLy8gVGhlc2UgZnVuY3Rpb25zIGFyZSBvbmx5IHVzZWQgaW50ZXJuYWxseSB0byBtYW5p
cHVsYXRlIHRoZSByZW5kZXIgdHJlZSBzdHJ1Y3R1cmUgdmlhIHJlbW92ZS9pbnNlcnQvYXBwZW5k
Q2hpbGROb2RlLgpAQCAtMTc3LDIwICsxODgsMjIgQEAgcHJvdGVjdGVkOgogICAgIH0KICAgICB2
b2lkIG1vdmVDaGlsZHJlblRvKFJlbmRlckJsb2NrKiB0bywgUmVuZGVyT2JqZWN0KiBzdGFydENo
aWxkLCBSZW5kZXJPYmplY3QqIGVuZENoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkLCBi
b29sIGZ1bGxSZW1vdmVJbnNlcnQgPSBmYWxzZSk7CiAgICAgCi0gICAgaW50IG1heFRvcFBvc01h
cmdpbigpIGNvbnN0IHsgcmV0dXJuIG1fbWF4TWFyZ2luID8gbV9tYXhNYXJnaW4tPm1fdG9wUG9z
IDogTWF4TWFyZ2luOjp0b3BQb3NEZWZhdWx0KHRoaXMpOyB9Ci0gICAgaW50IG1heFRvcE5lZ01h
cmdpbigpIGNvbnN0IHsgcmV0dXJuIG1fbWF4TWFyZ2luID8gbV9tYXhNYXJnaW4tPm1fdG9wTmVn
IDogTWF4TWFyZ2luOjp0b3BOZWdEZWZhdWx0KHRoaXMpOyB9Ci0gICAgaW50IG1heEJvdHRvbVBv
c01hcmdpbigpIGNvbnN0IHsgcmV0dXJuIG1fbWF4TWFyZ2luID8gbV9tYXhNYXJnaW4tPm1fYm90
dG9tUG9zIDogTWF4TWFyZ2luOjpib3R0b21Qb3NEZWZhdWx0KHRoaXMpOyB9Ci0gICAgaW50IG1h
eEJvdHRvbU5lZ01hcmdpbigpIGNvbnN0IHsgcmV0dXJuIG1fbWF4TWFyZ2luID8gbV9tYXhNYXJn
aW4tPm1fYm90dG9tTmVnIDogTWF4TWFyZ2luOjpib3R0b21OZWdEZWZhdWx0KHRoaXMpOyB9Cisg
ICAgaW50IG1heFRvcFBvc01hcmdpbigpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3Jh
cmVEYXRhLT5tX3RvcFBvcyA6IFJlbmRlckJsb2NrUmFyZURhdGE6OnRvcFBvc0RlZmF1bHQodGhp
cyk7IH0KKyAgICBpbnQgbWF4VG9wTmVnTWFyZ2luKCkgY29uc3QgeyByZXR1cm4gbV9yYXJlRGF0
YSA/IG1fcmFyZURhdGEtPm1fdG9wTmVnIDogUmVuZGVyQmxvY2tSYXJlRGF0YTo6dG9wTmVnRGVm
YXVsdCh0aGlzKTsgfQorICAgIGludCBtYXhCb3R0b21Qb3NNYXJnaW4oKSBjb25zdCB7IHJldHVy
biBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+bV9ib3R0b21Qb3MgOiBSZW5kZXJCbG9ja1JhcmVE
YXRhOjpib3R0b21Qb3NEZWZhdWx0KHRoaXMpOyB9CisgICAgaW50IG1heEJvdHRvbU5lZ01hcmdp
bigpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVEYXRhLT5tX2JvdHRvbU5lZyA6
IFJlbmRlckJsb2NrUmFyZURhdGE6OmJvdHRvbU5lZ0RlZmF1bHQodGhpcyk7IH0KKyAgICAKICAg
ICB2b2lkIHNldE1heFRvcE1hcmdpbnMoaW50IHBvcywgaW50IG5lZyk7CiAgICAgdm9pZCBzZXRN
YXhCb3R0b21NYXJnaW5zKGludCBwb3MsIGludCBuZWcpOwotICAgIAorCiAgICAgdm9pZCBpbml0
TWF4TWFyZ2luVmFsdWVzKCkKICAgICB7Ci0gICAgICAgIGlmIChtX21heE1hcmdpbikgewotICAg
ICAgICAgICAgbV9tYXhNYXJnaW4tPm1fdG9wUG9zID0gTWF4TWFyZ2luOjp0b3BQb3NEZWZhdWx0
KHRoaXMpOwotICAgICAgICAgICAgbV9tYXhNYXJnaW4tPm1fdG9wTmVnID0gTWF4TWFyZ2luOjp0
b3BOZWdEZWZhdWx0KHRoaXMpOwotICAgICAgICAgICAgbV9tYXhNYXJnaW4tPm1fYm90dG9tUG9z
ID0gTWF4TWFyZ2luOjpib3R0b21Qb3NEZWZhdWx0KHRoaXMpOwotICAgICAgICAgICAgbV9tYXhN
YXJnaW4tPm1fYm90dG9tTmVnID0gTWF4TWFyZ2luOjpib3R0b21OZWdEZWZhdWx0KHRoaXMpOwor
ICAgICAgICBpZiAobV9yYXJlRGF0YSkgeworICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV90b3BQ
b3MgPSBSZW5kZXJCbG9ja1JhcmVEYXRhOjp0b3BQb3NEZWZhdWx0KHRoaXMpOworICAgICAgICAg
ICAgbV9yYXJlRGF0YS0+bV90b3BOZWcgPSBSZW5kZXJCbG9ja1JhcmVEYXRhOjp0b3BOZWdEZWZh
dWx0KHRoaXMpOworICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9ib3R0b21Qb3MgPSBSZW5kZXJC
bG9ja1JhcmVEYXRhOjpib3R0b21Qb3NEZWZhdWx0KHRoaXMpOworICAgICAgICAgICAgbV9yYXJl
RGF0YS0+bV9ib3R0b21OZWcgPSBSZW5kZXJCbG9ja1JhcmVEYXRhOjpib3R0b21OZWdEZWZhdWx0
KHRoaXMpOworICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9wYWdpbmF0aW9uU3RydXQgPSAwOwog
ICAgICAgICB9CiAgICAgfQogCkBAIC0yOTUsOSArMzA4LDQyIEBAIHByaXZhdGU6CiAgICAgICAg
IGJvb2wgZXZlckhhZExheW91dDsKICAgICB9OwogCisgICAgc3RydWN0IEZsb2F0aW5nT2JqZWN0
IDogTm9uY29weWFibGUgeworICAgICAgICBlbnVtIFR5cGUgeworICAgICAgICAgICAgRmxvYXRM
ZWZ0LAorICAgICAgICAgICAgRmxvYXRSaWdodAorICAgICAgICB9OworCisgICAgICAgIEZsb2F0
aW5nT2JqZWN0KFR5cGUgdHlwZSkKKyAgICAgICAgICAgIDogbV9yZW5kZXJlcigwKQorICAgICAg
ICAgICAgLCBtX3RvcCgwKQorICAgICAgICAgICAgLCBtX2JvdHRvbSgwKQorICAgICAgICAgICAg
LCBtX2xlZnQoMCkKKyAgICAgICAgICAgICwgbV93aWR0aCgwKQorICAgICAgICAgICAgLCBtX3Bh
Z2luYXRpb25TdHJ1dCgwKQorICAgICAgICAgICAgLCBtX3R5cGUodHlwZSkKKyAgICAgICAgICAg
ICwgbV9zaG91bGRQYWludCh0cnVlKQorICAgICAgICAgICAgLCBtX2lzRGVzY2VuZGFudChmYWxz
ZSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgVHlwZSB0eXBlKCkgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8VHlwZT4obV90eXBlKTsgfQorCisgICAgICAgIFJlbmRlckJveCogbV9yZW5k
ZXJlcjsKKyAgICAgICAgaW50IG1fdG9wOworICAgICAgICBpbnQgbV9ib3R0b207CisgICAgICAg
IGludCBtX2xlZnQ7CisgICAgICAgIGludCBtX3dpZHRoOworICAgICAgICBpbnQgbV9wYWdpbmF0
aW9uU3RydXQ7CisgICAgICAgIHVuc2lnbmVkIG1fdHlwZSA6IDE7IC8vIFR5cGUgKGxlZnQgb3Ig
cmlnaHQgYWxpZ25lZCkKKyAgICAgICAgYm9vbCBtX3Nob3VsZFBhaW50IDogMTsKKyAgICAgICAg
Ym9vbCBtX2lzRGVzY2VuZGFudCA6IDE7CisgICAgfTsKKwogICAgIC8vIFRoZSBmb2xsb3dpbmcg
ZnVuY3Rpb25zJyBpbXBsZW1lbnRhdGlvbnMgYXJlIGluIFJlbmRlckJsb2NrTGluZUxheW91dC5j
cHAuCiAgICAgUm9vdElubGluZUJveCogZGV0ZXJtaW5lU3RhcnRQb3NpdGlvbihib29sJiBmaXJz
dExpbmUsIGJvb2wmIGZ1bGxMYXlvdXQsIGJvb2wmIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElubGluZUJpZGlSZXNv
bHZlciYsIFZlY3RvcjxGbG9hdFdpdGhSZWN0PiYgZmxvYXRzLCB1bnNpZ25lZCYgbnVtQ2xlYW5G
bG9hdHMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5saW5l
QmlkaVJlc29sdmVyJiwgVmVjdG9yPEZsb2F0V2l0aFJlY3Q+JiBmbG9hdHMsIHVuc2lnbmVkJiBu
dW1DbGVhbkZsb2F0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wmIHVzZVJlcGFpbnRCb3VuZHMsIGludCYgcmVwYWludFRvcCwgaW50JiByZXBhaW50Qm90
dG9tKTsKICAgICBSb290SW5saW5lQm94KiBkZXRlcm1pbmVFbmRQb3NpdGlvbihSb290SW5saW5l
Qm94KiBzdGFydEJveCwgSW5saW5lSXRlcmF0b3ImIGNsZWFuTGluZVN0YXJ0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZGlTdGF0dXMmIGNsZWFuTGluZUJpZGlT
dGF0dXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50JiB5UG9z
KTsKQEAgLTMwNSw5ICszNTEsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAg
Um9vdElubGluZUJveComIGVuZExpbmUsIGludCYgZW5kWVBvcywgaW50JiByZXBhaW50Qm90dG9t
LCBpbnQmIHJlcGFpbnRUb3ApOwogCiAgICAgdm9pZCBza2lwVHJhaWxpbmdXaGl0ZXNwYWNlKElu
bGluZUl0ZXJhdG9yJiwgYm9vbCBpc0xpbmVFbXB0eSwgYm9vbCBwcmV2aW91c0xpbmVCcm9rZUNs
ZWFubHkpOwotICAgIGludCBza2lwTGVhZGluZ1doaXRlc3BhY2UoSW5saW5lQmlkaVJlc29sdmVy
JiwgYm9vbCBmaXJzdExpbmUsIGJvb2wgaXNMaW5lRW1wdHksIGJvb2wgcHJldmlvdXNMaW5lQnJv
a2VDbGVhbmx5KTsKKyAgICBpbnQgc2tpcExlYWRpbmdXaGl0ZXNwYWNlKElubGluZUJpZGlSZXNv
bHZlciYsIGJvb2wgZmlyc3RMaW5lLCBib29sIGlzTGluZUVtcHR5LCBib29sIHByZXZpb3VzTGlu
ZUJyb2tlQ2xlYW5seSwgRmxvYXRpbmdPYmplY3QqIGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUp
OwogICAgIHZvaWQgZml0QmVsb3dGbG9hdHMoaW50IHdpZHRoVG9GaXQsIGJvb2wgZmlyc3RMaW5l
LCBpbnQmIGF2YWlsYWJsZVdpZHRoKTsKLSAgICBJbmxpbmVJdGVyYXRvciBmaW5kTmV4dExpbmVC
cmVhayhJbmxpbmVCaWRpUmVzb2x2ZXImLCBib29sIGZpcnN0TGluZSwgYm9vbCYgaXNMaW5lRW1w
dHksIGJvb2wmIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSwgYm9vbCYgaHlwaGVuYXRlZCwgRUNs
ZWFyKiA9IDApOworICAgIElubGluZUl0ZXJhdG9yIGZpbmROZXh0TGluZUJyZWFrKElubGluZUJp
ZGlSZXNvbHZlciYsIGJvb2wgZmlyc3RMaW5lLCBib29sJiBpc0xpbmVFbXB0eSwgYm9vbCYgcHJl
dmlvdXNMaW5lQnJva2VDbGVhbmx5LCBib29sJiBoeXBoZW5hdGVkLCBFQ2xlYXIqLCBGbG9hdGlu
Z09iamVjdCogbGFzdEZsb2F0RnJvbVByZXZpb3VzTGluZSk7CiAgICAgUm9vdElubGluZUJveCog
Y29uc3RydWN0TGluZSh1bnNpZ25lZCBydW5Db3VudCwgQmlkaVJ1biogZmlyc3RSdW4sIEJpZGlS
dW4qIGxhc3RSdW4sIGJvb2wgZmlyc3RMaW5lLCBib29sIGxhc3RMaW5lLCBSZW5kZXJPYmplY3Qq
IGVuZE9iamVjdCk7CiAgICAgSW5saW5lRmxvd0JveCogY3JlYXRlTGluZUJveGVzKFJlbmRlck9i
amVjdCosIGJvb2wgZmlyc3RMaW5lKTsKICAgICB2b2lkIGNvbXB1dGVIb3Jpem9udGFsUG9zaXRp
b25zRm9yTGluZShSb290SW5saW5lQm94KiwgYm9vbCBmaXJzdExpbmUsIEJpZGlSdW4qIGZpcnN0
UnVuLCBCaWRpUnVuKiB0cmFpbGluZ1NwYWNlUnVuLCBib29sIHJlYWNoZWRFbmQsIEdseXBoT3Zl
cmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFwJik7CkBAIC0zMjksMTIgKzM3NSwxOCBAQCBwcml2YXRl
OgogICAgIHZvaWQgcGFpbnRTZWxlY3Rpb24oUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOwog
ICAgIHZvaWQgcGFpbnRDYXJldChQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSwgQ2FyZXRUeXBl
KTsKIAotICAgIHZvaWQgaW5zZXJ0RmxvYXRpbmdPYmplY3QoUmVuZGVyQm94Kik7CisgICAgRmxv
YXRpbmdPYmplY3QqIGluc2VydEZsb2F0aW5nT2JqZWN0KFJlbmRlckJveCopOwogICAgIHZvaWQg
cmVtb3ZlRmxvYXRpbmdPYmplY3QoUmVuZGVyQm94Kik7Ci0KKyAgICB2b2lkIHJlbW92ZUZsb2F0
aW5nT2JqZWN0cyhGbG9hdGluZ09iamVjdCosIGludCB5KTsKKyAgICAKICAgICAvLyBDYWxsZWQg
ZnJvbSBsaW5lV2lkdGgsIHRvIHBvc2l0aW9uIHRoZSBmbG9hdHMgYWRkZWQgaW4gdGhlIGxhc3Qg
bGluZS4KLSAgICAvLyBSZXR1cm5zIHR1cmUgaWYgYW5kIG9ubHkgaWYgaXQgaGFzIHBvc2l0aW9u
ZWQgYW55IGZsb2F0cy4KKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgYW5kIG9ubHkgaWYgaXQgaGFz
IHBvc2l0aW9uZWQgYW55IGZsb2F0cy4KICAgICBib29sIHBvc2l0aW9uTmV3RmxvYXRzKCk7Cisg
ICAgCisgICAgLy8gUG9zaXRpb25zIG5ldyBmbG9hdHMgYW5kIGFsc28gYWRqdXN0IGFsbCBmbG9h
dHMgZW5jb3VudGVyZWQgb24gdGhlIGxpbmUgaWYgYW55IG9mIHRoZW0KKyAgICAvLyBoYXZlIHRv
IG1vdmUgdG8gdGhlIG5leHQgcGFnZS9jb2x1bW4uCisgICAgYm9vbCBwb3NpdGlvbk5ld0Zsb2F0
T25MaW5lKEZsb2F0aW5nT2JqZWN0KiBuZXdGbG9hdCwgRmxvYXRpbmdPYmplY3QqIGxhc3RGbG9h
dEZyb21QcmV2aW91c0xpbmUpOworCiAgICAgdm9pZCBjbGVhckZsb2F0cygpOwogICAgIGludCBn
ZXRDbGVhckRlbHRhKFJlbmRlckJveCogY2hpbGQsIGludCB5UG9zKTsKIApAQCAtNDE2LDggKzQ2
OCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBvZmZzZXRGb3JDb250ZW50cyhpbnQmIHR4LCBpbnQm
IHR5KSBjb25zdDsKIAogICAgIHZvaWQgY2FsY0NvbHVtbldpZHRoKCk7Ci0gICAgaW50IGxheW91
dENvbHVtbnMoaW50IGVuZE9mQ29udGVudCA9IC0xLCBpbnQgcmVxdWVzdGVkQ29sdW1uSGVpZ2h0
ID0gLTEpOwotICAgIGludCB2aXNpYmxlVG9wT2ZIaWdoZXN0RmxvYXRFeHRlbmRpbmdCZWxvdyhp
bnQgYm90dG9tLCBpbnQgbWF4SGVpZ2h0KSBjb25zdDsKKyAgICBib29sIGxheW91dENvbHVtbnMo
Ym9vbCBoYXNTcGVjaWZpZWRQYWdlSGVpZ2h0LCBpbnQgcGFnZUhlaWdodCwgTGF5b3V0U3RhdGVN
YWludGFpbmVyJik7CiAgICAgdm9pZCBtYWtlQ2hpbGRyZW5Bbm9ueW1vdXNDb2x1bW5CbG9ja3Mo
UmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCwgUmVuZGVyQmxvY2sqIG5ld0Jsb2NrQm94LCBSZW5k
ZXJPYmplY3QqIG5ld0NoaWxkKTsKIAogICAgIGJvb2wgZXhwYW5kc1RvRW5jbG9zZU92ZXJoYW5n
aW5nRmxvYXRzKCkgY29uc3Q7CkBAIC00MzMsMzYgKzQ4NCw2IEBAIHByaXZhdGU6CiAgICAgUmVu
ZGVyQmxvY2sqIGNvbnRpbnVhdGlvbkJlZm9yZShSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKTsK
ICAgICBSZW5kZXJCbG9jayogY29udGFpbmluZ0NvbHVtbnNCbG9jayhib29sIGFsbG93QW5vbnlt
b3VzQ29sdW1uQmxvY2sgPSB0cnVlKTsKICAgICBSZW5kZXJCbG9jayogY29sdW1uc0Jsb2NrRm9y
U3Bhbm5pbmdFbGVtZW50KFJlbmRlck9iamVjdCogbmV3Q2hpbGQpOwotICAgIAotICAgIHN0cnVj
dCBGbG9hdGluZ09iamVjdCA6IE5vbmNvcHlhYmxlIHsKLSAgICAgICAgZW51bSBUeXBlIHsKLSAg
ICAgICAgICAgIEZsb2F0TGVmdCwKLSAgICAgICAgICAgIEZsb2F0UmlnaHQKLSAgICAgICAgfTsK
LQotICAgICAgICBGbG9hdGluZ09iamVjdChUeXBlIHR5cGUpCi0gICAgICAgICAgICA6IG1fcmVu
ZGVyZXIoMCkKLSAgICAgICAgICAgICwgbV90b3AoMCkKLSAgICAgICAgICAgICwgbV9ib3R0b20o
MCkKLSAgICAgICAgICAgICwgbV9sZWZ0KDApCi0gICAgICAgICAgICAsIG1fd2lkdGgoMCkKLSAg
ICAgICAgICAgICwgbV90eXBlKHR5cGUpCi0gICAgICAgICAgICAsIG1fc2hvdWxkUGFpbnQodHJ1
ZSkKLSAgICAgICAgICAgICwgbV9pc0Rlc2NlbmRhbnQoZmFsc2UpCi0gICAgICAgIHsKLSAgICAg
ICAgfQotCi0gICAgICAgIFR5cGUgdHlwZSgpIHsgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGU+KG1f
dHlwZSk7IH0KLQotICAgICAgICBSZW5kZXJCb3gqIG1fcmVuZGVyZXI7Ci0gICAgICAgIGludCBt
X3RvcDsKLSAgICAgICAgaW50IG1fYm90dG9tOwotICAgICAgICBpbnQgbV9sZWZ0OwotICAgICAg
ICBpbnQgbV93aWR0aDsKLSAgICAgICAgdW5zaWduZWQgbV90eXBlIDogMTsgLy8gVHlwZSAobGVm
dCBvciByaWdodCBhbGlnbmVkKQotICAgICAgICBib29sIG1fc2hvdWxkUGFpbnQgOiAxOwotICAg
ICAgICBib29sIG1faXNEZXNjZW5kYW50IDogMTsKLSAgICB9OwogCiAgICAgY2xhc3MgTWFyZ2lu
SW5mbyB7CiAgICAgICAgIC8vIENvbGxhcHNpbmcgZmxhZ3MgZm9yIHdoZXRoZXIgd2UgY2FuIGNv
bGxhcHNlIG91ciBtYXJnaW5zIHdpdGggb3VyIGNoaWxkcmVuJ3MgbWFyZ2lucy4KQEAgLTUzOSw2
ICs1NjAsMTMgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNldENvbGxhcHNlZEJvdHRvbU1hcmdpbihj
b25zdCBNYXJnaW5JbmZvJik7CiAgICAgLy8gRW5kIGhlbHBlciBmdW5jdGlvbnMgYW5kIHN0cnVj
dHMgdXNlZCBieSBsYXlvdXRCbG9ja0NoaWxkcmVuLgogCisgICAgLy8gUGFnaW5hdGlvbiByb3V0
aW5lcy4KKyAgICBpbnQgbmV4dFBhZ2VUb3AoaW50IHlQb3MpIGNvbnN0OyAvLyBSZXR1cm5zIHRo
ZSB0b3Agb2YgdGhlIG5leHQgcGFnZSBmb2xsb3dpbmcgeVBvcy4KKyAgICBpbnQgYXBwbHlCZWZv
cmVCcmVhayhSZW5kZXJCb3gqIGNoaWxkLCBpbnQgeVBvcyk7IC8vIElmIHRoZSBjaGlsZCBoYXMg
YSBiZWZvcmUgYnJlYWssIHRoZW4gcmV0dXJuIGEgbmV3IHlQb3MgdGhhdCBzaGlmdHMgdG8gdGhl
IHRvcCBvZiB0aGUgbmV4dCBwYWdlL2NvbHVtbi4KKyAgICBpbnQgYXBwbHlBZnRlckJyZWFrKFJl
bmRlckJveCogY2hpbGQsIGludCB5UG9zLCBNYXJnaW5JbmZvJiBtYXJnaW5JbmZvKTsgLy8gSWYg
dGhlIGNoaWxkIGhhcyBhbiBhZnRlciBicmVhaywgdGhlbiByZXR1cm4gYSBuZXcgeVBvcyB0aGF0
IHNoaWZ0cyB0byB0aGUgdG9wIG9mIHRoZSBuZXh0IHBhZ2UvY29sdW1uLgorICAgIGludCBhZGp1
c3RGb3JVbnNwbGl0dGFibGVDaGlsZChSZW5kZXJCb3gqIGNoaWxkLCBpbnQgeVBvcywgYm9vbCBp
bmNsdWRlTWFyZ2lucyA9IGZhbHNlKTsgLy8gSWYgdGhlIGNoaWxkIGlzIHVuc3BsaXR0YWJsZSBh
bmQgY2FuJ3QgZml0IG9uIHRoZSBjdXJyZW50IHBhZ2UsIHJldHVybiB0aGUgdG9wIG9mIHRoZSBu
ZXh0IHBhZ2UvY29sdW1uLgorICAgIHZvaWQgYWRqdXN0TGluZVBvc2l0aW9uRm9yUGFnaW5hdGlv
bihSb290SW5saW5lQm94KiwgaW50JiBkZWx0YVkpOyAvLyBDb21wdXRlcyBhIGRlbHRhWSB2YWx1
ZSB0aGF0IHB1dCBhIGxpbmUgYXQgdGhlIHRvcCBvZiB0aGUgbmV4dCBwYWdlIGlmIGl0IGRvZXNu
J3QgZml0IG9uIHRoZSBjdXJyZW50IHBhZ2UuCisKICAgICB0eXBlZGVmIFBvc2l0aW9uZWRPYmpl
Y3RzTGlzdEhhc2hTZXQ6OmNvbnN0X2l0ZXJhdG9yIEl0ZXJhdG9yOwogICAgIERlcHJlY2F0ZWRQ
dHJMaXN0PEZsb2F0aW5nT2JqZWN0PiogbV9mbG9hdGluZ09iamVjdHM7CiAgICAgCkBAIC01NTEs
MTIgKzU3OSwxNCBAQCBwcml2YXRlOgogICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBtX2NvbnRp
bnVhdGlvbjsKIAogICAgIC8vIEFsbG9jYXRlZCBvbmx5IHdoZW4gc29tZSBvZiB0aGVzZSBmaWVs
ZHMgaGF2ZSBub24tZGVmYXVsdCB2YWx1ZXMKLSAgICBzdHJ1Y3QgTWF4TWFyZ2luIDogTm9uY29w
eWFibGUgewotICAgICAgICBNYXhNYXJnaW4oY29uc3QgUmVuZGVyQmxvY2sqIG8pIAorICAgIHN0
cnVjdCBSZW5kZXJCbG9ja1JhcmVEYXRhIDogTm9uY29weWFibGUgeworICAgICAgICBSZW5kZXJC
bG9ja1JhcmVEYXRhKGNvbnN0IFJlbmRlckJsb2NrKiBvKSAKICAgICAgICAgICAgIDogbV90b3BQ
b3ModG9wUG9zRGVmYXVsdChvKSkKICAgICAgICAgICAgICwgbV90b3BOZWcodG9wTmVnRGVmYXVs
dChvKSkKICAgICAgICAgICAgICwgbV9ib3R0b21Qb3MoYm90dG9tUG9zRGVmYXVsdChvKSkKICAg
ICAgICAgICAgICwgbV9ib3R0b21OZWcoYm90dG9tTmVnRGVmYXVsdChvKSkKKyAgICAgICAgICAg
ICwgbV9wYWdpbmF0aW9uU3RydXQoMCkKKyAgICAgICAgICAgICwgbV9wYWdlWSgwKQogICAgICAg
ICB7IAogICAgICAgICB9CiAKQEAgLTU2NCwxNCArNTk0LDE2IEBAIHByaXZhdGU6CiAgICAgICAg
IHN0YXRpYyBpbnQgdG9wTmVnRGVmYXVsdChjb25zdCBSZW5kZXJCbG9jayogbykgeyByZXR1cm4g
by0+bWFyZ2luVG9wKCkgPCAwID8gLW8tPm1hcmdpblRvcCgpIDogMDsgfQogICAgICAgICBzdGF0
aWMgaW50IGJvdHRvbVBvc0RlZmF1bHQoY29uc3QgUmVuZGVyQmxvY2sqIG8pIHsgcmV0dXJuIG8t
Pm1hcmdpbkJvdHRvbSgpID4gMCA/IG8tPm1hcmdpbkJvdHRvbSgpIDogMDsgfQogICAgICAgICBz
dGF0aWMgaW50IGJvdHRvbU5lZ0RlZmF1bHQoY29uc3QgUmVuZGVyQmxvY2sqIG8pIHsgcmV0dXJu
IG8tPm1hcmdpbkJvdHRvbSgpIDwgMCA/IC1vLT5tYXJnaW5Cb3R0b20oKSA6IDA7IH0KLQorICAg
ICAgICAKICAgICAgICAgaW50IG1fdG9wUG9zOwogICAgICAgICBpbnQgbV90b3BOZWc7CiAgICAg
ICAgIGludCBtX2JvdHRvbVBvczsKICAgICAgICAgaW50IG1fYm90dG9tTmVnOworICAgICAgICBp
bnQgbV9wYWdpbmF0aW9uU3RydXQ7CisgICAgICAgIGludCBtX3BhZ2VZOwogICAgICB9OwogCi0g
ICAgTWF4TWFyZ2luKiBtX21heE1hcmdpbjsKKyAgICBSZW5kZXJCbG9ja1JhcmVEYXRhKiBtX3Jh
cmVEYXRhOwogCiAgICAgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0IG1fY2hpbGRyZW47CiAgICAgUmVu
ZGVyTGluZUJveExpc3QgbV9saW5lQm94ZXM7ICAgLy8gQWxsIG9mIHRoZSByb290IGxpbmUgYm94
ZXMgY3JlYXRlZCBmb3IgdGhpcyBibG9jayBmbG93LiAgRm9yIGV4YW1wbGUsIDxkaXY+SGVsbG88
YnI+d29ybGQuPC9kaXY+IHdpbGwgaGF2ZSB0d28gdG90YWwgbGluZXMgZm9yIHRoZSA8ZGl2Pi4K
SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAkocmV2
aXNpb24gNjc1NjcpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiUmVuZGVyTGF5
ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0TWFya2VyLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmll
dy5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiVHJhaWxpbmdGbG9hdHNSb290
SW5saW5lQm94LmgiCiAjaW5jbHVkZSAiYnJlYWtfbGluZXMuaCIKICNpbmNsdWRlIDx3dGYvQWx3
YXlzSW5saW5lLmg+CkBAIC01NzQsMTIgKzU3NSwxMSBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlv
dXRJbmxpbmVDaGlsZHJlbihiCiAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoby0+
aXNQb3NpdGlvbmVkKCkpCiAgICAgICAgICAgICAgICAgICAgIG8tPmNvbnRhaW5pbmdCbG9jaygp
LT5pbnNlcnRQb3NpdGlvbmVkT2JqZWN0KGJveCk7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChvLT5pc0Zsb2F0aW5nKCkpCi0gICAgICAgICAgICAgICAg
ICAgICAgICBmbG9hdHMuYXBwZW5kKEZsb2F0V2l0aFJlY3QoYm94KSk7Ci0gICAgICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKGZ1bGxMYXlvdXQgfHwgby0+bmVlZHNMYXlvdXQoKSkgLy8gUmVwbGFj
ZWQgZWxlbWVudHMKLSAgICAgICAgICAgICAgICAgICAgICAgIHRvUmVuZGVyQm94KG8pLT5kaXJ0
eUxpbmVCb3hlcyhmdWxsTGF5b3V0KTsKLQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG8tPmlz
RmxvYXRpbmcoKSkKKyAgICAgICAgICAgICAgICAgICAgZmxvYXRzLmFwcGVuZChGbG9hdFdpdGhS
ZWN0KGJveCkpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZ1bGxMYXlvdXQgfHwgby0+bmVl
ZHNMYXlvdXQoKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBSZXBsYWNlZCBlbGVtZW50cwor
ICAgICAgICAgICAgICAgICAgICB0b1JlbmRlckJveChvKS0+ZGlydHlMaW5lQm94ZXMoZnVsbExh
eW91dCk7CiAgICAgICAgICAgICAgICAgICAgIG8tPmxheW91dElmTmVlZGVkKCk7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIGlmIChvLT5pc1RleHQoKSB8fCAoby0+aXNS
ZW5kZXJJbmxpbmUoKSAmJiAhZW5kT2ZJbmxpbmUpKSB7CkBAIC01OTcsNyArNTk3LDggQEAgdm9p
ZCBSZW5kZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4oYgogICAgICAgICB1bnNpZ25lZCBm
bG9hdEluZGV4OwogICAgICAgICBib29sIGZpcnN0TGluZSA9IHRydWU7CiAgICAgICAgIGJvb2wg
cHJldmlvdXNMaW5lQnJva2VDbGVhbmx5ID0gdHJ1ZTsKLSAgICAgICAgUm9vdElubGluZUJveCog
c3RhcnRMaW5lID0gZGV0ZXJtaW5lU3RhcnRQb3NpdGlvbihmaXJzdExpbmUsIGZ1bGxMYXlvdXQs
IHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSwgcmVzb2x2ZXIsIGZsb2F0cywgZmxvYXRJbmRleCk7
CisgICAgICAgIFJvb3RJbmxpbmVCb3gqIHN0YXJ0TGluZSA9IGRldGVybWluZVN0YXJ0UG9zaXRp
b24oZmlyc3RMaW5lLCBmdWxsTGF5b3V0LCBwcmV2aW91c0xpbmVCcm9rZUNsZWFubHksIHJlc29s
dmVyLCBmbG9hdHMsIGZsb2F0SW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlUmVwYWludEJvdW5kcywgcmVwYWludFRvcCwg
cmVwYWludEJvdHRvbSk7CiAKICAgICAgICAgaWYgKGZ1bGxMYXlvdXQgJiYgaGFzSW5saW5lQ2hp
bGQgJiYgIXNlbGZOZWVkc0xheW91dCgpKSB7CiAgICAgICAgICAgICBzZXROZWVkc0xheW91dCh0
cnVlLCBmYWxzZSk7ICAvLyBNYXJrIG91cnNlbHZlcyBhcyBuZWVkaW5nIGEgZnVsbCBsYXlvdXQu
IFRoaXMgd2F5IHdlJ2xsIHJlcGFpbnQgbGlrZQpAQCAtNjI1LDkgKzYyNiwxMSBAQCB2b2lkIFJl
bmRlckJsb2NrOjpsYXlvdXRJbmxpbmVDaGlsZHJlbihiCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAwIDogZGV0ZXJtaW5lRW5kUG9zaXRpb24oc3RhcnRMaW5lLCBjbGVhbkxpbmVT
dGFydCwgY2xlYW5MaW5lQmlkaVN0YXR1cywgZW5kTGluZVlQb3MpOwogCiAgICAgICAgIGlmIChz
dGFydExpbmUpIHsKLSAgICAgICAgICAgIHVzZVJlcGFpbnRCb3VuZHMgPSB0cnVlOwotICAgICAg
ICAgICAgcmVwYWludFRvcCA9IGhlaWdodCgpOwotICAgICAgICAgICAgcmVwYWludEJvdHRvbSA9
IGhlaWdodCgpOworICAgICAgICAgICAgaWYgKCF1c2VSZXBhaW50Qm91bmRzKSB7CisgICAgICAg
ICAgICAgICAgdXNlUmVwYWludEJvdW5kcyA9IHRydWU7CisgICAgICAgICAgICAgICAgcmVwYWlu
dFRvcCA9IGhlaWdodCgpOworICAgICAgICAgICAgICAgIHJlcGFpbnRCb3R0b20gPSBoZWlnaHQo
KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIFJlbmRlckFyZW5hKiBhcmVuYSA9IHJlbmRl
ckFyZW5hKCk7CiAgICAgICAgICAgICBSb290SW5saW5lQm94KiBib3ggPSBzdGFydExpbmU7CiAg
ICAgICAgICAgICB3aGlsZSAoYm94KSB7CkBAIC02NjIsNiArNjY1LDcgQEAgdm9pZCBSZW5kZXJC
bG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4oYgogICAgICAgICBib29sIGNoZWNrRm9yRmxvYXRz
RnJvbUxhc3RMaW5lID0gZmFsc2U7CiAKICAgICAgICAgYm9vbCBpc0xpbmVFbXB0eSA9IHRydWU7
CisgICAgICAgIGJvb2wgcGFnaW5hdGVkID0gdmlldygpLT5sYXlvdXRTdGF0ZSgpLT5wYWdpbmF0
ZWQoKTsKIAogICAgICAgICB3aGlsZSAoIWVuZC5hdEVuZCgpKSB7CiAgICAgICAgICAgICAvLyBG
SVhNRTogSXMgdGhpcyBjaGVjayBuZWNlc3NhcnkgYmVmb3JlIHRoZSBmaXJzdCBpdGVyYXRpb24g
b3IgY2FuIGl0IGJlIG1vdmVkIHRvIHRoZSBlbmQ/CkBAIC02NzQsNyArNjc4LDEwIEBAIHZvaWQg
UmVuZGVyQmxvY2s6OmxheW91dElubGluZUNoaWxkcmVuKGIKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgRUNsZWFyIGNsZWFyID0gQ05PTkU7CiAgICAgICAgICAgICBib29sIGh5cGhlbmF0ZWQ7
Ci0gICAgICAgICAgICBlbmQgPSBmaW5kTmV4dExpbmVCcmVhayhyZXNvbHZlciwgZmlyc3RMaW5l
LCBpc0xpbmVFbXB0eSwgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5LCBoeXBoZW5hdGVkLCAmY2xl
YXIpOworICAgICAgICAgICAgCisgICAgICAgICAgICBJbmxpbmVJdGVyYXRvciBvbGRFbmQgPSBl
bmQ7CisgICAgICAgICAgICBGbG9hdGluZ09iamVjdCogbGFzdEZsb2F0RnJvbVByZXZpb3VzTGlu
ZSA9IG1fZmxvYXRpbmdPYmplY3RzID8gbV9mbG9hdGluZ09iamVjdHMtPmxhc3QoKSA6IDA7Cisg
ICAgICAgICAgICBlbmQgPSBmaW5kTmV4dExpbmVCcmVhayhyZXNvbHZlciwgZmlyc3RMaW5lLCBp
c0xpbmVFbXB0eSwgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5LCBoeXBoZW5hdGVkLCAmY2xlYXIs
IGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUpOwogICAgICAgICAgICAgaWYgKHJlc29sdmVyLnBv
c2l0aW9uKCkuYXRFbmQoKSkgewogICAgICAgICAgICAgICAgIHJlc29sdmVyLmRlbGV0ZVJ1bnMo
KTsKICAgICAgICAgICAgICAgICBjaGVja0ZvckZsb2F0c0Zyb21MYXN0TGluZSA9IHRydWU7CkBA
IC03MzksNiArNzQ2LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4o
YgogICAgICAgICAgICAgICAgIC8vIGlubGluZSBmbG93IGJveGVzLgogCiAgICAgICAgICAgICAg
ICAgUm9vdElubGluZUJveCogbGluZUJveCA9IDA7CisgICAgICAgICAgICAgICAgaW50IG9sZEhl
aWdodCA9IGhlaWdodCgpOwogICAgICAgICAgICAgICAgIGlmIChyZXNvbHZlci5ydW5Db3VudCgp
KSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChoeXBoZW5hdGVkKQogICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzb2x2ZXIubG9naWNhbGx5TGFzdFJ1bigpLT5tX2hhc0h5cGhlbiA9IHRydWU7
CkBAIC03ODksNiArNzk3LDI5IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dElubGluZUNoaWxk
cmVuKGIKICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGFpbnRUb3AgPSBtaW4ocmVwYWludFRv
cCwgbGluZUJveC0+dG9wVmlzaWJsZU92ZXJmbG93KCkpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgcmVwYWludEJvdHRvbSA9IG1heChyZXBhaW50Qm90dG9tLCBsaW5lQm94LT5ib3R0b21WaXNp
YmxlT3ZlcmZsb3coKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChwYWdpbmF0ZWQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBhZGp1c3RtZW50ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFk
anVzdExpbmVQb3NpdGlvbkZvclBhZ2luYXRpb24obGluZUJveCwgYWRqdXN0bWVudCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoYWRqdXN0bWVudCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBvbGRMaW5lV2lkdGggPSBsaW5lV2lkdGgob2xkSGVpZ2h0LCBmaXJzdExp
bmUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVCb3gtPmFkanVzdFBvc2l0aW9u
KDAsIGFkanVzdG1lbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1c2VSZXBh
aW50Qm91bmRzKSAvLyBUaGlzIGNhbiBvbmx5IGJlIGEgcG9zaXRpdmUgYWRqdXN0bWVudCwgc28g
bm8gbmVlZCB0byB1cGRhdGUgcmVwYWludFRvcC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmVwYWludEJvdHRvbSA9IG1heChyZXBhaW50Qm90dG9tLCBsaW5lQm94LT5ib3R0b21W
aXNpYmxlT3ZlcmZsb3coKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaW5lV2lkdGgob2xkSGVpZ2h0ICsgYWRqdXN0
bWVudCwgZmlyc3RMaW5lKSAhPSBvbGRMaW5lV2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBkZWxldGUgdGhpcyBsaW5lLCByZW1vdmUgYWxsIGZs
b2F0cyB0aGF0IGdvdCBhZGRlZCwgYW5kIGxldCBsaW5lIGxheW91dCByZS1ydW4uCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVCb3gtPmRlbGV0ZUxpbmUocmVuZGVyQXJlbmEo
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUZsb2F0aW5nT2JqZWN0
cyhsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lLCBvbGRIZWlnaHQpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzZXRIZWlnaHQob2xkSGVpZ2h0ICsgYWRqdXN0bWVudCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVyLnNldFBvc2l0aW9uKG9sZEVuZCk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZCA9IG9sZEVuZDsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SGVpZ2h0KGxpbmVCb3gt
PmJsb2NrSGVpZ2h0KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgZmlyc3RMaW5l
ID0gZmFsc2U7CkBAIC04MjMsNiArODU0LDEwIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dElu
bGluZUNoaWxkcmVuKGIKICAgICAgICAgICAgICAgICBpbnQgZGVsdGEgPSBoZWlnaHQoKSAtIGVu
ZExpbmVZUG9zOwogICAgICAgICAgICAgICAgIGZvciAoUm9vdElubGluZUJveCogbGluZSA9IGVu
ZExpbmU7IGxpbmU7IGxpbmUgPSBsaW5lLT5uZXh0Um9vdEJveCgpKSB7CiAgICAgICAgICAgICAg
ICAgICAgIGxpbmUtPmF0dGFjaExpbmUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBhZ2lu
YXRlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGEgLT0gbGluZS0+cGFnaW5hdGlv
blN0cnV0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBhZGp1c3RMaW5lUG9zaXRpb25Gb3JQ
YWdpbmF0aW9uKGxpbmUsIGRlbHRhKTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICBpZiAoZGVsdGEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGFpbnRU
b3AgPSBtaW4ocmVwYWludFRvcCwgbGluZS0+dG9wVmlzaWJsZU92ZXJmbG93KCkgKyBtaW4oZGVs
dGEsIDApKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGFpbnRCb3R0b20gPSBtYXgocmVw
YWludEJvdHRvbSwgbGluZS0+Ym90dG9tVmlzaWJsZU92ZXJmbG93KCkgKyBtYXgoZGVsdGEsIDAp
KTsKQEAgLTkwMywyMCArOTM4LDQ0IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dElubGluZUNo
aWxkcmVuKGIKIH0KIAogUm9vdElubGluZUJveCogUmVuZGVyQmxvY2s6OmRldGVybWluZVN0YXJ0
UG9zaXRpb24oYm9vbCYgZmlyc3RMaW5lLCBib29sJiBmdWxsTGF5b3V0LCBib29sJiBwcmV2aW91
c0xpbmVCcm9rZUNsZWFubHksIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgSW5saW5lQmlkaVJlc29sdmVyJiByZXNvbHZlciwgVmVjdG9yPEZsb2F0
V2l0aFJlY3Q+JiBmbG9hdHMsIHVuc2lnbmVkJiBudW1DbGVhbkZsb2F0cykKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElubGluZUJpZGlSZXNvbHZl
ciYgcmVzb2x2ZXIsIFZlY3RvcjxGbG9hdFdpdGhSZWN0PiYgZmxvYXRzLCB1bnNpZ25lZCYgbnVt
Q2xlYW5GbG9hdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBib29sJiB1c2VSZXBhaW50Qm91bmRzLCBpbnQmIHJlcGFpbnRUb3AsIGludCYgcmVw
YWludEJvdHRvbSkKIHsKICAgICBSb290SW5saW5lQm94KiBjdXJyID0gMDsKICAgICBSb290SW5s
aW5lQm94KiBsYXN0ID0gMDsKIAogICAgIGJvb2wgZGlydGllZEJ5RmxvYXQgPSBmYWxzZTsKICAg
ICBpZiAoIWZ1bGxMYXlvdXQpIHsKKyAgICAgICAgLy8gUGFnaW5hdGUgYWxsIG9mIHRoZSBjbGVh
biBsaW5lcy4KKyAgICAgICAgYm9vbCBwYWdpbmF0ZWQgPSB2aWV3KCktPmxheW91dFN0YXRlKCkt
PnBhZ2luYXRlZCgpOworICAgICAgICBpbnQgcGFnaW5hdGlvbkRlbHRhID0gMDsKICAgICAgICAg
c2l6ZV90IGZsb2F0SW5kZXggPSAwOwogICAgICAgICBmb3IgKGN1cnIgPSBmaXJzdFJvb3RCb3go
KTsgY3VyciAmJiAhY3Vyci0+aXNEaXJ0eSgpOyBjdXJyID0gY3Vyci0+bmV4dFJvb3RCb3goKSkg
eworICAgICAgICAgICAgaWYgKHBhZ2luYXRlZCkgeworICAgICAgICAgICAgICAgIHBhZ2luYXRp
b25EZWx0YSAtPSBjdXJyLT5wYWdpbmF0aW9uU3RydXQoKTsKKyAgICAgICAgICAgICAgICBhZGp1
c3RMaW5lUG9zaXRpb25Gb3JQYWdpbmF0aW9uKGN1cnIsIHBhZ2luYXRpb25EZWx0YSk7CisgICAg
ICAgICAgICAgICAgaWYgKHBhZ2luYXRpb25EZWx0YSkgeworICAgICAgICAgICAgICAgICAgICBp
ZiAoY29udGFpbnNGbG9hdHMoKSB8fCAhZmxvYXRzLmlzRW1wdHkoKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gRklYTUU6IERvIGJldHRlciBldmVudHVhbGx5LiAgRm9yIG5vdyBpZiB3
ZSBldmVyIHNoaWZ0IGJlY2F1c2Ugb2YgcGFnaW5hdGlvbiBhbmQgZmxvYXRzIGFyZSBwcmVzZW50
IGp1c3QgZ28gdG8gYSBmdWxsIGxheW91dC4KKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxM
YXlvdXQgPSB0cnVlOyAKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBp
ZiAoIXVzZVJlcGFpbnRCb3VuZHMpCisgICAgICAgICAgICAgICAgICAgICAgICB1c2VSZXBhaW50
Qm91bmRzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
ICAgICByZXBhaW50VG9wID0gbWluKHJlcGFpbnRUb3AsIGN1cnItPnRvcFZpc2libGVPdmVyZmxv
dygpICsgbWluKHBhZ2luYXRpb25EZWx0YSwgMCkpOworICAgICAgICAgICAgICAgICAgICByZXBh
aW50Qm90dG9tID0gbWF4KHJlcGFpbnRCb3R0b20sIGN1cnItPmJvdHRvbVZpc2libGVPdmVyZmxv
dygpICsgbWF4KHBhZ2luYXRpb25EZWx0YSwgMCkpOworICAgICAgICAgICAgICAgICAgICBjdXJy
LT5hZGp1c3RQb3NpdGlvbigwLCBwYWdpbmF0aW9uRGVsdGEpOworICAgICAgICAgICAgICAgIH0g
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgICAg
IGlmIChWZWN0b3I8UmVuZGVyQm94Kj4qIGNsZWFuTGluZUZsb2F0cyA9IGN1cnItPmZsb2F0c1B0
cigpKSB7CiAgICAgICAgICAgICAgICAgVmVjdG9yPFJlbmRlckJveCo+OjppdGVyYXRvciBlbmQg
PSBjbGVhbkxpbmVGbG9hdHMtPmVuZCgpOwogICAgICAgICAgICAgICAgIGZvciAoVmVjdG9yPFJl
bmRlckJveCo+OjppdGVyYXRvciBvID0gY2xlYW5MaW5lRmxvYXRzLT5iZWdpbigpOyBvICE9IGVu
ZDsgKytvKSB7CiAgICAgICAgICAgICAgICAgICAgIFJlbmRlckJveCogZiA9ICpvOwotICAgICAg
ICAgICAgICAgICAgICBJbnRTaXplIG5ld1NpemUoZi0+d2lkdGgoKSArIGYtPm1hcmdpbkxlZnQo
KSArZi0+bWFyZ2luUmlnaHQoKSwgZi0+aGVpZ2h0KCkgKyBmLT5tYXJnaW5Ub3AoKSArIGYtPm1h
cmdpbkJvdHRvbSgpKTsKKyAgICAgICAgICAgICAgICAgICAgZi0+bGF5b3V0SWZOZWVkZWQoKTsK
KyAgICAgICAgICAgICAgICAgICAgSW50U2l6ZSBuZXdTaXplKGYtPndpZHRoKCkgKyBmLT5tYXJn
aW5MZWZ0KCkgKyBmLT5tYXJnaW5SaWdodCgpLCBmLT5oZWlnaHQoKSArIGYtPm1hcmdpblRvcCgp
ICsgZi0+bWFyZ2luQm90dG9tKCkpOwogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoZmxvYXRJ
bmRleCA8IGZsb2F0cy5zaXplKCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoZmxvYXRzW2Zs
b2F0SW5kZXhdLm9iamVjdCAhPSBmKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBIG5l
dyBmbG9hdCBoYXMgYmVlbiBpbnNlcnRlZCBiZWZvcmUgdGhpcyBsaW5lIG9yIGJlZm9yZSBpdHMg
bGFzdCBrbm93biBmbG9hdC4KQEAgLTEyMzksMTQgKzEyOTgsMTQgQEAgdm9pZCBSZW5kZXJCbG9j
azo6c2tpcFRyYWlsaW5nV2hpdGVzcGFjZQogICAgIH0KIH0KIAotaW50IFJlbmRlckJsb2NrOjpz
a2lwTGVhZGluZ1doaXRlc3BhY2UoSW5saW5lQmlkaVJlc29sdmVyJiByZXNvbHZlciwgYm9vbCBm
aXJzdExpbmUsIGJvb2wgaXNMaW5lRW1wdHksIGJvb2wgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5
KQoraW50IFJlbmRlckJsb2NrOjpza2lwTGVhZGluZ1doaXRlc3BhY2UoSW5saW5lQmlkaVJlc29s
dmVyJiByZXNvbHZlciwgYm9vbCBmaXJzdExpbmUsIGJvb2wgaXNMaW5lRW1wdHksIGJvb2wgcHJl
dmlvdXNMaW5lQnJva2VDbGVhbmx5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRmxvYXRpbmdPYmplY3QqIGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUpCiB7CiAgICAg
aW50IGF2YWlsYWJsZVdpZHRoID0gbGluZVdpZHRoKGhlaWdodCgpLCBmaXJzdExpbmUpOwogICAg
IHdoaWxlICghcmVzb2x2ZXIucG9zaXRpb24oKS5hdEVuZCgpICYmICFyZXF1aXJlc0xpbmVCb3go
cmVzb2x2ZXIucG9zaXRpb24oKSwgaXNMaW5lRW1wdHksIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5s
eSkpIHsKICAgICAgICAgUmVuZGVyT2JqZWN0KiBvYmplY3QgPSByZXNvbHZlci5wb3NpdGlvbigp
Lm9iajsKICAgICAgICAgaWYgKG9iamVjdC0+aXNGbG9hdGluZygpKSB7Ci0gICAgICAgICAgICBp
bnNlcnRGbG9hdGluZ09iamVjdCh0b1JlbmRlckJveChvYmplY3QpKTsKLSAgICAgICAgICAgIHBv
c2l0aW9uTmV3RmxvYXRzKCk7CisgICAgICAgICAgICBwb3NpdGlvbk5ld0Zsb2F0T25MaW5lKGlu
c2VydEZsb2F0aW5nT2JqZWN0KHRvUmVuZGVyQm94KG9iamVjdCkpLCBsYXN0RmxvYXRGcm9tUHJl
dmlvdXNMaW5lKTsKICAgICAgICAgICAgIGF2YWlsYWJsZVdpZHRoID0gbGluZVdpZHRoKGhlaWdo
dCgpLCBmaXJzdExpbmUpOwogICAgICAgICB9IGVsc2UgaWYgKG9iamVjdC0+aXNQb3NpdGlvbmVk
KCkpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGUgbWF0aCBoZXJlIGlzIGFjdHVhbGx5IG5v
dCByZWFsbHkgcmlnaHQuICBJdCdzIGEgYmVzdC1ndWVzcyBhcHByb3hpbWF0aW9uIHRoYXQKQEAg
LTEzNTgsMTQgKzE0MTcsMTQgQEAgc3RhdGljIHZvaWQgdHJ5SHlwaGVuYXRpbmcoUmVuZGVyVGV4
dCogdAogfQogCiBJbmxpbmVJdGVyYXRvciBSZW5kZXJCbG9jazo6ZmluZE5leHRMaW5lQnJlYWso
SW5saW5lQmlkaVJlc29sdmVyJiByZXNvbHZlciwgYm9vbCBmaXJzdExpbmUsICBib29sJiBpc0xp
bmVFbXB0eSwgYm9vbCYgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5LCAKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sJiBoeXBoZW5hdGVkLCBFQ2xlYXIq
IGNsZWFyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wmIGh5cGhlbmF0ZWQsIEVDbGVhciogY2xlYXIsIEZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXRG
cm9tUHJldmlvdXNMaW5lKQogewogICAgIEFTU0VSVChyZXNvbHZlci5wb3NpdGlvbigpLmJsb2Nr
ID09IHRoaXMpOwogCiAgICAgYm9vbCBhcHBsaWVkU3RhcnRXaWR0aCA9IHJlc29sdmVyLnBvc2l0
aW9uKCkucG9zID4gMDsKICAgICBMaW5lTWlkcG9pbnRTdGF0ZSYgbGluZU1pZHBvaW50U3RhdGUg
PSByZXNvbHZlci5taWRwb2ludFN0YXRlKCk7CiAgICAgCi0gICAgaW50IHdpZHRoID0gc2tpcExl
YWRpbmdXaGl0ZXNwYWNlKHJlc29sdmVyLCBmaXJzdExpbmUsIGlzTGluZUVtcHR5LCBwcmV2aW91
c0xpbmVCcm9rZUNsZWFubHkpOworICAgIGludCB3aWR0aCA9IHNraXBMZWFkaW5nV2hpdGVzcGFj
ZShyZXNvbHZlciwgZmlyc3RMaW5lLCBpc0xpbmVFbXB0eSwgcHJldmlvdXNMaW5lQnJva2VDbGVh
bmx5LCBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lKTsKIAogICAgIGludCB3ID0gMDsKICAgICBp
bnQgdG1wVyA9IDA7CkBAIC0xNDUwLDEyICsxNTA5LDEyIEBAIElubGluZUl0ZXJhdG9yIFJlbmRl
ckJsb2NrOjpmaW5kTmV4dExpbmUKICAgICAgICAgICAgIC8vIGFkZCB0byBzcGVjaWFsIG9iamVj
dHMuLi4KICAgICAgICAgICAgIGlmIChvLT5pc0Zsb2F0aW5nKCkpIHsKICAgICAgICAgICAgICAg
ICBSZW5kZXJCb3gqIGZsb2F0Qm94ID0gdG9SZW5kZXJCb3gobyk7Ci0gICAgICAgICAgICAgICAg
aW5zZXJ0RmxvYXRpbmdPYmplY3QoZmxvYXRCb3gpOworICAgICAgICAgICAgICAgIEZsb2F0aW5n
T2JqZWN0KiBmID0gaW5zZXJ0RmxvYXRpbmdPYmplY3QoZmxvYXRCb3gpOwogICAgICAgICAgICAg
ICAgIC8vIGNoZWNrIGlmIGl0IGZpdHMgaW4gdGhlIGN1cnJlbnQgbGluZS4KICAgICAgICAgICAg
ICAgICAvLyBJZiBpdCBkb2VzLCBwb3NpdGlvbiBpdCBub3csIG90aGVyd2lzZSwgcG9zaXRpb24K
ICAgICAgICAgICAgICAgICAvLyBpdCBhZnRlciBtb3ZpbmcgdG8gbmV4dCBsaW5lIChpbiBuZXdM
aW5lKCkgZnVuYykKICAgICAgICAgICAgICAgICBpZiAoZmxvYXRzRml0T25MaW5lICYmIGZsb2F0
Qm94LT53aWR0aCgpICsgZmxvYXRCb3gtPm1hcmdpbkxlZnQoKSArIGZsb2F0Qm94LT5tYXJnaW5S
aWdodCgpICsgdyArIHRtcFcgPD0gd2lkdGgpIHsKLSAgICAgICAgICAgICAgICAgICAgcG9zaXRp
b25OZXdGbG9hdHMoKTsKKyAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25OZXdGbG9hdE9uTGlu
ZShmLCBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lKTsKICAgICAgICAgICAgICAgICAgICAgd2lk
dGggPSBsaW5lV2lkdGgoaGVpZ2h0KCksIGZpcnN0TGluZSk7CiAgICAgICAgICAgICAgICAgfSBl
bHNlCiAgICAgICAgICAgICAgICAgICAgIGZsb2F0c0ZpdE9uTGluZSA9IGZhbHNlOwpJbmRleDog
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCb3guY3BwCShyZXZpc2lvbiA2NzU2NykKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3Myw3ICs5NzMsNyBAQCB2b2lk
IFJlbmRlckJveDo6bWFwTG9jYWxUb0NvbnRhaW5lcihSZW5kCiAgICAgaWYgKFJlbmRlclZpZXcq
IHYgPSB2aWV3KCkpIHsKICAgICAgICAgaWYgKHYtPmxheW91dFN0YXRlRW5hYmxlZCgpICYmICFy
ZXBhaW50Q29udGFpbmVyKSB7CiAgICAgICAgICAgICBMYXlvdXRTdGF0ZSogbGF5b3V0U3RhdGUg
PSB2LT5sYXlvdXRTdGF0ZSgpOwotICAgICAgICAgICAgSW50U2l6ZSBvZmZzZXQgPSBsYXlvdXRT
dGF0ZS0+bV9vZmZzZXQ7CisgICAgICAgICAgICBJbnRTaXplIG9mZnNldCA9IGxheW91dFN0YXRl
LT5tX3BhaW50T2Zmc2V0OwogICAgICAgICAgICAgb2Zmc2V0LmV4cGFuZCh4KCksIHkoKSk7CiAg
ICAgICAgICAgICBpZiAoc3R5bGUoKS0+cG9zaXRpb24oKSA9PSBSZWxhdGl2ZVBvc2l0aW9uICYm
IGxheWVyKCkpCiAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IGxheWVyKCktPnJlbGF0aXZlUG9z
aXRpb25PZmZzZXQoKTsKQEAgLTExNzAsNyArMTE3MCw3IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21w
dXRlUmVjdEZvclJlcGFpbnQoUmUKICAgICAgICAgICAgICAgICByZWN0Lm1vdmUobGF5ZXIoKS0+
cmVsYXRpdmVQb3NpdGlvbk9mZnNldCgpKTsKIAogICAgICAgICAgICAgcmVjdC5tb3ZlKHgoKSwg
eSgpKTsKLSAgICAgICAgICAgIHJlY3QubW92ZShsYXlvdXRTdGF0ZS0+bV9vZmZzZXQpOworICAg
ICAgICAgICAgcmVjdC5tb3ZlKGxheW91dFN0YXRlLT5tX3BhaW50T2Zmc2V0KTsKICAgICAgICAg
ICAgIGlmIChsYXlvdXRTdGF0ZS0+bV9jbGlwcGVkKQogICAgICAgICAgICAgICAgIHJlY3QuaW50
ZXJzZWN0KGxheW91dFN0YXRlLT5tX2NsaXBSZWN0KTsKICAgICAgICAgICAgIHJldHVybjsKQEAg
LTI5MTUsNCArMjkxNSwxOSBAQCB2b2lkIFJlbmRlckJveDo6Y2xlYXJMYXlvdXRPdmVyZmxvdygp
CiAgICAgbV9vdmVyZmxvdy0+cmVzZXRMYXlvdXRPdmVyZmxvdyhib3JkZXJCb3hSZWN0KCkpOwog
fQogCit2b2lkIFJlbmRlckJveDo6bWFya0Rlc2NlbmRhbnRCbG9ja3NBbmRMaW5lc0ZvckxheW91
dChib29sIGluTGF5b3V0KQoreworICAgIGlmICghbV9ldmVySGFkTGF5b3V0IHx8IGlzUmVwbGFj
ZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0Q2hpbGROZWVkc0xheW91dCh0cnVlLCAh
aW5MYXlvdXQpOworCisgICAgLy8gSXRlcmF0ZSBvdmVyIG91ciBjaGlsZHJlbiBhbmQgbWFyayB0
aGVtIGFzIG5lZWRlZC4KKyAgICBmb3IgKFJlbmRlckJveCogY2hpbGQgPSBmaXJzdENoaWxkQm94
KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZ0JveCgpKSB7CisgICAgICAgIGlm
IChjaGlsZC0+aXNGbG9hdGluZ09yUG9zaXRpb25lZCgpKQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIGNoaWxkLT5tYXJrRGVzY2VuZGFudEJsb2Nrc0FuZExpbmVzRm9yTGF5b3V0KGlu
TGF5b3V0KTsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveC5oCShyZXZpc2lvbiA2NzU2NykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOTcsNiArMjk3LDggQEAgcHVibGljOgogICAgIGJv
b2wgc2hyaW5rVG9Bdm9pZEZsb2F0cygpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBhdm9pZHNG
bG9hdHMoKSBjb25zdDsKIAorICAgIHZpcnR1YWwgdm9pZCBtYXJrRGVzY2VuZGFudEJsb2Nrc0Fu
ZExpbmVzRm9yTGF5b3V0KGJvb2wgaW5MYXlvdXQgPSB0cnVlKTsKKyAgICAKIHByb3RlY3RlZDoK
ICAgICB2aXJ0dWFsIHZvaWQgc3R5bGVXaWxsQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3Qg
UmVuZGVyU3R5bGUqIG5ld1N0eWxlKTsKICAgICB2aXJ0dWFsIHZvaWQgc3R5bGVEaWRDaGFuZ2Uo
U3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOwpJbmRleDogV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmNwcAkocmV2aXNpb24gNjc1NjcpCisrKyBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIwMSw3ICsyMDEsNyBAQCB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjpjYWxjUHJlZldpZHRocygp
CiAgICAgc2V0UHJlZldpZHRoc0RpcnR5KGZhbHNlKTsKIH0KIAotdm9pZCBSZW5kZXJGbGV4aWJs
ZUJveDo6bGF5b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxkcmVuKQordm9pZCBSZW5kZXJGbGV4
aWJsZUJveDo6bGF5b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxkcmVuLCBpbnQgLypwYWdlSGVp
Z2h0IEZJWE1FOiBJbXBsZW1lbnQgKi8pCiB7CiAgICAgQVNTRVJUKG5lZWRzTGF5b3V0KCkpOwog
CkBAIC0yNzgsNiArMjc4LDkgQEAgdm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6bGF5b3V0QmxvY2so
Ym9vbAogCiAgICAgc3RhdGVQdXNoZXIucG9wKCk7CiAKKyAgICBpZiAodmlldygpLT5sYXlvdXRT
dGF0ZSgpLT5tX3BhZ2VIZWlnaHQpCisgICAgICAgIHNldFBhZ2VZKHZpZXcoKS0+bGF5b3V0U3Rh
dGUoKS0+cGFnZVkoeSgpKSk7CisKICAgICAvLyBVcGRhdGUgb3VyIHNjcm9sbGJhcnMgaWYgd2Un
cmUgb3ZlcmZsb3c6YXV0by9zY3JvbGwvaGlkZGVuIG5vdyB0aGF0IHdlIGtub3cgaWYKICAgICAv
LyB3ZSBvdmVyZmxvdyBvciBub3QuCiAgICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpKQpAQCAtMzMx
LDYgKzMzNCw4IEBAIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmxheW91dEhvcml6b250YWwKICAg
ICBib29sIGhhdmVGbGV4ID0gZmFsc2U7CiAgICAgZ2F0aGVyRmxleENoaWxkcmVuSW5mbyhpdGVy
YXRvciwgcmVsYXlvdXRDaGlsZHJlbiwgaGlnaGVzdEZsZXhHcm91cCwgbG93ZXN0RmxleEdyb3Vw
LCBoYXZlRmxleCk7CiAKKyAgICBib29sIHBhZ2luYXRlZCA9IHZpZXcoKS0+bGF5b3V0U3RhdGUo
KS0+cGFnaW5hdGVkKCk7CisKICAgICBSZW5kZXJCb3gqIGNoaWxkOwogCiAgICAgUmVuZGVyQmxv
Y2s6OnN0YXJ0RGVsYXlVcGRhdGVTY3JvbGxJbmZvKCk7CkBAIC0zNjEsNiArMzY2LDEyIEBAIHZv
aWQgUmVuZGVyRmxleGlibGVCb3g6OmxheW91dEhvcml6b250YWwKICAgICAgICAgICAgIC8vIENv
bXB1dGUgdGhlIGNoaWxkJ3MgdmVydGljYWwgbWFyZ2lucy4KICAgICAgICAgICAgIGNoaWxkLT5j
YWxjVmVydGljYWxNYXJnaW5zKCk7CiAgICAgCisgICAgICAgICAgICBpZiAoIWNoaWxkLT5uZWVk
c0xheW91dCgpICYmIHBhZ2luYXRlZCAmJiB2aWV3KCktPmxheW91dFN0YXRlKCktPm1fcGFnZUhl
aWdodCkgeworICAgICAgICAgICAgICAgIFJlbmRlckJsb2NrKiBjaGlsZFJlbmRlckJsb2NrID0g
Y2hpbGQtPmlzUmVuZGVyQmxvY2soKSA/IHRvUmVuZGVyQmxvY2soY2hpbGQpIDogMDsKKyAgICAg
ICAgICAgICAgICBpZiAoY2hpbGRSZW5kZXJCbG9jayAmJiB2aWV3KCktPmxheW91dFN0YXRlKCkt
PnBhZ2VZKGNoaWxkLT55KCkpICE9IGNoaWxkUmVuZGVyQmxvY2stPnBhZ2VZKCkpCisgICAgICAg
ICAgICAgICAgICAgIGNoaWxkUmVuZGVyQmxvY2stPnNldENoaWxkTmVlZHNMYXlvdXQodHJ1ZSwg
ZmFsc2UpOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAvLyBOb3cgZG8gdGhlIGxheW91
dC4KICAgICAgICAgICAgIGNoaWxkLT5sYXlvdXRJZk5lZWRlZCgpOwogICAgIApAQCAtNDI4LDYg
KzQzOSwxMyBAQCB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjpsYXlvdXRIb3Jpem9udGFsCiAgICAg
ICAgICAgICBjaGlsZC0+Y2FsY0hlaWdodCgpOwogICAgICAgICAgICAgaWYgKG9sZENoaWxkSGVp
Z2h0ICE9IGNoaWxkLT5oZWlnaHQoKSkKICAgICAgICAgICAgICAgICBjaGlsZC0+c2V0Q2hpbGRO
ZWVkc0xheW91dCh0cnVlLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBp
ZiAoIWNoaWxkLT5uZWVkc0xheW91dCgpICYmIHBhZ2luYXRlZCAmJiB2aWV3KCktPmxheW91dFN0
YXRlKCktPm1fcGFnZUhlaWdodCkgeworICAgICAgICAgICAgICAgIFJlbmRlckJsb2NrKiBjaGls
ZFJlbmRlckJsb2NrID0gY2hpbGQtPmlzUmVuZGVyQmxvY2soKSA/IHRvUmVuZGVyQmxvY2soY2hp
bGQpIDogMDsKKyAgICAgICAgICAgICAgICBpZiAoY2hpbGRSZW5kZXJCbG9jayAmJiB2aWV3KCkt
PmxheW91dFN0YXRlKCktPnBhZ2VZKGNoaWxkLT55KCkpICE9IGNoaWxkUmVuZGVyQmxvY2stPnBh
Z2VZKCkpCisgICAgICAgICAgICAgICAgICAgIGNoaWxkUmVuZGVyQmxvY2stPnNldENoaWxkTmVl
ZHNMYXlvdXQodHJ1ZSwgZmFsc2UpOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBjaGls
ZC0+bGF5b3V0SWZOZWVkZWQoKTsKICAgICAKICAgICAgICAgICAgIC8vIFdlIGNhbiBwbGFjZSB0
aGUgY2hpbGQgbm93LCB1c2luZyBvdXIgdmFsdWUgb2YgYm94LWFsaWduLgpAQCAtNjQxLDYgKzY1
OSw4IEBAIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmxheW91dFZlcnRpY2FsQm8KICAgICBib29s
IGhhdmVGbGV4ID0gZmFsc2U7CiAgICAgZ2F0aGVyRmxleENoaWxkcmVuSW5mbyhpdGVyYXRvciwg
cmVsYXlvdXRDaGlsZHJlbiwgaGlnaGVzdEZsZXhHcm91cCwgbG93ZXN0RmxleEdyb3VwLCBoYXZl
RmxleCk7CiAKKyAgICBib29sIHBhZ2luYXRlZCA9IHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+cGFn
aW5hdGVkKCk7CisKICAgICBSZW5kZXJCb3gqIGNoaWxkOwogCiAgICAgLy8gV2UgY29uZmluZSB0
aGUgbGluZSBjbGFtcCB1Z2xpbmVzcyB0byB2ZXJ0aWNhbCBmbGV4aWJsZSBib3hlcyAodGh1cyBr
ZWVwaW5nIGl0IG91dCBvZgpAQCAtNjkwLDYgKzcxMCwxMiBAQCB2b2lkIFJlbmRlckZsZXhpYmxl
Qm94OjpsYXlvdXRWZXJ0aWNhbEJvCiAgICAgICAgICAgICAvLyBBZGQgaW4gdGhlIGNoaWxkJ3Mg
bWFyZ2luVG9wIHRvIG91ciBoZWlnaHQuCiAgICAgICAgICAgICBzZXRIZWlnaHQoaGVpZ2h0KCkg
KyBjaGlsZC0+bWFyZ2luVG9wKCkpOwogICAgIAorICAgICAgICAgICAgaWYgKCFjaGlsZC0+bmVl
ZHNMYXlvdXQoKSAmJiBwYWdpbmF0ZWQgJiYgdmlldygpLT5sYXlvdXRTdGF0ZSgpLT5tX3BhZ2VI
ZWlnaHQpIHsKKyAgICAgICAgICAgICAgICBSZW5kZXJCbG9jayogY2hpbGRSZW5kZXJCbG9jayA9
IGNoaWxkLT5pc1JlbmRlckJsb2NrKCkgPyB0b1JlbmRlckJsb2NrKGNoaWxkKSA6IDA7CisgICAg
ICAgICAgICAgICAgaWYgKGNoaWxkUmVuZGVyQmxvY2sgJiYgdmlldygpLT5sYXlvdXRTdGF0ZSgp
LT5wYWdlWShjaGlsZC0+eSgpKSAhPSBjaGlsZFJlbmRlckJsb2NrLT5wYWdlWSgpKQorICAgICAg
ICAgICAgICAgICAgICBjaGlsZFJlbmRlckJsb2NrLT5zZXRDaGlsZE5lZWRzTGF5b3V0KHRydWUs
IGZhbHNlKTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgLy8gTm93IGRvIGEgbGF5b3V0
LgogICAgICAgICAgICAgY2hpbGQtPmxheW91dElmTmVlZGVkKCk7CiAgICAgCkluZGV4OiBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmgJKHJldmlzaW9uIDY3NTY3KQorKysgV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyAr
NDAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjYWxjSG9yaXpvbnRhbFByZWZXaWR0aHMoKTsKICAg
ICB2b2lkIGNhbGNWZXJ0aWNhbFByZWZXaWR0aHMoKTsKIAotICAgIHZpcnR1YWwgdm9pZCBsYXlv
dXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4pOworICAgIHZpcnR1YWwgdm9pZCBsYXlvdXRC
bG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIGludCBwYWdlSGVpZ2h0KTsKICAgICB2b2lkIGxh
eW91dEhvcml6b250YWxCb3goYm9vbCByZWxheW91dENoaWxkcmVuKTsKICAgICB2b2lkIGxheW91
dFZlcnRpY2FsQm94KGJvb2wgcmVsYXlvdXRDaGlsZHJlbik7CiAKSW5kZXg6IFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlcklubGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVySW5saW5lLmNwcAkocmV2aXNpb24gNjc1NjcpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJJbmxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NDcsNyArNjQ3LDcgQEAgdm9pZCBS
ZW5kZXJJbmxpbmU6OmNvbXB1dGVSZWN0Rm9yUmVwYWludAogICAgICAgICAgICAgTGF5b3V0U3Rh
dGUqIGxheW91dFN0YXRlID0gdi0+bGF5b3V0U3RhdGUoKTsKICAgICAgICAgICAgIGlmIChzdHls
ZSgpLT5wb3NpdGlvbigpID09IFJlbGF0aXZlUG9zaXRpb24gJiYgbGF5ZXIoKSkKICAgICAgICAg
ICAgICAgICByZWN0Lm1vdmUobGF5ZXIoKS0+cmVsYXRpdmVQb3NpdGlvbk9mZnNldCgpKTsKLSAg
ICAgICAgICAgIHJlY3QubW92ZShsYXlvdXRTdGF0ZS0+bV9vZmZzZXQpOworICAgICAgICAgICAg
cmVjdC5tb3ZlKGxheW91dFN0YXRlLT5tX3BhaW50T2Zmc2V0KTsKICAgICAgICAgICAgIGlmIChs
YXlvdXRTdGF0ZS0+bV9jbGlwcGVkKQogICAgICAgICAgICAgICAgIHJlY3QuaW50ZXJzZWN0KGxh
eW91dFN0YXRlLT5tX2NsaXBSZWN0KTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTczNCw3ICs3
MzQsNyBAQCB2b2lkIFJlbmRlcklubGluZTo6bWFwTG9jYWxUb0NvbnRhaW5lcihSCiAgICAgaWYg
KFJlbmRlclZpZXcgKnYgPSB2aWV3KCkpIHsKICAgICAgICAgaWYgKHYtPmxheW91dFN0YXRlRW5h
YmxlZCgpICYmICFyZXBhaW50Q29udGFpbmVyKSB7CiAgICAgICAgICAgICBMYXlvdXRTdGF0ZSog
bGF5b3V0U3RhdGUgPSB2LT5sYXlvdXRTdGF0ZSgpOwotICAgICAgICAgICAgSW50U2l6ZSBvZmZz
ZXQgPSBsYXlvdXRTdGF0ZS0+bV9vZmZzZXQ7CisgICAgICAgICAgICBJbnRTaXplIG9mZnNldCA9
IGxheW91dFN0YXRlLT5tX3BhaW50T2Zmc2V0OwogICAgICAgICAgICAgaWYgKHN0eWxlKCktPnBv
c2l0aW9uKCkgPT0gUmVsYXRpdmVQb3NpdGlvbiAmJiBsYXllcigpKQogICAgICAgICAgICAgICAg
IG9mZnNldCArPSBsYXllcigpLT5yZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0KCk7CiAgICAgICAgICAg
ICB0cmFuc2Zvcm1TdGF0ZS5tb3ZlKG9mZnNldCk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuY3BwCShyZXZpc2lvbiA2NzU2NykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcxLDcgKzQ3MSw3IEBAIFRyYW5zZm9ybWF0aW9uTWF0
cml4IFJlbmRlckxheWVyOjpyZW5kZXIKIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVBhZ2luYXRp
b24oKQogewogICAgIG1faXNQYWdpbmF0ZWQgPSBmYWxzZTsKLSAgICBpZiAoaXNDb21wb3NpdGVk
KCkgfHwgIXBhcmVudCgpIHx8IHJlbmRlcmVyKCktPmlzUG9zaXRpb25lZCgpKQorICAgIGlmIChp
c0NvbXBvc2l0ZWQoKSB8fCAhcGFyZW50KCkpCiAgICAgICAgIHJldHVybjsgLy8gRklYTUU6IFdl
IHdpbGwgaGF2ZSB0byBkZWFsIHdpdGggcGFnaW5hdGVkIGNvbXBvc2l0aW5nIGxheWVycyBzb21l
ZGF5LgogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBGb3Igbm93IHRoZSBSZW5kZXJWaWV3IGNh
bid0IGJlIHBhZ2luYXRlZC4gIEV2ZW50dWFsbHkgcHJpbnRpbmcgd2lsbCBtb3ZlIHRvIGEgbW9k
ZWwgd2hlcmUgaXQgaXMgdGhvdWdoLgogICAgIApAQCAtMjU1NSwxMSArMjU1NSwxMSBAQCB2b2lk
IFJlbmRlckxheWVyOjpwYWludENoaWxkTGF5ZXJJbnRvQ29sCiAgICAgY29sdW1uQmxvY2stPmxh
eWVyKCktPmNvbnZlcnRUb0xheWVyQ29vcmRzKHJvb3RMYXllciwgbGF5ZXJYLCBsYXllclkpOwog
ICAgIAogICAgIENvbHVtbkluZm8qIGNvbEluZm8gPSBjb2x1bW5CbG9jay0+Y29sdW1uSW5mbygp
OwotICAgIHVuc2lnbmVkIGNvbENvdW50ID0gY29sSW5mby0+Y29sdW1uQ291bnQoKTsKKyAgICB1
bnNpZ25lZCBjb2xDb3VudCA9IGNvbHVtbkJsb2NrLT5jb2x1bW5Db3VudChjb2xJbmZvKTsKICAg
ICBpbnQgY3VycllPZmZzZXQgPSAwOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb2xD
b3VudDsgaSsrKSB7CiAgICAgICAgIC8vIEZvciBlYWNoIHJlY3QsIHdlIGNsaXAgdG8gdGhlIHJl
Y3QsIGFuZCB0aGVuIHdlIGFkanVzdCBvdXIgY29vcmRzLgotICAgICAgICBJbnRSZWN0IGNvbFJl
Y3QgPSBjb2xJbmZvLT5jb2x1bW5SZWN0QXQoaSk7CisgICAgICAgIEludFJlY3QgY29sUmVjdCA9
IGNvbHVtbkJsb2NrLT5jb2x1bW5SZWN0QXQoY29sSW5mbywgaSk7CiAgICAgICAgIGludCBjdXJy
WE9mZnNldCA9IGNvbFJlY3QueCgpIC0gKGNvbHVtbkJsb2NrLT5ib3JkZXJMZWZ0KCkgKyBjb2x1
bW5CbG9jay0+cGFkZGluZ0xlZnQoKSk7CiAgICAgICAgIGNvbFJlY3QubW92ZShsYXllclgsIGxh
eWVyWSk7CiAKQEAgLTMwMjEsMTcgKzMwMjEsMTcgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVy
OjpoaXRUZXN0Q2hpbGRMYQogICAgIGNvbHVtbkJsb2NrLT5sYXllcigpLT5jb252ZXJ0VG9MYXll
ckNvb3Jkcyhyb290TGF5ZXIsIGxheWVyWCwgbGF5ZXJZKTsKICAgICAKICAgICBDb2x1bW5JbmZv
KiBjb2xJbmZvID0gY29sdW1uQmxvY2stPmNvbHVtbkluZm8oKTsKLSAgICBpbnQgY29sQ291bnQg
PSBjb2xJbmZvLT5jb2x1bW5Db3VudCgpOworICAgIGludCBjb2xDb3VudCA9IGNvbHVtbkJsb2Nr
LT5jb2x1bW5Db3VudChjb2xJbmZvKTsKICAgICAKICAgICAvLyBXZSBoYXZlIHRvIGdvIGJhY2t3
YXJkcyBmcm9tIHRoZSBsYXN0IGNvbHVtbiB0byB0aGUgZmlyc3QuCiAgICAgaW50IGxlZnQgPSBj
b2x1bW5CbG9jay0+Ym9yZGVyTGVmdCgpICsgY29sdW1uQmxvY2stPnBhZGRpbmdMZWZ0KCk7CiAg
ICAgaW50IGN1cnJZT2Zmc2V0ID0gMDsKICAgICBpbnQgaTsKICAgICBmb3IgKGkgPSAwOyBpIDwg
Y29sQ291bnQ7IGkrKykKLSAgICAgICAgY3VycllPZmZzZXQgLT0gY29sSW5mby0+Y29sdW1uUmVj
dEF0KGkpLmhlaWdodCgpOworICAgICAgICBjdXJyWU9mZnNldCAtPSBjb2x1bW5CbG9jay0+Y29s
dW1uUmVjdEF0KGNvbEluZm8sIGkpLmhlaWdodCgpOwogICAgIGZvciAoaSA9IGNvbENvdW50IC0g
MTsgaSA+PSAwOyBpLS0pIHsKICAgICAgICAgLy8gRm9yIGVhY2ggcmVjdCwgd2UgY2xpcCB0byB0
aGUgcmVjdCwgYW5kIHRoZW4gd2UgYWRqdXN0IG91ciBjb29yZHMuCi0gICAgICAgIEludFJlY3Qg
Y29sUmVjdCA9IGNvbEluZm8tPmNvbHVtblJlY3RBdChpKTsKKyAgICAgICAgSW50UmVjdCBjb2xS
ZWN0ID0gY29sdW1uQmxvY2stPmNvbHVtblJlY3RBdChjb2xJbmZvLCBpKTsKICAgICAgICAgaW50
IGN1cnJYT2Zmc2V0ID0gY29sUmVjdC54KCkgLSBsZWZ0OwogICAgICAgICBjdXJyWU9mZnNldCAr
PSBjb2xSZWN0LmhlaWdodCgpOwogICAgICAgICBjb2xSZWN0Lm1vdmUobGF5ZXJYLCBsYXllclkp
OwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmNwcAkocmV2aXNpb24g
Njc1NjcpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM1LDcgKzM1LDYgQEAKICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKICNp
bmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiUm9vdElubGluZUJveC5oIgotI2luY2x1
ZGUgIlNldHRpbmdzLmgiIC8vIEZJWE1FOiBUaGlzIGluY2x1ZGUgY2FuIGJlIHJlbW92ZWQgd2hl
biBwYWdpbmF0ZUR1cmluZ0xheW91dEVuYWJsZWQgaXMgdGFrZW4gb3V0LgogCiB1c2luZyBuYW1l
c3BhY2Ugc3RkOwogCkBAIC0xNjEsNyArMTYwLDcgQEAgdm9pZCBSZW5kZXJMaW5lQm94TGlzdDo6
cGFpbnQoUmVuZGVyQm94TQogICAgICAgICByZXR1cm47CiAKICAgICBSZW5kZXJWaWV3KiB2ID0g
cmVuZGVyZXItPnZpZXcoKTsKLSAgICBib29sIHVzZVByaW50UmVjdCA9ICF2LT5wcmludFJlY3Qo
KS5pc0VtcHR5KCkgJiYgIXJlbmRlcmVyLT5kb2N1bWVudCgpLT5zZXR0aW5ncygpLT5wYWdpbmF0
ZUR1cmluZ0xheW91dEVuYWJsZWQoKTsKKyAgICBib29sIHVzZVByaW50UmVjdCA9ICF2LT5wcmlu
dFJlY3QoKS5pc0VtcHR5KCk7CiAgICAgCiAgICAgLy8gV2UgY2FuIGNoZWNrIHRoZSBmaXJzdCBi
b3ggYW5kIGxhc3QgYm94IGFuZCBhdm9pZCBwYWludGluZyBpZiB3ZSBkb24ndAogICAgIC8vIGlu
dGVyc2VjdC4gIFRoaXMgaXMgYSBxdWljayBzaG9ydC1jaXJjdWl0IHRoYXQgd2UgY2FuIHRha2Ug
dG8gYXZvaWQgd2Fsa2luZyBhbnkgbGluZXMuCkBAIC0yMTUsNyArMjE0LDYgQEAgdm9pZCBSZW5k
ZXJMaW5lQm94TGlzdDo6cGFpbnQoUmVuZGVyQm94TQogICAgICAgICBpbnQgYm90dG9tID0gY3Vy
ci0+Ym90dG9tVmlzaWJsZU92ZXJmbG93KCkgKyByZW5kZXJlci0+bWF4aW1hbE91dGxpbmVTaXpl
KGluZm8ucGhhc2UpOwogICAgICAgICBoID0gYm90dG9tIC0gdG9wOwogICAgICAgICB5UG9zID0g
dHkgKyB0b3A7Ci0gICAgICAgIHYtPnNldE1pbmltdW1Db2x1bW5IZWlnaHQoaCk7CiAgICAgICAg
IGlmICh5UG9zIDwgaW5mby5yZWN0LmJvdHRvbSgpICYmIHlQb3MgKyBoID4gaW5mby5yZWN0Lnko
KSkKICAgICAgICAgICAgIGN1cnItPnBhaW50KGluZm8sIHR4LCB0eSk7CiAgICAgfQpJbmRleDog
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAkocmV2aXNpb24gNjc1NjcpCisrKyBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDggKzU5LDEwIEBA
IFJlbmRlclRhYmxlOjpSZW5kZXJUYWJsZShOb2RlKiBub2RlKQogICAgICwgbV9ib3JkZXJMZWZ0
KDApCiAgICAgLCBtX2JvcmRlclJpZ2h0KDApCiB7CisgICAgc2V0Q2hpbGRyZW5JbmxpbmUoZmFs
c2UpOwogICAgIG1fY29sdW1uUG9zLmZpbGwoMCwgMik7CiAgICAgbV9jb2x1bW5zLmZpbGwoQ29s
dW1uU3RydWN0KCksIDEpOworICAgIAogfQogCiB2b2lkIFJlbmRlclRhYmxlOjpzdHlsZURpZENo
YW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQpA
QCAtMzk5LDYgKzQwMSw5IEBAIHZvaWQgUmVuZGVyVGFibGU6OmxheW91dCgpCiAKICAgICBzdGF0
ZVB1c2hlci5wb3AoKTsKIAorICAgIGlmICh2aWV3KCktPmxheW91dFN0YXRlKCktPm1fcGFnZUhl
aWdodCkKKyAgICAgICAgc2V0UGFnZVkodmlldygpLT5sYXlvdXRTdGF0ZSgpLT5wYWdlWSh5KCkp
KTsKKwogICAgIGJvb2wgZGlkRnVsbFJlcGFpbnQgPSByZXBhaW50ZXIucmVwYWludEFmdGVyTGF5
b3V0KCk7CiAgICAgLy8gUmVwYWludCB3aXRoIG91ciBuZXcgYm91bmRzIGlmIHRoZXkgYXJlIGRp
ZmZlcmVudCBmcm9tIG91ciBvbGQgYm91bmRzLgogICAgIGlmICghZGlkRnVsbFJlcGFpbnQgJiYg
c2VjdGlvbk1vdmVkKQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5oCShyZXZpc2lvbiA2NzU2
NykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE0Miw3ICsxNDIsNyBAQCBwdWJsaWM6CiAgICAgICAgIGlmIChtX25lZWRzU2VjdGlvblJlY2Fs
YykKICAgICAgICAgICAgIHJlY2FsY1NlY3Rpb25zKCk7CiAgICAgfQotCisgICAgCiBwcm90ZWN0
ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29u
c3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsKIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGFibGVSb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRh
YmxlUm93LmNwcAkocmV2aXNpb24gNjc1NjcpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
YWJsZVJvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNyw5ICsxMTcsMTQgQEAgdm9pZCBSZW5k
ZXJUYWJsZVJvdzo6bGF5b3V0KCkKICAgICAvLyBUYWJsZSByb3dzIGRvIG5vdCBhZGQgdHJhbnNs
YXRpb24uCiAgICAgTGF5b3V0U3RhdGVNYWludGFpbmVyIHN0YXRlUHVzaGVyKHZpZXcoKSwgdGhp
cywgSW50U2l6ZSgpKTsKIAorICAgIGJvb2wgcGFnaW5hdGVkID0gdmlldygpLT5sYXlvdXRTdGF0
ZSgpLT5wYWdpbmF0ZWQoKTsKKyAgICAgICAgICAgICAgICAKICAgICBmb3IgKFJlbmRlck9iamVj
dCogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGlu
ZygpKSB7CiAgICAgICAgIGlmIChjaGlsZC0+aXNUYWJsZUNlbGwoKSkgewogICAgICAgICAgICAg
UmVuZGVyVGFibGVDZWxsKiBjZWxsID0gdG9SZW5kZXJUYWJsZUNlbGwoY2hpbGQpOworICAgICAg
ICAgICAgaWYgKCFjZWxsLT5uZWVkc0xheW91dCgpICYmIHBhZ2luYXRlZCAmJiB2aWV3KCktPmxh
eW91dFN0YXRlKCktPm1fcGFnZUhlaWdodCAmJiB2aWV3KCktPmxheW91dFN0YXRlKCktPnBhZ2VZ
KGNlbGwtPnkoKSkgIT0gY2VsbC0+cGFnZVkoKSkKKyAgICAgICAgICAgICAgICBjZWxsLT5zZXRD
aGlsZE5lZWRzTGF5b3V0KHRydWUsIGZhbHNlKTsKKwogICAgICAgICAgICAgaWYgKGNoaWxkLT5u
ZWVkc0xheW91dCgpKSB7CiAgICAgICAgICAgICAgICAgY2VsbC0+Y2FsY1ZlcnRpY2FsTWFyZ2lu
cygpOwogICAgICAgICAgICAgICAgIGNlbGwtPmxheW91dCgpOwpJbmRleDogV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCShyZXZpc2lvbiA2NzU2NykKKysrIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwNSw2
ICs2MDUsOCBAQCBpbnQgUmVuZGVyVGFibGVTZWN0aW9uOjpsYXlvdXRSb3dzKGludCB0CiAgICAg
ICAgICAgICBpZiAodGUgIT0gb2xkVGUgfHwgYmUgIT0gb2xkQmUpIHsKICAgICAgICAgICAgICAg
ICBjZWxsLT5zZXROZWVkc0xheW91dCh0cnVlLCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgY2Vs
bC0+bGF5b3V0SWZOZWVkZWQoKTsKKyAgICAgICAgICAgICAgICBpZiAodmlldygpLT5sYXlvdXRT
dGF0ZSgpLT5tX3BhZ2VIZWlnaHQgJiYgY2VsbC0+aGVpZ2h0KCkgIT0gckhlaWdodCkKKyAgICAg
ICAgICAgICAgICAgICAgY2VsbC0+c2V0SGVpZ2h0KHJIZWlnaHQpOyAvLyBGSVhNRTogUGFnaW5h
dGlvbiBtaWdodCBoYXZlIG1hZGUgdXMgY2hhbmdlIHNpemUuICBGb3Igbm93IGp1c3Qgc2hyaW5r
IG9yIGdyb3cgdGhlIGNlbGwgdG8gZml0IHdpdGhvdXQgZG9pbmcgYSByZWxheW91dC4KICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKCh0ZSAhPSBvbGRUZSB8fCBiZSA+IG9sZEJlKSAm
JiAhdGFibGUoKS0+c2VsZk5lZWRzTGF5b3V0KCkgJiYgY2VsbC0+Y2hlY2tGb3JSZXBhaW50RHVy
aW5nTGF5b3V0KCkpCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAkocmV2aXNpb24gNjc1
NjcpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTIsNyArNTIsNiBAQCBSZW5kZXJWaWV3OjpSZW5kZXJWaWV3KE5vZGUqIG5vZGUsIEZyYW1l
CiAgICAgLCBtX21heGltYWxPdXRsaW5lU2l6ZSgwKQogICAgICwgbV9iZXN0VHJ1bmNhdGVkQXQo
MCkKICAgICAsIG1fdHJ1bmNhdG9yV2lkdGgoMCkKLSAgICAsIG1fbWluaW11bUNvbHVtbkhlaWdo
dCgwKQogICAgICwgbV9mb3JjZWRQYWdlQnJlYWsoZmFsc2UpCiAgICAgLCBtX2xheW91dFN0YXRl
KDApCiAgICAgLCBtX2xheW91dFN0YXRlRGlzYWJsZUNvdW50KDApCkBAIC02OTMsNyArNjkyLDYg
QEAgdm9pZCBSZW5kZXJWaWV3OjpzZXRCZXN0VHJ1bmNhdGVkQXQoaW50IAogCiB2b2lkIFJlbmRl
clZpZXc6OnB1c2hMYXlvdXRTdGF0ZShSZW5kZXJPYmplY3QqIHJvb3QpCiB7Ci0gICAgQVNTRVJU
KCFkb2luZ0Z1bGxSZXBhaW50KCkpOwogICAgIEFTU0VSVChtX2xheW91dFN0YXRlRGlzYWJsZUNv
dW50ID09IDApOwogICAgIEFTU0VSVChtX2xheW91dFN0YXRlID09IDApOwogCkluZGV4OiBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVmlldy5oCShyZXZpc2lvbiA2NzU2NykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtODMsMTIgKzgzLDEwIEBAIHB1YmxpYzoKICAg
ICBJbnRSZWN0IHByaW50UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJpbnRSZWN0OyB9CiAgICAg
dm9pZCBzZXRQcmludFJlY3QoY29uc3QgSW50UmVjdCYgcikgeyBtX3ByaW50UmVjdCA9IHI7IH0K
IAotICAgIHZvaWQgc2V0VHJ1bmNhdGVkQXQoaW50IHkpIHsgbV90cnVuY2F0ZWRBdCA9IHk7IG1f
YmVzdFRydW5jYXRlZEF0ID0gbV90cnVuY2F0b3JXaWR0aCA9IDA7IG1fbWluaW11bUNvbHVtbkhl
aWdodCA9IDA7IG1fZm9yY2VkUGFnZUJyZWFrID0gZmFsc2U7IH0KKyAgICB2b2lkIHNldFRydW5j
YXRlZEF0KGludCB5KSB7IG1fdHJ1bmNhdGVkQXQgPSB5OyBtX2Jlc3RUcnVuY2F0ZWRBdCA9IG1f
dHJ1bmNhdG9yV2lkdGggPSAwOyBtX2ZvcmNlZFBhZ2VCcmVhayA9IGZhbHNlOyB9CiAgICAgdm9p
ZCBzZXRCZXN0VHJ1bmNhdGVkQXQoaW50IHksIFJlbmRlckJveE1vZGVsT2JqZWN0KiBmb3JSZW5k
ZXJlciwgYm9vbCBmb3JjZWRCcmVhayA9IGZhbHNlKTsKLSAgICB2b2lkIHNldE1pbmltdW1Db2x1
bW5IZWlnaHQoaW50IGhlaWdodCkgeyBtX21pbmltdW1Db2x1bW5IZWlnaHQgPSBoZWlnaHQ7IH0K
ICAgICBpbnQgYmVzdFRydW5jYXRlZEF0KCkgY29uc3QgeyByZXR1cm4gbV9iZXN0VHJ1bmNhdGVk
QXQ7IH0KLSAgICBpbnQgbWluaW11bUNvbHVtbkhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fbWlu
aW11bUNvbHVtbkhlaWdodDsgfQotCisgICAgCiAgICAgaW50IHRydW5jYXRlZEF0KCkgY29uc3Qg
eyByZXR1cm4gbV90cnVuY2F0ZWRBdDsgfQogCiAgICAgdmlydHVhbCB2b2lkIGFic29sdXRlUmVj
dHMoVmVjdG9yPEludFJlY3Q+JiwgaW50IHR4LCBpbnQgdHkpOwpAQCAtMTIyLDIxICsxMjAsMjAg
QEAgcHVibGljOgogCiAgICAgYm9vbCBkb2luZ0Z1bGxSZXBhaW50KCkgY29uc3QgeyByZXR1cm4g
bV9mcmFtZVZpZXctPm5lZWRzRnVsbFJlcGFpbnQoKTsgfQogCi0gICAgdm9pZCBwdXNoTGF5b3V0
U3RhdGUoUmVuZGVyQm94KiByZW5kZXJlciwgY29uc3QgSW50U2l6ZSYgb2Zmc2V0KQorICAgIHZv
aWQgcHVzaExheW91dFN0YXRlKFJlbmRlckJveCogcmVuZGVyZXIsIGNvbnN0IEludFNpemUmIG9m
ZnNldCwgaW50IHBhZ2VIZWlnaHQgPSAwLCBDb2x1bW5JbmZvKiBjb2xJbmZvID0gMCkKICAgICB7
Ci0gICAgICAgIGlmIChkb2luZ0Z1bGxSZXBhaW50KCkpCi0gICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIC8vIFdlIHB1c2ggTGF5b3V0U3RhdGUgZXZlbiBpZiBsYXlvdXRTdGF0ZSBpcyBkaXNh
YmxlZCBiZWNhdXNlIGl0IHN0b3JlcyBsYXlvdXREZWx0YSB0b28uCi0gICAgICAgIG1fbGF5b3V0
U3RhdGUgPSBuZXcgKHJlbmRlckFyZW5hKCkpIExheW91dFN0YXRlKG1fbGF5b3V0U3RhdGUsIHJl
bmRlcmVyLCBvZmZzZXQpOworICAgICAgICBpZiAoIWRvaW5nRnVsbFJlcGFpbnQoKSB8fCByZW5k
ZXJlci0+aGFzQ29sdW1ucygpIHx8IG1fbGF5b3V0U3RhdGUtPnBhZ2luYXRlZCgpKQorICAgICAg
ICAgICAgbV9sYXlvdXRTdGF0ZSA9IG5ldyAocmVuZGVyQXJlbmEoKSkgTGF5b3V0U3RhdGUobV9s
YXlvdXRTdGF0ZSwgcmVuZGVyZXIsIG9mZnNldCwgcGFnZUhlaWdodCwgY29sSW5mbyk7CiAgICAg
fQogCiAgICAgdm9pZCBwdXNoTGF5b3V0U3RhdGUoUmVuZGVyT2JqZWN0Kik7CiAKICAgICB2b2lk
IHBvcExheW91dFN0YXRlKCkKICAgICB7Ci0gICAgICAgIGlmIChkb2luZ0Z1bGxSZXBhaW50KCkp
Ci0gICAgICAgICAgICByZXR1cm47CiAgICAgICAgIExheW91dFN0YXRlKiBzdGF0ZSA9IG1fbGF5
b3V0U3RhdGU7CisgICAgICAgIGlmIChkb2luZ0Z1bGxSZXBhaW50KCkgJiYgIW1fbGF5b3V0U3Rh
dGUtPnBhZ2luYXRlZCgpKQorICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBtX2xheW91dFN0
YXRlID0gc3RhdGUtPm1fbmV4dDsKICAgICAgICAgc3RhdGUtPmRlc3Ryb3kocmVuZGVyQXJlbmEo
KSk7CiAgICAgfQpAQCAtMTk4LDcgKzE5NSw2IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAg
aW50IG1fYmVzdFRydW5jYXRlZEF0OwogICAgIGludCBtX3RydW5jYXRvcldpZHRoOwotICAgIGlu
dCBtX21pbmltdW1Db2x1bW5IZWlnaHQ7CiAgICAgYm9vbCBtX2ZvcmNlZFBhZ2VCcmVhazsKICAg
ICBMYXlvdXRTdGF0ZSogbV9sYXlvdXRTdGF0ZTsKICAgICB1bnNpZ25lZCBtX2xheW91dFN0YXRl
RGlzYWJsZUNvdW50OwpAQCAtMjI3LDEzICsyMjMsMTMgQEAgdm9pZCB0b1JlbmRlclZpZXcoY29u
c3QgUmVuZGVyVmlldyopOwogY2xhc3MgTGF5b3V0U3RhdGVNYWludGFpbmVyIDogcHVibGljIE5v
bmNvcHlhYmxlIHsKIHB1YmxpYzoKICAgICAvLyBjdG9yIHRvIHB1c2ggbm93Ci0gICAgTGF5b3V0
U3RhdGVNYWludGFpbmVyKFJlbmRlclZpZXcqIHZpZXcsIFJlbmRlckJveCogcm9vdCwgSW50U2l6
ZSBvZmZzZXQsIGJvb2wgZGlzYWJsZVN0YXRlID0gZmFsc2UpCisgICAgTGF5b3V0U3RhdGVNYWlu
dGFpbmVyKFJlbmRlclZpZXcqIHZpZXcsIFJlbmRlckJveCogcm9vdCwgSW50U2l6ZSBvZmZzZXQs
IGJvb2wgZGlzYWJsZVN0YXRlID0gZmFsc2UsIGludCBwYWdlSGVpZ2h0ID0gMCwgQ29sdW1uSW5m
byogY29sSW5mbyA9IDApCiAgICAgICAgIDogbV92aWV3KHZpZXcpCiAgICAgICAgICwgbV9kaXNh
YmxlZChkaXNhYmxlU3RhdGUpCiAgICAgICAgICwgbV9kaWRTdGFydChmYWxzZSkKICAgICAgICAg
LCBtX2RpZEVuZChmYWxzZSkKICAgICB7Ci0gICAgICAgIHB1c2gocm9vdCwgb2Zmc2V0KTsKKyAg
ICAgICAgcHVzaChyb290LCBvZmZzZXQsIHBhZ2VIZWlnaHQsIGNvbEluZm8pOwogICAgIH0KICAg
ICAKICAgICAvLyBjdG9yIHRvIG1heWJlIHB1c2ggbGF0ZXIKQEAgLTI1MCwxMSArMjQ2LDExIEBA
IHB1YmxpYzoKICAgICAgICAgQVNTRVJUKG1fZGlkU3RhcnQgPT0gbV9kaWRFbmQpOyAgIC8vIGlm
IHRoaXMgZmlyZXMsIGl0IG1lYW5zIHRoYXQgc29tZW9uZSBkaWQgYSBwdXNoKCksIGJ1dCBmb3Jn
b3QgdG8gcG9wKCkuCiAgICAgfQogCi0gICAgdm9pZCBwdXNoKFJlbmRlckJveCogcm9vdCwgSW50
U2l6ZSBvZmZzZXQpCisgICAgdm9pZCBwdXNoKFJlbmRlckJveCogcm9vdCwgSW50U2l6ZSBvZmZz
ZXQsIGludCBwYWdlSGVpZ2h0ID0gMCwgQ29sdW1uSW5mbyogY29sSW5mbyA9IDApCiAgICAgewog
ICAgICAgICBBU1NFUlQoIW1fZGlkU3RhcnQpOwogICAgICAgICAvLyBXZSBwdXNoIHN0YXRlIGV2
ZW4gaWYgZGlzYWJsZWQsIGJlY2F1c2Ugd2Ugc3RpbGwgbmVlZCB0byBzdG9yZSBsYXlvdXREZWx0
YQotICAgICAgICBtX3ZpZXctPnB1c2hMYXlvdXRTdGF0ZShyb290LCBvZmZzZXQpOworICAgICAg
ICBtX3ZpZXctPnB1c2hMYXlvdXRTdGF0ZShyb290LCBvZmZzZXQsIHBhZ2VIZWlnaHQsIGNvbElu
Zm8pOwogICAgICAgICBpZiAobV9kaXNhYmxlZCkKICAgICAgICAgICAgIG1fdmlldy0+ZGlzYWJs
ZUxheW91dFN0YXRlKCk7CiAgICAgICAgIG1fZGlkU3RhcnQgPSB0cnVlOwpJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1Jvb3RJbmxpbmVCb3guaAkocmV2aXNpb24gNjc1NjcpCisrKyBXZWJDb3JlL3JlbmRlcmlu
Zy9Sb290SW5saW5lQm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAgcHVibGlj
OgogICAgICAgICAsIG1fbGluZUJyZWFrUG9zKDApCiAgICAgICAgICwgbV9saW5lVG9wKDApCiAg
ICAgICAgICwgbV9saW5lQm90dG9tKDApCisgICAgICAgICwgbV9wYWdpbmF0aW9uU3RydXQoMCkK
ICAgICB7CiAgICAgfQogCkBAIC01Nyw2ICs1OCw5IEBAIHB1YmxpYzoKICAgICBpbnQgbGluZVRv
cCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZVRvcDsgfQogICAgIGludCBsaW5lQm90dG9tKCkgY29u
c3QgeyByZXR1cm4gbV9saW5lQm90dG9tOyB9CiAKKyAgICBpbnQgcGFnaW5hdGlvblN0cnV0KCkg
Y29uc3QgeyByZXR1cm4gbV9wYWdpbmF0aW9uU3RydXQ7IH0KKyAgICB2b2lkIHNldFBhZ2luYXRp
b25TdHJ1dChpbnQgcykgeyBtX3BhZ2luYXRpb25TdHJ1dCA9IHM7IH0KKwogICAgIGludCBzZWxl
Y3Rpb25Ub3AoKSBjb25zdDsKICAgICBpbnQgc2VsZWN0aW9uQm90dG9tKCkgY29uc3QgeyByZXR1
cm4gbGluZUJvdHRvbSgpOyB9CiAgICAgaW50IHNlbGVjdGlvbkhlaWdodCgpIGNvbnN0IHsgcmV0
dXJuIG1heCgwLCBzZWxlY3Rpb25Cb3R0b20oKSAtIHNlbGVjdGlvblRvcCgpKTsgfQpAQCAtMTQx
LDYgKzE0NSw4IEBAIHByaXZhdGU6CiAgICAgaW50IG1fbGluZVRvcDsKICAgICBpbnQgbV9saW5l
Qm90dG9tOwogCisgICAgaW50IG1fcGFnaW5hdGlvblN0cnV0OworCiAgICAgLy8gRmxvYXRzIGhh
bmdpbmcgb2ZmIHRoZSBsaW5lIGFyZSBwdXNoZWQgaW50byB0aGlzIHZlY3RvciBkdXJpbmcgbGF5
b3V0LiBJdCBpcyBvbmx5CiAgICAgLy8gZ29vZCBmb3IgYXMgbG9uZyBhcyB0aGUgbGluZSBoYXMg
bm90IGJlZW4gbWFya2VkIGRpcnR5LgogICAgIE93blB0cjxWZWN0b3I8UmVuZGVyQm94Kj4gPiBt
X2Zsb2F0czsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDY3NTY3KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTAzIEBACisyMDEwLTA5LTE1ICBEYXZpZCBI
eWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
Mzg0MDIsIHBhZ2luYXRlIGNvbHVtbnMgYXQgbGF5b3V0IHRpbWUgcmF0aGVyIHRoYW4gYXQgcGFp
bnQgdGltZS4KKworICAgICAgICBBZGQgbWFueSBuZXcgbXVsdGljb2wgbGF5b3V0IHRlc3RzIHRo
YXQgZGVtb25zdHJhdGUgbmV3IHBhZ2luYXRpb24gZmVhdHVyZXMuCisKKyAgICAgICAgKiBmYXN0
L211bHRpY29sL2JvcmRlci1wYWRkaW5nLXBhZ2luYXRpb24uaHRtbDogQWRkZWQuCisgICAgICAg
ICogZmFzdC9tdWx0aWNvbC9jbGllbnQtcmVjdHMtZXhwZWN0ZWQuY2hlY2tzdW06CisgICAgICAg
ICogZmFzdC9tdWx0aWNvbC9jbGllbnQtcmVjdHMtZXhwZWN0ZWQucG5nOgorICAgICAgICAqIGZh
c3QvbXVsdGljb2wvY2xpZW50LXJlY3RzLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L211
bHRpY29sL2NvbHVtbi1icmVhay13aXRoLWJhbGFuY2luZy5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L211bHRpY29sL2Zsb2F0LXBhZ2luYXRlLWNvbXBsZXguaHRtbDogQWRkZWQuCisgICAg
ICAgICogZmFzdC9tdWx0aWNvbC9mbG9hdC1wYWdpbmF0ZS5odG1sOgorICAgICAgICAqIGZhc3Qv
bXVsdGljb2wvZmxvYXQtdHJ1bmNhdGlvbi5odG1sOgorICAgICAgICAqIGZhc3QvbXVsdGljb2wv
bWFyZ2luLWNvbGxhcHNlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvbXVsdGljb2wvbWF4
LWhlaWdodC1jb2x1bW5zLWJsb2NrLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvbXVsdGlj
b2wvcG9zaXRpb25lZC1zcGxpdC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L211bHRpY29s
L3NoYWRvdy1icmVha2luZy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L211bHRpY29sL3Np
bmdsZS1saW5lLWV4cGVjdGVkLmNoZWNrc3VtOgorICAgICAgICAqIGZhc3QvbXVsdGljb2wvc2lu
Z2xlLWxpbmUtZXhwZWN0ZWQucG5nOgorICAgICAgICAqIGZhc3QvbXVsdGljb2wvdGFibGUtbWFy
Z2luLWNvbGxhcHNlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvbXVsdGljb2wvdGFibGUt
dmVydGljYWwtYWxpZ24uaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9tdWx0aWNvbC91bnNw
bGl0dGFibGUtaW5saW5lLWJsb2NrLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21h
Yy9mYXN0L211bHRpY29sL2JvcmRlci1wYWRkaW5nLXBhZ2luYXRpb24tZXhwZWN0ZWQuY2hlY2tz
dW06IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L211bHRpY29sL2JvcmRlci1w
YWRkaW5nLXBhZ2luYXRpb24tZXhwZWN0ZWQucG5nOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9tYWMvZmFzdC9tdWx0aWNvbC9ib3JkZXItcGFkZGluZy1wYWdpbmF0aW9uLWV4cGVjdGVkLnR4
dDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjL2Zhc3QvbXVsdGljb2wvY29sdW1uLWJy
ZWFrLXdpdGgtYmFsYW5jaW5nLWV4cGVjdGVkLmNoZWNrc3VtOiBBZGRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9tYWMvZmFzdC9tdWx0aWNvbC9jb2x1bW4tYnJlYWstd2l0aC1iYWxhbmNpbmctZXhw
ZWN0ZWQucG5nOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC9tdWx0aWNvbC9j
b2x1bW4tYnJlYWstd2l0aC1iYWxhbmNpbmctZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9tYWMvZmFzdC9tdWx0aWNvbC9jb2x1bW4tY291bnQtd2l0aC1ydWxlcy1leHBl
Y3RlZC5jaGVja3N1bTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjL2Zhc3QvbXVsdGlj
b2wvY29sdW1uLWNvdW50LXdpdGgtcnVsZXMtZXhwZWN0ZWQucG5nOiBBZGRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9tYWMvZmFzdC9tdWx0aWNvbC9jb2x1bW4tY291bnQtd2l0aC1ydWxlcy1leHBl
Y3RlZC50eHQ6CisgICAgICAgICogcGxhdGZvcm0vbWFjL2Zhc3QvbXVsdGljb2wvY29sdW1uLXJ1
bGVzLWV4cGVjdGVkLmNoZWNrc3VtOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L211bHRp
Y29sL2NvbHVtbi1ydWxlcy1leHBlY3RlZC5wbmc6CisgICAgICAgICogcGxhdGZvcm0vbWFjL2Zh
c3QvbXVsdGljb2wvY29sdW1uLXJ1bGVzLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9tYWMvZmFzdC9tdWx0aWNvbC9jb2x1bW4tcnVsZXMtc3RhY2tpbmctZXhwZWN0ZWQuY2hlY2tz
dW06CisgICAgICAgICogcGxhdGZvcm0vbWFjL2Zhc3QvbXVsdGljb2wvY29sdW1uLXJ1bGVzLXN0
YWNraW5nLWV4cGVjdGVkLnBuZzoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC9tdWx0aWNv
bC9jb2x1bW5zLXNob3J0aGFuZC1wYXJzaW5nLWV4cGVjdGVkLmNoZWNrc3VtOgorICAgICAgICAq
IHBsYXRmb3JtL21hYy9mYXN0L211bHRpY29sL2NvbHVtbnMtc2hvcnRoYW5kLXBhcnNpbmctZXhw
ZWN0ZWQucG5nOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L211bHRpY29sL2Zsb2F0LWF2
b2lkYW5jZS1leHBlY3RlZC5jaGVja3N1bToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC9t
dWx0aWNvbC9mbG9hdC1hdm9pZGFuY2UtZXhwZWN0ZWQucG5nOgorICAgICAgICAqIHBsYXRmb3Jt
L21hYy9mYXN0L211bHRpY29sL2Zsb2F0LWF2b2lkYW5jZS1leHBlY3RlZC50eHQ6CisgICAgICAg
ICogcGxhdGZvcm0vbWFjL2Zhc3QvbXVsdGljb2wvZmxvYXQtbXVsdGljb2wtZXhwZWN0ZWQuY2hl
Y2tzdW06CisgICAgICAgICogcGxhdGZvcm0vbWFjL2Zhc3QvbXVsdGljb2wvZmxvYXQtbXVsdGlj
b2wtZXhwZWN0ZWQucG5nOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L211bHRpY29sL2Zs
b2F0LW11bHRpY29sLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC9t
dWx0aWNvbC9mbG9hdC1wYWdpbmF0ZS1jb21wbGV4LWV4cGVjdGVkLmNoZWNrc3VtOiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC9tdWx0aWNvbC9mbG9hdC1wYWdpbmF0ZS1jb21w
bGV4LWV4cGVjdGVkLnBuZzogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjL2Zhc3QvbXVs
dGljb2wvZmxvYXQtcGFnaW5hdGUtY29tcGxleC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL21hYy9mYXN0L211bHRpY29sL2Zsb2F0LXBhZ2luYXRlLWV4cGVjdGVkLnR4
dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC9tdWx0aWNvbC9sYXllcnMtaW4tbXVsdGlj
b2wtZXhwZWN0ZWQuY2hlY2tzdW06CisgICAgICAgICogcGxhdGZvcm0vbWFjL2Zhc3QvbXVsdGlj
b2wvbGF5ZXJzLWluLW11bHRpY29sLWV4cGVjdGVkLnBuZzoKKyAgICAgICAgKiBwbGF0Zm9ybS9t
YWMvZmFzdC9tdWx0aWNvbC9sYXllcnMtaW4tbXVsdGljb2wtZXhwZWN0ZWQudHh0OgorICAgICAg
ICAqIHBsYXRmb3JtL21hYy9mYXN0L211bHRpY29sL21hcmdpbi1jb2xsYXBzZS1leHBlY3RlZC5j
aGVja3N1bTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjL2Zhc3QvbXVsdGljb2wvbWFy
Z2luLWNvbGxhcHNlLWV4cGVjdGVkLnBuZzogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFj
L2Zhc3QvbXVsdGljb2wvbWFyZ2luLWNvbGxhcHNlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogcGxhdGZvcm0vbWFjL2Zhc3QvbXVsdGljb2wvbWF4LWhlaWdodC1jb2x1bW5zLWJsb2Nr
LWV4cGVjdGVkLmNoZWNrc3VtOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC9t
dWx0aWNvbC9tYXgtaGVpZ2h0LWNvbHVtbnMtYmxvY2stZXhwZWN0ZWQucG5nOiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC9tdWx0aWNvbC9tYXgtaGVpZ2h0LWNvbHVtbnMtYmxv
Y2stZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC9tdWx0
aWNvbC9uZXN0ZWQtY29sdW1ucy1leHBlY3RlZC5jaGVja3N1bToKKyAgICAgICAgKiBwbGF0Zm9y
bS9tYWMvZmFzdC9tdWx0aWNvbC9uZXN0ZWQtY29sdW1ucy1leHBlY3RlZC5wbmc6CisgICAgICAg
ICogcGxhdGZvcm0vbWFjL2Zhc3QvbXVsdGljb2wvbmVzdGVkLWNvbHVtbnMtZXhwZWN0ZWQudHh0
OgorICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L211bHRpY29sL3BhZ2luYXRlLWJsb2NrLXJl
cGxhY2VkLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC9tdWx0aWNv
bC9wb3NpdGlvbmVkLXNwbGl0LWV4cGVjdGVkLmNoZWNrc3VtOiBBZGRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9tYWMvZmFzdC9tdWx0aWNvbC9wb3NpdGlvbmVkLXNwbGl0LWV4cGVjdGVkLnBuZzog
QWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjL2Zhc3QvbXVsdGljb2wvcG9zaXRpb25lZC1z
cGxpdC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L211
bHRpY29sL3Bvc2l0aW9uZWQtd2l0aC1jb25zdHJhaW5lZC1oZWlnaHQtZXhwZWN0ZWQuY2hlY2tz
dW06CisgICAgICAgICogcGxhdGZvcm0vbWFjL2Zhc3QvbXVsdGljb2wvcG9zaXRpb25lZC13aXRo
LWNvbnN0cmFpbmVkLWhlaWdodC1leHBlY3RlZC5wbmc6CisgICAgICAgICogcGxhdGZvcm0vbWFj
L2Zhc3QvbXVsdGljb2wvcG9zaXRpb25lZC13aXRoLWNvbnN0cmFpbmVkLWhlaWdodC1leHBlY3Rl
ZC50eHQ6CisgICAgICAgICogcGxhdGZvcm0vbWFjL2Zhc3QvbXVsdGljb2wvc2hhZG93LWJyZWFr
aW5nLWV4cGVjdGVkLmNoZWNrc3VtOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFz
dC9tdWx0aWNvbC9zaGFkb3ctYnJlYWtpbmctZXhwZWN0ZWQucG5nOiBBZGRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9tYWMvZmFzdC9tdWx0aWNvbC9zaGFkb3ctYnJlYWtpbmctZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC9tdWx0aWNvbC9zcGFuL3NwYW4t
YXMtaW1tZWRpYXRlLWNoaWxkLWdlbmVyYXRlZC1jb250ZW50LWV4cGVjdGVkLmNoZWNrc3VtOgor
ICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L211bHRpY29sL3NwYW4vc3Bhbi1hcy1pbW1lZGlh
dGUtY2hpbGQtZ2VuZXJhdGVkLWNvbnRlbnQtZXhwZWN0ZWQucG5nOgorICAgICAgICAqIHBsYXRm
b3JtL21hYy9mYXN0L211bHRpY29sL3NwYW4vc3Bhbi1hcy1pbW1lZGlhdGUtY2hpbGQtZ2VuZXJh
dGVkLWNvbnRlbnQtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L211
bHRpY29sL3NwYW4vc3Bhbi1hcy1pbW1lZGlhdGUtY2hpbGQtcHJvcGVydHktcmVtb3ZhbC1leHBl
Y3RlZC5jaGVja3N1bToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC9tdWx0aWNvbC9zcGFu
L3NwYW4tYXMtaW1tZWRpYXRlLWNoaWxkLXByb3BlcnR5LXJlbW92YWwtZXhwZWN0ZWQucG5nOgor
ICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L211bHRpY29sL3NwYW4vc3Bhbi1hcy1pbW1lZGlh
dGUtY2hpbGQtcHJvcGVydHktcmVtb3ZhbC1leHBlY3RlZC50eHQ6CisgICAgICAgICogcGxhdGZv
cm0vbWFjL2Zhc3QvbXVsdGljb2wvc3Bhbi9zcGFuLWFzLWltbWVkaWF0ZS1jb2x1bW5zLWNoaWxk
LWR5bmFtaWMtZXhwZWN0ZWQuY2hlY2tzdW06CisgICAgICAgICogcGxhdGZvcm0vbWFjL2Zhc3Qv
bXVsdGljb2wvc3Bhbi9zcGFuLWFzLWltbWVkaWF0ZS1jb2x1bW5zLWNoaWxkLWR5bmFtaWMtZXhw
ZWN0ZWQucG5nOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L211bHRpY29sL3NwYW4vc3Bh
bi1hcy1pbW1lZGlhdGUtY29sdW1ucy1jaGlsZC1keW5hbWljLWV4cGVjdGVkLnR4dDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC9tdWx0aWNvbC9zcGFuL3NwYW4tYXMtaW1tZWRpYXRlLWNv
bHVtbnMtY2hpbGQtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L211
bHRpY29sL3NwYW4vc3Bhbi1hcy1pbW1lZGlhdGUtY29sdW1ucy1jaGlsZC1yZW1vdmFsLWV4cGVj
dGVkLnR4dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC9tdWx0aWNvbC9zcGFuL3NwYW4t
YXMtbmVzdGVkLWNvbHVtbnMtY2hpbGQtZHluYW1pYy1leHBlY3RlZC5jaGVja3N1bToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC9tdWx0aWNvbC9zcGFuL3NwYW4tYXMtbmVzdGVkLWNvbHVt
bnMtY2hpbGQtZHluYW1pYy1leHBlY3RlZC5wbmc6CisgICAgICAgICogcGxhdGZvcm0vbWFjL2Zh
c3QvbXVsdGljb2wvc3Bhbi9zcGFuLWFzLW5lc3RlZC1jb2x1bW5zLWNoaWxkLWR5bmFtaWMtZXhw
ZWN0ZWQudHh0OgorICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L211bHRpY29sL3NwYW4vc3Bh
bi1hcy1uZXN0ZWQtY29sdW1ucy1jaGlsZC1leHBlY3RlZC5jaGVja3N1bToKKyAgICAgICAgKiBw
bGF0Zm9ybS9tYWMvZmFzdC9tdWx0aWNvbC9zcGFuL3NwYW4tYXMtbmVzdGVkLWNvbHVtbnMtY2hp
bGQtZXhwZWN0ZWQucG5nOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L211bHRpY29sL3Nw
YW4vc3Bhbi1hcy1uZXN0ZWQtY29sdW1ucy1jaGlsZC1leHBlY3RlZC50eHQ6CisgICAgICAgICog
cGxhdGZvcm0vbWFjL2Zhc3QvbXVsdGljb2wvdGFibGUtbWFyZ2luLWNvbGxhcHNlLWV4cGVjdGVk
LmNoZWNrc3VtOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC9tdWx0aWNvbC90
YWJsZS1tYXJnaW4tY29sbGFwc2UtZXhwZWN0ZWQucG5nOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9tYWMvZmFzdC9tdWx0aWNvbC90YWJsZS1tYXJnaW4tY29sbGFwc2UtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC9tdWx0aWNvbC90YWJsZS12ZXJ0
aWNhbC1hbGlnbi1leHBlY3RlZC5jaGVja3N1bTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0v
bWFjL2Zhc3QvbXVsdGljb2wvdGFibGUtdmVydGljYWwtYWxpZ24tZXhwZWN0ZWQucG5nOiBBZGRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC9tdWx0aWNvbC90YWJsZS12ZXJ0aWNhbC1h
bGlnbi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L211
bHRpY29sL3Vuc3BsaXR0YWJsZS1pbmxpbmUtYmxvY2stZXhwZWN0ZWQuY2hlY2tzdW06IEFkZGVk
LgorICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L211bHRpY29sL3Vuc3BsaXR0YWJsZS1pbmxp
bmUtYmxvY2stZXhwZWN0ZWQucG5nOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFz
dC9tdWx0aWNvbC91bnNwbGl0dGFibGUtaW5saW5lLWJsb2NrLWV4cGVjdGVkLnR4dDogQWRkZWQu
CisKIDIwMTAtMDktMTUgIENocmlzIEZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFwcGxlLmNvbT4KIAog
ICAgICAgICBBWDogd2hlbiB0ZXh0IGlzIGF1dG8tdHJ1bmNhdGVkLCBhY2Nlc3NpYmlsaXR5IGJv
dW5kcyBhcmUgd3JvbmcKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvbXVsdGljb2wvYm9yZGVyLXBh
ZGRpbmctcGFnaW5hdGlvbi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvbXVs
dGljb2wvYm9yZGVyLXBhZGRpbmctcGFnaW5hdGlvbi5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvZmFzdC9tdWx0aWNvbC9ib3JkZXItcGFkZGluZy1wYWdpbmF0aW9uLmh0bWwJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsOSBAQAorPGh0bWw+Cis8Ym9keT4KKzxkaXYgc3R5bGU9Ii13
ZWJraXQtY29sdW1uLWNvdW50OjI7LW1vei1jb2x1bW4tY291bnQ6MjsgYm9yZGVyOjJweCBzb2xp
ZCBtYXJvb24iPgorPGRpdiBzdHlsZT0iaGVpZ2h0OjExMHB4Ij48L2Rpdj4KKzxkaXYgc3R5bGU9
ImJhY2tncm91bmQtY29sb3I6bGltZTsgYm9yZGVyOjJweCBzb2xpZCBibGFjazsgd2lkdGg6Mzc1
cHg7ICI+Cis8ZGl2IHN0eWxlPSJtYXJnaW46IDAgMTBweDsgYmFja2dyb3VuZC1jb2xvcjpncmVl
bjsgYm9yZGVyOiAycHggc29saWQgYmx1ZSI+Cis8c3BhbiBzdHlsZT0iZm9udC1zaXplOjY0cHgi
PkluIDJuZCBjb2x1bW48L3NwYW4+Cis8L2Rpdj4KKzwvZGl2PgpJbmRleDogTGF5b3V0VGVzdHMv
ZmFzdC9tdWx0aWNvbC9jbGllbnQtcmVjdHMtZXhwZWN0ZWQuY2hlY2tzdW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC9tdWx0aWNvbC9jbGllbnQtcmVjdHMtZXhwZWN0ZWQuY2hlY2tz
dW0JKHJldmlzaW9uIDY3NTY3KQorKysgTGF5b3V0VGVzdHMvZmFzdC9tdWx0aWNvbC9jbGllbnQt
cmVjdHMtZXhwZWN0ZWQuY2hlY2tzdW0JKHdvcmtpbmcgY29weSkKQEAgLTEgKzEgQEAKLWE1MTYy
NGVlODkyYmQ2YjQwMDM4M2Y0N2RjNTcyM2Y1ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQor
YmJmZDRjYzMwNWI1MTBhY2NkZDE0NTIyODRkODM0N2QKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBm
aWxlCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L211bHRpY29sL2NsaWVudC1yZWN0cy1leHBlY3Rl
ZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9tdWx0aWNvbC9jbGllbnQtcmVj
dHMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA2NzU2NykKKysrIExheW91dFRlc3RzL2Zhc3QvbXVs
dGljb2wvY2xpZW50LXJlY3RzLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNzEsNyAr
NzEsNyBAQCBsYXllciBhdCAoOCw0ODMpIHNpemUgMTM2eDc2CiAgICAgICBSZW5kZXJJbWFnZSB7
SU1HfSBhdCAoMCwyNSkgc2l6ZSAyNXgyNSBbYmdjb2xvcj0jQUREOEU2XQogbGF5ZXIgYXQgKDgs
NjA5KSBzaXplIDEzNng3NgogICBSZW5kZXJCbG9jayB7RElWfSBhdCAoMCw2MDEpIHNpemUgMTM2
eDc2IFtjb2xvcj0jQUREOEU2XSBbYm9yZGVyOiAoM3B4IHNvbGlkICMwMDAwMDApXQotICAgIFJl
bmRlckJsb2NrIHtESVZ9IGF0ICgxMyw1Mykgc2l6ZSAyNXgyNSBbYmdjb2xvcj0jQUREOEU2XQor
ICAgIFJlbmRlckJsb2NrIHtESVZ9IGF0ICgxMywxMykgc2l6ZSAyNXgyNSBbYmdjb2xvcj0jQURE
OEU2XQogbGF5ZXIgYXQgKDIxLDkxKSBzaXplIDI1eDI1CiAgIFJlbmRlckJsb2NrIChwb3NpdGlv
bmVkKSB7RElWfSBhdCAoMjEsOTEpIHNpemUgMjV4MjUgW2JvcmRlcjogKDNweCBzb2xpZCAjMDAw
MEZGN0YpXQogbGF5ZXIgYXQgKDgxLDY2KSBzaXplIDI1eDI1CkBAIC05Niw3ICs5Niw3IEBAIGxh
eWVyIGF0ICg4MSwzNDkpIHNpemUgMjV4MjUKICAgUmVuZGVyQmxvY2sgKHBvc2l0aW9uZWQpIHtE
SVZ9IGF0ICg4MSwzNDkpIHNpemUgMjV4MjUgW2JvcmRlcjogKDNweCBzb2xpZCAjMDAwMEZGN0Yp
XQogbGF5ZXIgYXQgKDgzLDQxMikgc2l6ZSAyNXgyNQogICBSZW5kZXJCbG9jayAocG9zaXRpb25l
ZCkge0RJVn0gYXQgKDgzLDQxMikgc2l6ZSAyNXgyNSBbYm9yZGVyOiAoM3B4IHNvbGlkICMwMDAw
RkY3RildCi1sYXllciBhdCAoODEsNTIxKSBzaXplIDI1eDI1Ci0gIFJlbmRlckJsb2NrIChwb3Np
dGlvbmVkKSB7RElWfSBhdCAoODEsNTIxKSBzaXplIDI1eDI1IFtib3JkZXI6ICgzcHggc29saWQg
IzAwMDBGRjdGKV0KLWxheWVyIGF0ICg4MSw2MTIpIHNpemUgMjV4MjUKLSAgUmVuZGVyQmxvY2sg
KHBvc2l0aW9uZWQpIHtESVZ9IGF0ICg4MSw2MTIpIHNpemUgMjV4MjUgW2JvcmRlcjogKDNweCBz
b2xpZCAjMDAwMEZGN0YpXQorbGF5ZXIgYXQgKDgxLDQ5Nikgc2l6ZSAyNXgyNQorICBSZW5kZXJC
bG9jayAocG9zaXRpb25lZCkge0RJVn0gYXQgKDgxLDQ5Nikgc2l6ZSAyNXgyNSBbYm9yZGVyOiAo
M3B4IHNvbGlkICMwMDAwRkY3RildCitsYXllciBhdCAoMjEsNjIyKSBzaXplIDI1eDI1CisgIFJl
bmRlckJsb2NrIChwb3NpdGlvbmVkKSB7RElWfSBhdCAoMjEsNjIyKSBzaXplIDI1eDI1IFtib3Jk
ZXI6ICgzcHggc29saWQgIzAwMDBGRjdGKV0KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvbXVsdGlj
b2wvY29sdW1uLWJyZWFrLXdpdGgtYmFsYW5jaW5nLmh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC9tdWx0aWNvbC9jb2x1bW4tYnJlYWstd2l0aC1iYWxhbmNpbmcuaHRtbAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvbXVsdGljb2wvY29sdW1uLWJyZWFrLXdpdGgt
YmFsYW5jaW5nLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjYgQEAKKzxodG1sPgorPGRp
diBzdHlsZT0iLXdlYmtpdC1jb2x1bW4tY291bnQ6MjsgYm9yZGVyOjVweCBzb2xpZCBibHVlIj4K
K1RoaXMgaXMgc29tZSB0ZXh0Ljxicj4KK1RoaXMgaXMgc29tZSB0ZXh0Ljxicj4KK1RoaXMgaXMg
c29tZSB0ZXh0Ljxicj4KK1RoaXMgaXMgc29tZSB0ZXh0Ljxicj4KK1RoaXMgaXMgc29tZSB0ZXh0
Ljxicj4KK1RoaXMgaXMgc29tZSB0ZXh0Ljxicj4KK1RoaXMgaXMgc29tZSB0ZXh0Ljxicj4KKwor
VGhpcyBpcyBzb21lIHRleHQuPGJyPgorVGhpcyBpcyBzb21lIHRleHQuPGJyPgorVGhpcyBpcyBz
b21lIHRleHQuPGJyPgorVGhpcyBpcyBzb21lIHRleHQuPGJyPgorVGhpcyBpcyBzb21lIHRleHQu
PGJyPgorVGhpcyBpcyBzb21lIHRleHQuPGJyPgorVGhpcyBpcyBzb21lIHRleHQuPGJyPgorCitU
aGlzIGlzIHNvbWUgdGV4dC48YnI+CitUaGlzIGlzIHNvbWUgdGV4dC48YnI+CitUaGlzIGlzIHNv
bWUgdGV4dC48YnI+CitUaGlzIGlzIHNvbWUgdGV4dC48YnI+CitUaGlzIGlzIHNvbWUgdGV4dC48
YnI+CitUaGlzIGlzIHNvbWUgdGV4dC48YnI+CitUaGlzIGlzIHNvbWUgdGV4dC48YnI+CisKKzxk
aXYgc3R5bGU9Ii13ZWJraXQtY29sdW1uLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KK1RoaXMgdGV4
dCBzaG91bGQgYmUgaW4gdGhlIHNlY29uZCBjb2x1bW4uPGJyPgorVGhpcyB0ZXh0IHNob3VsZCBi
ZSBpbiB0aGUgc2Vjb25kIGNvbHVtbi48YnI+CitUaGlzIHRleHQgc2hvdWxkIGJlIGluIHRoZSBz
ZWNvbmQgY29sdW1uLjxicj4KK1RoaXMgdGV4dCBzaG91bGQgYmUgaW4gdGhlIHNlY29uZCBjb2x1
bW4uPGJyPgorPC9kaXY+Cis8L2Rpdj4KKworPGRpdiBzdHlsZT0ibWFyZ2luLXRvcDoxZW07IC13
ZWJraXQtY29sdW1uLWNvdW50OjI7IGJvcmRlcjo1cHggc29saWQgYmx1ZSI+CisKK1RoaXMgdGV4
dCBzaG91bGQgYmUgaW4gdGhlIGZpcnN0IGNvbHVtbi48YnI+CitUaGlzIHRleHQgc2hvdWxkIGJl
IGluIHRoZSBmaXJzdCBjb2x1bW4uPGJyPgorVGhpcyB0ZXh0IHNob3VsZCBiZSBpbiB0aGUgZmly
c3QgY29sdW1uLjxicj4KK1RoaXMgdGV4dCBzaG91bGQgYmUgaW4gdGhlIGZpcnN0IGNvbHVtbi48
YnI+CisKKzxkaXYgc3R5bGU9Ii13ZWJraXQtY29sdW1uLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4K
K1RoaXMgaXMgc29tZSB0ZXh0Ljxicj4KK1RoaXMgaXMgc29tZSB0ZXh0Ljxicj4KK1RoaXMgaXMg
c29tZSB0ZXh0Ljxicj4KK1RoaXMgaXMgc29tZSB0ZXh0Ljxicj4KK1RoaXMgaXMgc29tZSB0ZXh0
Ljxicj4KK1RoaXMgaXMgc29tZSB0ZXh0Ljxicj4KK1RoaXMgaXMgc29tZSB0ZXh0Ljxicj4KKwor
VGhpcyBpcyBzb21lIHRleHQuPGJyPgorVGhpcyBpcyBzb21lIHRleHQuPGJyPgorVGhpcyBpcyBz
b21lIHRleHQuPGJyPgorVGhpcyBpcyBzb21lIHRleHQuPGJyPgorVGhpcyBpcyBzb21lIHRleHQu
PGJyPgorVGhpcyBpcyBzb21lIHRleHQuPGJyPgorVGhpcyBpcyBzb21lIHRleHQuPGJyPgorCitU
aGlzIGlzIHNvbWUgdGV4dC48YnI+CitUaGlzIGlzIHNvbWUgdGV4dC48YnI+CitUaGlzIGlzIHNv
bWUgdGV4dC48YnI+CitUaGlzIGlzIHNvbWUgdGV4dC48YnI+CitUaGlzIGlzIHNvbWUgdGV4dC48
YnI+CitUaGlzIGlzIHNvbWUgdGV4dC48YnI+CitUaGlzIGlzIHNvbWUgdGV4dC48YnI+Cis8L2Rp
dj4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvbXVsdGljb2wvZmxvYXQtcGFnaW5hdGUtY29tcGxl
eC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvbXVsdGljb2wvZmxvYXQtcGFn
aW5hdGUtY29tcGxleC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9tdWx0
aWNvbC9mbG9hdC1wYWdpbmF0ZS1jb21wbGV4Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NDggQEAKKzxkaXYgc3R5bGU9Ii13ZWJraXQtY29sdW1uLXdpZHRoOjMwMHB4Oy1tb3otY29sdW1u
LXdpZHRoOjMwMHB4OyBib3JkZXI6MnB4IHNvbGlkIGJsYWNrOyBoZWlnaHQ6NDAwcHgiPgorVGhp
cyBpcyBzb21lIHRleHQuPGJyPgorVGhpcyBpcyBzb21lIHRleHQuPGJyPlRoaXMgaXMgc29tZSB0
ZXh0Ljxicj5UaGlzIGlzIHNvbWUgdGV4dC48YnI+VGhpcyBpcyBzb21lIHRleHQuPGJyPlRoaXMg
aXMgc29tZSB0ZXh0Ljxicj5UaGlzIGlzIHNvbWUgdGV4dC48YnI+CitUaGlzIGlzIHNvbWUgdGV4
dC48YnI+VGhpcyBpcyBzb21lIHRleHQuPGJyPlRoaXMgaXMgc29tZSB0ZXh0Ljxicj5UaGlzIGlz
IHNvbWUgdGV4dC48YnI+VGhpcyBpcyBzb21lIHRleHQuPGJyPlRoaXMgaXMgc29tZSB0ZXh0Ljxi
cj4KK1RoaXMgaXMgc29tZSB0ZXh0Ljxicj4KKzxwPjxzcGFuIHN0eWxlPSJmbG9hdDpsZWZ0O2Zv
bnQtc2l6ZToxMjhweDsiPlQ8L3NwYW4+CitoaXMgaXMgc29tZSB0ZXh0Ljxicj4KK1RoaXMgaXMg
c29tZSB0ZXh0Ljxicj5UaGlzIGlzIHNvbWUgdGV4dC48YnI+CitUaGlzIGlzIHNvbWUgdGV4dC48
YnI+VGhpcyBpcyBzb21lIHRleHQuPGJyPlRoaXMgaXMgc29tZSB0ZXh0Ljxicj5UaGlzIGlzIHNv
bWUgdGV4dC48YnI+CitUaGlzIGlzIHNvbWUgdGV4dC48YnI+VGhpcyBpcyBzb21lIHRleHQuPGJy
PlRoaXMgaXMgc29tZSB0ZXh0Ljxicj5UaGlzIGlzIHNvbWUgdGV4dC48YnI+CitUaGlzIGlzIHNv
bWUgdGV4dC48YnI+VGhpcyBpcyBzb21lIHRleHQuPGJyPlRoaXMgaXMgc29tZSB0ZXh0Ljxicj5U
aGlzIGlzIHNvbWUgdGV4dC48YnI+VGhpcyBpcyBzb21lIHRleHQuPGJyPlRoaXMgaXMgc29tZSB0
ZXh0Ljxicj4KK1RoaXMgaXMgc29tZSB0ZXh0Ljxicj5UaGlzIGlzIHNvbWUgdGV4dC48YnI+VGhp
cyBpcyBzb21lIHRleHQuPGJyPlRoaXMgaXMgc29tZSB0ZXh0Ljxicj4KK1RoaXMgaXMgc29tZSB0
ZXh0Ljxicj5UaGlzIGlzIHNvbWUgdGV4dC48YnI+VGhpcyBpcyBzb21lIHRleHQuPGJyPlRoaXMg
aXMgc29tZSB0ZXh0Ljxicj5UaGlzIGlzIHNvbWUgdGV4dC48YnI+PC9wPgorPC9kaXY+CisKKzxk
aXYgc3R5bGU9Im1hcmdpbi10b3A6MWVtOyAtd2Via2l0LWNvbHVtbi13aWR0aDozMDBweDstbW96
LWNvbHVtbi13aWR0aDozMDBweDsgYm9yZGVyOjJweCBzb2xpZCBibGFjazsgaGVpZ2h0OjQwMHB4
Ij4KK1RoaXMgaXMgc29tZSB0ZXh0Ljxicj4KK1RoaXMgaXMgc29tZSB0ZXh0Ljxicj5UaGlzIGlz
IHNvbWUgdGV4dC48YnI+VGhpcyBpcyBzb21lIHRleHQuPGJyPlRoaXMgaXMgc29tZSB0ZXh0Ljxi
cj5UaGlzIGlzIHNvbWUgdGV4dC48YnI+VGhpcyBpcyBzb21lIHRleHQuPGJyPgorVGhpcyBpcyBz
b21lIHRleHQuPGJyPlRoaXMgaXMgc29tZSB0ZXh0Ljxicj5UaGlzIGlzIHNvbWUgdGV4dC48YnI+
VGhpcyBpcyBzb21lIHRleHQuPGJyPlRoaXMgaXMgc29tZSB0ZXh0Ljxicj5UaGlzIGlzIHNvbWUg
dGV4dC48YnI+CitUaGlzIGlzIHNvbWUgdGV4dC48YnI+Cis8cD48aW1nIHN0eWxlPSJmbG9hdDps
ZWZ0O3dpZHRoOjEwMHB4O2hlaWdodDoxMDBweDtiYWNrZ3JvdW5kLWNvbG9yOmdyZWVuIj48aW1n
IHN0eWxlPSJmbG9hdDpyaWdodDt3aWR0aDoxMDBweDtoZWlnaHQ6MjAwcHg7YmFja2dyb3VuZC1j
b2xvcjpncmVlbiI+CitUaGlzIGlzIHNvbWUgdGV4dDxicj4KK1RoaXMgaXMgc29tZSB0ZXh0Ljxi
cj5UaGlzIGlzIHNvbWUgdGV4dC48YnI+CitUaGlzIGlzIHNvbWUgdGV4dC48YnI+VGhpcyBpcyBz
b21lIHRleHQuPGJyPlRoaXMgaXMgc29tZSB0ZXh0Ljxicj5UaGlzIGlzIHNvbWUgdGV4dC48YnI+
CitUaGlzIGlzIHNvbWUgdGV4dC48YnI+VGhpcyBpcyBzb21lIHRleHQuPGJyPlRoaXMgaXMgc29t
ZSB0ZXh0Ljxicj5UaGlzIGlzIHNvbWUgdGV4dC48YnI+CitUaGlzIGlzIHNvbWUgdGV4dC48YnI+
VGhpcyBpcyBzb21lIHRleHQuPGJyPlRoaXMgaXMgc29tZSB0ZXh0Ljxicj5UaGlzIGlzIHNvbWUg
dGV4dC48YnI+VGhpcyBpcyBzb21lIHRleHQuPGJyPlRoaXMgaXMgc29tZSB0ZXh0Ljxicj4KK1Ro
aXMgaXMgc29tZSB0ZXh0Ljxicj5UaGlzIGlzIHNvbWUgdGV4dC48YnI+VGhpcyBpcyBzb21lIHRl
eHQuPGJyPlRoaXMgaXMgc29tZSB0ZXh0Ljxicj4KK1RoaXMgaXMgc29tZSB0ZXh0Ljxicj5UaGlz
IGlzIHNvbWUgdGV4dC48YnI+VGhpcyBpcyBzb21lIHRleHQuPGJyPlRoaXMgaXMgc29tZSB0ZXh0
Ljxicj5UaGlzIGlzIHNvbWUgdGV4dC48YnI+PC9wPgorPC9kaXY+CisKKzxkaXYgc3R5bGU9Im1h
cmdpbi10b3A6MWVtOyAtd2Via2l0LWNvbHVtbi13aWR0aDozMDBweDstbW96LWNvbHVtbi13aWR0
aDozMDBweDsgYm9yZGVyOjJweCBzb2xpZCBibGFjazsgaGVpZ2h0OjQwMHB4Ij4KKzxpbWcgc3R5
bGU9ImZsb2F0OmxlZnQ7YmFja2dyb3VuZC1jb2xvcjpncmVlbjsgd2lkdGg6MzAwcHg7aGVpZ2h0
OjM5MHB4Ij4KK0xvbmdlciB0ZXh0IGRlc2lnbmVkIHRvIHRlc3QgZmxvYXQgYW5kIHdyYXBwaW5n
IGJlaGF2aW9yLiBMb25nZXIgdGV4dCBkZXNpZ25lZCB0byB0ZXN0IGZsb2F0IGFuZCB3cmFwcGlu
ZyBiZWhhdmlvci4KK0xvbmdlciB0ZXh0IGRlc2lnbmVkIHRvIHRlc3QgZmxvYXQgYW5kIHdyYXBw
aW5nIGJlaGF2aW9yLgorTG9uZ2VyIHRleHQgZGVzaWduZWQgdG8gdGVzdCBmbG9hdCBhbmQgd3Jh
cHBpbmcgYmVoYXZpb3IuCitMb25nZXIgdGV4dCBkZXNpZ25lZCB0byB0ZXN0IGZsb2F0IGFuZCB3
cmFwcGluZyBiZWhhdmlvci4KKzwvZGl2PgorCis8ZGl2IHN0eWxlPSJtYXJnaW4tdG9wOjFlbTsg
LXdlYmtpdC1jb2x1bW4td2lkdGg6MzAwcHg7LW1vei1jb2x1bW4td2lkdGg6MzAwcHg7IGJvcmRl
cjoycHggc29saWQgYmxhY2s7IGhlaWdodDo0MDBweCI+Cis8aW1nIHN0eWxlPSJmbG9hdDpsZWZ0
O2JhY2tncm91bmQtY29sb3I6Ymx1ZTsgd2lkdGg6MTAwJTtoZWlnaHQ6MzgwcHgiPgorPHNwYW4g
c3R5bGU9ImZvbnQtc2l6ZToyNHB4Ij48aW1nIHN0eWxlPSJmbG9hdDpsZWZ0O2JhY2tncm91bmQt
Y29sb3I6Z3JlZW47aGVpZ2h0OjIwcHg7d2lkdGg6MTAwcHgiPgorCitMb25nZXIgdGV4dCBkZXNp
Z25lZCA8aW1nIHN0eWxlPSJmbG9hdDpyaWdodDtiYWNrZ3JvdW5kLWNvbG9yOmdyZWVuO2hlaWdo
dDoyMHB4O3dpZHRoOjEwMHB4Ij50byB0ZXN0IGZsb2F0IGFuZCB3cmFwcGluZyBiZWhhdmlvci4g
TG9uZ2VyIHRleHQgZGVzaWduZWQgdG8gdGVzdCBmbG9hdCBhbmQgd3JhcHBpbmcgYmVoYXZpb3Iu
CitMb25nZXIgdGV4dCBkZXNpZ25lZCB0byB0ZXN0IGZsb2F0IGFuZCB3cmFwcGluZyBiZWhhdmlv
ci4KK0xvbmdlciB0ZXh0IGRlc2lnbmVkIHRvIHRlc3QgZmxvYXQgYW5kIHdyYXBwaW5nIGJlaGF2
aW9yLgorTG9uZ2VyIHRleHQgZGVzaWduZWQgdG8gdGVzdCBmbG9hdCBhbmQgd3JhcHBpbmcgYmVo
YXZpb3IuCis8L3NwYW4+Cis8L2Rpdj4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvbXVsdGljb2wv
ZmxvYXQtcGFnaW5hdGUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L211bHRp
Y29sL2Zsb2F0LXBhZ2luYXRlLmh0bWwJKHJldmlzaW9uIDY3NTY3KQorKysgTGF5b3V0VGVzdHMv
ZmFzdC9tdWx0aWNvbC9mbG9hdC1wYWdpbmF0ZS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQg
KzEsNCBAQAotPGRpdiBzdHlsZT0iLXdlYmtpdC1jb2x1bW4td2lkdGg6MzAwcHg7Ym9yZGVyOjJw
eCBzb2xpZCBibGFjazsgaGVpZ2h0OjQwMHB4Ij4KKzxkaXYgc3R5bGU9Ii13ZWJraXQtY29sdW1u
LXdpZHRoOjMwMHB4Oy1tb3otY29sdW1uLXdpZHRoOjMwMHB4OyBib3JkZXI6MnB4IHNvbGlkIGJs
YWNrOyBoZWlnaHQ6NDAwcHgiPgogVGhpcyBpcyBzb21lIHRleHQuPGJyPgogVGhpcyBpcyBzb21l
IHRleHQuPGJyPlRoaXMgaXMgc29tZSB0ZXh0Ljxicj5UaGlzIGlzIHNvbWUgdGV4dC48YnI+VGhp
cyBpcyBzb21lIHRleHQuPGJyPlRoaXMgaXMgc29tZSB0ZXh0Ljxicj5UaGlzIGlzIHNvbWUgdGV4
dC48YnI+CiBUaGlzIGlzIHNvbWUgdGV4dC48YnI+VGhpcyBpcyBzb21lIHRleHQuPGJyPlRoaXMg
aXMgc29tZSB0ZXh0Ljxicj4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvbXVsdGljb2wvZmxvYXQt
dHJ1bmNhdGlvbi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvbXVsdGljb2wv
ZmxvYXQtdHJ1bmNhdGlvbi5odG1sCShyZXZpc2lvbiA2NzU2NykKKysrIExheW91dFRlc3RzL2Zh
c3QvbXVsdGljb2wvZmxvYXQtdHJ1bmNhdGlvbi5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3
ICszNCw3IEBACiAgICAgICAgIDwvZGl2PgogICAgICAgICB0ZXh0IHJ1bnMgaGVyZSBuZXh0IHRv
IHRoZSBmbG9hdAogICAgIDwvZGl2PgotICAgIDwhLS0gSW4gdGhpcyBjYXNlLCB0aGUgZmxvYXQg
Zm9yY2VzIGFuIGVhcmx5IGNvbHVtbiBicmVhay4gLS0+CisgICAgPCEtLSBJbiB0aGlzIGNhc2Us
IHRoZSBmbG9hdCBwYWdpbmF0ZXMgYWZ0ZXIgaXRzIHNlY29uZCBsaW5lLiAtLT4KICAgICA8ZGl2
IGNsYXNzPSJjb2x1bW5zIiBzdHlsZT0iaGVpZ2h0OiA3MHB4OyI+CiAgICAgICAgIG9uZSBsaW5l
IHR3byBsaW5lcyB0aHJlZSBsaW5lcwogICAgICAgICA8ZGl2IGNsYXNzPSJmbG9hdCIgaWQ9ImYz
Ij4KQEAgLTQyLDcgKzQyLDcgQEAKICAgICAgICAgPC9kaXY+CiAgICAgICAgIHRleHQgcnVucyBo
ZXJlIG5leHQgdG8gdGhlIGZsb2F0CiAgICAgPC9kaXY+Ci0gICAgPCEtLSBJbiB0aGlzIGNhc2Us
IHRoZSBmbG9hdCBmb3JjZXMgYW4gZWFybHkgY29sdW1uIGJyZWFrLiAtLT4KKyAgICA8IS0tIElu
IHRoaXMgY2FzZSwgdGhlIGZsb2F0IHBhZ2luYXRlcyBhZnRlciBpdHMgZmlyc3QgbGluZS4gLS0+
CiAgICAgPGRpdiBjbGFzcz0iY29sdW1ucyIgc3R5bGU9ImhlaWdodDogNzBweDsiPgogICAgICAg
ICBvbmUgbGluZSB0d28gbGluZXMgdGhyZWUgbGluZXMgYW5kIHNvbWUgbW9yZQogICAgICAgICA8
ZGl2IGNsYXNzPSJmbG9hdCIgaWQ9ImY0Ij4KQEAgLTUwLDggKzUwLDcgQEAKICAgICAgICAgPC9k
aXY+CiAgICAgICAgIHRleHQgcnVucyBoZXJlIG5leHQgdG8gdGhlIGZsb2F0CiAgICAgPC9kaXY+
Ci0gICAgPCEtLSBJbiB0aGlzIGNhc2UsIHRoZSBmbG9hdCBpcyB0b28gdGFsbCB0byBmaXQgYW55
d2F5LCBzbyBpdCBkb2Vzbid0Ci0gICAgICAgICBhZmZlY3QgY29sdW1uIGJyZWFrcy4gLS0+Cisg
ICAgPCEtLSBJbiB0aGlzIGNhc2UsIHRoZSBmbG9hdCBwYWdpbmF0ZXMgYWZ0ZXIgaXRzIHRoaXJk
IGxpbmUuIC0tPgogICAgIDxkaXYgY2xhc3M9ImNvbHVtbnMiIHN0eWxlPSJoZWlnaHQ6IDQ1cHg7
Ij4KICAgICAgICAgb25lIGxpbmUKICAgICAgICAgPGRpdiBjbGFzcz0iZmxvYXQiIGlkPSJmNSI+
CkBAIC03Niw4ICs3NSw4IEBACiAgICAgdmFyIHRlc3RzID0gWwogICAgICAgICBbImYxIiwgMCwg
NDVdLAogICAgICAgICBbImYyIiwgMCwgNDVdLAotICAgICAgICBbImYzIiwgMTAwLCA1XSwKLSAg
ICAgICAgWyJmNCIsIDEwMCwgNV0sCisgICAgICAgIFsiZjMiLCAwLCA0NV0sCisgICAgICAgIFsi
ZjQiLCAwLCA1NV0sCiAgICAgICAgIFsiZjUiLCAwLCAxNV0KICAgICBdOwogCkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L211bHRpY29sL21hcmdpbi1jb2xsYXBzZS5odG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3QvbXVsdGljb2wvbWFyZ2luLWNvbGxhcHNlLmh0bWwJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L211bHRpY29sL21hcmdpbi1jb2xsYXBzZS5odG1sCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzIEBACis8aHRtbD4KKzxoZWFkPgorPHN0eWxlPgorLmNv
bHVtbnMgeyAtd2Via2l0LWNvbHVtbi1jb3VudDoyOyAtbW96LWNvbHVtbi1jb3VudDogMjsgY29s
dW1uLWNvdW50OiAyOyBib3JkZXI6MnB4IHNvbGlkIGJsYWNrOyBoZWlnaHQ6MzAwcHggfQorLmJs
b2NrIHsgaGVpZ2h0OjIwMHB4OyBiYWNrZ3JvdW5kLWNvbG9yOnB1cnBsZTsgfQorPC9zdHlsZT4K
KzwvaGVhZD4KKzxib2R5PgorVGhlIHR3byBwdXJwbGUgcmVjdGFuZ2xlcyBiZWxvdyBzaG91bGQg
Ym90aCBiZSBhdCB0aGUgdG9wIG9mIHRoZWlyIGNvbHVtbnMuICBJZiBvbmUgaXMgbG93ZXIgdGhh
biB0aGUgb3RoZXIsIHRoYW4gdGhlIHRlc3QgaGFzIGZhaWxlZC4KKzxkaXYgY2xhc3M9ImNvbHVt
bnMiPgorPGRpdiBjbGFzcz0iYmxvY2siIHN0eWxlPSJtYXJnaW4tYm90dG9tOjIwMHB4Ij48L2Rp
dj4KKzxkaXYgY2xhc3M9ImJsb2NrIj48L2Rpdj4KKzwvZGl2PgpJbmRleDogTGF5b3V0VGVzdHMv
ZmFzdC9tdWx0aWNvbC9tYXgtaGVpZ2h0LWNvbHVtbnMtYmxvY2suaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L211bHRpY29sL21heC1oZWlnaHQtY29sdW1ucy1ibG9jay5odG1s
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9tdWx0aWNvbC9tYXgtaGVpZ2h0LWNv
bHVtbnMtYmxvY2suaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5IEBACis8aHRtbD4KKzxi
b2R5PgorVGhpcyBpcyBjYXB0dXJpbmcgY3VycmVudCBiZWhhdmlvciwgYnV0IGl0J3Mgbm90IGNs
ZWFyIHRoYXQgaXQgaXMgY29ycmVjdC4gIEl0J3Mgbm90IGNsZWFyIGlmIG1heC1oZWlnaHQgb24g
YSBjb2x1bW5zIGJsb2NrIGNvbnN0aXR1dGVzIGEKK2NvbnN0cmFpbnQgb24gdGhlIGNvbHVtbnMg
b3Igbm90LiAgWW91IG9idmlvdXNseSBiZWdpbiB0cnlpbmcgdG8gYmFsYW5jZSwgYnV0IG9ubHkg
cnVuIGludG8gdGhlIGNvbnN0cmFpbnQgb25jZSB0aGUgYmFsYW5jZWQgY29sdW1ucyBleGNlZWQK
K3RoZSBtYXgtaGVpZ2h0LiAgSXQncyBub3QgY2xlYXIgdGhhdCB5b3Ugc2hvdWxkIHN1ZGRlbmx5
IHNoaWZ0IHRvIGEgZmlsbC4gIE91ciBjdXJyZW50IGJlaGF2aW9yICh3aGljaCBtYXRjaGVzIEZp
cmVmb3gpIGlzIHRvIGp1c3Qgb3ZlcmZsb3cKK3dpdGhvdXQgY2hhbmdpbmcgZnJvbSBiYWxhbmNl
IHRvIGZpbGwuCisKKzxkaXYgc3R5bGU9Ii13ZWJraXQtY29sdW1uLWNvdW50OjU7IC1tb3otY29s
dW1uLWNvdW50OjU7IG1heC1oZWlnaHQ6NjBweDtib3JkZXI6MnB4IHNvbGlkIGJsYWNrOyBmb250
LXNpemU6MjRweDsgd2lkdGg6NDAwcHgiPgorVGhpcyBpcyBzb21lIHRleHQ8YnI+VGhpcyBpcyBz
b21lIHRleHQ8YnI+VGhpcyBpcyBzb21lIHRleHQ8YnI+VGhpcyBpcyBzb21lIHRleHQ8YnI+VGhp
cyBpcyBzb21lIHRleHQ8YnI+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogTGF5
b3V0VGVzdHMvZmFzdC9tdWx0aWNvbC9wb3NpdGlvbmVkLXNwbGl0Lmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC9tdWx0aWNvbC9wb3NpdGlvbmVkLXNwbGl0Lmh0bWwJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L211bHRpY29sL3Bvc2l0aW9uZWQtc3BsaXQuaHRt
bAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMyBAQAorPGRpdiBzdHlsZT0iLXdlYmtpdC1jb2x1
bW4tY291bnQ6MjsgYm9yZGVyOjJweCBzb2xpZCBibGFjazsgaGVpZ2h0OjMwMHB4Ij4KKzxkaXYg
c3R5bGU9ImhlaWdodDoyNTBweCI+PC9kaXY+Cis8ZGl2IHN0eWxlPSJwb3NpdGlvbjpyZWxhdGl2
ZSI+Cis8ZGl2IHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTtoZWlnaHQ6MjAwcHg7d2lkdGg6MzAw
cHg7YmFja2dyb3VuZC1jb2xvcjpsaWdodGdyYXkiPgorVGhpcyB0ZXh0IHNob3VsZCBwYWdpbmF0
ZSBhY3Jvc3MgdGhlIGNvbHVtbnMuPGJyPgorVGhpcyB0ZXh0IHNob3VsZCBwYWdpbmF0ZSBhY3Jv
c3MgdGhlIGNvbHVtbnMuPGJyPgorVGhpcyB0ZXh0IHNob3VsZCBwYWdpbmF0ZSBhY3Jvc3MgdGhl
IGNvbHVtbnMuPGJyPgorVGhpcyB0ZXh0IHNob3VsZCBwYWdpbmF0ZSBhY3Jvc3MgdGhlIGNvbHVt
bnMuPGJyPgorVGhpcyB0ZXh0IHNob3VsZCBwYWdpbmF0ZSBhY3Jvc3MgdGhlIGNvbHVtbnMuPGJy
PgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgc3R5bGU9ImhlaWdodDoyNTBweCI+PC9kaXY+Cis8L2Rp
dj4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvbXVsdGljb2wvc2hhZG93LWJyZWFraW5nLmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9tdWx0aWNvbC9zaGFkb3ctYnJlYWtpbmcu
aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvbXVsdGljb2wvc2hhZG93LWJy
ZWFraW5nLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzcgQEAKKzwhRE9DVFlQRSBodG1s
PgorPGh0bWw+CisJPGhlYWQ+CisJCTxzdHlsZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIHAg
eworCQkJCXBvc2l0aW9uOmFic29sdXRlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBib3JkZXI6MnB4IHNvbGlkIGJsYWNrOworCQkJCW1heC13aWR0aDo0MjBweDsKKwkJCQktd2Vi
a2l0LWNvbHVtbi1nYXA6MjBweDsKKwkJCQktd2Via2l0LWNvbHVtbi13aWR0aDoyMDBweDsKKwkJ
CQktd2Via2l0LWNvbHVtbi1ydWxlOjFweCBkb3R0ZWQgd2hpdGU7CisJCQkJZm9udC1zaXplOjE2
cHg7CisJCQkJdG9wOjIwcHg7CisJCQkJbGVmdDoyMHB4OworCQkJCXRleHQtYWxpZ246anVzdGlm
eTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6Ym9sZDsKKwkJ
CQl0ZXh0LXNoYWRvdzoxcHggMXB4IDEwcHggYmxhY2s7CisJCQl9CisJCQkKKwkJCXA6Zmlyc3Qt
bGV0dGVyIHsKKwkJCQlmb250LXNpemU6MzZweDsKKwkJCQltYXJnaW4tcmlnaHQ6NHB4OworCQkJ
CW1hcmdpbi1ib3R0b206LTZweDsKKwkJCQlmbG9hdDpsZWZ0OworCQkJfQorCQkJCisJCQkKKwkJ
CQorCQk8L3N0eWxlPgorCTwvaGVhZD4KKwkKKwk8Ym9keT4KKwkJPGRpdiBjbGFzcz0ibWFnIj4K
KwkJCTxwPkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNjaW5n
IGVsaXQuIENyYXMgcGhhcmV0cmEgbW9sbGlzIHBoYXJldHJhLiBTdXNwZW5kaXNzZSBsYWNpbmlh
IG9yY2kgZXQgZmVsaXMgdHJpc3RpcXVlIHNpdCBhbWV0IHNlbXBlciBtYXNzYSB0ZW1wdXMuIFN1
c3BlbmRpc3NlIGNvbnNlY3RldHVyIHRlbXBvciBwdWx2aW5hci4gUHJvaW4gZHVpIGVyb3MsIHVs
dHJpY2llcyB2ZWwgbWFsZXN1YWRhIHZlbCwgdGVtcG9yIGF0IGFudGUuIE5hbSBlZ2V0IG5pc2wg
ZHVpLiBEb25lYyBtb2xlc3RpZSBsZWN0dXMgYSBudW5jIHNjZWxlcmlzcXVlIGJsYW5kaXQuIE5h
bSBub24gbGlndWxhIG1hc3NhLCBzZWQgc3VzY2lwaXQgdHVycGlzLiBFdGlhbSBlZ2V0IGxpZ3Vs
YSBzaXQgYW1ldCB0dXJwaXMgdmVuZW5hdGlzIGRpY3R1bSBpbiBlbGVpZmVuZCBhdWd1ZS4gRHVp
cyB0ZWxsdXMgbGVjdHVzLCB2b2x1dHBhdCBldCBhZGlwaXNjaW5nIGEsIHBlbGxlbnRlc3F1ZSBl
dSBtZXR1cy4gQWVuZWFuIHN1c2NpcGl0IGNvbmd1ZSBtYXVyaXMgYXQgZ3JhdmlkYS4gSW50ZWdl
ciBsZWN0dXMgbGlndWxhLCBjb25zZWN0ZXR1ciBzaXQgYW1ldCB2ZW5lbmF0aXMgaWQsIHNjZWxl
cmlzcXVlIGVnZXQgbmlzbC4gTnVuYyBkYXBpYnVzIHBvc3VlcmUgcmlzdXMsIHZpdGFlIHRlbXBv
ciBuaWJoIGlhY3VsaXMgZXQuPC9wPgorCQk8L2Rpdj4KKwk8L2JvZHk+Cis8L2h0bWw+ClwgTm8g
bmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9tdWx0aWNvbC9z
aW5nbGUtbGluZS1leHBlY3RlZC5jaGVja3N1bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L211bHRpY29sL3NpbmdsZS1saW5lLWV4cGVjdGVkLmNoZWNrc3VtCShyZXZpc2lvbiA2NzU2
NykKKysrIExheW91dFRlc3RzL2Zhc3QvbXVsdGljb2wvc2luZ2xlLWxpbmUtZXhwZWN0ZWQuY2hl
Y2tzdW0JKHdvcmtpbmcgY29weSkKQEAgLTEgKzEgQEAKLTBmODRjZWNjYmQ2Y2M2ZThlYmJhMjkw
YWJmZWRjMDI1ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorZGNhZDJiZWQ0ODg4OTBjYWVl
MmQ3ODI1N2E0YjlmOGMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L211bHRpY29sL3RhYmxlLW1hcmdpbi1jb2xsYXBzZS5odG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3QvbXVsdGljb2wvdGFibGUtbWFyZ2luLWNvbGxhcHNlLmh0bWwJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L211bHRpY29sL3RhYmxlLW1hcmdpbi1j
b2xsYXBzZS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIyIEBACis8aHRtbD4KKzxoZWFk
PgorPHN0eWxlPgorLmNvbHVtbnMgeyAtd2Via2l0LWNvbHVtbi1jb3VudDoyOyAtbW96LWNvbHVt
bi1jb3VudDogMjsgY29sdW1uLWNvdW50OiAyOyBib3JkZXI6MnB4IHNvbGlkIGJsYWNrOyBoZWln
aHQ6MzAwcHggfQorLmJsb2NrIHsgaGVpZ2h0OjIwMHB4OyBiYWNrZ3JvdW5kLWNvbG9yOnB1cnBs
ZTsgfQorPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorVGhlIGZvdXIgcmVjdGFuZ2xlcyBiZWxv
dyBzaG91bGQgYm90aCBiZSBhdCB0aGUgdG9wIG9mIHRoZWlyIGNvbHVtbnMuICBJZiBvbmUgaXMg
bG93ZXIgdGhhbiB0aGUgb3RoZXIsIHRoYW4gdGhlIHRlc3QgaGFzIGZhaWxlZC4gIFRoZSBwYXR0
ZXJuIGluIGVhY2gKK2NvbHVtbiBzaG91bGQgYmUgdGhlIHNhbWUgKG9yYW5nZS95ZWxsb3cpLgor
PGRpdiBjbGFzcz0iY29sdW1ucyI+Cis8dGFibGUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0w
IGJvcmRlcj0wIHdpZHRoPTEwMCU+Cis8dHI+PHRkIHdpZHRoPTUwJT4KKzxkaXYgY2xhc3M9ImJs
b2NrIiBzdHlsZT0ibWFyZ2luLWJvdHRvbToyMDBweDsgYmFja2dyb3VuZC1jb2xvcjpvcmFuZ2Ui
PjwvZGl2PgorPGRpdiBjbGFzcz0iYmxvY2siIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOm9yYW5n
ZSI+PC9kaXY+Cis8L3RkPgorPHRkIHdpZHRoPTUwJT4KKzxkaXYgY2xhc3M9ImJsb2NrIiBzdHls
ZT0ibWFyZ2luLWJvdHRvbToyMDBweDsgYmFja2dyb3VuZC1jb2xvcjp5ZWxsb3ciPjwvZGl2Pgor
PGRpdiBjbGFzcz0iYmxvY2siIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOnllbGxvdyI+PC9kaXY+
Cis8L3RkPjwvdHI+Cis8L3RhYmxlPgorPC9kaXY+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L211
bHRpY29sL3RhYmxlLXZlcnRpY2FsLWFsaWduLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC9tdWx0aWNvbC90YWJsZS12ZXJ0aWNhbC1hbGlnbi5odG1sCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvZmFzdC9tdWx0aWNvbC90YWJsZS12ZXJ0aWNhbC1hbGlnbi5odG1sCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyMyBAQAorPGRpdiBzdHlsZT0iLXdlYmtpdC1jb2x1bW4t
Y291bnQ6MjsgaGVpZ2h0OjM1MHB4Ij4KKzx0YWJsZSBib3JkZXI9MSBjZWxscGFkZGluZz0xMCBj
ZWxsc3BhY2luZz0wIj4KKzx0ciBzdHlsZT0idmVydGljYWwtYWxpZ246YmFzZWxpbmUiPjx0ZD4K
K1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0
ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMg
bG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMg
Y2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxi
cj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBv
ZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBo
YXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1Ro
aXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0
Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90
cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2Vs
bCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4K
K1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0
ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMg
bG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMg
Y2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxi
cj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBv
ZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBo
YXMgbG90cyBvZiB0ZXh0Ljxicj4KKworCis8dGQ+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTo2NHB4
Ij5PdGhlciBjZWxsLjwvc3Bhbj48L3RkPgorPC90cj4KKzwvdGFibGU+Cis8L2Rpdj4KKworPGhy
PgorCis8ZGl2IHN0eWxlPSItd2Via2l0LWNvbHVtbi1jb3VudDoyOyBoZWlnaHQ6MzAwcHgiPgor
PHRhYmxlIGJvcmRlcj0xIGNlbGxwYWRkaW5nPTEwIGNlbGxzcGFjaW5nPTAiPgorPHRyIHN0eWxl
PSJ2ZXJ0aWNhbC1hbGlnbjptaWRkbGUiPjx0ZD4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0
Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90
cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2Vs
bCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4K
K1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0
ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMg
bG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMg
Y2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxi
cj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBv
ZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBo
YXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1Ro
aXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0
Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90
cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2Vs
bCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4K
K1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0
ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMg
bG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KKworCis8
dGQ+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTo2NHB4Ij5PdGhlciBjZWxsLjwvc3Bhbj48L3RkPgor
PC90cj4KKzwvdGFibGU+Cis8L2Rpdj4KKworPGhyPgorCis8ZGl2IHN0eWxlPSJtYXJnaW4tdG9w
OjFlbTsgLXdlYmtpdC1jb2x1bW4tY291bnQ6MjsgaGVpZ2h0OjMwMHB4Ij4KKzx0YWJsZSBib3Jk
ZXI9MSBjZWxscGFkZGluZz0xMCBjZWxsc3BhY2luZz0wIj4KKzx0ciBzdHlsZT0idmVydGljYWwt
YWxpZ246Ym90dG9tIj48dGQ+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+CitUaGlz
IGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48
YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMg
b2YgdGV4dC48YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+CitUaGlzIGNlbGwg
aGFzIGxvdHMgb2YgdGV4dC48YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+CitU
aGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4
dC48YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+CitUaGlzIGNlbGwgaGFzIGxv
dHMgb2YgdGV4dC48YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+CitUaGlzIGNl
bGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+
CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2Yg
dGV4dC48YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+CitUaGlzIGNlbGwgaGFz
IGxvdHMgb2YgdGV4dC48YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+CitUaGlz
IGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48
YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMg
b2YgdGV4dC48YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+CitUaGlzIGNlbGwg
aGFzIGxvdHMgb2YgdGV4dC48YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+CitU
aGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4
dC48YnI+CitUaGlzIGNlbGwgaGFzIGxvdHMgb2YgdGV4dC48YnI+CisKKworPHRkPjxzcGFuIHN0
eWxlPSJmb250LXNpemU6NjRweCI+T3RoZXIgY2VsbC48L3NwYW4+PC90ZD4KKzwvdHI+Cis8L3Rh
YmxlPgorPC9kaXY+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L211bHRpY29sL3Vuc3BsaXR0YWJs
ZS1pbmxpbmUtYmxvY2suaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L211bHRp
Y29sL3Vuc3BsaXR0YWJsZS1pbmxpbmUtYmxvY2suaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2Zhc3QvbXVsdGljb2wvdW5zcGxpdHRhYmxlLWlubGluZS1ibG9jay5odG1sCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDE5IEBACis8ZGl2IHN0eWxlPSJ3aWR0aDo3NTBweDsgLXdlYmtp
dC1jb2x1bW4tY291bnQ6MjsgYm9yZGVyOjVweCBzb2xpZCBibGFjazsgcGFkZGluZzo1cHg7aGVp
Z2h0OjMwMHB4OyAtd2Via2l0LWNvbHVtbi1ydWxlOiAycHggc29saWQgZ3JleSI+Cis8ZGl2IHN0
eWxlPSJoZWlnaHQ6MjUwcHgiPjwvZGl2PgorPGRpdiBzdHlsZT0iZGlzcGxheTppbmxpbmUtYmxv
Y2s7IGJvcmRlcjoycHggc29saWQgZ3JlZW4iPgorQWxsIG9mIHRoaXMgdGV4dCBzaG91bGQgYmUg
aW4gdGhlIHNlY29uZCBjb2x1bW4uPGJyPgorQWxsIG9mIHRoaXMgdGV4dCBzaG91bGQgYmUgaW4g
dGhlIHNlY29uZCBjb2x1bW4uPGJyPgorQWxsIG9mIHRoaXMgdGV4dCBzaG91bGQgYmUgaW4gdGhl
IHNlY29uZCBjb2x1bW4uPGJyPgorQWxsIG9mIHRoaXMgdGV4dCBzaG91bGQgYmUgaW4gdGhlIHNl
Y29uZCBjb2x1bW4uPGJyPgorQWxsIG9mIHRoaXMgdGV4dCBzaG91bGQgYmUgaW4gdGhlIHNlY29u
ZCBjb2x1bW4uPGJyPgorQWxsIG9mIHRoaXMgdGV4dCBzaG91bGQgYmUgaW4gdGhlIHNlY29uZCBj
b2x1bW4uPGJyPgorQWxsIG9mIHRoaXMgdGV4dCBzaG91bGQgYmUgaW4gdGhlIHNlY29uZCBjb2x1
bW4uPGJyPgorQWxsIG9mIHRoaXMgdGV4dCBzaG91bGQgYmUgaW4gdGhlIHNlY29uZCBjb2x1bW4u
PGJyPgorQWxsIG9mIHRoaXMgdGV4dCBzaG91bGQgYmUgaW4gdGhlIHNlY29uZCBjb2x1bW4uPGJy
PgorQWxsIG9mIHRoaXMgdGV4dCBzaG91bGQgYmUgaW4gdGhlIHNlY29uZCBjb2x1bW4uPGJyPgor
QWxsIG9mIHRoaXMgdGV4dCBzaG91bGQgYmUgaW4gdGhlIHNlY29uZCBjb2x1bW4uPGJyPgorPC9k
aXY+CisKKzwvZGl2PgorCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvbXVsdGljb2wvY2xpZW50
LXJlY3RzLWV4cGVjdGVkLnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtl
ZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gYXBwbGljYXRpb24vb2N0ZXQtc3Ry
ZWFtCgppVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBeUFBQUFKWUNBWUFBQUNhZG9Kd0FBQUM3bWxE
UTFCSlEwTWdVSEp2Wm1sc1pRQUFlQUdGClZNOXJFMEVVL2padXFkQWlDRnByRHJKNGtDSkpXYXRv
UmRRMi9SRmlhd3piSDdaRmtHUXpTZFp1TnV2dUpyV2xpT1RpMFNyZVJlMmgKQi8rQUhucndaQzlL
aFZwRktONnJLR0toRnkzeHpXNU10cVhxd001Kzg5NDM3MzF2ZHQ4QURYTFNOUFdBQk9RTngxS2lF
V2xzZkVKcQovSWdBanFJSlFUUWxWZHZzVGlRR1FZTnorWHZuMkhvUGdWdFd3M3Y3ZDdKM3JaclN0
cG9IaFAxQTRFZWEyU3F3N3hkeENsa1NBb2c4CjM2RXB4M1FJMytQWTh1eVBPVTU1ZU1HMUR5czl4
RmtpZkVBMUxjNS9UYmhUelNYVFFJTklPSlQxY1ZJK25OZUxsTmNkQjJsdVpzYkkKRUwxUGtLYTd6
TzZyWXFHY1R2WU9rTDJkOUg1T3M5NCt3aUhDQ3htdFAwYTRqWjcxak5VLzRtSGhwT2JFaGowY0dE
WDArR0FWdHhxcAorRFhDRkY4UVRTZWlWSEhaTGczeG1LNzlWdkpLZ25DUU9NcGtZWUJ6V2toUDEw
eHUrTHFIQlgwbTF4T3Y0bmRXVWVGNWp4Tm4zdFRkCjcwWGFBcTh3RGgwTUdneWFEVWhRRUVVRVla
aXdVRUNHUEJveE5MSnlQeU9yQmh1VGV6SjFKR3E3ZEdKRXNVRjdOdHc5dDFHazNUeisKS0NKeGxF
TzFDSkw4UWY0cXI4bFA1WG41eTF5dzJGYjNsSzJibXJyeTREdkY1Wm01R2g3WDA4ampjMDFlZkpY
VWRwTlhSNWFzZVhxOAptdXdhUCt4WGx6SG1naldQeEhPdysvRXRYNVhNbHltTUZNWGpWZlBxUzRS
MVdqRTMzNTlzZnpzOTRpN1BMclhXYzYySml6ZFdtNWRuCi9XcEkrKzZxdkpQbVZmbFBYdlh4L0dm
TnhHUGlLVEVtZG9ybklZbVh4Uzd4a3RoTHF3dmlZRzNIQ0oyVmhpblNiWkg2Sk5WZ1lKcTgKOVM5
ZFAxdDR2VVovRFBWUmxCbk0wbFNKOTMvQ0ttUTBuYmtPYi9xUDI4ZjhGK1QzaXVlZktBSXZiT0RJ
bWJwdFUzSHZFS0ZscFc1egpyZ0lYdjlGOThMWnVhNk4rT1B3RVdEeXJGcTFTTlo4Z3ZBRWNkb2Q2
SHVncG1OT1dsczA1VW9jc241TzY2Y3BpVXN4UTIwTlNVdGNsCjEyVkxGck9aVldMcGR0aVoweDF1
SEtFNVF2ZkVwMHBsay9xdjhSR3cvYkJTK2Ztc1V0bCtUaHJXZ1pmNmI4QzgvVVhBZUl1SkFBQWcK
QUVsRVFWUjRBZXpkQjVRazExbi8vVnRWWFQwcmF5MDU4YmVKdHNFa3kyU1FURFpnTWh3eUl1ZU1E
aGxlWHBMSk9TT1N5WEFJSWhvVAovb0FCbTNBTWtnSDd2RWlBalRFbUdXeURjWkJsZDFlNDcrOTNl
MjUxYld1bWUycG5abmUxODYyek5WVmRYVjFkOWVtdzg4enozSHVMCnFDa3dJWUFBQWdnZ2dBQUND
Q0NBQUFKSEZIalNrNTRVbXFZSkQzclFnOEtyWHZXcXRGNFVSVGgzN2x5WXorZWhydXUwek90VlZZ
V3UKNjlLK3N5TStCN3NoZ0FBQ0NDQ0FBQUlJSUlBQUFrbGdOcHVGaHovODRlR1JqM3hrS01zeUxK
ZkxjUGZkZDRkNzdya24zWGJnc2JlMwpOd1FoT1FCNTVTdGZHUWhBZUJNaGdBQUNDQ0NBQUFJSUlJ
REFKQUVIRkE0OFBPZGc0L3o1OCtGbEwzdFpDa1NjQWZGOURsUThlMzluClNMd2tBSmxFemM0SUlJ
QUFBZ2dnZ0FBQ0NDRGdBQ01IRlE0c1BIdnl0bHgrNVF5STV4eU11QVRMdHdsQWVQOGdnQUFDQ0ND
QUFBSUkKSUlEQVpJSGNsTnpMdnUvREsxN3hpdkR5bDc4OFpUeDhPODgrY0E1UXZFNEFZZ1VtQkJC
QUFBRUVFRUFBQVFRUU9MS0FnNDRjZ0N3VwppL0RDRjc0d0JTQU9OSnpsY0FOMXR3dng1RklzQXBB
ajA3SWpBZ2dnZ0FBQ0NDQ0FBQUlJYkFya29NTEJ4L09lOTd6d3JHYzlLN3pvClJTOEtMMzNwUzFN
YkVQZUc5ZUFIUHpnODZsR1BDamZkZEZONDZFTWZtc3F6SExTUUFkblU1RFlDQ0NDQUFBSUlJSUFB
QWdoc0ZYQjUKVmR1MjRablBmR2I0dzZjOU0vekZzOHZ3dkh0ZUoveDMvYlpoNzVvUUhqcDdjWGlO
Ly83WDhGclBlVnA0OXJPZkhSNy8rTWVIUnovNgowU2xyUWdDeWxaWTdFVUFBQVFTdUpJSEgzTFFZ
VHVlR0cxZXAvV0hETVZidXVtTStQUHJPMi9lR2RWWVFPT3NDdi83cy96eDFnZzk5CjQ5Yzg5ZWU0
VkUvd2J1KzJmcWJIUFc2OWZ0eTFwejF0ZllTblBuVzlmam5Ybk1sdzJkVnZQK1haNGZmKzlrSGhu
NXJYRGVYMWRiai8KZFh2aCt1dnFVSi83UDJGeDdzM0NmN3prYjBQNy9HZUc1di8rMzFTSzlZaEhQ
SUlNeU9WODRYaHVCQkJBQUFFRUVFQUFBUVR1cXdMUAovUC8rTlR6bHp1dkNQeTFlS3hRUFBoZnVm
LzFlZU9EMTgzRDkrVHBjZDgwODNHK3ZEUFdESHh0ZS9SOTErSmNYL25sNHhqT2VrUVl1CkpBTnlY
MzNGT1c4RUVFQUFBUVFRUUFBQkJDNlRnQnVZLy9VLzF1RTVMMzlJS0I0eUM5ZGR0d284cmo4L0R3
KzY3bHk0N3RwejRYNzMKMnd2bmFuWFIrNkIzRFM5NXhyK0UvL2lQLzBnekFjaGxldEY0V2dRUVFB
Q0I2UUxqc3F1YmI3bDcrZ0VPZWNSdHQ1NGYzVU1KMWdpRApWUVFRbUNBd0xydDZ3aE1tUFBBK3VP
dXJYLzNxY05lL2FMVHphL2ZDT3o3MlllRWhENmpEaS9XMS9NcGxFYTY1NXBwd3pmMnVEZGNwCkdM
bm0ydnVGU3RlM2ZOMjNEdmY4MjIrR2w3emtKYUc4RDE0dnA0d0FBZ2dnZ0FBQ0NDQ0FBQUtYVWND
TjBQL3RSYlB3MkxkNlNIamMKbTEwZjN2emg1OE5iUCtMYU1KK3AvY2VzQ3VmMlZJS2w0T05hL1gz
bi90ZUY4SkRYZjV0d3p6MzNwTzU1Q1VBdTR3dkhVeU9BQUFJSQpJSUFBQWdnZ2NGOFVjQ1AwVnk3
cjhLYVBPSysySGxXWWxjV3duRGtJbWM4MUlHSFFtQ0FobkxzMmhBYzg3RUhyY1VIdWl4Zk1PU09B
CkFBSUlJSUFBQWdnZ2dNRGxFNmdxRjFiMTRmNzNVL0JSYUtSejNhb1VjSlJWRWNvaWhrcHBEbzAv
R0JTSGhKbUNrS29PcVF0ZWp4OUMKQnVUeXZXNDhNd0lJSUlBQUFnZ2dnQUFDOTEyQnVIL3FHdjNj
cXc1Q0ZHYUVvcXcwOHJrQ0VNM2VYaXY0bUNrUXlhT2hFNEFrS0g0ZwpnQUFDQ0NDQUFBSUlJSURB
SklHdWMxb2pkR29Qa29LUFB0ME1VYmYxVC9rUjNkYVBybDBkMVFFSUdaQkp3dXlNQUFJSUlJQUFB
Z2dnCmdBQUNnOEJEcmxYNVZhRUFaSlhwYUxxWWdvNWVSVlpkbW9OR1M5ZDlTbmtvVGtsVENrS0dB
N0NDQUFJSUlJQUFBZ2dnZ0FBQ0NFd1EKNkJWOXVLU3E2V05xNDlFcUtkTG9SNnZJUS9HSUFoRUZJ
ZnF4SEdWQkdBZGtBakM3SW9BQUFnZ2dnQUFDQ0NDQXdGb2d1cVc1R251bwppVWRvMVJxOVZ0djBt
UnFpMXpPTmdxNjZMSFdJRmRRamIralByUjlERzVDMUJXc0lJSUFBQWdnZ2dBQUNDQ0F3UmNCQmht
WjFmTFhxCitVb3Jjd1VodFFJVEJ5Q0tQMEtsKythanFHTzBPdVdaRHQ3MzdydnZEdi8yYi85MjhK
MFR0L3BZSHE3OXNHbXhXSVNuUC8zcGg5MTkKck8yN252dFlCOTkvY0tkR08vL3dELzl3RW9lNnFH
T2M1R3QxMEFuc2VuMU84L3IvNTMvK0ovempQLzdqUWFjMWVkdXVZNTNtZFd5ZQo3SzV6bWZxYWJy
NUd1NDYvZVQ1VG4rK2d4MSt1ei9qbXVWeE50M2U5cnE5NjFhdkM4NS8vL0ZPNTVGM3ZpYW52c1ZN
NXlVdDgwRjBtCmwvaDAwdE9kOWpsdHZnYzNyM0hYOTZiUGI5dDN3K2J4cnJiYkwzclJpOElmLy9F
ZnA5R2lkMTNicnRmeUxIN210cG5odFUzbjR1OHIKbE9rb2xBRXBIWVZvcXVlMXV0eXQxQ1d2dDYy
NjRuVVd4TjN5NW1tMG1qZGR1UHlBRC9pQThNQUhQakM4ei91OFQvaklqL3pJNEQ1LwpIL25JUjRZ
UC8vQVBEKy8wVHUrVWJ2L3N6LzVzK0lWZitJWHcwSWMrTlB6Y3ovM2NoUWU0aUZzLytxTS9HaDc4
NEFlSFgvbVZYem53CjBiZmZmbnQ0MjdkOTIvQ2hIL3FoQjk1L25JMjdudnM0eDg2UGZjWXpuaEhl
OGkzZk1uekdaM3hHM25SSmx5ZjVXaDEwNHJ0ZW45TysKL3EvNW1xOEpIL3pCSDN6UXFVM2V0dTFZ
cDMwZG15ZTc3VnltdnFZSHZVYmJqcjk1TGxPZmIvUHh1ejVuQjUzZjVqRzRmVytCZzl6RwpyK3R0
dDkwV1h1dTFYaXQ4OTNkLzk3MGZmTXd0UjNsUGpNL2xtRTkzV1I5K09mNWZQS2tMUHNycmRKem5P
dWc5T0Q3ZXJ1L05YZDhOCjQyTmRqZXRQZk9JVHd5LzkwaStGUC9tVFB3azMzSEJEY0RCMzJIU1Ux
L0pxK2N3ZFpqQmxPMTVUdENidTYreUhPdHQxbDd0bFVZWksKNjU1THpSb1FQU2dlQ2FySVNuTSs4
czRBcEdtYThEZC84emZoOTM3djk4SXYvL0l2YXpDUmVYamM0eDRYZnZWWGZ6WDgrWi8vZWZpTwo3
L2lPOE9wWHZ6cDh6TWQ4VEhqNHd4K2VqM3VzNVdkKzVtZW1vT2V3Zzl4MDAwM2hrejdwa3c2Nysx
amJkejMzc1E2Ky8rQzNlN3UzClM0YTFPMFcrRE5OSnZsWUhuZjZ1MStlMHIvL3J2LzdydzVPZTlL
U0RUbTN5dG0zSE91M3IyRHpaelhQeGYweFBmZXBUMDI1VFg5T0QKWHFQTjQyOCsvL2oyVVo1dmZI
N2p4M3A5MStmc29QUGJQQWEzN3kxd2tOdjRkYjM1NXB2VEx6WDNmdVRGYlJtL3hrZDVUNHpQNWVL
ZQo4Y3A0MU9YNGYvR2tydndvcjlOeG51dWc5K0Q0ZUx1K04zZDlONHlQZGJXdHYvS1Zyd3hmOUVW
ZkZHNjU1WmJ3ZFYvM2RlSFhmdTNYCk5JSzBSbThiVFdmMU16Y2ltTFNLMXlTdWk5OVp2V0JWYVY2
TmhwNkNEYVU3WmlyQjhsaUZ6b3M0RU5IUUlNTzBNd0R4aDhFWmo4TW0KZjFrNFN2ZmtYNmp6QUNP
SDdYL1U3YnVPNVVEb3BKNXI4NXgyUGZmbS9sTnU5KzRVV2ROTVk5TzdIK1RqVGpIM2FiYmpRSnY3
bmVZMQorbFFPZTMxTyt2b1B1bXhuejk3d0RkL3dvTHNtYnp2c1dKZmlPalpQZG53dS9nWG80ei8r
NDhPZi9kbWZEYnROZlUwM1g2UHg4WWVECmFtWHp2WlB2Mi9aOEI1MWZmbHhlYm51ODk5azh2L3k0
azF3ZWRtM0hmUTczL0hGUzA5UnozSFRiZkYzOUM4MUpmSGNlOUJydmVrMDMKenlVYlRiM0cvTGpM
dGJ4Yy95OWU3UFZ1K3U1Nm5TNzJlZkxqTnQrRGVmdFJ2emRQKy96eStWeHB5Ny85Mjc4TnkrVnkr
TjNnSGQ3aApIUzQ0eGJQOG1ic0E0b2czOERvaTFBbnNGdFhtbzFUQTRReUl5NndjZ0RqNzRkSFFY
WldWQmlIMGN2UnI3MmoxNERONDcvZCs3NFB2CjJOOTY3YlhYaG5kOHgzY2M5dkVYakZOK3IvZDZy
eGNlODVqSGhILys1MzhlN252aEMxK1lvdnQzZmRkM0RXL3pObThUL3ZJdi8zSzQKNzZDVmUrNjVK
M3pKbDN4Skt1M3kvbi8vOTM5LzBHN0JaUVd2L2RxdkhYN2dCMzRnM2UvMDVSdS84UnVIei9xc3p4
cjJQOG5uZGcyaAovMEx4eFYvOHhhblU1L00rNy9PQzY2bzlPVnZrb095cnZ1cXJ3amQ5MHplRjEz
aU4xd2gzM0hGSDhMVjh6dWQ4VHZqR2IvekdkRjUvCjlWZC9OWnliVnc0N3Y4T081MnYrNFIvKzRm
RHQzLzd0WWZOTGFuemdiZnR0ZTYyMlhlTlJ2TWZuNFBWZDE3KzV2ejIvOGl1L01uemIKdDMxYjhG
OXR2L003djNQWVpkdTUvZWQvL21jeWVmdTNmL3UwdnpNRUgvVlJINVhlUnoveEV6OFIzdUFOM2lD
OHladTh5UVh2eThPZQphL05ZUHVDdTZ6anNkUnhPZm4vbDEzLzkxOU43NDBNKzVFUENTMS82MHZE
VFAvM1Q2Zlo3dnVkN2h1Yys5N2xwTDVmSnZQTTd2M1BLCk1HNmV5L2QrNy9lR0p6LzV5U25UODRt
ZitJbkJmem56dE8wMVRUc2M4bVB6K043TjErcjMrVGQ4d3plRTkzcXY5MHFPZmozR1FjOWgKejNm
WStXMCt2Wi9qY256R0QvdGNPSnZyOC9uV2IvM1c0TmZHbjJXL2Z6d2Q1WDMvUjMvMFIrazk2OWZP
MzR0MzNubG5ldXhobitOdAo3NWZEempFZDhJZy9EbnBkeHc5OTVqT2ZHZndYYVgrWFBldFp6MHAz
YlR1bjhXTVBlNDBQZTA4Y2RDNkhYYVBmY3o2dkszVzZGUDh2ClhzeDdadFByTUYvdmQ5anI1UHUy
ZmNjZTVYUGdZNHluWGQrYjQzM3orcmJ2aHFPK1I0L3kvYi90V28veStLT2VpNjlyMjNQOStJLy8K
ZVBqYXIvM2ExRzNwNTM3dTU2YnZvV3lSbDJmdE03Zk42N0RQUjdieThxeDVqYS85a3EvckQrcEtn
S1JzUjZrb1pLWjBoM3ZCbWluNgpxRlRzNDJDamNDWkUrd3lUL2pJeWFUcDM3bHhVK2RPQmozbnpO
My96K0JadjhSYnhELy93RDZNYW8wZjlvaGMvN2RNK0xlMnJ2d2pHCjkzM2Y5NDB2Zi9uTG94cWdS
ZjNISHZYTGVmemYvLzNmQTQvMU9xL3pPbEdabGFoZnNxSWFZOFZIUE9JUjhmVmYvL1dqSXRxMC8v
ZC8KLy9mSGh6M3NZY05qRllCRS9jSS8zTll2VFBFalB1SWowdTJUZnU1M2VaZDNpV3Iza282dHYx
YkVHMis4TWFvbU9OMytpNy80aTZnMgpNMUZ0UEtMSzFOSjFQdWM1ejRudi8vN3ZIeFVZcFgxOC9h
ckRqdnBsYytmNUhYUzh2L3U3djR0cUE1TWU2eDlmK0lWZm1FeUhEZnNyCnRqcHN2MjJ2bFIrKzdS
cDkvelp2MzcvNStteTdmdSsvT2FuTlVmUzFlMUt3cHI0VFF2enJ2LzdyZEh2YnVhbnhYbFRnR1Iv
eWtJZWsKZmYvcnYvNHJ2dEVidlZGNkwvN1diLzFXVk9QYnFPQTBmdnFuZjNxNjN6OE9lNjdOWTNu
ZmJkY3g5WDMyMW0vOTF2RlRQdVZUZk5nMApQZTV4ajR1Zi9NbWZuRy9HMy9tZDM0ay85Vk0vbFc0
ZmRDNytUSHp6TjMvenNQK3UxM1RZY1g5bC9Cb2RkSHdGOUZHL21LYTk5WmU1CjlCb29BRW1HM3Jq
citUYlBiLzlwaDhYbCtveHYrMXo0Yy95THYvaUx3em42dG40UkhtNXZlOThyMVo4K0YvNis4cVJm
SnVLSGZkaUgKcGZXRFBzZjZnOHFoMzRuYnpqRWRjTXVQWGEvcnU3Lzd1MGY5MFNRZDRVZCs1RWZp
ei96TXp3eEhtL29lM255TnQ3MG5OdDlqMjY3eApCMy93QitNSGZkQUhEZWMxWHZuSVcxNGU4L3hy
Ly9DQ2VGSnpQcWFYVTZmVCtIOXg2bnRtODV5MytXNTduWHljYmQreHZuL2I1OEQzCmo5K0R2cjN0
ZTlQM2IwN2J2aHVtdkVlUDh2Mi83VnAzUFg3S3VmZ2F0ejJYNzFlWnUzb3pMYjE2NkhRNVBuTW45
Um5iZHB5RExuaWIKMTBHZkQvK3V0VGxkRGk5OTlldjdmelZ2bnM5eGJ1ZGplbm1sVEdxckhjUGIv
MWI4MGw5OGZ2eWhwNzR3L3VBZnZUQis5MU5lSEcvKwpzZitNdC96S0srSlhQU1hHNy9xckdIOU1M
ODB2dmpqR24zcCtqQi8zY1I4WC9iaWRHWkFoVWpuaWlodm52Y2Q3dkVmUUYwaDR0M2Q3CnQ2R25K
N2NmRVZqNjY2bmJrN3ptYTc1bWVQR0xYeHorOUUvLzlOQWpmOEluZkVMNHdBLzh3SFFjLzBYeWVj
OTdYbEJ3YytEKzExeHoKelFWbEJmZTczLzJHMnlmNTNENTN0MzNKZnhWMXFsaS9SSWJmL3UzZkR2
cEFoTWMrOXJIcEwreHYrcVp2R3ZUTFI5Qi84TUc5VVB6dQo3LzV1eUg4MWMrblYrNzNmK3czWHNl
MzhEanFlc3lyK2E2V1A2VW0vVENmYjRZRDdLLzdMK3JiOURudXRkbDJqRDcvTmUvTThuT25hCmR2
MmIrN3YzRC85bDFyWEVucHo5c3FQYkdPMDZOOXU4Mlp1OTJlRGhqaEdjOWZBMlg2K1BvVi9Bd3JP
Zi9leDA3RzNQdFhtc1hkZXgKN1hWTVQ3YnhROEZHK1AzZi8vMzBsMGpmOWZqSFB6NG9TRXAvQWZO
dHY5Y1ZSSHMxWlVmRzE1VTI2c2RtS2MxaHIybmUvN0RsNXJWNgpQM2NvNFpJWlQ4NW1laDlQNDda
ZXU1NXY4L3pTQVVZL0xzZG4vTERQaFQvWGZwL3FEeVhER2ZxOU01NjJ2ZS85WGVDT01mUkhtUFFR
CjIrV3M3VUdmWTcvSEQvdE9QT3djeCtkeWxQV0RYdGY4T0grbWZJNStEZkkwOVQzc3gyMit4b2U5
SnpiUFpkczFPbHQ4VXUyNDhyVmQKenVWaEp0dThwNzVuTnE5dm02LzNQZXljZG4zSCtySGJQZ2Ur
Znp6dCt0NGM3enRlUCt5N1ladlorUEZlMy9YOXYrdGFkejEreXJucwplcTdOYzk5Mit5eDg1blo1
SGZUNU9LejAraXg0Ylh1L1hJcjdQTzVIVENPaGUwVDBxTjlqK3REcXo1WmFUYU9pK3krWXJreHVs
dXV6Ck9mRUFaUHhDdS9jc3A5QTgrWmR6LzJmbjJsRFBMazk0eWxPZWtuNjVYSi9PaFd2WFgzLzlz
TUZ2Tms4WDA3M3FTVDYzeTZuOEg2bC8KMmNpVE1pQnAxYjlRZVBLWGMvNWx6YmVmOXJTbnBhRGtB
UTk0Z0crbTZmejU4OE4vM0x2T2IvTjQrdXQrK2tYSHdabFR0WXJ3VTI5aworZGg1dVd1L3cxNnJv
MXhqZm82akxIZGQvK1l4SEpTNnJHeDhmaTZGOGZ2bktPZm14NDBmdTNuNy92ZS9meXByOHZOdWV5
N2ZQMzdzCnJ1dlk5VHI2ZU9QcG96LzZvMU1Rbmt1YVhLN2pVaXFYOGJnVXlDVVNMbkhNMC9oY3h0
dnl1cGZqNng1Ly9zYjdITGErZVh3NytacnkKcEl6akVCVG1iYnVlYjN4L2ZzeDRlVGsrNDRkOUx0
enJqTXZ6eHVlMGFUSSs5ODExNzZ1Ly9LYVNPcGVxK1hpdmVNVXJodDAyUDhmYgozaStIbmVOd3NB
a3JCMTJEQXkyWGlPWS9pdVREYlR1bnZNL21jdk0xSHQvZWZBK096K1VrcjNIem5LNjAyNGVaN1BL
ZThwN1p2T1pkCnZvZWQwMUcrWXplZmE5dnRYZCtiaHoxMi9Ea2MvLysveTJ6emVPUDNuTzhiZi84
ZjVWcTNQWDdLdVJ6bHVUYlAvYkRiNDlmTys0eHYKWHkyZnVhTjRiWDQrenJMWFlkZCt5YlpydVBO
Q29ZYTcySGJUNU00QlNCb0pYWUZIc3hvQlBUVlpkaVN5UDEyeWtkRC8rNy8vT3pXOAo5bDk1TDJi
eVgxMzl4ZUY1Nm5TU3orMit5WDA4QjFZT0lqejVMOU51Vko3cjhEZlA3OS8vL2QvVFl6YTM1eStO
aXprL2R5Zm43alMvCjcvdStMN1U3OFYvU3I3dnV1czJuU04wakgyVy84UU5kZXp2MUdzZVAzMXpm
ZGYyYis3dW1OdGZPYjk1MzB1ZTI3YmsybjN2WGRVeDkKSFIxUSthK1FQLy96UHg4Y25McHJhV2ZI
M0licFpTOTcyWWwxSmJ4NUhVZTlyZEsrMU51Y0cwYTY0Ykt6aW02L2RWclRwZnlNSC9UNQplY0VM
WG5Da2Z2ZTNYYis3RUhVbTVTZC84aWVEYTdyOW4raGgwNjczeTBIbmVOQm4vTERqYjl2dXRrVU9r
TDdnQzc0Z3VHMVVubmFkClU5N3ZwSmFuZVkwbmRZNm5lWnlwM2xQM3Z4amZrLzZPM2ZXOWVSVGY4
WGZEVklOdHh6L3V0VTQ1bCtNKzE3YnJtSExmeGJ3bnBoei8KcFBiRjY2UWtMODF4VnYydUtLZWhO
aDZPTVhwMXhkczZFNktzU0tmYjNxYStjOEppMUQvTEpRdEFIcW1ldFB5ZnN2K3lxM3JaSk9MeQpB
LzhucU5yM2RIdmJELzl5NEw4bXZ0VmJ2ZFdodS9rdnhnZE5KLzNjanZEY2w3bEx6RHlwdGptVnpi
anM2cURKQVlETHpWU2ZHTlFlCjRWNjdURDAvMWFXbTBvM3YrWjd2U2VVaUx2dndMNjJiNDRvY2Ri
L05FL0pmZ1k5eWpZZDVieDV2MS9Wdjd1Ly9iSnpwK3FkLytxZFUKUHVYNy9WNXhPZGxSejIzem1J
ZmQzdlpjbSsrMVhkY3g5WFgwT2FrOVZTcUJjVmJRZjVIMis4cGo3RGpENWw5bWQwMDVpTjIxMzhY
Ywo3ekpCbC9jNUZhNmE3NkhMM3luSG1uSitsK296ZnRqbndtV2h2dTlmLy9WZlV5Y2F2azYvN3ph
bnc5NzNhcHVWT3Byd2RZd3pwSnVQCno3ZTN2Vi84UHZkejcvcU01Mk5OWGZvUE9TNnhVNDExS2dk
MXVhaW5iZWQwMlBmMGxOZDRmSjZIdlE2YjMyUGp4M2o5cmp2bXc2YmIKYmwzOUVXalljSXlWOFhH
UGNaaEpENTNxUFdYL2kvVTk2bmZzWVorRFRZQmQzNXViK3g5MGUvemQ0UDhianZPN3hQajRSNzNX
OFdQRwo2MU5laitNKzEvaDVML1ZuYnZ6Y2wycjl2dXlsb3BkVG1jYkhmY0lUVHVVcEx2cWdNWFlx
dDFJR3hQOW45a1g2bmJoWEFPTC9RWjBCCmFSU0ZOUDRWZmRRSWZWSUpscjl3M0VYY1MxN3lrZ05Q
MGhHcjV6eTVkNkhjTzlUSGZ1ekhwcDZlWEVxamh1ZnBsM2IzQ1g5WXpaNlAKNFYrQzgrUmFmUTh1
bCt1cmZSNXFaSmZ2VGxrSUQ0RGs3ZjZ5OGkrdmJudmg2U1NmMnpYNWJ0L2k4ckU4dVVjcmYxZzhX
S01uTlV3YgpydHUzM1l1VE15U3V1YzZUUjBIM1gwOThqYnZPYi9ONHZpNzNST0xKdlJPcHNlYVFq
Y25IOTNMYmZ0dGVxNk5jbzdNK2gzbjd1Y2V2Cno2N3I5LzdqeWZzN1NIVWJDZGZRZS82eUwvdXk4
THF2KzdxcFRjUXVmMStiMzNmNWwwZWZ5L2cvUzkrZjMxdmJuc3ZuTkQ3V3J1dlkKOVRxT3J6R3Z1
NzJCc3dzZTROTWxCMjZmNHI5eSs1Zmh6ZjlreHVmaXh6dHI0cjh1ZXZKbnl2ZDd6dFA0ODVlM2pa
ZmoxOGpiTjQvdgpmdWdkTUx1WE40OGQ0SFQzZU5yMWZKdm5OMzVzWHMrdmcyOWZxcy80WVorTC9Q
bk5uMVAzSCsvc1QzNGYrUnkzdmUvOVB2WDd6SUdJCnI4dC9YUEVmWFB4NHo1dWY0MjN2bDhQTzBl
ZmdQOFI4OVZkL2RjcDgrdmJtdE90MTlYbjRmRnptK09WZi91WGhVei8xVTRlMmV0dk8KYWZONWZI
dnpOZDcxbmhpL3g3WmRvOHNTSFh4ZHpzbXZ2enA1R0Q1amg1M0xhZjYvT09VOXMzbCsyM3kzdlU2
WCsvcy9YOGRoM3cxVAozNlBidnYrUGNxM2JIai9sWEk3eVhPcWtKMzJIK1BVNWJMcWFQM1BqYXo2
SzErYm5ZL3o0dkg0MWV4MzFPeXBibk9heWNLWkQwVWFNClJWaDBwZHFCNkxabXR3Tko2L3AxM3NI
STZOZjY5QmMrL1YrMGUxSkpUT3JSU1krUCtrVXBmdGQzZlZkVW1jandRUGY0NU40Ykh2M28KUjBl
MWhZanFJaTBxSXhEMWkzZnF5Y283cXR2WXFGKzJvbjZ4U2oxZy9jWnYvTWJ3K00yVkp6emhDVkgv
MlVjMVBvL2Y4aTNmRWovLwo4ejgvOWFEbC9mU0xiMVREWkY5TC9LRWYrcUhvM21kVU54OVYwcEo2
eXZyU0wvM1MxQk9TR3NPbkhyVDhtSk42YmgvTDErYnIxQ0NNClViWFVVUTNTbzM3NThGMVI1VFJS
ZGZ0UnYwQkdCUWxwVzk2dXZ6b21FNDBvSDlWK0krb1hnTFMvN3ovcy9BNDZubDhMTlk2TitndDUK
L00zZi9NMm9CcHRENzJEREUycmxzUDJPOGxwdHUwWS94emJ2ZzE0Zlg4ZTI2eCtmdDlmOTNsQTdt
dlFhSzBzUlZkWXk3TEx0M1B6Ywo2b0kzUFU2L3dLUWUyZlFGbEhvZFU3MXVWQllsUHVwUmowcnZ3
ei80Z3o5SXh6enN1VGFQNWZmWnJ1czQ3SFVjVHY2QUZYWDdHdFgxCjduQ1Bmcm04NExidk9PaGN2
dUlydmlKOWx0eVRsc3BvZG43K2hpZllQOTc0TTJUZnNadXZWZVU1eWRHZk13VklVUTB5MDN2Tjl4
M2wKUFRRK1A1VzZqWjgrclYrdXovaGhud3VmbExwL1RZNzZxMjNxcVVQL0NWN1FDOWEyOTcxS01G
UHZkeXJOVEwyWnVSY3psYTJsNDdpbgpxWU8rRnc1N3YydzdSMysvK3J0MjNEdFh4dDM4N0cyK3Jp
cS9pRDQvZjM4OC9lbFBqL3BEVFRwSGYxL2RldXV0NlRDSG5WTitqdkZ5Ci9CcnZlZzl1dm9kOUhZ
ZDlqN21YTHZkeXFGOHd4aytYMW0rNDhkVXh6K09lcTQ2N25vL3BwU2YzTnVqL3E4YTloS1U3Umov
OE9ybEgKeDlQNGYvR2c3MzQvOVZGZm44UGVRMGY1N0c3N2p2VTViUHNjYkw0SGovSzk2V09PcDIz
ZkRkN3ZxQWI2STBEYzlmMi83VnFQOHZpagpub3ZQZTl0enFiRitWR2xrZWkvNS93Ui9OZythTHNk
bmJsdnZWU2QxMzBIWHVzM3JzTS9INW5FdWg1YzZ0SXg1SHZkY2RkejFmRXd2ClBSM2xPMnExNStu
OXpMMWdmZGxQUGpkKzcrKy9JSDdyYjc4Z2Z1MXZ2aUMrKzdmL2MveUlIM3R4L094ZmErSlhQRFhH
YjFGUFdEK2cKbnJDK1RaMlo1bDZ3Q3ArV3Zqd3YyZVMvSnFpTDN0U1Rqck1DdXlhbmtkMlk3aWo3
K3RqK3E0bi9VdXZzeUdZWnhFayt0OWs4WG9Ocgo5amQ3eWpuc21ueHUva3UxcjJkY2lwYjNQK3I1
K1M5dWZsNzNjdUpySERkVXpzZnk4cWo3alI4elh0OTFqYnU4eDhmeStxN3IzOXpmCnorL3lOdmRF
c2pudE9yZk4vWGZkM3ZaY200L2RkUjFIZlIzemNmVWY5QVdqM1c3ZXp2c2R0SFFXemUrbjA1Z1Ur
S2R5TUw5WC9WZDMKdjkvYzY0dStQRktQWFVkNXpxT2MzNlgrak8vNlhQaXZrUDU4dVkzWFozLzJa
NmRNZzM2cEdpNTMxL3ZlbWFlY0xUcm9lMmc0MFA3SwpRZStYWGVmb05rTHU0MTYvcUcwZTdrUnVI
M1JPaHgzNEtLL3hRWS9kZG8zK1BQcDlseDBQZXZ5bDJPYlMyWEdISXFmMW5GTzhmUTVICjJYK2I3
MUd1WTlkM3JNOWgyLyszbTgreDYzdHpjMy9mM3ZiZGNCU0RnNDU1MExaZDEzclFZOGJicHB6TGNa
L0x6M3MxZitiR3JsN0gKYTFQa3d0dVg2anZxd21kZDM5SWZOTUpIZlBlNThQOSsrcHVHQno3c0dw
VmhGZUh1UlFoLzl0eGxlTWdEcndzUGZPRDF5cFNYNFRwVgp5MTZyZnBnVzZwZnE3NzczNDFQbHpp
VVBRTmFuelJvQ0NGeXBBazk4NGhOVHNMSFo3YlU3TzNEQXJTelNsWHJxSjNwZUJ3VWdKL29FCkYz
a3cxOEM3OXoxM2o4eUVBQUlJSUlEQTVSRElBY2ovOHlsdkhGN2p0YThOcjFLcDFhdlYxZTdUbnRP
RUJ6L2cydkFnQnlFUG5vZnIKMUgvVS9UUy9TaDFEUHZmV1ZRQ3lPd1Z4T2E2STUwUUFnY3NxNEpI
azNmYkRkYmdlaDhWLzFYZVBZZTYxNjZ3RUgzNEIzQWJFV1V2LwpGVzZ6VGM3bGZJRThTcnU3MjJS
Q0FBRUVFRURnY2d1b0xsakRuUmZCWFlTMEd2M2M0NEo0SlBSNlZvWmFEYzluR3JsaVQzZjJxejZv
CjB1a1NnRnp1VjQzblIrQUtGSEJqYXdjY0hpZkZaUkR1OGUwc0JSNStTVlJqUEF4SytPUW5Qem1s
aksrVWw0cmc0MHA1SlRnUEJCQkEKQUFIM2JxVzRJdzA4V0tWWUpJYTVncEJhZ1lrREVJK2NWNm5C
eDN6VTlSVUJDTzhiQkJBNFVNQzljbm13eTdNNnVZY2JKZ1FRUUFBQgpCQkRZTGxBbzAxRW9BMUk2
cWxBSlZqMnZRNlUwU0tXb3hOdWNJSEVXcER2TmtkQzNueUwzSW9BQUFnZ2dnQUFDQ0NDQXdGVWpv
Q3hICm9ZNTJGWU5vTGtPbGRjK2w1cGt5SVlwSGdpcXkwcHl2bVF4SWxtQ0pBQUlJSUlBQUFnZ2dn
QUFDMHdTS1FzR0ZRNUFxS0JteUNqWlUKaXpWVDZrUERuS1h4QngySU5KcnpOS3JHeXB0WUlvQUFB
Z2dnZ0FBQ0NDQ0FBQUs3QldLaGJJY0NEbWRBM0FiRTJRNW5QMHB0ZDlzUQpqUml4V282aWp0SHE3
aWRnRHdRUVFBQUJCQkJBQUFFRUVFQmdFRkNtUXdtUWxPMG9GWVhNbE81d0wxZ3pSUitWZ2c4SEc0
VXpJZG9uClR3UWdXWUlsQWdnZ2dBQUNDQ0NBQUFJSVRCTHdpT2E5ZmtUOVNJR0lBbzlhdFZlcFJ5
eHRkMGJFWTQrN0lYcWVDRUN5QkVzRUVFQUEKQVFRUVFBQUJCQkNZSk9CeFAyS3ZXYTA5T2dVaGJk
dUhWb0dIZ3hKdDFuYU5EOUtxRFFpOVlFMXlaV2NFRUVBQUFRUVFRQUFCQkJBNApTS0J6Nk5HSHJ1
czBjSys2MjNVQTBuWXA2R2diOWN5cjRNUGJVeVN5LzNoNndUb0lrbTBJSUlBQUFnZ2dnQUFDQ0ND
d1U4RFpqZFRTClE2Vldqak42ZGNYYk9oT2k5RWVuMjk3V0tCQlpwUDEwUXhNQnlNcUJud2dnZ0FB
Q0NDQ0FBQUlJSURCUklITFY0R2dBQUNBQVNVUkIKVk1aTzVWYktnRGpOMFJmS2ZMU2hWd0Rpd01N
WmtFWlJTT05hTEJxaFQ1Umxkd1FRUUFBQkJCQkFBQUVFRUxpWFFPRk1oNktOR0l1dwo2RXExQTlG
dHpXNEhrdFlWZ0RnWVVZWFdNTkVJZmFCZ0JRRUVFRUFBQVFRUVFBQUJCQ1lKS05od0QxaE5FNVg1
NkVLajJxdWwwaDZ0CkduODRNSEdKbGpNaEN4cWhUMkpsWndRUVFBQUJCQkJBQUFFRUVEaEF3QU9j
THgxcHFNUktiYy9WN3NOTjBxdlF4RkxiVlg2bEFHUzUKbnlYSkR5Y0RraVZZSW9BQUFnZ2dnQUFD
Q0NDQXdDU0JYblZXRGlnYXQvdFFPeEFISVUzcUJXdVZBWEhsbGJlNU42dzgwUWc5UzdCRQpBQUVF
RUVBQUFRUVFRQUNCU1FKUkk2RUhqWUErMTZQYU5BaWhlcm5TNklQMXJBeTFCeUhVQUlSN3VyTS90
ejRzR1pDMUJXc0lJSUFBCkFnZ2dnQUFDQ0NBd1JjQkJodVpDVlZocDlIT3R6RldYVlNzd2NRRGlB
ZEFyM1RjZlJSMDdNeUNGeDFSblF1QVFBYWZhbUJCQUFBRUUKRUVBQUFRVE9wa0NoVEVlaERFanBx
RUlOemV0NUhTb05qMTRwS3ZFMkowaWNCZWxvaEg0MjN5QmNOUUlJSUlBQUFnZ2dnQUFDSnlyZwo3
SWM2MmxVTW9ybFU4L09ZNWxMTG1USWhpa2VDS3JMU25KOTNad1lrNzhnU0FRUVFRQUFCQkJCQUFB
RUVFTGhBUU5WU2xXYUhIVXFHCnJJSU4xV0xObFBxb0ZJQzRsc3FCU0tNNVQ1TUNFTXB0TXR2Wlhs
S1dkN1pmZjY0ZUFRUVFRQUFCQkJESUFsRnRQa29GSEtWNnVuSWIKRUdjN25QMG90WDJtd0tSV0Jz
UnRST3BSRzVEUmFqNE1Td1FRUUFBQkJCQkFBQUVFRUVEZ0NBTEtkTGpKdUxNZHBlcXdaa3AzdUJl
cwptYUtPU3NHSGc0M0NtUkNuUXZZbkFwQXN3UklCQkJCQUFBRUVFRUFBQVFRbUNiZzdJZzBCa2ta
RFQ0R0lBbzlhMFVqcUVVdmJuUkdaCnFlYktEZEh6UkFDU0pWZ2lnQUFDQ0NDQUFBSUlJSURBSkFG
MWVLWGdRN05hZTNTS1JOcTJENjBDRHdjbDJxenRHaDlFZ3hBMjlJSTEKeVpXZEVVQUFBUVFRUUFB
QkJCQkE0Q0NCenFGSEg3cXUwMGpvNm03WEFVZ2FDVjJCUjdNYUFUMk4ydUJJWkgrYTFBZzlQNGds
QWdnZwpnQUFDQ0NDQUFBSUlJT0RzUm1ycG9WSXJ4eGk5dXVKdG5RbFIra1B0MHRPMlJvSElJdTNu
ZlZXT3RWcndFd0VFRUVBQUFRUVFRQUFCCkJCQ1lKaEJqcDNJclpVQ2M1dWdMWlQvYTBDc0FjVERp
REVpaktLUnhMUmFOMEtmQnNqY0NDQ0NBQUFJSUlJQUFBZ2pjVzZCd3BrUFIKUm94RldIU2wyb0hv
dG1hM0EwbnJDa0FjaktoQ2E1aG9oRDVRc0lJQUFnZ2dnQUFDQ0NDQUFBS1RCQlJzUkdVOG1pWXE4
OUdGUnJWWApTNlU5Mm1XYkFoT1hhRGtUc3FBUitpUldka1lBQVFRUVFBQUJCQkJBQUlFREJEekEr
ZElwRUpWWXFlMjUybjI0U1hvVm1saHF1OHF2CkZJQXM5N01rK2VHMEFja1N4MWcrNXFiRjhPZ2Ji
aHlGZDhQV2kxdTU2NDc1OE1BN2I5OGIxbGxCQUFFRUVFQUFBUVFRUU9CS0VPaFYKWitXU3FvWGJm
U2dPY1JEU3BGNnduQUdacDRibzNxYUV5REFSZ0F3VXJDQ0FBQUlJSUlBQUFnZ2dnTUFVZ2FpUjBJ
TkdRUGVmemRzMApDS0Y2dWRMb2cvV3NETFVISWRRQWhIdTZzeiszUGlwdFFOWVdyQ0dBQUFJSUlJ
QUFBZ2dnZ01BVUFRY1ptZ3RsUDlMbzUxcVpxeTZyClZtRGlBTVFEb0ZlNmJ6NktPc2lBVEFFK1pO
OXgyZFhOdDl4OXlGN1ROOTkyNi9uUmd5akJHbUd3aWdBQ0NDQ0FBQUlJSUhBRkNCVEsKZEJUS2dK
U09LdFFTb1o3WG9kTHc2SldpRW05emdzUlprRzdVU21FVWkxd0JWOEFwSUlBQUFnZ2dnQUFDQ0ND
QXdIMUh3TmtQZGJTcgpHRVJ6cWVibk1jMmxsak5sUWhTUEJGVmtwVGxmRkJtUUxNRVNBUVFRUUFB
QkJCQkFBQUVFcGdrVWhZSUxoeUJWVURKa0ZXeW9GbXVtCjFFZWxBRVN4UndwRUduZVh0VCtSQWNr
U0xCRkFBQUVFRUVBQUFRUVFRR0NTUUZTYmoxSUJoek1nYmdQaWJJZXpINlcydTIxSXJReEkKV282
aWp0SHFwT2RpWndRUVFBQUJCQkJBQUFFRUVEanJBc3AwS0FHU3NoMmxvcENaNnE3Y0M5Wk1VVWVs
NE1QQlJ1Rk1pUGJKRXdGSQpsbUNKQUFJSUlJQUFBZ2dnZ0FBQ2t3VFV3VlhRRUNCcE5QUVVpQ2p3
cUZWN2xYckVjczlZQ2p4bWF2VGhodWg1SWdESkVpd1JRQUFCCkJCQkFBQUVFRUVCZ2tvQTZ2Rkx3
b1ZtdFBUcEZJbTNiaDFhQmg0TVNiZFoyalEraVFRZ2Jlc0dhNU1yT0NDQ0FBQUlJSUlBQUFnZ2cK
Y0pCQTU5Q2pEMTNYcFpIUU93Y2dhU1IwQlI3TmFnUjBqNUNlSXBIOXg5TUwxa0dRYkVNQUFRUVFR
QUFCQkJCQUFJR2RBczV1cEpZZQpLclZ5bk5Hcks5N1dtUkNsUHpyZDlyWkdnY2dpN2FjYm1naEFW
Zzc4UkFBQkJCQkFBQUVFRUVBQWdZa0NNWFlxdDFJR3hHbU92bEQyCm93MjlBaEFISHM2QU5JcENH
dGRpMFFoOW9peTdJNEFBQWdnZ2dBQUNDQ0NBd0wwRUNtYzZGRzNFV0lSRlY2b2RpRzVyZGp1UXRL
NEEKeE1HSUtyU0dpVWJvQXdVckNDQ0FBQUlJSUlBQUFnZ2dNRWxBd1VaVXhxTnBvaklmWFdoVWU3
VlUycU5kdGlrd2NZbVdNeUVMR3FGUApZbVZuQkJCQUFBRUVFRUFBQVFRUU9FREFBNXd2blFKUmla
WGFucXZkaDV1a1Y2R0pwYmFyL0VvQnlISS9TNUlmVGdZa1M3QkVBQUVFCkVFQUFBUVFRUUFDQlNR
Szk2cXdjVURSdTk2RjJJQTVDbXRRTDFpb0Q0c29yYjFOQ1pKaG9oRDVRc0lJQUFnZ2dnQUFDQ0ND
QUFBSlQKQktKR1FnOGFBWDJ1QjdWcEVFTDFjcVhSQit0WkdXb1BRcWdCQ1BkMFozOXVmVlF5SUdz
TDFoQkFBQUVFRUVBQUFRUVFRR0NLZ0lNTQp6WVdxc05MbzUxcVpxeTZyVm1EaUFNUURvRmU2Yno2
S09rYXJVNTZKZlJGQUFBRUVFRUFBQVFRUVFPQ3NDeFRLZEJUS2dKU09RalRWCjh6cFVHaDY5MHUx
U3RWWk9rRGdMNHVBa1Q2UFZ2SWtsQWdnZ2dBQUNDQ0NBQUFJSUlIQUVBV2MvMU5HdVloRE5wWnFm
eHpTWFdzNlUKQ1ZFOEVsU1JsZVo4Tk5xQVpBbVdDQ0NBQUFJSUlJQUFBZ2dnTUUyZ0tCUmNPQVNw
Z3BJaHEyQkQ2WTZaVWgrVkFoRG5SUnlJTkpyegpSQUNTSlk2eHZPc09ON3RaVGJmZGVqNnZIbnM1
UHU2eEQ4WUJFRUFBQVFRUVFBQUJCQkE0WVlHb05oK2xBbzVTUFYyNXpNclpEbWMvClNtMmZLVENw
bFFGeGRWWTlxcnNhclo3dzJYQTRCQkJBQUFFRUVFQUFBUVFRdUxvRmxPbFFuSkd5SGFYcXNHWktk
N2dYckptaWprckIKaDRPTndwa1FwMEwySndLUUxNRVNBUVFRUUFBQkJCQkFBQUVFSmdtb2c2dWdJ
VURTYU9ncEVGSGdVYXYyeXRtUTBqMWpLZkNZcWViSwpEZEh6ZENvbFdJKzVhWkdQSDI2NGNUVHUr
ckQxNGxiR0pVbDMzcjUzY1FmaFVRZ2dnQUFDQ0NDQUFBSUlJSEFpQXVyd1NzR0haclgyCjZCU0p0
RzBmV2dVZURrcTBXZHMxUG9nR0lXeEdJUUVaa0JPaDV5QUlJSUFBQWdnZ2dBQUNDSnhCZ2M2aFJ4
KzZydE5JNkNGMERrRFMKU09nS1BKclZDT2plbmlLUmZaNVR5WUNjUVhvdUdRRUVFRUFBQVFRUVFB
Q0JNeWZnN0VacTZhRlNLOGNadmJyaWJaMEpVZnBEN2RMVAp0a2FCeUNMdDUzMVZqclZhbk96UGNk
blZ6YmZjZldJSHY3Q0hxU3VuQk91c1hlK0p2YUFjQ0FFRUVFQUFBUVFRUU9BK0xSQmpwM0lyClpV
Q2M1dWdMWlQvYTBDc0FjVERpREVpaktLUnhMUmFOME8vVHJ6TW5qd0FDQ0NDQUFBSUlJSURBRlNG
UU9OT2hhQ1BHSWl5NlV1MUEKZEZ1ejI0R2tkUVVnRGtaVW9UVk10QUVaS0ZoQkFBRUVFRUFBQVFR
UVFBQ0JTUUlLTnFJeUhrMFRsZm5vUXFQYXE2WFNIdTJ5VFlHSgpTN1NjQ1ZuUUNIMFNLenNqZ0FB
Q0NDQ0FBQUlJSUlEQUFRSWU0SHpwRkloS3JOVDJYTzArM0NTOUNrMHN0VjNsVndwQWx2dFprdnh3
Ck1pQlpnaVVDQ0NDQUFBSUlJSUFBQWdoTUV1aFZaK1dBb25HN0Q3VURjUkRTcEY2d1Zoa1FWMTU1
bXhJaXczUXFqZENIbzdPQ0FBSUkKSUlBQUFnZ2dnQUFDVjYxQTFFam9RU09nejNXRmJScUVVTDFj
YWZUQmVsYUcyb01RYWdEQ1BkM1puMXNUa0FGWlc3Q0dBQUlJSUlBQQpBZ2dnZ0FBQ1V3UWNaR2d1
VklXVlJqL1h5bHgxV2JVQ0V3Y2dIZ0M5MG4zelVkUXhXcDN5VE95TEFBSUlJSUFBQWdnZ2dBQUNa
MTJnClVLYWpVQWFrZEJTaXFaN1hvZEx3NkpWdWw2cTFjb0xFV1JBSEoza2FyZVpOTEJGQUFBRUVF
RUFBQVFRUVFBQ0JJd2c0KzZHT2RoV0QKYUM3Vi9EeW11ZFJ5cGt5STRwR2dpcXcwNTZQUkJpUkxz
RVFBQVFRUVFBQUJCQkJBQUlGcEFrV2g0TUloU0JXVURGa0ZHMHAzekpUNgpxQlNBT0MvaVFLVFJu
Q2N5SUZtQ0pRSUlJSUFBQWdnZ2dBQUNDRXdTaUdyelVTcmdjQWJFWlZiT2RqajdVV3E3cTdKcVpV
RFNjaFIxCmpGWW5QUmM3STRBQUFnZ2dnQUFDQ0NDQXdGa1hVS1pEQ1pDVTdTZ1ZoY3lVN25BdldE
TkZIWldDRHdjYmhUTWgyaWRQQkNCWmdpVUMKQ0NDQUFBSUlJSUFBQWdoTUVsQUhWMEZEZ0tUUjBG
TWdvc0NqVnUyVnN5R2xlOFpTNERGVG93ODNSTThUQVVpV1lJa0FBZ2dnZ0FBQwpDQ0NBQUFLVEJO
VGhsWUlQeldydDBTa1NhZHMrdEFvOEhKUm9zN1pyZkJBTlF0Z3MxNGNsQUZsYnNJWUFBZ2dnZ0FB
Q0NDQ0FBQUpUCkJEcUhIbjNvdWs0am9ZZlFPUUJKSTZFcjhHaFdJNkI3ZTRwRTlvOUxMMWhUZ05r
WEFRUVFRQUFCQkJCQUFBRUVCZ0ZuTjFKTEQ1VmEKT2M3bzFSVnY2MHlJMGgrZGJudGJvMEJra2Zi
VERVMEVJQ3NIZmlLQUFBSUlJSUFBQWdnZ2dNQkVnUmc3bFZzcEErSTBSMThvKzlHRwpYZ0dJQXc5
blFCcEZJWTFyc1dpRVBsR1czUkZBQUFFRUVFQUFBUVFRUU9CZUFvVXpIWW8yWWl6Q29pdlZEa1Mz
TmJzZFNGcFhBT0pnClJCVmF3MFFia0lHQ0ZRUVFRQUFCQkJCQUFBRUVFSmdrb0dBakt1UFJORkda
ank0MHFyMWFLdTNSTHRzVW1MaEV5NW1ReGFnUitxbVUKWU4xMXgzdzQ3OXR1UFQrc0gzZGxmTnpq
SHVza0h6OCtyN053dlNkcHg3RVFRQUFCQkJCQUFBRUU3cnNDSHVCODZSU0krdUJWMjNPMQorM0NU
OUNvMHNkUjJsVjhwQUZudVowbnlWWklCeVJJc0VVQUFBUVFRUUFBQkJCQkFZSkpBcnpvckJ4U04y
MzJvSFlpRGtDYjFnclhLCmdManl5dHVVRUJtbVU4bUFERWRuQlFFRUVFQUFBUVFRUUFBQkJLNWFn
YWlSMElOR1FIZjlVNXNHSVZRdlZ4cDlzSjZWb2ZZZ2hCcUEKY0U5Mzl1ZldCS2NTZ054NSs5NzZH
Y0o0ZmJUNUtsbzlhOWQ3RmIxMFhBb0NDQ0NBQUFJSUlJREFjUVFjWkdoV0FtUTErbmtSdzF4MQpX
YlVDRXdjZ0hnQzkwbjN6VWQzVmFQVTR6OHhqRVVBQUFRUVFRQUFCQkJCQTRLd0pGTXAwRk1xQWxJ
NUNOTlh6T2xRYUhyM1M3VktwCkRpZEluQVdwUmxISGFQV3NjWEc5Q0NDQUFBSUlJSUFBQWdnZ2ND
d0J4UjJGT3RwVkRLSzVWUFB6bU9aU3k1a3lJWXBIZ2lxeTBweWYKNTFSS3NQTEJXU0tBQUFJSUlJ
QUFBZ2dnZ01CVkxLRGVyeXJORGp1VURGa0ZHMHAzekpUNnFCU0FPQy9pUUtUUm5DY3lJRm1DSlFJ
SQpJSUFBQWdnZ2dBQUNDRXdTaUdyelVTcmdjQWJFWlZiT2RqajdVV3E3cTdKcVpVRFNjaFIxakZZ
blBSYzdJNEFBQWdnZ2dBQUNDQ0NBCndGa1hVS1pEQ1pDVTdTZ1ZoY3lVN25BdldETkZIWldDRHdj
YmhUTWgyaWRQQkNCWmdpVUNDQ0NBQUFJSUlJQUFBZ2hNRWxBSFY2a0gKTEkrR25nSVJCUjYxYXEr
Y0RTbmRNNVlDajVrYWZiZ2hlcDRJUUxJRVN3UVFRQUFCQkJCQUFBRUVFSmdrb0E2dlF0Ukk1d28v
UXFjZwpwRzM3MENyd2NMZTgycXp0R2g5RWd4QTJ5L1ZoQ1VEV0Zxd2hnQUFDQ0NDQUFBSUlJSURB
RklIT29VY2Z1cTdUU09naGRBNUEwa2pvCkNqeWExUWpvM3A0aWtmM2owZ3ZXRkdEMlJRQUJCQkJB
QUFFRUVFQUFnVUhBMlkzVTBrT2xWbzR6ZW5YRjJ6b1RvdlJIcDl2ZTFpZ1EKV2FUOWRFUFRwQUNr
R0xjZVdUMmVud2dnZ0FBQ0NDQ0FBQUlJSUhCR0JXTHNWRzZsRElqVEhIMmg3RWNiZWdVZ0RqeWNB
V2tVaFRTdQp4YUlSK2hsOWgzRFpDQ0NBQUFJSUlJQUFBZ2ljb0VEaFRJZWlqUmlMc09oS3RRUFJi
YzF1QjVMV0ZZQTRHRkdGMWpEUkJtU2dZQVVCCkJCQkFBQUVFRUVBQUFRUW1DU2pZY0E5WVRST1Yr
ZWhDbzlxcnBkSWU3YkpOZ1lsTHRKd0pXWXdhb2U4c3dZcXAxY2lrMDJCbkJCQkEKQUFFRUVFQUFB
UVFRT0FNQ0h1Qjg2UlNJbW1xbzdibmFmYmhKZWhXYVdHcTd5cThVZ0N6M3N5U1pnd3hJbG1DSkFB
SUlJSUFBQWdnZwpnQUFDa3dSNjFWazVvR2pjN2tPSkN3Y2hUZW9GYTVVQmNlV1Z0eWtoTWt3N015
RERucXdnZ0FBQ0NDQ0FBQUlJSUlBQUFpT0JxSkhRCmcwWkFuMnRibXdZaFZDOVhHbjJ3bnBXaDlp
Q0VHb0J3VDNmMjU5WVBJZ095dG1BTkFRUVFRQUFCQkJCQUFBRUVwZ2c0eU5CY3FBb3IKalg2dWxi
bnFzbW9GSmc1QVBBQjZwZnZtbzZoanREcmxtZGdYQVFRUVFBQUJCQkJBQUFFRXpycEFvVXhIb1F4
STZTaEVVejJ2UTZYaAowU3ZkTGxWcjVRU0pzeUFPVHZJMFdzMmJXQ0tBQUFJSUlJQUFBZ2dnZ0FB
Q1J4Qnc5a01kN1NvRzBWeXErWGxNYzZubFRKa1F4U05CCkZWbHB6a2VqRFVpV1lJa0FBZ2dnZ0FB
Q0NDQ0FBQUxUQk5UN1ZhWFpZWWVTSWF0Z1ErbU9tVklmbFFJUTUwVWNpRFNhODBRR0pFdXcKUkFB
QkJCQkFBQUVFRUVBQWdVa0NVVzArU2dVY3pvQzR6TXJaRG1jL1NtMTNWVmF0REVoYWpxS08wZXFr
NTJKbkJCQkFBQUVFRUVBQQpBUVFRT09zQ3luUW9BWkt5SGFXaWtKblNIZTRGYTZhb28xTHc0V0Nq
Y0NaRSsrU0pBQ1JMc0VRQUFRUVFRQUFCQkJCQUFJRkpBdXJnCkttZ0lrRFFhZWdwRUZIalVxcjF5
TnFSMHoxZ0tQR1pxOU9HRzZIbmEyUWFrR0ljcitWRXNFZGdYOElBelRBZ2dnQUFDQ0NDQUFBSm4K
VTBBZFhpbjQwS3pXSHAwaWtiYnRRNnRmRHgyVWFMTzJhM3dRRFVMWUxOYytaRURXRnF3aGdBQUND
Q0NBQUFJSUlJREFGSUhPb1VjZgp1cTdUU09naGRBNUEwa2pvQ2p5YTFRam82ZS9WamtUMnA1MFpr
THdqU3dRUVFBQUJCQkJBQUFFRUVFQmdMT0RzUm1ycG9WSXJ4eGk5CnV1SnRuUWxSK3FQVGJXOXJG
SWdzMG42Nm9XbFNBRUs1elFydHJQK2tMTytzdndPNGZnUVFRQUFCQkJCQVlDVVFZNmR5SzJWQW5P
Ym8KQzJVLzJ0QXJBSEhnNFF4SW95aWtjUzBXamRCNXl5Q0FBQUlJSUlBQUFnZ2dnTUJ4QlFwbk9o
UnR4RmlFUlZlcUhZaHVhM1k3a0xTdQpBTVRCaUNxMGhvazJJQU1GS3dnZ2dBQUNDQ0NBQUFJSUlE
QkpRTUZHVk1hamFhSXlIMTFvVkh1MVZOcWpYYllwTUhHSmxqTWhDeHFoClQySmxad1FRUUFBQkJC
QkFBQUVFRURoQXdBT2NMNTBDVVltVjJwNnIzWWVicEZlaGlhVzJxL3hLQWNoeVAwdVNIMDRHSkV1
d1JBQUIKQkJCQUFBRUVFRUFBZ1VrQ3ZlcXNIRkEwYnZlaGRpQU9RcHJVQzlZcUErTEtLMjlUUW1T
WUpqVkNIeDdGQ2dJSUlJQUFBZ2dnZ0FBQwpDSng1Z2FpUjBJTkdRSjlMb2syREVLcVhLNDArV00v
S1VIc1FRZzFBdUtjNyszTnJLaklnYXd2V0VFQUFBUVFRUUFBQkJCQkFZSXFBCmd3ek5oYXF3MHVq
bldwbXJMcXRXWU9JQXhBT2dWN3B2UG9vNlJxdFRub2w5RVVBQUFRUVFRQUFCQkJCQTRLd0xGTXAw
Rk1xQWxJNUMKTk5Yek9sUWFIcjNTN1ZLMVZrNlFPQXZpNENSUG85VzhpU1VDQ0NDQUFBSUlJSUFB
QWdnZ2NBUUJaei9VMGE1aUVNMmxtcC9ITkpkYQp6cFFKVVR3U1ZKR1Y1bncwMm9Ca0NaWUlJSUFB
QWdnZ2dBQUNDQ0F3VGFBb0ZGdzRCS21Da2lHcllFUHBqcGxTSDVVQ0VPZEZISWcwCm12TkVBSkls
anJGOHpFMkw0ZEUzM0RqcTVIalllbkVyZDkzaDVqeXI2YzdiOS9JcVN3UVFRQUFCQkJCQUFBRUVy
Z2lCcURZZnBRS08KVWoxZHVjeksyUTVuUDBwdG55a3dxWlVCY1hWV1BhcTdHcTFlRWRmQVNTQ0FB
QUlJSUlBQUFnZ2dnTUI5UlVDWkRzVVpLZHRScWc1cgpwblNIZThHYUtlcW9GSHc0MkNpY0NYRXFa
SDhpQU1rU0xCRkFBQUVFRUVBQUFRUVFRR0NTZ0RxNENob0NKSTJHbmdJUkJSNjFhcStjCkRTbmRN
NVlDajVscXJ0d1FQVStVWUdXSll5ekhaVmMzMzNMM01ZNTA0VU52dS9YOGFBTWxXQ01NVmhGQUFB
RUVFRUFBQVFTdUFBRjEKZUtYZ1E3TmFlM1NLUk5xMkQ2MENEd2NsMnF6dEdoOUVneEEybzFZS1pF
Q3VnQmVPVTBBQUFRUVFRQUFCQkJCQTRENHAwRG4wNkVQWApkUm9KUFlUT0FVZ2FDVjJCUjdNYUFk
M2JVeVN5ZjRGa1FPNlRyelFualFBQ0NDQ0FBQUlJSUlEQTVSZHdkaU8xOUZDcGxlT01YbDN4CnRz
NkVLUDJoZHVscFc2TkFaSkgyODc0cXgxb3QrSWtBQWdnZ2dBQUNDQ0NBQUFJSVRCT0lzVk81bFRJ
Z1RuUDBoYklmYmVnVmdEZ1kKY1Fha1VSVFN1QmFMUnVqVFlOa2JBUVFRUUFBQkJCQkFBQUVFN2kx
UU9OT2hhQ1BHSWl5NlV1MUFkRnV6MjRHa2RRVWdEa1pVb1RWTQp0QUVaS0ZoQkFBRUVFRUFBQVFR
UVFBQ0JTUUlLTnFJeUhrMFRsZm5vUXFQYXE2WFNIdTJ5VFlHSlM3U2NDVm5RQ0gwU0t6c2pnQUFD
CkNDQ0FBQUlJSUlEQUFRSWU0SHpwRkloS3JOVDJYTzArM0NTOUNrMHN0VjNsVndwQWx2dFprdnh3
TWlCWmdpVUNDQ0NBQUFJSUlJQUEKQWdoTUV1aFZaK1dBb25HN0Q3VURjUkRTcEY2d1Zoa1FWMTU1
bXhJaXcwUWo5SUdDRlFRUVFBQUJCQkJBQUFFRUVKZ2lFRFVTZXRBSQo2SE05cUUyREVLcVhLNDAr
V00vS1VIc1FRZzFBdUtjNyszUHJvNUlCV1Z1d2hnQUNDQ0NBQUFJSUlJQUFBbE1FSEdSb0xsU0Zs
VVkvCjE4cGNkVm0xQWhNSElCNEF2ZEo5ODFIVU1WcWQ4a3pzaXdBQ0NDQ0FBQUlJSUlBQUFtZGRv
RkNtbzFBR3BIUVVvcW1lMTZIUzhPaVYKYnBlcXRYS0N4RmtRQnlkNUdxM21UU3dSUUFBQkJCQkFB
QUVFRUVBQWdTTUlPUHVoam5ZVmcyZ3UxZnc4cHJuVWNxWk1pT0tSb0lxcwpOT2VqMFFZa1M3QkVB
QUVFRUVBQUFRUVFRQUNCYVFKRm9lRENJVWdWbEF4WkJSdEtkOHlVK3FnVWdEZ3Y0a0NrMFp3bk1p
QlpnaVVDCkNDQ0FBQUlJSUlBQUFnaE1Fb2hxODFFcTRIQUd4R1ZXem5ZNCsxRnF1NnV5YW1WQTBu
SVVkWXhXSnowWE95T0FBQUlJSUlBQUFnZ2cKZ01CWkYxQ21Rd21RbE8wb0ZZWE1sTzV3TDFnelJS
MlZnZzhIRzRVeklkb25Ud1FnV1lJbEFnZ2dnQUFDQ0NDQUFBSUlUQkpRQjFkQgpRNENrMGRCVElL
TEFvMWJ0bGJNaHBYdkdVdUF4VTZNUE4wVFBFd0ZJbG1DSkFBSUlJSUFBQWdnZ2dBQUNrd1RVNFpX
Q0Q4MXE3ZEVwCkVtbmJQclFLUEJ5VWFMTzJhM3dRRFVMWUxOZUhKUUJaVzdDR0FBSUlJSUFBQWdn
Z2dBQUNVd1E2aHg1OTZMcE9JNkdIMERrQVNTT2gKSy9Cb1ZpT2dlM3VLUlBhUFN5OVlVNERaRndF
RUVFQUFBUVFRUUFBQkJBWUJaemRTU3crVldqbk82TlVWYit0TWlOSWZuVzU3VzZOQQpaSkgyMHcx
TkJDQXJoMlA5dk9zT0R6Ni9tbTY3OVh4ZVBmWnlmTnhqSDR3RElJQUFBZ2dnZ0FBQ0NDQnd3Z0l4
ZGlxM1VnYkVhWTYrClVQYWpEYjBDRUFjZXpvQTBpa0lhMTJMUkNQMkU1VGtjQWdnZ2dBQUNDQ0NB
QUFKblVLQndwa1BSUm94RldIU2wyb0hvdG1hM0EwbnIKQ2tBY2pLaENhNWhvQXpKUXNJSUFBZ2dn
Z0FBQ0NDQ0FBQUtUQkJSc1JHVThtaVlxODlHRlJyVlhTNlU5Mm1XYkFoT1hhRGtUc2hnMQpRaitW
RXF6SDNMUVl6dnVHRzBmUE5teTl1SlZ4U2RLZHQrOWQzRUY0RkFJSUlJQUFBZ2dnZ0FBQ0NKeUln
QWM0WHpvRm9qNTQxZlpjCjdUN2NKTDBLVFN5MVhlVlhDa0NXKzFtUy9JUmtRTElFU3dRUVFBQUJC
QkJBQUFFRUVKZ2swS3ZPeWdGRjQzWWZhZ2ZpSUtSSnZXQ3QKTWlDdXZQSTJKVVNHNlZReUlNUFJX
VUVBQVFRUVFBQUJCQkJBQUlHclZpQnFKUFNnRWREZEpWT2JCaUZVTDFjYWZiQ2VsYUgySUlRYQpn
SEJQZC9ibjFnU25Fb0NNeTY1dXZ1WHU5Yk1kYyszQ0hxYXVuQktzczNhOXgzd1plVGdDQ0NDQUFB
SUlJSURBMVNMZ0lFT3pFaUNyCjBjK0xHT2FxeTZvVm1EZ0E4UURvbGU2YmorcXVScXRYaXdMWGdR
QUNDQ0NBQUFJSUlJQUFBcGRDb0ZDbW8xQUdwSFFVb3FtZTE2SFMKOE9pVmJwZEtkVGhCNGl4SU5Z
bzZScXVYNGhSNURnUVFRQUFCQkJCQUFBRUVFTGhxQkJSM0ZPcG9WekdJNWxMTnoyT2FTeTFueW9R
bwpIZ21xeUVwenZ1WlRLY0hLQjJlSkFBSUlJSUFBQWdnZ2dBQUNWN0dBZXIrcU5EdnNVREprRld3
bzNURlQ2cU5TQU9LOGlBT1JSbk9lCnlJQmtDWllJSUlBQUFnZ2dnQUFDQ0NBd1NTQ3F6VWVwZ01N
WkVKZFpPZHZoN0VlcDdhN0txcFVCU2N0UjFERmFuZlJjN0l3QUFnZ2cKZ0FBQ0NDQ0FBQUpuWFVD
WkRpVkFVcmFqVkJReVU3ckR2V0RORkhWVUNqNGNiQlRPaEdpZlBCR0FaQW1XQ0NDQUFBSUlJSUFB
QWdnZwpNRWxBSFZ5bEhyQThHbm9LUkJSNDFLcTljamFrZE05WUNqeG1hdlRoaHVoNUlnREpFaXdS
UUFBQkJCQkFBQUVFRUVCZ2tvQTZ2QXBSCkk1MHIvQWlkZ3BDMjdVT3J3TVBkOG1xenRtdDhFQTFD
MkN6WGh5VUFXVnV3aGdBQ0NDQ0FBQUlJSUlBQUFsTUVPb2NlZmVpNlRpT2gKaDlBNUFFa2pvU3Z3
YUZZam9IdDdpa1QyajBzdldGT0EyUmNCQkJCQUFBRUVFRUFBQVFRR0FXYzNVa3NQbFZvNXp1alZG
Vy9yVElqUwpINTF1ZTF1alFHU1I5dE1OVFFRZ0t3ZCtJb0FBQWdnZ2dBQUNDQ0NBd0VTQkdEdVZX
eWtENGpSSFh5ajcwWVplQVlnREQyZEFHa1VoCmpXdXhhSVErVVpiZEVVQUFBUVFRUUFBQkJCQkE0
RjRDaFRNZGlqWmlMTUtpSzlVT1JMYzF1eDFJV2xjQTRtQkVGVnJEUkJ1UWdZSVYKQkJCQUFBRUVF
RUFBQVFRUW1DU2dZTU05WURWTlZPYWpDNDFxcjVaS2U3VExOZ1VtTHRGeUptUkJJL1JKck95TUFB
SUlJSUFBQWdnZwpnQUFDQndoNGdQT2xVeUFxc1ZMYmM3WDdjSlAwS2pTeDFIYVZYeWtBV2U1blNm
TER5WUJrQ1pZSUlJQUFBZ2dnZ0FBQ0NDQXdTYUJYCm5aVURpc2J0UHRRT3hFRklrM3JCV21WQVhI
bmxiVXFJREJPTjBBY0tWaEJBQUFFRUVFQUFBUVFRUUdDS1FOUkk2RUVqb00vMW9EWU4KUXFoZXJq
VDZZRDByUSsxQkNEVUE0Wjd1N00rdGowb0daRzNCR2dJSUlJQUFBZ2dnZ0FBQ0NFd1JjSkNodVZB
VlZocjlYQ3R6MVdYVgpDa3djZ0hnQTlFcjN6VWRSeDJoMXlqT3hMd0lJSUlBQUFnZ2dnQUFDQ0p4
MWdVS1pqa0laa05KUmlLWjZYb2RLdzZOWHVsMnExc29KCkVtZEJISnprYWJTYU43RkVBQUVFRUVB
QUFRUVFRQUFCQkk0ZzRPeUhPdHBWREtLNVZQUHptT1pTeTVreUlZcEhnaXF5MHB5UGRpcHQKUU82
NncxVmdxK20yVzgvbjFXTXZ4OGM5OXNGTzhBRGo4em9MMTN1Q2RCd0tBUVFRUUFBQkJCQkE0TDRz
VUJRS0xoeUNWRUhKa0ZXdwpvWFRIVEttUFNnR0k4eUlPUkJyTmVTSURraVZZSW9BQUFnZ2dnQUFD
Q0NDQXdDU0JxRFlmcFFJT1owQmNadVZzaDdNZnBiYTdLcXRXCkJpUXRSMUhIYUhYU2M3RXpBZ2dn
Z0FBQ0NDQ0FBQUlJbkhVQlpUcVVBRW5aamxKUnlFenBEdmVDTlZQVVVTbjRjTEJST0JPaWZmSjAK
S2lWWWQ5NitsNCt2NVhoOXRQa3FXajFyMTNzVnZYUmNDZ0lJSUlBQUFnZ2dnTUF4Qk5UQlZkQVFJ
R2swOU1MbFdBbzhhdFZlT1J0Uwp1bWNzQlI0elJSeHVpSjRuTWlCWmdpVUNDQ0NBQUFJSUlJQUFB
Z2hNRWxDSFZ3bytOS3UxUjZkSXBHMzcwQ3J3Y0ZDaXpkcXU4VUUwCkNHR3pYQitXQUdSdHdSb0ND
Q0NBQUFJSUlJQUFBZ2hNRWVnY2V2U2g2enFOaEI1QzV3QWtqWVN1VXZaQU13QUFJQUJKUkVGVXdL
TloKallEdTdTa1MyVC91cVpSZ1RUbG45a1VBQVFRUVFBQUJCQkJBQUlIN3BvQ3pHNm1saDBxdEhH
ZjA2b3EzZFNaRTZZOU90NzJ0VVNDeQpTUHZwaGlZQ2tKVURQeEZBQUFFRUVFQUFBUVFRUUdDaVFJ
eWR5cTJVQVhHYW95K1UvV2hEcndERWdZY3pJSTJpa01hMVdLTkc2SlJnClRVUm1kd1FRUUFBQkJC
QkFBQUVFRUZnSkZNNTBLTnFJc1FpTHJsUTdFTjNXN0hZZ2FWMEJpSU1SVldnTkV3SElRTUVLQWdn
Z2dBQUMKQ0NDQUFBSUlUQkpRc0JHVjhXaWFxTXhIRnhyVlhpMlY5bWlYYlFwTVhLTGxUTWlDUnVp
VFdOa1pBUVFRUUFBQkJCQkFBQUVFRGhEdwpBT2RMcDBCVVlxVzI1MnIzNFNicFZXaGlxZTBxdjFJ
QXN0elBrdVNIa3dISkVpd1JRQUFCQkJCQUFBRUVFRUJna2tDdk9pc0hGSTNiCmZhZ2RpSU9RSnZX
Q3RjcUF1UExLMjVRUUdTWWFvUThVckNDQUFBSUlJSUFBQWdnZ2dNQVVnYWlSMElOR1FKL3JRVzBh
aEZDOVhHbjAKd1hwV2h0cURFR29Bd2ozZDJaOWJIM1ZTQU9MUkRaa1FRQUFCQkJCQUFBRUVFRUFB
Z1NUZ0lFT3pFaUNyMGMrTEdPYXF5Nm9WbURnQQo4UURvbGU2YmorcXVScXNnSW9BQUFnZ2dnQUFD
Q0NDQUFBSkhGeWlVNlNpVUFTa2RoV2lxNTNXb05EeDZwZHVsVWgxT2tEZ0xVbzJpCmp0SHEwWitJ
UFJGQUFBRUVFRUFBQVFRUVFBQUJOejR2MU5HdVloRE5wWnFmeHpTWFdzNlVDVkU4RWxTUmxlYXN0
Yk1FeTQxSm1CQkEKQUFFRUVFQUFBUVFRUUFDQmV3bW9pVWFsMldHSGtpR3JZRVBwanBsU0g1VUNF
T2RGSElnMG12TkVCaVJMc0VRQUFRUVFRQUFCQkJCQQpBSUZKQWxGdFBrb0ZITTZBdU16SzJRNW5Q
MHB0ZDFWV3JReElXbzZpanRIcXBPZGlad1FRUUFBQkJCQkFBQUVFRURqckFzcDB1SjhxClp6dEtS
U0V6cFR2Y0M5Wk1VVWVsNE1QQlJ1Rk1pUGJKRXdGSWxtQ0pBQUlJSUlBQUFnZ2dnQUFDa3dUY1dN
TTlZSGswOUJTSUtQQ28KRlkwNEcxSnF1ek1pTXpYNmNFUDBQQkdBWkFtV0NDQ0FBQUlJSUlBQUFn
Z2dNRWxBSFY0cCtOQ3MxaDZkZ3BDMjdVT3J3TU5CaVRacgp1OFlIMFNDRXpYSjlXQUtRdFFWckND
Q0FBQUlJSUlBQUFnZ2dNRVdnYytqUmg2N3JOQko2Q0owRGtEUVN1Z0tQWmpVQ2V1clR5cEhJCi9y
U3pGNnk4STBzRUVFQUFBUVFRUUFBQkJCQkFZQ3pnN0VacTZhRlNLOGNZdmJyaWJaMEpVZnFqMDIx
dmF4U0lMTkordXFHSkFHVGwKd0U4RUVFQUFBUVFRUUFBQkJCQ1lLQkJqcDNJclpVQ2M1dWdMWlQv
YTBDc0FjZURoREVpaktLUnhMUmFOMENmS3Nqc0NDQ0NBQUFJSQpJSUFBQWdqY1M2Qndwa1BSUm94
RldIU2wyb0hvdG1hM0EwbnJDa0FjaktoQ2E1aG9BekpRc0lJQUFnZ2dnQUFDQ0NDQUFBS1RCQlJz
CnVBZXNwb25LZkhTaFVlM1ZVbW1QZHRtbXdNUWxXczZFTEVhTjBIZVdZQlhqVG5zbm5RMDdud1dC
bUZvVm5ZVXI1Um9SUUFBQkJCQkEKQUFFRU5nVTh3UG5TS1JERkRHcDdybllmYnBKZWhTYVcycTd5
S3dVZ3kvMHNTWDRzR1pBc3dSSUJCQkJBQUFFRUVFQUFBUVFtQ2ZTcQpzM0pBMGJqZGgvNHc3U0Nr
U2IxZ3JUSWdycnp5TmlWRWhtbG5CbVRZa3hVRUVFQUFBUVFRUUFBQkJCQkFZQ1FRTlJKNjBBam9j
MjFyCjB5Q0U2dVZLb3cvV3N6TFVIb1JRQXhEdTZjNyszUHBCa3dJUXltM1djR2Q1amJLOHMvenFj
KzBJSUlBQUFnZ2dnTUJJd0VHR1ppVkEKVnFPZkZ6SE1WWmRWS3pCeEFPSUIwQ3ZkTngvVlhZMVdS
d2RpRlFFRUVFQUFBUVFRUUFBQkJCRFlJVkFvMDFFb0ExSTZDdEZVeit0UQphWGowU3JkTHBUcWNJ
SEVXcEJwRkhhUFZIVWZuYmdRUVFBQUJCQkJBQUFFRUVFQmdMS0M0bzFCSHU0cEJOSmRxZmg3VFhH
bzVVeVpFCjhVaFFSVmFhODhNbWxXRGxCN0ZFQUFFRUVFQUFBUVFRUUFBQkJOejdWYVhaWVllU0lh
dGdRK21PbVZJZmxRSVE1MFVjaURTYTgwUUcKSkV1d1JBQUJCQkJBQUFFRUVFQUFnVWtDVVcwK1Nn
VWN6b0M0ek1yWkRtYy9TbTEzVlZhdERFaGFqcUtPMGVxazUySm5CQkJBQUFFRQpFRUFBQVFRUU9P
c0N5blI0MkVCbk8wcEZJVE9sTzl3TDFreFJSNlhndzhGRzRVeUk5c2tUQVVpV1lJa0FBZ2dnZ0FB
Q0NDQ0FBQUtUCkJOVEJWZW9CeTZPaHAwQkVnVWV0YU1UWmtOSTlZeW53bUtuUmh4dWk1NGtBSkV1
d1JBQUJCQkJBQUFFRUVFQUFnVWtDNnZBcVJJMTAKcnZBamRBcEMycllQclFJUGQ4dXJ6ZHF1OFVF
MENHR3pYQitXQUdSdHdSb0NDQ0NBQUFJSUlJQUFBZ2hNRWVnY2V2U2g2enFOaEI1Qwo1d0FrallT
dXdLTlpqWUR1N1NrUzJUOHV2V0JOQVdaZkJCQkFBQUVFRUVBQUFRUVFHQVNjM1VndFBWUnE1VGlq
VjFlOHJUTWhTbjkwCnV1MXRqUUtSUmRwUE56UVJnS3djanZYek1UY3Roc2ZmY09Nb3Z6UnN2YmlW
dSs3d29QYXI2YzdiOS9JcVN3UVFRQUFCQkJCQUFBRUUKcmdpQkdEdVZXeWtENGpSSFh5ajcwWVpl
QVlnREQyZEFHa1Voald1eGFJUitSYnhlbkFRQ0NDQ0FBQUlJSUlBQUF2ZHBnY0taRGtVYgpNUlpo
MFpWcUI2TGJtdDBPSkswckFIRXdvZ3F0WWFJTnlFREJDZ0lJSUlBQUFnZ2dnQUFDQ0V3U1VMRGhI
ckNhSmlyejBZVkd0VmRMCnBUM2FaWnNDRTVkb09ST3lHQlVKVVlJMVNmamduY2RsVnpmZmN2ZkJP
MTNFMXR0dVBUOTZGQ1ZZSXd4V0VVQUFBUVFRUUFBQkJLNEEKQVE5d3ZuUUtSSDN3cXUyNTJuMjRT
WG9WbWxocXU4cXZGSUFzOTdNaytYVEpnR1FKbGdnZ2dBQUNDQ0NBQUFJSUlEQkpvRmVkbFFPSwp4
dTArMUE3RVFVaVRlc0ZhWlVCY2VlVnRTb2dNRXhtUWdZSVZCQkJBQUFFRUVFQUFBUVFRbUNJUU5S
SjYwQWpvN2pxcFRZTVFxcGNyCmpUNVl6OHBRZXhCQ0RVQzRwenY3Yyt1amtnRlpXN0NHQUFJSUlJ
QUFBZ2dnZ0FBQ1V3UWNaR2d1VklXVlJqL1h5bHgxV2JVQ0V3Y2cKSGdDOTBuM3pVZFF4V3AzeVRP
eUxBQUlJSUlBQUFnZ2dnQUFDWjEyZ1VLYWpVQWFrZEJTaXFaN1hvZEx3NkpWdWw2cTFjb0xFV1JB
SApKM2thcmVaTkxCRkFBQUVFRUVBQUFRUVFRQUNCSXdnNCs2R09kaFdEYUM3Vi9EeW11ZFJ5cGt5
STRwR2dpcXcwNTZQUkJpUkxzRVFBCkFRUVFRQUFCQkJCQUFJRnBBdXI5cXRMc3NFUEprRld3b1hU
SFRLbVBTZ0dJOHlJT1JCck5lU0lEa2lWWUlvQUFBZ2dnZ0FBQ0NDQ0EKd0NTQnFEWWZwUUlPWjBC
Y1p1VnNoN01mcGJhN0txdFdCaVF0UjFISGFIWFNjN0V6QWdnZ2dBQUNDQ0NBQUFJSW5IVUJaVHFV
QUVuWgpqbEpSeUV6cER2ZUNOVlBVVVNuNGNMQlJPQk9pZmZKRUFKSWxXQ0tBQUFJSUlJQUFBZ2dn
Z01Ba0FYVndGVFFFU0JvTlBRVWlDanhxCjFWNDVHMUs2Wnl3RkhqTTErbkJEOUR3UmdHUUpsZ2dn
Z0FBQ0NDQ0FBQUlJSURCSlFCMWVLZmpRck5ZZW5TS1J0dTFEcThERFFZazIKYTd2R0I5RWdoTTF5
ZlZnQ2tMVUZhd2dnZ0FBQ0NDQ0FBQUlJSURCRm9IUG8wWWV1NnpRU2VnaWRBNUEwRXJvQ2oyWTFB
cnEzcDBoawovN2owZ2pVRm1IMFJRQUFCQkJCQUFBRUVFRUJnRUhCMkk3WDBVS21WNDR4ZVhmRzJ6
b1FvL2RIcHRyYzFDa1FXYVQvZDBFUUFzbkxnCkp3SUlJSUFBQWdnZ2dBQUNDRXdVaUxGVHVaVXlJ
RTV6OUlXeUgyM29GWUE0OEhBR3BGRVUwcmdXaTBib0UyWFpIUUVFRUVBQUFRUVEKUUFBQkJPNGxV
RGpUb1dnanhpSXN1bEx0UUhSYnM5dUJwSFVGSUE1R1ZLRTFUTFFCR1NoWVFRQUJCQkJBQUFFRUVF
QUFnVWtDQ2phaQpNaDVORTVYNTZFS2oycXVsMGg3dHNrMkJpVXUwbkFsWjBBaDlFaXM3STRBQUFn
Z2dnQUFDQ0NDQXdBRUNIdUI4NlJTSVNxelU5bHp0ClB0d2t2UXBOTExWZDVWY0tRSmI3V1pMOGNE
SWdXWUlsQWdnZ2dBQUNDQ0NBQUFJSVRCTG9WV2ZsZ0tKeHV3KzFBM0VRMHFSZXNGWVoKRUZkZWVa
c1NJc05FSS9TQmdoVUVFRUFBQVFRUVFBQUJCQkNZSWhBMUVuclFDT2h6UGFoTmd4Q3FseXVOUGxq
UHlsQjdFRUlOUUxpbgpPL3R6NjZNU2dLd3RMbnJ0cmp0TXZwcHV1L1Y4WGozMmNuemNZeCtNQXlD
QUFBSUlJSUFBQWdnZ2NOSUNEakkwS3dHeUd2MjhpR0d1CnVxeGFnWWtERUErQVh1bSsrYWp1YXJS
NjBtZkQ4UkJBQUFFRUVFQUFBUVFRUU9CcUZpaVU2U2lVQVNrZGhXaXE1M1dvTkR4NnBkdWwKVWgx
T2tEZ0xVbzJpanRIcTFVekR0U0dBQUFJSUlJQUFBZ2dnZ01DSkN5anVLTlRScm1JUXphV2FuOGMw
bDFyT2xBbFJQQkpVa1pYbQovTnluVW9MMW1Kc1crZmpoaGh0SGZXNE5XeTl1WlZ5U2RPZnRleGQz
RUI2RkFBSUlJSUFBQWdnZ2dBQUNKeU5RRkFvdUhJSlVRY21RClZiQ2hkTWRNcVk5S0FZanpJZzVF
R3MxNUlnT1NKVmdpZ0FBQ0NDQ0FBQUlJSUlEQUpJR29OaCtsQWc1blFGeG01V3lIc3grbHRyc3EK
cTFZR0pDMUhVY2RvZGRKenNUTUNDQ0NBQUFJSUlJQUFBZ2ljZFFGbE9wUUFTZG1PVWxISVRPa085
NEkxVTlSUktmaHdzRkU0RTZKOQo4blFxSlZqanNxdWJiN2s3UDlleGx4ZjJNSFhsbEdDZHRlczk5
Z3ZKQVJCQUFBRUVFRUFBQVFTdUNnRjFjSlY2d1BKbzZJWExzUlI0CjFLcTljamFrZE05WUNqeG1p
ampjRUQxUFpFQ3lCRXNFRUVBQUFRUVFRQUFCQkJDWUpLQU9yMExVU09jS1AwS25JS1J0KzlBcThI
QzMKdk5xczdSb2ZSSU1RTnFObTRRUWdrNGpaR1FFRUVFQUFBUVFRUUFBQkJBYUJ6cUZISDdxdTAw
am9JWFFPUU5KSTZBbzhtdFVJNk42ZQpJcEg5QjUxS0NkWndRcXdnZ0FBQ0NDQ0FBQUlJSUlEQVZT
dmc3RVpxNmFGU0s4Y1p2YnJpYlowSlVmcWowMjF2YXhTSUxOSit1cUdKCkFHVGx3RThFRUVBQUFR
UVFRQUFCQkJDWUtCQmpwM0lyWlVDYzV1Z0xaVC9hMENzQWNlRGhERWlqS0tSeExkYW9FVG9sV0JP
UjJSMEIKQkJCQUFBRUVFRUFBQVFSV0FvVXpIWW8yWWl6Q29pdlZEa1MzTmJzZFNGcFhBT0pnUkJW
YXcwUUFNbEN3Z2dBQ0NDQ0FBQUlJSUlBQQpBcE1FRkd5NEI2eW1pY3A4ZEtGUjdkVlNhWTkyMmFi
QXhDVmF6b1FzYUlRK2laV2RFVUFBQVFRUVFBQUJCQkJBNEFBQkQzQytkQXBFCkpWWnFlNjUySDI2
U1hvVW1sdHF1OGlzRklNdjlMRWwrT0JtUUxNRVNBUVFRUUFBQkJCQkFBQUVFSmduMHFyTnlRTkc0
M1lmYWdUZ0kKYVZJdldLc01pQ3V2dkUwSmtXR2lFZnBBd1FvQ0NDQ0FBQUlJSUlBQUFnaE1FWWdh
Q1Qxb0JQUzVIdFNtUVFqVnk1VkdINnhuWmFnOQpDS0VHSU56VG5mMjU5VkhKZ0t3dFdFTUFBUVFR
UUFBQkJCQkFBSUVwQWc0eU5CZXF3a3FqbjJ0bHJycXNXb0dKQXhBUGdGN3B2dmtvCjZoaXRUbmtt
OWtVQUFRUVFRQUFCQkJCQUFJR3pMbEFvMDFFb0ExSTZDdEZVeit0UWFYajBTcmRMMVZvNVFlSXNp
SU9UUEkxVzh5YVcKQ0NDQUFBSUlJSUFBQWdnZ2dNQVJCSno5VUVlN2lrRTBsMnArSHROY2FqbFRK
a1R4U0ZCRlZwcnowV2dEa2lWWUlvQUFBZ2dnZ0FBQwpDQ0NBd0RTQm9sQnc0UkNrQ2txR3JJSU5w
VHRtU24xVUNrQ2NGM0VnMG1qT0V4bVFMTUVTQVFRUVFBQUJCQkJBQUFFRUpnbEV0ZmtvCkZYQTRB
K0l5SzJjN25QMG90ZDFWV2JVeUlHazVpanBHcTVPZWk1MFJRQUFCQkJCQUFBRUVFRURnckFzbzA2
RUVTTXAybElwQ1prcDMKdUJlc21hS09Tc0dIZzQzQ21SRHRreWNDa0N6QkVnRUVFRUFBQVFRUVFB
QUJCQ1lKcUlPcm9DRkEwbWpvS1JCUjRGR3I5c3Jaa05JOQpZeW53bUtuUmh4dWk1NGtBSkV1d1JB
QUJCQkJBQUFFRUVFQUFnVWtDNnZCS3dZZG10ZmJvRkltMGJSOWFCUjRPU3JSWjJ6VStpQVloCmJK
YnJ3eEtBckMxWVF3QUJCQkJBQUFFRUVFQUFnU2tDblVPUFBuUmRwNUhRUStnY2dLU1IwQlY0Tktz
UjBMMDlSU0w3eHoyVlhyRHUKdXNOaklhNm0yMjQ5bjFlUHZSd2Y5OWdITzhFRGpNL3JMRnp2Q2RK
eEtBUVFRQUFCQkJCQUFJSDdzSUN6RzZtbGgwcXRIR2YwNm9xMwpkU1pFNlk5T3Q3MnRVU0N5U1B2
cGhxWlRDVUJXaCtZbkFnZ2dnQUFDQ0NDQUFBSUlYTTBDTVhZcXQxSUd4R21PdmxEMm93MjlBaEFI
CkhzNkFOSXBDR3RkaTBRajlhbjRiY0cwSUlJQUFBZ2dnZ0FBQ0NGd2FnY0taRGtVYk1SWmgwWlZx
QjZMYm10ME9KSzByQUhFd29ncXQKWVRxVkRNaWR0KzhOVHhEQ2VIMjArU3BhUFd2WGV4VzlkRndL
QWdnZ2dBQUNDQ0NBd0hFRUZHeEVaVHhjWnRYM1hXaFVlN1ZVMnFOZAp0Z3BNWnFrQnVqTWhDeHFo
SDBlWnh5S0FBQUlJSUlBQUFnZ2dnSUFGUE1ENTBpa1FsVmlwN2JuYWZiaEplaFdhV0dxN3lxL1U5
bU81Cm55WEpZdlNDbFNWWUlvQUFBZ2dnZ0FBQ0NDQ0F3Q1NCWG5WV0RpZ2F0L3RRT3hBSElVM3FC
Y3NaRUFja3E4QkVDWkZoT3BVU3JPSG8KckNDQUFBSUlJSUFBQWdnZ2dNQlZLeEExRW5yUUNPanVB
N2ROZ3hDcWx5dU5QbGpQeWxCN0VFSU5RTGluTy90emF3SXlJR3NMMWhCQQpBQUVFRUVBQUFRUVFR
R0NLZ0lNTXpZV3lIV24wYzYzTVZaZFZLekJ4QU9JQjBDdmROeDlGSGFQVktjL0V2Z2dnZ0FBQ0ND
Q0FBQUlJCklIRFdCUXBsT2dwbFFFcEhJWnJxZVIwcURZOWU2WGFwV2lzblNKd0ZjWENTcDlGcTNz
UVNBUVFRUUFBQkJCQkFBQUVFRURpQ2dMTWYKNm1oWE1Zam1VczNQWTVwTExXZktoQ2dlQ2FySVNu
TStHbTFBc2dSTEJCQkFBQUVFRUVBQUFRUVFtQ1pRRkFvdUhJSlVRY21RVmJDaApkTWRNcVk5S0FZ
anpJZzVFR3MxNUlnT1NKVmdpZ0FBQ0NDQ0FBQUlJSUlEQUpJR29OaCtsQWc1blFGeG01V3lIc3gr
bHRyc3FxMVlHCkpDMUhVY2RvZGRKenNUTUNDQ0NBQUFJSUlJQUFBZ2ljZFFGbE9wUUFTZG1PVWxI
SVRPa085NEkxVTlSUktmaHdzRkU0RTZKOThqU3AKQktzWVB6SWZnU1VDQ0NDQUFBSUlJSUFBQWdp
Y1NRRjFjQlUwQkVnYURkMnhnaHVmMTZxOWNqYWtkTTlZQ2p4bWlqamNFRDFQWkVDeQpCRXNFRUVB
QUFRUVFRQUFCQkJDWUpLQU9yeFI4YUZacmowNlJTTnYyb1ZYZzRhQkVtN1ZkNDROb0VNSm11VDRz
QWNqYWdqVUVFRUFBCkFRUVFRQUFCQkJDWUlxRGh6Z3VGR2wzWGFTUjBqWHp1QUNTTmhLN0Fvd25C
STZCN2U0cEU5bys3c3dUTFE2b3pJWUFBQWdnZ2dBQUMKQ0NDQUFBS2JBczV1cEpZZUtyVnkxTkNy
Szk3V21SQ2xQenJkOXJaR2djZ2k3YWNibW5ZR0lLdmQrSWtBQWdnZ2dBQUNDQ0NBQUFJSQpYQ2dR
WTZkeUsyVkFuTFRvQzJVLzJ0QXJBSEhnNFF4SW95aWtjUzNXcUJFNkpWZ1hHbklMQVFRUVFBQUJC
QkJBQUFFRWppaFFPTk9oCmFDUEdJaXk2VXUxQWRGdXoyNEdrZFFVZ0RrWlVvVFZNQkNBREJTc0lJ
SUFBQWdnZ2dBQUNDQ0F3U1VEQlJsVEdvMm1pTWg5ZGFGUjcKdFZUYW8xWGpEd2NtTHRGeUptUkJJ
L1JKck95TUFBSUlJSUFBQWdnZ2dBQUNCd2g0Z1BPbEl3MlZXS250dWRwOXVFbDZGWnBZYXJ2Swpy
eFNBTFBlekpQbmhaRUN5QkVzRUVFQUFBUVFRUUFBQkJCQ1lKTkNyenNvQlJlTjJIMm9INGlDa1Ni
MWdyVElncnJ6eU52ZUdsU2NhCm9XY0psZ2dnZ0FBQ0NDQ0FBQUlJSURCSklHb2s5S0FSME9kNlZK
c0dJVlF2VnhwOXNKNlZvZllnaEJxQWNFOTM5dWZXaHlVRHNyWmcKRFFFRUVFQUFBUVFRUUFBQkJL
WUlPTWpRWEtnS0s0MStycFc1NnJKcUJTWU9RRHdBZXFYNzVxT29ZN1E2NVpuWUZ3RUVFRUFBQVFR
UQpRQUFCQk02NlFLRk1SNkVNU09rb1JGTTlyME9sNGRFcjNTNVZhK1VFaWJNZ0RrN3lORnJObTFn
aWdBQUNDQ0NBQUFJSUlJQUFBa2NRCmNQWkRIZTBxQnRGY3F2bDVUSE9wNVV5WkVNVWpRUlZaYWM1
SDI5a0dwQ2hXMFV4K0FFc0V4Z0p1Yk1TRUFBSUlJSUFBQWdnZ2NFWUYKRkN0VW1oMTJLQm15Q2ph
VTdwZ3A5VkVwQUhFazRVQ2swWnduTWlCWmdpVUNDQ0NBQUFJSUlJQUFBZ2hNRW9ocTgxRXE0SEFH
eEdWVwp6blk0KzFGcXU2dXlhbVZBMG5JVWRZeFdKejBYT3lPQUFBSUlJSUFBQWdnZ2dNQlpGMUNt
d3dWVHpuYVVpa0ptU25lNEY2eVpvbzVLCndZZURqY0taRU8yVHA1MGxXSGxITHltM0dXdWMzWFhL
OHM3dWE4K1ZJNEFBQWdnZ2dBQUNZd0VYNDJzSWtEUWF1bjlIZE9Qeld0R0kKc3lHbHRqc2pNbFBF
NFlib2VTSURraVZZSW9BQUFnZ2dnQUFDQ0NDQXdDUUJkWGlsNEVPeldudDBpa1RhdGcrdEFnOEhK
ZHFzN1JvZgpSSU1RTnN2MVlRbEExaGFzSVlBQUFnZ2dnQUFDQ0NDQXdCU0J6cUZISDdxdVU3VlVD
SjBEa0RRU3VnS1BaalVDZXVxenlKSEkvalNwCkJDcy9pQ1VDQ0NDQUFBSUlJSUFBQWdnZzRPeEdh
dW1oVWl2SEdMMjY0bTJkQ1ZINm85TnRiMnNVaUN6U2ZycWhpUUJrNWNCUEJCQkEKQUFFRUVFQUFB
UVFRbUNnUVk2ZHlLMlZBbk9ib0MyVS8ydEFyQUhIZzRReElveWlrY1MzV3FCRTZKVmdUa2RrZEFR
UVFRQUFCQkJCQQpBQUVFVmdLRk14MktObUlzd3FJcjFRNUV0elc3SFVoYVZ3RGlZRVFWV3NORUFE
SlFzSUlBQWdnZ2dBQUNDQ0NBQUFLVEJCUnNSR1U4Cm1pWXE4OUdGUnJWWFM2VTkybVdiQWhPWGFE
a1RzcUFSK2lSV2RrWUFBUVFRUUFBQkJCQkFBSUVEQkR6QStkSXBFSlZZcWUyNTJuMjQKU1hvVm1s
aHF1OHF2RklBczk3TWsrZUZrUUxJRVN3UVFRQUFCQkJCQUFBRUVFSmdrMEt2T3lnRkY0M1lmYWdm
aUlLUkp2V0N0TWlDdQp2UEkySlVTR2lVYm9Bd1VyQ0NDQUFBSUlJSUFBQWdnZ01FVWdhaVQwb0JI
UTUzcFFtd1loVkM5WEduMnducFdoOWlDRUdvQndUM2YyCjU5WkhKUUJaVzF6MDJtTnVXZ3lQdmVI
R1VZSGJzUFhpVnU2Nnd5L2xhcnJ6OXIyOHloSUJCQkJBQUFFRUVFQUFnU3REd0VHR1ppVkEKVnFP
ZkZ6SE1WWmRWS3pCeEFPSUIwQ3ZkTngvVlhZMVdyNHhyNEN3UVFBQUJCQkJBQUFFRUVFRGd2aUZR
S05OUktBTlNPZ3JSVk0vcgpVR2w0OUVxM1M2VTZuQ0J4RnFRYVJSMmoxZnZHUlhLV0NDQ0FBQUlJ
SUlBQUFnZ2djSVVJS080bzFOR3VZaEROcFpxZnh6U1hXczZVCkNWRThFbFNSbGVaOHhwUmdaWWxq
TE1kbFZ6ZmZjdmN4am5UaFEyKzc5ZnhvQXlWWUl3eFdFVUFBQVFRUVFBQUJCSzRFZ2FKUWNPRVEK
cEFwS2hxeUNEYVU3WmtwOVZBcEFuQmR4SU5Kb3poTVprQ3pCRWdFRUVFQUFBUVFRUUFBQkJDWUpS
TFg1S0JWd09BUGlNaXRuTzV6OQpLTFhkVlZtMU1pQnBPWW82UnF1VG5vdWRFVUFBQVFRUVFBQUJC
QkJBNEt3TEtOT2hCRWpLZHBTS1FtWktkN2dYckptaWprckJoNE9OCndwa1E3Wk1uQXBBc3dSSUJC
QkJBQUFFRUVFQUFBUVFtQ2FpRHE5UURsa2REVDRHSUFvOWF0VmZPaHBUdUdVdUJ4MHlOUHR3UVBV
OEUKSUZtQ0pRSUlJSUFBQWdnZ2dBQUNDRXdTVUlkWElXcWtjNFVmb1ZNUTByWjlhQlY0dUZ0ZWJk
WjJqUStpUVFpYjBVZ1ZCQ0NUaU5rWgpBUVFRUUFBQkJCQkFBQUVFQm9IT29VY2Z1cTdUU09naGRB
NUEwa2pvQ2p5YTFRam8zcDRpa2YwSDBRdldvTWNLQWdnZ2dBQUNDQ0NBCkFBSUlUQkZ3ZGlPMTlG
Q3BsZU9NWGwzeHRzNkVLUDNSNmJhM05RcEVGbWsvM2RCRUFMSnk0Q2NDQ0NDQUFBSUlJSUFBQWdo
TUZJaXgKVTdtVk1pQk9jL1NGc2g5dDZCV0FPUEJ3QnFSUkZOSzRGb3RHNkJObDJSMEJCQkJBQUFF
RUVFQUFBUVR1SlZBNDA2Rm9JOFlpTExwUwo3VUIwVzdQYmdhUjFCU0FPUmxTaE5VeTBBUmtvV0VF
QUFRUVFRQUFCQkJCQUFJRkpBZ28yM0FOVzAwUmxQcnJRcVBacXFiUkh1MnhUCllPSVNMV2RDRmpS
Q244VEt6Z2dnZ0FBQ0NDQ0FBQUlJSUhDQWdBYzRYem9Gb2hJcnRUMVh1dzgzU2E5Q0UwdHRWL21W
QXBEbGZwWWsKUDV3TVNKWmdpUUFDQ0NDQUFBSUlJSUFBQXBNRWV0VlpPYUJvM081RDdVQWNoRFNw
RjZ4VkJzU1ZWOTZtaE1ndzBRaDlvR0FGQVFRUQpRQUFCQkJCQUFBRUVwZ2hFallRZU5BTDZYQTlx
MHlDRTZ1Vktvdy9Xc3pMVUhvUlFBeER1NmM3KzNQcW9aRURXRnF3aGdBQUNDQ0NBCkFBSUlJSURB
RkFFSEdab0xWV0dsMGMrMU1sZGRWcTNBeEFHSUIwQ3ZkTjk4RkhXTVZxYzhFL3NpZ0FBQ0NDQ0FB
QUlJSUlEQVdSY28KbE9rb2xBRXBIWVZvcXVkMXFEUThlcVhicFdxdG5DQnhGc1RCU1o1R3Eza1RT
d1FRUUFBQkJCQkFBQUVFRUVEZ0NBTE9mcWlqWGNVZwpta3MxUDQ5cExyV2NLUk9pZUNTb0lpdk4r
V2kwQWNrU0xCRkFBQUVFRUVBQUFRUVFRR0NhUUZFb3VIQUlVZ1VsUTFiQmh0SWRNNlUrCktnVWd6
b3M0RUdrMDU0a01TSlpnaVFBQ0NDQ0FBQUlJSUlBQUFwTUVvdHA4bEFvNG5BRnhtWld6SGM1K2xO
cnVxcXhhR1pDMEhFVWQKbzlWSno4WE9DQ0NBQUFJSUlJQUFBZ2dnY05ZRmxPbFFBaVJsTzBwRklU
T2xPOXdMMWt4UlI2WGd3OEZHNFV5STlza1RKVmhaNGhqTAp1KzV3eDJPcjZiWmJ6K2ZWWXkvSHh6
MzJ3VGdBQWdnZ2dBQUNDQ0NBQUFJbkxLQU9yb0tHQUVtam9SY3V4MUxnVWF2Mnl0bVEwajFqCktm
Q1lLZUp3US9ROGtRSEpFaXdSUUFBQkJCQkFBQUVFRUVCZ2tvQTZ2Rkx3b1ZtdFBUcEZJbTNiaDFh
Qmg0TVNiZFoyalEraVFRaWIKNWZxd0JDQnJDOVlRUUFBQkJCQkFBQUVFRUVCZ2lrRG4wS01QWGRk
cEpQUVFPZ2NnYVNSMEJSN05hZ1IwYjArUnlQNXhLY0dhQXN5KwpDQ0NBQUFJSUlJQUFBZ2dnTUFn
NHU1RmFlcWpVeW5GR3I2NTRXMmRDbFA3b2ROdmJHZ1VpaTdTZmJtZ2lBRms1OEJNQkJCQkFBQUVF
CkVFQUFBUVFtQ3NUWXFkeEtHUkNuT2ZwQzJZODI5QXBBSEhnNEE5SW9DbWxjaXpWcWhFNEoxa1Jr
ZGtjQUFRUVFRQUFCQkJCQUFJR1YKUU9GTWg2S05HSXV3NkVxMUE5RnR6VzRIa3RZVmdEZ1lVWVhX
TUpFQkdTZ3VmdVdHRzlldGFtNis1ZTZMUDlER0l5L3NVV3R2NDE1dQpJb0FBQWdnZ2dBQUNDQ0J3
bVFVVWJFUmxQRnhtMWZkZGFGUjd0VlRhbzEyMkNreG1xUUc2TXlHTDlhL0xxV3ZleTN6V1BEMEND
Q0NBCkFBSUlJSUFBQWdqY0Z3VTh3UG5TS1JDVldLbnR1ZHA5dUVsNkZacFlhcnZLcjlUMlk3bWZK
Y25YUndsV2xtQ0pBQUlJSUlBQUFnZ2cKZ0FBQ2t3UjYxVms1b0dqYzdrUHRRQnlFTktrWExHZEFI
SkNzQWhNbFJJYUpFcXlCZ2hVRUVFQUFBUVFRUUFBQkJCQ1lJaEExRW5yUQpDT2dlbHJ0Tmd4Q3Fs
eXVOUGxqUHlsQjdFRUlOUUxpbk8vdHo2Nk9TQVZsYnNJWUFBZ2dnZ0FBQ0NDQ0FBQUpUQkJ4a2FD
NlU3VWlqCm4ydGxycnFzV29HSkF4QVBnRjdwdnZrbzZoaXRUbmttOWtVQUFRUVFRQUFCQkJCQUFJ
R3pMbEFvMDFFb0ExSTZDdEZVeit0UWFYajAKU3JkTDFWbzVRZUlzaUlPVFBJMVc4eWFXQ0NDQUFB
SUlJSUFBQWdnZ2dNQVJCSno5VUVlN2lrRTBsMnArSHROY2FqbFRKa1R4U0ZCRgpWcHJ6MFdnRGtp
VllJb0FBQWdnZ2dBQUNDQ0NBd0RTQm9sQnc0UkNrQ2txR3JJSU5wVHRtU24xVUNrQ2NGM0VnMG1q
T0V4bVFMTUVTCkFRUVFRQUFCQkJCQUFBRUVKZ2xFdGZrb0ZYQTRBK0l5SzJjN25QMG90ZDFWV2JV
eUlHazVpanBHcTVPZWk1MFJRQUFCQkJCQUFBRUUKRUVEZ3JBc28wNkVFU01wMmxJcENaa3AzdUJl
c21hS09Tc0dIZzQzQ21SRHRreWNDa0N6QkVnRUVFRUFBQVFRUVFBQUJCQ1lKcUlPcgpvQ0ZBMG1q
b0tSQlI0RkdyOXNyWmtOSTlZeW53bUtuUmh4dWk1NGtBSkV1d1JBQUJCQkJBQUFFRUVFQUFnVWtD
NnZCS3dZZG10ZmJvCkZJbTBiUjlhQlI0T1NyUloyelUraUFZaGJKYnJ3eEtBckMxWVF3QUJCQkJB
QUFFRUVFQUZEanpWQUFBZ0FFbEVRVlFBZ1NrQ0d1NjgKVUtqUmRaMUdRdGZJNXc1QTBram9Danlh
RUR3Q3VyZW5TR1QvdVBTQ05RV1lmUkZBQUFFRUVFQUFBUVFRUUdBUWNIWWp0ZlJRcVpYagpqRjVk
OGJiT2hDajkwZW0ydHpVS1JCWnBQOTNRUkFDeWN1QW5BZ2dnZ0FBQ0NDQ0FBQUlJVEJTSXNWTzVs
VElnVG5QMGhiSWZiZWdWCmdEandjQWFrVVJUU3VCYUxSdWdUWmRrZEFRUVFRQUFCQkJCQUFBRUU3
aVZRT05PaGFDUEdJaXk2VXUxQWRGdXoyNEdrZFFVZ0RrWlUKb1RWTXRBRVpLRmhCQUFFRUVFQUFB
UVFRUUFDQlNRSUtOcUl5SGswVGxmbm9RcVBhcTZYU0hxMGFmemd3Y1ltV015RUxHcUZQWW1WbgpC
QkJBQUFFRUVFQUFBUVFRT0VEQUE1d3ZIV21veEVwdHo5WHV3MDNTcTlERVV0dFZmcVVBWkxtZkpj
a1BKd09TSlZnaWdBQUNDQ0NBCkFBSUlJSURBSklGZWRWWU9LQnEzKzFBN0VBY2hUZW9GYTVVQmNl
V1Z0N2szckR6UkNEMUxIR041MXgzejRkRzMzWHArV0QvdXl2aTQKeHowV2owY0FBUVFRUUFBQkJC
QkE0S1FGb2taQ0R4b0IzYjhOdDJrUVF2VnlwZEVINjFrWmFnOUNxQUVJOTNSbmYyNzl6R1JBMWhh
cwpJWUFBQWdnZ2dBQUNDQ0NBd0JRQkJ4bWFDMVZocGRIUHRUSlhYVmF0d01RQmlBZEFyM1RmZkJS
MWpGYW5QQlA3SW9BQUFnZ2dnQUFDCkNDQ0F3RmtYS0pUcEtKUUJLUjJGYUtybmRhZzBQSHFsMjZW
cXJad2djUmJFd1VtZUtNSEtFc2RZM25uNzN1alI0L1hSWmxZUlFBQUIKQkJCQUFBRUVFTGphQkp6
OVVFZTdaYUdBUTRNUVZxSFZyTnVhWFlxbGVDUm9rZVo4NlFRZ1dZSWxBZ2dnZ0FBQ0NDQ0FBQUlJ
VEJOUQo0RkZwamdvN2xBeFpCUnRLZDh5VStxaFVpdVc4eUV6THh0MWw3VStqWkVqZXhCSUJCQkJB
QUFFRUVFQUFBUVFRMkMwUTFlYWpWTUNoCktxeFVadVZzaDdNZnBiYTdLcXRXQmlRdFIxSEhhSFgz
RTdBSEFnZ2dnQUFDQ0NDQUFBSUlJREFJS05PaEJFaktkcFNLUW1aS2Q3ajAKYXFhb28xTHc0V0Nq
Y0NaRSsrU0pBQ1JMc0VRQUFRUVFRQUFCQkJCQUFJRkpBdXJnS21nSWtEUWFlZ3BFRkhqVXFyMUtQ
V0s1Wnl3RgpIak0xK25CRDlEd1JnR1FKbGdnZ2dBQUNDQ0NBQUFJSUlEQkpRQjFlS2ZqUXJOWWVu
U0tSdHUxRHE4RERRWWsyYTd2R0I5RWdoTTF5CmZWZ0NrTFVGYXdnZ2dBQUNDQ0NBQUFJSUlEQkZv
SFBvMFlldTZ6UVNlZ2lkQTVBMEVyb0NqMlkxQXJxM3AwaGsvN2owZ2pVRm1IMFIKUUFBQkJCQkFB
QUVFRUVCZ0VIQjJJN1gwVUttVjQ0eGVYZkcyem9Rby9kSHB0cmMxQ2tRV2FUL2QwRVFBc25MZ0p3
SUlJSUFBQWdnZwpnQUFDQ0V3VWlMRlR1WlV5SUU1ejlJV3lIMjNvRllBNDhIQUdwRkVVMHJnV2kw
Ym9FMlhaSFFFRUVFQUFBUVFRUUFBQkJPNGxVRGpUCm9XZ2p4aUlzdWxMdFFIUmJzOXVCcEhVRklB
NUdWS0UxVEpNeUlNVzQvNnpoRUt3Z2dBQUNDQ0NBQUFJSUlJREFtUlJRc0JHVjhYQ1oKVmQ5M29W
SHQxVkpwajNiWktqQ1pwUWJvem9Rc2FJUitKdDhlWERRQ0NDQ0FBQUlJSUlBQUFpY3E0QUhPbDA2
QnFNUktiYy9WN3NOTgowcXZReEZMYlZYNmx0aC9ML1N4SmZtSjZ3Y29TTEJGQUFBRUVFRUFBQVFR
UVFHQ1NRSzg2S3djVWpkdDlxQjJJZzVBbTlZTGxESWdECmtsVmdvb1RJTU8wc3dmS0JtQkJBQUFF
RUVFQUFBUVFRUUFDQlRZR29rZENEUmtDZjY0NDJEVUtvWHE0MCttQTlLMFB0UVFnMUFPR2UKN3V6
UHJSOUpCbVJ0d1JvQ0NDQ0FBQUlJSUlBQUFnaE1FWENRb2JsUXppS05mcTZWdWVxeWFnVW1Ea0E4
QUhxbCsrYWpxR08wT3VXWgoyQmNCQkJCQUFBRUVFRUFBQVFUT3VrQ2hURWVoREVqcEtFUlRQYTlE
cGVIUks5MHVWV3ZsQklteklBNU84alJhelp0WUlvQUFBZ2dnCmdBQUNDQ0NBQUFKSEVIRDJReDN0
S2diUlhLcjVlVXh6cWVWTW1SREZJMEVWV1duT1I5dlpCaVR2eUJJQkJCQkFBQUVFRUVBQUFRUVEK
dUVCQXczUlVtaDEyS0JteUNqYVU3cGdwOVZFcEFIRmV4SUZJb3psUFpFQ3lCRXNFRUVBQUFRUVFR
QUFCQkJDWUpCRFY1cU5Vd09FTQppTXVzbk8xdzlxUFVkbGRsMWNxQXBPVW82aGl0VG5vdWRrWUFB
UVFRUUFBQkJCQkFBSUd6THFCTWg4Y3FkN2FqVkJReVU3ckR2V0ROCkZIVlVDajRjYkJUT2hHaWZQ
QkdBWkFtV0NDQ0FBQUlJSUlBQUFnZ2dNRW5BQTNab0NKQTBHbm9LUkJSNDFJcEduQTBwM1RPV0Fv
K1oKR24yNElYcWVDRUN5QkVzRUVFQUFBUVFRUUFBQkJCQ1lKS0FPcnhSOGFGWnJqMDZSU052Mm9W
WGc0YUJFbTdWZDQ0Tm9FTUptdVQ0cwpBY2phZ2pVRUVFQUFBUVFRUUFBQkJCQ1lJcURoemd1Rkds
M1hhU1Iwalh6dUFDU05oSzdBb3duQkk2Q25jYzBkaWV4UE8zdkJLc1lGClcvbFJMQkhZRjRqcEhR
VUhBZ2dnZ0FBQ0NDQ0F3RmtVY0hZanRmUlFxWlZqakY1ZDhiYk9oQ2o5MGVtMnR6VUtSQlpwUDkz
UXRETUEKV2UzR1R3UVFRQUFCQkJCQUFBRUVFRURnUW9FWU81VmJLUVBpUDByM2hiSWZiZWdWZ0Rq
d2NBYWtVUlRTdUJhTFJ1Z1h3bkVMQVFRUQpRQUFCQkJCQUFBRUVwZ3NVem5RbzJvaXhDSXV1VkRz
UTNkYnNkaUJwWFFHSWd4RlZhQTNUcEF3STVUYUQyNWxlb1N6dlRMLzhYRHdDCkNDQ0FBQUlJSUxB
V1VMQVJsZkZ3bVZYZmQ2RlI3ZFZTYVk5V2pUKzZPRXNOMEowSldkQUlmVzNHR2dJSUlJQUFBZ2dn
Z0FBQ0NGeWMKZ0FjNFh6b0ZvaElydFQxWHV3ODNTYTlDRTB0dFYvbVYybjRzOTdNaytSbm9CU3RM
c0VRQUFRUVFRQUFCQkJCQUFJRkpBcjNxckJ4UQpORzczb1hZZ0RrS2ExQXVXTXlBT1NGYUJpWHZE
eXRPa0VxejhJSllJSUlBQUFnZ2dnQUFDQ0NDQVFOUkk2RUVqb005RjBhWkJDTlhMCmxVWWZyR2Rs
cUQwSW9RWWczTk9kL2JtMUZSbVF0UVZyQ0NDQUFBSUlJSUFBQWdnZ01FWEFRWWJtUXRtT05QcTVW
dWFxeTZvVm1EZ0EKOFFEb2xlNmJqNktPMGVxVVoySmZCQkJBQUFFRUVFQUFBUVFRT09zQ2hUSWRo
VElncGFNUVRmVzhEcFdHUjY5MHUxU3RsUk1rem9JNApPTW5UYURWdllva0FBZ2dnZ0FBQ0NDQ0FB
QUlJSEVIQTJROTF0S3NZUkhPcDV1Y3h6YVdXTTJWQ0ZJOEVWV1NsT1IrTk5pQlpnaVVDCkNDQ0FB
QUlJSUlBQUFnaE1FeWdLQlJjT1FhcWdaTWdxMkZDNlk2YlVSNlVBeEhrUkJ5S041ano5LyszZEI1
QWtaZm5IOFhmU1h1QUMKUVltQ2h4RkVrZ0dNZnpHV09Tdm1uS1hNcVF5WU1HZkZoRG1MR1MxekRx
V0NBWW9nbHFLQ29wZ0FEdzd1ZG5wbSt2LzgzdDIzNzcyKwo2ZW5wbmRtWmhmbDIxV3lINmVudzZl
NmRlZnA1MzdmSmdBUUorZ2dnZ0FBQ0NDQ0FBQUlJSUZCSklMVTZIM1VMT0pRQlVURXJaVHVVCi9h
amJkSlhLYWxrR3hQZWpxQ01hckxRdVprWUFBUVFRUUFBQkJCQkFBSUZaRjdCTWh5VkFmTGFqYmxG
STA5SWRhZ1dyYVZGSHc0SVAKQlJzMVpVSnNudEFSZ0FRSitnZ2dnQUFDQ0NDQUFBSUlJRkJKd0Jx
NGN2WUlFUDgwZEIrSVdPRFJzckpYeW9iVTFUS1dCUjVOcS9TaAppdWloSXdBSkV2UVJRQUFCQkJC
QUFBRUVFRUNna29BMWVHWEJoNzJzdGtmWElwRk9wK2M2Rm5nb0tMSEpOdDJlRDJJUElVemEyeGRM
CkpmVHRGaU1QM2ZqbytXd1poeHdWS1dkVGx6Wnd6bWw2dE10Q2QvYXBxOElnZlFRUVFBQUJCQkJB
QUFFRXBpdGdqenV2V2FpaEo2Q24KYWNOMUZZRDRKNkZiNEpFNHB5ZWdyMVlVb3RkaVJ3QVNKT2dq
Z0FBQ0NDQ0FBQUlJSUlCQUpRRmxOM3hORHl0cXBSaWpaMDN4ZHBRSgpzZlNIeFNSK1dtS0J5THlm
VC9OYWNheUZIbjhSUUFBQkJCQkFBQUVFRUVBQWdXb0NhZHExNGxZOTEwMHQvT2pWTFB2UmNUMExR
QlNNCktBT1NXQlNTcUN4V1ZBbWRBS1NhOGNDNTQySlh4eDYzWmVDOFZkNDgrY1IxMGV3VXdZb3dH
RVFBQVFRUVFBQUJCQkNZb2tCTm1RNkwKTnRLMDV1YTdkYXNIWXVQMlVqMFFQNnlpV2JaOVhhVkRG
anNxb1FjSitnZ2dnQUFDQ0NDQUFBSUlJRkJOd0lLTjFESWVTWkphNXFQcgpFaXQ3MWJhMFI4Y3Fm
eWd3VVJFdFpVTG1vK3JSQkNEVmlKa2JBUVFRUUFBQkJCQkFBQUVFRmdYMGdQTzJJZzByWXFXSzZG
MWZKYjNoCmtyUnUwNjM0bFFVZzdjVXNTVUFqQUFrUzlCRkFBQUVFRUVBQUFRUVFRS0NTUU0vS1dT
bWdTRlR2dytxQktBaEpmQ3RZQ3hrUWxielMKTkxXR0ZUcnFnQVFKK2dnZ2dBQUNDQ0NBQUFJSUlG
QkpJTFVub1R0N0Fyb2VHdEh4RHlHMFZxN3M2WU90WnQyMTlCQkNld0RoS251egp0M3I3WXNtQWJM
ZGdDQUVFRUVBQUFRUVFRQUFCQktvSUtNaXdWODFLWWZtbm45dkFuSlhMYWxsZ29nQkVEMEJ2Mkh0
elVkUVJEVlpaCkUvTWlnQUFDQ0NDQUFBSUlJSURBckF2VUxOTlJzd3hJWFZHSWRhMjVsbXZZNDlF
Yk5sNjNzbFpLa0NnTG91QWtkTkZnbUVRZkFRUVEKUUFBQkJCQkFBQUVFRUJoQ1FOa1BhMmpYWWhC
NzFWM0RodldxMjZ0cG1SQ0xSNXlWeVBLdnNEVHFnQVFKK2dnZ2dBQUNDQ0NBQUFJSQpJRkJOb0Zh
ejRFSWhTTU5aTW1RaDJMQjBSOU5TSHcwTFFKUVhVU0NTMkN0MFpFQ0NCSDBFRUVBQUFRUVFRQUFC
QkJDb0pKQmFuWSs2CkJSektnS2lZbGJJZHluN1ViYnBLWmJVc0ErTDdVZFFSRFZaYUZ6TWpnQUFD
Q0NDQUFBSUlJSURBckF0WXBzTVNJRDdiVWJjb3BHbnAKRHJXQzFiU29vMkhCaDRLTm1qSWhOay9v
Q0VDQ0JIMEVFRUFBQVFRUVFBQUJCQkNvSkdBTlhEbDdCSWgvR3JvUFJDendhRm5aSzJWRAo2bW9a
eXdLUHBsWDZVRVgwMEJHQUJBbjZDQ0NBQUFJSUlJQUFBZ2dnVUVuQUdyeXk0TU5lVnR1amE1Rklw
OU56SFFzOEZKVFlaSnR1Cnp3ZXhoeEFtN2UyTEpRRFpic0VRQWdnZ2dBQUNDQ0NBQUFJSVZCSG9L
dlRvdVc2M2EwOUNkNjZyQU1RL0NkMENqMlRoQ2VpYTdpT1IKeGVYU0NsWVZZT1pGQUFFRUVFQUFB
UVFRUUFDQlRFRFpEVi9UdzRwYUtjN29XVk84SFdWQ0xQM1J0WEZOU3l3UW1mZnoyWWgxQkNBTApE
dnhGQUFFRUVFQUFBUVFRUUFDQmlnSnAyclhpVnBZQlVacWpWN1BzUjhmMUxBQlI0S0VNU0dKUlNL
S3lXRlJDcnlqTDdBZ2dnQUFDCkNDQ0FBQUlJSUxDVFFFMlpEb3MyMHJUbTVydDFxd2RpNC9aU1BS
QS9iQUdJZ2hFcm9aVjExQUhKS0JoQUFBRUVFRUFBQVFRUVFBQ0IKU2dJV2JLU1c4VWlTMURJZlha
ZFkyYXUycFQwNjdZNFBURlJFUzVtUWVTcWhWMkpsWmdRUVFBQUJCQkJBQUFFRUVPZ2pvQWVjdDVV
QwpzU0pXVnZmYzZuMm9TbnJESlduZHBsdnhLd3RBMm90Wmt2Qng2b0FFaVRIMHp6bHRMbHZLeVNl
dXk0WkhIWWlYTytxeStEd0NDQ0NBCkFBSUlJSUFBQXVNUzZGazVLeFdwbWxlOUQ0dERGSVFrdmhV
c1pVRG1mRVYwVGJPRVNOWVJnR1FVRENDQUFBSUlJSUFBQWdnZ2dFQVYKZ2RTZWhPN3NDZWk2RGQv
eER5RzBWcTdzNllPdFp0MjE5QkJDZXdEaEtudXp0M3I3VXFrRHN0MkNJUVFRUUFBQkJCQkFBQUVF
RUtnaQpvQ0REWGpYTGZ2aW5uOXZBbkpYTGFsbGdvZ0JFRDBCdjJIdHpVZFJCQnFRS2NNbThaNSs2
S3BvakhvNG1NNGdBQWdnZ2dBQUNDQ0NBCndOVkVvR2FaanBwbFFPcUtLcXlpZVd1dTVScjJlUFNH
UlNXYXBnU0pzaUJkS3FGZlRZNDR1NEVBQWdnZ2dBQUNDQ0NBd0RRRmxQMncKaG5ZdEJyRlgzYXFm
cC81VnQzN1RNaUVXanpncmtlVmZZVFBKZ0FRSitnZ2dnQUFDQ0NDQUFBSUlJRkJOb0ZhejRFSWhT
TU5aTW1RaAoyTEN5V0UxTGZUUXNBTEhZd3djaWlackxXdXlpMGxoaEVuMEVFRUFBQVFRUVFBQUJC
QkJBb0Z3Z3RUb2ZkUXM0bEFGUkhSQmxPNVQ5CnFOdDAxUTFwV1FiRTk2T29JeG9zWHdGeklJQUFB
Z2dnZ0FBQ0NDQ0FBQUtaZ0dVNkxBSGlzeDExaTBLYVZ1NUtyV0ExTGVwb1dQQ2gKWUtPbVRJak5F
em9Da0NCQkh3RUVFRUFBQVFRUVFBQUJCQ29KV0FOWHpoNEI0cCtHN2dNUkN6eGFWdmJLdDRpbGxy
RXM4R2hhcFE5VgpSQThkQVVpUW9JOEFBZ2dnZ0FBQ0NDQ0FBQUtWQkt6Qkt3cys3R1cxUGJvV2lY
UTZQZGV4d0VOQmlVMjI2Zlo4RUhzSVlVSXJXSlZjCm1Sa0JCQkJBQUFFRUVFQUFBUVQ2Q1hRVmV2
UmN0OXYxVDBMdktnRHhUMEszd0NOWmVBSzZucER1STVIRno5TUtWajlJcGlHQUFBSUkKSUlBQUFn
Z2dnRUNwZ0xJYnZxYUhGYlZTbk5HenBuZzd5b1JZK3FOcjQ1cVdXQ0F5NytlekVlc0lRQlljK0lz
QUFnZ2dnQUFDQ0NDQQpBQUlWQmRLMGE4V3RMQU9pTkVldlp0bVBqdXRaQUtMQVF4bVF4S0tRUkdX
eHFJUmVVWmJaRVVBQUFRUVFRQUFCQkJCQVlDZUJtaklkCkZtMmthYzNOZCt0V0Q4VEc3YVY2SUg3
WUFoQUZJMVpDSyt1b2hKNVJNSUFBQWdnZ2dBQUNDQ0NBQUFLVkJDellTQzNqa1NTcFpUNjYKTHJH
eVYyMUxlM1RhSFIrWXFJaVdNaUh6VkVLdnhNck1DQ0NBQUFJSUlJQUFBZ2dnMEVkQUR6aHZLd1Zp
UmF5czdyblYrMUNWOUlaTAowcnBOdCtKWEZvQzBGN01rNGVOa1FJSUVmUVFRUUFBQkJCQkFBQUVF
RUtnazBMTnlWZ29vRXRYN3NIb2dDa0lTM3dyV1FnWkVKYTgwCnpSSWlXVWNsOUl5Q0FRUVFRQUFC
QkJCQUFBRUVFS2dpa05xVDBKMDlBWDNPUHRUeER5RzBWcTdzNllPdFp0MjE5QkJDZXdEaEtudXoK
dDNyN1VzbUFiTGRnQ0FFRUVFQUFBUVFRUUFBQkJLb0lLTWl3VjgxS1lmbW5uOXZBbkpYTGFsbGdv
Z0JFRDBCdjJIdHpVZFFSRFZaWgpFL01pZ0FBQ0NDQ0FBQUlJSUlEQXJBdlVMTk5Sc3d4SVhWR0lk
YTI1bG12WTQ5RWJObDYzc2xaS2tDZ0xvdUFrZE5GZ21FUWZBUVFRClFBQUJCQkJBQUFFRUVCaENR
TmtQYTJqWFloQjcxYTM2ZWVwZmRlczNMUk5pOFlpekVsbitGWlpHSFpBZ1FSOEJCQkJBQUFFRUVF
QUEKQVFTcUNkUnFGbHdvQkdrNFM0WXNCQnVXN21oYTZxTmhBWWp5SWdwRUVudUZqZ3hJa0tDUEFB
SUlJSUFBQWdnZ2dBQUNsUVJTcS9OUgp0NEJER1JBVnMxSzJROW1QdWsxWHFheVdaVUI4UDRvNm9z
Rks2MkptQkJCQUFBRUVFRUFBQVFRUW1IVUJ5M1JZQXNSbk8rb1doVFF0CjNhRldzSm9XZFRRcytG
Q3dVVk1teE9ZSkhRRklrS0NQQUFJSUlJQUFBZ2dnZ0FBQ2xRU3NnU3RuandEeFQwUDNnWWdGSGkw
cmU2VnMKU0YwdFkxbmcwYlJLSDZxSUhqb0NrQ0JCSHdFRUVFQUFBUVFRUUFBQkJDb0pXSU5YRm56
WXkycDdkQzBTNlhSNnJtT0JoNElTbTJ6VAo3ZmtnOWhEQ3BMMTlzUVFnMnkwWVFnQUJCQkJBQUFF
RUVFQUFnU29DWFlVZVBkZnRkdTFKNk01MUZZRDRKNkZiNEpFc1BBRmQwMzBrCnNyaGNXc0dxQXN5
OENDQ0FBQUlJSUlBQUFnZ2drQWtvdStGcmVsaFJLOFVaUFd1S3Q2Tk1pS1UvdWphdWFZa0ZJdk4r
UGh1eGpnQmsKd1lHL0NDQ0FBQUlJSUlBQUFnZ2dVRkVnVGJ0VzNNb3lJRXB6OUdxVy9laTRuZ1Vn
Q2p5VUFVa3NDa2xVRm90SzZCVmxtUjBCQkJCQQpBQUVFRUVBQUFRUjJFcWdwMDJIUlJwclczSHkz
YnZWQWJOeGVxZ2ZpaHkwQVVUQmlKYlN5ampvZ0dRVURDQ0NBQUFJSUlJQUFBZ2dnClVFbkFnbzNV
TWg1Smtscm1vK3NTSzN2VnRyUkhwOTN4Z1ltS2FDa1RNazhsOUVxc3pJd0FBZ2dnZ0FBQ0NDQ0FB
QUo5QlBTQTg3WlMKSUZiRXl1cWVXNzBQVlVsdnVDU3QyM1FyZm1VQlNIc3hTeEkrVGdZa1NOQkhB
QUVFRUVBQUFRUVFRQUNCU2dJOUsyZWxnQ0pSdlErcgpCNklnSlBHdFlDMWtRRlR5U3RNc0laSjFW
RUxQS0JoQUFBRUVFRUFBQVFRUVFBQ0JLZ0twUFFuZDJSUFE1K3hESGY4UVFtdmx5cDQrCjJHcldY
VXNQSWJRSEVLNnlOM3VydHkrVkRNaDJDNFlRUUFBQkJCQkFBQUVFRUVDZ2lvQ0NESHZWckJTV2Yv
cTVEY3hadWF5V0JTWUsKUVBRQTlJYTlOeGRGSGRGZ2xUVXhMd0lJSUlBQUFnZ2dnQUFDQ015NlFN
MHlIVFhMZ05RVmhWalhtbXU1aGowZXZXSGpkU3RycFFTSgpzaUFLVGtKWHFRaFdyYmF3NFBCaCtn
Z2dnQUFDQ0NDQUFBSUlJREREQXNwK1dFTzdkWXNUNnZZUXdvYnIyTXZHN2FXaVdCYVBPT3Y1ClYx
Q3FGSUNFRDlGSEFBRUVFRUFBQVFRUVFBQUJCSndGSGcxN3BSWjJXREprSWRpd2RFZlRVaDhOSzRx
bDlFWFQrb21heTFyc29tUkkKbUVRZkFRUVFRQUFCQkJCQUFBRUVFQ2dYU0szT1I5MENEaXVGNVl0
WktkdWg3RWZkcHF0VVZzc3lJTDRmUlIybEdSQTFwMFdIQUFJSQpJSUFBQWdnZ2dBQUNDT3drWUpr
TzFkSlF0cVBlcTdtbXBUdFU5S3BwVVVmRGdnL0ZIVFZsUW15ZTBFV3hTSmhFSHdFRUVFQUFBUVFR
ClFBQUJCQkFvRjFDcXdoNEI0cCtHN2dNUkN6eGFGbzM0RnJGc3VqSWlUVXQ1cUNKNjZBaEFnZ1I5
QkJCQUFBRUVFRUFBQVFRUXFDUmcKRFY1WjhHRXZxKzNSdFVpazArbTVqZ1VlQ2twc3NrMjM1NFBZ
UXdpVDl2YkZFb0JzdDJBSUFRUVFRQUFCQkJCQUFBRUVxZ2gwRlhyMApYTGZidFNlaE85ZFZBT0tm
aEc2QlI3THdCSFJmbzBPUnlHSlhXZ2NrekVnZkFRUVFRQUFCQkJCQUFBRUVFSWdGbE4zd05UMnNx
SlZpCmpKNDF4ZHRSSnNUU0gxMGIxN1RFQXBGNVA1K05XRWNBc3VEQVh3UVFRQUFCQkJCQUFBRUVF
S2dva0taZEsyNWxHUkNsT2F3U2VzY2kKa3A0RklBbzhsQUZKTEFwSlZCWXJxb1JPQUZJUm1ka1JR
QUFCQkJCQUFBRUVFRUJnUWFCcEFjYThWZnBJTE1PeDFRS09yVW5xcnR6VwpkV3ZicVp0cjE5d3Fx
L3ZSc05jMjZvQnd5aUNBQUFJSUlJQUFBZ2dnZ01CSUFpcHFaYWtPdFg3bFgzWFZCN0VDV2Ric2xW
VkpYM2dRCm9kVTR0MUpaQzJXeEZsZEdKZlNSMVBrd0FnZ2dnQUFDQ0NDQUFBSXpLdUJidjFwNDFr
Y1EwRE1FMDI1aXhiQzZWaUY5b1JpV2ltTDUKaXVnMlU4MGlGUUtRb0VVZkFRUVFRQUFCQkJCQUFB
RUVoaGV3cUdMYnZOWC84Sit3d01NeUl0MTJZaTFpcWRsZDYxdmcwYkdpVjJxQwp0ejJ2NTRFMFhk
MGVYRmhhQjBSUkNoMENSUUtLY3VrUVFBQUJCQkJBQUFFRVprdEFnY1M2WnVKKy85Y3RidjhEZG5G
dGE0N1hXdC8xCnp3SkprbmtMT09wdTI5YVdQUTE5bFMrV2Rlay9MM0ZyMXF4eHJWYXJQQUNaTFVy
MkZnRUVFRUFBQVFRUVFBQUJCTW9FbEtRNFlMZDUKOTR2VEwzWnI5bGp0ZHQvUWNoZHZTUzBRNmJq
MnRxMXVXNnR1bGRGVkFhVG5rbTB0ZCtsZlRuZjc3cnFyRDBKS015QmxLK2Q5QkJCQQpBQUVFRUVB
QUFRUVFtQzBCRmFjNjhyck8vZTVYVzkwM2ZueVJXNy83R3JkeGZkTmVMVGR2UmEvbXRsM3B0cmlP
RmNuYTVocFdvR3JiClJXZTVmUS9jMTIzWXNLRmFCb1RpTnJOMVloWHRMY1h5aW1TWWpnQUNDQ0NB
QUFJSXpJYUFpbUFkYzVQVjdzd0xMbmRuYlo1em01c04KLyt5UFdxTmhGYzBUZXg2STZvY2s3c3FX
dFlqMTd6UGR3ZXUydWsyYkRuVWJOMjZzRm9ETUJpZDdpUUFDQ0NDQUFBSUlJSUFBQW9NRQpGSURz
dis5YTk5QmpyT0xIVHk1MloxMjZoN3ZjV3I1U0RmUmUwbkxKbXFaYnM3cmgxbDl4bGp0cy9UL2NV
WWZkd0FLUVRXN2R1blVFCklJTmdlUThCQkJCQUFBRUVFRUFBQVFSMkZsQUFvZ3JsUngreHU3dldQ
dHZjdDA3N24vdjFoWFYzNFJVYkxCQ3B1VjNibDdsTnRjdmMKVVFmMjNCRUgzY2dkY01BQmJsZXJB
MElsOUowdG1ZSUFBZ2dnZ0FBQ0NDQ0FBQUpEQ0NnSW1adWJjd2RkYjcyNy9vRzd1M2E3N2Vibgo1
NjM0VmNlYTNOMW8yWTc5ZkoyUDNYYmJ6YTFkdTlZM3dkdTFEQW1WMElmQVpSWUVFRUFBQVFRUVFB
QUJCQkRZVVVEMWdodFc1MlBWCnFsVStzNkZnUk9PcW9LNU1oMTZhcG5GMUNqNTZ2UjRCeUk2TWpD
R0FBQUlJSUlBQUFnZ2dnRUFWZ1ZBY1M0RklDRVpDQUtJZ1JlOHIKK05CTEhVOUNyNkxMdkFnZ2dB
QUNDQ0NBQUFJSUlOQlhRTUZHQ0RnVWRJVHgvTXdFSUhrUnhoRkFBQUVFRUVBQUFRUVFRR0RaQkFo
QQpsbzJXQlNPQUFBSUlJSUFBQWdnZ2dFQmVnQUFrTDhJNEFnZ2dnQUFDQ0NDQUFBSUlMSnNBcldD
TmdmYklJeS9ObG5MRUVadXo0VkVICnpqaGpZN2FJMDAvZkxSdG1BQUVFRUVBQUFRUVFRQUNCcTZv
QUFjaVlqbHd5dDlZdjZjcDE0eU5Ock5reWRhMzJsYjdQSHdRUVFBQUIKQkJCQUFBRUVydW9DRk1H
NnFoOUJ0aDhCQkJCQUFBRUVFRUFBZ2F1UXdQaHUxMStGZG5yY202cGlWeUh6Y2V4eFc4YTIrSk5Q
WE9lWAp0WGFMaW5WUkJHdHNzQ3dJQVFRUVFBQUJCQkJBWUdvQ1pFQ21ScytLRVVBQUFRUVFRQUFC
QkJDWVBRRUNrTms3NXV3eEFnZ2dnQUFDCkNDQ0FBQUpURXlBQW1SbzlLMFlBQVFRUVFBQUJCQkJB
WVBZRUNFQm03NWl6eHdnZ2dBQUNDQ0NBQUFJSVRFMkFBR1JxOUt3WUFRUVEKUUFBQkJCQkFBSUha
RXlBQW1iMWp6aDRqZ0FBQ0NDQ0FBQUlJSURBMUFRS1FxZEd6WWdRUVFBQUJCQkJBQUFFRVprK0FB
R1QyampsNwpqQUFDQ0NDQUFBSUlJSURBMUFRSVFLWkd6NG9SUUFBQkJCQkFBQUVFRUpnOUFRS1Ey
VHZtN0RFQ0NDQ0FBQUlJSUlBQUFsTVRJQUNaCkdqMHJSZ0FCQkJCQUFBRUVFRUJnOWdRSVFHYnZt
TFBIQ0NDQUFBSUlJSUFBQWdoTVRZQUFaR3IwckJnQkJCQkFBQUVFRUVBQWdka1QKSUFDWnZXUE9I
aU9BQUFJSUlJQUFBZ2dnTURVQkFwQ3AwYk5pQkJCQUFBRUVFRUFBQVFSbVQ0QUFaUGFPT1h1TUFB
SUlJSUFBQWdnZwpnTURVQkFoQXBrYlBpaEZBQUFFRUVFQUFBUVFRbUQwQkFwRFpPK2JzTVFJSUlJ
QUFBZ2dnZ0FBQ1V4Tm9UbTNOVjZNVm4zSEdScGZNCnpmazlPdm5FZFdQYnMzTk9XMWhtcTcxeGJN
dGtRUWdnZ0FBQ0NDQ0FBQUlJVEZPQURNZzA5VmszQWdnZ2dBQUNDQ0NBQUFJekprQUcKWkV3SHZO
VyswaTlwN1piTlkxcWljMlEreGtiSmdoQkFBQUVFRUVBQUFRUldpQUFCeUJnT3hPbW43eFl0SlI2
T0pqT0lBQUlJSUlBQQpBZ2dnZ0FBQ2ppSlluQVFJSUlBQUFnZ2dnQUFDQ0NBd01RRUNrSWxSc3lJ
RUVFQUFBUVFRUUFBQkJCQWdBT0VjUUFBQkJCQkFBQUVFCkVFQUFnWWtKRUlCTWpKb1ZJWUFBQWdn
Z2dBQUNDQ0NBQUFFSTV3QUNDQ0NBQUFJSUlJQUFBZ2hNVElBQVpHTFVyQWdCQkJCQUFBRUUKRUVB
QUFRUUlRRGdIRUVBQUFRUVFRQUFCQkJCQVlHSUNCQ0FUbzJaRkNDQ0FBQUlJSUlBQUFnZ2dRQURD
T1lBQUFnZ2dnQUFDQ0NDQQpBQUlURXlBQW1SZzFLMElBQVFRUVFBQUJCQkJBQUFFQ0VNNEJCQkJB
QUFFRUVFQUFBUVFRbUpnQUFjakVxRmtSQWdnZ2dBQUNDQ0NBCkFBSUlFSUJ3RGlDQUFBSUlJSUFB
QWdnZ2dNREVCQWhBSmtiTmloQkFBQUVFRUVBQUFRUVFRSUFBaEhNQUFRUVFRQUFCQkJCQUFBRUUK
SmlaQUFESXhhbGFFQUFJSUlJQUFBZ2dnZ0FBQ0JDQ2NBd2dnZ0FBQ0NDQ0FBQUlJSURBeEFRS1Fp
Vkd6SWdRUVFBQUJCQkJBQUFFRQpFQ0FBNFJ4QUFBRUVFRUFBQVFRUVFBQ0JpUWtRZ0V5TW1oVWhn
QUFDQ0NDQUFBSUlJSUFBQVFqbkFBSUlJSUFBQWdnZ2dBQUNDRXhNCmdBQmtZdFNzQ0FFRUVFQUFB
UVFRUUFBQkJBaEFPQWNRUUFBQkJCQkFBQUVFRUVCZ1lnSUVJQk9qWmtVSUlJQUFBZ2dnZ0FBQ0ND
QkEKQU1JNWdBQUNDQ0NBQUFJSUlJQUFBaE1USUFDWkdEVXJRZ0FCQkJCQUFBRUVFRUFBQVFJUXpn
RUVFRUFBQVFRUVFBQUJCQkNZbUFBQgp5TVNvV1JFQ0NDQ0FBQUlJSUlBQUFnZ1FnSEFPSUlBQUFn
Z2dnQUFDQ0NDQXdNUUVDRUFtUnMyS0VFQUFBUVFRUUFBQkJCQkFnQUNFCmN3QUJCQkJBQUFFRUVF
QUFBUVFtSmtBQU1qRnFWb1FBQWdnZ2dBQUNDQ0NBQUJvbVhkWUFBQnFYU1VSQlZBSUVJSndEQ0ND
QUFBSUkKSUlBQUFnZ2dNREVCQXBDSlViTWlCQkJBQUFFRUVFQUFBUVFRYUZZaHFOVnFWV1puWGdR
UVFBQUJCQkJBQUFFRUVMaWFDcVJwNnZUcQo5WG83dmNKNzJ2VXdIT1lsQTNJMVBTSFlMUVFRUUFB
QkJCQkFBQUVFbGxzZ0RpN2k0UkNVYVAwYTFudnExSytVQWZHZjRnOENDQ0NBCkFBSUlJSUFBQWdq
TXZFQWNWSVNBbzl2dDdwQU5DVWg2UDd4WEdvQ0VCWWNQMDBjQUFRUVFRQUFCQkJCQUFBRUVRbVlq
QkJicWgxZTkKWG5lcXZoRmlpVENQUGxNYWdFQ0xBQUlJSUlBQUFnZ2dnQUFDQ01RQ0NpZ2FqVWFX
N2RCNHA5UHgwNUlrOGNHSDVnK0JpTjdUZEwwSQpRR0pKaGhGQUFBRUVFRUFBQVFRUVFLQlVRSmtO
QlJWeDBhb1FoQ2p6RWJJZm9SRXJ2VWNBVXNyS0RBZ2dnQUFDQ0NDQUFBSUlJTkJQCklBUVlDa0kw
SERJZFlib0NsRkJFUzlNVWZMVGJiYjhvTWlEOVJKbUdBQUlJSUlBQUFnZ2dnQUFDaFFMTlp0TmRl
ZVdWL24wRkdLMVcKeTJkRU5LeE93VWZJa0NnWVVmQ3hlZk5tdDk5KysxRUV5d3Z4QndFRUVFQUFB
UVFRUUFBQkJJWVdVQUN5ZGV2V0xPakkxd2ZSdUFJUAp2ZWJuNTkyV0xWdmM2dFdyM2NhTkd3bEFo
bFptUmdRUVFBQUJCQkJBQUFFRUVQQUN5bkRzczg4KzdvSUxMdkRaalczYnRybGRkdG5GCktUQlJO
aVJrUFpUNTBIc0tTQTQ2NkNCZlZJc2lXSnhFQ0NDQUFBSUlJSUFBQWdnZ1VFbEFBY2J1dSsvdTV1
Ym0zRG5ubk9PTFZ5a0EKV2JWcVZiWWNaVDVVVEd2UFBmZDBSeDU1cE85ZmNjVVZaRUF5SVFZUVFB
QUJCQkJBQUFFRUVFQmdLQUZWT3RmcjRJTVBkdXZYcjNmbgpubnV1dSt5eXkzd2dvcUpaYTlldTlR
SEtvWWNlNmc0Ly9IQ2ZIVkdkRUhWa1FJWWlaaVlFRUVBQUFRUVFRQUFCQkJBSUFpcUNwWmVLClhH
M2F0TW10VzdmT0tidWhqSWpxZXFnZkQ0ZlBxVitQUnhoR0FBRUVFRUFBQVFRUVFBQUJCTW9FMU5w
VmFQRktkVDcyM250dnQ5ZGUKZS9tNkh2cHMvSDUrV1dSQThpS01JNEFBQWdnZ2dBQUNDQ0NBUUts
QUNFRFVWM0dzRFJzMitNQWpicDQzektNNkk2RWpBeElrNkNPQQpBQUlJSUlBQUFnZ2dnTURRQXZr
c2g0S1FOV3ZXK004cjRGQVJyUkI0aEVCRWJ4S0FERTNNakFnZ2dBQUNDQ0NBQUFJSUlDQUJCUmJk
CmJ0ZjNRNUNoNldvRjYxZS8rcFVHZmFmMzRwY21Fb0FzMlBBWEFRUVFRQUFCQkJCQUFBRUVsaUFR
WnpmKzhJYy91UGUrOTcxT2ZRVWUKeW9xRVRFbVlqd0JrQ2NoOEJBRUVFRUFBQVFRUVFBQ0JXUmVJ
TXgvQjRvTWYvS0FmL09RblA1bGxTRFFobnBjQUpHalJSd0FCQkJCQQpBQUVFRUVBQWdhRUVsTm5R
Sys2Ky8vM3YrOHlIcHAxLy92bnVKei81U1JaNGhPeUgzdHZ4VTVwQ2h3QUNDQ0NBQUFJSUlJQUFB
Z2dNCkVBajFPc0lzYXZucU01LzVUQlp3YVBwblAvdFp0MlhMbHF5NTNqRHZUQVFnMnZHLy9lMXZZ
Wit2VXYyVnRPM2ozQll0Nis5Ly8zdmgKc1ppZm4zYy8vL25QQzk4ZjVZMnlkWSt5N1BCWlZjcjYv
ZTkvSDBhWHJUL09ZOUp2STh1T1E5bCtUc0s2MzNaUFkxcVpSWDZieG5ucwp5cHd2dnZoaTk4Yy8v
akcvQ1N0dVBIKytUWHU3Ly8zdmY3c2YvT0FIN3BKTExpbTFtdVR4ekR1VmJod3pqRlZnbk1lNjM0
WlZQZStYCmUzdjZiU1BURUFnQ2NWYmpsRk5PY1RwLzQwN241OGtubjd4RFVLTDNTd09RejMzdWMv
NFI2MXJCSGU1d0IvZkVKejdSUGVFSlQzQVAKZTlqRDNBMXZlRU4zbi92Y0oxN1BpaHYrOUtjLzdS
K0s4b2xQZkdMRmJWdlpCcTJrYlIvbnRyei8vZTkzZSt5eGgvdjg1ei9mbCtEVQpVMDkxTjd2Wnpk
ejk3My8vdnUrUE1yRnMzYU1zTzN4V0xUOGNjY1FSN2tsUGVsS1l0Q3o5Y1I2VGZodFlkaHpLOW5N
UzF2MjJleHJUCnlpenkyelRPWXplTTgvSEhIKy91ZTkvNzVqZGpSWTMzTzkrbXVkMG5uWFNTdjNQ
MzR4Ly8yQjF5eUNGT1AvcUx1a2tlejM1T1JkdkYKOVBFTGpQTllGMjFkbGZOK0V0dFR0SjFNUnlB
SWhDRGtvUTk5cVB2eWw3L3N2dkNGTDdnUGYvakRUcis5ZFk0Ky92R1ByNTRCZWZDRApIK3dlOWFo
SCtYVzg5cld2ZFIvNHdBZWNLcGRvZ2FlZGRsclcxbS9ZaUduMDljWHd3eC8rc08rcUZTaGQrOXJY
N3Z2ZVNwODQ3VzJQClhjZTVMVTkrOHBQZGJydnRWc2gvOU5GSHU4Yzg1akdGNzQveVJ0bTZSMWwy
K096TmIzNXpkOHd4eHpnOUZYUTV1M0VlazM3YldYWWMKeXZaekV0Yjl0bnNhMDhvc3RFM1R1cDYw
N2xlOTZsWHVLMS81aWdaWGJOZnZmSnZXZGw5eHhSWHVPYzk1amp2dXVPUGNLMS81U3ZmRgpMMzdS
TnlzWjQwM3JlUFp6aXJlTDRmRUxMTmV4THRyU0t1ZjlNTjhEOGZZWHJaUHBDRXhhb0RRRG9nM2Fk
ZGRkL1hhRkNDZHNwQjQwCjhzNTN2ak9NVHFRZjE2RFhDcE1rY1k5ODVDUGRUMy82MDhMMTY0ZGdm
dHNMWjE1aGIweHIyL3U1am5OYnlwWTFOemUzYk1lc2JOMmoKbkFKNjRJNjZack81VThXc1VaWWJQ
cHMvLzVkelg3VE9vdU13N0g0dXgvWjFPcDNBc1NMNncxaE0rM3BTeHZINjE3LytUbDc1OHlrLwpR
OW43K2Ztcmp1ZVhuei9maXJhNzZucXF6bi9XV1dlNWRydWRYY08zdXRXdGRsakV0STluM21tSGpS
dlRTUDdZakdteGJxVmR2Mlg3CnRkekh1dC82aTg3N29tTXk2UDlzdiszdnQwNm1JVEJwZ2FFQ2tL
S05lc0VMWHVEMjNITlAvL1p2ZnZNYmQ1ZTczTVducW4vMG94ODUKalI5KytPSHVZeC83V1BieHJW
dTN1cGU4NUNYdURXOTRnenYyMkdQZG05Lzg1dXk5Zi8zclgvNk8wKzF1ZHp0MzA1dmUxUDN5bDcv
MAo3MzN2ZTk5elN1bTg3R1V2Y3k5NjBZdmNQdnZzNHc0NDRBQ242ZXJlL3ZhM3U2OSs5YXYrN3Q2
akgvMW9wenRYL1RyOVNGQmFVNSs5CjhZMXY3UDd5bDc5a3N4V3QrN2UvL2EzVFhkeVh2dlNsN2pX
dmVZMjc1ald2NmJNK1JmTm5DeXdZK05LWHZ1U1hjYi83M2MvOTczLy8KY3gvOTZFZjkrSjN2Zkdk
MzNubm4rVSs5OWExdmRiZTk3VzNkdG0zYnNxVk1ZOXVMWEpleUxkbU81QVpVV2VsNXozdWVMeUtu
WTM3dQp1ZWZtNWxnWVZkbkIvZmJiejczclhlL3lFMVNoU2NYL252S1VwMlR6VnowbWc5YXQ4b3E2
OC9uYzV6N1hGMXQ1eGpPZTRYVHVxaXM2Cko3UzhwejN0YWU2RUUwN3cyL1hyWC84NjJ6WU5GRzFm
MGZKMitMQ055RUJ0YXIveGpXOTArUjlEZzQ3Sm9IMFp4alcvSFdYN21aOWYKNDRPc2kxejZMVWN0
YStoL2g2NlJXOS82MXU3c3M4LzJzeFVaanJMdnlxZys1Q0VQOGVmbmh6NzBJWGZkNjE3WEhYVFFR
VHY4MzZoaQpNYzNyNmFLTEx2TG56UzF2ZWN1TVZkdXVjL3pWcjM2MS83K3RmWlZ0dUpGVDluN1Jj
U3M2RnRtS0Z3Y0duYzloM243YnZaVHZrTEM4CnVEL28zRkNHL3hXdmVJWC9vZnowcHovZG53UHha
elU4emVPWjM1WmhydU9pNDVWZmxzYUxqbzIray9ULyt2V3ZmNzNUZDVpK0czWGUKaE0rVS9ZK3Vl
djFXMldhL0VkR2ZRY2QzbUdzN1d0U3lIdXQrMThzM3Z2R055dGVydHJmb2U2RG9YSTMza1dFRXBp
SmdFWFZwOTU3Mwp2Q2UxalV2dEIzejY4WTkvUExWeVhhbjlZMDV2Y3BPYjdQQlpDd3I4Zk4vODVq
ZFR1NGhTKzZHd3cvdDN2ZXRkMDEvODRoZCttdjFBCjgvTmFvSkxhSFpIMGJuZTdXM3JaWlplbFZw
RXp0WDlzcWYzWVR5Kzk5TkxVQW9YVWdwejB3QU1QVE8zTE1iWHl1S2tGTnVuKysrK2YKTFh2VHBr
MnBGUS9MeHZNRGh4MTJtUCtNdHM4cW82ZjJReUsxZWl4K3RrSHIxclphVWFIVXl2T25WcDdOYjVm
OVNDN2Mxdng2KzQzTAo3SEdQZTF6MmxoWFZTUi83Mk1kbTQxLy8rdGZUajN6a0k5bjROTGM5Nzdy
VWJjbDJKaHE0MXJXdWxWcTU2dFNDeDlRcWVhWmExM1d1CmM1M1U3dGI0dVN5emx1Njk5OTdaSit6
TExiVWdNQnUzWURkOTBJTWU1TWNISGNQc0E5RkEyYnIvNy8vK3o1L24rb2pkQlUyUE91cW8KOUo3
M3ZLZGZRcjl6d2g2MGs5N2pIdmRJTFREeTgrZ2MzbmZmZlZNTExQMzRvTzByV3A3LzRPSWZtVmlk
bUd6U3M1LzliSCtkYU1LZwpZNkwzQisyTDNoL2txdmZ6eDJIUWZtcitmRGZJZXBCTGZqbFdoTUJ2
cTg0VmRmWURNWDNBQXg3Z2g0c01SOW4zZi83em4ra05ibkFECi83L2lhMS83V21wTkNhWVc5S1pX
Qjg2dlUzK3FXa3pyZXJLSzFLa0Y2K2sxcm5HTmJOc3RtRTh0d1BiamRyZmYveSsyQU1UdnB5WU8K
ZW4vUWNTczZGdG1LYldEUStSeWZiLzIyZXluZklmRzZ3M0RadVdGMUgxTnJXakxNM3JjL3JlT3Bq
WW1kTkQ3b09oNTB2UFRadUJ0MApiUFEvMEZxM3lXYlh1QlU5ek1ZSGJVUFY2M2ZVNzlsQngzZVlh
enZicWNXQjVUclcvYTRYdS9sYStYb3QreDdJYjM5Ky94aEhZS2tDCjMvM3VkOU16enp3enZmenl5
MU83U1pIcVd0ZnZKcnVKbFY1d3dRV3ByamVybEo3YVRRSC9XOThDWmYrK2Z0ODNxMFE5U3ZNcDlk
dG8KTkhZcUQ2dmwzUEdPZC9TWmpSZS8rTVgrYm1GYzhWc3RpWngrK3VsTzVWZlY2WTczKzk3M1Bs
OC9ReFhkYmVlenUyL0tjdnpuUC8veApiUWZmKzk3M2RoWnN1TnZjNWpiK3BjL3FEdmpCQngvczc1
aXJyNjZzaUpYOXMvVGJwM2x2Zi92Yk82WFkxWld0VzNjOTdlSjE5bVBICnYwTHpZdUZPWVg1Yi9V
SUgvTEZndzk5QjB0MEt0WjE4cHp2ZHlkOWhzUzhKWDJ4SG1SM2RsWXk3YVc1NzNuV3AyeEx2VHho
VzNhSjcKM2V0ZWZsUjMxWFEzVGZ0dlB6TENMRmxmeGYzaWJWbTdkbTAyWG5ZTXM0VkVBMFhyMWl3
Lys5blBzZ3liem5rTEdIMVd3NzRzbk80aQo1ODhKWmV0MDEwb1AzRkduNDNyM3U5L2QyY1hueDh1
Mkw3ODgvNkhvajdKbFo1eHhobCtIbHF1R0lIUzloSzdvbUh6clc5OHEzWmRCCnJtSDVvVisybjJH
K2ZML0kydjRCRGJ6dTQrWG9PS2hSQW1WVjFhbUlRc2lZM2VJV3Q5anBtSXk2NzN2dHRaZlBlcXhi
dDg3SlY1MGEKNFRqbm5IUDg4Rkl0NG5OWUN5bzZkbVhuak4rSTNKOGlaMTFQaHg1NjZBNk5QdWgv
YzZpVXJveXdzcnZxUW4yNVFlK1gvUThjOVh3Twp1NlZ0aXJkN2xPK1FzRXoxaHprMzR2a0hEVS9y
ZU9hM2FkQjFYT1ZjS3ZwZm8vK0o4Zjg0clY5WlFXVXBRamRvRzZwZXYyWG5XRmhuCnYvNHd4MWZi
WG5SdDkxdW1waTNIc2U3M3YwdnJVZ21TdUpHV1FkZWo1bGRYOUw5azRkMmR0ejlNcDQvQUtBSnFL
VkFsajlUeWxiS2sKZGhQRFAzaFF2M0UzYjk3c1l3YkZEYnZzc292YnVIR2o3K3ZhVTFjcEFGRlJv
UkJBcU9LVDNZbmRhYnRWckVwZlFBOS8rTU45b0JKbQowSU5JVkhRa3ZvaVZ3bFduSDNiNlFhR05W
S2ZpRlJaVitTQkQ0L3FNZ3A3UWFmbXF4S3dmcThNR0lQRjY5Vm1sYU5XVnJWdi9WTU9YCjh6RHor
NFVPK0tQaVpDcmFvd0JHeGMxVWpFUUhUK2xwamV1ZzZVREYzVFMzUFY2M3Rpa2VyK0lZNzA4WTFz
a1lPdjBqVnFlbVF2c0YKSUdHK2Z2MnlZOWp2TTBYcjFvOWlIVzk5WVliT01pQitVQUcwQXBEOE9h
RWloem9uUTEwcHphd0xMRmlWYlY5K2VXRzlvVzkzcnYyUApid1ZyS25hbWF5eStIc0o2Tkg5OFRO
UklSTm0raEhVTTB5L2J6NkpsRkZucldBKzY3dVBsYVIvdHJxLzc4NS8vN0J2Q1VCRTN1K09TCnpa
STNITWUrYTUyeDdmcjE2N09pa1V1MWlKZW5qWS9INDJOWGRzNWtPeDRORkRucmV1cTNMMXBINkN6
Ym1QMXYxelR0YTlIN1pkdVcKUHhaaEhhRmZkajZIK2RTUHQzdVU3NUI0bWVNNE44THk0dU1YdGpl
OHQ1ekhNNnhqbUg3WjhZcVhVWFJzMUJLWS9zZkY1MWg4Yk9KbAo5QnZXdkZXdTN5cmJuRi9mTU1j
M3YrM3h0WjFmWGhoZnJtUGQ3M3JwdDMxRjEyTy83WXZQdlg3dmgybjBFUmhWUU5Vd2RNUHV3QU1Q
CjlMK2J3cm1ybStwS0pLeGF0Y3BQVjMvMTZ0WCtCcTNlMCsvZVNnRklma05WSGozZjZZZWJmdlRv
UFRXN0ZYNlU2VTVKS0xPZC84eC8KLy90ZmYvZGYyWUJoTzkxbFZrWGZVYnVxNjY0NmYzNzc5SU5M
ZHlvKzlhbFBlUnMxTjZ0OVVWWkgwV0s0SzVuL1hML3hxdHRTZGY1Kwo2eXlhTnVxeWRlZFZYd0o2
VmUzR3VXNDltMFRMVTRBYW9uVGRoZFc1VmxTLzZNSUxML1NmeVc5MytNSWFkZnUwWExVNlo4VzYz
RHZlCjhRNWZEK1hiMy82MjI3QmhRMzZWTzR5ckhIL1ZmZGxoQWJtUnN2M016ZDUzTkQ3T1ZWM1Uz
S3p1eEtwcFA1WFQxdytOb203Yys1NWYKenpnczhzdU14NnZheEovVmNPeWNmMC9qdW5ta2x1YVVD
ZFlYZ3pLS3VnRVN1a0h2ajdwdFdzZFN6dWR4Zlljczk3a1JET1ArcUdabAp4ek5lVjM2NDZycjdI
WnQvL09NZlF6MExKYi91ZUx6SzlWdDFtK1AxVE9QNHh1c2ZaZHZqNWNURGc2N0hlRDZHRWJncUNZ
eFVDVjNCCmhuNndoYUluMm5GVkZsZXFWaisrTkJ3Ni9RUFZIYzgvL2VsUFlaSXZmcUc3eW9xY2xQ
R0lLMTZyaUludU12YnJyTXk5VC9kWWZZcnMKN2ZCakw1c3c1RURWZFZlZHY5OW02SXRmNlZVMWFh
eG5xcWhZbHRwTlZrWW4vaEhRNzdQeHRLcmJVblYrcld0WTE2VXNPOTRYZmNIcApqdmFSUng0WlQ5
NWhXTm1oZnQwNDE2MjdmSHFnbko3ckVEcWxHQld4aDJ4Ym1CNzZDZ3dVNmV1ODdOZU51bjFXaHRK
cEc5NzJ0cmY1CjRpUDYwYWlBdGF3YmRsK0tYUFBMTDl2UC9Qejl4dVBqWE1YbGQ3LzduYS9rcit4
UG5KM3F0dzVORy9lKzU5ZXpWSXVWY2oyRm9ud3EKcnFKc2tpcm14dDJnOTZzY3QzaVpZWGlwNS9P
NHZrT0dQVGZDOWc3cXI1VGpxVzBzdW82ckhLK2lZNk9peG5ydnIzLzlhOFlSRndNTgpFNHUyb2Vy
MVcyV2J3N3BEZjV6SE55eFQvVWtkNjNpZFlYalE5UmptS2VzUHUvMWx5K0Y5Qk1ZbE1GUUFvbUlw
NnRRc1lkeXBiV2tWCkNiSEttbjZ5dnN6VTFLTitxS2xGRmJYYW93QkRuVnE5VXZwRlA3WlZkbHN2
dGFLbCtoMHFycVc3V3lxU3BYWHB4NWJhd1k2YmpZeWYKcktndlM3VVVGWXFES2N1aU81THF3cmI2
a2NVL3VpT2lWK2pVa2twbzFhaHMzZnJoR2ViVjU4dm0xNDlvQlY1cTNhS29zd3IzL3E2agppdEVv
cGEyeTVicWJyWC95K1g4U2s5ejIvUGJtWFVmWmx2eXlOYTRmK3FGVCtXNWxmMElaZjUxcktrc1lP
bVVoOUFBdVRkZVBXQVd5CjRad29PeVpoR1hHL2FOMVdzZDFaeFdrZkVJZjU5UU5OWDJxaGFGaitu
TkM1clF5SjZqU0ZUazlCMTUwd3JhZHMrL0xMQzhzSWZlMm4KV3FaUnA1Ym05UERQa0owWmRFeUcy
WmRCcmxwZmZCeks5bFB6OSt1S3JNdGM0bVhwLzRWKzNPaUhqSmFuSWlHNllhRWZRWHJsRGNlMQo3
L0VQS2xtSGZWbUt4VFN2SjIyNy9vK0ZINDE2dG9YK2I2dUZOeFduVlRHUXVCdjBmdGx4eXgrTGVM
a2FIblEreCtlYjVvMjNlOVR2CkVDMVAzVERuaGpXSTRzODNyYitvbStieHpEc051bzdMamxlOGYw
WEhKdnp2Qy8vajlOMnZHeUhoZk5JeUJtMUQxZXUzYkpzSGZjOE8KYzN6bFYzUnR4eDVoZURtUGRi
L3JKVDd2dFEyRHJrZTlyL25qY3pYK2phUDM4OXV2NDZmbnVvWGZUWnFIRG9HSkM5Zy9rSUdkM2Fu
MwpMY0hZaHFWV1dURjl4Q01lNFY5cUFjYUtXcVgydzluWGJGZnJOR3ExeUNyTCt1WFpENFhVZm1E
NzFxdnNoNk9mWm5mNS9XZTBMTHViCmxWcHhpbXpkRnF5a1ZoUWd0Ui9nZmg3Tkd6cTFBS1NXcU95
SGZXb1hZcW9Xa094dVRIZzd0VXJ2L25OcVhjb0NtV3k2QnRSNmxSVngKU205MG94dWxGZ3lsRmhp
a0ZpQ2w5b1BSdDhDa2VZcldiY1drVXF1UGtWcGdrTm9QUU0zcXU2TDU5YWJXb2ZYRnJZTXNmR3JI
djlhYwpZV3BONzJZVHRXL3h1TjZZOUxabkc3TTRFTHRhVTZSTGRzd3ZWK012Zi9uTFUvdkNTcTN5
ZWZxNjE3MHVmZVl6bitsYlFkTjdPbCtzCmtRTGZNbzlhWUZPckNsWkhKclhpYTc2bHJPYy8vL20r
bFJCcjlNQzNvS1hQRERvbWVqL3VCcTFiOCtrYzBmbnlwamU5eWJmbVpwWGoKVS9zQzlZc29PaWMw
M1lxUCtYUExIdDZaV24yTjFPbzhwWnF1cm1qN2lwYm5QN1Q0eDRvdXBsWnBNclVpRE9rcHA1eVNX
bk8vdmlXaApZYzZQUWZ1aXhROXk3WGNjeXZZejNtNE5sMWtYdWVTWFk4WGYvUDhBQzd4OHEzRnFM
YzZLRGZuL1JkYlVkOS9yZEpSOVYydDc5cVh0Cld6T3pzdGYrLzlyMXJuYzkvei9xTzkvNWp0Kzhx
aGJUdko2czdwSy9uaXlMNXErblp6M3JXWDVjLzR2MWY5cks4UHJ6U3RlYXVyTDMKaTQ3YktPZHov
bnpUOTBOK3U1ZjZIZUozS3ZvejZOeFFLMFIyZzh2NzZQKzAzZXlJUHJsOWNKckhjN24rUHhiOXI5
RmVXK01vL2p2QQpzbi8rdXJNZitqdDh6dzM2WDdLVTY3Zm9ITk8ybEgzUERqcSt3MXpiV2tmY0xk
ZXg3bmU5NkRySW4vZURyc2RodmdmaTdkZHZKUDArCjAyOHQvZStrUTJBVWdWRmF3YXBweFpPTWVy
UTZaVGhVYVNYZjZhNkVOWlByeXkvSDlUdjBsR0ZyVnM5blJSVGxxNDVKdnRQZFpsV2cKVzJwWHRP
Nmk1UTJhWDNVNTFQYTIvZmdxK3JoL0tyTEtYb2RPZHlUaThUQjltUDZnYmVuMytTcnpWM1d0c214
dG05TDZPbTd4OGU2Mwp6WnFtWmVzT3RPN1dLanVTTDRvenpuWHJQTld6V1ZRL1J5Mm1ETk5wMjVT
QjAvN283cnd5Zm5GWGRmdkNaM1duVHR1aEZtcTB6L2xHCkNzSjhSZjJ5ZlNsenpTKzNiRC96ODJ0
ODBIR3U0cUk3ZStGdWZiOXpJTC91Y2U5N2Z2bFZMVmJLOVdSQnYzdmdBeC9vejFQZFRkYTUKcGRh
UzdBYVRiNW12N0gwNVZEbHVzZHM0enVlcTN5SHgrc053MmJrUjVodlVYeW5IVTl0WWRoMFBjN3pL
am8weVEvcGZwQXpzVTUvNgpWSi9wdHgvTUdWSFpObFM5ZmdkdGM5bjM3RGlPYjdaak5yRGN4enBl
VjM1NG1Pc3gvNW44ZUg3N1ZXeTQzMitwL09jWVIyQ1FnS29PCjZQZjhKbXN0VmcxSnFYaTRxaGpv
K3RQdld2Mi8wRXZGQ1BXc05KWDhVZFpQZFdvbkhvQU0ycEdpOTBJQThwYTN2S1ZvbGhVMVhaVmsK
MVhLU21yZWtRd0FCQkZhU3dFa25uZVNERFgxeHhKMGFObEN3cmVLUUNrYUszcmRNVVB3eGhtZFVv
RjhBTWttS1dmbWVMYnRldVI0bgplZGF4cnJ5QXZpZlVFcGJxYlNrQTBVMEdLOUhpQS9ZUWdLaUt3
YnZmL1c1L2MxYkJTQWhBUm05R0tyODFZeDdYSFpsUTVuL01pMTYyCnhla3BzV29Hanc0QkJCQllh
UUpxU2xwMVAxUldYczlqMGhlRzZ1Q3BkVDc5bU5ING9QZFgydjZ3UGRNUlVCMFFaWHgxcHpOZmQz
RVMKV3pRcjM3TmwxK3NrckZrSEFrVUN1dmJqNjE4dEt1cHhFeWVlZUdMMkVUM2pUVmxUL2ErSXV4
V2ZBYkV5aWxsRktYdFN0dCt4ZUFjWQpSZ0FCQkJDb0pxRGlLM3F1aG9yRzZjR3MrYnVvWmU5WFd4
dHpYOTBFck82Q08vLzg4LzF1S2RPdmhqSG9saytBNjNINWJGbnlhQUpxCndWWVpFUDArVndZa0JD
UXZmT0VMblQwaDNVOC80WVFUZkFDaTk1VUJVZEhscTB3UnJORjQrRFFDQ0NDQUFBSUlJSUFBQWdp
TVUwQUIKU0hnUVlSeUE2TEVieXFRZmYveng3cEJERHZIUG1sSWQxcmdPeUZETjhJNXpZMWtXQWdn
Z2dBQUNDQ0NBQUFJSVhIMEU0aUpXYXVaZAo5Y1RVVjFaRTFTbjBmbmhwcndsQXJqN0huajFCQUFF
RUVFQUFBUVFRUUdEaUFuRmRFQVVhcW1Pb3ZvS1BmQUNpY1FLUWlSOGlWb2dBCkFnZ2dnQUFDQ0ND
QXdGVmJRUFU1UWxaRC9kQ3BtZnlpd0NOTUp3QUpXdlFSUUFBQkJCQkFBQUVFRUVCZ0tJRTQ2TkFI
Tks2Z1JNK1gKMHJDQ0RUVzdxMm1ocjJrYVgvSE44QTRsd0V3SUlJQUFBZ2dnZ0FBQ0NDQXdNUUVG
RWlHam9RZUg2clZseXhhbmg0YXJ4U3NWeXdyUAovbEEvQkNnRUlCTTdSS3dJQVFRUVFBQUJCQkJB
QUlHcmo0Q3lHdWVkZDU2NzVKSkwvRE9rVlBSS1FjZnExYXQ5czd4cStVcXRZK2tWCldzRlM4S0hu
VGYwL3RHNUNLbHB0aElzQUFBQUFTVVZPUks1Q1lJST0KCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0
L211bHRpY29sL3NpbmdsZS1saW5lLWV4cGVjdGVkLnBuZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNw
bGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gaW1hZ2Uv
cG5nCgppVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBeUFBQUFKWUNBWUFBQUNhZG9Kd0FBQUM3bWxE
UTFCSlEwTWdVSEp2Wm1sc1pRQUFlQUdGClZNOXJFMEVVL2padXFkQWlDRnByRHJKNGtDSkpXYXRv
UmRRMi9SRmlhd3piSDdaRmtHUXpTZFp1TnV2dUpyV2xpT1RpMFNyZVJlMmgKQi8rQUhucndaQzlL
aFZwRktONnJLR0toRnkzeHpXNU10cVhxd001Kzg5NDM3MzF2ZHQ4QURYTFNOUFdBQk9RTngxS2lF
V2xzZkVKcQovSWdBanFJSlFUUWxWZHZzVGlRR1FZTnorWHZuMkhvUGdWdFd3M3Y3ZDdKM3JaclN0
cG9IaFAxQTRFZWEyU3F3N3hkeENsa1NBb2c4CjM2RXB4M1FJMytQWTh1eVBPVTU1ZU1HMUR5czl4
RmtpZkVBMUxjNS9UYmhUelNYVFFJTklPSlQxY1ZJK25OZUxsTmNkQjJsdVpzYkkKRUwxUGtLYTd6
TzZyWXFHY1R2WU9rTDJkOUg1T3M5NCt3aUhDQ3htdFAwYTRqWjcxak5VLzRtSGhwT2JFaGowY0dE
WDArR0FWdHhxcAorRFhDRkY4UVRTZWlWSEhaTGczeG1LNzlWdkpLZ25DUU9NcGtZWUJ6V2toUDEw
eHUrTHFIQlgwbTF4T3Y0bmRXVWVGNWp4Tm4zdFRkCjcwWGFBcTh3RGgwTUdneWFEVWhRRUVVRVla
aXdVRUNHUEJveE5MSnlQeU9yQmh1VGV6SjFKR3E3ZEdKRXNVRjdOdHc5dDFHazNUeisKS0NKeGxF
TzFDSkw4UWY0cXI4bFA1WG41eTF5dzJGYjNsSzJibXJyeTREdkY1Wm01R2g3WDA4ampjMDFlZkpY
VWRwTlhSNWFzZVhxOAptdXdhUCt4WGx6SG1naldQeEhPdysvRXRYNVhNbHltTUZNWGpWZlBxUzRS
MVdqRTMzNTlzZnpzOTRpN1BMclhXYzYySml6ZFdtNWRuCi9XcEkrKzZxdkpQbVZmbFBYdlh4L0dm
TnhHUGlLVEVtZG9ybklZbVh4Uzd4a3RoTHF3dmlZRzNIQ0oyVmhpblNiWkg2Sk5WZ1lKcTgKOVM5
ZFAxdDR2VVovRFBWUmxCbk0wbFNKOTMvQ0ttUTBuYmtPYi9xUDI4ZjhGK1QzaXVlZktBSXZiT0RJ
bWJwdFUzSHZFS0ZscFc1egpyZ0lYdjlGOThMWnVhNk4rT1B3RVdEeXJGcTFTTlo4Z3ZBRWNkb2Q2
SHVncG1OT1dsczA1VW9jc241TzY2Y3BpVXN4UTIwTlNVdGNsCjEyVkxGck9aVldMcGR0aVoweDF1
SEtFNVF2ZkVwMHBsay9xdjhSR3cvYkJTK2Ztc1V0bCtUaHJXZ1pmNmI4QzgvVVhBZUl1SkFBQWcK
QUVsRVFWUjRBZXlkQmJnZHRmYTNWMmx4S0JSM2Q0b1ZwMmh4ZHlzdUYzZTd1THU3T3hkM2QzY3Bj
SUdMRlNoV0hBcWxXSkg1OHN1Zgp6RGRuT25yMjdoSE9tK2M1WnlUSlN2Sk9admFzeVZwSnQ4Z0ZJ
MEFBQWhDQUFBUWdBQUVJUUFBQ0VHZ0RBcU8wUVJrVUFRRUlRQUFDCkVJQUFCQ0FBQVFoQXdCTkFB
YUVqUUFBQ0VJQUFCQ0FBQVFoQUFBSnRSZ0FGcE0xUVV4QUVJQUFCQ0VBQUFoQ0FBQVFnZ0FKQ0g0
QUEKQkNBQUFRaEFBQUlRZ0FBRTJvd0FDa2lib2FZZ0NFQUFBaENBQUFRZ0FBRUlRQUFGaEQ0QUFR
aEFBQUlRZ0FBRUlBQUJDTFFaQVJTUQpOa05OUVJDQUFBUWdBQUVJUUFBQ0VJQUFDZ2g5QUFJUWdB
QUVJQUFCQ0VBQUFoQm9Nd0lvSUcyR21vSWdBQUVJUUFBQ0VJQUFCQ0FBCkFSUVErZ0FFSUFBQkNF
QUFBaENBQUFRZzBHWUVVRURhRERVRlFRQUNFSUFBQkNBQUFRaEFBQUlvSVBRQkNFQUFBaENBQUFR
Z0FBRUkKUUtETkNLQ0F0QmxxQ29JQUJDQUFBUWhBQUFJUWdBQUVVRURvQXhDQUFBUWdBQUVJUUFB
Q0VJQkFteEZBQVdrejFCUUVBUWhBQUFJUQpnQUFFSUFBQkNLQ0EwQWNnQUFFSVFBQUNFSUFBQkNB
QWdUWWpnQUxTWnFncENBSVFnQUFFSUFBQkNFQUFBaEJvcWdJeWJOZ3crK1NUClQzS3BmdnZ0dHpa
dzRNRGMrSTRhVWRhdTF0YjdsMTkrc1E4Ly9MQzEyZU44ZVZ5Lyt1b3JlK1NSUit5Nzc3NkwwK2J0
ZlA3NTU2YS8KRUxMeURCMDYxRDc2NkNPZjVNY2ZmN1JmZi8wMUpJKzNWZElNSGp6WWZ2cnBwemhQ
VyszODl0dHY5c3d6eitRV2w4Y3hOMFBOaUxMeQphNHByT0hsSHEwL0REV3BuQVoyQlo3T2VPWFZS
ajZ4bmFKVjZ0R2ZaWmZVcjZ6TmQ3Wm1rYTZYZmg3eFF4aXN2WDliNTlyb1hzdXBTCjU5ekk3aE4x
NnBKTTI4eHJrNVE3TXZiVGRlMElUT3U4cjQwTUp1MGhzMVFCV1cyMTFheFhyMTYyMGtvcjJRWWJi
R0RkdTNlMzZhZWYKM3RaYmJ6MWJmUEhGL2ZHVlYxNXAxMXh6alUwNjZhUjIxVlZYNWJiajBFTVB0
YlhXV2lzM3ZpTkdWR2xYYStwOS9mWFgyeFJUVEdHbgpubnBxYTdLM3lKUEY5Y0lMTDdUcnJydk9I
bi84Y1p0enpqbE5OMXc2REJreXhMYmFhaXRiY3NrbDdmampqN2N6empqRGxsdHVPZXZYCnI1K3Rz
ODQ2Y1hMOUlHeTIyV2Eyeno3NytEUUxMcmlnTGJyb292YnFxNi9XU3ZQMjIyL2J5aXV2YkN1dXVL
Sk5Nc2trdHR0dXU4WDUKUi9iTzg4OC9id3Nzc0VDTGRxWEx6T0tZVHRQYTR5cmx0MVoyYS9KMXRQ
cTBwZzBkS1U5bjRObk1aMDRkOWlQckdWcWxEdTFaZGxuOQpxdlNacnZSTXV1Q0NDMnpDQ1NlMEcy
KzhNUk5kRlY2WkdUTk90dGU5a0ZHVjJxZEdacCtvWFptL016VHoyclMyRGxYelpkVzF2WmxXCmVW
K3IycjVPbFM0cUNTdXNzRUwwd1FjZnhLbkdHR09NYU1zdHQ0eVBUem5sbE1nOU9Qeng3TFBQSGgx
enpERnhYSHJubTIrK2lkNTkKOTkzMDZkSmo5NlU5Y2wveVM5TVZKV2hFUmxtN2lzb3RpdXZidDIr
MDY2NjdGaVdwRkpmbTZyNGlSV09QUFhiMDU1OS8rdnhQUC8zMApDSExlZlBQTmFNb3BwNHcyMzN6
enlDa25jZnhmZi8wVjdiLy8vdEVzczh3U24xdC8vZldqTmRkY016NGVQbng0Tk04ODgwVHVoeUkr
ClY1WkdkVG56ekRNajk2WEI1N25oaGhzaWQ2TkVyNzMyV2l4alpPK2NmUExKa1ZPUzQyTFNmU0xO
TVU3WXBKMTArVTBTMjJveEhhaysKNld2UjZrYTFZOGFPeERNUFE3T2VPWG55ODg2UHJHZG9Wbm5w
dnRTV1pXZlZwK2hjdXMrazY5N1Zua2w2UHA5MjJtbTV5Tks4Y2hOVwppR2l2ZXlHcmF1bnJucFVt
bkJ2WmZTS1VVM2Ziekd0VHQreTY2ZE4xYlUrbVZkN1g2dlNQTWhiTmxGVldWbGw4NlFqSVhudnQ1
VWM4CjhyU3E3YmZmM245aFYveW9vNDVxM2JwMXkwdnF2MjdNUFBQTUk4UzdTbzV3THB6NC9mZmYv
ZGYzSjU5OE1weXF0RTNLYksyTVVGQloKdTBLNnV0dlJSeCs5a0ZlUWwyeExPSmZjNnF0Umt1dnJy
Nzl1VGttd1VVYjV2OHU3MkdLTEpaT2JVd2JNS1I0K1hsK2RSaHR0dERoZQoxODhwa2VZVWtQaWNS
aTVrV2llT0N1SngyV1dYdFREdEtrdWpvWFgxbFFrbW1NREwwRWpJdU9PT2F4Tk5OSkUvYm90L2Ft
Zm9uMWw5CklzMngyWFZLbHQ5czJhMlJsMWVmUC83NG96WGlXcDBuNjFvVUNTdTdINHJ5NXNVMVEy
WWV6N3d5MitOOHM1NDVkZXMrc3A2aDZYcGsKOWFXMktqdGRseXJIeVQ2VFZmZXU5a3dxdTFaSlhs
WDRGcVdwZWk4VXlXaEdYTloxRDNLem5zV3Q3UlBOZU1hRmVtVnRtM2x0c3VRMwo4MXk2cnExbDJv
dzZsYjJ2RmZXUHV1VTNVMWJkc3JQU2x5b2dNcGNwQ3U1THU3a3ZDWEVTOXdYZE5KdzF6VFRUV08v
ZXZXM1FvRUUrClR2NEZKNTU0b2pmZENZazFESHJlZWVmNTgrbVg1SkRtOU5OUHR6dnV1TU51dSsw
MjIyS0xMYnp2d0pkZmZtbFNqSlphYWltYmYvNzUKN2Jubm5ndkpMVXRtbG93NHc5ODdzZ2M5NktD
RDdJUVRUckFOTjl6UW5JYmNJa2xldTVTb3FENWxja01ocjd6eWlzbTBhZSs5OTQ1TgptN0xhRXRL
SGJacnJ4UmRmYkljZmZyanB3Ylh6emp0N3M2bVFObXdmZU9BQmUrbWxsMnpycmJjMk42SVZUc2Ri
S1M0eXF3dGhvNDAyCnNwZGZmdG1XWDM1NTMxYWRuMisrK1d5NzdiWUxTYXdzVGMrZVBWc29PaHB5
UE91c3Myenl5U2VQWlNSMzNudnZQZHR2di8zOGRiN3oKemp0OWVUS2hldmJaWjAwM3JFd0FsZmZZ
WTQvMTJjVEtqZWg0bVRvaDg3TlpaNTNWZHRoaGg2VFllRC9kSjk1Ly8vMFIrbWVjT0xGVApkRDJs
Wk8yeXl5NytHc3JVVUNabVNwOFZ5dXBidC8yUFB2cW92d1l5azd2a2trdHN4aGxudE5sbW15Misv
N0xxa0Q3MzhNTVArLzR2CnMwRGQwMis4OFlaUElqTVdtZkd0dXVxcUprVlRRZGRBWm5ncVY2R283
V1Z0VFYrTHRIL1FRdzg5WkJ0dnZMRWRjc2doNWtibi9IWFgKODBYbkZkUTNwZHdlZlBEQlhubWVl
T0tKN1lVWFhpaXNVNWxNeWMyN3IvUEtVNTRRcWpBTGFiVzk1WlpiVFBWZWUrMjE3ZnZ2djdmTApM
Ny9jSCt1ZVUxOVEwSFZaWW9rbFl0K3JJdVpWNnRqYVowNXI2cXI2dCtZWldyZGY1L1dsMXBTdE9p
ZEQzWHV5ck44blpXcy9YZmV1CitrejYrZWVmL2UrV1RMcjErLzdXVzIrbFVjWEhSZmVBRWhVOXIy
TWhiaWZyWGtqR2E3OUlWbEU5eXZwdytycnIrWmYzTEU3LzNwZkoKVnIzVkQ4dmVzNVN1a1RZb2Z6
TFVmZjRwYjZQbDV6MnZrL1hLMm04TjB6cGxGYldyeXZ0YVZ2L0lLMy9BZ0FIbXJKYjg3L1Zqanox
bQpPbmJXS25iRkZWZjRwbWZKeW1MU1p1ZWNWbHdycEUyd2twbm5ubnR1YjVyamZ0d2o5OFU4Y2k5
QTBiYmJidXVUT0FlYnlMME1SdTZMCnR6OTJtbGprWGlqajdIdnV1V2RzTWhTZi9IdG51dW1taTl5
THBqOXlMOWFSKzNvZU9XZG5uOTY5ZUVUdWh6dHkvZ3hSa2N5a2pMUjgKSFRzZmw4aTkzUG9vOTNM
dXpZUGN4ZlBIUmUwcXFrK1pYT2RyRWJtWFZGL0crZWVmSDdsTzR2ZjFyNmd0Y1NLM2srYXFPSmsz
T1NVaQptYXpGL2trbm5lVGJseXl2UllMVXdROC8vQkF0dmZUU1BvK3VuMU1JVXltaXFFb2FaZnJp
aXk4aXAwajYrdTI0NDQ0dHpMK1NRdDJQCmZlU1VuTWo1RzBVMzNYUlQ1SDZVSXBsNXpUVFRUTDR2
YU1qMHNNTU9pOXlJUnVRYzVuMVdtWlFsVFFCbFBxZzhJY2dFYkxMSkpndUgKVWJKUFpIR01FeVoy
aXZxSjg2V0puT0xtVTh0TWJhR0ZGb3FjRDFXY08xMStVWDNydGw5Y1pUYW5lODRwYkpHYjNDQnlD
bGowcjMvOQpLeTQvdlpPc2o4endWSjlnNnVpVTJHamRkZGVOczZodHpqOG9QbGEvVDhjWHRiMm9y
UkthdkJaeElYL3Z1SThZa2ZNWjhuM0JqWVJHCnpxL0pQMmVtbm5wcW4wTDNyZk5UaSthZGQxN2ZW
L1JNa0tsbjBmVW9rMWwwWCtlVmwrU3BpcFV4Kzd0NThhWlBuejZSK3lnUUgrdWUKY3o1YThmSGRk
OThkdVpISCtMaW9mWGwxYk1ZelJ4V29XOWZXUGtOYjA2L1RmYW0xWmNlZy85NnBlMDhxVzFtL1Qv
ZVpaTjI3NGpOcApxcW1taXR6SER2OGJvMmVSZU13d3d3eis5MUE4MDd5SzdnR2xMM3BlRjkwTHlw
c09SYktLNmxHbER5ZXZlOUd6T04wbnltUlhmWTlRCld4dHRROWExS2ZyTlNQTnRwUHlpNTNXNkhC
MG42MXFYYWQyeWl0cWx1cFM5cnlsTnNuK1VsYS8zYjZkQVJQZmVlMjkwenozM1JPN0QKbFVURUlT
a3JQdGxPTzZVaklIVTFJVG10TDd2c3N1WWVKTGJNTXN2RVgwejFkVyt1dWVZeTEwNHZVbC81NU1U
c0FQbGo5NklVeDJXVgpHVXhuM01YeTZXU1NkZDk5OS9tdm9WOS8vYlU5OGNRVC9zdGhrY3dnSXkx
Zk0wWHBDOGpDQ3kvc28vVFZ4U2tFTnUyMDA4Wko4OXBWClZKOHFjbFdBeXRJUW9NeWlRcWpLSjgw
MTVDL2FobGxHcXBvL2FmUkNveVlISEhDQXlYRmRYL2ZQUGZmY0ZrVlVTYU1NK29vazh5dDkKVGRk
WEdZMDRaUVY5d1hjdmxGNlRkeSs2TnVhWVkvcHlOUXVYNmlGZWUreXhoKzhMWVdZdXBVbGU0N0hH
R3F2RmNWWTVJWDBWamtYWApVMzN4cWFlZThxTVFLa2VtQkJwaHV1dXV1L3lvVFZiWlJmV3QyMzU5
TFZRZTNXUHFxK3E3bWt6Z25YZmV5U3A2aEhPcXJ5WWUwTmNTCkJmRk5mbmwwSHdqOFY3a3dvcW0y
NmpvcVZHbDdVVnU5RVBjdlhJdHdITGJ1Z1dsTzJiQTExbGpEVDN6aEh1aCtoRXRtZ2Fyaklvc3MK
NGtkN25LMi9xYS9vZnRMWDQ2THJVU2F6Nkw3T0tpOXBBaG5xWGNRc3BFbHVOU0hFL2ZmZjcwY0tk
RjRUUW1qMHovM2crR1FhdFhFSwp0ZDh2WTE1V3gwYWVPYXBBbmJyNkNydC9yWG1HdHJaZnAvdFNh
OG9POVE3YnV2ZWs4bFhwOTBGKzJJYTZkOVZua240SFYxOTlkZi8rCm9NbFJuQTlxUE5vWkdHbGJk
ZzhVUGErVGNyTHVoV1M4OW90a2xkV2phaDhPMTczb1daenVFMld5cTc1SE5Lc05TVzUxbm4rTmxs
LzAKdkU3V0tXdS9MdE02WlpXMUs2cytlZWRDL3lnclgrL2ZzdUk1OE1BRC9hUlFXWlA5QkZsNVpi
WFYrYVlySU1tR2FmWXNEVCtGb0xnUQpyNWRmdmZEb1FTTlRJYjBRYUlhdHZCRHl1Uzk3L3VWSU5u
ejZrNm5JZ3c4KzZJZHF5MlFHR2VreXBMeklCQ3daTDVNT3ZZU0ZrSXhMCnRxdW9QbFhrU2dHVHow
WGExSzJzTGFGZTJxcHV5Zm9sNDdMMnhWb2hLQ0wrb09TZkhvb3lkOUxRc0c1WVhiUDBiQ1ZWMHFo
czNSd3kKcVpONWlSdmR5QzA1M1NiNWpDU0RsQjRGS2FDdERja3lraHpkRjNTVG1WajQwM1V1dXA0
eStSRVhNUWpCallENFhTbTNyUW5KdWlsLwpXZnVUOVEvcG5jTlpwYUtWMTMwVjhrcThsRUxObnFh
cGxrUFFmU29sUUR3VXBGanBaVitoV1cxUHQ5Y0wvL3VmNHBMUEI1bVg2VDdVClM3bUNYdlRFUDRR
cWRTcVNXWFJmWjVVWHlrMXVpNWdsMDRWOW1abXBMd2QvTjVuQUJYTU1YVWVaRWNua1ZhRksrOUpN
UWpuTmVPYlUKcVdzb04zbDlxejVEbFZmNWtubDFINVQxNjJUNklDUFVvMDdaSVUvWXB1V1czWk1o
WDUxdHNnenRoK091OGt3YWI3enhZbHhTcEJXeQpwdTh2dXdlS250ZWhnTHg3SWNTSGJaR3NzbnBJ
UnZJNjZqaXJENGZyckczUnN6Z3RLMzJjbEYzMVBhSlpiVkRiUXFqei9HdTAvTExuCmRhaFQzamJO
TUgyY1pGcW5yQ3J0eXF0VCtyenFwRkNsZkxrUTZIbWhqK25KMzgwZ004Z0t4KzIxN2RGZUJhdGMy
UWxxS2xwTi95cWIKWlgzOUN5K1ZlZlZ5cGpmV28wY1AvM1V3SzAxclpNcWVMdGk3Wjhrc09sZFVu
eXB5WmRPdGx6MTl6WmZ0ZmpLMHBpM0ovSG43Yzh3eApoNDl5TTJIbEpZblBhNTBTS1dMaGgxWitO
N0lCbCtJbkJVUmZaS3VraVFYK3ZTTS9FeW1nYnNhVGRGVHVzZklrYjV6a2ZtNm1Wa1o4Ci9QSEhk
dXV0dDhhNVZWYlI5WlRkc3ZxQ0ZPNXh4aG5INTlOb2hQcHEycWNoRmxweloyUzNYeE1TYU5UZzBr
c3ZOZG1tNnVFWmdoNWkKem1UTzI2a2ZjY1FSZmlSci9QSEg5OUZ0MGZaUWorUldQTVEzSzdTMlRr
Rm0wWDJkVlY3V3VTSm1XZWwxbitsTC9kVlhYMjFpSzU4bgoxVWYrVE03RXNjVVU1cTF0bjhwdHhq
T25UbDJ6MnBvODF3eldTWGwxOWhzdGUyVGZrOG0yZE1WbmtrWnk5ZHNUZm4rU1BNcnVnYUxuCmRa
QlRkQytFTk5vV3lTcXJSMUpPMWYyaVozRlZHU0ZkbGZlSWtkR0dPcysvUnN0djlENE9yS3BzNjVU
VmFMdXk2bE9sZkgwSTFRYzUKK1YxdnM4MDIvdmNrUzFaN24ydjZDRWpWQmpuYlJYTzJkLzRGVk1O
VWNtclZEMjFlQ0MrYjA3czFTRFRpa2Z3Q0pyTXVPZHlVeVF3eQowbVhvSWFjdkxETGJDRUV5cTN5
NUxxcFBGYmw2c0dydEZEa0ozWHp6emFINDByYkVDVnV4b3lFNm1kbzRlM0wveFR0TFJERDcwSU5Y
CkNtSXlhTFJvT2plU0VSYWRySkltbVQvczYzcUVVWUp3cnRHdHZoTFhDWGw5UXVZdnpvWXkvcE9K
WU5IMTFCZDV6UzcyNG9zdnhzV3IKZjR1alRJUHlRdDM2NXNscDlMeVUwWjEyMnNsUHZwQWN4VW5L
ZGY1Y3ZyOW9hRmMvM0NGVWJYdFpXL091UlNnbnVkWFhIUzBlNVh3UgprcWZqL2FwMWlqTzRuYVRN
b3ZzNm1hZHNQNDlaWGo0M3hibFg3Qys2NkNKVFhwazZTUkhXU0krVS94QmEwNzZRdDFuUG5LcDFE
ZVhtCmJadkZPaW0vYWw4YUdXVW42Nkg5c242ZlRwOVg5NjcyVEJLWHp6Nzd6SS9FYXRLVGRDaTdC
NHFlMTBGVzNyMFE0c08yU0ZaWlBZS00Kc20yNDdsV2V4V1d5UW56Wk8xRkkxNncyQkhsaFcvWDUx
Mmo1YlhFZmh6YlZLYXZSZG9VeXRRMzlvMHI1bXJCRm8zdktvLzEwQ0xMUwo1OXY2dUpZQ29nZXBw
bmZOV2lWYkZaZTJwNzhRWk8rdnZ4QVVwMk85M092bFFiTXpLTWhyMzYwekVYODVEdW5EVmw4RFAv
MzBVMytvCkw0UjY0WldKbFB3UjlKSjM1SkZIK21sb2kyUW1aU2hmTXNna1NMTkI2Y2RlTnVYNjB3
eE1NamxSS0dyWEpwdHNrbHVmTXJsNk9SVUwKdmRCcmRoOXBxbUdXb2FLMkpPc2U2aGU0Nmxpcmtl
dGFKYTlGTW8rKzJtbUkxem1vZVQrRnBLbU4wc25PZjk5OTkvVXZ6ODRCMEN1SgplamtMUVE4MVhZ
OVZWbG5GbjZxU1JuVng2NUg0OWlxVFh0YWxlQjUxMUZGQjdBaGIxVS9wUXRCaWlqcldlWVdnSklV
ZmVJMDRhSkVoCjlWSDljRW1oRk1jUWREN2sxYmwwbjBqMno1QW51UzI2bmhvSmt0K1RsT01RTk5P
WUhrRE9lZEdmU3BkZlZ0KzY3WmY4d0VJRnFqMUoKZnFGZVladXNqL3E4OHVySFQzazBLaWNsWC8x
VGZ3b2F6dGRzWnpMRDB2QjZDRlhhWHRiVzlMVUlzcFBiNUxYVTdDOVNnb0xmbHZwQwo4bGxUcFU2
U25TZXo2TDVXdm5SNU9wZmtxV09GUEdiL0Z6dmlmL25WYUhwUWZUMlVLWXI4ZURRcXJCbmZrajhh
VmRxWFZVZWRhOFl6ClJ6V3ZXbGVsVlYvVVh3aTZWdUY2bGJHdTI2L1RmYW1Sc2tOOXc3YnVQVm5X
NzlOOUpxdnV5V2Q3cUVmWS90T2VTV3BYOHBrbDN3djUKSEFiZnRDU3ZzbnVnaUkzS0tib1hGSjhN
UmJMSzZpRTVaWDA0ZWQzMUVhdm9XYXorbk93VFJiS3J2a2Mwb3czSmF4UFlWWDMrTlZwKwoyVE1r
MUNkczAzV3R3N1JPV1ZYYVZmYStwam9uKzBmUk83RFM2cjFLUG9uNjhDbHphdm5hSmorbUoyWHBY
Vmp2VlRLdkQrL1lrdEZtCndmMFlWUXJPUkNuUzdES3VZcEg3WVl5MEFLRm1QZ3BCTXhXNUY5dklt
ZmRFcnJHUk02bUt0QUNVTTVId00xcTRGOFBJVGR2cDgydWgKSWFWeFRuMStFY1BiYjc4OWNsOWY0
NWt1Z3N5d2RWOWMvV3hIbWlIR0tSK1JBeHE1SDJsL3pnMHpSZTRMb1UrcU91YkpUTXNJc3NOVwpN
aVJMN1hOZk95Sm5pdUtqeXRxbFJIbjFVVnllWEMzaTUweDFmSDJmZWVhWnlMMHNSODVwT25Jdkd0
SFpaNThkRmJWRmNrTkljOVVzClFlN0Z6TGZEVGNucTVZYTA2YTFUS2lMM1ZkWFBNdUsrVkVSS3I1
bEJuSk4zNUY0KzQrVHVKVHB5RXdwRW1xbE1zNUc1SDRQSVRjRWIKdVp1NGNob3RaaW0rbXRGRThu
VzkzVXR2bkQrOTQrd2NJMmVlNXhjT2RDK2JrV1l0Y2plZWI1ZG12M0xPZGRIUlJ4L3RqemZZWUlQ
SQozVHlSODArSm5HbUlMOE1wVUg3V05UZmE0MmQyRWlkbkQrblRPd2Q2UC90V3NrOW94b2hrLzlS
TUpGa2g3M29xcmZxOCtyOW1HWE5mCkh5TDNzaDYzTWF2OG92cldiYi82cVh1d2VHYks2eVpqOERP
RzZUNXhFd2lNMEpSMGZkeUR5TThpcFQ3cEZQRklNeTZwUDI2NjZhWXQKWmlyVERGVDkrL2NmUVY1
UjI1VzRxSzJLVDE0TDNlUHBvQm56Tk11Vis1b1RPUk93U0RPY09VWFlKM01tUzM3aFRkMDc3cU5H
bkxXcwpUa1V5SlNUdnZzNHFMODB6MlgveW1NVVZUZTNvUHRTTVN5R296Y25qY0w2b2ZWbDFiTll6
SjVTdmJaVzZOdklNRmJzNi9WcDFTdllsClo5WmErTHVrOUhuWFdYSEpVUGVlNUpsVTc1a2sxbnEy
TzZVdGNzN24wWEhISFJmdHZ2dnVmc1pMeFdYZFkwWDNnUExrUGEvTDdnWGwKVFljOFdVcFhWSThx
ZlRqWlovVmJwMmRkMXJOWTd5WEozeW5OZUZSMGYxUjlqMmkwRFZuWEp2Q3IrdnhybEdIVit6aGQx
N3BNMWE2cQpaWlZ4ZFV0SVZIcGZTL2FQb25kZ3A3RDdtVDcxKzYvZ1BpaEc3bU9XbjBGUzdWWkl5
MUlhOTNHcnhTeXNQbUViL091bU10cE0yMGtVCkpBMWZYK0kxUzROTVBvSnpaU0pKaTEzWnZVbWJE
a0VhckV5QU5EUWE3TURMWktabEJGbGhLeFFhVWRITUVuVkRWbjJDak5iSUxXdEwKa04yTXJiNTA2
d3U0T0VwelRxOE5vaEV2TFNDb3J3UWFIZEVhREdtYjNDcHBWTmVRcmhuMXpwS2g2NkF2YUhMQTFk
ZktQSE9pa0xlcwpUNFIweVczUjlWU2NlMW4wZlZ1ejVwU0Z1dlV0azlkb3ZMNnNpWjFDRmorTmZz
ajhUcU9XNlZEVzlySzJGbDBMclpHajJhODAycWwrCktQdldLcUdvVGxWa0Z0M1hWY3BYbWlKbVdU
TDBSVXFqSUNHa2o4TjViWXZhbDB4WFpiODF6NXgwM2RMSFZjb05hWnJCT3NncTZrc2gKVFhMYnpM
S1RjclZmMXUvVDZldldYZm5WRC9KK3UrcjJrYnIxVGRlL0djY2FaZGZ2ZmZodEw1SloxcjRpTmtW
eXMrS0taSlhWSTB0ZQo4bHo2dXBjOWk1TjU4L2JyM3RPTnRpR3JIbldlZjQyV1B6THY0M1RiNnBU
VmFMdFVkcnAvMUNrL1hmZTBMRTErVXZVM05TMnJrZU4yClUwQWFxVFI1SVFDQnRpVWdNejI5Rkd2
NFdkTUFKczJCMnFJbVFWbHdJNjlOSzI1a3lFeFdycjJaSmV2Q1BnUWdBSUcySk1EenJ5MXAKZDg2
eWF2bUFkTTRtVW1zSVFLQVJBbHJ6UmY0SUd0R1JNMzViS3gvNmloZDhlaHBwUnpMdnlKQ1psTi9l
ekpKMVlSOENFSUJBV3hMZworZGVXdER0dldZeUFkTjVyUjgwaDBDWUVaRGFuQ1NNMFVZU216Vzdy
b0JuaWdvT2NKanpRR2hTTmhwRWhNMW1uOW1hV3JBdjdFSUFBCkJOcVNBTSsvdHFUZGVjdENBZW04
MTQ2YVF3QUNFSUFBQkNBQUFRaEFvTk1Sd0FTcjAxMHlLZ3dCQ0VBQUFoQ0FBQVFnQUlIT1N3QUYK
cFBOZU8yb09BUWhBQUFJUWdBQUVJQUNCVGtjQUJhVFRYVElxREFFSVFBQUNFSUFBQkNBQWdjNUxB
QVdrODE0N2FnNEJDRUFBQWhDQQpBQVFnQUlGT1J3QUZwTk5kTWlvTUFRaEFBQUlRZ0FBRUlBQ0J6
a3NBQmFUelhqdHFEZ0VJUUFBQ0VJQUFCQ0FBZ1U1SEFBV2swMTB5Cktnd0JDRUFBQWhDQUFBUWdB
SUhPU3dBRnBQTmVPMm9PQVFoQUFBSVFnQUFFSUFDQlRrY0FCYVRUWFRJcURBRUlRQUFDRUlBQUJD
QUEKZ2M1TEFBV2s4MTQ3YWc0QkNFQUFBaENBQUFRZ0FJRk9Sd0FGcE5OZE1pb01BUWhBQUFJUWdB
QUVJQUNCemtzQUJhVHpYanRxRGdFSQpRQUFDRUlBQUJDQUFnVTVIQUFXazAxMHlLZ3dCQ0VBQUFo
Q0FBQVFnQUlIT1N3QUZwUE5lTzJvT0FRaEFBQUlRZ0FBRUlBQ0JUa2NBCkJhVFRYVElxREFFSVFB
QUNFSUFBQkNBQWdjNUxBQVdrODE0N2FnNEJDRUFBQWhDQUFBUWdBSUZPUndBRnBOTmRNaW9NQVFo
QUFBSVEKZ0FBRUlBQ0J6a3NBQmFRTnJ0MVhYMzFsanp6eWlIMzMzWGVscGYzMjIyLzJ6RFBQNUti
Nzl0dHZiZURBZ1NQRTF5bGoyTEJoOXNrbgpuNHdnbzVFVGRjcFB0ekY5M0VnOXN2TG1NY3RLMjlI
UGRjUzIvUG5ubi9iMjIyOVhRcWUrTjNqdzROeTB6ZW9MUC8vOHN5K2pJL0xLCmJYeVRJdElNNnpL
b203NUoxVzQzTWVuK205ZityR2RjMXJsMmEwaVRDazczbnlhSmJVak1Uei85MUZCK01rTUFBaDJQ
UUtrQ3N0cHEKcTFtdlhyMXNwWlZXc2cwMjJNQzZkKzl1MDA4L3ZhMjMzbnEyK09LTCsrTXJyN3l5
NDdXc2c5VG93Z3N2dE91dXU4NGVmL3h4bTNQTwpPVTBQOTd6dy9QUFAyd0lMTEdEcnJMTk9YaEk3
OU5CRGJhMjExbW9SWDZlTWE2NjV4aWFkZEZLNzZxcXJXc2hvNUtCTytlazJwbzhiCnFVZGUzaXht
ZVdrNyt2bU8xcFlYWDN6UjVwMTNYdHR1dSsxSzBWMXd3UVUyNFlRVDJvMDMzcGladGxsOTRibm5u
ck83Nzc3Ymw5SFIKZUdVMnZJa25zeGpXWlZBM2ZST3IzK2Fpc3ZwdlZ2dXpubkZaNTlxOEFVMHVN
S3YvTkxtSVZvbjc2S09QN1BycnIyOVZYakpCQUFJZApsRUJVRWxaWVlZWG9ndzgraUZPTk1jWVkw
WlpiYmhrZm4zTEtLWkY3c1lpUDYrNzgrdXV2a1JzZHFKdXRVNlIzWDN1anNjY2VPM0pmCjJIeDlu
Mzc2NmRKNm4zenl5WkZURUhMVGZmUE5OOUc3Nzc0YngxY3BJODE0OXRsbmo0NDU1cGhZUmlNN1Zj
cFB5MCszTVgyY1R0L28KY1pwWm8vTFMrZE44MC9GMWpzdGtqZXkyMUtsclNMdkxMcnRFL2ZyMUM0
ZUZXL1h0MDA0N0xUZE5vMzNoaGh0dWFDRy9JL0lLalMrNwoxaUZkM1cyYVlacEJXYm5wOUdYbGw4
a2IyZm5MNUpmRnAvdHZ1djFaejdpc2MyWGxORE8rVWVaRmRVbjNuNkswYlJtbjM3MEREenl3CkxZ
dWtMQWhBWUNRU0tCMEIyV3V2dmZ5SVI1Nyt0UDMyMi9zdiszbng2Zk91TGZHcDMzLy8zVGJiYkRO
Nzhza240M041TzhsOGVXbmEKNm54ZVhkTG5YMy85ZFJzK2ZMaU5Nc3IvWVY1c3NjVktxemphYUtO
WnQyN2RjdFBwQy9MTU04OGN4NWVWa2NWNDFGRkhMU3dqRmw1aApwNno4TEJIcE5xYVBzL0kwY2k3
TnJLcXM5UFhNeXBmRk55dGRsWE5WWk9XMXBVcGRxOVFobmVhUFAvNUluNHFQLy9yckw3L2ZvMGVQ
CnVJL0hrVzRuSzI5WjMydWtMM3p4eFJkMi9QSEgyeDU3N0JGWEk0OVhuS0NkZHFwYzYxQzFvbXVi
RlpkbW1HUlFwZHhrK2xDSHZHMFYKZVhsNWRiN1IvRVd5eStMeSttKzYvVm5QdUt4elplVTFLMzVr
TTB2M24yYlZ1NjZjZE4vVzc1N001Y0xvWmwxNXBJY0FCRG9XZ1ZJRgpaTVVWVnl5c3NmdkNiMzM3
OXZWcHZ2enlTNVBDc3RSU1M5bjg4ODl2TW9VSVFjT241NTEzbnAxNDRva1dYc1JQUC8xMHUrT09P
K3kyCjIyNnpMYmJZd3JMc1BMUHk2ZHlVVTA1cFo1MTFsaGN2RTZkWlo1M1ZkdGhoaDFDYy9mTExM
M2JRUVFmWkNTZWNZQnR1dUtHNXJ6cVYKNHVxMlFVS3o2bmp4eFJmYjRZY2Y3bC9DZHQ1NVo5dG5u
MzE4dXJKNng1WE0yUG44ODg4OXYwVVhYZFRIWnBXUnpwYkhXRCsrTWpXWQpacHBwckhmdjNqWm8w
S0E0YXhHRE9KSGJ5U3ZmZlIwMDkxWFI5dDU3YjI4dXR0dHV1L25ya2N4YnRGK1UvNVpiYnJHSko1
N1kxbDU3CmJmdisrKy90OHNzdjk4ZkxMNys4dmZmZWUxN3NxYWVlYWtzc3NZUzVyNFNXWnZib280
L2FSaHR0NUsvSEpaZGNZalBPT0tQTk50dHMKTGRvdi93SFYvNmlqampJM0F1alRxeDlsS2NwWmZQ
UDREUmd3d011VEtkNWpqejFtT3A1bm5ubnNpaXV1OFBYT2twWGtsRzZMNHJMNgpYaktQOWw5KytX
WFRoNEtERHo3WTNNaVg1L1hDQ3k5WVhqMlY1K0dISC9iM2psanEvbjdqalRkMDJnZngyV21ubmV6
b280LzI5OXhMCkw3MFVvdnkyS0s4U0tML3VCNWtDNmpueDFsdHZ0Y2lmUENpcVl6S2Q5Zzg1NUpB
VzVvdFp2Tko1NnNoUDVwelJGK0lBQUNBQVNVUkIKVkszU2o0cjZjZG0xVmxsWjEvYWhoeDZ5alRm
ZTJMZDEvLzMzdDhrbm45emZ3enFmRmRJTXlzcE5weTlyWjVhOG9uYW42NWpPTHhQUgpPdmUzNU5V
cFQrbUwrbSs2L1ZuUHVLeHprcHZYbCtyZWY2MWhydktUb2VqM3J3NnZzdDlhUFhQMzIyOC8vN3Qv
NTUxMzJuenp6ZWZOCmlKOTk5bG1Ua2laVGJmWFJZNDg5MWxldnJHMUtsTlh2UTl2VTk5WHZwWWdR
SUFDQlRrN0FmV1dvRmRJbVdDR3orOW9acmJ6eXl0SFEKb1VPOXlaRjc0WW5jRDBrMFpNaVF5SDJ4
aVp4dlEwZ2E3Ym5ubnJGWjBuVFRUUmU1aDFNY2w5d3B5dWRlNUZ1WUVjbFViUDMxMTQregpPNStW
eUQwRS9iRjdRZEt3UytSZStQeHhYbHhyMmxCVVI1bUR1TkdQdUU3YUthdjNtV2VlR1UwMjJXUXQ4
b1FENS9BWU9TVXJtbWlpCmljS3BLS3VNT1BMdm5UVGp1ZWVlTzNJdnZwRjdhWW1jTTNya1hzQ2pi
YmZkMXFjdVlwQ1dxK09zOHBkY2NzbkkrUVg1NUc0RUtGcG8Kb1lVaTUwc1VaMCszTVgxY2xyOVBu
ejdSMWx0dkhjdGJldW1sbzYyMjJpbytkbC9Jb3NzdXU4d2ZwNW01citUUkxMUE00dHZzZmpDagpE
ei84TUhMS2EvU3ZmLzByenU4VTI4Z3BULzdZL1lqNnZ1TVVFSjgyVHBUWVNmSXQ0eWZtNm92MzNu
dHZkTTg5OTBUdUJUOGhLWXFTCnNscEV1SU4wVzRyNlhqS3Y3Z1BueHhVNVg0M29wcHR1aW5SdnVw
ZiszUHZWK1NuNWZocE1JNTBpSGEyNzdycXh5RlZYWFRWeVNyOC8KbG5uaEZGTk1FVGtGMEIrWDVa
MXFxcWtpcDRCRjdzT0RONzFVZTJlWVlRYi9qSkNBWkY4b1kra0xUUHdiYjd6eElsM1RFTks4d3Zt
dwpyU3MvNU5PMlNqOHE2OGRGMXpydjJyb1BCZEVrazB3U09UKzh5Q25Fa2ZNdDgvZnkxRk5QSFZj
dnlUQ0xRVkc1NmZSVjJwbVdWOWJ1CnVLSi83NlR6MTdtL0phSnVlVVg5TjkxK3ljOTZ4cVhQRmZX
bHV2ZGZhNWlybnNtUTl4dW5OR1c4a3YxSDZZdCtzNXdDRWptbHcvZEgKUFZ1Y2N1ZC9oMmVhYVNi
L3V5NXp0c01PT3l4eW8vcVJtNFNsOUw3SjYvZXFoNEorVDl3b2F1UjhWZjd2QlA4aEFJRk9TNkIw
QktTcQpmdVVleU9ZbytLL0U5OTEzbi8vcThmWFhYOXNUVHp6aHYxUy8rdXFyNWw2NHZEajNzdWZU
QnRsNUprZjZ3cDJYYjh3eHgyeGhSalRXCldHUEZ4NXB4NnBWWFhyR0ZGMTdZRjZHdnJPZWZmNzVO
TysyMGZqYXF2TGpXdEtHb2pxRjl5VzFSdlpQcHN2YjFaWEN1dWVacXdTNHIKWGRhNU5HTk5MckRz
c3N1YWV5RzBaWlpaSnA3RnFJaEJsdHowT1YzN3A1NTZ5bzhhS0U0bU4wNVpzTHZ1dXN2MFZhd3NW
TW52bEEyNwovLzc3TFpoUUxMZmNjcWF2Yis0bHdJdlgxMkNualByOU5ETjlkZGVvaHppS2dmcUU4
MSt3ZDk1NUo2NmFIUFJsaHFHZzBTSEpVRkRhCnZCRDRsdkVUYzQzSU9WdG1QeEdBUm9mU0ljaEtu
MCszcFdyZlcyU1JSZndvai9QOU1hZEkrSHRCOTBEZS9hcHJwb2tRTkRxaklCWmgKbEVLam1ycVB3
OGlvekF0WFdXV1Z1S3BGZVVPaXpUZmYzRlpmZlhYZjcyUXk1WHpNTE9zTGZobkxJRTliOStKb1Av
endnN21YOC9oMAptbGNjOGZkT0hmbnB2R1g5cUVvL2xzeThhNTEzYmQzTHVqbGx3OVpZWXcwL0NZ
aDdtZlNUWEdoV3UzQ05rblhOWTVCWGJqcDlXVHRECldVRmUxWGFIZkdFYjh1dTR6djFkdDd5eS9w
dHVmNmhmMmJhb0w5VzkvK295VDlldDZQZXZMaS9KTHZyTjByTlVrMUJvVkZmUEZxWFYKSkNseUdq
L2dnQVA4czBNbWtYclc2RnhaMi9MNmZXaWpuaSthRk1mNWc0UlRiQ0VBZ1U1S29Ha0tpRjR1OWFJ
aSsxSDl5V3pqd1FjZgo5Q1lXN291OWY2SFJTNGZNa2ZRanF0bTBRa2orK0lSejJwYmxTNlpON2t2
cGtabFhVcTVNVUZTL29yald0S0cxZFV6V3Q4NisycFJzClY5Vzg2VHpKWXozUU5TeXZVTVNnU2xr
eTdkR1B1SDRvUW5BaklINVhMNzFsb1VwK0RjTkx1UTBtVVRJUGt2bWVUSDlrZGlYRlJLYUIKSWFT
WnBZL0hIWGRjbnkrazEzRlNXWElqVXJFeUc5S2t0NEZuRlg0eUI5UVBxQlRqNUgwUVpBWlo0VGk1
VGRhOVR0L1RpNEd1U3doRgo5VlFaN2l1by8zQWcwelBONFBiamp6LzZyRElkazhuYStPT1BIMFRa
T09PTUUvZkpvcndoZ3h1cENMdW1sek9GckttbGkrb1lDL2g3ClIwcU13Z1FUVFBEM21mL2JKSG0x
aUhBSGRlU244K280TFR2Wmo2cjA0eUFqUzNiUnRWVzV5WDZqNjZGN09FdUpDMlVvVHpLa2o5TngK
eVhqdEo0K1Q3UXo1UW56VmRvZDhZUnZ5NjdqTy9WMjN2TEwrcS9MVDdkVzVzbERXbCtyY2Z5b3JY
WWNpNXVtNkZmM0cxZVdWbHAxMQpuTHgyaWxkZGs2Rm56NTcrVU05c2hhSzJGZlY3bjluOWsveXM1
MFdJWndzQkNIUU9BajJhVlUwMzFHcHlSdFhYNkt3ZzIxNW5xbUZuCm5IR0d0MG5YRit6d1lNcEtI
ODYxSnA5c2NaTTI2MEdXdGtWeHJXMURhK3FZckZOSDJpOWpVRlpYMlZkTGhoUWF2WmdxYUxSQmZT
UEwKeHljdHIwcCtLWklhdmJqNjZxdjlpN0NtTHRhWGVQa0M2U3Q0ZXByaWRCbGx4ODVFME54TWI5
NkdlZlRSUnplTnJzbXZxVXFvd2svSwptWlFCK1VOdHM4MDJMVjdtcTVTUlROUGF2bGRXVDAyWnE1
R3NTeSs5MVB2NjZNVkY0ZE5QUC9YWE4xa0g3U2RmUXZMeXB2UG9XS05LCmVxRkl2N1FvcnF5T1No
TkNVSzZLcHJrT2FjTzJqdnlRcCtxMlNqOHVrMVhuMnFyLzZ4NXI3OUNNZHRlNXYrdVdWNlgvdG9a
aDNiNVUKTjMyZE9oWDl4dFhsVmFmY2tGWjlNZms4U082SE5FWGJzbjd2ekxUOE03bElCbkVRZ0VE
SEo5QzBFWkRwM2RvZ0d2SFFGK2dRTk95cQpMMDdPcHRXYlNManBOMDFEd0hKTzA4dGlDSGtQcUxK
OHdRUW55QWxidmRUb0M4bjc3NzhmVHZraFlIMkJMNHByVFJ2SzZoaFhJTEdUClYrOUVrcWJ2NWpG
T0YxVEVJSjAyNjFoZlkrVWdxUG4xUTVCNWpNeWpaQUpVRnFybWw0S2c5U1F1dXVnaWMvNHIzbXpq
MWx0djlWK0IKcXlvTGVYV1JTWkhNQk5WWDVXQXR4OG15RVBoVzRTZG5hWmt4S1kvMjB5SElTcDlQ
SDdlbTd3VVpSZlY4ODgwM3ZaTzVSbXFTSTFuSwpxNDhJK3BLWlp3SlJsRGVVbmR4Kzl0bG5mblJG
enF2cFVGVEhyTFRPUDgwcm9PbTR2T002OHZOazVKMnYyby96cm5XZGE2dHJvY1h6Cm5POUVYblZH
T0o5WDdnZ0pLNTRJOHFxMk95MDI1QS9ucTk3ZmRjc3I2NytoL0xyYnVuMnBidnFzK3FTWmhUUkZ2
M0YxZVFXWmJmV2IKVmFYZlM4R2F6bGxSRUNBQWdjNU5vSllDb29lUXBwWE5XdEY3azAwMjhhTUxN
blZ5anVkZTRUanl5Q1A5bExINmNkVE1GZ3FhVldqTgpOZGVNdjQ3TGxFTmZwUlNVTHhtSzh1bXJ1
aFpOVW4zMEVpTmxRK2tWWkdPdmx4SFpFc3N1V24rYXFVTzIwMFZ4cldsRFVSMmRRNzQzCkI5Slhw
eENLNnEwMGFvKys4T1FGeWRJTUoxTHVGTExLU09kTk01YU1aSjBrVDM4S1JRelNjbldjTGwrK0Yv
SXJrVElhZ2w3aTljT24KeFN3VjBtMU1IbGZKTHhsdXdnUFQ2SVJNVVdUU0l6OE9qYWhweHBYMEQz
T2FtY3BML3FBcVBqbXJ5aEZISEdIT1VkM2tuOUcvZjM5dgoxNnd5ODBLU3IwWm05QU9aZFI4b3Y1
UWFUU2NwWlV6bVRab1pMbW1hbHBTVnZoK1VQOW1Xb3I2bnRNa2dCVEJjWTUwdnVzNjZYOFJICnlv
UzR5QVJMSHhiVTU3UVlxYjYweTZjcUJLMkNyaSs2U2x1VU4vVFpKR3ZacTJ2RUt2aWJKUHRDVVIx
RDJXR3JyNjV1Y29VUkZLTWsKTDZYVkNJbG01TkV6cDB4K01tMG9KN2t0NmtkVituSFJ0UzY3dHVG
WnAvcElRZGFzYjhIbkxjbFE4V2tHUmVWbXBTOXFwOUluNVdrRQp2T3orVjU1a1NPWVBmYjdxL1Yy
RmM3SXNQZitMK3EvU3BubWxuM0ZLa3o1WDFwZnEzSCtTWDRkNVlLWjhDa1cvY1ZWNHBmdFAyVytX
CmZxK1M5N1R1R3gySDM3SGdteGVldVVWdHE5THZKWGZCQlJmMGJTMjdSMzBpL2tFQUFoMlRnSHNw
cUJTY1NaT2ZQY2UxSXRKc00xcUEKMEptN3RNanJYcVlpOTFMb1o3eHdKaEdSK3lMdDQ1WFhPYXY1
QlF0dnYvMzJ5RTNoR2M5Nm80V0YzQXVqbjlYSXZiaTFrRmVVejluNwpSMjZvM3MrZ3MrKysrL3Ja
b1p5RGI3eW9vY3BXSFZSZjkwVW9jdVlrc2V5aXVMcHR5S3VqYzNhTTNFdUJMOTlOT1JvNUJjbVhY
MVJ2CnplemgvQUo4bm5QUFBUZHlEOWU0enRwUnZKdUMxOGRyTVRmTmdwTlZSb3RNN2lESjJFMDk2
MmZtbW1PT09TTDM0aHU1S1NJakxVem8KZnBUOXpFVEttOGNnTFRldmpaSXArU2VkZEpLZjZjbE5l
K3RuWFZMK2RCdDFYZEp0THNxZnJJTzRhaGFXRU54b1FvdGpuVTh6MHl4VQo3b1hIejl6azdMWWpO
OGxCcEJsYjFHOGZlT0FCTDhvNVRYckc2anRPd2ZFTFE2clBwcTlIS0RmSlYzMDRqNTltbGRJTVp5
cFR3YjNnCmUvbnVhMmc4cTB0YVZpaEQyM1JiZFAzeTdxdGtQbWVxNWhmRWRNcFo1RDRFeEZGNTlY
U21jbjdHTEdkQzUyY1gwNnhpemd3dDJuVFQKVFQwRHlYTW1VNzdmT0lVa2NyNWRrZk81aW5TK0xL
OW14SEV2TkpGelBvK09PKzY0YVBmZGQvY3o1NFgycGZ0Q1hoM2pSaVIyVkUvMQp0UkRTdkhUOXhG
elBHemYxc1U5V0pEK2ROc2pWVnJOUGxmV2pzbjVjZEszem5pc3FXek1LYWtZejlYZW5MRWVhQWRC
OU9WWlU1djJWCmZHYUlRVkc1YVdaVjdwZTB2TEoyKzRvbS9xWHpoNmdxOTdmUzFpMnZxUCttMjUv
MWpNMTc3dVgxcGJyM1g1VytsY2Nzc0N2NmpTdmkKcGZhbjc4R2kzeXc5UXpVTG5uTXVqNXdpSEdt
V052Y1J4ajgvZGE4N3AvTElUZGZ0ai9XczBFeFpSZmROVWI5WDJ5Ni8vUExJZmJBSQp6UnpoZm80
ajJJRUFCRG84Z1c2cVlUTlZJMzNkMEl3c0dnWU9Oc242OHFFdmxKcmhRaVlkU1FkaGxhMnZwM0kr
UzRleWZDcExYMXJrCjRLZXZJbWx6RVRWTjVqK2FlU01kaXVMcXRLR3NqdWx5ZFZ4Vzc2dzhqWjdM
WTV3bk40dEJYdHFzOCtLck9lSjEzVFZUU3QxUUpiOTcKbWZLaklFRjIramljcjd0MUw4WisvbnA5
OVpmenRmcXRacmx4TCtDNVBrNXB2bzN3Uzh2S3EzOXIrbDVhVmxFOU5XS2llMHNoZlgvcAp2dE9Y
VjkyMzRxUVJ4MlFveXF0ME1yVlEzdkNNU09aTjd4ZlZNWjNXVGJIcVI1VzB2azFla0FsWjhCbFJt
aUw1NmJSNU12UE9sL1hqCnZHdGRkRzMxOVZlelgybUVXVi9yazIzSnEwZjZmRjY1NlhSVmo5UHl5
dHFkbHB2T3IvajAvWncrVHNxb1cxNVovMDNLcnJOZjFKZXkKNU5STm41U1J4U3daTHlaRnYzOTFu
cytxWjlGdmJiTGNSdmFMK3Iza3lucEN6MmYzZ1NzdXB0RjdOQmJFRGdRZzBLWUVtcTZBdEdudApL
UXdDVFNadzRZVVhlbVVqUGFPUUprMlFJdVZHUzVwY0l1S2FTV0R3NE1GK2dVVDVtNldWb21hVzA1
NnlnZ0xpUnFIYnN4cVVEWUUyCkphQ0ZWTFhnYktNK2ZtMWFhUXFEQUFSeUNhQ0E1S0lob2lzUzBB
UUplc0hUbE5IT0ZNSDdUY2luUTc0ZCtpTjBmQUpTUXB3NW5mY0IKNi9pMXJWZERmU0dXTDV2NjZH
MjMzVll2TTZraDBFa0phR3BoVGU4ZnB1M3VwTTJnMmhDQVFJSUFDa2dDQnJzUUVBRk41YXNmUEpr
SgphWkZHUmozb0Z4MkZnUE5kaVNmdGNDdkkrelV6T2tyZHFBY0VJQUFCQ0VDZ0tnRVVrS3FrU0Fj
QkNFQUFBaENBQUFRZ0FBRUlORXlnCjFqUzhEWmVHQUFoQUFBSVFnQUFFSUFBQkNFQ2dTeE5BQWVu
U2w1L0dRd0FDRUlBQUJDQUFBUWhBb0cwSm9JQzBMVzlLZ3dBRUlBQUIKQ0VBQUFoQ0FRSmNtZ0FM
U3BTOC9qWWNBQkNBQUFRaEFBQUlRZ0VEYkVrQUJhVnZlbEFZQkNFQUFBaENBQUFRZ0FJRXVUUUFG
cEV0ZgpmaG9QQVFoQUFBSVFnQUFFSUFDQnRpV0FBdEsydkNrTkFoQ0FBQVFnQUFFSVFBQUNYWm9B
Q2tpWHZ2dzBIZ0lRZ0FBRUlBQUJDRUFBCkFtMUxBQVdrYlhsVEdnUWdBQUVJUUFBQ0VJQUFCTG8w
QVJTUUxuMzVhVHdFSUFBQkNFQUFBaENBQUFUYWxnQUtTTnZ5cGpRSVFBQUMKRUlBQUJDQUFBUWgw
YVFJb0lGMzY4dE40Q0VBQUFoQ0FBQVFnQUFFSXRDMEJGSkMyNVUxcEVJQUFCQ0FBQVFoQUFBSVE2
TklFVUVDNgo5T1duOFJDQUFBUWdBQUVJUUFBQ0VHaGJBaWdnYmN1YjBpQUFBUWhBQUFJUWdBQUVJ
TkNsQ2ZRb2EvMlFJVVBLa2hBUEFRaEFBQUlRCmdBQUVJQUFCQ0VEQUUralZxMWNoQ1VaQUN2RVFD
UUVJUUFBQ0VJQUFCQ0FBQVFnMGswQXRCV1RvMEtIMnlTZWYrUEovL1BGSCsvWFgKWCtPNkRCczJ6
RDc5OU5QNG1CMElRQUFDRUlBQUJDQUFBUWhBQUFKcEFwVVVrTTgrKzh5MjMzNTdPL1RRUSszODg4
KzNmdjM2MllvcgpybWl2di82NmwzZlRUVGZackxQT2FqZmNjRU5hUHNjUWdBQUVJQUFCQ0VBQUFo
Q0FBQVJpQXBVVWtJTU9Pc2cwd25INjZhZmJNY2NjClkvZmZmNzkxNzk3ZHBKZ29yTGZlZWpiMTFG
UEhRcHUxODl0dnY5bVRUejZaSzY0c1BqZGpSa1F6WldXSTV4UUVJQUFCQ0VBQUFoQ0EKQUFRZzRB
aFVVa0FHRGh4b2d3Y1B0dDkvLzkxREczWFVVZTJjYzg2eHBJTjZqeDQ5ckZ1M2JrMkRxckoyMkdF
SGUvYlpaek5sbHNWbgpac281MlV4Wk9VVndHZ0lRZ0FBRUlBQUJDRUFBQWhCd0JDb3BJT3VzczQ2
OTl0cHJ0dmJhYTl0WFgzM2x3YzA5OTl5MjVaWmJ0b0Q0CjExOS8yYkhISG10enpUV1hMYmJZWXZi
UlJ4L0Y4UnBCMlhmZmZlM2dndysyVFRiWnhQNzk3My9iTDcvODR1UC8rOS8vMnA1NzdtbEgKSDMy
MG5YTEtLVGJUVERQNWRQZmVlNi9kZmZmZHR1T09POXBQUC8wVXk5TE9lZWVkWitsNDFVMmpOYXV1
dXFvdHZmVFM5dUtMTC9vOApyNzc2cXFrTml5NjZxRDMxMUZPbTQ4VVhYOXl1dmZaYUg1OGx5MGZ3
RHdJUWdBQUVJQUFCQ0VBQUFoQm9Lb0ZLQ3NpMjIyNXJmZnYyCnRXZWVlY1lyRnZmZGQxOW1KVzY3
N1RhZlR2Ri8vdm1ublhycXFYRzZEVGZjMEJaWVlBR3ZaRngrK2VVMllNQUEyMnFyclh6ODhPSEQK
VFhrZmVPQUJtM25tbVcyTk5kYXc3YmJiemlhZGRGSmJhNjIxdkxJeDl0aGp4N0swczl0dXU3V0lI
Mk9NTVd5WFhYYXgvZmZmMys2OAo4MDdyMDZlUDllL2YzMzc0NFFlYmQ5NTViZmZkZDdkMzNubkhP
ODUvL2ZYWFBtN2pqVGYyTXRPeTBtVzFLSmdEQ0VBQUFoQ0FBQVFnCkFBRUlRS0RWQkNvcElEMTc5
clJiYnJuRjl0aGpEL3YrKysvOUNNWWxsMXd5UXFGeVRGOXFxYVZzeWltbnRDV1dXTUprdXFYdzBF
TVAKMlhQUFBlZEhJWFFzRXk2TmdramhlT0dGRjJ6QkJSZTBXV2FaeFR1eVMvbVE0akxqakRNcWFh
bFpWekQ3dXZYV1d5MktJbSt5cGZLawp2SHo3N2JkZWFaSWMxVXNqT0VjZGRaUjNscGRUZlRvRVdl
bnpIRU1BQWhDQUFBUWdBQUVJUUFBQ3pTRlFTUUZSVVZJYU5Bdlc3YmZmCmJoTk5OSkUzcDlLb1JU
SWtYK0RIRzI4ODc3aXUrSmRmZnRubmtZd1E1cDkvZnI4Ylp0TFNDTWFFRTA0WW9tdHZaVzZsUlU5
R0cyMDAKLzdmd3dndDdwV21lZWVhSlpSMTU1SkgyL3Z2dm04N0ppWjRBQVFoQUFBSVFnQUFFSUFB
QkNMUXRnVklGNU9PUFB6YXQrUkdDVExHdQp2UEpLZnlobHBFcVFyNGRHSStRSEVzSWNjOHpobFlD
MGIwZUlyN3Y5N3J2dmJKUlJSdkcrSC9ML0NIOVRUREZGTEVvS2tKU2NNODg4CjA1dG14UkhzUUFB
Q0VJQUFCQ0FBQVFoQUFBSnRRcUJVQVpGajl3VVhYTkNpTWhwZDBMUzdtaG1yU3BCZmh4elVYM25s
bFRpNS9ERGsKSjZMMVE0cENjbFFsSzEySW4yYWFhZXl4eHg1cnNUaWlUTExrZEI2Q0hPUzFWb255
YURyaGRBaXkwdWM1aGdBRUlBQUJDRUFBQWhDQQpBQVNhUTZCVUFabHV1dW5zM0hQUHRmZmVleTh1
OGNzdnYvUnJnQ3kvL1BMeE9ZMXloRm10ZEZLcnBJZVYwdGRjYzAzVFNNU2pqejRhCnA5ZE1WRkpN
bGwxMldYL3Vqei8raU5PSFJETGpDbXVOeVBja0haTHhLNjIwa3AraFM3TnBLYTBVbkJOUFBORm1t
R0VHbjAxK0lkcVgKd25QNDRZZmJwWmRlNm1mMkNqS1RzcFJmNjRMSUY2V3FraFhrc0lVQUJDQUFB
UWhBQUFJUWdBQUU4Z21VS2lEeTk1aDQ0b2x0cjczMgo4bFBjbm5iYWFYN2h3VTAzM2RRN3BVdjBI
WGZjWVI5KytLRTkvUEREZm5WMFRkbXIvVUdEQnBsbXhOS3NVdGRjYzQyZk52ZXNzODZ5CkJ4OTgw
RzYrK1dhNzZxcXJUT3VIYUNWMVRjV3JCUTdsVEI2Q0ZKeUxMcnJJZHQxMTEzZ05raENuYlRKZWl0
TEpKNS9zODB2UjBEVEEKdlh2MzlvcVBGalBVREZsYXdWMUJNMlFwYkw3NTVuNDJMdTBuWldsZEVM
Vkgwd0lYTFlTb2ZBUUlRQUFDRUlBQUJDQUFBUWhBb0RxQgpiczVNS1NwS3JzVUc5U2NINzU5Ly90
bXY3VEhWVkZQWnVPT09XNVF0TTA1RmZmREJCOTVYWS9ycHA4OU1rejRwMzVFaTUvUjB2S2IwCjFh
aUZUTVNrM05RSmFWbmZmUE9OZDU2dkk0TzBFSUFBQkNBQUFRaEFBQUlRNk1vRXBEY1VoVW9LU0pF
QTRpQUFBUWhBQUFJUWdBQUUKSUFBQkNBUUNaUXBJcVFsV0VNUVdBaENBQUFRZ0FBRUlRQUFDRUlC
QW93UlFRQm9sU0g0SVFBQUNFSUFBQkNBQUFRaEFvREtCVWhPcwp5cEpJQ0FFSVFBQUNFSUFBQkNB
QUFRaEFvSVFBSXlBbGdJaUdBQVFnQUFFSVFBQUNFSUFBQkpwSEFBV2tlU3lSQkFFSVFBQUNFSUFB
CkJDQUFBUWlVRUVBQktRRkVOQVFnQUFFSVFBQUNFSUFBQkNEUVBBSW9JTTFqaVNRSVFBQUNFSUFB
QkNBQUFRaEFvSVFBQ2tnSklLSWgKQUFFSVFBQUNFSUFBQkNBQWdlWVJRQUZwSGtza1FRQUNFSUFB
QkNBQUFRaEFBQUlsQkZCQVNnQVJEUUVJUUFBQ0VJQUFCQ0FBQVFnMApqd0FLU1BOWUlna0NFSUFB
QkNBQUFRaEFBQUlRS0NHQUFsSUNpR2dJUUFBQ0VJQUFCQ0FBQVFoQW9Ia0VVRUNheHhKSkVJQUFC
Q0FBCkFRaEFBQUlRZ0VBSkFSU1FFa0JFUXdBQ0VJQUFCQ0FBQVFoQUFBTE5JNEFDMGp5V1NJSUFC
Q0FBQVFoQUFBSVFnQUFFU2dpZ2dKUUEKSWhvQ0VJQUFCQ0FBQVFoQUFBSVFhQjRCRkpEbXNVUVNC
Q0FBQVFoQUFBSVFnQUFFSUZCQ0FBV2tCQkRSRUlBQUJDQUFBUWhBQUFJUQpnRUR6Q1BRb0V6Vmt5
SkN5Sk1SREFBSVFnQUFFSUFBQkNFQUFBaER3QkhyMTZsVklnaEdRUWp4RVFnQUNFSUFBQkNBQUFR
aEFBQUxOCkpJQUMwa3lheUlJQUJDQUFBUWhBQUFJUWdBQUVDZ21nZ0JUaUlSSUNFSUFBQkNBQUFR
aEFBQUlRYUNZQkZKQm0wa1FXQkNBQUFRaEEKQUFJUWdBQUVJRkJJQUFXa0VBK1JFSUFBQkNBQUFR
aEFBQUlRZ0VBekNhQ0FOSk1tc2lBQUFRaEFBQUlRZ0FBRUlBQ0JRZ0x0cW9BOAovZlRUOXR4enp4
VldrRWdJUUFBQ0VJQUFCQ0FBQVFoQTRKOURvSFFka0FjZmZOQ3V1dW9xR3pod29QM3h4eCtaTFI5
bm5IRnNra2ttCnNZa25udGg2OSs1dGE2MjFsazAyMldTWmFjUEorKysvM3piZWVHTi9lTXN0dDlq
U1N5OGRvdGhDQUFJUWdBQUVJQUFCQ0VBQUF2OVEKQXFVS3lQTExMMi82R3pSb2tGY1Nmdnp4UjQ5
aWtVVVdzWjEzM3RsR0dXVVVHenAwcUwzNzdyc21wZUthYTY2eGd3NDZ5T2U1OE1JTApyV2ZQbnBu
b2tnc2Nmdi85OTVscE9Ba0JDRUFBQWhDQUFBUWdBQUVJL0xNSWRJdGNLR3BTVWxIWVpKTk43TjU3
Ny9YSmp6amlDTnQxCjExMWJaUDM5OTk5dHYvMzJzeXV1dU1LZm4zLysrVTJqRytPT08yNkxkRG9Z
UG55NC9lYy8vN0h1M2J1YjVQYm9VYW9MalNEam4zcmkKd3c4L3RPbW1tNjdETksrajFhZkRnS0Vp
RUlBQUJDQUFBUWhBQUFJakVHanFTdWdUVGpoaFhJQkdQdEpoMUZGSHRkTk9PODAwT3FJdwpZTUFB
dStlZWU5TEovUEZvbzQxbVcyKzl0VzJ4eFJZb0h3bEM4b3M1NnFpakVtZmFkN2VqMWFkOWFWQTZC
Q0FBQVFoQUFBSVFnRUNqCkJFYlVJZ29rYXJRaWhHN2R1b1hkRWJhTEw3NTRmTzdGRjErTTk5a3BK
dkRsbDEvYXR0dHVtK3RyVTV5NytiRWRyVDdOYnlFU0lRQUIKQ0VBQUFoQ0FBQVRhbWtBdEJhUnE1
V2FaWlpZNDZlREJnK045ZHZJSnlJOW1zODAyTTczMGQ0VFEwZXJURVpoUUJ3aEFBQUlRZ0FBRQpJ
QUNCeGdtTUZNY0xtVjZGTU9lY2M0YmRFYlpmZmZXVjNYREREVGJsbEZQYTJtdXZQVUs4VG56NjZh
ZDI1WlZYMmx0dnZXVnlWcDl2CnZ2bXNUNTgrL20rYWFhYkp6Qk5PTnBMMzVaZGZ0bWVlZWNaZWVl
VVZHMk9NTVd6dXVlZTIvdjM3NS9xejNIMzMzVDd0a1VjZTZaM3kKcjczMldudjAwVWR0MDAwM3Rk
VldXeTFVS1hQNzlkZGYyL3JycjIrdnZmYWFqMy9ublhmc3VPT084L3R6elRYWENQbXIxTzJUVHo3
eAovamZwQXNjY2MwemJicnZ0N0xiYmJyT1BQdm9vanBZUGppWVZVS2hibjFnSU94Q0FBQVFnQUFF
SVFBQUNFQ2doMFBRUkVEa3MzM25uCm5iNVlPWjl2c01FR0xhcWdXYlF1di94eVAxWHZISFBNWVlj
ZWVxaWZZYXRGb3I4UDdycnJMcE01MXkrLy9PSmZ5QTg4OEVDL2JvaDgKUithZGQxNmJhYWFaYklr
bGx2QStKOTk5OTEwTEVhM04rK2VmZjlyaGh4OXUrKzY3ci8zMTExKzI0SUlMbXRwMHdBRUgyS0tM
TG1wUApQUEZFWE00TEw3eGdlKzIxbDgwMjIyeTJ6VGJibVB3bHBDU3RzTUlLUHYwRER6eGd1K3l5
aThrNXZ5aElqdG94OXRoang4bCsvdmxuCjA5OXZ2LzBXbjZ0VHQ2bW5udHJXWEhOTmUrbWxsMHdU
QnVoUFN0TG1tMi91NWEyeXlpcjIyR09QbVJRbXlaVUNGRUxWK29UMGJDRUEKQVFoQUFBSVFnQUFF
SUZDVlFGTkdRUFNTckJFS2ZablhsL3R2di8zV0pwMTBVanZubkhNc2FZNmxTdWxsZkxubGx2TXY2
c21YK1hTRgpOZTJ2dnRUUE1NTU0vaVZaUGlkVFRUV1ZYWHJwcGRhM2IxK1RJalB0dE5QR1grM0hH
bXVzV0VRamVhWGNTSm5SeTdwR1BoVGtseUZGClNpL3NjcHJYeU1qa2swL3VaL0JTSFlZTkcrYlRp
Y1B1dSs5dWh4eHlpRmVVVkZjcFNYTE9Md3FycnJxcTZlL1dXMisxbjM3NnllYVoKWjU1TVIvUTZk
Vk41bWtucnZQUE9zeVdYWE5JclVlSWkvbXFYbEJ1TjdweHl5aW0yNVpaYnRxaGUxZnEweU1RQkJD
QUFBUWhBQUFJUQpnQUFFS2hCbzlRakkwVWNmN1JVQW1VOU5NY1VVMXE5ZlA5dG5uMzNzaHg5KzhD
L1BVa1owTGgwbW1HQUNyMGpvUmI0b1NKSDU5ZGRmClRTWklTWWQzS1NFYUxWRFEyaU5hOUhDZGRk
YUpsUVdkYjIxZUxicW8wUnV0WXhLVUQ4bVRlWkxNcnhUVVByVmRRZE1NUytGWVlJRUYKL1BHYmI3
NXBhNnl4aGxjbU5KT1ZqclUyU3QyUWJHL0lXN2R1SVo4V2lUejc3TFA5b1JURGswNDZ5ZTlyUkdT
eHhSWWJRZmtJK1pMYgpyUG9rNDltSEFBUWdBQUVJUUFBQ0VJQkFWUUt0SGdHUktZLzhOalFTSVo4
QitSTm8xT0IvLy91Zk4yRjY0NDAzL011NXpKT3lRdExjCktDcyt6SjZWdFpEaFFnc3Q1S2YzMVdq
Qnh4OS83TC8wSjJXME51OWhoeDNtRjA0Y2ZmVFI3ZFZYWDAyS2JPSDdJZVVxR2NLcTcxb0oKWG1a
UElZdzMzbmhodCtGdGErdW1ncVZveUVUc2trc3U4U01pNDQ4L3ZyOVdNaGtqUUFBQ0VJQUFCQ0FB
QVFoQW9DMEp0Rm9Ca1FQNAp3Z3N2M0tLdSsrKy92OGwvWUtPTk5yTHJyNy9lLy8zNzMvODIvZFVO
WWZIQ3BLTjBrQ0VGSklRczg2Ylc1UDNpaXkvczdiZmY5Z3FJCmZFQ3lRaGg1MFJvbVdyOHhqQXlF
UlJTbGdJVDlyUHhWendXNUlYMGpkUXN5cE1ESUowWE82UnJCa1dPLzZsc2xwT3RUSlE5cElBQUIK
Q0VBQUFoQ0FBQVFna0VXZzFRcElsakNkazNKdzQ0MDMydkxMTCsrVG5IRENDZjdjTXNzc2s1Y2w4
N3djdVRXSzh0UlRUM216cDZ6UgpCUGs0eUFRc0hWcVRWK1pjQ2xwczhmYmJiMCtMYk5QajlBdC9N
K29tVTZ3enp6d3pubTBzUzdITGEyUzZQbm5wT0E4QkNFQUFBaENBCkFBUWdBSUV5QXEzMkFTa1NM
TitJNU5mMWUrKzl0eWg1WnR5NjY2NXJVanJrTEgzeXlTZTNTQk5NTTF6TXlBQUFJQUJKUkVGVWg4
NDQKNDR3VzU4TkJhL0pxeWw0RnZaZ1BIejQ4aUdxWGJmcUZ2MWwxa3hJU1ZyQS81cGhqN1AzMzM2
L1V2blI5S21VaUVRUWdBQUVJUUFBQwpFSUFBQkRJSWpCUUZST1VrMS85NDc3MzNNb291UGpYNzdM
UGI0NDgvN3RmOTBHeGFtdTVXSmtRYVVibm1tbXY4WHpDSlNrdHFUZDR3CmtxS3BkN1VPUjN1RzlB
dC9NK3FtcVl4MzNIRkgyM1BQUFUxcmdjakJmOWRkZC9XbVpHVnRUZGVuTEQzeEVJQUFCQ0FBQVFo
QUFBSVEKeUNNdzBoU1F6ejc3TEM0ek9Sb1NuNnl3b3htdnRONkhYcHpsekM2SGN6bFVTekZaYWFX
VkNpWFV6VHZqakRQRzhzS3NVZkdKMUk3Vwoxcmp1dXV0U1o1dDNtSDdoYjBiZDVOY2lKcHJoSy9p
NFBQZmNjM2JSUlJlVlZqeGRuOUlNSklBQUJDQUFBUWhBQUFJUWdFQU9nVm8rCklISzhyaEkwVlcx
eTFFUHJVTlFOR29uWWZ2dnQvU0tEbXNHcFRtaE5YcjJjYTdWenJVWiswMDAzK2JVL3RBaGhPa2dK
MG5vY21oYTMKMlNFNDFBOGRPclNGNkVickpvVk5vMGJ5cDFIUXVpWmFDZjNaWjUvMWE2eXN1T0tL
ZmtybEZvVzZnN3o2cE5OeERBRUlRQUFDRUlBQQpCQ0FBZ2FvRWFvMkFEQmt5SkphYjV5ZWg4MXJq
UTBxQWdzeWgxbHR2dlRoZjJKRnZSd2pKL1hCT1grWnZ2dmxtMDRyZVpTdUpoenhoCjI5cThtc1ZM
UVlxV3B0UDl6My8rMDhJZlJOUDdha0ZDamNob29jVVFRbHUxZ0dGVkpTM2tUVzYxcUtIQ0J4OThF
SitXVEsydTN0cTYKU1puUmF1ektIK1JyUk9QVVUwLzFDeW1LZlo0cFZraWZWWjlRUVUxSnZOUlNT
NW44YnI3NTVwdHdtaTBFSUFBQkNFQUFBaENBQUFReQpDVlJXUUxUbWhxYllEVUhLZ2RiOCtQenp6
NzB6czc2dXkxbGNVL09HRmM0WFdXUVJ1K1dXVzB6cmFxVER3SUVENDFQSi9YQXlmSzNYCmxMNTYy
ZGVLNkZxVVVJdithVVJGU3M3cHA1L3VuZFJEbnJCdGJWNlpkWVVGQitVanNkdHV1L21YZHIxZzkr
N2QyelJTc1BqaWkzc0YKSkpTbGJmQVowWFM1TXM5cWJRaHJwb2pydnZ2dTY5ZnQyR09QUGJ3eTE1
cTYvZm5ubi9hdmYvM0x0T2JLRGp2czBLSmFzODQ2YTd4bQppWGlkZHRwcExlSjFVRlNma0ZqK09h
Ky8vcm85K3VpalhtRU01OWxDQUFJUWdBQUVJQUFCQ0VBZ2kwQTM5OFcrMEs1SzVraFhYWFdWCmFl
WXByYVNkRitUWVBQUE1NOXNzczh6aVgxejc5T2xqU3krOTlBako5WEo5OWRWWCs2bHVwYndvNkl1
OFJoekNuODVwVFE2OU5Nc2sKcWlqb0svME5OOXpneXc3cEdza3JHYWVjY29wcGhxMWh3NFlGa1g1
V3IrT1BQejZleGxZUkdrWFFERjhEQmd5STAvWHExY3NXWFhSUgpQK0lncGFWT0VOOWxsMTNXKzdv
b254U2Z5eSsvM004R0Z1UlVyWnZNcTdUMmh4U2l5U2VmM0R2eEowM1o3cnZ2UGgrZlZQNVdXV1VW
Ck8vREFBMjJPT2Vid3hWV3BqMGFidE02TFp0ZlNxdSthQVkwQUFRaEFBQUlRZ0FBRUlOQjFDZWg5
dUNpVUtpQkpzNnNpUWMyT2t4K0oKVElNMEV2RGJiNytacHFLVk9aRkdKalNqazBaa05HWHVYWGZk
NVgxRkRqMzAwTGdLamVRTlFtUldwWkVOK1h4SXNkS2FJMkVLMjVCbQpaR3hWcnBTMFNTYVpwSVda
VjdLc3RxeGJsZnBvdlJaMXREQmJWN0t1N0VNQUFoQ0FBQVFnQUFFSWRDMENuVklCa2MrRFJrTTIz
bmpqCkVVeUgwcGRQb3c5SEhYV1VkNnBXWENONTA3STVoZ0FFSUFBQkNFQUFBaENBQUFUcUVTaFRR
Q3I3Z05RcnRySFVVanowVlYzK0gyV2gKZS9mdTFyZHYzemhaSTNsaklleEFBQUlRZ0FBRUlBQUJD
RUFBQWlPRlFJZFRRRDc1NUJONy92bm4vV3hTYjc3NVptR2o1VU55eEJGSAp4SDRaamVRdExJaElD
RUFBQWhDQUFBUWdBQUVJUUtBcEJEcWtENGljcnpXemttYlAwcXhVY29yV0xGaGFEMFArSFZya1VL
dWlhNVRrCndnc3Y5STd2Z1VZamVZTU10aENBQUFRZ0FBRUlRQUFDRUlCQTZ3aVVtV0IxU0FWRWp1
K2FBdmVlZSs3SlhGZERUdUdiYjc2NWJiYloKWnRhelo4OFdaQnJKMjBJUUJ4Q0FBQVFnQUFFSVFB
QUNFSUJBYlFLZFVnRUpyUncwYUpCcDhiL0Jnd2Y3cVhvMTVlNU1NODNrMXdNSgphZksyamVUTms4
bDVDRUFBQWhDQUFBUWdBQUVJUUtDWVFLZFdRSXFiUml3RUlBQUJDRUFBQWhDQUFBUWcwTkVJTkt5
QWRMUUdVUjhJClFBQUNFSUFBQkNBQUFRaEFvUE1TNkhDellIVmVsTlFjQWhDQUFBUWdBQUVJUUFB
Q0VDZ2pnQUpTUm9oNENFQUFBaENBQUFRZ0FBRUkKUUtCcEJGQkFtb1lTUVJDQUFBUWdBQUVJUUFB
Q0VJQkFHUUVVa0RKQ3hFTUFBaENBQUFRZ0FBRUlRQUFDVFNPQUF0STBsQWlDQUFRZwpBQUVJUUFB
Q0VJQUFCTW9Jb0lDVUVTSWVBaENBQUFRZ0FBRUlRQUFDRUdnYUFSU1FwcUZFRUFRZ0FBRUlRQUFD
RUlBQUJDQlFSZ0FGCnBJd1E4UkNBQUFRZ0FBRUlRQUFDRUlCQTB3aWdnRFFOSllJZ0FBRUlRQUFD
RUlBQUJDQUFnVElDS0NCbGhJaUhBQVFnQUFFSVFBQUMKRUlBQUJKcEdBQVdrYVNnUkJBRUlRQUFD
RUlBQUJDQUFBUWlVRVVBQktTTkVQQVFnQUFFSVFBQUNFSUFBQkNEUU5BSW9JRTFEaVNBSQpRQUFD
RUlBQUJDQUFBUWhBb0l3QUNrZ1pJZUloQUFFSVFBQUNFSUFBQkNBQWdhWVJRQUZwR2tvRVFRQUNF
SUFBQkNBQUFRaEFBQUpsCkJIcVVKUmd5WkVoWkV1SWhBQUVJUUFBQ0VJQUFCQ0FBQVFoNEFyMTY5
U29rd1FoSUlSNGlJUUFCQ0VBQUFoQ0FBQVFnQUlGbUVrQUIKYVNaTlpFRUFBaENBQUFRZ0FBRUlR
QUFDaFFSUVFBcnhFQWtCQ0VBQUFoQ0FBQVFnQUFFSU5KTUFDa2d6YVNJTEFoQ0FBQVFnQUFFSQpR
QUFDRUNna2dBSlNpSWRJQ0VBQUFoQ0FBQVFnQUFFSVFLQ1pCRkJBbWtrVFdSQ0FBQVFnQUFFSVFB
QUNFSUJBSVFFVWtBU2VUei85CjFBWU1HSkE0VTMzMzZhZWZ0dWVlZTY1NkJsSkNBQUlRZ0FBRUlB
QUJDRUNnQ3hMbzhncUlsSVlqanp6U2xseHlTWnQ3N3JudGhodHUKcU4wTjdyLy9mbHQ5OWRWdGxW
VldzY2NlZTZ4MmZqSkFBQUlRZ0FBRUlBQUJDRUNncXhEbzhnckkwS0ZEYmRpd1lmYkdHMi80YTk2
dApXN2ZhMXo2NVdPUDMzMzlmT3o4WklBQUJDRUFBQWhDQUFBUWcwRlVJbEs2RS9rOEhzY0lLSzln
eXl5eGpWMTU1cFEwZlB0eWlLS3JkCjVIWFdXY2QrL3ZsbjY5Njl1NjIyMm1xMTg1TUJBaENBQUFR
Z0FBRUlRQUFDWFlWQWwxZEFkS0ZISFhWVUcyZWNjZXk3Nzc2ejFveUEKakRiYWFMYjExbHQzbFQ1
RE95RUFBUWhBQUFJUWdBQUVJTkJxQWwzZUJLdlY1TWdJQVFoQUFBSVFnQUFFSUFBQkNOUW1nQUpT
R3hrWgpJQUFCQ0VBQUFoQ0FBQVFnQUlIV0VzQUVLNGZjd0lFRDdiTExMck4zM25uSEpwbGtFbHQw
MFVWdDQ0MDM5dVphV1ZtKyt1b3JQNFBXCmxGTk9hV3V2dlhaV0V0TTB2L0kxZWV1dHQwek82dlBO
TjUvMTZkUEgvMDB6elRTWmVUZ0pBUWhBQUFJUWdBQUVJQUNCZnhJQkZKQ00KcTNueHhSZmJnUWNl
YUgvODhVY2NlLzMxMTV2K3JyamlDcHRvb29uOCtSOS8vTkZ1dnZsbXUrMjIyK3lwcDU2eXYvNzZ5
dzQrK09BNApUM0xucnJ2dXNsMTIyY1UyMjJ3ek8rNjQ0K3lUVHo2eHd3NDd6TTQrKzJ5ZmJJSUpK
ckRKSjUvY2Z2LzlkN3Zubm50TXh3UUlRQUFDCkVJQUFCQ0FBQVFqODB3aDBHQk1zT1lDLy8vNzds
ZmorOXR0djl2enp6OGRwMDhkeFJDdDJubmppQ2E5a0hIVFFRZmJRUXcvWm1XZWUKNlVjb0pPclpa
NSsxTGJmY01wWXFaV0c1NVphenBaZGUyaXNmY1VScVo5Q2dRYmJkZHR2WlZGTk41ZGNjMFZZaktw
ZGVlcW1OTys2NApQdlcwMDA1cmUrNjVwKzIzMzM0MjFsaGpwU1J3Q0FFSVFBQUNFSUFBQkNBQWdY
OEdnVklGNUw3NzdyTytmZnY2TC9KcnJMR0diYkhGCkZyYlNTaXZacHB0dWFpKysrR0xUS0J4NzdM
RmVacG5BbDE1NnlmcjE2MmViYjc2NVQ1bytMc3RmRnErcGRCOTQ0QUhiZmZmZHZlS2gKZHQ1eXl5
MDIyMnl6K2F6UFBQT01hZUZCQlkxU1NKa1FrNktnRVk5ZmYvM1Y1cHBycmhhemJDbnZFa3NzNGJP
KysrNjd0dFphYTVtbQo5QjFqakRHS3hCRUhBUWhBQUFJUWdBQUVJQUNCVGt1Z1ZBR1JzaUd6SVlW
RERqbkVqdzdjZmZmZE51R0VFL28xTDdTU2VHdUNSaTJlCmZQTEpPS3RNbnY3em4vL0V4M2s3Q3l5
d2dQZkZDUEhwNDNDK3RWdU5hSXc1NXBndHN2ZnMyZE9QWElTVDh1TklockhISGp0NU9NSisKVU5R
a0p4MFdXbWdoZitxbm4zNnlqei8rT0IzZDRqak5yRVZrellObXlxcFpOTWtoQUFFSVFBQUNFSUFB
Qkxvd2dWSUZSR3pHRzI4OApqeWlza2FGUmdwMTMzdG43Szl4NDQ0MHQ4Q1g5SmxwRUpBNWt1clRE
RGp0NGs2WndXcU1KTTg0NFl6aU10MW55dE81R3FJc1Nwby9qCnpLM1kwWm9nV1VGbVZzSDNvNnFw
V0pBVHpLdysrdWlqY0NyZUJnVkVKL0xLVmx3V001MXZUV2ltck5hVVR4NElRQUFDRUlBQUJDQUEK
Z2E1TG9KSUNrb1huMjIrLzlhYzFRNVRDNDQ4L2JxZWZmcnFkYzg0NTNrVHJ6VGZmOU9mLys5Ly9l
dCtHbzQ4KzJrNDU1UlNiYWFhWgp2S1AydmZmZWF4cEoyWEhISGUyRER6NndNODQ0dzdRcWVRaDU4
a0o4M3ZhbW0yN3kvaFViYnJpaHlheEpRWFdSN09TSVMxNyt2UE05CmV2U3dlZWVkMTBkLytPR0hl
Y2t5ejRkMnlWSDloeDkreUV3ejNYVFRtV2JReWd2bm5YZWVKWmxweEVRemI4bFhaZFZWVi9WK0tH
R2sKNWRWWFgvV21YUEl6VVprNlhuenh4ZTNhYTYvMTRyTms1WlhMZVFoQUFBSVFnQUFFSUFBQkNE
U1RRS3NVRUpudm5IVFNTVGIrK09QYgordXV2YjhPSEQ3ZWRkdHJKNXA5L2Z1ODdzY3d5eTlnSko1
emc2Nms0elJJbHY0cVpaNTdaNUVjaWgreEpKNTNVK3p6b1pWaW1TVEkvCmtpS2lVQ1RQSnlqNHQ5
NTY2M25mRE1tWVpaWlpmTXBaWjUzVnp6QVYvQzBLc2hkR1RUSEZGRDQraklRVUprNUVycnZ1dW40
VTZlZWYKZjdhVFR6NDVFV1AyOU5OUCsyTXBZRVZodDkxMmE4Rk1maUthVld2Ly9mZTNPKys4MC91
cjlPL2YzeXM0VXBUa3c2SXBoT1Y3OHZYWApYNXZpTkkyd1FscFdtUWxaVWIySWd3QUVJQUFCQ0VB
QUFoQ0FRQjBDdGFiaDFiU3hvNHd5aW4zeHhSZCtORURUeGM0d3d3d1dSWkgzCkIrbmR1N2N2Vyta
VVlmUmh3UVVYOUlxQTFybVE4cUcvRUlJWmxWN281NWhqRHErb0tFNm1TS3V0dHBwbHlRdDVpN1pT
aHVTM0lwTW4KelM0bFB4WDVkalFyekQ3NzdMVkVLYjFHZExiYWFpcy9RcVRSQy9uV3ZQTEtLMzd0
a0d1dXVTWjJSaThUSEpqZGV1dXRucnRtNWxLUQpRcWRSS1RuSnI3enl5cmJVVWt2NTlVaU9PdW9v
ei8vODg4OGZRWFNRTlVJRUp5QUFBUWhBQUFJUWdBQUVJRENTQ05SU1FBNDk5RkEvCnlpRnpwR1RR
aTZ4R1BHU2FwSFV5WlBJemJOaXdPSW0rMXN0cHZTaElSbmdoTHBOWEpFZHhlcm5YREZPcWkrcXNX
YXYyM252dnNteWwKOFZxN1EyR2VlZVlwVFp0T29QcG9aR0tSUlJieFNwRkdmQlpiYkRIdlN6UE9P
T09razVjZXk5eXFWNjllM3Y5RmlSZGVlR0UvVzFjWQo5ZEc1STQ4ODBwL1hLSlg4ZGdnUWdBQUVJ
QUFCQ0VBQUFoQm9id0l0TlltUzJ1Z2xOcTE4aEN4YU5Wd2pEVnBZNzZxcnJyS1hYMzQ1ClJMVnEy
NGc4MVhQcnJiYzJtWGZKUk9tWFgzNkpIZWxiVlJtWFNRclZnQUVEdkhtWEhQRHJCQzFRdVAzMjIz
dmxZNXR0dHFtVE5UZXQKMWsxUk8rVWNueGMwa2lURlQydVphRVFvVENhUWw1N3pFSUFBQkNBQUFR
aEFBQUlRR05rRVd1VURrcTdVMjIrL2JmdnNzNC9KM0tkbwpKcWQwdmpEaWtUN2ZXbmxKT1hyaGxz
TzM2aVJuN0twQnlrSlcwR2pLMEtGRDdmREREL2NqRDhrMDh1MElJYmtmemwxMDBVVit4ZlNwCnA1
N2F6MllWenJkbUc1akpwTzJ4eHg3elBoNUJqa3poNUhRZWd0Wld1ZUdHRy96STBqSEhIQk5PeDlz
Z0t6N0JEZ1FnQUFFSVFBQUMKRUlBQUJFWXlnVW9LeURmZmZPT3JNV1RJa016cXlOOURMNzl5ZXY3
enp6KzlZN1djbjNWT2Y1cEtWOGZKb0sveG4zMzJtVC8xL2ZmZgptMTdjUTU0eWVYSXcxMVN5SWFT
UGRWNWYvcldvbnhRSG1XU1ZCYzFDcFNDSCtZRURCL3A5L1ZQOXI3NzZhdE1MdkpTUFRUYlpKSTRM
Ck84bjB5ZjBRSDVTQ2pUYmF5UHRxeUc5R2l4SnFEWk1sbDF6U0wyU29HY1N5bEpjZ1E5c2tNN1ZK
czJCcDlYVHhrNlA1aVNlZTZIMXkKbEZhcnVLc2NPZUNyM2xwMS9iWFhYbE9VRDBsWnlxK0pCVTQ5
OVZRYlBIaHdTTUlXQWhDQUFBUWdBQUVJUUFBQ1RTZlEzYjJjSGw0awpWUy9rNTU1N3Jra0prZk81
cHQzVmkyMHk2TXUrWnJtNjVKSkxiTkNnUWFaWm43UStpQlFKT1Z6TEpFditFNXBtTmpod2YvcnBw
OTRoClcxdTlETXZrU2s3ajJwY0Qrc01QUDV3cGIrS0pKN2F6empyTCs1dG9YeS9PeWVNNTU1d3o5
bmVRajRSTXA2U0lsSVhWVjEvZGp4VG8KQlZ6K0xGSmM3cmpqRHRNcTVxcWoycWFWeXBPakJ2Lzcz
Ly84MU1OS0gzeGVwSUJJRVZNSXE2Zkx3VjQrRzE5KythVS9MMFhyeHg5LwpOQ2wwVWlMRVNVN3FO
OTk4c3kyNzdMSzUvakpKWm11dXVhWkphZEsweDFJY05NV3VWb2ZYVEdTYWJsalRHLy83My8vMjEw
dnJwRWdCCkVWTk5DcURadkpLeU5Edlk1NTkvN2hVaEtVYkIrZDlYbG44UWdBQUVJQUFCQ0VBQUFo
Q29RU0M5cUhjNmF6ZjNoVDlLbjB3ZTU0MTYKSk5PRWZmbGFoQUkxUWxGbWpxVlptNHFjMCt2S0Mv
VUkyOHN2djl4a3F0U3ZYNzl3cXRKV1NvM1dEcEZ6dUJaSDFNeGZqUVNaZ3UyNgo2NjYyNzc3N2Vv
VkpMLzh5NTVJaW9qWktTWlB5ZGRkZGQzbGZFVG5PNTRVME00MytTR21TRXBqbm4xTlZscFRNdWxN
TTU4bm1QQVFnCkFBRUlRQUFDRUlCQTF5U2dRWUNpMEZRRnBLaWd0b3pUNk1Mb280L3UxeHZSeUVw
eTFLSXQ2Nkd5Wk42azBRcXR3YUhWMzR1Q25OemwKczZKUkp3SUVJQUFCQ0VBQUFoQ0FBQVE2STRF
eUJhU3hUL3Nka0loTXBiVDJSNTgrZmJ4SlVuc3FIOElqeGVPTk45NHcrWCtVQmMxcQoxYmR2MzdK
a3hFTUFBaENBQUFRZ0FBRUlRS0RURXVqUmFXdWVVM0g1ZTBqcDBHSjhrMDgrZVU2cXRqa3R2NWZu
bjMvZUZ5YVRMcTM3CmtSZmtnM0hFRVVmNEZlYnowbkFlQWhDQUFBUWdBQUVJUUFBQ25aM0FQOUlF
cXlOZEZLMUkvdnJycjN1VHNQNzkrL3NWMytYRXI0VUoKNVJ1aW1jRGt3SzlSa2dzdnZOQ3ZXdDZS
Nms5ZElBQUJDRUFBQWhDQUFBUWdVSWRBbVFrV0NrZ2RtcTFJS3lmKzNYYmJ6ZTY1NXg0LwpwVzlh
eE13enoreE54YlJ1U2MrZVBkUFJIRU1BQWhDQUFBUWdBQUVJUUtCVEVVQUI2U0NYUzlNVGF5cGV6
VmdsRXpINXFjdzAwMHgrClBaQU9Va1dxQVFFSVFBQUNFSUFBQkNBQWdZWUpvSUEwakJBQkVJQUFC
Q0FBQVFoQUFBSVFnRUJWQWcwcklGVUxJaDBFSUFBQkNFQUEKQWhDQUFBUWdBSUV5QXYrNGFYakxH
a3c4QkNBQUFRaEFBQUlRZ0FBRUlOQitCRkJBMm84OUpVTUFBaENBQUFRZ0FBRUlRS0RMRVVBQgo2
WEtYbkFaREFBSVFnQUFFSUFBQkNFQ2cvUWlnZ0xRZmUwcUdBQVFnQUFFSVFBQUNFSUJBbHlPQUF0
TGxMamtOaGdBRUlBQUJDRUFBCkFoQ0FRUHNSUUFGcFAvYVVEQUVJUUFBQ0VJQUFCQ0FBZ1M1SEFB
V2t5MTF5R2d3QkNFQUFBaENBQUFRZ0FJSDJJNEFDMG43c0tSa0MKRUlBQUJDQUFBUWhBQUFKZGpn
QUtTSmU3NURRWUFoQ0FBQVFnQUFFSVFBQUM3VWNBQmFUOTJGTXlCQ0FBQVFoQUFBSVFnQUFFdWh3
QgpGSkF1ZDhscE1BUWdBQUVJUUFBQ0VJQUFCTnFQQUFwSSs3R25aQWhBQUFJUWdBQUVJQUFCQ0hR
NUFpZ2dYZTZTMDJBSVFBQUNFSUFBCkJDQUFBUWkwSHdFVWtQWmpUOGtRZ0FBRUlBQUJDRUFBQWhE
b2NnUlFRTHJjSmFmQkVJQUFCQ0FBQVFoQUFBSVFhRDhDUGNxS0hqSmsKU0ZrUzRpRUFBUWhBQUFJ
UWdBQUVJQUFCQ0hnQ3ZYcjFLaVRCQ0VnaEhpSWhBQUVJUUFBQ0VJQUFCQ0FBZ1dZUytFY29JSC8r
K2FlOQorKzY3dVZ5R0RSdG1uMzMyV1c3OGI3LzlaczgvLzN4dWZKMklYMzc1eFQ3KytPTTZXVWdM
QVFoQUFBSVFnQUFFSUFDQkxrT2dWQUc1Ci8vNzdiZUdGRjdZSkpwakE3cjc3N2haZzNubm5IZHQr
KysxOTNPNjc3MjZEQnc5dUVkOFdCeSsvL0xJdHVlU1N0c2NlZTJRV2Q5bGwKbDltTU04NW90OTkr
ZTJiOFN5KzlaUDM2OWJQTk45ODhNNzdPeVZ0dXVjVm1uMzEyTytlY2MrcGtJeTBFSUFBQkNFQUFB
aENBQUFTNgpESUZTQldURkZWZTBZNDg5MWdQWmVlZWQ3WU1QUG9qaHpEcnJyUDVsZThJSko3VFRU
ei9kcHB4eXlqaXU3bzVHSVo1ODhzbTYyYXhQCm56N1d0MjlmRzNYVVVUUHpiclhWVmpiKytPTm54
dW5rQWdzc1lCdHZ2SEZ1ZkoySWRkWlp4eXNnZGZLUUZnSVFnQUFFSUFBQkNFQUEKQWwySlFLa0NJ
aGc5ZXZTd1RUZmQxSDcvL1hjL1VpQXpveEFVTjk5ODgxbTNidDNDcVVyYktJcmlkSks3d3c0NzJM
UFBQaHVmcTdMegoxMTkvK1dTcXd5aWo1RGRGeWtsUi9VWWJiYlRDK0NwMUNXbWFLU3ZJWkFzQkNF
QUFBaENBQUFRZ0FJRi9Db0hTV2JCQ1ErZVlZdzViCmJMSEZiS2VkZHJLOTk5N2J6ajMzM0JBMXdz
di9WMTk5WldlY2NZYTkrdXFyOXROUFA5bEpKNTFrQ3k2NG9FOHZNNlh2di8vZWhnNGQKYXZmZWU2
L0p4T3U4ODg3eit4cGRHVFJva0oxODhzaytYNTZNbjMvKzJRNDk5RkNiWkpKSjdJc3Z2ckMzMzM3
YlJoOTk5TGcrV1R0UwptZzQ1NUJDNy92cnJiWW9wcHJBTExyakFOSUtURmVRemNzUVJSM2lacXM5
VVUwMWxoeDkrdUkwNTVwZyt1V1NwanVPT082Njk5dHByClhnSGJkZGRkUnhDbE9KbUdpZHVHRzI1
b2M4MDExd2hwT0FFQkNFQUFBaENBQUFRZ0FJR3VSS0N5QWlJb0cyMjBrVDMzM0hOMjVaVlgKZW9W
QzVrM3BJSWZ3WFhiWnhTNjU1QkliZSt5eGJaOTk5ckgrL2Z1YmZDMTBmUGJaWjlzamp6emlzMzM5
OWRlbVVZemRkdHZOcDE5cgpyYlZzenozM05NbVE3Q3daNDQwM25tMjk5ZGEyd1FZYm1FeWVsTDkz
Nzk0MjIyeXpwYXZTNHZqR0cyLzBTc3NLSzZ6ZzY2ZTJ2UGppCmkzNTBwMFZDZHlCbFFUNGgybXAw
WnVXVlYvYjF1ZTY2NjN4U3hlMjMzMzZlZ1pRcytaRElEMldlZWVacElXckFnQUcyM1hiYmVXNHQK
SWppQUFBUWdBQUVJUUFBQ0VJQkFGeVdRYjdlVUErVDQ0NC8zWC9JUE9PQUFlK1dWVjBaSWRldXR0
NXJNcTJSTzlkQkREOW1razA1cQozMzc3clQzenpEUDJ3dzgvMk91dnYyNFBQUENBejZjWCthUXBW
akNUS3BJaHBVSDVsMTEyV1M5RHBsZkxMNy84Q1BWSW41QXlzZEpLCks5a1NTeXhoaHgxMm1IMzAw
VWYyMkdPUHBaUDVPa3ZKa25LaklQT3RUVGJaeEpmNXdnc3YyQk5QUE9GSFBlUTdvakR2dlBQYUth
ZWMKWWxOUFBiVS9Edjh1dmZSUzc1d3ZSWWNBQVFoQUFBSVFnQUFFSUFBQkNQd2ZnZG9LeUJoampH
RlhYSEdGYWJ2RkZsdFllcUZDS1FoYQpmRVMrRVByVERGb3l1OUxvZ0p6VlYxOTlkZS8wclpHUmFh
YVp4cnAzN3o3Q3RTaVM4ZlRUVDlzc3M4eGlHZ2tKUVNNclFYa0o1OUxiCm5qMTd4cWVDT1ZqU29U
NUVhbGF0aVNhYXFJVlQrL3p6eisranBUeEprVnBvb1lWYWxLZlJHczBTRnNLRER6NW9wNTU2cWg4
WkNlZlkKUWdBQ0VJQUFCQ0FBQVFoQUFBTE92N3cxRUthYmJqcnZBeUxIZEprWUpSM0F2L3Z1TzY5
VUxMMzAwcG1pTDdyb0lwdHNzc25zL1BQUAo5eU1KTjkxMGt5V1ZBMlVxa3FHcGZqV2lrZzVsQ2tn
eXZVWXJ4aGxuSFArWFBLOTkrWGRJdnZ4QWxFWkIvaTlTbE9UUElyT3h0OTU2Cnk1L1ArN2Zvb291
YUZLVUREenpRempycnJMeGtuSWNBQkNBQUFRaEFBQUlRZ0VDWEkxQnBCRVIrRm1IR3FVQm9sVlZX
TVRsZVAvencKdy9iTk45K0UwMzVVUTZaTnYvNzZhM3hPWmxaUFBmV1VmZm5sbC80Rlh0UDZTdkY0
ODgwMy9laElTQmlVQ0kyTTVNbVlmUExKdllMdwozbnZ2aFd5MXQ1OS8vcmxYTU9hZWUrNFI4czQ4
ODh5K3JVbnpNaWtkOGt1UjA3cVVsK0FzSHpLcmZYSTREMEdLaXhTc2E2KzkxdTY0CjQ0NXdtaTBF
SUFBQkNFQUFBaENBQUFTNlBJRktDb2pNckpKS1JxQ21XYVVXV1dTUmNPaTM2Nisvdm1rV0xEbVRh
N1lydmJ5ZmVPS0oKTnNNTU0vaVJEZmwzS01oeFcwcE1HR1dRU1ZWWXJWeStHbmt5MWw1N2JUOGFv
UVVHUXhnNGNLQlhTcVFrNUlXa0FxWDFSbFMybk5jVgpoZzhmN3AzTnRiL21tbXY2V2JJZWZmUlJI
Zm9nUjNNcEp2STdVZm1hY1V0cm9tZ2hSdjNKcHlTc2dmTEhIMzk0dnhhWm5ta0dMRG5ZCkoxZHAx
M29uTXM5cWowVWJRM3ZZUWdBQ0VJQUFCQ0FBQVFoQW9MMElkSGZUeXg1ZVZQaFZWMTNsbmF3MWk5
VllZNDNscDV3TjZXVjYKSlVWQ294dnJyYmVlUHkzL2lZa25udGd2VUtnWGJZMEN5TmxjZmhSU1ln
NDY2Q0QvQXE5UkNDa2NtakZMY2o3OTlGT2ZSMXNwQVRMegowb3JpYVJueUw1RXlvNmw5TmFXdWZE
S2tYR2kyS3RWUDVsTHBvQ2wvYjdqaEJqLzFyeHpNTlhweXdna24rSHBvcGlwTjkvdmhoeC82CmVt
dE5rNldXV3NwT08rMDBiNDZsdkpwQlM0N21hcGNXTmRScTU5ZGNjNDAzcjlJMHdudnR0WmYzUzlG
cTYxS01ORFd3NU1nVVN5Wm4KVXJya002TkZFOTkvLzMzdk82TXBlWU1DbEs0dnh4Q0FBQVFnQUFF
SVFBQUNFT2lzQk1MU0ZYbjE3K2JNaC83L2lvQVpxZEpPNWhsSgovT3hXU2Fkd3BkR29ncjd5eTJS
SkN3VXFTRkdRc3FIWnNIUk96dVBKSU44TE9hcUhrQ1VqeEdtMFF5TXNTaTl6TDczZ2x3V1pnQ2w5
CnFFOVJlbUdScVpYcU8vMzAwNCtRVlBFYTNkRmFKSFdERkRFcGFnUUlRQUFDRUlBQUJDQUFBUWo4
MHdob3dLQW9ORVVCS1NxQU9BaEEKQUFJUWdBQUVJQUFCQ0VDZzZ4QW9VMEFxK1lCMEhWeTBGQUlR
Z0FBRUlBQUJDRUFBQWhBWW1RUlFRRVltWFdSREFBSVFnQUFFSUFBQgpDRUFBQWkwSWxKcGd0VWpO
QVFRZ0FBRUlRQUFDRUlBQUJDQUFnUVlJTUFMU0FEeXlRZ0FDRUlBQUJDQUFBUWhBQUFMMUNLQ0Ex
T05GCmFnaEFBQUlRZ0FBRUlBQUJDRUNnQVFJb0lBM0FJeXNFSUFBQkNFQUFBaENBQUFRZ1VJOEFD
a2c5WHFTR0FBUWdBQUVJUUFBQ0VJQUEKQkJvZ2dBTFNBRHl5UWdBQ0VJQUFCQ0FBQVFoQUFBTDFD
S0NBMU9ORmFnaEFBQUlRZ0FBRUlBQUJDRUNnQVFJb0lBM0FJeXNFSUFBQgpDRUFBQWhDQUFBUWdV
SThBQ2tnOVhxU0dBQVFnQUFFSVFBQUNFSUFBQkJvZ2dBTFNBRHl5UWdBQ0VJQUFCQ0FBQVFoQUFB
TDFDS0NBCjFPTkZhZ2hBQUFJUWdBQUVJQUFCQ0VDZ0FRSW9JQTNBSXlzRUlBQUJDRUFBQWhDQUFB
UWdVSThBQ2tnOVhxU0dBQVFnQUFFSVFBQUMKRUlBQUJCb2dnQUxTQUR5eVFnQUNFSUFBQkNBQUFR
aEFBQUwxQ0tDQTFPTkZhZ2hBQUFJUWdBQUVJQUFCQ0VDZ0FRSW9JQTNBSXlzRQpJQUFCQ0VBQUFo
Q0FBQVFnVUk5QWo3TGtRNFlNS1V0Q1BBUWdBQUVJUUFBQ0VJQUFCQ0FBQVUrZ1Y2OWVoU1FZQVNu
RVF5UUVJQUFCCkNFQUFBaENBQUFRZzBFd0Mvd2dGNU04Ly83UjMzMzAzbDh1d1ljUHNzODgreTQz
LzdiZmY3UG5ubjgrTnJ4UHh5eSsvMk1jZmYxd24KUzZXMDMzNzdyVEVhVlFrVmlTQUFBUWhBQUFJ
UWdBQUVPakNCVWdYay92dnZ0NFVYWHRnbW1HQUN1L3Z1dTFzMDVaMTMzckh0dDkvZQp4KzIrKys0
MmVQRGdGdkZ0Y2ZEeXl5L2Jra3N1YVh2c3NVZG1jWmRkZHBuTk9PT01kdnZ0dDJmR3YvVFNTOWF2
WHovYmZQUE5NK1ByCm5MemxsbHRzOXRsbnQzUE9PYWRPTnAvMm1HT09zUXN1dU1Ednp6Ly8vUGI5
OTkvNy9WZHB1Y0FuQUFBZlFrbEVRVlJlZWNYV1hudHQKbTNYV1dYMDd0dDU2YS92MTExOXJ5eWNE
QkNBQUFRaEFBQUlRZ0FBRU9nS0JVZ1ZreFJWWHRHT1BQZGJYZGVlZGQ3WVBQdmdncnJkZQppdld5
UGVHRUU5cnBwNTl1VTA0NVpSeFhkMGVqRUU4KytXVGRiTmFuVHgvcjI3ZXZqVHJxcUpsNXQ5cHFL
eHQvL1BFejQzUnlnUVVXCnNJMDMzamczdms3RU91dXM0eFdRT25sQzJ2dnV1OCtXVzI0NWUvUE5O
MjNTU1NmMWRmN3h4eDg5KysyMjI4Nys5Ny8vMlo1NzdtbTMKM1hhYm5YSEdHU0ViV3doQUFBSVFn
QUFFSUFBQkNIUXFBcVVLaUZyVG8wY1AyM1RUVGUzMzMzLzNJd1V5TXdwQmNmUE5ONTkxNjlZdApu
S3EwamFJb1RpZTVPK3l3Z3ozNzdMUHh1U283Zi8zMWwwK21Pb3d5U241VHBKd1UxVyswMFVZcmpL
OVNsNUNtTmJJKy9mUlRrd0ttCmtab0hIbmpBVmxwcEpTL3V4UmRmdERQUFBOTldYbmxscjVRY2ZQ
REJOc01NTTlnTEw3d1FpbU1MQVFoQUFBSVFnQUFFSUFDQlRrV2cKZEJhczBKbzU1cGpERmx0c01k
dHBwNTFzNzczM3RuUFBQVGRFamZEeS85VlhYL212OUsrKytxcjk5Tk5QZHRKSko5bUNDeTdvMDh0
TQpTZVpGUTRjT3RYdnZ2ZGRrNG5YZWVlZjVmWTJ1REJvMHlFNCsrV1NmVDEvNnMyVDgvUFBQZHVp
aGg5b2trMHhpWDN6eGhiMzk5dHMyCit1aWp4L1hKMnBIU2RNZ2hoOWoxMTE5dlUwd3hoVGQzMGdo
T1ZwRFB5QkZISE9GbHFqNVRUVFdWSFg3NDRUYm1tR1A2NUpLbE9vNDcKN3JqMjJtdXZlUVZzMTEx
M0hVR1U0bVFhSm00YmJyaWh6VFhYWEMzU2lJMUdOY0tva3N5cm5uamlDVDhxSXo4U2xaRU1VcUpV
WjQyUQpFQ0FBQVFoQUFBSVFnQUFFSU5BWkNWUldRTlM0alRiYXlKNTc3am03OHNvcnZVSWg4Nlow
a0VQNExydnNZcGRjY29tTlBmYll0czgrCisxai8vdjFOdmhZNlB2dnNzKzJSUng3eDJiNysrbXZU
S01adXUrM20wNisxMWxyK2hWd3lKRHRMeG5qampXZDZVZDlnZ3cxTUprL0sKMzd0M2I1dHR0dG5T
VldseGZPT05OM3FsWllVVlZ2RDFVMXMwd3FEUmszU1FzaUNmRUcwMU9xTVJDTlhudXV1dTgwa1Z0
OTkrKzNrRwpVcERrUXlJL2xIbm1tYWVGcUFFREJwak1wMVJXVmhDUEN5KzgwTGQvK2VXWE41bTdT
VW01NXBwclJsRHFsRitqUnErLy9yb3ZPMHNlCjV5QUFBUWhBQUFJUWdBQUVJTkRSQ2VUYkxlWFUv
UGpqai9jdnlRY2NjSURKUVRvZGJyMzFWditpTEhPcWh4NTZ5SCt0MXd4T3p6enoKalAzd3d3LytC
VnBtUmdwNmtVK2FZZ1V6cVNJWlVocVVmOWxsbC9VeVpIcWxsL2V5SUdWQ3BrMUxMTEdFSFhiWVlm
YlJSeC9aWTQ4OQpOa0kyMVZsS2xwUWJCWmx2YmJMSkpyNU1tVDVwaEVJakcvSWRVWmgzM25udGxG
Tk9zYW1ubnRvZmgzK1hYbnFwZDg3UFV6NUNPbTNGClp0RkZGelU1MUV1SnlUTW51K09PTzB3S1ZG
clJTY3BpSHdJUWdBQUVJQUFCQ0VBQUFoMlpRRzBGWkl3eHhyQXJycmpDdE4xaWl5MUcKbUJwV0Nv
SVdINUV2aFA0MGc1Yk1ydlRTTEdmMTFWZGYzVHQ5YTJSa21tbW1zZTdkdTQvQXAwakcwMDgvYmJQ
TU1vdHBKQ1FFalNRRQo1U1djUzI5Nzl1d1pud3JtWU1IMEtZNXdPMUlDSnBwb29oWk83WnFWU2tH
akQxSVdGbHBvb1JibGFYUkVzNFNGOE9DREQ5cXBwNTdxClIwYkN1YXl0NUQzNjZLTW1rektaWEVu
QmtIbVk2dkRISDMrMHlDTGxUUTdvbWkyTEFBRUlRQUFDRUlBQUJDQUFnYzVLWUVUN293b3QKbVc2
NjZid1BpQnpUWldLVS9HTC8zWGZmZWFWaTZhV1h6cFIwMFVVWDJXU1RUV2JubjMrK0gwbTQ2YWFi
TEtrY0tGT1JERTMxcXhHVgpkQ2hUUUpMcE5Wb3h6ampqK0wva2VlM0x2MFB5NVFlaU5BcnlmNUdp
Sko4Tm1ZMjk5ZFpiL256ZVA0MW1TRkU2OE1BRDdheXp6c3BMCjVwM3VOZG9peDNLTkdNa25aclhW
VnZOcmtzaXhQeG1PT3Vvb08vcm9vMHQ5WFpKNTJJY0FCQ0FBQVFoQUFBSVFnRUJISTFCcEJFUisK
Rm1IR3FkQ0FWVlpaeGVSNC9mREREOXMzMzN3VFR2dFJEWmsySmRlcWtKblZVMDg5WlY5KythVi9n
ZGUwdmxJOE5PV3NSa2RDQ0VxRQpSa2J5WkV3KytlUmVRWGp2dmZkQ3R0cmJ6ei8vM0NzWWM4ODk5
d2g1WjU1NVp0L1dwSG1abEE3NXBjZ0JYTXBMY0pZUG1kVSttV1dGCklNVkZDdGExMTE3clJ6WEMr
ZlJXeXB0R1RqU1NwUFZVTkJJaVIva2RkOXl4eFFpTGxKak5OdHVzeFRUSGN2UW5RQUFDRUlBQUJD
QUEKQVFoQW9MTVJxS1NBYUFYdXBKSVJHcW1YNVVVV1dTUWMrdTM2NjY5dmVqblc3RTZhN1Vvdjd5
ZWVlS0wveXErUkRmbDNLTWh4VzBwTQpHR1dRU1ZWWXJWeStHbmt5dENpZlJpTzB3R0FJQXdjTzlF
cUpsSVM4a0ZTZ3RONkl5cGJ6dXNMdzRjTzlzN24yMTF4elRXOEdKZE9vCkVPUm9Mc1ZFZmljcVh6
TnVhVTBVTGNTb1AvbVVoRFZRWkRvbGhVU21aNW9CU3c3MlJhdTBxeTZMTDc2NE43dlNTSXZNMXBK
QlNvdzQKcW80eVRkT0s3UmRmZkxIOTk3Ly85Y2swZmEvTXZkcGpFY2hrUGRtSEFBUWdBQUVJUUFB
Q0VJQkFGUUtsSmxpYVBVb3Z1SG9KMW5TMAptb0VxQk0wZ3BabXE5dHBycjNES3owYWw2V05sZnFR
cGI4TWloZkp0a0IrRFRMQTBuYTJta3BYcGxXYStVcEFqK1dtbm5lWkhBVFRGCmJwNE1wZFcwdlNw
VG95OTZhVmM5cEJSSXVWbHZ2ZldVcEVXUXFaZ1VGaTNzcDZDUkdNbFEwRXhWTjk5OHMvZGxrZU80
MG1vV0tvMUkKeUpkRnMyc3AvcXFycnZMbFREdnR0RjRCa0hJaFV5c3gwVXhXYXFkV1c5ZElpRVpZ
MWwxM1hTOUw1VWlwMGRURjIyNjdyUzh6L05NVQp3bEpXTktwejlkVlhld2Y1RUtldFJvMjB3cnlV
R3JFSlFTWnM4aDlSK1BEREQ3MXBsdmhXY1hnUE10aENBQUlRZ0FBRUlBQUJDRUNnClBRaDBjeS9B
LzM5RndJd2FhUFNqTEVpeFNEcUZLNzIrMk91cnZFeVd3bFMzR29XUXY0alM2NXljeDVOQnZoZDZr
UThoUzBhSTAyaUgKbENLbGw3bVhuT0xMZ2hRUHBRLzFLVW92TERLMVVuMm5uMzc2RVpJcVhxTTdX
b3VrdllOR3ArUTRUNEFBQkNBQUFRaEFBQUlRZ0VCNwpFOUJIL0tMUUZBV2txQURpSUFBQkNFQUFB
aENBQUFRZ0FJR3VRNkJNQWFua0E5SjFjTkZTQ0VBQUFoQ0FBQVFnQUFFSVFHQmtFa0FCCkdabDBr
UTBCQ0VBQUFoQ0FBQVFnQUFFSXRDQlFhb0xWSWpVSEVJQUFCQ0FBQVFoQUFBSVFnQUFFR2lEQUNF
Z0Q4TWdLQVFoQUFBSVEKZ0FBRUlBQUJDTlFqZ0FKU2p4ZXBJUUFCQ0VBQUFoQ0FBQVFnQUlFR0NL
Q0FOQUNQckJDQUFBUWdBQUVJUUFBQ0VJQkFQUUlvSVBWNAprUm9DRUlBQUJDQUFBUWhBQUFJUWFJ
QUFDa2dEOE1nS0FRaEFBQUlRZ0FBRUlBQUJDTlFqZ0FKU2p4ZXBJUUFCQ0VBQUFoQ0FBQVFnCkFJ
RUdDS0NBTkFDUHJCQ0FBQVFnQUFFSVFBQUNFSUJBUFFJb0lQVjRrUm9DRUlBQUJDQUFBUWhBQUFJ
UWFJQUFDa2dEOE1nS0FRaEEKQUFJUWdBQUVJQUFCQ05RamdBSlNqeGVwSVFBQkNFQUFBaENBQUFR
Z0FJRUdDS0NBTkFDUHJCQ0FBQVFnQUFFSVFBQUNFSUJBUFFJbwpJUFY0a1JvQ0VJQUFCQ0FBQVFo
QUFBSVFhSUFBQ2tnRDhNZ0tBUWhBQUFJUWdBQUVJQUFCQ05RamdBSlNqeGVwSVFBQkNFQUFBaENB
CkFBUWdBSUVHQ0tDQU5BQ1ByQkNBQUFRZ0FBRUlRQUFDRUlCQVBRSW9JUFY0a1JvQ0VJQUFCQ0FB
QVFoQUFBSVFhSUFBQ2tnRDhNZ0sKQVFoQUFBSVFnQUFFSUFBQkNOUWpnQUpTanhlcElRQUJDRUFB
QWhDQUFBUWdBSUVHQ0tDQU5BQ1ByQkNBQUFRZ0FBRUlRQUFDRUlCQQpQUUlvSVBWNGtSb0NFSUFB
QkNBQUFRaEFBQUlRYUlBQUNrZ0Q4TWdLQVFoQUFBSVFnQUFFSUFBQkNOUWpnQUpTanhlcElRQUJD
RUFBCkFoQ0FBQVFnQUlFR0NLQ0FOQUNQckJDQUFBUWdBQUVJUUFBQ0VJQkFQUUlvSVBWNGtSb0NF
SUFBQkNBQUFRaEFBQUlRYUlBQUNrZ0QKOE1nS0FRaEFBQUlRZ0FBRUlBQUJDTlFqZ0FKU2p4ZXBJ
UUFCQ0VBQUFoQ0FBQVFnQUlFR0NLQ0FOQUNQckJDQUFBUWdBQUVJUUFBQwpFSUJBUFFJb0lQVjRr
Um9DRUlBQUJDQUFBUWhBQUFJUWFJQUFDa2dEOE1nS0FRaEFBQUlRZ0FBRUlBQUJDTlFqZ0FKU2p4
ZXBJUUFCCkNFQUFBaENBQUFRZ0FJRUdDS0NBTkFDUHJCQ0FBQVFnQUFFSVFBQUNFSUJBUFFJb0lQ
VjRrUm9DRUlBQUJDQUFBUWhBQUFJUWFJQUEKQ2tnRDhNZ0tBUWhBQUFJUWdBQUVJQUFCQ05RamdB
SlNqeGVwSVFBQkNFQUFBaENBQUFRZ0FJRUdDS0NBTkFEdi83VmZoellBQUFBSQp3LzcvbWhzV2JE
Mll1cmtTSUVDQUFBRUNCQWdRSU5BRUJFanpzaVpBZ0FBQkFnUUlFQ0JBNEJBUUlBZWVLd0VDQkFn
UUlFQ0FBQUVDClRVQ0FOQzlyQWdRSUVDQkFnQUFCQWdRT0FRRnk0TGtTSUVDQUFBRUNCQWdRSU5B
RUJFanpzaVpBZ0FBQkFnUUlFQ0JBNEJBUUlBZWUKS3dFQ0JBZ1FJRUNBQUFFQ1RVQ0FOQzlyQWdR
SUVDQkFnQUFCQWdRT0FRRnk0TGtTSUVDQUFBRUNCQWdRSU5BRUJFanpzaVpBZ0FBQgpBZ1FJRUNC
QTRCQVFJQWVlS3dFQ0JBZ1FJRUNBQUFFQ1RVQ0FOQzlyQWdRSUVDQkFnQUFCQWdRT0FRRnk0TGtT
SUVDQUFBRUNCQWdRCklOQUVCRWp6c2laQWdBQUJBZ1FJRUNCQTRCQVFJQWVlS3dFQ0JBZ1FJRUNB
QUFFQ1RVQ0FOQzlyQWdRSUVDQkFnQUFCQWdRT0FRRnkKNExrU0lFQ0FBQUVDQkFnUUlOQUVCRWp6
c2laQWdBQUJBZ1FJRUNCQTRCQVFJQWVlS3dFQ0JBZ1FJRUNBQUFFQ1RVQ0FOQzlyQWdRSQpFQ0JB
Z0FBQkFnUU9BUUZ5NExrU0lFQ0FBQUVDQkFnUUlOQUVCRWp6c2laQWdBQUJBZ1FJRUNCQTRCQVFJ
QWVlS3dFQ0JBZ1FJRUNBCkFBRUNUVUNBTkM5ckFnUUlFQ0JBZ0FBQkFnUU9BUUZ5NExrU0lFQ0FB
QUVDQkFnUUlOQUVCRWp6c2laQWdBQUJBZ1FJRUNCQTRCQVEKSUFlZUt3RUNCQWdRSUVDQUFBRUNU
VUNBTkM5ckFnUUlFQ0JBZ0FBQkFnUU9BUUZ5NExrU0lFQ0FBQUVDQkFnUUlOQUVCRWp6c2laQQpn
QUFCQWdRSUVDQkE0QkFRSUFlZUt3RUNCQWdRSUVDQUFBRUNUVUNBTkM5ckFnUUlFQ0JBZ0FBQkFn
UU9BUUZ5NExrU0lFQ0FBQUVDCkJBZ1FJTkFFQkVqenNpWkFnQUFCQWdRSUVDQkE0QkFRSUFlZUt3
RUNCQWdRSUVDQUFBRUNUVUNBTkM5ckFnUUlFQ0JBZ0FBQkFnUU8KQVFGeTRMa1NJRUNBQUFFQ0JB
Z1FJTkFFQkVqenNpWkFnQUFCQWdRSUVDQkE0QkFRSUFlZUt3RUNCQWdRSUVDQUFBRUNUVUNBTkM5
cgpBZ1FJRUNCQWdBQUJBZ1FPQVFGeTRMa1NJRUNBQUFFQ0JBZ1FJTkFFQkVqenNpWkFnQUFCQWdR
SUVDQkE0QkFRSUFlZUt3RUNCQWdRCklFQ0FBQUVDVFVDQU5DOXJBZ1FJRUNCQWdBQUJBZ1FPQVFG
eTRMa1NJRUNBQUFFQ0JBZ1FJTkFFQkVqenNpWkFnQUFCQWdRSUVDQkEKNEJBUUlBZWVLd0VDQkFn
UUlFQ0FBQUVDVFVDQU5DOXJBZ1FJRUNCQWdBQUJBZ1FPQVFGeTRMa1NJRUNBQUFFQ0JBZ1FJTkFF
QkVqegpzaVpBZ0FBQkFnUUlFQ0JBNEJBUUlBZWVLd0VDQkFnUUlFQ0FBQUVDVFVDQU5DOXJBZ1FJ
RUNCQWdBQUJBZ1FPQVFGeTRMa1NJRUNBCkFBRUNCQWdRSU5BRUJFanpzaVpBZ0FBQkFnUUlFQ0JB
NEJBUUlBZWVLd0VDQkFnUUlFQ0FBQUVDVFVDQU5DOXJBZ1FJRUNCQWdBQUIKQWdRT0FRRnk0TGtT
SUVDQUFBRUNCQWdRSU5BRUJFanpzaVpBZ0FBQkFnUUlFQ0JBNEJBUUlBZWVLd0VDQkFnUUlFQ0FB
QUVDVFVDQQpOQzlyQWdRSUVDQkFnQUFCQWdRT0FRRnk0TGtTSUVDQUFBRUNCQWdRSU5BRUJFanpz
aVpBZ0FBQkFnUUlFQ0JBNEJBUUlBZWVLd0VDCkJBZ1FJRUNBQUFFQ1RVQ0FOQzlyQWdRSUVDQkFn
QUFCQWdRT0FRRnk0TGtTSUVDQUFBRUNCQWdRSU5BRUJFanpzaVpBZ0FBQkFnUUkKRUNCQTRCQVFJ
QWVlS3dFQ0JBZ1FJRUNBQUFFQ1RVQ0FOQzlyQWdRSUVDQkFnQUFCQWdRT0FRRnk0TGtTSUVDQUFB
RUNCQWdRSU5BRQpCRWp6c2laQWdBQUJBZ1FJRUNCQTRCQVFJQWVlS3dFQ0JBZ1FJRUNBQUFFQ1RV
Q0FOQzlyQWdRSUVDQkFnQUFCQWdRT0FRRnk0TGtTCklFQ0FBQUVDQkFnUUlOQUVCRWp6c2laQWdB
QUJBZ1FJRUNCQTRCQVFJQWVlS3dFQ0JBZ1FJRUNBQUFFQ1RVQ0FOQzlyQWdRSUVDQkEKZ0FBQkFn
UU9BUUZ5NExrU0lFQ0FBQUVDQkFnUUlOQUVCRWp6c2laQWdBQUJBZ1FJRUNCQTRCQVFJQWVlS3dF
Q0JBZ1FJRUNBQUFFQwpUVUNBTkM5ckFnUUlFQ0JBZ0FBQkFnUU9BUUZ5NExrU0lFQ0FBQUVDQkFn
UUlOQUVCRWp6c2laQWdBQUJBZ1FJRUNCQTRCQVFJQWVlCkt3RUNCQWdRSUVDQUFBRUNUVUNBTkM5
ckFnUUlFQ0JBZ0FBQkFnUU9BUUZ5NExrU0lFQ0FBQUVDQkFnUUlOQUVCRWp6c2laQWdBQUIKQWdR
SUVDQkE0QkFRSUFlZUt3RUNCQWdRSUVDQUFBRUNUVUNBTkM5ckFnUUlFQ0JBZ0FBQkFnUU9BUUZ5
NExrU0lFQ0FBQUVDQkFnUQpJTkFFQkVqenNpWkFnQUFCQWdRSUVDQkE0QkFRSUFlZUt3RUNCQWdR
SUVDQUFBRUNUVUNBTkM5ckFnUUlFQ0JBZ0FBQkFnUU9BUUZ5CjRMa1NJRUNBQUFFQ0JBZ1FJTkFF
QkVqenNpWkFnQUFCQWdRSUVDQkE0QkFRSUFlZUt3RUNCQWdRSUVDQUFBRUNUVUNBTkM5ckFnUUkK
RUNCQWdBQUJBZ1FPQVFGeTRMa1NJRUNBQUFFQ0JBZ1FJTkFFQkVqenNpWkFnQUFCQWdRSUVDQkE0
QkFRSUFlZUt3RUNCQWdRSUVDQQpBQUVDVFVDQU5DOXJBZ1FJRUNCQWdBQUJBZ1FPQVFGeTRMa1NJ
RUNBQUFFQ0JBZ1FJTkFFQkVqenNpWkFnQUFCQWdRSUVDQkE0QkFRCklBZWVLd0VDQkFnUUlFQ0FB
QUVDVFVDQU5DOXJBZ1FJRUNCQWdBQUJBZ1FPQVFGeTRMa1NJRUNBQUFFQ0JBZ1FJTkFFQkVqenNp
WkEKZ0FBQkFnUUlFQ0JBNEJBUUlBZWVLd0VDQkFnUUlFQ0FBQUVDVFVDQU5DOXJBZ1FJRUNCQWdB
QUJBZ1FPQVFGeTRMa1NJRUNBQUFFQwpCQWdRSU5BRUJFanpzaVpBZ0FBQkFnUUlFQ0JBNEJBUUlB
ZWVLd0VDQkFnUUlFQ0FBQUVDVFVDQU5DOXJBZ1FJRUNCQWdBQUJBZ1FPCkFRRnk0TGtTSUVDQUFB
RUNCQWdRSU5BRUJFanpzaVpBZ0FBQkFnUUlFQ0JBNEJBUUlBZWVLd0VDQkFnUUlFQ0FBQUVDVFVD
QU5DOXIKQWdRSUVDQkFnQUFCQWdRT0FRRnk0TGtTSUVDQUFBRUNCQWdRSU5BRUJFanpzaVpBZ0FB
QkFnUUlFQ0JBNEJBUUlBZWVLd0VDQkFnUQpJRUNBQUFFQ1RVQ0FOQzlyQWdRSUVDQkFnQUFCQWdR
T0FRRnk0TGtTSUVDQUFBRUNCQWdRSU5BRUJFanpzaVpBZ0FBQkFnUUlFQ0JBCjRCQVFJQWVlS3dF
Q0JBZ1FJRUNBQUFFQ1RVQ0FOQzlyQWdRSUVDQkFnQUFCQWdRT0FRRnk0TGtTSUVDQUFBRUNCQWdR
SU5BRUJFanoKc2laQWdBQUJBZ1FJRUNCQTRCQVFJQWVlS3dFQ0JBZ1FJRUNBQUFFQ1RVQ0FOQzly
QWdRSUVDQkFnQUFCQWdRT0FRRnk0TGtTSUVDQQpBQUVDQkFnUUlOQUVCRWp6c2laQWdBQUJBZ1FJ
RUNCQTRCQVFJQWVlS3dFQ0JBZ1FJRUNBQUFFQ1RVQ0FOQzlyQWdRSUVDQkFnQUFCCkFnUU9BUUZ5
NExrU0lFQ0FBQUVDQkFnUUlOQUVCRWp6c2laQWdBQUJBZ1FJRUNCQTRCQVFJQWVlS3dFQ0JBZ1FJ
RUNBQUFFQ1RVQ0EKTkM5ckFnUUlFQ0JBZ0FBQkFnUU9BUUZ5NExrU0lFQ0FBQUVDQkFnUUlOQUVC
RWp6c2laQWdBQUJBZ1FJRUNCQTRCQVFJQWVlS3dFQwpCQWdRSUVDQUFBRUNUVUNBTkM5ckFnUUlF
Q0JBZ0FBQkFnUU9BUUZ5NExrU0lFQ0FBQUVDQkFnUUlOQUVCRWp6c2laQWdBQUJBZ1FJCkVDQkE0
QkFRSUFlZUt3RUNCQWdRSUVDQUFBRUNUVUNBTkM5ckFnUUlFQ0JBZ0FBQkFnUU9BUUZ5NExrU0lF
Q0FBQUVDQkFnUUlOQUUKQkVqenNpWkFnQUFCQWdRSUVDQkE0QkFRSUFlZUt3RUNCQWdRSUVDQUFB
RUNUVUNBTkM5ckFnUUlFQ0JBZ0FBQkFnUU9BUUZ5NExrUwpJRUNBQUFFQ0JBZ1FJTkFFQkVqenNp
WkFnQUFCQWdRSUVDQkE0QkFRSUFlZUt3RUNCQWdRSUVDQUFBRUNUVUNBTkM5ckFnUUlFQ0JBCmdB
QUJBZ1FPQVFGeTRMa1NJRUNBQUFFQ0JBZ1FJTkFFQkVqenNpWkFnQUFCQWdRSUVDQkE0QkFRSUFl
ZUt3RUNCQWdRSUVDQUFBRUMKVFVDQU5DOXJBZ1FJRUNCQWdBQUJBZ1FPQVFGeTRMa1NJRUNBQUFF
Q0JBZ1FJTkFFQkVqenNpWkFnQUFCQWdRSUVDQkE0QkFRSUFlZQpLd0VDQkFnUUlFQ0FBQUVDVFVD
QU5DOXJBZ1FJRUNCQWdBQUJBZ1FPQVFGeTRMa1NJRUNBQUFFQ0JBZ1FJTkFFQkVqenNpWkFnQUFC
CkFnUUlFQ0JBNEJBUUlBZWVLd0VDQkFnUUlFQ0FBQUVDVFVDQU5DOXJBZ1FJRUNCQWdBQUJBZ1FP
QVFGeTRMa1NJRUNBQUFFQ0JBZ1EKSU5BRUJFanpzaVpBZ0FBQkFnUUlFQ0JBNEJBUUlBZWVLd0VD
QkFnUUlFQ0FBQUVDVFVDQU5DOXJBZ1FJRUNCQWdBQUJBZ1FPQVFGeQo0TGtTSUVDQUFBRUNCQWdR
SU5BRUJFanpzaVpBZ0FBQkFnUUlFQ0JBNEJBUUlBZWVLd0VDQkFnUUlFQ0FBQUVDVFVDQU5DOXJB
Z1FJCkVDQkFnQUFCQWdRT0FRRnk0TGtTSUVDQUFBRUNCQWdRSU5BRUJFanpzaVpBZ0FBQkFnUUlF
Q0JBNEJBUUlBZWVLd0VDQkFnUUlFQ0EKQUFFQ1RVQ0FOQzlyQWdRSUVDQkFnQUFCQWdRT0FRRnk0
TGtTSUVDQUFBRUNCQWdRSU5BRUJFanpzaVpBZ0FBQkFnUUlFQ0JBNEJBUQpJQWVlS3dFQ0JBZ1FJ
RUNBQUFFQ1RVQ0FOQzlyQWdRSUVDQkFnQUFCQWdRT0FRRnk0TGtTSUVDQUFBRUNCQWdRSU5BRUJF
anpzaVpBCmdBQUJBZ1FJRUNCQTRCQVFJQWVlS3dFQ0JBZ1FJRUNBQUFFQ1RVQ0FOQzlyQWdRSUVD
QkFnQUFCQWdRT0FRRnk0TGtTSUVDQUFBRUMKQkFnUUlOQUVCRWp6c2laQWdBQUJBZ1FJRUNCQTRC
QVFJQWVlS3dFQ0JBZ1FJRUNBQUFFQ1RVQ0FOQzlyQWdRSUVDQkFnQUFCQWdRTwpBUUZ5NExrU0lF
Q0FBQUVDQkFnUUlOQUVCRWp6c2laQWdBQUJBZ1FJRUNCQTRCQVFJQWVlS3dFQ0JBZ1FJRUNBQUFF
Q1RVQ0FOQzlyCkFnUUlFQ0JBZ0FBQkFnUU9BUUZ5NExrU0lFQ0FBQUVDQkFnUUlOQUVCRWp6c2la
QWdBQUJBZ1FJRUNCQTRCQVFJQWVlS3dFQ0JBZ1EKSUVDQUFBRUNUVUNBTkM5ckFnUUlFQ0JBZ0FB
QkFnUU9BUUZ5NExrU0lFQ0FBQUVDQkFnUUlOQUVCRWp6c2laQWdBQUJBZ1FJRUNCQQo0QkFRSUFl
ZUt3RUNCQWdRSUVDQUFBRUNUVUNBTkM5ckFnUUlFQ0JBZ0FBQkFnUU9BUUZ5NExrU0lFQ0FBQUVD
QkFnUUlOQUVCRWp6CnNpWkFnQUFCQWdRSUVDQkE0QkFRSUFlZUt3RUNCQWdRSUVDQUFBRUNUVUNB
TkM5ckFnUUlFQ0JBZ0FBQkFnUU9BUUZ5NExrU0lFQ0EKQUFFQ0JBZ1FJTkFFQkVqenNpWkFnQUFC
QWdRSUVDQkE0QkFRSUFlZUt3RUNCQWdRSUVDQUFBRUNUVUNBTkM5ckFnUUlFQ0JBZ0FBQgpBZ1FP
QVFGeTRMa1NJRUNBQUFFQ0JBZ1FJTkFFQkVqenNpWkFnQUFCQWdRSUVDQkE0QkFRSUFlZUt3RUNC
QWdRSUVDQUFBRUNUVUNBCk5DOXJBZ1FJRUNCQWdBQUJBZ1FPQVFGeTRMa1NJRUNBQUFFQ0JBZ1FJ
TkFFQkVqenNpWkFnQUFCQWdRSUVDQkE0QkFRSUFlZUt3RUMKQkFnUUlFQ0FBQUVDVFVDQU5DOXJB
Z1FJRUNCQWdBQUJBZ1FPQVFGeTRMa1NJRUNBQUFFQ0JBZ1FJTkFFQkVqenNpWkFnQUFCQWdRSQpF
Q0JBNEJBUUlBZWVLd0VDQkFnUUlFQ0FBQUVDVFVDQU5DOXJBZ1FJRUNCQWdBQUJBZ1FPQVFGeTRM
a1NJRUNBQUFFQ0JBZ1FJTkFFCkJFanpzaVpBZ0FBQkFnUUlFQ0JBNEJBUUlBZWVLd0VDQkFnUUlF
Q0FBQUVDVFVDQU5DOXJBZ1FJRUNCQWdBQUJBZ1FPQVFGeTRMa1MKSUVDQUFBRUNCQWdRSU5BRUJF
anpzaVpBZ0FBQkFnUUlFQ0JBNEJBUUlBZWVLd0VDQkFnUUlFQ0FBQUVDVFVDQU5DOXJBZ1FJRUNC
QQpnQUFCQWdRT0FRRnk0TGtTSUVDQUFBRUNCQWdRSU5BRUJFanpzaVpBZ0FBQkFnUUlFQ0JBNEJB
UUlBZWVLd0VDQkFnUUlFQ0FBQUVDClRVQ0FOQzlyQWdRSUVDQkFnQUFCQWdRT0FRRnk0TGtTSUVD
QUFBRUNCQWdRSU5BRUJFanpzaVpBZ0FBQkFnUUlFQ0JBNEJBUUlBZWUKS3dFQ0JBZ1FJRUNBQUFF
Q1RVQ0FOQzlyQWdRSUVDQkFnQUFCQWdRT0FRRnk0TGtTSUVDQUFBRUNCQWdRSU5BRUJFanpzaVpB
Z0FBQgpBZ1FJRUNCQTRCQVFJQWVlS3dFQ0JBZ1FJRUNBQUFFQ1RVQ0FOQzlyQWdRSUVDQkFnQUFC
QWdRT0FRRnk0TGtTSUVDQUFBRUNCQWdRCklOQUVCRWp6c2laQWdBQUJBZ1FJRUNCQTRCQVFJQWVl
S3dFQ0JBZ1FJRUNBQUFFQ1RVQ0FOQzlyQWdRSUVDQkFnQUFCQWdRT0FRRnkKNExrU0lFQ0FBQUVD
QkFnUUlOQUVCRWp6c2laQWdBQUJBZ1FJRUNCQTRCQVFJQWVlS3dFQ0JBZ1FJRUNBQUFFQ1RVQ0FO
QzlyQWdRSQpFQ0JBZ0FBQkFnUU9BUUZ5NExrU0lFQ0FBQUVDQkFnUUlOQUVCRWp6c2laQWdBQUJB
Z1FJRUNCQTRCQVFJQWVlS3dFQ0JBZ1FJRUNBCkFBRUNUVUNBTkM5ckFnUUlFQ0JBZ0FBQkFnUU9B
UUZ5NExrU0lFQ0FBQUVDQkFnUUlOQUVCRWp6c2laQWdBQUJBZ1FJRUNCQTRCQVEKSUFlZUt3RUNC
QWdRSUVDQUFBRUNUVUNBTkM5ckFnUUlFQ0JBZ0FBQkFnUU9BUUZ5NExrU0lFQ0FBQUVDQkFnUUlO
QUVCRWp6c2laQQpnQUFCQWdRSUVDQkE0QkFRSUFlZUt3RUNCQWdRSUVDQUFBRUNUVUNBTkM5ckFn
UUlFQ0JBZ0FBQkFnUU9BUUZ5NExrU0lFQ0FBQUVDCkJBZ1FJTkFFQkVqenNpWkFnQUFCQWdRSUVD
QkE0QkFRSUFlZUt3RUNCQWdRSUVDQUFBRUNUVUNBTkM5ckFnUUlFQ0JBZ0FBQkFnUU8KQVFGeTRM
a1NJRUNBQUFFQ0JBZ1FJTkFFQkVqenNpWkFnQUFCQWdRSUVDQkE0QkFRSUFlZUt3RUNCQWdRSUVD
QUFBRUNUVUNBTkM5cgpBZ1FJRUNCQWdBQUJBZ1FPQVFGeTRMa1NJRUNBQUFFQ0JBZ1FJTkFFQkVq
enNpWkFnQUFCQWdRSUVDQkE0QkFRSUFlZUt3RUNCQWdRCklFQ0FBQUVDVFVDQU5DOXJBZ1FJRUNC
QWdBQUJBZ1FPQVFGeTRMa1NJRUNBQUFFQ0JBZ1FJTkFFQkVqenNpWkFnQUFCQWdRSUVDQkEKNEJB
UUlBZWVLd0VDQkFnUUlFQ0FBQUVDVFVDQU5DOXJBZ1FJRUNCQWdBQUJBZ1FPQVFGeTRMa1NJRUNB
QUFFQ0JBZ1FJTkFFQkVqegpzaVpBZ0FBQkFnUUlFQ0JBNEJBUUlBZWVLd0VDQkFnUUlFQ0FBQUVD
VFVDQU5DOXJBZ1FJRUNCQWdBQUJBZ1FPQVFGeTRMa1NJRUNBCkFBRUNCQWdRSU5BRUJFanpzaVpB
Z0FBQkFnUUlFQ0JBNEJBUUlBZWVLd0VDQkFnUUlFQ0FBQUVDVFVDQU5DOXJBZ1FJRUNCQWdBQUIK
QWdRT0FRRnk0TGtTSUVDQUFBRUNCQWdRSU5BRUJFanpzaVpBZ0FBQkFnUUlFQ0JBNEJBUUlBZWVL
d0VDQkFnUUlFQ0FBQUVDVFVDQQpOQzlyQWdRSUVDQkFnQUFCQWdRT0FRRnk0TGtTSUVDQUFBRUNC
QWdRSU5BRUJFanpzaVpBZ0FBQkFnUUlFQ0JBNEJBUUlBZWVLd0VDCkJBZ1FJRUNBQUFFQ1RXQnZ0
UVVZNTBFSzRRQUFBQUJKUlU1RXJrSmdnZz09Cgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67819</attachid>
            <date>2010-09-16 11:12:32 -0700</date>
            <delta_ts>2010-09-16 11:22:19 -0700</delta_ts>
            <desc>New patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>244960</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NzYzOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTM1IEBACisyMDEwLTA5LTE1ICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzg0MDIsIHBhZ2luYXRlIGNvbHVt
bnMgYXQgbGF5b3V0IHRpbWUgcmF0aGVyIHRoYW4gYXQgcGFpbnQgdGltZS4KKworICAgICAgICBU
aGlzIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgY29sdW1uIGJyZWFraW5nIGF0IGxheW91dCB0aW1l
IHJhdGhlciB0aGFuIGF0IHBhaW50IHRpbWUuICBOZXcgdmFyaWFibGVzIGhhdmUgYmVlbgorICAg
ICAgICBhZGRlZCB0byBMYXlvdXRTdGF0ZSBhbmQgdG8gQ29sdW1uSW5mbyB0byB0cmFjayBjb2x1
bW4gaW5mb3JtYXRpb24gd2hpbGUgbGF5aW5nIG91dC4KKyAgICAgICAgCisgICAgICAgIFRoZSBi
YXNpYyBpZGVhIGJlaGluZCB0aGlzIHBhdGNoIGlzIHRvIHJldGFpbiB0aGUgY29sdW1ucycgcGFp
bnQtdGltZSBoYWNrZXJ5IG9mIHRyYW5zZm9ybWluZyBvbmUgbG9uZyB2ZXJ0aWNhbCBzdHJpcAor
ICAgICAgICBpbnRvIG11bHRpcGxlIGNvbHVtbnMuICBOb3csIGhvd2V2ZXIsIGxheW91dCBpcyBh
d2FyZSBvZiB0aGUgY29sdW1ucyBhbmQgd2lsbCBtb3ZlIG9iamVjdHMgdXAgYW5kIGRvd24gdmVy
dGljYWxseSBpbiBvcmRlcgorICAgICAgICB0byBlbnN1cmUgdGhleSBkb24ndCBpbnRlcnNlY3Qg
YSBicmVhay4KKyAgICAgICAgCisgICAgICAgIE1hbnkgbmV3IHRlc3RzIGFkZGVkIGluIGZhc3Qv
bXVsdGljb2wgYW5kIG5ldyByZXN1bHRzIGFkZGVkIGZvciBleGlzdGluZyBmYXN0L211bHRpY29s
IHRlc3RzLgorCisgICAgICAgICogcmVuZGVyaW5nL0NvbHVtbkluZm8uaDoKKyAgICAgICAgKFdl
YkNvcmU6OkNvbHVtbkluZm86OkNvbHVtbkluZm8pOgorICAgICAgICAoV2ViQ29yZTo6Q29sdW1u
SW5mbzo6Y29sdW1uQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6Q29sdW1uSW5mbzo6Y29sdW1u
SGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbHVtbkluZm86OnNldENvbHVtbkNvdW50QW5k
SGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbHVtbkluZm86OnNldENvbHVtbkhlaWdodCk6
CisgICAgICAgIChXZWJDb3JlOjpDb2x1bW5JbmZvOjp1cGRhdGVNaW5pbXVtQ29sdW1uSGVpZ2h0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbHVtbkluZm86Om1pbmltdW1Db2x1bW5IZWlnaHQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29sdW1uSW5mbzo6Zm9yY2VkQnJlYWtzKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbHVtbkluZm86OmZvcmNlZEJyZWFrT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbHVtbkluZm86Om1heGltdW1EaXN0YW5jZUJldHdlZW5Gb3JjZWRCcmVha3MpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29sdW1uSW5mbzo6Y2xlYXJGb3JjZWRCcmVha3MpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29sdW1uSW5mbzo6YWRkRm9yY2VkQnJlYWspOgorICAgICAgICAqIHJlbmRlcmluZy9M
YXlvdXRTdGF0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRTdGF0ZTo6TGF5b3V0U3Rh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0U3RhdGU6OmNsZWFyUGFnaW5hdGlvbkluZm9y
bWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dFN0YXRlOjpwYWdlWSk6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXRTdGF0ZTo6YWRkRm9yY2VkQ29sdW1uQnJlYWspOgorICAgICAgICAq
IHJlbmRlcmluZy9MYXlvdXRTdGF0ZS5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0U3RhdGU6
OkxheW91dFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dFN0YXRlOjpwYWdpbmF0aW5n
Q29sdW1ucyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRTdGF0ZTo6cGFnaW5hdGVkKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQmxvY2s6OlJlbmRlckJsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjp+
UmVuZGVyQmxvY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxheW91dEJsb2Nr
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpjb2xsYXBzZU1hcmdpbnMpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmVzdGltYXRlVmVydGljYWxQb3NpdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2tDaGlsZCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bGF5b3V0UG9zaXRpb25lZE9iamVjdHMpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnBhaW50Q29sdW1uUnVsZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQmxvY2s6OnBhaW50Q29sdW1uQ29udGVudHMpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2s6OnBhaW50Q2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2s6Omluc2VydEZsb2F0aW5nT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJs
b2NrOjpyZW1vdmVGbG9hdGluZ09iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxv
Y2s6OnBvc2l0aW9uTmV3RmxvYXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpw
b3NpdGlvbk5ld0Zsb2F0T25MaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjps
b3dlc3RQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cmlnaHRtb3N0
UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxlZnRtb3N0UG9zaXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Om1hcmtBbGxEZXNjZW5kYW50c1dp
dGhGbG9hdHNGb3JMYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Om1hcmtE
ZXNjZW5kYW50QmxvY2tzQW5kTGluZXNGb3JMYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQmxvY2s6OmhpdFRlc3RDb2x1bW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2Nr
OjpzZXREZXNpcmVkQ29sdW1uQ291bnRBbmRXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCbG9jazo6Y29sdW1uQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmNv
bHVtblJlY3RBdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bGF5b3V0Q29sdW1u
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6YWRqdXN0UG9pbnRUb0NvbHVtbkNv
bnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjphZGp1c3RSZWN0Rm9yQ29s
dW1ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6YWRqdXN0Rm9yQ29sdW1ucyk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6c2V0TWF4VG9wTWFyZ2lucyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6c2V0TWF4Qm90dG9tTWFyZ2lucyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6c2V0UGFnaW5hdGlvblN0cnV0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjpzZXRQYWdlWSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
bG9jazo6bmV4dFBhZ2VUb3ApOgorICAgICAgICAoV2ViQ29yZTo6aW5Ob3JtYWxGbG93KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjphcHBseUJlZm9yZUJyZWFrKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJsb2NrOjphcHBseUFmdGVyQnJlYWspOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2s6OmFkanVzdEZvclVuc3BsaXR0YWJsZUNoaWxkKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjphZGp1c3RMaW5lUG9zaXRpb25Gb3JQYWdpbmF0aW9uKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJsb2NrOjpwYWdpbmF0aW9uU3RydXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
OnBhZ2VZKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjptYXhUb3BQb3NNYXJnaW4p
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Om1heFRvcE5lZ01hcmdpbik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bWF4Qm90dG9tUG9zTWFyZ2luKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJsb2NrOjptYXhCb3R0b21OZWdNYXJnaW4pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQmxvY2s6OmluaXRNYXhNYXJnaW5WYWx1ZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0OjpGbG9hdGluZ09iamVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3Q6OnR5cGUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQmxvY2s6OlJlbmRlckJsb2NrUmFyZURhdGE6OlJlbmRlckJsb2NrUmFy
ZURhdGEpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxheW91dElubGluZUNoaWxkcmVuKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpkZXRlcm1pbmVTdGFydFBvc2l0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpza2lwTGVhZGluZ1doaXRlc3BhY2UpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmZpbmROZXh0TGluZUJyZWFrKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6
bWFwTG9jYWxUb0NvbnRhaW5lcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbXB1
dGVSZWN0Rm9yUmVwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6Om1hcmtEZXNj
ZW5kYW50QmxvY2tzQW5kTGluZXNGb3JMYXlvdXQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyRmxleGlibGVCb3g6OmxheW91dEJsb2NrKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckZsZXhpYmxlQm94OjpsYXlvdXRIb3Jpem9udGFsQm94KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckZsZXhpYmxlQm94OjpsYXlvdXRWZXJ0aWNhbEJveCk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94Lmg6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlcklubGluZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OmNvbXB1
dGVSZWN0Rm9yUmVwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6Om1hcExv
Y2FsVG9Db250YWluZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlUGFnaW5hdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnRDaGlsZExheWVySW50b0NvbHVtbnMpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmhpdFRlc3RDaGlsZExheWVyQ29sdW1ucyk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxpbmVCb3hMaXN0OjpwYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clRhYmxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpSZW5kZXJUYWJsZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6bGF5b3V0KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyVGFibGUuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVSb3c6OmxheW91dCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUYWJsZVNlY3Rpb246OmxheW91dFJvd3MpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OlJlbmRlclZpZXcpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6cHVzaExheW91dFN0YXRlKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyVmlldy5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6
c2V0VHJ1bmNhdGVkQXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6cHVzaExheW91
dFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OnBvcExheW91dFN0YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dFN0YXRlTWFpbnRhaW5lcjo6TGF5b3V0U3RhdGVNYWlu
dGFpbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dFN0YXRlTWFpbnRhaW5lcjo6cHVzaCk6
CisgICAgICAgICogcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guaDoKKyAgICAgICAgKFdlYkNvcmU6
OlJvb3RJbmxpbmVCb3g6OlJvb3RJbmxpbmVCb3gpOgorICAgICAgICAoV2ViQ29yZTo6Um9vdElu
bGluZUJveDo6cGFnaW5hdGlvblN0cnV0KToKKyAgICAgICAgKFdlYkNvcmU6OlJvb3RJbmxpbmVC
b3g6OnNldFBhZ2luYXRpb25TdHJ1dCk6CisKIDIwMTAtMDktMTYgIFNoZXJpZmYgQm90ICA8d2Vi
a2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcg
b3V0IHI2NzYyOC4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCShyZXZpc2lvbiA2NzYzOSkKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMzg0LDggKzIzODQsOCBAQAogCQk4OTNDNDdC
ODEyMzhBMDk5MDAyQjNEODYgLyogSlNGaWxlQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg5M0M0N0I2MTIzOEEwOTkwMDJCM0Q4NiAvKiBK
U0ZpbGVDYWxsYmFjay5oICovOyB9OwogCQk4OTNDNDdCQjEyMzhBMEE5MDAyQjNEODYgLyogSlNG
aWxlV3JpdGVyQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gODkzQzQ3QjkxMjM4QTBBOTAwMkIzRDg2IC8qIEpTRmlsZVdyaXRlckNhbGxi
YWNrLmNwcCAqLzsgfTsKIAkJODkzQzQ3QkMxMjM4QTBBOTAwMkIzRDg2IC8qIEpTRmlsZVdyaXRl
ckNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA4OTNDNDdCQTEyMzhBMEE5MDAyQjNEODYgLyogSlNGaWxlV3JpdGVyQ2FsbGJhY2suaCAqLzsg
fTsKLQkJODkzQzQ3REYxMjNFRjRBOTAwMkIzRDg2IC8qIEpTRGlyZWN0b3J5RW50cnlDdXN0b20u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODkzQzQ3
REUxMjNFRjRBOTAwMkIzRDg2IC8qIEpTRGlyZWN0b3J5RW50cnlDdXN0b20uY3BwICovOyB9Owog
CQk4OTNDNDdDQzEyM0VFQkEyMDAyQjNEODYgLyogSlNFbnRyeUN1c3RvbS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4OTNDNDdDQTEyM0VFQkEyMDAy
QjNEODYgLyogSlNFbnRyeUN1c3RvbS5jcHAgKi87IH07CisJCTg5M0M0N0RGMTIzRUY0QTkwMDJC
M0Q4NiAvKiBKU0RpcmVjdG9yeUVudHJ5Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg5M0M0N0RFMTIzRUY0QTkwMDJCM0Q4NiAvKiBKU0Rp
cmVjdG9yeUVudHJ5Q3VzdG9tLmNwcCAqLzsgfTsKIAkJODk4Nzg1NTIxMjJDQTA2NDAwM0FBQkRB
IC8qIERpcmVjdG9yeUVudHJ5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDg5ODc4NTM5MTIyQ0EwNjQwMDNBQUJEQSAvKiBEaXJlY3RvcnlFbnRyeS5j
cHAgKi87IH07CiAJCTg5ODc4NTUzMTIyQ0EwNjQwMDNBQUJEQSAvKiBEaXJlY3RvcnlFbnRyeS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODk4Nzg1M0Ex
MjJDQTA2NDAwM0FBQkRBIC8qIERpcmVjdG9yeUVudHJ5LmggKi87IH07CiAJCTg5ODc4NTU0MTIy
Q0EwNjQwMDNBQUJEQSAvKiBEaXJlY3RvcnlSZWFkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODk4Nzg1M0IxMjJDQTA2NDAwM0FBQkRBIC8qIERp
cmVjdG9yeVJlYWRlci5jcHAgKi87IH07CkBAIC04MjkwLDggKzgyOTAsOCBAQAogCQk4OTNDNDdC
NjEyMzhBMDk5MDAyQjNEODYgLyogSlNGaWxlQ2FsbGJhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNGaWxlQ2FsbGJhY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJODkzQzQ3QjkxMjM4QTBBOTAwMkIzRDg2IC8qIEpTRmlsZVdyaXRlckNhbGxiYWNrLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRmlsZVdyaXRlckNhbGxi
YWNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODkzQzQ3QkExMjM4QTBBOTAw
MkIzRDg2IC8qIEpTRmlsZVdyaXRlckNhbGxiYWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTRmlsZVdyaXRlckNhbGxiYWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTg5M0M0N0RFMTIzRUY0QTkwMDJCM0Q4NiAvKiBKU0RpcmVjdG9yeUVudHJ5Q3VzdG9t
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRGlyZWN0b3J5RW50
cnlDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4OTNDNDdDQTEyM0VF
QkEyMDAyQjNEODYgLyogSlNFbnRyeUN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBKU0VudHJ5Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJODkzQzQ3REUxMjNFRjRBOTAwMkIzRDg2IC8qIEpTRGlyZWN0b3J5RW50cnlDdXN0b20u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNEaXJlY3RvcnlFbnRy
eUN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg5ODc4NTM5MTIyQ0Ew
NjQwMDNBQUJEQSAvKiBEaXJlY3RvcnlFbnRyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBEaXJlY3RvcnlFbnRyeS5jcHA7IHBhdGggPSBmaWxlYXBpL0RpcmVjdG9y
eUVudHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODk4Nzg1M0ExMjJDQTA2
NDAwM0FBQkRBIC8qIERpcmVjdG9yeUVudHJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERpcmVjdG9yeUVudHJ5Lmg7IHBhdGggPSBmaWxlYXBpL0RpcmVjdG9yeUVudHJ5Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg5ODc4NTNCMTIyQ0EwNjQwMDNBQUJEQSAv
KiBEaXJlY3RvcnlSZWFkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gRGlyZWN0b3J5UmVhZGVyLmNwcDsgcGF0aCA9IGZpbGVhcGkvRGlyZWN0b3J5UmVhZGVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL0Nv
bHVtbkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9Db2x1bW5JbmZvLmgJ
KHJldmlzaW9uIDY3NjM5KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvQ29sdW1uSW5mby5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw4IEBACiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2lu
Y2x1ZGUgIkludFJlY3QuaCIKIAordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKwogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBDb2x1bW5JbmZvIDogcHVibGljIE5vbmNvcHlhYmxlIHsKQEAgLTM2
LDYgKzM4LDEyIEBAIHB1YmxpYzoKICAgICBDb2x1bW5JbmZvKCkKICAgICAgICAgOiBtX2Rlc2ly
ZWRDb2x1bW5XaWR0aCgwKQogICAgICAgICAsIG1fZGVzaXJlZENvbHVtbkNvdW50KDEpCisgICAg
ICAgICwgbV9jb2x1bW5Db3VudCgxKQorICAgICAgICAsIG1fY29sdW1uSGVpZ2h0KDApCisgICAg
ICAgICwgbV9taW5pbXVtQ29sdW1uSGVpZ2h0KDApCisgICAgICAgICwgbV9mb3JjZWRCcmVha3Mo
MCkKKyAgICAgICAgLCBtX21heGltdW1EaXN0YW5jZUJldHdlZW5Gb3JjZWRCcmVha3MoMCkKKyAg
ICAgICAgLCBtX2ZvcmNlZEJyZWFrT2Zmc2V0KDApCiAgICAgICAgIHsgfQogICAgIAogICAgIGlu
dCBkZXNpcmVkQ29sdW1uV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2Rlc2lyZWRDb2x1bW5XaWR0
aDsgfQpAQCAtNDQsMTkgKzUyLDUxIEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBkZXNpcmVkQ29s
dW1uQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2Rlc2lyZWRDb2x1bW5Db3VudDsgfQogICAgIHZv
aWQgc2V0RGVzaXJlZENvbHVtbkNvdW50KHVuc2lnbmVkIGNvdW50KSB7IG1fZGVzaXJlZENvbHVt
bkNvdW50ID0gY291bnQ7IH0KIAotICAgIC8vIEVuY2Fwc3VsYXRlZCBmb3IgdGhlIGZ1dHVyZSB3
aGVyZSB3ZSBjYW4gYXZvaWQgc3RvcmluZyB0aGUgcmVjdHMgYW5kIGp1c3QgY29tcHV0ZSB0aGVt
IGR5bmFtaWNhbGx5LgotICAgIHNpemVfdCBjb2x1bW5Db3VudCgpIGNvbnN0IHsgcmV0dXJuIG1f
Y29sdW1uUmVjdHMuc2l6ZSgpOyB9Ci0gICAgY29uc3QgSW50UmVjdCYgY29sdW1uUmVjdEF0KHNp
emVfdCBpKSBjb25zdCB7IHJldHVybiBtX2NvbHVtblJlY3RzW2ldOyB9CisgICAgdW5zaWduZWQg
Y29sdW1uQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2NvbHVtbkNvdW50OyB9CisgICAgaW50IGNv
bHVtbkhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fY29sdW1uSGVpZ2h0OyB9CiAKLSAgICB2b2lk
IGNsZWFyQ29sdW1ucygpIHsgbV9jb2x1bW5SZWN0cy5jbGVhcigpOyB9CisgICAgLy8gU2V0IG91
ciBjb3VudCBhbmQgaGVpZ2h0LiAgVGhpcyBpcyBlbm91Z2ggaW5mbyBmb3IgYSBSZW5kZXJCbG9j
ayB0byBjb21wdXRlIHBhZ2UgcmVjdHMKKyAgICAvLyBkeW5hbWljYWxseS4KKyAgICB2b2lkIHNl
dENvbHVtbkNvdW50QW5kSGVpZ2h0KGludCBjLCBpbnQgaCkKKyAgICB7IAorICAgICAgICBtX2Nv
bHVtbkNvdW50ID0gYzsKKyAgICAgICAgbV9jb2x1bW5IZWlnaHQgPSBoOworICAgIH0KKyAgICB2
b2lkIHNldENvbHVtbkhlaWdodChpbnQgaCkgeyBtX2NvbHVtbkhlaWdodCA9IGg7IH0KKworICAg
IHZvaWQgdXBkYXRlTWluaW11bUNvbHVtbkhlaWdodChpbnQgaCkgeyBtX21pbmltdW1Db2x1bW5I
ZWlnaHQgPSBtYXgoaCwgbV9taW5pbXVtQ29sdW1uSGVpZ2h0KTsgfQorICAgIGludCBtaW5pbXVt
Q29sdW1uSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9taW5pbXVtQ29sdW1uSGVpZ2h0OyB9CisK
KyAgICBpbnQgZm9yY2VkQnJlYWtzKCkgY29uc3QgeyByZXR1cm4gbV9mb3JjZWRCcmVha3M7IH0K
KyAgICBpbnQgZm9yY2VkQnJlYWtPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2ZvcmNlZEJyZWFr
T2Zmc2V0OyB9CisgICAgaW50IG1heGltdW1EaXN0YW5jZUJldHdlZW5Gb3JjZWRCcmVha3MoKSBj
b25zdCB7IHJldHVybiBtX21heGltdW1EaXN0YW5jZUJldHdlZW5Gb3JjZWRCcmVha3M7IH0KKyAg
ICB2b2lkIGNsZWFyRm9yY2VkQnJlYWtzKCkKKyAgICB7IAorICAgICAgICBtX2ZvcmNlZEJyZWFr
cyA9IDA7CisgICAgICAgIG1fbWF4aW11bURpc3RhbmNlQmV0d2VlbkZvcmNlZEJyZWFrcyA9IDA7
CisgICAgICAgIG1fZm9yY2VkQnJlYWtPZmZzZXQgPSAwOworICAgIH0KKyAgICB2b2lkIGFkZEZv
cmNlZEJyZWFrKGludCBvZmZzZXRGcm9tRmlyc3RQYWdlKQorICAgIHsgCisgICAgICAgIEFTU0VS
VCghbV9jb2x1bW5IZWlnaHQpOworICAgICAgICBpbnQgZGlzdGFuY2VGcm9tTGFzdEJyZWFrID0g
b2Zmc2V0RnJvbUZpcnN0UGFnZSAtIG1fZm9yY2VkQnJlYWtPZmZzZXQ7CisgICAgICAgIGlmICgh
ZGlzdGFuY2VGcm9tTGFzdEJyZWFrKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtX2Zv
cmNlZEJyZWFrcysrOworICAgICAgICBtX21heGltdW1EaXN0YW5jZUJldHdlZW5Gb3JjZWRCcmVh
a3MgPSBtYXgobV9tYXhpbXVtRGlzdGFuY2VCZXR3ZWVuRm9yY2VkQnJlYWtzLCBkaXN0YW5jZUZy
b21MYXN0QnJlYWspOworICAgICAgICBtX2ZvcmNlZEJyZWFrT2Zmc2V0ID0gb2Zmc2V0RnJvbUZp
cnN0UGFnZTsKKyAgICB9CiAKLSAgICAvLyBGSVhNRTogV2lsbCBnbyBhd2F5IG9uY2Ugd2UgZG9u
J3QgdXNlIHRoZSBWZWN0b3IuCi0gICAgdm9pZCBhZGRDb2x1bW5SZWN0KGNvbnN0IEludFJlY3Qm
IHJlY3QpIHsgbV9jb2x1bW5SZWN0cy5hcHBlbmQocmVjdCk7IH0KLSAgICAKIHByaXZhdGU6CiAg
ICAgaW50IG1fZGVzaXJlZENvbHVtbldpZHRoOwogICAgIHVuc2lnbmVkIG1fZGVzaXJlZENvbHVt
bkNvdW50OwotICAgIFZlY3RvcjxJbnRSZWN0PiBtX2NvbHVtblJlY3RzOworICAgIAorICAgIHVu
c2lnbmVkIG1fY29sdW1uQ291bnQ7CisgICAgaW50IG1fY29sdW1uSGVpZ2h0OworICAgIGludCBt
X21pbmltdW1Db2x1bW5IZWlnaHQ7CisgICAgaW50IG1fZm9yY2VkQnJlYWtzOyAvLyBGSVhNRTog
V2Ugd2lsbCB1bHRpbWF0ZWx5IG5lZWQgdG8gY2FjaGUgd2F5IG1vcmUgaW5mb3JtYXRpb24gdG8g
YmFsYW5jZSBhcm91bmQgZm9yY2VkIGJyZWFrcyBwcm9wZXJseS4KKyAgICBpbnQgbV9tYXhpbXVt
RGlzdGFuY2VCZXR3ZWVuRm9yY2VkQnJlYWtzOworICAgIGludCBtX2ZvcmNlZEJyZWFrT2Zmc2V0
OwogfTsKIAogfQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0U3RhdGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmNwcAkocmV2aXNpb24gNjc2
MzkpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJMYXlvdXRT
dGF0ZS5oIgogCisjaW5jbHVkZSAiQ29sdW1uSW5mby5oIgogI2luY2x1ZGUgIlJlbmRlckFyZW5h
LmgiCiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIK
QEAgLTMzLDggKzM0LDkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1MYXlvdXRTdGF0ZTo6
TGF5b3V0U3RhdGUoTGF5b3V0U3RhdGUqIHByZXYsIFJlbmRlckJveCogcmVuZGVyZXIsIGNvbnN0
IEludFNpemUmIG9mZnNldCkKLSAgICA6IG1fbmV4dChwcmV2KQorTGF5b3V0U3RhdGU6OkxheW91
dFN0YXRlKExheW91dFN0YXRlKiBwcmV2LCBSZW5kZXJCb3gqIHJlbmRlcmVyLCBjb25zdCBJbnRT
aXplJiBvZmZzZXQsIGludCBwYWdlSGVpZ2h0LCBDb2x1bW5JbmZvKiBjb2xJbmZvKQorICAgIDog
bV9jb2x1bW5JbmZvKGNvbEluZm8pCisgICAgLCBtX25leHQocHJldikKICNpZm5kZWYgTkRFQlVH
CiAgICAgLCBtX3JlbmRlcmVyKHJlbmRlcmVyKQogI2VuZGlmCkBAIC00NSw0MyArNDcsNjcgQEAg
TGF5b3V0U3RhdGU6OkxheW91dFN0YXRlKExheW91dFN0YXRlKiBwcgogICAgIGlmIChmaXhlZCkg
ewogICAgICAgICAvLyBGSVhNRTogVGhpcyBkb2Vzbid0IHdvcmsgY29ycmVjdGx5IHdpdGggdHJh
bnNmb3Jtcy4KICAgICAgICAgRmxvYXRQb2ludCBmaXhlZE9mZnNldCA9IHJlbmRlcmVyLT52aWV3
KCktPmxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50KCksIHRydWUpOwotICAgICAgICBtX29mZnNl
dCA9IEludFNpemUoZml4ZWRPZmZzZXQueCgpLCBmaXhlZE9mZnNldC55KCkpICsgb2Zmc2V0Owor
ICAgICAgICBtX3BhaW50T2Zmc2V0ID0gSW50U2l6ZShmaXhlZE9mZnNldC54KCksIGZpeGVkT2Zm
c2V0LnkoKSkgKyBvZmZzZXQ7CiAgICAgfSBlbHNlCi0gICAgICAgIG1fb2Zmc2V0ID0gcHJldi0+
bV9vZmZzZXQgKyBvZmZzZXQ7CisgICAgICAgIG1fcGFpbnRPZmZzZXQgPSBwcmV2LT5tX3BhaW50
T2Zmc2V0ICsgb2Zmc2V0OwogCi0gICAgaWYgKHJlbmRlcmVyLT5pc1JlbFBvc2l0aW9uZWQoKSkg
ewotICAgICAgICBpZiAocmVuZGVyZXItPmhhc0xheWVyKCkpCi0gICAgICAgICAgICBtX29mZnNl
dCArPSByZW5kZXJlci0+bGF5ZXIoKS0+cmVsYXRpdmVQb3NpdGlvbk9mZnNldCgpOwotICAgIH0g
ZWxzZSBpZiAocmVuZGVyZXItPmlzUG9zaXRpb25lZCgpICYmICFmaXhlZCkgeworICAgIGlmIChy
ZW5kZXJlci0+aXNQb3NpdGlvbmVkKCkgJiYgIWZpeGVkKSB7CiAgICAgICAgIGlmIChSZW5kZXJP
YmplY3QqIGNvbnRhaW5lciA9IHJlbmRlcmVyLT5jb250YWluZXIoKSkgewogICAgICAgICAgICAg
aWYgKGNvbnRhaW5lci0+aXNSZWxQb3NpdGlvbmVkKCkgJiYgY29udGFpbmVyLT5pc1JlbmRlcklu
bGluZSgpKQotICAgICAgICAgICAgICAgIG1fb2Zmc2V0ICs9IHRvUmVuZGVySW5saW5lKGNvbnRh
aW5lciktPnJlbGF0aXZlUG9zaXRpb25lZElubGluZU9mZnNldChyZW5kZXJlcik7CisgICAgICAg
ICAgICAgICAgbV9wYWludE9mZnNldCArPSB0b1JlbmRlcklubGluZShjb250YWluZXIpLT5yZWxh
dGl2ZVBvc2l0aW9uZWRJbmxpbmVPZmZzZXQocmVuZGVyZXIpOwogICAgICAgICB9CiAgICAgfQog
CisgICAgbV9sYXlvdXRPZmZzZXQgPSBtX3BhaW50T2Zmc2V0OworCisgICAgaWYgKHJlbmRlcmVy
LT5pc1JlbFBvc2l0aW9uZWQoKSAmJiByZW5kZXJlci0+aGFzTGF5ZXIoKSkKKyAgICAgICAgbV9w
YWludE9mZnNldCArPSByZW5kZXJlci0+bGF5ZXIoKS0+cmVsYXRpdmVQb3NpdGlvbk9mZnNldCgp
OworCiAgICAgbV9jbGlwcGVkID0gIWZpeGVkICYmIHByZXYtPm1fY2xpcHBlZDsKICAgICBpZiAo
bV9jbGlwcGVkKQogICAgICAgICBtX2NsaXBSZWN0ID0gcHJldi0+bV9jbGlwUmVjdDsKIAogICAg
IGlmIChyZW5kZXJlci0+aGFzT3ZlcmZsb3dDbGlwKCkpIHsKICAgICAgICAgUmVuZGVyTGF5ZXIq
IGxheWVyID0gcmVuZGVyZXItPmxheWVyKCk7Ci0gICAgICAgIEludFJlY3QgY2xpcFJlY3QodG9Q
b2ludChtX29mZnNldCkgKyByZW5kZXJlci0+dmlldygpLT5sYXlvdXREZWx0YSgpLCBsYXllci0+
c2l6ZSgpKTsKKyAgICAgICAgSW50UmVjdCBjbGlwUmVjdCh0b1BvaW50KG1fcGFpbnRPZmZzZXQp
ICsgcmVuZGVyZXItPnZpZXcoKS0+bGF5b3V0RGVsdGEoKSwgbGF5ZXItPnNpemUoKSk7CiAgICAg
ICAgIGlmIChtX2NsaXBwZWQpCiAgICAgICAgICAgICBtX2NsaXBSZWN0LmludGVyc2VjdChjbGlw
UmVjdCk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgbV9jbGlwUmVjdCA9IGNsaXBSZWN0
OwogICAgICAgICAgICAgbV9jbGlwcGVkID0gdHJ1ZTsKICAgICAgICAgfQotICAgICAgICBtX29m
ZnNldCAtPSBsYXllci0+c2Nyb2xsZWRDb250ZW50T2Zmc2V0KCk7CisKKyAgICAgICAgbV9wYWlu
dE9mZnNldCAtPSBsYXllci0+c2Nyb2xsZWRDb250ZW50T2Zmc2V0KCk7CiAgICAgfQogCi0gICAg
bV9sYXlvdXREZWx0YSA9IG1fbmV4dC0+bV9sYXlvdXREZWx0YTsKKyAgICAvLyBJZiB3ZSBlc3Rh
Ymxpc2ggYSBuZXcgcGFnZSBoZWlnaHQsIHRoZW4gY2FjaGUgdGhlIG9mZnNldCB0byB0aGUgdG9w
IG9mIHRoZSBmaXJzdCBwYWdlLgorICAgIC8vIFdlIGNhbiBjb21wYXJlIHRoaXMgbGF0ZXIgb24g
dG8gZmlndXJlIG91dCB3aGF0IHBhcnQgb2YgdGhlIHBhZ2Ugd2UncmUgYWN0dWFsbHkgb24sCisg
ICAgaWYgKHBhZ2VIZWlnaHQgfHwgbV9jb2x1bW5JbmZvKSB7CisgICAgICAgIG1fcGFnZUhlaWdo
dCA9IHBhZ2VIZWlnaHQ7CisgICAgICAgIG1fcGFnZU9mZnNldCA9IEludFNpemUobV9sYXlvdXRP
ZmZzZXQud2lkdGgoKSArIHJlbmRlcmVyLT5ib3JkZXJMZWZ0KCkgKyByZW5kZXJlci0+cGFkZGlu
Z0xlZnQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2xheW91dE9mZnNldC5o
ZWlnaHQoKSArIHJlbmRlcmVyLT5ib3JkZXJUb3AoKSArIHJlbmRlcmVyLT5wYWRkaW5nVG9wKCkp
OworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIElmIHdlIGRvbid0IGVzdGFibGlzaCBhIG5ldyBw
YWdlIGhlaWdodCwgdGhlbiBwcm9wYWdhdGUgdGhlIG9sZCBwYWdlIGhlaWdodCBhbmQgb2Zmc2V0
IGRvd24uCisgICAgICAgIG1fcGFnZUhlaWdodCA9IG1fbmV4dC0+bV9wYWdlSGVpZ2h0OworICAg
ICAgICBtX3BhZ2VPZmZzZXQgPSBtX25leHQtPm1fcGFnZU9mZnNldDsKKyAgICAgICAgCisgICAg
ICAgIC8vIERpc2FibGUgcGFnaW5hdGlvbiBmb3Igb2JqZWN0cyB3ZSBkb24ndCBzdXBwb3J0LiAg
Rm9yIG5vdyB0aGlzIGluY2x1ZGVzIG92ZXJmbG93OnNjcm9sbC9hdXRvIGFuZCBpbmxpbmUgYmxv
Y2tzLgorICAgICAgICBpZiAocmVuZGVyZXItPmlzUmVwbGFjZWQoKSB8fCByZW5kZXJlci0+c2Ny
b2xsc092ZXJmbG93KCkpCisgICAgICAgICAgICBtX3BhZ2VIZWlnaHQgPSAwOworICAgIH0KKyAg
ICAKKyAgICBpZiAoIW1fY29sdW1uSW5mbykKKyAgICAgICAgbV9jb2x1bW5JbmZvID0gbV9uZXh0
LT5tX2NvbHVtbkluZm87CiAKKyAgICBtX2xheW91dERlbHRhID0gbV9uZXh0LT5tX2xheW91dERl
bHRhOworICAgIAogICAgIC8vIEZJWE1FOiA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTM0NDM+IEFwcGx5IGNvbnRyb2wgY2xpcCBpZiBwcmVzZW50LgogfQogCiBMYXlv
dXRTdGF0ZTo6TGF5b3V0U3RhdGUoUmVuZGVyT2JqZWN0KiByb290KQogICAgIDogbV9jbGlwcGVk
KGZhbHNlKQorICAgICwgbV9wYWdlSGVpZ2h0KDApCisgICAgLCBtX2NvbHVtbkluZm8oMCkKICAg
ICAsIG1fbmV4dCgwKQogI2lmbmRlZiBOREVCVUcKICAgICAsIG1fcmVuZGVyZXIocm9vdCkKQEAg
LTg5LDEzICsxMTUsMTMgQEAgTGF5b3V0U3RhdGU6OkxheW91dFN0YXRlKFJlbmRlck9iamVjdCog
cgogewogICAgIFJlbmRlck9iamVjdCogY29udGFpbmVyID0gcm9vdC0+Y29udGFpbmVyKCk7CiAg
ICAgRmxvYXRQb2ludCBhYnNDb250ZW50UG9pbnQgPSBjb250YWluZXItPmxvY2FsVG9BYnNvbHV0
ZShGbG9hdFBvaW50KCksIGZhbHNlLCB0cnVlKTsKLSAgICBtX29mZnNldCA9IEludFNpemUoYWJz
Q29udGVudFBvaW50LngoKSwgYWJzQ29udGVudFBvaW50LnkoKSk7CisgICAgbV9wYWludE9mZnNl
dCA9IEludFNpemUoYWJzQ29udGVudFBvaW50LngoKSwgYWJzQ29udGVudFBvaW50LnkoKSk7CiAK
ICAgICBpZiAoY29udGFpbmVyLT5oYXNPdmVyZmxvd0NsaXAoKSkgewogICAgICAgICBSZW5kZXJM
YXllciogbGF5ZXIgPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KGNvbnRhaW5lciktPmxheWVyKCk7
CiAgICAgICAgIG1fY2xpcHBlZCA9IHRydWU7Ci0gICAgICAgIG1fY2xpcFJlY3QgPSBJbnRSZWN0
KHRvUG9pbnQobV9vZmZzZXQpLCBsYXllci0+c2l6ZSgpKTsKLSAgICAgICAgbV9vZmZzZXQgLT0g
bGF5ZXItPnNjcm9sbGVkQ29udGVudE9mZnNldCgpOworICAgICAgICBtX2NsaXBSZWN0ID0gSW50
UmVjdCh0b1BvaW50KG1fcGFpbnRPZmZzZXQpLCBsYXllci0+c2l6ZSgpKTsKKyAgICAgICAgbV9w
YWludE9mZnNldCAtPSBsYXllci0+c2Nyb2xsZWRDb250ZW50T2Zmc2V0KCk7CiAgICAgfQogfQog
CkBAIC0xMjYsNCArMTUyLDIzIEBAIHZvaWQgTGF5b3V0U3RhdGU6Om9wZXJhdG9yIGRlbGV0ZSh2
b2lkKiAKICAgICAqKHNpemVfdCopcHRyID0gc3o7CiB9CiAKK3ZvaWQgTGF5b3V0U3RhdGU6OmNs
ZWFyUGFnaW5hdGlvbkluZm9ybWF0aW9uKCkKK3sKKyAgICBtX3BhZ2VIZWlnaHQgPSBtX25leHQt
Pm1fcGFnZUhlaWdodDsKKyAgICBtX3BhZ2VPZmZzZXQgPSBtX25leHQtPm1fcGFnZU9mZnNldDsK
KyAgICBtX2NvbHVtbkluZm8gPSBtX25leHQtPm1fY29sdW1uSW5mbzsKK30KKworaW50IExheW91
dFN0YXRlOjpwYWdlWShpbnQgY2hpbGRZKSBjb25zdAoreworICAgIHJldHVybiBtX2xheW91dE9m
ZnNldC5oZWlnaHQoKSArIGNoaWxkWSAtIG1fcGFnZU9mZnNldC5oZWlnaHQoKTsKK30KKwordm9p
ZCBMYXlvdXRTdGF0ZTo6YWRkRm9yY2VkQ29sdW1uQnJlYWsoaW50IGNoaWxkWSkKK3sKKyAgICBp
ZiAoIW1fY29sdW1uSW5mbyB8fCBtX2NvbHVtbkluZm8tPmNvbHVtbkhlaWdodCgpKQorICAgICAg
ICByZXR1cm47CisgICAgbV9jb2x1bW5JbmZvLT5hZGRGb3JjZWRCcmVhayhwYWdlWShjaGlsZFkp
KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcv
TGF5b3V0U3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRTdGF0
ZS5oCShyZXZpc2lvbiA2NzYzOSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL0xheW91dFN0YXRlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CitjbGFzcyBDb2x1bW5JbmZvOwogY2xhc3MgUmVuZGVyQXJlbmE7CiBjbGFzcyBSZW5kZXJCb3g7
CiBjbGFzcyBSZW5kZXJPYmplY3Q7CkBAIC00MCw2ICs0MSw4IEBAIGNsYXNzIExheW91dFN0YXRl
IDogcHVibGljIE5vbmNvcHlhYmxlIHsKIHB1YmxpYzoKICAgICBMYXlvdXRTdGF0ZSgpCiAgICAg
ICAgIDogbV9jbGlwcGVkKGZhbHNlKQorICAgICAgICAsIG1fcGFnZUhlaWdodCgwKQorICAgICAg
ICAsIG1fY29sdW1uSW5mbygwKQogICAgICAgICAsIG1fbmV4dCgwKQogI2lmbmRlZiBOREVCVUcK
ICAgICAgICAgLCBtX3JlbmRlcmVyKDApCkBAIC00Nyw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICB7
CiAgICAgfQogCi0gICAgTGF5b3V0U3RhdGUoTGF5b3V0U3RhdGUqLCBSZW5kZXJCb3gqLCBjb25z
dCBJbnRTaXplJiBvZmZzZXQpOworICAgIExheW91dFN0YXRlKExheW91dFN0YXRlKiwgUmVuZGVy
Qm94KiwgY29uc3QgSW50U2l6ZSYgb2Zmc2V0LCBpbnQgcGFnZUhlaWdodCwgQ29sdW1uSW5mbyop
OwogICAgIExheW91dFN0YXRlKFJlbmRlck9iamVjdCopOwogCiAgICAgdm9pZCBkZXN0cm95KFJl
bmRlckFyZW5hKik7CkBAIC01OCw2ICs2MSwxMiBAQCBwdWJsaWM6CiAgICAgLy8gT3ZlcnJpZGRl
biB0byBwcmV2ZW50IHRoZSBub3JtYWwgZGVsZXRlIGZyb20gYmVpbmcgY2FsbGVkLgogICAgIHZv
aWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQqLCBzaXplX3QpOwogCisgICAgdm9pZCBjbGVhclBhZ2lu
YXRpb25JbmZvcm1hdGlvbigpOworICAgIGJvb2wgcGFnaW5hdGluZ0NvbHVtbnMoKSBjb25zdCB7
IHJldHVybiBtX2NvbHVtbkluZm87IH0KKyAgICBib29sIHBhZ2luYXRlZCgpIGNvbnN0IHsgcmV0
dXJuIG1fcGFnZUhlaWdodCB8fCBtX2NvbHVtbkluZm87IH0KKyAgICBpbnQgcGFnZVkoaW50IGNo
aWxkWSkgY29uc3Q7CisgICAgdm9pZCBhZGRGb3JjZWRDb2x1bW5CcmVhayhpbnQgY2hpbGRZKTsK
KyAgICAKIHByaXZhdGU6CiAgICAgLy8gVGhlIG5vcm1hbCBvcGVyYXRvciBuZXcgaXMgZGlzYWxs
b3dlZC4KICAgICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90KSB0aHJvdygpOwpAQCAtNjUsMTAg
Kzc0LDE2IEBAIHByaXZhdGU6CiBwdWJsaWM6CiAgICAgYm9vbCBtX2NsaXBwZWQ7CiAgICAgSW50
UmVjdCBtX2NsaXBSZWN0OwotICAgIEludFNpemUgbV9vZmZzZXQ7ICAgICAgIC8vIHgveSBvZmZz
ZXQgZnJvbSBjb250YWluZXIuCi0gICAgSW50U2l6ZSBtX2xheW91dERlbHRhOyAgLy8gVHJhbnNp
ZW50IG9mZnNldCBmcm9tIHRoZSBmaW5hbCBwb3NpdGlvbiBvZiB0aGUgb2JqZWN0Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gdXNlZCB0byBlbnN1cmUgdGhhdCByZXBhaW50cyBoYXBw
ZW4gaW4gdGhlIGNvcnJlY3QgcGxhY2UuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
VGhpcyBpcyBhIHRvdGFsIGRlbHRhIGFjY3VtdWxhdGVkIGZyb20gdGhlIHJvb3QuCisgICAgSW50
U2l6ZSBtX3BhaW50T2Zmc2V0OyAvLyB4L3kgb2Zmc2V0IGZyb20gY29udGFpbmVyLiAgSW5jbHVk
ZXMgcmVsYXRpdmUgcG9zaXRpb25pbmcgYW5kIHNjcm9sbCBvZmZzZXRzLgorICAgIEludFNpemUg
bV9sYXlvdXRPZmZzZXQ7IC8vIHgveSBvZmZzZXQgZnJvbSBjb250YWluZXIuICBEb2VzIG5vdCBp
bmNsdWRlIHJlbGF0aXZlIHBvc2l0aW9uaW5nIG9yIHNjcm9sbCBvZmZzZXRzLgorICAgIEludFNp
emUgbV9sYXlvdXREZWx0YTsgLy8gVHJhbnNpZW50IG9mZnNldCBmcm9tIHRoZSBmaW5hbCBwb3Np
dGlvbiBvZiB0aGUgb2JqZWN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB1c2VkIHRv
IGVuc3VyZSB0aGF0IHJlcGFpbnRzIGhhcHBlbiBpbiB0aGUgY29ycmVjdCBwbGFjZS4KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSB0b3RhbCBkZWx0YSBhY2N1bXVsYXRl
ZCBmcm9tIHRoZSByb290LgorCisgICAgaW50IG1fcGFnZUhlaWdodDsgLy8gVGhlIGN1cnJlbnQg
cGFnZSBoZWlnaHQgZm9yIHRoZSBwYWdpbmF0aW9uIG1vZGVsIHRoYXQgZW5jbG9zZXMgdXMuCisg
ICAgSW50U2l6ZSBtX3BhZ2VPZmZzZXQ7IC8vIFRoZSBvZmZzZXQgb2YgdGhlIHN0YXJ0IG9mIHRo
ZSBmaXJzdCBwYWdlIGluIHRoZSBuZWFyZXN0IGVuY2xvc2luZyBwYWdpbmF0aW9uIG1vZGVsLgor
ICAgIENvbHVtbkluZm8qIG1fY29sdW1uSW5mbzsgLy8gSWYgdGhlIGVuY2xvc2luZyBwYWdpbmF0
aW9uIG1vZGVsIGlzIGEgY29sdW1uIG1vZGVsLCB0aGVuIHRoaXMgd2lsbCBzdG9yZSBjb2x1bW4g
aW5mb3JtYXRpb24gZm9yIGVhc3kgcmV0cmlldmFsL21hbmlwdWxhdGlvbi4KKwogICAgIExheW91
dFN0YXRlKiBtX25leHQ7CiAjaWZuZGVmIE5ERUJVRwogICAgIFJlbmRlck9iamVjdCogbV9yZW5k
ZXJlcjsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHJldmlzaW9uIDY3NjM5KQor
KysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTQsNyArMTE0LDcgQEAgUmVuZGVyQmxvY2s6OlJlbmRlckJsb2NrKE5vZGUqIG5vZGUpCiAgICAg
ICAsIG1fZmxvYXRpbmdPYmplY3RzKDApCiAgICAgICAsIG1fcG9zaXRpb25lZE9iamVjdHMoMCkK
ICAgICAgICwgbV9jb250aW51YXRpb24oMCkKLSAgICAgICwgbV9tYXhNYXJnaW4oMCkKKyAgICAg
ICwgbV9yYXJlRGF0YSgwKQogICAgICAgLCBtX2xpbmVIZWlnaHQoLTEpCiB7CiAgICAgc2V0Q2hp
bGRyZW5JbmxpbmUodHJ1ZSk7CkBAIC0xMjQsNyArMTI0LDcgQEAgUmVuZGVyQmxvY2s6On5SZW5k
ZXJCbG9jaygpCiB7CiAgICAgZGVsZXRlIG1fZmxvYXRpbmdPYmplY3RzOwogICAgIGRlbGV0ZSBt
X3Bvc2l0aW9uZWRPYmplY3RzOwotICAgIGRlbGV0ZSBtX21heE1hcmdpbjsKKyAgICBkZWxldGUg
bV9yYXJlRGF0YTsKICAgICAKICAgICBpZiAoaGFzQ29sdW1ucygpKQogICAgICAgICBkZWxldGUg
Z0NvbHVtbkluZm9NYXAtPnRha2UodGhpcyk7CkBAIC0xMTEyLDcgKzExMTIsNyBAQCB2b2lkIFJl
bmRlckJsb2NrOjpsYXlvdXQoKQogICAgICAgICBjbGVhckxheW91dE92ZXJmbG93KCk7CiB9CiAK
LXZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbikKK3Zv
aWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgaW50IHBh
Z2VIZWlnaHQpCiB7CiAgICAgQVNTRVJUKG5lZWRzTGF5b3V0KCkpOwogCkBAIC0xMTIyLDkgKzEx
MjIsNiBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayhib29sIHJlbGF5CiAgICAgaWYg
KCFyZWxheW91dENoaWxkcmVuICYmIGxheW91dE9ubHlQb3NpdGlvbmVkT2JqZWN0cygpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBMYXlvdXRSZXBhaW50ZXIgcmVwYWludGVyKCp0aGlzLCBtX2V2
ZXJIYWRMYXlvdXQgJiYgY2hlY2tGb3JSZXBhaW50RHVyaW5nTGF5b3V0KCkpOwotICAgIExheW91
dFN0YXRlTWFpbnRhaW5lciBzdGF0ZVB1c2hlcih2aWV3KCksIHRoaXMsIEludFNpemUoeCgpLCB5
KCkpLCBoYXNDb2x1bW5zKCkgfHwgaGFzVHJhbnNmb3JtKCkgfHwgaGFzUmVmbGVjdGlvbigpKTsK
LQogICAgIGludCBvbGRXaWR0aCA9IHdpZHRoKCk7CiAgICAgaW50IG9sZENvbHVtbldpZHRoID0g
ZGVzaXJlZENvbHVtbldpZHRoKCk7CiAKQEAgLTExNDAsNiArMTEzNywzMSBAQCB2b2lkIFJlbmRl
ckJsb2NrOjpsYXlvdXRCbG9jayhib29sIHJlbGF5CiAKICAgICBpbnQgcHJldmlvdXNIZWlnaHQg
PSBoZWlnaHQoKTsKICAgICBzZXRIZWlnaHQoMCk7CisgICAgYm9vbCBoYXNTcGVjaWZpZWRQYWdl
SGVpZ2h0ID0gZmFsc2U7CisgICAgQ29sdW1uSW5mbyogY29sSW5mbyA9IGNvbHVtbkluZm8oKTsK
KyAgICBpZiAoaGFzQ29sdW1ucygpKSB7CisgICAgICAgIGlmICghcGFnZUhlaWdodCkgeworICAg
ICAgICAgICAgLy8gV2UgbmVlZCB0byBnbyBhaGVhZCBhbmQgc2V0IG91ciBleHBsaWNpdCBwYWdl
IGhlaWdodCBpZiBvbmUgZXhpc3RzLCBzbyB0aGF0IHdlIGNhbgorICAgICAgICAgICAgLy8gYXZv
aWQgZG9pbmcgdHdvIGxheW91dCBwYXNzZXMuCisgICAgICAgICAgICBjYWxjSGVpZ2h0KCk7Cisg
ICAgICAgICAgICBpbnQgY29sdW1uSGVpZ2h0ID0gY29udGVudEhlaWdodCgpOworICAgICAgICAg
ICAgaWYgKGNvbHVtbkhlaWdodCA+IDApIHsKKyAgICAgICAgICAgICAgICBwYWdlSGVpZ2h0ID0g
Y29sdW1uSGVpZ2h0OworICAgICAgICAgICAgICAgIGhhc1NwZWNpZmllZFBhZ2VIZWlnaHQgPSB0
cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc2V0SGVpZ2h0KDApOworICAgICAgICB9
CisgICAgICAgIGlmIChjb2xJbmZvLT5jb2x1bW5IZWlnaHQoKSAhPSBwYWdlSGVpZ2h0ICYmIG1f
ZXZlckhhZExheW91dCkgeworICAgICAgICAgICAgY29sSW5mby0+c2V0Q29sdW1uSGVpZ2h0KHBh
Z2VIZWlnaHQpOworICAgICAgICAgICAgbWFya0Rlc2NlbmRhbnRCbG9ja3NBbmRMaW5lc0Zvckxh
eW91dCgpOyAvLyBXZSBuZWVkIHRvIGRpcnR5IGFsbCBkZXNjZW5kYW50IGJsb2NrcyBhbmQgbGlu
ZXMsIHNpbmNlIHRoZSBjb2x1bW4gaGVpZ2h0IGlzIGRpZmZlcmVudCBub3cuCisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIGlmICghaGFzU3BlY2lmaWVkUGFnZUhlaWdodCAmJiAhcGFnZUhl
aWdodCkKKyAgICAgICAgICAgIGNvbEluZm8tPmNsZWFyRm9yY2VkQnJlYWtzKCk7CisgICAgfQor
CisgICAgTGF5b3V0UmVwYWludGVyIHJlcGFpbnRlcigqdGhpcywgbV9ldmVySGFkTGF5b3V0ICYm
IGNoZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgpKTsKKyAgICBMYXlvdXRTdGF0ZU1haW50YWlu
ZXIgc3RhdGVQdXNoZXIodmlldygpLCB0aGlzLCBJbnRTaXplKHgoKSwgeSgpKSwgaGFzQ29sdW1u
cygpIHx8IGhhc1RyYW5zZm9ybSgpIHx8IGhhc1JlZmxlY3Rpb24oKSwgcGFnZUhlaWdodCwgY29s
SW5mbyk7CiAKICAgICAvLyBXZSB1c2UgZm91ciB2YWx1ZXMsIG1heFRvcFBvcywgbWF4VG9wTmVn
LCBtYXhCb3R0b21Qb3MsIGFuZCBtYXhCb3R0b21OZWcsIHRvIHRyYWNrCiAgICAgLy8gb3VyIGN1
cnJlbnQgbWF4aW1hbCBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgbWFyZ2lucy4gIFRoZXNlIHZhbHVl
cyBhcmUgdXNlZCB3aGVuIHdlCkBAIC0xMTU0LDcgKzExNzYsNyBAQCB2b2lkIFJlbmRlckJsb2Nr
OjpsYXlvdXRCbG9jayhib29sIHJlbGF5CiAgICAgYm9vbCBpc0NlbGwgPSBpc1RhYmxlQ2VsbCgp
OwogICAgIGlmICghaXNDZWxsKSB7CiAgICAgICAgIGluaXRNYXhNYXJnaW5WYWx1ZXMoKTsKLQor
ICAgICAgICAKICAgICAgICAgc2V0VG9wTWFyZ2luUXVpcmsoc3R5bGUoKS0+bWFyZ2luVG9wKCku
cXVpcmsoKSk7CiAgICAgICAgIHNldEJvdHRvbU1hcmdpblF1aXJrKHN0eWxlKCktPm1hcmdpbkJv
dHRvbSgpLnF1aXJrKCkpOwogCkBAIC0xMTY0LDYgKzExODYsOCBAQCB2b2lkIFJlbmRlckJsb2Nr
OjpsYXlvdXRCbG9jayhib29sIHJlbGF5CiAgICAgICAgICAgICAvLyBhIGJvdHRvbSBtYXJnaW4u
CiAgICAgICAgICAgICBzZXRNYXhCb3R0b21NYXJnaW5zKDAsIDApOwogICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBzZXRQYWdpbmF0aW9uU3RydXQoMCk7CiAgICAgfQogCiAgICAgLy8gRm9y
IG92ZXJmbG93OnNjcm9sbCBibG9ja3MsIGVuc3VyZSB3ZSBoYXZlIGJvdGggc2Nyb2xsYmFycyBp
biBwbGFjZSBhbHdheXMuCkBAIC0xMTg5LDEwICsxMjEzLDkgQEAgdm9pZCBSZW5kZXJCbG9jazo6
bGF5b3V0QmxvY2soYm9vbCByZWxheQogICAgIGlmIChmbG9hdEJvdHRvbSgpID4gKGhlaWdodCgp
IC0gdG9BZGQpICYmIGV4cGFuZHNUb0VuY2xvc2VPdmVyaGFuZ2luZ0Zsb2F0cygpKQogICAgICAg
ICBzZXRIZWlnaHQoZmxvYXRCb3R0b20oKSArIHRvQWRkKTsKICAgICAKLSAgICAvLyBOb3cgbGF5
IG91dCBvdXIgY29sdW1ucyB3aXRoaW4gdGhpcyBpbnRyaW5zaWMgaGVpZ2h0LCBzaW5jZSB0aGV5
IGNhbiBzbGlnaHRseSBhZmZlY3QgdGhlIGludHJpbnNpYyBoZWlnaHQgYXMKLSAgICAvLyB3ZSBh
ZGp1c3QgZm9yIGNsZWFuIGNvbHVtbiBicmVha3MuCi0gICAgaW50IHNpbmdsZUNvbHVtbkJvdHRv
bSA9IGxheW91dENvbHVtbnMoKTsKLQorICAgIGlmIChsYXlvdXRDb2x1bW5zKGhhc1NwZWNpZmll
ZFBhZ2VIZWlnaHQsIHBhZ2VIZWlnaHQsIHN0YXRlUHVzaGVyKSkKKyAgICAgICAgcmV0dXJuOwor
IAogICAgIC8vIENhbGN1bGF0ZSBvdXIgbmV3IGhlaWdodC4KICAgICBpbnQgb2xkSGVpZ2h0ID0g
aGVpZ2h0KCk7CiAgICAgY2FsY0hlaWdodCgpOwpAQCAtMTIwNywyMSArMTIzMCwxOCBAQCB2b2lk
IFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayhib29sIHJlbGF5CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBXZSBoYXZlIHRv
IHJlYmFsYW5jZSBjb2x1bW5zIHRvIHRoZSBuZXcgaGVpZ2h0LgotICAgICAgICBsYXlvdXRDb2x1
bW5zKHNpbmdsZUNvbHVtbkJvdHRvbSk7CiAgICAgfQogCiAgICAgaWYgKHByZXZpb3VzSGVpZ2h0
ICE9IGhlaWdodCgpKQogICAgICAgICByZWxheW91dENoaWxkcmVuID0gdHJ1ZTsKIAotICAgIC8v
IFRoaXMgY2hlY2sgaXMgZGVzaWduZWQgdG8gY2F0Y2ggYW55b25lCi0gICAgLy8gd2hvIHdhc24n
dCBnb2luZyB0byBwcm9wYWdhdGUgZmxvYXQgaW5mb3JtYXRpb24gdXAgdG8gdGhlIHBhcmVudCBh
bmQgeWV0IGNvdWxkIHBvdGVudGlhbGx5IGJlIHBhaW50ZWQgYnkgaXRzIGFuY2VzdG9yLgotICAg
IGlmIChpc1Jvb3QoKSB8fCBleHBhbmRzVG9FbmNsb3NlT3ZlcmhhbmdpbmdGbG9hdHMoKSkKLSAg
ICAgICAgYWRkT3ZlcmZsb3dGcm9tRmxvYXRzKCk7Ci0KICAgICAvLyBBZGQgb3ZlcmZsb3cgZnJv
bSBjaGlsZHJlbiAodW5sZXNzIHdlJ3JlIG11bHRpLWNvbHVtbiwgc2luY2UgaW4gdGhhdCBjYXNl
IGFsbCBvdXIgY2hpbGQgb3ZlcmZsb3cgaXMgY2xpcHBlZCBhbnl3YXkpLgogICAgIGlmICghaGFz
Q29sdW1ucygpKSB7CisgICAgICAgIC8vIFRoaXMgY2hlY2sgaXMgZGVzaWduZWQgdG8gY2F0Y2gg
YW55b25lCisgICAgICAgIC8vIHdobyB3YXNuJ3QgZ29pbmcgdG8gcHJvcGFnYXRlIGZsb2F0IGlu
Zm9ybWF0aW9uIHVwIHRvIHRoZSBwYXJlbnQgYW5kIHlldCBjb3VsZCBwb3RlbnRpYWxseSBiZSBw
YWludGVkIGJ5IGl0cyBhbmNlc3Rvci4KKyAgICAgICAgaWYgKGlzUm9vdCgpIHx8IGV4cGFuZHNU
b0VuY2xvc2VPdmVyaGFuZ2luZ0Zsb2F0cygpKQorICAgICAgICAgICAgYWRkT3ZlcmZsb3dGcm9t
RmxvYXRzKCk7CisKICAgICAgICAgaWYgKGNoaWxkcmVuSW5saW5lKCkpCiAgICAgICAgICAgICBh
ZGRPdmVyZmxvd0Zyb21JbmxpbmVDaGlsZHJlbigpOwogICAgICAgICBlbHNlCkBAIC0xMjM3LDYg
KzEyNTcsOSBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayhib29sIHJlbGF5CiAgICAg
CiAgICAgc3RhdGVQdXNoZXIucG9wKCk7CiAKKyAgICBpZiAodmlldygpLT5sYXlvdXRTdGF0ZSgp
LT5tX3BhZ2VIZWlnaHQpCisgICAgICAgIHNldFBhZ2VZKHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+
cGFnZVkoeSgpKSk7CisKICAgICAvLyBVcGRhdGUgb3VyIHNjcm9sbCBpbmZvcm1hdGlvbiBpZiB3
ZSdyZSBvdmVyZmxvdzphdXRvL3Njcm9sbC9oaWRkZW4gbm93IHRoYXQgd2Uga25vdyBpZgogICAg
IC8vIHdlIG92ZXJmbG93IG9yIG5vdC4KICAgICB1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQo
KTsKQEAgLTE0ODUsNyArMTUwOCw4IEBAIGludCBSZW5kZXJCbG9jazo6Y29sbGFwc2VNYXJnaW5z
KFJlbmRlckIKICAgICBpZiAobWFyZ2luSW5mby5xdWlya0NvbnRhaW5lcigpICYmIG1hcmdpbklu
Zm8uYXRUb3BPZkJsb2NrKCkgJiYgKHBvc1RvcCAtIG5lZ1RvcCkpCiAgICAgICAgIG1hcmdpbklu
Zm8uc2V0VG9wUXVpcmsodG9wUXVpcmspOwogCi0gICAgaW50IHlwb3MgPSBoZWlnaHQoKTsKKyAg
ICBpbnQgYmVmb3JlQ29sbGFwc2VZID0gaGVpZ2h0KCk7CisgICAgaW50IHlwb3MgPSBiZWZvcmVD
b2xsYXBzZVk7CiAgICAgaWYgKGNoaWxkLT5pc1NlbGZDb2xsYXBzaW5nQmxvY2soKSkgewogICAg
ICAgICAvLyBUaGlzIGNoaWxkIGhhcyBubyBoZWlnaHQuICBXZSBuZWVkIHRvIGNvbXB1dGUgb3Vy
CiAgICAgICAgIC8vIHBvc2l0aW9uIGJlZm9yZSB3ZSBjb2xsYXBzZSB0aGUgY2hpbGQncyBtYXJn
aW5zIHRvZ2V0aGVyLApAQCAtMTUyNyw2ICsxNTUxLDE0IEBAIGludCBSZW5kZXJCbG9jazo6Y29s
bGFwc2VNYXJnaW5zKFJlbmRlckIKICAgICAgICAgICAgIG1hcmdpbkluZm8uc2V0Qm90dG9tUXVp
cmsoY2hpbGQtPmlzQm90dG9tTWFyZ2luUXVpcmsoKSB8fCBzdHlsZSgpLT5tYXJnaW5Cb3R0b21D
b2xsYXBzZSgpID09IE1ESVNDQVJEKTsKICAgICB9CiAgICAgCisgICAgLy8gSWYgbWFyZ2lucyB3
b3VsZCBwdWxsIHVzIHBhc3QgdGhlIHRvcCBvZiB0aGUgbmV4dCBwYWdlLCB0aGVuIHdlIG5lZWQg
dG8gcHVsbCBiYWNrIGFuZCBwcmV0ZW5kIGxpa2UgdGhlIG1hcmdpbnMKKyAgICAvLyBjb2xsYXBz
ZWQgaW50byB0aGUgcGFnZSBlZGdlLgorICAgIGJvb2wgcGFnaW5hdGVkID0gdmlldygpLT5sYXlv
dXRTdGF0ZSgpLT5wYWdpbmF0ZWQoKTsKKyAgICBpZiAocGFnaW5hdGVkICYmIHlwb3MgPiBiZWZv
cmVDb2xsYXBzZVkpIHsKKyAgICAgICAgaW50IG9sZFkgPSB5cG9zOworICAgICAgICB5cG9zID0g
bWluKHlwb3MsIG5leHRQYWdlVG9wKGJlZm9yZUNvbGxhcHNlWSkpOworICAgICAgICBzZXRIZWln
aHQoaGVpZ2h0KCkgKyAoeXBvcyAtIG9sZFkpKTsKKyAgICB9CiAgICAgcmV0dXJuIHlwb3M7CiB9
CiAKQEAgLTE1ODYsNyArMTYxOCwyNyBAQCBpbnQgUmVuZGVyQmxvY2s6OmVzdGltYXRlVmVydGlj
YWxQb3NpdGlvCiAgICAgICAgIGludCBjaGlsZE1hcmdpblRvcCA9IGNoaWxkLT5zZWxmTmVlZHNM
YXlvdXQoKSA/IGNoaWxkLT5tYXJnaW5Ub3AoKSA6IGNoaWxkLT5jb2xsYXBzZWRNYXJnaW5Ub3Ao
KTsKICAgICAgICAgeVBvc0VzdGltYXRlICs9IG1heChtYXJnaW5JbmZvLm1hcmdpbigpLCBjaGls
ZE1hcmdpblRvcCk7CiAgICAgfQorICAgIAorICAgIGJvb2wgcGFnaW5hdGVkID0gdmlldygpLT5s
YXlvdXRTdGF0ZSgpLT5wYWdpbmF0ZWQoKTsKKworICAgIC8vIEFkanVzdCB5UG9zRXN0aW1hdGUg
ZG93biB0byB0aGUgbmV4dCBwYWdlIGlmIHRoZSBtYXJnaW5zIGFyZSBzbyBsYXJnZSB0aGF0IHdl
IGRvbid0IGZpdCBvbiB0aGUgY3VycmVudAorICAgIC8vIHBhZ2UuCisgICAgaWYgKHBhZ2luYXRl
ZCAmJiB5UG9zRXN0aW1hdGUgPiBoZWlnaHQoKSkKKyAgICAgICAgeVBvc0VzdGltYXRlID0gbWlu
KHlQb3NFc3RpbWF0ZSwgbmV4dFBhZ2VUb3AoaGVpZ2h0KCkpKTsKKwogICAgIHlQb3NFc3RpbWF0
ZSArPSBnZXRDbGVhckRlbHRhKGNoaWxkLCB5UG9zRXN0aW1hdGUpOworICAgIAorICAgIGlmIChw
YWdpbmF0ZWQpIHsKKyAgICAgICAgLy8gSWYgdGhlIG9iamVjdCBoYXMgYSBwYWdlIG9yIGNvbHVt
biBicmVhayB2YWx1ZSBvZiAiYmVmb3JlIiwgdGhlbiB3ZSBzaG91bGQgc2hpZnQgdG8gdGhlIHRv
cCBvZiB0aGUgbmV4dCBwYWdlLgorICAgICAgICB5UG9zRXN0aW1hdGUgPSBhcHBseUJlZm9yZUJy
ZWFrKGNoaWxkLCB5UG9zRXN0aW1hdGUpOworICAgIAorICAgICAgICAvLyBGb3IgcmVwbGFjZWQg
ZWxlbWVudHMgYW5kIHNjcm9sbGVkIGVsZW1lbnRzLCB3ZSB3YW50IHRvIHNoaWZ0IHRoZW0gdG8g
dGhlIG5leHQgcGFnZSBpZiB0aGV5IGRvbid0IGZpdCBvbiB0aGUgY3VycmVudCBvbmUuCisgICAg
ICAgIHlQb3NFc3RpbWF0ZSA9IGFkanVzdEZvclVuc3BsaXR0YWJsZUNoaWxkKGNoaWxkLCB5UG9z
RXN0aW1hdGUpOworICAgICAgICAKKyAgICAgICAgaWYgKCFjaGlsZC0+c2VsZk5lZWRzTGF5b3V0
KCkgJiYgY2hpbGQtPmlzUmVuZGVyQmxvY2soKSkKKyAgICAgICAgICAgIHlQb3NFc3RpbWF0ZSAr
PSB0b1JlbmRlckJsb2NrKGNoaWxkKS0+cGFnaW5hdGlvblN0cnV0KCk7CisgICAgfQorCiAgICAg
cmV0dXJuIHlQb3NFc3RpbWF0ZTsKIH0KIApAQCAtMTc3Niw4ICsxODI4LDkgQEAgdm9pZCBSZW5k
ZXJCbG9jazo6bGF5b3V0QmxvY2tDaGlsZChSZW5kZQogICAgIHZpZXcoKS0+YWRkTGF5b3V0RGVs
dGEoSW50U2l6ZSgwLCBjaGlsZC0+eSgpIC0geVBvc0VzdGltYXRlKSk7CiAgICAgY2hpbGQtPnNl
dExvY2F0aW9uKGNoaWxkLT54KCksIHlQb3NFc3RpbWF0ZSk7CiAKKyAgICBSZW5kZXJCbG9jayog
Y2hpbGRSZW5kZXJCbG9jayA9IGNoaWxkLT5pc1JlbmRlckJsb2NrKCkgPyB0b1JlbmRlckJsb2Nr
KGNoaWxkKSA6IDA7CiAgICAgYm9vbCBtYXJrRGVzY2VuZGFudHNXaXRoRmxvYXRzID0gZmFsc2U7
Ci0gICAgaWYgKHlQb3NFc3RpbWF0ZSAhPSBvbGRSZWN0LnkoKSAmJiAhY2hpbGQtPmF2b2lkc0Zs
b2F0cygpICYmIGNoaWxkLT5pc0Jsb2NrRmxvdygpICYmIHRvUmVuZGVyQmxvY2soY2hpbGQpLT5j
b250YWluc0Zsb2F0cygpKQorICAgIGlmICh5UG9zRXN0aW1hdGUgIT0gb2xkUmVjdC55KCkgJiYg
IWNoaWxkLT5hdm9pZHNGbG9hdHMoKSAmJiBjaGlsZFJlbmRlckJsb2NrICYmIGNoaWxkUmVuZGVy
QmxvY2stPmNvbnRhaW5zRmxvYXRzKCkpCiAgICAgICAgIG1hcmtEZXNjZW5kYW50c1dpdGhGbG9h
dHMgPSB0cnVlOwogICAgIGVsc2UgaWYgKCFjaGlsZC0+YXZvaWRzRmxvYXRzKCkgfHwgY2hpbGQt
PnNocmlua1RvQXZvaWRGbG9hdHMoKSkgewogICAgICAgICAvLyBJZiBhbiBlbGVtZW50IG1pZ2h0
IGJlIGFmZmVjdGVkIGJ5IHRoZSBwcmVzZW5jZSBvZiBmbG9hdHMsIHRoZW4gYWx3YXlzIG1hcmsg
aXQgZm9yCkBAIC0xNzg3LDE4ICsxODQwLDI0IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJs
b2NrQ2hpbGQoUmVuZGUKICAgICAgICAgICAgIG1hcmtEZXNjZW5kYW50c1dpdGhGbG9hdHMgPSB0
cnVlOwogICAgIH0KIAotICAgIGlmIChjaGlsZC0+aXNSZW5kZXJCbG9jaygpKSB7CisgICAgaWYg
KGNoaWxkUmVuZGVyQmxvY2spIHsKICAgICAgICAgaWYgKG1hcmtEZXNjZW5kYW50c1dpdGhGbG9h
dHMpCi0gICAgICAgICAgICB0b1JlbmRlckJsb2NrKGNoaWxkKS0+bWFya0FsbERlc2NlbmRhbnRz
V2l0aEZsb2F0c0ZvckxheW91dCgpOwotCisgICAgICAgICAgICBjaGlsZFJlbmRlckJsb2NrLT5t
YXJrQWxsRGVzY2VuZGFudHNXaXRoRmxvYXRzRm9yTGF5b3V0KCk7CiAgICAgICAgIHByZXZpb3Vz
RmxvYXRCb3R0b20gPSBtYXgocHJldmlvdXNGbG9hdEJvdHRvbSwgb2xkUmVjdC55KCkgKyB0b1Jl
bmRlckJsb2NrKGNoaWxkKS0+ZmxvYXRCb3R0b20oKSk7CiAgICAgfQogCisgICAgYm9vbCBwYWdp
bmF0ZWQgPSB2aWV3KCktPmxheW91dFN0YXRlKCktPnBhZ2luYXRlZCgpOworICAgIGlmICghY2hp
bGQtPm5lZWRzTGF5b3V0KCkgJiYgcGFnaW5hdGVkICYmIHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+
bV9wYWdlSGVpZ2h0ICYmIGNoaWxkUmVuZGVyQmxvY2sgJiYgdmlldygpLT5sYXlvdXRTdGF0ZSgp
LT5wYWdlWShjaGlsZC0+eSgpKSAhPSBjaGlsZFJlbmRlckJsb2NrLT5wYWdlWSgpKQorICAgICAg
ICBjaGlsZFJlbmRlckJsb2NrLT5zZXRDaGlsZE5lZWRzTGF5b3V0KHRydWUsIGZhbHNlKTsKKwog
ICAgIGJvb2wgY2hpbGRIYWRMYXlvdXQgPSBjaGlsZC0+bV9ldmVySGFkTGF5b3V0OwogICAgIGJv
b2wgY2hpbGROZWVkZWRMYXlvdXQgPSBjaGlsZC0+bmVlZHNMYXlvdXQoKTsKICAgICBpZiAoY2hp
bGROZWVkZWRMYXlvdXQpCiAgICAgICAgIGNoaWxkLT5sYXlvdXQoKTsKIAorICAgIC8vIENhY2hl
IGlmIHdlIGFyZSBhdCB0aGUgdG9wIG9mIHRoZSBibG9jayByaWdodCBub3cuCisgICAgYm9vbCBh
dFRvcE9mQmxvY2sgPSBtYXJnaW5JbmZvLmF0VG9wT2ZCbG9jaygpOworCiAgICAgLy8gTm93IGRl
dGVybWluZSB0aGUgY29ycmVjdCB5cG9zIGJhc2VkIG9mZiBleGFtaW5hdGlvbiBvZiBjb2xsYXBz
aW5nIG1hcmdpbgogICAgIC8vIHZhbHVlcy4KICAgICBpbnQgeUJlZm9yZUNsZWFyID0gY29sbGFw
c2VNYXJnaW5zKGNoaWxkLCBtYXJnaW5JbmZvKTsKQEAgLTE4MDYsNiArMTg2NSwzMiBAQCB2b2lk
IFJlbmRlckJsb2NrOjpsYXlvdXRCbG9ja0NoaWxkKFJlbmRlCiAgICAgLy8gTm93IGNoZWNrIGZv
ciBjbGVhci4KICAgICBpbnQgeUFmdGVyQ2xlYXIgPSBjbGVhckZsb2F0c0lmTmVlZGVkKGNoaWxk
LCBtYXJnaW5JbmZvLCBvbGRUb3BQb3NNYXJnaW4sIG9sZFRvcE5lZ01hcmdpbiwgeUJlZm9yZUNs
ZWFyKTsKICAgICAKKyAgICBpZiAocGFnaW5hdGVkKSB7CisgICAgICAgIGludCBvbGRZID0geUFm
dGVyQ2xlYXI7CisgICAgICAgIAorICAgICAgICAvLyBJZiB0aGUgb2JqZWN0IGhhcyBhIHBhZ2Ug
b3IgY29sdW1uIGJyZWFrIHZhbHVlIG9mICJiZWZvcmUiLCB0aGVuIHdlIHNob3VsZCBzaGlmdCB0
byB0aGUgdG9wIG9mIHRoZSBuZXh0IHBhZ2UuCisgICAgICAgIHlBZnRlckNsZWFyID0gYXBwbHlC
ZWZvcmVCcmVhayhjaGlsZCwgeUFmdGVyQ2xlYXIpOworICAgIAorICAgICAgICAvLyBGb3IgcmVw
bGFjZWQgZWxlbWVudHMgYW5kIHNjcm9sbGVkIGVsZW1lbnRzLCB3ZSB3YW50IHRvIHNoaWZ0IHRo
ZW0gdG8gdGhlIG5leHQgcGFnZSBpZiB0aGV5IGRvbid0IGZpdCBvbiB0aGUgY3VycmVudCBvbmUu
CisgICAgICAgIHlBZnRlckNsZWFyID0gYWRqdXN0Rm9yVW5zcGxpdHRhYmxlQ2hpbGQoY2hpbGQs
IHlBZnRlckNsZWFyKTsKKyAgICAgICAgCisgICAgICAgIGlmIChjaGlsZFJlbmRlckJsb2NrICYm
IGNoaWxkUmVuZGVyQmxvY2stPnBhZ2luYXRpb25TdHJ1dCgpKSB7CisgICAgICAgICAgICAvLyBX
ZSBhcmUgd2lsbGluZyB0byBwcm9wYWdhdGUgb3V0IHRvIG91ciBwYXJlbnQgYmxvY2sgYXMgbG9u
ZyBhcyB3ZSB3ZXJlIGF0IHRoZSB0b3Agb2YgdGhlIGJsb2NrIHByaW9yCisgICAgICAgICAgICAv
LyB0byBjb2xsYXBzaW5nIG91ciBtYXJnaW5zLCBhbmQgYXMgbG9uZyBhcyB3ZSBkaWRuJ3QgY2xl
YXIgb3IgbW92ZSBhcyBhIHJlc3VsdCBvZiBvdGhlciBwYWdpbmF0aW9uLgorICAgICAgICAgICAg
aWYgKGF0VG9wT2ZCbG9jayAmJiBvbGRZID09IHlCZWZvcmVDbGVhciAmJiAhaXNQb3NpdGlvbmVk
KCkgJiYgIWlzVGFibGVDZWxsKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogU2hvdWxk
IHJlYWxseSBjaGVjayBpZiB3ZSdyZSBleGNlZWRpbmcgdGhlIHBhZ2UgaGVpZ2h0IGJlZm9yZSBw
cm9wYWdhdGluZyB0aGUgc3RydXQsIGJ1dCB3ZSBkb24ndAorICAgICAgICAgICAgICAgIC8vIGhh
dmUgYWxsIHRoZSBpbmZvcm1hdGlvbiB0byBkbyBzbyAodGhlIHN0cnV0IG9ubHkgaGFzIHRoZSBy
ZW1haW5pbmcgYW1vdW50IHRvIHB1c2gpLiAgR2Vja28gZ2V0cyB0aGlzIHdyb25nIHRvbworICAg
ICAgICAgICAgICAgIC8vIGFuZCBwdXNoZXMgdG8gdGhlIG5leHQgcGFnZSBhbnl3YXksIHNvIG5v
dCB0b28gY29uY2VybmVkIGFib3V0IGl0LgorICAgICAgICAgICAgICAgIHNldFBhZ2luYXRpb25T
dHJ1dCh5QWZ0ZXJDbGVhciArIGNoaWxkUmVuZGVyQmxvY2stPnBhZ2luYXRpb25TdHJ1dCgpKTsK
KyAgICAgICAgICAgICAgICBjaGlsZFJlbmRlckJsb2NrLT5zZXRQYWdpbmF0aW9uU3RydXQoMCk7
CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICB5QWZ0ZXJDbGVhciArPSBjaGls
ZFJlbmRlckJsb2NrLT5wYWdpbmF0aW9uU3RydXQoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IFNpbWlsYXIgdG8gaG93IHdlIGFwcGx5IGNsZWFyYW5jZS4gIEdvIGFoZWFkIGFuZCBib29zdCBo
ZWlnaHQoKSB0byBiZSB0aGUgcGxhY2Ugd2hlcmUgd2UncmUgZ29pbmcgdG8gcG9zaXRpb24gdGhl
IGNoaWxkLgorICAgICAgICBzZXRIZWlnaHQoaGVpZ2h0KCkgKyAoeUFmdGVyQ2xlYXIgLSBvbGRZ
KSk7CisgICAgfQorCiAgICAgdmlldygpLT5hZGRMYXlvdXREZWx0YShJbnRTaXplKDAsIHlQb3NF
c3RpbWF0ZSAtIHlBZnRlckNsZWFyKSk7CiAgICAgY2hpbGQtPnNldExvY2F0aW9uKGNoaWxkLT54
KCksIHlBZnRlckNsZWFyKTsKIApAQCAtMTgxOCw4ICsxOTAzLDEzIEBAIHZvaWQgUmVuZGVyQmxv
Y2s6OmxheW91dEJsb2NrQ2hpbGQoUmVuZGUKICAgICAgICAgICAgIC8vIFNvIGdvIGFoZWFkIGFu
ZCBtYXJrIHRoZSBpdGVtIGFzIGRpcnR5LgogICAgICAgICAgICAgY2hpbGQtPnNldENoaWxkTmVl
ZHNMYXlvdXQodHJ1ZSwgZmFsc2UpOwogICAgICAgICB9Ci0gICAgICAgIGlmICghY2hpbGQtPmF2
b2lkc0Zsb2F0cygpICYmIGNoaWxkLT5pc0Jsb2NrRmxvdygpICYmIHRvUmVuZGVyQmxvY2soY2hp
bGQpLT5jb250YWluc0Zsb2F0cygpKQotICAgICAgICAgICAgdG9SZW5kZXJCbG9jayhjaGlsZCkt
Pm1hcmtBbGxEZXNjZW5kYW50c1dpdGhGbG9hdHNGb3JMYXlvdXQoKTsKKyAgICAgICAgaWYgKGNo
aWxkUmVuZGVyQmxvY2spIHsKKyAgICAgICAgICAgIGlmICghY2hpbGQtPmF2b2lkc0Zsb2F0cygp
ICYmIGNoaWxkUmVuZGVyQmxvY2stPmNvbnRhaW5zRmxvYXRzKCkpCisgICAgICAgICAgICAgICAg
Y2hpbGRSZW5kZXJCbG9jay0+bWFya0FsbERlc2NlbmRhbnRzV2l0aEZsb2F0c0ZvckxheW91dCgp
OworICAgICAgICAgICAgaWYgKHBhZ2luYXRlZCAmJiAhY2hpbGQtPm5lZWRzTGF5b3V0KCkgJiYg
dmlldygpLT5sYXlvdXRTdGF0ZSgpLT5tX3BhZ2VIZWlnaHQgJiYgdmlldygpLT5sYXlvdXRTdGF0
ZSgpLT5wYWdlWShjaGlsZC0+eSgpKSAhPSBjaGlsZFJlbmRlckJsb2NrLT5wYWdlWSgpKQorICAg
ICAgICAgICAgICAgIGNoaWxkLT5zZXRDaGlsZE5lZWRzTGF5b3V0KHRydWUsIGZhbHNlKTsKKyAg
ICAgICAgfQorCiAgICAgICAgIC8vIE91ciBndWVzcyB3YXMgd3JvbmcuIE1ha2UgdGhlIGNoaWxk
IGxheSBpdHNlbGYgb3V0IGFnYWluLgogICAgICAgICBjaGlsZC0+bGF5b3V0SWZOZWVkZWQoKTsK
ICAgICB9CkBAIC0xODQwLDcgKzE5MzAsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9j
a0NoaWxkKFJlbmRlCiAgICAgfQogICAgIC8vIElmIHRoZSBjaGlsZCBoYXMgb3Zlcmhhbmdpbmcg
ZmxvYXRzIHRoYXQgaW50cnVkZSBpbnRvIGZvbGxvd2luZyBzaWJsaW5ncyAob3IgcG9zc2libHkg
b3V0CiAgICAgLy8gb2YgdGhpcyBibG9jayksIHRoZW4gdGhlIHBhcmVudCBnZXRzIG5vdGlmaWVk
IG9mIHRoZSBmbG9hdHMgbm93LgotICAgIGlmIChjaGlsZC0+aXNCbG9ja0Zsb3coKSAmJiB0b1Jl
bmRlckJsb2NrKGNoaWxkKS0+Y29udGFpbnNGbG9hdHMoKSkKKyAgICBpZiAoY2hpbGRSZW5kZXJC
bG9jayAmJiBjaGlsZFJlbmRlckJsb2NrLT5jb250YWluc0Zsb2F0cygpKQogICAgICAgICBtYXhG
bG9hdEJvdHRvbSA9IG1heChtYXhGbG9hdEJvdHRvbSwgYWRkT3ZlcmhhbmdpbmdGbG9hdHModG9S
ZW5kZXJCbG9jayhjaGlsZCksIC1jaGlsZC0+eCgpLCAtY2hpbGQtPnkoKSwgIWNoaWxkTmVlZGVk
TGF5b3V0KSk7CiAKICAgICBJbnRTaXplIGNoaWxkT2Zmc2V0KGNoaWxkLT54KCkgLSBvbGRSZWN0
LngoKSwgY2hpbGQtPnkoKSAtIG9sZFJlY3QueSgpKTsKQEAgLTE4NTksNiArMTk0OSwxMyBAQCB2
b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9ja0NoaWxkKFJlbmRlCiAgICAgICAgIGNoaWxkLT5y
ZXBhaW50T3ZlcmhhbmdpbmdGbG9hdHModHJ1ZSk7CiAgICAgfQogCisgICAgaWYgKHBhZ2luYXRl
ZCkgeworICAgICAgICAvLyBDaGVjayBmb3IgYW4gYWZ0ZXIgcGFnZS9jb2x1bW4gYnJlYWsuCisg
ICAgICAgIGludCBuZXdIZWlnaHQgPSBhcHBseUFmdGVyQnJlYWsoY2hpbGQsIGhlaWdodCgpLCBt
YXJnaW5JbmZvKTsKKyAgICAgICAgaWYgKG5ld0hlaWdodCAhPSBoZWlnaHQoKSkKKyAgICAgICAg
ICAgIHNldEhlaWdodChuZXdIZWlnaHQpOworICAgIH0KKwogICAgIEFTU0VSVChvbGRMYXlvdXRE
ZWx0YSA9PSB2aWV3KCktPmxheW91dERlbHRhKCkpOwogfQogCkBAIC0xODg5LDYgKzE5ODYsMTEg
QEAgYm9vbCBSZW5kZXJCbG9jazo6bGF5b3V0T25seVBvc2l0aW9uZWRPYgogdm9pZCBSZW5kZXJC
bG9jazo6bGF5b3V0UG9zaXRpb25lZE9iamVjdHMoYm9vbCByZWxheW91dENoaWxkcmVuKQogewog
ICAgIGlmIChtX3Bvc2l0aW9uZWRPYmplY3RzKSB7CisgICAgICAgIGlmIChoYXNDb2x1bW5zKCkp
CisgICAgICAgICAgICB2aWV3KCktPmxheW91dFN0YXRlKCktPmNsZWFyUGFnaW5hdGlvbkluZm9y
bWF0aW9uKCk7IC8vIFBvc2l0aW9uZWQgb2JqZWN0cyBhcmUgbm90IHBhcnQgb2YgdGhlIGNvbHVt
biBmbG93LCBzbyB0aGV5IGRvbid0IHBhZ2luYXRlIHdpdGggdGhlIGNvbHVtbnMuCisKKyAgICAg
ICAgYm9vbCBwYWdpbmF0ZWQgPSB2aWV3KCktPmxheW91dFN0YXRlKCktPnBhZ2luYXRlZCgpOwor
CiAgICAgICAgIFJlbmRlckJveCogcjsKICAgICAgICAgSXRlcmF0b3IgZW5kID0gbV9wb3NpdGlv
bmVkT2JqZWN0cy0+ZW5kKCk7CiAgICAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSBtX3Bvc2l0aW9u
ZWRPYmplY3RzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKQEAgLTE5MDQsMTIgKzIwMDYs
MjEgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0UG9zaXRpb25lZE9iamVjdAogICAgICAgICAg
ICAgLy9pZiAocmVsYXlvdXRDaGlsZHJlbiAmJiAoci0+c3R5bGUoKS0+cGFkZGluZ0xlZnQoKS5p
c1BlcmNlbnQoKSB8fCByLT5zdHlsZSgpLT5wYWRkaW5nUmlnaHQoKS5pc1BlcmNlbnQoKSkpCiAg
ICAgICAgICAgICAgICAgci0+c2V0UHJlZldpZHRoc0RpcnR5KHRydWUsIGZhbHNlKTsKICAgICAg
ICAgICAgIAorICAgICAgICAgICAgaWYgKCFyLT5uZWVkc0xheW91dCgpICYmIHBhZ2luYXRlZCAm
JiB2aWV3KCktPmxheW91dFN0YXRlKCktPm1fcGFnZUhlaWdodCkgeworICAgICAgICAgICAgICAg
IFJlbmRlckJsb2NrKiBjaGlsZFJlbmRlckJsb2NrID0gci0+aXNSZW5kZXJCbG9jaygpID8gdG9S
ZW5kZXJCbG9jayhyKSA6IDA7CisgICAgICAgICAgICAgICAgaWYgKGNoaWxkUmVuZGVyQmxvY2sg
JiYgdmlldygpLT5sYXlvdXRTdGF0ZSgpLT5wYWdlWShjaGlsZFJlbmRlckJsb2NrLT55KCkpICE9
IGNoaWxkUmVuZGVyQmxvY2stPnBhZ2VZKCkpCisgICAgICAgICAgICAgICAgICAgIGNoaWxkUmVu
ZGVyQmxvY2stPnNldENoaWxkTmVlZHNMYXlvdXQodHJ1ZSwgZmFsc2UpOworICAgICAgICAgICAg
fQorCiAgICAgICAgICAgICAvLyBXZSBkb24ndCBoYXZlIHRvIGRvIGEgZnVsbCBsYXlvdXQuICBX
ZSBqdXN0IGhhdmUgdG8gdXBkYXRlIG91ciBwb3NpdGlvbi4gVHJ5IHRoYXQgZmlyc3QuIElmIHdl
IGhhdmUgc2hyaW5rLXRvLWZpdCB3aWR0aAogICAgICAgICAgICAgLy8gYW5kIHdlIGhpdCB0aGUg
YXZhaWxhYmxlIHdpZHRoIGNvbnN0cmFpbnQsIHRoZSBsYXlvdXRJZk5lZWRlZCgpIHdpbGwgY2F0
Y2ggaXQgYW5kIGRvIGEgZnVsbCBsYXlvdXQuCiAgICAgICAgICAgICBpZiAoci0+bmVlZHNQb3Np
dGlvbmVkTW92ZW1lbnRMYXlvdXRPbmx5KCkpCiAgICAgICAgICAgICAgICAgci0+dHJ5TGF5b3V0
RG9pbmdQb3NpdGlvbmVkTW92ZW1lbnRPbmx5KCk7CiAgICAgICAgICAgICByLT5sYXlvdXRJZk5l
ZWRlZCgpOwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoaGFzQ29sdW1ucygpKQor
ICAgICAgICAgICAgdmlldygpLT5sYXlvdXRTdGF0ZSgpLT5tX2NvbHVtbkluZm8gPSBjb2x1bW5J
bmZvKCk7IC8vIEZJWE1FOiBLaW5kIG9mIGdyb3NzLiBXZSBqdXN0IHB1dCB0aGlzIGJhY2sgaW50
byB0aGUgbGF5b3V0IHN0YXRlIHNvIHRoYXQgcG9wKCkgd2lsbCB3b3JrLgogICAgIH0KIH0KIApA
QCAtMTk5NywxMiArMjEwOCwxMiBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWludENvbHVtblJ1bGVz
KFBhaW50CiAKICAgICAvLyBXZSBuZWVkIHRvIGRvIG11bHRpcGxlIHBhc3NlcywgYnJlYWtpbmcg
dXAgb3VyIGNoaWxkIHBhaW50aW5nIGludG8gc3RyaXBzLgogICAgIENvbHVtbkluZm8qIGNvbElu
Zm8gPSBjb2x1bW5JbmZvKCk7Ci0gICAgdW5zaWduZWQgY29sQ291bnQgPSBjb2xJbmZvLT5jb2x1
bW5Db3VudCgpOworICAgIHVuc2lnbmVkIGNvbENvdW50ID0gY29sdW1uQ291bnQoY29sSW5mbyk7
CiAgICAgaW50IGN1cnJYT2Zmc2V0ID0gc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8gMCA6
IGNvbnRlbnRXaWR0aCgpOwogICAgIGludCBydWxlQWRkID0gYm9yZGVyTGVmdCgpICsgcGFkZGlu
Z0xlZnQoKTsKICAgICBpbnQgcnVsZVggPSBzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIgPyAw
IDogY29udGVudFdpZHRoKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvbENvdW50
OyBpKyspIHsKLSAgICAgICAgSW50UmVjdCBjb2xSZWN0ID0gY29sSW5mby0+Y29sdW1uUmVjdEF0
KGkpOworICAgICAgICBJbnRSZWN0IGNvbFJlY3QgPSBjb2x1bW5SZWN0QXQoY29sSW5mbywgaSk7
CiAKICAgICAgICAgLy8gTW92ZSB0byB0aGUgbmV4dCBwb3NpdGlvbi4KICAgICAgICAgaWYgKHN0
eWxlKCktPmRpcmVjdGlvbigpID09IExUUikgewpAQCAtMjAzMywxNCArMjE0NCwxNCBAQCB2b2lk
IFJlbmRlckJsb2NrOjpwYWludENvbHVtbkNvbnRlbnRzKFBhCiAgICAgR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQ7CiAgICAgaW50IGNvbEdhcCA9IGNvbHVtbkdh
cCgpOwogICAgIENvbHVtbkluZm8qIGNvbEluZm8gPSBjb2x1bW5JbmZvKCk7Ci0gICAgdW5zaWdu
ZWQgY29sQ291bnQgPSBjb2xJbmZvLT5jb2x1bW5Db3VudCgpOworICAgIHVuc2lnbmVkIGNvbENv
dW50ID0gY29sdW1uQ291bnQoY29sSW5mbyk7CiAgICAgaWYgKCFjb2xDb3VudCkKICAgICAgICAg
cmV0dXJuOwotICAgIGludCBjdXJyWE9mZnNldCA9IHN0eWxlKCktPmRpcmVjdGlvbigpID09IExU
UiA/IDAgOiBjb250ZW50V2lkdGgoKSAtIGNvbEluZm8tPmNvbHVtblJlY3RBdCgwKS53aWR0aCgp
OworICAgIGludCBjdXJyWE9mZnNldCA9IHN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUiA/IDAg
OiBjb250ZW50V2lkdGgoKSAtIGNvbHVtblJlY3RBdChjb2xJbmZvLCAwKS53aWR0aCgpOwogICAg
IGludCBjdXJyWU9mZnNldCA9IDA7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvbENv
dW50OyBpKyspIHsKICAgICAgICAgLy8gRm9yIGVhY2ggcmVjdCwgd2UgY2xpcCB0byB0aGUgcmVj
dCwgYW5kIHRoZW4gd2UgYWRqdXN0IG91ciBjb29yZHMuCi0gICAgICAgIEludFJlY3QgY29sUmVj
dCA9IGNvbEluZm8tPmNvbHVtblJlY3RBdChpKTsKKyAgICAgICAgSW50UmVjdCBjb2xSZWN0ID0g
Y29sdW1uUmVjdEF0KGNvbEluZm8sIGkpOwogICAgICAgICBjb2xSZWN0Lm1vdmUodHgsIHR5KTsK
ICAgICAgICAgUGFpbnRJbmZvIGluZm8ocGFpbnRJbmZvKTsKICAgICAgICAgaW5mby5yZWN0Lmlu
dGVyc2VjdChjb2xSZWN0KTsKQEAgLTIwOTgsMTQgKzIyMDksMTMgQEAgdm9pZCBSZW5kZXJCbG9j
azo6cGFpbnRDaGlsZHJlbihQYWludEluZgogICAgIGluZm8udXBkYXRlUGFpbnRpbmdSb290Rm9y
Q2hpbGRyZW4odGhpcyk7CiAgICAgCiAgICAgUmVuZGVyVmlldyogcmVuZGVyVmlldyA9IHZpZXco
KTsKLSAgICBib29sIHVzZVByaW50UmVjdCA9ICFyZW5kZXJWaWV3LT5wcmludFJlY3QoKS5pc0Vt
cHR5KCkgJiYgIWRvY3VtZW50KCktPnNldHRpbmdzKCktPnBhZ2luYXRlRHVyaW5nTGF5b3V0RW5h
YmxlZCgpOworICAgIGJvb2wgdXNlUHJpbnRSZWN0ID0gIXJlbmRlclZpZXctPnByaW50UmVjdCgp
LmlzRW1wdHkoKTsKICAgICAKICAgICBib29sIGNoZWNrUGFnZUJyZWFrcyA9IGRvY3VtZW50KCkt
PnBhZ2luYXRlZCgpICYmICFkb2N1bWVudCgpLT5zZXR0aW5ncygpLT5wYWdpbmF0ZUR1cmluZ0xh
eW91dEVuYWJsZWQoKTsKLSAgICBib29sIGNoZWNrQ29sdW1uQnJlYWtzID0gIWNoZWNrUGFnZUJy
ZWFrcyAmJiB1c2VQcmludFJlY3Q7CiAKICAgICBmb3IgKFJlbmRlckJveCogY2hpbGQgPSBmaXJz
dENoaWxkQm94KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZ0JveCgpKSB7ICAg
ICAgICAKICAgICAgICAgLy8gQ2hlY2sgZm9yIHBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMsIGFu
ZCBpZiBpdCdzIHNldCwgYnJlYWsgYW5kIGJhaWwuCi0gICAgICAgIGJvb2wgY2hlY2tCZWZvcmVB
bHdheXMgPSAhY2hpbGRyZW5JbmxpbmUoKSAmJiAoKGNoZWNrUGFnZUJyZWFrcyAmJiBjaGlsZC0+
c3R5bGUoKS0+cGFnZUJyZWFrQmVmb3JlKCkgPT0gUEJBTFdBWVMpIHx8IChjaGVja0NvbHVtbkJy
ZWFrcyAmJiBjaGlsZC0+c3R5bGUoKS0+Y29sdW1uQnJlYWtCZWZvcmUoKSA9PSBQQkFMV0FZUykp
OworICAgICAgICBib29sIGNoZWNrQmVmb3JlQWx3YXlzID0gIWNoaWxkcmVuSW5saW5lKCkgJiYg
KGNoZWNrUGFnZUJyZWFrcyAmJiBjaGlsZC0+c3R5bGUoKS0+cGFnZUJyZWFrQmVmb3JlKCkgPT0g
UEJBTFdBWVMpOwogICAgICAgICBpZiAoY2hlY2tCZWZvcmVBbHdheXMKICAgICAgICAgICAgICYm
ICh0eSArIGNoaWxkLT55KCkpID4gcGFpbnRJbmZvLnJlY3QueSgpCiAgICAgICAgICAgICAmJiAo
dHkgKyBjaGlsZC0+eSgpKSA8IHBhaW50SW5mby5yZWN0LmJvdHRvbSgpKSB7CkBAIC0yMTI4LDcg
KzIyMzgsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWludENoaWxkcmVuKFBhaW50SW5mCiAgICAg
ICAgICAgICBjaGlsZC0+cGFpbnQoaW5mbywgdHgsIHR5KTsKIAogICAgICAgICAvLyBDaGVjayBm
b3IgcGFnZS1icmVhay1hZnRlcjogYWx3YXlzLCBhbmQgaWYgaXQncyBzZXQsIGJyZWFrIGFuZCBi
YWlsLgotICAgICAgICBib29sIGNoZWNrQWZ0ZXJBbHdheXMgPSAhY2hpbGRyZW5JbmxpbmUoKSAm
JiAoKGNoZWNrUGFnZUJyZWFrcyAmJiBjaGlsZC0+c3R5bGUoKS0+cGFnZUJyZWFrQWZ0ZXIoKSA9
PSBQQkFMV0FZUykgfHwgKGNoZWNrQ29sdW1uQnJlYWtzICYmIGNoaWxkLT5zdHlsZSgpLT5jb2x1
bW5CcmVha0FmdGVyKCkgPT0gUEJBTFdBWVMpKTsKKyAgICAgICAgYm9vbCBjaGVja0FmdGVyQWx3
YXlzID0gIWNoaWxkcmVuSW5saW5lKCkgJiYgKGNoZWNrUGFnZUJyZWFrcyAmJiBjaGlsZC0+c3R5
bGUoKS0+cGFnZUJyZWFrQWZ0ZXIoKSA9PSBQQkFMV0FZUyk7CiAgICAgICAgIGlmIChjaGVja0Fm
dGVyQWx3YXlzCiAgICAgICAgICAgICAmJiAodHkgKyBjaGlsZC0+eSgpICsgY2hpbGQtPmhlaWdo
dCgpKSA+IHBhaW50SW5mby5yZWN0LnkoKQogICAgICAgICAgICAgJiYgKHR5ICsgY2hpbGQtPnko
KSArIGNoaWxkLT5oZWlnaHQoKSkgPCBwYWludEluZm8ucmVjdC5ib3R0b20oKSkgewpAQCAtMjc3
Niw3ICsyODg2LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6cmVtb3ZlUG9zaXRpb25lZE9iamVjdAog
ICAgICAgICBtX3Bvc2l0aW9uZWRPYmplY3RzLT5yZW1vdmUoZGVhZE9iamVjdHMuYXQoaSkpOwog
fQogCi12b2lkIFJlbmRlckJsb2NrOjppbnNlcnRGbG9hdGluZ09iamVjdChSZW5kZXJCb3gqIG8p
CitSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3QqIFJlbmRlckJsb2NrOjppbnNlcnRGbG9hdGlu
Z09iamVjdChSZW5kZXJCb3gqIG8pCiB7CiAgICAgQVNTRVJUKG8tPmlzRmxvYXRpbmcoKSk7CiAK
QEAgLTI3ODksMjUgKzI4OTksMzcgQEAgdm9pZCBSZW5kZXJCbG9jazo6aW5zZXJ0RmxvYXRpbmdP
YmplY3QoUgogICAgICAgICBEZXByZWNhdGVkUHRyTGlzdEl0ZXJhdG9yPEZsb2F0aW5nT2JqZWN0
PiBpdCgqbV9mbG9hdGluZ09iamVjdHMpOwogICAgICAgICBGbG9hdGluZ09iamVjdCogZjsKICAg
ICAgICAgd2hpbGUgKCAoZiA9IGl0LmN1cnJlbnQoKSkgKSB7Ci0gICAgICAgICAgICBpZiAoZi0+
bV9yZW5kZXJlciA9PSBvKSByZXR1cm47CisgICAgICAgICAgICBpZiAoZi0+bV9yZW5kZXJlciA9
PSBvKQorICAgICAgICAgICAgICAgIHJldHVybiBmOwogICAgICAgICAgICAgKytpdDsKICAgICAg
ICAgfQogICAgIH0KIAogICAgIC8vIENyZWF0ZSB0aGUgc3BlY2lhbCBvYmplY3QgZW50cnkgJiBh
cHBlbmQgaXQgdG8gdGhlIGxpc3QKIAotICAgIG8tPmxheW91dElmTmVlZGVkKCk7Ci0KICAgICBG
bG9hdGluZ09iamVjdCogbmV3T2JqID0gbmV3IEZsb2F0aW5nT2JqZWN0KG8tPnN0eWxlKCktPmZs
b2F0aW5nKCkgPT0gRkxFRlQgPyBGbG9hdGluZ09iamVjdDo6RmxvYXRMZWZ0IDogRmxvYXRpbmdP
YmplY3Q6OkZsb2F0UmlnaHQpOwogCiAgICAgbmV3T2JqLT5tX3RvcCA9IC0xOwogICAgIG5ld09i
ai0+bV9ib3R0b20gPSAtMTsKKyAgICAKKyAgICAvLyBPdXIgbG9jYXRpb24gaXMgaXJyZWxldmFu
dCBpZiB3ZSdyZSB1bnNwbGl0dGFibGUgb3Igbm8gcGFnaW5hdGlvbiBpcyBpbiBlZmZlY3QuICBK
dXN0IGdvIGFoZWFkCisgICAgLy8gYW5kIGxheSBvdXQgdGhlIGZsb2F0LgorICAgIGJvb2wgYWZm
ZWN0ZWRCeVBhZ2luYXRpb24gPSBvLT5pc1JlbmRlckJsb2NrKCkgJiYgdmlldygpLT5sYXlvdXRT
dGF0ZSgpLT5tX3BhZ2VIZWlnaHQ7CisgICAgaWYgKCFhZmZlY3RlZEJ5UGFnaW5hdGlvbikKKyAg
ICAgICAgby0+bGF5b3V0SWZOZWVkZWQoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgby0+Y2FsY1dp
ZHRoKCk7CisgICAgICAgIG8tPmNhbGNWZXJ0aWNhbE1hcmdpbnMoKTsKKyAgICB9CiAgICAgbmV3
T2JqLT5tX3dpZHRoID0gby0+d2lkdGgoKSArIG8tPm1hcmdpbkxlZnQoKSArIG8tPm1hcmdpblJp
Z2h0KCk7CisKICAgICBuZXdPYmotPm1fc2hvdWxkUGFpbnQgPSAhby0+aGFzU2VsZlBhaW50aW5n
TGF5ZXIoKTsgLy8gSWYgYSBsYXllciBleGlzdHMsIHRoZSBmbG9hdCB3aWxsIHBhaW50IGl0c2Vs
Zi4gIE90aGVyd2lzZSBzb21lb25lIGVsc2Ugd2lsbC4KICAgICBuZXdPYmotPm1faXNEZXNjZW5k
YW50ID0gdHJ1ZTsKICAgICBuZXdPYmotPm1fcmVuZGVyZXIgPSBvOwogCiAgICAgbV9mbG9hdGlu
Z09iamVjdHMtPmFwcGVuZChuZXdPYmopOworICAgIAorICAgIHJldHVybiBuZXdPYmo7CiB9CiAK
IHZvaWQgUmVuZGVyQmxvY2s6OnJlbW92ZUZsb2F0aW5nT2JqZWN0KFJlbmRlckJveCogbykKQEAg
LTI4MzEsNiArMjk1MywxOCBAQCB2b2lkIFJlbmRlckJsb2NrOjpyZW1vdmVGbG9hdGluZ09iamVj
dChSCiAgICAgfQogfQogCit2b2lkIFJlbmRlckJsb2NrOjpyZW1vdmVGbG9hdGluZ09iamVjdHMo
RmxvYXRpbmdPYmplY3QqIGYsIGludCB5KQoreworICAgIGlmICghbV9mbG9hdGluZ09iamVjdHMp
CisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBGbG9hdGluZ09iamVjdCogY3VyciA9IG1fZmxv
YXRpbmdPYmplY3RzLT5sYXN0KCk7CisgICAgd2hpbGUgKGN1cnIgIT0gZiAmJiAoY3Vyci0+bV90
b3AgPT0gLTEgfHwgY3Vyci0+bV90b3AgPj0geSkpIHsKKyAgICAgICAgbV9mbG9hdGluZ09iamVj
dHMtPnJlbW92ZUxhc3QoKTsKKyAgICAgICAgY3VyciA9IG1fZmxvYXRpbmdPYmplY3RzLT5sYXN0
KCk7CisgICAgfQorfQorCiBib29sIFJlbmRlckJsb2NrOjpwb3NpdGlvbk5ld0Zsb2F0cygpCiB7
CiAgICAgaWYgKCFtX2Zsb2F0aW5nT2JqZWN0cykKQEAgLTI4NjcsMTYgKzMwMDEsMTUgQEAgYm9v
bCBSZW5kZXJCbG9jazo6cG9zaXRpb25OZXdGbG9hdHMoKQogICAgICAgICB9CiAKICAgICAgICAg
UmVuZGVyQm94KiBvID0gZi0+bV9yZW5kZXJlcjsKLSAgICAgICAgaW50IF9oZWlnaHQgPSBvLT5o
ZWlnaHQoKSArIG8tPm1hcmdpblRvcCgpICsgby0+bWFyZ2luQm90dG9tKCk7CiAKICAgICAgICAg
aW50IHJvID0gcmlnaHRPZmZzZXQoKTsgLy8gQ29uc3RhbnQgcGFydCBvZiByaWdodCBvZmZzZXQu
Ci0gICAgICAgIGludCBsbyA9IGxlZnRPZmZzZXQoKTsgLy8gQ29uc3RhdCBwYXJ0IG9mIGxlZnQg
b2Zmc2V0LgorICAgICAgICBpbnQgbG8gPSBsZWZ0T2Zmc2V0KCk7IC8vIENvbnN0YW50IHBhcnQg
b2YgbGVmdCBvZmZzZXQuCiAgICAgICAgIGludCBmd2lkdGggPSBmLT5tX3dpZHRoOyAvLyBUaGUg
d2lkdGggd2UgbG9vayBmb3IuCiAgICAgICAgIGlmIChybyAtIGxvIDwgZndpZHRoKQogICAgICAg
ICAgICAgZndpZHRoID0gcm8gLSBsbzsgLy8gTmV2ZXIgbG9vayBmb3IgbW9yZSB0aGFuIHdoYXQg
d2lsbCBiZSBhdmFpbGFibGUuCiAgICAgICAgIAogICAgICAgICBJbnRSZWN0IG9sZFJlY3Qoby0+
eCgpLCBvLT55KCkgLCBvLT53aWR0aCgpLCBvLT5oZWlnaHQoKSk7Ci0gICAgICAgIAorCiAgICAg
ICAgIGlmIChvLT5zdHlsZSgpLT5jbGVhcigpICYgQ0xFRlQpCiAgICAgICAgICAgICB5ID0gbWF4
KGxlZnRCb3R0b20oKSwgeSk7CiAgICAgICAgIGlmIChvLT5zdHlsZSgpLT5jbGVhcigpICYgQ1JJ
R0hUKQpAQCAtMjkwNSw5ICszMDM4LDM4IEBAIGJvb2wgUmVuZGVyQmxvY2s6OnBvc2l0aW9uTmV3
RmxvYXRzKCkKICAgICAgICAgICAgIG8tPnNldExvY2F0aW9uKGZ4IC0gby0+bWFyZ2luUmlnaHQo
KSAtIG8tPndpZHRoKCksIHkgKyBvLT5tYXJnaW5Ub3AoKSk7CiAgICAgICAgIH0KIAotICAgICAg
ICBmLT5tX3RvcCA9IHk7Ci0gICAgICAgIGYtPm1fYm90dG9tID0gZi0+bV90b3AgKyBfaGVpZ2h0
OworICAgICAgICBpZiAodmlldygpLT5sYXlvdXRTdGF0ZSgpLT5wYWdpbmF0ZWQoKSkgeworICAg
ICAgICAgICAgUmVuZGVyQmxvY2sqIGNoaWxkQmxvY2sgPSBvLT5pc1JlbmRlckJsb2NrKCkgPyB0
b1JlbmRlckJsb2NrKG8pIDogMDsKIAorICAgICAgICAgICAgaWYgKGNoaWxkQmxvY2sgJiYgdmll
dygpLT5sYXlvdXRTdGF0ZSgpLT5tX3BhZ2VIZWlnaHQgJiYgdmlldygpLT5sYXlvdXRTdGF0ZSgp
LT5wYWdlWShvLT55KCkpICE9IGNoaWxkQmxvY2stPnBhZ2VZKCkpCisgICAgICAgICAgICAgICAg
Y2hpbGRCbG9jay0+c2V0Q2hpbGROZWVkc0xheW91dCh0cnVlLCBmYWxzZSk7CisgICAgICAgICAg
ICBvLT5sYXlvdXRJZk5lZWRlZCgpOworCisgICAgICAgICAgICAvLyBJZiB3ZSBhcmUgdW5zcGxp
dHRhYmxlIGFuZCBkb24ndCBmaXQsIHRoZW4gd2UgbmVlZCB0byBtb3ZlIGRvd24uCisgICAgICAg
ICAgICAvLyBXZSBpbmNsdWRlIG91ciBtYXJnaW5zIGFzIHBhcnQgb2YgdGhlIHVuc3BsaXR0YWJs
ZSBhcmVhLgorICAgICAgICAgICAgaW50IG5ld1kgPSBhZGp1c3RGb3JVbnNwbGl0dGFibGVDaGls
ZChvLCB5LCB0cnVlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gU2VlIGlmIHdlIGhh
dmUgYSBwYWdpbmF0aW9uIHN0cnV0IHRoYXQgaXMgbWFraW5nIHVzIG1vdmUgZG93biBmdXJ0aGVy
LgorICAgICAgICAgICAgLy8gTm90ZSB0aGF0IGFuIHVuc3BsaXR0YWJsZSBjaGlsZCBjYW4ndCBh
bHNvIGhhdmUgYSBwYWdpbmF0aW9uIHN0cnV0LCBzbyB0aGlzIGlzCisgICAgICAgICAgICAvLyBl
eGNsdXNpdmUgd2l0aCB0aGUgY2FzZSBhYm92ZS4KKyAgICAgICAgICAgIGlmIChjaGlsZEJsb2Nr
ICYmIGNoaWxkQmxvY2stPnBhZ2luYXRpb25TdHJ1dCgpKSB7CisgICAgICAgICAgICAgICAgbmV3
WSArPSBjaGlsZEJsb2NrLT5wYWdpbmF0aW9uU3RydXQoKTsKKyAgICAgICAgICAgICAgICBjaGls
ZEJsb2NrLT5zZXRQYWdpbmF0aW9uU3RydXQoMCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGlmIChuZXdZICE9IHkpIHsKKyAgICAgICAgICAgICAgICBmLT5tX3Bh
Z2luYXRpb25TdHJ1dCA9IG5ld1kgLSB5OworICAgICAgICAgICAgICAgIHkgPSBuZXdZOworICAg
ICAgICAgICAgICAgIG8tPnNldFkoeSArIG8tPm1hcmdpblRvcCgpKTsKKyAgICAgICAgICAgICAg
ICBpZiAoY2hpbGRCbG9jaykKKyAgICAgICAgICAgICAgICAgICAgY2hpbGRCbG9jay0+c2V0Q2hp
bGROZWVkc0xheW91dCh0cnVlLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgby0+bGF5b3V0SWZO
ZWVkZWQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGYtPm1fdG9wID0g
eTsKKyAgICAgICAgZi0+bV9ib3R0b20gPSBmLT5tX3RvcCArIG8tPm1hcmdpblRvcCgpICsgby0+
aGVpZ2h0KCkgKyBvLT5tYXJnaW5Cb3R0b20oKTsKKyAgICAgICAgCiAgICAgICAgIC8vIElmIHRo
ZSBjaGlsZCBtb3ZlZCwgd2UgaGF2ZSB0byByZXBhaW50IGl0LgogICAgICAgICBpZiAoby0+Y2hl
Y2tGb3JSZXBhaW50RHVyaW5nTGF5b3V0KCkpCiAgICAgICAgICAgICBvLT5yZXBhaW50RHVyaW5n
TGF5b3V0SWZNb3ZlZChvbGRSZWN0KTsKQEAgLTI5MTcsNiArMzA3OSw0MCBAQCBib29sIFJlbmRl
ckJsb2NrOjpwb3NpdGlvbk5ld0Zsb2F0cygpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wg
UmVuZGVyQmxvY2s6OnBvc2l0aW9uTmV3RmxvYXRPbkxpbmUoRmxvYXRpbmdPYmplY3QqIG5ld0Zs
b2F0LCBGbG9hdGluZ09iamVjdCogbGFzdEZsb2F0RnJvbVByZXZpb3VzTGluZSkKK3sKKyAgICBi
b29sIGRpZFBvc2l0aW9uID0gcG9zaXRpb25OZXdGbG9hdHMoKTsKKyAgICBpZiAoIWRpZFBvc2l0
aW9uIHx8ICFuZXdGbG9hdC0+bV9wYWdpbmF0aW9uU3RydXQpCisgICAgICAgIHJldHVybiBkaWRQ
b3NpdGlvbjsKKyAgICAKKyAgICBpbnQgZmxvYXRUb3AgPSBuZXdGbG9hdC0+bV90b3A7CisgICAg
aW50IHBhZ2luYXRpb25TdHJ1dCA9IG5ld0Zsb2F0LT5tX3BhZ2luYXRpb25TdHJ1dDsKKyAgICBG
bG9hdGluZ09iamVjdCogZiA9IG1fZmxvYXRpbmdPYmplY3RzLT5sYXN0KCk7CisgICAgCisgICAg
QVNTRVJUKGYgPT0gbmV3RmxvYXQpOworCisgICAgaWYgKGZsb2F0VG9wIC0gcGFnaW5hdGlvblN0
cnV0ICE9IGhlaWdodCgpKQorICAgICAgICByZXR1cm4gZGlkUG9zaXRpb247CisKKyAgICBmb3Ig
KGYgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+cHJldigpOyBmICYmIGYgIT0gbGFzdEZsb2F0RnJvbVBy
ZXZpb3VzTGluZTsgZiA9IG1fZmxvYXRpbmdPYmplY3RzLT5wcmV2KCkpIHsKKyAgICAgICAgaWYg
KGYtPm1fdG9wID09IGhlaWdodCgpKSB7CisgICAgICAgICAgICBBU1NFUlQoIWYtPm1fcGFnaW5h
dGlvblN0cnV0KTsKKyAgICAgICAgICAgIGYtPm1fcGFnaW5hdGlvblN0cnV0ID0gcGFnaW5hdGlv
blN0cnV0OworICAgICAgICAgICAgUmVuZGVyQm94KiBvID0gZi0+bV9yZW5kZXJlcjsKKyAgICAg
ICAgICAgIG8tPnNldFkoby0+eSgpICsgby0+bWFyZ2luVG9wKCkgKyBwYWdpbmF0aW9uU3RydXQp
OworICAgICAgICAgICAgaWYgKG8tPmlzUmVuZGVyQmxvY2soKSkKKyAgICAgICAgICAgICAgICB0
b1JlbmRlckJsb2NrKG8pLT5zZXRDaGlsZE5lZWRzTGF5b3V0KHRydWUsIGZhbHNlKTsKKyAgICAg
ICAgICAgIG8tPmxheW91dElmTmVlZGVkKCk7CisgICAgICAgICAgICBmLT5tX3RvcCArPSBmLT5t
X3BhZ2luYXRpb25TdHJ1dDsKKyAgICAgICAgICAgIGYtPm1fYm90dG9tICs9IGYtPm1fcGFnaW5h
dGlvblN0cnV0OworICAgICAgICB9CisgICAgfQorICAgICAgICAKKyAgICBzZXRIZWlnaHQoaGVp
Z2h0KCkgKyBwYWdpbmF0aW9uU3RydXQpOworICAgIAorICAgIHJldHVybiBkaWRQb3NpdGlvbjsK
K30KKwogdm9pZCBSZW5kZXJCbG9jazo6bmV3TGluZShFQ2xlYXIgY2xlYXIpCiB7CiAgICAgcG9z
aXRpb25OZXdGbG9hdHMoKTsKQEAgLTMxNTgsOCArMzM1NCw4IEBAIGludCBSZW5kZXJCbG9jazo6
bG93ZXN0UG9zaXRpb24oYm9vbCBpbmMKIAogICAgIGlmIChoYXNDb2x1bW5zKCkpIHsKICAgICAg
ICAgQ29sdW1uSW5mbyogY29sSW5mbyA9IGNvbHVtbkluZm8oKTsKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGNvbEluZm8tPmNvbHVtbkNvdW50KCk7IGkrKykKLSAgICAgICAgICAg
IGJvdHRvbSA9IG1heChib3R0b20sIGNvbEluZm8tPmNvbHVtblJlY3RBdChpKS5ib3R0b20oKSAr
IHJlbGF0aXZlT2Zmc2V0KTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvbHVt
bkNvdW50KGNvbEluZm8pOyBpKyspCisgICAgICAgICAgICBib3R0b20gPSBtYXgoYm90dG9tLCBj
b2x1bW5SZWN0QXQoY29sSW5mbywgaSkuYm90dG9tKCkgKyByZWxhdGl2ZU9mZnNldCk7CiAgICAg
ICAgIHJldHVybiBib3R0b207CiAgICAgfQogCkBAIC0zMjUzLDggKzM0NDksOSBAQCBpbnQgUmVu
ZGVyQmxvY2s6OnJpZ2h0bW9zdFBvc2l0aW9uKGJvb2wgCiAgICAgICAgIC8vIFRoaXMgb25seSBt
YXR0ZXJzIGZvciBMVFIKICAgICAgICAgaWYgKHN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUikg
ewogICAgICAgICAgICAgQ29sdW1uSW5mbyogY29sSW5mbyA9IGNvbHVtbkluZm8oKTsKLSAgICAg
ICAgICAgIGlmIChjb2xJbmZvLT5jb2x1bW5Db3VudCgpKQotICAgICAgICAgICAgICAgIHJpZ2h0
ID0gbWF4KGNvbEluZm8tPmNvbHVtblJlY3RBdChjb2xJbmZvLT5jb2x1bW5Db3VudCgpIC0gMSku
cmlnaHQoKSArIHJlbGF0aXZlT2Zmc2V0LCByaWdodCk7CisgICAgICAgICAgICB1bnNpZ25lZCBj
b3VudCA9IGNvbHVtbkNvdW50KGNvbEluZm8pOworICAgICAgICAgICAgaWYgKGNvdW50KQorICAg
ICAgICAgICAgICAgIHJpZ2h0ID0gbWF4KGNvbHVtblJlY3RBdChjb2xJbmZvLCBjb3VudCAtIDEp
LnJpZ2h0KCkgKyByZWxhdGl2ZU9mZnNldCwgcmlnaHQpOwogICAgICAgICB9CiAgICAgICAgIHJl
dHVybiByaWdodDsKICAgICB9CkBAIC0zMzUzLDggKzM1NTAsOSBAQCBpbnQgUmVuZGVyQmxvY2s6
OmxlZnRtb3N0UG9zaXRpb24oYm9vbCBpCiAgICAgICAgIC8vIFRoaXMgb25seSBtYXR0ZXJzIGZv
ciBSVEwKICAgICAgICAgaWYgKHN0eWxlKCktPmRpcmVjdGlvbigpID09IFJUTCkgewogICAgICAg
ICAgICAgQ29sdW1uSW5mbyogY29sSW5mbyA9IGNvbHVtbkluZm8oKTsKLSAgICAgICAgICAgIGlm
IChjb2xJbmZvLT5jb2x1bW5Db3VudCgpKQotICAgICAgICAgICAgICAgIGxlZnQgPSBtaW4oY29s
SW5mby0+Y29sdW1uUmVjdEF0KGNvbEluZm8tPmNvbHVtbkNvdW50KCkgLSAxKS54KCkgKyByZWxh
dGl2ZU9mZnNldCwgbGVmdCk7CisgICAgICAgICAgICB1bnNpZ25lZCBjb3VudCA9IGNvbHVtbkNv
dW50KGNvbEluZm8pOworICAgICAgICAgICAgaWYgKGNvdW50KQorICAgICAgICAgICAgICAgIGxl
ZnQgPSBtaW4oY29sdW1uUmVjdEF0KGNvbEluZm8sIGNvdW50IC0gMSkueCgpICsgcmVsYXRpdmVP
ZmZzZXQsIGxlZnQpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBsZWZ0OwogICAgIH0KQEAg
LTM2NDcsNiArMzg0NSw5IEBAIGJvb2wgUmVuZGVyQmxvY2s6OmNvbnRhaW5zRmxvYXQoUmVuZGVy
T2IKIAogdm9pZCBSZW5kZXJCbG9jazo6bWFya0FsbERlc2NlbmRhbnRzV2l0aEZsb2F0c0Zvckxh
eW91dChSZW5kZXJCb3gqIGZsb2F0VG9SZW1vdmUsIGJvb2wgaW5MYXlvdXQpCiB7CisgICAgaWYg
KCFtX2V2ZXJIYWRMYXlvdXQpCisgICAgICAgIHJldHVybjsKKwogICAgIHNldENoaWxkTmVlZHNM
YXlvdXQodHJ1ZSwgIWluTGF5b3V0KTsKIAogICAgIGlmIChmbG9hdFRvUmVtb3ZlKQpAQCAtMzY2
NCwzMCArMzg2NSwzOSBAQCB2b2lkIFJlbmRlckJsb2NrOjptYXJrQWxsRGVzY2VuZGFudHNXaXRo
CiAgICAgfQogfQogCi1pbnQgUmVuZGVyQmxvY2s6OnZpc2libGVUb3BPZkhpZ2hlc3RGbG9hdEV4
dGVuZGluZ0JlbG93KGludCBib3R0b20sIGludCBtYXhIZWlnaHQpIGNvbnN0Cit2b2lkIFJlbmRl
ckJsb2NrOjptYXJrRGVzY2VuZGFudEJsb2Nrc0FuZExpbmVzRm9yTGF5b3V0KGJvb2wgaW5MYXlv
dXQpCiB7Ci0gICAgaW50IHRvcCA9IGJvdHRvbTsKLSAgICBpZiAobV9mbG9hdGluZ09iamVjdHMp
IHsKLSAgICAgICAgRmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0OwotICAgICAgICBmb3Ig
KERlcHJlY2F0ZWRQdHJMaXN0SXRlcmF0b3I8RmxvYXRpbmdPYmplY3Q+IGl0KCptX2Zsb2F0aW5n
T2JqZWN0cyk7IChmbG9hdGluZ09iamVjdCA9IGl0LmN1cnJlbnQoKSk7ICsraXQpIHsKLSAgICAg
ICAgICAgIFJlbmRlckJveCogZmxvYXRpbmdCb3ggPSBmbG9hdGluZ09iamVjdC0+bV9yZW5kZXJl
cjsKLSAgICAgICAgICAgIEludFJlY3QgdmlzaWJsZU92ZXJmbG93ID0gZmxvYXRpbmdCb3gtPnZp
c2libGVPdmVyZmxvd1JlY3QoKTsKLSAgICAgICAgICAgIHZpc2libGVPdmVyZmxvdy5tb3ZlKGZs
b2F0aW5nQm94LT54KCksIGZsb2F0aW5nQm94LT55KCkpOwotICAgICAgICAgICAgaWYgKHZpc2li
bGVPdmVyZmxvdy55KCkgPCB0b3AgJiYgdmlzaWJsZU92ZXJmbG93LmJvdHRvbSgpID4gYm90dG9t
ICYmIHZpc2libGVPdmVyZmxvdy5oZWlnaHQoKSA8PSBtYXhIZWlnaHQgJiYgZmxvYXRpbmdCb3gt
PmNvbnRhaW5pbmdCbG9jaygpID09IHRoaXMpCi0gICAgICAgICAgICAgICAgdG9wID0gdmlzaWJs
ZU92ZXJmbG93LnkoKTsKLSAgICAgICAgfQotICAgIH0KKyAgICBpZiAoIW1fZXZlckhhZExheW91
dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0Q2hpbGROZWVkc0xheW91dCh0cnVlLCAhaW5M
YXlvdXQpOwogCisgICAgLy8gSXRlcmF0ZSBvdmVyIG91ciBjaGlsZHJlbiBhbmQgbWFyayB0aGVt
IGFzIG5lZWRlZC4KICAgICBpZiAoIWNoaWxkcmVuSW5saW5lKCkpIHsKLSAgICAgICAgZm9yIChS
ZW5kZXJPYmplY3QqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+
bmV4dFNpYmxpbmcoKSkgewotICAgICAgICAgICAgaWYgKGNoaWxkLT5pc0Zsb2F0aW5nT3JQb3Np
dGlvbmVkKCkgfHwgIWNoaWxkLT5pc1JlbmRlckJsb2NrKCkpCisgICAgICAgIGZvciAoUmVuZGVy
Qm94KiBjaGlsZCA9IGZpcnN0Q2hpbGRCb3goKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRT
aWJsaW5nQm94KCkpIHsKKyAgICAgICAgICAgIGlmIChjaGlsZC0+aXNGbG9hdGluZ09yUG9zaXRp
b25lZCgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgUmVuZGVyQmxv
Y2sqIGNoaWxkQmxvY2sgPSB0b1JlbmRlckJsb2NrKGNoaWxkKTsKLSAgICAgICAgICAgIHRvcCA9
IG1pbih0b3AsIGNoaWxkQmxvY2stPnkoKSArIGNoaWxkQmxvY2stPnZpc2libGVUb3BPZkhpZ2hl
c3RGbG9hdEV4dGVuZGluZ0JlbG93KGJvdHRvbSAtIGNoaWxkQmxvY2stPnkoKSwgbWF4SGVpZ2h0
KSk7CisgICAgICAgICAgICBjaGlsZC0+bWFya0Rlc2NlbmRhbnRCbG9ja3NBbmRMaW5lc0Zvckxh
eW91dChpbkxheW91dCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gV2FsayBvdXIg
ZmxvYXRpbmcgb2JqZWN0cyBhbmQgbWFyayB0aGVtIHRvby4KKyAgICBpZiAobV9mbG9hdGluZ09i
amVjdHMpIHsKKyAgICAgICAgRGVwcmVjYXRlZFB0ckxpc3RJdGVyYXRvcjxGbG9hdGluZ09iamVj
dD4gaXQoKm1fZmxvYXRpbmdPYmplY3RzKTsKKyAgICAgICAgd2hpbGUgKGl0LmN1cnJlbnQoKSkg
eworICAgICAgICAgICAgaWYgKGl0LmN1cnJlbnQoKS0+bV9yZW5kZXJlci0+aXNSZW5kZXJCbG9j
aygpKQorICAgICAgICAgICAgICAgIGl0LmN1cnJlbnQoKS0+bV9yZW5kZXJlci0+bWFya0Rlc2Nl
bmRhbnRCbG9ja3NBbmRMaW5lc0ZvckxheW91dChpbkxheW91dCk7CisgICAgICAgICAgICArK2l0
OwogICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIHRvcDsKKyAgICBpZiAobV9wb3NpdGlv
bmVkT2JqZWN0cykgeworICAgICAgICAvLyBGSVhNRTogVGVjaG5pY2FsbHkgd2UgZG9uJ3QgaGF2
ZSB0byBtYXJrIHRoZSBwb3NpdGlvbmVkIG9iamVjdHMgaWYgd2UncmUgdGhlIGJsb2NrCisgICAg
ICAgIC8vIHRoYXQgZXN0YWJsaXNoZWQgdGhlIGNvbHVtbnMsIGJ1dCB3ZSBkb24ndCByZWFsbHkg
aGF2ZSB0aGF0IGluZm9ybWF0aW9uIGhlcmUuCisgICAgICAgIEl0ZXJhdG9yIGVuZCA9IG1fcG9z
aXRpb25lZE9iamVjdHMtPmVuZCgpOworICAgICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gbV9wb3Np
dGlvbmVkT2JqZWN0cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgKCpp
dCktPm1hcmtEZXNjZW5kYW50QmxvY2tzQW5kTGluZXNGb3JMYXlvdXQoKTsKKyAgICB9CiB9CiAK
IGludCBSZW5kZXJCbG9jazo6Z2V0Q2xlYXJEZWx0YShSZW5kZXJCb3gqIGNoaWxkLCBpbnQgeVBv
cykKQEAgLTM4NDcsMTYgKzQwNTcsMTYgQEAgYm9vbCBSZW5kZXJCbG9jazo6aGl0VGVzdENvbHVt
bnMoY29uc3QgSAogewogICAgIC8vIFdlIG5lZWQgdG8gZG8gbXVsdGlwbGUgcGFzc2VzLCBicmVh
a2luZyB1cCBvdXIgaGl0IHRlc3RpbmcgaW50byBzdHJpcHMuCiAgICAgQ29sdW1uSW5mbyogY29s
SW5mbyA9IGNvbHVtbkluZm8oKTsKLSAgICBpbnQgY29sQ291bnQgPSBjb2xJbmZvLT5jb2x1bW5D
b3VudCgpOworICAgIGludCBjb2xDb3VudCA9IGNvbHVtbkNvdW50KGNvbEluZm8pOwogICAgIGlm
ICghY29sQ291bnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbnQgbGVmdCA9IGJvcmRl
ckxlZnQoKSArIHBhZGRpbmdMZWZ0KCk7CiAgICAgaW50IGN1cnJZT2Zmc2V0ID0gMDsKICAgICBp
bnQgaTsKICAgICBmb3IgKGkgPSAwOyBpIDwgY29sQ291bnQ7IGkrKykKLSAgICAgICAgY3VycllP
ZmZzZXQgLT0gY29sSW5mby0+Y29sdW1uUmVjdEF0KGkpLmhlaWdodCgpOworICAgICAgICBjdXJy
WU9mZnNldCAtPSBjb2x1bW5SZWN0QXQoY29sSW5mbywgaSkuaGVpZ2h0KCk7CiAgICAgZm9yIChp
ID0gY29sQ291bnQgLSAxOyBpID49IDA7IGktLSkgewotICAgICAgICBJbnRSZWN0IGNvbFJlY3Qg
PSBjb2xJbmZvLT5jb2x1bW5SZWN0QXQoaSk7CisgICAgICAgIEludFJlY3QgY29sUmVjdCA9IGNv
bHVtblJlY3RBdChjb2xJbmZvLCBpKTsKICAgICAgICAgaW50IGN1cnJYT2Zmc2V0ID0gY29sUmVj
dC54KCkgLSBsZWZ0OwogICAgICAgICBjdXJyWU9mZnNldCArPSBjb2xSZWN0LmhlaWdodCgpOwog
ICAgICAgICBjb2xSZWN0Lm1vdmUodHgsIHR5KTsKQEAgLTQxNTAsOCArNDM2MCw3IEBAIHZvaWQg
UmVuZGVyQmxvY2s6OnNldERlc2lyZWRDb2x1bW5Db3VudEEKICAgICBib29sIGRlc3Ryb3lDb2x1
bW5zID0gIWZpcnN0Q2hpbGQoKQogICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoY291bnQg
PT0gMSAmJiBzdHlsZSgpLT5oYXNBdXRvQ29sdW1uV2lkdGgoKSkKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfHwgZmlyc3RDaGlsZCgpLT5pc0Fub255bW91c0NvbHVtbnNCbG9jaygpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgIHx8IGZpcnN0Q2hpbGQoKS0+aXNBbm9ueW1vdXNDb2x1bW5T
cGFuQmxvY2soKQotICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBkb2N1bWVudCgpLT5zZXR0
aW5ncygpLT5wYWdpbmF0ZUR1cmluZ0xheW91dEVuYWJsZWQoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgfHwgZmlyc3RDaGlsZCgpLT5pc0Fub255bW91c0NvbHVtblNwYW5CbG9jaygpOwog
ICAgIGlmIChkZXN0cm95Q29sdW1ucykgewogICAgICAgICBpZiAoaGFzQ29sdW1ucygpKSB7CiAg
ICAgICAgICAgICBkZWxldGUgZ0NvbHVtbkluZm9NYXAtPnRha2UodGhpcyk7CkBAIC00MTk0LDEz
MyArNDQwMyw3NSBAQCBDb2x1bW5JbmZvKiBSZW5kZXJCbG9jazo6Y29sdW1uSW5mbygpIGNvCiAg
ICAgcmV0dXJuIGdDb2x1bW5JbmZvTWFwLT5nZXQodGhpcyk7ICAgIAogfQogCi1pbnQgUmVuZGVy
QmxvY2s6OmxheW91dENvbHVtbnMoaW50IGVuZE9mQ29udGVudCwgaW50IHJlcXVlc3RlZENvbHVt
bkhlaWdodCkKK3Vuc2lnbmVkIFJlbmRlckJsb2NrOjpjb2x1bW5Db3VudChDb2x1bW5JbmZvKiBj
b2xJbmZvKSBjb25zdAogewotICAgIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIHdlIGhhdmUgbm8g
Y29sdW1ucwotICAgIGlmICghaGFzQ29sdW1ucygpKQotICAgICAgICByZXR1cm4gLTE7CisgICAg
QVNTRVJUKGhhc0NvbHVtbnMoKSAmJiBnQ29sdW1uSW5mb01hcC0+Z2V0KHRoaXMpID09IGNvbElu
Zm8pOworICAgIHJldHVybiBjb2xJbmZvLT5jb2x1bW5Db3VudCgpOworfQogCi0gICAgQ29sdW1u
SW5mbyogaW5mbyA9IGdDb2x1bW5JbmZvTWFwLT5nZXQodGhpcyk7Ci0gICAgaW50IGRlc2lyZWRD
b2x1bW5XaWR0aCA9IGluZm8tPmRlc2lyZWRDb2x1bW5XaWR0aCgpOwotICAgIGludCBkZXNpcmVk
Q29sdW1uQ291bnQgPSBpbmZvLT5kZXNpcmVkQ29sdW1uQ291bnQoKTsKLSAgICAKLSAgICBib29s
IGNvbXB1dGVJbnRyaW5zaWNIZWlnaHQgPSAoZW5kT2ZDb250ZW50ID09IC0xKTsKLQotICAgIC8v
IEZpbGwgdGhlIGNvbHVtbnMgaW4gdG8gdGhlIGF2YWlsYWJsZSBoZWlnaHQuICBBdHRlbXB0IHRv
IGJhbGFuY2UgdGhlIGhlaWdodCBvZiB0aGUgY29sdW1ucy4KLSAgICAvLyBBZGQgaW4gaGFsZiBv
dXIgbGluZS1oZWlnaHQgdG8gaGVscCB3aXRoIGJlc3QtZ3Vlc3MgaW5pdGlhbCBiYWxhbmNpbmcu
Ci0gICAgaW50IGNvbHVtblNsb3AgPSBsaW5lSGVpZ2h0KGZhbHNlKSAvIDI7Ci0gICAgaW50IHJl
bWFpbmluZ1Nsb3BTcGFjZSA9IGNvbHVtblNsb3AgKiBkZXNpcmVkQ29sdW1uQ291bnQ7Ci0gICAg
aW50IGF2YWlsYWJsZUhlaWdodCA9IGNvbnRlbnRIZWlnaHQoKTsKLSAgICBpbnQgY29sSGVpZ2h0
OwotICAgIGlmIChjb21wdXRlSW50cmluc2ljSGVpZ2h0ICYmIHJlcXVlc3RlZENvbHVtbkhlaWdo
dCA+PSAwKQotICAgICAgICBjb2xIZWlnaHQgPSByZXF1ZXN0ZWRDb2x1bW5IZWlnaHQ7Ci0gICAg
ZWxzZSBpZiAoY29tcHV0ZUludHJpbnNpY0hlaWdodCkKLSAgICAgICAgY29sSGVpZ2h0ID0gbWlu
KGF2YWlsYWJsZUhlaWdodCwgYXZhaWxhYmxlSGVpZ2h0IC8gZGVzaXJlZENvbHVtbkNvdW50ICsg
Y29sdW1uU2xvcCk7Ci0gICAgZWxzZQotICAgICAgICBjb2xIZWlnaHQgPSBhdmFpbGFibGVIZWln
aHQ7Ci0gICAgaW50IG9yaWdpbmFsQ29sSGVpZ2h0ID0gY29sSGVpZ2h0OworSW50UmVjdCBSZW5k
ZXJCbG9jazo6Y29sdW1uUmVjdEF0KENvbHVtbkluZm8qIGNvbEluZm8sIHVuc2lnbmVkIGluZGV4
KSBjb25zdAoreworICAgIEFTU0VSVChoYXNDb2x1bW5zKCkgJiYgZ0NvbHVtbkluZm9NYXAtPmdl
dCh0aGlzKSA9PSBjb2xJbmZvKTsKIAorICAgIC8vIENvbXB1dGUgdGhlIGFwcHJvcHJpYXRlIHJl
Y3QgYmFzZWQgb2ZmIG91ciBpbmZvcm1hdGlvbi4KKyAgICBpbnQgY29sV2lkdGggPSBjb2xJbmZv
LT5kZXNpcmVkQ29sdW1uV2lkdGgoKTsKKyAgICBpbnQgY29sSGVpZ2h0ID0gY29sSW5mby0+Y29s
dW1uSGVpZ2h0KCk7CisgICAgaW50IGNvbFRvcCA9IGJvcmRlclRvcCgpICsgcGFkZGluZ1RvcCgp
OwogICAgIGludCBjb2xHYXAgPSBjb2x1bW5HYXAoKTsKKyAgICBpbnQgY29sTGVmdCA9IHN0eWxl
KCktPmRpcmVjdGlvbigpID09IExUUiA/IAorICAgICAgICAgICAgICAgICAgICAgIGJvcmRlckxl
ZnQoKSArIHBhZGRpbmdMZWZ0KCkgKyAoaW5kZXggKiAoY29sV2lkdGggKyBjb2xHYXApKQorICAg
ICAgICAgICAgICAgICAgICAgIDogYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKSArIGNvbnRl
bnRXaWR0aCgpIC0gY29sV2lkdGggLSAoaW5kZXggKiAoY29sV2lkdGggKyBjb2xHYXApKTsKKyAg
ICByZXR1cm4gSW50UmVjdChjb2xMZWZ0LCBjb2xUb3AsIGNvbFdpZHRoLCBjb2xIZWlnaHQpOwor
fQogCi0gICAgLy8gQ29tcHV0ZSBhIGNvbGxlY3Rpb24gb2YgY29sdW1uIHJlY3RzLgotICAgIGlu
Zm8tPmNsZWFyQ29sdW1ucygpOwotICAgIAotICAgIC8vIFRoZW4gd2UgZG8gYSBzaW11bGF0ZWQg
InBhaW50IiBpbnRvIHRoZSBjb2x1bW4gc2xpY2VzIGFuZCBhbGxvdyB0aGUgY29udGVudCB0byBz
bGlnaHRseSBhZGp1c3Qgb3VyIGluZGl2aWR1YWwgY29sdW1uIHJlY3RzLgotICAgIC8vIEZJWE1F
OiBXZSBuZWVkIHRvIHRha2UgaW50byBhY2NvdW50IGxheWVycyB0aGF0IGFyZSBhZmZlY3RlZCBi
eSB0aGUgY29sdW1ucyBhcyB3ZWxsIGhlcmUgc28gdGhhdCB0aGV5IGNhbiBoYXZlIGFuIG9wcG9y
dHVuaXR5Ci0gICAgLy8gdG8gYWRqdXN0IGNvbHVtbiByZWN0cyBhbHNvLgotICAgIFJlbmRlclZp
ZXcqIHYgPSB2aWV3KCk7Ci0gICAgaW50IGxlZnQgPSBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVm
dCgpOwotICAgIGludCB0b3AgPSBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKTsKLSAgICBpbnQg
Y3VyclggPSBzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIgPyBib3JkZXJMZWZ0KCkgKyBwYWRk
aW5nTGVmdCgpIDogYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKSArIGNvbnRlbnRXaWR0aCgp
IC0gZGVzaXJlZENvbHVtbldpZHRoOwotICAgIGludCBjdXJyWSA9IHRvcDsKLSAgICB1bnNpZ25l
ZCBjb2xDb3VudCA9IGRlc2lyZWRDb2x1bW5Db3VudDsKLSAgICBpbnQgbWF4Q29sQm90dG9tID0g
Ym9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCk7Ci0gICAgaW50IGNvbnRlbnRCb3R0b20gPSB0b3Ag
KyBhdmFpbGFibGVIZWlnaHQ7Ci0gICAgaW50IG1pbmltdW1Db2x1bW5IZWlnaHQgPSAtMTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY29sQ291bnQ7IGkrKykgewotICAgICAgICAvLyBJ
ZiB3ZSBhcmVuJ3QgY29uc3RyYWluZWQsIHRoZW4gdGhlIGxhc3QgY29sdW1uIGNhbiBqdXN0IGdl
dCBhbGwgdGhlIHJlbWFpbmluZyBzcGFjZS4KLSAgICAgICAgaWYgKGNvbXB1dGVJbnRyaW5zaWNI
ZWlnaHQgJiYgaSA9PSBjb2xDb3VudCAtIDEpCi0gICAgICAgICAgICBjb2xIZWlnaHQgPSBhdmFp
bGFibGVIZWlnaHQ7Ci0KLSAgICAgICAgLy8gVGhpcyByZXByZXNlbnRzIHRoZSByZWFsIGNvbHVt
biBwb3NpdGlvbi4KLSAgICAgICAgSW50UmVjdCBjb2xSZWN0KGN1cnJYLCB0b3AsIGRlc2lyZWRD
b2x1bW5XaWR0aCwgY29sSGVpZ2h0KTsKLQotICAgICAgICBpbnQgdHJ1bmNhdGlvblBvaW50ID0g
dmlzaWJsZVRvcE9mSGlnaGVzdEZsb2F0RXh0ZW5kaW5nQmVsb3coY3VyclkgKyBjb2xIZWlnaHQs
IGNvbEhlaWdodCk7Ci0KLSAgICAgICAgLy8gRm9yIHRoZSBzaW11bGF0ZWQgcGFpbnQsIHdlIHBy
ZXRlbmQgbGlrZSBldmVyeXRoaW5nIGlzIGluIG9uZSBsb25nIHN0cmlwLgotICAgICAgICBJbnRS
ZWN0IHBhZ2VSZWN0KGxlZnQsIGN1cnJZLCBjb250ZW50V2lkdGgoKSwgdHJ1bmNhdGlvblBvaW50
IC0gY3VyclkpOwotICAgICAgICB2LT5zZXRQcmludFJlY3QocGFnZVJlY3QpOwotICAgICAgICB2
LT5zZXRUcnVuY2F0ZWRBdCh0cnVuY2F0aW9uUG9pbnQpOwotICAgICAgICBHcmFwaGljc0NvbnRl
eHQgY29udGV4dCgoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqKTApOwotICAgICAgICBQYWludElu
Zm8gcGFpbnRJbmZvKCZjb250ZXh0LCBwYWdlUmVjdCwgUGFpbnRQaGFzZUZvcmVncm91bmQsIGZh
bHNlLCAwLCAwKTsKLSAgICAgICAgCi0gICAgICAgIHNldEhhc0NvbHVtbnMoZmFsc2UpOwotICAg
ICAgICBwYWludE9iamVjdChwYWludEluZm8sIDAsIDApOwotICAgICAgICBzZXRIYXNDb2x1bW5z
KHRydWUpOwotCi0gICAgICAgIGlmIChjb21wdXRlSW50cmluc2ljSGVpZ2h0ICYmIHYtPm1pbmlt
dW1Db2x1bW5IZWlnaHQoKSA+IG9yaWdpbmFsQ29sSGVpZ2h0KSB7Ci0gICAgICAgICAgICAvLyBU
aGUgaW5pdGlhbCBjb2x1bW4gaGVpZ2h0IHdhcyB0b28gc21hbGwgdG8gY29udGFpbiBvbmUgbGlu
ZSBvZiB0ZXh0LgotICAgICAgICAgICAgbWluaW11bUNvbHVtbkhlaWdodCA9IG1heChtaW5pbXVt
Q29sdW1uSGVpZ2h0LCB2LT5taW5pbXVtQ29sdW1uSGVpZ2h0KCkpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaW50IGFkanVzdGVkQm90dG9tID0gdi0+YmVzdFRydW5jYXRlZEF0KCk7Ci0gICAgICAg
IGlmIChhZGp1c3RlZEJvdHRvbSA8PSBjdXJyWSkKLSAgICAgICAgICAgIGFkanVzdGVkQm90dG9t
ID0gdHJ1bmNhdGlvblBvaW50OwotICAgICAgICAKLSAgICAgICAgY29sUmVjdC5zZXRIZWlnaHQo
YWRqdXN0ZWRCb3R0b20gLSBjdXJyWSk7Ci0gICAgICAgIAotICAgICAgICAvLyBBZGQgaW4gdGhl
IGxvc3Qgc3BhY2UgdG8gdGhlIHN1YnNlcXVlbnQgY29sdW1ucy4KLSAgICAgICAgLy8gRklYTUU6
IFRoaXMgd2lsbCBjcmVhdGUgYSAic3RhaXJjYXNlIiBlZmZlY3QgaWYgdGhlcmUgYXJlIGVub3Vn
aCBjb2x1bW5zLCBidXQgdGhlIGVmZmVjdCBzaG91bGQgYmUgcHJldHR5IHN1YnRsZS4KLSAgICAg
ICAgaWYgKGNvbXB1dGVJbnRyaW5zaWNIZWlnaHQpIHsKLSAgICAgICAgICAgIGludCBsb3N0U3Bh
Y2UgPSBjb2xIZWlnaHQgLSBjb2xSZWN0LmhlaWdodCgpOwotICAgICAgICAgICAgaWYgKGxvc3RT
cGFjZSA+IHJlbWFpbmluZ1Nsb3BTcGFjZSkgewotICAgICAgICAgICAgICAgIC8vIFJlZGVzdHJp
YnV0ZSB0aGUgc3BhY2UgYW1vbmcgdGhlIHJlbWFpbmluZyBjb2x1bW5zLgotICAgICAgICAgICAg
ICAgIGludCBzcGFjZVRvUmVkaXN0cmlidXRlID0gbG9zdFNwYWNlIC0gcmVtYWluaW5nU2xvcFNw
YWNlOwotICAgICAgICAgICAgICAgIGludCByZW1haW5pbmdDb2x1bW5zID0gY29sQ291bnQgLSBp
ICsgMTsKLSAgICAgICAgICAgICAgICBjb2xIZWlnaHQgKz0gc3BhY2VUb1JlZGlzdHJpYnV0ZSAv
IHJlbWFpbmluZ0NvbHVtbnM7Ci0gICAgICAgICAgICB9IAotICAgICAgICAgICAgcmVtYWluaW5n
U2xvcFNwYWNlID0gbWF4KDAsIHJlbWFpbmluZ1Nsb3BTcGFjZSAtIGxvc3RTcGFjZSk7Ci0gICAg
ICAgIH0KK2Jvb2wgUmVuZGVyQmxvY2s6OmxheW91dENvbHVtbnMoYm9vbCBoYXNTcGVjaWZpZWRQ
YWdlSGVpZ2h0LCBpbnQgcGFnZUhlaWdodCwgTGF5b3V0U3RhdGVNYWludGFpbmVyJiBzdGF0ZVB1
c2hlcikKK3sKKyAgICBpZiAoaGFzQ29sdW1ucygpKSB7CisgICAgICAgIC8vIEZJWE1FOiBXZSBk
b24ndCBiYWxhbmNlIHByb3Blcmx5IGF0IGFsbCBpbiB0aGUgcHJlc2VuY2Ugb2YgZm9yY2VkIHBh
Z2UgYnJlYWtzLiAgV2UgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQKKyAgICAgICAgLy8gdGhlIGRp
c3RhbmNlIGJldHdlZW4gZm9yY2VkIHBhZ2UgYnJlYWtzIGlzIHNvIHRoYXQgd2UgY2FuIGF2b2lk
IG1ha2luZyB0aGUgbWluaW11bSBjb2x1bW4gaGVpZ2h0IHRvbyB0YWxsLgorICAgICAgICBDb2x1
bW5JbmZvKiBjb2xJbmZvID0gY29sdW1uSW5mbygpOworICAgICAgICBpbnQgZGVzaXJlZENvbHVt
bkNvdW50ID0gY29sSW5mby0+ZGVzaXJlZENvbHVtbkNvdW50KCk7CisgICAgICAgIGlmICghaGFz
U3BlY2lmaWVkUGFnZUhlaWdodCkgeworICAgICAgICAgICAgaW50IGNvbHVtbkhlaWdodCA9IHBh
Z2VIZWlnaHQ7CisgICAgICAgICAgICBpbnQgbWluQ29sdW1uQ291bnQgPSBjb2xJbmZvLT5mb3Jj
ZWRCcmVha3MoKSArIDE7CisgICAgICAgICAgICBpZiAobWluQ29sdW1uQ291bnQgPj0gZGVzaXJl
ZENvbHVtbkNvdW50KSB7CisgICAgICAgICAgICAgICAgLy8gVGhlIGZvcmNlZCBwYWdlIGJyZWFr
cyBhcmUgaW4gY29udHJvbCBvZiB0aGUgYmFsYW5jaW5nLiAgSnVzdCBzZXQgdGhlIGNvbHVtbiBo
ZWlnaHQgdG8gdGhlCisgICAgICAgICAgICAgICAgLy8gbWF4aW11bSBwYWdlIGJyZWFrIGRpc3Rh
bmNlLgorICAgICAgICAgICAgICAgIGlmICghcGFnZUhlaWdodCkgeworICAgICAgICAgICAgICAg
ICAgICBpbnQgZGlzdGFuY2VCZXR3ZWVuQnJlYWtzID0gbWF4KGNvbEluZm8tPm1heGltdW1EaXN0
YW5jZUJldHdlZW5Gb3JjZWRCcmVha3MoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2aWV3KCktPmxheW91dFN0YXRlKCktPnBhZ2VZKGJvcmRl
clRvcCgpICsgcGFkZGluZ1RvcCgpICsgY29udGVudEhlaWdodCgpKSAtIGNvbEluZm8tPmZvcmNl
ZEJyZWFrT2Zmc2V0KCkpOworICAgICAgICAgICAgICAgICAgICBjb2x1bW5IZWlnaHQgPSBtYXgo
Y29sSW5mby0+bWluaW11bUNvbHVtbkhlaWdodCgpLCBkaXN0YW5jZUJldHdlZW5CcmVha3MpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoY29udGVudEhlaWdodCgp
ID4gcGFnZUhlaWdodCAqIGRlc2lyZWRDb2x1bW5Db3VudCkgeworICAgICAgICAgICAgICAgIC8v
IE5vdyB0aGF0IHdlIGtub3cgdGhlIGludHJpbnNpYyBoZWlnaHQgb2YgdGhlIGNvbHVtbnMsIHdl
IGhhdmUgdG8gcmViYWxhbmNlIHRoZW0uCisgICAgICAgICAgICAgICAgY29sdW1uSGVpZ2h0ID0g
bWF4KGNvbEluZm8tPm1pbmltdW1Db2x1bW5IZWlnaHQoKSwgKGludCljZWlsZigoZmxvYXQpY29u
dGVudEhlaWdodCgpIC8gZGVzaXJlZENvbHVtbkNvdW50KSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGlmIChjb2x1bW5IZWlnaHQgJiYgY29sdW1uSGVpZ2h0ICE9
IHBhZ2VIZWlnaHQpIHsKKyAgICAgICAgICAgICAgICBzdGF0ZVB1c2hlci5wb3AoKTsKKyAgICAg
ICAgICAgICAgICBtX2V2ZXJIYWRMYXlvdXQgPSB0cnVlOworICAgICAgICAgICAgICAgIGxheW91
dEJsb2NrKGZhbHNlLCBjb2x1bW5IZWlnaHQpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICAgICAgfQorICAgICAgICB9IAogICAgICAgICAKLSAgICAgICAgaWYgKHN0eWxl
KCktPmRpcmVjdGlvbigpID09IExUUikKLSAgICAgICAgICAgIGN1cnJYICs9IGRlc2lyZWRDb2x1
bW5XaWR0aCArIGNvbEdhcDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY3VyclggLT0gKGRl
c2lyZWRDb2x1bW5XaWR0aCArIGNvbEdhcCk7Ci0KLSAgICAgICAgY3VyclkgKz0gY29sUmVjdC5o
ZWlnaHQoKTsKLSAgICAgICAgYXZhaWxhYmxlSGVpZ2h0IC09IGNvbFJlY3QuaGVpZ2h0KCk7Ci0K
LSAgICAgICAgbWF4Q29sQm90dG9tID0gbWF4KGNvbFJlY3QuYm90dG9tKCksIG1heENvbEJvdHRv
bSk7CisgICAgICAgIGlmIChwYWdlSGVpZ2h0KSAvLyBGSVhNRTogU2hvdWxkIHdlIHVzZSBsb3dl
c3RQb3NpdGlvbiAoZXhjbHVkaW5nIG91ciBwb3NpdGlvbmVkIG9iamVjdHMpIGluc3RlYWQgb2Yg
Y29udGVudEhlaWdodCgpPworICAgICAgICAgICAgY29sSW5mby0+c2V0Q29sdW1uQ291bnRBbmRI
ZWlnaHQoY2VpbGYoKGZsb2F0KWNvbnRlbnRIZWlnaHQoKSAvIHBhZ2VIZWlnaHQpLCBwYWdlSGVp
Z2h0KTsKIAotICAgICAgICBpbmZvLT5hZGRDb2x1bW5SZWN0KGNvbFJlY3QpOwotICAgICAgICAK
LSAgICAgICAgLy8gU3RhcnQgYWRkaW5nIGluIG1vcmUgY29sdW1ucyBhcyBsb25nIGFzIHRoZXJl
J3Mgc3RpbGwgY29udGVudCBsZWZ0LgotICAgICAgICBpZiAoY3VyclkgPCBlbmRPZkNvbnRlbnQg
JiYgaSA9PSBjb2xDb3VudCAtIDEgJiYgKGNvbXB1dGVJbnRyaW5zaWNIZWlnaHQgfHwgY29udGVu
dEhlaWdodCgpKSkKLSAgICAgICAgICAgIGNvbENvdW50Kys7Ci0gICAgfQorICAgICAgICBpZiAo
Y29sdW1uQ291bnQoY29sSW5mbykpIHsKKyAgICAgICAgICAgIEludFJlY3QgbGFzdFJlY3QgPSBj
b2x1bW5SZWN0QXQoY29sSW5mbywgY29sdW1uQ291bnQoY29sSW5mbykgLSAxKTsKKyAgICAgICAg
ICAgIGludCBvdmVyZmxvd0xlZnQgPSBzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBSVEwgPyBtaW4o
MCwgbGFzdFJlY3QueCgpKSA6IDA7CisgICAgICAgICAgICBpbnQgb3ZlcmZsb3dSaWdodCA9IHN0
eWxlKCktPmRpcmVjdGlvbigpID09IExUUiA/IG1heCh3aWR0aCgpLCBsYXN0UmVjdC54KCkgKyBs
YXN0UmVjdC53aWR0aCgpKSA6IDA7CisgICAgICAgICAgICBpbnQgb3ZlcmZsb3dIZWlnaHQgPSBi
b3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKSArIGNvbEluZm8tPmNvbHVtbkhlaWdodCgpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBzZXRIZWlnaHQob3ZlcmZsb3dIZWlnaHQgKyBib3JkZXJC
b3R0b20oKSArIHBhZGRpbmdCb3R0b20oKSArIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoKSk7
CiAKLSAgICBpZiAobWluaW11bUNvbHVtbkhlaWdodCA+PSAwKSB7Ci0gICAgICAgIC8vIElmIG9y
aWdpbmFsQ29sSGVpZ2h0IHdhcyB0b28gc21hbGwsIHdlIG5lZWQgdG8gdHJ5IHRvIGxheW91dCBh
Z2Fpbi4KLSAgICAgICAgcmV0dXJuIGxheW91dENvbHVtbnMoZW5kT2ZDb250ZW50LCBtaW5pbXVt
Q29sdW1uSGVpZ2h0KTsKKyAgICAgICAgICAgIG1fb3ZlcmZsb3cuY2xlYXIoKTsKKyAgICAgICAg
ICAgIGFkZExheW91dE92ZXJmbG93KEludFJlY3Qob3ZlcmZsb3dMZWZ0LCAwLCBvdmVyZmxvd1Jp
Z2h0IC0gb3ZlcmZsb3dMZWZ0LCBvdmVyZmxvd0hlaWdodCkpOworICAgICAgICB9CiAgICAgfQot
Ci0gICAgaW50IG92ZXJmbG93UmlnaHQgPSBtYXgod2lkdGgoKSwgY3VyclggLSBjb2xHYXApOwot
ICAgIGludCBvdmVyZmxvd0xlZnQgPSBtaW4oMCwgY3VyclggKyBkZXNpcmVkQ29sdW1uV2lkdGgg
KyBjb2xHYXApOwotICAgIGludCBvdmVyZmxvd0hlaWdodCA9IG1heENvbEJvdHRvbTsKLSAgICBp
bnQgdG9BZGQgPSBib3JkZXJCb3R0b20oKSArIHBhZGRpbmdCb3R0b20oKSArIGhvcml6b250YWxT
Y3JvbGxiYXJIZWlnaHQoKTsKLSAgICAgICAgCi0gICAgaWYgKGNvbXB1dGVJbnRyaW5zaWNIZWln
aHQpCi0gICAgICAgIHNldEhlaWdodChtYXhDb2xCb3R0b20gKyB0b0FkZCk7Ci0KLSAgICBtX292
ZXJmbG93LmNsZWFyKCk7Ci0gICAgYWRkTGF5b3V0T3ZlcmZsb3coSW50UmVjdChvdmVyZmxvd0xl
ZnQsIDAsIG92ZXJmbG93UmlnaHQgLSBvdmVyZmxvd0xlZnQsIG92ZXJmbG93SGVpZ2h0KSk7Ci0K
LSAgICB2LT5zZXRQcmludFJlY3QoSW50UmVjdCgpKTsKLSAgICB2LT5zZXRUcnVuY2F0ZWRBdCgw
KTsKLSAgICAKLSAgICBBU1NFUlQoY29sQ291bnQgPT0gaW5mby0+Y29sdW1uQ291bnQoKSk7CiAg
ICAgCi0gICAgcmV0dXJuIGNvbnRlbnRCb3R0b207CisgICAgcmV0dXJuIGZhbHNlOwogfQogCiB2
b2lkIFJlbmRlckJsb2NrOjphZGp1c3RQb2ludFRvQ29sdW1uQ29udGVudHMoSW50UG9pbnQmIHBv
aW50KSBjb25zdApAQCAtNDMzMCwxNyArNDQ4MSwxNyBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGp1
c3RQb2ludFRvQ29sdW1uQ29uCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBDb2x1bW5JbmZv
KiBjb2xJbmZvID0gY29sdW1uSW5mbygpOwotICAgIGlmICghY29sSW5mby0+Y29sdW1uQ291bnQo
KSkKKyAgICBpZiAoIWNvbHVtbkNvdW50KGNvbEluZm8pKQogICAgICAgICByZXR1cm47CiAKICAg
ICAvLyBEZXRlcm1pbmUgd2hpY2ggY29sdW1ucyB3ZSBpbnRlcnNlY3QuCiAgICAgaW50IGNvbEdh
cCA9IGNvbHVtbkdhcCgpOwogICAgIGludCBsZWZ0R2FwID0gY29sR2FwIC8gMjsKLSAgICBJbnRQ
b2ludCBjb2x1bW5Qb2ludChjb2xJbmZvLT5jb2x1bW5SZWN0QXQoMCkubG9jYXRpb24oKSk7Cisg
ICAgSW50UG9pbnQgY29sdW1uUG9pbnQoY29sdW1uUmVjdEF0KGNvbEluZm8sIDApLmxvY2F0aW9u
KCkpOwogICAgIGludCB5T2Zmc2V0ID0gMDsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
Y29sSW5mby0+Y29sdW1uQ291bnQoKTsgaSsrKSB7CiAgICAgICAgIC8vIEFkZCBpbiBoYWxmIHRo
ZSBjb2x1bW4gZ2FwIHRvIHRoZSBsZWZ0IGFuZCByaWdodCBvZiB0aGUgcmVjdC4KLSAgICAgICAg
SW50UmVjdCBjb2xSZWN0ID0gY29sSW5mby0+Y29sdW1uUmVjdEF0KGkpOworICAgICAgICBJbnRS
ZWN0IGNvbFJlY3QgPSBjb2x1bW5SZWN0QXQoY29sSW5mbywgaSk7CiAgICAgICAgIEludFJlY3Qg
Z2FwQW5kQ29sdW1uUmVjdChjb2xSZWN0LngoKSAtIGxlZnRHYXAsIGNvbFJlY3QueSgpLCBjb2xS
ZWN0LndpZHRoKCkgKyBjb2xHYXAsIGNvbFJlY3QuaGVpZ2h0KCkpOwogCiAgICAgICAgIGlmIChw
b2ludC54KCkgPj0gZ2FwQW5kQ29sdW1uUmVjdC54KCkgJiYgcG9pbnQueCgpIDwgZ2FwQW5kQ29s
dW1uUmVjdC5yaWdodCgpKSB7CkBAIC00Mzc4LDcgKzQ1MjksNyBAQCB2b2lkIFJlbmRlckJsb2Nr
OjphZGp1c3RSZWN0Rm9yQ29sdW1ucyhJCiAgICAgSW50UmVjdCByZXN1bHQ7CiAgICAgCiAgICAg
Ly8gRGV0ZXJtaW5lIHdoaWNoIGNvbHVtbnMgd2UgaW50ZXJzZWN0LgotICAgIHVuc2lnbmVkIGNv
bENvdW50ID0gY29sSW5mby0+Y29sdW1uQ291bnQoKTsKKyAgICB1bnNpZ25lZCBjb2xDb3VudCA9
IGNvbHVtbkNvdW50KGNvbEluZm8pOwogICAgIGlmICghY29sQ291bnQpCiAgICAgICAgIHJldHVy
bjsKICAgICAKQEAgLTQzODYsNyArNDUzNyw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkanVzdFJl
Y3RGb3JDb2x1bW5zKEkKICAgICAKICAgICBpbnQgY3VycllPZmZzZXQgPSAwOwogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBjb2xDb3VudDsgaSsrKSB7Ci0gICAgICAgIEludFJlY3QgY29s
UmVjdCA9IGNvbEluZm8tPmNvbHVtblJlY3RBdChpKTsKKyAgICAgICAgSW50UmVjdCBjb2xSZWN0
ID0gY29sdW1uUmVjdEF0KGNvbEluZm8sIGkpOwogICAgICAgICBpbnQgY3VyclhPZmZzZXQgPSBj
b2xSZWN0LngoKSAtIGxlZnQ7CiAgICAgICAgIAogICAgICAgICBJbnRSZWN0IHJlcGFpbnRSZWN0
ID0gcjsKQEAgLTQ0MTIsOSArNDU2Myw5IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkanVzdEZvckNv
bHVtbnMoSW50U2kKIAogICAgIGludCBsZWZ0ID0gYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQo
KTsKICAgICBpbnQgeU9mZnNldCA9IDA7Ci0gICAgc2l6ZV90IGNvbHVtbkNvdW50ID0gY29sSW5m
by0+Y29sdW1uQ291bnQoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvbHVtbkNvdW50
OyArK2kpIHsKLSAgICAgICAgSW50UmVjdCBjb2x1bW5SZWN0ID0gY29sSW5mby0+Y29sdW1uUmVj
dEF0KGkpOworICAgIHNpemVfdCBjb2xDb3VudCA9IGNvbHVtbkNvdW50KGNvbEluZm8pOworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29sQ291bnQ7ICsraSkgeworICAgICAgICBJbnRSZWN0
IGNvbHVtblJlY3QgPSBjb2x1bW5SZWN0QXQoY29sSW5mbywgaSk7CiAgICAgICAgIGludCB4T2Zm
c2V0ID0gY29sdW1uUmVjdC54KCkgLSBsZWZ0OwogICAgICAgICBpZiAocG9pbnQueSgpIDwgY29s
dW1uUmVjdC5ib3R0b20oKSArIHlPZmZzZXQpIHsKICAgICAgICAgICAgIG9mZnNldC5leHBhbmQo
eE9mZnNldCwgLXlPZmZzZXQpOwpAQCAtNTQyOCwyNCArNTU3OSw0NCBAQCB2b2lkIFJlbmRlckJs
b2NrOjpjbGVhclRydW5jYXRpb24oKQogCiB2b2lkIFJlbmRlckJsb2NrOjpzZXRNYXhUb3BNYXJn
aW5zKGludCBwb3MsIGludCBuZWcpCiB7Ci0gICAgaWYgKCFtX21heE1hcmdpbikgewotICAgICAg
ICBpZiAocG9zID09IE1heE1hcmdpbjo6dG9wUG9zRGVmYXVsdCh0aGlzKSAmJiBuZWcgPT0gTWF4
TWFyZ2luOjp0b3BOZWdEZWZhdWx0KHRoaXMpKQorICAgIGlmICghbV9yYXJlRGF0YSkgeworICAg
ICAgICBpZiAocG9zID09IFJlbmRlckJsb2NrUmFyZURhdGE6OnRvcFBvc0RlZmF1bHQodGhpcykg
JiYgbmVnID09IFJlbmRlckJsb2NrUmFyZURhdGE6OnRvcE5lZ0RlZmF1bHQodGhpcykpCiAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fbWF4TWFyZ2luID0gbmV3IE1heE1hcmdpbih0aGlz
KTsKKyAgICAgICAgbV9yYXJlRGF0YSA9IG5ldyBSZW5kZXJCbG9ja1JhcmVEYXRhKHRoaXMpOwog
ICAgIH0KLSAgICBtX21heE1hcmdpbi0+bV90b3BQb3MgPSBwb3M7Ci0gICAgbV9tYXhNYXJnaW4t
Pm1fdG9wTmVnID0gbmVnOworICAgIG1fcmFyZURhdGEtPm1fdG9wUG9zID0gcG9zOworICAgIG1f
cmFyZURhdGEtPm1fdG9wTmVnID0gbmVnOwogfQogCiB2b2lkIFJlbmRlckJsb2NrOjpzZXRNYXhC
b3R0b21NYXJnaW5zKGludCBwb3MsIGludCBuZWcpCiB7Ci0gICAgaWYgKCFtX21heE1hcmdpbikg
ewotICAgICAgICBpZiAocG9zID09IE1heE1hcmdpbjo6Ym90dG9tUG9zRGVmYXVsdCh0aGlzKSAm
JiBuZWcgPT0gTWF4TWFyZ2luOjpib3R0b21OZWdEZWZhdWx0KHRoaXMpKQorICAgIGlmICghbV9y
YXJlRGF0YSkgeworICAgICAgICBpZiAocG9zID09IFJlbmRlckJsb2NrUmFyZURhdGE6OmJvdHRv
bVBvc0RlZmF1bHQodGhpcykgJiYgbmVnID09IFJlbmRlckJsb2NrUmFyZURhdGE6OmJvdHRvbU5l
Z0RlZmF1bHQodGhpcykpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fcmFyZURhdGEg
PSBuZXcgUmVuZGVyQmxvY2tSYXJlRGF0YSh0aGlzKTsKKyAgICB9CisgICAgbV9yYXJlRGF0YS0+
bV9ib3R0b21Qb3MgPSBwb3M7CisgICAgbV9yYXJlRGF0YS0+bV9ib3R0b21OZWcgPSBuZWc7Cit9
CisKK3ZvaWQgUmVuZGVyQmxvY2s6OnNldFBhZ2luYXRpb25TdHJ1dChpbnQgc3RydXQpCit7Cisg
ICAgaWYgKCFtX3JhcmVEYXRhKSB7CisgICAgICAgIGlmICghc3RydXQpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIG1fcmFyZURhdGEgPSBuZXcgUmVuZGVyQmxvY2tSYXJlRGF0YSh0aGlz
KTsKKyAgICB9CisgICAgbV9yYXJlRGF0YS0+bV9wYWdpbmF0aW9uU3RydXQgPSBzdHJ1dDsKK30K
Kwordm9pZCBSZW5kZXJCbG9jazo6c2V0UGFnZVkoaW50IHkpCit7CisgICAgaWYgKCFtX3JhcmVE
YXRhKSB7CisgICAgICAgIGlmICgheSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9t
YXhNYXJnaW4gPSBuZXcgTWF4TWFyZ2luKHRoaXMpOworICAgICAgICBtX3JhcmVEYXRhID0gbmV3
IFJlbmRlckJsb2NrUmFyZURhdGEodGhpcyk7CiAgICAgfQotICAgIG1fbWF4TWFyZ2luLT5tX2Jv
dHRvbVBvcyA9IHBvczsKLSAgICBtX21heE1hcmdpbi0+bV9ib3R0b21OZWcgPSBuZWc7CisgICAg
bV9yYXJlRGF0YS0+bV9wYWdlWSA9IHk7CiB9CiAKIHZvaWQgUmVuZGVyQmxvY2s6OmFic29sdXRl
UmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgaW50IHR4LCBpbnQgdHkpCkBAIC01NzA2LDYg
KzU4NzcsMTE3IEBAIFJlbmRlckJsb2NrKiBSZW5kZXJCbG9jazo6Y3JlYXRlQW5vbnltb3UKICAg
ICByZXR1cm4gbmV3Qm94OwogfQogCitpbnQgUmVuZGVyQmxvY2s6Om5leHRQYWdlVG9wKGludCB5
UG9zKSBjb25zdAoreworICAgIExheW91dFN0YXRlKiBsYXlvdXRTdGF0ZSA9IHZpZXcoKS0+bGF5
b3V0U3RhdGUoKTsKKyAgICBpZiAoIWxheW91dFN0YXRlLT5tX3BhZ2VIZWlnaHQpCisgICAgICAg
IHJldHVybiB5UG9zOworICAgIAorICAgIC8vIFRoZSB5UG9zIGlzIGluIG91ciBjb29yZGluYXRl
IHNwYWNlLiAgV2UgY2FuIGFkZCBpbiBvdXIgcHVzaGVkIG9mZnNldC4KKyAgICBpbnQgcGFnZUhl
aWdodCA9IGxheW91dFN0YXRlLT5tX3BhZ2VIZWlnaHQ7CisgICAgaW50IHJlbWFpbmluZ0hlaWdo
dCA9IChwYWdlSGVpZ2h0IC0gKChsYXlvdXRTdGF0ZS0+bV9sYXlvdXRPZmZzZXQgLSBsYXlvdXRT
dGF0ZS0+bV9wYWdlT2Zmc2V0KS5oZWlnaHQoKSArIHlQb3MpICUgcGFnZUhlaWdodCkgJSBwYWdl
SGVpZ2h0OworICAgIHJldHVybiB5UG9zICsgcmVtYWluaW5nSGVpZ2h0OworfQorCitzdGF0aWMg
Ym9vbCBpbk5vcm1hbEZsb3coUmVuZGVyQm94KiBjaGlsZCkKK3sKKyAgICBSZW5kZXJCbG9jayog
Y3VyciA9IGNoaWxkLT5jb250YWluaW5nQmxvY2soKTsKKyAgICBSZW5kZXJCbG9jayogaW5pdGlh
bEJsb2NrID0gY2hpbGQtPnZpZXcoKTsKKyAgICB3aGlsZSAoY3VyciAmJiBjdXJyICE9IGluaXRp
YWxCbG9jaykgeworICAgICAgICBpZiAoY3Vyci0+aGFzQ29sdW1ucygpKQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIGlmIChjdXJyLT5pc0Zsb2F0aW5nT3JQb3NpdGlvbmVkKCkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGN1cnIgPSBjdXJyLT5jb250YWlu
aW5nQmxvY2soKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2ludCBSZW5kZXJCbG9j
azo6YXBwbHlCZWZvcmVCcmVhayhSZW5kZXJCb3gqIGNoaWxkLCBpbnQgeVBvcykKK3sKKyAgICAv
LyBGSVhNRTogQWRkIHBhZ2UgYnJlYWsgY2hlY2tpbmcgaGVyZSB3aGVuIHdlIHN1cHBvcnQgcHJp
bnRpbmcuCisgICAgYm9vbCBjaGVja0NvbHVtbkJyZWFrcyA9IHZpZXcoKS0+bGF5b3V0U3RhdGUo
KS0+cGFnaW5hdGluZ0NvbHVtbnMoKTsKKyAgICBib29sIGNoZWNrQmVmb3JlQWx3YXlzID0gY2hl
Y2tDb2x1bW5CcmVha3MgJiYgY2hpbGQtPnN0eWxlKCktPmNvbHVtbkJyZWFrQmVmb3JlKCkgPT0g
UEJBTFdBWVM7CisgICAgaWYgKGNoZWNrQmVmb3JlQWx3YXlzICYmIGluTm9ybWFsRmxvdyhjaGls
ZCkpIHsKKyAgICAgICAgaWYgKGNoZWNrQ29sdW1uQnJlYWtzKQorICAgICAgICAgICAgdmlldygp
LT5sYXlvdXRTdGF0ZSgpLT5hZGRGb3JjZWRDb2x1bW5CcmVhayh5UG9zKTsKKyAgICAgICAgcmV0
dXJuIG5leHRQYWdlVG9wKHlQb3MpOworICAgIH0KKyAgICByZXR1cm4geVBvczsKK30KKworaW50
IFJlbmRlckJsb2NrOjphcHBseUFmdGVyQnJlYWsoUmVuZGVyQm94KiBjaGlsZCwgaW50IHlQb3Ms
IE1hcmdpbkluZm8mIG1hcmdpbkluZm8pCit7CisgICAgLy8gRklYTUU6IEFkZCBwYWdlIGJyZWFr
IGNoZWNraW5nIGhlcmUgd2hlbiB3ZSBzdXBwb3J0IHByaW50aW5nLgorICAgIGJvb2wgY2hlY2tD
b2x1bW5CcmVha3MgPSB2aWV3KCktPmxheW91dFN0YXRlKCktPnBhZ2luYXRpbmdDb2x1bW5zKCk7
CisgICAgYm9vbCBjaGVja0FmdGVyQWx3YXlzID0gY2hlY2tDb2x1bW5CcmVha3MgJiYgY2hpbGQt
PnN0eWxlKCktPmNvbHVtbkJyZWFrQWZ0ZXIoKSA9PSBQQkFMV0FZUzsKKyAgICBpZiAoY2hlY2tB
ZnRlckFsd2F5cyAmJiBpbk5vcm1hbEZsb3coY2hpbGQpKSB7CisgICAgICAgIG1hcmdpbkluZm8u
c2V0Qm90dG9tUXVpcmsodHJ1ZSk7IC8vIENhdXNlIG1hcmdpbnMgdG8gYmUgZGlzY2FyZGVkIGZv
ciBhbnkgZm9sbG93aW5nIGNvbnRlbnQuCisgICAgICAgIGlmIChjaGVja0NvbHVtbkJyZWFrcykK
KyAgICAgICAgICAgIHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+YWRkRm9yY2VkQ29sdW1uQnJlYWso
eVBvcyk7CisgICAgICAgIHJldHVybiBuZXh0UGFnZVRvcCh5UG9zKTsKKyAgICB9CisgICAgcmV0
dXJuIHlQb3M7Cit9CisKK2ludCBSZW5kZXJCbG9jazo6YWRqdXN0Rm9yVW5zcGxpdHRhYmxlQ2hp
bGQoUmVuZGVyQm94KiBjaGlsZCwgaW50IHlQb3MsIGJvb2wgaW5jbHVkZU1hcmdpbnMpCit7Cisg
ICAgYm9vbCBpc1Vuc3BsaXR0YWJsZSA9IGNoaWxkLT5pc1JlcGxhY2VkKCkgfHwgY2hpbGQtPnNj
cm9sbHNPdmVyZmxvdygpOworICAgIGlmICghaXNVbnNwbGl0dGFibGUpCisgICAgICAgIHJldHVy
biB5UG9zOworICAgIGludCBjaGlsZEhlaWdodCA9IGNoaWxkLT5oZWlnaHQoKSArIChpbmNsdWRl
TWFyZ2lucyA/IGNoaWxkLT5tYXJnaW5Ub3AoKSArIGNoaWxkLT5tYXJnaW5Cb3R0b20oKSA6IDAp
OworICAgIExheW91dFN0YXRlKiBsYXlvdXRTdGF0ZSA9IHZpZXcoKS0+bGF5b3V0U3RhdGUoKTsK
KyAgICBpZiAobGF5b3V0U3RhdGUtPm1fY29sdW1uSW5mbykKKyAgICAgICAgbGF5b3V0U3RhdGUt
Pm1fY29sdW1uSW5mby0+dXBkYXRlTWluaW11bUNvbHVtbkhlaWdodChjaGlsZEhlaWdodCk7Cisg
ICAgaW50IHBhZ2VIZWlnaHQgPSBsYXlvdXRTdGF0ZS0+bV9wYWdlSGVpZ2h0OworICAgIGlmICgh
cGFnZUhlaWdodCB8fCBjaGlsZEhlaWdodCA+IHBhZ2VIZWlnaHQpCisgICAgICAgIHJldHVybiB5
UG9zOworICAgIGludCByZW1haW5pbmdIZWlnaHQgPSAocGFnZUhlaWdodCAtICgobGF5b3V0U3Rh
dGUtPm1fbGF5b3V0T2Zmc2V0IC0gbGF5b3V0U3RhdGUtPm1fcGFnZU9mZnNldCkuaGVpZ2h0KCkg
KyB5UG9zKSAlIHBhZ2VIZWlnaHQpICUgcGFnZUhlaWdodDsKKyAgICBpZiAocmVtYWluaW5nSGVp
Z2h0IDwgY2hpbGRIZWlnaHQpCisgICAgICAgIHJldHVybiB5UG9zICsgcmVtYWluaW5nSGVpZ2h0
OworICAgIHJldHVybiB5UG9zOworfQorCit2b2lkIFJlbmRlckJsb2NrOjphZGp1c3RMaW5lUG9z
aXRpb25Gb3JQYWdpbmF0aW9uKFJvb3RJbmxpbmVCb3gqIGxpbmVCb3gsIGludCYgZGVsdGEpCit7
CisgICAgLy8gRklYTUU6IEZvciBub3cgd2UgcGFnaW5hdGUgdXNpbmcgbGluZSBvdmVyZmxvdy4g
IFRoaXMgZW5zdXJlcyB0aGF0IGxpbmVzIGRvbid0IG92ZXJsYXAgYXQgYWxsIHdoZW4gd2UKKyAg
ICAvLyBwdXQgYSBzdHJ1dCBiZXR3ZWVuIHRoZW0gZm9yIHBhZ2luYXRpb24gcHVycG9zZXMuICBI
b3dldmVyLCB0aGlzIHJlYWxseSBpc24ndCB0aGUgZGVzaXJlZCByZW5kZXJpbmcsIHNpbmNlCisg
ICAgLy8gdGhlIGxpbmUgb24gdGhlIHRvcCBvZiB0aGUgbmV4dCBwYWdlIHdpbGwgYXBwZWFyIHRv
byBmYXIgZG93biByZWxhdGl2ZSB0byB0aGUgc2FtZSBraW5kIG9mIGxpbmUgYXQgdGhlIHRvcAor
ICAgIC8vIG9mIHRoZSBmaXJzdCBjb2x1bW4uCisgICAgLy8KKyAgICAvLyBUaGUgcmVuZGVyaW5n
IHdlIHdvdWxkIGxpa2UgdG8gc2VlIGlzIG9uZSB3aGVyZSB0aGUgbGluZVRvcCBpcyBhdCB0aGUg
dG9wIG9mIHRoZSBjb2x1bW4sIGFuZCBhbnkgbGluZSBvdmVyZmxvdworICAgIC8vIHNpbXBseSBz
cGlsbHMgb3V0IGFib3ZlIHRoZSB0b3Agb2YgdGhlIGNvbHVtbi4gIFRoaXMgZWZmZWN0IHdvdWxk
IG1hdGNoIHdoYXQgaGFwcGVucyBhdCB0aGUgdG9wIG9mIHRoZSBmaXJzdCBjb2x1bW4uCisgICAg
Ly8gV2UgY2FuJ3QgYWNoaWV2ZSB0aGlzIHJlbmRlcmluZywgaG93ZXZlciwgdW50aWwgd2Ugc3Rv
cCBjb2x1bW5zIGZyb20gY2xpcHBpbmcgdG8gdGhlIGNvbHVtbiBib3VuZHMgKHRodXMgYWxsb3dp
bmcKKyAgICAvLyBmb3Igb3ZlcmZsb3cgdG8gb2NjdXIpLCBhbmQgdGhlbiBjYWNoZSB2aXNpYmxl
IG92ZXJmbG93IGZvciBlYWNoIGNvbHVtbiByZWN0LgorICAgIC8vCisgICAgLy8gRnVydGhlcm1v
cmUsIHRoZSBwYWludCB3ZSBoYXZlIHRvIGRvIHdoZW4gYSBjb2x1bW4gaGFzIG92ZXJmbG93IGhh
cyB0byBiZSBzcGVjaWFsLiAgV2UgbmVlZCB0byBleGNsdWRlCisgICAgLy8gY29udGVudCB0aGF0
IHBhaW50cyBpbiBhIHByZXZpb3VzIGNvbHVtbiAoYW5kIGNvbnRlbnQgdGhhdCBwYWludHMgaW4g
dGhlIGZvbGxvd2luZyBjb2x1bW4pLgorICAgIC8vCisgICAgLy8gRklYTUU6IEFub3RoZXIgcHJv
YmxlbSB3aXRoIHNpbXBseSBtb3ZpbmcgbGluZXMgaXMgdGhhdCB0aGUgYXZhaWxhYmxlIGxpbmUg
d2lkdGggbWF5IGNoYW5nZSAoYmVjYXVzZSBvZiBmbG9hdHMpLgorICAgIC8vIFRlY2huaWNhbGx5
IGlmIHRoZSBsb2NhdGlvbiB3ZSBtb3ZlIHRoZSBsaW5lIHRvIGhhcyBhIGRpZmZlcmVudCBsaW5l
IHdpZHRoIHRoYW4gb3VyIG9sZCBwb3NpdGlvbiwgdGhlbiB3ZSBuZWVkIHRvIGRpcnR5IHRoZQor
ICAgIC8vIGxpbmUgYW5kIGFsbCBmb2xsb3dpbmcgbGluZXMuCisgICAgTGF5b3V0U3RhdGUqIGxh
eW91dFN0YXRlID0gdmlldygpLT5sYXlvdXRTdGF0ZSgpOworICAgIGludCBwYWdlSGVpZ2h0ID0g
bGF5b3V0U3RhdGUtPm1fcGFnZUhlaWdodDsKKyAgICBpbnQgeVBvcyA9IGxpbmVCb3gtPnRvcFZp
c2libGVPdmVyZmxvdygpOworICAgIGludCBsaW5lSGVpZ2h0ID0gbGluZUJveC0+Ym90dG9tVmlz
aWJsZU92ZXJmbG93KCkgLSB5UG9zOworICAgIGlmIChsYXlvdXRTdGF0ZS0+bV9jb2x1bW5JbmZv
KQorICAgICAgICBsYXlvdXRTdGF0ZS0+bV9jb2x1bW5JbmZvLT51cGRhdGVNaW5pbXVtQ29sdW1u
SGVpZ2h0KGxpbmVIZWlnaHQpOworICAgIHlQb3MgKz0gZGVsdGE7CisgICAgbGluZUJveC0+c2V0
UGFnaW5hdGlvblN0cnV0KDApOworICAgIGlmICghcGFnZUhlaWdodCB8fCBsaW5lSGVpZ2h0ID4g
cGFnZUhlaWdodCkKKyAgICAgICAgcmV0dXJuOworICAgIGludCByZW1haW5pbmdIZWlnaHQgPSBw
YWdlSGVpZ2h0IC0gKChsYXlvdXRTdGF0ZS0+bV9sYXlvdXRPZmZzZXQgLSBsYXlvdXRTdGF0ZS0+
bV9wYWdlT2Zmc2V0KS5oZWlnaHQoKSArIHlQb3MpICUgcGFnZUhlaWdodDsKKyAgICBpZiAocmVt
YWluaW5nSGVpZ2h0IDwgbGluZUhlaWdodCkgeworICAgICAgICBpbnQgdG90YWxIZWlnaHQgPSBs
aW5lSGVpZ2h0ICsgbWF4KDAsIHlQb3MpOworICAgICAgICBpZiAobGluZUJveCA9PSBmaXJzdFJv
b3RCb3goKSAmJiB0b3RhbEhlaWdodCA8IHBhZ2VIZWlnaHQgJiYgIWlzUG9zaXRpb25lZCgpICYm
ICFpc1RhYmxlQ2VsbCgpKQorICAgICAgICAgICAgc2V0UGFnaW5hdGlvblN0cnV0KHJlbWFpbmlu
Z0hlaWdodCArIG1heCgwLCB5UG9zKSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZGVs
dGEgKz0gcmVtYWluaW5nSGVpZ2h0OworICAgICAgICAgICAgbGluZUJveC0+c2V0UGFnaW5hdGlv
blN0cnV0KHJlbWFpbmluZ0hlaWdodCk7CisgICAgICAgIH0KKyAgICB9ICAKK30KKyAKIGNvbnN0
IGNoYXIqIFJlbmRlckJsb2NrOjpyZW5kZXJOYW1lKCkgY29uc3QKIHsKICAgICBpZiAoaXNCb2R5
KCkpCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHJldmlzaW9uIDY3NjM5KQorKysgV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENvbHVtbkluZm87CiBjbGFzcyBJbmxp
bmVJdGVyYXRvcjsKK2NsYXNzIExheW91dFN0YXRlTWFpbnRhaW5lcjsKIGNsYXNzIFJlbmRlcklu
bGluZTsKIAogc3RydWN0IEJpZGlSdW47CkBAIC03MCw3ICs3MSw3IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIHZvaWQgYWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0
KiBiZWZvcmVDaGlsZCA9IDApOwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDaGlsZChSZW5kZXJP
YmplY3QqKTsKIAotICAgIHZpcnR1YWwgdm9pZCBsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hp
bGRyZW4pOworICAgIHZpcnR1YWwgdm9pZCBsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRy
ZW4sIGludCBwYWdlSGVpZ2h0ID0gMCk7CiAKICAgICB2b2lkIGluc2VydFBvc2l0aW9uZWRPYmpl
Y3QoUmVuZGVyQm94Kik7CiAgICAgdm9pZCByZW1vdmVQb3NpdGlvbmVkT2JqZWN0KFJlbmRlckJv
eCopOwpAQCAtODksNiArOTAsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIG1hcmtBbGxEZXNjZW5k
YW50c1dpdGhGbG9hdHNGb3JMYXlvdXQoUmVuZGVyQm94KiBmbG9hdFRvUmVtb3ZlID0gMCwgYm9v
bCBpbkxheW91dCA9IHRydWUpOwogICAgIHZvaWQgbWFya1Bvc2l0aW9uZWRPYmplY3RzRm9yTGF5
b3V0KCk7CisgICAgdmlydHVhbCB2b2lkIG1hcmtEZXNjZW5kYW50QmxvY2tzQW5kTGluZXNGb3JM
YXlvdXQoYm9vbCBpbkxheW91dCA9IHRydWUpOwogCiAgICAgYm9vbCBjb250YWluc0Zsb2F0cygp
IHsgcmV0dXJuIG1fZmxvYXRpbmdPYmplY3RzICYmICFtX2Zsb2F0aW5nT2JqZWN0cy0+aXNFbXB0
eSgpOyB9CiAgICAgYm9vbCBjb250YWluc0Zsb2F0KFJlbmRlck9iamVjdCopOwpAQCAtMTUxLDYg
KzE1MywxNSBAQCBwdWJsaWM6CiAKICAgICBDb2x1bW5JbmZvKiBjb2x1bW5JbmZvKCkgY29uc3Q7
CiAgICAgaW50IGNvbHVtbkdhcCgpIGNvbnN0OworICAgIAorICAgIC8vIFRoZXNlIHR3byBmdW5j
dGlvbnMgdGFrZSB0aGUgQ29sdW1uSW5mbyogdG8gYXZvaWQgcmVwZWF0ZWQgbG9va3VwcyBvZiB0
aGUgaW5mbyBpbiB0aGUgZ2xvYmFsIEhhc2hNYXAuCisgICAgdW5zaWduZWQgY29sdW1uQ291bnQo
Q29sdW1uSW5mbyopIGNvbnN0OworICAgIEludFJlY3QgY29sdW1uUmVjdEF0KENvbHVtbkluZm8q
LCB1bnNpZ25lZCkgY29uc3Q7CisKKyAgICBpbnQgcGFnaW5hdGlvblN0cnV0KCkgY29uc3QgeyBy
ZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1fcGFnaW5hdGlvblN0cnV0IDogMDsgfQor
ICAgIGludCBwYWdlWSgpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVEYXRhLT5t
X3BhZ2VZIDogMDsgfQorICAgIHZvaWQgc2V0UGFnaW5hdGlvblN0cnV0KGludCBzdHJ1dCk7Cisg
ICAgdm9pZCBzZXRQYWdlWShpbnQgeSk7CiAKIHByb3RlY3RlZDoKICAgICAvLyBUaGVzZSBmdW5j
dGlvbnMgYXJlIG9ubHkgdXNlZCBpbnRlcm5hbGx5IHRvIG1hbmlwdWxhdGUgdGhlIHJlbmRlciB0
cmVlIHN0cnVjdHVyZSB2aWEgcmVtb3ZlL2luc2VydC9hcHBlbmRDaGlsZE5vZGUuCkBAIC0xNzcs
MjAgKzE4OCwyMiBAQCBwcm90ZWN0ZWQ6CiAgICAgfQogICAgIHZvaWQgbW92ZUNoaWxkcmVuVG8o
UmVuZGVyQmxvY2sqIHRvLCBSZW5kZXJPYmplY3QqIHN0YXJ0Q2hpbGQsIFJlbmRlck9iamVjdCog
ZW5kQ2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQsIGJvb2wgZnVsbFJlbW92ZUluc2Vy
dCA9IGZhbHNlKTsKICAgICAKLSAgICBpbnQgbWF4VG9wUG9zTWFyZ2luKCkgY29uc3QgeyByZXR1
cm4gbV9tYXhNYXJnaW4gPyBtX21heE1hcmdpbi0+bV90b3BQb3MgOiBNYXhNYXJnaW46OnRvcFBv
c0RlZmF1bHQodGhpcyk7IH0KLSAgICBpbnQgbWF4VG9wTmVnTWFyZ2luKCkgY29uc3QgeyByZXR1
cm4gbV9tYXhNYXJnaW4gPyBtX21heE1hcmdpbi0+bV90b3BOZWcgOiBNYXhNYXJnaW46OnRvcE5l
Z0RlZmF1bHQodGhpcyk7IH0KLSAgICBpbnQgbWF4Qm90dG9tUG9zTWFyZ2luKCkgY29uc3QgeyBy
ZXR1cm4gbV9tYXhNYXJnaW4gPyBtX21heE1hcmdpbi0+bV9ib3R0b21Qb3MgOiBNYXhNYXJnaW46
OmJvdHRvbVBvc0RlZmF1bHQodGhpcyk7IH0KLSAgICBpbnQgbWF4Qm90dG9tTmVnTWFyZ2luKCkg
Y29uc3QgeyByZXR1cm4gbV9tYXhNYXJnaW4gPyBtX21heE1hcmdpbi0+bV9ib3R0b21OZWcgOiBN
YXhNYXJnaW46OmJvdHRvbU5lZ0RlZmF1bHQodGhpcyk7IH0KKyAgICBpbnQgbWF4VG9wUG9zTWFy
Z2luKCkgY29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1fdG9wUG9zIDog
UmVuZGVyQmxvY2tSYXJlRGF0YTo6dG9wUG9zRGVmYXVsdCh0aGlzKTsgfQorICAgIGludCBtYXhU
b3BOZWdNYXJnaW4oKSBjb25zdCB7IHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+bV90
b3BOZWcgOiBSZW5kZXJCbG9ja1JhcmVEYXRhOjp0b3BOZWdEZWZhdWx0KHRoaXMpOyB9CisgICAg
aW50IG1heEJvdHRvbVBvc01hcmdpbigpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3Jh
cmVEYXRhLT5tX2JvdHRvbVBvcyA6IFJlbmRlckJsb2NrUmFyZURhdGE6OmJvdHRvbVBvc0RlZmF1
bHQodGhpcyk7IH0KKyAgICBpbnQgbWF4Qm90dG9tTmVnTWFyZ2luKCkgY29uc3QgeyByZXR1cm4g
bV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1fYm90dG9tTmVnIDogUmVuZGVyQmxvY2tSYXJlRGF0
YTo6Ym90dG9tTmVnRGVmYXVsdCh0aGlzKTsgfQorICAgIAogICAgIHZvaWQgc2V0TWF4VG9wTWFy
Z2lucyhpbnQgcG9zLCBpbnQgbmVnKTsKICAgICB2b2lkIHNldE1heEJvdHRvbU1hcmdpbnMoaW50
IHBvcywgaW50IG5lZyk7Ci0gICAgCisKICAgICB2b2lkIGluaXRNYXhNYXJnaW5WYWx1ZXMoKQog
ICAgIHsKLSAgICAgICAgaWYgKG1fbWF4TWFyZ2luKSB7Ci0gICAgICAgICAgICBtX21heE1hcmdp
bi0+bV90b3BQb3MgPSBNYXhNYXJnaW46OnRvcFBvc0RlZmF1bHQodGhpcyk7Ci0gICAgICAgICAg
ICBtX21heE1hcmdpbi0+bV90b3BOZWcgPSBNYXhNYXJnaW46OnRvcE5lZ0RlZmF1bHQodGhpcyk7
Ci0gICAgICAgICAgICBtX21heE1hcmdpbi0+bV9ib3R0b21Qb3MgPSBNYXhNYXJnaW46OmJvdHRv
bVBvc0RlZmF1bHQodGhpcyk7Ci0gICAgICAgICAgICBtX21heE1hcmdpbi0+bV9ib3R0b21OZWcg
PSBNYXhNYXJnaW46OmJvdHRvbU5lZ0RlZmF1bHQodGhpcyk7CisgICAgICAgIGlmIChtX3JhcmVE
YXRhKSB7CisgICAgICAgICAgICBtX3JhcmVEYXRhLT5tX3RvcFBvcyA9IFJlbmRlckJsb2NrUmFy
ZURhdGE6OnRvcFBvc0RlZmF1bHQodGhpcyk7CisgICAgICAgICAgICBtX3JhcmVEYXRhLT5tX3Rv
cE5lZyA9IFJlbmRlckJsb2NrUmFyZURhdGE6OnRvcE5lZ0RlZmF1bHQodGhpcyk7CisgICAgICAg
ICAgICBtX3JhcmVEYXRhLT5tX2JvdHRvbVBvcyA9IFJlbmRlckJsb2NrUmFyZURhdGE6OmJvdHRv
bVBvc0RlZmF1bHQodGhpcyk7CisgICAgICAgICAgICBtX3JhcmVEYXRhLT5tX2JvdHRvbU5lZyA9
IFJlbmRlckJsb2NrUmFyZURhdGE6OmJvdHRvbU5lZ0RlZmF1bHQodGhpcyk7CisgICAgICAgICAg
ICBtX3JhcmVEYXRhLT5tX3BhZ2luYXRpb25TdHJ1dCA9IDA7CiAgICAgICAgIH0KICAgICB9CiAK
QEAgLTI5NSw5ICszMDgsNDIgQEAgcHJpdmF0ZToKICAgICAgICAgYm9vbCBldmVySGFkTGF5b3V0
OwogICAgIH07CiAKKyAgICBzdHJ1Y3QgRmxvYXRpbmdPYmplY3QgOiBOb25jb3B5YWJsZSB7Cisg
ICAgICAgIGVudW0gVHlwZSB7CisgICAgICAgICAgICBGbG9hdExlZnQsCisgICAgICAgICAgICBG
bG9hdFJpZ2h0CisgICAgICAgIH07CisKKyAgICAgICAgRmxvYXRpbmdPYmplY3QoVHlwZSB0eXBl
KQorICAgICAgICAgICAgOiBtX3JlbmRlcmVyKDApCisgICAgICAgICAgICAsIG1fdG9wKDApCisg
ICAgICAgICAgICAsIG1fYm90dG9tKDApCisgICAgICAgICAgICAsIG1fbGVmdCgwKQorICAgICAg
ICAgICAgLCBtX3dpZHRoKDApCisgICAgICAgICAgICAsIG1fcGFnaW5hdGlvblN0cnV0KDApCisg
ICAgICAgICAgICAsIG1fdHlwZSh0eXBlKQorICAgICAgICAgICAgLCBtX3Nob3VsZFBhaW50KHRy
dWUpCisgICAgICAgICAgICAsIG1faXNEZXNjZW5kYW50KGZhbHNlKQorICAgICAgICB7CisgICAg
ICAgIH0KKworICAgICAgICBUeXBlIHR5cGUoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxUeXBlPiht
X3R5cGUpOyB9CisKKyAgICAgICAgUmVuZGVyQm94KiBtX3JlbmRlcmVyOworICAgICAgICBpbnQg
bV90b3A7CisgICAgICAgIGludCBtX2JvdHRvbTsKKyAgICAgICAgaW50IG1fbGVmdDsKKyAgICAg
ICAgaW50IG1fd2lkdGg7CisgICAgICAgIGludCBtX3BhZ2luYXRpb25TdHJ1dDsKKyAgICAgICAg
dW5zaWduZWQgbV90eXBlIDogMTsgLy8gVHlwZSAobGVmdCBvciByaWdodCBhbGlnbmVkKQorICAg
ICAgICBib29sIG1fc2hvdWxkUGFpbnQgOiAxOworICAgICAgICBib29sIG1faXNEZXNjZW5kYW50
IDogMTsKKyAgICB9OworCiAgICAgLy8gVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMnIGltcGxlbWVu
dGF0aW9ucyBhcmUgaW4gUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcC4KICAgICBSb290SW5saW5l
Qm94KiBkZXRlcm1pbmVTdGFydFBvc2l0aW9uKGJvb2wmIGZpcnN0TGluZSwgYm9vbCYgZnVsbExh
eW91dCwgYm9vbCYgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgSW5saW5lQmlkaVJlc29sdmVyJiwgVmVjdG9yPEZsb2F0
V2l0aFJlY3Q+JiBmbG9hdHMsIHVuc2lnbmVkJiBudW1DbGVhbkZsb2F0cyk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmxpbmVCaWRpUmVzb2x2ZXImLCBWZWN0
b3I8RmxvYXRXaXRoUmVjdD4mIGZsb2F0cywgdW5zaWduZWQmIG51bUNsZWFuRmxvYXRzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCYgdXNlUmVwYWludEJv
dW5kcywgaW50JiByZXBhaW50VG9wLCBpbnQmIHJlcGFpbnRCb3R0b20pOwogICAgIFJvb3RJbmxp
bmVCb3gqIGRldGVybWluZUVuZFBvc2l0aW9uKFJvb3RJbmxpbmVCb3gqIHN0YXJ0Qm94LCBJbmxp
bmVJdGVyYXRvciYgY2xlYW5MaW5lU3RhcnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQmlkaVN0YXR1cyYgY2xlYW5MaW5lQmlkaVN0YXR1cywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIHlQb3MpOwpAQCAtMzA1LDkgKzM1MSw5
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBSb290SW5saW5lQm94KiYgZW5k
TGluZSwgaW50JiBlbmRZUG9zLCBpbnQmIHJlcGFpbnRCb3R0b20sIGludCYgcmVwYWludFRvcCk7
CiAKICAgICB2b2lkIHNraXBUcmFpbGluZ1doaXRlc3BhY2UoSW5saW5lSXRlcmF0b3ImLCBib29s
IGlzTGluZUVtcHR5LCBib29sIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSk7Ci0gICAgaW50IHNr
aXBMZWFkaW5nV2hpdGVzcGFjZShJbmxpbmVCaWRpUmVzb2x2ZXImLCBib29sIGZpcnN0TGluZSwg
Ym9vbCBpc0xpbmVFbXB0eSwgYm9vbCBwcmV2aW91c0xpbmVCcm9rZUNsZWFubHkpOworICAgIGlu
dCBza2lwTGVhZGluZ1doaXRlc3BhY2UoSW5saW5lQmlkaVJlc29sdmVyJiwgYm9vbCBmaXJzdExp
bmUsIGJvb2wgaXNMaW5lRW1wdHksIGJvb2wgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5LCBGbG9h
dGluZ09iamVjdCogbGFzdEZsb2F0RnJvbVByZXZpb3VzTGluZSk7CiAgICAgdm9pZCBmaXRCZWxv
d0Zsb2F0cyhpbnQgd2lkdGhUb0ZpdCwgYm9vbCBmaXJzdExpbmUsIGludCYgYXZhaWxhYmxlV2lk
dGgpOwotICAgIElubGluZUl0ZXJhdG9yIGZpbmROZXh0TGluZUJyZWFrKElubGluZUJpZGlSZXNv
bHZlciYsIGJvb2wgZmlyc3RMaW5lLCBib29sJiBpc0xpbmVFbXB0eSwgYm9vbCYgcHJldmlvdXNM
aW5lQnJva2VDbGVhbmx5LCBib29sJiBoeXBoZW5hdGVkLCBFQ2xlYXIqID0gMCk7CisgICAgSW5s
aW5lSXRlcmF0b3IgZmluZE5leHRMaW5lQnJlYWsoSW5saW5lQmlkaVJlc29sdmVyJiwgYm9vbCBm
aXJzdExpbmUsIGJvb2wmIGlzTGluZUVtcHR5LCBib29sJiBwcmV2aW91c0xpbmVCcm9rZUNsZWFu
bHksIGJvb2wmIGh5cGhlbmF0ZWQsIEVDbGVhciosIEZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXRG
cm9tUHJldmlvdXNMaW5lKTsKICAgICBSb290SW5saW5lQm94KiBjb25zdHJ1Y3RMaW5lKHVuc2ln
bmVkIHJ1bkNvdW50LCBCaWRpUnVuKiBmaXJzdFJ1biwgQmlkaVJ1biogbGFzdFJ1biwgYm9vbCBm
aXJzdExpbmUsIGJvb2wgbGFzdExpbmUsIFJlbmRlck9iamVjdCogZW5kT2JqZWN0KTsKICAgICBJ
bmxpbmVGbG93Qm94KiBjcmVhdGVMaW5lQm94ZXMoUmVuZGVyT2JqZWN0KiwgYm9vbCBmaXJzdExp
bmUpOwogICAgIHZvaWQgY29tcHV0ZUhvcml6b250YWxQb3NpdGlvbnNGb3JMaW5lKFJvb3RJbmxp
bmVCb3gqLCBib29sIGZpcnN0TGluZSwgQmlkaVJ1biogZmlyc3RSdW4sIEJpZGlSdW4qIHRyYWls
aW5nU3BhY2VSdW4sIGJvb2wgcmVhY2hlZEVuZCwgR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9u
dHNNYXAmKTsKQEAgLTMyOSwxMiArMzc1LDE4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYWludFNl
bGVjdGlvbihQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSk7CiAgICAgdm9pZCBwYWludENhcmV0
KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5LCBDYXJldFR5cGUpOwogCi0gICAgdm9pZCBpbnNl
cnRGbG9hdGluZ09iamVjdChSZW5kZXJCb3gqKTsKKyAgICBGbG9hdGluZ09iamVjdCogaW5zZXJ0
RmxvYXRpbmdPYmplY3QoUmVuZGVyQm94Kik7CiAgICAgdm9pZCByZW1vdmVGbG9hdGluZ09iamVj
dChSZW5kZXJCb3gqKTsKLQorICAgIHZvaWQgcmVtb3ZlRmxvYXRpbmdPYmplY3RzKEZsb2F0aW5n
T2JqZWN0KiwgaW50IHkpOworICAgIAogICAgIC8vIENhbGxlZCBmcm9tIGxpbmVXaWR0aCwgdG8g
cG9zaXRpb24gdGhlIGZsb2F0cyBhZGRlZCBpbiB0aGUgbGFzdCBsaW5lLgotICAgIC8vIFJldHVy
bnMgdHVyZSBpZiBhbmQgb25seSBpZiBpdCBoYXMgcG9zaXRpb25lZCBhbnkgZmxvYXRzLgorICAg
IC8vIFJldHVybnMgdHJ1ZSBpZiBhbmQgb25seSBpZiBpdCBoYXMgcG9zaXRpb25lZCBhbnkgZmxv
YXRzLgogICAgIGJvb2wgcG9zaXRpb25OZXdGbG9hdHMoKTsKKyAgICAKKyAgICAvLyBQb3NpdGlv
bnMgbmV3IGZsb2F0cyBhbmQgYWxzbyBhZGp1c3QgYWxsIGZsb2F0cyBlbmNvdW50ZXJlZCBvbiB0
aGUgbGluZSBpZiBhbnkgb2YgdGhlbQorICAgIC8vIGhhdmUgdG8gbW92ZSB0byB0aGUgbmV4dCBw
YWdlL2NvbHVtbi4KKyAgICBib29sIHBvc2l0aW9uTmV3RmxvYXRPbkxpbmUoRmxvYXRpbmdPYmpl
Y3QqIG5ld0Zsb2F0LCBGbG9hdGluZ09iamVjdCogbGFzdEZsb2F0RnJvbVByZXZpb3VzTGluZSk7
CisKICAgICB2b2lkIGNsZWFyRmxvYXRzKCk7CiAgICAgaW50IGdldENsZWFyRGVsdGEoUmVuZGVy
Qm94KiBjaGlsZCwgaW50IHlQb3MpOwogCkBAIC00MTYsOCArNDY4LDcgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIG9mZnNldEZvckNvbnRlbnRzKGludCYgdHgsIGludCYgdHkpIGNvbnN0OwogCiAgICAg
dm9pZCBjYWxjQ29sdW1uV2lkdGgoKTsKLSAgICBpbnQgbGF5b3V0Q29sdW1ucyhpbnQgZW5kT2ZD
b250ZW50ID0gLTEsIGludCByZXF1ZXN0ZWRDb2x1bW5IZWlnaHQgPSAtMSk7Ci0gICAgaW50IHZp
c2libGVUb3BPZkhpZ2hlc3RGbG9hdEV4dGVuZGluZ0JlbG93KGludCBib3R0b20sIGludCBtYXhI
ZWlnaHQpIGNvbnN0OworICAgIGJvb2wgbGF5b3V0Q29sdW1ucyhib29sIGhhc1NwZWNpZmllZFBh
Z2VIZWlnaHQsIGludCBwYWdlSGVpZ2h0LCBMYXlvdXRTdGF0ZU1haW50YWluZXImKTsKICAgICB2
b2lkIG1ha2VDaGlsZHJlbkFub255bW91c0NvbHVtbkJsb2NrcyhSZW5kZXJPYmplY3QqIGJlZm9y
ZUNoaWxkLCBSZW5kZXJCbG9jayogbmV3QmxvY2tCb3gsIFJlbmRlck9iamVjdCogbmV3Q2hpbGQp
OwogCiAgICAgYm9vbCBleHBhbmRzVG9FbmNsb3NlT3ZlcmhhbmdpbmdGbG9hdHMoKSBjb25zdDsK
QEAgLTQzMywzNiArNDg0LDYgQEAgcHJpdmF0ZToKICAgICBSZW5kZXJCbG9jayogY29udGludWF0
aW9uQmVmb3JlKFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpOwogICAgIFJlbmRlckJsb2NrKiBj
b250YWluaW5nQ29sdW1uc0Jsb2NrKGJvb2wgYWxsb3dBbm9ueW1vdXNDb2x1bW5CbG9jayA9IHRy
dWUpOwogICAgIFJlbmRlckJsb2NrKiBjb2x1bW5zQmxvY2tGb3JTcGFubmluZ0VsZW1lbnQoUmVu
ZGVyT2JqZWN0KiBuZXdDaGlsZCk7Ci0gICAgCi0gICAgc3RydWN0IEZsb2F0aW5nT2JqZWN0IDog
Tm9uY29weWFibGUgewotICAgICAgICBlbnVtIFR5cGUgewotICAgICAgICAgICAgRmxvYXRMZWZ0
LAotICAgICAgICAgICAgRmxvYXRSaWdodAotICAgICAgICB9OwotCi0gICAgICAgIEZsb2F0aW5n
T2JqZWN0KFR5cGUgdHlwZSkKLSAgICAgICAgICAgIDogbV9yZW5kZXJlcigwKQotICAgICAgICAg
ICAgLCBtX3RvcCgwKQotICAgICAgICAgICAgLCBtX2JvdHRvbSgwKQotICAgICAgICAgICAgLCBt
X2xlZnQoMCkKLSAgICAgICAgICAgICwgbV93aWR0aCgwKQotICAgICAgICAgICAgLCBtX3R5cGUo
dHlwZSkKLSAgICAgICAgICAgICwgbV9zaG91bGRQYWludCh0cnVlKQotICAgICAgICAgICAgLCBt
X2lzRGVzY2VuZGFudChmYWxzZSkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgVHlw
ZSB0eXBlKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VHlwZT4obV90eXBlKTsgfQotCi0gICAgICAg
IFJlbmRlckJveCogbV9yZW5kZXJlcjsKLSAgICAgICAgaW50IG1fdG9wOwotICAgICAgICBpbnQg
bV9ib3R0b207Ci0gICAgICAgIGludCBtX2xlZnQ7Ci0gICAgICAgIGludCBtX3dpZHRoOwotICAg
ICAgICB1bnNpZ25lZCBtX3R5cGUgOiAxOyAvLyBUeXBlIChsZWZ0IG9yIHJpZ2h0IGFsaWduZWQp
Ci0gICAgICAgIGJvb2wgbV9zaG91bGRQYWludCA6IDE7Ci0gICAgICAgIGJvb2wgbV9pc0Rlc2Nl
bmRhbnQgOiAxOwotICAgIH07CiAKICAgICBjbGFzcyBNYXJnaW5JbmZvIHsKICAgICAgICAgLy8g
Q29sbGFwc2luZyBmbGFncyBmb3Igd2hldGhlciB3ZSBjYW4gY29sbGFwc2Ugb3VyIG1hcmdpbnMg
d2l0aCBvdXIgY2hpbGRyZW4ncyBtYXJnaW5zLgpAQCAtNTM5LDYgKzU2MCwxMyBAQCBwcml2YXRl
OgogICAgIHZvaWQgc2V0Q29sbGFwc2VkQm90dG9tTWFyZ2luKGNvbnN0IE1hcmdpbkluZm8mKTsK
ICAgICAvLyBFbmQgaGVscGVyIGZ1bmN0aW9ucyBhbmQgc3RydWN0cyB1c2VkIGJ5IGxheW91dEJs
b2NrQ2hpbGRyZW4uCiAKKyAgICAvLyBQYWdpbmF0aW9uIHJvdXRpbmVzLgorICAgIGludCBuZXh0
UGFnZVRvcChpbnQgeVBvcykgY29uc3Q7IC8vIFJldHVybnMgdGhlIHRvcCBvZiB0aGUgbmV4dCBw
YWdlIGZvbGxvd2luZyB5UG9zLgorICAgIGludCBhcHBseUJlZm9yZUJyZWFrKFJlbmRlckJveCog
Y2hpbGQsIGludCB5UG9zKTsgLy8gSWYgdGhlIGNoaWxkIGhhcyBhIGJlZm9yZSBicmVhaywgdGhl
biByZXR1cm4gYSBuZXcgeVBvcyB0aGF0IHNoaWZ0cyB0byB0aGUgdG9wIG9mIHRoZSBuZXh0IHBh
Z2UvY29sdW1uLgorICAgIGludCBhcHBseUFmdGVyQnJlYWsoUmVuZGVyQm94KiBjaGlsZCwgaW50
IHlQb3MsIE1hcmdpbkluZm8mIG1hcmdpbkluZm8pOyAvLyBJZiB0aGUgY2hpbGQgaGFzIGFuIGFm
dGVyIGJyZWFrLCB0aGVuIHJldHVybiBhIG5ldyB5UG9zIHRoYXQgc2hpZnRzIHRvIHRoZSB0b3Ag
b2YgdGhlIG5leHQgcGFnZS9jb2x1bW4uCisgICAgaW50IGFkanVzdEZvclVuc3BsaXR0YWJsZUNo
aWxkKFJlbmRlckJveCogY2hpbGQsIGludCB5UG9zLCBib29sIGluY2x1ZGVNYXJnaW5zID0gZmFs
c2UpOyAvLyBJZiB0aGUgY2hpbGQgaXMgdW5zcGxpdHRhYmxlIGFuZCBjYW4ndCBmaXQgb24gdGhl
IGN1cnJlbnQgcGFnZSwgcmV0dXJuIHRoZSB0b3Agb2YgdGhlIG5leHQgcGFnZS9jb2x1bW4uCisg
ICAgdm9pZCBhZGp1c3RMaW5lUG9zaXRpb25Gb3JQYWdpbmF0aW9uKFJvb3RJbmxpbmVCb3gqLCBp
bnQmIGRlbHRhWSk7IC8vIENvbXB1dGVzIGEgZGVsdGFZIHZhbHVlIHRoYXQgcHV0IGEgbGluZSBh
dCB0aGUgdG9wIG9mIHRoZSBuZXh0IHBhZ2UgaWYgaXQgZG9lc24ndCBmaXQgb24gdGhlIGN1cnJl
bnQgcGFnZS4KKwogICAgIHR5cGVkZWYgUG9zaXRpb25lZE9iamVjdHNMaXN0SGFzaFNldDo6Y29u
c3RfaXRlcmF0b3IgSXRlcmF0b3I7CiAgICAgRGVwcmVjYXRlZFB0ckxpc3Q8RmxvYXRpbmdPYmpl
Y3Q+KiBtX2Zsb2F0aW5nT2JqZWN0czsKICAgICAKQEAgLTU1MSwxMiArNTc5LDE0IEBAIHByaXZh
dGU6CiAgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIG1fY29udGludWF0aW9uOwogCiAgICAgLy8g
QWxsb2NhdGVkIG9ubHkgd2hlbiBzb21lIG9mIHRoZXNlIGZpZWxkcyBoYXZlIG5vbi1kZWZhdWx0
IHZhbHVlcwotICAgIHN0cnVjdCBNYXhNYXJnaW4gOiBOb25jb3B5YWJsZSB7Ci0gICAgICAgIE1h
eE1hcmdpbihjb25zdCBSZW5kZXJCbG9jayogbykgCisgICAgc3RydWN0IFJlbmRlckJsb2NrUmFy
ZURhdGEgOiBOb25jb3B5YWJsZSB7CisgICAgICAgIFJlbmRlckJsb2NrUmFyZURhdGEoY29uc3Qg
UmVuZGVyQmxvY2sqIG8pIAogICAgICAgICAgICAgOiBtX3RvcFBvcyh0b3BQb3NEZWZhdWx0KG8p
KQogICAgICAgICAgICAgLCBtX3RvcE5lZyh0b3BOZWdEZWZhdWx0KG8pKQogICAgICAgICAgICAg
LCBtX2JvdHRvbVBvcyhib3R0b21Qb3NEZWZhdWx0KG8pKQogICAgICAgICAgICAgLCBtX2JvdHRv
bU5lZyhib3R0b21OZWdEZWZhdWx0KG8pKQorICAgICAgICAgICAgLCBtX3BhZ2luYXRpb25TdHJ1
dCgwKQorICAgICAgICAgICAgLCBtX3BhZ2VZKDApCiAgICAgICAgIHsgCiAgICAgICAgIH0KIApA
QCAtNTY0LDE0ICs1OTQsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgc3RhdGljIGludCB0b3BOZWdE
ZWZhdWx0KGNvbnN0IFJlbmRlckJsb2NrKiBvKSB7IHJldHVybiBvLT5tYXJnaW5Ub3AoKSA8IDAg
PyAtby0+bWFyZ2luVG9wKCkgOiAwOyB9CiAgICAgICAgIHN0YXRpYyBpbnQgYm90dG9tUG9zRGVm
YXVsdChjb25zdCBSZW5kZXJCbG9jayogbykgeyByZXR1cm4gby0+bWFyZ2luQm90dG9tKCkgPiAw
ID8gby0+bWFyZ2luQm90dG9tKCkgOiAwOyB9CiAgICAgICAgIHN0YXRpYyBpbnQgYm90dG9tTmVn
RGVmYXVsdChjb25zdCBSZW5kZXJCbG9jayogbykgeyByZXR1cm4gby0+bWFyZ2luQm90dG9tKCkg
PCAwID8gLW8tPm1hcmdpbkJvdHRvbSgpIDogMDsgfQotCisgICAgICAgIAogICAgICAgICBpbnQg
bV90b3BQb3M7CiAgICAgICAgIGludCBtX3RvcE5lZzsKICAgICAgICAgaW50IG1fYm90dG9tUG9z
OwogICAgICAgICBpbnQgbV9ib3R0b21OZWc7CisgICAgICAgIGludCBtX3BhZ2luYXRpb25TdHJ1
dDsKKyAgICAgICAgaW50IG1fcGFnZVk7CiAgICAgIH07CiAKLSAgICBNYXhNYXJnaW4qIG1fbWF4
TWFyZ2luOworICAgIFJlbmRlckJsb2NrUmFyZURhdGEqIG1fcmFyZURhdGE7CiAKICAgICBSZW5k
ZXJPYmplY3RDaGlsZExpc3QgbV9jaGlsZHJlbjsKICAgICBSZW5kZXJMaW5lQm94TGlzdCBtX2xp
bmVCb3hlczsgICAvLyBBbGwgb2YgdGhlIHJvb3QgbGluZSBib3hlcyBjcmVhdGVkIGZvciB0aGlz
IGJsb2NrIGZsb3cuICBGb3IgZXhhbXBsZSwgPGRpdj5IZWxsbzxicj53b3JsZC48L2Rpdj4gd2ls
bCBoYXZlIHR3byB0b3RhbCBsaW5lcyBmb3IgdGhlIDxkaXY+LgpJbmRleDogV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCShyZXZpc2lvbiA2NzYzOSkKKysrIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJl
bmRlckxpc3RNYXJrZXIuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCisjaW5jbHVkZSAiU2V0
dGluZ3MuaCIKICNpbmNsdWRlICJUcmFpbGluZ0Zsb2F0c1Jvb3RJbmxpbmVCb3guaCIKICNpbmNs
dWRlICJicmVha19saW5lcy5oIgogI2luY2x1ZGUgPHd0Zi9BbHdheXNJbmxpbmUuaD4KQEAgLTU3
NCwxMiArNTc1LDExIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dElubGluZUNoaWxkcmVuKGIK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChvLT5pc1Bvc2l0aW9uZWQoKSkKICAg
ICAgICAgICAgICAgICAgICAgby0+Y29udGFpbmluZ0Jsb2NrKCktPmluc2VydFBvc2l0aW9uZWRP
YmplY3QoYm94KTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKG8tPmlzRmxvYXRpbmcoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0cy5hcHBl
bmQoRmxvYXRXaXRoUmVjdChib3gpKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZnVs
bExheW91dCB8fCBvLT5uZWVkc0xheW91dCgpKSAvLyBSZXBsYWNlZCBlbGVtZW50cwotICAgICAg
ICAgICAgICAgICAgICAgICAgdG9SZW5kZXJCb3gobyktPmRpcnR5TGluZUJveGVzKGZ1bGxMYXlv
dXQpOwotCisgICAgICAgICAgICAgICAgZWxzZSBpZiAoby0+aXNGbG9hdGluZygpKQorICAgICAg
ICAgICAgICAgICAgICBmbG9hdHMuYXBwZW5kKEZsb2F0V2l0aFJlY3QoYm94KSk7CisgICAgICAg
ICAgICAgICAgZWxzZSBpZiAoZnVsbExheW91dCB8fCBvLT5uZWVkc0xheW91dCgpKSB7CisgICAg
ICAgICAgICAgICAgICAgIC8vIFJlcGxhY2VkIGVsZW1lbnRzCisgICAgICAgICAgICAgICAgICAg
IHRvUmVuZGVyQm94KG8pLT5kaXJ0eUxpbmVCb3hlcyhmdWxsTGF5b3V0KTsKICAgICAgICAgICAg
ICAgICAgICAgby0+bGF5b3V0SWZOZWVkZWQoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9IGVsc2UgaWYgKG8tPmlzVGV4dCgpIHx8IChvLT5pc1JlbmRlcklubGluZSgpICYmICFl
bmRPZklubGluZSkpIHsKQEAgLTU5Nyw3ICs1OTcsOCBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlv
dXRJbmxpbmVDaGlsZHJlbihiCiAgICAgICAgIHVuc2lnbmVkIGZsb2F0SW5kZXg7CiAgICAgICAg
IGJvb2wgZmlyc3RMaW5lID0gdHJ1ZTsKICAgICAgICAgYm9vbCBwcmV2aW91c0xpbmVCcm9rZUNs
ZWFubHkgPSB0cnVlOwotICAgICAgICBSb290SW5saW5lQm94KiBzdGFydExpbmUgPSBkZXRlcm1p
bmVTdGFydFBvc2l0aW9uKGZpcnN0TGluZSwgZnVsbExheW91dCwgcHJldmlvdXNMaW5lQnJva2VD
bGVhbmx5LCByZXNvbHZlciwgZmxvYXRzLCBmbG9hdEluZGV4KTsKKyAgICAgICAgUm9vdElubGlu
ZUJveCogc3RhcnRMaW5lID0gZGV0ZXJtaW5lU3RhcnRQb3NpdGlvbihmaXJzdExpbmUsIGZ1bGxM
YXlvdXQsIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSwgcmVzb2x2ZXIsIGZsb2F0cywgZmxvYXRJ
bmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1c2VSZXBhaW50Qm91bmRzLCByZXBhaW50VG9wLCByZXBhaW50Qm90dG9tKTsKIAog
ICAgICAgICBpZiAoZnVsbExheW91dCAmJiBoYXNJbmxpbmVDaGlsZCAmJiAhc2VsZk5lZWRzTGF5
b3V0KCkpIHsKICAgICAgICAgICAgIHNldE5lZWRzTGF5b3V0KHRydWUsIGZhbHNlKTsgIC8vIE1h
cmsgb3Vyc2VsdmVzIGFzIG5lZWRpbmcgYSBmdWxsIGxheW91dC4gVGhpcyB3YXkgd2UnbGwgcmVw
YWludCBsaWtlCkBAIC02MjUsOSArNjI2LDExIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dElu
bGluZUNoaWxkcmVuKGIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgOiBkZXRl
cm1pbmVFbmRQb3NpdGlvbihzdGFydExpbmUsIGNsZWFuTGluZVN0YXJ0LCBjbGVhbkxpbmVCaWRp
U3RhdHVzLCBlbmRMaW5lWVBvcyk7CiAKICAgICAgICAgaWYgKHN0YXJ0TGluZSkgewotICAgICAg
ICAgICAgdXNlUmVwYWludEJvdW5kcyA9IHRydWU7Ci0gICAgICAgICAgICByZXBhaW50VG9wID0g
aGVpZ2h0KCk7Ci0gICAgICAgICAgICByZXBhaW50Qm90dG9tID0gaGVpZ2h0KCk7CisgICAgICAg
ICAgICBpZiAoIXVzZVJlcGFpbnRCb3VuZHMpIHsKKyAgICAgICAgICAgICAgICB1c2VSZXBhaW50
Qm91bmRzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZXBhaW50VG9wID0gaGVpZ2h0KCk7Cisg
ICAgICAgICAgICAgICAgcmVwYWludEJvdHRvbSA9IGhlaWdodCgpOworICAgICAgICAgICAgfQog
ICAgICAgICAgICAgUmVuZGVyQXJlbmEqIGFyZW5hID0gcmVuZGVyQXJlbmEoKTsKICAgICAgICAg
ICAgIFJvb3RJbmxpbmVCb3gqIGJveCA9IHN0YXJ0TGluZTsKICAgICAgICAgICAgIHdoaWxlIChi
b3gpIHsKQEAgLTY2Miw2ICs2NjUsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVD
aGlsZHJlbihiCiAgICAgICAgIGJvb2wgY2hlY2tGb3JGbG9hdHNGcm9tTGFzdExpbmUgPSBmYWxz
ZTsKIAogICAgICAgICBib29sIGlzTGluZUVtcHR5ID0gdHJ1ZTsKKyAgICAgICAgYm9vbCBwYWdp
bmF0ZWQgPSB2aWV3KCktPmxheW91dFN0YXRlKCktPnBhZ2luYXRlZCgpOwogCiAgICAgICAgIHdo
aWxlICghZW5kLmF0RW5kKCkpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBJcyB0aGlzIGNoZWNr
IG5lY2Vzc2FyeSBiZWZvcmUgdGhlIGZpcnN0IGl0ZXJhdGlvbiBvciBjYW4gaXQgYmUgbW92ZWQg
dG8gdGhlIGVuZD8KQEAgLTY3NCw3ICs2NzgsMTAgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0
SW5saW5lQ2hpbGRyZW4oYgogICAgICAgICAgICAgCiAgICAgICAgICAgICBFQ2xlYXIgY2xlYXIg
PSBDTk9ORTsKICAgICAgICAgICAgIGJvb2wgaHlwaGVuYXRlZDsKLSAgICAgICAgICAgIGVuZCA9
IGZpbmROZXh0TGluZUJyZWFrKHJlc29sdmVyLCBmaXJzdExpbmUsIGlzTGluZUVtcHR5LCBwcmV2
aW91c0xpbmVCcm9rZUNsZWFubHksIGh5cGhlbmF0ZWQsICZjbGVhcik7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIElubGluZUl0ZXJhdG9yIG9sZEVuZCA9IGVuZDsKKyAgICAgICAgICAgIEZs
b2F0aW5nT2JqZWN0KiBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lID0gbV9mbG9hdGluZ09iamVj
dHMgPyBtX2Zsb2F0aW5nT2JqZWN0cy0+bGFzdCgpIDogMDsKKyAgICAgICAgICAgIGVuZCA9IGZp
bmROZXh0TGluZUJyZWFrKHJlc29sdmVyLCBmaXJzdExpbmUsIGlzTGluZUVtcHR5LCBwcmV2aW91
c0xpbmVCcm9rZUNsZWFubHksIGh5cGhlbmF0ZWQsICZjbGVhciwgbGFzdEZsb2F0RnJvbVByZXZp
b3VzTGluZSk7CiAgICAgICAgICAgICBpZiAocmVzb2x2ZXIucG9zaXRpb24oKS5hdEVuZCgpKSB7
CiAgICAgICAgICAgICAgICAgcmVzb2x2ZXIuZGVsZXRlUnVucygpOwogICAgICAgICAgICAgICAg
IGNoZWNrRm9yRmxvYXRzRnJvbUxhc3RMaW5lID0gdHJ1ZTsKQEAgLTczOSw2ICs3NDYsNyBAQCB2
b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVDaGlsZHJlbihiCiAgICAgICAgICAgICAgICAg
Ly8gaW5saW5lIGZsb3cgYm94ZXMuCiAKICAgICAgICAgICAgICAgICBSb290SW5saW5lQm94KiBs
aW5lQm94ID0gMDsKKyAgICAgICAgICAgICAgICBpbnQgb2xkSGVpZ2h0ID0gaGVpZ2h0KCk7CiAg
ICAgICAgICAgICAgICAgaWYgKHJlc29sdmVyLnJ1bkNvdW50KCkpIHsKICAgICAgICAgICAgICAg
ICAgICAgaWYgKGh5cGhlbmF0ZWQpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlci5s
b2dpY2FsbHlMYXN0UnVuKCktPm1faGFzSHlwaGVuID0gdHJ1ZTsKQEAgLTc4OSw2ICs3OTcsMjkg
QEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4oYgogICAgICAgICAgICAg
ICAgICAgICAgICAgcmVwYWludFRvcCA9IG1pbihyZXBhaW50VG9wLCBsaW5lQm94LT50b3BWaXNp
YmxlT3ZlcmZsb3coKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXBhaW50Qm90dG9tID0g
bWF4KHJlcGFpbnRCb3R0b20sIGxpbmVCb3gtPmJvdHRvbVZpc2libGVPdmVyZmxvdygpKTsKICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHBhZ2luYXRlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFkanVz
dG1lbnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgYWRqdXN0TGluZVBvc2l0aW9uRm9y
UGFnaW5hdGlvbihsaW5lQm94LCBhZGp1c3RtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChhZGp1c3RtZW50KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9sZExp
bmVXaWR0aCA9IGxpbmVXaWR0aChvbGRIZWlnaHQsIGZpcnN0TGluZSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbGluZUJveC0+YWRqdXN0UG9zaXRpb24oMCwgYWRqdXN0bWVudCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVzZVJlcGFpbnRCb3VuZHMpIC8vIFRoaXMg
Y2FuIG9ubHkgYmUgYSBwb3NpdGl2ZSBhZGp1c3RtZW50LCBzbyBubyBuZWVkIHRvIHVwZGF0ZSBy
ZXBhaW50VG9wLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBhaW50Qm90dG9t
ID0gbWF4KHJlcGFpbnRCb3R0b20sIGxpbmVCb3gtPmJvdHRvbVZpc2libGVPdmVyZmxvdygpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGxpbmVXaWR0aChvbGRIZWlnaHQgKyBhZGp1c3RtZW50LCBmaXJzdExpbmUpICE9
IG9sZExpbmVXaWR0aCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBo
YXZlIHRvIGRlbGV0ZSB0aGlzIGxpbmUsIHJlbW92ZSBhbGwgZmxvYXRzIHRoYXQgZ290IGFkZGVk
LCBhbmQgbGV0IGxpbmUgbGF5b3V0IHJlLXJ1bi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbGluZUJveC0+ZGVsZXRlTGluZShyZW5kZXJBcmVuYSgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVtb3ZlRmxvYXRpbmdPYmplY3RzKGxhc3RGbG9hdEZyb21QcmV2
aW91c0xpbmUsIG9sZEhlaWdodCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNl
dEhlaWdodChvbGRIZWlnaHQgKyBhZGp1c3RtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzb2x2ZXIuc2V0UG9zaXRpb24ob2xkRW5kKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZW5kID0gb2xkRW5kOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzZXRIZWlnaHQobGluZUJveC0+YmxvY2tIZWlnaHQoKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBmaXJzdExpbmUgPSBmYWxzZTsKQEAgLTgyMyw2
ICs4NTQsMTAgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4oYgogICAg
ICAgICAgICAgICAgIGludCBkZWx0YSA9IGhlaWdodCgpIC0gZW5kTGluZVlQb3M7CiAgICAgICAg
ICAgICAgICAgZm9yIChSb290SW5saW5lQm94KiBsaW5lID0gZW5kTGluZTsgbGluZTsgbGluZSA9
IGxpbmUtPm5leHRSb290Qm94KCkpIHsKICAgICAgICAgICAgICAgICAgICAgbGluZS0+YXR0YWNo
TGluZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAocGFnaW5hdGVkKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBkZWx0YSAtPSBsaW5lLT5wYWdpbmF0aW9uU3RydXQoKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGFkanVzdExpbmVQb3NpdGlvbkZvclBhZ2luYXRpb24obGluZSwgZGVs
dGEpOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGlmIChkZWx0
YSkgewogICAgICAgICAgICAgICAgICAgICAgICAgcmVwYWludFRvcCA9IG1pbihyZXBhaW50VG9w
LCBsaW5lLT50b3BWaXNpYmxlT3ZlcmZsb3coKSArIG1pbihkZWx0YSwgMCkpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgcmVwYWludEJvdHRvbSA9IG1heChyZXBhaW50Qm90dG9tLCBsaW5lLT5i
b3R0b21WaXNpYmxlT3ZlcmZsb3coKSArIG1heChkZWx0YSwgMCkpOwpAQCAtOTAzLDIwICs5Mzgs
NDQgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4oYgogfQogCiBSb290
SW5saW5lQm94KiBSZW5kZXJCbG9jazo6ZGV0ZXJtaW5lU3RhcnRQb3NpdGlvbihib29sJiBmaXJz
dExpbmUsIGJvb2wmIGZ1bGxMYXlvdXQsIGJvb2wmIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSwg
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmxp
bmVCaWRpUmVzb2x2ZXImIHJlc29sdmVyLCBWZWN0b3I8RmxvYXRXaXRoUmVjdD4mIGZsb2F0cywg
dW5zaWduZWQmIG51bUNsZWFuRmxvYXRzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgSW5saW5lQmlkaVJlc29sdmVyJiByZXNvbHZlciwgVmVjdG9y
PEZsb2F0V2l0aFJlY3Q+JiBmbG9hdHMsIHVuc2lnbmVkJiBudW1DbGVhbkZsb2F0cywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wmIHVzZVJl
cGFpbnRCb3VuZHMsIGludCYgcmVwYWludFRvcCwgaW50JiByZXBhaW50Qm90dG9tKQogewogICAg
IFJvb3RJbmxpbmVCb3gqIGN1cnIgPSAwOwogICAgIFJvb3RJbmxpbmVCb3gqIGxhc3QgPSAwOwog
CiAgICAgYm9vbCBkaXJ0aWVkQnlGbG9hdCA9IGZhbHNlOwogICAgIGlmICghZnVsbExheW91dCkg
eworICAgICAgICAvLyBQYWdpbmF0ZSBhbGwgb2YgdGhlIGNsZWFuIGxpbmVzLgorICAgICAgICBi
b29sIHBhZ2luYXRlZCA9IHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+cGFnaW5hdGVkKCk7CisgICAg
ICAgIGludCBwYWdpbmF0aW9uRGVsdGEgPSAwOwogICAgICAgICBzaXplX3QgZmxvYXRJbmRleCA9
IDA7CiAgICAgICAgIGZvciAoY3VyciA9IGZpcnN0Um9vdEJveCgpOyBjdXJyICYmICFjdXJyLT5p
c0RpcnR5KCk7IGN1cnIgPSBjdXJyLT5uZXh0Um9vdEJveCgpKSB7CisgICAgICAgICAgICBpZiAo
cGFnaW5hdGVkKSB7CisgICAgICAgICAgICAgICAgcGFnaW5hdGlvbkRlbHRhIC09IGN1cnItPnBh
Z2luYXRpb25TdHJ1dCgpOworICAgICAgICAgICAgICAgIGFkanVzdExpbmVQb3NpdGlvbkZvclBh
Z2luYXRpb24oY3VyciwgcGFnaW5hdGlvbkRlbHRhKTsKKyAgICAgICAgICAgICAgICBpZiAocGFn
aW5hdGlvbkRlbHRhKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChjb250YWluc0Zsb2F0cygp
IHx8ICFmbG9hdHMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhN
RTogRG8gYmV0dGVyIGV2ZW50dWFsbHkuICBGb3Igbm93IGlmIHdlIGV2ZXIgc2hpZnQgYmVjYXVz
ZSBvZiBwYWdpbmF0aW9uIGFuZCBmbG9hdHMgYXJlIHByZXNlbnQganVzdCBnbyB0byBhIGZ1bGwg
bGF5b3V0LgorICAgICAgICAgICAgICAgICAgICAgICAgZnVsbExheW91dCA9IHRydWU7IAorICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmICghdXNlUmVwYWludEJvdW5k
cykKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzZVJlcGFpbnRCb3VuZHMgPSB0cnVlOworICAg
ICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIHJlcGFpbnRUb3AgPSBt
aW4ocmVwYWludFRvcCwgY3Vyci0+dG9wVmlzaWJsZU92ZXJmbG93KCkgKyBtaW4ocGFnaW5hdGlv
bkRlbHRhLCAwKSk7CisgICAgICAgICAgICAgICAgICAgIHJlcGFpbnRCb3R0b20gPSBtYXgocmVw
YWludEJvdHRvbSwgY3Vyci0+Ym90dG9tVmlzaWJsZU92ZXJmbG93KCkgKyBtYXgocGFnaW5hdGlv
bkRlbHRhLCAwKSk7CisgICAgICAgICAgICAgICAgICAgIGN1cnItPmFkanVzdFBvc2l0aW9uKDAs
IHBhZ2luYXRpb25EZWx0YSk7CisgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKFZlY3RvcjxSZW5kZXJC
b3gqPiogY2xlYW5MaW5lRmxvYXRzID0gY3Vyci0+ZmxvYXRzUHRyKCkpIHsKICAgICAgICAgICAg
ICAgICBWZWN0b3I8UmVuZGVyQm94Kj46Oml0ZXJhdG9yIGVuZCA9IGNsZWFuTGluZUZsb2F0cy0+
ZW5kKCk7CiAgICAgICAgICAgICAgICAgZm9yIChWZWN0b3I8UmVuZGVyQm94Kj46Oml0ZXJhdG9y
IG8gPSBjbGVhbkxpbmVGbG9hdHMtPmJlZ2luKCk7IG8gIT0gZW5kOyArK28pIHsKICAgICAgICAg
ICAgICAgICAgICAgUmVuZGVyQm94KiBmID0gKm87Ci0gICAgICAgICAgICAgICAgICAgIEludFNp
emUgbmV3U2l6ZShmLT53aWR0aCgpICsgZi0+bWFyZ2luTGVmdCgpICtmLT5tYXJnaW5SaWdodCgp
LCBmLT5oZWlnaHQoKSArIGYtPm1hcmdpblRvcCgpICsgZi0+bWFyZ2luQm90dG9tKCkpOworICAg
ICAgICAgICAgICAgICAgICBmLT5sYXlvdXRJZk5lZWRlZCgpOworICAgICAgICAgICAgICAgICAg
ICBJbnRTaXplIG5ld1NpemUoZi0+d2lkdGgoKSArIGYtPm1hcmdpbkxlZnQoKSArIGYtPm1hcmdp
blJpZ2h0KCksIGYtPmhlaWdodCgpICsgZi0+bWFyZ2luVG9wKCkgKyBmLT5tYXJnaW5Cb3R0b20o
KSk7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChmbG9hdEluZGV4IDwgZmxvYXRzLnNpemUo
KSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChmbG9hdHNbZmxvYXRJbmRleF0ub2JqZWN0ICE9
IGYpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEEgbmV3IGZsb2F0IGhhcyBiZWVuIGlu
c2VydGVkIGJlZm9yZSB0aGlzIGxpbmUgb3IgYmVmb3JlIGl0cyBsYXN0IGtub3duIGZsb2F0LgpA
QCAtMTIzOSwxNCArMTI5OCwxNCBAQCB2b2lkIFJlbmRlckJsb2NrOjpza2lwVHJhaWxpbmdXaGl0
ZXNwYWNlCiAgICAgfQogfQogCi1pbnQgUmVuZGVyQmxvY2s6OnNraXBMZWFkaW5nV2hpdGVzcGFj
ZShJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sdmVyLCBib29sIGZpcnN0TGluZSwgYm9vbCBpc0xp
bmVFbXB0eSwgYm9vbCBwcmV2aW91c0xpbmVCcm9rZUNsZWFubHkpCitpbnQgUmVuZGVyQmxvY2s6
OnNraXBMZWFkaW5nV2hpdGVzcGFjZShJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sdmVyLCBib29s
IGZpcnN0TGluZSwgYm9vbCBpc0xpbmVFbXB0eSwgYm9vbCBwcmV2aW91c0xpbmVCcm9rZUNsZWFu
bHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdGluZ09iamVj
dCogbGFzdEZsb2F0RnJvbVByZXZpb3VzTGluZSkKIHsKICAgICBpbnQgYXZhaWxhYmxlV2lkdGgg
PSBsaW5lV2lkdGgoaGVpZ2h0KCksIGZpcnN0TGluZSk7CiAgICAgd2hpbGUgKCFyZXNvbHZlci5w
b3NpdGlvbigpLmF0RW5kKCkgJiYgIXJlcXVpcmVzTGluZUJveChyZXNvbHZlci5wb3NpdGlvbigp
LCBpc0xpbmVFbXB0eSwgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5KSkgewogICAgICAgICBSZW5k
ZXJPYmplY3QqIG9iamVjdCA9IHJlc29sdmVyLnBvc2l0aW9uKCkub2JqOwogICAgICAgICBpZiAo
b2JqZWN0LT5pc0Zsb2F0aW5nKCkpIHsKLSAgICAgICAgICAgIGluc2VydEZsb2F0aW5nT2JqZWN0
KHRvUmVuZGVyQm94KG9iamVjdCkpOwotICAgICAgICAgICAgcG9zaXRpb25OZXdGbG9hdHMoKTsK
KyAgICAgICAgICAgIHBvc2l0aW9uTmV3RmxvYXRPbkxpbmUoaW5zZXJ0RmxvYXRpbmdPYmplY3Qo
dG9SZW5kZXJCb3gob2JqZWN0KSksIGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUpOwogICAgICAg
ICAgICAgYXZhaWxhYmxlV2lkdGggPSBsaW5lV2lkdGgoaGVpZ2h0KCksIGZpcnN0TGluZSk7CiAg
ICAgICAgIH0gZWxzZSBpZiAob2JqZWN0LT5pc1Bvc2l0aW9uZWQoKSkgewogICAgICAgICAgICAg
Ly8gRklYTUU6IFRoZSBtYXRoIGhlcmUgaXMgYWN0dWFsbHkgbm90IHJlYWxseSByaWdodC4gIEl0
J3MgYSBiZXN0LWd1ZXNzIGFwcHJveGltYXRpb24gdGhhdApAQCAtMTM1OCwxNCArMTQxNywxNCBA
QCBzdGF0aWMgdm9pZCB0cnlIeXBoZW5hdGluZyhSZW5kZXJUZXh0KiB0CiB9CiAKIElubGluZUl0
ZXJhdG9yIFJlbmRlckJsb2NrOjpmaW5kTmV4dExpbmVCcmVhayhJbmxpbmVCaWRpUmVzb2x2ZXIm
IHJlc29sdmVyLCBib29sIGZpcnN0TGluZSwgIGJvb2wmIGlzTGluZUVtcHR5LCBib29sJiBwcmV2
aW91c0xpbmVCcm9rZUNsZWFubHksIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wmIGh5cGhlbmF0ZWQsIEVDbGVhciogY2xlYXIpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCYgaHlwaGVuYXRlZCwgRUNs
ZWFyKiBjbGVhciwgRmxvYXRpbmdPYmplY3QqIGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUpCiB7
CiAgICAgQVNTRVJUKHJlc29sdmVyLnBvc2l0aW9uKCkuYmxvY2sgPT0gdGhpcyk7CiAKICAgICBi
b29sIGFwcGxpZWRTdGFydFdpZHRoID0gcmVzb2x2ZXIucG9zaXRpb24oKS5wb3MgPiAwOwogICAg
IExpbmVNaWRwb2ludFN0YXRlJiBsaW5lTWlkcG9pbnRTdGF0ZSA9IHJlc29sdmVyLm1pZHBvaW50
U3RhdGUoKTsKICAgICAKLSAgICBpbnQgd2lkdGggPSBza2lwTGVhZGluZ1doaXRlc3BhY2UocmVz
b2x2ZXIsIGZpcnN0TGluZSwgaXNMaW5lRW1wdHksIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSk7
CisgICAgaW50IHdpZHRoID0gc2tpcExlYWRpbmdXaGl0ZXNwYWNlKHJlc29sdmVyLCBmaXJzdExp
bmUsIGlzTGluZUVtcHR5LCBwcmV2aW91c0xpbmVCcm9rZUNsZWFubHksIGxhc3RGbG9hdEZyb21Q
cmV2aW91c0xpbmUpOwogCiAgICAgaW50IHcgPSAwOwogICAgIGludCB0bXBXID0gMDsKQEAgLTE0
NTAsMTIgKzE1MDksMTIgQEAgSW5saW5lSXRlcmF0b3IgUmVuZGVyQmxvY2s6OmZpbmROZXh0TGlu
ZQogICAgICAgICAgICAgLy8gYWRkIHRvIHNwZWNpYWwgb2JqZWN0cy4uLgogICAgICAgICAgICAg
aWYgKG8tPmlzRmxvYXRpbmcoKSkgewogICAgICAgICAgICAgICAgIFJlbmRlckJveCogZmxvYXRC
b3ggPSB0b1JlbmRlckJveChvKTsKLSAgICAgICAgICAgICAgICBpbnNlcnRGbG9hdGluZ09iamVj
dChmbG9hdEJveCk7CisgICAgICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGYgPSBpbnNlcnRG
bG9hdGluZ09iamVjdChmbG9hdEJveCk7CiAgICAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgaXQg
Zml0cyBpbiB0aGUgY3VycmVudCBsaW5lLgogICAgICAgICAgICAgICAgIC8vIElmIGl0IGRvZXMs
IHBvc2l0aW9uIGl0IG5vdywgb3RoZXJ3aXNlLCBwb3NpdGlvbgogICAgICAgICAgICAgICAgIC8v
IGl0IGFmdGVyIG1vdmluZyB0byBuZXh0IGxpbmUgKGluIG5ld0xpbmUoKSBmdW5jKQogICAgICAg
ICAgICAgICAgIGlmIChmbG9hdHNGaXRPbkxpbmUgJiYgZmxvYXRCb3gtPndpZHRoKCkgKyBmbG9h
dEJveC0+bWFyZ2luTGVmdCgpICsgZmxvYXRCb3gtPm1hcmdpblJpZ2h0KCkgKyB3ICsgdG1wVyA8
PSB3aWR0aCkgewotICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbk5ld0Zsb2F0cygpOworICAg
ICAgICAgICAgICAgICAgICBwb3NpdGlvbk5ld0Zsb2F0T25MaW5lKGYsIGxhc3RGbG9hdEZyb21Q
cmV2aW91c0xpbmUpOwogICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IGxpbmVXaWR0aChoZWln
aHQoKSwgZmlyc3RMaW5lKTsKICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAg
ICAgICAgZmxvYXRzRml0T25MaW5lID0gZmFsc2U7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5j
cHAJKHJldmlzaW9uIDY3NjM5KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtOTczLDcgKzk3Myw3IEBAIHZvaWQgUmVuZGVyQm94OjptYXBMb2Nh
bFRvQ29udGFpbmVyKFJlbmQKICAgICBpZiAoUmVuZGVyVmlldyogdiA9IHZpZXcoKSkgewogICAg
ICAgICBpZiAodi0+bGF5b3V0U3RhdGVFbmFibGVkKCkgJiYgIXJlcGFpbnRDb250YWluZXIpIHsK
ICAgICAgICAgICAgIExheW91dFN0YXRlKiBsYXlvdXRTdGF0ZSA9IHYtPmxheW91dFN0YXRlKCk7
Ci0gICAgICAgICAgICBJbnRTaXplIG9mZnNldCA9IGxheW91dFN0YXRlLT5tX29mZnNldDsKKyAg
ICAgICAgICAgIEludFNpemUgb2Zmc2V0ID0gbGF5b3V0U3RhdGUtPm1fcGFpbnRPZmZzZXQ7CiAg
ICAgICAgICAgICBvZmZzZXQuZXhwYW5kKHgoKSwgeSgpKTsKICAgICAgICAgICAgIGlmIChzdHls
ZSgpLT5wb3NpdGlvbigpID09IFJlbGF0aXZlUG9zaXRpb24gJiYgbGF5ZXIoKSkKICAgICAgICAg
ICAgICAgICBvZmZzZXQgKz0gbGF5ZXIoKS0+cmVsYXRpdmVQb3NpdGlvbk9mZnNldCgpOwpAQCAt
MTE3MCw3ICsxMTcwLDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVSZWN0Rm9yUmVwYWludChS
ZQogICAgICAgICAgICAgICAgIHJlY3QubW92ZShsYXllcigpLT5yZWxhdGl2ZVBvc2l0aW9uT2Zm
c2V0KCkpOwogCiAgICAgICAgICAgICByZWN0Lm1vdmUoeCgpLCB5KCkpOwotICAgICAgICAgICAg
cmVjdC5tb3ZlKGxheW91dFN0YXRlLT5tX29mZnNldCk7CisgICAgICAgICAgICByZWN0Lm1vdmUo
bGF5b3V0U3RhdGUtPm1fcGFpbnRPZmZzZXQpOwogICAgICAgICAgICAgaWYgKGxheW91dFN0YXRl
LT5tX2NsaXBwZWQpCiAgICAgICAgICAgICAgICAgcmVjdC5pbnRlcnNlY3QobGF5b3V0U3RhdGUt
Pm1fY2xpcFJlY3QpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjkxNSw0ICsyOTE1LDE5IEBA
IHZvaWQgUmVuZGVyQm94OjpjbGVhckxheW91dE92ZXJmbG93KCkKICAgICBtX292ZXJmbG93LT5y
ZXNldExheW91dE92ZXJmbG93KGJvcmRlckJveFJlY3QoKSk7CiB9CiAKK3ZvaWQgUmVuZGVyQm94
OjptYXJrRGVzY2VuZGFudEJsb2Nrc0FuZExpbmVzRm9yTGF5b3V0KGJvb2wgaW5MYXlvdXQpCit7
CisgICAgaWYgKCFtX2V2ZXJIYWRMYXlvdXQgfHwgaXNSZXBsYWNlZCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBzZXRDaGlsZE5lZWRzTGF5b3V0KHRydWUsICFpbkxheW91dCk7CisKKyAgICAv
LyBJdGVyYXRlIG92ZXIgb3VyIGNoaWxkcmVuIGFuZCBtYXJrIHRoZW0gYXMgbmVlZGVkLgorICAg
IGZvciAoUmVuZGVyQm94KiBjaGlsZCA9IGZpcnN0Q2hpbGRCb3goKTsgY2hpbGQ7IGNoaWxkID0g
Y2hpbGQtPm5leHRTaWJsaW5nQm94KCkpIHsKKyAgICAgICAgaWYgKGNoaWxkLT5pc0Zsb2F0aW5n
T3JQb3NpdGlvbmVkKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgY2hpbGQtPm1h
cmtEZXNjZW5kYW50QmxvY2tzQW5kTGluZXNGb3JMYXlvdXQoaW5MYXlvdXQpOworICAgIH0KK30K
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgJKHJldmlz
aW9uIDY3NjM5KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI5Nyw2ICsyOTcsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBzaHJpbmtUb0F2b2lkRmxv
YXRzKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGF2b2lkc0Zsb2F0cygpIGNvbnN0OwogCisg
ICAgdmlydHVhbCB2b2lkIG1hcmtEZXNjZW5kYW50QmxvY2tzQW5kTGluZXNGb3JMYXlvdXQoYm9v
bCBpbkxheW91dCA9IHRydWUpOworICAgIAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBz
dHlsZVdpbGxDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogbmV3U3R5
bGUpOwogICAgIHZpcnR1YWwgdm9pZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNv
bnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJGbGV4aWJsZUJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
RmxleGlibGVCb3guY3BwCShyZXZpc2lvbiA2NzYzOSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckZsZXhpYmxlQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAxLDcgKzIwMSw3IEBAIHZv
aWQgUmVuZGVyRmxleGlibGVCb3g6OmNhbGNQcmVmV2lkdGhzKCkKICAgICBzZXRQcmVmV2lkdGhz
RGlydHkoZmFsc2UpOwogfQogCi12b2lkIFJlbmRlckZsZXhpYmxlQm94OjpsYXlvdXRCbG9jayhi
b29sIHJlbGF5b3V0Q2hpbGRyZW4pCit2b2lkIFJlbmRlckZsZXhpYmxlQm94OjpsYXlvdXRCbG9j
ayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIGludCAvKnBhZ2VIZWlnaHQgRklYTUU6IEltcGxlbWVu
dCAqLykKIHsKICAgICBBU1NFUlQobmVlZHNMYXlvdXQoKSk7CiAKQEAgLTI3OCw2ICsyNzgsOSBA
QCB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjpsYXlvdXRCbG9jayhib29sCiAKICAgICBzdGF0ZVB1
c2hlci5wb3AoKTsKIAorICAgIGlmICh2aWV3KCktPmxheW91dFN0YXRlKCktPm1fcGFnZUhlaWdo
dCkKKyAgICAgICAgc2V0UGFnZVkodmlldygpLT5sYXlvdXRTdGF0ZSgpLT5wYWdlWSh5KCkpKTsK
KwogICAgIC8vIFVwZGF0ZSBvdXIgc2Nyb2xsYmFycyBpZiB3ZSdyZSBvdmVyZmxvdzphdXRvL3Nj
cm9sbC9oaWRkZW4gbm93IHRoYXQgd2Uga25vdyBpZgogICAgIC8vIHdlIG92ZXJmbG93IG9yIG5v
dC4KICAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkpCkBAIC0zMzEsNiArMzM0LDggQEAgdm9pZCBS
ZW5kZXJGbGV4aWJsZUJveDo6bGF5b3V0SG9yaXpvbnRhbAogICAgIGJvb2wgaGF2ZUZsZXggPSBm
YWxzZTsKICAgICBnYXRoZXJGbGV4Q2hpbGRyZW5JbmZvKGl0ZXJhdG9yLCByZWxheW91dENoaWxk
cmVuLCBoaWdoZXN0RmxleEdyb3VwLCBsb3dlc3RGbGV4R3JvdXAsIGhhdmVGbGV4KTsKIAorICAg
IGJvb2wgcGFnaW5hdGVkID0gdmlldygpLT5sYXlvdXRTdGF0ZSgpLT5wYWdpbmF0ZWQoKTsKKwog
ICAgIFJlbmRlckJveCogY2hpbGQ7CiAKICAgICBSZW5kZXJCbG9jazo6c3RhcnREZWxheVVwZGF0
ZVNjcm9sbEluZm8oKTsKQEAgLTM2MSw2ICszNjYsMTIgQEAgdm9pZCBSZW5kZXJGbGV4aWJsZUJv
eDo6bGF5b3V0SG9yaXpvbnRhbAogICAgICAgICAgICAgLy8gQ29tcHV0ZSB0aGUgY2hpbGQncyB2
ZXJ0aWNhbCBtYXJnaW5zLgogICAgICAgICAgICAgY2hpbGQtPmNhbGNWZXJ0aWNhbE1hcmdpbnMo
KTsKICAgICAKKyAgICAgICAgICAgIGlmICghY2hpbGQtPm5lZWRzTGF5b3V0KCkgJiYgcGFnaW5h
dGVkICYmIHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+bV9wYWdlSGVpZ2h0KSB7CisgICAgICAgICAg
ICAgICAgUmVuZGVyQmxvY2sqIGNoaWxkUmVuZGVyQmxvY2sgPSBjaGlsZC0+aXNSZW5kZXJCbG9j
aygpID8gdG9SZW5kZXJCbG9jayhjaGlsZCkgOiAwOworICAgICAgICAgICAgICAgIGlmIChjaGls
ZFJlbmRlckJsb2NrICYmIHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+cGFnZVkoY2hpbGQtPnkoKSkg
IT0gY2hpbGRSZW5kZXJCbG9jay0+cGFnZVkoKSkKKyAgICAgICAgICAgICAgICAgICAgY2hpbGRS
ZW5kZXJCbG9jay0+c2V0Q2hpbGROZWVkc0xheW91dCh0cnVlLCBmYWxzZSk7CisgICAgICAgICAg
ICB9CisKICAgICAgICAgICAgIC8vIE5vdyBkbyB0aGUgbGF5b3V0LgogICAgICAgICAgICAgY2hp
bGQtPmxheW91dElmTmVlZGVkKCk7CiAgICAgCkBAIC00MjgsNiArNDM5LDEzIEBAIHZvaWQgUmVu
ZGVyRmxleGlibGVCb3g6OmxheW91dEhvcml6b250YWwKICAgICAgICAgICAgIGNoaWxkLT5jYWxj
SGVpZ2h0KCk7CiAgICAgICAgICAgICBpZiAob2xkQ2hpbGRIZWlnaHQgIT0gY2hpbGQtPmhlaWdo
dCgpKQogICAgICAgICAgICAgICAgIGNoaWxkLT5zZXRDaGlsZE5lZWRzTGF5b3V0KHRydWUsIGZh
bHNlKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghY2hpbGQtPm5lZWRzTGF5
b3V0KCkgJiYgcGFnaW5hdGVkICYmIHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+bV9wYWdlSGVpZ2h0
KSB7CisgICAgICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGNoaWxkUmVuZGVyQmxvY2sgPSBjaGls
ZC0+aXNSZW5kZXJCbG9jaygpID8gdG9SZW5kZXJCbG9jayhjaGlsZCkgOiAwOworICAgICAgICAg
ICAgICAgIGlmIChjaGlsZFJlbmRlckJsb2NrICYmIHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+cGFn
ZVkoY2hpbGQtPnkoKSkgIT0gY2hpbGRSZW5kZXJCbG9jay0+cGFnZVkoKSkKKyAgICAgICAgICAg
ICAgICAgICAgY2hpbGRSZW5kZXJCbG9jay0+c2V0Q2hpbGROZWVkc0xheW91dCh0cnVlLCBmYWxz
ZSk7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGNoaWxkLT5sYXlvdXRJZk5lZWRlZCgp
OwogICAgIAogICAgICAgICAgICAgLy8gV2UgY2FuIHBsYWNlIHRoZSBjaGlsZCBub3csIHVzaW5n
IG91ciB2YWx1ZSBvZiBib3gtYWxpZ24uCkBAIC02NDEsNiArNjU5LDggQEAgdm9pZCBSZW5kZXJG
bGV4aWJsZUJveDo6bGF5b3V0VmVydGljYWxCbwogICAgIGJvb2wgaGF2ZUZsZXggPSBmYWxzZTsK
ICAgICBnYXRoZXJGbGV4Q2hpbGRyZW5JbmZvKGl0ZXJhdG9yLCByZWxheW91dENoaWxkcmVuLCBo
aWdoZXN0RmxleEdyb3VwLCBsb3dlc3RGbGV4R3JvdXAsIGhhdmVGbGV4KTsKIAorICAgIGJvb2wg
cGFnaW5hdGVkID0gdmlldygpLT5sYXlvdXRTdGF0ZSgpLT5wYWdpbmF0ZWQoKTsKKwogICAgIFJl
bmRlckJveCogY2hpbGQ7CiAKICAgICAvLyBXZSBjb25maW5lIHRoZSBsaW5lIGNsYW1wIHVnbGlu
ZXNzIHRvIHZlcnRpY2FsIGZsZXhpYmxlIGJveGVzICh0aHVzIGtlZXBpbmcgaXQgb3V0IG9mCkBA
IC02OTAsNiArNzEwLDEyIEBAIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmxheW91dFZlcnRpY2Fs
Qm8KICAgICAgICAgICAgIC8vIEFkZCBpbiB0aGUgY2hpbGQncyBtYXJnaW5Ub3AgdG8gb3VyIGhl
aWdodC4KICAgICAgICAgICAgIHNldEhlaWdodChoZWlnaHQoKSArIGNoaWxkLT5tYXJnaW5Ub3Ao
KSk7CiAgICAgCisgICAgICAgICAgICBpZiAoIWNoaWxkLT5uZWVkc0xheW91dCgpICYmIHBhZ2lu
YXRlZCAmJiB2aWV3KCktPmxheW91dFN0YXRlKCktPm1fcGFnZUhlaWdodCkgeworICAgICAgICAg
ICAgICAgIFJlbmRlckJsb2NrKiBjaGlsZFJlbmRlckJsb2NrID0gY2hpbGQtPmlzUmVuZGVyQmxv
Y2soKSA/IHRvUmVuZGVyQmxvY2soY2hpbGQpIDogMDsKKyAgICAgICAgICAgICAgICBpZiAoY2hp
bGRSZW5kZXJCbG9jayAmJiB2aWV3KCktPmxheW91dFN0YXRlKCktPnBhZ2VZKGNoaWxkLT55KCkp
ICE9IGNoaWxkUmVuZGVyQmxvY2stPnBhZ2VZKCkpCisgICAgICAgICAgICAgICAgICAgIGNoaWxk
UmVuZGVyQmxvY2stPnNldENoaWxkTmVlZHNMYXlvdXQodHJ1ZSwgZmFsc2UpOworICAgICAgICAg
ICAgfQorCiAgICAgICAgICAgICAvLyBOb3cgZG8gYSBsYXlvdXQuCiAgICAgICAgICAgICBjaGls
ZC0+bGF5b3V0SWZOZWVkZWQoKTsKICAgICAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckZsZXhpYmxlQm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxl
eGlibGVCb3guaAkocmV2aXNpb24gNjc2MzkpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJG
bGV4aWJsZUJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIHB1YmxpYzoKICAg
ICB2b2lkIGNhbGNIb3Jpem9udGFsUHJlZldpZHRocygpOwogICAgIHZvaWQgY2FsY1ZlcnRpY2Fs
UHJlZldpZHRocygpOwogCi0gICAgdmlydHVhbCB2b2lkIGxheW91dEJsb2NrKGJvb2wgcmVsYXlv
dXRDaGlsZHJlbik7CisgICAgdmlydHVhbCB2b2lkIGxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRD
aGlsZHJlbiwgaW50IHBhZ2VIZWlnaHQpOwogICAgIHZvaWQgbGF5b3V0SG9yaXpvbnRhbEJveChi
b29sIHJlbGF5b3V0Q2hpbGRyZW4pOwogICAgIHZvaWQgbGF5b3V0VmVydGljYWxCb3goYm9vbCBy
ZWxheW91dENoaWxkcmVuKTsKIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5l
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCShy
ZXZpc2lvbiA2NzYzOSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTY0Nyw3ICs2NDcsNyBAQCB2b2lkIFJlbmRlcklubGluZTo6Y29tcHV0
ZVJlY3RGb3JSZXBhaW50CiAgICAgICAgICAgICBMYXlvdXRTdGF0ZSogbGF5b3V0U3RhdGUgPSB2
LT5sYXlvdXRTdGF0ZSgpOwogICAgICAgICAgICAgaWYgKHN0eWxlKCktPnBvc2l0aW9uKCkgPT0g
UmVsYXRpdmVQb3NpdGlvbiAmJiBsYXllcigpKQogICAgICAgICAgICAgICAgIHJlY3QubW92ZShs
YXllcigpLT5yZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0KCkpOwotICAgICAgICAgICAgcmVjdC5tb3Zl
KGxheW91dFN0YXRlLT5tX29mZnNldCk7CisgICAgICAgICAgICByZWN0Lm1vdmUobGF5b3V0U3Rh
dGUtPm1fcGFpbnRPZmZzZXQpOwogICAgICAgICAgICAgaWYgKGxheW91dFN0YXRlLT5tX2NsaXBw
ZWQpCiAgICAgICAgICAgICAgICAgcmVjdC5pbnRlcnNlY3QobGF5b3V0U3RhdGUtPm1fY2xpcFJl
Y3QpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtNzM0LDcgKzczNCw3IEBAIHZvaWQgUmVuZGVy
SW5saW5lOjptYXBMb2NhbFRvQ29udGFpbmVyKFIKICAgICBpZiAoUmVuZGVyVmlldyAqdiA9IHZp
ZXcoKSkgewogICAgICAgICBpZiAodi0+bGF5b3V0U3RhdGVFbmFibGVkKCkgJiYgIXJlcGFpbnRD
b250YWluZXIpIHsKICAgICAgICAgICAgIExheW91dFN0YXRlKiBsYXlvdXRTdGF0ZSA9IHYtPmxh
eW91dFN0YXRlKCk7Ci0gICAgICAgICAgICBJbnRTaXplIG9mZnNldCA9IGxheW91dFN0YXRlLT5t
X29mZnNldDsKKyAgICAgICAgICAgIEludFNpemUgb2Zmc2V0ID0gbGF5b3V0U3RhdGUtPm1fcGFp
bnRPZmZzZXQ7CiAgICAgICAgICAgICBpZiAoc3R5bGUoKS0+cG9zaXRpb24oKSA9PSBSZWxhdGl2
ZVBvc2l0aW9uICYmIGxheWVyKCkpCiAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IGxheWVyKCkt
PnJlbGF0aXZlUG9zaXRpb25PZmZzZXQoKTsKICAgICAgICAgICAgIHRyYW5zZm9ybVN0YXRlLm1v
dmUob2Zmc2V0KTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHJldmlzaW9uIDY3
NjM5KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00NzEsNyArNDcxLDcgQEAgVHJhbnNmb3JtYXRpb25NYXRyaXggUmVuZGVyTGF5ZXI6OnJl
bmRlcgogdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlUGFnaW5hdGlvbigpCiB7CiAgICAgbV9pc1Bh
Z2luYXRlZCA9IGZhbHNlOwotICAgIGlmIChpc0NvbXBvc2l0ZWQoKSB8fCAhcGFyZW50KCkgfHwg
cmVuZGVyZXIoKS0+aXNQb3NpdGlvbmVkKCkpCisgICAgaWYgKGlzQ29tcG9zaXRlZCgpIHx8ICFw
YXJlbnQoKSkKICAgICAgICAgcmV0dXJuOyAvLyBGSVhNRTogV2Ugd2lsbCBoYXZlIHRvIGRlYWwg
d2l0aCBwYWdpbmF0ZWQgY29tcG9zaXRpbmcgbGF5ZXJzIHNvbWVkYXkuCiAgICAgICAgICAgICAg
ICAgLy8gRklYTUU6IEZvciBub3cgdGhlIFJlbmRlclZpZXcgY2FuJ3QgYmUgcGFnaW5hdGVkLiAg
RXZlbnR1YWxseSBwcmludGluZyB3aWxsIG1vdmUgdG8gYSBtb2RlbCB3aGVyZSBpdCBpcyB0aG91
Z2guCiAgICAgCkBAIC0yNTU1LDExICsyNTU1LDExIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50
Q2hpbGRMYXllckludG9Db2wKICAgICBjb2x1bW5CbG9jay0+bGF5ZXIoKS0+Y29udmVydFRvTGF5
ZXJDb29yZHMocm9vdExheWVyLCBsYXllclgsIGxheWVyWSk7CiAgICAgCiAgICAgQ29sdW1uSW5m
byogY29sSW5mbyA9IGNvbHVtbkJsb2NrLT5jb2x1bW5JbmZvKCk7Ci0gICAgdW5zaWduZWQgY29s
Q291bnQgPSBjb2xJbmZvLT5jb2x1bW5Db3VudCgpOworICAgIHVuc2lnbmVkIGNvbENvdW50ID0g
Y29sdW1uQmxvY2stPmNvbHVtbkNvdW50KGNvbEluZm8pOwogICAgIGludCBjdXJyWU9mZnNldCA9
IDA7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvbENvdW50OyBpKyspIHsKICAgICAg
ICAgLy8gRm9yIGVhY2ggcmVjdCwgd2UgY2xpcCB0byB0aGUgcmVjdCwgYW5kIHRoZW4gd2UgYWRq
dXN0IG91ciBjb29yZHMuCi0gICAgICAgIEludFJlY3QgY29sUmVjdCA9IGNvbEluZm8tPmNvbHVt
blJlY3RBdChpKTsKKyAgICAgICAgSW50UmVjdCBjb2xSZWN0ID0gY29sdW1uQmxvY2stPmNvbHVt
blJlY3RBdChjb2xJbmZvLCBpKTsKICAgICAgICAgaW50IGN1cnJYT2Zmc2V0ID0gY29sUmVjdC54
KCkgLSAoY29sdW1uQmxvY2stPmJvcmRlckxlZnQoKSArIGNvbHVtbkJsb2NrLT5wYWRkaW5nTGVm
dCgpKTsKICAgICAgICAgY29sUmVjdC5tb3ZlKGxheWVyWCwgbGF5ZXJZKTsKIApAQCAtMzAyMSwx
NyArMzAyMSwxNyBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RDaGlsZExhCiAg
ICAgY29sdW1uQmxvY2stPmxheWVyKCktPmNvbnZlcnRUb0xheWVyQ29vcmRzKHJvb3RMYXllciwg
bGF5ZXJYLCBsYXllclkpOwogICAgIAogICAgIENvbHVtbkluZm8qIGNvbEluZm8gPSBjb2x1bW5C
bG9jay0+Y29sdW1uSW5mbygpOwotICAgIGludCBjb2xDb3VudCA9IGNvbEluZm8tPmNvbHVtbkNv
dW50KCk7CisgICAgaW50IGNvbENvdW50ID0gY29sdW1uQmxvY2stPmNvbHVtbkNvdW50KGNvbElu
Zm8pOwogICAgIAogICAgIC8vIFdlIGhhdmUgdG8gZ28gYmFja3dhcmRzIGZyb20gdGhlIGxhc3Qg
Y29sdW1uIHRvIHRoZSBmaXJzdC4KICAgICBpbnQgbGVmdCA9IGNvbHVtbkJsb2NrLT5ib3JkZXJM
ZWZ0KCkgKyBjb2x1bW5CbG9jay0+cGFkZGluZ0xlZnQoKTsKICAgICBpbnQgY3VycllPZmZzZXQg
PSAwOwogICAgIGludCBpOwogICAgIGZvciAoaSA9IDA7IGkgPCBjb2xDb3VudDsgaSsrKQotICAg
ICAgICBjdXJyWU9mZnNldCAtPSBjb2xJbmZvLT5jb2x1bW5SZWN0QXQoaSkuaGVpZ2h0KCk7Cisg
ICAgICAgIGN1cnJZT2Zmc2V0IC09IGNvbHVtbkJsb2NrLT5jb2x1bW5SZWN0QXQoY29sSW5mbywg
aSkuaGVpZ2h0KCk7CiAgICAgZm9yIChpID0gY29sQ291bnQgLSAxOyBpID49IDA7IGktLSkgewog
ICAgICAgICAvLyBGb3IgZWFjaCByZWN0LCB3ZSBjbGlwIHRvIHRoZSByZWN0LCBhbmQgdGhlbiB3
ZSBhZGp1c3Qgb3VyIGNvb3Jkcy4KLSAgICAgICAgSW50UmVjdCBjb2xSZWN0ID0gY29sSW5mby0+
Y29sdW1uUmVjdEF0KGkpOworICAgICAgICBJbnRSZWN0IGNvbFJlY3QgPSBjb2x1bW5CbG9jay0+
Y29sdW1uUmVjdEF0KGNvbEluZm8sIGkpOwogICAgICAgICBpbnQgY3VyclhPZmZzZXQgPSBjb2xS
ZWN0LngoKSAtIGxlZnQ7CiAgICAgICAgIGN1cnJZT2Zmc2V0ICs9IGNvbFJlY3QuaGVpZ2h0KCk7
CiAgICAgICAgIGNvbFJlY3QubW92ZShsYXllclgsIGxheWVyWSk7CkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGluZUJveExpc3QuY3BwCShyZXZpc2lvbiA2NzYzOSkKKysrIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyAr
MzUsNiBAQAogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcu
aCIKICNpbmNsdWRlICJSb290SW5saW5lQm94LmgiCi0jaW5jbHVkZSAiU2V0dGluZ3MuaCIgLy8g
RklYTUU6IFRoaXMgaW5jbHVkZSBjYW4gYmUgcmVtb3ZlZCB3aGVuIHBhZ2luYXRlRHVyaW5nTGF5
b3V0RW5hYmxlZCBpcyB0YWtlbiBvdXQuCiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKQEAgLTE2
MSw3ICsxNjAsNyBAQCB2b2lkIFJlbmRlckxpbmVCb3hMaXN0OjpwYWludChSZW5kZXJCb3hNCiAg
ICAgICAgIHJldHVybjsKIAogICAgIFJlbmRlclZpZXcqIHYgPSByZW5kZXJlci0+dmlldygpOwot
ICAgIGJvb2wgdXNlUHJpbnRSZWN0ID0gIXYtPnByaW50UmVjdCgpLmlzRW1wdHkoKSAmJiAhcmVu
ZGVyZXItPmRvY3VtZW50KCktPnNldHRpbmdzKCktPnBhZ2luYXRlRHVyaW5nTGF5b3V0RW5hYmxl
ZCgpOworICAgIGJvb2wgdXNlUHJpbnRSZWN0ID0gIXYtPnByaW50UmVjdCgpLmlzRW1wdHkoKTsK
ICAgICAKICAgICAvLyBXZSBjYW4gY2hlY2sgdGhlIGZpcnN0IGJveCBhbmQgbGFzdCBib3ggYW5k
IGF2b2lkIHBhaW50aW5nIGlmIHdlIGRvbid0CiAgICAgLy8gaW50ZXJzZWN0LiAgVGhpcyBpcyBh
IHF1aWNrIHNob3J0LWNpcmN1aXQgdGhhdCB3ZSBjYW4gdGFrZSB0byBhdm9pZCB3YWxraW5nIGFu
eSBsaW5lcy4KQEAgLTIxNSw3ICsyMTQsNiBAQCB2b2lkIFJlbmRlckxpbmVCb3hMaXN0OjpwYWlu
dChSZW5kZXJCb3hNCiAgICAgICAgIGludCBib3R0b20gPSBjdXJyLT5ib3R0b21WaXNpYmxlT3Zl
cmZsb3coKSArIHJlbmRlcmVyLT5tYXhpbWFsT3V0bGluZVNpemUoaW5mby5waGFzZSk7CiAgICAg
ICAgIGggPSBib3R0b20gLSB0b3A7CiAgICAgICAgIHlQb3MgPSB0eSArIHRvcDsKLSAgICAgICAg
di0+c2V0TWluaW11bUNvbHVtbkhlaWdodChoKTsKICAgICAgICAgaWYgKHlQb3MgPCBpbmZvLnJl
Y3QuYm90dG9tKCkgJiYgeVBvcyArIGggPiBpbmZvLnJlY3QueSgpKQogICAgICAgICAgICAgY3Vy
ci0+cGFpbnQoaW5mbywgdHgsIHR5KTsKICAgICB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFi
bGUuY3BwCShyZXZpc2lvbiA2NzYzOSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksOCArNTksMTAgQEAgUmVuZGVyVGFibGU6OlJlbmRl
clRhYmxlKE5vZGUqIG5vZGUpCiAgICAgLCBtX2JvcmRlckxlZnQoMCkKICAgICAsIG1fYm9yZGVy
UmlnaHQoMCkKIHsKKyAgICBzZXRDaGlsZHJlbklubGluZShmYWxzZSk7CiAgICAgbV9jb2x1bW5Q
b3MuZmlsbCgwLCAyKTsKICAgICBtX2NvbHVtbnMuZmlsbChDb2x1bW5TdHJ1Y3QoKSwgMSk7Cisg
ICAgCiB9CiAKIHZvaWQgUmVuZGVyVGFibGU6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5j
ZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCkBAIC0zOTksNiArNDAxLDkgQEAg
dm9pZCBSZW5kZXJUYWJsZTo6bGF5b3V0KCkKIAogICAgIHN0YXRlUHVzaGVyLnBvcCgpOwogCisg
ICAgaWYgKHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+bV9wYWdlSGVpZ2h0KQorICAgICAgICBzZXRQ
YWdlWSh2aWV3KCktPmxheW91dFN0YXRlKCktPnBhZ2VZKHkoKSkpOworCiAgICAgYm9vbCBkaWRG
dWxsUmVwYWludCA9IHJlcGFpbnRlci5yZXBhaW50QWZ0ZXJMYXlvdXQoKTsKICAgICAvLyBSZXBh
aW50IHdpdGggb3VyIG5ldyBib3VuZHMgaWYgdGhleSBhcmUgZGlmZmVyZW50IGZyb20gb3VyIG9s
ZCBib3VuZHMuCiAgICAgaWYgKCFkaWRGdWxsUmVwYWludCAmJiBzZWN0aW9uTW92ZWQpCkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRhYmxlLmgJKHJldmlzaW9uIDY3NjM5KQorKysgV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTQyLDcgKzE0Miw3IEBAIHB1
YmxpYzoKICAgICAgICAgaWYgKG1fbmVlZHNTZWN0aW9uUmVjYWxjKQogICAgICAgICAgICAgcmVj
YWxjU2VjdGlvbnMoKTsKICAgICB9Ci0KKyAgICAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZv
aWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xk
U3R5bGUpOwogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuY3BwCShyZXZpc2lv
biA2NzYzOSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTE3LDkgKzExNywxNCBAQCB2b2lkIFJlbmRlclRhYmxlUm93OjpsYXlvdXQo
KQogICAgIC8vIFRhYmxlIHJvd3MgZG8gbm90IGFkZCB0cmFuc2xhdGlvbi4KICAgICBMYXlvdXRT
dGF0ZU1haW50YWluZXIgc3RhdGVQdXNoZXIodmlldygpLCB0aGlzLCBJbnRTaXplKCkpOwogCisg
ICAgYm9vbCBwYWdpbmF0ZWQgPSB2aWV3KCktPmxheW91dFN0YXRlKCktPnBhZ2luYXRlZCgpOwor
ICAgICAgICAgICAgICAgIAogICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hp
bGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgaWYg
KGNoaWxkLT5pc1RhYmxlQ2VsbCgpKSB7CiAgICAgICAgICAgICBSZW5kZXJUYWJsZUNlbGwqIGNl
bGwgPSB0b1JlbmRlclRhYmxlQ2VsbChjaGlsZCk7CisgICAgICAgICAgICBpZiAoIWNlbGwtPm5l
ZWRzTGF5b3V0KCkgJiYgcGFnaW5hdGVkICYmIHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+bV9wYWdl
SGVpZ2h0ICYmIHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+cGFnZVkoY2VsbC0+eSgpKSAhPSBjZWxs
LT5wYWdlWSgpKQorICAgICAgICAgICAgICAgIGNlbGwtPnNldENoaWxkTmVlZHNMYXlvdXQodHJ1
ZSwgZmFsc2UpOworCiAgICAgICAgICAgICBpZiAoY2hpbGQtPm5lZWRzTGF5b3V0KCkpIHsKICAg
ICAgICAgICAgICAgICBjZWxsLT5jYWxjVmVydGljYWxNYXJnaW5zKCk7CiAgICAgICAgICAgICAg
ICAgY2VsbC0+bGF5b3V0KCk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNl
Y3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2Vj
dGlvbi5jcHAJKHJldmlzaW9uIDY3NjM5KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFi
bGVTZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjA1LDYgKzYwNSw4IEBAIGludCBSZW5k
ZXJUYWJsZVNlY3Rpb246OmxheW91dFJvd3MoaW50IHQKICAgICAgICAgICAgIGlmICh0ZSAhPSBv
bGRUZSB8fCBiZSAhPSBvbGRCZSkgewogICAgICAgICAgICAgICAgIGNlbGwtPnNldE5lZWRzTGF5
b3V0KHRydWUsIGZhbHNlKTsKICAgICAgICAgICAgICAgICBjZWxsLT5sYXlvdXRJZk5lZWRlZCgp
OworICAgICAgICAgICAgICAgIGlmICh2aWV3KCktPmxheW91dFN0YXRlKCktPm1fcGFnZUhlaWdo
dCAmJiBjZWxsLT5oZWlnaHQoKSAhPSBySGVpZ2h0KQorICAgICAgICAgICAgICAgICAgICBjZWxs
LT5zZXRIZWlnaHQockhlaWdodCk7IC8vIEZJWE1FOiBQYWdpbmF0aW9uIG1pZ2h0IGhhdmUgbWFk
ZSB1cyBjaGFuZ2Ugc2l6ZS4gIEZvciBub3cganVzdCBzaHJpbmsgb3IgZ3JvdyB0aGUgY2VsbCB0
byBmaXQgd2l0aG91dCBkb2luZyBhIHJlbGF5b3V0LgogICAgICAgICAgICAgfQogCiAgICAgICAg
ICAgICBpZiAoKHRlICE9IG9sZFRlIHx8IGJlID4gb2xkQmUpICYmICF0YWJsZSgpLT5zZWxmTmVl
ZHNMYXlvdXQoKSAmJiBjZWxsLT5jaGVja0ZvclJlcGFpbnREdXJpbmdMYXlvdXQoKSkKSW5kZXg6
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCShyZXZpc2lvbiA2NzYzOSkKKysrIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw2IEBAIFJl
bmRlclZpZXc6OlJlbmRlclZpZXcoTm9kZSogbm9kZSwgRnJhbWUKICAgICAsIG1fbWF4aW1hbE91
dGxpbmVTaXplKDApCiAgICAgLCBtX2Jlc3RUcnVuY2F0ZWRBdCgwKQogICAgICwgbV90cnVuY2F0
b3JXaWR0aCgwKQotICAgICwgbV9taW5pbXVtQ29sdW1uSGVpZ2h0KDApCiAgICAgLCBtX2ZvcmNl
ZFBhZ2VCcmVhayhmYWxzZSkKICAgICAsIG1fbGF5b3V0U3RhdGUoMCkKICAgICAsIG1fbGF5b3V0
U3RhdGVEaXNhYmxlQ291bnQoMCkKQEAgLTY5Myw3ICs2OTIsNiBAQCB2b2lkIFJlbmRlclZpZXc6
OnNldEJlc3RUcnVuY2F0ZWRBdChpbnQgCiAKIHZvaWQgUmVuZGVyVmlldzo6cHVzaExheW91dFN0
YXRlKFJlbmRlck9iamVjdCogcm9vdCkKIHsKLSAgICBBU1NFUlQoIWRvaW5nRnVsbFJlcGFpbnQo
KSk7CiAgICAgQVNTRVJUKG1fbGF5b3V0U3RhdGVEaXNhYmxlQ291bnQgPT0gMCk7CiAgICAgQVNT
RVJUKG1fbGF5b3V0U3RhdGUgPT0gMCk7CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgJKHJl
dmlzaW9uIDY3NjM5KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCSh3b3JraW5n
IGNvcHkpCkBAIC04MywxMiArODMsMTAgQEAgcHVibGljOgogICAgIEludFJlY3QgcHJpbnRSZWN0
KCkgY29uc3QgeyByZXR1cm4gbV9wcmludFJlY3Q7IH0KICAgICB2b2lkIHNldFByaW50UmVjdChj
b25zdCBJbnRSZWN0JiByKSB7IG1fcHJpbnRSZWN0ID0gcjsgfQogCi0gICAgdm9pZCBzZXRUcnVu
Y2F0ZWRBdChpbnQgeSkgeyBtX3RydW5jYXRlZEF0ID0geTsgbV9iZXN0VHJ1bmNhdGVkQXQgPSBt
X3RydW5jYXRvcldpZHRoID0gMDsgbV9taW5pbXVtQ29sdW1uSGVpZ2h0ID0gMDsgbV9mb3JjZWRQ
YWdlQnJlYWsgPSBmYWxzZTsgfQorICAgIHZvaWQgc2V0VHJ1bmNhdGVkQXQoaW50IHkpIHsgbV90
cnVuY2F0ZWRBdCA9IHk7IG1fYmVzdFRydW5jYXRlZEF0ID0gbV90cnVuY2F0b3JXaWR0aCA9IDA7
IG1fZm9yY2VkUGFnZUJyZWFrID0gZmFsc2U7IH0KICAgICB2b2lkIHNldEJlc3RUcnVuY2F0ZWRB
dChpbnQgeSwgUmVuZGVyQm94TW9kZWxPYmplY3QqIGZvclJlbmRlcmVyLCBib29sIGZvcmNlZEJy
ZWFrID0gZmFsc2UpOwotICAgIHZvaWQgc2V0TWluaW11bUNvbHVtbkhlaWdodChpbnQgaGVpZ2h0
KSB7IG1fbWluaW11bUNvbHVtbkhlaWdodCA9IGhlaWdodDsgfQogICAgIGludCBiZXN0VHJ1bmNh
dGVkQXQoKSBjb25zdCB7IHJldHVybiBtX2Jlc3RUcnVuY2F0ZWRBdDsgfQotICAgIGludCBtaW5p
bXVtQ29sdW1uSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9taW5pbXVtQ29sdW1uSGVpZ2h0OyB9
Ci0KKyAgICAKICAgICBpbnQgdHJ1bmNhdGVkQXQoKSBjb25zdCB7IHJldHVybiBtX3RydW5jYXRl
ZEF0OyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4m
LCBpbnQgdHgsIGludCB0eSk7CkBAIC0xMjIsMjEgKzEyMCwyMCBAQCBwdWJsaWM6CiAKICAgICBi
b29sIGRvaW5nRnVsbFJlcGFpbnQoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lVmlldy0+bmVlZHNG
dWxsUmVwYWludCgpOyB9CiAKLSAgICB2b2lkIHB1c2hMYXlvdXRTdGF0ZShSZW5kZXJCb3gqIHJl
bmRlcmVyLCBjb25zdCBJbnRTaXplJiBvZmZzZXQpCisgICAgdm9pZCBwdXNoTGF5b3V0U3RhdGUo
UmVuZGVyQm94KiByZW5kZXJlciwgY29uc3QgSW50U2l6ZSYgb2Zmc2V0LCBpbnQgcGFnZUhlaWdo
dCA9IDAsIENvbHVtbkluZm8qIGNvbEluZm8gPSAwKQogICAgIHsKLSAgICAgICAgaWYgKGRvaW5n
RnVsbFJlcGFpbnQoKSkKLSAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgLy8gV2UgcHVzaCBM
YXlvdXRTdGF0ZSBldmVuIGlmIGxheW91dFN0YXRlIGlzIGRpc2FibGVkIGJlY2F1c2UgaXQgc3Rv
cmVzIGxheW91dERlbHRhIHRvby4KLSAgICAgICAgbV9sYXlvdXRTdGF0ZSA9IG5ldyAocmVuZGVy
QXJlbmEoKSkgTGF5b3V0U3RhdGUobV9sYXlvdXRTdGF0ZSwgcmVuZGVyZXIsIG9mZnNldCk7Cisg
ICAgICAgIGlmICghZG9pbmdGdWxsUmVwYWludCgpIHx8IHJlbmRlcmVyLT5oYXNDb2x1bW5zKCkg
fHwgbV9sYXlvdXRTdGF0ZS0+cGFnaW5hdGVkKCkpCisgICAgICAgICAgICBtX2xheW91dFN0YXRl
ID0gbmV3IChyZW5kZXJBcmVuYSgpKSBMYXlvdXRTdGF0ZShtX2xheW91dFN0YXRlLCByZW5kZXJl
ciwgb2Zmc2V0LCBwYWdlSGVpZ2h0LCBjb2xJbmZvKTsKICAgICB9CiAKICAgICB2b2lkIHB1c2hM
YXlvdXRTdGF0ZShSZW5kZXJPYmplY3QqKTsKIAogICAgIHZvaWQgcG9wTGF5b3V0U3RhdGUoKQog
ICAgIHsKLSAgICAgICAgaWYgKGRvaW5nRnVsbFJlcGFpbnQoKSkKLSAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgTGF5b3V0U3RhdGUqIHN0YXRlID0gbV9sYXlvdXRTdGF0ZTsKKyAgICAgICAg
aWYgKGRvaW5nRnVsbFJlcGFpbnQoKSAmJiAhbV9sYXlvdXRTdGF0ZS0+cGFnaW5hdGVkKCkpCisg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIG1fbGF5b3V0U3RhdGUgPSBzdGF0ZS0+bV9uZXh0
OwogICAgICAgICBzdGF0ZS0+ZGVzdHJveShyZW5kZXJBcmVuYSgpKTsKICAgICB9CkBAIC0xOTgs
NyArMTk1LDYgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICBpbnQgbV9iZXN0VHJ1bmNhdGVk
QXQ7CiAgICAgaW50IG1fdHJ1bmNhdG9yV2lkdGg7Ci0gICAgaW50IG1fbWluaW11bUNvbHVtbkhl
aWdodDsKICAgICBib29sIG1fZm9yY2VkUGFnZUJyZWFrOwogICAgIExheW91dFN0YXRlKiBtX2xh
eW91dFN0YXRlOwogICAgIHVuc2lnbmVkIG1fbGF5b3V0U3RhdGVEaXNhYmxlQ291bnQ7CkBAIC0y
MjcsMTMgKzIyMywxMyBAQCB2b2lkIHRvUmVuZGVyVmlldyhjb25zdCBSZW5kZXJWaWV3Kik7CiBj
bGFzcyBMYXlvdXRTdGF0ZU1haW50YWluZXIgOiBwdWJsaWMgTm9uY29weWFibGUgewogcHVibGlj
OgogICAgIC8vIGN0b3IgdG8gcHVzaCBub3cKLSAgICBMYXlvdXRTdGF0ZU1haW50YWluZXIoUmVu
ZGVyVmlldyogdmlldywgUmVuZGVyQm94KiByb290LCBJbnRTaXplIG9mZnNldCwgYm9vbCBkaXNh
YmxlU3RhdGUgPSBmYWxzZSkKKyAgICBMYXlvdXRTdGF0ZU1haW50YWluZXIoUmVuZGVyVmlldyog
dmlldywgUmVuZGVyQm94KiByb290LCBJbnRTaXplIG9mZnNldCwgYm9vbCBkaXNhYmxlU3RhdGUg
PSBmYWxzZSwgaW50IHBhZ2VIZWlnaHQgPSAwLCBDb2x1bW5JbmZvKiBjb2xJbmZvID0gMCkKICAg
ICAgICAgOiBtX3ZpZXcodmlldykKICAgICAgICAgLCBtX2Rpc2FibGVkKGRpc2FibGVTdGF0ZSkK
ICAgICAgICAgLCBtX2RpZFN0YXJ0KGZhbHNlKQogICAgICAgICAsIG1fZGlkRW5kKGZhbHNlKQog
ICAgIHsKLSAgICAgICAgcHVzaChyb290LCBvZmZzZXQpOworICAgICAgICBwdXNoKHJvb3QsIG9m
ZnNldCwgcGFnZUhlaWdodCwgY29sSW5mbyk7CiAgICAgfQogICAgIAogICAgIC8vIGN0b3IgdG8g
bWF5YmUgcHVzaCBsYXRlcgpAQCAtMjUwLDExICsyNDYsMTEgQEAgcHVibGljOgogICAgICAgICBB
U1NFUlQobV9kaWRTdGFydCA9PSBtX2RpZEVuZCk7ICAgLy8gaWYgdGhpcyBmaXJlcywgaXQgbWVh
bnMgdGhhdCBzb21lb25lIGRpZCBhIHB1c2goKSwgYnV0IGZvcmdvdCB0byBwb3AoKS4KICAgICB9
CiAKLSAgICB2b2lkIHB1c2goUmVuZGVyQm94KiByb290LCBJbnRTaXplIG9mZnNldCkKKyAgICB2
b2lkIHB1c2goUmVuZGVyQm94KiByb290LCBJbnRTaXplIG9mZnNldCwgaW50IHBhZ2VIZWlnaHQg
PSAwLCBDb2x1bW5JbmZvKiBjb2xJbmZvID0gMCkKICAgICB7CiAgICAgICAgIEFTU0VSVCghbV9k
aWRTdGFydCk7CiAgICAgICAgIC8vIFdlIHB1c2ggc3RhdGUgZXZlbiBpZiBkaXNhYmxlZCwgYmVj
YXVzZSB3ZSBzdGlsbCBuZWVkIHRvIHN0b3JlIGxheW91dERlbHRhCi0gICAgICAgIG1fdmlldy0+
cHVzaExheW91dFN0YXRlKHJvb3QsIG9mZnNldCk7CisgICAgICAgIG1fdmlldy0+cHVzaExheW91
dFN0YXRlKHJvb3QsIG9mZnNldCwgcGFnZUhlaWdodCwgY29sSW5mbyk7CiAgICAgICAgIGlmICht
X2Rpc2FibGVkKQogICAgICAgICAgICAgbV92aWV3LT5kaXNhYmxlTGF5b3V0U3RhdGUoKTsKICAg
ICAgICAgbV9kaWRTdGFydCA9IHRydWU7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9Sb290SW5s
aW5lQm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5o
CShyZXZpc2lvbiA2NzYzOSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guaAko
d29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9saW5l
QnJlYWtQb3MoMCkKICAgICAgICAgLCBtX2xpbmVUb3AoMCkKICAgICAgICAgLCBtX2xpbmVCb3R0
b20oMCkKKyAgICAgICAgLCBtX3BhZ2luYXRpb25TdHJ1dCgwKQogICAgIHsKICAgICB9CiAKQEAg
LTU3LDYgKzU4LDkgQEAgcHVibGljOgogICAgIGludCBsaW5lVG9wKCkgY29uc3QgeyByZXR1cm4g
bV9saW5lVG9wOyB9CiAgICAgaW50IGxpbmVCb3R0b20oKSBjb25zdCB7IHJldHVybiBtX2xpbmVC
b3R0b207IH0KIAorICAgIGludCBwYWdpbmF0aW9uU3RydXQoKSBjb25zdCB7IHJldHVybiBtX3Bh
Z2luYXRpb25TdHJ1dDsgfQorICAgIHZvaWQgc2V0UGFnaW5hdGlvblN0cnV0KGludCBzKSB7IG1f
cGFnaW5hdGlvblN0cnV0ID0gczsgfQorCiAgICAgaW50IHNlbGVjdGlvblRvcCgpIGNvbnN0Owog
ICAgIGludCBzZWxlY3Rpb25Cb3R0b20oKSBjb25zdCB7IHJldHVybiBsaW5lQm90dG9tKCk7IH0K
ICAgICBpbnQgc2VsZWN0aW9uSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbWF4KDAsIHNlbGVjdGlv
bkJvdHRvbSgpIC0gc2VsZWN0aW9uVG9wKCkpOyB9CkBAIC0xNDEsNiArMTQ1LDggQEAgcHJpdmF0
ZToKICAgICBpbnQgbV9saW5lVG9wOwogICAgIGludCBtX2xpbmVCb3R0b207CiAKKyAgICBpbnQg
bV9wYWdpbmF0aW9uU3RydXQ7CisKICAgICAvLyBGbG9hdHMgaGFuZ2luZyBvZmYgdGhlIGxpbmUg
YXJlIHB1c2hlZCBpbnRvIHRoaXMgdmVjdG9yIGR1cmluZyBsYXlvdXQuIEl0IGlzIG9ubHkKICAg
ICAvLyBnb29kIGZvciBhcyBsb25nIGFzIHRoZSBsaW5lIGhhcyBub3QgYmVlbiBtYXJrZWQgZGly
dHkuCiAgICAgT3duUHRyPFZlY3RvcjxSZW5kZXJCb3gqPiA+IG1fZmxvYXRzOwpJbmRleDogTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwko
cmV2aXNpb24gNjc2MzEpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxMDMgQEAKKzIwMTAtMDktMTUgIERhdmlkIEh5YXR0ICA8aHlhdHRAYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zODQwMiwgcGFnaW5hdGUgY29s
dW1ucyBhdCBsYXlvdXQgdGltZSByYXRoZXIgdGhhbiBhdCBwYWludCB0aW1lLgorCisgICAgICAg
IEFkZCBtYW55IG5ldyBtdWx0aWNvbCBsYXlvdXQgdGVzdHMgdGhhdCBkZW1vbnN0cmF0ZSBuZXcg
cGFnaW5hdGlvbiBmZWF0dXJlcy4KKworICAgICAgICAqIGZhc3QvbXVsdGljb2wvYm9yZGVyLXBh
ZGRpbmctcGFnaW5hdGlvbi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L211bHRpY29sL2Ns
aWVudC1yZWN0cy1leHBlY3RlZC5jaGVja3N1bToKKyAgICAgICAgKiBmYXN0L211bHRpY29sL2Ns
aWVudC1yZWN0cy1leHBlY3RlZC5wbmc6CisgICAgICAgICogZmFzdC9tdWx0aWNvbC9jbGllbnQt
cmVjdHMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3QvbXVsdGljb2wvY29sdW1uLWJyZWFr
LXdpdGgtYmFsYW5jaW5nLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvbXVsdGljb2wvZmxv
YXQtcGFnaW5hdGUtY29tcGxleC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L211bHRpY29s
L2Zsb2F0LXBhZ2luYXRlLmh0bWw6CisgICAgICAgICogZmFzdC9tdWx0aWNvbC9mbG9hdC10cnVu
Y2F0aW9uLmh0bWw6CisgICAgICAgICogZmFzdC9tdWx0aWNvbC9tYXJnaW4tY29sbGFwc2UuaHRt
bDogQWRkZWQuCisgICAgICAgICogZmFzdC9tdWx0aWNvbC9tYXgtaGVpZ2h0LWNvbHVtbnMtYmxv
Y2suaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9tdWx0aWNvbC9wb3NpdGlvbmVkLXNwbGl0
Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvbXVsdGljb2wvc2hhZG93LWJyZWFraW5nLmh0
bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvbXVsdGljb2wvc2luZ2xlLWxpbmUtZXhwZWN0ZWQu
Y2hlY2tzdW06CisgICAgICAgICogZmFzdC9tdWx0aWNvbC9zaW5nbGUtbGluZS1leHBlY3RlZC5w
bmc6CisgICAgICAgICogZmFzdC9tdWx0aWNvbC90YWJsZS1tYXJnaW4tY29sbGFwc2UuaHRtbDog
QWRkZWQuCisgICAgICAgICogZmFzdC9tdWx0aWNvbC90YWJsZS12ZXJ0aWNhbC1hbGlnbi5odG1s
OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L211bHRpY29sL3Vuc3BsaXR0YWJsZS1pbmxpbmUtYmxv
Y2suaHRtbDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjL2Zhc3QvbXVsdGljb2wvYm9y
ZGVyLXBhZGRpbmctcGFnaW5hdGlvbi1leHBlY3RlZC5jaGVja3N1bTogQWRkZWQuCisgICAgICAg
ICogcGxhdGZvcm0vbWFjL2Zhc3QvbXVsdGljb2wvYm9yZGVyLXBhZGRpbmctcGFnaW5hdGlvbi1l
eHBlY3RlZC5wbmc6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L211bHRpY29s
L2JvcmRlci1wYWRkaW5nLXBhZ2luYXRpb24tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9tYWMvZmFzdC9tdWx0aWNvbC9jb2x1bW4tYnJlYWstd2l0aC1iYWxhbmNpbmct
ZXhwZWN0ZWQuY2hlY2tzdW06IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L211
bHRpY29sL2NvbHVtbi1icmVhay13aXRoLWJhbGFuY2luZy1leHBlY3RlZC5wbmc6IEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L211bHRpY29sL2NvbHVtbi1icmVhay13aXRoLWJh
bGFuY2luZy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0
L211bHRpY29sL2NvbHVtbi1jb3VudC13aXRoLXJ1bGVzLWV4cGVjdGVkLmNoZWNrc3VtOiBBZGRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC9tdWx0aWNvbC9jb2x1bW4tY291bnQtd2l0
aC1ydWxlcy1leHBlY3RlZC5wbmc6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0
L211bHRpY29sL2NvbHVtbi1jb3VudC13aXRoLXJ1bGVzLWV4cGVjdGVkLnR4dDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9tYWMvZmFzdC9tdWx0aWNvbC9jb2x1bW4tcnVsZXMtZXhwZWN0ZWQuY2hlY2tz
dW06CisgICAgICAgICogcGxhdGZvcm0vbWFjL2Zhc3QvbXVsdGljb2wvY29sdW1uLXJ1bGVzLWV4
cGVjdGVkLnBuZzoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC9tdWx0aWNvbC9jb2x1bW4t
cnVsZXMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L211bHRpY29s
L2NvbHVtbi1ydWxlcy1zdGFja2luZy1leHBlY3RlZC5jaGVja3N1bToKKyAgICAgICAgKiBwbGF0
Zm9ybS9tYWMvZmFzdC9tdWx0aWNvbC9jb2x1bW4tcnVsZXMtc3RhY2tpbmctZXhwZWN0ZWQucG5n
OgorICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L211bHRpY29sL2NvbHVtbnMtc2hvcnRoYW5k
LXBhcnNpbmctZXhwZWN0ZWQuY2hlY2tzdW06CisgICAgICAgICogcGxhdGZvcm0vbWFjL2Zhc3Qv
bXVsdGljb2wvY29sdW1ucy1zaG9ydGhhbmQtcGFyc2luZy1leHBlY3RlZC5wbmc6CisgICAgICAg
ICogcGxhdGZvcm0vbWFjL2Zhc3QvbXVsdGljb2wvZmxvYXQtYXZvaWRhbmNlLWV4cGVjdGVkLmNo
ZWNrc3VtOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L211bHRpY29sL2Zsb2F0LWF2b2lk
YW5jZS1leHBlY3RlZC5wbmc6CisgICAgICAgICogcGxhdGZvcm0vbWFjL2Zhc3QvbXVsdGljb2wv
ZmxvYXQtYXZvaWRhbmNlLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFz
dC9tdWx0aWNvbC9mbG9hdC1tdWx0aWNvbC1leHBlY3RlZC5jaGVja3N1bToKKyAgICAgICAgKiBw
bGF0Zm9ybS9tYWMvZmFzdC9tdWx0aWNvbC9mbG9hdC1tdWx0aWNvbC1leHBlY3RlZC5wbmc6Cisg
ICAgICAgICogcGxhdGZvcm0vbWFjL2Zhc3QvbXVsdGljb2wvZmxvYXQtbXVsdGljb2wtZXhwZWN0
ZWQudHh0OgorICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L211bHRpY29sL2Zsb2F0LXBhZ2lu
YXRlLWNvbXBsZXgtZXhwZWN0ZWQuY2hlY2tzdW06IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L21hYy9mYXN0L211bHRpY29sL2Zsb2F0LXBhZ2luYXRlLWNvbXBsZXgtZXhwZWN0ZWQucG5nOiBB
ZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC9tdWx0aWNvbC9mbG9hdC1wYWdpbmF0
ZS1jb21wbGV4LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjL2Zh
c3QvbXVsdGljb2wvZmxvYXQtcGFnaW5hdGUtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHBsYXRm
b3JtL21hYy9mYXN0L211bHRpY29sL2xheWVycy1pbi1tdWx0aWNvbC1leHBlY3RlZC5jaGVja3N1
bToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC9tdWx0aWNvbC9sYXllcnMtaW4tbXVsdGlj
b2wtZXhwZWN0ZWQucG5nOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L211bHRpY29sL2xh
eWVycy1pbi1tdWx0aWNvbC1leHBlY3RlZC50eHQ6CisgICAgICAgICogcGxhdGZvcm0vbWFjL2Zh
c3QvbXVsdGljb2wvbWFyZ2luLWNvbGxhcHNlLWV4cGVjdGVkLmNoZWNrc3VtOiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC9tdWx0aWNvbC9tYXJnaW4tY29sbGFwc2UtZXhwZWN0
ZWQucG5nOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC9tdWx0aWNvbC9tYXJn
aW4tY29sbGFwc2UtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMv
ZmFzdC9tdWx0aWNvbC9tYXgtaGVpZ2h0LWNvbHVtbnMtYmxvY2stZXhwZWN0ZWQuY2hlY2tzdW06
IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L211bHRpY29sL21heC1oZWlnaHQt
Y29sdW1ucy1ibG9jay1leHBlY3RlZC5wbmc6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21h
Yy9mYXN0L211bHRpY29sL21heC1oZWlnaHQtY29sdW1ucy1ibG9jay1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L211bHRpY29sL25lc3RlZC1jb2x1bW5z
LWV4cGVjdGVkLmNoZWNrc3VtOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L211bHRpY29s
L25lc3RlZC1jb2x1bW5zLWV4cGVjdGVkLnBuZzoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFz
dC9tdWx0aWNvbC9uZXN0ZWQtY29sdW1ucy1leHBlY3RlZC50eHQ6CisgICAgICAgICogcGxhdGZv
cm0vbWFjL2Zhc3QvbXVsdGljb2wvcGFnaW5hdGUtYmxvY2stcmVwbGFjZWQtZXhwZWN0ZWQudHh0
OgorICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L211bHRpY29sL3Bvc2l0aW9uZWQtc3BsaXQt
ZXhwZWN0ZWQuY2hlY2tzdW06IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L211
bHRpY29sL3Bvc2l0aW9uZWQtc3BsaXQtZXhwZWN0ZWQucG5nOiBBZGRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9tYWMvZmFzdC9tdWx0aWNvbC9wb3NpdGlvbmVkLXNwbGl0LWV4cGVjdGVkLnR4dDog
QWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjL2Zhc3QvbXVsdGljb2wvcG9zaXRpb25lZC13
aXRoLWNvbnN0cmFpbmVkLWhlaWdodC1leHBlY3RlZC5jaGVja3N1bToKKyAgICAgICAgKiBwbGF0
Zm9ybS9tYWMvZmFzdC9tdWx0aWNvbC9wb3NpdGlvbmVkLXdpdGgtY29uc3RyYWluZWQtaGVpZ2h0
LWV4cGVjdGVkLnBuZzoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC9tdWx0aWNvbC9wb3Np
dGlvbmVkLXdpdGgtY29uc3RyYWluZWQtaGVpZ2h0LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9tYWMvZmFzdC9tdWx0aWNvbC9zaGFkb3ctYnJlYWtpbmctZXhwZWN0ZWQuY2hlY2tz
dW06IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L211bHRpY29sL3NoYWRvdy1i
cmVha2luZy1leHBlY3RlZC5wbmc6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0
L211bHRpY29sL3NoYWRvdy1icmVha2luZy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IHBsYXRmb3JtL21hYy9mYXN0L211bHRpY29sL3NwYW4vc3Bhbi1hcy1pbW1lZGlhdGUtY2hpbGQt
Z2VuZXJhdGVkLWNvbnRlbnQtZXhwZWN0ZWQuY2hlY2tzdW06CisgICAgICAgICogcGxhdGZvcm0v
bWFjL2Zhc3QvbXVsdGljb2wvc3Bhbi9zcGFuLWFzLWltbWVkaWF0ZS1jaGlsZC1nZW5lcmF0ZWQt
Y29udGVudC1leHBlY3RlZC5wbmc6CisgICAgICAgICogcGxhdGZvcm0vbWFjL2Zhc3QvbXVsdGlj
b2wvc3Bhbi9zcGFuLWFzLWltbWVkaWF0ZS1jaGlsZC1nZW5lcmF0ZWQtY29udGVudC1leHBlY3Rl
ZC50eHQ6CisgICAgICAgICogcGxhdGZvcm0vbWFjL2Zhc3QvbXVsdGljb2wvc3Bhbi9zcGFuLWFz
LWltbWVkaWF0ZS1jaGlsZC1wcm9wZXJ0eS1yZW1vdmFsLWV4cGVjdGVkLmNoZWNrc3VtOgorICAg
ICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L211bHRpY29sL3NwYW4vc3Bhbi1hcy1pbW1lZGlhdGUt
Y2hpbGQtcHJvcGVydHktcmVtb3ZhbC1leHBlY3RlZC5wbmc6CisgICAgICAgICogcGxhdGZvcm0v
bWFjL2Zhc3QvbXVsdGljb2wvc3Bhbi9zcGFuLWFzLWltbWVkaWF0ZS1jaGlsZC1wcm9wZXJ0eS1y
ZW1vdmFsLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC9tdWx0aWNv
bC9zcGFuL3NwYW4tYXMtaW1tZWRpYXRlLWNvbHVtbnMtY2hpbGQtZHluYW1pYy1leHBlY3RlZC5j
aGVja3N1bToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC9tdWx0aWNvbC9zcGFuL3NwYW4t
YXMtaW1tZWRpYXRlLWNvbHVtbnMtY2hpbGQtZHluYW1pYy1leHBlY3RlZC5wbmc6CisgICAgICAg
ICogcGxhdGZvcm0vbWFjL2Zhc3QvbXVsdGljb2wvc3Bhbi9zcGFuLWFzLWltbWVkaWF0ZS1jb2x1
bW5zLWNoaWxkLWR5bmFtaWMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHBsYXRmb3JtL21hYy9m
YXN0L211bHRpY29sL3NwYW4vc3Bhbi1hcy1pbW1lZGlhdGUtY29sdW1ucy1jaGlsZC1leHBlY3Rl
ZC50eHQ6CisgICAgICAgICogcGxhdGZvcm0vbWFjL2Zhc3QvbXVsdGljb2wvc3Bhbi9zcGFuLWFz
LWltbWVkaWF0ZS1jb2x1bW5zLWNoaWxkLXJlbW92YWwtZXhwZWN0ZWQudHh0OgorICAgICAgICAq
IHBsYXRmb3JtL21hYy9mYXN0L211bHRpY29sL3NwYW4vc3Bhbi1hcy1uZXN0ZWQtY29sdW1ucy1j
aGlsZC1keW5hbWljLWV4cGVjdGVkLmNoZWNrc3VtOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9m
YXN0L211bHRpY29sL3NwYW4vc3Bhbi1hcy1uZXN0ZWQtY29sdW1ucy1jaGlsZC1keW5hbWljLWV4
cGVjdGVkLnBuZzoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC9tdWx0aWNvbC9zcGFuL3Nw
YW4tYXMtbmVzdGVkLWNvbHVtbnMtY2hpbGQtZHluYW1pYy1leHBlY3RlZC50eHQ6CisgICAgICAg
ICogcGxhdGZvcm0vbWFjL2Zhc3QvbXVsdGljb2wvc3Bhbi9zcGFuLWFzLW5lc3RlZC1jb2x1bW5z
LWNoaWxkLWV4cGVjdGVkLmNoZWNrc3VtOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L211
bHRpY29sL3NwYW4vc3Bhbi1hcy1uZXN0ZWQtY29sdW1ucy1jaGlsZC1leHBlY3RlZC5wbmc6Cisg
ICAgICAgICogcGxhdGZvcm0vbWFjL2Zhc3QvbXVsdGljb2wvc3Bhbi9zcGFuLWFzLW5lc3RlZC1j
b2x1bW5zLWNoaWxkLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC9t
dWx0aWNvbC90YWJsZS1tYXJnaW4tY29sbGFwc2UtZXhwZWN0ZWQuY2hlY2tzdW06IEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L211bHRpY29sL3RhYmxlLW1hcmdpbi1jb2xsYXBz
ZS1leHBlY3RlZC5wbmc6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L211bHRp
Y29sL3RhYmxlLW1hcmdpbi1jb2xsYXBzZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IHBsYXRmb3JtL21hYy9mYXN0L211bHRpY29sL3RhYmxlLXZlcnRpY2FsLWFsaWduLWV4cGVjdGVk
LmNoZWNrc3VtOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC9tdWx0aWNvbC90
YWJsZS12ZXJ0aWNhbC1hbGlnbi1leHBlY3RlZC5wbmc6IEFkZGVkLgorICAgICAgICAqIHBsYXRm
b3JtL21hYy9mYXN0L211bHRpY29sL3RhYmxlLXZlcnRpY2FsLWFsaWduLWV4cGVjdGVkLnR4dDog
QWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjL2Zhc3QvbXVsdGljb2wvdW5zcGxpdHRhYmxl
LWlubGluZS1ibG9jay1leHBlY3RlZC5jaGVja3N1bTogQWRkZWQuCisgICAgICAgICogcGxhdGZv
cm0vbWFjL2Zhc3QvbXVsdGljb2wvdW5zcGxpdHRhYmxlLWlubGluZS1ibG9jay1leHBlY3RlZC5w
bmc6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L211bHRpY29sL3Vuc3BsaXR0
YWJsZS1pbmxpbmUtYmxvY2stZXhwZWN0ZWQudHh0OiBBZGRlZC4KKwogMjAxMC0wOS0xNSAgUGhp
bGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgRXJpYyBDYXJsc29uLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9tdWx0aWNvbC9ib3JkZXIt
cGFkZGluZy1wYWdpbmF0aW9uLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9t
dWx0aWNvbC9ib3JkZXItcGFkZGluZy1wYWdpbmF0aW9uLmh0bWwJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9mYXN0L211bHRpY29sL2JvcmRlci1wYWRkaW5nLXBhZ2luYXRpb24uaHRtbAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw5IEBACis8aHRtbD4KKzxib2R5PgorPGRpdiBzdHlsZT0i
LXdlYmtpdC1jb2x1bW4tY291bnQ6MjstbW96LWNvbHVtbi1jb3VudDoyOyBib3JkZXI6MnB4IHNv
bGlkIG1hcm9vbiI+Cis8ZGl2IHN0eWxlPSJoZWlnaHQ6MTEwcHgiPjwvZGl2PgorPGRpdiBzdHls
ZT0iYmFja2dyb3VuZC1jb2xvcjpsaW1lOyBib3JkZXI6MnB4IHNvbGlkIGJsYWNrOyB3aWR0aDoz
NzVweDsgIj4KKzxkaXYgc3R5bGU9Im1hcmdpbjogMCAxMHB4OyBiYWNrZ3JvdW5kLWNvbG9yOmdy
ZWVuOyBib3JkZXI6IDJweCBzb2xpZCBibHVlIj4KKzxzcGFuIHN0eWxlPSJmb250LXNpemU6NjRw
eCI+SW4gMm5kIGNvbHVtbjwvc3Bhbj4KKzwvZGl2PgorPC9kaXY+CkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L211bHRpY29sL2NsaWVudC1yZWN0cy1leHBlY3RlZC5jaGVja3N1bQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L211bHRpY29sL2NsaWVudC1yZWN0cy1leHBlY3RlZC5jaGVj
a3N1bQkocmV2aXNpb24gNjc2MzkpCisrKyBMYXlvdXRUZXN0cy9mYXN0L211bHRpY29sL2NsaWVu
dC1yZWN0cy1leHBlY3RlZC5jaGVja3N1bQkod29ya2luZyBjb3B5KQpAQCAtMSArMSBAQAotYTUx
NjI0ZWU4OTJiZDZiNDAwMzgzZjQ3ZGM1NzIzZjUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxl
CitiYmZkNGNjMzA1YjUxMGFjY2RkMTQ1MjI4NGQ4MzQ3ZApcIE5vIG5ld2xpbmUgYXQgZW5kIG9m
IGZpbGUKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvbXVsdGljb2wvY2xpZW50LXJlY3RzLWV4cGVj
dGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L211bHRpY29sL2NsaWVudC1y
ZWN0cy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDY3NjM5KQorKysgTGF5b3V0VGVzdHMvZmFzdC9t
dWx0aWNvbC9jbGllbnQtcmVjdHMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC03MSw3
ICs3MSw3IEBAIGxheWVyIGF0ICg4LDQ4Mykgc2l6ZSAxMzZ4NzYKICAgICAgIFJlbmRlckltYWdl
IHtJTUd9IGF0ICgwLDI1KSBzaXplIDI1eDI1IFtiZ2NvbG9yPSNBREQ4RTZdCiBsYXllciBhdCAo
OCw2MDkpIHNpemUgMTM2eDc2CiAgIFJlbmRlckJsb2NrIHtESVZ9IGF0ICgwLDYwMSkgc2l6ZSAx
MzZ4NzYgW2NvbG9yPSNBREQ4RTZdIFtib3JkZXI6ICgzcHggc29saWQgIzAwMDAwMCldCi0gICAg
UmVuZGVyQmxvY2sge0RJVn0gYXQgKDEzLDUzKSBzaXplIDI1eDI1IFtiZ2NvbG9yPSNBREQ4RTZd
CisgICAgUmVuZGVyQmxvY2sge0RJVn0gYXQgKDEzLDEzKSBzaXplIDI1eDI1IFtiZ2NvbG9yPSNB
REQ4RTZdCiBsYXllciBhdCAoMjEsOTEpIHNpemUgMjV4MjUKICAgUmVuZGVyQmxvY2sgKHBvc2l0
aW9uZWQpIHtESVZ9IGF0ICgyMSw5MSkgc2l6ZSAyNXgyNSBbYm9yZGVyOiAoM3B4IHNvbGlkICMw
MDAwRkY3RildCiBsYXllciBhdCAoODEsNjYpIHNpemUgMjV4MjUKQEAgLTk2LDcgKzk2LDcgQEAg
bGF5ZXIgYXQgKDgxLDM0OSkgc2l6ZSAyNXgyNQogICBSZW5kZXJCbG9jayAocG9zaXRpb25lZCkg
e0RJVn0gYXQgKDgxLDM0OSkgc2l6ZSAyNXgyNSBbYm9yZGVyOiAoM3B4IHNvbGlkICMwMDAwRkY3
RildCiBsYXllciBhdCAoODMsNDEyKSBzaXplIDI1eDI1CiAgIFJlbmRlckJsb2NrIChwb3NpdGlv
bmVkKSB7RElWfSBhdCAoODMsNDEyKSBzaXplIDI1eDI1IFtib3JkZXI6ICgzcHggc29saWQgIzAw
MDBGRjdGKV0KLWxheWVyIGF0ICg4MSw1MjEpIHNpemUgMjV4MjUKLSAgUmVuZGVyQmxvY2sgKHBv
c2l0aW9uZWQpIHtESVZ9IGF0ICg4MSw1MjEpIHNpemUgMjV4MjUgW2JvcmRlcjogKDNweCBzb2xp
ZCAjMDAwMEZGN0YpXQotbGF5ZXIgYXQgKDgxLDYxMikgc2l6ZSAyNXgyNQotICBSZW5kZXJCbG9j
ayAocG9zaXRpb25lZCkge0RJVn0gYXQgKDgxLDYxMikgc2l6ZSAyNXgyNSBbYm9yZGVyOiAoM3B4
IHNvbGlkICMwMDAwRkY3RildCitsYXllciBhdCAoODEsNDk2KSBzaXplIDI1eDI1CisgIFJlbmRl
ckJsb2NrIChwb3NpdGlvbmVkKSB7RElWfSBhdCAoODEsNDk2KSBzaXplIDI1eDI1IFtib3JkZXI6
ICgzcHggc29saWQgIzAwMDBGRjdGKV0KK2xheWVyIGF0ICgyMSw2MjIpIHNpemUgMjV4MjUKKyAg
UmVuZGVyQmxvY2sgKHBvc2l0aW9uZWQpIHtESVZ9IGF0ICgyMSw2MjIpIHNpemUgMjV4MjUgW2Jv
cmRlcjogKDNweCBzb2xpZCAjMDAwMEZGN0YpXQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9tdWx0
aWNvbC9jb2x1bW4tYnJlYWstd2l0aC1iYWxhbmNpbmcuaHRtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9mYXN0L211bHRpY29sL2NvbHVtbi1icmVhay13aXRoLWJhbGFuY2luZy5odG1sCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9tdWx0aWNvbC9jb2x1bW4tYnJlYWstd2l0
aC1iYWxhbmNpbmcuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NiBAQAorPGh0bWw+Cis8
ZGl2IHN0eWxlPSItd2Via2l0LWNvbHVtbi1jb3VudDoyOyBib3JkZXI6NXB4IHNvbGlkIGJsdWUi
PgorVGhpcyBpcyBzb21lIHRleHQuPGJyPgorVGhpcyBpcyBzb21lIHRleHQuPGJyPgorVGhpcyBp
cyBzb21lIHRleHQuPGJyPgorVGhpcyBpcyBzb21lIHRleHQuPGJyPgorVGhpcyBpcyBzb21lIHRl
eHQuPGJyPgorVGhpcyBpcyBzb21lIHRleHQuPGJyPgorVGhpcyBpcyBzb21lIHRleHQuPGJyPgor
CitUaGlzIGlzIHNvbWUgdGV4dC48YnI+CitUaGlzIGlzIHNvbWUgdGV4dC48YnI+CitUaGlzIGlz
IHNvbWUgdGV4dC48YnI+CitUaGlzIGlzIHNvbWUgdGV4dC48YnI+CitUaGlzIGlzIHNvbWUgdGV4
dC48YnI+CitUaGlzIGlzIHNvbWUgdGV4dC48YnI+CitUaGlzIGlzIHNvbWUgdGV4dC48YnI+CisK
K1RoaXMgaXMgc29tZSB0ZXh0Ljxicj4KK1RoaXMgaXMgc29tZSB0ZXh0Ljxicj4KK1RoaXMgaXMg
c29tZSB0ZXh0Ljxicj4KK1RoaXMgaXMgc29tZSB0ZXh0Ljxicj4KK1RoaXMgaXMgc29tZSB0ZXh0
Ljxicj4KK1RoaXMgaXMgc29tZSB0ZXh0Ljxicj4KK1RoaXMgaXMgc29tZSB0ZXh0Ljxicj4KKwor
PGRpdiBzdHlsZT0iLXdlYmtpdC1jb2x1bW4tYnJlYWstYmVmb3JlOiBhbHdheXMiPgorVGhpcyB0
ZXh0IHNob3VsZCBiZSBpbiB0aGUgc2Vjb25kIGNvbHVtbi48YnI+CitUaGlzIHRleHQgc2hvdWxk
IGJlIGluIHRoZSBzZWNvbmQgY29sdW1uLjxicj4KK1RoaXMgdGV4dCBzaG91bGQgYmUgaW4gdGhl
IHNlY29uZCBjb2x1bW4uPGJyPgorVGhpcyB0ZXh0IHNob3VsZCBiZSBpbiB0aGUgc2Vjb25kIGNv
bHVtbi48YnI+Cis8L2Rpdj4KKzwvZGl2PgorCis8ZGl2IHN0eWxlPSJtYXJnaW4tdG9wOjFlbTsg
LXdlYmtpdC1jb2x1bW4tY291bnQ6MjsgYm9yZGVyOjVweCBzb2xpZCBibHVlIj4KKworVGhpcyB0
ZXh0IHNob3VsZCBiZSBpbiB0aGUgZmlyc3QgY29sdW1uLjxicj4KK1RoaXMgdGV4dCBzaG91bGQg
YmUgaW4gdGhlIGZpcnN0IGNvbHVtbi48YnI+CitUaGlzIHRleHQgc2hvdWxkIGJlIGluIHRoZSBm
aXJzdCBjb2x1bW4uPGJyPgorVGhpcyB0ZXh0IHNob3VsZCBiZSBpbiB0aGUgZmlyc3QgY29sdW1u
Ljxicj4KKworPGRpdiBzdHlsZT0iLXdlYmtpdC1jb2x1bW4tYnJlYWstYmVmb3JlOiBhbHdheXMi
PgorVGhpcyBpcyBzb21lIHRleHQuPGJyPgorVGhpcyBpcyBzb21lIHRleHQuPGJyPgorVGhpcyBp
cyBzb21lIHRleHQuPGJyPgorVGhpcyBpcyBzb21lIHRleHQuPGJyPgorVGhpcyBpcyBzb21lIHRl
eHQuPGJyPgorVGhpcyBpcyBzb21lIHRleHQuPGJyPgorVGhpcyBpcyBzb21lIHRleHQuPGJyPgor
CitUaGlzIGlzIHNvbWUgdGV4dC48YnI+CitUaGlzIGlzIHNvbWUgdGV4dC48YnI+CitUaGlzIGlz
IHNvbWUgdGV4dC48YnI+CitUaGlzIGlzIHNvbWUgdGV4dC48YnI+CitUaGlzIGlzIHNvbWUgdGV4
dC48YnI+CitUaGlzIGlzIHNvbWUgdGV4dC48YnI+CitUaGlzIGlzIHNvbWUgdGV4dC48YnI+CisK
K1RoaXMgaXMgc29tZSB0ZXh0Ljxicj4KK1RoaXMgaXMgc29tZSB0ZXh0Ljxicj4KK1RoaXMgaXMg
c29tZSB0ZXh0Ljxicj4KK1RoaXMgaXMgc29tZSB0ZXh0Ljxicj4KK1RoaXMgaXMgc29tZSB0ZXh0
Ljxicj4KK1RoaXMgaXMgc29tZSB0ZXh0Ljxicj4KK1RoaXMgaXMgc29tZSB0ZXh0Ljxicj4KKzwv
ZGl2PgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9tdWx0aWNvbC9mbG9hdC1wYWdpbmF0ZS1jb21w
bGV4Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9tdWx0aWNvbC9mbG9hdC1w
YWdpbmF0ZS1jb21wbGV4Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L211
bHRpY29sL2Zsb2F0LXBhZ2luYXRlLWNvbXBsZXguaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw0OCBAQAorPGRpdiBzdHlsZT0iLXdlYmtpdC1jb2x1bW4td2lkdGg6MzAwcHg7LW1vei1jb2x1
bW4td2lkdGg6MzAwcHg7IGJvcmRlcjoycHggc29saWQgYmxhY2s7IGhlaWdodDo0MDBweCI+CitU
aGlzIGlzIHNvbWUgdGV4dC48YnI+CitUaGlzIGlzIHNvbWUgdGV4dC48YnI+VGhpcyBpcyBzb21l
IHRleHQuPGJyPlRoaXMgaXMgc29tZSB0ZXh0Ljxicj5UaGlzIGlzIHNvbWUgdGV4dC48YnI+VGhp
cyBpcyBzb21lIHRleHQuPGJyPlRoaXMgaXMgc29tZSB0ZXh0Ljxicj4KK1RoaXMgaXMgc29tZSB0
ZXh0Ljxicj5UaGlzIGlzIHNvbWUgdGV4dC48YnI+VGhpcyBpcyBzb21lIHRleHQuPGJyPlRoaXMg
aXMgc29tZSB0ZXh0Ljxicj5UaGlzIGlzIHNvbWUgdGV4dC48YnI+VGhpcyBpcyBzb21lIHRleHQu
PGJyPgorVGhpcyBpcyBzb21lIHRleHQuPGJyPgorPHA+PHNwYW4gc3R5bGU9ImZsb2F0OmxlZnQ7
Zm9udC1zaXplOjEyOHB4OyI+VDwvc3Bhbj4KK2hpcyBpcyBzb21lIHRleHQuPGJyPgorVGhpcyBp
cyBzb21lIHRleHQuPGJyPlRoaXMgaXMgc29tZSB0ZXh0Ljxicj4KK1RoaXMgaXMgc29tZSB0ZXh0
Ljxicj5UaGlzIGlzIHNvbWUgdGV4dC48YnI+VGhpcyBpcyBzb21lIHRleHQuPGJyPlRoaXMgaXMg
c29tZSB0ZXh0Ljxicj4KK1RoaXMgaXMgc29tZSB0ZXh0Ljxicj5UaGlzIGlzIHNvbWUgdGV4dC48
YnI+VGhpcyBpcyBzb21lIHRleHQuPGJyPlRoaXMgaXMgc29tZSB0ZXh0Ljxicj4KK1RoaXMgaXMg
c29tZSB0ZXh0Ljxicj5UaGlzIGlzIHNvbWUgdGV4dC48YnI+VGhpcyBpcyBzb21lIHRleHQuPGJy
PlRoaXMgaXMgc29tZSB0ZXh0Ljxicj5UaGlzIGlzIHNvbWUgdGV4dC48YnI+VGhpcyBpcyBzb21l
IHRleHQuPGJyPgorVGhpcyBpcyBzb21lIHRleHQuPGJyPlRoaXMgaXMgc29tZSB0ZXh0Ljxicj5U
aGlzIGlzIHNvbWUgdGV4dC48YnI+VGhpcyBpcyBzb21lIHRleHQuPGJyPgorVGhpcyBpcyBzb21l
IHRleHQuPGJyPlRoaXMgaXMgc29tZSB0ZXh0Ljxicj5UaGlzIGlzIHNvbWUgdGV4dC48YnI+VGhp
cyBpcyBzb21lIHRleHQuPGJyPlRoaXMgaXMgc29tZSB0ZXh0Ljxicj48L3A+Cis8L2Rpdj4KKwor
PGRpdiBzdHlsZT0ibWFyZ2luLXRvcDoxZW07IC13ZWJraXQtY29sdW1uLXdpZHRoOjMwMHB4Oy1t
b3otY29sdW1uLXdpZHRoOjMwMHB4OyBib3JkZXI6MnB4IHNvbGlkIGJsYWNrOyBoZWlnaHQ6NDAw
cHgiPgorVGhpcyBpcyBzb21lIHRleHQuPGJyPgorVGhpcyBpcyBzb21lIHRleHQuPGJyPlRoaXMg
aXMgc29tZSB0ZXh0Ljxicj5UaGlzIGlzIHNvbWUgdGV4dC48YnI+VGhpcyBpcyBzb21lIHRleHQu
PGJyPlRoaXMgaXMgc29tZSB0ZXh0Ljxicj5UaGlzIGlzIHNvbWUgdGV4dC48YnI+CitUaGlzIGlz
IHNvbWUgdGV4dC48YnI+VGhpcyBpcyBzb21lIHRleHQuPGJyPlRoaXMgaXMgc29tZSB0ZXh0Ljxi
cj5UaGlzIGlzIHNvbWUgdGV4dC48YnI+VGhpcyBpcyBzb21lIHRleHQuPGJyPlRoaXMgaXMgc29t
ZSB0ZXh0Ljxicj4KK1RoaXMgaXMgc29tZSB0ZXh0Ljxicj4KKzxwPjxpbWcgc3R5bGU9ImZsb2F0
OmxlZnQ7d2lkdGg6MTAwcHg7aGVpZ2h0OjEwMHB4O2JhY2tncm91bmQtY29sb3I6Z3JlZW4iPjxp
bWcgc3R5bGU9ImZsb2F0OnJpZ2h0O3dpZHRoOjEwMHB4O2hlaWdodDoyMDBweDtiYWNrZ3JvdW5k
LWNvbG9yOmdyZWVuIj4KK1RoaXMgaXMgc29tZSB0ZXh0PGJyPgorVGhpcyBpcyBzb21lIHRleHQu
PGJyPlRoaXMgaXMgc29tZSB0ZXh0Ljxicj4KK1RoaXMgaXMgc29tZSB0ZXh0Ljxicj5UaGlzIGlz
IHNvbWUgdGV4dC48YnI+VGhpcyBpcyBzb21lIHRleHQuPGJyPlRoaXMgaXMgc29tZSB0ZXh0Ljxi
cj4KK1RoaXMgaXMgc29tZSB0ZXh0Ljxicj5UaGlzIGlzIHNvbWUgdGV4dC48YnI+VGhpcyBpcyBz
b21lIHRleHQuPGJyPlRoaXMgaXMgc29tZSB0ZXh0Ljxicj4KK1RoaXMgaXMgc29tZSB0ZXh0Ljxi
cj5UaGlzIGlzIHNvbWUgdGV4dC48YnI+VGhpcyBpcyBzb21lIHRleHQuPGJyPlRoaXMgaXMgc29t
ZSB0ZXh0Ljxicj5UaGlzIGlzIHNvbWUgdGV4dC48YnI+VGhpcyBpcyBzb21lIHRleHQuPGJyPgor
VGhpcyBpcyBzb21lIHRleHQuPGJyPlRoaXMgaXMgc29tZSB0ZXh0Ljxicj5UaGlzIGlzIHNvbWUg
dGV4dC48YnI+VGhpcyBpcyBzb21lIHRleHQuPGJyPgorVGhpcyBpcyBzb21lIHRleHQuPGJyPlRo
aXMgaXMgc29tZSB0ZXh0Ljxicj5UaGlzIGlzIHNvbWUgdGV4dC48YnI+VGhpcyBpcyBzb21lIHRl
eHQuPGJyPlRoaXMgaXMgc29tZSB0ZXh0Ljxicj48L3A+Cis8L2Rpdj4KKworPGRpdiBzdHlsZT0i
bWFyZ2luLXRvcDoxZW07IC13ZWJraXQtY29sdW1uLXdpZHRoOjMwMHB4Oy1tb3otY29sdW1uLXdp
ZHRoOjMwMHB4OyBib3JkZXI6MnB4IHNvbGlkIGJsYWNrOyBoZWlnaHQ6NDAwcHgiPgorPGltZyBz
dHlsZT0iZmxvYXQ6bGVmdDtiYWNrZ3JvdW5kLWNvbG9yOmdyZWVuOyB3aWR0aDozMDBweDtoZWln
aHQ6MzkwcHgiPgorTG9uZ2VyIHRleHQgZGVzaWduZWQgdG8gdGVzdCBmbG9hdCBhbmQgd3JhcHBp
bmcgYmVoYXZpb3IuIExvbmdlciB0ZXh0IGRlc2lnbmVkIHRvIHRlc3QgZmxvYXQgYW5kIHdyYXBw
aW5nIGJlaGF2aW9yLgorTG9uZ2VyIHRleHQgZGVzaWduZWQgdG8gdGVzdCBmbG9hdCBhbmQgd3Jh
cHBpbmcgYmVoYXZpb3IuCitMb25nZXIgdGV4dCBkZXNpZ25lZCB0byB0ZXN0IGZsb2F0IGFuZCB3
cmFwcGluZyBiZWhhdmlvci4KK0xvbmdlciB0ZXh0IGRlc2lnbmVkIHRvIHRlc3QgZmxvYXQgYW5k
IHdyYXBwaW5nIGJlaGF2aW9yLgorPC9kaXY+CisKKzxkaXYgc3R5bGU9Im1hcmdpbi10b3A6MWVt
OyAtd2Via2l0LWNvbHVtbi13aWR0aDozMDBweDstbW96LWNvbHVtbi13aWR0aDozMDBweDsgYm9y
ZGVyOjJweCBzb2xpZCBibGFjazsgaGVpZ2h0OjQwMHB4Ij4KKzxpbWcgc3R5bGU9ImZsb2F0Omxl
ZnQ7YmFja2dyb3VuZC1jb2xvcjpibHVlOyB3aWR0aDoxMDAlO2hlaWdodDozODBweCI+Cis8c3Bh
biBzdHlsZT0iZm9udC1zaXplOjI0cHgiPjxpbWcgc3R5bGU9ImZsb2F0OmxlZnQ7YmFja2dyb3Vu
ZC1jb2xvcjpncmVlbjtoZWlnaHQ6MjBweDt3aWR0aDoxMDBweCI+CisKK0xvbmdlciB0ZXh0IGRl
c2lnbmVkIDxpbWcgc3R5bGU9ImZsb2F0OnJpZ2h0O2JhY2tncm91bmQtY29sb3I6Z3JlZW47aGVp
Z2h0OjIwcHg7d2lkdGg6MTAwcHgiPnRvIHRlc3QgZmxvYXQgYW5kIHdyYXBwaW5nIGJlaGF2aW9y
LiBMb25nZXIgdGV4dCBkZXNpZ25lZCB0byB0ZXN0IGZsb2F0IGFuZCB3cmFwcGluZyBiZWhhdmlv
ci4KK0xvbmdlciB0ZXh0IGRlc2lnbmVkIHRvIHRlc3QgZmxvYXQgYW5kIHdyYXBwaW5nIGJlaGF2
aW9yLgorTG9uZ2VyIHRleHQgZGVzaWduZWQgdG8gdGVzdCBmbG9hdCBhbmQgd3JhcHBpbmcgYmVo
YXZpb3IuCitMb25nZXIgdGV4dCBkZXNpZ25lZCB0byB0ZXN0IGZsb2F0IGFuZCB3cmFwcGluZyBi
ZWhhdmlvci4KKzwvc3Bhbj4KKzwvZGl2PgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9tdWx0aWNv
bC9mbG9hdC1wYWdpbmF0ZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvbXVs
dGljb2wvZmxvYXQtcGFnaW5hdGUuaHRtbAkocmV2aXNpb24gNjc2MzkpCisrKyBMYXlvdXRUZXN0
cy9mYXN0L211bHRpY29sL2Zsb2F0LXBhZ2luYXRlLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTEs
NCArMSw0IEBACi08ZGl2IHN0eWxlPSItd2Via2l0LWNvbHVtbi13aWR0aDozMDBweDtib3JkZXI6
MnB4IHNvbGlkIGJsYWNrOyBoZWlnaHQ6NDAwcHgiPgorPGRpdiBzdHlsZT0iLXdlYmtpdC1jb2x1
bW4td2lkdGg6MzAwcHg7LW1vei1jb2x1bW4td2lkdGg6MzAwcHg7IGJvcmRlcjoycHggc29saWQg
YmxhY2s7IGhlaWdodDo0MDBweCI+CiBUaGlzIGlzIHNvbWUgdGV4dC48YnI+CiBUaGlzIGlzIHNv
bWUgdGV4dC48YnI+VGhpcyBpcyBzb21lIHRleHQuPGJyPlRoaXMgaXMgc29tZSB0ZXh0Ljxicj5U
aGlzIGlzIHNvbWUgdGV4dC48YnI+VGhpcyBpcyBzb21lIHRleHQuPGJyPlRoaXMgaXMgc29tZSB0
ZXh0Ljxicj4KIFRoaXMgaXMgc29tZSB0ZXh0Ljxicj5UaGlzIGlzIHNvbWUgdGV4dC48YnI+VGhp
cyBpcyBzb21lIHRleHQuPGJyPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9tdWx0aWNvbC9mbG9h
dC10cnVuY2F0aW9uLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9tdWx0aWNv
bC9mbG9hdC10cnVuY2F0aW9uLmh0bWwJKHJldmlzaW9uIDY3NjM5KQorKysgTGF5b3V0VGVzdHMv
ZmFzdC9tdWx0aWNvbC9mbG9hdC10cnVuY2F0aW9uLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTM0
LDcgKzM0LDcgQEAKICAgICAgICAgPC9kaXY+CiAgICAgICAgIHRleHQgcnVucyBoZXJlIG5leHQg
dG8gdGhlIGZsb2F0CiAgICAgPC9kaXY+Ci0gICAgPCEtLSBJbiB0aGlzIGNhc2UsIHRoZSBmbG9h
dCBmb3JjZXMgYW4gZWFybHkgY29sdW1uIGJyZWFrLiAtLT4KKyAgICA8IS0tIEluIHRoaXMgY2Fz
ZSwgdGhlIGZsb2F0IHBhZ2luYXRlcyBhZnRlciBpdHMgc2Vjb25kIGxpbmUuIC0tPgogICAgIDxk
aXYgY2xhc3M9ImNvbHVtbnMiIHN0eWxlPSJoZWlnaHQ6IDcwcHg7Ij4KICAgICAgICAgb25lIGxp
bmUgdHdvIGxpbmVzIHRocmVlIGxpbmVzCiAgICAgICAgIDxkaXYgY2xhc3M9ImZsb2F0IiBpZD0i
ZjMiPgpAQCAtNDIsNyArNDIsNyBAQAogICAgICAgICA8L2Rpdj4KICAgICAgICAgdGV4dCBydW5z
IGhlcmUgbmV4dCB0byB0aGUgZmxvYXQKICAgICA8L2Rpdj4KLSAgICA8IS0tIEluIHRoaXMgY2Fz
ZSwgdGhlIGZsb2F0IGZvcmNlcyBhbiBlYXJseSBjb2x1bW4gYnJlYWsuIC0tPgorICAgIDwhLS0g
SW4gdGhpcyBjYXNlLCB0aGUgZmxvYXQgcGFnaW5hdGVzIGFmdGVyIGl0cyBmaXJzdCBsaW5lLiAt
LT4KICAgICA8ZGl2IGNsYXNzPSJjb2x1bW5zIiBzdHlsZT0iaGVpZ2h0OiA3MHB4OyI+CiAgICAg
ICAgIG9uZSBsaW5lIHR3byBsaW5lcyB0aHJlZSBsaW5lcyBhbmQgc29tZSBtb3JlCiAgICAgICAg
IDxkaXYgY2xhc3M9ImZsb2F0IiBpZD0iZjQiPgpAQCAtNTAsOCArNTAsNyBAQAogICAgICAgICA8
L2Rpdj4KICAgICAgICAgdGV4dCBydW5zIGhlcmUgbmV4dCB0byB0aGUgZmxvYXQKICAgICA8L2Rp
dj4KLSAgICA8IS0tIEluIHRoaXMgY2FzZSwgdGhlIGZsb2F0IGlzIHRvbyB0YWxsIHRvIGZpdCBh
bnl3YXksIHNvIGl0IGRvZXNuJ3QKLSAgICAgICAgIGFmZmVjdCBjb2x1bW4gYnJlYWtzLiAtLT4K
KyAgICA8IS0tIEluIHRoaXMgY2FzZSwgdGhlIGZsb2F0IHBhZ2luYXRlcyBhZnRlciBpdHMgdGhp
cmQgbGluZS4gLS0+CiAgICAgPGRpdiBjbGFzcz0iY29sdW1ucyIgc3R5bGU9ImhlaWdodDogNDVw
eDsiPgogICAgICAgICBvbmUgbGluZQogICAgICAgICA8ZGl2IGNsYXNzPSJmbG9hdCIgaWQ9ImY1
Ij4KQEAgLTc2LDggKzc1LDggQEAKICAgICB2YXIgdGVzdHMgPSBbCiAgICAgICAgIFsiZjEiLCAw
LCA0NV0sCiAgICAgICAgIFsiZjIiLCAwLCA0NV0sCi0gICAgICAgIFsiZjMiLCAxMDAsIDVdLAot
ICAgICAgICBbImY0IiwgMTAwLCA1XSwKKyAgICAgICAgWyJmMyIsIDAsIDQ1XSwKKyAgICAgICAg
WyJmNCIsIDAsIDU1XSwKICAgICAgICAgWyJmNSIsIDAsIDE1XQogICAgIF07CiAKSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3QvbXVsdGljb2wvbWFyZ2luLWNvbGxhcHNlLmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC9tdWx0aWNvbC9tYXJnaW4tY29sbGFwc2UuaHRtbAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvbXVsdGljb2wvbWFyZ2luLWNvbGxhcHNlLmh0bWwJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMgQEAKKzxodG1sPgorPGhlYWQ+Cis8c3R5bGU+Cisu
Y29sdW1ucyB7IC13ZWJraXQtY29sdW1uLWNvdW50OjI7IC1tb3otY29sdW1uLWNvdW50OiAyOyBj
b2x1bW4tY291bnQ6IDI7IGJvcmRlcjoycHggc29saWQgYmxhY2s7IGhlaWdodDozMDBweCB9Cisu
YmxvY2sgeyBoZWlnaHQ6MjAwcHg7IGJhY2tncm91bmQtY29sb3I6cHVycGxlOyB9Cis8L3N0eWxl
PgorPC9oZWFkPgorPGJvZHk+CitUaGUgdHdvIHB1cnBsZSByZWN0YW5nbGVzIGJlbG93IHNob3Vs
ZCBib3RoIGJlIGF0IHRoZSB0b3Agb2YgdGhlaXIgY29sdW1ucy4gIElmIG9uZSBpcyBsb3dlciB0
aGFuIHRoZSBvdGhlciwgdGhhbiB0aGUgdGVzdCBoYXMgZmFpbGVkLgorPGRpdiBjbGFzcz0iY29s
dW1ucyI+Cis8ZGl2IGNsYXNzPSJibG9jayIgc3R5bGU9Im1hcmdpbi1ib3R0b206MjAwcHgiPjwv
ZGl2PgorPGRpdiBjbGFzcz0iYmxvY2siPjwvZGl2PgorPC9kaXY+CkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L211bHRpY29sL21heC1oZWlnaHQtY29sdW1ucy1ibG9jay5odG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3QvbXVsdGljb2wvbWF4LWhlaWdodC1jb2x1bW5zLWJsb2NrLmh0
bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L211bHRpY29sL21heC1oZWlnaHQt
Y29sdW1ucy1ibG9jay5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkgQEAKKzxodG1sPgor
PGJvZHk+CitUaGlzIGlzIGNhcHR1cmluZyBjdXJyZW50IGJlaGF2aW9yLCBidXQgaXQncyBub3Qg
Y2xlYXIgdGhhdCBpdCBpcyBjb3JyZWN0LiAgSXQncyBub3QgY2xlYXIgaWYgbWF4LWhlaWdodCBv
biBhIGNvbHVtbnMgYmxvY2sgY29uc3RpdHV0ZXMgYQorY29uc3RyYWludCBvbiB0aGUgY29sdW1u
cyBvciBub3QuICBZb3Ugb2J2aW91c2x5IGJlZ2luIHRyeWluZyB0byBiYWxhbmNlLCBidXQgb25s
eSBydW4gaW50byB0aGUgY29uc3RyYWludCBvbmNlIHRoZSBiYWxhbmNlZCBjb2x1bW5zIGV4Y2Vl
ZAordGhlIG1heC1oZWlnaHQuICBJdCdzIG5vdCBjbGVhciB0aGF0IHlvdSBzaG91bGQgc3VkZGVu
bHkgc2hpZnQgdG8gYSBmaWxsLiAgT3VyIGN1cnJlbnQgYmVoYXZpb3IgKHdoaWNoIG1hdGNoZXMg
RmlyZWZveCkgaXMgdG8ganVzdCBvdmVyZmxvdword2l0aG91dCBjaGFuZ2luZyBmcm9tIGJhbGFu
Y2UgdG8gZmlsbC4KKworPGRpdiBzdHlsZT0iLXdlYmtpdC1jb2x1bW4tY291bnQ6NTsgLW1vei1j
b2x1bW4tY291bnQ6NTsgbWF4LWhlaWdodDo2MHB4O2JvcmRlcjoycHggc29saWQgYmxhY2s7IGZv
bnQtc2l6ZToyNHB4OyB3aWR0aDo0MDBweCI+CitUaGlzIGlzIHNvbWUgdGV4dDxicj5UaGlzIGlz
IHNvbWUgdGV4dDxicj5UaGlzIGlzIHNvbWUgdGV4dDxicj5UaGlzIGlzIHNvbWUgdGV4dDxicj5U
aGlzIGlzIHNvbWUgdGV4dDxicj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L211bHRpY29sL3Bvc2l0aW9uZWQtc3BsaXQuaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L211bHRpY29sL3Bvc2l0aW9uZWQtc3BsaXQuaHRtbAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvbXVsdGljb2wvcG9zaXRpb25lZC1zcGxpdC5o
dG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzIEBACis8ZGl2IHN0eWxlPSItd2Via2l0LWNv
bHVtbi1jb3VudDoyOyBib3JkZXI6MnB4IHNvbGlkIGJsYWNrOyBoZWlnaHQ6MzAwcHgiPgorPGRp
diBzdHlsZT0iaGVpZ2h0OjI1MHB4Ij48L2Rpdj4KKzxkaXYgc3R5bGU9InBvc2l0aW9uOnJlbGF0
aXZlIj4KKzxkaXYgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlO2hlaWdodDoyMDBweDt3aWR0aDoz
MDBweDtiYWNrZ3JvdW5kLWNvbG9yOmxpZ2h0Z3JheSI+CitUaGlzIHRleHQgc2hvdWxkIHBhZ2lu
YXRlIGFjcm9zcyB0aGUgY29sdW1ucy48YnI+CitUaGlzIHRleHQgc2hvdWxkIHBhZ2luYXRlIGFj
cm9zcyB0aGUgY29sdW1ucy48YnI+CitUaGlzIHRleHQgc2hvdWxkIHBhZ2luYXRlIGFjcm9zcyB0
aGUgY29sdW1ucy48YnI+CitUaGlzIHRleHQgc2hvdWxkIHBhZ2luYXRlIGFjcm9zcyB0aGUgY29s
dW1ucy48YnI+CitUaGlzIHRleHQgc2hvdWxkIHBhZ2luYXRlIGFjcm9zcyB0aGUgY29sdW1ucy48
YnI+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBzdHlsZT0iaGVpZ2h0OjI1MHB4Ij48L2Rpdj4KKzwv
ZGl2PgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9tdWx0aWNvbC9zaGFkb3ctYnJlYWtpbmcuaHRt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L211bHRpY29sL3NoYWRvdy1icmVha2lu
Zy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9tdWx0aWNvbC9zaGFkb3ct
YnJlYWtpbmcuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNyBAQAorPCFET0NUWVBFIGh0
bWw+Cis8aHRtbD4KKwk8aGVhZD4KKwkJPHN0eWxlPgorICAgICAgICAgICAgICAgICAgICAgICAg
cCB7CisJCQkJcG9zaXRpb246YWJzb2x1dGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJvcmRlcjoycHggc29saWQgYmxhY2s7CisJCQkJbWF4LXdpZHRoOjQyMHB4OworCQkJCS13
ZWJraXQtY29sdW1uLWdhcDoyMHB4OworCQkJCS13ZWJraXQtY29sdW1uLXdpZHRoOjIwMHB4Owor
CQkJCS13ZWJraXQtY29sdW1uLXJ1bGU6MXB4IGRvdHRlZCB3aGl0ZTsKKwkJCQlmb250LXNpemU6
MTZweDsKKwkJCQl0b3A6MjBweDsKKwkJCQlsZWZ0OjIwcHg7CisJCQkJdGV4dC1hbGlnbjpqdXN0
aWZ5OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LXdlaWdodDpib2xkOwor
CQkJCXRleHQtc2hhZG93OjFweCAxcHggMTBweCBibGFjazsKKwkJCX0KKwkJCQorCQkJcDpmaXJz
dC1sZXR0ZXIgeworCQkJCWZvbnQtc2l6ZTozNnB4OworCQkJCW1hcmdpbi1yaWdodDo0cHg7CisJ
CQkJbWFyZ2luLWJvdHRvbTotNnB4OworCQkJCWZsb2F0OmxlZnQ7CisJCQl9CisJCQkKKwkJCQor
CQkJCisJCTwvc3R5bGU+CisJPC9oZWFkPgorCQorCTxib2R5PgorCQk8ZGl2IGNsYXNzPSJtYWci
PgorCQkJPHA+TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2Np
bmcgZWxpdC4gQ3JhcyBwaGFyZXRyYSBtb2xsaXMgcGhhcmV0cmEuIFN1c3BlbmRpc3NlIGxhY2lu
aWEgb3JjaSBldCBmZWxpcyB0cmlzdGlxdWUgc2l0IGFtZXQgc2VtcGVyIG1hc3NhIHRlbXB1cy4g
U3VzcGVuZGlzc2UgY29uc2VjdGV0dXIgdGVtcG9yIHB1bHZpbmFyLiBQcm9pbiBkdWkgZXJvcywg
dWx0cmljaWVzIHZlbCBtYWxlc3VhZGEgdmVsLCB0ZW1wb3IgYXQgYW50ZS4gTmFtIGVnZXQgbmlz
bCBkdWkuIERvbmVjIG1vbGVzdGllIGxlY3R1cyBhIG51bmMgc2NlbGVyaXNxdWUgYmxhbmRpdC4g
TmFtIG5vbiBsaWd1bGEgbWFzc2EsIHNlZCBzdXNjaXBpdCB0dXJwaXMuIEV0aWFtIGVnZXQgbGln
dWxhIHNpdCBhbWV0IHR1cnBpcyB2ZW5lbmF0aXMgZGljdHVtIGluIGVsZWlmZW5kIGF1Z3VlLiBE
dWlzIHRlbGx1cyBsZWN0dXMsIHZvbHV0cGF0IGV0IGFkaXBpc2NpbmcgYSwgcGVsbGVudGVzcXVl
IGV1IG1ldHVzLiBBZW5lYW4gc3VzY2lwaXQgY29uZ3VlIG1hdXJpcyBhdCBncmF2aWRhLiBJbnRl
Z2VyIGxlY3R1cyBsaWd1bGEsIGNvbnNlY3RldHVyIHNpdCBhbWV0IHZlbmVuYXRpcyBpZCwgc2Nl
bGVyaXNxdWUgZWdldCBuaXNsLiBOdW5jIGRhcGlidXMgcG9zdWVyZSByaXN1cywgdml0YWUgdGVt
cG9yIG5pYmggaWFjdWxpcyBldC48L3A+CisJCTwvZGl2PgorCTwvYm9keT4KKzwvaHRtbD4KXCBO
byBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L211bHRpY29s
L3NpbmdsZS1saW5lLWV4cGVjdGVkLmNoZWNrc3VtCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2Zhc3QvbXVsdGljb2wvc2luZ2xlLWxpbmUtZXhwZWN0ZWQuY2hlY2tzdW0JKHJldmlzaW9uIDY3
NjM5KQorKysgTGF5b3V0VGVzdHMvZmFzdC9tdWx0aWNvbC9zaW5nbGUtbGluZS1leHBlY3RlZC5j
aGVja3N1bQkod29ya2luZyBjb3B5KQpAQCAtMSArMSBAQAotMGY4NGNlY2NiZDZjYzZlOGViYmEy
OTBhYmZlZGMwMjUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitkY2FkMmJlZDQ4ODg5MGNh
ZWUyZDc4MjU3YTRiOWY4YwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IExheW91
dFRlc3RzL2Zhc3QvbXVsdGljb2wvdGFibGUtbWFyZ2luLWNvbGxhcHNlLmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9tdWx0aWNvbC90YWJsZS1tYXJnaW4tY29sbGFwc2UuaHRt
bAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvbXVsdGljb2wvdGFibGUtbWFyZ2lu
LWNvbGxhcHNlLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjIgQEAKKzxodG1sPgorPGhl
YWQ+Cis8c3R5bGU+CisuY29sdW1ucyB7IC13ZWJraXQtY29sdW1uLWNvdW50OjI7IC1tb3otY29s
dW1uLWNvdW50OiAyOyBjb2x1bW4tY291bnQ6IDI7IGJvcmRlcjoycHggc29saWQgYmxhY2s7IGhl
aWdodDozMDBweCB9CisuYmxvY2sgeyBoZWlnaHQ6MjAwcHg7IGJhY2tncm91bmQtY29sb3I6cHVy
cGxlOyB9Cis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+CitUaGUgZm91ciByZWN0YW5nbGVzIGJl
bG93IHNob3VsZCBib3RoIGJlIGF0IHRoZSB0b3Agb2YgdGhlaXIgY29sdW1ucy4gIElmIG9uZSBp
cyBsb3dlciB0aGFuIHRoZSBvdGhlciwgdGhhbiB0aGUgdGVzdCBoYXMgZmFpbGVkLiAgVGhlIHBh
dHRlcm4gaW4gZWFjaAorY29sdW1uIHNob3VsZCBiZSB0aGUgc2FtZSAob3JhbmdlL3llbGxvdyku
Cis8ZGl2IGNsYXNzPSJjb2x1bW5zIj4KKzx0YWJsZSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5n
PTAgYm9yZGVyPTAgd2lkdGg9MTAwJT4KKzx0cj48dGQgd2lkdGg9NTAlPgorPGRpdiBjbGFzcz0i
YmxvY2siIHN0eWxlPSJtYXJnaW4tYm90dG9tOjIwMHB4OyBiYWNrZ3JvdW5kLWNvbG9yOm9yYW5n
ZSI+PC9kaXY+Cis8ZGl2IGNsYXNzPSJibG9jayIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6b3Jh
bmdlIj48L2Rpdj4KKzwvdGQ+Cis8dGQgd2lkdGg9NTAlPgorPGRpdiBjbGFzcz0iYmxvY2siIHN0
eWxlPSJtYXJnaW4tYm90dG9tOjIwMHB4OyBiYWNrZ3JvdW5kLWNvbG9yOnllbGxvdyI+PC9kaXY+
Cis8ZGl2IGNsYXNzPSJibG9jayIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6eWVsbG93Ij48L2Rp
dj4KKzwvdGQ+PC90cj4KKzwvdGFibGU+Cis8L2Rpdj4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qv
bXVsdGljb2wvdGFibGUtdmVydGljYWwtYWxpZ24uaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L211bHRpY29sL3RhYmxlLXZlcnRpY2FsLWFsaWduLmh0bWwJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L211bHRpY29sL3RhYmxlLXZlcnRpY2FsLWFsaWduLmh0bWwJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIzIEBACis8ZGl2IHN0eWxlPSItd2Via2l0LWNvbHVt
bi1jb3VudDoyOyBoZWlnaHQ6MzUwcHgiPgorPHRhYmxlIGJvcmRlcj0xIGNlbGxwYWRkaW5nPTEw
IGNlbGxzcGFjaW5nPTAiPgorPHRyIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZSI+PHRk
PgorVGhpcyBjZWxsIGhhcyBsb3RzIG9mIHRleHQuPGJyPgorVGhpcyBjZWxsIGhhcyBsb3RzIG9m
IHRleHQuPGJyPgorVGhpcyBjZWxsIGhhcyBsb3RzIG9mIHRleHQuPGJyPgorVGhpcyBjZWxsIGhh
cyBsb3RzIG9mIHRleHQuPGJyPgorVGhpcyBjZWxsIGhhcyBsb3RzIG9mIHRleHQuPGJyPgorVGhp
cyBjZWxsIGhhcyBsb3RzIG9mIHRleHQuPGJyPgorVGhpcyBjZWxsIGhhcyBsb3RzIG9mIHRleHQu
PGJyPgorVGhpcyBjZWxsIGhhcyBsb3RzIG9mIHRleHQuPGJyPgorVGhpcyBjZWxsIGhhcyBsb3Rz
IG9mIHRleHQuPGJyPgorVGhpcyBjZWxsIGhhcyBsb3RzIG9mIHRleHQuPGJyPgorVGhpcyBjZWxs
IGhhcyBsb3RzIG9mIHRleHQuPGJyPgorVGhpcyBjZWxsIGhhcyBsb3RzIG9mIHRleHQuPGJyPgor
VGhpcyBjZWxsIGhhcyBsb3RzIG9mIHRleHQuPGJyPgorVGhpcyBjZWxsIGhhcyBsb3RzIG9mIHRl
eHQuPGJyPgorVGhpcyBjZWxsIGhhcyBsb3RzIG9mIHRleHQuPGJyPgorVGhpcyBjZWxsIGhhcyBs
b3RzIG9mIHRleHQuPGJyPgorVGhpcyBjZWxsIGhhcyBsb3RzIG9mIHRleHQuPGJyPgorVGhpcyBj
ZWxsIGhhcyBsb3RzIG9mIHRleHQuPGJyPgorVGhpcyBjZWxsIGhhcyBsb3RzIG9mIHRleHQuPGJy
PgorVGhpcyBjZWxsIGhhcyBsb3RzIG9mIHRleHQuPGJyPgorVGhpcyBjZWxsIGhhcyBsb3RzIG9m
IHRleHQuPGJyPgorVGhpcyBjZWxsIGhhcyBsb3RzIG9mIHRleHQuPGJyPgorVGhpcyBjZWxsIGhh
cyBsb3RzIG9mIHRleHQuPGJyPgorVGhpcyBjZWxsIGhhcyBsb3RzIG9mIHRleHQuPGJyPgorVGhp
cyBjZWxsIGhhcyBsb3RzIG9mIHRleHQuPGJyPgorVGhpcyBjZWxsIGhhcyBsb3RzIG9mIHRleHQu
PGJyPgorVGhpcyBjZWxsIGhhcyBsb3RzIG9mIHRleHQuPGJyPgorVGhpcyBjZWxsIGhhcyBsb3Rz
IG9mIHRleHQuPGJyPgorVGhpcyBjZWxsIGhhcyBsb3RzIG9mIHRleHQuPGJyPgorVGhpcyBjZWxs
IGhhcyBsb3RzIG9mIHRleHQuPGJyPgorCisKKzx0ZD48c3BhbiBzdHlsZT0iZm9udC1zaXplOjY0
cHgiPk90aGVyIGNlbGwuPC9zcGFuPjwvdGQ+Cis8L3RyPgorPC90YWJsZT4KKzwvZGl2PgorCis8
aHI+CisKKzxkaXYgc3R5bGU9Ii13ZWJraXQtY29sdW1uLWNvdW50OjI7IGhlaWdodDozMDBweCI+
Cis8dGFibGUgYm9yZGVyPTEgY2VsbHBhZGRpbmc9MTAgY2VsbHNwYWNpbmc9MCI+Cis8dHIgc3R5
bGU9InZlcnRpY2FsLWFsaWduOm1pZGRsZSI+PHRkPgorVGhpcyBjZWxsIGhhcyBsb3RzIG9mIHRl
eHQuPGJyPgorVGhpcyBjZWxsIGhhcyBsb3RzIG9mIHRleHQuPGJyPgorVGhpcyBjZWxsIGhhcyBs
b3RzIG9mIHRleHQuPGJyPgorVGhpcyBjZWxsIGhhcyBsb3RzIG9mIHRleHQuPGJyPgorVGhpcyBj
ZWxsIGhhcyBsb3RzIG9mIHRleHQuPGJyPgorVGhpcyBjZWxsIGhhcyBsb3RzIG9mIHRleHQuPGJy
PgorVGhpcyBjZWxsIGhhcyBsb3RzIG9mIHRleHQuPGJyPgorVGhpcyBjZWxsIGhhcyBsb3RzIG9m
IHRleHQuPGJyPgorVGhpcyBjZWxsIGhhcyBsb3RzIG9mIHRleHQuPGJyPgorVGhpcyBjZWxsIGhh
cyBsb3RzIG9mIHRleHQuPGJyPgorVGhpcyBjZWxsIGhhcyBsb3RzIG9mIHRleHQuPGJyPgorVGhp
cyBjZWxsIGhhcyBsb3RzIG9mIHRleHQuPGJyPgorVGhpcyBjZWxsIGhhcyBsb3RzIG9mIHRleHQu
PGJyPgorVGhpcyBjZWxsIGhhcyBsb3RzIG9mIHRleHQuPGJyPgorVGhpcyBjZWxsIGhhcyBsb3Rz
IG9mIHRleHQuPGJyPgorVGhpcyBjZWxsIGhhcyBsb3RzIG9mIHRleHQuPGJyPgorVGhpcyBjZWxs
IGhhcyBsb3RzIG9mIHRleHQuPGJyPgorVGhpcyBjZWxsIGhhcyBsb3RzIG9mIHRleHQuPGJyPgor
VGhpcyBjZWxsIGhhcyBsb3RzIG9mIHRleHQuPGJyPgorVGhpcyBjZWxsIGhhcyBsb3RzIG9mIHRl
eHQuPGJyPgorVGhpcyBjZWxsIGhhcyBsb3RzIG9mIHRleHQuPGJyPgorVGhpcyBjZWxsIGhhcyBs
b3RzIG9mIHRleHQuPGJyPgorVGhpcyBjZWxsIGhhcyBsb3RzIG9mIHRleHQuPGJyPgorVGhpcyBj
ZWxsIGhhcyBsb3RzIG9mIHRleHQuPGJyPgorVGhpcyBjZWxsIGhhcyBsb3RzIG9mIHRleHQuPGJy
PgorVGhpcyBjZWxsIGhhcyBsb3RzIG9mIHRleHQuPGJyPgorVGhpcyBjZWxsIGhhcyBsb3RzIG9m
IHRleHQuPGJyPgorVGhpcyBjZWxsIGhhcyBsb3RzIG9mIHRleHQuPGJyPgorVGhpcyBjZWxsIGhh
cyBsb3RzIG9mIHRleHQuPGJyPgorVGhpcyBjZWxsIGhhcyBsb3RzIG9mIHRleHQuPGJyPgorCisK
Kzx0ZD48c3BhbiBzdHlsZT0iZm9udC1zaXplOjY0cHgiPk90aGVyIGNlbGwuPC9zcGFuPjwvdGQ+
Cis8L3RyPgorPC90YWJsZT4KKzwvZGl2PgorCis8aHI+CisKKzxkaXYgc3R5bGU9Im1hcmdpbi10
b3A6MWVtOyAtd2Via2l0LWNvbHVtbi1jb3VudDoyOyBoZWlnaHQ6MzAwcHgiPgorPHRhYmxlIGJv
cmRlcj0xIGNlbGxwYWRkaW5nPTEwIGNlbGxzcGFjaW5nPTAiPgorPHRyIHN0eWxlPSJ2ZXJ0aWNh
bC1hbGlnbjpib3R0b20iPjx0ZD4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1Ro
aXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0
Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90
cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2Vs
bCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4K
K1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0
ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMg
bG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMg
Y2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxi
cj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBv
ZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBo
YXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1Ro
aXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0
Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90
cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2Vs
bCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4K
K1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0
ZXh0Ljxicj4KK1RoaXMgY2VsbCBoYXMgbG90cyBvZiB0ZXh0Ljxicj4KKworCis8dGQ+PHNwYW4g
c3R5bGU9ImZvbnQtc2l6ZTo2NHB4Ij5PdGhlciBjZWxsLjwvc3Bhbj48L3RkPgorPC90cj4KKzwv
dGFibGU+Cis8L2Rpdj4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvbXVsdGljb2wvdW5zcGxpdHRh
YmxlLWlubGluZS1ibG9jay5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvbXVs
dGljb2wvdW5zcGxpdHRhYmxlLWlubGluZS1ibG9jay5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvZmFzdC9tdWx0aWNvbC91bnNwbGl0dGFibGUtaW5saW5lLWJsb2NrLmh0bWwJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMTkgQEAKKzxkaXYgc3R5bGU9IndpZHRoOjc1MHB4OyAtd2Vi
a2l0LWNvbHVtbi1jb3VudDoyOyBib3JkZXI6NXB4IHNvbGlkIGJsYWNrOyBwYWRkaW5nOjVweDto
ZWlnaHQ6MzAwcHg7IC13ZWJraXQtY29sdW1uLXJ1bGU6IDJweCBzb2xpZCBncmV5Ij4KKzxkaXYg
c3R5bGU9ImhlaWdodDoyNTBweCI+PC9kaXY+Cis8ZGl2IHN0eWxlPSJkaXNwbGF5OmlubGluZS1i
bG9jazsgYm9yZGVyOjJweCBzb2xpZCBncmVlbiI+CitBbGwgb2YgdGhpcyB0ZXh0IHNob3VsZCBi
ZSBpbiB0aGUgc2Vjb25kIGNvbHVtbi48YnI+CitBbGwgb2YgdGhpcyB0ZXh0IHNob3VsZCBiZSBp
biB0aGUgc2Vjb25kIGNvbHVtbi48YnI+CitBbGwgb2YgdGhpcyB0ZXh0IHNob3VsZCBiZSBpbiB0
aGUgc2Vjb25kIGNvbHVtbi48YnI+CitBbGwgb2YgdGhpcyB0ZXh0IHNob3VsZCBiZSBpbiB0aGUg
c2Vjb25kIGNvbHVtbi48YnI+CitBbGwgb2YgdGhpcyB0ZXh0IHNob3VsZCBiZSBpbiB0aGUgc2Vj
b25kIGNvbHVtbi48YnI+CitBbGwgb2YgdGhpcyB0ZXh0IHNob3VsZCBiZSBpbiB0aGUgc2Vjb25k
IGNvbHVtbi48YnI+CitBbGwgb2YgdGhpcyB0ZXh0IHNob3VsZCBiZSBpbiB0aGUgc2Vjb25kIGNv
bHVtbi48YnI+CitBbGwgb2YgdGhpcyB0ZXh0IHNob3VsZCBiZSBpbiB0aGUgc2Vjb25kIGNvbHVt
bi48YnI+CitBbGwgb2YgdGhpcyB0ZXh0IHNob3VsZCBiZSBpbiB0aGUgc2Vjb25kIGNvbHVtbi48
YnI+CitBbGwgb2YgdGhpcyB0ZXh0IHNob3VsZCBiZSBpbiB0aGUgc2Vjb25kIGNvbHVtbi48YnI+
CitBbGwgb2YgdGhpcyB0ZXh0IHNob3VsZCBiZSBpbiB0aGUgc2Vjb25kIGNvbHVtbi48YnI+Cis8
L2Rpdj4KKworPC9kaXY+CisKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9tdWx0aWNvbC9jbGll
bnQtcmVjdHMtZXhwZWN0ZWQucG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFy
a2VkIGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBhcHBsaWNhdGlvbi9vY3RldC1z
dHJlYW0KCmlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUF5QUFBQUpZQ0FZQUFBQ2Fkb0p3QUFBQzdt
bERRMUJKUTBNZ1VISnZabWxzWlFBQWVBR0YKVk05ckUwRVUvalp1cWRBaUNGcHJEcko0a0NKSldh
dG9SZFEyL1JGaWF3emJIN1pGa0dRelNkWnVOdXZ1SnJXbGlPVGkwU3JlUmUyaApCLytBSG5yd1pD
OUtoVnBGS042cktHS2hGeTN4elc1TXRxWHF3TTUrODk0MzczMXZkdDhBRFhMU05QV0FCT1FOeDFL
aUVXbHNmRUpxCi9JZ0FqcUlKUVRRbFZkdnNUaVFHUVlOeitYdm4ySG9QZ1Z0V3czdjdkN0ozclpy
U3Rwb0hoUDFBNEVlYTJTcXc3eGR4Q2xrU0FvZzgKMzZFcHgzUUkzK1BZOHV5UE9VNTVlTUcxRHlz
OXhGa2lmRUExTGM1L1RiaFR6U1hUUUlOSU9KVDFjVkkrbk5lTGxOY2RCMmx1WnNiSQpFTDFQa0th
N3pPNnJZcUdjVHZZT2tMMmQ5SDVPczk0K3dpSENDeG10UDBhNGpaNzFqTlUvNG1IaHBPYkVoajBj
R0RYMCtHQVZ0eHFwCitEWENGRjhRVFNlaVZISFpMZzN4bUs3OVZ2SktnbkNRT01wa1lZQnpXa2hQ
MTB4dStMcUhCWDBtMXhPdjRuZFdVZUY1anhObjN0VGQKNzBYYUFxOHdEaDBNR2d5YURVaFFFRVVF
WVppd1VFQ0dQQm94TkxKeVB5T3JCaHVUZXpKMUpHcTdkR0pFc1VGN050dzl0MUdrM1R6KwpLQ0p4
bEVPMUNKTDhRZjRxcjhsUDVYbjV5MXl3MkZiM2xLMmJtcnJ5NER2RjVabTVHaDdYMDhqamMwMWVm
SlhVZHBOWFI1YXNlWHE4Cm11d2FQK3hYbHpIbWdqV1B4SE93Ky9FdFg1WE1seW1NRk1YalZmUHFT
NFIxV2pFMzM1OXNmenM5NGk3UExyWFdjNjJKaXpkV201ZG4KL1dwSSsrNnF2SlBtVmZsUFh2WHgv
R2ZOeEdQaUtURW1kb3JuSVltWHhTN3hrdGhMcXd2aVlHM0hDSjJWaGluU2JaSDZKTlZnWUpxOAo5
UzlkUDF0NHZVWi9EUFZSbEJuTTBsU0o5My9DS21RMG5ia09iL3FQMjhmOEYrVDNpdWVmS0FJdmJP
REltYnB0VTNIdkVLRmxwVzV6CnJnSVh2OUY5OExadWE2TitPUHdFV0R5ckZxMVNOWjhndkFFY2Rv
ZDZIdWdwbU5PV2xzMDVVb2NzbjVPNjZjcGlVc3hRMjBOU1V0Y2wKMTJWTEZyT1pWV0xwZHRpWjB4
MXVIS0U1UXZmRXAwcGxrL3F2OFJHdy9iQlMrZm1zVXRsK1RocldnWmY2YjhDOC9VWEFlSXVKQUFB
ZwpBRWxFUVZSNEFlemRCNVFrMTFuLy9WdFZYVDByYXkwNThiZUp0c0VreTJTUVREWmdNaHd5SXVl
TURobGVYcExKT1NPU3lYQUlJaG9UCi9vQUJtM0FNa2dIN3ZFaUFqVEVtR1d5RGNaQmxkMWU0Nys5
M2UyNTFiV3VtZTJwblpuZTE4NjJ6TlZWZFhWMWQ5ZW13ODh6ejNIdUwKcUNrd0lZQUFBZ2dnZ0FB
Q0NDQ0FBQUpIRkhqU2s1NFVtcVlKRDNyUWc4S3JYdldxdEY0VVJUaDM3bHlZeitlaHJ1dTB6T3RW
VllXdQo2OUsrc3lNK0I3c2hnQUFDQ0NDQUFBSUlJSUFBQWtsZ05wdUZoei84NGVHUmozeGtLTXN5
TEpmTGNQZmRkNGQ3N3JrbjNYYmdzYmUzCk53UWhPUUI1NVN0ZkdRaEFlQk1oZ0FBQ0NDQ0FBQUlJ
SUlEQUpBRUhGQTQ4UE9kZzQvejU4K0ZsTDN0WkNrU2NBZkY5RGxROGUzOW4KU0x3a0FKbEV6YzRJ
SUlBQUFnZ2dnQUFDQ0NEZ0FDTUhGUTRzUEh2eXRseCs1UXlJNXh5TXVBVEx0d2xBZVA4Z2dBQUND
Q0NBQUFJSQpJSURBWklIY2xOekx2dS9ESzE3eGl2RHlsNzg4WlR4OE84OCtjQTVRdkU0QVlnVW1C
QkJBQUFFRUVFQUFBUVFRT0xLQWc0NGNnQ3dXCmkvRENGNzR3QlNBT05KemxjQU4xdHd2eDVGSXNB
cEFqMDdJakFnZ2dnQUFDQ0NDQUFBSUliQXJrb01MQngvT2U5N3p3ckdjOUs3em8KUlM4S0wzM3BT
MU1iRVBlRzllQUhQemc4NmxHUENqZmRkRk40NkVNZm1zcXpITFNRQWRuVTVEWUNDQ0NBQUFJSUlJ
QUFBZ2hzRlhCNQpWZHUyNFpuUGZHYjR3NmM5TS96RnM4dnd2SHRlSi94My9iWmg3NW9RSGpwN2NY
aU4vLzdYOEZyUGVWcDQ5ck9mSFI3LytNZUhSei82CjBTbHJRZ0N5bFpZN0VVQUFBUVN1SklISDNM
UVlUdWVHRzFlcC9XSERNVmJ1dW1NK1BQck8yL2VHZFZZUU9Pc0N2LzdzL3p4MWdnOTkKNDljODll
ZTRWRS93YnUrMmZxYkhQVzY5ZnR5MXB6MXRmWVNuUG5XOWZqblhuTWx3MmRWdlArWFo0ZmYrOWtI
aG41clhEZVgxZGJqLwpkWHZoK3V2cVVKLzdQMkZ4N3MzQ2Y3emtiMFA3L0dlRzV2LyszMVNLOVlo
SFBJSU15T1Y4NFhodUJCQkFBQUVFRUVBQUFRVHVxd0xQCi9QLytOVHpsenV2Q1B5MWVLeFFQUGhm
dWYvMWVlT0QxODNEOStUcGNkODA4M0crdkRQV0RIeHRlL1I5MStKY1gvbmw0eGpPZWtRWXUKSkFO
eVgzM0ZPVzhFRUVBQUFRUVFRQUFCQkM2VGdCdVkvL1UvMXVFNUwzOUlLQjR5QzlkZHR3bzhyajgv
RHcrNjdseTQ3dHB6NFg3Mwoyd3ZuYW5YUis2QjNEUzk1eHIrRS8vaVAvMGd6QWNobGV0RjRXZ1FR
UUFDQjZRTGpzcXViYjdsNytnRU9lY1J0dDU0ZjNVTUoxZ2lEClZRUVFtQ0F3THJ0NndoTW1QUEEr
dU91clgvM3FjTmUvYUxUemEvZkNPejcyWWVFaEQ2akRpL1cxL01wbEVhNjU1cHB3emYydURkY3AK
R0xubTJ2dUZTdGUzZk4yM0R2ZjgyMitHbDd6a0phRzhEMTR2cDR3QUFnZ2dnQUFDQ0NDQUFBS1hV
Y0NOMFAvdFJiUHcyTGQ2U0hqYwptMTBmM3Z6aDU4TmJQK0xhTUorcC9jZXNDdWYyVklLbDRPTmEv
WDNuL3RlRjhKRFhmNXR3enozM3BPNTVDVUF1NHd2SFV5T0FBQUlJCklJQUFBZ2dnY0Y4VWNDUDBW
eTdyOEthUE9LKzJIbFdZbGNXd25Ea0ltYzgxSUdIUW1DQWhuTHMyaEFjODdFSHJjVUh1aXhmTU9T
T0EKQUFJSUlJQUFBZ2dnZ01EbEU2Z3FGMWIxNGY3M1UvQlJhS1J6M2FvVWNKUlZFY29paGtwcERv
MC9HQlNIaEptQ2tLb09xUXRlang5QwpCdVR5dlc0OE13SUlJSUFBQWdnZ2dBQUM5MTJCdUgvcUd2
M2NxdzVDRkdhRW9xdzA4cmtDRU0zZVhpdjRtQ2tReWFPaEU0QWtLSDRnCmdBQUNDQ0NBQUFJSUlJ
REFKSUd1YzFvamRHb1Brb0tQUHQwTVViZjFUL2tSM2RhUHJsMGQxUUVJR1pCSnd1eU1BQUlJSUlB
QUFnZ2cKZ0FBQ2c4QkRybFg1VmFFQVpKWHBhTHFZZ281ZVJWWmRtb05HUzlkOVNua29Ua2xUQ2tL
R0E3Q0NBQUlJSUlBQUFnZ2dnQUFDQ0V3UQo2QlY5dUtTcTZXTnE0OUVxS2RMb1I2dklRL0dJQWhF
RklmcXhIR1ZCR0Fka0FqQzdJb0FBQWdnZ2dBQUNDQ0NBd0ZvZ3VxVzVHbnVvCmlVZG8xUnE5VnR2
MG1ScWkxek9OZ3E2NkxIV0lGZFFqYitqUHJSOURHNUMxQldzSUlJQUFBZ2dnZ0FBQ0NDQXdSY0JC
aG1aMWZMWHEKK1VvcmN3VWh0UUlUQnlDS1AwS2wrK2FqcUdPME91V1pEdDczN3J2dkR2LzJiLzky
OEowVHQvcFlIcTc5c0dteFdJU25QLzNwaDkxOQpyTzI3bnZ0WUI5OS9jS2RHTy8vd0QvOXdFb2U2
cUdPYzVHdDEwQW5zZW4xTzgvci81My8rSi96alAvN2pRYWMxZWR1dVk1M21kV3llCjdLNXptZnFh
YnI1R3U0Ni9lVDVUbisrZ3gxK3V6L2ptdVZ4TnQzZTlycTk2MWF2Qzg1Ly8vRk81NUYzdmlhbnZz
Vk01eVV0ODBGMG0KbC9oMDB0T2Q5amx0dmdjM3IzSFg5NmJQYjl0M3crYnhycmJiTDNyUmk4SWYv
L0VmcDlHaWQxM2JydGZ5TEg3bXRwbmh0VTNuNHU4cgpsT2tvbEFFcEhZVm9xdWUxdXR5dDFDV3Z0
NjI2NG5VV3hOM3k1bW0wbWpkZHVQeUFEL2lBOE1BSFBqQzh6L3U4VC9qSWovekk0RDUvCkgvbklS
NFlQLy9BUEQrLzBUdStVYnYvc3ovNXMrSVZmK0lYdzBJYytOUHpjei8zY2hRZTRpRnMvK3FNL0do
Nzg0QWVIWC9tVlh6bncKMGJmZmZudDQyN2Q5Mi9DaEgvcWhCOTUvbkkyN252czR4ODZQZmNZem5o
SGU4aTNmTW56R1ozeEczblJKbHlmNVdoMTA0cnRlbjlPKwovcS81bXE4SkgvekJIM3pRcVUzZXR1
MVlwMzBkbXllNzdWeW12cVlIdlViYmpyOTVMbE9mYi9QeHV6NW5CNTNmNWpHNGZXK0JnOXpHCnIr
dHR0OTBXWHV1MVhpdDg5M2QvOTcwZmZNd3RSM2xQak0vbG1FOTNXUjkrT2Y1ZlBLa0xQc3JyZEp6
bk91ZzlPRDdlcnUvTlhkOE4KNDJOZGpldFBmT0lUd3kvOTBpK0ZQL21UUHdrMzNIQkRjREIzMkhT
VTEvSnErY3dkWmpCbE8xNVR0Q2J1Nit5SE90dDFsN3RsVVlaSwo2NTVMelJvUVBTZ2VDYXJJU25N
KzhzNEFwR21hOERkLzh6Zmg5Mzd2OThJdi8vSXZhekNSZVhqYzR4NFhmdlZYZnpYOCtaLy9lZmlP
CjcvaU84T3BYdnpwOHpNZDhUSGo0d3grZWozdXM1V2QrNW1lbW9PZXdnOXgwMDAzaGt6N3BrdzY3
KzFqYmR6MzNzUTYrLytDM2U3dTMKUzRhMU8wVytETk5KdmxZSG5mNnUxK2Uwci8vcnYvN3J3NU9l
OUtTRFRtM3l0bTNIT3UzcjJEelp6WFB4ZjB4UGZlcFQwMjVUWDlPRApYcVBONDI4Ky8vajJVWjV2
Zkg3angzcDkxK2Zzb1BQYlBBYTM3eTF3a052NGRiMzU1cHZUTHpYM2Z1VEZiUm0veGtkNVQ0elA1
ZUtlCjhjcDQxT1g0Zi9Ha3J2d29yOU54bnV1ZzkrRDRlTHUrTjNkOU40eVBkYld0di9LVnJ3eGY5
RVZmRkc2NTVaYndkVi8zZGVIWGZ1M1gKTklLMFJtOGJUV2YxTXpjaW1MU0sxeVN1aTk5WnZXQlZh
VjZOaHA2Q0RhVTdaaXJCOGxpRnpvczRFTkhRSU1PME13RHhoOEVaajhNbQpmMWs0U3Zma1g2anpB
Q09IN1gvVTdidU81VURvcEo1cjg1eDJQZmZtL2xOdTkrNFVXZE5NWTlPN0grVGpUakgzYWJialFK
djduZVkxCitsUU9lMzFPK3ZvUHVteG56OTd3RGQvd29Mc21ienZzV0pmaU9qWlBkbnd1L2dYbzR6
Lys0OE9mL2RtZkRidE5mVTAzWDZQeDhZZUQKYW1YenZaUHYyL1o4QjUxZmZseGVibnU4OTlrOHYv
eTRrMXdlZG0zSGZRNzMvSEZTMDlSejNIVGJmRjM5QzgxSmZIY2U5QnJ2ZWswMwp6eVViVGIzRy9M
akx0YnhjL3k5ZTdQVnUrdTU2blM3MmVmTGpOdCtEZWZ0UnZ6ZFArL3p5K1Z4cHk3LzkyNzhOeStW
eStOM2dIZDdoCkhTNDR4YlA4bWJzQTRvZzM4RG9pMUFuc0Z0WG1vMVRBNFF5SXk2d2NnRGo3NGRI
UVhaV1ZCaUgwY3ZScjcyajE0RE40Ny9kKzc0UHYKMk45NjdiWFhobmQ4eDNjYzl2RVhqRk4rci9k
NnJ4Y2U4NWpIaEgvKzUzOGU3bnZoQzErWW92dDNmZGQzRFcvek5tOFQvdkl2LzNLNAo3NkNWZSs2
NUozekpsM3hKS3UzeS9uLy85MzkvMEc3QlpRV3YvZHF2SFg3Z0IzNGczZS8wNVJ1LzhSdUh6L3Fz
enhyMlA4bm5kZzJoCi8wTHh4Vi84eGFuVTUvTSs3L09DNjZvOU9WdmtvT3lydnVxcndqZDkwemVG
MTNpTjF3aDMzSEZIOExWOHp1ZDhUdmpHYi96R2RGNS8KOVZkL05aeWJWdzQ3djhPTzUydis0Ui8r
NGZEdDMvN3RZZk5MYW56Z2JmdHRlNjIyWGVOUnZNZm40UFZkMTcrNXZ6Mi84aXUvTW56Ygp0MzFi
OEY5dHYvTTd2M1BZWmR1NS9lZC8vbWN5ZWZ1M2YvdTB2ek1FSC9WUkg1WGVSei94RXo4UjN1QU4z
aUM4eVp1OHlRWHZ5OE9lCmEvTllQdUN1Nnpqc2RSeE9mbi9sMTMvOTE5Tjc0ME0rNUVQQ1MxLzYw
dkRUUC8zVDZmWjd2dWQ3aHVjKzk3bHBMNWZKdlBNN3YzUEsKTUc2ZXkvZCs3L2VHSnovNXlTblQ4
NG1mK0luQmZ6bnp0TzAxVFRzYzhtUHorTjdOMStyMytUZDh3emVFOTNxdjkwcU9majNHUWM5aAp6
M2ZZK1cwK3ZaL2pjbnpHRC90Y09KdnI4L25XYi8zVzROZkduMlcvZnp3ZDVYMy9SMy8wUitrOTY5
Zk8zNHQzM25sbmV1eGhuK050Cjc1ZkR6akVkOElnL0RucGR4dzk5NWpPZkdmd1hhWCtYUGV0Wnow
cDNiVHVuOFdNUGU0MFBlMDhjZEM2SFhhUGZjejZ2SzNXNkZQOHYKWHN4N1p0UHJNRi92ZDlqcjVQ
dTJmY2NlNVhQZ1k0eW5YZCtiNDMzeityYnZocU8rUjQveS9iL3RXby95K0tPZWk2OXIyM1A5K0kv
LwplUGphci8zYTFHM3A1Mzd1NTZidm9XeVJsMmZ0TTdmTjY3RFBSN2J5OHF4NWphLzlrcS9yRCtw
S2dLUnNSNmtvWktaMGgzdkJtaW42CnFGVHM0MkNqY0NaRSt3eVQvakl5YVRwMzdseFUrZE9CajNu
ek4zL3orQlp2OFJieEQvL3dENk1hbzBmOW9oYy83ZE0rTGUycnZ3akcKOTMzZjk0MHZmL25Mb3hx
Z1JmM0hIdlhMZWZ6Zi8vM2ZBNC8xT3Evek9sR1psYWhmc3FJYVk4VkhQT0lSOGZWZi8vV2pJdHEw
Ly9kLwovL2ZIaHozc1ljTmpGWUJFL2NJLzNOWXZUUEVqUHVJajB1MlRmdTUzZVpkM2lXcjNrbzZ0
djFiRUcyKzhNYW9tT04zK2k3LzRpNmcyCk0xRnRQS0xLMU5KMVB1YzV6NG52Ly83dkh4VVlwWDE4
L2FyRGp2cGxjK2Y1SFhTOHYvdTd2NHRxQTVNZTZ4OWYrSVZmbUV5SERmc3IKdGpwc3YyMnZsUisr
N1JwOS96WnYzNy81K215N2Z1Ky9PYW5OVWZTMWUxS3dwcjRUUXZ6cnYvN3JkSHZidWFueFhsVGdH
Ui95a0llawpmZi9ydi80cnZ0RWJ2VkY2TC83V2IvMVdWT1BicU9BMGZ2cW5mM3E2M3o4T2U2N05Z
M25mYmRjeDlYMzIxbS85MXZGVFB1VlRmTmcwClBlNXhqNHVmL01tZm5HL0czL21kMzRrLzlWTS9s
VzRmZEM3K1RIenpOMy96c1ArdTEzVFljWDlsL0JvZGRId0Y5RkcvbUthOTlaZTUKOUJvb0FFbUcz
cmpyK1RiUGIvOXBoOFhsK294disxejRjL3lMdi9pTHd6bjZ0bjRSSG01dmU5OHIxWjgrRi82Kzhx
UmZKdUtIZmRpSApwZldEUHNmNmc4cWgzNG5iempFZGNNdVBYYS9ydTcvN3UwZjkwU1FkNFVkKzVF
Zml6L3pNend4SG0vb2UzbnlOdDcwbk50OWoyNjd4CkIzL3dCK01IZmRBSERlYzFYdm5JVzE0ZTgv
eHIvL0NDZUZKelBxYVhVNmZUK0g5eDZudG04NXkzK1c1N25YeWNiZCt4dm4vYjU4RDMKajkrRHZy
M3RlOVAzYjA3YnZodW12RWVQOHYyLzdWcDNQWDdLdWZnYXR6Mlg3MWVadTNvekxiMTY2SFE1UG5N
bjlSbmJkcHlETG5pYgoxMEdmRC8rdXRUbGREaTk5OWV2N2Z6VnZuczl4YnVkamVubWxUR3FySGNQ
Yi8xYjgwbDk4ZnZ5aHA3NHcvdUFmdlRCKzkxTmVIRy8rCnNmK010L3pLSytKWFBTWEc3L3FyR0g5
TUw4MHZ2ampHbjNwK2pCLzNjUjhYL2JpZEdaQWhVam5paWh2bnZjZDd2RWZRRjBoNHQzZDcKdDZH
bko3Y2ZFVmo2NjZuYms3em1hNzVtZVBHTFh4eis5RS8vOU5BamY4SW5mRUw0d0EvOHdIUWMvMFh5
ZWM5N1hsQndjK0QrMTF4egp6UVZsQmZlNzMvMkcyeWY1M0Q1M3QzM0pmeFYxcWxpL1JJYmYvdTNm
RHZwQWhNYys5ckhwTCt4ditxWnZHdlRMUjlCLzhNRzlVUHp1CjcvNXV5SDgxYytuVis3M2YrdzNY
c2UzOERqcWVzeXIrYTZXUDZVbS9UQ2ZiNFlEN0svN0wrcmI5RG51dGRsMmpENy9OZS9NOG5PbmEK
ZHYyYis3djNELzlsMXJYRW5wejlzcVBiR08wNk45dTgyWnU5MmVEaGpoR2M5ZkEyWDYrUG9WL0F3
ck9mL2V4MDdHM1B0WG1zWGRleAo3WFZNVDdieFE4RkcrUDNmLy8zMGwwamY5ZmpIUHo0b1NFcC9B
Zk50djljVlJIczFaVWZHMTVVMjZzZG1LYzFocjJuZS83RGw1clY2ClAzY280WklaVDg1bWVoOVA0
N1pldTU1djgvelNBVVkvTHNkbi9MRFBoVC9YZnAvcUR5WERHZnE5TTU2MnZlLzlYZUNPTWZSSG1Q
UVEKMitXczdVR2ZZNy9IRC90T1BPd2N4K2R5bFBXRFh0ZjhPSCttZkk1K0RmSTA5VDNzeDIyK3hv
ZTlKemJQWmRzMU9sdDhVdTI0OHJWZAp6dVZoSnR1OHA3NW5OcTl2bTYvM1BleWNkbjNIK3JIYlBn
ZStmenp0K3Q0Yzd6dGVQK3k3WVp2WitQRmUzL1g5dit0YWR6MSt5cm5zCmVxN05jOTkyK3l4ODVu
WjVIZlQ1T0t6MCtpeDRiWHUvWElyN1BPNUhUQ09oZTBUMHFOOWordERxejVaYVRhT2kreStZcmt4
dWx1dXoKT2ZFQVpQeEN1L2NzcDlBOCtaZHovMmZuMmxEUExrOTR5bE9la242NVhKL09oV3ZYWDMv
OXNNRnZOazhYMDczcVNUNjN5Nm44SDZsLwoyY2lUTWlCcDFiOVFlUEtYYy81bHpiZWY5clNucGFE
a0FROTRnRyttNmZ6NTg4Ti8zTHZPYi9ONCt1dCsra1hId1psVHRZcndVMjlrCitkaDV1V3UvdzE2
cm8xeGpmbzZqTEhkZC8rWXhISlM2ckd4OGZpNkY4ZnZuS09mbXg0MGZ1M243L3ZlL2Z5cHI4dk51
ZXk3ZlAzN3MKcnV2WTlUcjZlT1Bwb3ovNm8xTVFua3VhWEs3alVpcVg4YmdVeUNVU0xuSE0wL2hj
eHR2eXVwZmo2eDUvL3NiN0hMYStlWHc3K1pyeQpwSXpqRUJUbWJidWViM3gvZnN4NGVUays0NGQ5
THR6cmpNdnp4dWUwYVRJKzk4MTE3NnUvL0thU09wZXErWGl2ZU1Vcmh0MDJQOGZiCjNpK0huZU53
c0FrckIxMkRBeTJYaU9ZL2l1VERiVHVudk0vbWN2TTFIdC9lZkErT3orVWtyM0h6bks2MDI0ZVo3
UEtlOHA3WnZPWmQKdm9lZDAxRytZemVmYTl2dFhkK2JoejEyL0RrYy8vKy95Mnp6ZU9QM25POGJm
LzhmNVZxM1BYN0t1UnpsdVRiUC9iRGI0OWZPKzR4dgpYeTJmdWFONGJYNCt6ckxYWWRkK3liWnJ1
UE5Db1lhNzJIYlQ1TTRCU0JvSlhZRkhzeG9CUFRWWmRpU3lQMTJ5a2RELys3Ly9Pelc4CjlsOTVM
MmJ5WDEzOXhlRjU2blNTeisyK3lYMDhCMVlPSWp6NUw5TnVWSjdyOERmUDc5Ly8vZC9UWXphMzV5
K05pemsvZHlmbjdqUy8KNy91K0w3VTc4Vi9Tcjd2dXVzMm5TTjBqSDJXLzhRTmRlenYxR3NlUDMx
emZkZjJiKzd1bU50Zk9iOTUzMHVlMjdiazJuM3ZYZFV4OQpIUjFRK2ErUVAvL3pQeDhjbkxwcmFX
ZkgzSWJwWlM5NzJZbDFKYng1SFVlOXJkSysxTnVjRzBhNjRiS3ppbTYvZFZyVHBmeU1IL1Q1CmVj
RUxYbkNrZnZlM1hiKzdFSFVtNVNkLzhpZURhN3I5bitoaDA2NzN5MEhuZU5Cbi9MRGpiOXZ1dGtV
T2tMN2dDNzRndUcxVW5uYWQKVTk3dnBKYW5lWTBuZFk2bmVaeXAzbFAzdnhqZmsvNk8zZlc5ZVJU
ZjhYZkRWSU50eHovdXRVNDVsK00rMTdicm1ITGZ4YnducGh6LwpwUGJGNjZRa0w4MXhWdjJ1S0tl
aE5oNk9NWHAxeGRzNkU2S3NTS2ZiM3FhK2M4SmkxRC9MSlF0QUhxbWV0UHlmc3YreXEzclpKT0x5
CkEvOG5xTnIzZEh2YkQvOXk0TDhtdnRWYnZkV2h1L2t2eGdkTkovM2NqdkRjbDdsTHpEeXB0am1W
emJqczZxREpBWURMelZTZkdOUWUKNFY2N1REMC8xYVdtMG8zditaN3ZTZVVpTHZ2d0w2MmI0NG9j
ZGIvTkUvSmZnWTl5allkNWJ4NXYxL1Z2N3UvL2JKenArcWQvK3FkVQpQdVg3L1Y1eE9kbFJ6MjN6
bUlmZDN2WmNtKysxWGRjeDlYWDBPYWs5VlNxQmNWYlFmNUgyKzhwajdEakQ1bDltZDAwNWlOMjEz
OFhjCjd6SkJsL2M1RmE2YTc2SEwzeW5IbW5KK2wrb3pmdGpud21XaHZ1OWYvL1ZmVXljYXZrNi83
emFudzk3M2FwdVZPcHJ3ZFl3enBKdVAKejdlM3ZWLzhQdmR6Ny9xTTUyTk5YZm9QT1M2eFU0MTFL
Z2QxdWFpbmJlZDAyUGYwbE5kNGZKNkh2UTZiMzJQangzajlyanZtdzZiYgpibDM5RVdqWWNJeVY4
WEdQY1poSkQ1M3FQV1gvaS9VOTZuZnNZWitEVFlCZDM1dWIreDkwZS96ZDRQOGJqdk83eFBqNFI3
M1c4V1BHCjYxTmVqK00rMS9oNUwvVm5idnpjbDJyOXZ1eWxvcGRUbWNiSGZjSVRUdVVwTHZxZ01Y
WXF0MUlHeFA5bjlrWDZuYmhYQU9ML1FaMEIKYVJTRk5QNFZmZFFJZlZJSmxyOXczRVhjUzE3eWtn
TlAwaEdyNXp5NWQ2SGNPOVRIZnV6SHBwNmVYRXFqaHVmcGwzYjNDWDlZelo2UAo0VitDOCtSYWZR
OHVsK3VyZlI1cVpKZnZUbGtJRDREazdmNnk4aSt2Ym52aDZTU2Yyelg1YnQvaThyRTh1VWNyZjFn
OFdLTW5OVXdiCnJ0dTMzWXVUTXlTdXVjNlRSMEgzWDA5OGpidk9iL040dmk3M1JPTEp2Uk9wc2Vh
UWpjbkg5M0xiZnR0ZXE2TmNvN00raDNuN3VjZXYKejY3cjkvN2p5ZnM3U0hVYkNkZlFlLzZ5TC91
eThMcXYrN3FwVGNRdWYxK2IzM2Y1bDBlZnkvZy9TOStmMzF2Ym5zdm5ORDdXcnV2WQo5VHFPcnpH
dnU3MkJzd3NlNE5NbEIyNmY0cjl5KzVmaHpmOWt4dWZpeHp0cjRyOHVldkpueXZkN3p0UDQ4NWUz
alpmajE4amJONC92CmZ1Z2RNTHVYTjQ4ZDRIVDNlTnIxZkp2bk4zNXNYcyt2ZzI5ZnFzLzRZWitM
L1BuTm4xUDNIKy9zVDM0ZitSeTN2ZS85UHZYN3pJR0kKcjh0L1hQRWZYUHg0ejV1ZjQyM3ZsOFBP
MGVmZ1A4Ujg5VmQvZGNwOCt2Ym10T3QxOVhuNGZGem0rT1ZmL3VYaFV6LzFVNGUyZXR2TwphZk41
Zkh2ek5kNzFuaGkveDdaZG84c1NIWHhkenNtdnZ6cDVHRDVqaDUzTGFmNi9PT1U5czNsKzIzeTN2
VTZYKy9zL1g4ZGgzdzFUCjM2UGJ2ditQY3EzYkhqL2xYSTd5WE9xa0ozMkgrUFU1YkxxYVAzUGph
ejZLMStiblkvejR2SDQxZXgzMU95cGJuT2F5Y0taRDBVYU0KUlZoMHBkcUI2TFptdHdOSjYvcDEz
c0hJNk5mNjlCYysvViswZTFKSlRPclJTWStQK2tVcGZ0ZDNmVmRVbWNqd1FQZjQ1TjRiSHYzbwpS
MGUxaFlqcUlpMHFJeEQxaTNmcXljbzdxdHZZcUYrMm9uNnhTajFnL2Nadi9NYncrTTJWSnp6aENW
SC8yVWMxUG8vZjhpM2ZFai8vCjh6OC85YURsL2ZTTGIxVERaRjlML0tFZitxSG8zbWRVTng5VjBw
SjZ5dnJTTC8zUzFCT1NHc09uSHJUOG1KTjZiaC9MMSticjFDQ00KVWJYVVVRM1NvMzc1OEYxUjVU
UlJkZnRSdjBCR0JRbHBXOTZ1dnpvbUU0MG9IOVYrSStvWGdMUy83ei9zL0E0Nm5sOExOWTZOK2d0
NQovTTNmL00yb0JwdEQ3MkRERTJybHNQMk84bHB0dTBZL3h6YnZnMTRmWDhlMjZ4K2Z0OWY5M2xB
N212UWFLMHNSVmRZeTdMTHQzUHpjCjZvSTNQVTYvd0tRZTJmUUZsSG9kVTcxdVZCWWxQdXBSajBy
dnd6LzRnejlJeHp6c3VUYVA1ZmZacnVzNDdIVWNUdjZBRlhYN0d0WDEKN25DUGZybTg0TGJ2T09o
Y3Z1SXJ2aUo5bHR5VGxzcG9kbjcraGlmWVA5NzRNMlRmc1p1dlZlVTV5ZEdmTXdWSVVRMHkwM3ZO
OXgzbApQVFErUDVXNmpaOCtyVit1ei9oaG53dWZsTHAvVFk3NnEyM3FxVVAvQ1Y3UUM5YTI5NzFL
TUZQdmR5ck5UTDJadVJjemxhMmw0N2luCnFZTytGdzU3djJ3N1IzKy8rcnQyM0R0WHh0Mzg3RzIr
cmlxL2lENC9mMzg4L2VsUGovcERUVHBIZjEvZGV1dXQ2VENIblZOK2p2RnkKL0JydmVnOXV2b2Q5
SFlkOWo3bVhMdmR5cUY4d3hrK1gxbSs0OGRVeHorT2VxNDY3bm8vcHBTZjNOdWovcThhOWhLVTdS
ai84T3JsSAp4OVA0Zi9HZzczNC85VkZmbjhQZVEwZjU3Rzc3anZVNWJQc2NiTDRIai9LOTZXT09w
MjNmRGQ3dnFBYjZJMERjOWYyLzdWcVA4dmlqCm5vdlBlOXR6cWJGK1ZHbGtlaS81L3dSL05nK2FM
c2RuYmx2dlZTZDEzMEhYdXMzcnNNL0g1bkV1aDVjNnRJeDVIdmRjZGR6MWZFd3YKUFIzbE8ycTE1
K245ekwxZ2ZkbFBQamQrNysrL0lIN3JiNzhnZnUxdnZpQysrN2YvYy95SUgzdHgvT3hmYStKWFBE
WEdiMUZQV0QrZwpuckMrVFoyWjVsNndDcCtXdmp3djJlUy9KcWlMM3RTVGpyTUN1eWFua2QyWTdp
ajcrdGorcTRuL1V1dnN5R1laeEVrK3Q5azhYb05yCjlqZDd5am5zbW54dS9rdTFyMmRjaXBiM1Ar
cjUrUzl1Zmw3M2N1SnJIRGRVenNmeThxajdqUjh6WHQ5MWpidTh4OGZ5K3E3cjM5emYKeisveU52
ZEVzam50T3JmTi9YZmQzdlpjbTQvZGRSMUhmUjN6Y2ZVZjlBV2ozVzdlenZzZHRIUVd6ZStuMDVn
VStLZHlNTDlYL1ZkMwp2OS9jNjR1K1BGS1BYVWQ1enFPYzM2WCtqTy82WFBpdmtQNTh1WTNYWjMv
Mlo2ZE1nMzZwR2k1MzEvdmVtYWVjTFRyb2UyZzQwUDdLClFlK1hYZWZvTmtMdTQxNi9xRzBlN2tS
dUgzUk9oeDM0S0sveFFZL2RkbzMrUFBwOWx4MFBldnlsMk9iUzJYR0hJcWYxbkZPOGZRNUgKMlgr
YjcxR3VZOWQzck05aDIvKzNtOCt4NjN0emMzL2YzdmJkY0JTRGc0NTUwTFpkMTNyUVk4YmJwcHpM
Y1ovTHozczFmK2JHcmw3SAphMVBrd3R1WDZqdnF3bWRkMzlJZk5NSkhmUGU1OFA5KytwdUdCejdz
R3BWaEZlSHVSUWgvOXR4bGVNZ0Ryd3NQZk9EMXlwU1g0VHBWCnkxNnJmcGdXNnBmcTc3NzM0MVBs
emlVUFFOYW56Um9DQ0Z5cEFrOTg0aE5Uc0xIWjdiVTdPM0RBclN6U2xYcnFKM3BlQndVZ0ovb0UK
RjNrdzE4Qzc5ejEzajh5RUFBSUlJSURBNVJESUFjai84eWx2SEY3anRhOE5yMUtwMWF2VjFlN1Ru
dE9FQnovZzJ2QWdCeUVQbm9mcgoxSC9VL1RTL1NoMURQdmZXVlFDeU93VnhPYTZJNTBRQWdjc3E0
SkhrM2ZiRGRiZ2VoOFYvMVhlUFllNjE2NndFSDM0QjNBYkVXVXYvCkZXNnpUYzdsZklFOFNydTcy
MlJDQUFFRUVFRGdjZ3VvTGxqRG5SZkJYWVMwR3YzYzQ0SjRKUFI2Vm9aYURjOW5HcmxpVDNmMnF6
Nm8KMHVrU2dGenVWNDNuUitBS0ZIQmphd2NjSGlmRlpSRHU4ZTBzQlI1K1NWUmpQQXhLK09RblB6
bWxqSytVbDRyZzQwcDVKVGdQQkJCQQpBQUgzYnFXNEl3MDhXS1ZZSklhNWdwQmFnWWtERUkrY1Y2
bkJ4M3pVOVJVQkNPOGJCQkE0VU1DOWNubXd5N002dVljYkpnUVFRQUFCCkJCRFlMbEFvMDFFb0Ex
STZxbEFKVmoydlE2VTBTS1dveE51Y0lIRVdwRHZOa2RDM255TDNJb0FBQWdnZ2dBQUNDQ0NBd0ZV
am9DeEgKb1k1MkZZTm9Ma09sZGMrbDVwa3lJWXBIZ2lxeTBweXZtUXhJbG1DSkFBSUlJSUFBQWdn
Z2dBQUMwd1NLUXNHRlE1QXFLQm15Q2paVQppelZUNmtQRG5LWHhCeDJJTkpyek5Lckd5cHRZSW9B
QUFnZ2dnQUFDQ0NDQUFBSzdCV0toYkljQ0RtZEEzQWJFMlE1blAwcHRkOXNRCmpSaXhXbzZpanRI
cTdpZGdEd1FRUUFBQkJCQkFBQUVFRUVCZ0VGQ21Rd21RbE8wb0ZZWE1sTzV3TDFnelJSK1ZnZzhI
RzRVeklkb24KVHdRZ1dZSWxBZ2dnZ0FBQ0NDQ0FBQUlJVEJMd2lPYTlma1Q5U0lHSUFvOWF0VmVw
Unl4dGQwYkVZNCs3SVhxZUNFQ3lCRXNFRUVBQQpBUVFRUUFBQkJCQ1lKT0J4UDJLdldhMDlPZ1Vo
YmR1SFZvR0hneEp0MW5hTkQ5S3FEUWk5WUUxeVpXY0VFRUFBQVFRUVFBQUJCQkE0ClNLQno2TkdI
cnVzMGNLKzYyM1VBMG5ZcDZHZ2I5Y3lyNE1QYlV5U3kvM2g2d1RvSWttMElJSUFBQWdnZ2dBQUND
Q0N3VThEWmpkVFMKUTZWV2pqTjZkY1hiT2hPaTlFZW4yOTdXS0JCWnBQMTBReE1CeU1xQm53Z2dn
QUFDQ0NDQUFBSUlJREJSSUhMVjRHZ0FBQ0FBU1VSQgpWTVpPNVZiS2dEak4wUmZLZkxTaFZ3RGl3
TU1aa0VaUlNPTmFMQnFoVDVSbGR3UVFRQUFCQkJCQUFBRUVFTGlYUU9GTWg2S05HSXV3CjZFcTFB
OUZ0elc0SGt0WVZnRGdZVVlYV01ORUlmYUJnQlFFRUVFQUFBUVFRUUFBQkJDWUpLTmh3RDFoTkU1
WDU2RUtqMnF1bDBoNnQKR244NE1IR0psak1oQ3hxaFQySmxad1FRUUFBQkJCQkFBQUVFRURoQXdB
T2NMeDFwcU1SS2JjL1Y3c05OMHF2UXhGTGJWWDZsQUdTNQpueVhKRHljRGtpVllJb0FBQWdnZ2dB
QUNDQ0NBd0NTQlhuVldEaWdhdC90UU94QUhJVTNxQld1VkFYSGxsYmU1TjZ3ODBRZzlTN0JFCkFB
RUVFRUFBQVFRUVFBQ0JTUUpSSTZFSGpZQSsxNlBhTkFpaGVyblM2SVAxckF5MUJ5SFVBSVI3dXJN
L3R6NHNHWkMxQldzSUlJQUEKQWdnZ2dBQUNDQ0F3UmNCQmh1WkNWVmhwOUhPdHpGV1hWU3N3Y1FE
aUFkQXIzVGNmUlIwN015Q0Z4MVJuUXVBUUFhZmFtQkJBQUFFRQpFRUFBQVFUT3BrQ2hURWVoREVq
cHFFSU56ZXQ1SFNvTmoxNHBLdkUySjBpY0JlbG9oSDQyM3lCY05RSUlJSUFBQWdnZ2dBQUNKeXJn
CjdJYzYybFVNb3JsVTgvT1k1bExMbVRJaGlrZUNLckxTbko5M1p3WWs3OGdTQVFRUVFBQUJCQkJB
QUFFRUVMaEFRTlZTbFdhSEhVcUcKcklJTjFXTE5sUHFvRklDNGxzcUJTS001VDVNQ0VNcHRNdHZa
WGxLV2Q3WmZmNjRlQVFRUVFBQUJCQkRJQWxGdFBrb0ZIS1Y2dW5JYgpFR2M3blAwb3RYMm13S1JX
QnNSdFJPcFJHNURSYWo0TVN3UVFRQUFCQkJCQUFBRUVFRURnQ0FMS2RMakp1TE1kcGVxd1prcDN1
QmVzCm1hS09Tc0dIZzQzQ21SQ25RdlluQXBBc3dSSUJCQkJBQUFFRUVFQUFBUVFtQ2JnN0lnMEJr
a1pEVDRHSUFvOWEwVWpxRVV2Ym5SR1oKcWViS0RkSHpSQUNTSlZnaWdBQUNDQ0NBQUFJSUlJREFK
QUYxZUtYZ1E3TmFlM1NLUk5xMkQ2MENEd2NsMnF6dEdoOUVneEEyOUlJMQp5WldkRVVBQUFRUVFR
QUFCQkJCQTRDQ0J6cUZISDdxdTAwam82bTdYQVVnYUNWMkJSN01hQVQyTjJ1QklaSCthMUFnOVA0
Z2xBZ2dnCmdBQUNDQ0NBQUFJSUlPRHNSbXJwb1ZJcnh4aTl1dUp0blFsUitrUHQwdE8yUm9ISUl1
M25mVldPdFZyd0V3RUVFRUFBQVFRUVFBQUIKQkJDWUpoQmpwM0lyWlVDYzV1Z0xaVC9hMENzQWNU
RGlERWlqS0tSeExSYU4wS2ZCc2pjQ0NDQ0FBQUlJSUlBQUFnamNXNkJ3cGtQUgpSb3hGV0hTbDJv
SG90bWEzQTBuckNrQWNqS2hDYTVob2hENVFzSUlBQWdnZ2dBQUNDQ0NBQUFLVEJCUnNSR1U4bWlZ
cTg5R0ZSclZYClM2VTkybVdiQWhPWGFEa1RzcUFSK2lSV2RrWUFBUVFRUUFBQkJCQkFBSUVEQkR6
QStkSXBFSlZZcWUyNTJuMjRTWG9WbWxocXU4cXYKRklBczk3TWsrZUcwQWNrU3gxZys1cWJGOE9n
YmJoeUZkOFBXaTF1NTY0NzU4TUE3Yjk4YjFsbEJBQUVFRUVBQUFRUVFRT0JLRU9oVgpaK1dTcW9Y
YmZTZ09jUkRTcEY2d25BR1pwNGJvM3FhRXlEQVJnQXdVckNDQUFBSUlJSUFBQWdnZ2dNQVVnYWlS
MElOR1FQZWZ6ZHMwCkNLRjZ1ZExvZy9Xc0RMVUhJZFFBaEh1NnN6KzNQaXB0UU5ZV3JDR0FBQUlJ
SUlBQUFnZ2dnTUFVQVFjWm1ndGxQOUxvNTFxWnF5NnIKVm1EaUFNUURvRmU2Yno2S09zaUFUQUUr
Wk45eDJkWE50OXg5eUY3VE45OTI2L25SZ3lqQkdtR3dpZ0FDQ0NDQUFBSUlJSEFGQ0JUSwpkQlRL
Z0pTT0t0UVNvWjdYb2RMdzZKV2lFbTl6Z3NSWmtHN1VTbUVVaTF3QlY4QXBJSUFBQWdnZ2dBQUND
Q0NBd0gxSHdOa1BkYlNyCkdFUnpxZWJuTWMybGxqTmxRaFNQQkZWa3BUbGZGQm1RTE1FU0FRUVFR
QUFCQkJCQUFBRUVwZ2tVaFlJTGh5QlZVREprRld5b0ZtdW0KMUVlbEFFU3hSd3BFR25lWHRUK1JB
Y2tTTEJGQUFBRUVFRUFBQVFRUVFHQ1NRRlNiajFJQmh6TWdiZ1BpYkllekg2VzJ1MjFJclF4SQpX
bzZpanRIcXBPZGlad1FRUUFBQkJCQkFBQUVFRURqckFzcDBLQUdTc2gybG9wQ1o2cTdjQzlaTVVV
ZWw0TVBCUnVGTWlQYkpFd0ZJCmxtQ0pBQUlJSUlBQUFnZ2dnQUFDa3dUVXdWWFFFQ0JwTlBRVWlD
andxRlY3bFhyRWNzOVlDanhtYXZUaGh1aDVJZ0RKRWl3UlFBQUIKQkJCQUFBRUVFRUJna29BNnZG
THdvVm10UFRwRkltM2JoMWFCaDRNU2JkWjJqUStpUVFnYmVzR2E1TXJPQ0NDQUFBSUlJSUFBQWdn
ZwpjSkJBNTlDakQxM1hwWkhRT3djZ2FTUjBCUjdOYWdSMGo1Q2VJcEg5eDlNTDFrR1FiRU1BQVFR
UVFBQUJCQkJBQUlHZEFzNXVwSlllCktyVnluTkdySzk3V21SQ2xQenJkOXJaR2djZ2k3YWNibWdo
QVZnNzhSQUFCQkJCQUFBRUVFRUFBZ1lrQ01YWXF0MUlHeEdtT3ZsRDIKb3cyOUFoQUhIczZBTklw
Q0d0ZGkwUWg5b2l5N0k0QUFBZ2dnZ0FBQ0NDQ0F3TDBFQ21jNkZHM0VXSVJGVjZvZGlHNXJkanVR
dEs0QQp4TUdJS3JTR2lVYm9Bd1VyQ0NDQUFBSUlJSUFBQWdnZ01FbEF3VVpVeHFOcG9qSWZYV2hV
ZTdWVTJxTmR0aWt3Y1ltV015RUxHcUZQClltVm5CQkJBQUFFRUVFQUFBUVFRT0VEQUE1d3ZuUUpS
aVpYYW5xdmRoNXVrVjZHSnBiYXIvRW9CeUhJL1M1SWZUZ1lrUzdCRUFBRUUKRUVBQUFRUVFRQUNC
U1FLOTZxd2NVRFJ1OTZGMklBNUNtdFFMMWlvRDRzb3JiMU5DWkpob2hENVFzSUlBQWdnZ2dBQUND
Q0NBQUFKVApCS0pHUWc4YUFYMnVCN1ZwRUVMMWNxWFJCK3RaR1dvUFFxZ0JDUGQwWjM5dWZWUXlJ
R3NMMWhCQUFBRUVFRUFBQVFRUVFHQ0tnSU1NCnpZV3FzTkxvNTFxWnF5NnJWbURpQU1RRG9GZTZi
ejZLT2thclU1NkpmUkZBQUFFRUVFQUFBUVFRUU9Dc0N4VEtkQlRLZ0pTT1FqVFYKOHpwVUdoNjkw
dTFTdFZaT2tEZ0w0dUFrVDZQVnZJa2xBZ2dnZ0FBQ0NDQ0FBQUlJSUhBRUFXYy8xTkd1WWhETnBa
cWZ4elNYV3M2VQpDVkU4RWxTUmxlWjhOTnFBWkFtV0NDQ0FBQUlJSUlBQUFnZ2dNRTJnS0JSY09B
U3BncElocTJCRDZZNlpVaCtWQWhEblJSeUlOSnJ6ClJBQ1NKWTZ4dk9zT043dFpUYmZkZWo2dkhu
czVQdTZ4RDhZQkVFQUFBUVFRUUFBQkJCQTRZWUdvTmgrbEFvNVNQVjI1ek1yWkRtYy8KU20yZktU
Q3BsUUZ4ZFZZOXFyc2FyWjd3MlhBNEJCQkFBQUVFRUVBQUFRUVF1TG9GbE9sUW5KR3lIYVhxc0da
S2Q3Z1hySm1pamtyQgpoNE9Od3BrUXAwTDJKd0tRTE1FU0FRUVFRQUFCQkJCQUFBRUVKZ21vZzZ1
Z0lVRFNhT2dwRUZIZ1VhdjJ5dG1RMGoxaktmQ1lxZWJLCkRkSHpkQ29sV0krNWFaR1BIMjY0Y1RU
dStyRDE0bGJHSlVsMzNyNTNjUWZoVVFnZ2dBQUNDQ0NBQUFJSUlIQWlBdXJ3U3NHSFpyWDIKNkJT
SnRHMGZXZ1VlRGtxMFdkczFQb2dHSVd4R0lRRVprQk9oNXlBSUlJQUFBZ2dnZ0FBQ0NKeEJnYzZo
UngrNnJ0Tkk2Q0YwRGtEUwpTT2dLUEpyVkNPamVuaUtSZlo1VHlZQ2NRWG91R1FFRUVFQUFBUVFR
UUFDQk15Zmc3RVpxNmFGU0s4Y1p2YnJpYlowSlVmcEQ3ZExUCnRrYUJ5Q0x0NTMxVmpyVmFuT3pQ
Y2RuVnpiZmNmV0lIdjdDSHFTdW5CT3VzWGUrSnZhQWNDQUVFRUVBQUFRUVFRT0ErTFJCanAzSXIK
WlVDYzV1Z0xaVC9hMENzQWNURGlERWlqS0tSeExSYU4wTy9UcnpNbmp3QUNDQ0NBQUFJSUlJREFG
U0ZRT05PaGFDUEdJaXk2VXUxQQpkRnV6MjRHa2RRVWdEa1pVb1RWTXRBRVpLRmhCQUFFRUVFQUFB
UVFRUUFDQlNRSUtOcUl5SGswVGxmbm9RcVBhcTZYU0h1MnlUWUdKClM3U2NDVm5RQ0gwU0t6c2pn
QUFDQ0NDQUFBSUlJSURBQVFJZTRIenBGSWhLck5UMlhPMCszQ1M5Q2swc3RWM2xWd3BBbHZ0Wmt2
eHcKTWlCWmdpVUNDQ0NBQUFJSUlJQUFBZ2hNRXVoVlorV0Fvbkc3RDdVRGNSRFNwRjZ3VmhrUVYx
NTVteElpdzNRcWpkQ0hvN09DQUFJSQpJSUFBQWdnZ2dBQUNWNjFBMUVqb1FTT2d6M1dGYlJxRVVM
MWNhZlRCZWxhRzJvTVFhZ0RDUGQzWm4xc1RrQUZaVzdDR0FBSUlJSUFBCkFnZ2dnQUFDVXdRY1pH
Z3VWSVdWUmovWHlseDFXYlVDRXdjZ0hnQzkwbjN6VWRReFdwM3lUT3lMQUFJSUlJQUFBZ2dnZ0FB
Q1oxMmcKVUthalVBYWtkQlNpcVo3WG9kTHc2SlZ1bDZxMWNvTEVXUkFISjNrYXJlWk5MQkZBQUFF
RUVFQUFBUVFRUUFDQkl3ZzQrNkdPZGhXRAphQzdWL0R5bXVkUnlwa3lJNHBHZ2lxdzA1NlBSQmlS
THNFUUFBUVFRUUFBQkJCQkFBSUZwQWtXaDRNSWhTQldVREZrRkcwcDN6SlQ2CnFCU0FPQy9pUUtU
Um5DY3lJRm1DSlFJSUlJQUFBZ2dnZ0FBQ0NFd1NpR3J6VVNyZ2NBYkVaVmJPZGpqN1VXcTdxN0px
WlVEU2NoUjEKakZZblBSYzdJNEFBQWdnZ2dBQUNDQ0NBd0ZrWFVLWkRDWkNVN1NnVmhjeVU3bkF2
V0RORkhaV0NEd2NiaFRNaDJpZFBCQ0JaZ2lVQwpDQ0NBQUFJSUlJQUFBZ2hNRWxBSFYwRkRnS1RS
MEZNZ29zQ2pWdTJWc3lHbGU4WlM0REZUb3c4M1JNOFRBVWlXWUlrQUFnZ2dnQUFDCkNDQ0FBQUtU
Qk5UaGxZSVB6V3J0MFNrU2Fkcyt0QW84SEpSb3M3WnJmQkFOUXRnczE0Y2xBRmxic0lZQUFnZ2dn
QUFDQ0NDQUFBSlQKQkRxSEhuM291azRqb1lmUU9RQkpJNkVyOEdoV0k2QjdlNHBFOW85TEwxaFRn
TmtYQVFRUVFBQUJCQkJBQUFFRUJnRm5OMUpMRDVWYQpPYzdvMVJWdjYweUkwaCtkYm50Ym8wQmtr
ZmJURFUwRUlDc0hmaUtBQUFJSUlJQUFBZ2dnZ01CRWdSZzdsVnNwQStJMFIxOG8rOUdHClhnR0lB
dzluUUJwRklZMXJzV2lFUGxHVzNSRkFBQUVFRUVBQUFRUVFRT0JlQW9VekhZbzJZaXpDb2l2VkRr
UzNOYnNkU0ZwWEFPSmcKUkJWYXcwUWJrSUdDRlFRUVFBQUJCQkJBQUFFRUVKZ2tvR0FqS3VQUk5G
R1pqeTQwcXIxYUt1M1JMdHNVbUxoRXk1bVF4YWdSK3FtVQpZTjExeDN3NDc5dHVQVCtzSDNkbGZO
empIdXNrSHo4K3I3Tnd2U2RweDdFUVFBQUJCQkJBQUFFRTdyc0NIdUI4NlJTSSt1QlYyM08xCisz
Q1Q5Q28wc2RSMmxWOHBBRm51WjBueVZaSUJ5UklzRVVBQUFRUVFRQUFCQkJCQVlKSkFyem9yQnhT
TjIzMm9IWWlEa0NiMWdyWEsKZ0xqeXl0dVVFQm1tVThtQURFZG5CUUVFRUVBQUFRUVFRQUFCQks1
YWdhaVIwSU5HUUhmOVU1c0dJVlF2VnhwOXNKNlZvZllnaEJxQQpjRTkzOXVmV0JLY1NnTng1Kzk3
NkdjSjRmYlQ1S2xvOWE5ZDdGYjEwWEFvQ0NDQ0FBQUlJSUlEQWNRUWNaR2hXQW1RMStua1J3MXgx
CldiVUNFd2NnSGdDOTBuM3pVZDNWYVBVNHo4eGpFVUFBQVFRUVFBQUJCQkJBNEt3SkZNcDBGTXFB
bEk1Q05OWHpPbFFhSHIzUzdWS3AKRGlkSW5BV3BSbEhIYVBXc2NYRzlDQ0NBQUFJSUlJQUFBZ2dn
Y0N3QnhSMkZPdHBWREtLNVZQUHptT1pTeTVreUlZcEhnaXF5MHB5Zgo1MVJLc1BMQldTS0FBQUlJ
SUlBQUFnZ2dnTUJWTEtEZXJ5ck5EanVVREZrRkcwcDN6SlQ2cUJTQU9DL2lRS1RSbkNjeUlGbUNK
UUlJCklJQUFBZ2dnZ0FBQ0NFd1NpR3J6VVNyZ2NBYkVaVmJPZGpqN1VXcTdxN0pxWlVEU2NoUjFq
RlluUFJjN0k0QUFBZ2dnZ0FBQ0NDQ0EKd0ZrWFVLWkRDWkNVN1NnVmhjeVU3bkF2V0RORkhaV0NE
d2NiaFRNaDJpZFBCQ0JaZ2lVQ0NDQ0FBQUlJSUlBQUFnaE1FbEFIVjZrSApMSStHbmdJUkJSNjFh
cStjRFNuZE01WUNqNWthZmJnaGVwNElRTElFU3dRUVFBQUJCQkJBQUFFRUVKZ2tvQTZ2UXRSSTV3
by9RcWNnCnBHMzcwQ3J3Y0xlODJxenRHaDlFZ3hBMnkvVmhDVURXRnF3aGdBQUNDQ0NBQUFJSUlJ
REFGSUhPb1VjZnVxN1RTT2doZEE1QTBram8KQ2p5YTFRam8zcDRpa2YzajBndldGR0QyUlFBQkJC
QkFBQUVFRUVBQWdVSEEyWTNVMGtPbFZvNHplblhGMnpvVG92UkhwOXZlMWlnUQpXYVQ5ZEVQVHBB
Q2tHTGNlV1QyZW53Z2dnQUFDQ0NDQUFBSUlJSEJHQldMc1ZHNmxESWpUSEgyaDdFY2JlZ1VnRGp5
Y0FXa1VoVFN1CnhhSVIraGw5aDNEWkNDQ0FBQUlJSUlBQUFnaWNvRURoVEllaWpSaUxzT2hLdFFQ
UmJjMXVCNUxXRllBNEdGR0YxakRSQm1TZ1lBVUIKQkJCQUFBRUVFRUFBQVFRbUNTalljQTlZVFJP
VitlaENvOXFycGRJZTdiSk5nWWxMdEp3SldZd2FvZThzd1lxcDFjaWswMkJuQkJCQQpBQUVFRUVB
QUFRUVFPQU1DSHVCODZSU0ltbXFvN2JuYWZiaEplaFdhV0dxN3lxOFVnQ3ozc3lTWmd3eElsbUNK
QUFJSUlJQUFBZ2dnCmdBQUNrd1I2MVZrNW9HamM3a09KQ3djaFRlb0ZhNVVCY2VXVnR5a2hNa3c3
TXlERG5xd2dnQUFDQ0NDQUFBSUlJSUFBQWlPQnFKSFEKZzBaQW4ydGJtd1loVkM5WEduMnducFdo
OWlDRUdvQndUM2YyNTlZUElnT3l0bUFOQVFRUVFBQUJCQkJBQUFFRXBnZzR5TkJjcUFvcgpqWDZ1
bGJucXNtb0ZKZzVBUEFCNnBmdm1vNmhqdERybG1kZ1hBUVFRUUFBQkJCQkFBQUVFenJwQW9VeEhv
UXhJNlNoRVV6MnZRNlhoCjBTdmRMbFZyNVFTSnN5QU9UdkkwV3MyYldDS0FBQUlJSUlBQUFnZ2dn
QUFDUnhCdzlrTWQ3U29HMFZ5cStYbE1jNm5sVEprUXhTTkIKRlZscHprZWpEVWlXWUlrQUFnZ2dn
QUFDQ0NDQUFBTFRCTlQ3VmFYWllZZVNJYXRnUSttT21WSWZsUUlRNTBVY2lEU2E4MFFHSkV1dwpS
QUFCQkJCQUFBRUVFRUFBZ1VrQ1VXMCtTZ1Vjem9DNHpNclpEbWMvU20xM1ZWYXRERWhhanFLTzBl
cWs1MkpuQkJCQUFBRUVFRUFBCkFRUVFPT3NDeW5Rb0FaS3lIYVdpa0puU0hlNEZhNmFvbzFMdzRX
Q2pjQ1pFKytTSkFDUkxzRVFBQVFRUVFBQUJCQkJBQUlGSkF1cmcKS21nSWtEUWFlZ3BFRkhqVXFy
MXlOcVIwejFnS1BHWnE5T0dHNkhuYTJRYWtHSWNyK1ZFc0VkZ1g4SUF6VEFnZ2dBQUNDQ0NBQUFK
bgpVMEFkWGluNDBLeldIcDBpa2JidFE2dGZEeDJVYUxPMmEzd1FEVUxZTE5jK1pFRFdGcXdoZ0FB
Q0NDQ0FBQUlJSUlEQUZJSE9vVWNmCnVxN1RTT2doZEE1QTBram9DanlhMVFqbzZlL1Zqa1QycDUw
WmtMd2pTd1FRUUFBQkJCQkFBQUVFRUVCZ0xPRHNSbXJwb1ZJcnh4aTkKdXVKdG5RbFIrcVBUYlc5
ckZJZ3MwbjY2b1dsU0FFSzV6UXJ0clAra0xPK3N2d080ZmdRUVFBQUJCQkJBWUNVUVk2ZHlLMlZB
bk9ibwpDMlUvMnRBckFISGc0UXhJb3lpa2NTMFdqZEI1eXlDQUFBSUlJSUFBQWdnZ2dNQnhCUXBu
T2hSdHhGaUVSVmVxSFlodWEzWTdrTFN1CkFNVEJpQ3EwaG9rMklBTUZLd2dnZ0FBQ0NDQ0FBQUlJ
SURCSlFNRkdWTWFqYWFJeUgxMW9WSHUxVk5xalhiWXBNSEdKbGpNaEN4cWgKVDJKbFp3UVFRQUFC
QkJCQUFBRUVFRGhBd0FPY0w1MENVWW1WMnA2cjNZZWJwRmVoaWFXMnEveEtBY2h5UDB1U0gwNEdK
RXV3UkFBQgpCQkJBQUFFRUVFQUFnVWtDdmVxc0hGQTBidmVoZGlBT1FwclVDOVlxQStMS0syOVRR
bVNZSmpWQ0h4N0ZDZ0lJSUlBQUFnZ2dnQUFDCkNKeDVnYWlSMElOR1FKOUxvazJERUtxWEs0MCtX
TS9LVUhzUVFnMUF1S2M3KzNOcktqSWdhd3ZXRUVBQUFRUVFRQUFCQkJCQVlJcUEKZ3d6TmhhcXcw
dWpuV3BtckxxdFdZT0lBeEFPZ1Y3cHZQb282UnF0VG5vbDlFVUFBQVFRUVFBQUJCQkJBNEt3TEZN
cDBGTXFBbEk1QwpOTlh6T2xRYUhyM1M3VksxVms2UU9Bdmk0Q1JQbzlXOGlTVUNDQ0NBQUFJSUlJ
QUFBZ2dnY0FRQlp6L1UwYTVpRU0ybG1wL0hOSmRhCnpwUUpVVHdTVkpHVjVudzAyb0JrQ1pZSUlJ
QUFBZ2dnZ0FBQ0NDQXdUYUFvRkZ3NEJLbUNraUdyWUVQcGpwbFNINVVDRU9kRkhJZzAKbXZORUFK
SWxqckY4ekUyTDRkRTMzRGpxNUhqWWVuRXJkOTNoNWp5cjZjN2I5L0lxU3dRUVFBQUJCQkJBQUFF
RXJnaUJxRFlmcFFLTwpVajFkdWN6SzJRNW5QMHB0bnlrd3FaVUJjWFZXUGFxN0dxMWVFZGZBU1ND
QUFBSUlJSUFBQWdnZ2dNQjlSVUNaRHNVWktkdFJxZzVyCnBuU0hlOEdhS2Vxb0ZIdzQyQ2ljQ1hF
cVpIOGlBTWtTTEJGQUFBRUVFRUFBQVFRUVFHQ1NnRHE0Q2hvQ0pJMkduZ0lSQlI2MWFxK2MKRFNu
ZE01WUNqNWxxcnR3UVBVK1VZR1dKWXl6SFpWYzMzM0wzTVk1MDRVTnZ1L1g4YUFNbFdDTU1WaEZB
QUFFRUVFQUFBUVN1QUFGMQplS1hnUTdOYWUzU0tSTnEyRDYwQ0R3Y2wycXp0R2g5RWd4QTJvMVlL
WkVDdWdCZU9VMEFBQVFRUVFBQUJCQkJBNEQ0cDBEbjA2RVBYCmRSb0pQWVRPQVVnYUNWMkJSN01h
QWQzYlV5U3lmNEZrUU82VHJ6UW5qUUFDQ0NDQUFBSUlJSURBNVJkd2RpTzE5RkNwbGVPTVhsM3gK
dHM2RUtQMmhkdWxwVzZOQVpKSDI4NzRxeDFvdCtJa0FBZ2dnZ0FBQ0NDQ0FBQUlJVEJPSXNWTzVs
VElnVG5QMGhiSWZiZWdWZ0RnWQpjUWFrVVJUU3VCYUxSdWpUWU5rYkFRUVFRQUFCQkJCQUFBRUU3
aTFRT05PaGFDUEdJaXk2VXUxQWRGdXoyNEdrZFFVZ0RrWlVvVFZNCnRBRVpLRmhCQUFFRUVFQUFB
UVFRUUFDQlNRSUtOcUl5SGswVGxmbm9RcVBhcTZYU0h1MnlUWUdKUzdTY0NWblFDSDBTS3pzamdB
QUMKQ0NDQUFBSUlJSURBQVFJZTRIenBGSWhLck5UMlhPMCszQ1M5Q2swc3RWM2xWd3BBbHZ0Wmt2
eHdNaUJaZ2lVQ0NDQ0FBQUlJSUlBQQpBZ2hNRXVoVlorV0Fvbkc3RDdVRGNSRFNwRjZ3VmhrUVYx
NTVteElpdzBRajlJR0NGUVFRUUFBQkJCQkFBQUVFRUpnaUVEVVNldEFJCjZITTlxRTJERUtxWEs0
MCtXTS9LVUhzUVFnMUF1S2M3KzNQcm81SUJXVnV3aGdBQ0NDQ0FBQUlJSUlBQUFsTUVIR1JvTGxT
RmxVWS8KMThwY2RWbTFBaE1ISUI0QXZkSjk4MUhVTVZxZDhrenNpd0FDQ0NDQUFBSUlJSUFBQW1k
ZG9GQ21vMUFHcEhRVW9xbWUxNkhTOE9pVgpicGVxdFhLQ3hGa1FCeWQ1R3EzbVRTd1JRQUFCQkJC
QUFBRUVFRUFBZ1NNSU9QdWhqbllWZzJndTFmdzhwcm5VY3FaTWlPS1JvSXFzCk5PZWowUVlrUzdC
RUFBRUVFRUFBQVFRUVFBQ0JhUUpGb2VEQ0lVZ1ZsQXhaQlJ0S2Q4eVUrcWdVZ0RndjRrQ2swWndu
TWlCWmdpVUMKQ0NDQUFBSUlJSUFBQWdoTUVvaHE4MUVxNEhBR3hHVld6blk0KzFGcXU2dXlhbVZB
MG5JVWRZeFdKejBYT3lPQUFBSUlJSUFBQWdnZwpnTUJaRjFDbVF3bVFsTzBvRllYTWxPNXdMMWd6
UlIyVmdnOEhHNFV6SWRvblR3UWdXWUlsQWdnZ2dBQUNDQ0NBQUFJSVRCSlFCMWRCClE0Q2swZEJU
SUtMQW8xYnRsYk1ocFh2R1V1QXhVNk1QTjBUUEV3RklsbUNKQUFJSUlJQUFBZ2dnZ0FBQ2t3VFU0
WldDRDgxcTdkRXAKRW1uYlByUUtQQnlVYUxPMmEzd1FEVUxZTE5lSEpRQlpXN0NHQUFJSUlJQUFB
Z2dnZ0FBQ1V3UTZoeDU5NkxwT0k2R0gwRGtBU1NPaApLL0JvVmlPZ2UzdUtSUGFQU3k5WVU0RFpG
d0VFRUVBQUFRUVFRQUFCQkFZQlp6ZFNTdytWV2puTzZOVVZiK3RNaU5JZm5XNTdXNk5BClpKSDIw
dzFOQkNBcmgyUDl2T3NPRHo2L21tNjc5WHhlUGZaeWZOeGpINHdESUlBQUFnZ2dnQUFDQ0NCd3dn
SXhkaXEzVWdiRWFZNisKVVBhakRiMENFQWNlem9BMGlrSWExMkxSQ1AyRTVUa2NBZ2dnZ0FBQ0ND
Q0FBQUpuVUtCd3BrUFJSb3hGV0hTbDJvSG90bWEzQTBucgpDa0FjaktoQ2E1aG9BekpRc0lJQUFn
Z2dnQUFDQ0NDQUFBS1RCQlJzUkdVOG1pWXE4OUdGUnJWWFM2VTkybVdiQWhPWGFEa1RzaGcxClFq
K1ZFcXpIM0xRWXp2dUdHMGZQTm15OXVKVnhTZEtkdCs5ZDNFRjRGQUlJSUlBQUFnZ2dnQUFDQ0p5
SWdBYzRYem9Gb2o1NDFmWmMKN1Q3Y0pMMEtUU3kxWGVWWENrQ1crMW1TL0lSa1FMSUVTd1FRUUFB
QkJCQkFBQUVFRUpnazBLdk95Z0ZGNDNZZmFnZmlJS1JKdldDdApNaUN1dlBJMkpVU0c2VlF5SU1Q
UldVRUFBUVFRUUFBQkJCQkFBSUdyVmlCcUpQU2dFZERkSlZPYkJpRlVMMWNhZmJDZWxhSDJJSVFh
CmdIQlBkL2JuMWdTbkVvQ015NjV1dnVYdTliTWRjKzNDSHFhdW5CS3NzM2E5eDN3WmVUZ0NDQ0NB
QUFJSUlJREExU0xnSUVPekVpQ3IKMGMrTEdPYXF5Nm9WbURnQThRRG9sZTZiaitxdVJxdFhpd0xY
Z1FBQ0NDQ0FBQUlJSUlBQUFwZENvRkNtbzFBR3BIUVVvcW1lMTZIUwo4T2lWYnBkS2RUaEI0aXhJ
TllvNlJxdVg0aFI1RGdRUVFBQUJCQkJBQUFFRUVMaHFCQlIzRk9wb1Z6R0k1bExOejJPYVN5MW55
b1FvCkhnbXF5RXB6dnVaVEtjSEtCMmVKQUFJSUlJQUFBZ2dnZ0FBQ1Y3R0FlcitxTkR2c1VESmtG
V3dvM1RGVDZxTlNBT0s4aUFPUlJuT2UKeUlCa0NaWUlJSUFBQWdnZ2dBQUNDQ0F3U1NDcXpVZXBn
TU1aRUpkWk9kdmg3RWVwN2E3S3FwVUJTY3RSMURGYW5mUmM3SXdBQWdnZwpnQUFDQ0NDQUFBSm5Y
VUNaRGlWQVVyYWpWQlF5VTdyRHZXRE5GSFZVQ2o0Y2JCVE9oR2lmUEJHQVpBbVdDQ0NBQUFJSUlJ
QUFBZ2dnCk1FbEFIVnlsSHJBOEdub0tSQlI0MUtxOWNqYWtkTTlZQ2p4bWF2VGhodWg1SWdESkVp
d1JRQUFCQkJCQUFBRUVFRUJna29BNnZBcFIKSTUwci9BaWRncEMyN1VPcndNUGQ4bXF6dG10OEVB
MUMyQ3pYaHlVQVdWdXdoZ0FDQ0NDQUFBSUlJSUFBQWxNRU9vY2VmZWk2VGlPaApoOUE1QUVram9T
dndhRllqb0h0N2lrVDJqMHN2V0ZPQTJSY0JCQkJBQUFFRUVFQUFBUVFHQVdjM1Vrc1BsVm81enVq
VkZXL3JUSWpTCkg1MXVlMXVqUUdTUjl0TU5UUVFnS3dkK0lvQUFBZ2dnZ0FBQ0NDQ0F3RVNCR0R1
Vld5a0Q0alJIWHlqNzBZWmVBWWdERDJkQUdrVWgKald1eGFJUStVWmJkRVVBQUFRUVFRQUFCQkJC
QTRGNENoVE1kaWpaaUxNS2lLOVVPUkxjMXV4MUlXbGNBNG1CRUZWckRSQnVRZ1lJVgpCQkJBQUFF
RUVFQUFBUVFRbUNTZ1lNTTlZRFZOVk9hakM0MXFyNVpLZTdUTE5nVW1MdEZ5Sm1SQkkvUkpyT3lN
QUFJSUlJQUFBZ2dnCmdBQUNCd2g0Z1BPbFV5QXFzVkxiYzdYN2NKUDBLalN4MUhhVlh5a0FXZTVu
U2ZMRHlZQmtDWllJSUlBQUFnZ2dnQUFDQ0NBd1NhQlgKblpVRGlzYnRQdFFPeEVGSWszckJXbVZB
WEhubGJVcUlEQk9OMEFjS1ZoQkFBQUVFRUVBQUFRUVFRR0NLUU5SSTZFRWpvTS8xb0RZTgpRcWhl
cmpUNllEMHJRKzFCQ0RVQTRaN3U3TSt0ajBvR1pHM0JHZ0lJSUlBQUFnZ2dnQUFDQ0V3UmNKQ2h1
VkFWVmhyOVhDdHoxV1hWCkNrd2NnSGdBOUVyM3pVZFJ4MmgxeWpPeEx3SUlJSUFBQWdnZ2dBQUND
SngxZ1VLWmprSVprTkpSaUtaNlhvZEt3Nk5YdWwycTFzb0oKRW1kQkhKemthYlNhTjdGRUFBRUVF
RUFBQVFRUVFBQUJCSTRnNE95SE90cFZES0s1VlBQem1PWlN5NWt5SVlwSGdpcXkwcHlQZGlwdApR
TzY2dzFWZ3ErbTJXOC9uMVdNdng4Yzk5c0ZPOEFEajh6b0wxM3VDZEJ3S0FRUVFRQUFCQkJCQTRM
NHNVQlFLTGh5Q1ZFSEprRld3Cm9YVEhUS21QU2dHSTh5SU9SQnJOZVNJRGtpVllJb0FBQWdnZ2dB
QUNDQ0NBd0NTQnFEWWZwUUlPWjBCY1p1VnNoN01mcGJhN0txdFcKQmlRdFIxSEhhSFhTYzdFekFn
Z2dnQUFDQ0NDQUFBSUluSFVCWlRxVUFFblpqbEpSeUV6cER2ZUNOVlBVVVNuNGNMQlJPQk9pZmZK
MApLaVZZZDk2K2w0K3Y1WGg5dFBrcVdqMXIxM3NWdlhSY0NnSUlJSUFBQWdnZ2dNQXhCTlRCVmRB
UUlHazA5TUxsV0FvOGF0VmVPUnRTCnVtY3NCUjR6UlJ4dWlKNG5NaUJaZ2lVQ0NDQ0FBQUlJSUlB
QUFnaE1FbENIVndvK05LdTFSNmRJcEczNzBDcndjRkNpemRxdThVRTAKQ0dHelhCK1dBR1J0d1Jv
Q0NDQ0FBQUlJSUlBQUFnaE1FZWdjZXZTaDZ6cU5oQjVDNXdBa2pZU3VVdlpBTXdBQUlBQkpSRUZV
d0tOWgpqWUR1N1NrUzJUL3VxWlJnVFRsbjlrVUFBUVFRUUFBQkJCQkFBSUg3cG9Dekc2bWxoMHF0
SEdmMDZvcTNkU1pFNlk5T3Q3MnRVU0N5ClNQdnBoaVlDa0pVRFB4RkFBQUVFRUVBQUFRUVFRR0Np
UUl5ZHlxMlVBWEdhb3krVS9XaERyd0RFZ1ljeklJMmlrTWExV0tORzZKUmcKVFVSbWR3UVFRQUFC
QkJCQUFBRUVFRmdKRk01MEtOcUlzUWlMcmxRN0VOM1c3SFlnYVYwQmlJTVJWV2dORXdISVFNRUtB
Z2dnZ0FBQwpDQ0NBQUFJSVRCSlFzQkdWOFdpYXFNeEhGeHJWWGkyVjltaVhiUXBNWEtMbFRNaUNS
dWlUV05rWkFRUVFRQUFCQkJCQUFBRUVEaER3CkFPZExwMEJVWXFXMjUycjM0U2JwVldoaXFlMHF2
MUlBc3R6UGt1U0hrd0hKRWl3UlFBQUJCQkJBQUFFRUVFQmdra0N2T2lzSEZJM2IKZmFnZGlJT1FK
dldDdGNxQXVQTEsyNVFRR1NZYW9ROFVyQ0NBQUFJSUlJQUFBZ2dnZ01BVWdhaVIwSU5HUUovclFX
MGFoRkM5WEduMAp3WHBXaHRxREVHb0F3ajNkMlo5YkgzVlNBT0xSRFprUVFBQUJCQkJBQUFFRUVF
QUFnU1RnSUVPekVpQ3IwYytMR09hcXk2b1ZtRGdBCjhRRG9sZTZiaitxdVJxc2dJb0FBQWdnZ2dB
QUNDQ0NBQUFKSEZ5aVU2U2lVQVNrZGhXaXE1M1dvTkR4NnBkdWxVaDFPa0RnTFVvMmkKanRIcTBa
K0lQUkZBQUFFRUVFQUFBUVFRUUFBQk56NHYxTkd1WWhETnBacWZ4elNYV3M2VUNWRThFbFNSbGVh
c3RiTUV5NDFKbUJCQQpBQUVFRUVBQUFRUVFRQUNCZXdtb2lVYWwyV0dIa2lHcllFUHBqcGxTSDVV
Q0VPZEZISWcwbXZORUJpUkxzRVFBQVFRUVFBQUJCQkJBCkFJRkpBbEZ0UGtvRkhNNkF1TXpLMlE1
blAwcHRkMVZXclF4SVdvNmlqdEhxcE9kaVp3UVFRQUFCQkJCQUFBRUVFRGpyQXNwMHVKOHEKWnp0
S1JTRXpwVHZjQzlaTVVVZWw0TVBCUnVGTWlQYkpFd0ZJbG1DSkFBSUlJSUFBQWdnZ2dBQUNrd1Rj
V01NOVlIazA5QlNJS1BDbwpGWTA0RzFKcXV6TWlNelg2Y0VQMFBCR0FaQW1XQ0NDQUFBSUlJSUFB
QWdnZ01FbEFIVjRwK05DczFoNmRncEMyN1VPcndNTkJpVFpyCnU4WUgwU0NFelhKOVdBS1F0UVZy
Q0NDQUFBSUlJSUFBQWdnZ01FV2djK2pSaDY3ck5CSjZDSjBEa0RRU3VnS1BaalVDZXVyVHlwSEkK
L3JTekY2eThJMHNFRUVBQUFRUVFRQUFCQkJCQVlDemc3RVpxNmFGU0s4Y1l2YnJpYlowSlVmcWow
MjF2YXhTSUxOSit1cUdKQUdUbAp3RThFRUVBQUFRUVFRQUFCQkJDWUtCQmpwM0lyWlVDYzV1Z0xa
VC9hMENzQWNlRGhERWlqS0tSeExSYU4wQ2ZLc2pzQ0NDQ0FBQUlJCklJQUFBZ2pjUzZCd3BrUFJS
b3hGV0hTbDJvSG90bWEzQTBuckNrQWNqS2hDYTVob0F6SlFzSUlBQWdnZ2dBQUNDQ0NBQUFLVEJC
UnMKdUFlc3BvbktmSFNoVWUzVlVtbVBkdG1td01RbFdzNkVMRWFOMEhlV1lCWGpUbnNublEwN253
V0JtRm9WbllVcjVSb1JRQUFCQkJCQQpBQUVFTmdVOHdQblNLUkRGREdwN3JuWWZicEplaFNhVzJx
N3lLd1VneS8wc1NYNHNHWkFzd1JJQkJCQkFBQUVFRUVBQUFRUW1DZlNxCnMzSkEwYmpkaC80dzdT
Q2tTYjFnclRJZ3JyenlOaVZFaG1sbkJtVFlreFVFRUVBQUFRUVFRQUFCQkJCQVlDUVFOUko2MEFq
b2MyMXIKMHlDRTZ1Vktvdy9Xc3pMVUhvUlFBeER1NmM3KzNQcEJrd0lReW0zV2NHZDVqYks4cy96
cWMrMElJSUFBQWdnZ2dNQkl3RUdHWmlWQQpWcU9mRnpITVZaZFZLekJ4QU9JQjBDdmROeC9WWFkx
V1J3ZGlGUUVFRUVBQUFRUVFRQUFCQkJEWUlWQW8wMUVvQTFJNkN0RlV6K3RRCmFYajBTcmRMcFRx
Y0lIRVdwQnBGSGFQVkhVZm5iZ1FRUUFBQkJCQkFBQUVFRUVCZ0xLQzRvMUJIdTRwQk5KZHFmaDdU
WEdvNVV5WkUKOFVoUVJWYWE4OE1tbFdEbEI3RkVBQUVFRUVBQUFRUVFRQUFCQk56N1ZhWFpZWWVT
SWF0Z1ErbU9tVklmbFFJUTUwVWNpRFNhODBRRwpKRXV3UkFBQkJCQkFBQUVFRUVBQWdVa0NVVzAr
U2dVY3pvQzR6TXJaRG1jL1NtMTNWVmF0REVoYWpxS08wZXFrNTJKbkJCQkFBQUVFCkVFQUFBUVFR
T09zQ3luUjQyRUJuTzBwRklUT2xPOXdMMWt4UlI2WGd3OEZHNFV5STlza1RBVWlXWUlrQUFnZ2dn
QUFDQ0NDQUFBS1QKQk5UQlZlb0J5Nk9ocDBCRWdVZXRhTVRaa05JOVl5bndtS25SaHh1aTU0a0FK
RXV3UkFBQkJCQkFBQUVFRUVBQWdVa0M2dkFxUkkxMApydkFqZEFwQzJyWVByUUlQZDh1cnpkcXU4
VUUwQ0dHelhCK1dBR1J0d1JvQ0NDQ0FBQUlJSUlBQUFnaE1FZWdjZXZTaDZ6cU5oQjVDCjV3QWtq
WVN1d0tOWmpZRHU3U2tTMlQ4dXZXQk5BV1pmQkJCQUFBRUVFRUFBQVFRUUdBU2MzVWd0UFZScTVU
aWpWMWU4clRNaFNuOTAKdXUxdGpRS1JSZHBQTnpRUmdLd2Nqdlh6TVRjdGhzZmZjT01vdnpSc3Zi
aVZ1Kzd3b1BhcjZjN2I5L0lxU3dRUVFBQUJCQkJBQUFFRQpyZ2lCR0R1Vld5a0Q0alJIWHlqNzBZ
WmVBWWdERDJkQUdrVWhqV3V4YUlSK1JieGVuQVFDQ0NDQUFBSUlJSUFBQXZkcGdjS1pEa1ViCk1S
WmgwWlZxQjZMYm10ME9KSzByQUhFd29ncXRZYUlOeUVEQkNnSUlJSUFBQWdnZ2dBQUNDRXdTVUxE
aEhyQ2FKaXJ6MFlWR3RWZEwKcFQzYVpac0NFNWRvT1JPeUdCVUpVWUkxU2ZqZ25jZGxWemZmY3Zm
Qk8xM0UxdHR1UFQ5NkZDVllJd3hXRVVBQUFRUVFRQUFCQks0QQpBUTl3dm5RS1JIM3dxdTI1Mm4y
NFNYb1ZtbGhxdThxdkZJQXM5N01rK1hUSmdHUUpsZ2dnZ0FBQ0NDQ0FBQUlJSURCSm9GZWRsUU9L
Cnh1MCsxQTdFUVVpVGVzRmFaVUJjZWVWdFNvZ01FeG1RZ1lJVkJCQkFBQUVFRUVBQUFRUVFtQ0lR
TlJKNjBBam83anFwVFlNUXFwY3IKalQ1WXo4cFFleEJDRFVDNHB6djdjK3Vqa2dGWlc3Q0dBQUlJ
SUlBQUFnZ2dnQUFDVXdRY1pHZ3VWSVdWUmovWHlseDFXYlVDRXdjZwpIZ0M5MG4zelVkUXhXcDN5
VE95TEFBSUlJSUFBQWdnZ2dBQUNaMTJnVUthalVBYWtkQlNpcVo3WG9kTHc2SlZ1bDZxMWNvTEVX
UkFICkoza2FyZVpOTEJGQUFBRUVFRUFBQVFRUVFBQ0JJd2c0KzZHT2RoV0RhQzdWL0R5bXVkUnlw
a3lJNHBHZ2lxdzA1NlBSQmlSTHNFUUEKQVFRUVFBQUJCQkJBQUlGcEF1cjlxdExzc0VQSmtGV3dv
WFRIVEttUFNnR0k4eUlPUkJyTmVTSURraVZZSW9BQUFnZ2dnQUFDQ0NDQQp3Q1NCcURZZnBRSU9a
MEJjWnVWc2g3TWZwYmE3S3F0V0JpUXRSMUhIYUhYU2M3RXpBZ2dnZ0FBQ0NDQ0FBQUlJbkhVQlpU
cVVBRW5aCmpsSlJ5RXpwRHZlQ05WUFVVU240Y0xCUk9CT2lmZkpFQUpJbFdDS0FBQUlJSUlBQUFn
Z2dnTUFrQVhWd0ZUUUVTQm9OUFFVaUNqeHEKMVY0NUcxSzZaeXdGSGpNMStuQkQ5RHdSZ0dRSmxn
Z2dnQUFDQ0NDQUFBSUlJREJKUUIxZUtmalFyTlllblNLUnR1MURxOEREUVlrMgphN3ZHQjlFZ2hN
MXlmVmdDa0xVRmF3Z2dnQUFDQ0NDQUFBSUlJREJGb0hQbzBZZXU2elFTZWdpZEE1QTBFcm9DajJZ
MUFycTNwMGhrCi83ajBnalVGbUgwUlFBQUJCQkJBQUFFRUVFQmdFSEIySTdYMFVLbVY0NHhlWGZH
MnpvUW8vZEhwdHJjMUNrUVdhVC9kMEVRQXNuTGcKSndJSUlJQUFBZ2dnZ0FBQ0NFd1VpTEZUdVpV
eUlFNXo5SVd5SDIzb0ZZQTQ4SEFHcEZFVTByZ1dpMGJvRTJYWkhRRUVFRUFBQVFRUQpRQUFCQk80
bFVEalRvV2dqeGlJc3VsTHRRSFJiczl1QnBIVUZJQTVHVktFMVRMUUJHU2hZUVFBQkJCQkFBQUVF
RUVBQWdVa0NDamFpCk1oNU5FNVg1NkVLajJxdWwwaDd0c2syQmlVdTBuQWxaMEFoOUVpczdJNEFB
QWdnZ2dBQUNDQ0NBd0FFQ0h1Qjg2UlNJU3F6VTlsenQKUHR3a3ZRcE5MTFZkNVZjS1FKYjdXWkw4
Y0RJZ1dZSWxBZ2dnZ0FBQ0NDQ0FBQUlJVEJMb1ZXZmxnS0p4dXcrMUEzRVEwcVJlc0ZZWgpFRmRl
ZVpzU0lzTkVJL1NCZ2hVRUVFQUFBUVFRUUFBQkJCQ1lJaEExRW5yUUNPaHpQYWhOZ3hDcWx5dU5Q
bGpQeWxCN0VFSU5RTGluCk8vdHo2Nk1TZ0t3dExucnRyanRNdnBwdXUvVjhYajMyY256Y1l4K01B
eUNBQUFJSUlJQUFBZ2dnY05JQ0RqSTBLd0d5R3YyOGlHR3UKdXF4YWdZa0RFQStBWHVtKythanVh
clI2MG1mRDhSQkFBQUVFRUVBQUFRUVFRT0JxRmlpVTZTaVVBU2tkaFdpcTUzV29ORHg2cGR1bApV
aDFPa0RnTFVvMmlqdEhxMVV6RHRTR0FBQUlJSUlBQUFnZ2dnTUNKQ3lqdUtOVFJybUlRemFXYW44
YzBsMXJPbEFsUlBCSlVrWlhtCi9OeW5Vb0wxbUpzVytmamhoaHRIZlc0Tld5OXVaVnlTZE9mdGV4
ZDNFQjZGQUFJSUlJQUFBZ2dnZ0FBQ0p5TlFGQW91SElKVVFjbVEKVmJDaGRNZE1xWTlLQVlqekln
NUVHczE1SWdPU0pWZ2lnQUFDQ0NDQUFBSUlJSURBSklHb05oK2xBZzVuUUZ4bTVXeUhzeCtsdHJz
cQpxMVlHSkMxSFVjZG9kZEp6c1RNQ0NDQ0FBQUlJSUlBQUFnaWNkUUZsT3BRQVNkbU9VbEhJVE9r
Tzk0STFVOVJSS2Zod3NGRTRFNko5CjhuUXFKVmpqc3F1YmI3azdQOWV4bHhmMk1IWGxsR0NkdGVz
OTlndkpBUkJBQUFFRUVFQUFBUVN1Q2dGMWNKVjZ3UEpvNklYTHNSUjQKMUtxOWNqYWtkTTlZQ2p4
bWlqamNFRDFQWkVDeUJFc0VFRUFBQVFRUVFBQUJCQkNZSktBT3IwTFVTT2NLUDBLbklLUnQrOUFx
OEhDMwp2TnFzN1JvZlJJTVFOcU5tNFFRZ2s0alpHUUVFRUVBQUFRUVFRQUFCQkFhQnpxRkhIN3F1
MDBqb0lYUU9RTkpJNkFvOG10VUk2TjZlCklwSDlCNTFLQ2Rad1Fxd2dnQUFDQ0NDQUFBSUlJSURB
VlN2ZzdFWnE2YUZTSzhjWnZicmliWjBKVWZxajAyMXZheFNJTE5KK3VxR0oKQUdUbHdFOEVFRUFB
QVFRUVFBQUJCQkNZS0JCanAzSXJaVUNjNXVnTFpUL2EwQ3NBY2VEaERFaWpLS1J4TGRhb0VUb2xX
Qk9SMlIwQgpCQkJBQUFFRUVFQUFBUVJXQW9VekhZbzJZaXpDb2l2VkRrUzNOYnNkU0ZwWEFPSmdS
QlZhdzBRQU1sQ3dnZ0FDQ0NDQUFBSUlJSUFBCkFwTUVGR3k0QjZ5bWljcDhkS0ZSN2RWU2FZOTIy
YWJBeENWYXpvUXNhSVEraVpXZEVVQUFBUVFRUUFBQkJCQkE0QUFCRDNDK2RBcEUKSlZacWU2NTJI
MjZTWG9VbWx0cXU4aXNGSU12OUxFbCtPQm1RTE1FU0FRUVFRQUFCQkJCQUFBRUVKZ24wcXJOeVFO
RzQzWWZhZ1RnSQphVkl2V0tzTWlDdXZ2RTBKa1dHaUVmcEF3UW9DQ0NDQUFBSUlJSUFBQWdoTUVZ
Z2FDVDFvQlBTNUh0U21RUWpWeTVWR0g2eG5aYWc5CkNLRUdJTnpUbmYyNTlWSEpnS3d0V0VNQUFR
UVFRQUFCQkJCQUFJRXBBZzR5TkJlcXdrcWpuMnRscnJxc1dvR0pBeEFQZ0Y3cHZ2a28KNmhpdFRu
a205a1VBQVFRUVFBQUJCQkJBQUlHekxsQW8wMUVvQTFJNkN0RlV6K3RRYVhqMFNyZEwxVm81UWVJ
c2lJT1RQSTFXOHlhVwpDQ0NBQUFJSUlJQUFBZ2dnZ01BUkJKejlVRWU3aWtFMGwycCtIdE5jYWps
VEprVHhTRkJGVnByejBXZ0RraVZZSW9BQUFnZ2dnQUFDCkNDQ0F3RFNCb2xCdzRSQ2tDa3FHcklJ
TnBUdG1TbjFVQ2tDY0YzRWcwbWpPRXhtUUxNRVNBUVFRUUFBQkJCQkFBQUVFSmdsRXRma28KRlhB
NEErSXlLMmM3blAwb3RkMVZXYlV5SUdrNWlqcEdxNU9laTUwUlFBQUJCQkJBQUFFRUVFRGdyQXNv
MDZFRVNNcDJsSXBDWmtwMwp1QmVzbWFLT1NzR0hnNDNDbVJEdGt5Y0NrQ3pCRWdFRUVFQUFBUVFR
UUFBQkJDWUpxSU9yb0NGQTBtam9LUkJSNEZHcjlzclprTkk5Cll5bndtS25SaHh1aTU0a0FKRXV3
UkFBQkJCQkFBQUVFRUVBQWdVa0M2dkJLd1lkbXRmYm9GSW0wYlI5YUJSNE9TclJaMnpVK2lBWWgK
Ykpicnd4S0FyQzFZUXdBQkJCQkFBQUVFRUVBQWdTa0NuVU9QUG5SZHA1SFFRK2djZ0tTUjBCVjRO
S3NSMEwwOVJTTDd4ejJWWHJEdQp1c05qSWE2bTIyNDluMWVQdlJ3Zjk5Z0hPOEVEak0vckxGenZD
ZEp4S0FRUVFBQUJCQkJBQUlIN3NJQ3pHNm1saDBxdEhHZjA2b3EzCmRTWkU2WTlPdDcydFVTQ3lT
UHZwaHFaVENVQldoK1luQWdnZ2dBQUNDQ0NBQUFJSVhNMENNWFlxdDFJR3hHbU92bEQyb3cyOUFo
QUgKSHM2QU5JcENHdGRpMFFqOWFuNGJjRzBJSUlBQUFnZ2dnQUFDQ0Z3YWdjS1pEa1ViTVJaaDBa
VnFCNkxibXQwT0pLMHJBSEV3b2dxdApZVHFWRE1pZHQrOE5UeERDZUgyMCtTcGFQV3ZYZXhXOWRG
d0tBZ2dnZ0FBQ0NDQ0F3SEVFRkd4RVpUeGNadFgzWFdoVWU3VlUycU5kCnRncE1acWtCdWpNaEN4
cWhIMGVaeHlLQUFBSUlJSUFBQWdnZ2dJQUZQTUQ1MGlrUWxWaXA3Ym5hZmJoSmVoV2FXR3E3eXEv
VTltTzUKbnlYSll2U0NsU1ZZSW9BQUFnZ2dnQUFDQ0NDQXdDU0JYblZXRGlnYXQvdFFPeEFISVUz
cUJjc1pFQWNrcThCRUNaRmhPcFVTck9IbwpyQ0NBQUFJSUlJQUFBZ2dnZ01CVkt4QTFFbnJRQ09q
dUE3ZE5neENxbHl1TlBsalB5bEI3RUVJTlFMaW5PL3R6YXdJeUlHc0wxaEJBCkFBRUVFRUFBQVFR
UVFHQ0tnSU1NellXeUhXbjBjNjNNVlpkVkt6QnhBT0lCMEN2ZE54OUZIYVBWS2MvRXZnZ2dnQUFD
Q0NDQUFBSUkKSUhEV0JRcGxPZ3BsUUVwSElacnFlUjBxRFk5ZTZYYXBXaXNuU0p3RmNYQ1NwOUZx
M3NRU0FRUVFRQUFCQkJCQUFBRUVFRGlDZ0xNZgo2bWhYTVlqbVVzM1BZNXBMTFdmS2hDZ2VDYXJJ
U25NK0dtMUFzZ1JMQkJCQUFBRUVFRUFBQVFRUW1DWlFGQW91SElKVVFjbVFWYkNoCmRNZE1xWTlL
QVlqeklnNUVHczE1SWdPU0pWZ2lnQUFDQ0NDQUFBSUlJSURBSklHb05oK2xBZzVuUUZ4bTVXeUhz
eCtsdHJzcXExWUcKSkMxSFVjZG9kZEp6c1RNQ0NDQ0FBQUlJSUlBQUFnaWNkUUZsT3BRQVNkbU9V
bEhJVE9rTzk0STFVOVJSS2Zod3NGRTRFNko5OGpTcApCS3NZUHpJZmdTVUNDQ0NBQUFJSUlJQUFB
Z2ljU1FGMWNCVTBCRWdhRGQyeGdodWYxNnE5Y2pha2RNOVlDanhtaWpqY0VEMVBaRUN5CkJFc0VF
RUFBQVFRUVFBQUJCQkNZSktBT3J4UjhhRlpyajA2UlNOdjJvVlhnNGFCRW03VmQ0NE5vRU1KbXVU
NHNBY2phZ2pVRUVFQUEKQVFRUVFBQUJCQkNZSXFEaHpndUZHbDNYYVNSMGpYenVBQ1NOaEs3QW93
bkJJNkI3ZTRwRTlvKzdzd1RMUTZveklZQUFBZ2dnZ0FBQwpDQ0NBQUFLYkFzNXVwSlllS3JWeTFO
Q3JLOTdXbVJDbFB6cmQ5clpHZ2NnaTdhY2JtbllHSUt2ZCtJa0FBZ2dnZ0FBQ0NDQ0FBQUlJClhD
Z1FZNmR5SzJWQW5MVG9DMlUvMnRBckFISGc0UXhJb3lpa2NTM1dxQkU2SlZnWEduSUxBUVFRUUFB
QkJCQkFBQUVFamloUU9OT2gKYUNQR0lpeTZVdTFBZEZ1ejI0R2tkUVVnRGtaVW9UVk1CQ0FEQlNz
SUlJQUFBZ2dnZ0FBQ0NDQXdTVURCUmxUR28ybWlNaDlkYUZSNwp0VlRhbzFYakR3Y21MdEZ5Sm1S
QkkvUkpyT3lNQUFJSUlJQUFBZ2dnZ0FBQ0J3aDRnUE9sSXcyVldLbnR1ZHA5dUVsNkZacFlhcnZL
CnJ4U0FMUGV6SlBuaFpFQ3lCRXNFRUVBQUFRUVFRQUFCQkJDWUpOQ3J6c29CUmVOMkgyb0g0aUNr
U2IxZ3JUSWdycnp5TnZlR2xTY2EKb1djSmxnZ2dnQUFDQ0NDQUFBSUlJREJKSUdvazlLQVIwT2Q2
VkpzR0lWUXZWeHA5c0o2Vm9mWWdoQnFBY0U5Mzl1ZldoeVVEc3JaZwpEUUVFRUVBQUFRUVFRQUFC
QktZSU9NalFYS2dLSzQxK3JwVzU2ckpxQlNZT1FEd0FlcVg3NXFPb1k3UTY1Wm5ZRndFRUVFQUFB
UVFRClFBQUJCTTY2UUtGTVI2RU1TT2tvUkZNOXIwT2w0ZEVyM1M1VmErVUVpYk1nRGs3eU5Gck5t
MWdpZ0FBQ0NDQ0FBQUlJSUlBQUFrY1EKY1BaREhlMHFCdEZjcXZsNVRIT3A1VXlaRU1ValFSVlph
YzVIMjlrR3BDaFcwVXgrQUVzRXhnSnViTVNFQUFJSUlJQUFBZ2dnY0VZRgpGQ3RVbWgxMktCbXlD
amFVN3BncDlWRXBBSEVrNFVDazBad25NaUJaZ2lVQ0NDQ0FBQUlJSUlBQUFnaE1Fb2hxODFFcTRI
QUd4R1ZXCnpuWTQrMUZxdTZ1eWFtVkEwbklVZFl4V0p6MFhPeU9BQUFJSUlJQUFBZ2dnZ01CWkYx
Q213d1ZUem5hVWlrSm1TbmU0RjZ5Wm9vNUsKd1llRGpjS1pFTzJUcDUwbFdIbEhMeW0zR1d1YzNY
WEs4czd1YTgrVkk0QUFBZ2dnZ0FBQ1l3RVg0MnNJa0RRYXVuOUhkT1B6V3RHSQpzeUdsdGpzak1s
UEU0WWJvZVNJRGtpVllJb0FBQWdnZ2dBQUNDQ0NBd0NRQmRYaWw0RU96V250MGlrVGF0Zyt0QWc4
SEpkcXM3Um9mClJJTVFOc3YxWVFsQTFoYXNJWUFBQWdnZ2dBQUNDQ0NBd0JTQnpxRkhIN3F1VTdW
VUNKMERrRFFTdWdLUFpqVUNldXF6eUpISS9qU3AKQkNzL2lDVUNDQ0NBQUFJSUlJQUFBZ2dnNE94
R2F1bWhVaXZIR0wyNjRtMmRDVkg2bzlOdGIyc1VpQ3pTZnJxaGlRQms1Y0JQQkJCQQpBQUVFRUVB
QUFRUVFtQ2dRWTZkeUsyVkFuT2JvQzJVLzJ0QXJBSEhnNFF4SW95aWtjUzNXcUJFNkpWZ1RrZGtk
QVFRUVFBQUJCQkJBCkFBRUVWZ0tGTXgyS05tSXN3cUlyMVE1RXR6VzdIVWhhVndEaVlFUVZXc05F
QURKUXNJSUFBZ2dnZ0FBQ0NDQ0FBQUtUQkJSc1JHVTgKbWlZcTg5R0ZSclZYUzZVOTJtV2JBaE9Y
YURrVHNxQVIraVJXZGtZQUFRUVFRQUFCQkJCQUFJRURCRHpBK2RJcEVKVllxZTI1Mm4yNApTWG9W
bWxocXU4cXZGSUFzOTdNaytlRmtRTElFU3dRUVFBQUJCQkJBQUFFRUVKZ2swS3ZPeWdGRjQzWWZh
Z2ZpSUtSSnZXQ3RNaUN1CnZQSTJKVVNHaVVib0F3VXJDQ0NBQUFJSUlJQUFBZ2dnTUVVZ2FpVDBv
QkhRNTNwUW13WWhWQzlYR24yd25wV2g5aUNFR29Cd1QzZjIKNTlaSEpRQlpXMXowMm1OdVdneVB2
ZUhHVVlIYnNQWGlWdTY2d3kvbGFycno5cjI4eWhJQkJCQkFBQUVFRUVBQWdTdER3RUdHWmlWQQpW
cU9mRnpITVZaZFZLekJ4QU9JQjBDdmROeC9WWFkxV3I0eHI0Q3dRUUFBQkJCQkFBQUVFRUVEZ3Zp
RlFLTk5SS0FOU09nclJWTS9yClVHbDQ5RXEzUzZVNm5DQnhGcVFhUlIyajFmdkdSWEtXQ0NDQUFB
SUlJSUFBQWdnZ2NJVUlLTzRvMU5HdVloRE5wWnFmeHpTWFdzNlUKQ1ZFOEVsU1JsZVo4eHBSZ1pZ
bGpMTWRsVnpmZmN2Y3hqblRoUTIrNzlmeG9BeVZZSXd4V0VVQUFBUVFRUUFBQkJLNEVnYUpRY09F
UQpwQXBLaHF5Q0RhVTdaa3A5VkFwQW5CZHhJTkpvemhNWmtDekJFZ0VFRUVBQUFRUVFRQUFCQkNZ
SlJMWDVLQlZ3T0FQaU1pdG5PNXo5CktMWGRWVm0xTWlCcE9ZbzZScXVUbm91ZEVVQUFBUVFRUUFB
QkJCQkE0S3dMS05PaEJFaktkcFNLUW1aS2Q3Z1hySm1pamtyQmg0T04Kd3BrUTdaTW5BcEFzd1JJ
QkJCQkFBQUVFRUVBQUFRUW1DYWlEcTlRRGxrZERUNEdJQW85YXRWZk9ocFR1R1V1QngweU5QdHdR
UFU4RQpJRm1DSlFJSUlJQUFBZ2dnZ0FBQ0NFd1NVSWRYSVdxa2M0VWZvVk1RMHJaOWFCVjR1RnRl
YmRaMmpRK2lRUWliMFVnVkJDQ1RpTmtaCkFRUVFRQUFCQkJCQUFBRUVCb0hPb1VjZnVxN1RTT2do
ZEE1QTBram9DanlhMVFqbzNwNGlrZjBIMFF2V29NY0tBZ2dnZ0FBQ0NDQ0EKQUFJSVRCRndkaU8x
OUZDcGxlT01YbDN4dHM2RUtQM1I2YmEzTlFwRUZtay8zZEJFQUxKeTRDY0NDQ0NBQUFJSUlJQUFB
Z2hNRklpeApVN21WTWlCT2MvU0ZzaDl0NkJXQU9QQndCcVJSRk5LNEZvdEc2Qk5sMlIwQkJCQkFB
QUVFRUVBQUFRVHVKVkE0MDZGb0k4WWlMTHBTCjdVQjBXN1BiZ2FSMUJTQU9SbFNoTlV5MEFSa29X
RUVBQVFRUVFBQUJCQkJBQUlGSkFnbzIzQU5XMDBSbFByclFxUFpxcWJSSHUyeFQKWU9JU0xXZENG
alJDbjhUS3pnZ2dnQUFDQ0NDQUFBSUlJSENBZ0FjNFh6b0ZvaElydFQxWHV3ODNTYTlDRTB0dFYv
bVZBcERsZnBZawpQNXdNU0paZ2lRQUNDQ0NBQUFJSUlJQUFBcE1FZXRWWk9hQm8zTzVEN1VBY2hE
U3BGNnhWQnNTVlY5Nm1oTWd3MFFoOW9HQUZBUVFRClFBQUJCQkJBQUFFRXBnaEVqWVFlTkFMNlhB
OXEweUNFNnVWS293L1dzekxVSG9SUUF4RHU2YzcrM1Bxb1pFRFdGcXdoZ0FBQ0NDQ0EKQUFJSUlJ
REFGQUVIR1pvTFZXR2wwYysxTWxkZFZxM0F4QUdJQjBDdmROOThGSFdNVnFjOEUvc2lnQUFDQ0ND
QUFBSUlJSURBV1JjbwpsT2tvbEFFcEhZVm9xdWQxcURROGVxWGJwV3F0bkNCeEZzVEJTWjVHcTNr
VFN3UVFRQUFCQkJCQUFBRUVFRURnQ0FMT2ZxaWpYY1VnCm1rczFQNDlwTHJXY0tST2llQ1NvSWl2
TitXaTBBY2tTTEJGQUFBRUVFRUFBQVFRUVFHQ2FRRkVvdUhBSVVnVWxRMWJCaHRJZE02VSsKS2dV
Z3pvczRFR2swNTRrTVNKWmdpUUFDQ0NDQUFBSUlJSUFBQXBNRW90cDhsQW80bkFGeG1aV3pIYzUr
bE5ydXFxeGFHWkMwSEVVZApvOVZKejhYT0NDQ0FBQUlJSUlBQUFnZ2djTllGbE9sUUFpUmxPMHBG
SVRPbE85d0wxa3hSUjZYZ3c4Rkc0VXlJOXNrVEpWaFo0aGpMCnUrNXd4Mk9yNmJaYnorZlZZeS9I
eHozMndUZ0FBZ2dnZ0FBQ0NDQ0FBQUluTEtBT3JvS0dBRW1qb1JjdXgxTGdVYXYyeXRtUTBqMWoK
S2ZDWUtlSndRL1E4a1FISkVpd1JRQUFCQkJCQUFBRUVFRUJna29BNnZGTHdvVm10UFRwRkltM2Jo
MWFCaDRNU2JkWjJqUStpUVFpYgo1ZnF3QkNCckM5WVFRQUFCQkJCQUFBRUVFRUJnaWtEbjBLTVBY
ZGRwSlBRUU9nY2dhU1IwQlI3TmFnUjBiMCtSeVA1eEtjR2FBc3krCkNDQ0FBQUlJSUlBQUFnZ2dN
QWc0dTVGYWVxalV5bkZHcjY1NFcyZENsUDdvZE52YkdnVWlpN1NmYm1naUFGazU4Qk1CQkJCQUFB
RUUKRUVBQUFRUW1Dc1RZcWR4S0dSQ25PZnBDMlk4MjlBcEFISGc0QTlJb0NtbGNpelZxaEU0SjFr
Umtka2NBQVFRUVFBQUJCQkJBQUlHVgpRT0ZNaDZLTkdJdXc2RXExQTlGdHpXNEhrdFlWZ0RnWVVZ
WFdNSkVCR1NndWZ1V0dHOWV0YW02KzVlNkxQOURHSXkvc1VXdHY0MTV1CklvQUFBZ2dnZ0FBQ0ND
QndtUVVVYkVSbFBGeG0xZmRkYUZSN3RWVGFvMTIyQ2t4bXFRRzZNeUdMOWEvTHFXdmV5M3pXUEQw
Q0NDQ0EKQUFJSUlJQUFBZ2pjRndVOHdQblNLUkNWV0tudHVkcDl1RWw2RlpwWWFydktyOVQyWTdt
ZkpjblhSd2xXbG1DSkFBSUlJSUFBQWdnZwpnQUFDa3dSNjFWazVvR2pjN2tQdFFCeUVOS2tYTEdk
QUhKQ3NBaE1sUklhSkVxeUJnaFVFRUVBQUFRUVFRQUFCQkJDWUloQTFFbnJRCkNPZ2VscnROZ3hD
cWx5dU5QbGpQeWxCN0VFSU5RTGluTy90ejY2T1NBVmxic0lZQUFnZ2dnQUFDQ0NDQUFBSlRCQnhr
YUM2VTdVaWoKbjJ0bHJycXNXb0dKQXhBUGdGN3B2dmtvNmhpdFRua205a1VBQVFRUVFBQUJCQkJB
QUlHekxsQW8wMUVvQTFJNkN0RlV6K3RRYVhqMApTcmRMMVZvNVFlSXNpSU9UUEkxVzh5YVdDQ0NB
QUFJSUlJQUFBZ2dnZ01BUkJKejlVRWU3aWtFMGwycCtIdE5jYWpsVEprVHhTRkJGClZwcnowV2dE
a2lWWUlvQUFBZ2dnZ0FBQ0NDQ0F3RFNCb2xCdzRSQ2tDa3FHcklJTnBUdG1TbjFVQ2tDY0YzRWcw
bWpPRXhtUUxNRVMKQVFRUVFBQUJCQkJBQUFFRUpnbEV0ZmtvRlhBNEErSXlLMmM3blAwb3RkMVZX
YlV5SUdrNWlqcEdxNU9laTUwUlFBQUJCQkJBQUFFRQpFRURnckFzbzA2RUVTTXAybElwQ1prcDN1
QmVzbWFLT1NzR0hnNDNDbVJEdGt5Y0NrQ3pCRWdFRUVFQUFBUVFRUUFBQkJDWUpxSU9yCm9DRkEw
bWpvS1JCUjRGR3I5c3Jaa05JOVl5bndtS25SaHh1aTU0a0FKRXV3UkFBQkJCQkFBQUVFRUVBQWdV
a0M2dkJLd1lkbXRmYm8KRkltMGJSOWFCUjRPU3JSWjJ6VStpQVloYkpicnd4S0FyQzFZUXdBQkJC
QkFBQUVFRUVBRkRqelZBQUFnQUVsRVFWUUFnU2tDR3U2OApVS2pSZFoxR1F0Zkk1dzVBMGtqb0Nq
eWFFRHdDdXJlblNHVC91UFNDTlFXWWZSRkFBQUVFRUVBQUFRUVFRR0FRY0hZanRmUlFxWlhqCmpG
NWQ4YmJPaENqOTBlbTJ0elVLUkJacFA5M1FSQUN5Y3VBbkFnZ2dnQUFDQ0NDQUFBSUlUQlNJc1ZP
NWxUSWdUblAwaGJJZmJlZ1YKZ0Rqd2NBYWtVUlRTdUJhTFJ1Z1RaZGtkQVFRUVFBQUJCQkJBQUFF
RTdpVlFPTk9oYUNQR0lpeTZVdTFBZEZ1ejI0R2tkUVVnRGtaVQpvVFZNdEFFWktGaEJBQUVFRUVB
QUFRUVFRQUNCU1FJS05xSXlIazBUbGZub1FxUGFxNlhTSHEwYWZ6Z3djWW1XTXlFTEdxRlBZbVZu
CkJCQkFBQUVFRUVBQUFRUVFPRURBQTV3dkhXbW94RXB0ejlYdXcwM1NxOURFVXR0VmZxVUFaTG1m
SmNrUEp3T1NKVmdpZ0FBQ0NDQ0EKQUFJSUlJREFKSUZlZFZZT0tCcTMrMUE3RUFjaFRlb0ZhNVVC
Y2VXVnQ3azNyRHpSQ0QxTEhHTjUxeDN6NGRHMzNYcCtXRC91eXZpNAp4ejBXajBjQUFRUVFRQUFC
QkJCQTRLUUZva1pDRHhvQjNiOE50MmtRUXZWeXBkRUg2MWtaYWc5Q3FBRUk5M1JuZjI3OXpHUkEx
aGFzCklZQUFBZ2dnZ0FBQ0NDQ0F3QlFCQnhtYUMxVmhwZEhQdFRKWFhWYXR3TVFCaUFkQXIzVGZm
QlIxakZhblBCUDdJb0FBQWdnZ2dBQUMKQ0NDQXdGa1hLSlRwS0pRQktSMkZhS3JuZGFnMFBIcWwy
NlZxclp3Z2NSYkV3VW1lS01IS0VzZFkzbm43M3VqUjQvWFJabFlSUUFBQgpCQkJBQUFFRUVMamFC
Sno5VUVlN1phR0FRNE1RVnFIVnJOdWFYWXFsZUNSb2tlWjg2UVFnV1lJbEFnZ2dnQUFDQ0NDQUFB
SUlUQk5RCjRGRnBqZ283bEF4WkJSdEtkOHlVK3FoVWl1Vzh5RXpMeHQxbDdVK2paRWpleEJJQkJC
QkFBQUVFRUVBQUFRUVEyQzBRMWVhalZNQ2gKS3F4VVp1VnNoN01mcGJhN0txdFdCaVF0UjFISGFI
WDNFN0FIQWdnZ2dBQUNDQ0NBQUFJSUlEQUlLTk9oQkVqS2RwU0tRbVpLZDdqMAphcWFvbzFMdzRX
Q2pjQ1pFKytTSkFDUkxzRVFBQVFRUVFBQUJCQkJBQUlGSkF1cmdLbWdJa0RRYWVncEVGSGpVcXIx
S1BXSzVaeXdGCkhqTTErbkJEOUR3UmdHUUpsZ2dnZ0FBQ0NDQ0FBQUlJSURCSlFCMWVLZmpRck5Z
ZW5TS1J0dTFEcThERFFZazJhN3ZHQjlFZ2hNMXkKZlZnQ2tMVUZhd2dnZ0FBQ0NDQ0FBQUlJSURC
Rm9IUG8wWWV1NnpRU2VnaWRBNUEwRXJvQ2oyWTFBcnEzcDBoay83ajBnalVGbUgwUgpRQUFCQkJC
QUFBRUVFRUJnRUhCMkk3WDBVS21WNDR4ZVhmRzJ6b1FvL2RIcHRyYzFDa1FXYVQvZDBFUUFzbkxn
SndJSUlJQUFBZ2dnCmdBQUNDRXdVaUxGVHVaVXlJRTV6OUlXeUgyM29GWUE0OEhBR3BGRVUwcmdX
aTBib0UyWFpIUUVFRUVBQUFRUVFRQUFCQk80bFVEalQKb1dnanhpSXN1bEx0UUhSYnM5dUJwSFVG
SUE1R1ZLRTFUSk15SU1XNC82emhFS3dnZ0FBQ0NDQ0FBQUlJSUlEQW1SUlFzQkdWOFhDWgpWZDkz
b1ZIdDFWSnBqM2JaS2pDWnBRYm96b1FzYUlSK0p0OGVYRFFDQ0NDQUFBSUlJSUFBQWljcTRBSE9s
MDZCcU1SS2JjL1Y3c05OCjBxdlF4RkxiVlg2bHRoL0wvU3hKZm1KNndjb1NMQkZBQUFFRUVFQUFB
UVFRUUdDU1FLODZLd2NVamR0OXFCMklnNUFtOVlMbERJZ0QKa2xWZ29vVElNTzBzd2ZLQm1CQkFB
QUVFRUVBQUFRUVFRQUNCVFlHb2tkQ0RSa0NmNjQ0MkRVS29YcTQwK21BOUswUHRRUWcxQU9HZQo3
dXpQclI5SkJtUnR3Um9DQ0NDQUFBSUlJSUFBQWdoTUVYQ1FvYmxRemlLTmZxNlZ1ZXF5YWdVbURr
QThBSHFsKythanFHTzBPdVdaCjJCY0JCQkJBQUFFRUVFQUFBUVRPdWtDaFRFZWhERWpwS0VSVFBh
OURwZUhSSzkwdVZXdmxCSW16SUE1TzhqUmF6WnRZSW9BQUFnZ2cKZ0FBQ0NDQ0FBQUpIRUhEMlF4
M3RLZ2JSWEtyNWVVeHpxZVZNbVJERkkwRVZXV25PUjl2WkJpVHZ5QklCQkJCQUFBRUVFRUFBQVFR
UQp1RUJBdzNSVW1oMTJLQm15Q2phVTdwZ3A5VkVwQUhGZXhJRklvemxQWkVDeUJFc0VFRUFBQVFR
UVFBQUJCQkNZSkJEVjVxTlV3T0VNCmlNdXNuTzF3OXFQVWRsZGwxY3FBcE9VbzZoaXRUbm91ZGtZ
QUFRUVFRQUFCQkJCQUFJR3pMcUJNaDhjcWQ3YWpWQlF5VTdyRHZXRE4KRkhWVUNqNGNiQlRPaEdp
ZlBCR0FaQW1XQ0NDQUFBSUlJSUFBQWdnZ01FbkFBM1pvQ0pBMEdub0tSQlI0MUlwR25BMHAzVE9X
QW8rWgpHbjI0SVhxZUNFQ3lCRXNFRUVBQUFRUVFRQUFCQkJDWUpLQU9yeFI4YUZacmowNlJTTnYy
b1ZYZzRhQkVtN1ZkNDROb0VNSm11VDRzCkFjamFnalVFRUVBQUFRUVFRQUFCQkJDWUlxRGh6Z3VG
R2wzWGFTUjBqWHp1QUNTTmhLN0Fvd25CSTZDbmNjMGRpZXhQTzN2QktzWUYKVy9sUkxCSFlGNGpw
SFFVSEFnZ2dnQUFDQ0NDQXdGa1VjSFlqdGZSUXFaVmpqRjVkOGJiT2hDajkwZW0ydHpVS1JCWnBQ
OTNRdERNQQpXZTNHVHdRUVFBQUJCQkJBQUFFRUVFRGdRb0VZTzVWYktRUGlQMHIzaGJJZmJlZ1Zn
RGp3Y0Fha1VSVFN1QmFMUnVnWHduRUxBUVFRClFBQUJCQkJBQUFFRXBnc1V6blFvMm9peENJdXVW
RHNRM2Ric2RpQnBYUUdJZ3hGVmFBM1RwQXdJNVRhRDI1bGVvU3p2VEwvOFhEd0MKQ0NDQUFBSUlJ
TEFXVUxBUmxmRndtVlhmZDZGUjdkVlNhWTlXalQrNk9Fc04wSjBKV2RBSWZXM0dHZ0lJSUlBQUFn
Z2dnQUFDQ0Z5YwpnQWM0WHpvRm9oSXJ0VDFYdXc4M1NhOUNFMHR0Vi9tVjJuNHM5N01rK1Jub0JT
dExzRVFBQVFRUVFBQUJCQkJBQUlGSkFyM3FyQnhRCk5HNzNvWFlnRGtLYTFBdVdNeUFPU0ZhQmlY
dkR5dE9rRXF6OElKWUlJSUFBQWdnZ2dBQUNDQ0NBUU5SSTZFRWpvTTlGMGFaQkNOWEwKbFVZZnJH
ZGxxRDBJb1FZZzNOT2QvYm0xRlJtUXRRVnJDQ0NBQUFJSUlJQUFBZ2dnTUVYQVFZYm1RdG1PTlBx
NVZ1YXF5Nm9WbURnQQo4UURvbGU2Ymo2S08wZXFVWjJKZkJCQkFBQUVFRUVBQUFRUVFPT3NDaFRJ
ZGhUSWdwYU1RVGZXOERwV0dSNjkwdTFTdGxSTWt6b0k0Ck9NblRhRFZ2WW9rQUFnZ2dnQUFDQ0ND
QUFBSUlIRUhBMlE5MXRLc1lSSE9wNXVjeHphV1dNMlZDRkk4RVZXU2xPUitOTmlCWmdpVUMKQ0ND
QUFBSUlJSUFBQWdoTUV5Z0tCUmNPUWFxZ1pNZ3EyRkM2WTZiVVI2VUF4SGtSQnlLTjVqejkvKzNk
QjVBa1pmbkg4WGZTWHVBQwpRWW1DaHhGRWtnR01mekdXT1N2bW5LWE1xUXlZTUdmRmhEbUxHUzF6
RHFXQ0FZb2dscUtDb3BnQUR3N3VkbnBtK3YvODN0MjM3NzIrCjZlbnBuZG1aaGZsMjFXeUg2ZW53
NmU2ZGVmcDUzN2ZKZ0FRSitnZ2dnQUFDQ0NDQUFBSUlJRkJKSUxVNkgzVUxPSlFCVVRFclpUdVUK
L2FqYmRKWEthbGtHeFBlanFDTWFyTFF1WmtZQUFRUVFRQUFCQkJCQUFJRlpGN0JNaHlWQWZMYWpi
bEZJMDlJZGFnV3JhVkZIdzRJUApCUnMxWlVKc250QVJnQVFKK2dnZ2dBQUNDQ0NBQUFJSUlGQkp3
QnE0Y3ZZSUVQODBkQitJV09EUnNySlh5b2JVMVRLV0JSNU5xL1NoCml1aWhJd0FKRXZRUlFBQUJC
QkJBQUFFRUVFQ2drb0ExZUdYQmg3MnN0a2ZYSXBGT3ArYzZGbmdvS0xISk50MmVEMklQSVV6YTJ4
ZEwKSmZUdEZpTVAzZmpvK1d3Wmh4d1ZLV2RUbHpad3ptbDZ0TXRDZC9hcHE4SWdmUVFRUUFBQkJC
QkFBQUVFcGl0Z2p6dXZXYWloSjZDbgphY04xRllENEo2RmI0SkU0cHllZ3IxWVVvdGRpUndBU0pP
Z2pnQUFDQ0NDQUFBSUlJSUJBSlFGbE4zeE5EeXRxcFJpalowM3hkcFFKCnNmU0h4U1IrV21LQnlM
eWZUL05hY2F5RkhuOFJRQUFCQkJCQUFBRUVFRUFBZ1dvQ2FkcTE0bFk5MTAwdC9PalZMUHZSY1Qw
TFFCU00KS0FPU1dCU1NxQ3hXVkFtZEFLU2E4Y0M1NDJKWHh4NjNaZUM4VmQ0OCtjUjEwZXdVd1lv
d0dFUUFBUVFRUUFBQkJCQ1lva0JObVE2TApOdEswNXVhN2Rhc0hZdVAyVWowUVA2eWlXYlo5WGFW
REZqc3FvUWNKK2dnZ2dBQUNDQ0NBQUFJSUlGQk53SUtOMURJZVNaSmE1cVByCkVpdDcxYmEwUjhj
cWZ5Z3dVUkV0WlVMbW8rclJCQ0RWaUprYkFRUVFRQUFCQkJCQUFBRUVGZ1gwZ1BPMklnMHJZcVdL
NkYxZkpiM2gKa3JSdTA2MzRsUVVnN2NVc1NVQWpBQWtTOUJGQUFBRUVFRUFBQVFRUVFLQ1NRTS9L
V1NtZ1NGVHZ3K3FCS0FoSmZDdFlDeGtRbGJ6UwpOTFdHRlRycWdBUUorZ2dnZ0FBQ0NDQ0FBQUlJ
SUZCSklMVW5vVHQ3QXJvZUd0SHhEeUcwVnE3czZZT3RadDIxOUJCQ2V3RGhLbnV6CnQzcjdZc21B
YkxkZ0NBRUVFRUFBQVFRUVFBQUJCS29JS01pd1Y4MUtZZm1ubjl2QW5KWExhbGxnb2dCRUQwQnYy
SHR6VWRRUkRWWloKRS9NaWdBQUNDQ0NBQUFJSUlJREFyQXZVTE5OUnN3eElYVkdJZGEyNWxtdlk0
OUViTmw2M3NsWktrQ2dMb3VBa2RORmdtRVFmQVFRUQpRQUFCQkJCQUFBRUVFQmhDUU5rUGEyalhZ
aEI3MVYzRGh2V3EyNnRwbVJDTFI1eVZ5UEt2c0RUcWdBUUorZ2dnZ0FBQ0NDQ0FBQUlJCklGQk5v
RmF6NEVJaFNNTlpNbVFoMkxCMFI5TlNIdzBMUUpRWFVTQ1MyQ3QwWkVDQ0JIMEVFRUFBQVFRUVFB
QUJCQkNvSkpCYW5ZKzYKQlJ6S2dLaVlsYklkeW43VWJicEtaYlVzQStMN1VkUVJEVlphRnpNamdB
QUNDQ0NBQUFJSUlJREFyQXRZcHNNU0lEN2JVYmNvcEducApEcldDMWJTb28ySEJoNEtObWpJaE5r
L29DRUNDQkgwRUVFQUFBUVFRUUFBQkJCQ29KR0FOWERsN0JJaC9Hcm9QUkN6d2FGblpLMlZECjZt
b1p5d0tQcGxYNlVFWDAwQkdBQkFuNkNDQ0FBQUlJSUlBQUFnZ2dVRW5BR3J5eTRNTmVWdHVqYTVG
SXA5TnpIUXM4RkpUWVpKdHUKendleGh4QW03ZTJMSlFEWmJzRVFBZ2dnZ0FBQ0NDQ0FBQUlJVkJI
b0t2VG91VzYzYTA5Q2Q2NnJBTVEvQ2QwQ2oyVGhDZWlhN2lPUgp4ZVhTQ2xZVllPWkZBQUVFRUVB
QUFRUVFRQUNCVEVEWkRWL1R3NHBhS2M3b1dWTzhIV1ZDTFAzUnRYRk5TeXdRbWZmejJZaDFCQ0FM
CkR2eEZBQUVFRUVBQUFRUVFRQUNCaWdKcDJyWGlWcFlCVVpxalY3UHNSOGYxTEFCUjRLRU1TR0pS
U0tLeVdGUkNyeWpMN0FnZ2dBQUMKQ0NDQUFBSUlJTENUUUUyWkRvczIwclRtNXJ0MXF3ZGk0L1pT
UFJBL2JBR0lnaEVyb1pWMTFBSEpLQmhBQUFFRUVFQUFBUVFRUUFDQgpTZ0lXYktTVzhVaVMxRElm
WFpkWTJhdTJwVDA2N1k0UFRGUkVTNW1RZVNxaFYySmxaZ1FRUUFBQkJCQkFBQUVFRU9nam9BZWN0
NVVDCnNTSldWdmZjNm4yb1NuckRKV25kcGx2eEt3dEEyb3Raa3ZCeDZvQUVpVEgwenpsdExsdkt5
U2V1eTRaSEhZaVhPK3F5K0R3Q0NDQ0EKQUFJSUlJQUFBdU1TNkZrNUt4V3BtbGU5RDR0REZJUWt2
aFVzWlVEbWZFVjBUYk9FU05ZUmdHUVVEQ0NBQUFJSUlJQUFBZ2dnZ0VBVgpnZFNlaE83c0NlaTZE
ZC94RHlHMFZxN3M2WU90WnQyMTlCQkNld0RoS251enQzcjdVcWtEc3QyQ0lRUVFRQUFCQkJCQUFB
RUVFS2dpCm9DRERYalhMZnZpbm45dkFuSlhMYWxsZ29nQkVEMEJ2Mkh0elVkUkJCcVFLY01tOFo1
KzZLcG9qSG80bU00Z0FBZ2dnZ0FBQ0NDQ0EKd05WRW9HYVpqcHBsUU9xS0txeWllV3V1NVJyMmVQ
U0dSU1dhcGdTSnNpQmRLcUZmVFk0NHU0RUFBZ2dnZ0FBQ0NDQ0F3RFFGbFAydwpobll0QnJGWDNh
cWZwLzVWdDM3VE1pRVdqemdya2VWZllUUEpnQVFKK2dnZ2dBQUNDQ0NBQUFJSUlGQk5vRmF6NEVJ
aFNNTlpNbVFoCjJMQ3lXRTFMZlRRc0FMSFl3d2NpaVpyTFd1eWkwbGhoRW4wRUVFQUFBUVFRUUFB
QkJCQkFvRndndFRvZmRRczRsQUZSSFJCbE81VDkKcU50MDFRMXBXUWJFOTZPb0l4b3NYd0Z6SUlB
QUFnZ2dnQUFDQ0NDQUFBS1pnR1U2TEFIaXN4MTFpMEthVnU1S3JXQTFMZXBvV1BDaApZS09tVElq
TkV6b0NrQ0JCSHdFRUVFQUFBUVFRUUFBQkJDb0pXQU5Yemg0QjRwK0c3Z01SQ3p4YVZ2Ykt0NGls
bHJFczhHaGFwUTlWClJBOGRBVWlRb0k4QUFnZ2dnQUFDQ0NDQUFBS1ZCS3pCS3dzKzdHVzFQYm9X
aVhRNlBkZXh3RU5CaVUyMjZmWjhFSHNJWVVJcldKVmMKbVJrQkJCQkFBQUVFRUVBQUFRVDZDWFFW
ZXZSY3Q5djFUMEx2S2dEeFQwSzN3Q05aZUFLNm5wRHVJNUhGejlNS1ZqOUlwaUdBQUFJSQpJSUFB
QWdnZ2dFQ3BnTElidnFhSEZiVlNuTkd6cG5nN3lvUlkrcU5yNDVxV1dDQXk3K2V6RWVzSVFCWWMr
SXNBQWdnZ2dBQUNDQ0NBCkFBSVZCZEswYThXdExBT2lORWV2WnRtUGp1dFpBS0xBUXhtUXhLS1FS
R1d4cUlSZVVaYlpFVUFBQVFRUVFBQUJCQkJBWUNlQm1qSWQKRm0ya2FjM05kK3RXRDhURzdhVjZJ
SDdZQWhBRkkxWkNLK3VvaEo1Uk1JQUFBZ2dnZ0FBQ0NDQ0FBQUtWQkN6WVNDM2prU1NwWlQ2NgpM
ckd5VjIxTGUzVGFIUitZcUlpV01pSHpWRUt2eE1yTUNDQ0FBQUlJSUlBQUFnZ2cwRWRBRHpodkt3
VmlSYXlzN3JuVisxQ1Y5SVpMCjBycE50K0pYRm9DMEY3TWs0ZU5rUUlJRWZRUVFRQUFCQkJCQUFB
RUVFS2drMExOeVZnb29FdFg3c0hvZ0NrSVMzd3JXUWdaRUphODAKelJJaVdVY2w5SXlDQVFRUVFB
QUJCQkJBQUFFRUVLZ2lrTnFUMEowOUFYM09QdFR4RHlHMFZxN3M2WU90WnQyMTlCQkNld0RoS251
egp0M3I3VXNtQWJMZGdDQUVFRUVBQUFRUVFRQUFCQktvSUtNaXdWODFLWWZtbm45dkFuSlhMYWxs
Z29nQkVEMEJ2Mkh0elVkUVJEVlpaCkUvTWlnQUFDQ0NDQUFBSUlJSURBckF2VUxOTlJzd3hJWFZH
SWRhMjVsbXZZNDlFYk5sNjNzbFpLa0NnTG91QWtkTkZnbUVRZkFRUVEKUUFBQkJCQkFBQUVFRUJo
Q1FOa1BhMmpYWWhCNzFhMzZlZXBmZGVzM0xSTmk4WWl6RWxuK0ZaWkdIWkFnUVI4QkJCQkFBQUVF
RUVBQQpBUVNxQ2RScUZsd29CR2s0UzRZc0JCdVc3bWhhNnFOaEFZanlJZ3BFRW51RmpneElrS0NQ
QUFJSUlJQUFBZ2dnZ0FBQ2xRUlNxL05SCnQ0QkRHUkFWczFLMlE5bVB1azFYcWF5V1pVQjhQNG82
b3NGSzYySm1CQkJBQUFFRUVFQUFBUVFRbUhVQnkzUllBc1JuTytvV2hUUXQKM2FGV3NKb1dkVFFz
K0ZDd1VWTW14T1lKSFFGSWtLQ1BBQUlJSUlBQUFnZ2dnQUFDbFFTc2dTdG5qd0R4VDBQM2dZZ0ZI
aTByZTZWcwpTRjB0WTFuZzBiUktINnFJSGpvQ2tDQkJId0VFRUVBQUFRUVFRQUFCQkNvSldJTlhG
bnpZeTJwN2RDMFM2WFI2cm1PQmg0SVNtMnpUCjdma2c5aERDcEwxOXNRUWcyeTBZUWdBQkJCQkFB
QUVFRUVBQWdTb0NYWVVlUGRmdGR1MUo2TTUxRllENEo2RmI0SkVzUEFGZDAzMGsKc3JoY1dzR3FB
c3k4Q0NDQUFBSUlJSUFBQWdnZ2tBa291K0ZyZWxoUks4VVpQV3VLdDZOTWlLVS91amF1YVlrRkl2
TitQaHV4amdCawp3WUcvQ0NDQUFBSUlJSUFBQWdnZ1VGRWdUYnRXM01veUlFcHo5R3FXL2VpNG5n
VWdDanlVQVVrc0NrbFVGb3RLNkJWbG1SMEJCQkJBCkFBRUVFRUFBQVFSMkVxZ3AwMkhSUnByVzNI
eTNidlZBYk54ZXFnZmloeTBBVVRCaUpiU3lqam9nR1FVRENDQ0FBQUlJSUlBQUFnZ2cKVUVuQWdv
M1VNaDVKa2xybW8rc1NLM3ZWdHJSSHA5M3hnWW1LYUNrVE1rOGw5RXFzekl3QUFnZ2dnQUFDQ0ND
QUFBSjlCUFNBODdaUwpJRmJFeXVxZVc3MFBWVWx2dUNTdDIzUXJmbVVCU0hzeFN4SStUZ1lrU05C
SEFBRUVFRUFBQVFRUVFBQ0JTZ0k5SzJlbGdDSlJ2UStyCkI2SWdKUEd0WUMxa1FGVHlTdE1zSVpK
MVZFTFBLQmhBQUFFRUVFQUFBUVFRUUFDQktnS3BQUW5kMlJQUTUreERIZjhRUW12bHlwNCsKMkdy
V1hVc1BJYlFIRUs2eU4zdXJ0eStWRE1oMkM0WVFRQUFCQkJCQUFBRUVFRUNnaW9DQ0RIdlZyQlNX
Zi9xNURjeFp1YXlXQlNZSwpRUFFBOUlhOU54ZEZIZEZnbFRVeEx3SUlJSUFBQWdnZ2dBQUNDTXk2
UU0weUhUWExnTlFWaFZqWG1tdTVoajBldldIamRTdHJwUVNKCnNpQUtUa0pYcVFoV3JiYXc0UEJo
K2dnZ2dBQUNDQ0NBQUFJSUlERERBc3ArV0VPN2RZc1Q2dllRd29icjJNdkc3YVdpV0JhUE9PdjUK
VjFDcUZJQ0VEOUZIQUFFRUVFQUFBUVFRUUFBQkJKd0ZIZzE3cFJaMldESmtJZGl3ZEVmVFVoOE5L
NHFsOUVYVCtvbWF5MXJzb21SSQptRVFmQVFRUVFBQUJCQkJBQUFFRUVDZ1hTSzNPUjkwQ0RpdUY1
WXRaS2R1aDdFZmRwcXRVVnNzeUlMNGZSUjJsR1JBMXAwV0hBQUlJCklJQUFBZ2dnZ0FBQ0NPd2tZ
SmtPMWRKUXRxUGVxN21tcFR0VTlLcHBVVWZEZ2cvRkhUVmxRbXllMEVXeFNKaEVId0VFRUVBQUFR
UVEKUUFBQkJCQW9GMUNxd2g0QjRwK0c3Z01SQ3p4YUZvMzRGckZzdWpJaVRVdDVxQ0o2NkFoQWdn
UjlCQkJBQUFFRUVFQUFBUVFRcUNSZwpEVjVaOEdFdnErM1J0VWlrMCttNWpnVWVDa3Bzc2syMzU0
UFlRd2lUOXZiRkVvQnN0MkFJQVFRUVFBQUJCQkJBQUFFRXFnaDBGWHIwClhMZmJ0U2VoTzlkVkFP
S2ZoRzZCUjdMd0JIUmZvME9SeUdKWFdnY2t6RWdmQVFRUVFBQUJCQkJBQUFFRUVJZ0ZsTjN3TlQy
c3FKVmkKako0MXhkdFJKc1RTSDEwYjE3VEVBcEY1UDUrTldFY0FzdURBWHdRUVFBQUJCQkJBQUFF
RUVLZ29rS1pkSzI1bEdSQ2xPYXdTZXNjaQprcDRGSUFvOGxBRkpMQXBKVkJZcnFvUk9BRklSbWRr
UlFBQUJCQkJBQUFFRUVFQmdRYUJwQWNhOFZmcElMTU94MVFLT3JVbnFydHpXCmRXdmJxWnRyMTl3
cXEvdlJzTmMyNm9Cd3lpQ0FBQUlJSUlBQUFnZ2dnTUJJQWlwcVpha090WDdsWDNYVkI3RUNXZGJz
bFZWSlgzZ1EKb2RVNHQxSlpDMld4RmxkR0pmU1IxUGt3QWdnZ2dBQUNDQ0NBQUFJekt1QmJ2MXA0
MWtjUTBETUUwMjVpeGJDNlZpRjlvUmlXaW1MNQppdWcyVTgwaUZRS1FvRVVmQVFRUVFBQUJCQkJB
QUFFRWhoZXdxR0xidk5YLzhKK3d3TU15SXQxMllpMWlxZGxkNjF2ZzBiR2lWMnFDCnR6MnY1NEUw
WGQwZVhGaGFCMFJSQ2gwQ1JRS0tjdWtRUUFBQkJCQkFBQUVFWmt0QWdjUzZadUorLzljdGJ2OERk
bkZ0YTQ3WFd0LzEKendKSmtua0xPT3B1MjlhV1BRMTlsUytXZGVrL0wzRnIxcXh4clZhclBBQ1pM
VXIyRmdFRUVFQUFBUVFRUUFBQkJNb0VsS1E0WUxkNQo5NHZUTDNacjlsanRkdC9RY2hkdlNTMFE2
YmoydHExdVc2dHVsZEZWQWFUbmttMHRkK2xmVG5mNzdycXJEMEpLTXlCbEsrZDlCQkJBCkFBRUVF
RUFBQVFRUW1DMEJGYWM2OHJyTy9lNVhXOTAzZm55Ulc3LzdHcmR4ZmROZUxUZHZSYS9tdGwzcHRy
aU9GY25hNWhwV29HcmIKUldlNWZRL2MxMjNZc0tGYUJvVGlOck4xWWhYdExjWHlpbVNZamdBQ0ND
Q0FBQUlJeklhQWltQWRjNVBWN3N3TExuZG5iWjV6bTVzTgovK3lQV3FOaEZjMFRleDZJNm9jazdz
cVd0WWoxN3pQZHdldTJ1azJiRG5VYk4yNnNGb0RNQmlkN2lRQUNDQ0NBQUFJSUlJQUFBb01FCkZJ
RHN2KzlhOTlCanJPTEhUeTUyWjEyNmg3dmNXcjVTRGZSZTBuTEptcVpiczdyaDFsOXhsanRzL1Qv
Y1VZZmR3QUtRVFc3ZHVuVUUKSUlOZ2VROEJCQkJBQUFFRUVFQUFBUVIyRmxBQW9ncmxSeCt4dTd2
V1B0dmN0MDc3bi92MWhYVjM0UlViTEJDcHVWM2JsN2xOdGN2YwpVUWYyM0JFSDNjZ2RjTUFCYmxl
ckEwSWw5SjB0bVlJQUFnZ2dnQUFDQ0NDQUFBSkRDQ2dJbVp1YmN3ZGRiNzI3L29HN3UzYTc3ZWJu
CjU2MzRWY2VhM04xbzJZNzlmSjJQM1hiYnphMWR1OVkzd2R1MURBbVYwSWZBWlJZRUVFQUFBUVFR
UUFBQkJCRFlVVUQxZ2h0VzUyUFYKcWxVK3M2RmdST09xb0s1TWgxNmFwbkYxQ2o1NnZSNEJ5STZN
akNHQUFBSUlJSUFBQWdnZ2dFQVZnVkFjUzRGSUNFWkNBS0lnUmU4cgorTkJMSFU5Q3I2TEx2QWdn
Z0FBQ0NDQ0FBQUlJSU5CWFFNRkdDRGdVZElUeC9Nd0VJSGtSeGhGQUFBRUVFRUFBQVFRUVFHRFpC
QWhBCmxvMldCU09BQUFJSUlJQUFBZ2dnZ0VCZWdBQWtMOEk0QWdnZ2dBQUNDQ0NBQUFJSUxKc0Fy
V0NOZ2ZiSUl5L05sbkxFRVp1ejRWRUgKempoalk3YUkwMC9mTFJ0bUFBRUVFRUFBQVFRUVFBQ0Jx
Nm9BQWNpWWpsd3l0OVl2NmNwMTR5Tk5yTmt5ZGEzMmxiN1BId1FRUUFBQgpCQkJBQUFFRXJ1b0NG
TUc2cWg5QnRoOEJCQkJBQUFFRUVFQUFnYXVRd1BodTExK0ZkbnJjbTZwaVZ5SHpjZXh4VzhhMitK
TlBYT2VYCnRYYUxpblZSQkd0c3NDd0lBUVFRUUFBQkJCQkFZR29DWkVDbVJzK0tFVUFBQVFRUVFB
QUJCQkNZUFFFQ2tOazc1dXd4QWdnZ2dBQUMKQ0NDQUFBSlRFeUFBbVJvOUswWUFBUVFRUUFBQkJC
QkFZUFlFQ0VCbTc1aXp4d2dnZ0FBQ0NDQ0FBQUlJVEUyQUFHUnE5S3dZQVFRUQpRQUFCQkJCQUFJ
SFpFeUFBbWIxanpoNGpnQUFDQ0NDQUFBSUlJREExQVFLUXFkR3pZZ1FRUUFBQkJCQkFBQUVFWmsr
QUFHVDJqamw3CmpBQUNDQ0NBQUFJSUlJREExQVFJUUtaR3o0b1JRQUFCQkJCQUFBRUVFSmc5QVFL
UTJUdm03REVDQ0NDQUFBSUlJSUFBQWxNVElBQ1oKR2owclJnQUJCQkJBQUFFRUVFQmc5Z1FJUUdi
dm1MUEhDQ0NBQUFJSUlJQUFBZ2hNVFlBQVpHcjByQmdCQkJCQUFBRUVFRUFBZ2RrVApJQUNadldQ
T0hpT0FBQUlJSUlBQUFnZ2dNRFVCQXBDcDBiTmlCQkJBQUFFRUVFQUFBUVJtVDRBQVpQYU9PWHVN
QUFJSUlJQUFBZ2dnCmdNRFVCQWhBcGtiUGloRkFBQUVFRUVBQUFRUVFtRDBCQXBEWk8rYnNNUUlJ
SUlBQUFnZ2dnQUFDVXhOb1RtM05WNk1WbjNIR1JwZk0KemZrOU92bkVkV1BiczNOT1cxaG1xNzF4
Yk10a1FRZ2dnQUFDQ0NDQUFBSUlURk9BRE1nMDlWazNBZ2dnZ0FBQ0NDQ0FBQUl6SmtBRwpaRXdI
dk5XKzBpOXA3WmJOWTFxaWMyUSt4a2JKZ2hCQUFBRUVFRUFBQVFSV2lBQUJ5QmdPeE9tbjd4WXRK
UjZPSmpPSUFBSUlJSUFBCkFnZ2dnQUFDamlKWW5BUUlJSUFBQWdnZ2dBQUNDQ0F3TVFFQ2tJbFJz
eUlFRUVBQUFRUVFRQUFCQkJBZ0FPRWNRQUFCQkJCQUFBRUUKRUVBQWdZa0pFSUJNakpvVklZQUFB
Z2dnZ0FBQ0NDQ0FBQUVJNXdBQ0NDQ0FBQUlJSUlBQUFnaE1USUFBWkdMVXJBZ0JCQkJBQUFFRQpF
RUFBQVFRSVFEZ0hFRUFBQVFRUVFBQUJCQkJBWUdJQ0JDQVRvMlpGQ0NDQUFBSUlJSUFBQWdnZ1FB
RENPWUFBQWdnZ2dBQUNDQ0NBCkFBSVRFeUFBbVJnMUswSUFBUVFRUUFBQkJCQkFBQUVDRU00QkJC
QkFBQUVFRUVBQUFRUVFtSmdBQWNqRXFGa1JBZ2dnZ0FBQ0NDQ0EKQUFJSUVJQndEaUNBQUFJSUlJ
QUFBZ2dnZ01ERUJBaEFKa2JOaWhCQUFBRUVFRUFBQVFRUVFJQUFoSE1BQVFRUVFBQUJCQkJBQUFF
RQpKaVpBQURJeGFsYUVBQUlJSUlBQUFnZ2dnQUFDQkNDY0F3Z2dnQUFDQ0NDQUFBSUlJREF4QVFL
UWlWR3pJZ1FRUUFBQkJCQkFBQUVFCkVDQUE0UnhBQUFFRUVFQUFBUVFRUUFDQmlRa1FnRXlNbWhV
aGdBQUNDQ0NBQUFJSUlJQUFBUWpuQUFJSUlJQUFBZ2dnZ0FBQ0NFeE0KZ0FCa1l0U3NDQUVFRUVB
QUFRUVFRQUFCQkFoQU9BY1FRQUFCQkJCQUFBRUVFRUJnWWdJRUlCT2paa1VJSUlBQUFnZ2dnQUFD
Q0NCQQpBTUk1Z0FBQ0NDQ0FBQUlJSUlBQUFoTVRJQUNaR0RVclFnQUJCQkJBQUFFRUVFQUFBUUlR
emdFRUVFQUFBUVFRUUFBQkJCQ1ltQUFCCnlNU29XUkVDQ0NDQUFBSUlJSUFBQWdnUWdIQU9JSUFB
QWdnZ2dBQUNDQ0NBd01RRUNFQW1SczJLRUVBQUFRUVFRQUFCQkJCQWdBQ0UKY3dBQkJCQkFBQUVF
RUVBQUFRUW1Ka0FBTWpGcVZvUUFBZ2dnZ0FBQ0NDQ0FBQm9tWGRZQUFCcVhTVVJCVkFJRUlKd0RD
Q0NBQUFJSQpJSUFBQWdnZ01ERUJBcENKVWJNaUJCQkFBQUVFRUVBQUFRUVFhRllocU5WcVZXWm5Y
Z1FRUUFBQkJCQkFBQUVFRUxpYUNxUnA2dlRxCjlYbzd2Y0o3MnZVd0hPWWxBM0kxUFNIWUxRUVFR
QUFCQkJCQUFBRUVsbHNnRGk3aTRSQ1VhUDBhMW52cTFLK1VBZkdmNGc4Q0NDQ0EKQUFJSUlJQUFB
Z2pNdkVBY1ZJU0FvOXZ0N3BBTkNVaDZQN3hYR29DRUJZY1AwMGNBQVFRUVFBQUJCQkJBQUFFRVFt
WWpCQmJxaDFlOQpYbmVxdmhGaWlUQ1BQbE1hZ0VDTEFBSUlJSUFBQWdnZ2dBQUNDTVFDQ2lnYWpV
YVc3ZEI0cDlQeDA1SWs4Y0dINWcrQmlON1RkTDBJClFHSkpoaEZBQUFFRUVFQUFBUVFRUUtCVVFK
a05CUlZ4MGFvUWhDanpFYklmb1JFcnZVY0FVc3JLREFnZ2dBQUNDQ0NBQUFJSUlOQlAKSUFRWUNr
STBIRElkWWJvQ2xGQkVTOU1VZkxUYmJiOG9NaUQ5UkptR0FBSUlJSUFBQWdnZ2dBQUNoUUxOWnRO
ZGVlV1YvbjBGR0sxVwp5MmRFTkt4T3dVZklrQ2dZVWZDeGVmTm10OTkrKzFFRXl3dnhCd0VFRUVB
QUFRUVFRQUFCQklZV1VBQ3lkZXZXTE9qSTF3ZlJ1QUlQCnZlYm41OTJXTFZ2YzZ0V3IzY2FOR3ds
QWhsWm1SZ1FRUUFBQkJCQkFBQUVFRVBBQ3luRHNzODgrN29JTEx2RFpqVzNidHJsZGR0bkYKS1RC
Uk5pUmtQWlQ1MEhzS1NBNDY2Q0JmVklzaVdKeEVDQ0NBQUFJSUlJQUFBZ2dnVUVsQUFjYnV1Ky91
NXVibTNEbm5uT09MVnlrQQpXYlZxVmJZY1pUNVVUR3ZQUGZkMFJ4NTVwTzlmY2NVVlpFQXlJUVlR
UUFBQkJCQkFBQUVFRUVCZ0tBRlZPdGZyNElNUGR1dlhyM2ZuCm5udXV1K3l5eTN3Z29xSlphOWV1
OVFIS29ZY2U2ZzQvL0hDZkhWR2RFSFZrUUlZaVppWUVFRUFBQVFRUVFBQUJCQkFJQWlxQ3BaZUsK
WEczYXRNbXRXN2ZPS2J1aGpJanFlcWdmRDRmUHFWK1BSeGhHQUFFRUVFQUFBUVFRUUFBQkJNb0Ux
TnBWYVBGS2RUNzIzbnR2dDlkZQplL202SHZwcy9INStXV1JBOGlLTUk0QUFBZ2dnZ0FBQ0NDQ0FR
S2xBQ0VEVVYzR3NEUnMyK01BamJwNDN6S002STZFakF4SWs2Q09BCkFBSUlJSUFBQWdnZ2dNRFFB
dmtzaDRLUU5XdlcrTThyNEZBUnJSQjRoRUJFYnhLQURFM01qQWdnZ0FBQ0NDQ0FBQUlJSUNBQkJS
YmQKYnRmM1E1Q2g2V29GNjFlLytwVUdmYWYzNHBjbUVvQXMyUEFYQVFRUVFBQUJCQkJBQUFFRWxp
QVFaemYrOEljL3VQZSs5NzFPZlFVZQp5b3FFVEVtWWp3QmtDY2g4QkFFRUVFQUFBUVFRUUFDQldS
ZUlNeC9CNG9NZi9LQWYvT1FuUDVsbFNEUWhucGNBSkdqUlJ3QUJCQkJBCkFBRUVFRUFBZ2FFRWxO
blFLKzYrLy8zdis4eUhwcDEvL3ZudUp6LzVTUlo0aE95SDN0dnhVNXBDaHdBQ0NDQ0FBQUlJSUlB
QUFnZ00KRUFqMU9zSXNhdm5xTTUvNVRCWndhUHBuUC90WnQyWExscXk1M2pEdlRBUWcydkcvL2Ux
dllaK3ZVdjJWdE8zajNCWXQ2KzkvLzN2aApzWmlmbjNjLy8vblBDOThmNVkyeWRZK3k3UEJaVmNy
Ni9lOS9IMGFYclQvT1k5SnZJOHVPUTlsK1RzSzYzM1pQWTFxWlJYNmJ4bm5zCnlwd3Z2dmhpOThj
Ly9qRy9DU3R1UEgrK1RYdTcvLzN2ZjdzZi9PQUg3cEpMTGltMW11VHh6RHVWYmh3empGVmduTWU2
MzRaVlBlK1gKZTN2NmJTUFRFQWdDY1ZiamxGTk9jVHAvNDA3bjU4a25uN3hEVUtMM1N3T1F6MzN1
Yy80UjYxckJIZTV3Qi9mRUp6N1JQZUVKVDNBUAplOWpEM0ExdmVFTjNuL3ZjSjE3UGlodis5S2Mv
N1IrSzhvbFBmR0xGYlZ2WkJxMmtiUi9udHJ6Ly9lOTNlK3l4aC92ODV6L2ZsK0RVClUwOTFON3Za
emR6OTczLy92dStQTXJGczNhTXNPM3hXTFQ4Y2NjUVI3a2xQZWxLWXRDejljUjZUZmh0WWRoeks5
bk1TMXYyMmV4clQKeWl6eTJ6VE9ZemVNOC9ISEgrL3VlOS83NWpkalJZMzNPOSttdWQwbm5YU1N2
M1AzNHgvLzJCMXl5Q0ZPUC9xTHVra2V6MzVPUmR2Rgo5UEVMalBOWUYyMWRsZk4rRXR0VHRKMU1S
eUFJaENEa29ROTlxUHZ5bDcvc3Z2Q0ZMN2dQZi9qRFRyKzlkWTQrL3ZHUHI1NEJlZkNECkgrd2U5
YWhIK1hXODlyV3ZkUi80d0FlY0twZG9nYWVkZGxyVzFtL1lpR24wOWNYd3d4LytzTytxRlNoZCs5
clg3dnZlU3A4NDdXMlAKWGNlNUxVOSs4cFBkYnJ2dFZzaC85TkZIdThjODVqR0Y3NC95UnRtNlIx
bDIrT3pOYjM1emQ4d3h4emc5RlhRNXUzRWVrMzdiV1hZYwp5dlp6RXRiOXRuc2EwOG9zdEUzVHVw
NjA3bGU5NmxYdUsxLzVpZ1pYYk5mdmZKdldkbDl4eFJYdU9jOTVqanZ1dU9QY0sxLzVTdmZGCkwz
N1JOeXNaNDAzcmVQWnppcmVMNGZFTExOZXhMdHJTS3VmOU1OOEQ4ZllYclpQcENFeGFvRFFEb2cz
YWRkZGQvWGFGQ0Nkc3BCNDAKOHM1M3ZqT01UcVFmMTZEWENwTWtjWTk4NUNQZFQzLzYwOEwxNjRk
Z2Z0c0xaMTVoYjB4cjIvdTVqbk5ieXBZMU56ZTNiTWVzYk4yagpuQUo2NEk2NlpyTzVVOFdzVVpZ
YlBwcy8vNWR6WDdUT291TXc3SDR1eC9aMU9wM0FzU0w2dzFoTSszcFN4dkg2MTcvK1RsNzU4eWsv
ClE5bjcrZm1yanVlWG56L2ZpcmE3Nm5xcXpuL1dXV2U1ZHJ1ZFhjTzN1dFd0ZGxqRXRJOW4zbW1I
alJ2VFNQN1lqR214YnFWZHYyWDcKdGR6SHV0LzZpODc3b21NeTZQOXN2KzN2dDA2bUlUQnBnYUVD
a0tLTmVzRUxYdUQyM0hOUC8vWnZmdk1iZDVlNzNNV25xbi8wb3g4NQpqUjkrK09IdVl4LzdXUGJ4
clZ1M3VwZTg1Q1h1RFc5NGd6djIyR1BkbTkvODV1eTlmLzNyWC82TzArMXVkenQzMDV2ZTFQM3ls
Ny8wCjczM3ZlOTl6U3VtODdHVXZjeTk2MFl2Y1B2dnM0dzQ0NEFDbjZlcmUvdmEzdTY5Kzlhdis3
dDZqSC8xb3B6dFgvVHI5U0ZCYVU1KzkKOFkxdjdQN3lsNzlrc3hXdCs3ZS8vYTNUWGR5WHZ2U2w3
ald2ZVkyNzVqV3Y2Yk0rUmZObkN5d1krTktYdnVTWGNiLzczYy85NzMvLwpjeC85NkVmOStKM3Zm
R2QzM25ubitVKzk5YTF2ZGJlOTdXM2R0bTNic3FWTVk5dUxYSmV5TGRtTzVBWlVXZWw1ejN1ZUx5
S25ZMzd1CnVlZm01bGdZVmRuQi9mYmJ6NzNyWGUveUUxU2hTY1gvbnZLVXAyVHpWejBtZzlhdDhv
cTY4L25jNXo3WEYxdDV4ak9lNFhUdXFpczYKSjdTOHB6M3RhZTZFRTA3dzIvWHJYLzg2MnpZTkZH
MWYwZkoyK0xDTnlFQnRhci94alc5MCtSOURnNDdKb0gwWnhqVy9IV1g3bVo5Zgo0NE9zaTF6NkxV
Y3RhK2gvaDY2Ulc5LzYxdTdzczgvMnN4VVpqckx2eXFnKzVDRVA4ZWZuaHo3MElYZmQ2MTdYSFhU
UVFUdjgzNmhpCk1jM3I2YUtMTHZMbnpTMXZlY3VNVmR1dWMvelZyMzYxLzcrdGZaVnR1SkZUOW43
UmNTczZGdG1LRndjR25jOWgzbjdidlpUdmtMQzgKdUQvbzNGQ0cveFd2ZUlYL29mejBwei9kbndQ
eFp6VTh6ZU9aMzVaaHJ1T2k0NVZmbHNhTGpvMitrL1QvK3ZXdmY3M1RkNWkrRzNYZQpoTStVL1kr
dWV2MVcyV2EvRWRHZlFjZDNtR3M3V3RTeUh1dCsxOHMzdnZHTnl0ZXJ0cmZvZTZEb1hJMzNrV0VF
cGlKZ0VYVnA5NTczCnZDZTFqVXZ0QjN6NjhZOS9QTFZ5WGFuOVkwNXZjcE9iN1BCWkN3cjhmTi84
NWpkVHU0aFMrNkd3dy90M3ZldGQwMS84NGhkK212MUEKOC9OYW9KTGFIWkgwYm5lN1czclpaWmVs
VnBFenRYOXNxZjNZVHkrOTlOTFVBb1hVZ3B6MHdBTVBUTzNMTWJYeXVLa0ZOdW4rKysrZgpMWHZU
cGsycEZRL0x4dk1EaHgxMm1QK010czhxbzZmMlF5SzFlaXgrdGtIcjFyWmFVYUhVeXZPblZwN05i
NWY5U0M3YzF2eDYrNDNMCjdIR1BlMXoybGhYVlNSLzcyTWRtNDEvLyt0ZlRqM3prSTluNE5MYzk3
N3JVYmNsMkpocTQxcld1bFZxNTZ0U0N4OVFxZWFaYTEzV3UKYzUzVTd0YjR1U3l6bHU2OTk5N1pK
K3pMTGJVZ01CdTNZRGQ5MElNZTVNY0hIY1BzQTlGQTJici83Ly8rejUvbitvamRCVTJQT3Vxbwo5
SjczdktkZlFyOXp3aDYwazk3akh2ZElMVER5OCtnYzNuZmZmVk1MTFAzNG9PMHJXcDcvNE9JZm1W
aWRtR3pTczUvOWJIK2RhTUtnClk2TDNCKzJMM2gva3F2Znp4MkhRZm1yK2ZEZkllcEJMZmpsV2hN
QnZxODRWZGZZRE1YM0FBeDdnaDRzTVI5bjNmLzd6bitrTmJuQUQKLzcvaWExLzdXbXBOQ2FZVzlL
WldCODZ2VTMrcVdrenJlcktLMUtrRjYrazFybkdOYk5zdG1FOHR3UGJqZHJmZi95KzJBTVR2cHlZ
Twplbi9RY1NzNkZ0bUtiV0RRK1J5ZmIvMjJleW5mSWZHNnczRFp1V0YxSDFOcldqTE0zcmMvcmVP
cGpZbWRORDdvT2g1MHZQVFp1QnQwCmJQUS8wRnEzeVdiWHVCVTl6TVlIYlVQVjYzZlU3OWxCeDNl
WWF6dmJxY1dCNVRyVy9hNFh1L2xhK1hvdCt4N0liMzkrL3hoSFlLa0MKMy8zdWQ5TXp6end6dmZ6
eXkxTzdTWkhxV3RmdkpydUpsVjV3d1FXcHJqZXJsSjdhVFFIL1c5OENaZisrZnQ4M3EwUTlTdk1w
OWR0bwpOSFlxRDZ2bDNQR09kL1NaalJlLytNWCtibUZjOFZzdGlaeCsrdWxPNVZmVjZZNzMrOTcz
UGw4L1F4WGRiZWV6dTIvS2N2em5QLy94CmJRZmYrOTczZGhac3VOdmM1amIrcGMvcUR2akJCeC9z
NzVpcnI2NnNpSlg5cy9UYnAzbHZmL3ZiTzZYWTFaV3RXM2M5N2VKMTltUEgKdjBMell1Rk9ZWDVi
L1VJSC9MRmd3OTlCMHQwS3RaMThwenZkeWQ5aHNTOEpYMnhIbVIzZGxZeTdhVzU3M25XcDJ4THZU
eGhXM2FKNwozZXRlZmxSMzFYUTNUZnR2UHpMQ0xGbGZ4ZjNpYlZtN2RtMDJYbllNczRWRUEwWHIx
aXcvKzluUHNneWJ6bmtMR0gxV3c3NHNuTzRpCjU4OEpaZXQwMTBvUDNGR240M3IzdTkvZDJjWG54
OHUyTDc4OC82SG9qN0psWjV4eGhsK0hscXVHSUhTOWhLN29tSHpyVzk4cTNaZEIKcm1INW9WKzJu
MkcrZkwvSTJ2NEJEYnp1NCtYb09LaFJBbVZWMWFtSVFzaVkzZUlXdDlqcG1JeTY3M3Z0dFpmUGVx
eGJ0ODdKVjUwYQo0VGpubkhQODhGSXQ0bk5ZQ3lvNmRtWG5qTitJM0o4aVoxMVBoeDU2NkE2TlB1
aC9jNmlVcm95d3NydnFRbjI1UWUrWC9ROGM5WHdPCnU2VnRpcmQ3bE8rUXNFejFoemszNHZrSERV
L3JlT2EzYWRCMVhPVmNLdnBmby8rSjhmODRyVjlaUVdVcFFqZG9HNnBldjJYbldGaG4Kdi80d3gx
ZmJYblJ0OTF1bXBpM0hzZTczdjB2clVnbVN1SkdXUWRlajVsZFg5TDlrNGQyZHR6OU1wNC9BS0FK
cUtWQWxqOVR5bGJLawpkaFBEUDNoUXYzRTNiOTdzWXdiRkRidnNzb3ZidUhHajcrdmFVMWNwQUZG
Um9SQkFxT0tUM1luZGFidFZyRXBmUUE5LytNTjlvQkptCjBJTklWSFFrdm9pVndsV25IM2I2UWFH
TlZLZmlGUlpWK1NCRDQvcU1ncDdRYWZtcXhLd2ZxOE1HSVBGNjlWbWxhTldWclZ2L1ZNT1gKOHpE
eis0VU8rS1BpWkNyYW93Qkd4YzFVakVRSFQrbHBqZXVnNlVERjNUUzNQVjYzdGlrZXIrSVk3MDhZ
MXNrWU92MGpWcWVtUXZzRgpJR0crZnYyeVk5anZNMFhyMW85aUhXOTlZWWJPTWlCK1VBRzBBcEQ4
T2FFaWh6b25RMTBwemF3TExGaVZiVjkrZVdHOW9XOTNydjJQCmJ3VnJLbmFtYXl5K0hzSjZOSDk4
VE5SSVJObStoSFVNMHkvYno2SmxGRm5yV0ErNjd1UGxhUi90cnEvNzg1Ly83QnZDVUJFM3UrT1MK
elpJM0hNZSthNTJ4N2ZyMTY3T2lrVXUxaUplbmpZL0g0Mk5YZHM1a094NE5GRG5yZXVxM0wxcEg2
Q3pibVAxdjF6VHRhOUg3WmR1VwpQeFpoSGFGZmRqNkgrZFNQdDN1VTc1QjRtZU00TjhMeTR1TVh0
amU4dDV6SE02eGptSDdaOFlxWFVYUnMxQktZL3NmRjUxaDhiT0psCjlCdld2Rld1M3lyYm5GL2ZN
TWMzdiszeHRaMWZYaGhmcm1QZDczcnB0MzFGMTJPLzdZdlB2WDd2aDJuMEVSaFZRTlV3ZE1QdXdB
TVAKOUwrYndybXJtK3BLSkt4YXRjcFBWMy8xNnRYK0JxM2UwKy9lU2dGSWZrTlZIajNmNlllYmZ2
VG9QVFc3Rlg2VTZVNUpLTE9kLzh4LwovL3RmZi9kZjJZQmhPOTFsVmtYZlVidXE2NjQ2ZjM3NzlJ
TkxkeW8rOWFsUGVSczFONnQ5VVZaSDBXSzRLNW4vWEwveHF0dFNkZjUrCjZ5eWFOdXF5ZGVkVlh3
SjZWZTNHdVc0OW0wVExVNEFhb25UZGhkVzVWbFMvNk1JTEwvU2Z5VzkzK01JYWRmdTBYTFU2WjhX
NjNEdmUKOFE1ZkQrWGIzLzYyMjdCaFEzNlZPNHlySEgvVmZkbGhBYm1Sc3YzTXpkNTNORDdPVlYz
VTNLenV4S3BwUDVYVDF3K05vbTdjKzU1Zgp6emdzOHN1TXg2dmF4Si9WY095Y2YwL2p1bm1rbHVh
VUNkWVhnektLdWdFU3VrSHZqN3B0V3NkU3p1ZHhmWWNzOTdrUkRPUCtxR1psCnh6TmVWMzY0NnJy
N0hadC8vT01mUXowTEpiL3VlTHpLOVZ0MW0rUDFUT1A0eHVzZlpkdmo1Y1REZzY3SGVENkdFYmdx
Q1l4VUNWM0IKaG42d2hhSW4ybkZWRmxlcVZqKytOQnc2L1FQVkhjOC8vZWxQWVpJdmZxRzd5b3Fj
bFBHSUsxNnJpSW51TXZicnJNeTlUL2RZZllycwo3ZkJqTDVzdzVFRFZkVmVkdjk5bTZJdGY2VlUx
YWF4bnFxaFlsdHBOVmtZbi9oSFE3N1B4dEtyYlVuVityV3RZMTZVc085NFhmY0hwCmp2YVJSeDRa
VDk1aFdObWhmdDA0MTYyN2ZIcWduSjdyRURxbEdCV3hoMnhibUI3NkNnd1U2ZXU4N05lTnVuMVdo
dEpwRzk3MnRyZjUKNGlQNjBhaUF0YXdiZGwrS1hQUExMOXZQL1B6OXh1UGpYTVhsZDcvN25hL2ty
K3hQbkozcXR3NU5HL2UrNTllelZJdVZjajJGb253cQpycUpza2lybXh0Mmc5NnNjdDNpWllYaXA1
L080dmtPR1BUZkM5ZzdxcjVUanFXMHN1bzZySEsraVk2T2l4bnJ2cjMvOWE4WVJGd01OCkU0dTJv
ZXIxVzJXYnc3cERmNXpITnl4VC9Va2Q2M2lkWVhqUTlSam1LZXNQdS8xbHkrRjlCTVlsTUZRQW9t
SXA2dFFzWWR5cGJXa1YKQ2JIS21uNnl2c3pVMUtOK3FLbEZGYlhhb3dCRG5WcTlVdnBGUDdaVmRs
c3Z0YUtsK2gwcXJxVzdXeXFTcFhYcHg1YmF3WTZiall5ZgpyS2d2UzdVVUZZcURLY3VpTzVMcXdy
YjZrY1UvdWlPaVYralVra3BvMWFoczNmcmhHZWJWNTh2bTE0OW9CVjVxM2FLb3N3cjMvcTZqCml0
RW9wYTJ5NWJxYnJYL3krWDhTazl6Mi9QYm1YVWZabHZ5eU5hNGYrcUZUK1c1bGYwSVpmNTFyS2tz
WU9tVWg5QUF1VGRlUFdBV3kKNFp3b095WmhHWEcvYU4xV3NkMVp4V2tmRUlmNTlRTk5YMnFoYUZq
K25OQzVyUXlKNmpTRlRrOUIxNTB3cmFkcysvTExDOHNJZmUybgpXcVpScDVibTlQRFBrSjBaZEV5
RzJaZEJybHBmZkJ6SzlsUHo5K3VLck10YzRtWHAvNFYrM09pSGpKYW5JaUc2WWFFZlFYcmxEY2Ux
CjcvRVBLbG1IZlZtS3hUU3ZKMjI3L28rRkg0MTZ0b1grYjZ1Rk54V25WVEdRdUJ2MGZ0bHh5eCtM
ZUxrYUhuUSt4K2ViNW8yM2U5VHYKRUMxUDNURG5oaldJNHM4M3JiK29tK2J4ekRzTnVvN0xqbGU4
ZjBYSEp2enZDLy9qOU4ydkd5SGhmTkl5Qm0xRDFldTNiSnNIZmM4TwpjM3psVjNSdHh4NWhlRG1Q
ZGIvckpUN3Z0UTJEcmtlOXIvbmpjelgramFQMzg5dXY0NmZudW9YZlRacUhEb0dKQzlnL2tJR2Qz
YW4zCkxjSFlocVZXV1RGOXhDTWU0VjlxQWNhS1dxWDJ3OW5YYkZmck5HcTF5Q3JMK3VYWkQ0WFVm
bUQ3MXF2c2g2T2ZabmY1L1dlMExMdWIKbFZweGltemRGcXlrVmhRZ3RSL2dmaDdOR3pxMUFLU1dx
T3lIZldvWFlxb1drT3h1VEhnN3RVcnYvbk5xWGNvQ21XeTZCdFI2bFJWeApTbTkwb3h1bEZneWxG
aGlrRmlDbDlvUFJ0OENrZVlyV2JjV2tVcXVQa1ZwZ2tOb1BRTTNxdTZMNTlhYldvZlhGcllNc2ZH
ckh2OWFjCllXcE43MllUdFcveHVONlk5TFpuRzdNNEVMdGFVNlJMZHN3dlYrTXZmL25MVS92Q1Nx
M3llZnE2MTcwdWZlWXpuK2xiUWRON09sK3MKa1FMZk1vOWFZRk9yQ2xaSEpyWGlhNzZsck9jLy8v
bStsUkJyOU1DM29LWFBERG9tZWovdUJxMWI4K2tjMGZueXBqZTl5YmZtWnBYagpVL3NDOVlzb09p
YzAzWXFQK1hQTEh0NlpXbjJOMU9vOHBacXVybWo3aXBiblA3VDR4NG91cGxacE1yVWlET2twcDV5
U1duTy92aVdoClljNlBRZnVpeFE5eTdYY2N5dll6M200Tmwxa1h1ZVNYWThYZi9QOEFDN3g4cTNG
cUxjNktEZm4vUmRiVWQ5L3JkSlI5VjJ0NzlxWHQKV3pPenN0ZisvOXIxcm5jOS96L3FPOS81anQr
OHFoYlR2SjZzN3BLL25peUw1cStuWnozcldYNWMvNHYxZjlySzhQcnpTdGVhdXJMMwppNDdiS09k
ei9uelQ5ME4rdTVmNkhlSjNLdm96Nk54UUswUjJnOHY3NlArMDNleUlQcmw5Y0pySGM3bitQeGI5
cjlGZVcrTW8vanZBCnNuLyt1ck1mK2p0OHp3MzZYN0tVNjdmb0hOTzJsSDNQRGpxK3cxemJXa2Zj
TGRleDduZTk2RHJJbi9lRHJzZGh2Z2ZpN2RkdkpQMCsKMDI4dC9lK2tRMkFVZ1ZGYXdhcHB4Wk9N
ZXJRNlpUaFVhU1hmNmE2RU5aUHJ5eS9IOVR2MGxHRnJWczluUlJUbHE0NUp2dFBkWmxXZwpXMnBY
dE82aTVRMmFYM1U1MVBhMi9mZ3ErcmgvS3JMS1hvZE9keVRpOFRCOW1QNmdiZW4zK1NyelYzV3Rz
bXh0bTlMNk9tN3g4ZTYzCnpacW1aZXNPdE83V0tqdVNMNG96em5YclBOV3pXVlEvUnkybUROTnAy
NVNCMC83bzdyd3lmbkZYZGZ2Q1ozV25UdHVoRm1xMHovbEcKQ3NKOFJmMnlmU2x6elMrM2JEL3o4
MnQ4MEhHdTRxSTdlK0Z1ZmI5eklML3VjZTk3ZnZsVkxWYks5V1JCdjN2Z0F4L296MVBkVGRhNQpw
ZGFTN0FhVGI1bXY3SDA1VkRsdXNkczR6dWVxM3lIeCtzTncyYmtSNWh2VVh5bkhVOXRZZGgwUGM3
ektqbzB5US9wZnBBenNVNS82ClZKL3B0eC9NR1ZIWk5sUzlmZ2R0YzluMzdEaU9iN1pqTnJEY3h6
cGVWMzU0bU9zeC81bjhlSDc3Vld5NDMyK3AvT2NZUjJDUWdLb08KNlBmOEptc3RWZzFKcVhpNHFo
am8rdFB2V3YyLzBFdkZDUFdzTkpYOFVkWlBkV29uSG9BTTJwR2k5MElBOHBhM3ZLVm9saFUxWFpW
awoxWEtTbXJla1F3QUJCRmFTd0Vrbm5lU0REWDF4eEowYU5sQ3dyZUtRQ2thSzNyZE1VUHd4aG1k
VW9GOEFNa21LV2ZtZUxidGV1UjRuCmVkYXhycnlBdmlmVUVwYnFiU2tBMFUwR0s5SGlBL1lRZ0tp
S3didmYvVzUvYzFiQlNBaEFSbTlHS3I4MVl4N1hIWmxRNW4vTWkxNjIKeGVrcHNXb0dqdzRCQkJC
WWFRSnFTbHAxUDFSV1hzOWowaGVHNnVDcGRUNzltTkg0b1BkWDJ2NndQZE1SVUIwUVpYeDFwek5m
ZDNFUwpXelFyMzdObDErc2tyRmtIQWtVQ3V2Ymo2MTh0S3VweEV5ZWVlR0wyRVQzalRWbFQvYStJ
dXhXZkFiRXlpbGxGS1h0U3R0K3hlQWNZClJnQUJCQkNvSnFEaUszcXVob3JHNmNHcytidW9aZTlY
V3h0elg5MEVyTzZDTy8vODgvMXVLZE92aGpIb2xrK0E2M0g1YkZueWFBSnEKd1ZZWkVQMCtWd1lr
QkNRdmZPRUxuVDBoM1U4LzRZUVRmQUNpOTVVQlVkSGxxMHdSck5GNCtEUUNDQ0NBQUFJSUlJQUFB
Z2lNVTBBQgpTSGdRWVJ5QTZMRWJ5cVFmZi96eDdwQkREdkhQbWxJZDFyZ095RkROOEk1elkxa1dB
Z2dnZ0FBQ0NDQ0FBQUlJWEgwRTRpSldhdVpkCjljVFVWMVpFMVNuMGZuaHByd2xBcmo3SG5qMUJB
QUVFRUVBQUFRUVFRR0RpQW5GZEVBVWFxbU9vdm9LUGZBQ2ljUUtRaVI4aVZvZ0EKQWdnZ2dBQUND
Q0NBd0ZWYlFQVTVRbFpEL2RDcG1meWl3Q05NSndBSld2UVJRQUFCQkJCQUFBRUVFRUJnS0lFNDZO
QUhOSzZnUk0rWAowckNDRFRXN3EybWhyMmthWC9ITjhBNGx3RXdJSUlBQUFnZ2dnQUFDQ0NBd01R
RUZFaUdqb1FlSDZyVmx5eGFuaDRhcnhTc1Z5d3JQCi9sQS9CQ2dFSUJNN1JLd0lBUVFRUUFBQkJC
QkFBSUdyajRDeUd1ZWRkNTY3NUpKTC9ET2tWUFJLUWNmcTFhdDlzN3hxK1VxdFkra1YKV3NGUzhL
SG5UZjAvdEc1Q0tscHRoSXNBQUFBQVNVVk9SSzVDWUlJPQoKSW5kZXg6IExheW91dFRlc3RzL2Zh
c3QvbXVsdGljb2wvc2luZ2xlLWxpbmUtZXhwZWN0ZWQucG5nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2Fubm90IGRp
c3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBpbWFn
ZS9wbmcKCmlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUF5QUFBQUpZQ0FZQUFBQ2Fkb0p3QUFBQzdt
bERRMUJKUTBNZ1VISnZabWxzWlFBQWVBR0YKVk05ckUwRVUvalp1cWRBaUNGcHJEcko0a0NKSldh
dG9SZFEyL1JGaWF3emJIN1pGa0dRelNkWnVOdXZ1SnJXbGlPVGkwU3JlUmUyaApCLytBSG5yd1pD
OUtoVnBGS042cktHS2hGeTN4elc1TXRxWHF3TTUrODk0MzczMXZkdDhBRFhMU05QV0FCT1FOeDFL
aUVXbHNmRUpxCi9JZ0FqcUlKUVRRbFZkdnNUaVFHUVlOeitYdm4ySG9QZ1Z0V3czdjdkN0ozclpy
U3Rwb0hoUDFBNEVlYTJTcXc3eGR4Q2xrU0FvZzgKMzZFcHgzUUkzK1BZOHV5UE9VNTVlTUcxRHlz
OXhGa2lmRUExTGM1L1RiaFR6U1hUUUlOSU9KVDFjVkkrbk5lTGxOY2RCMmx1WnNiSQpFTDFQa0th
N3pPNnJZcUdjVHZZT2tMMmQ5SDVPczk0K3dpSENDeG10UDBhNGpaNzFqTlUvNG1IaHBPYkVoajBj
R0RYMCtHQVZ0eHFwCitEWENGRjhRVFNlaVZISFpMZzN4bUs3OVZ2SktnbkNRT01wa1lZQnpXa2hQ
MTB4dStMcUhCWDBtMXhPdjRuZFdVZUY1anhObjN0VGQKNzBYYUFxOHdEaDBNR2d5YURVaFFFRVVF
WVppd1VFQ0dQQm94TkxKeVB5T3JCaHVUZXpKMUpHcTdkR0pFc1VGN050dzl0MUdrM1R6KwpLQ0p4
bEVPMUNKTDhRZjRxcjhsUDVYbjV5MXl3MkZiM2xLMmJtcnJ5NER2RjVabTVHaDdYMDhqamMwMWVm
SlhVZHBOWFI1YXNlWHE4Cm11d2FQK3hYbHpIbWdqV1B4SE93Ky9FdFg1WE1seW1NRk1YalZmUHFT
NFIxV2pFMzM1OXNmenM5NGk3UExyWFdjNjJKaXpkV201ZG4KL1dwSSsrNnF2SlBtVmZsUFh2WHgv
R2ZOeEdQaUtURW1kb3JuSVltWHhTN3hrdGhMcXd2aVlHM0hDSjJWaGluU2JaSDZKTlZnWUpxOAo5
UzlkUDF0NHZVWi9EUFZSbEJuTTBsU0o5My9DS21RMG5ia09iL3FQMjhmOEYrVDNpdWVmS0FJdmJP
REltYnB0VTNIdkVLRmxwVzV6CnJnSVh2OUY5OExadWE2TitPUHdFV0R5ckZxMVNOWjhndkFFY2Rv
ZDZIdWdwbU5PV2xzMDVVb2NzbjVPNjZjcGlVc3hRMjBOU1V0Y2wKMTJWTEZyT1pWV0xwZHRpWjB4
MXVIS0U1UXZmRXAwcGxrL3F2OFJHdy9iQlMrZm1zVXRsK1RocldnWmY2YjhDOC9VWEFlSXVKQUFB
ZwpBRWxFUVZSNEFleWRCYmdkdGZhM1YybHhLQlIzZDRvVnAyaHhkeXN1RjNlN3VMdTdPeGQzZDNj
cGNJR0xGU2hXSEFxbFdKSDU4c3VmCnpEZG5PbnIyN2hIT20rYzVaeVRKU3ZKT1p2YXN5VnBKdDhn
RkkwQUFBaENBQUFRZ0FBRUlRQUFDRUdnREFxTzBRUmtVQVFFSVFBQUMKRUlBQUJDQUFBUWhBd0JO
QUFhRWpRQUFDRUlBQUJDQUFBUWhBQUFKdFJnQUZwTTFRVXhBRUlBQUJDRUFBQWhDQUFBUWdnQUpD
SDRBQQpCQ0FBQVFoQUFBSVFnQUFFMm93QUNraWJvYVlnQ0VBQUFoQ0FBQVFnQUFFSVFBQUZoRDRB
QVFoQUFBSVFnQUFFSUFBQkNMUVpBUlNRCk5rTk5RUkNBQUFRZ0FBRUlRQUFDRUlBQUNnaDlBQUlR
Z0FBRUlBQUJDRUFBQWhCb013SW9JRzJHbW9JZ0FBRUlRQUFDRUlBQUJDQUEKQVJRUStnQUVJQUFC
Q0VBQUFoQ0FBQVFnMEdZRVVFRGFERFVGUVFBQ0VJQUFCQ0FBQVFoQUFBSW9JUFFCQ0VBQUFoQ0FB
QVFnQUFFSQpRS0ROQ0tDQXRCbHFDb0lBQkNBQUFRaEFBQUlRZ0FBRVVFRG9BeENBQUFRZ0FBRUlR
QUFDRUlCQW14RkFBV2t6MUJRRUFRaEFBQUlRCmdBQUVJQUFCQ0tDQTBBY2dBQUVJUUFBQ0VJQUFC
Q0FBZ1RZamdBTFNacWdwQ0FJUWdBQUVJQUFCQ0VBQUFoQm9xZ0l5Yk5ndysrU1QKVDNLcGZ2dnR0
elp3NE1EYytJNGFVZGF1MXRiN2wxOStzUTgvL0xDMTJlTjhlVnkvK3VvcmUrU1JSK3k3Nzc2TDAr
YnRmUDc1NTZhLwpFTEx5REIwNjFENzY2Q09mNU1jZmY3UmZmLzAxSkkrM1ZkSU1IanpZZnZycHB6
aFBXKzM4OXR0djlzd3p6K1FXbDhjeE4wUE5pTEx5CmE0cHJPSGxIcTAvRERXcG5BWjJCWjdPZU9Y
VlJqNnhuYUpWNnRHZlpaZlVyNnpOZDdabWthNlhmaDd4UXhpc3ZYOWI1OXJvWHN1cFMKNTl6STdo
TjE2cEpNMjh4cms1UTdNdmJUZGUwSVRPdThyNDBNSnUwaHMxUUJXVzIxMWF4WHIxNjIwa29yMlFZ
YmJHRGR1M2UzNmFlZgozdFpiYnoxYmZQSEYvZkdWVjE1cDExeHpqVTA2NmFSMjFWVlg1YmJqMEVN
UHRiWFdXaXMzdmlOR1ZHbFhhK3A5L2ZYWDJ4UlRUR0duCm5ucHFhN0szeUpQRjljSUxMN1RycnJ2
T0huLzhjWnR6empsTk4xdzZEQmt5eExiYWFpdGJjc2tsN2Zqamo3Y3p6ampEbGx0dU9ldlgKcjUr
dHM4NDZjWEw5SUd5MjJXYTJ6ejc3K0RRTExyaWdMYnJvb3ZicXE2L1dTdlAyMjIvYnlpdXZiQ3V1
dUtKTk1za2t0dHR1dThYNQpSL2JPODg4L2J3c3NzRUNMZHFYTHpPS1lUdFBhNHlybHQxWjJhL0ox
dFBxMHBnMGRLVTluNE5uTVowNGQ5aVByR1ZxbER1MVpkbG45CnF2U1pydlJNdXVDQ0MyekNDU2Uw
RzIrOE1STmRGVjZaR1ROT3R0ZTlrRkdWMnFkR1pwK29YWm0vTXpUejJyUzJEbFh6WmRXMXZabFcK
ZVYrcjJyNU9sUzRxQ1N1c3NFTDB3UWNmeEtuR0dHT01hTXN0dDR5UFR6bmxsTWc5T1B6eDdMUFBI
aDF6ekRGeFhIcm5tMisraWQ1OQo5OTMwNmRKajk2VTljbC95UzlNVkpXaEVSbG03aXNvdGl1dmJ0
MiswNjY2N0ZpV3BGSmZtNnI0aVJXT1BQWGIwNTU5Lyt2eFBQLzMwCkNITGVmUFBOYU1vcHA0dzIz
M3p6eUNrbmNmeGZmLzBWN2IvLy90RXNzOHdTbjF0Ly9mV2pOZGRjTXo0ZVBueDROTTg4ODBUdWh5
SSsKVjVaR2RUbnp6RE1qOTZYQjU3bmhoaHNpZDZORXI3MzJXaXhqWk8rY2ZQTEprVk9TNDJMU2ZT
TE5NVTdZcEoxMCtVMFMyMm94SGFrKwo2V3ZSNmthMVk4YU94RE1QUTdPZU9Ybnk4ODZQckdkb1Zu
bnB2dFNXWldmVnAraGN1cytrNjk3Vm5rbDZQcDkyMm1tNXlOSzhjaE5XCmlHaXZleUdyYXVucm5w
VW1uQnZaZlNLVVUzZmJ6R3RUdCt5NjZkTjFiVSttVmQ3WDZ2U1BNaGJObEZWV1ZsbDg2UWpJWG52
dDVVYzgKOHJTcTdiZmYzbjloVi95b280NXEzYnAxeTB2cXYyN01QUFBNSThTN1NvNXdMcHo0L2Zm
Zi9kZjNKNTk4TXB5cXRFM0tiSzJNVUZCWgp1MEs2dXR2UlJ4KzlrRmVRbDJ4TE9KZmM2cXRSa3V2
cnI3OXVUa213VVViNXY4dTcyR0tMSlpPYlV3Yk1LUjQrWGwrZFJodHR0RGhlCjE4OHBrZVlVa1Bp
Y1JpNWtXaWVPQ3VKeDJXV1h0VER0S2t1am9YWDFsUWttbU1ETDBFakl1T09PYXhOTk5KRS9ib3Qv
YW1mb24xbDkKSXMyeDJYVktsdDlzMmEyUmwxZWZQLzc0b3pYaVdwMG42MW9VQ1N1N0g0cnk1c1Ux
UTJZZXo3d3kyK044czU0NWRlcytzcDZoNlhwawo5YVcyS2p0ZGx5ckh5VDZUVmZldTlrd3F1MVpK
WGxYNEZxV3BlaThVeVdoR1hOWjFEM0t6bnNXdDdSUE5lTWFGZW1WdG0zbHRzdVEzCjgxeTZycTFs
Mm93NmxiMnZGZldQdXVVM1UxYmRzclBTbHlvZ01wY3BDdTVMdTdrdkNYRVM5d1hkTkp3MXpUVFRX
Ty9ldlczUW9FRSsKVHY0Rko1NTRvamZkQ1lrMURIcmVlZWY1OCttWDVKRG05Tk5QdHp2dXVNTnV1
KzAyMjJLTExienZ3SmRmZm1sU2pKWmFhaW1iZi83NQo3Ym5ubmd2SkxVdG1sb3c0dzk4N3NnYzk2
S0NEN0lRVFRyQU5OOXpRbkliY0lrbGV1NVNvcUQ1bGNrTWhyN3p5aXNtMGFlKzk5NDVOCm03TGFF
dEtIYlpycnhSZGZiSWNmZnJqcHdiWHp6anQ3czZtUU5td2ZlT0FCZSttbGwyenJyYmMyTjZJVlRz
ZGJLUzR5cXd0aG80MDIKc3BkZmZ0bVdYMzU1MzFhZG4yKysrV3k3N2JZTFNhd3NUYytlUFZzb09o
cHlQT3VzczJ6eXlTZVBaU1IzM252dlBkdHZ2LzM4ZGI3egp6anQ5ZVRLaGV2YlpaMDAzckV3QWxm
ZllZNC8xMmNUS2plaDRtVG9oODdOWlo1M1ZkdGhoaDZUWWVEL2RKOTUvLy8wUittZWNPTEZUCmRE
MmxaTzJ5eXk3K0dzclVVQ1ptU3A4Vnl1cGJ0LzJQUHZxb3Z3WXlrN3Zra2t0c3hobG50TmxtbXky
Ky83THFrRDczOE1NUCsvNHYKczBEZDAyKzg4WVpQSWpNV21mR3R1dXFxSmtWVFFkZEFabmdxVjZH
bzdXVnRUVitMdEgvUVF3ODlaQnR2dkxFZGNzZ2g1a2JuL0hYWAo4MFhuRmRRM3Bkd2VmUERCWG5t
ZWVPS0o3WVVYWGlpc1U1bE15YzI3ci9QS1U1NFFxakFMYWJXOTVaWmJUUFZlZSsyMTdmdnZ2N2ZM
Ckw3L2NIK3VlVTE5UTBIVlpZb2tsWXQrckl1WlY2dGphWjA1cjZxcjZ0K1laV3JkZjUvV2wxcFN0
T2lkRDNYdXlyTjhuWldzL1hmZXUKK2t6NitlZWYvZStXVExyMSsvN1dXMitsVWNYSFJmZUFFaFU5
cjJNaGJpZnJYa2pHYTc5SVZsRTl5dnB3K3JycitaZjNMRTcvM3BmSgpWcjNWRDh2ZXM1U3VrVFlv
ZnpMVWZmNHBiNlBsNXoydmsvWEsybThOMHpwbEZiV3J5dnRhVnYvSUszL0FnQUhtckpiODcvVmpq
ejFtCk9uYldLbmJGRlZmNHBtZkp5bUxTWnVlY1Zsd3JwRTJ3a3Bubm5udHViNXJqZnR3ajk4VThj
aTlBMGJiYmJ1dVRPQWVieUwwTVJ1NkwKdHo5Mm1samtYaWpqN0h2dXVXZHNNaFNmL0h0bnV1bW1p
OXlMcGo5eUw5YVIrM29lT1dkbm45NjllRVR1aHp0eS9neFJrY3lrakxSOApIVHNmbDhpOTNQb285
M0x1ellQY3hmUEhSZTBxcWsrWlhPZHJFYm1YVkYvRytlZWZIN2xPNHZmMXI2Z3RjU0szaythcU9K
azNPU1VpCm1hekYva2tubmVUYmx5eXZSWUxVd1E4Ly9CQXR2ZlRTUG8rdW4xTUlVeW1pcUVvYVpm
cmlpeThpcDBqNit1MjQ0NDR0ekwrU1F0MlAKZmVTVW5NajVHMFUzM1hSVDVINlVJcGw1elRUVFRM
NHZhTWowc01NT2k5eUlSdVFjNW4xV21aUWxUUUJsUHFnOEljZ0ViTExKSmd1SApVYkpQWkhHTUV5
WjJpdnFKODZXSm5PTG1VOHRNYmFHRkZvcWNEMVdjTzExK1VYM3J0bDljWlRhbmU4NHBiSkdiM0NC
eUNsajByMy85Ckt5NC92Wk9zajh6d1ZKOWc2dWlVMkdqZGRkZU5zNmh0emo4b1BsYS9UOGNYdGIy
b3JSS2F2Qlp4SVgvdnVJOFlrZk1aOG4zQmpZUkcKenEvSlAyZW1ubnBxbjBMM3JmTlRpK2FkZDE3
ZlYvUk1rS2xuMGZVb2sxbDBYK2VWbCtTcGlwVXgrN3Q1OGFaUG56NlIreWdRSCt1ZQpjejVhOGZI
ZGQ5OGR1WkhIK0xpb2ZYbDFiTVl6UnhXb1c5ZldQa05iMDYvVGZhbTFaY2VnLzk2cGUwOHFXMW0v
VC9lWlpOMjc0ak5wCnFxbW1pdHpIRHY4Ym8yZVJlTXd3d3d6KzkxQTgwN3lLN2dHbEwzcGVGOTBM
eXBzT1JiS0s2bEdsRHlldmU5R3pPTjBueW1SWGZZOVEKV3h0dFE5YTFLZnJOU1BOdHBQeWk1M1c2
SEIwbjYxcVhhZDJ5aXRxbHVwUzlyeWxOc24rVWxhLzNiNmRBUlBmZWUyOTB6ejMzUk83RApsVVRF
SVNrclB0bE9PNlVqSUhVMUlUbXRMN3Zzc3VZZUpMYk1Nc3ZFWDB6MWRXK3V1ZVl5MTA0dlVsLzU1
TVRzQVBsajk2SVV4MldWCkdVeG4zTVh5NldTU2RkOTk5L212b1Y5Ly9iVTk4Y1FUL3N0aGtjd2dJ
eTFmTTBYcEM4akNDeS9zby9UVnhTa0VOdTIwMDhaSjg5cFYKVko4cWNsV0F5dElRb015aVFxaktK
ODAxNUMvYWhsbEdxcG8vYWZSQ295WUhISENBeVhGZFgvZlBQZmZjRmtWVVNhTU0rb29rOHl0OQpU
ZGRYR1kwNFpRVjl3WGN2bEY2VGR5KzZOdWFZWS9weU5RdVg2aUZlZSt5eGgrOExZV1l1cFVsZTQ3
SEdHcXZGY1ZZNUlYMFZqa1hYClUzM3hxYWVlOHFNUUtrZW1CQnBodXV1dXUveW9UVmJaUmZXdDIz
NTlMVlFlM1dQcXErcTdta3pnblhmZXlTcDZoSE9xcnlZZTBOY1MKQmZGTmZubDBId2o4Vjdrd29x
bTI2am9xVkdsN1VWdTlFUGN2WEl0d0hMYnVnV2xPMmJBMTFsakRUM3poSHVoK2hFdG1nYXJqSW9z
cwo0a2Q3bksyL3FhL29mdExYNDZMclVTYXo2TDdPS2k5cEFobnFYY1FzcEVsdU5TSEUvZmZmNzBj
S2RGNFRRbWowei8zZytHUWF0WEVLCnRkOHZZMTVXeDBhZU9hcEFuYnI2Q3J0L3JYbUd0clpmcC90
U2E4b085UTdidXZlazhsWHA5MEYrMklhNmQ5Vm5rbjRIVjE5OWRmLysKb01sUm5BOXFQTm9aR0ds
YmRnOFVQYStUY3JMdWhXUzg5b3RrbGRXamFoOE8xNzNvV1p6dUUyV3lxNzVITktzTlNXNTFubitO
bGwvMAp2RTdXS1d1L0x0TTZaWlcxSzZzK2VlZEMveWdyWCsvZnN1STU4TUFEL2FSUVdaUDlCRmw1
WmJYVithWXJJTW1HYWZZc0RUK0ZvTGdRCnI1ZGZ2ZkRvUVNOVEliMFFhSWF0dkJEeXVTOTcvdVZJ
Tm56Nms2bklndzgrNklkcXkyUUdHZWt5cEx6SUJDd1pMNU1PdllTRmtJeEwKdHF1b1BsWGtTZ0dU
ejBYYTFLMnNMYUZlMnFwdXlmb2w0N0wyeFZvaEtDTCtvT1NmSG9veWQ5TFFzRzVZWGJQMGJDVlYw
cWhzM1J3eQpxWk41aVJ2ZHlDMDUzU2I1akNTRGxCNEZLYUN0RGNreWtoemRGM1NUbVZqNDAzVXV1
cDR5K1JFWE1RakJqWUQ0WFNtM3JRbkp1aWwvCldmdVQ5US9wbmNOWnBhS1YxMzBWOGtxOGxFTE5u
cWFwbGtQUWZTb2xRRHdVcEZqcFpWK2hXVzFQdDljTC8vdWY0cExQQjVtWDZUN1UKUzdtQ1h2VEVQ
NFFxZFNxU1dYUmZaNVVYeWsxdWk1Z2wwNFY5bVptcEx3ZC9ONW5BQlhNTVhVZVpFY25rVmFGSys5
Sk1Ram5OZU9iVQpxV3NvTjNsOXF6NURsVmY1a25sMUg1VDE2MlQ2SUNQVW8wN1pJVS9ZcHVXVzNa
TWhYNTF0c2d6dGgrT3U4a3dhYjd6eFlseFNwQld5CnB1OHZ1d2VLbnRlaGdMeDdJY1NIYlpHc3Nu
cElSdkk2NmppckQ0ZnJyRzNSc3pndEszMmNsRjMxUGFKWmJWRGJRcWp6L0d1MC9MTG4KZGFoVDNq
Yk5NSDJjWkZxbnJDcnR5cXRUK3J6cXBGQ2xmTGtRNkhtaGorbkozODBnTThnS3grMjE3ZEZlQmF0
YzJRbHFLbHBOL3lxYgpaWDM5Q3krVmVmVnlwamZXbzBjUC8zVXdLMDFyWk1xZUx0aTdaOGtzT2xk
VW55cHlaZE90bHoxOXpaZnRmakswcGkzSi9IbjdjOHd4Cmg0OXlNMkhsSlluUGE1MFNLV0xoaDFa
K043SUJsK0luQlVSZlpLdWtpUVgrdlNNL0V5bWdic2FUZEZUdXNmSWtiNXprZm02bVZrWjgKL1BI
SGR1dXR0OGE1VlZiUjlaVGRzdnFDRk81eHhobkg1OU5vaFBwcTJxY2hGbHB6WjJTM1h4TVNhTlRn
MGtzdk5kbW02dUVaZ2g1aQp6bVRPMjZrZmNjUVJmaVJyL1BISDk5RnQwZlpRaitSV1BNUTNLN1My
VGtGbTBYMmRWVjdXdVNKbVdlbDFuK2xML2RWWFgyMWlLNThuCjFVZitUTTdFc2NVVTVxMXRuOHB0
eGpPblRsMnoycG84MXd6V1NYbDE5aHN0ZTJUZms4bTJkTVZua2taeTlkc1RmbitTUE1ydWdhTG4K
ZFpCVGRDK0VOTm9XeVNxclIxSk8xZjJpWjNGVkdTRmRsZmVJa2RHR09zKy9Sc3R2OUQ0T3JLcHM2
NVRWYUx1eTZsT2xmSDBJMVFjNQorVjF2czgwMi92Y2tTMVo3bjJ2NkNFalZCam5iUlhPMmQvNEZW
TU5VY21yVkQyMWVDQytiMDdzMVNEVGlrZndDSnJNdU9keVV5UXd5CjBtWG9JYWN2TERMYkNFRXlx
M3k1THFwUEZibDZzR3J0RkRrSjNYenp6YUg0MHJiRUNWdXhveUU2bWRvNGUzTC94VHRMUkRENzBJ
TlgKQ21JeWFMUm9PamVTRVJhZHJKSW1tVC9zNjNxRVVZSndydEd0dmhMWENYbDlRdVl2em9ZeS9w
T0pZTkgxMUJkNXpTNzI0b3N2eHNXcgpmNHVqVElQeVF0MzY1c2xwOUx5VTBaMTIyc2xQdnBBY3hV
bktkZjVjdnI5b2FGYy8zQ0ZVYlh0WlcvT3VSU2dudWRYWEhTMGU1WHdSCmtxZmovYXAxaWpPNG5h
VE1vdnM2bWFkc1A0OVpYajQzeGJsWDdDKzY2Q0pUWHBrNlNSSFdTSStVL3hCYTA3NlF0MW5Qbktw
MURlWG0KYlp2Rk9pbS9hbDhhR1dVbjY2SDlzbjZmVHA5WDk2NzJUQktYeno3N3pJL0VhdEtUZENp
N0I0cWUxMEZXM3IwUTRzTzJTRlpaUFlLTQpzbTI0N2xXZXhXV3lRbnpaTzFGSTE2dzJCSGxoVy9Y
NTEyajViWEVmaHpiVkthdlJkb1V5dFEzOW8wcjVtckJGbzN2S28vMTBDTExTCjU5djZ1SllDb2dl
cHBuZk5XaVZiRlplMnA3OFFaTyt2dnhBVXAyTzkzT3ZsUWJNektNaHIzNjB6RVg4NUR1bkRWbDhE
UC8zMFUzK28KTDRSNjRaV0psUHdSOUpKMzVKRkgrbWxvaTJRbVpTaGZNc2drU0xOQjZjZGVOdVg2
MHd4TU1qbFJLR3JYSnB0c2tsdWZNcmw2T1JVTAp2ZEJyZGg5cHFtR1dvYUsySk9zZTZoZTQ2bGly
a2V0YUphOUZNbysrMm1tSTF6bW9lVCtGcEttTjBzbk9mOTk5OS9Vdno4NEIwQ3VKCmVqa0xRUTgx
WFk5VlZsbkZuNnFTUm5WeDY1SDQ5aXFUWHRhbGVCNTExRkZCN0FoYjFVL3BRdEJpaWpyV2VZV2dK
SVVmZUkwNGFKRWgKOVZIOWNFbWhGTWNRZEQ3azFibDBuMGoyejVBbnVTMjZuaG9Ka3QrVGxPTVFO
Tk9ZSGtET2VkR2ZTcGRmVnQrNjdaZjh3RUlGcWoxSgpmcUZlWVp1c2ovcTg4dXJIVDNrMEtpY2xY
LzFUZndvYXp0ZHNaekxEMHZCNkNGWGFYdGJXOUxVSXNwUGI1TFhVN0M5U2dvTGZsdnBDCjhsbFRw
VTZTblNlejZMNVd2blI1T3Bma3FXT0ZQR2IvRnp2aWYvblZhSHBRZlQyVUtZcjhlRFFxckJuZmtq
OGFWZHFYVlVlZGE4WXoKUnpXdldsZWxWVi9VWHdpNlZ1RjZsYkd1MjYvVGZhbVJza045dzdidVBW
blc3OU45SnF2dXlXZDdxRWZZL3RPZVNXcFg4cGtsM3d2NQpIQWJmdENTdnNudWdpSTNLS2JvWEZK
OE1SYkxLNmlFNVpYMDRlZDMxRWF2b1dheituT3dUUmJLcnZrYzBvdzNKYXhQWVZYMytOVnArCjJU
TWsxQ2RzMDNXdHc3Uk9XVlhhVmZhK3Bqb24rMGZSTzdEUzZyMUtQb242OENsemF2bmFKaittSjJY
cFhWanZWVEt2RCsvWWt0Rm0Kd2YwWVZRck9SQ25TN0RLdVlwSDdZWXkwQUtGbVBncEJNeFc1Rjl2
SW1mZEVyckdSTTZtS3RBQ1VNNUh3TTFxNEY4UElUZHZwODJ1aApJYVZ4VG4xK0VjUGJiNzg5Y2w5
ZjQ1a3Vnc3l3ZFY5Yy9XeEhtaUhHS1IrUkF4cTVIMmwvemcwelJlNExvVStxT3ViSlRNc0lzc05X
Ck1pUkw3WE5mT3lKbml1S2p5dHFsUkhuMVVWeWVYQzNpNTB4MWZIMmZlZWFaeUwwc1I4NXBPbkl2
R3RIWlo1OGRGYlZGY2tOSWM5VXMKUWU3RnpMZkRUY25xNVlhMDZhMVRLaUwzVmRYUE11SytWRVJL
cjVsQm5KTjM1RjQrNCtUdUpUcHlFd3BFbXFsTXM1RzVINFBJVGNFYgp1WnU0Y2hvdFppbSttdEZF
OG5XOTNVdHZuRCs5NCt3Y0kyZWU1eGNPZEMrYmtXWXRjamVlYjVkbXYzTE9kZEhSUngvdGp6ZllZ
SVBJCjNUeVI4MCtKbkdtSUw4TXBVSDdXTlRmYTQyZDJFaWRuRCtuVE93ZDZQL3RXc2s5b3hvaGsv
OVJNSkZraDczb3FyZnE4K3I5bUdYTmYKSHlMM3NoNjNNYXY4b3ZyV2JiLzZxWHV3ZUdiSzZ5Wmo4
RE9HNlQ1eEV3aU0wSlIwZmR5RHlNOGlwVDdwRlBGSU15NnBQMjY2NmFZdApaaXJUREZUOSsvY2ZR
VjVSMjVXNHFLMktUMTRMM2VQcG9CbnpOTXVWKzVvVE9ST3dTRE9jT1VYWUozTW1TMzdoVGQwNzdx
TkduTFdzClRrVXlKU1R2dnM0cUw4MHoyWC95bU1VVlRlM29QdFNNU3lHb3pjbmpjTDZvZlZsMWJO
WXpKNVN2YlpXNk52SU1GYnM2L1ZwMVN2WWwKWjlaYStMdWs5SG5YV1hISlVQZWU1SmxVNzVrazFu
cTJPNlV0Y3M3bjBYSEhIUmZ0dnZ2dWZzWkx4V1hkWTBYM2dQTGtQYS9MN2dYbApUWWM4V1VwWFZJ
OHFmVGpaWi9WYnAyZGQxck5ZN3lYSjN5bk5lRlIwZjFSOWoyaTBEVm5YSnZDcit2eHJsR0hWK3po
ZDE3cE0xYTZxClpaVnhkVXRJVkhwZlMvYVBvbmRncDdEN21UNzErNi9nUGloRzdtT1duMEZTN1Za
SXkxSWE5M0dyeFN5c1BtRWIvT3VtTXRwTTIwa1UKSkExZlgrSTFTNE5NUG9KelpTSkppMTNadlVt
YkRrRWFyRXlBTkRRYTdNRExaS1psQkZsaEt4UWFVZEhNRW5WRFZuMkNqTmJJTFd0TAprTjJNcmI1
MDZ3dTRPRXB6VHE4Tm9oRXZMU0NvcndRYUhkRWFER21iM0NwcFZOZVFyaG4xenBLaDY2QXZhSExB
MWRmS1BIT2lrTGVzClQ0UjB5VzNSOVZTY2UxbjBmVnV6NXBTRnV2VXRrOWRvdkw2c2laMUNGaitO
ZnNqOFRxT1c2VkRXOXJLMkZsMExyWkdqMmE4MDJxbCsKS1B2V0txR29UbFZrRnQzWFZjcFhtaUpt
V1RMMFJVcWpJQ0drajhONWJZdmFsMHhYWmI4MXo1eDAzZExIVmNvTmFackJPc2dxNmtzaApUWExi
ekxLVGNyVmYxdS9UNmV2V1hmblZEL0ordStyMmticjFUZGUvR2NjYVpkZnZmZmh0TDVKWjFyNGlO
a1Z5cytLS1pKWFZJMHRlCjhsejZ1cGM5aTVONTgvYnIzdE9OdGlHckhuV2VmNDJXUHpMdjQzVGI2
cFRWYUx0VWRycC8xQ2svWGZlMExFMStVdlUzTlMycmtlTjIKVTBBYXFUUjVJUUNCdGlVZ016MjlG
R3Y0V2RNQUpzMkIycUltUVZsd0k2OU5LMjVreUV4V3JyMlpKZXZDUGdRZ0FJRzJKTUR6cnkxcApk
ODZ5YXZtQWRNNG1VbXNJUUtBUkFscnpSZjRJR3RHUk0zNWJLeC82aWhkOGVocHBSekx2eUpDWmxO
L2V6SkoxWVI4Q0VJQkFXeExnCitkZVd0RHR2V1l5QWRONXJSODBoMENZRVpEYW5DU00wVVlTbXpX
N3JvQm5pZ29PY0pqelFHaFNOaHBFaE0xbW45bWFXckF2N0VJQUEKQk5xU0FNKy90cVRkZWN0Q0Fl
bTgxNDZhUXdBQ0VJQUFCQ0FBQVFoQW9OTVJ3QVNyMDEweUtnd0JDRUFBQWhDQUFBUWdBSUhPU3dB
RgpwUE5lTzJvT0FRaEFBQUlRZ0FBRUlBQ0JUa2NBQmFUVFhUSXFEQUVJUUFBQ0VJQUFCQ0FBZ2M1
TEFBV2s4MTQ3YWc0QkNFQUFBaENBCkFBUWdBSUZPUndBRnBOTmRNaW9NQVFoQUFBSVFnQUFFSUFD
Qnprc0FCYVR6WGp0cURnRUlRQUFDRUlBQUJDQUFnVTVIQUFXazAxMHkKS2d3QkNFQUFBaENBQUFR
Z0FJSE9Td0FGcFBOZU8yb09BUWhBQUFJUWdBQUVJQUNCVGtjQUJhVFRYVElxREFFSVFBQUNFSUFB
QkNBQQpnYzVMQUFXazgxNDdhZzRCQ0VBQUFoQ0FBQVFnQUlGT1J3QUZwTk5kTWlvTUFRaEFBQUlR
Z0FBRUlBQ0J6a3NBQmFUelhqdHFEZ0VJClFBQUNFSUFBQkNBQWdVNUhBQVdrMDEweUtnd0JDRUFB
QWhDQUFBUWdBSUhPU3dBRnBQTmVPMm9PQVFoQUFBSVFnQUFFSUFDQlRrY0EKQmFUVFhUSXFEQUVJ
UUFBQ0VJQUFCQ0FBZ2M1TEFBV2s4MTQ3YWc0QkNFQUFBaENBQUFRZ0FJRk9Sd0FGcE5OZE1pb01B
UWhBQUFJUQpnQUFFSUFDQnprc0FCYVFOcnQxWFgzMWxqenp5aUgzMzNYZWxwZjMyMjIvMnpEUFA1
S2I3OXR0dmJlREFnU1BFMXlsajJMQmg5c2tuCm40d2dvNUVUZGNwUHR6RjkzRWc5c3ZMbU1jdEsy
OUhQZGNTMi9Qbm5uL2IyMjI5WFFxZStOM2p3NE55MHplb0xQLy84c3krakkvTEsKYlh5VEl0SU02
ektvbTc1SjFXNDNNZW4rbTlmK3JHZGMxcmwyYTBpVENrNzNueWFKYlVqTVR6LzkxRkIrTWtNQUFo
MlBRS2tDc3RwcQpxMW12WHIxc3BaVldzZzAyMk1DNmQrOXUwMDgvdmEyMzNucTIrT0tMKytNcnI3
eXk0N1dzZzlUb3dnc3Z0T3V1dTg0ZWYveHhtM1BPCk9VMFA5N3p3L1BQUDJ3SUxMR0RyckxOT1ho
STc5TkJEYmEyMTFtb1JYNmVNYTY2NXhpYWRkRks3NnFxcldzaG81S0JPK2VrMnBvOGIKcVVkZTNp
eG1lV2s3K3ZtTzFwWVhYM3pSNXAxM1h0dHV1KzFLMFYxd3dRVTI0WVFUMm8wMzNwaVp0bGw5NGJu
bm5yTzc3NzdibDlIUgplR1UydklrbnN4aldaVkEzZlJPcjMrYWlzdnB2VnZ1em5uRlo1OXE4QVUw
dU1Ldi9OTG1JVm9uNzZLT1A3UHJycjI5VlhqSkJBQUlkCmxFQlVFbFpZWVlYb2d3OCtpRk9OTWNZ
WTBaWmJiaGtmbjNMS0taRjdzWWlQNis3OCt1dXZrUnNkcUp1dFU2UjNYM3Vqc2NjZU8zSmYKMkh4
OW4zNzY2ZEo2bjN6eXlaRlRFSExUZmZQTk45Rzc3NzRieDFjcEk4MTQ5dGxuajQ0NTVwaFlSaU03
VmNwUHkwKzNNWDJjVHQvbwpjWnBaby9MUytkTjgwL0YxanN0a2pleTIxS2xyU0x2TExydEUvZnIx
QzRlRlcvWHQwMDQ3TFRkTm8zM2hoaHR1YUNHL0kvSUtqUys3CjFpRmQzVzJhWVpwQldibnA5R1hs
bDhrYjJmbkw1SmZGcC90dnV2MVp6N2lzYzJYbE5ETytVZVpGZFVuM242SzBiUm1uMzcwRER6eXcK
TFl1a0xBaEFZQ1FTS0IwQjJXdXZ2ZnlJUjU3K3RQMzIyL3N2KzNueDZmT3VMZkdwMzMvLzNUYmJi
RE43OHNrbjQzTjVPOGw4ZVduYQo2bnhlWGRMblgzLzlkUnMrZkxpTk1zci9ZVjVzc2NWS3F6amFh
S05adDI3ZGN0UHBDL0xNTTg4Y3g1ZVZrY1Y0MUZGSExTd2pGbDVoCnA2ejhMQkhwTnFhUHMvSTBj
aTdOcktxczlQWE15cGZGTnl0ZGxYTlZaT1cxcFVwZHE5UWhuZWFQUC81SW40cVAvL3JyTDcvZm8w
ZVAKdUkvSGtXNG5LMjlaMzJ1a0wzenh4UmQyL1BISDJ4NTc3QkZYSTQ5WG5LQ2RkcXBjNjFDMW9t
dWJGWmRtbUdSUXBkeGsrbENIdkcwVgplWGw1ZGI3Ui9FV3l5K0x5K20rNi9WblB1S3h6WmVVMUsz
NWtNMHYzbjJiVnU2NmNkTi9XNzU3TTVjTG9abDE1cEljQUJEb1dnVklGClpNVVZWeXlzc2Z2Q2Iz
Mzc5dlZwdnZ6eVM1UENzdFJTUzluODg4OXZNb1VJUWNPbjU1MTNucDE0NG9rV1hzUlBQLzEwdStP
T08reTIKMjI2ekxiYll3ckxzUExQeTZkeVVVMDVwWjUxMWxoY3ZFNmRaWjUzVmR0aGhoMUNjL2ZM
TEwzYlFRUWZaQ1NlY1lCdHV1S0c1cnpxVgo0dXEyUVVLejZuanh4UmZiNFljZjdsL0NkdDU1Wjl0
bm4zMTh1cko2eDVYTTJQbjg4ODg5djBVWFhkVEhacFdSenBiSFdEKytNaldZClpwcHBySGZ2M2pa
bzBLQTRheEdET0pIYnlTdmZmUjAwOTFYUjl0NTdiMjh1dHR0dXUvbnJrY3hidEYrVS81WmJickdK
SjU3WTFsNTcKYmZ2KysrL3Q4c3N2OThmTEw3Kzh2ZmZlZTE3c3FhZWVha3Nzc1lTNXI0U1dadmJv
bzQvYVJodHQ1Sy9ISlpkY1lqUE9PS1BOTnR0cwpMZG92L3dIVi82aWpqakkzQXVqVHF4OWxLY3Ba
ZlBQNERSZ3d3TXVUS2Q1amp6MW1PcDVubm5uc2lpdXU4UFhPa3BYa2xHNkw0ckw2ClhqS1A5bDkr
K1dYVGg0S0REejdZM01pWDUvWENDeTlZWGoyVjUrR0hIL2IzamxqcS9uN2pqVGQwMmdmeDJXbW5u
ZXpvbzQvMjk5eEwKTDcwVW92eTJLSzhTS0wvdUI1a0M2am54MWx0dnRjaWZQQ2lxWXpLZDlnODU1
SkFXNW90WnZOSjU2c2hQNXB6UkYrSUFBQ0FBU1VSQgpWSzNTajRyNmNkbTFWbGxaMS9haGh4Nnlq
VGZlMkxkMS8vMzN0OGtubjl6Znd6cWZGZElNeXNwTnB5OXJaNWE4b25hbjY1ak9MeFBSCk92ZTM1
TlVwVCttTCttKzYvVm5QdUt4emtwdlhsK3JlZjYxaHJ2S1RvZWozcnc2dnN0OWFQWFAzMjI4Ly83
dC81NTEzMm56enplZk4KaUo5OTlsbVRraVpUYmZYUlk0ODkxbGV2ckcxS2xOWHZROXZVOTlYdnBZ
Z1FJQUNCVGs3QWZXV29GZEltV0NHeis5b1pyYnp5eXRIUQpvVU85eVpGNzRZbmNEMGswWk1pUXlI
MnhpWnh2UTBnYTdibm5uckZaMG5UVFRSZTVoMU1jbDl3cHl1ZGU1RnVZRWNsVWJQMzExNCt6Ck81
K1Z5RDBFL2JGN1FkS3dTK1JlK1B4eFhseHIybEJVUjVtRHVOR1B1RTdhS2F2M21XZWVHVTAyMldR
dDhvUUQ1L0FZT1NVcm1taWkKaWNLcEtLdU1PUEx2blRUanVlZWVPM0l2dnBGN2FZbWNNM3JrWHND
amJiZmQxcWN1WXBDV3ErT3M4cGRjY3NuSStRWDU1RzRFS0ZwbwpvWVVpNTBzVVowKzNNWDFjbHI5
UG56N1IxbHR2SGN0YmV1bWxvNjIyMmlvK2RsL0lvc3N1dTh3ZnA1bTVyK1RSTExQTTR0dnNmakNq
CkR6LzhNSExLYS9TdmYvMHJ6dThVMjhncFQvN1kvWWo2dnVNVUVKODJUcFRZU2ZJdDR5Zm02b3Yz
M250dmRNODk5MFR1QlQ4aEtZcVMKc2xwRXVJTjBXNHI2WGpLdjdnUG54eFU1WDQzb3BwdHVpblJ2
dXBmKzNQdlYrU241ZmhwTUk1MGlIYTI3N3JxeHlGVlhYVFZ5U3I4Lwpsbm5oRkZOTUVUa0YwQitY
NVoxcXFxa2lwNEJGN3NPRE43MVVlMmVZWVFiL2pKQ0FaRjhvWStrTFRQd2JiN3p4SWwzVEVOSzh3
dm13CnJTcy81Tk8yU2o4cTY4ZEYxenJ2MnJvUEJkRWtrMHdTT1QrOHlDbkVrZk10OC9meTFGTlBI
VmN2eVRDTFFWRzU2ZlJWMnBtV1Y5YnUKdUtKLzc2VHoxN20vSmFKdWVVWDlOOTEreWM5NnhxWFBG
ZldsdXZkZmE1aXJuc21ROXh1bk5HVzhrdjFINll0K3M1d0NFam1sdy9kSApQVnVjY3VkL2gyZWFh
U2IvdXk1enRzTU9PeXh5by9xUm00U2w5TDdKNi9lcWg0SitUOXdvYXVSOFZmN3ZCUDhoQUlGT1M2
QjBCS1NxCmZ1VWV5T1lvK0svRTk5MTNuLy9xOGZYWFg5c1RUenpodjFTLyt1cXI1bDY0dkRqM3N1
ZlRCdGw1SmtmNndwMlhiOHd4eDJ4aFJqVFcKV0dQRng1cHg2cFZYWHJHRkYxN1lGNkd2ck9lZmY3
NU5PKzIwZmphcXZMald0S0dvanFGOXlXMVJ2WlBwc3ZiMVpYQ3V1ZVpxd1M0cgpYZGE1TkdOTkxy
RHNzc3VhZXlHMFpaWlpKcDdGcUloQmx0ejBPVjM3cDU1NnlvOGFLRTRtTjA1WnNMdnV1c3YwVmF3
c1ZNbnZsQTI3Ci8vNzdMWmhRTExmY2NxYXZiKzRsd0l2WDEyQ25qUHI5TkROOWRkZW9oemlLZ2Zx
RTgxK3dkOTU1SjY2YUhQUmxocUdnMFNISlVGRGEKdkJENGx2RVRjNDNJT1Z0bVB4R0FSb2ZTSWNo
S24wKzNwV3JmVzJTUlJmd29qL1A5TWFkSStIdEI5MERlL2FwcnBva1FORHFqSUJaaApsRUtqbXJx
UHc4aW96QXRYV1dXVnVLcEZlVU9pelRmZjNGWmZmWFhmNzJReTVYek1MT3NMZmhuTElFOWI5K0pv
UC96d2c3bVg4L2gwCm1sY2M4ZmRPSGZucHZHWDlxRW8vbHN5OGE1MTNiZDNMdWpsbHc5WllZdzAv
Q1loN21mU1RYR2hXdTNDTmtuWE5ZNUJYYmpwOVdUdEQKV1VGZTFYYUhmR0ViOHV1NHp2MWR0N3l5
L3B0dWY2aGYyYmFvTDlXOS8rb3lUOWV0NlBldkxpL0pMdnJOMHJOVWsxQm9WRmZQRnFYVgpKQ2x5
R2ovZ2dBUDhzME1ta1hyVzZGeFoyL0w2Zldpam5pK2FGTWY1ZzRSVGJDRUFnVTVLb0drS2lGNHU5
YUlpKzFIOXlXemp3UWNmCjlDWVc3b3U5ZjZIUlM0Zk1rZlFqcXRtMFFraisrSVJ6MnBibFM2Wk43
a3Zwa1psWFVxNU1VRlMvb3JqV3RLRzFkVXpXdDg2KzJwUnMKVjlXODZUekpZejNRTlN5dlVNU2dT
bGt5N2RHUHVING9RbkFqSUg1WEw3MWxvVXArRGNOTHVRMG1VVElQa3ZtZVRIOWtkaVhGUkthQgpJ
YVNacFkvSEhYZGNueStrMTNGU1dYSWpVckV5RzlLa3Q0Rm5GWDR5QjlRUHFCVGo1SDBRWkFaWjRU
aTVUZGE5VHQvVGk0R3VTd2hGCjlWUVo3aXVvLzNBZzB6UE40UGJqanovNnJESWRrOG5hK09PUEgw
VFpPT09NRS9mSm9yd2hneHVwQ0x1bWx6T0ZyS21saStvWUMvaDcKUjBxTXdnUVRUUEQzbWYvYkpI
bTFpSEFIZGVTbjgrbzRMVHZaajZyMDR5QWpTM2JSdFZXNXlYNmo2NkY3T0V1SkMyVW9UektrajlO
eAp5WGp0SjQrVDdRejVRbnpWZG9kOFlSdnk2N2pPL1YyM3ZMTCtxL0xUN2RXNXNsRFdsK3JjZnlv
clhZY2k1dW02RmYzRzFlV1ZscDExCm5MeDJpbGRkazZGbno1NytVTTlzaGFLMkZmVjduOW45ay95
czUwV0lad3NCQ0hRT0FqMmFWVTAzMUdweVJ0WFg2S3dnMjE1bnFtRm4KbkhHR3QwblhGK3p3WU1w
S0g4NjFKcDlzY1pNMjYwR1d0a1Z4clcxRGErcVlyRk5IMmk5alVGWlgyVmRMaGhRYXZaZ3FhTFJC
ZlNQTAp4eWN0cjBwK0taSWF2Ymo2NnF2OWk3Q21MdGFYZVBrQzZTdDRlcHJpZEJsbHg4NUUwTnhN
Yjk2R2VmVFJSemVOcnNtdnFVcW93ay9LCm1aUUIrVU50czgwMkxWN21xNVNSVE5QYXZsZFdUMDJa
cTVHc1N5KzkxUHY2Nk1WRjRkTlBQL1hYTjFrSDdTZGZRdkx5cHZQb1dLTksKZXFGSXY3UW9ycXlP
U2hOQ1VLNktwcmtPYWNPMmp2eVFwK3EyU2o4dWsxWG4ycXIvNng1cjc5Q01kdGU1dit1V1Y2WC90
b1poM2I1VQpOMzJkT2hYOXh0WGxWYWZja0ZaOU1mazhTTzZITkVYYnNuN3Z6TFQ4TTdsSUJuRVFn
RURISjlDMEVaRHAzZG9nR3ZIUUYrZ1FOT3lxCkwwN09wdFdiU0xqcE4wMUR3SEpPMDh0aUNIa1Bx
TEo4d1FRbnlBbGJ2ZFRvQzhuNzc3OGZUdmtoWUgyQkw0cHJUUnZLNmhoWElMR1QKVis5RWtxYnY1
akZPRjFURUlKMDI2MWhmWStVZ3FQbjFRNUI1ak15alpBSlVGcXJtbDRLZzlTUXV1dWdpYy80cjNt
emoxbHR2OVYrQgpxeW9MZVhXUlNaSE1CTlZYNVdBdHg4bXlFUGhXNFNkbmFaa3hLWS8yMHlISVNw
OVBIN2VtN3dVWlJmVjg4ODAzdlpPNVJtcVNJMW5LCnE0OEkrcEtaWndKUmxEZVVuZHgrOXRsbmZu
UkZ6cXZwVUZUSHJMVE9QODByb09tNHZPTTY4dk5rNUoydjJvL3pybldkYTZ0cm9jWHoKbk85RVhu
VkdPSjlYN2dnSks1NEk4cXEyT3kwMjVBL25xOTdmZGNzcjY3K2gvTHJidW4ycGJ2cXMrcVNaaFRS
RnYzRjFlUVdaYmZXYgpWYVhmUzhHYXpsbFJFQ0FBZ2M1Tm9KWUNvb2VRcHBYTld0RjdrMDAyOGFN
TE1uVnlqdWRlNFRqeXlDUDlsTEg2Y2RUTUZncWFWV2pOCk5kZU12NDdMbEVOZnBSU1VMeG1LOHVt
cnVoWk5VbjMwRWlObFEra1ZaR092bHhIWkVzc3VXbithcVVPMjAwVnhyV2xEVVIyZFE3NDMKQjlK
WHB4Q0s2cTAwYW8rKzhPUUZ5ZElNSjFMdUZMTEtTT2ROTTVhTVpKMGtUMzhLUlF6U2NuV2NMbCsr
Ri9JcmtUSWFnbDdpOWNPbgp4U3dWMG0xTUhsZkpMeGx1d2dQVDZJUk1VV1RTSXo4T2phaHB4cFgw
RDNPYW1jcEwvcUFxUGptcnloRkhIR0hPVWQza245Ry9mMzl2CjE2d3k4MEtTcjBabTlBT1pkUjhv
djVRYVRTY3BaVXptVFpvWkxtbWFscFNWdmgrVVA5bVdvcjZudE1rZ0JUQmNZNTB2dXM2Nlg4UkgK
eW9TNHlBUkxIeGJVNTdRWXFiNjB5NmNxQksyQ3JpKzZTbHVVTi9UWkpHdlpxMnZFS3ZpYkpQdENV
UjFEMldHcnI2NXVjb1VSRktNawpMNlhWQ0lsbTVORXpwMHgrTW0wb0o3a3Q2a2RWK25IUnRTNjd0
dUZacC9wSVFkYXNiOEhuTGNsUThXa0dSZVZtcFM5cXA5SW41V2tFCnZPeitWNTVrU09ZUGZiN3Ev
VjJGYzdJc1BmK0wrcS9TcG5tbG4zRktrejVYMXBmcTNIK1NYNGQ1WUtaOENrVy9jVlY0cGZ0UDJX
K1cKZnErUzk3VHVHeDJIMzdIZ214ZWV1VVZ0cTlMdkpYZkJCUmYwYlMyN1IzMGkva0VBQWgyVGdI
c3BxQlNjU1pPZlBjZTFJdEpzTTFxQQowSm03dE1qclhxWWk5MUxvWjd4d0poR1IreUx0NDVYWE9h
djVCUXR2di8zMnlFM2hHYzk2bzRXRjNBdWpuOVhJdmJpMWtGZVV6OW43ClIyNm8zcytncysrKysv
clpvWnlEYjd5b29jcFdIVlJmOTBVb2N1WWtzZXlpdUxwdHlLdWpjM2FNM0V1Qkw5OU5PUm81QmNt
WFgxUnYKemV6aC9BSjhublBQUFRkeUQ5ZTR6dHBSdkp1QzE4ZHJNVGZOZ3BOVlJvdE03aURKMkUw
OTYyZm1tbU9PT1NMMzRodTVLU0lqTFV6bwpmcFQ5ekVUS204Y2dMVGV2alpJcCtTZWRkSktmNmNs
TmUrdG5YVkwrZEJ0MVhkSnRMc3FmcklPNGFoYVdFTnhvUW90am5VOHoweXhVCjdvWEh6OXprN0xZ
ak44bEJwQmxiMUc4ZmVPQUJMOG81VFhyRzZqdE93ZkVMUTZyUHBxOUhLRGZKVjMwNGo1OW1sZElN
WnlwVHdiM2cKZS9udWEyZzhxMHRhVmloRDIzUmJkUDN5N3F0a1BtZXE1aGZFZE1wWjVENEV4RkY1
OVhTbWNuN0dMR2RDNTJjWDA2eGl6Z3d0Mm5UVApUVDBEeVhNbVU3N2ZPSVVrY3I1ZGtmTzVpblMr
TEs5bXhIRXZOSkZ6UG8rT08rNjRhUGZkZC9jejU0WDJwZnRDWGgzalJpUjJWRS8xCnRSRFN2SFQ5
eEZ6UEd6ZjFzVTlXSkQrZE5zalZWck5QbGZXanNuNWNkSzN6bmlzcVd6TUtha1l6OVhlbkxFZWFB
ZEI5T1ZaVTV2MlYKZkdhSVFWRzVhV1pWN3BlMHZMSjIrNG9tL3FYemg2Z3E5N2ZTMWkydnFQK20y
NS8xak0xNzd1WDFwYnIzWDVXK2xjY3NzQ3Y2alN2aQpwZmFuNzhHaTN5dzlRelVMbm5NdWo1d2lI
R21XTnZjUnhqOC9kYTg3cC9MSVRkZnRqL1dzMEV4WlJmZE5VYjlYMnk2Ly9QTElmYkFJCnpSemhm
bzRqMklFQUJEbzhnVzZxWVROVkkzM2QwSXdzR2dZT05zbjY4cUV2bEpyaFFpWWRTUWRobGEydnAz
SStTNGV5ZkNwTFgxcmsKNEtldkltbHpFVFZONWorYWVTTWRpdUxxdEtHc2p1bHlkVnhXNzZ3OGpa
N0xZNXduTjR0Qlh0cXM4K0tyT2VKMTNUVlRTdDFRSmI5NwptZktqSUVGMitqaWNyN3QxTDhaKy9u
cDk5WmZ6dGZxdFpybHhMK0M1UGs1cHZvM3dTOHZLcTM5citsNWFWbEU5TldLaWUwc2hmWC9wCnZ0
T1hWOTIzNHFRUngyUW95cXQwTXJWUTN2Q01TT1pON3hmVk1aM1dUYkhxUjVXMHZrMWVrQWxaOEJs
Um1pTDU2YlI1TXZQT2wvWGoKdkd0ZGRHMzE5VmV6WDJtRVdWL3JrMjNKcTBmNmZGNjU2WFJWajlQ
eXl0cWRscHZPci9qMC9adytUc3FvVzE1Wi8wM0tyck5mMUpleQo1TlJObjVTUnhTd1pMeVpGdjM5
MW5zK3FaOUZ2YmJMY1J2YUwrcjNreW5wQ3oyZjNnU3N1cHRGN05CYkVEZ1FnMEtZRW1xNkF0R250
CktRd0NUU1p3NFlVWGVtVWpQYU9RSmsyUUl1VkdTNXBjSXVLYVNXRHc0TUYrZ1VUNW02V1ZvbWFX
MDU2eWdnTGlScUhic3hxVURZRTIKSmFDRlZMWGdiS00rZm0xYWFRcURBQVJ5Q2FDQTVLSWhvaXNT
MEFRSmVzSFRsTkhPRk1IN1RjaW5RNzRkK2lOMGZBSlNRcHc1bmZjQgo2L2kxclZkRGZTR1dMNXY2
NkcyMzNWWXZNNmtoMEVrSmFHcGhUZThmcHUzdXBNMmcyaENBUUlJQUNrZ0NCcnNRRUFGTjVhc2ZQ
SmtKCmFaRkdSajNvRngyRmdQTmRpU2Z0Y0N2SSt6VXpPa3JkcUFjRUlBQUJDRUNnS2dFVWtLcWtT
QWNCQ0VBQUFoQ0FBQVFnQUFFSU5FeWcKMWpTOERaZUdBQWhBQUFJUWdBQUVJQUFCQ0VDZ1N4TkFB
ZW5TbDUvR1F3QUNFSUFBQkNBQUFRaEFvRzBKb0lDMExXOUtnd0FFSUFBQgpDRUFBQWhDQVFKY21n
QUxTcFM4L2pZY0FCQ0FBQVFoQUFBSVFnRURiRWtBQmFWdmVsQVlCQ0VBQUFoQ0FBQVFnQUlFdVRR
QUZwRXRmCmZob1BBUWhBQUFJUWdBQUVJQUNCdGlXQUF0SzJ2Q2tOQWhDQUFBUWdBQUVJUUFBQ1ha
b0FDa2lYdnZ3MEhnSVFnQUFFSUFBQkNFQUEKQW0xTEFBV2tiWGxUR2dRZ0FBRUlRQUFDRUlBQUJM
bzBBUlNRTG4zNWFUd0VJQUFCQ0VBQUFoQ0FBQVRhbGdBS1NOdnlwalFJUUFBQwpFSUFBQkNBQUFR
aDBhUUlvSUYzNjh0TjRDRUFBQWhDQUFBUWdBQUVJdEMwQkZKQzI1VTFwRUlBQUJDQUFBUWhBQUFJ
UTZOSUVVRUM2CjlPV244UkNBQUFRZ0FBRUlRQUFDRUdoYkFpZ2diY3ViMGlBQUFRaEFBQUlRZ0FB
RUlOQ2xDZlFvYS8yUUlVUEtraEFQQVFoQUFBSVEKZ0FBRUlBQUJDRURBRStqVnExY2hDVVpBQ3ZF
UUNRRUlRQUFDRUlBQUJDQUFBUWcwazBBdEJXVG8wS0gyeVNlZitQSi8vUEZIKy9YWApYK082REJz
MnpENzk5TlA0bUIwSVFBQUNFSUFBQkNBQUFRaEFBQUpwQXBVVWtNOCsrOHkyMzM1N08vVFFRKzM4
ODgrM2Z2MzYyWW9yCnJtaXZ2LzY2bDNmVFRUZlpyTFBPYWpmY2NFTmFQc2NRZ0FBRUlBQUJDRUFB
QWhDQUFBUmlBcFVVa0lNT09zZzB3bkg2NmFmYk1jY2MKWS9mZmY3OTE3OTdkcEpnb3JMZmVlamIx
MUZQSFFwdTE4OXR2djltVFR6NlpLNjRzUGpkalJrUXpaV1dJNXhRRUlBQUJDRUFBQWhDQQpBQVFn
NEFoVVVrQUdEaHhvZ3djUHR0OS8vOTFERzNYVVVlMmNjODZ4cElONmp4NDlyRnUzYmsyRHFySjIy
R0VIZS9iWlp6Tmxsc1ZuClpzbzUyVXhaT1VWd0dnSVFnQUFFSUFBQkNFQUFBaEJ3QkNvcElPdXNz
NDY5OXRwcnR2YmFhOXRYWDMzbHdjMDk5OXkyNVpaYnRvRDQKMTE5LzJiSEhIbXR6elRXWExiYllZ
dmJSUngvRjhScEIyWGZmZmUzZ2d3KzJUVGJaeFA3OTczL2JMNy84NHVQLys5Ly8ycDU3N21sSApI
MzIwblhMS0tUYlRURFA1ZFBmZWU2L2RmZmZkdHVPT085cFBQLzBVeTlMT2VlZWRaK2w0MVUyak5h
dXV1cW90dmZUUzl1S0xML284CnI3NzZxcWtOaXk2NnFEMzExRk9tNDhVWFg5eXV2ZlphSDU4bHkw
ZndEd0lRZ0FBRUlBQUJDRUFBQWhCb0tvRktDc2kyMjI1cmZmdjIKdFdlZWVjWXJGdmZkZDE5bUpX
Njc3VGFmVHZGLy92bW5uWHJxcVhHNkRUZmMwQlpZWUFHdlpGeCsrZVUyWU1BQTIycXJyWHo4OE9I
RApUWGtmZU9BQm0zbm1tVzJOTmRhdzdiYmJ6aWFkZEZKYmE2MjF2TEl4OXRoang3SzBzOXR1dTdX
SUgyT01NV3lYWFhheC9mZmYzKzY4CjgwN3IwNmVQOWUvZjMzNzQ0UWViZDk1NWJmZmRkN2QzM25u
SE84NS8vZlhYUG03ampUZjJNdE95MG1XMUtKZ0RDRUFBQWhDQUFBUWcKQUFFSVFLRFZCQ29wSUQx
NzlyUmJicm5GOXRoakQvdisrKy85Q01ZbGwxd3lRcUZ5VEY5cXFhVnN5aW1udENXV1dNSmt1cVh3
MEVNUAoyWFBQUGVkSElYUXNFeTZOZ2tqaGVPR0ZGMnpCQlJlMFdXYVp4VHV5Uy9tUTRqTGpqRE1x
YWFsWlZ6RDd1dlhXV3kyS0ltK3lwZktrCnZIejc3YmRlYVpJYzFVc2pPRWNkZFpSM2xwZFRmVG9F
V2VuekhFTUFBaENBQUFRZ0FBRUlRQUFDelNGUVNRRlJVVklhTkF2VzdiZmYKYmhOTk5KRTNwOUtv
UlRJa1grREhHMjg4NzdpdStKZGZmdG5ua1l3UTVwOS9mcjhiWnRMU0NNYUVFMDRZb210dlpXNmxS
VTlHRzIwMAovN2Z3d2d0N3BXbWVlZWFKWlIxNTVKSDIvdnZ2bTg3SmlaNEFBUWhBQUFJUWdBQUVJ
QUFCQ0xRdGdWSUY1T09QUHphdCtSR0NUTEd1CnZQSktmeWhscEVxUXI0ZEdJK1FIRXNJY2M4emhs
WUMwYjBlSXI3djk3cnZ2YkpSUlJ2RytIL0wvQ0g5VFRERkZMRW9La0pTY004ODgKMDV0bXhSSHNR
QUFDRUlBQUJDQUFBUWhBQUFKdFFxQlVBWkZqOXdVWFhOQ2lNaHBkMExTN21obXJTcEJmaHh6VVgz
bmxsVGk1L0REawpKNkwxUTRwQ2NsUWxLMTJJbjJhYWFleXh4eDVyc1RpaVRMTGtkQjZDSE9TMVZv
bnlhRHJoZEFpeTB1YzVoZ0FFSUFBQkNFQUFBaENBCkFBU2FRNkJVQVpsdXV1bnMzSFBQdGZmZWV5
OHU4Y3N2di9ScmdDeS8vUEx4T1kxeWhGbXRkRktycEllVjB0ZGNjMDNUU01Tamp6NGEKcDlkTVZG
Sk1sbDEyV1gvdWp6LytpTk9IUkRMakNtdU55UGNrSFpMeEs2MjBrcCtoUzdOcEthMFVuQk5QUE5G
bW1HRUduMDErSWRxWAp3blA0NFlmYnBaZGU2bWYyQ2pLVHNwUmY2NExJRjZXcWtoWGtzSVVBQkNB
QUFRaEFBQUlRZ0FBRThnbVVLaUR5OTVoNDRvbHRyNzMyCjhsUGNubmJhYVg3aHdVMDMzZFE3cFV2
MEhYZmNZUjkrK0tFOS9QRERmblYwVGRtci9VR0RCcGxteE5Lc1V0ZGNjNDJmTnZlc3M4NnkKQng5
ODBHNisrV2E3NnFxclRPdUhhQ1YxVGNXckJRN2xUQjZDRkp5TExycklkdDExMTNnTmtoQ25iVEpl
aXRMSko1L3M4MHZSMERUQQp2WHYzOW9xUEZqUFVERmxhd1YxQk0yUXBiTDc1NW40Mkx1MG5aV2xk
RUxWSDB3SVhMWVNvZkFRSVFBQUNFSUFBQkNBQUFRaEFvRHFCCmJzNU1LU3BLcnNVRzlTY0g3NTkv
L3RtdjdUSFZWRlBadU9PT1c1UXRNMDVGZmZEQkI5NVhZL3JwcDg5TWt6NHAzNUVpNS9SMHZLYjAK
MWFpRlRNU2szTlFKYVZuZmZQT05kNTZ2STRPMEVJQUFCQ0FBQVFoQUFBSVE2TW9FcERjVWhVb0tT
SkVBNGlBQUFRaEFBQUlRZ0FBRQpJQUFCQ0FRQ1pRcElxUWxXRU1RV0FoQ0FBQVFnQUFFSVFBQUNF
SUJBb3dSUVFCb2xTSDRJUUFBQ0VJQUFCQ0FBQVFoQW9ES0JVaE9zCnlwSklDQUVJUUFBQ0VJQUFC
Q0FBQVFoQW9JUUFJeUFsZ0lpR0FBUWdBQUVJUUFBQ0VJQUFCSnBIQUFXa2VTeVJCQUVJUUFBQ0VJ
QUEKQkNBQUFRaVVFRUFCS1FGRU5BUWdBQUVJUUFBQ0VJQUFCQ0RRUEFJb0lNMWppU1FJUUFBQ0VJ
QUFCQ0FBQVFoQW9JUUFDa2dKSUtJaApBQUVJUUFBQ0VJQUFCQ0FBZ2VZUlFBRnBIa3NrUVFBQ0VJ
QUFCQ0FBQVFoQUFBSWxCRkJBU2dBUkRRRUlRQUFDRUlBQUJDQUFBUWcwCmp3QUtTUE5ZSWdrQ0VJ
QUFCQ0FBQVFoQUFBSVFLQ0dBQWxJQ2lHZ0lRQUFDRUlBQUJDQUFBUWhBb0hrRVVFQ2F4eEpKRUlB
QUJDQUEKQVFoQUFBSVFnRUFKQVJTUUVrQkVRd0FDRUlBQUJDQUFBUWhBQUFMTkk0QUMwanlXU0lJ
QUJDQUFBUWhBQUFJUWdBQUVTZ2lnZ0pRQQpJaG9DRUlBQUJDQUFBUWhBQUFJUWFCNEJGSkRtc1VR
U0JDQUFBUWhBQUFJUWdBQUVJRkJDQUFXa0JCRFJFSUFBQkNBQUFRaEFBQUlRCmdFRHpDUFFvRXpW
a3lKQ3lKTVJEQUFJUWdBQUVJQUFCQ0VBQUFoRHdCSHIxNmxWSWdoR1FRanhFUWdBQ0VJQUFCQ0FB
QVFoQUFBTE4KSklBQzBreWF5SUlBQkNBQUFRaEFBQUlRZ0FBRUNnbWdnQlRpSVJJQ0VJQUFCQ0FB
QVFoQUFBSVFhQ1lCRkpCbTBrUVdCQ0FBQVFoQQpBQUlRZ0FBRUlGQklBQVdrRUErUkVJQUFCQ0FB
QVFoQUFBSVFnRUF6Q2FDQU5KTW1zaUFBQVFoQUFBSVFnQUFFSUFDQlFnTHRxb0E4Ci9mVFQ5dHh6
enhWV2tFZ0lRQUFDRUlBQUJDQUFBUWhBNEo5RG9IUWRrQWNmZk5DdXV1b3FHemh3b1AzeHh4K1pM
UjlubkhGc2tra20Kc1lrbm50aDY5KzV0YTYyMWxrMDIyV1NaYWNQSisrKy8zemJlZUdOL2VNc3R0
OWpTU3k4ZG90aENBQUlRZ0FBRUlBQUJDRUFBQXY5UQpBcVVLeVBMTEwyLzZHelJva0ZjU2Z2enhS
NDlpa1VVV3NaMTMzdGxHR1dVVUd6cDBxTDM3N3JzbXBlS2FhNjZ4Z3c0NnlPZTU4TUlMCnJXZlBu
cG5va2dzY2Z2Lzk5NWxwT0FrQkNFQUFBaENBQUFRZ0FBRUkvTE1JZEl0Y0tHcFNVbEhZWkpOTjdO
NTc3L1hKanpqaUNOdDEKMTExYlpQMzk5OTl0di8zMnN5dXV1TUtmbjMvKytVMmpHK09PTzI2TGRE
b1lQbnk0L2VjLy83SHUzYnViNVBib1Vhb0xqU0RqbjNyaQp3dzgvdE9tbW02N0ROSytqMWFmRGdL
RWlFSUFBQkNBQUFRaEFBQUlqRUdqcVN1Z1RUamhoWElCR1B0SmgxRkZIdGROT084MDBPcUl3CllN
QUF1K2VlZTlMSi9QRm9vNDFtVzIrOXRXMnh4UllvSHdsQzhvczU2cWlqRW1mYWQ3ZWoxYWQ5YVZB
NkJDQUFBUWhBQUFJUWdFQ2oKQkViVUlnb2thclFpaEc3ZHVvWGRFYmFMTDc1NGZPN0ZGMStNOTlr
cEp2RGxsMS9hdHR0dW0rdHJVNXk3K2JFZHJUN05ieUVTSVFBQgpDRUFBQWhDQUFBVGFta0F0QmFS
cTVXYVpaWlk0NmVEQmcrTjlkdklKeUk5bXM4MDJNNzMwZDRUUTBlclRFWmhRQndoQUFBSVFnQUFF
CklBQ0J4Z21NRk1jTG1WNkZNT2VjYzRiZEViWmZmZldWM1hERERUYmxsRlBhMm11dlBVSzhUbno2
NmFkMjVaVlgybHR2dldWeVZwOXYKdnZtc1Q1OCsvbSthYWFiSnpCTk9OcEwzNVpkZnRtZWVlY1pl
ZWVVVkcyT01NV3p1dWVlMi92Mzc1L3F6M0gzMzNUN3RrVWNlNlozeQpyNzMyV252MDBVZHQwMDAz
dGRWV1d5MVVLWFA3OWRkZjIvcnJyMit2dmZhYWozL25uWGZzdU9PTzgvdHp6VFhYQ1BtcjFPMlRU
ejd4Ci9qZnBBc2NjYzB6YmJydnQ3TGJiYnJPUFB2b29qcFlQamlZVlVLaGJuMWdJT3hDQUFBUWdB
QUVJUUFBQ0VDZ2gwUFFSRURrczMzbm4KbmI1WU9aOXZzTUVHTGFxZ1diUXV2L3h5UDFYdkhIUE1Z
WWNlZXFpZllhdEZvcjhQN3JyckxwTTUxeSsvL09KZnlBODg4RUMvYm9oOApSK2FkZDE2YmFhYVpi
SWtsbHZBK0o5OTk5MTBMRWEzTisrZWZmOXJoaHg5dSsrNjdyLzMxMTErMjRJSUxtdHAwd0FFSDJL
S0xMbXBQClBQRkVYTTRMTDd4Z2UrMjFsODAyMjJ5MnpUYmJtUHdscENTdHNNSUtQdjBERHp4Z3Ur
eXlpOGs1dnloSWp0b3g5dGhqeDhsKy92bG4KMDk5dnYvMFduNnRUdDZtbm50cldYSE5OZSttbGww
d1RCdWhQU3RMbW0yL3U1YTJ5eWlyMjJHT1BtUlFteVpVQ0ZFTFYrb1QwYkNFQQpBUWhBQUFJUWdB
QUVJRkNWUUZOR1FQU1NyQkVLZlpuWGwvdHZ2LzNXSnAxMFVqdm5uSE1zYVk2bFN1bGxmTG5sbHZN
djZzbVgrWFNGCk5lMnZ2dFRQTU1NTS9pVlpQaWRUVFRXVlhYcnBwZGEzYjErVElqUHR0TlBHWCsz
SEdtdXNXRVFqZWFYY1NKblJ5N3BHUGhUa2x5RkYKU2kvc2Nwclh5TWprazAvdVovQlNIWVlORyti
VGljUHV1Kzl1aHh4eWlGZVVWRmNwU1hMT0x3cXJycnFxNmUvV1cyKzFuMzc2eWVhWgpaNTVNUi9R
NmRWTjVta25ydlBQT3N5V1hYTklyVWVJaS9tcVhsQnVON3B4eXlpbTI1WlpidHFoZTFmcTB5TVFC
QkNBQUFRaEFBQUlRCmdBQUVLaEJvOVFqSTBVY2Y3UlVBbVU5Tk1jVVUxcTlmUDl0bm4zM3NoeDkr
OEMvUFVrWjBMaDBtbUdBQ3Iwam9SYjRvU0pINTlkZGYKVFNaSVNZZDNLU0VhTFZEUTJpTmE5SENk
ZGRhSmxRV2RiMjFlTGJxbzBSdXRZeEtVRDhtVGVaTE1yeFRVUHJWZFFkTU1TK0ZZWUlFRgovUEdi
Yjc1cGE2eXhobGNtTkpPVmpyVTJTdDJRYkcvSVc3ZHVJWjhXaVR6NzdMUDlvUlREazA0NnllOXJS
R1N4eFJZYlFma0krWkxiCnJQb2s0OW1IQUFRZ0FBRUlRQUFDRUlCQVZRS3RIZ0dSS1kvOE5qUVNJ
WjhCK1JObzFPQi8vL3VmTjJGNjQ0MDMvTXU1ekpPeVF0TGMKS0NzK3pKNlZ0WkRoUWdzdDVLZjMx
V2pCeHg5LzdMLzBKMlcwTnU5aGh4M21GMDRjZmZUUjdkVlhYMDJLYk9IN0llVXFHY0txNzFvSgpY
bVpQSVl3MzNuaGh0K0Z0YSt1bWdxVm95RVRza2tzdThTTWk0NDgvdnI5V01oa2pRQUFDRUlBQUJD
QUFBUWhBb0MwSnRGb0JrUVA0Cndnc3YzS0t1KysrL3Y4bC9ZS09OTnJMcnI3L2UvLzM3My84Mi9k
VU5ZZkhDcEtOMGtDRUZKSVFzODZiVzVQM2lpeS9zN2JmZjlncUkKZkVDeVFoaDUwUm9tV3I4eGpB
eUVSUlNsZ0lUOXJQeFZ6d1c1SVgwamRRc3lwTURJSjBYTzZSckJrV08vNmxzbHBPdFRKUTlwSUFB
QgpDRUFBQWhDQUFBUWdrRVdnMVFwSWxqQ2RrM0p3NDQwMzJ2TExMKytUbkhEQ0NmN2NNc3NzazVj
bDg3d2N1VFdLOHRSVFQzbXpwNnpSCkJQazR5QVFzSFZxVFYrWmNDbHBzOGZiYmIwK0xiTlBqOUF0
L00rb21VNnd6enp3em5tMHNTN0hMYTJTNlBubnBPQThCQ0VBQUFoQ0EKQUFRZ0FJRXlBcTMyQVNr
U0xOK0k1TmYxZSsrOXR5aDVadHk2NjY1clVqcmtMSDN5eVNlM1NCTk1NMXpNeUFBQUlBQkpSRUZV
aDg0NAo0NHdXNThOQmEvSnF5bDRGdlpnUEh6NDhpR3FYYmZxRnYxbDFreElTVnJBLzVwaGo3UDMz
MzYvVXZuUjlLbVVpRVFRZ0FBRUlRQUFDCkVJQUFCRElJakJRRlJPVWsxLzk0NzczM01vb3VQalg3
N0xQYjQ0OC83dGY5MEd4YW11NVdKa1FhVWJubW1tdjhYekNKU2t0cVRkNHcKa3FLcGQ3VU9SM3VH
OUF0L00rcW1xWXgzM0hGSDIzUFBQVTFyZ2NqQmY5ZGRkL1dtWkdWdFRkZW5MRDN4RUlBQUJDQUFB
UWhBQUFJUQp5Q013MGhTUXp6NzdMQzR6T1JvU242eXdveG12dE42SFhwemx6QzZIY3psVVN6Rlph
YVdWQ2lYVXpUdmpqRFBHOHNLc1VmR0oxSTdXCjFyanV1dXRTWjV0M21IN2hiMGJkNU5jaUpwcmhL
L2k0UFBmY2MzYlJSUmVWVmp4ZG45SU1KSUFBQkNBQUFRaEFBQUlRZ0VBT2dWbysKSUhLOHJoSTBW
VzF5MUVQclVOUU5Hb25ZZnZ2dC9TS0Rtc0dwVG1oTlhyMmNhN1Z6clVaKzAwMDMrYlUvdEFoaE9r
Z0owbm9jbWhhMwoyU0U0MUE4ZE9yU0Y2RWJySm9WTm8wYnlwMUhRdWlaYUNmM1paNS8xYTZ5c3VP
S0tma3JsRm9XNmc3ejZwTk54REFFSVFBQUNFSUFBCkJDQUFnYW9FYW8yQURCa3lKSmFiNXllaDgx
cmpRMHFBZ3N5aDFsdHZ2VGhmMkpGdlJ3akovWEJPWCtadnZ2bG0wNHJlWlN1Smh6eGgKMjlxOG1z
VkxRWXFXcHRQOXozLyswOElmUk5QN2FrRkNqY2hvb2NVUVFsdTFnR0ZWSlMza1RXNjFxS0hDQng5
OEVKK1dUSzJ1M3RxNgpTWm5SYXV6S0grUnJST1BVVTAvMUN5bUtmWjRwVmtpZlZaOVFRVTFKdk5S
U1M1bjhicjc1NXB0d21pMEVJQUFCQ0VBQUFoQ0FBQVF5CkNWUldRTFRtaHFiWURVSEtnZGI4K1B6
eno3MHpzNzZ1eTFsY1UvT0dGYzRYV1dRUnUrV1dXMHpyYXFURHdJRUQ0MVBKL1hBeWZLM1gKbEw1
NjJkZUs2RnFVVUl2K2FVUkZTczdwcDUvdW5kUkRuckJ0YlY2WmRZVUZCK1Vqc2R0dXUvbVhkcjFn
OSs3ZDJ6UlNzUGppaTNzRgpKSlNsYmZBWjBYUzVNczlxYlFocnBvanJ2dnZ1NjlmdDJHT1BQYnd5
MTVxNi9mbm5uL2F2Zi8zTHRPYktEanZzMEtKYXM4NDZhN3htCmlYaWRkdHBwTGVKMVVGU2ZrRmor
T2ErLy9ybzkrdWlqWG1FTTU5bENBQUlRZ0FBRUlBQUJDRUFnaTBBMzk4VyswSzVLNWtoWFhYV1YK
YWVZcHJhU2RGK1RZUFBQTU05c3NzOHppWDF6NzlPbGpTeSs5OUFqSjlYSjk5ZFZYKzZsdXBid282
SXU4Umh6Q244NXBUUTY5Tk1zawpxaWpvSy8wTk45emd5dzdwR3NrckdhZWNjb3BwaHExaHc0WUZr
WDVXcitPUFB6NmV4bFlSR2tYUURGOERCZ3lJMC9YcTFjc1dYWFJSClArSWdwYVZPRU45bGwxM1cr
N29vbnhTZnl5Ky8zTThHRnVSVXJadk1xN1QyaHhTaXlTZWYzRHZ4SjAzWjdydnZQaCtmVlA1V1dX
VVYKTy9EQUEyMk9PZWJ3eFZXcGowYWJ0TTZMWnRmU3F1K2FBWTBBQVFoQUFBSVFnQUFFSU5CMUNl
aDl1Q2lVS2lCSnM2c2lRYzJPa3grSgpUSU0wRXZEYmI3K1pwcUtWT1pGR0pqU2prMFprTkdYdVhY
ZmQ1WDFGRGozMDBMZ0tqZVFOUW1SV3BaRU4rWHhJc2RLYUkyRUsyNUJtClpHeFZycFMwU1NhWnBJ
V1pWN0tzdHF4YmxmcG92UloxdERCYlY3S3U3RU1BQWhDQUFBUWdBQUVJZEMwQ25WSUJrYytEUmtN
MjNuamoKRVV5SDBwZFBvdzlISFhXVWQ2cFdYQ041MDdJNWhnQUVJQUFCQ0VBQUFoQ0FBQVRxRVNo
VFFDcjdnTlFydHJIVVVqejBWVjMrSDJXaAplL2Z1MXJkdjN6aFpJM2xqSWV4QUFBSVFnQUFFSUFB
QkNFQUFBaU9GUUlkVFFENzU1Qk43L3Zubi9XeFNiNzc1Wm1HajVVTnl4QkZICnhINFpqZVF0TElo
SUNFQUFBaENBQUFRZ0FBRUlRS0FwQkRxa0Q0aWNyeld6a21iUDBxeFVjb3JXTEZoYUQwUCtIVnJr
VUt1aWE1VGsKd2dzdjlJN3ZnVVlqZVlNTXRoQ0FBQVFnQUFFSVFBQUNFSUJBNndpVW1XQjFTQVZF
anUrYUF2ZWVlKzdKWEZkRFR1R2JiNzY1YmJiWgpadGF6Wjg4V1pCckoyMElRQnhDQUFBUWdBQUVJ
UUFBQ0VJQkFiUUtkVWdFSnJSdzBhSkJwOGIvQmd3ZjdxWG8xNWU1TU04M2sxd01KCmFmSzJqZVRO
azhsNUNFQUFBaENBQUFRZ0FBRUlRS0NZUUtkV1FJcWJSaXdFSUFBQkNFQUFBaENBQUFRZzBORUlO
S3lBZExRR1VSOEkKUUFBQ0VJQUFCQ0FBQVFoQW9QTVM2SEN6WUhWZWxOUWNBaENBQUFRZ0FBRUlR
QUFDRUNnamdBSlNSb2g0Q0VBQUFoQ0FBQVFnQUFFSQpRS0JwQkZCQW1vWVNRUkNBQUFRZ0FBRUlR
QUFDRUlCQUdRRVVrREpDeEVNQUFoQ0FBQVFnQUFFSVFBQUNUU09BQXRJMGxBaUNBQVFnCkFBRUlR
QUFDRUlBQUJNb0lvSUNVRVNJZUFoQ0FBQVFnQUFFSVFBQUNFR2dhQVJTUXBxRkVFQVFnQUFFSVFB
QUNFSUFBQkNCUVJnQUYKcEl3UThSQ0FBQVFnQUFFSVFBQUNFSUJBMHdpZ2dEUU5KWUlnQUFFSVFB
QUNFSUFBQkNBQWdUSUNLQ0JsaElpSEFBUWdBQUVJUUFBQwpFSUFBQkpwR0FBV2thU2dSQkFFSVFB
QUNFSUFBQkNBQUFRaVVFVUFCS1NORVBBUWdBQUVJUUFBQ0VJQUFCQ0RRTkFJb0lFMURpU0FJClFB
QUNFSUFBQkNBQUFRaEFvSXdBQ2tnWkllSWhBQUVJUUFBQ0VJQUFCQ0FBZ2FZUlFBRnBHa29FUVFB
Q0VJQUFCQ0FBQVFoQUFBSmwKQkhxVUpSZ3laRWhaRXVJaEFBRUlRQUFDRUlBQUJDQUFBUWg0QXIx
NjlTb2t3UWhJSVI0aUlRQUJDRUFBQWhDQUFBUWdBSUZtRWtBQgphU1pOWkVFQUFoQ0FBQVFnQUFF
SVFBQUNoUVJRUUFyeEVBa0JDRUFBQWhDQUFBUWdBQUVJTkpNQUNrZ3phU0lMQWhDQUFBUWdBQUVJ
ClFBQUNFQ2drZ0FKU2lJZElDRUFBQWhDQUFBUWdBQUVJUUtDWkJGQkFta2tUV1JDQUFBUWdBQUVJ
UUFBQ0VJQkFJUUVVa0FTZVR6LzkKMUFZTUdKQTRVMzMzNmFlZnR1ZWVlNjU2QmxKQ0FBSVFnQUFF
SUFBQkNFQ2dDeExvOGdxSWxJWWpqenpTbGx4eVNadDc3cm50aGh0dQpxTjBON3IvL2ZsdDk5ZFZ0
bFZWV3NjY2VlNngyZmpKQUFBSVFnQUFFSUFBQkNFQ2dxeERvOGdySTBLRkRiZGl3WWZiR0cyLzRh
OTZ0Clc3ZmExejY1V09QMzMzOWZPejhaSUFBQkNFQUFBaENBQUFRZzBGVUlsSzZFL2s4SHNjSUtL
OWd5eXl4alYxNTVwUTBmUHR5aUtLcmQKNUhYV1djZCsvdmxuNjk2OXU2MjIybXExODVNQkFoQ0FB
QVFnQUFFSVFBQUNYWVZBbDFkQWRLRkhIWFZVRzJlY2NleTc3NzZ6MW95QQpqRGJhYUxiMTFsdDNs
VDVET3lFQUFRaEFBQUlRZ0FBRUlOQnFBbDNlQkt2VjVNZ0lBUWhBQUFJUWdBQUVJQUFCQ05RbWdB
SlNHeGtaCklBQUJDRUFBQWhDQUFBUWdBSUhXRXNBRUs0ZmN3SUVEN2JMTExyTjMzbm5ISnBsa0Vs
dDAwVVZ0NDQwMzl1WmFXVm0rK3VvclA0UFcKbEZOT2FXdXZ2WFpXRXRNMHYvSTFlZXV0dDB6TzZ2
UE5ONS8xNmRQSC8wMHp6VFNaZVRnSkFRaEFBQUlRZ0FBRUlBQ0JmeElCRkpDTQpxM254eFJmYmdR
Y2VhSC84OFVjY2UvMzExNXYrcnJqaUNwdG9vb244K1I5Ly9ORnV2dmxtdSsyMjIreXBwNTZ5di83
Nnl3NCsrT0E0ClQzTG5ycnZ1c2wxMjJjVTIyMnd6Tys2NDQreVRUejZ4d3c0N3pNNCsrMnlmYklJ
SkpyREpKNS9jZnYvOWQ3dm5ubnRNeHdRSVFBQUMKRUlBQUJDQUFBUWo4MHdoMEdCTXNPWUMvLy83
N2xmais5dHR2OXZ6eno4ZHAwOGR4UkN0Mm5uamlDYTlrSEhUUVFmYlFRdy9abVdlZQo2VWNvSk9y
Wlo1KzFMYmZjTXBZcVpXRzU1WmF6cFpkZTJpc2ZjVVJxWjlDZ1FiYmRkdHZaVkZOTjVkY2MwVllq
S3BkZWVxbU5PKzY0ClB2VzAwMDVyZSs2NXArMjMzMzQyMWxoanBTUndDQUVJUUFBQ0VJQUFCQ0FB
Z1g4R2dWSUY1TDc3N3JPK2ZmdjZML0pyckxHR2JiSEYKRnJiU1NpdlpwcHR1YWkrKytHTFRLQng3
N0xGZVpwbkFsMTU2eWZyMTYyZWJiNzY1VDVvK0xzdGZGcStwZEI5NDRBSGJmZmZkdmVLaApkdDV5
eXkwMjIyeXorYXpQUFBPTWFlRkJCWTFTU0prUWs2S2dFWTlmZi8zVjVwcHJyaGF6YkNudkVrc3M0
Yk8rKys2N3R0WmFhNW1tCjlCMWpqREdLeEJFSEFRaEFBQUlRZ0FBRUlBQ0JUa3VnVkFHUnNpR3pJ
WVZERGpuRWp3N2NmZmZkTnVHRUUvbzFMN1NTZUd1Q1JpMmUKZlBMSk9LdE1udjd6bi8vRXgzazdD
eXl3Z1BmRkNQSHA0M0MrdFZ1TmFJdzU1cGd0c3ZmczJkT1BYSVNUOHVOSWhySEhIanQ1T01KKwpV
TlFrSngwV1dtZ2hmK3FubjM2eWp6LytPQjNkNGpqTnJFVmt6WU5teXFwWk5Na2hBQUVJUUFBQ0VJ
QUFCTG93Z1ZJRlJHekdHMjg4Cmp5aXNrYUZSZ3AxMzN0bjdLOXg0NDQwdDhDWDlKbHBFSkE1a3Vy
VEREanQ0azZad1dxTUpNODQ0WXppTXQxbnl0TzVHcUlzU3BvL2oKekszWTBab2dXVUZtVnNIM282
cXBXSkFUekt3Kyt1aWpjQ3JlQmdWRUovTEtWbHdXTTUxdlRXaW1yTmFVVHg0SVFBQUNFSUFBQkNB
QQpnYTVMb0pJQ2tvWG4yMisvOWFjMVE1VEM0NDgvYnFlZmZycWRjODQ1M2tUcnpUZmY5T2YvKzkv
L2V0K0dvNDgrMms0NTVSU2JhYWFaCnZLUDJ2ZmZlYXhwSjJYSEhIZTJERHo2d004NDR3N1FxZVFo
NThrSjgzdmFtbTI3eS9oVWJicmloeWF4SlFYV1I3T1NJUzE3K3ZQTTkKZXZTd2VlZWQxMGQvK09H
SGVja3l6NGQyeVZIOWh4OSt5RXd6M1hUVG1XYlF5Z3ZublhlZUpabHB4RVF6YjhsWFpkVlZWL1Yr
S0dHawo1ZFZYWC9XbVhQSXpVWms2WG56eHhlM2FhNi8xNHJOazVaWExlUWhBQUFJUWdBQUVJQUFC
Q0RTVFFLc1VFSm52bkhUU1NUYisrT1BiCit1dXZiOE9IRDdlZGR0cko1cDkvZnU4N3Njd3l5OWdK
SjV6ZzY2azR6UklsdjRxWlo1N1o1RWNpaCt4Sko1M1UrenpvWlZpbVNUSS8Ka2lLaVVDVFBKeWo0
dDk1NjYzbmZETW1ZWlpaWmZNcFpaNTNWenpBVi9DMEtzaGRHVFRIRkZENCtqSVFVSms1RXJydnV1
bjRVNmVlZgpmN2FUVHo0NUVXUDI5Tk5QKzJNcFlFVmh0OTEyYThGTWZpS2FWV3YvL2ZlM08rKzgw
L3VyOU8vZjN5czRVcFRrdzZJcGhPVjc4dlhYClg1dmlOSTJ3UWxwV21RbFpVYjJJZ3dBRUlBQUJD
RUFBQWhDQVFCMEN0YWJoMWJTeG80d3lpbjN4eFJkK05FRFR4YzR3d3d3V1JaSDMKQituZHU3Y3ZX
K1pVWWZSaHdRVVg5SXFBMXJtUThxRy9FSUlabFY3bzU1aGpEcStvS0U2bVNLdXR0cHBseVF0NWk3
WlNodVMzSXBNbgp6UzRsUHhYNWRqUXJ6RDc3N0xWRUtiMUdkTGJhYWlzL1FxVFJDL25XdlBMS0sz
N3RrR3V1dVNaMlJpOFRISmpkZXV1dG5ydG01bEtRClFxZFJLVG5Kcjd6eXlyYlVVa3Y1OVVpT091
b296Ly84ODg4ZlFYU1FOVUlFSnlBQUFRaEFBQUlRZ0FBRUlEQ1NDTlJTUUE0OTlGQS8KeWlGenBH
VFFpNnhHUEdTYXBIVXlaUEl6Yk5pd09JbSsxc3RwdlNoSVJuZ2hMcE5YSkVkeGVyblhERk9xaStx
c1dhdjIzbnZ2c215bAo4VnE3UTJHZWVlWXBUWnRPb1Bwb1pHS1JSUmJ4U3BGR2ZCWmJiREh2U3pQ
T09PT2trNWNleTl5cVY2OWUzdjlGaVJkZWVHRS9XMWNZCjlkRzVJNDg4MHAvWEtKWDhkZ2dRZ0FB
RUlBQUJDRUFBQWhCb2J3SXROWW1TMnVnbE5xMThoQ3hhTlZ3akRWcFk3NnFycnJLWFgzNDUKUkxW
cTI0ZzgxWFBycmJjMm1YZkpST21YWDM2SkhlbGJWUm1YU1FyVmdBRUR2SG1YSFBEckJDMVF1UDMy
MjN2bFk1dHR0cW1UTlRldAoxazFSTytVY254YzBraVRGVDJ1WmFFUW9UQ2FRbDU3ekVJQUFCQ0FB
QVFoQUFBSVFHTmtFV3VVRGtxN1UyMisvYmZ2c3M0L0ozS2RvCkpxZDB2akRpa1Q3ZldubEpPWHJo
bHNPMzZpUm43S3BCeWtKVzBHakswS0ZEN2ZEREQvY2pEOGswOHUwSUlia2Z6bDEwMFVWK3hmU3AK
cDU3YXoyWVZ6cmRtRzVqSnBPMnh4eDd6UGg1Qmpremg1SFFlZ3RaV3VlR0dHL3pJMGpISEhCTk94
OXNnS3o3QkRnUWdBQUVJUUFBQwpFSUFBQkVZeWdVb0t5RGZmZk9Pck1XVElrTXpxeU45REw3OXll
djd6enorOVk3V2NuM1ZPZjVwS1Y4ZkpvSy94bjMzMm1ULzEvZmZmCm0xN2NRNTR5ZVhJdzExU3lJ
YVNQZFY1Zi9yV29ueFFIbVdTVkJjMUNwU0NIK1lFREIvcDkvVlA5cjc3NmF0TUx2SlNQVFRiWkpJ
NEwKTzhuMHlmMFFINVNDalRiYXlQdHF5RzlHaXhKcURaTWxsMXpTTDJTb0djU3lsSmNnUTlza003
VkpzMkJwOVhUeGs2UDVpU2VlNkgxeQpsRmFydUtzY09lQ3IzbHAxL2JYWFhsT1VEMGxaeXErSkJV
NDk5VlFiUEhod1NNSVdBaENBQUFRZ0FBRUlRQUFDVFNmUTNiMmNIbDRrClZTL2s1NTU3cmtrSmtm
TzVwdDNWaTIweTZNdStacm02NUpKTGJOQ2dRYVpabjdRK2lCUUpPVnpMSkV2K0U1cG1Oamh3Zi9y
cHA5NGgKVzF1OURNdmtTazdqMnBjRCtzTVBQNXdwYitLSko3YXp6anJMKzV0b1h5L095ZU01NTV3
ejluZVFqNFJNcDZTSWxJWFZWMS9kanhUbwpCVnorTEZKYzdyampEdE1xNXFxajJxYVZ5cE9qQnYv
NzMvLzgxTU5LSDN4ZXBJQklFVk1JcTZmTHdWNCtHMTkrK2FVL0wwWHJ4eDkvCk5DbDBVaUxFU1U3
cU45OThzeTI3N0xLNS9qSkpabXV1dWFaSmFkSzB4MUljTk1XdVZvZlhUR1NhYmxqVEcvLzczLy8y
MTB2cnBFZ0IKRVZOTkNxRFp2Skt5TkR2WTU1OS83aFVoS1ViQitkOVhsbjhRZ0FBRUlBQUJDRUFB
QWhDb1FTQzlxSGM2YXpmM2hUOUtuMHdlNTQxNgpKTk9FZmZsYWhBSTFRbEZtanFWWm00cWMwK3ZL
Qy9VSTI4c3Z2OXhrcXRTdlg3OXdxdEpXU28zV0RwRnp1QlpIMU14ZmpRU1pndTI2CjY2NjI3Nzc3
ZW9WSkwvOHk1NUlpb2paS1NaUHlkZGRkZDNsZkVUbk81NFUwTTQzK1NHbVNFcGpubjFOVmxwVE11
bE1NNThubVBBUWcKQUFFSVFBQUNFSUJBMXlTZ1FZQ2kwRlFGcEtpZ3RvelQ2TUxvbzQvdTF4dlJ5
RXB5MUtJdDY2R3laTjZrMFFxdHdhSFYzNHVDbk56bApzNkpSSndJRUlBQUJDRUFBQWhDQUFBUTZJ
NEV5QmFTeFQvc2RrSWhNcGJUMlI1OCtmYnhKVW5zcUg4SWp4ZU9OTjk0dytYK1VCYzFxCjFiZHYz
N0preEVNQUFoQ0FBQVFnQUFFSVFLRFRFdWpSYVd1ZVUzSDVlMGpwMEdKOGswOCtlVTZxdGprdHY1
Zm5uMy9lRnlhVExxMzcKa1Jma2czSEVFVWY0RmViejBuQWVBaENBQUFRZ0FBRUlRQUFDblozQVA5
SUVxeU5kRksxSS92cnJyM3VUc1A3OSsvc1YzK1hFcjRVSgo1UnVpbWNEa3dLOVJrZ3N2dk5Ddld0
NlI2azlkSUFBQkNFQUFBaENBQUFRZ1VJZEFtUWtXQ2tnZG1xMUlLeWYrM1hiYnplNjU1eDQvCnBX
OWF4TXd6eit4TnhiUnVTYytlUGRQUkhFTUFBaENBQUFRZ0FBRUlRS0JURVVBQjZTQ1hTOU1UYXlw
ZXpWZ2xFekg1cWN3MDAweCsKUFpBT1VrV3FBUUVJUUFBQ0VJQUFCQ0FBZ1lZSm9JQTBqQkFCRUlB
QUJDQUFBUWhBQUFJUWdFQlZBZzBySUZVTEloMEVJQUFCQ0VBQQpBaENBQUFRZ0FJRXlBdis0YVhq
TEdrdzhCQ0FBQVFoQUFBSVFnQUFFSU5CK0JGQkEybzg5SlVNQUFoQ0FBQVFnQUFFSVFLRExFVUFC
CjZYS1huQVpEQUFJUWdBQUVJQUFCQ0VDZy9RaWdnTFFmZTBxR0FBUWdBQUVJUUFBQ0VJQkFseU9B
QXRMbExqa05oZ0FFSUFBQkNFQUEKQWhDQVFQc1JRQUZwUC9hVURBRUlRQUFDRUlBQUJDQUFnUzVI
QUFXa3kxMXlHZ3dCQ0VBQUFoQ0FBQVFnQUlIMkk0QUMwbjdzS1JrQwpFSUFBQkNBQUFRaEFBQUpk
amdBS1NKZTc1RFFZQWhDQUFBUWdBQUVJUUFBQzdVY0FCYVQ5MkZNeUJDQUFBUWhBQUFJUWdBQUV1
aHdCCkZKQXVkOGxwTUFRZ0FBRUlRQUFDRUlBQUJOcVBBQXBJKzdHblpBaEFBQUlRZ0FBRUlBQUJD
SFE1QWlnZ1hlNlMwMkFJUUFBQ0VJQUEKQkNBQUFRaTBId0VVa1BaalQ4a1FnQUFFSUFBQkNFQUFB
aERvY2dSUVFMcmNKYWZCRUlBQUJDQUFBUWhBQUFJUWFEOENQY3FLSGpKawpTRmtTNGlFQUFRaEFB
QUlRZ0FBRUlBQUJDSGdDdlhyMUtpVEJDRWdoSGlJaEFBRUlRQUFDRUlBQUJDQUFnV1lTK0Vjb0lI
LysrYWU5CisrNjd1VnlHRFJ0bW4zMzJXVzc4YjcvOVpzOC8vM3h1ZkoySVgzNzV4VDcrK09NNldV
Z0xBUWhBQUFJUWdBQUVJQUNCTGtPZ1ZBRzUKLy83N2JlR0ZGN1lKSnBqQTdyNzc3aFpnM25ubkhk
dCsrKzE5M082NzcyNkRCdzl1RWQ4V0J5Ky8vTEl0dWVTU3RzY2VlMlFXZDlsbApsOW1NTTg1b3Q5
OStlMmI4U3krOVpQMzY5YlBOTjk4OE03N095VnR1dWNWbW4zMTJPK2VjYytwa0l5MEVJQUFCQ0VB
QUFoQ0FBQVM2CkRJRlNCV1RGRlZlMFk0ODkxZ1BaZWVlZDdZTVBQb2poekRycnJQNWxlOElKSjdU
VFR6L2RwcHh5eWppdTdvNUdJWjU4OHNtNjJheFAKbno3V3QyOWZHM1hVVVRQemJyWFZWamIrK09O
bnh1bmtBZ3NzWUJ0dnZIRnVmSjJJZGRaWnh5c2dkZktRRmdJUWdBQUVJQUFCQ0VBQQpBbDJKUUtr
Q0loZzlldlN3VFRmZDFINy8vWGMvVWlBem94QVVOOTk4ODFtM2J0M0NxVXJiS0lyaWRKSzd3dzQ3
MkxQUFBodWZxN0x6CjExOS8rV1Nxd3lpajVEZEZ5a2xSL1VZYmJiVEMrQ3AxQ1dtYUtTdklaQXNC
Q0VBQUFoQ0FBQVFnQUlGL0NvSFNXYkJDUStlWVl3NWIKYkxIRmJLZWRkcks5OTk3YnpqMzMzQkEx
d3N2L1YxOTlaV2VjY1lhOSt1cXI5dE5QUDlsSko1MWtDeTY0b0U4dk02WHZ2Ly9laGc0ZAphdmZl
ZTYvSnhPdTg4ODd6K3hwZEdUUm9rSjE4OHNrK1g1Nk1uMy8rMlE0OTlGQ2JaSkpKN0lzdnZyQzMz
MzdiUmg5OTlMZytXVHRTCm1nNDU1QkM3L3ZycmJZb3BwckFMTHJqQU5JS1RGZVF6Y3NRUlIzaVpx
czlVVTAxbGh4OSt1STA1NXBnK3VXU3BqdU9PTzY2OTl0cHIKWGdIYmRkZGRSeENsT0ptR2lkdUdH
MjVvYzgwMTF3aHBPQUVCQ0VBQUFoQ0FBQVFnQUlHdVJLQ3lBaUlvRzIyMGtUMzMzSE4yNVpWWApl
b1ZDNWszcElJZndYWGJaeFM2NTVCSWJlK3l4Ylo5OTlySCsvZnViZkMxMGZQYlpaOXNqanp6aXMz
Mzk5ZGVtVVl6ZGR0dk5wMTlyCnJiVnN6ejMzTk1tUTdDd1o0NDAzbm0yOTlkYTJ3UVlibUV5ZWxM
OTM3OTQyMjJ5enBhdlM0dmpHRzIvMFNzc0tLNnpnNjZlMnZQamkKaTM1MHAwVkNkeUJsUVQ0aDJt
cDBadVdWVi9iMXVlNjY2M3hTeGUyMzMzNmVnWlFzK1pESUQyV2VlZVpwSVdyQWdBRzIzWGJiZVc0
dApJamlBQUFRZ0FBRUlRQUFDRUlCQUZ5V1FiN2VVQStUNDQ0LzNYL0lQT09BQWUrV1ZWMFpJZGV1
dHQ1ck1xMlJPOWRCREQ5bWtrMDVxCjMzNzdyVDN6ekRQMnd3OC8yT3V2djI0UFBQQ0F6NmNYK2FR
cFZqQ1RLcElocFVINWwxMTJXUzlEcGxmTEw3LzhDUFZJbjVBeXNkSksKSzlrU1N5eGhoeDEybUgz
MDBVZjIyR09QcFpQNU9rdkprbktqSVBPdFRUYlp4SmY1d2dzdjJCTlBQT0ZIUGVRN29qRHZ2UFBh
S2FlYwpZbE5QUGJVL0R2OHV2ZlJTNzV3dlJZY0FBUWhBQUFJUWdBQUVJQUFCQ1B3Zmdkb0t5Qmhq
akdGWFhIR0ZhYnZGRmx0WWVxRkNLUWhhCmZFUytFUHJUREZveXU5TG9nSnpWVjE5OWRlLzByWkdS
YWFhWnhycDM3ejdDdFNpUzhmVFRUOXNzczh4aUdna0pRU01yUVhrSjU5TGIKbmoxN3hxZUNPVmpT
b1Q1RWFsYXRpU2FhcUlWVCsvenp6KytqcFR4SmtWcG9vWVZhbEtmUkdzMFNGc0tERHo1b3A1NTZx
aDhaQ2VmWQpRZ0FDRUlBQUJDQUFBUWhBQUFMT3Y3dzFFS2FiYmpydkF5TEhkSmtZSlIzQXYvdnVP
NjlVTEwzMDBwbWlMN3JvSXB0c3NzbnMvUFBQCjl5TUpOOTEwa3lXVkEyVXFrcUdwZmpXaWtnNWxD
a2d5dlVZcnhobG5IUCtYUEs5OStYZEl2dnhBbEVaQi9pOVNsT1RQSXJPeHQ5NTYKeTUvUCs3Zm9v
b3VhRktVRER6elF6anJyckx4a25JY0FCQ0FBQVFoQUFBSVFnRUNYSTFCcEJFUitGbUhHcVVCb2xW
VldNVGxlUC96dwp3L2JOTjkrRTAzNVVRNlpOdi83NmEzeE9abFpQUGZXVWZmbmxsLzRGWHRQNlN2
RjQ4ODAzL2VoSVNCaVVDSTJNNU1tWWZQTEp2WUx3CjNudnZoV3kxdDU5Ly9ybFhNT2FlZSs0Ujhz
NDg4OHkrclVuek1pa2Q4a3VSMDdxVWwrQXNIektyZlhJNEQwR0tpeFNzYTYrOTF1NjQKNDQ1d21p
MEVJQUFCQ0VBQUFoQ0FBQVM2UElGS0Nvak1ySkpLUnFDbVdhVVdXV1NSY09pMzY2Ky92bWtXTERt
VGE3WXJ2YnlmZU9LSgpOc01NTS9pUkRmbDNLTWh4VzBwTUdHV1FTVlZZclZ5K0dua3kxbDU3YlQ4
YW9RVUdReGc0Y0tCWFNxUWs1SVdrQXFYMVJsUzJuTmNWCmhnOGY3cDNOdGIvbW1tdjZXYkllZmZS
Ukhmb2dSM01wSnZJN1VmbWFjVXRyb21naFJ2M0pweVNzZ2ZMSEgzOTR2eGFabm1rR0xEblkKSjFk
cDEzb25NczlxajBVYlEzdllRZ0FDRUlBQUJDQUFBUWhBb0wwSWRIZlR5eDVlVlBoVlYxM2xuYXcx
aTlWWVk0M2xwNXdONldWNgpKVVZDb3h2cnJiZWVQeTMvaVlrbm50Z3ZVS2dYYlkwQ3lObGNmaFJT
WWc0NjZDRC9BcTlSQ0NrY21qRkxjajc5OUZPZlIxc3BBVEx6CjBvcmlhUm55TDVFeW82bDlOYVd1
ZkRLa1hHaTJLdFZQNWxMcG9DbC9iN2poQmovMXJ4ek1OWHB5d2drbitIcG9waXBOOS92aGh4LzYK
ZW10Tms2V1dXc3BPTyswMGI0Nmx2SnBCUzQ3bWFwY1dOZFJxNTlkY2M0MDNyOUkwd252dHRaZjNT
OUZxNjFLTU5EV3c1TWdVU3labgpVcnJrTTZORkU5OS8vMzN2TzZNcGVZTUNsSzR2eHhDQUFBUWdB
QUVJUUFBQ0VPaXNCTUxTRlhuMTcrYk1oLzcvaW9BWnFkSk81aGxKCi9PeFdTYWR3cGRHb2dyN3l5
MlJKQ3dVcVNGR1FzcUhac0hST3p1UEpJTjhMT2FxSGtDVWp4R20wUXlNc1NpOXpMNzNnbHdXWmdD
bDkKcUU5UmVtR1JxWlhxTy8zMDA0K1FWUEVhM2RGYUpIV0RGREVwYWdRSVFBQUNFSUFBQkNBQUFR
ajgwd2hvd0tBb05FVUJLU3FBT0FoQQpBQUlRZ0FBRUlBQUJDRUNnNnhBb1UwQXErWUIwSFZ5MEZB
SVFnQUFFSUFBQkNFQUFBaEFZbVFSUVFFWW1YV1JEQUFJUWdBQUVJQUFCCkNFQUFBaTBJbEpwZ3RV
ak5BUVFnQUFFSVFBQUNFSUFBQkNBQWdRWUlNQUxTQUR5eVFnQUNFSUFBQkNBQUFRaEFBQUwxQ0tD
QTFPTkYKYWdoQUFBSVFnQUFFSUFBQkNFQ2dBUUlvSUEzQUl5c0VJQUFCQ0VBQUFoQ0FBQVFnVUk4
QUNrZzlYcVNHQUFRZ0FBRUlRQUFDRUlBQQpCQm9nZ0FMU0FEeXlRZ0FDRUlBQUJDQUFBUWhBQUFM
MUNLQ0ExT05GYWdoQUFBSVFnQUFFSUFBQkNFQ2dBUUlvSUEzQUl5c0VJQUFCCkNFQUFBaENBQUFR
Z1VJOEFDa2c5WHFTR0FBUWdBQUVJUUFBQ0VJQUFCQm9nZ0FMU0FEeXlRZ0FDRUlBQUJDQUFBUWhB
QUFMMUNLQ0EKMU9ORmFnaEFBQUlRZ0FBRUlBQUJDRUNnQVFJb0lBM0FJeXNFSUFBQkNFQUFBaENB
QUFRZ1VJOEFDa2c5WHFTR0FBUWdBQUVJUUFBQwpFSUFBQkJvZ2dBTFNBRHl5UWdBQ0VJQUFCQ0FB
QVFoQUFBTDFDS0NBMU9ORmFnaEFBQUlRZ0FBRUlBQUJDRUNnQVFJb0lBM0FJeXNFCklBQUJDRUFB
QWhDQUFBUWdVSTlBajdMa1E0WU1LVXRDUEFRZ0FBRUlRQUFDRUlBQUJDQUFBVStnVjY5ZWhTUVlB
U25FUXlRRUlBQUIKQ0VBQUFoQ0FBQVFnMEV3Qy93Z0Y1TTgvLzdSMzMzMDNsOHV3WWNQc3M4OCt5
NDMvN2JmZjdQbm5uOCtOcnhQeHl5Ky8yTWNmZjF3bgpTNlcwMzM3N3JURWFWUWtWaVNBQUFRaEFB
QUlRZ0FBRU9qQ0JVZ1hrL3Z2dnQ0VVhYdGdtbUdBQ3UvdnV1MXMwNVoxMzNySHR0OS9lCngrMisr
KzQyZVBEZ0Z2RnRjZkR5eXkvYmtrc3VhWHZzc1VkbWNaZGRkcG5OT09PTWR2dnR0MmZHdi9UU1M5
YXZYei9iZlBQTk0rUHIKbkx6bGxsdHM5dGxudDNQT09hZE9OcC8ybUdPT3NRc3V1TUR2enovLy9Q
Yjk5OS83L1ZkcHVjQW5BQUFmUWtsRVFWUmVlY1hXWG50dAptM1hXV1gwN3R0NTZhL3YxMTE5cnl5
Y0RCQ0FBQVFoQUFBSVFnQUFFT2dLQlVnVmt4UlZYdEdPUFBkYlhkZWVkZDdZUFB2Z2dycmRlCml2
V3lQZUdFRTlycHA1OXVVMDQ1WlJ4WGQwZWpFRTgrK1dUZGJOYW5UeC9yMjdldmpUcnFxSmw1dDlw
cUt4dC8vUEV6NDNSeWdRVVcKc0kwMzNqZzN2azdFT3V1czR4V1FPbmxDMnZ2dXU4K1dXMjQ1ZS9Q
Tk4yM1NTU2YxZGY3eHh4ODkrKzIyMjg3Kzk3Ly8yWjU3N21tMwozWGFiblhIR0dTRWJXd2hBQUFJ
UWdBQUVJQUFCQ0hRcUFxVUtpRnJUbzBjUDIzVFRUZTMzMzMvM0l3VXlNd3BCY2ZQTk41OTE2OVl0
Cm5LcTBqYUlvVGllNU8reXdnejM3N0xQeHVTbzdmLzMxbDArbU9vd3lTbjVUcEp3VTFXKzAwVVly
aks5U2w1Q21OYkkrL2ZSVGt3S20Ka1pvSEhuakFWbHBwSlMvdXhSZGZ0RFBQUE5OV1hubGxyNVFj
ZlBEQk5zTU1NOWdMTDd3UWltTUxBUWhBQUFJUWdBQUVJQUNCVGtXZwpkQmFzMEpvNTVwakRGbHRz
TWR0cHA1MXM3NzMzdG5QUFBUZEVqZkR5LzlWWFgvbXY5SysrK3FyOTlOTlBkdEpKSjltQ0N5N28w
OHRNClNlWkZRNGNPdFh2dnZkZGs0blhlZWVmNWZZMnVEQm8weUU0KytXU2ZUMS82czJUOC9QUFBk
dWloaDlva2sweGlYM3p4aGIzOTl0czIKK3VpangvWEoycEhTZE1naGg5ajExMTl2VTB3eGhUZDMw
Z2hPVnBEUHlCRkhIT0ZscWo1VFRUV1ZIWDc0NFRibW1HUDY1SktsT280Nwo3cmoyMm11dmVRVnMx
MTEzSFVHVTRtUWFKbTRiYnJpaHpUWFhYQzNTaUkxR05jS29rc3lybm5qaUNUOHFJejhTbFpFTVVx
SlVaNDJRCkVDQUFBUWhBQUFJUWdBQUVJTkFaQ1ZSV1FOUzRqVGJheUo1NzdqbTc4c29ydlVJaDg2
WjBrRVA0THJ2c1lwZGNjb21OUGZiWXRzOCsKKzFqLy92MU52aFk2UHZ2c3MrMlJSeDd4MmI3Kytt
dlRLTVp1dSszbTA2KzExbHIraFZ3eUpEdEx4bmpqaldkNlVkOWdndzFNSmsvSwozN3QzYjV0dHR0
blNWV2x4Zk9PTk4zcWxaWVVWVnZEMVUxczB3cURSazNTUXNpQ2ZFRzAxT3FNUkNOWG51dXV1ODBr
VnQ5OSsrM2tHClVwRGtReUkvbEhubW1hZUZxQUVEQnBqTXAxUldWaENQQ3krODBMZC8rZVdYTjVt
N1NVbTU1cHByUmxEcWxGK2pScSsvL3Jvdk8wc2UKNXlBQUFRaEFBQUlRZ0FBRUlORFJDZVRiTGVY
VS9QampqL2N2eVFjY2NJREpRVG9kYnIzMVZ2K2lMSE9xaHg1NnlIK3Qxd3hPenp6egpqUDN3d3cv
K0JWcG1SZ3A2a1UrYVlnVXpxU0laVWhxVWY5bGxsL1V5WkhxbGwvZXlJR1ZDcGsxTExMR0VIWGJZ
WWZiUlJ4L1pZNDg5Ck5rSTIxVmxLbHBRYkJabHZiYkxKSnI1TW1UNXBoRUlqRy9JZFVaaDMzbm50
bEZOT3NhbW5udG9maDMrWFhucXBkODdQVXo1Q09tM0YKWnRGRkZ6VTUxRXVKeVRNbnUrT09PMHdL
VkZyUlNjcGlId0lRZ0FBRUlBQUJDRUFBQWgyWlFHMEZaSXd4eHJBcnJyakN0TjFpaXkxRwptQnBX
Q29JV0g1RXZoUDQwZzViTXJ2VFNMR2YxMVZkZjNUdDlhMlJrbW1tbXNlN2R1NC9BcDBqRzAwOC9i
YlBNTW90cEpDUUVqU1FFCjVTV2NTMjk3OXV3Wm53cm1ZTUgwS1k1d08xSUNKcHBvb2haTzdacVZT
a0dqRDFJV0ZscG9vUmJsYVhSRXM0U0Y4T0NERDlxcHA1N3EKUjBiQ3VheXQ1RDM2NktNbWt6S1pY
RW5Ca0htWTZ2REhIMysweUNMbFRRN29taTJMQUFFSVFBQUNFSUFBQkNBQWdjNUtZRVQ3b3dvdApt
VzY2NmJ3UGlCelRaV0tVL0dMLzNYZmZlYVZpNmFXWHpwUjAwVVVYMldTVFRXYm5uMysrSDBtNDZh
YWJMS2tjS0ZPUkRFMzFxeEdWCmRDaFRRSkxwTlZveHpqamorTC9rZWUzTHYwUHk1UWVpTkFyeWY1
R2lKSjhObVkyOTlkWmIvbnplUDQxbVNGRTY4TUFEN2F5enpzcEwKNXAzdU5kb2l4M0tOR01rblpy
WFZWdk5ya3NpeFB4bU9PdW9vTy9yb28wdDlYWko1MkljQUJDQUFBUWhBQUFJUWdFQkhJMUJwQkVS
KwpGbUhHcWRDQVZWWlp4ZVI0L2ZEREQ5czMzM3dUVHZ0UkRaazJKZGVxa0puVlUwODlaVjkrK2FW
L2dkZTB2bEk4Tk9Xc1JrZENDRXFFClJrYnlaRXcrK2VSZVFYanZ2ZmRDdHRyYnp6Ly8zQ3NZYzg4
OTl3aDVaNTU1WnQvV3BIbVpsQTc1cGNnQlhNcExjSllQbWRVK21XV0YKSU1WRkN0YTExMTdyUnpY
QytmUld5cHRHVGpTU3BQVlVOQklpUi9rZGQ5eXh4UWlMbEpqTk50dXN4VFRIY3ZRblFBQUNFSUFB
QkNBQQpBUWhBb0xNUnFLU0FhQVh1cEpJUkdxbVg1VVVXV1NRYyt1MzY2Njl2ZWpuVzdFNmE3VW92
N3llZWVLTC95cStSRGZsM0tNaHhXMHBNCkdHV1FTVlZZclZ5K0dua3l0Q2lmUmlPMHdHQUlBd2NP
OUVxSmxJUzhrRlNndE42SXlwYnp1c0x3NGNPOXM3bjIxMXh6VFc4R0pkT28KRU9Sb0xzVkVmaWNx
WHpOdWFVMFVMY1NvUC9tVWhEVlFaRG9saFVTbVo1b0JTdzcyUmF1MHF5NkxMNzY0Tjd2U1NJdk0x
cEpCU293NApxbzR5VGRPSzdSZGZmTEg5OTcvLzljazBmYS9NdmRwakVjaGtQZG1IQUFRZ0FBRUlR
QUFDRUlCQUZRS2xKbGlhUFVvdnVIb0oxblMwCm1vRXFCTTBncFptcTl0cHJyM0RLejBhbDZXTmxm
cVFwYjhNaWhmSnRrQitEVExBMG5hMm1rcFhwbFdhK1VwQWorV21ubmVaSEFUVEYKYnA0TXBkVzB2
U3BUb3k5NmFWYzlwQlJJdVZsdnZmV1VwRVdRcVpnVUZpM3NwNkNSR01sUTBFeFZOOTk4cy9kbGtl
TzQwbW9XS28xSQp5SmRGczJzcC9xcXJydkxsVER2dHRGNEJrSEloVXlzeDBVeFdhcWRXVzlkSWlF
WlkxbDEzWFM5TDVVaXAwZFRGMjI2N3JTOHovTk1VCndsSldOS3B6OWRWWGV3ZjVFS2V0Um8yMHdy
eVVHckVKUVNaczhoOVIrUERERDcxcGx2aFdjWGdQTXRoQ0FBSVFnQUFFSUFBQkNFQ2cKUFFoMGN5
L0EvMzlGd0l3YWFQU2pMRWl4U0RxRks3MisyT3VydkV5V3dsUzNHb1dRdjRqUzY1eWN4NU5Cdmhk
NmtROGhTMGFJMDJpSApsQ0tsbDdtWG5PTExnaFFQcFEvMUtVb3ZMREsxVW4ybm4zNzZFWklxWHFN
N1dvdWt2WU5HcCtRNFQ0QUFCQ0FBQVFoQUFBSVFnRUI3CkU5QkgvS0xRRkFXa3FBRGlJQUFCQ0VB
QUFoQ0FBQVFnQUlHdVE2Qk1BYW5rQTlKMWNORlNDRUFBQWhDQUFBUWdBQUVJUUdCa0VrQUIKR1ps
MGtRMEJDRUFBQWhDQUFBUWdBQUVJdENCUWFvTFZJalVIRUlBQUJDQUFBUWhBQUFJUWdBQUVHaURB
Q0VnRDhNZ0tBUWhBQUFJUQpnQUFFSUFBQkNOUWpnQUpTanhlcElRQUJDRUFBQWhDQUFBUWdBSUVH
Q0tDQU5BQ1ByQkNBQUFRZ0FBRUlRQUFDRUlCQVBRSW9JUFY0CmtSb0NFSUFBQkNBQUFRaEFBQUlR
YUlBQUNrZ0Q4TWdLQVFoQUFBSVFnQUFFSUFBQkNOUWpnQUpTanhlcElRQUJDRUFBQWhDQUFBUWcK
QUlFR0NLQ0FOQUNQckJDQUFBUWdBQUVJUUFBQ0VJQkFQUUlvSVBWNGtSb0NFSUFBQkNBQUFRaEFB
QUlRYUlBQUNrZ0Q4TWdLQVFoQQpBQUlRZ0FBRUlBQUJDTlFqZ0FKU2p4ZXBJUUFCQ0VBQUFoQ0FB
QVFnQUlFR0NLQ0FOQUNQckJDQUFBUWdBQUVJUUFBQ0VJQkFQUUlvCklQVjRrUm9DRUlBQUJDQUFB
UWhBQUFJUWFJQUFDa2dEOE1nS0FRaEFBQUlRZ0FBRUlBQUJDTlFqZ0FKU2p4ZXBJUUFCQ0VBQUFo
Q0EKQUFRZ0FJRUdDS0NBTkFDUHJCQ0FBQVFnQUFFSVFBQUNFSUJBUFFJb0lQVjRrUm9DRUlBQUJD
QUFBUWhBQUFJUWFJQUFDa2dEOE1nSwpBUWhBQUFJUWdBQUVJQUFCQ05RamdBSlNqeGVwSVFBQkNF
QUFBaENBQUFRZ0FJRUdDS0NBTkFDUHJCQ0FBQVFnQUFFSVFBQUNFSUJBClBRSW9JUFY0a1JvQ0VJ
QUFCQ0FBQVFoQUFBSVFhSUFBQ2tnRDhNZ0tBUWhBQUFJUWdBQUVJQUFCQ05RamdBSlNqeGVwSVFB
QkNFQUEKQWhDQUFBUWdBSUVHQ0tDQU5BQ1ByQkNBQUFRZ0FBRUlRQUFDRUlCQVBRSW9JUFY0a1Jv
Q0VJQUFCQ0FBQVFoQUFBSVFhSUFBQ2tnRAo4TWdLQVFoQUFBSVFnQUFFSUFBQkNOUWpnQUpTanhl
cElRQUJDRUFBQWhDQUFBUWdBSUVHQ0tDQU5BQ1ByQkNBQUFRZ0FBRUlRQUFDCkVJQkFQUUlvSVBW
NGtSb0NFSUFBQkNBQUFRaEFBQUlRYUlBQUNrZ0Q4TWdLQVFoQUFBSVFnQUFFSUFBQkNOUWpnQUpT
anhlcElRQUIKQ0VBQUFoQ0FBQVFnQUlFR0NLQ0FOQUNQckJDQUFBUWdBQUVJUUFBQ0VJQkFQUUlv
SVBWNGtSb0NFSUFBQkNBQUFRaEFBQUlRYUlBQQpDa2dEOE1nS0FRaEFBQUlRZ0FBRUlBQUJDTlFq
Z0FKU2p4ZXBJUUFCQ0VBQUFoQ0FBQVFnQUlFR0NLQ0FOQUR2LzdWZmh6WUFBQUFJCncvNy9taHNX
YkQyWXVya1NJRUNBQUFFQ0JBZ1FJTkFFQkVqenNpWkFnQUFCQWdRSUVDQkE0QkFRSUFlZUt3RUNC
QWdRSUVDQUFBRUMKVFVDQU5DOXJBZ1FJRUNCQWdBQUJBZ1FPQVFGeTRMa1NJRUNBQUFFQ0JBZ1FJ
TkFFQkVqenNpWkFnQUFCQWdRSUVDQkE0QkFRSUFlZQpLd0VDQkFnUUlFQ0FBQUVDVFVDQU5DOXJB
Z1FJRUNCQWdBQUJBZ1FPQVFGeTRMa1NJRUNBQUFFQ0JBZ1FJTkFFQkVqenNpWkFnQUFCCkFnUUlF
Q0JBNEJBUUlBZWVLd0VDQkFnUUlFQ0FBQUVDVFVDQU5DOXJBZ1FJRUNCQWdBQUJBZ1FPQVFGeTRM
a1NJRUNBQUFFQ0JBZ1EKSU5BRUJFanpzaVpBZ0FBQkFnUUlFQ0JBNEJBUUlBZWVLd0VDQkFnUUlF
Q0FBQUVDVFVDQU5DOXJBZ1FJRUNCQWdBQUJBZ1FPQVFGeQo0TGtTSUVDQUFBRUNCQWdRSU5BRUJF
anpzaVpBZ0FBQkFnUUlFQ0JBNEJBUUlBZWVLd0VDQkFnUUlFQ0FBQUVDVFVDQU5DOXJBZ1FJCkVD
QkFnQUFCQWdRT0FRRnk0TGtTSUVDQUFBRUNCQWdRSU5BRUJFanpzaVpBZ0FBQkFnUUlFQ0JBNEJB
UUlBZWVLd0VDQkFnUUlFQ0EKQUFFQ1RVQ0FOQzlyQWdRSUVDQkFnQUFCQWdRT0FRRnk0TGtTSUVD
QUFBRUNCQWdRSU5BRUJFanpzaVpBZ0FBQkFnUUlFQ0JBNEJBUQpJQWVlS3dFQ0JBZ1FJRUNBQUFF
Q1RVQ0FOQzlyQWdRSUVDQkFnQUFCQWdRT0FRRnk0TGtTSUVDQUFBRUNCQWdRSU5BRUJFanpzaVpB
CmdBQUJBZ1FJRUNCQTRCQVFJQWVlS3dFQ0JBZ1FJRUNBQUFFQ1RVQ0FOQzlyQWdRSUVDQkFnQUFC
QWdRT0FRRnk0TGtTSUVDQUFBRUMKQkFnUUlOQUVCRWp6c2laQWdBQUJBZ1FJRUNCQTRCQVFJQWVl
S3dFQ0JBZ1FJRUNBQUFFQ1RVQ0FOQzlyQWdRSUVDQkFnQUFCQWdRTwpBUUZ5NExrU0lFQ0FBQUVD
QkFnUUlOQUVCRWp6c2laQWdBQUJBZ1FJRUNCQTRCQVFJQWVlS3dFQ0JBZ1FJRUNBQUFFQ1RVQ0FO
QzlyCkFnUUlFQ0JBZ0FBQkFnUU9BUUZ5NExrU0lFQ0FBQUVDQkFnUUlOQUVCRWp6c2laQWdBQUJB
Z1FJRUNCQTRCQVFJQWVlS3dFQ0JBZ1EKSUVDQUFBRUNUVUNBTkM5ckFnUUlFQ0JBZ0FBQkFnUU9B
UUZ5NExrU0lFQ0FBQUVDQkFnUUlOQUVCRWp6c2laQWdBQUJBZ1FJRUNCQQo0QkFRSUFlZUt3RUNC
QWdRSUVDQUFBRUNUVUNBTkM5ckFnUUlFQ0JBZ0FBQkFnUU9BUUZ5NExrU0lFQ0FBQUVDQkFnUUlO
QUVCRWp6CnNpWkFnQUFCQWdRSUVDQkE0QkFRSUFlZUt3RUNCQWdRSUVDQUFBRUNUVUNBTkM5ckFn
UUlFQ0JBZ0FBQkFnUU9BUUZ5NExrU0lFQ0EKQUFFQ0JBZ1FJTkFFQkVqenNpWkFnQUFCQWdRSUVD
QkE0QkFRSUFlZUt3RUNCQWdRSUVDQUFBRUNUVUNBTkM5ckFnUUlFQ0JBZ0FBQgpBZ1FPQVFGeTRM
a1NJRUNBQUFFQ0JBZ1FJTkFFQkVqenNpWkFnQUFCQWdRSUVDQkE0QkFRSUFlZUt3RUNCQWdRSUVD
QUFBRUNUVUNBCk5DOXJBZ1FJRUNCQWdBQUJBZ1FPQVFGeTRMa1NJRUNBQUFFQ0JBZ1FJTkFFQkVq
enNpWkFnQUFCQWdRSUVDQkE0QkFRSUFlZUt3RUMKQkFnUUlFQ0FBQUVDVFVDQU5DOXJBZ1FJRUNC
QWdBQUJBZ1FPQVFGeTRMa1NJRUNBQUFFQ0JBZ1FJTkFFQkVqenNpWkFnQUFCQWdRSQpFQ0JBNEJB
UUlBZWVLd0VDQkFnUUlFQ0FBQUVDVFVDQU5DOXJBZ1FJRUNCQWdBQUJBZ1FPQVFGeTRMa1NJRUNB
QUFFQ0JBZ1FJTkFFCkJFanpzaVpBZ0FBQkFnUUlFQ0JBNEJBUUlBZWVLd0VDQkFnUUlFQ0FBQUVD
VFVDQU5DOXJBZ1FJRUNCQWdBQUJBZ1FPQVFGeTRMa1MKSUVDQUFBRUNCQWdRSU5BRUJFanpzaVpB
Z0FBQkFnUUlFQ0JBNEJBUUlBZWVLd0VDQkFnUUlFQ0FBQUVDVFVDQU5DOXJBZ1FJRUNCQQpnQUFC
QWdRT0FRRnk0TGtTSUVDQUFBRUNCQWdRSU5BRUJFanpzaVpBZ0FBQkFnUUlFQ0JBNEJBUUlBZWVL
d0VDQkFnUUlFQ0FBQUVDClRVQ0FOQzlyQWdRSUVDQkFnQUFCQWdRT0FRRnk0TGtTSUVDQUFBRUNC
QWdRSU5BRUJFanpzaVpBZ0FBQkFnUUlFQ0JBNEJBUUlBZWUKS3dFQ0JBZ1FJRUNBQUFFQ1RVQ0FO
QzlyQWdRSUVDQkFnQUFCQWdRT0FRRnk0TGtTSUVDQUFBRUNCQWdRSU5BRUJFanpzaVpBZ0FBQgpB
Z1FJRUNCQTRCQVFJQWVlS3dFQ0JBZ1FJRUNBQUFFQ1RVQ0FOQzlyQWdRSUVDQkFnQUFCQWdRT0FR
Rnk0TGtTSUVDQUFBRUNCQWdRCklOQUVCRWp6c2laQWdBQUJBZ1FJRUNCQTRCQVFJQWVlS3dFQ0JB
Z1FJRUNBQUFFQ1RVQ0FOQzlyQWdRSUVDQkFnQUFCQWdRT0FRRnkKNExrU0lFQ0FBQUVDQkFnUUlO
QUVCRWp6c2laQWdBQUJBZ1FJRUNCQTRCQVFJQWVlS3dFQ0JBZ1FJRUNBQUFFQ1RVQ0FOQzlyQWdR
SQpFQ0JBZ0FBQkFnUU9BUUZ5NExrU0lFQ0FBQUVDQkFnUUlOQUVCRWp6c2laQWdBQUJBZ1FJRUNC
QTRCQVFJQWVlS3dFQ0JBZ1FJRUNBCkFBRUNUVUNBTkM5ckFnUUlFQ0JBZ0FBQkFnUU9BUUZ5NExr
U0lFQ0FBQUVDQkFnUUlOQUVCRWp6c2laQWdBQUJBZ1FJRUNCQTRCQVEKSUFlZUt3RUNCQWdRSUVD
QUFBRUNUVUNBTkM5ckFnUUlFQ0JBZ0FBQkFnUU9BUUZ5NExrU0lFQ0FBQUVDQkFnUUlOQUVCRWp6
c2laQQpnQUFCQWdRSUVDQkE0QkFRSUFlZUt3RUNCQWdRSUVDQUFBRUNUVUNBTkM5ckFnUUlFQ0JB
Z0FBQkFnUU9BUUZ5NExrU0lFQ0FBQUVDCkJBZ1FJTkFFQkVqenNpWkFnQUFCQWdRSUVDQkE0QkFR
SUFlZUt3RUNCQWdRSUVDQUFBRUNUVUNBTkM5ckFnUUlFQ0JBZ0FBQkFnUU8KQVFGeTRMa1NJRUNB
QUFFQ0JBZ1FJTkFFQkVqenNpWkFnQUFCQWdRSUVDQkE0QkFRSUFlZUt3RUNCQWdRSUVDQUFBRUNU
VUNBTkM5cgpBZ1FJRUNCQWdBQUJBZ1FPQVFGeTRMa1NJRUNBQUFFQ0JBZ1FJTkFFQkVqenNpWkFn
QUFCQWdRSUVDQkE0QkFRSUFlZUt3RUNCQWdRCklFQ0FBQUVDVFVDQU5DOXJBZ1FJRUNCQWdBQUJB
Z1FPQVFGeTRMa1NJRUNBQUFFQ0JBZ1FJTkFFQkVqenNpWkFnQUFCQWdRSUVDQkEKNEJBUUlBZWVL
d0VDQkFnUUlFQ0FBQUVDVFVDQU5DOXJBZ1FJRUNCQWdBQUJBZ1FPQVFGeTRMa1NJRUNBQUFFQ0JB
Z1FJTkFFQkVqegpzaVpBZ0FBQkFnUUlFQ0JBNEJBUUlBZWVLd0VDQkFnUUlFQ0FBQUVDVFVDQU5D
OXJBZ1FJRUNCQWdBQUJBZ1FPQVFGeTRMa1NJRUNBCkFBRUNCQWdRSU5BRUJFanpzaVpBZ0FBQkFn
UUlFQ0JBNEJBUUlBZWVLd0VDQkFnUUlFQ0FBQUVDVFVDQU5DOXJBZ1FJRUNCQWdBQUIKQWdRT0FR
Rnk0TGtTSUVDQUFBRUNCQWdRSU5BRUJFanpzaVpBZ0FBQkFnUUlFQ0JBNEJBUUlBZWVLd0VDQkFn
UUlFQ0FBQUVDVFVDQQpOQzlyQWdRSUVDQkFnQUFCQWdRT0FRRnk0TGtTSUVDQUFBRUNCQWdRSU5B
RUJFanpzaVpBZ0FBQkFnUUlFQ0JBNEJBUUlBZWVLd0VDCkJBZ1FJRUNBQUFFQ1RVQ0FOQzlyQWdR
SUVDQkFnQUFCQWdRT0FRRnk0TGtTSUVDQUFBRUNCQWdRSU5BRUJFanpzaVpBZ0FBQkFnUUkKRUNC
QTRCQVFJQWVlS3dFQ0JBZ1FJRUNBQUFFQ1RVQ0FOQzlyQWdRSUVDQkFnQUFCQWdRT0FRRnk0TGtT
SUVDQUFBRUNCQWdRSU5BRQpCRWp6c2laQWdBQUJBZ1FJRUNCQTRCQVFJQWVlS3dFQ0JBZ1FJRUNB
QUFFQ1RVQ0FOQzlyQWdRSUVDQkFnQUFCQWdRT0FRRnk0TGtTCklFQ0FBQUVDQkFnUUlOQUVCRWp6
c2laQWdBQUJBZ1FJRUNCQTRCQVFJQWVlS3dFQ0JBZ1FJRUNBQUFFQ1RVQ0FOQzlyQWdRSUVDQkEK
Z0FBQkFnUU9BUUZ5NExrU0lFQ0FBQUVDQkFnUUlOQUVCRWp6c2laQWdBQUJBZ1FJRUNCQTRCQVFJ
QWVlS3dFQ0JBZ1FJRUNBQUFFQwpUVUNBTkM5ckFnUUlFQ0JBZ0FBQkFnUU9BUUZ5NExrU0lFQ0FB
QUVDQkFnUUlOQUVCRWp6c2laQWdBQUJBZ1FJRUNCQTRCQVFJQWVlCkt3RUNCQWdRSUVDQUFBRUNU
VUNBTkM5ckFnUUlFQ0JBZ0FBQkFnUU9BUUZ5NExrU0lFQ0FBQUVDQkFnUUlOQUVCRWp6c2laQWdB
QUIKQWdRSUVDQkE0QkFRSUFlZUt3RUNCQWdRSUVDQUFBRUNUVUNBTkM5ckFnUUlFQ0JBZ0FBQkFn
UU9BUUZ5NExrU0lFQ0FBQUVDQkFnUQpJTkFFQkVqenNpWkFnQUFCQWdRSUVDQkE0QkFRSUFlZUt3
RUNCQWdRSUVDQUFBRUNUVUNBTkM5ckFnUUlFQ0JBZ0FBQkFnUU9BUUZ5CjRMa1NJRUNBQUFFQ0JB
Z1FJTkFFQkVqenNpWkFnQUFCQWdRSUVDQkE0QkFRSUFlZUt3RUNCQWdRSUVDQUFBRUNUVUNBTkM5
ckFnUUkKRUNCQWdBQUJBZ1FPQVFGeTRMa1NJRUNBQUFFQ0JBZ1FJTkFFQkVqenNpWkFnQUFCQWdR
SUVDQkE0QkFRSUFlZUt3RUNCQWdRSUVDQQpBQUVDVFVDQU5DOXJBZ1FJRUNCQWdBQUJBZ1FPQVFG
eTRMa1NJRUNBQUFFQ0JBZ1FJTkFFQkVqenNpWkFnQUFCQWdRSUVDQkE0QkFRCklBZWVLd0VDQkFn
UUlFQ0FBQUVDVFVDQU5DOXJBZ1FJRUNCQWdBQUJBZ1FPQVFGeTRMa1NJRUNBQUFFQ0JBZ1FJTkFF
QkVqenNpWkEKZ0FBQkFnUUlFQ0JBNEJBUUlBZWVLd0VDQkFnUUlFQ0FBQUVDVFVDQU5DOXJBZ1FJ
RUNCQWdBQUJBZ1FPQVFGeTRMa1NJRUNBQUFFQwpCQWdRSU5BRUJFanpzaVpBZ0FBQkFnUUlFQ0JB
NEJBUUlBZWVLd0VDQkFnUUlFQ0FBQUVDVFVDQU5DOXJBZ1FJRUNCQWdBQUJBZ1FPCkFRRnk0TGtT
SUVDQUFBRUNCQWdRSU5BRUJFanpzaVpBZ0FBQkFnUUlFQ0JBNEJBUUlBZWVLd0VDQkFnUUlFQ0FB
QUVDVFVDQU5DOXIKQWdRSUVDQkFnQUFCQWdRT0FRRnk0TGtTSUVDQUFBRUNCQWdRSU5BRUJFanpz
aVpBZ0FBQkFnUUlFQ0JBNEJBUUlBZWVLd0VDQkFnUQpJRUNBQUFFQ1RVQ0FOQzlyQWdRSUVDQkFn
QUFCQWdRT0FRRnk0TGtTSUVDQUFBRUNCQWdRSU5BRUJFanpzaVpBZ0FBQkFnUUlFQ0JBCjRCQVFJ
QWVlS3dFQ0JBZ1FJRUNBQUFFQ1RVQ0FOQzlyQWdRSUVDQkFnQUFCQWdRT0FRRnk0TGtTSUVDQUFB
RUNCQWdRSU5BRUJFanoKc2laQWdBQUJBZ1FJRUNCQTRCQVFJQWVlS3dFQ0JBZ1FJRUNBQUFFQ1RV
Q0FOQzlyQWdRSUVDQkFnQUFCQWdRT0FRRnk0TGtTSUVDQQpBQUVDQkFnUUlOQUVCRWp6c2laQWdB
QUJBZ1FJRUNCQTRCQVFJQWVlS3dFQ0JBZ1FJRUNBQUFFQ1RVQ0FOQzlyQWdRSUVDQkFnQUFCCkFn
UU9BUUZ5NExrU0lFQ0FBQUVDQkFnUUlOQUVCRWp6c2laQWdBQUJBZ1FJRUNCQTRCQVFJQWVlS3dF
Q0JBZ1FJRUNBQUFFQ1RVQ0EKTkM5ckFnUUlFQ0JBZ0FBQkFnUU9BUUZ5NExrU0lFQ0FBQUVDQkFn
UUlOQUVCRWp6c2laQWdBQUJBZ1FJRUNCQTRCQVFJQWVlS3dFQwpCQWdRSUVDQUFBRUNUVUNBTkM5
ckFnUUlFQ0JBZ0FBQkFnUU9BUUZ5NExrU0lFQ0FBQUVDQkFnUUlOQUVCRWp6c2laQWdBQUJBZ1FJ
CkVDQkE0QkFRSUFlZUt3RUNCQWdRSUVDQUFBRUNUVUNBTkM5ckFnUUlFQ0JBZ0FBQkFnUU9BUUZ5
NExrU0lFQ0FBQUVDQkFnUUlOQUUKQkVqenNpWkFnQUFCQWdRSUVDQkE0QkFRSUFlZUt3RUNCQWdR
SUVDQUFBRUNUVUNBTkM5ckFnUUlFQ0JBZ0FBQkFnUU9BUUZ5NExrUwpJRUNBQUFFQ0JBZ1FJTkFF
QkVqenNpWkFnQUFCQWdRSUVDQkE0QkFRSUFlZUt3RUNCQWdRSUVDQUFBRUNUVUNBTkM5ckFnUUlF
Q0JBCmdBQUJBZ1FPQVFGeTRMa1NJRUNBQUFFQ0JBZ1FJTkFFQkVqenNpWkFnQUFCQWdRSUVDQkE0
QkFRSUFlZUt3RUNCQWdRSUVDQUFBRUMKVFVDQU5DOXJBZ1FJRUNCQWdBQUJBZ1FPQVFGeTRMa1NJ
RUNBQUFFQ0JBZ1FJTkFFQkVqenNpWkFnQUFCQWdRSUVDQkE0QkFRSUFlZQpLd0VDQkFnUUlFQ0FB
QUVDVFVDQU5DOXJBZ1FJRUNCQWdBQUJBZ1FPQVFGeTRMa1NJRUNBQUFFQ0JBZ1FJTkFFQkVqenNp
WkFnQUFCCkFnUUlFQ0JBNEJBUUlBZWVLd0VDQkFnUUlFQ0FBQUVDVFVDQU5DOXJBZ1FJRUNCQWdB
QUJBZ1FPQVFGeTRMa1NJRUNBQUFFQ0JBZ1EKSU5BRUJFanpzaVpBZ0FBQkFnUUlFQ0JBNEJBUUlB
ZWVLd0VDQkFnUUlFQ0FBQUVDVFVDQU5DOXJBZ1FJRUNCQWdBQUJBZ1FPQVFGeQo0TGtTSUVDQUFB
RUNCQWdRSU5BRUJFanpzaVpBZ0FBQkFnUUlFQ0JBNEJBUUlBZWVLd0VDQkFnUUlFQ0FBQUVDVFVD
QU5DOXJBZ1FJCkVDQkFnQUFCQWdRT0FRRnk0TGtTSUVDQUFBRUNCQWdRSU5BRUJFanpzaVpBZ0FB
QkFnUUlFQ0JBNEJBUUlBZWVLd0VDQkFnUUlFQ0EKQUFFQ1RVQ0FOQzlyQWdRSUVDQkFnQUFCQWdR
T0FRRnk0TGtTSUVDQUFBRUNCQWdRSU5BRUJFanpzaVpBZ0FBQkFnUUlFQ0JBNEJBUQpJQWVlS3dF
Q0JBZ1FJRUNBQUFFQ1RVQ0FOQzlyQWdRSUVDQkFnQUFCQWdRT0FRRnk0TGtTSUVDQUFBRUNCQWdR
SU5BRUJFanpzaVpBCmdBQUJBZ1FJRUNCQTRCQVFJQWVlS3dFQ0JBZ1FJRUNBQUFFQ1RVQ0FOQzly
QWdRSUVDQkFnQUFCQWdRT0FRRnk0TGtTSUVDQUFBRUMKQkFnUUlOQUVCRWp6c2laQWdBQUJBZ1FJ
RUNCQTRCQVFJQWVlS3dFQ0JBZ1FJRUNBQUFFQ1RVQ0FOQzlyQWdRSUVDQkFnQUFCQWdRTwpBUUZ5
NExrU0lFQ0FBQUVDQkFnUUlOQUVCRWp6c2laQWdBQUJBZ1FJRUNCQTRCQVFJQWVlS3dFQ0JBZ1FJ
RUNBQUFFQ1RVQ0FOQzlyCkFnUUlFQ0JBZ0FBQkFnUU9BUUZ5NExrU0lFQ0FBQUVDQkFnUUlOQUVC
RWp6c2laQWdBQUJBZ1FJRUNCQTRCQVFJQWVlS3dFQ0JBZ1EKSUVDQUFBRUNUVUNBTkM5ckFnUUlF
Q0JBZ0FBQkFnUU9BUUZ5NExrU0lFQ0FBQUVDQkFnUUlOQUVCRWp6c2laQWdBQUJBZ1FJRUNCQQo0
QkFRSUFlZUt3RUNCQWdRSUVDQUFBRUNUVUNBTkM5ckFnUUlFQ0JBZ0FBQkFnUU9BUUZ5NExrU0lF
Q0FBQUVDQkFnUUlOQUVCRWp6CnNpWkFnQUFCQWdRSUVDQkE0QkFRSUFlZUt3RUNCQWdRSUVDQUFB
RUNUVUNBTkM5ckFnUUlFQ0JBZ0FBQkFnUU9BUUZ5NExrU0lFQ0EKQUFFQ0JBZ1FJTkFFQkVqenNp
WkFnQUFCQWdRSUVDQkE0QkFRSUFlZUt3RUNCQWdRSUVDQUFBRUNUVUNBTkM5ckFnUUlFQ0JBZ0FB
QgpBZ1FPQVFGeTRMa1NJRUNBQUFFQ0JBZ1FJTkFFQkVqenNpWkFnQUFCQWdRSUVDQkE0QkFRSUFl
ZUt3RUNCQWdRSUVDQUFBRUNUVUNBCk5DOXJBZ1FJRUNCQWdBQUJBZ1FPQVFGeTRMa1NJRUNBQUFF
Q0JBZ1FJTkFFQkVqenNpWkFnQUFCQWdRSUVDQkE0QkFRSUFlZUt3RUMKQkFnUUlFQ0FBQUVDVFdC
dnRRVVk1MEVLNFFBQUFBQkpSVTVFcmtKZ2dnPT0KCg==
</data>
<flag name="review"
          id="57230"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>