<?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>47233</bug_id>
          
          <creation_ts>2010-10-05 17:41:59 -0700</creation_ts>
          <short_desc>REGRESSION: Indenting pre duplicates content</short_desc>
          <delta_ts>2010-10-07 19:18:15 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P1</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>19795</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>enrica</cc>
    
    <cc>eric</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>289997</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-10-05 17:41:59 -0700</bug_when>
    <thetext>Reproduction steps:
1. Go to http://www.mozilla.org/editor/midasdemo/ and type in the following in HTML source mode:
&lt;pre&gt;
hello
world
&lt;/pre&gt;
2. Back to WYSIWYG mode and select all

Expected result:
&lt;blockquote&gt;
&lt;pre&gt;
hello
world
&lt;/pre&gt;
&lt;/blockquote&gt;

Actual result:
&lt;blockquote class=&quot;webkit-indent-blockquote&quot; style=&quot;margin: 0 0 0 40px; border: none; padding: 0px;&quot;&gt;&lt;pre&gt;hello
world
&lt;/pre&gt;&lt;pre&gt;world
&lt;/pre&gt;&lt;/blockquote&gt;&lt;pre&gt;worl&lt;br&gt;d
&lt;/pre&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290003</commentid>
    <comment_count>1</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-10-05 17:50:46 -0700</bug_when>
    <thetext>This is probably a consequence of https://bugs.webkit.org/show_bug.cgi?id=38231, but I&apos;m not sure it&apos;s a regression.  Previously, we would crash.

I&apos;m impressed that we can put a &lt;br&gt; in the middle of a word.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290042</commentid>
    <comment_count>2</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-10-05 19:30:41 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; This is probably a consequence of https://bugs.webkit.org/show_bug.cgi?id=38231, but I&apos;m not sure it&apos;s a regression.  Previously, we would crash.
&gt; 
&gt; I&apos;m impressed that we can put a &lt;br&gt; in the middle of a word.

I don&apos;t think your patch caused this regression. It&apos;s probably mine when I attempted to rewrite IndentOutdentCommand last year.  Thanks for the info.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291160</commentid>
    <comment_count>3</comment_count>
      <attachid>70125</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-10-07 11:29:49 -0700</bug_when>
    <thetext>Created attachment 70125
fixes the bug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291172</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-10-07 12:00:09 -0700</bug_when>
    <thetext>Attachment 70125 did not build on mac:
Build output: http://queues.webkit.org/results/4154118</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291200</commentid>
    <comment_count>5</comment_count>
      <attachid>70134</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-10-07 12:51:12 -0700</bug_when>
    <thetext>Created attachment 70134
fixes the bug; fixed release build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291288</commentid>
    <comment_count>6</comment_count>
      <attachid>70134</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-10-07 15:32:05 -0700</bug_when>
    <thetext>Comment on attachment 70134
fixes the bug; fixed release build

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

Overall, this looks great.  Using explicit start and end positions is a lot better than passing in the end of a paragraph and using prev/next paragraph.  r- because of function naming.

&gt; WebCore/ChangeLog:22
&gt; +        (WebCore::ApplyBlockElementCommand::rangeForParagraphSplitingTextNodesIfNeeded): Added.

Nit: Splitting is spelled wrong.

&gt; WebCore/editing/ApplyBlockElementCommand.cpp:151
&gt; +static UChar charAtPosition(const Position&amp; position)

Do you plan on check for a char other than &apos;\n&apos;?  If not, you could simplify the callers by just making this function isNewlineCharAtPosition.

&gt; WebCore/editing/ApplyBlockElementCommand.cpp:213
&gt; +        // If start is in the middle of a text node, split.

Nit: If *end* is . . .

&gt; LayoutTests/editing/execCommand/indent-pre-expected.txt:4
&gt; +CONSOLE MESSAGE: line 41: Wrong end node type: [object HTMLBRElement]
&gt; +CONSOLE MESSAGE: line 44: Wrong node selected.

Is this change intentional?

Would extra tests with &lt;pre&gt; and &lt;table&gt; be useful at this point?  Maybe it should just be a follow up patch.

&gt; LayoutTests/editing/execCommand/indent-pre-expected.txt:49
&gt; +|               &quot;list two&quot;
&gt; +|               &lt;br&gt;
&gt; +|               &quot;list three&quot;
&gt; +|               &lt;br&gt;

The additional &lt;br&gt;s look weird, but I guess it&apos;s harmless.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291303</commentid>
    <comment_count>7</comment_count>
      <attachid>70163</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-10-07 16:07:41 -0700</bug_when>
    <thetext>Created attachment 70163
fixed per tony&apos;s comment</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291307</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-10-07 16:15:42 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; &gt; WebCore/ChangeLog:22
&gt; &gt; +        (WebCore::ApplyBlockElementCommand::rangeForParagraphSplitingTextNodesIfNeeded): Added.
&gt; Nit: Splitting is spelled wrong.

Oops, fixed.

&gt; &gt; WebCore/editing/ApplyBlockElementCommand.cpp:151
&gt; &gt; +static UChar charAtPosition(const Position&amp; position)
&gt; 
&gt; Do you plan on check for a char other than &apos;\n&apos;?  If not, you could simplify the callers by just making this function isNewlineCharAtPosition.

Good idea.  I had the exact function sometime in the past but I had to generalize it to deal with some fix that ended up not being in the final patch.  Fixed.

&gt; &gt; WebCore/editing/ApplyBlockElementCommand.cpp:213
&gt; &gt; +        // If start is in the middle of a text node, split.
&gt; 
&gt; Nit: If *end* is . . .

Thanks for noticing that.  You can tell my concentration was really low when I added this comment...

&gt; &gt; LayoutTests/editing/execCommand/indent-pre-expected.txt:4
&gt; &gt; +CONSOLE MESSAGE: line 41: Wrong end node type: [object HTMLBRElement]
&gt; &gt; +CONSOLE MESSAGE: line 44: Wrong node selected.
&gt; 
&gt; Is this change intentional?

No but the test claims that we just need not to crash.  So I think this is okay.  And I think this is related to the following change:

&gt; &gt; LayoutTests/editing/execCommand/indent-pre-expected.txt:49
&gt; &gt; +|               &quot;list two&quot;
&gt; &gt; +|               &lt;br&gt;
&gt; &gt; +|               &quot;list three&quot;
&gt; &gt; +|               &lt;br&gt;
&gt; 
&gt; The additional &lt;br&gt;s look weird, but I guess it&apos;s harmless.

Yes.  They are visually identical.  I believe this is a bug in moveParagraphWithClones for which I know how to fix it.  But I&apos;d rather not to add any more fixes into one patch since this is purely cosmetic issue, and new behavior is clearly better than duplicating contents.

&gt; Would extra tests with &lt;pre&gt; and &lt;table&gt; be useful at this point?  Maybe it should just be a follow up patch.

I&apos;m not sure if that&apos;ll be useful because we take the same code path.  My fix was mainly splitting text nodes and adjusting nodes for moveParagraphWithClones.  Table only changes the unsplittable element and I don&apos;t think it&apos;s relevant to this change.  The only reason I added list was to make sure two code paths in IndentOutdentCommand each of which calls moveParagraphWithClones have the test coverage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291316</commentid>
    <comment_count>9</comment_count>
      <attachid>70163</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-10-07 16:27:46 -0700</bug_when>
    <thetext>Comment on attachment 70163
fixed per tony&apos;s comment

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

&gt; WebCore/WebCore.xcodeproj/project.pbxproj:-21153
&gt; -			developmentRegion = English;

Nit: It&apos;s probably best to remove this change when committing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291329</commentid>
    <comment_count>10</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-10-07 16:55:15 -0700</bug_when>
    <thetext>Committed r69354: &lt;http://trac.webkit.org/changeset/69354&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291343</commentid>
    <comment_count>11</comment_count>
      <attachid>70163</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-10-07 17:26:53 -0700</bug_when>
    <thetext>Comment on attachment 70163
fixed per tony&apos;s comment

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

&gt; WebCore/editing/ApplyBlockElementCommand.cpp:117
&gt; +        Position start;
&gt; +        Position end;

Sorry, I just noticed this:
You might want to declare these outside the loop so we don&apos;t have to run the constructor/destructor on each loop.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291368</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-07 18:11:20 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/69354 might have broken GTK Linux 32-bit Release</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291375</commentid>
    <comment_count>13</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-10-07 18:25:40 -0700</bug_when>
    <thetext>Thanks for the review, Tony.  I can finally fix the 19795!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291399</commentid>
    <comment_count>14</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-10-07 19:18:15 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 70163 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=70163&amp;action=review
&gt; 
&gt; &gt; WebCore/editing/ApplyBlockElementCommand.cpp:117
&gt; &gt; +        Position start;
&gt; &gt; +        Position end;
&gt; 
&gt; Sorry, I just noticed this:
&gt; You might want to declare these outside the loop so we don&apos;t have to run the constructor/destructor on each loop.

Oops, I missed this comment.  I&apos;ll fix this in my patch for the bug 19795.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70125</attachid>
            <date>2010-10-07 11:29:49 -0700</date>
            <delta_ts>2010-10-07 12:51:07 -0700</delta_ts>
            <desc>fixes the bug</desc>
            <filename>bug-47233-20101007112947.patch</filename>
            <type>text/plain</type>
            <size>31254</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2OTMxOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzYgQEAKKzIwMTAtMTAtMDcgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUkVH
