<?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>57336</bug_id>
          
          <creation_ts>2011-03-29 07:12:17 -0700</creation_ts>
          <short_desc>experiment with moving caret by word in visual order</short_desc>
          <delta_ts>2011-03-31 09:17:53 -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>HTML Editing</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>25298</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Xiaomei Ji">xji</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>buildbot</cc>
    
    <cc>eric</cc>
    
    <cc>mitz</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>375284</commentid>
    <comment_count>0</comment_count>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2011-03-29 07:12:17 -0700</bug_when>
    <thetext>Implementing move caret by word in visual order  will; be done incrementally.
This will be the 1st version. And It only works for the following condition.
1. For a LTR box in a LTR block or a RTL box in RTL block, when caret is at the left boundary of the box and we are looking for the word boundary in right.
2. For a LTR or RTL box in a LTR block, when caret is at the left boundary of the box and we are looking for the word boundary in left and previous box is a LTR box.
3. For a LTR or RTL box in a RTL block, when the caret is at the right boundary of the box and we are looking for the word boundary in right and next box is RTL box.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>375308</commentid>
    <comment_count>1</comment_count>
      <attachid>87322</attachid>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2011-03-29 07:33:24 -0700</bug_when>
    <thetext>Created attachment 87322
patch w/ layout test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>375421</commentid>
    <comment_count>2</comment_count>
      <attachid>87322</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-29 09:27:22 -0700</bug_when>
    <thetext>Comment on attachment 87322
patch w/ layout test

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

Great! This patch is much more reviewable.

&gt; Source/WebCore/editing/TextGranularity.h:44
&gt; +    // caret by wordGranularity. After all patches in, it should be removed.

Nit: Once all patches are landed

&gt; Source/WebCore/editing/visible_units.cpp:1237
&gt; +    bool first = previousWordBreak.isNull(); // Whether this is to collect the first word break in the box.

Instead of adding a comment here, let us instead have:
bool hasSeenWordBreakInThisBox = previousWordBreak.isNotNull();

&gt; Source/WebCore/editing/visible_units.cpp:1238
&gt; +    InlineBox* boxOfWordBreak;

Nit: should this be named as boxContainingPreviousWordBreak?

&gt; Source/WebCore/editing/visible_units.cpp:1240
&gt; +    if (box-&gt;direction() == blockDirection) {

This function should probably named as nextWordBreakInBox or previousWordBreakInBoxInVisualOrder.

It also seems like we should split this function into two versions the one for box-&gt;direction() == blockDirection and (box-&gt;direction() != blockDirection.
They can be named as:
previousWordBreakInBoxInsideBlockWithSameDirectionality
nextWordBreakInBoxInsideBlockWithOppositeDirectionality

&gt; Source/WebCore/editing/visible_units.cpp:1243
&gt; +        wordBreak = first ? VisiblePosition(Position(box-&gt;renderer()-&gt;node(), box-&gt;caretMaxOffset(), Position::PositionIsOffsetInAnchor), VP_DEFAULT_AFFINITY) : previousWordBreak;

You don&apos;t need to explicitly call VisiblePosition&apos;s constructor.  it&apos;ll automatically do it.  So you can do:
wordBreak = first ? Position(box-&gt;renderer()-&gt;node(), box-&gt;caretMaxOffset(), Position::PositionIsOffsetInAnchor) : previousWordBreak;

&gt; Source/WebCore/editing/visible_units.cpp:1245
&gt; +        if (first &amp;&amp; box-&gt;nextLeafChild()) {

It seems that this condition should be dependent on the value of directionality.  It doesn&apos;t make sense that we check the same box for both LTR and RTL cases.

&gt; Source/WebCore/editing/visible_units.cpp:1248
&gt; +            // when cursor is at the right of &quot;opq&quot;, its previous word boundary&apos;s offset returned from previousWordPosition() is 15, which is not in the same box as &quot;opq&quot;,

Nit: immediately to the right of &quot;opq&quot;.
Nit: offset from previousWordPosition() is immediately to the right of &quot;hij &quot;.

&gt; Source/WebCore/editing/visible_units.cpp:1262
&gt; +        last = true;
&gt; +        return VisiblePosition();

For this version at least, it seems simpler to get rid of &quot;last&quot; argument and use the null visible position to mean the last.

&gt; Source/WebCore/editing/visible_units.cpp:1264
&gt; +    // FIXME in next version.

FIXME implies &quot;next version&quot;.  We should explain what need to be implemented.  I guess:
FIXME: Implement the case when the box direction is not equal to the block direction
would work here.

&gt; Source/WebCore/editing/visible_units.cpp:1277
&gt; +// Get the leftmost or rightmost word bounary in a box.
&gt; +// &apos;box&apos; is the box to start search.
&gt; +// &apos;offset&apos; is the node offset of the current caret.
&gt; +// When &apos;offset&apos; is valid (not equal to -1), the word boundary returned should be different from the word boundary starts at &apos;offset&apos;.
&gt; +// &apos;boundaryDirection&apos; indicates the visual direction (left or right) to search for
&gt; +// word boundary.
&gt; +// &apos;boundaryDirection&apos; == DirectionRight means search rightmost word boundary in box.
&gt; +// &apos;boundaryDirection&apos; == DirectionLeft means search leftmost word boundary in box.
&gt; +// &apos;blockDirection&apos; indicates the directionality of the current block.

No need for these comments.

&gt; Source/WebCore/editing/visible_units.cpp:1291
&gt; +        VisiblePosition wordBreak = collectOneWordBreakInBox(box, blockDirection, VisiblePosition(), offsetOfWordBreak, last);
&gt; +        while (!last) {
&gt; +            if (offset == -1 || offsetOfWordBreak != offset)
&gt; +                return wordBreak;
&gt; +            wordBreak = collectOneWordBreakInBox(box, blockDirection, wordBreak, offsetOfWordBreak, last);
&gt; +        }

This can be written as a do-while as in:
VisiblePosition wordBreak;
do {
    wordBreak = collectOneWordBreakInBox(box, blockDirection, wordBreak, offsetOfWordBreak, last);
    if (offset == -1 || offsetOfWordBreak != offset)
        return wordBreak;
} while (!last);

&gt; Source/WebCore/editing/visible_units.cpp:1293
&gt; +        if (!wordBreak.isNull() &amp;&amp; (offset == -1 || offsetOfWordBreak != offset))
&gt; +            return wordBreak;

This is dead code for this version.  Please remove.

&gt; Source/WebCore/editing/visible_units.cpp:1299
&gt; +// Search word boundary in visually adjacent (previous or next) boxes.

This repeats the function name. Please remove it.

&gt; Source/WebCore/editing/visible_units.cpp:1301
&gt; +// &apos;box&apos; is the box to start search.
&gt; +// &apos;offset&apos; is the node offset of the current caret.

No need. Please get rid of it.

&gt; Source/WebCore/editing/visible_units.cpp:1302
&gt; +// When &apos;offset&apos; is valid (not equal to -1), the word boundary returned should be different from the word boundary starts at &apos;offset&apos;.

We should define a value as in #define INVALID_OFFSET -1 so that we don&apos;t need to add this comment.

&gt; Source/WebCore/editing/visible_units.cpp:1308
&gt; +// &apos;boundaryDirection&apos; indicates the visual direction (left or right) to search for
&gt; +// word boundary.
&gt; +// &apos;boundaryDirection&apos; == DirectionRight means search rightmostWordBoundaryInPreviousBoxes.
&gt; +// &apos;boundaryDirection&apos; == DirectionLeft means search leftmostWordBoundaryInNextBoxes.
&gt; +// &apos;blockDirection&apos; indicates the directionality of the current block.
&gt; +// &apos;visiblePosition&apos; is the visible position of current caret.

I don&apos;t think these comments are necessary.

&gt; Source/WebCore/editing/visible_units.cpp:1309
&gt; +static VisiblePosition wordBoundaryInAdjacentBoxes(const InlineBox* box, int offset, WebCore::SelectionDirection boundaryDirection, TextDirection blockDirection, const VisiblePosition&amp; visiblePosition)

boundaryDirection might be a bit confusing?  Maybe directionToSearch?

&gt; Source/WebCore/editing/visible_units.cpp:1322
&gt; +static VisiblePosition rightmostWordBoundaryInPreviousBoxes(const InlineBox* box, int offset, TextDirection blockDirection, const VisiblePosition&amp; visiblePosition)

This function name is confusing because I get an impression that we start looking for a word boundary from box-&gt;prevLeafChild().
maybe leftWordBoundary or rightmostWordBoundaryInBoxOrPreviousBoxes?

&gt; Source/WebCore/editing/visible_units.cpp:1348
&gt; +    // FIXME: If the box&apos;s directionality is the same as that of the enclosing block, when the offset is at the box boundary and the direction is towards inside the box,
&gt; +    // do I still need to make it a special case? For example, a LTR box inside a LTR block, when offset is at box&apos;s caretMinOffset and the direction is DirectionRight,
&gt; +    // should it be taken care as a general case?

These lines look too long.  Please make each line a little shorter (20-30%).

&gt; Source/WebCore/editing/visible_units.cpp:1352
&gt; +        if (wordDirection == WebCore::DirectionLeft)
&gt; +            return rightmostWordBoundaryInPreviousBoxes(isLTRBox ? box-&gt;prevLeafChild() : box, isLTRBox ? -1 : offset, blockDirection, visiblePosition);
&gt; +        return leftmostWordBoundaryInNextBoxes(isLTRBox ? box : box-&gt;nextLeafChild(), isLTRBox ? offset : -1, blockDirection, visiblePosition);

Maybe it&apos;s better to have these logic directly in leftWordPosition and rightWordPosition.

e.g.
VisiblePosition leftWordPosition(const VisiblePosition&amp; visiblePosition) {
    InlineBox* box;
    int offset;
    visiblePosition.getInlineBoxAndOffset(box, offset);
    TextDirection blockDirection = directionOfEnclosingBlock(visiblePosition.deepEquivalent());

    if (offset == box-&gt;leftmostCaretOffset())
        return rightmostWordBoundaryInPreviousBoxes(box-&gt;prevLeafChild(), -1, blockDirection, visiblePosition);
    else if (offset == box-&gt;rightmostCaretoffset())
        return rightmostWordBoundaryInPreviousBoxes(box, offset, blockDirection, visiblePosition);

     // FIXME: Not implemented.
     return VisiblePosition();
}

&gt; LayoutTests/editing/selection/move-by-word-visually-expected.txt:1
&gt; +CONSOLE MESSAGE: line 180: TypeError: &apos;null&apos; is not an object (evaluating &apos;document.getElementById(&quot;testGroup&quot;).style&apos;)

Do we expect to see this error?

&gt; LayoutTests/editing/selection/move-by-word-visually-expected.txt:37
&gt; +&quot;abc def hij opq rst&quot;[0, 0]
&gt; +&quot;abc def hij opq rst&quot;[1, 1]
&gt; +&quot;abc def hij opq rst&quot;[2, 2]
&gt; +&quot;abc def hij opq rst&quot;[3, 3]
&gt; +&quot;abc def hij opq rst&quot;[4, 4]
&gt; +&quot;abc def hij opq rst&quot;[5, 5]
&gt; +&quot;abc def hij opq rst&quot;[6, 6]
&gt; +&quot;abc def hij opq rst&quot;[7, 7]
&gt; +&quot;abc def hij opq rst&quot;[8, 8]
&gt; +&quot;abc def hij opq rst&quot;[9, 9]
&gt; +&quot;abc def hij opq rst&quot;[10, 10]
&gt; +&quot;abc def hij opq rst&quot;[11, 11]
&gt; +&quot;abc def hij opq rst&quot;[12, 12]
&gt; +&quot;abc def hij opq rst&quot;[13, 13]
&gt; +&quot;abc def hij opq rst&quot;[14, 14]
&gt; +&quot;abc def hij opq rst&quot;[15, 15]
&gt; +&quot;abc def hij opq rst&quot;[16, 16]
&gt; +&quot;abc def hij opq rst&quot;[17, 17]
&gt; +&quot;abc def hij opq rst&quot;[18, 18]
&gt; +&quot;abc def hij opq rst&quot;[19, 19]

How do we know these results are correct?  it seems like we want to print either PASS or FAIL.  Otherwise, other contributors will have no idea whether this test is passing or failing.

&gt; LayoutTests/editing/selection/move-by-word-visually.html:1
&gt; +&lt;head&gt;

Missing DOCTYPE

&gt; LayoutTests/editing/selection/move-by-word-visually.html:3
&gt; +    &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot;&gt;
&gt; +    &lt;style&gt;

Let&apos;s not indent these elements.  Outdenting everything will make code simpler.

&gt; LayoutTests/editing/selection/move-by-word-visually.html:163
&gt; +            while (true) {
&gt; +                sel.setPosition(prevNode, prevOffset);
&gt; +                var positions = [];
&gt; +                positions.push({ node: sel.anchorNode, offset: sel.anchorOffset, point: caretCoordinates() });
&gt; +                sel.modify(&quot;move&quot;, direction, &quot;-webkit-visual-word&quot;);
&gt; +                positions.push({ node: sel.anchorNode, offset: sel.anchorOffset, point: caretCoordinates() });
&gt; +                if (direction == &quot;right&quot;)
&gt; +                    checkCoordinatesMovingRightDown(positions);
&gt; +                else
&gt; +                    checkCoordinatesMovingLeftUp(positions);
&gt; +                logPositions(positions);
&gt; +                log(&quot;\n&quot;);
&gt; +                sel.setPosition(prevNode, prevOffset);
&gt; +                sel.modify(&quot;move&quot;, direction, &quot;character&quot;);
&gt; +                if (sel.anchorNode == prevNode &amp;&amp; sel.anchorOffset == prevOffset) {
&gt; +                    break;
&gt; +                }
&gt; +                prevNode = sel.anchorNode;
&gt; +                prevOffset = sel.anchorOffset;
&gt; +            }

This function seems to be a duplicate of the code above.  We should make a function and call it twice instead of duplicating the code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>376259</commentid>
    <comment_count>3</comment_count>
      <attachid>87522</attachid>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2011-03-30 06:34:16 -0700</bug_when>
    <thetext>Created attachment 87522
patch w/ layout test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>376261</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-30 06:36:48 -0700</bug_when>
    <thetext>Attachment 87522 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/edit...&quot; exit_code: 1

Source/WebKit/ChangeLog:1:  ChangeLog entry has no bug number  [changelog/bugnumber] [5]
Source/WebCore/editing/visible_units.cpp:1273:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Source/WebCore/editing/visible_units.cpp:1289:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Total errors found: 3 in 11 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>376293</commentid>
    <comment_count>5</comment_count>
      <attachid>87522</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-30 07:22:24 -0700</bug_when>
    <thetext>Comment on attachment 87522
patch w/ layout test

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

&gt; Source/WebCore/editing/visible_units.cpp:1245
&gt; +    if (!hasSeenWordBreakInThisBox &amp;&amp; ((box-&gt;isLeftToRightDirection() &amp;&amp; box-&gt;nextLeafChild()) || (!box-&gt;isLeftToRightDirection() &amp;&amp; box-&gt;prevLeafChild()))) {

The condition ((box-&gt;isLeftToRightDirection() &amp;&amp; box-&gt;nextLeafChild()) || (!box-&gt;isLeftToRightDirection() &amp;&amp; box-&gt;prevLeafChild())) should be either a boolean variable or extracted as an inline function.

&gt; Source/WebCore/editing/visible_units.cpp:1254
&gt; +        // Add the rightmost(for LTR box)/leftmost(for RTL box) boundary as wordbreak to handle multi-spaces. 
&gt; +        // For example &quot;&lt;div&gt;abc    def hij    opq rst&lt;/div&gt;&quot;,
&gt; +        // when cursor is immediately to the right of &quot;opq&quot;, its previous word boundary&apos;s offset returned from previousWordPosition() is 15,
&gt; +        // which is immediately to the right of &quot;hij &quot;, and which is not in the same box as &quot;opq&quot;,
&gt; +        // so, it wont be added as a word break of box &quot;opq rst&quot;. It has to be added here as a word break.
&gt; +        // Or we need to provide a way not to canonicalize(upstream) VisiblePosition in its constructor, 
&gt; +        // so previousWordPosition() of &quot;opq&quot; could return offset 18, which is immediately to the left of &quot;opq&quot;, instead.
&gt; +        wordBreak.getInlineBoxAndOffset(boxContainingPreviousWordBreak, offsetOfWordBreak);
&gt; +        if (boxContainingPreviousWordBreak == box)

Mn... this logic is way too complicated for me to review.  mitz or someone else who knows rendering code well should review should this part.

&gt; Source/WebCore/editing/visible_units.cpp:1255
&gt; +            return wordBreak;

Instead of assigning the value of wordBreak, we should just return Position(box-&gt;renderer()-&gt;node(), box-&gt;caretMaxOffset(), Position::PositionIsOffsetInAnchor).

&gt; Source/WebCore/editing/visible_units.cpp:1284
&gt; +    } else // FIXME not implemented yet.
&gt; +        return VisiblePosition();

Get rid of this else clause.

&gt; Source/WebKit/ChangeLog:15
&gt; +2011-03-30  Xiaomei Ji  &lt;xji@chromium.org&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Need a short description and bug URL (OOPS!)
&gt; +
&gt; +        * WebKit.xcodeproj/project.pbxproj:

double change logs!

&gt; LayoutTests/editing/selection/move-by-word-visually-expected.txt:10
&gt; +&quot;abc def hij opq rst&quot;[0, 0] FAIL expected: 4
&gt; +&quot;abc def hij opq rst&quot;[4, 4] FAIL expected: 8
&gt; +&quot;abc def hij opq rst&quot;[8, 8] FAIL expected: 12
&gt; +&quot;abc def hij opq rst&quot;[12, 12] FAIL expected: 16
&gt; +&quot;abc def hij opq rst&quot;[16, 16] FAIL expected: 19
&gt; +&quot;abc def hij opq rst&quot;[19, 19]

These outputs are too verbose.  I think we can instead have something like:
&quot;abc def hij opq rst&quot; FAIL expected [4, 8, 12, 16, 19, 19] but got [0, 4, 8, 12, 16, 19]

&gt; LayoutTests/editing/selection/move-by-word-visually.html:28
&gt; +    var messages = [];
&gt; +
&gt; +    function log(message)
&gt; +    {
&gt; +        messages.push(message);
&gt; +    }

We shouldn&apos;t indent all of this code.

&gt; LayoutTests/editing/selection/move-by-word-visually.html:177
&gt; +    &lt;div style=&quot;direction:ltr&quot; class=&quot;test_move_by_word&quot; title=&quot;0 4 8 12 16 19|19 16 12 8 4 0&quot; contenteditable&gt;abc def hij opq rst&lt;/div&gt;

Maybe we should use dir attribute so that it&apos;s shorter?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>376305</commentid>
    <comment_count>6</comment_count>
      <attachid>87522</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-30 07:39:16 -0700</bug_when>
    <thetext>Comment on attachment 87522
patch w/ layout test

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

&gt; Source/WebCore/editing/visible_units.cpp:1268
&gt; +    // In order to get the correct word boundary (the one before space or the one after space), 

This repeats what code does.  We need to explain &quot;why&quot; we need to do this in order to get the correct word boundary instead.

&gt; Source/WebCore/editing/visible_units.cpp:1271
&gt; +    if ((directionToSearch == WebCore::DirectionRight &amp;&amp; blockDirection == LTR) 
&gt; +        || (directionToSearch == WebCore::DirectionLeft &amp;&amp; blockDirection == RTL)) {

I think this condition should be in wordBoundaryInAdjacentBoxes and we should split wordBoundaryInBox into two functions.
Maybe findWordBoundaryInBoxInBlockDirection?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>376375</commentid>
    <comment_count>7</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-03-30 09:08:25 -0700</bug_when>
    <thetext>Attachment 87522 did not build on win:
Build output: http://queues.webkit.org/results/8285868</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>376677</commentid>
    <comment_count>8</comment_count>
      <attachid>87618</attachid>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2011-03-30 14:32:01 -0700</bug_when>
    <thetext>Created attachment 87618
patch w/ layout test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>376726</commentid>
    <comment_count>9</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-03-30 15:20:34 -0700</bug_when>
    <thetext>Attachment 87618 did not build on win:
Build output: http://queues.webkit.org/results/8311007</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>376736</commentid>
    <comment_count>10</comment_count>
      <attachid>87628</attachid>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2011-03-30 15:28:07 -0700</bug_when>
    <thetext>Created attachment 87628
patch w/ layout test

fix win compilation error</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>376953</commentid>
    <comment_count>11</comment_count>
      <attachid>87628</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-30 22:34:52 -0700</bug_when>
    <thetext>Comment on attachment 87628
patch w/ layout test

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

&gt; Source/WebCore/editing/SelectionController.cpp:451
&gt; +    // FIXME: remove later.

Since we&apos;ve already added this comment to where we declared WebKitVisualWordGranularity, I don&apos;t think we need to repeat ourselves here.

&gt; Source/WebCore/editing/SelectionController.cpp:493
&gt; +    // FIXME: remove later.

Ditto.

&gt; Source/WebCore/editing/SelectionController.cpp:578
&gt; +    // FIXME: remove later.

Ditto.

&gt; Source/WebCore/editing/SelectionController.cpp:621
&gt; +    // FIXME: remove later.

Ditto.

&gt; Source/WebCore/editing/SelectionController.cpp:668
&gt; +    // FIXME: remove later.

Ditto.

&gt; Source/WebCore/editing/SelectionController.cpp:746
&gt; +    // FIXME: remove later.

Ditto.

&gt; Source/WebCore/editing/VisibleSelection.cpp:383
&gt; +        // FIXME: remove later.

Ditto.

&gt; Source/WebCore/editing/visible_units.cpp:1160
&gt; +    // For LTR text, previousWordPosition() returns the word break at the left boundary of a word, 
&gt; +    //               nextWordPosition() returns the word break at the right boundary of a word. 
&gt; +    // For RTL text, previousWordPosition() returns the word break at the right boundary of a word,
&gt; +    //               nextWordPosition() returns the word break at the left boundary of a word.

I don&apos;t understand why we need this comment here.  It seems like we want these comments to be right above previousWordPosition and nextWordPosition instead.
Or, you should explain how these things affect what we do in this function.  Why explaining what nextWordPosition and previousWordPosition do isn&apos;t particularly helpful here
because this comment appears before any code where this information is relevant.

&gt; Source/WebCore/editing/visible_units.cpp:1165
&gt; +    // In LTR block, ctrl-arrow moves cursor to the left boundary of words,
&gt; +    // so we should use previousWordPosition() for LTR text, in which offsets collected from visually right to visually left.
&gt; +    // In RTL block, ctrl-arrow moves cursor to the right boundary of words,
&gt; +    // so we should use previousWordPosiiton() for RTL text, in which, offsets collected from visually left to  visually right. 

This comment isn&apos;t intelligible for me. What does ctrl-arrow mean?  Which arrow key are we talking about?
You say we should use previousWordPosition() for LTR text but you don&apos;t really explain why we should.
And I can&apos;t make a sense of previousWordPosition() &quot;collecting&quot; offsets visually right to left.

&gt; Source/WebCore/editing/visible_units.cpp:1185
&gt; +        wordBreak.getInlineBoxAndOffset(boxContainingPreviousWordBreak, offsetOfWordBreak);

I&apos;d declare boxContainingPreviousWordBreak and offsetOfWordBreak here instead of at the beginning of the function.  It&apos;s okay to have multiple local variables of the same name as long as they are in separate blocks.

&gt; Source/WebCore/editing/visible_units.cpp:1198
&gt; +        if (box-&gt;direction() == blockDirection)
&gt; +            wordBreak = previousWordBreakInBoxInsideBlockWithSameDirectionality(box, wordBreak, offsetOfWordBreak);

I&apos;m a bit confused here.  If we&apos;re looking for a word boundary in the text direction of block and box and block have the same directionality, shouldn&apos;t we be looking for the next word boundary instead of previous one?

&gt; Source/WebCore/editing/visible_units.cpp:1204
&gt; +    } while (1);        

Since you&apos;re putting 1 in while&apos;s condition, I&apos;d use the regular while instead of do-while.

&gt; Source/WebCore/editing/visible_units.cpp:1221
&gt; +    const InlineBox* adjacentBox = box;
&gt; +    while (adjacentBox) {
&gt; +        VisiblePosition wordBreak;
&gt; +        if ((directionToSearch == WebCore::DirectionRight &amp;&amp; blockDirection == LTR) 
&gt; +            || (directionToSearch == WebCore::DirectionLeft &amp;&amp; blockDirection == RTL))
&gt; +            wordBreak = findWordBoundaryInBoxInBlockDirection(adjacentBox, offset, blockDirection);
&gt; +        // FIXME: &quot;else&quot; not implemented yet.
&gt; +        if (!wordBreak.isNull())
&gt; +            return wordBreak;
&gt; +        adjacentBox = (directionToSearch == WebCore::DirectionLeft) ? adjacentBox-&gt;nextLeafChild() : adjacentBox-&gt;prevLeafChild();
&gt; +        offset = invalidOffset;
&gt; +    }

Since this code is fairly simple, I&apos;d duplicate code in leftWordBoundary and rightWordBoundary rather than adding a function that takes directionToSearch.
You can then rewrite this while loop as a simple for loop (leftWordBoundary case):

static VisiblePosition leftWordBoundary(const InlineBox* box, int offset, TextDirection blockDirection, const VisiblePosition&amp; visiblePosition)
{
    for (const InlineBox* adjacentBox = box; adjacentBox; adjacentBox = adjacentBox-&gt;prevLeafChild()) {
        if (blockDirection == RTL)
            wordBreak = findWordBoundaryInBoxInBlockDirection(adjacentBox, adjacentBox == box ? offset : invalidOffset, blockDirection);
        // FIXME: Implement &quot;else&quot; case.
        if (wordBreak.isNotNull())
            return wordBreak;
    }
}

&gt; Source/WebCore/editing/visible_units.cpp:1222
&gt; +    return visiblePosition;

I don&apos;t understand the point of returning visiblePosition here.  Is this visiblePosition used in the &quot;else&quot; case?  If not, I&apos;d just return null here and take care of that in leftWordPosition and rightWordPosition.

&gt; Source/WebCore/editing/visible_units.cpp:1238
&gt; +    // In LTR block, ctrl-arrow moves cursor to the left boundary of words.
&gt; +    // In RTL block, ctrl-arrow moves cursor to the right boundary of words.

I can&apos;t make sense of this comment.  I think you should remove it.

&gt; LayoutTests/editing/selection/move-by-word-visually-expected.txt:7
&gt; +&quot;abc def hij opq rst&quot;[0, 4, 8, 12, 16, 19]    FAIL expected: [4, 8, 12, 16, 19, 19]
&gt; +Move left by one word
&gt; +&quot;abc def hij opq rst&quot;[16, 16, 12, 8, 4, 0]    FAIL expected: [16, 12, 8, 4, 0, 0]

Very nice output!  I can make sense of outputs now. But the expected result for the second row doesn&apos;t look right.
Since we have &quot;0 4 8 12 16 19|19 16 12 8 4 0&quot; in the title, shouldn&apos;t we see FAIL expected [19, 16, 12, 8, 4, 0] instead?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>377053</commentid>
    <comment_count>12</comment_count>
      <attachid>87696</attachid>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2011-03-31 04:32:16 -0700</bug_when>
    <thetext>Created attachment 87696
patch w/ layout test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>377054</commentid>
    <comment_count>13</comment_count>
      <attachid>87697</attachid>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2011-03-31 04:34:11 -0700</bug_when>
    <thetext>Created attachment 87697
patch w/ layout test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>377068</commentid>
    <comment_count>14</comment_count>
      <attachid>87696</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-31 04:54:21 -0700</bug_when>
    <thetext>Comment on attachment 87696
patch w/ layout test

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

&gt; Source/WebCore/editing/visible_units.cpp:1169
&gt; +    // We need to take care of the word break is at the correct place (before space or after space).
&gt; +    // Follow Firefox&apos;s convention in Windows, 
&gt; +    // In LTR block, word break visually moves cursor to the left boundary of words,
&gt; +    // In RTL block, word break visually moves cursor to the right boundary of words.
&gt; +    //
&gt; +    // Since we are using previousWordPosition() and nextWordPosition() to get the word boundary.
&gt; +    // For LTR text, previousWordPosition() returns the word break at the left boundary of a word, 
&gt; +    //               nextWordPosition() returns the word break at the right boundary of a word. 
&gt; +    // For RTL text, previousWordPosition() returns the word break at the right boundary of a word,
&gt; +    //               nextWordPosition() returns the word break at the left boundary of a word.
&gt; +    // 
&gt; +    // So, when the box&apos;s directionality is the same as the block&apos;s directionality,
&gt; +    // we should use previousWordPosition() for LTR text or RTL text.
&gt; +    // If continously collecting word breaks, for LTR box, the word breaks are collected from right to left.
&gt; +    // for RTL box, word breaks are collected from left to right. 

This comment is too long.  Revise it something like:

// In a LTR block, the word break should be on the left boundary of a word.
// In a RTL block, the word break should be on the right boundary of a word.
// Because nextWordPosition() returns the word break on the right boundary of the word for LTR text,
// we need to use previousWordPosition() to traverse words within the inline boxes from right to left
// to find the previous word break (i.e. the first word break on the left). The same applies to RTL text.

&gt; Source/WebCore/editing/visible_units.cpp:1174
&gt; +    // FIXME: handle multi-spaces. 
&gt; +    // In the case of multi-spaces, word break among the collapsed spaces might not added.
&gt; +    // For example, &quot;&lt;div&gt;abc    def hij    opq rst&lt;/div&gt;&quot;, no word break is added between &quot;hij&quot; and &quot;opq&quot;.

I can&apos;t make sense of this comment.  Please get help from Eric on this :)

&gt; Source/WebCore/editing/visible_units.cpp:1219
&gt; +            wordBreak = findWordBoundaryInBoxInBlockDirection(adjacentBox, adjacentBox == box ? offset : invalidOffset, blockDirection);

findWordBoundaryInBoxInBlockDirection isn&apos;t the right name for this function.  If we&apos;re in LTR context, and looking for a word boundary on the left, that means we&apos;re moving to the opposite direction.  Maybe should just call this function previousWordBreakInBox instead.

&gt; Source/WebCore/editing/visible_units.cpp:1245
&gt; +    // Follow Firefox&apos;s convention in Windows, 
&gt; +    // In LTR block, word break visually moves cursor to the left boundary of words,
&gt; +    // In RTL block, word break visually moves cursor to the right boundary of words.

This comment is irrelevant to the code below so please remove.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>377128</commentid>
    <comment_count>15</comment_count>
      <attachid>87718</attachid>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2011-03-31 07:09:32 -0700</bug_when>
    <thetext>Created attachment 87718
patch w/ layout test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>377137</commentid>
    <comment_count>16</comment_count>
      <attachid>87718</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-31 07:17:00 -0700</bug_when>
    <thetext>Comment on attachment 87718
patch w/ layout test

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

&gt; Source/WebCore/editing/visible_units.cpp:1163
&gt; +    // FIXME: handle multi-spaces. Please refer bug https://bugs.webkit.org/show_bug.cgi?id=57543 for detail.

Just say &quot;FIXME: handle multi-spaces (https://webkit.org/b/57543)&quot;.

&gt; Source/WebCore/editing/visible_units.cpp:1166
&gt; +    if (previousWordBreak != wordBreak) {

Let&apos;s do early exit here instead.

&gt; Source/WebCore/editing/visible_units.cpp:1170
&gt; +        if (boxContainingPreviousWordBreak == box)
&gt; +            return wordBreak;

Ditto. do:
if (boxContainingPreviousWordBreak != box)
    return VisiblePosition();
return wordBreak;

&gt; Source/WebCore/editing/visible_units.cpp:1197
&gt; +        // FIXME: &quot;else&quot; not implemented yet.

FIXME: Implement the &quot;else&quot; case.

&gt; Source/WebCore/editing/visible_units.cpp:1211
&gt; +        // FIXME: &quot;else&quot; not implemented yet.

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>377224</commentid>
    <comment_count>17</comment_count>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2011-03-31 09:17:53 -0700</bug_when>
    <thetext>Committed r82588: &lt;http://trac.webkit.org/changeset/82588&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>87322</attachid>
            <date>2011-03-29 07:33:24 -0700</date>
            <delta_ts>2011-03-30 06:34:28 -0700</delta_ts>
            <desc>patch w/ layout test</desc>
            <filename>57336.v1</filename>
            <type>text/plain</type>
            <size>68402</size>
            <attacher name="Xiaomei Ji">xji</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgyMjQ0KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTIgQEAKKzIwMTEtMDMtMjkgIFhpYW9tZWkg
SmkgIDx4amlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEV4cGVyaW1lbnQgd2l0aCBtb3ZpbmcgY2FyZXQgYnkgd29yZCBpbiB2
aXN1YWwgb3JkZXIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01NzMzNgorCisgICAgICAgIFRoaXMgaXMgdGhlIDFzdCB2ZXJzaW9uIG9mIGltcGxlbWVu
dGluZyAibW92ZSBjYXJldCBieSB3b3JkIGluIHZpc3VhbCBvcmRlciIuCisgICAgICAgIEl0IG9u
bHkgd29ya3MgaW4gdGhlIGZvbGxvd2luZyBzaXR1YXRpb246CisgICAgICAgIDEuIEZvciBhIExU
UiBib3ggaW4gYSBMVFIgYmxvY2sgb3IgYSBSVEwgYm94IGluIFJUTCBibG9jaywgCisgICAgICAg
IHdoZW4gY2FyZXQgaXMgYXQgdGhlIGxlZnQgYm91bmRhcnkgb2YgdGhlIGJveCBhbmQgd2UgYXJl
IGxvb2tpbmcgZm9yIAorICAgICAgICB0aGUgd29yZCBib3VuZGFyeSBpbiByaWdodC4KKyAgICAg
ICAgMi4gRm9yIGEgTFRSIG9yIFJUTCBib3ggaW4gYSBMVFIgYmxvY2ssIHdoZW4gY2FyZXQgaXMg
YXQgdGhlIGxlZnQgYm91bmRhcnkKKyAgICAgICAgb2YgdGhlIGJveCBhbmQgd2UgYXJlIGxvb2tp
bmcgZm9yIHRoZSB3b3JkIGJvdW5kYXJ5IGluIGxlZnQgYW5kIAorICAgICAgICBwcmV2aW91cyBi
b3ggaXMgYSBMVFIgYm94LgorICAgICAgICAzLiBGb3IgYSBMVFIgb3IgUlRMIGJveCBpbiBhIFJU
TCBibG9jaywgd2hlbiB0aGUgY2FyZXQgaXMgYXQgdGhlIHJpZ2h0IAorICAgICAgICBib3VuZGFy
eSBvZiB0aGUgYm94IGFuZCB3ZSBhcmUgbG9va2luZyBmb3IgdGhlIHdvcmQgYm91bmRhcnkgaW4g
cmlnaHQgYW5kIG5leHQgYm94IGlzIFJUTCBib3guCisKKyAgICAgICAgQW4gZXhwZXJpbWVudGFs
IGdyYW51bGFyaXR5IGlzIGludHJvZHVjZWQsIGFzIGEgc2lkZSBlZmZlY3QsIGZ1bmN0aW9ucyBo
YXZpbmcgc3dpdGNoIHN0YXRlbWVudHMKKyAgICAgICAgdG8gaGFuZGxlIHRob3NlIGdyYW51bGFy
aXRpZXMgaGF2ZSB0byBhZGQgbW9yZSBvbmUgY2FzZSB0byBoYW5kbGUgdGhpcyBuZXcgZ3JhbnVs
YXJpdHkuCisgICAgICAgIFRoZSBleHBlcmltZW50YWwgZ3JhbnVsYXJpdHkgaXMgZXhwb3NlZCB0
aG91Z2ggSlMgYnkgJy13ZWJraXQtdmlzdWFsLXdvcmQiLgorCisgICAgICAgIFRlc3Q6IGVkaXRp
bmcvc2VsZWN0aW9uL21vdmUtYnktd29yZC12aXN1YWxseS5odG1sCisKKyAgICAgICAgKiBlZGl0
aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9u
Q29udHJvbGxlcjo6bW9kaWZ5RXh0ZW5kaW5nUmlnaHQpOiBBZGQgbmV3IGNhc2UgdG8gaGFuZGxl
IHRoZSBuZXcgZXhwZXJpbWVudGFsIGdyYW51bGFpcnR5LgorICAgICAgICAoV2ViQ29yZTo6U2Vs
ZWN0aW9uQ29udHJvbGxlcjo6bW9kaWZ5RXh0ZW5kaW5nRm9yd2FyZCk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kaWZ5TW92aW5nRm9yd2FyZCk6ICBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vZGlmeUV4dGVu
ZGluZ0xlZnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXI6
Om1vZGlmeUV4dGVuZGluZ0JhY2t3YXJkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTZWxl
Y3Rpb25Db250cm9sbGVyOjptb2RpZnlNb3ZpbmdCYWNrd2FyZCk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kaWZ5TW92aW5nUmlnaHQpOiAKKyAgICAg
ICAgKFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vZGlmeU1vdmluZ0xlZnQpOgorICAg
ICAgICAqIGVkaXRpbmcvVGV4dEdyYW51bGFyaXR5Lmg6IEFkZCBleHBlcmltZW50YWwgZ3JhbnVs
YWlydHkuCisgICAgICAgICogZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb246OnNldFN0YXJ0QW5kRW5kRnJvbUJhc2VBbmRFeHRl
bnRSZXNwZWN0aW5nR3JhbnVsYXJpdHkpOiBBZGQgbmV3IGNhc2UgdG8gaGFuZGxlIHRoZSBuZXcg
ZXhwZXJpbWVudGFsIGdyYW51bGFpcnR5LgorICAgICAgICAqIGVkaXRpbmcvdmlzaWJsZV91bml0
cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb2xsZWN0T25lV29yZEJyZWFrSW5Cb3gpOgorICAg
ICAgICAoV2ViQ29yZTo6d29yZEJvdW5kYXJ5SW5Cb3gpOgorICAgICAgICAoV2ViQ29yZTo6d29y
ZEJvdW5kYXJ5SW5BZGphY2VudEJveGVzKToKKyAgICAgICAgKFdlYkNvcmU6OnJpZ2h0bW9zdFdv
cmRCb3VuZGFyeUluUHJldmlvdXNCb3hlcyk6CisgICAgICAgIChXZWJDb3JlOjpsZWZ0bW9zdFdv
cmRCb3VuZGFyeUluTmV4dEJveGVzKToKKyAgICAgICAgKFdlYkNvcmU6OndvcmRCb3VuZGFyeSk6
CisgICAgICAgIChXZWJDb3JlOjpsZWZ0V29yZFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OnJpZ2h0V29yZFBvc2l0aW9uKToKKyAgICAgICAgKiBlZGl0aW5nL3Zpc2libGVfdW5pdHMuaDoK
KyAgICAgICAgKiBwYWdlL0RPTVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01T
ZWxlY3Rpb246Om1vZGlmeSk6CisKIDIwMTEtMDMtMjkgIExlbyBZYW5nICA8bGVvLnlhbmdAdG9y
Y2htb2JpbGUuY29tLmNuPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE5pa29sYXMgWmltbWVybWFu
bi4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVy
LmNwcAkocmV2aXNpb24gODIxMjEpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlv
bkNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NDcsNiArNDQ3LDEwIEBAIFZpc2li
bGVQb3NpdGlvbiBTZWxlY3Rpb25Db250cm9sbGVyOjptb2QKICAgICBjYXNlIERvY3VtZW50Qm91
bmRhcnk6CiAgICAgICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgYWxsIG9mIHRoZSBhYm92ZT8KICAg
ICAgICAgcG9zID0gbW9kaWZ5RXh0ZW5kaW5nRm9yd2FyZChncmFudWxhcml0eSk7CisgICAgICAg
IGJyZWFrOworICAgIC8vIEZJWE1FOiByZW1vdmUgbGF0ZXIuCisgICAgY2FzZSBXZWJLaXRWaXN1
YWxXb3JkR3JhbnVsYXJpdHk6CisgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gcG9z
OwogfQpAQCAtNDg2LDYgKzQ5MCw5IEBAIFZpc2libGVQb3NpdGlvbiBTZWxlY3Rpb25Db250cm9s
bGVyOjptb2QKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcG9zID0gZW5kT2ZEb2N1bWVudChw
b3MpOwogICAgICAgICBicmVhazsKKyAgICAvLyBGSVhNRTogcmVtb3ZlIGxhdGVyLgorICAgIGNh
c2UgV2ViS2l0VmlzdWFsV29yZEdyYW51bGFyaXR5OgorICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgCiAgICAgcmV0dXJuIHBvczsKQEAgLTUxNyw2ICs1MjQsOSBAQCBWaXNpYmxlUG9zaXRpb24g
U2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kCiAgICAgY2FzZSBMaW5lQm91bmRhcnk6CiAgICAgICAg
IHBvcyA9IHJpZ2h0Qm91bmRhcnlPZkxpbmUoc3RhcnRGb3JQbGF0Zm9ybSgpLCBkaXJlY3Rpb25P
ZkVuY2xvc2luZ0Jsb2NrKCkpOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIFdlYktpdFZpc3Vh
bFdvcmRHcmFudWxhcml0eToKKyAgICAgICAgcG9zID0gcmlnaHRXb3JkUG9zaXRpb24oVmlzaWJs
ZVBvc2l0aW9uKG1fc2VsZWN0aW9uLmV4dGVudCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKSk7
CisgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gcG9zOwogfQpAQCAtNTY1LDYgKzU3
NSw5IEBAIFZpc2libGVQb3NpdGlvbiBTZWxlY3Rpb25Db250cm9sbGVyOjptb2QKICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgcG9zID0gZW5kT2ZEb2N1bWVudChwb3MpOwogICAgICAgICBicmVh
azsKKyAgICAvLyBGSVhNRTogcmVtb3ZlIGxhdGVyLgorICAgIGNhc2UgV2ViS2l0VmlzdWFsV29y
ZEdyYW51bGFyaXR5OgorICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIHBvczsKIH0K
QEAgLTYwNCw2ICs2MTcsMTAgQEAgVmlzaWJsZVBvc2l0aW9uIFNlbGVjdGlvbkNvbnRyb2xsZXI6
Om1vZAogICAgIGNhc2UgUGFyYWdyYXBoQm91bmRhcnk6CiAgICAgY2FzZSBEb2N1bWVudEJvdW5k
YXJ5OgogICAgICAgICBwb3MgPSBtb2RpZnlFeHRlbmRpbmdCYWNrd2FyZChncmFudWxhcml0eSk7
CisgICAgICAgIGJyZWFrOworICAgIC8vIEZJWE1FOiByZW1vdmUgbGF0ZXIuCisgICAgY2FzZSBX
ZWJLaXRWaXN1YWxXb3JkR3JhbnVsYXJpdHk6CisgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBy
ZXR1cm4gcG9zOwogfQpAQCAtNjQ4LDYgKzY2NSw5IEBAIFZpc2libGVQb3NpdGlvbiBTZWxlY3Rp
b25Db250cm9sbGVyOjptb2QKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcG9zID0gc3RhcnRP
ZkRvY3VtZW50KHBvcyk7CiAgICAgICAgIGJyZWFrOworICAgIC8vIEZJWE1FOiByZW1vdmUgbGF0
ZXIuCisgICAgY2FzZSBXZWJLaXRWaXN1YWxXb3JkR3JhbnVsYXJpdHk6CisgICAgICAgIGJyZWFr
OwogICAgIH0KICAgICByZXR1cm4gcG9zOwogfQpAQCAtNjc4LDYgKzY5OCw5IEBAIFZpc2libGVQ
b3NpdGlvbiBTZWxlY3Rpb25Db250cm9sbGVyOjptb2QKICAgICBjYXNlIExpbmVCb3VuZGFyeToK
ICAgICAgICAgcG9zID0gbGVmdEJvdW5kYXJ5T2ZMaW5lKHN0YXJ0Rm9yUGxhdGZvcm0oKSwgZGly
ZWN0aW9uT2ZFbmNsb3NpbmdCbG9jaygpKTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXZWJL
aXRWaXN1YWxXb3JkR3JhbnVsYXJpdHk6CisgICAgICAgIHBvcyA9IGxlZnRXb3JkUG9zaXRpb24o
VmlzaWJsZVBvc2l0aW9uKG1fc2VsZWN0aW9uLmV4dGVudCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0
eSgpKSk7CisgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gcG9zOwogfQpAQCAtNzIw
LDYgKzc0Myw5IEBAIFZpc2libGVQb3NpdGlvbiBTZWxlY3Rpb25Db250cm9sbGVyOjptb2QKICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgcG9zID0gc3RhcnRPZkRvY3VtZW50KHBvcyk7CiAgICAg
ICAgIGJyZWFrOworICAgIC8vIEZJWE1FOiByZW1vdmUgbGF0ZXIuCisgICAgY2FzZSBXZWJLaXRW
aXN1YWxXb3JkR3JhbnVsYXJpdHk6CisgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4g
cG9zOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0R3JhbnVsYXJpdHkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRHcmFudWxhcml0eS5oCShy
ZXZpc2lvbiA4MjExOCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEdyYW51bGFyaXR5
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDEwIEBAIGVudW0gVGV4dEdyYW51bGFyaXR5
IHsKICAgICBTZW50ZW5jZUJvdW5kYXJ5LAogICAgIExpbmVCb3VuZGFyeSwKICAgICBQYXJhZ3Jh
cGhCb3VuZGFyeSwKLSAgICBEb2N1bWVudEJvdW5kYXJ5CisgICAgRG9jdW1lbnRCb3VuZGFyeSwK
KyAgICAvLyBGSVhNRTogdGhpcyBpcyBhZGRlZCB0ZW1wb3JhcmlseSBmb3IgZXhwZXJpbWVudCB3
aXRoIHZpc3VhbGx5IG1vdmUKKyAgICAvLyBjYXJldCBieSB3b3JkR3JhbnVsYXJpdHkuIEFmdGVy
IGFsbCBwYXRjaGVzIGluLCBpdCBzaG91bGQgYmUgcmVtb3ZlZC4KKyAgICBXZWJLaXRWaXN1YWxX
b3JkR3JhbnVsYXJpdHkKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlz
aWJsZVNlbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9W
aXNpYmxlU2VsZWN0aW9uLmNwcAkocmV2aXNpb24gODIxMTgpCisrKyBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODAsNiArMzgw
LDkgQEAgdm9pZCBWaXNpYmxlU2VsZWN0aW9uOjpzZXRTdGFydEFuZEVuZEZybwogICAgICAgICAg
ICAgbV9zdGFydCA9IHN0YXJ0T2ZTZW50ZW5jZShWaXNpYmxlUG9zaXRpb24obV9zdGFydCwgbV9h
ZmZpbml0eSkpLmRlZXBFcXVpdmFsZW50KCk7CiAgICAgICAgICAgICBtX2VuZCA9IGVuZE9mU2Vu
dGVuY2UoVmlzaWJsZVBvc2l0aW9uKG1fZW5kLCBtX2FmZmluaXR5KSkuZGVlcEVxdWl2YWxlbnQo
KTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAvLyBGSVhNRTogcmVtb3ZlIGxhdGVyLgor
ICAgICAgICBjYXNlIFdlYktpdFZpc3VhbFdvcmRHcmFudWxhcml0eToKKyAgICAgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICAKICAgICAvLyBNYWtlIHN1cmUgd2UgZG8gbm90IGhhdmUgYSBkYW5n
bGluZyBzdGFydCBvciBlbmQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVf
dW5pdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91
bml0cy5jcHAJKHJldmlzaW9uIDgyMTE4KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy92aXNp
YmxlX3VuaXRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUg
IlRleHRCcmVha0l0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAjaW5jbHVk
ZSAiVmlzaWJsZVBvc2l0aW9uLmgiCisjaW5jbHVkZSAiVmlzaWJsZVNlbGVjdGlvbi5oIgogI2lu
Y2x1ZGUgImh0bWxlZGl0aW5nLmgiCiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVW5pY29kZS5oPgog
CkBAIC0xMjI4LDQgKzEyMjksMTQ1IEBAIFZpc2libGVQb3NpdGlvbiByaWdodEJvdW5kYXJ5T2ZM
aW5lKGNvbnMKICAgICByZXR1cm4gZGlyZWN0aW9uID09IExUUiA/IGxvZ2ljYWxFbmRPZkxpbmUo
YykgOiBsb2dpY2FsU3RhcnRPZkxpbmUoYyk7CiB9CiAKKy8vICdsYXN0JyByZXByZXNlbnRzIHdo
ZXRoZXIgdGhlIHJldHVybmVkIFZpc2libGVQb3NpdGlvbiBpcyB0aGUgbGFzdCB3b3JkIGJyZWFr
IGluIHRoZSBib3ggCisvLyBvciB0aGVyZSBpcyBubyBtb3JlIHdvcmQgYnJlYWtzIGluIHRoZSBi
b3ggKGluIHdoaWNoIGNhc2UsIHRoZSByZXR1cm5lZCBWaXNpYmxlUG9zaXRpb24gaXMgYSBudWxs
IHBvc2l0aW9uKS4KK3N0YXRpYyBWaXNpYmxlUG9zaXRpb24gY29sbGVjdE9uZVdvcmRCcmVha0lu
Qm94KGNvbnN0IElubGluZUJveCogYm94LCBUZXh0RGlyZWN0aW9uIGJsb2NrRGlyZWN0aW9uLCBj
b25zdCBWaXNpYmxlUG9zaXRpb24mIHByZXZpb3VzV29yZEJyZWFrLCBpbnQmIG9mZnNldE9mV29y
ZEJyZWFrLCBib29sJiBsYXN0KQoreworICAgIGxhc3QgPSBmYWxzZTsKKyAgICBib29sIGZpcnN0
ID0gcHJldmlvdXNXb3JkQnJlYWsuaXNOdWxsKCk7IC8vIFdoZXRoZXIgdGhpcyBpcyB0byBjb2xs
ZWN0IHRoZSBmaXJzdCB3b3JkIGJyZWFrIGluIHRoZSBib3guCisgICAgSW5saW5lQm94KiBib3hP
ZldvcmRCcmVhazsKKyAgICBWaXNpYmxlUG9zaXRpb24gd29yZEJyZWFrOworICAgIGlmIChib3gt
PmRpcmVjdGlvbigpID09IGJsb2NrRGlyZWN0aW9uKSB7CisgICAgICAgIC8vIEZvciBMVFIgYm94
LCBvZmZzZXRzIGNvbGxlY3RlZCBmcm9tIHZpc3VhbGx5IHJpZ2h0IHRvIHZpc3VhbGx5IGxlZnQu
IEZvciBSVEwgYm94LCBvZmZzZXRzIGNvbGxlY3RlZCBmcm9tIHZpc3VhbGx5IGxlZnQgdG8gIHZp
c3VhbGx5IHJpZ2h0LgorICAgICAgICAvLyBvZmZzZXQgdmFsdWVzIGFyZSBpbiBkZXNjZW5kaW5n
IG9yZGVyLgorICAgICAgICB3b3JkQnJlYWsgPSBmaXJzdCA/IFZpc2libGVQb3NpdGlvbihQb3Np
dGlvbihib3gtPnJlbmRlcmVyKCktPm5vZGUoKSwgYm94LT5jYXJldE1heE9mZnNldCgpLCBQb3Np
dGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKSwgVlBfREVGQVVMVF9BRkZJTklUWSkgOiBw
cmV2aW91c1dvcmRCcmVhazsKKworICAgICAgICBpZiAoZmlyc3QgJiYgYm94LT5uZXh0TGVhZkNo
aWxkKCkpIHsKKyAgICAgICAgICAgIC8vIEFkZCB0aGUgcmlnaHRtb3N0KGZvciBMVFIgYm94KS9s
ZWZ0bW9zdChmb3IgUlRMIGJveCkgYm91bmRhcnkgYXMgd29yZGJyZWFrIHRvIGhhbmRsZSBtdWx0
aS1zcGFjZXMuIAorICAgICAgICAgICAgLy8gRm9yIGV4YW1wbGUgIjxkaXY+YWJjICAgIGRlZiBo
aWogICAgb3BxIHJzdDwvZGl2PiIsCisgICAgICAgICAgICAvLyB3aGVuIGN1cnNvciBpcyBhdCB0
aGUgcmlnaHQgb2YgIm9wcSIsIGl0cyBwcmV2aW91cyB3b3JkIGJvdW5kYXJ5J3Mgb2Zmc2V0IHJl
dHVybmVkIGZyb20gcHJldmlvdXNXb3JkUG9zaXRpb24oKSBpcyAxNSwgd2hpY2ggaXMgbm90IGlu
IHRoZSBzYW1lIGJveCBhcyAib3BxIiwKKyAgICAgICAgICAgIC8vIHNvLCBpdCB3b250IGJlIGFk
ZGVkIGFzIGEgd29yZCBicmVhayBvZiBib3ggIm9wcSByc3QiLiBJdCBoYXMgdG8gYmUgYWRkZWQg
aGVyZSBhcyBhIHdvcmQgYnJlYWsuCisgICAgICAgICAgICAvLyBPciB3ZSBuZWVkIHRvIHByb3Zp
ZGUgYSB3YXkgbm90IHRvIGNhbm9uaWNhbGl6ZSh1cHN0cmVhbSkgVmlzaWJsZVBvc2l0aW9uIGlu
IGl0cyBjb25zdHJ1Y3Rvciwgc28gcHJldmlvdXNXb3JkUG9zaXRpb24oKSBvZiAib3BxIiBjb3Vs
ZCByZXR1cm4gb2Zmc2V0IDE4IGluc3RlYWQuCisgICAgICAgICAgICB3b3JkQnJlYWsuZ2V0SW5s
aW5lQm94QW5kT2Zmc2V0KGJveE9mV29yZEJyZWFrLCBvZmZzZXRPZldvcmRCcmVhayk7CisgICAg
ICAgICAgICBpZiAoYm94T2ZXb3JkQnJlYWsgPT0gYm94KQorICAgICAgICAgICAgICAgIHJldHVy
biB3b3JkQnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgd29yZEJyZWFrID0gcHJldmlvdXNXb3Jk
UG9zaXRpb24od29yZEJyZWFrKTsKKyAgICAgICAgaWYgKHByZXZpb3VzV29yZEJyZWFrICE9IHdv
cmRCcmVhaykgeworICAgICAgICAgICAgd29yZEJyZWFrLmdldElubGluZUJveEFuZE9mZnNldChi
b3hPZldvcmRCcmVhaywgb2Zmc2V0T2ZXb3JkQnJlYWspOworICAgICAgICAgICAgaWYgKGJveE9m
V29yZEJyZWFrID09IGJveCkKKyAgICAgICAgICAgICAgICByZXR1cm4gd29yZEJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGxhc3QgPSB0cnVlOworICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0
aW9uKCk7CisgICAgfSAKKyAgICAvLyBGSVhNRSBpbiBuZXh0IHZlcnNpb24uCisgICAgbGFzdCA9
IHRydWU7CisgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOworfQorCisvLyBHZXQgdGhlIGxl
ZnRtb3N0IG9yIHJpZ2h0bW9zdCB3b3JkIGJvdW5hcnkgaW4gYSBib3guCisvLyAnYm94JyBpcyB0
aGUgYm94IHRvIHN0YXJ0IHNlYXJjaC4KKy8vICdvZmZzZXQnIGlzIHRoZSBub2RlIG9mZnNldCBv
ZiB0aGUgY3VycmVudCBjYXJldC4KKy8vIFdoZW4gJ29mZnNldCcgaXMgdmFsaWQgKG5vdCBlcXVh
bCB0byAtMSksIHRoZSB3b3JkIGJvdW5kYXJ5IHJldHVybmVkIHNob3VsZCBiZSBkaWZmZXJlbnQg
ZnJvbSB0aGUgd29yZCBib3VuZGFyeSBzdGFydHMgYXQgJ29mZnNldCcuCisvLyAnYm91bmRhcnlE
aXJlY3Rpb24nIGluZGljYXRlcyB0aGUgdmlzdWFsIGRpcmVjdGlvbiAobGVmdCBvciByaWdodCkg
dG8gc2VhcmNoIGZvcgorLy8gd29yZCBib3VuZGFyeS4KKy8vICdib3VuZGFyeURpcmVjdGlvbicg
PT0gRGlyZWN0aW9uUmlnaHQgbWVhbnMgc2VhcmNoIHJpZ2h0bW9zdCB3b3JkIGJvdW5kYXJ5IGlu
IGJveC4KKy8vICdib3VuZGFyeURpcmVjdGlvbicgPT0gRGlyZWN0aW9uTGVmdCBtZWFucyBzZWFy
Y2ggbGVmdG1vc3Qgd29yZCBib3VuZGFyeSBpbiBib3guCisvLyAnYmxvY2tEaXJlY3Rpb24nIGlu
ZGljYXRlcyB0aGUgZGlyZWN0aW9uYWxpdHkgb2YgdGhlIGN1cnJlbnQgYmxvY2suCitzdGF0aWMg
VmlzaWJsZVBvc2l0aW9uIHdvcmRCb3VuZGFyeUluQm94KGNvbnN0IElubGluZUJveCogYm94LCBp
bnQgb2Zmc2V0LCBXZWJDb3JlOjpTZWxlY3Rpb25EaXJlY3Rpb24gYm91bmRhcnlEaXJlY3Rpb24s
IFRleHREaXJlY3Rpb24gYmxvY2tEaXJlY3Rpb24pCit7CisgICAgLy8gSW4gb3JkZXIgdG8gZ2V0
IHRoZSBjb3JyZWN0IHdvcmQgYm91bmRhcnkgKHRoZSBvbmUgYmVmb3JlIHNwYWNlIG9yIHRoZSBv
bmUgYWZ0ZXIgc3BhY2UpLCAKKyAgICAvLyB3b3JkIGJvdW5kYXJ5IGlzIHNlYXJjaGVkIGZyb20g
dmlzdWFsbHkgbGVmdCB0byByaWdodCBmb3IgUlRMIGJsb2NrIGFuZCBpcyBzZWFyY2hlZCBmcm9t
IHZpc3VhbGx5IHJpZ2h0IHRvIGxlZnQgZm9yIExUUiBibG9jay4KKyAgICBpZiAoKGJvdW5kYXJ5
RGlyZWN0aW9uID09IFdlYkNvcmU6OkRpcmVjdGlvblJpZ2h0ICYmIGJsb2NrRGlyZWN0aW9uID09
IExUUikgCisgICAgICAgIHx8IChib3VuZGFyeURpcmVjdGlvbiA9PSBXZWJDb3JlOjpEaXJlY3Rp
b25MZWZ0ICYmIGJsb2NrRGlyZWN0aW9uID09IFJUTCkpIHsKKyAgICAgICAgYm9vbCBsYXN0ID0g
ZmFsc2U7IC8vIGluZGljYXRlcyB0aGUgd29yZCBib3VuZGFyeSBpcyB0aGUgbGFzdCBvbmUgaW4g
Ym94LgorICAgICAgICBpbnQgb2Zmc2V0T2ZXb3JkQnJlYWs7CisgICAgICAgIFZpc2libGVQb3Np
dGlvbiB3b3JkQnJlYWsgPSBjb2xsZWN0T25lV29yZEJyZWFrSW5Cb3goYm94LCBibG9ja0RpcmVj
dGlvbiwgVmlzaWJsZVBvc2l0aW9uKCksIG9mZnNldE9mV29yZEJyZWFrLCBsYXN0KTsKKyAgICAg
ICAgd2hpbGUgKCFsYXN0KSB7CisgICAgICAgICAgICBpZiAob2Zmc2V0ID09IC0xIHx8IG9mZnNl
dE9mV29yZEJyZWFrICE9IG9mZnNldCkKKyAgICAgICAgICAgICAgICByZXR1cm4gd29yZEJyZWFr
OworICAgICAgICAgICAgd29yZEJyZWFrID0gY29sbGVjdE9uZVdvcmRCcmVha0luQm94KGJveCwg
YmxvY2tEaXJlY3Rpb24sIHdvcmRCcmVhaywgb2Zmc2V0T2ZXb3JkQnJlYWssIGxhc3QpOworICAg
ICAgICB9CisgICAgICAgIGlmICghd29yZEJyZWFrLmlzTnVsbCgpICYmIChvZmZzZXQgPT0gLTEg
fHwgb2Zmc2V0T2ZXb3JkQnJlYWsgIT0gb2Zmc2V0KSkKKyAgICAgICAgICAgIHJldHVybiB3b3Jk
QnJlYWs7CisgICAgfSBlbHNlIC8vIEZJWE1FIGluIG5leHQgdmVyc2lvbi4KKyAgICAgICAgcmV0
dXJuIFZpc2libGVQb3NpdGlvbigpOworICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKK30K
KworLy8gU2VhcmNoIHdvcmQgYm91bmRhcnkgaW4gdmlzdWFsbHkgYWRqYWNlbnQgKHByZXZpb3Vz
IG9yIG5leHQpIGJveGVzLgorLy8gJ2JveCcgaXMgdGhlIGJveCB0byBzdGFydCBzZWFyY2guCisv
LyAnb2Zmc2V0JyBpcyB0aGUgbm9kZSBvZmZzZXQgb2YgdGhlIGN1cnJlbnQgY2FyZXQuCisvLyBX
aGVuICdvZmZzZXQnIGlzIHZhbGlkIChub3QgZXF1YWwgdG8gLTEpLCB0aGUgd29yZCBib3VuZGFy
eSByZXR1cm5lZCBzaG91bGQgYmUgZGlmZmVyZW50IGZyb20gdGhlIHdvcmQgYm91bmRhcnkgc3Rh
cnRzIGF0ICdvZmZzZXQnLgorLy8gJ2JvdW5kYXJ5RGlyZWN0aW9uJyBpbmRpY2F0ZXMgdGhlIHZp
c3VhbCBkaXJlY3Rpb24gKGxlZnQgb3IgcmlnaHQpIHRvIHNlYXJjaCBmb3IKKy8vIHdvcmQgYm91
bmRhcnkuCisvLyAnYm91bmRhcnlEaXJlY3Rpb24nID09IERpcmVjdGlvblJpZ2h0IG1lYW5zIHNl
YXJjaCByaWdodG1vc3RXb3JkQm91bmRhcnlJblByZXZpb3VzQm94ZXMuCisvLyAnYm91bmRhcnlE
aXJlY3Rpb24nID09IERpcmVjdGlvbkxlZnQgbWVhbnMgc2VhcmNoIGxlZnRtb3N0V29yZEJvdW5k
YXJ5SW5OZXh0Qm94ZXMuCisvLyAnYmxvY2tEaXJlY3Rpb24nIGluZGljYXRlcyB0aGUgZGlyZWN0
aW9uYWxpdHkgb2YgdGhlIGN1cnJlbnQgYmxvY2suCisvLyAndmlzaWJsZVBvc2l0aW9uJyBpcyB0
aGUgdmlzaWJsZSBwb3NpdGlvbiBvZiBjdXJyZW50IGNhcmV0Lgorc3RhdGljIFZpc2libGVQb3Np
dGlvbiB3b3JkQm91bmRhcnlJbkFkamFjZW50Qm94ZXMoY29uc3QgSW5saW5lQm94KiBib3gsIGlu
dCBvZmZzZXQsIFdlYkNvcmU6OlNlbGVjdGlvbkRpcmVjdGlvbiBib3VuZGFyeURpcmVjdGlvbiwg
VGV4dERpcmVjdGlvbiBibG9ja0RpcmVjdGlvbiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNp
YmxlUG9zaXRpb24pCit7CisgICAgY29uc3QgSW5saW5lQm94KiBhZGphY2VudEJveCA9IGJveDsK
KyAgICB3aGlsZSAoYWRqYWNlbnRCb3gpIHsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHdvcmRC
cmVhayA9IHdvcmRCb3VuZGFyeUluQm94KGFkamFjZW50Qm94LCBvZmZzZXQsIGJvdW5kYXJ5RGly
ZWN0aW9uLCBibG9ja0RpcmVjdGlvbik7CisgICAgICAgIGlmICghd29yZEJyZWFrLmlzTnVsbCgp
KQorICAgICAgICAgICAgcmV0dXJuIHdvcmRCcmVhazsKKyAgICAgICAgYWRqYWNlbnRCb3ggPSAo
Ym91bmRhcnlEaXJlY3Rpb24gPT0gV2ViQ29yZTo6RGlyZWN0aW9uTGVmdCkgPyBhZGphY2VudEJv
eC0+bmV4dExlYWZDaGlsZCgpIDogYWRqYWNlbnRCb3gtPnByZXZMZWFmQ2hpbGQoKTsKKyAgICAg
ICAgb2Zmc2V0ID0gLTE7CisgICAgfQorICAgIHJldHVybiB2aXNpYmxlUG9zaXRpb247Cit9CisK
K3N0YXRpYyBWaXNpYmxlUG9zaXRpb24gcmlnaHRtb3N0V29yZEJvdW5kYXJ5SW5QcmV2aW91c0Jv
eGVzKGNvbnN0IElubGluZUJveCogYm94LCBpbnQgb2Zmc2V0LCBUZXh0RGlyZWN0aW9uIGJsb2Nr
RGlyZWN0aW9uLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3NpdGlvbikKK3sKKyAg
ICByZXR1cm4gd29yZEJvdW5kYXJ5SW5BZGphY2VudEJveGVzKGJveCwgb2Zmc2V0LCBXZWJDb3Jl
OjpEaXJlY3Rpb25SaWdodCwgYmxvY2tEaXJlY3Rpb24sIHZpc2libGVQb3NpdGlvbik7Cit9Cisg
CitzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIGxlZnRtb3N0V29yZEJvdW5kYXJ5SW5OZXh0Qm94ZXMo
Y29uc3QgSW5saW5lQm94KiBib3gsIGludCBvZmZzZXQsIFRleHREaXJlY3Rpb24gYmxvY2tEaXJl
Y3Rpb24sIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9uKQoreworICAgIHJl
dHVybiB3b3JkQm91bmRhcnlJbkFkamFjZW50Qm94ZXMoYm94LCBvZmZzZXQsIFdlYkNvcmU6OkRp
cmVjdGlvbkxlZnQsIGJsb2NrRGlyZWN0aW9uLCB2aXNpYmxlUG9zaXRpb24pOworfQorCisvLyBH
aXZlbiBhbiBpbnB1dCAndmlzaWJsZVBvc2l0aW9uJyBhbmQgdGhlICd3b3JkRGlyZWN0aW9uJyB0
byBpbmRpY2F0ZSB3aGljaCB2aXN1YWwKKy8vIGRpcmVjdGlvbiB5b3Ugd2FudCB0byBmaW5kIHRo
ZSB3b3JkIGJvdW5kYXJ5IChsZWZ0IG9yIHJpZ2h0KSwKKy8vIHJldHVybiB0aGUgd29yZEJvdW5k
YXJ5Lgorc3RhdGljIFZpc2libGVQb3NpdGlvbiB3b3JkQm91bmRhcnkoY29uc3QgVmlzaWJsZVBv
c2l0aW9uJiB2aXNpYmxlUG9zaXRpb24sIFdlYkNvcmU6OlNlbGVjdGlvbkRpcmVjdGlvbiB3b3Jk
RGlyZWN0aW9uKQoreworICAgIC8vIEluIExUUiBibG9jaywgY3RybC1hcnJvdyBtb3ZlcyBjdXJz
b3IgdG8gdGhlIGxlZnQgYm91bmRhcnkgb2Ygd29yZHMuCisgICAgLy8gSW4gUlRMIGJsb2NrLCBj
dHJsLWFycm93IG1vdmVzIGN1cnNvciB0byB0aGUgcmlnaHQgYm91bmRhcnkgb2Ygd29yZHMuCisg
ICAgSW5saW5lQm94KiBib3g7CisgICAgaW50IG9mZnNldDsKKyAgICB2aXNpYmxlUG9zaXRpb24u
Z2V0SW5saW5lQm94QW5kT2Zmc2V0KGJveCwgb2Zmc2V0KTsKKworICAgIFRleHREaXJlY3Rpb24g
YmxvY2tEaXJlY3Rpb24gPSBkaXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2NrKHZpc2libGVQb3NpdGlv
bi5kZWVwRXF1aXZhbGVudCgpKTsKKyAgICBib29sIGlzTFRSQm94ID0gYm94LT5pc0xlZnRUb1Jp
Z2h0RGlyZWN0aW9uKCk7CisKKyAgICAvLyBGSVhNRTogSWYgdGhlIGJveCdzIGRpcmVjdGlvbmFs
aXR5IGlzIHRoZSBzYW1lIGFzIHRoYXQgb2YgdGhlIGVuY2xvc2luZyBibG9jaywgd2hlbiB0aGUg
b2Zmc2V0IGlzIGF0IHRoZSBib3ggYm91bmRhcnkgYW5kIHRoZSBkaXJlY3Rpb24gaXMgdG93YXJk
cyBpbnNpZGUgdGhlIGJveCwKKyAgICAvLyBkbyBJIHN0aWxsIG5lZWQgdG8gbWFrZSBpdCBhIHNw
ZWNpYWwgY2FzZT8gRm9yIGV4YW1wbGUsIGEgTFRSIGJveCBpbnNpZGUgYSBMVFIgYmxvY2ssIHdo
ZW4gb2Zmc2V0IGlzIGF0IGJveCdzIGNhcmV0TWluT2Zmc2V0IGFuZCB0aGUgZGlyZWN0aW9uIGlz
IERpcmVjdGlvblJpZ2h0LAorICAgIC8vIHNob3VsZCBpdCBiZSB0YWtlbiBjYXJlIGFzIGEgZ2Vu
ZXJhbCBjYXNlPworICAgIGlmIChvZmZzZXQgPT0gYm94LT5jYXJldE1pbk9mZnNldCgpKSB7Cisg
ICAgICAgIGlmICh3b3JkRGlyZWN0aW9uID09IFdlYkNvcmU6OkRpcmVjdGlvbkxlZnQpCisgICAg
ICAgICAgICByZXR1cm4gcmlnaHRtb3N0V29yZEJvdW5kYXJ5SW5QcmV2aW91c0JveGVzKGlzTFRS
Qm94ID8gYm94LT5wcmV2TGVhZkNoaWxkKCkgOiBib3gsIGlzTFRSQm94ID8gLTEgOiBvZmZzZXQs
IGJsb2NrRGlyZWN0aW9uLCB2aXNpYmxlUG9zaXRpb24pOworICAgICAgICByZXR1cm4gbGVmdG1v
c3RXb3JkQm91bmRhcnlJbk5leHRCb3hlcyhpc0xUUkJveCA/IGJveCA6IGJveC0+bmV4dExlYWZD
aGlsZCgpLCBpc0xUUkJveCA/IG9mZnNldCA6IC0xLCBibG9ja0RpcmVjdGlvbiwgdmlzaWJsZVBv
c2l0aW9uKTsKKyAgICB9IAorICAgIGlmIChvZmZzZXQgPT0gYm94LT5jYXJldE1heE9mZnNldCgp
KSB7CisgICAgICAgIGlmICh3b3JkRGlyZWN0aW9uID09IFdlYkNvcmU6OkRpcmVjdGlvbkxlZnQp
CisgICAgICAgICAgICByZXR1cm4gcmlnaHRtb3N0V29yZEJvdW5kYXJ5SW5QcmV2aW91c0JveGVz
KGlzTFRSQm94ID8gYm94IDogYm94LT5wcmV2TGVhZkNoaWxkKCksIGlzTFRSQm94ID8gb2Zmc2V0
IDogLTEsIGJsb2NrRGlyZWN0aW9uLCB2aXNpYmxlUG9zaXRpb24pOworICAgICAgICByZXR1cm4g
bGVmdG1vc3RXb3JkQm91bmRhcnlJbk5leHRCb3hlcyhpc0xUUkJveCA/IGJveC0+bmV4dExlYWZD
aGlsZCgpIDogYm94LCBpc0xUUkJveCA/IC0xIDogb2Zmc2V0LCBibG9ja0RpcmVjdGlvbiwgdmlz
aWJsZVBvc2l0aW9uKTsKKyAgICB9CisgICAgLy8gRklYTUUgaW4gbmV4dCB2ZXJzaW9uLgorICAg
IHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKK30KKworVmlzaWJsZVBvc2l0aW9uIGxlZnRXb3Jk
UG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24pCit7CisgICAg
cmV0dXJuIHdvcmRCb3VuZGFyeSh2aXNpYmxlUG9zaXRpb24sIFdlYkNvcmU6OkRpcmVjdGlvbkxl
ZnQpOyAgICAKK30KKworVmlzaWJsZVBvc2l0aW9uIHJpZ2h0V29yZFBvc2l0aW9uKGNvbnN0IFZp
c2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9uKQoreworICAgIHJldHVybiB3b3JkQm91bmRh
cnkodmlzaWJsZVBvc2l0aW9uLCBXZWJDb3JlOjpEaXJlY3Rpb25SaWdodCk7ICAgIAorfQorCiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuaAkocmV2aXNpb24gODIx
MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuaAkod29ya2luZyBj
b3B5KQpAQCAtNDEsNiArNDEsOCBAQCBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZldvcmQoY29uc3Qg
VmlzaWJsCiBWaXNpYmxlUG9zaXRpb24gZW5kT2ZXb3JkKGNvbnN0IFZpc2libGVQb3NpdGlvbiAm
LCBFV29yZFNpZGUgPSBSaWdodFdvcmRJZk9uQm91bmRhcnkpOwogVmlzaWJsZVBvc2l0aW9uIHBy
ZXZpb3VzV29yZFBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmKTsKIFZpc2libGVQb3Np
dGlvbiBuZXh0V29yZFBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmKTsKK1Zpc2libGVQ
b3NpdGlvbiByaWdodFdvcmRQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKK1Zpc2li
bGVQb3NpdGlvbiBsZWZ0V29yZFBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOwogCiAv
LyBzZW50ZW5jZXMKIFZpc2libGVQb3NpdGlvbiBzdGFydE9mU2VudGVuY2UoY29uc3QgVmlzaWJs
ZVBvc2l0aW9uICYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcAkocmV2
aXNpb24gODIxMTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMzMiw2ICszMzIsOCBAQCB2b2lkIERPTVNlbGVjdGlvbjo6bW9kaWZ5
KGNvbnN0IFN0cmluZyYgCiAgICAgICAgIGdyYW51bGFyaXR5ID0gUGFyYWdyYXBoQm91bmRhcnk7
CiAgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZ3JhbnVsYXJpdHlTdHJpbmcsICJkb2N1
bWVudGJvdW5kYXJ5IikpCiAgICAgICAgIGdyYW51bGFyaXR5ID0gRG9jdW1lbnRCb3VuZGFyeTsK
KyAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShncmFudWxhcml0eVN0cmluZywgIi13ZWJr
aXQtdmlzdWFsLXdvcmQiKSkKKyAgICAgICAgZ3JhbnVsYXJpdHkgPSBXZWJLaXRWaXN1YWxXb3Jk
R3JhbnVsYXJpdHk7CiAgICAgZWxzZQogICAgICAgICByZXR1cm47CiAKSW5kZXg6IExheW91dFRl
c3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlz
aW9uIDgyMjQ0KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTMgQEAKKzIwMTEtMDMtMjkgIFhpYW9tZWkgSmkgIDx4amlAY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEV4cGVyaW1l
bnQgd2l0aCBtb3ZpbmcgY2FyZXQgYnkgd29yZCBpbiB2aXN1YWwgb3JkZXIuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NzMzNgorCisgICAgICAgICog
ZWRpdGluZy9zZWxlY3Rpb24vbW92ZS1ieS13b3JkLXZpc3VhbGx5LWV4cGVjdGVkLnR4dDogQWRk
ZWQuCisgICAgICAgICogZWRpdGluZy9zZWxlY3Rpb24vbW92ZS1ieS13b3JkLXZpc3VhbGx5Lmh0
bWw6IEFkZGVkLgorCiAyMDExLTAzLTI5ICBMZW8gWWFuZyAgPGxlby55YW5nQHRvcmNobW9iaWxl
LmNvbS5jbj4KIAogICAgICAgICBSZXZpZXdlZCBieSBOaWtvbGFzIFppbW1lcm1hbm4uCkluZGV4
OiBMYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9tb3ZlLWJ5LXdvcmQtdmlzdWFsbHktZXhw
ZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL21v
dmUtYnktd29yZC12aXN1YWxseS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9tb3ZlLWJ5LXdvcmQtdmlzdWFsbHktZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1MjAgQEAKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAx
ODA6IFR5cGVFcnJvcjogJ251bGwnIGlzIG5vdCBhbiBvYmplY3QgKGV2YWx1YXRpbmcgJ2RvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXN0R3JvdXAiKS5zdHlsZScpCithYmMgZGVmIGhpaiBvcHEg
cnN0CivXqdep16kg16DXoNegINeR15HXkSDXkteS15Ig16fXp9enINeb15vXmworYWJjIGRlZiDX
qdeg15Eg16HXmNeWIHV2dyB4eXoKK2FiYyDXqdeg15EgeHl6CivXqdeg15EgYWJjINeh15jXlgor
YWJjINep16nXqSBkZWYg16nXoNeRIGFiYyDXodeY15YgdXZ3INeW15bXliB4eXoKK2FiYyDXqdep
16kgZGVmd2hhc3RldmVyINep16DXkSBhYmMg16HXmNeWIHV2dyDXlteW15YgeHl6CithYmMg16nX
qdepIGRlZiDXqdeg15Egb3BxINeh15jXliB1dncg16nXqdepIHh5egorYWJjINep16nXqSBkZWYg
16nXoNeRIGFiYyDXodeY15YgdXZ3INeW15bXliB4eXoKK2FiYyDXqdep16kgZGVmINep16DXkSBh
YmMg16HXmNeWIHV2dyDXlteW15YgeHl6CithYmMg16nXqdepIGRlZndoYXN0ZXZlciDXqdeg15Eg
YWJjINeh15jXliB1dncg15bXlteWIHh5egorYWJjINep16nXqSBkZWbXqdep15IgYWJjINeh15jX
liB1dncg15bXlteWIHh5egorCis9PT09PT09PSBNb3ZlIEJ5IFdvcmQgPT09PQorVGVzdCAxLCBM
VFI6CisgIE1vdmluZyByaWdodDogTW92ZSByaWdodCBieSBvbmUgd29yZAorImFiYyBkZWYgaGlq
IG9wcSByc3QiWzAsIDBdCisiYWJjIGRlZiBoaWogb3BxIHJzdCJbMSwgMV0KKyJhYmMgZGVmIGhp
aiBvcHEgcnN0IlsyLCAyXQorImFiYyBkZWYgaGlqIG9wcSByc3QiWzMsIDNdCisiYWJjIGRlZiBo
aWogb3BxIHJzdCJbNCwgNF0KKyJhYmMgZGVmIGhpaiBvcHEgcnN0Ils1LCA1XQorImFiYyBkZWYg
aGlqIG9wcSByc3QiWzYsIDZdCisiYWJjIGRlZiBoaWogb3BxIHJzdCJbNywgN10KKyJhYmMgZGVm
IGhpaiBvcHEgcnN0Ils4LCA4XQorImFiYyBkZWYgaGlqIG9wcSByc3QiWzksIDldCisiYWJjIGRl
ZiBoaWogb3BxIHJzdCJbMTAsIDEwXQorImFiYyBkZWYgaGlqIG9wcSByc3QiWzExLCAxMV0KKyJh
YmMgZGVmIGhpaiBvcHEgcnN0IlsxMiwgMTJdCisiYWJjIGRlZiBoaWogb3BxIHJzdCJbMTMsIDEz
XQorImFiYyBkZWYgaGlqIG9wcSByc3QiWzE0LCAxNF0KKyJhYmMgZGVmIGhpaiBvcHEgcnN0Ilsx
NSwgMTVdCisiYWJjIGRlZiBoaWogb3BxIHJzdCJbMTYsIDE2XQorImFiYyBkZWYgaGlqIG9wcSBy
c3QiWzE3LCAxN10KKyJhYmMgZGVmIGhpaiBvcHEgcnN0IlsxOCwgMThdCisiYWJjIGRlZiBoaWog
b3BxIHJzdCJbMTksIDE5XQorTW92ZSBsZWZ0IGJ5IG9uZSB3b3JkCisiYWJjIGRlZiBoaWogb3Bx
IHJzdCJbMTksIDE2XQorImFiYyBkZWYgaGlqIG9wcSByc3QiWzE4LCAxOF0KKyJhYmMgZGVmIGhp
aiBvcHEgcnN0IlsxNywgMTddCisiYWJjIGRlZiBoaWogb3BxIHJzdCJbMTYsIDE2XQorImFiYyBk
ZWYgaGlqIG9wcSByc3QiWzE1LCAxNV0KKyJhYmMgZGVmIGhpaiBvcHEgcnN0IlsxNCwgMTRdCisi
YWJjIGRlZiBoaWogb3BxIHJzdCJbMTMsIDEzXQorImFiYyBkZWYgaGlqIG9wcSByc3QiWzEyLCAx
Ml0KKyJhYmMgZGVmIGhpaiBvcHEgcnN0IlsxMSwgMTFdCisiYWJjIGRlZiBoaWogb3BxIHJzdCJb
MTAsIDEwXQorImFiYyBkZWYgaGlqIG9wcSByc3QiWzksIDldCisiYWJjIGRlZiBoaWogb3BxIHJz
dCJbOCwgOF0KKyJhYmMgZGVmIGhpaiBvcHEgcnN0Ils3LCA3XQorImFiYyBkZWYgaGlqIG9wcSBy
c3QiWzYsIDZdCisiYWJjIGRlZiBoaWogb3BxIHJzdCJbNSwgNV0KKyJhYmMgZGVmIGhpaiBvcHEg
cnN0Ils0LCA0XQorImFiYyBkZWYgaGlqIG9wcSByc3QiWzMsIDNdCisiYWJjIGRlZiBoaWogb3Bx
IHJzdCJbMiwgMl0KKyJhYmMgZGVmIGhpaiBvcHEgcnN0IlsxLCAxXQorImFiYyBkZWYgaGlqIG9w
cSByc3QiWzAsIDBdCitNb3ZlIGxlZnQgYnkgb25lIHdvcmQKKyJhYmMgZGVmIGhpaiBvcHEgcnN0
IlswLCAwXQorImFiYyBkZWYgaGlqIG9wcSByc3QiWzE4LCAxOF0KKyJhYmMgZGVmIGhpaiBvcHEg
cnN0IlsxNywgMTddCisiYWJjIGRlZiBoaWogb3BxIHJzdCJbMTYsIDE2XQorImFiYyBkZWYgaGlq
IG9wcSByc3QiWzE1LCAxNV0KKyJhYmMgZGVmIGhpaiBvcHEgcnN0IlsxNCwgMTRdCisiYWJjIGRl
ZiBoaWogb3BxIHJzdCJbMTMsIDEzXQorImFiYyBkZWYgaGlqIG9wcSByc3QiWzEyLCAxMl0KKyJh
YmMgZGVmIGhpaiBvcHEgcnN0IlsxMSwgMTFdCisiYWJjIGRlZiBoaWogb3BxIHJzdCJbMTAsIDEw
XQorImFiYyBkZWYgaGlqIG9wcSByc3QiWzksIDldCisiYWJjIGRlZiBoaWogb3BxIHJzdCJbOCwg
OF0KKyJhYmMgZGVmIGhpaiBvcHEgcnN0Ils3LCA3XQorImFiYyBkZWYgaGlqIG9wcSByc3QiWzYs
IDZdCisiYWJjIGRlZiBoaWogb3BxIHJzdCJbNSwgNV0KKyJhYmMgZGVmIGhpaiBvcHEgcnN0Ils0
LCA0XQorImFiYyBkZWYgaGlqIG9wcSByc3QiWzMsIDNdCisiYWJjIGRlZiBoaWogb3BxIHJzdCJb
MiwgMl0KKyJhYmMgZGVmIGhpaiBvcHEgcnN0IlsxLCAxXQorImFiYyBkZWYgaGlqIG9wcSByc3Qi
WzE5LCAxOV0KK01vdmUgcmlnaHQgYnkgb25lIHdvcmQKKyJhYmMgZGVmIGhpaiBvcHEgcnN0Ilsx
OSwgMTldCisiYWJjIGRlZiBoaWogb3BxIHJzdCJbMSwgMV0KKyJhYmMgZGVmIGhpaiBvcHEgcnN0
IlsyLCAyXQorImFiYyBkZWYgaGlqIG9wcSByc3QiWzMsIDNdCisiYWJjIGRlZiBoaWogb3BxIHJz
dCJbNCwgNF0KKyJhYmMgZGVmIGhpaiBvcHEgcnN0Ils1LCA1XQorImFiYyBkZWYgaGlqIG9wcSBy
c3QiWzYsIDZdCisiYWJjIGRlZiBoaWogb3BxIHJzdCJbNywgN10KKyJhYmMgZGVmIGhpaiBvcHEg
cnN0Ils4LCA4XQorImFiYyBkZWYgaGlqIG9wcSByc3QiWzksIDldCisiYWJjIGRlZiBoaWogb3Bx
IHJzdCJbMTAsIDEwXQorImFiYyBkZWYgaGlqIG9wcSByc3QiWzExLCAxMV0KKyJhYmMgZGVmIGhp
aiBvcHEgcnN0IlsxMiwgMTJdCisiYWJjIGRlZiBoaWogb3BxIHJzdCJbMTMsIDEzXQorImFiYyBk
ZWYgaGlqIG9wcSByc3QiWzE0LCAxNF0KKyJhYmMgZGVmIGhpaiBvcHEgcnN0IlsxNSwgMTVdCisi
YWJjIGRlZiBoaWogb3BxIHJzdCJbMTYsIDE2XQorImFiYyBkZWYgaGlqIG9wcSByc3QiWzE3LCAx
N10KKyJhYmMgZGVmIGhpaiBvcHEgcnN0IlsxOCwgMThdCisiYWJjIGRlZiBoaWogb3BxIHJzdCJb
MCwgMF0KK1Rlc3QgMiwgTFRSOgorICBNb3ZpbmcgcmlnaHQ6IE1vdmUgcmlnaHQgYnkgb25lIHdv
cmQKKyJaWlogUVFRIEJCQiBDQ0MgWFhYIExMTCJbMCwgMF0KKyJaWlogUVFRIEJCQiBDQ0MgWFhY
IExMTCJbMjIsIDIyXQorIlpaWiBRUVEgQkJCIENDQyBYWFggTExMIlsyMSwgMjFdCisiWlpaIFFR
USBCQkIgQ0NDIFhYWCBMTEwiWzIwLCAyMF0KKyJaWlogUVFRIEJCQiBDQ0MgWFhYIExMTCJbMTks
IDE5XQorIlpaWiBRUVEgQkJCIENDQyBYWFggTExMIlsxOCwgMThdCisiWlpaIFFRUSBCQkIgQ0ND
IFhYWCBMTEwiWzE3LCAxN10KKyJaWlogUVFRIEJCQiBDQ0MgWFhYIExMTCJbMTYsIDE2XQorIlpa
WiBRUVEgQkJCIENDQyBYWFggTExMIlsxNSwgMTVdCisiWlpaIFFRUSBCQkIgQ0NDIFhYWCBMTEwi
WzE0LCAxNF0KKyJaWlogUVFRIEJCQiBDQ0MgWFhYIExMTCJbMTMsIDEzXQorIlpaWiBRUVEgQkJC
IENDQyBYWFggTExMIlsxMiwgMTJdCisiWlpaIFFRUSBCQkIgQ0NDIFhYWCBMTEwiWzExLCAxMV0K
KyJaWlogUVFRIEJCQiBDQ0MgWFhYIExMTCJbMTAsIDEwXQorIlpaWiBRUVEgQkJCIENDQyBYWFgg
TExMIls5LCA5XQorIlpaWiBRUVEgQkJCIENDQyBYWFggTExMIls4LCA4XQorIlpaWiBRUVEgQkJC
IENDQyBYWFggTExMIls3LCA3XQorIlpaWiBRUVEgQkJCIENDQyBYWFggTExMIls2LCA2XQorIlpa
WiBRUVEgQkJCIENDQyBYWFggTExMIls1LCA1XQorIlpaWiBRUVEgQkJCIENDQyBYWFggTExMIls0
LCA0XQorIlpaWiBRUVEgQkJCIENDQyBYWFggTExMIlszLCAzXQorIlpaWiBRUVEgQkJCIENDQyBY
WFggTExMIlsyLCAyXQorIlpaWiBRUVEgQkJCIENDQyBYWFggTExMIlsxLCAxXQorIlpaWiBRUVEg
QkJCIENDQyBYWFggTExMIlsyMywgMjNdCitNb3ZlIGxlZnQgYnkgb25lIHdvcmQKKyJaWlogUVFR
IEJCQiBDQ0MgWFhYIExMTCJbMjMsIDIzXQorIlpaWiBRUVEgQkJCIENDQyBYWFggTExMIlsxLCAx
XQorIlpaWiBRUVEgQkJCIENDQyBYWFggTExMIlsyLCAyXQorIlpaWiBRUVEgQkJCIENDQyBYWFgg
TExMIlszLCAzXQorIlpaWiBRUVEgQkJCIENDQyBYWFggTExMIls0LCA0XQorIlpaWiBRUVEgQkJC
IENDQyBYWFggTExMIls1LCA1XQorIlpaWiBRUVEgQkJCIENDQyBYWFggTExMIls2LCA2XQorIlpa
WiBRUVEgQkJCIENDQyBYWFggTExMIls3LCA3XQorIlpaWiBRUVEgQkJCIENDQyBYWFggTExMIls4
LCA4XQorIlpaWiBRUVEgQkJCIENDQyBYWFggTExMIls5LCA5XQorIlpaWiBRUVEgQkJCIENDQyBY
WFggTExMIlsxMCwgMTBdCisiWlpaIFFRUSBCQkIgQ0NDIFhYWCBMTEwiWzExLCAxMV0KKyJaWlog
UVFRIEJCQiBDQ0MgWFhYIExMTCJbMTIsIDEyXQorIlpaWiBRUVEgQkJCIENDQyBYWFggTExMIlsx
MywgMTNdCisiWlpaIFFRUSBCQkIgQ0NDIFhYWCBMTEwiWzE0LCAxNF0KKyJaWlogUVFRIEJCQiBD
Q0MgWFhYIExMTCJbMTUsIDE1XQorIlpaWiBRUVEgQkJCIENDQyBYWFggTExMIlsxNiwgMTZdCisi
WlpaIFFRUSBCQkIgQ0NDIFhYWCBMTEwiWzE3LCAxN10KKyJaWlogUVFRIEJCQiBDQ0MgWFhYIExM
TCJbMTgsIDE4XQorIlpaWiBRUVEgQkJCIENDQyBYWFggTExMIlsxOSwgMTldCisiWlpaIFFRUSBC
QkIgQ0NDIFhYWCBMTEwiWzIwLCAyMF0KKyJaWlogUVFRIEJCQiBDQ0MgWFhYIExMTCJbMjEsIDIx
XQorIlpaWiBRUVEgQkJCIENDQyBYWFggTExMIlsyMiwgMjJdCisiWlpaIFFRUSBCQkIgQ0NDIFhY
WCBMTEwiWzAsIDBdCitNb3ZlIGxlZnQgYnkgb25lIHdvcmQKKyJaWlogUVFRIEJCQiBDQ0MgWFhY
IExMTCJbMCwgMF0KKyJaWlogUVFRIEJCQiBDQ0MgWFhYIExMTCJbMSwgMV0KKyJaWlogUVFRIEJC
QiBDQ0MgWFhYIExMTCJbMiwgMl0KKyJaWlogUVFRIEJCQiBDQ0MgWFhYIExMTCJbMywgM10KKyJa
WlogUVFRIEJCQiBDQ0MgWFhYIExMTCJbNCwgNF0KKyJaWlogUVFRIEJCQiBDQ0MgWFhYIExMTCJb
NSwgNV0KKyJaWlogUVFRIEJCQiBDQ0MgWFhYIExMTCJbNiwgNl0KKyJaWlogUVFRIEJCQiBDQ0Mg
WFhYIExMTCJbNywgN10KKyJaWlogUVFRIEJCQiBDQ0MgWFhYIExMTCJbOCwgOF0KKyJaWlogUVFR
IEJCQiBDQ0MgWFhYIExMTCJbOSwgOV0KKyJaWlogUVFRIEJCQiBDQ0MgWFhYIExMTCJbMTAsIDEw
XQorIlpaWiBRUVEgQkJCIENDQyBYWFggTExMIlsxMSwgMTFdCisiWlpaIFFRUSBCQkIgQ0NDIFhY
WCBMTEwiWzEyLCAxMl0KKyJaWlogUVFRIEJCQiBDQ0MgWFhYIExMTCJbMTMsIDEzXQorIlpaWiBR
UVEgQkJCIENDQyBYWFggTExMIlsxNCwgMTRdCisiWlpaIFFRUSBCQkIgQ0NDIFhYWCBMTEwiWzE1
LCAxNV0KKyJaWlogUVFRIEJCQiBDQ0MgWFhYIExMTCJbMTYsIDE2XQorIlpaWiBRUVEgQkJCIEND
QyBYWFggTExMIlsxNywgMTddCisiWlpaIFFRUSBCQkIgQ0NDIFhYWCBMTEwiWzE4LCAxOF0KKyJa
WlogUVFRIEJCQiBDQ0MgWFhYIExMTCJbMTksIDE5XQorIlpaWiBRUVEgQkJCIENDQyBYWFggTExM
IlsyMCwgMjBdCisiWlpaIFFRUSBCQkIgQ0NDIFhYWCBMTEwiWzIxLCAyMV0KKyJaWlogUVFRIEJC
QiBDQ0MgWFhYIExMTCJbMjIsIDIyXQorIlpaWiBRUVEgQkJCIENDQyBYWFggTExMIlsyMywgMjNd
CitNb3ZlIHJpZ2h0IGJ5IG9uZSB3b3JkCisiWlpaIFFRUSBCQkIgQ0NDIFhYWCBMTEwiWzIzLCAy
MF0KKyJaWlogUVFRIEJCQiBDQ0MgWFhYIExMTCJbMjIsIDIyXQorIlpaWiBRUVEgQkJCIENDQyBY
WFggTExMIlsyMSwgMjFdCisiWlpaIFFRUSBCQkIgQ0NDIFhYWCBMTEwiWzIwLCAyMF0KKyJaWlog
UVFRIEJCQiBDQ0MgWFhYIExMTCJbMTksIDE5XQorIlpaWiBRUVEgQkJCIENDQyBYWFggTExMIlsx
OCwgMThdCisiWlpaIFFRUSBCQkIgQ0NDIFhYWCBMTEwiWzE3LCAxN10KKyJaWlogUVFRIEJCQiBD
Q0MgWFhYIExMTCJbMTYsIDE2XQorIlpaWiBRUVEgQkJCIENDQyBYWFggTExMIlsxNSwgMTVdCisi
WlpaIFFRUSBCQkIgQ0NDIFhYWCBMTEwiWzE0LCAxNF0KKyJaWlogUVFRIEJCQiBDQ0MgWFhYIExM
TCJbMTMsIDEzXQorIlpaWiBRUVEgQkJCIENDQyBYWFggTExMIlsxMiwgMTJdCisiWlpaIFFRUSBC
QkIgQ0NDIFhYWCBMTEwiWzExLCAxMV0KKyJaWlogUVFRIEJCQiBDQ0MgWFhYIExMTCJbMTAsIDEw
XQorIlpaWiBRUVEgQkJCIENDQyBYWFggTExMIls5LCA5XQorIlpaWiBRUVEgQkJCIENDQyBYWFgg
TExMIls4LCA4XQorIlpaWiBRUVEgQkJCIENDQyBYWFggTExMIls3LCA3XQorIlpaWiBRUVEgQkJC
IENDQyBYWFggTExMIls2LCA2XQorIlpaWiBRUVEgQkJCIENDQyBYWFggTExMIls1LCA1XQorIlpa
WiBRUVEgQkJCIENDQyBYWFggTExMIls0LCA0XQorIlpaWiBRUVEgQkJCIENDQyBYWFggTExMIlsz
LCAzXQorIlpaWiBRUVEgQkJCIENDQyBYWFggTExMIlsyLCAyXQorIlpaWiBRUVEgQkJCIENDQyBY
WFggTExMIlsxLCAxXQorIlpaWiBRUVEgQkJCIENDQyBYWFggTExMIlswLCAwXQorVGVzdCAzLCBM
VFI6CisgIE1vdmluZyByaWdodDogTW92ZSByaWdodCBieSBvbmUgd29yZAorImFiYyBkZWYgWlFC
IFJJRyB1dncgeHl6IlswLCAwXQorImFiYyBkZWYgWlFCIFJJRyB1dncgeHl6IlsxLCAxXQorImFi
YyBkZWYgWlFCIFJJRyB1dncgeHl6IlsyLCAyXQorImFiYyBkZWYgWlFCIFJJRyB1dncgeHl6Ilsz
LCAzXQorImFiYyBkZWYgWlFCIFJJRyB1dncgeHl6Ils0LCA0XQorImFiYyBkZWYgWlFCIFJJRyB1
dncgeHl6Ils1LCA1XQorImFiYyBkZWYgWlFCIFJJRyB1dncgeHl6Ils2LCA2XQorImFiYyBkZWYg
WlFCIFJJRyB1dncgeHl6Ils3LCA3XQorImFiYyBkZWYgWlFCIFJJRyB1dncgeHl6Ils4LCA4XQor
ImFiYyBkZWYgWlFCIFJJRyB1dncgeHl6IlsxNCwgMTRdCisiYWJjIGRlZiBaUUIgUklHIHV2dyB4
eXoiWzEzLCAxM10KKyJhYmMgZGVmIFpRQiBSSUcgdXZ3IHh5eiJbMTIsIDEyXQorImFiYyBkZWYg
WlFCIFJJRyB1dncgeHl6IlsxMSwgMTFdCisiYWJjIGRlZiBaUUIgUklHIHV2dyB4eXoiWzEwLCAx
MF0KKyJhYmMgZGVmIFpRQiBSSUcgdXZ3IHh5eiJbOSwgOV0KKyJhYmMgZGVmIFpRQiBSSUcgdXZ3
IHh5eiJbMTUsIDE1XQorImFiYyBkZWYgWlFCIFJJRyB1dncgeHl6IlsxNiwgMTZdCisiYWJjIGRl
ZiBaUUIgUklHIHV2dyB4eXoiWzE3LCAxN10KKyJhYmMgZGVmIFpRQiBSSUcgdXZ3IHh5eiJbMTgs
IDE4XQorImFiYyBkZWYgWlFCIFJJRyB1dncgeHl6IlsxOSwgMTldCisiYWJjIGRlZiBaUUIgUklH
IHV2dyB4eXoiWzIwLCAyMF0KKyJhYmMgZGVmIFpRQiBSSUcgdXZ3IHh5eiJbMjEsIDIxXQorImFi
YyBkZWYgWlFCIFJJRyB1dncgeHl6IlsyMiwgMjJdCisiYWJjIGRlZiBaUUIgUklHIHV2dyB4eXoi
WzIzLCAyM10KK01vdmUgbGVmdCBieSBvbmUgd29yZAorImFiYyBkZWYgWlFCIFJJRyB1dncgeHl6
IlsyMywgMjBdCisiYWJjIGRlZiBaUUIgUklHIHV2dyB4eXoiWzIyLCAyMl0KKyJhYmMgZGVmIFpR
QiBSSUcgdXZ3IHh5eiJbMjEsIDIxXQorImFiYyBkZWYgWlFCIFJJRyB1dncgeHl6IlsyMCwgMjBd
CisiYWJjIGRlZiBaUUIgUklHIHV2dyB4eXoiWzE5LCAxOV0KKyJhYmMgZGVmIFpRQiBSSUcgdXZ3
IHh5eiJbMTgsIDE4XQorImFiYyBkZWYgWlFCIFJJRyB1dncgeHl6IlsxNywgMTddCisiYWJjIGRl
ZiBaUUIgUklHIHV2dyB4eXoiWzE2LCAxNl0KKyJhYmMgZGVmIFpRQiBSSUcgdXZ3IHh5eiJbMTUs
IDRdCisiYWJjIGRlZiBaUUIgUklHIHV2dyB4eXoiWzksIDldCisiYWJjIGRlZiBaUUIgUklHIHV2
dyB4eXoiWzEwLCAxMF0KKyJhYmMgZGVmIFpRQiBSSUcgdXZ3IHh5eiJbMTEsIDExXQorImFiYyBk
ZWYgWlFCIFJJRyB1dncgeHl6IlsxMiwgMTJdCisiYWJjIGRlZiBaUUIgUklHIHV2dyB4eXoiWzEz
LCAxM10KKyJhYmMgZGVmIFpRQiBSSUcgdXZ3IHh5eiJbMTQsIDE0XQorImFiYyBkZWYgWlFCIFJJ
RyB1dncgeHl6Ils4LCA0XQorImFiYyBkZWYgWlFCIFJJRyB1dncgeHl6Ils3LCA3XQorImFiYyBk
ZWYgWlFCIFJJRyB1dncgeHl6Ils2LCA2XQorImFiYyBkZWYgWlFCIFJJRyB1dncgeHl6Ils1LCA1
XQorImFiYyBkZWYgWlFCIFJJRyB1dncgeHl6Ils0LCA0XQorImFiYyBkZWYgWlFCIFJJRyB1dncg
eHl6IlszLCAzXQorImFiYyBkZWYgWlFCIFJJRyB1dncgeHl6IlsyLCAyXQorImFiYyBkZWYgWlFC
IFJJRyB1dncgeHl6IlsxLCAxXQorImFiYyBkZWYgWlFCIFJJRyB1dncgeHl6IlswLCAwXQorTW92
ZSBsZWZ0IGJ5IG9uZSB3b3JkCisiYWJjIGRlZiBaUUIgUklHIHV2dyB4eXoiWzAsIDBdCisiYWJj
IGRlZiBaUUIgUklHIHV2dyB4eXoiWzYsIDZdCisiYWJjIGRlZiBaUUIgUklHIHV2dyB4eXoiWzUs
IDVdCisiYWJjIGRlZiBaUUIgUklHIHV2dyB4eXoiWzQsIDRdCisiYWJjIGRlZiBaUUIgUklHIHV2
dyB4eXoiWzMsIDNdCisiYWJjIGRlZiBaUUIgUklHIHV2dyB4eXoiWzIsIDJdCisiYWJjIGRlZiBa
UUIgUklHIHV2dyB4eXoiWzEsIDFdCisiYWJjIGRlZiBaUUIgUklHIHV2dyB4eXoiWzcsIDddCisi
YWJjIGRlZiBaUUIgUklHIHV2dyB4eXoiWzgsIDhdCisiYWJjIGRlZiBaUUIgUklHIHV2dyB4eXoi
WzksIDldCisiYWJjIGRlZiBaUUIgUklHIHV2dyB4eXoiWzEwLCAxMF0KKyJhYmMgZGVmIFpRQiBS
SUcgdXZ3IHh5eiJbMTEsIDExXQorImFiYyBkZWYgWlFCIFJJRyB1dncgeHl6IlsxMiwgMTJdCisi
YWJjIGRlZiBaUUIgUklHIHV2dyB4eXoiWzEzLCAxM10KKyJhYmMgZGVmIFpRQiBSSUcgdXZ3IHh5
eiJbMTQsIDE0XQorImFiYyBkZWYgWlFCIFJJRyB1dncgeHl6IlsxNSwgMTVdCisiYWJjIGRlZiBa
UUIgUklHIHV2dyB4eXoiWzE2LCAxNl0KKyJhYmMgZGVmIFpRQiBSSUcgdXZ3IHh5eiJbMjIsIDIy
XQorImFiYyBkZWYgWlFCIFJJRyB1dncgeHl6IlsyMSwgMjFdCisiYWJjIGRlZiBaUUIgUklHIHV2
dyB4eXoiWzIwLCAyMF0KKyJhYmMgZGVmIFpRQiBSSUcgdXZ3IHh5eiJbMTksIDE5XQorImFiYyBk
ZWYgWlFCIFJJRyB1dncgeHl6IlsxOCwgMThdCisiYWJjIGRlZiBaUUIgUklHIHV2dyB4eXoiWzE3
LCAxN10KKyJhYmMgZGVmIFpRQiBSSUcgdXZ3IHh5eiJbMjMsIDIzXQorTW92ZSByaWdodCBieSBv
bmUgd29yZAorImFiYyBkZWYgWlFCIFJJRyB1dncgeHl6IlsyMywgMTJdCisiYWJjIGRlZiBaUUIg
UklHIHV2dyB4eXoiWzE3LCAxN10KKyJhYmMgZGVmIFpRQiBSSUcgdXZ3IHh5eiJbMTgsIDE4XQor
ImFiYyBkZWYgWlFCIFJJRyB1dncgeHl6IlsxOSwgMTldCisiYWJjIGRlZiBaUUIgUklHIHV2dyB4
eXoiWzIwLCAyMF0KKyJhYmMgZGVmIFpRQiBSSUcgdXZ3IHh5eiJbMjEsIDIxXQorImFiYyBkZWYg
WlFCIFJJRyB1dncgeHl6IlsyMiwgMjJdCisiYWJjIGRlZiBaUUIgUklHIHV2dyB4eXoiWzE2LCAx
Ml0KKyJhYmMgZGVmIFpRQiBSSUcgdXZ3IHh5eiJbMTUsIDE1XQorImFiYyBkZWYgWlFCIFJJRyB1
dncgeHl6IlsxNCwgMTRdCisiYWJjIGRlZiBaUUIgUklHIHV2dyB4eXoiWzEzLCAxM10KKyJhYmMg
ZGVmIFpRQiBSSUcgdXZ3IHh5eiJbMTIsIDEyXQorImFiYyBkZWYgWlFCIFJJRyB1dncgeHl6Ilsx
MSwgMTFdCisiYWJjIGRlZiBaUUIgUklHIHV2dyB4eXoiWzEwLCAxMF0KKyJhYmMgZGVmIFpRQiBS
SUcgdXZ3IHh5eiJbOSwgOV0KKyJhYmMgZGVmIFpRQiBSSUcgdXZ3IHh5eiJbOCwgOF0KKyJhYmMg
ZGVmIFpRQiBSSUcgdXZ3IHh5eiJbNywgN10KKyJhYmMgZGVmIFpRQiBSSUcgdXZ3IHh5eiJbMSwg
MV0KKyJhYmMgZGVmIFpRQiBSSUcgdXZ3IHh5eiJbMiwgMl0KKyJhYmMgZGVmIFpRQiBSSUcgdXZ3
IHh5eiJbMywgM10KKyJhYmMgZGVmIFpRQiBSSUcgdXZ3IHh5eiJbNCwgNF0KKyJhYmMgZGVmIFpR
QiBSSUcgdXZ3IHh5eiJbNSwgNV0KKyJhYmMgZGVmIFpRQiBSSUcgdXZ3IHh5eiJbNiwgNl0KKyJh
YmMgZGVmIFpRQiBSSUcgdXZ3IHh5eiJbMCwgMF0KK1Rlc3QgNCwgTFRSOgorICBNb3Zpbmcgcmln
aHQ6IE1vdmUgcmlnaHQgYnkgb25lIHdvcmQKKyJhYmMgWlFCIHh5eiJbMCwgMF0KKyJhYmMgWlFC
IHh5eiJbMSwgMV0KKyJhYmMgWlFCIHh5eiJbMiwgMl0KKyJhYmMgWlFCIHh5eiJbMywgM10KKyJh
YmMgWlFCIHh5eiJbNCwgNF0KKyJhYmMgWlFCIHh5eiJbNiwgNl0KKyJhYmMgWlFCIHh5eiJbNSwg
NV0KKyJhYmMgWlFCIHh5eiJbNywgN10KKyJhYmMgWlFCIHh5eiJbOCwgOF0KKyJhYmMgWlFCIHh5
eiJbOSwgOV0KKyJhYmMgWlFCIHh5eiJbMTAsIDEwXQorImFiYyBaUUIgeHl6IlsxMSwgMTFdCitN
b3ZlIGxlZnQgYnkgb25lIHdvcmQKKyJhYmMgWlFCIHh5eiJbMTEsIDhdCisiYWJjIFpRQiB4eXoi
WzEwLCAxMF0KKyJhYmMgWlFCIHh5eiJbOSwgOV0KKyJhYmMgWlFCIHh5eiJbOCwgOF0KKyJhYmMg
WlFCIHh5eiJbNywgMF0KKyJhYmMgWlFCIHh5eiJbNSwgNV0KKyJhYmMgWlFCIHh5eiJbNiwgNl0K
KyJhYmMgWlFCIHh5eiJbNCwgMF0KKyJhYmMgWlFCIHh5eiJbMywgM10KKyJhYmMgWlFCIHh5eiJb
MiwgMl0KKyJhYmMgWlFCIHh5eiJbMSwgMV0KKyJhYmMgWlFCIHh5eiJbMCwgMF0KK01vdmUgbGVm
dCBieSBvbmUgd29yZAorImFiYyBaUUIgeHl6IlswLCAwXQorImFiYyBaUUIgeHl6IlsyLCAyXQor
ImFiYyBaUUIgeHl6IlsxLCAxXQorImFiYyBaUUIgeHl6IlszLCAzXQorImFiYyBaUUIgeHl6Ils0
LCA0XQorImFiYyBaUUIgeHl6Ils1LCA1XQorImFiYyBaUUIgeHl6Ils2LCA2XQorImFiYyBaUUIg
eHl6Ils3LCA3XQorImFiYyBaUUIgeHl6Ils4LCA4XQorImFiYyBaUUIgeHl6IlsxMCwgMTBdCisi
YWJjIFpRQiB4eXoiWzksIDldCisiYWJjIFpRQiB4eXoiWzExLCAxMV0KK01vdmUgcmlnaHQgYnkg
b25lIHdvcmQKKyJhYmMgWlFCIHh5eiJbMTEsIDRdCisiYWJjIFpRQiB4eXoiWzksIDldCisiYWJj
IFpRQiB4eXoiWzEwLCAxMF0KKyJhYmMgWlFCIHh5eiJbOCwgNF0KKyJhYmMgWlFCIHh5eiJbNywg
N10KKyJhYmMgWlFCIHh5eiJbNiwgNl0KKyJhYmMgWlFCIHh5eiJbNSwgNV0KKyJhYmMgWlFCIHh5
eiJbNCwgNF0KKyJhYmMgWlFCIHh5eiJbMywgM10KKyJhYmMgWlFCIHh5eiJbMSwgMV0KKyJhYmMg
WlFCIHh5eiJbMiwgMl0KKyJhYmMgWlFCIHh5eiJbMCwgMF0KK1Rlc3QgNSwgTFRSOgorICBNb3Zp
bmcgcmlnaHQ6IE1vdmUgcmlnaHQgYnkgb25lIHdvcmQKKyJaUUIgYWJjIFJJRyJbMCwgMF0KKyJa
UUIgYWJjIFJJRyJbMiwgMl0KKyJaUUIgYWJjIFJJRyJbMSwgMV0KKyJaUUIgYWJjIFJJRyJbMywg
M10KKyJaUUIgYWJjIFJJRyJbNCwgNF0KKyJaUUIgYWJjIFJJRyJbNSwgNV0KKyJaUUIgYWJjIFJJ
RyJbNiwgNl0KKyJaUUIgYWJjIFJJRyJbNywgN10KKyJaUUIgYWJjIFJJRyJbOCwgOF0KKyJaUUIg
YWJjIFJJRyJbMTAsIDEwXQorIlpRQiBhYmMgUklHIls5LCA5XQorIlpRQiBhYmMgUklHIlsxMSwg
MTFdCitNb3ZlIGxlZnQgYnkgb25lIHdvcmQKKyJaUUIgYWJjIFJJRyJbMTEsIDRdCisiWlFCIGFi
YyBSSUciWzksIDldCisiWlFCIGFiYyBSSUciWzEwLCAxMF0KKyJaUUIgYWJjIFJJRyJbOCwgNF0K
KyJaUUIgYWJjIFJJRyJbNywgN10KKyJaUUIgYWJjIFJJRyJbNiwgNl0KKyJaUUIgYWJjIFJJRyJb
NSwgNV0KKyJaUUIgYWJjIFJJRyJbNCwgNF0KKyJaUUIgYWJjIFJJRyJbMywgM10KKyJaUUIgYWJj
IFJJRyJbMSwgMV0KKyJaUUIgYWJjIFJJRyJbMiwgMl0KKyJaUUIgYWJjIFJJRyJbMCwgMF0KK01v
dmUgbGVmdCBieSBvbmUgd29yZAorIlpRQiBhYmMgUklHIlswLCAwXQorIlpRQiBhYmMgUklHIlsx
LCAxXQorIlpRQiBhYmMgUklHIlsyLCAyXQorIlpRQiBhYmMgUklHIlszLCAzXQorIlpRQiBhYmMg
UklHIls0LCA0XQorIlpRQiBhYmMgUklHIls2LCA2XQorIlpRQiBhYmMgUklHIls1LCA1XQorIlpR
QiBhYmMgUklHIls3LCA3XQorIlpRQiBhYmMgUklHIls4LCA4XQorIlpRQiBhYmMgUklHIls5LCA5
XQorIlpRQiBhYmMgUklHIlsxMCwgMTBdCisiWlFCIGFiYyBSSUciWzExLCAxMV0KK01vdmUgcmln
aHQgYnkgb25lIHdvcmQKKyJaUUIgYWJjIFJJRyJbMTEsIDhdCisiWlFCIGFiYyBSSUciWzEwLCAx
MF0KKyJaUUIgYWJjIFJJRyJbOSwgOV0KKyJaUUIgYWJjIFJJRyJbOCwgOF0KKyJaUUIgYWJjIFJJ
RyJbNywgMF0KKyJaUUIgYWJjIFJJRyJbNSwgNV0KKyJaUUIgYWJjIFJJRyJbNiwgNl0KKyJaUUIg
YWJjIFJJRyJbNCwgMF0KKyJaUUIgYWJjIFJJRyJbMywgM10KKyJaUUIgYWJjIFJJRyJbMiwgMl0K
KyJaUUIgYWJjIFJJRyJbMSwgMV0KKyJaUUIgYWJjIFJJRyJbMCwgMF0KK1Rlc3QgNiwgTFRSOgor
ICBNb3ZpbmcgcmlnaHQ6IE1vdmUgcmlnaHQgYnkgb25lIHdvcmQKKyJhYmMgWlpaIGRlZiAiWzAs
IDBdCisiYWJjIFpaWiBkZWYgIlsxLCAxXQorImFiYyBaWlogZGVmICJbMiwgMl0KKyJhYmMgWlpa
IGRlZiAiWzMsIDNdCisiYWJjIFpaWiBkZWYgIls0LCA0XQorImFiYyBaWlogZGVmICJbNiwgNl0K
KyJhYmMgWlpaIGRlZiAiWzUsIDVdCisiYWJjIFpaWiBkZWYgIls3LCA3XQorImFiYyBaWlogZGVm
ICJbOCwgOF0KKyJhYmMgWlpaIGRlZiAiWzksIDldCisiYWJjIFpaWiBkZWYgIlsxMCwgMTBdCisi
YWJjIFpaWiBkZWYgIlsxMSwgMTFdCisiYWJjIFpaWiBkZWYgIlsxMiwgMTJdCisiWlFCIGFiYyBS
SUciWzIsIDJdCisiWlFCIGFiYyBSSUciWzEsIDFdCisiWlFCIGFiYyBSSUciWzMsIDNdCisiWlFC
IGFiYyBSSUciWzQsIDRdCisiWlFCIGFiYyBSSUciWzUsIDVdCisiWlFCIGFiYyBSSUciWzYsIDZd
CisiWlFCIGFiYyBSSUciWzcsIDddCisiWlFCIGFiYyBSSUciWzgsIDhdCisiWlFCIGFiYyBSSUci
WzEwLCAxMF0KKyJaUUIgYWJjIFJJRyJbOSwgOV0KKyJaUUIgYWJjIFJJRyJbMTEsIDExXQorIiAg
dXZ3IEdHRyB4eXoiWzEsIDFdCisiICB1dncgR0dHIHh5eiJbMywgM10KKyIgIHV2dyBHR0cgeHl6
Ils0LCA0XQorIiAgdXZ3IEdHRyB4eXoiWzUsIDVdCisiICB1dncgR0dHIHh5eiJbNiwgNl0KKyIg
IHV2dyBHR0cgeHl6Ils4LCA4XQorIiAgdXZ3IEdHRyB4eXoiWzcsIDddCisiICB1dncgR0dHIHh5
eiJbOSwgOV0KKyIgIHV2dyBHR0cgeHl6IlsxMCwgMTBdCisiICB1dncgR0dHIHh5eiJbMTEsIDEx
XQorIiAgdXZ3IEdHRyB4eXoiWzEyLCAxMl0KKyIgIHV2dyBHR0cgeHl6IlsxMywgMTNdCitNb3Zl
IGxlZnQgYnkgb25lIHdvcmQKKyIgIHV2dyBHR0cgeHl6IlsxMywgMTBdCisiICB1dncgR0dHIHh5
eiJbMTIsIDEyXQorIiAgdXZ3IEdHRyB4eXoiWzExLCAxMV0KKyIgIHV2dyBHR0cgeHl6IlsxMCwg
MTBdCisiICB1dncgR0dHIHh5eiJbOSwgMV0KKyIgIHV2dyBHR0cgeHl6Ils3LCA3XQorIiAgdXZ3
IEdHRyB4eXoiWzgsIDhdCisiICB1dncgR0dHIHh5eiJbNiwgMV0KKyIgIHV2dyBHR0cgeHl6Ils1
LCA1XQorIiAgdXZ3IEdHRyB4eXoiWzQsIDRdCisiICB1dncgR0dHIHh5eiJbMywgM10KKyIgIHV2
dyBHR0cgeHl6IlsxXSwgIlpRQiBhYmMgUklHIls0XQorIlpRQiBhYmMgUklHIlsxMSwgNF0KKyJa
UUIgYWJjIFJJRyJbOSwgOV0KKyJaUUIgYWJjIFJJRyJbMTAsIDEwXQorIlpRQiBhYmMgUklHIls4
LCA0XQorIlpRQiBhYmMgUklHIls3LCA3XQorIlpRQiBhYmMgUklHIls2LCA2XQorIlpRQiBhYmMg
UklHIls1LCA1XQorIlpRQiBhYmMgUklHIls0LCA0XQorIlpRQiBhYmMgUklHIlszXSwgImFiYyBa
WlogZGVmICJbOF0KKyJaUUIgYWJjIFJJRyJbMSwgMV0KKyJaUUIgYWJjIFJJRyJbMiwgMl0KKyJh
YmMgWlpaIGRlZiAiWzEyLCA4XQorImFiYyBaWlogZGVmICJbMTEsIDExXQorImFiYyBaWlogZGVm
ICJbMTAsIDEwXQorImFiYyBaWlogZGVmICJbOSwgOV0KKyJhYmMgWlpaIGRlZiAiWzgsIDhdCisi
YWJjIFpaWiBkZWYgIls3LCAwXQorImFiYyBaWlogZGVmICJbNSwgNV0KKyJhYmMgWlpaIGRlZiAi
WzYsIDZdCisiYWJjIFpaWiBkZWYgIls0LCAwXQorImFiYyBaWlogZGVmICJbMywgM10KKyJhYmMg
WlpaIGRlZiAiWzIsIDJdCisiYWJjIFpaWiBkZWYgIlsxLCAxXQorImFiYyBaWlogZGVmICJbMCwg
MF0KK01vdmUgbGVmdCBieSBvbmUgd29yZAorImFiYyBaWlogZGVmICJbMCwgMF0KKyJhYmMgWlpa
IGRlZiAiWzIsIDJdCisiYWJjIFpaWiBkZWYgIlsxLCAxXQorImFiYyBaWlogZGVmICJbMywgM10K
KyJhYmMgWlpaIGRlZiAiWzQsIDRdCisiYWJjIFpaWiBkZWYgIls1LCA1XQorImFiYyBaWlogZGVm
ICJbNiwgNl0KKyJhYmMgWlpaIGRlZiAiWzcsIDddCisiYWJjIFpaWiBkZWYgIls4LCA4XQorImFi
YyBaWlogZGVmICJbMTAsIDEwXQorImFiYyBaWlogZGVmICJbOSwgOV0KKyJhYmMgWlpaIGRlZiAi
WzExLCAxMV0KKyJhYmMgWlpaIGRlZiAiWzEyLCAxMl0KKyJaUUIgYWJjIFJJRyJbMSwgMV0KKyJa
UUIgYWJjIFJJRyJbMiwgMl0KKyJaUUIgYWJjIFJJRyJbMywgM10KKyJaUUIgYWJjIFJJRyJbNCwg
NF0KKyJaUUIgYWJjIFJJRyJbNiwgNl0KKyJaUUIgYWJjIFJJRyJbNSwgNV0KKyJaUUIgYWJjIFJJ
RyJbNywgN10KKyJaUUIgYWJjIFJJRyJbOCwgOF0KKyJaUUIgYWJjIFJJRyJbOSwgOV0KKyJaUUIg
YWJjIFJJRyJbMTAsIDEwXQorIlpRQiBhYmMgUklHIlsxMSwgMTFdCisiICB1dncgR0dHIHh5eiJb
MSwgMV0KKyIgIHV2dyBHR0cgeHl6Ils0LCA0XQorIiAgdXZ3IEdHRyB4eXoiWzMsIDNdCisiICB1
dncgR0dHIHh5eiJbNSwgNV0KKyIgIHV2dyBHR0cgeHl6Ils2LCA2XQorIiAgdXZ3IEdHRyB4eXoi
WzcsIDddCisiICB1dncgR0dHIHh5eiJbOCwgOF0KKyIgIHV2dyBHR0cgeHl6Ils5LCA5XQorIiAg
dXZ3IEdHRyB4eXoiWzEwLCAxMF0KKyIgIHV2dyBHR0cgeHl6IlsxMiwgMTJdCisiICB1dncgR0dH
IHh5eiJbMTEsIDExXQorIiAgdXZ3IEdHRyB4eXoiWzEzLCAxM10KK01vdmUgcmlnaHQgYnkgb25l
IHdvcmQKKyIgIHV2dyBHR0cgeHl6IlsxMywgNl0KKyIgIHV2dyBHR0cgeHl6IlsxMSwgMTFdCisi
ICB1dncgR0dHIHh5eiJbMTIsIDEyXQorIiAgdXZ3IEdHRyB4eXoiWzEwLCA2XQorIiAgdXZ3IEdH
RyB4eXoiWzksIDldCisiICB1dncgR0dHIHh5eiJbOCwgOF0KKyIgIHV2dyBHR0cgeHl6Ils3LCA3
XQorIiAgdXZ3IEdHRyB4eXoiWzYsIDZdCisiICB1dncgR0dHIHh5eiJbNSwgMV0KKyIgIHV2dyBH
R0cgeHl6IlszLCAzXQorIiAgdXZ3IEdHRyB4eXoiWzQsIDRdCisiICB1dncgR0dHIHh5eiJbMV0s
ICJaUUIgYWJjIFJJRyJbMTFdCisiWlFCIGFiYyBSSUciWzExLCA4XQorIlpRQiBhYmMgUklHIlsx
MCwgMTBdCisiWlFCIGFiYyBSSUciWzksIDldCisiWlFCIGFiYyBSSUciWzgsIDhdCisiWlFCIGFi
YyBSSUciWzddLCAiYWJjIFpaWiBkZWYgIlsxMl0KKyJaUUIgYWJjIFJJRyJbNSwgNV0KKyJaUUIg
YWJjIFJJRyJbNiwgNl0KKyJaUUIgYWJjIFJJRyJbNF0sICJhYmMgWlpaIGRlZiAiWzEyXQorIlpR
QiBhYmMgUklHIlszLCAzXQorIlpRQiBhYmMgUklHIlsyLCAyXQorIlpRQiBhYmMgUklHIlsxLCAx
XQorImFiYyBaWlogZGVmICJbMTIsIDRdCisiYWJjIFpaWiBkZWYgIlsxMSwgNF0KKyJhYmMgWlpa
IGRlZiAiWzksIDldCisiYWJjIFpaWiBkZWYgIlsxMCwgMTBdCisiYWJjIFpaWiBkZWYgIls4LCA0
XQorImFiYyBaWlogZGVmICJbNywgN10KKyJhYmMgWlpaIGRlZiAiWzYsIDZdCisiYWJjIFpaWiBk
ZWYgIls1LCA1XQorImFiYyBaWlogZGVmICJbNCwgNF0KKyJhYmMgWlpaIGRlZiAiWzMsIDNdCisi
YWJjIFpaWiBkZWYgIlsxLCAxXQorImFiYyBaWlogZGVmICJbMiwgMl0KKyJhYmMgWlpaIGRlZiAi
WzAsIDBdCitUZXN0IDcsIExUUjoKKyAgTW92aW5nIHJpZ2h0OiBNb3ZlIHJpZ2h0IGJ5IG9uZSB3
b3JkCisiYWJjIFpaWiBkZWYiWzAsIDBdCisiYWJjIFpaWiBkZWYiWzEsIDFdCisiYWJjIFpaWiBk
ZWYiWzIsIDJdCisiYWJjIFpaWiBkZWYiWzMsIDNdCisiYWJjIFpaWiBkZWYiWzQsIDRdCisiYWJj
IFpaWiBkZWYiWzYsIDZdCisiYWJjIFpaWiBkZWYiWzUsIDVdCisiYWJjIFpaWiBkZWYiWzcsIDdd
CisiYWJjIFpaWiBkZWYiWzgsIDhdCisiYWJjIFpaWiBkZWYiWzksIDldCisiYWJjIFpaWiBkZWYi
WzEwLCAxMF0KKyJhYmMgWlpaIGRlZiJbMTEsIDExXQorIndoYXN0ZXZlciBaUUIgYWJjIFJJRyJb
MSwgMV0KKyJ3aGFzdGV2ZXIgWlFCIGFiYyBSSUciWzIsIDJdCisid2hhc3RldmVyIFpRQiBhYmMg
UklHIlszLCAzXQorIndoYXN0ZXZlciBaUUIgYWJjIFJJRyJbNCwgNF0KKyJ3aGFzdGV2ZXIgWlFC
IGFiYyBSSUciWzUsIDVdCisid2hhc3RldmVyIFpRQiBhYmMgUklHIls2LCA2XQorIndoYXN0ZXZl
ciBaUUIgYWJjIFJJRyJbNywgN10KKyJ3aGFzdGV2ZXIgWlFCIGFiYyBSSUciWzgsIDhdCisid2hh
c3RldmVyIFpRQiBhYmMgUklHIls5LCA5XQorIndoYXN0ZXZlciBaUUIgYWJjIFJJRyJbMTAsIDEw
XQorIndoYXN0ZXZlciBaUUIgYWJjIFJJRyJbMTIsIDEyXQorIndoYXN0ZXZlciBaUUIgYWJjIFJJ
RyJbMTEsIDExXQorIndoYXN0ZXZlciBaUUIgYWJjIFJJRyJbMTMsIDEzXQorIndoYXN0ZXZlciBa
UUIgYWJjIFJJRyJbMTQsIDE0XQorIndoYXN0ZXZlciBaUUIgYWJjIFJJRyJbMTUsIDE1XQorIndo
YXN0ZXZlciBaUUIgYWJjIFJJRyJbMTYsIDE2XQorIndoYXN0ZXZlciBaUUIgYWJjIFJJRyJbMTcs
IDE3XQorIndoYXN0ZXZlciBaUUIgYWJjIFJJRyJbMTgsIDE4XQorIndoYXN0ZXZlciBaUUIgYWJj
IFJJRyJbMjAsIDIwXQorIndoYXN0ZXZlciBaUUIgYWJjIFJJRyJbMTksIDE5XQorIndoYXN0ZXZl
ciBaUUIgYWJjIFJJRyJbMjEsIDIxXQorIiB1dncgR0dHIHh5eiJbMSwgMV0KKyIgdXZ3IEdHRyB4
eXoiWzIsIDJdCisiIHV2dyBHR0cgeHl6IlszLCAzXQorIiB1dncgR0dHIHh5eiJbNCwgNF0KKyIg
dXZ3IEdHRyB4eXoiWzUsIDVdCisiIHV2dyBHR0cgeHl6Ils3LCA3XQorIiB1dncgR0dHIHh5eiJb
NiwgNl0KKyIgdXZ3IEdHRyB4eXoiWzgsIDhdCisiIHV2dyBHR0cgeHl6Ils5LCA5XQorIiB1dncg
R0dHIHh5eiJbMTAsIDEwXQorIiB1dncgR0dHIHh5eiJbMTEsIDExXQorIiB1dncgR0dHIHh5eiJb
MTIsIDEyXQorTW92ZSBsZWZ0IGJ5IG9uZSB3b3JkCisiIHV2dyBHR0cgeHl6IlsxMiwgOV0KKyIg
dXZ3IEdHRyB4eXoiWzExLCAxMV0KKyIgdXZ3IEdHRyB4eXoiWzEwLCAxMF0KKyIgdXZ3IEdHRyB4
eXoiWzksIDldCisiIHV2dyBHR0cgeHl6Ils4LCAxXQorIiB1dncgR0dHIHh5eiJbNiwgNl0KKyIg
dXZ3IEdHRyB4eXoiWzcsIDddCisiIHV2dyBHR0cgeHl6Ils1LCAxXQorIiB1dncgR0dHIHh5eiJb
NCwgNF0KKyIgdXZ3IEdHRyB4eXoiWzMsIDNdCisiIHV2dyBHR0cgeHl6IlsyLCAyXQorIiB1dncg
R0dHIHh5eiJbMSwgMV0KKyJ3aGFzdGV2ZXIgWlFCIGFiYyBSSUciWzIxLCAxNF0KKyJ3aGFzdGV2
ZXIgWlFCIGFiYyBSSUciWzE5LCAxOV0KKyJ3aGFzdGV2ZXIgWlFCIGFiYyBSSUciWzIwLCAyMF0K
KyJ3aGFzdGV2ZXIgWlFCIGFiYyBSSUciWzE4LCAxNF0KKyJ3aGFzdGV2ZXIgWlFCIGFiYyBSSUci
WzE3LCAxN10KKyJ3aGFzdGV2ZXIgWlFCIGFiYyBSSUciWzE2LCAxNl0KKyJ3aGFzdGV2ZXIgWlFC
IGFiYyBSSUciWzE1LCAxNV0KKyJ3aGFzdGV2ZXIgWlFCIGFiYyBSSUciWzE0LCAxNF0KKyJ3aGFz
dGV2ZXIgWlFCIGFiYyBSSUciWzEzXSwgImFiYyBaWlogZGVmIls4XQorIndoYXN0ZXZlciBaUUIg
YWJjIFJJRyJbMTEsIDExXQorIndoYXN0ZXZlciBaUUIgYWJjIFJJRyJbMTIsIDEyXQorIndoYXN0
ZXZlciBaUUIgYWJjIFJJRyJbMTBdLCAiYWJjIFpaWiBkZWYiWzhdCisid2hhc3RldmVyIFpRQiBh
YmMgUklHIls5LCA5XQorIndoYXN0ZXZlciBaUUIgYWJjIFJJRyJbOCwgOF0KKyJ3aGFzdGV2ZXIg
WlFCIGFiYyBSSUciWzcsIDddCisid2hhc3RldmVyIFpRQiBhYmMgUklHIls2LCA2XQorIndoYXN0
ZXZlciBaUUIgYWJjIFJJRyJbNSwgNV0KKyJ3aGFzdGV2ZXIgWlFCIGFiYyBSSUciWzQsIDRdCisi
d2hhc3RldmVyIFpRQiBhYmMgUklHIlszLCAzXQorIndoYXN0ZXZlciBaUUIgYWJjIFJJRyJbMiwg
Ml0KKyJ3aGFzdGV2ZXIgWlFCIGFiYyBSSUciWzEsIDFdCisiYWJjIFpaWiBkZWYiWzExLCA4XQor
ImFiYyBaWlogZGVmIlsxMCwgMTBdCisiYWJjIFpaWiBkZWYiWzksIDldCisiYWJjIFpaWiBkZWYi
WzgsIDhdCisiYWJjIFpaWiBkZWYiWzcsIDBdCisiYWJjIFpaWiBkZWYiWzUsIDVdCisiYWJjIFpa
WiBkZWYiWzYsIDZdCisiYWJjIFpaWiBkZWYiWzQsIDBdCisiYWJjIFpaWiBkZWYiWzMsIDNdCisi
YWJjIFpaWiBkZWYiWzIsIDJdCisiYWJjIFpaWiBkZWYiWzEsIDFdCisiYWJjIFpaWiBkZWYiWzAs
IDBdCitNb3ZlIGxlZnQgYnkgb25lIHdvcmQKKyJhYmMgWlpaIGRlZiJbMCwgMF0KKyJhYmMgWlpa
IGRlZiJbMiwgMl0KKyJhYmMgWlpaIGRlZiJbMSwgMV0KKyJhYmMgWlpaIGRlZiJbMywgM10KKyJh
YmMgWlpaIGRlZiJbNCwgNF0KKyJhYmMgWlpaIGRlZiJbNSwgNV0KKyJhYmMgWlpaIGRlZiJbNiwg
Nl0KKyJhYmMgWlpaIGRlZiJbNywgN10KKyJhYmMgWlpaIGRlZiJbOCwgOF0KKyJ3aGFzdGV2ZXIg
WlFCIGFiYyBSSUciWzgsIDhdCisid2hhc3RldmVyIFpRQiBhYmMgUklHIls3LCA3XQorIndoYXN0
ZXZlciBaUUIgYWJjIFJJRyJbNiwgNl0KKyJ3aGFzdGV2ZXIgWlFCIGFiYyBSSUciWzUsIDVdCisi
d2hhc3RldmVyIFpRQiBhYmMgUklHIls0LCA0XQorIndoYXN0ZXZlciBaUUIgYWJjIFJJRyJbMywg
M10KKyJ3aGFzdGV2ZXIgWlFCIGFiYyBSSUciWzIsIDJdCisid2hhc3RldmVyIFpRQiBhYmMgUklH
IlsxLCAxXQorImFiYyBaWlogZGVmIlsxMSwgMTFdCisiYWJjIFpaWiBkZWYiWzEwLCAxMF0KKyJh
YmMgWlpaIGRlZiJbOSwgOV0KKyJ3aGFzdGV2ZXIgWlFCIGFiYyBSSUciWzksIDldCisid2hhc3Rl
dmVyIFpRQiBhYmMgUklHIlsxMCwgMTBdCisid2hhc3RldmVyIFpRQiBhYmMgUklHIlsxMSwgMTFd
Cisid2hhc3RldmVyIFpRQiBhYmMgUklHIlsxMiwgMTJdCisid2hhc3RldmVyIFpRQiBhYmMgUklH
IlsxMywgMTNdCisid2hhc3RldmVyIFpRQiBhYmMgUklHIlsxNCwgMTRdCisid2hhc3RldmVyIFpR
QiBhYmMgUklHIlsxNiwgMTZdCisid2hhc3RldmVyIFpRQiBhYmMgUklHIlsxNSwgMTVdCisid2hh
c3RldmVyIFpRQiBhYmMgUklHIlsxNywgMTddCisid2hhc3RldmVyIFpRQiBhYmMgUklHIlsxOCwg
MThdCisid2hhc3RldmVyIFpRQiBhYmMgUklHIlsxOSwgMTldCisid2hhc3RldmVyIFpRQiBhYmMg
UklHIlsyMCwgMjBdCisid2hhc3RldmVyIFpRQiBhYmMgUklHIlsyMSwgMjFdCisiIHV2dyBHR0cg
eHl6IlsxLCAxXQorIiB1dncgR0dHIHh5eiJbMywgM10KKyIgdXZ3IEdHRyB4eXoiWzIsIDJdCisi
IHV2dyBHR0cgeHl6Ils0LCA0XQorIiB1dncgR0dHIHh5eiJbNSwgNV0KKyIgdXZ3IEdHRyB4eXoi
WzYsIDZdCisiIHV2dyBHR0cgeHl6Ils3LCA3XQorIiB1dncgR0dHIHh5eiJbOCwgOF0KKyIgdXZ3
IEdHRyB4eXoiWzksIDldCisiIHV2dyBHR0cgeHl6IlsxMSwgMTFdCisiIHV2dyBHR0cgeHl6Ilsx
MCwgMTBdCisiIHV2dyBHR0cgeHl6IlsxMiwgMTJdCitNb3ZlIHJpZ2h0IGJ5IG9uZSB3b3JkCisi
IHV2dyBHR0cgeHl6IlsxMiwgNV0KKyIgdXZ3IEdHRyB4eXoiWzEwLCAxMF0KKyIgdXZ3IEdHRyB4
eXoiWzExLCAxMV0KKyIgdXZ3IEdHRyB4eXoiWzksIDVdCisiIHV2dyBHR0cgeHl6Ils4LCA4XQor
IiB1dncgR0dHIHh5eiJbNywgN10KKyIgdXZ3IEdHRyB4eXoiWzYsIDZdCisiIHV2dyBHR0cgeHl6
Ils1LCA1XQorIiB1dncgR0dHIHh5eiJbNF0sICJ3aGFzdGV2ZXIgWlFCIGFiYyBSSUciWzIxXQor
IiB1dncgR0dHIHh5eiJbMiwgMl0KKyIgdXZ3IEdHRyB4eXoiWzMsIDNdCisiIHV2dyBHR0cgeHl6
IlsxXSwgIndoYXN0ZXZlciBaUUIgYWJjIFJJRyJbMjFdCisid2hhc3RldmVyIFpRQiBhYmMgUklH
IlsyMSwgMThdCisid2hhc3RldmVyIFpRQiBhYmMgUklHIlsyMCwgMjBdCisid2hhc3RldmVyIFpR
QiBhYmMgUklHIlsxOSwgMTldCisid2hhc3RldmVyIFpRQiBhYmMgUklHIlsxOCwgMThdCisid2hh
c3RldmVyIFpRQiBhYmMgUklHIlsxNywgMTBdCisid2hhc3RldmVyIFpRQiBhYmMgUklHIlsxNSwg
MTVdCisid2hhc3RldmVyIFpRQiBhYmMgUklHIlsxNiwgMTZdCisid2hhc3RldmVyIFpRQiBhYmMg
UklHIlsxNCwgMTBdCisid2hhc3RldmVyIFpRQiBhYmMgUklHIlsxMywgMTNdCisid2hhc3RldmVy
IFpRQiBhYmMgUklHIlsxMiwgMTJdCisid2hhc3RldmVyIFpRQiBhYmMgUklHIlsxMSwgMTFdCisi
d2hhc3RldmVyIFpRQiBhYmMgUklHIlsxMCwgMTBdCisid2hhc3RldmVyIFpRQiBhYmMgUklHIls5
XSwgImFiYyBaWlogZGVmIls0XQorImFiYyBaWlogZGVmIls5LCA5XQorImFiYyBaWlogZGVmIlsx
MCwgMTBdCisiYWJjIFpaWiBkZWYiWzExLCA0XQorIndoYXN0ZXZlciBaUUIgYWJjIFJJRyJbMSwg
MV0KKyJ3aGFzdGV2ZXIgWlFCIGFiYyBSSUciWzIsIDJdCisid2hhc3RldmVyIFpRQiBhYmMgUklH
IlszLCAzXQorIndoYXN0ZXZlciBaUUIgYWJjIFJJRyJbNCwgNF0KKyJ3aGFzdGV2ZXIgWlFCIGFi
YyBSSUciWzUsIDVdCisid2hhc3RldmVyIFpRQiBhYmMgUklHIls2LCA2XQorIndoYXN0ZXZlciBa
UUIgYWJjIFJJRyJbNywgN10KKyJ3aGFzdGV2ZXIgWlFCIGFiYyBSSUciWzgsIDhdCisiYWJjIFpa
WiBkZWYiWzgsIDRdCisiYWJjIFpaWiBkZWYiWzcsIDddCisiYWJjIFpaWiBkZWYiWzYsIDZdCisi
YWJjIFpaWiBkZWYiWzUsIDVdCisiYWJjIFpaWiBkZWYiWzQsIDRdCisiYWJjIFpaWiBkZWYiWzMs
IDNdCisiYWJjIFpaWiBkZWYiWzEsIDFdCisiYWJjIFpaWiBkZWYiWzIsIDJdCisiYWJjIFpaWiBk
ZWYiWzAsIDBdCitUZXN0IDgsIExUUjoKKyAgTW92aW5nIHJpZ2h0OiBNb3ZlIHJpZ2h0IGJ5IG9u
ZSB3b3JkCisiYWJjIFpaWiBkZWYgIlswLCAwXQorImFiYyBaWlogZGVmICJbMSwgMV0KKyJhYmMg
WlpaIGRlZiAiWzIsIDJdCisiYWJjIFpaWiBkZWYgIlszLCAzXQorImFiYyBaWlogZGVmICJbNCwg
NF0KKyJhYmMgWlpaIGRlZiAiWzYsIDZdCisiYWJjIFpaWiBkZWYgIls1LCA1XQorImFiYyBaWlog
ZGVmICJbNywgN10KKyJhYmMgWlpaIGRlZiAiWzgsIDhdCisiYWJjIFpaWiBkZWYgIls5LCA5XQor
ImFiYyBaWlogZGVmICJbMTAsIDEwXQorImFiYyBaWlogZGVmICJbMTEsIDExXQorImFiYyBaWlog
ZGVmICJbMTIsIDEyXQorIlpRQiBvcHEgUklHIlsxMCwgMTBdCisiWlFCIG9wcSBSSUciWzksIDld
CisiWlFCIG9wcSBSSUciWzgsIDhdCisiWlFCIG9wcSBSSUciWzQsIDRdCisiWlFCIG9wcSBSSUci
WzUsIDVdCisiWlFCIG9wcSBSSUciWzYsIDZdCisiWlFCIG9wcSBSSUciWzcsIDddCisiWlFCIG9w
cSBSSUciWzMsIDNdCisiWlFCIG9wcSBSSUciWzIsIDJdCisiWlFCIG9wcSBSSUciWzEsIDFdCisi
WlFCIG9wcSBSSUciWzExLCAxMV0KKyIgIHV2dyBaWlogeHl6IlsxLCAxXQorIiAgdXZ3IFpaWiB4
eXoiWzMsIDNdCisiICB1dncgWlpaIHh5eiJbNCwgNF0KKyIgIHV2dyBaWlogeHl6Ils1LCA1XQor
IiAgdXZ3IFpaWiB4eXoiWzYsIDZdCisiICB1dncgWlpaIHh5eiJbOCwgOF0KKyIgIHV2dyBaWlog
eHl6Ils3LCA3XQorIiAgdXZ3IFpaWiB4eXoiWzksIDldCisiICB1dncgWlpaIHh5eiJbMTAsIDEw
XQorIiAgdXZ3IFpaWiB4eXoiWzExLCAxMV0KKyIgIHV2dyBaWlogeHl6IlsxMiwgMTJdCisiICB1
dncgWlpaIHh5eiJbMTMsIDEzXQorTW92ZSBsZWZ0IGJ5IG9uZSB3b3JkCisiICB1dncgWlpaIHh5
eiJbMTMsIDEwXQorIiAgdXZ3IFpaWiB4eXoiWzEyLCAxMl0KKyIgIHV2dyBaWlogeHl6IlsxMSwg
MTFdCisiICB1dncgWlpaIHh5eiJbMTAsIDEwXQorIiAgdXZ3IFpaWiB4eXoiWzksIDFdCisiICB1
dncgWlpaIHh5eiJbNywgN10KKyIgIHV2dyBaWlogeHl6Ils4LCA4XQorIiAgdXZ3IFpaWiB4eXoi
WzYsIDFdCisiICB1dncgWlpaIHh5eiJbNSwgNV0KKyIgIHV2dyBaWlogeHl6Ils0LCA0XQorIiAg
dXZ3IFpaWiB4eXoiWzMsIDNdCisiICB1dncgWlpaIHh5eiJbMV0sICJaUUIgb3BxIFJJRyJbN10K
KyJaUUIgb3BxIFJJRyJbMTEsIDddCisiWlFCIG9wcSBSSUciWzEsIDFdCisiWlFCIG9wcSBSSUci
WzIsIDJdCisiWlFCIG9wcSBSSUciWzMsIDNdCisiWlFCIG9wcSBSSUciWzcsIDRdCisiWlFCIG9w
cSBSSUciWzYsIDZdCisiWlFCIG9wcSBSSUciWzUsIDVdCisiWlFCIG9wcSBSSUciWzRdLCAiYWJj
IFpaWiBkZWYgIls4XQorIlpRQiBvcHEgUklHIls4LCA4XQorIlpRQiBvcHEgUklHIls5LCA5XQor
IlpRQiBvcHEgUklHIlsxMCwgMTBdCisiYWJjIFpaWiBkZWYgIlsxMiwgOF0KKyJhYmMgWlpaIGRl
ZiAiWzExLCAxMV0KKyJhYmMgWlpaIGRlZiAiWzEwLCAxMF0KKyJhYmMgWlpaIGRlZiAiWzksIDld
CisiYWJjIFpaWiBkZWYgIls4LCA4XQorImFiYyBaWlogZGVmICJbNywgMF0KKyJhYmMgWlpaIGRl
ZiAiWzUsIDVdCisiYWJjIFpaWiBkZWYgIls2LCA2XQorImFiYyBaWlogZGVmICJbNCwgMF0KKyJh
YmMgWlpaIGRlZiAiWzMsIDNdCisiYWJjIFpaWiBkZWYgIlsyLCAyXQorImFiYyBaWlogZGVmICJb
MSwgMV0KKyJhYmMgWlpaIGRlZiAiWzAsIDBdCitNb3ZlIGxlZnQgYnkgb25lIHdvcmQKKyJhYmMg
WlpaIGRlZiAiWzAsIDBdCisiYWJjIFpaWiBkZWYgIlsyLCAyXQorImFiYyBaWlogZGVmICJbMSwg
MV0KKyJhYmMgWlpaIGRlZiAiWzMsIDNdCisiYWJjIFpaWiBkZWYgIls0LCA0XQorImFiYyBaWlog
ZGVmICJbNSwgNV0KKyJhYmMgWlpaIGRlZiAiWzYsIDZdCisiYWJjIFpaWiBkZWYgIls3LCA3XQor
ImFiYyBaWlogZGVmICJbOCwgOF0KKyJhYmMgWlpaIGRlZiAiWzEwLCAxMF0KKyJhYmMgWlpaIGRl
ZiAiWzksIDldCisiYWJjIFpaWiBkZWYgIlsxMSwgMTFdCisiYWJjIFpaWiBkZWYgIlsxMiwgMTJd
CisiWlFCIG9wcSBSSUciWzEsIDFdCisiWlFCIG9wcSBSSUciWzIsIDJdCisiWlFCIG9wcSBSSUci
WzMsIDNdCisiWlFCIG9wcSBSSUciWzQsIDRdCisiWlFCIG9wcSBSSUciWzYsIDZdCisiWlFCIG9w
cSBSSUciWzUsIDVdCisiWlFCIG9wcSBSSUciWzcsIDddCisiWlFCIG9wcSBSSUciWzgsIDhdCisi
WlFCIG9wcSBSSUciWzksIDldCisiWlFCIG9wcSBSSUciWzEwLCAxMF0KKyJaUUIgb3BxIFJJRyJb
MTEsIDExXQorIiAgdXZ3IFpaWiB4eXoiWzEsIDFdCisiICB1dncgWlpaIHh5eiJbNCwgNF0KKyIg
IHV2dyBaWlogeHl6IlszLCAzXQorIiAgdXZ3IFpaWiB4eXoiWzUsIDVdCisiICB1dncgWlpaIHh5
eiJbNiwgNl0KKyIgIHV2dyBaWlogeHl6Ils3LCA3XQorIiAgdXZ3IFpaWiB4eXoiWzgsIDhdCisi
ICB1dncgWlpaIHh5eiJbOSwgOV0KKyIgIHV2dyBaWlogeHl6IlsxMCwgMTBdCisiICB1dncgWlpa
IHh5eiJbMTIsIDEyXQorIiAgdXZ3IFpaWiB4eXoiWzExLCAxMV0KKyIgIHV2dyBaWlogeHl6Ilsx
MywgMTNdCitNb3ZlIHJpZ2h0IGJ5IG9uZSB3b3JkCisiICB1dncgWlpaIHh5eiJbMTMsIDZdCisi
ICB1dncgWlpaIHh5eiJbMTEsIDExXQorIiAgdXZ3IFpaWiB4eXoiWzEyLCAxMl0KKyIgIHV2dyBa
WlogeHl6IlsxMCwgNl0KKyIgIHV2dyBaWlogeHl6Ils5LCA5XQorIiAgdXZ3IFpaWiB4eXoiWzgs
IDhdCisiICB1dncgWlpaIHh5eiJbNywgN10KKyIgIHV2dyBaWlogeHl6Ils2LCA2XQorIiAgdXZ3
IFpaWiB4eXoiWzUsIDFdCisiICB1dncgWlpaIHh5eiJbMywgM10KKyIgIHV2dyBaWlogeHl6Ils0
LCA0XQorIiAgdXZ3IFpaWiB4eXoiWzFdLCAiWlFCIG9wcSBSSUciWzExXQorIlpRQiBvcHEgUklH
IlsxMSwgOF0KKyJaUUIgb3BxIFJJRyJbMTAsIDEwXQorIlpRQiBvcHEgUklHIls5LCA5XQorIlpR
QiBvcHEgUklHIls4LCA4XQorIlpRQiBvcHEgUklHIls3XSwgImFiYyBaWlogZGVmICJbMTJdCisi
WlFCIG9wcSBSSUciWzUsIDVdCisiWlFCIG9wcSBSSUciWzYsIDZdCisiWlFCIG9wcSBSSUciWzRd
LCAiYWJjIFpaWiBkZWYgIlsxMl0KKyJaUUIgb3BxIFJJRyJbMywgM10KKyJaUUIgb3BxIFJJRyJb
MiwgMl0KKyJaUUIgb3BxIFJJRyJbMSwgMV0KKyJhYmMgWlpaIGRlZiAiWzEyLCA0XQorImFiYyBa
WlogZGVmICJbMTEsIDRdCisiYWJjIFpaWiBkZWYgIls5LCA5XQorImFiYyBaWlogZGVmICJbMTAs
IDEwXQorImFiYyBaWlogZGVmICJbOCwgNF0KKyJhYmMgWlpaIGRlZiAiWzcsIDddCisiYWJjIFpa
WiBkZWYgIls2LCA2XQorImFiYyBaWlogZGVmICJbNSwgNV0KKyJhYmMgWlpaIGRlZiAiWzQsIDRd
CisiYWJjIFpaWiBkZWYgIlszLCAzXQorImFiYyBaWlogZGVmICJbMSwgMV0KKyJhYmMgWlpaIGRl
ZiAiWzIsIDJdCisiYWJjIFpaWiBkZWYgIlswLCAwXQorVGVzdCA5LCBMVFI6CisgIE1vdmluZyBy
aWdodDogTW92ZSByaWdodCBieSBvbmUgd29yZAorImFiYyBaWlogZGVmICJbMCwgMF0KKyJhYmMg
WlpaIGRlZiAiWzEsIDFdCisiYWJjIFpaWiBkZWYgIlsyLCAyXQorImFiYyBaWlogZGVmICJbMywg
M10KKyJhYmMgWlpaIGRlZiAiWzQsIDRdCisiYWJjIFpaWiBkZWYgIls2LCA2XQorImFiYyBaWlog
ZGVmICJbNSwgNV0KKyJhYmMgWlpaIGRlZiAiWzcsIDddCisiYWJjIFpaWiBkZWYgIls4LCA4XQor
ImFiYyBaWlogZGVmICJbOSwgOV0KKyJhYmMgWlpaIGRlZiAiWzEwLCAxMF0KKyJhYmMgWlpaIGRl
ZiAiWzExLCAxMV0KKyJhYmMgWlpaIGRlZiAiWzEyLCAxMl0KKyJaUUIgIGFiYyBSSUciWzIsIDJd
CisiWlFCICBhYmMgUklHIlsxLCAxXQorIlpRQiAgYWJjIFJJRyJbMywgM10KKyJaUUIgIGFiYyBS
SUciWzQsIDRdCisiWlFCICBhYmMgUklHIls2LCA2XQorIlpRQiAgYWJjIFJJRyJbNywgN10KKyJa
UUIgIGFiYyBSSUciWzgsIDhdCisiWlFCICBhYmMgUklHIls5LCA5XQorIlpRQiAgYWJjIFJJRyJb
MTEsIDExXQorIlpRQiAgYWJjIFJJRyJbMTAsIDEwXQorIlpRQiAgYWJjIFJJRyJbMTIsIDEyXQor
IiAgdXZ3IEdHRyB4eXoiWzEsIDFdCisiICB1dncgR0dHIHh5eiJbMywgM10KKyIgIHV2dyBHR0cg
eHl6Ils0LCA0XQorIiAgdXZ3IEdHRyB4eXoiWzUsIDVdCisiICB1dncgR0dHIHh5eiJbNiwgNl0K
KyIgIHV2dyBHR0cgeHl6Ils4LCA4XQorIiAgdXZ3IEdHRyB4eXoiWzcsIDddCisiICB1dncgR0dH
IHh5eiJbOSwgOV0KKyIgIHV2dyBHR0cgeHl6IlsxMCwgMTBdCisiICB1dncgR0dHIHh5eiJbMTEs
IDExXQorIiAgdXZ3IEdHRyB4eXoiWzEyLCAxMl0KKyIgIHV2dyBHR0cgeHl6IlsxMywgMTNdCitN
b3ZlIGxlZnQgYnkgb25lIHdvcmQKKyIgIHV2dyBHR0cgeHl6IlsxMywgMTBdCisiICB1dncgR0dH
IHh5eiJbMTIsIDEyXQorIiAgdXZ3IEdHRyB4eXoiWzExLCAxMV0KKyIgIHV2dyBHR0cgeHl6Ilsx
MCwgMTBdCisiICB1dncgR0dHIHh5eiJbOSwgMV0KKyIgIHV2dyBHR0cgeHl6Ils3LCA3XQorIiAg
dXZ3IEdHRyB4eXoiWzgsIDhdCisiICB1dncgR0dHIHh5eiJbNiwgMV0KKyIgIHV2dyBHR0cgeHl6
Ils1LCA1XQorIiAgdXZ3IEdHRyB4eXoiWzQsIDRdCisiICB1dncgR0dHIHh5eiJbMywgM10KKyIg
IHV2dyBHR0cgeHl6IlsxXSwgIlpRQiAgYWJjIFJJRyJbNF0KKyJaUUIgIGFiYyBSSUciWzEyLCA0
XQorIlpRQiAgYWJjIFJJRyJbMTAsIDEwXQorIlpRQiAgYWJjIFJJRyJbMTEsIDExXQorIlpRQiAg
YWJjIFJJRyJbOSwgNF0KKyJaUUIgIGFiYyBSSUciWzgsIDhdCisiWlFCICBhYmMgUklHIls3LCA3
XQorIlpRQiAgYWJjIFJJRyJbNiwgNl0KKyJaUUIgIGFiYyBSSUciWzRdLCAiYWJjIFpaWiBkZWYg
Ils4XQorIlpRQiAgYWJjIFJJRyJbM10sICJhYmMgWlpaIGRlZiAiWzhdCisiWlFCICBhYmMgUklH
IlsxLCAxXQorIlpRQiAgYWJjIFJJRyJbMiwgMl0KKyJhYmMgWlpaIGRlZiAiWzEyLCA4XQorImFi
YyBaWlogZGVmICJbMTEsIDExXQorImFiYyBaWlogZGVmICJbMTAsIDEwXQorImFiYyBaWlogZGVm
ICJbOSwgOV0KKyJhYmMgWlpaIGRlZiAiWzgsIDhdCisiYWJjIFpaWiBkZWYgIls3LCAwXQorImFi
YyBaWlogZGVmICJbNSwgNV0KKyJhYmMgWlpaIGRlZiAiWzYsIDZdCisiYWJjIFpaWiBkZWYgIls0
LCAwXQorImFiYyBaWlogZGVmICJbMywgM10KKyJhYmMgWlpaIGRlZiAiWzIsIDJdCisiYWJjIFpa
WiBkZWYgIlsxLCAxXQorImFiYyBaWlogZGVmICJbMCwgMF0KK01vdmUgbGVmdCBieSBvbmUgd29y
ZAorImFiYyBaWlogZGVmICJbMCwgMF0KKyJhYmMgWlpaIGRlZiAiWzIsIDJdCisiYWJjIFpaWiBk
ZWYgIlsxLCAxXQorImFiYyBaWlogZGVmICJbMywgM10KKyJhYmMgWlpaIGRlZiAiWzQsIDRdCisi
YWJjIFpaWiBkZWYgIls1LCA1XQorImFiYyBaWlogZGVmICJbNiwgNl0KKyJhYmMgWlpaIGRlZiAi
WzcsIDddCisiYWJjIFpaWiBkZWYgIls4LCA4XQorIiAgdXZ3IEdHRyB4eXoiWzQsIDRdCisiICB1
dncgR0dHIHh5eiJbMywgM10KKyIgIHV2dyBHR0cgeHl6IlsxLCAxXQorIlpRQiAgYWJjIFJJRyJb
OSwgOV0KKyJaUUIgIGFiYyBSSUciWzEwLCAxMF0KKyJaUUIgIGFiYyBSSUciWzExLCAxMV0KKyJa
UUIgIGFiYyBSSUciWzEyLCAxMl0KKyJaUUIgIGFiYyBSSUciWzgsIDhdCisiWlFCICBhYmMgUklH
Ils3LCA3XQorIlpRQiAgYWJjIFJJRyJbNiwgNl0KKyJaUUIgIGFiYyBSSUciWzQsIDRdCisiYWJj
IFpaWiBkZWYgIlsxMiwgMTJdCisiWlFCICBhYmMgUklHIlsxLCAxXQorIlpRQiAgYWJjIFJJRyJb
MiwgMl0KKyJaUUIgIGFiYyBSSUciWzMsIDNdCisiYWJjIFpaWiBkZWYgIlsxMSwgMTFdCisiYWJj
IFpaWiBkZWYgIlsxMCwgMTBdCisiYWJjIFpaWiBkZWYgIls5LCA5XQorIiAgdXZ3IEdHRyB4eXoi
WzUsIDVdCisiICB1dncgR0dHIHh5eiJbNiwgNl0KKyIgIHV2dyBHR0cgeHl6Ils3LCA3XQorIiAg
dXZ3IEdHRyB4eXoiWzgsIDhdCisiICB1dncgR0dHIHh5eiJbOSwgOV0KKyIgIHV2dyBHR0cgeHl6
IlsxMCwgMTBdCisiICB1dncgR0dHIHh5eiJbMTIsIDEyXQorIiAgdXZ3IEdHRyB4eXoiWzExLCAx
MV0KKyIgIHV2dyBHR0cgeHl6IlsxMywgMTNdCitNb3ZlIHJpZ2h0IGJ5IG9uZSB3b3JkCisiICB1
dncgR0dHIHh5eiJbMTMsIDZdCisiICB1dncgR0dHIHh5eiJbMTEsIDExXQorIiAgdXZ3IEdHRyB4
eXoiWzEyLCAxMl0KKyIgIHV2dyBHR0cgeHl6IlsxMCwgNl0KKyIgIHV2dyBHR0cgeHl6Ils5LCA5
XQorIiAgdXZ3IEdHRyB4eXoiWzgsIDhdCisiICB1dncgR0dHIHh5eiJbNywgN10KKyIgIHV2dyBH
R0cgeHl6Ils2LCA2XQorIiAgdXZ3IEdHRyB4eXoiWzVdLCAiWlFCICBhYmMgUklHIlszXQorImFi
YyBaWlogZGVmICJbOSwgOV0KKyJhYmMgWlpaIGRlZiAiWzEwLCAxMF0KKyJhYmMgWlpaIGRlZiAi
WzExLCAxMV0KKyJaUUIgIGFiYyBSSUciWzNdLCAiYWJjIFpaWiBkZWYgIlsxMl0KKyJaUUIgIGFi
YyBSSUciWzIsIDJdCisiWlFCICBhYmMgUklHIlsxLCAxXQorImFiYyBaWlogZGVmICJbMTJdLCAi
WlFCICBhYmMgUklHIlsxMl0KKyJaUUIgIGFiYyBSSUciWzQsIDEyXQorIlpRQiAgYWJjIFJJRyJb
NiwgNl0KKyJaUUIgIGFiYyBSSUciWzcsIDddCisiWlFCICBhYmMgUklHIls4LCA4XQorIlpRQiAg
YWJjIFJJRyJbMTIsIDldCisiWlFCICBhYmMgUklHIlsxMSwgMTFdCisiWlFCICBhYmMgUklHIlsx
MCwgMTBdCisiWlFCICBhYmMgUklHIls5XSwgImFiYyBaWlogZGVmICJbNF0KKyIgIHV2dyBHR0cg
eHl6IlsxXSwgImFiYyBaWlogZGVmICJbNF0KKyIgIHV2dyBHR0cgeHl6IlszLCAzXQorIiAgdXZ3
IEdHRyB4eXoiWzQsIDRdCisiYWJjIFpaWiBkZWYgIls4LCA0XQorImFiYyBaWlogZGVmICJbNywg
N10KKyJhYmMgWlpaIGRlZiAiWzYsIDZdCisiYWJjIFpaWiBkZWYgIls1LCA1XQorImFiYyBaWlog
ZGVmICJbNCwgNF0KKyJhYmMgWlpaIGRlZiAiWzMsIDNdCisiYWJjIFpaWiBkZWYgIlsxLCAxXQor
ImFiYyBaWlogZGVmICJbMiwgMl0KKyJhYmMgWlpaIGRlZiAiWzAsIDBdCitUZXN0IDEwLCBMVFI6
CisgIE1vdmluZyByaWdodDogTW92ZSByaWdodCBieSBvbmUgd29yZAorImFiYyBaWlogZGVmICJb
MCwgMF0KKyJhYmMgWlpaIGRlZiAiWzEsIDFdCisiYWJjIFpaWiBkZWYgIlsyLCAyXQorImFiYyBa
WlogZGVmICJbMywgM10KKyJhYmMgWlpaIGRlZiAiWzQsIDRdCisiYWJjIFpaWiBkZWYgIls2LCA2
XQorImFiYyBaWlogZGVmICJbNSwgNV0KKyJhYmMgWlpaIGRlZiAiWzcsIDddCisiYWJjIFpaWiBk
ZWYgIls4LCA4XQorImFiYyBaWlogZGVmICJbOSwgOV0KKyJhYmMgWlpaIGRlZiAiWzEwLCAxMF0K
KyJhYmMgWlpaIGRlZiAiWzExLCAxMV0KKyJhYmMgWlpaIGRlZiAiWzEyLCAxMl0KKyJaUUIgYWJj
IFJJRyJbMiwgMl0KKyJaUUIgYWJjIFJJRyJbMSwgMV0KKyJaUUIgYWJjIFJJRyJbMywgM10KKyJa
UUIgYWJjIFJJRyJbNCwgNF0KKyJaUUIgYWJjIFJJRyJbNSwgNV0KKyJaUUIgYWJjIFJJRyJbNiwg
Nl0KKyJaUUIgYWJjIFJJRyJbNywgN10KKyJaUUIgYWJjIFJJRyJbOCwgOF0KKyJaUUIgYWJjIFJJ
RyJbMTAsIDEwXQorIlpRQiBhYmMgUklHIls5LCA5XQorIlpRQiBhYmMgUklHIlsxMSwgMTFdCisi
IHV2dyBHR0cgeHl6IlsxLCAxXQorIiB1dncgR0dHIHh5eiJbMiwgMl0KKyIgdXZ3IEdHRyB4eXoi
WzMsIDNdCisiIHV2dyBHR0cgeHl6Ils0LCA0XQorIiB1dncgR0dHIHh5eiJbNSwgNV0KKyIgdXZ3
IEdHRyB4eXoiWzcsIDddCisiIHV2dyBHR0cgeHl6Ils2LCA2XQorIiB1dncgR0dHIHh5eiJbOCwg
OF0KKyIgdXZ3IEdHRyB4eXoiWzksIDldCisiIHV2dyBHR0cgeHl6IlsxMCwgMTBdCisiIHV2dyBH
R0cgeHl6IlsxMSwgMTFdCisiIHV2dyBHR0cgeHl6IlsxMiwgMTJdCitNb3ZlIGxlZnQgYnkgb25l
IHdvcmQKKyIgdXZ3IEdHRyB4eXoiWzEyLCA5XQorIiB1dncgR0dHIHh5eiJbMTEsIDExXQorIiB1
dncgR0dHIHh5eiJbMTAsIDEwXQorIiB1dncgR0dHIHh5eiJbOSwgOV0KKyIgdXZ3IEdHRyB4eXoi
WzgsIDFdCisiIHV2dyBHR0cgeHl6Ils2LCA2XQorIiB1dncgR0dHIHh5eiJbNywgN10KKyIgdXZ3
IEdHRyB4eXoiWzUsIDFdCisiIHV2dyBHR0cgeHl6Ils0LCA0XQorIiB1dncgR0dHIHh5eiJbMywg
M10KKyIgdXZ3IEdHRyB4eXoiWzIsIDJdCisiIHV2dyBHR0cgeHl6IlsxLCAxXQorIlpRQiBhYmMg
UklHIlsxMSwgNF0KKyJaUUIgYWJjIFJJRyJbOSwgOV0KKyJaUUIgYWJjIFJJRyJbMTAsIDEwXQor
IlpRQiBhYmMgUklHIls4LCA0XQorIlpRQiBhYmMgUklHIls3LCA3XQorIlpRQiBhYmMgUklHIls2
LCA2XQorIlpRQiBhYmMgUklHIls1LCA1XQorIlpRQiBhYmMgUklHIls0LCA0XQorIlpRQiBhYmMg
UklHIlszXSwgImFiYyBaWlogZGVmICJbOF0KKyJaUUIgYWJjIFJJRyJbMSwgMV0KKyJaUUIgYWJj
IFJJRyJbMiwgMl0KKyJhYmMgWlpaIGRlZiAiWzEyLCA4XQorImFiYyBaWlogZGVmICJbMTEsIDEx
XQorImFiYyBaWlogZGVmICJbMTAsIDEwXQorImFiYyBaWlogZGVmICJbOSwgOV0KKyJhYmMgWlpa
IGRlZiAiWzgsIDhdCisiYWJjIFpaWiBkZWYgIls3LCAwXQorImFiYyBaWlogZGVmICJbNSwgNV0K
KyJhYmMgWlpaIGRlZiAiWzYsIDZdCisiYWJjIFpaWiBkZWYgIls0LCAwXQorImFiYyBaWlogZGVm
ICJbMywgM10KKyJhYmMgWlpaIGRlZiAiWzIsIDJdCisiYWJjIFpaWiBkZWYgIlsxLCAxXQorImFi
YyBaWlogZGVmICJbMCwgMF0KK01vdmUgbGVmdCBieSBvbmUgd29yZAorImFiYyBaWlogZGVmICJb
MCwgMF0KKyJhYmMgWlpaIGRlZiAiWzIsIDJdCisiYWJjIFpaWiBkZWYgIlsxLCAxXQorImFiYyBa
WlogZGVmICJbMywgM10KKyJhYmMgWlpaIGRlZiAiWzQsIDRdCisiYWJjIFpaWiBkZWYgIls1LCA1
XQorImFiYyBaWlogZGVmICJbNiwgNl0KKyJhYmMgWlpaIGRlZiAiWzcsIDddCisiYWJjIFpaWiBk
ZWYgIls4LCA4XQorIiB1dncgR0dHIHh5eiJbMywgM10KKyIgdXZ3IEdHRyB4eXoiWzIsIDJdCisi
IHV2dyBHR0cgeHl6IlsxLCAxXQorIlpRQiBhYmMgUklHIls4LCA4XQorIlpRQiBhYmMgUklHIls5
LCA5XQorIlpRQiBhYmMgUklHIlsxMCwgMTBdCisiWlFCIGFiYyBSSUciWzExLCAxMV0KKyJaUUIg
YWJjIFJJRyJbNywgN10KKyJaUUIgYWJjIFJJRyJbNiwgNl0KKyJaUUIgYWJjIFJJRyJbNSwgNV0K
KyJaUUIgYWJjIFJJRyJbNCwgNF0KKyJhYmMgWlpaIGRlZiAiWzEyLCAxMl0KKyJaUUIgYWJjIFJJ
RyJbMSwgMV0KKyJaUUIgYWJjIFJJRyJbMiwgMl0KKyJaUUIgYWJjIFJJRyJbMywgM10KKyJhYmMg
WlpaIGRlZiAiWzExLCAxMV0KKyJhYmMgWlpaIGRlZiAiWzEwLCAxMF0KKyJhYmMgWlpaIGRlZiAi
WzksIDldCisiIHV2dyBHR0cgeHl6Ils0LCA0XQorIiB1dncgR0dHIHh5eiJbNSwgNV0KKyIgdXZ3
IEdHRyB4eXoiWzYsIDZdCisiIHV2dyBHR0cgeHl6Ils3LCA3XQorIiB1dncgR0dHIHh5eiJbOCwg
OF0KKyIgdXZ3IEdHRyB4eXoiWzksIDldCisiIHV2dyBHR0cgeHl6IlsxMSwgMTFdCisiIHV2dyBH
R0cgeHl6IlsxMCwgMTBdCisiIHV2dyBHR0cgeHl6IlsxMiwgMTJdCitNb3ZlIHJpZ2h0IGJ5IG9u
ZSB3b3JkCisiIHV2dyBHR0cgeHl6IlsxMiwgNV0KKyIgdXZ3IEdHRyB4eXoiWzEwLCAxMF0KKyIg
dXZ3IEdHRyB4eXoiWzExLCAxMV0KKyIgdXZ3IEdHRyB4eXoiWzksIDVdCisiIHV2dyBHR0cgeHl6
Ils4LCA4XQorIiB1dncgR0dHIHh5eiJbNywgN10KKyIgdXZ3IEdHRyB4eXoiWzYsIDZdCisiIHV2
dyBHR0cgeHl6Ils1LCA1XQorIiB1dncgR0dHIHh5eiJbNF0sICJaUUIgYWJjIFJJRyJbM10KKyJh
YmMgWlpaIGRlZiAiWzksIDldCisiYWJjIFpaWiBkZWYgIlsxMCwgMTBdCisiYWJjIFpaWiBkZWYg
IlsxMSwgMTFdCisiWlFCIGFiYyBSSUciWzNdLCAiYWJjIFpaWiBkZWYgIlsxMl0KKyJaUUIgYWJj
IFJJRyJbMiwgMl0KKyJaUUIgYWJjIFJJRyJbMSwgMV0KKyJhYmMgWlpaIGRlZiAiWzEyXSwgIlpR
QiBhYmMgUklHIlsxMV0KKyJaUUIgYWJjIFJJRyJbNCwgNF0KKyJaUUIgYWJjIFJJRyJbNSwgNV0K
KyJaUUIgYWJjIFJJRyJbNiwgNl0KKyJaUUIgYWJjIFJJRyJbNywgN10KKyJaUUIgYWJjIFJJRyJb
MTEsIDhdCisiWlFCIGFiYyBSSUciWzEwLCAxMF0KKyJaUUIgYWJjIFJJRyJbOSwgOV0KKyJaUUIg
YWJjIFJJRyJbOF0sICJhYmMgWlpaIGRlZiAiWzRdCisiIHV2dyBHR0cgeHl6IlsxLCAxXQorIiB1
dncgR0dHIHh5eiJbMiwgMl0KKyIgdXZ3IEdHRyB4eXoiWzMsIDNdCisiYWJjIFpaWiBkZWYgIls4
LCA0XQorImFiYyBaWlogZGVmICJbNywgN10KKyJhYmMgWlpaIGRlZiAiWzYsIDZdCisiYWJjIFpa
WiBkZWYgIls1LCA1XQorImFiYyBaWlogZGVmICJbNCwgNF0KKyJhYmMgWlpaIGRlZiAiWzMsIDNd
CisiYWJjIFpaWiBkZWYgIlsxLCAxXQorImFiYyBaWlogZGVmICJbMiwgMl0KKyJhYmMgWlpaIGRl
ZiAiWzAsIDBdCitUZXN0IDExLCBMVFI6CisgIE1vdmluZyByaWdodDogTW92ZSByaWdodCBieSBv
bmUgd29yZAorImFiYyBaWlogZGVmIlswLCAwXQorImFiYyBaWlogZGVmIlsxLCAxXQorImFiYyBa
WlogZGVmIlsyLCAyXQorImFiYyBaWlogZGVmIlszLCAzXQorImFiYyBaWlogZGVmIls0LCA0XQor
ImFiYyBaWlogZGVmIls2LCA2XQorImFiYyBaWlogZGVmIls1LCA1XQorImFiYyBaWlogZGVmIls3
LCA3XQorImFiYyBaWlogZGVmIls4LCA4XQorImFiYyBaWlogZGVmIls5LCA5XQorImFiYyBaWlog
ZGVmIlsxMCwgMTBdCisiYWJjIFpaWiBkZWYiWzExLCAxMV0KKyJ3aGFzdGV2ZXIgWlFCIGFiYyBS
SUciWzEsIDFdCisid2hhc3RldmVyIFpRQiBhYmMgUklHIlsyLCAyXQorIndoYXN0ZXZlciBaUUIg
YWJjIFJJRyJbMywgM10KKyJ3aGFzdGV2ZXIgWlFCIGFiYyBSSUciWzQsIDRdCisid2hhc3RldmVy
IFpRQiBhYmMgUklHIls1LCA1XQorIndoYXN0ZXZlciBaUUIgYWJjIFJJRyJbNiwgNl0KKyJ3aGFz
dGV2ZXIgWlFCIGFiYyBSSUciWzcsIDddCisid2hhc3RldmVyIFpRQiBhYmMgUklHIls4LCA4XQor
IndoYXN0ZXZlciBaUUIgYWJjIFJJRyJbOSwgOV0KKyJ3aGFzdGV2ZXIgWlFCIGFiYyBSSUciWzEw
LCAxMF0KKyJ3aGFzdGV2ZXIgWlFCIGFiYyBSSUciWzEyLCAxMl0KKyJ3aGFzdGV2ZXIgWlFCIGFi
YyBSSUciWzExLCAxMV0KKyJ3aGFzdGV2ZXIgWlFCIGFiYyBSSUciWzEzLCAxM10KKyJ3aGFzdGV2
ZXIgWlFCIGFiYyBSSUciWzE0LCAxNF0KKyJ3aGFzdGV2ZXIgWlFCIGFiYyBSSUciWzE1LCAxNV0K
KyJ3aGFzdGV2ZXIgWlFCIGFiYyBSSUciWzE2LCAxNl0KKyJ3aGFzdGV2ZXIgWlFCIGFiYyBSSUci
WzE3LCAxN10KKyJ3aGFzdGV2ZXIgWlFCIGFiYyBSSUciWzE4LCAxOF0KKyJ3aGFzdGV2ZXIgWlFC
IGFiYyBSSUciWzIwLCAyMF0KKyJ3aGFzdGV2ZXIgWlFCIGFiYyBSSUciWzE5LCAxOV0KKyJ3aGFz
dGV2ZXIgWlFCIGFiYyBSSUciWzIxLCAyMV0KKyIgdXZ3IEdHRyB4eXoiWzEsIDFdCisiIHV2dyBH
R0cgeHl6IlsyLCAyXQorIiB1dncgR0dHIHh5eiJbMywgM10KKyIgdXZ3IEdHRyB4eXoiWzQsIDRd
CisiIHV2dyBHR0cgeHl6Ils1LCA1XQorIiB1dncgR0dHIHh5eiJbNywgN10KKyIgdXZ3IEdHRyB4
eXoiWzYsIDZdCisiIHV2dyBHR0cgeHl6Ils4LCA4XQorIiB1dncgR0dHIHh5eiJbOSwgOV0KKyIg
dXZ3IEdHRyB4eXoiWzEwLCAxMF0KKyIgdXZ3IEdHRyB4eXoiWzExLCAxMV0KKyIgdXZ3IEdHRyB4
eXoiWzEyLCAxMl0KK01vdmUgbGVmdCBieSBvbmUgd29yZAorIiB1dncgR0dHIHh5eiJbMTIsIDld
CisiIHV2dyBHR0cgeHl6IlsxMSwgMTFdCisiIHV2dyBHR0cgeHl6IlsxMCwgMTBdCisiIHV2dyBH
R0cgeHl6Ils5LCA5XQorIiB1dncgR0dHIHh5eiJbOCwgMV0KKyIgdXZ3IEdHRyB4eXoiWzYsIDZd
CisiIHV2dyBHR0cgeHl6Ils3LCA3XQorIiB1dncgR0dHIHh5eiJbNSwgMV0KKyIgdXZ3IEdHRyB4
eXoiWzQsIDRdCisiIHV2dyBHR0cgeHl6IlszLCAzXQorIiB1dncgR0dHIHh5eiJbMiwgMl0KKyIg
dXZ3IEdHRyB4eXoiWzEsIDFdCisid2hhc3RldmVyIFpRQiBhYmMgUklHIlsyMSwgMTRdCisid2hh
c3RldmVyIFpRQiBhYmMgUklHIlsxOSwgMTldCisid2hhc3RldmVyIFpRQiBhYmMgUklHIlsyMCwg
MjBdCisid2hhc3RldmVyIFpRQiBhYmMgUklHIlsxOCwgMTRdCisid2hhc3RldmVyIFpRQiBhYmMg
UklHIlsxNywgMTddCisid2hhc3RldmVyIFpRQiBhYmMgUklHIlsxNiwgMTZdCisid2hhc3RldmVy
IFpRQiBhYmMgUklHIlsxNSwgMTVdCisid2hhc3RldmVyIFpRQiBhYmMgUklHIlsxNCwgMTRdCisi
d2hhc3RldmVyIFpRQiBhYmMgUklHIlsxM10sICJhYmMgWlpaIGRlZiJbOF0KKyJ3aGFzdGV2ZXIg
WlFCIGFiYyBSSUciWzExLCAxMV0KKyJ3aGFzdGV2ZXIgWlFCIGFiYyBSSUciWzEyLCAxMl0KKyJ3
aGFzdGV2ZXIgWlFCIGFiYyBSSUciWzEwXSwgImFiYyBaWlogZGVmIls4XQorIndoYXN0ZXZlciBa
UUIgYWJjIFJJRyJbOSwgOV0KKyJ3aGFzdGV2ZXIgWlFCIGFiYyBSSUciWzgsIDhdCisid2hhc3Rl
dmVyIFpRQiBhYmMgUklHIls3LCA3XQorIndoYXN0ZXZlciBaUUIgYWJjIFJJRyJbNiwgNl0KKyJ3
aGFzdGV2ZXIgWlFCIGFiYyBSSUciWzUsIDVdCisid2hhc3RldmVyIFpRQiBhYmMgUklHIls0LCA0
XQorIndoYXN0ZXZlciBaUUIgYWJjIFJJRyJbMywgM10KKyJ3aGFzdGV2ZXIgWlFCIGFiYyBSSUci
WzIsIDJdCisid2hhc3RldmVyIFpRQiBhYmMgUklHIlsxLCAxXQorImFiYyBaWlogZGVmIlsxMSwg
OF0KKyJhYmMgWlpaIGRlZiJbMTAsIDEwXQorImFiYyBaWlogZGVmIls5LCA5XQorImFiYyBaWlog
ZGVmIls4LCA4XQorImFiYyBaWlogZGVmIls3LCAwXQorImFiYyBaWlogZGVmIls1LCA1XQorImFi
YyBaWlogZGVmIls2LCA2XQorImFiYyBaWlogZGVmIls0LCAwXQorImFiYyBaWlogZGVmIlszLCAz
XQorImFiYyBaWlogZGVmIlsyLCAyXQorImFiYyBaWlogZGVmIlsxLCAxXQorImFiYyBaWlogZGVm
IlswLCAwXQorTW92ZSBsZWZ0IGJ5IG9uZSB3b3JkCisiYWJjIFpaWiBkZWYiWzAsIDBdCisiYWJj
IFpaWiBkZWYiWzIsIDJdCisiYWJjIFpaWiBkZWYiWzEsIDFdCisiYWJjIFpaWiBkZWYiWzMsIDNd
CisiYWJjIFpaWiBkZWYiWzQsIDRdCisiYWJjIFpaWiBkZWYiWzUsIDVdCisiYWJjIFpaWiBkZWYi
WzYsIDZdCisiYWJjIFpaWiBkZWYiWzcsIDddCisiYWJjIFpaWiBkZWYiWzgsIDhdCisiIHV2dyBH
R0cgeHl6IlszLCAzXQorIiB1dncgR0dHIHh5eiJbMiwgMl0KKyIgdXZ3IEdHRyB4eXoiWzEsIDFd
Cisid2hhc3RldmVyIFpRQiBhYmMgUklHIlsxOCwgMThdCisid2hhc3RldmVyIFpRQiBhYmMgUklH
IlsxOSwgMTldCisid2hhc3RldmVyIFpRQiBhYmMgUklHIlsyMCwgMjBdCisid2hhc3RldmVyIFpR
QiBhYmMgUklHIlsyMSwgMjFdCisid2hhc3RldmVyIFpRQiBhYmMgUklHIlsxNywgMTddCisid2hh
c3RldmVyIFpRQiBhYmMgUklHIlsxNiwgMTZdCisid2hhc3RldmVyIFpRQiBhYmMgUklHIlsxNSwg
MTVdCisid2hhc3RldmVyIFpRQiBhYmMgUklHIlsxNCwgMTRdCisid2hhc3RldmVyIFpRQiBhYmMg
UklHIlsxMCwgMTBdCisid2hhc3RldmVyIFpRQiBhYmMgUklHIlsxMSwgMTFdCisid2hhc3RldmVy
IFpRQiBhYmMgUklHIlsxMiwgMTJdCisid2hhc3RldmVyIFpRQiBhYmMgUklHIlsxMywgMTNdCisi
d2hhc3RldmVyIFpRQiBhYmMgUklHIls5LCA5XQorIndoYXN0ZXZlciBaUUIgYWJjIFJJRyJbOCwg
OF0KKyJ3aGFzdGV2ZXIgWlFCIGFiYyBSSUciWzcsIDddCisid2hhc3RldmVyIFpRQiBhYmMgUklH
Ils2LCA2XQorIndoYXN0ZXZlciBaUUIgYWJjIFJJRyJbNSwgNV0KKyJ3aGFzdGV2ZXIgWlFCIGFi
YyBSSUciWzQsIDRdCisid2hhc3RldmVyIFpRQiBhYmMgUklHIlszLCAzXQorIndoYXN0ZXZlciBa
UUIgYWJjIFJJRyJbMiwgMl0KKyJ3aGFzdGV2ZXIgWlFCIGFiYyBSSUciWzEsIDFdCisiYWJjIFpa
WiBkZWYiWzExLCAxMV0KKyJhYmMgWlpaIGRlZiJbMTAsIDEwXQorImFiYyBaWlogZGVmIls5LCA5
XQorIiB1dncgR0dHIHh5eiJbNCwgNF0KKyIgdXZ3IEdHRyB4eXoiWzUsIDVdCisiIHV2dyBHR0cg
eHl6Ils2LCA2XQorIiB1dncgR0dHIHh5eiJbNywgN10KKyIgdXZ3IEdHRyB4eXoiWzgsIDhdCisi
IHV2dyBHR0cgeHl6Ils5LCA5XQorIiB1dncgR0dHIHh5eiJbMTEsIDExXQorIiB1dncgR0dHIHh5
eiJbMTAsIDEwXQorIiB1dncgR0dHIHh5eiJbMTIsIDEyXQorTW92ZSByaWdodCBieSBvbmUgd29y
ZAorIiB1dncgR0dHIHh5eiJbMTIsIDVdCisiIHV2dyBHR0cgeHl6IlsxMCwgMTBdCisiIHV2dyBH
R0cgeHl6IlsxMSwgMTFdCisiIHV2dyBHR0cgeHl6Ils5LCA1XQorIiB1dncgR0dHIHh5eiJbOCwg
OF0KKyIgdXZ3IEdHRyB4eXoiWzcsIDddCisiIHV2dyBHR0cgeHl6Ils2LCA2XQorIiB1dncgR0dH
IHh5eiJbNSwgNV0KKyIgdXZ3IEdHRyB4eXoiWzRdLCAid2hhc3RldmVyIFpRQiBhYmMgUklHIlsx
M10KKyJhYmMgWlpaIGRlZiJbOSwgOV0KKyJhYmMgWlpaIGRlZiJbMTAsIDEwXQorImFiYyBaWlog
ZGVmIlsxMV0sICJ3aGFzdGV2ZXIgWlFCIGFiYyBSSUciWzEzXQorIndoYXN0ZXZlciBaUUIgYWJj
IFJJRyJbMSwgMV0KKyJ3aGFzdGV2ZXIgWlFCIGFiYyBSSUciWzIsIDJdCisid2hhc3RldmVyIFpR
QiBhYmMgUklHIlszLCAzXQorIndoYXN0ZXZlciBaUUIgYWJjIFJJRyJbNCwgNF0KKyJ3aGFzdGV2
ZXIgWlFCIGFiYyBSSUciWzUsIDVdCisid2hhc3RldmVyIFpRQiBhYmMgUklHIls2LCA2XQorIndo
YXN0ZXZlciBaUUIgYWJjIFJJRyJbNywgN10KKyJ3aGFzdGV2ZXIgWlFCIGFiYyBSSUciWzgsIDhd
Cisid2hhc3RldmVyIFpRQiBhYmMgUklHIls5LCA5XQorIndoYXN0ZXZlciBaUUIgYWJjIFJJRyJb
MTMsIDEwXQorIndoYXN0ZXZlciBaUUIgYWJjIFJJRyJbMTIsIDEyXQorIndoYXN0ZXZlciBaUUIg
YWJjIFJJRyJbMTEsIDExXQorIndoYXN0ZXZlciBaUUIgYWJjIFJJRyJbMTAsIDIxXQorIndoYXN0
ZXZlciBaUUIgYWJjIFJJRyJbMTQsIDE0XQorIndoYXN0ZXZlciBaUUIgYWJjIFJJRyJbMTUsIDE1
XQorIndoYXN0ZXZlciBaUUIgYWJjIFJJRyJbMTYsIDE2XQorIndoYXN0ZXZlciBaUUIgYWJjIFJJ
RyJbMTcsIDE3XQorIndoYXN0ZXZlciBaUUIgYWJjIFJJRyJbMjEsIDE4XQorIndoYXN0ZXZlciBa
UUIgYWJjIFJJRyJbMjAsIDIwXQorIndoYXN0ZXZlciBaUUIgYWJjIFJJRyJbMTksIDE5XQorIndo
YXN0ZXZlciBaUUIgYWJjIFJJRyJbMThdLCAiYWJjIFpaWiBkZWYiWzRdCisiIHV2dyBHR0cgeHl6
IlsxLCAxXQorIiB1dncgR0dHIHh5eiJbMiwgMl0KKyIgdXZ3IEdHRyB4eXoiWzMsIDNdCisiYWJj
IFpaWiBkZWYiWzgsIDRdCisiYWJjIFpaWiBkZWYiWzcsIDddCisiYWJjIFpaWiBkZWYiWzYsIDZd
CisiYWJjIFpaWiBkZWYiWzUsIDVdCisiYWJjIFpaWiBkZWYiWzQsIDRdCisiYWJjIFpaWiBkZWYi
WzMsIDNdCisiYWJjIFpaWiBkZWYiWzEsIDFdCisiYWJjIFpaWiBkZWYiWzIsIDJdCisiYWJjIFpa
WiBkZWYiWzAsIDBdCitUZXN0IDEyLCBMVFI6CisgIE1vdmluZyByaWdodDogTW92ZSByaWdodCBi
eSBvbmUgd29yZAorImFiYyBaWlogZGVmIlswLCAwXQorImFiYyBaWlogZGVmIlsxLCAxXQorImFi
YyBaWlogZGVmIlsyLCAyXQorImFiYyBaWlogZGVmIlszLCAzXQorImFiYyBaWlogZGVmIls0LCA0
XQorImFiYyBaWlogZGVmIls2LCA2XQorImFiYyBaWlogZGVmIls1LCA1XQorImFiYyBaWlogZGVm
Ils3LCA3XQorImFiYyBaWlogZGVmIls4LCA4XQorImFiYyBaWlogZGVmIls5LCA5XQorImFiYyBa
WlogZGVmIlsxMCwgMTBdCisiYWJjIFpaWiBkZWYiWzExLCAxMV0KKyJaWkMgYWJjICBSSUcgIlsy
LCAyXQorIlpaQyBhYmMgIFJJRyAiWzEsIDFdCisiWlpDIGFiYyAgUklHICJbMywgM10KKyJaWkMg
YWJjICBSSUcgIls0LCA0XQorIlpaQyBhYmMgIFJJRyAiWzUsIDVdCisiWlpDIGFiYyAgUklHICJb
NiwgNl0KKyJaWkMgYWJjICBSSUcgIls3LCA3XQorIlpaQyBhYmMgIFJJRyAiWzgsIDhdCisiWlpD
IGFiYyAgUklHICJbMTEsIDExXQorIlpaQyBhYmMgIFJJRyAiWzEwLCAxMF0KKyJaWkMgYWJjICBS
SUcgIlsxMiwgMTJdCisiWlpDIGFiYyAgUklHICJbMTMsIDEzXQorInV2dyBHR0cgeHl6IlsxLCAx
XQorInV2dyBHR0cgeHl6IlsyLCAyXQorInV2dyBHR0cgeHl6IlszLCAzXQorInV2dyBHR0cgeHl6
Ils0LCA0XQorInV2dyBHR0cgeHl6Ils2LCA2XQorInV2dyBHR0cgeHl6Ils1LCA1XQorInV2dyBH
R0cgeHl6Ils3LCA3XQorInV2dyBHR0cgeHl6Ils4LCA4XQorInV2dyBHR0cgeHl6Ils5LCA5XQor
InV2dyBHR0cgeHl6IlsxMCwgMTBdCisidXZ3IEdHRyB4eXoiWzExLCAxMV0KK01vdmUgbGVmdCBi
eSBvbmUgd29yZAorInV2dyBHR0cgeHl6IlsxMSwgOF0KKyJ1dncgR0dHIHh5eiJbMTAsIDEwXQor
InV2dyBHR0cgeHl6Ils5LCA5XQorInV2dyBHR0cgeHl6Ils4LCA4XQorInV2dyBHR0cgeHl6Ils3
XSwgIlpaQyBhYmMgIFJJRyAiWzEzXQorInV2dyBHR0cgeHl6Ils1LCA1XQorInV2dyBHR0cgeHl6
Ils2LCA2XQorInV2dyBHR0cgeHl6Ils0XSwgIlpaQyBhYmMgIFJJRyAiWzEzXQorInV2dyBHR0cg
eHl6IlszLCAzXQorInV2dyBHR0cgeHl6IlsyLCAyXQorInV2dyBHR0cgeHl6IlsxLCAxXQorIlpa
QyBhYmMgIFJJRyAiWzEzLCA4XQorIlpaQyBhYmMgIFJJRyAiWzEyLCA4XQorIlpaQyBhYmMgIFJJ
RyAiWzEwLCAxMF0KKyJaWkMgYWJjICBSSUcgIlsxMSwgMTFdCisiWlpDIGFiYyAgUklHICJbOCwg
NF0KKyJaWkMgYWJjICBSSUcgIls3LCA3XQorIlpaQyBhYmMgIFJJRyAiWzYsIDZdCisiWlpDIGFi
YyAgUklHICJbNSwgNV0KKyJaWkMgYWJjICBSSUcgIls0LCA0XQorIlpaQyBhYmMgIFJJRyAiWzNd
LCAiYWJjIFpaWiBkZWYiWzhdCisiWlpDIGFiYyAgUklHICJbMSwgMV0KKyJaWkMgYWJjICBSSUcg
IlsyLCAyXQorImFiYyBaWlogZGVmIlsxMSwgOF0KKyJhYmMgWlpaIGRlZiJbMTAsIDEwXQorImFi
YyBaWlogZGVmIls5LCA5XQorImFiYyBaWlogZGVmIls4LCA4XQorImFiYyBaWlogZGVmIls3LCAw
XQorImFiYyBaWlogZGVmIls1LCA1XQorImFiYyBaWlogZGVmIls2LCA2XQorImFiYyBaWlogZGVm
Ils0LCAwXQorImFiYyBaWlogZGVmIlszLCAzXQorImFiYyBaWlogZGVmIlsyLCAyXQorImFiYyBa
WlogZGVmIlsxLCAxXQorImFiYyBaWlogZGVmIlswLCAwXQorTW92ZSBsZWZ0IGJ5IG9uZSB3b3Jk
CisiYWJjIFpaWiBkZWYiWzAsIDBdCisiYWJjIFpaWiBkZWYiWzIsIDJdCisiYWJjIFpaWiBkZWYi
WzEsIDFdCisiYWJjIFpaWiBkZWYiWzMsIDNdCisiYWJjIFpaWiBkZWYiWzQsIDRdCisiYWJjIFpa
WiBkZWYiWzUsIDVdCisiYWJjIFpaWiBkZWYiWzYsIDZdCisiYWJjIFpaWiBkZWYiWzcsIDddCisi
YWJjIFpaWiBkZWYiWzgsIDhdCisidXZ3IEdHRyB4eXoiWzIsIDJdCisidXZ3IEdHRyB4eXoiWzEs
IDFdCisiWlpDIGFiYyAgUklHICJbMTMsIDEzXQorIlpaQyBhYmMgIFJJRyAiWzgsIDhdCisiWlpD
IGFiYyAgUklHICJbMTAsIDEwXQorIlpaQyBhYmMgIFJJRyAiWzExLCAxMV0KKyJaWkMgYWJjICBS
SUcgIlsxMiwgMTJdCisiWlpDIGFiYyAgUklHICJbNywgN10KKyJaWkMgYWJjICBSSUcgIls2LCA2
XQorIlpaQyBhYmMgIFJJRyAiWzUsIDVdCisiWlpDIGFiYyAgUklHICJbNCwgNF0KKyJhYmMgWlpa
IGRlZiJbMTEsIDExXQorIlpaQyBhYmMgIFJJRyAiWzEsIDFdCisiWlpDIGFiYyAgUklHICJbMiwg
Ml0KKyJaWkMgYWJjICBSSUcgIlszLCAzXQorImFiYyBaWlogZGVmIlsxMCwgMTBdCisiYWJjIFpa
WiBkZWYiWzksIDldCisidXZ3IEdHRyB4eXoiWzMsIDNdCisidXZ3IEdHRyB4eXoiWzQsIDRdCisi
dXZ3IEdHRyB4eXoiWzUsIDVdCisidXZ3IEdHRyB4eXoiWzYsIDZdCisidXZ3IEdHRyB4eXoiWzcs
IDddCisidXZ3IEdHRyB4eXoiWzgsIDhdCisidXZ3IEdHRyB4eXoiWzEwLCAxMF0KKyJ1dncgR0dH
IHh5eiJbOSwgOV0KKyJ1dncgR0dHIHh5eiJbMTEsIDExXQorTW92ZSByaWdodCBieSBvbmUgd29y
ZAorInV2dyBHR0cgeHl6IlsxMSwgNF0KKyJ1dncgR0dHIHh5eiJbOSwgOV0KKyJ1dncgR0dHIHh5
eiJbMTAsIDEwXQorInV2dyBHR0cgeHl6Ils4LCA0XQorInV2dyBHR0cgeHl6Ils3LCA3XQorInV2
dyBHR0cgeHl6Ils2LCA2XQorInV2dyBHR0cgeHl6Ils1LCA1XQorInV2dyBHR0cgeHl6Ils0LCA0
XQorInV2dyBHR0cgeHl6IlszXSwgIlpaQyBhYmMgIFJJRyAiWzNdCisiYWJjIFpaWiBkZWYiWzks
IDldCisiYWJjIFpaWiBkZWYiWzEwLCAxMF0KKyJaWkMgYWJjICBSSUcgIlszLCAxMl0KKyJaWkMg
YWJjICBSSUcgIlsyLCAyXQorIlpaQyBhYmMgIFJJRyAiWzEsIDFdCisiYWJjIFpaWiBkZWYiWzEx
XSwgIlpaQyBhYmMgIFJJRyAiWzEyXQorIlpaQyBhYmMgIFJJRyAiWzQsIDRdCisiWlpDIGFiYyAg
UklHICJbNSwgNV0KKyJaWkMgYWJjICBSSUcgIls2LCA2XQorIlpaQyBhYmMgIFJJRyAiWzcsIDdd
CisiWlpDIGFiYyAgUklHICJbMTIsIDhdCisiWlpDIGFiYyAgUklHICJbMTEsIDExXQorIlpaQyBh
YmMgIFJJRyAiWzEwLCAxMF0KKyJaWkMgYWJjICBSSUcgIls4XSwgImFiYyBaWlogZGVmIls0XQor
IlpaQyBhYmMgIFJJRyAiWzEzXSwgImFiYyBaWlogZGVmIls0XQorInV2dyBHR0cgeHl6IlsxLCAx
XQorInV2dyBHR0cgeHl6IlsyLCAyXQorImFiYyBaWlogZGVmIls4LCA0XQorImFiYyBaWlogZGVm
Ils3LCA3XQorImFiYyBaWlogZGVmIls2LCA2XQorImFiYyBaWlogZGVmIls1LCA1XQorImFiYyBa
WlogZGVmIls0LCA0XQorImFiYyBaWlogZGVmIlszLCAzXQorImFiYyBaWlogZGVmIlsxLCAxXQor
ImFiYyBaWlogZGVmIlsyLCAyXQorImFiYyBaWlogZGVmIlswLCAwXQorCkluZGV4OiBMYXlvdXRU
ZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9tb3ZlLWJ5LXdvcmQtdmlzdWFsbHkuaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9tb3ZlLWJ5LXdvcmQtdmlzdWFs
bHkuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL21v
dmUtYnktd29yZC12aXN1YWxseS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIyNSBAQAor
PGhlYWQ+CisgICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0
L2h0bWw7IGNoYXJzZXQ9dXRmLTgiPgorICAgIDxzdHlsZT4KKyAgICAgICAgZGl2LnRlc3Qgewor
ICAgICAgICAgICAgLXdlYmtpdC11c2VyLW1vZGlmeTogcmVhZC13cml0ZTsKKyAgICAgICAgICAg
IHBhZGRpbmc6IDRweDsKKyAgICAgICAgICAgIGJvcmRlcjogMXB4IGRhc2hlZCBsaWdodGJsdWU7
CisgICAgICAgICAgICBtYXJnaW46IDRweCA0cHggNHB4IDI0cHg7CisgICAgICAgICAgICBvdXRs
aW5lOiBub25lOworICAgICAgICAgICAgZm9udC1mYW1pbHk6IEx1Y2lkYSBHcmFuZGU7CisgICAg
ICAgICAgICBjb3VudGVyLWluY3JlbWVudDogdGVzdC1udW1iZXI7CisgICAgICAgIH0KKyAgICAg
ICAgZGl2LnRlc3Q6YmVmb3JlIHsgY29udGVudDogY291bnRlcih0ZXN0LW51bWJlcik7IHBvc2l0
aW9uOiBhYnNvbHV0ZTsgbGVmdDogOHB4OyBmb250LXNpemU6IHgtc21hbGw7IHRleHQtYWxpZ246
IHJpZ2h0OyB3aWR0aDogMjBweDsgfQorICAgICAgICBkaXYudGVzdCBzcGFuIHsgYmFja2dyb3Vu
ZC1jb2xvcjogI2RlZjsgfQorICAgICAgICBkaXYudGVzdCBpbWcgeyB3aWR0aDogMWVtOyBoZWln
aHQ6IDFlbTsgYmFja2dyb3VuZC1jb2xvcjogbGlnaHRncmVlbjsgfQorICAgICAgICBkaXYudGVz
dCBpbWcgKyBpbWcgeyBiYWNrZ3JvdW5kLWNvbG9yOiBsaWdodGJsdWU7IH0KKyAgICAgICAgZGl2
LnRlc3QgZGl2IHsgYm9yZGVyOiAxcHggZGFzaGVkIHBpbms7IHBhZGRpbmc6IDNweDsgaGVpZ2h0
OiAyZW07IH0KKyAgICAgICAgdGVzdF9tb3ZlX2J5X3dvcmQge2Rpc3BsYXk6IG5vbmU7fQorICAg
IDwvc3R5bGU+CisgICAgPHNjcmlwdD4KKyAgICAgICAgdmFyIG1lc3NhZ2VzID0gW107CisKKyAg
ICAgICAgZnVuY3Rpb24gbG9nKG1lc3NhZ2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1lc3Nh
Z2VzLnB1c2gobWVzc2FnZSk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBmbHVzaExv
ZygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25z
b2xlIikuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobWVzc2FnZXMuam9pbigi
IikpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGNhcmV0Q29vcmRpbmF0ZXMoKQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAoIXdpbmRvdy50ZXh0SW5wdXRDb250cm9sbGVyKQor
ICAgICAgICAgICAgICAgIHJldHVybiB7IHg6IDAsIHkgOjAgfTsKKyAgICAgICAgICAgIHZhciBj
YXJldFJlY3QgPSB0ZXh0SW5wdXRDb250cm9sbGVyLmZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdl
KHRleHRJbnB1dENvbnRyb2xsZXIuc2VsZWN0ZWRSYW5nZSgpWzBdLCAwKTsKKyAgICAgICAgICAg
IHJldHVybiB7IHg6IGNhcmV0UmVjdFswXSwgeTogY2FyZXRSZWN0WzFdIH07CisgICAgICAgIH0K
KworCisgICAgICAgIGZ1bmN0aW9uIGZvbGQoc3RyaW5nKQorICAgICAgICB7CisgICAgICAgICAg
ICB2YXIgcmVzdWx0ID0gIiI7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0cmlu
Zy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgIHZhciBjaGFyID0gc3RyaW5nLmNoYXJD
b2RlQXQoaSk7CisgICAgICAgICAgICAgICAgaWYgKGNoYXIgPj0gMHgwNWQwKQorICAgICAgICAg
ICAgICAgICAgICBjaGFyIC09IDB4MDU4ZjsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChjaGFy
ID09IDEwKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAiXFxuIjsKKyAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IHJlc3VsdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoYXIpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGxv
Z1Bvc2l0aW9ucyhwb3NpdGlvbnMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgcG9zaXRpb25zLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKGkp
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uc1tpXS5ub2RlICE9IHBvc2l0aW9u
c1tpIC0gMV0ubm9kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZygiXSIpOworICAgICAg
ICAgICAgICAgICAgICBsb2coIiwgIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGlmICghaSB8fCBwb3NpdGlvbnNbaV0ubm9kZSAhPSBwb3NpdGlvbnNbaSAtIDFdLm5vZGUp
CisgICAgICAgICAgICAgICAgICAgIGxvZygocG9zaXRpb25zW2ldLm5vZGUgaW5zdGFuY2VvZiBU
ZXh0ID8gJyInICsgZm9sZChwb3NpdGlvbnNbaV0ubm9kZS5kYXRhKSArICciJyA6ICI8IiArIHBv
c2l0aW9uc1tpXS5ub2RlLnRhZ05hbWUgKyAiPiIpICsgIlsiKTsKKyAgICAgICAgICAgICAgICBs
b2cocG9zaXRpb25zW2ldLm9mZnNldCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsb2co
Il0iKTsKKyAgICAgICAgfQorCisKKyAgICAgICAgZnVuY3Rpb24gY2hlY2tDb29yZGluYXRlc01v
dmluZ1JpZ2h0RG93bihwb3NpdGlvbnMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAodmFy
IGkgPSAxOyBpIDwgcG9zaXRpb25zLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYg
KHBvc2l0aW9uc1tpXS5wb2ludC55ID4gcG9zaXRpb25zW2kgLSAxXS5wb2ludC55IHx8IHBvc2l0
aW9uc1tpXS5wb2ludC54IDwgcG9zaXRpb25zW2kgLSAxXS5wb2ludC54ICYmIHBvc2l0aW9uc1tp
XS5wb2ludC55ID49IHBvc2l0aW9uc1tpIC0gMV0ucG9pbnQueSkKKyAgICAgICAgICAgICAgICAg
ICAgbG9nKCJXQVJOSU5HOiBNb3ZlZCBpbiB0aGUgd3JvbmcgZGlyZWN0aW9uIGluIHN0ZXAgIiAr
IGkgKyAiOiBmcm9tICgiICsgcG9zaXRpb25zW2kgLSAxXS5wb2ludC54ICsgIiwgIiArIHBvc2l0
aW9uc1tpIC0gMV0ucG9pbnQueSArICIpIHRvICgiICsgcG9zaXRpb25zW2ldLnBvaW50LnggKyAi
LCAiICsgcG9zaXRpb25zW2ldLnBvaW50LnkgKyAiKS5cbiIpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gY2hlY2tDb29yZGluYXRlc01vdmluZ0xlZnREb3du
KHBvc2l0aW9ucykKKyAgICAgICAgeworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBw
b3NpdGlvbnMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICBpZiAocG9zaXRpb25zW2ld
LnBvaW50LnkgPiBwb3NpdGlvbnNbaSAtIDFdLnBvaW50LnkgfHwgcG9zaXRpb25zW2ldLnBvaW50
LnggPiBwb3NpdGlvbnNbaSAtIDFdLnBvaW50LnggJiYgcG9zaXRpb25zW2ldLnBvaW50LnkgPj0g
cG9zaXRpb25zW2kgLSAxXS5wb2ludC55KQorICAgICAgICAgICAgICAgICAgICBsb2coIldBUk5J
Tkc6IE1vdmVkIGluIHRoZSB3cm9uZyBkaXJlY3Rpb24gaW4gc3RlcCAiICsgaSArICI6IGZyb20g
KCIgKyBwb3NpdGlvbnNbaSAtIDFdLnBvaW50LnggKyAiLCAiICsgcG9zaXRpb25zW2kgLSAxXS5w
b2ludC55ICsgIikgdG8gKCIgKyBwb3NpdGlvbnNbaV0ucG9pbnQueCArICIsICIgKyBwb3NpdGlv
bnNbaV0ucG9pbnQueSArICIpLlxuIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICBmdW5jdGlvbiBjaGVja0Nvb3JkaW5hdGVzTW92aW5nUmlnaHRVcChwb3NpdGlvbnMpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgcG9zaXRpb25zLmxlbmd0
aDsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uc1tpXS5wb2ludC55IDwgcG9z
aXRpb25zW2kgLSAxXS5wb2ludC55IHx8IHBvc2l0aW9uc1tpXS5wb2ludC54IDwgcG9zaXRpb25z
W2kgLSAxXS5wb2ludC54ICYmIHBvc2l0aW9uc1tpXS5wb2ludC55IDw9IHBvc2l0aW9uc1tpIC0g
MV0ucG9pbnQueSkKKyAgICAgICAgICAgICAgICAgICAgbG9nKCJXQVJOSU5HOiBNb3ZlZCBpbiB0
aGUgd3JvbmcgZGlyZWN0aW9uIGluIHN0ZXAgIiArIGkgKyAiOiBmcm9tICgiICsgcG9zaXRpb25z
W2kgLSAxXS5wb2ludC54ICsgIiwgIiArIHBvc2l0aW9uc1tpIC0gMV0ucG9pbnQueSArICIpIHRv
ICgiICsgcG9zaXRpb25zW2ldLnBvaW50LnggKyAiLCAiICsgcG9zaXRpb25zW2ldLnBvaW50Lnkg
KyAiKS5cbiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24g
Y2hlY2tDb29yZGluYXRlc01vdmluZ0xlZnRVcChwb3NpdGlvbnMpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgcG9zaXRpb25zLmxlbmd0aDsgKytpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKHBvc2l0aW9uc1tpXS5wb2ludC55IDwgcG9zaXRpb25zW2kgLSAxXS5w
b2ludC55IHx8IHBvc2l0aW9uc1tpXS5wb2ludC54ID4gcG9zaXRpb25zW2kgLSAxXS5wb2ludC54
ICYmIHBvc2l0aW9uc1tpXS5wb2ludC55IDw9IHBvc2l0aW9uc1tpIC0gMV0ucG9pbnQueSkKKyAg
ICAgICAgICAgICAgICAgICAgbG9nKCJXQVJOSU5HOiBNb3ZlZCBpbiB0aGUgd3JvbmcgZGlyZWN0
aW9uIGluIHN0ZXAgIiArIGkgKyAiOiBmcm9tICgiICsgcG9zaXRpb25zW2kgLSAxXS5wb2ludC54
ICsgIiwgIiArIHBvc2l0aW9uc1tpIC0gMV0ucG9pbnQueSArICIpIHRvICgiICsgcG9zaXRpb25z
W2ldLnBvaW50LnggKyAiLCAiICsgcG9zaXRpb25zW2ldLnBvaW50LnkgKyAiKS5cbiIpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gbW92ZUJ5V29yZEZvckV2
ZXJ5UG9zaXRpb24oc2VsLCB0ZXN0LCBkaXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIENo
ZWNrIGN0cmwtcmlnaHQtYXJyb3cgd29ya3MgZm9yIGV2ZXJ5IHBvc2l0aW9uLgorICAgICAgICAg
ICAgc2VsLnNldFBvc2l0aW9uKHRlc3QsIDApOworICAgICAgICAgICAgdmFyIHByZXZPZmZzZXQg
PSBzZWwuYW5jaG9yT2Zmc2V0OworICAgICAgICAgICAgdmFyIHByZXZOb2RlID0gc2VsLmFuY2hv
ck5vZGU7CisgICAgICAgICAgICB2YXIgZGlyZWN0aW9uID0gInJpZ2h0IjsKKyAgICAgICAgICAg
IGlmIChkaXIgPT0gInJ0bCIpCisgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gImxlZnQiOyAg
ICAKKyAgICAgICAgICAgIGxvZygiTW92ZSAiICsgZGlyZWN0aW9uICsgIiBieSBvbmUgd29yZFxu
Iik7CisgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgICAgIHNlbC5zZXRQ
b3NpdGlvbihwcmV2Tm9kZSwgcHJldk9mZnNldCk7CisgICAgICAgICAgICAgICAgdmFyIHBvc2l0
aW9ucyA9IFtdOworICAgICAgICAgICAgICAgIHBvc2l0aW9ucy5wdXNoKHsgbm9kZTogc2VsLmFu
Y2hvck5vZGUsIG9mZnNldDogc2VsLmFuY2hvck9mZnNldCwgcG9pbnQ6IGNhcmV0Q29vcmRpbmF0
ZXMoKSB9KTsKKyAgICAgICAgICAgICAgICBzZWwubW9kaWZ5KCJtb3ZlIiwgZGlyZWN0aW9uLCAi
LXdlYmtpdC12aXN1YWwtd29yZCIpOworICAgICAgICAgICAgICAgIHBvc2l0aW9ucy5wdXNoKHsg
bm9kZTogc2VsLmFuY2hvck5vZGUsIG9mZnNldDogc2VsLmFuY2hvck9mZnNldCwgcG9pbnQ6IGNh
cmV0Q29vcmRpbmF0ZXMoKSB9KTsKKyAgICAgICAgICAgICAgICBpZiAoZGlyZWN0aW9uID09ICJy
aWdodCIpCisgICAgICAgICAgICAgICAgICAgIGNoZWNrQ29vcmRpbmF0ZXNNb3ZpbmdSaWdodERv
d24ocG9zaXRpb25zKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAg
IGNoZWNrQ29vcmRpbmF0ZXNNb3ZpbmdMZWZ0VXAocG9zaXRpb25zKTsKKyAgICAgICAgICAgICAg
ICBsb2dQb3NpdGlvbnMocG9zaXRpb25zKTsKKyAgICAgICAgICAgICAgICBsb2coIlxuIik7Cisg
ICAgICAgICAgICAgICAgc2VsLnNldFBvc2l0aW9uKHByZXZOb2RlLCBwcmV2T2Zmc2V0KTsKKyAg
ICAgICAgICAgICAgICBzZWwubW9kaWZ5KCJtb3ZlIiwgZGlyZWN0aW9uLCAiY2hhcmFjdGVyIik7
CisgICAgICAgICAgICAgICAgaWYgKHNlbC5hbmNob3JOb2RlID09IHByZXZOb2RlICYmIHNlbC5h
bmNob3JPZmZzZXQgPT0gcHJldk9mZnNldCkgeworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcHJldk5vZGUgPSBzZWwuYW5jaG9y
Tm9kZTsKKyAgICAgICAgICAgICAgICBwcmV2T2Zmc2V0ID0gc2VsLmFuY2hvck9mZnNldDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIENoZWNrIGN0cmwtbGVmdC1hcnJvdyB3b3JrcyBm
b3IgZXZlcnkgcG9zaXRpb24uCisgICAgICAgICAgICB2YXIgcHJldk9mZnNldCA9IHNlbC5hbmNo
b3JPZmZzZXQ7CisgICAgICAgICAgICB2YXIgcHJldk5vZGUgPSBzZWwuYW5jaG9yTm9kZTsKKyAg
ICAgICAgICAgIGlmIChkaXIgPT0gImx0ciIpCisgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0g
ImxlZnQiOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9ICJy
aWdodCI7ICAgIAorICAgICAgICAgICAgbG9nKCJNb3ZlICIgKyBkaXJlY3Rpb24gKyAiIGJ5IG9u
ZSB3b3JkXG4iKTsKKyAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAgICAg
c2VsLnNldFBvc2l0aW9uKHByZXZOb2RlLCBwcmV2T2Zmc2V0KTsKKyAgICAgICAgICAgICAgICB2
YXIgcG9zaXRpb25zID0gW107CisgICAgICAgICAgICAgICAgcG9zaXRpb25zLnB1c2goeyBub2Rl
OiBzZWwuYW5jaG9yTm9kZSwgb2Zmc2V0OiBzZWwuYW5jaG9yT2Zmc2V0LCBwb2ludDogY2FyZXRD
b29yZGluYXRlcygpIH0pOworICAgICAgICAgICAgICAgIHNlbC5tb2RpZnkoIm1vdmUiLCBkaXJl
Y3Rpb24sICItd2Via2l0LXZpc3VhbC13b3JkIik7CisgICAgICAgICAgICAgICAgcG9zaXRpb25z
LnB1c2goeyBub2RlOiBzZWwuYW5jaG9yTm9kZSwgb2Zmc2V0OiBzZWwuYW5jaG9yT2Zmc2V0LCBw
b2ludDogY2FyZXRDb29yZGluYXRlcygpIH0pOworICAgICAgICAgICAgICAgIGlmIChkaXJlY3Rp
b24gPT0gInJpZ2h0IikKKyAgICAgICAgICAgICAgICAgICAgY2hlY2tDb29yZGluYXRlc01vdmlu
Z1JpZ2h0RG93bihwb3NpdGlvbnMpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICAgICAgY2hlY2tDb29yZGluYXRlc01vdmluZ0xlZnRVcChwb3NpdGlvbnMpOworICAgICAg
ICAgICAgICAgIGxvZ1Bvc2l0aW9ucyhwb3NpdGlvbnMpOworICAgICAgICAgICAgICAgIGxvZygi
XG4iKTsKKyAgICAgICAgICAgICAgICBzZWwuc2V0UG9zaXRpb24ocHJldk5vZGUsIHByZXZPZmZz
ZXQpOworICAgICAgICAgICAgICAgIHNlbC5tb2RpZnkoIm1vdmUiLCBkaXJlY3Rpb24sICJjaGFy
YWN0ZXIiKTsKKyAgICAgICAgICAgICAgICBpZiAoc2VsLmFuY2hvck5vZGUgPT0gcHJldk5vZGUg
JiYgc2VsLmFuY2hvck9mZnNldCA9PSBwcmV2T2Zmc2V0KSB7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwcmV2Tm9kZSA9IHNl
bC5hbmNob3JOb2RlOworICAgICAgICAgICAgICAgIHByZXZPZmZzZXQgPSBzZWwuYW5jaG9yT2Zm
c2V0OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gcnVuTW92
ZUxlZnRSaWdodCh0ZXN0cywgdW5pdCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIHNlbCA9
IGdldFNlbGVjdGlvbigpOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXN0cy5s
ZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgIHZhciBwb3NpdGlvbnNNb3ZpbmdSaWdodDsK
KyAgICAgICAgICAgICAgICB2YXIgcG9zaXRpb25zTW92aW5nTGVmdDsKKyAgICAKKyAgICAgICAg
ICAgICAgICBsb2coIlRlc3QgIiArIChpICsgMSkgKyAiLCBMVFI6XG4gIE1vdmluZyByaWdodDog
Iik7CisgICAgICAgICAgICAgICAgbW92ZUJ5V29yZEZvckV2ZXJ5UG9zaXRpb24oc2VsLCB0ZXN0
c1tpXSwgImx0ciIpOworCisgICAgICAgICAgICAgICAgdGVzdHNbaV0uc3R5bGUuZGlyZWN0aW9u
ID0gInJ0bCI7CisgICAgICAgICAgICAgICAgbW92ZUJ5V29yZEZvckV2ZXJ5UG9zaXRpb24oc2Vs
LCB0ZXN0c1tpXSwgInJ0bCIpOworCisgICAgICAgICAgICB9CisgICAgICAgICAgICBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgidGVzdEdyb3VwIikuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKKyAg
ICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHJ1blRlc3QoKSB7CisgICAgICAgICAgICB2YXIg
dGVzdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJ0ZXN0Iik7CisgICAgICAg
ICAgICBsb2coIlxuPT09PT09PT0gTW92ZSBCeSBXb3JkID09PT1cbiIpOworICAgICAgICAgICAg
dGVzdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJ0ZXN0X21vdmVfYnlfd29y
ZCIpOworICAgICAgICAgICAgcnVuTW92ZUxlZnRSaWdodCh0ZXN0cywgIndvcmQiKTsKKyAgICAg
ICAgfQorCisgICAgICAgIG9ubG9hZCA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgdHJ5IHsK
KyAgICAgICAgICAgICAgICBydW5UZXN0KCk7CisgICAgICAgICAgICB9IGZpbmFsbHkgeworICAg
ICAgICAgICAgICAgIGZsdXNoTG9nKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAg
ICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgIGxheW91
dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICA8L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5PgorICAgIDxkaXYgaWQ9InRlc3RNb3ZlQnlXb3JkIj4KKyAgICA8ZGl2IGNsYXNzPSJ0ZXN0
X21vdmVfYnlfd29yZCIgY29udGVudGVkaXRhYmxlPmFiYyBkZWYgaGlqIG9wcSByc3Q8L2Rpdj4K
KyAgICA8ZGl2IGNsYXNzPSJ0ZXN0X21vdmVfYnlfd29yZCIgY29udGVudGVkaXRhYmxlPtep16nX
qSDXoNeg16Ag15HXkdeRINeS15LXkiDXp9en16cg15vXm9ebPC9kaXY+CisgICAgPGRpdiBjbGFz
cz0idGVzdF9tb3ZlX2J5X3dvcmQiIGNvbnRlbnRlZGl0YWJsZT5hYmMgZGVmINep16DXkSDXodeY
15YgdXZ3IHh5ejwvZGl2PgorICAgIDxkaXYgY2xhc3M9InRlc3RfbW92ZV9ieV93b3JkIiBjb250
ZW50ZWRpdGFibGU+YWJjINep16DXkSB4eXo8L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJ0ZXN0X21v
dmVfYnlfd29yZCIgY29udGVudGVkaXRhYmxlPtep16DXkSBhYmMg16HXmNeWPC9kaXY+CisKKyAg
ICA8IS0tIDxkaXYgY2xhc3M9InRlc3RfbW92ZV9ieV93b3JkIiBjb250ZW50ZWRpdGFibGUgaWQ9
Im11bHRpcGxlX3NwYWNlX3dyb25nX3Jlc3VsdF9ydGxfZGl2X2N0cmxfcmlnaHQiPmFiYyDXqdep
16kgZGVmIDxzcGFuPtep16DXkSAgYWJjINeh15jXljwvc3Bhbj4gIHV2dyDXlteW15YgeHl6PC9k
aXY+IC0tPgorICAgIDxkaXYgY2xhc3M9InRlc3RfbW92ZV9ieV93b3JkIiBjb250ZW50ZWRpdGFi
bGU+YWJjINep16nXqSBkZWYgPHNwYW4+16nXoNeRIGFiYyDXodeY15Y8L3NwYW4+ICB1dncg15bX
lteWIHh5ejwvZGl2PgorICAgIDxkaXYgY2xhc3M9InRlc3RfbW92ZV9ieV93b3JkIiBjb250ZW50
ZWRpdGFibGUgPmFiYyDXqdep16kgZGVmPHNwYW4+d2hhc3RldmVyINep16DXkSBhYmMg16HXmNeW
PC9zcGFuPiB1dncg15bXlteWIHh5ejwvZGl2PgorCisgICAgPCEtLSA8ZGl2IGNsYXNzPSJ0ZXN0
X21vdmVfYnlfd29yZCIgY29udGVudGVkaXRhYmxlIGlkPSJtdWx0aXBsZV9zcGFjZV93cm9uZ19y
ZXN1bHRfZGl2X2x0ciI+YWJjINep16nXqSBkZWYgPHNwYW4gZGlyPXJ0bD7Xqdeg15EgIG9wcSDX
odeY15Y8L3NwYW4+ICB1dncg16nXqdepIHh5ejwvZGl2PiAtLT4KKyAgICA8ZGl2IGNsYXNzPSJ0
ZXN0X21vdmVfYnlfd29yZCIgY29udGVudGVkaXRhYmxlPmFiYyDXqdep16kgZGVmIDxzcGFuIGRp
cj1ydGw+16nXoNeRIG9wcSDXodeY15Y8L3NwYW4+ICB1dncg16nXqdepIHh5ejwvZGl2PgorICAg
IDxkaXYgY2xhc3M9InRlc3RfbW92ZV9ieV93b3JkIiBjb250ZW50ZWRpdGFibGU+YWJjINep16nX
qSBkZWYgPHNwYW4gZGlyPWx0cj7Xqdeg15EgIGFiYyDXodeY15Y8L3NwYW4+ICB1dncg15bXlteW
IHh5ejwvZGl2PgorICAgIDxkaXYgY2xhc3M9InRlc3RfbW92ZV9ieV93b3JkIiBjb250ZW50ZWRp
dGFibGU+YWJjINep16nXqSBkZWYgPHNwYW4gZGlyPWx0cj7Xqdeg15EgYWJjINeh15jXljwvc3Bh
bj4gdXZ3INeW15bXliB4eXo8L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJ0ZXN0X21vdmVfYnlfd29y
ZCIgY29udGVudGVkaXRhYmxlPmFiYyDXqdep16kgZGVmPHNwYW4gZGlyPWx0cj53aGFzdGV2ZXIg
16nXoNeRIGFiYyDXodeY15Y8L3NwYW4+IHV2dyDXlteW15YgeHl6PC9kaXY+CisgICAgPGRpdiBj
bGFzcz0idGVzdF9tb3ZlX2J5X3dvcmQiIGNvbnRlbnRlZGl0YWJsZT5hYmMg16nXqdepIGRlZjxz
cGFuIGRpcj1sdHI+16nXqdeSIGFiYyAg16HXmNeWIDwvc3Bhbj51dncg15bXlteWIHh5ejwvZGl2
PgorCisgICAgPC9kaXY+CisKKworICAgIDxwcmUgaWQ9ImNvbnNvbGUiPjwvcHJlPgorPC9ib2R5
Pgo=
</data>
<flag name="review"
          id="79738"
          type_id="1"
          status="-"
          setter="rniwa"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>87522</attachid>
            <date>2011-03-30 06:34:16 -0700</date>
            <delta_ts>2011-03-30 14:32:01 -0700</delta_ts>
            <desc>patch w/ layout test</desc>
            <filename>57336.v2</filename>
            <type>text/plain</type>
            <size>29175</size>
            <attacher name="Xiaomei Ji">xji</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgyNDMyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTEgQEAKKzIwMTEtMDMtMzAgIFhpYW9tZWkg
SmkgIDx4amlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEV4cGVyaW1lbnQgd2l0aCBtb3ZpbmcgY2FyZXQgYnkgd29yZCBpbiB2
aXN1YWwgb3JkZXIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01NzMzNgorCisgICAgICAgIFRoaXMgaXMgdGhlIDFzdCB2ZXJzaW9uIG9mIGltcGxlbWVu
dGluZyAibW92ZSBjYXJldCBieSB3b3JkIGluIHZpc3VhbCBvcmRlciIuCisgICAgICAgIEl0IG9u
bHkgd29ya3MgaW4gdGhlIGZvbGxvd2luZyBzaXR1YXRpb246CisgICAgICAgIDEuIEZvciBhIExU
UiBib3ggaW4gYSBMVFIgYmxvY2sgb3IgYSBSVEwgYm94IGluIFJUTCBibG9jaywgCisgICAgICAg
IHdoZW4gY2FyZXQgaXMgYXQgdGhlIGxlZnQgYm91bmRhcnkgb2YgdGhlIGJveCBhbmQgd2UgYXJl
IGxvb2tpbmcgZm9yIAorICAgICAgICB0aGUgd29yZCBib3VuZGFyeSBpbiByaWdodC4KKyAgICAg
ICAgMi4gRm9yIGEgTFRSIG9yIFJUTCBib3ggaW4gYSBMVFIgYmxvY2ssIHdoZW4gY2FyZXQgaXMg
YXQgdGhlIGxlZnQgYm91bmRhcnkKKyAgICAgICAgb2YgdGhlIGJveCBhbmQgd2UgYXJlIGxvb2tp
bmcgZm9yIHRoZSB3b3JkIGJvdW5kYXJ5IGluIGxlZnQgYW5kIAorICAgICAgICBwcmV2aW91cyBi
b3ggaXMgYSBMVFIgYm94LgorICAgICAgICAzLiBGb3IgYSBMVFIgb3IgUlRMIGJveCBpbiBhIFJU
TCBibG9jaywgd2hlbiB0aGUgY2FyZXQgaXMgYXQgdGhlIHJpZ2h0IAorICAgICAgICBib3VuZGFy
eSBvZiB0aGUgYm94IGFuZCB3ZSBhcmUgbG9va2luZyBmb3IgdGhlIHdvcmQgYm91bmRhcnkgaW4g
cmlnaHQgYW5kIG5leHQgYm94IGlzIFJUTCBib3guCisKKyAgICAgICAgQW4gZXhwZXJpbWVudGFs
IGdyYW51bGFyaXR5IGlzIGludHJvZHVjZWQsIGFzIGEgc2lkZSBlZmZlY3QsIGZ1bmN0aW9ucyBo
YXZpbmcgc3dpdGNoIHN0YXRlbWVudHMKKyAgICAgICAgdG8gaGFuZGxlIHRob3NlIGdyYW51bGFy
aXRpZXMgaGF2ZSB0byBhZGQgbW9yZSBvbmUgY2FzZSB0byBoYW5kbGUgdGhpcyBuZXcgZ3JhbnVs
YXJpdHkuCisgICAgICAgIFRoZSBleHBlcmltZW50YWwgZ3JhbnVsYXJpdHkgaXMgZXhwb3NlZCB0
aG91Z2ggSlMgYnkgJy13ZWJraXQtdmlzdWFsLXdvcmQiLgorCisgICAgICAgIFRlc3Q6IGVkaXRp
bmcvc2VsZWN0aW9uL21vdmUtYnktd29yZC12aXN1YWxseS5odG1sCisKKyAgICAgICAgKiBlZGl0
aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9u
Q29udHJvbGxlcjo6bW9kaWZ5RXh0ZW5kaW5nUmlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6U2Vs
ZWN0aW9uQ29udHJvbGxlcjo6bW9kaWZ5RXh0ZW5kaW5nRm9yd2FyZCk6CisgICAgICAgIChXZWJD
b3JlOjpTZWxlY3Rpb25Db250cm9sbGVyOjptb2RpZnlNb3ZpbmdSaWdodCk6CisgICAgICAgIChX
ZWJDb3JlOjpTZWxlY3Rpb25Db250cm9sbGVyOjptb2RpZnlNb3ZpbmdGb3J3YXJkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vZGlmeUV4dGVuZGluZ0xlZnQpOgor
ICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kaWZ5RXh0ZW5kaW5nQmFj
a3dhcmQpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kaWZ5TW92
aW5nTGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25Db250cm9sbGVyOjptb2RpZnlN
b3ZpbmdCYWNrd2FyZCk6CisgICAgICAgICogZWRpdGluZy9UZXh0R3JhbnVsYXJpdHkuaDoKKyAg
ICAgICAgKiBlZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VmlzaWJsZVNlbGVjdGlvbjo6c2V0U3RhcnRBbmRFbmRGcm9tQmFzZUFuZEV4dGVudFJlc3BlY3Rp
bmdHcmFudWxhcml0eSk6CisgICAgICAgICogZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnByZXZpb3VzV29yZEJyZWFrSW5Cb3hJbnNpZGVCbG9ja1dpdGhTYW1l
RGlyZWN0aW9uYWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6d29yZEJvdW5kYXJ5SW5Cb3gpOgor
ICAgICAgICAoV2ViQ29yZTo6d29yZEJvdW5kYXJ5SW5BZGphY2VudEJveGVzKToKKyAgICAgICAg
KFdlYkNvcmU6OmxlZnRXb3JkQm91bmRhcnkpOgorICAgICAgICAoV2ViQ29yZTo6cmlnaHRXb3Jk
Qm91bmRhcnkpOgorICAgICAgICAoV2ViQ29yZTo6bGVmdFdvcmRQb3NpdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpyaWdodFdvcmRQb3NpdGlvbik6CisgICAgICAgICogZWRpdGluZy92aXNpYmxl
X3VuaXRzLmg6CisgICAgICAgICogcGFnZS9ET01TZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RE9NU2VsZWN0aW9uOjptb2RpZnkpOgorCiAyMDExLTAzLTMwICBFdmFuIE1hcnRpbiAg
PGV2YW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFJ5b3N1a2UgTml3YS4K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNw
cAkocmV2aXNpb24gODIyNDkpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNv
bnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NDcsNiArNDQ3LDEwIEBAIFZpc2libGVQ
b3NpdGlvbiBTZWxlY3Rpb25Db250cm9sbGVyOjptb2QKICAgICBjYXNlIERvY3VtZW50Qm91bmRh
cnk6CiAgICAgICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgYWxsIG9mIHRoZSBhYm92ZT8KICAgICAg
ICAgcG9zID0gbW9kaWZ5RXh0ZW5kaW5nRm9yd2FyZChncmFudWxhcml0eSk7CisgICAgICAgIGJy
ZWFrOworICAgIC8vIEZJWE1FOiByZW1vdmUgbGF0ZXIuCisgICAgY2FzZSBXZWJLaXRWaXN1YWxX
b3JkR3JhbnVsYXJpdHk6CisgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gcG9zOwog
fQpAQCAtNDg2LDYgKzQ5MCw5IEBAIFZpc2libGVQb3NpdGlvbiBTZWxlY3Rpb25Db250cm9sbGVy
Ojptb2QKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcG9zID0gZW5kT2ZEb2N1bWVudChwb3Mp
OwogICAgICAgICBicmVhazsKKyAgICAvLyBGSVhNRTogcmVtb3ZlIGxhdGVyLgorICAgIGNhc2Ug
V2ViS2l0VmlzdWFsV29yZEdyYW51bGFyaXR5OgorICAgICAgICBicmVhazsKICAgICB9CiAgICAg
CiAgICAgcmV0dXJuIHBvczsKQEAgLTUxNyw2ICs1MjQsOSBAQCBWaXNpYmxlUG9zaXRpb24gU2Vs
ZWN0aW9uQ29udHJvbGxlcjo6bW9kCiAgICAgY2FzZSBMaW5lQm91bmRhcnk6CiAgICAgICAgIHBv
cyA9IHJpZ2h0Qm91bmRhcnlPZkxpbmUoc3RhcnRGb3JQbGF0Zm9ybSgpLCBkaXJlY3Rpb25PZkVu
Y2xvc2luZ0Jsb2NrKCkpOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIFdlYktpdFZpc3VhbFdv
cmRHcmFudWxhcml0eToKKyAgICAgICAgcG9zID0gcmlnaHRXb3JkUG9zaXRpb24oVmlzaWJsZVBv
c2l0aW9uKG1fc2VsZWN0aW9uLmV4dGVudCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKSk7Cisg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gcG9zOwogfQpAQCAtNTY1LDYgKzU3NSw5
IEBAIFZpc2libGVQb3NpdGlvbiBTZWxlY3Rpb25Db250cm9sbGVyOjptb2QKICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgcG9zID0gZW5kT2ZEb2N1bWVudChwb3MpOwogICAgICAgICBicmVhazsK
KyAgICAvLyBGSVhNRTogcmVtb3ZlIGxhdGVyLgorICAgIGNhc2UgV2ViS2l0VmlzdWFsV29yZEdy
YW51bGFyaXR5OgorICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIHBvczsKIH0KQEAg
LTYwNCw2ICs2MTcsMTAgQEAgVmlzaWJsZVBvc2l0aW9uIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om1v
ZAogICAgIGNhc2UgUGFyYWdyYXBoQm91bmRhcnk6CiAgICAgY2FzZSBEb2N1bWVudEJvdW5kYXJ5
OgogICAgICAgICBwb3MgPSBtb2RpZnlFeHRlbmRpbmdCYWNrd2FyZChncmFudWxhcml0eSk7Cisg
ICAgICAgIGJyZWFrOworICAgIC8vIEZJWE1FOiByZW1vdmUgbGF0ZXIuCisgICAgY2FzZSBXZWJL
aXRWaXN1YWxXb3JkR3JhbnVsYXJpdHk6CisgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1
cm4gcG9zOwogfQpAQCAtNjQ4LDYgKzY2NSw5IEBAIFZpc2libGVQb3NpdGlvbiBTZWxlY3Rpb25D
b250cm9sbGVyOjptb2QKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcG9zID0gc3RhcnRPZkRv
Y3VtZW50KHBvcyk7CiAgICAgICAgIGJyZWFrOworICAgIC8vIEZJWE1FOiByZW1vdmUgbGF0ZXIu
CisgICAgY2FzZSBXZWJLaXRWaXN1YWxXb3JkR3JhbnVsYXJpdHk6CisgICAgICAgIGJyZWFrOwog
ICAgIH0KICAgICByZXR1cm4gcG9zOwogfQpAQCAtNjc4LDYgKzY5OCw5IEBAIFZpc2libGVQb3Np
dGlvbiBTZWxlY3Rpb25Db250cm9sbGVyOjptb2QKICAgICBjYXNlIExpbmVCb3VuZGFyeToKICAg
ICAgICAgcG9zID0gbGVmdEJvdW5kYXJ5T2ZMaW5lKHN0YXJ0Rm9yUGxhdGZvcm0oKSwgZGlyZWN0
aW9uT2ZFbmNsb3NpbmdCbG9jaygpKTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXZWJLaXRW
aXN1YWxXb3JkR3JhbnVsYXJpdHk6CisgICAgICAgIHBvcyA9IGxlZnRXb3JkUG9zaXRpb24oVmlz
aWJsZVBvc2l0aW9uKG1fc2VsZWN0aW9uLmV4dGVudCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgp
KSk7CisgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gcG9zOwogfQpAQCAtNzIwLDYg
Kzc0Myw5IEBAIFZpc2libGVQb3NpdGlvbiBTZWxlY3Rpb25Db250cm9sbGVyOjptb2QKICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgcG9zID0gc3RhcnRPZkRvY3VtZW50KHBvcyk7CiAgICAgICAg
IGJyZWFrOworICAgIC8vIEZJWE1FOiByZW1vdmUgbGF0ZXIuCisgICAgY2FzZSBXZWJLaXRWaXN1
YWxXb3JkR3JhbnVsYXJpdHk6CisgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gcG9z
OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0R3JhbnVsYXJpdHkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRHcmFudWxhcml0eS5oCShyZXZp
c2lvbiA4MjI0OSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEdyYW51bGFyaXR5LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDEwIEBAIGVudW0gVGV4dEdyYW51bGFyaXR5IHsK
ICAgICBTZW50ZW5jZUJvdW5kYXJ5LAogICAgIExpbmVCb3VuZGFyeSwKICAgICBQYXJhZ3JhcGhC
b3VuZGFyeSwKLSAgICBEb2N1bWVudEJvdW5kYXJ5CisgICAgRG9jdW1lbnRCb3VuZGFyeSwKKyAg
ICAvLyBGSVhNRTogdGhpcyBpcyBhZGRlZCB0ZW1wb3JhcmlseSBmb3IgZXhwZXJpbWVudCB3aXRo
IHZpc3VhbGx5IG1vdmUKKyAgICAvLyBjYXJldCBieSB3b3JkR3JhbnVsYXJpdHkuIE9uY2UgYWxs
IHBhdGNoZXMgYXJlIGxhbmRlZCwgaXQgc2hvdWxkIGJlIHJlbW92ZWQuCisgICAgV2ViS2l0Vmlz
dWFsV29yZEdyYW51bGFyaXR5CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1Zpc2libGVTZWxlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAJKHJldmlzaW9uIDgyMjQ5KQorKysgU291cmNlL1dlYkNv
cmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgwLDYg
KzM4MCw5IEBAIHZvaWQgVmlzaWJsZVNlbGVjdGlvbjo6c2V0U3RhcnRBbmRFbmRGcm8KICAgICAg
ICAgICAgIG1fc3RhcnQgPSBzdGFydE9mU2VudGVuY2UoVmlzaWJsZVBvc2l0aW9uKG1fc3RhcnQs
IG1fYWZmaW5pdHkpKS5kZWVwRXF1aXZhbGVudCgpOwogICAgICAgICAgICAgbV9lbmQgPSBlbmRP
ZlNlbnRlbmNlKFZpc2libGVQb3NpdGlvbihtX2VuZCwgbV9hZmZpbml0eSkpLmRlZXBFcXVpdmFs
ZW50KCk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgLy8gRklYTUU6IHJlbW92ZSBsYXRl
ci4KKyAgICAgICAgY2FzZSBXZWJLaXRWaXN1YWxXb3JkR3JhbnVsYXJpdHk6CisgICAgICAgICAg
ICBicmVhazsKICAgICB9CiAgICAgCiAgICAgLy8gTWFrZSBzdXJlIHdlIGRvIG5vdCBoYXZlIGEg
ZGFuZ2xpbmcgc3RhcnQgb3IgZW5kLgpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy92aXNp
YmxlX3VuaXRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3Zpc2li
bGVfdW5pdHMuY3BwCShyZXZpc2lvbiA4MjI0OSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
dmlzaWJsZV91bml0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNs
dWRlICJUZXh0QnJlYWtJdGVyYXRvci5oIgogI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgogI2lu
Y2x1ZGUgIlZpc2libGVQb3NpdGlvbi5oIgorI2luY2x1ZGUgIlZpc2libGVTZWxlY3Rpb24uaCIK
ICNpbmNsdWRlICJodG1sZWRpdGluZy5oIgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUu
aD4KIApAQCAtMTIyOCw0ICsxMjI5LDEyMCBAQCBWaXNpYmxlUG9zaXRpb24gcmlnaHRCb3VuZGFy
eU9mTGluZShjb25zCiAgICAgcmV0dXJuIGRpcmVjdGlvbiA9PSBMVFIgPyBsb2dpY2FsRW5kT2ZM
aW5lKGMpIDogbG9naWNhbFN0YXJ0T2ZMaW5lKGMpOwogfQogCitzdGF0aWMgY29uc3QgaW50IGlu
dmFsaWRPZmZzZXQgPSAtMTsKKyAgICAKKy8vICdsYXN0JyByZXByZXNlbnRzIHdoZXRoZXIgdGhl
IHJldHVybmVkIFZpc2libGVQb3NpdGlvbiBpcyB0aGUgbGFzdCB3b3JkIGJyZWFrIGluIHRoZSBi
b3ggCisvLyBvciB0aGVyZSBpcyBubyBtb3JlIHdvcmQgYnJlYWtzIGluIHRoZSBib3ggKGluIHdo
aWNoIGNhc2UsIHRoZSByZXR1cm5lZCBWaXNpYmxlUG9zaXRpb24gaXMgYSBudWxsIHBvc2l0aW9u
KS4KK3N0YXRpYyBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXNXb3JkQnJlYWtJbkJveEluc2lkZUJs
b2NrV2l0aFNhbWVEaXJlY3Rpb25hbGl0eShjb25zdCBJbmxpbmVCb3gqIGJveCwgY29uc3QgVmlz
aWJsZVBvc2l0aW9uJiBwcmV2aW91c1dvcmRCcmVhaywgaW50JiBvZmZzZXRPZldvcmRCcmVhaykK
K3sKKyAgICBib29sIGhhc1NlZW5Xb3JkQnJlYWtJblRoaXNCb3ggPSBwcmV2aW91c1dvcmRCcmVh
ay5pc05vdE51bGwoKTsKKyAgICBJbmxpbmVCb3gqIGJveENvbnRhaW5pbmdQcmV2aW91c1dvcmRC
cmVhazsKKyAgICBWaXNpYmxlUG9zaXRpb24gd29yZEJyZWFrOworICAgIC8vIFdoZW4gYm94IGRp
cmVjdGlvbmFsaXR5IGlzIHRoZSBzYW1lIGFzIGJsb2NrIGRpcmVjdGlvbmFsaXR5LCBmb3IgTFRS
IGJveCwgb2Zmc2V0cyBjb2xsZWN0ZWQgZnJvbSB2aXN1YWxseSByaWdodCB0byB2aXN1YWxseSBs
ZWZ0LgorICAgIC8vIEZvciBSVEwgYm94LCBvZmZzZXRzIGNvbGxlY3RlZCBmcm9tIHZpc3VhbGx5
IGxlZnQgdG8gIHZpc3VhbGx5IHJpZ2h0LiBvZmZzZXQgdmFsdWVzIGFyZSBpbiBkZXNjZW5kaW5n
IG9yZGVyLgorICAgIHdvcmRCcmVhayA9IGhhc1NlZW5Xb3JkQnJlYWtJblRoaXNCb3ggPyBwcmV2
aW91c1dvcmRCcmVhayA6IFBvc2l0aW9uKGJveC0+cmVuZGVyZXIoKS0+bm9kZSgpLCBib3gtPmNh
cmV0TWF4T2Zmc2V0KCksIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpOworCisg
ICAgaWYgKCFoYXNTZWVuV29yZEJyZWFrSW5UaGlzQm94ICYmICgoYm94LT5pc0xlZnRUb1JpZ2h0
RGlyZWN0aW9uKCkgJiYgYm94LT5uZXh0TGVhZkNoaWxkKCkpIHx8ICghYm94LT5pc0xlZnRUb1Jp
Z2h0RGlyZWN0aW9uKCkgJiYgYm94LT5wcmV2TGVhZkNoaWxkKCkpKSkgeworICAgICAgICAvLyBB
ZGQgdGhlIHJpZ2h0bW9zdChmb3IgTFRSIGJveCkvbGVmdG1vc3QoZm9yIFJUTCBib3gpIGJvdW5k
YXJ5IGFzIHdvcmRicmVhayB0byBoYW5kbGUgbXVsdGktc3BhY2VzLiAKKyAgICAgICAgLy8gRm9y
IGV4YW1wbGUgIjxkaXY+YWJjICAgIGRlZiBoaWogICAgb3BxIHJzdDwvZGl2PiIsCisgICAgICAg
IC8vIHdoZW4gY3Vyc29yIGlzIGltbWVkaWF0ZWx5IHRvIHRoZSByaWdodCBvZiAib3BxIiwgaXRz
IHByZXZpb3VzIHdvcmQgYm91bmRhcnkncyBvZmZzZXQgcmV0dXJuZWQgZnJvbSBwcmV2aW91c1dv
cmRQb3NpdGlvbigpIGlzIDE1LAorICAgICAgICAvLyB3aGljaCBpcyBpbW1lZGlhdGVseSB0byB0
aGUgcmlnaHQgb2YgImhpaiAiLCBhbmQgd2hpY2ggaXMgbm90IGluIHRoZSBzYW1lIGJveCBhcyAi
b3BxIiwKKyAgICAgICAgLy8gc28sIGl0IHdvbnQgYmUgYWRkZWQgYXMgYSB3b3JkIGJyZWFrIG9m
IGJveCAib3BxIHJzdCIuIEl0IGhhcyB0byBiZSBhZGRlZCBoZXJlIGFzIGEgd29yZCBicmVhay4K
KyAgICAgICAgLy8gT3Igd2UgbmVlZCB0byBwcm92aWRlIGEgd2F5IG5vdCB0byBjYW5vbmljYWxp
emUodXBzdHJlYW0pIFZpc2libGVQb3NpdGlvbiBpbiBpdHMgY29uc3RydWN0b3IsIAorICAgICAg
ICAvLyBzbyBwcmV2aW91c1dvcmRQb3NpdGlvbigpIG9mICJvcHEiIGNvdWxkIHJldHVybiBvZmZz
ZXQgMTgsIHdoaWNoIGlzIGltbWVkaWF0ZWx5IHRvIHRoZSBsZWZ0IG9mICJvcHEiLCBpbnN0ZWFk
LgorICAgICAgICB3b3JkQnJlYWsuZ2V0SW5saW5lQm94QW5kT2Zmc2V0KGJveENvbnRhaW5pbmdQ
cmV2aW91c1dvcmRCcmVhaywgb2Zmc2V0T2ZXb3JkQnJlYWspOworICAgICAgICBpZiAoYm94Q29u
dGFpbmluZ1ByZXZpb3VzV29yZEJyZWFrID09IGJveCkKKyAgICAgICAgICAgIHJldHVybiB3b3Jk
QnJlYWs7CisgICAgfQorICAgIHdvcmRCcmVhayA9IHByZXZpb3VzV29yZFBvc2l0aW9uKHdvcmRC
cmVhayk7CisgICAgaWYgKHByZXZpb3VzV29yZEJyZWFrICE9IHdvcmRCcmVhaykgeworICAgICAg
ICB3b3JkQnJlYWsuZ2V0SW5saW5lQm94QW5kT2Zmc2V0KGJveENvbnRhaW5pbmdQcmV2aW91c1dv
cmRCcmVhaywgb2Zmc2V0T2ZXb3JkQnJlYWspOworICAgICAgICBpZiAoYm94Q29udGFpbmluZ1By
ZXZpb3VzV29yZEJyZWFrID09IGJveCkKKyAgICAgICAgICAgIHJldHVybiB3b3JkQnJlYWs7Cisg
ICAgfQorICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKK30KKworc3RhdGljIFZpc2libGVQ
b3NpdGlvbiB3b3JkQm91bmRhcnlJbkJveChjb25zdCBJbmxpbmVCb3gqIGJveCwgaW50IG9mZnNl
dCwgV2ViQ29yZTo6U2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvblRvU2VhcmNoLCBUZXh0RGly
ZWN0aW9uIGJsb2NrRGlyZWN0aW9uKQoreworICAgIC8vIEluIG9yZGVyIHRvIGdldCB0aGUgY29y
cmVjdCB3b3JkIGJvdW5kYXJ5ICh0aGUgb25lIGJlZm9yZSBzcGFjZSBvciB0aGUgb25lIGFmdGVy
IHNwYWNlKSwgCisgICAgLy8gd29yZCBib3VuZGFyeSBpcyBzZWFyY2hlZCBmcm9tIHZpc3VhbGx5
IGxlZnQgdG8gcmlnaHQgZm9yIFJUTCBibG9jayBhbmQgaXMgc2VhcmNoZWQgZnJvbSB2aXN1YWxs
eSByaWdodCB0byBsZWZ0IGZvciBMVFIgYmxvY2suCisgICAgaWYgKChkaXJlY3Rpb25Ub1NlYXJj
aCA9PSBXZWJDb3JlOjpEaXJlY3Rpb25SaWdodCAmJiBibG9ja0RpcmVjdGlvbiA9PSBMVFIpIAor
ICAgICAgICB8fCAoZGlyZWN0aW9uVG9TZWFyY2ggPT0gV2ViQ29yZTo6RGlyZWN0aW9uTGVmdCAm
JiBibG9ja0RpcmVjdGlvbiA9PSBSVEwpKSB7CisgICAgICAgIGludCBvZmZzZXRPZldvcmRCcmVh
azsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHdvcmRCcmVhazsKKyAgICAgICAgZG8geworICAg
ICAgICAgICAgaWYgKGJveC0+ZGlyZWN0aW9uKCkgPT0gYmxvY2tEaXJlY3Rpb24pCisgICAgICAg
ICAgICAgICAgd29yZEJyZWFrID0gcHJldmlvdXNXb3JkQnJlYWtJbkJveEluc2lkZUJsb2NrV2l0
aFNhbWVEaXJlY3Rpb25hbGl0eShib3gsIHdvcmRCcmVhaywgb2Zmc2V0T2ZXb3JkQnJlYWspOwor
ICAgICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGUgJ2Vsc2UnIGNhc2Ugd2hlbiB0aGUg
Ym94IGRpcmVjdGlvbiBpcyBub3QgZXF1YWwgdG8gdGhlIGJsb2NrIGRpcmVjdGlvbi4KKyAgICAg
ICAgICAgIGlmICh3b3JkQnJlYWsuaXNOdWxsKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBpZiAob2Zmc2V0ID09IGludmFsaWRPZmZzZXQgfHwgb2Zmc2V0T2ZXb3JkQnJl
YWsgIT0gb2Zmc2V0KQorICAgICAgICAgICAgICAgIHJldHVybiB3b3JkQnJlYWs7CisgICAgICAg
IH0gd2hpbGUgKDEpOyAgICAgICAgCisgICAgfSBlbHNlIC8vIEZJWE1FIG5vdCBpbXBsZW1lbnRl
ZCB5ZXQuCisgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKKyAgICByZXR1cm4gVmlz
aWJsZVBvc2l0aW9uKCk7Cit9CisKK3N0YXRpYyBWaXNpYmxlUG9zaXRpb24gd29yZEJvdW5kYXJ5
SW5BZGphY2VudEJveGVzKGNvbnN0IElubGluZUJveCogYm94LCBpbnQgb2Zmc2V0LCBXZWJDb3Jl
OjpTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uVG9TZWFyY2gsIFRleHREaXJlY3Rpb24gYmxv
Y2tEaXJlY3Rpb24sIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9uKQorewor
ICAgIGNvbnN0IElubGluZUJveCogYWRqYWNlbnRCb3ggPSBib3g7CisgICAgd2hpbGUgKGFkamFj
ZW50Qm94KSB7CisgICAgICAgIFZpc2libGVQb3NpdGlvbiB3b3JkQnJlYWsgPSB3b3JkQm91bmRh
cnlJbkJveChhZGphY2VudEJveCwgb2Zmc2V0LCBkaXJlY3Rpb25Ub1NlYXJjaCwgYmxvY2tEaXJl
Y3Rpb24pOworICAgICAgICBpZiAoIXdvcmRCcmVhay5pc051bGwoKSkKKyAgICAgICAgICAgIHJl
dHVybiB3b3JkQnJlYWs7CisgICAgICAgIGFkamFjZW50Qm94ID0gKGRpcmVjdGlvblRvU2VhcmNo
ID09IFdlYkNvcmU6OkRpcmVjdGlvbkxlZnQpID8gYWRqYWNlbnRCb3gtPm5leHRMZWFmQ2hpbGQo
KSA6IGFkamFjZW50Qm94LT5wcmV2TGVhZkNoaWxkKCk7CisgICAgICAgIG9mZnNldCA9IGludmFs
aWRPZmZzZXQ7CisgICAgfQorICAgIHJldHVybiB2aXNpYmxlUG9zaXRpb247Cit9CisKK3N0YXRp
YyBWaXNpYmxlUG9zaXRpb24gbGVmdFdvcmRCb3VuZGFyeShjb25zdCBJbmxpbmVCb3gqIGJveCwg
aW50IG9mZnNldCwgVGV4dERpcmVjdGlvbiBibG9ja0RpcmVjdGlvbiwgY29uc3QgVmlzaWJsZVBv
c2l0aW9uJiB2aXNpYmxlUG9zaXRpb24pCit7CisgICAgcmV0dXJuIHdvcmRCb3VuZGFyeUluQWRq
YWNlbnRCb3hlcyhib3gsIG9mZnNldCwgV2ViQ29yZTo6RGlyZWN0aW9uUmlnaHQsIGJsb2NrRGly
ZWN0aW9uLCB2aXNpYmxlUG9zaXRpb24pOworfQorIAorc3RhdGljIFZpc2libGVQb3NpdGlvbiBy
aWdodFdvcmRCb3VuZGFyeShjb25zdCBJbmxpbmVCb3gqIGJveCwgaW50IG9mZnNldCwgVGV4dERp
cmVjdGlvbiBibG9ja0RpcmVjdGlvbiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9z
aXRpb24pCit7CisgICAgcmV0dXJuIHdvcmRCb3VuZGFyeUluQWRqYWNlbnRCb3hlcyhib3gsIG9m
ZnNldCwgV2ViQ29yZTo6RGlyZWN0aW9uTGVmdCwgYmxvY2tEaXJlY3Rpb24sIHZpc2libGVQb3Np
dGlvbik7Cit9CisKK1Zpc2libGVQb3NpdGlvbiBsZWZ0V29yZFBvc2l0aW9uKGNvbnN0IFZpc2li
bGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9uKQoreworICAgIC8vIEluIExUUiBibG9jaywgY3Ry
bC1hcnJvdyBtb3ZlcyBjdXJzb3IgdG8gdGhlIGxlZnQgYm91bmRhcnkgb2Ygd29yZHMuCisgICAg
Ly8gSW4gUlRMIGJsb2NrLCBjdHJsLWFycm93IG1vdmVzIGN1cnNvciB0byB0aGUgcmlnaHQgYm91
bmRhcnkgb2Ygd29yZHMuCisgICAgSW5saW5lQm94KiBib3g7CisgICAgaW50IG9mZnNldDsKKyAg
ICB2aXNpYmxlUG9zaXRpb24uZ2V0SW5saW5lQm94QW5kT2Zmc2V0KGJveCwgb2Zmc2V0KTsKKyAg
ICBUZXh0RGlyZWN0aW9uIGJsb2NrRGlyZWN0aW9uID0gZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9j
ayh2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKSk7CisgICAgCisgICAgLy8gRklYTUU6
IElmIHRoZSBib3gncyBkaXJlY3Rpb25hbGl0eSBpcyB0aGUgc2FtZSBhcyB0aGF0IG9mIHRoZSBl
bmNsb3NpbmcgYmxvY2ssIHdoZW4gdGhlIG9mZnNldCBpcyBhdCB0aGUgYm94IGJvdW5kYXJ5Cisg
ICAgLy8gYW5kIHRoZSBkaXJlY3Rpb24gaXMgdG93YXJkcyBpbnNpZGUgdGhlIGJveCwgZG8gSSBz
dGlsbCBuZWVkIHRvIG1ha2UgaXQgYSBzcGVjaWFsIGNhc2U/IEZvciBleGFtcGxlLCBhIExUUiBi
b3ggaW5zaWRlIGEgTFRSIGJsb2NrLAorICAgIC8vIHdoZW4gb2Zmc2V0IGlzIGF0IGJveCdzIGNh
cmV0TWluT2Zmc2V0IGFuZCB0aGUgZGlyZWN0aW9uIGlzIERpcmVjdGlvblJpZ2h0LCBzaG91bGQg
aXQgYmUgdGFrZW4gY2FyZSBhcyBhIGdlbmVyYWwgY2FzZT8KKyAgICBpZiAob2Zmc2V0ID09IGJv
eC0+Y2FyZXRMZWZ0bW9zdE9mZnNldCgpKQorICAgICAgICByZXR1cm4gbGVmdFdvcmRCb3VuZGFy
eShib3gtPnByZXZMZWFmQ2hpbGQoKSwgaW52YWxpZE9mZnNldCwgYmxvY2tEaXJlY3Rpb24sIHZp
c2libGVQb3NpdGlvbik7CisgICAgZWxzZSBpZiAob2Zmc2V0ID09IGJveC0+Y2FyZXRSaWdodG1v
c3RPZmZzZXQoKSkKKyAgICAgICAgcmV0dXJuIGxlZnRXb3JkQm91bmRhcnkoYm94LCBvZmZzZXQs
IGJsb2NrRGlyZWN0aW9uLCB2aXNpYmxlUG9zaXRpb24pOworICAgIAorICAgIC8vIEZJWE1FOiBO
b3QgaW1wbGVtZW50ZWQuCisgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOworfQorCitWaXNp
YmxlUG9zaXRpb24gcmlnaHRXb3JkUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNp
YmxlUG9zaXRpb24pCit7CisgICAgSW5saW5lQm94KiBib3g7CisgICAgaW50IG9mZnNldDsKKyAg
ICB2aXNpYmxlUG9zaXRpb24uZ2V0SW5saW5lQm94QW5kT2Zmc2V0KGJveCwgb2Zmc2V0KTsKKyAg
ICBUZXh0RGlyZWN0aW9uIGJsb2NrRGlyZWN0aW9uID0gZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9j
ayh2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKSk7CisgICAgCisgICAgaWYgKG9mZnNl
dCA9PSBib3gtPmNhcmV0TGVmdG1vc3RPZmZzZXQoKSkKKyAgICAgICAgcmV0dXJuIHJpZ2h0V29y
ZEJvdW5kYXJ5KGJveCwgb2Zmc2V0LCBibG9ja0RpcmVjdGlvbiwgdmlzaWJsZVBvc2l0aW9uKTsK
KyAgICBlbHNlIGlmIChvZmZzZXQgPT0gYm94LT5jYXJldFJpZ2h0bW9zdE9mZnNldCgpKQorICAg
ICAgICByZXR1cm4gcmlnaHRXb3JkQm91bmRhcnkoYm94LT5uZXh0TGVhZkNoaWxkKCksIC0xLCBi
bG9ja0RpcmVjdGlvbiwgdmlzaWJsZVBvc2l0aW9uKTsKKyAgICAKKyAgICAvLyBGSVhNRTogTm90
IGltcGxlbWVudGVkLgorICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKK30KKwogfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmgJKHJldmlzaW9uIDgyMjQ5KQor
KysgU291cmNlL1dlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQxLDYgKzQxLDggQEAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZXb3JkKGNvbnN0IFZpc2li
bAogVmlzaWJsZVBvc2l0aW9uIGVuZE9mV29yZChjb25zdCBWaXNpYmxlUG9zaXRpb24gJiwgRVdv
cmRTaWRlID0gUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KTsKIFZpc2libGVQb3NpdGlvbiBwcmV2aW91
c1dvcmRQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24gJik7CiBWaXNpYmxlUG9zaXRpb24g
bmV4dFdvcmRQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24gJik7CitWaXNpYmxlUG9zaXRp
b24gcmlnaHRXb3JkUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CitWaXNpYmxlUG9z
aXRpb24gbGVmdFdvcmRQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKIAogLy8gc2Vu
dGVuY2VzCiBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZlNlbnRlbmNlKGNvbnN0IFZpc2libGVQb3Np
dGlvbiAmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAJKHJldmlzaW9u
IDgyMjQ5KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMzIsNiArMzMyLDggQEAgdm9pZCBET01TZWxlY3Rpb246Om1vZGlmeShjb25z
dCBTdHJpbmcmIAogICAgICAgICBncmFudWxhcml0eSA9IFBhcmFncmFwaEJvdW5kYXJ5OwogICAg
IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGdyYW51bGFyaXR5U3RyaW5nLCAiZG9jdW1lbnRi
b3VuZGFyeSIpKQogICAgICAgICBncmFudWxhcml0eSA9IERvY3VtZW50Qm91bmRhcnk7CisgICAg
ZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZ3JhbnVsYXJpdHlTdHJpbmcsICItd2Via2l0LXZp
c3VhbC13b3JkIikpCisgICAgICAgIGdyYW51bGFyaXR5ID0gV2ViS2l0VmlzdWFsV29yZEdyYW51
bGFyaXR5OwogICAgIGVsc2UKICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNp
b24gODI0MzIpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDE5IEBACisyMDExLTAzLTMwICBYaWFvbWVpIEppICA8eGppQGNocm9taXVtLm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOZWVkIGEg
c2hvcnQgZGVzY3JpcHRpb24gYW5kIGJ1ZyBVUkwgKE9PUFMhKQorCisgICAgICAgICogV2ViS2l0
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKKzIwMTEtMDMtMzAgIFhpYW9tZWkgSmkgIDx4
amlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIE5lZWQgYSBzaG9ydCBkZXNjcmlwdGlvbiBhbmQgYnVnIFVSTCAoT09QUyEpCisK
KyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKwogMjAxMS0wMy0y
OSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CiAKICAgICAgICAgVXBkYXRl
IFdlYktpdCBMb2NhbGl6YWJsZS5zdHJpbmdzIHRvIG9ubHkgY29udGFpbiBXZWJLaXQvd2luIHN0
cmluZ3MuCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDgyMjQ5KQorKysgU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTY5Myw3ICsxNjkzLDYgQEAK
IAkJCWlzYSA9IFBCWFByb2plY3Q7CiAJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMTQ5QzI4
MzIwODkwMkIwRjAwOEE5RUZDIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYUHJv
amVjdCAiV2ViS2l0IiAqLzsKIAkJCWNvbXBhdGliaWxpdHlWZXJzaW9uID0gIlhjb2RlIDIuNCI7
Ci0JCQlkZXZlbG9wbWVudFJlZ2lvbiA9IEVuZ2xpc2g7CiAJCQloYXNTY2FubmVkRm9yRW5jb2Rp
bmdzID0gMTsKIAkJCWtub3duUmVnaW9ucyA9ICgKIAkJCQlFbmdsaXNoLApJbmRleDogTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2
aXNpb24gODI0MzIpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxMyBAQAorMjAxMS0wMy0zMCAgWGlhb21laSBKaSAgPHhqaUBjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRXhwZXJp
bWVudCB3aXRoIG1vdmluZyBjYXJldCBieSB3b3JkIGluIHZpc3VhbCBvcmRlci4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU3MzM2CisKKyAgICAgICAg
KiBlZGl0aW5nL3NlbGVjdGlvbi9tb3ZlLWJ5LXdvcmQtdmlzdWFsbHktZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL3NlbGVjdGlvbi9tb3ZlLWJ5LXdvcmQtdmlzdWFsbHku
aHRtbDogQWRkZWQuCisKIDIwMTEtMDMtMzAgIEFkYW0gUm9iZW4gIDxhcm9iZW5AYXBwbGUuY29t
PgogCiAgICAgICAgIE1ha2UgZm9udCBmYWxsYmFjayBvbiBXaW5kb3dzIGluIG5ldyBIZWJyZXct
Y29udGFpbmluZyB0ZXN0cyBhZGRlZCBpbiByODI0MTkgbWF0Y2ggTWFjCkluZGV4OiBMYXlvdXRU
ZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9tb3ZlLWJ5LXdvcmQtdmlzdWFsbHktZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL21vdmUtYnktd29y
ZC12aXN1YWxseS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9lZGl0
aW5nL3NlbGVjdGlvbi9tb3ZlLWJ5LXdvcmQtdmlzdWFsbHktZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDExOSBAQAorCis9PT09PT09PSBNb3ZlIEJ5IFdvcmQgPT09PQorVGVz
dCAxLCBMVFI6CitNb3ZlIHJpZ2h0IGJ5IG9uZSB3b3JkCisiYWJjIGRlZiBoaWogb3BxIHJzdCJb
MCwgMF0gRkFJTCBleHBlY3RlZDogNAorImFiYyBkZWYgaGlqIG9wcSByc3QiWzQsIDRdIEZBSUwg
ZXhwZWN0ZWQ6IDgKKyJhYmMgZGVmIGhpaiBvcHEgcnN0Ils4LCA4XSBGQUlMIGV4cGVjdGVkOiAx
MgorImFiYyBkZWYgaGlqIG9wcSByc3QiWzEyLCAxMl0gRkFJTCBleHBlY3RlZDogMTYKKyJhYmMg
ZGVmIGhpaiBvcHEgcnN0IlsxNiwgMTZdIEZBSUwgZXhwZWN0ZWQ6IDE5CisiYWJjIGRlZiBoaWog
b3BxIHJzdCJbMTksIDE5XQorTW92ZSBsZWZ0IGJ5IG9uZSB3b3JkCisiYWJjIGRlZiBoaWogb3Bx
IHJzdCJbMTksIDE2XQorImFiYyBkZWYgaGlqIG9wcSByc3QiWzE2LCAxNl0gRkFJTCBleHBlY3Rl
ZDogMTIKKyJhYmMgZGVmIGhpaiBvcHEgcnN0IlsxMiwgMTJdIEZBSUwgZXhwZWN0ZWQ6IDgKKyJh
YmMgZGVmIGhpaiBvcHEgcnN0Ils4LCA4XSBGQUlMIGV4cGVjdGVkOiA0CisiYWJjIGRlZiBoaWog
b3BxIHJzdCJbNCwgNF0gRkFJTCBleHBlY3RlZDogMAorImFiYyBkZWYgaGlqIG9wcSByc3QiWzAs
IDBdCitUZXN0IDIsIFJUTDoKK01vdmUgbGVmdCBieSBvbmUgd29yZAorImFiYyBkZWYgaGlqIG9w
cSByc3QiWzAsIDBdIEZBSUwgZXhwZWN0ZWQ6IDE1CisiYWJjIGRlZiBoaWogb3BxIHJzdCJbMTUs
IDE1XSBGQUlMIGV4cGVjdGVkOiAxMQorImFiYyBkZWYgaGlqIG9wcSByc3QiWzExLCAxMV0gRkFJ
TCBleHBlY3RlZDogNworImFiYyBkZWYgaGlqIG9wcSByc3QiWzcsIDddIEZBSUwgZXhwZWN0ZWQ6
IDMKKyJhYmMgZGVmIGhpaiBvcHEgcnN0IlszLCAzXSBGQUlMIGV4cGVjdGVkOiAxOQorImFiYyBk
ZWYgaGlqIG9wcSByc3QiWzE5LCAxOV0KK01vdmUgcmlnaHQgYnkgb25lIHdvcmQKKyJhYmMgZGVm
IGhpaiBvcHEgcnN0IlsxOSwgMTldIEZBSUwgZXhwZWN0ZWQ6IDMKKyJhYmMgZGVmIGhpaiBvcHEg
cnN0IlszLCAzXSBGQUlMIGV4cGVjdGVkOiA3CisiYWJjIGRlZiBoaWogb3BxIHJzdCJbNywgN10g
RkFJTCBleHBlY3RlZDogMTEKKyJhYmMgZGVmIGhpaiBvcHEgcnN0IlsxMSwgMTFdIEZBSUwgZXhw
ZWN0ZWQ6IDE1CisiYWJjIGRlZiBoaWogb3BxIHJzdCJbMTUsIDE1XSBGQUlMIGV4cGVjdGVkOiAw
CisiYWJjIGRlZiBoaWogb3BxIHJzdCJbMCwgMF0KK1Rlc3QgMywgTFRSOgorTW92ZSByaWdodCBi
eSBvbmUgd29yZAorIlpaWiBRUVEgQkJCIENDQyBYWFgiWzAsIDBdIEZBSUwgZXhwZWN0ZWQ6IDE1
CisiWlpaIFFRUSBCQkIgQ0NDIFhYWCJbMTUsIDE1XSBGQUlMIGV4cGVjdGVkOiAxMQorIlpaWiBR
UVEgQkJCIENDQyBYWFgiWzExLCAxMV0gRkFJTCBleHBlY3RlZDogNworIlpaWiBRUVEgQkJCIEND
QyBYWFgiWzcsIDddIEZBSUwgZXhwZWN0ZWQ6IDMKKyJaWlogUVFRIEJCQiBDQ0MgWFhYIlszLCAz
XSBGQUlMIGV4cGVjdGVkOiAxOQorIlpaWiBRUVEgQkJCIENDQyBYWFgiWzE5LCAxOV0KK01vdmUg
bGVmdCBieSBvbmUgd29yZAorIlpaWiBRUVEgQkJCIENDQyBYWFgiWzE5LCAxOV0gRkFJTCBleHBl
Y3RlZDogMworIlpaWiBRUVEgQkJCIENDQyBYWFgiWzMsIDNdIEZBSUwgZXhwZWN0ZWQ6IDcKKyJa
WlogUVFRIEJCQiBDQ0MgWFhYIls3LCA3XSBGQUlMIGV4cGVjdGVkOiAxMQorIlpaWiBRUVEgQkJC
IENDQyBYWFgiWzExLCAxMV0gRkFJTCBleHBlY3RlZDogMTUKKyJaWlogUVFRIEJCQiBDQ0MgWFhY
IlsxNSwgMTVdIEZBSUwgZXhwZWN0ZWQ6IDAKKyJaWlogUVFRIEJCQiBDQ0MgWFhYIlswLCAwXQor
VGVzdCA0LCBSVEw6CitNb3ZlIGxlZnQgYnkgb25lIHdvcmQKKyJaWlogUVFRIEJCQiBDQ0MgWFhY
IlswLCAwXSBGQUlMIGV4cGVjdGVkOiA0CisiWlpaIFFRUSBCQkIgQ0NDIFhYWCJbNCwgNF0gRkFJ
TCBleHBlY3RlZDogOAorIlpaWiBRUVEgQkJCIENDQyBYWFgiWzgsIDhdIEZBSUwgZXhwZWN0ZWQ6
IDEyCisiWlpaIFFRUSBCQkIgQ0NDIFhYWCJbMTIsIDEyXSBGQUlMIGV4cGVjdGVkOiAxNgorIlpa
WiBRUVEgQkJCIENDQyBYWFgiWzE2LCAxNl0gRkFJTCBleHBlY3RlZDogMTkKKyJaWlogUVFRIEJC
QiBDQ0MgWFhYIlsxOSwgMTldCitNb3ZlIHJpZ2h0IGJ5IG9uZSB3b3JkCisiWlpaIFFRUSBCQkIg
Q0NDIFhYWCJbMTksIDE2XQorIlpaWiBRUVEgQkJCIENDQyBYWFgiWzE2LCAxNl0gRkFJTCBleHBl
Y3RlZDogMTIKKyJaWlogUVFRIEJCQiBDQ0MgWFhYIlsxMiwgMTJdIEZBSUwgZXhwZWN0ZWQ6IDgK
KyJaWlogUVFRIEJCQiBDQ0MgWFhYIls4LCA4XSBGQUlMIGV4cGVjdGVkOiA0CisiWlpaIFFRUSBC
QkIgQ0NDIFhYWCJbNCwgNF0gRkFJTCBleHBlY3RlZDogMAorIlpaWiBRUVEgQkJCIENDQyBYWFgi
WzAsIDBdCitUZXN0IDUsIExUUjoKK01vdmUgcmlnaHQgYnkgb25lIHdvcmQKKyJhYmMgZGVmIFpR
QiBSSUcgdXZ3IHh5eiJbMCwgMF0gRkFJTCBleHBlY3RlZDogNAorImFiYyBkZWYgWlFCIFJJRyB1
dncgeHl6Ils0LCA0XSBGQUlMIGV4cGVjdGVkOiA4CisiYWJjIGRlZiBaUUIgUklHIHV2dyB4eXoi
WzgsIDhdIEZBSUwgZXhwZWN0ZWQ6IDExCisiYWJjIGRlZiBaUUIgUklHIHV2dyB4eXoiWzExLCAx
MV0gRkFJTCBleHBlY3RlZDogMTYKKyJhYmMgZGVmIFpRQiBSSUcgdXZ3IHh5eiJbMTYsIDE2XSBG
QUlMIGV4cGVjdGVkOiAyMAorImFiYyBkZWYgWlFCIFJJRyB1dncgeHl6IlsyMCwgMjBdIEZBSUwg
ZXhwZWN0ZWQ6IDIzCisiYWJjIGRlZiBaUUIgUklHIHV2dyB4eXoiWzIzLCAyM10KK01vdmUgbGVm
dCBieSBvbmUgd29yZAorImFiYyBkZWYgWlFCIFJJRyB1dncgeHl6IlsyMywgMjBdCisiYWJjIGRl
ZiBaUUIgUklHIHV2dyB4eXoiWzIwLCAyMF0gRkFJTCBleHBlY3RlZDogMTYKKyJhYmMgZGVmIFpR
QiBSSUcgdXZ3IHh5eiJbMTYsIDE2XSBGQUlMIGV4cGVjdGVkOiAxMQorImFiYyBkZWYgWlFCIFJJ
RyB1dncgeHl6IlsxMSwgMTFdIEZBSUwgZXhwZWN0ZWQ6IDgKKyJhYmMgZGVmIFpRQiBSSUcgdXZ3
IHh5eiJbOCwgNF0KKyJhYmMgZGVmIFpRQiBSSUcgdXZ3IHh5eiJbNCwgNF0gRkFJTCBleHBlY3Rl
ZDogMAorImFiYyBkZWYgWlFCIFJJRyB1dncgeHl6IlswLCAwXQorVGVzdCA2LCBSVEw6CitNb3Zl
IGxlZnQgYnkgb25lIHdvcmQKKyJhYmMgZGVmIFpRQiBSSUcgdXZ3IHh5eiJbMCwgMF0gRkFJTCBl
eHBlY3RlZDogMworImFiYyBkZWYgWlFCIFJJRyB1dncgeHl6IlszLCAzXSBGQUlMIGV4cGVjdGVk
OiA4CisiYWJjIGRlZiBaUUIgUklHIHV2dyB4eXoiWzgsIDhdIEZBSUwgZXhwZWN0ZWQ6IDEyCisi
YWJjIGRlZiBaUUIgUklHIHV2dyB4eXoiWzEyLCAxMl0gRkFJTCBleHBlY3RlZDogMTYKKyJhYmMg
ZGVmIFpRQiBSSUcgdXZ3IHh5eiJbMTYsIDE2XSBGQUlMIGV4cGVjdGVkOiAxOQorImFiYyBkZWYg
WlFCIFJJRyB1dncgeHl6IlsxOSwgMTldIEZBSUwgZXhwZWN0ZWQ6IDIzCisiYWJjIGRlZiBaUUIg
UklHIHV2dyB4eXoiWzIzLCAyM10KK01vdmUgcmlnaHQgYnkgb25lIHdvcmQKKyJhYmMgZGVmIFpR
QiBSSUcgdXZ3IHh5eiJbMjMsIDEyXSBGQUlMIGV4cGVjdGVkOiAxOQorImFiYyBkZWYgWlFCIFJJ
RyB1dncgeHl6IlsxOSwgMTldIEZBSUwgZXhwZWN0ZWQ6IDE2CisiYWJjIGRlZiBaUUIgUklHIHV2
dyB4eXoiWzE2LCAxMl0KKyJhYmMgZGVmIFpRQiBSSUcgdXZ3IHh5eiJbMTIsIDEyXSBGQUlMIGV4
cGVjdGVkOiA4CisiYWJjIGRlZiBaUUIgUklHIHV2dyB4eXoiWzgsIDhdIEZBSUwgZXhwZWN0ZWQ6
IDMKKyJhYmMgZGVmIFpRQiBSSUcgdXZ3IHh5eiJbMywgM10gRkFJTCBleHBlY3RlZDogMAorImFi
YyBkZWYgWlFCIFJJRyB1dncgeHl6IlswLCAwXQorVGVzdCA3LCBMVFI6CitNb3ZlIHJpZ2h0IGJ5
IG9uZSB3b3JkCisiWlFCIGFiYyBSSUciWzAsIDBdIEZBSUwgZXhwZWN0ZWQ6IDQKKyJaUUIgYWJj
IFJJRyJbNCwgNF0gRkFJTCBleHBlY3RlZDogOAorIlpRQiBhYmMgUklHIls4LCA4XSBGQUlMIGV4
cGVjdGVkOiAxMQorIlpRQiBhYmMgUklHIlsxMSwgMTFdCitNb3ZlIGxlZnQgYnkgb25lIHdvcmQK
KyJaUUIgYWJjIFJJRyJbMTEsIDRdIEZBSUwgZXhwZWN0ZWQ6IDgKKyJaUUIgYWJjIFJJRyJbOCwg
NF0KKyJaUUIgYWJjIFJJRyJbNCwgNF0gRkFJTCBleHBlY3RlZDogMAorIlpRQiBhYmMgUklHIlsw
LCAwXQorVGVzdCA4LCBSVEw6CitNb3ZlIGxlZnQgYnkgb25lIHdvcmQKKyJaUUIgYWJjIFJJRyJb
MCwgMF0gRkFJTCBleHBlY3RlZDogNAorIlpRQiBhYmMgUklHIls0LCA0XSBGQUlMIGV4cGVjdGVk
OiA4CisiWlFCIGFiYyBSSUciWzgsIDhdIEZBSUwgZXhwZWN0ZWQ6IDExCisiWlFCIGFiYyBSSUci
WzExLCAxMV0KK01vdmUgcmlnaHQgYnkgb25lIHdvcmQKKyJaUUIgYWJjIFJJRyJbMTEsIDhdCisi
WlFCIGFiYyBSSUciWzgsIDhdIEZBSUwgZXhwZWN0ZWQ6IDQKKyJaUUIgYWJjIFJJRyJbNCwgMF0K
KyJaUUIgYWJjIFJJRyJbMCwgMF0KKwpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rp
b24vbW92ZS1ieS13b3JkLXZpc3VhbGx5Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZWRpdGluZy9zZWxlY3Rpb24vbW92ZS1ieS13b3JkLXZpc3VhbGx5Lmh0bWwJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9tb3ZlLWJ5LXdvcmQtdmlzdWFsbHku
aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxODkgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0
bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4
dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4KKzxzdHlsZT4KKyAgICBkaXYudGVzdCB7CisgICAgICAg
IC13ZWJraXQtdXNlci1tb2RpZnk6IHJlYWQtd3JpdGU7CisgICAgICAgIHBhZGRpbmc6IDRweDsK
KyAgICAgICAgYm9yZGVyOiAxcHggZGFzaGVkIGxpZ2h0Ymx1ZTsKKyAgICAgICAgbWFyZ2luOiA0
cHggNHB4IDRweCAyNHB4OworICAgICAgICBvdXRsaW5lOiBub25lOworICAgICAgICBmb250LWZh
bWlseTogTHVjaWRhIEdyYW5kZTsKKyAgICAgICAgY291bnRlci1pbmNyZW1lbnQ6IHRlc3QtbnVt
YmVyOworICAgIH0KKyAgICBkaXYudGVzdDpiZWZvcmUgeyBjb250ZW50OiBjb3VudGVyKHRlc3Qt
bnVtYmVyKTsgcG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiA4cHg7IGZvbnQtc2l6ZTogeC1zbWFs
bDsgdGV4dC1hbGlnbjogcmlnaHQ7IHdpZHRoOiAyMHB4OyB9CisgICAgZGl2LnRlc3Qgc3BhbiB7
IGJhY2tncm91bmQtY29sb3I6ICNkZWY7IH0KKyAgICBkaXYudGVzdCBpbWcgeyB3aWR0aDogMWVt
OyBoZWlnaHQ6IDFlbTsgYmFja2dyb3VuZC1jb2xvcjogbGlnaHRncmVlbjsgfQorICAgIGRpdi50
ZXN0IGltZyArIGltZyB7IGJhY2tncm91bmQtY29sb3I6IGxpZ2h0Ymx1ZTsgfQorICAgIGRpdi50
ZXN0IGRpdiB7IGJvcmRlcjogMXB4IGRhc2hlZCBwaW5rOyBwYWRkaW5nOiAzcHg7IGhlaWdodDog
MmVtOyB9CisgICAgdGVzdF9tb3ZlX2J5X3dvcmQge2Rpc3BsYXk6IG5vbmU7fQorPC9zdHlsZT4K
KzxzY3JpcHQ+CisgICAgdmFyIG1lc3NhZ2VzID0gW107CisKKyAgICBmdW5jdGlvbiBsb2cobWVz
c2FnZSkKKyAgICB7CisgICAgICAgIG1lc3NhZ2VzLnB1c2gobWVzc2FnZSk7CisgICAgfQorCisg
ICAgZnVuY3Rpb24gZmx1c2hMb2coKQorICAgIHsKKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoImNvbnNvbGUiKS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShtZXNz
YWdlcy5qb2luKCIiKSkpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGNhcmV0Q29vcmRpbmF0ZXMo
KQorICAgIHsKKyAgICAgICAgaWYgKCF3aW5kb3cudGV4dElucHV0Q29udHJvbGxlcikKKyAgICAg
ICAgICAgIHJldHVybiB7IHg6IDAsIHkgOjAgfTsKKyAgICAgICAgdmFyIGNhcmV0UmVjdCA9IHRl
eHRJbnB1dENvbnRyb2xsZXIuZmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2UodGV4dElucHV0Q29u
dHJvbGxlci5zZWxlY3RlZFJhbmdlKClbMF0sIDApOworICAgICAgICByZXR1cm4geyB4OiBjYXJl
dFJlY3RbMF0sIHk6IGNhcmV0UmVjdFsxXSB9OworICAgIH0KKworCisgICAgZnVuY3Rpb24gZm9s
ZChzdHJpbmcpCisgICAgeworICAgICAgICB2YXIgcmVzdWx0ID0gIiI7CisgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICB2YXIgY2hh
ciA9IHN0cmluZy5jaGFyQ29kZUF0KGkpOworICAgICAgICAgICAgaWYgKGNoYXIgPj0gMHgwNWQw
KQorICAgICAgICAgICAgICAgIGNoYXIgLT0gMHgwNThmOworICAgICAgICAgICAgZWxzZSBpZiAo
Y2hhciA9PSAxMCkgeworICAgICAgICAgICAgICAgIHJlc3VsdCArPSAiXFxuIjsKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlc3VsdCArPSBT
dHJpbmcuZnJvbUNoYXJDb2RlKGNoYXIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfQorCisgICAgZnVuY3Rpb24gbG9nUG9zaXRpb25zKHBvc2l0aW9ucykKKyAgICB7
CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG9zaXRpb25zLmxlbmd0aDsgKytpKSB7Cisg
ICAgICAgICAgICBpZiAoaSkgeworICAgICAgICAgICAgICAgIGlmIChwb3NpdGlvbnNbaV0ubm9k
ZSAhPSBwb3NpdGlvbnNbaSAtIDFdLm5vZGUpCisgICAgICAgICAgICAgICAgICAgIGxvZygiXSIp
OworICAgICAgICAgICAgICAgIGxvZygiLCAiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmICghaSB8fCBwb3NpdGlvbnNbaV0ubm9kZSAhPSBwb3NpdGlvbnNbaSAtIDFdLm5vZGUpCisg
ICAgICAgICAgICAgICAgbG9nKChwb3NpdGlvbnNbaV0ubm9kZSBpbnN0YW5jZW9mIFRleHQgPyAn
IicgKyBmb2xkKHBvc2l0aW9uc1tpXS5ub2RlLmRhdGEpICsgJyInIDogIjwiICsgcG9zaXRpb25z
W2ldLm5vZGUudGFnTmFtZSArICI+IikgKyAiWyIpOworICAgICAgICAgICAgbG9nKHBvc2l0aW9u
c1tpXS5vZmZzZXQpOworICAgICAgICB9CisgICAgICAgIGxvZygiXSIpOworICAgIH0KKworICAg
IHZhciB3b3JkQnJlYWtzOworCisgICAgZnVuY3Rpb24gdmFsaWRhdGVEYXRhKHBvc2l0aW9ucywg
aW5kZXgsIHNlYXJjaERpcmVjdGlvbikKKyAgICB7CisgICAgICAgIGlmIChpbmRleCA8IHdvcmRC
cmVha3MubGVuZ3RoIC0gMSAmJgorICAgICAgICAgICAgcG9zaXRpb25zWzFdLm9mZnNldCAhPSB3
b3JkQnJlYWtzW2luZGV4ICsgMV0pIHsKKyAgICAgICAgICAgIGxvZygiIEZBSUwgZXhwZWN0ZWQ6
ICIgKyB3b3JkQnJlYWtzW2luZGV4ICsgMV0pOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYg
KGluZGV4ID09IHdvcmRCcmVha3MubGVuZ3RoIC0gMSAmJgorICAgICAgICAgICAgICAgICBwb3Np
dGlvbnNbMV0ub2Zmc2V0ICE9IHBvc2l0aW9uc1swXS5vZmZzZXQpIAorICAgICAgICAgICAgbG9n
KCIgRkFJTCBleHBlY3RlZDogIiArIHBvc2l0aW9uc1swXS5vZmZzZXQpOworICAgIH0KKworICAg
IGZ1bmN0aW9uIGNvbGxlY3RXb3JkQnJlYWtzKHRlc3QsIHNlYXJjaERpcmVjdGlvbikKKyAgICB7
CisgICAgICAgIGlmIChzZWFyY2hEaXJlY3Rpb24gPT0gInJpZ2h0IikgeworICAgICAgICAgICAg
aWYgKHRlc3Quc3R5bGUuZGlyZWN0aW9uID09ICdsdHInKSAKKyAgICAgICAgICAgICAgICB3b3Jk
QnJlYWtzID0gdGVzdC50aXRsZS5zcGxpdCgifCIpWzBdLnNwbGl0KCIgIik7CisgICAgICAgICAg
ICBlbHNlIAorICAgICAgICAgICAgICAgIHdvcmRCcmVha3MgPSB0ZXN0LnRpdGxlLnNwbGl0KCJ8
IilbMV0uc3BsaXQoIiAiKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICh0ZXN0
LnN0eWxlLmRpcmVjdGlvbiA9PSAnbHRyJykgCisgICAgICAgICAgICAgICAgd29yZEJyZWFrcyA9
IHRlc3QudGl0bGUuc3BsaXQoInwiKVsxXS5zcGxpdCgiICIpOworICAgICAgICAgICAgZWxzZSAK
KyAgICAgICAgICAgICAgICB3b3JkQnJlYWtzID0gdGVzdC50aXRsZS5zcGxpdCgifCIpWzBdLnNw
bGl0KCIgIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBtb3ZlQnlXb3JkKHNl
bCwgdGVzdCwgc2VhcmNoRGlyZWN0aW9uLCBkaXIpCisgICAgeworICAgICAgICBsb2coIk1vdmUg
IiArIHNlYXJjaERpcmVjdGlvbiArICIgYnkgb25lIHdvcmRcbiIpOworICAgICAgICB2YXIgcHJl
dk9mZnNldCA9IHNlbC5hbmNob3JPZmZzZXQ7CisgICAgICAgIHZhciBub2RlID0gc2VsLmFuY2hv
ck5vZGU7CisgICAgICAgIGNvbGxlY3RXb3JkQnJlYWtzKHRlc3QsIHNlYXJjaERpcmVjdGlvbik7
CisgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCB3b3JkQnJlYWtzLmxlbmd0aDsg
KytpbmRleCkgeworICAgICAgICAgICAgc2VsLnNldFBvc2l0aW9uKG5vZGUsIHdvcmRCcmVha3Nb
aW5kZXhdKTsKKyAgICAgICAgICAgIHZhciBwb3NpdGlvbnMgPSBbXTsKKyAgICAgICAgICAgIHBv
c2l0aW9ucy5wdXNoKHsgbm9kZTogc2VsLmFuY2hvck5vZGUsIG9mZnNldDogc2VsLmFuY2hvck9m
ZnNldCwgcG9pbnQ6IGNhcmV0Q29vcmRpbmF0ZXMoKSB9KTsKKyAgICAgICAgICAgIHNlbC5tb2Rp
ZnkoIm1vdmUiLCBzZWFyY2hEaXJlY3Rpb24sICItd2Via2l0LXZpc3VhbC13b3JkIik7CisgICAg
ICAgICAgICBwb3NpdGlvbnMucHVzaCh7IG5vZGU6IHNlbC5hbmNob3JOb2RlLCBvZmZzZXQ6IHNl
bC5hbmNob3JPZmZzZXQsIHBvaW50OiBjYXJldENvb3JkaW5hdGVzKCkgfSk7CisgICAgICAgICAg
ICBsb2dQb3NpdGlvbnMocG9zaXRpb25zKTsKKyAgICAgICAgICAgIHZhbGlkYXRlRGF0YShwb3Np
dGlvbnMsIGluZGV4LCBzZWFyY2hEaXJlY3Rpb24pOworICAgICAgICAgICAgbG9nKCJcbiIpOwor
ICAgICAgICB9CisgICAgfQorICAgIAorICAgIGZ1bmN0aW9uIG1vdmVCeVdvcmRGb3JFdmVyeVBv
c2l0aW9uKHNlbCwgdGVzdCwgZGlyKQorICAgIHsKKyAgICAgICAgLy8gQ2hlY2sgY3RybC1yaWdo
dC1hcnJvdyB3b3JrcyBmb3IgZXZlcnkgcG9zaXRpb24uCisgICAgICAgIHNlbC5zZXRQb3NpdGlv
bih0ZXN0LCAwKTsKKyAgICAgICAgdmFyIGRpcmVjdGlvbiA9ICJyaWdodCI7CisgICAgICAgIGlm
IChkaXIgPT0gInJ0bCIpCisgICAgICAgICAgICBkaXJlY3Rpb24gPSAibGVmdCI7ICAgIAorICAg
ICAgICBtb3ZlQnlXb3JkKHNlbCwgdGVzdCwgZGlyZWN0aW9uLCBkaXIpOyAgICAKKyAgICAgICAg
Ly8gQ2hlY2sgY3RybC1sZWZ0LWFycm93IHdvcmtzIGZvciBldmVyeSBwb3NpdGlvbi4KKyAgICAg
ICAgaWYgKGRpciA9PSAibHRyIikKKyAgICAgICAgICAgIGRpcmVjdGlvbiA9ICJsZWZ0IjsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgZGlyZWN0aW9uID0gInJpZ2h0IjsgICAgCisgICAgICAg
IG1vdmVCeVdvcmQoc2VsLCB0ZXN0LCBkaXJlY3Rpb24sIGRpcik7ICAgIAorICAgIH0KKworICAg
IGZ1bmN0aW9uIHJ1bk1vdmVMZWZ0UmlnaHQodGVzdHMsIHVuaXQpCisgICAgeworICAgICAgICB2
YXIgc2VsID0gZ2V0U2VsZWN0aW9uKCk7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGVz
dHMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIHZhciBwb3NpdGlvbnNNb3ZpbmdSaWdodDsK
KyAgICAgICAgICAgIHZhciBwb3NpdGlvbnNNb3ZpbmdMZWZ0OworCisgICAgICAgICAgICBpZiAo
dGVzdHNbaV0uc3R5bGUuZGlyZWN0aW9uID09ICdsdHInKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGxvZygiVGVzdCAiICsgKGkgKyAxKSArICIsIExUUjpcbiIpOworICAgICAgICAg
ICAgICAgIG1vdmVCeVdvcmRGb3JFdmVyeVBvc2l0aW9uKHNlbCwgdGVzdHNbaV0sICJsdHIiKTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbG9nKCJUZXN0ICIgKyAoaSAr
IDEpICsgIiwgUlRMOlxuIik7CisgICAgICAgICAgICAgICAgbW92ZUJ5V29yZEZvckV2ZXJ5UG9z
aXRpb24oc2VsLCB0ZXN0c1tpXSwgInJ0bCIpOworICAgICAgICAgICAgfQorCisgICAgICAgIH0K
KyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRlc3RNb3ZlQnlXb3JkIikuc3R5bGUu
ZGlzcGxheSA9ICJub25lIjsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBydW5UZXN0KCkgeworICAg
ICAgICBsb2coIlxuPT09PT09PT0gTW92ZSBCeSBXb3JkID09PT1cbiIpOworICAgICAgICB2YXIg
dGVzdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJ0ZXN0X21vdmVfYnlfd29y
ZCIpOworICAgICAgICBydW5Nb3ZlTGVmdFJpZ2h0KHRlc3RzLCAid29yZCIpOworICAgIH0KKwor
ICAgIG9ubG9hZCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgcnVu
VGVzdCgpOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgZmx1c2hMb2coKTsKKyAg
ICAgICAgfQorICAgIH07CisKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQor
ICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7Cis8L3NjcmlwdD4KKzwv
aGVhZD4KKzxib2R5PgorICAgIDxkaXYgaWQ9InRlc3RNb3ZlQnlXb3JkIj4KKyAgICA8ZGl2IHN0
eWxlPSJkaXJlY3Rpb246bHRyIiBjbGFzcz0idGVzdF9tb3ZlX2J5X3dvcmQiIHRpdGxlPSIwIDQg
OCAxMiAxNiAxOXwxOSAxNiAxMiA4IDQgMCIgY29udGVudGVkaXRhYmxlPmFiYyBkZWYgaGlqIG9w
cSByc3Q8L2Rpdj4KKyAgICA8ZGl2IHN0eWxlPSJkaXJlY3Rpb246cnRsIiBjbGFzcz0idGVzdF9t
b3ZlX2J5X3dvcmQiIHRpdGxlPSIwIDE1IDExIDcgMyAxOXwxOSAzIDcgMTEgMTUgMCIgY29udGVu
dGVkaXRhYmxlPmFiYyBkZWYgaGlqIG9wcSByc3Q8L2Rpdj4KKyAgICA8ZGl2IHN0eWxlPSJkaXJl
Y3Rpb246bHRyIiBjbGFzcz0idGVzdF9tb3ZlX2J5X3dvcmQiIHRpdGxlPSIwIDE1IDExIDcgMyAx
OXwxOSAzIDcgMTEgMTUgMCIgY29udGVudGVkaXRhYmxlPtep16nXqSDXoNeg16Ag15HXkdeRINeS
15LXkiDXp9en16c8L2Rpdj4KKyAgICA8ZGl2IHN0eWxlPSJkaXJlY3Rpb246cnRsIiBjbGFzcz0i
dGVzdF9tb3ZlX2J5X3dvcmQiIHRpdGxlPSIwIDQgOCAxMiAxNiAxOXwxOSAxNiAxMiA4IDQgMCIg
Y29udGVudGVkaXRhYmxlPtep16nXqSDXoNeg16Ag15HXkdeRINeS15LXkiDXp9en16c8L2Rpdj4K
KyAgICA8ZGl2IHN0eWxlPSJkaXJlY3Rpb246bHRyIiBjbGFzcz0idGVzdF9tb3ZlX2J5X3dvcmQi
IHRpdGxlPSIwIDQgOCAxMSAxNiAyMCAyM3wyMyAyMCAxNiAxMSA4IDQgMCIgY29udGVudGVkaXRh
YmxlPmFiYyBkZWYg16nXoNeRINeh15jXliB1dncgeHl6PC9kaXY+CisgICAgPGRpdiBzdHlsZT0i
ZGlyZWN0aW9uOnJ0bCIgY2xhc3M9InRlc3RfbW92ZV9ieV93b3JkIiB0aXRsZT0iMCAzIDggMTIg
MTYgMTkgMjN8MjMgMTkgMTYgMTIgOCAzIDAiIGNvbnRlbnRlZGl0YWJsZT5hYmMgZGVmINep16DX
kSDXodeY15YgdXZ3IHh5ejwvZGl2PgorICAgIDxkaXYgc3R5bGU9ImRpcmVjdGlvbjpsdHIiIGNs
YXNzPSJ0ZXN0X21vdmVfYnlfd29yZCIgdGl0bGU9IjAgNCA4IDExfDExIDggNCAwIiBjb250ZW50
ZWRpdGFibGU+16nXoNeRIGFiYyDXodeY15Y8L2Rpdj4KKyAgICA8ZGl2IHN0eWxlPSJkaXJlY3Rp
b246cnRsIiBjbGFzcz0idGVzdF9tb3ZlX2J5X3dvcmQiIHRpdGxlPSIwIDQgOCAxMXwxMSA4IDQg
MCIgY29udGVudGVkaXRhYmxlPtep16DXkSBhYmMg16HXmNeWPC9kaXY+CisgICAgPC9kaXY+CisK
KyAgICA8cHJlIGlkPSJjb25zb2xlIj48L3ByZT4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>87618</attachid>
            <date>2011-03-30 14:32:01 -0700</date>
            <delta_ts>2011-03-30 15:28:07 -0700</delta_ts>
            <desc>patch w/ layout test</desc>
            <filename>57336.v4</filename>
            <type>text/plain</type>
            <size>25094</size>
            <attacher name="Xiaomei Ji">xji</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgyNDkyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTEgQEAKKzIwMTEtMDMtMzAgIFhpYW9tZWkg
SmkgIDx4amlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEV4cGVyaW1lbnQgd2l0aCBtb3ZpbmcgY2FyZXQgYnkgd29yZCBpbiB2
aXN1YWwgb3JkZXIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01NzMzNgorCisgICAgICAgIFRoaXMgaXMgdGhlIDFzdCB2ZXJzaW9uIG9mIGltcGxlbWVu
dGluZyAibW92ZSBjYXJldCBieSB3b3JkIGluIHZpc3VhbCBvcmRlciIuCisgICAgICAgIEl0IG9u
bHkgd29ya3MgaW4gdGhlIGZvbGxvd2luZyBzaXR1YXRpb246CisgICAgICAgIDEuIEZvciBhIExU
UiBib3ggaW4gYSBMVFIgYmxvY2sgb3IgYSBSVEwgYm94IGluIFJUTCBibG9jaywgCisgICAgICAg
IHdoZW4gY2FyZXQgaXMgYXQgdGhlIGxlZnQgYm91bmRhcnkgb2YgdGhlIGJveCBhbmQgd2UgYXJl
IGxvb2tpbmcgZm9yIAorICAgICAgICB0aGUgd29yZCBib3VuZGFyeSBpbiByaWdodC4KKyAgICAg
ICAgMi4gRm9yIGEgTFRSIG9yIFJUTCBib3ggaW4gYSBMVFIgYmxvY2ssIHdoZW4gY2FyZXQgaXMg
YXQgdGhlIGxlZnQgYm91bmRhcnkKKyAgICAgICAgb2YgdGhlIGJveCBhbmQgd2UgYXJlIGxvb2tp
bmcgZm9yIHRoZSB3b3JkIGJvdW5kYXJ5IGluIGxlZnQgYW5kIAorICAgICAgICBwcmV2aW91cyBi
b3ggaXMgYSBMVFIgYm94LgorICAgICAgICAzLiBGb3IgYSBMVFIgb3IgUlRMIGJveCBpbiBhIFJU
TCBibG9jaywgd2hlbiB0aGUgY2FyZXQgaXMgYXQgdGhlIHJpZ2h0IAorICAgICAgICBib3VuZGFy
eSBvZiB0aGUgYm94IGFuZCB3ZSBhcmUgbG9va2luZyBmb3IgdGhlIHdvcmQgYm91bmRhcnkgaW4g
cmlnaHQgYW5kIG5leHQgYm94IGlzIFJUTCBib3guCisKKyAgICAgICAgQW4gZXhwZXJpbWVudGFs
IGdyYW51bGFyaXR5IGlzIGludHJvZHVjZWQsIGFzIGEgc2lkZSBlZmZlY3QsIGZ1bmN0aW9ucyBo
YXZpbmcgc3dpdGNoIHN0YXRlbWVudHMKKyAgICAgICAgdG8gaGFuZGxlIHRob3NlIGdyYW51bGFy
aXRpZXMgaGF2ZSB0byBhZGQgbW9yZSBvbmUgY2FzZSB0byBoYW5kbGUgdGhpcyBuZXcgZ3JhbnVs
YXJpdHkuCisgICAgICAgIFRoZSBleHBlcmltZW50YWwgZ3JhbnVsYXJpdHkgaXMgZXhwb3NlZCB0
aG91Z2ggSlMgYnkgJy13ZWJraXQtdmlzdWFsLXdvcmQiLgorCisgICAgICAgIFRlc3Q6IGVkaXRp
bmcvc2VsZWN0aW9uL21vdmUtYnktd29yZC12aXN1YWxseS5odG1sCisKKyAgICAgICAgKiBlZGl0
aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9u
Q29udHJvbGxlcjo6bW9kaWZ5RXh0ZW5kaW5nUmlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6U2Vs
ZWN0aW9uQ29udHJvbGxlcjo6bW9kaWZ5RXh0ZW5kaW5nRm9yd2FyZCk6CisgICAgICAgIChXZWJD
b3JlOjpTZWxlY3Rpb25Db250cm9sbGVyOjptb2RpZnlNb3ZpbmdSaWdodCk6CisgICAgICAgIChX
ZWJDb3JlOjpTZWxlY3Rpb25Db250cm9sbGVyOjptb2RpZnlNb3ZpbmdGb3J3YXJkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vZGlmeUV4dGVuZGluZ0xlZnQpOgor
ICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kaWZ5RXh0ZW5kaW5nQmFj
a3dhcmQpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kaWZ5TW92
aW5nTGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25Db250cm9sbGVyOjptb2RpZnlN
b3ZpbmdCYWNrd2FyZCk6CisgICAgICAgICogZWRpdGluZy9UZXh0R3JhbnVsYXJpdHkuaDoKKyAg
ICAgICAgKiBlZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VmlzaWJsZVNlbGVjdGlvbjo6c2V0U3RhcnRBbmRFbmRGcm9tQmFzZUFuZEV4dGVudFJlc3BlY3Rp
bmdHcmFudWxhcml0eSk6CisgICAgICAgICogZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnByZXZpb3VzV29yZEJyZWFrSW5Cb3hJbnNpZGVCbG9ja1dpdGhTYW1l
RGlyZWN0aW9uYWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6d29yZEJvdW5kYXJ5SW5Cb3gpOgor
ICAgICAgICAoV2ViQ29yZTo6d29yZEJvdW5kYXJ5SW5BZGphY2VudEJveGVzKToKKyAgICAgICAg
KFdlYkNvcmU6OmxlZnRXb3JkQm91bmRhcnkpOgorICAgICAgICAoV2ViQ29yZTo6cmlnaHRXb3Jk
Qm91bmRhcnkpOgorICAgICAgICAoV2ViQ29yZTo6bGVmdFdvcmRQb3NpdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpyaWdodFdvcmRQb3NpdGlvbik6CisgICAgICAgICogZWRpdGluZy92aXNpYmxl
X3VuaXRzLmg6CisgICAgICAgICogcGFnZS9ET01TZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RE9NU2VsZWN0aW9uOjptb2RpZnkpOgorCiAyMDExLTAzLTMwICBTYW0gV2VpbmlnICA8
c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQnJhZHkgRWlkc29uLgpJbmRl
eDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCShy
ZXZpc2lvbiA4MjQ5MikKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJv
bGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0Nyw2ICs0NDcsMTAgQEAgVmlzaWJsZVBvc2l0
aW9uIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vZAogICAgIGNhc2UgRG9jdW1lbnRCb3VuZGFyeToK
ICAgICAgICAgLy8gRklYTUU6IGltcGxlbWVudCBhbGwgb2YgdGhlIGFib3ZlPwogICAgICAgICBw
b3MgPSBtb2RpZnlFeHRlbmRpbmdGb3J3YXJkKGdyYW51bGFyaXR5KTsKKyAgICAgICAgYnJlYWs7
CisgICAgLy8gRklYTUU6IHJlbW92ZSBsYXRlci4KKyAgICBjYXNlIFdlYktpdFZpc3VhbFdvcmRH
cmFudWxhcml0eToKKyAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBwb3M7CiB9CkBA
IC00ODYsNiArNDkwLDkgQEAgVmlzaWJsZVBvc2l0aW9uIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om1v
ZAogICAgICAgICBlbHNlCiAgICAgICAgICAgICBwb3MgPSBlbmRPZkRvY3VtZW50KHBvcyk7CiAg
ICAgICAgIGJyZWFrOworICAgIC8vIEZJWE1FOiByZW1vdmUgbGF0ZXIuCisgICAgY2FzZSBXZWJL
aXRWaXN1YWxXb3JkR3JhbnVsYXJpdHk6CisgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAKICAg
ICByZXR1cm4gcG9zOwpAQCAtNTE3LDYgKzUyNCw5IEBAIFZpc2libGVQb3NpdGlvbiBTZWxlY3Rp
b25Db250cm9sbGVyOjptb2QKICAgICBjYXNlIExpbmVCb3VuZGFyeToKICAgICAgICAgcG9zID0g
cmlnaHRCb3VuZGFyeU9mTGluZShzdGFydEZvclBsYXRmb3JtKCksIGRpcmVjdGlvbk9mRW5jbG9z
aW5nQmxvY2soKSk7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgV2ViS2l0VmlzdWFsV29yZEdy
YW51bGFyaXR5OgorICAgICAgICBwb3MgPSByaWdodFdvcmRQb3NpdGlvbihWaXNpYmxlUG9zaXRp
b24obV9zZWxlY3Rpb24uZXh0ZW50KCksIG1fc2VsZWN0aW9uLmFmZmluaXR5KCkpKTsKKyAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBwb3M7CiB9CkBAIC01NjUsNiArNTc1LDkgQEAg
VmlzaWJsZVBvc2l0aW9uIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vZAogICAgICAgICBlbHNlCiAg
ICAgICAgICAgICBwb3MgPSBlbmRPZkRvY3VtZW50KHBvcyk7CiAgICAgICAgIGJyZWFrOworICAg
IC8vIEZJWE1FOiByZW1vdmUgbGF0ZXIuCisgICAgY2FzZSBXZWJLaXRWaXN1YWxXb3JkR3JhbnVs
YXJpdHk6CisgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gcG9zOwogfQpAQCAtNjA0
LDYgKzYxNywxMCBAQCBWaXNpYmxlUG9zaXRpb24gU2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kCiAg
ICAgY2FzZSBQYXJhZ3JhcGhCb3VuZGFyeToKICAgICBjYXNlIERvY3VtZW50Qm91bmRhcnk6CiAg
ICAgICAgIHBvcyA9IG1vZGlmeUV4dGVuZGluZ0JhY2t3YXJkKGdyYW51bGFyaXR5KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgLy8gRklYTUU6IHJlbW92ZSBsYXRlci4KKyAgICBjYXNlIFdlYktpdFZp
c3VhbFdvcmRHcmFudWxhcml0eToKKyAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBw
b3M7CiB9CkBAIC02NDgsNiArNjY1LDkgQEAgVmlzaWJsZVBvc2l0aW9uIFNlbGVjdGlvbkNvbnRy
b2xsZXI6Om1vZAogICAgICAgICBlbHNlCiAgICAgICAgICAgICBwb3MgPSBzdGFydE9mRG9jdW1l
bnQocG9zKTsKICAgICAgICAgYnJlYWs7CisgICAgLy8gRklYTUU6IHJlbW92ZSBsYXRlci4KKyAg
ICBjYXNlIFdlYktpdFZpc3VhbFdvcmRHcmFudWxhcml0eToKKyAgICAgICAgYnJlYWs7CiAgICAg
fQogICAgIHJldHVybiBwb3M7CiB9CkBAIC02NzgsNiArNjk4LDkgQEAgVmlzaWJsZVBvc2l0aW9u
IFNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vZAogICAgIGNhc2UgTGluZUJvdW5kYXJ5OgogICAgICAg
ICBwb3MgPSBsZWZ0Qm91bmRhcnlPZkxpbmUoc3RhcnRGb3JQbGF0Zm9ybSgpLCBkaXJlY3Rpb25P
ZkVuY2xvc2luZ0Jsb2NrKCkpOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIFdlYktpdFZpc3Vh
bFdvcmRHcmFudWxhcml0eToKKyAgICAgICAgcG9zID0gbGVmdFdvcmRQb3NpdGlvbihWaXNpYmxl
UG9zaXRpb24obV9zZWxlY3Rpb24uZXh0ZW50KCksIG1fc2VsZWN0aW9uLmFmZmluaXR5KCkpKTsK
KyAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBwb3M7CiB9CkBAIC03MjAsNiArNzQz
LDkgQEAgVmlzaWJsZVBvc2l0aW9uIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vZAogICAgICAgICBl
bHNlCiAgICAgICAgICAgICBwb3MgPSBzdGFydE9mRG9jdW1lbnQocG9zKTsKICAgICAgICAgYnJl
YWs7CisgICAgLy8gRklYTUU6IHJlbW92ZSBsYXRlci4KKyAgICBjYXNlIFdlYktpdFZpc3VhbFdv
cmRHcmFudWxhcml0eToKKyAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBwb3M7CiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRHcmFudWxhcml0eS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEdyYW51bGFyaXR5LmgJKHJldmlzaW9u
IDgyNDkyKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0R3JhbnVsYXJpdHkuaAkod29y
a2luZyBjb3B5KQpAQCAtMzksNyArMzksMTAgQEAgZW51bSBUZXh0R3JhbnVsYXJpdHkgewogICAg
IFNlbnRlbmNlQm91bmRhcnksCiAgICAgTGluZUJvdW5kYXJ5LAogICAgIFBhcmFncmFwaEJvdW5k
YXJ5LAotICAgIERvY3VtZW50Qm91bmRhcnkKKyAgICBEb2N1bWVudEJvdW5kYXJ5LAorICAgIC8v
IEZJWE1FOiB0aGlzIGlzIGFkZGVkIHRlbXBvcmFyaWx5IGZvciBleHBlcmltZW50IHdpdGggdmlz
dWFsbHkgbW92ZQorICAgIC8vIGNhcmV0IGJ5IHdvcmRHcmFudWxhcml0eS4gT25jZSBhbGwgcGF0
Y2hlcyBhcmUgbGFuZGVkLCBpdCBzaG91bGQgYmUgcmVtb3ZlZC4KKyAgICBXZWJLaXRWaXN1YWxX
b3JkR3JhbnVsYXJpdHkKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlz
aWJsZVNlbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9W
aXNpYmxlU2VsZWN0aW9uLmNwcAkocmV2aXNpb24gODI0OTIpCisrKyBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODAsNiArMzgw
LDkgQEAgdm9pZCBWaXNpYmxlU2VsZWN0aW9uOjpzZXRTdGFydEFuZEVuZEZybwogICAgICAgICAg
ICAgbV9zdGFydCA9IHN0YXJ0T2ZTZW50ZW5jZShWaXNpYmxlUG9zaXRpb24obV9zdGFydCwgbV9h
ZmZpbml0eSkpLmRlZXBFcXVpdmFsZW50KCk7CiAgICAgICAgICAgICBtX2VuZCA9IGVuZE9mU2Vu
dGVuY2UoVmlzaWJsZVBvc2l0aW9uKG1fZW5kLCBtX2FmZmluaXR5KSkuZGVlcEVxdWl2YWxlbnQo
KTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAvLyBGSVhNRTogcmVtb3ZlIGxhdGVyLgor
ICAgICAgICBjYXNlIFdlYktpdFZpc3VhbFdvcmRHcmFudWxhcml0eToKKyAgICAgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICAKICAgICAvLyBNYWtlIHN1cmUgd2UgZG8gbm90IGhhdmUgYSBkYW5n
bGluZyBzdGFydCBvciBlbmQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVf
dW5pdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91
bml0cy5jcHAJKHJldmlzaW9uIDgyNDkyKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy92aXNp
YmxlX3VuaXRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUg
IlRleHRCcmVha0l0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAjaW5jbHVk
ZSAiVmlzaWJsZVBvc2l0aW9uLmgiCisjaW5jbHVkZSAiVmlzaWJsZVNlbGVjdGlvbi5oIgogI2lu
Y2x1ZGUgImh0bWxlZGl0aW5nLmgiCiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVW5pY29kZS5oPgog
CkBAIC0xMTQ2LDQgKzExNDcsMTI2IEBAIFZpc2libGVQb3NpdGlvbiByaWdodEJvdW5kYXJ5T2ZM
aW5lKGNvbnMKICAgICByZXR1cm4gZGlyZWN0aW9uID09IExUUiA/IGxvZ2ljYWxFbmRPZkxpbmUo
YykgOiBsb2dpY2FsU3RhcnRPZkxpbmUoYyk7CiB9CiAKK3N0YXRpYyBjb25zdCBpbnQgaW52YWxp
ZE9mZnNldCA9IC0xOworICAgIAorc3RhdGljIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c1dvcmRC
cmVha0luQm94SW5zaWRlQmxvY2tXaXRoU2FtZURpcmVjdGlvbmFsaXR5KGNvbnN0IElubGluZUJv
eCogYm94LCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIHByZXZpb3VzV29yZEJyZWFrLCBpbnQmIG9m
ZnNldE9mV29yZEJyZWFrKQoreworICAgIGJvb2wgaGFzU2VlbldvcmRCcmVha0luVGhpc0JveCA9
IHByZXZpb3VzV29yZEJyZWFrLmlzTm90TnVsbCgpOworICAgIElubGluZUJveCogYm94Q29udGFp
bmluZ1ByZXZpb3VzV29yZEJyZWFrOworICAgIFZpc2libGVQb3NpdGlvbiB3b3JkQnJlYWs7Cisg
ICAgLy8gRm9yIExUUiB0ZXh0LCBwcmV2aW91c1dvcmRQb3NpdGlvbigpIHJldHVybnMgdGhlIHdv
cmQgYnJlYWsgYXQgdGhlIGxlZnQgYm91bmRhcnkgb2YgYSB3b3JkLCAKKyAgICAvLyAgICAgICAg
ICAgICAgIG5leHRXb3JkUG9zaXRpb24oKSByZXR1cm5zIHRoZSB3b3JkIGJyZWFrIGF0IHRoZSBy
aWdodCBib3VuZGFyeSBvZiBhIHdvcmQuIAorICAgIC8vIEZvciBSVEwgdGV4dCwgcHJldmlvdXNX
b3JkUG9zaXRpb24oKSByZXR1cm5zIHRoZSB3b3JkIGJyZWFrIGF0IHRoZSByaWdodCBib3VuZGFy
eSBvZiBhIHdvcmQsCisgICAgLy8gICAgICAgICAgICAgICBuZXh0V29yZFBvc2l0aW9uKCkgcmV0
dXJucyB0aGUgd29yZCBicmVhayBhdCB0aGUgbGVmdCBib3VuZGFyeSBvZiBhIHdvcmQuCisgICAg
Ly8gCisgICAgLy8gSW4gTFRSIGJsb2NrLCBjdHJsLWFycm93IG1vdmVzIGN1cnNvciB0byB0aGUg
bGVmdCBib3VuZGFyeSBvZiB3b3JkcywKKyAgICAvLyBzbyB3ZSBzaG91bGQgdXNlIHByZXZpb3Vz
V29yZFBvc2l0aW9uKCkgZm9yIExUUiB0ZXh0LCBpbiB3aGljaCBvZmZzZXRzIGNvbGxlY3RlZCBm
cm9tIHZpc3VhbGx5IHJpZ2h0IHRvIHZpc3VhbGx5IGxlZnQuCisgICAgLy8gSW4gUlRMIGJsb2Nr
LCBjdHJsLWFycm93IG1vdmVzIGN1cnNvciB0byB0aGUgcmlnaHQgYm91bmRhcnkgb2Ygd29yZHMs
CisgICAgLy8gc28gd2Ugc2hvdWxkIHVzZSBwcmV2aW91c1dvcmRQb3NpaXRvbigpIGZvciBSVEwg
dGV4dCwgaW4gd2hpY2gsIG9mZnNldHMgY29sbGVjdGVkIGZyb20gdmlzdWFsbHkgbGVmdCB0byAg
dmlzdWFsbHkgcmlnaHQuIAorICAgIHdvcmRCcmVhayA9IGhhc1NlZW5Xb3JkQnJlYWtJblRoaXNC
b3ggPyBwcmV2aW91c1dvcmRCcmVhayA6IFBvc2l0aW9uKGJveC0+cmVuZGVyZXIoKS0+bm9kZSgp
LCBib3gtPmNhcmV0TWF4T2Zmc2V0KCksIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNo
b3IpOworCisgICAgLy8gRklYTUU6IGhhbmRsZSBtdWx0aS1zcGFjZXMuIAorICAgIC8vIEluIHRo
ZSBjYXNlIG9mIG11bHRpLXNwYWNlcywgd29yZCBicmVhayBhbW9uZyB0aGUgY29sbGFwc2VkIHNw
YWNlcyBtaWdodCBub3QgYWRkZWQuCisgICAgLy8gRm9yIGV4YW1wbGUsICI8ZGl2PmFiYyAgICBk
ZWYgaGlqICAgIG9wcSByc3Q8L2Rpdj4iLCBubyB3b3JkIGJyZWFrIGlzIGFkZGVkIGJldHdlZW4g
ImhpaiIgYW5kICJvcHEiLgorICAgIC8vIFRoZSByZWFzb24gaXMgd2hlbiBjdXJzb3IgaXMgaW1t
ZWRpYXRlbHkgdG8gdGhlIHJpZ2h0IG9mICJvcHEiLCBpdHMgcHJldmlvdXMgd29yZCBib3VuZGFy
eSdzIG9mZnNldCByZXR1cm5lZCBmcm9tIHByZXZpb3VzV29yZFBvc2l0aW9uKCkgaXMgMTUsCisg
ICAgLy8gd2hpY2ggaXMgaW1tZWRpYXRlbHkgdG8gdGhlIHJpZ2h0IG9mICJoaWogIiwgYW5kIHdo
aWNoIGlzIG5vdCBpbiB0aGUgc2FtZSBib3ggYXMgIm9wcSIsCisgICAgLy8gc28sIGl0IHdvbnQg
YmUgYWRkZWQgYXMgYSB3b3JkIGJyZWFrIG9mIGJveCAib3BxIHJzdCIuIAorICAgIC8vIFdlIGNv
dWxkIGFsd2F5cyBhZGQgdGhlIHJpZ2h0bW9zdChmb3IgTFRSIGJveCkvbGVmdG1vc3QoZm9yIFJU
TCBib3gpIGJvdW5kYXJ5CisgICAgLy8gYXMgd29yZGJyZWFrIHdoZW4gaXRzIGlubGluZUJveCBp
cyB0aGUgc2FtZSBhcyAnYm94Jy4gQ2hlY2tpbmcgdGhhdCB0aGUgcmlnaHRtb3N0IG9yIGxlZnRt
b3N0IGJvdW5kYXJ5J3MgaW5saW5lQm94IGdldCBmcm9tCisgICAgLy8gZ2V0SW5saW5lQm94QW5k
T2Zmc2V0IGlzIHRoZSBzYW1lIGFzICdib3gnIGlzIGltcG9ydGFudCBhcyB0byBub3QgYnJlYWsg
Y2FzZXMgc3VjaCBhcyA8ZGl2PmhlPGI+bGxvPC9iPiB3b3JsZDwvZGl2PiwgaW4gd2hpY2gKKyAg
ICAvLyB3aGVuIGN1cnNvciBpcyBpbW1lZGlhdGVseSB0byB0aGUgcmlnaHQgb2YgJ2hlJywgdGhl
IHJpZ2h0bW9zdCBib3VuZGFyeSdzIGlubGluZUJveCBnZXQgZnJvbSBnZXRJbmxpbmVCb3hBbmRP
ZmZzZXQgaXMKKyAgICAvLyBib3ggJ2xsbycsIHdoaWNoIGlzIGRpZmZlcmVudCBmcm9tIGJveCAn
aGUnLCBhbmQgdGhpcyByaWdodG1vc3QgYm91bmRhcnkgd29udCBiZSBhZGRlZCBhcyBhIHdvcmQg
YnJlYWsuCisgICAgLy8gQnV0IGl0IHN0aWxsIG1pZ2h0IGJyZWFrIHNvbWUgb3RoZXIgY2FzZXMg
c2luY2UgYSBib3VuYXJ5IG9mIGEgYm94IGRvZXMgbm90IG5lY2Vzc2FyaWx5IG1lYW5zIGEgd29y
ZCBicmVhay4KKyAgICAvLyBPciB3ZSBuZWVkIHRvIHByb3ZpZGUgYSB3YXkgbm90IHRvIGNhbm9u
aWNhbGl6ZSh1cHN0cmVhbSkgVmlzaWJsZVBvc2l0aW9uIGluIGl0cyBjb25zdHJ1Y3RvciwgCisg
ICAgLy8gc28gcHJldmlvdXNXb3JkUG9zaXRpb24oKSBvZiAib3BxIiBjb3VsZCByZXR1cm4gb2Zm
c2V0IDE4LCB3aGljaCBpcyBpbW1lZGlhdGVseSB0byB0aGUgbGVmdCBvZiAib3BxIiwgaW5zdGVh
ZC4KKworICAgIHdvcmRCcmVhayA9IHByZXZpb3VzV29yZFBvc2l0aW9uKHdvcmRCcmVhayk7Cisg
ICAgaWYgKHByZXZpb3VzV29yZEJyZWFrICE9IHdvcmRCcmVhaykgeworICAgICAgICB3b3JkQnJl
YWsuZ2V0SW5saW5lQm94QW5kT2Zmc2V0KGJveENvbnRhaW5pbmdQcmV2aW91c1dvcmRCcmVhaywg
b2Zmc2V0T2ZXb3JkQnJlYWspOworICAgICAgICBpZiAoYm94Q29udGFpbmluZ1ByZXZpb3VzV29y
ZEJyZWFrID09IGJveCkKKyAgICAgICAgICAgIHJldHVybiB3b3JkQnJlYWs7CisgICAgfQorICAg
IHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKK30KKworc3RhdGljIFZpc2libGVQb3NpdGlvbiBm
aW5kV29yZEJvdW5kYXJ5SW5Cb3hJbkJsb2NrRGlyZWN0aW9uKGNvbnN0IElubGluZUJveCogYm94
LCBpbnQgb2Zmc2V0LCBUZXh0RGlyZWN0aW9uIGJsb2NrRGlyZWN0aW9uKQoreworICAgIGludCBv
ZmZzZXRPZldvcmRCcmVhazsKKyAgICBWaXNpYmxlUG9zaXRpb24gd29yZEJyZWFrOworICAgIGRv
IHsKKyAgICAgICAgaWYgKGJveC0+ZGlyZWN0aW9uKCkgPT0gYmxvY2tEaXJlY3Rpb24pCisgICAg
ICAgICAgICB3b3JkQnJlYWsgPSBwcmV2aW91c1dvcmRCcmVha0luQm94SW5zaWRlQmxvY2tXaXRo
U2FtZURpcmVjdGlvbmFsaXR5KGJveCwgd29yZEJyZWFrLCBvZmZzZXRPZldvcmRCcmVhayk7Cisg
ICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhlICdlbHNlJyBjYXNlIHdoZW4gdGhlIGJveCBk
aXJlY3Rpb24gaXMgbm90IGVxdWFsIHRvIHRoZSBibG9jayBkaXJlY3Rpb24uCisgICAgICAgIGlm
ICh3b3JkQnJlYWsuaXNOdWxsKCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKG9m
ZnNldCA9PSBpbnZhbGlkT2Zmc2V0IHx8IG9mZnNldE9mV29yZEJyZWFrICE9IG9mZnNldCkKKyAg
ICAgICAgICAgIHJldHVybiB3b3JkQnJlYWs7CisgICAgfSB3aGlsZSAoMSk7ICAgICAgICAKKyAg
ICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7Cit9CisKK3N0YXRpYyBWaXNpYmxlUG9zaXRpb24g
d29yZEJvdW5kYXJ5SW5BZGphY2VudEJveGVzKGNvbnN0IElubGluZUJveCogYm94LCBpbnQgb2Zm
c2V0LCBXZWJDb3JlOjpTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uVG9TZWFyY2gsIFRleHRE
aXJlY3Rpb24gYmxvY2tEaXJlY3Rpb24sIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBv
c2l0aW9uKQoreworICAgIGNvbnN0IElubGluZUJveCogYWRqYWNlbnRCb3ggPSBib3g7CisgICAg
d2hpbGUgKGFkamFjZW50Qm94KSB7CisgICAgICAgIFZpc2libGVQb3NpdGlvbiB3b3JkQnJlYWs7
CisgICAgICAgIGlmICgoZGlyZWN0aW9uVG9TZWFyY2ggPT0gV2ViQ29yZTo6RGlyZWN0aW9uUmln
aHQgJiYgYmxvY2tEaXJlY3Rpb24gPT0gTFRSKSAKKyAgICAgICAgICAgIHx8IChkaXJlY3Rpb25U
b1NlYXJjaCA9PSBXZWJDb3JlOjpEaXJlY3Rpb25MZWZ0ICYmIGJsb2NrRGlyZWN0aW9uID09IFJU
TCkpCisgICAgICAgICAgICB3b3JkQnJlYWsgPSBmaW5kV29yZEJvdW5kYXJ5SW5Cb3hJbkJsb2Nr
RGlyZWN0aW9uKGFkamFjZW50Qm94LCBvZmZzZXQsIGJsb2NrRGlyZWN0aW9uKTsKKyAgICAgICAg
Ly8gRklYTUU6ICJlbHNlIiBub3QgaW1wbGVtZW50ZWQgeWV0LgorICAgICAgICBpZiAoIXdvcmRC
cmVhay5pc051bGwoKSkKKyAgICAgICAgICAgIHJldHVybiB3b3JkQnJlYWs7CisgICAgICAgIGFk
amFjZW50Qm94ID0gKGRpcmVjdGlvblRvU2VhcmNoID09IFdlYkNvcmU6OkRpcmVjdGlvbkxlZnQp
ID8gYWRqYWNlbnRCb3gtPm5leHRMZWFmQ2hpbGQoKSA6IGFkamFjZW50Qm94LT5wcmV2TGVhZkNo
aWxkKCk7CisgICAgICAgIG9mZnNldCA9IGludmFsaWRPZmZzZXQ7CisgICAgfQorICAgIHJldHVy
biB2aXNpYmxlUG9zaXRpb247Cit9CisKK3N0YXRpYyBWaXNpYmxlUG9zaXRpb24gbGVmdFdvcmRC
b3VuZGFyeShjb25zdCBJbmxpbmVCb3gqIGJveCwgaW50IG9mZnNldCwgVGV4dERpcmVjdGlvbiBi
bG9ja0RpcmVjdGlvbiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24pCit7
CisgICAgcmV0dXJuIHdvcmRCb3VuZGFyeUluQWRqYWNlbnRCb3hlcyhib3gsIG9mZnNldCwgV2Vi
Q29yZTo6RGlyZWN0aW9uUmlnaHQsIGJsb2NrRGlyZWN0aW9uLCB2aXNpYmxlUG9zaXRpb24pOwor
fQorIAorc3RhdGljIFZpc2libGVQb3NpdGlvbiByaWdodFdvcmRCb3VuZGFyeShjb25zdCBJbmxp
bmVCb3gqIGJveCwgaW50IG9mZnNldCwgVGV4dERpcmVjdGlvbiBibG9ja0RpcmVjdGlvbiwgY29u
c3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24pCit7CisgICAgcmV0dXJuIHdvcmRC
b3VuZGFyeUluQWRqYWNlbnRCb3hlcyhib3gsIG9mZnNldCwgV2ViQ29yZTo6RGlyZWN0aW9uTGVm
dCwgYmxvY2tEaXJlY3Rpb24sIHZpc2libGVQb3NpdGlvbik7Cit9CisKK1Zpc2libGVQb3NpdGlv
biBsZWZ0V29yZFBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9u
KQoreworICAgIC8vIEluIExUUiBibG9jaywgY3RybC1hcnJvdyBtb3ZlcyBjdXJzb3IgdG8gdGhl
IGxlZnQgYm91bmRhcnkgb2Ygd29yZHMuCisgICAgLy8gSW4gUlRMIGJsb2NrLCBjdHJsLWFycm93
IG1vdmVzIGN1cnNvciB0byB0aGUgcmlnaHQgYm91bmRhcnkgb2Ygd29yZHMuCisgICAgSW5saW5l
Qm94KiBib3g7CisgICAgaW50IG9mZnNldDsKKyAgICB2aXNpYmxlUG9zaXRpb24uZ2V0SW5saW5l
Qm94QW5kT2Zmc2V0KGJveCwgb2Zmc2V0KTsKKyAgICBUZXh0RGlyZWN0aW9uIGJsb2NrRGlyZWN0
aW9uID0gZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jayh2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2
YWxlbnQoKSk7CisgICAgCisgICAgLy8gRklYTUU6IElmIHRoZSBib3gncyBkaXJlY3Rpb25hbGl0
eSBpcyB0aGUgc2FtZSBhcyB0aGF0IG9mIHRoZSBlbmNsb3NpbmcgYmxvY2ssIHdoZW4gdGhlIG9m
ZnNldCBpcyBhdCB0aGUgYm94IGJvdW5kYXJ5CisgICAgLy8gYW5kIHRoZSBkaXJlY3Rpb24gaXMg
dG93YXJkcyBpbnNpZGUgdGhlIGJveCwgZG8gSSBzdGlsbCBuZWVkIHRvIG1ha2UgaXQgYSBzcGVj
aWFsIGNhc2U/IEZvciBleGFtcGxlLCBhIExUUiBib3ggaW5zaWRlIGEgTFRSIGJsb2NrLAorICAg
IC8vIHdoZW4gb2Zmc2V0IGlzIGF0IGJveCdzIGNhcmV0TWluT2Zmc2V0IGFuZCB0aGUgZGlyZWN0
aW9uIGlzIERpcmVjdGlvblJpZ2h0LCBzaG91bGQgaXQgYmUgdGFrZW4gY2FyZSBhcyBhIGdlbmVy
YWwgY2FzZT8KKyAgICBpZiAob2Zmc2V0ID09IGJveC0+Y2FyZXRMZWZ0bW9zdE9mZnNldCgpKQor
ICAgICAgICByZXR1cm4gbGVmdFdvcmRCb3VuZGFyeShib3gtPnByZXZMZWFmQ2hpbGQoKSwgaW52
YWxpZE9mZnNldCwgYmxvY2tEaXJlY3Rpb24sIHZpc2libGVQb3NpdGlvbik7CisgICAgaWYgKG9m
ZnNldCA9PSBib3gtPmNhcmV0UmlnaHRtb3N0T2Zmc2V0KCkpCisgICAgICAgIHJldHVybiBsZWZ0
V29yZEJvdW5kYXJ5KGJveCwgb2Zmc2V0LCBibG9ja0RpcmVjdGlvbiwgdmlzaWJsZVBvc2l0aW9u
KTsKKyAgICAKKyAgICAvLyBGSVhNRTogTm90IGltcGxlbWVudGVkLgorICAgIHJldHVybiBWaXNp
YmxlUG9zaXRpb24oKTsKK30KKworVmlzaWJsZVBvc2l0aW9uIHJpZ2h0V29yZFBvc2l0aW9uKGNv
bnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9uKQoreworICAgIElubGluZUJveCog
Ym94OworICAgIGludCBvZmZzZXQ7CisgICAgdmlzaWJsZVBvc2l0aW9uLmdldElubGluZUJveEFu
ZE9mZnNldChib3gsIG9mZnNldCk7CisgICAgVGV4dERpcmVjdGlvbiBibG9ja0RpcmVjdGlvbiA9
IGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2sodmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50
KCkpOworICAgIAorICAgIGlmIChvZmZzZXQgPT0gYm94LT5jYXJldExlZnRtb3N0T2Zmc2V0KCkp
CisgICAgICAgIHJldHVybiByaWdodFdvcmRCb3VuZGFyeShib3gsIG9mZnNldCwgYmxvY2tEaXJl
Y3Rpb24sIHZpc2libGVQb3NpdGlvbik7CisgICAgaWYgKG9mZnNldCA9PSBib3gtPmNhcmV0Umln
aHRtb3N0T2Zmc2V0KCkpCisgICAgICAgIHJldHVybiByaWdodFdvcmRCb3VuZGFyeShib3gtPm5l
eHRMZWFmQ2hpbGQoKSwgLTEsIGJsb2NrRGlyZWN0aW9uLCB2aXNpYmxlUG9zaXRpb24pOworICAg
IAorICAgIC8vIEZJWE1FOiBOb3QgaW1wbGVtZW50ZWQuCisgICAgcmV0dXJuIFZpc2libGVQb3Np
dGlvbigpOworfQorCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5p
dHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMu
aAkocmV2aXNpb24gODI0OTIpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5p
dHMuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsOCBAQCBWaXNpYmxlUG9zaXRpb24gc3Rh
cnRPZldvcmQoY29uc3QgVmlzaWJsCiBWaXNpYmxlUG9zaXRpb24gZW5kT2ZXb3JkKGNvbnN0IFZp
c2libGVQb3NpdGlvbiAmLCBFV29yZFNpZGUgPSBSaWdodFdvcmRJZk9uQm91bmRhcnkpOwogVmlz
aWJsZVBvc2l0aW9uIHByZXZpb3VzV29yZFBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiAm
KTsKIFZpc2libGVQb3NpdGlvbiBuZXh0V29yZFBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlv
biAmKTsKK1Zpc2libGVQb3NpdGlvbiByaWdodFdvcmRQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9z
aXRpb24mKTsKK1Zpc2libGVQb3NpdGlvbiBsZWZ0V29yZFBvc2l0aW9uKGNvbnN0IFZpc2libGVQ
b3NpdGlvbiYpOwogCiAvLyBzZW50ZW5jZXMKIFZpc2libGVQb3NpdGlvbiBzdGFydE9mU2VudGVu
Y2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uICYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9E
T01TZWxlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2Vs
ZWN0aW9uLmNwcAkocmV2aXNpb24gODI0OTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNl
bGVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzMiw2ICszMzIsOCBAQCB2b2lkIERPTVNl
bGVjdGlvbjo6bW9kaWZ5KGNvbnN0IFN0cmluZyYgCiAgICAgICAgIGdyYW51bGFyaXR5ID0gUGFy
YWdyYXBoQm91bmRhcnk7CiAgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZ3JhbnVsYXJp
dHlTdHJpbmcsICJkb2N1bWVudGJvdW5kYXJ5IikpCiAgICAgICAgIGdyYW51bGFyaXR5ID0gRG9j
dW1lbnRCb3VuZGFyeTsKKyAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShncmFudWxhcml0
eVN0cmluZywgIi13ZWJraXQtdmlzdWFsLXdvcmQiKSkKKyAgICAgICAgZ3JhbnVsYXJpdHkgPSBX
ZWJLaXRWaXN1YWxXb3JkR3JhbnVsYXJpdHk7CiAgICAgZWxzZQogICAgICAgICByZXR1cm47CiAK
SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDgyNDkyKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTEtMDMtMzAgIFhpYW9tZWkgSmkgIDx4amlA
Y2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEV4cGVyaW1lbnQgd2l0aCBtb3ZpbmcgY2FyZXQgYnkgd29yZCBpbiB2aXN1YWwgb3Jk
ZXIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NzMz
NgorCisgICAgICAgICogZWRpdGluZy9zZWxlY3Rpb24vbW92ZS1ieS13b3JkLXZpc3VhbGx5LWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZWRpdGluZy9zZWxlY3Rpb24vbW92ZS1ieS13
b3JkLXZpc3VhbGx5Lmh0bWw6IEFkZGVkLgorCiAyMDExLTAzLTMwICBNaWhhaSBQYXJwYXJpdGEg
IDxtaWhhaXBAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFB1dCBleHBlY3RlZCBQTkcgZm9yIGZh
c3QvbXVsdGljb2wvbWF4LWhlaWdodC1jb2x1bW5zLWJsb2NrLmh0bWwgaW4gdGhlCkluZGV4OiBM
YXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9tb3ZlLWJ5LXdvcmQtdmlzdWFsbHktZXhwZWN0
ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL21vdmUt
Ynktd29yZC12aXN1YWxseS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9lZGl0aW5nL3NlbGVjdGlvbi9tb3ZlLWJ5LXdvcmQtdmlzdWFsbHktZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQzIEBACisKKz09PT09PT09IE1vdmUgQnkgV29yZCA9PT09
CitUZXN0IDEsIExUUjoKK01vdmUgcmlnaHQgYnkgb25lIHdvcmQKKyJhYmMgZGVmIGhpaiBvcHEg
cnN0IlswLCA0LCA4LCAxMiwgMTYsIDE5XSAgICBGQUlMIGV4cGVjdGVkOiBbNCwgOCwgMTIsIDE2
LCAxOSwgMTldCitNb3ZlIGxlZnQgYnkgb25lIHdvcmQKKyJhYmMgZGVmIGhpaiBvcHEgcnN0Ilsx
NiwgMTYsIDEyLCA4LCA0LCAwXSAgICBGQUlMIGV4cGVjdGVkOiBbMTYsIDEyLCA4LCA0LCAwLCAw
XQorVGVzdCAyLCBSVEw6CitNb3ZlIGxlZnQgYnkgb25lIHdvcmQKKyJhYmMgZGVmIGhpaiBvcHEg
cnN0IlswLCAxNSwgMTEsIDcsIDMsIDE5XSAgICBGQUlMIGV4cGVjdGVkOiBbMTUsIDExLCA3LCAz
LCAxOSwgMTldCitNb3ZlIHJpZ2h0IGJ5IG9uZSB3b3JkCisiYWJjIGRlZiBoaWogb3BxIHJzdCJb
MTksIDMsIDcsIDExLCAxNSwgMF0gICAgRkFJTCBleHBlY3RlZDogWzMsIDcsIDExLCAxNSwgMCwg
MF0KK1Rlc3QgMywgTFRSOgorTW92ZSByaWdodCBieSBvbmUgd29yZAorIlpaWiBRUVEgQkJCIEND
QyBYWFgiWzAsIDE1LCAxMSwgNywgMywgMTldICAgIEZBSUwgZXhwZWN0ZWQ6IFsxNSwgMTEsIDcs
IDMsIDE5LCAxOV0KK01vdmUgbGVmdCBieSBvbmUgd29yZAorIlpaWiBRUVEgQkJCIENDQyBYWFgi
WzE5LCAzLCA3LCAxMSwgMTUsIDBdICAgIEZBSUwgZXhwZWN0ZWQ6IFszLCA3LCAxMSwgMTUsIDAs
IDBdCitUZXN0IDQsIFJUTDoKK01vdmUgbGVmdCBieSBvbmUgd29yZAorIlpaWiBRUVEgQkJCIEND
QyBYWFgiWzAsIDQsIDgsIDEyLCAxNiwgMTldICAgIEZBSUwgZXhwZWN0ZWQ6IFs0LCA4LCAxMiwg
MTYsIDE5LCAxOV0KK01vdmUgcmlnaHQgYnkgb25lIHdvcmQKKyJaWlogUVFRIEJCQiBDQ0MgWFhY
IlsxNiwgMTYsIDEyLCA4LCA0LCAwXSAgICBGQUlMIGV4cGVjdGVkOiBbMTYsIDEyLCA4LCA0LCAw
LCAwXQorVGVzdCA1LCBMVFI6CitNb3ZlIHJpZ2h0IGJ5IG9uZSB3b3JkCisiYWJjIGRlZiBaUUIg
UklHIHV2dyB4eXoiWzAsIDQsIDgsIDExLCAxNiwgMjAsIDIzXSAgICBGQUlMIGV4cGVjdGVkOiBb
NCwgOCwgMTEsIDE2LCAyMCwgMjMsIDIzXQorTW92ZSBsZWZ0IGJ5IG9uZSB3b3JkCisiYWJjIGRl
ZiBaUUIgUklHIHV2dyB4eXoiWzIwLCAyMCwgMTYsIDExLCA0LCA0LCAwXSAgICBGQUlMIGV4cGVj
dGVkOiBbMjAsIDE2LCAxMSwgOCwgNCwgMCwgMF0KK1Rlc3QgNiwgUlRMOgorTW92ZSBsZWZ0IGJ5
IG9uZSB3b3JkCisiYWJjIGRlZiBaUUIgUklHIHV2dyB4eXoiWzAsIDMsIDgsIDEyLCAxNiwgMTks
IDIzXSAgICBGQUlMIGV4cGVjdGVkOiBbMywgOCwgMTIsIDE2LCAxOSwgMjMsIDIzXQorTW92ZSBy
aWdodCBieSBvbmUgd29yZAorImFiYyBkZWYgWlFCIFJJRyB1dncgeHl6IlsxMiwgMTksIDEyLCAx
MiwgOCwgMywgMF0gICAgRkFJTCBleHBlY3RlZDogWzE5LCAxNiwgMTIsIDgsIDMsIDAsIDBdCitU
ZXN0IDcsIExUUjoKK01vdmUgcmlnaHQgYnkgb25lIHdvcmQKKyJaUUIgYWJjIFJJRyJbMCwgNCwg
OCwgMTFdICAgIEZBSUwgZXhwZWN0ZWQ6IFs0LCA4LCAxMSwgMTFdCitNb3ZlIGxlZnQgYnkgb25l
IHdvcmQKKyJaUUIgYWJjIFJJRyJbNCwgNCwgNCwgMF0gICAgRkFJTCBleHBlY3RlZDogWzgsIDQs
IDAsIDBdCitUZXN0IDgsIFJUTDoKK01vdmUgbGVmdCBieSBvbmUgd29yZAorIlpRQiBhYmMgUklH
IlswLCA0LCA4LCAxMV0gICAgRkFJTCBleHBlY3RlZDogWzQsIDgsIDExLCAxMV0KK01vdmUgcmln
aHQgYnkgb25lIHdvcmQKKyJaUUIgYWJjIFJJRyJbOCwgOCwgMCwgMF0gICAgRkFJTCBleHBlY3Rl
ZDogWzgsIDQsIDAsIDBdCisKSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL21v
dmUtYnktd29yZC12aXN1YWxseS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRp
bmcvc2VsZWN0aW9uL21vdmUtYnktd29yZC12aXN1YWxseS5odG1sCShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vbW92ZS1ieS13b3JkLXZpc3VhbGx5Lmh0bWwJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTk2IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgor
PGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRt
bDsgY2hhcnNldD11dGYtOCI+Cis8c3R5bGU+CitkaXYudGVzdCB7CisgICAgLXdlYmtpdC11c2Vy
LW1vZGlmeTogcmVhZC13cml0ZTsKKyAgICBwYWRkaW5nOiA0cHg7CisgICAgYm9yZGVyOiAxcHgg
ZGFzaGVkIGxpZ2h0Ymx1ZTsKKyAgICBtYXJnaW46IDRweCA0cHggNHB4IDI0cHg7CisgICAgb3V0
bGluZTogbm9uZTsKKyAgICBmb250LWZhbWlseTogTHVjaWRhIEdyYW5kZTsKKyAgICBjb3VudGVy
LWluY3JlbWVudDogdGVzdC1udW1iZXI7Cit9CitkaXYudGVzdDpiZWZvcmUgeyBjb250ZW50OiBj
b3VudGVyKHRlc3QtbnVtYmVyKTsgcG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiA4cHg7IGZvbnQt
c2l6ZTogeC1zbWFsbDsgdGV4dC1hbGlnbjogcmlnaHQ7IHdpZHRoOiAyMHB4OyB9CitkaXYudGVz
dCBzcGFuIHsgYmFja2dyb3VuZC1jb2xvcjogI2RlZjsgfQorZGl2LnRlc3QgaW1nIHsgd2lkdGg6
IDFlbTsgaGVpZ2h0OiAxZW07IGJhY2tncm91bmQtY29sb3I6IGxpZ2h0Z3JlZW47IH0KK2Rpdi50
ZXN0IGltZyArIGltZyB7IGJhY2tncm91bmQtY29sb3I6IGxpZ2h0Ymx1ZTsgfQorZGl2LnRlc3Qg
ZGl2IHsgYm9yZGVyOiAxcHggZGFzaGVkIHBpbms7IHBhZGRpbmc6IDNweDsgaGVpZ2h0OiAyZW07
IH0KK3Rlc3RfbW92ZV9ieV93b3JkIHtkaXNwbGF5OiBub25lO30KKzwvc3R5bGU+Cis8c2NyaXB0
PgordmFyIG1lc3NhZ2VzID0gW107CisKK2Z1bmN0aW9uIGxvZyhtZXNzYWdlKQoreworICAgIG1l
c3NhZ2VzLnB1c2gobWVzc2FnZSk7Cit9CisKK2Z1bmN0aW9uIGZsdXNoTG9nKCkKK3sKKyAgICBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNy
ZWF0ZVRleHROb2RlKG1lc3NhZ2VzLmpvaW4oIiIpKSk7Cit9CisKK2Z1bmN0aW9uIGNhcmV0Q29v
cmRpbmF0ZXMoKQoreworICAgIGlmICghd2luZG93LnRleHRJbnB1dENvbnRyb2xsZXIpCisgICAg
ICAgIHJldHVybiB7IHg6IDAsIHkgOjAgfTsKKyAgICB2YXIgY2FyZXRSZWN0ID0gdGV4dElucHV0
Q29udHJvbGxlci5maXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZSh0ZXh0SW5wdXRDb250cm9sbGVy
LnNlbGVjdGVkUmFuZ2UoKVswXSwgMCk7CisgICAgcmV0dXJuIHsgeDogY2FyZXRSZWN0WzBdLCB5
OiBjYXJldFJlY3RbMV0gfTsKK30KKworCitmdW5jdGlvbiBmb2xkKHN0cmluZykKK3sKKyAgICB2
YXIgcmVzdWx0ID0gIiI7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHJpbmcubGVuZ3RoOyAr
K2kpIHsKKyAgICAgICAgdmFyIGNoYXIgPSBzdHJpbmcuY2hhckNvZGVBdChpKTsKKyAgICAgICAg
aWYgKGNoYXIgPj0gMHgwNWQwKQorICAgICAgICAgICAgY2hhciAtPSAweDA1OGY7CisgICAgICAg
IGVsc2UgaWYgKGNoYXIgPT0gMTApIHsKKyAgICAgICAgICAgIHJlc3VsdCArPSAiXFxuIjsKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIHJlc3VsdCArPSBTdHJpbmcu
ZnJvbUNoYXJDb2RlKGNoYXIpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitmdW5j
dGlvbiBsb2dQb3NpdGlvbnMocG9zaXRpb25zKQoreworICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
cG9zaXRpb25zLmxlbmd0aDsgKytpKSB7CisgICAgICAgIGlmIChpKSB7CisgICAgICAgICAgICBp
ZiAocG9zaXRpb25zW2ldLm5vZGUgIT0gcG9zaXRpb25zW2kgLSAxXS5ub2RlKQorICAgICAgICAg
ICAgICAgIGxvZygiXSIpOworICAgICAgICAgICAgbG9nKCIsICIpOworICAgICAgICB9CisgICAg
ICAgIGlmICghaSB8fCBwb3NpdGlvbnNbaV0ubm9kZSAhPSBwb3NpdGlvbnNbaSAtIDFdLm5vZGUp
CisgICAgICAgICAgICBsb2coKHBvc2l0aW9uc1tpXS5ub2RlIGluc3RhbmNlb2YgVGV4dCA/ICci
JyArIGZvbGQocG9zaXRpb25zW2ldLm5vZGUuZGF0YSkgKyAnIicgOiAiPCIgKyBwb3NpdGlvbnNb
aV0ubm9kZS50YWdOYW1lICsgIj4iKSArICJbIik7CisgICAgICAgIGxvZyhwb3NpdGlvbnNbaV0u
b2Zmc2V0KTsKKyAgICB9CisgICAgbG9nKCJdIik7Cit9CisKK3ZhciB3b3JkQnJlYWtzOworCitm
dW5jdGlvbiB2YWxpZGF0ZURhdGEocG9zaXRpb25zKQoreworICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgd29yZEJyZWFrcy5sZW5ndGggLSAxOyArK2kpIHsKKyAgICAgICAgaWYgKHBvc2l0aW9uc1tp
XS5vZmZzZXQgIT0gd29yZEJyZWFrc1tpICsgMV0pIHsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgfQorICAgIGlmIChpICE9IHdvcmRCcmVha3MubGVuZ3RoIC0gMSAmJiBwb3Np
dGlvbnNbaV0gIT0gd29yZEJyZWFrc1tpXSkgeworICAgICAgICBsb2coIiAgICBGQUlMIGV4cGVj
dGVkOiBbIik7CisgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgd29yZEJyZWFrcy5sZW5ndGg7
ICsraSkgeworICAgICAgICAgICAgbG9nKHdvcmRCcmVha3NbaV0gKyAiLCAiKTsKKyAgICAgICAg
fQorICAgICAgICBsb2cod29yZEJyZWFrc1t3b3JkQnJlYWtzLmxlbmd0aCAtIDFdICsgIl0iKTsK
KyAgICB9Cit9CisKK2Z1bmN0aW9uIGNvbGxlY3RXb3JkQnJlYWtzKHRlc3QsIHNlYXJjaERpcmVj
dGlvbikKK3sKKyAgICBpZiAoc2VhcmNoRGlyZWN0aW9uID09ICJyaWdodCIpIHsKKyAgICAgICAg
aWYgKHRlc3QuZ2V0QXR0cmlidXRlKCJkaXIiKSA9PSAnbHRyJykgCisgICAgICAgICAgICB3b3Jk
QnJlYWtzID0gdGVzdC50aXRsZS5zcGxpdCgifCIpWzBdLnNwbGl0KCIgIik7CisgICAgICAgIGVs
c2UgCisgICAgICAgICAgICB3b3JkQnJlYWtzID0gdGVzdC50aXRsZS5zcGxpdCgifCIpWzFdLnNw
bGl0KCIgIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHRlc3QuZ2V0QXR0cmlidXRlKCJk
aXIiKSA9PSAnbHRyJykgCisgICAgICAgICAgICB3b3JkQnJlYWtzID0gdGVzdC50aXRsZS5zcGxp
dCgifCIpWzFdLnNwbGl0KCIgIik7CisgICAgICAgIGVsc2UgCisgICAgICAgICAgICB3b3JkQnJl
YWtzID0gdGVzdC50aXRsZS5zcGxpdCgifCIpWzBdLnNwbGl0KCIgIik7CisgICAgfQorfQorCitm
dW5jdGlvbiBtb3ZlQnlXb3JkKHNlbCwgdGVzdCwgc2VhcmNoRGlyZWN0aW9uLCBkaXIpCit7Cisg
ICAgbG9nKCJNb3ZlICIgKyBzZWFyY2hEaXJlY3Rpb24gKyAiIGJ5IG9uZSB3b3JkXG4iKTsKKyAg
ICB2YXIgcHJldk9mZnNldCA9IHNlbC5hbmNob3JPZmZzZXQ7CisgICAgdmFyIG5vZGUgPSBzZWwu
YW5jaG9yTm9kZTsKKyAgICBjb2xsZWN0V29yZEJyZWFrcyh0ZXN0LCBzZWFyY2hEaXJlY3Rpb24p
OworICAgIHNlbC5zZXRQb3NpdGlvbihub2RlLCB3b3JkQnJlYWtzWzBdKTsKKyAgICB2YXIgcG9z
aXRpb25zID0gW107CisgICAgZm9yICh2YXIgaW5kZXggPSAxOyBpbmRleCA8IHdvcmRCcmVha3Mu
bGVuZ3RoOyArK2luZGV4KSB7CisgICAgICAgIHNlbC5tb2RpZnkoIm1vdmUiLCBzZWFyY2hEaXJl
Y3Rpb24sICItd2Via2l0LXZpc3VhbC13b3JkIik7CisgICAgICAgIHBvc2l0aW9ucy5wdXNoKHsg
bm9kZTogc2VsLmFuY2hvck5vZGUsIG9mZnNldDogc2VsLmFuY2hvck9mZnNldCwgcG9pbnQ6IGNh
cmV0Q29vcmRpbmF0ZXMoKSB9KTsKKyAgICAgICAgc2VsLnNldFBvc2l0aW9uKG5vZGUsIHdvcmRC
cmVha3NbaW5kZXhdKTsKKyAgICB9CisgICAgc2VsLm1vZGlmeSgibW92ZSIsIHNlYXJjaERpcmVj
dGlvbiwgIi13ZWJraXQtdmlzdWFsLXdvcmQiKTsKKyAgICBwb3NpdGlvbnMucHVzaCh7IG5vZGU6
IHNlbC5hbmNob3JOb2RlLCBvZmZzZXQ6IHNlbC5hbmNob3JPZmZzZXQsIHBvaW50OiBjYXJldENv
b3JkaW5hdGVzKCkgfSk7CisgICAgbG9nUG9zaXRpb25zKHBvc2l0aW9ucyk7CisgICAgdmFsaWRh
dGVEYXRhKHBvc2l0aW9ucyk7CisgICAgbG9nKCJcbiIpOworfQorCitmdW5jdGlvbiBtb3ZlQnlX
b3JkRm9yRXZlcnlQb3NpdGlvbihzZWwsIHRlc3QsIGRpcikKK3sKKyAgICAvLyBDaGVjayBjdHJs
LXJpZ2h0LWFycm93IHdvcmtzIGZvciBldmVyeSBwb3NpdGlvbi4KKyAgICBzZWwuc2V0UG9zaXRp
b24odGVzdCwgMCk7CisgICAgdmFyIGRpcmVjdGlvbiA9ICJyaWdodCI7CisgICAgaWYgKGRpciA9
PSAicnRsIikKKyAgICAgICAgZGlyZWN0aW9uID0gImxlZnQiOyAgICAKKyAgICBtb3ZlQnlXb3Jk
KHNlbCwgdGVzdCwgZGlyZWN0aW9uLCBkaXIpOyAgICAKKyAgICAvLyBDaGVjayBjdHJsLWxlZnQt
YXJyb3cgd29ya3MgZm9yIGV2ZXJ5IHBvc2l0aW9uLgorICAgIGlmIChkaXIgPT0gImx0ciIpCisg
ICAgICAgIGRpcmVjdGlvbiA9ICJsZWZ0IjsKKyAgICBlbHNlCisgICAgICAgIGRpcmVjdGlvbiA9
ICJyaWdodCI7ICAgIAorICAgIG1vdmVCeVdvcmQoc2VsLCB0ZXN0LCBkaXJlY3Rpb24sIGRpcik7
ICAgIAorfQorCitmdW5jdGlvbiBydW5Nb3ZlTGVmdFJpZ2h0KHRlc3RzLCB1bml0KQoreworICAg
IHZhciBzZWwgPSBnZXRTZWxlY3Rpb24oKTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRlc3Rz
Lmxlbmd0aDsgKytpKSB7CisgICAgICAgIHZhciBwb3NpdGlvbnNNb3ZpbmdSaWdodDsKKyAgICAg
ICAgdmFyIHBvc2l0aW9uc01vdmluZ0xlZnQ7CisKKyAgICAgICAgaWYgKHRlc3RzW2ldLmdldEF0
dHJpYnV0ZSgiZGlyIikgPT0gJ2x0cicpCisgICAgICAgIHsKKyAgICAgICAgICAgIGxvZygiVGVz
dCAiICsgKGkgKyAxKSArICIsIExUUjpcbiIpOworICAgICAgICAgICAgbW92ZUJ5V29yZEZvckV2
ZXJ5UG9zaXRpb24oc2VsLCB0ZXN0c1tpXSwgImx0ciIpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgbG9nKCJUZXN0ICIgKyAoaSArIDEpICsgIiwgUlRMOlxuIik7CisgICAgICAgICAg
ICBtb3ZlQnlXb3JkRm9yRXZlcnlQb3NpdGlvbihzZWwsIHRlc3RzW2ldLCAicnRsIik7CisgICAg
ICAgIH0KKworICAgIH0KKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGVzdE1vdmVCeVdv
cmQiKS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOworfQorCitmdW5jdGlvbiBydW5UZXN0KCkgewor
ICAgIGxvZygiXG49PT09PT09PSBNb3ZlIEJ5IFdvcmQgPT09PVxuIik7CisgICAgdmFyIHRlc3Rz
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgidGVzdF9tb3ZlX2J5X3dvcmQiKTsK
KyAgICBydW5Nb3ZlTGVmdFJpZ2h0KHRlc3RzLCAid29yZCIpOworfQorCitvbmxvYWQgPSBmdW5j
dGlvbigpIHsKKyAgICB0cnkgeworICAgICAgICBydW5UZXN0KCk7CisgICAgfSBmaW5hbGx5IHsK
KyAgICAgICAgZmx1c2hMb2coKTsKKyAgICB9Cit9OworCitpZiAod2luZG93LmxheW91dFRlc3RD
b250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKzwvc2Ny
aXB0PgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJ0ZXN0TW92ZUJ5V29yZCI+Cis8ZGl2IGRp
cj1sdHIgY2xhc3M9InRlc3RfbW92ZV9ieV93b3JkIiB0aXRsZT0iMCA0IDggMTIgMTYgMTl8MTkg
MTYgMTIgOCA0IDAiIGNvbnRlbnRlZGl0YWJsZT5hYmMgZGVmIGhpaiBvcHEgcnN0PC9kaXY+Cis8
ZGl2IGRpcj1ydGwgY2xhc3M9InRlc3RfbW92ZV9ieV93b3JkIiB0aXRsZT0iMCAxNSAxMSA3IDMg
MTl8MTkgMyA3IDExIDE1IDAiIGNvbnRlbnRlZGl0YWJsZT5hYmMgZGVmIGhpaiBvcHEgcnN0PC9k
aXY+Cis8ZGl2IGRpcj1sdHIgY2xhc3M9InRlc3RfbW92ZV9ieV93b3JkIiB0aXRsZT0iMCAxNSAx
MSA3IDMgMTl8MTkgMyA3IDExIDE1IDAiIGNvbnRlbnRlZGl0YWJsZT7Xqdep16kg16DXoNegINeR
15HXkSDXkteS15Ig16fXp9enPC9kaXY+Cis8ZGl2IGRpcj1ydGwgY2xhc3M9InRlc3RfbW92ZV9i
eV93b3JkIiB0aXRsZT0iMCA0IDggMTIgMTYgMTl8MTkgMTYgMTIgOCA0IDAiIGNvbnRlbnRlZGl0
YWJsZT7Xqdep16kg16DXoNegINeR15HXkSDXkteS15Ig16fXp9enPC9kaXY+Cis8ZGl2IGRpcj1s
dHIgY2xhc3M9InRlc3RfbW92ZV9ieV93b3JkIiB0aXRsZT0iMCA0IDggMTEgMTYgMjAgMjN8MjMg
MjAgMTYgMTEgOCA0IDAiIGNvbnRlbnRlZGl0YWJsZT5hYmMgZGVmINep16DXkSDXodeY15YgdXZ3
IHh5ejwvZGl2PgorPGRpdiBkaXI9cnRsIGNsYXNzPSJ0ZXN0X21vdmVfYnlfd29yZCIgdGl0bGU9
IjAgMyA4IDEyIDE2IDE5IDIzfDIzIDE5IDE2IDEyIDggMyAwIiBjb250ZW50ZWRpdGFibGU+YWJj
IGRlZiDXqdeg15Eg16HXmNeWIHV2dyB4eXo8L2Rpdj4KKzxkaXYgZGlyPWx0ciBjbGFzcz0idGVz
dF9tb3ZlX2J5X3dvcmQiIHRpdGxlPSIwIDQgOCAxMXwxMSA4IDQgMCIgY29udGVudGVkaXRhYmxl
Ptep16DXkSBhYmMg16HXmNeWPC9kaXY+Cis8ZGl2IGRpcj1ydGwgY2xhc3M9InRlc3RfbW92ZV9i
eV93b3JkIiB0aXRsZT0iMCA0IDggMTF8MTEgOCA0IDAiIGNvbnRlbnRlZGl0YWJsZT7Xqdeg15Eg
YWJjINeh15jXljwvZGl2PgorPC9kaXY+CisKKzxwcmUgaWQ9ImNvbnNvbGUiPjwvcHJlPgorPC9i
b2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>87628</attachid>
            <date>2011-03-30 15:28:07 -0700</date>
            <delta_ts>2011-03-31 04:32:16 -0700</delta_ts>
            <desc>patch w/ layout test</desc>
            <filename>57336.v5</filename>
            <type>text/plain</type>
            <size>25098</size>
            <attacher name="Xiaomei Ji">xji</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgyNDkyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTEgQEAKKzIwMTEtMDMtMzAgIFhpYW9tZWkg
SmkgIDx4amlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEV4cGVyaW1lbnQgd2l0aCBtb3ZpbmcgY2FyZXQgYnkgd29yZCBpbiB2
aXN1YWwgb3JkZXIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01NzMzNgorCisgICAgICAgIFRoaXMgaXMgdGhlIDFzdCB2ZXJzaW9uIG9mIGltcGxlbWVu
dGluZyAibW92ZSBjYXJldCBieSB3b3JkIGluIHZpc3VhbCBvcmRlciIuCisgICAgICAgIEl0IG9u
bHkgd29ya3MgaW4gdGhlIGZvbGxvd2luZyBzaXR1YXRpb246CisgICAgICAgIDEuIEZvciBhIExU
UiBib3ggaW4gYSBMVFIgYmxvY2sgb3IgYSBSVEwgYm94IGluIFJUTCBibG9jaywgCisgICAgICAg
IHdoZW4gY2FyZXQgaXMgYXQgdGhlIGxlZnQgYm91bmRhcnkgb2YgdGhlIGJveCBhbmQgd2UgYXJl
IGxvb2tpbmcgZm9yIAorICAgICAgICB0aGUgd29yZCBib3VuZGFyeSBpbiByaWdodC4KKyAgICAg
ICAgMi4gRm9yIGEgTFRSIG9yIFJUTCBib3ggaW4gYSBMVFIgYmxvY2ssIHdoZW4gY2FyZXQgaXMg
YXQgdGhlIGxlZnQgYm91bmRhcnkKKyAgICAgICAgb2YgdGhlIGJveCBhbmQgd2UgYXJlIGxvb2tp
bmcgZm9yIHRoZSB3b3JkIGJvdW5kYXJ5IGluIGxlZnQgYW5kIAorICAgICAgICBwcmV2aW91cyBi
b3ggaXMgYSBMVFIgYm94LgorICAgICAgICAzLiBGb3IgYSBMVFIgb3IgUlRMIGJveCBpbiBhIFJU
TCBibG9jaywgd2hlbiB0aGUgY2FyZXQgaXMgYXQgdGhlIHJpZ2h0IAorICAgICAgICBib3VuZGFy
eSBvZiB0aGUgYm94IGFuZCB3ZSBhcmUgbG9va2luZyBmb3IgdGhlIHdvcmQgYm91bmRhcnkgaW4g
cmlnaHQgYW5kIG5leHQgYm94IGlzIFJUTCBib3guCisKKyAgICAgICAgQW4gZXhwZXJpbWVudGFs
IGdyYW51bGFyaXR5IGlzIGludHJvZHVjZWQsIGFzIGEgc2lkZSBlZmZlY3QsIGZ1bmN0aW9ucyBo
YXZpbmcgc3dpdGNoIHN0YXRlbWVudHMKKyAgICAgICAgdG8gaGFuZGxlIHRob3NlIGdyYW51bGFy
aXRpZXMgaGF2ZSB0byBhZGQgbW9yZSBvbmUgY2FzZSB0byBoYW5kbGUgdGhpcyBuZXcgZ3JhbnVs
YXJpdHkuCisgICAgICAgIFRoZSBleHBlcmltZW50YWwgZ3JhbnVsYXJpdHkgaXMgZXhwb3NlZCB0
aG91Z2ggSlMgYnkgJy13ZWJraXQtdmlzdWFsLXdvcmQiLgorCisgICAgICAgIFRlc3Q6IGVkaXRp
bmcvc2VsZWN0aW9uL21vdmUtYnktd29yZC12aXN1YWxseS5odG1sCisKKyAgICAgICAgKiBlZGl0
aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9u
Q29udHJvbGxlcjo6bW9kaWZ5RXh0ZW5kaW5nUmlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6U2Vs
ZWN0aW9uQ29udHJvbGxlcjo6bW9kaWZ5RXh0ZW5kaW5nRm9yd2FyZCk6CisgICAgICAgIChXZWJD
b3JlOjpTZWxlY3Rpb25Db250cm9sbGVyOjptb2RpZnlNb3ZpbmdSaWdodCk6CisgICAgICAgIChX
ZWJDb3JlOjpTZWxlY3Rpb25Db250cm9sbGVyOjptb2RpZnlNb3ZpbmdGb3J3YXJkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vZGlmeUV4dGVuZGluZ0xlZnQpOgor
ICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kaWZ5RXh0ZW5kaW5nQmFj
a3dhcmQpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kaWZ5TW92
aW5nTGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25Db250cm9sbGVyOjptb2RpZnlN
b3ZpbmdCYWNrd2FyZCk6CisgICAgICAgICogZWRpdGluZy9UZXh0R3JhbnVsYXJpdHkuaDoKKyAg
ICAgICAgKiBlZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VmlzaWJsZVNlbGVjdGlvbjo6c2V0U3RhcnRBbmRFbmRGcm9tQmFzZUFuZEV4dGVudFJlc3BlY3Rp
bmdHcmFudWxhcml0eSk6CisgICAgICAgICogZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnByZXZpb3VzV29yZEJyZWFrSW5Cb3hJbnNpZGVCbG9ja1dpdGhTYW1l
RGlyZWN0aW9uYWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6d29yZEJvdW5kYXJ5SW5Cb3gpOgor
ICAgICAgICAoV2ViQ29yZTo6d29yZEJvdW5kYXJ5SW5BZGphY2VudEJveGVzKToKKyAgICAgICAg
KFdlYkNvcmU6OmxlZnRXb3JkQm91bmRhcnkpOgorICAgICAgICAoV2ViQ29yZTo6cmlnaHRXb3Jk
Qm91bmRhcnkpOgorICAgICAgICAoV2ViQ29yZTo6bGVmdFdvcmRQb3NpdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpyaWdodFdvcmRQb3NpdGlvbik6CisgICAgICAgICogZWRpdGluZy92aXNpYmxl
X3VuaXRzLmg6CisgICAgICAgICogcGFnZS9ET01TZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RE9NU2VsZWN0aW9uOjptb2RpZnkpOgorCiAyMDExLTAzLTMwICBTYW0gV2VpbmlnICA8
c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQnJhZHkgRWlkc29uLgpJbmRl
eDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCShy
ZXZpc2lvbiA4MjQ5MikKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJv
bGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0Nyw2ICs0NDcsMTAgQEAgVmlzaWJsZVBvc2l0
aW9uIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vZAogICAgIGNhc2UgRG9jdW1lbnRCb3VuZGFyeToK
ICAgICAgICAgLy8gRklYTUU6IGltcGxlbWVudCBhbGwgb2YgdGhlIGFib3ZlPwogICAgICAgICBw
b3MgPSBtb2RpZnlFeHRlbmRpbmdGb3J3YXJkKGdyYW51bGFyaXR5KTsKKyAgICAgICAgYnJlYWs7
CisgICAgLy8gRklYTUU6IHJlbW92ZSBsYXRlci4KKyAgICBjYXNlIFdlYktpdFZpc3VhbFdvcmRH
cmFudWxhcml0eToKKyAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBwb3M7CiB9CkBA
IC00ODYsNiArNDkwLDkgQEAgVmlzaWJsZVBvc2l0aW9uIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om1v
ZAogICAgICAgICBlbHNlCiAgICAgICAgICAgICBwb3MgPSBlbmRPZkRvY3VtZW50KHBvcyk7CiAg
ICAgICAgIGJyZWFrOworICAgIC8vIEZJWE1FOiByZW1vdmUgbGF0ZXIuCisgICAgY2FzZSBXZWJL
aXRWaXN1YWxXb3JkR3JhbnVsYXJpdHk6CisgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAKICAg
ICByZXR1cm4gcG9zOwpAQCAtNTE3LDYgKzUyNCw5IEBAIFZpc2libGVQb3NpdGlvbiBTZWxlY3Rp
b25Db250cm9sbGVyOjptb2QKICAgICBjYXNlIExpbmVCb3VuZGFyeToKICAgICAgICAgcG9zID0g
cmlnaHRCb3VuZGFyeU9mTGluZShzdGFydEZvclBsYXRmb3JtKCksIGRpcmVjdGlvbk9mRW5jbG9z
aW5nQmxvY2soKSk7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgV2ViS2l0VmlzdWFsV29yZEdy
YW51bGFyaXR5OgorICAgICAgICBwb3MgPSByaWdodFdvcmRQb3NpdGlvbihWaXNpYmxlUG9zaXRp
b24obV9zZWxlY3Rpb24uZXh0ZW50KCksIG1fc2VsZWN0aW9uLmFmZmluaXR5KCkpKTsKKyAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBwb3M7CiB9CkBAIC01NjUsNiArNTc1LDkgQEAg
VmlzaWJsZVBvc2l0aW9uIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vZAogICAgICAgICBlbHNlCiAg
ICAgICAgICAgICBwb3MgPSBlbmRPZkRvY3VtZW50KHBvcyk7CiAgICAgICAgIGJyZWFrOworICAg
IC8vIEZJWE1FOiByZW1vdmUgbGF0ZXIuCisgICAgY2FzZSBXZWJLaXRWaXN1YWxXb3JkR3JhbnVs
YXJpdHk6CisgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gcG9zOwogfQpAQCAtNjA0
LDYgKzYxNywxMCBAQCBWaXNpYmxlUG9zaXRpb24gU2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kCiAg
ICAgY2FzZSBQYXJhZ3JhcGhCb3VuZGFyeToKICAgICBjYXNlIERvY3VtZW50Qm91bmRhcnk6CiAg
ICAgICAgIHBvcyA9IG1vZGlmeUV4dGVuZGluZ0JhY2t3YXJkKGdyYW51bGFyaXR5KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgLy8gRklYTUU6IHJlbW92ZSBsYXRlci4KKyAgICBjYXNlIFdlYktpdFZp
c3VhbFdvcmRHcmFudWxhcml0eToKKyAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBw
b3M7CiB9CkBAIC02NDgsNiArNjY1LDkgQEAgVmlzaWJsZVBvc2l0aW9uIFNlbGVjdGlvbkNvbnRy
b2xsZXI6Om1vZAogICAgICAgICBlbHNlCiAgICAgICAgICAgICBwb3MgPSBzdGFydE9mRG9jdW1l
bnQocG9zKTsKICAgICAgICAgYnJlYWs7CisgICAgLy8gRklYTUU6IHJlbW92ZSBsYXRlci4KKyAg
ICBjYXNlIFdlYktpdFZpc3VhbFdvcmRHcmFudWxhcml0eToKKyAgICAgICAgYnJlYWs7CiAgICAg
fQogICAgIHJldHVybiBwb3M7CiB9CkBAIC02NzgsNiArNjk4LDkgQEAgVmlzaWJsZVBvc2l0aW9u
IFNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vZAogICAgIGNhc2UgTGluZUJvdW5kYXJ5OgogICAgICAg
ICBwb3MgPSBsZWZ0Qm91bmRhcnlPZkxpbmUoc3RhcnRGb3JQbGF0Zm9ybSgpLCBkaXJlY3Rpb25P
ZkVuY2xvc2luZ0Jsb2NrKCkpOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIFdlYktpdFZpc3Vh
bFdvcmRHcmFudWxhcml0eToKKyAgICAgICAgcG9zID0gbGVmdFdvcmRQb3NpdGlvbihWaXNpYmxl
UG9zaXRpb24obV9zZWxlY3Rpb24uZXh0ZW50KCksIG1fc2VsZWN0aW9uLmFmZmluaXR5KCkpKTsK
KyAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBwb3M7CiB9CkBAIC03MjAsNiArNzQz
LDkgQEAgVmlzaWJsZVBvc2l0aW9uIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vZAogICAgICAgICBl
bHNlCiAgICAgICAgICAgICBwb3MgPSBzdGFydE9mRG9jdW1lbnQocG9zKTsKICAgICAgICAgYnJl
YWs7CisgICAgLy8gRklYTUU6IHJlbW92ZSBsYXRlci4KKyAgICBjYXNlIFdlYktpdFZpc3VhbFdv
cmRHcmFudWxhcml0eToKKyAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBwb3M7CiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRHcmFudWxhcml0eS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEdyYW51bGFyaXR5LmgJKHJldmlzaW9u
IDgyNDkyKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0R3JhbnVsYXJpdHkuaAkod29y
a2luZyBjb3B5KQpAQCAtMzksNyArMzksMTAgQEAgZW51bSBUZXh0R3JhbnVsYXJpdHkgewogICAg
IFNlbnRlbmNlQm91bmRhcnksCiAgICAgTGluZUJvdW5kYXJ5LAogICAgIFBhcmFncmFwaEJvdW5k
YXJ5LAotICAgIERvY3VtZW50Qm91bmRhcnkKKyAgICBEb2N1bWVudEJvdW5kYXJ5LAorICAgIC8v
IEZJWE1FOiB0aGlzIGlzIGFkZGVkIHRlbXBvcmFyaWx5IGZvciBleHBlcmltZW50IHdpdGggdmlz
dWFsbHkgbW92ZQorICAgIC8vIGNhcmV0IGJ5IHdvcmRHcmFudWxhcml0eS4gT25jZSBhbGwgcGF0
Y2hlcyBhcmUgbGFuZGVkLCBpdCBzaG91bGQgYmUgcmVtb3ZlZC4KKyAgICBXZWJLaXRWaXN1YWxX
b3JkR3JhbnVsYXJpdHkKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlz
aWJsZVNlbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9W
aXNpYmxlU2VsZWN0aW9uLmNwcAkocmV2aXNpb24gODI0OTIpCisrKyBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODAsNiArMzgw
LDkgQEAgdm9pZCBWaXNpYmxlU2VsZWN0aW9uOjpzZXRTdGFydEFuZEVuZEZybwogICAgICAgICAg
ICAgbV9zdGFydCA9IHN0YXJ0T2ZTZW50ZW5jZShWaXNpYmxlUG9zaXRpb24obV9zdGFydCwgbV9h
ZmZpbml0eSkpLmRlZXBFcXVpdmFsZW50KCk7CiAgICAgICAgICAgICBtX2VuZCA9IGVuZE9mU2Vu
dGVuY2UoVmlzaWJsZVBvc2l0aW9uKG1fZW5kLCBtX2FmZmluaXR5KSkuZGVlcEVxdWl2YWxlbnQo
KTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAvLyBGSVhNRTogcmVtb3ZlIGxhdGVyLgor
ICAgICAgICBjYXNlIFdlYktpdFZpc3VhbFdvcmRHcmFudWxhcml0eToKKyAgICAgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICAKICAgICAvLyBNYWtlIHN1cmUgd2UgZG8gbm90IGhhdmUgYSBkYW5n
bGluZyBzdGFydCBvciBlbmQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVf
dW5pdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91
bml0cy5jcHAJKHJldmlzaW9uIDgyNDkyKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy92aXNp
YmxlX3VuaXRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUg
IlRleHRCcmVha0l0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAjaW5jbHVk
ZSAiVmlzaWJsZVBvc2l0aW9uLmgiCisjaW5jbHVkZSAiVmlzaWJsZVNlbGVjdGlvbi5oIgogI2lu
Y2x1ZGUgImh0bWxlZGl0aW5nLmgiCiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVW5pY29kZS5oPgog
CkBAIC0xMTQ2LDQgKzExNDcsMTI2IEBAIFZpc2libGVQb3NpdGlvbiByaWdodEJvdW5kYXJ5T2ZM
aW5lKGNvbnMKICAgICByZXR1cm4gZGlyZWN0aW9uID09IExUUiA/IGxvZ2ljYWxFbmRPZkxpbmUo
YykgOiBsb2dpY2FsU3RhcnRPZkxpbmUoYyk7CiB9CiAKK3N0YXRpYyBjb25zdCBpbnQgaW52YWxp
ZE9mZnNldCA9IC0xOworICAgIAorc3RhdGljIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c1dvcmRC
cmVha0luQm94SW5zaWRlQmxvY2tXaXRoU2FtZURpcmVjdGlvbmFsaXR5KGNvbnN0IElubGluZUJv
eCogYm94LCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIHByZXZpb3VzV29yZEJyZWFrLCBpbnQmIG9m
ZnNldE9mV29yZEJyZWFrKQoreworICAgIGJvb2wgaGFzU2VlbldvcmRCcmVha0luVGhpc0JveCA9
IHByZXZpb3VzV29yZEJyZWFrLmlzTm90TnVsbCgpOworICAgIElubGluZUJveCogYm94Q29udGFp
bmluZ1ByZXZpb3VzV29yZEJyZWFrOworICAgIFZpc2libGVQb3NpdGlvbiB3b3JkQnJlYWs7Cisg
ICAgLy8gRm9yIExUUiB0ZXh0LCBwcmV2aW91c1dvcmRQb3NpdGlvbigpIHJldHVybnMgdGhlIHdv
cmQgYnJlYWsgYXQgdGhlIGxlZnQgYm91bmRhcnkgb2YgYSB3b3JkLCAKKyAgICAvLyAgICAgICAg
ICAgICAgIG5leHRXb3JkUG9zaXRpb24oKSByZXR1cm5zIHRoZSB3b3JkIGJyZWFrIGF0IHRoZSBy
aWdodCBib3VuZGFyeSBvZiBhIHdvcmQuIAorICAgIC8vIEZvciBSVEwgdGV4dCwgcHJldmlvdXNX
b3JkUG9zaXRpb24oKSByZXR1cm5zIHRoZSB3b3JkIGJyZWFrIGF0IHRoZSByaWdodCBib3VuZGFy
eSBvZiBhIHdvcmQsCisgICAgLy8gICAgICAgICAgICAgICBuZXh0V29yZFBvc2l0aW9uKCkgcmV0
dXJucyB0aGUgd29yZCBicmVhayBhdCB0aGUgbGVmdCBib3VuZGFyeSBvZiBhIHdvcmQuCisgICAg
Ly8gCisgICAgLy8gSW4gTFRSIGJsb2NrLCBjdHJsLWFycm93IG1vdmVzIGN1cnNvciB0byB0aGUg
bGVmdCBib3VuZGFyeSBvZiB3b3JkcywKKyAgICAvLyBzbyB3ZSBzaG91bGQgdXNlIHByZXZpb3Vz
V29yZFBvc2l0aW9uKCkgZm9yIExUUiB0ZXh0LCBpbiB3aGljaCBvZmZzZXRzIGNvbGxlY3RlZCBm
cm9tIHZpc3VhbGx5IHJpZ2h0IHRvIHZpc3VhbGx5IGxlZnQuCisgICAgLy8gSW4gUlRMIGJsb2Nr
LCBjdHJsLWFycm93IG1vdmVzIGN1cnNvciB0byB0aGUgcmlnaHQgYm91bmRhcnkgb2Ygd29yZHMs
CisgICAgLy8gc28gd2Ugc2hvdWxkIHVzZSBwcmV2aW91c1dvcmRQb3NpaXRvbigpIGZvciBSVEwg
dGV4dCwgaW4gd2hpY2gsIG9mZnNldHMgY29sbGVjdGVkIGZyb20gdmlzdWFsbHkgbGVmdCB0byAg
dmlzdWFsbHkgcmlnaHQuIAorICAgIHdvcmRCcmVhayA9IGhhc1NlZW5Xb3JkQnJlYWtJblRoaXNC
b3ggPyBwcmV2aW91c1dvcmRCcmVhayA6IFBvc2l0aW9uKGJveC0+cmVuZGVyZXIoKS0+bm9kZSgp
LCBib3gtPmNhcmV0TWF4T2Zmc2V0KCksIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNo
b3IpOworCisgICAgLy8gRklYTUU6IGhhbmRsZSBtdWx0aS1zcGFjZXMuIAorICAgIC8vIEluIHRo
ZSBjYXNlIG9mIG11bHRpLXNwYWNlcywgd29yZCBicmVhayBhbW9uZyB0aGUgY29sbGFwc2VkIHNw
YWNlcyBtaWdodCBub3QgYWRkZWQuCisgICAgLy8gRm9yIGV4YW1wbGUsICI8ZGl2PmFiYyAgICBk
ZWYgaGlqICAgIG9wcSByc3Q8L2Rpdj4iLCBubyB3b3JkIGJyZWFrIGlzIGFkZGVkIGJldHdlZW4g
ImhpaiIgYW5kICJvcHEiLgorICAgIC8vIFRoZSByZWFzb24gaXMgd2hlbiBjdXJzb3IgaXMgaW1t
ZWRpYXRlbHkgdG8gdGhlIHJpZ2h0IG9mICJvcHEiLCBpdHMgcHJldmlvdXMgd29yZCBib3VuZGFy
eSdzIG9mZnNldCByZXR1cm5lZCBmcm9tIHByZXZpb3VzV29yZFBvc2l0aW9uKCkgaXMgMTUsCisg
ICAgLy8gd2hpY2ggaXMgaW1tZWRpYXRlbHkgdG8gdGhlIHJpZ2h0IG9mICJoaWogIiwgYW5kIHdo
aWNoIGlzIG5vdCBpbiB0aGUgc2FtZSBib3ggYXMgIm9wcSIsCisgICAgLy8gc28sIGl0IHdvbnQg
YmUgYWRkZWQgYXMgYSB3b3JkIGJyZWFrIG9mIGJveCAib3BxIHJzdCIuIAorICAgIC8vIFdlIGNv
dWxkIGFsd2F5cyBhZGQgdGhlIHJpZ2h0bW9zdChmb3IgTFRSIGJveCkvbGVmdG1vc3QoZm9yIFJU
TCBib3gpIGJvdW5kYXJ5CisgICAgLy8gYXMgd29yZGJyZWFrIHdoZW4gaXRzIGlubGluZUJveCBp
cyB0aGUgc2FtZSBhcyAnYm94Jy4gQ2hlY2tpbmcgdGhhdCB0aGUgcmlnaHRtb3N0IG9yIGxlZnRt
b3N0IGJvdW5kYXJ5J3MgaW5saW5lQm94IGdldCBmcm9tCisgICAgLy8gZ2V0SW5saW5lQm94QW5k
T2Zmc2V0IGlzIHRoZSBzYW1lIGFzICdib3gnIGlzIGltcG9ydGFudCBhcyB0byBub3QgYnJlYWsg
Y2FzZXMgc3VjaCBhcyA8ZGl2PmhlPGI+bGxvPC9iPiB3b3JsZDwvZGl2PiwgaW4gd2hpY2gKKyAg
ICAvLyB3aGVuIGN1cnNvciBpcyBpbW1lZGlhdGVseSB0byB0aGUgcmlnaHQgb2YgJ2hlJywgdGhl
IHJpZ2h0bW9zdCBib3VuZGFyeSdzIGlubGluZUJveCBnZXQgZnJvbSBnZXRJbmxpbmVCb3hBbmRP
ZmZzZXQgaXMKKyAgICAvLyBib3ggJ2xsbycsIHdoaWNoIGlzIGRpZmZlcmVudCBmcm9tIGJveCAn
aGUnLCBhbmQgdGhpcyByaWdodG1vc3QgYm91bmRhcnkgd29udCBiZSBhZGRlZCBhcyBhIHdvcmQg
YnJlYWsuCisgICAgLy8gQnV0IGl0IHN0aWxsIG1pZ2h0IGJyZWFrIHNvbWUgb3RoZXIgY2FzZXMg
c2luY2UgYSBib3VuYXJ5IG9mIGEgYm94IGRvZXMgbm90IG5lY2Vzc2FyaWx5IG1lYW5zIGEgd29y
ZCBicmVhay4KKyAgICAvLyBPciB3ZSBuZWVkIHRvIHByb3ZpZGUgYSB3YXkgbm90IHRvIGNhbm9u
aWNhbGl6ZSh1cHN0cmVhbSkgVmlzaWJsZVBvc2l0aW9uIGluIGl0cyBjb25zdHJ1Y3RvciwgCisg
ICAgLy8gc28gcHJldmlvdXNXb3JkUG9zaXRpb24oKSBvZiAib3BxIiBjb3VsZCByZXR1cm4gb2Zm
c2V0IDE4LCB3aGljaCBpcyBpbW1lZGlhdGVseSB0byB0aGUgbGVmdCBvZiAib3BxIiwgaW5zdGVh
ZC4KKworICAgIHdvcmRCcmVhayA9IHByZXZpb3VzV29yZFBvc2l0aW9uKHdvcmRCcmVhayk7Cisg
ICAgaWYgKHByZXZpb3VzV29yZEJyZWFrICE9IHdvcmRCcmVhaykgeworICAgICAgICB3b3JkQnJl
YWsuZ2V0SW5saW5lQm94QW5kT2Zmc2V0KGJveENvbnRhaW5pbmdQcmV2aW91c1dvcmRCcmVhaywg
b2Zmc2V0T2ZXb3JkQnJlYWspOworICAgICAgICBpZiAoYm94Q29udGFpbmluZ1ByZXZpb3VzV29y
ZEJyZWFrID09IGJveCkKKyAgICAgICAgICAgIHJldHVybiB3b3JkQnJlYWs7CisgICAgfQorICAg
IHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKK30KKworc3RhdGljIFZpc2libGVQb3NpdGlvbiBm
aW5kV29yZEJvdW5kYXJ5SW5Cb3hJbkJsb2NrRGlyZWN0aW9uKGNvbnN0IElubGluZUJveCogYm94
LCBpbnQgb2Zmc2V0LCBUZXh0RGlyZWN0aW9uIGJsb2NrRGlyZWN0aW9uKQoreworICAgIGludCBv
ZmZzZXRPZldvcmRCcmVhayA9IDA7CisgICAgVmlzaWJsZVBvc2l0aW9uIHdvcmRCcmVhazsKKyAg
ICBkbyB7CisgICAgICAgIGlmIChib3gtPmRpcmVjdGlvbigpID09IGJsb2NrRGlyZWN0aW9uKQor
ICAgICAgICAgICAgd29yZEJyZWFrID0gcHJldmlvdXNXb3JkQnJlYWtJbkJveEluc2lkZUJsb2Nr
V2l0aFNhbWVEaXJlY3Rpb25hbGl0eShib3gsIHdvcmRCcmVhaywgb2Zmc2V0T2ZXb3JkQnJlYWsp
OworICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoZSAnZWxzZScgY2FzZSB3aGVuIHRoZSBi
b3ggZGlyZWN0aW9uIGlzIG5vdCBlcXVhbCB0byB0aGUgYmxvY2sgZGlyZWN0aW9uLgorICAgICAg
ICBpZiAod29yZEJyZWFrLmlzTnVsbCgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlm
IChvZmZzZXQgPT0gaW52YWxpZE9mZnNldCB8fCBvZmZzZXRPZldvcmRCcmVhayAhPSBvZmZzZXQp
CisgICAgICAgICAgICByZXR1cm4gd29yZEJyZWFrOworICAgIH0gd2hpbGUgKDEpOyAgICAgICAg
CisgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOworfQorCitzdGF0aWMgVmlzaWJsZVBvc2l0
aW9uIHdvcmRCb3VuZGFyeUluQWRqYWNlbnRCb3hlcyhjb25zdCBJbmxpbmVCb3gqIGJveCwgaW50
IG9mZnNldCwgV2ViQ29yZTo6U2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvblRvU2VhcmNoLCBU
ZXh0RGlyZWN0aW9uIGJsb2NrRGlyZWN0aW9uLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2li
bGVQb3NpdGlvbikKK3sKKyAgICBjb25zdCBJbmxpbmVCb3gqIGFkamFjZW50Qm94ID0gYm94Owor
ICAgIHdoaWxlIChhZGphY2VudEJveCkgeworICAgICAgICBWaXNpYmxlUG9zaXRpb24gd29yZEJy
ZWFrOworICAgICAgICBpZiAoKGRpcmVjdGlvblRvU2VhcmNoID09IFdlYkNvcmU6OkRpcmVjdGlv
blJpZ2h0ICYmIGJsb2NrRGlyZWN0aW9uID09IExUUikgCisgICAgICAgICAgICB8fCAoZGlyZWN0
aW9uVG9TZWFyY2ggPT0gV2ViQ29yZTo6RGlyZWN0aW9uTGVmdCAmJiBibG9ja0RpcmVjdGlvbiA9
PSBSVEwpKQorICAgICAgICAgICAgd29yZEJyZWFrID0gZmluZFdvcmRCb3VuZGFyeUluQm94SW5C
bG9ja0RpcmVjdGlvbihhZGphY2VudEJveCwgb2Zmc2V0LCBibG9ja0RpcmVjdGlvbik7CisgICAg
ICAgIC8vIEZJWE1FOiAiZWxzZSIgbm90IGltcGxlbWVudGVkIHlldC4KKyAgICAgICAgaWYgKCF3
b3JkQnJlYWsuaXNOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gd29yZEJyZWFrOworICAgICAg
ICBhZGphY2VudEJveCA9IChkaXJlY3Rpb25Ub1NlYXJjaCA9PSBXZWJDb3JlOjpEaXJlY3Rpb25M
ZWZ0KSA/IGFkamFjZW50Qm94LT5uZXh0TGVhZkNoaWxkKCkgOiBhZGphY2VudEJveC0+cHJldkxl
YWZDaGlsZCgpOworICAgICAgICBvZmZzZXQgPSBpbnZhbGlkT2Zmc2V0OworICAgIH0KKyAgICBy
ZXR1cm4gdmlzaWJsZVBvc2l0aW9uOworfQorCitzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIGxlZnRX
b3JkQm91bmRhcnkoY29uc3QgSW5saW5lQm94KiBib3gsIGludCBvZmZzZXQsIFRleHREaXJlY3Rp
b24gYmxvY2tEaXJlY3Rpb24sIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9u
KQoreworICAgIHJldHVybiB3b3JkQm91bmRhcnlJbkFkamFjZW50Qm94ZXMoYm94LCBvZmZzZXQs
IFdlYkNvcmU6OkRpcmVjdGlvblJpZ2h0LCBibG9ja0RpcmVjdGlvbiwgdmlzaWJsZVBvc2l0aW9u
KTsKK30KKyAKK3N0YXRpYyBWaXNpYmxlUG9zaXRpb24gcmlnaHRXb3JkQm91bmRhcnkoY29uc3Qg
SW5saW5lQm94KiBib3gsIGludCBvZmZzZXQsIFRleHREaXJlY3Rpb24gYmxvY2tEaXJlY3Rpb24s
IGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9uKQoreworICAgIHJldHVybiB3
b3JkQm91bmRhcnlJbkFkamFjZW50Qm94ZXMoYm94LCBvZmZzZXQsIFdlYkNvcmU6OkRpcmVjdGlv
bkxlZnQsIGJsb2NrRGlyZWN0aW9uLCB2aXNpYmxlUG9zaXRpb24pOworfQorCitWaXNpYmxlUG9z
aXRpb24gbGVmdFdvcmRQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3Np
dGlvbikKK3sKKyAgICAvLyBJbiBMVFIgYmxvY2ssIGN0cmwtYXJyb3cgbW92ZXMgY3Vyc29yIHRv
IHRoZSBsZWZ0IGJvdW5kYXJ5IG9mIHdvcmRzLgorICAgIC8vIEluIFJUTCBibG9jaywgY3RybC1h
cnJvdyBtb3ZlcyBjdXJzb3IgdG8gdGhlIHJpZ2h0IGJvdW5kYXJ5IG9mIHdvcmRzLgorICAgIElu
bGluZUJveCogYm94OworICAgIGludCBvZmZzZXQ7CisgICAgdmlzaWJsZVBvc2l0aW9uLmdldElu
bGluZUJveEFuZE9mZnNldChib3gsIG9mZnNldCk7CisgICAgVGV4dERpcmVjdGlvbiBibG9ja0Rp
cmVjdGlvbiA9IGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2sodmlzaWJsZVBvc2l0aW9uLmRlZXBF
cXVpdmFsZW50KCkpOworICAgIAorICAgIC8vIEZJWE1FOiBJZiB0aGUgYm94J3MgZGlyZWN0aW9u
YWxpdHkgaXMgdGhlIHNhbWUgYXMgdGhhdCBvZiB0aGUgZW5jbG9zaW5nIGJsb2NrLCB3aGVuIHRo
ZSBvZmZzZXQgaXMgYXQgdGhlIGJveCBib3VuZGFyeQorICAgIC8vIGFuZCB0aGUgZGlyZWN0aW9u
IGlzIHRvd2FyZHMgaW5zaWRlIHRoZSBib3gsIGRvIEkgc3RpbGwgbmVlZCB0byBtYWtlIGl0IGEg
c3BlY2lhbCBjYXNlPyBGb3IgZXhhbXBsZSwgYSBMVFIgYm94IGluc2lkZSBhIExUUiBibG9jaywK
KyAgICAvLyB3aGVuIG9mZnNldCBpcyBhdCBib3gncyBjYXJldE1pbk9mZnNldCBhbmQgdGhlIGRp
cmVjdGlvbiBpcyBEaXJlY3Rpb25SaWdodCwgc2hvdWxkIGl0IGJlIHRha2VuIGNhcmUgYXMgYSBn
ZW5lcmFsIGNhc2U/CisgICAgaWYgKG9mZnNldCA9PSBib3gtPmNhcmV0TGVmdG1vc3RPZmZzZXQo
KSkKKyAgICAgICAgcmV0dXJuIGxlZnRXb3JkQm91bmRhcnkoYm94LT5wcmV2TGVhZkNoaWxkKCks
IGludmFsaWRPZmZzZXQsIGJsb2NrRGlyZWN0aW9uLCB2aXNpYmxlUG9zaXRpb24pOworICAgIGlm
IChvZmZzZXQgPT0gYm94LT5jYXJldFJpZ2h0bW9zdE9mZnNldCgpKQorICAgICAgICByZXR1cm4g
bGVmdFdvcmRCb3VuZGFyeShib3gsIG9mZnNldCwgYmxvY2tEaXJlY3Rpb24sIHZpc2libGVQb3Np
dGlvbik7CisgICAgCisgICAgLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRlZC4KKyAgICByZXR1cm4g
VmlzaWJsZVBvc2l0aW9uKCk7Cit9CisKK1Zpc2libGVQb3NpdGlvbiByaWdodFdvcmRQb3NpdGlv
bihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3NpdGlvbikKK3sKKyAgICBJbmxpbmVC
b3gqIGJveDsKKyAgICBpbnQgb2Zmc2V0OworICAgIHZpc2libGVQb3NpdGlvbi5nZXRJbmxpbmVC
b3hBbmRPZmZzZXQoYm94LCBvZmZzZXQpOworICAgIFRleHREaXJlY3Rpb24gYmxvY2tEaXJlY3Rp
b24gPSBkaXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2NrKHZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZh
bGVudCgpKTsKKyAgICAKKyAgICBpZiAob2Zmc2V0ID09IGJveC0+Y2FyZXRMZWZ0bW9zdE9mZnNl
dCgpKQorICAgICAgICByZXR1cm4gcmlnaHRXb3JkQm91bmRhcnkoYm94LCBvZmZzZXQsIGJsb2Nr
RGlyZWN0aW9uLCB2aXNpYmxlUG9zaXRpb24pOworICAgIGlmIChvZmZzZXQgPT0gYm94LT5jYXJl
dFJpZ2h0bW9zdE9mZnNldCgpKQorICAgICAgICByZXR1cm4gcmlnaHRXb3JkQm91bmRhcnkoYm94
LT5uZXh0TGVhZkNoaWxkKCksIC0xLCBibG9ja0RpcmVjdGlvbiwgdmlzaWJsZVBvc2l0aW9uKTsK
KyAgICAKKyAgICAvLyBGSVhNRTogTm90IGltcGxlbWVudGVkLgorICAgIHJldHVybiBWaXNpYmxl
UG9zaXRpb24oKTsKK30KKwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy92aXNpYmxl
X3VuaXRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy92aXNpYmxlX3Vu
aXRzLmgJKHJldmlzaW9uIDgyNDkyKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy92aXNpYmxl
X3VuaXRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDggQEAgVmlzaWJsZVBvc2l0aW9u
IHN0YXJ0T2ZXb3JkKGNvbnN0IFZpc2libAogVmlzaWJsZVBvc2l0aW9uIGVuZE9mV29yZChjb25z
dCBWaXNpYmxlUG9zaXRpb24gJiwgRVdvcmRTaWRlID0gUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KTsK
IFZpc2libGVQb3NpdGlvbiBwcmV2aW91c1dvcmRQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRp
b24gJik7CiBWaXNpYmxlUG9zaXRpb24gbmV4dFdvcmRQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9z
aXRpb24gJik7CitWaXNpYmxlUG9zaXRpb24gcmlnaHRXb3JkUG9zaXRpb24oY29uc3QgVmlzaWJs
ZVBvc2l0aW9uJik7CitWaXNpYmxlUG9zaXRpb24gbGVmdFdvcmRQb3NpdGlvbihjb25zdCBWaXNp
YmxlUG9zaXRpb24mKTsKIAogLy8gc2VudGVuY2VzCiBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZlNl
bnRlbmNlKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvRE9NU2VsZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0RP
TVNlbGVjdGlvbi5jcHAJKHJldmlzaW9uIDgyNDkyKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9E
T01TZWxlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzIsNiArMzMyLDggQEAgdm9pZCBE
T01TZWxlY3Rpb246Om1vZGlmeShjb25zdCBTdHJpbmcmIAogICAgICAgICBncmFudWxhcml0eSA9
IFBhcmFncmFwaEJvdW5kYXJ5OwogICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGdyYW51
bGFyaXR5U3RyaW5nLCAiZG9jdW1lbnRib3VuZGFyeSIpKQogICAgICAgICBncmFudWxhcml0eSA9
IERvY3VtZW50Qm91bmRhcnk7CisgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZ3JhbnVs
YXJpdHlTdHJpbmcsICItd2Via2l0LXZpc3VhbC13b3JkIikpCisgICAgICAgIGdyYW51bGFyaXR5
ID0gV2ViS2l0VmlzdWFsV29yZEdyYW51bGFyaXR5OwogICAgIGVsc2UKICAgICAgICAgcmV0dXJu
OwogCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA4MjQ5MikKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDExLTAzLTMwICBYaWFvbWVpIEppICA8
eGppQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBFeHBlcmltZW50IHdpdGggbW92aW5nIGNhcmV0IGJ5IHdvcmQgaW4gdmlzdWFs
IG9yZGVyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NTczMzYKKworICAgICAgICAqIGVkaXRpbmcvc2VsZWN0aW9uL21vdmUtYnktd29yZC12aXN1YWxs
eS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGVkaXRpbmcvc2VsZWN0aW9uL21vdmUt
Ynktd29yZC12aXN1YWxseS5odG1sOiBBZGRlZC4KKwogMjAxMS0wMy0zMCAgTWloYWkgUGFycGFy
aXRhICA8bWloYWlwQGNocm9taXVtLm9yZz4KIAogICAgICAgICBQdXQgZXhwZWN0ZWQgUE5HIGZv
ciBmYXN0L211bHRpY29sL21heC1oZWlnaHQtY29sdW1ucy1ibG9jay5odG1sIGluIHRoZQpJbmRl
eDogTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vbW92ZS1ieS13b3JkLXZpc3VhbGx5LWV4
cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9t
b3ZlLWJ5LXdvcmQtdmlzdWFsbHktZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vbW92ZS1ieS13b3JkLXZpc3VhbGx5LWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MyBAQAorCis9PT09PT09PSBNb3ZlIEJ5IFdvcmQg
PT09PQorVGVzdCAxLCBMVFI6CitNb3ZlIHJpZ2h0IGJ5IG9uZSB3b3JkCisiYWJjIGRlZiBoaWog
b3BxIHJzdCJbMCwgNCwgOCwgMTIsIDE2LCAxOV0gICAgRkFJTCBleHBlY3RlZDogWzQsIDgsIDEy
LCAxNiwgMTksIDE5XQorTW92ZSBsZWZ0IGJ5IG9uZSB3b3JkCisiYWJjIGRlZiBoaWogb3BxIHJz
dCJbMTYsIDE2LCAxMiwgOCwgNCwgMF0gICAgRkFJTCBleHBlY3RlZDogWzE2LCAxMiwgOCwgNCwg
MCwgMF0KK1Rlc3QgMiwgUlRMOgorTW92ZSBsZWZ0IGJ5IG9uZSB3b3JkCisiYWJjIGRlZiBoaWog
b3BxIHJzdCJbMCwgMTUsIDExLCA3LCAzLCAxOV0gICAgRkFJTCBleHBlY3RlZDogWzE1LCAxMSwg
NywgMywgMTksIDE5XQorTW92ZSByaWdodCBieSBvbmUgd29yZAorImFiYyBkZWYgaGlqIG9wcSBy
c3QiWzE5LCAzLCA3LCAxMSwgMTUsIDBdICAgIEZBSUwgZXhwZWN0ZWQ6IFszLCA3LCAxMSwgMTUs
IDAsIDBdCitUZXN0IDMsIExUUjoKK01vdmUgcmlnaHQgYnkgb25lIHdvcmQKKyJaWlogUVFRIEJC
QiBDQ0MgWFhYIlswLCAxNSwgMTEsIDcsIDMsIDE5XSAgICBGQUlMIGV4cGVjdGVkOiBbMTUsIDEx
LCA3LCAzLCAxOSwgMTldCitNb3ZlIGxlZnQgYnkgb25lIHdvcmQKKyJaWlogUVFRIEJCQiBDQ0Mg
WFhYIlsxOSwgMywgNywgMTEsIDE1LCAwXSAgICBGQUlMIGV4cGVjdGVkOiBbMywgNywgMTEsIDE1
LCAwLCAwXQorVGVzdCA0LCBSVEw6CitNb3ZlIGxlZnQgYnkgb25lIHdvcmQKKyJaWlogUVFRIEJC
QiBDQ0MgWFhYIlswLCA0LCA4LCAxMiwgMTYsIDE5XSAgICBGQUlMIGV4cGVjdGVkOiBbNCwgOCwg
MTIsIDE2LCAxOSwgMTldCitNb3ZlIHJpZ2h0IGJ5IG9uZSB3b3JkCisiWlpaIFFRUSBCQkIgQ0ND
IFhYWCJbMTYsIDE2LCAxMiwgOCwgNCwgMF0gICAgRkFJTCBleHBlY3RlZDogWzE2LCAxMiwgOCwg
NCwgMCwgMF0KK1Rlc3QgNSwgTFRSOgorTW92ZSByaWdodCBieSBvbmUgd29yZAorImFiYyBkZWYg
WlFCIFJJRyB1dncgeHl6IlswLCA0LCA4LCAxMSwgMTYsIDIwLCAyM10gICAgRkFJTCBleHBlY3Rl
ZDogWzQsIDgsIDExLCAxNiwgMjAsIDIzLCAyM10KK01vdmUgbGVmdCBieSBvbmUgd29yZAorImFi
YyBkZWYgWlFCIFJJRyB1dncgeHl6IlsyMCwgMjAsIDE2LCAxMSwgNCwgNCwgMF0gICAgRkFJTCBl
eHBlY3RlZDogWzIwLCAxNiwgMTEsIDgsIDQsIDAsIDBdCitUZXN0IDYsIFJUTDoKK01vdmUgbGVm
dCBieSBvbmUgd29yZAorImFiYyBkZWYgWlFCIFJJRyB1dncgeHl6IlswLCAzLCA4LCAxMiwgMTYs
IDE5LCAyM10gICAgRkFJTCBleHBlY3RlZDogWzMsIDgsIDEyLCAxNiwgMTksIDIzLCAyM10KK01v
dmUgcmlnaHQgYnkgb25lIHdvcmQKKyJhYmMgZGVmIFpRQiBSSUcgdXZ3IHh5eiJbMTIsIDE5LCAx
MiwgMTIsIDgsIDMsIDBdICAgIEZBSUwgZXhwZWN0ZWQ6IFsxOSwgMTYsIDEyLCA4LCAzLCAwLCAw
XQorVGVzdCA3LCBMVFI6CitNb3ZlIHJpZ2h0IGJ5IG9uZSB3b3JkCisiWlFCIGFiYyBSSUciWzAs
IDQsIDgsIDExXSAgICBGQUlMIGV4cGVjdGVkOiBbNCwgOCwgMTEsIDExXQorTW92ZSBsZWZ0IGJ5
IG9uZSB3b3JkCisiWlFCIGFiYyBSSUciWzQsIDQsIDQsIDBdICAgIEZBSUwgZXhwZWN0ZWQ6IFs4
LCA0LCAwLCAwXQorVGVzdCA4LCBSVEw6CitNb3ZlIGxlZnQgYnkgb25lIHdvcmQKKyJaUUIgYWJj
IFJJRyJbMCwgNCwgOCwgMTFdICAgIEZBSUwgZXhwZWN0ZWQ6IFs0LCA4LCAxMSwgMTFdCitNb3Zl
IHJpZ2h0IGJ5IG9uZSB3b3JkCisiWlFCIGFiYyBSSUciWzgsIDgsIDAsIDBdICAgIEZBSUwgZXhw
ZWN0ZWQ6IFs4LCA0LCAwLCAwXQorCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlv
bi9tb3ZlLWJ5LXdvcmQtdmlzdWFsbHkuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9l
ZGl0aW5nL3NlbGVjdGlvbi9tb3ZlLWJ5LXdvcmQtdmlzdWFsbHkuaHRtbAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL21vdmUtYnktd29yZC12aXN1YWxseS5o
dG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE5NiBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRt
bD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0
L2h0bWw7IGNoYXJzZXQ9dXRmLTgiPgorPHN0eWxlPgorZGl2LnRlc3QgeworICAgIC13ZWJraXQt
dXNlci1tb2RpZnk6IHJlYWQtd3JpdGU7CisgICAgcGFkZGluZzogNHB4OworICAgIGJvcmRlcjog
MXB4IGRhc2hlZCBsaWdodGJsdWU7CisgICAgbWFyZ2luOiA0cHggNHB4IDRweCAyNHB4OworICAg
IG91dGxpbmU6IG5vbmU7CisgICAgZm9udC1mYW1pbHk6IEx1Y2lkYSBHcmFuZGU7CisgICAgY291
bnRlci1pbmNyZW1lbnQ6IHRlc3QtbnVtYmVyOworfQorZGl2LnRlc3Q6YmVmb3JlIHsgY29udGVu
dDogY291bnRlcih0ZXN0LW51bWJlcik7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogOHB4OyBm
b250LXNpemU6IHgtc21hbGw7IHRleHQtYWxpZ246IHJpZ2h0OyB3aWR0aDogMjBweDsgfQorZGl2
LnRlc3Qgc3BhbiB7IGJhY2tncm91bmQtY29sb3I6ICNkZWY7IH0KK2Rpdi50ZXN0IGltZyB7IHdp
ZHRoOiAxZW07IGhlaWdodDogMWVtOyBiYWNrZ3JvdW5kLWNvbG9yOiBsaWdodGdyZWVuOyB9Citk
aXYudGVzdCBpbWcgKyBpbWcgeyBiYWNrZ3JvdW5kLWNvbG9yOiBsaWdodGJsdWU7IH0KK2Rpdi50
ZXN0IGRpdiB7IGJvcmRlcjogMXB4IGRhc2hlZCBwaW5rOyBwYWRkaW5nOiAzcHg7IGhlaWdodDog
MmVtOyB9Cit0ZXN0X21vdmVfYnlfd29yZCB7ZGlzcGxheTogbm9uZTt9Cis8L3N0eWxlPgorPHNj
cmlwdD4KK3ZhciBtZXNzYWdlcyA9IFtdOworCitmdW5jdGlvbiBsb2cobWVzc2FnZSkKK3sKKyAg
ICBtZXNzYWdlcy5wdXNoKG1lc3NhZ2UpOworfQorCitmdW5jdGlvbiBmbHVzaExvZygpCit7Cisg
ICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUiKS5hcHBlbmRDaGlsZChkb2N1bWVu
dC5jcmVhdGVUZXh0Tm9kZShtZXNzYWdlcy5qb2luKCIiKSkpOworfQorCitmdW5jdGlvbiBjYXJl
dENvb3JkaW5hdGVzKCkKK3sKKyAgICBpZiAoIXdpbmRvdy50ZXh0SW5wdXRDb250cm9sbGVyKQor
ICAgICAgICByZXR1cm4geyB4OiAwLCB5IDowIH07CisgICAgdmFyIGNhcmV0UmVjdCA9IHRleHRJ
bnB1dENvbnRyb2xsZXIuZmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2UodGV4dElucHV0Q29udHJv
bGxlci5zZWxlY3RlZFJhbmdlKClbMF0sIDApOworICAgIHJldHVybiB7IHg6IGNhcmV0UmVjdFsw
XSwgeTogY2FyZXRSZWN0WzFdIH07Cit9CisKKworZnVuY3Rpb24gZm9sZChzdHJpbmcpCit7Cisg
ICAgdmFyIHJlc3VsdCA9ICIiOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0
aDsgKytpKSB7CisgICAgICAgIHZhciBjaGFyID0gc3RyaW5nLmNoYXJDb2RlQXQoaSk7CisgICAg
ICAgIGlmIChjaGFyID49IDB4MDVkMCkKKyAgICAgICAgICAgIGNoYXIgLT0gMHgwNThmOworICAg
ICAgICBlbHNlIGlmIChjaGFyID09IDEwKSB7CisgICAgICAgICAgICByZXN1bHQgKz0gIlxcbiI7
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICByZXN1bHQgKz0gU3Ry
aW5nLmZyb21DaGFyQ29kZShjaGFyKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
ZnVuY3Rpb24gbG9nUG9zaXRpb25zKHBvc2l0aW9ucykKK3sKKyAgICBmb3IgKHZhciBpID0gMDsg
aSA8IHBvc2l0aW9ucy5sZW5ndGg7ICsraSkgeworICAgICAgICBpZiAoaSkgeworICAgICAgICAg
ICAgaWYgKHBvc2l0aW9uc1tpXS5ub2RlICE9IHBvc2l0aW9uc1tpIC0gMV0ubm9kZSkKKyAgICAg
ICAgICAgICAgICBsb2coIl0iKTsKKyAgICAgICAgICAgIGxvZygiLCAiKTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAoIWkgfHwgcG9zaXRpb25zW2ldLm5vZGUgIT0gcG9zaXRpb25zW2kgLSAxXS5u
b2RlKQorICAgICAgICAgICAgbG9nKChwb3NpdGlvbnNbaV0ubm9kZSBpbnN0YW5jZW9mIFRleHQg
PyAnIicgKyBmb2xkKHBvc2l0aW9uc1tpXS5ub2RlLmRhdGEpICsgJyInIDogIjwiICsgcG9zaXRp
b25zW2ldLm5vZGUudGFnTmFtZSArICI+IikgKyAiWyIpOworICAgICAgICBsb2cocG9zaXRpb25z
W2ldLm9mZnNldCk7CisgICAgfQorICAgIGxvZygiXSIpOworfQorCit2YXIgd29yZEJyZWFrczsK
KworZnVuY3Rpb24gdmFsaWRhdGVEYXRhKHBvc2l0aW9ucykKK3sKKyAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHdvcmRCcmVha3MubGVuZ3RoIC0gMTsgKytpKSB7CisgICAgICAgIGlmIChwb3NpdGlv
bnNbaV0ub2Zmc2V0ICE9IHdvcmRCcmVha3NbaSArIDFdKSB7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoaSAhPSB3b3JkQnJlYWtzLmxlbmd0aCAtIDEgJiYg
cG9zaXRpb25zW2ldICE9IHdvcmRCcmVha3NbaV0pIHsKKyAgICAgICAgbG9nKCIgICAgRkFJTCBl
eHBlY3RlZDogWyIpOworICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IHdvcmRCcmVha3MubGVu
Z3RoOyArK2kpIHsKKyAgICAgICAgICAgIGxvZyh3b3JkQnJlYWtzW2ldICsgIiwgIik7CisgICAg
ICAgIH0KKyAgICAgICAgbG9nKHdvcmRCcmVha3Nbd29yZEJyZWFrcy5sZW5ndGggLSAxXSArICJd
Iik7CisgICAgfQorfQorCitmdW5jdGlvbiBjb2xsZWN0V29yZEJyZWFrcyh0ZXN0LCBzZWFyY2hE
aXJlY3Rpb24pCit7CisgICAgaWYgKHNlYXJjaERpcmVjdGlvbiA9PSAicmlnaHQiKSB7CisgICAg
ICAgIGlmICh0ZXN0LmdldEF0dHJpYnV0ZSgiZGlyIikgPT0gJ2x0cicpIAorICAgICAgICAgICAg
d29yZEJyZWFrcyA9IHRlc3QudGl0bGUuc3BsaXQoInwiKVswXS5zcGxpdCgiICIpOworICAgICAg
ICBlbHNlIAorICAgICAgICAgICAgd29yZEJyZWFrcyA9IHRlc3QudGl0bGUuc3BsaXQoInwiKVsx
XS5zcGxpdCgiICIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmICh0ZXN0LmdldEF0dHJpYnV0
ZSgiZGlyIikgPT0gJ2x0cicpIAorICAgICAgICAgICAgd29yZEJyZWFrcyA9IHRlc3QudGl0bGUu
c3BsaXQoInwiKVsxXS5zcGxpdCgiICIpOworICAgICAgICBlbHNlIAorICAgICAgICAgICAgd29y
ZEJyZWFrcyA9IHRlc3QudGl0bGUuc3BsaXQoInwiKVswXS5zcGxpdCgiICIpOworICAgIH0KK30K
KworZnVuY3Rpb24gbW92ZUJ5V29yZChzZWwsIHRlc3QsIHNlYXJjaERpcmVjdGlvbiwgZGlyKQor
eworICAgIGxvZygiTW92ZSAiICsgc2VhcmNoRGlyZWN0aW9uICsgIiBieSBvbmUgd29yZFxuIik7
CisgICAgdmFyIHByZXZPZmZzZXQgPSBzZWwuYW5jaG9yT2Zmc2V0OworICAgIHZhciBub2RlID0g
c2VsLmFuY2hvck5vZGU7CisgICAgY29sbGVjdFdvcmRCcmVha3ModGVzdCwgc2VhcmNoRGlyZWN0
aW9uKTsKKyAgICBzZWwuc2V0UG9zaXRpb24obm9kZSwgd29yZEJyZWFrc1swXSk7CisgICAgdmFy
IHBvc2l0aW9ucyA9IFtdOworICAgIGZvciAodmFyIGluZGV4ID0gMTsgaW5kZXggPCB3b3JkQnJl
YWtzLmxlbmd0aDsgKytpbmRleCkgeworICAgICAgICBzZWwubW9kaWZ5KCJtb3ZlIiwgc2VhcmNo
RGlyZWN0aW9uLCAiLXdlYmtpdC12aXN1YWwtd29yZCIpOworICAgICAgICBwb3NpdGlvbnMucHVz
aCh7IG5vZGU6IHNlbC5hbmNob3JOb2RlLCBvZmZzZXQ6IHNlbC5hbmNob3JPZmZzZXQsIHBvaW50
OiBjYXJldENvb3JkaW5hdGVzKCkgfSk7CisgICAgICAgIHNlbC5zZXRQb3NpdGlvbihub2RlLCB3
b3JkQnJlYWtzW2luZGV4XSk7CisgICAgfQorICAgIHNlbC5tb2RpZnkoIm1vdmUiLCBzZWFyY2hE
aXJlY3Rpb24sICItd2Via2l0LXZpc3VhbC13b3JkIik7CisgICAgcG9zaXRpb25zLnB1c2goeyBu
b2RlOiBzZWwuYW5jaG9yTm9kZSwgb2Zmc2V0OiBzZWwuYW5jaG9yT2Zmc2V0LCBwb2ludDogY2Fy
ZXRDb29yZGluYXRlcygpIH0pOworICAgIGxvZ1Bvc2l0aW9ucyhwb3NpdGlvbnMpOworICAgIHZh
bGlkYXRlRGF0YShwb3NpdGlvbnMpOworICAgIGxvZygiXG4iKTsKK30KKworZnVuY3Rpb24gbW92
ZUJ5V29yZEZvckV2ZXJ5UG9zaXRpb24oc2VsLCB0ZXN0LCBkaXIpCit7CisgICAgLy8gQ2hlY2sg
Y3RybC1yaWdodC1hcnJvdyB3b3JrcyBmb3IgZXZlcnkgcG9zaXRpb24uCisgICAgc2VsLnNldFBv
c2l0aW9uKHRlc3QsIDApOworICAgIHZhciBkaXJlY3Rpb24gPSAicmlnaHQiOworICAgIGlmIChk
aXIgPT0gInJ0bCIpCisgICAgICAgIGRpcmVjdGlvbiA9ICJsZWZ0IjsgICAgCisgICAgbW92ZUJ5
V29yZChzZWwsIHRlc3QsIGRpcmVjdGlvbiwgZGlyKTsgICAgCisgICAgLy8gQ2hlY2sgY3RybC1s
ZWZ0LWFycm93IHdvcmtzIGZvciBldmVyeSBwb3NpdGlvbi4KKyAgICBpZiAoZGlyID09ICJsdHIi
KQorICAgICAgICBkaXJlY3Rpb24gPSAibGVmdCI7CisgICAgZWxzZQorICAgICAgICBkaXJlY3Rp
b24gPSAicmlnaHQiOyAgICAKKyAgICBtb3ZlQnlXb3JkKHNlbCwgdGVzdCwgZGlyZWN0aW9uLCBk
aXIpOyAgICAKK30KKworZnVuY3Rpb24gcnVuTW92ZUxlZnRSaWdodCh0ZXN0cywgdW5pdCkKK3sK
KyAgICB2YXIgc2VsID0gZ2V0U2VsZWN0aW9uKCk7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0
ZXN0cy5sZW5ndGg7ICsraSkgeworICAgICAgICB2YXIgcG9zaXRpb25zTW92aW5nUmlnaHQ7Cisg
ICAgICAgIHZhciBwb3NpdGlvbnNNb3ZpbmdMZWZ0OworCisgICAgICAgIGlmICh0ZXN0c1tpXS5n
ZXRBdHRyaWJ1dGUoImRpciIpID09ICdsdHInKQorICAgICAgICB7CisgICAgICAgICAgICBsb2co
IlRlc3QgIiArIChpICsgMSkgKyAiLCBMVFI6XG4iKTsKKyAgICAgICAgICAgIG1vdmVCeVdvcmRG
b3JFdmVyeVBvc2l0aW9uKHNlbCwgdGVzdHNbaV0sICJsdHIiKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIGxvZygiVGVzdCAiICsgKGkgKyAxKSArICIsIFJUTDpcbiIpOworICAgICAg
ICAgICAgbW92ZUJ5V29yZEZvckV2ZXJ5UG9zaXRpb24oc2VsLCB0ZXN0c1tpXSwgInJ0bCIpOwor
ICAgICAgICB9CisKKyAgICB9CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRlc3RNb3Zl
QnlXb3JkIikuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKK30KKworZnVuY3Rpb24gcnVuVGVzdCgp
IHsKKyAgICBsb2coIlxuPT09PT09PT0gTW92ZSBCeSBXb3JkID09PT1cbiIpOworICAgIHZhciB0
ZXN0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoInRlc3RfbW92ZV9ieV93b3Jk
Iik7CisgICAgcnVuTW92ZUxlZnRSaWdodCh0ZXN0cywgIndvcmQiKTsKK30KKworb25sb2FkID0g
ZnVuY3Rpb24oKSB7CisgICAgdHJ5IHsKKyAgICAgICAgcnVuVGVzdCgpOworICAgIH0gZmluYWxs
eSB7CisgICAgICAgIGZsdXNoTG9nKCk7CisgICAgfQorfTsKKworaWYgKHdpbmRvdy5sYXlvdXRU
ZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7Cis8
L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0idGVzdE1vdmVCeVdvcmQiPgorPGRp
diBkaXI9bHRyIGNsYXNzPSJ0ZXN0X21vdmVfYnlfd29yZCIgdGl0bGU9IjAgNCA4IDEyIDE2IDE5
fDE5IDE2IDEyIDggNCAwIiBjb250ZW50ZWRpdGFibGU+YWJjIGRlZiBoaWogb3BxIHJzdDwvZGl2
PgorPGRpdiBkaXI9cnRsIGNsYXNzPSJ0ZXN0X21vdmVfYnlfd29yZCIgdGl0bGU9IjAgMTUgMTEg
NyAzIDE5fDE5IDMgNyAxMSAxNSAwIiBjb250ZW50ZWRpdGFibGU+YWJjIGRlZiBoaWogb3BxIHJz
dDwvZGl2PgorPGRpdiBkaXI9bHRyIGNsYXNzPSJ0ZXN0X21vdmVfYnlfd29yZCIgdGl0bGU9IjAg
MTUgMTEgNyAzIDE5fDE5IDMgNyAxMSAxNSAwIiBjb250ZW50ZWRpdGFibGU+16nXqdepINeg16DX
oCDXkdeR15Eg15LXkteSINen16fXpzwvZGl2PgorPGRpdiBkaXI9cnRsIGNsYXNzPSJ0ZXN0X21v
dmVfYnlfd29yZCIgdGl0bGU9IjAgNCA4IDEyIDE2IDE5fDE5IDE2IDEyIDggNCAwIiBjb250ZW50
ZWRpdGFibGU+16nXqdepINeg16DXoCDXkdeR15Eg15LXkteSINen16fXpzwvZGl2PgorPGRpdiBk
aXI9bHRyIGNsYXNzPSJ0ZXN0X21vdmVfYnlfd29yZCIgdGl0bGU9IjAgNCA4IDExIDE2IDIwIDIz
fDIzIDIwIDE2IDExIDggNCAwIiBjb250ZW50ZWRpdGFibGU+YWJjIGRlZiDXqdeg15Eg16HXmNeW
IHV2dyB4eXo8L2Rpdj4KKzxkaXYgZGlyPXJ0bCBjbGFzcz0idGVzdF9tb3ZlX2J5X3dvcmQiIHRp
dGxlPSIwIDMgOCAxMiAxNiAxOSAyM3wyMyAxOSAxNiAxMiA4IDMgMCIgY29udGVudGVkaXRhYmxl
PmFiYyBkZWYg16nXoNeRINeh15jXliB1dncgeHl6PC9kaXY+Cis8ZGl2IGRpcj1sdHIgY2xhc3M9
InRlc3RfbW92ZV9ieV93b3JkIiB0aXRsZT0iMCA0IDggMTF8MTEgOCA0IDAiIGNvbnRlbnRlZGl0
YWJsZT7Xqdeg15EgYWJjINeh15jXljwvZGl2PgorPGRpdiBkaXI9cnRsIGNsYXNzPSJ0ZXN0X21v
dmVfYnlfd29yZCIgdGl0bGU9IjAgNCA4IDExfDExIDggNCAwIiBjb250ZW50ZWRpdGFibGU+16nX
oNeRIGFiYyDXodeY15Y8L2Rpdj4KKzwvZGl2PgorCis8cHJlIGlkPSJjb25zb2xlIj48L3ByZT4K
KzwvYm9keT4KKzwvaHRtbD4K
</data>
<flag name="review"
          id="80053"
          type_id="1"
          status="-"
          setter="rniwa"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>87696</attachid>
            <date>2011-03-31 04:32:16 -0700</date>
            <delta_ts>2011-03-31 07:09:32 -0700</delta_ts>
            <desc>patch w/ layout test</desc>
            <filename>57336.v6</filename>
            <type>text/plain</type>
            <size>26080</size>
            <attacher name="Xiaomei Ji">xji</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgyNDkyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTEgQEAKKzIwMTEtMDMtMzAgIFhpYW9tZWkg
SmkgIDx4amlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEV4cGVyaW1lbnQgd2l0aCBtb3ZpbmcgY2FyZXQgYnkgd29yZCBpbiB2
aXN1YWwgb3JkZXIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01NzMzNgorCisgICAgICAgIFRoaXMgaXMgdGhlIDFzdCB2ZXJzaW9uIG9mIGltcGxlbWVu
dGluZyAibW92ZSBjYXJldCBieSB3b3JkIGluIHZpc3VhbCBvcmRlciIuCisgICAgICAgIEl0IG9u
bHkgd29ya3MgaW4gdGhlIGZvbGxvd2luZyBzaXR1YXRpb246CisgICAgICAgIDEuIEZvciBhIExU
UiBib3ggaW4gYSBMVFIgYmxvY2sgb3IgYSBSVEwgYm94IGluIFJUTCBibG9jaywgCisgICAgICAg
IHdoZW4gY2FyZXQgaXMgYXQgdGhlIGxlZnQgYm91bmRhcnkgb2YgdGhlIGJveCBhbmQgd2UgYXJl
IGxvb2tpbmcgZm9yIAorICAgICAgICB0aGUgd29yZCBib3VuZGFyeSBpbiByaWdodC4KKyAgICAg
ICAgMi4gRm9yIGEgTFRSIG9yIFJUTCBib3ggaW4gYSBMVFIgYmxvY2ssIHdoZW4gY2FyZXQgaXMg
YXQgdGhlIGxlZnQgYm91bmRhcnkKKyAgICAgICAgb2YgdGhlIGJveCBhbmQgd2UgYXJlIGxvb2tp
bmcgZm9yIHRoZSB3b3JkIGJvdW5kYXJ5IGluIGxlZnQgYW5kIAorICAgICAgICBwcmV2aW91cyBi
b3ggaXMgYSBMVFIgYm94LgorICAgICAgICAzLiBGb3IgYSBMVFIgb3IgUlRMIGJveCBpbiBhIFJU
TCBibG9jaywgd2hlbiB0aGUgY2FyZXQgaXMgYXQgdGhlIHJpZ2h0IAorICAgICAgICBib3VuZGFy
eSBvZiB0aGUgYm94IGFuZCB3ZSBhcmUgbG9va2luZyBmb3IgdGhlIHdvcmQgYm91bmRhcnkgaW4g
cmlnaHQgYW5kIG5leHQgYm94IGlzIFJUTCBib3guCisKKyAgICAgICAgQW4gZXhwZXJpbWVudGFs
IGdyYW51bGFyaXR5IGlzIGludHJvZHVjZWQsIGFzIGEgc2lkZSBlZmZlY3QsIGZ1bmN0aW9ucyBo
YXZpbmcgc3dpdGNoIHN0YXRlbWVudHMKKyAgICAgICAgdG8gaGFuZGxlIHRob3NlIGdyYW51bGFy
aXRpZXMgaGF2ZSB0byBhZGQgbW9yZSBvbmUgY2FzZSB0byBoYW5kbGUgdGhpcyBuZXcgZ3JhbnVs
YXJpdHkuCisgICAgICAgIFRoZSBleHBlcmltZW50YWwgZ3JhbnVsYXJpdHkgaXMgZXhwb3NlZCB0
aG91Z2ggSlMgYnkgJy13ZWJraXQtdmlzdWFsLXdvcmQiLgorCisgICAgICAgIFRlc3Q6IGVkaXRp
bmcvc2VsZWN0aW9uL21vdmUtYnktd29yZC12aXN1YWxseS5odG1sCisKKyAgICAgICAgKiBlZGl0
aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9u
Q29udHJvbGxlcjo6bW9kaWZ5RXh0ZW5kaW5nUmlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6U2Vs
ZWN0aW9uQ29udHJvbGxlcjo6bW9kaWZ5RXh0ZW5kaW5nRm9yd2FyZCk6CisgICAgICAgIChXZWJD
b3JlOjpTZWxlY3Rpb25Db250cm9sbGVyOjptb2RpZnlNb3ZpbmdSaWdodCk6CisgICAgICAgIChX
ZWJDb3JlOjpTZWxlY3Rpb25Db250cm9sbGVyOjptb2RpZnlNb3ZpbmdGb3J3YXJkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vZGlmeUV4dGVuZGluZ0xlZnQpOgor
ICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kaWZ5RXh0ZW5kaW5nQmFj
a3dhcmQpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kaWZ5TW92
aW5nTGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25Db250cm9sbGVyOjptb2RpZnlN
b3ZpbmdCYWNrd2FyZCk6CisgICAgICAgICogZWRpdGluZy9UZXh0R3JhbnVsYXJpdHkuaDoKKyAg
ICAgICAgKiBlZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VmlzaWJsZVNlbGVjdGlvbjo6c2V0U3RhcnRBbmRFbmRGcm9tQmFzZUFuZEV4dGVudFJlc3BlY3Rp
bmdHcmFudWxhcml0eSk6CisgICAgICAgICogZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnByZXZpb3VzV29yZEJyZWFrSW5Cb3hJbnNpZGVCbG9ja1dpdGhTYW1l
RGlyZWN0aW9uYWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6d29yZEJvdW5kYXJ5SW5Cb3gpOgor
ICAgICAgICAoV2ViQ29yZTo6d29yZEJvdW5kYXJ5SW5BZGphY2VudEJveGVzKToKKyAgICAgICAg
KFdlYkNvcmU6OmxlZnRXb3JkQm91bmRhcnkpOgorICAgICAgICAoV2ViQ29yZTo6cmlnaHRXb3Jk
Qm91bmRhcnkpOgorICAgICAgICAoV2ViQ29yZTo6bGVmdFdvcmRQb3NpdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpyaWdodFdvcmRQb3NpdGlvbik6CisgICAgICAgICogZWRpdGluZy92aXNpYmxl
X3VuaXRzLmg6CisgICAgICAgICogcGFnZS9ET01TZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RE9NU2VsZWN0aW9uOjptb2RpZnkpOgorCiAyMDExLTAzLTMwICBTYW0gV2VpbmlnICA8
c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQnJhZHkgRWlkc29uLgpJbmRl
eDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gODI0OTIpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTIyODE5LDcgKzIyODE5LDYgQEAKIAkJ
CWlzYSA9IFBCWFByb2plY3Q7CiAJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMTQ5QzI4NDMw
ODkwMkIxMTAwOEE5RUZDIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYUHJvamVj
dCAiV2ViQ29yZSIgKi87CiAJCQljb21wYXRpYmlsaXR5VmVyc2lvbiA9ICJYY29kZSAyLjQiOwot
CQkJZGV2ZWxvcG1lbnRSZWdpb24gPSBFbmdsaXNoOwogCQkJaGFzU2Nhbm5lZEZvckVuY29kaW5n
cyA9IDE7CiAJCQlrbm93blJlZ2lvbnMgPSAoCiAJCQkJRW5nbGlzaCwKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcAkocmV2aXNpb24gODI0
OTIpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00NDcsNiArNDQ3LDkgQEAgVmlzaWJsZVBvc2l0aW9uIFNlbGVjdGlv
bkNvbnRyb2xsZXI6Om1vZAogICAgIGNhc2UgRG9jdW1lbnRCb3VuZGFyeToKICAgICAgICAgLy8g
RklYTUU6IGltcGxlbWVudCBhbGwgb2YgdGhlIGFib3ZlPwogICAgICAgICBwb3MgPSBtb2RpZnlF
eHRlbmRpbmdGb3J3YXJkKGdyYW51bGFyaXR5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBX
ZWJLaXRWaXN1YWxXb3JkR3JhbnVsYXJpdHk6CisgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBy
ZXR1cm4gcG9zOwogfQpAQCAtNDg2LDYgKzQ4OSw4IEBAIFZpc2libGVQb3NpdGlvbiBTZWxlY3Rp
b25Db250cm9sbGVyOjptb2QKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcG9zID0gZW5kT2ZE
b2N1bWVudChwb3MpOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIFdlYktpdFZpc3VhbFdvcmRH
cmFudWxhcml0eToKKyAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIAogICAgIHJldHVybiBwb3M7
CkBAIC01MTcsNiArNTIyLDkgQEAgVmlzaWJsZVBvc2l0aW9uIFNlbGVjdGlvbkNvbnRyb2xsZXI6
Om1vZAogICAgIGNhc2UgTGluZUJvdW5kYXJ5OgogICAgICAgICBwb3MgPSByaWdodEJvdW5kYXJ5
T2ZMaW5lKHN0YXJ0Rm9yUGxhdGZvcm0oKSwgZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jaygpKTsK
ICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXZWJLaXRWaXN1YWxXb3JkR3JhbnVsYXJpdHk6Cisg
ICAgICAgIHBvcyA9IHJpZ2h0V29yZFBvc2l0aW9uKFZpc2libGVQb3NpdGlvbihtX3NlbGVjdGlv
bi5leHRlbnQoKSwgbV9zZWxlY3Rpb24uYWZmaW5pdHkoKSkpOworICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgcmV0dXJuIHBvczsKIH0KQEAgLTU2NSw2ICs1NzMsOCBAQCBWaXNpYmxlUG9zaXRp
b24gU2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHBv
cyA9IGVuZE9mRG9jdW1lbnQocG9zKTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXZWJLaXRW
aXN1YWxXb3JkR3JhbnVsYXJpdHk6CisgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4g
cG9zOwogfQpAQCAtNjA0LDYgKzYxNCw5IEBAIFZpc2libGVQb3NpdGlvbiBTZWxlY3Rpb25Db250
cm9sbGVyOjptb2QKICAgICBjYXNlIFBhcmFncmFwaEJvdW5kYXJ5OgogICAgIGNhc2UgRG9jdW1l
bnRCb3VuZGFyeToKICAgICAgICAgcG9zID0gbW9kaWZ5RXh0ZW5kaW5nQmFja3dhcmQoZ3JhbnVs
YXJpdHkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdlYktpdFZpc3VhbFdvcmRHcmFudWxh
cml0eToKKyAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBwb3M7CiB9CkBAIC02NDgs
NiArNjYxLDggQEAgVmlzaWJsZVBvc2l0aW9uIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vZAogICAg
ICAgICBlbHNlCiAgICAgICAgICAgICBwb3MgPSBzdGFydE9mRG9jdW1lbnQocG9zKTsKICAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBXZWJLaXRWaXN1YWxXb3JkR3JhbnVsYXJpdHk6CisgICAgICAg
IGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gcG9zOwogfQpAQCAtNjY2LDYgKzY4MSw4IEBAIFZp
c2libGVQb3NpdGlvbiBTZWxlY3Rpb25Db250cm9sbGVyOjptb2QKICAgICAgICAgICAgIHBvcyA9
IFZpc2libGVQb3NpdGlvbihtX3NlbGVjdGlvbi5leHRlbnQoKSwgbV9zZWxlY3Rpb24uYWZmaW5p
dHkoKSkubGVmdCh0cnVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBXb3JkR3JhbnVsYXJp
dHk6CisgICAgICAgIHBvcyA9IGxlZnRXb3JkUG9zaXRpb24oVmlzaWJsZVBvc2l0aW9uKG1fc2Vs
ZWN0aW9uLmV4dGVudCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKSk7CisgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgU2VudGVuY2VHcmFudWxhcml0eToKICAgICBjYXNlIExpbmVHcmFudWxhcml0
eToKICAgICBjYXNlIFBhcmFncmFwaEdyYW51bGFyaXR5OgpAQCAtNjc4LDYgKzY5NSw5IEBAIFZp
c2libGVQb3NpdGlvbiBTZWxlY3Rpb25Db250cm9sbGVyOjptb2QKICAgICBjYXNlIExpbmVCb3Vu
ZGFyeToKICAgICAgICAgcG9zID0gbGVmdEJvdW5kYXJ5T2ZMaW5lKHN0YXJ0Rm9yUGxhdGZvcm0o
KSwgZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jaygpKTsKICAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBXZWJLaXRWaXN1YWxXb3JkR3JhbnVsYXJpdHk6CisgICAgICAgIHBvcyA9IGxlZnRXb3JkUG9z
aXRpb24oVmlzaWJsZVBvc2l0aW9uKG1fc2VsZWN0aW9uLmV4dGVudCgpLCBtX3NlbGVjdGlvbi5h
ZmZpbml0eSgpKSk7CisgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gcG9zOwogfQpA
QCAtNzIwLDYgKzc0MCw4IEBAIFZpc2libGVQb3NpdGlvbiBTZWxlY3Rpb25Db250cm9sbGVyOjpt
b2QKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcG9zID0gc3RhcnRPZkRvY3VtZW50KHBvcyk7
CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgV2ViS2l0VmlzdWFsV29yZEdyYW51bGFyaXR5Ogor
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIHBvczsKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvVGV4dEdyYW51bGFyaXR5LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZWRpdGluZy9UZXh0R3JhbnVsYXJpdHkuaAkocmV2aXNpb24gODI0OTIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1RleHRHcmFudWxhcml0eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
OSw3ICszOSwxMCBAQCBlbnVtIFRleHRHcmFudWxhcml0eSB7CiAgICAgU2VudGVuY2VCb3VuZGFy
eSwKICAgICBMaW5lQm91bmRhcnksCiAgICAgUGFyYWdyYXBoQm91bmRhcnksCi0gICAgRG9jdW1l
bnRCb3VuZGFyeQorICAgIERvY3VtZW50Qm91bmRhcnksCisgICAgLy8gRklYTUU6IHRoaXMgaXMg
YWRkZWQgdGVtcG9yYXJpbHkgZm9yIGV4cGVyaW1lbnQgd2l0aCB2aXN1YWxseSBtb3ZlCisgICAg
Ly8gY2FyZXQgYnkgd29yZEdyYW51bGFyaXR5LiBPbmNlIGFsbCBwYXRjaGVzIGFyZSBsYW5kZWQs
IGl0IHNob3VsZCBiZSByZW1vdmVkLgorICAgIFdlYktpdFZpc3VhbFdvcmRHcmFudWxhcml0eQog
fTsKIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24u
Y3BwCShyZXZpc2lvbiA4MjQ5MikKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNl
bGVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4MCw2ICszODAsOCBAQCB2b2lkIFZpc2li
bGVTZWxlY3Rpb246OnNldFN0YXJ0QW5kRW5kRnJvCiAgICAgICAgICAgICBtX3N0YXJ0ID0gc3Rh
cnRPZlNlbnRlbmNlKFZpc2libGVQb3NpdGlvbihtX3N0YXJ0LCBtX2FmZmluaXR5KSkuZGVlcEVx
dWl2YWxlbnQoKTsKICAgICAgICAgICAgIG1fZW5kID0gZW5kT2ZTZW50ZW5jZShWaXNpYmxlUG9z
aXRpb24obV9lbmQsIG1fYWZmaW5pdHkpKS5kZWVwRXF1aXZhbGVudCgpOwogICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgV2ViS2l0VmlzdWFsV29yZEdyYW51bGFyaXR5OgorICAgICAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgIAogICAgIC8vIE1ha2Ugc3VyZSB3ZSBkbyBub3QgaGF2
ZSBhIGRhbmdsaW5nIHN0YXJ0IG9yIGVuZC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
dmlzaWJsZV91bml0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy92
aXNpYmxlX3VuaXRzLmNwcAkocmV2aXNpb24gODI0OTIpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL3Zpc2libGVfdW5pdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAj
aW5jbHVkZSAiVGV4dEJyZWFrSXRlcmF0b3IuaCIKICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIK
ICNpbmNsdWRlICJWaXNpYmxlUG9zaXRpb24uaCIKKyNpbmNsdWRlICJWaXNpYmxlU2VsZWN0aW9u
LmgiCiAjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKICNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmlj
b2RlLmg+CiAKQEAgLTExNDYsNCArMTE0NywxMzMgQEAgVmlzaWJsZVBvc2l0aW9uIHJpZ2h0Qm91
bmRhcnlPZkxpbmUoY29ucwogICAgIHJldHVybiBkaXJlY3Rpb24gPT0gTFRSID8gbG9naWNhbEVu
ZE9mTGluZShjKSA6IGxvZ2ljYWxTdGFydE9mTGluZShjKTsKIH0KIAorc3RhdGljIGNvbnN0IGlu
dCBpbnZhbGlkT2Zmc2V0ID0gLTE7CisgICAgCitzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHByZXZp
b3VzV29yZEJyZWFrSW5Cb3hJbnNpZGVCbG9ja1dpdGhTYW1lRGlyZWN0aW9uYWxpdHkoY29uc3Qg
SW5saW5lQm94KiBib3gsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcHJldmlvdXNXb3JkQnJlYWss
IGludCYgb2Zmc2V0T2ZXb3JkQnJlYWspCit7CisgICAgYm9vbCBoYXNTZWVuV29yZEJyZWFrSW5U
aGlzQm94ID0gcHJldmlvdXNXb3JkQnJlYWsuaXNOb3ROdWxsKCk7CisgICAgLy8gV2UgbmVlZCB0
byB0YWtlIGNhcmUgb2YgdGhlIHdvcmQgYnJlYWsgaXMgYXQgdGhlIGNvcnJlY3QgcGxhY2UgKGJl
Zm9yZSBzcGFjZSBvciBhZnRlciBzcGFjZSkuCisgICAgLy8gRm9sbG93IEZpcmVmb3gncyBjb252
ZW50aW9uIGluIFdpbmRvd3MsIAorICAgIC8vIEluIExUUiBibG9jaywgd29yZCBicmVhayB2aXN1
YWxseSBtb3ZlcyBjdXJzb3IgdG8gdGhlIGxlZnQgYm91bmRhcnkgb2Ygd29yZHMsCisgICAgLy8g
SW4gUlRMIGJsb2NrLCB3b3JkIGJyZWFrIHZpc3VhbGx5IG1vdmVzIGN1cnNvciB0byB0aGUgcmln
aHQgYm91bmRhcnkgb2Ygd29yZHMuCisgICAgLy8KKyAgICAvLyBTaW5jZSB3ZSBhcmUgdXNpbmcg
cHJldmlvdXNXb3JkUG9zaXRpb24oKSBhbmQgbmV4dFdvcmRQb3NpdGlvbigpIHRvIGdldCB0aGUg
d29yZCBib3VuZGFyeS4KKyAgICAvLyBGb3IgTFRSIHRleHQsIHByZXZpb3VzV29yZFBvc2l0aW9u
KCkgcmV0dXJucyB0aGUgd29yZCBicmVhayBhdCB0aGUgbGVmdCBib3VuZGFyeSBvZiBhIHdvcmQs
IAorICAgIC8vICAgICAgICAgICAgICAgbmV4dFdvcmRQb3NpdGlvbigpIHJldHVybnMgdGhlIHdv
cmQgYnJlYWsgYXQgdGhlIHJpZ2h0IGJvdW5kYXJ5IG9mIGEgd29yZC4gCisgICAgLy8gRm9yIFJU
TCB0ZXh0LCBwcmV2aW91c1dvcmRQb3NpdGlvbigpIHJldHVybnMgdGhlIHdvcmQgYnJlYWsgYXQg
dGhlIHJpZ2h0IGJvdW5kYXJ5IG9mIGEgd29yZCwKKyAgICAvLyAgICAgICAgICAgICAgIG5leHRX
b3JkUG9zaXRpb24oKSByZXR1cm5zIHRoZSB3b3JkIGJyZWFrIGF0IHRoZSBsZWZ0IGJvdW5kYXJ5
IG9mIGEgd29yZC4KKyAgICAvLyAKKyAgICAvLyBTbywgd2hlbiB0aGUgYm94J3MgZGlyZWN0aW9u
YWxpdHkgaXMgdGhlIHNhbWUgYXMgdGhlIGJsb2NrJ3MgZGlyZWN0aW9uYWxpdHksCisgICAgLy8g
d2Ugc2hvdWxkIHVzZSBwcmV2aW91c1dvcmRQb3NpdGlvbigpIGZvciBMVFIgdGV4dCBvciBSVEwg
dGV4dC4KKyAgICAvLyBJZiBjb250aW5vdXNseSBjb2xsZWN0aW5nIHdvcmQgYnJlYWtzLCBmb3Ig
TFRSIGJveCwgdGhlIHdvcmQgYnJlYWtzIGFyZSBjb2xsZWN0ZWQgZnJvbSByaWdodCB0byBsZWZ0
LgorICAgIC8vIGZvciBSVEwgYm94LCB3b3JkIGJyZWFrcyBhcmUgY29sbGVjdGVkIGZyb20gbGVm
dCB0byByaWdodC4gCisgICAgVmlzaWJsZVBvc2l0aW9uIHdvcmRCcmVhayA9IGhhc1NlZW5Xb3Jk
QnJlYWtJblRoaXNCb3ggPyBwcmV2aW91c1dvcmRCcmVhayA6IFBvc2l0aW9uKGJveC0+cmVuZGVy
ZXIoKS0+bm9kZSgpLCBib3gtPmNhcmV0TWF4T2Zmc2V0KCksIFBvc2l0aW9uOjpQb3NpdGlvbklz
T2Zmc2V0SW5BbmNob3IpOworCisgICAgLy8gRklYTUU6IGhhbmRsZSBtdWx0aS1zcGFjZXMuIAor
ICAgIC8vIEluIHRoZSBjYXNlIG9mIG11bHRpLXNwYWNlcywgd29yZCBicmVhayBhbW9uZyB0aGUg
Y29sbGFwc2VkIHNwYWNlcyBtaWdodCBub3QgYWRkZWQuCisgICAgLy8gRm9yIGV4YW1wbGUsICI8
ZGl2PmFiYyAgICBkZWYgaGlqICAgIG9wcSByc3Q8L2Rpdj4iLCBubyB3b3JkIGJyZWFrIGlzIGFk
ZGVkIGJldHdlZW4gImhpaiIgYW5kICJvcHEiLgorICAgIC8vIFRoZSByZWFzb24gaXMgd2hlbiBj
dXJzb3IgaXMgaW1tZWRpYXRlbHkgdG8gdGhlIHJpZ2h0IG9mICJvcHEiLCBpdHMgcHJldmlvdXMg
d29yZCBib3VuZGFyeSdzIG9mZnNldCByZXR1cm5lZCBmcm9tIHByZXZpb3VzV29yZFBvc2l0aW9u
KCkgaXMgMTUsCisgICAgLy8gd2hpY2ggaXMgaW1tZWRpYXRlbHkgdG8gdGhlIHJpZ2h0IG9mICJo
aWogIiwgYW5kIHdoaWNoIGlzIG5vdCBpbiB0aGUgc2FtZSBib3ggYXMgIm9wcSIsCisgICAgLy8g
c28sIGl0IHdvbnQgYmUgYWRkZWQgYXMgYSB3b3JkIGJyZWFrIG9mIGJveCAib3BxIHJzdCIuIAor
ICAgIC8vIFdlIGNvdWxkIGFsd2F5cyBhZGQgdGhlIHJpZ2h0bW9zdChmb3IgTFRSIGJveCkvbGVm
dG1vc3QoZm9yIFJUTCBib3gpIGJvdW5kYXJ5CisgICAgLy8gYXMgd29yZGJyZWFrIHdoZW4gaXRz
IGlubGluZUJveCBpcyB0aGUgc2FtZSBhcyAnYm94Jy4gQ2hlY2tpbmcgdGhhdCB0aGUgcmlnaHRt
b3N0IG9yIGxlZnRtb3N0IGJvdW5kYXJ5J3MgaW5saW5lQm94IGdldCBmcm9tCisgICAgLy8gZ2V0
SW5saW5lQm94QW5kT2Zmc2V0IGlzIHRoZSBzYW1lIGFzICdib3gnIGlzIGltcG9ydGFudCBhcyB0
byBub3QgYnJlYWsgY2FzZXMgc3VjaCBhcyA8ZGl2PmhlPGI+bGxvPC9iPiB3b3JsZDwvZGl2Piwg
aW4gd2hpY2gKKyAgICAvLyB3aGVuIGN1cnNvciBpcyBpbW1lZGlhdGVseSB0byB0aGUgcmlnaHQg
b2YgJ2hlJywgdGhlIHJpZ2h0bW9zdCBib3VuZGFyeSdzIGlubGluZUJveCBnZXQgZnJvbSBnZXRJ
bmxpbmVCb3hBbmRPZmZzZXQgaXMKKyAgICAvLyBib3ggJ2xsbycsIHdoaWNoIGlzIGRpZmZlcmVu
dCBmcm9tIGJveCAnaGUnLCBhbmQgdGhpcyByaWdodG1vc3QgYm91bmRhcnkgd29udCBiZSBhZGRl
ZCBhcyBhIHdvcmQgYnJlYWsuCisgICAgLy8gQnV0IGl0IHN0aWxsIG1pZ2h0IGJyZWFrIHNvbWUg
b3RoZXIgY2FzZXMgc2luY2UgYSBib3VuYXJ5IG9mIGEgYm94IGRvZXMgbm90IG5lY2Vzc2FyaWx5
IG1lYW5zIGEgd29yZCBicmVhay4KKyAgICAvLyBPciB3ZSBuZWVkIHRvIHByb3ZpZGUgYSB3YXkg
bm90IHRvIGNhbm9uaWNhbGl6ZSh1cHN0cmVhbSkgVmlzaWJsZVBvc2l0aW9uIGluIGl0cyBjb25z
dHJ1Y3RvciwgCisgICAgLy8gc28gcHJldmlvdXNXb3JkUG9zaXRpb24oKSBvZiAib3BxIiBjb3Vs
ZCByZXR1cm4gb2Zmc2V0IDE4LCB3aGljaCBpcyBpbW1lZGlhdGVseSB0byB0aGUgbGVmdCBvZiAi
b3BxIiwgaW5zdGVhZC4KKworICAgIHdvcmRCcmVhayA9IHByZXZpb3VzV29yZFBvc2l0aW9uKHdv
cmRCcmVhayk7CisgICAgaWYgKHByZXZpb3VzV29yZEJyZWFrICE9IHdvcmRCcmVhaykgeworICAg
ICAgICBJbmxpbmVCb3gqIGJveENvbnRhaW5pbmdQcmV2aW91c1dvcmRCcmVhazsKKyAgICAgICAg
VmlzaWJsZVBvc2l0aW9uIHdvcmRCcmVhazsKKyAgICAgICAgd29yZEJyZWFrLmdldElubGluZUJv
eEFuZE9mZnNldChib3hDb250YWluaW5nUHJldmlvdXNXb3JkQnJlYWssIG9mZnNldE9mV29yZEJy
ZWFrKTsKKyAgICAgICAgaWYgKGJveENvbnRhaW5pbmdQcmV2aW91c1dvcmRCcmVhayA9PSBib3gp
CisgICAgICAgICAgICByZXR1cm4gd29yZEJyZWFrOworICAgIH0KKyAgICByZXR1cm4gVmlzaWJs
ZVBvc2l0aW9uKCk7Cit9CisKK3N0YXRpYyBWaXNpYmxlUG9zaXRpb24gZmluZFdvcmRCb3VuZGFy
eUluQm94SW5CbG9ja0RpcmVjdGlvbihjb25zdCBJbmxpbmVCb3gqIGJveCwgaW50IG9mZnNldCwg
VGV4dERpcmVjdGlvbiBibG9ja0RpcmVjdGlvbikKK3sKKyAgICBpbnQgb2Zmc2V0T2ZXb3JkQnJl
YWsgPSAwOworICAgIFZpc2libGVQb3NpdGlvbiB3b3JkQnJlYWs7CisgICAgd2hpbGUgKHRydWUp
IHsKKyAgICAgICAgaWYgKGJveC0+ZGlyZWN0aW9uKCkgPT0gYmxvY2tEaXJlY3Rpb24pCisgICAg
ICAgICAgICB3b3JkQnJlYWsgPSBwcmV2aW91c1dvcmRCcmVha0luQm94SW5zaWRlQmxvY2tXaXRo
U2FtZURpcmVjdGlvbmFsaXR5KGJveCwgd29yZEJyZWFrLCBvZmZzZXRPZldvcmRCcmVhayk7Cisg
ICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhlICdlbHNlJyBjYXNlIHdoZW4gdGhlIGJveCBk
aXJlY3Rpb24gaXMgbm90IGVxdWFsIHRvIHRoZSBibG9jayBkaXJlY3Rpb24uCisgICAgICAgIGlm
ICh3b3JkQnJlYWsuaXNOdWxsKCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKG9m
ZnNldCA9PSBpbnZhbGlkT2Zmc2V0IHx8IG9mZnNldE9mV29yZEJyZWFrICE9IG9mZnNldCkKKyAg
ICAgICAgICAgIHJldHVybiB3b3JkQnJlYWs7CisgICAgfSAgICAgICAgCisgICAgcmV0dXJuIFZp
c2libGVQb3NpdGlvbigpOworfQorCitzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIGxlZnRXb3JkQm91
bmRhcnkoY29uc3QgSW5saW5lQm94KiBib3gsIGludCBvZmZzZXQsIFRleHREaXJlY3Rpb24gYmxv
Y2tEaXJlY3Rpb24pCit7CisgICAgVmlzaWJsZVBvc2l0aW9uIHdvcmRCcmVhazsKKyAgICBmb3Ig
IChjb25zdCBJbmxpbmVCb3gqIGFkamFjZW50Qm94ID0gYm94OyBhZGphY2VudEJveDsgYWRqYWNl
bnRCb3ggPSBhZGphY2VudEJveC0+cHJldkxlYWZDaGlsZCgpKSB7CisgICAgICAgIGlmIChibG9j
a0RpcmVjdGlvbiA9PSBMVFIpIAorICAgICAgICAgICAgd29yZEJyZWFrID0gZmluZFdvcmRCb3Vu
ZGFyeUluQm94SW5CbG9ja0RpcmVjdGlvbihhZGphY2VudEJveCwgYWRqYWNlbnRCb3ggPT0gYm94
ID8gb2Zmc2V0IDogaW52YWxpZE9mZnNldCwgYmxvY2tEaXJlY3Rpb24pOworICAgICAgICAvLyBG
SVhNRTogImVsc2UiIG5vdCBpbXBsZW1lbnRlZCB5ZXQuCisgICAgICAgIGlmICh3b3JkQnJlYWsu
aXNOb3ROdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gd29yZEJyZWFrOworICAgIH0KKyAgICBy
ZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7Cit9CisgCitzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHJp
Z2h0V29yZEJvdW5kYXJ5KGNvbnN0IElubGluZUJveCogYm94LCBpbnQgb2Zmc2V0LCBUZXh0RGly
ZWN0aW9uIGJsb2NrRGlyZWN0aW9uKQoreworICAgIAorICAgIFZpc2libGVQb3NpdGlvbiB3b3Jk
QnJlYWs7CisgICAgZm9yIChjb25zdCBJbmxpbmVCb3gqIGFkamFjZW50Qm94ID0gYm94OyBhZGph
Y2VudEJveDsgYWRqYWNlbnRCb3ggPSBhZGphY2VudEJveC0+bmV4dExlYWZDaGlsZCgpKSB7Cisg
ICAgICAgIGlmIChibG9ja0RpcmVjdGlvbiA9PSBSVEwpCisgICAgICAgICAgICB3b3JkQnJlYWsg
PSBmaW5kV29yZEJvdW5kYXJ5SW5Cb3hJbkJsb2NrRGlyZWN0aW9uKGFkamFjZW50Qm94LCBhZGph
Y2VudEJveCA9PSBib3ggPyBvZmZzZXQgOiBpbnZhbGlkT2Zmc2V0LCBibG9ja0RpcmVjdGlvbik7
CisgICAgICAgIC8vIEZJWE1FOiAiZWxzZSIgbm90IGltcGxlbWVudGVkIHlldC4KKyAgICAgICAg
aWYgKCF3b3JkQnJlYWsuaXNOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gd29yZEJyZWFrOwor
ICAgIH0KKyAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7Cit9CisKK1Zpc2libGVQb3NpdGlv
biBsZWZ0V29yZFBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9u
KQoreworICAgIC8vIEZvbGxvdyBGaXJlZm94J3MgY29udmVudGlvbiBpbiBXaW5kb3dzLCAKKyAg
ICAvLyBJbiBMVFIgYmxvY2ssIHdvcmQgYnJlYWsgdmlzdWFsbHkgbW92ZXMgY3Vyc29yIHRvIHRo
ZSBsZWZ0IGJvdW5kYXJ5IG9mIHdvcmRzLAorICAgIC8vIEluIFJUTCBibG9jaywgd29yZCBicmVh
ayB2aXN1YWxseSBtb3ZlcyBjdXJzb3IgdG8gdGhlIHJpZ2h0IGJvdW5kYXJ5IG9mIHdvcmRzLgor
ICAgIElubGluZUJveCogYm94OworICAgIGludCBvZmZzZXQ7CisgICAgdmlzaWJsZVBvc2l0aW9u
LmdldElubGluZUJveEFuZE9mZnNldChib3gsIG9mZnNldCk7CisgICAgVGV4dERpcmVjdGlvbiBi
bG9ja0RpcmVjdGlvbiA9IGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2sodmlzaWJsZVBvc2l0aW9u
LmRlZXBFcXVpdmFsZW50KCkpOworICAgIAorICAgIC8vIEZJWE1FOiBJZiB0aGUgYm94J3MgZGly
ZWN0aW9uYWxpdHkgaXMgdGhlIHNhbWUgYXMgdGhhdCBvZiB0aGUgZW5jbG9zaW5nIGJsb2NrLCB3
aGVuIHRoZSBvZmZzZXQgaXMgYXQgdGhlIGJveCBib3VuZGFyeQorICAgIC8vIGFuZCB0aGUgZGly
ZWN0aW9uIGlzIHRvd2FyZHMgaW5zaWRlIHRoZSBib3gsIGRvIEkgc3RpbGwgbmVlZCB0byBtYWtl
IGl0IGEgc3BlY2lhbCBjYXNlPyBGb3IgZXhhbXBsZSwgYSBMVFIgYm94IGluc2lkZSBhIExUUiBi
bG9jaywKKyAgICAvLyB3aGVuIG9mZnNldCBpcyBhdCBib3gncyBjYXJldE1pbk9mZnNldCBhbmQg
dGhlIGRpcmVjdGlvbiBpcyBEaXJlY3Rpb25SaWdodCwgc2hvdWxkIGl0IGJlIHRha2VuIGNhcmUg
YXMgYSBnZW5lcmFsIGNhc2U/CisgICAgaWYgKG9mZnNldCA9PSBib3gtPmNhcmV0TGVmdG1vc3RP
ZmZzZXQoKSkKKyAgICAgICAgcmV0dXJuIGxlZnRXb3JkQm91bmRhcnkoYm94LT5wcmV2TGVhZkNo
aWxkKCksIGludmFsaWRPZmZzZXQsIGJsb2NrRGlyZWN0aW9uKTsKKyAgICBpZiAob2Zmc2V0ID09
IGJveC0+Y2FyZXRSaWdodG1vc3RPZmZzZXQoKSkKKyAgICAgICAgcmV0dXJuIGxlZnRXb3JkQm91
bmRhcnkoYm94LCBvZmZzZXQsIGJsb2NrRGlyZWN0aW9uKTsKKyAgICAKKyAgICAvLyBGSVhNRTog
Tm90IGltcGxlbWVudGVkLgorICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKK30KKworVmlz
aWJsZVBvc2l0aW9uIHJpZ2h0V29yZFBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlz
aWJsZVBvc2l0aW9uKQoreworICAgIElubGluZUJveCogYm94OworICAgIGludCBvZmZzZXQ7Cisg
ICAgdmlzaWJsZVBvc2l0aW9uLmdldElubGluZUJveEFuZE9mZnNldChib3gsIG9mZnNldCk7Cisg
ICAgVGV4dERpcmVjdGlvbiBibG9ja0RpcmVjdGlvbiA9IGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxv
Y2sodmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkpOworICAgIAorICAgIGlmIChvZmZz
ZXQgPT0gYm94LT5jYXJldExlZnRtb3N0T2Zmc2V0KCkpCisgICAgICAgIHJldHVybiByaWdodFdv
cmRCb3VuZGFyeShib3gsIG9mZnNldCwgYmxvY2tEaXJlY3Rpb24pOworICAgIGlmIChvZmZzZXQg
PT0gYm94LT5jYXJldFJpZ2h0bW9zdE9mZnNldCgpKQorICAgICAgICByZXR1cm4gcmlnaHRXb3Jk
Qm91bmRhcnkoYm94LT5uZXh0TGVhZkNoaWxkKCksIC0xLCBibG9ja0RpcmVjdGlvbik7CisgICAg
CisgICAgLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRlZC4KKyAgICByZXR1cm4gVmlzaWJsZVBvc2l0
aW9uKCk7Cit9CisKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5o
CShyZXZpc2lvbiA4MjQ5MikKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw4IEBAIFZpc2libGVQb3NpdGlvbiBzdGFy
dE9mV29yZChjb25zdCBWaXNpYmwKIFZpc2libGVQb3NpdGlvbiBlbmRPZldvcmQoY29uc3QgVmlz
aWJsZVBvc2l0aW9uICYsIEVXb3JkU2lkZSA9IFJpZ2h0V29yZElmT25Cb3VuZGFyeSk7CiBWaXNp
YmxlUG9zaXRpb24gcHJldmlvdXNXb3JkUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uICYp
OwogVmlzaWJsZVBvc2l0aW9uIG5leHRXb3JkUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9u
ICYpOworVmlzaWJsZVBvc2l0aW9uIHJpZ2h0V29yZFBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3Np
dGlvbiYpOworVmlzaWJsZVBvc2l0aW9uIGxlZnRXb3JkUG9zaXRpb24oY29uc3QgVmlzaWJsZVBv
c2l0aW9uJik7CiAKIC8vIHNlbnRlbmNlcwogVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZTZW50ZW5j
ZShjb25zdCBWaXNpYmxlUG9zaXRpb24gJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0RP
TVNlbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9ET01TZWxl
Y3Rpb24uY3BwCShyZXZpc2lvbiA4MjQ5MikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2Vs
ZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMyLDYgKzMzMiw4IEBAIHZvaWQgRE9NU2Vs
ZWN0aW9uOjptb2RpZnkoY29uc3QgU3RyaW5nJiAKICAgICAgICAgZ3JhbnVsYXJpdHkgPSBQYXJh
Z3JhcGhCb3VuZGFyeTsKICAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShncmFudWxhcml0
eVN0cmluZywgImRvY3VtZW50Ym91bmRhcnkiKSkKICAgICAgICAgZ3JhbnVsYXJpdHkgPSBEb2N1
bWVudEJvdW5kYXJ5OworICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGdyYW51bGFyaXR5
U3RyaW5nLCAiLXdlYmtpdC12aXN1YWwtd29yZCIpKQorICAgICAgICBncmFudWxhcml0eSA9IFdl
YktpdFZpc3VhbFdvcmRHcmFudWxhcml0eTsKICAgICBlbHNlCiAgICAgICAgIHJldHVybjsKIApJ
bmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0No
YW5nZUxvZwkocmV2aXNpb24gODI0OTIpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMS0wMy0zMCAgWGlhb21laSBKaSAgPHhqaUBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgRXhwZXJpbWVudCB3aXRoIG1vdmluZyBjYXJldCBieSB3b3JkIGluIHZpc3VhbCBvcmRl
ci4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU3MzM2
CisKKyAgICAgICAgKiBlZGl0aW5nL3NlbGVjdGlvbi9tb3ZlLWJ5LXdvcmQtdmlzdWFsbHktZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL3NlbGVjdGlvbi9tb3ZlLWJ5LXdv
cmQtdmlzdWFsbHkuaHRtbDogQWRkZWQuCisKIDIwMTEtMDMtMzAgIE1paGFpIFBhcnBhcml0YSAg
PG1paGFpcEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUHV0IGV4cGVjdGVkIFBORyBmb3IgZmFz
dC9tdWx0aWNvbC9tYXgtaGVpZ2h0LWNvbHVtbnMtYmxvY2suaHRtbCBpbiB0aGUKSW5kZXg6IExh
eW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL21vdmUtYnktd29yZC12aXN1YWxseS1leHBlY3Rl
ZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vbW92ZS1i
eS13b3JkLXZpc3VhbGx5LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2VkaXRpbmcvc2VsZWN0aW9uL21vdmUtYnktd29yZC12aXN1YWxseS1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNDMgQEAKKworPT09PT09PT0gTW92ZSBCeSBXb3JkID09PT0K
K1Rlc3QgMSwgTFRSOgorTW92ZSByaWdodCBieSBvbmUgd29yZAorImFiYyBkZWYgaGlqIG9wcSBy
c3QiWzAsIDQsIDgsIDEyLCAxNiwgMTldICAgIEZBSUwgZXhwZWN0ZWQ6IFs0LCA4LCAxMiwgMTYs
IDE5LCAxOV0KK01vdmUgbGVmdCBieSBvbmUgd29yZAorImFiYyBkZWYgaGlqIG9wcSByc3QiWzE2
LCAxNiwgMTIsIDgsIDQsIDBdICAgIEZBSUwgZXhwZWN0ZWQ6IFsxNiwgMTIsIDgsIDQsIDAsIDBd
CitUZXN0IDIsIFJUTDoKK01vdmUgbGVmdCBieSBvbmUgd29yZAorImFiYyBkZWYgaGlqIG9wcSBy
c3QiWzAsIDE1LCAxMSwgNywgMywgMTldICAgIEZBSUwgZXhwZWN0ZWQ6IFsxNSwgMTEsIDcsIDMs
IDE5LCAxOV0KK01vdmUgcmlnaHQgYnkgb25lIHdvcmQKKyJhYmMgZGVmIGhpaiBvcHEgcnN0Ilsx
OSwgMywgNywgMTEsIDE1LCAwXSAgICBGQUlMIGV4cGVjdGVkOiBbMywgNywgMTEsIDE1LCAwLCAw
XQorVGVzdCAzLCBMVFI6CitNb3ZlIHJpZ2h0IGJ5IG9uZSB3b3JkCisiWlpaIFFRUSBCQkIgQ0ND
IFhYWCJbMCwgMTUsIDExLCA3LCAzLCAxOV0gICAgRkFJTCBleHBlY3RlZDogWzE1LCAxMSwgNywg
MywgMTksIDE5XQorTW92ZSBsZWZ0IGJ5IG9uZSB3b3JkCisiWlpaIFFRUSBCQkIgQ0NDIFhYWCJb
MTksIDMsIDcsIDExLCAxNSwgMF0gICAgRkFJTCBleHBlY3RlZDogWzMsIDcsIDExLCAxNSwgMCwg
MF0KK1Rlc3QgNCwgUlRMOgorTW92ZSBsZWZ0IGJ5IG9uZSB3b3JkCisiWlpaIFFRUSBCQkIgQ0ND
IFhYWCJbMCwgNCwgOCwgMTIsIDE2LCAxOV0gICAgRkFJTCBleHBlY3RlZDogWzQsIDgsIDEyLCAx
NiwgMTksIDE5XQorTW92ZSByaWdodCBieSBvbmUgd29yZAorIlpaWiBRUVEgQkJCIENDQyBYWFgi
WzE2LCAxNiwgMTIsIDgsIDQsIDBdICAgIEZBSUwgZXhwZWN0ZWQ6IFsxNiwgMTIsIDgsIDQsIDAs
IDBdCitUZXN0IDUsIExUUjoKK01vdmUgcmlnaHQgYnkgb25lIHdvcmQKKyJhYmMgZGVmIFpRQiBS
SUcgdXZ3IHh5eiJbMCwgNCwgOCwgMTEsIDE2LCAyMCwgMjNdICAgIEZBSUwgZXhwZWN0ZWQ6IFs0
LCA4LCAxMSwgMTYsIDIwLCAyMywgMjNdCitNb3ZlIGxlZnQgYnkgb25lIHdvcmQKKyJhYmMgZGVm
IFpRQiBSSUcgdXZ3IHh5eiJbMjAsIDIwLCAxNiwgMTEsIDQsIDQsIDBdICAgIEZBSUwgZXhwZWN0
ZWQ6IFsyMCwgMTYsIDExLCA4LCA0LCAwLCAwXQorVGVzdCA2LCBSVEw6CitNb3ZlIGxlZnQgYnkg
b25lIHdvcmQKKyJhYmMgZGVmIFpRQiBSSUcgdXZ3IHh5eiJbMCwgMywgOCwgMTIsIDE2LCAxOSwg
MjNdICAgIEZBSUwgZXhwZWN0ZWQ6IFszLCA4LCAxMiwgMTYsIDE5LCAyMywgMjNdCitNb3ZlIHJp
Z2h0IGJ5IG9uZSB3b3JkCisiYWJjIGRlZiBaUUIgUklHIHV2dyB4eXoiWzEyLCAxOSwgMTIsIDEy
LCA4LCAzLCAwXSAgICBGQUlMIGV4cGVjdGVkOiBbMTksIDE2LCAxMiwgOCwgMywgMCwgMF0KK1Rl
c3QgNywgTFRSOgorTW92ZSByaWdodCBieSBvbmUgd29yZAorIlpRQiBhYmMgUklHIlswLCA0LCA4
LCAxMV0gICAgRkFJTCBleHBlY3RlZDogWzQsIDgsIDExLCAxMV0KK01vdmUgbGVmdCBieSBvbmUg
d29yZAorIlpRQiBhYmMgUklHIls0LCA0LCA0LCAwXSAgICBGQUlMIGV4cGVjdGVkOiBbOCwgNCwg
MCwgMF0KK1Rlc3QgOCwgUlRMOgorTW92ZSBsZWZ0IGJ5IG9uZSB3b3JkCisiWlFCIGFiYyBSSUci
WzAsIDQsIDgsIDExXSAgICBGQUlMIGV4cGVjdGVkOiBbNCwgOCwgMTEsIDExXQorTW92ZSByaWdo
dCBieSBvbmUgd29yZAorIlpRQiBhYmMgUklHIls4LCA4LCAwLCAwXSAgICBGQUlMIGV4cGVjdGVk
OiBbOCwgNCwgMCwgMF0KKwpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vbW92
ZS1ieS13b3JkLXZpc3VhbGx5Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGlu
Zy9zZWxlY3Rpb24vbW92ZS1ieS13b3JkLXZpc3VhbGx5Lmh0bWwJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9tb3ZlLWJ5LXdvcmQtdmlzdWFsbHkuaHRtbAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxOTggQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8
aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1s
OyBjaGFyc2V0PXV0Zi04Ij4KKzxzdHlsZT4KK2Rpdi50ZXN0IHsKKyAgICAtd2Via2l0LXVzZXIt
bW9kaWZ5OiByZWFkLXdyaXRlOworICAgIHBhZGRpbmc6IDRweDsKKyAgICBib3JkZXI6IDFweCBk
YXNoZWQgbGlnaHRibHVlOworICAgIG1hcmdpbjogNHB4IDRweCA0cHggMjRweDsKKyAgICBvdXRs
aW5lOiBub25lOworICAgIGZvbnQtZmFtaWx5OiBMdWNpZGEgR3JhbmRlOworICAgIGNvdW50ZXIt
aW5jcmVtZW50OiB0ZXN0LW51bWJlcjsKK30KK2Rpdi50ZXN0OmJlZm9yZSB7IGNvbnRlbnQ6IGNv
dW50ZXIodGVzdC1udW1iZXIpOyBwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6IDhweDsgZm9udC1z
aXplOiB4LXNtYWxsOyB0ZXh0LWFsaWduOiByaWdodDsgd2lkdGg6IDIwcHg7IH0KK2Rpdi50ZXN0
IHNwYW4geyBiYWNrZ3JvdW5kLWNvbG9yOiAjZGVmOyB9CitkaXYudGVzdCBpbWcgeyB3aWR0aDog
MWVtOyBoZWlnaHQ6IDFlbTsgYmFja2dyb3VuZC1jb2xvcjogbGlnaHRncmVlbjsgfQorZGl2LnRl
c3QgaW1nICsgaW1nIHsgYmFja2dyb3VuZC1jb2xvcjogbGlnaHRibHVlOyB9CitkaXYudGVzdCBk
aXYgeyBib3JkZXI6IDFweCBkYXNoZWQgcGluazsgcGFkZGluZzogM3B4OyBoZWlnaHQ6IDJlbTsg
fQordGVzdF9tb3ZlX2J5X3dvcmQge2Rpc3BsYXk6IG5vbmU7fQorPC9zdHlsZT4KKzxzY3JpcHQ+
Cit2YXIgbWVzc2FnZXMgPSBbXTsKKworZnVuY3Rpb24gbG9nKG1lc3NhZ2UpCit7CisgICAgbWVz
c2FnZXMucHVzaChtZXNzYWdlKTsKK30KKworZnVuY3Rpb24gZmx1c2hMb2coKQoreworICAgIGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlIikuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3Jl
YXRlVGV4dE5vZGUobWVzc2FnZXMuam9pbigiIikpKTsKK30KKworZnVuY3Rpb24gY2FyZXRDb29y
ZGluYXRlcygpCit7CisgICAgaWYgKCF3aW5kb3cudGV4dElucHV0Q29udHJvbGxlcikKKyAgICAg
ICAgcmV0dXJuIHsgeDogMCwgeSA6MCB9OworICAgIHZhciBjYXJldFJlY3QgPSB0ZXh0SW5wdXRD
b250cm9sbGVyLmZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlKHRleHRJbnB1dENvbnRyb2xsZXIu
c2VsZWN0ZWRSYW5nZSgpWzBdLCAwKTsKKyAgICByZXR1cm4geyB4OiBjYXJldFJlY3RbMF0sIHk6
IGNhcmV0UmVjdFsxXSB9OworfQorCisKK2Z1bmN0aW9uIGZvbGQoc3RyaW5nKQoreworICAgIHZh
ciByZXN1bHQgPSAiIjsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0cmluZy5sZW5ndGg7ICsr
aSkgeworICAgICAgICB2YXIgY2hhciA9IHN0cmluZy5jaGFyQ29kZUF0KGkpOworICAgICAgICBp
ZiAoY2hhciA+PSAweDA1ZDApCisgICAgICAgICAgICBjaGFyIC09IDB4MDU4ZjsKKyAgICAgICAg
ZWxzZSBpZiAoY2hhciA9PSAxMCkgeworICAgICAgICAgICAgcmVzdWx0ICs9ICJcXG4iOworICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgcmVzdWx0ICs9IFN0cmluZy5m
cm9tQ2hhckNvZGUoY2hhcik7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Z1bmN0
aW9uIGxvZ1Bvc2l0aW9ucyhwb3NpdGlvbnMpCit7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBw
b3NpdGlvbnMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaWYgKGkpIHsKKyAgICAgICAgICAgIGlm
IChwb3NpdGlvbnNbaV0ubm9kZSAhPSBwb3NpdGlvbnNbaSAtIDFdLm5vZGUpCisgICAgICAgICAg
ICAgICAgbG9nKCJdIik7CisgICAgICAgICAgICBsb2coIiwgIik7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKCFpIHx8IHBvc2l0aW9uc1tpXS5ub2RlICE9IHBvc2l0aW9uc1tpIC0gMV0ubm9kZSkK
KyAgICAgICAgICAgIGxvZygocG9zaXRpb25zW2ldLm5vZGUgaW5zdGFuY2VvZiBUZXh0ID8gJyIn
ICsgZm9sZChwb3NpdGlvbnNbaV0ubm9kZS5kYXRhKSArICciJyA6ICI8IiArIHBvc2l0aW9uc1tp
XS5ub2RlLnRhZ05hbWUgKyAiPiIpICsgIlsiKTsKKyAgICAgICAgbG9nKHBvc2l0aW9uc1tpXS5v
ZmZzZXQpOworICAgIH0KKyAgICBsb2coIl0iKTsKK30KKwordmFyIHdvcmRCcmVha3M7CisKK2Z1
bmN0aW9uIHZhbGlkYXRlRGF0YShwb3NpdGlvbnMpCit7CisgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCB3b3JkQnJlYWtzLmxlbmd0aCAtIDE7ICsraSkgeworICAgICAgICBpZiAocG9zaXRpb25zW2ld
Lm9mZnNldCAhPSB3b3JkQnJlYWtzW2kgKyAxXSkgeworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICB9CisgICAgaWYgKGkgIT0gd29yZEJyZWFrcy5sZW5ndGggLSAxICYmIHBvc2l0
aW9uc1tpXSAhPSB3b3JkQnJlYWtzW2ldKSB7CisgICAgICAgIGxvZygiICAgIEZBSUwgZXhwZWN0
ZWQ6IFsiKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCB3b3JkQnJlYWtzLmxlbmd0aDsg
KytpKSB7CisgICAgICAgICAgICBsb2cod29yZEJyZWFrc1tpXSArICIsICIpOworICAgICAgICB9
CisgICAgICAgIGxvZyh3b3JkQnJlYWtzW3dvcmRCcmVha3MubGVuZ3RoIC0gMV0gKyAiXSIpOwor
ICAgIH0KK30KKworZnVuY3Rpb24gY29sbGVjdFdvcmRCcmVha3ModGVzdCwgc2VhcmNoRGlyZWN0
aW9uKQoreworICAgIGlmIChzZWFyY2hEaXJlY3Rpb24gPT0gInJpZ2h0IikgeworICAgICAgICBp
ZiAodGVzdC5nZXRBdHRyaWJ1dGUoImRpciIpID09ICdsdHInKSAKKyAgICAgICAgICAgIHdvcmRC
cmVha3MgPSB0ZXN0LnRpdGxlLnNwbGl0KCJ8IilbMF0uc3BsaXQoIiAiKTsKKyAgICAgICAgZWxz
ZSAKKyAgICAgICAgICAgIHdvcmRCcmVha3MgPSB0ZXN0LnRpdGxlLnNwbGl0KCJ8IilbMV0uc3Bs
aXQoIiAiKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAodGVzdC5nZXRBdHRyaWJ1dGUoImRp
ciIpID09ICdsdHInKSAKKyAgICAgICAgICAgIHdvcmRCcmVha3MgPSB0ZXN0LnRpdGxlLnNwbGl0
KCJ8IilbMV0uc3BsaXQoIiAiKTsKKyAgICAgICAgZWxzZSAKKyAgICAgICAgICAgIHdvcmRCcmVh
a3MgPSB0ZXN0LnRpdGxlLnNwbGl0KCJ8IilbMF0uc3BsaXQoIiAiKTsKKyAgICB9Cit9CisKK2Z1
bmN0aW9uIG1vdmVCeVdvcmQoc2VsLCB0ZXN0LCBzZWFyY2hEaXJlY3Rpb24sIGRpcikKK3sKKyAg
ICBsb2coIk1vdmUgIiArIHNlYXJjaERpcmVjdGlvbiArICIgYnkgb25lIHdvcmRcbiIpOworICAg
IHZhciBwcmV2T2Zmc2V0ID0gc2VsLmFuY2hvck9mZnNldDsKKyAgICB2YXIgbm9kZSA9IHNlbC5h
bmNob3JOb2RlOworICAgIGNvbGxlY3RXb3JkQnJlYWtzKHRlc3QsIHNlYXJjaERpcmVjdGlvbik7
CisgICAgc2VsLnNldFBvc2l0aW9uKG5vZGUsIHdvcmRCcmVha3NbMF0pOworICAgIHZhciBwb3Np
dGlvbnMgPSBbXTsKKyAgICBmb3IgKHZhciBpbmRleCA9IDE7IGluZGV4IDwgd29yZEJyZWFrcy5s
ZW5ndGg7ICsraW5kZXgpIHsKKyAgICAgICAgc2VsLm1vZGlmeSgibW92ZSIsIHNlYXJjaERpcmVj
dGlvbiwgIi13ZWJraXQtdmlzdWFsLXdvcmQiKTsKKyAgICAgICAgcG9zaXRpb25zLnB1c2goeyBu
b2RlOiBzZWwuYW5jaG9yTm9kZSwgb2Zmc2V0OiBzZWwuYW5jaG9yT2Zmc2V0LCBwb2ludDogY2Fy
ZXRDb29yZGluYXRlcygpIH0pOworICAgICAgICBzZWwuc2V0UG9zaXRpb24obm9kZSwgd29yZEJy
ZWFrc1tpbmRleF0pOworICAgIH0KKyAgICBzZWwubW9kaWZ5KCJtb3ZlIiwgc2VhcmNoRGlyZWN0
aW9uLCAiLXdlYmtpdC12aXN1YWwtd29yZCIpOworICAgIHBvc2l0aW9ucy5wdXNoKHsgbm9kZTog
c2VsLmFuY2hvck5vZGUsIG9mZnNldDogc2VsLmFuY2hvck9mZnNldCwgcG9pbnQ6IGNhcmV0Q29v
cmRpbmF0ZXMoKSB9KTsKKyAgICBsb2dQb3NpdGlvbnMocG9zaXRpb25zKTsKKyAgICB2YWxpZGF0
ZURhdGEocG9zaXRpb25zKTsKKyAgICBsb2coIlxuIik7Cit9CisKK2Z1bmN0aW9uIG1vdmVCeVdv
cmRGb3JFdmVyeVBvc2l0aW9uKHNlbCwgdGVzdCwgZGlyKQoreworICAgIC8vIENoZWNrIGN0cmwt
cmlnaHQtYXJyb3cgd29ya3MgZm9yIGV2ZXJ5IHBvc2l0aW9uLgorICAgIHNlbC5zZXRQb3NpdGlv
bih0ZXN0LCAwKTsKKyAgICB2YXIgZGlyZWN0aW9uID0gInJpZ2h0IjsKKyAgICBpZiAoZGlyID09
ICJydGwiKQorICAgICAgICBkaXJlY3Rpb24gPSAibGVmdCI7ICAgIAorICAgIG1vdmVCeVdvcmQo
c2VsLCB0ZXN0LCBkaXJlY3Rpb24sIGRpcik7ICAgIAorICAgIC8vIENoZWNrIGN0cmwtbGVmdC1h
cnJvdyB3b3JrcyBmb3IgZXZlcnkgcG9zaXRpb24uCisgICAgaWYgKGRpciA9PSAibHRyIikKKyAg
ICAgICAgZGlyZWN0aW9uID0gImxlZnQiOworICAgIGVsc2UKKyAgICAgICAgZGlyZWN0aW9uID0g
InJpZ2h0IjsgICAgCisgICAgbW92ZUJ5V29yZChzZWwsIHRlc3QsIGRpcmVjdGlvbiwgZGlyKTsg
ICAgCit9CisKK2Z1bmN0aW9uIHJ1bk1vdmVMZWZ0UmlnaHQodGVzdHMsIHVuaXQpCit7CisgICAg
dmFyIHNlbCA9IGdldFNlbGVjdGlvbigpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGVzdHMu
bGVuZ3RoOyArK2kpIHsKKyAgICAgICAgdmFyIHBvc2l0aW9uc01vdmluZ1JpZ2h0OworICAgICAg
ICB2YXIgcG9zaXRpb25zTW92aW5nTGVmdDsKKworICAgICAgICBpZiAodGVzdHNbaV0uZ2V0QXR0
cmlidXRlKCJkaXIiKSA9PSAnbHRyJykKKyAgICAgICAgeworICAgICAgICAgICAgbG9nKCJUZXN0
ICIgKyAoaSArIDEpICsgIiwgTFRSOlxuIik7CisgICAgICAgICAgICBtb3ZlQnlXb3JkRm9yRXZl
cnlQb3NpdGlvbihzZWwsIHRlc3RzW2ldLCAibHRyIik7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBsb2coIlRlc3QgIiArIChpICsgMSkgKyAiLCBSVEw6XG4iKTsKKyAgICAgICAgICAg
IG1vdmVCeVdvcmRGb3JFdmVyeVBvc2l0aW9uKHNlbCwgdGVzdHNbaV0sICJydGwiKTsKKyAgICAg
ICAgfQorCisgICAgfQorICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXN0TW92ZUJ5V29y
ZCIpLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7Cit9CisKK2Z1bmN0aW9uIHJ1blRlc3QoKSB7Cisg
ICAgbG9nKCJcbj09PT09PT09IE1vdmUgQnkgV29yZCA9PT09XG4iKTsKKyAgICB2YXIgdGVzdHMg
PSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJ0ZXN0X21vdmVfYnlfd29yZCIpOwor
ICAgIHJ1bk1vdmVMZWZ0UmlnaHQodGVzdHMsICJ3b3JkIik7Cit9CisKK29ubG9hZCA9IGZ1bmN0
aW9uKCkgeworICAgIHRyeSB7CisgICAgICAgIHJ1blRlc3QoKTsKKyAgICB9IGZpbmFsbHkgewor
ICAgICAgICBmbHVzaExvZygpOworICAgIH0KK307CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworPC9zY3Jp
cHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9InRlc3RNb3ZlQnlXb3JkIj4KKzwhLS0gVGhl
IG51bWJlcnMgcHV0IGluIHRpdGxlIGFyZSBzdGFydGluZyB3b3JkIGJvdW5kYXJpZXMuCitUaGUg
bnVtYmVycyBwcmludGVkIG91dCBpbiB0aGUgb3V0cHV0IGFyZSBlbmRpbmcgd29yZCBib3VuZGFy
aWVzLiAtLT4KKzxkaXYgZGlyPWx0ciBjbGFzcz0idGVzdF9tb3ZlX2J5X3dvcmQiIHRpdGxlPSIw
IDQgOCAxMiAxNiAxOXwxOSAxNiAxMiA4IDQgMCIgY29udGVudGVkaXRhYmxlPmFiYyBkZWYgaGlq
IG9wcSByc3Q8L2Rpdj4KKzxkaXYgZGlyPXJ0bCBjbGFzcz0idGVzdF9tb3ZlX2J5X3dvcmQiIHRp
dGxlPSIwIDE1IDExIDcgMyAxOXwxOSAzIDcgMTEgMTUgMCIgY29udGVudGVkaXRhYmxlPmFiYyBk
ZWYgaGlqIG9wcSByc3Q8L2Rpdj4KKzxkaXYgZGlyPWx0ciBjbGFzcz0idGVzdF9tb3ZlX2J5X3dv
cmQiIHRpdGxlPSIwIDE1IDExIDcgMyAxOXwxOSAzIDcgMTEgMTUgMCIgY29udGVudGVkaXRhYmxl
Ptep16nXqSDXoNeg16Ag15HXkdeRINeS15LXkiDXp9en16c8L2Rpdj4KKzxkaXYgZGlyPXJ0bCBj
bGFzcz0idGVzdF9tb3ZlX2J5X3dvcmQiIHRpdGxlPSIwIDQgOCAxMiAxNiAxOXwxOSAxNiAxMiA4
IDQgMCIgY29udGVudGVkaXRhYmxlPtep16nXqSDXoNeg16Ag15HXkdeRINeS15LXkiDXp9en16c8
L2Rpdj4KKzxkaXYgZGlyPWx0ciBjbGFzcz0idGVzdF9tb3ZlX2J5X3dvcmQiIHRpdGxlPSIwIDQg
OCAxMSAxNiAyMCAyM3wyMyAyMCAxNiAxMSA4IDQgMCIgY29udGVudGVkaXRhYmxlPmFiYyBkZWYg
16nXoNeRINeh15jXliB1dncgeHl6PC9kaXY+Cis8ZGl2IGRpcj1ydGwgY2xhc3M9InRlc3RfbW92
ZV9ieV93b3JkIiB0aXRsZT0iMCAzIDggMTIgMTYgMTkgMjN8MjMgMTkgMTYgMTIgOCAzIDAiIGNv
bnRlbnRlZGl0YWJsZT5hYmMgZGVmINep16DXkSDXodeY15YgdXZ3IHh5ejwvZGl2PgorPGRpdiBk
aXI9bHRyIGNsYXNzPSJ0ZXN0X21vdmVfYnlfd29yZCIgdGl0bGU9IjAgNCA4IDExfDExIDggNCAw
IiBjb250ZW50ZWRpdGFibGU+16nXoNeRIGFiYyDXodeY15Y8L2Rpdj4KKzxkaXYgZGlyPXJ0bCBj
bGFzcz0idGVzdF9tb3ZlX2J5X3dvcmQiIHRpdGxlPSIwIDQgOCAxMXwxMSA4IDQgMCIgY29udGVu
dGVkaXRhYmxlPtep16DXkSBhYmMg16HXmNeWPC9kaXY+Cis8L2Rpdj4KKworPHByZSBpZD0iY29u
c29sZSI+PC9wcmU+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>87697</attachid>
            <date>2011-03-31 04:34:11 -0700</date>
            <delta_ts>2011-03-31 07:09:32 -0700</delta_ts>
            <desc>patch w/ layout test</desc>
            <filename>57336.v6</filename>
            <type>text/plain</type>
            <size>25521</size>
            <attacher name="Xiaomei Ji">xji</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgyNDkyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTEgQEAKKzIwMTEtMDMtMzAgIFhpYW9tZWkg
SmkgIDx4amlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEV4cGVyaW1lbnQgd2l0aCBtb3ZpbmcgY2FyZXQgYnkgd29yZCBpbiB2
aXN1YWwgb3JkZXIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01NzMzNgorCisgICAgICAgIFRoaXMgaXMgdGhlIDFzdCB2ZXJzaW9uIG9mIGltcGxlbWVu
dGluZyAibW92ZSBjYXJldCBieSB3b3JkIGluIHZpc3VhbCBvcmRlciIuCisgICAgICAgIEl0IG9u
bHkgd29ya3MgaW4gdGhlIGZvbGxvd2luZyBzaXR1YXRpb246CisgICAgICAgIDEuIEZvciBhIExU
UiBib3ggaW4gYSBMVFIgYmxvY2sgb3IgYSBSVEwgYm94IGluIFJUTCBibG9jaywgCisgICAgICAg
IHdoZW4gY2FyZXQgaXMgYXQgdGhlIGxlZnQgYm91bmRhcnkgb2YgdGhlIGJveCBhbmQgd2UgYXJl
IGxvb2tpbmcgZm9yIAorICAgICAgICB0aGUgd29yZCBib3VuZGFyeSBpbiByaWdodC4KKyAgICAg
ICAgMi4gRm9yIGEgTFRSIG9yIFJUTCBib3ggaW4gYSBMVFIgYmxvY2ssIHdoZW4gY2FyZXQgaXMg
YXQgdGhlIGxlZnQgYm91bmRhcnkKKyAgICAgICAgb2YgdGhlIGJveCBhbmQgd2UgYXJlIGxvb2tp
bmcgZm9yIHRoZSB3b3JkIGJvdW5kYXJ5IGluIGxlZnQgYW5kIAorICAgICAgICBwcmV2aW91cyBi
b3ggaXMgYSBMVFIgYm94LgorICAgICAgICAzLiBGb3IgYSBMVFIgb3IgUlRMIGJveCBpbiBhIFJU
TCBibG9jaywgd2hlbiB0aGUgY2FyZXQgaXMgYXQgdGhlIHJpZ2h0IAorICAgICAgICBib3VuZGFy
eSBvZiB0aGUgYm94IGFuZCB3ZSBhcmUgbG9va2luZyBmb3IgdGhlIHdvcmQgYm91bmRhcnkgaW4g
cmlnaHQgYW5kIG5leHQgYm94IGlzIFJUTCBib3guCisKKyAgICAgICAgQW4gZXhwZXJpbWVudGFs
IGdyYW51bGFyaXR5IGlzIGludHJvZHVjZWQsIGFzIGEgc2lkZSBlZmZlY3QsIGZ1bmN0aW9ucyBo
YXZpbmcgc3dpdGNoIHN0YXRlbWVudHMKKyAgICAgICAgdG8gaGFuZGxlIHRob3NlIGdyYW51bGFy
aXRpZXMgaGF2ZSB0byBhZGQgbW9yZSBvbmUgY2FzZSB0byBoYW5kbGUgdGhpcyBuZXcgZ3JhbnVs
YXJpdHkuCisgICAgICAgIFRoZSBleHBlcmltZW50YWwgZ3JhbnVsYXJpdHkgaXMgZXhwb3NlZCB0
aG91Z2ggSlMgYnkgJy13ZWJraXQtdmlzdWFsLXdvcmQiLgorCisgICAgICAgIFRlc3Q6IGVkaXRp
bmcvc2VsZWN0aW9uL21vdmUtYnktd29yZC12aXN1YWxseS5odG1sCisKKyAgICAgICAgKiBlZGl0
aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9u
Q29udHJvbGxlcjo6bW9kaWZ5RXh0ZW5kaW5nUmlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6U2Vs
ZWN0aW9uQ29udHJvbGxlcjo6bW9kaWZ5RXh0ZW5kaW5nRm9yd2FyZCk6CisgICAgICAgIChXZWJD
b3JlOjpTZWxlY3Rpb25Db250cm9sbGVyOjptb2RpZnlNb3ZpbmdSaWdodCk6CisgICAgICAgIChX
ZWJDb3JlOjpTZWxlY3Rpb25Db250cm9sbGVyOjptb2RpZnlNb3ZpbmdGb3J3YXJkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vZGlmeUV4dGVuZGluZ0xlZnQpOgor
ICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kaWZ5RXh0ZW5kaW5nQmFj
a3dhcmQpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kaWZ5TW92
aW5nTGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25Db250cm9sbGVyOjptb2RpZnlN
b3ZpbmdCYWNrd2FyZCk6CisgICAgICAgICogZWRpdGluZy9UZXh0R3JhbnVsYXJpdHkuaDoKKyAg
ICAgICAgKiBlZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VmlzaWJsZVNlbGVjdGlvbjo6c2V0U3RhcnRBbmRFbmRGcm9tQmFzZUFuZEV4dGVudFJlc3BlY3Rp
bmdHcmFudWxhcml0eSk6CisgICAgICAgICogZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnByZXZpb3VzV29yZEJyZWFrSW5Cb3hJbnNpZGVCbG9ja1dpdGhTYW1l
RGlyZWN0aW9uYWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6d29yZEJvdW5kYXJ5SW5Cb3gpOgor
ICAgICAgICAoV2ViQ29yZTo6d29yZEJvdW5kYXJ5SW5BZGphY2VudEJveGVzKToKKyAgICAgICAg
KFdlYkNvcmU6OmxlZnRXb3JkQm91bmRhcnkpOgorICAgICAgICAoV2ViQ29yZTo6cmlnaHRXb3Jk
Qm91bmRhcnkpOgorICAgICAgICAoV2ViQ29yZTo6bGVmdFdvcmRQb3NpdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpyaWdodFdvcmRQb3NpdGlvbik6CisgICAgICAgICogZWRpdGluZy92aXNpYmxl
X3VuaXRzLmg6CisgICAgICAgICogcGFnZS9ET01TZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RE9NU2VsZWN0aW9uOjptb2RpZnkpOgorCiAyMDExLTAzLTMwICBTYW0gV2VpbmlnICA8
c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQnJhZHkgRWlkc29uLgpJbmRl
eDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCShy
ZXZpc2lvbiA4MjQ5MikKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJv
bGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0Nyw2ICs0NDcsOSBAQCBWaXNpYmxlUG9zaXRp
b24gU2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kCiAgICAgY2FzZSBEb2N1bWVudEJvdW5kYXJ5Ogog
ICAgICAgICAvLyBGSVhNRTogaW1wbGVtZW50IGFsbCBvZiB0aGUgYWJvdmU/CiAgICAgICAgIHBv
cyA9IG1vZGlmeUV4dGVuZGluZ0ZvcndhcmQoZ3JhbnVsYXJpdHkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFdlYktpdFZpc3VhbFdvcmRHcmFudWxhcml0eToKKyAgICAgICAgYnJlYWs7CiAg
ICAgfQogICAgIHJldHVybiBwb3M7CiB9CkBAIC00ODYsNiArNDg5LDggQEAgVmlzaWJsZVBvc2l0
aW9uIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vZAogICAgICAgICBlbHNlCiAgICAgICAgICAgICBw
b3MgPSBlbmRPZkRvY3VtZW50KHBvcyk7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgV2ViS2l0
VmlzdWFsV29yZEdyYW51bGFyaXR5OgorICAgICAgICBicmVhazsKICAgICB9CiAgICAgCiAgICAg
cmV0dXJuIHBvczsKQEAgLTUxNyw2ICs1MjIsOSBAQCBWaXNpYmxlUG9zaXRpb24gU2VsZWN0aW9u
Q29udHJvbGxlcjo6bW9kCiAgICAgY2FzZSBMaW5lQm91bmRhcnk6CiAgICAgICAgIHBvcyA9IHJp
Z2h0Qm91bmRhcnlPZkxpbmUoc3RhcnRGb3JQbGF0Zm9ybSgpLCBkaXJlY3Rpb25PZkVuY2xvc2lu
Z0Jsb2NrKCkpOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIFdlYktpdFZpc3VhbFdvcmRHcmFu
dWxhcml0eToKKyAgICAgICAgcG9zID0gcmlnaHRXb3JkUG9zaXRpb24oVmlzaWJsZVBvc2l0aW9u
KG1fc2VsZWN0aW9uLmV4dGVudCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKSk7CisgICAgICAg
IGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gcG9zOwogfQpAQCAtNTY1LDYgKzU3Myw4IEBAIFZp
c2libGVQb3NpdGlvbiBTZWxlY3Rpb25Db250cm9sbGVyOjptb2QKICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgcG9zID0gZW5kT2ZEb2N1bWVudChwb3MpOwogICAgICAgICBicmVhazsKKyAgICBj
YXNlIFdlYktpdFZpc3VhbFdvcmRHcmFudWxhcml0eToKKyAgICAgICAgYnJlYWs7CiAgICAgfQog
ICAgIHJldHVybiBwb3M7CiB9CkBAIC02MDQsNiArNjE0LDkgQEAgVmlzaWJsZVBvc2l0aW9uIFNl
bGVjdGlvbkNvbnRyb2xsZXI6Om1vZAogICAgIGNhc2UgUGFyYWdyYXBoQm91bmRhcnk6CiAgICAg
Y2FzZSBEb2N1bWVudEJvdW5kYXJ5OgogICAgICAgICBwb3MgPSBtb2RpZnlFeHRlbmRpbmdCYWNr
d2FyZChncmFudWxhcml0eSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV2ViS2l0VmlzdWFs
V29yZEdyYW51bGFyaXR5OgorICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIHBvczsK
IH0KQEAgLTY0OCw2ICs2NjEsOCBAQCBWaXNpYmxlUG9zaXRpb24gU2VsZWN0aW9uQ29udHJvbGxl
cjo6bW9kCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHBvcyA9IHN0YXJ0T2ZEb2N1bWVudChw
b3MpOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIFdlYktpdFZpc3VhbFdvcmRHcmFudWxhcml0
eToKKyAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBwb3M7CiB9CkBAIC02NjYsNiAr
NjgxLDggQEAgVmlzaWJsZVBvc2l0aW9uIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vZAogICAgICAg
ICAgICAgcG9zID0gVmlzaWJsZVBvc2l0aW9uKG1fc2VsZWN0aW9uLmV4dGVudCgpLCBtX3NlbGVj
dGlvbi5hZmZpbml0eSgpKS5sZWZ0KHRydWUpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFdv
cmRHcmFudWxhcml0eToKKyAgICAgICAgcG9zID0gbGVmdFdvcmRQb3NpdGlvbihWaXNpYmxlUG9z
aXRpb24obV9zZWxlY3Rpb24uZXh0ZW50KCksIG1fc2VsZWN0aW9uLmFmZmluaXR5KCkpKTsKKyAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBTZW50ZW5jZUdyYW51bGFyaXR5OgogICAgIGNhc2UgTGlu
ZUdyYW51bGFyaXR5OgogICAgIGNhc2UgUGFyYWdyYXBoR3JhbnVsYXJpdHk6CkBAIC02NzgsNiAr
Njk1LDkgQEAgVmlzaWJsZVBvc2l0aW9uIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vZAogICAgIGNh
c2UgTGluZUJvdW5kYXJ5OgogICAgICAgICBwb3MgPSBsZWZ0Qm91bmRhcnlPZkxpbmUoc3RhcnRG
b3JQbGF0Zm9ybSgpLCBkaXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2NrKCkpOwogICAgICAgICBicmVh
azsKKyAgICBjYXNlIFdlYktpdFZpc3VhbFdvcmRHcmFudWxhcml0eToKKyAgICAgICAgcG9zID0g
bGVmdFdvcmRQb3NpdGlvbihWaXNpYmxlUG9zaXRpb24obV9zZWxlY3Rpb24uZXh0ZW50KCksIG1f
c2VsZWN0aW9uLmFmZmluaXR5KCkpKTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVy
biBwb3M7CiB9CkBAIC03MjAsNiArNzQwLDggQEAgVmlzaWJsZVBvc2l0aW9uIFNlbGVjdGlvbkNv
bnRyb2xsZXI6Om1vZAogICAgICAgICBlbHNlCiAgICAgICAgICAgICBwb3MgPSBzdGFydE9mRG9j
dW1lbnQocG9zKTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXZWJLaXRWaXN1YWxXb3JkR3Jh
bnVsYXJpdHk6CisgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gcG9zOwogfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0R3JhbnVsYXJpdHkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRHcmFudWxhcml0eS5oCShyZXZpc2lvbiA4MjQ5
MikKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEdyYW51bGFyaXR5LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM5LDcgKzM5LDEwIEBAIGVudW0gVGV4dEdyYW51bGFyaXR5IHsKICAgICBTZW50
ZW5jZUJvdW5kYXJ5LAogICAgIExpbmVCb3VuZGFyeSwKICAgICBQYXJhZ3JhcGhCb3VuZGFyeSwK
LSAgICBEb2N1bWVudEJvdW5kYXJ5CisgICAgRG9jdW1lbnRCb3VuZGFyeSwKKyAgICAvLyBGSVhN
RTogdGhpcyBpcyBhZGRlZCB0ZW1wb3JhcmlseSBmb3IgZXhwZXJpbWVudCB3aXRoIHZpc3VhbGx5
IG1vdmUKKyAgICAvLyBjYXJldCBieSB3b3JkR3JhbnVsYXJpdHkuIE9uY2UgYWxsIHBhdGNoZXMg
YXJlIGxhbmRlZCwgaXQgc2hvdWxkIGJlIHJlbW92ZWQuCisgICAgV2ViS2l0VmlzdWFsV29yZEdy
YW51bGFyaXR5CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVT
ZWxlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJs
ZVNlbGVjdGlvbi5jcHAJKHJldmlzaW9uIDgyNDkyKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9WaXNpYmxlU2VsZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgwLDYgKzM4MCw4IEBA
IHZvaWQgVmlzaWJsZVNlbGVjdGlvbjo6c2V0U3RhcnRBbmRFbmRGcm8KICAgICAgICAgICAgIG1f
c3RhcnQgPSBzdGFydE9mU2VudGVuY2UoVmlzaWJsZVBvc2l0aW9uKG1fc3RhcnQsIG1fYWZmaW5p
dHkpKS5kZWVwRXF1aXZhbGVudCgpOwogICAgICAgICAgICAgbV9lbmQgPSBlbmRPZlNlbnRlbmNl
KFZpc2libGVQb3NpdGlvbihtX2VuZCwgbV9hZmZpbml0eSkpLmRlZXBFcXVpdmFsZW50KCk7CiAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXZWJLaXRWaXN1YWxXb3JkR3JhbnVsYXJp
dHk6CisgICAgICAgICAgICBicmVhazsKICAgICB9CiAgICAgCiAgICAgLy8gTWFrZSBzdXJlIHdl
IGRvIG5vdCBoYXZlIGEgZGFuZ2xpbmcgc3RhcnQgb3IgZW5kLgpJbmRleDogU291cmNlL1dlYkNv
cmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCShyZXZpc2lvbiA4MjQ5MikKKysrIFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYg
KzM3LDcgQEAKICNpbmNsdWRlICJUZXh0QnJlYWtJdGVyYXRvci5oIgogI2luY2x1ZGUgIlRleHRJ
dGVyYXRvci5oIgogI2luY2x1ZGUgIlZpc2libGVQb3NpdGlvbi5oIgorI2luY2x1ZGUgIlZpc2li
bGVTZWxlY3Rpb24uaCIKICNpbmNsdWRlICJodG1sZWRpdGluZy5oIgogI2luY2x1ZGUgPHd0Zi91
bmljb2RlL1VuaWNvZGUuaD4KIApAQCAtMTE0Niw0ICsxMTQ3LDEzMyBAQCBWaXNpYmxlUG9zaXRp
b24gcmlnaHRCb3VuZGFyeU9mTGluZShjb25zCiAgICAgcmV0dXJuIGRpcmVjdGlvbiA9PSBMVFIg
PyBsb2dpY2FsRW5kT2ZMaW5lKGMpIDogbG9naWNhbFN0YXJ0T2ZMaW5lKGMpOwogfQogCitzdGF0
aWMgY29uc3QgaW50IGludmFsaWRPZmZzZXQgPSAtMTsKKyAgICAKK3N0YXRpYyBWaXNpYmxlUG9z
aXRpb24gcHJldmlvdXNXb3JkQnJlYWtJbkJveEluc2lkZUJsb2NrV2l0aFNhbWVEaXJlY3Rpb25h
bGl0eShjb25zdCBJbmxpbmVCb3gqIGJveCwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwcmV2aW91
c1dvcmRCcmVhaywgaW50JiBvZmZzZXRPZldvcmRCcmVhaykKK3sKKyAgICBib29sIGhhc1NlZW5X
b3JkQnJlYWtJblRoaXNCb3ggPSBwcmV2aW91c1dvcmRCcmVhay5pc05vdE51bGwoKTsKKyAgICAv
LyBXZSBuZWVkIHRvIHRha2UgY2FyZSBvZiB0aGUgd29yZCBicmVhayBpcyBhdCB0aGUgY29ycmVj
dCBwbGFjZSAoYmVmb3JlIHNwYWNlIG9yIGFmdGVyIHNwYWNlKS4KKyAgICAvLyBGb2xsb3cgRmly
ZWZveCdzIGNvbnZlbnRpb24gaW4gV2luZG93cywgCisgICAgLy8gSW4gTFRSIGJsb2NrLCB3b3Jk
IGJyZWFrIHZpc3VhbGx5IG1vdmVzIGN1cnNvciB0byB0aGUgbGVmdCBib3VuZGFyeSBvZiB3b3Jk
cywKKyAgICAvLyBJbiBSVEwgYmxvY2ssIHdvcmQgYnJlYWsgdmlzdWFsbHkgbW92ZXMgY3Vyc29y
IHRvIHRoZSByaWdodCBib3VuZGFyeSBvZiB3b3Jkcy4KKyAgICAvLworICAgIC8vIFNpbmNlIHdl
IGFyZSB1c2luZyBwcmV2aW91c1dvcmRQb3NpdGlvbigpIGFuZCBuZXh0V29yZFBvc2l0aW9uKCkg
dG8gZ2V0IHRoZSB3b3JkIGJvdW5kYXJ5LgorICAgIC8vIEZvciBMVFIgdGV4dCwgcHJldmlvdXNX
b3JkUG9zaXRpb24oKSByZXR1cm5zIHRoZSB3b3JkIGJyZWFrIGF0IHRoZSBsZWZ0IGJvdW5kYXJ5
IG9mIGEgd29yZCwgCisgICAgLy8gICAgICAgICAgICAgICBuZXh0V29yZFBvc2l0aW9uKCkgcmV0
dXJucyB0aGUgd29yZCBicmVhayBhdCB0aGUgcmlnaHQgYm91bmRhcnkgb2YgYSB3b3JkLiAKKyAg
ICAvLyBGb3IgUlRMIHRleHQsIHByZXZpb3VzV29yZFBvc2l0aW9uKCkgcmV0dXJucyB0aGUgd29y
ZCBicmVhayBhdCB0aGUgcmlnaHQgYm91bmRhcnkgb2YgYSB3b3JkLAorICAgIC8vICAgICAgICAg
ICAgICAgbmV4dFdvcmRQb3NpdGlvbigpIHJldHVybnMgdGhlIHdvcmQgYnJlYWsgYXQgdGhlIGxl
ZnQgYm91bmRhcnkgb2YgYSB3b3JkLgorICAgIC8vIAorICAgIC8vIFNvLCB3aGVuIHRoZSBib3gn
cyBkaXJlY3Rpb25hbGl0eSBpcyB0aGUgc2FtZSBhcyB0aGUgYmxvY2sncyBkaXJlY3Rpb25hbGl0
eSwKKyAgICAvLyB3ZSBzaG91bGQgdXNlIHByZXZpb3VzV29yZFBvc2l0aW9uKCkgZm9yIExUUiB0
ZXh0IG9yIFJUTCB0ZXh0LgorICAgIC8vIElmIGNvbnRpbm91c2x5IGNvbGxlY3Rpbmcgd29yZCBi
cmVha3MsIGZvciBMVFIgYm94LCB0aGUgd29yZCBicmVha3MgYXJlIGNvbGxlY3RlZCBmcm9tIHJp
Z2h0IHRvIGxlZnQuCisgICAgLy8gZm9yIFJUTCBib3gsIHdvcmQgYnJlYWtzIGFyZSBjb2xsZWN0
ZWQgZnJvbSBsZWZ0IHRvIHJpZ2h0LiAKKyAgICBWaXNpYmxlUG9zaXRpb24gd29yZEJyZWFrID0g
aGFzU2VlbldvcmRCcmVha0luVGhpc0JveCA/IHByZXZpb3VzV29yZEJyZWFrIDogUG9zaXRpb24o
Ym94LT5yZW5kZXJlcigpLT5ub2RlKCksIGJveC0+Y2FyZXRNYXhPZmZzZXQoKSwgUG9zaXRpb246
OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcik7CisKKyAgICAvLyBGSVhNRTogaGFuZGxlIG11bHRp
LXNwYWNlcy4gCisgICAgLy8gSW4gdGhlIGNhc2Ugb2YgbXVsdGktc3BhY2VzLCB3b3JkIGJyZWFr
IGFtb25nIHRoZSBjb2xsYXBzZWQgc3BhY2VzIG1pZ2h0IG5vdCBhZGRlZC4KKyAgICAvLyBGb3Ig
ZXhhbXBsZSwgIjxkaXY+YWJjICAgIGRlZiBoaWogICAgb3BxIHJzdDwvZGl2PiIsIG5vIHdvcmQg
YnJlYWsgaXMgYWRkZWQgYmV0d2VlbiAiaGlqIiBhbmQgIm9wcSIuCisgICAgLy8gVGhlIHJlYXNv
biBpcyB3aGVuIGN1cnNvciBpcyBpbW1lZGlhdGVseSB0byB0aGUgcmlnaHQgb2YgIm9wcSIsIGl0
cyBwcmV2aW91cyB3b3JkIGJvdW5kYXJ5J3Mgb2Zmc2V0IHJldHVybmVkIGZyb20gcHJldmlvdXNX
b3JkUG9zaXRpb24oKSBpcyAxNSwKKyAgICAvLyB3aGljaCBpcyBpbW1lZGlhdGVseSB0byB0aGUg
cmlnaHQgb2YgImhpaiAiLCBhbmQgd2hpY2ggaXMgbm90IGluIHRoZSBzYW1lIGJveCBhcyAib3Bx
IiwKKyAgICAvLyBzbywgaXQgd29udCBiZSBhZGRlZCBhcyBhIHdvcmQgYnJlYWsgb2YgYm94ICJv
cHEgcnN0Ii4gCisgICAgLy8gV2UgY291bGQgYWx3YXlzIGFkZCB0aGUgcmlnaHRtb3N0KGZvciBM
VFIgYm94KS9sZWZ0bW9zdChmb3IgUlRMIGJveCkgYm91bmRhcnkKKyAgICAvLyBhcyB3b3JkYnJl
YWsgd2hlbiBpdHMgaW5saW5lQm94IGlzIHRoZSBzYW1lIGFzICdib3gnLiBDaGVja2luZyB0aGF0
IHRoZSByaWdodG1vc3Qgb3IgbGVmdG1vc3QgYm91bmRhcnkncyBpbmxpbmVCb3ggZ2V0IGZyb20K
KyAgICAvLyBnZXRJbmxpbmVCb3hBbmRPZmZzZXQgaXMgdGhlIHNhbWUgYXMgJ2JveCcgaXMgaW1w
b3J0YW50IGFzIHRvIG5vdCBicmVhayBjYXNlcyBzdWNoIGFzIDxkaXY+aGU8Yj5sbG88L2I+IHdv
cmxkPC9kaXY+LCBpbiB3aGljaAorICAgIC8vIHdoZW4gY3Vyc29yIGlzIGltbWVkaWF0ZWx5IHRv
IHRoZSByaWdodCBvZiAnaGUnLCB0aGUgcmlnaHRtb3N0IGJvdW5kYXJ5J3MgaW5saW5lQm94IGdl
dCBmcm9tIGdldElubGluZUJveEFuZE9mZnNldCBpcworICAgIC8vIGJveCAnbGxvJywgd2hpY2gg
aXMgZGlmZmVyZW50IGZyb20gYm94ICdoZScsIGFuZCB0aGlzIHJpZ2h0bW9zdCBib3VuZGFyeSB3
b250IGJlIGFkZGVkIGFzIGEgd29yZCBicmVhay4KKyAgICAvLyBCdXQgaXQgc3RpbGwgbWlnaHQg
YnJlYWsgc29tZSBvdGhlciBjYXNlcyBzaW5jZSBhIGJvdW5hcnkgb2YgYSBib3ggZG9lcyBub3Qg
bmVjZXNzYXJpbHkgbWVhbnMgYSB3b3JkIGJyZWFrLgorICAgIC8vIE9yIHdlIG5lZWQgdG8gcHJv
dmlkZSBhIHdheSBub3QgdG8gY2Fub25pY2FsaXplKHVwc3RyZWFtKSBWaXNpYmxlUG9zaXRpb24g
aW4gaXRzIGNvbnN0cnVjdG9yLCAKKyAgICAvLyBzbyBwcmV2aW91c1dvcmRQb3NpdGlvbigpIG9m
ICJvcHEiIGNvdWxkIHJldHVybiBvZmZzZXQgMTgsIHdoaWNoIGlzIGltbWVkaWF0ZWx5IHRvIHRo
ZSBsZWZ0IG9mICJvcHEiLCBpbnN0ZWFkLgorCisgICAgd29yZEJyZWFrID0gcHJldmlvdXNXb3Jk
UG9zaXRpb24od29yZEJyZWFrKTsKKyAgICBpZiAocHJldmlvdXNXb3JkQnJlYWsgIT0gd29yZEJy
ZWFrKSB7CisgICAgICAgIElubGluZUJveCogYm94Q29udGFpbmluZ1ByZXZpb3VzV29yZEJyZWFr
OworICAgICAgICBWaXNpYmxlUG9zaXRpb24gd29yZEJyZWFrOworICAgICAgICB3b3JkQnJlYWsu
Z2V0SW5saW5lQm94QW5kT2Zmc2V0KGJveENvbnRhaW5pbmdQcmV2aW91c1dvcmRCcmVhaywgb2Zm
c2V0T2ZXb3JkQnJlYWspOworICAgICAgICBpZiAoYm94Q29udGFpbmluZ1ByZXZpb3VzV29yZEJy
ZWFrID09IGJveCkKKyAgICAgICAgICAgIHJldHVybiB3b3JkQnJlYWs7CisgICAgfQorICAgIHJl
dHVybiBWaXNpYmxlUG9zaXRpb24oKTsKK30KKworc3RhdGljIFZpc2libGVQb3NpdGlvbiBmaW5k
V29yZEJvdW5kYXJ5SW5Cb3hJbkJsb2NrRGlyZWN0aW9uKGNvbnN0IElubGluZUJveCogYm94LCBp
bnQgb2Zmc2V0LCBUZXh0RGlyZWN0aW9uIGJsb2NrRGlyZWN0aW9uKQoreworICAgIGludCBvZmZz
ZXRPZldvcmRCcmVhayA9IDA7CisgICAgVmlzaWJsZVBvc2l0aW9uIHdvcmRCcmVhazsKKyAgICB3
aGlsZSAodHJ1ZSkgeworICAgICAgICBpZiAoYm94LT5kaXJlY3Rpb24oKSA9PSBibG9ja0RpcmVj
dGlvbikKKyAgICAgICAgICAgIHdvcmRCcmVhayA9IHByZXZpb3VzV29yZEJyZWFrSW5Cb3hJbnNp
ZGVCbG9ja1dpdGhTYW1lRGlyZWN0aW9uYWxpdHkoYm94LCB3b3JkQnJlYWssIG9mZnNldE9mV29y
ZEJyZWFrKTsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGUgJ2Vsc2UnIGNhc2Ugd2hl
biB0aGUgYm94IGRpcmVjdGlvbiBpcyBub3QgZXF1YWwgdG8gdGhlIGJsb2NrIGRpcmVjdGlvbi4K
KyAgICAgICAgaWYgKHdvcmRCcmVhay5pc051bGwoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBpZiAob2Zmc2V0ID09IGludmFsaWRPZmZzZXQgfHwgb2Zmc2V0T2ZXb3JkQnJlYWsgIT0g
b2Zmc2V0KQorICAgICAgICAgICAgcmV0dXJuIHdvcmRCcmVhazsKKyAgICB9ICAgICAgICAKKyAg
ICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7Cit9CisKK3N0YXRpYyBWaXNpYmxlUG9zaXRpb24g
bGVmdFdvcmRCb3VuZGFyeShjb25zdCBJbmxpbmVCb3gqIGJveCwgaW50IG9mZnNldCwgVGV4dERp
cmVjdGlvbiBibG9ja0RpcmVjdGlvbikKK3sKKyAgICBWaXNpYmxlUG9zaXRpb24gd29yZEJyZWFr
OworICAgIGZvciAgKGNvbnN0IElubGluZUJveCogYWRqYWNlbnRCb3ggPSBib3g7IGFkamFjZW50
Qm94OyBhZGphY2VudEJveCA9IGFkamFjZW50Qm94LT5wcmV2TGVhZkNoaWxkKCkpIHsKKyAgICAg
ICAgaWYgKGJsb2NrRGlyZWN0aW9uID09IExUUikgCisgICAgICAgICAgICB3b3JkQnJlYWsgPSBm
aW5kV29yZEJvdW5kYXJ5SW5Cb3hJbkJsb2NrRGlyZWN0aW9uKGFkamFjZW50Qm94LCBhZGphY2Vu
dEJveCA9PSBib3ggPyBvZmZzZXQgOiBpbnZhbGlkT2Zmc2V0LCBibG9ja0RpcmVjdGlvbik7Cisg
ICAgICAgIC8vIEZJWE1FOiAiZWxzZSIgbm90IGltcGxlbWVudGVkIHlldC4KKyAgICAgICAgaWYg
KHdvcmRCcmVhay5pc05vdE51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiB3b3JkQnJlYWs7Cisg
ICAgfQorICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKK30KKyAKK3N0YXRpYyBWaXNpYmxl
UG9zaXRpb24gcmlnaHRXb3JkQm91bmRhcnkoY29uc3QgSW5saW5lQm94KiBib3gsIGludCBvZmZz
ZXQsIFRleHREaXJlY3Rpb24gYmxvY2tEaXJlY3Rpb24pCit7CisgICAgCisgICAgVmlzaWJsZVBv
c2l0aW9uIHdvcmRCcmVhazsKKyAgICBmb3IgKGNvbnN0IElubGluZUJveCogYWRqYWNlbnRCb3gg
PSBib3g7IGFkamFjZW50Qm94OyBhZGphY2VudEJveCA9IGFkamFjZW50Qm94LT5uZXh0TGVhZkNo
aWxkKCkpIHsKKyAgICAgICAgaWYgKGJsb2NrRGlyZWN0aW9uID09IFJUTCkKKyAgICAgICAgICAg
IHdvcmRCcmVhayA9IGZpbmRXb3JkQm91bmRhcnlJbkJveEluQmxvY2tEaXJlY3Rpb24oYWRqYWNl
bnRCb3gsIGFkamFjZW50Qm94ID09IGJveCA/IG9mZnNldCA6IGludmFsaWRPZmZzZXQsIGJsb2Nr
RGlyZWN0aW9uKTsKKyAgICAgICAgLy8gRklYTUU6ICJlbHNlIiBub3QgaW1wbGVtZW50ZWQgeWV0
LgorICAgICAgICBpZiAoIXdvcmRCcmVhay5pc051bGwoKSkKKyAgICAgICAgICAgIHJldHVybiB3
b3JkQnJlYWs7CisgICAgfQorICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKK30KKworVmlz
aWJsZVBvc2l0aW9uIGxlZnRXb3JkUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNp
YmxlUG9zaXRpb24pCit7CisgICAgLy8gRm9sbG93IEZpcmVmb3gncyBjb252ZW50aW9uIGluIFdp
bmRvd3MsIAorICAgIC8vIEluIExUUiBibG9jaywgd29yZCBicmVhayB2aXN1YWxseSBtb3ZlcyBj
dXJzb3IgdG8gdGhlIGxlZnQgYm91bmRhcnkgb2Ygd29yZHMsCisgICAgLy8gSW4gUlRMIGJsb2Nr
LCB3b3JkIGJyZWFrIHZpc3VhbGx5IG1vdmVzIGN1cnNvciB0byB0aGUgcmlnaHQgYm91bmRhcnkg
b2Ygd29yZHMuCisgICAgSW5saW5lQm94KiBib3g7CisgICAgaW50IG9mZnNldDsKKyAgICB2aXNp
YmxlUG9zaXRpb24uZ2V0SW5saW5lQm94QW5kT2Zmc2V0KGJveCwgb2Zmc2V0KTsKKyAgICBUZXh0
RGlyZWN0aW9uIGJsb2NrRGlyZWN0aW9uID0gZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jayh2aXNp
YmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKSk7CisgICAgCisgICAgLy8gRklYTUU6IElmIHRo
ZSBib3gncyBkaXJlY3Rpb25hbGl0eSBpcyB0aGUgc2FtZSBhcyB0aGF0IG9mIHRoZSBlbmNsb3Np
bmcgYmxvY2ssIHdoZW4gdGhlIG9mZnNldCBpcyBhdCB0aGUgYm94IGJvdW5kYXJ5CisgICAgLy8g
YW5kIHRoZSBkaXJlY3Rpb24gaXMgdG93YXJkcyBpbnNpZGUgdGhlIGJveCwgZG8gSSBzdGlsbCBu
ZWVkIHRvIG1ha2UgaXQgYSBzcGVjaWFsIGNhc2U/IEZvciBleGFtcGxlLCBhIExUUiBib3ggaW5z
aWRlIGEgTFRSIGJsb2NrLAorICAgIC8vIHdoZW4gb2Zmc2V0IGlzIGF0IGJveCdzIGNhcmV0TWlu
T2Zmc2V0IGFuZCB0aGUgZGlyZWN0aW9uIGlzIERpcmVjdGlvblJpZ2h0LCBzaG91bGQgaXQgYmUg
dGFrZW4gY2FyZSBhcyBhIGdlbmVyYWwgY2FzZT8KKyAgICBpZiAob2Zmc2V0ID09IGJveC0+Y2Fy
ZXRMZWZ0bW9zdE9mZnNldCgpKQorICAgICAgICByZXR1cm4gbGVmdFdvcmRCb3VuZGFyeShib3gt
PnByZXZMZWFmQ2hpbGQoKSwgaW52YWxpZE9mZnNldCwgYmxvY2tEaXJlY3Rpb24pOworICAgIGlm
IChvZmZzZXQgPT0gYm94LT5jYXJldFJpZ2h0bW9zdE9mZnNldCgpKQorICAgICAgICByZXR1cm4g
bGVmdFdvcmRCb3VuZGFyeShib3gsIG9mZnNldCwgYmxvY2tEaXJlY3Rpb24pOworICAgIAorICAg
IC8vIEZJWE1FOiBOb3QgaW1wbGVtZW50ZWQuCisgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigp
OworfQorCitWaXNpYmxlUG9zaXRpb24gcmlnaHRXb3JkUG9zaXRpb24oY29uc3QgVmlzaWJsZVBv
c2l0aW9uJiB2aXNpYmxlUG9zaXRpb24pCit7CisgICAgSW5saW5lQm94KiBib3g7CisgICAgaW50
IG9mZnNldDsKKyAgICB2aXNpYmxlUG9zaXRpb24uZ2V0SW5saW5lQm94QW5kT2Zmc2V0KGJveCwg
b2Zmc2V0KTsKKyAgICBUZXh0RGlyZWN0aW9uIGJsb2NrRGlyZWN0aW9uID0gZGlyZWN0aW9uT2ZF
bmNsb3NpbmdCbG9jayh2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKSk7CisgICAgCisg
ICAgaWYgKG9mZnNldCA9PSBib3gtPmNhcmV0TGVmdG1vc3RPZmZzZXQoKSkKKyAgICAgICAgcmV0
dXJuIHJpZ2h0V29yZEJvdW5kYXJ5KGJveCwgb2Zmc2V0LCBibG9ja0RpcmVjdGlvbik7CisgICAg
aWYgKG9mZnNldCA9PSBib3gtPmNhcmV0UmlnaHRtb3N0T2Zmc2V0KCkpCisgICAgICAgIHJldHVy
biByaWdodFdvcmRCb3VuZGFyeShib3gtPm5leHRMZWFmQ2hpbGQoKSwgLTEsIGJsb2NrRGlyZWN0
aW9uKTsKKyAgICAKKyAgICAvLyBGSVhNRTogTm90IGltcGxlbWVudGVkLgorICAgIHJldHVybiBW
aXNpYmxlUG9zaXRpb24oKTsKK30KKwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy92
aXNpYmxlX3VuaXRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy92aXNp
YmxlX3VuaXRzLmgJKHJldmlzaW9uIDgyNDkyKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy92
aXNpYmxlX3VuaXRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDggQEAgVmlzaWJsZVBv
c2l0aW9uIHN0YXJ0T2ZXb3JkKGNvbnN0IFZpc2libAogVmlzaWJsZVBvc2l0aW9uIGVuZE9mV29y
ZChjb25zdCBWaXNpYmxlUG9zaXRpb24gJiwgRVdvcmRTaWRlID0gUmlnaHRXb3JkSWZPbkJvdW5k
YXJ5KTsKIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c1dvcmRQb3NpdGlvbihjb25zdCBWaXNpYmxl
UG9zaXRpb24gJik7CiBWaXNpYmxlUG9zaXRpb24gbmV4dFdvcmRQb3NpdGlvbihjb25zdCBWaXNp
YmxlUG9zaXRpb24gJik7CitWaXNpYmxlUG9zaXRpb24gcmlnaHRXb3JkUG9zaXRpb24oY29uc3Qg
VmlzaWJsZVBvc2l0aW9uJik7CitWaXNpYmxlUG9zaXRpb24gbGVmdFdvcmRQb3NpdGlvbihjb25z
dCBWaXNpYmxlUG9zaXRpb24mKTsKIAogLy8gc2VudGVuY2VzCiBWaXNpYmxlUG9zaXRpb24gc3Rh
cnRPZlNlbnRlbmNlKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
YWdlL0RPTVNlbGVjdGlvbi5jcHAJKHJldmlzaW9uIDgyNDkyKQorKysgU291cmNlL1dlYkNvcmUv
cGFnZS9ET01TZWxlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzIsNiArMzMyLDggQEAg
dm9pZCBET01TZWxlY3Rpb246Om1vZGlmeShjb25zdCBTdHJpbmcmIAogICAgICAgICBncmFudWxh
cml0eSA9IFBhcmFncmFwaEJvdW5kYXJ5OwogICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNl
KGdyYW51bGFyaXR5U3RyaW5nLCAiZG9jdW1lbnRib3VuZGFyeSIpKQogICAgICAgICBncmFudWxh
cml0eSA9IERvY3VtZW50Qm91bmRhcnk7CisgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2Uo
Z3JhbnVsYXJpdHlTdHJpbmcsICItd2Via2l0LXZpc3VhbC13b3JkIikpCisgICAgICAgIGdyYW51
bGFyaXR5ID0gV2ViS2l0VmlzdWFsV29yZEdyYW51bGFyaXR5OwogICAgIGVsc2UKICAgICAgICAg
cmV0dXJuOwogCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA4MjQ5MikKKysrIExheW91dFRlc3RzL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDExLTAzLTMwICBYaWFvbWVp
IEppICA8eGppQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBFeHBlcmltZW50IHdpdGggbW92aW5nIGNhcmV0IGJ5IHdvcmQgaW4g
dmlzdWFsIG9yZGVyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NTczMzYKKworICAgICAgICAqIGVkaXRpbmcvc2VsZWN0aW9uL21vdmUtYnktd29yZC12
aXN1YWxseS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGVkaXRpbmcvc2VsZWN0aW9u
L21vdmUtYnktd29yZC12aXN1YWxseS5odG1sOiBBZGRlZC4KKwogMjAxMS0wMy0zMCAgTWloYWkg
UGFycGFyaXRhICA8bWloYWlwQGNocm9taXVtLm9yZz4KIAogICAgICAgICBQdXQgZXhwZWN0ZWQg
UE5HIGZvciBmYXN0L211bHRpY29sL21heC1oZWlnaHQtY29sdW1ucy1ibG9jay5odG1sIGluIHRo
ZQpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vbW92ZS1ieS13b3JkLXZpc3Vh
bGx5LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVj
dGlvbi9tb3ZlLWJ5LXdvcmQtdmlzdWFsbHktZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vbW92ZS1ieS13b3JkLXZpc3VhbGx5LWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MyBAQAorCis9PT09PT09PSBNb3ZlIEJ5
IFdvcmQgPT09PQorVGVzdCAxLCBMVFI6CitNb3ZlIHJpZ2h0IGJ5IG9uZSB3b3JkCisiYWJjIGRl
ZiBoaWogb3BxIHJzdCJbMCwgNCwgOCwgMTIsIDE2LCAxOV0gICAgRkFJTCBleHBlY3RlZDogWzQs
IDgsIDEyLCAxNiwgMTksIDE5XQorTW92ZSBsZWZ0IGJ5IG9uZSB3b3JkCisiYWJjIGRlZiBoaWog
b3BxIHJzdCJbMTYsIDE2LCAxMiwgOCwgNCwgMF0gICAgRkFJTCBleHBlY3RlZDogWzE2LCAxMiwg
OCwgNCwgMCwgMF0KK1Rlc3QgMiwgUlRMOgorTW92ZSBsZWZ0IGJ5IG9uZSB3b3JkCisiYWJjIGRl
ZiBoaWogb3BxIHJzdCJbMCwgMTUsIDExLCA3LCAzLCAxOV0gICAgRkFJTCBleHBlY3RlZDogWzE1
LCAxMSwgNywgMywgMTksIDE5XQorTW92ZSByaWdodCBieSBvbmUgd29yZAorImFiYyBkZWYgaGlq
IG9wcSByc3QiWzE5LCAzLCA3LCAxMSwgMTUsIDBdICAgIEZBSUwgZXhwZWN0ZWQ6IFszLCA3LCAx
MSwgMTUsIDAsIDBdCitUZXN0IDMsIExUUjoKK01vdmUgcmlnaHQgYnkgb25lIHdvcmQKKyJaWlog
UVFRIEJCQiBDQ0MgWFhYIlswLCAxNSwgMTEsIDcsIDMsIDE5XSAgICBGQUlMIGV4cGVjdGVkOiBb
MTUsIDExLCA3LCAzLCAxOSwgMTldCitNb3ZlIGxlZnQgYnkgb25lIHdvcmQKKyJaWlogUVFRIEJC
QiBDQ0MgWFhYIlsxOSwgMywgNywgMTEsIDE1LCAwXSAgICBGQUlMIGV4cGVjdGVkOiBbMywgNywg
MTEsIDE1LCAwLCAwXQorVGVzdCA0LCBSVEw6CitNb3ZlIGxlZnQgYnkgb25lIHdvcmQKKyJaWlog
UVFRIEJCQiBDQ0MgWFhYIlswLCA0LCA4LCAxMiwgMTYsIDE5XSAgICBGQUlMIGV4cGVjdGVkOiBb
NCwgOCwgMTIsIDE2LCAxOSwgMTldCitNb3ZlIHJpZ2h0IGJ5IG9uZSB3b3JkCisiWlpaIFFRUSBC
QkIgQ0NDIFhYWCJbMTYsIDE2LCAxMiwgOCwgNCwgMF0gICAgRkFJTCBleHBlY3RlZDogWzE2LCAx
MiwgOCwgNCwgMCwgMF0KK1Rlc3QgNSwgTFRSOgorTW92ZSByaWdodCBieSBvbmUgd29yZAorImFi
YyBkZWYgWlFCIFJJRyB1dncgeHl6IlswLCA0LCA4LCAxMSwgMTYsIDIwLCAyM10gICAgRkFJTCBl
eHBlY3RlZDogWzQsIDgsIDExLCAxNiwgMjAsIDIzLCAyM10KK01vdmUgbGVmdCBieSBvbmUgd29y
ZAorImFiYyBkZWYgWlFCIFJJRyB1dncgeHl6IlsyMCwgMjAsIDE2LCAxMSwgNCwgNCwgMF0gICAg
RkFJTCBleHBlY3RlZDogWzIwLCAxNiwgMTEsIDgsIDQsIDAsIDBdCitUZXN0IDYsIFJUTDoKK01v
dmUgbGVmdCBieSBvbmUgd29yZAorImFiYyBkZWYgWlFCIFJJRyB1dncgeHl6IlswLCAzLCA4LCAx
MiwgMTYsIDE5LCAyM10gICAgRkFJTCBleHBlY3RlZDogWzMsIDgsIDEyLCAxNiwgMTksIDIzLCAy
M10KK01vdmUgcmlnaHQgYnkgb25lIHdvcmQKKyJhYmMgZGVmIFpRQiBSSUcgdXZ3IHh5eiJbMTIs
IDE5LCAxMiwgMTIsIDgsIDMsIDBdICAgIEZBSUwgZXhwZWN0ZWQ6IFsxOSwgMTYsIDEyLCA4LCAz
LCAwLCAwXQorVGVzdCA3LCBMVFI6CitNb3ZlIHJpZ2h0IGJ5IG9uZSB3b3JkCisiWlFCIGFiYyBS
SUciWzAsIDQsIDgsIDExXSAgICBGQUlMIGV4cGVjdGVkOiBbNCwgOCwgMTEsIDExXQorTW92ZSBs
ZWZ0IGJ5IG9uZSB3b3JkCisiWlFCIGFiYyBSSUciWzQsIDQsIDQsIDBdICAgIEZBSUwgZXhwZWN0
ZWQ6IFs4LCA0LCAwLCAwXQorVGVzdCA4LCBSVEw6CitNb3ZlIGxlZnQgYnkgb25lIHdvcmQKKyJa
UUIgYWJjIFJJRyJbMCwgNCwgOCwgMTFdICAgIEZBSUwgZXhwZWN0ZWQ6IFs0LCA4LCAxMSwgMTFd
CitNb3ZlIHJpZ2h0IGJ5IG9uZSB3b3JkCisiWlFCIGFiYyBSSUciWzgsIDgsIDAsIDBdICAgIEZB
SUwgZXhwZWN0ZWQ6IFs4LCA0LCAwLCAwXQorCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL3Nl
bGVjdGlvbi9tb3ZlLWJ5LXdvcmQtdmlzdWFsbHkuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9tb3ZlLWJ5LXdvcmQtdmlzdWFsbHkuaHRtbAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL21vdmUtYnktd29yZC12aXN1
YWxseS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE5OCBAQAorPCFET0NUWVBFIEhUTUw+
Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50
PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiPgorPHN0eWxlPgorZGl2LnRlc3QgeworICAgIC13
ZWJraXQtdXNlci1tb2RpZnk6IHJlYWQtd3JpdGU7CisgICAgcGFkZGluZzogNHB4OworICAgIGJv
cmRlcjogMXB4IGRhc2hlZCBsaWdodGJsdWU7CisgICAgbWFyZ2luOiA0cHggNHB4IDRweCAyNHB4
OworICAgIG91dGxpbmU6IG5vbmU7CisgICAgZm9udC1mYW1pbHk6IEx1Y2lkYSBHcmFuZGU7Cisg
ICAgY291bnRlci1pbmNyZW1lbnQ6IHRlc3QtbnVtYmVyOworfQorZGl2LnRlc3Q6YmVmb3JlIHsg
Y29udGVudDogY291bnRlcih0ZXN0LW51bWJlcik7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDog
OHB4OyBmb250LXNpemU6IHgtc21hbGw7IHRleHQtYWxpZ246IHJpZ2h0OyB3aWR0aDogMjBweDsg
fQorZGl2LnRlc3Qgc3BhbiB7IGJhY2tncm91bmQtY29sb3I6ICNkZWY7IH0KK2Rpdi50ZXN0IGlt
ZyB7IHdpZHRoOiAxZW07IGhlaWdodDogMWVtOyBiYWNrZ3JvdW5kLWNvbG9yOiBsaWdodGdyZWVu
OyB9CitkaXYudGVzdCBpbWcgKyBpbWcgeyBiYWNrZ3JvdW5kLWNvbG9yOiBsaWdodGJsdWU7IH0K
K2Rpdi50ZXN0IGRpdiB7IGJvcmRlcjogMXB4IGRhc2hlZCBwaW5rOyBwYWRkaW5nOiAzcHg7IGhl
aWdodDogMmVtOyB9Cit0ZXN0X21vdmVfYnlfd29yZCB7ZGlzcGxheTogbm9uZTt9Cis8L3N0eWxl
PgorPHNjcmlwdD4KK3ZhciBtZXNzYWdlcyA9IFtdOworCitmdW5jdGlvbiBsb2cobWVzc2FnZSkK
K3sKKyAgICBtZXNzYWdlcy5wdXNoKG1lc3NhZ2UpOworfQorCitmdW5jdGlvbiBmbHVzaExvZygp
Cit7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUiKS5hcHBlbmRDaGlsZChk
b2N1bWVudC5jcmVhdGVUZXh0Tm9kZShtZXNzYWdlcy5qb2luKCIiKSkpOworfQorCitmdW5jdGlv
biBjYXJldENvb3JkaW5hdGVzKCkKK3sKKyAgICBpZiAoIXdpbmRvdy50ZXh0SW5wdXRDb250cm9s
bGVyKQorICAgICAgICByZXR1cm4geyB4OiAwLCB5IDowIH07CisgICAgdmFyIGNhcmV0UmVjdCA9
IHRleHRJbnB1dENvbnRyb2xsZXIuZmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2UodGV4dElucHV0
Q29udHJvbGxlci5zZWxlY3RlZFJhbmdlKClbMF0sIDApOworICAgIHJldHVybiB7IHg6IGNhcmV0
UmVjdFswXSwgeTogY2FyZXRSZWN0WzFdIH07Cit9CisKKworZnVuY3Rpb24gZm9sZChzdHJpbmcp
Cit7CisgICAgdmFyIHJlc3VsdCA9ICIiOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyaW5n
Lmxlbmd0aDsgKytpKSB7CisgICAgICAgIHZhciBjaGFyID0gc3RyaW5nLmNoYXJDb2RlQXQoaSk7
CisgICAgICAgIGlmIChjaGFyID49IDB4MDVkMCkKKyAgICAgICAgICAgIGNoYXIgLT0gMHgwNThm
OworICAgICAgICBlbHNlIGlmIChjaGFyID09IDEwKSB7CisgICAgICAgICAgICByZXN1bHQgKz0g
IlxcbiI7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICByZXN1bHQg
Kz0gU3RyaW5nLmZyb21DaGFyQ29kZShjaGFyKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworZnVuY3Rpb24gbG9nUG9zaXRpb25zKHBvc2l0aW9ucykKK3sKKyAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHBvc2l0aW9ucy5sZW5ndGg7ICsraSkgeworICAgICAgICBpZiAoaSkgeworICAg
ICAgICAgICAgaWYgKHBvc2l0aW9uc1tpXS5ub2RlICE9IHBvc2l0aW9uc1tpIC0gMV0ubm9kZSkK
KyAgICAgICAgICAgICAgICBsb2coIl0iKTsKKyAgICAgICAgICAgIGxvZygiLCAiKTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoIWkgfHwgcG9zaXRpb25zW2ldLm5vZGUgIT0gcG9zaXRpb25zW2kg
LSAxXS5ub2RlKQorICAgICAgICAgICAgbG9nKChwb3NpdGlvbnNbaV0ubm9kZSBpbnN0YW5jZW9m
IFRleHQgPyAnIicgKyBmb2xkKHBvc2l0aW9uc1tpXS5ub2RlLmRhdGEpICsgJyInIDogIjwiICsg
cG9zaXRpb25zW2ldLm5vZGUudGFnTmFtZSArICI+IikgKyAiWyIpOworICAgICAgICBsb2cocG9z
aXRpb25zW2ldLm9mZnNldCk7CisgICAgfQorICAgIGxvZygiXSIpOworfQorCit2YXIgd29yZEJy
ZWFrczsKKworZnVuY3Rpb24gdmFsaWRhdGVEYXRhKHBvc2l0aW9ucykKK3sKKyAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IHdvcmRCcmVha3MubGVuZ3RoIC0gMTsgKytpKSB7CisgICAgICAgIGlmIChw
b3NpdGlvbnNbaV0ub2Zmc2V0ICE9IHdvcmRCcmVha3NbaSArIDFdKSB7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoaSAhPSB3b3JkQnJlYWtzLmxlbmd0aCAt
IDEgJiYgcG9zaXRpb25zW2ldICE9IHdvcmRCcmVha3NbaV0pIHsKKyAgICAgICAgbG9nKCIgICAg
RkFJTCBleHBlY3RlZDogWyIpOworICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IHdvcmRCcmVh
a3MubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGxvZyh3b3JkQnJlYWtzW2ldICsgIiwgIik7
CisgICAgICAgIH0KKyAgICAgICAgbG9nKHdvcmRCcmVha3Nbd29yZEJyZWFrcy5sZW5ndGggLSAx
XSArICJdIik7CisgICAgfQorfQorCitmdW5jdGlvbiBjb2xsZWN0V29yZEJyZWFrcyh0ZXN0LCBz
ZWFyY2hEaXJlY3Rpb24pCit7CisgICAgaWYgKHNlYXJjaERpcmVjdGlvbiA9PSAicmlnaHQiKSB7
CisgICAgICAgIGlmICh0ZXN0LmdldEF0dHJpYnV0ZSgiZGlyIikgPT0gJ2x0cicpIAorICAgICAg
ICAgICAgd29yZEJyZWFrcyA9IHRlc3QudGl0bGUuc3BsaXQoInwiKVswXS5zcGxpdCgiICIpOwor
ICAgICAgICBlbHNlIAorICAgICAgICAgICAgd29yZEJyZWFrcyA9IHRlc3QudGl0bGUuc3BsaXQo
InwiKVsxXS5zcGxpdCgiICIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmICh0ZXN0LmdldEF0
dHJpYnV0ZSgiZGlyIikgPT0gJ2x0cicpIAorICAgICAgICAgICAgd29yZEJyZWFrcyA9IHRlc3Qu
dGl0bGUuc3BsaXQoInwiKVsxXS5zcGxpdCgiICIpOworICAgICAgICBlbHNlIAorICAgICAgICAg
ICAgd29yZEJyZWFrcyA9IHRlc3QudGl0bGUuc3BsaXQoInwiKVswXS5zcGxpdCgiICIpOworICAg
IH0KK30KKworZnVuY3Rpb24gbW92ZUJ5V29yZChzZWwsIHRlc3QsIHNlYXJjaERpcmVjdGlvbiwg
ZGlyKQoreworICAgIGxvZygiTW92ZSAiICsgc2VhcmNoRGlyZWN0aW9uICsgIiBieSBvbmUgd29y
ZFxuIik7CisgICAgdmFyIHByZXZPZmZzZXQgPSBzZWwuYW5jaG9yT2Zmc2V0OworICAgIHZhciBu
b2RlID0gc2VsLmFuY2hvck5vZGU7CisgICAgY29sbGVjdFdvcmRCcmVha3ModGVzdCwgc2VhcmNo
RGlyZWN0aW9uKTsKKyAgICBzZWwuc2V0UG9zaXRpb24obm9kZSwgd29yZEJyZWFrc1swXSk7Cisg
ICAgdmFyIHBvc2l0aW9ucyA9IFtdOworICAgIGZvciAodmFyIGluZGV4ID0gMTsgaW5kZXggPCB3
b3JkQnJlYWtzLmxlbmd0aDsgKytpbmRleCkgeworICAgICAgICBzZWwubW9kaWZ5KCJtb3ZlIiwg
c2VhcmNoRGlyZWN0aW9uLCAiLXdlYmtpdC12aXN1YWwtd29yZCIpOworICAgICAgICBwb3NpdGlv
bnMucHVzaCh7IG5vZGU6IHNlbC5hbmNob3JOb2RlLCBvZmZzZXQ6IHNlbC5hbmNob3JPZmZzZXQs
IHBvaW50OiBjYXJldENvb3JkaW5hdGVzKCkgfSk7CisgICAgICAgIHNlbC5zZXRQb3NpdGlvbihu
b2RlLCB3b3JkQnJlYWtzW2luZGV4XSk7CisgICAgfQorICAgIHNlbC5tb2RpZnkoIm1vdmUiLCBz
ZWFyY2hEaXJlY3Rpb24sICItd2Via2l0LXZpc3VhbC13b3JkIik7CisgICAgcG9zaXRpb25zLnB1
c2goeyBub2RlOiBzZWwuYW5jaG9yTm9kZSwgb2Zmc2V0OiBzZWwuYW5jaG9yT2Zmc2V0LCBwb2lu
dDogY2FyZXRDb29yZGluYXRlcygpIH0pOworICAgIGxvZ1Bvc2l0aW9ucyhwb3NpdGlvbnMpOwor
ICAgIHZhbGlkYXRlRGF0YShwb3NpdGlvbnMpOworICAgIGxvZygiXG4iKTsKK30KKworZnVuY3Rp
b24gbW92ZUJ5V29yZEZvckV2ZXJ5UG9zaXRpb24oc2VsLCB0ZXN0LCBkaXIpCit7CisgICAgLy8g
Q2hlY2sgY3RybC1yaWdodC1hcnJvdyB3b3JrcyBmb3IgZXZlcnkgcG9zaXRpb24uCisgICAgc2Vs
LnNldFBvc2l0aW9uKHRlc3QsIDApOworICAgIHZhciBkaXJlY3Rpb24gPSAicmlnaHQiOworICAg
IGlmIChkaXIgPT0gInJ0bCIpCisgICAgICAgIGRpcmVjdGlvbiA9ICJsZWZ0IjsgICAgCisgICAg
bW92ZUJ5V29yZChzZWwsIHRlc3QsIGRpcmVjdGlvbiwgZGlyKTsgICAgCisgICAgLy8gQ2hlY2sg
Y3RybC1sZWZ0LWFycm93IHdvcmtzIGZvciBldmVyeSBwb3NpdGlvbi4KKyAgICBpZiAoZGlyID09
ICJsdHIiKQorICAgICAgICBkaXJlY3Rpb24gPSAibGVmdCI7CisgICAgZWxzZQorICAgICAgICBk
aXJlY3Rpb24gPSAicmlnaHQiOyAgICAKKyAgICBtb3ZlQnlXb3JkKHNlbCwgdGVzdCwgZGlyZWN0
aW9uLCBkaXIpOyAgICAKK30KKworZnVuY3Rpb24gcnVuTW92ZUxlZnRSaWdodCh0ZXN0cywgdW5p
dCkKK3sKKyAgICB2YXIgc2VsID0gZ2V0U2VsZWN0aW9uKCk7CisgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCB0ZXN0cy5sZW5ndGg7ICsraSkgeworICAgICAgICB2YXIgcG9zaXRpb25zTW92aW5nUmln
aHQ7CisgICAgICAgIHZhciBwb3NpdGlvbnNNb3ZpbmdMZWZ0OworCisgICAgICAgIGlmICh0ZXN0
c1tpXS5nZXRBdHRyaWJ1dGUoImRpciIpID09ICdsdHInKQorICAgICAgICB7CisgICAgICAgICAg
ICBsb2coIlRlc3QgIiArIChpICsgMSkgKyAiLCBMVFI6XG4iKTsKKyAgICAgICAgICAgIG1vdmVC
eVdvcmRGb3JFdmVyeVBvc2l0aW9uKHNlbCwgdGVzdHNbaV0sICJsdHIiKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIGxvZygiVGVzdCAiICsgKGkgKyAxKSArICIsIFJUTDpcbiIpOwor
ICAgICAgICAgICAgbW92ZUJ5V29yZEZvckV2ZXJ5UG9zaXRpb24oc2VsLCB0ZXN0c1tpXSwgInJ0
bCIpOworICAgICAgICB9CisKKyAgICB9CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRl
c3RNb3ZlQnlXb3JkIikuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKK30KKworZnVuY3Rpb24gcnVu
VGVzdCgpIHsKKyAgICBsb2coIlxuPT09PT09PT0gTW92ZSBCeSBXb3JkID09PT1cbiIpOworICAg
IHZhciB0ZXN0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoInRlc3RfbW92ZV9i
eV93b3JkIik7CisgICAgcnVuTW92ZUxlZnRSaWdodCh0ZXN0cywgIndvcmQiKTsKK30KKworb25s
b2FkID0gZnVuY3Rpb24oKSB7CisgICAgdHJ5IHsKKyAgICAgICAgcnVuVGVzdCgpOworICAgIH0g
ZmluYWxseSB7CisgICAgICAgIGZsdXNoTG9nKCk7CisgICAgfQorfTsKKworaWYgKHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0
KCk7Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0idGVzdE1vdmVCeVdvcmQi
PgorPCEtLSBUaGUgbnVtYmVycyBwdXQgaW4gdGl0bGUgYXJlIHN0YXJ0aW5nIHdvcmQgYm91bmRh
cmllcy4KK1RoZSBudW1iZXJzIHByaW50ZWQgb3V0IGluIHRoZSBvdXRwdXQgYXJlIGVuZGluZyB3
b3JkIGJvdW5kYXJpZXMuIC0tPgorPGRpdiBkaXI9bHRyIGNsYXNzPSJ0ZXN0X21vdmVfYnlfd29y
ZCIgdGl0bGU9IjAgNCA4IDEyIDE2IDE5fDE5IDE2IDEyIDggNCAwIiBjb250ZW50ZWRpdGFibGU+
YWJjIGRlZiBoaWogb3BxIHJzdDwvZGl2PgorPGRpdiBkaXI9cnRsIGNsYXNzPSJ0ZXN0X21vdmVf
Ynlfd29yZCIgdGl0bGU9IjAgMTUgMTEgNyAzIDE5fDE5IDMgNyAxMSAxNSAwIiBjb250ZW50ZWRp
dGFibGU+YWJjIGRlZiBoaWogb3BxIHJzdDwvZGl2PgorPGRpdiBkaXI9bHRyIGNsYXNzPSJ0ZXN0
X21vdmVfYnlfd29yZCIgdGl0bGU9IjAgMTUgMTEgNyAzIDE5fDE5IDMgNyAxMSAxNSAwIiBjb250
ZW50ZWRpdGFibGU+16nXqdepINeg16DXoCDXkdeR15Eg15LXkteSINen16fXpzwvZGl2PgorPGRp
diBkaXI9cnRsIGNsYXNzPSJ0ZXN0X21vdmVfYnlfd29yZCIgdGl0bGU9IjAgNCA4IDEyIDE2IDE5
fDE5IDE2IDEyIDggNCAwIiBjb250ZW50ZWRpdGFibGU+16nXqdepINeg16DXoCDXkdeR15Eg15LX
kteSINen16fXpzwvZGl2PgorPGRpdiBkaXI9bHRyIGNsYXNzPSJ0ZXN0X21vdmVfYnlfd29yZCIg
dGl0bGU9IjAgNCA4IDExIDE2IDIwIDIzfDIzIDIwIDE2IDExIDggNCAwIiBjb250ZW50ZWRpdGFi
bGU+YWJjIGRlZiDXqdeg15Eg16HXmNeWIHV2dyB4eXo8L2Rpdj4KKzxkaXYgZGlyPXJ0bCBjbGFz
cz0idGVzdF9tb3ZlX2J5X3dvcmQiIHRpdGxlPSIwIDMgOCAxMiAxNiAxOSAyM3wyMyAxOSAxNiAx
MiA4IDMgMCIgY29udGVudGVkaXRhYmxlPmFiYyBkZWYg16nXoNeRINeh15jXliB1dncgeHl6PC9k
aXY+Cis8ZGl2IGRpcj1sdHIgY2xhc3M9InRlc3RfbW92ZV9ieV93b3JkIiB0aXRsZT0iMCA0IDgg
MTF8MTEgOCA0IDAiIGNvbnRlbnRlZGl0YWJsZT7Xqdeg15EgYWJjINeh15jXljwvZGl2PgorPGRp
diBkaXI9cnRsIGNsYXNzPSJ0ZXN0X21vdmVfYnlfd29yZCIgdGl0bGU9IjAgNCA4IDExfDExIDgg
NCAwIiBjb250ZW50ZWRpdGFibGU+16nXoNeRIGFiYyDXodeY15Y8L2Rpdj4KKzwvZGl2PgorCis8
cHJlIGlkPSJjb25zb2xlIj48L3ByZT4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>87718</attachid>
            <date>2011-03-31 07:09:32 -0700</date>
            <delta_ts>2011-03-31 07:17:00 -0700</delta_ts>
            <desc>patch w/ layout test</desc>
            <filename>57336.v7</filename>
            <type>text/plain</type>
            <size>23547</size>
            <attacher name="Xiaomei Ji">xji</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgyNDkyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTggQEAKKzIwMTEtMDMtMzAgIFhpYW9tZWkg
SmkgIDx4amlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEV4cGVyaW1lbnQgd2l0aCBtb3ZpbmcgY2FyZXQgYnkgd29yZCBpbiB2
aXN1YWwgb3JkZXIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01NzMzNgorCisgICAgICAgIEZvbGxvdyBGaXJlZm94J3MgY29udmVudGlvbiBpbiBXaW5k
b3dzLCAKKyAgICAgICAgSW4gTFRSIGJsb2NrLCB3b3JkIGJyZWFrIHZpc3VhbGx5IG1vdmVzIGN1
cnNvciB0byB0aGUgbGVmdCBib3VuZGFyeSBvZiB3b3JkcywKKyAgICAgICAgSW4gUlRMIGJsb2Nr
LCB3b3JkIGJyZWFrIHZpc3VhbGx5IG1vdmVzIGN1cnNvciB0byB0aGUgcmlnaHQgYm91bmRhcnkg
b2Ygd29yZHMuCisKKyAgICAgICAgVGhpcyBpcyB0aGUgMXN0IHZlcnNpb24gb2YgaW1wbGVtZW50
aW5nICJtb3ZlIGNhcmV0IGJ5IHdvcmQgaW4gdmlzdWFsIG9yZGVyIi4KKyAgICAgICAgSXQgb25s
eSB3b3JrcyBpbiB0aGUgZm9sbG93aW5nIHNpdHVhdGlvbjoKKyAgICAgICAgMS4gRm9yIGEgTFRS
IGJveCBpbiBhIExUUiBibG9jayBvciBhIFJUTCBib3ggaW4gUlRMIGJsb2NrLCAKKyAgICAgICAg
d2hlbiBjYXJldCBpcyBhdCB0aGUgbGVmdCBib3VuZGFyeSBvZiB0aGUgYm94IGFuZCB3ZSBhcmUg
bG9va2luZyBmb3IgCisgICAgICAgIHRoZSB3b3JkIGJvdW5kYXJ5IGluIHJpZ2h0LgorICAgICAg
ICAyLiBGb3IgYSBMVFIgb3IgUlRMIGJveCBpbiBhIExUUiBibG9jaywgd2hlbiBjYXJldCBpcyBh
dCB0aGUgbGVmdCBib3VuZGFyeQorICAgICAgICBvZiB0aGUgYm94IGFuZCB3ZSBhcmUgbG9va2lu
ZyBmb3IgdGhlIHdvcmQgYm91bmRhcnkgaW4gbGVmdCBhbmQgCisgICAgICAgIHByZXZpb3VzIGJv
eCBpcyBhIExUUiBib3guCisgICAgICAgIDMuIEZvciBhIExUUiBvciBSVEwgYm94IGluIGEgUlRM
IGJsb2NrLCB3aGVuIHRoZSBjYXJldCBpcyBhdCB0aGUgcmlnaHQgCisgICAgICAgIGJvdW5kYXJ5
IG9mIHRoZSBib3ggYW5kIHdlIGFyZSBsb29raW5nIGZvciB0aGUgd29yZCBib3VuZGFyeSBpbiBy
aWdodCBhbmQgbmV4dCBib3ggaXMgUlRMIGJveC4KKworICAgICAgICBBbiBleHBlcmltZW50YWwg
Z3JhbnVsYXJpdHkgaXMgaW50cm9kdWNlZCwgYXMgYSBzaWRlIGVmZmVjdCwgZnVuY3Rpb25zIGhh
dmluZyBzd2l0Y2ggc3RhdGVtZW50cworICAgICAgICB0byBoYW5kbGUgdGhvc2UgZ3JhbnVsYXJp
dGllcyBoYXZlIHRvIGFkZCBtb3JlIG9uZSBjYXNlIHRvIGhhbmRsZSB0aGlzIG5ldyBncmFudWxh
cml0eS4KKyAgICAgICAgVGhlIGV4cGVyaW1lbnRhbCBncmFudWxhcml0eSBpcyBleHBvc2VkIHRo
b3VnaCBKUyBieSAnLXdlYmtpdC12aXN1YWwtd29yZCIuCisKKyAgICAgICAgVGhlIG92ZXJhbGwg
YWxnb3JpdGhtIGlzIGxvb3BpbmcgdGhyb3VnaCBpbmxpbmUgYm94ZXMgdmlzdWFsbHkgYW5kIGxv
b2tpbmcKKyAgICAgICAgZm9yIHRoZSB2aXN1YWxseSBuZWFyZXN0IHdvcmQgYnJlYWsgcG9zaXRp
b24uIAorCisgICAgICAgIFRlc3Q6IGVkaXRpbmcvc2VsZWN0aW9uL21vdmUtYnktd29yZC12aXN1
YWxseS5odG1sCisKKyAgICAgICAgKiBlZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kaWZ5RXh0ZW5kaW5nUmln
aHQpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kaWZ5RXh0ZW5k
aW5nRm9yd2FyZCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25Db250cm9sbGVyOjptb2Rp
ZnlNb3ZpbmdSaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25Db250cm9sbGVyOjpt
b2RpZnlNb3ZpbmdGb3J3YXJkKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xs
ZXI6Om1vZGlmeUV4dGVuZGluZ0xlZnQpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uQ29u
dHJvbGxlcjo6bW9kaWZ5RXh0ZW5kaW5nQmFja3dhcmQpOgorICAgICAgICAoV2ViQ29yZTo6U2Vs
ZWN0aW9uQ29udHJvbGxlcjo6bW9kaWZ5TW92aW5nTGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpT
ZWxlY3Rpb25Db250cm9sbGVyOjptb2RpZnlNb3ZpbmdCYWNrd2FyZCk6CisgICAgICAgICogZWRp
dGluZy9UZXh0R3JhbnVsYXJpdHkuaDoKKyAgICAgICAgKiBlZGl0aW5nL1Zpc2libGVTZWxlY3Rp
b24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbjo6c2V0U3RhcnRBbmRF
bmRGcm9tQmFzZUFuZEV4dGVudFJlc3BlY3RpbmdHcmFudWxhcml0eSk6CisgICAgICAgICogZWRp
dGluZy92aXNpYmxlX3VuaXRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnByZXZpb3VzV29yZEJy
ZWFrSW5Cb3hJbnNpZGVCbG9ja1dpdGhTYW1lRGlyZWN0aW9uYWxpdHkpOgorICAgICAgICAoV2Vi
Q29yZTo6d29yZEJvdW5kYXJ5SW5Cb3gpOgorICAgICAgICAoV2ViQ29yZTo6d29yZEJvdW5kYXJ5
SW5BZGphY2VudEJveGVzKToKKyAgICAgICAgKFdlYkNvcmU6OmxlZnRXb3JkQm91bmRhcnkpOgor
ICAgICAgICAoV2ViQ29yZTo6cmlnaHRXb3JkQm91bmRhcnkpOgorICAgICAgICAoV2ViQ29yZTo6
bGVmdFdvcmRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpyaWdodFdvcmRQb3NpdGlvbik6
CisgICAgICAgICogZWRpdGluZy92aXNpYmxlX3VuaXRzLmg6CisgICAgICAgICogcGFnZS9ET01T
ZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NU2VsZWN0aW9uOjptb2RpZnkpOgor
CiAyMDExLTAzLTMwICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgQnJhZHkgRWlkc29uLgpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9TZWxl
Y3Rpb25Db250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA4MjQ5MikKKysrIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0
Nyw2ICs0NDcsOSBAQCBWaXNpYmxlUG9zaXRpb24gU2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kCiAg
ICAgY2FzZSBEb2N1bWVudEJvdW5kYXJ5OgogICAgICAgICAvLyBGSVhNRTogaW1wbGVtZW50IGFs
bCBvZiB0aGUgYWJvdmU/CiAgICAgICAgIHBvcyA9IG1vZGlmeUV4dGVuZGluZ0ZvcndhcmQoZ3Jh
bnVsYXJpdHkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdlYktpdFZpc3VhbFdvcmRHcmFu
dWxhcml0eToKKyAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBwb3M7CiB9CkBAIC00
ODYsNiArNDg5LDggQEAgVmlzaWJsZVBvc2l0aW9uIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vZAog
ICAgICAgICBlbHNlCiAgICAgICAgICAgICBwb3MgPSBlbmRPZkRvY3VtZW50KHBvcyk7CiAgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgV2ViS2l0VmlzdWFsV29yZEdyYW51bGFyaXR5OgorICAgICAg
ICBicmVhazsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIHBvczsKQEAgLTUxNyw2ICs1MjIsOSBA
QCBWaXNpYmxlUG9zaXRpb24gU2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kCiAgICAgY2FzZSBMaW5l
Qm91bmRhcnk6CiAgICAgICAgIHBvcyA9IHJpZ2h0Qm91bmRhcnlPZkxpbmUoc3RhcnRGb3JQbGF0
Zm9ybSgpLCBkaXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2NrKCkpOwogICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFdlYktpdFZpc3VhbFdvcmRHcmFudWxhcml0eToKKyAgICAgICAgcG9zID0gcmlnaHRX
b3JkUG9zaXRpb24oVmlzaWJsZVBvc2l0aW9uKG1fc2VsZWN0aW9uLmV4dGVudCgpLCBtX3NlbGVj
dGlvbi5hZmZpbml0eSgpKSk7CisgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gcG9z
OwogfQpAQCAtNTY1LDYgKzU3Myw4IEBAIFZpc2libGVQb3NpdGlvbiBTZWxlY3Rpb25Db250cm9s
bGVyOjptb2QKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcG9zID0gZW5kT2ZEb2N1bWVudChw
b3MpOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIFdlYktpdFZpc3VhbFdvcmRHcmFudWxhcml0
eToKKyAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBwb3M7CiB9CkBAIC02MDQsNiAr
NjE0LDkgQEAgVmlzaWJsZVBvc2l0aW9uIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vZAogICAgIGNh
c2UgUGFyYWdyYXBoQm91bmRhcnk6CiAgICAgY2FzZSBEb2N1bWVudEJvdW5kYXJ5OgogICAgICAg
ICBwb3MgPSBtb2RpZnlFeHRlbmRpbmdCYWNrd2FyZChncmFudWxhcml0eSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgV2ViS2l0VmlzdWFsV29yZEdyYW51bGFyaXR5OgorICAgICAgICBicmVh
azsKICAgICB9CiAgICAgcmV0dXJuIHBvczsKIH0KQEAgLTY0OCw2ICs2NjEsOCBAQCBWaXNpYmxl
UG9zaXRpb24gU2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kCiAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgIHBvcyA9IHN0YXJ0T2ZEb2N1bWVudChwb3MpOwogICAgICAgICBicmVhazsKKyAgICBjYXNl
IFdlYktpdFZpc3VhbFdvcmRHcmFudWxhcml0eToKKyAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
IHJldHVybiBwb3M7CiB9CkBAIC02NjYsNiArNjgxLDggQEAgVmlzaWJsZVBvc2l0aW9uIFNlbGVj
dGlvbkNvbnRyb2xsZXI6Om1vZAogICAgICAgICAgICAgcG9zID0gVmlzaWJsZVBvc2l0aW9uKG1f
c2VsZWN0aW9uLmV4dGVudCgpLCBtX3NlbGVjdGlvbi5hZmZpbml0eSgpKS5sZWZ0KHRydWUpOwog
ICAgICAgICBicmVhazsKICAgICBjYXNlIFdvcmRHcmFudWxhcml0eToKKyAgICAgICAgcG9zID0g
bGVmdFdvcmRQb3NpdGlvbihWaXNpYmxlUG9zaXRpb24obV9zZWxlY3Rpb24uZXh0ZW50KCksIG1f
c2VsZWN0aW9uLmFmZmluaXR5KCkpKTsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTZW50ZW5j
ZUdyYW51bGFyaXR5OgogICAgIGNhc2UgTGluZUdyYW51bGFyaXR5OgogICAgIGNhc2UgUGFyYWdy
YXBoR3JhbnVsYXJpdHk6CkBAIC02NzgsNiArNjk1LDkgQEAgVmlzaWJsZVBvc2l0aW9uIFNlbGVj
dGlvbkNvbnRyb2xsZXI6Om1vZAogICAgIGNhc2UgTGluZUJvdW5kYXJ5OgogICAgICAgICBwb3Mg
PSBsZWZ0Qm91bmRhcnlPZkxpbmUoc3RhcnRGb3JQbGF0Zm9ybSgpLCBkaXJlY3Rpb25PZkVuY2xv
c2luZ0Jsb2NrKCkpOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIFdlYktpdFZpc3VhbFdvcmRH
cmFudWxhcml0eToKKyAgICAgICAgcG9zID0gbGVmdFdvcmRQb3NpdGlvbihWaXNpYmxlUG9zaXRp
b24obV9zZWxlY3Rpb24uZXh0ZW50KCksIG1fc2VsZWN0aW9uLmFmZmluaXR5KCkpKTsKKyAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBwb3M7CiB9CkBAIC03MjAsNiArNzQwLDggQEAg
VmlzaWJsZVBvc2l0aW9uIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vZAogICAgICAgICBlbHNlCiAg
ICAgICAgICAgICBwb3MgPSBzdGFydE9mRG9jdW1lbnQocG9zKTsKICAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBXZWJLaXRWaXN1YWxXb3JkR3JhbnVsYXJpdHk6CisgICAgICAgIGJyZWFrOwogICAg
IH0KICAgICByZXR1cm4gcG9zOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0
R3JhbnVsYXJpdHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRH
cmFudWxhcml0eS5oCShyZXZpc2lvbiA4MjQ5MikKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
VGV4dEdyYW51bGFyaXR5LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDEwIEBAIGVudW0g
VGV4dEdyYW51bGFyaXR5IHsKICAgICBTZW50ZW5jZUJvdW5kYXJ5LAogICAgIExpbmVCb3VuZGFy
eSwKICAgICBQYXJhZ3JhcGhCb3VuZGFyeSwKLSAgICBEb2N1bWVudEJvdW5kYXJ5CisgICAgRG9j
dW1lbnRCb3VuZGFyeSwKKyAgICAvLyBGSVhNRTogdGhpcyBpcyBhZGRlZCB0ZW1wb3JhcmlseSBm
b3IgZXhwZXJpbWVudCB3aXRoIHZpc3VhbGx5IG1vdmUKKyAgICAvLyBjYXJldCBieSB3b3JkR3Jh
bnVsYXJpdHkuIE9uY2UgYWxsIHBhdGNoZXMgYXJlIGxhbmRlZCwgaXQgc2hvdWxkIGJlIHJlbW92
ZWQuCisgICAgV2ViS2l0VmlzdWFsV29yZEdyYW51bGFyaXR5CiB9OwogCiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAJKHJldmlzaW9uIDgyNDky
KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzgwLDYgKzM4MCw4IEBAIHZvaWQgVmlzaWJsZVNlbGVjdGlvbjo6c2V0U3Rh
cnRBbmRFbmRGcm8KICAgICAgICAgICAgIG1fc3RhcnQgPSBzdGFydE9mU2VudGVuY2UoVmlzaWJs
ZVBvc2l0aW9uKG1fc3RhcnQsIG1fYWZmaW5pdHkpKS5kZWVwRXF1aXZhbGVudCgpOwogICAgICAg
ICAgICAgbV9lbmQgPSBlbmRPZlNlbnRlbmNlKFZpc2libGVQb3NpdGlvbihtX2VuZCwgbV9hZmZp
bml0eSkpLmRlZXBFcXVpdmFsZW50KCk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBXZWJLaXRWaXN1YWxXb3JkR3JhbnVsYXJpdHk6CisgICAgICAgICAgICBicmVhazsKICAgICB9
CiAgICAgCiAgICAgLy8gTWFrZSBzdXJlIHdlIGRvIG5vdCBoYXZlIGEgZGFuZ2xpbmcgc3RhcnQg
b3IgZW5kLgpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCShy
ZXZpc2lvbiA4MjQ5MikKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJUZXh0QnJlYWtJ
dGVyYXRvci5oIgogI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgogI2luY2x1ZGUgIlZpc2libGVQ
b3NpdGlvbi5oIgorI2luY2x1ZGUgIlZpc2libGVTZWxlY3Rpb24uaCIKICNpbmNsdWRlICJodG1s
ZWRpdGluZy5oIgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUuaD4KIApAQCAtMTE0Niw0
ICsxMTQ3LDEwNyBAQCBWaXNpYmxlUG9zaXRpb24gcmlnaHRCb3VuZGFyeU9mTGluZShjb25zCiAg
ICAgcmV0dXJuIGRpcmVjdGlvbiA9PSBMVFIgPyBsb2dpY2FsRW5kT2ZMaW5lKGMpIDogbG9naWNh
bFN0YXJ0T2ZMaW5lKGMpOwogfQogCitzdGF0aWMgY29uc3QgaW50IGludmFsaWRPZmZzZXQgPSAt
MTsKKyAgICAKK3N0YXRpYyBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXNXb3JkQnJlYWtJbkJveElu
c2lkZUJsb2NrV2l0aFNhbWVEaXJlY3Rpb25hbGl0eShjb25zdCBJbmxpbmVCb3gqIGJveCwgY29u
c3QgVmlzaWJsZVBvc2l0aW9uJiBwcmV2aW91c1dvcmRCcmVhaywgaW50JiBvZmZzZXRPZldvcmRC
cmVhaykKK3sKKyAgICBib29sIGhhc1NlZW5Xb3JkQnJlYWtJblRoaXNCb3ggPSBwcmV2aW91c1dv
cmRCcmVhay5pc05vdE51bGwoKTsKKyAgICAvLyBJbiBhIExUUiBibG9jaywgdGhlIHdvcmQgYnJl
YWsgc2hvdWxkIGJlIG9uIHRoZSBsZWZ0IGJvdW5kYXJ5IG9mIGEgd29yZC4KKyAgICAvLyBJbiBh
IFJUTCBibG9jaywgdGhlIHdvcmQgYnJlYWsgc2hvdWxkIGJlIG9uIHRoZSByaWdodCBib3VuZGFy
eSBvZiBhIHdvcmQuCisgICAgLy8gQmVjYXVzZSBuZXh0V29yZFBvc2l0aW9uKCkgcmV0dXJucyB0
aGUgd29yZCBicmVhayBvbiB0aGUgcmlnaHQgYm91bmRhcnkgb2YgdGhlIHdvcmQgZm9yIExUUiB0
ZXh0LAorICAgIC8vIHdlIG5lZWQgdG8gdXNlIHByZXZpb3VzV29yZFBvc2l0aW9uKCkgdG8gdHJh
dmVyc2Ugd29yZHMgd2l0aGluIHRoZSBpbmxpbmUgYm94ZXMgZnJvbSByaWdodCB0byBsZWZ0Cisg
ICAgLy8gdG8gZmluZCB0aGUgcHJldmlvdXMgd29yZCBicmVhayAoaS5lLiB0aGUgZmlyc3Qgd29y
ZCBicmVhayBvbiB0aGUgbGVmdCkuIFRoZSBzYW1lIGFwcGxpZXMgdG8gUlRMIHRleHQuCisgICAg
CisgICAgVmlzaWJsZVBvc2l0aW9uIHdvcmRCcmVhayA9IGhhc1NlZW5Xb3JkQnJlYWtJblRoaXNC
b3ggPyBwcmV2aW91c1dvcmRCcmVhayA6IFBvc2l0aW9uKGJveC0+cmVuZGVyZXIoKS0+bm9kZSgp
LCBib3gtPmNhcmV0TWF4T2Zmc2V0KCksIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNo
b3IpOworCisgICAgLy8gRklYTUU6IGhhbmRsZSBtdWx0aS1zcGFjZXMuIFBsZWFzZSByZWZlciBi
dWcgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU3NTQzIGZvciBkZXRh
aWwuCisgICAgCisgICAgd29yZEJyZWFrID0gcHJldmlvdXNXb3JkUG9zaXRpb24od29yZEJyZWFr
KTsKKyAgICBpZiAocHJldmlvdXNXb3JkQnJlYWsgIT0gd29yZEJyZWFrKSB7CisgICAgICAgIElu
bGluZUJveCogYm94Q29udGFpbmluZ1ByZXZpb3VzV29yZEJyZWFrOworICAgICAgICB3b3JkQnJl
YWsuZ2V0SW5saW5lQm94QW5kT2Zmc2V0KGJveENvbnRhaW5pbmdQcmV2aW91c1dvcmRCcmVhaywg
b2Zmc2V0T2ZXb3JkQnJlYWspOworICAgICAgICBpZiAoYm94Q29udGFpbmluZ1ByZXZpb3VzV29y
ZEJyZWFrID09IGJveCkKKyAgICAgICAgICAgIHJldHVybiB3b3JkQnJlYWs7CisgICAgfQorICAg
IHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKK30KKworc3RhdGljIFZpc2libGVQb3NpdGlvbiBw
cmV2aW91c1dvcmRCcmVha0luQm94KGNvbnN0IElubGluZUJveCogYm94LCBpbnQgb2Zmc2V0LCBU
ZXh0RGlyZWN0aW9uIGJsb2NrRGlyZWN0aW9uKQoreworICAgIGludCBvZmZzZXRPZldvcmRCcmVh
ayA9IDA7CisgICAgVmlzaWJsZVBvc2l0aW9uIHdvcmRCcmVhazsKKyAgICB3aGlsZSAodHJ1ZSkg
eworICAgICAgICBpZiAoYm94LT5kaXJlY3Rpb24oKSA9PSBibG9ja0RpcmVjdGlvbikKKyAgICAg
ICAgICAgIHdvcmRCcmVhayA9IHByZXZpb3VzV29yZEJyZWFrSW5Cb3hJbnNpZGVCbG9ja1dpdGhT
YW1lRGlyZWN0aW9uYWxpdHkoYm94LCB3b3JkQnJlYWssIG9mZnNldE9mV29yZEJyZWFrKTsKKyAg
ICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGUgJ2Vsc2UnIGNhc2Ugd2hlbiB0aGUgYm94IGRp
cmVjdGlvbiBpcyBub3QgZXF1YWwgdG8gdGhlIGJsb2NrIGRpcmVjdGlvbi4KKyAgICAgICAgaWYg
KHdvcmRCcmVhay5pc051bGwoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAob2Zm
c2V0ID09IGludmFsaWRPZmZzZXQgfHwgb2Zmc2V0T2ZXb3JkQnJlYWsgIT0gb2Zmc2V0KQorICAg
ICAgICAgICAgcmV0dXJuIHdvcmRCcmVhazsKKyAgICB9ICAgICAgICAKKyAgICByZXR1cm4gVmlz
aWJsZVBvc2l0aW9uKCk7Cit9CisKK3N0YXRpYyBWaXNpYmxlUG9zaXRpb24gbGVmdFdvcmRCb3Vu
ZGFyeShjb25zdCBJbmxpbmVCb3gqIGJveCwgaW50IG9mZnNldCwgVGV4dERpcmVjdGlvbiBibG9j
a0RpcmVjdGlvbikKK3sKKyAgICBWaXNpYmxlUG9zaXRpb24gd29yZEJyZWFrOworICAgIGZvciAg
KGNvbnN0IElubGluZUJveCogYWRqYWNlbnRCb3ggPSBib3g7IGFkamFjZW50Qm94OyBhZGphY2Vu
dEJveCA9IGFkamFjZW50Qm94LT5wcmV2TGVhZkNoaWxkKCkpIHsKKyAgICAgICAgaWYgKGJsb2Nr
RGlyZWN0aW9uID09IExUUikgCisgICAgICAgICAgICB3b3JkQnJlYWsgPSBwcmV2aW91c1dvcmRC
cmVha0luQm94KGFkamFjZW50Qm94LCBhZGphY2VudEJveCA9PSBib3ggPyBvZmZzZXQgOiBpbnZh
bGlkT2Zmc2V0LCBibG9ja0RpcmVjdGlvbik7CisgICAgICAgIC8vIEZJWE1FOiAiZWxzZSIgbm90
IGltcGxlbWVudGVkIHlldC4KKyAgICAgICAgaWYgKHdvcmRCcmVhay5pc05vdE51bGwoKSkKKyAg
ICAgICAgICAgIHJldHVybiB3b3JkQnJlYWs7CisgICAgfQorICAgIHJldHVybiBWaXNpYmxlUG9z
aXRpb24oKTsKK30KKyAKK3N0YXRpYyBWaXNpYmxlUG9zaXRpb24gcmlnaHRXb3JkQm91bmRhcnko
Y29uc3QgSW5saW5lQm94KiBib3gsIGludCBvZmZzZXQsIFRleHREaXJlY3Rpb24gYmxvY2tEaXJl
Y3Rpb24pCit7CisgICAgCisgICAgVmlzaWJsZVBvc2l0aW9uIHdvcmRCcmVhazsKKyAgICBmb3Ig
KGNvbnN0IElubGluZUJveCogYWRqYWNlbnRCb3ggPSBib3g7IGFkamFjZW50Qm94OyBhZGphY2Vu
dEJveCA9IGFkamFjZW50Qm94LT5uZXh0TGVhZkNoaWxkKCkpIHsKKyAgICAgICAgaWYgKGJsb2Nr
RGlyZWN0aW9uID09IFJUTCkKKyAgICAgICAgICAgIHdvcmRCcmVhayA9IHByZXZpb3VzV29yZEJy
ZWFrSW5Cb3goYWRqYWNlbnRCb3gsIGFkamFjZW50Qm94ID09IGJveCA/IG9mZnNldCA6IGludmFs
aWRPZmZzZXQsIGJsb2NrRGlyZWN0aW9uKTsKKyAgICAgICAgLy8gRklYTUU6ICJlbHNlIiBub3Qg
aW1wbGVtZW50ZWQgeWV0LgorICAgICAgICBpZiAoIXdvcmRCcmVhay5pc051bGwoKSkKKyAgICAg
ICAgICAgIHJldHVybiB3b3JkQnJlYWs7CisgICAgfQorICAgIHJldHVybiBWaXNpYmxlUG9zaXRp
b24oKTsKK30KKworVmlzaWJsZVBvc2l0aW9uIGxlZnRXb3JkUG9zaXRpb24oY29uc3QgVmlzaWJs
ZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24pCit7CisgICAgSW5saW5lQm94KiBib3g7CisgICAg
aW50IG9mZnNldDsKKyAgICB2aXNpYmxlUG9zaXRpb24uZ2V0SW5saW5lQm94QW5kT2Zmc2V0KGJv
eCwgb2Zmc2V0KTsKKyAgICBUZXh0RGlyZWN0aW9uIGJsb2NrRGlyZWN0aW9uID0gZGlyZWN0aW9u
T2ZFbmNsb3NpbmdCbG9jayh2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKSk7CisgICAg
CisgICAgLy8gRklYTUU6IElmIHRoZSBib3gncyBkaXJlY3Rpb25hbGl0eSBpcyB0aGUgc2FtZSBh
cyB0aGF0IG9mIHRoZSBlbmNsb3NpbmcgYmxvY2ssIHdoZW4gdGhlIG9mZnNldCBpcyBhdCB0aGUg
Ym94IGJvdW5kYXJ5CisgICAgLy8gYW5kIHRoZSBkaXJlY3Rpb24gaXMgdG93YXJkcyBpbnNpZGUg
dGhlIGJveCwgZG8gSSBzdGlsbCBuZWVkIHRvIG1ha2UgaXQgYSBzcGVjaWFsIGNhc2U/IEZvciBl
eGFtcGxlLCBhIExUUiBib3ggaW5zaWRlIGEgTFRSIGJsb2NrLAorICAgIC8vIHdoZW4gb2Zmc2V0
IGlzIGF0IGJveCdzIGNhcmV0TWluT2Zmc2V0IGFuZCB0aGUgZGlyZWN0aW9uIGlzIERpcmVjdGlv
blJpZ2h0LCBzaG91bGQgaXQgYmUgdGFrZW4gY2FyZSBhcyBhIGdlbmVyYWwgY2FzZT8KKyAgICBp
ZiAob2Zmc2V0ID09IGJveC0+Y2FyZXRMZWZ0bW9zdE9mZnNldCgpKQorICAgICAgICByZXR1cm4g
bGVmdFdvcmRCb3VuZGFyeShib3gtPnByZXZMZWFmQ2hpbGQoKSwgaW52YWxpZE9mZnNldCwgYmxv
Y2tEaXJlY3Rpb24pOworICAgIGlmIChvZmZzZXQgPT0gYm94LT5jYXJldFJpZ2h0bW9zdE9mZnNl
dCgpKQorICAgICAgICByZXR1cm4gbGVmdFdvcmRCb3VuZGFyeShib3gsIG9mZnNldCwgYmxvY2tE
aXJlY3Rpb24pOworICAgIAorICAgIC8vIEZJWE1FOiBOb3QgaW1wbGVtZW50ZWQuCisgICAgcmV0
dXJuIFZpc2libGVQb3NpdGlvbigpOworfQorCitWaXNpYmxlUG9zaXRpb24gcmlnaHRXb3JkUG9z
aXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24pCit7CisgICAgSW5s
aW5lQm94KiBib3g7CisgICAgaW50IG9mZnNldDsKKyAgICB2aXNpYmxlUG9zaXRpb24uZ2V0SW5s
aW5lQm94QW5kT2Zmc2V0KGJveCwgb2Zmc2V0KTsKKyAgICBUZXh0RGlyZWN0aW9uIGJsb2NrRGly
ZWN0aW9uID0gZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jayh2aXNpYmxlUG9zaXRpb24uZGVlcEVx
dWl2YWxlbnQoKSk7CisgICAgCisgICAgaWYgKG9mZnNldCA9PSBib3gtPmNhcmV0TGVmdG1vc3RP
ZmZzZXQoKSkKKyAgICAgICAgcmV0dXJuIHJpZ2h0V29yZEJvdW5kYXJ5KGJveCwgb2Zmc2V0LCBi
bG9ja0RpcmVjdGlvbik7CisgICAgaWYgKG9mZnNldCA9PSBib3gtPmNhcmV0UmlnaHRtb3N0T2Zm
c2V0KCkpCisgICAgICAgIHJldHVybiByaWdodFdvcmRCb3VuZGFyeShib3gtPm5leHRMZWFmQ2hp
bGQoKSwgLTEsIGJsb2NrRGlyZWN0aW9uKTsKKyAgICAKKyAgICAvLyBGSVhNRTogTm90IGltcGxl
bWVudGVkLgorICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKK30KKwogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmgJKHJldmlzaW9uIDgyNDkyKQorKysgU291
cmNlL1dlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQy
LDYgKzQyLDggQEAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZXb3JkKGNvbnN0IFZpc2libAogVmlz
aWJsZVBvc2l0aW9uIGVuZE9mV29yZChjb25zdCBWaXNpYmxlUG9zaXRpb24gJiwgRVdvcmRTaWRl
ID0gUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KTsKIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c1dvcmRQ
b3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24gJik7CiBWaXNpYmxlUG9zaXRpb24gbmV4dFdv
cmRQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24gJik7CitWaXNpYmxlUG9zaXRpb24gcmln
aHRXb3JkUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CitWaXNpYmxlUG9zaXRpb24g
bGVmdFdvcmRQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKIAogLy8gc2VudGVuY2Vz
CiBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZlNlbnRlbmNlKGNvbnN0IFZpc2libGVQb3NpdGlvbiAm
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAJKHJldmlzaW9uIDgyNDky
KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMzIsNiArMzMyLDggQEAgdm9pZCBET01TZWxlY3Rpb246Om1vZGlmeShjb25zdCBTdHJp
bmcmIAogICAgICAgICBncmFudWxhcml0eSA9IFBhcmFncmFwaEJvdW5kYXJ5OwogICAgIGVsc2Ug
aWYgKGVxdWFsSWdub3JpbmdDYXNlKGdyYW51bGFyaXR5U3RyaW5nLCAiZG9jdW1lbnRib3VuZGFy
eSIpKQogICAgICAgICBncmFudWxhcml0eSA9IERvY3VtZW50Qm91bmRhcnk7CisgICAgZWxzZSBp
ZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZ3JhbnVsYXJpdHlTdHJpbmcsICItd2Via2l0LXZpc3VhbC13
b3JkIikpCisgICAgICAgIGdyYW51bGFyaXR5ID0gV2ViS2l0VmlzdWFsV29yZEdyYW51bGFyaXR5
OwogICAgIGVsc2UKICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA4MjQ5MikK
KysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBA
CisyMDExLTAzLTMwICBYaWFvbWVpIEppICA8eGppQGNocm9taXVtLm9yZz4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFeHBlcmltZW50IHdpdGggbW92
aW5nIGNhcmV0IGJ5IHdvcmQgaW4gdmlzdWFsIG9yZGVyLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTczMzYKKworICAgICAgICAqIGVkaXRpbmcvc2Vs
ZWN0aW9uL21vdmUtYnktd29yZC12aXN1YWxseS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIGVkaXRpbmcvc2VsZWN0aW9uL21vdmUtYnktd29yZC12aXN1YWxseS5odG1sOiBBZGRlZC4K
KwogMjAxMS0wMy0zMCAgTWloYWkgUGFycGFyaXRhICA8bWloYWlwQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBQdXQgZXhwZWN0ZWQgUE5HIGZvciBmYXN0L211bHRpY29sL21heC1oZWlnaHQtY29s
dW1ucy1ibG9jay5odG1sIGluIHRoZQpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rp
b24vbW92ZS1ieS13b3JkLXZpc3VhbGx5LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9tb3ZlLWJ5LXdvcmQtdmlzdWFsbHktZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vbW92ZS1i
eS13b3JkLXZpc3VhbGx5LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MyBA
QAorCis9PT09PT09PSBNb3ZlIEJ5IFdvcmQgPT09PQorVGVzdCAxLCBMVFI6CitNb3ZlIHJpZ2h0
IGJ5IG9uZSB3b3JkCisiYWJjIGRlZiBoaWogb3BxIHJzdCJbMCwgNCwgOCwgMTIsIDE2LCAxOV0g
ICAgRkFJTCBleHBlY3RlZDogWzQsIDgsIDEyLCAxNiwgMTksIDE5XQorTW92ZSBsZWZ0IGJ5IG9u
ZSB3b3JkCisiYWJjIGRlZiBoaWogb3BxIHJzdCJbMTYsIDE2LCAxMiwgOCwgNCwgMF0gICAgRkFJ
TCBleHBlY3RlZDogWzE2LCAxMiwgOCwgNCwgMCwgMF0KK1Rlc3QgMiwgUlRMOgorTW92ZSBsZWZ0
IGJ5IG9uZSB3b3JkCisiYWJjIGRlZiBoaWogb3BxIHJzdCJbMCwgMTUsIDExLCA3LCAzLCAxOV0g
ICAgRkFJTCBleHBlY3RlZDogWzE1LCAxMSwgNywgMywgMTksIDE5XQorTW92ZSByaWdodCBieSBv
bmUgd29yZAorImFiYyBkZWYgaGlqIG9wcSByc3QiWzE5LCAzLCA3LCAxMSwgMTUsIDBdICAgIEZB
SUwgZXhwZWN0ZWQ6IFszLCA3LCAxMSwgMTUsIDAsIDBdCitUZXN0IDMsIExUUjoKK01vdmUgcmln
aHQgYnkgb25lIHdvcmQKKyJaWlogUVFRIEJCQiBDQ0MgWFhYIlswLCAxNSwgMTEsIDcsIDMsIDE5
XSAgICBGQUlMIGV4cGVjdGVkOiBbMTUsIDExLCA3LCAzLCAxOSwgMTldCitNb3ZlIGxlZnQgYnkg
b25lIHdvcmQKKyJaWlogUVFRIEJCQiBDQ0MgWFhYIlsxOSwgMywgNywgMTEsIDE1LCAwXSAgICBG
QUlMIGV4cGVjdGVkOiBbMywgNywgMTEsIDE1LCAwLCAwXQorVGVzdCA0LCBSVEw6CitNb3ZlIGxl
ZnQgYnkgb25lIHdvcmQKKyJaWlogUVFRIEJCQiBDQ0MgWFhYIlswLCA0LCA4LCAxMiwgMTYsIDE5
XSAgICBGQUlMIGV4cGVjdGVkOiBbNCwgOCwgMTIsIDE2LCAxOSwgMTldCitNb3ZlIHJpZ2h0IGJ5
IG9uZSB3b3JkCisiWlpaIFFRUSBCQkIgQ0NDIFhYWCJbMTYsIDE2LCAxMiwgOCwgNCwgMF0gICAg
RkFJTCBleHBlY3RlZDogWzE2LCAxMiwgOCwgNCwgMCwgMF0KK1Rlc3QgNSwgTFRSOgorTW92ZSBy
aWdodCBieSBvbmUgd29yZAorImFiYyBkZWYgWlFCIFJJRyB1dncgeHl6IlswLCA0LCA4LCAxMSwg
MTYsIDIwLCAyM10gICAgRkFJTCBleHBlY3RlZDogWzQsIDgsIDExLCAxNiwgMjAsIDIzLCAyM10K
K01vdmUgbGVmdCBieSBvbmUgd29yZAorImFiYyBkZWYgWlFCIFJJRyB1dncgeHl6IlsyMCwgMjAs
IDE2LCAxMSwgNCwgNCwgMF0gICAgRkFJTCBleHBlY3RlZDogWzIwLCAxNiwgMTEsIDgsIDQsIDAs
IDBdCitUZXN0IDYsIFJUTDoKK01vdmUgbGVmdCBieSBvbmUgd29yZAorImFiYyBkZWYgWlFCIFJJ
RyB1dncgeHl6IlswLCAzLCA4LCAxMiwgMTYsIDE5LCAyM10gICAgRkFJTCBleHBlY3RlZDogWzMs
IDgsIDEyLCAxNiwgMTksIDIzLCAyM10KK01vdmUgcmlnaHQgYnkgb25lIHdvcmQKKyJhYmMgZGVm
IFpRQiBSSUcgdXZ3IHh5eiJbMTIsIDE5LCAxMiwgMTIsIDgsIDMsIDBdICAgIEZBSUwgZXhwZWN0
ZWQ6IFsxOSwgMTYsIDEyLCA4LCAzLCAwLCAwXQorVGVzdCA3LCBMVFI6CitNb3ZlIHJpZ2h0IGJ5
IG9uZSB3b3JkCisiWlFCIGFiYyBSSUciWzAsIDQsIDgsIDExXSAgICBGQUlMIGV4cGVjdGVkOiBb
NCwgOCwgMTEsIDExXQorTW92ZSBsZWZ0IGJ5IG9uZSB3b3JkCisiWlFCIGFiYyBSSUciWzQsIDQs
IDQsIDBdICAgIEZBSUwgZXhwZWN0ZWQ6IFs4LCA0LCAwLCAwXQorVGVzdCA4LCBSVEw6CitNb3Zl
IGxlZnQgYnkgb25lIHdvcmQKKyJaUUIgYWJjIFJJRyJbMCwgNCwgOCwgMTFdICAgIEZBSUwgZXhw
ZWN0ZWQ6IFs0LCA4LCAxMSwgMTFdCitNb3ZlIHJpZ2h0IGJ5IG9uZSB3b3JkCisiWlFCIGFiYyBS
SUciWzgsIDgsIDAsIDBdICAgIEZBSUwgZXhwZWN0ZWQ6IFs4LCA0LCAwLCAwXQorCkluZGV4OiBM
YXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9tb3ZlLWJ5LXdvcmQtdmlzdWFsbHkuaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9tb3ZlLWJ5LXdvcmQt
dmlzdWFsbHkuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0
aW9uL21vdmUtYnktd29yZC12aXN1YWxseS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE5
OCBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0i
Q29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiPgorPHN0eWxl
PgorZGl2LnRlc3QgeworICAgIC13ZWJraXQtdXNlci1tb2RpZnk6IHJlYWQtd3JpdGU7CisgICAg
cGFkZGluZzogNHB4OworICAgIGJvcmRlcjogMXB4IGRhc2hlZCBsaWdodGJsdWU7CisgICAgbWFy
Z2luOiA0cHggNHB4IDRweCAyNHB4OworICAgIG91dGxpbmU6IG5vbmU7CisgICAgZm9udC1mYW1p
bHk6IEx1Y2lkYSBHcmFuZGU7CisgICAgY291bnRlci1pbmNyZW1lbnQ6IHRlc3QtbnVtYmVyOwor
fQorZGl2LnRlc3Q6YmVmb3JlIHsgY29udGVudDogY291bnRlcih0ZXN0LW51bWJlcik7IHBvc2l0
aW9uOiBhYnNvbHV0ZTsgbGVmdDogOHB4OyBmb250LXNpemU6IHgtc21hbGw7IHRleHQtYWxpZ246
IHJpZ2h0OyB3aWR0aDogMjBweDsgfQorZGl2LnRlc3Qgc3BhbiB7IGJhY2tncm91bmQtY29sb3I6
ICNkZWY7IH0KK2Rpdi50ZXN0IGltZyB7IHdpZHRoOiAxZW07IGhlaWdodDogMWVtOyBiYWNrZ3Jv
dW5kLWNvbG9yOiBsaWdodGdyZWVuOyB9CitkaXYudGVzdCBpbWcgKyBpbWcgeyBiYWNrZ3JvdW5k
LWNvbG9yOiBsaWdodGJsdWU7IH0KK2Rpdi50ZXN0IGRpdiB7IGJvcmRlcjogMXB4IGRhc2hlZCBw
aW5rOyBwYWRkaW5nOiAzcHg7IGhlaWdodDogMmVtOyB9Cit0ZXN0X21vdmVfYnlfd29yZCB7ZGlz
cGxheTogbm9uZTt9Cis8L3N0eWxlPgorPHNjcmlwdD4KK3ZhciBtZXNzYWdlcyA9IFtdOworCitm
dW5jdGlvbiBsb2cobWVzc2FnZSkKK3sKKyAgICBtZXNzYWdlcy5wdXNoKG1lc3NhZ2UpOworfQor
CitmdW5jdGlvbiBmbHVzaExvZygpCit7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNv
bnNvbGUiKS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShtZXNzYWdlcy5qb2lu
KCIiKSkpOworfQorCitmdW5jdGlvbiBjYXJldENvb3JkaW5hdGVzKCkKK3sKKyAgICBpZiAoIXdp
bmRvdy50ZXh0SW5wdXRDb250cm9sbGVyKQorICAgICAgICByZXR1cm4geyB4OiAwLCB5IDowIH07
CisgICAgdmFyIGNhcmV0UmVjdCA9IHRleHRJbnB1dENvbnRyb2xsZXIuZmlyc3RSZWN0Rm9yQ2hh
cmFjdGVyUmFuZ2UodGV4dElucHV0Q29udHJvbGxlci5zZWxlY3RlZFJhbmdlKClbMF0sIDApOwor
ICAgIHJldHVybiB7IHg6IGNhcmV0UmVjdFswXSwgeTogY2FyZXRSZWN0WzFdIH07Cit9CisKKwor
ZnVuY3Rpb24gZm9sZChzdHJpbmcpCit7CisgICAgdmFyIHJlc3VsdCA9ICIiOworICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aDsgKytpKSB7CisgICAgICAgIHZhciBjaGFyID0g
c3RyaW5nLmNoYXJDb2RlQXQoaSk7CisgICAgICAgIGlmIChjaGFyID49IDB4MDVkMCkKKyAgICAg
ICAgICAgIGNoYXIgLT0gMHgwNThmOworICAgICAgICBlbHNlIGlmIChjaGFyID09IDEwKSB7Cisg
ICAgICAgICAgICByZXN1bHQgKz0gIlxcbiI7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgfQorICAgICAgICByZXN1bHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjaGFyKTsKKyAgICB9
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZnVuY3Rpb24gbG9nUG9zaXRpb25zKHBvc2l0aW9u
cykKK3sKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvc2l0aW9ucy5sZW5ndGg7ICsraSkgewor
ICAgICAgICBpZiAoaSkgeworICAgICAgICAgICAgaWYgKHBvc2l0aW9uc1tpXS5ub2RlICE9IHBv
c2l0aW9uc1tpIC0gMV0ubm9kZSkKKyAgICAgICAgICAgICAgICBsb2coIl0iKTsKKyAgICAgICAg
ICAgIGxvZygiLCAiKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWkgfHwgcG9zaXRpb25zW2ld
Lm5vZGUgIT0gcG9zaXRpb25zW2kgLSAxXS5ub2RlKQorICAgICAgICAgICAgbG9nKChwb3NpdGlv
bnNbaV0ubm9kZSBpbnN0YW5jZW9mIFRleHQgPyAnIicgKyBmb2xkKHBvc2l0aW9uc1tpXS5ub2Rl
LmRhdGEpICsgJyInIDogIjwiICsgcG9zaXRpb25zW2ldLm5vZGUudGFnTmFtZSArICI+IikgKyAi
WyIpOworICAgICAgICBsb2cocG9zaXRpb25zW2ldLm9mZnNldCk7CisgICAgfQorICAgIGxvZygi
XSIpOworfQorCit2YXIgd29yZEJyZWFrczsKKworZnVuY3Rpb24gdmFsaWRhdGVEYXRhKHBvc2l0
aW9ucykKK3sKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHdvcmRCcmVha3MubGVuZ3RoIC0gMTsg
KytpKSB7CisgICAgICAgIGlmIChwb3NpdGlvbnNbaV0ub2Zmc2V0ICE9IHdvcmRCcmVha3NbaSAr
IDFdKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoaSAh
PSB3b3JkQnJlYWtzLmxlbmd0aCAtIDEgJiYgcG9zaXRpb25zW2ldICE9IHdvcmRCcmVha3NbaV0p
IHsKKyAgICAgICAgbG9nKCIgICAgRkFJTCBleHBlY3RlZDogWyIpOworICAgICAgICBmb3IgKHZh
ciBpID0gMTsgaSA8IHdvcmRCcmVha3MubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGxvZyh3
b3JkQnJlYWtzW2ldICsgIiwgIik7CisgICAgICAgIH0KKyAgICAgICAgbG9nKHdvcmRCcmVha3Nb
d29yZEJyZWFrcy5sZW5ndGggLSAxXSArICJdIik7CisgICAgfQorfQorCitmdW5jdGlvbiBjb2xs
ZWN0V29yZEJyZWFrcyh0ZXN0LCBzZWFyY2hEaXJlY3Rpb24pCit7CisgICAgaWYgKHNlYXJjaERp
cmVjdGlvbiA9PSAicmlnaHQiKSB7CisgICAgICAgIGlmICh0ZXN0LmdldEF0dHJpYnV0ZSgiZGly
IikgPT0gJ2x0cicpIAorICAgICAgICAgICAgd29yZEJyZWFrcyA9IHRlc3QudGl0bGUuc3BsaXQo
InwiKVswXS5zcGxpdCgiICIpOworICAgICAgICBlbHNlIAorICAgICAgICAgICAgd29yZEJyZWFr
cyA9IHRlc3QudGl0bGUuc3BsaXQoInwiKVsxXS5zcGxpdCgiICIpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGlmICh0ZXN0LmdldEF0dHJpYnV0ZSgiZGlyIikgPT0gJ2x0cicpIAorICAgICAgICAg
ICAgd29yZEJyZWFrcyA9IHRlc3QudGl0bGUuc3BsaXQoInwiKVsxXS5zcGxpdCgiICIpOworICAg
ICAgICBlbHNlIAorICAgICAgICAgICAgd29yZEJyZWFrcyA9IHRlc3QudGl0bGUuc3BsaXQoInwi
KVswXS5zcGxpdCgiICIpOworICAgIH0KK30KKworZnVuY3Rpb24gbW92ZUJ5V29yZChzZWwsIHRl
c3QsIHNlYXJjaERpcmVjdGlvbiwgZGlyKQoreworICAgIGxvZygiTW92ZSAiICsgc2VhcmNoRGly
ZWN0aW9uICsgIiBieSBvbmUgd29yZFxuIik7CisgICAgdmFyIHByZXZPZmZzZXQgPSBzZWwuYW5j
aG9yT2Zmc2V0OworICAgIHZhciBub2RlID0gc2VsLmFuY2hvck5vZGU7CisgICAgY29sbGVjdFdv
cmRCcmVha3ModGVzdCwgc2VhcmNoRGlyZWN0aW9uKTsKKyAgICBzZWwuc2V0UG9zaXRpb24obm9k
ZSwgd29yZEJyZWFrc1swXSk7CisgICAgdmFyIHBvc2l0aW9ucyA9IFtdOworICAgIGZvciAodmFy
IGluZGV4ID0gMTsgaW5kZXggPCB3b3JkQnJlYWtzLmxlbmd0aDsgKytpbmRleCkgeworICAgICAg
ICBzZWwubW9kaWZ5KCJtb3ZlIiwgc2VhcmNoRGlyZWN0aW9uLCAiLXdlYmtpdC12aXN1YWwtd29y
ZCIpOworICAgICAgICBwb3NpdGlvbnMucHVzaCh7IG5vZGU6IHNlbC5hbmNob3JOb2RlLCBvZmZz
ZXQ6IHNlbC5hbmNob3JPZmZzZXQsIHBvaW50OiBjYXJldENvb3JkaW5hdGVzKCkgfSk7CisgICAg
ICAgIHNlbC5zZXRQb3NpdGlvbihub2RlLCB3b3JkQnJlYWtzW2luZGV4XSk7CisgICAgfQorICAg
IHNlbC5tb2RpZnkoIm1vdmUiLCBzZWFyY2hEaXJlY3Rpb24sICItd2Via2l0LXZpc3VhbC13b3Jk
Iik7CisgICAgcG9zaXRpb25zLnB1c2goeyBub2RlOiBzZWwuYW5jaG9yTm9kZSwgb2Zmc2V0OiBz
ZWwuYW5jaG9yT2Zmc2V0LCBwb2ludDogY2FyZXRDb29yZGluYXRlcygpIH0pOworICAgIGxvZ1Bv
c2l0aW9ucyhwb3NpdGlvbnMpOworICAgIHZhbGlkYXRlRGF0YShwb3NpdGlvbnMpOworICAgIGxv
ZygiXG4iKTsKK30KKworZnVuY3Rpb24gbW92ZUJ5V29yZEZvckV2ZXJ5UG9zaXRpb24oc2VsLCB0
ZXN0LCBkaXIpCit7CisgICAgLy8gQ2hlY2sgY3RybC1yaWdodC1hcnJvdyB3b3JrcyBmb3IgZXZl
cnkgcG9zaXRpb24uCisgICAgc2VsLnNldFBvc2l0aW9uKHRlc3QsIDApOworICAgIHZhciBkaXJl
Y3Rpb24gPSAicmlnaHQiOworICAgIGlmIChkaXIgPT0gInJ0bCIpCisgICAgICAgIGRpcmVjdGlv
biA9ICJsZWZ0IjsgICAgCisgICAgbW92ZUJ5V29yZChzZWwsIHRlc3QsIGRpcmVjdGlvbiwgZGly
KTsgICAgCisgICAgLy8gQ2hlY2sgY3RybC1sZWZ0LWFycm93IHdvcmtzIGZvciBldmVyeSBwb3Np
dGlvbi4KKyAgICBpZiAoZGlyID09ICJsdHIiKQorICAgICAgICBkaXJlY3Rpb24gPSAibGVmdCI7
CisgICAgZWxzZQorICAgICAgICBkaXJlY3Rpb24gPSAicmlnaHQiOyAgICAKKyAgICBtb3ZlQnlX
b3JkKHNlbCwgdGVzdCwgZGlyZWN0aW9uLCBkaXIpOyAgICAKK30KKworZnVuY3Rpb24gcnVuTW92
ZUxlZnRSaWdodCh0ZXN0cywgdW5pdCkKK3sKKyAgICB2YXIgc2VsID0gZ2V0U2VsZWN0aW9uKCk7
CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXN0cy5sZW5ndGg7ICsraSkgeworICAgICAgICB2
YXIgcG9zaXRpb25zTW92aW5nUmlnaHQ7CisgICAgICAgIHZhciBwb3NpdGlvbnNNb3ZpbmdMZWZ0
OworCisgICAgICAgIGlmICh0ZXN0c1tpXS5nZXRBdHRyaWJ1dGUoImRpciIpID09ICdsdHInKQor
ICAgICAgICB7CisgICAgICAgICAgICBsb2coIlRlc3QgIiArIChpICsgMSkgKyAiLCBMVFI6XG4i
KTsKKyAgICAgICAgICAgIG1vdmVCeVdvcmRGb3JFdmVyeVBvc2l0aW9uKHNlbCwgdGVzdHNbaV0s
ICJsdHIiKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxvZygiVGVzdCAiICsgKGkg
KyAxKSArICIsIFJUTDpcbiIpOworICAgICAgICAgICAgbW92ZUJ5V29yZEZvckV2ZXJ5UG9zaXRp
b24oc2VsLCB0ZXN0c1tpXSwgInJ0bCIpOworICAgICAgICB9CisKKyAgICB9CisgICAgZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoInRlc3RNb3ZlQnlXb3JkIikuc3R5bGUuZGlzcGxheSA9ICJub25l
IjsKK30KKworZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICBsb2coIlxuPT09PT09PT0gTW92ZSBC
eSBXb3JkID09PT1cbiIpOworICAgIHZhciB0ZXN0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlD
bGFzc05hbWUoInRlc3RfbW92ZV9ieV93b3JkIik7CisgICAgcnVuTW92ZUxlZnRSaWdodCh0ZXN0
cywgIndvcmQiKTsKK30KKworb25sb2FkID0gZnVuY3Rpb24oKSB7CisgICAgdHJ5IHsKKyAgICAg
ICAgcnVuVGVzdCgpOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGZsdXNoTG9nKCk7CisgICAg
fQorfTsKKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGRp
diBpZD0idGVzdE1vdmVCeVdvcmQiPgorPCEtLSBUaGUgbnVtYmVycyBwdXQgaW4gdGl0bGUgYXJl
IHN0YXJ0aW5nIHdvcmQgYm91bmRhcmllcy4KK1RoZSBudW1iZXJzIHByaW50ZWQgb3V0IGluIHRo
ZSBvdXRwdXQgYXJlIGVuZGluZyB3b3JkIGJvdW5kYXJpZXMuIC0tPgorPGRpdiBkaXI9bHRyIGNs
YXNzPSJ0ZXN0X21vdmVfYnlfd29yZCIgdGl0bGU9IjAgNCA4IDEyIDE2IDE5fDE5IDE2IDEyIDgg
NCAwIiBjb250ZW50ZWRpdGFibGU+YWJjIGRlZiBoaWogb3BxIHJzdDwvZGl2PgorPGRpdiBkaXI9
cnRsIGNsYXNzPSJ0ZXN0X21vdmVfYnlfd29yZCIgdGl0bGU9IjAgMTUgMTEgNyAzIDE5fDE5IDMg
NyAxMSAxNSAwIiBjb250ZW50ZWRpdGFibGU+YWJjIGRlZiBoaWogb3BxIHJzdDwvZGl2PgorPGRp
diBkaXI9bHRyIGNsYXNzPSJ0ZXN0X21vdmVfYnlfd29yZCIgdGl0bGU9IjAgMTUgMTEgNyAzIDE5
fDE5IDMgNyAxMSAxNSAwIiBjb250ZW50ZWRpdGFibGU+16nXqdepINeg16DXoCDXkdeR15Eg15LX
kteSINen16fXpzwvZGl2PgorPGRpdiBkaXI9cnRsIGNsYXNzPSJ0ZXN0X21vdmVfYnlfd29yZCIg
dGl0bGU9IjAgNCA4IDEyIDE2IDE5fDE5IDE2IDEyIDggNCAwIiBjb250ZW50ZWRpdGFibGU+16nX
qdepINeg16DXoCDXkdeR15Eg15LXkteSINen16fXpzwvZGl2PgorPGRpdiBkaXI9bHRyIGNsYXNz
PSJ0ZXN0X21vdmVfYnlfd29yZCIgdGl0bGU9IjAgNCA4IDExIDE2IDIwIDIzfDIzIDIwIDE2IDEx
IDggNCAwIiBjb250ZW50ZWRpdGFibGU+YWJjIGRlZiDXqdeg15Eg16HXmNeWIHV2dyB4eXo8L2Rp
dj4KKzxkaXYgZGlyPXJ0bCBjbGFzcz0idGVzdF9tb3ZlX2J5X3dvcmQiIHRpdGxlPSIwIDMgOCAx
MiAxNiAxOSAyM3wyMyAxOSAxNiAxMiA4IDMgMCIgY29udGVudGVkaXRhYmxlPmFiYyBkZWYg16nX
oNeRINeh15jXliB1dncgeHl6PC9kaXY+Cis8ZGl2IGRpcj1sdHIgY2xhc3M9InRlc3RfbW92ZV9i
eV93b3JkIiB0aXRsZT0iMCA0IDggMTF8MTEgOCA0IDAiIGNvbnRlbnRlZGl0YWJsZT7Xqdeg15Eg
YWJjINeh15jXljwvZGl2PgorPGRpdiBkaXI9cnRsIGNsYXNzPSJ0ZXN0X21vdmVfYnlfd29yZCIg
dGl0bGU9IjAgNCA4IDExfDExIDggNCAwIiBjb250ZW50ZWRpdGFibGU+16nXoNeRIGFiYyDXodeY
15Y8L2Rpdj4KKzwvZGl2PgorCis8cHJlIGlkPSJjb25zb2xlIj48L3ByZT4KKzwvYm9keT4KKzwv
aHRtbD4K
</data>
<flag name="review"
          id="80155"
          type_id="1"
          status="+"
          setter="rniwa"
    />
          </attachment>
      

    </bug>

</bugzilla>