<?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>19795</bug_id>
          
          <creation_ts>2008-06-27 14:22:25 -0700</creation_ts>
          <short_desc>execCommand FormatBlock creates lots of blockquotes</short_desc>
          <delta_ts>2010-10-14 23:04:27 -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>525.x (Safari 3.1)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://nick-santos.com/tests/formatblock.html</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>GoogleBug, InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>46504</dependson>
    
    <dependson>46840</dependson>
    
    <dependson>47098</dependson>
    
    <dependson>47233</dependson>
    
    <dependson>47575</dependson>
          <blocked>44918</blocked>
    
    <blocked>47712</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Nick Santos">nicksantos</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>darin</cc>
    
    <cc>enrica</cc>
    
    <cc>jparent</cc>
    
    <cc>justin.garcia</cc>
    
    <cc>rniwa</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>84606</commentid>
    <comment_count>0</comment_count>
    <who name="Nick Santos">nicksantos</who>
    <bug_when>2008-06-27 14:22:25 -0700</bug_when>
    <thetext>Repro steps:
1) Select a few lines of text in a contentEditable block
2) run document.execCommand(&apos;FormatBlock&apos;, false, &apos;blockquote&apos;)

Expected:
1 blockquote

Actual:
lots o&apos; blockquotes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84626</commentid>
    <comment_count>1</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2008-06-27 21:38:44 -0700</bug_when>
    <thetext>&lt;rdar://problem/6041710&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285078</commentid>
    <comment_count>2</comment_count>
      <attachid>68840</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-09-25 21:41:33 -0700</bug_when>
    <thetext>Created attachment 68840
work in progress

In this patch, I tried to match the code of FormatBlock as closely as possible to that of IndentOutdentCommand.  As a result much of FormatBlockCommand is rewritten but I think this is a good direction because we can probably share a lot of code between FormatBlockCommand and IndentOutdentCommand.  Now the question is how we share the code.  One option is to extract the shared code and move it to CompositeEditCommand.  Another option is to add a base class for IndentOutdentCommand, FormatBlockCommand, &amp; InsertListCommand that inherits from CompositeEditCommand.  Since these three commands do very similar things, we might find this approach valuable if we wanted to avoid adding specialized functions to CompositeEditCommand.

Darin, Enrica, Ojan, &amp; Tony, any thoughts on this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285648</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-09-27 11:53:05 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt;  Another option is to add a base class for IndentOutdentCommand, FormatBlockCommand, &amp; InsertListCommand that inherits from CompositeEditCommand. Since these three commands do very similar things, we might find this approach valuable if we wanted to avoid adding specialized functions to CompositeEditCommand.

Either approach sounds fine to me.

If there is some data involved then we definitely would want a new class. If it’s just functions, then I think putting it in CompositeEditCommand is OK for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>287088</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-09-29 13:19:29 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Either approach sounds fine to me.
&gt; 
&gt; If there is some data involved then we definitely would want a new class. If it’s just functions, then I think putting it in CompositeEditCommand is OK for now.

I don&apos;t think there&apos;s any data involved (except possibly tagName for FormatBlock) but I&apos;d really like to use virtual functions.  For example, indentIntoBlockquote and indentIntoBlockNode share very similar overall structure but it needs to do slightly different things at two places.  It&apos;ll really help to isolate those two logics into helper functions and override them in IndentOutdentCommand and FormatBlockCommand.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291412</commentid>
    <comment_count>5</comment_count>
      <attachid>70194</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-10-07 19:49:14 -0700</bug_when>
    <thetext>Created attachment 70194
fixes the bug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291495</commentid>
    <comment_count>6</comment_count>
      <attachid>70208</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-10-08 01:24:30 -0700</bug_when>
    <thetext>Created attachment 70208
added minor fix to ApplyBlockElementCommand</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293055</commentid>
    <comment_count>7</comment_count>
      <attachid>70208</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-10-12 12:32:51 -0700</bug_when>
    <thetext>Comment on attachment 70208
added minor fix to ApplyBlockElementCommand

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

Some questions to help my understanding of this code.

&gt; WebCore/editing/FormatBlockCommand.h:41
&gt; +    static bool isElementToApplyInFormatBlockCommand(const QualifiedName&amp; tagName);

Is this part of FormatBlockCommand because you want to merge it with the code in Editor.cpp?  Seems like it could just be in the cpp file.

&gt; WebCore/editing/FormatBlockCommand.h:47
&gt; +    Node* enclosingBlockToSplitTreeTo(Node* startNode) const;

This method also seems like it could be static and fully in the cpp file.

&gt; LayoutTests/editing/execCommand/format-block-multiple-paragraphs-expected.txt:64
&gt; +| &lt;div&gt;
&gt; +|   &lt;p&gt;
&gt; +|     &quot;&lt;#selection-anchor&gt;hello&quot;
&gt; +|     &lt;br&gt;
&gt; +|     &quot;world&lt;#selection-focus&gt;&quot;

Why doesn&apos;t &lt;p&gt; replace the &lt;div&gt; in this case?

&gt; LayoutTests/editing/execCommand/format-block-multiple-paragraphs-expected.txt:180
&gt; +|   &lt;br&gt;
&gt; +|   &quot;worl&lt;#selection-focus&gt;d&quot;

This looks like it&apos;s off by a letter.  Maybe just file a bug for this case since it&apos;s &lt;pre&gt;.

&gt; LayoutTests/editing/execCommand/format-block-multiple-paragraphs-expected.txt:202
&gt; +| &lt;div&gt;
&gt; +|   contenteditable=&quot;&quot;
&gt; +|   id=&quot;test9&quot;
&gt; +|   &quot;

Did you mean to include all this in this test?

&gt; LayoutTests/editing/execCommand/format-block-multiple-paragraphs-expected.txt:339
&gt; +|   &lt;ul&gt;
&gt; +|     &lt;li&gt;
&gt; +|       &quot;&lt;#selection-anchor&gt;hello&quot;
&gt; +|   &lt;ul&gt;

The merging of these ul seems like something we can try to fix in a follow up change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293065</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-10-12 12:44:44 -0700</bug_when>
    <thetext>Thanks for the review!