UkVTU0lPTjogSW5kZW50aW5nIHByZSBkdXBsaWNhdGVzIGNvbnRlbnQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3MjMzCisKKyAgICAgICAgVGhlIGJ1
ZyB3YXMgY2F1c2VkIGJ5IG91ciBub3Qgc3BsaXR0aW5nIHRleHQgbm9kZXMgcHJvcGVybHkuCisK
KyAgICAgICAgSW4gbmV3IGFwcHJvYWNoLCB3ZSBzcGxpdCB0ZXh0IG5vZGVzIGluIGVhY2ggaXRl
cmF0aW9uLiBBZGRlZCByYW5nZUZvclBhcmFncmFwaFNwbGl0aW5nVGV4dE5vZGVzSWZOZWVkZWQK
KyAgICAgICAgdG8gc3BsaXQgdGV4dCBub2RlcyBhdCB0aGUgc3RhcnQgYW5kIGF0IHRoZSBlbmQg
b2YgcGFyYWdyYXBoLCB3aGljaCBhbHNvIGFkanVzdHMgc3RhcnQgYW5kIGVuZCBwb3NpdGlvbnMK
KyAgICAgICAgZm9yIG1vdmVQYXJhZ3JhcGhXaXRoQ2xvbmVzLiBBZGRlZCBlbmRPZk5leHRQYXJh
Z3JhaFNwbGl0dGluZ1RleHROb2Rlc0lmTmVlZGVkIHRvIGFkanVzdCBlbmRPZk5leHRQYXJhZ3Jh
cGgsCisgICAgICAgIHN0YXJ0LCBhbmQgZW5kIHRvIHdvcmstYXJvdW5kIG1vdmVQYXJhZ3JhcGhX
aXRoQ2xvbmVzJ3MgcmVtb3ZpbmcgYSBsaW5lIGZlZWQuCisKKyAgICAgICAgVGVzdHM6IGVkaXRp
bmcvZXhlY0NvbW1hbmQvaW5kZW50LXByZS1saXN0Lmh0bWwKKyAgICAgICAgICAgICAgIGVkaXRp
bmcvZXhlY0NvbW1hbmQvaW5kZW50LXByZS1wYXJhZ3JhcGhzLmh0bWwKKworICAgICAgICAqIGVk
aXRpbmcvQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGx5QmxvY2tFbGVtZW50Q29tbWFuZDo6Zm9ybWF0U2VsZWN0aW9uKTogU2VlIGFib3ZlLgorICAg
ICAgICAoV2ViQ29yZTo6Y2hhckF0UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6aXNQb3Np
dGlvbkluc2lkZVRleHROb2RlV2l0aFJlbmRlclN0eWxlKTogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpBcHBseUJsb2NrRWxlbWVudENvbW1hbmQ6OnJhbmdlRm9yUGFyYWdyYXBoU3BsaXRpbmdU
ZXh0Tm9kZXNJZk5lZWRlZCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlCbG9ja0Vs
ZW1lbnRDb21tYW5kOjplbmRPZk5leHRQYXJhZ3JhaFNwbGl0dGluZ1RleHROb2Rlc0lmTmVlZGVk
KTogQWRkZWQuCisgICAgICAgICogZWRpdGluZy9BcHBseUJsb2NrRWxlbWVudENvbW1hbmQuaDoK
KyAgICAgICAgKiBlZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpGb3JtYXRCbG9ja0NvbW1hbmQ6OmZvcm1hdFJhbmdlKTogVGFrZXMgdHdvIFBvc2l0aW9u
cyBpbnN0ZWFkIG9mIG9uZSBWaXNpYmxlUG9zaXRpb24uCisgICAgICAgICogZWRpdGluZy9Gb3Jt
YXRCbG9ja0NvbW1hbmQuaDoKKyAgICAgICAgKiBlZGl0aW5nL0luZGVudE91dGRlbnRDb21tYW5k
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluZGVudE91dGRlbnRDb21tYW5kOjp0cnlJbmRlbnRp
bmdBc0xpc3RJdGVtKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpJbmRlbnRPdXRkZW50Q29t
bWFuZDo6aW5kZW50SW50b0Jsb2NrcXVvdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Oklu
ZGVudE91dGRlbnRDb21tYW5kOjpmb3JtYXRSYW5nZSk6IERpdHRvLgorICAgICAgICAqIGVkaXRp
bmcvSW5kZW50T3V0ZGVudENvbW1hbmQuaDoKKwogMjAxMC0xMC0wNyAgRGF2aWQgSHlhdHQgIDxo
eWF0dEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFuIEJlcm5zdGVpbi4KSW5k
ZXg6IFdlYkNvcmUvZWRpdGluZy9BcHBseUJsb2NrRWxlbWVudENvbW1hbmQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9BcHBseUJsb2NrRWxlbWVudENvbW1hbmQuY3BwCShyZXZp
c2lvbiA2OTE0OCkKKysrIFdlYkNvcmUvZWRpdGluZy9BcHBseUJsb2NrRWxlbWVudENvbW1hbmQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwyMiArMzgsNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwotICAgIAotLy8gVGhpcyBmdW5jdGlvbiBj
YW4gcmV0dXJuIC0xIGlmIHdlIGFyZSB1bmFibGUgdG8gY291bnQgdGhlIHBhcmFncmFwaHMgYmV0
d2VlbiB8c3RhcnR8IGFuZCB8ZW5kfC4KLXN0YXRpYyBpbnQgY291bnRQYXJhZ3JhcGhzKGNvbnN0
IFZpc2libGVQb3NpdGlvbiYgZW5kT2ZGaXJzdFBhcmFncmFwaCwgY29uc3QgVmlzaWJsZVBvc2l0
aW9uJiBlbmRPZkxhc3RQYXJhZ3JhcGgpCi17Ci0gICAgaW50IGNvdW50ID0gMDsKLSAgICBWaXNp
YmxlUG9zaXRpb24gY3VyID0gZW5kT2ZGaXJzdFBhcmFncmFwaDsKLSAgICB3aGlsZSAoY3VyICE9
IGVuZE9mTGFzdFBhcmFncmFwaCkgewotICAgICAgICArK2NvdW50OwotICAgICAgICBjdXIgPSBl
bmRPZlBhcmFncmFwaChjdXIubmV4dCgpKTsKLSAgICAgICAgLy8gSWYgc3RhcnQgaXMgYmVmb3Jl
IGEgdGFibGUgYW5kIGVuZCBpcyBpbnNpZGUgYSB0YWJsZSwgd2Ugd2lsbCBuZXZlciBoaXQgZW5k
IGJlY2F1c2UgdGhlCi0gICAgICAgIC8vIHdob2xlIHRhYmxlIGlzIGNvbnNpZGVyZWQgYSBzaW5n
bGUgcGFyYWdyYXBoLgotICAgICAgICBpZiAoY3VyLmlzTnVsbCgpKQotICAgICAgICAgICAgcmV0
dXJuIC0xOwotICAgIH0KLSAgICByZXR1cm4gY291bnQ7Ci19CiAKIEFwcGx5QmxvY2tFbGVtZW50
Q29tbWFuZDo6QXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kKERvY3VtZW50KiBkb2N1bWVudCwgY29u
c3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiBjbGFzc05hbWUs
IGNvbnN0IEF0b21pY1N0cmluZyYgaW5saW5lU3R5bGUpCiAgICAgOiBDb21wb3NpdGVFZGl0Q29t
bWFuZChkb2N1bWVudCkKQEAgLTEyNSwzMCArMTA5LDI0IEBAIHZvaWQgQXBwbHlCbG9ja0VsZW1l
bnRDb21tYW5kOjpmb3JtYXRTZWwKICAgICBSZWZQdHI8RWxlbWVudD4gYmxvY2txdW90ZUZvck5l
eHRJbmRlbnQ7CiAgICAgVmlzaWJsZVBvc2l0aW9uIGVuZE9mQ3VycmVudFBhcmFncmFwaCA9IGVu
ZE9mUGFyYWdyYXBoKHN0YXJ0T2ZTZWxlY3Rpb24pOwogICAgIFZpc2libGVQb3NpdGlvbiBlbmRB
ZnRlclNlbGVjdGlvbiA9IGVuZE9mUGFyYWdyYXBoKGVuZE9mUGFyYWdyYXBoKGVuZE9mU2VsZWN0
aW9uKS5uZXh0KCkpOwotICAgIGludCBlbmRPZkN1cnJlbnRQYXJhZ3JhcGhJbmRleCA9IGluZGV4
Rm9yVmlzaWJsZVBvc2l0aW9uKGVuZE9mQ3VycmVudFBhcmFncmFwaCk7Ci0gICAgaW50IGVuZEFm
dGVyU2VsZWN0aW9uSW5kZXggPSBpbmRleEZvclZpc2libGVQb3NpdGlvbihlbmRBZnRlclNlbGVj
dGlvbik7CisgICAgVmlzaWJsZVBvc2l0aW9uIGVuZE9mTGFzdFBhcmFncmFwaCA9IGVuZE9mUGFy
YWdyYXBoKGVuZE9mU2VsZWN0aW9uKTsKIAotICAgIC8vIFdoZW4gaW5kZW50aW5nIHdpdGhpbiBh
IDxwcmU+IHRhZywgd2UgbmVlZCB0byBzcGxpdCBlYWNoIHBhcmFncmFwaCBpbnRvIGEgc2VwYXJh
dGUgbm9kZSBmb3IgbW92ZVBhcmFncmFwaFdpdGhDbG9uZXMgdG8gd29yay4KLSAgICAvLyBIb3dl
dmVyLCBzcGxpdHRpbmcgdGV4dCBub2RlcyBjYW4gY2F1c2UgZW5kT2ZDdXJyZW50UGFyYWdyYXBo
IGFuZCBlbmRBZnRlclNlbGVjdGlvbiB0byBwb2ludCB0byBhbiBpbnZhbGlkIHBvc2l0aW9uIGlm
IHdlCi0gICAgLy8gY2hhbmdlZCB0aGUgdGV4dCBub2RlIGl0IHdhcyBwb2ludGluZyBhdC4gIFNv
IHdlIGhhdmUgdG8gcmVzZXQgdGhlc2UgcG9zaXRpb25zLgotICAgIGludCBudW1QYXJhZ3JhcGhz
ID0gY291bnRQYXJhZ3JhcGhzKGVuZE9mQ3VycmVudFBhcmFncmFwaCwgZW5kQWZ0ZXJTZWxlY3Rp
b24pOwotICAgIGlmIChzcGxpdFRleHROb2RlcyhzdGFydE9mUGFyYWdyYXBoKHN0YXJ0T2ZTZWxl
Y3Rpb24pLCBudW1QYXJhZ3JhcGhzICsgMSkpIHsKLSAgICAgICAgUmVmUHRyPFJhbmdlPiBlbmRP
ZkN1cnJlbnRQYXJhZ3JhcGhSYW5nZSA9IFRleHRJdGVyYXRvcjo6cmFuZ2VGcm9tTG9jYXRpb25B
bmRMZW5ndGgoZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCksIGVuZE9mQ3VycmVudFBhcmFn
cmFwaEluZGV4LCAwLCB0cnVlKTsKLSAgICAgICAgUmVmUHRyPFJhbmdlPiBlbmRBZnRlclNlbGVj
dGlvblJhbmdlID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aChkb2N1
bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSwgZW5kQWZ0ZXJTZWxlY3Rpb25JbmRleCwgMCwgdHJ1
ZSk7Ci0gICAgICAgIGlmICghZW5kT2ZDdXJyZW50UGFyYWdyYXBoUmFuZ2UuZ2V0KCkgfHwgIWVu
ZEFmdGVyU2VsZWN0aW9uUmFuZ2UuZ2V0KCkpIHsKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGVuZE9mQ3Vy
cmVudFBhcmFncmFwaCA9IFZpc2libGVQb3NpdGlvbihlbmRPZkN1cnJlbnRQYXJhZ3JhcGhSYW5n
ZS0+c3RhcnRQb3NpdGlvbigpLCBET1dOU1RSRUFNKTsKLSAgICAgICAgZW5kQWZ0ZXJTZWxlY3Rp
b24gPSBWaXNpYmxlUG9zaXRpb24oZW5kQWZ0ZXJTZWxlY3Rpb25SYW5nZS0+c3RhcnRQb3NpdGlv
bigpLCBET1dOU1RSRUFNKTsKLSAgICB9CisgICAgYm9vbCBhdEVuZCA9IGZhbHNlOworICAgIHdo
aWxlIChlbmRPZkN1cnJlbnRQYXJhZ3JhcGggIT0gZW5kQWZ0ZXJTZWxlY3Rpb24gJiYgIWF0RW5k
KSB7CisgICAgICAgIFBvc2l0aW9uIHN0YXJ0OworICAgICAgICBQb3NpdGlvbiBlbmQ7CiAKLSAg
ICB3aGlsZSAoZW5kT2ZDdXJyZW50UGFyYWdyYXBoICE9IGVuZEFmdGVyU2VsZWN0aW9uKSB7Ci0g
ICAgICAgIC8vIEl0ZXJhdGUgYWNyb3NzIHRoZSBzZWxlY3RlZCBwYXJhZ3JhcGhzLi4uCi0gICAg
ICAgIFZpc2libGVQb3NpdGlvbiBlbmRPZk5leHRQYXJhZ3JhcGggPSBlbmRPZlBhcmFncmFwaChl
bmRPZkN1cnJlbnRQYXJhZ3JhcGgubmV4dCgpKTsKKyAgICAgICAgaWYgKGVuZE9mQ3VycmVudFBh
cmFncmFwaCA9PSBlbmRPZkxhc3RQYXJhZ3JhcGgpCisgICAgICAgICAgICBhdEVuZCA9IHRydWU7
CisKKyAgICAgICAgcmFuZ2VGb3JQYXJhZ3JhcGhTcGxpdGluZ1RleHROb2Rlc0lmTmVlZGVkKGVu
ZE9mQ3VycmVudFBhcmFncmFwaCwgc3RhcnQsIGVuZCk7CisgICAgICAgIGVuZE9mQ3VycmVudFBh
cmFncmFwaCA9IGVuZDsKKworICAgICAgICBQb3NpdGlvbiBhZnRlckVuZCA9IGVuZC5uZXh0KCk7
CiAgICAgICAgIE5vZGUqIGVuY2xvc2luZ0NlbGwgPSBlbmNsb3NpbmdOb2RlT2ZUeXBlKHN0YXJ0
LCAmaXNUYWJsZUNlbGwpOworICAgICAgICBWaXNpYmxlUG9zaXRpb24gZW5kT2ZOZXh0UGFyYWdy
YXBoID0gZW5kT2ZOZXh0UGFyYWdyYWhTcGxpdHRpbmdUZXh0Tm9kZXNJZk5lZWRlZChlbmRPZkN1
cnJlbnRQYXJhZ3JhcGgsIHN0YXJ0LCBlbmQpOwogCi0gICAgICAgIGZvcm1hdFBhcmFncmFwaChl
bmRPZkN1cnJlbnRQYXJhZ3JhcGgsIGJsb2NrcXVvdGVGb3JOZXh0SW5kZW50KTsKKyAgICAgICAg
Zm9ybWF0UmFuZ2Uoc3RhcnQsIGVuZCwgYmxvY2txdW90ZUZvck5leHRJbmRlbnQpOwogCiAgICAg
ICAgIC8vIERvbid0IHB1dCB0aGUgbmV4dCBwYXJhZ3JhcGggaW4gdGhlIGJsb2NrcXVvdGUgd2Ug
anVzdCBjcmVhdGVkIGZvciB0aGlzIHBhcmFncmFwaCB1bmxlc3MgCiAgICAgICAgIC8vIHRoZSBu
ZXh0IHBhcmFncmFwaCBpcyBpbiB0aGUgc2FtZSBjZWxsLgpAQCAtMTcwLDYgKzE0OCwxMDQgQEAg
dm9pZCBBcHBseUJsb2NrRWxlbWVudENvbW1hbmQ6OmZvcm1hdFNlbAogICAgIH0KIH0KIAorc3Rh
dGljIFVDaGFyIGNoYXJBdFBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikKK3sKKyAg
ICBpZiAocG9zaXRpb24uYW5jaG9yVHlwZSgpICE9IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0
SW5BbmNob3IpCisgICAgICAgIHJldHVybiAwOworCisgICAgTm9kZSogdGV4dE5vZGUgPSBwb3Np
dGlvbi5jb250YWluZXJOb2RlKCk7CisgICAgaW50IG9mZnNldCA9IHBvc2l0aW9uLm9mZnNldElu
Q29udGFpbmVyTm9kZSgpOworICAgIGlmICghdGV4dE5vZGUgfHwgIXRleHROb2RlLT5pc1RleHRO
b2RlKCkgfHwgb2Zmc2V0IDwgMCB8fCBvZmZzZXQgPj0gdGV4dE5vZGUtPm1heENoYXJhY3Rlck9m
ZnNldCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwor
ICAgIFN0cmluZyB0ZXh0QXRQb3NpdGlvbiA9IHN0YXRpY19jYXN0PFRleHQqPih0ZXh0Tm9kZSkt
PnN1YnN0cmluZ0RhdGEob2Zmc2V0LCAxLCBlYyk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIHJldHVybiB0ZXh0QXRQb3NpdGlvblswXTsKK30KKworc3RhdGljIGJvb2wg
aXNQb3NpdGlvbkluc2lkZVRleHROb2RlV2l0aFJlbmRlclN0eWxlKGNvbnN0IFBvc2l0aW9uJiBw
b3NpdGlvbikKK3sKKyAgICByZXR1cm4gcG9zaXRpb24uYW5jaG9yVHlwZSgpID09IFBvc2l0aW9u
OjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IKKyAgICAgICAgJiYgcG9zaXRpb24uY29udGFpbmVy
Tm9kZSgpCisgICAgICAgICYmIHBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKS0+aXNUZXh0Tm9kZSgp
CisgICAgICAgICYmIHBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKS0+cmVuZGVyU3R5bGUoKTsKK30K
Kwordm9pZCBBcHBseUJsb2NrRWxlbWVudENvbW1hbmQ6OnJhbmdlRm9yUGFyYWdyYXBoU3BsaXRp
bmdUZXh0Tm9kZXNJZk5lZWRlZChjb25zdCBWaXNpYmxlUG9zaXRpb24mIGVuZE9mQ3VycmVudFBh
cmFncmFwaCwgUG9zaXRpb24mIHN0YXJ0LCBQb3NpdGlvbiYgZW5kKQoreworICAgIHN0YXJ0ID0g
c3RhcnRPZlBhcmFncmFwaChlbmRPZkN1cnJlbnRQYXJhZ3JhcGgpLmRlZXBFcXVpdmFsZW50KCk7
CisgICAgZW5kID0gZW5kT2ZDdXJyZW50UGFyYWdyYXBoLmRlZXBFcXVpdmFsZW50KCk7CisKKyAg
ICBpZiAoaXNQb3NpdGlvbkluc2lkZVRleHROb2RlV2l0aFJlbmRlclN0eWxlKHN0YXJ0KSkgewor
ICAgICAgICAvLyBBdm9pZCBvYnRhbmluaW5nIHRoZSBzdGFydCBvZiBuZXh0IHBhcmFncmFwaCBm
b3Igc3RhcnQKKyAgICAgICAgaWYgKHN0YXJ0LmNvbnRhaW5lck5vZGUoKS0+cmVuZGVyU3R5bGUo
KS0+cHJlc2VydmVOZXdsaW5lKCkgJiYgY2hhckF0UG9zaXRpb24oc3RhcnQpID09ICdcbicKKyAg
ICAgICAgICAgICYmIGNoYXJBdFBvc2l0aW9uKHN0YXJ0LnByZXZpb3VzKCkpICE9ICdcbicgJiYg
c3RhcnQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkgPiAwKQorICAgICAgICAgICAgc3RhcnQgPSBz
dGFydE9mUGFyYWdyYXBoKGVuZC5wcmV2aW91cygpKS5kZWVwRXF1aXZhbGVudCgpOworCisgICAg
ICAgIC8vIElmIHN0YXJ0IGlzIGluIHRoZSBtaWRkbGUgb2YgYSB0ZXh0IG5vZGUsIHNwbGl0Lgor
ICAgICAgICBpZiAoIXN0YXJ0LmNvbnRhaW5lck5vZGUoKS0+cmVuZGVyU3R5bGUoKS0+Y29sbGFw
c2VXaGl0ZVNwYWNlKCkgJiYgc3RhcnQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkgPiAwKSB7Cisg
ICAgICAgICAgICBpbnQgc3RhcnRPZmZzZXQgPSBzdGFydC5vZmZzZXRJbkNvbnRhaW5lck5vZGUo
KTsKKyAgICAgICAgICAgIHNwbGl0VGV4dE5vZGUoc3RhdGljX2Nhc3Q8VGV4dCo+KHN0YXJ0Lm5v
ZGUoKSksIHN0YXJ0T2Zmc2V0KTsKKyAgICAgICAgICAgIHN0YXJ0ID0gcG9zaXRpb25CZWZvcmVO
b2RlKHN0YXJ0Lm5vZGUoKSk7CisgICAgICAgICAgICBpZiAoc3RhcnQubm9kZSgpID09IGVuZC5u
b2RlKCkpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoZW5kLm9mZnNldEluQ29udGFpbmVyTm9k
ZSgpID49IHN0YXJ0T2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBlbmQgPSBQb3NpdGlvbihlbmQu
bm9kZSgpLCBlbmQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkgLSBzdGFydE9mZnNldCwgUG9zaXRp
b246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBpZiAoaXNQb3NpdGlvbkluc2lkZVRleHROb2RlV2l0aFJlbmRlclN0eWxl
KGVuZCkpIHsKKyAgICAgICAgLy8gSW5jbHVkZSBcbiBhdCB0aGUgZW5kIG9mIGxpbmUgaWYgd2Un
cmUgYXQgYW4gZW1wdHkgcGFyYWdyYXBoCisgICAgICAgIGlmIChlbmQuY29udGFpbmVyTm9kZSgp
LT5yZW5kZXJTdHlsZSgpLT5wcmVzZXJ2ZU5ld2xpbmUoKSAmJiBzdGFydCA9PSBlbmQKKyAgICAg
ICAgICAgICYmIGVuZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSA8IGVuZC5jb250YWluZXJOb2Rl
KCktPm1heENoYXJhY3Rlck9mZnNldCgpKSB7CisgICAgICAgICAgICBpbnQgZW5kT2Zmc2V0ID0g
ZW5kLm9mZnNldEluQ29udGFpbmVyTm9kZSgpOworICAgICAgICAgICAgaWYgKCFjaGFyQXRQb3Np
dGlvbihlbmQucHJldmlvdXMoKSkgIT0gJ1xuJyAmJiBjaGFyQXRQb3NpdGlvbihlbmQpID09ICdc
bicpCisgICAgICAgICAgICAgICAgZW5kID0gUG9zaXRpb24oZW5kLm5vZGUoKSwgZW5kT2Zmc2V0
ICsgMSwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcik7CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBJZiBzdGFydCBpcyBpbiB0aGUgbWlkZGxlIG9mIGEgdGV4dCBub2RlLCBzcGxp
dC4KKyAgICAgICAgaWYgKCFlbmQuY29udGFpbmVyTm9kZSgpLT5yZW5kZXJTdHlsZSgpLT5jb2xs
YXBzZVdoaXRlU3BhY2UoKSAmJiBlbmQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkKKyAgICAgICAg
ICAgICYmIGVuZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSA8IGVuZC5jb250YWluZXJOb2RlKCkt
Pm1heENoYXJhY3Rlck9mZnNldCgpKSB7CisgICAgICAgICAgICBzcGxpdFRleHROb2RlKHN0YXRp
Y19jYXN0PFRleHQqPihlbmQubm9kZSgpKSwgZW5kLm9mZnNldEluQ29udGFpbmVyTm9kZSgpKTsK
KyAgICAgICAgICAgIGlmIChzdGFydC5ub2RlKCkgPT0gZW5kLm5vZGUoKSkKKyAgICAgICAgICAg
ICAgICBzdGFydCA9IHBvc2l0aW9uQmVmb3JlTm9kZShlbmQubm9kZSgpLT5wcmV2aW91c1NpYmxp
bmcoKSk7CisgICAgICAgICAgICBlbmQgPSBsYXN0UG9zaXRpb25Jbk5vZGUoZW5kLm5vZGUoKS0+
cHJldmlvdXNTaWJsaW5nKCkpOworICAgICAgICB9CisgICAgfQorfQorCitWaXNpYmxlUG9zaXRp
b24gQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kOjplbmRPZk5leHRQYXJhZ3JhaFNwbGl0dGluZ1Rl
eHROb2Rlc0lmTmVlZGVkKFZpc2libGVQb3NpdGlvbiYgZW5kT2ZDdXJyZW50UGFyYWdyYXBoLCBQ
b3NpdGlvbiYgc3RhcnQsIFBvc2l0aW9uJiBlbmQpCit7CisgICAgVmlzaWJsZVBvc2l0aW9uIGVu
ZE9mTmV4dFBhcmFncmFwaCA9IGVuZE9mUGFyYWdyYXBoKGVuZE9mQ3VycmVudFBhcmFncmFwaC5u
ZXh0KCkpOworICAgIFBvc2l0aW9uIHBvc2l0aW9uID0gZW5kT2ZOZXh0UGFyYWdyYXBoLmRlZXBF
cXVpdmFsZW50KCk7CisgICAgaWYgKCFpc1Bvc2l0aW9uSW5zaWRlVGV4dE5vZGVXaXRoUmVuZGVy
U3R5bGUocG9zaXRpb24pKQorICAgICAgICByZXR1cm4gZW5kT2ZOZXh0UGFyYWdyYXBoOworCisg
ICAgUmVmUHRyPE5vZGU+IGNvbnRhaW5lck5vZGUgPSBwb3NpdGlvbi5jb250YWluZXJOb2RlKCk7
CisgICAgaWYgKCFjb250YWluZXJOb2RlLT5yZW5kZXJTdHlsZSgpLT5wcmVzZXJ2ZU5ld2xpbmUo
KSB8fCBjaGFyQXRQb3NpdGlvbihQb3NpdGlvbihjb250YWluZXJOb2RlLmdldCgpLCAwLCBQb3Np
dGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKSkgIT0gJ1xuJworICAgICAgICB8fCAhcG9z
aXRpb24ub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpCisgICAgICAgIHJldHVybiBlbmRPZk5leHRQ
YXJhZ3JhcGg7CisKKyAgICAvLyBcbiBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0ZXh0IG5vZGUg
aW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoZSBjdXJyZW50IHBhcmFncmFwaCBpcyB0cmltbWVkIGJ5
IG1vdmVQYXJhZ3JhcGhXaXRoQ2xvbmVzLgorICAgIC8vIElmIGVuZE9mTmV4dFBhcmFncmFwaCB3
YXMgcG9pbnRpbmcgYXQgdGhpcyBzYW1lIHRleHQgbm9kZSwgZW5kT2ZOZXh0UGFyYWdyYXBoIHdp
bGwgYmUgc2hpZnRlZCBieSBvbmUgcGFyYWdyYXBoLgorICAgIC8vIEF2b2lkIHRoaXMgYnkgc3Bs
aXR0aW5nICJcbiIKKyAgICBzcGxpdFRleHROb2RlKHN0YXRpY19jYXN0PFRleHQqPihjb250YWlu
ZXJOb2RlLmdldCgpKSwgMSk7CisKKyAgICBpZiAoc3RhcnQuYW5jaG9yVHlwZSgpID09IFBvc2l0
aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IgJiYgY29udGFpbmVyTm9kZS5nZXQoKSA9PSBz
dGFydC5jb250YWluZXJOb2RlKCkpIHsKKyAgICAgICAgQVNTRVJUKHN0YXJ0Lm9mZnNldEluQ29u
dGFpbmVyTm9kZSgpIDwgcG9zaXRpb24ub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpOworICAgICAg
ICBzdGFydCA9IFBvc2l0aW9uKGNvbnRhaW5lck5vZGUtPnByZXZpb3VzU2libGluZygpLCBzdGFy
dC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFu
Y2hvcik7CisgICAgfQorICAgIGlmIChlbmQuYW5jaG9yVHlwZSgpID09IFBvc2l0aW9uOjpQb3Np
dGlvbklzT2Zmc2V0SW5BbmNob3IgJiYgY29udGFpbmVyTm9kZS5nZXQoKSA9PSBlbmQuY29udGFp
bmVyTm9kZSgpKSB7CisgICAgICAgIEFTU0VSVChlbmQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkg
PCBwb3NpdGlvbi5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSk7CisgICAgICAgIGVuZCA9IFBvc2l0
aW9uKGNvbnRhaW5lck5vZGUtPnByZXZpb3VzU2libGluZygpLCBlbmQub2Zmc2V0SW5Db250YWlu
ZXJOb2RlKCksIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpOworICAgIH0KKwor
ICAgIHJldHVybiBQb3NpdGlvbihjb250YWluZXJOb2RlLmdldCgpLCBwb3NpdGlvbi5vZmZzZXRJ
bkNvbnRhaW5lck5vZGUoKSAtIDEsIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3Ip
OworfQorCiBQYXNzUmVmUHRyPEVsZW1lbnQ+IEFwcGx5QmxvY2tFbGVtZW50Q29tbWFuZDo6Y3Jl
YXRlQmxvY2tFbGVtZW50KCkgY29uc3QKIHsKICAgICBSZWZQdHI8RWxlbWVudD4gZWxlbWVudCA9
IGNyZWF0ZUhUTUxFbGVtZW50KGRvY3VtZW50KCksIG1fdGFnTmFtZSk7CkBAIC0xODAsMjcgKzI1
Niw0IEBAIFBhc3NSZWZQdHI8RWxlbWVudD4gQXBwbHlCbG9ja0VsZW1lbnRDb20KICAgICByZXR1
cm4gZWxlbWVudC5yZWxlYXNlKCk7CiB9CiAKLS8vIFJldHVybnMgdHJ1ZSBpZiBhdCBsZWFzdCBv
bmUgdGV4dCBub2RlIHdhcyBzcGxpdC4KLWJvb2wgQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kOjpz
cGxpdFRleHROb2Rlcyhjb25zdCBWaXNpYmxlUG9zaXRpb24mIHN0YXJ0LCBpbnQgbnVtUGFyYWdy
YXBocykKLXsKLSAgICBWaXNpYmxlUG9zaXRpb24gY3VycmVudFBhcmFncmFwaFN0YXJ0ID0gc3Rh
cnQ7Ci0gICAgYm9vbCBoYXNTcGxpdCA9IGZhbHNlOwotICAgIGludCBwYXJhZ3JhcGhDb3VudDsK
LSAgICBmb3IgKHBhcmFncmFwaENvdW50ID0gMDsgcGFyYWdyYXBoQ291bnQgPCBudW1QYXJhZ3Jh
cGhzOyArK3BhcmFncmFwaENvdW50KSB7Ci0gICAgICAgIC8vIElmIHRoZXJlIGFyZSBtdWx0aXBs
ZSBwYXJhZ3JhcGhzIGluIGEgc2luZ2xlIHRleHQgbm9kZSwgd2Ugc3BsaXQgdGhlIHRleHQgbm9k
ZSBpbnRvIGEgc2VwYXJhdGUgbm9kZSBmb3IgZWFjaCBwYXJhZ3JhcGguCi0gICAgICAgIGlmIChj
dXJyZW50UGFyYWdyYXBoU3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCktPmlzVGV4dE5vZGUo
KSAmJiBjdXJyZW50UGFyYWdyYXBoU3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCkgPT0gc3Rh
cnRPZlBhcmFncmFwaChjdXJyZW50UGFyYWdyYXBoU3RhcnQucHJldmlvdXMoKSkuZGVlcEVxdWl2
YWxlbnQoKS5ub2RlKCkpIHsKLSAgICAgICAgICAgIFRleHQqIHRleHROb2RlID0gc3RhdGljX2Nh
c3Q8VGV4dCAqPihjdXJyZW50UGFyYWdyYXBoU3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCkp
OwotICAgICAgICAgICAgaW50IG9mZnNldCA9IGN1cnJlbnRQYXJhZ3JhcGhTdGFydC5kZWVwRXF1
aXZhbGVudCgpLm9mZnNldEluQ29udGFpbmVyTm9kZSgpOwotICAgICAgICAgICAgc3BsaXRUZXh0
Tm9kZSh0ZXh0Tm9kZSwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGN1cnJlbnRQYXJhZ3JhcGhTdGFy
dCA9IFZpc2libGVQb3NpdGlvbih0ZXh0Tm9kZSwgMCwgVlBfREVGQVVMVF9BRkZJTklUWSk7Ci0g
ICAgICAgICAgICBoYXNTcGxpdCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgVmlzaWJsZVBv
c2l0aW9uIG5leHRQYXJhZ3JhcGggPSBzdGFydE9mUGFyYWdyYXBoKGVuZE9mUGFyYWdyYXBoKGN1
cnJlbnRQYXJhZ3JhcGhTdGFydCkubmV4dCgpKTsKLSAgICAgICAgaWYgKG5leHRQYXJhZ3JhcGgu
aXNOdWxsKCkpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY3VycmVudFBhcmFncmFwaFN0
YXJ0ID0gbmV4dFBhcmFncmFwaDsKLSAgICB9Ci0gICAgcmV0dXJuIGhhc1NwbGl0OwotfQotCiB9
CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0FwcGx5QmxvY2tFbGVtZW50Q29tbWFuZC5oCShyZXZp
c2lvbiA2OTE0OCkKKysrIFdlYkNvcmUvZWRpdGluZy9BcHBseUJsb2NrRWxlbWVudENvbW1hbmQu
aAkod29ya2luZyBjb3B5KQpAQCAtNDYsOCArNDYsOSBAQCBwcm90ZWN0ZWQ6CiAKIHByaXZhdGU6
CiAgICAgdmlydHVhbCB2b2lkIGRvQXBwbHkoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZm9ybWF0UGFy
YWdyYXBoKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgZW5kT2ZDdXJyZW50UGFyYWdyYXBoLCBSZWZQ
dHI8RWxlbWVudD4mKSA9IDA7Ci0gICAgYm9vbCBzcGxpdFRleHROb2Rlcyhjb25zdCBWaXNpYmxl
UG9zaXRpb24mIHN0YXJ0LCBpbnQgbnVtUGFyYWdyYXBocyk7CisgICAgdmlydHVhbCB2b2lkIGZv
cm1hdFJhbmdlKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mLCBSZWZQdHI8
RWxlbWVudD4mKSA9IDA7CisgICAgdm9pZCByYW5nZUZvclBhcmFncmFwaFNwbGl0aW5nVGV4dE5v
ZGVzSWZOZWVkZWQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgUG9zaXRpb24mLCBQb3NpdGlvbiYp
OworICAgIFZpc2libGVQb3NpdGlvbiBlbmRPZk5leHRQYXJhZ3JhaFNwbGl0dGluZ1RleHROb2Rl
c0lmTmVlZGVkKFZpc2libGVQb3NpdGlvbiYsIFBvc2l0aW9uJiwgUG9zaXRpb24mKTsKIAogICAg
IFF1YWxpZmllZE5hbWUgbV90YWdOYW1lOwogICAgIEF0b21pY1N0cmluZyBtX2NsYXNzTmFtZTsK
SW5kZXg6IFdlYkNvcmUvZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3BwCShyZXZpc2lvbiA2OTE0
OCkKKysrIFdlYkNvcmUvZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MSwxNiArNDEsMTcgQEAgRm9ybWF0QmxvY2tDb21tYW5kOjpGb3JtYXRCbG9ja0Nv
bW1hbmQoRAogewogfQogCi12b2lkIEZvcm1hdEJsb2NrQ29tbWFuZDo6Zm9ybWF0UGFyYWdyYXBo
KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgZW5kT2ZDdXJyZW50UGFyYWdyYXBoLCBSZWZQdHI8RWxl
bWVudD4mKQordm9pZCBGb3JtYXRCbG9ja0NvbW1hbmQ6OmZvcm1hdFJhbmdlKGNvbnN0IFBvc2l0
aW9uJiwgY29uc3QgUG9zaXRpb24mIGVuZCwgUmVmUHRyPEVsZW1lbnQ+JikKIHsKLSAgICBzZXRF
bmRpbmdTZWxlY3Rpb24oZW5kT2ZDdXJyZW50UGFyYWdyYXBoKTsKKyAgICBzZXRFbmRpbmdTZWxl
Y3Rpb24oVmlzaWJsZVBvc2l0aW9uKGVuZCkpOworCiAgICAgTm9kZSogcmVmTm9kZSA9IGVuY2xv
c2luZ0Jsb2NrRmxvd0VsZW1lbnQoZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkpOwog
ICAgIGlmIChyZWZOb2RlLT5oYXNUYWdOYW1lKHRhZ05hbWUoKSkpCiAgICAgICAgIC8vIFdlJ3Jl
IGFscmVhZHkgaW4gYSBibG9jayB3aXRoIHRoZSBmb3JtYXQgd2Ugd2FudCwgc28gd2UgZG9uJ3Qg
aGF2ZSB0byBkbyBhbnl0aGluZwogICAgICAgICByZXR1cm47CiAKLSAgICBWaXNpYmxlUG9zaXRp
b24gcGFyYWdyYXBoU3RhcnQgPSBzdGFydE9mUGFyYWdyYXBoKGVuZGluZ1NlbGVjdGlvbigpLnZp
c2libGVTdGFydCgpKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gcGFyYWdyYXBoRW5kID0gZW5kT2ZQ
YXJhZ3JhcGgoZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkpOworICAgIFZpc2libGVQ
b3NpdGlvbiBwYXJhZ3JhcGhTdGFydCA9IHN0YXJ0T2ZQYXJhZ3JhcGgoZW5kKTsKKyAgICBWaXNp
YmxlUG9zaXRpb24gcGFyYWdyYXBoRW5kID0gZW5kT2ZQYXJhZ3JhcGgoZW5kKTsKICAgICBWaXNp
YmxlUG9zaXRpb24gYmxvY2tTdGFydCA9IHN0YXJ0T2ZCbG9jayhlbmRpbmdTZWxlY3Rpb24oKS52
aXNpYmxlU3RhcnQoKSk7CiAgICAgVmlzaWJsZVBvc2l0aW9uIGJsb2NrRW5kID0gZW5kT2ZCbG9j
ayhlbmRpbmdTZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKSk7CiAgICAgUmVmUHRyPEVsZW1lbnQ+
IGJsb2NrTm9kZSA9IGNyZWF0ZUJsb2NrRWxlbWVudCgpOwpJbmRleDogV2ViQ29yZS9lZGl0aW5n
L0Zvcm1hdEJsb2NrQ29tbWFuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9Gb3Jt
YXRCbG9ja0NvbW1hbmQuaAkocmV2aXNpb24gNjkxNDgpCisrKyBXZWJDb3JlL2VkaXRpbmcvRm9y
bWF0QmxvY2tDb21tYW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGlj
OgogcHJpdmF0ZToKICAgICBGb3JtYXRCbG9ja0NvbW1hbmQoRG9jdW1lbnQqLCBjb25zdCBRdWFs
aWZpZWROYW1lJiB0YWdOYW1lKTsKIAotICAgIHZpcnR1YWwgdm9pZCBmb3JtYXRQYXJhZ3JhcGgo
Y29uc3QgVmlzaWJsZVBvc2l0aW9uJiBlbmRPZkN1cnJlbnRQYXJhZ3JhcGgsIFJlZlB0cjxFbGVt
ZW50PiYpOworICAgIHZpcnR1YWwgdm9pZCBmb3JtYXRSYW5nZShjb25zdCBQb3NpdGlvbiYsIGNv
bnN0IFBvc2l0aW9uJiwgUmVmUHRyPEVsZW1lbnQ+Jik7CiAgICAgdmlydHVhbCBFZGl0QWN0aW9u
IGVkaXRpbmdBY3Rpb24oKSBjb25zdCB7IHJldHVybiBFZGl0QWN0aW9uRm9ybWF0QmxvY2s7IH0K
IH07CiAKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9JbmRlbnRPdXRkZW50Q29tbWFuZC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0luZGVudE91dGRlbnRDb21tYW5kLmNwcAkocmV2
aXNpb24gNjkxNDgpCisrKyBXZWJDb3JlL2VkaXRpbmcvSW5kZW50T3V0ZGVudENvbW1hbmQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01NiwxMCArNTYsMTAgQEAgSW5kZW50T3V0ZGVudENvbW1hbmQ6
OkluZGVudE91dGRlbnRDb21tYQogewogfQogCi1ib29sIEluZGVudE91dGRlbnRDb21tYW5kOjp0
cnlJbmRlbnRpbmdBc0xpc3RJdGVtKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgZW5kT2ZDdXJyZW50
UGFyYWdyYXBoKQorYm9vbCBJbmRlbnRPdXRkZW50Q29tbWFuZDo6dHJ5SW5kZW50aW5nQXNMaXN0
SXRlbShjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpCiB7CiAgICAg
Ly8gSWYgb3VyIHNlbGVjdGlvbiBpcyBub3QgaW5zaWRlIGEgbGlzdCwgYmFpbCBvdXQuCi0gICAg
Tm9kZSogbGFzdE5vZGVJblNlbGVjdGVkUGFyYWdyYXBoID0gZW5kT2ZDdXJyZW50UGFyYWdyYXBo
LmRlZXBFcXVpdmFsZW50KCkubm9kZSgpOworICAgIE5vZGUqIGxhc3ROb2RlSW5TZWxlY3RlZFBh
cmFncmFwaCA9IHN0YXJ0Lm5vZGUoKTsKICAgICBSZWZQdHI8RWxlbWVudD4gbGlzdE5vZGUgPSBl
bmNsb3NpbmdMaXN0KGxhc3ROb2RlSW5TZWxlY3RlZFBhcmFncmFwaCk7CiAgICAgaWYgKCFsaXN0
Tm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNzgsNyArNzgsNyBAQCBib29sIEluZGVu
dE91dGRlbnRDb21tYW5kOjp0cnlJbmRlbnRpbmdBCiAgICAgUmVmUHRyPEVsZW1lbnQ+IG5ld0xp
c3QgPSBkb2N1bWVudCgpLT5jcmVhdGVFbGVtZW50KGxpc3ROb2RlLT50YWdRTmFtZSgpLCBmYWxz
ZSk7CiAgICAgaW5zZXJ0Tm9kZUJlZm9yZShuZXdMaXN0LCBzZWxlY3RlZExpc3RJdGVtKTsKIAot
ICAgIG1vdmVQYXJhZ3JhcGhXaXRoQ2xvbmVzKHN0YXJ0T2ZQYXJhZ3JhcGgoZW5kT2ZDdXJyZW50
UGFyYWdyYXBoKSwgZW5kT2ZDdXJyZW50UGFyYWdyYXBoLCBuZXdMaXN0LmdldCgpLCBzZWxlY3Rl
ZExpc3RJdGVtKTsKKyAgICBtb3ZlUGFyYWdyYXBoV2l0aENsb25lcyhzdGFydCwgZW5kLCBuZXdM
aXN0LmdldCgpLCBzZWxlY3RlZExpc3RJdGVtKTsKIAogICAgIGlmIChjYW5NZXJnZUxpc3RzKHBy
ZXZpb3VzTGlzdCwgbmV3TGlzdC5nZXQoKSkpCiAgICAgICAgIG1lcmdlSWRlbnRpY2FsRWxlbWVu
dHMocHJldmlvdXNMaXN0LCBuZXdMaXN0KTsKQEAgLTg3LDEwICs4Nyw5IEBAIGJvb2wgSW5kZW50
T3V0ZGVudENvbW1hbmQ6OnRyeUluZGVudGluZ0EKIAogICAgIHJldHVybiB0cnVlOwogfQotICAg
IAotdm9pZCBJbmRlbnRPdXRkZW50Q29tbWFuZDo6aW5kZW50SW50b0Jsb2NrcXVvdGUoY29uc3Qg
VmlzaWJsZVBvc2l0aW9uJiBlbmRPZkN1cnJlbnRQYXJhZ3JhcGgsIFJlZlB0cjxFbGVtZW50PiYg
dGFyZ2V0QmxvY2txdW90ZSkKKwordm9pZCBJbmRlbnRPdXRkZW50Q29tbWFuZDo6aW5kZW50SW50
b0Jsb2NrcXVvdGUoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kLCBS
ZWZQdHI8RWxlbWVudD4mIHRhcmdldEJsb2NrcXVvdGUpCiB7Ci0gICAgUG9zaXRpb24gc3RhcnQg
PSBzdGFydE9mUGFyYWdyYXBoKGVuZE9mQ3VycmVudFBhcmFncmFwaCkuZGVlcEVxdWl2YWxlbnQo
KTsKICAgICBOb2RlKiBlbmNsb3NpbmdDZWxsID0gZW5jbG9zaW5nTm9kZU9mVHlwZShzdGFydCwg
JmlzVGFibGVDZWxsKTsKICAgICBOb2RlKiBub2RlVG9TcGxpdFRvOwogICAgIGlmIChlbmNsb3Np
bmdDZWxsKQpAQCAtMTA5LDcgKzEwOCw3IEBAIHZvaWQgSW5kZW50T3V0ZGVudENvbW1hbmQ6Omlu
ZGVudEludG9CbG8KICAgICAgICAgaW5zZXJ0Tm9kZUJlZm9yZSh0YXJnZXRCbG9ja3F1b3RlLCBv
dXRlckJsb2NrKTsKICAgICB9CiAKLSAgICBtb3ZlUGFyYWdyYXBoV2l0aENsb25lcyhzdGFydE9m
UGFyYWdyYXBoKGVuZE9mQ3VycmVudFBhcmFncmFwaCksIGVuZE9mQ3VycmVudFBhcmFncmFwaCwg
dGFyZ2V0QmxvY2txdW90ZS5nZXQoKSwgb3V0ZXJCbG9jay5nZXQoKSk7CisgICAgbW92ZVBhcmFn
cmFwaFdpdGhDbG9uZXMoc3RhcnQsIGVuZCwgdGFyZ2V0QmxvY2txdW90ZS5nZXQoKSwgb3V0ZXJC
bG9jay5nZXQoKSk7CiB9CiAKIHZvaWQgSW5kZW50T3V0ZGVudENvbW1hbmQ6Om91dGRlbnRQYXJh
Z3JhcGgoKQpAQCAtMjIwLDEyICsyMTksMTIgQEAgdm9pZCBJbmRlbnRPdXRkZW50Q29tbWFuZDo6
Zm9ybWF0U2VsZWN0aQogICAgICAgICBvdXRkZW50UmVnaW9uKHN0YXJ0T2ZTZWxlY3Rpb24sIGVu
ZE9mU2VsZWN0aW9uKTsKIH0KIAotdm9pZCBJbmRlbnRPdXRkZW50Q29tbWFuZDo6Zm9ybWF0UGFy
YWdyYXBoKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgZW5kT2ZDdXJyZW50UGFyYWdyYXBoLCBSZWZQ
dHI8RWxlbWVudD4mIGJsb2NrcXVvdGVGb3JOZXh0SW5kZW50KQordm9pZCBJbmRlbnRPdXRkZW50
Q29tbWFuZDo6Zm9ybWF0UmFuZ2UoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlv
biYgZW5kLCBSZWZQdHI8RWxlbWVudD4mIGJsb2NrcXVvdGVGb3JOZXh0SW5kZW50KQogewotICAg
IGlmICh0cnlJbmRlbnRpbmdBc0xpc3RJdGVtKGVuZE9mQ3VycmVudFBhcmFncmFwaCkpCisgICAg
aWYgKHRyeUluZGVudGluZ0FzTGlzdEl0ZW0oc3RhcnQsIGVuZCkpCiAgICAgICAgIGJsb2NrcXVv
dGVGb3JOZXh0SW5kZW50ID0gMDsKICAgICBlbHNlCi0gICAgICAgIGluZGVudEludG9CbG9ja3F1
b3RlKGVuZE9mQ3VycmVudFBhcmFncmFwaCwgYmxvY2txdW90ZUZvck5leHRJbmRlbnQpOworICAg
ICAgICBpbmRlbnRJbnRvQmxvY2txdW90ZShzdGFydCwgZW5kLCBibG9ja3F1b3RlRm9yTmV4dElu
ZGVudCk7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9JbmRlbnRPdXRkZW50Q29tbWFu
ZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9JbmRlbnRPdXRkZW50Q29tbWFuZC5o
CShyZXZpc2lvbiA2OTE0OCkKKysrIFdlYkNvcmUvZWRpdGluZy9JbmRlbnRPdXRkZW50Q29tbWFu
ZC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSwxMSArNDksMTEgQEAgcHJpdmF0ZToKICAgICB2b2lk
IGluZGVudFJlZ2lvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBjb25zdCBWaXNpYmxlUG9zaXRp
b24mKTsKICAgICB2b2lkIG91dGRlbnRSZWdpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgY29u
c3QgVmlzaWJsZVBvc2l0aW9uJik7CiAgICAgdm9pZCBvdXRkZW50UGFyYWdyYXBoKCk7Ci0gICAg
Ym9vbCB0cnlJbmRlbnRpbmdBc0xpc3RJdGVtKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOwotICAg
IHZvaWQgaW5kZW50SW50b0Jsb2NrcXVvdGUoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgUmVmUHRy
PEVsZW1lbnQ+Jik7CisgICAgYm9vbCB0cnlJbmRlbnRpbmdBc0xpc3RJdGVtKGNvbnN0IFBvc2l0
aW9uJiwgY29uc3QgUG9zaXRpb24mKTsKKyAgICB2b2lkIGluZGVudEludG9CbG9ja3F1b3RlKGNv
bnN0IFBvc2l0aW9uJiwgY29uc3QgUG9zaXRpb24mLCBSZWZQdHI8RWxlbWVudD4mKTsKIAogICAg
IHZvaWQgZm9ybWF0U2VsZWN0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgc3RhcnRPZlNlbGVj
dGlvbiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBlbmRPZlNlbGVjdGlvbik7Ci0gICAgdm9pZCBm
b3JtYXRQYXJhZ3JhcGgoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBlbmRPZkN1cnJlbnRQYXJhZ3Jh
cGgsIFJlZlB0cjxFbGVtZW50PiYgYmxvY2txdW90ZUZvck5leHRJbmRlbnQpOworICAgIHZvaWQg
Zm9ybWF0UmFuZ2UoY29uc3QgUG9zaXRpb24mLCBjb25zdCBQb3NpdGlvbiYsIFJlZlB0cjxFbGVt
ZW50PiYgYmxvY2txdW90ZUZvck5leHRJbmRlbnQpOwogCiAgICAgRUluZGVudFR5cGUgbV90eXBl
T2ZBY3Rpb247CiAgICAgaW50IG1fbWFyZ2luSW5QaXhlbHM7CkluZGV4OiBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA2
OTMxOSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDE4IEBACisyMDEwLTEwLTA3ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJFR1JFU1NJT046
IEluZGVudGluZyBwcmUgZHVwbGljYXRlcyBjb250ZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NzIzMworCisgICAgICAgIEFkZGVkIHRlc3RzIHRv
IGVuc3VyZSBXZWJLaXQgaW5kZW50cyB0ZXh0cyBpbnNpZGUgcHJlIGNvcnJlY3RseS4KKworICAg
ICAgICAqIGVkaXRpbmcvZXhlY0NvbW1hbmQvaW5kZW50LXByZS1leHBlY3RlZC50eHQ6CisgICAg
ICAgICogZWRpdGluZy9leGVjQ29tbWFuZC9pbmRlbnQtcHJlLWxpc3QtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL2V4ZWNDb21tYW5kL2luZGVudC1wcmUtbGlzdC5odG1s
OiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL2V4ZWNDb21tYW5kL2luZGVudC1wcmUtcGFyYWdy
YXBocy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGVkaXRpbmcvZXhlY0NvbW1hbmQv
aW5kZW50LXByZS1wYXJhZ3JhcGhzLmh0bWw6IEFkZGVkLgorCiAyMDEwLTEwLTA3ICBBbGJlcnQg
Si4gV29uZyAgPGFqd29uZ0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gQ2hy
b21pdW0gYnVpbGQgZml4LgpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9p
bmRlbnQtcHJlLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5n
L2V4ZWNDb21tYW5kL2luZGVudC1wcmUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA2OTE0OCkKKysr
IExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvaW5kZW50LXByZS1leHBlY3RlZC50eHQJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw3IEBACiBDT05TT0xFIE1FU1NBR0U6IGxpbmUgNDQ6
IFdyb25nIG5vZGUgc2VsZWN0ZWQuCiBDT05TT0xFIE1FU1NBR0U6IGxpbmUgNDY6IFdyb25nIGFu
Y2hvciBvZmZzZXQ6IDggaW5zdGVhZCBvZiAwCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgNDE6IFdy
b25nIGVuZCBub2RlIHR5cGU6IFtvYmplY3QgSFRNTEJSRWxlbWVudF0KK0NPTlNPTEUgTUVTU0FH
RTogbGluZSA0NDogV3Jvbmcgbm9kZSBzZWxlY3RlZC4KIHwgPGh0bWw+CiB8ICAgPGhlYWQ+CiB8
ICAgPGJvZHk+CkBAIC0xNyw4ICsxOSw3IEBAIGRvZXMgbm90IGNyYXNoLiIKIHwgICAgICAgICBz
dHlsZT0ibWFyZ2luOiAwIDAgMCA0MHB4OyBib3JkZXI6IG5vbmU7IHBhZGRpbmc6IDBweDsiCiB8
ICAgICAgICAgPHByZT4KIHwgICAgICAgICAgIGlkPSJwcmUtYmFzaWMiCi18ICAgICAgICAgICAi
bGluZSBvbmUKLSIKK3wgICAgICAgICAgICJsaW5lIG9uZSIKIHwgICAgICAgPHByZT4KIHwgICAg
ICAgICBpZD0icHJlLWJhc2ljIgogfCAgICAgICAgICJsaW5lIHR3bwpAQCAtMjcsOCArMjgsNyBA
QCBkb2VzIG5vdCBjcmFzaC4iCiB8ICAgICAgICAgY2xhc3M9IndlYmtpdC1pbmRlbnQtYmxvY2tx
dW90ZSIKIHwgICAgICAgICBzdHlsZT0ibWFyZ2luOiAwIDAgMCA0MHB4OyBib3JkZXI6IG5vbmU7
IHBhZGRpbmc6IDBweDsiCiB8ICAgICAgICAgPHByZT4KLXwgICAgICAgICAgICJsaW5lIHRocmVl
Ci0iCit8ICAgICAgICAgICAibGluZSB0aHJlZSIKIHwgICAgICAgICA8cHJlPgogfCAgICAgICAg
ICAgImxpbmUgZm91ciIKIHwgICAgICAgIgpAQCAtNDMsMTIgKzQzLDExIEBAIGRvZXMgbm90IGNy
YXNoLiIKIHwgICAgICAgICAgICAgPGJsb2NrcXVvdGU+CiB8ICAgICAgICAgICAgICAgY2xhc3M9
IndlYmtpdC1pbmRlbnQtYmxvY2txdW90ZSIKIHwgICAgICAgICAgICAgICBzdHlsZT0ibWFyZ2lu
OiAwIDAgMCA0MHB4OyBib3JkZXI6IG5vbmU7IHBhZGRpbmc6IDBweDsiCi18ICAgICAgICAgICAg
ICAgImxpc3QgdHdvCi0iCi18ICAgICAgICAgICAgICAgImxpc3QgdGhyZWUKLSIKLXwgICAgICAg
ICAgICAgImxpc3QgZm91cgotIgorfCAgICAgICAgICAgICAgICJsaXN0IHR3byIKK3wgICAgICAg
ICAgICAgICA8YnI+Cit8ICAgICAgICAgICAgICAgImxpc3QgdGhyZWUiCit8ICAgICAgICAgICAg
ICAgPGJyPgorfCAgICAgICAgICAgICAgICJsaXN0IGZvdXIiCiB8ICAgICAgICIKIAogIgpAQCAt
NjYsOCArNjUsNyBAQCBkb2VzIG5vdCBjcmFzaC4iCiB8ICAgICAgICAgICAgICAgICBjbGFzcz0i
d2Via2l0LWluZGVudC1ibG9ja3F1b3RlIgogfCAgICAgICAgICAgICAgICAgc3R5bGU9Im1hcmdp
bjogMCAwIDAgNDBweDsgYm9yZGVyOiBub25lOyBwYWRkaW5nOiAwcHg7IgogfCAgICAgICAgICAg
ICAgICAgPHByZT4KLXwgICAgICAgICAgICAgICAgICAgInRhYmxlIHR3bwotIgorfCAgICAgICAg
ICAgICAgICAgICAidGFibGUgdHdvIgogfCAgICAgICAgICAgICAgICAgPHByZT4KIHwgICAgICAg
ICAgICAgICAgICAgInRhYmxlIHRocmVlPCNzZWxlY3Rpb24tZm9jdXM+IgogfCAgICAgICAgICAg
ICA8dGQ+CkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL2luZGVudC1wcmUt
bGlzdC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9leGVj
Q29tbWFuZC9pbmRlbnQtcHJlLWxpc3QtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9pbmRlbnQtcHJlLWxpc3QtZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE2NyBAQAorCitJbmRlbnRpbmc6Cit8ICIKKyIKK3wg
PHByZT4KK3wgICA8dWw+Cit8ICAgICA8bGk+Cit8ICAgICAgICI8I3NlbGVjdGlvbi1hbmNob3I+
aGVsbG88I3NlbGVjdGlvbi1mb2N1cz4iCit8ICIKKyIKKworeWllbGRzOgorfCAiCisiCit8IDxw
cmU+Cit8ICAgPHVsPgorfCAgICAgPHVsPgorfCAgICAgICA8bGk+Cit8ICAgICAgICAgIjwjc2Vs
ZWN0aW9uLWFuY2hvcj5oZWxsbzwjc2VsZWN0aW9uLWZvY3VzPiIKK3wgIgorIgorCitJbmRlbnRp
bmc6Cit8ICIKKyIKK3wgPHByZT4KK3wgICA8dWw+Cit8ICAgICA8bGk+Cit8ICAgICAgICI8I3Nl
bGVjdGlvbi1hbmNob3I+aGVsbG8KK3dvcmxkIgorfCAgICAgIjwjc2VsZWN0aW9uLWZvY3VzPgor
IgorfCAiCisiCisKK3lpZWxkczoKK3wgIgorIgorfCA8cHJlPgorfCAgIDx1bD4KK3wgICAgIDx1
bD4KK3wgICAgICAgPGxpPgorfCAgICAgICAgICI8I3NlbGVjdGlvbi1hbmNob3I+aGVsbG8iCit8
ICAgICAgIDxsaT4KK3wgICAgICAgICAid29ybGQ8I3NlbGVjdGlvbi1mb2N1cz4iCit8ICAgICAi
CisiCit8ICIKKyIKKworSW5kZW50aW5nOgorfCAiCisiCit8IDx1bD4KK3wgICA8bGk+Cit8ICAg
ICA8cHJlPgorfCAgICAgICAiPCNzZWxlY3Rpb24tYW5jaG9yPmhlbGxvCit3b3JsZAord2Via2l0
PCNzZWxlY3Rpb24tZm9jdXM+CisiCit8ICIKKyIKKworeWllbGRzOgorfCAiCisiCit8IDx1bD4K
K3wgICA8bGk+Cit8ICAgICA8cHJlPgorfCAgICAgICA8YmxvY2txdW90ZT4KK3wgICAgICAgICBj
bGFzcz0id2Via2l0LWluZGVudC1ibG9ja3F1b3RlIgorfCAgICAgICAgIHN0eWxlPSJtYXJnaW46
IDAgMCAwIDQwcHg7IGJvcmRlcjogbm9uZTsgcGFkZGluZzogMHB4OyIKK3wgICAgICAgICAiaGVs
bG8iCit8ICAgICAgICAgPGJyPgorfCAgICAgICAgICJ3b3JsZCIKK3wgICAgICAgICA8YnI+Cit8
ICAgICAgICAgIndlYmtpdCIKK3wgIgorIgorCitJbmRlbnRpbmc6Cit8ICIKKyIKK3wgPHVsPgor
fCAgIDxsaT4KK3wgICAgIDxwcmU+Cit8ICAgICAgICI8I3NlbGVjdGlvbi1hbmNob3I+aGVsbG88
I3NlbGVjdGlvbi1mb2N1cz4KK3dvcmxkCit3ZWJraXQKKyIKK3wgIgorIgorCit5aWVsZHM6Cit8
ICIKKyIKK3wgPHVsPgorfCAgIDxsaT4KK3wgICAgIDxwcmU+Cit8ICAgICAgIDxibG9ja3F1b3Rl
PgorfCAgICAgICAgIGNsYXNzPSJ3ZWJraXQtaW5kZW50LWJsb2NrcXVvdGUiCit8ICAgICAgICAg
c3R5bGU9Im1hcmdpbjogMCAwIDAgNDBweDsgYm9yZGVyOiBub25lOyBwYWRkaW5nOiAwcHg7Igor
fCAgICAgICAgICI8I3NlbGVjdGlvbi1hbmNob3I+aGVsbG88I3NlbGVjdGlvbi1mb2N1cz4iCit8
ICAgICAgICJ3b3JsZAord2Via2l0CisiCit8ICIKKyIKKworSW5kZW50aW5nOgorfCAiCisiCit8
IDx1bD4KK3wgICA8bGk+Cit8ICAgICA8cHJlPgorfCAgICAgICAiaGVsbG8KKzwjc2VsZWN0aW9u
LWFuY2hvcj53b3JsZDwjc2VsZWN0aW9uLWZvY3VzPgord2Via2l0CisiCit8ICIKKyIKKworeWll
bGRzOgorfCAiCisiCit8IDx1bD4KK3wgICA8bGk+Cit8ICAgICA8cHJlPgorfCAgICAgICAiaGVs
bG8KKyIKK3wgICAgICAgPGJsb2NrcXVvdGU+Cit8ICAgICAgICAgY2xhc3M9IndlYmtpdC1pbmRl
bnQtYmxvY2txdW90ZSIKK3wgICAgICAgICBzdHlsZT0ibWFyZ2luOiAwIDAgMCA0MHB4OyBib3Jk
ZXI6IG5vbmU7IHBhZGRpbmc6IDBweDsiCit8ICAgICAgICAgIjwjc2VsZWN0aW9uLWFuY2hvcj53
b3JsZDwjc2VsZWN0aW9uLWZvY3VzPiIKK3wgICAgICAgIndlYmtpdAorIgorfCAiCisiCisKK0lu
ZGVudGluZzoKK3wgIgorIgorfCA8dWw+Cit8ICAgPGxpPgorfCAgICAgPHByZT4KK3wgICAgICAg
ImhlbGxvCit3b3JsZAorPCNzZWxlY3Rpb24tYW5jaG9yPndlYmtpPCNzZWxlY3Rpb24tZm9jdXM+
dAorIgorfCAiCisiCisKK3lpZWxkczoKK3wgIgorIgorfCA8dWw+Cit8ICAgPGxpPgorfCAgICAg
PHByZT4KK3wgICAgICAgImhlbGxvCit3b3JsZAorIgorfCAgICAgICA8YmxvY2txdW90ZT4KK3wg
ICAgICAgICBjbGFzcz0id2Via2l0LWluZGVudC1ibG9ja3F1b3RlIgorfCAgICAgICAgIHN0eWxl
PSJtYXJnaW46IDAgMCAwIDQwcHg7IGJvcmRlcjogbm9uZTsgcGFkZGluZzogMHB4OyIKK3wgICAg
ICAgICAiPCNzZWxlY3Rpb24tYW5jaG9yPndlYmtpPCNzZWxlY3Rpb24tZm9jdXM+dCIKK3wgIgor
IgpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9pbmRlbnQtcHJlLWxpc3Qu
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL2luZGVu
dC1wcmUtbGlzdC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9leGVj
Q29tbWFuZC9pbmRlbnQtcHJlLWxpc3QuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4MiBA
QAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jl
c291cmNlcy9kdW1wLWFzLW1hcmt1cC5qcyI+PC9zY3JpcHQ+Cis8ZGl2IGlkPSJ0ZXN0MCIgY29u
dGVudGVkaXRhYmxlPgorPHByZT4KKzx1bD48bGk+aGVsbG88L2xpPjwvdWw+PC9wcmU+Cis8L2Rp
dj4KKworPGRpdiBpZD0idGVzdDEiIGNvbnRlbnRlZGl0YWJsZT4KKzxwcmU+PHVsPjxsaT5oZWxs
bword29ybGQ8L2xpPgorPC91bD48L3ByZT4KKzwvZGl2PgorCis8ZGl2IGlkPSJ0ZXN0MiIgY29u
dGVudGVkaXRhYmxlPgorPHVsPjxsaT48cHJlPgoraGVsbG8KK3dvcmxkCit3ZWJraXQKKzwvcHJl
PjwvbGk+PC91bD4KKzwvZGl2PgorCis8ZGl2IGlkPSJ0ZXN0MyIgY29udGVudGVkaXRhYmxlPgor
PHVsPjxsaT48cHJlPgoraGVsbG8KK3dvcmxkCit3ZWJraXQKKzwvcHJlPjwvbGk+PC91bD4KKzwv
ZGl2PgorCis8ZGl2IGlkPSJ0ZXN0NCIgY29udGVudGVkaXRhYmxlPgorPHVsPjxsaT48cHJlPgor
aGVsbG8KK3dvcmxkCit3ZWJraXQKKzwvcHJlPjwvbGk+PC91bD4KKzwvZGl2PgorCis8ZGl2IGlk
PSJ0ZXN0NSIgY29udGVudGVkaXRhYmxlPgorPHVsPjxsaT48cHJlPgoraGVsbG8KK3dvcmxkCit3
ZWJraXQKKzwvcHJlPjwvbGk+PC91bD4KKzwvZGl2PgorCis8c2NyaXB0PgorCitmdW5jdGlvbiB0
ZXN0SW5kZW50YXRpb24oY29udGFpbmVySWQsIHNlbGVjdG9yKSB7CisgICAgdmFyIGNvbnRhaW5l
ciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGNvbnRhaW5lcklkKTsKKyAgICBzZWxlY3Rvcihj
b250YWluZXIpOworICAgIE1hcmt1cC5kdW1wKGNvbnRhaW5lciwgJ0luZGVudGluZycpOworICAg
IGRvY3VtZW50LmV4ZWNDb21tYW5kKCdpbmRlbnQnLCBmYWxzZSwgbnVsbCk7CisgICAgTWFya3Vw
LmR1bXAoY29udGFpbmVyLCAneWllbGRzJyk7Cit9CisKK2Z1bmN0aW9uIHNlbGVjdEFsbChjb250
YWluZXIpIHsKKyAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0QWxsQ2hpbGRyZW4oY29u
dGFpbmVyKTsKK30KKworZnVuY3Rpb24gc2VsZWN0b3JGb3JMaW5lTihsaW5lKSB7CisgICAgcmV0
dXJuIGZ1bmN0aW9uIChjb250YWluZXIpIHsKKyAgICAgICAgd2luZG93LmdldFNlbGVjdGlvbigp
LnNldFBvc2l0aW9uKGNvbnRhaW5lciwgMCk7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
bGluZSAtIDE7IGkrKykKKyAgICAgICAgICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5tb2RpZnko
J21vdmUnLCAnZm9yd2FyZCcsICdsaW5lJyk7CisgICAgICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24o
KS5tb2RpZnkoJ2V4dGVuZCcsICdmb3J3YXJkJywgJ2xpbmUnKTsKKyAgICAgICAgLy8gQXZvaWQg
aW5jbHVkaW5nIFxuIGF0IHRoZSBlbmQgb2YgbGluZS4KKyAgICAgICAgd2luZG93LmdldFNlbGVj
dGlvbigpLm1vZGlmeSgnZXh0ZW5kJywgJ2JhY2t3YXJkJywgJ2NoYXJhY3RlcicpOworICAgIH0K
K30KKwordGVzdEluZGVudGF0aW9uKCd0ZXN0MCcsIHNlbGVjdEFsbCk7Cit0ZXN0SW5kZW50YXRp
b24oJ3Rlc3QxJywgc2VsZWN0QWxsKTsKK3Rlc3RJbmRlbnRhdGlvbigndGVzdDInLCBzZWxlY3RB
bGwpOwordGVzdEluZGVudGF0aW9uKCd0ZXN0MycsIHNlbGVjdG9yRm9yTGluZU4oMSkpOwordGVz
dEluZGVudGF0aW9uKCd0ZXN0NCcsIHNlbGVjdG9yRm9yTGluZU4oMikpOwordGVzdEluZGVudGF0
aW9uKCd0ZXN0NScsIHNlbGVjdG9yRm9yTGluZU4oMykpOworCis8L3NjcmlwdD4KKzwvYm9keT4K
KzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvaW5kZW50LXBy
ZS1wYXJhZ3JhcGhzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0
aW5nL2V4ZWNDb21tYW5kL2luZGVudC1wcmUtcGFyYWdyYXBocy1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL2luZGVudC1wcmUtcGFy
YWdyYXBocy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTYwIEBACisKK0lu
ZGVudGluZzoKK3wgIgorIgorfCA8cHJlPgorfCAgICI8I3NlbGVjdGlvbi1hbmNob3I+aGVsbG88
I3NlbGVjdGlvbi1mb2N1cz4iCit8ICIKKyIKKworeWllbGRzOgorfCAiCisiCit8IDxibG9ja3F1
b3RlPgorfCAgIGNsYXNzPSJ3ZWJraXQtaW5kZW50LWJsb2NrcXVvdGUiCit8ICAgc3R5bGU9Im1h
cmdpbjogMCAwIDAgNDBweDsgYm9yZGVyOiBub25lOyBwYWRkaW5nOiAwcHg7IgorfCAgIDxwcmU+
Cit8ICAgICAiPCNzZWxlY3Rpb24tYW5jaG9yPmhlbGxvPCNzZWxlY3Rpb24tZm9jdXM+IgorfCAi
CisiCisKK0luZGVudGluZzoKK3wgIgorIgorfCA8cHJlPgorfCAgICI8I3NlbGVjdGlvbi1hbmNo
b3I+aGVsbG8KKword29ybGQKKword2Via2l0PCNzZWxlY3Rpb24tZm9jdXM+CisiCit8ICIKKyIK
KworeWllbGRzOgorfCAiCisiCit8IDxibG9ja3F1b3RlPgorfCAgIGNsYXNzPSJ3ZWJraXQtaW5k
ZW50LWJsb2NrcXVvdGUiCit8ICAgc3R5bGU9Im1hcmdpbjogMCAwIDAgNDBweDsgYm9yZGVyOiBu
b25lOyBwYWRkaW5nOiAwcHg7IgorfCAgIDxwcmU+Cit8ICAgICAiPCNzZWxlY3Rpb24tYW5jaG9y
PmhlbGxvIgorfCAgIDxwcmU+Cit8ICAgICAiCisiCit8ICAgPHByZT4KK3wgICAgICJ3b3JsZCIK
K3wgICA8cHJlPgorfCAgICAgIgorIgorfCAgIDxwcmU+Cit8ICAgICAid2Via2l0PCNzZWxlY3Rp
b24tZm9jdXM+IgorfCAiCisiCisKK0luZGVudGluZzoKK3wgIgorIgorfCA8cHJlPgorfCAgICI8
I3NlbGVjdGlvbi1hbmNob3I+aGVsbG8KK3dvcmxkCit3ZWJraXQ8I3NlbGVjdGlvbi1mb2N1cz4K
KyIKK3wgIgorIgorCit5aWVsZHM6Cit8ICIKKyIKK3wgPGJsb2NrcXVvdGU+Cit8ICAgY2xhc3M9
IndlYmtpdC1pbmRlbnQtYmxvY2txdW90ZSIKK3wgICBzdHlsZT0ibWFyZ2luOiAwIDAgMCA0MHB4
OyBib3JkZXI6IG5vbmU7IHBhZGRpbmc6IDBweDsiCit8ICAgPHByZT4KK3wgICAgICI8I3NlbGVj
dGlvbi1hbmNob3I+aGVsbG8iCit8ICAgPHByZT4KK3wgICAgICJ3b3JsZCIKK3wgICA8cHJlPgor
fCAgICAgIndlYmtpdDwjc2VsZWN0aW9uLWZvY3VzPiIKK3wgIgorIgorCitJbmRlbnRpbmc6Cit8
ICIKKyIKK3wgPHByZT4KK3wgICAiPCNzZWxlY3Rpb24tYW5jaG9yPmhlbGxvPCNzZWxlY3Rpb24t
Zm9jdXM+CisKK3dvcmxkCisiCit8ICIKKyIKKworeWllbGRzOgorfCAiCisiCit8IDxibG9ja3F1
b3RlPgorfCAgIGNsYXNzPSJ3ZWJraXQtaW5kZW50LWJsb2NrcXVvdGUiCit8ICAgc3R5bGU9Im1h
cmdpbjogMCAwIDAgNDBweDsgYm9yZGVyOiBub25lOyBwYWRkaW5nOiAwcHg7IgorfCAgIDxwcmU+
Cit8ICAgICAiPCNzZWxlY3Rpb24tYW5jaG9yPmhlbGxvPCNzZWxlY3Rpb24tZm9jdXM+IgorfCA8
cHJlPgorfCAgICIKK3dvcmxkCisiCit8ICIKKyIKKworSW5kZW50aW5nOgorfCAiCisiCit8IDxw
cmU+Cit8ICAgImhlbGxvCis8I3NlbGVjdGlvbi1jYXJldD4KK3dvcmxkCisiCit8ICIKKyIKKwor
eWllbGRzOgorfCAiCisiCit8IDxwcmU+Cit8ICAgImhlbGxvPCNzZWxlY3Rpb24tY2FyZXQ+Cisi
Cit8IDxibG9ja3F1b3RlPgorfCAgIGNsYXNzPSJ3ZWJraXQtaW5kZW50LWJsb2NrcXVvdGUiCit8
ICAgc3R5bGU9Im1hcmdpbjogMCAwIDAgNDBweDsgYm9yZGVyOiBub25lOyBwYWRkaW5nOiAwcHg7
IgorfCAgIDxwcmU+Cit8ICAgICAiCisiCit8IDxwcmU+Cit8ICAgIndvcmxkCisiCit8ICIKKyIK
KworSW5kZW50aW5nOgorfCAiCisiCit8IDxwcmU+Cit8ICAgImhlbGxvCisKKzwjc2VsZWN0aW9u
LWFuY2hvcj53b3JsPCNzZWxlY3Rpb24tZm9jdXM+ZAorIgorfCAiCisiCisKK3lpZWxkczoKK3wg
IgorIgorfCA8cHJlPgorfCAgICJoZWxsbworPCNzZWxlY3Rpb24tYW5jaG9yPgorIgorfCA8Ymxv
Y2txdW90ZT4KK3wgICBjbGFzcz0id2Via2l0LWluZGVudC1ibG9ja3F1b3RlIgorfCAgIHN0eWxl
PSJtYXJnaW46IDAgMCAwIDQwcHg7IGJvcmRlcjogbm9uZTsgcGFkZGluZzogMHB4OyIKK3wgICA8
cHJlPgorfCAgICAgIndvcmw8I3NlbGVjdGlvbi1mb2N1cz5kIgorfCAiCisiCkluZGV4OiBMYXlv
dXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL2luZGVudC1wcmUtcGFyYWdyYXBocy5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvaW5kZW50LXByZS1w
YXJhZ3JhcGhzLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWND
b21tYW5kL2luZGVudC1wcmUtcGFyYWdyYXBocy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDgzIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vcmVzb3VyY2VzL2R1bXAtYXMtbWFya3VwLmpzIj48L3NjcmlwdD4KKzxkaXYgaWQ9InRlc3Qw
IiBjb250ZW50ZWRpdGFibGU+Cis8cHJlPmhlbGxvPC9wcmU+Cis8L2Rpdj4KKworPGRpdiBpZD0i
dGVzdDEiIGNvbnRlbnRlZGl0YWJsZT4KKzxwcmU+CitoZWxsbworCit3b3JsZAorCit3ZWJraXQK
KzwvcHJlPgorPC9kaXY+CisKKzxkaXYgaWQ9InRlc3QyIiBjb250ZW50ZWRpdGFibGU+Cis8cHJl
PgoraGVsbG8KK3dvcmxkCit3ZWJraXQKKzwvcHJlPgorPC9kaXY+CisKKzxkaXYgaWQ9InRlc3Qz
IiBjb250ZW50ZWRpdGFibGU+Cis8cHJlPgoraGVsbG8KKword29ybGQKKzwvcHJlPgorPC9kaXY+
CisKKzxkaXYgaWQ9InRlc3Q0IiBjb250ZW50ZWRpdGFibGU+Cis8cHJlPgoraGVsbG8KKword29y
bGQKKzwvcHJlPgorPC9kaXY+CisKKzxkaXYgaWQ9InRlc3Q1IiBjb250ZW50ZWRpdGFibGU+Cis8
cHJlPgoraGVsbG8KKword29ybGQKKzwvcHJlPgorPC9kaXY+Cis8c2NyaXB0PgorCitmdW5jdGlv
biB0ZXN0SW5kZW50YXRpb24oY29udGFpbmVySWQsIHNlbGVjdG9yKSB7CisgICAgdmFyIGNvbnRh
aW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGNvbnRhaW5lcklkKTsKKyAgICBzZWxlY3Rv
cihjb250YWluZXIpOworICAgIE1hcmt1cC5kdW1wKGNvbnRhaW5lciwgJ0luZGVudGluZycpOwor
ICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdpbmRlbnQnLCBmYWxzZSwgbnVsbCk7CisgICAgTWFy
a3VwLmR1bXAoY29udGFpbmVyLCAneWllbGRzJyk7Cit9CisKK2Z1bmN0aW9uIHNlbGVjdEFsbChj
b250YWluZXIpIHsKKyAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0QWxsQ2hpbGRyZW4o
Y29udGFpbmVyKTsKK30KKworZnVuY3Rpb24gc2VsZWN0b3JGb3JMaW5lTihsaW5lKSB7CisgICAg
cmV0dXJuIGZ1bmN0aW9uIChjb250YWluZXIpIHsKKyAgICAgICAgd2luZG93LmdldFNlbGVjdGlv
bigpLnNldFBvc2l0aW9uKGNvbnRhaW5lciwgMCk7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgbGluZSAtIDE7IGkrKykKKyAgICAgICAgICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5tb2Rp
ZnkoJ21vdmUnLCAnZm9yd2FyZCcsICdsaW5lJyk7CisgICAgICAgIHdpbmRvdy5nZXRTZWxlY3Rp
b24oKS5tb2RpZnkoJ2V4dGVuZCcsICdmb3J3YXJkJywgJ2xpbmUnKTsKKyAgICAgICAgd2luZG93
LmdldFNlbGVjdGlvbigpLm1vZGlmeSgnZXh0ZW5kJywgJ2JhY2t3YXJkJywgJ2NoYXJhY3Rlcicp
OworICAgIH0KK30KKwordGVzdEluZGVudGF0aW9uKCd0ZXN0MCcsIHNlbGVjdEFsbCk7Cit0ZXN0
SW5kZW50YXRpb24oJ3Rlc3QxJywgc2VsZWN0QWxsKTsKK3Rlc3RJbmRlbnRhdGlvbigndGVzdDIn
LCBzZWxlY3RBbGwpOwordGVzdEluZGVudGF0aW9uKCd0ZXN0MycsIHNlbGVjdG9yRm9yTGluZU4o
MSkpOwordGVzdEluZGVudGF0aW9uKCd0ZXN0NCcsIHNlbGVjdG9yRm9yTGluZU4oMikpOwordGVz
dEluZGVudGF0aW9uKCd0ZXN0NScsIHNlbGVjdG9yRm9yTGluZU4oMykpOworCis8L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70134</attachid>
            <date>2010-10-07 12:51:12 -0700</date>
            <delta_ts>2010-10-07 16:07:37 -0700</delta_ts>
            <desc>fixes the bug; fixed release build</desc>
            <filename>bug-47233-20101007125110.patch</filename>
            <type>text/plain</type>
            <size>31826</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2OTMyNykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzYgQEAKKzIwMTAtMTAtMDcgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUkVH
