<?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>43166</bug_id>
          
          <creation_ts>2010-07-28 18:17:27 -0700</creation_ts>
          <short_desc>InsertOrderedList does not switch the list type properly when it has an inner list.</short_desc>
          <delta_ts>2010-07-29 23:43:05 -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>Blocker</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>33668</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>darin</cc>
    
    <cc>enrica</cc>
    
    <cc>jparent</cc>
    
    <cc>justin.garcia</cc>
    
    <cc>ojan</cc>
    
    <cc>tkent</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>257507</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-07-28 18:17:27 -0700</bug_when>
    <thetext>Reproduction steps:
1. Go to http://www.mozilla.org/editor/midasdemo/
2. Type in &lt;ul&gt;&lt;li&gt;hello&lt;/li&gt;&lt;ol&gt;&lt;li&gt;world&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;webkit&lt;/li&gt;&lt;/ul&gt; in HTML mode.
The HTML is an unordered list with ordered list in the middle.
3. Insert ordered list.

Expected result:
&lt;ol&gt;&lt;li&gt;hello&lt;/li&gt;&lt;ol&gt;&lt;li&gt;world&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;webkit&lt;/li&gt;&lt;/ol&gt;
(outer list is converted to an ordered list)

Actual result:
&lt;ol&gt;&lt;li&gt;hello&lt;/li&gt;&lt;/ol&gt;&lt;ul&gt;&lt;li&gt;world&lt;/li&gt;&lt;/ul&gt;&lt;ol&gt;&lt;li&gt;webkit&lt;/li&gt;&lt;/ol&gt;
(outer list is split into two ordered list and inner list is converted to unordered list)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257523</commentid>
    <comment_count>1</comment_count>
      <attachid>62913</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-07-28 19:47:02 -0700</bug_when>
    <thetext>Created attachment 62913
fixes the bug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257796</commentid>
    <comment_count>2</comment_count>
      <attachid>62913</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-07-29 11:37:41 -0700</bug_when>
    <thetext>Comment on attachment 62913
fixes the bug

Looks good. A few comments.

&gt; +    if (previousList &amp;&amp; previousList-&gt;isHTMLElement() &amp;&amp; canMergeLists(previousList, listElement))