(In reply to comment #7)
&gt; &gt; WebCore/editing/FormatBlockCommand.h:41
&gt; &gt; +    static bool isElementToApplyInFormatBlockCommand(const QualifiedName&amp; tagName);
&gt; 
&gt; Is this part of FormatBlockCommand because you want to merge it with the code in Editor.cpp?  Seems like it could just be in the cpp file.

No, this is called in WebCore/editing/EditorCommand.cpp where we invoke FormatBlockCommand.

&gt; &gt; WebCore/editing/FormatBlockCommand.h:47
&gt; &gt; +    Node* enclosingBlockToSplitTreeTo(Node* startNode) const;
&gt; 
&gt; This method also seems like it could be static and fully in the cpp file.

Sure.  I could do that.

&gt; &gt; LayoutTests/editing/execCommand/format-block-multiple-paragraphs-expected.txt:64
&gt; &gt; +| &lt;div&gt;
&gt; &gt; +|   &lt;p&gt;
&gt; &gt; +|     &quot;&lt;#selection-anchor&gt;hello&quot;
&gt; &gt; +|     &lt;br&gt;
&gt; &gt; +|     &quot;world&lt;#selection-focus&gt;&quot;
&gt; 
&gt; Why doesn&apos;t &lt;p&gt; replace the &lt;div&gt; in this case?

We should.  But we can&apos;t do that right now because we can&apos;t figure out whether or not div is fully selected.

&gt; &gt; LayoutTests/editing/execCommand/format-block-multiple-paragraphs-expected.txt:180
&gt; &gt; +|   &lt;br&gt;
&gt; &gt; +|   &quot;worl&lt;#selection-focus&gt;d&quot;
&gt; 
&gt; This looks like it&apos;s off by a letter.  Maybe just file a bug for this case since it&apos;s &lt;pre&gt;.

I suspect that it&apos;s a bug in text iterator.

&gt; &gt; LayoutTests/editing/execCommand/format-block-multiple-paragraphs-expected.txt:202
&gt; &gt; +| &lt;div&gt;
&gt; &gt; +|   contenteditable=&quot;&quot;
&gt; &gt; +|   id=&quot;test9&quot;
&gt; &gt; +|   &quot;
&gt; 
&gt; Did you mean to include all this in this test?

No. Will fix.

&gt; &gt; LayoutTests/editing/execCommand/format-block-multiple-paragraphs-expected.txt:339
&gt; &gt; +|   &lt;ul&gt;
&gt; &gt; +|     &lt;li&gt;
&gt; &gt; +|       &quot;&lt;#selection-anchor&gt;hello&quot;
&gt; &gt; +|   &lt;ul&gt;
&gt; 
&gt; The merging of these ul seems like something we can try to fix in a follow up change.

Yes, I&apos;m intending to fix a bunch of bugs like that in the bug 44918.  In this patch, I wanted to preserve the existing behavior as much as possible since I&apos;m basically rewriting the entire function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293277</commentid>
    <comment_count>9</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-10-12 23:01:37 -0700</bug_when>
    <thetext>Committed r69639: &lt;http://trac.webkit.org/changeset/69639&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293300</commentid>
    <comment_count>10</comment_count>
      <attachid>70586</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-10-13 01:10:26 -0700</bug_when>
    <thetext>Created attachment 70586
fixed moveParagraphWithClones for fast/html/nav-element.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293301</commentid>
    <comment_count>11</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-10-13 01:11:33 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Committed r69639: &lt;http://trac.webkit.org/changeset/69639&gt;

It turned out that this broke fast/html/nav-element.html because moveParagraphWithClones adds extra br.  My new patch fixes this problem as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293302</commentid>
    <comment_count>12</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-10-13 01:12:25 -0700</bug_when>
    <thetext>Reopening the bug since the first commit has been rolled out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293474</commentid>
    <comment_count>13</comment_count>
      <attachid>70586</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-10-13 09:55:17 -0700</bug_when>
    <thetext>Comment on attachment 70586
fixed moveParagraphWithClones for fast/html/nav-element.html

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

&gt; WebCore/editing/EditorCommand.cpp:445
&gt; +    if (!FormatBlockCommand::isElementToApplyInFormatBlockCommand(qualifiedTagName))
&gt; +        return false;
&gt; +
&gt;      applyCommand(FormatBlockCommand::create(frame-&gt;document(), qualifiedTagName));

If I was doing this, I would have put this logic into FormatBlockCommand::create and had it return 0 if it’s an element it should not apply to. That seems easier to use than a separate function you have to know to call.

&gt; WebCore/editing/FormatBlockCommand.cpp:78
&gt; +// FIXME: We should consider mering this function with isElementForFormatBlockCommand in Editor.cpp

Typo: &quot;mering&quot;.

&gt; WebCore/editing/FormatBlockCommand.h:41
&gt; +    static bool isElementToApplyInFormatBlockCommand(const QualifiedName&amp; tagName);

I don’t understand the phrase “element to apply in command”. What does that mean?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293552</commentid>
    <comment_count>14</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-10-13 11:27:24 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; &gt; WebCore/editing/EditorCommand.cpp:445
&gt; &gt; +    if (!FormatBlockCommand::isElementToApplyInFormatBlockCommand(qualifiedTagName))
&gt; &gt; +        return false;
&gt; &gt; +
&gt; &gt;      applyCommand(FormatBlockCommand::create(frame-&gt;document(), qualifiedTagName));
&gt; 
&gt; If I was doing this, I would have put this logic into FormatBlockCommand::create and had it return 0 if it’s an element it should not apply to. That seems easier to use than a separate function you have to know to call.

I like that design better too.  I was considering to do it in this patch as well but then this patch was already pretty big so I avoided it.  I&apos;ll probably do that when I merge isElementToApplyInFormatBlockCommand and isElementForFormatBlockCommand.

&gt; &gt; WebCore/editing/FormatBlockCommand.cpp:78
&gt; &gt; +// FIXME: We should consider mering this function with isElementForFormatBlockCommand in Editor.cpp
&gt; 
&gt; Typo: &quot;mering&quot;.

Thanks.  Will fix.

&gt; &gt; WebCore/editing/FormatBlockCommand.h:41
&gt; &gt; +    static bool isElementToApplyInFormatBlockCommand(const QualifiedName&amp; tagName);
&gt; 
&gt; I don’t understand the phrase “element to apply in command”. What does that mean?

We&apos;re checking whether or not an element can be applied using format block command or whether or not the element should be replaced by new element.  I think isElementForFormatBlockCommand is a better name but I didn&apos;t want to use the same name.  I&apos;ll merge this function with isElementForFormatBlockCommand so this function should be gone in no time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294563</commentid>
    <comment_count>15</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-10-14 21:10:04 -0700</bug_when>
    <thetext>Committed r69836: &lt;http://trac.webkit.org/changeset/69836&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68840</attachid>
            <date>2010-09-25 21:41:33 -0700</date>
            <delta_ts>2010-10-07 19:49:11 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>attempt19795</filename>
            <type>text/plain</type>
            <size>9484</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3BwCShyZXZpc2lvbiA2ODMz
NykKKysrIFdlYkNvcmUvZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKICNpbmNsdWRl
ICJIVE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIlRleHRJ
dGVyYXRvci5oIgogI2luY2x1ZGUgInZpc2libGVfdW5pdHMuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewpAQCAtNjQsNjcgKzY1LDExMSBAQAogICAgICAgICB2aXNpYmxlRW5kID0gZW5kaW5nU2Vs
ZWN0aW9uKCkudmlzaWJsZUVuZCgpOwogICAgIH0KIAotICAgIFZpc2libGVQb3NpdGlvbiBzdGFy
dE9mTGFzdFBhcmFncmFwaCA9IHN0YXJ0T2ZQYXJhZ3JhcGgodmlzaWJsZUVuZCk7Ci0gICAgaWYg
KGVuZGluZ1NlbGVjdGlvbigpLmlzQ2FyZXQoKSB8fCBzdGFydE9mUGFyYWdyYXBoKHZpc2libGVT
dGFydCkgPT0gc3RhcnRPZkxhc3RQYXJhZ3JhcGgpIHsKLSAgICAgICAgZG9BcHBseUZvclNpbmds
ZVBhcmFncmFwaCgpOworICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgU3RyaW5nIGxvY2FsTmFt
ZSwgcHJlZml4OworICAgIGlmICghRG9jdW1lbnQ6OnBhcnNlUXVhbGlmaWVkTmFtZShtX3RhZ05h
bWUsIHByZWZpeCwgbG9jYWxOYW1lLCBlYykpCiAgICAgICAgIHJldHVybjsKKyAgICBRdWFsaWZp
ZWROYW1lIGJsb2NrVGFnTmFtZShwcmVmaXgsIGxvY2FsTmFtZSwgeGh0bWxOYW1lc3BhY2VVUkkp
OworCisgICAgLy8gU3BlY2lhbCBjYXNlIGVtcHR5IHVuc3BsaXR0YWJsZSBlbGVtZW50cyBiZWNh
dXNlIHRoZXJlJ3Mgbm90aGluZyB0byBzcGxpdAorICAgIC8vIGFuZCB0aGVyZSdzIG5vdGhpbmcg
dG8gbW92ZS4KKyAgICBQb3NpdGlvbiBzdGFydCA9IHZpc2libGVTdGFydC5kZWVwRXF1aXZhbGVu
dCgpLmRvd25zdHJlYW0oKTsKKyAgICBpZiAoaXNBdFVuc3BsaXR0YWJsZUVsZW1lbnQoc3RhcnQp
KSB7CisgICAgICAgIFJlZlB0cjxFbGVtZW50PiBibG9ja3F1b3RlID0gY3JlYXRlSFRNTEVsZW1l
bnQoZG9jdW1lbnQoKSwgYmxvY2tUYWdOYW1lKTsKKyAgICAgICAgaW5zZXJ0Tm9kZUF0KGJsb2Nr
cXVvdGUsIHN0YXJ0KTsKKyAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IHBsYWNlaG9sZGVyID0gY3Jl
YXRlQnJlYWtFbGVtZW50KGRvY3VtZW50KCkpOworICAgICAgICBhcHBlbmROb2RlKHBsYWNlaG9s
ZGVyLCBibG9ja3F1b3RlKTsKKyAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVTZWxl
Y3Rpb24oUG9zaXRpb24ocGxhY2Vob2xkZXIuZ2V0KCksIDApLCBET1dOU1RSRUFNKSk7CisgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBzZXRFbmRpbmdTZWxlY3Rpb24odmlzaWJsZVN0YXJ0
KTsKLSAgICBkb0FwcGx5Rm9yU2luZ2xlUGFyYWdyYXBoKCk7Ci0gICAgdmlzaWJsZVN0YXJ0ID0g
ZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIG5l
eHRQYXJhZ3JhcGggPSBlbmRPZlBhcmFncmFwaCh2aXNpYmxlU3RhcnQpLm5leHQoKTsKLSAgICB3
aGlsZSAobmV4dFBhcmFncmFwaC5pc05vdE51bGwoKSAmJiBuZXh0UGFyYWdyYXBoICE9IHN0YXJ0
T2ZMYXN0UGFyYWdyYXBoKSB7Ci0gICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihuZXh0UGFyYWdy
YXBoKTsKLSAgICAgICAgZG9BcHBseUZvclNpbmdsZVBhcmFncmFwaCgpOwotICAgICAgICBuZXh0
UGFyYWdyYXBoID0gZW5kT2ZQYXJhZ3JhcGgoZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0
KCkpLm5leHQoKTsKKyAgICBpbnQgc3RhcnRJbmRleCA9IGluZGV4Rm9yVmlzaWJsZVBvc2l0aW9u
KHZpc2libGVTdGFydCk7CisgICAgaW50IGVuZEluZGV4ID0gaW5kZXhGb3JWaXNpYmxlUG9zaXRp
b24odmlzaWJsZUVuZCk7CisKKyAgICBSZWZQdHI8RWxlbWVudD4gYmxvY2txdW90ZUZvck5leHRJ
bmRlbnQ7CisgICAgVmlzaWJsZVBvc2l0aW9uIGVuZE9mQ3VycmVudFBhcmFncmFwaCA9IGVuZE9m
UGFyYWdyYXBoKHZpc2libGVTdGFydCk7CisgICAgVmlzaWJsZVBvc2l0aW9uIGVuZEFmdGVyU2Vs
ZWN0aW9uID0gZW5kT2ZQYXJhZ3JhcGgoZW5kT2ZQYXJhZ3JhcGgodmlzaWJsZUVuZCkubmV4dCgp
KTsgICAgCisgICAgd2hpbGUgKGVuZE9mQ3VycmVudFBhcmFncmFwaCAhPSBlbmRBZnRlclNlbGVj
dGlvbikgeworICAgICAgICAvLyBJdGVyYXRlIGFjcm9zcyB0aGUgc2VsZWN0ZWQgcGFyYWdyYXBo
cy4uLgorICAgICAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZkN1cnJlbnRQYXJhZ3JhcGggPSBz
dGFydE9mUGFyYWdyYXBoKGVuZE9mQ3VycmVudFBhcmFncmFwaCk7CisgICAgICAgIFZpc2libGVQ
b3NpdGlvbiBlbmRPZk5leHRQYXJhZ3JhcGggPSBlbmRPZlBhcmFncmFwaChlbmRPZkN1cnJlbnRQ
YXJhZ3JhcGgubmV4dCgpKTsKKworICAgICAgICBOb2RlKiBlbmNsb3NpbmdOb2RlID0gZW5jbG9z
aW5nTm9kZVdpdGhUYWcoZW5kT2ZDdXJyZW50UGFyYWdyYXBoLmRlZXBFcXVpdmFsZW50KCksIGJs
b2NrVGFnTmFtZSk7CisgICAgICAgIGlmIChlbmNsb3NpbmdOb2RlICYmIGVuY2xvc2luZ05vZGUt
PnJvb3RFZGl0YWJsZUVsZW1lbnQoKSA9PSBlbmRPZkN1cnJlbnRQYXJhZ3JhcGgucm9vdEVkaXRh
YmxlRWxlbWVudCgpKSB7CisgICAgICAgICAgICBibG9ja3F1b3RlRm9yTmV4dEluZGVudCA9IDA7
CisgICAgICAgICAgICBlbmRPZkN1cnJlbnRQYXJhZ3JhcGggPSBlbmRPZk5leHRQYXJhZ3JhcGg7
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGluZGVudEludG9C
bG9ja05vZGUoZW5kT2ZDdXJyZW50UGFyYWdyYXBoLCBlbmRPZk5leHRQYXJhZ3JhcGgsIGJsb2Nr
cXVvdGVGb3JOZXh0SW5kZW50LCBibG9ja1RhZ05hbWUpOworCisgICAgICAgIC8vIGluZGVudElu
dG9CbG9ja3F1b3RlIGNvdWxkIG1vdmUgbW9yZSB0aGFuIG9uZSBwYXJhZ3JhcGggaWYgdGhlIHBh
cmFncmFwaAorICAgICAgICAvLyBpcyBpbiBhIGxpc3QgaXRlbSBvciBhIHRhYmxlLiBBcyBhIHJl
c3VsdCwgZW5kQWZ0ZXJTZWxlY3Rpb24gY291bGQgcmVmZXIgdG8gYSBwb3NpdGlvbgorICAgICAg
ICAvLyBubyBsb25nZXIgaW4gdGhlIGRvY3VtZW50LgorICAgICAgICBpZiAoZW5kQWZ0ZXJTZWxl
Y3Rpb24uaXNOb3ROdWxsKCkgJiYgIWVuZEFmdGVyU2VsZWN0aW9uLmRlZXBFcXVpdmFsZW50KCku
bm9kZSgpLT5pbkRvY3VtZW50KCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgLy8gU2Fu
aXR5IGNoZWNrOiBNYWtlIHN1cmUgb3VyIG1vdmVQYXJhZ3JhcGggY2FsbHMgZGlkbid0IHJlbW92
ZSBlbmRPZk5leHRQYXJhZ3JhcGguZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCkKKyAgICAgICAgLy8g
SWYgc29tZWhvdyB3ZSBkaWQsIHJldHVybiB0byBwcmV2ZW50IGNyYXNoZXMuCisgICAgICAgIGlm
IChlbmRPZk5leHRQYXJhZ3JhcGguaXNOb3ROdWxsKCkgJiYgIWVuZE9mTmV4dFBhcmFncmFwaC5k
ZWVwRXF1aXZhbGVudCgpLm5vZGUoKS0+aW5Eb2N1bWVudCgpKSB7CisgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICBlbmRPZkN1cnJlbnRQYXJhZ3JhcGggPSBlbmRPZk5leHRQYXJhZ3JhcGg7CiAgICAgfQotICAg
IHNldEVuZGluZ1NlbGVjdGlvbih2aXNpYmxlRW5kKTsKLSAgICBkb0FwcGx5Rm9yU2luZ2xlUGFy
YWdyYXBoKCk7Ci0gICAgdmlzaWJsZUVuZCA9IGVuZGluZ1NlbGVjdGlvbigpLnZpc2libGVFbmQo
KTsKIAotICAgIHNldEVuZGluZ1NlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKHZpc2libGVTdGFy
dC5kZWVwRXF1aXZhbGVudCgpLCB2aXNpYmxlRW5kLmRlZXBFcXVpdmFsZW50KCksIERPV05TVFJF
QU0pKTsKKyAgICB1cGRhdGVMYXlvdXQoKTsKKworICAgIFJlZlB0cjxSYW5nZT4gc3RhcnRSYW5n
ZSA9IFRleHRJdGVyYXRvcjo6cmFuZ2VGcm9tTG9jYXRpb25BbmRMZW5ndGgoZG9jdW1lbnQoKS0+
ZG9jdW1lbnRFbGVtZW50KCksIHN0YXJ0SW5kZXgsIDAsIHRydWUpOworICAgIFJlZlB0cjxSYW5n
ZT4gZW5kUmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnJhbmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3RoKGRv
Y3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpLCBlbmRJbmRleCwgMCwgdHJ1ZSk7CisgICAgaWYg
KHN0YXJ0UmFuZ2UgJiYgZW5kUmFuZ2UpCisgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihWaXNp
YmxlU2VsZWN0aW9uKHN0YXJ0UmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgZW5kUmFuZ2UtPnN0YXJ0
UG9zaXRpb24oKSwgRE9XTlNUUkVBTSkpOwogfQogCi12b2lkIEZvcm1hdEJsb2NrQ29tbWFuZDo6
ZG9BcHBseUZvclNpbmdsZVBhcmFncmFwaCgpCit2b2lkIEZvcm1hdEJsb2NrQ29tbWFuZDo6aW5k
ZW50SW50b0Jsb2NrTm9kZShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGVuZE9mQ3VycmVudFBhcmFn
cmFwaCwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBlbmRPZk5leHRQYXJhZ3JhcGgsIFJlZlB0cjxF
bGVtZW50PiYgYmxvY2tOb2RlLCBRdWFsaWZpZWROYW1lJiBibG9ja1RhZ05hbWUpCiB7Ci0gICAg
RXhjZXB0aW9uQ29kZSBlYzsKLSAgICBTdHJpbmcgbG9jYWxOYW1lLCBwcmVmaXg7Ci0gICAgaWYg
KCFEb2N1bWVudDo6cGFyc2VRdWFsaWZpZWROYW1lKG1fdGFnTmFtZSwgcHJlZml4LCBsb2NhbE5h
bWUsIGVjKSkKLSAgICAgICAgcmV0dXJuOwotICAgIFF1YWxpZmllZE5hbWUgcVR5cGVPZkJsb2Nr
KHByZWZpeCwgbG9jYWxOYW1lLCB4aHRtbE5hbWVzcGFjZVVSSSk7CisgICAgTm9kZSogZW5jbG9z
aW5nQ2VsbCA9IDA7CiAKLSAgICBOb2RlKiByZWZOb2RlID0gZW5jbG9zaW5nQmxvY2tGbG93RWxl
bWVudChlbmRpbmdTZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKSk7Ci0gICAgaWYgKHJlZk5vZGUt
Pmhhc1RhZ05hbWUocVR5cGVPZkJsb2NrKSkKLSAgICAgICAgLy8gV2UncmUgYWxyZWFkeSBpbiBh
IGJsb2NrIHdpdGggdGhlIGZvcm1hdCB3ZSB3YW50LCBzbyB3ZSBkb24ndCBoYXZlIHRvIGRvIGFu
eXRoaW5nCi0gICAgICAgIHJldHVybjsKKyAgICBQb3NpdGlvbiBzdGFydCA9IHN0YXJ0T2ZQYXJh
Z3JhcGgoZW5kT2ZDdXJyZW50UGFyYWdyYXBoKS5kZWVwRXF1aXZhbGVudCgpOworICAgIGVuY2xv
c2luZ0NlbGwgPSBlbmNsb3NpbmdOb2RlT2ZUeXBlKHN0YXJ0LCAmaXNUYWJsZUNlbGwpOworICAg
IE5vZGUqIGxhc3RCbG9jayA9IDA7CisgICAgTm9kZSogbiA9IDA7CisgICAgZm9yIChuID0gc3Rh
cnQubm9kZSgpOyBuOyBuID0gbi0+cGFyZW50Tm9kZSgpKSB7CisgICAgICAgIGlmICghbi0+aXND
b250ZW50RWRpdGFibGUoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKGlzVGFi
bGVDZWxsKG4pIHx8ICFuLT5wYXJlbnROb2RlKCkgfHwgIW4tPnBhcmVudE5vZGUoKS0+aXNDb250
ZW50RWRpdGFibGUoKSB8fCB2YWxpZEJsb2NrVGFnKG4tPm5vZGVOYW1lKCkubG93ZXIoKSkpCisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKGlzQmxvY2sobikpCisgICAgICAgICAgICBs
YXN0QmxvY2sgPSAwOworICAgICAgICBpZiAoaXNMaXN0RWxlbWVudChuKSkgeworICAgICAgICAg
ICAgbiA9IGxhc3RCbG9jazsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQor
ICAgIE5vZGUqIG5vZGVUb1NwbGl0VG8gPSBuOwogCi0gICAgVmlzaWJsZVBvc2l0aW9uIHBhcmFn
cmFwaFN0YXJ0ID0gc3RhcnRPZlBhcmFncmFwaChlbmRpbmdTZWxlY3Rpb24oKS52aXNpYmxlU3Rh
cnQoKSk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHBhcmFncmFwaEVuZCA9IGVuZE9mUGFyYWdyYXBo
KGVuZGluZ1NlbGVjdGlvbigpLnZpc2libGVTdGFydCgpKTsKLSAgICBWaXNpYmxlUG9zaXRpb24g
YmxvY2tTdGFydCA9IHN0YXJ0T2ZCbG9jayhlbmRpbmdTZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQo
KSk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIGJsb2NrRW5kID0gZW5kT2ZCbG9jayhlbmRpbmdTZWxl
Y3Rpb24oKS52aXNpYmxlU3RhcnQoKSk7Ci0gICAgUmVmUHRyPEVsZW1lbnQ+IGJsb2NrTm9kZSA9
IGNyZWF0ZUhUTUxFbGVtZW50KGRvY3VtZW50KCksIG1fdGFnTmFtZSk7Ci0gICAgUmVmUHRyPEVs
ZW1lbnQ+IHBsYWNlaG9sZGVyID0gY3JlYXRlQnJlYWtFbGVtZW50KGRvY3VtZW50KCkpOworICAg
IFJlZlB0cjxOb2RlPiBvdXRlckJsb2NrID0gKHN0YXJ0Lm5vZGUoKSA9PSBub2RlVG9TcGxpdFRv
KSA/IHN0YXJ0Lm5vZGUoKSA6IHNwbGl0VHJlZVRvTm9kZShzdGFydC5ub2RlKCksIG5vZGVUb1Nw
bGl0VG8pOwogCi0gICAgTm9kZSogcm9vdCA9IGVuZGluZ1NlbGVjdGlvbigpLnN0YXJ0KCkubm9k
ZSgpLT5yb290RWRpdGFibGVFbGVtZW50KCk7Ci0gICAgaWYgKHZhbGlkQmxvY2tUYWcocmVmTm9k
ZS0+bm9kZU5hbWUoKS5sb3dlcigpKSAmJiAKLSAgICAgICAgcGFyYWdyYXBoU3RhcnQgPT0gYmxv
Y2tTdGFydCAmJiBwYXJhZ3JhcGhFbmQgPT0gYmxvY2tFbmQgJiYgCi0gICAgICAgIHJlZk5vZGUg
IT0gcm9vdCAmJiAhcm9vdC0+aXNEZXNjZW5kYW50T2YocmVmTm9kZSkpCi0gICAgICAgIC8vIEFs
cmVhZHkgaW4gYSB2YWxpZCBibG9jayB0YWcgdGhhdCBvbmx5IGNvbnRhaW5zIHRoZSBjdXJyZW50
IHBhcmFncmFwaCwgc28gd2UgY2FuIHN3YXAgd2l0aCB0aGUgbmV3IHRhZwotICAgICAgICBpbnNl
cnROb2RlQmVmb3JlKGJsb2NrTm9kZSwgcmVmTm9kZSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8v
IEF2b2lkIGluc2VydGluZyBpbnNpZGUgaW5saW5lIGVsZW1lbnRzIHRoYXQgc3Vycm91bmQgcGFy
YWdyYXBoU3RhcnQgd2l0aCB1cHN0cmVhbSgpLgotICAgICAgICAvLyBUaGlzIGlzIG9ubHkgdG8g
YXZvaWQgY3JlYXRpbmcgYmxvYXRlZCBtYXJrdXAuCi0gICAgICAgIGluc2VydE5vZGVBdChibG9j
a05vZGUsIHBhcmFncmFwaFN0YXJ0LmRlZXBFcXVpdmFsZW50KCkudXBzdHJlYW0oKSk7CisgICAg
VmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZDdXJyZW50UGFyYWdyYXBoID0gc3RhcnRPZlBhcmFncmFw
aChlbmRPZkN1cnJlbnRQYXJhZ3JhcGgpOworICAgIE5vZGUqIHJlZk5vZGUgPSBlbmNsb3NpbmdC
bG9ja0Zsb3dFbGVtZW50KGVuZE9mQ3VycmVudFBhcmFncmFwaCk7CisgICAgTm9kZSogcm9vdCA9
IGVuZE9mQ3VycmVudFBhcmFncmFwaC5yb290RWRpdGFibGVFbGVtZW50KCk7CisgICAgaWYgKHZh
bGlkQmxvY2tUYWcocmVmTm9kZS0+bm9kZU5hbWUoKS5sb3dlcigpKSAmJiBzdGFydE9mQ3VycmVu
dFBhcmFncmFwaCA9PSB2aXNpYmxlUG9zaXRpb25CZWZvcmVOb2RlKHJlZk5vZGUpCisgICAgICAg
ICYmIGVuZE9mQ3VycmVudFBhcmFncmFwaCA9PSB2aXNpYmxlUG9zaXRpb25BZnRlck5vZGUocmVm
Tm9kZSkgJiYgcmVmTm9kZSAhPSBvdXRlckJsb2NrICYmICFyb290LT5pc0Rlc2NlbmRhbnRPZihy
ZWZOb2RlKSkgeworICAgICAgICByZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKHJlZk5vZGUp
OwogICAgIH0KLSAgICBhcHBlbmROb2RlKHBsYWNlaG9sZGVyLCBibG9ja05vZGUpOwogCi0gICAg
VmlzaWJsZVBvc2l0aW9uIGRlc3RpbmF0aW9uKFBvc2l0aW9uKHBsYWNlaG9sZGVyLmdldCgpLCAw
KSk7Ci0gICAgaWYgKHBhcmFncmFwaFN0YXJ0ID09IHBhcmFncmFwaEVuZCAmJiAhbGluZUJyZWFr
RXhpc3RzQXRWaXNpYmxlUG9zaXRpb24ocGFyYWdyYXBoU3RhcnQpKSB7Ci0gICAgICAgIHNldEVu
ZGluZ1NlbGVjdGlvbihkZXN0aW5hdGlvbik7Ci0gICAgICAgIHJldHVybjsKKyAgICBpZiAoIWJs
b2NrTm9kZSkgeworICAgICAgICAvLyBDcmVhdGUgYSBuZXcgYmxvY2txdW90ZSBhbmQgaW5zZXJ0
IGl0IGFzIGEgY2hpbGQgb2YgdGhlIHJvb3QgZWRpdGFibGUgZWxlbWVudC4gV2UgYWNjb21wbGlz
aAorICAgICAgICAvLyB0aGlzIGJ5IHNwbGl0dGluZyBhbGwgcGFyZW50cyBvZiB0aGUgY3VycmVu
dCBwYXJhZ3JhcGggdXAgdG8gdGhhdCBwb2ludC4KKyAgICAgICAgYmxvY2tOb2RlID0gY3JlYXRl
SFRNTEVsZW1lbnQoZG9jdW1lbnQoKSwgYmxvY2tUYWdOYW1lKTsKKyAgICAgICAgaW5zZXJ0Tm9k
ZUJlZm9yZShibG9ja05vZGUsIG91dGVyQmxvY2spOwogICAgIH0KLSAgICBtb3ZlUGFyYWdyYXBo
KHBhcmFncmFwaFN0YXJ0LCBwYXJhZ3JhcGhFbmQsIGRlc3RpbmF0aW9uLCB0cnVlLCBmYWxzZSk7
CisKKyAgICBtb3ZlUGFyYWdyYXBoV2l0aENsb25lcyhzdGFydE9mUGFyYWdyYXBoKGVuZE9mQ3Vy
cmVudFBhcmFncmFwaCksIGVuZE9mQ3VycmVudFBhcmFncmFwaCwgYmxvY2tOb2RlLmdldCgpLCBv
dXRlckJsb2NrLmdldCgpKTsKKworICAgIC8vIERvbid0IHB1dCB0aGUgbmV4dCBwYXJhZ3JhcGgg
aW4gdGhlIGJsb2NrcXVvdGUgd2UganVzdCBjcmVhdGVkIGZvciB0aGlzIHBhcmFncmFwaCB1bmxl
c3MgCisgICAgLy8gdGhlIG5leHQgcGFyYWdyYXBoIGlzIGluIHRoZSBzYW1lIGNlbGwuCisgICAg
aWYgKGVuY2xvc2luZ0NlbGwgJiYgZW5jbG9zaW5nQ2VsbCAhPSBlbmNsb3NpbmdOb2RlT2ZUeXBl
KGVuZE9mTmV4dFBhcmFncmFwaC5kZWVwRXF1aXZhbGVudCgpLCAmaXNUYWJsZUNlbGwpKQorICAg
ICAgICBibG9ja05vZGUgPSAwOwogfQogCiB9CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvRm9ybWF0
QmxvY2tDb21tYW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0Zvcm1hdEJsb2Nr
Q29tbWFuZC5oCShyZXZpc2lvbiA2ODMzNykKKysrIFdlYkNvcmUvZWRpdGluZy9Gb3JtYXRCbG9j
a0NvbW1hbmQuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsOCBAQAogICAgIEZvcm1hdEJs
b2NrQ29tbWFuZChEb2N1bWVudCosIGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSk7CiAKICAg
ICB2aXJ0dWFsIHZvaWQgZG9BcHBseSgpOwotICAgIHZvaWQgZG9BcHBseUZvclNpbmdsZVBhcmFn
cmFwaCgpOworICAgIHZvaWQgZG9BcHBseUZvclNpbmdsZVBhcmFncmFwaChjb25zdCBRdWFsaWZp
ZWROYW1lJiB0YWdRTmFtZSk7CisgICAgdm9pZCBpbmRlbnRJbnRvQmxvY2tOb2RlKGNvbnN0IFZp
c2libGVQb3NpdGlvbiYgZW5kT2ZDdXJyZW50UGFyYWdyYXBoLCBjb25zdCBWaXNpYmxlUG9zaXRp
b24mIGVuZE9mTmV4dFBhcmFncmFwaCwgUmVmUHRyPEVsZW1lbnQ+JiBibG9ja05vZGUsIFF1YWxp
ZmllZE5hbWUmIGJsb2NrVGFnTmFtZSk7CiAgICAgdmlydHVhbCBFZGl0QWN0aW9uIGVkaXRpbmdB
Y3Rpb24oKSBjb25zdCB7IHJldHVybiBFZGl0QWN0aW9uRm9ybWF0QmxvY2s7IH0KIAogICAgIEF0
b21pY1N0cmluZyBtX3RhZ05hbWU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70194</attachid>
            <date>2010-10-07 19:49:14 -0700</date>
            <delta_ts>2010-10-08 01:24:26 -0700</delta_ts>
            <desc>fixes the bug</desc>
            <filename>bug-19795-20101007194913.patch</filename>
            <type>text/plain</type>
            <size>28648</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2OTM3MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzMgQEAKKzIwMTAtMTAtMDcgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgZXhl
Y0NvbW1hbmQgRm9ybWF0QmxvY2sgY3JlYXRlcyBsb3RzIG9mIGJsb2NrcXVvdGVzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTc5NQorCisgICAgICAg
IFRoZSBidWcgd2FzIGNhdXNlZCBieSBXZWJLaXQncyBub3QgcmV1c2luZyB0aGUgYmxvY2sgbm9k
ZSBhZGRlZCBieSBwcmV2aW91cyBpdGVyYXRpb24KKyAgICAgICAgYW5kIGl0cyBpbnNlcnRpbmcg
YmxvY2sgbm9kZSBhdCB3cm9uZyBwbGFjZXMuCisKKyAgICAgICAgRml4ZWQgdGhlIGJ1ZyBieSBy
ZXdyaXRpbmcgRm9ybWF0QmxvY2tDb21tYW5kOjpmb3JtYXRSYW5nZS4gIE5ldyBjb2RlIHJlc2Vt
YmxlcyB0aGF0IG9mCisgICAgICAgIEluZGVudE91dGRlbnRDb21tYW5kOjppbmRlbnRJbnRvQmxv
Y2txdW90ZS4gIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIGlzIHRoYXQgZm9ybWF0UmFuZ2UK
KyAgICAgICAgYXZvaWRzIHRoZSBleGlzdGluZyBibG9jayBlbGVtZW50cyB3aGVuIHJlcGxhY2lu
ZyBibG9ja3MgYW5kIGl0IGFsc28gYWRkcyBhIHBsYWNlaG9sZGVyCisgICAgICAgIHdoZW4gcmVt
b3ZpbmcgdGhlIGV4aXN0aW5nIGJsb2NrIGNhdXNlZCBwYXJhZ3JhcGhzIHRvIGNvbGxhcHNlLgor
CisgICAgICAgIFRlc3RzOiBlZGl0aW5nL2V4ZWNDb21tYW5kL2Zvcm1hdC1ibG9jay1tdWx0aXBs
ZS1wYXJhZ3JhcGhzLmh0bWwKKyAgICAgICAgICAgICAgIGVkaXRpbmcvZXhlY0NvbW1hbmQvZm9y
bWF0LWJsb2NrLXRhYmxlLmh0bWwKKworICAgICAgICAqIGVkaXRpbmcvRWRpdG9yQ29tbWFuZC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpleGVjdXRlRm9ybWF0QmxvY2spOgorICAgICAgICAqIGVk
aXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1hdEJs
b2NrQ29tbWFuZDo6Zm9ybWF0UmFuZ2UpOiBSZXdyaXR0ZW47IHNlZSBhYm92ZS4KKyAgICAgICAg
KFdlYkNvcmU6OkZvcm1hdEJsb2NrQ29tbWFuZDo6aXNFbGVtZW50VG9BcHBseUluRm9ybWF0Qmxv
Y2tDb21tYW5kKTogUmVuYW1lZCBmcm9tIHZhbGlkQmxvY2tFbGVtZW50CisgICAgICAgIGFuZCBt
b3ZlZCBmcm9tIGh0bWxlZGl0aW5nLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkZvcm1hdEJsb2Nr
Q29tbWFuZDo6ZW5jbG9zaW5nQmxvY2tUb1NwbGl0VHJlZVRvKTogQWRkZWQuCisgICAgICAgICog
ZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuaDoKKyAgICAgICAgKiBlZGl0aW5nL1Zpc2libGVQ
b3NpdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjplbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50
KTogQ2hhbmdlZCB0aGUgcmV0dXJuIHR5cGUgdG8gRWxlbWVudCoKKyAgICAgICAgKiBlZGl0aW5n
L1Zpc2libGVQb3NpdGlvbi5oOgorCiAyMDEwLTEwLTA3ICBFcmljIFVocmhhbmUgIDxlcmljdUBj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSmlhbiBMaQpJbmRleDogV2ViQ29y
ZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGlu
Zy9FZGl0b3JDb21tYW5kLmNwcAkocmV2aXNpb24gNjkzNTcpCisrKyBXZWJDb3JlL2VkaXRpbmcv
RWRpdG9yQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzMiw4ICs0MzIsNiBAQCBzdGF0
aWMgYm9vbCBleGVjdXRlRm9ybWF0QmxvY2soRnJhbWUqIGZyCiAgICAgU3RyaW5nIHRhZ05hbWUg
PSB2YWx1ZS5sb3dlcigpOwogICAgIGlmICh0YWdOYW1lWzBdID09ICc8JyAmJiB0YWdOYW1lW3Rh
Z05hbWUubGVuZ3RoKCkgLSAxXSA9PSAnPicpCiAgICAgICAgIHRhZ05hbWUgPSB0YWdOYW1lLnN1
YnN0cmluZygxLCB0YWdOYW1lLmxlbmd0aCgpIC0gMik7Ci0gICAgaWYgKCF2YWxpZEJsb2NrVGFn
KHRhZ05hbWUpKQotICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBFeGNlcHRpb25Db2RlIGVj
OwogICAgIFN0cmluZyBsb2NhbE5hbWUsIHByZWZpeDsKQEAgLTQ0MSw2ICs0MzksOSBAQCBzdGF0
aWMgYm9vbCBleGVjdXRlRm9ybWF0QmxvY2soRnJhbWUqIGZyCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBRdWFsaWZpZWROYW1lIHF1YWxpZmllZFRhZ05hbWUocHJlZml4LCBsb2NhbE5hbWUs
IHhodG1sTmFtZXNwYWNlVVJJKTsKIAorICAgIGlmICghRm9ybWF0QmxvY2tDb21tYW5kOjppc0Vs
ZW1lbnRUb0FwcGx5SW5Gb3JtYXRCbG9ja0NvbW1hbmQocXVhbGlmaWVkVGFnTmFtZSkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKwogICAgIGFwcGx5Q29tbWFuZChGb3JtYXRCbG9ja0NvbW1hbmQ6
OmNyZWF0ZShmcmFtZS0+ZG9jdW1lbnQoKSwgcXVhbGlmaWVkVGFnTmFtZSkpOwogICAgIHJldHVy
biB0cnVlOwogfQpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHAJKHJl
dmlzaW9uIDY5MzU3KQorKysgV2ViQ29yZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQxLDQxICs0MSw4NCBAQCBGb3JtYXRCbG9ja0NvbW1hbmQ6OkZv
cm1hdEJsb2NrQ29tbWFuZChECiB7CiB9CiAKLXZvaWQgRm9ybWF0QmxvY2tDb21tYW5kOjpmb3Jt
YXRSYW5nZShjb25zdCBQb3NpdGlvbiYsIGNvbnN0IFBvc2l0aW9uJiBlbmQsIFJlZlB0cjxFbGVt
ZW50PiYpCit2b2lkIEZvcm1hdEJsb2NrQ29tbWFuZDo6Zm9ybWF0UmFuZ2UoY29uc3QgUG9zaXRp
b24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kLCBSZWZQdHI8RWxlbWVudD4mIGJsb2NrTm9k
ZSkKIHsKLSAgICBzZXRFbmRpbmdTZWxlY3Rpb24oVmlzaWJsZVBvc2l0aW9uKGVuZCkpOworICAg
IE5vZGUqIG5vZGVUb1NwbGl0VG8gPSBlbmNsb3NpbmdCbG9ja1RvU3BsaXRUcmVlVG8oc3RhcnQu
bm9kZSgpKTsKKyAgICBSZWZQdHI8Tm9kZT4gb3V0ZXJCbG9jayA9IChzdGFydC5ub2RlKCkgPT0g
bm9kZVRvU3BsaXRUbykgPyBzdGFydC5ub2RlKCkgOiBzcGxpdFRyZWVUb05vZGUoc3RhcnQubm9k
ZSgpLCBub2RlVG9TcGxpdFRvKTsKKyAgICBSZWZQdHI8Tm9kZT4gbm9kZUFmdGVySW5zZXJ0aW9u
UG9zaXRpb24gPSBvdXRlckJsb2NrOworCisgICAgRWxlbWVudCogcmVmTm9kZSA9IGVuY2xvc2lu
Z0Jsb2NrRmxvd0VsZW1lbnQoZW5kKTsKKyAgICBFbGVtZW50KiByb290ID0gZWRpdGFibGVSb290
Rm9yUG9zaXRpb24oc3RhcnQpOworICAgIGlmIChpc0VsZW1lbnRUb0FwcGx5SW5Gb3JtYXRCbG9j
a0NvbW1hbmQocmVmTm9kZS0+dGFnUU5hbWUoKSkgJiYgc3RhcnQgPT0gc3RhcnRPZkJsb2NrKHN0
YXJ0KSAmJiBlbmQgPT0gZW5kT2ZCbG9jayhlbmQpCisgICAgICAgICYmIHJlZk5vZGUgIT0gcm9v
dCAmJiAhcm9vdC0+aXNEZXNjZW5kYW50T2YocmVmTm9kZSkpIHsKKyAgICAgICAgLy8gQWxyZWFk
eSBpbiBhIGJsb2NrIGVsZW1lbnQgdGhhdCBvbmx5IGNvbnRhaW5zIHRoZSBjdXJyZW50IHBhcmFn
cmFwaAorICAgICAgICBpZiAocmVmTm9kZS0+aGFzVGFnTmFtZSh0YWdOYW1lKCkpKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICBub2RlQWZ0ZXJJbnNlcnRpb25Qb3NpdGlvbiA9IHJlZk5v
ZGU7CisgICAgfQorCisgICAgaWYgKCFibG9ja05vZGUpIHsKKyAgICAgICAgLy8gQ3JlYXRlIGEg
bmV3IGJsb2NrcXVvdGUgYW5kIGluc2VydCBpdCBhcyBhIGNoaWxkIG9mIHRoZSByb290IGVkaXRh
YmxlIGVsZW1lbnQuIFdlIGFjY29tcGxpc2gKKyAgICAgICAgLy8gdGhpcyBieSBzcGxpdHRpbmcg
YWxsIHBhcmVudHMgb2YgdGhlIGN1cnJlbnQgcGFyYWdyYXBoIHVwIHRvIHRoYXQgcG9pbnQuCisg
ICAgICAgIGJsb2NrTm9kZSA9IGNyZWF0ZUJsb2NrRWxlbWVudCgpOworICAgICAgICBpbnNlcnRO
b2RlQmVmb3JlKGJsb2NrTm9kZSwgbm9kZUFmdGVySW5zZXJ0aW9uUG9zaXRpb24pOworICAgIH0K
KworICAgIFBvc2l0aW9uIGxhc3RQYXJhZ3JhcGhJbkJsb2NrTm9kZSA9IGxhc3RQb3NpdGlvbklu
Tm9kZShibG9ja05vZGUuZ2V0KCkpOworICAgIGJvb2wgd2FzRW5kT2ZQYXJhZ3JhcGggPSBpc0Vu
ZE9mUGFyYWdyYXBoKGxhc3RQYXJhZ3JhcGhJbkJsb2NrTm9kZSk7CisKKyAgICBtb3ZlUGFyYWdy
YXBoV2l0aENsb25lcyhzdGFydCwgZW5kLCBibG9ja05vZGUuZ2V0KCksIG91dGVyQmxvY2suZ2V0
KCkpOwogCi0gICAgTm9kZSogcmVmTm9kZSA9IGVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoZW5k
aW5nU2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkpOwotICAgIGlmIChyZWZOb2RlLT5oYXNUYWdO
YW1lKHRhZ05hbWUoKSkpCi0gICAgICAgIC8vIFdlJ3JlIGFscmVhZHkgaW4gYSBibG9jayB3aXRo
IHRoZSBmb3JtYXQgd2Ugd2FudCwgc28gd2UgZG9uJ3QgaGF2ZSB0byBkbyBhbnl0aGluZwotICAg
ICAgICByZXR1cm47Ci0KLSAgICBWaXNpYmxlUG9zaXRpb24gcGFyYWdyYXBoU3RhcnQgPSBzdGFy
dE9mUGFyYWdyYXBoKGVuZCk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHBhcmFncmFwaEVuZCA9IGVu
ZE9mUGFyYWdyYXBoKGVuZCk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIGJsb2NrU3RhcnQgPSBzdGFy
dE9mQmxvY2soZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkpOwotICAgIFZpc2libGVQ
b3NpdGlvbiBibG9ja0VuZCA9IGVuZE9mQmxvY2soZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZVN0
YXJ0KCkpOwotICAgIFJlZlB0cjxFbGVtZW50PiBibG9ja05vZGUgPSBjcmVhdGVCbG9ja0VsZW1l
bnQoKTsKLSAgICBSZWZQdHI8RWxlbWVudD4gcGxhY2Vob2xkZXIgPSBjcmVhdGVCcmVha0VsZW1l
bnQoZG9jdW1lbnQoKSk7Ci0KLSAgICBOb2RlKiByb290ID0gZW5kaW5nU2VsZWN0aW9uKCkuc3Rh
cnQoKS5ub2RlKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKLSAgICBpZiAodmFsaWRCbG9ja1Rh
ZyhyZWZOb2RlLT5ub2RlTmFtZSgpLmxvd2VyKCkpICYmIAotICAgICAgICBwYXJhZ3JhcGhTdGFy
dCA9PSBibG9ja1N0YXJ0ICYmIHBhcmFncmFwaEVuZCA9PSBibG9ja0VuZCAmJiAKLSAgICAgICAg
cmVmTm9kZSAhPSByb290ICYmICFyb290LT5pc0Rlc2NlbmRhbnRPZihyZWZOb2RlKSkKLSAgICAg
ICAgLy8gQWxyZWFkeSBpbiBhIHZhbGlkIGJsb2NrIHRhZyB0aGF0IG9ubHkgY29udGFpbnMgdGhl
IGN1cnJlbnQgcGFyYWdyYXBoLCBzbyB3ZSBjYW4gc3dhcCB3aXRoIHRoZSBuZXcgdGFnCi0gICAg
ICAgIGluc2VydE5vZGVCZWZvcmUoYmxvY2tOb2RlLCByZWZOb2RlKTsKLSAgICBlbHNlIHsKLSAg
ICAgICAgLy8gQXZvaWQgaW5zZXJ0aW5nIGluc2lkZSBpbmxpbmUgZWxlbWVudHMgdGhhdCBzdXJy
b3VuZCBwYXJhZ3JhcGhTdGFydCB3aXRoIHVwc3RyZWFtKCkuCi0gICAgICAgIC8vIFRoaXMgaXMg
b25seSB0byBhdm9pZCBjcmVhdGluZyBibG9hdGVkIG1hcmt1cC4KLSAgICAgICAgaW5zZXJ0Tm9k
ZUF0KGJsb2NrTm9kZSwgcGFyYWdyYXBoU3RhcnQuZGVlcEVxdWl2YWxlbnQoKS51cHN0cmVhbSgp
KTsKKyAgICBpZiAod2FzRW5kT2ZQYXJhZ3JhcGggJiYgIWlzRW5kT2ZQYXJhZ3JhcGgobGFzdFBh
cmFncmFwaEluQmxvY2tOb2RlKSAmJiAhaXNTdGFydE9mUGFyYWdyYXBoKGxhc3RQYXJhZ3JhcGhJ
bkJsb2NrTm9kZSkpCisgICAgICAgIGluc2VydEJsb2NrUGxhY2Vob2xkZXIobGFzdFBhcmFncmFw
aEluQmxvY2tOb2RlKTsKK30KKworLy8gRklYTUU6IFdlIHNob3VsZCBjb25zaWRlciBtZXJpbmcg
dGhpcyBmdW5jdGlvbiB3aXRoIGlzRWxlbWVudEZvckZvcm1hdEJsb2NrQ29tbWFuZCBpbiBFZGl0
b3IuY3BwCisvLyBDaGVja3MgaWYgYSB0YWcgbmFtZSBpcyB2YWxpZCBmb3IgZXhlY0NvbW1hbmQo
J0Zvcm1hdEJsb2NrJykuCitib29sIEZvcm1hdEJsb2NrQ29tbWFuZDo6aXNFbGVtZW50VG9BcHBs
eUluRm9ybWF0QmxvY2tDb21tYW5kKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUpCit7Cisg
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFF1YWxpZmllZE5hbWU+LCBibG9ja1RhZ3Ms
ICgpKTsKKyAgICBpZiAoYmxvY2tUYWdzLmlzRW1wdHkoKSkgeworICAgICAgICBibG9ja1RhZ3Mu
YWRkKGFkZHJlc3NUYWcpOworICAgICAgICBibG9ja1RhZ3MuYWRkKGFydGljbGVUYWcpOworICAg
ICAgICBibG9ja1RhZ3MuYWRkKGFzaWRlVGFnKTsKKyAgICAgICAgYmxvY2tUYWdzLmFkZChibG9j
a3F1b3RlVGFnKTsKKyAgICAgICAgYmxvY2tUYWdzLmFkZChkZFRhZyk7CisgICAgICAgIGJsb2Nr
VGFncy5hZGQoZGl2VGFnKTsKKyAgICAgICAgYmxvY2tUYWdzLmFkZChkbFRhZyk7CisgICAgICAg
IGJsb2NrVGFncy5hZGQoZHRUYWcpOworICAgICAgICBibG9ja1RhZ3MuYWRkKGZvb3RlclRhZyk7
CisgICAgICAgIGJsb2NrVGFncy5hZGQoaDFUYWcpOworICAgICAgICBibG9ja1RhZ3MuYWRkKGgy
VGFnKTsKKyAgICAgICAgYmxvY2tUYWdzLmFkZChoM1RhZyk7CisgICAgICAgIGJsb2NrVGFncy5h
ZGQoaDRUYWcpOworICAgICAgICBibG9ja1RhZ3MuYWRkKGg1VGFnKTsKKyAgICAgICAgYmxvY2tU
YWdzLmFkZChoNlRhZyk7CisgICAgICAgIGJsb2NrVGFncy5hZGQoaGVhZGVyVGFnKTsKKyAgICAg
ICAgYmxvY2tUYWdzLmFkZChoZ3JvdXBUYWcpOworICAgICAgICBibG9ja1RhZ3MuYWRkKG5hdlRh
Zyk7CisgICAgICAgIGJsb2NrVGFncy5hZGQocFRhZyk7CisgICAgICAgIGJsb2NrVGFncy5hZGQo
cHJlVGFnKTsKKyAgICAgICAgYmxvY2tUYWdzLmFkZChzZWN0aW9uVGFnKTsKICAgICB9Ci0gICAg
YXBwZW5kTm9kZShwbGFjZWhvbGRlciwgYmxvY2tOb2RlKTsKKyAgICByZXR1cm4gYmxvY2tUYWdz
LmNvbnRhaW5zKHRhZ05hbWUpOworfQogCi0gICAgVmlzaWJsZVBvc2l0aW9uIGRlc3RpbmF0aW9u
KFBvc2l0aW9uKHBsYWNlaG9sZGVyLmdldCgpLCAwKSk7Ci0gICAgaWYgKHBhcmFncmFwaFN0YXJ0
ID09IHBhcmFncmFwaEVuZCAmJiAhbGluZUJyZWFrRXhpc3RzQXRWaXNpYmxlUG9zaXRpb24ocGFy
YWdyYXBoU3RhcnQpKSB7Ci0gICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihkZXN0aW5hdGlvbik7
Ci0gICAgICAgIHJldHVybjsKK05vZGUqIEZvcm1hdEJsb2NrQ29tbWFuZDo6ZW5jbG9zaW5nQmxv
Y2tUb1NwbGl0VHJlZVRvKE5vZGUqIHN0YXJ0Tm9kZSkgY29uc3QKK3sKKyAgICBOb2RlKiBsYXN0
QmxvY2sgPSBzdGFydE5vZGU7CisgICAgZm9yIChOb2RlKiBuID0gc3RhcnROb2RlOyBuOyBuID0g
bi0+cGFyZW50Tm9kZSgpKSB7CisgICAgICAgIGlmICghbi0+aXNDb250ZW50RWRpdGFibGUoKSkK
KyAgICAgICAgICAgIHJldHVybiBsYXN0QmxvY2s7CisgICAgICAgIGlmIChpc1RhYmxlQ2VsbChu
KSB8fCBuLT5oYXNUYWdOYW1lKGJvZHlUYWcpIHx8ICFuLT5wYXJlbnROb2RlKCkgfHwgIW4tPnBh
cmVudE5vZGUoKS0+aXNDb250ZW50RWRpdGFibGUoKQorICAgICAgICAgICAgfHwgKG4tPmlzRWxl
bWVudE5vZGUoKSAmJiBpc0VsZW1lbnRUb0FwcGx5SW5Gb3JtYXRCbG9ja0NvbW1hbmQoc3RhdGlj
X2Nhc3Q8RWxlbWVudCo+KG4pLT50YWdRTmFtZSgpKSkpCisgICAgICAgICAgICByZXR1cm4gbjsK
KyAgICAgICAgaWYgKGlzQmxvY2sobikpCisgICAgICAgICAgICBsYXN0QmxvY2sgPSBuOworICAg
ICAgICBpZiAoaXNMaXN0RWxlbWVudChuKSkKKyAgICAgICAgICAgIHJldHVybiBuLT5wYXJlbnRO
b2RlKCktPmlzQ29udGVudEVkaXRhYmxlKCkgPyBuLT5wYXJlbnROb2RlKCkgOiBuOwogICAgIH0K
LSAgICBtb3ZlUGFyYWdyYXBoKHBhcmFncmFwaFN0YXJ0LCBwYXJhZ3JhcGhFbmQsIGRlc3RpbmF0
aW9uLCB0cnVlLCBmYWxzZSk7CisgICAgcmV0dXJuIGxhc3RCbG9jazsKIH0KIAogfQpJbmRleDog
V2ViQ29yZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuaAkocmV2aXNpb24gNjkzNTcpCisrKyBXZWJD
b3JlL2VkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDEx
ICszOCwxNCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRm9ybWF0Qmxv
Y2tDb21tYW5kKGRvY3VtZW50LCB0YWdOYW1lKSk7CiAgICAgfQogCisgICAgc3RhdGljIGJvb2wg
aXNFbGVtZW50VG9BcHBseUluRm9ybWF0QmxvY2tDb21tYW5kKGNvbnN0IFF1YWxpZmllZE5hbWUm
IHRhZ05hbWUpOworCiBwcml2YXRlOgogICAgIEZvcm1hdEJsb2NrQ29tbWFuZChEb2N1bWVudCos
IGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUpOwogCi0gICAgdmlydHVhbCB2b2lkIGZvcm1h
dFJhbmdlKGNvbnN0IFBvc2l0aW9uJiwgY29uc3QgUG9zaXRpb24mLCBSZWZQdHI8RWxlbWVudD4m
KTsKLSAgICB2aXJ0dWFsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbigpIGNvbnN0IHsgcmV0dXJu
IEVkaXRBY3Rpb25Gb3JtYXRCbG9jazsgfQorICAgIHZvaWQgZm9ybWF0UmFuZ2UoY29uc3QgUG9z
aXRpb24mLCBjb25zdCBQb3NpdGlvbiYsIFJlZlB0cjxFbGVtZW50PiYpOworICAgIE5vZGUqIGVu
Y2xvc2luZ0Jsb2NrVG9TcGxpdFRyZWVUbyhOb2RlKiBzdGFydE5vZGUpIGNvbnN0OworICAgIEVk
aXRBY3Rpb24gZWRpdGluZ0FjdGlvbigpIGNvbnN0IHsgcmV0dXJuIEVkaXRBY3Rpb25Gb3JtYXRC
bG9jazsgfQogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9lZGl0
aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL1Zp
c2libGVQb3NpdGlvbi5jcHAJKHJldmlzaW9uIDY5MzU3KQorKysgV2ViQ29yZS9lZGl0aW5nL1Zp
c2libGVQb3NpdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzNCw3ICs2MzQsNyBAQCBib29s
IHNldEVuZChSYW5nZSAqciwgY29uc3QgVmlzaWJsZVBvc2l0CiAgICAgcmV0dXJuIGNvZGUgPT0g
MDsKIH0KIAotTm9kZSAqZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudChjb25zdCBWaXNpYmxlUG9z
aXRpb24gJnZpc2libGVQb3NpdGlvbikKK0VsZW1lbnQqIGVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1l
bnQoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZ2aXNpYmxlUG9zaXRpb24pCiB7CiAgICAgaWYgKHZp
c2libGVQb3NpdGlvbi5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CkluZGV4OiBXZWJD
b3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0
aW5nL1Zpc2libGVQb3NpdGlvbi5oCShyZXZpc2lvbiA2OTM1NykKKysrIFdlYkNvcmUvZWRpdGlu
Zy9WaXNpYmxlUG9zaXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTM2LDcgKzEzNiw3IEBAIGJv
b2wgc2V0RW5kKFJhbmdlKiwgY29uc3QgVmlzaWJsZVBvc2l0aW8KIFZpc2libGVQb3NpdGlvbiBz
dGFydFZpc2libGVQb3NpdGlvbihjb25zdCBSYW5nZSosIEVBZmZpbml0eSk7CiBWaXNpYmxlUG9z
aXRpb24gZW5kVmlzaWJsZVBvc2l0aW9uKGNvbnN0IFJhbmdlKiwgRUFmZmluaXR5KTsKIAotTm9k
ZSAqZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudChjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKK0Vs
ZW1lbnQqIGVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7
CiAKIGJvb2wgaXNGaXJzdFZpc2libGVQb3NpdGlvbkluTm9kZShjb25zdCBWaXNpYmxlUG9zaXRp
b24mLCBjb25zdCBOb2RlKik7CiBib29sIGlzTGFzdFZpc2libGVQb3NpdGlvbkluTm9kZShjb25z
dCBWaXNpYmxlUG9zaXRpb24mLCBjb25zdCBOb2RlKik7CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcv
aHRtbGVkaXRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9odG1sZWRpdGlu
Zy5jcHAJKHJldmlzaW9uIDY5MzU3KQorKysgV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDY1LDM5ICs0NjUsNiBAQCBib29sIGlzU3BlY2lhbEVsZW1l
bnQoY29uc3QgTm9kZSAqbikKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLS8vIENoZWNrcyBpZiBh
IHN0cmluZyBpcyBhIHZhbGlkIHRhZyBmb3IgdGhlIEZvcm1hdEJsb2NrQ29tbWFuZCBmdW5jdGlv
biBvZiBleGVjQ29tbWFuZC4gRXhwZWN0cyBsb3dlciBjYXNlIHN0cmluZ3MuCi1ib29sIHZhbGlk
QmxvY2tUYWcoY29uc3QgQXRvbWljU3RyaW5nJiBibG9ja1RhZykKLXsKLSAgICBpZiAoYmxvY2tU
YWcuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKEhhc2hTZXQ8QXRvbWljU3RyaW5nPiwgYmxvY2tUYWdzLCAoKSk7Ci0gICAgaWYgKGJs
b2NrVGFncy5pc0VtcHR5KCkpIHsKLSAgICAgICAgYmxvY2tUYWdzLmFkZChhZGRyZXNzVGFnLmxv
Y2FsTmFtZSgpKTsKLSAgICAgICAgYmxvY2tUYWdzLmFkZChhcnRpY2xlVGFnLmxvY2FsTmFtZSgp
KTsKLSAgICAgICAgYmxvY2tUYWdzLmFkZChhc2lkZVRhZy5sb2NhbE5hbWUoKSk7Ci0gICAgICAg
IGJsb2NrVGFncy5hZGQoYmxvY2txdW90ZVRhZy5sb2NhbE5hbWUoKSk7Ci0gICAgICAgIGJsb2Nr
VGFncy5hZGQoZGRUYWcubG9jYWxOYW1lKCkpOwotICAgICAgICBibG9ja1RhZ3MuYWRkKGRpdlRh
Zy5sb2NhbE5hbWUoKSk7Ci0gICAgICAgIGJsb2NrVGFncy5hZGQoZGxUYWcubG9jYWxOYW1lKCkp
OwotICAgICAgICBibG9ja1RhZ3MuYWRkKGR0VGFnLmxvY2FsTmFtZSgpKTsKLSAgICAgICAgYmxv
Y2tUYWdzLmFkZChmb290ZXJUYWcubG9jYWxOYW1lKCkpOwotICAgICAgICBibG9ja1RhZ3MuYWRk
KGgxVGFnLmxvY2FsTmFtZSgpKTsKLSAgICAgICAgYmxvY2tUYWdzLmFkZChoMlRhZy5sb2NhbE5h
bWUoKSk7Ci0gICAgICAgIGJsb2NrVGFncy5hZGQoaDNUYWcubG9jYWxOYW1lKCkpOwotICAgICAg
ICBibG9ja1RhZ3MuYWRkKGg0VGFnLmxvY2FsTmFtZSgpKTsKLSAgICAgICAgYmxvY2tUYWdzLmFk
ZChoNVRhZy5sb2NhbE5hbWUoKSk7Ci0gICAgICAgIGJsb2NrVGFncy5hZGQoaDZUYWcubG9jYWxO
YW1lKCkpOwotICAgICAgICBibG9ja1RhZ3MuYWRkKGhlYWRlclRhZy5sb2NhbE5hbWUoKSk7Ci0g
ICAgICAgIGJsb2NrVGFncy5hZGQoaGdyb3VwVGFnLmxvY2FsTmFtZSgpKTsKLSAgICAgICAgYmxv
Y2tUYWdzLmFkZChuYXZUYWcubG9jYWxOYW1lKCkpOwotICAgICAgICBibG9ja1RhZ3MuYWRkKHBU
YWcubG9jYWxOYW1lKCkpOwotICAgICAgICBibG9ja1RhZ3MuYWRkKHByZVRhZy5sb2NhbE5hbWUo
KSk7Ci0gICAgICAgIGJsb2NrVGFncy5hZGQoc2VjdGlvblRhZy5sb2NhbE5hbWUoKSk7Ci0gICAg
fQotICAgIHJldHVybiBibG9ja1RhZ3MuY29udGFpbnMoYmxvY2tUYWcpOwotfQotCiBzdGF0aWMg
Tm9kZSogZmlyc3RJblNwZWNpYWxFbGVtZW50KGNvbnN0IFBvc2l0aW9uJiBwb3MpCiB7CiAgICAg
Ly8gRklYTUU6IFRoaXMgYmVnaW5zIGF0IHBvcy5ub2RlKCksIHdoaWNoIGRvZXNuJ3QgbmVjZXNz
YXJpbHkgY29udGFpbiBwb3MgKHN1cHBvc2UgcG9zIHdhcyBbaW1nLCAwXSkuICBTZWUgPHJkYXI6
Ly9wcm9ibGVtLzUwMjc3MDI+LgpJbmRleDogV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmgJKHJldmlzaW9uIDY5
MzU3KQorKysgV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmgJKHdvcmtpbmcgY29weSkKQEAg
LTIyOCw4ICsyMjgsNiBAQCBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbkZvclBhcmFncmFwaEl0
CiAgICAgCiBTdHJpbmcgc3RyaW5nV2l0aFJlYmFsYW5jZWRXaGl0ZXNwYWNlKGNvbnN0IFN0cmlu
ZyYsIGJvb2wsIGJvb2wpOwogY29uc3QgU3RyaW5nJiBub25CcmVha2luZ1NwYWNlU3RyaW5nKCk7
Ci1ib29sIHZhbGlkQmxvY2tUYWcoY29uc3QgQXRvbWljU3RyaW5nJik7Ci0gICAgCiAKIH0KIApJ
bmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0No
YW5nZUxvZwkocmV2aXNpb24gNjkzNzEpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwyMSBAQAorMjAxMC0xMC0wNyAgUnlvc3VrZSBOaXdhICA8cm5p
d2FAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBleGVjQ29tbWFuZCBGb3JtYXRCbG9jayBjcmVhdGVzIGxvdHMgb2YgYmxvY2txdW90
ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5Nzk1
CisKKyAgICAgICAgQWRkZWQgdGVzdHMgdG8gZW5zdXJlIFdlYktpdCBkb2VzIG5vdCBhZGQgbXVs
dGlwbGUgYmxvY2sgZWxlbWVudHMgd2hlbiBhcHBseWluZyBibG9jayBlbGVtZW50IHRvCisgICAg
ICAgIG11bHRpcGxlIHBhcmFncmFwaHMuICBBbHNvIGFkZGVkIGEgdGVzdCB0byBlbnN1cmUgZm9y
bWF0QmxvY2sgd29ya3Mgd2l0aCB0YWJsZXMuCisKKyAgICAgICAgKiBlZGl0aW5nL2V4ZWNDb21t
YW5kL2Zvcm1hdC1ibG9jay1leHBlY3RlZC50eHQ6IFByZXNlcnZlZCBzcGFuIGFuZCByZW1vdmVk
IGVycm9uZW91cyBici4KKyAgICAgICAgKiBlZGl0aW5nL2V4ZWNDb21tYW5kL2Zvcm1hdC1ibG9j
ay1mcm9tLXJhbmdlLXNlbGVjdGlvbi1leHBlY3RlZC50eHQ6IE1lcmdlZCBkbCdzIGFuZCByZW1v
dmVkIGVycm9uZW91cyBici4KKyAgICAgICAgKiBlZGl0aW5nL2V4ZWNDb21tYW5kL2Zvcm1hdC1i
bG9jay1tdWx0aXBsZS1wYXJhZ3JhcGhzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
ZWRpdGluZy9leGVjQ29tbWFuZC9mb3JtYXQtYmxvY2stbXVsdGlwbGUtcGFyYWdyYXBocy5odG1s
OiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL2V4ZWNDb21tYW5kL2Zvcm1hdC1ibG9jay10YWJs
ZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGVkaXRpbmcvZXhlY0NvbW1hbmQvZm9y
bWF0LWJsb2NrLXRhYmxlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGVkaXRpbmcvZXhlY0NvbW1h
bmQvZm9ybWF0LWJsb2NrLXdpdGgtYnJhY2VzLWV4cGVjdGVkLnR4dDogUmVtb3ZlZCBlcnJvbmVv
dXMgYnIuCisKIDIwMTAtMTAtMDcgIEFiaGlzaGVrIEFyeWEgIDxpbmZlcm5vQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBVbnJldmlld2VkLiAKSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvZXhl
Y0NvbW1hbmQvZm9ybWF0LWJsb2NrLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL2Zvcm1hdC1ibG9jay1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDY5MzU3KQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9mb3JtYXQtYmxv
Y2stZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw2IEBAIEFmdGVyIEZv
cm1hdEJsb2NrOgogIgogfCA8cHJlPgogfCAgICJNYWtlIFByZSIKLXwgICA8YnI+CiB8ICIKICIK
IHwgPGJyPgpAQCAtNjIsOCArNjEsOSBAQCBBZnRlciBGb3JtYXRCbG9jazoKIHwgICAiRm9vIgog
fCAgIDxicj4KIHwgICA8aDE+Ci18ICAgICAiTWFrZSBoMSIKLXwgICAgIDxicj4KK3wgICAgIDxz
cGFuPgorfCAgICAgICBpZD0iaXRlbTIiCit8ICAgICAgICJNYWtlIGgxIgogfCAgICJiYXoiCiB8
ICIKICIKSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvZm9ybWF0LWJsb2Nr
LWZyb20tcmFuZ2Utc2VsZWN0aW9uLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL2Zvcm1hdC1ibG9jay1mcm9tLXJhbmdlLXNlbGVjdGlv
bi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDY5MzU3KQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9l
eGVjQ29tbWFuZC9mb3JtYXQtYmxvY2stZnJvbS1yYW5nZS1zZWxlY3Rpb24tZXhwZWN0ZWQudHh0
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiwyMiArMzIsMjMgQEAgYWZ0ZXIgRm9ybWF0QmxvY2s6CiAi
CiB8IDxkbD4KIHwgICAiRm88I3NlbGVjdGlvbi1hbmNob3I+byIKK3wgICA8YnI+Cit8ICAgImJh
ciIKK3wgICA8YnI+Cit8ICAgPHNwYW4+Cit8ICAgICAiYmF6IgorfCAgICAgPGJyPgorfCAgICJy
YXoiCit8ICAgPGJyPgorfCAgICIKK2RhciIKK3wgICA8YnI+Cit8ICAgIgorIgorfCAgICJ5YXI8
I3NlbGVjdGlvbi1mb2N1cz4iCiB8ICIKICIKLXwgPGRpdj4KLXwgICA8ZGw+Ci18ICAgICAiYmFy
IgotfCAgIDxzcGFuPgotfCAgICAgPGRsPgotfCAgICAgICAiYmF6IgotfCAgIDxkbD4KLXwgICAg
ICJyYXoiCi18IDxkbD4KLXwgICAiZGFyIgotfCAgICLCoCIKIHwgIgogIgotfCA8ZGw+Ci18ICAg
InlhPCNzZWxlY3Rpb24tZm9jdXM+ciIKIHwgIgogIgpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGlu
Zy9leGVjQ29tbWFuZC9mb3JtYXQtYmxvY2stbXVsdGlwbGUtcGFyYWdyYXBocy1leHBlY3RlZC50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9mb3JtYXQt
YmxvY2stbXVsdGlwbGUtcGFyYWdyYXBocy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL2Zvcm1hdC1ibG9jay1tdWx0aXBsZS1wYXJh
Z3JhcGhzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNDMgQEAKK1RoaXMg
dGVzdHMgZW5zdXJlcyBmb3JtYXRCbG9jayBkbyBub3QgbWFrZSBtdWx0aXBsZSBlbGVtZW50cyB3
aGVuIGZvcm1hdHRpbmcgbXVsdGlwbGUgcGFyYWdyYXBocy4KKworRm9ybWF0dGluZzoKK3wgIgor
IgorfCA8ZGl2PgorfCAgICI8I3NlbGVjdGlvbi1hbmNob3I+aGVsbG8iCit8IDxkaXY+Cit8ICAg
IndvcmxkIgorfCA8ZGl2PgorfCAgICJXZWJLaXQ8I3NlbGVjdGlvbi1mb2N1cz4iCit8ICIKKyIK
KworYnkgcCB5aWVsZHM6Cit8ICIKKyIKK3wgPHA+Cit8ICAgIjwjc2VsZWN0aW9uLWFuY2hvcj5o
ZWxsbyIKK3wgICA8YnI+Cit8ICAgIndvcmxkIgorfCAgIDxicj4KK3wgICAiV2ViS2l0PCNzZWxl
Y3Rpb24tZm9jdXM+IgorfCAiCisiCisKK0Zvcm1hdHRpbmc6Cit8ICIKKyIKK3wgPHA+Cit8ICAg
Ijwjc2VsZWN0aW9uLWFuY2hvcj5oZWxsbyIKK3wgPHA+Cit8ICAgIndvcmxkPCNzZWxlY3Rpb24t
Zm9jdXM+IgorfCAiCisiCisKK2J5IGJsb2NrcXVvdGUgeWllbGRzOgorfCAiCisiCit8IDxibG9j
a3F1b3RlPgorfCAgICI8I3NlbGVjdGlvbi1hbmNob3I+aGVsbG8iCit8ICAgPGJyPgorfCAgICJ3
b3JsZDwjc2VsZWN0aW9uLWZvY3VzPiIKK3wgIgorIgorCitGb3JtYXR0aW5nOgorfCAiCisiCit8
IDxkaXY+Cit8ICAgIjwjc2VsZWN0aW9uLWFuY2hvcj5oZWxsbyIKK3wgICA8cHJlPgorfCAgICAg
IndvcmxkPCNzZWxlY3Rpb24tZm9jdXM+IgorfCAiCisiCisKK2J5IHAgeWllbGRzOgorfCAiCisi
Cit8IDxkaXY+Cit8ICAgPHA+Cit8ICAgICAiPCNzZWxlY3Rpb24tYW5jaG9yPmhlbGxvIgorfCAg
ICAgPGJyPgorfCAgICAgIndvcmxkPCNzZWxlY3Rpb24tZm9jdXM+IgorfCAiCisiCisKK0Zvcm1h
dHRpbmc6Cit8ICIKKyIKK3wgPGgxPgorfCAgICI8I3NlbGVjdGlvbi1hbmNob3I+aGVsbG8iCit8
IDxkaXY+Cit8ICAgPGgyPgorfCAgICAgIndvcmxkIgorfCAgIDxoMz4KK3wgICAgICJXZWJLaXQ8
I3NlbGVjdGlvbi1mb2N1cz4iCit8ICIKKyIKKworYnkgcHJlIHlpZWxkczoKK3wgIgorIgorfCA8
cHJlPgorfCAgICI8I3NlbGVjdGlvbi1hbmNob3I+aGVsbG8iCit8ICAgPGJyPgorfCAgICJ3b3Js
ZCIKK3wgICA8YnI+Cit8ICAgIldlYktpdDwjc2VsZWN0aW9uLWZvY3VzPiIKK3wgIgorIgorCitG
b3JtYXR0aW5nOgorfCAiCisiCit8IDxkaXY+Cit8ICAgImhlbGxvIgorfCAgIDxwPgorfCAgICAg
Ijwjc2VsZWN0aW9uLWFuY2hvcj53b3JsZCIKK3wgICAid2Via2k8I3NlbGVjdGlvbi1mb2N1cz50
IgorfCAiCisiCisKK2J5IGgxIHlpZWxkczoKK3wgIgorIgorfCA8ZGl2PgorfCAgICJoZWxsbyIK
K3wgICA8aDE+Cit8ICAgICAiPCNzZWxlY3Rpb24tYW5jaG9yPndvcmxkIgorfCAgICAgPGJyPgor
fCAgICAgIndlYmtpdDwjc2VsZWN0aW9uLWZvY3VzPiIKK3wgIgorIgorCitGb3JtYXR0aW5nOgor
fCAiCisiCit8IDxwcmU+Cit8ICAgIjwjc2VsZWN0aW9uLWFuY2hvcj5oZWxsbword29ybGQ8I3Nl
bGVjdGlvbi1mb2N1cz4KK3dlYmtpdAorIgorfCAiCisiCisKK2J5IGJsb2NrcXVvdGUgeWllbGRz
OgorfCAiCisiCit8IDxwcmU+Cit8ICAgPGJsb2NrcXVvdGU+Cit8ICAgICAiPCNzZWxlY3Rpb24t
YW5jaG9yPmhlbGxvIgorfCAgICAgPGJyPgorfCAgICAgIndvcmxkPCNzZWxlY3Rpb24tZm9jdXM+
IgorfCAgICAgPGJyPgorfCAgICAgIndlYmtpdCIKK3wgIgorIgorCitGb3JtYXR0aW5nOgorfCAi
CisiCit8IDxwcmU+Cit8ICAgImhlbGxvCis8I3NlbGVjdGlvbi1hbmNob3I+d29ybGQKK3dlYmtp
PCNzZWxlY3Rpb24tZm9jdXM+dAorIgorfCAiCisiCisKK2J5IGJsb2NrcXVvdGUgeWllbGRzOgor
fCAiCisiCit8IDxwcmU+Cit8ICAgImhlbGxvCisiCit8ICAgPGJsb2NrcXVvdGU+Cit8ICAgICAi
PCNzZWxlY3Rpb24tYW5jaG9yPndvcmxkIgorfCAgICAgPGJyPgorfCAgICAgIndlYmtpPCNzZWxl
Y3Rpb24tZm9jdXM+dCIKK3wgIgorIgorCitGb3JtYXR0aW5nOgorfCAiCis8I3NlbGVjdGlvbi1h
bmNob3I+aGVsbG8iCit8IDxwPgorfCAgICJ3b3JsZDwjc2VsZWN0aW9uLWZvY3VzPiIKK3wgPHA+
Cit8ICAgIndlYmtpdCIKK3wgIgorCisiCisKK2J5IHByZSB5aWVsZHM6Cit8IDxwcmU+Cit8ICAg
Ijwjc2VsZWN0aW9uLWFuY2hvcj4KK2hlbGxvIgorfCAgIDxicj4KK3wgICAid29ybDwjc2VsZWN0
aW9uLWZvY3VzPmQiCit8IDxwPgorfCAgICJ3ZWJraXQiCit8ICIKKworIgorCitGb3JtYXR0aW5n
OgorfCAiCisiCit8IDxkaXY+Cit8ICAgImhlbGxvIgorfCA8ZGl2PgorfCAgICI8I3NlbGVjdGlv
bi1hbmNob3I+d29ybGQiCit8IDxkaXY+Cit8ICAgIndlYmtpdDwjc2VsZWN0aW9uLWZvY3VzPiIK
K3wgIgorCisiCit8IDxkaXY+Cit8ICAgY29udGVudGVkaXRhYmxlPSIiCit8ICAgaWQ9InRlc3Q5
IgorfCAgICIKKyIKK3wgICA8dWw+Cit8ICAgICA8bGk+Cit8ICAgICAgICJoZWxsbyIKK3wgICAg
IDxsaT4KK3wgICAgICAgIndvcmxkIgorfCAgICIKKyIKK3wgIgorIgorfCA8c2NyaXB0PgorfCAg
ICIKKworTWFya3VwLmRlc2NyaXB0aW9uKCdUaGlzIHRlc3RzIGVuc3VyZXMgZm9ybWF0QmxvY2sg
ZG8gbm90IG1ha2UgbXVsdGlwbGUgZWxlbWVudHMgd2hlbiBmb3JtYXR0aW5nIG11bHRpcGxlIHBh
cmFncmFwaHMuJykKKworZnVuY3Rpb24gdGVzdEluZGVudGF0aW9uKGNvbnRhaW5lcklkLCBzZWxl
Y3RvciwgdmFsdWUpIHsKKyAgICB2YXIgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoY29udGFpbmVySWQpOworICAgIHNlbGVjdG9yKGNvbnRhaW5lcik7CisgICAgTWFya3VwLmR1
bXAoY29udGFpbmVyLCAnRm9ybWF0dGluZycpOworICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdG
b3JtYXRCbG9jaycsIGZhbHNlLCB2YWx1ZSk7CisgICAgTWFya3VwLmR1bXAoY29udGFpbmVyLCAn
YnkgJyArIHZhbHVlICsgJyB5aWVsZHMnKTsKK30KKworZnVuY3Rpb24gc2VsZWN0QWxsKGNvbnRh
aW5lcikgeworICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5zZWxlY3RBbGxDaGlsZHJlbihjb250
YWluZXIpOworfQorCitmdW5jdGlvbiBzZWxlY3RvckZvckxpbmVzKGZpcnN0LCBsYXN0KSB7Cisg
ICAgcmV0dXJuIGZ1bmN0aW9uIChjb250YWluZXIpIHsKKyAgICAgICAgd2luZG93LmdldFNlbGVj
dGlvbigpLnNldFBvc2l0aW9uKGNvbnRhaW5lciwgMCk7CisgICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgZmlyc3QgLSAxOyBpKyspCisgICAgICAgICAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCku
bW9kaWZ5KCdtb3ZlJywgJ2ZvcndhcmQnLCAnbGluZScpOworICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IE1hdGguYWJzKGxhc3QgLSBmaXJzdCwgMCkgKyAxOyBpKyspCisgICAgICAgICAgICB3
aW5kb3cuZ2V0U2VsZWN0aW9uKCkubW9kaWZ5KCdleHRlbmQnLCAnZm9yd2FyZCcsICdsaW5lJyk7
CisgICAgICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5tb2RpZnkoJ2V4dGVuZCcsICdiYWNrd2Fy
ZCcsICdjaGFyYWN0ZXInKTsKKyAgICB9Cit9CisKK3Rlc3RJbmRlbnRhdGlvbigndGVzdDAnLCBz
ZWxlY3RBbGwsICdwJyk7Cit0ZXN0SW5kZW50YXRpb24oJ3Rlc3QxJywgc2VsZWN0QWxsLCAnYmxv
Y2txdW90ZScpOwordGVzdEluZGVudGF0aW9uKCd0ZXN0MicsIHNlbGVjdEFsbCwgJ3AnKTsKK3Rl
c3RJbmRlbnRhdGlvbigndGVzdDMnLCBzZWxlY3RBbGwsICdwcmUnKTsKK3Rlc3RJbmRlbnRhdGlv
bigndGVzdDQnLCBzZWxlY3RvckZvckxpbmVzKDIsIDMpLCAnaDEnKTsKK3Rlc3RJbmRlbnRhdGlv
bigndGVzdDUnLCBzZWxlY3RvckZvckxpbmVzKDEsIDIpLCAnYmxvY2txdW90ZScpOwordGVzdElu
ZGVudGF0aW9uKCd0ZXN0NicsIHNlbGVjdG9yRm9yTGluZXMoMiwgMyksICdibG9ja3F1b3RlJyk7
Cit0ZXN0SW5kZW50YXRpb24oJ3Rlc3Q3Jywgc2VsZWN0b3JGb3JMaW5lcygxLCAyKSwgJ3ByZScp
OwordGVzdEluZGVudGF0aW9uKCd0ZXN0OCcsIHNlbGVjdG9yRm9yTGluZXMoMiwgMyksICdwcmUn
KTsKK3Rlc3RJbmRlbnRhdGlvbigndGVzdDknLCBzZWxlY3RBbGwsICdibG9ja3F1b3RlJyk7CisK
KyIKKworYnkgcHJlIHlpZWxkczoKK3wgIgorIgorfCA8ZGl2PgorfCAgICJoZWxsbyIKK3wgPHBy
ZT4KK3wgICAiPCNzZWxlY3Rpb24tYW5jaG9yPndvcmxkIgorfCAgIDxicj4KK3wgICAid2Via2l0
PCNzZWxlY3Rpb24tZm9jdXM+IgorfCAiCisKKyIKK3wgPGRpdj4KK3wgICBjb250ZW50ZWRpdGFi
bGU9IiIKK3wgICBpZD0idGVzdDkiCit8ICAgIgorIgorfCAgIDx1bD4KK3wgICAgIDxsaT4KK3wg
ICAgICAgImhlbGxvIgorfCAgICAgPGxpPgorfCAgICAgICAid29ybGQiCit8ICAgIgorIgorfCAi
CisiCit8IDxzY3JpcHQ+Cit8ICAgIgorCitNYXJrdXAuZGVzY3JpcHRpb24oJ1RoaXMgdGVzdHMg
ZW5zdXJlcyBmb3JtYXRCbG9jayBkbyBub3QgbWFrZSBtdWx0aXBsZSBlbGVtZW50cyB3aGVuIGZv
cm1hdHRpbmcgbXVsdGlwbGUgcGFyYWdyYXBocy4nKQorCitmdW5jdGlvbiB0ZXN0SW5kZW50YXRp
b24oY29udGFpbmVySWQsIHNlbGVjdG9yLCB2YWx1ZSkgeworICAgIHZhciBjb250YWluZXIgPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZChjb250YWluZXJJZCk7CisgICAgc2VsZWN0b3IoY29udGFp
bmVyKTsKKyAgICBNYXJrdXAuZHVtcChjb250YWluZXIsICdGb3JtYXR0aW5nJyk7CisgICAgZG9j
dW1lbnQuZXhlY0NvbW1hbmQoJ0Zvcm1hdEJsb2NrJywgZmFsc2UsIHZhbHVlKTsKKyAgICBNYXJr
dXAuZHVtcChjb250YWluZXIsICdieSAnICsgdmFsdWUgKyAnIHlpZWxkcycpOworfQorCitmdW5j
dGlvbiBzZWxlY3RBbGwoY29udGFpbmVyKSB7CisgICAgd2luZG93LmdldFNlbGVjdGlvbigpLnNl
bGVjdEFsbENoaWxkcmVuKGNvbnRhaW5lcik7Cit9CisKK2Z1bmN0aW9uIHNlbGVjdG9yRm9yTGlu
ZXMoZmlyc3QsIGxhc3QpIHsKKyAgICByZXR1cm4gZnVuY3Rpb24gKGNvbnRhaW5lcikgeworICAg
ICAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkuc2V0UG9zaXRpb24oY29udGFpbmVyLCAwKTsKKyAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaXJzdCAtIDE7IGkrKykKKyAgICAgICAgICAgIHdp
bmRvdy5nZXRTZWxlY3Rpb24oKS5tb2RpZnkoJ21vdmUnLCAnZm9yd2FyZCcsICdsaW5lJyk7Cisg
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgTWF0aC5hYnMobGFzdCAtIGZpcnN0LCAwKSArIDE7
IGkrKykKKyAgICAgICAgICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5tb2RpZnkoJ2V4dGVuZCcs
ICdmb3J3YXJkJywgJ2xpbmUnKTsKKyAgICAgICAgd2luZG93LmdldFNlbGVjdGlvbigpLm1vZGlm
eSgnZXh0ZW5kJywgJ2JhY2t3YXJkJywgJ2NoYXJhY3RlcicpOworICAgIH0KK30KKwordGVzdElu
ZGVudGF0aW9uKCd0ZXN0MCcsIHNlbGVjdEFsbCwgJ3AnKTsKK3Rlc3RJbmRlbnRhdGlvbigndGVz
dDEnLCBzZWxlY3RBbGwsICdibG9ja3F1b3RlJyk7Cit0ZXN0SW5kZW50YXRpb24oJ3Rlc3QyJywg
c2VsZWN0QWxsLCAncCcpOwordGVzdEluZGVudGF0aW9uKCd0ZXN0MycsIHNlbGVjdEFsbCwgJ3By
ZScpOwordGVzdEluZGVudGF0aW9uKCd0ZXN0NCcsIHNlbGVjdG9yRm9yTGluZXMoMiwgMyksICdo
MScpOwordGVzdEluZGVudGF0aW9uKCd0ZXN0NScsIHNlbGVjdG9yRm9yTGluZXMoMSwgMiksICdi
bG9ja3F1b3RlJyk7Cit0ZXN0SW5kZW50YXRpb24oJ3Rlc3Q2Jywgc2VsZWN0b3JGb3JMaW5lcygy
LCAzKSwgJ2Jsb2NrcXVvdGUnKTsKK3Rlc3RJbmRlbnRhdGlvbigndGVzdDcnLCBzZWxlY3RvckZv
ckxpbmVzKDEsIDIpLCAncHJlJyk7Cit0ZXN0SW5kZW50YXRpb24oJ3Rlc3Q4Jywgc2VsZWN0b3JG
b3JMaW5lcygyLCAzKSwgJ3ByZScpOwordGVzdEluZGVudGF0aW9uKCd0ZXN0OScsIHNlbGVjdEFs
bCwgJ2Jsb2NrcXVvdGUnKTsKKworIgorCitGb3JtYXR0aW5nOgorfCAiCisiCit8IDx1bD4KK3wg
ICA8bGk+Cit8ICAgICAiPCNzZWxlY3Rpb24tYW5jaG9yPmhlbGxvIgorfCAgIDxsaT4KK3wgICAg
ICJ3b3JsZDwjc2VsZWN0aW9uLWZvY3VzPiIKK3wgIgorIgorCitieSBibG9ja3F1b3RlIHlpZWxk
czoKK3wgIgorIgorfCA8YmxvY2txdW90ZT4KK3wgICA8dWw+Cit8ICAgICA8bGk+Cit8ICAgICAg
ICI8I3NlbGVjdGlvbi1hbmNob3I+aGVsbG8iCit8ICAgPHVsPgorfCAgICAgPGxpPgorfCAgICAg
ICAid29ybGQ8I3NlbGVjdGlvbi1mb2N1cz4iCit8ICIKKyIKSW5kZXg6IExheW91dFRlc3RzL2Vk
aXRpbmcvZXhlY0NvbW1hbmQvZm9ybWF0LWJsb2NrLW11bHRpcGxlLXBhcmFncmFwaHMuaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL2Zvcm1hdC1ibG9j
ay1tdWx0aXBsZS1wYXJhZ3JhcGhzLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9l
ZGl0aW5nL2V4ZWNDb21tYW5kL2Zvcm1hdC1ibG9jay1tdWx0aXBsZS1wYXJhZ3JhcGhzLmh0bWwJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODIgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8
Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvZHVtcC1hcy1tYXJrdXAuanMiPjwv
c2NyaXB0PgorPGRpdiBpZD0idGVzdDAiIGNvbnRlbnRlZGl0YWJsZT4KKzxkaXY+aGVsbG88L2Rp
dj48ZGl2PndvcmxkPC9kaXY+PGRpdj5XZWJLaXQ8L2Rpdj4KKzwvZGl2PgorPGRpdiBpZD0idGVz
dDEiIGNvbnRlbnRlZGl0YWJsZT4KKzxwPmhlbGxvPC9wPjxwPndvcmxkPC9wPgorPC9kaXY+Cis8
ZGl2IGlkPSJ0ZXN0MiIgY29udGVudGVkaXRhYmxlPgorPGRpdj5oZWxsbzxwcmU+d29ybGQ8L3By
ZT48L2Rpdj4KKzwvZGl2PgorPGRpdiBpZD0idGVzdDMiIGNvbnRlbnRlZGl0YWJsZT4KKzxoMT5o
ZWxsbzwvaDE+PGRpdj48aDI+d29ybGQ8L2gyPjxoMz5XZWJLaXQ8L2gzPjwvZGl2PgorPC9kaXY+
Cis8ZGl2IGlkPSJ0ZXN0NCIgY29udGVudGVkaXRhYmxlPgorPGRpdj5oZWxsbzxwPndvcmxkPC9w
PndlYmtpdDwvZGl2PgorPC9kaXY+Cis8ZGl2IGlkPSJ0ZXN0NSIgY29udGVudGVkaXRhYmxlPgor
PHByZT5oZWxsbword29ybGQKK3dlYmtpdAorPC9wcmU+Cis8L2Rpdj4KKzxkaXYgaWQ9InRlc3Q2
IiBjb250ZW50ZWRpdGFibGU+Cis8cHJlPmhlbGxvCit3b3JsZAord2Via2l0Cis8L3ByZT4KKzwv
ZGl2PgorPGRpdiBpZD0idGVzdDciIGNvbnRlbnRlZGl0YWJsZT4KK2hlbGxvPHA+d29ybGQ8L3A+
PHA+d2Via2l0PC9wPgorPC9wcmU+Cis8L2Rpdj4KKzxkaXYgaWQ9InRlc3Q4IiBjb250ZW50ZWRp
dGFibGU+Cis8ZGl2PmhlbGxvPC9kaXY+PGRpdj53b3JsZDwvZGl2PjxkaXY+d2Via2l0PC9kaXY+
Cis8L3ByZT4KKzxkaXYgaWQ9InRlc3Q5IiBjb250ZW50ZWRpdGFibGU+Cis8dWw+PGxpPmhlbGxv
PC9saT48bGk+d29ybGQ8L2xpPjwvdWw+Cis8L2Rpdj4KKzxzY3JpcHQ+CisKK01hcmt1cC5kZXNj
cmlwdGlvbignVGhpcyB0ZXN0cyBlbnN1cmVzIGZvcm1hdEJsb2NrIGRvIG5vdCBtYWtlIG11bHRp
cGxlIGVsZW1lbnRzIHdoZW4gZm9ybWF0dGluZyBtdWx0aXBsZSBwYXJhZ3JhcGhzLicpCisKK2Z1
bmN0aW9uIHRlc3RJbmRlbnRhdGlvbihjb250YWluZXJJZCwgc2VsZWN0b3IsIHZhbHVlKSB7Cisg
ICAgdmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGNvbnRhaW5lcklkKTsK
KyAgICBzZWxlY3Rvcihjb250YWluZXIpOworICAgIE1hcmt1cC5kdW1wKGNvbnRhaW5lciwgJ0Zv
cm1hdHRpbmcnKTsKKyAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnRm9ybWF0QmxvY2snLCBmYWxz
ZSwgdmFsdWUpOworICAgIE1hcmt1cC5kdW1wKGNvbnRhaW5lciwgJ2J5ICcgKyB2YWx1ZSArICcg
eWllbGRzJyk7Cit9CisKK2Z1bmN0aW9uIHNlbGVjdEFsbChjb250YWluZXIpIHsKKyAgICB3aW5k
b3cuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0QWxsQ2hpbGRyZW4oY29udGFpbmVyKTsKK30KKworZnVu
Y3Rpb24gc2VsZWN0b3JGb3JMaW5lcyhmaXJzdCwgbGFzdCkgeworICAgIHJldHVybiBmdW5jdGlv
biAoY29udGFpbmVyKSB7CisgICAgICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5zZXRQb3NpdGlv
bihjb250YWluZXIsIDApOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpcnN0IC0gMTsg
aSsrKQorICAgICAgICAgICAgd2luZG93LmdldFNlbGVjdGlvbigpLm1vZGlmeSgnbW92ZScsICdm
b3J3YXJkJywgJ2xpbmUnKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBNYXRoLmFicyhs
YXN0IC0gZmlyc3QsIDApICsgMTsgaSsrKQorICAgICAgICAgICAgd2luZG93LmdldFNlbGVjdGlv
bigpLm1vZGlmeSgnZXh0ZW5kJywgJ2ZvcndhcmQnLCAnbGluZScpOworICAgICAgICB3aW5kb3cu
Z2V0U2VsZWN0aW9uKCkubW9kaWZ5KCdleHRlbmQnLCAnYmFja3dhcmQnLCAnY2hhcmFjdGVyJyk7
CisgICAgfQorfQorCit0ZXN0SW5kZW50YXRpb24oJ3Rlc3QwJywgc2VsZWN0QWxsLCAncCcpOwor
dGVzdEluZGVudGF0aW9uKCd0ZXN0MScsIHNlbGVjdEFsbCwgJ2Jsb2NrcXVvdGUnKTsKK3Rlc3RJ
bmRlbnRhdGlvbigndGVzdDInLCBzZWxlY3RBbGwsICdwJyk7Cit0ZXN0SW5kZW50YXRpb24oJ3Rl
c3QzJywgc2VsZWN0QWxsLCAncHJlJyk7Cit0ZXN0SW5kZW50YXRpb24oJ3Rlc3Q0Jywgc2VsZWN0
b3JGb3JMaW5lcygyLCAzKSwgJ2gxJyk7Cit0ZXN0SW5kZW50YXRpb24oJ3Rlc3Q1Jywgc2VsZWN0
b3JGb3JMaW5lcygxLCAyKSwgJ2Jsb2NrcXVvdGUnKTsKK3Rlc3RJbmRlbnRhdGlvbigndGVzdDYn
LCBzZWxlY3RvckZvckxpbmVzKDIsIDMpLCAnYmxvY2txdW90ZScpOwordGVzdEluZGVudGF0aW9u
KCd0ZXN0NycsIHNlbGVjdG9yRm9yTGluZXMoMSwgMiksICdwcmUnKTsKK3Rlc3RJbmRlbnRhdGlv
bigndGVzdDgnLCBzZWxlY3RvckZvckxpbmVzKDIsIDMpLCAncHJlJyk7Cit0ZXN0SW5kZW50YXRp
b24oJ3Rlc3Q5Jywgc2VsZWN0QWxsLCAnYmxvY2txdW90ZScpOworCis8L3NjcmlwdD4KKzwvYm9k
eT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvZm9ybWF0
LWJsb2NrLXRhYmxlLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0
aW5nL2V4ZWNDb21tYW5kL2Zvcm1hdC1ibG9jay10YWJsZS1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL2Zvcm1hdC1ibG9jay10YWJs
ZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTI0IEBACisKK0Zvcm1hdHRp
bmc6Cit8ICIKKyIKK3wgPHRhYmxlPgorfCAgIDx0Ym9keT4KK3wgICAgIDx0cj4KK3wgICAgICAg
PHRkPgorfCAgICAgICAgICJoZWxsbyIKK3wgICAgICAgPHRkPgorfCAgICAgICAgICJ3b3JsZCIK
K3wgIgorIgorCitieSBwIHlpZWxkczoKK3wgIgorIgorfCA8cD4KK3wgICA8I3NlbGVjdGlvbi1h
bmNob3I+Cit8ICAgPHRhYmxlPgorfCAgICAgPHRib2R5PgorfCAgICAgICA8dHI+Cit8ICAgICAg
ICAgPHRkPgorfCAgICAgICAgICAgImhlbGxvIgorfCAgICAgICAgIDx0ZD4KK3wgICAgICAgICAg
ICJ3b3JsZCIKK3wgICA8I3NlbGVjdGlvbi1mb2N1cz4KK3wgIgorIgorCitGb3JtYXR0aW5nOgor
fCAiCisiCit8IDx0YWJsZT4KK3wgICA8dGJvZHk+Cit8ICAgICA8dHI+Cit8ICAgICAgIDx0ZD4K
K3wgICAgICAgICAiPCNzZWxlY3Rpb24tYW5jaG9yPmhlbGxvPCNzZWxlY3Rpb24tZm9jdXM+Igor
fCAgICAgICA8dGQ+Cit8ICAgICAgICAgIndvcmxkIgorfCAiCisiCisKK2J5IGJsb2NrcXVvdGUg
eWllbGRzOgorfCAiCisiCit8IDx0YWJsZT4KK3wgICA8dGJvZHk+Cit8ICAgICA8dHI+Cit8ICAg
ICAgIDx0ZD4KK3wgICAgICAgICA8YmxvY2txdW90ZT4KK3wgICAgICAgICAgICI8I3NlbGVjdGlv
bi1hbmNob3I+aGVsbG88I3NlbGVjdGlvbi1mb2N1cz4iCit8ICAgICAgIDx0ZD4KK3wgICAgICAg
ICAid29ybGQiCit8ICIKKyIKKworRm9ybWF0dGluZzoKK3wgIgorIgorfCA8dGFibGU+Cit8ICAg
PHRib2R5PgorfCAgICAgPHRyPgorfCAgICAgICA8dGQ+Cit8ICAgICAgICAgPHA+Cit8ICAgICAg
ICAgICAiPCNzZWxlY3Rpb24tYW5jaG9yPmhlbGxvIgorfCAgICAgICAgIDxkaXY+Cit8ICAgICAg
ICAgICAid29ybGQ8I3NlbGVjdGlvbi1mb2N1cz4iCit8ICAgICAgIDx0ZD4KK3wgICAgICAgICAi
V2ViS2l0IgorfCAiCisiCisKK2J5IGgzIHlpZWxkczoKK3wgIgorIgorfCA8dGFibGU+Cit8ICAg
PHRib2R5PgorfCAgICAgPHRyPgorfCAgICAgICA8dGQ+Cit8ICAgICAgICAgPGgzPgorfCAgICAg
ICAgICAgIjwjc2VsZWN0aW9uLWFuY2hvcj5oZWxsbyIKK3wgICAgICAgICAgIDxicj4KK3wgICAg
ICAgICAgICJ3b3JsZDwjc2VsZWN0aW9uLWZvY3VzPiIKK3wgICAgICAgPHRkPgorfCAgICAgICAg
ICJXZWJLaXQiCit8ICIKKyIKKworRm9ybWF0dGluZzoKK3wgIgorIgorfCA8dGFibGU+Cit8ICAg
PHRib2R5PgorfCAgICAgPHRyPgorfCAgICAgICA8dGQ+Cit8ICAgICAgICAgPHVsPgorfCAgICAg
ICAgICAgPGxpPgorfCAgICAgICAgICAgICAiPCNzZWxlY3Rpb24tYW5jaG9yPmhlbGxvIgorfCAg
ICAgICAgICAgPGxpPgorfCAgICAgICAgICAgICAid29ybGQ8I3NlbGVjdGlvbi1mb2N1cz4iCit8
ICAgICAgIDx0ZD4KK3wgICAgICAgICAiV2ViS2l0IgorfCAiCisiCisKK2J5IGFkZHJlc3MgeWll
bGRzOgorfCAiCisiCit8IDx0YWJsZT4KK3wgICA8dGJvZHk+Cit8ICAgICA8dHI+Cit8ICAgICAg
IDx0ZD4KK3wgICAgICAgICA8YWRkcmVzcz4KK3wgICAgICAgICAgIDx1bD4KK3wgICAgICAgICAg
ICAgPGxpPgorfCAgICAgICAgICAgICAgICI8I3NlbGVjdGlvbi1hbmNob3I+aGVsbG8iCit8ICAg
ICAgICAgICA8dWw+Cit8ICAgICAgICAgICAgIDxsaT4KK3wgICAgICAgICAgICAgICAid29ybGQ8
I3NlbGVjdGlvbi1mb2N1cz4iCit8ICAgICAgIDx0ZD4KK3wgICAgICAgICAiV2ViS2l0IgorfCAi
CisiCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL2Zvcm1hdC1ibG9jay10
YWJsZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQv
Zm9ybWF0LWJsb2NrLXRhYmxlLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9lZGl0
aW5nL2V4ZWNDb21tYW5kL2Zvcm1hdC1ibG9jay10YWJsZS5odG1sCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDQyIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGJvZHk+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vcmVzb3VyY2VzL2R1bXAtYXMtbWFya3VwLmpzIj48L3NjcmlwdD4KKzxkaXYgaWQ9
InRlc3QwIiBjb250ZW50ZWRpdGFibGU+Cis8dGFibGU+PHRyPjx0ZD5oZWxsbzwvdGQ+PHRkPndv
cmxkPC90ZD48L3RyPjwvdGFibGU+Cis8L2Rpdj4KKzxkaXYgaWQ9InRlc3QxIiBjb250ZW50ZWRp
dGFibGU+Cis8dGFibGU+PHRyPjx0ZD5oZWxsbzwvdGQ+PHRkPndvcmxkPC90ZD48L3RyPjwvdGFi
bGU+Cis8L2Rpdj4KKzxkaXYgaWQ9InRlc3QyIiBjb250ZW50ZWRpdGFibGU+Cis8dGFibGU+PHRy
Pjx0ZD48cD5oZWxsbzwvcD48ZGl2PndvcmxkPC9kaXY+PC90ZD48dGQ+V2ViS2l0PC90ZD48L3Ry
PjwvdGFibGU+Cis8L2Rpdj4KKzxkaXYgaWQ9InRlc3QzIiBjb250ZW50ZWRpdGFibGU+Cis8dGFi
bGU+PHRyPjx0ZD48dWw+PGxpPmhlbGxvPC9saT48bGk+d29ybGQ8L2xpPjwvdWw+PC90ZD48dGQ+
V2ViS2l0PC90ZD48L3RyPjwvdGFibGU+Cis8L2Rpdj4KKzxzY3JpcHQ+CisKK2Z1bmN0aW9uIHRl
c3RJbmRlbnRhdGlvbihjb250YWluZXJJZCwgc2VsZWN0b3IsIHZhbHVlKSB7CisgICAgdmFyIGNv
bnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGNvbnRhaW5lcklkKTsKKyAgICBzZWxl
Y3Rvcihjb250YWluZXIpOworICAgIE1hcmt1cC5kdW1wKGNvbnRhaW5lciwgJ0Zvcm1hdHRpbmcn
KTsKKyAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnRm9ybWF0QmxvY2snLCBmYWxzZSwgdmFsdWUp
OworICAgIE1hcmt1cC5kdW1wKGNvbnRhaW5lciwgJ2J5ICcgKyB2YWx1ZSArICcgeWllbGRzJyk7
Cit9CisKK2Z1bmN0aW9uIHNlbGVjdEFsbChjb250YWluZXIpIHsKKyAgICB3aW5kb3cuZ2V0U2Vs
ZWN0aW9uKCkuc2VsZWN0QWxsQ2hpbGRyZW4oY29udGFpbmVyKTsKK30KKworZnVuY3Rpb24gc2Vs
ZWN0Rmlyc3RDZWxsKGNvbnRhaW5lcikgeworICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5zZWxl
Y3RBbGxDaGlsZHJlbihjb250YWluZXIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3RkJylbMF0pOwor
fQorCit0ZXN0SW5kZW50YXRpb24oJ3Rlc3QwJywgc2VsZWN0QWxsLCAncCcpOwordGVzdEluZGVu
dGF0aW9uKCd0ZXN0MScsIHNlbGVjdEZpcnN0Q2VsbCwgJ2Jsb2NrcXVvdGUnKTsKK3Rlc3RJbmRl
bnRhdGlvbigndGVzdDInLCBzZWxlY3RGaXJzdENlbGwsICdoMycpOwordGVzdEluZGVudGF0aW9u
KCd0ZXN0MycsIHNlbGVjdEZpcnN0Q2VsbCwgJ2FkZHJlc3MnKTsKKworPC9zY3JpcHQ+Cis8L2Jv
ZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL2Zvcm1h
dC1ibG9jay13aXRoLWJyYWNlcy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZWRpdGluZy9leGVjQ29tbWFuZC9mb3JtYXQtYmxvY2std2l0aC1icmFjZXMtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiA2OTM1NykKKysrIExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQv
Zm9ybWF0LWJsb2NrLXdpdGgtYnJhY2VzLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAt
MTYsNSArMTYsNiBAQCBGb3JtYXQgTWUKIAogQWZ0ZXIgRm9ybWF0QmxvY2sgd2l0aCA8aDE+Ogog
fCA8aDE+Ci18ICAgIjwjc2VsZWN0aW9uLWNhcmV0PkZvcm1hdCBNZSIKLXwgICA8YnI+Cit8ICAg
IgorPCNzZWxlY3Rpb24tY2FyZXQ+Rm9ybWF0IE1lCisiCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70208</attachid>
            <date>2010-10-08 01:24:30 -0700</date>
            <delta_ts>2010-10-13 01:10:21 -0700</delta_ts>
            <desc>added minor fix to ApplyBlockElementCommand</desc>
            <filename>bug-19795-20101008012428.patch</filename>
            <type>text/plain</type>
            <size>29340</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2OTM3NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzMgQEAKKzIwMTAtMTAtMDcgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgZXhl
Y0NvbW1hbmQgRm9ybWF0QmxvY2sgY3JlYXRlcyBsb3RzIG9mIGJsb2NrcXVvdGVzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTc5NQorCisgICAgICAg
IFRoZSBidWcgd2FzIGNhdXNlZCBieSBXZWJLaXQncyBub3QgcmV1c2luZyB0aGUgYmxvY2sgbm9k
ZSBhZGRlZCBieSBwcmV2aW91cyBpdGVyYXRpb24KKyAgICAgICAgYW5kIGl0cyBpbnNlcnRpbmcg
YmxvY2sgbm9kZSBhdCB3cm9uZyBwbGFjZXMuCisKKyAgICAgICAgRml4ZWQgdGhlIGJ1ZyBieSBy
ZXdyaXRpbmcgRm9ybWF0QmxvY2tDb21tYW5kOjpmb3JtYXRSYW5nZS4gIE5ldyBjb2RlIHJlc2Vt
YmxlcyB0aGF0IG9mCisgICAgICAgIEluZGVudE91dGRlbnRDb21tYW5kOjppbmRlbnRJbnRvQmxv
Y2txdW90ZS4gIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIGlzIHRoYXQgZm9ybWF0UmFuZ2UK
KyAgICAgICAgYXZvaWRzIHRoZSBleGlzdGluZyBibG9jayBlbGVtZW50cyB3aGVuIHJlcGxhY2lu
ZyBibG9ja3MgYW5kIGl0IGFsc28gYWRkcyBhIHBsYWNlaG9sZGVyCisgICAgICAgIHdoZW4gcmVt
b3ZpbmcgdGhlIGV4aXN0aW5nIGJsb2NrIGNhdXNlZCBwYXJhZ3JhcGhzIHRvIGNvbGxhcHNlLgor
CisgICAgICAgIFRlc3RzOiBlZGl0aW5nL2V4ZWNDb21tYW5kL2Zvcm1hdC1ibG9jay1tdWx0aXBs
ZS1wYXJhZ3JhcGhzLmh0bWwKKyAgICAgICAgICAgICAgIGVkaXRpbmcvZXhlY0NvbW1hbmQvZm9y
bWF0LWJsb2NrLXRhYmxlLmh0bWwKKworICAgICAgICAqIGVkaXRpbmcvRWRpdG9yQ29tbWFuZC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpleGVjdXRlRm9ybWF0QmxvY2spOgorICAgICAgICAqIGVk
aXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1hdEJs
b2NrQ29tbWFuZDo6Zm9ybWF0UmFuZ2UpOiBSZXdyaXR0ZW47IHNlZSBhYm92ZS4KKyAgICAgICAg
KFdlYkNvcmU6OkZvcm1hdEJsb2NrQ29tbWFuZDo6aXNFbGVtZW50VG9BcHBseUluRm9ybWF0Qmxv
Y2tDb21tYW5kKTogUmVuYW1lZCBmcm9tIHZhbGlkQmxvY2tFbGVtZW50CisgICAgICAgIGFuZCBt
b3ZlZCBmcm9tIGh0bWxlZGl0aW5nLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkZvcm1hdEJsb2Nr
Q29tbWFuZDo6ZW5jbG9zaW5nQmxvY2tUb1NwbGl0VHJlZVRvKTogQWRkZWQuCisgICAgICAgICog
ZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuaDoKKyAgICAgICAgKiBlZGl0aW5nL1Zpc2libGVQ
b3NpdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjplbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50
KTogQ2hhbmdlZCB0aGUgcmV0dXJuIHR5cGUgdG8gRWxlbWVudCoKKyAgICAgICAgKiBlZGl0aW5n
L1Zpc2libGVQb3NpdGlvbi5oOgorCiAyMDEwLTEwLTA3ICBObydhbSBSb3NlbnRoYWwgIDxub2Ft
LnJvc2VudGhhbEBub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSb2hk
ZSBDaHJpc3RpYW5zZW4uCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvQXBwbHlCbG9ja0VsZW1lbnRD
b21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvQXBwbHlCbG9ja0VsZW1l
bnRDb21tYW5kLmNwcAkocmV2aXNpb24gNjkzNzYpCisrKyBXZWJDb3JlL2VkaXRpbmcvQXBwbHlC
bG9ja0VsZW1lbnRDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDEwICsxMTIsOCBA
QCB2b2lkIEFwcGx5QmxvY2tFbGVtZW50Q29tbWFuZDo6Zm9ybWF0U2VsCiAgICAgVmlzaWJsZVBv
c2l0aW9uIGVuZE9mTGFzdFBhcmFncmFwaCA9IGVuZE9mUGFyYWdyYXBoKGVuZE9mU2VsZWN0aW9u
KTsKIAogICAgIGJvb2wgYXRFbmQgPSBmYWxzZTsKKyAgICBQb3NpdGlvbiBlbmQ7CiAgICAgd2hp
bGUgKGVuZE9mQ3VycmVudFBhcmFncmFwaCAhPSBlbmRBZnRlclNlbGVjdGlvbiAmJiAhYXRFbmQp
IHsKLSAgICAgICAgUG9zaXRpb24gc3RhcnQ7Ci0gICAgICAgIFBvc2l0aW9uIGVuZDsKLQogICAg
ICAgICBpZiAoZW5kT2ZDdXJyZW50UGFyYWdyYXBoID09IGVuZE9mTGFzdFBhcmFncmFwaCkKICAg
ICAgICAgICAgIGF0RW5kID0gdHJ1ZTsKIApJbmRleDogV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNv
bW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNw
cAkocmV2aXNpb24gNjkzNzYpCisrKyBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQzMiw4ICs0MzIsNiBAQCBzdGF0aWMgYm9vbCBleGVjdXRlRm9y
bWF0QmxvY2soRnJhbWUqIGZyCiAgICAgU3RyaW5nIHRhZ05hbWUgPSB2YWx1ZS5sb3dlcigpOwog
ICAgIGlmICh0YWdOYW1lWzBdID09ICc8JyAmJiB0YWdOYW1lW3RhZ05hbWUubGVuZ3RoKCkgLSAx
XSA9PSAnPicpCiAgICAgICAgIHRhZ05hbWUgPSB0YWdOYW1lLnN1YnN0cmluZygxLCB0YWdOYW1l
Lmxlbmd0aCgpIC0gMik7Ci0gICAgaWYgKCF2YWxpZEJsb2NrVGFnKHRhZ05hbWUpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICBFeGNlcHRpb25Db2RlIGVjOwogICAgIFN0cmluZyBsb2Nh
bE5hbWUsIHByZWZpeDsKQEAgLTQ0MSw2ICs0MzksOSBAQCBzdGF0aWMgYm9vbCBleGVjdXRlRm9y
bWF0QmxvY2soRnJhbWUqIGZyCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBRdWFsaWZpZWRO
YW1lIHF1YWxpZmllZFRhZ05hbWUocHJlZml4LCBsb2NhbE5hbWUsIHhodG1sTmFtZXNwYWNlVVJJ
KTsKIAorICAgIGlmICghRm9ybWF0QmxvY2tDb21tYW5kOjppc0VsZW1lbnRUb0FwcGx5SW5Gb3Jt
YXRCbG9ja0NvbW1hbmQocXVhbGlmaWVkVGFnTmFtZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KwogICAgIGFwcGx5Q29tbWFuZChGb3JtYXRCbG9ja0NvbW1hbmQ6OmNyZWF0ZShmcmFtZS0+ZG9j
dW1lbnQoKSwgcXVhbGlmaWVkVGFnTmFtZSkpOwogICAgIHJldHVybiB0cnVlOwogfQpJbmRleDog
V2ViQ29yZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHAJKHJldmlzaW9uIDY5Mzc2KQorKysg
V2ViQ29yZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQxLDQxICs0MSw4NCBAQCBGb3JtYXRCbG9ja0NvbW1hbmQ6OkZvcm1hdEJsb2NrQ29tbWFuZChE
CiB7CiB9CiAKLXZvaWQgRm9ybWF0QmxvY2tDb21tYW5kOjpmb3JtYXRSYW5nZShjb25zdCBQb3Np
dGlvbiYsIGNvbnN0IFBvc2l0aW9uJiBlbmQsIFJlZlB0cjxFbGVtZW50PiYpCit2b2lkIEZvcm1h
dEJsb2NrQ29tbWFuZDo6Zm9ybWF0UmFuZ2UoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQ
b3NpdGlvbiYgZW5kLCBSZWZQdHI8RWxlbWVudD4mIGJsb2NrTm9kZSkKIHsKLSAgICBzZXRFbmRp
bmdTZWxlY3Rpb24oVmlzaWJsZVBvc2l0aW9uKGVuZCkpOworICAgIE5vZGUqIG5vZGVUb1NwbGl0
VG8gPSBlbmNsb3NpbmdCbG9ja1RvU3BsaXRUcmVlVG8oc3RhcnQubm9kZSgpKTsKKyAgICBSZWZQ
dHI8Tm9kZT4gb3V0ZXJCbG9jayA9IChzdGFydC5ub2RlKCkgPT0gbm9kZVRvU3BsaXRUbykgPyBz
dGFydC5ub2RlKCkgOiBzcGxpdFRyZWVUb05vZGUoc3RhcnQubm9kZSgpLCBub2RlVG9TcGxpdFRv
KTsKKyAgICBSZWZQdHI8Tm9kZT4gbm9kZUFmdGVySW5zZXJ0aW9uUG9zaXRpb24gPSBvdXRlckJs
b2NrOworCisgICAgRWxlbWVudCogcmVmTm9kZSA9IGVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQo
ZW5kKTsKKyAgICBFbGVtZW50KiByb290ID0gZWRpdGFibGVSb290Rm9yUG9zaXRpb24oc3RhcnQp
OworICAgIGlmIChpc0VsZW1lbnRUb0FwcGx5SW5Gb3JtYXRCbG9ja0NvbW1hbmQocmVmTm9kZS0+
dGFnUU5hbWUoKSkgJiYgc3RhcnQgPT0gc3RhcnRPZkJsb2NrKHN0YXJ0KSAmJiBlbmQgPT0gZW5k
T2ZCbG9jayhlbmQpCisgICAgICAgICYmIHJlZk5vZGUgIT0gcm9vdCAmJiAhcm9vdC0+aXNEZXNj
ZW5kYW50T2YocmVmTm9kZSkpIHsKKyAgICAgICAgLy8gQWxyZWFkeSBpbiBhIGJsb2NrIGVsZW1l
bnQgdGhhdCBvbmx5IGNvbnRhaW5zIHRoZSBjdXJyZW50IHBhcmFncmFwaAorICAgICAgICBpZiAo
cmVmTm9kZS0+aGFzVGFnTmFtZSh0YWdOYW1lKCkpKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICBub2RlQWZ0ZXJJbnNlcnRpb25Qb3NpdGlvbiA9IHJlZk5vZGU7CisgICAgfQorCisgICAg
aWYgKCFibG9ja05vZGUpIHsKKyAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IGJsb2NrcXVvdGUgYW5k
IGluc2VydCBpdCBhcyBhIGNoaWxkIG9mIHRoZSByb290IGVkaXRhYmxlIGVsZW1lbnQuIFdlIGFj
Y29tcGxpc2gKKyAgICAgICAgLy8gdGhpcyBieSBzcGxpdHRpbmcgYWxsIHBhcmVudHMgb2YgdGhl
IGN1cnJlbnQgcGFyYWdyYXBoIHVwIHRvIHRoYXQgcG9pbnQuCisgICAgICAgIGJsb2NrTm9kZSA9
IGNyZWF0ZUJsb2NrRWxlbWVudCgpOworICAgICAgICBpbnNlcnROb2RlQmVmb3JlKGJsb2NrTm9k
ZSwgbm9kZUFmdGVySW5zZXJ0aW9uUG9zaXRpb24pOworICAgIH0KKworICAgIFBvc2l0aW9uIGxh
c3RQYXJhZ3JhcGhJbkJsb2NrTm9kZSA9IGxhc3RQb3NpdGlvbkluTm9kZShibG9ja05vZGUuZ2V0
KCkpOworICAgIGJvb2wgd2FzRW5kT2ZQYXJhZ3JhcGggPSBpc0VuZE9mUGFyYWdyYXBoKGxhc3RQ
YXJhZ3JhcGhJbkJsb2NrTm9kZSk7CisKKyAgICBtb3ZlUGFyYWdyYXBoV2l0aENsb25lcyhzdGFy
dCwgZW5kLCBibG9ja05vZGUuZ2V0KCksIG91dGVyQmxvY2suZ2V0KCkpOwogCi0gICAgTm9kZSog
cmVmTm9kZSA9IGVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoZW5kaW5nU2VsZWN0aW9uKCkudmlz
aWJsZVN0YXJ0KCkpOwotICAgIGlmIChyZWZOb2RlLT5oYXNUYWdOYW1lKHRhZ05hbWUoKSkpCi0g
ICAgICAgIC8vIFdlJ3JlIGFscmVhZHkgaW4gYSBibG9jayB3aXRoIHRoZSBmb3JtYXQgd2Ugd2Fu
dCwgc28gd2UgZG9uJ3QgaGF2ZSB0byBkbyBhbnl0aGluZwotICAgICAgICByZXR1cm47Ci0KLSAg
ICBWaXNpYmxlUG9zaXRpb24gcGFyYWdyYXBoU3RhcnQgPSBzdGFydE9mUGFyYWdyYXBoKGVuZCk7
Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHBhcmFncmFwaEVuZCA9IGVuZE9mUGFyYWdyYXBoKGVuZCk7
Ci0gICAgVmlzaWJsZVBvc2l0aW9uIGJsb2NrU3RhcnQgPSBzdGFydE9mQmxvY2soZW5kaW5nU2Vs
ZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkpOwotICAgIFZpc2libGVQb3NpdGlvbiBibG9ja0VuZCA9
IGVuZE9mQmxvY2soZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkpOwotICAgIFJlZlB0
cjxFbGVtZW50PiBibG9ja05vZGUgPSBjcmVhdGVCbG9ja0VsZW1lbnQoKTsKLSAgICBSZWZQdHI8
RWxlbWVudD4gcGxhY2Vob2xkZXIgPSBjcmVhdGVCcmVha0VsZW1lbnQoZG9jdW1lbnQoKSk7Ci0K
LSAgICBOb2RlKiByb290ID0gZW5kaW5nU2VsZWN0aW9uKCkuc3RhcnQoKS5ub2RlKCktPnJvb3RF
ZGl0YWJsZUVsZW1lbnQoKTsKLSAgICBpZiAodmFsaWRCbG9ja1RhZyhyZWZOb2RlLT5ub2RlTmFt
ZSgpLmxvd2VyKCkpICYmIAotICAgICAgICBwYXJhZ3JhcGhTdGFydCA9PSBibG9ja1N0YXJ0ICYm
IHBhcmFncmFwaEVuZCA9PSBibG9ja0VuZCAmJiAKLSAgICAgICAgcmVmTm9kZSAhPSByb290ICYm
ICFyb290LT5pc0Rlc2NlbmRhbnRPZihyZWZOb2RlKSkKLSAgICAgICAgLy8gQWxyZWFkeSBpbiBh
IHZhbGlkIGJsb2NrIHRhZyB0aGF0IG9ubHkgY29udGFpbnMgdGhlIGN1cnJlbnQgcGFyYWdyYXBo
LCBzbyB3ZSBjYW4gc3dhcCB3aXRoIHRoZSBuZXcgdGFnCi0gICAgICAgIGluc2VydE5vZGVCZWZv
cmUoYmxvY2tOb2RlLCByZWZOb2RlKTsKLSAgICBlbHNlIHsKLSAgICAgICAgLy8gQXZvaWQgaW5z
ZXJ0aW5nIGluc2lkZSBpbmxpbmUgZWxlbWVudHMgdGhhdCBzdXJyb3VuZCBwYXJhZ3JhcGhTdGFy
dCB3aXRoIHVwc3RyZWFtKCkuCi0gICAgICAgIC8vIFRoaXMgaXMgb25seSB0byBhdm9pZCBjcmVh
dGluZyBibG9hdGVkIG1hcmt1cC4KLSAgICAgICAgaW5zZXJ0Tm9kZUF0KGJsb2NrTm9kZSwgcGFy
YWdyYXBoU3RhcnQuZGVlcEVxdWl2YWxlbnQoKS51cHN0cmVhbSgpKTsKKyAgICBpZiAod2FzRW5k
T2ZQYXJhZ3JhcGggJiYgIWlzRW5kT2ZQYXJhZ3JhcGgobGFzdFBhcmFncmFwaEluQmxvY2tOb2Rl
KSAmJiAhaXNTdGFydE9mUGFyYWdyYXBoKGxhc3RQYXJhZ3JhcGhJbkJsb2NrTm9kZSkpCisgICAg
ICAgIGluc2VydEJsb2NrUGxhY2Vob2xkZXIobGFzdFBhcmFncmFwaEluQmxvY2tOb2RlKTsKK30K
KworLy8gRklYTUU6IFdlIHNob3VsZCBjb25zaWRlciBtZXJpbmcgdGhpcyBmdW5jdGlvbiB3aXRo
IGlzRWxlbWVudEZvckZvcm1hdEJsb2NrQ29tbWFuZCBpbiBFZGl0b3IuY3BwCisvLyBDaGVja3Mg
aWYgYSB0YWcgbmFtZSBpcyB2YWxpZCBmb3IgZXhlY0NvbW1hbmQoJ0Zvcm1hdEJsb2NrJykuCiti
b29sIEZvcm1hdEJsb2NrQ29tbWFuZDo6aXNFbGVtZW50VG9BcHBseUluRm9ybWF0QmxvY2tDb21t
YW5kKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19M
T0NBTChIYXNoU2V0PFF1YWxpZmllZE5hbWU+LCBibG9ja1RhZ3MsICgpKTsKKyAgICBpZiAoYmxv
Y2tUYWdzLmlzRW1wdHkoKSkgeworICAgICAgICBibG9ja1RhZ3MuYWRkKGFkZHJlc3NUYWcpOwor
ICAgICAgICBibG9ja1RhZ3MuYWRkKGFydGljbGVUYWcpOworICAgICAgICBibG9ja1RhZ3MuYWRk
KGFzaWRlVGFnKTsKKyAgICAgICAgYmxvY2tUYWdzLmFkZChibG9ja3F1b3RlVGFnKTsKKyAgICAg
ICAgYmxvY2tUYWdzLmFkZChkZFRhZyk7CisgICAgICAgIGJsb2NrVGFncy5hZGQoZGl2VGFnKTsK
KyAgICAgICAgYmxvY2tUYWdzLmFkZChkbFRhZyk7CisgICAgICAgIGJsb2NrVGFncy5hZGQoZHRU
YWcpOworICAgICAgICBibG9ja1RhZ3MuYWRkKGZvb3RlclRhZyk7CisgICAgICAgIGJsb2NrVGFn
cy5hZGQoaDFUYWcpOworICAgICAgICBibG9ja1RhZ3MuYWRkKGgyVGFnKTsKKyAgICAgICAgYmxv
Y2tUYWdzLmFkZChoM1RhZyk7CisgICAgICAgIGJsb2NrVGFncy5hZGQoaDRUYWcpOworICAgICAg
ICBibG9ja1RhZ3MuYWRkKGg1VGFnKTsKKyAgICAgICAgYmxvY2tUYWdzLmFkZChoNlRhZyk7Cisg
ICAgICAgIGJsb2NrVGFncy5hZGQoaGVhZGVyVGFnKTsKKyAgICAgICAgYmxvY2tUYWdzLmFkZCho
Z3JvdXBUYWcpOworICAgICAgICBibG9ja1RhZ3MuYWRkKG5hdlRhZyk7CisgICAgICAgIGJsb2Nr
VGFncy5hZGQocFRhZyk7CisgICAgICAgIGJsb2NrVGFncy5hZGQocHJlVGFnKTsKKyAgICAgICAg
YmxvY2tUYWdzLmFkZChzZWN0aW9uVGFnKTsKICAgICB9Ci0gICAgYXBwZW5kTm9kZShwbGFjZWhv
bGRlciwgYmxvY2tOb2RlKTsKKyAgICByZXR1cm4gYmxvY2tUYWdzLmNvbnRhaW5zKHRhZ05hbWUp
OworfQogCi0gICAgVmlzaWJsZVBvc2l0aW9uIGRlc3RpbmF0aW9uKFBvc2l0aW9uKHBsYWNlaG9s
ZGVyLmdldCgpLCAwKSk7Ci0gICAgaWYgKHBhcmFncmFwaFN0YXJ0ID09IHBhcmFncmFwaEVuZCAm
JiAhbGluZUJyZWFrRXhpc3RzQXRWaXNpYmxlUG9zaXRpb24ocGFyYWdyYXBoU3RhcnQpKSB7Ci0g
ICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihkZXN0aW5hdGlvbik7Ci0gICAgICAgIHJldHVybjsK
K05vZGUqIEZvcm1hdEJsb2NrQ29tbWFuZDo6ZW5jbG9zaW5nQmxvY2tUb1NwbGl0VHJlZVRvKE5v
ZGUqIHN0YXJ0Tm9kZSkgY29uc3QKK3sKKyAgICBOb2RlKiBsYXN0QmxvY2sgPSBzdGFydE5vZGU7
CisgICAgZm9yIChOb2RlKiBuID0gc3RhcnROb2RlOyBuOyBuID0gbi0+cGFyZW50Tm9kZSgpKSB7
CisgICAgICAgIGlmICghbi0+aXNDb250ZW50RWRpdGFibGUoKSkKKyAgICAgICAgICAgIHJldHVy
biBsYXN0QmxvY2s7CisgICAgICAgIGlmIChpc1RhYmxlQ2VsbChuKSB8fCBuLT5oYXNUYWdOYW1l
KGJvZHlUYWcpIHx8ICFuLT5wYXJlbnROb2RlKCkgfHwgIW4tPnBhcmVudE5vZGUoKS0+aXNDb250
ZW50RWRpdGFibGUoKQorICAgICAgICAgICAgfHwgKG4tPmlzRWxlbWVudE5vZGUoKSAmJiBpc0Vs
ZW1lbnRUb0FwcGx5SW5Gb3JtYXRCbG9ja0NvbW1hbmQoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4p
LT50YWdRTmFtZSgpKSkpCisgICAgICAgICAgICByZXR1cm4gbjsKKyAgICAgICAgaWYgKGlzQmxv
Y2sobikpCisgICAgICAgICAgICBsYXN0QmxvY2sgPSBuOworICAgICAgICBpZiAoaXNMaXN0RWxl
bWVudChuKSkKKyAgICAgICAgICAgIHJldHVybiBuLT5wYXJlbnROb2RlKCktPmlzQ29udGVudEVk
aXRhYmxlKCkgPyBuLT5wYXJlbnROb2RlKCkgOiBuOwogICAgIH0KLSAgICBtb3ZlUGFyYWdyYXBo
KHBhcmFncmFwaFN0YXJ0LCBwYXJhZ3JhcGhFbmQsIGRlc3RpbmF0aW9uLCB0cnVlLCBmYWxzZSk7
CisgICAgcmV0dXJuIGxhc3RCbG9jazsKIH0KIAogfQpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0Zv
cm1hdEJsb2NrQ29tbWFuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9Gb3JtYXRC
bG9ja0NvbW1hbmQuaAkocmV2aXNpb24gNjkzNzYpCisrKyBXZWJDb3JlL2VkaXRpbmcvRm9ybWF0
QmxvY2tDb21tYW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDExICszOCwxNCBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRm9ybWF0QmxvY2tDb21tYW5kKGRvY3VtZW50
LCB0YWdOYW1lKSk7CiAgICAgfQogCisgICAgc3RhdGljIGJvb2wgaXNFbGVtZW50VG9BcHBseUlu
Rm9ybWF0QmxvY2tDb21tYW5kKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUpOworCiBwcml2
YXRlOgogICAgIEZvcm1hdEJsb2NrQ29tbWFuZChEb2N1bWVudCosIGNvbnN0IFF1YWxpZmllZE5h
bWUmIHRhZ05hbWUpOwogCi0gICAgdmlydHVhbCB2b2lkIGZvcm1hdFJhbmdlKGNvbnN0IFBvc2l0
aW9uJiwgY29uc3QgUG9zaXRpb24mLCBSZWZQdHI8RWxlbWVudD4mKTsKLSAgICB2aXJ0dWFsIEVk
aXRBY3Rpb24gZWRpdGluZ0FjdGlvbigpIGNvbnN0IHsgcmV0dXJuIEVkaXRBY3Rpb25Gb3JtYXRC
bG9jazsgfQorICAgIHZvaWQgZm9ybWF0UmFuZ2UoY29uc3QgUG9zaXRpb24mLCBjb25zdCBQb3Np
dGlvbiYsIFJlZlB0cjxFbGVtZW50PiYpOworICAgIE5vZGUqIGVuY2xvc2luZ0Jsb2NrVG9TcGxp
dFRyZWVUbyhOb2RlKiBzdGFydE5vZGUpIGNvbnN0OworICAgIEVkaXRBY3Rpb24gZWRpdGluZ0Fj
dGlvbigpIGNvbnN0IHsgcmV0dXJuIEVkaXRBY3Rpb25Gb3JtYXRCbG9jazsgfQogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAJ
KHJldmlzaW9uIDY5Mzc2KQorKysgV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTYzNCw3ICs2MzQsNyBAQCBib29sIHNldEVuZChSYW5nZSAqciwg
Y29uc3QgVmlzaWJsZVBvc2l0CiAgICAgcmV0dXJuIGNvZGUgPT0gMDsKIH0KIAotTm9kZSAqZW5j
bG9zaW5nQmxvY2tGbG93RWxlbWVudChjb25zdCBWaXNpYmxlUG9zaXRpb24gJnZpc2libGVQb3Np
dGlvbikKK0VsZW1lbnQqIGVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoY29uc3QgVmlzaWJsZVBv
c2l0aW9uICZ2aXNpYmxlUG9zaXRpb24pCiB7CiAgICAgaWYgKHZpc2libGVQb3NpdGlvbi5pc051
bGwoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvVmlzaWJs
ZVBvc2l0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlv
bi5oCShyZXZpc2lvbiA2OTM3NikKKysrIFdlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24u
aAkod29ya2luZyBjb3B5KQpAQCAtMTM2LDcgKzEzNiw3IEBAIGJvb2wgc2V0RW5kKFJhbmdlKiwg
Y29uc3QgVmlzaWJsZVBvc2l0aW8KIFZpc2libGVQb3NpdGlvbiBzdGFydFZpc2libGVQb3NpdGlv
bihjb25zdCBSYW5nZSosIEVBZmZpbml0eSk7CiBWaXNpYmxlUG9zaXRpb24gZW5kVmlzaWJsZVBv
c2l0aW9uKGNvbnN0IFJhbmdlKiwgRUFmZmluaXR5KTsKIAotTm9kZSAqZW5jbG9zaW5nQmxvY2tG
bG93RWxlbWVudChjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKK0VsZW1lbnQqIGVuY2xvc2luZ0Js
b2NrRmxvd0VsZW1lbnQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CiAKIGJvb2wgaXNGaXJzdFZp
c2libGVQb3NpdGlvbkluTm9kZShjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBjb25zdCBOb2RlKik7
CiBib29sIGlzTGFzdFZpc2libGVQb3NpdGlvbkluTm9kZShjb25zdCBWaXNpYmxlUG9zaXRpb24m
LCBjb25zdCBOb2RlKik7CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAJKHJldmlzaW9uIDY5
Mzc2KQorKysgV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDY1LDM5ICs0NjUsNiBAQCBib29sIGlzU3BlY2lhbEVsZW1lbnQoY29uc3QgTm9kZSAqbikK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLS8vIENoZWNrcyBpZiBhIHN0cmluZyBpcyBhIHZhbGlk
IHRhZyBmb3IgdGhlIEZvcm1hdEJsb2NrQ29tbWFuZCBmdW5jdGlvbiBvZiBleGVjQ29tbWFuZC4g
RXhwZWN0cyBsb3dlciBjYXNlIHN0cmluZ3MuCi1ib29sIHZhbGlkQmxvY2tUYWcoY29uc3QgQXRv
bWljU3RyaW5nJiBibG9ja1RhZykKLXsKLSAgICBpZiAoYmxvY2tUYWcuaXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8QXRv
bWljU3RyaW5nPiwgYmxvY2tUYWdzLCAoKSk7Ci0gICAgaWYgKGJsb2NrVGFncy5pc0VtcHR5KCkp
IHsKLSAgICAgICAgYmxvY2tUYWdzLmFkZChhZGRyZXNzVGFnLmxvY2FsTmFtZSgpKTsKLSAgICAg
ICAgYmxvY2tUYWdzLmFkZChhcnRpY2xlVGFnLmxvY2FsTmFtZSgpKTsKLSAgICAgICAgYmxvY2tU
YWdzLmFkZChhc2lkZVRhZy5sb2NhbE5hbWUoKSk7Ci0gICAgICAgIGJsb2NrVGFncy5hZGQoYmxv
Y2txdW90ZVRhZy5sb2NhbE5hbWUoKSk7Ci0gICAgICAgIGJsb2NrVGFncy5hZGQoZGRUYWcubG9j
YWxOYW1lKCkpOwotICAgICAgICBibG9ja1RhZ3MuYWRkKGRpdlRhZy5sb2NhbE5hbWUoKSk7Ci0g
ICAgICAgIGJsb2NrVGFncy5hZGQoZGxUYWcubG9jYWxOYW1lKCkpOwotICAgICAgICBibG9ja1Rh
Z3MuYWRkKGR0VGFnLmxvY2FsTmFtZSgpKTsKLSAgICAgICAgYmxvY2tUYWdzLmFkZChmb290ZXJU
YWcubG9jYWxOYW1lKCkpOwotICAgICAgICBibG9ja1RhZ3MuYWRkKGgxVGFnLmxvY2FsTmFtZSgp
KTsKLSAgICAgICAgYmxvY2tUYWdzLmFkZChoMlRhZy5sb2NhbE5hbWUoKSk7Ci0gICAgICAgIGJs
b2NrVGFncy5hZGQoaDNUYWcubG9jYWxOYW1lKCkpOwotICAgICAgICBibG9ja1RhZ3MuYWRkKGg0
VGFnLmxvY2FsTmFtZSgpKTsKLSAgICAgICAgYmxvY2tUYWdzLmFkZChoNVRhZy5sb2NhbE5hbWUo
KSk7Ci0gICAgICAgIGJsb2NrVGFncy5hZGQoaDZUYWcubG9jYWxOYW1lKCkpOwotICAgICAgICBi
bG9ja1RhZ3MuYWRkKGhlYWRlclRhZy5sb2NhbE5hbWUoKSk7Ci0gICAgICAgIGJsb2NrVGFncy5h
ZGQoaGdyb3VwVGFnLmxvY2FsTmFtZSgpKTsKLSAgICAgICAgYmxvY2tUYWdzLmFkZChuYXZUYWcu
bG9jYWxOYW1lKCkpOwotICAgICAgICBibG9ja1RhZ3MuYWRkKHBUYWcubG9jYWxOYW1lKCkpOwot
ICAgICAgICBibG9ja1RhZ3MuYWRkKHByZVRhZy5sb2NhbE5hbWUoKSk7Ci0gICAgICAgIGJsb2Nr
VGFncy5hZGQoc2VjdGlvblRhZy5sb2NhbE5hbWUoKSk7Ci0gICAgfQotICAgIHJldHVybiBibG9j
a1RhZ3MuY29udGFpbnMoYmxvY2tUYWcpOwotfQotCiBzdGF0aWMgTm9kZSogZmlyc3RJblNwZWNp
YWxFbGVtZW50KGNvbnN0IFBvc2l0aW9uJiBwb3MpCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgYmVn
aW5zIGF0IHBvcy5ub2RlKCksIHdoaWNoIGRvZXNuJ3QgbmVjZXNzYXJpbHkgY29udGFpbiBwb3Mg
KHN1cHBvc2UgcG9zIHdhcyBbaW1nLCAwXSkuICBTZWUgPHJkYXI6Ly9wcm9ibGVtLzUwMjc3MDI+
LgpJbmRleDogV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmgJKHJldmlzaW9uIDY5Mzc2KQorKysgV2ViQ29yZS9l
ZGl0aW5nL2h0bWxlZGl0aW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyOCw4ICsyMjgsNiBAQCBW
aXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbkZvclBhcmFncmFwaEl0CiAgICAgCiBTdHJpbmcgc3Ry
aW5nV2l0aFJlYmFsYW5jZWRXaGl0ZXNwYWNlKGNvbnN0IFN0cmluZyYsIGJvb2wsIGJvb2wpOwog
Y29uc3QgU3RyaW5nJiBub25CcmVha2luZ1NwYWNlU3RyaW5nKCk7Ci1ib29sIHZhbGlkQmxvY2tU
YWcoY29uc3QgQXRvbWljU3RyaW5nJik7Ci0gICAgCiAKIH0KIApJbmRleDogTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24g
NjkzNzYpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwyMSBAQAorMjAxMC0xMC0wNyAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBleGVjQ29tbWFu
ZCBGb3JtYXRCbG9jayBjcmVhdGVzIGxvdHMgb2YgYmxvY2txdW90ZXMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5Nzk1CisKKyAgICAgICAgQWRkZWQg
dGVzdHMgdG8gZW5zdXJlIFdlYktpdCBkb2VzIG5vdCBhZGQgbXVsdGlwbGUgYmxvY2sgZWxlbWVu
dHMgd2hlbiBhcHBseWluZyBibG9jayBlbGVtZW50IHRvCisgICAgICAgIG11bHRpcGxlIHBhcmFn
cmFwaHMuICBBbHNvIGFkZGVkIGEgdGVzdCB0byBlbnN1cmUgZm9ybWF0QmxvY2sgd29ya3Mgd2l0
aCB0YWJsZXMuCisKKyAgICAgICAgKiBlZGl0aW5nL2V4ZWNDb21tYW5kL2Zvcm1hdC1ibG9jay1l
eHBlY3RlZC50eHQ6IFByZXNlcnZlZCBzcGFuIGFuZCByZW1vdmVkIGVycm9uZW91cyBici4KKyAg
ICAgICAgKiBlZGl0aW5nL2V4ZWNDb21tYW5kL2Zvcm1hdC1ibG9jay1mcm9tLXJhbmdlLXNlbGVj
dGlvbi1leHBlY3RlZC50eHQ6IE1lcmdlZCBkbCdzIGFuZCByZW1vdmVkIGVycm9uZW91cyBici4K
KyAgICAgICAgKiBlZGl0aW5nL2V4ZWNDb21tYW5kL2Zvcm1hdC1ibG9jay1tdWx0aXBsZS1wYXJh
Z3JhcGhzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZWRpdGluZy9leGVjQ29tbWFu
ZC9mb3JtYXQtYmxvY2stbXVsdGlwbGUtcGFyYWdyYXBocy5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBlZGl0aW5nL2V4ZWNDb21tYW5kL2Zvcm1hdC1ibG9jay10YWJsZS1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIGVkaXRpbmcvZXhlY0NvbW1hbmQvZm9ybWF0LWJsb2NrLXRhYmxlLmh0
bWw6IEFkZGVkLgorICAgICAgICAqIGVkaXRpbmcvZXhlY0NvbW1hbmQvZm9ybWF0LWJsb2NrLXdp
dGgtYnJhY2VzLWV4cGVjdGVkLnR4dDogUmVtb3ZlZCBlcnJvbmVvdXMgYnIuCisKIDIwMTAtMTAt
MDcgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCB1
cGRhdGUgRFJUIFdlYkdMIHRlc3QgZXhwZWN0YXRpb25zLgpJbmRleDogTGF5b3V0VGVzdHMvZWRp
dGluZy9leGVjQ29tbWFuZC9mb3JtYXQtYmxvY2stZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvZm9ybWF0LWJsb2NrLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gNjkzNzYpCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL2Zv
cm1hdC1ibG9jay1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDYgQEAg
QWZ0ZXIgRm9ybWF0QmxvY2s6CiAiCiB8IDxwcmU+CiB8ICAgIk1ha2UgUHJlIgotfCAgIDxicj4K
IHwgIgogIgogfCA8YnI+CkBAIC02Miw4ICs2MSw5IEBAIEFmdGVyIEZvcm1hdEJsb2NrOgogfCAg
ICJGb28iCiB8ICAgPGJyPgogfCAgIDxoMT4KLXwgICAgICJNYWtlIGgxIgotfCAgICAgPGJyPgor
fCAgICAgPHNwYW4+Cit8ICAgICAgIGlkPSJpdGVtMiIKK3wgICAgICAgIk1ha2UgaDEiCiB8ICAg
ImJheiIKIHwgIgogIgpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9mb3Jt
YXQtYmxvY2stZnJvbS1yYW5nZS1zZWxlY3Rpb24tZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvZm9ybWF0LWJsb2NrLWZyb20tcmFuZ2Ut
c2VsZWN0aW9uLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNjkzNzYpCisrKyBMYXlvdXRUZXN0cy9l
ZGl0aW5nL2V4ZWNDb21tYW5kL2Zvcm1hdC1ibG9jay1mcm9tLXJhbmdlLXNlbGVjdGlvbi1leHBl
Y3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTMyLDIyICszMiwyMyBAQCBhZnRlciBGb3JtYXRC
bG9jazoKICIKIHwgPGRsPgogfCAgICJGbzwjc2VsZWN0aW9uLWFuY2hvcj5vIgorfCAgIDxicj4K
K3wgICAiYmFyIgorfCAgIDxicj4KK3wgICA8c3Bhbj4KK3wgICAgICJiYXoiCit8ICAgICA8YnI+
Cit8ICAgInJheiIKK3wgICA8YnI+Cit8ICAgIgorZGFyIgorfCAgIDxicj4KK3wgICAiCisiCit8
ICAgInlhcjwjc2VsZWN0aW9uLWZvY3VzPiIKIHwgIgogIgotfCA8ZGl2PgotfCAgIDxkbD4KLXwg
ICAgICJiYXIiCi18ICAgPHNwYW4+Ci18ICAgICA8ZGw+Ci18ICAgICAgICJiYXoiCi18ICAgPGRs
PgotfCAgICAgInJheiIKLXwgPGRsPgotfCAgICJkYXIiCi18ICAgIsKgIgogfCAiCiAiCi18IDxk
bD4KLXwgICAieWE8I3NlbGVjdGlvbi1mb2N1cz5yIgogfCAiCiAiCkluZGV4OiBMYXlvdXRUZXN0
cy9lZGl0aW5nL2V4ZWNDb21tYW5kL2Zvcm1hdC1ibG9jay1tdWx0aXBsZS1wYXJhZ3JhcGhzLWV4
cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5k
L2Zvcm1hdC1ibG9jay1tdWx0aXBsZS1wYXJhZ3JhcGhzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvZm9ybWF0LWJsb2NrLW11bHRp
cGxlLXBhcmFncmFwaHMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM0MyBA
QAorVGhpcyB0ZXN0cyBlbnN1cmVzIGZvcm1hdEJsb2NrIGRvIG5vdCBtYWtlIG11bHRpcGxlIGVs
ZW1lbnRzIHdoZW4gZm9ybWF0dGluZyBtdWx0aXBsZSBwYXJhZ3JhcGhzLgorCitGb3JtYXR0aW5n
OgorfCAiCisiCit8IDxkaXY+Cit8ICAgIjwjc2VsZWN0aW9uLWFuY2hvcj5oZWxsbyIKK3wgPGRp
dj4KK3wgICAid29ybGQiCit8IDxkaXY+Cit8ICAgIldlYktpdDwjc2VsZWN0aW9uLWZvY3VzPiIK
K3wgIgorIgorCitieSBwIHlpZWxkczoKK3wgIgorIgorfCA8cD4KK3wgICAiPCNzZWxlY3Rpb24t
YW5jaG9yPmhlbGxvIgorfCAgIDxicj4KK3wgICAid29ybGQiCit8ICAgPGJyPgorfCAgICJXZWJL
aXQ8I3NlbGVjdGlvbi1mb2N1cz4iCit8ICIKKyIKKworRm9ybWF0dGluZzoKK3wgIgorIgorfCA8
cD4KK3wgICAiPCNzZWxlY3Rpb24tYW5jaG9yPmhlbGxvIgorfCA8cD4KK3wgICAid29ybGQ8I3Nl
bGVjdGlvbi1mb2N1cz4iCit8ICIKKyIKKworYnkgYmxvY2txdW90ZSB5aWVsZHM6Cit8ICIKKyIK
K3wgPGJsb2NrcXVvdGU+Cit8ICAgIjwjc2VsZWN0aW9uLWFuY2hvcj5oZWxsbyIKK3wgICA8YnI+
Cit8ICAgIndvcmxkPCNzZWxlY3Rpb24tZm9jdXM+IgorfCAiCisiCisKK0Zvcm1hdHRpbmc6Cit8
ICIKKyIKK3wgPGRpdj4KK3wgICAiPCNzZWxlY3Rpb24tYW5jaG9yPmhlbGxvIgorfCAgIDxwcmU+
Cit8ICAgICAid29ybGQ8I3NlbGVjdGlvbi1mb2N1cz4iCit8ICIKKyIKKworYnkgcCB5aWVsZHM6
Cit8ICIKKyIKK3wgPGRpdj4KK3wgICA8cD4KK3wgICAgICI8I3NlbGVjdGlvbi1hbmNob3I+aGVs
bG8iCit8ICAgICA8YnI+Cit8ICAgICAid29ybGQ8I3NlbGVjdGlvbi1mb2N1cz4iCit8ICIKKyIK
KworRm9ybWF0dGluZzoKK3wgIgorIgorfCA8aDE+Cit8ICAgIjwjc2VsZWN0aW9uLWFuY2hvcj5o
ZWxsbyIKK3wgPGRpdj4KK3wgICA8aDI+Cit8ICAgICAid29ybGQiCit8ICAgPGgzPgorfCAgICAg
IldlYktpdDwjc2VsZWN0aW9uLWZvY3VzPiIKK3wgIgorIgorCitieSBwcmUgeWllbGRzOgorfCAi
CisiCit8IDxwcmU+Cit8ICAgIjwjc2VsZWN0aW9uLWFuY2hvcj5oZWxsbyIKK3wgICA8YnI+Cit8
ICAgIndvcmxkIgorfCAgIDxicj4KK3wgICAiV2ViS2l0PCNzZWxlY3Rpb24tZm9jdXM+IgorfCAi
CisiCisKK0Zvcm1hdHRpbmc6Cit8ICIKKyIKK3wgPGRpdj4KK3wgICAiaGVsbG8iCit8ICAgPHA+
Cit8ICAgICAiPCNzZWxlY3Rpb24tYW5jaG9yPndvcmxkIgorfCAgICJ3ZWJraTwjc2VsZWN0aW9u
LWZvY3VzPnQiCit8ICIKKyIKKworYnkgaDEgeWllbGRzOgorfCAiCisiCit8IDxkaXY+Cit8ICAg
ImhlbGxvIgorfCAgIDxoMT4KK3wgICAgICI8I3NlbGVjdGlvbi1hbmNob3I+d29ybGQiCit8ICAg
ICA8YnI+Cit8ICAgICAid2Via2l0PCNzZWxlY3Rpb24tZm9jdXM+IgorfCAiCisiCisKK0Zvcm1h
dHRpbmc6Cit8ICIKKyIKK3wgPHByZT4KK3wgICAiPCNzZWxlY3Rpb24tYW5jaG9yPmhlbGxvCit3
b3JsZDwjc2VsZWN0aW9uLWZvY3VzPgord2Via2l0CisiCit8ICIKKyIKKworYnkgYmxvY2txdW90
ZSB5aWVsZHM6Cit8ICIKKyIKK3wgPHByZT4KK3wgICA8YmxvY2txdW90ZT4KK3wgICAgICI8I3Nl
bGVjdGlvbi1hbmNob3I+aGVsbG8iCit8ICAgICA8YnI+Cit8ICAgICAid29ybGQ8I3NlbGVjdGlv
bi1mb2N1cz4iCit8ICAgICA8YnI+Cit8ICAgICAid2Via2l0IgorfCAiCisiCisKK0Zvcm1hdHRp
bmc6Cit8ICIKKyIKK3wgPHByZT4KK3wgICAiaGVsbG8KKzwjc2VsZWN0aW9uLWFuY2hvcj53b3Js
ZAord2Via2k8I3NlbGVjdGlvbi1mb2N1cz50CisiCit8ICIKKyIKKworYnkgYmxvY2txdW90ZSB5
aWVsZHM6Cit8ICIKKyIKK3wgPHByZT4KK3wgICAiaGVsbG8KKyIKK3wgICA8YmxvY2txdW90ZT4K
K3wgICAgICI8I3NlbGVjdGlvbi1hbmNob3I+d29ybGQiCit8ICAgICA8YnI+Cit8ICAgICAid2Vi
a2k8I3NlbGVjdGlvbi1mb2N1cz50IgorfCAiCisiCisKK0Zvcm1hdHRpbmc6Cit8ICIKKzwjc2Vs
ZWN0aW9uLWFuY2hvcj5oZWxsbyIKK3wgPHA+Cit8ICAgIndvcmxkPCNzZWxlY3Rpb24tZm9jdXM+
IgorfCA8cD4KK3wgICAid2Via2l0IgorfCAiCisKKyIKKworYnkgcHJlIHlpZWxkczoKK3wgPHBy
ZT4KK3wgICAiPCNzZWxlY3Rpb24tYW5jaG9yPgoraGVsbG8iCit8ICAgPGJyPgorfCAgICJ3b3Js
PCNzZWxlY3Rpb24tZm9jdXM+ZCIKK3wgPHA+Cit8ICAgIndlYmtpdCIKK3wgIgorCisiCisKK0Zv
cm1hdHRpbmc6Cit8ICIKKyIKK3wgPGRpdj4KK3wgICAiaGVsbG8iCit8IDxkaXY+Cit8ICAgIjwj
c2VsZWN0aW9uLWFuY2hvcj53b3JsZCIKK3wgPGRpdj4KK3wgICAid2Via2l0PCNzZWxlY3Rpb24t
Zm9jdXM+IgorfCAiCisKKyIKK3wgPGRpdj4KK3wgICBjb250ZW50ZWRpdGFibGU9IiIKK3wgICBp
ZD0idGVzdDkiCit8ICAgIgorIgorfCAgIDx1bD4KK3wgICAgIDxsaT4KK3wgICAgICAgImhlbGxv
IgorfCAgICAgPGxpPgorfCAgICAgICAid29ybGQiCit8ICAgIgorIgorfCAiCisiCit8IDxzY3Jp
cHQ+Cit8ICAgIgorCitNYXJrdXAuZGVzY3JpcHRpb24oJ1RoaXMgdGVzdHMgZW5zdXJlcyBmb3Jt
YXRCbG9jayBkbyBub3QgbWFrZSBtdWx0aXBsZSBlbGVtZW50cyB3aGVuIGZvcm1hdHRpbmcgbXVs
dGlwbGUgcGFyYWdyYXBocy4nKQorCitmdW5jdGlvbiB0ZXN0SW5kZW50YXRpb24oY29udGFpbmVy
SWQsIHNlbGVjdG9yLCB2YWx1ZSkgeworICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZChjb250YWluZXJJZCk7CisgICAgc2VsZWN0b3IoY29udGFpbmVyKTsKKyAgICBN
YXJrdXAuZHVtcChjb250YWluZXIsICdGb3JtYXR0aW5nJyk7CisgICAgZG9jdW1lbnQuZXhlY0Nv
bW1hbmQoJ0Zvcm1hdEJsb2NrJywgZmFsc2UsIHZhbHVlKTsKKyAgICBNYXJrdXAuZHVtcChjb250
YWluZXIsICdieSAnICsgdmFsdWUgKyAnIHlpZWxkcycpOworfQorCitmdW5jdGlvbiBzZWxlY3RB
bGwoY29udGFpbmVyKSB7CisgICAgd2luZG93LmdldFNlbGVjdGlvbigpLnNlbGVjdEFsbENoaWxk
cmVuKGNvbnRhaW5lcik7Cit9CisKK2Z1bmN0aW9uIHNlbGVjdG9yRm9yTGluZXMoZmlyc3QsIGxh
c3QpIHsKKyAgICByZXR1cm4gZnVuY3Rpb24gKGNvbnRhaW5lcikgeworICAgICAgICB3aW5kb3cu
Z2V0U2VsZWN0aW9uKCkuc2V0UG9zaXRpb24oY29udGFpbmVyLCAwKTsKKyAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBmaXJzdCAtIDE7IGkrKykKKyAgICAgICAgICAgIHdpbmRvdy5nZXRTZWxl
Y3Rpb24oKS5tb2RpZnkoJ21vdmUnLCAnZm9yd2FyZCcsICdsaW5lJyk7CisgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgTWF0aC5hYnMobGFzdCAtIGZpcnN0LCAwKSArIDE7IGkrKykKKyAgICAg
ICAgICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5tb2RpZnkoJ2V4dGVuZCcsICdmb3J3YXJkJywg
J2xpbmUnKTsKKyAgICAgICAgd2luZG93LmdldFNlbGVjdGlvbigpLm1vZGlmeSgnZXh0ZW5kJywg
J2JhY2t3YXJkJywgJ2NoYXJhY3RlcicpOworICAgIH0KK30KKwordGVzdEluZGVudGF0aW9uKCd0
ZXN0MCcsIHNlbGVjdEFsbCwgJ3AnKTsKK3Rlc3RJbmRlbnRhdGlvbigndGVzdDEnLCBzZWxlY3RB
bGwsICdibG9ja3F1b3RlJyk7Cit0ZXN0SW5kZW50YXRpb24oJ3Rlc3QyJywgc2VsZWN0QWxsLCAn
cCcpOwordGVzdEluZGVudGF0aW9uKCd0ZXN0MycsIHNlbGVjdEFsbCwgJ3ByZScpOwordGVzdElu
ZGVudGF0aW9uKCd0ZXN0NCcsIHNlbGVjdG9yRm9yTGluZXMoMiwgMyksICdoMScpOwordGVzdElu
ZGVudGF0aW9uKCd0ZXN0NScsIHNlbGVjdG9yRm9yTGluZXMoMSwgMiksICdibG9ja3F1b3RlJyk7
Cit0ZXN0SW5kZW50YXRpb24oJ3Rlc3Q2Jywgc2VsZWN0b3JGb3JMaW5lcygyLCAzKSwgJ2Jsb2Nr
cXVvdGUnKTsKK3Rlc3RJbmRlbnRhdGlvbigndGVzdDcnLCBzZWxlY3RvckZvckxpbmVzKDEsIDIp
LCAncHJlJyk7Cit0ZXN0SW5kZW50YXRpb24oJ3Rlc3Q4Jywgc2VsZWN0b3JGb3JMaW5lcygyLCAz
KSwgJ3ByZScpOwordGVzdEluZGVudGF0aW9uKCd0ZXN0OScsIHNlbGVjdEFsbCwgJ2Jsb2NrcXVv
dGUnKTsKKworIgorCitieSBwcmUgeWllbGRzOgorfCAiCisiCit8IDxkaXY+Cit8ICAgImhlbGxv
IgorfCA8cHJlPgorfCAgICI8I3NlbGVjdGlvbi1hbmNob3I+d29ybGQiCit8ICAgPGJyPgorfCAg
ICJ3ZWJraXQ8I3NlbGVjdGlvbi1mb2N1cz4iCit8ICIKKworIgorfCA8ZGl2PgorfCAgIGNvbnRl
bnRlZGl0YWJsZT0iIgorfCAgIGlkPSJ0ZXN0OSIKK3wgICAiCisiCit8ICAgPHVsPgorfCAgICAg
PGxpPgorfCAgICAgICAiaGVsbG8iCit8ICAgICA8bGk+Cit8ICAgICAgICJ3b3JsZCIKK3wgICAi
CisiCit8ICIKKyIKK3wgPHNjcmlwdD4KK3wgICAiCisKK01hcmt1cC5kZXNjcmlwdGlvbignVGhp
cyB0ZXN0cyBlbnN1cmVzIGZvcm1hdEJsb2NrIGRvIG5vdCBtYWtlIG11bHRpcGxlIGVsZW1lbnRz
IHdoZW4gZm9ybWF0dGluZyBtdWx0aXBsZSBwYXJhZ3JhcGhzLicpCisKK2Z1bmN0aW9uIHRlc3RJ
bmRlbnRhdGlvbihjb250YWluZXJJZCwgc2VsZWN0b3IsIHZhbHVlKSB7CisgICAgdmFyIGNvbnRh
aW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGNvbnRhaW5lcklkKTsKKyAgICBzZWxlY3Rv
cihjb250YWluZXIpOworICAgIE1hcmt1cC5kdW1wKGNvbnRhaW5lciwgJ0Zvcm1hdHRpbmcnKTsK
KyAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnRm9ybWF0QmxvY2snLCBmYWxzZSwgdmFsdWUpOwor
ICAgIE1hcmt1cC5kdW1wKGNvbnRhaW5lciwgJ2J5ICcgKyB2YWx1ZSArICcgeWllbGRzJyk7Cit9
CisKK2Z1bmN0aW9uIHNlbGVjdEFsbChjb250YWluZXIpIHsKKyAgICB3aW5kb3cuZ2V0U2VsZWN0
aW9uKCkuc2VsZWN0QWxsQ2hpbGRyZW4oY29udGFpbmVyKTsKK30KKworZnVuY3Rpb24gc2VsZWN0
b3JGb3JMaW5lcyhmaXJzdCwgbGFzdCkgeworICAgIHJldHVybiBmdW5jdGlvbiAoY29udGFpbmVy
KSB7CisgICAgICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5zZXRQb3NpdGlvbihjb250YWluZXIs
IDApOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpcnN0IC0gMTsgaSsrKQorICAgICAg
ICAgICAgd2luZG93LmdldFNlbGVjdGlvbigpLm1vZGlmeSgnbW92ZScsICdmb3J3YXJkJywgJ2xp
bmUnKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBNYXRoLmFicyhsYXN0IC0gZmlyc3Qs
IDApICsgMTsgaSsrKQorICAgICAgICAgICAgd2luZG93LmdldFNlbGVjdGlvbigpLm1vZGlmeSgn
ZXh0ZW5kJywgJ2ZvcndhcmQnLCAnbGluZScpOworICAgICAgICB3aW5kb3cuZ2V0U2VsZWN0aW9u
KCkubW9kaWZ5KCdleHRlbmQnLCAnYmFja3dhcmQnLCAnY2hhcmFjdGVyJyk7CisgICAgfQorfQor
Cit0ZXN0SW5kZW50YXRpb24oJ3Rlc3QwJywgc2VsZWN0QWxsLCAncCcpOwordGVzdEluZGVudGF0
aW9uKCd0ZXN0MScsIHNlbGVjdEFsbCwgJ2Jsb2NrcXVvdGUnKTsKK3Rlc3RJbmRlbnRhdGlvbign
dGVzdDInLCBzZWxlY3RBbGwsICdwJyk7Cit0ZXN0SW5kZW50YXRpb24oJ3Rlc3QzJywgc2VsZWN0
QWxsLCAncHJlJyk7Cit0ZXN0SW5kZW50YXRpb24oJ3Rlc3Q0Jywgc2VsZWN0b3JGb3JMaW5lcygy
LCAzKSwgJ2gxJyk7Cit0ZXN0SW5kZW50YXRpb24oJ3Rlc3Q1Jywgc2VsZWN0b3JGb3JMaW5lcygx
LCAyKSwgJ2Jsb2NrcXVvdGUnKTsKK3Rlc3RJbmRlbnRhdGlvbigndGVzdDYnLCBzZWxlY3RvckZv
ckxpbmVzKDIsIDMpLCAnYmxvY2txdW90ZScpOwordGVzdEluZGVudGF0aW9uKCd0ZXN0NycsIHNl
bGVjdG9yRm9yTGluZXMoMSwgMiksICdwcmUnKTsKK3Rlc3RJbmRlbnRhdGlvbigndGVzdDgnLCBz
ZWxlY3RvckZvckxpbmVzKDIsIDMpLCAncHJlJyk7Cit0ZXN0SW5kZW50YXRpb24oJ3Rlc3Q5Jywg
c2VsZWN0QWxsLCAnYmxvY2txdW90ZScpOworCisiCisKK0Zvcm1hdHRpbmc6Cit8ICIKKyIKK3wg
PHVsPgorfCAgIDxsaT4KK3wgICAgICI8I3NlbGVjdGlvbi1hbmNob3I+aGVsbG8iCit8ICAgPGxp
PgorfCAgICAgIndvcmxkPCNzZWxlY3Rpb24tZm9jdXM+IgorfCAiCisiCisKK2J5IGJsb2NrcXVv
dGUgeWllbGRzOgorfCAiCisiCit8IDxibG9ja3F1b3RlPgorfCAgIDx1bD4KK3wgICAgIDxsaT4K
K3wgICAgICAgIjwjc2VsZWN0aW9uLWFuY2hvcj5oZWxsbyIKK3wgICA8dWw+Cit8ICAgICA8bGk+
Cit8ICAgICAgICJ3b3JsZDwjc2VsZWN0aW9uLWZvY3VzPiIKK3wgIgorIgpJbmRleDogTGF5b3V0
VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9mb3JtYXQtYmxvY2stbXVsdGlwbGUtcGFyYWdyYXBo
cy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvZm9y
bWF0LWJsb2NrLW11bHRpcGxlLXBhcmFncmFwaHMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvZm9ybWF0LWJsb2NrLW11bHRpcGxlLXBhcmFncmFw
aHMuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4MiBAQAorPCFET0NUWVBFIGh0bWw+Cis8
aHRtbD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9kdW1wLWFzLW1hcmt1
cC5qcyI+PC9zY3JpcHQ+Cis8ZGl2IGlkPSJ0ZXN0MCIgY29udGVudGVkaXRhYmxlPgorPGRpdj5o
ZWxsbzwvZGl2PjxkaXY+d29ybGQ8L2Rpdj48ZGl2PldlYktpdDwvZGl2PgorPC9kaXY+Cis8ZGl2
IGlkPSJ0ZXN0MSIgY29udGVudGVkaXRhYmxlPgorPHA+aGVsbG88L3A+PHA+d29ybGQ8L3A+Cis8
L2Rpdj4KKzxkaXYgaWQ9InRlc3QyIiBjb250ZW50ZWRpdGFibGU+Cis8ZGl2PmhlbGxvPHByZT53
b3JsZDwvcHJlPjwvZGl2PgorPC9kaXY+Cis8ZGl2IGlkPSJ0ZXN0MyIgY29udGVudGVkaXRhYmxl
PgorPGgxPmhlbGxvPC9oMT48ZGl2PjxoMj53b3JsZDwvaDI+PGgzPldlYktpdDwvaDM+PC9kaXY+
Cis8L2Rpdj4KKzxkaXYgaWQ9InRlc3Q0IiBjb250ZW50ZWRpdGFibGU+Cis8ZGl2PmhlbGxvPHA+
d29ybGQ8L3A+d2Via2l0PC9kaXY+Cis8L2Rpdj4KKzxkaXYgaWQ9InRlc3Q1IiBjb250ZW50ZWRp
dGFibGU+Cis8cHJlPmhlbGxvCit3b3JsZAord2Via2l0Cis8L3ByZT4KKzwvZGl2PgorPGRpdiBp
ZD0idGVzdDYiIGNvbnRlbnRlZGl0YWJsZT4KKzxwcmU+aGVsbG8KK3dvcmxkCit3ZWJraXQKKzwv
cHJlPgorPC9kaXY+Cis8ZGl2IGlkPSJ0ZXN0NyIgY29udGVudGVkaXRhYmxlPgoraGVsbG88cD53
b3JsZDwvcD48cD53ZWJraXQ8L3A+Cis8L3ByZT4KKzwvZGl2PgorPGRpdiBpZD0idGVzdDgiIGNv
bnRlbnRlZGl0YWJsZT4KKzxkaXY+aGVsbG88L2Rpdj48ZGl2PndvcmxkPC9kaXY+PGRpdj53ZWJr
aXQ8L2Rpdj4KKzwvcHJlPgorPGRpdiBpZD0idGVzdDkiIGNvbnRlbnRlZGl0YWJsZT4KKzx1bD48
bGk+aGVsbG88L2xpPjxsaT53b3JsZDwvbGk+PC91bD4KKzwvZGl2PgorPHNjcmlwdD4KKworTWFy
a3VwLmRlc2NyaXB0aW9uKCdUaGlzIHRlc3RzIGVuc3VyZXMgZm9ybWF0QmxvY2sgZG8gbm90IG1h
a2UgbXVsdGlwbGUgZWxlbWVudHMgd2hlbiBmb3JtYXR0aW5nIG11bHRpcGxlIHBhcmFncmFwaHMu
JykKKworZnVuY3Rpb24gdGVzdEluZGVudGF0aW9uKGNvbnRhaW5lcklkLCBzZWxlY3RvciwgdmFs
dWUpIHsKKyAgICB2YXIgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoY29udGFp
bmVySWQpOworICAgIHNlbGVjdG9yKGNvbnRhaW5lcik7CisgICAgTWFya3VwLmR1bXAoY29udGFp
bmVyLCAnRm9ybWF0dGluZycpOworICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdGb3JtYXRCbG9j
aycsIGZhbHNlLCB2YWx1ZSk7CisgICAgTWFya3VwLmR1bXAoY29udGFpbmVyLCAnYnkgJyArIHZh
bHVlICsgJyB5aWVsZHMnKTsKK30KKworZnVuY3Rpb24gc2VsZWN0QWxsKGNvbnRhaW5lcikgewor
ICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5zZWxlY3RBbGxDaGlsZHJlbihjb250YWluZXIpOwor
fQorCitmdW5jdGlvbiBzZWxlY3RvckZvckxpbmVzKGZpcnN0LCBsYXN0KSB7CisgICAgcmV0dXJu
IGZ1bmN0aW9uIChjb250YWluZXIpIHsKKyAgICAgICAgd2luZG93LmdldFNlbGVjdGlvbigpLnNl
dFBvc2l0aW9uKGNvbnRhaW5lciwgMCk7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmly
c3QgLSAxOyBpKyspCisgICAgICAgICAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkubW9kaWZ5KCdt
b3ZlJywgJ2ZvcndhcmQnLCAnbGluZScpOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IE1h
dGguYWJzKGxhc3QgLSBmaXJzdCwgMCkgKyAxOyBpKyspCisgICAgICAgICAgICB3aW5kb3cuZ2V0
U2VsZWN0aW9uKCkubW9kaWZ5KCdleHRlbmQnLCAnZm9yd2FyZCcsICdsaW5lJyk7CisgICAgICAg
IHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5tb2RpZnkoJ2V4dGVuZCcsICdiYWNrd2FyZCcsICdjaGFy
YWN0ZXInKTsKKyAgICB9Cit9CisKK3Rlc3RJbmRlbnRhdGlvbigndGVzdDAnLCBzZWxlY3RBbGws
ICdwJyk7Cit0ZXN0SW5kZW50YXRpb24oJ3Rlc3QxJywgc2VsZWN0QWxsLCAnYmxvY2txdW90ZScp
OwordGVzdEluZGVudGF0aW9uKCd0ZXN0MicsIHNlbGVjdEFsbCwgJ3AnKTsKK3Rlc3RJbmRlbnRh
dGlvbigndGVzdDMnLCBzZWxlY3RBbGwsICdwcmUnKTsKK3Rlc3RJbmRlbnRhdGlvbigndGVzdDQn
LCBzZWxlY3RvckZvckxpbmVzKDIsIDMpLCAnaDEnKTsKK3Rlc3RJbmRlbnRhdGlvbigndGVzdDUn
LCBzZWxlY3RvckZvckxpbmVzKDEsIDIpLCAnYmxvY2txdW90ZScpOwordGVzdEluZGVudGF0aW9u
KCd0ZXN0NicsIHNlbGVjdG9yRm9yTGluZXMoMiwgMyksICdibG9ja3F1b3RlJyk7Cit0ZXN0SW5k
ZW50YXRpb24oJ3Rlc3Q3Jywgc2VsZWN0b3JGb3JMaW5lcygxLCAyKSwgJ3ByZScpOwordGVzdElu
ZGVudGF0aW9uKCd0ZXN0OCcsIHNlbGVjdG9yRm9yTGluZXMoMiwgMyksICdwcmUnKTsKK3Rlc3RJ
bmRlbnRhdGlvbigndGVzdDknLCBzZWxlY3RBbGwsICdibG9ja3F1b3RlJyk7CisKKzwvc2NyaXB0
PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFu
ZC9mb3JtYXQtYmxvY2stdGFibGUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvZm9ybWF0LWJsb2NrLXRhYmxlLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvZm9ybWF0LWJs
b2NrLXRhYmxlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMjQgQEAKKwor
Rm9ybWF0dGluZzoKK3wgIgorIgorfCA8dGFibGU+Cit8ICAgPHRib2R5PgorfCAgICAgPHRyPgor
fCAgICAgICA8dGQ+Cit8ICAgICAgICAgImhlbGxvIgorfCAgICAgICA8dGQ+Cit8ICAgICAgICAg
IndvcmxkIgorfCAiCisiCisKK2J5IHAgeWllbGRzOgorfCAiCisiCit8IDxwPgorfCAgIDwjc2Vs
ZWN0aW9uLWFuY2hvcj4KK3wgICA8dGFibGU+Cit8ICAgICA8dGJvZHk+Cit8ICAgICAgIDx0cj4K
K3wgICAgICAgICA8dGQ+Cit8ICAgICAgICAgICAiaGVsbG8iCit8ICAgICAgICAgPHRkPgorfCAg
ICAgICAgICAgIndvcmxkIgorfCAgIDwjc2VsZWN0aW9uLWZvY3VzPgorfCAiCisiCisKK0Zvcm1h
dHRpbmc6Cit8ICIKKyIKK3wgPHRhYmxlPgorfCAgIDx0Ym9keT4KK3wgICAgIDx0cj4KK3wgICAg
ICAgPHRkPgorfCAgICAgICAgICI8I3NlbGVjdGlvbi1hbmNob3I+aGVsbG88I3NlbGVjdGlvbi1m
b2N1cz4iCit8ICAgICAgIDx0ZD4KK3wgICAgICAgICAid29ybGQiCit8ICIKKyIKKworYnkgYmxv
Y2txdW90ZSB5aWVsZHM6Cit8ICIKKyIKK3wgPHRhYmxlPgorfCAgIDx0Ym9keT4KK3wgICAgIDx0
cj4KK3wgICAgICAgPHRkPgorfCAgICAgICAgIDxibG9ja3F1b3RlPgorfCAgICAgICAgICAgIjwj
c2VsZWN0aW9uLWFuY2hvcj5oZWxsbzwjc2VsZWN0aW9uLWZvY3VzPiIKK3wgICAgICAgPHRkPgor
fCAgICAgICAgICJ3b3JsZCIKK3wgIgorIgorCitGb3JtYXR0aW5nOgorfCAiCisiCit8IDx0YWJs
ZT4KK3wgICA8dGJvZHk+Cit8ICAgICA8dHI+Cit8ICAgICAgIDx0ZD4KK3wgICAgICAgICA8cD4K
K3wgICAgICAgICAgICI8I3NlbGVjdGlvbi1hbmNob3I+aGVsbG8iCit8ICAgICAgICAgPGRpdj4K
K3wgICAgICAgICAgICJ3b3JsZDwjc2VsZWN0aW9uLWZvY3VzPiIKK3wgICAgICAgPHRkPgorfCAg
ICAgICAgICJXZWJLaXQiCit8ICIKKyIKKworYnkgaDMgeWllbGRzOgorfCAiCisiCit8IDx0YWJs
ZT4KK3wgICA8dGJvZHk+Cit8ICAgICA8dHI+Cit8ICAgICAgIDx0ZD4KK3wgICAgICAgICA8aDM+
Cit8ICAgICAgICAgICAiPCNzZWxlY3Rpb24tYW5jaG9yPmhlbGxvIgorfCAgICAgICAgICAgPGJy
PgorfCAgICAgICAgICAgIndvcmxkPCNzZWxlY3Rpb24tZm9jdXM+IgorfCAgICAgICA8dGQ+Cit8
ICAgICAgICAgIldlYktpdCIKK3wgIgorIgorCitGb3JtYXR0aW5nOgorfCAiCisiCit8IDx0YWJs
ZT4KK3wgICA8dGJvZHk+Cit8ICAgICA8dHI+Cit8ICAgICAgIDx0ZD4KK3wgICAgICAgICA8dWw+
Cit8ICAgICAgICAgICA8bGk+Cit8ICAgICAgICAgICAgICI8I3NlbGVjdGlvbi1hbmNob3I+aGVs
bG8iCit8ICAgICAgICAgICA8bGk+Cit8ICAgICAgICAgICAgICJ3b3JsZDwjc2VsZWN0aW9uLWZv
Y3VzPiIKK3wgICAgICAgPHRkPgorfCAgICAgICAgICJXZWJLaXQiCit8ICIKKyIKKworYnkgYWRk
cmVzcyB5aWVsZHM6Cit8ICIKKyIKK3wgPHRhYmxlPgorfCAgIDx0Ym9keT4KK3wgICAgIDx0cj4K
K3wgICAgICAgPHRkPgorfCAgICAgICAgIDxhZGRyZXNzPgorfCAgICAgICAgICAgPHVsPgorfCAg
ICAgICAgICAgICA8bGk+Cit8ICAgICAgICAgICAgICAgIjwjc2VsZWN0aW9uLWFuY2hvcj5oZWxs
byIKK3wgICAgICAgICAgIDx1bD4KK3wgICAgICAgICAgICAgPGxpPgorfCAgICAgICAgICAgICAg
ICJ3b3JsZDwjc2VsZWN0aW9uLWZvY3VzPiIKK3wgICAgICAgPHRkPgorfCAgICAgICAgICJXZWJL
aXQiCit8ICIKKyIKSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvZm9ybWF0
LWJsb2NrLXRhYmxlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9leGVj
Q29tbWFuZC9mb3JtYXQtYmxvY2stdGFibGUuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvZm9ybWF0LWJsb2NrLXRhYmxlLmh0bWwJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNDIgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8Ym9keT4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvZHVtcC1hcy1tYXJrdXAuanMiPjwvc2NyaXB0Pgor
PGRpdiBpZD0idGVzdDAiIGNvbnRlbnRlZGl0YWJsZT4KKzx0YWJsZT48dHI+PHRkPmhlbGxvPC90
ZD48dGQ+d29ybGQ8L3RkPjwvdHI+PC90YWJsZT4KKzwvZGl2PgorPGRpdiBpZD0idGVzdDEiIGNv
bnRlbnRlZGl0YWJsZT4KKzx0YWJsZT48dHI+PHRkPmhlbGxvPC90ZD48dGQ+d29ybGQ8L3RkPjwv
dHI+PC90YWJsZT4KKzwvZGl2PgorPGRpdiBpZD0idGVzdDIiIGNvbnRlbnRlZGl0YWJsZT4KKzx0
YWJsZT48dHI+PHRkPjxwPmhlbGxvPC9wPjxkaXY+d29ybGQ8L2Rpdj48L3RkPjx0ZD5XZWJLaXQ8
L3RkPjwvdHI+PC90YWJsZT4KKzwvZGl2PgorPGRpdiBpZD0idGVzdDMiIGNvbnRlbnRlZGl0YWJs
ZT4KKzx0YWJsZT48dHI+PHRkPjx1bD48bGk+aGVsbG88L2xpPjxsaT53b3JsZDwvbGk+PC91bD48
L3RkPjx0ZD5XZWJLaXQ8L3RkPjwvdHI+PC90YWJsZT4KKzwvZGl2PgorPHNjcmlwdD4KKworZnVu
Y3Rpb24gdGVzdEluZGVudGF0aW9uKGNvbnRhaW5lcklkLCBzZWxlY3RvciwgdmFsdWUpIHsKKyAg
ICB2YXIgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoY29udGFpbmVySWQpOwor
ICAgIHNlbGVjdG9yKGNvbnRhaW5lcik7CisgICAgTWFya3VwLmR1bXAoY29udGFpbmVyLCAnRm9y
bWF0dGluZycpOworICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdGb3JtYXRCbG9jaycsIGZhbHNl
LCB2YWx1ZSk7CisgICAgTWFya3VwLmR1bXAoY29udGFpbmVyLCAnYnkgJyArIHZhbHVlICsgJyB5
aWVsZHMnKTsKK30KKworZnVuY3Rpb24gc2VsZWN0QWxsKGNvbnRhaW5lcikgeworICAgIHdpbmRv
dy5nZXRTZWxlY3Rpb24oKS5zZWxlY3RBbGxDaGlsZHJlbihjb250YWluZXIpOworfQorCitmdW5j
dGlvbiBzZWxlY3RGaXJzdENlbGwoY29udGFpbmVyKSB7CisgICAgd2luZG93LmdldFNlbGVjdGlv
bigpLnNlbGVjdEFsbENoaWxkcmVuKGNvbnRhaW5lci5nZXRFbGVtZW50c0J5VGFnTmFtZSgndGQn
KVswXSk7Cit9CisKK3Rlc3RJbmRlbnRhdGlvbigndGVzdDAnLCBzZWxlY3RBbGwsICdwJyk7Cit0
ZXN0SW5kZW50YXRpb24oJ3Rlc3QxJywgc2VsZWN0Rmlyc3RDZWxsLCAnYmxvY2txdW90ZScpOwor
dGVzdEluZGVudGF0aW9uKCd0ZXN0MicsIHNlbGVjdEZpcnN0Q2VsbCwgJ2gzJyk7Cit0ZXN0SW5k
ZW50YXRpb24oJ3Rlc3QzJywgc2VsZWN0Rmlyc3RDZWxsLCAnYWRkcmVzcycpOworCis8L3Njcmlw
dD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1h
bmQvZm9ybWF0LWJsb2NrLXdpdGgtYnJhY2VzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL2Zvcm1hdC1ibG9jay13aXRoLWJyYWNlcy1l
eHBlY3RlZC50eHQJKHJldmlzaW9uIDY5Mzc2KQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9leGVj
Q29tbWFuZC9mb3JtYXQtYmxvY2std2l0aC1icmFjZXMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC0xNiw1ICsxNiw2IEBAIEZvcm1hdCBNZQogCiBBZnRlciBGb3JtYXRCbG9jayB3aXRo
IDxoMT46CiB8IDxoMT4KLXwgICAiPCNzZWxlY3Rpb24tY2FyZXQ+Rm9ybWF0IE1lIgotfCAgIDxi
cj4KK3wgICAiCis8I3NlbGVjdGlvbi1jYXJldD5Gb3JtYXQgTWUKKyIK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70586</attachid>
            <date>2010-10-13 01:10:26 -0700</date>
            <delta_ts>2010-10-13 09:55:17 -0700</delta_ts>
            <desc>fixed moveParagraphWithClones for fast/html/nav-element.html</desc>
            <filename>bug-19795-20101013011024.patch</filename>
            <type>text/plain</type>
            <size>28159</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2OTY0MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzkgQEAKKzIwMTAtMTAtMTMgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgVG9ueSBDaGFuZy4KKworICAgICAgICBleGVjQ29t
bWFuZCBGb3JtYXRCbG9jayBjcmVhdGVzIGxvdHMgb2YgYmxvY2txdW90ZXMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5Nzk1CisKKyAgICAgICAgVGhl
IGJ1ZyB3YXMgY2F1c2VkIGJ5IFdlYktpdCdzIG5vdCByZXVzaW5nIHRoZSBibG9jayBub2RlIGFk
ZGVkIGJ5IHByZXZpb3VzIGl0ZXJhdGlvbgorICAgICAgICBhbmQgaXRzIGluc2VydGluZyBibG9j
ayBub2RlIGF0IHdyb25nIHBsYWNlcy4KKworICAgICAgICBGaXhlZCB0aGUgYnVnIGJ5IHJld3Jp
dGluZyBGb3JtYXRCbG9ja0NvbW1hbmQ6OmZvcm1hdFJhbmdlLiAgTmV3IGNvZGUgcmVzZW1ibGVz
IHRoYXQgb2YKKyAgICAgICAgSW5kZW50T3V0ZGVudENvbW1hbmQ6OmluZGVudEludG9CbG9ja3F1
b3RlLiAgVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gaXMgdGhhdCBmb3JtYXRSYW5nZQorICAg
ICAgICBhdm9pZHMgdGhlIGV4aXN0aW5nIGJsb2NrIGVsZW1lbnRzIHdoZW4gcmVwbGFjaW5nIGJs
b2NrcyBhbmQgaXQgYWxzbyBhZGRzIGEgcGxhY2Vob2xkZXIKKyAgICAgICAgd2hlbiByZW1vdmlu
ZyB0aGUgZXhpc3RpbmcgYmxvY2sgY2F1c2VkIHBhcmFncmFwaHMgdG8gY29sbGFwc2UuCisKKyAg
ICAgICAgQWxzbyBmaXhlZCBhIGJ1ZyBpbiBtb3ZlUGFyYWdyYXBoV2l0aENsb25lcyB3aGVyZSBl
cnJvbmVvdXMgYnIgaXMgYWRkZWQgdG8gdGhlIHN0YXJ0IG9mCisgICAgICAgIHRoZSBibG9jayBl
bGVtZW50IHRvIHdoaWNoIHRoZSBwYXJhZ3JhcGggaXMgbW92ZWQgaWYgdGhlIGJsb2NrIGVsZW1l
bnQgaXMgdGhlIHN0YXJ0IG9mIGEgcGFyYWdyYXBoCisgICAgICAgIGFuZCBub3QgdGhlIGVuZCBv
ZiBhIHBhcmFncmFwaC4KKworICAgICAgICBUZXN0czogZWRpdGluZy9leGVjQ29tbWFuZC9mb3Jt
YXQtYmxvY2stbXVsdGlwbGUtcGFyYWdyYXBocy5odG1sCisgICAgICAgICAgICAgICBlZGl0aW5n
L2V4ZWNDb21tYW5kL2Zvcm1hdC1ibG9jay10YWJsZS5odG1sCisKKyAgICAgICAgKiBlZGl0aW5n
L0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVk
aXRDb21tYW5kOjptb3ZlUGFyYWdyYXBoV2l0aENsb25lcyk6IE5vIGxvbmdlciBhZGRzIGVycm9u
ZW91cyBici4KKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6ZXhlY3V0ZUZvcm1hdEJsb2NrKToKKyAgICAgICAgKiBlZGl0aW5nL0Zvcm1hdEJs
b2NrQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb3JtYXRCbG9ja0NvbW1hbmQ6OmZv
cm1hdFJhbmdlKTogUmV3cml0dGVuOyBzZWUgYWJvdmUuCisgICAgICAgIChXZWJDb3JlOjpGb3Jt
YXRCbG9ja0NvbW1hbmQ6OmlzRWxlbWVudFRvQXBwbHlJbkZvcm1hdEJsb2NrQ29tbWFuZCk6IFJl
bmFtZWQgZnJvbSB2YWxpZEJsb2NrRWxlbWVudAorICAgICAgICBhbmQgbW92ZWQgZnJvbSBodG1s
ZWRpdGluZy5jcHAuCisgICAgICAgIChXZWJDb3JlOjplbmNsb3NpbmdCbG9ja1RvU3BsaXRUcmVl
VG8pOiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5oOgorICAg
ICAgICAqIGVkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmVu
Y2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQpOiBDaGFuZ2VkIHRoZSByZXR1cm4gdHlwZSB0byBFbGVt
ZW50KgorICAgICAgICAqIGVkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmg6CisKIDIwMTAtMTAtMTIg
IFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVu
cmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHI2OTYzOS4KSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9BcHBs
eUJsb2NrRWxlbWVudENvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9B
cHBseUJsb2NrRWxlbWVudENvbW1hbmQuY3BwCShyZXZpc2lvbiA2OTY0MSkKKysrIFdlYkNvcmUv
ZWRpdGluZy9BcHBseUJsb2NrRWxlbWVudENvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTIsMTAgKzExMiw4IEBAIHZvaWQgQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kOjpmb3JtYXRTZWwK
ICAgICBWaXNpYmxlUG9zaXRpb24gZW5kT2ZMYXN0UGFyYWdyYXBoID0gZW5kT2ZQYXJhZ3JhcGgo
ZW5kT2ZTZWxlY3Rpb24pOwogCiAgICAgYm9vbCBhdEVuZCA9IGZhbHNlOworICAgIFBvc2l0aW9u
IGVuZDsKICAgICB3aGlsZSAoZW5kT2ZDdXJyZW50UGFyYWdyYXBoICE9IGVuZEFmdGVyU2VsZWN0
aW9uICYmICFhdEVuZCkgewotICAgICAgICBQb3NpdGlvbiBzdGFydDsKLSAgICAgICAgUG9zaXRp
b24gZW5kOwotCiAgICAgICAgIGlmIChlbmRPZkN1cnJlbnRQYXJhZ3JhcGggPT0gZW5kT2ZMYXN0
UGFyYWdyYXBoKQogICAgICAgICAgICAgYXRFbmQgPSB0cnVlOwogCkluZGV4OiBXZWJDb3JlL2Vk
aXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRp
dGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAJKHJldmlzaW9uIDY5NjQxKQorKysgV2ViQ29y
ZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYz
LDcgKzg2Myw4IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQYXJhZ3JhcGgKICAg
ICBiZWZvcmVQYXJhZ3JhcGggPSBWaXNpYmxlUG9zaXRpb24oYmVmb3JlUGFyYWdyYXBoLmRlZXBF
cXVpdmFsZW50KCkpOwogICAgIGFmdGVyUGFyYWdyYXBoID0gVmlzaWJsZVBvc2l0aW9uKGFmdGVy
UGFyYWdyYXBoLmRlZXBFcXVpdmFsZW50KCkpOwogCi0gICAgaWYgKGJlZm9yZVBhcmFncmFwaC5p
c05vdE51bGwoKSAmJiAhaXNUYWJsZUVsZW1lbnQoYmVmb3JlUGFyYWdyYXBoLmRlZXBFcXVpdmFs
ZW50KCkubm9kZSgpKSAmJiAoIWlzRW5kT2ZQYXJhZ3JhcGgoYmVmb3JlUGFyYWdyYXBoKSB8fCBi
ZWZvcmVQYXJhZ3JhcGggPT0gYWZ0ZXJQYXJhZ3JhcGgpKSB7CisgICAgaWYgKGJlZm9yZVBhcmFn
cmFwaC5pc05vdE51bGwoKSAmJiAhaXNUYWJsZUVsZW1lbnQoYmVmb3JlUGFyYWdyYXBoLmRlZXBF
cXVpdmFsZW50KCkubm9kZSgpKQorICAgICAgICAmJiAoKCFpc0VuZE9mUGFyYWdyYXBoKGJlZm9y
ZVBhcmFncmFwaCkgJiYgIWlzU3RhcnRPZlBhcmFncmFwaChiZWZvcmVQYXJhZ3JhcGgpKSB8fCBi
ZWZvcmVQYXJhZ3JhcGggPT0gYWZ0ZXJQYXJhZ3JhcGgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBU
cmltIHRleHQgYmV0d2VlbiBiZWZvcmVQYXJhZ3JhcGggYW5kIGFmdGVyUGFyYWdyYXBoIGlmIHRo
ZXkgYXJlbid0IGVxdWFsLgogICAgICAgICBpbnNlcnROb2RlQXQoY3JlYXRlQnJlYWtFbGVtZW50
KGRvY3VtZW50KCkpLCBiZWZvcmVQYXJhZ3JhcGguZGVlcEVxdWl2YWxlbnQoKSk7CiAgICAgfQpJ
bmRleDogV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAkocmV2aXNpb24gNjk2NDEpCisrKyBXZWJD
b3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzMiw4ICs0
MzIsNiBAQCBzdGF0aWMgYm9vbCBleGVjdXRlRm9ybWF0QmxvY2soRnJhbWUqIGZyCiAgICAgU3Ry
aW5nIHRhZ05hbWUgPSB2YWx1ZS5sb3dlcigpOwogICAgIGlmICh0YWdOYW1lWzBdID09ICc8JyAm
JiB0YWdOYW1lW3RhZ05hbWUubGVuZ3RoKCkgLSAxXSA9PSAnPicpCiAgICAgICAgIHRhZ05hbWUg
PSB0YWdOYW1lLnN1YnN0cmluZygxLCB0YWdOYW1lLmxlbmd0aCgpIC0gMik7Ci0gICAgaWYgKCF2
YWxpZEJsb2NrVGFnKHRhZ05hbWUpKQotICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBFeGNl
cHRpb25Db2RlIGVjOwogICAgIFN0cmluZyBsb2NhbE5hbWUsIHByZWZpeDsKQEAgLTQ0MSw2ICs0
MzksOSBAQCBzdGF0aWMgYm9vbCBleGVjdXRlRm9ybWF0QmxvY2soRnJhbWUqIGZyCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICBRdWFsaWZpZWROYW1lIHF1YWxpZmllZFRhZ05hbWUocHJlZml4
LCBsb2NhbE5hbWUsIHhodG1sTmFtZXNwYWNlVVJJKTsKIAorICAgIGlmICghRm9ybWF0QmxvY2tD
b21tYW5kOjppc0VsZW1lbnRUb0FwcGx5SW5Gb3JtYXRCbG9ja0NvbW1hbmQocXVhbGlmaWVkVGFn
TmFtZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIGFwcGx5Q29tbWFuZChGb3JtYXRC
bG9ja0NvbW1hbmQ6OmNyZWF0ZShmcmFtZS0+ZG9jdW1lbnQoKSwgcXVhbGlmaWVkVGFnTmFtZSkp
OwogICAgIHJldHVybiB0cnVlOwogfQpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0Zvcm1hdEJsb2Nr
Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29t
bWFuZC5jcHAJKHJldmlzaW9uIDY5NjQxKQorKysgV2ViQ29yZS9lZGl0aW5nL0Zvcm1hdEJsb2Nr
Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDQ2ICszNiw5MSBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKK3N0YXRpYyBOb2RlKiBl
bmNsb3NpbmdCbG9ja1RvU3BsaXRUcmVlVG8oTm9kZSogc3RhcnROb2RlKTsKKwogRm9ybWF0Qmxv
Y2tDb21tYW5kOjpGb3JtYXRCbG9ja0NvbW1hbmQoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBR
dWFsaWZpZWROYW1lJiB0YWdOYW1lKSAKICAgICA6IEFwcGx5QmxvY2tFbGVtZW50Q29tbWFuZChk
b2N1bWVudCwgdGFnTmFtZSkKIHsKIH0KIAotdm9pZCBGb3JtYXRCbG9ja0NvbW1hbmQ6OmZvcm1h
dFJhbmdlKGNvbnN0IFBvc2l0aW9uJiwgY29uc3QgUG9zaXRpb24mIGVuZCwgUmVmUHRyPEVsZW1l
bnQ+JikKK3ZvaWQgRm9ybWF0QmxvY2tDb21tYW5kOjpmb3JtYXRSYW5nZShjb25zdCBQb3NpdGlv
biYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQsIFJlZlB0cjxFbGVtZW50PiYgYmxvY2tOb2Rl
KQogewotICAgIHNldEVuZGluZ1NlbGVjdGlvbihWaXNpYmxlUG9zaXRpb24oZW5kKSk7CisgICAg
Tm9kZSogbm9kZVRvU3BsaXRUbyA9IGVuY2xvc2luZ0Jsb2NrVG9TcGxpdFRyZWVUbyhzdGFydC5u
b2RlKCkpOworICAgIFJlZlB0cjxOb2RlPiBvdXRlckJsb2NrID0gKHN0YXJ0Lm5vZGUoKSA9PSBu
b2RlVG9TcGxpdFRvKSA/IHN0YXJ0Lm5vZGUoKSA6IHNwbGl0VHJlZVRvTm9kZShzdGFydC5ub2Rl
KCksIG5vZGVUb1NwbGl0VG8pOworICAgIFJlZlB0cjxOb2RlPiBub2RlQWZ0ZXJJbnNlcnRpb25Q
b3NpdGlvbiA9IG91dGVyQmxvY2s7CisKKyAgICBFbGVtZW50KiByZWZOb2RlID0gZW5jbG9zaW5n
QmxvY2tGbG93RWxlbWVudChlbmQpOworICAgIEVsZW1lbnQqIHJvb3QgPSBlZGl0YWJsZVJvb3RG
b3JQb3NpdGlvbihzdGFydCk7CisgICAgaWYgKGlzRWxlbWVudFRvQXBwbHlJbkZvcm1hdEJsb2Nr
Q29tbWFuZChyZWZOb2RlLT50YWdRTmFtZSgpKSAmJiBzdGFydCA9PSBzdGFydE9mQmxvY2soc3Rh
cnQpICYmIGVuZCA9PSBlbmRPZkJsb2NrKGVuZCkKKyAgICAgICAgJiYgcmVmTm9kZSAhPSByb290
ICYmICFyb290LT5pc0Rlc2NlbmRhbnRPZihyZWZOb2RlKSkgeworICAgICAgICAvLyBBbHJlYWR5
IGluIGEgYmxvY2sgZWxlbWVudCB0aGF0IG9ubHkgY29udGFpbnMgdGhlIGN1cnJlbnQgcGFyYWdy
YXBoCisgICAgICAgIGlmIChyZWZOb2RlLT5oYXNUYWdOYW1lKHRhZ05hbWUoKSkpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIG5vZGVBZnRlckluc2VydGlvblBvc2l0aW9uID0gcmVmTm9k
ZTsKKyAgICB9CiAKLSAgICBOb2RlKiByZWZOb2RlID0gZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVu
dChlbmRpbmdTZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKSk7Ci0gICAgaWYgKHJlZk5vZGUtPmhh
c1RhZ05hbWUodGFnTmFtZSgpKSkKLSAgICAgICAgLy8gV2UncmUgYWxyZWFkeSBpbiBhIGJsb2Nr
IHdpdGggdGhlIGZvcm1hdCB3ZSB3YW50LCBzbyB3ZSBkb24ndCBoYXZlIHRvIGRvIGFueXRoaW5n
Ci0gICAgICAgIHJldHVybjsKLQotICAgIFZpc2libGVQb3NpdGlvbiBwYXJhZ3JhcGhTdGFydCA9
IHN0YXJ0T2ZQYXJhZ3JhcGgoZW5kKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gcGFyYWdyYXBoRW5k
ID0gZW5kT2ZQYXJhZ3JhcGgoZW5kKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gYmxvY2tTdGFydCA9
IHN0YXJ0T2ZCbG9jayhlbmRpbmdTZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKSk7Ci0gICAgVmlz
aWJsZVBvc2l0aW9uIGJsb2NrRW5kID0gZW5kT2ZCbG9jayhlbmRpbmdTZWxlY3Rpb24oKS52aXNp
YmxlU3RhcnQoKSk7Ci0gICAgUmVmUHRyPEVsZW1lbnQ+IGJsb2NrTm9kZSA9IGNyZWF0ZUJsb2Nr
RWxlbWVudCgpOwotICAgIFJlZlB0cjxFbGVtZW50PiBwbGFjZWhvbGRlciA9IGNyZWF0ZUJyZWFr
RWxlbWVudChkb2N1bWVudCgpKTsKLQotICAgIE5vZGUqIHJvb3QgPSBlbmRpbmdTZWxlY3Rpb24o
KS5zdGFydCgpLm5vZGUoKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpOwotICAgIGlmICh2YWxpZEJs
b2NrVGFnKHJlZk5vZGUtPm5vZGVOYW1lKCkubG93ZXIoKSkgJiYgCi0gICAgICAgIHBhcmFncmFw
aFN0YXJ0ID09IGJsb2NrU3RhcnQgJiYgcGFyYWdyYXBoRW5kID09IGJsb2NrRW5kICYmIAotICAg
ICAgICByZWZOb2RlICE9IHJvb3QgJiYgIXJvb3QtPmlzRGVzY2VuZGFudE9mKHJlZk5vZGUpKQot
ICAgICAgICAvLyBBbHJlYWR5IGluIGEgdmFsaWQgYmxvY2sgdGFnIHRoYXQgb25seSBjb250YWlu
cyB0aGUgY3VycmVudCBwYXJhZ3JhcGgsIHNvIHdlIGNhbiBzd2FwIHdpdGggdGhlIG5ldyB0YWcK
LSAgICAgICAgaW5zZXJ0Tm9kZUJlZm9yZShibG9ja05vZGUsIHJlZk5vZGUpOwotICAgIGVsc2Ug
ewotICAgICAgICAvLyBBdm9pZCBpbnNlcnRpbmcgaW5zaWRlIGlubGluZSBlbGVtZW50cyB0aGF0
IHN1cnJvdW5kIHBhcmFncmFwaFN0YXJ0IHdpdGggdXBzdHJlYW0oKS4KLSAgICAgICAgLy8gVGhp
cyBpcyBvbmx5IHRvIGF2b2lkIGNyZWF0aW5nIGJsb2F0ZWQgbWFya3VwLgotICAgICAgICBpbnNl
cnROb2RlQXQoYmxvY2tOb2RlLCBwYXJhZ3JhcGhTdGFydC5kZWVwRXF1aXZhbGVudCgpLnVwc3Ry
ZWFtKCkpOworICAgIGlmICghYmxvY2tOb2RlKSB7CisgICAgICAgIC8vIENyZWF0ZSBhIG5ldyBi
bG9ja3F1b3RlIGFuZCBpbnNlcnQgaXQgYXMgYSBjaGlsZCBvZiB0aGUgcm9vdCBlZGl0YWJsZSBl
bGVtZW50LiBXZSBhY2NvbXBsaXNoCisgICAgICAgIC8vIHRoaXMgYnkgc3BsaXR0aW5nIGFsbCBw
YXJlbnRzIG9mIHRoZSBjdXJyZW50IHBhcmFncmFwaCB1cCB0byB0aGF0IHBvaW50LgorICAgICAg
ICBibG9ja05vZGUgPSBjcmVhdGVCbG9ja0VsZW1lbnQoKTsKKyAgICAgICAgaW5zZXJ0Tm9kZUJl
Zm9yZShibG9ja05vZGUsIG5vZGVBZnRlckluc2VydGlvblBvc2l0aW9uKTsKICAgICB9Ci0gICAg
YXBwZW5kTm9kZShwbGFjZWhvbGRlciwgYmxvY2tOb2RlKTsKIAotICAgIFZpc2libGVQb3NpdGlv
biBkZXN0aW5hdGlvbihQb3NpdGlvbihwbGFjZWhvbGRlci5nZXQoKSwgMCkpOwotICAgIGlmIChw
YXJhZ3JhcGhTdGFydCA9PSBwYXJhZ3JhcGhFbmQgJiYgIWxpbmVCcmVha0V4aXN0c0F0VmlzaWJs
ZVBvc2l0aW9uKHBhcmFncmFwaFN0YXJ0KSkgewotICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24o
ZGVzdGluYXRpb24pOwotICAgICAgICByZXR1cm47CisgICAgUG9zaXRpb24gbGFzdFBhcmFncmFw
aEluQmxvY2tOb2RlID0gbGFzdFBvc2l0aW9uSW5Ob2RlKGJsb2NrTm9kZS5nZXQoKSk7CisgICAg
Ym9vbCB3YXNFbmRPZlBhcmFncmFwaCA9IGlzRW5kT2ZQYXJhZ3JhcGgobGFzdFBhcmFncmFwaElu
QmxvY2tOb2RlKTsKKworICAgIG1vdmVQYXJhZ3JhcGhXaXRoQ2xvbmVzKHN0YXJ0LCBlbmQsIGJs
b2NrTm9kZS5nZXQoKSwgb3V0ZXJCbG9jay5nZXQoKSk7CisKKyAgICBpZiAod2FzRW5kT2ZQYXJh
Z3JhcGggJiYgIWlzRW5kT2ZQYXJhZ3JhcGgobGFzdFBhcmFncmFwaEluQmxvY2tOb2RlKSAmJiAh
aXNTdGFydE9mUGFyYWdyYXBoKGxhc3RQYXJhZ3JhcGhJbkJsb2NrTm9kZSkpCisgICAgICAgIGlu
c2VydEJsb2NrUGxhY2Vob2xkZXIobGFzdFBhcmFncmFwaEluQmxvY2tOb2RlKTsKK30KKworLy8g
RklYTUU6IFdlIHNob3VsZCBjb25zaWRlciBtZXJpbmcgdGhpcyBmdW5jdGlvbiB3aXRoIGlzRWxl
bWVudEZvckZvcm1hdEJsb2NrQ29tbWFuZCBpbiBFZGl0b3IuY3BwCisvLyBDaGVja3MgaWYgYSB0
YWcgbmFtZSBpcyB2YWxpZCBmb3IgZXhlY0NvbW1hbmQoJ0Zvcm1hdEJsb2NrJykuCitib29sIEZv
cm1hdEJsb2NrQ29tbWFuZDo6aXNFbGVtZW50VG9BcHBseUluRm9ybWF0QmxvY2tDb21tYW5kKGNv
bnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChI
YXNoU2V0PFF1YWxpZmllZE5hbWU+LCBibG9ja1RhZ3MsICgpKTsKKyAgICBpZiAoYmxvY2tUYWdz
LmlzRW1wdHkoKSkgeworICAgICAgICBibG9ja1RhZ3MuYWRkKGFkZHJlc3NUYWcpOworICAgICAg
ICBibG9ja1RhZ3MuYWRkKGFydGljbGVUYWcpOworICAgICAgICBibG9ja1RhZ3MuYWRkKGFzaWRl
VGFnKTsKKyAgICAgICAgYmxvY2tUYWdzLmFkZChibG9ja3F1b3RlVGFnKTsKKyAgICAgICAgYmxv
Y2tUYWdzLmFkZChkZFRhZyk7CisgICAgICAgIGJsb2NrVGFncy5hZGQoZGl2VGFnKTsKKyAgICAg
ICAgYmxvY2tUYWdzLmFkZChkbFRhZyk7CisgICAgICAgIGJsb2NrVGFncy5hZGQoZHRUYWcpOwor
ICAgICAgICBibG9ja1RhZ3MuYWRkKGZvb3RlclRhZyk7CisgICAgICAgIGJsb2NrVGFncy5hZGQo
aDFUYWcpOworICAgICAgICBibG9ja1RhZ3MuYWRkKGgyVGFnKTsKKyAgICAgICAgYmxvY2tUYWdz
LmFkZChoM1RhZyk7CisgICAgICAgIGJsb2NrVGFncy5hZGQoaDRUYWcpOworICAgICAgICBibG9j
a1RhZ3MuYWRkKGg1VGFnKTsKKyAgICAgICAgYmxvY2tUYWdzLmFkZChoNlRhZyk7CisgICAgICAg
IGJsb2NrVGFncy5hZGQoaGVhZGVyVGFnKTsKKyAgICAgICAgYmxvY2tUYWdzLmFkZChoZ3JvdXBU
YWcpOworICAgICAgICBibG9ja1RhZ3MuYWRkKG5hdlRhZyk7CisgICAgICAgIGJsb2NrVGFncy5h
ZGQocFRhZyk7CisgICAgICAgIGJsb2NrVGFncy5hZGQocHJlVGFnKTsKKyAgICAgICAgYmxvY2tU
YWdzLmFkZChzZWN0aW9uVGFnKTsKKyAgICB9CisgICAgcmV0dXJuIGJsb2NrVGFncy5jb250YWlu
cyh0YWdOYW1lKTsKK30KKworTm9kZSogZW5jbG9zaW5nQmxvY2tUb1NwbGl0VHJlZVRvKE5vZGUq
IHN0YXJ0Tm9kZSkKK3sKKyAgICBOb2RlKiBsYXN0QmxvY2sgPSBzdGFydE5vZGU7CisgICAgZm9y
IChOb2RlKiBuID0gc3RhcnROb2RlOyBuOyBuID0gbi0+cGFyZW50Tm9kZSgpKSB7CisgICAgICAg
IGlmICghbi0+aXNDb250ZW50RWRpdGFibGUoKSkKKyAgICAgICAgICAgIHJldHVybiBsYXN0Qmxv
Y2s7CisgICAgICAgIGlmIChpc1RhYmxlQ2VsbChuKSB8fCBuLT5oYXNUYWdOYW1lKGJvZHlUYWcp
IHx8ICFuLT5wYXJlbnROb2RlKCkgfHwgIW4tPnBhcmVudE5vZGUoKS0+aXNDb250ZW50RWRpdGFi
bGUoKQorICAgICAgICAgICAgfHwgKG4tPmlzRWxlbWVudE5vZGUoKSAmJiBGb3JtYXRCbG9ja0Nv
bW1hbmQ6OmlzRWxlbWVudFRvQXBwbHlJbkZvcm1hdEJsb2NrQ29tbWFuZChzdGF0aWNfY2FzdDxF
bGVtZW50Kj4obiktPnRhZ1FOYW1lKCkpKSkKKyAgICAgICAgICAgIHJldHVybiBuOworICAgICAg
ICBpZiAoaXNCbG9jayhuKSkKKyAgICAgICAgICAgIGxhc3RCbG9jayA9IG47CisgICAgICAgIGlm
IChpc0xpc3RFbGVtZW50KG4pKQorICAgICAgICAgICAgcmV0dXJuIG4tPnBhcmVudE5vZGUoKS0+
aXNDb250ZW50RWRpdGFibGUoKSA/IG4tPnBhcmVudE5vZGUoKSA6IG47CiAgICAgfQotICAgIG1v
dmVQYXJhZ3JhcGgocGFyYWdyYXBoU3RhcnQsIHBhcmFncmFwaEVuZCwgZGVzdGluYXRpb24sIHRy
dWUsIGZhbHNlKTsKKyAgICByZXR1cm4gbGFzdEJsb2NrOwogfQogCiB9CkluZGV4OiBXZWJDb3Jl
L2VkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0
aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5oCShyZXZpc2lvbiA2OTY0MSkKKysrIFdlYkNvcmUvZWRp
dGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTEgKzM4LDEz
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGb3JtYXRCbG9ja0NvbW1h
bmQoZG9jdW1lbnQsIHRhZ05hbWUpKTsKICAgICB9CiAKKyAgICBzdGF0aWMgYm9vbCBpc0VsZW1l
bnRUb0FwcGx5SW5Gb3JtYXRCbG9ja0NvbW1hbmQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFt
ZSk7CisKIHByaXZhdGU6CiAgICAgRm9ybWF0QmxvY2tDb21tYW5kKERvY3VtZW50KiwgY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZm9ybWF0UmFuZ2Uo
Y29uc3QgUG9zaXRpb24mLCBjb25zdCBQb3NpdGlvbiYsIFJlZlB0cjxFbGVtZW50PiYpOwotICAg
IHZpcnR1YWwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKCkgY29uc3QgeyByZXR1cm4gRWRpdEFj
dGlvbkZvcm1hdEJsb2NrOyB9CisgICAgdm9pZCBmb3JtYXRSYW5nZShjb25zdCBQb3NpdGlvbiYs
IGNvbnN0IFBvc2l0aW9uJiwgUmVmUHRyPEVsZW1lbnQ+Jik7CisgICAgRWRpdEFjdGlvbiBlZGl0
aW5nQWN0aW9uKCkgY29uc3QgeyByZXR1cm4gRWRpdEFjdGlvbkZvcm1hdEJsb2NrOyB9CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBv
c2l0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9u
LmNwcAkocmV2aXNpb24gNjk2NDEpCisrKyBXZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9u
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjM0LDcgKzYzNCw3IEBAIGJvb2wgc2V0RW5kKFJhbmdl
ICpyLCBjb25zdCBWaXNpYmxlUG9zaXQKICAgICByZXR1cm4gY29kZSA9PSAwOwogfQogCi1Ob2Rl
ICplbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KGNvbnN0IFZpc2libGVQb3NpdGlvbiAmdmlzaWJs
ZVBvc2l0aW9uKQorRWxlbWVudCogZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudChjb25zdCBWaXNp
YmxlUG9zaXRpb24gJnZpc2libGVQb3NpdGlvbikKIHsKICAgICBpZiAodmlzaWJsZVBvc2l0aW9u
LmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gTlVMTDsKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9W
aXNpYmxlUG9zaXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBv
c2l0aW9uLmgJKHJldmlzaW9uIDY5NjQxKQorKysgV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3Np
dGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzYsNyArMTM2LDcgQEAgYm9vbCBzZXRFbmQoUmFu
Z2UqLCBjb25zdCBWaXNpYmxlUG9zaXRpbwogVmlzaWJsZVBvc2l0aW9uIHN0YXJ0VmlzaWJsZVBv
c2l0aW9uKGNvbnN0IFJhbmdlKiwgRUFmZmluaXR5KTsKIFZpc2libGVQb3NpdGlvbiBlbmRWaXNp
YmxlUG9zaXRpb24oY29uc3QgUmFuZ2UqLCBFQWZmaW5pdHkpOwogCi1Ob2RlICplbmNsb3NpbmdC
bG9ja0Zsb3dFbGVtZW50KGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOworRWxlbWVudCogZW5jbG9z
aW5nQmxvY2tGbG93RWxlbWVudChjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKIAogYm9vbCBpc0Zp
cnN0VmlzaWJsZVBvc2l0aW9uSW5Ob2RlKGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGNvbnN0IE5v
ZGUqKTsKIGJvb2wgaXNMYXN0VmlzaWJsZVBvc2l0aW9uSW5Ob2RlKGNvbnN0IFZpc2libGVQb3Np
dGlvbiYsIGNvbnN0IE5vZGUqKTsKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAkocmV2aXNp
b24gNjk2NDEpCisrKyBXZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00NjUsMzkgKzQ2NSw2IEBAIGJvb2wgaXNTcGVjaWFsRWxlbWVudChjb25zdCBOb2Rl
ICpuKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotLy8gQ2hlY2tzIGlmIGEgc3RyaW5nIGlzIGEg
dmFsaWQgdGFnIGZvciB0aGUgRm9ybWF0QmxvY2tDb21tYW5kIGZ1bmN0aW9uIG9mIGV4ZWNDb21t
YW5kLiBFeHBlY3RzIGxvd2VyIGNhc2Ugc3RyaW5ncy4KLWJvb2wgdmFsaWRCbG9ja1RhZyhjb25z
dCBBdG9taWNTdHJpbmcmIGJsb2NrVGFnKQotewotICAgIGlmIChibG9ja1RhZy5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIERFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNl
dDxBdG9taWNTdHJpbmc+LCBibG9ja1RhZ3MsICgpKTsKLSAgICBpZiAoYmxvY2tUYWdzLmlzRW1w
dHkoKSkgewotICAgICAgICBibG9ja1RhZ3MuYWRkKGFkZHJlc3NUYWcubG9jYWxOYW1lKCkpOwot
ICAgICAgICBibG9ja1RhZ3MuYWRkKGFydGljbGVUYWcubG9jYWxOYW1lKCkpOwotICAgICAgICBi
bG9ja1RhZ3MuYWRkKGFzaWRlVGFnLmxvY2FsTmFtZSgpKTsKLSAgICAgICAgYmxvY2tUYWdzLmFk
ZChibG9ja3F1b3RlVGFnLmxvY2FsTmFtZSgpKTsKLSAgICAgICAgYmxvY2tUYWdzLmFkZChkZFRh
Zy5sb2NhbE5hbWUoKSk7Ci0gICAgICAgIGJsb2NrVGFncy5hZGQoZGl2VGFnLmxvY2FsTmFtZSgp
KTsKLSAgICAgICAgYmxvY2tUYWdzLmFkZChkbFRhZy5sb2NhbE5hbWUoKSk7Ci0gICAgICAgIGJs
b2NrVGFncy5hZGQoZHRUYWcubG9jYWxOYW1lKCkpOwotICAgICAgICBibG9ja1RhZ3MuYWRkKGZv
b3RlclRhZy5sb2NhbE5hbWUoKSk7Ci0gICAgICAgIGJsb2NrVGFncy5hZGQoaDFUYWcubG9jYWxO
YW1lKCkpOwotICAgICAgICBibG9ja1RhZ3MuYWRkKGgyVGFnLmxvY2FsTmFtZSgpKTsKLSAgICAg
ICAgYmxvY2tUYWdzLmFkZChoM1RhZy5sb2NhbE5hbWUoKSk7Ci0gICAgICAgIGJsb2NrVGFncy5h
ZGQoaDRUYWcubG9jYWxOYW1lKCkpOwotICAgICAgICBibG9ja1RhZ3MuYWRkKGg1VGFnLmxvY2Fs
TmFtZSgpKTsKLSAgICAgICAgYmxvY2tUYWdzLmFkZChoNlRhZy5sb2NhbE5hbWUoKSk7Ci0gICAg
ICAgIGJsb2NrVGFncy5hZGQoaGVhZGVyVGFnLmxvY2FsTmFtZSgpKTsKLSAgICAgICAgYmxvY2tU
YWdzLmFkZChoZ3JvdXBUYWcubG9jYWxOYW1lKCkpOwotICAgICAgICBibG9ja1RhZ3MuYWRkKG5h
dlRhZy5sb2NhbE5hbWUoKSk7Ci0gICAgICAgIGJsb2NrVGFncy5hZGQocFRhZy5sb2NhbE5hbWUo
KSk7Ci0gICAgICAgIGJsb2NrVGFncy5hZGQocHJlVGFnLmxvY2FsTmFtZSgpKTsKLSAgICAgICAg
YmxvY2tUYWdzLmFkZChzZWN0aW9uVGFnLmxvY2FsTmFtZSgpKTsKLSAgICB9Ci0gICAgcmV0dXJu
IGJsb2NrVGFncy5jb250YWlucyhibG9ja1RhZyk7Ci19Ci0KIHN0YXRpYyBOb2RlKiBmaXJzdElu
U3BlY2lhbEVsZW1lbnQoY29uc3QgUG9zaXRpb24mIHBvcykKIHsKICAgICAvLyBGSVhNRTogVGhp
cyBiZWdpbnMgYXQgcG9zLm5vZGUoKSwgd2hpY2ggZG9lc24ndCBuZWNlc3NhcmlseSBjb250YWlu
IHBvcyAoc3VwcG9zZSBwb3Mgd2FzIFtpbWcsIDBdKS4gIFNlZSA8cmRhcjovL3Byb2JsZW0vNTAy
NzcwMj4uCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuaAkocmV2aXNpb24gNjk2NDEpCisrKyBXZWJD
b3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMjI4LDggKzIyOCw2
IEBAIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uRm9yUGFyYWdyYXBoSXQKICAgICAKIFN0cmlu
ZyBzdHJpbmdXaXRoUmViYWxhbmNlZFdoaXRlc3BhY2UoY29uc3QgU3RyaW5nJiwgYm9vbCwgYm9v
bCk7CiBjb25zdCBTdHJpbmcmIG5vbkJyZWFraW5nU3BhY2VTdHJpbmcoKTsKLWJvb2wgdmFsaWRC
bG9ja1RhZyhjb25zdCBBdG9taWNTdHJpbmcmKTsKLSAgICAKIAogfQogCkluZGV4OiBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZp
c2lvbiA2OTY0MSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDIyIEBACisyMDEwLTEwLTEzICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IFRvbnkgQ2hhbmcuCisKKyAgICAgICAgZXhlY0NvbW1h
bmQgRm9ybWF0QmxvY2sgY3JlYXRlcyBsb3RzIG9mIGJsb2NrcXVvdGVzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTc5NQorCisgICAgICAgIEFkZGVk
IHRlc3RzIHRvIGVuc3VyZSBXZWJLaXQgZG9lcyBub3QgYWRkIG11bHRpcGxlIGJsb2NrIGVsZW1l
bnRzIHdoZW4gYXBwbHlpbmcgYmxvY2sgZWxlbWVudCB0bworICAgICAgICBtdWx0aXBsZSBwYXJh
Z3JhcGhzLiAgQWxzbyBhZGRlZCBhIHRlc3QgdG8gZW5zdXJlIGZvcm1hdEJsb2NrIHdvcmtzIHdp
dGggdGFibGVzLgorCisgICAgICAgICogZmFzdC9odG1sL25hdi1lbGVtZW50LWV4cGVjdGVkLnR4
dDogUHJlc2VydmVkIG5ldyBsaW5lcyBhbmQgcmVtb3ZlZCByZWR1bmRhbnQgYnIuCisgICAgICAg
ICogZWRpdGluZy9leGVjQ29tbWFuZC9mb3JtYXQtYmxvY2stZXhwZWN0ZWQudHh0OiBQcmVzZXJ2
ZWQgc3BhbiBhbmQgcmVtb3ZlZCBlcnJvbmVvdXMgYnIuCisgICAgICAgICogZWRpdGluZy9leGVj
Q29tbWFuZC9mb3JtYXQtYmxvY2stZnJvbS1yYW5nZS1zZWxlY3Rpb24tZXhwZWN0ZWQudHh0OiBN
ZXJnZWQgZGwncyBhbmQgcmVtb3ZlZCBlcnJvbmVvdXMgYnIuCisgICAgICAgICogZWRpdGluZy9l
eGVjQ29tbWFuZC9mb3JtYXQtYmxvY2stbXVsdGlwbGUtcGFyYWdyYXBocy1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIGVkaXRpbmcvZXhlY0NvbW1hbmQvZm9ybWF0LWJsb2NrLW11bHRp
cGxlLXBhcmFncmFwaHMuaHRtbDogQWRkZWQuCisgICAgICAgICogZWRpdGluZy9leGVjQ29tbWFu
ZC9mb3JtYXQtYmxvY2stdGFibGUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBlZGl0
aW5nL2V4ZWNDb21tYW5kL2Zvcm1hdC1ibG9jay10YWJsZS5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBlZGl0aW5nL2V4ZWNDb21tYW5kL2Zvcm1hdC1ibG9jay13aXRoLWJyYWNlcy1leHBlY3RlZC50
eHQ6IFJlbW92ZWQgZXJyb25lb3VzIGJyLgorCiAyMDEwLTEwLTEyICBTaGVyaWZmIEJvdCAgPHdl
YmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5n
IG91dCByNjk2MzkuCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL2Zvcm1h
dC1ibG9jay1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9l
eGVjQ29tbWFuZC9mb3JtYXQtYmxvY2stZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA2OTY0MSkKKysr
IExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvZm9ybWF0LWJsb2NrLWV4cGVjdGVkLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNiBAQCBBZnRlciBGb3JtYXRCbG9jazoKICIK
IHwgPHByZT4KIHwgICAiTWFrZSBQcmUiCi18ICAgPGJyPgogfCAiCiAiCiB8IDxicj4KQEAgLTYy
LDggKzYxLDkgQEAgQWZ0ZXIgRm9ybWF0QmxvY2s6CiB8ICAgIkZvbyIKIHwgICA8YnI+CiB8ICAg
PGgxPgotfCAgICAgIk1ha2UgaDEiCi18ICAgICA8YnI+Cit8ICAgICA8c3Bhbj4KK3wgICAgICAg
aWQ9Iml0ZW0yIgorfCAgICAgICAiTWFrZSBoMSIKIHwgICAiYmF6IgogfCAiCiAiCkluZGV4OiBM
YXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL2Zvcm1hdC1ibG9jay1mcm9tLXJhbmdlLXNl
bGVjdGlvbi1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9l
eGVjQ29tbWFuZC9mb3JtYXQtYmxvY2stZnJvbS1yYW5nZS1zZWxlY3Rpb24tZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiA2OTY0MSkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvZm9y
bWF0LWJsb2NrLWZyb20tcmFuZ2Utc2VsZWN0aW9uLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtMzIsMjIgKzMyLDIzIEBAIGFmdGVyIEZvcm1hdEJsb2NrOgogIgogfCA8ZGw+CiB8ICAg
IkZvPCNzZWxlY3Rpb24tYW5jaG9yPm8iCit8ICAgPGJyPgorfCAgICJiYXIiCit8ICAgPGJyPgor
fCAgIDxzcGFuPgorfCAgICAgImJheiIKK3wgICAgIDxicj4KK3wgICAicmF6IgorfCAgIDxicj4K
K3wgICAiCitkYXIiCit8ICAgPGJyPgorfCAgICIKKyIKK3wgICAieWFyPCNzZWxlY3Rpb24tZm9j
dXM+IgogfCAiCiAiCi18IDxkaXY+Ci18ICAgPGRsPgotfCAgICAgImJhciIKLXwgICA8c3Bhbj4K
LXwgICAgIDxkbD4KLXwgICAgICAgImJheiIKLXwgICA8ZGw+Ci18ICAgICAicmF6IgotfCA8ZGw+
Ci18ICAgImRhciIKLXwgICAiwqAiCiB8ICIKICIKLXwgPGRsPgotfCAgICJ5YTwjc2VsZWN0aW9u
LWZvY3VzPnIiCiB8ICIKICIKSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQv
Zm9ybWF0LWJsb2NrLW11bHRpcGxlLXBhcmFncmFwaHMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvZm9ybWF0LWJsb2NrLW11bHRpcGxl
LXBhcmFncmFwaHMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZWRp
dGluZy9leGVjQ29tbWFuZC9mb3JtYXQtYmxvY2stbXVsdGlwbGUtcGFyYWdyYXBocy1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjMzIEBACitUaGlzIHRlc3RzIGVuc3VyZXMg
Zm9ybWF0QmxvY2sgZG8gbm90IG1ha2UgbXVsdGlwbGUgZWxlbWVudHMgd2hlbiBmb3JtYXR0aW5n
IG11bHRpcGxlIHBhcmFncmFwaHMuCisKK0Zvcm1hdHRpbmc6Cit8ICIKKyIKK3wgPGRpdj4KK3wg
ICAiPCNzZWxlY3Rpb24tYW5jaG9yPmhlbGxvIgorfCA8ZGl2PgorfCAgICJ3b3JsZCIKK3wgPGRp
dj4KK3wgICAiV2ViS2l0PCNzZWxlY3Rpb24tZm9jdXM+IgorfCAiCisiCisKK2J5IHAgeWllbGRz
OgorfCAiCisiCit8IDxwPgorfCAgICI8I3NlbGVjdGlvbi1hbmNob3I+aGVsbG8iCit8ICAgPGJy
PgorfCAgICJ3b3JsZCIKK3wgICA8YnI+Cit8ICAgIldlYktpdDwjc2VsZWN0aW9uLWZvY3VzPiIK
K3wgIgorIgorCitGb3JtYXR0aW5nOgorfCAiCisiCit8IDxwPgorfCAgICI8I3NlbGVjdGlvbi1h
bmNob3I+aGVsbG8iCit8IDxwPgorfCAgICJ3b3JsZDwjc2VsZWN0aW9uLWZvY3VzPiIKK3wgIgor
IgorCitieSBibG9ja3F1b3RlIHlpZWxkczoKK3wgIgorIgorfCA8YmxvY2txdW90ZT4KK3wgICAi
PCNzZWxlY3Rpb24tYW5jaG9yPmhlbGxvIgorfCAgIDxicj4KK3wgICAid29ybGQ8I3NlbGVjdGlv
bi1mb2N1cz4iCit8ICIKKyIKKworRm9ybWF0dGluZzoKK3wgIgorIgorfCA8ZGl2PgorfCAgICI8
I3NlbGVjdGlvbi1hbmNob3I+aGVsbG8iCit8ICAgPHByZT4KK3wgICAgICJ3b3JsZDwjc2VsZWN0
aW9uLWZvY3VzPiIKK3wgIgorIgorCitieSBwIHlpZWxkczoKK3wgIgorIgorfCA8ZGl2PgorfCAg
IDxwPgorfCAgICAgIjwjc2VsZWN0aW9uLWFuY2hvcj5oZWxsbyIKK3wgICAgIDxicj4KK3wgICAg
ICJ3b3JsZDwjc2VsZWN0aW9uLWZvY3VzPiIKK3wgIgorIgorCitGb3JtYXR0aW5nOgorfCAiCisi
Cit8IDxoMT4KK3wgICAiPCNzZWxlY3Rpb24tYW5jaG9yPmhlbGxvIgorfCA8ZGl2PgorfCAgIDxo
Mj4KK3wgICAgICJ3b3JsZCIKK3wgICA8aDM+Cit8ICAgICAiV2ViS2l0PCNzZWxlY3Rpb24tZm9j
dXM+IgorfCAiCisiCisKK2J5IHByZSB5aWVsZHM6Cit8ICIKKyIKK3wgPHByZT4KK3wgICAiPCNz
ZWxlY3Rpb24tYW5jaG9yPmhlbGxvIgorfCAgIDxicj4KK3wgICAid29ybGQiCit8ICAgPGJyPgor
fCAgICJXZWJLaXQ8I3NlbGVjdGlvbi1mb2N1cz4iCit8ICIKKyIKKworRm9ybWF0dGluZzoKK3wg
IgorIgorfCA8ZGl2PgorfCAgICJoZWxsbyIKK3wgICA8cD4KK3wgICAgICI8I3NlbGVjdGlvbi1h
bmNob3I+d29ybGQiCit8ICAgIndlYmtpPCNzZWxlY3Rpb24tZm9jdXM+dCIKK3wgIgorIgorCiti
eSBoMSB5aWVsZHM6Cit8ICIKKyIKK3wgPGRpdj4KK3wgICAiaGVsbG8iCit8ICAgPGgxPgorfCAg
ICAgIjwjc2VsZWN0aW9uLWFuY2hvcj53b3JsZCIKK3wgICAgIDxicj4KK3wgICAgICJ3ZWJraXQ8
I3NlbGVjdGlvbi1mb2N1cz4iCit8ICIKKyIKKworRm9ybWF0dGluZzoKK3wgIgorIgorfCA8cHJl
PgorfCAgICI8I3NlbGVjdGlvbi1hbmNob3I+aGVsbG8KK3dvcmxkPCNzZWxlY3Rpb24tZm9jdXM+
Cit3ZWJraXQKKyIKK3wgIgorIgorCitieSBibG9ja3F1b3RlIHlpZWxkczoKK3wgIgorIgorfCA8
cHJlPgorfCAgIDxibG9ja3F1b3RlPgorfCAgICAgIjwjc2VsZWN0aW9uLWFuY2hvcj5oZWxsbyIK
K3wgICAgIDxicj4KK3wgICAgICJ3b3JsZDwjc2VsZWN0aW9uLWZvY3VzPiIKK3wgICAgIDxicj4K
K3wgICAgICJ3ZWJraXQiCit8ICIKKyIKKworRm9ybWF0dGluZzoKK3wgIgorIgorfCA8cHJlPgor
fCAgICJoZWxsbworPCNzZWxlY3Rpb24tYW5jaG9yPndvcmxkCit3ZWJraTwjc2VsZWN0aW9uLWZv
Y3VzPnQKKyIKK3wgIgorIgorCitieSBibG9ja3F1b3RlIHlpZWxkczoKK3wgIgorIgorfCA8cHJl
PgorfCAgICJoZWxsbworIgorfCAgIDxibG9ja3F1b3RlPgorfCAgICAgIjwjc2VsZWN0aW9uLWFu
Y2hvcj53b3JsZCIKK3wgICAgIDxicj4KK3wgICAgICJ3ZWJraTwjc2VsZWN0aW9uLWZvY3VzPnQi
Cit8ICIKKyIKKworRm9ybWF0dGluZzoKK3wgIgorPCNzZWxlY3Rpb24tYW5jaG9yPmhlbGxvIgor
fCA8cD4KK3wgICAid29ybGQ8I3NlbGVjdGlvbi1mb2N1cz4iCit8IDxwPgorfCAgICJ3ZWJraXQi
Cit8ICIKKworIgorCitieSBwcmUgeWllbGRzOgorfCA8cHJlPgorfCAgICI8I3NlbGVjdGlvbi1h
bmNob3I+CitoZWxsbyIKK3wgICA8YnI+Cit8ICAgIndvcmw8I3NlbGVjdGlvbi1mb2N1cz5kIgor
fCA8cD4KK3wgICAid2Via2l0IgorfCAiCisKKyIKKworRm9ybWF0dGluZzoKK3wgIgorIgorfCA8
ZGl2PgorfCAgICJoZWxsbyIKK3wgPGRpdj4KK3wgICAiPCNzZWxlY3Rpb24tYW5jaG9yPndvcmxk
IgorfCA8ZGl2PgorfCAgICJ3ZWJraTwjc2VsZWN0aW9uLWZvY3VzPnQiCit8ICIKKyIKKworYnkg
cHJlIHlpZWxkczoKK3wgIgorIgorfCA8ZGl2PgorfCAgICJoZWxsbyIKK3wgPHByZT4KK3wgICAi
PCNzZWxlY3Rpb24tYW5jaG9yPndvcmxkIgorfCAgIDxicj4KK3wgICAid2Via2k8I3NlbGVjdGlv
bi1mb2N1cz50IgorfCAiCisiCisKK0Zvcm1hdHRpbmc6Cit8ICIKKyIKK3wgPHVsPgorfCAgIDxs
aT4KK3wgICAgICI8I3NlbGVjdGlvbi1hbmNob3I+aGVsbG8iCit8ICAgPGxpPgorfCAgICAgIndv
cmxkPCNzZWxlY3Rpb24tZm9jdXM+IgorfCAiCisiCisKK2J5IGJsb2NrcXVvdGUgeWllbGRzOgor
fCAiCisiCit8IDxibG9ja3F1b3RlPgorfCAgIDx1bD4KK3wgICAgIDxsaT4KK3wgICAgICAgIjwj
c2VsZWN0aW9uLWFuY2hvcj5oZWxsbyIKK3wgICA8dWw+Cit8ICAgICA8bGk+Cit8ICAgICAgICJ3
b3JsZDwjc2VsZWN0aW9uLWZvY3VzPiIKK3wgIgorIgpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGlu
Zy9leGVjQ29tbWFuZC9mb3JtYXQtYmxvY2stbXVsdGlwbGUtcGFyYWdyYXBocy5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvZm9ybWF0LWJsb2NrLW11
bHRpcGxlLXBhcmFncmFwaHMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2VkaXRp
bmcvZXhlY0NvbW1hbmQvZm9ybWF0LWJsb2NrLW11bHRpcGxlLXBhcmFncmFwaHMuaHRtbAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw4MiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxib2R5
PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9kdW1wLWFzLW1hcmt1cC5qcyI+PC9zY3Jp
cHQ+Cis8ZGl2IGlkPSJ0ZXN0MCIgY29udGVudGVkaXRhYmxlPgorPGRpdj5oZWxsbzwvZGl2Pjxk
aXY+d29ybGQ8L2Rpdj48ZGl2PldlYktpdDwvZGl2PgorPC9kaXY+Cis8ZGl2IGlkPSJ0ZXN0MSIg
Y29udGVudGVkaXRhYmxlPgorPHA+aGVsbG88L3A+PHA+d29ybGQ8L3A+Cis8L2Rpdj4KKzxkaXYg
aWQ9InRlc3QyIiBjb250ZW50ZWRpdGFibGU+Cis8ZGl2PmhlbGxvPHByZT53b3JsZDwvcHJlPjwv
ZGl2PgorPC9kaXY+Cis8ZGl2IGlkPSJ0ZXN0MyIgY29udGVudGVkaXRhYmxlPgorPGgxPmhlbGxv
PC9oMT48ZGl2PjxoMj53b3JsZDwvaDI+PGgzPldlYktpdDwvaDM+PC9kaXY+Cis8L2Rpdj4KKzxk
aXYgaWQ9InRlc3Q0IiBjb250ZW50ZWRpdGFibGU+Cis8ZGl2PmhlbGxvPHA+d29ybGQ8L3A+d2Vi
a2l0PC9kaXY+Cis8L2Rpdj4KKzxkaXYgaWQ9InRlc3Q1IiBjb250ZW50ZWRpdGFibGU+Cis8cHJl
PmhlbGxvCit3b3JsZAord2Via2l0Cis8L3ByZT4KKzwvZGl2PgorPGRpdiBpZD0idGVzdDYiIGNv
bnRlbnRlZGl0YWJsZT4KKzxwcmU+aGVsbG8KK3dvcmxkCit3ZWJraXQKKzwvcHJlPgorPC9kaXY+
Cis8ZGl2IGlkPSJ0ZXN0NyIgY29udGVudGVkaXRhYmxlPgoraGVsbG88cD53b3JsZDwvcD48cD53
ZWJraXQ8L3A+Cis8L3ByZT4KKzwvZGl2PgorPGRpdiBpZD0idGVzdDgiIGNvbnRlbnRlZGl0YWJs
ZT4KKzxkaXY+aGVsbG88L2Rpdj48ZGl2PndvcmxkPC9kaXY+PGRpdj53ZWJraXQ8L2Rpdj4KKzwv
ZGl2PgorPGRpdiBpZD0idGVzdDkiIGNvbnRlbnRlZGl0YWJsZT4KKzx1bD48bGk+aGVsbG88L2xp
PjxsaT53b3JsZDwvbGk+PC91bD4KKzwvZGl2PgorPHNjcmlwdD4KKworTWFya3VwLmRlc2NyaXB0
aW9uKCdUaGlzIHRlc3RzIGVuc3VyZXMgZm9ybWF0QmxvY2sgZG8gbm90IG1ha2UgbXVsdGlwbGUg
ZWxlbWVudHMgd2hlbiBmb3JtYXR0aW5nIG11bHRpcGxlIHBhcmFncmFwaHMuJykKKworZnVuY3Rp
b24gdGVzdEluZGVudGF0aW9uKGNvbnRhaW5lcklkLCBzZWxlY3RvciwgdmFsdWUpIHsKKyAgICB2
YXIgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoY29udGFpbmVySWQpOworICAg
IHNlbGVjdG9yKGNvbnRhaW5lcik7CisgICAgTWFya3VwLmR1bXAoY29udGFpbmVyLCAnRm9ybWF0
dGluZycpOworICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdGb3JtYXRCbG9jaycsIGZhbHNlLCB2
YWx1ZSk7CisgICAgTWFya3VwLmR1bXAoY29udGFpbmVyLCAnYnkgJyArIHZhbHVlICsgJyB5aWVs
ZHMnKTsKK30KKworZnVuY3Rpb24gc2VsZWN0QWxsKGNvbnRhaW5lcikgeworICAgIHdpbmRvdy5n
ZXRTZWxlY3Rpb24oKS5zZWxlY3RBbGxDaGlsZHJlbihjb250YWluZXIpOworfQorCitmdW5jdGlv
biBzZWxlY3RvckZvckxpbmVzKGZpcnN0LCBsYXN0KSB7CisgICAgcmV0dXJuIGZ1bmN0aW9uIChj
b250YWluZXIpIHsKKyAgICAgICAgd2luZG93LmdldFNlbGVjdGlvbigpLnNldFBvc2l0aW9uKGNv
bnRhaW5lciwgMCk7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmlyc3QgLSAxOyBpKysp
CisgICAgICAgICAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkubW9kaWZ5KCdtb3ZlJywgJ2Zvcndh
cmQnLCAnbGluZScpOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IE1hdGguYWJzKGxhc3Qg
LSBmaXJzdCwgMCkgKyAxOyBpKyspCisgICAgICAgICAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCku
bW9kaWZ5KCdleHRlbmQnLCAnZm9yd2FyZCcsICdsaW5lJyk7CisgICAgICAgIHdpbmRvdy5nZXRT
ZWxlY3Rpb24oKS5tb2RpZnkoJ2V4dGVuZCcsICdiYWNrd2FyZCcsICdjaGFyYWN0ZXInKTsKKyAg
ICB9Cit9CisKK3Rlc3RJbmRlbnRhdGlvbigndGVzdDAnLCBzZWxlY3RBbGwsICdwJyk7Cit0ZXN0
SW5kZW50YXRpb24oJ3Rlc3QxJywgc2VsZWN0QWxsLCAnYmxvY2txdW90ZScpOwordGVzdEluZGVu
dGF0aW9uKCd0ZXN0MicsIHNlbGVjdEFsbCwgJ3AnKTsKK3Rlc3RJbmRlbnRhdGlvbigndGVzdDMn
LCBzZWxlY3RBbGwsICdwcmUnKTsKK3Rlc3RJbmRlbnRhdGlvbigndGVzdDQnLCBzZWxlY3RvckZv
ckxpbmVzKDIsIDMpLCAnaDEnKTsKK3Rlc3RJbmRlbnRhdGlvbigndGVzdDUnLCBzZWxlY3RvckZv
ckxpbmVzKDEsIDIpLCAnYmxvY2txdW90ZScpOwordGVzdEluZGVudGF0aW9uKCd0ZXN0NicsIHNl
bGVjdG9yRm9yTGluZXMoMiwgMyksICdibG9ja3F1b3RlJyk7Cit0ZXN0SW5kZW50YXRpb24oJ3Rl
c3Q3Jywgc2VsZWN0b3JGb3JMaW5lcygxLCAyKSwgJ3ByZScpOwordGVzdEluZGVudGF0aW9uKCd0
ZXN0OCcsIHNlbGVjdG9yRm9yTGluZXMoMiwgMyksICdwcmUnKTsKK3Rlc3RJbmRlbnRhdGlvbign
dGVzdDknLCBzZWxlY3RBbGwsICdibG9ja3F1b3RlJyk7CisKKzwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9mb3JtYXQtYmxv
Y2stdGFibGUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcv
ZXhlY0NvbW1hbmQvZm9ybWF0LWJsb2NrLXRhYmxlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvZm9ybWF0LWJsb2NrLXRhYmxlLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMjQgQEAKKworRm9ybWF0dGluZzoK
K3wgIgorIgorfCA8dGFibGU+Cit8ICAgPHRib2R5PgorfCAgICAgPHRyPgorfCAgICAgICA8dGQ+
Cit8ICAgICAgICAgImhlbGxvIgorfCAgICAgICA8dGQ+Cit8ICAgICAgICAgIndvcmxkIgorfCAi
CisiCisKK2J5IHAgeWllbGRzOgorfCAiCisiCit8IDxwPgorfCAgIDwjc2VsZWN0aW9uLWFuY2hv
cj4KK3wgICA8dGFibGU+Cit8ICAgICA8dGJvZHk+Cit8ICAgICAgIDx0cj4KK3wgICAgICAgICA8
dGQ+Cit8ICAgICAgICAgICAiaGVsbG8iCit8ICAgICAgICAgPHRkPgorfCAgICAgICAgICAgIndv
cmxkIgorfCAgIDwjc2VsZWN0aW9uLWZvY3VzPgorfCAiCisiCisKK0Zvcm1hdHRpbmc6Cit8ICIK
KyIKK3wgPHRhYmxlPgorfCAgIDx0Ym9keT4KK3wgICAgIDx0cj4KK3wgICAgICAgPHRkPgorfCAg
ICAgICAgICI8I3NlbGVjdGlvbi1hbmNob3I+aGVsbG88I3NlbGVjdGlvbi1mb2N1cz4iCit8ICAg
ICAgIDx0ZD4KK3wgICAgICAgICAid29ybGQiCit8ICIKKyIKKworYnkgYmxvY2txdW90ZSB5aWVs
ZHM6Cit8ICIKKyIKK3wgPHRhYmxlPgorfCAgIDx0Ym9keT4KK3wgICAgIDx0cj4KK3wgICAgICAg
PHRkPgorfCAgICAgICAgIDxibG9ja3F1b3RlPgorfCAgICAgICAgICAgIjwjc2VsZWN0aW9uLWFu
Y2hvcj5oZWxsbzwjc2VsZWN0aW9uLWZvY3VzPiIKK3wgICAgICAgPHRkPgorfCAgICAgICAgICJ3
b3JsZCIKK3wgIgorIgorCitGb3JtYXR0aW5nOgorfCAiCisiCit8IDx0YWJsZT4KK3wgICA8dGJv
ZHk+Cit8ICAgICA8dHI+Cit8ICAgICAgIDx0ZD4KK3wgICAgICAgICA8cD4KK3wgICAgICAgICAg
ICI8I3NlbGVjdGlvbi1hbmNob3I+aGVsbG8iCit8ICAgICAgICAgPGRpdj4KK3wgICAgICAgICAg
ICJ3b3JsZDwjc2VsZWN0aW9uLWZvY3VzPiIKK3wgICAgICAgPHRkPgorfCAgICAgICAgICJXZWJL
aXQiCit8ICIKKyIKKworYnkgaDMgeWllbGRzOgorfCAiCisiCit8IDx0YWJsZT4KK3wgICA8dGJv
ZHk+Cit8ICAgICA8dHI+Cit8ICAgICAgIDx0ZD4KK3wgICAgICAgICA8aDM+Cit8ICAgICAgICAg
ICAiPCNzZWxlY3Rpb24tYW5jaG9yPmhlbGxvIgorfCAgICAgICAgICAgPGJyPgorfCAgICAgICAg
ICAgIndvcmxkPCNzZWxlY3Rpb24tZm9jdXM+IgorfCAgICAgICA8dGQ+Cit8ICAgICAgICAgIldl
YktpdCIKK3wgIgorIgorCitGb3JtYXR0aW5nOgorfCAiCisiCit8IDx0YWJsZT4KK3wgICA8dGJv
ZHk+Cit8ICAgICA8dHI+Cit8ICAgICAgIDx0ZD4KK3wgICAgICAgICA8dWw+Cit8ICAgICAgICAg
ICA8bGk+Cit8ICAgICAgICAgICAgICI8I3NlbGVjdGlvbi1hbmNob3I+aGVsbG8iCit8ICAgICAg
ICAgICA8bGk+Cit8ICAgICAgICAgICAgICJ3b3JsZDwjc2VsZWN0aW9uLWZvY3VzPiIKK3wgICAg
ICAgPHRkPgorfCAgICAgICAgICJXZWJLaXQiCit8ICIKKyIKKworYnkgYWRkcmVzcyB5aWVsZHM6
Cit8ICIKKyIKK3wgPHRhYmxlPgorfCAgIDx0Ym9keT4KK3wgICAgIDx0cj4KK3wgICAgICAgPHRk
PgorfCAgICAgICAgIDxhZGRyZXNzPgorfCAgICAgICAgICAgPHVsPgorfCAgICAgICAgICAgICA8
bGk+Cit8ICAgICAgICAgICAgICAgIjwjc2VsZWN0aW9uLWFuY2hvcj5oZWxsbyIKK3wgICAgICAg
ICAgIDx1bD4KK3wgICAgICAgICAgICAgPGxpPgorfCAgICAgICAgICAgICAgICJ3b3JsZDwjc2Vs
ZWN0aW9uLWZvY3VzPiIKK3wgICAgICAgPHRkPgorfCAgICAgICAgICJXZWJLaXQiCit8ICIKKyIK
SW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvZm9ybWF0LWJsb2NrLXRhYmxl
Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9mb3Jt
YXQtYmxvY2stdGFibGUuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2VkaXRpbmcv
ZXhlY0NvbW1hbmQvZm9ybWF0LWJsb2NrLXRhYmxlLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNDIgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIu
Li8uLi9yZXNvdXJjZXMvZHVtcC1hcy1tYXJrdXAuanMiPjwvc2NyaXB0PgorPGRpdiBpZD0idGVz
dDAiIGNvbnRlbnRlZGl0YWJsZT4KKzx0YWJsZT48dHI+PHRkPmhlbGxvPC90ZD48dGQ+d29ybGQ8
L3RkPjwvdHI+PC90YWJsZT4KKzwvZGl2PgorPGRpdiBpZD0idGVzdDEiIGNvbnRlbnRlZGl0YWJs
ZT4KKzx0YWJsZT48dHI+PHRkPmhlbGxvPC90ZD48dGQ+d29ybGQ8L3RkPjwvdHI+PC90YWJsZT4K
KzwvZGl2PgorPGRpdiBpZD0idGVzdDIiIGNvbnRlbnRlZGl0YWJsZT4KKzx0YWJsZT48dHI+PHRk
PjxwPmhlbGxvPC9wPjxkaXY+d29ybGQ8L2Rpdj48L3RkPjx0ZD5XZWJLaXQ8L3RkPjwvdHI+PC90
YWJsZT4KKzwvZGl2PgorPGRpdiBpZD0idGVzdDMiIGNvbnRlbnRlZGl0YWJsZT4KKzx0YWJsZT48
dHI+PHRkPjx1bD48bGk+aGVsbG88L2xpPjxsaT53b3JsZDwvbGk+PC91bD48L3RkPjx0ZD5XZWJL
aXQ8L3RkPjwvdHI+PC90YWJsZT4KKzwvZGl2PgorPHNjcmlwdD4KKworZnVuY3Rpb24gdGVzdElu
ZGVudGF0aW9uKGNvbnRhaW5lcklkLCBzZWxlY3RvciwgdmFsdWUpIHsKKyAgICB2YXIgY29udGFp
bmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoY29udGFpbmVySWQpOworICAgIHNlbGVjdG9y
KGNvbnRhaW5lcik7CisgICAgTWFya3VwLmR1bXAoY29udGFpbmVyLCAnRm9ybWF0dGluZycpOwor
ICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdGb3JtYXRCbG9jaycsIGZhbHNlLCB2YWx1ZSk7Cisg
ICAgTWFya3VwLmR1bXAoY29udGFpbmVyLCAnYnkgJyArIHZhbHVlICsgJyB5aWVsZHMnKTsKK30K
KworZnVuY3Rpb24gc2VsZWN0QWxsKGNvbnRhaW5lcikgeworICAgIHdpbmRvdy5nZXRTZWxlY3Rp
b24oKS5zZWxlY3RBbGxDaGlsZHJlbihjb250YWluZXIpOworfQorCitmdW5jdGlvbiBzZWxlY3RG
aXJzdENlbGwoY29udGFpbmVyKSB7CisgICAgd2luZG93LmdldFNlbGVjdGlvbigpLnNlbGVjdEFs
bENoaWxkcmVuKGNvbnRhaW5lci5nZXRFbGVtZW50c0J5VGFnTmFtZSgndGQnKVswXSk7Cit9CisK
K3Rlc3RJbmRlbnRhdGlvbigndGVzdDAnLCBzZWxlY3RBbGwsICdwJyk7Cit0ZXN0SW5kZW50YXRp
b24oJ3Rlc3QxJywgc2VsZWN0Rmlyc3RDZWxsLCAnYmxvY2txdW90ZScpOwordGVzdEluZGVudGF0
aW9uKCd0ZXN0MicsIHNlbGVjdEZpcnN0Q2VsbCwgJ2gzJyk7Cit0ZXN0SW5kZW50YXRpb24oJ3Rl
c3QzJywgc2VsZWN0Rmlyc3RDZWxsLCAnYWRkcmVzcycpOworCis8L3NjcmlwdD4KKzwvYm9keT4K
KzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvZm9ybWF0LWJs
b2NrLXdpdGgtYnJhY2VzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9l
ZGl0aW5nL2V4ZWNDb21tYW5kL2Zvcm1hdC1ibG9jay13aXRoLWJyYWNlcy1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDY5NjQxKQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9mb3Jt
YXQtYmxvY2std2l0aC1icmFjZXMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xNiw1
ICsxNiw2IEBAIEZvcm1hdCBNZQogCiBBZnRlciBGb3JtYXRCbG9jayB3aXRoIDxoMT46CiB8IDxo
MT4KLXwgICAiPCNzZWxlY3Rpb24tY2FyZXQ+Rm9ybWF0IE1lIgotfCAgIDxicj4KK3wgICAiCis8
I3NlbGVjdGlvbi1jYXJldD5Gb3JtYXQgTWUKKyIKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvaHRt
bC9uYXYtZWxlbWVudC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC9odG1sL25hdi1lbGVtZW50LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNjk2NDEpCisrKyBMYXlv
dXRUZXN0cy9mYXN0L2h0bWwvbmF2LWVsZW1lbnQtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkp
CkBAIC0yNCw1ICsyNCw3IEBAIERPTSBmb3IgdGhlIGFib3ZlIChzbyB0aGlzIHRlc3QgY2FuIGR1
bXAKIAogPHA+PGJyPjwvcD4KIAotPGRpdiBjb250ZW50ZWRpdGFibGU9InRydWUiIGlkPSJlZGl0
YWJsZSI+PG5hdj5UZXN0IG9mIEZvcm1hdEJsb2NrIGJlaGF2aW9yLiBUaGlzIHRleHQgc2hvdWxk
IGhhdmUgYSBncmVlbiBib3JkZXIuPGJyPjwvbmF2PjwvZGl2PgorPGRpdiBjb250ZW50ZWRpdGFi
bGU9InRydWUiIGlkPSJlZGl0YWJsZSI+PG5hdj4KK1Rlc3Qgb2YgRm9ybWF0QmxvY2sgYmVoYXZp
b3IuIFRoaXMgdGV4dCBzaG91bGQgaGF2ZSBhIGdyZWVuIGJvcmRlci4KKzwvbmF2PjwvZGl2Pgog
Cg==
</data>
<flag name="review"
          id="60448"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>