UkVTU0lPTjogSW5kZW50aW5nIHByZSBkdXBsaWNhdGVzIGNvbnRlbnQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3MjMzCisKKyAgICAgICAgVGhlIGJ1
ZyB3YXMgY2F1c2VkIGJ5IG91ciBub3Qgc3BsaXR0aW5nIHRleHQgbm9kZXMgcHJvcGVybHkuCisK
KyAgICAgICAgSW4gbmV3IGFwcHJvYWNoLCB3ZSBzcGxpdCB0ZXh0IG5vZGVzIGluIGVhY2ggaXRl
cmF0aW9uLiBBZGRlZCByYW5nZUZvclBhcmFncmFwaFNwbGl0aW5nVGV4dE5vZGVzSWZOZWVkZWQK
KyAgICAgICAgdG8gc3BsaXQgdGV4dCBub2RlcyBhdCB0aGUgc3RhcnQgYW5kIGF0IHRoZSBlbmQg
b2YgcGFyYWdyYXBoLCB3aGljaCBhbHNvIGFkanVzdHMgc3RhcnQgYW5kIGVuZCBwb3NpdGlvbnMK
KyAgICAgICAgZm9yIG1vdmVQYXJhZ3JhcGhXaXRoQ2xvbmVzLiBBZGRlZCBlbmRPZk5leHRQYXJh
Z3JhaFNwbGl0dGluZ1RleHROb2Rlc0lmTmVlZGVkIHRvIGFkanVzdCBlbmRPZk5leHRQYXJhZ3Jh
cGgsCisgICAgICAgIHN0YXJ0LCBhbmQgZW5kIHRvIHdvcmstYXJvdW5kIG1vdmVQYXJhZ3JhcGhX
aXRoQ2xvbmVzJ3MgcmVtb3ZpbmcgYSBsaW5lIGZlZWQuCisKKyAgICAgICAgVGVzdHM6IGVkaXRp
bmcvZXhlY0NvbW1hbmQvaW5kZW50LXByZS1saXN0Lmh0bWwKKyAgICAgICAgICAgICAgIGVkaXRp
bmcvZXhlY0NvbW1hbmQvaW5kZW50LXByZS1wYXJhZ3JhcGhzLmh0bWwKKworICAgICAgICAqIGVk
aXRpbmcvQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGx5QmxvY2tFbGVtZW50Q29tbWFuZDo6Zm9ybWF0U2VsZWN0aW9uKTogU2VlIGFib3ZlLgorICAg
ICAgICAoV2ViQ29yZTo6Y2hhckF0UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6cmVuZGVy
U3R5bGVPZkVuY2xvc2luZ1RleHROb2RlKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpBcHBs
eUJsb2NrRWxlbWVudENvbW1hbmQ6OnJhbmdlRm9yUGFyYWdyYXBoU3BsaXRpbmdUZXh0Tm9kZXNJ
Zk5lZWRlZCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlCbG9ja0VsZW1lbnRDb21t
YW5kOjplbmRPZk5leHRQYXJhZ3JhaFNwbGl0dGluZ1RleHROb2Rlc0lmTmVlZGVkKTogQWRkZWQu
CisgICAgICAgICogZWRpdGluZy9BcHBseUJsb2NrRWxlbWVudENvbW1hbmQuaDoKKyAgICAgICAg
KiBlZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb3Jt
YXRCbG9ja0NvbW1hbmQ6OmZvcm1hdFJhbmdlKTogVGFrZXMgdHdvIFBvc2l0aW9ucyBpbnN0ZWFk
IG9mIG9uZSBWaXNpYmxlUG9zaXRpb24uCisgICAgICAgICogZWRpdGluZy9Gb3JtYXRCbG9ja0Nv
bW1hbmQuaDoKKyAgICAgICAgKiBlZGl0aW5nL0luZGVudE91dGRlbnRDb21tYW5kLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkluZGVudE91dGRlbnRDb21tYW5kOjp0cnlJbmRlbnRpbmdBc0xpc3RJ
dGVtKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpJbmRlbnRPdXRkZW50Q29tbWFuZDo6aW5k
ZW50SW50b0Jsb2NrcXVvdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkluZGVudE91dGRl
bnRDb21tYW5kOjpmb3JtYXRSYW5nZSk6IERpdHRvLgorICAgICAgICAqIGVkaXRpbmcvSW5kZW50
T3V0ZGVudENvbW1hbmQuaDoKKwogMjAxMC0xMC0wNSAgTWFydGluIFJvYmluc29uICA8bXJvYmlu
c29uQGlnYWxpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQ2hyaXMgRmxlaXphY2guCklu
ZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
NjkzMjcpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtMjExNTAsNyArMjExNTAsNiBAQAogCQkJaXNhID0gUEJYUHJvamVjdDsK
IAkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAxNDlDMjg0MzA4OTAyQjExMDA4QTlFRkMgLyog
QnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0ICJXZWJDb3JlIiAqLzsKIAkJ
CWNvbXBhdGliaWxpdHlWZXJzaW9uID0gIlhjb2RlIDIuNCI7Ci0JCQlkZXZlbG9wbWVudFJlZ2lv
biA9IEVuZ2xpc2g7CiAJCQloYXNTY2FubmVkRm9yRW5jb2RpbmdzID0gMTsKIAkJCWtub3duUmVn
aW9ucyA9ICgKIAkJCQlFbmdsaXNoLApJbmRleDogV2ViQ29yZS9lZGl0aW5nL0FwcGx5QmxvY2tF
bGVtZW50Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0FwcGx5Qmxv
Y2tFbGVtZW50Q29tbWFuZC5jcHAJKHJldmlzaW9uIDY5MzI3KQorKysgV2ViQ29yZS9lZGl0aW5n
L0FwcGx5QmxvY2tFbGVtZW50Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDIyICsz
OCw2IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7
Ci0gICAgCi0vLyBUaGlzIGZ1bmN0aW9uIGNhbiByZXR1cm4gLTEgaWYgd2UgYXJlIHVuYWJsZSB0
byBjb3VudCB0aGUgcGFyYWdyYXBocyBiZXR3ZWVuIHxzdGFydHwgYW5kIHxlbmR8Lgotc3RhdGlj
IGludCBjb3VudFBhcmFncmFwaHMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBlbmRPZkZpcnN0UGFy
YWdyYXBoLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIGVuZE9mTGFzdFBhcmFncmFwaCkKLXsKLSAg
ICBpbnQgY291bnQgPSAwOwotICAgIFZpc2libGVQb3NpdGlvbiBjdXIgPSBlbmRPZkZpcnN0UGFy
YWdyYXBoOwotICAgIHdoaWxlIChjdXIgIT0gZW5kT2ZMYXN0UGFyYWdyYXBoKSB7Ci0gICAgICAg
ICsrY291bnQ7Ci0gICAgICAgIGN1ciA9IGVuZE9mUGFyYWdyYXBoKGN1ci5uZXh0KCkpOwotICAg
ICAgICAvLyBJZiBzdGFydCBpcyBiZWZvcmUgYSB0YWJsZSBhbmQgZW5kIGlzIGluc2lkZSBhIHRh
YmxlLCB3ZSB3aWxsIG5ldmVyIGhpdCBlbmQgYmVjYXVzZSB0aGUKLSAgICAgICAgLy8gd2hvbGUg
dGFibGUgaXMgY29uc2lkZXJlZCBhIHNpbmdsZSBwYXJhZ3JhcGguCi0gICAgICAgIGlmIChjdXIu
aXNOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIHJldHVybiBjb3Vu
dDsKLX0KIAogQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kOjpBcHBseUJsb2NrRWxlbWVudENvbW1h
bmQoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBjb25z
dCBBdG9taWNTdHJpbmcmIGNsYXNzTmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiBpbmxpbmVTdHls
ZSkKICAgICA6IENvbXBvc2l0ZUVkaXRDb21tYW5kKGRvY3VtZW50KQpAQCAtMTI1LDMwICsxMDks
MjQgQEAgdm9pZCBBcHBseUJsb2NrRWxlbWVudENvbW1hbmQ6OmZvcm1hdFNlbAogICAgIFJlZlB0
cjxFbGVtZW50PiBibG9ja3F1b3RlRm9yTmV4dEluZGVudDsKICAgICBWaXNpYmxlUG9zaXRpb24g
ZW5kT2ZDdXJyZW50UGFyYWdyYXBoID0gZW5kT2ZQYXJhZ3JhcGgoc3RhcnRPZlNlbGVjdGlvbik7
CiAgICAgVmlzaWJsZVBvc2l0aW9uIGVuZEFmdGVyU2VsZWN0aW9uID0gZW5kT2ZQYXJhZ3JhcGgo
ZW5kT2ZQYXJhZ3JhcGgoZW5kT2ZTZWxlY3Rpb24pLm5leHQoKSk7Ci0gICAgaW50IGVuZE9mQ3Vy
cmVudFBhcmFncmFwaEluZGV4ID0gaW5kZXhGb3JWaXNpYmxlUG9zaXRpb24oZW5kT2ZDdXJyZW50
UGFyYWdyYXBoKTsKLSAgICBpbnQgZW5kQWZ0ZXJTZWxlY3Rpb25JbmRleCA9IGluZGV4Rm9yVmlz
aWJsZVBvc2l0aW9uKGVuZEFmdGVyU2VsZWN0aW9uKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gZW5k
T2ZMYXN0UGFyYWdyYXBoID0gZW5kT2ZQYXJhZ3JhcGgoZW5kT2ZTZWxlY3Rpb24pOwogCi0gICAg
Ly8gV2hlbiBpbmRlbnRpbmcgd2l0aGluIGEgPHByZT4gdGFnLCB3ZSBuZWVkIHRvIHNwbGl0IGVh
Y2ggcGFyYWdyYXBoIGludG8gYSBzZXBhcmF0ZSBub2RlIGZvciBtb3ZlUGFyYWdyYXBoV2l0aENs
b25lcyB0byB3b3JrLgotICAgIC8vIEhvd2V2ZXIsIHNwbGl0dGluZyB0ZXh0IG5vZGVzIGNhbiBj
YXVzZSBlbmRPZkN1cnJlbnRQYXJhZ3JhcGggYW5kIGVuZEFmdGVyU2VsZWN0aW9uIHRvIHBvaW50
IHRvIGFuIGludmFsaWQgcG9zaXRpb24gaWYgd2UKLSAgICAvLyBjaGFuZ2VkIHRoZSB0ZXh0IG5v
ZGUgaXQgd2FzIHBvaW50aW5nIGF0LiAgU28gd2UgaGF2ZSB0byByZXNldCB0aGVzZSBwb3NpdGlv
bnMuCi0gICAgaW50IG51bVBhcmFncmFwaHMgPSBjb3VudFBhcmFncmFwaHMoZW5kT2ZDdXJyZW50
UGFyYWdyYXBoLCBlbmRBZnRlclNlbGVjdGlvbik7Ci0gICAgaWYgKHNwbGl0VGV4dE5vZGVzKHN0
YXJ0T2ZQYXJhZ3JhcGgoc3RhcnRPZlNlbGVjdGlvbiksIG51bVBhcmFncmFwaHMgKyAxKSkgewot
ICAgICAgICBSZWZQdHI8UmFuZ2U+IGVuZE9mQ3VycmVudFBhcmFncmFwaFJhbmdlID0gVGV4dEl0
ZXJhdG9yOjpyYW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aChkb2N1bWVudCgpLT5kb2N1bWVudEVs
ZW1lbnQoKSwgZW5kT2ZDdXJyZW50UGFyYWdyYXBoSW5kZXgsIDAsIHRydWUpOwotICAgICAgICBS
ZWZQdHI8UmFuZ2U+IGVuZEFmdGVyU2VsZWN0aW9uUmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnJhbmdl
RnJvbUxvY2F0aW9uQW5kTGVuZ3RoKGRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpLCBlbmRB
ZnRlclNlbGVjdGlvbkluZGV4LCAwLCB0cnVlKTsKLSAgICAgICAgaWYgKCFlbmRPZkN1cnJlbnRQ
YXJhZ3JhcGhSYW5nZS5nZXQoKSB8fCAhZW5kQWZ0ZXJTZWxlY3Rpb25SYW5nZS5nZXQoKSkgewot
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICAgICAgZW5kT2ZDdXJyZW50UGFyYWdyYXBoID0gVmlzaWJsZVBvc2l0aW9u
KGVuZE9mQ3VycmVudFBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCksIERPV05TVFJFQU0p
OwotICAgICAgICBlbmRBZnRlclNlbGVjdGlvbiA9IFZpc2libGVQb3NpdGlvbihlbmRBZnRlclNl
bGVjdGlvblJhbmdlLT5zdGFydFBvc2l0aW9uKCksIERPV05TVFJFQU0pOwotICAgIH0KKyAgICBi
b29sIGF0RW5kID0gZmFsc2U7CisgICAgd2hpbGUgKGVuZE9mQ3VycmVudFBhcmFncmFwaCAhPSBl
bmRBZnRlclNlbGVjdGlvbiAmJiAhYXRFbmQpIHsKKyAgICAgICAgUG9zaXRpb24gc3RhcnQ7Cisg
ICAgICAgIFBvc2l0aW9uIGVuZDsKKworICAgICAgICBpZiAoZW5kT2ZDdXJyZW50UGFyYWdyYXBo
ID09IGVuZE9mTGFzdFBhcmFncmFwaCkKKyAgICAgICAgICAgIGF0RW5kID0gdHJ1ZTsKKworICAg
ICAgICByYW5nZUZvclBhcmFncmFwaFNwbGl0aW5nVGV4dE5vZGVzSWZOZWVkZWQoZW5kT2ZDdXJy
ZW50UGFyYWdyYXBoLCBzdGFydCwgZW5kKTsKKyAgICAgICAgZW5kT2ZDdXJyZW50UGFyYWdyYXBo
ID0gZW5kOwogCi0gICAgd2hpbGUgKGVuZE9mQ3VycmVudFBhcmFncmFwaCAhPSBlbmRBZnRlclNl
bGVjdGlvbikgewotICAgICAgICAvLyBJdGVyYXRlIGFjcm9zcyB0aGUgc2VsZWN0ZWQgcGFyYWdy
YXBocy4uLgotICAgICAgICBWaXNpYmxlUG9zaXRpb24gZW5kT2ZOZXh0UGFyYWdyYXBoID0gZW5k
T2ZQYXJhZ3JhcGgoZW5kT2ZDdXJyZW50UGFyYWdyYXBoLm5leHQoKSk7CisgICAgICAgIFBvc2l0
aW9uIGFmdGVyRW5kID0gZW5kLm5leHQoKTsKICAgICAgICAgTm9kZSogZW5jbG9zaW5nQ2VsbCA9
IGVuY2xvc2luZ05vZGVPZlR5cGUoc3RhcnQsICZpc1RhYmxlQ2VsbCk7CisgICAgICAgIFZpc2li
bGVQb3NpdGlvbiBlbmRPZk5leHRQYXJhZ3JhcGggPSBlbmRPZk5leHRQYXJhZ3JhaFNwbGl0dGlu
Z1RleHROb2Rlc0lmTmVlZGVkKGVuZE9mQ3VycmVudFBhcmFncmFwaCwgc3RhcnQsIGVuZCk7CiAK
LSAgICAgICAgZm9ybWF0UGFyYWdyYXBoKGVuZE9mQ3VycmVudFBhcmFncmFwaCwgYmxvY2txdW90
ZUZvck5leHRJbmRlbnQpOworICAgICAgICBmb3JtYXRSYW5nZShzdGFydCwgZW5kLCBibG9ja3F1
b3RlRm9yTmV4dEluZGVudCk7CiAKICAgICAgICAgLy8gRG9uJ3QgcHV0IHRoZSBuZXh0IHBhcmFn
cmFwaCBpbiB0aGUgYmxvY2txdW90ZSB3ZSBqdXN0IGNyZWF0ZWQgZm9yIHRoaXMgcGFyYWdyYXBo
IHVubGVzcyAKICAgICAgICAgLy8gdGhlIG5leHQgcGFyYWdyYXBoIGlzIGluIHRoZSBzYW1lIGNl
bGwuCkBAIC0xNzAsNiArMTQ4LDEwOSBAQCB2b2lkIEFwcGx5QmxvY2tFbGVtZW50Q29tbWFuZDo6
Zm9ybWF0U2VsCiAgICAgfQogfQogCitzdGF0aWMgVUNoYXIgY2hhckF0UG9zaXRpb24oY29uc3Qg
UG9zaXRpb24mIHBvc2l0aW9uKQoreworICAgIGlmIChwb3NpdGlvbi5hbmNob3JUeXBlKCkgIT0g
UG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcikKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICBOb2RlKiB0ZXh0Tm9kZSA9IHBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKTsKKyAgICBpbnQg
b2Zmc2V0ID0gcG9zaXRpb24ub2Zmc2V0SW5Db250YWluZXJOb2RlKCk7CisgICAgaWYgKCF0ZXh0
Tm9kZSB8fCAhdGV4dE5vZGUtPmlzVGV4dE5vZGUoKSB8fCBvZmZzZXQgPCAwIHx8IG9mZnNldCA+
PSB0ZXh0Tm9kZS0+bWF4Q2hhcmFjdGVyT2Zmc2V0KCkpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgU3RyaW5nIHRleHRBdFBvc2l0aW9uID0gc3Rh
dGljX2Nhc3Q8VGV4dCo+KHRleHROb2RlKS0+c3Vic3RyaW5nRGF0YShvZmZzZXQsIDEsIGVjKTsK
KyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIHRleHRBdFBvc2l0
aW9uWzBdOworfQorCitzdGF0aWMgUmVuZGVyU3R5bGUqIHJlbmRlclN0eWxlT2ZFbmNsb3NpbmdU
ZXh0Tm9kZShjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24pCit7CisgICAgaWYgKHBvc2l0aW9uLmFu
Y2hvclR5cGUoKSAhPSBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yCisgICAgICAg
IHx8ICFwb3NpdGlvbi5jb250YWluZXJOb2RlKCkKKyAgICAgICAgfHwgIXBvc2l0aW9uLmNvbnRh
aW5lck5vZGUoKS0+aXNUZXh0Tm9kZSgpCisgICAgICAgIHx8ICFwb3NpdGlvbi5jb250YWluZXJO
b2RlKCktPnJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBwb3NpdGlv
bi5jb250YWluZXJOb2RlKCktPnJlbmRlcmVyKCktPnN0eWxlKCk7Cit9CisKK3ZvaWQgQXBwbHlC
bG9ja0VsZW1lbnRDb21tYW5kOjpyYW5nZUZvclBhcmFncmFwaFNwbGl0aW5nVGV4dE5vZGVzSWZO
ZWVkZWQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBlbmRPZkN1cnJlbnRQYXJhZ3JhcGgsIFBvc2l0
aW9uJiBzdGFydCwgUG9zaXRpb24mIGVuZCkKK3sKKyAgICBzdGFydCA9IHN0YXJ0T2ZQYXJhZ3Jh
cGgoZW5kT2ZDdXJyZW50UGFyYWdyYXBoKS5kZWVwRXF1aXZhbGVudCgpOworICAgIGVuZCA9IGVu
ZE9mQ3VycmVudFBhcmFncmFwaC5kZWVwRXF1aXZhbGVudCgpOworCisgICAgUmVuZGVyU3R5bGUq
IHN0YXJ0U3R5bGUgPSByZW5kZXJTdHlsZU9mRW5jbG9zaW5nVGV4dE5vZGUoc3RhcnQpOworICAg
IGlmIChzdGFydFN0eWxlKSB7CisgICAgICAgIC8vIEF2b2lkIG9idGFuaW5pbmcgdGhlIHN0YXJ0
IG9mIG5leHQgcGFyYWdyYXBoIGZvciBzdGFydAorICAgICAgICBpZiAoc3RhcnRTdHlsZS0+cHJl
c2VydmVOZXdsaW5lKCkgJiYgY2hhckF0UG9zaXRpb24oc3RhcnQpID09ICdcbicKKyAgICAgICAg
ICAgICYmIGNoYXJBdFBvc2l0aW9uKHN0YXJ0LnByZXZpb3VzKCkpICE9ICdcbicgJiYgc3RhcnQu
b2Zmc2V0SW5Db250YWluZXJOb2RlKCkgPiAwKQorICAgICAgICAgICAgc3RhcnQgPSBzdGFydE9m
UGFyYWdyYXBoKGVuZC5wcmV2aW91cygpKS5kZWVwRXF1aXZhbGVudCgpOworCisgICAgICAgIC8v
IElmIHN0YXJ0IGlzIGluIHRoZSBtaWRkbGUgb2YgYSB0ZXh0IG5vZGUsIHNwbGl0LgorICAgICAg
ICBpZiAoIXN0YXJ0U3R5bGUtPmNvbGxhcHNlV2hpdGVTcGFjZSgpICYmIHN0YXJ0Lm9mZnNldElu
Q29udGFpbmVyTm9kZSgpID4gMCkgeworICAgICAgICAgICAgaW50IHN0YXJ0T2Zmc2V0ID0gc3Rh
cnQub2Zmc2V0SW5Db250YWluZXJOb2RlKCk7CisgICAgICAgICAgICBzcGxpdFRleHROb2RlKHN0
YXRpY19jYXN0PFRleHQqPihzdGFydC5ub2RlKCkpLCBzdGFydE9mZnNldCk7CisgICAgICAgICAg
ICBzdGFydCA9IHBvc2l0aW9uQmVmb3JlTm9kZShzdGFydC5ub2RlKCkpOworICAgICAgICAgICAg
aWYgKHN0YXJ0Lm5vZGUoKSA9PSBlbmQubm9kZSgpKSB7CisgICAgICAgICAgICAgICAgQVNTRVJU
KGVuZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSA+PSBzdGFydE9mZnNldCk7CisgICAgICAgICAg
ICAgICAgZW5kID0gUG9zaXRpb24oZW5kLm5vZGUoKSwgZW5kLm9mZnNldEluQ29udGFpbmVyTm9k
ZSgpIC0gc3RhcnRPZmZzZXQsIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgUmVuZGVyU3R5bGUqIGVuZFN0
eWxlID0gcmVuZGVyU3R5bGVPZkVuY2xvc2luZ1RleHROb2RlKGVuZCk7CisgICAgaWYgKGVuZFN0
eWxlKSB7CisgICAgICAgIC8vIEluY2x1ZGUgXG4gYXQgdGhlIGVuZCBvZiBsaW5lIGlmIHdlJ3Jl
IGF0IGFuIGVtcHR5IHBhcmFncmFwaAorICAgICAgICBpZiAoZW5kU3R5bGUtPnByZXNlcnZlTmV3
bGluZSgpICYmIHN0YXJ0ID09IGVuZAorICAgICAgICAgICAgJiYgZW5kLm9mZnNldEluQ29udGFp
bmVyTm9kZSgpIDwgZW5kLmNvbnRhaW5lck5vZGUoKS0+bWF4Q2hhcmFjdGVyT2Zmc2V0KCkpIHsK
KyAgICAgICAgICAgIGludCBlbmRPZmZzZXQgPSBlbmQub2Zmc2V0SW5Db250YWluZXJOb2RlKCk7
CisgICAgICAgICAgICBpZiAoIWNoYXJBdFBvc2l0aW9uKGVuZC5wcmV2aW91cygpKSAhPSAnXG4n
ICYmIGNoYXJBdFBvc2l0aW9uKGVuZCkgPT0gJ1xuJykKKyAgICAgICAgICAgICAgICBlbmQgPSBQ
b3NpdGlvbihlbmQubm9kZSgpLCBlbmRPZmZzZXQgKyAxLCBQb3NpdGlvbjo6UG9zaXRpb25Jc09m
ZnNldEluQW5jaG9yKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIHN0YXJ0IGlzIGluIHRo
ZSBtaWRkbGUgb2YgYSB0ZXh0IG5vZGUsIHNwbGl0LgorICAgICAgICBpZiAoIWVuZFN0eWxlLT5j
b2xsYXBzZVdoaXRlU3BhY2UoKSAmJiBlbmQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkKKyAgICAg
ICAgICAgICYmIGVuZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSA8IGVuZC5jb250YWluZXJOb2Rl
KCktPm1heENoYXJhY3Rlck9mZnNldCgpKSB7CisgICAgICAgICAgICBzcGxpdFRleHROb2RlKHN0
YXRpY19jYXN0PFRleHQqPihlbmQubm9kZSgpKSwgZW5kLm9mZnNldEluQ29udGFpbmVyTm9kZSgp
KTsKKyAgICAgICAgICAgIGlmIChzdGFydC5ub2RlKCkgPT0gZW5kLm5vZGUoKSkKKyAgICAgICAg
ICAgICAgICBzdGFydCA9IHBvc2l0aW9uQmVmb3JlTm9kZShlbmQubm9kZSgpLT5wcmV2aW91c1Np
YmxpbmcoKSk7CisgICAgICAgICAgICBlbmQgPSBsYXN0UG9zaXRpb25Jbk5vZGUoZW5kLm5vZGUo
KS0+cHJldmlvdXNTaWJsaW5nKCkpOworICAgICAgICB9CisgICAgfQorfQorCitWaXNpYmxlUG9z
aXRpb24gQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kOjplbmRPZk5leHRQYXJhZ3JhaFNwbGl0dGlu
Z1RleHROb2Rlc0lmTmVlZGVkKFZpc2libGVQb3NpdGlvbiYgZW5kT2ZDdXJyZW50UGFyYWdyYXBo
LCBQb3NpdGlvbiYgc3RhcnQsIFBvc2l0aW9uJiBlbmQpCit7CisgICAgVmlzaWJsZVBvc2l0aW9u
IGVuZE9mTmV4dFBhcmFncmFwaCA9IGVuZE9mUGFyYWdyYXBoKGVuZE9mQ3VycmVudFBhcmFncmFw
aC5uZXh0KCkpOworICAgIFBvc2l0aW9uIHBvc2l0aW9uID0gZW5kT2ZOZXh0UGFyYWdyYXBoLmRl
ZXBFcXVpdmFsZW50KCk7CisgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gcmVuZGVyU3R5bGVPZkVu
Y2xvc2luZ1RleHROb2RlKHBvc2l0aW9uKTsKKyAgICBpZiAoIXN0eWxlKQorICAgICAgICByZXR1
cm4gZW5kT2ZOZXh0UGFyYWdyYXBoOworCisgICAgUmVmUHRyPE5vZGU+IGNvbnRhaW5lck5vZGUg
PSBwb3NpdGlvbi5jb250YWluZXJOb2RlKCk7CisgICAgaWYgKCFzdHlsZS0+cHJlc2VydmVOZXds
aW5lKCkgfHwgY2hhckF0UG9zaXRpb24oUG9zaXRpb24oY29udGFpbmVyTm9kZS5nZXQoKSwgMCwg
UG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcikpICE9ICdcbicKKyAgICAgICAgfHwg
IXBvc2l0aW9uLm9mZnNldEluQ29udGFpbmVyTm9kZSgpKQorICAgICAgICByZXR1cm4gZW5kT2ZO
ZXh0UGFyYWdyYXBoOworCisgICAgLy8gXG4gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgdGV4dCBu
b2RlIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUgY3VycmVudCBwYXJhZ3JhcGggaXMgdHJpbW1l
ZCBieSBtb3ZlUGFyYWdyYXBoV2l0aENsb25lcy4KKyAgICAvLyBJZiBlbmRPZk5leHRQYXJhZ3Jh
cGggd2FzIHBvaW50aW5nIGF0IHRoaXMgc2FtZSB0ZXh0IG5vZGUsIGVuZE9mTmV4dFBhcmFncmFw
aCB3aWxsIGJlIHNoaWZ0ZWQgYnkgb25lIHBhcmFncmFwaC4KKyAgICAvLyBBdm9pZCB0aGlzIGJ5
IHNwbGl0dGluZyAiXG4iCisgICAgc3BsaXRUZXh0Tm9kZShzdGF0aWNfY2FzdDxUZXh0Kj4oY29u
dGFpbmVyTm9kZS5nZXQoKSksIDEpOworCisgICAgaWYgKHN0YXJ0LmFuY2hvclR5cGUoKSA9PSBQ
b3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yICYmIGNvbnRhaW5lck5vZGUuZ2V0KCkg
PT0gc3RhcnQuY29udGFpbmVyTm9kZSgpKSB7CisgICAgICAgIEFTU0VSVChzdGFydC5vZmZzZXRJ
bkNvbnRhaW5lck5vZGUoKSA8IHBvc2l0aW9uLm9mZnNldEluQ29udGFpbmVyTm9kZSgpKTsKKyAg
ICAgICAgc3RhcnQgPSBQb3NpdGlvbihjb250YWluZXJOb2RlLT5wcmV2aW91c1NpYmxpbmcoKSwg
c3RhcnQub2Zmc2V0SW5Db250YWluZXJOb2RlKCksIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0
SW5BbmNob3IpOworICAgIH0KKyAgICBpZiAoZW5kLmFuY2hvclR5cGUoKSA9PSBQb3NpdGlvbjo6
UG9zaXRpb25Jc09mZnNldEluQW5jaG9yICYmIGNvbnRhaW5lck5vZGUuZ2V0KCkgPT0gZW5kLmNv
bnRhaW5lck5vZGUoKSkgeworICAgICAgICBBU1NFUlQoZW5kLm9mZnNldEluQ29udGFpbmVyTm9k
ZSgpIDwgcG9zaXRpb24ub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpOworICAgICAgICBlbmQgPSBQ
b3NpdGlvbihjb250YWluZXJOb2RlLT5wcmV2aW91c1NpYmxpbmcoKSwgZW5kLm9mZnNldEluQ29u
dGFpbmVyTm9kZSgpLCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKTsKKyAgICB9
CisKKyAgICByZXR1cm4gUG9zaXRpb24oY29udGFpbmVyTm9kZS5nZXQoKSwgcG9zaXRpb24ub2Zm
c2V0SW5Db250YWluZXJOb2RlKCkgLSAxLCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5j
aG9yKTsKK30KKwogUGFzc1JlZlB0cjxFbGVtZW50PiBBcHBseUJsb2NrRWxlbWVudENvbW1hbmQ6
OmNyZWF0ZUJsb2NrRWxlbWVudCgpIGNvbnN0CiB7CiAgICAgUmVmUHRyPEVsZW1lbnQ+IGVsZW1l
bnQgPSBjcmVhdGVIVE1MRWxlbWVudChkb2N1bWVudCgpLCBtX3RhZ05hbWUpOwpAQCAtMTgwLDI3
ICsyNjEsNCBAQCBQYXNzUmVmUHRyPEVsZW1lbnQ+IEFwcGx5QmxvY2tFbGVtZW50Q29tCiAgICAg
cmV0dXJuIGVsZW1lbnQucmVsZWFzZSgpOwogfQogCi0vLyBSZXR1cm5zIHRydWUgaWYgYXQgbGVh
c3Qgb25lIHRleHQgbm9kZSB3YXMgc3BsaXQuCi1ib29sIEFwcGx5QmxvY2tFbGVtZW50Q29tbWFu
ZDo6c3BsaXRUZXh0Tm9kZXMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBzdGFydCwgaW50IG51bVBh
cmFncmFwaHMpCi17Ci0gICAgVmlzaWJsZVBvc2l0aW9uIGN1cnJlbnRQYXJhZ3JhcGhTdGFydCA9
IHN0YXJ0OwotICAgIGJvb2wgaGFzU3BsaXQgPSBmYWxzZTsKLSAgICBpbnQgcGFyYWdyYXBoQ291
bnQ7Ci0gICAgZm9yIChwYXJhZ3JhcGhDb3VudCA9IDA7IHBhcmFncmFwaENvdW50IDwgbnVtUGFy
YWdyYXBoczsgKytwYXJhZ3JhcGhDb3VudCkgewotICAgICAgICAvLyBJZiB0aGVyZSBhcmUgbXVs
dGlwbGUgcGFyYWdyYXBocyBpbiBhIHNpbmdsZSB0ZXh0IG5vZGUsIHdlIHNwbGl0IHRoZSB0ZXh0
IG5vZGUgaW50byBhIHNlcGFyYXRlIG5vZGUgZm9yIGVhY2ggcGFyYWdyYXBoLgotICAgICAgICBp
ZiAoY3VycmVudFBhcmFncmFwaFN0YXJ0LmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLT5pc1RleHRO
b2RlKCkgJiYgY3VycmVudFBhcmFncmFwaFN0YXJ0LmRlZXBFcXVpdmFsZW50KCkubm9kZSgpID09
IHN0YXJ0T2ZQYXJhZ3JhcGgoY3VycmVudFBhcmFncmFwaFN0YXJ0LnByZXZpb3VzKCkpLmRlZXBF
cXVpdmFsZW50KCkubm9kZSgpKSB7Ci0gICAgICAgICAgICBUZXh0KiB0ZXh0Tm9kZSA9IHN0YXRp
Y19jYXN0PFRleHQgKj4oY3VycmVudFBhcmFncmFwaFN0YXJ0LmRlZXBFcXVpdmFsZW50KCkubm9k
ZSgpKTsKLSAgICAgICAgICAgIGludCBvZmZzZXQgPSBjdXJyZW50UGFyYWdyYXBoU3RhcnQuZGVl
cEVxdWl2YWxlbnQoKS5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKTsKLSAgICAgICAgICAgIHNwbGl0
VGV4dE5vZGUodGV4dE5vZGUsIG9mZnNldCk7Ci0gICAgICAgICAgICBjdXJyZW50UGFyYWdyYXBo
U3RhcnQgPSBWaXNpYmxlUG9zaXRpb24odGV4dE5vZGUsIDAsIFZQX0RFRkFVTFRfQUZGSU5JVFkp
OwotICAgICAgICAgICAgaGFzU3BsaXQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIFZpc2li
bGVQb3NpdGlvbiBuZXh0UGFyYWdyYXBoID0gc3RhcnRPZlBhcmFncmFwaChlbmRPZlBhcmFncmFw
aChjdXJyZW50UGFyYWdyYXBoU3RhcnQpLm5leHQoKSk7Ci0gICAgICAgIGlmIChuZXh0UGFyYWdy
YXBoLmlzTnVsbCgpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGN1cnJlbnRQYXJhZ3Jh
cGhTdGFydCA9IG5leHRQYXJhZ3JhcGg7Ci0gICAgfQotICAgIHJldHVybiBoYXNTcGxpdDsKLX0K
LQogfQpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0FwcGx5QmxvY2tFbGVtZW50Q29tbWFuZC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9BcHBseUJsb2NrRWxlbWVudENvbW1hbmQuaAko
cmV2aXNpb24gNjkzMjcpCisrKyBXZWJDb3JlL2VkaXRpbmcvQXBwbHlCbG9ja0VsZW1lbnRDb21t
YW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDggKzQ2LDkgQEAgcHJvdGVjdGVkOgogCiBwcml2
YXRlOgogICAgIHZpcnR1YWwgdm9pZCBkb0FwcGx5KCk7Ci0gICAgdmlydHVhbCB2b2lkIGZvcm1h
dFBhcmFncmFwaChjb25zdCBWaXNpYmxlUG9zaXRpb24mIGVuZE9mQ3VycmVudFBhcmFncmFwaCwg
UmVmUHRyPEVsZW1lbnQ+JikgPSAwOwotICAgIGJvb2wgc3BsaXRUZXh0Tm9kZXMoY29uc3QgVmlz
aWJsZVBvc2l0aW9uJiBzdGFydCwgaW50IG51bVBhcmFncmFwaHMpOworICAgIHZpcnR1YWwgdm9p
ZCBmb3JtYXRSYW5nZShjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiwgUmVm
UHRyPEVsZW1lbnQ+JikgPSAwOworICAgIHZvaWQgcmFuZ2VGb3JQYXJhZ3JhcGhTcGxpdGluZ1Rl
eHROb2Rlc0lmTmVlZGVkKGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIFBvc2l0aW9uJiwgUG9zaXRp
b24mKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gZW5kT2ZOZXh0UGFyYWdyYWhTcGxpdHRpbmdUZXh0
Tm9kZXNJZk5lZWRlZChWaXNpYmxlUG9zaXRpb24mLCBQb3NpdGlvbiYsIFBvc2l0aW9uJik7CiAK
ICAgICBRdWFsaWZpZWROYW1lIG1fdGFnTmFtZTsKICAgICBBdG9taWNTdHJpbmcgbV9jbGFzc05h
bWU7CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcAkocmV2aXNpb24g
NjkzMjcpCisrKyBXZWJDb3JlL2VkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDEsMTYgKzQxLDE3IEBAIEZvcm1hdEJsb2NrQ29tbWFuZDo6Rm9ybWF0Qmxv
Y2tDb21tYW5kKEQKIHsKIH0KIAotdm9pZCBGb3JtYXRCbG9ja0NvbW1hbmQ6OmZvcm1hdFBhcmFn
cmFwaChjb25zdCBWaXNpYmxlUG9zaXRpb24mIGVuZE9mQ3VycmVudFBhcmFncmFwaCwgUmVmUHRy
PEVsZW1lbnQ+JikKK3ZvaWQgRm9ybWF0QmxvY2tDb21tYW5kOjpmb3JtYXRSYW5nZShjb25zdCBQ
b3NpdGlvbiYsIGNvbnN0IFBvc2l0aW9uJiBlbmQsIFJlZlB0cjxFbGVtZW50PiYpCiB7Ci0gICAg
c2V0RW5kaW5nU2VsZWN0aW9uKGVuZE9mQ3VycmVudFBhcmFncmFwaCk7CisgICAgc2V0RW5kaW5n
U2VsZWN0aW9uKFZpc2libGVQb3NpdGlvbihlbmQpKTsKKwogICAgIE5vZGUqIHJlZk5vZGUgPSBl
bmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KGVuZGluZ1NlbGVjdGlvbigpLnZpc2libGVTdGFydCgp
KTsKICAgICBpZiAocmVmTm9kZS0+aGFzVGFnTmFtZSh0YWdOYW1lKCkpKQogICAgICAgICAvLyBX
ZSdyZSBhbHJlYWR5IGluIGEgYmxvY2sgd2l0aCB0aGUgZm9ybWF0IHdlIHdhbnQsIHNvIHdlIGRv
bid0IGhhdmUgdG8gZG8gYW55dGhpbmcKICAgICAgICAgcmV0dXJuOwogCi0gICAgVmlzaWJsZVBv
c2l0aW9uIHBhcmFncmFwaFN0YXJ0ID0gc3RhcnRPZlBhcmFncmFwaChlbmRpbmdTZWxlY3Rpb24o
KS52aXNpYmxlU3RhcnQoKSk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHBhcmFncmFwaEVuZCA9IGVu
ZE9mUGFyYWdyYXBoKGVuZGluZ1NlbGVjdGlvbigpLnZpc2libGVTdGFydCgpKTsKKyAgICBWaXNp
YmxlUG9zaXRpb24gcGFyYWdyYXBoU3RhcnQgPSBzdGFydE9mUGFyYWdyYXBoKGVuZCk7CisgICAg
VmlzaWJsZVBvc2l0aW9uIHBhcmFncmFwaEVuZCA9IGVuZE9mUGFyYWdyYXBoKGVuZCk7CiAgICAg
VmlzaWJsZVBvc2l0aW9uIGJsb2NrU3RhcnQgPSBzdGFydE9mQmxvY2soZW5kaW5nU2VsZWN0aW9u
KCkudmlzaWJsZVN0YXJ0KCkpOwogICAgIFZpc2libGVQb3NpdGlvbiBibG9ja0VuZCA9IGVuZE9m
QmxvY2soZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkpOwogICAgIFJlZlB0cjxFbGVt
ZW50PiBibG9ja05vZGUgPSBjcmVhdGVCbG9ja0VsZW1lbnQoKTsKSW5kZXg6IFdlYkNvcmUvZWRp
dGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcv
Rm9ybWF0QmxvY2tDb21tYW5kLmgJKHJldmlzaW9uIDY5MzI3KQorKysgV2ViQ29yZS9lZGl0aW5n
L0Zvcm1hdEJsb2NrQ29tbWFuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIHB1
YmxpYzoKIHByaXZhdGU6CiAgICAgRm9ybWF0QmxvY2tDb21tYW5kKERvY3VtZW50KiwgY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZm9ybWF0UGFyYWdy
YXBoKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgZW5kT2ZDdXJyZW50UGFyYWdyYXBoLCBSZWZQdHI8
RWxlbWVudD4mKTsKKyAgICB2aXJ0dWFsIHZvaWQgZm9ybWF0UmFuZ2UoY29uc3QgUG9zaXRpb24m
LCBjb25zdCBQb3NpdGlvbiYsIFJlZlB0cjxFbGVtZW50PiYpOwogICAgIHZpcnR1YWwgRWRpdEFj
dGlvbiBlZGl0aW5nQWN0aW9uKCkgY29uc3QgeyByZXR1cm4gRWRpdEFjdGlvbkZvcm1hdEJsb2Nr
OyB9CiB9OwogCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvSW5kZW50T3V0ZGVudENvbW1hbmQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9JbmRlbnRPdXRkZW50Q29tbWFuZC5jcHAJ
KHJldmlzaW9uIDY5MzI3KQorKysgV2ViQ29yZS9lZGl0aW5nL0luZGVudE91dGRlbnRDb21tYW5k
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsMTAgKzU2LDEwIEBAIEluZGVudE91dGRlbnRDb21t
YW5kOjpJbmRlbnRPdXRkZW50Q29tbWEKIHsKIH0KIAotYm9vbCBJbmRlbnRPdXRkZW50Q29tbWFu
ZDo6dHJ5SW5kZW50aW5nQXNMaXN0SXRlbShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGVuZE9mQ3Vy
cmVudFBhcmFncmFwaCkKK2Jvb2wgSW5kZW50T3V0ZGVudENvbW1hbmQ6OnRyeUluZGVudGluZ0Fz
TGlzdEl0ZW0oY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKQogewog
ICAgIC8vIElmIG91ciBzZWxlY3Rpb24gaXMgbm90IGluc2lkZSBhIGxpc3QsIGJhaWwgb3V0Lgot
ICAgIE5vZGUqIGxhc3ROb2RlSW5TZWxlY3RlZFBhcmFncmFwaCA9IGVuZE9mQ3VycmVudFBhcmFn
cmFwaC5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKTsKKyAgICBOb2RlKiBsYXN0Tm9kZUluU2VsZWN0
ZWRQYXJhZ3JhcGggPSBzdGFydC5ub2RlKCk7CiAgICAgUmVmUHRyPEVsZW1lbnQ+IGxpc3ROb2Rl
ID0gZW5jbG9zaW5nTGlzdChsYXN0Tm9kZUluU2VsZWN0ZWRQYXJhZ3JhcGgpOwogICAgIGlmICgh
bGlzdE5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTc4LDcgKzc4LDcgQEAgYm9vbCBJ
bmRlbnRPdXRkZW50Q29tbWFuZDo6dHJ5SW5kZW50aW5nQQogICAgIFJlZlB0cjxFbGVtZW50PiBu
ZXdMaXN0ID0gZG9jdW1lbnQoKS0+Y3JlYXRlRWxlbWVudChsaXN0Tm9kZS0+dGFnUU5hbWUoKSwg
ZmFsc2UpOwogICAgIGluc2VydE5vZGVCZWZvcmUobmV3TGlzdCwgc2VsZWN0ZWRMaXN0SXRlbSk7
CiAKLSAgICBtb3ZlUGFyYWdyYXBoV2l0aENsb25lcyhzdGFydE9mUGFyYWdyYXBoKGVuZE9mQ3Vy
cmVudFBhcmFncmFwaCksIGVuZE9mQ3VycmVudFBhcmFncmFwaCwgbmV3TGlzdC5nZXQoKSwgc2Vs
ZWN0ZWRMaXN0SXRlbSk7CisgICAgbW92ZVBhcmFncmFwaFdpdGhDbG9uZXMoc3RhcnQsIGVuZCwg
bmV3TGlzdC5nZXQoKSwgc2VsZWN0ZWRMaXN0SXRlbSk7CiAKICAgICBpZiAoY2FuTWVyZ2VMaXN0
cyhwcmV2aW91c0xpc3QsIG5ld0xpc3QuZ2V0KCkpKQogICAgICAgICBtZXJnZUlkZW50aWNhbEVs
ZW1lbnRzKHByZXZpb3VzTGlzdCwgbmV3TGlzdCk7CkBAIC04NywxMCArODcsOSBAQCBib29sIElu
ZGVudE91dGRlbnRDb21tYW5kOjp0cnlJbmRlbnRpbmdBCiAKICAgICByZXR1cm4gdHJ1ZTsKIH0K
LSAgICAKLXZvaWQgSW5kZW50T3V0ZGVudENvbW1hbmQ6OmluZGVudEludG9CbG9ja3F1b3RlKGNv
bnN0IFZpc2libGVQb3NpdGlvbiYgZW5kT2ZDdXJyZW50UGFyYWdyYXBoLCBSZWZQdHI8RWxlbWVu
dD4mIHRhcmdldEJsb2NrcXVvdGUpCisKK3ZvaWQgSW5kZW50T3V0ZGVudENvbW1hbmQ6OmluZGVu
dEludG9CbG9ja3F1b3RlKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVu
ZCwgUmVmUHRyPEVsZW1lbnQ+JiB0YXJnZXRCbG9ja3F1b3RlKQogewotICAgIFBvc2l0aW9uIHN0
YXJ0ID0gc3RhcnRPZlBhcmFncmFwaChlbmRPZkN1cnJlbnRQYXJhZ3JhcGgpLmRlZXBFcXVpdmFs
ZW50KCk7CiAgICAgTm9kZSogZW5jbG9zaW5nQ2VsbCA9IGVuY2xvc2luZ05vZGVPZlR5cGUoc3Rh
cnQsICZpc1RhYmxlQ2VsbCk7CiAgICAgTm9kZSogbm9kZVRvU3BsaXRUbzsKICAgICBpZiAoZW5j
bG9zaW5nQ2VsbCkKQEAgLTEwOSw3ICsxMDgsNyBAQCB2b2lkIEluZGVudE91dGRlbnRDb21tYW5k
OjppbmRlbnRJbnRvQmxvCiAgICAgICAgIGluc2VydE5vZGVCZWZvcmUodGFyZ2V0QmxvY2txdW90
ZSwgb3V0ZXJCbG9jayk7CiAgICAgfQogCi0gICAgbW92ZVBhcmFncmFwaFdpdGhDbG9uZXMoc3Rh
cnRPZlBhcmFncmFwaChlbmRPZkN1cnJlbnRQYXJhZ3JhcGgpLCBlbmRPZkN1cnJlbnRQYXJhZ3Jh
cGgsIHRhcmdldEJsb2NrcXVvdGUuZ2V0KCksIG91dGVyQmxvY2suZ2V0KCkpOworICAgIG1vdmVQ
YXJhZ3JhcGhXaXRoQ2xvbmVzKHN0YXJ0LCBlbmQsIHRhcmdldEJsb2NrcXVvdGUuZ2V0KCksIG91
dGVyQmxvY2suZ2V0KCkpOwogfQogCiB2b2lkIEluZGVudE91dGRlbnRDb21tYW5kOjpvdXRkZW50
UGFyYWdyYXBoKCkKQEAgLTIyMCwxMiArMjE5LDEyIEBAIHZvaWQgSW5kZW50T3V0ZGVudENvbW1h
bmQ6OmZvcm1hdFNlbGVjdGkKICAgICAgICAgb3V0ZGVudFJlZ2lvbihzdGFydE9mU2VsZWN0aW9u
LCBlbmRPZlNlbGVjdGlvbik7CiB9CiAKLXZvaWQgSW5kZW50T3V0ZGVudENvbW1hbmQ6OmZvcm1h
dFBhcmFncmFwaChjb25zdCBWaXNpYmxlUG9zaXRpb24mIGVuZE9mQ3VycmVudFBhcmFncmFwaCwg
UmVmUHRyPEVsZW1lbnQ+JiBibG9ja3F1b3RlRm9yTmV4dEluZGVudCkKK3ZvaWQgSW5kZW50T3V0
ZGVudENvbW1hbmQ6OmZvcm1hdFJhbmdlKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9z
aXRpb24mIGVuZCwgUmVmUHRyPEVsZW1lbnQ+JiBibG9ja3F1b3RlRm9yTmV4dEluZGVudCkKIHsK
LSAgICBpZiAodHJ5SW5kZW50aW5nQXNMaXN0SXRlbShlbmRPZkN1cnJlbnRQYXJhZ3JhcGgpKQor
ICAgIGlmICh0cnlJbmRlbnRpbmdBc0xpc3RJdGVtKHN0YXJ0LCBlbmQpKQogICAgICAgICBibG9j
a3F1b3RlRm9yTmV4dEluZGVudCA9IDA7CiAgICAgZWxzZQotICAgICAgICBpbmRlbnRJbnRvQmxv
Y2txdW90ZShlbmRPZkN1cnJlbnRQYXJhZ3JhcGgsIGJsb2NrcXVvdGVGb3JOZXh0SW5kZW50KTsK
KyAgICAgICAgaW5kZW50SW50b0Jsb2NrcXVvdGUoc3RhcnQsIGVuZCwgYmxvY2txdW90ZUZvck5l
eHRJbmRlbnQpOwogfQogCiB9CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvSW5kZW50T3V0ZGVudENv
bW1hbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvSW5kZW50T3V0ZGVudENvbW1h
bmQuaAkocmV2aXNpb24gNjkzMjcpCisrKyBXZWJDb3JlL2VkaXRpbmcvSW5kZW50T3V0ZGVudENv
bW1hbmQuaAkod29ya2luZyBjb3B5KQpAQCAtNDksMTEgKzQ5LDExIEBAIHByaXZhdGU6CiAgICAg
dm9pZCBpbmRlbnRSZWdpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgY29uc3QgVmlzaWJsZVBv
c2l0aW9uJik7CiAgICAgdm9pZCBvdXRkZW50UmVnaW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYs
IGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOwogICAgIHZvaWQgb3V0ZGVudFBhcmFncmFwaCgpOwot
ICAgIGJvb2wgdHJ5SW5kZW50aW5nQXNMaXN0SXRlbShjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsK
LSAgICB2b2lkIGluZGVudEludG9CbG9ja3F1b3RlKGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIFJl
ZlB0cjxFbGVtZW50PiYpOworICAgIGJvb2wgdHJ5SW5kZW50aW5nQXNMaXN0SXRlbShjb25zdCBQ
b3NpdGlvbiYsIGNvbnN0IFBvc2l0aW9uJik7CisgICAgdm9pZCBpbmRlbnRJbnRvQmxvY2txdW90
ZShjb25zdCBQb3NpdGlvbiYsIGNvbnN0IFBvc2l0aW9uJiwgUmVmUHRyPEVsZW1lbnQ+Jik7CiAK
ICAgICB2b2lkIGZvcm1hdFNlbGVjdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHN0YXJ0T2ZT
ZWxlY3Rpb24sIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgZW5kT2ZTZWxlY3Rpb24pOwotICAgIHZv
aWQgZm9ybWF0UGFyYWdyYXBoKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgZW5kT2ZDdXJyZW50UGFy
YWdyYXBoLCBSZWZQdHI8RWxlbWVudD4mIGJsb2NrcXVvdGVGb3JOZXh0SW5kZW50KTsKKyAgICB2
b2lkIGZvcm1hdFJhbmdlKGNvbnN0IFBvc2l0aW9uJiwgY29uc3QgUG9zaXRpb24mLCBSZWZQdHI8
RWxlbWVudD4mIGJsb2NrcXVvdGVGb3JOZXh0SW5kZW50KTsKIAogICAgIEVJbmRlbnRUeXBlIG1f
dHlwZU9mQWN0aW9uOwogICAgIGludCBtX21hcmdpbkluUGl4ZWxzOwpJbmRleDogTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNp
b24gNjkzMjcpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxOCBAQAorMjAxMC0xMC0wNyAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSRUdSRVNT
SU9OOiBJbmRlbnRpbmcgcHJlIGR1cGxpY2F0ZXMgY29udGVudAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDcyMzMKKworICAgICAgICBBZGRlZCB0ZXN0
cyB0byBlbnN1cmUgV2ViS2l0IGluZGVudHMgdGV4dHMgaW5zaWRlIHByZSBjb3JyZWN0bHkuCisK
KyAgICAgICAgKiBlZGl0aW5nL2V4ZWNDb21tYW5kL2luZGVudC1wcmUtZXhwZWN0ZWQudHh0Ogor
ICAgICAgICAqIGVkaXRpbmcvZXhlY0NvbW1hbmQvaW5kZW50LXByZS1saXN0LWV4cGVjdGVkLnR4
dDogQWRkZWQuCisgICAgICAgICogZWRpdGluZy9leGVjQ29tbWFuZC9pbmRlbnQtcHJlLWxpc3Qu
aHRtbDogQWRkZWQuCisgICAgICAgICogZWRpdGluZy9leGVjQ29tbWFuZC9pbmRlbnQtcHJlLXBh
cmFncmFwaHMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL2V4ZWNDb21t
YW5kL2luZGVudC1wcmUtcGFyYWdyYXBocy5odG1sOiBBZGRlZC4KKwogMjAxMC0wOS0yMSAgTWFy
dGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgQ2hyaXMgRmxlaXphY2guCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5k
L2luZGVudC1wcmUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRp
bmcvZXhlY0NvbW1hbmQvaW5kZW50LXByZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDY5MzI3KQor
KysgTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9pbmRlbnQtcHJlLWV4cGVjdGVkLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDcgQEAKIENPTlNPTEUgTUVTU0FHRTogbGluZSA0
NDogV3Jvbmcgbm9kZSBzZWxlY3RlZC4KIENPTlNPTEUgTUVTU0FHRTogbGluZSA0NjogV3Jvbmcg
YW5jaG9yIG9mZnNldDogOCBpbnN0ZWFkIG9mIDAKK0NPTlNPTEUgTUVTU0FHRTogbGluZSA0MTog
V3JvbmcgZW5kIG5vZGUgdHlwZTogW29iamVjdCBIVE1MQlJFbGVtZW50XQorQ09OU09MRSBNRVNT
QUdFOiBsaW5lIDQ0OiBXcm9uZyBub2RlIHNlbGVjdGVkLgogfCA8aHRtbD4KIHwgICA8aGVhZD4K
IHwgICA8Ym9keT4KQEAgLTE3LDggKzE5LDcgQEAgZG9lcyBub3QgY3Jhc2guIgogfCAgICAgICAg
IHN0eWxlPSJtYXJnaW46IDAgMCAwIDQwcHg7IGJvcmRlcjogbm9uZTsgcGFkZGluZzogMHB4OyIK
IHwgICAgICAgICA8cHJlPgogfCAgICAgICAgICAgaWQ9InByZS1iYXNpYyIKLXwgICAgICAgICAg
ICJsaW5lIG9uZQotIgorfCAgICAgICAgICAgImxpbmUgb25lIgogfCAgICAgICA8cHJlPgogfCAg
ICAgICAgIGlkPSJwcmUtYmFzaWMiCiB8ICAgICAgICAgImxpbmUgdHdvCkBAIC0yNyw4ICsyOCw3
IEBAIGRvZXMgbm90IGNyYXNoLiIKIHwgICAgICAgICBjbGFzcz0id2Via2l0LWluZGVudC1ibG9j
a3F1b3RlIgogfCAgICAgICAgIHN0eWxlPSJtYXJnaW46IDAgMCAwIDQwcHg7IGJvcmRlcjogbm9u
ZTsgcGFkZGluZzogMHB4OyIKIHwgICAgICAgICA8cHJlPgotfCAgICAgICAgICAgImxpbmUgdGhy
ZWUKLSIKK3wgICAgICAgICAgICJsaW5lIHRocmVlIgogfCAgICAgICAgIDxwcmU+CiB8ICAgICAg
ICAgICAibGluZSBmb3VyIgogfCAgICAgICAiCkBAIC00MywxMiArNDMsMTEgQEAgZG9lcyBub3Qg
Y3Jhc2guIgogfCAgICAgICAgICAgICA8YmxvY2txdW90ZT4KIHwgICAgICAgICAgICAgICBjbGFz
cz0id2Via2l0LWluZGVudC1ibG9ja3F1b3RlIgogfCAgICAgICAgICAgICAgIHN0eWxlPSJtYXJn
aW46IDAgMCAwIDQwcHg7IGJvcmRlcjogbm9uZTsgcGFkZGluZzogMHB4OyIKLXwgICAgICAgICAg
ICAgICAibGlzdCB0d28KLSIKLXwgICAgICAgICAgICAgICAibGlzdCB0aHJlZQotIgotfCAgICAg
ICAgICAgICAibGlzdCBmb3VyCi0iCit8ICAgICAgICAgICAgICAgImxpc3QgdHdvIgorfCAgICAg
ICAgICAgICAgIDxicj4KK3wgICAgICAgICAgICAgICAibGlzdCB0aHJlZSIKK3wgICAgICAgICAg
ICAgICA8YnI+Cit8ICAgICAgICAgICAgICAgImxpc3QgZm91ciIKIHwgICAgICAgIgogCiAiCkBA
IC02Niw4ICs2NSw3IEBAIGRvZXMgbm90IGNyYXNoLiIKIHwgICAgICAgICAgICAgICAgIGNsYXNz
PSJ3ZWJraXQtaW5kZW50LWJsb2NrcXVvdGUiCiB8ICAgICAgICAgICAgICAgICBzdHlsZT0ibWFy
Z2luOiAwIDAgMCA0MHB4OyBib3JkZXI6IG5vbmU7IHBhZGRpbmc6IDBweDsiCiB8ICAgICAgICAg
ICAgICAgICA8cHJlPgotfCAgICAgICAgICAgICAgICAgICAidGFibGUgdHdvCi0iCit8ICAgICAg
ICAgICAgICAgICAgICJ0YWJsZSB0d28iCiB8ICAgICAgICAgICAgICAgICA8cHJlPgogfCAgICAg
ICAgICAgICAgICAgICAidGFibGUgdGhyZWU8I3NlbGVjdGlvbi1mb2N1cz4iCiB8ICAgICAgICAg
ICAgIDx0ZD4KSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvaW5kZW50LXBy
ZS1saXN0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4
ZWNDb21tYW5kL2luZGVudC1wcmUtbGlzdC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL2luZGVudC1wcmUtbGlzdC1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTY3IEBACisKK0luZGVudGluZzoKK3wgIgorIgor
fCA8cHJlPgorfCAgIDx1bD4KK3wgICAgIDxsaT4KK3wgICAgICAgIjwjc2VsZWN0aW9uLWFuY2hv
cj5oZWxsbzwjc2VsZWN0aW9uLWZvY3VzPiIKK3wgIgorIgorCit5aWVsZHM6Cit8ICIKKyIKK3wg
PHByZT4KK3wgICA8dWw+Cit8ICAgICA8dWw+Cit8ICAgICAgIDxsaT4KK3wgICAgICAgICAiPCNz
ZWxlY3Rpb24tYW5jaG9yPmhlbGxvPCNzZWxlY3Rpb24tZm9jdXM+IgorfCAiCisiCisKK0luZGVu
dGluZzoKK3wgIgorIgorfCA8cHJlPgorfCAgIDx1bD4KK3wgICAgIDxsaT4KK3wgICAgICAgIjwj
c2VsZWN0aW9uLWFuY2hvcj5oZWxsbword29ybGQiCit8ICAgICAiPCNzZWxlY3Rpb24tZm9jdXM+
CisiCit8ICIKKyIKKworeWllbGRzOgorfCAiCisiCit8IDxwcmU+Cit8ICAgPHVsPgorfCAgICAg
PHVsPgorfCAgICAgICA8bGk+Cit8ICAgICAgICAgIjwjc2VsZWN0aW9uLWFuY2hvcj5oZWxsbyIK
K3wgICAgICAgPGxpPgorfCAgICAgICAgICJ3b3JsZDwjc2VsZWN0aW9uLWZvY3VzPiIKK3wgICAg
ICIKKyIKK3wgIgorIgorCitJbmRlbnRpbmc6Cit8ICIKKyIKK3wgPHVsPgorfCAgIDxsaT4KK3wg
ICAgIDxwcmU+Cit8ICAgICAgICI8I3NlbGVjdGlvbi1hbmNob3I+aGVsbG8KK3dvcmxkCit3ZWJr
aXQ8I3NlbGVjdGlvbi1mb2N1cz4KKyIKK3wgIgorIgorCit5aWVsZHM6Cit8ICIKKyIKK3wgPHVs
PgorfCAgIDxsaT4KK3wgICAgIDxwcmU+Cit8ICAgICAgIDxibG9ja3F1b3RlPgorfCAgICAgICAg
IGNsYXNzPSJ3ZWJraXQtaW5kZW50LWJsb2NrcXVvdGUiCit8ICAgICAgICAgc3R5bGU9Im1hcmdp
bjogMCAwIDAgNDBweDsgYm9yZGVyOiBub25lOyBwYWRkaW5nOiAwcHg7IgorfCAgICAgICAgICJo
ZWxsbyIKK3wgICAgICAgICA8YnI+Cit8ICAgICAgICAgIndvcmxkIgorfCAgICAgICAgIDxicj4K
K3wgICAgICAgICAid2Via2l0IgorfCAiCisiCisKK0luZGVudGluZzoKK3wgIgorIgorfCA8dWw+
Cit8ICAgPGxpPgorfCAgICAgPHByZT4KK3wgICAgICAgIjwjc2VsZWN0aW9uLWFuY2hvcj5oZWxs
bzwjc2VsZWN0aW9uLWZvY3VzPgord29ybGQKK3dlYmtpdAorIgorfCAiCisiCisKK3lpZWxkczoK
K3wgIgorIgorfCA8dWw+Cit8ICAgPGxpPgorfCAgICAgPHByZT4KK3wgICAgICAgPGJsb2NrcXVv
dGU+Cit8ICAgICAgICAgY2xhc3M9IndlYmtpdC1pbmRlbnQtYmxvY2txdW90ZSIKK3wgICAgICAg
ICBzdHlsZT0ibWFyZ2luOiAwIDAgMCA0MHB4OyBib3JkZXI6IG5vbmU7IHBhZGRpbmc6IDBweDsi
Cit8ICAgICAgICAgIjwjc2VsZWN0aW9uLWFuY2hvcj5oZWxsbzwjc2VsZWN0aW9uLWZvY3VzPiIK
K3wgICAgICAgIndvcmxkCit3ZWJraXQKKyIKK3wgIgorIgorCitJbmRlbnRpbmc6Cit8ICIKKyIK
K3wgPHVsPgorfCAgIDxsaT4KK3wgICAgIDxwcmU+Cit8ICAgICAgICJoZWxsbworPCNzZWxlY3Rp
b24tYW5jaG9yPndvcmxkPCNzZWxlY3Rpb24tZm9jdXM+Cit3ZWJraXQKKyIKK3wgIgorIgorCit5
aWVsZHM6Cit8ICIKKyIKK3wgPHVsPgorfCAgIDxsaT4KK3wgICAgIDxwcmU+Cit8ICAgICAgICJo
ZWxsbworIgorfCAgICAgICA8YmxvY2txdW90ZT4KK3wgICAgICAgICBjbGFzcz0id2Via2l0LWlu
ZGVudC1ibG9ja3F1b3RlIgorfCAgICAgICAgIHN0eWxlPSJtYXJnaW46IDAgMCAwIDQwcHg7IGJv
cmRlcjogbm9uZTsgcGFkZGluZzogMHB4OyIKK3wgICAgICAgICAiPCNzZWxlY3Rpb24tYW5jaG9y
PndvcmxkPCNzZWxlY3Rpb24tZm9jdXM+IgorfCAgICAgICAid2Via2l0CisiCit8ICIKKyIKKwor
SW5kZW50aW5nOgorfCAiCisiCit8IDx1bD4KK3wgICA8bGk+Cit8ICAgICA8cHJlPgorfCAgICAg
ICAiaGVsbG8KK3dvcmxkCis8I3NlbGVjdGlvbi1hbmNob3I+d2Via2k8I3NlbGVjdGlvbi1mb2N1
cz50CisiCit8ICIKKyIKKworeWllbGRzOgorfCAiCisiCit8IDx1bD4KK3wgICA8bGk+Cit8ICAg
ICA8cHJlPgorfCAgICAgICAiaGVsbG8KK3dvcmxkCisiCit8ICAgICAgIDxibG9ja3F1b3RlPgor
fCAgICAgICAgIGNsYXNzPSJ3ZWJraXQtaW5kZW50LWJsb2NrcXVvdGUiCit8ICAgICAgICAgc3R5
bGU9Im1hcmdpbjogMCAwIDAgNDBweDsgYm9yZGVyOiBub25lOyBwYWRkaW5nOiAwcHg7IgorfCAg
ICAgICAgICI8I3NlbGVjdGlvbi1hbmNob3I+d2Via2k8I3NlbGVjdGlvbi1mb2N1cz50IgorfCAi
CisiCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL2luZGVudC1wcmUtbGlz
dC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvaW5k
ZW50LXByZS1saXN0Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4
ZWNDb21tYW5kL2luZGVudC1wcmUtbGlzdC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDgy
IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4v
cmVzb3VyY2VzL2R1bXAtYXMtbWFya3VwLmpzIj48L3NjcmlwdD4KKzxkaXYgaWQ9InRlc3QwIiBj
b250ZW50ZWRpdGFibGU+Cis8cHJlPgorPHVsPjxsaT5oZWxsbzwvbGk+PC91bD48L3ByZT4KKzwv
ZGl2PgorCis8ZGl2IGlkPSJ0ZXN0MSIgY29udGVudGVkaXRhYmxlPgorPHByZT48dWw+PGxpPmhl
bGxvCit3b3JsZDwvbGk+Cis8L3VsPjwvcHJlPgorPC9kaXY+CisKKzxkaXYgaWQ9InRlc3QyIiBj
b250ZW50ZWRpdGFibGU+Cis8dWw+PGxpPjxwcmU+CitoZWxsbword29ybGQKK3dlYmtpdAorPC9w
cmU+PC9saT48L3VsPgorPC9kaXY+CisKKzxkaXYgaWQ9InRlc3QzIiBjb250ZW50ZWRpdGFibGU+
Cis8dWw+PGxpPjxwcmU+CitoZWxsbword29ybGQKK3dlYmtpdAorPC9wcmU+PC9saT48L3VsPgor
PC9kaXY+CisKKzxkaXYgaWQ9InRlc3Q0IiBjb250ZW50ZWRpdGFibGU+Cis8dWw+PGxpPjxwcmU+
CitoZWxsbword29ybGQKK3dlYmtpdAorPC9wcmU+PC9saT48L3VsPgorPC9kaXY+CisKKzxkaXYg
aWQ9InRlc3Q1IiBjb250ZW50ZWRpdGFibGU+Cis8dWw+PGxpPjxwcmU+CitoZWxsbword29ybGQK
K3dlYmtpdAorPC9wcmU+PC9saT48L3VsPgorPC9kaXY+CisKKzxzY3JpcHQ+CisKK2Z1bmN0aW9u
IHRlc3RJbmRlbnRhdGlvbihjb250YWluZXJJZCwgc2VsZWN0b3IpIHsKKyAgICB2YXIgY29udGFp
bmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoY29udGFpbmVySWQpOworICAgIHNlbGVjdG9y
KGNvbnRhaW5lcik7CisgICAgTWFya3VwLmR1bXAoY29udGFpbmVyLCAnSW5kZW50aW5nJyk7Cisg
ICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luZGVudCcsIGZhbHNlLCBudWxsKTsKKyAgICBNYXJr
dXAuZHVtcChjb250YWluZXIsICd5aWVsZHMnKTsKK30KKworZnVuY3Rpb24gc2VsZWN0QWxsKGNv
bnRhaW5lcikgeworICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5zZWxlY3RBbGxDaGlsZHJlbihj
b250YWluZXIpOworfQorCitmdW5jdGlvbiBzZWxlY3RvckZvckxpbmVOKGxpbmUpIHsKKyAgICBy
ZXR1cm4gZnVuY3Rpb24gKGNvbnRhaW5lcikgeworICAgICAgICB3aW5kb3cuZ2V0U2VsZWN0aW9u
KCkuc2V0UG9zaXRpb24oY29udGFpbmVyLCAwKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBsaW5lIC0gMTsgaSsrKQorICAgICAgICAgICAgd2luZG93LmdldFNlbGVjdGlvbigpLm1vZGlm
eSgnbW92ZScsICdmb3J3YXJkJywgJ2xpbmUnKTsKKyAgICAgICAgd2luZG93LmdldFNlbGVjdGlv
bigpLm1vZGlmeSgnZXh0ZW5kJywgJ2ZvcndhcmQnLCAnbGluZScpOworICAgICAgICAvLyBBdm9p
ZCBpbmNsdWRpbmcgXG4gYXQgdGhlIGVuZCBvZiBsaW5lLgorICAgICAgICB3aW5kb3cuZ2V0U2Vs
ZWN0aW9uKCkubW9kaWZ5KCdleHRlbmQnLCAnYmFja3dhcmQnLCAnY2hhcmFjdGVyJyk7CisgICAg
fQorfQorCit0ZXN0SW5kZW50YXRpb24oJ3Rlc3QwJywgc2VsZWN0QWxsKTsKK3Rlc3RJbmRlbnRh
dGlvbigndGVzdDEnLCBzZWxlY3RBbGwpOwordGVzdEluZGVudGF0aW9uKCd0ZXN0MicsIHNlbGVj
dEFsbCk7Cit0ZXN0SW5kZW50YXRpb24oJ3Rlc3QzJywgc2VsZWN0b3JGb3JMaW5lTigxKSk7Cit0
ZXN0SW5kZW50YXRpb24oJ3Rlc3Q0Jywgc2VsZWN0b3JGb3JMaW5lTigyKSk7Cit0ZXN0SW5kZW50
YXRpb24oJ3Rlc3Q1Jywgc2VsZWN0b3JGb3JMaW5lTigzKSk7CisKKzwvc2NyaXB0PgorPC9ib2R5
PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9pbmRlbnQt
cHJlLXBhcmFncmFwaHMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Vk
aXRpbmcvZXhlY0NvbW1hbmQvaW5kZW50LXByZS1wYXJhZ3JhcGhzLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvaW5kZW50LXByZS1w
YXJhZ3JhcGhzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNjAgQEAKKwor
SW5kZW50aW5nOgorfCAiCisiCit8IDxwcmU+Cit8ICAgIjwjc2VsZWN0aW9uLWFuY2hvcj5oZWxs
bzwjc2VsZWN0aW9uLWZvY3VzPiIKK3wgIgorIgorCit5aWVsZHM6Cit8ICIKKyIKK3wgPGJsb2Nr
cXVvdGU+Cit8ICAgY2xhc3M9IndlYmtpdC1pbmRlbnQtYmxvY2txdW90ZSIKK3wgICBzdHlsZT0i
bWFyZ2luOiAwIDAgMCA0MHB4OyBib3JkZXI6IG5vbmU7IHBhZGRpbmc6IDBweDsiCit8ICAgPHBy
ZT4KK3wgICAgICI8I3NlbGVjdGlvbi1hbmNob3I+aGVsbG88I3NlbGVjdGlvbi1mb2N1cz4iCit8
ICIKKyIKKworSW5kZW50aW5nOgorfCAiCisiCit8IDxwcmU+Cit8ICAgIjwjc2VsZWN0aW9uLWFu
Y2hvcj5oZWxsbworCit3b3JsZAorCit3ZWJraXQ8I3NlbGVjdGlvbi1mb2N1cz4KKyIKK3wgIgor
IgorCit5aWVsZHM6Cit8ICIKKyIKK3wgPGJsb2NrcXVvdGU+Cit8ICAgY2xhc3M9IndlYmtpdC1p
bmRlbnQtYmxvY2txdW90ZSIKK3wgICBzdHlsZT0ibWFyZ2luOiAwIDAgMCA0MHB4OyBib3JkZXI6
IG5vbmU7IHBhZGRpbmc6IDBweDsiCit8ICAgPHByZT4KK3wgICAgICI8I3NlbGVjdGlvbi1hbmNo
b3I+aGVsbG8iCit8ICAgPHByZT4KK3wgICAgICIKKyIKK3wgICA8cHJlPgorfCAgICAgIndvcmxk
IgorfCAgIDxwcmU+Cit8ICAgICAiCisiCit8ICAgPHByZT4KK3wgICAgICJ3ZWJraXQ8I3NlbGVj
dGlvbi1mb2N1cz4iCit8ICIKKyIKKworSW5kZW50aW5nOgorfCAiCisiCit8IDxwcmU+Cit8ICAg
Ijwjc2VsZWN0aW9uLWFuY2hvcj5oZWxsbword29ybGQKK3dlYmtpdDwjc2VsZWN0aW9uLWZvY3Vz
PgorIgorfCAiCisiCisKK3lpZWxkczoKK3wgIgorIgorfCA8YmxvY2txdW90ZT4KK3wgICBjbGFz
cz0id2Via2l0LWluZGVudC1ibG9ja3F1b3RlIgorfCAgIHN0eWxlPSJtYXJnaW46IDAgMCAwIDQw
cHg7IGJvcmRlcjogbm9uZTsgcGFkZGluZzogMHB4OyIKK3wgICA8cHJlPgorfCAgICAgIjwjc2Vs
ZWN0aW9uLWFuY2hvcj5oZWxsbyIKK3wgICA8cHJlPgorfCAgICAgIndvcmxkIgorfCAgIDxwcmU+
Cit8ICAgICAid2Via2l0PCNzZWxlY3Rpb24tZm9jdXM+IgorfCAiCisiCisKK0luZGVudGluZzoK
K3wgIgorIgorfCA8cHJlPgorfCAgICI8I3NlbGVjdGlvbi1hbmNob3I+aGVsbG88I3NlbGVjdGlv
bi1mb2N1cz4KKword29ybGQKKyIKK3wgIgorIgorCit5aWVsZHM6Cit8ICIKKyIKK3wgPGJsb2Nr
cXVvdGU+Cit8ICAgY2xhc3M9IndlYmtpdC1pbmRlbnQtYmxvY2txdW90ZSIKK3wgICBzdHlsZT0i
bWFyZ2luOiAwIDAgMCA0MHB4OyBib3JkZXI6IG5vbmU7IHBhZGRpbmc6IDBweDsiCit8ICAgPHBy
ZT4KK3wgICAgICI8I3NlbGVjdGlvbi1hbmNob3I+aGVsbG88I3NlbGVjdGlvbi1mb2N1cz4iCit8
IDxwcmU+Cit8ICAgIgord29ybGQKKyIKK3wgIgorIgorCitJbmRlbnRpbmc6Cit8ICIKKyIKK3wg
PHByZT4KK3wgICAiaGVsbG8KKzwjc2VsZWN0aW9uLWNhcmV0Pgord29ybGQKKyIKK3wgIgorIgor
Cit5aWVsZHM6Cit8ICIKKyIKK3wgPHByZT4KK3wgICAiaGVsbG88I3NlbGVjdGlvbi1jYXJldD4K
KyIKK3wgPGJsb2NrcXVvdGU+Cit8ICAgY2xhc3M9IndlYmtpdC1pbmRlbnQtYmxvY2txdW90ZSIK
K3wgICBzdHlsZT0ibWFyZ2luOiAwIDAgMCA0MHB4OyBib3JkZXI6IG5vbmU7IHBhZGRpbmc6IDBw
eDsiCit8ICAgPHByZT4KK3wgICAgICIKKyIKK3wgPHByZT4KK3wgICAid29ybGQKKyIKK3wgIgor
IgorCitJbmRlbnRpbmc6Cit8ICIKKyIKK3wgPHByZT4KK3wgICAiaGVsbG8KKworPCNzZWxlY3Rp
b24tYW5jaG9yPndvcmw8I3NlbGVjdGlvbi1mb2N1cz5kCisiCit8ICIKKyIKKworeWllbGRzOgor
fCAiCisiCit8IDxwcmU+Cit8ICAgImhlbGxvCis8I3NlbGVjdGlvbi1hbmNob3I+CisiCit8IDxi
bG9ja3F1b3RlPgorfCAgIGNsYXNzPSJ3ZWJraXQtaW5kZW50LWJsb2NrcXVvdGUiCit8ICAgc3R5
bGU9Im1hcmdpbjogMCAwIDAgNDBweDsgYm9yZGVyOiBub25lOyBwYWRkaW5nOiAwcHg7IgorfCAg
IDxwcmU+Cit8ICAgICAid29ybDwjc2VsZWN0aW9uLWZvY3VzPmQiCit8ICIKKyIKSW5kZXg6IExh
eW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvaW5kZW50LXByZS1wYXJhZ3JhcGhzLmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9pbmRlbnQtcHJl
LXBhcmFncmFwaHMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvZXhl
Y0NvbW1hbmQvaW5kZW50LXByZS1wYXJhZ3JhcGhzLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsODMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIu
Li8uLi9yZXNvdXJjZXMvZHVtcC1hcy1tYXJrdXAuanMiPjwvc2NyaXB0PgorPGRpdiBpZD0idGVz
dDAiIGNvbnRlbnRlZGl0YWJsZT4KKzxwcmU+aGVsbG88L3ByZT4KKzwvZGl2PgorCis8ZGl2IGlk
PSJ0ZXN0MSIgY29udGVudGVkaXRhYmxlPgorPHByZT4KK2hlbGxvCisKK3dvcmxkCisKK3dlYmtp
dAorPC9wcmU+Cis8L2Rpdj4KKworPGRpdiBpZD0idGVzdDIiIGNvbnRlbnRlZGl0YWJsZT4KKzxw
cmU+CitoZWxsbword29ybGQKK3dlYmtpdAorPC9wcmU+Cis8L2Rpdj4KKworPGRpdiBpZD0idGVz
dDMiIGNvbnRlbnRlZGl0YWJsZT4KKzxwcmU+CitoZWxsbworCit3b3JsZAorPC9wcmU+Cis8L2Rp
dj4KKworPGRpdiBpZD0idGVzdDQiIGNvbnRlbnRlZGl0YWJsZT4KKzxwcmU+CitoZWxsbworCit3
b3JsZAorPC9wcmU+Cis8L2Rpdj4KKworPGRpdiBpZD0idGVzdDUiIGNvbnRlbnRlZGl0YWJsZT4K
KzxwcmU+CitoZWxsbworCit3b3JsZAorPC9wcmU+Cis8L2Rpdj4KKzxzY3JpcHQ+CisKK2Z1bmN0
aW9uIHRlc3RJbmRlbnRhdGlvbihjb250YWluZXJJZCwgc2VsZWN0b3IpIHsKKyAgICB2YXIgY29u
dGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoY29udGFpbmVySWQpOworICAgIHNlbGVj
dG9yKGNvbnRhaW5lcik7CisgICAgTWFya3VwLmR1bXAoY29udGFpbmVyLCAnSW5kZW50aW5nJyk7
CisgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luZGVudCcsIGZhbHNlLCBudWxsKTsKKyAgICBN
YXJrdXAuZHVtcChjb250YWluZXIsICd5aWVsZHMnKTsKK30KKworZnVuY3Rpb24gc2VsZWN0QWxs
KGNvbnRhaW5lcikgeworICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5zZWxlY3RBbGxDaGlsZHJl
bihjb250YWluZXIpOworfQorCitmdW5jdGlvbiBzZWxlY3RvckZvckxpbmVOKGxpbmUpIHsKKyAg
ICByZXR1cm4gZnVuY3Rpb24gKGNvbnRhaW5lcikgeworICAgICAgICB3aW5kb3cuZ2V0U2VsZWN0
aW9uKCkuc2V0UG9zaXRpb24oY29udGFpbmVyLCAwKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBsaW5lIC0gMTsgaSsrKQorICAgICAgICAgICAgd2luZG93LmdldFNlbGVjdGlvbigpLm1v
ZGlmeSgnbW92ZScsICdmb3J3YXJkJywgJ2xpbmUnKTsKKyAgICAgICAgd2luZG93LmdldFNlbGVj
dGlvbigpLm1vZGlmeSgnZXh0ZW5kJywgJ2ZvcndhcmQnLCAnbGluZScpOworICAgICAgICB3aW5k
b3cuZ2V0U2VsZWN0aW9uKCkubW9kaWZ5KCdleHRlbmQnLCAnYmFja3dhcmQnLCAnY2hhcmFjdGVy
Jyk7CisgICAgfQorfQorCit0ZXN0SW5kZW50YXRpb24oJ3Rlc3QwJywgc2VsZWN0QWxsKTsKK3Rl
c3RJbmRlbnRhdGlvbigndGVzdDEnLCBzZWxlY3RBbGwpOwordGVzdEluZGVudGF0aW9uKCd0ZXN0
MicsIHNlbGVjdEFsbCk7Cit0ZXN0SW5kZW50YXRpb24oJ3Rlc3QzJywgc2VsZWN0b3JGb3JMaW5l
TigxKSk7Cit0ZXN0SW5kZW50YXRpb24oJ3Rlc3Q0Jywgc2VsZWN0b3JGb3JMaW5lTigyKSk7Cit0
ZXN0SW5kZW50YXRpb24oJ3Rlc3Q1Jywgc2VsZWN0b3JGb3JMaW5lTigzKSk7CisKKzwvc2NyaXB0
PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70163</attachid>
            <date>2010-10-07 16:07:41 -0700</date>
            <delta_ts>2010-10-07 17:26:53 -0700</delta_ts>
            <desc>fixed per tony&apos;s comment</desc>
            <filename>bug-47233-20101007160739.patch</filename>
            <type>text/plain</type>
            <size>31874</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2OTMyNykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzYgQEAKKzIwMTAtMTAtMDcgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUkVH
UkVTU0lPTjogSW5kZW50aW5nIHByZSBkdXBsaWNhdGVzIGNvbnRlbnQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3MjMzCisKKyAgICAgICAgVGhlIGJ1
ZyB3YXMgY2F1c2VkIGJ5IG91ciBub3Qgc3BsaXR0aW5nIHRleHQgbm9kZXMgcHJvcGVybHkuCisK
KyAgICAgICAgSW4gbmV3IGFwcHJvYWNoLCB3ZSBzcGxpdCB0ZXh0IG5vZGVzIGluIGVhY2ggaXRl
cmF0aW9uLiBBZGRlZCByYW5nZUZvclBhcmFncmFwaFNwbGl0aW5nVGV4dE5vZGVzSWZOZWVkZWQK
KyAgICAgICAgdG8gc3BsaXQgdGV4dCBub2RlcyBhdCB0aGUgc3RhcnQgYW5kIGF0IHRoZSBlbmQg
b2YgcGFyYWdyYXBoLCB3aGljaCBhbHNvIGFkanVzdHMgc3RhcnQgYW5kIGVuZCBwb3NpdGlvbnMK
KyAgICAgICAgZm9yIG1vdmVQYXJhZ3JhcGhXaXRoQ2xvbmVzLiBBZGRlZCBlbmRPZk5leHRQYXJh
Z3JhaFNwbGl0dGluZ1RleHROb2Rlc0lmTmVlZGVkIHRvIGFkanVzdCBlbmRPZk5leHRQYXJhZ3Jh
cGgsCisgICAgICAgIHN0YXJ0LCBhbmQgZW5kIHRvIHdvcmstYXJvdW5kIG1vdmVQYXJhZ3JhcGhX
aXRoQ2xvbmVzJ3MgcmVtb3ZpbmcgYSBsaW5lIGZlZWQuCisKKyAgICAgICAgVGVzdHM6IGVkaXRp
bmcvZXhlY0NvbW1hbmQvaW5kZW50LXByZS1saXN0Lmh0bWwKKyAgICAgICAgICAgICAgIGVkaXRp
bmcvZXhlY0NvbW1hbmQvaW5kZW50LXByZS1wYXJhZ3JhcGhzLmh0bWwKKworICAgICAgICAqIGVk
aXRpbmcvQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGx5QmxvY2tFbGVtZW50Q29tbWFuZDo6Zm9ybWF0U2VsZWN0aW9uKTogU2VlIGFib3ZlLgorICAg
ICAgICAoV2ViQ29yZTo6aXNOZXdMaW5lQXRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpy
ZW5kZXJTdHlsZU9mRW5jbG9zaW5nVGV4dE5vZGUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkFwcGx5QmxvY2tFbGVtZW50Q29tbWFuZDo6cmFuZ2VGb3JQYXJhZ3JhcGhTcGxpdHRpbmdUZXh0
Tm9kZXNJZk5lZWRlZCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlCbG9ja0VsZW1l
bnRDb21tYW5kOjplbmRPZk5leHRQYXJhZ3JhaFNwbGl0dGluZ1RleHROb2Rlc0lmTmVlZGVkKTog
QWRkZWQuCisgICAgICAgICogZWRpdGluZy9BcHBseUJsb2NrRWxlbWVudENvbW1hbmQuaDoKKyAg
ICAgICAgKiBlZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGb3JtYXRCbG9ja0NvbW1hbmQ6OmZvcm1hdFJhbmdlKTogVGFrZXMgdHdvIFBvc2l0aW9ucyBp
bnN0ZWFkIG9mIG9uZSBWaXNpYmxlUG9zaXRpb24uCisgICAgICAgICogZWRpdGluZy9Gb3JtYXRC
bG9ja0NvbW1hbmQuaDoKKyAgICAgICAgKiBlZGl0aW5nL0luZGVudE91dGRlbnRDb21tYW5kLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkluZGVudE91dGRlbnRDb21tYW5kOjp0cnlJbmRlbnRpbmdB
c0xpc3RJdGVtKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpJbmRlbnRPdXRkZW50Q29tbWFu
ZDo6aW5kZW50SW50b0Jsb2NrcXVvdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkluZGVu
dE91dGRlbnRDb21tYW5kOjpmb3JtYXRSYW5nZSk6IERpdHRvLgorICAgICAgICAqIGVkaXRpbmcv
SW5kZW50T3V0ZGVudENvbW1hbmQuaDoKKwogMjAxMC0xMC0wNSAgTWFydGluIFJvYmluc29uICA8
bXJvYmluc29uQGlnYWxpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQ2hyaXMgRmxlaXph
Y2guCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2
aXNpb24gNjkzMjcpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtMjExNTAsNyArMjExNTAsNiBAQAogCQkJaXNhID0gUEJYUHJv
amVjdDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAxNDlDMjg0MzA4OTAyQjExMDA4QTlF
RkMgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0ICJXZWJDb3JlIiAq
LzsKIAkJCWNvbXBhdGliaWxpdHlWZXJzaW9uID0gIlhjb2RlIDIuNCI7Ci0JCQlkZXZlbG9wbWVu
dFJlZ2lvbiA9IEVuZ2xpc2g7CiAJCQloYXNTY2FubmVkRm9yRW5jb2RpbmdzID0gMTsKIAkJCWtu
b3duUmVnaW9ucyA9ICgKIAkJCQlFbmdsaXNoLApJbmRleDogV2ViQ29yZS9lZGl0aW5nL0FwcGx5
QmxvY2tFbGVtZW50Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0Fw
cGx5QmxvY2tFbGVtZW50Q29tbWFuZC5jcHAJKHJldmlzaW9uIDY5MzI3KQorKysgV2ViQ29yZS9l
ZGl0aW5nL0FwcGx5QmxvY2tFbGVtZW50Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4
LDIyICszOCw2IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1M
TmFtZXM7Ci0gICAgCi0vLyBUaGlzIGZ1bmN0aW9uIGNhbiByZXR1cm4gLTEgaWYgd2UgYXJlIHVu
YWJsZSB0byBjb3VudCB0aGUgcGFyYWdyYXBocyBiZXR3ZWVuIHxzdGFydHwgYW5kIHxlbmR8Lgot
c3RhdGljIGludCBjb3VudFBhcmFncmFwaHMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBlbmRPZkZp
cnN0UGFyYWdyYXBoLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIGVuZE9mTGFzdFBhcmFncmFwaCkK
LXsKLSAgICBpbnQgY291bnQgPSAwOwotICAgIFZpc2libGVQb3NpdGlvbiBjdXIgPSBlbmRPZkZp
cnN0UGFyYWdyYXBoOwotICAgIHdoaWxlIChjdXIgIT0gZW5kT2ZMYXN0UGFyYWdyYXBoKSB7Ci0g
ICAgICAgICsrY291bnQ7Ci0gICAgICAgIGN1ciA9IGVuZE9mUGFyYWdyYXBoKGN1ci5uZXh0KCkp
OwotICAgICAgICAvLyBJZiBzdGFydCBpcyBiZWZvcmUgYSB0YWJsZSBhbmQgZW5kIGlzIGluc2lk
ZSBhIHRhYmxlLCB3ZSB3aWxsIG5ldmVyIGhpdCBlbmQgYmVjYXVzZSB0aGUKLSAgICAgICAgLy8g
d2hvbGUgdGFibGUgaXMgY29uc2lkZXJlZCBhIHNpbmdsZSBwYXJhZ3JhcGguCi0gICAgICAgIGlm
IChjdXIuaXNOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIHJldHVy
biBjb3VudDsKLX0KIAogQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kOjpBcHBseUJsb2NrRWxlbWVu
dENvbW1hbmQoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1l
LCBjb25zdCBBdG9taWNTdHJpbmcmIGNsYXNzTmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiBpbmxp
bmVTdHlsZSkKICAgICA6IENvbXBvc2l0ZUVkaXRDb21tYW5kKGRvY3VtZW50KQpAQCAtMTI1LDMw
ICsxMDksMjQgQEAgdm9pZCBBcHBseUJsb2NrRWxlbWVudENvbW1hbmQ6OmZvcm1hdFNlbAogICAg
IFJlZlB0cjxFbGVtZW50PiBibG9ja3F1b3RlRm9yTmV4dEluZGVudDsKICAgICBWaXNpYmxlUG9z
aXRpb24gZW5kT2ZDdXJyZW50UGFyYWdyYXBoID0gZW5kT2ZQYXJhZ3JhcGgoc3RhcnRPZlNlbGVj
dGlvbik7CiAgICAgVmlzaWJsZVBvc2l0aW9uIGVuZEFmdGVyU2VsZWN0aW9uID0gZW5kT2ZQYXJh
Z3JhcGgoZW5kT2ZQYXJhZ3JhcGgoZW5kT2ZTZWxlY3Rpb24pLm5leHQoKSk7Ci0gICAgaW50IGVu
ZE9mQ3VycmVudFBhcmFncmFwaEluZGV4ID0gaW5kZXhGb3JWaXNpYmxlUG9zaXRpb24oZW5kT2ZD
dXJyZW50UGFyYWdyYXBoKTsKLSAgICBpbnQgZW5kQWZ0ZXJTZWxlY3Rpb25JbmRleCA9IGluZGV4
Rm9yVmlzaWJsZVBvc2l0aW9uKGVuZEFmdGVyU2VsZWN0aW9uKTsKKyAgICBWaXNpYmxlUG9zaXRp
b24gZW5kT2ZMYXN0UGFyYWdyYXBoID0gZW5kT2ZQYXJhZ3JhcGgoZW5kT2ZTZWxlY3Rpb24pOwog
Ci0gICAgLy8gV2hlbiBpbmRlbnRpbmcgd2l0aGluIGEgPHByZT4gdGFnLCB3ZSBuZWVkIHRvIHNw
bGl0IGVhY2ggcGFyYWdyYXBoIGludG8gYSBzZXBhcmF0ZSBub2RlIGZvciBtb3ZlUGFyYWdyYXBo
V2l0aENsb25lcyB0byB3b3JrLgotICAgIC8vIEhvd2V2ZXIsIHNwbGl0dGluZyB0ZXh0IG5vZGVz
IGNhbiBjYXVzZSBlbmRPZkN1cnJlbnRQYXJhZ3JhcGggYW5kIGVuZEFmdGVyU2VsZWN0aW9uIHRv
IHBvaW50IHRvIGFuIGludmFsaWQgcG9zaXRpb24gaWYgd2UKLSAgICAvLyBjaGFuZ2VkIHRoZSB0
ZXh0IG5vZGUgaXQgd2FzIHBvaW50aW5nIGF0LiAgU28gd2UgaGF2ZSB0byByZXNldCB0aGVzZSBw
b3NpdGlvbnMuCi0gICAgaW50IG51bVBhcmFncmFwaHMgPSBjb3VudFBhcmFncmFwaHMoZW5kT2ZD
dXJyZW50UGFyYWdyYXBoLCBlbmRBZnRlclNlbGVjdGlvbik7Ci0gICAgaWYgKHNwbGl0VGV4dE5v
ZGVzKHN0YXJ0T2ZQYXJhZ3JhcGgoc3RhcnRPZlNlbGVjdGlvbiksIG51bVBhcmFncmFwaHMgKyAx
KSkgewotICAgICAgICBSZWZQdHI8UmFuZ2U+IGVuZE9mQ3VycmVudFBhcmFncmFwaFJhbmdlID0g
VGV4dEl0ZXJhdG9yOjpyYW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aChkb2N1bWVudCgpLT5kb2N1
bWVudEVsZW1lbnQoKSwgZW5kT2ZDdXJyZW50UGFyYWdyYXBoSW5kZXgsIDAsIHRydWUpOwotICAg
ICAgICBSZWZQdHI8UmFuZ2U+IGVuZEFmdGVyU2VsZWN0aW9uUmFuZ2UgPSBUZXh0SXRlcmF0b3I6
OnJhbmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3RoKGRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgp
LCBlbmRBZnRlclNlbGVjdGlvbkluZGV4LCAwLCB0cnVlKTsKLSAgICAgICAgaWYgKCFlbmRPZkN1
cnJlbnRQYXJhZ3JhcGhSYW5nZS5nZXQoKSB8fCAhZW5kQWZ0ZXJTZWxlY3Rpb25SYW5nZS5nZXQo
KSkgewotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICAgICAgZW5kT2ZDdXJyZW50UGFyYWdyYXBoID0gVmlzaWJsZVBv
c2l0aW9uKGVuZE9mQ3VycmVudFBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCksIERPV05T
VFJFQU0pOwotICAgICAgICBlbmRBZnRlclNlbGVjdGlvbiA9IFZpc2libGVQb3NpdGlvbihlbmRB
ZnRlclNlbGVjdGlvblJhbmdlLT5zdGFydFBvc2l0aW9uKCksIERPV05TVFJFQU0pOwotICAgIH0K
KyAgICBib29sIGF0RW5kID0gZmFsc2U7CisgICAgd2hpbGUgKGVuZE9mQ3VycmVudFBhcmFncmFw
aCAhPSBlbmRBZnRlclNlbGVjdGlvbiAmJiAhYXRFbmQpIHsKKyAgICAgICAgUG9zaXRpb24gc3Rh
cnQ7CisgICAgICAgIFBvc2l0aW9uIGVuZDsKKworICAgICAgICBpZiAoZW5kT2ZDdXJyZW50UGFy
YWdyYXBoID09IGVuZE9mTGFzdFBhcmFncmFwaCkKKyAgICAgICAgICAgIGF0RW5kID0gdHJ1ZTsK
KworICAgICAgICByYW5nZUZvclBhcmFncmFwaFNwbGl0dGluZ1RleHROb2Rlc0lmTmVlZGVkKGVu
ZE9mQ3VycmVudFBhcmFncmFwaCwgc3RhcnQsIGVuZCk7CisgICAgICAgIGVuZE9mQ3VycmVudFBh
cmFncmFwaCA9IGVuZDsKIAotICAgIHdoaWxlIChlbmRPZkN1cnJlbnRQYXJhZ3JhcGggIT0gZW5k
QWZ0ZXJTZWxlY3Rpb24pIHsKLSAgICAgICAgLy8gSXRlcmF0ZSBhY3Jvc3MgdGhlIHNlbGVjdGVk
IHBhcmFncmFwaHMuLi4KLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGVuZE9mTmV4dFBhcmFncmFw
aCA9IGVuZE9mUGFyYWdyYXBoKGVuZE9mQ3VycmVudFBhcmFncmFwaC5uZXh0KCkpOworICAgICAg
ICBQb3NpdGlvbiBhZnRlckVuZCA9IGVuZC5uZXh0KCk7CiAgICAgICAgIE5vZGUqIGVuY2xvc2lu
Z0NlbGwgPSBlbmNsb3NpbmdOb2RlT2ZUeXBlKHN0YXJ0LCAmaXNUYWJsZUNlbGwpOworICAgICAg
ICBWaXNpYmxlUG9zaXRpb24gZW5kT2ZOZXh0UGFyYWdyYXBoID0gZW5kT2ZOZXh0UGFyYWdyYWhT
cGxpdHRpbmdUZXh0Tm9kZXNJZk5lZWRlZChlbmRPZkN1cnJlbnRQYXJhZ3JhcGgsIHN0YXJ0LCBl
bmQpOwogCi0gICAgICAgIGZvcm1hdFBhcmFncmFwaChlbmRPZkN1cnJlbnRQYXJhZ3JhcGgsIGJs
b2NrcXVvdGVGb3JOZXh0SW5kZW50KTsKKyAgICAgICAgZm9ybWF0UmFuZ2Uoc3RhcnQsIGVuZCwg
YmxvY2txdW90ZUZvck5leHRJbmRlbnQpOwogCiAgICAgICAgIC8vIERvbid0IHB1dCB0aGUgbmV4
dCBwYXJhZ3JhcGggaW4gdGhlIGJsb2NrcXVvdGUgd2UganVzdCBjcmVhdGVkIGZvciB0aGlzIHBh
cmFncmFwaCB1bmxlc3MgCiAgICAgICAgIC8vIHRoZSBuZXh0IHBhcmFncmFwaCBpcyBpbiB0aGUg
c2FtZSBjZWxsLgpAQCAtMTcwLDYgKzE0OCwxMDggQEAgdm9pZCBBcHBseUJsb2NrRWxlbWVudENv
bW1hbmQ6OmZvcm1hdFNlbAogICAgIH0KIH0KIAorc3RhdGljIGJvb2wgaXNOZXdMaW5lQXRQb3Np
dGlvbihjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24pCit7CisgICAgaWYgKHBvc2l0aW9uLmFuY2hv
clR5cGUoKSAhPSBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBOb2RlKiB0ZXh0Tm9kZSA9IHBvc2l0aW9uLmNvbnRhaW5lck5v
ZGUoKTsKKyAgICBpbnQgb2Zmc2V0ID0gcG9zaXRpb24ub2Zmc2V0SW5Db250YWluZXJOb2RlKCk7
CisgICAgaWYgKCF0ZXh0Tm9kZSB8fCAhdGV4dE5vZGUtPmlzVGV4dE5vZGUoKSB8fCBvZmZzZXQg
PCAwIHx8IG9mZnNldCA+PSB0ZXh0Tm9kZS0+bWF4Q2hhcmFjdGVyT2Zmc2V0KCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFN0cmluZyB0
ZXh0QXRQb3NpdGlvbiA9IHN0YXRpY19jYXN0PFRleHQqPih0ZXh0Tm9kZSktPnN1YnN0cmluZ0Rh
dGEob2Zmc2V0LCAxLCBlYyk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICByZXR1cm4gdGV4dEF0UG9zaXRpb25bMF0gPT0gJ1xuJzsKK30KKworc3RhdGljIFJlbmRl
clN0eWxlKiByZW5kZXJTdHlsZU9mRW5jbG9zaW5nVGV4dE5vZGUoY29uc3QgUG9zaXRpb24mIHBv
c2l0aW9uKQoreworICAgIGlmIChwb3NpdGlvbi5hbmNob3JUeXBlKCkgIT0gUG9zaXRpb246OlBv
c2l0aW9uSXNPZmZzZXRJbkFuY2hvcgorICAgICAgICB8fCAhcG9zaXRpb24uY29udGFpbmVyTm9k
ZSgpCisgICAgICAgIHx8ICFwb3NpdGlvbi5jb250YWluZXJOb2RlKCktPmlzVGV4dE5vZGUoKQor
ICAgICAgICB8fCAhcG9zaXRpb24uY29udGFpbmVyTm9kZSgpLT5yZW5kZXJlcigpKQorICAgICAg
ICByZXR1cm4gMDsKKyAgICByZXR1cm4gcG9zaXRpb24uY29udGFpbmVyTm9kZSgpLT5yZW5kZXJl
cigpLT5zdHlsZSgpOworfQorCit2b2lkIEFwcGx5QmxvY2tFbGVtZW50Q29tbWFuZDo6cmFuZ2VG
b3JQYXJhZ3JhcGhTcGxpdHRpbmdUZXh0Tm9kZXNJZk5lZWRlZChjb25zdCBWaXNpYmxlUG9zaXRp
b24mIGVuZE9mQ3VycmVudFBhcmFncmFwaCwgUG9zaXRpb24mIHN0YXJ0LCBQb3NpdGlvbiYgZW5k
KQoreworICAgIHN0YXJ0ID0gc3RhcnRPZlBhcmFncmFwaChlbmRPZkN1cnJlbnRQYXJhZ3JhcGgp
LmRlZXBFcXVpdmFsZW50KCk7CisgICAgZW5kID0gZW5kT2ZDdXJyZW50UGFyYWdyYXBoLmRlZXBF
cXVpdmFsZW50KCk7CisKKyAgICBSZW5kZXJTdHlsZSogc3RhcnRTdHlsZSA9IHJlbmRlclN0eWxl
T2ZFbmNsb3NpbmdUZXh0Tm9kZShzdGFydCk7CisgICAgaWYgKHN0YXJ0U3R5bGUpIHsKKyAgICAg
ICAgLy8gQXZvaWQgb2J0YW5pbmluZyB0aGUgc3RhcnQgb2YgbmV4dCBwYXJhZ3JhcGggZm9yIHN0
YXJ0CisgICAgICAgIGlmIChzdGFydFN0eWxlLT5wcmVzZXJ2ZU5ld2xpbmUoKSAmJiBpc05ld0xp
bmVBdFBvc2l0aW9uKHN0YXJ0KSAmJiAhaXNOZXdMaW5lQXRQb3NpdGlvbihzdGFydC5wcmV2aW91
cygpKSAmJiBzdGFydC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSA+IDApCisgICAgICAgICAgICBz
dGFydCA9IHN0YXJ0T2ZQYXJhZ3JhcGgoZW5kLnByZXZpb3VzKCkpLmRlZXBFcXVpdmFsZW50KCk7
CisKKyAgICAgICAgLy8gSWYgc3RhcnQgaXMgaW4gdGhlIG1pZGRsZSBvZiBhIHRleHQgbm9kZSwg
c3BsaXQuCisgICAgICAgIGlmICghc3RhcnRTdHlsZS0+Y29sbGFwc2VXaGl0ZVNwYWNlKCkgJiYg
c3RhcnQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkgPiAwKSB7CisgICAgICAgICAgICBpbnQgc3Rh
cnRPZmZzZXQgPSBzdGFydC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKTsKKyAgICAgICAgICAgIHNw
bGl0VGV4dE5vZGUoc3RhdGljX2Nhc3Q8VGV4dCo+KHN0YXJ0Lm5vZGUoKSksIHN0YXJ0T2Zmc2V0
KTsKKyAgICAgICAgICAgIHN0YXJ0ID0gcG9zaXRpb25CZWZvcmVOb2RlKHN0YXJ0Lm5vZGUoKSk7
CisgICAgICAgICAgICBpZiAoc3RhcnQubm9kZSgpID09IGVuZC5ub2RlKCkpIHsKKyAgICAgICAg
ICAgICAgICBBU1NFUlQoZW5kLm9mZnNldEluQ29udGFpbmVyTm9kZSgpID49IHN0YXJ0T2Zmc2V0
KTsKKyAgICAgICAgICAgICAgICBlbmQgPSBQb3NpdGlvbihlbmQubm9kZSgpLCBlbmQub2Zmc2V0
SW5Db250YWluZXJOb2RlKCkgLSBzdGFydE9mZnNldCwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZz
ZXRJbkFuY2hvcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBSZW5k
ZXJTdHlsZSogZW5kU3R5bGUgPSByZW5kZXJTdHlsZU9mRW5jbG9zaW5nVGV4dE5vZGUoZW5kKTsK
KyAgICBpZiAoZW5kU3R5bGUpIHsKKyAgICAgICAgLy8gSW5jbHVkZSBcbiBhdCB0aGUgZW5kIG9m
IGxpbmUgaWYgd2UncmUgYXQgYW4gZW1wdHkgcGFyYWdyYXBoCisgICAgICAgIGlmIChlbmRTdHls
ZS0+cHJlc2VydmVOZXdsaW5lKCkgJiYgc3RhcnQgPT0gZW5kCisgICAgICAgICAgICAmJiBlbmQu
b2Zmc2V0SW5Db250YWluZXJOb2RlKCkgPCBlbmQuY29udGFpbmVyTm9kZSgpLT5tYXhDaGFyYWN0
ZXJPZmZzZXQoKSkgeworICAgICAgICAgICAgaW50IGVuZE9mZnNldCA9IGVuZC5vZmZzZXRJbkNv
bnRhaW5lck5vZGUoKTsKKyAgICAgICAgICAgIGlmICghaXNOZXdMaW5lQXRQb3NpdGlvbihlbmQu
cHJldmlvdXMoKSkgJiYgaXNOZXdMaW5lQXRQb3NpdGlvbihlbmQpKQorICAgICAgICAgICAgICAg
IGVuZCA9IFBvc2l0aW9uKGVuZC5ub2RlKCksIGVuZE9mZnNldCArIDEsIFBvc2l0aW9uOjpQb3Np
dGlvbklzT2Zmc2V0SW5BbmNob3IpOworICAgICAgICB9CisKKyAgICAgICAgLy8gSWYgZW5kIGlz
IGluIHRoZSBtaWRkbGUgb2YgYSB0ZXh0IG5vZGUsIHNwbGl0LgorICAgICAgICBpZiAoIWVuZFN0
eWxlLT5jb2xsYXBzZVdoaXRlU3BhY2UoKSAmJiBlbmQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkK
KyAgICAgICAgICAgICYmIGVuZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSA8IGVuZC5jb250YWlu
ZXJOb2RlKCktPm1heENoYXJhY3Rlck9mZnNldCgpKSB7CisgICAgICAgICAgICBzcGxpdFRleHRO
b2RlKHN0YXRpY19jYXN0PFRleHQqPihlbmQubm9kZSgpKSwgZW5kLm9mZnNldEluQ29udGFpbmVy
Tm9kZSgpKTsKKyAgICAgICAgICAgIGlmIChzdGFydC5ub2RlKCkgPT0gZW5kLm5vZGUoKSkKKyAg
ICAgICAgICAgICAgICBzdGFydCA9IHBvc2l0aW9uQmVmb3JlTm9kZShlbmQubm9kZSgpLT5wcmV2
aW91c1NpYmxpbmcoKSk7CisgICAgICAgICAgICBlbmQgPSBsYXN0UG9zaXRpb25Jbk5vZGUoZW5k
Lm5vZGUoKS0+cHJldmlvdXNTaWJsaW5nKCkpOworICAgICAgICB9CisgICAgfQorfQorCitWaXNp
YmxlUG9zaXRpb24gQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kOjplbmRPZk5leHRQYXJhZ3JhaFNw
bGl0dGluZ1RleHROb2Rlc0lmTmVlZGVkKFZpc2libGVQb3NpdGlvbiYgZW5kT2ZDdXJyZW50UGFy
YWdyYXBoLCBQb3NpdGlvbiYgc3RhcnQsIFBvc2l0aW9uJiBlbmQpCit7CisgICAgVmlzaWJsZVBv
c2l0aW9uIGVuZE9mTmV4dFBhcmFncmFwaCA9IGVuZE9mUGFyYWdyYXBoKGVuZE9mQ3VycmVudFBh
cmFncmFwaC5uZXh0KCkpOworICAgIFBvc2l0aW9uIHBvc2l0aW9uID0gZW5kT2ZOZXh0UGFyYWdy
YXBoLmRlZXBFcXVpdmFsZW50KCk7CisgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gcmVuZGVyU3R5
bGVPZkVuY2xvc2luZ1RleHROb2RlKHBvc2l0aW9uKTsKKyAgICBpZiAoIXN0eWxlKQorICAgICAg
ICByZXR1cm4gZW5kT2ZOZXh0UGFyYWdyYXBoOworCisgICAgUmVmUHRyPE5vZGU+IGNvbnRhaW5l
ck5vZGUgPSBwb3NpdGlvbi5jb250YWluZXJOb2RlKCk7CisgICAgaWYgKCFzdHlsZS0+cHJlc2Vy
dmVOZXdsaW5lKCkgfHwgIXBvc2l0aW9uLm9mZnNldEluQ29udGFpbmVyTm9kZSgpCisgICAgICAg
IHx8ICFpc05ld0xpbmVBdFBvc2l0aW9uKFBvc2l0aW9uKGNvbnRhaW5lck5vZGUuZ2V0KCksIDAs
IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpKSkKKyAgICAgICAgcmV0dXJuIGVu
ZE9mTmV4dFBhcmFncmFwaDsKKworICAgIC8vIFxuIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHRl
eHQgbm9kZSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIGN1cnJlbnQgcGFyYWdyYXBoIGlzIHRy
aW1tZWQgYnkgbW92ZVBhcmFncmFwaFdpdGhDbG9uZXMuCisgICAgLy8gSWYgZW5kT2ZOZXh0UGFy
YWdyYXBoIHdhcyBwb2ludGluZyBhdCB0aGlzIHNhbWUgdGV4dCBub2RlLCBlbmRPZk5leHRQYXJh
Z3JhcGggd2lsbCBiZSBzaGlmdGVkIGJ5IG9uZSBwYXJhZ3JhcGguCisgICAgLy8gQXZvaWQgdGhp
cyBieSBzcGxpdHRpbmcgIlxuIgorICAgIHNwbGl0VGV4dE5vZGUoc3RhdGljX2Nhc3Q8VGV4dCo+
KGNvbnRhaW5lck5vZGUuZ2V0KCkpLCAxKTsKKworICAgIGlmIChzdGFydC5hbmNob3JUeXBlKCkg
PT0gUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvciAmJiBjb250YWluZXJOb2RlLmdl
dCgpID09IHN0YXJ0LmNvbnRhaW5lck5vZGUoKSkgeworICAgICAgICBBU1NFUlQoc3RhcnQub2Zm
c2V0SW5Db250YWluZXJOb2RlKCkgPCBwb3NpdGlvbi5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSk7
CisgICAgICAgIHN0YXJ0ID0gUG9zaXRpb24oY29udGFpbmVyTm9kZS0+cHJldmlvdXNTaWJsaW5n
KCksIHN0YXJ0Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBQb3NpdGlvbjo6UG9zaXRpb25Jc09m
ZnNldEluQW5jaG9yKTsKKyAgICB9CisgICAgaWYgKGVuZC5hbmNob3JUeXBlKCkgPT0gUG9zaXRp
b246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvciAmJiBjb250YWluZXJOb2RlLmdldCgpID09IGVu
ZC5jb250YWluZXJOb2RlKCkpIHsKKyAgICAgICAgQVNTRVJUKGVuZC5vZmZzZXRJbkNvbnRhaW5l
ck5vZGUoKSA8IHBvc2l0aW9uLm9mZnNldEluQ29udGFpbmVyTm9kZSgpKTsKKyAgICAgICAgZW5k
ID0gUG9zaXRpb24oY29udGFpbmVyTm9kZS0+cHJldmlvdXNTaWJsaW5nKCksIGVuZC5vZmZzZXRJ
bkNvbnRhaW5lck5vZGUoKSwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcik7Cisg
ICAgfQorCisgICAgcmV0dXJuIFBvc2l0aW9uKGNvbnRhaW5lck5vZGUuZ2V0KCksIHBvc2l0aW9u
Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpIC0gMSwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJ
bkFuY2hvcik7Cit9CisKIFBhc3NSZWZQdHI8RWxlbWVudD4gQXBwbHlCbG9ja0VsZW1lbnRDb21t
YW5kOjpjcmVhdGVCbG9ja0VsZW1lbnQoKSBjb25zdAogewogICAgIFJlZlB0cjxFbGVtZW50PiBl
bGVtZW50ID0gY3JlYXRlSFRNTEVsZW1lbnQoZG9jdW1lbnQoKSwgbV90YWdOYW1lKTsKQEAgLTE4
MCwyNyArMjYwLDQgQEAgUGFzc1JlZlB0cjxFbGVtZW50PiBBcHBseUJsb2NrRWxlbWVudENvbQog
ICAgIHJldHVybiBlbGVtZW50LnJlbGVhc2UoKTsKIH0KIAotLy8gUmV0dXJucyB0cnVlIGlmIGF0
IGxlYXN0IG9uZSB0ZXh0IG5vZGUgd2FzIHNwbGl0LgotYm9vbCBBcHBseUJsb2NrRWxlbWVudENv
bW1hbmQ6OnNwbGl0VGV4dE5vZGVzKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgc3RhcnQsIGludCBu
dW1QYXJhZ3JhcGhzKQotewotICAgIFZpc2libGVQb3NpdGlvbiBjdXJyZW50UGFyYWdyYXBoU3Rh
cnQgPSBzdGFydDsKLSAgICBib29sIGhhc1NwbGl0ID0gZmFsc2U7Ci0gICAgaW50IHBhcmFncmFw
aENvdW50OwotICAgIGZvciAocGFyYWdyYXBoQ291bnQgPSAwOyBwYXJhZ3JhcGhDb3VudCA8IG51
bVBhcmFncmFwaHM7ICsrcGFyYWdyYXBoQ291bnQpIHsKLSAgICAgICAgLy8gSWYgdGhlcmUgYXJl
IG11bHRpcGxlIHBhcmFncmFwaHMgaW4gYSBzaW5nbGUgdGV4dCBub2RlLCB3ZSBzcGxpdCB0aGUg
dGV4dCBub2RlIGludG8gYSBzZXBhcmF0ZSBub2RlIGZvciBlYWNoIHBhcmFncmFwaC4KLSAgICAg
ICAgaWYgKGN1cnJlbnRQYXJhZ3JhcGhTdGFydC5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKS0+aXNU
ZXh0Tm9kZSgpICYmIGN1cnJlbnRQYXJhZ3JhcGhTdGFydC5kZWVwRXF1aXZhbGVudCgpLm5vZGUo
KSA9PSBzdGFydE9mUGFyYWdyYXBoKGN1cnJlbnRQYXJhZ3JhcGhTdGFydC5wcmV2aW91cygpKS5k
ZWVwRXF1aXZhbGVudCgpLm5vZGUoKSkgewotICAgICAgICAgICAgVGV4dCogdGV4dE5vZGUgPSBz
dGF0aWNfY2FzdDxUZXh0ICo+KGN1cnJlbnRQYXJhZ3JhcGhTdGFydC5kZWVwRXF1aXZhbGVudCgp
Lm5vZGUoKSk7Ci0gICAgICAgICAgICBpbnQgb2Zmc2V0ID0gY3VycmVudFBhcmFncmFwaFN0YXJ0
LmRlZXBFcXVpdmFsZW50KCkub2Zmc2V0SW5Db250YWluZXJOb2RlKCk7Ci0gICAgICAgICAgICBz
cGxpdFRleHROb2RlKHRleHROb2RlLCBvZmZzZXQpOwotICAgICAgICAgICAgY3VycmVudFBhcmFn
cmFwaFN0YXJ0ID0gVmlzaWJsZVBvc2l0aW9uKHRleHROb2RlLCAwLCBWUF9ERUZBVUxUX0FGRklO
SVRZKTsKLSAgICAgICAgICAgIGhhc1NwbGl0ID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBW
aXNpYmxlUG9zaXRpb24gbmV4dFBhcmFncmFwaCA9IHN0YXJ0T2ZQYXJhZ3JhcGgoZW5kT2ZQYXJh
Z3JhcGgoY3VycmVudFBhcmFncmFwaFN0YXJ0KS5uZXh0KCkpOwotICAgICAgICBpZiAobmV4dFBh
cmFncmFwaC5pc051bGwoKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjdXJyZW50UGFy
YWdyYXBoU3RhcnQgPSBuZXh0UGFyYWdyYXBoOwotICAgIH0KLSAgICByZXR1cm4gaGFzU3BsaXQ7
Ci19Ci0KIH0KSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9BcHBseUJsb2NrRWxlbWVudENvbW1hbmQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5k
LmgJKHJldmlzaW9uIDY5MzI3KQorKysgV2ViQ29yZS9lZGl0aW5nL0FwcGx5QmxvY2tFbGVtZW50
Q29tbWFuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw4ICs0Niw5IEBAIHByb3RlY3RlZDoKIAog
cHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgZG9BcHBseSgpOwotICAgIHZpcnR1YWwgdm9pZCBm
b3JtYXRQYXJhZ3JhcGgoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBlbmRPZkN1cnJlbnRQYXJhZ3Jh
cGgsIFJlZlB0cjxFbGVtZW50PiYpID0gMDsKLSAgICBib29sIHNwbGl0VGV4dE5vZGVzKGNvbnN0
IFZpc2libGVQb3NpdGlvbiYgc3RhcnQsIGludCBudW1QYXJhZ3JhcGhzKTsKKyAgICB2aXJ0dWFs
IHZvaWQgZm9ybWF0UmFuZ2UoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYs
IFJlZlB0cjxFbGVtZW50PiYpID0gMDsKKyAgICB2b2lkIHJhbmdlRm9yUGFyYWdyYXBoU3BsaXR0
aW5nVGV4dE5vZGVzSWZOZWVkZWQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgUG9zaXRpb24mLCBQ
b3NpdGlvbiYpOworICAgIFZpc2libGVQb3NpdGlvbiBlbmRPZk5leHRQYXJhZ3JhaFNwbGl0dGlu
Z1RleHROb2Rlc0lmTmVlZGVkKFZpc2libGVQb3NpdGlvbiYsIFBvc2l0aW9uJiwgUG9zaXRpb24m
KTsKIAogICAgIFF1YWxpZmllZE5hbWUgbV90YWdOYW1lOwogICAgIEF0b21pY1N0cmluZyBtX2Ns
YXNzTmFtZTsKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3BwCShyZXZp
c2lvbiA2OTMyNykKKysrIFdlYkNvcmUvZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MSwxNiArNDEsMTcgQEAgRm9ybWF0QmxvY2tDb21tYW5kOjpGb3Jt
YXRCbG9ja0NvbW1hbmQoRAogewogfQogCi12b2lkIEZvcm1hdEJsb2NrQ29tbWFuZDo6Zm9ybWF0
UGFyYWdyYXBoKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgZW5kT2ZDdXJyZW50UGFyYWdyYXBoLCBS
ZWZQdHI8RWxlbWVudD4mKQordm9pZCBGb3JtYXRCbG9ja0NvbW1hbmQ6OmZvcm1hdFJhbmdlKGNv
bnN0IFBvc2l0aW9uJiwgY29uc3QgUG9zaXRpb24mIGVuZCwgUmVmUHRyPEVsZW1lbnQ+JikKIHsK
LSAgICBzZXRFbmRpbmdTZWxlY3Rpb24oZW5kT2ZDdXJyZW50UGFyYWdyYXBoKTsKKyAgICBzZXRF
bmRpbmdTZWxlY3Rpb24oVmlzaWJsZVBvc2l0aW9uKGVuZCkpOworCiAgICAgTm9kZSogcmVmTm9k
ZSA9IGVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZVN0
YXJ0KCkpOwogICAgIGlmIChyZWZOb2RlLT5oYXNUYWdOYW1lKHRhZ05hbWUoKSkpCiAgICAgICAg
IC8vIFdlJ3JlIGFscmVhZHkgaW4gYSBibG9jayB3aXRoIHRoZSBmb3JtYXQgd2Ugd2FudCwgc28g
d2UgZG9uJ3QgaGF2ZSB0byBkbyBhbnl0aGluZwogICAgICAgICByZXR1cm47CiAKLSAgICBWaXNp
YmxlUG9zaXRpb24gcGFyYWdyYXBoU3RhcnQgPSBzdGFydE9mUGFyYWdyYXBoKGVuZGluZ1NlbGVj
dGlvbigpLnZpc2libGVTdGFydCgpKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gcGFyYWdyYXBoRW5k
ID0gZW5kT2ZQYXJhZ3JhcGgoZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkpOworICAg
IFZpc2libGVQb3NpdGlvbiBwYXJhZ3JhcGhTdGFydCA9IHN0YXJ0T2ZQYXJhZ3JhcGgoZW5kKTsK
KyAgICBWaXNpYmxlUG9zaXRpb24gcGFyYWdyYXBoRW5kID0gZW5kT2ZQYXJhZ3JhcGgoZW5kKTsK
ICAgICBWaXNpYmxlUG9zaXRpb24gYmxvY2tTdGFydCA9IHN0YXJ0T2ZCbG9jayhlbmRpbmdTZWxl
Y3Rpb24oKS52aXNpYmxlU3RhcnQoKSk7CiAgICAgVmlzaWJsZVBvc2l0aW9uIGJsb2NrRW5kID0g
ZW5kT2ZCbG9jayhlbmRpbmdTZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKSk7CiAgICAgUmVmUHRy
PEVsZW1lbnQ+IGJsb2NrTm9kZSA9IGNyZWF0ZUJsb2NrRWxlbWVudCgpOwpJbmRleDogV2ViQ29y
ZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRp
dGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuaAkocmV2aXNpb24gNjkzMjcpCisrKyBXZWJDb3JlL2Vk
aXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcg
QEAgcHVibGljOgogcHJpdmF0ZToKICAgICBGb3JtYXRCbG9ja0NvbW1hbmQoRG9jdW1lbnQqLCBj
b25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lKTsKIAotICAgIHZpcnR1YWwgdm9pZCBmb3JtYXRQ
YXJhZ3JhcGgoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBlbmRPZkN1cnJlbnRQYXJhZ3JhcGgsIFJl
ZlB0cjxFbGVtZW50PiYpOworICAgIHZpcnR1YWwgdm9pZCBmb3JtYXRSYW5nZShjb25zdCBQb3Np
dGlvbiYsIGNvbnN0IFBvc2l0aW9uJiwgUmVmUHRyPEVsZW1lbnQ+Jik7CiAgICAgdmlydHVhbCBF
ZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24oKSBjb25zdCB7IHJldHVybiBFZGl0QWN0aW9uRm9ybWF0
QmxvY2s7IH0KIH07CiAKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9JbmRlbnRPdXRkZW50Q29tbWFu
ZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0luZGVudE91dGRlbnRDb21tYW5k
LmNwcAkocmV2aXNpb24gNjkzMjcpCisrKyBXZWJDb3JlL2VkaXRpbmcvSW5kZW50T3V0ZGVudENv
bW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NiwxMCArNTYsMTAgQEAgSW5kZW50T3V0ZGVu
dENvbW1hbmQ6OkluZGVudE91dGRlbnRDb21tYQogewogfQogCi1ib29sIEluZGVudE91dGRlbnRD
b21tYW5kOjp0cnlJbmRlbnRpbmdBc0xpc3RJdGVtKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgZW5k
T2ZDdXJyZW50UGFyYWdyYXBoKQorYm9vbCBJbmRlbnRPdXRkZW50Q29tbWFuZDo6dHJ5SW5kZW50
aW5nQXNMaXN0SXRlbShjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQp
CiB7CiAgICAgLy8gSWYgb3VyIHNlbGVjdGlvbiBpcyBub3QgaW5zaWRlIGEgbGlzdCwgYmFpbCBv
dXQuCi0gICAgTm9kZSogbGFzdE5vZGVJblNlbGVjdGVkUGFyYWdyYXBoID0gZW5kT2ZDdXJyZW50
UGFyYWdyYXBoLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpOworICAgIE5vZGUqIGxhc3ROb2RlSW5T
ZWxlY3RlZFBhcmFncmFwaCA9IHN0YXJ0Lm5vZGUoKTsKICAgICBSZWZQdHI8RWxlbWVudD4gbGlz
dE5vZGUgPSBlbmNsb3NpbmdMaXN0KGxhc3ROb2RlSW5TZWxlY3RlZFBhcmFncmFwaCk7CiAgICAg
aWYgKCFsaXN0Tm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNzgsNyArNzgsNyBAQCBi
b29sIEluZGVudE91dGRlbnRDb21tYW5kOjp0cnlJbmRlbnRpbmdBCiAgICAgUmVmUHRyPEVsZW1l
bnQ+IG5ld0xpc3QgPSBkb2N1bWVudCgpLT5jcmVhdGVFbGVtZW50KGxpc3ROb2RlLT50YWdRTmFt
ZSgpLCBmYWxzZSk7CiAgICAgaW5zZXJ0Tm9kZUJlZm9yZShuZXdMaXN0LCBzZWxlY3RlZExpc3RJ
dGVtKTsKIAotICAgIG1vdmVQYXJhZ3JhcGhXaXRoQ2xvbmVzKHN0YXJ0T2ZQYXJhZ3JhcGgoZW5k
T2ZDdXJyZW50UGFyYWdyYXBoKSwgZW5kT2ZDdXJyZW50UGFyYWdyYXBoLCBuZXdMaXN0LmdldCgp
LCBzZWxlY3RlZExpc3RJdGVtKTsKKyAgICBtb3ZlUGFyYWdyYXBoV2l0aENsb25lcyhzdGFydCwg
ZW5kLCBuZXdMaXN0LmdldCgpLCBzZWxlY3RlZExpc3RJdGVtKTsKIAogICAgIGlmIChjYW5NZXJn
ZUxpc3RzKHByZXZpb3VzTGlzdCwgbmV3TGlzdC5nZXQoKSkpCiAgICAgICAgIG1lcmdlSWRlbnRp
Y2FsRWxlbWVudHMocHJldmlvdXNMaXN0LCBuZXdMaXN0KTsKQEAgLTg3LDEwICs4Nyw5IEBAIGJv
b2wgSW5kZW50T3V0ZGVudENvbW1hbmQ6OnRyeUluZGVudGluZ0EKIAogICAgIHJldHVybiB0cnVl
OwogfQotICAgIAotdm9pZCBJbmRlbnRPdXRkZW50Q29tbWFuZDo6aW5kZW50SW50b0Jsb2NrcXVv
dGUoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBlbmRPZkN1cnJlbnRQYXJhZ3JhcGgsIFJlZlB0cjxF
bGVtZW50PiYgdGFyZ2V0QmxvY2txdW90ZSkKKwordm9pZCBJbmRlbnRPdXRkZW50Q29tbWFuZDo6
aW5kZW50SW50b0Jsb2NrcXVvdGUoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlv
biYgZW5kLCBSZWZQdHI8RWxlbWVudD4mIHRhcmdldEJsb2NrcXVvdGUpCiB7Ci0gICAgUG9zaXRp
b24gc3RhcnQgPSBzdGFydE9mUGFyYWdyYXBoKGVuZE9mQ3VycmVudFBhcmFncmFwaCkuZGVlcEVx
dWl2YWxlbnQoKTsKICAgICBOb2RlKiBlbmNsb3NpbmdDZWxsID0gZW5jbG9zaW5nTm9kZU9mVHlw
ZShzdGFydCwgJmlzVGFibGVDZWxsKTsKICAgICBOb2RlKiBub2RlVG9TcGxpdFRvOwogICAgIGlm
IChlbmNsb3NpbmdDZWxsKQpAQCAtMTA5LDcgKzEwOCw3IEBAIHZvaWQgSW5kZW50T3V0ZGVudENv
bW1hbmQ6OmluZGVudEludG9CbG8KICAgICAgICAgaW5zZXJ0Tm9kZUJlZm9yZSh0YXJnZXRCbG9j
a3F1b3RlLCBvdXRlckJsb2NrKTsKICAgICB9CiAKLSAgICBtb3ZlUGFyYWdyYXBoV2l0aENsb25l
cyhzdGFydE9mUGFyYWdyYXBoKGVuZE9mQ3VycmVudFBhcmFncmFwaCksIGVuZE9mQ3VycmVudFBh
cmFncmFwaCwgdGFyZ2V0QmxvY2txdW90ZS5nZXQoKSwgb3V0ZXJCbG9jay5nZXQoKSk7CisgICAg
bW92ZVBhcmFncmFwaFdpdGhDbG9uZXMoc3RhcnQsIGVuZCwgdGFyZ2V0QmxvY2txdW90ZS5nZXQo
KSwgb3V0ZXJCbG9jay5nZXQoKSk7CiB9CiAKIHZvaWQgSW5kZW50T3V0ZGVudENvbW1hbmQ6Om91
dGRlbnRQYXJhZ3JhcGgoKQpAQCAtMjIwLDEyICsyMTksMTIgQEAgdm9pZCBJbmRlbnRPdXRkZW50
Q29tbWFuZDo6Zm9ybWF0U2VsZWN0aQogICAgICAgICBvdXRkZW50UmVnaW9uKHN0YXJ0T2ZTZWxl
Y3Rpb24sIGVuZE9mU2VsZWN0aW9uKTsKIH0KIAotdm9pZCBJbmRlbnRPdXRkZW50Q29tbWFuZDo6
Zm9ybWF0UGFyYWdyYXBoKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgZW5kT2ZDdXJyZW50UGFyYWdy
YXBoLCBSZWZQdHI8RWxlbWVudD4mIGJsb2NrcXVvdGVGb3JOZXh0SW5kZW50KQordm9pZCBJbmRl
bnRPdXRkZW50Q29tbWFuZDo6Zm9ybWF0UmFuZ2UoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25z
dCBQb3NpdGlvbiYgZW5kLCBSZWZQdHI8RWxlbWVudD4mIGJsb2NrcXVvdGVGb3JOZXh0SW5kZW50
KQogewotICAgIGlmICh0cnlJbmRlbnRpbmdBc0xpc3RJdGVtKGVuZE9mQ3VycmVudFBhcmFncmFw
aCkpCisgICAgaWYgKHRyeUluZGVudGluZ0FzTGlzdEl0ZW0oc3RhcnQsIGVuZCkpCiAgICAgICAg
IGJsb2NrcXVvdGVGb3JOZXh0SW5kZW50ID0gMDsKICAgICBlbHNlCi0gICAgICAgIGluZGVudElu
dG9CbG9ja3F1b3RlKGVuZE9mQ3VycmVudFBhcmFncmFwaCwgYmxvY2txdW90ZUZvck5leHRJbmRl
bnQpOworICAgICAgICBpbmRlbnRJbnRvQmxvY2txdW90ZShzdGFydCwgZW5kLCBibG9ja3F1b3Rl
Rm9yTmV4dEluZGVudCk7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9JbmRlbnRPdXRk
ZW50Q29tbWFuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9JbmRlbnRPdXRkZW50
Q29tbWFuZC5oCShyZXZpc2lvbiA2OTMyNykKKysrIFdlYkNvcmUvZWRpdGluZy9JbmRlbnRPdXRk
ZW50Q29tbWFuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSwxMSArNDksMTEgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIGluZGVudFJlZ2lvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBjb25zdCBWaXNp
YmxlUG9zaXRpb24mKTsKICAgICB2b2lkIG91dGRlbnRSZWdpb24oY29uc3QgVmlzaWJsZVBvc2l0
aW9uJiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CiAgICAgdm9pZCBvdXRkZW50UGFyYWdyYXBo
KCk7Ci0gICAgYm9vbCB0cnlJbmRlbnRpbmdBc0xpc3RJdGVtKGNvbnN0IFZpc2libGVQb3NpdGlv
biYpOwotICAgIHZvaWQgaW5kZW50SW50b0Jsb2NrcXVvdGUoY29uc3QgVmlzaWJsZVBvc2l0aW9u
JiwgUmVmUHRyPEVsZW1lbnQ+Jik7CisgICAgYm9vbCB0cnlJbmRlbnRpbmdBc0xpc3RJdGVtKGNv
bnN0IFBvc2l0aW9uJiwgY29uc3QgUG9zaXRpb24mKTsKKyAgICB2b2lkIGluZGVudEludG9CbG9j
a3F1b3RlKGNvbnN0IFBvc2l0aW9uJiwgY29uc3QgUG9zaXRpb24mLCBSZWZQdHI8RWxlbWVudD4m
KTsKIAogICAgIHZvaWQgZm9ybWF0U2VsZWN0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgc3Rh
cnRPZlNlbGVjdGlvbiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBlbmRPZlNlbGVjdGlvbik7Ci0g
ICAgdm9pZCBmb3JtYXRQYXJhZ3JhcGgoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBlbmRPZkN1cnJl
bnRQYXJhZ3JhcGgsIFJlZlB0cjxFbGVtZW50PiYgYmxvY2txdW90ZUZvck5leHRJbmRlbnQpOwor
ICAgIHZvaWQgZm9ybWF0UmFuZ2UoY29uc3QgUG9zaXRpb24mLCBjb25zdCBQb3NpdGlvbiYsIFJl
ZlB0cjxFbGVtZW50PiYgYmxvY2txdW90ZUZvck5leHRJbmRlbnQpOwogCiAgICAgRUluZGVudFR5
cGUgbV90eXBlT2ZBY3Rpb247CiAgICAgaW50IG1fbWFyZ2luSW5QaXhlbHM7CkluZGV4OiBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShy
ZXZpc2lvbiA2OTMyNykKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE4IEBACisyMDEwLTEwLTA3ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQu
b3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJF
R1JFU1NJT046IEluZGVudGluZyBwcmUgZHVwbGljYXRlcyBjb250ZW50CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NzIzMworCisgICAgICAgIEFkZGVk
IHRlc3RzIHRvIGVuc3VyZSBXZWJLaXQgaW5kZW50cyB0ZXh0cyBpbnNpZGUgcHJlIGNvcnJlY3Rs
eS4KKworICAgICAgICAqIGVkaXRpbmcvZXhlY0NvbW1hbmQvaW5kZW50LXByZS1leHBlY3RlZC50
eHQ6IFRoaXMgdGVzdCBwYXNzZXMgaWYgV2ViS2l0IGRvZXMgbm90IGNyYXNoLgorICAgICAgICAq
IGVkaXRpbmcvZXhlY0NvbW1hbmQvaW5kZW50LXByZS1saXN0LWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICogZWRpdGluZy9leGVjQ29tbWFuZC9pbmRlbnQtcHJlLWxpc3QuaHRtbDogQWRk
ZWQuCisgICAgICAgICogZWRpdGluZy9leGVjQ29tbWFuZC9pbmRlbnQtcHJlLXBhcmFncmFwaHMt
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL2V4ZWNDb21tYW5kL2luZGVu
dC1wcmUtcGFyYWdyYXBocy5odG1sOiBBZGRlZC4KKwogMjAxMC0wOS0yMSAgTWFydGluIFJvYmlu
c29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQ2hyaXMg
RmxlaXphY2guCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL2luZGVudC1w
cmUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0Nv
bW1hbmQvaW5kZW50LXByZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDY5MzI3KQorKysgTGF5b3V0
VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9pbmRlbnQtcHJlLWV4cGVjdGVkLnR4dAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDcgQEAKIENPTlNPTEUgTUVTU0FHRTogbGluZSA0NDogV3Jvbmcg
bm9kZSBzZWxlY3RlZC4KIENPTlNPTEUgTUVTU0FHRTogbGluZSA0NjogV3JvbmcgYW5jaG9yIG9m
ZnNldDogOCBpbnN0ZWFkIG9mIDAKK0NPTlNPTEUgTUVTU0FHRTogbGluZSA0MTogV3JvbmcgZW5k
IG5vZGUgdHlwZTogW29iamVjdCBIVE1MQlJFbGVtZW50XQorQ09OU09MRSBNRVNTQUdFOiBsaW5l
IDQ0OiBXcm9uZyBub2RlIHNlbGVjdGVkLgogfCA8aHRtbD4KIHwgICA8aGVhZD4KIHwgICA8Ym9k
eT4KQEAgLTE3LDggKzE5LDcgQEAgZG9lcyBub3QgY3Jhc2guIgogfCAgICAgICAgIHN0eWxlPSJt
YXJnaW46IDAgMCAwIDQwcHg7IGJvcmRlcjogbm9uZTsgcGFkZGluZzogMHB4OyIKIHwgICAgICAg
ICA8cHJlPgogfCAgICAgICAgICAgaWQ9InByZS1iYXNpYyIKLXwgICAgICAgICAgICJsaW5lIG9u
ZQotIgorfCAgICAgICAgICAgImxpbmUgb25lIgogfCAgICAgICA8cHJlPgogfCAgICAgICAgIGlk
PSJwcmUtYmFzaWMiCiB8ICAgICAgICAgImxpbmUgdHdvCkBAIC0yNyw4ICsyOCw3IEBAIGRvZXMg
bm90IGNyYXNoLiIKIHwgICAgICAgICBjbGFzcz0id2Via2l0LWluZGVudC1ibG9ja3F1b3RlIgog
fCAgICAgICAgIHN0eWxlPSJtYXJnaW46IDAgMCAwIDQwcHg7IGJvcmRlcjogbm9uZTsgcGFkZGlu
ZzogMHB4OyIKIHwgICAgICAgICA8cHJlPgotfCAgICAgICAgICAgImxpbmUgdGhyZWUKLSIKK3wg
ICAgICAgICAgICJsaW5lIHRocmVlIgogfCAgICAgICAgIDxwcmU+CiB8ICAgICAgICAgICAibGlu
ZSBmb3VyIgogfCAgICAgICAiCkBAIC00MywxMiArNDMsMTEgQEAgZG9lcyBub3QgY3Jhc2guIgog
fCAgICAgICAgICAgICA8YmxvY2txdW90ZT4KIHwgICAgICAgICAgICAgICBjbGFzcz0id2Via2l0
LWluZGVudC1ibG9ja3F1b3RlIgogfCAgICAgICAgICAgICAgIHN0eWxlPSJtYXJnaW46IDAgMCAw
IDQwcHg7IGJvcmRlcjogbm9uZTsgcGFkZGluZzogMHB4OyIKLXwgICAgICAgICAgICAgICAibGlz
dCB0d28KLSIKLXwgICAgICAgICAgICAgICAibGlzdCB0aHJlZQotIgotfCAgICAgICAgICAgICAi
bGlzdCBmb3VyCi0iCit8ICAgICAgICAgICAgICAgImxpc3QgdHdvIgorfCAgICAgICAgICAgICAg
IDxicj4KK3wgICAgICAgICAgICAgICAibGlzdCB0aHJlZSIKK3wgICAgICAgICAgICAgICA8YnI+
Cit8ICAgICAgICAgICAgICAgImxpc3QgZm91ciIKIHwgICAgICAgIgogCiAiCkBAIC02Niw4ICs2
NSw3IEBAIGRvZXMgbm90IGNyYXNoLiIKIHwgICAgICAgICAgICAgICAgIGNsYXNzPSJ3ZWJraXQt
aW5kZW50LWJsb2NrcXVvdGUiCiB8ICAgICAgICAgICAgICAgICBzdHlsZT0ibWFyZ2luOiAwIDAg
MCA0MHB4OyBib3JkZXI6IG5vbmU7IHBhZGRpbmc6IDBweDsiCiB8ICAgICAgICAgICAgICAgICA8
cHJlPgotfCAgICAgICAgICAgICAgICAgICAidGFibGUgdHdvCi0iCit8ICAgICAgICAgICAgICAg
ICAgICJ0YWJsZSB0d28iCiB8ICAgICAgICAgICAgICAgICA8cHJlPgogfCAgICAgICAgICAgICAg
ICAgICAidGFibGUgdGhyZWU8I3NlbGVjdGlvbi1mb2N1cz4iCiB8ICAgICAgICAgICAgIDx0ZD4K
SW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvaW5kZW50LXByZS1saXN0LWV4
cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5k
L2luZGVudC1wcmUtbGlzdC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9lZGl0aW5nL2V4ZWNDb21tYW5kL2luZGVudC1wcmUtbGlzdC1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTY3IEBACisKK0luZGVudGluZzoKK3wgIgorIgorfCA8cHJlPgor
fCAgIDx1bD4KK3wgICAgIDxsaT4KK3wgICAgICAgIjwjc2VsZWN0aW9uLWFuY2hvcj5oZWxsbzwj
c2VsZWN0aW9uLWZvY3VzPiIKK3wgIgorIgorCit5aWVsZHM6Cit8ICIKKyIKK3wgPHByZT4KK3wg
ICA8dWw+Cit8ICAgICA8dWw+Cit8ICAgICAgIDxsaT4KK3wgICAgICAgICAiPCNzZWxlY3Rpb24t
YW5jaG9yPmhlbGxvPCNzZWxlY3Rpb24tZm9jdXM+IgorfCAiCisiCisKK0luZGVudGluZzoKK3wg
IgorIgorfCA8cHJlPgorfCAgIDx1bD4KK3wgICAgIDxsaT4KK3wgICAgICAgIjwjc2VsZWN0aW9u
LWFuY2hvcj5oZWxsbword29ybGQiCit8ICAgICAiPCNzZWxlY3Rpb24tZm9jdXM+CisiCit8ICIK
KyIKKworeWllbGRzOgorfCAiCisiCit8IDxwcmU+Cit8ICAgPHVsPgorfCAgICAgPHVsPgorfCAg
ICAgICA8bGk+Cit8ICAgICAgICAgIjwjc2VsZWN0aW9uLWFuY2hvcj5oZWxsbyIKK3wgICAgICAg
PGxpPgorfCAgICAgICAgICJ3b3JsZDwjc2VsZWN0aW9uLWZvY3VzPiIKK3wgICAgICIKKyIKK3wg
IgorIgorCitJbmRlbnRpbmc6Cit8ICIKKyIKK3wgPHVsPgorfCAgIDxsaT4KK3wgICAgIDxwcmU+
Cit8ICAgICAgICI8I3NlbGVjdGlvbi1hbmNob3I+aGVsbG8KK3dvcmxkCit3ZWJraXQ8I3NlbGVj
dGlvbi1mb2N1cz4KKyIKK3wgIgorIgorCit5aWVsZHM6Cit8ICIKKyIKK3wgPHVsPgorfCAgIDxs
aT4KK3wgICAgIDxwcmU+Cit8ICAgICAgIDxibG9ja3F1b3RlPgorfCAgICAgICAgIGNsYXNzPSJ3
ZWJraXQtaW5kZW50LWJsb2NrcXVvdGUiCit8ICAgICAgICAgc3R5bGU9Im1hcmdpbjogMCAwIDAg
NDBweDsgYm9yZGVyOiBub25lOyBwYWRkaW5nOiAwcHg7IgorfCAgICAgICAgICJoZWxsbyIKK3wg
ICAgICAgICA8YnI+Cit8ICAgICAgICAgIndvcmxkIgorfCAgICAgICAgIDxicj4KK3wgICAgICAg
ICAid2Via2l0IgorfCAiCisiCisKK0luZGVudGluZzoKK3wgIgorIgorfCA8dWw+Cit8ICAgPGxp
PgorfCAgICAgPHByZT4KK3wgICAgICAgIjwjc2VsZWN0aW9uLWFuY2hvcj5oZWxsbzwjc2VsZWN0
aW9uLWZvY3VzPgord29ybGQKK3dlYmtpdAorIgorfCAiCisiCisKK3lpZWxkczoKK3wgIgorIgor
fCA8dWw+Cit8ICAgPGxpPgorfCAgICAgPHByZT4KK3wgICAgICAgPGJsb2NrcXVvdGU+Cit8ICAg
ICAgICAgY2xhc3M9IndlYmtpdC1pbmRlbnQtYmxvY2txdW90ZSIKK3wgICAgICAgICBzdHlsZT0i
bWFyZ2luOiAwIDAgMCA0MHB4OyBib3JkZXI6IG5vbmU7IHBhZGRpbmc6IDBweDsiCit8ICAgICAg
ICAgIjwjc2VsZWN0aW9uLWFuY2hvcj5oZWxsbzwjc2VsZWN0aW9uLWZvY3VzPiIKK3wgICAgICAg
IndvcmxkCit3ZWJraXQKKyIKK3wgIgorIgorCitJbmRlbnRpbmc6Cit8ICIKKyIKK3wgPHVsPgor
fCAgIDxsaT4KK3wgICAgIDxwcmU+Cit8ICAgICAgICJoZWxsbworPCNzZWxlY3Rpb24tYW5jaG9y
PndvcmxkPCNzZWxlY3Rpb24tZm9jdXM+Cit3ZWJraXQKKyIKK3wgIgorIgorCit5aWVsZHM6Cit8
ICIKKyIKK3wgPHVsPgorfCAgIDxsaT4KK3wgICAgIDxwcmU+Cit8ICAgICAgICJoZWxsbworIgor
fCAgICAgICA8YmxvY2txdW90ZT4KK3wgICAgICAgICBjbGFzcz0id2Via2l0LWluZGVudC1ibG9j
a3F1b3RlIgorfCAgICAgICAgIHN0eWxlPSJtYXJnaW46IDAgMCAwIDQwcHg7IGJvcmRlcjogbm9u
ZTsgcGFkZGluZzogMHB4OyIKK3wgICAgICAgICAiPCNzZWxlY3Rpb24tYW5jaG9yPndvcmxkPCNz
ZWxlY3Rpb24tZm9jdXM+IgorfCAgICAgICAid2Via2l0CisiCit8ICIKKyIKKworSW5kZW50aW5n
OgorfCAiCisiCit8IDx1bD4KK3wgICA8bGk+Cit8ICAgICA8cHJlPgorfCAgICAgICAiaGVsbG8K
K3dvcmxkCis8I3NlbGVjdGlvbi1hbmNob3I+d2Via2k8I3NlbGVjdGlvbi1mb2N1cz50CisiCit8
ICIKKyIKKworeWllbGRzOgorfCAiCisiCit8IDx1bD4KK3wgICA8bGk+Cit8ICAgICA8cHJlPgor
fCAgICAgICAiaGVsbG8KK3dvcmxkCisiCit8ICAgICAgIDxibG9ja3F1b3RlPgorfCAgICAgICAg
IGNsYXNzPSJ3ZWJraXQtaW5kZW50LWJsb2NrcXVvdGUiCit8ICAgICAgICAgc3R5bGU9Im1hcmdp
bjogMCAwIDAgNDBweDsgYm9yZGVyOiBub25lOyBwYWRkaW5nOiAwcHg7IgorfCAgICAgICAgICI8
I3NlbGVjdGlvbi1hbmNob3I+d2Via2k8I3NlbGVjdGlvbi1mb2N1cz50IgorfCAiCisiCkluZGV4
OiBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL2luZGVudC1wcmUtbGlzdC5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvaW5kZW50LXByZS1s
aXN0Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5k
L2luZGVudC1wcmUtbGlzdC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDgyIEBACis8IURP
Q1RZUEUgaHRtbD4KKzxodG1sPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2Vz
L2R1bXAtYXMtbWFya3VwLmpzIj48L3NjcmlwdD4KKzxkaXYgaWQ9InRlc3QwIiBjb250ZW50ZWRp
dGFibGU+Cis8cHJlPgorPHVsPjxsaT5oZWxsbzwvbGk+PC91bD48L3ByZT4KKzwvZGl2PgorCis8
ZGl2IGlkPSJ0ZXN0MSIgY29udGVudGVkaXRhYmxlPgorPHByZT48dWw+PGxpPmhlbGxvCit3b3Js
ZDwvbGk+Cis8L3VsPjwvcHJlPgorPC9kaXY+CisKKzxkaXYgaWQ9InRlc3QyIiBjb250ZW50ZWRp
dGFibGU+Cis8dWw+PGxpPjxwcmU+CitoZWxsbword29ybGQKK3dlYmtpdAorPC9wcmU+PC9saT48
L3VsPgorPC9kaXY+CisKKzxkaXYgaWQ9InRlc3QzIiBjb250ZW50ZWRpdGFibGU+Cis8dWw+PGxp
PjxwcmU+CitoZWxsbword29ybGQKK3dlYmtpdAorPC9wcmU+PC9saT48L3VsPgorPC9kaXY+CisK
KzxkaXYgaWQ9InRlc3Q0IiBjb250ZW50ZWRpdGFibGU+Cis8dWw+PGxpPjxwcmU+CitoZWxsbwor
d29ybGQKK3dlYmtpdAorPC9wcmU+PC9saT48L3VsPgorPC9kaXY+CisKKzxkaXYgaWQ9InRlc3Q1
IiBjb250ZW50ZWRpdGFibGU+Cis8dWw+PGxpPjxwcmU+CitoZWxsbword29ybGQKK3dlYmtpdAor
PC9wcmU+PC9saT48L3VsPgorPC9kaXY+CisKKzxzY3JpcHQ+CisKK2Z1bmN0aW9uIHRlc3RJbmRl
bnRhdGlvbihjb250YWluZXJJZCwgc2VsZWN0b3IpIHsKKyAgICB2YXIgY29udGFpbmVyID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoY29udGFpbmVySWQpOworICAgIHNlbGVjdG9yKGNvbnRhaW5l
cik7CisgICAgTWFya3VwLmR1bXAoY29udGFpbmVyLCAnSW5kZW50aW5nJyk7CisgICAgZG9jdW1l
bnQuZXhlY0NvbW1hbmQoJ2luZGVudCcsIGZhbHNlLCBudWxsKTsKKyAgICBNYXJrdXAuZHVtcChj
b250YWluZXIsICd5aWVsZHMnKTsKK30KKworZnVuY3Rpb24gc2VsZWN0QWxsKGNvbnRhaW5lcikg
eworICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5zZWxlY3RBbGxDaGlsZHJlbihjb250YWluZXIp
OworfQorCitmdW5jdGlvbiBzZWxlY3RvckZvckxpbmVOKGxpbmUpIHsKKyAgICByZXR1cm4gZnVu
Y3Rpb24gKGNvbnRhaW5lcikgeworICAgICAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkuc2V0UG9z
aXRpb24oY29udGFpbmVyLCAwKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lIC0g
MTsgaSsrKQorICAgICAgICAgICAgd2luZG93LmdldFNlbGVjdGlvbigpLm1vZGlmeSgnbW92ZScs
ICdmb3J3YXJkJywgJ2xpbmUnKTsKKyAgICAgICAgd2luZG93LmdldFNlbGVjdGlvbigpLm1vZGlm
eSgnZXh0ZW5kJywgJ2ZvcndhcmQnLCAnbGluZScpOworICAgICAgICAvLyBBdm9pZCBpbmNsdWRp
bmcgXG4gYXQgdGhlIGVuZCBvZiBsaW5lLgorICAgICAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCku
bW9kaWZ5KCdleHRlbmQnLCAnYmFja3dhcmQnLCAnY2hhcmFjdGVyJyk7CisgICAgfQorfQorCit0
ZXN0SW5kZW50YXRpb24oJ3Rlc3QwJywgc2VsZWN0QWxsKTsKK3Rlc3RJbmRlbnRhdGlvbigndGVz
dDEnLCBzZWxlY3RBbGwpOwordGVzdEluZGVudGF0aW9uKCd0ZXN0MicsIHNlbGVjdEFsbCk7Cit0
ZXN0SW5kZW50YXRpb24oJ3Rlc3QzJywgc2VsZWN0b3JGb3JMaW5lTigxKSk7Cit0ZXN0SW5kZW50
YXRpb24oJ3Rlc3Q0Jywgc2VsZWN0b3JGb3JMaW5lTigyKSk7Cit0ZXN0SW5kZW50YXRpb24oJ3Rl
c3Q1Jywgc2VsZWN0b3JGb3JMaW5lTigzKSk7CisKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1s
PgpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9pbmRlbnQtcHJlLXBhcmFn
cmFwaHMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvZXhl
Y0NvbW1hbmQvaW5kZW50LXByZS1wYXJhZ3JhcGhzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvaW5kZW50LXByZS1wYXJhZ3JhcGhz
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNjAgQEAKKworSW5kZW50aW5n
OgorfCAiCisiCit8IDxwcmU+Cit8ICAgIjwjc2VsZWN0aW9uLWFuY2hvcj5oZWxsbzwjc2VsZWN0
aW9uLWZvY3VzPiIKK3wgIgorIgorCit5aWVsZHM6Cit8ICIKKyIKK3wgPGJsb2NrcXVvdGU+Cit8
ICAgY2xhc3M9IndlYmtpdC1pbmRlbnQtYmxvY2txdW90ZSIKK3wgICBzdHlsZT0ibWFyZ2luOiAw
IDAgMCA0MHB4OyBib3JkZXI6IG5vbmU7IHBhZGRpbmc6IDBweDsiCit8ICAgPHByZT4KK3wgICAg
ICI8I3NlbGVjdGlvbi1hbmNob3I+aGVsbG88I3NlbGVjdGlvbi1mb2N1cz4iCit8ICIKKyIKKwor
SW5kZW50aW5nOgorfCAiCisiCit8IDxwcmU+Cit8ICAgIjwjc2VsZWN0aW9uLWFuY2hvcj5oZWxs
bworCit3b3JsZAorCit3ZWJraXQ8I3NlbGVjdGlvbi1mb2N1cz4KKyIKK3wgIgorIgorCit5aWVs
ZHM6Cit8ICIKKyIKK3wgPGJsb2NrcXVvdGU+Cit8ICAgY2xhc3M9IndlYmtpdC1pbmRlbnQtYmxv
Y2txdW90ZSIKK3wgICBzdHlsZT0ibWFyZ2luOiAwIDAgMCA0MHB4OyBib3JkZXI6IG5vbmU7IHBh
ZGRpbmc6IDBweDsiCit8ICAgPHByZT4KK3wgICAgICI8I3NlbGVjdGlvbi1hbmNob3I+aGVsbG8i
Cit8ICAgPHByZT4KK3wgICAgICIKKyIKK3wgICA8cHJlPgorfCAgICAgIndvcmxkIgorfCAgIDxw
cmU+Cit8ICAgICAiCisiCit8ICAgPHByZT4KK3wgICAgICJ3ZWJraXQ8I3NlbGVjdGlvbi1mb2N1
cz4iCit8ICIKKyIKKworSW5kZW50aW5nOgorfCAiCisiCit8IDxwcmU+Cit8ICAgIjwjc2VsZWN0
aW9uLWFuY2hvcj5oZWxsbword29ybGQKK3dlYmtpdDwjc2VsZWN0aW9uLWZvY3VzPgorIgorfCAi
CisiCisKK3lpZWxkczoKK3wgIgorIgorfCA8YmxvY2txdW90ZT4KK3wgICBjbGFzcz0id2Via2l0
LWluZGVudC1ibG9ja3F1b3RlIgorfCAgIHN0eWxlPSJtYXJnaW46IDAgMCAwIDQwcHg7IGJvcmRl
cjogbm9uZTsgcGFkZGluZzogMHB4OyIKK3wgICA8cHJlPgorfCAgICAgIjwjc2VsZWN0aW9uLWFu
Y2hvcj5oZWxsbyIKK3wgICA8cHJlPgorfCAgICAgIndvcmxkIgorfCAgIDxwcmU+Cit8ICAgICAi
d2Via2l0PCNzZWxlY3Rpb24tZm9jdXM+IgorfCAiCisiCisKK0luZGVudGluZzoKK3wgIgorIgor
fCA8cHJlPgorfCAgICI8I3NlbGVjdGlvbi1hbmNob3I+aGVsbG88I3NlbGVjdGlvbi1mb2N1cz4K
Kword29ybGQKKyIKK3wgIgorIgorCit5aWVsZHM6Cit8ICIKKyIKK3wgPGJsb2NrcXVvdGU+Cit8
ICAgY2xhc3M9IndlYmtpdC1pbmRlbnQtYmxvY2txdW90ZSIKK3wgICBzdHlsZT0ibWFyZ2luOiAw
IDAgMCA0MHB4OyBib3JkZXI6IG5vbmU7IHBhZGRpbmc6IDBweDsiCit8ICAgPHByZT4KK3wgICAg
ICI8I3NlbGVjdGlvbi1hbmNob3I+aGVsbG88I3NlbGVjdGlvbi1mb2N1cz4iCit8IDxwcmU+Cit8
ICAgIgord29ybGQKKyIKK3wgIgorIgorCitJbmRlbnRpbmc6Cit8ICIKKyIKK3wgPHByZT4KK3wg
ICAiaGVsbG8KKzwjc2VsZWN0aW9uLWNhcmV0Pgord29ybGQKKyIKK3wgIgorIgorCit5aWVsZHM6
Cit8ICIKKyIKK3wgPHByZT4KK3wgICAiaGVsbG88I3NlbGVjdGlvbi1jYXJldD4KKyIKK3wgPGJs
b2NrcXVvdGU+Cit8ICAgY2xhc3M9IndlYmtpdC1pbmRlbnQtYmxvY2txdW90ZSIKK3wgICBzdHls
ZT0ibWFyZ2luOiAwIDAgMCA0MHB4OyBib3JkZXI6IG5vbmU7IHBhZGRpbmc6IDBweDsiCit8ICAg
PHByZT4KK3wgICAgICIKKyIKK3wgPHByZT4KK3wgICAid29ybGQKKyIKK3wgIgorIgorCitJbmRl
bnRpbmc6Cit8ICIKKyIKK3wgPHByZT4KK3wgICAiaGVsbG8KKworPCNzZWxlY3Rpb24tYW5jaG9y
Pndvcmw8I3NlbGVjdGlvbi1mb2N1cz5kCisiCit8ICIKKyIKKworeWllbGRzOgorfCAiCisiCit8
IDxwcmU+Cit8ICAgImhlbGxvCis8I3NlbGVjdGlvbi1hbmNob3I+CisiCit8IDxibG9ja3F1b3Rl
PgorfCAgIGNsYXNzPSJ3ZWJraXQtaW5kZW50LWJsb2NrcXVvdGUiCit8ICAgc3R5bGU9Im1hcmdp
bjogMCAwIDAgNDBweDsgYm9yZGVyOiBub25lOyBwYWRkaW5nOiAwcHg7IgorfCAgIDxwcmU+Cit8
ICAgICAid29ybDwjc2VsZWN0aW9uLWZvY3VzPmQiCit8ICIKKyIKSW5kZXg6IExheW91dFRlc3Rz
L2VkaXRpbmcvZXhlY0NvbW1hbmQvaW5kZW50LXByZS1wYXJhZ3JhcGhzLmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9pbmRlbnQtcHJlLXBhcmFncmFw
aHMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQv
aW5kZW50LXByZS1wYXJhZ3JhcGhzLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODMgQEAK
KzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNv
dXJjZXMvZHVtcC1hcy1tYXJrdXAuanMiPjwvc2NyaXB0PgorPGRpdiBpZD0idGVzdDAiIGNvbnRl
bnRlZGl0YWJsZT4KKzxwcmU+aGVsbG88L3ByZT4KKzwvZGl2PgorCis8ZGl2IGlkPSJ0ZXN0MSIg
Y29udGVudGVkaXRhYmxlPgorPHByZT4KK2hlbGxvCisKK3dvcmxkCisKK3dlYmtpdAorPC9wcmU+
Cis8L2Rpdj4KKworPGRpdiBpZD0idGVzdDIiIGNvbnRlbnRlZGl0YWJsZT4KKzxwcmU+CitoZWxs
bword29ybGQKK3dlYmtpdAorPC9wcmU+Cis8L2Rpdj4KKworPGRpdiBpZD0idGVzdDMiIGNvbnRl
bnRlZGl0YWJsZT4KKzxwcmU+CitoZWxsbworCit3b3JsZAorPC9wcmU+Cis8L2Rpdj4KKworPGRp
diBpZD0idGVzdDQiIGNvbnRlbnRlZGl0YWJsZT4KKzxwcmU+CitoZWxsbworCit3b3JsZAorPC9w
cmU+Cis8L2Rpdj4KKworPGRpdiBpZD0idGVzdDUiIGNvbnRlbnRlZGl0YWJsZT4KKzxwcmU+Cito
ZWxsbworCit3b3JsZAorPC9wcmU+Cis8L2Rpdj4KKzxzY3JpcHQ+CisKK2Z1bmN0aW9uIHRlc3RJ
bmRlbnRhdGlvbihjb250YWluZXJJZCwgc2VsZWN0b3IpIHsKKyAgICB2YXIgY29udGFpbmVyID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoY29udGFpbmVySWQpOworICAgIHNlbGVjdG9yKGNvbnRh
aW5lcik7CisgICAgTWFya3VwLmR1bXAoY29udGFpbmVyLCAnSW5kZW50aW5nJyk7CisgICAgZG9j
dW1lbnQuZXhlY0NvbW1hbmQoJ2luZGVudCcsIGZhbHNlLCBudWxsKTsKKyAgICBNYXJrdXAuZHVt
cChjb250YWluZXIsICd5aWVsZHMnKTsKK30KKworZnVuY3Rpb24gc2VsZWN0QWxsKGNvbnRhaW5l
cikgeworICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5zZWxlY3RBbGxDaGlsZHJlbihjb250YWlu
ZXIpOworfQorCitmdW5jdGlvbiBzZWxlY3RvckZvckxpbmVOKGxpbmUpIHsKKyAgICByZXR1cm4g
ZnVuY3Rpb24gKGNvbnRhaW5lcikgeworICAgICAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkuc2V0
UG9zaXRpb24oY29udGFpbmVyLCAwKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5l
IC0gMTsgaSsrKQorICAgICAgICAgICAgd2luZG93LmdldFNlbGVjdGlvbigpLm1vZGlmeSgnbW92
ZScsICdmb3J3YXJkJywgJ2xpbmUnKTsKKyAgICAgICAgd2luZG93LmdldFNlbGVjdGlvbigpLm1v
ZGlmeSgnZXh0ZW5kJywgJ2ZvcndhcmQnLCAnbGluZScpOworICAgICAgICB3aW5kb3cuZ2V0U2Vs
ZWN0aW9uKCkubW9kaWZ5KCdleHRlbmQnLCAnYmFja3dhcmQnLCAnY2hhcmFjdGVyJyk7CisgICAg
fQorfQorCit0ZXN0SW5kZW50YXRpb24oJ3Rlc3QwJywgc2VsZWN0QWxsKTsKK3Rlc3RJbmRlbnRh
dGlvbigndGVzdDEnLCBzZWxlY3RBbGwpOwordGVzdEluZGVudGF0aW9uKCd0ZXN0MicsIHNlbGVj
dEFsbCk7Cit0ZXN0SW5kZW50YXRpb24oJ3Rlc3QzJywgc2VsZWN0b3JGb3JMaW5lTigxKSk7Cit0
ZXN0SW5kZW50YXRpb24oJ3Rlc3Q0Jywgc2VsZWN0b3JGb3JMaW5lTigyKSk7Cit0ZXN0SW5kZW50
YXRpb24oJ3Rlc3Q1Jywgc2VsZWN0b3JGb3JMaW5lTigzKSk7CisKKzwvc2NyaXB0PgorPC9ib2R5
PgorPC9odG1sPgo=
</data>
<flag name="review"
          id="59955"
          type_id="1"
          status="+"
          setter="tony"
    />
          </attachment>
      

    </bug>

</bugzilla>