&gt; +    if (nextList &amp;&amp; nextList-&gt;isHTMLElement() &amp;&amp; canMergeLists(listElement, nextList)) {

If we need an isHTMLElement check here, then why does canMergeLists take an Element*?

If canMergeLists takes an Element*, then should it do the isHTMLElement check itself?

&gt; +    const QualifiedName listTag = (m_type == OrderedList) ? olTag : ulTag;

This should be const QualifiedName&amp; rather than const QualifiedName, to generate slightly more efficient code and avoid a ref/deref of the tag.

&gt; +    RefPtr&lt;Range&gt; currentSelection = endingSelection().firstRange();
&gt; +    doApplyForSingleParagraph(false, listTag, currentSelection.get());

You could do this without a local variable if you think that would be more readable.

    doApplyForSingleParagraph(false, listTag, endingSelection().firstRange().get());

&gt; +    bool selectionHasListOfType(const VisiblePosition&amp; start, const VisiblePosition&amp; end, const QualifiedName&amp;);

Too bad we have to pass two VisiblePosition. It would be nice if &quot;selection&quot; was a single argument.

&gt; +    HTMLElement* mergeWithNeighboringLists(HTMLElement*);

Using raw pointers in cases like this can be unsafe if there are DOM mutation events involved. You might need the result to be PassRefPtr in case the list is destroyed during the merging process.

Do the new tests really cover all the branches in the code? I see lots of branches in the code and only a couple test cases. I don&apos;t think there is enough test coverage here.

review- so you can at least fix the const QualifiedName&amp; thing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257806</commentid>
    <comment_count>3</comment_count>
      <attachid>62975</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-07-29 12:27:56 -0700</bug_when>
    <thetext>Created attachment 62975
fixed per darin&apos;s comments

(In reply to comment #2)
&gt; (From update of attachment 62913 [details])
&gt; Looks good. A few comments.

Thanks for the comments.

&gt; &gt; +    if (previousList &amp;&amp; previousList-&gt;isHTMLElement() &amp;&amp; canMergeLists(previousList, listElement))
&gt; 
&gt; &gt; +    if (nextList &amp;&amp; nextList-&gt;isHTMLElement() &amp;&amp; canMergeLists(listElement, nextList)) {
&gt; 
&gt; If we need an isHTMLElement check here, then why does canMergeLists take an Element*?

Good point. So the reason canMergeLists takes two Element* is because previousSiblingElement/nextSiblingElement returns Element and having to check that they are indeed HTMLElement is usually redundant since we check the tag name in canMergeLists, and one of the list is created by us or returned by enclosingList.  Added a check to make sure they&apos;re indeed HTMLElement in canMergeLists.

&gt; If canMergeLists takes an Element*, then should it do the isHTMLElement check itself?
&gt; 
&gt; &gt; +    const QualifiedName listTag = (m_type == OrderedList) ? olTag : ulTag;
&gt; 
&gt; This should be const QualifiedName&amp; rather than const QualifiedName, to generate slightly more efficient code and avoid a ref/deref of the tag.

Ah! I didn&apos;t catch that. Fixed.

&gt; &gt; +    RefPtr&lt;Range&gt; currentSelection = endingSelection().firstRange();
&gt; &gt; +    doApplyForSingleParagraph(false, listTag, currentSelection.get());
&gt; 
&gt; You could do this without a local variable if you think that would be more readable.
&gt; 
&gt;     doApplyForSingleParagraph(false, listTag, endingSelection().firstRange().get());

Mn.. but doesn&apos;t that lead to a memory leak since firstRange() returns a PassRefPtr?  Because I&apos;m passing the same range object to multiple doApplyForSingleParagraph in the case of range selection, I don&apos;t really want doApplyForSingleParagraph to take PassRefPtr.

&gt; &gt; +    bool selectionHasListOfType(const VisiblePosition&amp; start, const VisiblePosition&amp; end, const QualifiedName&amp;);
&gt; 
&gt; Too bad we have to pass two VisiblePosition. It would be nice if &quot;selection&quot; was a single argument.

Changed to take VisibleSelection.

&gt; &gt; +    HTMLElement* mergeWithNeighboringLists(HTMLElement*);
&gt; 
&gt; Using raw pointers in cases like this can be unsafe if there are DOM mutation events involved. You might need the result to be PassRefPtr in case the list is destroyed during the merging process.

Fixed.

&gt; Do the new tests really cover all the branches in the code? I see lots of branches in the code and only a couple test cases. I don&apos;t think there is enough test coverage here.

Sorry, I forgot to fix the test.  I&apos;m adding two tests here because the list child added by fixOrphanedListChild is supposed to be merged with surrounding lists and this was not tested.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257898</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-07-29 14:46:23 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; &gt; &gt; +    RefPtr&lt;Range&gt; currentSelection = endingSelection().firstRange();
&gt; &gt; &gt; +    doApplyForSingleParagraph(false, listTag, currentSelection.get());
&gt; &gt; 
&gt; &gt; You could do this without a local variable if you think that would be more readable.
&gt; &gt; 
&gt; &gt;     doApplyForSingleParagraph(false, listTag, endingSelection().firstRange().get());
&gt; 
&gt; Mn.. but doesn&apos;t that lead to a memory leak since firstRange() returns a PassRefPtr?  Because I&apos;m passing the same range object to multiple doApplyForSingleParagraph in the case of range selection, I don&apos;t really want doApplyForSingleParagraph to take PassRefPtr.

No, it does not lead to a memory leak. The PassRefPtr that is the result of the firstRange function goes out of scope after the function returns, and that&apos;s when it calls deref.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257918</commentid>
    <comment_count>5</comment_count>
      <attachid>63000</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-07-29 15:26:28 -0700</bug_when>
    <thetext>Created attachment 63000
made the call to endingSelection().firstRange().get() inline

(In reply to comment #4)
&gt; &gt; Mn.. but doesn&apos;t that lead to a memory leak since firstRange() returns a PassRefPtr?  Because I&apos;m passing the same range object to multiple doApplyForSingleParagraph in the case of range selection, I don&apos;t really want doApplyForSingleParagraph to take PassRefPtr.
&gt; 
&gt; No, it does not lead to a memory leak. The PassRefPtr that is the result of the firstRange function goes out of scope after the function returns, and that&apos;s when it calls deref.

I see. Thanks for the clarification. Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257961</commentid>
    <comment_count>6</comment_count>
      <attachid>63000</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-07-29 16:30:13 -0700</bug_when>
    <thetext>Comment on attachment 63000
made the call to endingSelection().firstRange().get() inline

&gt; +PassRefPtr&lt;HTMLElement&gt; InsertListCommand::mergeWithNeighboringLists(HTMLElement* listElement)
&gt; +{
&gt; +    Element* previousList = listElement-&gt;previousElementSibling();
&gt; +    Element* nextList = listElement-&gt;nextElementSibling();
&gt; +    if (canMergeLists(previousList, listElement))
&gt; +        mergeIdenticalElements(previousList, listElement);
&gt; +    if (canMergeLists(listElement, nextList)) {
&gt; +        mergeIdenticalElements(listElement, nextList);
&gt; +        return static_cast&lt;HTMLElement*&gt;(nextList);
&gt; +    }
&gt; +    return listElement;
&gt; +}

Thanks for changing the function result into a PassRefPtr.

If DOM mutation events can run while we make changes, then this code is unsafe. After either of the two calls to mergeIdenticalElements returns, listElement or nextList might be pointing to a deleted object. Thus, they should both be RefPtr or PassRefPtr.

Calling nextElementSibling after handling previousList would be another way of avoiding using a possibly-bad nextList pointer, but it wouldn&apos;t help you safely return nextList after calling mergeIdenticalElements, so I think you need a RefPtr.

The patch otherwise looks great.

review- because I&apos;d like you to use RefPtr more to avoid potential use-after-free as explained above</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258003</commentid>
    <comment_count>7</comment_count>
      <attachid>63017</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-07-29 17:34:13 -0700</bug_when>
    <thetext>Created attachment 63017
fixed mergeWithNeighboringLists

(In reply to comment #6)
&gt; If DOM mutation events can run while we make changes, then this code is unsafe. After either of the two calls to mergeIdenticalElements returns, listElement or nextList might be pointing to a deleted object. Thus, they should both be RefPtr or PassRefPtr.

A good point.

&gt; Calling nextElementSibling after handling previousList would be another way of avoiding using a possibly-bad nextList pointer, but it wouldn&apos;t help you safely return nextList after calling mergeIdenticalElements, so I think you need a RefPtr.

Oh right, I feel like I encountered a bug like that a year ago.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258034</commentid>
    <comment_count>8</comment_count>
      <attachid>63017</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-07-29 20:03:32 -0700</bug_when>
    <thetext>Comment on attachment 63017
fixed mergeWithNeighboringLists

&gt; +PassRefPtr&lt;HTMLElement&gt; InsertListCommand::mergeWithNeighboringLists(PassRefPtr&lt;HTMLElement&gt; listElement)
&gt; +{
&gt; +    RefPtr&lt;HTMLElement&gt; listNode = listElement;

More conventional naming would be to name the PassRefPtr passedListElement and name the local variable listElement. But given the context, I would use the name passedList and list. In this function everything is an element and there&apos;s no need to use the word element.

&gt; +        return listNode;

It&apos;s slightly more efficient if you return listNode.release() here.

&gt; +    return listNode;

It&apos;s slightly more efficient if you return listNode.release() here.

&gt; +            RefPtr&lt;HTMLElement&gt; listElement = createHTMLElement(document(), listTag);
&gt; +            insertNodeBefore(listElement, listNode);

The local variable names here are not all that good. Here, listNode is an enclosing HTML list element and listElement is a newly created HTML list element. Both are lists, both are elements, both are nodes, so it&apos;s confusing to have one named listNode and the other named listElement. It&apos;s like naming one variable startNumber and another variable startInteger when they contain two distinct values.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258043</commentid>
    <comment_count>9</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-07-29 20:56:27 -0700</bug_when>
    <thetext>Will commit with new expected results since http://trac.webkit.org/changeset/64303 has changed the format of dumpAsMarkup tests.

(In reply to comment #8)
&gt; (From update of attachment 63017 [details])
&gt; &gt; +PassRefPtr&lt;HTMLElement&gt; InsertListCommand::mergeWithNeighboringLists(PassRefPtr&lt;HTMLElement&gt; listElement)
&gt; &gt; +{
&gt; &gt; +    RefPtr&lt;HTMLElement&gt; listNode = listElement;
&gt; 
&gt; More conventional naming would be to name the PassRefPtr passedListElement and name the local variable listElement. But given the context, I would use the name passedList and list. In this function everything is an element and there&apos;s no need to use the word element.

Fixed.

&gt; &gt; +        return listNode;
&gt; 
&gt; It&apos;s slightly more efficient if you return listNode.release() here.
&gt; 
&gt; &gt; +    return listNode;
&gt; 
&gt; It&apos;s slightly more efficient if you return listNode.release() here.

Fixed.

&gt; &gt; +            RefPtr&lt;HTMLElement&gt; listElement = createHTMLElement(document(), listTag);
&gt; &gt; +            insertNodeBefore(listElement, listNode);
&gt; 
&gt; The local variable names here are not all that good. Here, listNode is an enclosing HTML list element and listElement is a newly created HTML list element. Both are lists, both are elements, both are nodes, so it&apos;s confusing to have one named listNode and the other named listElement. It&apos;s like naming one variable startNumber and another variable startInteger when they contain two distinct values.

Yeah, I agree. That was very confusing. Renamed listElement as newList.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258073</commentid>
    <comment_count>10</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-07-29 23:43:05 -0700</bug_when>
    <thetext>The patch landed as http://trac.webkit.org/changeset/64337, closing the bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62913</attachid>
            <date>2010-07-28 19:47:02 -0700</date>
            <delta_ts>2010-07-29 12:27:56 -0700</delta_ts>
            <desc>fixes the bug</desc>
            <filename>fix43166</filename>
            <type>text/plain</type>
            <size>17836</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NDI1NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjkgQEAKKzIwMTAtMDctMjggIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW5z
ZXJ0T3JkZXJlZExpc3QgZG9lcyBub3Qgc3dpdGNoIHRoZSBsaXN0IHR5cGUgcHJvcGVybHkgd2hl
biBpdCBoYXMgYW4gaW5uZXIgbGlzdC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQzMTY2CisKKyAgICAgICAgVGhlIGJ1ZyB3YXMgY2F1c2VkIGJ5IGZv
cmNlZENyZWF0ZUxpc3Qgd2FzIG5vdCBzZXQgdG8gdHJ1ZSB3aGVuIHRoZSBzdGFydCBhbmQgdGhl
IGVuZAorICAgICAgICBvZiB0aGUgc2VsZWN0aW9uIGxpZXMgaW4gdGhlIHNhbWUgbGlzdC4gQWRk
ZWQgc2VsZWN0aW9uSGFzTGlzdE9mVHlwZSB0byBmaXggdGhpcyBwcm9ibGVtLgorCisgICAgICAg
IFdlYktpdCB1c2VkIG5vdCB0byBjb252ZXJ0IHRoZSBvdXRlciBsaXN0cyBldmVuIHdoZW4gdGhl
IGxpc3QgaXMgZnVsbHkgc2VsZWN0ZWQuCisgICAgICAgIENvcnJlY3RlZCB0aGlzIGJlaGF2aW9y
IGJ5IGNvbnZlcnRpbmcgdGhlIGVudGlyZSBsaXN0IGF0IG9uY2Ugd2hlbiB0aGUgbGlzdCBpcyBm
dWxseSBzZWxlY3RlZC4KKyAgICAgICAgVG8gZGVjaWRlIHdoZXRoZXIgb3Igbm90IGEgbGlzdCBp
cyBmdWxseSBzZWxlY3RlZCwgYWRkZWQgY3VycmVudFNlbGVjdGlvbiBhcmd1bWVudCB0byBkb0Fw
cGx5Rm9yU2luZ2xlUGFyYWdyYXBoLgorCisgICAgICAgIFRlc3Q6IGVkaXRpbmcvZXhlY0NvbW1h
bmQvc3dpdGNoLWxpc3QtdHlwZS13aXRoLWlubmVyLWxpc3QuaHRtbAorCisgICAgICAgICogZWRp
dGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRMaXN0
Q29tbWFuZDo6bWVyZ2VXaXRoTmVpZ2hib3JpbmdMaXN0cyk6IEV4dHJhY3RlZCB0aGUgY29kZSB0
byBtZXJnZSBsaXN0cy4KKyAgICAgICAgKFdlYkNvcmU6Okluc2VydExpc3RDb21tYW5kOjpzZWxl
Y3Rpb25IYXNMaXN0T2ZUeXBlKTogRGVjaWRlcyB3aGV0aGVyIHRoZSBzZWxlY3Rpb24gaGFzIHRo
ZSBsaXN0IG9mIHRoZSBzcGVjaWZpZWQgdHlwZS4KKyAgICAgICAgKFdlYkNvcmU6Okluc2VydExp
c3RDb21tYW5kOjpkb0FwcGx5KTogQ2FsbHMgc2VsZWN0aW9uSGFzTGlzdE9mVHlwZS4KKyAgICAg
ICAgKFdlYkNvcmU6Okluc2VydExpc3RDb21tYW5kOjpkb0FwcGx5Rm9yU2luZ2xlUGFyYWdyYXBo
KTogU2VlIGFib3ZlLgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0TGlzdENvbW1hbmQ6Omxpc3Rp
ZnlQYXJhZ3JhcGgpOiBDYWxscyBtZXJnZVdpdGhOZWlnaGJvcmluZ0xpc3RzLgorICAgICAgICAq
IGVkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuaDoKKyAgICAgICAgKiBlZGl0aW5nL2h0bWxlZGl0
aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzTm9kZVZpc2libHlDb250YWluZWRXaXRoaW4p
OiBXb3JrcyBwcm9wZXJseSB3aGVuIG9uZSBlbmQgaXMgaW5zaWRlIHRoZSByYW5nZS4KKwogMjAx
MC0wNy0yOCAgQWxleCBOaWNvbGFvdSAgPGFuaWNvbGFvQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBPamFuIFZhZmFpLgpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0luc2VydExp
c3RDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGlzdENv
bW1hbmQuY3BwCShyZXZpc2lvbiA2NDIxOSkKKysrIFdlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0
Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDYgKzU0LDM1IEBAIEhUTUxFbGVtZW50
KiBJbnNlcnRMaXN0Q29tbWFuZDo6Zml4T3JwaGEKICAgICByZXR1cm4gbGlzdEVsZW1lbnQuZ2V0
KCk7CiB9CiAKK0hUTUxFbGVtZW50KiBJbnNlcnRMaXN0Q29tbWFuZDo6bWVyZ2VXaXRoTmVpZ2hi
b3JpbmdMaXN0cyhIVE1MRWxlbWVudCogbGlzdEVsZW1lbnQpCit7CisgICAgRWxlbWVudCogcHJl
dmlvdXNMaXN0ID0gbGlzdEVsZW1lbnQtPnByZXZpb3VzRWxlbWVudFNpYmxpbmcoKTsKKyAgICBF
bGVtZW50KiBuZXh0TGlzdCA9IGxpc3RFbGVtZW50LT5uZXh0RWxlbWVudFNpYmxpbmcoKTsKKyAg
ICBpZiAocHJldmlvdXNMaXN0ICYmIHByZXZpb3VzTGlzdC0+aXNIVE1MRWxlbWVudCgpICYmIGNh
bk1lcmdlTGlzdHMocHJldmlvdXNMaXN0LCBsaXN0RWxlbWVudCkpCisgICAgICAgIG1lcmdlSWRl
bnRpY2FsRWxlbWVudHMocHJldmlvdXNMaXN0LCBsaXN0RWxlbWVudCk7CisgICAgaWYgKG5leHRM
aXN0ICYmIG5leHRMaXN0LT5pc0hUTUxFbGVtZW50KCkgJiYgY2FuTWVyZ2VMaXN0cyhsaXN0RWxl
bWVudCwgbmV4dExpc3QpKSB7CisgICAgICAgIG1lcmdlSWRlbnRpY2FsRWxlbWVudHMobGlzdEVs
ZW1lbnQsIG5leHRMaXN0KTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxFbGVtZW50
Kj4obmV4dExpc3QpOworICAgIH0KKyAgICByZXR1cm4gbGlzdEVsZW1lbnQ7Cit9CisKK2Jvb2wg
SW5zZXJ0TGlzdENvbW1hbmQ6OnNlbGVjdGlvbkhhc0xpc3RPZlR5cGUoY29uc3QgVmlzaWJsZVBv
c2l0aW9uJiBzdGFydCwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBlbmQsIGNvbnN0IFF1YWxpZmll
ZE5hbWUmIGxpc3RUYWcpCit7CisgICAgaWYgKCFlbmNsb3NpbmdMaXN0KHN0YXJ0LmRlZXBFcXVp
dmFsZW50KCkubm9kZSgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgVmlzaWJsZVBv
c2l0aW9uIHN0YXJ0T2ZDdXJyZW50UGFyYWdyYXBoID0gc3RhcnQ7CisgICAgd2hpbGUgKHN0YXJ0
T2ZDdXJyZW50UGFyYWdyYXBoLmlzTm90TnVsbCgpICYmIHN0YXJ0T2ZDdXJyZW50UGFyYWdyYXBo
ICE9IGVuZCkgeworICAgICAgICBFbGVtZW50KiBsaXN0Tm9kZSA9IGVuY2xvc2luZ0xpc3Qoc3Rh
cnRPZkN1cnJlbnRQYXJhZ3JhcGguZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCkpOworICAgICAgICBp
ZiAoIWxpc3ROb2RlIHx8ICFsaXN0Tm9kZS0+aGFzVGFnTmFtZShsaXN0VGFnKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgc3RhcnRPZkN1cnJlbnRQYXJhZ3JhcGggPSBzdGFy
dE9mTmV4dFBhcmFncmFwaChzdGFydE9mQ3VycmVudFBhcmFncmFwaCk7CisgICAgfQorCisgICAg
cmV0dXJuIHRydWU7Cit9CisKIEluc2VydExpc3RDb21tYW5kOjpJbnNlcnRMaXN0Q29tbWFuZChE
b2N1bWVudCogZG9jdW1lbnQsIFR5cGUgdHlwZSkgCiAgICAgOiBDb21wb3NpdGVFZGl0Q29tbWFu
ZChkb2N1bWVudCksIG1fdHlwZSh0eXBlKQogewpAQCAtODAsNiArMTA5LDcgQEAgdm9pZCBJbnNl
cnRMaXN0Q29tbWFuZDo6ZG9BcHBseSgpCiAgICAgaWYgKHZpc2libGVFbmQgIT0gdmlzaWJsZVN0
YXJ0ICYmIGlzU3RhcnRPZlBhcmFncmFwaCh2aXNpYmxlRW5kKSkKICAgICAgICAgc2V0RW5kaW5n
U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24odmlzaWJsZVN0YXJ0LCB2aXNpYmxlRW5kLnByZXZp
b3VzKHRydWUpKSk7CiAKKyAgICBjb25zdCBRdWFsaWZpZWROYW1lIGxpc3RUYWcgPSAobV90eXBl
ID09IE9yZGVyZWRMaXN0KSA/IG9sVGFnIDogdWxUYWc7CiAgICAgaWYgKGVuZGluZ1NlbGVjdGlv
bigpLmlzUmFuZ2UoKSkgewogICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IHNl
bGVjdGlvbkZvclBhcmFncmFwaEl0ZXJhdGlvbihlbmRpbmdTZWxlY3Rpb24oKSk7CiAgICAgICAg
IEFTU0VSVChzZWxlY3Rpb24uaXNSYW5nZSgpKTsKQEAgLTg4LDEwICsxMTgsOSBAQCB2b2lkIElu
c2VydExpc3RDb21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0
T2ZMYXN0UGFyYWdyYXBoID0gc3RhcnRPZlBhcmFncmFwaChlbmRPZlNlbGVjdGlvbik7CiAKICAg
ICAgICAgaWYgKHN0YXJ0T2ZQYXJhZ3JhcGgoc3RhcnRPZlNlbGVjdGlvbikgIT0gc3RhcnRPZkxh
c3RQYXJhZ3JhcGgpIHsKLSAgICAgICAgICAgIE5vZGUqIHN0YXJ0TGlzdCA9IGVuY2xvc2luZ0xp
c3Qoc3RhcnRPZlNlbGVjdGlvbi5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKSk7Ci0gICAgICAgICAg
ICBOb2RlKiBlbmRMaXN0ID0gZW5jbG9zaW5nTGlzdChlbmRPZlNlbGVjdGlvbi5kZWVwRXF1aXZh
bGVudCgpLm5vZGUoKSk7Ci0gICAgICAgICAgICBib29sIGZvcmNlQ3JlYXRlTGlzdCA9ICFzdGFy
dExpc3QgfHwgc3RhcnRMaXN0ICE9IGVuZExpc3Q7CisgICAgICAgICAgICBib29sIGZvcmNlQ3Jl
YXRlTGlzdCA9ICFzZWxlY3Rpb25IYXNMaXN0T2ZUeXBlKHN0YXJ0T2ZTZWxlY3Rpb24sIGVuZE9m
U2VsZWN0aW9uLCBsaXN0VGFnKTsKIAorICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiBjdXJyZW50
U2VsZWN0aW9uID0gZW5kaW5nU2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOwogICAgICAgICAgICAg
VmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZDdXJyZW50UGFyYWdyYXBoID0gc3RhcnRPZlNlbGVjdGlv
bjsKICAgICAgICAgICAgIHdoaWxlIChzdGFydE9mQ3VycmVudFBhcmFncmFwaCAhPSBzdGFydE9m
TGFzdFBhcmFncmFwaCkgewogICAgICAgICAgICAgICAgIC8vIGRvQXBwbHkoKSBtYXkgb3BlcmF0
ZSBvbiBhbmQgcmVtb3ZlIHRoZSBsYXN0IHBhcmFncmFwaCBvZiB0aGUgc2VsZWN0aW9uIGZyb20g
dGhlIGRvY3VtZW50IApAQCAtMTAyLDcgKzEzMSw3IEBAIHZvaWQgSW5zZXJ0TGlzdENvbW1hbmQ6
OmRvQXBwbHkoKQogICAgICAgICAgICAgICAgIGlmICghc3RhcnRPZkxhc3RQYXJhZ3JhcGguZGVl
cEVxdWl2YWxlbnQoKS5ub2RlKCktPmluRG9jdW1lbnQoKSkKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihzdGFydE9mQ3VycmVu
dFBhcmFncmFwaCk7Ci0gICAgICAgICAgICAgICAgZG9BcHBseUZvclNpbmdsZVBhcmFncmFwaChm
b3JjZUNyZWF0ZUxpc3QpOworICAgICAgICAgICAgICAgIGRvQXBwbHlGb3JTaW5nbGVQYXJhZ3Jh
cGgoZm9yY2VDcmVhdGVMaXN0LCBsaXN0VGFnLCBjdXJyZW50U2VsZWN0aW9uLmdldCgpKTsKIAog
ICAgICAgICAgICAgICAgIC8vIEZldGNoIHRoZSBzdGFydCBvZiB0aGUgc2VsZWN0aW9uIGFmdGVy
IG1vdmluZyB0aGUgZmlyc3QgcGFyYWdyYXBoLAogICAgICAgICAgICAgICAgIC8vIGJlY2F1c2Ug
bW92aW5nIHRoZSBwYXJhZ3JhcGggd2lsbCBpbnZhbGlkYXRlIHRoZSBvcmlnaW5hbCBzdGFydC4g
IApAQCAtMTE0LDcgKzE0Myw3IEBAIHZvaWQgSW5zZXJ0TGlzdENvbW1hbmQ6OmRvQXBwbHkoKQog
ICAgICAgICAgICAgICAgIHN0YXJ0T2ZDdXJyZW50UGFyYWdyYXBoID0gc3RhcnRPZk5leHRQYXJh
Z3JhcGgoZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkpOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKGVuZE9mU2VsZWN0aW9uKTsKLSAgICAgICAg
ICAgIGRvQXBwbHlGb3JTaW5nbGVQYXJhZ3JhcGgoZm9yY2VDcmVhdGVMaXN0KTsKKyAgICAgICAg
ICAgIGRvQXBwbHlGb3JTaW5nbGVQYXJhZ3JhcGgoZm9yY2VDcmVhdGVMaXN0LCBsaXN0VGFnLCBj
dXJyZW50U2VsZWN0aW9uLmdldCgpKTsKICAgICAgICAgICAgIC8vIEZldGNoIHRoZSBlbmQgb2Yg
dGhlIHNlbGVjdGlvbiwgZm9yIHRoZSByZWFzb24gbWVudGlvbmVkIGFib3ZlLgogICAgICAgICAg
ICAgZW5kT2ZTZWxlY3Rpb24gPSBlbmRpbmdTZWxlY3Rpb24oKS52aXNpYmxlRW5kKCk7CiAgICAg
ICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihzdGFydE9mU2VsZWN0
aW9uLCBlbmRPZlNlbGVjdGlvbikpOwpAQCAtMTIyLDI3ICsxNTEsNDQgQEAgdm9pZCBJbnNlcnRM
aXN0Q29tbWFuZDo6ZG9BcHBseSgpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBkb0FwcGx5Rm9y
U2luZ2xlUGFyYWdyYXBoKGZhbHNlKTsKKyAgICBSZWZQdHI8UmFuZ2U+IGN1cnJlbnRTZWxlY3Rp
b24gPSBlbmRpbmdTZWxlY3Rpb24oKS5maXJzdFJhbmdlKCk7CisgICAgZG9BcHBseUZvclNpbmds
ZVBhcmFncmFwaChmYWxzZSwgbGlzdFRhZywgY3VycmVudFNlbGVjdGlvbi5nZXQoKSk7CiB9CiAK
LXZvaWQgSW5zZXJ0TGlzdENvbW1hbmQ6OmRvQXBwbHlGb3JTaW5nbGVQYXJhZ3JhcGgoYm9vbCBm
b3JjZUNyZWF0ZUxpc3QpCit2b2lkIEluc2VydExpc3RDb21tYW5kOjpkb0FwcGx5Rm9yU2luZ2xl
UGFyYWdyYXBoKGJvb2wgZm9yY2VDcmVhdGVMaXN0LCBjb25zdCBRdWFsaWZpZWROYW1lJiBsaXN0
VGFnLCBSYW5nZSogY3VycmVudFNlbGVjdGlvbikKIHsKICAgICAvLyBGSVhNRTogVGhpcyB3aWxs
IHByb2R1Y2UgdW5leHBlY3RlZCByZXN1bHRzIGZvciBhIHNlbGVjdGlvbiB0aGF0IHN0YXJ0cyBq
dXN0IGJlZm9yZSBhCiAgICAgLy8gdGFibGUgYW5kIGVuZHMgaW5zaWRlIHRoZSBmaXJzdCBjZWxs
LCBzZWxlY3Rpb25Gb3JQYXJhZ3JhcGhJdGVyYXRpb24gc2hvdWxkIHByb2JhYmx5CiAgICAgLy8g
YmUgcmVuYW1lZCBhbmQgZGVwbG95ZWQgaW5zaWRlIHNldEVuZGluZ1NlbGVjdGlvbigpLgogICAg
IE5vZGUqIHNlbGVjdGlvbk5vZGUgPSBlbmRpbmdTZWxlY3Rpb24oKS5zdGFydCgpLm5vZGUoKTsK
LSAgICBjb25zdCBRdWFsaWZpZWROYW1lIGxpc3RUYWcgPSAobV90eXBlID09IE9yZGVyZWRMaXN0
KSA/IG9sVGFnIDogdWxUYWc7CiAgICAgTm9kZSogbGlzdENoaWxkTm9kZSA9IGVuY2xvc2luZ0xp
c3RDaGlsZChzZWxlY3Rpb25Ob2RlKTsKICAgICBib29sIHN3aXRjaExpc3RUeXBlID0gZmFsc2U7
CiAgICAgaWYgKGxpc3RDaGlsZE5vZGUpIHsKICAgICAgICAgLy8gUmVtb3ZlIHRoZSBsaXN0IGNo
bGlsZC4KICAgICAgICAgSFRNTEVsZW1lbnQqIGxpc3ROb2RlID0gZW5jbG9zaW5nTGlzdChsaXN0
Q2hpbGROb2RlKTsKLSAgICAgICAgaWYgKCFsaXN0Tm9kZSkKKyAgICAgICAgaWYgKCFsaXN0Tm9k
ZSkgewogICAgICAgICAgICAgbGlzdE5vZGUgPSBmaXhPcnBoYW5lZExpc3RDaGlsZChsaXN0Q2hp
bGROb2RlKTsKKyAgICAgICAgICAgIGxpc3ROb2RlID0gbWVyZ2VXaXRoTmVpZ2hib3JpbmdMaXN0
cyhsaXN0Tm9kZSk7CisgICAgICAgIH0KICAgICAgICAgaWYgKCFsaXN0Tm9kZS0+aGFzVGFnTmFt
ZShsaXN0VGFnKSkKICAgICAgICAgICAgIC8vIGxpc3RDaGlsZE5vZGUgd2lsbCBiZSByZW1vdmVk
IGZyb20gdGhlIGxpc3QgYW5kIGEgbGlzdCBvZiB0eXBlIG1fdHlwZSB3aWxsIGJlIGNyZWF0ZWQu
CiAgICAgICAgICAgICBzd2l0Y2hMaXN0VHlwZSA9IHRydWU7CiAKKyAgICAgICAgLy8gSWYgdGhl
IGxpc3QgaXMgb2YgdGhlIGRlc2lyZWQgdHlwZSwgYW5kIHdlIGFyZSBub3QgcmVtb3ZpbmcgdGhl
IGxpc3QsIHRoZW4gZXhpdCBlYXJseS4KKyAgICAgICAgaWYgKCFzd2l0Y2hMaXN0VHlwZSAmJiBm
b3JjZUNyZWF0ZUxpc3QpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgLy8gSWYgdGhl
IGVudGlyZSBsaXN0IGlzIHNlbGVjdGVkLCB0aGVuIGNvbnZlcnQgdGhlIHdob2xlIGxpc3QuCisg
ICAgICAgIGlmIChzd2l0Y2hMaXN0VHlwZSAmJiBpc05vZGVWaXNpYmx5Q29udGFpbmVkV2l0aGlu
KGxpc3ROb2RlLCBjdXJyZW50U2VsZWN0aW9uKSkgeworICAgICAgICAgICAgUmVmUHRyPEhUTUxF
bGVtZW50PiBsaXN0RWxlbWVudCA9IGNyZWF0ZUhUTUxFbGVtZW50KGRvY3VtZW50KCksIGxpc3RU
YWcpOworICAgICAgICAgICAgaW5zZXJ0Tm9kZUJlZm9yZShsaXN0RWxlbWVudCwgbGlzdE5vZGUp
OworICAgICAgICAgICAgTm9kZSogb3V0ZXJCbG9jayA9IGxpc3RDaGlsZE5vZGUtPmlzQmxvY2tG
bG93KCkgPyBsaXN0Q2hpbGROb2RlIDogbGlzdE5vZGU7CisgICAgICAgICAgICBtb3ZlUGFyYWdy
YXBoV2l0aENsb25lcyhmaXJzdFBvc2l0aW9uSW5Ob2RlKGxpc3ROb2RlKSwgbGFzdFBvc2l0aW9u
SW5Ob2RlKGxpc3ROb2RlKSwgbGlzdEVsZW1lbnQuZ2V0KCksIG91dGVyQmxvY2spOworICAgICAg
ICAgICAgbGlzdEVsZW1lbnQgPSBtZXJnZVdpdGhOZWlnaGJvcmluZ0xpc3RzKGxpc3RFbGVtZW50
LmdldCgpKTsKKyAgICAgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihWaXNpYmxlUG9zaXRpb24o
Zmlyc3RQb3NpdGlvbkluTm9kZShsaXN0RWxlbWVudC5nZXQoKSkpKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgdW5saXN0aWZ5UGFyYWdyYXBoKGVu
ZGluZ1NlbGVjdGlvbigpLnZpc2libGVTdGFydCgpLCBsaXN0Tm9kZSwgbGlzdENoaWxkTm9kZSk7
CiAgICAgfQogCkBAIC0yODUsMjAgKzMzMSwxMCBAQCBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBJ
bnNlcnRMaXN0Q29tbWFuCiAKICAgICBtb3ZlUGFyYWdyYXBoKHN0YXJ0LCBlbmQsIFZpc2libGVQ
b3NpdGlvbihQb3NpdGlvbihwbGFjZWhvbGRlci5nZXQoKSwgMCkpLCB0cnVlKTsKIAotICAgIC8v
IEZJWE1FOiBsaXN0aWZ5UGFyYWdyYXBoIHNob3VsZCBub3QgZGVwZW5kIG9uIGEgbWVtYmVyIHZh
cmlhYmxlLgotICAgIC8vIFNpbmNlIGZpeE9ycGhhbmVkTGlzdENoaWxkIGlzIHRoZSBvbmx5IG90
aGVyIG1ldGhvZCB0aGF0IHVwZGF0ZXMgbV9saXN0RWxlbWVudCwKLSAgICAvLyB3ZSBzaG91bGQg
Zml4IHVubGlzdGlmeVBhcmFncmFwaCB0byBzdXBwb3J0IG9ycGhhbmVkIGxpc3QgY2hpbGQgdG8g
Z2V0IHJpZCBvZiB0aGlzIGFzc2lnbm1lbnQuCi0gICAgaWYgKCFsaXN0RWxlbWVudCAmJiBtX2xp
c3RFbGVtZW50KQotICAgICAgICBsaXN0RWxlbWVudCA9IG1fbGlzdEVsZW1lbnQ7Ci0KLSAgICBp
ZiAobGlzdEVsZW1lbnQpIHsKLSAgICAgICAgcHJldmlvdXNMaXN0ID0gbGlzdEVsZW1lbnQtPnBy
ZXZpb3VzRWxlbWVudFNpYmxpbmcoKTsKLSAgICAgICAgbmV4dExpc3QgPSBsaXN0RWxlbWVudC0+
bmV4dEVsZW1lbnRTaWJsaW5nKCk7Ci0gICAgICAgIGlmIChjYW5NZXJnZUxpc3RzKHByZXZpb3Vz
TGlzdCwgbGlzdEVsZW1lbnQuZ2V0KCkpKQotICAgICAgICAgICAgbWVyZ2VJZGVudGljYWxFbGVt
ZW50cyhwcmV2aW91c0xpc3QsIGxpc3RFbGVtZW50LmdldCgpKTsKLSAgICAgICAgaWYgKGNhbk1l
cmdlTGlzdHMobGlzdEVsZW1lbnQuZ2V0KCksIG5leHRMaXN0KSkKLSAgICAgICAgICAgIG1lcmdl
SWRlbnRpY2FsRWxlbWVudHMobGlzdEVsZW1lbnQuZ2V0KCksIG5leHRMaXN0KTsKLSAgICB9IGVs
c2UgaWYgKGNhbk1lcmdlTGlzdHMobmV4dExpc3QsIHByZXZpb3VzTGlzdCkpCisgICAgaWYgKGxp
c3RFbGVtZW50KQorICAgICAgICByZXR1cm4gbWVyZ2VXaXRoTmVpZ2hib3JpbmdMaXN0cyhsaXN0
RWxlbWVudC5nZXQoKSk7CisKKyAgICBpZiAoY2FuTWVyZ2VMaXN0cyhwcmV2aW91c0xpc3QsIG5l
eHRMaXN0KSkKICAgICAgICAgbWVyZ2VJZGVudGljYWxFbGVtZW50cyhwcmV2aW91c0xpc3QsIG5l
eHRMaXN0KTsKIAogICAgIHJldHVybiBsaXN0RWxlbWVudDsKSW5kZXg6IFdlYkNvcmUvZWRpdGlu
Zy9JbnNlcnRMaXN0Q29tbWFuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9JbnNl
cnRMaXN0Q29tbWFuZC5oCShyZXZpc2lvbiA2NDIxOSkKKysrIFdlYkNvcmUvZWRpdGluZy9JbnNl
cnRMaXN0Q29tbWFuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw4ICs1Miw5IEBAIHByaXZhdGU6
CiAgICAgdmlydHVhbCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24oKSBjb25zdCB7IHJldHVybiBF
ZGl0QWN0aW9uSW5zZXJ0TGlzdDsgfQogCiAgICAgSFRNTEVsZW1lbnQqIGZpeE9ycGhhbmVkTGlz
dENoaWxkKE5vZGUqKTsKLSAgICBib29sIG1vZGlmeVJhbmdlKCk7Ci0gICAgdm9pZCBkb0FwcGx5
Rm9yU2luZ2xlUGFyYWdyYXBoKGJvb2wgZm9yY2VDcmVhdGVMaXN0KTsKKyAgICBib29sIHNlbGVj
dGlvbkhhc0xpc3RPZlR5cGUoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBzdGFydCwgY29uc3QgVmlz
aWJsZVBvc2l0aW9uJiBlbmQsIGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKKyAgICBIVE1MRWxlbWVu
dCogbWVyZ2VXaXRoTmVpZ2hib3JpbmdMaXN0cyhIVE1MRWxlbWVudCopOworICAgIHZvaWQgZG9B
cHBseUZvclNpbmdsZVBhcmFncmFwaChib29sIGZvcmNlQ3JlYXRlTGlzdCwgY29uc3QgUXVhbGlm
aWVkTmFtZSYsIFJhbmdlKiBjdXJyZW50U2VsZWN0aW9uKTsKICAgICB2b2lkIHVubGlzdGlmeVBh
cmFncmFwaChjb25zdCBWaXNpYmxlUG9zaXRpb24mIG9yaWdpbmFsU3RhcnQsIEhUTUxFbGVtZW50
KiBsaXN0Tm9kZSwgTm9kZSogbGlzdENoaWxkTm9kZSk7CiAgICAgUGFzc1JlZlB0cjxIVE1MRWxl
bWVudD4gbGlzdGlmeVBhcmFncmFwaChjb25zdCBWaXNpYmxlUG9zaXRpb24mIG9yaWdpbmFsU3Rh
cnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGxpc3RUYWcpOwogICAgIFJlZlB0cjxIVE1MRWxlbWVu
dD4gbV9saXN0RWxlbWVudDsKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAkocmV2aXNpb24g
NjQyMTkpCisrKyBXZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTMzLDkgKzExMzMsMTUgQEAgYm9vbCBpc05vZGVWaXNpYmx5Q29udGFpbmVkV2l0aGlu
KE5vZGUqIAogICAgIGlmIChzZWxlY3RlZFJhbmdlLT5jb21wYXJlTm9kZShub2RlLCBlYykgPT0g
UmFuZ2U6Ok5PREVfSU5TSURFKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIC8vIElmIHRo
ZSBub2RlIHN0YXJ0cyBhbmQgZW5kcyBhdCB3aGVyZSBzZWxlY3RlZFJhbmdlIHN0YXJ0cyBhbmQg
ZW5kcywgdGhlIG5vZGUgaXMgY29udGFpbmVkIHdpdGhpbgotICAgIHJldHVybiB2aXNpYmxlUG9z
aXRpb25CZWZvcmVOb2RlKG5vZGUpID09IHNlbGVjdGVkUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKQot
ICAgICAgICAmJiB2aXNpYmxlUG9zaXRpb25BZnRlck5vZGUobm9kZSkgPT0gc2VsZWN0ZWRSYW5n
ZS0+ZW5kUG9zaXRpb24oKTsKKyAgICBib29sIHN0YXJ0SXNWaXN1YWxseVNhbWUgPSB2aXNpYmxl
UG9zaXRpb25CZWZvcmVOb2RlKG5vZGUpID09IHNlbGVjdGVkUmFuZ2UtPnN0YXJ0UG9zaXRpb24o
KTsKKyAgICBpZiAoc3RhcnRJc1Zpc3VhbGx5U2FtZSAmJiBjb21wYXJlUG9zaXRpb25zKFBvc2l0
aW9uKG5vZGUtPnBhcmVudE5vZGUoKSwgbm9kZS0+bm9kZUluZGV4KCkrMSksIHNlbGVjdGVkUmFu
Z2UtPmVuZFBvc2l0aW9uKCkpIDwgMCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBib29s
IGVuZElzVmlzdWFsbHlTYW1lID0gdmlzaWJsZVBvc2l0aW9uQWZ0ZXJOb2RlKG5vZGUpID09IHNl
bGVjdGVkUmFuZ2UtPmVuZFBvc2l0aW9uKCk7CisgICAgaWYgKGVuZElzVmlzdWFsbHlTYW1lICYm
IGNvbXBhcmVQb3NpdGlvbnMoc2VsZWN0ZWRSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBQb3NpdGlv
bihub2RlLT5wYXJlbnROb2RlKCksIG5vZGUtPm5vZGVJbmRleCgpKSkgPCAwKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBzdGFydElzVmlzdWFsbHlTYW1lICYmIGVuZElzVmlz
dWFsbHlTYW1lOwogfQogCiBib29sIGlzUmVuZGVyZWRBc05vbklubGluZVRhYmxlSW1hZ2VPckhS
KGNvbnN0IE5vZGUqIG5vZGUpCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA2NDI1NikKKysrIExheW91dFRl
c3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDEwLTA3LTI4
ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluc2VydE9yZGVyZWRMaXN0IGRvZXMgbm90IHN3
aXRjaCB0aGUgbGlzdCB0eXBlIHByb3Blcmx5IHdoZW4gaXQgaGFzIGFuIGlubmVyIGxpc3QuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MzE2NgorCisg
ICAgICAgIEFkZGVkIGEgdGVzdCB0byBjb252ZXJ0IGFuIHVub3JkZXJlZCBsaXN0IHdpdGggYSBu
ZXN0ZWQgbGlzdCB0byBhbiBvcmRlcmVkIGxpc3QuCisgICAgICAgIFRoZSBiZWhhdmlvciBvZiBX
ZWJLaXQgaXMgY2hhbmdlZCBub3QgdG8gZmxhdHRlbiB0aGUgbGlzdHMgd2hlbiBpbnNlcnRpbmcg
b3JkZXJlZC91bm9yZGVyZWQKKyAgICAgICAgbGlzdHMgb24gbmVzdGVkIGxpc3RzLgorCisgICAg
ICAgICogZWRpdGluZy9leGVjQ29tbWFuZC81MjA3MzY5LWV4cGVjdGVkLnR4dDogTm8gbG9uZ2Vy
IGZsYXR0ZW5zIHRoZSBsaXN0IHRvIG1hdGNoIEZpcmVmb3ggYW5kIE1TSUUuCisgICAgICAgICog
ZWRpdGluZy9leGVjQ29tbWFuZC81MjA3MzY5Lmh0bWw6IFVwZGF0ZWQgCisgICAgICAgICogZWRp
dGluZy9leGVjQ29tbWFuZC9yZW1vdmUtbGlzdC1pdGVtcy1leHBlY3RlZC50eHQ6IFJlbW92ZWQg
b25lIHdoaXRlc3BhY2UuCisgICAgICAgICogZWRpdGluZy9leGVjQ29tbWFuZC9zd2l0Y2gtbGlz
dC10eXBlLXdpdGgtaW5uZXItbGlzdC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGVk
aXRpbmcvZXhlY0NvbW1hbmQvc3dpdGNoLWxpc3QtdHlwZS13aXRoLWlubmVyLWxpc3QuaHRtbDog
QWRkZWQuCisKIDIwMTAtMDctMjggIEFsZXggTmljb2xhb3UgIDxhbmljb2xhb0BjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgT2phbiBWYWZhaS4KSW5kZXg6IExheW91dFRlc3Rz
L2VkaXRpbmcvZXhlY0NvbW1hbmQvNTIwNzM2OS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC81MjA3MzY5LWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gNjQyMTkpCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kLzUyMDczNjkt
ZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDkgKzEsOSBAQAotVGhpcyB0ZXN0cyBm
b3IgYSBjcmFzaCB3aGVuIHRyeWluZyB0byBmbGF0dGVuIGEgbGlzdCBjb250YWluaW5nIGEgc3Vi
LWxpc3QgYXQgdGhlIGVuZC4gWW91IHNob3VsZG4ndCBnZXQgYSBjcmFzaCBhbmQgdGhlcmUgc2hv
dWxkIGJlIGEgc2luZ2xlIGxldmVsIGxpc3QgYmVsb3cuCitUaGlzIHRlc3RzIGZvciBhIGNyYXNo
IHdoZW4gdHJ5aW5nIHRvIHN3aXRjaCB0aGUgbGlzdCB0eXBlIG9mIGFuIGlubmVyIGxpc3QgYXQg
dGhlIGVuZC4gWW91IHNob3VsZG4ndCBnZXQgYSBjcmFzaC4gVGhpcyB0ZXN0IHVzZWQgdG8gZmxh
dHRlbiB0aGUgbGlzdCBidXQgdGhpcyBiZWhhdmlvciB3YXMgY29ycmVjdCB0byBtYXRjaCBGaXJl
Zm94IGFuZCBNU0lFIGluIHRoZSBidWcgNDMxNjYuCiAKIE9uZQogVHdvCiBUaHJlZQogRm91cgot
PHVsPjxsaT5PbmU8L2xpPjxsaT5Ud288L2xpPjxsaT5UaHJlZTwvbGk+PGxpPkZvdXI8L2xpPjwv
dWw+Cis8dWw+PGxpPk9uZTwvbGk+PGxpPlR3bzwvbGk+PHVsPjxsaT5UaHJlZTwvbGk+PGxpPkZv
dXI8L2xpPjwvdWw+PC91bD4KIAogUEFTUwpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9leGVj
Q29tbWFuZC81MjA3MzY5Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9l
eGVjQ29tbWFuZC81MjA3MzY5Lmh0bWwJKHJldmlzaW9uIDY0MjE5KQorKysgTGF5b3V0VGVzdHMv
ZWRpdGluZy9leGVjQ29tbWFuZC81MjA3MzY5Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTEsNCAr
MSw0IEBACi08cD5UaGlzIHRlc3RzIGZvciBhIGNyYXNoIHdoZW4gdHJ5aW5nIHRvIGZsYXR0ZW4g
YSBsaXN0IGNvbnRhaW5pbmcgYSBzdWItbGlzdCBhdCB0aGUgZW5kLiBZb3Ugc2hvdWxkbid0IGdl
dCBhIGNyYXNoIGFuZCB0aGVyZSBzaG91bGQgYmUgYSBzaW5nbGUgbGV2ZWwgbGlzdCBiZWxvdy48
L3A+Cis8cD5UaGlzIHRlc3RzIGZvciBhIGNyYXNoIHdoZW4gdHJ5aW5nIHRvIHN3aXRjaCB0aGUg
bGlzdCB0eXBlIG9mIGFuIGlubmVyIGxpc3QgYXQgdGhlIGVuZC4gWW91IHNob3VsZG4ndCBnZXQg
YSBjcmFzaC4gVGhpcyB0ZXN0IHVzZWQgdG8gZmxhdHRlbiB0aGUgbGlzdCBidXQgdGhpcyBiZWhh
dmlvciB3YXMgY29ycmVjdCB0byBtYXRjaCBGaXJlZm94IGFuZCBNU0lFIGluIHRoZSBidWcgNDMx
NjYuPC9wPgogPGRpdiBpZD0iZGl2IiBjb250ZW50ZWRpdGFibGU9InRydWUiPjxvbD48bGk+T25l
PC9saT48bGk+VHdvPC9saT48dWw+PGxpPlRocmVlPC9saT48bGk+Rm91cjwvbGk+PC9kaXY+CiA8
cCBpZD0iY29uc29sZSI+PC9wPgogCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21t
YW5kL3JlbW92ZS1saXN0LWl0ZW1zLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL3JlbW92ZS1saXN0LWl0ZW1zLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gNjQyMTkpCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL3JlbW92
ZS1saXN0LWl0ZW1zLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMzgsNCArMzgsNCBA
QCBUaGlzIHNob3VsZCBub3QgYmUgaW4gYSBsaXN0LgogYmFyCiBUaGlzIHNob3VsZCBub3QgYmUg
aW4gYSBsaXN0LgogVGhpcyBzaG91bGQgbm90IGJlIGluIGEgbGlzdC4KLTxvbCBzdHlsZT0iYm9y
ZGVyOiAxcHggc29saWQgcmVkOyI+IDxsaT5mb288L2xpPiA8L29sPjxzcGFuIGlkPSJpdGVtMSI+
VGhpcyBzaG91bGQgbm90IGJlIGEgbGlzdC48L3NwYW4+Jm5ic3A7PGJyPjxvbCBzdHlsZT0iYm9y
ZGVyOiAxcHggc29saWQgcmVkOyI+PGJyPiBiYXIgPGxpPmJhejwvbGk+IDwvb2w+VGhpcyBzaG91
bGQgbm90IGJlIGluIGEgbGlzdC48YnI+PG9sIHN0eWxlPSJib3JkZXI6IDFweCBzb2xpZCByZWQ7
Ij48bGk+Zm9vPC9saT4gPC9vbD5UaGlzIHNob3VsZCBub3QgYmUgaW4gYSBsaXN0Ljxicj48b2wg
c3R5bGU9ImJvcmRlcjogMXB4IHNvbGlkIHJlZDsiPiA8bGk+YmFyPC9saT4gPC9vbD4gVGhpcyBz
aG91bGQgbm90IGJlIGluIGEgbGlzdC48YnI+IFRoaXMgc2hvdWxkIG5vdCBiZSBpbiBhIGxpc3Qu
Cis8b2wgc3R5bGU9ImJvcmRlcjogMXB4IHNvbGlkIHJlZDsiPiA8bGk+Zm9vPC9saT4gPC9vbD48
c3BhbiBpZD0iaXRlbTEiPlRoaXMgc2hvdWxkIG5vdCBiZSBhIGxpc3QuPC9zcGFuPiZuYnNwOzxi
cj48b2wgc3R5bGU9ImJvcmRlcjogMXB4IHNvbGlkIHJlZDsiPjxicj4gYmFyIDxsaT5iYXo8L2xp
PiA8L29sPlRoaXMgc2hvdWxkIG5vdCBiZSBpbiBhIGxpc3QuPGJyPjxvbCBzdHlsZT0iYm9yZGVy
OiAxcHggc29saWQgcmVkOyI+PGxpPmZvbzwvbGk+IDwvb2w+VGhpcyBzaG91bGQgbm90IGJlIGlu
IGEgbGlzdC48YnI+PG9sIHN0eWxlPSJib3JkZXI6IDFweCBzb2xpZCByZWQ7Ij4gPGxpPmJhcjwv
bGk+IDwvb2w+IFRoaXMgc2hvdWxkIG5vdCBiZSBpbiBhIGxpc3QuPGJyPlRoaXMgc2hvdWxkIG5v
dCBiZSBpbiBhIGxpc3QuCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL3N3
aXRjaC1saXN0LXR5cGUtd2l0aC1pbm5lci1saXN0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL3N3aXRjaC1saXN0LXR5cGUtd2l0aC1p
bm5lci1saXN0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2VkaXRp
bmcvZXhlY0NvbW1hbmQvc3dpdGNoLWxpc3QtdHlwZS13aXRoLWlubmVyLWxpc3QtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUwIEBACitUaGlzIHRlc3RzIHN3aXRjaGluZyBh
biB1bm9yZGVyZWQgbGlzdCB3aXRoIGEgbmVzdGVkIGxpc3QgdG8gYW4gb3JkZXJlZCBsaXN0CisK
KzxESVYgaWQ9InRlc3QiIGNvbnRlbnRFZGl0YWJsZT0iIj4KKzwjdGV4dD4KKzwvI3RleHQ+Cis8
T0w+Cis8TEk+Cis8I3RleHQ+PHNlbGVjdGlvbi1hbmNob3I+aGVsbG88LyN0ZXh0PgorPC9MST4K
KzwjdGV4dD4KKzwvI3RleHQ+Cis8T0w+Cis8I3RleHQ+Cis8LyN0ZXh0PgorPExJPgorPCN0ZXh0
PndvcmxkPC8jdGV4dD4KKzwvTEk+Cis8I3RleHQ+Cis8LyN0ZXh0PgorPC9PTD4KKzwjdGV4dD4K
KzwvI3RleHQ+Cis8TEk+Cis8I3RleHQ+d2Via2l0PC8jdGV4dD4KKzwvTEk+Cis8TEk+Cis8I3Rl
eHQ+cm9ja3M8LyN0ZXh0PgorPC9MST4KKzwjdGV4dD4KKzwvI3RleHQ+Cis8TEk+Cis8I3RleHQ+
YmVjYXVzZSBvZjwvI3RleHQ+Cis8L0xJPgorPCN0ZXh0PgorPC8jdGV4dD4KKzxMST4KKzwjdGV4
dD55b3U8c2VsZWN0aW9uLWZvY3VzPjwvI3RleHQ+Cis8L0xJPgorPCN0ZXh0PgorPC8jdGV4dD4K
KzwvT0w+Cis8I3RleHQ+Cis8LyN0ZXh0PgorPCN0ZXh0PgorPC8jdGV4dD4KKzwjdGV4dD4KKzwv
I3RleHQ+Cis8I3RleHQ+Cis8LyN0ZXh0PgorPC9ESVY+CkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0
aW5nL2V4ZWNDb21tYW5kL3N3aXRjaC1saXN0LXR5cGUtd2l0aC1pbm5lci1saXN0Lmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9zd2l0Y2gtbGlzdC10
eXBlLXdpdGgtaW5uZXItbGlzdC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZWRp
dGluZy9leGVjQ29tbWFuZC9zd2l0Y2gtbGlzdC10eXBlLXdpdGgtaW5uZXItbGlzdC5odG1sCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI3IEBACis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2Vz
L2R1bXAtYXMtbWFya3VwLmpzIj48L3NjcmlwdD4KKzxib2R5PgorPGRpdiBpZD0idGVzdCIgY29u
dGVudGVkaXRhYmxlPgorPHVsPgorICAgIDxsaT5oZWxsbzwvbGk+CisgICAgPG9sPgorICAgIDxs
aT53b3JsZDwvbGk+CisgICAgPC9vbD4KKyAgICA8bGk+d2Via2l0PC9saT4KKzwvdWw+Cis8bGk+
cm9ja3M8L2xpPgorPHVsPgorPGxpPmJlY2F1c2Ugb2Y8L2xpPgorPC91bD4KKzxvbD4KKzxsaT55
b3U8L2xpPgorPC9vbD4KKzwvZGl2PgorPHNjcmlwdD4KK01hcmt1cC5kZXNjcmlwdGlvbignVGhp
cyB0ZXN0cyBzd2l0Y2hpbmcgYW4gdW5vcmRlcmVkIGxpc3Qgd2l0aCBhIG5lc3RlZCBsaXN0IHRv
IGFuIG9yZGVyZWQgbGlzdCcpOworTWFya3VwLnNldE5vZGVUb0R1bXAoJ3Rlc3QnKTsKKwordmFy
IHRlc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdCcpOword2luZG93LmdldFNlbGVj
dGlvbigpLnNlbGVjdEFsbENoaWxkcmVuKHRlc3QpOworZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ0lu
c2VydE9yZGVyZWRMaXN0JywgZmFsc2UsIG51bGwpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cg==
</data>
<flag name="review"
          id="51170"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62975</attachid>
            <date>2010-07-29 12:27:56 -0700</date>
            <delta_ts>2010-07-29 15:26:28 -0700</delta_ts>
            <desc>fixed per darin&apos;s comments</desc>
            <filename>fix43166b</filename>
            <type>text/plain</type>
            <size>20106</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NDI5OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzEgQEAKKzIwMTAtMDctMjkgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW5z
ZXJ0T3JkZXJlZExpc3QgZG9lcyBub3Qgc3dpdGNoIHRoZSBsaXN0IHR5cGUgcHJvcGVybHkgd2hl
biBpdCBoYXMgYW4gaW5uZXIgbGlzdC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQzMTY2CisKKyAgICAgICAgVGhlIGJ1ZyB3YXMgY2F1c2VkIGJ5IGZv
cmNlZENyZWF0ZUxpc3Qgd2FzIG5vdCBzZXQgdG8gdHJ1ZSB3aGVuIHRoZSBzdGFydCBhbmQgdGhl
IGVuZAorICAgICAgICBvZiB0aGUgc2VsZWN0aW9uIGxpZXMgaW4gdGhlIHNhbWUgbGlzdC4gQWRk
ZWQgc2VsZWN0aW9uSGFzTGlzdE9mVHlwZSB0byBmaXggdGhpcyBwcm9ibGVtLgorCisgICAgICAg
IFdlYktpdCB1c2VkIG5vdCB0byBjb252ZXJ0IHRoZSBvdXRlciBsaXN0cyBldmVuIHdoZW4gdGhl
IGxpc3QgaXMgZnVsbHkgc2VsZWN0ZWQuCisgICAgICAgIENvcnJlY3RlZCB0aGlzIGJlaGF2aW9y
IGJ5IGNvbnZlcnRpbmcgdGhlIGVudGlyZSBsaXN0IGF0IG9uY2Ugd2hlbiB0aGUgbGlzdCBpcyBm
dWxseSBzZWxlY3RlZC4KKyAgICAgICAgVG8gZGVjaWRlIHdoZXRoZXIgb3Igbm90IGEgbGlzdCBp
cyBmdWxseSBzZWxlY3RlZCwgYWRkZWQgY3VycmVudFNlbGVjdGlvbiBhcmd1bWVudCB0byBkb0Fw
cGx5Rm9yU2luZ2xlUGFyYWdyYXBoLgorCisgICAgICAgIFRlc3RzOiBlZGl0aW5nL2V4ZWNDb21t
YW5kL3N3aXRjaC1saXN0LXR5cGUtd2l0aC1pbm5lci1saXN0Lmh0bWwKKyAgICAgICAgICAgICAg
IGVkaXRpbmcvZXhlY0NvbW1hbmQvc3dpdGNoLWxpc3QtdHlwZS13aXRoLW9ycGhhbmVkLWxpLmh0
bWwKKworICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW5zZXJ0TGlzdENvbW1hbmQ6Om1lcmdlV2l0aE5laWdoYm9yaW5nTGlzdHMpOiBF
eHRyYWN0ZWQgdGhlIGNvZGUgdG8gbWVyZ2UgbGlzdHMuCisgICAgICAgIChXZWJDb3JlOjpJbnNl
cnRMaXN0Q29tbWFuZDo6c2VsZWN0aW9uSGFzTGlzdE9mVHlwZSk6IGF0dGFjaG1lbnQuY2dpCisg
ICAgICAgIChXZWJDb3JlOjpJbnNlcnRMaXN0Q29tbWFuZDo6ZG9BcHBseSk6IENhbGxzIHNlbGVj
dGlvbkhhc0xpc3RPZlR5cGUuCisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRMaXN0Q29tbWFuZDo6
ZG9BcHBseUZvclNpbmdsZVBhcmFncmFwaCk6IFNlZSBhYm92ZS4KKyAgICAgICAgKFdlYkNvcmU6
Okluc2VydExpc3RDb21tYW5kOjpsaXN0aWZ5UGFyYWdyYXBoKTogQ2FsbHMgbWVyZ2VXaXRoTmVp
Z2hib3JpbmdMaXN0cy4KKyAgICAgICAgKiBlZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmg6Cisg
ICAgICAgICogZWRpdGluZy9odG1sZWRpdGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjYW5N
ZXJnZUxpc3RzKTogRW5zdXJlcyBsaXN0cyBiZWluZyBtZXJnZWQgYXJlIGluc3RhbmNlcyBvZiBI
VE1MRWxlbWVudC4KKyAgICAgICAgKFdlYkNvcmU6OmlzTm9kZVZpc2libHlDb250YWluZWRXaXRo
aW4pOiBXb3JrcyBwcm9wZXJseSB3aGVuIG9uZSBlbmQgaXMgaW5zaWRlIHRoZSByYW5nZS4KKwog
MjAxMC0wNy0yOSAgVmljdG9yIFdhbmcgIDx2aWN0b3J3QGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByNjQyNzAuCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcv
SW5zZXJ0TGlzdENvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9JbnNl
cnRMaXN0Q29tbWFuZC5jcHAJKHJldmlzaW9uIDY0MjE5KQorKysgV2ViQ29yZS9lZGl0aW5nL0lu
c2VydExpc3RDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsNiArNTQsMzcgQEAgSFRN
TEVsZW1lbnQqIEluc2VydExpc3RDb21tYW5kOjpmaXhPcnBoYQogICAgIHJldHVybiBsaXN0RWxl
bWVudC5nZXQoKTsKIH0KIAorUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gSW5zZXJ0TGlzdENvbW1h
bmQ6Om1lcmdlV2l0aE5laWdoYm9yaW5nTGlzdHMoSFRNTEVsZW1lbnQqIGxpc3RFbGVtZW50KQor
eworICAgIEVsZW1lbnQqIHByZXZpb3VzTGlzdCA9IGxpc3RFbGVtZW50LT5wcmV2aW91c0VsZW1l
bnRTaWJsaW5nKCk7CisgICAgRWxlbWVudCogbmV4dExpc3QgPSBsaXN0RWxlbWVudC0+bmV4dEVs
ZW1lbnRTaWJsaW5nKCk7CisgICAgaWYgKGNhbk1lcmdlTGlzdHMocHJldmlvdXNMaXN0LCBsaXN0
RWxlbWVudCkpCisgICAgICAgIG1lcmdlSWRlbnRpY2FsRWxlbWVudHMocHJldmlvdXNMaXN0LCBs
aXN0RWxlbWVudCk7CisgICAgaWYgKGNhbk1lcmdlTGlzdHMobGlzdEVsZW1lbnQsIG5leHRMaXN0
KSkgeworICAgICAgICBtZXJnZUlkZW50aWNhbEVsZW1lbnRzKGxpc3RFbGVtZW50LCBuZXh0TGlz
dCk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KG5leHRMaXN0KTsK
KyAgICB9CisgICAgcmV0dXJuIGxpc3RFbGVtZW50OworfQorCitib29sIEluc2VydExpc3RDb21t
YW5kOjpzZWxlY3Rpb25IYXNMaXN0T2ZUeXBlKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVj
dGlvbiwgY29uc3QgUXVhbGlmaWVkTmFtZSYgbGlzdFRhZykKK3sKKyAgICBWaXNpYmxlUG9zaXRp
b24gc3RhcnQgPSBzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCk7CisKKyAgICBpZiAoIWVuY2xvc2lu
Z0xpc3Qoc3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCkpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBWaXNpYmxlUG9zaXRpb24gZW5kID0gc2VsZWN0aW9uLnZpc2libGVFbmQoKTsK
KyAgICB3aGlsZSAoc3RhcnQuaXNOb3ROdWxsKCkgJiYgc3RhcnQgIT0gZW5kKSB7CisgICAgICAg
IEVsZW1lbnQqIGxpc3ROb2RlID0gZW5jbG9zaW5nTGlzdChzdGFydC5kZWVwRXF1aXZhbGVudCgp
Lm5vZGUoKSk7CisgICAgICAgIGlmICghbGlzdE5vZGUgfHwgIWxpc3ROb2RlLT5oYXNUYWdOYW1l
KGxpc3RUYWcpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBzdGFydCA9IHN0
YXJ0T2ZOZXh0UGFyYWdyYXBoKHN0YXJ0KTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KwogSW5zZXJ0TGlzdENvbW1hbmQ6Okluc2VydExpc3RDb21tYW5kKERvY3VtZW50KiBkb2N1bWVu
dCwgVHlwZSB0eXBlKSAKICAgICA6IENvbXBvc2l0ZUVkaXRDb21tYW5kKGRvY3VtZW50KSwgbV90
eXBlKHR5cGUpCiB7CkBAIC04MCw2ICsxMTEsNyBAQCB2b2lkIEluc2VydExpc3RDb21tYW5kOjpk
b0FwcGx5KCkKICAgICBpZiAodmlzaWJsZUVuZCAhPSB2aXNpYmxlU3RhcnQgJiYgaXNTdGFydE9m
UGFyYWdyYXBoKHZpc2libGVFbmQpKQogICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oVmlzaWJs
ZVNlbGVjdGlvbih2aXNpYmxlU3RhcnQsIHZpc2libGVFbmQucHJldmlvdXModHJ1ZSkpKTsKIAor
ICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIGxpc3RUYWcgPSAobV90eXBlID09IE9yZGVyZWRMaXN0
KSA/IG9sVGFnIDogdWxUYWc7CiAgICAgaWYgKGVuZGluZ1NlbGVjdGlvbigpLmlzUmFuZ2UoKSkg
ewogICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IHNlbGVjdGlvbkZvclBhcmFn
cmFwaEl0ZXJhdGlvbihlbmRpbmdTZWxlY3Rpb24oKSk7CiAgICAgICAgIEFTU0VSVChzZWxlY3Rp
b24uaXNSYW5nZSgpKTsKQEAgLTg4LDEwICsxMjAsOSBAQCB2b2lkIEluc2VydExpc3RDb21tYW5k
Ojpkb0FwcGx5KCkKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZMYXN0UGFyYWdyYXBo
ID0gc3RhcnRPZlBhcmFncmFwaChlbmRPZlNlbGVjdGlvbik7CiAKICAgICAgICAgaWYgKHN0YXJ0
T2ZQYXJhZ3JhcGgoc3RhcnRPZlNlbGVjdGlvbikgIT0gc3RhcnRPZkxhc3RQYXJhZ3JhcGgpIHsK
LSAgICAgICAgICAgIE5vZGUqIHN0YXJ0TGlzdCA9IGVuY2xvc2luZ0xpc3Qoc3RhcnRPZlNlbGVj
dGlvbi5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKSk7Ci0gICAgICAgICAgICBOb2RlKiBlbmRMaXN0
ID0gZW5jbG9zaW5nTGlzdChlbmRPZlNlbGVjdGlvbi5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKSk7
Ci0gICAgICAgICAgICBib29sIGZvcmNlQ3JlYXRlTGlzdCA9ICFzdGFydExpc3QgfHwgc3RhcnRM
aXN0ICE9IGVuZExpc3Q7CisgICAgICAgICAgICBib29sIGZvcmNlQ3JlYXRlTGlzdCA9ICFzZWxl
Y3Rpb25IYXNMaXN0T2ZUeXBlKHNlbGVjdGlvbiwgbGlzdFRhZyk7CiAKKyAgICAgICAgICAgIFJl
ZlB0cjxSYW5nZT4gY3VycmVudFNlbGVjdGlvbiA9IGVuZGluZ1NlbGVjdGlvbigpLmZpcnN0UmFu
Z2UoKTsKICAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBzdGFydE9mQ3VycmVudFBhcmFncmFw
aCA9IHN0YXJ0T2ZTZWxlY3Rpb247CiAgICAgICAgICAgICB3aGlsZSAoc3RhcnRPZkN1cnJlbnRQ
YXJhZ3JhcGggIT0gc3RhcnRPZkxhc3RQYXJhZ3JhcGgpIHsKICAgICAgICAgICAgICAgICAvLyBk
b0FwcGx5KCkgbWF5IG9wZXJhdGUgb24gYW5kIHJlbW92ZSB0aGUgbGFzdCBwYXJhZ3JhcGggb2Yg
dGhlIHNlbGVjdGlvbiBmcm9tIHRoZSBkb2N1bWVudCAKQEAgLTEwMiw3ICsxMzMsNyBAQCB2b2lk
IEluc2VydExpc3RDb21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAgICAgICAgICBpZiAoIXN0YXJ0
T2ZMYXN0UGFyYWdyYXBoLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLT5pbkRvY3VtZW50KCkpCiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICBzZXRFbmRpbmdTZWxl
Y3Rpb24oc3RhcnRPZkN1cnJlbnRQYXJhZ3JhcGgpOwotICAgICAgICAgICAgICAgIGRvQXBwbHlG
b3JTaW5nbGVQYXJhZ3JhcGgoZm9yY2VDcmVhdGVMaXN0KTsKKyAgICAgICAgICAgICAgICBkb0Fw
cGx5Rm9yU2luZ2xlUGFyYWdyYXBoKGZvcmNlQ3JlYXRlTGlzdCwgbGlzdFRhZywgY3VycmVudFNl
bGVjdGlvbi5nZXQoKSk7CiAKICAgICAgICAgICAgICAgICAvLyBGZXRjaCB0aGUgc3RhcnQgb2Yg
dGhlIHNlbGVjdGlvbiBhZnRlciBtb3ZpbmcgdGhlIGZpcnN0IHBhcmFncmFwaCwKICAgICAgICAg
ICAgICAgICAvLyBiZWNhdXNlIG1vdmluZyB0aGUgcGFyYWdyYXBoIHdpbGwgaW52YWxpZGF0ZSB0
aGUgb3JpZ2luYWwgc3RhcnQuICAKQEAgLTExNCw3ICsxNDUsNyBAQCB2b2lkIEluc2VydExpc3RD
b21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAgICAgICAgICBzdGFydE9mQ3VycmVudFBhcmFncmFw
aCA9IHN0YXJ0T2ZOZXh0UGFyYWdyYXBoKGVuZGluZ1NlbGVjdGlvbigpLnZpc2libGVTdGFydCgp
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihlbmRPZlNl
bGVjdGlvbik7Ci0gICAgICAgICAgICBkb0FwcGx5Rm9yU2luZ2xlUGFyYWdyYXBoKGZvcmNlQ3Jl
YXRlTGlzdCk7CisgICAgICAgICAgICBkb0FwcGx5Rm9yU2luZ2xlUGFyYWdyYXBoKGZvcmNlQ3Jl
YXRlTGlzdCwgbGlzdFRhZywgY3VycmVudFNlbGVjdGlvbi5nZXQoKSk7CiAgICAgICAgICAgICAv
LyBGZXRjaCB0aGUgZW5kIG9mIHRoZSBzZWxlY3Rpb24sIGZvciB0aGUgcmVhc29uIG1lbnRpb25l
ZCBhYm92ZS4KICAgICAgICAgICAgIGVuZE9mU2VsZWN0aW9uID0gZW5kaW5nU2VsZWN0aW9uKCku
dmlzaWJsZUVuZCgpOwogICAgICAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVTZWxl
Y3Rpb24oc3RhcnRPZlNlbGVjdGlvbiwgZW5kT2ZTZWxlY3Rpb24pKTsKQEAgLTEyMiwyOCArMTUz
LDQ1IEBAIHZvaWQgSW5zZXJ0TGlzdENvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICB9CiAgICAg
fQogCi0gICAgZG9BcHBseUZvclNpbmdsZVBhcmFncmFwaChmYWxzZSk7CisgICAgUmVmUHRyPFJh
bmdlPiBjdXJyZW50U2VsZWN0aW9uID0gZW5kaW5nU2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOwor
ICAgIGRvQXBwbHlGb3JTaW5nbGVQYXJhZ3JhcGgoZmFsc2UsIGxpc3RUYWcsIGN1cnJlbnRTZWxl
Y3Rpb24uZ2V0KCkpOwogfQogCi12b2lkIEluc2VydExpc3RDb21tYW5kOjpkb0FwcGx5Rm9yU2lu
Z2xlUGFyYWdyYXBoKGJvb2wgZm9yY2VDcmVhdGVMaXN0KQordm9pZCBJbnNlcnRMaXN0Q29tbWFu
ZDo6ZG9BcHBseUZvclNpbmdsZVBhcmFncmFwaChib29sIGZvcmNlQ3JlYXRlTGlzdCwgY29uc3Qg
UXVhbGlmaWVkTmFtZSYgbGlzdFRhZywgUmFuZ2UqIGN1cnJlbnRTZWxlY3Rpb24pCiB7CiAgICAg
Ly8gRklYTUU6IFRoaXMgd2lsbCBwcm9kdWNlIHVuZXhwZWN0ZWQgcmVzdWx0cyBmb3IgYSBzZWxl
Y3Rpb24gdGhhdCBzdGFydHMganVzdCBiZWZvcmUgYQogICAgIC8vIHRhYmxlIGFuZCBlbmRzIGlu
c2lkZSB0aGUgZmlyc3QgY2VsbCwgc2VsZWN0aW9uRm9yUGFyYWdyYXBoSXRlcmF0aW9uIHNob3Vs
ZCBwcm9iYWJseQogICAgIC8vIGJlIHJlbmFtZWQgYW5kIGRlcGxveWVkIGluc2lkZSBzZXRFbmRp
bmdTZWxlY3Rpb24oKS4KICAgICBOb2RlKiBzZWxlY3Rpb25Ob2RlID0gZW5kaW5nU2VsZWN0aW9u
KCkuc3RhcnQoKS5ub2RlKCk7Ci0gICAgY29uc3QgUXVhbGlmaWVkTmFtZSBsaXN0VGFnID0gKG1f
dHlwZSA9PSBPcmRlcmVkTGlzdCkgPyBvbFRhZyA6IHVsVGFnOwogICAgIE5vZGUqIGxpc3RDaGls
ZE5vZGUgPSBlbmNsb3NpbmdMaXN0Q2hpbGQoc2VsZWN0aW9uTm9kZSk7CiAgICAgYm9vbCBzd2l0
Y2hMaXN0VHlwZSA9IGZhbHNlOwogICAgIGlmIChsaXN0Q2hpbGROb2RlKSB7CiAgICAgICAgIC8v
IFJlbW92ZSB0aGUgbGlzdCBjaGxpbGQuCi0gICAgICAgIEhUTUxFbGVtZW50KiBsaXN0Tm9kZSA9
IGVuY2xvc2luZ0xpc3QobGlzdENoaWxkTm9kZSk7Ci0gICAgICAgIGlmICghbGlzdE5vZGUpCisg
ICAgICAgIFJlZlB0cjxIVE1MRWxlbWVudD4gbGlzdE5vZGUgPSBlbmNsb3NpbmdMaXN0KGxpc3RD
aGlsZE5vZGUpOworICAgICAgICBpZiAoIWxpc3ROb2RlKSB7CiAgICAgICAgICAgICBsaXN0Tm9k
ZSA9IGZpeE9ycGhhbmVkTGlzdENoaWxkKGxpc3RDaGlsZE5vZGUpOworICAgICAgICAgICAgbGlz
dE5vZGUgPSBtZXJnZVdpdGhOZWlnaGJvcmluZ0xpc3RzKGxpc3ROb2RlLmdldCgpKTsKKyAgICAg
ICAgfQogICAgICAgICBpZiAoIWxpc3ROb2RlLT5oYXNUYWdOYW1lKGxpc3RUYWcpKQogICAgICAg
ICAgICAgLy8gbGlzdENoaWxkTm9kZSB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgbGlzdCBhbmQg
YSBsaXN0IG9mIHR5cGUgbV90eXBlIHdpbGwgYmUgY3JlYXRlZC4KICAgICAgICAgICAgIHN3aXRj
aExpc3RUeXBlID0gdHJ1ZTsKIAotICAgICAgICB1bmxpc3RpZnlQYXJhZ3JhcGgoZW5kaW5nU2Vs
ZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCksIGxpc3ROb2RlLCBsaXN0Q2hpbGROb2RlKTsKKyAgICAg
ICAgLy8gSWYgdGhlIGxpc3QgaXMgb2YgdGhlIGRlc2lyZWQgdHlwZSwgYW5kIHdlIGFyZSBub3Qg
cmVtb3ZpbmcgdGhlIGxpc3QsIHRoZW4gZXhpdCBlYXJseS4KKyAgICAgICAgaWYgKCFzd2l0Y2hM
aXN0VHlwZSAmJiBmb3JjZUNyZWF0ZUxpc3QpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgLy8gSWYgdGhlIGVudGlyZSBsaXN0IGlzIHNlbGVjdGVkLCB0aGVuIGNvbnZlcnQgdGhlIHdo
b2xlIGxpc3QuCisgICAgICAgIGlmIChzd2l0Y2hMaXN0VHlwZSAmJiBpc05vZGVWaXNpYmx5Q29u
dGFpbmVkV2l0aGluKGxpc3ROb2RlLmdldCgpLCBjdXJyZW50U2VsZWN0aW9uKSkgeworICAgICAg
ICAgICAgUmVmUHRyPEhUTUxFbGVtZW50PiBsaXN0RWxlbWVudCA9IGNyZWF0ZUhUTUxFbGVtZW50
KGRvY3VtZW50KCksIGxpc3RUYWcpOworICAgICAgICAgICAgaW5zZXJ0Tm9kZUJlZm9yZShsaXN0
RWxlbWVudCwgbGlzdE5vZGUpOworICAgICAgICAgICAgTm9kZSogb3V0ZXJCbG9jayA9IGxpc3RD
aGlsZE5vZGUtPmlzQmxvY2tGbG93KCkgPyBsaXN0Q2hpbGROb2RlIDogbGlzdE5vZGUuZ2V0KCk7
CisgICAgICAgICAgICBtb3ZlUGFyYWdyYXBoV2l0aENsb25lcyhmaXJzdFBvc2l0aW9uSW5Ob2Rl
KGxpc3ROb2RlLmdldCgpKSwgbGFzdFBvc2l0aW9uSW5Ob2RlKGxpc3ROb2RlLmdldCgpKSwgbGlz
dEVsZW1lbnQuZ2V0KCksIG91dGVyQmxvY2spOworICAgICAgICAgICAgbGlzdEVsZW1lbnQgPSBt
ZXJnZVdpdGhOZWlnaGJvcmluZ0xpc3RzKGxpc3RFbGVtZW50LmdldCgpKTsKKyAgICAgICAgICAg
IHNldEVuZGluZ1NlbGVjdGlvbihWaXNpYmxlUG9zaXRpb24oZmlyc3RQb3NpdGlvbkluTm9kZShs
aXN0RWxlbWVudC5nZXQoKSkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgdW5saXN0aWZ5UGFyYWdyYXBoKGVuZGluZ1NlbGVjdGlvbigpLnZpc2li
bGVTdGFydCgpLCBsaXN0Tm9kZS5nZXQoKSwgbGlzdENoaWxkTm9kZSk7CiAgICAgfQogCiAgICAg
aWYgKCFsaXN0Q2hpbGROb2RlIHx8IHN3aXRjaExpc3RUeXBlIHx8IGZvcmNlQ3JlYXRlTGlzdCkK
QEAgLTI4NSwyMCArMzMzLDEwIEBAIFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IEluc2VydExpc3RD
b21tYW4KIAogICAgIG1vdmVQYXJhZ3JhcGgoc3RhcnQsIGVuZCwgVmlzaWJsZVBvc2l0aW9uKFBv
c2l0aW9uKHBsYWNlaG9sZGVyLmdldCgpLCAwKSksIHRydWUpOwogCi0gICAgLy8gRklYTUU6IGxp
c3RpZnlQYXJhZ3JhcGggc2hvdWxkIG5vdCBkZXBlbmQgb24gYSBtZW1iZXIgdmFyaWFibGUuCi0g
ICAgLy8gU2luY2UgZml4T3JwaGFuZWRMaXN0Q2hpbGQgaXMgdGhlIG9ubHkgb3RoZXIgbWV0aG9k
IHRoYXQgdXBkYXRlcyBtX2xpc3RFbGVtZW50LAotICAgIC8vIHdlIHNob3VsZCBmaXggdW5saXN0
aWZ5UGFyYWdyYXBoIHRvIHN1cHBvcnQgb3JwaGFuZWQgbGlzdCBjaGlsZCB0byBnZXQgcmlkIG9m
IHRoaXMgYXNzaWdubWVudC4KLSAgICBpZiAoIWxpc3RFbGVtZW50ICYmIG1fbGlzdEVsZW1lbnQp
Ci0gICAgICAgIGxpc3RFbGVtZW50ID0gbV9saXN0RWxlbWVudDsKLQotICAgIGlmIChsaXN0RWxl
bWVudCkgewotICAgICAgICBwcmV2aW91c0xpc3QgPSBsaXN0RWxlbWVudC0+cHJldmlvdXNFbGVt
ZW50U2libGluZygpOwotICAgICAgICBuZXh0TGlzdCA9IGxpc3RFbGVtZW50LT5uZXh0RWxlbWVu
dFNpYmxpbmcoKTsKLSAgICAgICAgaWYgKGNhbk1lcmdlTGlzdHMocHJldmlvdXNMaXN0LCBsaXN0
RWxlbWVudC5nZXQoKSkpCi0gICAgICAgICAgICBtZXJnZUlkZW50aWNhbEVsZW1lbnRzKHByZXZp
b3VzTGlzdCwgbGlzdEVsZW1lbnQuZ2V0KCkpOwotICAgICAgICBpZiAoY2FuTWVyZ2VMaXN0cyhs
aXN0RWxlbWVudC5nZXQoKSwgbmV4dExpc3QpKQotICAgICAgICAgICAgbWVyZ2VJZGVudGljYWxF
bGVtZW50cyhsaXN0RWxlbWVudC5nZXQoKSwgbmV4dExpc3QpOwotICAgIH0gZWxzZSBpZiAoY2Fu
TWVyZ2VMaXN0cyhuZXh0TGlzdCwgcHJldmlvdXNMaXN0KSkKKyAgICBpZiAobGlzdEVsZW1lbnQp
CisgICAgICAgIHJldHVybiBtZXJnZVdpdGhOZWlnaGJvcmluZ0xpc3RzKGxpc3RFbGVtZW50Lmdl
dCgpKTsKKworICAgIGlmIChjYW5NZXJnZUxpc3RzKHByZXZpb3VzTGlzdCwgbmV4dExpc3QpKQog
ICAgICAgICBtZXJnZUlkZW50aWNhbEVsZW1lbnRzKHByZXZpb3VzTGlzdCwgbmV4dExpc3QpOwog
CiAgICAgcmV0dXJuIGxpc3RFbGVtZW50OwpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0luc2VydExp
c3RDb21tYW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0luc2VydExpc3RDb21t
YW5kLmgJKHJldmlzaW9uIDY0MjE5KQorKysgV2ViQ29yZS9lZGl0aW5nL0luc2VydExpc3RDb21t
YW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDggKzUyLDkgQEAgcHJpdmF0ZToKICAgICB2aXJ0
dWFsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbigpIGNvbnN0IHsgcmV0dXJuIEVkaXRBY3Rpb25J
bnNlcnRMaXN0OyB9CiAKICAgICBIVE1MRWxlbWVudCogZml4T3JwaGFuZWRMaXN0Q2hpbGQoTm9k
ZSopOwotICAgIGJvb2wgbW9kaWZ5UmFuZ2UoKTsKLSAgICB2b2lkIGRvQXBwbHlGb3JTaW5nbGVQ
YXJhZ3JhcGgoYm9vbCBmb3JjZUNyZWF0ZUxpc3QpOworICAgIGJvb2wgc2VsZWN0aW9uSGFzTGlz
dE9mVHlwZShjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIGNvbnN0IFF1YWxpZmll
ZE5hbWUmKTsKKyAgICBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBtZXJnZVdpdGhOZWlnaGJvcmlu
Z0xpc3RzKEhUTUxFbGVtZW50Kik7CisgICAgdm9pZCBkb0FwcGx5Rm9yU2luZ2xlUGFyYWdyYXBo
KGJvb2wgZm9yY2VDcmVhdGVMaXN0LCBjb25zdCBRdWFsaWZpZWROYW1lJiwgUmFuZ2UqIGN1cnJl
bnRTZWxlY3Rpb24pOwogICAgIHZvaWQgdW5saXN0aWZ5UGFyYWdyYXBoKGNvbnN0IFZpc2libGVQ
b3NpdGlvbiYgb3JpZ2luYWxTdGFydCwgSFRNTEVsZW1lbnQqIGxpc3ROb2RlLCBOb2RlKiBsaXN0
Q2hpbGROb2RlKTsKICAgICBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBsaXN0aWZ5UGFyYWdyYXBo
KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgb3JpZ2luYWxTdGFydCwgY29uc3QgUXVhbGlmaWVkTmFt
ZSYgbGlzdFRhZyk7CiAgICAgUmVmUHRyPEhUTUxFbGVtZW50PiBtX2xpc3RFbGVtZW50OwpJbmRl
eDogV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCShyZXZpc2lvbiA2NDIxOSkKKysrIFdlYkNvcmUvZWRp
dGluZy9odG1sZWRpdGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgyOSw3ICs4MjksNyBAQCBI
VE1MRWxlbWVudCogb3V0ZXJtb3N0RW5jbG9zaW5nTGlzdChOb2RlCiAKIGJvb2wgY2FuTWVyZ2VM
aXN0cyhFbGVtZW50KiBmaXJzdExpc3QsIEVsZW1lbnQqIHNlY29uZExpc3QpCiB7Ci0gICAgaWYg
KCFmaXJzdExpc3QgfHwgIXNlY29uZExpc3QpCisgICAgaWYgKCFmaXJzdExpc3QgfHwgIXNlY29u
ZExpc3QgfHwgIWZpcnN0TGlzdC0+aXNIVE1MRWxlbWVudCgpIHx8ICFzZWNvbmRMaXN0LT5pc0hU
TUxFbGVtZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiBmaXJzdExp
c3QtPmhhc1RhZ05hbWUoc2Vjb25kTGlzdC0+dGFnUU5hbWUoKSkvLyBtYWtlIHN1cmUgdGhlIGxp
c3QgdHlwZXMgbWF0Y2ggKG9sIHZzLiB1bCkKQEAgLTExMzMsOSArMTEzMywxNSBAQCBib29sIGlz
Tm9kZVZpc2libHlDb250YWluZWRXaXRoaW4oTm9kZSogCiAgICAgaWYgKHNlbGVjdGVkUmFuZ2Ut
PmNvbXBhcmVOb2RlKG5vZGUsIGVjKSA9PSBSYW5nZTo6Tk9ERV9JTlNJREUpCiAgICAgICAgIHJl
dHVybiB0cnVlOwogCi0gICAgLy8gSWYgdGhlIG5vZGUgc3RhcnRzIGFuZCBlbmRzIGF0IHdoZXJl
IHNlbGVjdGVkUmFuZ2Ugc3RhcnRzIGFuZCBlbmRzLCB0aGUgbm9kZSBpcyBjb250YWluZWQgd2l0
aGluCi0gICAgcmV0dXJuIHZpc2libGVQb3NpdGlvbkJlZm9yZU5vZGUobm9kZSkgPT0gc2VsZWN0
ZWRSYW5nZS0+c3RhcnRQb3NpdGlvbigpCi0gICAgICAgICYmIHZpc2libGVQb3NpdGlvbkFmdGVy
Tm9kZShub2RlKSA9PSBzZWxlY3RlZFJhbmdlLT5lbmRQb3NpdGlvbigpOworICAgIGJvb2wgc3Rh
cnRJc1Zpc3VhbGx5U2FtZSA9IHZpc2libGVQb3NpdGlvbkJlZm9yZU5vZGUobm9kZSkgPT0gc2Vs
ZWN0ZWRSYW5nZS0+c3RhcnRQb3NpdGlvbigpOworICAgIGlmIChzdGFydElzVmlzdWFsbHlTYW1l
ICYmIGNvbXBhcmVQb3NpdGlvbnMoUG9zaXRpb24obm9kZS0+cGFyZW50Tm9kZSgpLCBub2RlLT5u
b2RlSW5kZXgoKSsxKSwgc2VsZWN0ZWRSYW5nZS0+ZW5kUG9zaXRpb24oKSkgPCAwKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKworICAgIGJvb2wgZW5kSXNWaXN1YWxseVNhbWUgPSB2aXNpYmxlUG9z
aXRpb25BZnRlck5vZGUobm9kZSkgPT0gc2VsZWN0ZWRSYW5nZS0+ZW5kUG9zaXRpb24oKTsKKyAg
ICBpZiAoZW5kSXNWaXN1YWxseVNhbWUgJiYgY29tcGFyZVBvc2l0aW9ucyhzZWxlY3RlZFJhbmdl
LT5zdGFydFBvc2l0aW9uKCksIFBvc2l0aW9uKG5vZGUtPnBhcmVudE5vZGUoKSwgbm9kZS0+bm9k
ZUluZGV4KCkpKSA8IDApCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIHN0YXJ0
SXNWaXN1YWxseVNhbWUgJiYgZW5kSXNWaXN1YWxseVNhbWU7CiB9CiAKIGJvb2wgaXNSZW5kZXJl
ZEFzTm9uSW5saW5lVGFibGVJbWFnZU9ySFIoY29uc3QgTm9kZSogbm9kZSkKSW5kZXg6IExheW91
dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDY0Mjk5KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjMgQEAKKzIwMTAtMDctMjkgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW5z
ZXJ0T3JkZXJlZExpc3QgZG9lcyBub3Qgc3dpdGNoIHRoZSBsaXN0IHR5cGUgcHJvcGVybHkgd2hl
biBpdCBoYXMgYW4gaW5uZXIgbGlzdC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQzMTY2CisKKyAgICAgICAgQWRkZWQgYSB0ZXN0IHRvIGNvbnZlcnQg
YW4gdW5vcmRlcmVkIGxpc3Qgd2l0aCBhIG5lc3RlZCBsaXN0IHRvIGFuIG9yZGVyZWQgbGlzdC4K
KyAgICAgICAgQWxzbyBhZGRlZCBhIHRlc3QgdG8gY29udmVydCBtdWx0aXBsZSBsaXN0cyB3aXRo
IGFuIG9ycGhhbmVkIGxpc3QgdG8gYW4gb3JkZXJlZCBsaXN0LgorICAgICAgICBUaGUgYmVoYXZp
b3Igb2YgV2ViS2l0IGlzIGNoYW5nZWQgbm90IHRvIGZsYXR0ZW4gdGhlIGxpc3RzIHdoZW4gaW5z
ZXJ0aW5nIG9yZGVyZWQvdW5vcmRlcmVkCisgICAgICAgIGxpc3RzIG9uIG5lc3RlZCBsaXN0cy4K
KworICAgICAgICAqIGVkaXRpbmcvZXhlY0NvbW1hbmQvNTIwNzM2OS1leHBlY3RlZC50eHQ6IE5v
IGxvbmdlciBmbGF0dGVucyB0aGUgbGlzdCB0byBtYXRjaCBGaXJlZm94IGFuZCBNU0lFLgorICAg
ICAgICAqIGVkaXRpbmcvZXhlY0NvbW1hbmQvNTIwNzM2OS5odG1sOiBVcGRhdGVkLgorICAgICAg
ICAqIGVkaXRpbmcvZXhlY0NvbW1hbmQvcmVtb3ZlLWxpc3QtaXRlbXMtZXhwZWN0ZWQudHh0OiBS
ZW1vdmVkIG9uZSB3aGl0ZXNwYWNlLgorICAgICAgICAqIGVkaXRpbmcvZXhlY0NvbW1hbmQvc3dp
dGNoLWxpc3QtdHlwZS13aXRoLWlubmVyLWxpc3QtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiBlZGl0aW5nL2V4ZWNDb21tYW5kL3N3aXRjaC1saXN0LXR5cGUtd2l0aC1pbm5lci1saXN0
Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGVkaXRpbmcvZXhlY0NvbW1hbmQvc3dpdGNoLWxpc3Qt
dHlwZS13aXRoLW9ycGhhbmVkLWxpLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZWRp
dGluZy9leGVjQ29tbWFuZC9zd2l0Y2gtbGlzdC10eXBlLXdpdGgtb3JwaGFuZWQtbGkuaHRtbDog
QWRkZWQuCisKIDIwMTAtMDctMjkgIFZpY3RvciBXYW5nICA8dmljdG9yd0BjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjY0MjcwLgpJbmRleDogTGF5b3V0
VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC81MjA3MzY5LWV4cGVjdGVkLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kLzUyMDczNjktZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiA2NDIxOSkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvNTIw
NzM2OS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsOSArMSw5IEBACi1UaGlzIHRl
c3RzIGZvciBhIGNyYXNoIHdoZW4gdHJ5aW5nIHRvIGZsYXR0ZW4gYSBsaXN0IGNvbnRhaW5pbmcg
YSBzdWItbGlzdCBhdCB0aGUgZW5kLiBZb3Ugc2hvdWxkbid0IGdldCBhIGNyYXNoIGFuZCB0aGVy
ZSBzaG91bGQgYmUgYSBzaW5nbGUgbGV2ZWwgbGlzdCBiZWxvdy4KK1RoaXMgdGVzdHMgZm9yIGEg
Y3Jhc2ggd2hlbiB0cnlpbmcgdG8gc3dpdGNoIHRoZSBsaXN0IHR5cGUgb2YgYW4gaW5uZXIgbGlz
dCBhdCB0aGUgZW5kLiBZb3Ugc2hvdWxkbid0IGdldCBhIGNyYXNoLiBUaGlzIHRlc3QgdXNlZCB0
byBmbGF0dGVuIHRoZSBsaXN0IGJ1dCB0aGlzIGJlaGF2aW9yIHdhcyBjb3JyZWN0IHRvIG1hdGNo
IEZpcmVmb3ggYW5kIE1TSUUgaW4gdGhlIGJ1ZyA0MzE2Ni4KIAogT25lCiBUd28KIFRocmVlCiBG
b3VyCi08dWw+PGxpPk9uZTwvbGk+PGxpPlR3bzwvbGk+PGxpPlRocmVlPC9saT48bGk+Rm91cjwv
bGk+PC91bD4KKzx1bD48bGk+T25lPC9saT48bGk+VHdvPC9saT48dWw+PGxpPlRocmVlPC9saT48
bGk+Rm91cjwvbGk+PC91bD48L3VsPgogCiBQQVNTCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5n
L2V4ZWNDb21tYW5kLzUyMDczNjkuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0
aW5nL2V4ZWNDb21tYW5kLzUyMDczNjkuaHRtbAkocmV2aXNpb24gNjQyMTkpCisrKyBMYXlvdXRU
ZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kLzUyMDczNjkuaHRtbAkod29ya2luZyBjb3B5KQpAQCAt
MSw0ICsxLDQgQEAKLTxwPlRoaXMgdGVzdHMgZm9yIGEgY3Jhc2ggd2hlbiB0cnlpbmcgdG8gZmxh
dHRlbiBhIGxpc3QgY29udGFpbmluZyBhIHN1Yi1saXN0IGF0IHRoZSBlbmQuIFlvdSBzaG91bGRu
J3QgZ2V0IGEgY3Jhc2ggYW5kIHRoZXJlIHNob3VsZCBiZSBhIHNpbmdsZSBsZXZlbCBsaXN0IGJl
bG93LjwvcD4KKzxwPlRoaXMgdGVzdHMgZm9yIGEgY3Jhc2ggd2hlbiB0cnlpbmcgdG8gc3dpdGNo
IHRoZSBsaXN0IHR5cGUgb2YgYW4gaW5uZXIgbGlzdCBhdCB0aGUgZW5kLiBZb3Ugc2hvdWxkbid0
IGdldCBhIGNyYXNoLiBUaGlzIHRlc3QgdXNlZCB0byBmbGF0dGVuIHRoZSBsaXN0IGJ1dCB0aGlz
IGJlaGF2aW9yIHdhcyBjb3JyZWN0IHRvIG1hdGNoIEZpcmVmb3ggYW5kIE1TSUUgaW4gdGhlIGJ1
ZyA0MzE2Ni48L3A+CiA8ZGl2IGlkPSJkaXYiIGNvbnRlbnRlZGl0YWJsZT0idHJ1ZSI+PG9sPjxs
aT5PbmU8L2xpPjxsaT5Ud288L2xpPjx1bD48bGk+VGhyZWU8L2xpPjxsaT5Gb3VyPC9saT48L2Rp
dj4KIDxwIGlkPSJjb25zb2xlIj48L3A+CiAKSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvZXhl
Y0NvbW1hbmQvcmVtb3ZlLWxpc3QtaXRlbXMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvcmVtb3ZlLWxpc3QtaXRlbXMtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiA2NDIxOSkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQv
cmVtb3ZlLWxpc3QtaXRlbXMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0zOCw0ICsz
OCw0IEBAIFRoaXMgc2hvdWxkIG5vdCBiZSBpbiBhIGxpc3QuCiBiYXIKIFRoaXMgc2hvdWxkIG5v
dCBiZSBpbiBhIGxpc3QuCiBUaGlzIHNob3VsZCBub3QgYmUgaW4gYSBsaXN0LgotPG9sIHN0eWxl
PSJib3JkZXI6IDFweCBzb2xpZCByZWQ7Ij4gPGxpPmZvbzwvbGk+IDwvb2w+PHNwYW4gaWQ9Iml0
ZW0xIj5UaGlzIHNob3VsZCBub3QgYmUgYSBsaXN0Ljwvc3Bhbj4mbmJzcDs8YnI+PG9sIHN0eWxl
PSJib3JkZXI6IDFweCBzb2xpZCByZWQ7Ij48YnI+IGJhciA8bGk+YmF6PC9saT4gPC9vbD5UaGlz
IHNob3VsZCBub3QgYmUgaW4gYSBsaXN0Ljxicj48b2wgc3R5bGU9ImJvcmRlcjogMXB4IHNvbGlk
IHJlZDsiPjxsaT5mb288L2xpPiA8L29sPlRoaXMgc2hvdWxkIG5vdCBiZSBpbiBhIGxpc3QuPGJy
PjxvbCBzdHlsZT0iYm9yZGVyOiAxcHggc29saWQgcmVkOyI+IDxsaT5iYXI8L2xpPiA8L29sPiBU
aGlzIHNob3VsZCBub3QgYmUgaW4gYSBsaXN0Ljxicj4gVGhpcyBzaG91bGQgbm90IGJlIGluIGEg
bGlzdC4KKzxvbCBzdHlsZT0iYm9yZGVyOiAxcHggc29saWQgcmVkOyI+IDxsaT5mb288L2xpPiA8
L29sPjxzcGFuIGlkPSJpdGVtMSI+VGhpcyBzaG91bGQgbm90IGJlIGEgbGlzdC48L3NwYW4+Jm5i
c3A7PGJyPjxvbCBzdHlsZT0iYm9yZGVyOiAxcHggc29saWQgcmVkOyI+PGJyPiBiYXIgPGxpPmJh
ejwvbGk+IDwvb2w+VGhpcyBzaG91bGQgbm90IGJlIGluIGEgbGlzdC48YnI+PG9sIHN0eWxlPSJi
b3JkZXI6IDFweCBzb2xpZCByZWQ7Ij48bGk+Zm9vPC9saT4gPC9vbD5UaGlzIHNob3VsZCBub3Qg
YmUgaW4gYSBsaXN0Ljxicj48b2wgc3R5bGU9ImJvcmRlcjogMXB4IHNvbGlkIHJlZDsiPiA8bGk+
YmFyPC9saT4gPC9vbD4gVGhpcyBzaG91bGQgbm90IGJlIGluIGEgbGlzdC48YnI+VGhpcyBzaG91
bGQgbm90IGJlIGluIGEgbGlzdC4KSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1h
bmQvc3dpdGNoLWxpc3QtdHlwZS13aXRoLWlubmVyLWxpc3QtZXhwZWN0ZWQudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvc3dpdGNoLWxpc3QtdHlwZS13
aXRoLWlubmVyLWxpc3QtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
ZWRpdGluZy9leGVjQ29tbWFuZC9zd2l0Y2gtbGlzdC10eXBlLXdpdGgtaW5uZXItbGlzdC1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjkgQEAKK1RoaXMgdGVzdHMgc3dpdGNo
aW5nIGFuIHVub3JkZXJlZCBsaXN0IHdpdGggYSBuZXN0ZWQgbGlzdCB0byBhbiBvcmRlcmVkIGxp
c3QuCisKKzxESVYgaWQ9InRlc3QiIGNvbnRlbnRFZGl0YWJsZT0iIj4KKzwjdGV4dD4KKzwvI3Rl
eHQ+Cis8T0w+Cis8TEk+Cis8I3RleHQ+PHNlbGVjdGlvbi1jYXJldD5oZWxsbzwvI3RleHQ+Cis8
L0xJPgorPCN0ZXh0PgorPC8jdGV4dD4KKzxPTD4KKzwjdGV4dD4KKzwvI3RleHQ+Cis8TEk+Cis8
I3RleHQ+d29ybGQ8LyN0ZXh0PgorPC9MST4KKzwjdGV4dD4KKzwvI3RleHQ+Cis8L09MPgorPCN0
ZXh0PgorPC8jdGV4dD4KKzxMST4KKzwjdGV4dD53ZWJraXQ8LyN0ZXh0PgorPC9MST4KKzwvT0w+
Cis8I3RleHQ+Cis8LyN0ZXh0PgorPC9ESVY+CkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4
ZWNDb21tYW5kL3N3aXRjaC1saXN0LXR5cGUtd2l0aC1pbm5lci1saXN0Lmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9zd2l0Y2gtbGlzdC10eXBlLXdp
dGgtaW5uZXItbGlzdC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9l
eGVjQ29tbWFuZC9zd2l0Y2gtbGlzdC10eXBlLXdpdGgtaW5uZXItbGlzdC5odG1sCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDIwIEBACis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2R1bXAt
YXMtbWFya3VwLmpzIj48L3NjcmlwdD4KKzxib2R5PgorPGRpdiBpZD0idGVzdCIgY29udGVudGVk
aXRhYmxlPgorPHVsPgorICAgIDxsaT5oZWxsbzwvbGk+CisgICAgPG9sPgorICAgIDxsaT53b3Js
ZDwvbGk+CisgICAgPC9vbD4KKyAgICA8bGk+d2Via2l0PC9saT4KKzwvdWw+Cis8L2Rpdj4KKzxz
Y3JpcHQ+CitNYXJrdXAuZGVzY3JpcHRpb24oJ1RoaXMgdGVzdHMgc3dpdGNoaW5nIGFuIHVub3Jk
ZXJlZCBsaXN0IHdpdGggYSBuZXN0ZWQgbGlzdCB0byBhbiBvcmRlcmVkIGxpc3QuJyk7CitNYXJr
dXAuc2V0Tm9kZVRvRHVtcCgndGVzdCcpOworCit2YXIgdGVzdCA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCd0ZXN0Jyk7Cit3aW5kb3cuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0QWxsQ2hpbGRyZW4o
dGVzdCk7Citkb2N1bWVudC5leGVjQ29tbWFuZCgnSW5zZXJ0T3JkZXJlZExpc3QnLCBmYWxzZSwg
bnVsbCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvZXhl
Y0NvbW1hbmQvc3dpdGNoLWxpc3QtdHlwZS13aXRoLW9ycGhhbmVkLWxpLWV4cGVjdGVkLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL3N3aXRjaC1saXN0
LXR5cGUtd2l0aC1vcnBoYW5lZC1saS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL3N3aXRjaC1saXN0LXR5cGUtd2l0aC1vcnBoYW5l
ZC1saS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzQgQEAKK1RoaXMgdGVz
dHMgc3dpdGNoaW5nIG11bHRpcGxlIGxpc3RzIHdpdGggYW4gb3JwaGFuZWQgbGlzdCBjaGlsZCB0
byBhbiBvcmRlcmVkIGxpc3QuCisKKzxESVYgaWQ9InRlc3QiIGNvbnRlbnRFZGl0YWJsZT0iIj4K
KzwjdGV4dD4KKzwvI3RleHQ+Cis8T0w+Cis8TEk+Cis8I3RleHQ+PHNlbGVjdGlvbi1hbmNob3I+
d2Via2l0PC8jdGV4dD4KKzwvTEk+Cis8TEk+Cis8I3RleHQ+cm9ja3M8LyN0ZXh0PgorPC9MST4K
KzwjdGV4dD4KKzwvI3RleHQ+Cis8TEk+Cis8I3RleHQ+YmVjYXVzZSBvZjwvI3RleHQ+Cis8L0xJ
PgorPCN0ZXh0PgorPC8jdGV4dD4KKzxMST4KKzwjdGV4dD55b3U8c2VsZWN0aW9uLWZvY3VzPjwv
I3RleHQ+Cis8L0xJPgorPCN0ZXh0PgorPC8jdGV4dD4KKzwvT0w+Cis8I3RleHQ+Cis8LyN0ZXh0
PgorPCN0ZXh0PgorPC8jdGV4dD4KKzwjdGV4dD4KKzwvI3RleHQ+Cis8I3RleHQ+Cis8LyN0ZXh0
PgorPC9ESVY+CkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL3N3aXRjaC1s
aXN0LXR5cGUtd2l0aC1vcnBoYW5lZC1saS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2VkaXRpbmcvZXhlY0NvbW1hbmQvc3dpdGNoLWxpc3QtdHlwZS13aXRoLW9ycGhhbmVkLWxpLmh0
bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL3N3aXRj
aC1saXN0LXR5cGUtd2l0aC1vcnBoYW5lZC1saS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDIzIEBACis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2R1bXAtYXMtbWFya3VwLmpzIj48
L3NjcmlwdD4KKzxib2R5PgorPGRpdiBpZD0idGVzdCIgY29udGVudGVkaXRhYmxlPgorPHVsPgor
ICAgIDxsaT53ZWJraXQ8L2xpPgorPC91bD4KKzxsaT5yb2NrczwvbGk+Cis8dWw+CisgICAgPGxp
PmJlY2F1c2Ugb2Y8L2xpPgorPC91bD4KKzxvbD4KKyAgICA8bGk+eW91PC9saT4KKzwvb2w+Cis8
L2Rpdj4KKzxzY3JpcHQ+CitNYXJrdXAuZGVzY3JpcHRpb24oJ1RoaXMgdGVzdHMgc3dpdGNoaW5n
IG11bHRpcGxlIGxpc3RzIHdpdGggYW4gb3JwaGFuZWQgbGlzdCBjaGlsZCB0byBhbiBvcmRlcmVk
IGxpc3QuJyk7CitNYXJrdXAuc2V0Tm9kZVRvRHVtcCgndGVzdCcpOworCit2YXIgdGVzdCA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0Jyk7Cit3aW5kb3cuZ2V0U2VsZWN0aW9uKCkuc2Vs
ZWN0QWxsQ2hpbGRyZW4odGVzdCk7Citkb2N1bWVudC5leGVjQ29tbWFuZCgnSW5zZXJ0T3JkZXJl
ZExpc3QnLCBmYWxzZSwgbnVsbCk7Cis8L3NjcmlwdD4KKzwvYm9keT4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63000</attachid>
            <date>2010-07-29 15:26:28 -0700</date>
            <delta_ts>2010-07-29 17:34:13 -0700</delta_ts>
            <desc>made the call to endingSelection().firstRange().get() inline</desc>
            <filename>fix43166c</filename>
            <type>text/plain</type>
            <size>20050</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NDI5OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzEgQEAKKzIwMTAtMDctMjkgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW5z
ZXJ0T3JkZXJlZExpc3QgZG9lcyBub3Qgc3dpdGNoIHRoZSBsaXN0IHR5cGUgcHJvcGVybHkgd2hl
biBpdCBoYXMgYW4gaW5uZXIgbGlzdC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQzMTY2CisKKyAgICAgICAgVGhlIGJ1ZyB3YXMgY2F1c2VkIGJ5IGZv
cmNlZENyZWF0ZUxpc3Qgd2FzIG5vdCBzZXQgdG8gdHJ1ZSB3aGVuIHRoZSBzdGFydCBhbmQgdGhl
IGVuZAorICAgICAgICBvZiB0aGUgc2VsZWN0aW9uIGxpZXMgaW4gdGhlIHNhbWUgbGlzdC4gQWRk
ZWQgc2VsZWN0aW9uSGFzTGlzdE9mVHlwZSB0byBmaXggdGhpcyBwcm9ibGVtLgorCisgICAgICAg
IFdlYktpdCB1c2VkIG5vdCB0byBjb252ZXJ0IHRoZSBvdXRlciBsaXN0cyBldmVuIHdoZW4gdGhl
IGxpc3QgaXMgZnVsbHkgc2VsZWN0ZWQuCisgICAgICAgIENvcnJlY3RlZCB0aGlzIGJlaGF2aW9y
IGJ5IGNvbnZlcnRpbmcgdGhlIGVudGlyZSBsaXN0IGF0IG9uY2Ugd2hlbiB0aGUgbGlzdCBpcyBm
dWxseSBzZWxlY3RlZC4KKyAgICAgICAgVG8gZGVjaWRlIHdoZXRoZXIgb3Igbm90IGEgbGlzdCBp
cyBmdWxseSBzZWxlY3RlZCwgYWRkZWQgY3VycmVudFNlbGVjdGlvbiBhcmd1bWVudCB0byBkb0Fw
cGx5Rm9yU2luZ2xlUGFyYWdyYXBoLgorCisgICAgICAgIFRlc3RzOiBlZGl0aW5nL2V4ZWNDb21t
YW5kL3N3aXRjaC1saXN0LXR5cGUtd2l0aC1pbm5lci1saXN0Lmh0bWwKKyAgICAgICAgICAgICAg
IGVkaXRpbmcvZXhlY0NvbW1hbmQvc3dpdGNoLWxpc3QtdHlwZS13aXRoLW9ycGhhbmVkLWxpLmh0
bWwKKworICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW5zZXJ0TGlzdENvbW1hbmQ6Om1lcmdlV2l0aE5laWdoYm9yaW5nTGlzdHMpOiBF
eHRyYWN0ZWQgdGhlIGNvZGUgdG8gbWVyZ2UgbGlzdHMuCisgICAgICAgIChXZWJDb3JlOjpJbnNl
cnRMaXN0Q29tbWFuZDo6c2VsZWN0aW9uSGFzTGlzdE9mVHlwZSk6IGF0dGFjaG1lbnQuY2dpCisg
ICAgICAgIChXZWJDb3JlOjpJbnNlcnRMaXN0Q29tbWFuZDo6ZG9BcHBseSk6IENhbGxzIHNlbGVj
dGlvbkhhc0xpc3RPZlR5cGUuCisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRMaXN0Q29tbWFuZDo6
ZG9BcHBseUZvclNpbmdsZVBhcmFncmFwaCk6IFNlZSBhYm92ZS4KKyAgICAgICAgKFdlYkNvcmU6
Okluc2VydExpc3RDb21tYW5kOjpsaXN0aWZ5UGFyYWdyYXBoKTogQ2FsbHMgbWVyZ2VXaXRoTmVp
Z2hib3JpbmdMaXN0cy4KKyAgICAgICAgKiBlZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmg6Cisg
ICAgICAgICogZWRpdGluZy9odG1sZWRpdGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjYW5N
ZXJnZUxpc3RzKTogRW5zdXJlcyBsaXN0cyBiZWluZyBtZXJnZWQgYXJlIGluc3RhbmNlcyBvZiBI
VE1MRWxlbWVudC4KKyAgICAgICAgKFdlYkNvcmU6OmlzTm9kZVZpc2libHlDb250YWluZWRXaXRo
aW4pOiBXb3JrcyBwcm9wZXJseSB3aGVuIG9uZSBlbmQgaXMgaW5zaWRlIHRoZSByYW5nZS4KKwog
MjAxMC0wNy0yOSAgVmljdG9yIFdhbmcgIDx2aWN0b3J3QGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByNjQyNzAuCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcv
SW5zZXJ0TGlzdENvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9JbnNl
cnRMaXN0Q29tbWFuZC5jcHAJKHJldmlzaW9uIDY0MjE5KQorKysgV2ViQ29yZS9lZGl0aW5nL0lu
c2VydExpc3RDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsNiArNTQsMzcgQEAgSFRN
TEVsZW1lbnQqIEluc2VydExpc3RDb21tYW5kOjpmaXhPcnBoYQogICAgIHJldHVybiBsaXN0RWxl
bWVudC5nZXQoKTsKIH0KIAorUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gSW5zZXJ0TGlzdENvbW1h
bmQ6Om1lcmdlV2l0aE5laWdoYm9yaW5nTGlzdHMoSFRNTEVsZW1lbnQqIGxpc3RFbGVtZW50KQor
eworICAgIEVsZW1lbnQqIHByZXZpb3VzTGlzdCA9IGxpc3RFbGVtZW50LT5wcmV2aW91c0VsZW1l
bnRTaWJsaW5nKCk7CisgICAgRWxlbWVudCogbmV4dExpc3QgPSBsaXN0RWxlbWVudC0+bmV4dEVs
ZW1lbnRTaWJsaW5nKCk7CisgICAgaWYgKGNhbk1lcmdlTGlzdHMocHJldmlvdXNMaXN0LCBsaXN0
RWxlbWVudCkpCisgICAgICAgIG1lcmdlSWRlbnRpY2FsRWxlbWVudHMocHJldmlvdXNMaXN0LCBs
aXN0RWxlbWVudCk7CisgICAgaWYgKGNhbk1lcmdlTGlzdHMobGlzdEVsZW1lbnQsIG5leHRMaXN0
KSkgeworICAgICAgICBtZXJnZUlkZW50aWNhbEVsZW1lbnRzKGxpc3RFbGVtZW50LCBuZXh0TGlz
dCk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KG5leHRMaXN0KTsK
KyAgICB9CisgICAgcmV0dXJuIGxpc3RFbGVtZW50OworfQorCitib29sIEluc2VydExpc3RDb21t
YW5kOjpzZWxlY3Rpb25IYXNMaXN0T2ZUeXBlKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVj
dGlvbiwgY29uc3QgUXVhbGlmaWVkTmFtZSYgbGlzdFRhZykKK3sKKyAgICBWaXNpYmxlUG9zaXRp
b24gc3RhcnQgPSBzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCk7CisKKyAgICBpZiAoIWVuY2xvc2lu
Z0xpc3Qoc3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCkpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBWaXNpYmxlUG9zaXRpb24gZW5kID0gc2VsZWN0aW9uLnZpc2libGVFbmQoKTsK
KyAgICB3aGlsZSAoc3RhcnQuaXNOb3ROdWxsKCkgJiYgc3RhcnQgIT0gZW5kKSB7CisgICAgICAg
IEVsZW1lbnQqIGxpc3ROb2RlID0gZW5jbG9zaW5nTGlzdChzdGFydC5kZWVwRXF1aXZhbGVudCgp
Lm5vZGUoKSk7CisgICAgICAgIGlmICghbGlzdE5vZGUgfHwgIWxpc3ROb2RlLT5oYXNUYWdOYW1l
KGxpc3RUYWcpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBzdGFydCA9IHN0
YXJ0T2ZOZXh0UGFyYWdyYXBoKHN0YXJ0KTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KwogSW5zZXJ0TGlzdENvbW1hbmQ6Okluc2VydExpc3RDb21tYW5kKERvY3VtZW50KiBkb2N1bWVu
dCwgVHlwZSB0eXBlKSAKICAgICA6IENvbXBvc2l0ZUVkaXRDb21tYW5kKGRvY3VtZW50KSwgbV90
eXBlKHR5cGUpCiB7CkBAIC04MCw2ICsxMTEsNyBAQCB2b2lkIEluc2VydExpc3RDb21tYW5kOjpk
b0FwcGx5KCkKICAgICBpZiAodmlzaWJsZUVuZCAhPSB2aXNpYmxlU3RhcnQgJiYgaXNTdGFydE9m
UGFyYWdyYXBoKHZpc2libGVFbmQpKQogICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oVmlzaWJs
ZVNlbGVjdGlvbih2aXNpYmxlU3RhcnQsIHZpc2libGVFbmQucHJldmlvdXModHJ1ZSkpKTsKIAor
ICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIGxpc3RUYWcgPSAobV90eXBlID09IE9yZGVyZWRMaXN0
KSA/IG9sVGFnIDogdWxUYWc7CiAgICAgaWYgKGVuZGluZ1NlbGVjdGlvbigpLmlzUmFuZ2UoKSkg
ewogICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IHNlbGVjdGlvbkZvclBhcmFn
cmFwaEl0ZXJhdGlvbihlbmRpbmdTZWxlY3Rpb24oKSk7CiAgICAgICAgIEFTU0VSVChzZWxlY3Rp
b24uaXNSYW5nZSgpKTsKQEAgLTg4LDEwICsxMjAsOSBAQCB2b2lkIEluc2VydExpc3RDb21tYW5k
Ojpkb0FwcGx5KCkKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZMYXN0UGFyYWdyYXBo
ID0gc3RhcnRPZlBhcmFncmFwaChlbmRPZlNlbGVjdGlvbik7CiAKICAgICAgICAgaWYgKHN0YXJ0
T2ZQYXJhZ3JhcGgoc3RhcnRPZlNlbGVjdGlvbikgIT0gc3RhcnRPZkxhc3RQYXJhZ3JhcGgpIHsK
LSAgICAgICAgICAgIE5vZGUqIHN0YXJ0TGlzdCA9IGVuY2xvc2luZ0xpc3Qoc3RhcnRPZlNlbGVj
dGlvbi5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKSk7Ci0gICAgICAgICAgICBOb2RlKiBlbmRMaXN0
ID0gZW5jbG9zaW5nTGlzdChlbmRPZlNlbGVjdGlvbi5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKSk7
Ci0gICAgICAgICAgICBib29sIGZvcmNlQ3JlYXRlTGlzdCA9ICFzdGFydExpc3QgfHwgc3RhcnRM
aXN0ICE9IGVuZExpc3Q7CisgICAgICAgICAgICBib29sIGZvcmNlQ3JlYXRlTGlzdCA9ICFzZWxl
Y3Rpb25IYXNMaXN0T2ZUeXBlKHNlbGVjdGlvbiwgbGlzdFRhZyk7CiAKKyAgICAgICAgICAgIFJl
ZlB0cjxSYW5nZT4gY3VycmVudFNlbGVjdGlvbiA9IGVuZGluZ1NlbGVjdGlvbigpLmZpcnN0UmFu
Z2UoKTsKICAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBzdGFydE9mQ3VycmVudFBhcmFncmFw
aCA9IHN0YXJ0T2ZTZWxlY3Rpb247CiAgICAgICAgICAgICB3aGlsZSAoc3RhcnRPZkN1cnJlbnRQ
YXJhZ3JhcGggIT0gc3RhcnRPZkxhc3RQYXJhZ3JhcGgpIHsKICAgICAgICAgICAgICAgICAvLyBk
b0FwcGx5KCkgbWF5IG9wZXJhdGUgb24gYW5kIHJlbW92ZSB0aGUgbGFzdCBwYXJhZ3JhcGggb2Yg
dGhlIHNlbGVjdGlvbiBmcm9tIHRoZSBkb2N1bWVudCAKQEAgLTEwMiw3ICsxMzMsNyBAQCB2b2lk
IEluc2VydExpc3RDb21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAgICAgICAgICBpZiAoIXN0YXJ0
T2ZMYXN0UGFyYWdyYXBoLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLT5pbkRvY3VtZW50KCkpCiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICBzZXRFbmRpbmdTZWxl
Y3Rpb24oc3RhcnRPZkN1cnJlbnRQYXJhZ3JhcGgpOwotICAgICAgICAgICAgICAgIGRvQXBwbHlG
b3JTaW5nbGVQYXJhZ3JhcGgoZm9yY2VDcmVhdGVMaXN0KTsKKyAgICAgICAgICAgICAgICBkb0Fw
cGx5Rm9yU2luZ2xlUGFyYWdyYXBoKGZvcmNlQ3JlYXRlTGlzdCwgbGlzdFRhZywgY3VycmVudFNl
bGVjdGlvbi5nZXQoKSk7CiAKICAgICAgICAgICAgICAgICAvLyBGZXRjaCB0aGUgc3RhcnQgb2Yg
dGhlIHNlbGVjdGlvbiBhZnRlciBtb3ZpbmcgdGhlIGZpcnN0IHBhcmFncmFwaCwKICAgICAgICAg
ICAgICAgICAvLyBiZWNhdXNlIG1vdmluZyB0aGUgcGFyYWdyYXBoIHdpbGwgaW52YWxpZGF0ZSB0
aGUgb3JpZ2luYWwgc3RhcnQuICAKQEAgLTExNCw3ICsxNDUsNyBAQCB2b2lkIEluc2VydExpc3RD
b21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAgICAgICAgICBzdGFydE9mQ3VycmVudFBhcmFncmFw
aCA9IHN0YXJ0T2ZOZXh0UGFyYWdyYXBoKGVuZGluZ1NlbGVjdGlvbigpLnZpc2libGVTdGFydCgp
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihlbmRPZlNl
bGVjdGlvbik7Ci0gICAgICAgICAgICBkb0FwcGx5Rm9yU2luZ2xlUGFyYWdyYXBoKGZvcmNlQ3Jl
YXRlTGlzdCk7CisgICAgICAgICAgICBkb0FwcGx5Rm9yU2luZ2xlUGFyYWdyYXBoKGZvcmNlQ3Jl
YXRlTGlzdCwgbGlzdFRhZywgY3VycmVudFNlbGVjdGlvbi5nZXQoKSk7CiAgICAgICAgICAgICAv
LyBGZXRjaCB0aGUgZW5kIG9mIHRoZSBzZWxlY3Rpb24sIGZvciB0aGUgcmVhc29uIG1lbnRpb25l
ZCBhYm92ZS4KICAgICAgICAgICAgIGVuZE9mU2VsZWN0aW9uID0gZW5kaW5nU2VsZWN0aW9uKCku
dmlzaWJsZUVuZCgpOwogICAgICAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVTZWxl
Y3Rpb24oc3RhcnRPZlNlbGVjdGlvbiwgZW5kT2ZTZWxlY3Rpb24pKTsKQEAgLTEyMiwyOCArMTUz
LDQ0IEBAIHZvaWQgSW5zZXJ0TGlzdENvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICB9CiAgICAg
fQogCi0gICAgZG9BcHBseUZvclNpbmdsZVBhcmFncmFwaChmYWxzZSk7CisgICAgZG9BcHBseUZv
clNpbmdsZVBhcmFncmFwaChmYWxzZSwgbGlzdFRhZywgZW5kaW5nU2VsZWN0aW9uKCkuZmlyc3RS
YW5nZSgpLmdldCgpKTsKIH0KIAotdm9pZCBJbnNlcnRMaXN0Q29tbWFuZDo6ZG9BcHBseUZvclNp
bmdsZVBhcmFncmFwaChib29sIGZvcmNlQ3JlYXRlTGlzdCkKK3ZvaWQgSW5zZXJ0TGlzdENvbW1h
bmQ6OmRvQXBwbHlGb3JTaW5nbGVQYXJhZ3JhcGgoYm9vbCBmb3JjZUNyZWF0ZUxpc3QsIGNvbnN0
IFF1YWxpZmllZE5hbWUmIGxpc3RUYWcsIFJhbmdlKiBjdXJyZW50U2VsZWN0aW9uKQogewogICAg
IC8vIEZJWE1FOiBUaGlzIHdpbGwgcHJvZHVjZSB1bmV4cGVjdGVkIHJlc3VsdHMgZm9yIGEgc2Vs
ZWN0aW9uIHRoYXQgc3RhcnRzIGp1c3QgYmVmb3JlIGEKICAgICAvLyB0YWJsZSBhbmQgZW5kcyBp
bnNpZGUgdGhlIGZpcnN0IGNlbGwsIHNlbGVjdGlvbkZvclBhcmFncmFwaEl0ZXJhdGlvbiBzaG91
bGQgcHJvYmFibHkKICAgICAvLyBiZSByZW5hbWVkIGFuZCBkZXBsb3llZCBpbnNpZGUgc2V0RW5k
aW5nU2VsZWN0aW9uKCkuCiAgICAgTm9kZSogc2VsZWN0aW9uTm9kZSA9IGVuZGluZ1NlbGVjdGlv
bigpLnN0YXJ0KCkubm9kZSgpOwotICAgIGNvbnN0IFF1YWxpZmllZE5hbWUgbGlzdFRhZyA9ICht
X3R5cGUgPT0gT3JkZXJlZExpc3QpID8gb2xUYWcgOiB1bFRhZzsKICAgICBOb2RlKiBsaXN0Q2hp
bGROb2RlID0gZW5jbG9zaW5nTGlzdENoaWxkKHNlbGVjdGlvbk5vZGUpOwogICAgIGJvb2wgc3dp
dGNoTGlzdFR5cGUgPSBmYWxzZTsKICAgICBpZiAobGlzdENoaWxkTm9kZSkgewogICAgICAgICAv
LyBSZW1vdmUgdGhlIGxpc3QgY2hsaWxkLgotICAgICAgICBIVE1MRWxlbWVudCogbGlzdE5vZGUg
PSBlbmNsb3NpbmdMaXN0KGxpc3RDaGlsZE5vZGUpOwotICAgICAgICBpZiAoIWxpc3ROb2RlKQor
ICAgICAgICBSZWZQdHI8SFRNTEVsZW1lbnQ+IGxpc3ROb2RlID0gZW5jbG9zaW5nTGlzdChsaXN0
Q2hpbGROb2RlKTsKKyAgICAgICAgaWYgKCFsaXN0Tm9kZSkgewogICAgICAgICAgICAgbGlzdE5v
ZGUgPSBmaXhPcnBoYW5lZExpc3RDaGlsZChsaXN0Q2hpbGROb2RlKTsKKyAgICAgICAgICAgIGxp
c3ROb2RlID0gbWVyZ2VXaXRoTmVpZ2hib3JpbmdMaXN0cyhsaXN0Tm9kZS5nZXQoKSk7CisgICAg
ICAgIH0KICAgICAgICAgaWYgKCFsaXN0Tm9kZS0+aGFzVGFnTmFtZShsaXN0VGFnKSkKICAgICAg
ICAgICAgIC8vIGxpc3RDaGlsZE5vZGUgd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIGxpc3QgYW5k
IGEgbGlzdCBvZiB0eXBlIG1fdHlwZSB3aWxsIGJlIGNyZWF0ZWQuCiAgICAgICAgICAgICBzd2l0
Y2hMaXN0VHlwZSA9IHRydWU7CiAKLSAgICAgICAgdW5saXN0aWZ5UGFyYWdyYXBoKGVuZGluZ1Nl
bGVjdGlvbigpLnZpc2libGVTdGFydCgpLCBsaXN0Tm9kZSwgbGlzdENoaWxkTm9kZSk7CisgICAg
ICAgIC8vIElmIHRoZSBsaXN0IGlzIG9mIHRoZSBkZXNpcmVkIHR5cGUsIGFuZCB3ZSBhcmUgbm90
IHJlbW92aW5nIHRoZSBsaXN0LCB0aGVuIGV4aXQgZWFybHkuCisgICAgICAgIGlmICghc3dpdGNo
TGlzdFR5cGUgJiYgZm9yY2VDcmVhdGVMaXN0KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIC8vIElmIHRoZSBlbnRpcmUgbGlzdCBpcyBzZWxlY3RlZCwgdGhlbiBjb252ZXJ0IHRoZSB3
aG9sZSBsaXN0LgorICAgICAgICBpZiAoc3dpdGNoTGlzdFR5cGUgJiYgaXNOb2RlVmlzaWJseUNv
bnRhaW5lZFdpdGhpbihsaXN0Tm9kZS5nZXQoKSwgY3VycmVudFNlbGVjdGlvbikpIHsKKyAgICAg
ICAgICAgIFJlZlB0cjxIVE1MRWxlbWVudD4gbGlzdEVsZW1lbnQgPSBjcmVhdGVIVE1MRWxlbWVu
dChkb2N1bWVudCgpLCBsaXN0VGFnKTsKKyAgICAgICAgICAgIGluc2VydE5vZGVCZWZvcmUobGlz
dEVsZW1lbnQsIGxpc3ROb2RlKTsKKyAgICAgICAgICAgIE5vZGUqIG91dGVyQmxvY2sgPSBsaXN0
Q2hpbGROb2RlLT5pc0Jsb2NrRmxvdygpID8gbGlzdENoaWxkTm9kZSA6IGxpc3ROb2RlLmdldCgp
OworICAgICAgICAgICAgbW92ZVBhcmFncmFwaFdpdGhDbG9uZXMoZmlyc3RQb3NpdGlvbkluTm9k
ZShsaXN0Tm9kZS5nZXQoKSksIGxhc3RQb3NpdGlvbkluTm9kZShsaXN0Tm9kZS5nZXQoKSksIGxp
c3RFbGVtZW50LmdldCgpLCBvdXRlckJsb2NrKTsKKyAgICAgICAgICAgIGxpc3RFbGVtZW50ID0g
bWVyZ2VXaXRoTmVpZ2hib3JpbmdMaXN0cyhsaXN0RWxlbWVudC5nZXQoKSk7CisgICAgICAgICAg
ICBzZXRFbmRpbmdTZWxlY3Rpb24oVmlzaWJsZVBvc2l0aW9uKGZpcnN0UG9zaXRpb25Jbk5vZGUo
bGlzdEVsZW1lbnQuZ2V0KCkpKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIHVubGlzdGlmeVBhcmFncmFwaChlbmRpbmdTZWxlY3Rpb24oKS52aXNp
YmxlU3RhcnQoKSwgbGlzdE5vZGUuZ2V0KCksIGxpc3RDaGlsZE5vZGUpOwogICAgIH0KIAogICAg
IGlmICghbGlzdENoaWxkTm9kZSB8fCBzd2l0Y2hMaXN0VHlwZSB8fCBmb3JjZUNyZWF0ZUxpc3Qp
CkBAIC0yODUsMjAgKzMzMiwxMCBAQCBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBJbnNlcnRMaXN0
Q29tbWFuCiAKICAgICBtb3ZlUGFyYWdyYXBoKHN0YXJ0LCBlbmQsIFZpc2libGVQb3NpdGlvbihQ
b3NpdGlvbihwbGFjZWhvbGRlci5nZXQoKSwgMCkpLCB0cnVlKTsKIAotICAgIC8vIEZJWE1FOiBs
aXN0aWZ5UGFyYWdyYXBoIHNob3VsZCBub3QgZGVwZW5kIG9uIGEgbWVtYmVyIHZhcmlhYmxlLgot
ICAgIC8vIFNpbmNlIGZpeE9ycGhhbmVkTGlzdENoaWxkIGlzIHRoZSBvbmx5IG90aGVyIG1ldGhv
ZCB0aGF0IHVwZGF0ZXMgbV9saXN0RWxlbWVudCwKLSAgICAvLyB3ZSBzaG91bGQgZml4IHVubGlz
dGlmeVBhcmFncmFwaCB0byBzdXBwb3J0IG9ycGhhbmVkIGxpc3QgY2hpbGQgdG8gZ2V0IHJpZCBv
ZiB0aGlzIGFzc2lnbm1lbnQuCi0gICAgaWYgKCFsaXN0RWxlbWVudCAmJiBtX2xpc3RFbGVtZW50
KQotICAgICAgICBsaXN0RWxlbWVudCA9IG1fbGlzdEVsZW1lbnQ7Ci0KLSAgICBpZiAobGlzdEVs
ZW1lbnQpIHsKLSAgICAgICAgcHJldmlvdXNMaXN0ID0gbGlzdEVsZW1lbnQtPnByZXZpb3VzRWxl
bWVudFNpYmxpbmcoKTsKLSAgICAgICAgbmV4dExpc3QgPSBsaXN0RWxlbWVudC0+bmV4dEVsZW1l
bnRTaWJsaW5nKCk7Ci0gICAgICAgIGlmIChjYW5NZXJnZUxpc3RzKHByZXZpb3VzTGlzdCwgbGlz
dEVsZW1lbnQuZ2V0KCkpKQotICAgICAgICAgICAgbWVyZ2VJZGVudGljYWxFbGVtZW50cyhwcmV2
aW91c0xpc3QsIGxpc3RFbGVtZW50LmdldCgpKTsKLSAgICAgICAgaWYgKGNhbk1lcmdlTGlzdHMo
bGlzdEVsZW1lbnQuZ2V0KCksIG5leHRMaXN0KSkKLSAgICAgICAgICAgIG1lcmdlSWRlbnRpY2Fs
RWxlbWVudHMobGlzdEVsZW1lbnQuZ2V0KCksIG5leHRMaXN0KTsKLSAgICB9IGVsc2UgaWYgKGNh
bk1lcmdlTGlzdHMobmV4dExpc3QsIHByZXZpb3VzTGlzdCkpCisgICAgaWYgKGxpc3RFbGVtZW50
KQorICAgICAgICByZXR1cm4gbWVyZ2VXaXRoTmVpZ2hib3JpbmdMaXN0cyhsaXN0RWxlbWVudC5n
ZXQoKSk7CisKKyAgICBpZiAoY2FuTWVyZ2VMaXN0cyhwcmV2aW91c0xpc3QsIG5leHRMaXN0KSkK
ICAgICAgICAgbWVyZ2VJZGVudGljYWxFbGVtZW50cyhwcmV2aW91c0xpc3QsIG5leHRMaXN0KTsK
IAogICAgIHJldHVybiBsaXN0RWxlbWVudDsKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9JbnNlcnRM
aXN0Q29tbWFuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29t
bWFuZC5oCShyZXZpc2lvbiA2NDIxOSkKKysrIFdlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29t
bWFuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw4ICs1Miw5IEBAIHByaXZhdGU6CiAgICAgdmly
dHVhbCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24oKSBjb25zdCB7IHJldHVybiBFZGl0QWN0aW9u
SW5zZXJ0TGlzdDsgfQogCiAgICAgSFRNTEVsZW1lbnQqIGZpeE9ycGhhbmVkTGlzdENoaWxkKE5v
ZGUqKTsKLSAgICBib29sIG1vZGlmeVJhbmdlKCk7Ci0gICAgdm9pZCBkb0FwcGx5Rm9yU2luZ2xl
UGFyYWdyYXBoKGJvb2wgZm9yY2VDcmVhdGVMaXN0KTsKKyAgICBib29sIHNlbGVjdGlvbkhhc0xp
c3RPZlR5cGUoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBjb25zdCBRdWFsaWZp
ZWROYW1lJik7CisgICAgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gbWVyZ2VXaXRoTmVpZ2hib3Jp
bmdMaXN0cyhIVE1MRWxlbWVudCopOworICAgIHZvaWQgZG9BcHBseUZvclNpbmdsZVBhcmFncmFw
aChib29sIGZvcmNlQ3JlYXRlTGlzdCwgY29uc3QgUXVhbGlmaWVkTmFtZSYsIFJhbmdlKiBjdXJy
ZW50U2VsZWN0aW9uKTsKICAgICB2b2lkIHVubGlzdGlmeVBhcmFncmFwaChjb25zdCBWaXNpYmxl
UG9zaXRpb24mIG9yaWdpbmFsU3RhcnQsIEhUTUxFbGVtZW50KiBsaXN0Tm9kZSwgTm9kZSogbGlz
dENoaWxkTm9kZSk7CiAgICAgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gbGlzdGlmeVBhcmFncmFw
aChjb25zdCBWaXNpYmxlUG9zaXRpb24mIG9yaWdpbmFsU3RhcnQsIGNvbnN0IFF1YWxpZmllZE5h
bWUmIGxpc3RUYWcpOwogICAgIFJlZlB0cjxIVE1MRWxlbWVudD4gbV9saXN0RWxlbWVudDsKSW5k
ZXg6IFdlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAkocmV2aXNpb24gNjQyMTkpCisrKyBXZWJDb3JlL2Vk
aXRpbmcvaHRtbGVkaXRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MjksNyArODI5LDcgQEAg
SFRNTEVsZW1lbnQqIG91dGVybW9zdEVuY2xvc2luZ0xpc3QoTm9kZQogCiBib29sIGNhbk1lcmdl
TGlzdHMoRWxlbWVudCogZmlyc3RMaXN0LCBFbGVtZW50KiBzZWNvbmRMaXN0KQogewotICAgIGlm
ICghZmlyc3RMaXN0IHx8ICFzZWNvbmRMaXN0KQorICAgIGlmICghZmlyc3RMaXN0IHx8ICFzZWNv
bmRMaXN0IHx8ICFmaXJzdExpc3QtPmlzSFRNTEVsZW1lbnQoKSB8fCAhc2Vjb25kTGlzdC0+aXNI
VE1MRWxlbWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gZmlyc3RM
aXN0LT5oYXNUYWdOYW1lKHNlY29uZExpc3QtPnRhZ1FOYW1lKCkpLy8gbWFrZSBzdXJlIHRoZSBs
aXN0IHR5cGVzIG1hdGNoIChvbCB2cy4gdWwpCkBAIC0xMTMzLDkgKzExMzMsMTUgQEAgYm9vbCBp
c05vZGVWaXNpYmx5Q29udGFpbmVkV2l0aGluKE5vZGUqIAogICAgIGlmIChzZWxlY3RlZFJhbmdl
LT5jb21wYXJlTm9kZShub2RlLCBlYykgPT0gUmFuZ2U6Ok5PREVfSU5TSURFKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIAotICAgIC8vIElmIHRoZSBub2RlIHN0YXJ0cyBhbmQgZW5kcyBhdCB3aGVy
ZSBzZWxlY3RlZFJhbmdlIHN0YXJ0cyBhbmQgZW5kcywgdGhlIG5vZGUgaXMgY29udGFpbmVkIHdp
dGhpbgotICAgIHJldHVybiB2aXNpYmxlUG9zaXRpb25CZWZvcmVOb2RlKG5vZGUpID09IHNlbGVj
dGVkUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKQotICAgICAgICAmJiB2aXNpYmxlUG9zaXRpb25BZnRl
ck5vZGUobm9kZSkgPT0gc2VsZWN0ZWRSYW5nZS0+ZW5kUG9zaXRpb24oKTsKKyAgICBib29sIHN0
YXJ0SXNWaXN1YWxseVNhbWUgPSB2aXNpYmxlUG9zaXRpb25CZWZvcmVOb2RlKG5vZGUpID09IHNl
bGVjdGVkUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKTsKKyAgICBpZiAoc3RhcnRJc1Zpc3VhbGx5U2Ft
ZSAmJiBjb21wYXJlUG9zaXRpb25zKFBvc2l0aW9uKG5vZGUtPnBhcmVudE5vZGUoKSwgbm9kZS0+
bm9kZUluZGV4KCkrMSksIHNlbGVjdGVkUmFuZ2UtPmVuZFBvc2l0aW9uKCkpIDwgMCkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICBib29sIGVuZElzVmlzdWFsbHlTYW1lID0gdmlzaWJsZVBv
c2l0aW9uQWZ0ZXJOb2RlKG5vZGUpID09IHNlbGVjdGVkUmFuZ2UtPmVuZFBvc2l0aW9uKCk7Cisg
ICAgaWYgKGVuZElzVmlzdWFsbHlTYW1lICYmIGNvbXBhcmVQb3NpdGlvbnMoc2VsZWN0ZWRSYW5n
ZS0+c3RhcnRQb3NpdGlvbigpLCBQb3NpdGlvbihub2RlLT5wYXJlbnROb2RlKCksIG5vZGUtPm5v
ZGVJbmRleCgpKSkgPCAwKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBzdGFy
dElzVmlzdWFsbHlTYW1lICYmIGVuZElzVmlzdWFsbHlTYW1lOwogfQogCiBib29sIGlzUmVuZGVy
ZWRBc05vbklubGluZVRhYmxlSW1hZ2VPckhSKGNvbnN0IE5vZGUqIG5vZGUpCkluZGV4OiBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShy
ZXZpc2lvbiA2NDI5OSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDIzIEBACisyMDEwLTA3LTI5ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQu
b3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIElu
c2VydE9yZGVyZWRMaXN0IGRvZXMgbm90IHN3aXRjaCB0aGUgbGlzdCB0eXBlIHByb3Blcmx5IHdo
ZW4gaXQgaGFzIGFuIGlubmVyIGxpc3QuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD00MzE2NgorCisgICAgICAgIEFkZGVkIGEgdGVzdCB0byBjb252ZXJ0
IGFuIHVub3JkZXJlZCBsaXN0IHdpdGggYSBuZXN0ZWQgbGlzdCB0byBhbiBvcmRlcmVkIGxpc3Qu
CisgICAgICAgIEFsc28gYWRkZWQgYSB0ZXN0IHRvIGNvbnZlcnQgbXVsdGlwbGUgbGlzdHMgd2l0
aCBhbiBvcnBoYW5lZCBsaXN0IHRvIGFuIG9yZGVyZWQgbGlzdC4KKyAgICAgICAgVGhlIGJlaGF2
aW9yIG9mIFdlYktpdCBpcyBjaGFuZ2VkIG5vdCB0byBmbGF0dGVuIHRoZSBsaXN0cyB3aGVuIGlu
c2VydGluZyBvcmRlcmVkL3Vub3JkZXJlZAorICAgICAgICBsaXN0cyBvbiBuZXN0ZWQgbGlzdHMu
CisKKyAgICAgICAgKiBlZGl0aW5nL2V4ZWNDb21tYW5kLzUyMDczNjktZXhwZWN0ZWQudHh0OiBO
byBsb25nZXIgZmxhdHRlbnMgdGhlIGxpc3QgdG8gbWF0Y2ggRmlyZWZveCBhbmQgTVNJRS4KKyAg
ICAgICAgKiBlZGl0aW5nL2V4ZWNDb21tYW5kLzUyMDczNjkuaHRtbDogVXBkYXRlZC4KKyAgICAg
ICAgKiBlZGl0aW5nL2V4ZWNDb21tYW5kL3JlbW92ZS1saXN0LWl0ZW1zLWV4cGVjdGVkLnR4dDog
UmVtb3ZlZCBvbmUgd2hpdGVzcGFjZS4KKyAgICAgICAgKiBlZGl0aW5nL2V4ZWNDb21tYW5kL3N3
aXRjaC1saXN0LXR5cGUtd2l0aC1pbm5lci1saXN0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogZWRpdGluZy9leGVjQ29tbWFuZC9zd2l0Y2gtbGlzdC10eXBlLXdpdGgtaW5uZXItbGlz
dC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL2V4ZWNDb21tYW5kL3N3aXRjaC1saXN0
LXR5cGUtd2l0aC1vcnBoYW5lZC1saS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGVk
aXRpbmcvZXhlY0NvbW1hbmQvc3dpdGNoLWxpc3QtdHlwZS13aXRoLW9ycGhhbmVkLWxpLmh0bWw6
IEFkZGVkLgorCiAyMDEwLTA3LTI5ICBWaWN0b3IgV2FuZyAgPHZpY3RvcndAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHI2NDI3MC4KSW5kZXg6IExheW91
dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvNTIwNzM2OS1leHBlY3RlZC50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC81MjA3MzY5LWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gNjQyMTkpCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kLzUy
MDczNjktZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDkgKzEsOSBAQAotVGhpcyB0
ZXN0cyBmb3IgYSBjcmFzaCB3aGVuIHRyeWluZyB0byBmbGF0dGVuIGEgbGlzdCBjb250YWluaW5n
IGEgc3ViLWxpc3QgYXQgdGhlIGVuZC4gWW91IHNob3VsZG4ndCBnZXQgYSBjcmFzaCBhbmQgdGhl
cmUgc2hvdWxkIGJlIGEgc2luZ2xlIGxldmVsIGxpc3QgYmVsb3cuCitUaGlzIHRlc3RzIGZvciBh
IGNyYXNoIHdoZW4gdHJ5aW5nIHRvIHN3aXRjaCB0aGUgbGlzdCB0eXBlIG9mIGFuIGlubmVyIGxp
c3QgYXQgdGhlIGVuZC4gWW91IHNob3VsZG4ndCBnZXQgYSBjcmFzaC4gVGhpcyB0ZXN0IHVzZWQg
dG8gZmxhdHRlbiB0aGUgbGlzdCBidXQgdGhpcyBiZWhhdmlvciB3YXMgY29ycmVjdCB0byBtYXRj
aCBGaXJlZm94IGFuZCBNU0lFIGluIHRoZSBidWcgNDMxNjYuCiAKIE9uZQogVHdvCiBUaHJlZQog
Rm91cgotPHVsPjxsaT5PbmU8L2xpPjxsaT5Ud288L2xpPjxsaT5UaHJlZTwvbGk+PGxpPkZvdXI8
L2xpPjwvdWw+Cis8dWw+PGxpPk9uZTwvbGk+PGxpPlR3bzwvbGk+PHVsPjxsaT5UaHJlZTwvbGk+
PGxpPkZvdXI8L2xpPjwvdWw+PC91bD4KIAogUEFTUwpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGlu
Zy9leGVjQ29tbWFuZC81MjA3MzY5Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRp
dGluZy9leGVjQ29tbWFuZC81MjA3MzY5Lmh0bWwJKHJldmlzaW9uIDY0MjE5KQorKysgTGF5b3V0
VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC81MjA3MzY5Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAg
LTEsNCArMSw0IEBACi08cD5UaGlzIHRlc3RzIGZvciBhIGNyYXNoIHdoZW4gdHJ5aW5nIHRvIGZs
YXR0ZW4gYSBsaXN0IGNvbnRhaW5pbmcgYSBzdWItbGlzdCBhdCB0aGUgZW5kLiBZb3Ugc2hvdWxk
bid0IGdldCBhIGNyYXNoIGFuZCB0aGVyZSBzaG91bGQgYmUgYSBzaW5nbGUgbGV2ZWwgbGlzdCBi
ZWxvdy48L3A+Cis8cD5UaGlzIHRlc3RzIGZvciBhIGNyYXNoIHdoZW4gdHJ5aW5nIHRvIHN3aXRj
aCB0aGUgbGlzdCB0eXBlIG9mIGFuIGlubmVyIGxpc3QgYXQgdGhlIGVuZC4gWW91IHNob3VsZG4n
dCBnZXQgYSBjcmFzaC4gVGhpcyB0ZXN0IHVzZWQgdG8gZmxhdHRlbiB0aGUgbGlzdCBidXQgdGhp
cyBiZWhhdmlvciB3YXMgY29ycmVjdCB0byBtYXRjaCBGaXJlZm94IGFuZCBNU0lFIGluIHRoZSBi
dWcgNDMxNjYuPC9wPgogPGRpdiBpZD0iZGl2IiBjb250ZW50ZWRpdGFibGU9InRydWUiPjxvbD48
bGk+T25lPC9saT48bGk+VHdvPC9saT48dWw+PGxpPlRocmVlPC9saT48bGk+Rm91cjwvbGk+PC9k
aXY+CiA8cCBpZD0iY29uc29sZSI+PC9wPgogCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4
ZWNDb21tYW5kL3JlbW92ZS1saXN0LWl0ZW1zLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL3JlbW92ZS1saXN0LWl0ZW1zLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gNjQyMTkpCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5k
L3JlbW92ZS1saXN0LWl0ZW1zLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMzgsNCAr
MzgsNCBAQCBUaGlzIHNob3VsZCBub3QgYmUgaW4gYSBsaXN0LgogYmFyCiBUaGlzIHNob3VsZCBu
b3QgYmUgaW4gYSBsaXN0LgogVGhpcyBzaG91bGQgbm90IGJlIGluIGEgbGlzdC4KLTxvbCBzdHls
ZT0iYm9yZGVyOiAxcHggc29saWQgcmVkOyI+IDxsaT5mb288L2xpPiA8L29sPjxzcGFuIGlkPSJp
dGVtMSI+VGhpcyBzaG91bGQgbm90IGJlIGEgbGlzdC48L3NwYW4+Jm5ic3A7PGJyPjxvbCBzdHls
ZT0iYm9yZGVyOiAxcHggc29saWQgcmVkOyI+PGJyPiBiYXIgPGxpPmJhejwvbGk+IDwvb2w+VGhp
cyBzaG91bGQgbm90IGJlIGluIGEgbGlzdC48YnI+PG9sIHN0eWxlPSJib3JkZXI6IDFweCBzb2xp
ZCByZWQ7Ij48bGk+Zm9vPC9saT4gPC9vbD5UaGlzIHNob3VsZCBub3QgYmUgaW4gYSBsaXN0Ljxi
cj48b2wgc3R5bGU9ImJvcmRlcjogMXB4IHNvbGlkIHJlZDsiPiA8bGk+YmFyPC9saT4gPC9vbD4g
VGhpcyBzaG91bGQgbm90IGJlIGluIGEgbGlzdC48YnI+IFRoaXMgc2hvdWxkIG5vdCBiZSBpbiBh
IGxpc3QuCis8b2wgc3R5bGU9ImJvcmRlcjogMXB4IHNvbGlkIHJlZDsiPiA8bGk+Zm9vPC9saT4g
PC9vbD48c3BhbiBpZD0iaXRlbTEiPlRoaXMgc2hvdWxkIG5vdCBiZSBhIGxpc3QuPC9zcGFuPiZu
YnNwOzxicj48b2wgc3R5bGU9ImJvcmRlcjogMXB4IHNvbGlkIHJlZDsiPjxicj4gYmFyIDxsaT5i
YXo8L2xpPiA8L29sPlRoaXMgc2hvdWxkIG5vdCBiZSBpbiBhIGxpc3QuPGJyPjxvbCBzdHlsZT0i
Ym9yZGVyOiAxcHggc29saWQgcmVkOyI+PGxpPmZvbzwvbGk+IDwvb2w+VGhpcyBzaG91bGQgbm90
IGJlIGluIGEgbGlzdC48YnI+PG9sIHN0eWxlPSJib3JkZXI6IDFweCBzb2xpZCByZWQ7Ij4gPGxp
PmJhcjwvbGk+IDwvb2w+IFRoaXMgc2hvdWxkIG5vdCBiZSBpbiBhIGxpc3QuPGJyPlRoaXMgc2hv
dWxkIG5vdCBiZSBpbiBhIGxpc3QuCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21t
YW5kL3N3aXRjaC1saXN0LXR5cGUtd2l0aC1pbm5lci1saXN0LWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL3N3aXRjaC1saXN0LXR5cGUt
d2l0aC1pbm5lci1saXN0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2VkaXRpbmcvZXhlY0NvbW1hbmQvc3dpdGNoLWxpc3QtdHlwZS13aXRoLWlubmVyLWxpc3QtZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI5IEBACitUaGlzIHRlc3RzIHN3aXRj
aGluZyBhbiB1bm9yZGVyZWQgbGlzdCB3aXRoIGEgbmVzdGVkIGxpc3QgdG8gYW4gb3JkZXJlZCBs
aXN0LgorCis8RElWIGlkPSJ0ZXN0IiBjb250ZW50RWRpdGFibGU9IiI+Cis8I3RleHQ+Cis8LyN0
ZXh0PgorPE9MPgorPExJPgorPCN0ZXh0PjxzZWxlY3Rpb24tY2FyZXQ+aGVsbG88LyN0ZXh0Pgor
PC9MST4KKzwjdGV4dD4KKzwvI3RleHQ+Cis8T0w+Cis8I3RleHQ+Cis8LyN0ZXh0PgorPExJPgor
PCN0ZXh0PndvcmxkPC8jdGV4dD4KKzwvTEk+Cis8I3RleHQ+Cis8LyN0ZXh0PgorPC9PTD4KKzwj
dGV4dD4KKzwvI3RleHQ+Cis8TEk+Cis8I3RleHQ+d2Via2l0PC8jdGV4dD4KKzwvTEk+Cis8L09M
PgorPCN0ZXh0PgorPC8jdGV4dD4KKzwvRElWPgpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9l
eGVjQ29tbWFuZC9zd2l0Y2gtbGlzdC10eXBlLXdpdGgtaW5uZXItbGlzdC5odG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvc3dpdGNoLWxpc3QtdHlwZS13
aXRoLWlubmVyLWxpc3QuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2VkaXRpbmcv
ZXhlY0NvbW1hbmQvc3dpdGNoLWxpc3QtdHlwZS13aXRoLWlubmVyLWxpc3QuaHRtbAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwyMCBAQAorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9kdW1w
LWFzLW1hcmt1cC5qcyI+PC9zY3JpcHQ+Cis8Ym9keT4KKzxkaXYgaWQ9InRlc3QiIGNvbnRlbnRl
ZGl0YWJsZT4KKzx1bD4KKyAgICA8bGk+aGVsbG88L2xpPgorICAgIDxvbD4KKyAgICA8bGk+d29y
bGQ8L2xpPgorICAgIDwvb2w+CisgICAgPGxpPndlYmtpdDwvbGk+Cis8L3VsPgorPC9kaXY+Cis8
c2NyaXB0PgorTWFya3VwLmRlc2NyaXB0aW9uKCdUaGlzIHRlc3RzIHN3aXRjaGluZyBhbiB1bm9y
ZGVyZWQgbGlzdCB3aXRoIGEgbmVzdGVkIGxpc3QgdG8gYW4gb3JkZXJlZCBsaXN0LicpOworTWFy
a3VwLnNldE5vZGVUb0R1bXAoJ3Rlc3QnKTsKKwordmFyIHRlc3QgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgndGVzdCcpOword2luZG93LmdldFNlbGVjdGlvbigpLnNlbGVjdEFsbENoaWxkcmVu
KHRlc3QpOworZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ0luc2VydE9yZGVyZWRMaXN0JywgZmFsc2Us
IG51bGwpOworPC9zY3JpcHQ+Cis8L2JvZHk+CkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4
ZWNDb21tYW5kL3N3aXRjaC1saXN0LXR5cGUtd2l0aC1vcnBoYW5lZC1saS1leHBlY3RlZC50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9zd2l0Y2gtbGlz
dC10eXBlLXdpdGgtb3JwaGFuZWQtbGktZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9zd2l0Y2gtbGlzdC10eXBlLXdpdGgtb3JwaGFu
ZWQtbGktZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM0IEBACitUaGlzIHRl
c3RzIHN3aXRjaGluZyBtdWx0aXBsZSBsaXN0cyB3aXRoIGFuIG9ycGhhbmVkIGxpc3QgY2hpbGQg
dG8gYW4gb3JkZXJlZCBsaXN0LgorCis8RElWIGlkPSJ0ZXN0IiBjb250ZW50RWRpdGFibGU9IiI+
Cis8I3RleHQ+Cis8LyN0ZXh0PgorPE9MPgorPExJPgorPCN0ZXh0PjxzZWxlY3Rpb24tYW5jaG9y
PndlYmtpdDwvI3RleHQ+Cis8L0xJPgorPExJPgorPCN0ZXh0PnJvY2tzPC8jdGV4dD4KKzwvTEk+
Cis8I3RleHQ+Cis8LyN0ZXh0PgorPExJPgorPCN0ZXh0PmJlY2F1c2Ugb2Y8LyN0ZXh0PgorPC9M
ST4KKzwjdGV4dD4KKzwvI3RleHQ+Cis8TEk+Cis8I3RleHQ+eW91PHNlbGVjdGlvbi1mb2N1cz48
LyN0ZXh0PgorPC9MST4KKzwjdGV4dD4KKzwvI3RleHQ+Cis8L09MPgorPCN0ZXh0PgorPC8jdGV4
dD4KKzwjdGV4dD4KKzwvI3RleHQ+Cis8I3RleHQ+Cis8LyN0ZXh0PgorPCN0ZXh0PgorPC8jdGV4
dD4KKzwvRElWPgpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9zd2l0Y2gt
bGlzdC10eXBlLXdpdGgtb3JwaGFuZWQtbGkuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9lZGl0aW5nL2V4ZWNDb21tYW5kL3N3aXRjaC1saXN0LXR5cGUtd2l0aC1vcnBoYW5lZC1saS5o
dG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9zd2l0
Y2gtbGlzdC10eXBlLXdpdGgtb3JwaGFuZWQtbGkuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwyMyBAQAorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9kdW1wLWFzLW1hcmt1cC5qcyI+
PC9zY3JpcHQ+Cis8Ym9keT4KKzxkaXYgaWQ9InRlc3QiIGNvbnRlbnRlZGl0YWJsZT4KKzx1bD4K
KyAgICA8bGk+d2Via2l0PC9saT4KKzwvdWw+Cis8bGk+cm9ja3M8L2xpPgorPHVsPgorICAgIDxs
aT5iZWNhdXNlIG9mPC9saT4KKzwvdWw+Cis8b2w+CisgICAgPGxpPnlvdTwvbGk+Cis8L29sPgor
PC9kaXY+Cis8c2NyaXB0PgorTWFya3VwLmRlc2NyaXB0aW9uKCdUaGlzIHRlc3RzIHN3aXRjaGlu
ZyBtdWx0aXBsZSBsaXN0cyB3aXRoIGFuIG9ycGhhbmVkIGxpc3QgY2hpbGQgdG8gYW4gb3JkZXJl
ZCBsaXN0LicpOworTWFya3VwLnNldE5vZGVUb0R1bXAoJ3Rlc3QnKTsKKwordmFyIHRlc3QgPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdCcpOword2luZG93LmdldFNlbGVjdGlvbigpLnNl
bGVjdEFsbENoaWxkcmVuKHRlc3QpOworZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ0luc2VydE9yZGVy
ZWRMaXN0JywgZmFsc2UsIG51bGwpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cg==
</data>
<flag name="review"
          id="51280"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63017</attachid>
            <date>2010-07-29 17:34:13 -0700</date>
            <delta_ts>2010-07-29 20:03:32 -0700</delta_ts>
            <desc>fixed mergeWithNeighboringLists</desc>
            <filename>fix43166d</filename>
            <type>text/plain</type>
            <size>20258</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NDI5OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzEgQEAKKzIwMTAtMDctMjkgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW5z
ZXJ0T3JkZXJlZExpc3QgZG9lcyBub3Qgc3dpdGNoIHRoZSBsaXN0IHR5cGUgcHJvcGVybHkgd2hl
biBpdCBoYXMgYW4gaW5uZXIgbGlzdC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQzMTY2CisKKyAgICAgICAgVGhlIGJ1ZyB3YXMgY2F1c2VkIGJ5IGZv
cmNlZENyZWF0ZUxpc3Qgd2FzIG5vdCBzZXQgdG8gdHJ1ZSB3aGVuIHRoZSBzdGFydCBhbmQgdGhl
IGVuZAorICAgICAgICBvZiB0aGUgc2VsZWN0aW9uIGxpZXMgaW4gdGhlIHNhbWUgbGlzdC4gQWRk
ZWQgc2VsZWN0aW9uSGFzTGlzdE9mVHlwZSB0byBmaXggdGhpcyBwcm9ibGVtLgorCisgICAgICAg
IFdlYktpdCB1c2VkIG5vdCB0byBjb252ZXJ0IHRoZSBvdXRlciBsaXN0cyBldmVuIHdoZW4gdGhl
IGxpc3QgaXMgZnVsbHkgc2VsZWN0ZWQuCisgICAgICAgIENvcnJlY3RlZCB0aGlzIGJlaGF2aW9y
IGJ5IGNvbnZlcnRpbmcgdGhlIGVudGlyZSBsaXN0IGF0IG9uY2Ugd2hlbiB0aGUgbGlzdCBpcyBm
dWxseSBzZWxlY3RlZC4KKyAgICAgICAgVG8gZGVjaWRlIHdoZXRoZXIgb3Igbm90IGEgbGlzdCBp
cyBmdWxseSBzZWxlY3RlZCwgYWRkZWQgY3VycmVudFNlbGVjdGlvbiBhcmd1bWVudCB0byBkb0Fw
cGx5Rm9yU2luZ2xlUGFyYWdyYXBoLgorCisgICAgICAgIFRlc3RzOiBlZGl0aW5nL2V4ZWNDb21t
YW5kL3N3aXRjaC1saXN0LXR5cGUtd2l0aC1pbm5lci1saXN0Lmh0bWwKKyAgICAgICAgICAgICAg
IGVkaXRpbmcvZXhlY0NvbW1hbmQvc3dpdGNoLWxpc3QtdHlwZS13aXRoLW9ycGhhbmVkLWxpLmh0
bWwKKworICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW5zZXJ0TGlzdENvbW1hbmQ6Om1lcmdlV2l0aE5laWdoYm9yaW5nTGlzdHMpOiBF
eHRyYWN0ZWQgdGhlIGNvZGUgdG8gbWVyZ2UgbGlzdHMuCisgICAgICAgIChXZWJDb3JlOjpJbnNl
cnRMaXN0Q29tbWFuZDo6c2VsZWN0aW9uSGFzTGlzdE9mVHlwZSk6IGF0dGFjaG1lbnQuY2dpCisg
ICAgICAgIChXZWJDb3JlOjpJbnNlcnRMaXN0Q29tbWFuZDo6ZG9BcHBseSk6IENhbGxzIHNlbGVj
dGlvbkhhc0xpc3RPZlR5cGUuCisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRMaXN0Q29tbWFuZDo6
ZG9BcHBseUZvclNpbmdsZVBhcmFncmFwaCk6IFNlZSBhYm92ZS4KKyAgICAgICAgKFdlYkNvcmU6
Okluc2VydExpc3RDb21tYW5kOjpsaXN0aWZ5UGFyYWdyYXBoKTogQ2FsbHMgbWVyZ2VXaXRoTmVp
Z2hib3JpbmdMaXN0cy4KKyAgICAgICAgKiBlZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmg6Cisg
ICAgICAgICogZWRpdGluZy9odG1sZWRpdGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjYW5N
ZXJnZUxpc3RzKTogRW5zdXJlcyBsaXN0cyBiZWluZyBtZXJnZWQgYXJlIGluc3RhbmNlcyBvZiBI
VE1MRWxlbWVudC4KKyAgICAgICAgKFdlYkNvcmU6OmlzTm9kZVZpc2libHlDb250YWluZWRXaXRo
aW4pOiBXb3JrcyBwcm9wZXJseSB3aGVuIG9uZSBlbmQgaXMgaW5zaWRlIHRoZSByYW5nZS4KKwog
MjAxMC0wNy0yOSAgVmljdG9yIFdhbmcgIDx2aWN0b3J3QGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByNjQyNzAuCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcv
SW5zZXJ0TGlzdENvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9JbnNl
cnRMaXN0Q29tbWFuZC5jcHAJKHJldmlzaW9uIDY0MjE5KQorKysgV2ViQ29yZS9lZGl0aW5nL0lu
c2VydExpc3RDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsNiArNTQsNDIgQEAgSFRN
TEVsZW1lbnQqIEluc2VydExpc3RDb21tYW5kOjpmaXhPcnBoYQogICAgIHJldHVybiBsaXN0RWxl
bWVudC5nZXQoKTsKIH0KIAorUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gSW5zZXJ0TGlzdENvbW1h
bmQ6Om1lcmdlV2l0aE5laWdoYm9yaW5nTGlzdHMoUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gbGlz
dEVsZW1lbnQpCit7CisgICAgUmVmUHRyPEhUTUxFbGVtZW50PiBsaXN0Tm9kZSA9IGxpc3RFbGVt
ZW50OworICAgIEVsZW1lbnQqIHByZXZpb3VzTGlzdCA9IGxpc3ROb2RlLT5wcmV2aW91c0VsZW1l
bnRTaWJsaW5nKCk7CisgICAgaWYgKGNhbk1lcmdlTGlzdHMocHJldmlvdXNMaXN0LCBsaXN0Tm9k
ZS5nZXQoKSkpCisgICAgICAgIG1lcmdlSWRlbnRpY2FsRWxlbWVudHMocHJldmlvdXNMaXN0LCBs
aXN0Tm9kZSk7CisKKyAgICBpZiAoIWxpc3ROb2RlIHx8ICFsaXN0Tm9kZS0+bmV4dEVsZW1lbnRT
aWJsaW5nKCkgfHwgIWxpc3ROb2RlLT5uZXh0RWxlbWVudFNpYmxpbmcoKS0+aXNIVE1MRWxlbWVu
dCgpKQorICAgICAgICByZXR1cm4gbGlzdE5vZGU7CisKKyAgICBSZWZQdHI8SFRNTEVsZW1lbnQ+
IG5leHRMaXN0ID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihsaXN0Tm9kZS0+bmV4dEVsZW1l
bnRTaWJsaW5nKCkpOworICAgIGlmIChjYW5NZXJnZUxpc3RzKGxpc3ROb2RlLmdldCgpLCBuZXh0
TGlzdC5nZXQoKSkpIHsKKyAgICAgICAgbWVyZ2VJZGVudGljYWxFbGVtZW50cyhsaXN0Tm9kZSwg
bmV4dExpc3QpOworICAgICAgICByZXR1cm4gbmV4dExpc3QucmVsZWFzZSgpOworICAgIH0KKyAg
ICByZXR1cm4gbGlzdE5vZGU7Cit9CisKK2Jvb2wgSW5zZXJ0TGlzdENvbW1hbmQ6OnNlbGVjdGlv
bkhhc0xpc3RPZlR5cGUoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBjb25zdCBR
dWFsaWZpZWROYW1lJiBsaXN0VGFnKQoreworICAgIFZpc2libGVQb3NpdGlvbiBzdGFydCA9IHNl
bGVjdGlvbi52aXNpYmxlU3RhcnQoKTsKKworICAgIGlmICghZW5jbG9zaW5nTGlzdChzdGFydC5k
ZWVwRXF1aXZhbGVudCgpLm5vZGUoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFZp
c2libGVQb3NpdGlvbiBlbmQgPSBzZWxlY3Rpb24udmlzaWJsZUVuZCgpOworICAgIHdoaWxlIChz
dGFydC5pc05vdE51bGwoKSAmJiBzdGFydCAhPSBlbmQpIHsKKyAgICAgICAgRWxlbWVudCogbGlz
dE5vZGUgPSBlbmNsb3NpbmdMaXN0KHN0YXJ0LmRlZXBFcXVpdmFsZW50KCkubm9kZSgpKTsKKyAg
ICAgICAgaWYgKCFsaXN0Tm9kZSB8fCAhbGlzdE5vZGUtPmhhc1RhZ05hbWUobGlzdFRhZykpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHN0YXJ0ID0gc3RhcnRPZk5leHRQYXJh
Z3JhcGgoc3RhcnQpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCiBJbnNlcnRMaXN0
Q29tbWFuZDo6SW5zZXJ0TGlzdENvbW1hbmQoRG9jdW1lbnQqIGRvY3VtZW50LCBUeXBlIHR5cGUp
IAogICAgIDogQ29tcG9zaXRlRWRpdENvbW1hbmQoZG9jdW1lbnQpLCBtX3R5cGUodHlwZSkKIHsK
QEAgLTgwLDYgKzExNiw3IEBAIHZvaWQgSW5zZXJ0TGlzdENvbW1hbmQ6OmRvQXBwbHkoKQogICAg
IGlmICh2aXNpYmxlRW5kICE9IHZpc2libGVTdGFydCAmJiBpc1N0YXJ0T2ZQYXJhZ3JhcGgodmlz
aWJsZUVuZCkpCiAgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKHZp
c2libGVTdGFydCwgdmlzaWJsZUVuZC5wcmV2aW91cyh0cnVlKSkpOwogCisgICAgY29uc3QgUXVh
bGlmaWVkTmFtZSYgbGlzdFRhZyA9IChtX3R5cGUgPT0gT3JkZXJlZExpc3QpID8gb2xUYWcgOiB1
bFRhZzsKICAgICBpZiAoZW5kaW5nU2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7CiAgICAgICAgIFZp
c2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gc2VsZWN0aW9uRm9yUGFyYWdyYXBoSXRlcmF0aW9u
KGVuZGluZ1NlbGVjdGlvbigpKTsKICAgICAgICAgQVNTRVJUKHNlbGVjdGlvbi5pc1JhbmdlKCkp
OwpAQCAtODgsMTAgKzEyNSw5IEBAIHZvaWQgSW5zZXJ0TGlzdENvbW1hbmQ6OmRvQXBwbHkoKQog
ICAgICAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZkxhc3RQYXJhZ3JhcGggPSBzdGFydE9mUGFy
YWdyYXBoKGVuZE9mU2VsZWN0aW9uKTsKIAogICAgICAgICBpZiAoc3RhcnRPZlBhcmFncmFwaChz
dGFydE9mU2VsZWN0aW9uKSAhPSBzdGFydE9mTGFzdFBhcmFncmFwaCkgewotICAgICAgICAgICAg
Tm9kZSogc3RhcnRMaXN0ID0gZW5jbG9zaW5nTGlzdChzdGFydE9mU2VsZWN0aW9uLmRlZXBFcXVp
dmFsZW50KCkubm9kZSgpKTsKLSAgICAgICAgICAgIE5vZGUqIGVuZExpc3QgPSBlbmNsb3NpbmdM
aXN0KGVuZE9mU2VsZWN0aW9uLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpKTsKLSAgICAgICAgICAg
IGJvb2wgZm9yY2VDcmVhdGVMaXN0ID0gIXN0YXJ0TGlzdCB8fCBzdGFydExpc3QgIT0gZW5kTGlz
dDsKKyAgICAgICAgICAgIGJvb2wgZm9yY2VDcmVhdGVMaXN0ID0gIXNlbGVjdGlvbkhhc0xpc3RP
ZlR5cGUoc2VsZWN0aW9uLCBsaXN0VGFnKTsKIAorICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiBj
dXJyZW50U2VsZWN0aW9uID0gZW5kaW5nU2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOwogICAgICAg
ICAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZDdXJyZW50UGFyYWdyYXBoID0gc3RhcnRPZlNl
bGVjdGlvbjsKICAgICAgICAgICAgIHdoaWxlIChzdGFydE9mQ3VycmVudFBhcmFncmFwaCAhPSBz
dGFydE9mTGFzdFBhcmFncmFwaCkgewogICAgICAgICAgICAgICAgIC8vIGRvQXBwbHkoKSBtYXkg
b3BlcmF0ZSBvbiBhbmQgcmVtb3ZlIHRoZSBsYXN0IHBhcmFncmFwaCBvZiB0aGUgc2VsZWN0aW9u
IGZyb20gdGhlIGRvY3VtZW50IApAQCAtMTAyLDcgKzEzOCw3IEBAIHZvaWQgSW5zZXJ0TGlzdENv
bW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICAgICAgICAgIGlmICghc3RhcnRPZkxhc3RQYXJhZ3Jh
cGguZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCktPmluRG9jdW1lbnQoKSkKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihzdGFydE9m
Q3VycmVudFBhcmFncmFwaCk7Ci0gICAgICAgICAgICAgICAgZG9BcHBseUZvclNpbmdsZVBhcmFn
cmFwaChmb3JjZUNyZWF0ZUxpc3QpOworICAgICAgICAgICAgICAgIGRvQXBwbHlGb3JTaW5nbGVQ
YXJhZ3JhcGgoZm9yY2VDcmVhdGVMaXN0LCBsaXN0VGFnLCBjdXJyZW50U2VsZWN0aW9uLmdldCgp
KTsKIAogICAgICAgICAgICAgICAgIC8vIEZldGNoIHRoZSBzdGFydCBvZiB0aGUgc2VsZWN0aW9u
IGFmdGVyIG1vdmluZyB0aGUgZmlyc3QgcGFyYWdyYXBoLAogICAgICAgICAgICAgICAgIC8vIGJl
Y2F1c2UgbW92aW5nIHRoZSBwYXJhZ3JhcGggd2lsbCBpbnZhbGlkYXRlIHRoZSBvcmlnaW5hbCBz
dGFydC4gIApAQCAtMTE0LDcgKzE1MCw3IEBAIHZvaWQgSW5zZXJ0TGlzdENvbW1hbmQ6OmRvQXBw
bHkoKQogICAgICAgICAgICAgICAgIHN0YXJ0T2ZDdXJyZW50UGFyYWdyYXBoID0gc3RhcnRPZk5l
eHRQYXJhZ3JhcGgoZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkpOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKGVuZE9mU2VsZWN0aW9uKTsKLSAg
ICAgICAgICAgIGRvQXBwbHlGb3JTaW5nbGVQYXJhZ3JhcGgoZm9yY2VDcmVhdGVMaXN0KTsKKyAg
ICAgICAgICAgIGRvQXBwbHlGb3JTaW5nbGVQYXJhZ3JhcGgoZm9yY2VDcmVhdGVMaXN0LCBsaXN0
VGFnLCBjdXJyZW50U2VsZWN0aW9uLmdldCgpKTsKICAgICAgICAgICAgIC8vIEZldGNoIHRoZSBl
bmQgb2YgdGhlIHNlbGVjdGlvbiwgZm9yIHRoZSByZWFzb24gbWVudGlvbmVkIGFib3ZlLgogICAg
ICAgICAgICAgZW5kT2ZTZWxlY3Rpb24gPSBlbmRpbmdTZWxlY3Rpb24oKS52aXNpYmxlRW5kKCk7
CiAgICAgICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihzdGFydE9m
U2VsZWN0aW9uLCBlbmRPZlNlbGVjdGlvbikpOwpAQCAtMTIyLDI4ICsxNTgsNDQgQEAgdm9pZCBJ
bnNlcnRMaXN0Q29tbWFuZDo6ZG9BcHBseSgpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBkb0Fw
cGx5Rm9yU2luZ2xlUGFyYWdyYXBoKGZhbHNlKTsKKyAgICBkb0FwcGx5Rm9yU2luZ2xlUGFyYWdy
YXBoKGZhbHNlLCBsaXN0VGFnLCBlbmRpbmdTZWxlY3Rpb24oKS5maXJzdFJhbmdlKCkuZ2V0KCkp
OwogfQogCi12b2lkIEluc2VydExpc3RDb21tYW5kOjpkb0FwcGx5Rm9yU2luZ2xlUGFyYWdyYXBo
KGJvb2wgZm9yY2VDcmVhdGVMaXN0KQordm9pZCBJbnNlcnRMaXN0Q29tbWFuZDo6ZG9BcHBseUZv
clNpbmdsZVBhcmFncmFwaChib29sIGZvcmNlQ3JlYXRlTGlzdCwgY29uc3QgUXVhbGlmaWVkTmFt
ZSYgbGlzdFRhZywgUmFuZ2UqIGN1cnJlbnRTZWxlY3Rpb24pCiB7CiAgICAgLy8gRklYTUU6IFRo
aXMgd2lsbCBwcm9kdWNlIHVuZXhwZWN0ZWQgcmVzdWx0cyBmb3IgYSBzZWxlY3Rpb24gdGhhdCBz
dGFydHMganVzdCBiZWZvcmUgYQogICAgIC8vIHRhYmxlIGFuZCBlbmRzIGluc2lkZSB0aGUgZmly
c3QgY2VsbCwgc2VsZWN0aW9uRm9yUGFyYWdyYXBoSXRlcmF0aW9uIHNob3VsZCBwcm9iYWJseQog
ICAgIC8vIGJlIHJlbmFtZWQgYW5kIGRlcGxveWVkIGluc2lkZSBzZXRFbmRpbmdTZWxlY3Rpb24o
KS4KICAgICBOb2RlKiBzZWxlY3Rpb25Ob2RlID0gZW5kaW5nU2VsZWN0aW9uKCkuc3RhcnQoKS5u
b2RlKCk7Ci0gICAgY29uc3QgUXVhbGlmaWVkTmFtZSBsaXN0VGFnID0gKG1fdHlwZSA9PSBPcmRl
cmVkTGlzdCkgPyBvbFRhZyA6IHVsVGFnOwogICAgIE5vZGUqIGxpc3RDaGlsZE5vZGUgPSBlbmNs
b3NpbmdMaXN0Q2hpbGQoc2VsZWN0aW9uTm9kZSk7CiAgICAgYm9vbCBzd2l0Y2hMaXN0VHlwZSA9
IGZhbHNlOwogICAgIGlmIChsaXN0Q2hpbGROb2RlKSB7CiAgICAgICAgIC8vIFJlbW92ZSB0aGUg
bGlzdCBjaGxpbGQuCi0gICAgICAgIEhUTUxFbGVtZW50KiBsaXN0Tm9kZSA9IGVuY2xvc2luZ0xp
c3QobGlzdENoaWxkTm9kZSk7Ci0gICAgICAgIGlmICghbGlzdE5vZGUpCisgICAgICAgIFJlZlB0
cjxIVE1MRWxlbWVudD4gbGlzdE5vZGUgPSBlbmNsb3NpbmdMaXN0KGxpc3RDaGlsZE5vZGUpOwor
ICAgICAgICBpZiAoIWxpc3ROb2RlKSB7CiAgICAgICAgICAgICBsaXN0Tm9kZSA9IGZpeE9ycGhh
bmVkTGlzdENoaWxkKGxpc3RDaGlsZE5vZGUpOworICAgICAgICAgICAgbGlzdE5vZGUgPSBtZXJn
ZVdpdGhOZWlnaGJvcmluZ0xpc3RzKGxpc3ROb2RlKTsKKyAgICAgICAgfQogICAgICAgICBpZiAo
IWxpc3ROb2RlLT5oYXNUYWdOYW1lKGxpc3RUYWcpKQogICAgICAgICAgICAgLy8gbGlzdENoaWxk
Tm9kZSB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgbGlzdCBhbmQgYSBsaXN0IG9mIHR5cGUgbV90
eXBlIHdpbGwgYmUgY3JlYXRlZC4KICAgICAgICAgICAgIHN3aXRjaExpc3RUeXBlID0gdHJ1ZTsK
IAotICAgICAgICB1bmxpc3RpZnlQYXJhZ3JhcGgoZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZVN0
YXJ0KCksIGxpc3ROb2RlLCBsaXN0Q2hpbGROb2RlKTsKKyAgICAgICAgLy8gSWYgdGhlIGxpc3Qg
aXMgb2YgdGhlIGRlc2lyZWQgdHlwZSwgYW5kIHdlIGFyZSBub3QgcmVtb3ZpbmcgdGhlIGxpc3Qs
IHRoZW4gZXhpdCBlYXJseS4KKyAgICAgICAgaWYgKCFzd2l0Y2hMaXN0VHlwZSAmJiBmb3JjZUNy
ZWF0ZUxpc3QpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgLy8gSWYgdGhlIGVudGly
ZSBsaXN0IGlzIHNlbGVjdGVkLCB0aGVuIGNvbnZlcnQgdGhlIHdob2xlIGxpc3QuCisgICAgICAg
IGlmIChzd2l0Y2hMaXN0VHlwZSAmJiBpc05vZGVWaXNpYmx5Q29udGFpbmVkV2l0aGluKGxpc3RO
b2RlLmdldCgpLCBjdXJyZW50U2VsZWN0aW9uKSkgeworICAgICAgICAgICAgUmVmUHRyPEhUTUxF
bGVtZW50PiBsaXN0RWxlbWVudCA9IGNyZWF0ZUhUTUxFbGVtZW50KGRvY3VtZW50KCksIGxpc3RU
YWcpOworICAgICAgICAgICAgaW5zZXJ0Tm9kZUJlZm9yZShsaXN0RWxlbWVudCwgbGlzdE5vZGUp
OworICAgICAgICAgICAgTm9kZSogb3V0ZXJCbG9jayA9IGxpc3RDaGlsZE5vZGUtPmlzQmxvY2tG
bG93KCkgPyBsaXN0Q2hpbGROb2RlIDogbGlzdE5vZGUuZ2V0KCk7CisgICAgICAgICAgICBtb3Zl
UGFyYWdyYXBoV2l0aENsb25lcyhmaXJzdFBvc2l0aW9uSW5Ob2RlKGxpc3ROb2RlLmdldCgpKSwg
bGFzdFBvc2l0aW9uSW5Ob2RlKGxpc3ROb2RlLmdldCgpKSwgbGlzdEVsZW1lbnQuZ2V0KCksIG91
dGVyQmxvY2spOworICAgICAgICAgICAgbGlzdEVsZW1lbnQgPSBtZXJnZVdpdGhOZWlnaGJvcmlu
Z0xpc3RzKGxpc3RFbGVtZW50KTsKKyAgICAgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihWaXNp
YmxlUG9zaXRpb24oZmlyc3RQb3NpdGlvbkluTm9kZShsaXN0RWxlbWVudC5nZXQoKSkpKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdW5saXN0aWZ5
UGFyYWdyYXBoKGVuZGluZ1NlbGVjdGlvbigpLnZpc2libGVTdGFydCgpLCBsaXN0Tm9kZS5nZXQo
KSwgbGlzdENoaWxkTm9kZSk7CiAgICAgfQogCiAgICAgaWYgKCFsaXN0Q2hpbGROb2RlIHx8IHN3
aXRjaExpc3RUeXBlIHx8IGZvcmNlQ3JlYXRlTGlzdCkKQEAgLTI4NSwyMCArMzM3LDEwIEBAIFBh
c3NSZWZQdHI8SFRNTEVsZW1lbnQ+IEluc2VydExpc3RDb21tYW4KIAogICAgIG1vdmVQYXJhZ3Jh
cGgoc3RhcnQsIGVuZCwgVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKHBsYWNlaG9sZGVyLmdldCgp
LCAwKSksIHRydWUpOwogCi0gICAgLy8gRklYTUU6IGxpc3RpZnlQYXJhZ3JhcGggc2hvdWxkIG5v
dCBkZXBlbmQgb24gYSBtZW1iZXIgdmFyaWFibGUuCi0gICAgLy8gU2luY2UgZml4T3JwaGFuZWRM
aXN0Q2hpbGQgaXMgdGhlIG9ubHkgb3RoZXIgbWV0aG9kIHRoYXQgdXBkYXRlcyBtX2xpc3RFbGVt
ZW50LAotICAgIC8vIHdlIHNob3VsZCBmaXggdW5saXN0aWZ5UGFyYWdyYXBoIHRvIHN1cHBvcnQg
b3JwaGFuZWQgbGlzdCBjaGlsZCB0byBnZXQgcmlkIG9mIHRoaXMgYXNzaWdubWVudC4KLSAgICBp
ZiAoIWxpc3RFbGVtZW50ICYmIG1fbGlzdEVsZW1lbnQpCi0gICAgICAgIGxpc3RFbGVtZW50ID0g
bV9saXN0RWxlbWVudDsKLQotICAgIGlmIChsaXN0RWxlbWVudCkgewotICAgICAgICBwcmV2aW91
c0xpc3QgPSBsaXN0RWxlbWVudC0+cHJldmlvdXNFbGVtZW50U2libGluZygpOwotICAgICAgICBu
ZXh0TGlzdCA9IGxpc3RFbGVtZW50LT5uZXh0RWxlbWVudFNpYmxpbmcoKTsKLSAgICAgICAgaWYg
KGNhbk1lcmdlTGlzdHMocHJldmlvdXNMaXN0LCBsaXN0RWxlbWVudC5nZXQoKSkpCi0gICAgICAg
ICAgICBtZXJnZUlkZW50aWNhbEVsZW1lbnRzKHByZXZpb3VzTGlzdCwgbGlzdEVsZW1lbnQuZ2V0
KCkpOwotICAgICAgICBpZiAoY2FuTWVyZ2VMaXN0cyhsaXN0RWxlbWVudC5nZXQoKSwgbmV4dExp
c3QpKQotICAgICAgICAgICAgbWVyZ2VJZGVudGljYWxFbGVtZW50cyhsaXN0RWxlbWVudC5nZXQo
KSwgbmV4dExpc3QpOwotICAgIH0gZWxzZSBpZiAoY2FuTWVyZ2VMaXN0cyhuZXh0TGlzdCwgcHJl
dmlvdXNMaXN0KSkKKyAgICBpZiAobGlzdEVsZW1lbnQpCisgICAgICAgIHJldHVybiBtZXJnZVdp
dGhOZWlnaGJvcmluZ0xpc3RzKGxpc3RFbGVtZW50KTsKKworICAgIGlmIChjYW5NZXJnZUxpc3Rz
KHByZXZpb3VzTGlzdCwgbmV4dExpc3QpKQogICAgICAgICBtZXJnZUlkZW50aWNhbEVsZW1lbnRz
KHByZXZpb3VzTGlzdCwgbmV4dExpc3QpOwogCiAgICAgcmV0dXJuIGxpc3RFbGVtZW50OwpJbmRl
eDogV2ViQ29yZS9lZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9lZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmgJKHJldmlzaW9uIDY0MjE5KQorKysgV2Vi
Q29yZS9lZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDgg
KzUyLDkgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbigp
IGNvbnN0IHsgcmV0dXJuIEVkaXRBY3Rpb25JbnNlcnRMaXN0OyB9CiAKICAgICBIVE1MRWxlbWVu
dCogZml4T3JwaGFuZWRMaXN0Q2hpbGQoTm9kZSopOwotICAgIGJvb2wgbW9kaWZ5UmFuZ2UoKTsK
LSAgICB2b2lkIGRvQXBwbHlGb3JTaW5nbGVQYXJhZ3JhcGgoYm9vbCBmb3JjZUNyZWF0ZUxpc3Qp
OworICAgIGJvb2wgc2VsZWN0aW9uSGFzTGlzdE9mVHlwZShjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiBzZWxlY3Rpb24sIGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKKyAgICBQYXNzUmVmUHRyPEhUTUxF
bGVtZW50PiBtZXJnZVdpdGhOZWlnaGJvcmluZ0xpc3RzKFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+
KTsKKyAgICB2b2lkIGRvQXBwbHlGb3JTaW5nbGVQYXJhZ3JhcGgoYm9vbCBmb3JjZUNyZWF0ZUxp
c3QsIGNvbnN0IFF1YWxpZmllZE5hbWUmLCBSYW5nZSogY3VycmVudFNlbGVjdGlvbik7CiAgICAg
dm9pZCB1bmxpc3RpZnlQYXJhZ3JhcGgoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBvcmlnaW5hbFN0
YXJ0LCBIVE1MRWxlbWVudCogbGlzdE5vZGUsIE5vZGUqIGxpc3RDaGlsZE5vZGUpOwogICAgIFBh
c3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGxpc3RpZnlQYXJhZ3JhcGgoY29uc3QgVmlzaWJsZVBvc2l0
aW9uJiBvcmlnaW5hbFN0YXJ0LCBjb25zdCBRdWFsaWZpZWROYW1lJiBsaXN0VGFnKTsKICAgICBS
ZWZQdHI8SFRNTEVsZW1lbnQ+IG1fbGlzdEVsZW1lbnQ7CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcv
aHRtbGVkaXRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9odG1sZWRpdGlu
Zy5jcHAJKHJldmlzaW9uIDY0MjE5KQorKysgV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODI5LDcgKzgyOSw3IEBAIEhUTUxFbGVtZW50KiBvdXRlcm1v
c3RFbmNsb3NpbmdMaXN0KE5vZGUKIAogYm9vbCBjYW5NZXJnZUxpc3RzKEVsZW1lbnQqIGZpcnN0
TGlzdCwgRWxlbWVudCogc2Vjb25kTGlzdCkKIHsKLSAgICBpZiAoIWZpcnN0TGlzdCB8fCAhc2Vj
b25kTGlzdCkKKyAgICBpZiAoIWZpcnN0TGlzdCB8fCAhc2Vjb25kTGlzdCB8fCAhZmlyc3RMaXN0
LT5pc0hUTUxFbGVtZW50KCkgfHwgIXNlY29uZExpc3QtPmlzSFRNTEVsZW1lbnQoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIGZpcnN0TGlzdC0+aGFzVGFnTmFtZShzZWNv
bmRMaXN0LT50YWdRTmFtZSgpKS8vIG1ha2Ugc3VyZSB0aGUgbGlzdCB0eXBlcyBtYXRjaCAob2wg
dnMuIHVsKQpAQCAtMTEzMyw5ICsxMTMzLDE1IEBAIGJvb2wgaXNOb2RlVmlzaWJseUNvbnRhaW5l
ZFdpdGhpbihOb2RlKiAKICAgICBpZiAoc2VsZWN0ZWRSYW5nZS0+Y29tcGFyZU5vZGUobm9kZSwg
ZWMpID09IFJhbmdlOjpOT0RFX0lOU0lERSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICAv
LyBJZiB0aGUgbm9kZSBzdGFydHMgYW5kIGVuZHMgYXQgd2hlcmUgc2VsZWN0ZWRSYW5nZSBzdGFy
dHMgYW5kIGVuZHMsIHRoZSBub2RlIGlzIGNvbnRhaW5lZCB3aXRoaW4KLSAgICByZXR1cm4gdmlz
aWJsZVBvc2l0aW9uQmVmb3JlTm9kZShub2RlKSA9PSBzZWxlY3RlZFJhbmdlLT5zdGFydFBvc2l0
aW9uKCkKLSAgICAgICAgJiYgdmlzaWJsZVBvc2l0aW9uQWZ0ZXJOb2RlKG5vZGUpID09IHNlbGVj
dGVkUmFuZ2UtPmVuZFBvc2l0aW9uKCk7CisgICAgYm9vbCBzdGFydElzVmlzdWFsbHlTYW1lID0g
dmlzaWJsZVBvc2l0aW9uQmVmb3JlTm9kZShub2RlKSA9PSBzZWxlY3RlZFJhbmdlLT5zdGFydFBv
c2l0aW9uKCk7CisgICAgaWYgKHN0YXJ0SXNWaXN1YWxseVNhbWUgJiYgY29tcGFyZVBvc2l0aW9u
cyhQb3NpdGlvbihub2RlLT5wYXJlbnROb2RlKCksIG5vZGUtPm5vZGVJbmRleCgpKzEpLCBzZWxl
Y3RlZFJhbmdlLT5lbmRQb3NpdGlvbigpKSA8IDApCisgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgYm9vbCBlbmRJc1Zpc3VhbGx5U2FtZSA9IHZpc2libGVQb3NpdGlvbkFmdGVyTm9kZShub2Rl
KSA9PSBzZWxlY3RlZFJhbmdlLT5lbmRQb3NpdGlvbigpOworICAgIGlmIChlbmRJc1Zpc3VhbGx5
U2FtZSAmJiBjb21wYXJlUG9zaXRpb25zKHNlbGVjdGVkUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwg
UG9zaXRpb24obm9kZS0+cGFyZW50Tm9kZSgpLCBub2RlLT5ub2RlSW5kZXgoKSkpIDwgMCkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gc3RhcnRJc1Zpc3VhbGx5U2FtZSAmJiBl
bmRJc1Zpc3VhbGx5U2FtZTsKIH0KIAogYm9vbCBpc1JlbmRlcmVkQXNOb25JbmxpbmVUYWJsZUlt
YWdlT3JIUihjb25zdCBOb2RlKiBub2RlKQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNjQyOTkpCisrKyBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMyBAQAorMjAx
MC0wNy0yOSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbnNlcnRPcmRlcmVkTGlzdCBkb2Vz
IG5vdCBzd2l0Y2ggdGhlIGxpc3QgdHlwZSBwcm9wZXJseSB3aGVuIGl0IGhhcyBhbiBpbm5lciBs
aXN0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDMx
NjYKKworICAgICAgICBBZGRlZCBhIHRlc3QgdG8gY29udmVydCBhbiB1bm9yZGVyZWQgbGlzdCB3
aXRoIGEgbmVzdGVkIGxpc3QgdG8gYW4gb3JkZXJlZCBsaXN0LgorICAgICAgICBBbHNvIGFkZGVk
IGEgdGVzdCB0byBjb252ZXJ0IG11bHRpcGxlIGxpc3RzIHdpdGggYW4gb3JwaGFuZWQgbGlzdCB0
byBhbiBvcmRlcmVkIGxpc3QuCisgICAgICAgIFRoZSBiZWhhdmlvciBvZiBXZWJLaXQgaXMgY2hh
bmdlZCBub3QgdG8gZmxhdHRlbiB0aGUgbGlzdHMgd2hlbiBpbnNlcnRpbmcgb3JkZXJlZC91bm9y
ZGVyZWQKKyAgICAgICAgbGlzdHMgb24gbmVzdGVkIGxpc3RzLgorCisgICAgICAgICogZWRpdGlu
Zy9leGVjQ29tbWFuZC81MjA3MzY5LWV4cGVjdGVkLnR4dDogTm8gbG9uZ2VyIGZsYXR0ZW5zIHRo
ZSBsaXN0IHRvIG1hdGNoIEZpcmVmb3ggYW5kIE1TSUUuCisgICAgICAgICogZWRpdGluZy9leGVj
Q29tbWFuZC81MjA3MzY5Lmh0bWw6IFVwZGF0ZWQuCisgICAgICAgICogZWRpdGluZy9leGVjQ29t
bWFuZC9yZW1vdmUtbGlzdC1pdGVtcy1leHBlY3RlZC50eHQ6IFJlbW92ZWQgb25lIHdoaXRlc3Bh
Y2UuCisgICAgICAgICogZWRpdGluZy9leGVjQ29tbWFuZC9zd2l0Y2gtbGlzdC10eXBlLXdpdGgt
aW5uZXItbGlzdC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGVkaXRpbmcvZXhlY0Nv
bW1hbmQvc3dpdGNoLWxpc3QtdHlwZS13aXRoLWlubmVyLWxpc3QuaHRtbDogQWRkZWQuCisgICAg
ICAgICogZWRpdGluZy9leGVjQ29tbWFuZC9zd2l0Y2gtbGlzdC10eXBlLXdpdGgtb3JwaGFuZWQt
bGktZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL2V4ZWNDb21tYW5kL3N3
aXRjaC1saXN0LXR5cGUtd2l0aC1vcnBoYW5lZC1saS5odG1sOiBBZGRlZC4KKwogMjAxMC0wNy0y
OSAgVmljdG9yIFdhbmcgIDx2aWN0b3J3QGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmll
d2VkLCByb2xsaW5nIG91dCByNjQyNzAuCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWND
b21tYW5kLzUyMDczNjktZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Vk
aXRpbmcvZXhlY0NvbW1hbmQvNTIwNzM2OS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDY0MjE5KQor
KysgTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC81MjA3MzY5LWV4cGVjdGVkLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtMSw5ICsxLDkgQEAKLVRoaXMgdGVzdHMgZm9yIGEgY3Jhc2ggd2hl
biB0cnlpbmcgdG8gZmxhdHRlbiBhIGxpc3QgY29udGFpbmluZyBhIHN1Yi1saXN0IGF0IHRoZSBl
bmQuIFlvdSBzaG91bGRuJ3QgZ2V0IGEgY3Jhc2ggYW5kIHRoZXJlIHNob3VsZCBiZSBhIHNpbmds
ZSBsZXZlbCBsaXN0IGJlbG93LgorVGhpcyB0ZXN0cyBmb3IgYSBjcmFzaCB3aGVuIHRyeWluZyB0
byBzd2l0Y2ggdGhlIGxpc3QgdHlwZSBvZiBhbiBpbm5lciBsaXN0IGF0IHRoZSBlbmQuIFlvdSBz
aG91bGRuJ3QgZ2V0IGEgY3Jhc2guIFRoaXMgdGVzdCB1c2VkIHRvIGZsYXR0ZW4gdGhlIGxpc3Qg
YnV0IHRoaXMgYmVoYXZpb3Igd2FzIGNvcnJlY3QgdG8gbWF0Y2ggRmlyZWZveCBhbmQgTVNJRSBp
biB0aGUgYnVnIDQzMTY2LgogCiBPbmUKIFR3bwogVGhyZWUKIEZvdXIKLTx1bD48bGk+T25lPC9s
aT48bGk+VHdvPC9saT48bGk+VGhyZWU8L2xpPjxsaT5Gb3VyPC9saT48L3VsPgorPHVsPjxsaT5P
bmU8L2xpPjxsaT5Ud288L2xpPjx1bD48bGk+VGhyZWU8L2xpPjxsaT5Gb3VyPC9saT48L3VsPjwv
dWw+CiAKIFBBU1MKSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvNTIwNzM2
OS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvNTIw
NzM2OS5odG1sCShyZXZpc2lvbiA2NDIxOSkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0Nv
bW1hbmQvNTIwNzM2OS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBAQAotPHA+VGhp
cyB0ZXN0cyBmb3IgYSBjcmFzaCB3aGVuIHRyeWluZyB0byBmbGF0dGVuIGEgbGlzdCBjb250YWlu
aW5nIGEgc3ViLWxpc3QgYXQgdGhlIGVuZC4gWW91IHNob3VsZG4ndCBnZXQgYSBjcmFzaCBhbmQg
dGhlcmUgc2hvdWxkIGJlIGEgc2luZ2xlIGxldmVsIGxpc3QgYmVsb3cuPC9wPgorPHA+VGhpcyB0
ZXN0cyBmb3IgYSBjcmFzaCB3aGVuIHRyeWluZyB0byBzd2l0Y2ggdGhlIGxpc3QgdHlwZSBvZiBh
biBpbm5lciBsaXN0IGF0IHRoZSBlbmQuIFlvdSBzaG91bGRuJ3QgZ2V0IGEgY3Jhc2guIFRoaXMg
dGVzdCB1c2VkIHRvIGZsYXR0ZW4gdGhlIGxpc3QgYnV0IHRoaXMgYmVoYXZpb3Igd2FzIGNvcnJl
Y3QgdG8gbWF0Y2ggRmlyZWZveCBhbmQgTVNJRSBpbiB0aGUgYnVnIDQzMTY2LjwvcD4KIDxkaXYg
aWQ9ImRpdiIgY29udGVudGVkaXRhYmxlPSJ0cnVlIj48b2w+PGxpPk9uZTwvbGk+PGxpPlR3bzwv
bGk+PHVsPjxsaT5UaHJlZTwvbGk+PGxpPkZvdXI8L2xpPjwvZGl2PgogPHAgaWQ9ImNvbnNvbGUi
PjwvcD4KIApJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9yZW1vdmUtbGlz
dC1pdGVtcy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9l
eGVjQ29tbWFuZC9yZW1vdmUtbGlzdC1pdGVtcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDY0MjE5
KQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9yZW1vdmUtbGlzdC1pdGVtcy1l
eHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTM4LDQgKzM4LDQgQEAgVGhpcyBzaG91bGQg
bm90IGJlIGluIGEgbGlzdC4KIGJhcgogVGhpcyBzaG91bGQgbm90IGJlIGluIGEgbGlzdC4KIFRo
aXMgc2hvdWxkIG5vdCBiZSBpbiBhIGxpc3QuCi08b2wgc3R5bGU9ImJvcmRlcjogMXB4IHNvbGlk
IHJlZDsiPiA8bGk+Zm9vPC9saT4gPC9vbD48c3BhbiBpZD0iaXRlbTEiPlRoaXMgc2hvdWxkIG5v
dCBiZSBhIGxpc3QuPC9zcGFuPiZuYnNwOzxicj48b2wgc3R5bGU9ImJvcmRlcjogMXB4IHNvbGlk
IHJlZDsiPjxicj4gYmFyIDxsaT5iYXo8L2xpPiA8L29sPlRoaXMgc2hvdWxkIG5vdCBiZSBpbiBh
IGxpc3QuPGJyPjxvbCBzdHlsZT0iYm9yZGVyOiAxcHggc29saWQgcmVkOyI+PGxpPmZvbzwvbGk+
IDwvb2w+VGhpcyBzaG91bGQgbm90IGJlIGluIGEgbGlzdC48YnI+PG9sIHN0eWxlPSJib3JkZXI6
IDFweCBzb2xpZCByZWQ7Ij4gPGxpPmJhcjwvbGk+IDwvb2w+IFRoaXMgc2hvdWxkIG5vdCBiZSBp
biBhIGxpc3QuPGJyPiBUaGlzIHNob3VsZCBub3QgYmUgaW4gYSBsaXN0LgorPG9sIHN0eWxlPSJi
b3JkZXI6IDFweCBzb2xpZCByZWQ7Ij4gPGxpPmZvbzwvbGk+IDwvb2w+PHNwYW4gaWQ9Iml0ZW0x
Ij5UaGlzIHNob3VsZCBub3QgYmUgYSBsaXN0Ljwvc3Bhbj4mbmJzcDs8YnI+PG9sIHN0eWxlPSJi
b3JkZXI6IDFweCBzb2xpZCByZWQ7Ij48YnI+IGJhciA8bGk+YmF6PC9saT4gPC9vbD5UaGlzIHNo
b3VsZCBub3QgYmUgaW4gYSBsaXN0Ljxicj48b2wgc3R5bGU9ImJvcmRlcjogMXB4IHNvbGlkIHJl
ZDsiPjxsaT5mb288L2xpPiA8L29sPlRoaXMgc2hvdWxkIG5vdCBiZSBpbiBhIGxpc3QuPGJyPjxv
bCBzdHlsZT0iYm9yZGVyOiAxcHggc29saWQgcmVkOyI+IDxsaT5iYXI8L2xpPiA8L29sPiBUaGlz
IHNob3VsZCBub3QgYmUgaW4gYSBsaXN0Ljxicj5UaGlzIHNob3VsZCBub3QgYmUgaW4gYSBsaXN0
LgpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9zd2l0Y2gtbGlzdC10eXBl
LXdpdGgtaW5uZXItbGlzdC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZWRpdGluZy9leGVjQ29tbWFuZC9zd2l0Y2gtbGlzdC10eXBlLXdpdGgtaW5uZXItbGlzdC1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5k
L3N3aXRjaC1saXN0LXR5cGUtd2l0aC1pbm5lci1saXN0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwyOSBAQAorVGhpcyB0ZXN0cyBzd2l0Y2hpbmcgYW4gdW5vcmRlcmVkIGxp
c3Qgd2l0aCBhIG5lc3RlZCBsaXN0IHRvIGFuIG9yZGVyZWQgbGlzdC4KKworPERJViBpZD0idGVz
dCIgY29udGVudEVkaXRhYmxlPSIiPgorPCN0ZXh0PgorPC8jdGV4dD4KKzxPTD4KKzxMST4KKzwj
dGV4dD48c2VsZWN0aW9uLWNhcmV0PmhlbGxvPC8jdGV4dD4KKzwvTEk+Cis8I3RleHQ+Cis8LyN0
ZXh0PgorPE9MPgorPCN0ZXh0PgorPC8jdGV4dD4KKzxMST4KKzwjdGV4dD53b3JsZDwvI3RleHQ+
Cis8L0xJPgorPCN0ZXh0PgorPC8jdGV4dD4KKzwvT0w+Cis8I3RleHQ+Cis8LyN0ZXh0PgorPExJ
PgorPCN0ZXh0PndlYmtpdDwvI3RleHQ+Cis8L0xJPgorPC9PTD4KKzwjdGV4dD4KKzwvI3RleHQ+
Cis8L0RJVj4KSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvc3dpdGNoLWxp
c3QtdHlwZS13aXRoLWlubmVyLWxpc3QuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9l
ZGl0aW5nL2V4ZWNDb21tYW5kL3N3aXRjaC1saXN0LXR5cGUtd2l0aC1pbm5lci1saXN0Lmh0bWwJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL3N3aXRjaC1s
aXN0LXR5cGUtd2l0aC1pbm5lci1saXN0Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjAg
QEAKKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvZHVtcC1hcy1tYXJrdXAuanMiPjwvc2Ny
aXB0PgorPGJvZHk+Cis8ZGl2IGlkPSJ0ZXN0IiBjb250ZW50ZWRpdGFibGU+Cis8dWw+CisgICAg
PGxpPmhlbGxvPC9saT4KKyAgICA8b2w+CisgICAgPGxpPndvcmxkPC9saT4KKyAgICA8L29sPgor
ICAgIDxsaT53ZWJraXQ8L2xpPgorPC91bD4KKzwvZGl2PgorPHNjcmlwdD4KK01hcmt1cC5kZXNj
cmlwdGlvbignVGhpcyB0ZXN0cyBzd2l0Y2hpbmcgYW4gdW5vcmRlcmVkIGxpc3Qgd2l0aCBhIG5l
c3RlZCBsaXN0IHRvIGFuIG9yZGVyZWQgbGlzdC4nKTsKK01hcmt1cC5zZXROb2RlVG9EdW1wKCd0
ZXN0Jyk7CisKK3ZhciB0ZXN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QnKTsKK3dp
bmRvdy5nZXRTZWxlY3Rpb24oKS5zZWxlY3RBbGxDaGlsZHJlbih0ZXN0KTsKK2RvY3VtZW50LmV4
ZWNDb21tYW5kKCdJbnNlcnRPcmRlcmVkTGlzdCcsIGZhbHNlLCBudWxsKTsKKzwvc2NyaXB0Pgor
PC9ib2R5PgpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9zd2l0Y2gtbGlz
dC10eXBlLXdpdGgtb3JwaGFuZWQtbGktZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvc3dpdGNoLWxpc3QtdHlwZS13aXRoLW9ycGhhbmVk
LWxpLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvZXhl
Y0NvbW1hbmQvc3dpdGNoLWxpc3QtdHlwZS13aXRoLW9ycGhhbmVkLWxpLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNCBAQAorVGhpcyB0ZXN0cyBzd2l0Y2hpbmcgbXVsdGlw
bGUgbGlzdHMgd2l0aCBhbiBvcnBoYW5lZCBsaXN0IGNoaWxkIHRvIGFuIG9yZGVyZWQgbGlzdC4K
KworPERJViBpZD0idGVzdCIgY29udGVudEVkaXRhYmxlPSIiPgorPCN0ZXh0PgorPC8jdGV4dD4K
KzxPTD4KKzxMST4KKzwjdGV4dD48c2VsZWN0aW9uLWFuY2hvcj53ZWJraXQ8LyN0ZXh0PgorPC9M
ST4KKzxMST4KKzwjdGV4dD5yb2NrczwvI3RleHQ+Cis8L0xJPgorPCN0ZXh0PgorPC8jdGV4dD4K
KzxMST4KKzwjdGV4dD5iZWNhdXNlIG9mPC8jdGV4dD4KKzwvTEk+Cis8I3RleHQ+Cis8LyN0ZXh0
PgorPExJPgorPCN0ZXh0PnlvdTxzZWxlY3Rpb24tZm9jdXM+PC8jdGV4dD4KKzwvTEk+Cis8I3Rl
eHQ+Cis8LyN0ZXh0PgorPC9PTD4KKzwjdGV4dD4KKzwvI3RleHQ+Cis8I3RleHQ+Cis8LyN0ZXh0
PgorPCN0ZXh0PgorPC8jdGV4dD4KKzwjdGV4dD4KKzwvI3RleHQ+Cis8L0RJVj4KSW5kZXg6IExh
eW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvc3dpdGNoLWxpc3QtdHlwZS13aXRoLW9ycGhh
bmVkLWxpLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFu
ZC9zd2l0Y2gtbGlzdC10eXBlLXdpdGgtb3JwaGFuZWQtbGkuaHRtbAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvc3dpdGNoLWxpc3QtdHlwZS13aXRoLW9y
cGhhbmVkLWxpLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjMgQEAKKzxzY3JpcHQgc3Jj
PSIuLi8uLi9yZXNvdXJjZXMvZHVtcC1hcy1tYXJrdXAuanMiPjwvc2NyaXB0PgorPGJvZHk+Cis8
ZGl2IGlkPSJ0ZXN0IiBjb250ZW50ZWRpdGFibGU+Cis8dWw+CisgICAgPGxpPndlYmtpdDwvbGk+
Cis8L3VsPgorPGxpPnJvY2tzPC9saT4KKzx1bD4KKyAgICA8bGk+YmVjYXVzZSBvZjwvbGk+Cis8
L3VsPgorPG9sPgorICAgIDxsaT55b3U8L2xpPgorPC9vbD4KKzwvZGl2PgorPHNjcmlwdD4KK01h
cmt1cC5kZXNjcmlwdGlvbignVGhpcyB0ZXN0cyBzd2l0Y2hpbmcgbXVsdGlwbGUgbGlzdHMgd2l0
aCBhbiBvcnBoYW5lZCBsaXN0IGNoaWxkIHRvIGFuIG9yZGVyZWQgbGlzdC4nKTsKK01hcmt1cC5z
ZXROb2RlVG9EdW1wKCd0ZXN0Jyk7CisKK3ZhciB0ZXN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoJ3Rlc3QnKTsKK3dpbmRvdy5nZXRTZWxlY3Rpb24oKS5zZWxlY3RBbGxDaGlsZHJlbih0ZXN0
KTsKK2RvY3VtZW50LmV4ZWNDb21tYW5kKCdJbnNlcnRPcmRlcmVkTGlzdCcsIGZhbHNlLCBudWxs
KTsKKzwvc2NyaXB0PgorPC9ib2R5Pgo=
</data>
<flag name="review"
          id="51300"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>