<?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>101449</bug_id>
          
          <creation_ts>2012-11-07 04:53:18 -0800</creation_ts>
          <short_desc>Implement week picking to calendar picker</short_desc>
          <delta_ts>2012-11-07 22:36:30 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Forms</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>100938</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Keishi Hattori">keishi</reporter>
          <assigned_to name="Keishi Hattori">keishi</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>tkent</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>760532</commentid>
    <comment_count>0</comment_count>
    <who name="Keishi Hattori">keishi</who>
    <bug_when>2012-11-07 04:53:18 -0800</bug_when>
    <thetext>Implement week picking to calendar picker</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>760564</commentid>
    <comment_count>1</comment_count>
      <attachid>172767</attachid>
    <who name="Keishi Hattori">keishi</who>
    <bug_when>2012-11-07 05:29:07 -0800</bug_when>
    <thetext>Created attachment 172767
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>760632</commentid>
    <comment_count>2</comment_count>
      <attachid>172767</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-07 06:22:09 -0800</bug_when>
    <thetext>Comment on attachment 172767
Patch

Attachment 172767 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/14760349

New failing tests:
platform/chromium/fast/forms/calendar-picker/calendar-picker-mouse-operations.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761239</commentid>
    <comment_count>3</comment_count>
      <attachid>172767</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-11-07 17:55:22 -0800</bug_when>
    <thetext>Comment on attachment 172767
Patch

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

&gt; Source/WebCore/ChangeLog:45
&gt; +        (DaysTable.prototype._handleKey): Refactored to share the same structure as subclasses.
&gt; +        (MonthPickerDaysTable.prototype._handleKey):

Would you make another patch for the refactoring of existing _handleKey please?

&gt; Source/WebCore/Resources/pagepopups/calendarPicker.css:236
&gt; +.week-mode .available.day-selected.monday {

Inconsistent space before &apos;.&apos;

&gt; Source/WebCore/Resources/pagepopups/calendarPicker.css:262
&gt; +.week-mode  .week-column.unavailable.day-selected {

two spaces before &apos;.&apos;

&gt; Source/WebCore/Resources/pagepopups/calendarPicker.js:200
&gt; +    var week = Week.parse(dateString);
&gt; +    if (week)
&gt; +        return week;

Need to update the jsdoc annotation.

&gt; Source/WebCore/Resources/pagepopups/calendarPicker.js:333
&gt; +        var week = Week.createFromDate(new Date(arguments[0]));

arguments[0] is inconsistent.  it should be valueOrWeekOrYear.

&gt; Source/WebCore/Resources/pagepopups/calendarPicker.js:407
&gt; +    var MillisecondsPerWeek = 7 * 24 * 60 * 60 * 1000;
&gt; +    return Math.floor((createUTCDate(year + 1, 0, 4).getTime() - Week.weekOneStartDateForYear(year)) / MillisecondsPerWeek);

This calculation appears in Week.createFromDate too.  Please consider introducing another function.

&gt; Source/WebCore/Resources/pagepopups/calendarPicker.js:1428
&gt; + * @param {!boolean} keepSelectionPosition
&gt;   * @return {!boolean}
&gt;   */
&gt; -DaysTable.prototype._maybeSetPreviousMonth = function() {
&gt; +DaysTable.prototype._maybeSetPreviousMonth = function(keepSelectionPosition) {

Boolean argument is not good for readability.  Please provide a wrapper function, or an enum.
Also, I think keepSelectionPosition argument should be optional in order to avoid existing callsites.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761241</commentid>
    <comment_count>4</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-11-07 17:57:56 -0800</bug_when>
    <thetext>&gt; Also, I think keepSelectionPosition argument should be optional in order to avoid existing callsites.

avoid updating existing callsites.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761309</commentid>
    <comment_count>5</comment_count>
      <attachid>172924</attachid>
    <who name="Keishi Hattori">keishi</who>
    <bug_when>2012-11-07 20:49:22 -0800</bug_when>
    <thetext>Created attachment 172924
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761310</commentid>
    <comment_count>6</comment_count>
      <attachid>172767</attachid>
    <who name="Keishi Hattori">keishi</who>
    <bug_when>2012-11-07 20:51:07 -0800</bug_when>
    <thetext>Comment on attachment 172767
Patch

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

&gt;&gt; Source/WebCore/Resources/pagepopups/calendarPicker.css:236
&gt;&gt; +.week-mode .available.day-selected.monday {
&gt; 
&gt; Inconsistent space before &apos;.&apos;

I&apos;m not sure what you mean.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761315</commentid>
    <comment_count>7</comment_count>
      <attachid>172767</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-11-07 21:04:10 -0800</bug_when>
    <thetext>Comment on attachment 172767
Patch

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

&gt;&gt;&gt; Source/WebCore/Resources/pagepopups/calendarPicker.css:236
&gt;&gt;&gt; +.week-mode .available.day-selected.monday {
&gt;&gt; 
&gt;&gt; Inconsistent space before &apos;.&apos;
&gt; 
&gt; I&apos;m not sure what you mean.

Please ignore this comment.

I though you meant .week-mode.available.day-selected.monday or .week-mode .available .day-selected .monday
But your code is correct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761319</commentid>
    <comment_count>8</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-11-07 21:13:34 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; &gt; Source/WebCore/ChangeLog:45
&gt; &gt; +        (DaysTable.prototype._handleKey): Refactored to share the same structure as subclasses.
&gt; &gt; +        (MonthPickerDaysTable.prototype._handleKey):
&gt; 
&gt; Would you make another patch for the refactoring of existing _handleKey please?

Don&apos;t you want to separate the patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761324</commentid>
    <comment_count>9</comment_count>
      <attachid>172927</attachid>
    <who name="Keishi Hattori">keishi</who>
    <bug_when>2012-11-07 21:24:05 -0800</bug_when>
    <thetext>Created attachment 172927
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761327</commentid>
    <comment_count>10</comment_count>
      <attachid>172929</attachid>
    <who name="Keishi Hattori">keishi</who>
    <bug_when>2012-11-07 21:49:21 -0800</bug_when>
    <thetext>Created attachment 172929
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761329</commentid>
    <comment_count>11</comment_count>
    <who name="Keishi Hattori">keishi</who>
    <bug_when>2012-11-07 21:50:29 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #3)
&gt; &gt; &gt; Source/WebCore/ChangeLog:45
&gt; &gt; &gt; +        (DaysTable.prototype._handleKey): Refactored to share the same structure as subclasses.
&gt; &gt; &gt; +        (MonthPickerDaysTable.prototype._handleKey):
&gt; &gt; 
&gt; &gt; Would you make another patch for the refactoring of existing _handleKey please?
&gt; 
&gt; Don&apos;t you want to separate the patch?

OK. I removed all changes to _handleKey.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761343</commentid>
    <comment_count>12</comment_count>
      <attachid>172929</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-11-07 22:14:13 -0800</bug_when>
    <thetext>Comment on attachment 172929
Patch

ok.

Please don&apos;t forget smaller patches are better.  Time to review a patch is superlinear. In this case, you can split the DaysTable.prototype.navigateToMonth argument change to another patch, and it would make this focus on the week support.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761353</commentid>
    <comment_count>13</comment_count>
      <attachid>172929</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-07 22:36:26 -0800</bug_when>
    <thetext>Comment on attachment 172929
Patch

Clearing flags on attachment: 172929

Committed r133850: &lt;http://trac.webkit.org/changeset/133850&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761354</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-07 22:36:30 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>172767</attachid>
            <date>2012-11-07 05:29:07 -0800</date>
            <delta_ts>2012-11-07 21:04:10 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101449-20121107222717.patch</filename>
            <type>text/plain</type>
            <size>31551</size>
            <attacher name="Keishi Hattori">keishi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMzNzIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjI2MzdkZDI0ZjcxOWMz
MmFlYmQ0OWNjYjkyNmMzNmU4ZWY2ZWY4Ni4uZWY1ZTY5NTIxNjE0YTZhMzRjNThkZTc1MjVlMDY4
NTNiYzM1MWMwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU1IEBACisyMDEyLTExLTA3ICBLZWlz
aGkgSGF0dG9yaSAgPGtlaXNoaUB3ZWJraXQub3JnPgorCisgICAgICAgIEltcGxlbWVudCB3ZWVr
IHBpY2tpbmcgdG8gY2FsZW5kYXIgcGlja2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMDE0NDkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUaGlzIGFkZHMgd2VlayBwaWNrZXIgbW9kZSB0byBDYWxlbmRh
clBpY2tlci4KKworICAgICAgICBObyBuZXcgdGVzdHMuIFRlc3RzIHdpbGwgYmUgYWRkZWQgbGF0
ZXIgd2hlbiB0aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCBpbiBEUlQuCisKKyAgICAgICAgKiBSZXNv
dXJjZXMvcGFnZXBvcHVwcy9jYWxlbmRhclBpY2tlci5jc3M6CisgICAgICAgICgubW9udGgtbW9k
ZSAuZGF5KToKKyAgICAgICAgKC53ZWVrLW1vZGUgLmF2YWlsYWJsZS5kYXktc2VsZWN0ZWQubW9u
ZGF5KTogUm91bmRlZCBjb3JuZXJzIGFyb3VuZCB3ZWVrIHNlbGVjdGlvbi4KKyAgICAgICAgKC53
ZWVrLW1vZGUgLmF2YWlsYWJsZS5kYXktc2VsZWN0ZWQuc3VuZGF5KTogRGl0dG8uCisgICAgICAg
ICgud2Vlay1tb2RlIC51bmF2YWlsYWJsZS5kYXktc2VsZWN0ZWQpOgorICAgICAgICAoLndlZWst
bW9kZSAudW5hdmFpbGFibGUuZGF5LXNlbGVjdGVkLm1vbmRheSk6CisgICAgICAgICgud2Vlay1t
b2RlIC51bmF2YWlsYWJsZS5kYXktc2VsZWN0ZWQuc3VuZGF5KToKKyAgICAgICAgKC53ZWVrLW1v
ZGUgIC53ZWVrLWNvbHVtbi51bmF2YWlsYWJsZS5kYXktc2VsZWN0ZWQpOgorICAgICAgICAoLndl
ZWstY29sdW1uKTogSGlkZSB3ZWVrIGNvbHVtbiB1bmxlc3MgaW4gd2VlayBtb2RlLgorICAgICAg
ICAoLndlZWstbW9kZSAud2Vlay1jb2x1bW4pOgorICAgICAgICAqIFJlc291cmNlcy9wYWdlcG9w
dXBzL2NhbGVuZGFyUGlja2VyLmpzOgorICAgICAgICAocGFyc2VEYXRlU3RyaW5nKTogU3VwcG9y
dCB3ZWVrIHN0cmluZy4KKyAgICAgICAgKFdlZWspOiBXZWVrIGNvbnN0cnVjdG9yLgorICAgICAg
ICAoV2Vlay5wYXJzZSk6IFBhcnNlcyAieXl5eS1Xd3ciIHN0cmluZy4KKyAgICAgICAgKFdlZWsu
Y3JlYXRlRnJvbURhdGUpOiBDcmVhdGVzIFdlZWsgY29udGFpbmluZyBkYXRldGltZS4KKyAgICAg
ICAgKFdlZWsuY3JlYXRlRnJvbVRvZGF5KTogQ3JlYXRlcyBXZWVrIGNvbnRhaW5pbmcgdG9kYXku
CisgICAgICAgIChXZWVrLndlZWtPbmVTdGFydERhdGVGb3JZZWFyKTogUmV0dXJucyB0aGUgc3Rh
cnQgZGF0ZSBmb3IgdGhlIGZpcnN0IHdlZWsgb2YgeWVhci4KKyAgICAgICAgKFdlZWsubnVtYmVy
T2ZXZWVrc0luWWVhcik6IFJldHVybnMgdGhlIG51bWJlciBvZiB3ZWVrcyBpbiB5ZWFyLgorICAg
ICAgICAoV2Vlay5wcm90b3R5cGUuZXF1YWxzKTogUmV0dXJucyB0cnVlIGlmIHRoZSBXZWVrcyBh
cmUgdGhlIHNhbWUuCisgICAgICAgIChXZWVrLnByb3RvdHlwZS5wcmV2aW91cyk6IFJldHVybnMg
dGhlIHByZXZpb3VzIFdlZWsuCisgICAgICAgIChXZWVrLnByb3RvdHlwZS5uZXh0KTogUmV0dXJu
cyB0aGUgbmV4dCBXZWVrLgorICAgICAgICAoV2Vlay5wcm90b3R5cGUuc3RhcnREYXRlKTogUmV0
dXJucyBzdGFydCBkYXRldGltZSBvZiBXZWVrLgorICAgICAgICAoV2Vlay5wcm90b3R5cGUuZW5k
RGF0ZSk6IFJldHVybnMgZW5kIGRhdGV0aW1lIG9mIFdlZWsuCisgICAgICAgIChXZWVrLnByb3Rv
dHlwZS52YWx1ZU9mKTogUmV0dXJucyB0aGUgbWlsbGlzZWNvbmRzIHNpbmNlIGVwb2NoLgorICAg
ICAgICAoV2Vlay5wcm90b3R5cGUudG9TdHJpbmcpOiBSZXR1cm5zIElTTyB3ZWVrIHN0cmluZy4K
KyAgICAgICAgKENhbGVuZGFyUGlja2VyKTogQWRkIHdlZWsgcGlja2VyIG1vZGUuCisgICAgICAg
IChZZWFyTW9udGhDb250cm9sbGVyLnByb3RvdHlwZS5hdHRhY2hUbyk6IEZpeCBidWcuCisgICAg
ICAgIChEYXlzVGFibGUucHJvdG90eXBlLmF0dGFjaFRvKTogQWRkIHdlZWsgbnVtYmVyIGNvbHVt
bi4KKyAgICAgICAgKERheXNUYWJsZS5wcm90b3R5cGUuX3JlbmRlck1vbnRoKTogUmVuZGVyIHdl
ZWsgbnVtYmVycy4KKyAgICAgICAgKERheXNUYWJsZS5wcm90b3R5cGUuX3NlbGVjdFJhbmdlQXRQ
b3NpdGlvbik6IFdlZWsgbnVtYmVyIG5vZGVzIGhhdmUgYW4gcG9zaXRpb25YIG9mIC0xLgorICAg
ICAgICAoRGF5c1RhYmxlLnByb3RvdHlwZS5fbWF5YmVTZXRQcmV2aW91c01vbnRoKTogQWRkZWQg
a2VlcFNlbGVjdGlvblBvc2l0aW9uIGFyZ3VtZW50LgorICAgICAgICAoRGF5c1RhYmxlLnByb3Rv
dHlwZS5fbWF5YmVTZXROZXh0TW9udGgpOiBBZGRlZCBrZWVwU2VsZWN0aW9uUG9zaXRpb24gYXJn
dW1lbnQuCisgICAgICAgIChEYXlzVGFibGUucHJvdG90eXBlLl9oYW5kbGVLZXkpOiBSZWZhY3Rv
cmVkIHRvIHNoYXJlIHRoZSBzYW1lIHN0cnVjdHVyZSBhcyBzdWJjbGFzc2VzLgorICAgICAgICAo
TW9udGhQaWNrZXJEYXlzVGFibGUucHJvdG90eXBlLl9oYW5kbGVLZXkpOgorICAgICAgICAoV2Vl
a1BpY2tlckRheXNUYWJsZSk6IEFkZGVkLgorICAgICAgICAoV2Vla1BpY2tlckRheXNUYWJsZS5w
cm90b3R5cGUuX21hcmtSYW5nZUFzU2VsZWN0ZWQpOiBNYXJrcyB3ZWVrIGFzIHNlbGVjdGVkLgor
ICAgICAgICAoV2Vla1BpY2tlckRheXNUYWJsZS5wcm90b3R5cGUuc2VsZWN0UmFuZ2UpOiBTZWxl
Y3RzIHdlZWsuCisgICAgICAgIChXZWVrUGlja2VyRGF5c1RhYmxlLnByb3RvdHlwZS5zZWxlY3RS
YW5nZUFuZFNob3dFbnRpcmVSYW5nZSk6IFNlbGVjdHMgd2VlayBhbmQgbmF2aWdhdGUgdG8gc2hv
dyBlbnRpcmUgc2VsZWN0aW9uLgorICAgICAgICAoV2Vla1BpY2tlckRheXNUYWJsZS5wcm90b3R5
cGUuX3JhbmdlRm9yTm9kZSk6IFJldHVybnMgV2VlayBmb3Igbm9kZS4KKyAgICAgICAgKFdlZWtQ
aWNrZXJEYXlzVGFibGUucHJvdG90eXBlLl9oYW5kbGVLZXkpOgorCiAyMDEyLTExLTA2ICBLZWlz
aGkgSGF0dG9yaSAgPGtlaXNoaUB3ZWJraXQub3JnPgogCiAgICAgICAgIEltcGxlbWVudCBtb250
aCBwaWNraW5nIHRvIGNhbGVuZGFyIHBpY2tlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
UmVzb3VyY2VzL3BhZ2Vwb3B1cHMvY2FsZW5kYXJQaWNrZXIuY3NzIGIvU291cmNlL1dlYkNvcmUv
UmVzb3VyY2VzL3BhZ2Vwb3B1cHMvY2FsZW5kYXJQaWNrZXIuY3NzCmluZGV4IGNhMWRiYjIyNWVm
MDBmMWY1MWM0ZDIxMWQzOTgwZDFlM2Q5ZmZkODcuLmNiMTcwYTQ4NDBhYmEzY2U2MzdmNTQ2ODc4
ZDMzOTE0ZDEyZGI3YjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1Jlc291cmNlcy9wYWdl
cG9wdXBzL2NhbGVuZGFyUGlja2VyLmNzcworKysgYi9Tb3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMv
cGFnZXBvcHVwcy9jYWxlbmRhclBpY2tlci5jc3MKQEAgLTIyNSw4ICsyMjUsNTEgQEAgYm9keSB7
CiAgICAgLXdlYmtpdC10cmFuc2l0aW9uOiBub25lOwogfQogCisud2Vlay1tb2RlIC5kYXksCiAu
bW9udGgtbW9kZSAuZGF5IHsKICAgICAtd2Via2l0LXRyYW5zaXRpb246IG5vbmU7CiAgICAgYm9y
ZGVyLXJhZGl1czogMDsKLSAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKKyAgICBi
b3JkZXI6IG5vbmU7CisgICAgcGFkZGluZzogMnB4OworfQorCisud2Vlay1tb2RlIC5hdmFpbGFi
bGUuZGF5LXNlbGVjdGVkLm1vbmRheSB7CisgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogNXB4
OworICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDVweDsKK30KKworLndlZWstbW9kZSAu
YXZhaWxhYmxlLmRheS1zZWxlY3RlZC5zdW5kYXkgeworICAgIGJvcmRlci10b3AtcmlnaHQtcmFk
aXVzOiA1cHg7CisgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDVweDsKK30KKworLndl
ZWstbW9kZSAudW5hdmFpbGFibGUuZGF5LXNlbGVjdGVkIHsKKyAgICBwYWRkaW5nOiAxcHggMnB4
OworICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCBoaWdobGlnaHQ7CisgICAgYm9yZGVyLWJvdHRv
bTogMXB4IHNvbGlkIGhpZ2hsaWdodDsKK30KKworLndlZWstbW9kZSAudW5hdmFpbGFibGUuZGF5
LXNlbGVjdGVkLm1vbmRheSB7CisgICAgcGFkZGluZy1sZWZ0OiAxcHg7CisgICAgYm9yZGVyLWxl
ZnQ6IDFweCBzb2xpZCBoaWdobGlnaHQ7Cit9CisKKy53ZWVrLW1vZGUgLnVuYXZhaWxhYmxlLmRh
eS1zZWxlY3RlZC5zdW5kYXkgeworICAgIHBhZGRpbmctcmlnaHQ6IDFweDsKKyAgICBib3JkZXIt
cmlnaHQ6IDFweCBzb2xpZCBoaWdobGlnaHQ7Cit9CisKKy53ZWVrLW1vZGUgIC53ZWVrLWNvbHVt
bi51bmF2YWlsYWJsZS5kYXktc2VsZWN0ZWQgeworICBwYWRkaW5nOiAxcHg7CisgIGJvcmRlcjog
MXB4IHNvbGlkIGhpZ2hsaWdodDsKK30KKworLndlZWstY29sdW1uIHsKKyAgICBkaXNwbGF5OiBu
b25lOworfQorCisud2Vlay1tb2RlIC53ZWVrLWNvbHVtbiB7CisgICAgZGlzcGxheTogYmxvY2s7
CisgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgIzk5OTsKKyAgICBwYWRkaW5nLXJpZ2h0OiAx
cHg7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMvcGFnZXBvcHVwcy9j
YWxlbmRhclBpY2tlci5qcyBiL1NvdXJjZS9XZWJDb3JlL1Jlc291cmNlcy9wYWdlcG9wdXBzL2Nh
bGVuZGFyUGlja2VyLmpzCmluZGV4IDk4Y2I3ZGUzOTYzMjQ5YjI4NjQ1MzA0OGUwZmY3ZGI2ZGFj
M2QwM2IuLmFiNTU5NDEzMDY4ZWQ5ZmZmNTYyZTdhNGQyOWYxMjJmZDM4ODI3MzMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1Jlc291cmNlcy9wYWdlcG9wdXBzL2NhbGVuZGFyUGlja2VyLmpz
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1Jlc291cmNlcy9wYWdlcG9wdXBzL2NhbGVuZGFyUGlja2Vy
LmpzCkBAIC00Niw2ICs0Niw3IEBAIHZhciBDbGFzc05hbWVzID0gewogICAgIERheUxhYmVsQ29u
dGFpbmVyOiAiZGF5LWxhYmVsLWNvbnRhaW5lciIsCiAgICAgRGF5c0FyZWE6ICJkYXlzLWFyZWEi
LAogICAgIERheXNBcmVhQ29udGFpbmVyOiAiZGF5cy1hcmVhLWNvbnRhaW5lciIsCisgICAgTW9u
ZGF5OiAibW9uZGF5IiwKICAgICBNb250aE1vZGU6ICJtb250aC1tb2RlIiwKICAgICBNb250aFNl
bGVjdG9yOiAibW9udGgtc2VsZWN0b3IiLAogICAgIE1vbnRoU2VsZWN0b3JCb3g6ICJtb250aC1z
ZWxlY3Rvci1ib3giLApAQCAtNTcsMTAgKzU4LDEzIEBAIHZhciBDbGFzc05hbWVzID0gewogICAg
IE5vdFRoaXNNb250aDogIm5vdC10aGlzLW1vbnRoIiwKICAgICBTZWxlY3RlZDogImRheS1zZWxl
Y3RlZCIsCiAgICAgU2VsZWN0ZWRNb250aFllYXI6ICJzZWxlY3RlZC1tb250aC15ZWFyIiwKKyAg
ICBTdW5kYXk6ICJzdW5kYXkiLAogICAgIFRvZGF5QnV0dG9uOiAidG9kYXktYnV0dG9uIiwKICAg
ICBUb2RheUNsZWFyQXJlYTogInRvZGF5LWNsZWFyLWFyZWEiLAogICAgIFVuYXZhaWxhYmxlOiAi
dW5hdmFpbGFibGUiLAogICAgIFdlZWtDb250YWluZXI6ICJ3ZWVrLWNvbnRhaW5lciIsCisgICAg
V2Vla0NvbHVtbjogIndlZWstY29sdW1uIiwKKyAgICBXZWVrTW9kZTogIndlZWstbW9kZSIsCiAg
ICAgWWVhck1vbnRoQXJlYTogInllYXItbW9udGgtYXJlYSIsCiAgICAgWWVhck1vbnRoQnV0dG9u
OiAieWVhci1tb250aC1idXR0b24iLAogICAgIFllYXJNb250aEJ1dHRvbkxlZnQ6ICJ5ZWFyLW1v
bnRoLWJ1dHRvbi1sZWZ0IiwKQEAgLTE5MSw2ICsxOTUsOSBAQCBmdW5jdGlvbiBwYXJzZURhdGVT
dHJpbmcoZGF0ZVN0cmluZykgewogICAgIHZhciBtb250aCA9IE1vbnRoLnBhcnNlKGRhdGVTdHJp
bmcpOwogICAgIGlmIChtb250aCkKICAgICAgICAgcmV0dXJuIG1vbnRoOworICAgIHZhciB3ZWVr
ID0gV2Vlay5wYXJzZShkYXRlU3RyaW5nKTsKKyAgICBpZiAod2VlaykKKyAgICAgICAgcmV0dXJu
IHdlZWs7CiAgICAgcmV0dXJuIERheS5wYXJzZShkYXRlU3RyaW5nKTsKIH0KIApAQCAtMjE0LDEw
ICsyMjEsNiBAQCBmdW5jdGlvbiBEYXkodmFsdWVPckRheU9yWWVhciwgbW9udGgsIGRhdGUpIHsK
IAogRGF5LklTT1N0cmluZ1JlZ0V4cCA9IC9eKFxkKyktKFxkKyktKFxkKykkLzsKIAotLy8gU2Vl
IFdlYkNvcmUvcGxhdGZvcm0vRGF0ZUNvbXBvbmVudHMuaC4KLURheS5NaW5pbXVtID0gbmV3IERh
eSgtNjIxMzU1OTY4MDAwMDAuMCk7Ci1EYXkuTWF4aW11bSA9IG5ldyBEYXkoODY0MDAwMDAwMDAw
MDAwMC4wKTsKLQogLyoqCiAgKiBAcGFyYW0geyFzdHJpbmd9IHN0cgogICogQHJldHVybiB7P01v
bnRofQpAQCAtMjM0LDE0ICsyMzcsMTQgQEAgRGF5LnBhcnNlID0gZnVuY3Rpb24oc3RyKSB7CiAK
IC8qKgogICogQHBhcmFtIHshRGF0ZX0gZGF0ZQotICogQHJldHVybiB7IU1vbnRofQorICogQHJl
dHVybiB7IURheX0KICAqLwogRGF5LmNyZWF0ZUZyb21EYXRlID0gZnVuY3Rpb24oZGF0ZSkgewog
ICAgIHJldHVybiBuZXcgRGF5KGRhdGUuZ2V0VVRDRnVsbFllYXIoKSwgZGF0ZS5nZXRVVENNb250
aCgpLCBkYXRlLmdldFVUQ0RhdGUoKSk7CiB9OwogCiAvKioKLSAqIEByZXR1cm4geyFNb250aH0K
KyAqIEByZXR1cm4geyFEYXl9CiAgKi8KIERheS5jcmVhdGVGcm9tVG9kYXkgPSBmdW5jdGlvbigp
IHsKICAgICB2YXIgbm93ID0gbmV3IERhdGUoKTsKQEAgLTMwMSw2ICszMDQsMTY2IEBAIERheS5w
cm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsKICAgICByZXR1cm4geWVhclN0cmluZyAr
ICItIiArICgiMCIgKyAodGhpcy5tb250aCArIDEpKS5zdWJzdHIoLTIsIDIpICsgIi0iICsgKCIw
IiArIHRoaXMuZGF0ZSkuc3Vic3RyKC0yLCAyKTsKIH07CiAKKy8vIFNlZSBXZWJDb3JlL3BsYXRm
b3JtL0RhdGVDb21wb25lbnRzLmguCitEYXkuTWluaW11bSA9IG5ldyBEYXkoLTYyMTM1NTk2ODAw
MDAwLjApOworRGF5Lk1heGltdW0gPSBuZXcgRGF5KDg2NDAwMDAwMDAwMDAwMDAuMCk7CisvLyBT
ZWUgV2ViQ29yZS9odG1sL0RheUlucHV0VHlwZS5jcHAuCitEYXkuRGVmYXVsdFN0ZXAgPSA4NjQw
MDAwMDsKK0RheS5EZWZhdWx0U3RlcEJhc2UgPSAwOworCisvKioKKyAqIEBjb25zdHJ1Y3Rvcgor
ICogQHBhcmFtIHshbnVtYmVyfFdlZWt9IHZhbHVlT3JXZWVrT3JZZWFyCisgKiBAcGFyYW0geyFu
dW1iZXI9fSB3ZWVrCisgKi8KK2Z1bmN0aW9uIFdlZWsodmFsdWVPcldlZWtPclllYXIsIHdlZWsp
IHsKKyAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgeworICAgICAgICB0aGlzLnllYXIg
PSB2YWx1ZU9yV2Vla09yWWVhcjsKKyAgICAgICAgdGhpcy53ZWVrID0gd2VlazsKKyAgICAgICAg
Ly8gTnVtYmVyIG9mIHllYXJzIHBlciB5ZWFyIGlzIGVpdGhlciA1MiBvciA1My4KKyAgICAgICAg
aWYgKHRoaXMud2VlayA8IDEgfHwgKHRoaXMud2VlayA+IDUyICYmIHRoaXMud2VlayA+IFdlZWsu
bnVtYmVyT2ZXZWVrc0luWWVhcih0aGlzLnllYXIpKSkgeworICAgICAgICAgICAgdmFyIG5vcm1h
bGl6ZWRXZWVrID0gV2Vlay5jcmVhdGVGcm9tRGF0ZSh0aGlzLnN0YXJ0RGF0ZSgpKTsKKyAgICAg
ICAgICAgIHRoaXMueWVhciA9IG5vcm1hbGl6ZWRXZWVrLnllYXI7CisgICAgICAgICAgICB0aGlz
LndlZWsgPSBub3JtYWxpemVkV2Vlay53ZWVrOworICAgICAgICB9CisgICAgfSBlbHNlIGlmICh2
YWx1ZU9yTW9udGhPclllYXIgaW5zdGFuY2VvZiBXZWVrKSB7CisgICAgICAgIHRoaXMueWVhciA9
IHZhbHVlT3JXZWVrT3JZZWFyLnllYXI7CisgICAgICAgIHRoaXMud2VlayA9IHZhbHVlT3JXZWVr
T3JZZWFyLndlZWs7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdmFyIHdlZWsgPSBXZWVrLmNyZWF0
ZUZyb21EYXRlKG5ldyBEYXRlKGFyZ3VtZW50c1swXSkpOworICAgICAgICB0aGlzLnllYXIgPSB3
ZWVrLnllYXI7CisgICAgICAgIHRoaXMud2VlayA9IHdlZWsud2VlazsKKyAgICB9Cit9CisKK1dl
ZWsuSVNPU3RyaW5nUmVnRXhwID0gL14oXGQrKS1bd1ddKFxkKykkLzsKKy8vIFNlZSBXZWJDb3Jl
L3BsYXRmb3JtL0RhdGVDb21wb25lbnRzLmguCitXZWVrLk1pbmltdW0gPSBuZXcgV2VlaygxLCAx
KTsKK1dlZWsuTWF4aW11bSA9IG5ldyBXZWVrKDI3NTc2MCwgMzcpOworLy8gU2VlIFdlYkNvcmUv
aHRtbC9XZWVrSW5wdXRUeXBlLmNwcC4KK1dlZWsuRGVmYXVsdFN0ZXAgPSA2MDQ4MDAwMDA7CitX
ZWVrLkRlZmF1bHRTdGVwQmFzZSA9IC0yNTkyMDAwMDA7CisKKy8qKgorICogQHBhcmFtIHshc3Ry
aW5nfSBzdHIKKyAqIEByZXR1cm4gez9XZWVrfQorICovCitXZWVrLnBhcnNlID0gZnVuY3Rpb24o
c3RyKSB7CisgICAgdmFyIG1hdGNoID0gV2Vlay5JU09TdHJpbmdSZWdFeHAuZXhlYyhzdHIpOwor
ICAgIGlmICghbWF0Y2gpCisgICAgICAgIHJldHVybiBudWxsOworICAgIHZhciB5ZWFyID0gcGFy
c2VJbnQobWF0Y2hbMV0sIDEwKTsKKyAgICB2YXIgd2VlayA9IHBhcnNlSW50KG1hdGNoWzJdLCAx
MCk7CisgICAgcmV0dXJuIG5ldyBXZWVrKHllYXIsIHdlZWspOworfTsKKworLyoqCisgKiBAcGFy
YW0geyFEYXRlfSBkYXRlCisgKiBAcmV0dXJuIHshV2Vla30KKyAqLworV2Vlay5jcmVhdGVGcm9t
RGF0ZSA9IGZ1bmN0aW9uKGRhdGUpIHsKKyAgICB2YXIgeWVhciA9IGRhdGUuZ2V0VVRDRnVsbFll
YXIoKTsKKyAgICBpZiAoeWVhciA8PSBXZWVrLk1heGltdW0ueWVhciAmJiBXZWVrLndlZWtPbmVT
dGFydERhdGVGb3JZZWFyKHllYXIgKyAxKS5nZXRUaW1lKCkgPD0gZGF0ZS5nZXRUaW1lKCkpCisg
ICAgICAgIHllYXIrKzsKKyAgICBlbHNlIGlmICh5ZWFyID4gMSAmJiBXZWVrLndlZWtPbmVTdGFy
dERhdGVGb3JZZWFyKHllYXIpLmdldFRpbWUoKSA+IGRhdGUuZ2V0VGltZSgpKQorICAgICAgICB5
ZWFyLS07CisgICAgdmFyIE1pbGxpc2Vjb25kc1BlcldlZWsgPSA3ICogMjQgKiA2MCAqIDYwICog
MTAwMDsKKyAgICB2YXIgd2VlayA9IDEgKyBNYXRoLmZsb29yKChkYXRlLmdldFRpbWUoKSAtIFdl
ZWsud2Vla09uZVN0YXJ0RGF0ZUZvclllYXIoeWVhcikuZ2V0VGltZSgpKSAvIE1pbGxpc2Vjb25k
c1BlcldlZWspOworICAgIGlmICh3ZWVrIDwgMSB8fCAod2VlayA+IDUyICYmIHdlZWsgPiBXZWVr
Lm51bWJlck9mV2Vla3NJblllYXIoeWVhcikpKQorICAgICAgICByZXR1cm4gbmV3IFdlZWsoTmFO
LCBOYU4pOworICAgIHJldHVybiBuZXcgV2Vlayh5ZWFyLCB3ZWVrKTsKK307CisKKy8qKgorICog
QHJldHVybiB7IVdlZWt9CisgKi8KK1dlZWsuY3JlYXRlRnJvbVRvZGF5ID0gZnVuY3Rpb24oKSB7
CisgICAgdmFyIG5vdyA9IG5ldyBEYXRlKCk7CisgICAgcmV0dXJuIFdlZWsuY3JlYXRlRnJvbURh
dGUoY3JlYXRlVVRDRGF0ZShub3cuZ2V0RnVsbFllYXIoKSwgbm93LmdldE1vbnRoKCksIG5vdy5n
ZXREYXRlKCkpKTsKK307CisKKy8qKgorICogQHBhcmFtIHshbnVtYmVyfSB5ZWFyCisgKiBAcmV0
dXJuIHshRGF0ZX0KKyAqLworV2Vlay53ZWVrT25lU3RhcnREYXRlRm9yWWVhciA9IGZ1bmN0aW9u
KHllYXIpIHsKKyAgICBpZiAoeWVhciA8IDEpCisgICAgICAgIHJldHVybiBjcmVhdGVVVENEYXRl
KDEsIDAsIDEpOworICAgIC8vIFRoZSB3ZWVrIGNvbnRhaW5pbmcgSmFudWFyeSA0dGggaXMgd2Vl
ayBvbmUuCisgICAgdmFyIHllYXJTdGFydERheSA9IGNyZWF0ZVVUQ0RhdGUoeWVhciwgMCwgNCku
Z2V0VVRDRGF5KCk7CisgICAgcmV0dXJuIGNyZWF0ZVVUQ0RhdGUoeWVhciwgMCwgNCAtICh5ZWFy
U3RhcnREYXkgKyA2KSAlIDcpOworfTsKKworLyoqCisgKiBAcGFyYW0geyFudW1iZXJ9IHllYXIK
KyAqIEByZXR1cm4geyFudW1iZXJ9CisgKi8KK1dlZWsubnVtYmVyT2ZXZWVrc0luWWVhciA9IGZ1
bmN0aW9uKHllYXIpIHsKKyAgICBpZiAoeWVhciA8IDEgfHwgeWVhciA+IFdlZWsuTWF4aW11bS55
ZWFyKQorICAgICAgICByZXR1cm4gMDsKKyAgICBlbHNlIGlmICh5ZWFyID09PSBXZWVrLk1heGlt
dW0ueWVhcikKKyAgICAgICAgcmV0dXJuIFdlZWsuTWF4aW11bS53ZWVrOworICAgIHZhciBNaWxs
aXNlY29uZHNQZXJXZWVrID0gNyAqIDI0ICogNjAgKiA2MCAqIDEwMDA7CisgICAgcmV0dXJuIE1h
dGguZmxvb3IoKGNyZWF0ZVVUQ0RhdGUoeWVhciArIDEsIDAsIDQpLmdldFRpbWUoKSAtIFdlZWsu
d2Vla09uZVN0YXJ0RGF0ZUZvclllYXIoeWVhcikpIC8gTWlsbGlzZWNvbmRzUGVyV2Vlayk7Cit9
OworCisvKioKKyAqIEBwYXJhbSB7IVdlZWt9IG90aGVyCisgKiBAcmV0dXJuIHshYm9vbH0KKyAq
LworV2Vlay5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24ob3RoZXIpIHsKKyAgICByZXR1cm4g
dGhpcy55ZWFyID09PSBvdGhlci55ZWFyICYmIHRoaXMud2VlayA9PT0gb3RoZXIud2VlazsKK307
CisKKy8qKgorICogQHJldHVybiB7IVdlZWt9CisgKi8KK1dlZWsucHJvdG90eXBlLnByZXZpb3Vz
ID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIG5ldyBXZWVrKHRoaXMueWVhciwgdGhpcy53ZWVr
IC0gMSk7Cit9OworCisvKioKKyAqIEByZXR1cm4geyFXZWVrfQorICovCitXZWVrLnByb3RvdHlw
ZS5uZXh0ID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIG5ldyBXZWVrKHRoaXMueWVhciwgdGhp
cy53ZWVrICsgMSk7Cit9OworCisvKioKKyAqIEByZXR1cm4geyFEYXRlfQorICovCitXZWVrLnBy
b3RvdHlwZS5zdGFydERhdGUgPSBmdW5jdGlvbigpIHsKKyAgICB2YXIgd2Vla1N0YXJ0RGF0ZSA9
IFdlZWsud2Vla09uZVN0YXJ0RGF0ZUZvclllYXIodGhpcy55ZWFyKTsKKyAgICB3ZWVrU3RhcnRE
YXRlLnNldFVUQ0RhdGUod2Vla1N0YXJ0RGF0ZS5nZXRVVENEYXRlKCkgKyAodGhpcy53ZWVrIC0g
MSkgKiA3KTsKKyAgICByZXR1cm4gd2Vla1N0YXJ0RGF0ZTsKK307CisKKy8qKgorICogQHJldHVy
biB7IURhdGV9CisgKi8KK1dlZWsucHJvdG90eXBlLmVuZERhdGUgPSBmdW5jdGlvbigpIHsKKyAg
ICBpZiAodGhpcy5lcXVhbHMoV2Vlay5NYXhpbXVtKSkKKyAgICAgICAgcmV0dXJuIERheS5NYXhp
bXVtLnN0YXJ0RGF0ZSgpOworICAgIHJldHVybiB0aGlzLm5leHQoKS5zdGFydERhdGUoKTsKK307
CisKKy8qKgorICogQHJldHVybiB7IW51bWJlcn0KKyAqLworV2Vlay5wcm90b3R5cGUudmFsdWVP
ZiA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLnN0YXJ0RGF0ZSgpLmdldFRpbWUoKSAt
IGNyZWF0ZVVUQ0RhdGUoMTk3MCwgMCwgMSkuZ2V0VGltZSgpOworfTsKKworLyoqCisgKiBAcmV0
dXJuIHshc3RyaW5nfQorICovCitXZWVrLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkg
eworICAgIHZhciB5ZWFyU3RyaW5nID0gU3RyaW5nKHRoaXMueWVhcik7CisgICAgaWYgKHllYXJT
dHJpbmcubGVuZ3RoIDwgNCkKKyAgICAgICAgeWVhclN0cmluZyA9ICgiMDAwIiArIHllYXJTdHJp
bmcpLnN1YnN0cigtNCwgNCk7CisgICAgcmV0dXJuIHllYXJTdHJpbmcgKyAiLVciICsgKCIwIiAr
IHRoaXMud2Vlaykuc3Vic3RyKC0yLCAyKTsKK307CisKIC8qKgogICogQHBhcmFtIHshbnVtYmVy
fE1vbnRofSB2YWx1ZU9yTW9udGhPclllYXIKICAqIEBwYXJhbSB7IW51bWJlcj19IG1vbnRoCkBA
IC0zMjksNiArNDkyLDkgQEAgTW9udGguSVNPU3RyaW5nUmVnRXhwID0gL14oXGQrKS0oXGQrKSQv
OwogLy8gU2VlIFdlYkNvcmUvcGxhdGZvcm0vRGF0ZUNvbXBvbmVudHMuaC4KIE1vbnRoLk1pbmlt
dW0gPSBuZXcgTW9udGgoMSwgMCk7CiBNb250aC5NYXhpbXVtID0gbmV3IE1vbnRoKDI3NTc2MCwg
OCk7CisvLyBTZWUgV2ViQ29yZS9odG1sL01vbnRoSW5wdXRUeXBlLmNwcC4KK01vbnRoLkRlZmF1
bHRTdGVwID0gMTsKK01vbnRoLkRlZmF1bHRTdGVwQmFzZSA9IDA7CiAKIC8qKgogICogQHBhcmFt
IHshc3RyaW5nfSBzdHIKQEAgLTUxOCw2ICs2ODQsMTAgQEAgZnVuY3Rpb24gQ2FsZW5kYXJQaWNr
ZXIoZWxlbWVudCwgY29uZmlnKSB7CiAgICAgICAgIHRoaXMuc2VsZWN0aW9uQ29uc3RydWN0b3Ig
PSBNb250aDsKICAgICAgICAgdGhpcy5fZGF5c1RhYmxlID0gbmV3IE1vbnRoUGlja2VyRGF5c1Rh
YmxlKHRoaXMpOwogICAgICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ2xhc3NOYW1l
cy5Nb250aE1vZGUpOworICAgIH0gZWxzZSBpZiAodGhpcy5fY29uZmlnLm1vZGUgPT09ICJ3ZWVr
IikgeworICAgICAgICB0aGlzLnNlbGVjdGlvbkNvbnN0cnVjdG9yID0gV2VlazsKKyAgICAgICAg
dGhpcy5fZGF5c1RhYmxlID0gbmV3IFdlZWtQaWNrZXJEYXlzVGFibGUodGhpcyk7CisgICAgICAg
IHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDbGFzc05hbWVzLldlZWtNb2RlKTsKICAgICB9
IGVsc2UgewogICAgICAgICB0aGlzLnNlbGVjdGlvbkNvbnN0cnVjdG9yID0gRGF5OwogICAgICAg
ICB0aGlzLl9kYXlzVGFibGUgPSBuZXcgRGF5c1RhYmxlKHRoaXMpOwpAQCAtNTMxLDggKzcwMSw4
IEBAIGZ1bmN0aW9uIENhbGVuZGFyUGlja2VyKGVsZW1lbnQsIGNvbmZpZykgewogICAgIHZhciBt
YXhpbXVtID0gKHR5cGVvZiB0aGlzLl9jb25maWcubWF4ICE9PSAidW5kZWZpbmVkIikgPyBwYXJz
ZURhdGVTdHJpbmcodGhpcy5fY29uZmlnLm1heCkgOiB0aGlzLnNlbGVjdGlvbkNvbnN0cnVjdG9y
Lk1heGltdW07CiAgICAgdGhpcy5fbWluaW11bVZhbHVlID0gbWluaW11bS52YWx1ZU9mKCk7CiAg
ICAgdGhpcy5fbWF4aW11bVZhbHVlID0gbWF4aW11bS52YWx1ZU9mKCk7Ci0gICAgdGhpcy5zdGVw
ID0gKHR5cGVvZiB0aGlzLl9jb25maWcuc3RlcCAhPT0gdW5kZWZpbmVkKSA/IE51bWJlcih0aGlz
Ll9jb25maWcuc3RlcCkgOiBDYWxlbmRhclBpY2tlci5EZWZhdWx0U3RlcFNjYWxlRmFjdG9yOwot
ICAgIHRoaXMuc3RlcEJhc2UgPSAodHlwZW9mIHRoaXMuX2NvbmZpZy5zdGVwQmFzZSAhPT0gInVu
ZGVmaW5lZCIpID8gTnVtYmVyKHRoaXMuX2NvbmZpZy5zdGVwQmFzZSkgOiBDYWxlbmRhclBpY2tl
ci5EZWZhdWx0U3RlcEJhc2U7CisgICAgdGhpcy5zdGVwID0gKHR5cGVvZiB0aGlzLl9jb25maWcu
c3RlcCAhPT0gdW5kZWZpbmVkKSA/IE51bWJlcih0aGlzLl9jb25maWcuc3RlcCkgOiB0aGlzLnNl
bGVjdGlvbkNvbnN0cnVjdG9yLkRlZmF1bHRTdGVwOworICAgIHRoaXMuc3RlcEJhc2UgPSAodHlw
ZW9mIHRoaXMuX2NvbmZpZy5zdGVwQmFzZSAhPT0gInVuZGVmaW5lZCIpID8gTnVtYmVyKHRoaXMu
X2NvbmZpZy5zdGVwQmFzZSkgOiB0aGlzLnNlbGVjdGlvbkNvbnN0cnVjdG9yLkRlZmF1bHRTdGVw
QmFzZTsKICAgICB0aGlzLl9taW5pbXVtTW9udGggPSBNb250aC5jcmVhdGVGcm9tRGF0ZShtaW5p
bXVtLnN0YXJ0RGF0ZSgpKTsKICAgICB0aGlzLm1heGltdW1Nb250aCA9IE1vbnRoLmNyZWF0ZUZy
b21EYXRlKG1heGltdW0uc3RhcnREYXRlKCkpOwogICAgIHRoaXMuX2N1cnJlbnRNb250aCA9IG5l
dyBNb250aChOYU4sIE5hTik7CkBAIC01NTQsMTAgKzcyNCw2IEBAIGZ1bmN0aW9uIENhbGVuZGFy
UGlja2VyKGVsZW1lbnQsIGNvbmZpZykgewogfQogQ2FsZW5kYXJQaWNrZXIucHJvdG90eXBlID0g
T2JqZWN0LmNyZWF0ZShQaWNrZXIucHJvdG90eXBlKTsKIAotLy8gU2VlIFdlYkNvcmUvaHRtbC9E
YXRlSW5wdXRUeXBlLmNwcC4KLUNhbGVuZGFyUGlja2VyLkRlZmF1bHRTdGVwU2NhbGVGYWN0b3Ig
PSA4NjQwMDAwMDsKLUNhbGVuZGFyUGlja2VyLkRlZmF1bHRTdGVwQmFzZSA9IDAuMDsKLQogQ2Fs
ZW5kYXJQaWNrZXIucHJvdG90eXBlLl9oYW5kbGVXaW5kb3dSZXNpemUgPSBmdW5jdGlvbigpIHsK
ICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoInByZXBhcmluZyIpOwogfTsKQEAg
LTcyNCw3ICs4OTAsNyBAQCBZZWFyTW9udGhDb250cm9sbGVyLnByb3RvdHlwZS5hdHRhY2hUbyA9
IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgICAgICAgbWF4V2lkdGggPSBNYXRoLm1heChtYXhXaWR0
aCwgdGhpcy5fbW9udGgub2Zmc2V0V2lkdGgpOwogICAgICAgICBtb250aCA9IG1vbnRoLnByZXZp
b3VzKCk7CiAgICAgfQotICAgIGlmIChnZXRMYW5ndWFnZSgpID09ICJqYSIgJiYgSW1wZXJpYWxF
cmFMaW1pdCA8IG1heGltdW1ZZWFyKSB7CisgICAgaWYgKGdldExhbmd1YWdlKCkgPT0gImphIiAm
JiBJbXBlcmlhbEVyYUxpbWl0IDwgdGhpcy5waWNrZXIubWF4aW11bU1vbnRoLnllYXIpIHsKICAg
ICAgICAgZm9yICh2YXIgbSA9IDA7IG0gPCAxMjsgKyttKSB7CiAgICAgICAgICAgICB0aGlzLl9t
b250aC50ZXh0Q29udGVudCA9IG5ldyBNb250aChJbXBlcmlhbEVyYUxpbWl0LCBtKS50b0xvY2Fs
ZVN0cmluZygpOwogICAgICAgICAgICAgbWF4V2lkdGggPSBNYXRoLm1heChtYXhXaWR0aCwgdGhp
cy5fbW9udGgub2Zmc2V0V2lkdGgpOwpAQCAtMTAwOSwxMyArMTE3NSw2IEBAIGZ1bmN0aW9uIERh
eXNUYWJsZShwaWNrZXIpIHsKIH0KIAogLyoqCi0gKiBAcmV0dXJuIHshYm9vbGVhbn0KLSAqLwot
RGF5c1RhYmxlLnByb3RvdHlwZS5faGFzU2VsZWN0aW9uID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0
dXJuICEhdGhpcy5fZmlyc3ROb2RlSW5TZWxlY3RlZFJhbmdlKCk7Ci19Ci0KLS8qKgogICogVGhl
IG51bWJlciBvZiB3ZWVrIGxpbmVzIGluIHRoZSBzY3JlZW4uCiAgKiBAY29uc3QKICAqIEB0eXBl
IHtudW1iZXJ9CkBAIC0xMDMzLDEzICsxMTkyLDIwIEBAIERheXNUYWJsZS5wcm90b3R5cGUuYXR0
YWNoVG8gPSBmdW5jdGlvbihlbGVtZW50KSB7CiAgICAgdGhpcy5fZGF5c0NvbnRhaW5lci5hZGRF
dmVudExpc3RlbmVyKCJ3ZWJraXRUcmFuc2l0aW9uRW5kIiwgdGhpcy5fbW92ZUluRGF5cy5iaW5k
KHRoaXMpLCBmYWxzZSk7CiAgICAgdmFyIGNvbnRhaW5lciA9IGNyZWF0ZUVsZW1lbnQoInRyIiwg
Q2xhc3NOYW1lcy5EYXlMYWJlbENvbnRhaW5lcik7CiAgICAgdmFyIHdlZWtTdGFydERheSA9IGds
b2JhbC5wYXJhbXMud2Vla1N0YXJ0RGF5IHx8IDA7CisgICAgY29udGFpbmVyLmFwcGVuZENoaWxk
KGNyZWF0ZUVsZW1lbnQoInRoIiwgQ2xhc3NOYW1lcy5EYXlMYWJlbCArICIgIiArIENsYXNzTmFt
ZXMuV2Vla0NvbHVtbiwgZ2xvYmFsLnBhcmFtcy53ZWVrTGFiZWwpKTsKICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IDc7IGkrKykKICAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGNyZWF0ZUVs
ZW1lbnQoInRoIiwgQ2xhc3NOYW1lcy5EYXlMYWJlbCwgZ2xvYmFsLnBhcmFtcy5kYXlMYWJlbHNb
KHdlZWtTdGFydERheSArIGkpICUgN10pKTsKICAgICB0aGlzLl9kYXlzQ29udGFpbmVyLmFwcGVu
ZENoaWxkKGNvbnRhaW5lcik7CiAgICAgdGhpcy5fZGF5cyA9IFtdOworICAgIHRoaXMuX3dlZWtO
dW1iZXJzID0gW107CiAgICAgZm9yICh2YXIgdyA9IDA7IHcgPCBEYXlzVGFibGUuX1dlZWtzOyB3
KyspIHsKICAgICAgICAgY29udGFpbmVyID0gY3JlYXRlRWxlbWVudCgidHIiLCBDbGFzc05hbWVz
LldlZWtDb250YWluZXIpOwogICAgICAgICB2YXIgd2VlayA9IFtdOworICAgICAgICB2YXIgd2Vl
a051bWJlck5vZGUgPSBjcmVhdGVFbGVtZW50KCJ0ZCIsIENsYXNzTmFtZXMuRGF5ICsgIiAiICsg
Q2xhc3NOYW1lcy5XZWVrQ29sdW1uLCAiICIpOworICAgICAgICB3ZWVrTnVtYmVyTm9kZS5kYXRh
c2V0LnBvc2l0aW9uWCA9IC0xOworICAgICAgICB3ZWVrTnVtYmVyTm9kZS5kYXRhc2V0LnBvc2l0
aW9uWSA9IHc7CisgICAgICAgIHRoaXMuX3dlZWtOdW1iZXJzLnB1c2god2Vla051bWJlck5vZGUp
OworICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQod2Vla051bWJlck5vZGUpOwogICAgICAg
ICBmb3IgKHZhciBkID0gMDsgZCA8IDc7IGQrKykgewogICAgICAgICAgICAgdmFyIGRheSA9IGNy
ZWF0ZUVsZW1lbnQoInRkIiwgQ2xhc3NOYW1lcy5EYXksICIgIik7CiAgICAgICAgICAgICBkYXku
c2V0QXR0cmlidXRlKCJkYXRhLXBvc2l0aW9uLXgiLCBTdHJpbmcoZCkpOwpAQCAtMTA5NSwxNCAr
MTI2MSwxOCBAQCBEYXlzVGFibGUucHJvdG90eXBlLl9yZW5kZXJNb250aCA9IGZ1bmN0aW9uKG1v
bnRoKSB7CiAgICAgaWYgKHN0YXJ0T2Zmc2V0ID49IDApCiAgICAgICAgIHN0YXJ0T2Zmc2V0IC09
IDc7CiAgICAgZGF5SXRlcmF0b3Iuc2V0VVRDRGF0ZShzdGFydE9mZnNldCArIDEpOworICAgIHZh
ciBtb25kYXlPZmZzZXQgPSAoOCAtIHdlZWtTdGFydERheSkgJSA3OworICAgIHZhciBzdW5kYXlP
ZmZzZXQgPSB3ZWVrU3RhcnREYXkgJSA3OwogICAgIGZvciAodmFyIHcgPSAwOyB3IDwgRGF5c1Rh
YmxlLl9XZWVrczsgdysrKSB7CiAgICAgICAgIGZvciAodmFyIGQgPSAwOyBkIDwgNzsgZCsrKSB7
CiAgICAgICAgICAgICB2YXIgaXRlck1vbnRoID0gTW9udGguY3JlYXRlRnJvbURhdGUoZGF5SXRl
cmF0b3IpOworICAgICAgICAgICAgdmFyIGl0ZXJXZWVrID0gV2Vlay5jcmVhdGVGcm9tRGF0ZShk
YXlJdGVyYXRvcik7CiAgICAgICAgICAgICB2YXIgdGltZSA9IGRheUl0ZXJhdG9yLmdldFRpbWUo
KTsKICAgICAgICAgICAgIHZhciBlbGVtZW50ID0gdGhpcy5fZGF5c1t3XVtkXTsKICAgICAgICAg
ICAgIGVsZW1lbnQuaW5uZXJUZXh0ID0gbG9jYWxpemVOdW1iZXIoZGF5SXRlcmF0b3IuZ2V0VVRD
RGF0ZSgpKTsKICAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NOYW1lID0gQ2xhc3NOYW1lcy5EYXk7
CiAgICAgICAgICAgICBlbGVtZW50LmRhdGFzZXQuc3VibWl0VmFsdWUgPSBEYXkuY3JlYXRlRnJv
bURhdGUoZGF5SXRlcmF0b3IpLnRvU3RyaW5nKCk7CisgICAgICAgICAgICBlbGVtZW50LmRhdGFz
ZXQud2Vla1ZhbHVlID0gaXRlcldlZWsudG9TdHJpbmcoKTsKICAgICAgICAgICAgIGVsZW1lbnQu
ZGF0YXNldC5tb250aFZhbHVlID0gaXRlck1vbnRoLnRvU3RyaW5nKCk7CiAgICAgICAgICAgICBp
ZiAoaXNOYU4odGltZSkpIHsKICAgICAgICAgICAgICAgICBlbGVtZW50LmlubmVyVGV4dCA9ICIt
IjsKQEAgLTExMTQsNiArMTI4NCwxOCBAQCBEYXlzVGFibGUucHJvdG90eXBlLl9yZW5kZXJNb250
aCA9IGZ1bmN0aW9uKG1vbnRoKSB7CiAgICAgICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3Qu
YWRkKENsYXNzTmFtZXMuTm90VGhpc01vbnRoKTsKICAgICAgICAgICAgIH0gZWxzZQogICAgICAg
ICAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChDbGFzc05hbWVzLkF2YWlsYWJsZSk7Cisg
ICAgICAgICAgICBpZiAoZCA9PT0gbW9uZGF5T2Zmc2V0KSB7CisgICAgICAgICAgICAgICAgZWxl
bWVudC5jbGFzc0xpc3QuYWRkKENsYXNzTmFtZXMuTW9uZGF5KTsKKyAgICAgICAgICAgICAgICBp
ZiAodGhpcy5fd2Vla051bWJlcnNbd10pIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fd2Vl
a051bWJlcnNbd10uZGF0YXNldC53ZWVrVmFsdWUgPSBpdGVyV2Vlay50b1N0cmluZygpOworICAg
ICAgICAgICAgICAgICAgICB0aGlzLl93ZWVrTnVtYmVyc1t3XS5pbm5lclRleHQgPSBsb2NhbGl6
ZU51bWJlcihpdGVyV2Vlay53ZWVrKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQu
Y2xhc3NMaXN0LmNvbnRhaW5zKENsYXNzTmFtZXMuQXZhaWxhYmxlKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRoaXMuX3dlZWtOdW1iZXJzW3ddLmNsYXNzTGlzdC5hZGQoQ2xhc3NOYW1lcy5B
dmFpbGFibGUpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAg
ICAgICB0aGlzLl93ZWVrTnVtYmVyc1t3XS5jbGFzc0xpc3QuYWRkKENsYXNzTmFtZXMuVW5hdmFp
bGFibGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoZCA9PT0g
c3VuZGF5T2Zmc2V0KQorICAgICAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChDbGFz
c05hbWVzLlN1bmRheSk7CiAgICAgICAgICAgICBkYXlJdGVyYXRvci5zZXRVVENEYXRlKGRheUl0
ZXJhdG9yLmdldFVUQ0RhdGUoKSArIDEpOwogICAgICAgICB9CiAgICAgfQpAQCAtMTIyMiw3ICsx
NDA0LDggQEAgRGF5c1RhYmxlLnByb3RvdHlwZS5lbmREYXRlID0gZnVuY3Rpb24oKSB7CiAgKiBA
cGFyYW0geyFudW1iZXJ9IHkKICAqLwogRGF5c1RhYmxlLnByb3RvdHlwZS5fc2VsZWN0UmFuZ2VB
dFBvc2l0aW9uID0gZnVuY3Rpb24oeCwgeSkgewotICAgIHRoaXMuX3NlbGVjdFJhbmdlQ29udGFp
bmluZ05vZGUodGhpcy5fZGF5c1t5XVt4XSk7CisgICAgdmFyIG5vZGUgPSB4ID09PSAtMSA/IHRo
aXMuX3dlZWtOdW1iZXJzW3ldIDogdGhpcy5fZGF5c1t5XVt4XTsKKyAgICB0aGlzLl9zZWxlY3RS
YW5nZUNvbnRhaW5pbmdOb2RlKG5vZGUpOwogfTsKIAogLyoqCkBAIC0xMjM5LDI0ICsxNDIyLDI2
IEBAIERheXNUYWJsZS5wcm90b3R5cGUuX2Rlc2VsZWN0ID0gZnVuY3Rpb24oKSB7CiB9OwogCiAv
KioKKyAqIEBwYXJhbSB7IWJvb2xlYW59IGtlZXBTZWxlY3Rpb25Qb3NpdGlvbgogICogQHJldHVy
biB7IWJvb2xlYW59CiAgKi8KLURheXNUYWJsZS5wcm90b3R5cGUuX21heWJlU2V0UHJldmlvdXNN
b250aCA9IGZ1bmN0aW9uKCkgeworRGF5c1RhYmxlLnByb3RvdHlwZS5fbWF5YmVTZXRQcmV2aW91
c01vbnRoID0gZnVuY3Rpb24oa2VlcFNlbGVjdGlvblBvc2l0aW9uKSB7CiAgICAgdmFyIHByZXZp
b3VzTW9udGggPSB0aGlzLnBpY2tlci5jdXJyZW50TW9udGgoKS5wcmV2aW91cygpOwogICAgIGlm
ICghdGhpcy5waWNrZXIuc2hvdWxkU2hvd01vbnRoKHByZXZpb3VzTW9udGgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgdGhpcy5waWNrZXIuc2hvd01vbnRoKHByZXZpb3VzTW9udGgsIHRy
dWUpOworICAgIHRoaXMucGlja2VyLnNob3dNb250aChwcmV2aW91c01vbnRoLCB0cnVlLCBrZWVw
U2VsZWN0aW9uUG9zaXRpb24pOwogICAgIHJldHVybiB0cnVlOwogfTsKIAogLyoqCisgKiBAcGFy
YW0geyFib29sZWFufSBrZWVwU2VsZWN0aW9uUG9zaXRpb24KICAqIEByZXR1cm4geyFib29sZWFu
fQogICovCi1EYXlzVGFibGUucHJvdG90eXBlLl9tYXliZVNldE5leHRNb250aCA9IGZ1bmN0aW9u
KCkgeworRGF5c1RhYmxlLnByb3RvdHlwZS5fbWF5YmVTZXROZXh0TW9udGggPSBmdW5jdGlvbihr
ZWVwU2VsZWN0aW9uUG9zaXRpb24pIHsKICAgICB2YXIgbmV4dE1vbnRoID0gdGhpcy5waWNrZXIu
Y3VycmVudE1vbnRoKCkubmV4dCgpOwogICAgIGlmICghdGhpcy5waWNrZXIuc2hvdWxkU2hvd01v
bnRoKG5leHRNb250aCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB0aGlzLnBpY2tlci5z
aG93TW9udGgobmV4dE1vbnRoLCB0cnVlKTsKKyAgICB0aGlzLnBpY2tlci5zaG93TW9udGgobmV4
dE1vbnRoLCB0cnVlLCBrZWVwU2VsZWN0aW9uUG9zaXRpb24pOwogICAgIHJldHVybiB0cnVlOwog
fTsKIApAQCAtMTI5OCwxNiArMTQ4MywxNSBAQCBEYXlzVGFibGUucHJvdG90eXBlLl9oYW5kbGVL
ZXkgPSBmdW5jdGlvbihldmVudCkgewogICAgICAgICB4ID0gcGFyc2VJbnQoZmlyc3ROb2RlSW5T
ZWxlY3RlZFJhbmdlLmRhdGFzZXQucG9zaXRpb25YLCAxMCk7CiAgICAgICAgIHkgPSBwYXJzZUlu
dChmaXJzdE5vZGVJblNlbGVjdGVkUmFuZ2UuZGF0YXNldC5wb3NpdGlvblksIDEwKTsKICAgICB9
Ci0gICAgaWYgKCF0aGlzLl9oYXNTZWxlY3Rpb24oKSAmJiAoa2V5ID09ICJMZWZ0IiB8fCBrZXkg
PT0gIlVwIiB8fCBrZXkgPT0gIlJpZ2h0IiB8fCBrZXkgPT0gIkRvd24iKSkgeworICAgIHZhciBl
dmVudEhhbmRsZWQgPSBmYWxzZTsKKyAgICBpZiAoIWZpcnN0Tm9kZUluU2VsZWN0ZWRSYW5nZSAm
JiAoa2V5ID09ICJMZWZ0IiB8fCBrZXkgPT0gIlVwIiB8fCBrZXkgPT0gIlJpZ2h0IiB8fCBrZXkg
PT0gIkRvd24iKSkgewogICAgICAgICAvLyBQdXQgdGhlIHNlbGVjdGlvbiBvbiBhIGNlbnRlciBj
ZWxsLgotICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbihldmVudCwgMywgTWF0aC5mbG9vcihE
YXlzVGFibGUuX1dlZWtzIC8gMiAtIDEpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGlmIChrZXkgPT0gKGdsb2JhbC5wYXJhbXMuaXNDYWxlbmRhclJUTCA/ICJSaWdodCIgOiAiTGVm
dCIpKSB7CisgICAgICAgIHRoaXMuX3NlbGVjdFJhbmdlQXRQb3NpdGlvbigzLCBNYXRoLmZsb29y
KERheXNUYWJsZS5fV2Vla3MgLyAyIC0gMSkpOworICAgICAgICBldmVudEhhbmRsZWQgPSB0cnVl
OworICAgIH0gZWxzZSBpZiAoa2V5ID09IChnbG9iYWwucGFyYW1zLmlzQ2FsZW5kYXJSVEwgPyAi
UmlnaHQiIDogIkxlZnQiKSkgewogICAgICAgICBpZiAoeCA9PSAwKSB7CiAgICAgICAgICAgICBp
ZiAoeSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9tYXliZVNldFByZXZpb3Vz
TW9udGgoKSkKKyAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX21heWJlU2V0UHJldmlvdXNNb250
aChmYWxzZSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB5
ID0gRGF5c1RhYmxlLl9XZWVrcyAtIDE7CiAgICAgICAgICAgICB9IGVsc2UKQEAgLTEzMTUsMjEg
KzE0OTksMjEgQEAgRGF5c1RhYmxlLnByb3RvdHlwZS5faGFuZGxlS2V5ID0gZnVuY3Rpb24oZXZl
bnQpIHsKICAgICAgICAgICAgIHggPSA2OwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHgt
LTsKLSAgICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb24oZXZlbnQsIHgsIHkpOwotCisgICAgICAg
IHRoaXMuX3NlbGVjdFJhbmdlQXRQb3NpdGlvbih4LCB5KTsKKyAgICAgICAgZXZlbnRIYW5kbGVk
ID0gdHJ1ZTsKICAgICB9IGVsc2UgaWYgKGtleSA9PSAiVXAiKSB7CiAgICAgICAgIGlmICh5ID09
IDApIHsKLSAgICAgICAgICAgIGlmICghdGhpcy5fbWF5YmVTZXRQcmV2aW91c01vbnRoKCkpCisg
ICAgICAgICAgICBpZiAoIXRoaXMuX21heWJlU2V0UHJldmlvdXNNb250aChmYWxzZSkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgeSA9IERheXNUYWJsZS5fV2Vla3MgLSAx
OwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHktLTsKLSAgICAgICAgdGhpcy51cGRhdGVT
ZWxlY3Rpb24oZXZlbnQsIHgsIHkpOwotCisgICAgICAgIHRoaXMuX3NlbGVjdFJhbmdlQXRQb3Np
dGlvbih4LCB5KTsKKyAgICAgICAgZXZlbnRIYW5kbGVkID0gdHJ1ZTsKICAgICB9IGVsc2UgaWYg
KGtleSA9PSAoZ2xvYmFsLnBhcmFtcy5pc0NhbGVuZGFyUlRMID8gIkxlZnQiIDogIlJpZ2h0Iikp
IHsKICAgICAgICAgaWYgKHggPT0gNikgewogICAgICAgICAgICAgaWYgKHkgPT0gRGF5c1RhYmxl
Ll9XZWVrcyAtIDEpIHsKLSAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX21heWJlU2V0TmV4dE1v
bnRoKCkpCisgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9tYXliZVNldE5leHRNb250aChmYWxz
ZSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB5ID0gMDsK
ICAgICAgICAgICAgIH0gZWxzZQpAQCAtMTMzNyw1MyArMTUyMSw0MSBAQCBEYXlzVGFibGUucHJv
dG90eXBlLl9oYW5kbGVLZXkgPSBmdW5jdGlvbihldmVudCkgewogICAgICAgICAgICAgeCA9IDA7
CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgeCsrOwotICAgICAgICB0aGlzLnVwZGF0ZVNl
bGVjdGlvbihldmVudCwgeCwgeSk7Ci0KKyAgICAgICAgdGhpcy5fc2VsZWN0UmFuZ2VBdFBvc2l0
aW9uKHgsIHkpOworICAgICAgICBldmVudEhhbmRsZWQgPSB0cnVlOwogICAgIH0gZWxzZSBpZiAo
a2V5ID09ICJEb3duIikgewogICAgICAgICBpZiAoeSA9PSBEYXlzVGFibGUuX1dlZWtzIC0gMSkg
ewotICAgICAgICAgICAgaWYgKCF0aGlzLl9tYXliZVNldE5leHRNb250aCgpKQorICAgICAgICAg
ICAgaWYgKCF0aGlzLl9tYXliZVNldE5leHRNb250aChmYWxzZSkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgeSA9IDA7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAg
eSsrOwotICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbihldmVudCwgeCwgeSk7Ci0KKyAgICAg
ICAgdGhpcy5fc2VsZWN0UmFuZ2VBdFBvc2l0aW9uKHgsIHkpOworICAgICAgICBldmVudEhhbmRs
ZWQgPSB0cnVlOwogICAgIH0gZWxzZSBpZiAoa2V5ID09ICJQYWdlVXAiKSB7Ci0gICAgICAgIGlm
ICghdGhpcy5fbWF5YmVTZXRQcmV2aW91c01vbnRoKCkpCisgICAgICAgIGlmICghdGhpcy5fbWF5
YmVTZXRQcmV2aW91c01vbnRoKHRydWUpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0
aGlzLnVwZGF0ZVNlbGVjdGlvbihldmVudCwgeCwgeSk7Ci0KKyAgICAgICAgZXZlbnRIYW5kbGVk
ID0gdHJ1ZTsKICAgICB9IGVsc2UgaWYgKGtleSA9PSAiUGFnZURvd24iKSB7Ci0gICAgICAgIGlm
ICghdGhpcy5fbWF5YmVTZXROZXh0TW9udGgoKSkKKyAgICAgICAgaWYgKCF0aGlzLl9tYXliZVNl
dE5leHRNb250aCh0cnVlKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdGhpcy51cGRh
dGVTZWxlY3Rpb24oZXZlbnQsIHgsIHkpOwotCi0gICAgfSBlbHNlIGlmICh0aGlzLl9oYXNTZWxl
Y3Rpb24oKSAmJiBrZXkgPT0gIkVudGVyIikgewotICAgICAgICB2YXIgZGF5Tm9kZSA9IHRoaXMu
X2RheXNbeV1beF07Ci0gICAgICAgIGlmIChkYXlOb2RlLmNsYXNzTGlzdC5jb250YWlucyhDbGFz
c05hbWVzLkF2YWlsYWJsZSkpIHsKLSAgICAgICAgICAgIHRoaXMucGlja2VyLnN1Ym1pdFZhbHVl
KGRheU5vZGUuZGF0YXNldC5zdWJtaXRWYWx1ZSk7Ci0gICAgICAgICAgICBldmVudC5zdG9wUHJv
cGFnYXRpb24oKTsKKyAgICAgICAgZXZlbnRIYW5kbGVkID0gdHJ1ZTsKKyAgICB9IGVsc2UgaWYg
KGZpcnN0Tm9kZUluU2VsZWN0ZWRSYW5nZSAmJiBrZXkgPT0gIkVudGVyIikgeworICAgICAgICBp
ZiAoZmlyc3ROb2RlSW5TZWxlY3RlZFJhbmdlLmNsYXNzTGlzdC5jb250YWlucyhDbGFzc05hbWVz
LkF2YWlsYWJsZSkpIHsKKyAgICAgICAgICAgIHRoaXMucGlja2VyLnN1Ym1pdFZhbHVlKGZpcnN0
Tm9kZUluU2VsZWN0ZWRSYW5nZS5kYXRhc2V0LnN1Ym1pdFZhbHVlKTsKKyAgICAgICAgICAgIGV2
ZW50SGFuZGxlZCA9IHRydWU7CiAgICAgICAgIH0KLQogICAgIH0gZWxzZSBpZiAoa2V5ID09ICJV
KzAwNTQiKSB7IC8vICd0JwogICAgICAgICB0aGlzLnNlbGVjdFJhbmdlQW5kU2hvd0VudGlyZVJh
bmdlKERheS5jcmVhdGVGcm9tVG9kYXkoKSk7CisgICAgICAgIGV2ZW50SGFuZGxlZCA9IHRydWU7
CisgICAgfQorICAgIGlmIChldmVudEhhbmRsZWQpIHsKICAgICAgICAgZXZlbnQuc3RvcFByb3Bh
Z2F0aW9uKCk7CiAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgfQogfTsKIAog
LyoqCi0gKiBAcGFyYW0ge0V2ZW50fSBldmVudAotICogQHBhcmFtIHshbnVtYmVyfSB4Ci0gKiBA
cGFyYW0geyFudW1iZXJ9IHkKLSAqLwotRGF5c1RhYmxlLnByb3RvdHlwZS51cGRhdGVTZWxlY3Rp
b24gPSBmdW5jdGlvbihldmVudCwgeCwgeSkgewotICAgIHRoaXMuX3NlbGVjdFJhbmdlQXRQb3Np
dGlvbih4LCB5KTsKLSAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKLSAgICBldmVudC5wcmV2
ZW50RGVmYXVsdCgpOwotfTsKLQotLyoqCiAgKiBAY29uc3RydWN0b3IKICAqIEBwYXJhbXshQ2Fs
ZW5kYXJQaWNrZXJ9IHBpY2tlcgogICovCkBAIC0xNDQ0LDE1ICsxNjE2LDEyIEBAIE1vbnRoUGlj
a2VyRGF5c1RhYmxlLnByb3RvdHlwZS5faGFuZGxlS2V5ID0gZnVuY3Rpb24oZXZlbnQpIHsKICAg
ICB2YXIgZXZlbnRIYW5kbGVkID0gZmFsc2U7CiAgICAgdmFyIGN1cnJlbnRNb250aCA9IHRoaXMu
cGlja2VyLmN1cnJlbnRNb250aCgpOwogICAgIHZhciBmaXJzdE5vZGVJblNlbGVjdGVkUmFuZ2Ug
PSB0aGlzLl9maXJzdE5vZGVJblNlbGVjdGVkUmFuZ2UoKTsKKyAgICB2YXIgc2VsZWN0ZWRNb250
aCA9IHRoaXMuX3JhbmdlRm9yTm9kZShmaXJzdE5vZGVJblNlbGVjdGVkUmFuZ2UpOwogICAgIGlm
ICghZmlyc3ROb2RlSW5TZWxlY3RlZFJhbmdlCiAgICAgICAgICYmIChrZXkgPT0gIlJpZ2h0IiB8
fCBrZXkgPT0gIkxlZnQiIHx8IGtleSA9PSAiVXAiIHx8IGtleSA9PSAiRG93biIgfHwga2V5ID09
ICJQYWdlVXAiIHx8IGtleSA9PSAiUGFnZURvd24iKSkgewogICAgICAgICB0aGlzLnNlbGVjdFJh
bmdlKGN1cnJlbnRNb250aCk7Ci0gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwotICAg
ICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IHZhciBzZWxlY3RlZE1vbnRoID0gdGhpcy5fcmFuZ2VGb3JOb2RlKGZpcnN0Tm9kZUluU2VsZWN0
ZWRSYW5nZSk7Ci0gICAgaWYgKGtleSA9PSAoZ2xvYmFsLnBhcmFtcy5pc0NhbGVuZGFyUlRMID8g
IlJpZ2h0IiA6ICJMZWZ0IikgfHwga2V5ID09ICJVcCIgfHwga2V5ID09ICJQYWdlVXAiKSB7Cisg
ICAgICAgIGV2ZW50SGFuZGxlZCA9IHRydWU7CisgICAgfSBlbHNlIGlmIChrZXkgPT0gKGdsb2Jh
bC5wYXJhbXMuaXNDYWxlbmRhclJUTCA/ICJSaWdodCIgOiAiTGVmdCIpIHx8IGtleSA9PSAiVXAi
IHx8IGtleSA9PSAiUGFnZVVwIikgewogICAgICAgICBpZiAoc2VsZWN0ZWRNb250aC52YWx1ZU9m
KCkgPiBjdXJyZW50TW9udGgudmFsdWVPZigpKQogICAgICAgICAgICAgdGhpcy5zZWxlY3RSYW5n
ZUFuZFNob3dFbnRpcmVSYW5nZShjdXJyZW50TW9udGgpOwogICAgICAgICBlbHNlCkBAIC0xNDY0
LDkgKzE2MzMsOSBAQCBNb250aFBpY2tlckRheXNUYWJsZS5wcm90b3R5cGUuX2hhbmRsZUtleSA9
IGZ1bmN0aW9uKGV2ZW50KSB7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHRoaXMuc2VsZWN0
UmFuZ2VBbmRTaG93RW50aXJlUmFuZ2UoY3VycmVudE1vbnRoLm5leHQoKSk7CiAgICAgICAgIGV2
ZW50SGFuZGxlZCA9IHRydWU7Ci0gICAgfSBlbHNlIGlmICh0aGlzLl9oYXNTZWxlY3Rpb24oKSAm
JiBrZXkgPT0gIkVudGVyIikgewotICAgICAgICBpZiAoY3VycmVudFNlbGVjdGlvbikgewotICAg
ICAgICAgICAgdGhpcy5waWNrZXIuc3VibWl0VmFsdWUoY3VycmVudFNlbGVjdGlvbi50b1N0cmlu
ZygpKTsKKyAgICB9IGVsc2UgaWYgKHNlbGVjdGVkTW9udGggJiYga2V5ID09ICJFbnRlciIpIHsK
KyAgICAgICAgaWYgKGZpcnN0Tm9kZUluU2VsZWN0ZWRSYW5nZS5jbGFzc0xpc3QuY29udGFpbnMo
Q2xhc3NOYW1lcy5BdmFpbGFibGUpKSB7CisgICAgICAgICAgICB0aGlzLnBpY2tlci5zdWJtaXRW
YWx1ZShzZWxlY3RlZE1vbnRoLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgZXZlbnRIYW5kbGVk
ID0gdHJ1ZTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoa2V5ID09ICJVKzAwNTQiKSB7IC8v
ICd0JwpAQCAtMTQ4MCw2ICsxNjQ5LDExNiBAQCBNb250aFBpY2tlckRheXNUYWJsZS5wcm90b3R5
cGUuX2hhbmRsZUtleSA9IGZ1bmN0aW9uKGV2ZW50KSB7CiB9OwogCiAvKioKKyAqIEBjb25zdHJ1
Y3RvcgorICogQHBhcmFteyFDYWxlbmRhclBpY2tlcn0gcGlja2VyCisgKi8KK2Z1bmN0aW9uIFdl
ZWtQaWNrZXJEYXlzVGFibGUocGlja2VyKSB7CisgICAgRGF5c1RhYmxlLmNhbGwodGhpcywgcGlj
a2VyKTsKK30KK1dlZWtQaWNrZXJEYXlzVGFibGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShE
YXlzVGFibGUucHJvdG90eXBlKTsKKworLyoqCisgKiBAcGFyYW0geyFXZWVrfSB3ZWVrCisgKi8K
K1dlZWtQaWNrZXJEYXlzVGFibGUucHJvdG90eXBlLl9tYXJrUmFuZ2VBc1NlbGVjdGVkID0gZnVu
Y3Rpb24od2VlaykgeworICAgIHZhciB3ZWVrU3RyaW5nID0gd2Vlay50b1N0cmluZygpOworICAg
IGZvciAodmFyIHcgPSAwOyB3IDwgRGF5c1RhYmxlLl9XZWVrczsgdysrKSB7CisgICAgICAgIGZv
ciAodmFyIGQgPSAwOyBkIDwgNzsgZCsrKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fZGF5c1t3
XVtkXS5kYXRhc2V0LndlZWtWYWx1ZSA9PSB3ZWVrU3RyaW5nKSB7CisgICAgICAgICAgICAgICAg
dGhpcy5fZGF5c1t3XVtkXS5jbGFzc0xpc3QuYWRkKENsYXNzTmFtZXMuU2VsZWN0ZWQpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhp
cy5fd2Vla051bWJlcnMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaWYgKHRoaXMuX3dlZWtOdW1i
ZXJzW2ldLmRhdGFzZXQud2Vla1ZhbHVlID09PSB3ZWVrU3RyaW5nKSB7CisgICAgICAgICAgICB0
aGlzLl93ZWVrTnVtYmVyc1tpXS5jbGFzc0xpc3QuYWRkKENsYXNzTmFtZXMuU2VsZWN0ZWQpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9OworCisvKioKKyAqIEBwYXJh
bSB7IVdlZWt9IHdlZWsKKyAqLworV2Vla1BpY2tlckRheXNUYWJsZS5wcm90b3R5cGUuc2VsZWN0
UmFuZ2UgPSBmdW5jdGlvbih3ZWVrKSB7CisgICAgdGhpcy5fZGVzZWxlY3QoKTsKKyAgICB2YXIg
d2Vla1N0YXJ0RGF0ZSA9IHdlZWsuc3RhcnREYXRlKCk7CisgICAgdmFyIHdlZWtFbmREYXRlID0g
d2Vlay5lbmREYXRlKCk7CisgICAgaWYgKHRoaXMuc3RhcnREYXRlKCkgPj0gd2Vla0VuZERhdGUp
CisgICAgICAgIHRoaXMucGlja2VyLnNob3dNb250aChNb250aC5jcmVhdGVGcm9tRGF0ZSh3ZWVr
RW5kRGF0ZSksIHRydWUpOworICAgIGVsc2UgaWYgKHRoaXMuZW5kRGF0ZSgpIDw9IHdlZWtTdGFy
dERhdGUpCisgICAgICAgIHRoaXMucGlja2VyLnNob3dNb250aChNb250aC5jcmVhdGVGcm9tRGF0
ZSh3ZWVrU3RhcnREYXRlKSwgdHJ1ZSk7CisgICAgdGhpcy5fbWFya1JhbmdlQXNTZWxlY3RlZCh3
ZWVrKTsKK307CisKKy8qKgorICogQHBhcmFtIHshV2Vla30gd2VlaworICovCitXZWVrUGlja2Vy
RGF5c1RhYmxlLnByb3RvdHlwZS5zZWxlY3RSYW5nZUFuZFNob3dFbnRpcmVSYW5nZSA9IGZ1bmN0
aW9uKHdlZWspIHsKKyAgICB0aGlzLl9kZXNlbGVjdCgpOworICAgIHZhciB3ZWVrU3RhcnREYXRl
ID0gd2Vlay5zdGFydERhdGUoKTsKKyAgICB2YXIgd2Vla0VuZERhdGUgPSB3ZWVrLmVuZERhdGUo
KTsKKyAgICBpZiAodGhpcy5zdGFydERhdGUoKSA+IHdlZWtTdGFydERhdGUpCisgICAgICAgIHRo
aXMucGlja2VyLnNob3dNb250aChNb250aC5jcmVhdGVGcm9tRGF0ZSh3ZWVrU3RhcnREYXRlKSwg
dHJ1ZSk7CisgICAgZWxzZSBpZiAodGhpcy5lbmREYXRlKCkgPCB3ZWVrRW5kRGF0ZSkKKyAgICAg
ICAgdGhpcy5waWNrZXIuc2hvd01vbnRoKE1vbnRoLmNyZWF0ZUZyb21EYXRlKHdlZWtFbmREYXRl
KSwgdHJ1ZSk7CisgICAgdGhpcy5fbWFya1JhbmdlQXNTZWxlY3RlZCh3ZWVrKTsKK307CisKKy8q
KgorICogQHBhcmFtIHshRWxlbWVudH0gZGF5Tm9kZQorICogQHJldHVybiB7P1dlZWt9CisgKi8K
K1dlZWtQaWNrZXJEYXlzVGFibGUucHJvdG90eXBlLl9yYW5nZUZvck5vZGUgPSBmdW5jdGlvbihk
YXlOb2RlKSB7CisgICAgaWYgKCFkYXlOb2RlKQorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICBy
ZXR1cm4gV2Vlay5wYXJzZShkYXlOb2RlLmRhdGFzZXQud2Vla1ZhbHVlKTsKK307CisKKy8qKgor
ICogQHBhcmFtIHshRXZlbnR9IGV2ZW50CisgKi8KK1dlZWtQaWNrZXJEYXlzVGFibGUucHJvdG90
eXBlLl9oYW5kbGVLZXkgPSBmdW5jdGlvbihldmVudCkgeworICAgIHRoaXMucGlja2VyLm1heWJl
VXBkYXRlRm9jdXNTdHlsZSgpOworICAgIHZhciBrZXkgPSBldmVudC5rZXlJZGVudGlmaWVyOwor
ICAgIHZhciBldmVudEhhbmRsZWQgPSBmYWxzZTsKKyAgICB2YXIgY3VycmVudE1vbnRoID0gdGhp
cy5waWNrZXIuY3VycmVudE1vbnRoKCk7CisgICAgdmFyIGZpcnN0Tm9kZUluU2VsZWN0ZWRSYW5n
ZSA9IHRoaXMuX2ZpcnN0Tm9kZUluU2VsZWN0ZWRSYW5nZSgpOworICAgIHZhciBzZWxlY3RlZFdl
ZWsgPSB0aGlzLl9yYW5nZUZvck5vZGUoZmlyc3ROb2RlSW5TZWxlY3RlZFJhbmdlKTsKKyAgICBp
ZiAoIWZpcnN0Tm9kZUluU2VsZWN0ZWRSYW5nZQorICAgICAgICAmJiAoa2V5ID09ICJSaWdodCIg
fHwga2V5ID09ICJMZWZ0IiB8fCBrZXkgPT0gIlVwIiB8fCBrZXkgPT0gIkRvd24iIHx8IGtleSA9
PSAiUGFnZVVwIiB8fCBrZXkgPT0gIlBhZ2VEb3duIikpIHsKKyAgICAgICAgLy8gUHV0IHRoZSBz
ZWxlY3Rpb24gb24gYSBjZW50ZXIgY2VsbC4KKyAgICAgICAgdGhpcy5fc2VsZWN0UmFuZ2VBdFBv
c2l0aW9uKDMsIE1hdGguZmxvb3IoRGF5c1RhYmxlLl9XZWVrcyAvIDIgLSAxKSk7CisgICAgfSBl
bHNlIGlmIChrZXkgPT0gKGdsb2JhbC5wYXJhbXMuaXNDYWxlbmRhclJUTCA/ICJSaWdodCIgOiAi
TGVmdCIpIHx8IGtleSA9PSAiVXAiKSB7CisgICAgICAgIHRoaXMuc2VsZWN0UmFuZ2VBbmRTaG93
RW50aXJlUmFuZ2Uoc2VsZWN0ZWRXZWVrLnByZXZpb3VzKCkpOworICAgICAgICBldmVudEhhbmRs
ZWQgPSB0cnVlOworICAgIH0gZWxzZSBpZiAoa2V5ID09IChnbG9iYWwucGFyYW1zLmlzQ2FsZW5k
YXJSVEwgPyAiTGVmdCIgOiAiUmlnaHQiKSB8fCBrZXkgPT0gIkRvd24iKSB7CisgICAgICAgIHRo
aXMuc2VsZWN0UmFuZ2VBbmRTaG93RW50aXJlUmFuZ2Uoc2VsZWN0ZWRXZWVrLm5leHQoKSk7Cisg
ICAgICAgIGV2ZW50SGFuZGxlZCA9IHRydWU7CisgICAgfSBlbHNlIGlmIChrZXkgPT0gIlBhZ2VV
cCIpIHsKKyAgICAgICAgaWYgKCF0aGlzLl9tYXliZVNldFByZXZpb3VzTW9udGgodHJ1ZSkpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIGV2ZW50SGFuZGxlZCA9IHRydWU7CisgICAgfSBl
bHNlIGlmIChrZXkgPT0gIlBhZ2VEb3duIikgeworICAgICAgICBpZiAoIXRoaXMuX21heWJlU2V0
TmV4dE1vbnRoKHRydWUpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBldmVudEhhbmRs
ZWQgPSB0cnVlOworICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWRXZWVrICYmIGtleSA9PSAiRW50ZXIi
KSB7CisgICAgICAgIGlmIChmaXJzdE5vZGVJblNlbGVjdGVkUmFuZ2UuY2xhc3NMaXN0LmNvbnRh
aW5zKENsYXNzTmFtZXMuQXZhaWxhYmxlKSkgeworICAgICAgICAgICAgdGhpcy5waWNrZXIuc3Vi
bWl0VmFsdWUoc2VsZWN0ZWRXZWVrLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgZXZlbnRIYW5k
bGVkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoa2V5ID09ICJVKzAwNTQiKSB7
IC8vICd0JworICAgICAgICB0aGlzLnNlbGVjdFJhbmdlQW5kU2hvd0VudGlyZVJhbmdlKFdlZWsu
Y3JlYXRlRnJvbVRvZGF5KCkpOworICAgICAgICBldmVudEhhbmRsZWQgPSB0cnVlOworICAgIH0K
KyAgICBpZiAoZXZlbnRIYW5kbGVkKSB7CisgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigp
OworICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworICAgIH0KK307CisKKy8qKgogICog
QHBhcmFtIHshRXZlbnR9IGV2ZW50CiAgKi8KIENhbGVuZGFyUGlja2VyLnByb3RvdHlwZS5faGFu
ZGxlQm9keUtleURvd24gPSBmdW5jdGlvbihldmVudCkgewpkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9n
IGIvQ2hhbmdlTG9nCmluZGV4IGYzZDE2NDRiNWJhODNkMDdhOGEyZjMyNTBkMGJlNjhlZjA0YmNh
MzcuLmViODQ5YjBiYzA1NDVjNWY4NjNjMTM3MGI3OWE3MDlhZmM4ZWMxODYgMTAwNjQ0Ci0tLSBh
L0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAxMi0xMS0wNyAg
S2Vpc2hpIEhhdHRvcmkgIDxrZWlzaGlAd2Via2l0Lm9yZz4KKworICAgICAgICBJbXBsZW1lbnQg
d2VlayBwaWNraW5nIHRvIGNhbGVuZGFyIHBpY2tlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAxNDQ5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBNYW51YWxUZXN0cy9mb3Jtcy9jYWxlbmRhci1waWNr
ZXIuaHRtbDogQWRkZWQgd2VlayBwaWNrZXIgdGVzdC4KKwogMjAxMi0xMS0wNiAgS2Vpc2hpIEhh
dHRvcmkgIDxrZWlzaGlAd2Via2l0Lm9yZz4KIAogICAgICAgICBJbXBsZW1lbnQgbW9udGggcGlj
a2luZyB0byBjYWxlbmRhciBwaWNrZXIKZGlmZiAtLWdpdCBhL01hbnVhbFRlc3RzL2Zvcm1zL2Nh
bGVuZGFyLXBpY2tlci5odG1sIGIvTWFudWFsVGVzdHMvZm9ybXMvY2FsZW5kYXItcGlja2VyLmh0
bWwKaW5kZXggNTUyMDdlNGQzZGI3NTE4ZTFiOGY1NmZiZTA4MDIxYjU0ZjI2OGJkYy4uNzkwYzNk
NTVhYWE5Nzk5NWNmOTM2NDIxMjk1M2QyMjc3YTEzNDQ1ZiAxMDA2NDQKLS0tIGEvTWFudWFsVGVz
dHMvZm9ybXMvY2FsZW5kYXItcGlja2VyLmh0bWwKKysrIGIvTWFudWFsVGVzdHMvZm9ybXMvY2Fs
ZW5kYXItcGlja2VyLmh0bWwKQEAgLTI3LDYgKzI3LDcgQEAgaWZyYW1lIHsKICA8b3B0aW9uPndp
dGggbG9uZyBkYXRhbGlzdDwvb3B0aW9uPgogIDxvcHRpb24+QXJhYmljIHdpdGggZGF0YWxpc3Q8
L29wdGlvbj4KICA8b3B0aW9uPkFyYWJpYyB3aXRoIGxvbmcgZGF0YWxpc3Q8L29wdGlvbj4KKyA8
b3B0aW9uPldlZWs8L29wdGlvbj4KICA8b3B0aW9uPk1vbnRoPC9vcHRpb24+CiA8L3NlbGVjdD4K
IApAQCAtMjM5LDYgKzI0MCwyMiBAQCB2YXIgYXJhYmljTG9uZ0RhdGFsaXN0QXJndW1lbnRzID0g
ewogICAgIHN1Z2dlc3Rpb25IaWdobGlnaHRDb2xvcjogIiMwMDAwZmYiLAogICAgIHN1Z2dlc3Rp
b25IaWdobGlnaHRUZXh0Q29sb3I6ICIjZmZmZmZmIgogfTsKK3ZhciB3ZWVrQXJndW1lbnRzID0g
eworICAgIGxvY2FsZTogJ2VuLVVTJywKKyAgICBtb250aExhYmVscyA6IFsnSmFudWFyeScsICdG
ZWJydWFyeScsICdNYXJjaCcsICdBcHJpbCcsICdNYXknLCAnSnVuZScsCisgICAgJ0p1bHknLCAn
QXVndXN0JywgJ1NlcHRlbWJlcicsICdPY3RvYmVyJywgJ05vdmVtYmVyJywgJ0RlY2VtYmVyJ10s
CisgICAgZGF5TGFiZWxzIDogWydTdW4nLCAnTW9uJywgJ1R1ZScsICdXZWQnLCAnVGh1JywgJ0Zy
aScsICdTYXQnXSwKKyAgICB0b2RheUxhYmVsIDogJ1RoaXMgV2VlaycsCisgICAgY2xlYXJMYWJl
bCA6ICdDbGVhcicsCisgICAgY2FuY2VsTGFiZWwgOiAnQ2FuY2VsJywKKyAgICB3ZWVrTGFiZWw6
ICdXZWVrJywKKyAgICB3ZWVrU3RhcnREYXkgOiAwLAorICAgIHN0ZXAgOiAiNjA0ODAwMDAwIiwK
KyAgICBzdGVwQmFzZTogIi0yNTkyMDAwMDAiLAorICAgIGN1cnJlbnRWYWx1ZSA6ICcyMDAwLVcw
MScsCisgICAgbWF4IDogJzIwOTktVzAzJywKKyAgICBtb2RlOiAid2VlayIKK307CiB2YXIgbW9u
dGhBcmd1bWVudHMgPSB7CiAgICAgbG9jYWxlOiAnZW4tVVMnLAogICAgIG1vbnRoTGFiZWxzIDog
WydKYW51YXJ5JywgJ0ZlYnJ1YXJ5JywgJ01hcmNoJywgJ0FwcmlsJywgJ01heScsICdKdW5lJywK
QEAgLTMyNyw2ICszNDQsOSBAQCBmdW5jdGlvbiBzZWxlY3RlZChzZWxlY3QpIHsKICAgICAgICAg
b3BlbkNhbGVuZGFyKGFyYWJpY0xvbmdEYXRhbGlzdEFyZ3VtZW50cyk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgNzoKKyAgICAgICAgb3BlbkNhbGVuZGFyKHdlZWtBcmd1bWVudHMpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIDg6CiAgICAgICAgIG9wZW5DYWxlbmRhcihtb250aEFyZ3Vt
ZW50cyk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>172924</attachid>
            <date>2012-11-07 20:49:22 -0800</date>
            <delta_ts>2012-11-07 21:24:01 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101449-20121108134731.patch</filename>
            <type>text/plain</type>
            <size>38908</size>
            <attacher name="Keishi Hattori">keishi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMzNzIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjI2MzdkZDI0ZjcxOWMz
MmFlYmQ0OWNjYjkyNmMzNmU4ZWY2ZWY4Ni4uNDAyOGVlNmNkYzA4ZjliNjgzZTQ0MTg0NDk2NDEz
ZTBmY2E0OTM5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyIEBACisyMDEyLTExLTA4ICBLZWlz
aGkgSGF0dG9yaSAgPGtlaXNoaUB3ZWJraXQub3JnPgorCisgICAgICAgIEltcGxlbWVudCB3ZWVr
IHBpY2tpbmcgdG8gY2FsZW5kYXIgcGlja2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMDE0NDkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUaGlzIGFkZHMgd2VlayBwaWNrZXIgbW9kZSB0byBDYWxlbmRh
clBpY2tlci4KKworICAgICAgICBObyBuZXcgdGVzdHMuIFRlc3RzIHdpbGwgYmUgYWRkZWQgbGF0
ZXIgd2hlbiB0aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCBpbiBEUlQuCisKKyAgICAgICAgKiBSZXNv
dXJjZXMvcGFnZXBvcHVwcy9jYWxlbmRhclBpY2tlci5jc3M6CisgICAgICAgICgubW9udGgtbW9k
ZSAuZGF5KToKKyAgICAgICAgKC53ZWVrLW1vZGUgLmF2YWlsYWJsZS5kYXktc2VsZWN0ZWQubW9u
ZGF5KTogUm91bmRlZCBjb3JuZXJzIGFyb3VuZCB3ZWVrIHNlbGVjdGlvbi4KKyAgICAgICAgKC53
ZWVrLW1vZGUgLmF2YWlsYWJsZS5kYXktc2VsZWN0ZWQuc3VuZGF5KTogRGl0dG8uCisgICAgICAg
ICgud2Vlay1tb2RlIC51bmF2YWlsYWJsZS5kYXktc2VsZWN0ZWQpOgorICAgICAgICAoLndlZWst
bW9kZSAudW5hdmFpbGFibGUuZGF5LXNlbGVjdGVkLm1vbmRheSk6CisgICAgICAgICgud2Vlay1t
b2RlIC51bmF2YWlsYWJsZS5kYXktc2VsZWN0ZWQuc3VuZGF5KToKKyAgICAgICAgKC53ZWVrLW1v
ZGUgLndlZWstY29sdW1uLnVuYXZhaWxhYmxlLmRheS1zZWxlY3RlZCk6CisgICAgICAgICgud2Vl
ay1jb2x1bW4pOiBIaWRlIHdlZWsgY29sdW1uIHVubGVzcyBpbiB3ZWVrIG1vZGUuCisgICAgICAg
ICgud2Vlay1tb2RlIC53ZWVrLWNvbHVtbik6CisgICAgICAgICogUmVzb3VyY2VzL3BhZ2Vwb3B1
cHMvY2FsZW5kYXJQaWNrZXIuanM6CisgICAgICAgIChwYXJzZURhdGVTdHJpbmcpOiBTdXBwb3J0
IHdlZWsgc3RyaW5nLgorICAgICAgICAoV2Vlayk6CisgICAgICAgIChXZWVrLnBhcnNlKTogUGFy
c2VzICJ5eXl5LVd3dyIgc3RyaW5nLgorICAgICAgICAoV2Vlay5jcmVhdGVGcm9tRGF0ZSk6IENy
ZWF0ZXMgV2VlayBjb250YWluaW5nIGRhdGV0aW1lLgorICAgICAgICAoV2Vlay5jcmVhdGVGcm9t
VG9kYXkpOiBDcmVhdGVzIFdlZWsgY29udGFpbmluZyB0b2RheS4KKyAgICAgICAgKFdlZWsud2Vl
a09uZVN0YXJ0RGF0ZUZvclllYXIpOiBSZXR1cm5zIHRoZSBzdGFydCBkYXRlIGZvciB0aGUgZmly
c3Qgd2VlayBvZiB5ZWFyLgorICAgICAgICAoV2Vlay5udW1iZXJPZldlZWtzSW5ZZWFyKTogUmV0
dXJucyB0aGUgbnVtYmVyIG9mIHdlZWtzIGluIHllYXIuCisgICAgICAgIChXZWVrLl9udW1iZXJP
ZldlZWtzU2luY2VEYXRlKTogUmV0dXJucyBudW1iZXIgb2Ygd2Vla3Mgc2luY2UgYSBkYXRlLgor
ICAgICAgICAoV2Vlay5wcm90b3R5cGUuZXF1YWxzKTogUmV0dXJucyB0cnVlIGlmIHRoZSBXZWVr
cyBhcmUgdGhlIHNhbWUuCisgICAgICAgIChXZWVrLnByb3RvdHlwZS5wcmV2aW91cyk6IFJldHVy
bnMgdGhlIHByZXZpb3VzIFdlZWsuCisgICAgICAgIChXZWVrLnByb3RvdHlwZS5uZXh0KTogUmV0
dXJucyB0aGUgbmV4dCBXZWVrLgorICAgICAgICAoV2Vlay5wcm90b3R5cGUuc3RhcnREYXRlKTog
UmV0dXJucyBzdGFydCBkYXRldGltZSBvZiBXZWVrLgorICAgICAgICAoV2Vlay5wcm90b3R5cGUu
ZW5kRGF0ZSk6IFJldHVybnMgZW5kIGRhdGV0aW1lIG9mIFdlZWsuCisgICAgICAgIChXZWVrLnBy
b3RvdHlwZS52YWx1ZU9mKTogUmV0dXJucyB0aGUgbWlsbGlzZWNvbmRzIHNpbmNlIGVwb2NoLgor
ICAgICAgICAoV2Vlay5wcm90b3R5cGUudG9TdHJpbmcpOiBSZXR1cm5zIElTTyB3ZWVrIHN0cmlu
Zy4KKyAgICAgICAgKENhbGVuZGFyUGlja2VyKTogQWRkIHdlZWsgcGlja2VyIG1vZGUuCisgICAg
ICAgIChDYWxlbmRhclBpY2tlci5wcm90b3R5cGUuc2hvd01vbnRoKTogVXNlIE5hdmlnYXRpb25C
ZWhhdmlvdXIgaW5zdGVhZCBvZiBib29scy4KKyAgICAgICAgKFllYXJNb250aENvbnRyb2xsZXIu
cHJvdG90eXBlLmF0dGFjaFRvKTogRml4IGJ1Zy4KKyAgICAgICAgKFllYXJNb250aENvbnRyb2xs
ZXIucHJvdG90eXBlLm1vdmVSZWxhdGl2ZWx5KTogVXNlIG5ldyBzaG93TW9udGguCisgICAgICAg
IChEYXlzVGFibGUucHJvdG90eXBlLmF0dGFjaFRvKTogQWRkIHdlZWsgbnVtYmVyIGNvbHVtbi4K
KyAgICAgICAgKERheXNUYWJsZS5wcm90b3R5cGUuX3JlbmRlck1vbnRoKTogUmVuZGVyIHdlZWsg
bnVtYmVycy4KKyAgICAgICAgKERheXNUYWJsZS5wcm90b3R5cGUubmF2aWdhdGVUb01vbnRoKTog
UmVuZGVyIHdlZWsgbnVtYmVycy4KKyAgICAgICAgKERheXNUYWJsZS5wcm90b3R5cGUuc2VsZWN0
UmFuZ2UpOgorICAgICAgICAoRGF5c1RhYmxlLnByb3RvdHlwZS5fc2VsZWN0UmFuZ2VBdFBvc2l0
aW9uKTogV2VlayBudW1iZXIgbm9kZXMgaGF2ZSBhbiBwb3NpdGlvblggb2YgLTEuCisgICAgICAg
IChEYXlzVGFibGUucHJvdG90eXBlLl9tYXliZVNldFByZXZpb3VzTW9udGgpOgorICAgICAgICAo
RGF5c1RhYmxlLnByb3RvdHlwZS5fbWF5YmVTZXROZXh0TW9udGgpOgorICAgICAgICAoRGF5c1Rh
YmxlLnByb3RvdHlwZS5faGFuZGxlS2V5KToKKyAgICAgICAgKE1vbnRoUGlja2VyRGF5c1RhYmxl
LnByb3RvdHlwZS5zZWxlY3RSYW5nZSk6CisgICAgICAgIChNb250aFBpY2tlckRheXNUYWJsZS5w
cm90b3R5cGUuc2VsZWN0UmFuZ2VBbmRTaG93RW50aXJlUmFuZ2UpOgorICAgICAgICAoTW9udGhQ
aWNrZXJEYXlzVGFibGUucHJvdG90eXBlLl9oYW5kbGVLZXkpOgorICAgICAgICAoV2Vla1BpY2tl
ckRheXNUYWJsZSk6IEFkZGVkLgorICAgICAgICAoV2Vla1BpY2tlckRheXNUYWJsZS5wcm90b3R5
cGUuX21hcmtSYW5nZUFzU2VsZWN0ZWQpOiBNYXJrcyB3ZWVrIGFzIHNlbGVjdGVkLgorICAgICAg
ICAoV2Vla1BpY2tlckRheXNUYWJsZS5wcm90b3R5cGUuc2VsZWN0UmFuZ2UpOiBTZWxlY3RzIHdl
ZWsuCisgICAgICAgIChXZWVrUGlja2VyRGF5c1RhYmxlLnByb3RvdHlwZS5zZWxlY3RSYW5nZUFu
ZFNob3dFbnRpcmVSYW5nZSk6IFNlbGVjdHMgd2VlayBhbmQgbmF2aWdhdGUgdG8gc2hvdyBlbnRp
cmUgc2VsZWN0aW9uLgorICAgICAgICAoV2Vla1BpY2tlckRheXNUYWJsZS5wcm90b3R5cGUuX3Jh
bmdlRm9yTm9kZSk6IFJldHVybnMgV2VlayBmb3Igbm9kZS4KKyAgICAgICAgKFdlZWtQaWNrZXJE
YXlzVGFibGUucHJvdG90eXBlLl9oYW5kbGVLZXkpOgorCiAyMDEyLTExLTA2ICBLZWlzaGkgSGF0
dG9yaSAgPGtlaXNoaUB3ZWJraXQub3JnPgogCiAgICAgICAgIEltcGxlbWVudCBtb250aCBwaWNr
aW5nIHRvIGNhbGVuZGFyIHBpY2tlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUmVzb3Vy
Y2VzL3BhZ2Vwb3B1cHMvY2FsZW5kYXJQaWNrZXIuY3NzIGIvU291cmNlL1dlYkNvcmUvUmVzb3Vy
Y2VzL3BhZ2Vwb3B1cHMvY2FsZW5kYXJQaWNrZXIuY3NzCmluZGV4IGNhMWRiYjIyNWVmMDBmMWY1
MWM0ZDIxMWQzOTgwZDFlM2Q5ZmZkODcuLmMyMmUzOTY3NjE0YmU0ZTg1YjdhMWYwYzJkZDNlMDU3
ZWJhOGFiYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1Jlc291cmNlcy9wYWdlcG9wdXBz
L2NhbGVuZGFyUGlja2VyLmNzcworKysgYi9Tb3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMvcGFnZXBv
cHVwcy9jYWxlbmRhclBpY2tlci5jc3MKQEAgLTIyNSw4ICsyMjUsNTEgQEAgYm9keSB7CiAgICAg
LXdlYmtpdC10cmFuc2l0aW9uOiBub25lOwogfQogCisud2Vlay1tb2RlIC5kYXksCiAubW9udGgt
bW9kZSAuZGF5IHsKICAgICAtd2Via2l0LXRyYW5zaXRpb246IG5vbmU7CiAgICAgYm9yZGVyLXJh
ZGl1czogMDsKLSAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKKyAgICBib3JkZXI6
IG5vbmU7CisgICAgcGFkZGluZzogMnB4OworfQorCisud2Vlay1tb2RlIC5hdmFpbGFibGUuZGF5
LXNlbGVjdGVkLm1vbmRheSB7CisgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogNXB4OworICAg
IGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDVweDsKK30KKworLndlZWstbW9kZSAuYXZhaWxh
YmxlLmRheS1zZWxlY3RlZC5zdW5kYXkgeworICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiA1
cHg7CisgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDVweDsKK30KKworLndlZWstbW9k
ZSAudW5hdmFpbGFibGUuZGF5LXNlbGVjdGVkIHsKKyAgICBwYWRkaW5nOiAxcHggMnB4OworICAg
IGJvcmRlci10b3A6IDFweCBzb2xpZCBoaWdobGlnaHQ7CisgICAgYm9yZGVyLWJvdHRvbTogMXB4
IHNvbGlkIGhpZ2hsaWdodDsKK30KKworLndlZWstbW9kZSAudW5hdmFpbGFibGUuZGF5LXNlbGVj
dGVkLm1vbmRheSB7CisgICAgcGFkZGluZy1sZWZ0OiAxcHg7CisgICAgYm9yZGVyLWxlZnQ6IDFw
eCBzb2xpZCBoaWdobGlnaHQ7Cit9CisKKy53ZWVrLW1vZGUgLnVuYXZhaWxhYmxlLmRheS1zZWxl
Y3RlZC5zdW5kYXkgeworICAgIHBhZGRpbmctcmlnaHQ6IDFweDsKKyAgICBib3JkZXItcmlnaHQ6
IDFweCBzb2xpZCBoaWdobGlnaHQ7Cit9CisKKy53ZWVrLW1vZGUgLndlZWstY29sdW1uLnVuYXZh
aWxhYmxlLmRheS1zZWxlY3RlZCB7CisgIHBhZGRpbmc6IDFweDsKKyAgYm9yZGVyOiAxcHggc29s
aWQgaGlnaGxpZ2h0OworfQorCisud2Vlay1jb2x1bW4geworICAgIGRpc3BsYXk6IG5vbmU7Cit9
CisKKy53ZWVrLW1vZGUgLndlZWstY29sdW1uIHsKKyAgICBkaXNwbGF5OiBibG9jazsKKyAgICBi
b3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjOTk5OworICAgIHBhZGRpbmctcmlnaHQ6IDFweDsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1Jlc291cmNlcy9wYWdlcG9wdXBzL2NhbGVuZGFy
UGlja2VyLmpzIGIvU291cmNlL1dlYkNvcmUvUmVzb3VyY2VzL3BhZ2Vwb3B1cHMvY2FsZW5kYXJQ
aWNrZXIuanMKaW5kZXggOThjYjdkZTM5NjMyNDliMjg2NDUzMDQ4ZTBmZjdkYjZkYWMzZDAzYi4u
NWIyYjIwMjk3MWMyYWNlMTAxMDQ5MzVjNzkxYTVhNWVkMmE4M2I0NCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvUmVzb3VyY2VzL3BhZ2Vwb3B1cHMvY2FsZW5kYXJQaWNrZXIuanMKKysrIGIv
U291cmNlL1dlYkNvcmUvUmVzb3VyY2VzL3BhZ2Vwb3B1cHMvY2FsZW5kYXJQaWNrZXIuanMKQEAg
LTQ2LDYgKzQ2LDcgQEAgdmFyIENsYXNzTmFtZXMgPSB7CiAgICAgRGF5TGFiZWxDb250YWluZXI6
ICJkYXktbGFiZWwtY29udGFpbmVyIiwKICAgICBEYXlzQXJlYTogImRheXMtYXJlYSIsCiAgICAg
RGF5c0FyZWFDb250YWluZXI6ICJkYXlzLWFyZWEtY29udGFpbmVyIiwKKyAgICBNb25kYXk6ICJt
b25kYXkiLAogICAgIE1vbnRoTW9kZTogIm1vbnRoLW1vZGUiLAogICAgIE1vbnRoU2VsZWN0b3I6
ICJtb250aC1zZWxlY3RvciIsCiAgICAgTW9udGhTZWxlY3RvckJveDogIm1vbnRoLXNlbGVjdG9y
LWJveCIsCkBAIC01NywxMCArNTgsMTMgQEAgdmFyIENsYXNzTmFtZXMgPSB7CiAgICAgTm90VGhp
c01vbnRoOiAibm90LXRoaXMtbW9udGgiLAogICAgIFNlbGVjdGVkOiAiZGF5LXNlbGVjdGVkIiwK
ICAgICBTZWxlY3RlZE1vbnRoWWVhcjogInNlbGVjdGVkLW1vbnRoLXllYXIiLAorICAgIFN1bmRh
eTogInN1bmRheSIsCiAgICAgVG9kYXlCdXR0b246ICJ0b2RheS1idXR0b24iLAogICAgIFRvZGF5
Q2xlYXJBcmVhOiAidG9kYXktY2xlYXItYXJlYSIsCiAgICAgVW5hdmFpbGFibGU6ICJ1bmF2YWls
YWJsZSIsCiAgICAgV2Vla0NvbnRhaW5lcjogIndlZWstY29udGFpbmVyIiwKKyAgICBXZWVrQ29s
dW1uOiAid2Vlay1jb2x1bW4iLAorICAgIFdlZWtNb2RlOiAid2Vlay1tb2RlIiwKICAgICBZZWFy
TW9udGhBcmVhOiAieWVhci1tb250aC1hcmVhIiwKICAgICBZZWFyTW9udGhCdXR0b246ICJ5ZWFy
LW1vbnRoLWJ1dHRvbiIsCiAgICAgWWVhck1vbnRoQnV0dG9uTGVmdDogInllYXItbW9udGgtYnV0
dG9uLWxlZnQiLApAQCAtMTg1LDEyICsxODksMTUgQEAgZnVuY3Rpb24gY3JlYXRlVVRDRGF0ZSh5
ZWFyLCBtb250aCwgZGF0ZSkgewogCiAvKioKICAqIEBwYXJhbSB7c3RyaW5nfSBkYXRlU3RyaW5n
Ci0gKiBAcmV0dXJuIHs/RGF5fE1vbnRofQorICogQHJldHVybiB7P0RheXxXZWVrfE1vbnRofQog
ICovCiBmdW5jdGlvbiBwYXJzZURhdGVTdHJpbmcoZGF0ZVN0cmluZykgewogICAgIHZhciBtb250
aCA9IE1vbnRoLnBhcnNlKGRhdGVTdHJpbmcpOwogICAgIGlmIChtb250aCkKICAgICAgICAgcmV0
dXJuIG1vbnRoOworICAgIHZhciB3ZWVrID0gV2Vlay5wYXJzZShkYXRlU3RyaW5nKTsKKyAgICBp
ZiAod2VlaykKKyAgICAgICAgcmV0dXJuIHdlZWs7CiAgICAgcmV0dXJuIERheS5wYXJzZShkYXRl
U3RyaW5nKTsKIH0KIApAQCAtMjE0LDEwICsyMjEsNiBAQCBmdW5jdGlvbiBEYXkodmFsdWVPckRh
eU9yWWVhciwgbW9udGgsIGRhdGUpIHsKIAogRGF5LklTT1N0cmluZ1JlZ0V4cCA9IC9eKFxkKykt
KFxkKyktKFxkKykkLzsKIAotLy8gU2VlIFdlYkNvcmUvcGxhdGZvcm0vRGF0ZUNvbXBvbmVudHMu
aC4KLURheS5NaW5pbXVtID0gbmV3IERheSgtNjIxMzU1OTY4MDAwMDAuMCk7Ci1EYXkuTWF4aW11
bSA9IG5ldyBEYXkoODY0MDAwMDAwMDAwMDAwMC4wKTsKLQogLyoqCiAgKiBAcGFyYW0geyFzdHJp
bmd9IHN0cgogICogQHJldHVybiB7P01vbnRofQpAQCAtMjM0LDE0ICsyMzcsMTQgQEAgRGF5LnBh
cnNlID0gZnVuY3Rpb24oc3RyKSB7CiAKIC8qKgogICogQHBhcmFtIHshRGF0ZX0gZGF0ZQotICog
QHJldHVybiB7IU1vbnRofQorICogQHJldHVybiB7IURheX0KICAqLwogRGF5LmNyZWF0ZUZyb21E
YXRlID0gZnVuY3Rpb24oZGF0ZSkgewogICAgIHJldHVybiBuZXcgRGF5KGRhdGUuZ2V0VVRDRnVs
bFllYXIoKSwgZGF0ZS5nZXRVVENNb250aCgpLCBkYXRlLmdldFVUQ0RhdGUoKSk7CiB9OwogCiAv
KioKLSAqIEByZXR1cm4geyFNb250aH0KKyAqIEByZXR1cm4geyFEYXl9CiAgKi8KIERheS5jcmVh
dGVGcm9tVG9kYXkgPSBmdW5jdGlvbigpIHsKICAgICB2YXIgbm93ID0gbmV3IERhdGUoKTsKQEAg
LTMwMSw2ICszMDQsMTcyIEBAIERheS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsK
ICAgICByZXR1cm4geWVhclN0cmluZyArICItIiArICgiMCIgKyAodGhpcy5tb250aCArIDEpKS5z
dWJzdHIoLTIsIDIpICsgIi0iICsgKCIwIiArIHRoaXMuZGF0ZSkuc3Vic3RyKC0yLCAyKTsKIH07
CiAKKy8vIFNlZSBXZWJDb3JlL3BsYXRmb3JtL0RhdGVDb21wb25lbnRzLmguCitEYXkuTWluaW11
bSA9IG5ldyBEYXkoLTYyMTM1NTk2ODAwMDAwLjApOworRGF5Lk1heGltdW0gPSBuZXcgRGF5KDg2
NDAwMDAwMDAwMDAwMDAuMCk7CisvLyBTZWUgV2ViQ29yZS9odG1sL0RheUlucHV0VHlwZS5jcHAu
CitEYXkuRGVmYXVsdFN0ZXAgPSA4NjQwMDAwMDsKK0RheS5EZWZhdWx0U3RlcEJhc2UgPSAwOwor
CisvKioKKyAqIEBjb25zdHJ1Y3RvcgorICogQHBhcmFtIHshbnVtYmVyfFdlZWt9IHZhbHVlT3JX
ZWVrT3JZZWFyCisgKiBAcGFyYW0geyFudW1iZXI9fSB3ZWVrCisgKi8KK2Z1bmN0aW9uIFdlZWso
dmFsdWVPcldlZWtPclllYXIsIHdlZWspIHsKKyAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0g
MikgeworICAgICAgICB0aGlzLnllYXIgPSB2YWx1ZU9yV2Vla09yWWVhcjsKKyAgICAgICAgdGhp
cy53ZWVrID0gd2VlazsKKyAgICAgICAgLy8gTnVtYmVyIG9mIHllYXJzIHBlciB5ZWFyIGlzIGVp
dGhlciA1MiBvciA1My4KKyAgICAgICAgaWYgKHRoaXMud2VlayA8IDEgfHwgKHRoaXMud2VlayA+
IDUyICYmIHRoaXMud2VlayA+IFdlZWsubnVtYmVyT2ZXZWVrc0luWWVhcih0aGlzLnllYXIpKSkg
eworICAgICAgICAgICAgdmFyIG5vcm1hbGl6ZWRXZWVrID0gV2Vlay5jcmVhdGVGcm9tRGF0ZSh0
aGlzLnN0YXJ0RGF0ZSgpKTsKKyAgICAgICAgICAgIHRoaXMueWVhciA9IG5vcm1hbGl6ZWRXZWVr
LnllYXI7CisgICAgICAgICAgICB0aGlzLndlZWsgPSBub3JtYWxpemVkV2Vlay53ZWVrOworICAg
ICAgICB9CisgICAgfSBlbHNlIGlmICh2YWx1ZU9yTW9udGhPclllYXIgaW5zdGFuY2VvZiBXZWVr
KSB7CisgICAgICAgIHRoaXMueWVhciA9IHZhbHVlT3JXZWVrT3JZZWFyLnllYXI7CisgICAgICAg
IHRoaXMud2VlayA9IHZhbHVlT3JXZWVrT3JZZWFyLndlZWs7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgdmFyIHdlZWsgPSBXZWVrLmNyZWF0ZUZyb21EYXRlKG5ldyBEYXRlKHZhbHVlT3JXZWVrT3JZ
ZWFyKSk7CisgICAgICAgIHRoaXMueWVhciA9IHdlZWsueWVhcjsKKyAgICAgICAgdGhpcy53ZWVr
ID0gd2Vlay53ZWVrOworICAgIH0KK30KKworV2Vlay5NaWxsaXNlY29uZHNQZXJXZWVrID0gNyAq
IDI0ICogNjAgKiA2MCAqIDEwMDA7CitXZWVrLklTT1N0cmluZ1JlZ0V4cCA9IC9eKFxkKyktW3dX
XShcZCspJC87CisvLyBTZWUgV2ViQ29yZS9wbGF0Zm9ybS9EYXRlQ29tcG9uZW50cy5oLgorV2Vl
ay5NaW5pbXVtID0gbmV3IFdlZWsoMSwgMSk7CitXZWVrLk1heGltdW0gPSBuZXcgV2VlaygyNzU3
NjAsIDM3KTsKKy8vIFNlZSBXZWJDb3JlL2h0bWwvV2Vla0lucHV0VHlwZS5jcHAuCitXZWVrLkRl
ZmF1bHRTdGVwID0gNjA0ODAwMDAwOworV2Vlay5EZWZhdWx0U3RlcEJhc2UgPSAtMjU5MjAwMDAw
OworCisvKioKKyAqIEBwYXJhbSB7IXN0cmluZ30gc3RyCisgKiBAcmV0dXJuIHs/V2Vla30KKyAq
LworV2Vlay5wYXJzZSA9IGZ1bmN0aW9uKHN0cikgeworICAgIHZhciBtYXRjaCA9IFdlZWsuSVNP
U3RyaW5nUmVnRXhwLmV4ZWMoc3RyKTsKKyAgICBpZiAoIW1hdGNoKQorICAgICAgICByZXR1cm4g
bnVsbDsKKyAgICB2YXIgeWVhciA9IHBhcnNlSW50KG1hdGNoWzFdLCAxMCk7CisgICAgdmFyIHdl
ZWsgPSBwYXJzZUludChtYXRjaFsyXSwgMTApOworICAgIHJldHVybiBuZXcgV2Vlayh5ZWFyLCB3
ZWVrKTsKK307CisKKy8qKgorICogQHBhcmFtIHshRGF0ZX0gZGF0ZQorICogQHJldHVybiB7IVdl
ZWt9CisgKi8KK1dlZWsuY3JlYXRlRnJvbURhdGUgPSBmdW5jdGlvbihkYXRlKSB7CisgICAgdmFy
IHllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7CisgICAgaWYgKHllYXIgPD0gV2Vlay5NYXhp
bXVtLnllYXIgJiYgV2Vlay53ZWVrT25lU3RhcnREYXRlRm9yWWVhcih5ZWFyICsgMSkuZ2V0VGlt
ZSgpIDw9IGRhdGUuZ2V0VGltZSgpKQorICAgICAgICB5ZWFyKys7CisgICAgZWxzZSBpZiAoeWVh
ciA+IDEgJiYgV2Vlay53ZWVrT25lU3RhcnREYXRlRm9yWWVhcih5ZWFyKS5nZXRUaW1lKCkgPiBk
YXRlLmdldFRpbWUoKSkKKyAgICAgICAgeWVhci0tOworICAgIHZhciB3ZWVrID0gMSArIFdlZWsu
X251bWJlck9mV2Vla3NTaW5jZURhdGUoV2Vlay53ZWVrT25lU3RhcnREYXRlRm9yWWVhcih5ZWFy
KSwgZGF0ZSk7CisgICAgcmV0dXJuIG5ldyBXZWVrKHllYXIsIHdlZWspOworfTsKKworLyoqCisg
KiBAcmV0dXJuIHshV2Vla30KKyAqLworV2Vlay5jcmVhdGVGcm9tVG9kYXkgPSBmdW5jdGlvbigp
IHsKKyAgICB2YXIgbm93ID0gbmV3IERhdGUoKTsKKyAgICByZXR1cm4gV2Vlay5jcmVhdGVGcm9t
RGF0ZShjcmVhdGVVVENEYXRlKG5vdy5nZXRGdWxsWWVhcigpLCBub3cuZ2V0TW9udGgoKSwgbm93
LmdldERhdGUoKSkpOworfTsKKworLyoqCisgKiBAcGFyYW0geyFudW1iZXJ9IHllYXIKKyAqIEBy
ZXR1cm4geyFEYXRlfQorICovCitXZWVrLndlZWtPbmVTdGFydERhdGVGb3JZZWFyID0gZnVuY3Rp
b24oeWVhcikgeworICAgIGlmICh5ZWFyIDwgMSkKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVVUQ0Rh
dGUoMSwgMCwgMSk7CisgICAgLy8gVGhlIHdlZWsgY29udGFpbmluZyBKYW51YXJ5IDR0aCBpcyB3
ZWVrIG9uZS4KKyAgICB2YXIgeWVhclN0YXJ0RGF5ID0gY3JlYXRlVVRDRGF0ZSh5ZWFyLCAwLCA0
KS5nZXRVVENEYXkoKTsKKyAgICByZXR1cm4gY3JlYXRlVVRDRGF0ZSh5ZWFyLCAwLCA0IC0gKHll
YXJTdGFydERheSArIDYpICUgNyk7Cit9OworCisvKioKKyAqIEBwYXJhbSB7IW51bWJlcn0geWVh
cgorICogQHJldHVybiB7IW51bWJlcn0KKyAqLworV2Vlay5udW1iZXJPZldlZWtzSW5ZZWFyID0g
ZnVuY3Rpb24oeWVhcikgeworICAgIGlmICh5ZWFyIDwgMSB8fCB5ZWFyID4gV2Vlay5NYXhpbXVt
LnllYXIpCisgICAgICAgIHJldHVybiAwOworICAgIGVsc2UgaWYgKHllYXIgPT09IFdlZWsuTWF4
aW11bS55ZWFyKQorICAgICAgICByZXR1cm4gV2Vlay5NYXhpbXVtLndlZWs7CisgICAgcmV0dXJu
IFdlZWsuX251bWJlck9mV2Vla3NTaW5jZURhdGUoV2Vlay53ZWVrT25lU3RhcnREYXRlRm9yWWVh
cih5ZWFyKSwgV2Vlay53ZWVrT25lU3RhcnREYXRlRm9yWWVhcih5ZWFyICsgMSkpOworfTsKKwor
LyoqCisgKiBAcGFyYW0geyFEYXRlfSBiYXNlRGF0ZQorICogQHBhcmFtIHshRGF0ZX0gZGF0ZQor
ICogQHJldHVybiB7IW51bWJlcn0KKyAqLworV2Vlay5fbnVtYmVyT2ZXZWVrc1NpbmNlRGF0ZSA9
IGZ1bmN0aW9uKGJhc2VEYXRlLCBkYXRlKSB7CisgICAgcmV0dXJuIE1hdGguZmxvb3IoKGRhdGUu
Z2V0VGltZSgpIC0gYmFzZURhdGUuZ2V0VGltZSgpKSAvIFdlZWsuTWlsbGlzZWNvbmRzUGVyV2Vl
ayk7Cit9OworCisvKioKKyAqIEBwYXJhbSB7IVdlZWt9IG90aGVyCisgKiBAcmV0dXJuIHshYm9v
bH0KKyAqLworV2Vlay5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24ob3RoZXIpIHsKKyAgICBy
ZXR1cm4gdGhpcy55ZWFyID09PSBvdGhlci55ZWFyICYmIHRoaXMud2VlayA9PT0gb3RoZXIud2Vl
azsKK307CisKKy8qKgorICogQHJldHVybiB7IVdlZWt9CisgKi8KK1dlZWsucHJvdG90eXBlLnBy
ZXZpb3VzID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIG5ldyBXZWVrKHRoaXMueWVhciwgdGhp
cy53ZWVrIC0gMSk7Cit9OworCisvKioKKyAqIEByZXR1cm4geyFXZWVrfQorICovCitXZWVrLnBy
b3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIG5ldyBXZWVrKHRoaXMueWVh
ciwgdGhpcy53ZWVrICsgMSk7Cit9OworCisvKioKKyAqIEByZXR1cm4geyFEYXRlfQorICovCitX
ZWVrLnByb3RvdHlwZS5zdGFydERhdGUgPSBmdW5jdGlvbigpIHsKKyAgICB2YXIgd2Vla1N0YXJ0
RGF0ZSA9IFdlZWsud2Vla09uZVN0YXJ0RGF0ZUZvclllYXIodGhpcy55ZWFyKTsKKyAgICB3ZWVr
U3RhcnREYXRlLnNldFVUQ0RhdGUod2Vla1N0YXJ0RGF0ZS5nZXRVVENEYXRlKCkgKyAodGhpcy53
ZWVrIC0gMSkgKiA3KTsKKyAgICByZXR1cm4gd2Vla1N0YXJ0RGF0ZTsKK307CisKKy8qKgorICog
QHJldHVybiB7IURhdGV9CisgKi8KK1dlZWsucHJvdG90eXBlLmVuZERhdGUgPSBmdW5jdGlvbigp
IHsKKyAgICBpZiAodGhpcy5lcXVhbHMoV2Vlay5NYXhpbXVtKSkKKyAgICAgICAgcmV0dXJuIERh
eS5NYXhpbXVtLnN0YXJ0RGF0ZSgpOworICAgIHJldHVybiB0aGlzLm5leHQoKS5zdGFydERhdGUo
KTsKK307CisKKy8qKgorICogQHJldHVybiB7IW51bWJlcn0KKyAqLworV2Vlay5wcm90b3R5cGUu
dmFsdWVPZiA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLnN0YXJ0RGF0ZSgpLmdldFRp
bWUoKSAtIGNyZWF0ZVVUQ0RhdGUoMTk3MCwgMCwgMSkuZ2V0VGltZSgpOworfTsKKworLyoqCisg
KiBAcmV0dXJuIHshc3RyaW5nfQorICovCitXZWVrLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0
aW9uKCkgeworICAgIHZhciB5ZWFyU3RyaW5nID0gU3RyaW5nKHRoaXMueWVhcik7CisgICAgaWYg
KHllYXJTdHJpbmcubGVuZ3RoIDwgNCkKKyAgICAgICAgeWVhclN0cmluZyA9ICgiMDAwIiArIHll
YXJTdHJpbmcpLnN1YnN0cigtNCwgNCk7CisgICAgcmV0dXJuIHllYXJTdHJpbmcgKyAiLVciICsg
KCIwIiArIHRoaXMud2Vlaykuc3Vic3RyKC0yLCAyKTsKK307CisKIC8qKgogICogQHBhcmFtIHsh
bnVtYmVyfE1vbnRofSB2YWx1ZU9yTW9udGhPclllYXIKICAqIEBwYXJhbSB7IW51bWJlcj19IG1v
bnRoCkBAIC0zMjksNiArNDk4LDkgQEAgTW9udGguSVNPU3RyaW5nUmVnRXhwID0gL14oXGQrKS0o
XGQrKSQvOwogLy8gU2VlIFdlYkNvcmUvcGxhdGZvcm0vRGF0ZUNvbXBvbmVudHMuaC4KIE1vbnRo
Lk1pbmltdW0gPSBuZXcgTW9udGgoMSwgMCk7CiBNb250aC5NYXhpbXVtID0gbmV3IE1vbnRoKDI3
NTc2MCwgOCk7CisvLyBTZWUgV2ViQ29yZS9odG1sL01vbnRoSW5wdXRUeXBlLmNwcC4KK01vbnRo
LkRlZmF1bHRTdGVwID0gMTsKK01vbnRoLkRlZmF1bHRTdGVwQmFzZSA9IDA7CiAKIC8qKgogICog
QHBhcmFtIHshc3RyaW5nfSBzdHIKQEAgLTUxOCw2ICs2OTAsMTAgQEAgZnVuY3Rpb24gQ2FsZW5k
YXJQaWNrZXIoZWxlbWVudCwgY29uZmlnKSB7CiAgICAgICAgIHRoaXMuc2VsZWN0aW9uQ29uc3Ry
dWN0b3IgPSBNb250aDsKICAgICAgICAgdGhpcy5fZGF5c1RhYmxlID0gbmV3IE1vbnRoUGlja2Vy
RGF5c1RhYmxlKHRoaXMpOwogICAgICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ2xh
c3NOYW1lcy5Nb250aE1vZGUpOworICAgIH0gZWxzZSBpZiAodGhpcy5fY29uZmlnLm1vZGUgPT09
ICJ3ZWVrIikgeworICAgICAgICB0aGlzLnNlbGVjdGlvbkNvbnN0cnVjdG9yID0gV2VlazsKKyAg
ICAgICAgdGhpcy5fZGF5c1RhYmxlID0gbmV3IFdlZWtQaWNrZXJEYXlzVGFibGUodGhpcyk7Cisg
ICAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDbGFzc05hbWVzLldlZWtNb2RlKTsK
ICAgICB9IGVsc2UgewogICAgICAgICB0aGlzLnNlbGVjdGlvbkNvbnN0cnVjdG9yID0gRGF5Owog
ICAgICAgICB0aGlzLl9kYXlzVGFibGUgPSBuZXcgRGF5c1RhYmxlKHRoaXMpOwpAQCAtNTMxLDgg
KzcwNyw4IEBAIGZ1bmN0aW9uIENhbGVuZGFyUGlja2VyKGVsZW1lbnQsIGNvbmZpZykgewogICAg
IHZhciBtYXhpbXVtID0gKHR5cGVvZiB0aGlzLl9jb25maWcubWF4ICE9PSAidW5kZWZpbmVkIikg
PyBwYXJzZURhdGVTdHJpbmcodGhpcy5fY29uZmlnLm1heCkgOiB0aGlzLnNlbGVjdGlvbkNvbnN0
cnVjdG9yLk1heGltdW07CiAgICAgdGhpcy5fbWluaW11bVZhbHVlID0gbWluaW11bS52YWx1ZU9m
KCk7CiAgICAgdGhpcy5fbWF4aW11bVZhbHVlID0gbWF4aW11bS52YWx1ZU9mKCk7Ci0gICAgdGhp
cy5zdGVwID0gKHR5cGVvZiB0aGlzLl9jb25maWcuc3RlcCAhPT0gdW5kZWZpbmVkKSA/IE51bWJl
cih0aGlzLl9jb25maWcuc3RlcCkgOiBDYWxlbmRhclBpY2tlci5EZWZhdWx0U3RlcFNjYWxlRmFj
dG9yOwotICAgIHRoaXMuc3RlcEJhc2UgPSAodHlwZW9mIHRoaXMuX2NvbmZpZy5zdGVwQmFzZSAh
PT0gInVuZGVmaW5lZCIpID8gTnVtYmVyKHRoaXMuX2NvbmZpZy5zdGVwQmFzZSkgOiBDYWxlbmRh
clBpY2tlci5EZWZhdWx0U3RlcEJhc2U7CisgICAgdGhpcy5zdGVwID0gKHR5cGVvZiB0aGlzLl9j
b25maWcuc3RlcCAhPT0gdW5kZWZpbmVkKSA/IE51bWJlcih0aGlzLl9jb25maWcuc3RlcCkgOiB0
aGlzLnNlbGVjdGlvbkNvbnN0cnVjdG9yLkRlZmF1bHRTdGVwOworICAgIHRoaXMuc3RlcEJhc2Ug
PSAodHlwZW9mIHRoaXMuX2NvbmZpZy5zdGVwQmFzZSAhPT0gInVuZGVmaW5lZCIpID8gTnVtYmVy
KHRoaXMuX2NvbmZpZy5zdGVwQmFzZSkgOiB0aGlzLnNlbGVjdGlvbkNvbnN0cnVjdG9yLkRlZmF1
bHRTdGVwQmFzZTsKICAgICB0aGlzLl9taW5pbXVtTW9udGggPSBNb250aC5jcmVhdGVGcm9tRGF0
ZShtaW5pbXVtLnN0YXJ0RGF0ZSgpKTsKICAgICB0aGlzLm1heGltdW1Nb250aCA9IE1vbnRoLmNy
ZWF0ZUZyb21EYXRlKG1heGltdW0uc3RhcnREYXRlKCkpOwogICAgIHRoaXMuX2N1cnJlbnRNb250
aCA9IG5ldyBNb250aChOYU4sIE5hTik7CkBAIC01NDYsNyArNzIyLDcgQEAgZnVuY3Rpb24gQ2Fs
ZW5kYXJQaWNrZXIoZWxlbWVudCwgY29uZmlnKSB7CiAgICAgICAgIGluaXRpYWxTZWxlY3Rpb24g
PSBuZXcgdGhpcy5zZWxlY3Rpb25Db25zdHJ1Y3Rvcih0aGlzLl9taW5pbXVtVmFsdWUpOwogICAg
IGVsc2UgaWYgKGluaXRpYWxTZWxlY3Rpb24udmFsdWVPZigpID4gdGhpcy5fbWF4aW11bVZhbHVl
KQogICAgICAgICBpbml0aWFsU2VsZWN0aW9uID0gbmV3IHRoaXMuc2VsZWN0aW9uQ29uc3RydWN0
b3IodGhpcy5fbWF4aW11bVZhbHVlKTsKLSAgICB0aGlzLnNob3dNb250aChNb250aC5jcmVhdGVG
cm9tRGF0ZShpbml0aWFsU2VsZWN0aW9uLnN0YXJ0RGF0ZSgpKSwgZmFsc2UpOworICAgIHRoaXMu
c2hvd01vbnRoKE1vbnRoLmNyZWF0ZUZyb21EYXRlKGluaXRpYWxTZWxlY3Rpb24uc3RhcnREYXRl
KCkpKTsKICAgICB0aGlzLl9kYXlzVGFibGUuc2VsZWN0UmFuZ2VBbmRTaG93RW50aXJlUmFuZ2Uo
aW5pdGlhbFNlbGVjdGlvbik7CiAgICAgdGhpcy5maXhXaW5kb3dTaXplKCk7CiAgICAgdGhpcy5f
aGFuZGxlQm9keUtleURvd25Cb3VuZCA9IHRoaXMuX2hhbmRsZUJvZHlLZXlEb3duLmJpbmQodGhp
cyk7CkBAIC01NTQsOSArNzMwLDExIEBAIGZ1bmN0aW9uIENhbGVuZGFyUGlja2VyKGVsZW1lbnQs
IGNvbmZpZykgewogfQogQ2FsZW5kYXJQaWNrZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShQ
aWNrZXIucHJvdG90eXBlKTsKIAotLy8gU2VlIFdlYkNvcmUvaHRtbC9EYXRlSW5wdXRUeXBlLmNw
cC4KLUNhbGVuZGFyUGlja2VyLkRlZmF1bHRTdGVwU2NhbGVGYWN0b3IgPSA4NjQwMDAwMDsKLUNh
bGVuZGFyUGlja2VyLkRlZmF1bHRTdGVwQmFzZSA9IDAuMDsKK0NhbGVuZGFyUGlja2VyLk5hdmln
YXRpb25CZWhhdmlvdXIgPSB7CisgICAgTm9uZTogMCwKKyAgICBBbmltYXRlOiAxIDw8IDAsCisg
ICAgS2VlcFNlbGVjdGlvblBvc2l0aW9uOiAxIDw8IDEKK307CiAKIENhbGVuZGFyUGlja2VyLnBy
b3RvdHlwZS5faGFuZGxlV2luZG93UmVzaXplID0gZnVuY3Rpb24oKSB7CiAgICAgdGhpcy5fZWxl
bWVudC5jbGFzc0xpc3QucmVtb3ZlKCJwcmVwYXJpbmciKTsKQEAgLTY1MSwxMCArODI5LDkgQEAg
Q2FsZW5kYXJQaWNrZXIucHJvdG90eXBlLnNob3VsZFNob3dNb250aCA9IGZ1bmN0aW9uKG1vbnRo
KSB7CiAKIC8qKgogICogQHBhcmFtIHshTW9udGh9IG1vbnRoCi0gKiBAcGFyYW0geyFib29sPX0g
YW5pbWF0ZQotICogQHBhcmFtIHshYm9vbD19IGtlZXBTZWxlY3Rpb25Qb3NpdGlvbgorICogQHBh
cmFtIHshQ2FsZW5kYXJQaWNrZXIuTmF2aWdhdGlvbkJlaGF2aW91cj19IG5hdmlnYXRpb25CZWhh
dmlvdXIKICAqLwotQ2FsZW5kYXJQaWNrZXIucHJvdG90eXBlLnNob3dNb250aCA9IGZ1bmN0aW9u
KG1vbnRoLCBhbmltYXRlLCBrZWVwU2VsZWN0aW9uUG9zaXRpb24pIHsKK0NhbGVuZGFyUGlja2Vy
LnByb3RvdHlwZS5zaG93TW9udGggPSBmdW5jdGlvbihtb250aCwgbmF2aWdhdGlvbkJlaGF2aW91
cikgewogICAgIGlmICh0aGlzLl9jdXJyZW50TW9udGguZXF1YWxzKG1vbnRoKSkKICAgICAgICAg
cmV0dXJuOwogICAgIGVsc2UgaWYgKG1vbnRoLnZhbHVlT2YoKSA8IHRoaXMuX21pbmltdW1Nb250
aC52YWx1ZU9mKCkpCkBAIC02NjIsNyArODM5LDcgQEAgQ2FsZW5kYXJQaWNrZXIucHJvdG90eXBl
LnNob3dNb250aCA9IGZ1bmN0aW9uKG1vbnRoLCBhbmltYXRlLCBrZWVwU2VsZWN0aW9uUG9zaXQK
ICAgICBlbHNlIGlmIChtb250aC52YWx1ZU9mKCkgPiB0aGlzLm1heGltdW1Nb250aC52YWx1ZU9m
KCkpCiAgICAgICAgIG1vbnRoID0gdGhpcy5tYXhpbXVtTW9udGg7CiAgICAgdGhpcy5feWVhck1v
bnRoQ29udHJvbGxlci5zZXRNb250aChtb250aCk7Ci0gICAgdGhpcy5fZGF5c1RhYmxlLm5hdmln
YXRlVG9Nb250aChtb250aCwgYW5pbWF0ZSwga2VlcFNlbGVjdGlvblBvc2l0aW9uKTsKKyAgICB0
aGlzLl9kYXlzVGFibGUubmF2aWdhdGVUb01vbnRoKG1vbnRoLCBuYXZpZ2F0aW9uQmVoYXZpb3Vy
IHx8IENhbGVuZGFyUGlja2VyLk5hdmlnYXRpb25CZWhhdmlvdXIuTm9uZSk7CiAgICAgdGhpcy5f
Y3VycmVudE1vbnRoID0gbW9udGg7CiB9OwogCkBAIC03MjQsNyArOTAxLDcgQEAgWWVhck1vbnRo
Q29udHJvbGxlci5wcm90b3R5cGUuYXR0YWNoVG8gPSBmdW5jdGlvbihlbGVtZW50KSB7CiAgICAg
ICAgIG1heFdpZHRoID0gTWF0aC5tYXgobWF4V2lkdGgsIHRoaXMuX21vbnRoLm9mZnNldFdpZHRo
KTsKICAgICAgICAgbW9udGggPSBtb250aC5wcmV2aW91cygpOwogICAgIH0KLSAgICBpZiAoZ2V0
TGFuZ3VhZ2UoKSA9PSAiamEiICYmIEltcGVyaWFsRXJhTGltaXQgPCBtYXhpbXVtWWVhcikgewor
ICAgIGlmIChnZXRMYW5ndWFnZSgpID09ICJqYSIgJiYgSW1wZXJpYWxFcmFMaW1pdCA8IHRoaXMu
cGlja2VyLm1heGltdW1Nb250aC55ZWFyKSB7CiAgICAgICAgIGZvciAodmFyIG0gPSAwOyBtIDwg
MTI7ICsrbSkgewogICAgICAgICAgICAgdGhpcy5fbW9udGgudGV4dENvbnRlbnQgPSBuZXcgTW9u
dGgoSW1wZXJpYWxFcmFMaW1pdCwgbSkudG9Mb2NhbGVTdHJpbmcoKTsKICAgICAgICAgICAgIG1h
eFdpZHRoID0gTWF0aC5tYXgobWF4V2lkdGgsIHRoaXMuX21vbnRoLm9mZnNldFdpZHRoKTsKQEAg
LTk5NSw3ICsxMTcyLDcgQEAgWWVhck1vbnRoQ29udHJvbGxlci5wcm90b3R5cGUuX2hhbmRsZUJ1
dHRvbkNsaWNrID0gZnVuY3Rpb24oZXZlbnQpIHsKIFllYXJNb250aENvbnRyb2xsZXIucHJvdG90
eXBlLm1vdmVSZWxhdGl2ZWx5ID0gZnVuY3Rpb24oYW1vdW50KSB7CiAgICAgdmFyIGN1cnJlbnQg
PSB0aGlzLnBpY2tlci5jdXJyZW50TW9udGgoKS52YWx1ZU9mKCk7CiAgICAgdmFyIHVwZGF0ZWQg
PSBuZXcgTW9udGgoY3VycmVudCArIGFtb3VudCk7Ci0gICAgdGhpcy5waWNrZXIuc2hvd01vbnRo
KHVwZGF0ZWQsIHRydWUsIHRydWUpOworICAgIHRoaXMucGlja2VyLnNob3dNb250aCh1cGRhdGVk
LCBDYWxlbmRhclBpY2tlci5OYXZpZ2F0aW9uQmVoYXZpb3VyLkFuaW1hdGUgfCBDYWxlbmRhclBp
Y2tlci5OYXZpZ2F0aW9uQmVoYXZpb3VyLktlZXBTZWxlY3Rpb25Qb3NpdGlvbik7CiB9OwogCiAv
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCkBAIC0xMDA5LDEzICsxMTg2LDYgQEAgZnVuY3Rpb24gRGF5c1RhYmxlKHBpY2tl
cikgewogfQogCiAvKioKLSAqIEByZXR1cm4geyFib29sZWFufQotICovCi1EYXlzVGFibGUucHJv
dG90eXBlLl9oYXNTZWxlY3Rpb24gPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gISF0aGlzLl9m
aXJzdE5vZGVJblNlbGVjdGVkUmFuZ2UoKTsKLX0KLQotLyoqCiAgKiBUaGUgbnVtYmVyIG9mIHdl
ZWsgbGluZXMgaW4gdGhlIHNjcmVlbi4KICAqIEBjb25zdAogICogQHR5cGUge251bWJlcn0KQEAg
LTEwMzMsMTMgKzEyMDMsMjAgQEAgRGF5c1RhYmxlLnByb3RvdHlwZS5hdHRhY2hUbyA9IGZ1bmN0
aW9uKGVsZW1lbnQpIHsKICAgICB0aGlzLl9kYXlzQ29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIo
IndlYmtpdFRyYW5zaXRpb25FbmQiLCB0aGlzLl9tb3ZlSW5EYXlzLmJpbmQodGhpcyksIGZhbHNl
KTsKICAgICB2YXIgY29udGFpbmVyID0gY3JlYXRlRWxlbWVudCgidHIiLCBDbGFzc05hbWVzLkRh
eUxhYmVsQ29udGFpbmVyKTsKICAgICB2YXIgd2Vla1N0YXJ0RGF5ID0gZ2xvYmFsLnBhcmFtcy53
ZWVrU3RhcnREYXkgfHwgMDsKKyAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoY3JlYXRlRWxlbWVu
dCgidGgiLCBDbGFzc05hbWVzLkRheUxhYmVsICsgIiAiICsgQ2xhc3NOYW1lcy5XZWVrQ29sdW1u
LCBnbG9iYWwucGFyYW1zLndlZWtMYWJlbCkpOwogICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNzsg
aSsrKQogICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoY3JlYXRlRWxlbWVudCgidGgiLCBD
bGFzc05hbWVzLkRheUxhYmVsLCBnbG9iYWwucGFyYW1zLmRheUxhYmVsc1sod2Vla1N0YXJ0RGF5
ICsgaSkgJSA3XSkpOwogICAgIHRoaXMuX2RheXNDb250YWluZXIuYXBwZW5kQ2hpbGQoY29udGFp
bmVyKTsKICAgICB0aGlzLl9kYXlzID0gW107CisgICAgdGhpcy5fd2Vla051bWJlcnMgPSBbXTsK
ICAgICBmb3IgKHZhciB3ID0gMDsgdyA8IERheXNUYWJsZS5fV2Vla3M7IHcrKykgewogICAgICAg
ICBjb250YWluZXIgPSBjcmVhdGVFbGVtZW50KCJ0ciIsIENsYXNzTmFtZXMuV2Vla0NvbnRhaW5l
cik7CiAgICAgICAgIHZhciB3ZWVrID0gW107CisgICAgICAgIHZhciB3ZWVrTnVtYmVyTm9kZSA9
IGNyZWF0ZUVsZW1lbnQoInRkIiwgQ2xhc3NOYW1lcy5EYXkgKyAiICIgKyBDbGFzc05hbWVzLldl
ZWtDb2x1bW4sICIgIik7CisgICAgICAgIHdlZWtOdW1iZXJOb2RlLmRhdGFzZXQucG9zaXRpb25Y
ID0gLTE7CisgICAgICAgIHdlZWtOdW1iZXJOb2RlLmRhdGFzZXQucG9zaXRpb25ZID0gdzsKKyAg
ICAgICAgdGhpcy5fd2Vla051bWJlcnMucHVzaCh3ZWVrTnVtYmVyTm9kZSk7CisgICAgICAgIGNv
bnRhaW5lci5hcHBlbmRDaGlsZCh3ZWVrTnVtYmVyTm9kZSk7CiAgICAgICAgIGZvciAodmFyIGQg
PSAwOyBkIDwgNzsgZCsrKSB7CiAgICAgICAgICAgICB2YXIgZGF5ID0gY3JlYXRlRWxlbWVudCgi
dGQiLCBDbGFzc05hbWVzLkRheSwgIiAiKTsKICAgICAgICAgICAgIGRheS5zZXRBdHRyaWJ1dGUo
ImRhdGEtcG9zaXRpb24teCIsIFN0cmluZyhkKSk7CkBAIC0xMDk1LDE0ICsxMjcyLDE4IEBAIERh
eXNUYWJsZS5wcm90b3R5cGUuX3JlbmRlck1vbnRoID0gZnVuY3Rpb24obW9udGgpIHsKICAgICBp
ZiAoc3RhcnRPZmZzZXQgPj0gMCkKICAgICAgICAgc3RhcnRPZmZzZXQgLT0gNzsKICAgICBkYXlJ
dGVyYXRvci5zZXRVVENEYXRlKHN0YXJ0T2Zmc2V0ICsgMSk7CisgICAgdmFyIG1vbmRheU9mZnNl
dCA9ICg4IC0gd2Vla1N0YXJ0RGF5KSAlIDc7CisgICAgdmFyIHN1bmRheU9mZnNldCA9IHdlZWtT
dGFydERheSAlIDc7CiAgICAgZm9yICh2YXIgdyA9IDA7IHcgPCBEYXlzVGFibGUuX1dlZWtzOyB3
KyspIHsKICAgICAgICAgZm9yICh2YXIgZCA9IDA7IGQgPCA3OyBkKyspIHsKICAgICAgICAgICAg
IHZhciBpdGVyTW9udGggPSBNb250aC5jcmVhdGVGcm9tRGF0ZShkYXlJdGVyYXRvcik7CisgICAg
ICAgICAgICB2YXIgaXRlcldlZWsgPSBXZWVrLmNyZWF0ZUZyb21EYXRlKGRheUl0ZXJhdG9yKTsK
ICAgICAgICAgICAgIHZhciB0aW1lID0gZGF5SXRlcmF0b3IuZ2V0VGltZSgpOwogICAgICAgICAg
ICAgdmFyIGVsZW1lbnQgPSB0aGlzLl9kYXlzW3ddW2RdOwogICAgICAgICAgICAgZWxlbWVudC5p
bm5lclRleHQgPSBsb2NhbGl6ZU51bWJlcihkYXlJdGVyYXRvci5nZXRVVENEYXRlKCkpOwogICAg
ICAgICAgICAgZWxlbWVudC5jbGFzc05hbWUgPSBDbGFzc05hbWVzLkRheTsKICAgICAgICAgICAg
IGVsZW1lbnQuZGF0YXNldC5zdWJtaXRWYWx1ZSA9IERheS5jcmVhdGVGcm9tRGF0ZShkYXlJdGVy
YXRvcikudG9TdHJpbmcoKTsKKyAgICAgICAgICAgIGVsZW1lbnQuZGF0YXNldC53ZWVrVmFsdWUg
PSBpdGVyV2Vlay50b1N0cmluZygpOwogICAgICAgICAgICAgZWxlbWVudC5kYXRhc2V0Lm1vbnRo
VmFsdWUgPSBpdGVyTW9udGgudG9TdHJpbmcoKTsKICAgICAgICAgICAgIGlmIChpc05hTih0aW1l
KSkgewogICAgICAgICAgICAgICAgIGVsZW1lbnQuaW5uZXJUZXh0ID0gIi0iOwpAQCAtMTExNCw2
ICsxMjk1LDE4IEBAIERheXNUYWJsZS5wcm90b3R5cGUuX3JlbmRlck1vbnRoID0gZnVuY3Rpb24o
bW9udGgpIHsKICAgICAgICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoQ2xhc3NOYW1l
cy5Ob3RUaGlzTW9udGgpOwogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgZWxl
bWVudC5jbGFzc0xpc3QuYWRkKENsYXNzTmFtZXMuQXZhaWxhYmxlKTsKKyAgICAgICAgICAgIGlm
IChkID09PSBtb25kYXlPZmZzZXQpIHsKKyAgICAgICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlz
dC5hZGQoQ2xhc3NOYW1lcy5Nb25kYXkpOworICAgICAgICAgICAgICAgIGlmICh0aGlzLl93ZWVr
TnVtYmVyc1t3XSkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl93ZWVrTnVtYmVyc1t3XS5k
YXRhc2V0LndlZWtWYWx1ZSA9IGl0ZXJXZWVrLnRvU3RyaW5nKCk7CisgICAgICAgICAgICAgICAg
ICAgIHRoaXMuX3dlZWtOdW1iZXJzW3ddLmlubmVyVGV4dCA9IGxvY2FsaXplTnVtYmVyKGl0ZXJX
ZWVrLndlZWspOworICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5jbGFzc0xpc3QuY29u
dGFpbnMoQ2xhc3NOYW1lcy5BdmFpbGFibGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgdGhp
cy5fd2Vla051bWJlcnNbd10uY2xhc3NMaXN0LmFkZChDbGFzc05hbWVzLkF2YWlsYWJsZSk7Cisg
ICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3dl
ZWtOdW1iZXJzW3ddLmNsYXNzTGlzdC5hZGQoQ2xhc3NOYW1lcy5VbmF2YWlsYWJsZSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChkID09PSBzdW5kYXlPZmZzZXQp
CisgICAgICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKENsYXNzTmFtZXMuU3VuZGF5
KTsKICAgICAgICAgICAgIGRheUl0ZXJhdG9yLnNldFVUQ0RhdGUoZGF5SXRlcmF0b3IuZ2V0VVRD
RGF0ZSgpICsgMSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMTIxLDE5ICsxMzE0LDE4IEBAIERh
eXNUYWJsZS5wcm90b3R5cGUuX3JlbmRlck1vbnRoID0gZnVuY3Rpb24obW9udGgpIHsKIAogLyoq
CiAgKiBAcGFyYW0geyFNb250aH0gbW9udGgKLSAqIEBwYXJhbSB7IWJvb2x9IGFuaW1hdGUKLSAq
IEBwYXJhbSB7IWJvb2x9IGtlZXBTZWxlY3Rpb25Qb3NpdGlvbgorICogQHBhcmFtIHshQ2FsZW5k
YXJQaWNrZXIuTmF2aWdhdGlvbkJlaGF2aW91cn0gbmF2aWdhdGlvbkJlaGF2aW91cgogICovCi1E
YXlzVGFibGUucHJvdG90eXBlLm5hdmlnYXRlVG9Nb250aCA9IGZ1bmN0aW9uKG1vbnRoLCBhbmlt
YXRlLCBrZWVwU2VsZWN0aW9uUG9zaXRpb24pIHsKK0RheXNUYWJsZS5wcm90b3R5cGUubmF2aWdh
dGVUb01vbnRoID0gZnVuY3Rpb24obW9udGgsIG5hdmlnYXRpb25CZWhhdmlvdXIpIHsKICAgICB2
YXIgZmlyc3ROb2RlSW5TZWxlY3RlZFJhbmdlID0gdGhpcy5fZmlyc3ROb2RlSW5TZWxlY3RlZFJh
bmdlKCk7Ci0gICAgaWYgKGFuaW1hdGUpIHsKKyAgICBpZiAobmF2aWdhdGlvbkJlaGF2aW91ciAm
IENhbGVuZGFyUGlja2VyLk5hdmlnYXRpb25CZWhhdmlvdXIuQW5pbWF0ZSkgewogICAgICAgICB2
YXIgZGF5c1N0eWxlID0gdGhpcy5fZGF5c0NvbnRhaW5lci5zdHlsZTsKICAgICAgICAgZGF5c1N0
eWxlLnBvc2l0aW9uID0gInJlbGF0aXZlIjsKICAgICAgICAgZGF5c1N0eWxlLndlYmtpdFRyYW5z
aXRpb24gPSAibGVmdCAwLjFzIGVhc2UiOwogICAgICAgICBkYXlzU3R5bGUubGVmdCA9ICh0aGlz
LnBpY2tlci5jdXJyZW50TW9udGgoKS52YWx1ZU9mKCkgPiBtb250aC52YWx1ZU9mKCkgPyAiIiA6
ICItIikgKyB0aGlzLl9kYXlzQ29udGFpbmVyLm9mZnNldFdpZHRoICsgInB4IjsKICAgICB9CiAg
ICAgdGhpcy5fcmVuZGVyTW9udGgobW9udGgpOwotICAgIGlmIChrZWVwU2VsZWN0aW9uUG9zaXRp
b24gJiYgZmlyc3ROb2RlSW5TZWxlY3RlZFJhbmdlKSB7CisgICAgaWYgKG5hdmlnYXRpb25CZWhh
dmlvdXIgJiBDYWxlbmRhclBpY2tlci5OYXZpZ2F0aW9uQmVoYXZpb3VyLktlZXBTZWxlY3Rpb25Q
b3NpdGlvbiAmJiBmaXJzdE5vZGVJblNlbGVjdGVkUmFuZ2UpIHsKICAgICAgICAgdmFyIHggPSBw
YXJzZUludChmaXJzdE5vZGVJblNlbGVjdGVkUmFuZ2UuZGF0YXNldC5wb3NpdGlvblgsIDEwKTsK
ICAgICAgICAgdmFyIHkgPSBwYXJzZUludChmaXJzdE5vZGVJblNlbGVjdGVkUmFuZ2UuZGF0YXNl
dC5wb3NpdGlvblksIDEwKTsKICAgICAgICAgdGhpcy5fc2VsZWN0UmFuZ2VBdFBvc2l0aW9uKHgs
IHkpOwpAQCAtMTE3Miw3ICsxMzY0LDcgQEAgRGF5c1RhYmxlLnByb3RvdHlwZS5fbWFya1Jhbmdl
QXNTZWxlY3RlZCA9IGZ1bmN0aW9uKGRheSkgewogRGF5c1RhYmxlLnByb3RvdHlwZS5zZWxlY3RS
YW5nZSA9IGZ1bmN0aW9uKGRheSkgewogICAgIHRoaXMuX2Rlc2VsZWN0KCk7CiAgICAgaWYgKHRo
aXMuc3RhcnREYXRlKCkgPiBkYXkuc3RhcnREYXRlKCkgfHwgdGhpcy5lbmREYXRlKCkgPCBkYXku
ZW5kRGF0ZSgpKQotICAgICAgICB0aGlzLnBpY2tlci5zaG93TW9udGgoTW9udGguY3JlYXRlRnJv
bURhdGUoZGF5LnN0YXJ0RGF0ZSgpKSwgZmFsc2UpOworICAgICAgICB0aGlzLnBpY2tlci5zaG93
TW9udGgoTW9udGguY3JlYXRlRnJvbURhdGUoZGF5LnN0YXJ0RGF0ZSgpKSk7CiAgICAgdGhpcy5f
bWFya1JhbmdlQXNTZWxlY3RlZChkYXkpOwogfTsKIApAQCAtMTIyMiw3ICsxNDE0LDggQEAgRGF5
c1RhYmxlLnByb3RvdHlwZS5lbmREYXRlID0gZnVuY3Rpb24oKSB7CiAgKiBAcGFyYW0geyFudW1i
ZXJ9IHkKICAqLwogRGF5c1RhYmxlLnByb3RvdHlwZS5fc2VsZWN0UmFuZ2VBdFBvc2l0aW9uID0g
ZnVuY3Rpb24oeCwgeSkgewotICAgIHRoaXMuX3NlbGVjdFJhbmdlQ29udGFpbmluZ05vZGUodGhp
cy5fZGF5c1t5XVt4XSk7CisgICAgdmFyIG5vZGUgPSB4ID09PSAtMSA/IHRoaXMuX3dlZWtOdW1i
ZXJzW3ldIDogdGhpcy5fZGF5c1t5XVt4XTsKKyAgICB0aGlzLl9zZWxlY3RSYW5nZUNvbnRhaW5p
bmdOb2RlKG5vZGUpOwogfTsKIAogLyoqCkBAIC0xMjM5LDI0ICsxNDMyLDI2IEBAIERheXNUYWJs
ZS5wcm90b3R5cGUuX2Rlc2VsZWN0ID0gZnVuY3Rpb24oKSB7CiB9OwogCiAvKioKKyAqIEBwYXJh
bSB7IUNhbGVuZGFyUGlja2VyLk5hdmlnYXRpb25CZWhhdmlvdXJ9IG5hdmlnYXRpb25CZWhhdmlv
dXIKICAqIEByZXR1cm4geyFib29sZWFufQogICovCi1EYXlzVGFibGUucHJvdG90eXBlLl9tYXli
ZVNldFByZXZpb3VzTW9udGggPSBmdW5jdGlvbigpIHsKK0RheXNUYWJsZS5wcm90b3R5cGUuX21h
eWJlU2V0UHJldmlvdXNNb250aCA9IGZ1bmN0aW9uKG5hdmlnYXRpb25CZWhhdmlvdXIpIHsKICAg
ICB2YXIgcHJldmlvdXNNb250aCA9IHRoaXMucGlja2VyLmN1cnJlbnRNb250aCgpLnByZXZpb3Vz
KCk7CiAgICAgaWYgKCF0aGlzLnBpY2tlci5zaG91bGRTaG93TW9udGgocHJldmlvdXNNb250aCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB0aGlzLnBpY2tlci5zaG93TW9udGgocHJldmlv
dXNNb250aCwgdHJ1ZSk7CisgICAgdGhpcy5waWNrZXIuc2hvd01vbnRoKHByZXZpb3VzTW9udGgs
IG5hdmlnYXRpb25CZWhhdmlvdXIpOwogICAgIHJldHVybiB0cnVlOwogfTsKIAogLyoqCisgKiBA
cGFyYW0geyFDYWxlbmRhclBpY2tlci5OYXZpZ2F0aW9uQmVoYXZpb3VyfSBuYXZpZ2F0aW9uQmVo
YXZpb3VyCiAgKiBAcmV0dXJuIHshYm9vbGVhbn0KICAqLwotRGF5c1RhYmxlLnByb3RvdHlwZS5f
bWF5YmVTZXROZXh0TW9udGggPSBmdW5jdGlvbigpIHsKK0RheXNUYWJsZS5wcm90b3R5cGUuX21h
eWJlU2V0TmV4dE1vbnRoID0gZnVuY3Rpb24obmF2aWdhdGlvbkJlaGF2aW91cikgewogICAgIHZh
ciBuZXh0TW9udGggPSB0aGlzLnBpY2tlci5jdXJyZW50TW9udGgoKS5uZXh0KCk7CiAgICAgaWYg
KCF0aGlzLnBpY2tlci5zaG91bGRTaG93TW9udGgobmV4dE1vbnRoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIHRoaXMucGlja2VyLnNob3dNb250aChuZXh0TW9udGgsIHRydWUpOworICAg
IHRoaXMucGlja2VyLnNob3dNb250aChuZXh0TW9udGgsIG5hdmlnYXRpb25CZWhhdmlvdXIpOwog
ICAgIHJldHVybiB0cnVlOwogfTsKIApAQCAtMTI5OCw3ICsxNDkzLDcgQEAgRGF5c1RhYmxlLnBy
b3RvdHlwZS5faGFuZGxlS2V5ID0gZnVuY3Rpb24oZXZlbnQpIHsKICAgICAgICAgeCA9IHBhcnNl
SW50KGZpcnN0Tm9kZUluU2VsZWN0ZWRSYW5nZS5kYXRhc2V0LnBvc2l0aW9uWCwgMTApOwogICAg
ICAgICB5ID0gcGFyc2VJbnQoZmlyc3ROb2RlSW5TZWxlY3RlZFJhbmdlLmRhdGFzZXQucG9zaXRp
b25ZLCAxMCk7CiAgICAgfQotICAgIGlmICghdGhpcy5faGFzU2VsZWN0aW9uKCkgJiYgKGtleSA9
PSAiTGVmdCIgfHwga2V5ID09ICJVcCIgfHwga2V5ID09ICJSaWdodCIgfHwga2V5ID09ICJEb3du
IikpIHsKKyAgICBpZiAoIWZpcnN0Tm9kZUluU2VsZWN0ZWRSYW5nZSAmJiAoa2V5ID09ICJMZWZ0
IiB8fCBrZXkgPT0gIlVwIiB8fCBrZXkgPT0gIlJpZ2h0IiB8fCBrZXkgPT0gIkRvd24iKSkgewog
ICAgICAgICAvLyBQdXQgdGhlIHNlbGVjdGlvbiBvbiBhIGNlbnRlciBjZWxsLgogICAgICAgICB0
aGlzLnVwZGF0ZVNlbGVjdGlvbihldmVudCwgMywgTWF0aC5mbG9vcihEYXlzVGFibGUuX1dlZWtz
IC8gMiAtIDEpKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTMwNyw3ICsxNTAyLDcgQEAgRGF5c1Rh
YmxlLnByb3RvdHlwZS5faGFuZGxlS2V5ID0gZnVuY3Rpb24oZXZlbnQpIHsKICAgICBpZiAoa2V5
ID09IChnbG9iYWwucGFyYW1zLmlzQ2FsZW5kYXJSVEwgPyAiUmlnaHQiIDogIkxlZnQiKSkgewog
ICAgICAgICBpZiAoeCA9PSAwKSB7CiAgICAgICAgICAgICBpZiAoeSA9PSAwKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKCF0aGlzLl9tYXliZVNldFByZXZpb3VzTW9udGgoKSkKKyAgICAgICAgICAg
ICAgICBpZiAoIXRoaXMuX21heWJlU2V0UHJldmlvdXNNb250aChDYWxlbmRhclBpY2tlci5OYXZp
Z2F0aW9uQmVoYXZpb3VyLkFuaW1hdGUpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICAgICAgeSA9IERheXNUYWJsZS5fV2Vla3MgLSAxOwogICAgICAgICAgICAgfSBl
bHNlCkBAIC0xMzE5LDcgKzE1MTQsNyBAQCBEYXlzVGFibGUucHJvdG90eXBlLl9oYW5kbGVLZXkg
PSBmdW5jdGlvbihldmVudCkgewogCiAgICAgfSBlbHNlIGlmIChrZXkgPT0gIlVwIikgewogICAg
ICAgICBpZiAoeSA9PSAwKSB7Ci0gICAgICAgICAgICBpZiAoIXRoaXMuX21heWJlU2V0UHJldmlv
dXNNb250aCgpKQorICAgICAgICAgICAgaWYgKCF0aGlzLl9tYXliZVNldFByZXZpb3VzTW9udGgo
Q2FsZW5kYXJQaWNrZXIuTmF2aWdhdGlvbkJlaGF2aW91ci5BbmltYXRlKSkKICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICB5ID0gRGF5c1RhYmxlLl9XZWVrcyAtIDE7CiAgICAg
ICAgIH0gZWxzZQpAQCAtMTMyOSw3ICsxNTI0LDcgQEAgRGF5c1RhYmxlLnByb3RvdHlwZS5faGFu
ZGxlS2V5ID0gZnVuY3Rpb24oZXZlbnQpIHsKICAgICB9IGVsc2UgaWYgKGtleSA9PSAoZ2xvYmFs
LnBhcmFtcy5pc0NhbGVuZGFyUlRMID8gIkxlZnQiIDogIlJpZ2h0IikpIHsKICAgICAgICAgaWYg
KHggPT0gNikgewogICAgICAgICAgICAgaWYgKHkgPT0gRGF5c1RhYmxlLl9XZWVrcyAtIDEpIHsK
LSAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX21heWJlU2V0TmV4dE1vbnRoKCkpCisgICAgICAg
ICAgICAgICAgaWYgKCF0aGlzLl9tYXliZVNldE5leHRNb250aChDYWxlbmRhclBpY2tlci5OYXZp
Z2F0aW9uQmVoYXZpb3VyLkFuaW1hdGUpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICAgICAgeSA9IDA7CiAgICAgICAgICAgICB9IGVsc2UKQEAgLTEzNDEsNyArMTUz
Niw3IEBAIERheXNUYWJsZS5wcm90b3R5cGUuX2hhbmRsZUtleSA9IGZ1bmN0aW9uKGV2ZW50KSB7
CiAKICAgICB9IGVsc2UgaWYgKGtleSA9PSAiRG93biIpIHsKICAgICAgICAgaWYgKHkgPT0gRGF5
c1RhYmxlLl9XZWVrcyAtIDEpIHsKLSAgICAgICAgICAgIGlmICghdGhpcy5fbWF5YmVTZXROZXh0
TW9udGgoKSkKKyAgICAgICAgICAgIGlmICghdGhpcy5fbWF5YmVTZXROZXh0TW9udGgoQ2FsZW5k
YXJQaWNrZXIuTmF2aWdhdGlvbkJlaGF2aW91ci5BbmltYXRlKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICB5ID0gMDsKICAgICAgICAgfSBlbHNlCkBAIC0xMzQ5LDIwICsx
NTQ0LDE4IEBAIERheXNUYWJsZS5wcm90b3R5cGUuX2hhbmRsZUtleSA9IGZ1bmN0aW9uKGV2ZW50
KSB7CiAgICAgICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uKGV2ZW50LCB4LCB5KTsKIAogICAgIH0g
ZWxzZSBpZiAoa2V5ID09ICJQYWdlVXAiKSB7Ci0gICAgICAgIGlmICghdGhpcy5fbWF5YmVTZXRQ
cmV2aW91c01vbnRoKCkpCisgICAgICAgIGlmICghdGhpcy5fbWF5YmVTZXRQcmV2aW91c01vbnRo
KENhbGVuZGFyUGlja2VyLk5hdmlnYXRpb25CZWhhdmlvdXIuQW5pbWF0ZSB8IENhbGVuZGFyUGlj
a2VyLk5hdmlnYXRpb25CZWhhdmlvdXIuS2VlcFNlbGVjdGlvblBvc2l0aW9uKSkKICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb24oZXZlbnQsIHgsIHkpOwot
CisgICAgICAgIGV2ZW50SGFuZGxlZCA9IHRydWU7CiAgICAgfSBlbHNlIGlmIChrZXkgPT0gIlBh
Z2VEb3duIikgewotICAgICAgICBpZiAoIXRoaXMuX21heWJlU2V0TmV4dE1vbnRoKCkpCisgICAg
ICAgIGlmICghdGhpcy5fbWF5YmVTZXROZXh0TW9udGgoQ2FsZW5kYXJQaWNrZXIuTmF2aWdhdGlv
bkJlaGF2aW91ci5BbmltYXRlIHwgQ2FsZW5kYXJQaWNrZXIuTmF2aWdhdGlvbkJlaGF2aW91ci5L
ZWVwU2VsZWN0aW9uUG9zaXRpb24pKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0aGlz
LnVwZGF0ZVNlbGVjdGlvbihldmVudCwgeCwgeSk7Ci0KLSAgICB9IGVsc2UgaWYgKHRoaXMuX2hh
c1NlbGVjdGlvbigpICYmIGtleSA9PSAiRW50ZXIiKSB7Ci0gICAgICAgIHZhciBkYXlOb2RlID0g
dGhpcy5fZGF5c1t5XVt4XTsKLSAgICAgICAgaWYgKGRheU5vZGUuY2xhc3NMaXN0LmNvbnRhaW5z
KENsYXNzTmFtZXMuQXZhaWxhYmxlKSkgewotICAgICAgICAgICAgdGhpcy5waWNrZXIuc3VibWl0
VmFsdWUoZGF5Tm9kZS5kYXRhc2V0LnN1Ym1pdFZhbHVlKTsKLSAgICAgICAgICAgIGV2ZW50LnN0
b3BQcm9wYWdhdGlvbigpOworICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKKyAgICAg
ICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKKyAgICB9IGVsc2UgaWYgKGZpcnN0Tm9kZUluU2Vs
ZWN0ZWRSYW5nZSAmJiBrZXkgPT0gIkVudGVyIikgeworICAgICAgICBpZiAoZmlyc3ROb2RlSW5T
ZWxlY3RlZFJhbmdlLmNsYXNzTGlzdC5jb250YWlucyhDbGFzc05hbWVzLkF2YWlsYWJsZSkpIHsK
KyAgICAgICAgICAgIHRoaXMucGlja2VyLnN1Ym1pdFZhbHVlKGZpcnN0Tm9kZUluU2VsZWN0ZWRS
YW5nZS5kYXRhc2V0LnN1Ym1pdFZhbHVlKTsKKyAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZh
dWx0KCk7CiAgICAgICAgIH0KIAogICAgIH0gZWxzZSBpZiAoa2V5ID09ICJVKzAwNTQiKSB7IC8v
ICd0JwpAQCAtMTQxMiw3ICsxNjA1LDcgQEAgTW9udGhQaWNrZXJEYXlzVGFibGUucHJvdG90eXBl
Ll9tYXJrUmFuZ2VBc1NlbGVjdGVkID0gZnVuY3Rpb24obW9udGgpIHsKIE1vbnRoUGlja2VyRGF5
c1RhYmxlLnByb3RvdHlwZS5zZWxlY3RSYW5nZSA9IGZ1bmN0aW9uKG1vbnRoKSB7CiAgICAgdGhp
cy5fZGVzZWxlY3QoKTsKICAgICBpZiAodGhpcy5zdGFydERhdGUoKSA+PSBtb250aC5lbmREYXRl
KCkgfHwgdGhpcy5lbmREYXRlKCkgPD0gbW9udGguc3RhcnREYXRlKCkpCi0gICAgICAgIHRoaXMu
cGlja2VyLnNob3dNb250aChtb250aCwgdHJ1ZSk7CisgICAgICAgIHRoaXMucGlja2VyLnNob3dN
b250aChtb250aCwgQ2FsZW5kYXJQaWNrZXIuTmF2aWdhdGlvbkJlaGF2aW91ci5BbmltYXRlKTsK
ICAgICB0aGlzLl9tYXJrUmFuZ2VBc1NlbGVjdGVkKG1vbnRoKTsKIH07CiAKQEAgLTE0MjEsNyAr
MTYxNCw3IEBAIE1vbnRoUGlja2VyRGF5c1RhYmxlLnByb3RvdHlwZS5zZWxlY3RSYW5nZSA9IGZ1
bmN0aW9uKG1vbnRoKSB7CiAgKi8KIE1vbnRoUGlja2VyRGF5c1RhYmxlLnByb3RvdHlwZS5zZWxl
Y3RSYW5nZUFuZFNob3dFbnRpcmVSYW5nZSA9IGZ1bmN0aW9uKG1vbnRoKSB7CiAgICAgdGhpcy5f
ZGVzZWxlY3QoKTsKLSAgICB0aGlzLnBpY2tlci5zaG93TW9udGgobW9udGgsIHRydWUpOworICAg
IHRoaXMucGlja2VyLnNob3dNb250aChtb250aCwgQ2FsZW5kYXJQaWNrZXIuTmF2aWdhdGlvbkJl
aGF2aW91ci5BbmltYXRlKTsKICAgICB0aGlzLl9tYXJrUmFuZ2VBc1NlbGVjdGVkKG1vbnRoKTsK
IH07CiAKQEAgLTE0NDQsMTUgKzE2MzcsMTIgQEAgTW9udGhQaWNrZXJEYXlzVGFibGUucHJvdG90
eXBlLl9oYW5kbGVLZXkgPSBmdW5jdGlvbihldmVudCkgewogICAgIHZhciBldmVudEhhbmRsZWQg
PSBmYWxzZTsKICAgICB2YXIgY3VycmVudE1vbnRoID0gdGhpcy5waWNrZXIuY3VycmVudE1vbnRo
KCk7CiAgICAgdmFyIGZpcnN0Tm9kZUluU2VsZWN0ZWRSYW5nZSA9IHRoaXMuX2ZpcnN0Tm9kZUlu
U2VsZWN0ZWRSYW5nZSgpOworICAgIHZhciBzZWxlY3RlZE1vbnRoID0gdGhpcy5fcmFuZ2VGb3JO
b2RlKGZpcnN0Tm9kZUluU2VsZWN0ZWRSYW5nZSk7CiAgICAgaWYgKCFmaXJzdE5vZGVJblNlbGVj
dGVkUmFuZ2UKICAgICAgICAgJiYgKGtleSA9PSAiUmlnaHQiIHx8IGtleSA9PSAiTGVmdCIgfHwg
a2V5ID09ICJVcCIgfHwga2V5ID09ICJEb3duIiB8fCBrZXkgPT0gIlBhZ2VVcCIgfHwga2V5ID09
ICJQYWdlRG93biIpKSB7CiAgICAgICAgIHRoaXMuc2VsZWN0UmFuZ2UoY3VycmVudE1vbnRoKTsK
LSAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7Ci0gICAgICAgIGV2ZW50LnByZXZlbnRE
ZWZhdWx0KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgdmFyIHNlbGVjdGVkTW9udGgg
PSB0aGlzLl9yYW5nZUZvck5vZGUoZmlyc3ROb2RlSW5TZWxlY3RlZFJhbmdlKTsKLSAgICBpZiAo
a2V5ID09IChnbG9iYWwucGFyYW1zLmlzQ2FsZW5kYXJSVEwgPyAiUmlnaHQiIDogIkxlZnQiKSB8
fCBrZXkgPT0gIlVwIiB8fCBrZXkgPT0gIlBhZ2VVcCIpIHsKKyAgICAgICAgZXZlbnRIYW5kbGVk
ID0gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKGtleSA9PSAoZ2xvYmFsLnBhcmFtcy5pc0NhbGVuZGFy
UlRMID8gIlJpZ2h0IiA6ICJMZWZ0IikgfHwga2V5ID09ICJVcCIgfHwga2V5ID09ICJQYWdlVXAi
KSB7CiAgICAgICAgIGlmIChzZWxlY3RlZE1vbnRoLnZhbHVlT2YoKSA+IGN1cnJlbnRNb250aC52
YWx1ZU9mKCkpCiAgICAgICAgICAgICB0aGlzLnNlbGVjdFJhbmdlQW5kU2hvd0VudGlyZVJhbmdl
KGN1cnJlbnRNb250aCk7CiAgICAgICAgIGVsc2UKQEAgLTE0NjQsOSArMTY1NCw5IEBAIE1vbnRo
UGlja2VyRGF5c1RhYmxlLnByb3RvdHlwZS5faGFuZGxlS2V5ID0gZnVuY3Rpb24oZXZlbnQpIHsK
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgdGhpcy5zZWxlY3RSYW5nZUFuZFNob3dFbnRpcmVS
YW5nZShjdXJyZW50TW9udGgubmV4dCgpKTsKICAgICAgICAgZXZlbnRIYW5kbGVkID0gdHJ1ZTsK
LSAgICB9IGVsc2UgaWYgKHRoaXMuX2hhc1NlbGVjdGlvbigpICYmIGtleSA9PSAiRW50ZXIiKSB7
Ci0gICAgICAgIGlmIChjdXJyZW50U2VsZWN0aW9uKSB7Ci0gICAgICAgICAgICB0aGlzLnBpY2tl
ci5zdWJtaXRWYWx1ZShjdXJyZW50U2VsZWN0aW9uLnRvU3RyaW5nKCkpOworICAgIH0gZWxzZSBp
ZiAoc2VsZWN0ZWRNb250aCAmJiBrZXkgPT0gIkVudGVyIikgeworICAgICAgICBpZiAoZmlyc3RO
b2RlSW5TZWxlY3RlZFJhbmdlLmNsYXNzTGlzdC5jb250YWlucyhDbGFzc05hbWVzLkF2YWlsYWJs
ZSkpIHsKKyAgICAgICAgICAgIHRoaXMucGlja2VyLnN1Ym1pdFZhbHVlKHNlbGVjdGVkTW9udGgu
dG9TdHJpbmcoKSk7CiAgICAgICAgICAgICBldmVudEhhbmRsZWQgPSB0cnVlOwogICAgICAgICB9
CiAgICAgfSBlbHNlIGlmIChrZXkgPT0gIlUrMDA1NCIpIHsgLy8gJ3QnCkBAIC0xNDgwLDYgKzE2
NzAsMTE2IEBAIE1vbnRoUGlja2VyRGF5c1RhYmxlLnByb3RvdHlwZS5faGFuZGxlS2V5ID0gZnVu
Y3Rpb24oZXZlbnQpIHsKIH07CiAKIC8qKgorICogQGNvbnN0cnVjdG9yCisgKiBAcGFyYW17IUNh
bGVuZGFyUGlja2VyfSBwaWNrZXIKKyAqLworZnVuY3Rpb24gV2Vla1BpY2tlckRheXNUYWJsZShw
aWNrZXIpIHsKKyAgICBEYXlzVGFibGUuY2FsbCh0aGlzLCBwaWNrZXIpOworfQorV2Vla1BpY2tl
ckRheXNUYWJsZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKERheXNUYWJsZS5wcm90b3R5cGUp
OworCisvKioKKyAqIEBwYXJhbSB7IVdlZWt9IHdlZWsKKyAqLworV2Vla1BpY2tlckRheXNUYWJs
ZS5wcm90b3R5cGUuX21hcmtSYW5nZUFzU2VsZWN0ZWQgPSBmdW5jdGlvbih3ZWVrKSB7CisgICAg
dmFyIHdlZWtTdHJpbmcgPSB3ZWVrLnRvU3RyaW5nKCk7CisgICAgZm9yICh2YXIgdyA9IDA7IHcg
PCBEYXlzVGFibGUuX1dlZWtzOyB3KyspIHsKKyAgICAgICAgZm9yICh2YXIgZCA9IDA7IGQgPCA3
OyBkKyspIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9kYXlzW3ddW2RdLmRhdGFzZXQud2Vla1Zh
bHVlID09IHdlZWtTdHJpbmcpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9kYXlzW3ddW2RdLmNs
YXNzTGlzdC5hZGQoQ2xhc3NOYW1lcy5TZWxlY3RlZCk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl93ZWVrTnVtYmVycy5sZW5n
dGg7ICsraSkgeworICAgICAgICBpZiAodGhpcy5fd2Vla051bWJlcnNbaV0uZGF0YXNldC53ZWVr
VmFsdWUgPT09IHdlZWtTdHJpbmcpIHsKKyAgICAgICAgICAgIHRoaXMuX3dlZWtOdW1iZXJzW2ld
LmNsYXNzTGlzdC5hZGQoQ2xhc3NOYW1lcy5TZWxlY3RlZCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgIH0KK307CisKKy8qKgorICogQHBhcmFtIHshV2Vla30gd2VlaworICov
CitXZWVrUGlja2VyRGF5c1RhYmxlLnByb3RvdHlwZS5zZWxlY3RSYW5nZSA9IGZ1bmN0aW9uKHdl
ZWspIHsKKyAgICB0aGlzLl9kZXNlbGVjdCgpOworICAgIHZhciB3ZWVrU3RhcnREYXRlID0gd2Vl
ay5zdGFydERhdGUoKTsKKyAgICB2YXIgd2Vla0VuZERhdGUgPSB3ZWVrLmVuZERhdGUoKTsKKyAg
ICBpZiAodGhpcy5zdGFydERhdGUoKSA+PSB3ZWVrRW5kRGF0ZSkKKyAgICAgICAgdGhpcy5waWNr
ZXIuc2hvd01vbnRoKE1vbnRoLmNyZWF0ZUZyb21EYXRlKHdlZWtFbmREYXRlKSwgQ2FsZW5kYXJQ
aWNrZXIuTmF2aWdhdGlvbkJlaGF2aW91ci5BbmltYXRlKTsKKyAgICBlbHNlIGlmICh0aGlzLmVu
ZERhdGUoKSA8PSB3ZWVrU3RhcnREYXRlKQorICAgICAgICB0aGlzLnBpY2tlci5zaG93TW9udGgo
TW9udGguY3JlYXRlRnJvbURhdGUod2Vla1N0YXJ0RGF0ZSksIENhbGVuZGFyUGlja2VyLk5hdmln
YXRpb25CZWhhdmlvdXIuQW5pbWF0ZSk7CisgICAgdGhpcy5fbWFya1JhbmdlQXNTZWxlY3RlZCh3
ZWVrKTsKK307CisKKy8qKgorICogQHBhcmFtIHshV2Vla30gd2VlaworICovCitXZWVrUGlja2Vy
RGF5c1RhYmxlLnByb3RvdHlwZS5zZWxlY3RSYW5nZUFuZFNob3dFbnRpcmVSYW5nZSA9IGZ1bmN0
aW9uKHdlZWspIHsKKyAgICB0aGlzLl9kZXNlbGVjdCgpOworICAgIHZhciB3ZWVrU3RhcnREYXRl
ID0gd2Vlay5zdGFydERhdGUoKTsKKyAgICB2YXIgd2Vla0VuZERhdGUgPSB3ZWVrLmVuZERhdGUo
KTsKKyAgICBpZiAodGhpcy5zdGFydERhdGUoKSA+IHdlZWtTdGFydERhdGUpCisgICAgICAgIHRo
aXMucGlja2VyLnNob3dNb250aChNb250aC5jcmVhdGVGcm9tRGF0ZSh3ZWVrU3RhcnREYXRlKSwg
Q2FsZW5kYXJQaWNrZXIuTmF2aWdhdGlvbkJlaGF2aW91ci5BbmltYXRlKTsKKyAgICBlbHNlIGlm
ICh0aGlzLmVuZERhdGUoKSA8IHdlZWtFbmREYXRlKQorICAgICAgICB0aGlzLnBpY2tlci5zaG93
TW9udGgoTW9udGguY3JlYXRlRnJvbURhdGUod2Vla0VuZERhdGUpLCBDYWxlbmRhclBpY2tlci5O
YXZpZ2F0aW9uQmVoYXZpb3VyLkFuaW1hdGUpOworICAgIHRoaXMuX21hcmtSYW5nZUFzU2VsZWN0
ZWQod2Vlayk7Cit9OworCisvKioKKyAqIEBwYXJhbSB7IUVsZW1lbnR9IGRheU5vZGUKKyAqIEBy
ZXR1cm4gez9XZWVrfQorICovCitXZWVrUGlja2VyRGF5c1RhYmxlLnByb3RvdHlwZS5fcmFuZ2VG
b3JOb2RlID0gZnVuY3Rpb24oZGF5Tm9kZSkgeworICAgIGlmICghZGF5Tm9kZSkKKyAgICAgICAg
cmV0dXJuIG51bGw7CisgICAgcmV0dXJuIFdlZWsucGFyc2UoZGF5Tm9kZS5kYXRhc2V0LndlZWtW
YWx1ZSk7Cit9OworCisvKioKKyAqIEBwYXJhbSB7IUV2ZW50fSBldmVudAorICovCitXZWVrUGlj
a2VyRGF5c1RhYmxlLnByb3RvdHlwZS5faGFuZGxlS2V5ID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAg
ICB0aGlzLnBpY2tlci5tYXliZVVwZGF0ZUZvY3VzU3R5bGUoKTsKKyAgICB2YXIga2V5ID0gZXZl
bnQua2V5SWRlbnRpZmllcjsKKyAgICB2YXIgZXZlbnRIYW5kbGVkID0gZmFsc2U7CisgICAgdmFy
IGN1cnJlbnRNb250aCA9IHRoaXMucGlja2VyLmN1cnJlbnRNb250aCgpOworICAgIHZhciBmaXJz
dE5vZGVJblNlbGVjdGVkUmFuZ2UgPSB0aGlzLl9maXJzdE5vZGVJblNlbGVjdGVkUmFuZ2UoKTsK
KyAgICB2YXIgc2VsZWN0ZWRXZWVrID0gdGhpcy5fcmFuZ2VGb3JOb2RlKGZpcnN0Tm9kZUluU2Vs
ZWN0ZWRSYW5nZSk7CisgICAgaWYgKCFmaXJzdE5vZGVJblNlbGVjdGVkUmFuZ2UKKyAgICAgICAg
JiYgKGtleSA9PSAiUmlnaHQiIHx8IGtleSA9PSAiTGVmdCIgfHwga2V5ID09ICJVcCIgfHwga2V5
ID09ICJEb3duIiB8fCBrZXkgPT0gIlBhZ2VVcCIgfHwga2V5ID09ICJQYWdlRG93biIpKSB7Cisg
ICAgICAgIC8vIFB1dCB0aGUgc2VsZWN0aW9uIG9uIGEgY2VudGVyIGNlbGwuCisgICAgICAgIHRo
aXMuX3NlbGVjdFJhbmdlQXRQb3NpdGlvbigzLCBNYXRoLmZsb29yKERheXNUYWJsZS5fV2Vla3Mg
LyAyIC0gMSkpOworICAgIH0gZWxzZSBpZiAoa2V5ID09IChnbG9iYWwucGFyYW1zLmlzQ2FsZW5k
YXJSVEwgPyAiUmlnaHQiIDogIkxlZnQiKSB8fCBrZXkgPT0gIlVwIikgeworICAgICAgICB0aGlz
LnNlbGVjdFJhbmdlQW5kU2hvd0VudGlyZVJhbmdlKHNlbGVjdGVkV2Vlay5wcmV2aW91cygpKTsK
KyAgICAgICAgZXZlbnRIYW5kbGVkID0gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKGtleSA9PSAoZ2xv
YmFsLnBhcmFtcy5pc0NhbGVuZGFyUlRMID8gIkxlZnQiIDogIlJpZ2h0IikgfHwga2V5ID09ICJE
b3duIikgeworICAgICAgICB0aGlzLnNlbGVjdFJhbmdlQW5kU2hvd0VudGlyZVJhbmdlKHNlbGVj
dGVkV2Vlay5uZXh0KCkpOworICAgICAgICBldmVudEhhbmRsZWQgPSB0cnVlOworICAgIH0gZWxz
ZSBpZiAoa2V5ID09ICJQYWdlVXAiKSB7CisgICAgICAgIGlmICghdGhpcy5fbWF5YmVTZXRQcmV2
aW91c01vbnRoKENhbGVuZGFyUGlja2VyLk5hdmlnYXRpb25CZWhhdmlvdXIuQW5pbWF0ZSB8IENh
bGVuZGFyUGlja2VyLk5hdmlnYXRpb25CZWhhdmlvdXIuS2VlcFNlbGVjdGlvblBvc2l0aW9uKSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZXZlbnRIYW5kbGVkID0gdHJ1ZTsKKyAgICB9
IGVsc2UgaWYgKGtleSA9PSAiUGFnZURvd24iKSB7CisgICAgICAgIGlmICghdGhpcy5fbWF5YmVT
ZXROZXh0TW9udGgoQ2FsZW5kYXJQaWNrZXIuTmF2aWdhdGlvbkJlaGF2aW91ci5BbmltYXRlIHwg
Q2FsZW5kYXJQaWNrZXIuTmF2aWdhdGlvbkJlaGF2aW91ci5LZWVwU2VsZWN0aW9uUG9zaXRpb24p
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBldmVudEhhbmRsZWQgPSB0cnVlOworICAg
IH0gZWxzZSBpZiAoc2VsZWN0ZWRXZWVrICYmIGtleSA9PSAiRW50ZXIiKSB7CisgICAgICAgIGlm
IChmaXJzdE5vZGVJblNlbGVjdGVkUmFuZ2UuY2xhc3NMaXN0LmNvbnRhaW5zKENsYXNzTmFtZXMu
QXZhaWxhYmxlKSkgeworICAgICAgICAgICAgdGhpcy5waWNrZXIuc3VibWl0VmFsdWUoc2VsZWN0
ZWRXZWVrLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgZXZlbnRIYW5kbGVkID0gdHJ1ZTsKKyAg
ICAgICAgfQorICAgIH0gZWxzZSBpZiAoa2V5ID09ICJVKzAwNTQiKSB7IC8vICd0JworICAgICAg
ICB0aGlzLnNlbGVjdFJhbmdlQW5kU2hvd0VudGlyZVJhbmdlKFdlZWsuY3JlYXRlRnJvbVRvZGF5
KCkpOworICAgICAgICBldmVudEhhbmRsZWQgPSB0cnVlOworICAgIH0KKyAgICBpZiAoZXZlbnRI
YW5kbGVkKSB7CisgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOworICAgICAgICBldmVu
dC5wcmV2ZW50RGVmYXVsdCgpOworICAgIH0KK307CisKKy8qKgogICogQHBhcmFtIHshRXZlbnR9
IGV2ZW50CiAgKi8KIENhbGVuZGFyUGlja2VyLnByb3RvdHlwZS5faGFuZGxlQm9keUtleURvd24g
PSBmdW5jdGlvbihldmVudCkgewpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGE1NjkyMzNhNWNiOWZkZjE3ODNiZDFiYWQ1MWM4
NDI1NjhmOWZlNTQuLjA1ZTVhZmQ2MzQzMzRmNDZhMmUxZTg1NTJkNDA3NTIxMjJhNTg3YTEgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxMiBAQAorMjAxMi0xMS0wOCAgS2Vpc2hpIEhhdHRvcmkgIDxrZWlzaGlA
d2Via2l0Lm9yZz4KKworICAgICAgICBJbXBsZW1lbnQgd2VlayBwaWNraW5nIHRvIGNhbGVuZGFy
IHBpY2tlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTAxNDQ5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9jaHJvbWl1bS9mYXN0L2Zvcm1zL2NhbGVuZGFyLXBpY2tlci9jYWxlbmRhci1w
aWNrZXItbW91c2Utb3BlcmF0aW9ucy5odG1sOiBOZWVkcyB0byBiZSBjaGFuZ2VkIGJlY2F1c2Ug
d2UgY2hhbmdlZCBEYXlzVGFibGUgRE9NLgorCiAyMDEyLTExLTA2ICBEYW4gQmVhbSAgPGRiZWFt
QGNocm9taXVtLm9yZz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKIAogICAgICAg
ICBFbmFibGUgUkVRVUVTVF9BVVRPQ09NUExFVEUgZm9yIGNocm9taXVtIHBvcnQKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2Zhc3QvZm9ybXMvY2FsZW5kYXItcGlj
a2VyL2NhbGVuZGFyLXBpY2tlci1tb3VzZS1vcGVyYXRpb25zLmh0bWwgYi9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9jaHJvbWl1bS9mYXN0L2Zvcm1zL2NhbGVuZGFyLXBpY2tlci9jYWxlbmRhci1waWNr
ZXItbW91c2Utb3BlcmF0aW9ucy5odG1sCmluZGV4IGY4MDFhNDdhYWQzNTI3YmZkNTM0YzY2Mzcz
ZmM1ZWQ0ZmE3NDJlODAuLmNiMTI1NjNkYjQ5M2U0M2I3YWIyYjYwYmFmODZiYmMzOTUxYTM4NTgg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2Zhc3QvZm9ybXMvY2Fs
ZW5kYXItcGlja2VyL2NhbGVuZGFyLXBpY2tlci1tb3VzZS1vcGVyYXRpb25zLmh0bWwKKysrIGIv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vZmFzdC9mb3Jtcy9jYWxlbmRhci1waWNrZXIv
Y2FsZW5kYXItcGlja2VyLW1vdXNlLW9wZXJhdGlvbnMuaHRtbApAQCAtMjMsMTEgKzIzLDExIEBA
IGZ1bmN0aW9uIHRlc3QoKSB7CiAgICAgc2hvdWxkQmUoJ2N1cnJlbnRNb250aCgpJywgJyIyMDAw
LTAxIicpOwogCiAgICAgZGVidWcoJ0NoZWNrIHRoYXQgaG92ZXJpbmcgb3ZlciBhbiBlbnRyeSBo
aWdobGlnaHRzIGl0LicpOwotICAgIGhvdmVyT3ZlckVsZW1lbnQocG9wdXBXaW5kb3cuZG9jdW1l
bnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiZGF5IilbNV0pOworICAgIGhvdmVyT3ZlckVsZW1l
bnQocG9wdXBXaW5kb3cuZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiLmRheTpub3QoLndlZWst
Y29sdW1uKSIpWzVdKTsKICAgICBzaG91bGRCZSgnc2VsZWN0ZWREYXRlKCknLCAnIjE5OTktMTIt
MzEiJyk7CiAgICAgc2hvdWxkQmUoJ2N1cnJlbnRNb250aCgpJywgJyIyMDAwLTAxIicpOwogCi0g
ICAgaG92ZXJPdmVyRWxlbWVudChwb3B1cFdpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xh
c3NOYW1lKCJkYXkiKVs5XSk7CisgICAgaG92ZXJPdmVyRWxlbWVudChwb3B1cFdpbmRvdy5kb2N1
bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIuZGF5Om5vdCgud2Vlay1jb2x1bW4pIilbOV0pOwogICAg
IHNob3VsZEJlKCdzZWxlY3RlZERhdGUoKScsICciMjAwMC0wMS0wNCInKTsKICAgICBzaG91bGRC
ZSgnY3VycmVudE1vbnRoKCknLCAnIjIwMDAtMDEiJyk7CiAKQEAgLTQxLDcgKzQxLDcgQEAgZnVu
Y3Rpb24gdGVzdCgpIHsKICAgICBzaG91bGRCZVVuZGVmaW5lZCgnc2VsZWN0ZWREYXRlKCknKTsK
IAogICAgIGRlYnVnKCdDaGVjayB0aGF0IG1vdXNlIGNsaWNrIGNsb3NlcyB0aGUgcG9wdXAgYW5k
IHNldHMgdGhlIHZhbHVlLicpOwotICAgIGNsaWNrRWxlbWVudChwb3B1cFdpbmRvdy5kb2N1bWVu
dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJkYXkiKVs2XSk7CisgICAgY2xpY2tFbGVtZW50KHBv
cHVwV2luZG93LmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIi5kYXk6bm90KC53ZWVrLWNvbHVt
bikiKVs2XSk7CiAgICAgc2hvdWxkQmVOdWxsKCdkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibW9j
ay1wYWdlLXBvcHVwIiknKTsKICAgICBzaG91bGRCZSgnZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
ImRhdGUiKS52YWx1ZScsICciMjAwMC0wMi0wNSInKTsKIApkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9n
IGIvQ2hhbmdlTG9nCmluZGV4IGYzZDE2NDRiNWJhODNkMDdhOGEyZjMyNTBkMGJlNjhlZjA0YmNh
MzcuLjZiNGIzMTI0NjJmYmY2YjY4ZThkNWI3Yjc2MzI0YTdhNDk5NzZkNzMgMTAwNjQ0Ci0tLSBh
L0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAxMi0xMS0wOCAg
S2Vpc2hpIEhhdHRvcmkgIDxrZWlzaGlAd2Via2l0Lm9yZz4KKworICAgICAgICBJbXBsZW1lbnQg
d2VlayBwaWNraW5nIHRvIGNhbGVuZGFyIHBpY2tlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAxNDQ5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBNYW51YWxUZXN0cy9mb3Jtcy9jYWxlbmRhci1waWNr
ZXIuaHRtbDogQWRkZWQgdGVzdCBmb3Igd2VlayBwaWNrZXIuCisKIDIwMTItMTEtMDYgIEtlaXNo
aSBIYXR0b3JpICA8a2Vpc2hpQHdlYmtpdC5vcmc+CiAKICAgICAgICAgSW1wbGVtZW50IG1vbnRo
IHBpY2tpbmcgdG8gY2FsZW5kYXIgcGlja2VyCmRpZmYgLS1naXQgYS9NYW51YWxUZXN0cy9mb3Jt
cy9jYWxlbmRhci1waWNrZXIuaHRtbCBiL01hbnVhbFRlc3RzL2Zvcm1zL2NhbGVuZGFyLXBpY2tl
ci5odG1sCmluZGV4IDU1MjA3ZTRkM2RiNzUxOGUxYjhmNTZmYmUwODAyMWI1NGYyNjhiZGMuLjc5
MGMzZDU1YWFhOTc5OTVjZjkzNjQyMTI5NTNkMjI3N2ExMzQ0NWYgMTAwNjQ0Ci0tLSBhL01hbnVh
bFRlc3RzL2Zvcm1zL2NhbGVuZGFyLXBpY2tlci5odG1sCisrKyBiL01hbnVhbFRlc3RzL2Zvcm1z
L2NhbGVuZGFyLXBpY2tlci5odG1sCkBAIC0yNyw2ICsyNyw3IEBAIGlmcmFtZSB7CiAgPG9wdGlv
bj53aXRoIGxvbmcgZGF0YWxpc3Q8L29wdGlvbj4KICA8b3B0aW9uPkFyYWJpYyB3aXRoIGRhdGFs
aXN0PC9vcHRpb24+CiAgPG9wdGlvbj5BcmFiaWMgd2l0aCBsb25nIGRhdGFsaXN0PC9vcHRpb24+
CisgPG9wdGlvbj5XZWVrPC9vcHRpb24+CiAgPG9wdGlvbj5Nb250aDwvb3B0aW9uPgogPC9zZWxl
Y3Q+CiAKQEAgLTIzOSw2ICsyNDAsMjIgQEAgdmFyIGFyYWJpY0xvbmdEYXRhbGlzdEFyZ3VtZW50
cyA9IHsKICAgICBzdWdnZXN0aW9uSGlnaGxpZ2h0Q29sb3I6ICIjMDAwMGZmIiwKICAgICBzdWdn
ZXN0aW9uSGlnaGxpZ2h0VGV4dENvbG9yOiAiI2ZmZmZmZiIKIH07Cit2YXIgd2Vla0FyZ3VtZW50
cyA9IHsKKyAgICBsb2NhbGU6ICdlbi1VUycsCisgICAgbW9udGhMYWJlbHMgOiBbJ0phbnVhcnkn
LCAnRmVicnVhcnknLCAnTWFyY2gnLCAnQXByaWwnLCAnTWF5JywgJ0p1bmUnLAorICAgICdKdWx5
JywgJ0F1Z3VzdCcsICdTZXB0ZW1iZXInLCAnT2N0b2JlcicsICdOb3ZlbWJlcicsICdEZWNlbWJl
ciddLAorICAgIGRheUxhYmVscyA6IFsnU3VuJywgJ01vbicsICdUdWUnLCAnV2VkJywgJ1RodScs
ICdGcmknLCAnU2F0J10sCisgICAgdG9kYXlMYWJlbCA6ICdUaGlzIFdlZWsnLAorICAgIGNsZWFy
TGFiZWwgOiAnQ2xlYXInLAorICAgIGNhbmNlbExhYmVsIDogJ0NhbmNlbCcsCisgICAgd2Vla0xh
YmVsOiAnV2VlaycsCisgICAgd2Vla1N0YXJ0RGF5IDogMCwKKyAgICBzdGVwIDogIjYwNDgwMDAw
MCIsCisgICAgc3RlcEJhc2U6ICItMjU5MjAwMDAwIiwKKyAgICBjdXJyZW50VmFsdWUgOiAnMjAw
MC1XMDEnLAorICAgIG1heCA6ICcyMDk5LVcwMycsCisgICAgbW9kZTogIndlZWsiCit9OwogdmFy
IG1vbnRoQXJndW1lbnRzID0gewogICAgIGxvY2FsZTogJ2VuLVVTJywKICAgICBtb250aExhYmVs
cyA6IFsnSmFudWFyeScsICdGZWJydWFyeScsICdNYXJjaCcsICdBcHJpbCcsICdNYXknLCAnSnVu
ZScsCkBAIC0zMjcsNiArMzQ0LDkgQEAgZnVuY3Rpb24gc2VsZWN0ZWQoc2VsZWN0KSB7CiAgICAg
ICAgIG9wZW5DYWxlbmRhcihhcmFiaWNMb25nRGF0YWxpc3RBcmd1bWVudHMpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIDc6CisgICAgICAgIG9wZW5DYWxlbmRhcih3ZWVrQXJndW1lbnRzKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSA4OgogICAgICAgICBvcGVuQ2FsZW5kYXIobW9udGhB
cmd1bWVudHMpOwogICAgICAgICBicmVhazsKICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>172927</attachid>
            <date>2012-11-07 21:24:05 -0800</date>
            <delta_ts>2012-11-07 21:25:39 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101449-20121108142215.patch</filename>
            <type>text/plain</type>
            <size>37613</size>
            <attacher name="Keishi Hattori">keishi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMzNzIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjI2MzdkZDI0ZjcxOWMz
MmFlYmQ0OWNjYjkyNmMzNmU4ZWY2ZWY4Ni4uNDAyOGVlNmNkYzA4ZjliNjgzZTQ0MTg0NDk2NDEz
ZTBmY2E0OTM5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyIEBACisyMDEyLTExLTA4ICBLZWlz
aGkgSGF0dG9yaSAgPGtlaXNoaUB3ZWJraXQub3JnPgorCisgICAgICAgIEltcGxlbWVudCB3ZWVr
IHBpY2tpbmcgdG8gY2FsZW5kYXIgcGlja2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMDE0NDkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUaGlzIGFkZHMgd2VlayBwaWNrZXIgbW9kZSB0byBDYWxlbmRh
clBpY2tlci4KKworICAgICAgICBObyBuZXcgdGVzdHMuIFRlc3RzIHdpbGwgYmUgYWRkZWQgbGF0
ZXIgd2hlbiB0aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCBpbiBEUlQuCisKKyAgICAgICAgKiBSZXNv
dXJjZXMvcGFnZXBvcHVwcy9jYWxlbmRhclBpY2tlci5jc3M6CisgICAgICAgICgubW9udGgtbW9k
ZSAuZGF5KToKKyAgICAgICAgKC53ZWVrLW1vZGUgLmF2YWlsYWJsZS5kYXktc2VsZWN0ZWQubW9u
ZGF5KTogUm91bmRlZCBjb3JuZXJzIGFyb3VuZCB3ZWVrIHNlbGVjdGlvbi4KKyAgICAgICAgKC53
ZWVrLW1vZGUgLmF2YWlsYWJsZS5kYXktc2VsZWN0ZWQuc3VuZGF5KTogRGl0dG8uCisgICAgICAg
ICgud2Vlay1tb2RlIC51bmF2YWlsYWJsZS5kYXktc2VsZWN0ZWQpOgorICAgICAgICAoLndlZWst
bW9kZSAudW5hdmFpbGFibGUuZGF5LXNlbGVjdGVkLm1vbmRheSk6CisgICAgICAgICgud2Vlay1t
b2RlIC51bmF2YWlsYWJsZS5kYXktc2VsZWN0ZWQuc3VuZGF5KToKKyAgICAgICAgKC53ZWVrLW1v
ZGUgLndlZWstY29sdW1uLnVuYXZhaWxhYmxlLmRheS1zZWxlY3RlZCk6CisgICAgICAgICgud2Vl
ay1jb2x1bW4pOiBIaWRlIHdlZWsgY29sdW1uIHVubGVzcyBpbiB3ZWVrIG1vZGUuCisgICAgICAg
ICgud2Vlay1tb2RlIC53ZWVrLWNvbHVtbik6CisgICAgICAgICogUmVzb3VyY2VzL3BhZ2Vwb3B1
cHMvY2FsZW5kYXJQaWNrZXIuanM6CisgICAgICAgIChwYXJzZURhdGVTdHJpbmcpOiBTdXBwb3J0
IHdlZWsgc3RyaW5nLgorICAgICAgICAoV2Vlayk6CisgICAgICAgIChXZWVrLnBhcnNlKTogUGFy
c2VzICJ5eXl5LVd3dyIgc3RyaW5nLgorICAgICAgICAoV2Vlay5jcmVhdGVGcm9tRGF0ZSk6IENy
ZWF0ZXMgV2VlayBjb250YWluaW5nIGRhdGV0aW1lLgorICAgICAgICAoV2Vlay5jcmVhdGVGcm9t
VG9kYXkpOiBDcmVhdGVzIFdlZWsgY29udGFpbmluZyB0b2RheS4KKyAgICAgICAgKFdlZWsud2Vl
a09uZVN0YXJ0RGF0ZUZvclllYXIpOiBSZXR1cm5zIHRoZSBzdGFydCBkYXRlIGZvciB0aGUgZmly
c3Qgd2VlayBvZiB5ZWFyLgorICAgICAgICAoV2Vlay5udW1iZXJPZldlZWtzSW5ZZWFyKTogUmV0
dXJucyB0aGUgbnVtYmVyIG9mIHdlZWtzIGluIHllYXIuCisgICAgICAgIChXZWVrLl9udW1iZXJP
ZldlZWtzU2luY2VEYXRlKTogUmV0dXJucyBudW1iZXIgb2Ygd2Vla3Mgc2luY2UgYSBkYXRlLgor
ICAgICAgICAoV2Vlay5wcm90b3R5cGUuZXF1YWxzKTogUmV0dXJucyB0cnVlIGlmIHRoZSBXZWVr
cyBhcmUgdGhlIHNhbWUuCisgICAgICAgIChXZWVrLnByb3RvdHlwZS5wcmV2aW91cyk6IFJldHVy
bnMgdGhlIHByZXZpb3VzIFdlZWsuCisgICAgICAgIChXZWVrLnByb3RvdHlwZS5uZXh0KTogUmV0
dXJucyB0aGUgbmV4dCBXZWVrLgorICAgICAgICAoV2Vlay5wcm90b3R5cGUuc3RhcnREYXRlKTog
UmV0dXJucyBzdGFydCBkYXRldGltZSBvZiBXZWVrLgorICAgICAgICAoV2Vlay5wcm90b3R5cGUu
ZW5kRGF0ZSk6IFJldHVybnMgZW5kIGRhdGV0aW1lIG9mIFdlZWsuCisgICAgICAgIChXZWVrLnBy
b3RvdHlwZS52YWx1ZU9mKTogUmV0dXJucyB0aGUgbWlsbGlzZWNvbmRzIHNpbmNlIGVwb2NoLgor
ICAgICAgICAoV2Vlay5wcm90b3R5cGUudG9TdHJpbmcpOiBSZXR1cm5zIElTTyB3ZWVrIHN0cmlu
Zy4KKyAgICAgICAgKENhbGVuZGFyUGlja2VyKTogQWRkIHdlZWsgcGlja2VyIG1vZGUuCisgICAg
ICAgIChDYWxlbmRhclBpY2tlci5wcm90b3R5cGUuc2hvd01vbnRoKTogVXNlIE5hdmlnYXRpb25C
ZWhhdmlvdXIgaW5zdGVhZCBvZiBib29scy4KKyAgICAgICAgKFllYXJNb250aENvbnRyb2xsZXIu
cHJvdG90eXBlLmF0dGFjaFRvKTogRml4IGJ1Zy4KKyAgICAgICAgKFllYXJNb250aENvbnRyb2xs
ZXIucHJvdG90eXBlLm1vdmVSZWxhdGl2ZWx5KTogVXNlIG5ldyBzaG93TW9udGguCisgICAgICAg
IChEYXlzVGFibGUucHJvdG90eXBlLmF0dGFjaFRvKTogQWRkIHdlZWsgbnVtYmVyIGNvbHVtbi4K
KyAgICAgICAgKERheXNUYWJsZS5wcm90b3R5cGUuX3JlbmRlck1vbnRoKTogUmVuZGVyIHdlZWsg
bnVtYmVycy4KKyAgICAgICAgKERheXNUYWJsZS5wcm90b3R5cGUubmF2aWdhdGVUb01vbnRoKTog
UmVuZGVyIHdlZWsgbnVtYmVycy4KKyAgICAgICAgKERheXNUYWJsZS5wcm90b3R5cGUuc2VsZWN0
UmFuZ2UpOgorICAgICAgICAoRGF5c1RhYmxlLnByb3RvdHlwZS5fc2VsZWN0UmFuZ2VBdFBvc2l0
aW9uKTogV2VlayBudW1iZXIgbm9kZXMgaGF2ZSBhbiBwb3NpdGlvblggb2YgLTEuCisgICAgICAg
IChEYXlzVGFibGUucHJvdG90eXBlLl9tYXliZVNldFByZXZpb3VzTW9udGgpOgorICAgICAgICAo
RGF5c1RhYmxlLnByb3RvdHlwZS5fbWF5YmVTZXROZXh0TW9udGgpOgorICAgICAgICAoRGF5c1Rh
YmxlLnByb3RvdHlwZS5faGFuZGxlS2V5KToKKyAgICAgICAgKE1vbnRoUGlja2VyRGF5c1RhYmxl
LnByb3RvdHlwZS5zZWxlY3RSYW5nZSk6CisgICAgICAgIChNb250aFBpY2tlckRheXNUYWJsZS5w
cm90b3R5cGUuc2VsZWN0UmFuZ2VBbmRTaG93RW50aXJlUmFuZ2UpOgorICAgICAgICAoTW9udGhQ
aWNrZXJEYXlzVGFibGUucHJvdG90eXBlLl9oYW5kbGVLZXkpOgorICAgICAgICAoV2Vla1BpY2tl
ckRheXNUYWJsZSk6IEFkZGVkLgorICAgICAgICAoV2Vla1BpY2tlckRheXNUYWJsZS5wcm90b3R5
cGUuX21hcmtSYW5nZUFzU2VsZWN0ZWQpOiBNYXJrcyB3ZWVrIGFzIHNlbGVjdGVkLgorICAgICAg
ICAoV2Vla1BpY2tlckRheXNUYWJsZS5wcm90b3R5cGUuc2VsZWN0UmFuZ2UpOiBTZWxlY3RzIHdl
ZWsuCisgICAgICAgIChXZWVrUGlja2VyRGF5c1RhYmxlLnByb3RvdHlwZS5zZWxlY3RSYW5nZUFu
ZFNob3dFbnRpcmVSYW5nZSk6IFNlbGVjdHMgd2VlayBhbmQgbmF2aWdhdGUgdG8gc2hvdyBlbnRp
cmUgc2VsZWN0aW9uLgorICAgICAgICAoV2Vla1BpY2tlckRheXNUYWJsZS5wcm90b3R5cGUuX3Jh
bmdlRm9yTm9kZSk6IFJldHVybnMgV2VlayBmb3Igbm9kZS4KKyAgICAgICAgKFdlZWtQaWNrZXJE
YXlzVGFibGUucHJvdG90eXBlLl9oYW5kbGVLZXkpOgorCiAyMDEyLTExLTA2ICBLZWlzaGkgSGF0
dG9yaSAgPGtlaXNoaUB3ZWJraXQub3JnPgogCiAgICAgICAgIEltcGxlbWVudCBtb250aCBwaWNr
aW5nIHRvIGNhbGVuZGFyIHBpY2tlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUmVzb3Vy
Y2VzL3BhZ2Vwb3B1cHMvY2FsZW5kYXJQaWNrZXIuY3NzIGIvU291cmNlL1dlYkNvcmUvUmVzb3Vy
Y2VzL3BhZ2Vwb3B1cHMvY2FsZW5kYXJQaWNrZXIuY3NzCmluZGV4IGNhMWRiYjIyNWVmMDBmMWY1
MWM0ZDIxMWQzOTgwZDFlM2Q5ZmZkODcuLmMyMmUzOTY3NjE0YmU0ZTg1YjdhMWYwYzJkZDNlMDU3
ZWJhOGFiYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1Jlc291cmNlcy9wYWdlcG9wdXBz
L2NhbGVuZGFyUGlja2VyLmNzcworKysgYi9Tb3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMvcGFnZXBv
cHVwcy9jYWxlbmRhclBpY2tlci5jc3MKQEAgLTIyNSw4ICsyMjUsNTEgQEAgYm9keSB7CiAgICAg
LXdlYmtpdC10cmFuc2l0aW9uOiBub25lOwogfQogCisud2Vlay1tb2RlIC5kYXksCiAubW9udGgt
bW9kZSAuZGF5IHsKICAgICAtd2Via2l0LXRyYW5zaXRpb246IG5vbmU7CiAgICAgYm9yZGVyLXJh
ZGl1czogMDsKLSAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKKyAgICBib3JkZXI6
IG5vbmU7CisgICAgcGFkZGluZzogMnB4OworfQorCisud2Vlay1tb2RlIC5hdmFpbGFibGUuZGF5
LXNlbGVjdGVkLm1vbmRheSB7CisgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogNXB4OworICAg
IGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDVweDsKK30KKworLndlZWstbW9kZSAuYXZhaWxh
YmxlLmRheS1zZWxlY3RlZC5zdW5kYXkgeworICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiA1
cHg7CisgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDVweDsKK30KKworLndlZWstbW9k
ZSAudW5hdmFpbGFibGUuZGF5LXNlbGVjdGVkIHsKKyAgICBwYWRkaW5nOiAxcHggMnB4OworICAg
IGJvcmRlci10b3A6IDFweCBzb2xpZCBoaWdobGlnaHQ7CisgICAgYm9yZGVyLWJvdHRvbTogMXB4
IHNvbGlkIGhpZ2hsaWdodDsKK30KKworLndlZWstbW9kZSAudW5hdmFpbGFibGUuZGF5LXNlbGVj
dGVkLm1vbmRheSB7CisgICAgcGFkZGluZy1sZWZ0OiAxcHg7CisgICAgYm9yZGVyLWxlZnQ6IDFw
eCBzb2xpZCBoaWdobGlnaHQ7Cit9CisKKy53ZWVrLW1vZGUgLnVuYXZhaWxhYmxlLmRheS1zZWxl
Y3RlZC5zdW5kYXkgeworICAgIHBhZGRpbmctcmlnaHQ6IDFweDsKKyAgICBib3JkZXItcmlnaHQ6
IDFweCBzb2xpZCBoaWdobGlnaHQ7Cit9CisKKy53ZWVrLW1vZGUgLndlZWstY29sdW1uLnVuYXZh
aWxhYmxlLmRheS1zZWxlY3RlZCB7CisgIHBhZGRpbmc6IDFweDsKKyAgYm9yZGVyOiAxcHggc29s
aWQgaGlnaGxpZ2h0OworfQorCisud2Vlay1jb2x1bW4geworICAgIGRpc3BsYXk6IG5vbmU7Cit9
CisKKy53ZWVrLW1vZGUgLndlZWstY29sdW1uIHsKKyAgICBkaXNwbGF5OiBibG9jazsKKyAgICBi
b3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjOTk5OworICAgIHBhZGRpbmctcmlnaHQ6IDFweDsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1Jlc291cmNlcy9wYWdlcG9wdXBzL2NhbGVuZGFy
UGlja2VyLmpzIGIvU291cmNlL1dlYkNvcmUvUmVzb3VyY2VzL3BhZ2Vwb3B1cHMvY2FsZW5kYXJQ
aWNrZXIuanMKaW5kZXggOThjYjdkZTM5NjMyNDliMjg2NDUzMDQ4ZTBmZjdkYjZkYWMzZDAzYi4u
YTUwOTRiZGU1Y2Y4ZmJmYTBkMmZiNTQ2MzZkNWY4YWZhYjI0NDdkNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvUmVzb3VyY2VzL3BhZ2Vwb3B1cHMvY2FsZW5kYXJQaWNrZXIuanMKKysrIGIv
U291cmNlL1dlYkNvcmUvUmVzb3VyY2VzL3BhZ2Vwb3B1cHMvY2FsZW5kYXJQaWNrZXIuanMKQEAg
LTQ2LDYgKzQ2LDcgQEAgdmFyIENsYXNzTmFtZXMgPSB7CiAgICAgRGF5TGFiZWxDb250YWluZXI6
ICJkYXktbGFiZWwtY29udGFpbmVyIiwKICAgICBEYXlzQXJlYTogImRheXMtYXJlYSIsCiAgICAg
RGF5c0FyZWFDb250YWluZXI6ICJkYXlzLWFyZWEtY29udGFpbmVyIiwKKyAgICBNb25kYXk6ICJt
b25kYXkiLAogICAgIE1vbnRoTW9kZTogIm1vbnRoLW1vZGUiLAogICAgIE1vbnRoU2VsZWN0b3I6
ICJtb250aC1zZWxlY3RvciIsCiAgICAgTW9udGhTZWxlY3RvckJveDogIm1vbnRoLXNlbGVjdG9y
LWJveCIsCkBAIC01NywxMCArNTgsMTMgQEAgdmFyIENsYXNzTmFtZXMgPSB7CiAgICAgTm90VGhp
c01vbnRoOiAibm90LXRoaXMtbW9udGgiLAogICAgIFNlbGVjdGVkOiAiZGF5LXNlbGVjdGVkIiwK
ICAgICBTZWxlY3RlZE1vbnRoWWVhcjogInNlbGVjdGVkLW1vbnRoLXllYXIiLAorICAgIFN1bmRh
eTogInN1bmRheSIsCiAgICAgVG9kYXlCdXR0b246ICJ0b2RheS1idXR0b24iLAogICAgIFRvZGF5
Q2xlYXJBcmVhOiAidG9kYXktY2xlYXItYXJlYSIsCiAgICAgVW5hdmFpbGFibGU6ICJ1bmF2YWls
YWJsZSIsCiAgICAgV2Vla0NvbnRhaW5lcjogIndlZWstY29udGFpbmVyIiwKKyAgICBXZWVrQ29s
dW1uOiAid2Vlay1jb2x1bW4iLAorICAgIFdlZWtNb2RlOiAid2Vlay1tb2RlIiwKICAgICBZZWFy
TW9udGhBcmVhOiAieWVhci1tb250aC1hcmVhIiwKICAgICBZZWFyTW9udGhCdXR0b246ICJ5ZWFy
LW1vbnRoLWJ1dHRvbiIsCiAgICAgWWVhck1vbnRoQnV0dG9uTGVmdDogInllYXItbW9udGgtYnV0
dG9uLWxlZnQiLApAQCAtMTg1LDEyICsxODksMTUgQEAgZnVuY3Rpb24gY3JlYXRlVVRDRGF0ZSh5
ZWFyLCBtb250aCwgZGF0ZSkgewogCiAvKioKICAqIEBwYXJhbSB7c3RyaW5nfSBkYXRlU3RyaW5n
Ci0gKiBAcmV0dXJuIHs/RGF5fE1vbnRofQorICogQHJldHVybiB7P0RheXxXZWVrfE1vbnRofQog
ICovCiBmdW5jdGlvbiBwYXJzZURhdGVTdHJpbmcoZGF0ZVN0cmluZykgewogICAgIHZhciBtb250
aCA9IE1vbnRoLnBhcnNlKGRhdGVTdHJpbmcpOwogICAgIGlmIChtb250aCkKICAgICAgICAgcmV0
dXJuIG1vbnRoOworICAgIHZhciB3ZWVrID0gV2Vlay5wYXJzZShkYXRlU3RyaW5nKTsKKyAgICBp
ZiAod2VlaykKKyAgICAgICAgcmV0dXJuIHdlZWs7CiAgICAgcmV0dXJuIERheS5wYXJzZShkYXRl
U3RyaW5nKTsKIH0KIApAQCAtMjE0LDEwICsyMjEsNiBAQCBmdW5jdGlvbiBEYXkodmFsdWVPckRh
eU9yWWVhciwgbW9udGgsIGRhdGUpIHsKIAogRGF5LklTT1N0cmluZ1JlZ0V4cCA9IC9eKFxkKykt
KFxkKyktKFxkKykkLzsKIAotLy8gU2VlIFdlYkNvcmUvcGxhdGZvcm0vRGF0ZUNvbXBvbmVudHMu
aC4KLURheS5NaW5pbXVtID0gbmV3IERheSgtNjIxMzU1OTY4MDAwMDAuMCk7Ci1EYXkuTWF4aW11
bSA9IG5ldyBEYXkoODY0MDAwMDAwMDAwMDAwMC4wKTsKLQogLyoqCiAgKiBAcGFyYW0geyFzdHJp
bmd9IHN0cgogICogQHJldHVybiB7P01vbnRofQpAQCAtMjM0LDE0ICsyMzcsMTQgQEAgRGF5LnBh
cnNlID0gZnVuY3Rpb24oc3RyKSB7CiAKIC8qKgogICogQHBhcmFtIHshRGF0ZX0gZGF0ZQotICog
QHJldHVybiB7IU1vbnRofQorICogQHJldHVybiB7IURheX0KICAqLwogRGF5LmNyZWF0ZUZyb21E
YXRlID0gZnVuY3Rpb24oZGF0ZSkgewogICAgIHJldHVybiBuZXcgRGF5KGRhdGUuZ2V0VVRDRnVs
bFllYXIoKSwgZGF0ZS5nZXRVVENNb250aCgpLCBkYXRlLmdldFVUQ0RhdGUoKSk7CiB9OwogCiAv
KioKLSAqIEByZXR1cm4geyFNb250aH0KKyAqIEByZXR1cm4geyFEYXl9CiAgKi8KIERheS5jcmVh
dGVGcm9tVG9kYXkgPSBmdW5jdGlvbigpIHsKICAgICB2YXIgbm93ID0gbmV3IERhdGUoKTsKQEAg
LTMwMSw2ICszMDQsMTcyIEBAIERheS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsK
ICAgICByZXR1cm4geWVhclN0cmluZyArICItIiArICgiMCIgKyAodGhpcy5tb250aCArIDEpKS5z
dWJzdHIoLTIsIDIpICsgIi0iICsgKCIwIiArIHRoaXMuZGF0ZSkuc3Vic3RyKC0yLCAyKTsKIH07
CiAKKy8vIFNlZSBXZWJDb3JlL3BsYXRmb3JtL0RhdGVDb21wb25lbnRzLmguCitEYXkuTWluaW11
bSA9IG5ldyBEYXkoLTYyMTM1NTk2ODAwMDAwLjApOworRGF5Lk1heGltdW0gPSBuZXcgRGF5KDg2
NDAwMDAwMDAwMDAwMDAuMCk7CisvLyBTZWUgV2ViQ29yZS9odG1sL0RheUlucHV0VHlwZS5jcHAu
CitEYXkuRGVmYXVsdFN0ZXAgPSA4NjQwMDAwMDsKK0RheS5EZWZhdWx0U3RlcEJhc2UgPSAwOwor
CisvKioKKyAqIEBjb25zdHJ1Y3RvcgorICogQHBhcmFtIHshbnVtYmVyfFdlZWt9IHZhbHVlT3JX
ZWVrT3JZZWFyCisgKiBAcGFyYW0geyFudW1iZXI9fSB3ZWVrCisgKi8KK2Z1bmN0aW9uIFdlZWso
dmFsdWVPcldlZWtPclllYXIsIHdlZWspIHsKKyAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0g
MikgeworICAgICAgICB0aGlzLnllYXIgPSB2YWx1ZU9yV2Vla09yWWVhcjsKKyAgICAgICAgdGhp
cy53ZWVrID0gd2VlazsKKyAgICAgICAgLy8gTnVtYmVyIG9mIHllYXJzIHBlciB5ZWFyIGlzIGVp
dGhlciA1MiBvciA1My4KKyAgICAgICAgaWYgKHRoaXMud2VlayA8IDEgfHwgKHRoaXMud2VlayA+
IDUyICYmIHRoaXMud2VlayA+IFdlZWsubnVtYmVyT2ZXZWVrc0luWWVhcih0aGlzLnllYXIpKSkg
eworICAgICAgICAgICAgdmFyIG5vcm1hbGl6ZWRXZWVrID0gV2Vlay5jcmVhdGVGcm9tRGF0ZSh0
aGlzLnN0YXJ0RGF0ZSgpKTsKKyAgICAgICAgICAgIHRoaXMueWVhciA9IG5vcm1hbGl6ZWRXZWVr
LnllYXI7CisgICAgICAgICAgICB0aGlzLndlZWsgPSBub3JtYWxpemVkV2Vlay53ZWVrOworICAg
ICAgICB9CisgICAgfSBlbHNlIGlmICh2YWx1ZU9yTW9udGhPclllYXIgaW5zdGFuY2VvZiBXZWVr
KSB7CisgICAgICAgIHRoaXMueWVhciA9IHZhbHVlT3JXZWVrT3JZZWFyLnllYXI7CisgICAgICAg
IHRoaXMud2VlayA9IHZhbHVlT3JXZWVrT3JZZWFyLndlZWs7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgdmFyIHdlZWsgPSBXZWVrLmNyZWF0ZUZyb21EYXRlKG5ldyBEYXRlKHZhbHVlT3JXZWVrT3JZ
ZWFyKSk7CisgICAgICAgIHRoaXMueWVhciA9IHdlZWsueWVhcjsKKyAgICAgICAgdGhpcy53ZWVr
ID0gd2Vlay53ZWVrOworICAgIH0KK30KKworV2Vlay5NaWxsaXNlY29uZHNQZXJXZWVrID0gNyAq
IDI0ICogNjAgKiA2MCAqIDEwMDA7CitXZWVrLklTT1N0cmluZ1JlZ0V4cCA9IC9eKFxkKyktW3dX
XShcZCspJC87CisvLyBTZWUgV2ViQ29yZS9wbGF0Zm9ybS9EYXRlQ29tcG9uZW50cy5oLgorV2Vl
ay5NaW5pbXVtID0gbmV3IFdlZWsoMSwgMSk7CitXZWVrLk1heGltdW0gPSBuZXcgV2VlaygyNzU3
NjAsIDM3KTsKKy8vIFNlZSBXZWJDb3JlL2h0bWwvV2Vla0lucHV0VHlwZS5jcHAuCitXZWVrLkRl
ZmF1bHRTdGVwID0gNjA0ODAwMDAwOworV2Vlay5EZWZhdWx0U3RlcEJhc2UgPSAtMjU5MjAwMDAw
OworCisvKioKKyAqIEBwYXJhbSB7IXN0cmluZ30gc3RyCisgKiBAcmV0dXJuIHs/V2Vla30KKyAq
LworV2Vlay5wYXJzZSA9IGZ1bmN0aW9uKHN0cikgeworICAgIHZhciBtYXRjaCA9IFdlZWsuSVNP
U3RyaW5nUmVnRXhwLmV4ZWMoc3RyKTsKKyAgICBpZiAoIW1hdGNoKQorICAgICAgICByZXR1cm4g
bnVsbDsKKyAgICB2YXIgeWVhciA9IHBhcnNlSW50KG1hdGNoWzFdLCAxMCk7CisgICAgdmFyIHdl
ZWsgPSBwYXJzZUludChtYXRjaFsyXSwgMTApOworICAgIHJldHVybiBuZXcgV2Vlayh5ZWFyLCB3
ZWVrKTsKK307CisKKy8qKgorICogQHBhcmFtIHshRGF0ZX0gZGF0ZQorICogQHJldHVybiB7IVdl
ZWt9CisgKi8KK1dlZWsuY3JlYXRlRnJvbURhdGUgPSBmdW5jdGlvbihkYXRlKSB7CisgICAgdmFy
IHllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7CisgICAgaWYgKHllYXIgPD0gV2Vlay5NYXhp
bXVtLnllYXIgJiYgV2Vlay53ZWVrT25lU3RhcnREYXRlRm9yWWVhcih5ZWFyICsgMSkuZ2V0VGlt
ZSgpIDw9IGRhdGUuZ2V0VGltZSgpKQorICAgICAgICB5ZWFyKys7CisgICAgZWxzZSBpZiAoeWVh
ciA+IDEgJiYgV2Vlay53ZWVrT25lU3RhcnREYXRlRm9yWWVhcih5ZWFyKS5nZXRUaW1lKCkgPiBk
YXRlLmdldFRpbWUoKSkKKyAgICAgICAgeWVhci0tOworICAgIHZhciB3ZWVrID0gMSArIFdlZWsu
X251bWJlck9mV2Vla3NTaW5jZURhdGUoV2Vlay53ZWVrT25lU3RhcnREYXRlRm9yWWVhcih5ZWFy
KSwgZGF0ZSk7CisgICAgcmV0dXJuIG5ldyBXZWVrKHllYXIsIHdlZWspOworfTsKKworLyoqCisg
KiBAcmV0dXJuIHshV2Vla30KKyAqLworV2Vlay5jcmVhdGVGcm9tVG9kYXkgPSBmdW5jdGlvbigp
IHsKKyAgICB2YXIgbm93ID0gbmV3IERhdGUoKTsKKyAgICByZXR1cm4gV2Vlay5jcmVhdGVGcm9t
RGF0ZShjcmVhdGVVVENEYXRlKG5vdy5nZXRGdWxsWWVhcigpLCBub3cuZ2V0TW9udGgoKSwgbm93
LmdldERhdGUoKSkpOworfTsKKworLyoqCisgKiBAcGFyYW0geyFudW1iZXJ9IHllYXIKKyAqIEBy
ZXR1cm4geyFEYXRlfQorICovCitXZWVrLndlZWtPbmVTdGFydERhdGVGb3JZZWFyID0gZnVuY3Rp
b24oeWVhcikgeworICAgIGlmICh5ZWFyIDwgMSkKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVVUQ0Rh
dGUoMSwgMCwgMSk7CisgICAgLy8gVGhlIHdlZWsgY29udGFpbmluZyBKYW51YXJ5IDR0aCBpcyB3
ZWVrIG9uZS4KKyAgICB2YXIgeWVhclN0YXJ0RGF5ID0gY3JlYXRlVVRDRGF0ZSh5ZWFyLCAwLCA0
KS5nZXRVVENEYXkoKTsKKyAgICByZXR1cm4gY3JlYXRlVVRDRGF0ZSh5ZWFyLCAwLCA0IC0gKHll
YXJTdGFydERheSArIDYpICUgNyk7Cit9OworCisvKioKKyAqIEBwYXJhbSB7IW51bWJlcn0geWVh
cgorICogQHJldHVybiB7IW51bWJlcn0KKyAqLworV2Vlay5udW1iZXJPZldlZWtzSW5ZZWFyID0g
ZnVuY3Rpb24oeWVhcikgeworICAgIGlmICh5ZWFyIDwgMSB8fCB5ZWFyID4gV2Vlay5NYXhpbXVt
LnllYXIpCisgICAgICAgIHJldHVybiAwOworICAgIGVsc2UgaWYgKHllYXIgPT09IFdlZWsuTWF4
aW11bS55ZWFyKQorICAgICAgICByZXR1cm4gV2Vlay5NYXhpbXVtLndlZWs7CisgICAgcmV0dXJu
IFdlZWsuX251bWJlck9mV2Vla3NTaW5jZURhdGUoV2Vlay53ZWVrT25lU3RhcnREYXRlRm9yWWVh
cih5ZWFyKSwgV2Vlay53ZWVrT25lU3RhcnREYXRlRm9yWWVhcih5ZWFyICsgMSkpOworfTsKKwor
LyoqCisgKiBAcGFyYW0geyFEYXRlfSBiYXNlRGF0ZQorICogQHBhcmFtIHshRGF0ZX0gZGF0ZQor
ICogQHJldHVybiB7IW51bWJlcn0KKyAqLworV2Vlay5fbnVtYmVyT2ZXZWVrc1NpbmNlRGF0ZSA9
IGZ1bmN0aW9uKGJhc2VEYXRlLCBkYXRlKSB7CisgICAgcmV0dXJuIE1hdGguZmxvb3IoKGRhdGUu
Z2V0VGltZSgpIC0gYmFzZURhdGUuZ2V0VGltZSgpKSAvIFdlZWsuTWlsbGlzZWNvbmRzUGVyV2Vl
ayk7Cit9OworCisvKioKKyAqIEBwYXJhbSB7IVdlZWt9IG90aGVyCisgKiBAcmV0dXJuIHshYm9v
bH0KKyAqLworV2Vlay5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24ob3RoZXIpIHsKKyAgICBy
ZXR1cm4gdGhpcy55ZWFyID09PSBvdGhlci55ZWFyICYmIHRoaXMud2VlayA9PT0gb3RoZXIud2Vl
azsKK307CisKKy8qKgorICogQHJldHVybiB7IVdlZWt9CisgKi8KK1dlZWsucHJvdG90eXBlLnBy
ZXZpb3VzID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIG5ldyBXZWVrKHRoaXMueWVhciwgdGhp
cy53ZWVrIC0gMSk7Cit9OworCisvKioKKyAqIEByZXR1cm4geyFXZWVrfQorICovCitXZWVrLnBy
b3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIG5ldyBXZWVrKHRoaXMueWVh
ciwgdGhpcy53ZWVrICsgMSk7Cit9OworCisvKioKKyAqIEByZXR1cm4geyFEYXRlfQorICovCitX
ZWVrLnByb3RvdHlwZS5zdGFydERhdGUgPSBmdW5jdGlvbigpIHsKKyAgICB2YXIgd2Vla1N0YXJ0
RGF0ZSA9IFdlZWsud2Vla09uZVN0YXJ0RGF0ZUZvclllYXIodGhpcy55ZWFyKTsKKyAgICB3ZWVr
U3RhcnREYXRlLnNldFVUQ0RhdGUod2Vla1N0YXJ0RGF0ZS5nZXRVVENEYXRlKCkgKyAodGhpcy53
ZWVrIC0gMSkgKiA3KTsKKyAgICByZXR1cm4gd2Vla1N0YXJ0RGF0ZTsKK307CisKKy8qKgorICog
QHJldHVybiB7IURhdGV9CisgKi8KK1dlZWsucHJvdG90eXBlLmVuZERhdGUgPSBmdW5jdGlvbigp
IHsKKyAgICBpZiAodGhpcy5lcXVhbHMoV2Vlay5NYXhpbXVtKSkKKyAgICAgICAgcmV0dXJuIERh
eS5NYXhpbXVtLnN0YXJ0RGF0ZSgpOworICAgIHJldHVybiB0aGlzLm5leHQoKS5zdGFydERhdGUo
KTsKK307CisKKy8qKgorICogQHJldHVybiB7IW51bWJlcn0KKyAqLworV2Vlay5wcm90b3R5cGUu
dmFsdWVPZiA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLnN0YXJ0RGF0ZSgpLmdldFRp
bWUoKSAtIGNyZWF0ZVVUQ0RhdGUoMTk3MCwgMCwgMSkuZ2V0VGltZSgpOworfTsKKworLyoqCisg
KiBAcmV0dXJuIHshc3RyaW5nfQorICovCitXZWVrLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0
aW9uKCkgeworICAgIHZhciB5ZWFyU3RyaW5nID0gU3RyaW5nKHRoaXMueWVhcik7CisgICAgaWYg
KHllYXJTdHJpbmcubGVuZ3RoIDwgNCkKKyAgICAgICAgeWVhclN0cmluZyA9ICgiMDAwIiArIHll
YXJTdHJpbmcpLnN1YnN0cigtNCwgNCk7CisgICAgcmV0dXJuIHllYXJTdHJpbmcgKyAiLVciICsg
KCIwIiArIHRoaXMud2Vlaykuc3Vic3RyKC0yLCAyKTsKK307CisKIC8qKgogICogQHBhcmFtIHsh
bnVtYmVyfE1vbnRofSB2YWx1ZU9yTW9udGhPclllYXIKICAqIEBwYXJhbSB7IW51bWJlcj19IG1v
bnRoCkBAIC0zMjksNiArNDk4LDkgQEAgTW9udGguSVNPU3RyaW5nUmVnRXhwID0gL14oXGQrKS0o
XGQrKSQvOwogLy8gU2VlIFdlYkNvcmUvcGxhdGZvcm0vRGF0ZUNvbXBvbmVudHMuaC4KIE1vbnRo
Lk1pbmltdW0gPSBuZXcgTW9udGgoMSwgMCk7CiBNb250aC5NYXhpbXVtID0gbmV3IE1vbnRoKDI3
NTc2MCwgOCk7CisvLyBTZWUgV2ViQ29yZS9odG1sL01vbnRoSW5wdXRUeXBlLmNwcC4KK01vbnRo
LkRlZmF1bHRTdGVwID0gMTsKK01vbnRoLkRlZmF1bHRTdGVwQmFzZSA9IDA7CiAKIC8qKgogICog
QHBhcmFtIHshc3RyaW5nfSBzdHIKQEAgLTUxOCw2ICs2OTAsMTAgQEAgZnVuY3Rpb24gQ2FsZW5k
YXJQaWNrZXIoZWxlbWVudCwgY29uZmlnKSB7CiAgICAgICAgIHRoaXMuc2VsZWN0aW9uQ29uc3Ry
dWN0b3IgPSBNb250aDsKICAgICAgICAgdGhpcy5fZGF5c1RhYmxlID0gbmV3IE1vbnRoUGlja2Vy
RGF5c1RhYmxlKHRoaXMpOwogICAgICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ2xh
c3NOYW1lcy5Nb250aE1vZGUpOworICAgIH0gZWxzZSBpZiAodGhpcy5fY29uZmlnLm1vZGUgPT09
ICJ3ZWVrIikgeworICAgICAgICB0aGlzLnNlbGVjdGlvbkNvbnN0cnVjdG9yID0gV2VlazsKKyAg
ICAgICAgdGhpcy5fZGF5c1RhYmxlID0gbmV3IFdlZWtQaWNrZXJEYXlzVGFibGUodGhpcyk7Cisg
ICAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDbGFzc05hbWVzLldlZWtNb2RlKTsK
ICAgICB9IGVsc2UgewogICAgICAgICB0aGlzLnNlbGVjdGlvbkNvbnN0cnVjdG9yID0gRGF5Owog
ICAgICAgICB0aGlzLl9kYXlzVGFibGUgPSBuZXcgRGF5c1RhYmxlKHRoaXMpOwpAQCAtNTMxLDgg
KzcwNyw4IEBAIGZ1bmN0aW9uIENhbGVuZGFyUGlja2VyKGVsZW1lbnQsIGNvbmZpZykgewogICAg
IHZhciBtYXhpbXVtID0gKHR5cGVvZiB0aGlzLl9jb25maWcubWF4ICE9PSAidW5kZWZpbmVkIikg
PyBwYXJzZURhdGVTdHJpbmcodGhpcy5fY29uZmlnLm1heCkgOiB0aGlzLnNlbGVjdGlvbkNvbnN0
cnVjdG9yLk1heGltdW07CiAgICAgdGhpcy5fbWluaW11bVZhbHVlID0gbWluaW11bS52YWx1ZU9m
KCk7CiAgICAgdGhpcy5fbWF4aW11bVZhbHVlID0gbWF4aW11bS52YWx1ZU9mKCk7Ci0gICAgdGhp
cy5zdGVwID0gKHR5cGVvZiB0aGlzLl9jb25maWcuc3RlcCAhPT0gdW5kZWZpbmVkKSA/IE51bWJl
cih0aGlzLl9jb25maWcuc3RlcCkgOiBDYWxlbmRhclBpY2tlci5EZWZhdWx0U3RlcFNjYWxlRmFj
dG9yOwotICAgIHRoaXMuc3RlcEJhc2UgPSAodHlwZW9mIHRoaXMuX2NvbmZpZy5zdGVwQmFzZSAh
PT0gInVuZGVmaW5lZCIpID8gTnVtYmVyKHRoaXMuX2NvbmZpZy5zdGVwQmFzZSkgOiBDYWxlbmRh
clBpY2tlci5EZWZhdWx0U3RlcEJhc2U7CisgICAgdGhpcy5zdGVwID0gKHR5cGVvZiB0aGlzLl9j
b25maWcuc3RlcCAhPT0gdW5kZWZpbmVkKSA/IE51bWJlcih0aGlzLl9jb25maWcuc3RlcCkgOiB0
aGlzLnNlbGVjdGlvbkNvbnN0cnVjdG9yLkRlZmF1bHRTdGVwOworICAgIHRoaXMuc3RlcEJhc2Ug
PSAodHlwZW9mIHRoaXMuX2NvbmZpZy5zdGVwQmFzZSAhPT0gInVuZGVmaW5lZCIpID8gTnVtYmVy
KHRoaXMuX2NvbmZpZy5zdGVwQmFzZSkgOiB0aGlzLnNlbGVjdGlvbkNvbnN0cnVjdG9yLkRlZmF1
bHRTdGVwQmFzZTsKICAgICB0aGlzLl9taW5pbXVtTW9udGggPSBNb250aC5jcmVhdGVGcm9tRGF0
ZShtaW5pbXVtLnN0YXJ0RGF0ZSgpKTsKICAgICB0aGlzLm1heGltdW1Nb250aCA9IE1vbnRoLmNy
ZWF0ZUZyb21EYXRlKG1heGltdW0uc3RhcnREYXRlKCkpOwogICAgIHRoaXMuX2N1cnJlbnRNb250
aCA9IG5ldyBNb250aChOYU4sIE5hTik7CkBAIC01NDYsNyArNzIyLDcgQEAgZnVuY3Rpb24gQ2Fs
ZW5kYXJQaWNrZXIoZWxlbWVudCwgY29uZmlnKSB7CiAgICAgICAgIGluaXRpYWxTZWxlY3Rpb24g
PSBuZXcgdGhpcy5zZWxlY3Rpb25Db25zdHJ1Y3Rvcih0aGlzLl9taW5pbXVtVmFsdWUpOwogICAg
IGVsc2UgaWYgKGluaXRpYWxTZWxlY3Rpb24udmFsdWVPZigpID4gdGhpcy5fbWF4aW11bVZhbHVl
KQogICAgICAgICBpbml0aWFsU2VsZWN0aW9uID0gbmV3IHRoaXMuc2VsZWN0aW9uQ29uc3RydWN0
b3IodGhpcy5fbWF4aW11bVZhbHVlKTsKLSAgICB0aGlzLnNob3dNb250aChNb250aC5jcmVhdGVG
cm9tRGF0ZShpbml0aWFsU2VsZWN0aW9uLnN0YXJ0RGF0ZSgpKSwgZmFsc2UpOworICAgIHRoaXMu
c2hvd01vbnRoKE1vbnRoLmNyZWF0ZUZyb21EYXRlKGluaXRpYWxTZWxlY3Rpb24uc3RhcnREYXRl
KCkpKTsKICAgICB0aGlzLl9kYXlzVGFibGUuc2VsZWN0UmFuZ2VBbmRTaG93RW50aXJlUmFuZ2Uo
aW5pdGlhbFNlbGVjdGlvbik7CiAgICAgdGhpcy5maXhXaW5kb3dTaXplKCk7CiAgICAgdGhpcy5f
aGFuZGxlQm9keUtleURvd25Cb3VuZCA9IHRoaXMuX2hhbmRsZUJvZHlLZXlEb3duLmJpbmQodGhp
cyk7CkBAIC01NTQsOSArNzMwLDExIEBAIGZ1bmN0aW9uIENhbGVuZGFyUGlja2VyKGVsZW1lbnQs
IGNvbmZpZykgewogfQogQ2FsZW5kYXJQaWNrZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShQ
aWNrZXIucHJvdG90eXBlKTsKIAotLy8gU2VlIFdlYkNvcmUvaHRtbC9EYXRlSW5wdXRUeXBlLmNw
cC4KLUNhbGVuZGFyUGlja2VyLkRlZmF1bHRTdGVwU2NhbGVGYWN0b3IgPSA4NjQwMDAwMDsKLUNh
bGVuZGFyUGlja2VyLkRlZmF1bHRTdGVwQmFzZSA9IDAuMDsKK0NhbGVuZGFyUGlja2VyLk5hdmln
YXRpb25CZWhhdmlvdXIgPSB7CisgICAgTm9uZTogMCwKKyAgICBBbmltYXRlOiAxIDw8IDAsCisg
ICAgS2VlcFNlbGVjdGlvblBvc2l0aW9uOiAxIDw8IDEKK307CiAKIENhbGVuZGFyUGlja2VyLnBy
b3RvdHlwZS5faGFuZGxlV2luZG93UmVzaXplID0gZnVuY3Rpb24oKSB7CiAgICAgdGhpcy5fZWxl
bWVudC5jbGFzc0xpc3QucmVtb3ZlKCJwcmVwYXJpbmciKTsKQEAgLTY1MSwxMCArODI5LDkgQEAg
Q2FsZW5kYXJQaWNrZXIucHJvdG90eXBlLnNob3VsZFNob3dNb250aCA9IGZ1bmN0aW9uKG1vbnRo
KSB7CiAKIC8qKgogICogQHBhcmFtIHshTW9udGh9IG1vbnRoCi0gKiBAcGFyYW0geyFib29sPX0g
YW5pbWF0ZQotICogQHBhcmFtIHshYm9vbD19IGtlZXBTZWxlY3Rpb25Qb3NpdGlvbgorICogQHBh
cmFtIHshQ2FsZW5kYXJQaWNrZXIuTmF2aWdhdGlvbkJlaGF2aW91cj19IG5hdmlnYXRpb25CZWhh
dmlvdXIKICAqLwotQ2FsZW5kYXJQaWNrZXIucHJvdG90eXBlLnNob3dNb250aCA9IGZ1bmN0aW9u
KG1vbnRoLCBhbmltYXRlLCBrZWVwU2VsZWN0aW9uUG9zaXRpb24pIHsKK0NhbGVuZGFyUGlja2Vy
LnByb3RvdHlwZS5zaG93TW9udGggPSBmdW5jdGlvbihtb250aCwgbmF2aWdhdGlvbkJlaGF2aW91
cikgewogICAgIGlmICh0aGlzLl9jdXJyZW50TW9udGguZXF1YWxzKG1vbnRoKSkKICAgICAgICAg
cmV0dXJuOwogICAgIGVsc2UgaWYgKG1vbnRoLnZhbHVlT2YoKSA8IHRoaXMuX21pbmltdW1Nb250
aC52YWx1ZU9mKCkpCkBAIC02NjIsNyArODM5LDcgQEAgQ2FsZW5kYXJQaWNrZXIucHJvdG90eXBl
LnNob3dNb250aCA9IGZ1bmN0aW9uKG1vbnRoLCBhbmltYXRlLCBrZWVwU2VsZWN0aW9uUG9zaXQK
ICAgICBlbHNlIGlmIChtb250aC52YWx1ZU9mKCkgPiB0aGlzLm1heGltdW1Nb250aC52YWx1ZU9m
KCkpCiAgICAgICAgIG1vbnRoID0gdGhpcy5tYXhpbXVtTW9udGg7CiAgICAgdGhpcy5feWVhck1v
bnRoQ29udHJvbGxlci5zZXRNb250aChtb250aCk7Ci0gICAgdGhpcy5fZGF5c1RhYmxlLm5hdmln
YXRlVG9Nb250aChtb250aCwgYW5pbWF0ZSwga2VlcFNlbGVjdGlvblBvc2l0aW9uKTsKKyAgICB0
aGlzLl9kYXlzVGFibGUubmF2aWdhdGVUb01vbnRoKG1vbnRoLCBuYXZpZ2F0aW9uQmVoYXZpb3Vy
IHx8IENhbGVuZGFyUGlja2VyLk5hdmlnYXRpb25CZWhhdmlvdXIuTm9uZSk7CiAgICAgdGhpcy5f
Y3VycmVudE1vbnRoID0gbW9udGg7CiB9OwogCkBAIC03MjQsNyArOTAxLDcgQEAgWWVhck1vbnRo
Q29udHJvbGxlci5wcm90b3R5cGUuYXR0YWNoVG8gPSBmdW5jdGlvbihlbGVtZW50KSB7CiAgICAg
ICAgIG1heFdpZHRoID0gTWF0aC5tYXgobWF4V2lkdGgsIHRoaXMuX21vbnRoLm9mZnNldFdpZHRo
KTsKICAgICAgICAgbW9udGggPSBtb250aC5wcmV2aW91cygpOwogICAgIH0KLSAgICBpZiAoZ2V0
TGFuZ3VhZ2UoKSA9PSAiamEiICYmIEltcGVyaWFsRXJhTGltaXQgPCBtYXhpbXVtWWVhcikgewor
ICAgIGlmIChnZXRMYW5ndWFnZSgpID09ICJqYSIgJiYgSW1wZXJpYWxFcmFMaW1pdCA8IHRoaXMu
cGlja2VyLm1heGltdW1Nb250aC55ZWFyKSB7CiAgICAgICAgIGZvciAodmFyIG0gPSAwOyBtIDwg
MTI7ICsrbSkgewogICAgICAgICAgICAgdGhpcy5fbW9udGgudGV4dENvbnRlbnQgPSBuZXcgTW9u
dGgoSW1wZXJpYWxFcmFMaW1pdCwgbSkudG9Mb2NhbGVTdHJpbmcoKTsKICAgICAgICAgICAgIG1h
eFdpZHRoID0gTWF0aC5tYXgobWF4V2lkdGgsIHRoaXMuX21vbnRoLm9mZnNldFdpZHRoKTsKQEAg
LTk5NSw3ICsxMTcyLDcgQEAgWWVhck1vbnRoQ29udHJvbGxlci5wcm90b3R5cGUuX2hhbmRsZUJ1
dHRvbkNsaWNrID0gZnVuY3Rpb24oZXZlbnQpIHsKIFllYXJNb250aENvbnRyb2xsZXIucHJvdG90
eXBlLm1vdmVSZWxhdGl2ZWx5ID0gZnVuY3Rpb24oYW1vdW50KSB7CiAgICAgdmFyIGN1cnJlbnQg
PSB0aGlzLnBpY2tlci5jdXJyZW50TW9udGgoKS52YWx1ZU9mKCk7CiAgICAgdmFyIHVwZGF0ZWQg
PSBuZXcgTW9udGgoY3VycmVudCArIGFtb3VudCk7Ci0gICAgdGhpcy5waWNrZXIuc2hvd01vbnRo
KHVwZGF0ZWQsIHRydWUsIHRydWUpOworICAgIHRoaXMucGlja2VyLnNob3dNb250aCh1cGRhdGVk
LCBDYWxlbmRhclBpY2tlci5OYXZpZ2F0aW9uQmVoYXZpb3VyLkFuaW1hdGUgfCBDYWxlbmRhclBp
Y2tlci5OYXZpZ2F0aW9uQmVoYXZpb3VyLktlZXBTZWxlY3Rpb25Qb3NpdGlvbik7CiB9OwogCiAv
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCkBAIC0xMDA5LDEzICsxMTg2LDYgQEAgZnVuY3Rpb24gRGF5c1RhYmxlKHBpY2tl
cikgewogfQogCiAvKioKLSAqIEByZXR1cm4geyFib29sZWFufQotICovCi1EYXlzVGFibGUucHJv
dG90eXBlLl9oYXNTZWxlY3Rpb24gPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gISF0aGlzLl9m
aXJzdE5vZGVJblNlbGVjdGVkUmFuZ2UoKTsKLX0KLQotLyoqCiAgKiBUaGUgbnVtYmVyIG9mIHdl
ZWsgbGluZXMgaW4gdGhlIHNjcmVlbi4KICAqIEBjb25zdAogICogQHR5cGUge251bWJlcn0KQEAg
LTEwMzMsMTMgKzEyMDMsMjAgQEAgRGF5c1RhYmxlLnByb3RvdHlwZS5hdHRhY2hUbyA9IGZ1bmN0
aW9uKGVsZW1lbnQpIHsKICAgICB0aGlzLl9kYXlzQ29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIo
IndlYmtpdFRyYW5zaXRpb25FbmQiLCB0aGlzLl9tb3ZlSW5EYXlzLmJpbmQodGhpcyksIGZhbHNl
KTsKICAgICB2YXIgY29udGFpbmVyID0gY3JlYXRlRWxlbWVudCgidHIiLCBDbGFzc05hbWVzLkRh
eUxhYmVsQ29udGFpbmVyKTsKICAgICB2YXIgd2Vla1N0YXJ0RGF5ID0gZ2xvYmFsLnBhcmFtcy53
ZWVrU3RhcnREYXkgfHwgMDsKKyAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoY3JlYXRlRWxlbWVu
dCgidGgiLCBDbGFzc05hbWVzLkRheUxhYmVsICsgIiAiICsgQ2xhc3NOYW1lcy5XZWVrQ29sdW1u
LCBnbG9iYWwucGFyYW1zLndlZWtMYWJlbCkpOwogICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNzsg
aSsrKQogICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoY3JlYXRlRWxlbWVudCgidGgiLCBD
bGFzc05hbWVzLkRheUxhYmVsLCBnbG9iYWwucGFyYW1zLmRheUxhYmVsc1sod2Vla1N0YXJ0RGF5
ICsgaSkgJSA3XSkpOwogICAgIHRoaXMuX2RheXNDb250YWluZXIuYXBwZW5kQ2hpbGQoY29udGFp
bmVyKTsKICAgICB0aGlzLl9kYXlzID0gW107CisgICAgdGhpcy5fd2Vla051bWJlcnMgPSBbXTsK
ICAgICBmb3IgKHZhciB3ID0gMDsgdyA8IERheXNUYWJsZS5fV2Vla3M7IHcrKykgewogICAgICAg
ICBjb250YWluZXIgPSBjcmVhdGVFbGVtZW50KCJ0ciIsIENsYXNzTmFtZXMuV2Vla0NvbnRhaW5l
cik7CiAgICAgICAgIHZhciB3ZWVrID0gW107CisgICAgICAgIHZhciB3ZWVrTnVtYmVyTm9kZSA9
IGNyZWF0ZUVsZW1lbnQoInRkIiwgQ2xhc3NOYW1lcy5EYXkgKyAiICIgKyBDbGFzc05hbWVzLldl
ZWtDb2x1bW4sICIgIik7CisgICAgICAgIHdlZWtOdW1iZXJOb2RlLmRhdGFzZXQucG9zaXRpb25Y
ID0gLTE7CisgICAgICAgIHdlZWtOdW1iZXJOb2RlLmRhdGFzZXQucG9zaXRpb25ZID0gdzsKKyAg
ICAgICAgdGhpcy5fd2Vla051bWJlcnMucHVzaCh3ZWVrTnVtYmVyTm9kZSk7CisgICAgICAgIGNv
bnRhaW5lci5hcHBlbmRDaGlsZCh3ZWVrTnVtYmVyTm9kZSk7CiAgICAgICAgIGZvciAodmFyIGQg
PSAwOyBkIDwgNzsgZCsrKSB7CiAgICAgICAgICAgICB2YXIgZGF5ID0gY3JlYXRlRWxlbWVudCgi
dGQiLCBDbGFzc05hbWVzLkRheSwgIiAiKTsKICAgICAgICAgICAgIGRheS5zZXRBdHRyaWJ1dGUo
ImRhdGEtcG9zaXRpb24teCIsIFN0cmluZyhkKSk7CkBAIC0xMDk1LDE0ICsxMjcyLDE4IEBAIERh
eXNUYWJsZS5wcm90b3R5cGUuX3JlbmRlck1vbnRoID0gZnVuY3Rpb24obW9udGgpIHsKICAgICBp
ZiAoc3RhcnRPZmZzZXQgPj0gMCkKICAgICAgICAgc3RhcnRPZmZzZXQgLT0gNzsKICAgICBkYXlJ
dGVyYXRvci5zZXRVVENEYXRlKHN0YXJ0T2Zmc2V0ICsgMSk7CisgICAgdmFyIG1vbmRheU9mZnNl
dCA9ICg4IC0gd2Vla1N0YXJ0RGF5KSAlIDc7CisgICAgdmFyIHN1bmRheU9mZnNldCA9IHdlZWtT
dGFydERheSAlIDc7CiAgICAgZm9yICh2YXIgdyA9IDA7IHcgPCBEYXlzVGFibGUuX1dlZWtzOyB3
KyspIHsKICAgICAgICAgZm9yICh2YXIgZCA9IDA7IGQgPCA3OyBkKyspIHsKICAgICAgICAgICAg
IHZhciBpdGVyTW9udGggPSBNb250aC5jcmVhdGVGcm9tRGF0ZShkYXlJdGVyYXRvcik7CisgICAg
ICAgICAgICB2YXIgaXRlcldlZWsgPSBXZWVrLmNyZWF0ZUZyb21EYXRlKGRheUl0ZXJhdG9yKTsK
ICAgICAgICAgICAgIHZhciB0aW1lID0gZGF5SXRlcmF0b3IuZ2V0VGltZSgpOwogICAgICAgICAg
ICAgdmFyIGVsZW1lbnQgPSB0aGlzLl9kYXlzW3ddW2RdOwogICAgICAgICAgICAgZWxlbWVudC5p
bm5lclRleHQgPSBsb2NhbGl6ZU51bWJlcihkYXlJdGVyYXRvci5nZXRVVENEYXRlKCkpOwogICAg
ICAgICAgICAgZWxlbWVudC5jbGFzc05hbWUgPSBDbGFzc05hbWVzLkRheTsKICAgICAgICAgICAg
IGVsZW1lbnQuZGF0YXNldC5zdWJtaXRWYWx1ZSA9IERheS5jcmVhdGVGcm9tRGF0ZShkYXlJdGVy
YXRvcikudG9TdHJpbmcoKTsKKyAgICAgICAgICAgIGVsZW1lbnQuZGF0YXNldC53ZWVrVmFsdWUg
PSBpdGVyV2Vlay50b1N0cmluZygpOwogICAgICAgICAgICAgZWxlbWVudC5kYXRhc2V0Lm1vbnRo
VmFsdWUgPSBpdGVyTW9udGgudG9TdHJpbmcoKTsKICAgICAgICAgICAgIGlmIChpc05hTih0aW1l
KSkgewogICAgICAgICAgICAgICAgIGVsZW1lbnQuaW5uZXJUZXh0ID0gIi0iOwpAQCAtMTExNCw2
ICsxMjk1LDE4IEBAIERheXNUYWJsZS5wcm90b3R5cGUuX3JlbmRlck1vbnRoID0gZnVuY3Rpb24o
bW9udGgpIHsKICAgICAgICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoQ2xhc3NOYW1l
cy5Ob3RUaGlzTW9udGgpOwogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgZWxl
bWVudC5jbGFzc0xpc3QuYWRkKENsYXNzTmFtZXMuQXZhaWxhYmxlKTsKKyAgICAgICAgICAgIGlm
IChkID09PSBtb25kYXlPZmZzZXQpIHsKKyAgICAgICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlz
dC5hZGQoQ2xhc3NOYW1lcy5Nb25kYXkpOworICAgICAgICAgICAgICAgIGlmICh0aGlzLl93ZWVr
TnVtYmVyc1t3XSkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl93ZWVrTnVtYmVyc1t3XS5k
YXRhc2V0LndlZWtWYWx1ZSA9IGl0ZXJXZWVrLnRvU3RyaW5nKCk7CisgICAgICAgICAgICAgICAg
ICAgIHRoaXMuX3dlZWtOdW1iZXJzW3ddLmlubmVyVGV4dCA9IGxvY2FsaXplTnVtYmVyKGl0ZXJX
ZWVrLndlZWspOworICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5jbGFzc0xpc3QuY29u
dGFpbnMoQ2xhc3NOYW1lcy5BdmFpbGFibGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgdGhp
cy5fd2Vla051bWJlcnNbd10uY2xhc3NMaXN0LmFkZChDbGFzc05hbWVzLkF2YWlsYWJsZSk7Cisg
ICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3dl
ZWtOdW1iZXJzW3ddLmNsYXNzTGlzdC5hZGQoQ2xhc3NOYW1lcy5VbmF2YWlsYWJsZSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChkID09PSBzdW5kYXlPZmZzZXQp
CisgICAgICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKENsYXNzTmFtZXMuU3VuZGF5
KTsKICAgICAgICAgICAgIGRheUl0ZXJhdG9yLnNldFVUQ0RhdGUoZGF5SXRlcmF0b3IuZ2V0VVRD
RGF0ZSgpICsgMSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMTIxLDE5ICsxMzE0LDE4IEBAIERh
eXNUYWJsZS5wcm90b3R5cGUuX3JlbmRlck1vbnRoID0gZnVuY3Rpb24obW9udGgpIHsKIAogLyoq
CiAgKiBAcGFyYW0geyFNb250aH0gbW9udGgKLSAqIEBwYXJhbSB7IWJvb2x9IGFuaW1hdGUKLSAq
IEBwYXJhbSB7IWJvb2x9IGtlZXBTZWxlY3Rpb25Qb3NpdGlvbgorICogQHBhcmFtIHshQ2FsZW5k
YXJQaWNrZXIuTmF2aWdhdGlvbkJlaGF2aW91cn0gbmF2aWdhdGlvbkJlaGF2aW91cgogICovCi1E
YXlzVGFibGUucHJvdG90eXBlLm5hdmlnYXRlVG9Nb250aCA9IGZ1bmN0aW9uKG1vbnRoLCBhbmlt
YXRlLCBrZWVwU2VsZWN0aW9uUG9zaXRpb24pIHsKK0RheXNUYWJsZS5wcm90b3R5cGUubmF2aWdh
dGVUb01vbnRoID0gZnVuY3Rpb24obW9udGgsIG5hdmlnYXRpb25CZWhhdmlvdXIpIHsKICAgICB2
YXIgZmlyc3ROb2RlSW5TZWxlY3RlZFJhbmdlID0gdGhpcy5fZmlyc3ROb2RlSW5TZWxlY3RlZFJh
bmdlKCk7Ci0gICAgaWYgKGFuaW1hdGUpIHsKKyAgICBpZiAobmF2aWdhdGlvbkJlaGF2aW91ciAm
IENhbGVuZGFyUGlja2VyLk5hdmlnYXRpb25CZWhhdmlvdXIuQW5pbWF0ZSkgewogICAgICAgICB2
YXIgZGF5c1N0eWxlID0gdGhpcy5fZGF5c0NvbnRhaW5lci5zdHlsZTsKICAgICAgICAgZGF5c1N0
eWxlLnBvc2l0aW9uID0gInJlbGF0aXZlIjsKICAgICAgICAgZGF5c1N0eWxlLndlYmtpdFRyYW5z
aXRpb24gPSAibGVmdCAwLjFzIGVhc2UiOwogICAgICAgICBkYXlzU3R5bGUubGVmdCA9ICh0aGlz
LnBpY2tlci5jdXJyZW50TW9udGgoKS52YWx1ZU9mKCkgPiBtb250aC52YWx1ZU9mKCkgPyAiIiA6
ICItIikgKyB0aGlzLl9kYXlzQ29udGFpbmVyLm9mZnNldFdpZHRoICsgInB4IjsKICAgICB9CiAg
ICAgdGhpcy5fcmVuZGVyTW9udGgobW9udGgpOwotICAgIGlmIChrZWVwU2VsZWN0aW9uUG9zaXRp
b24gJiYgZmlyc3ROb2RlSW5TZWxlY3RlZFJhbmdlKSB7CisgICAgaWYgKG5hdmlnYXRpb25CZWhh
dmlvdXIgJiBDYWxlbmRhclBpY2tlci5OYXZpZ2F0aW9uQmVoYXZpb3VyLktlZXBTZWxlY3Rpb25Q
b3NpdGlvbiAmJiBmaXJzdE5vZGVJblNlbGVjdGVkUmFuZ2UpIHsKICAgICAgICAgdmFyIHggPSBw
YXJzZUludChmaXJzdE5vZGVJblNlbGVjdGVkUmFuZ2UuZGF0YXNldC5wb3NpdGlvblgsIDEwKTsK
ICAgICAgICAgdmFyIHkgPSBwYXJzZUludChmaXJzdE5vZGVJblNlbGVjdGVkUmFuZ2UuZGF0YXNl
dC5wb3NpdGlvblksIDEwKTsKICAgICAgICAgdGhpcy5fc2VsZWN0UmFuZ2VBdFBvc2l0aW9uKHgs
IHkpOwpAQCAtMTE3Miw3ICsxMzY0LDcgQEAgRGF5c1RhYmxlLnByb3RvdHlwZS5fbWFya1Jhbmdl
QXNTZWxlY3RlZCA9IGZ1bmN0aW9uKGRheSkgewogRGF5c1RhYmxlLnByb3RvdHlwZS5zZWxlY3RS
YW5nZSA9IGZ1bmN0aW9uKGRheSkgewogICAgIHRoaXMuX2Rlc2VsZWN0KCk7CiAgICAgaWYgKHRo
aXMuc3RhcnREYXRlKCkgPiBkYXkuc3RhcnREYXRlKCkgfHwgdGhpcy5lbmREYXRlKCkgPCBkYXku
ZW5kRGF0ZSgpKQotICAgICAgICB0aGlzLnBpY2tlci5zaG93TW9udGgoTW9udGguY3JlYXRlRnJv
bURhdGUoZGF5LnN0YXJ0RGF0ZSgpKSwgZmFsc2UpOworICAgICAgICB0aGlzLnBpY2tlci5zaG93
TW9udGgoTW9udGguY3JlYXRlRnJvbURhdGUoZGF5LnN0YXJ0RGF0ZSgpKSk7CiAgICAgdGhpcy5f
bWFya1JhbmdlQXNTZWxlY3RlZChkYXkpOwogfTsKIApAQCAtMTIyMiw3ICsxNDE0LDggQEAgRGF5
c1RhYmxlLnByb3RvdHlwZS5lbmREYXRlID0gZnVuY3Rpb24oKSB7CiAgKiBAcGFyYW0geyFudW1i
ZXJ9IHkKICAqLwogRGF5c1RhYmxlLnByb3RvdHlwZS5fc2VsZWN0UmFuZ2VBdFBvc2l0aW9uID0g
ZnVuY3Rpb24oeCwgeSkgewotICAgIHRoaXMuX3NlbGVjdFJhbmdlQ29udGFpbmluZ05vZGUodGhp
cy5fZGF5c1t5XVt4XSk7CisgICAgdmFyIG5vZGUgPSB4ID09PSAtMSA/IHRoaXMuX3dlZWtOdW1i
ZXJzW3ldIDogdGhpcy5fZGF5c1t5XVt4XTsKKyAgICB0aGlzLl9zZWxlY3RSYW5nZUNvbnRhaW5p
bmdOb2RlKG5vZGUpOwogfTsKIAogLyoqCkBAIC0xMjM5LDI0ICsxNDMyLDMwIEBAIERheXNUYWJs
ZS5wcm90b3R5cGUuX2Rlc2VsZWN0ID0gZnVuY3Rpb24oKSB7CiB9OwogCiAvKioKKyAqIEBwYXJh
bSB7IUNhbGVuZGFyUGlja2VyLk5hdmlnYXRpb25CZWhhdmlvdXI9fSBuYXZpZ2F0aW9uQmVoYXZp
b3VyCiAgKiBAcmV0dXJuIHshYm9vbGVhbn0KICAqLwotRGF5c1RhYmxlLnByb3RvdHlwZS5fbWF5
YmVTZXRQcmV2aW91c01vbnRoID0gZnVuY3Rpb24oKSB7CitEYXlzVGFibGUucHJvdG90eXBlLl9t
YXliZVNldFByZXZpb3VzTW9udGggPSBmdW5jdGlvbihuYXZpZ2F0aW9uQmVoYXZpb3VyKSB7Cisg
ICAgaWYgKHR5cGVvZiBuYXZpZ2F0aW9uQmVoYXZpb3VyID09PSAidW5kZWZpbmVkIikKKyAgICAg
ICAgbmF2aWdhdGlvbkJlaGF2aW91ciA9IENhbGVuZGFyUGlja2VyLk5hdmlnYXRpb25CZWhhdmlv
dXIuQW5pbWF0ZTsKICAgICB2YXIgcHJldmlvdXNNb250aCA9IHRoaXMucGlja2VyLmN1cnJlbnRN
b250aCgpLnByZXZpb3VzKCk7CiAgICAgaWYgKCF0aGlzLnBpY2tlci5zaG91bGRTaG93TW9udGgo
cHJldmlvdXNNb250aCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB0aGlzLnBpY2tlci5z
aG93TW9udGgocHJldmlvdXNNb250aCwgdHJ1ZSk7CisgICAgdGhpcy5waWNrZXIuc2hvd01vbnRo
KHByZXZpb3VzTW9udGgsIG5hdmlnYXRpb25CZWhhdmlvdXIpOwogICAgIHJldHVybiB0cnVlOwog
fTsKIAogLyoqCisgKiBAcGFyYW0geyFDYWxlbmRhclBpY2tlci5OYXZpZ2F0aW9uQmVoYXZpb3Vy
PX0gbmF2aWdhdGlvbkJlaGF2aW91cgogICogQHJldHVybiB7IWJvb2xlYW59CiAgKi8KLURheXNU
YWJsZS5wcm90b3R5cGUuX21heWJlU2V0TmV4dE1vbnRoID0gZnVuY3Rpb24oKSB7CitEYXlzVGFi
bGUucHJvdG90eXBlLl9tYXliZVNldE5leHRNb250aCA9IGZ1bmN0aW9uKG5hdmlnYXRpb25CZWhh
dmlvdXIpIHsKKyAgICBpZiAodHlwZW9mIG5hdmlnYXRpb25CZWhhdmlvdXIgPT09ICJ1bmRlZmlu
ZWQiKQorICAgICAgICBuYXZpZ2F0aW9uQmVoYXZpb3VyID0gQ2FsZW5kYXJQaWNrZXIuTmF2aWdh
dGlvbkJlaGF2aW91ci5BbmltYXRlOwogICAgIHZhciBuZXh0TW9udGggPSB0aGlzLnBpY2tlci5j
dXJyZW50TW9udGgoKS5uZXh0KCk7CiAgICAgaWYgKCF0aGlzLnBpY2tlci5zaG91bGRTaG93TW9u
dGgobmV4dE1vbnRoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHRoaXMucGlja2VyLnNo
b3dNb250aChuZXh0TW9udGgsIHRydWUpOworICAgIHRoaXMucGlja2VyLnNob3dNb250aChuZXh0
TW9udGgsIG5hdmlnYXRpb25CZWhhdmlvdXIpOwogICAgIHJldHVybiB0cnVlOwogfTsKIApAQCAt
MTI5OCw3ICsxNDk3LDcgQEAgRGF5c1RhYmxlLnByb3RvdHlwZS5faGFuZGxlS2V5ID0gZnVuY3Rp
b24oZXZlbnQpIHsKICAgICAgICAgeCA9IHBhcnNlSW50KGZpcnN0Tm9kZUluU2VsZWN0ZWRSYW5n
ZS5kYXRhc2V0LnBvc2l0aW9uWCwgMTApOwogICAgICAgICB5ID0gcGFyc2VJbnQoZmlyc3ROb2Rl
SW5TZWxlY3RlZFJhbmdlLmRhdGFzZXQucG9zaXRpb25ZLCAxMCk7CiAgICAgfQotICAgIGlmICgh
dGhpcy5faGFzU2VsZWN0aW9uKCkgJiYgKGtleSA9PSAiTGVmdCIgfHwga2V5ID09ICJVcCIgfHwg
a2V5ID09ICJSaWdodCIgfHwga2V5ID09ICJEb3duIikpIHsKKyAgICBpZiAoIWZpcnN0Tm9kZUlu
U2VsZWN0ZWRSYW5nZSAmJiAoa2V5ID09ICJMZWZ0IiB8fCBrZXkgPT0gIlVwIiB8fCBrZXkgPT0g
IlJpZ2h0IiB8fCBrZXkgPT0gIkRvd24iKSkgewogICAgICAgICAvLyBQdXQgdGhlIHNlbGVjdGlv
biBvbiBhIGNlbnRlciBjZWxsLgogICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbihldmVudCwg
MywgTWF0aC5mbG9vcihEYXlzVGFibGUuX1dlZWtzIC8gMiAtIDEpKTsKICAgICAgICAgcmV0dXJu
OwpAQCAtMTM0OSwyMCArMTU0OCwxOCBAQCBEYXlzVGFibGUucHJvdG90eXBlLl9oYW5kbGVLZXkg
PSBmdW5jdGlvbihldmVudCkgewogICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbihldmVudCwg
eCwgeSk7CiAKICAgICB9IGVsc2UgaWYgKGtleSA9PSAiUGFnZVVwIikgewotICAgICAgICBpZiAo
IXRoaXMuX21heWJlU2V0UHJldmlvdXNNb250aCgpKQorICAgICAgICBpZiAoIXRoaXMuX21heWJl
U2V0UHJldmlvdXNNb250aChDYWxlbmRhclBpY2tlci5OYXZpZ2F0aW9uQmVoYXZpb3VyLkFuaW1h
dGUgfCBDYWxlbmRhclBpY2tlci5OYXZpZ2F0aW9uQmVoYXZpb3VyLktlZXBTZWxlY3Rpb25Qb3Np
dGlvbikpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHRoaXMudXBkYXRlU2VsZWN0aW9u
KGV2ZW50LCB4LCB5KTsKLQorICAgICAgICBldmVudEhhbmRsZWQgPSB0cnVlOwogICAgIH0gZWxz
ZSBpZiAoa2V5ID09ICJQYWdlRG93biIpIHsKLSAgICAgICAgaWYgKCF0aGlzLl9tYXliZVNldE5l
eHRNb250aCgpKQorICAgICAgICBpZiAoIXRoaXMuX21heWJlU2V0TmV4dE1vbnRoKENhbGVuZGFy
UGlja2VyLk5hdmlnYXRpb25CZWhhdmlvdXIuQW5pbWF0ZSB8IENhbGVuZGFyUGlja2VyLk5hdmln
YXRpb25CZWhhdmlvdXIuS2VlcFNlbGVjdGlvblBvc2l0aW9uKSkKICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb24oZXZlbnQsIHgsIHkpOwotCi0gICAgfSBl
bHNlIGlmICh0aGlzLl9oYXNTZWxlY3Rpb24oKSAmJiBrZXkgPT0gIkVudGVyIikgewotICAgICAg
ICB2YXIgZGF5Tm9kZSA9IHRoaXMuX2RheXNbeV1beF07Ci0gICAgICAgIGlmIChkYXlOb2RlLmNs
YXNzTGlzdC5jb250YWlucyhDbGFzc05hbWVzLkF2YWlsYWJsZSkpIHsKLSAgICAgICAgICAgIHRo
aXMucGlja2VyLnN1Ym1pdFZhbHVlKGRheU5vZGUuZGF0YXNldC5zdWJtaXRWYWx1ZSk7Ci0gICAg
ICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKKyAgICAgICAgZXZlbnQuc3RvcFByb3Bh
Z2F0aW9uKCk7CisgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CisgICAgfSBlbHNlIGlm
IChmaXJzdE5vZGVJblNlbGVjdGVkUmFuZ2UgJiYga2V5ID09ICJFbnRlciIpIHsKKyAgICAgICAg
aWYgKGZpcnN0Tm9kZUluU2VsZWN0ZWRSYW5nZS5jbGFzc0xpc3QuY29udGFpbnMoQ2xhc3NOYW1l
cy5BdmFpbGFibGUpKSB7CisgICAgICAgICAgICB0aGlzLnBpY2tlci5zdWJtaXRWYWx1ZShmaXJz
dE5vZGVJblNlbGVjdGVkUmFuZ2UuZGF0YXNldC5zdWJtaXRWYWx1ZSk7CisgICAgICAgICAgICBl
dmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICB9CiAKICAgICB9IGVsc2UgaWYgKGtleSA9
PSAiVSswMDU0IikgeyAvLyAndCcKQEAgLTE0MTIsNyArMTYwOSw3IEBAIE1vbnRoUGlja2VyRGF5
c1RhYmxlLnByb3RvdHlwZS5fbWFya1JhbmdlQXNTZWxlY3RlZCA9IGZ1bmN0aW9uKG1vbnRoKSB7
CiBNb250aFBpY2tlckRheXNUYWJsZS5wcm90b3R5cGUuc2VsZWN0UmFuZ2UgPSBmdW5jdGlvbiht
b250aCkgewogICAgIHRoaXMuX2Rlc2VsZWN0KCk7CiAgICAgaWYgKHRoaXMuc3RhcnREYXRlKCkg
Pj0gbW9udGguZW5kRGF0ZSgpIHx8IHRoaXMuZW5kRGF0ZSgpIDw9IG1vbnRoLnN0YXJ0RGF0ZSgp
KQotICAgICAgICB0aGlzLnBpY2tlci5zaG93TW9udGgobW9udGgsIHRydWUpOworICAgICAgICB0
aGlzLnBpY2tlci5zaG93TW9udGgobW9udGgsIENhbGVuZGFyUGlja2VyLk5hdmlnYXRpb25CZWhh
dmlvdXIuQW5pbWF0ZSk7CiAgICAgdGhpcy5fbWFya1JhbmdlQXNTZWxlY3RlZChtb250aCk7CiB9
OwogCkBAIC0xNDIxLDcgKzE2MTgsNyBAQCBNb250aFBpY2tlckRheXNUYWJsZS5wcm90b3R5cGUu
c2VsZWN0UmFuZ2UgPSBmdW5jdGlvbihtb250aCkgewogICovCiBNb250aFBpY2tlckRheXNUYWJs
ZS5wcm90b3R5cGUuc2VsZWN0UmFuZ2VBbmRTaG93RW50aXJlUmFuZ2UgPSBmdW5jdGlvbihtb250
aCkgewogICAgIHRoaXMuX2Rlc2VsZWN0KCk7Ci0gICAgdGhpcy5waWNrZXIuc2hvd01vbnRoKG1v
bnRoLCB0cnVlKTsKKyAgICB0aGlzLnBpY2tlci5zaG93TW9udGgobW9udGgsIENhbGVuZGFyUGlj
a2VyLk5hdmlnYXRpb25CZWhhdmlvdXIuQW5pbWF0ZSk7CiAgICAgdGhpcy5fbWFya1JhbmdlQXNT
ZWxlY3RlZChtb250aCk7CiB9OwogCkBAIC0xNDQ0LDE1ICsxNjQxLDEyIEBAIE1vbnRoUGlja2Vy
RGF5c1RhYmxlLnByb3RvdHlwZS5faGFuZGxlS2V5ID0gZnVuY3Rpb24oZXZlbnQpIHsKICAgICB2
YXIgZXZlbnRIYW5kbGVkID0gZmFsc2U7CiAgICAgdmFyIGN1cnJlbnRNb250aCA9IHRoaXMucGlj
a2VyLmN1cnJlbnRNb250aCgpOwogICAgIHZhciBmaXJzdE5vZGVJblNlbGVjdGVkUmFuZ2UgPSB0
aGlzLl9maXJzdE5vZGVJblNlbGVjdGVkUmFuZ2UoKTsKKyAgICB2YXIgc2VsZWN0ZWRNb250aCA9
IHRoaXMuX3JhbmdlRm9yTm9kZShmaXJzdE5vZGVJblNlbGVjdGVkUmFuZ2UpOwogICAgIGlmICgh
Zmlyc3ROb2RlSW5TZWxlY3RlZFJhbmdlCiAgICAgICAgICYmIChrZXkgPT0gIlJpZ2h0IiB8fCBr
ZXkgPT0gIkxlZnQiIHx8IGtleSA9PSAiVXAiIHx8IGtleSA9PSAiRG93biIgfHwga2V5ID09ICJQ
YWdlVXAiIHx8IGtleSA9PSAiUGFnZURvd24iKSkgewogICAgICAgICB0aGlzLnNlbGVjdFJhbmdl
KGN1cnJlbnRNb250aCk7Ci0gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwotICAgICAg
ICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHZh
ciBzZWxlY3RlZE1vbnRoID0gdGhpcy5fcmFuZ2VGb3JOb2RlKGZpcnN0Tm9kZUluU2VsZWN0ZWRS
YW5nZSk7Ci0gICAgaWYgKGtleSA9PSAoZ2xvYmFsLnBhcmFtcy5pc0NhbGVuZGFyUlRMID8gIlJp
Z2h0IiA6ICJMZWZ0IikgfHwga2V5ID09ICJVcCIgfHwga2V5ID09ICJQYWdlVXAiKSB7CisgICAg
ICAgIGV2ZW50SGFuZGxlZCA9IHRydWU7CisgICAgfSBlbHNlIGlmIChrZXkgPT0gKGdsb2JhbC5w
YXJhbXMuaXNDYWxlbmRhclJUTCA/ICJSaWdodCIgOiAiTGVmdCIpIHx8IGtleSA9PSAiVXAiIHx8
IGtleSA9PSAiUGFnZVVwIikgewogICAgICAgICBpZiAoc2VsZWN0ZWRNb250aC52YWx1ZU9mKCkg
PiBjdXJyZW50TW9udGgudmFsdWVPZigpKQogICAgICAgICAgICAgdGhpcy5zZWxlY3RSYW5nZUFu
ZFNob3dFbnRpcmVSYW5nZShjdXJyZW50TW9udGgpOwogICAgICAgICBlbHNlCkBAIC0xNDY0LDkg
KzE2NTgsOSBAQCBNb250aFBpY2tlckRheXNUYWJsZS5wcm90b3R5cGUuX2hhbmRsZUtleSA9IGZ1
bmN0aW9uKGV2ZW50KSB7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHRoaXMuc2VsZWN0UmFu
Z2VBbmRTaG93RW50aXJlUmFuZ2UoY3VycmVudE1vbnRoLm5leHQoKSk7CiAgICAgICAgIGV2ZW50
SGFuZGxlZCA9IHRydWU7Ci0gICAgfSBlbHNlIGlmICh0aGlzLl9oYXNTZWxlY3Rpb24oKSAmJiBr
ZXkgPT0gIkVudGVyIikgewotICAgICAgICBpZiAoY3VycmVudFNlbGVjdGlvbikgewotICAgICAg
ICAgICAgdGhpcy5waWNrZXIuc3VibWl0VmFsdWUoY3VycmVudFNlbGVjdGlvbi50b1N0cmluZygp
KTsKKyAgICB9IGVsc2UgaWYgKHNlbGVjdGVkTW9udGggJiYga2V5ID09ICJFbnRlciIpIHsKKyAg
ICAgICAgaWYgKGZpcnN0Tm9kZUluU2VsZWN0ZWRSYW5nZS5jbGFzc0xpc3QuY29udGFpbnMoQ2xh
c3NOYW1lcy5BdmFpbGFibGUpKSB7CisgICAgICAgICAgICB0aGlzLnBpY2tlci5zdWJtaXRWYWx1
ZShzZWxlY3RlZE1vbnRoLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgZXZlbnRIYW5kbGVkID0g
dHJ1ZTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoa2V5ID09ICJVKzAwNTQiKSB7IC8vICd0
JwpAQCAtMTQ4MCw2ICsxNjc0LDExNiBAQCBNb250aFBpY2tlckRheXNUYWJsZS5wcm90b3R5cGUu
X2hhbmRsZUtleSA9IGZ1bmN0aW9uKGV2ZW50KSB7CiB9OwogCiAvKioKKyAqIEBjb25zdHJ1Y3Rv
cgorICogQHBhcmFteyFDYWxlbmRhclBpY2tlcn0gcGlja2VyCisgKi8KK2Z1bmN0aW9uIFdlZWtQ
aWNrZXJEYXlzVGFibGUocGlja2VyKSB7CisgICAgRGF5c1RhYmxlLmNhbGwodGhpcywgcGlja2Vy
KTsKK30KK1dlZWtQaWNrZXJEYXlzVGFibGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShEYXlz
VGFibGUucHJvdG90eXBlKTsKKworLyoqCisgKiBAcGFyYW0geyFXZWVrfSB3ZWVrCisgKi8KK1dl
ZWtQaWNrZXJEYXlzVGFibGUucHJvdG90eXBlLl9tYXJrUmFuZ2VBc1NlbGVjdGVkID0gZnVuY3Rp
b24od2VlaykgeworICAgIHZhciB3ZWVrU3RyaW5nID0gd2Vlay50b1N0cmluZygpOworICAgIGZv
ciAodmFyIHcgPSAwOyB3IDwgRGF5c1RhYmxlLl9XZWVrczsgdysrKSB7CisgICAgICAgIGZvciAo
dmFyIGQgPSAwOyBkIDwgNzsgZCsrKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fZGF5c1t3XVtk
XS5kYXRhc2V0LndlZWtWYWx1ZSA9PSB3ZWVrU3RyaW5nKSB7CisgICAgICAgICAgICAgICAgdGhp
cy5fZGF5c1t3XVtkXS5jbGFzc0xpc3QuYWRkKENsYXNzTmFtZXMuU2VsZWN0ZWQpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5f
d2Vla051bWJlcnMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaWYgKHRoaXMuX3dlZWtOdW1iZXJz
W2ldLmRhdGFzZXQud2Vla1ZhbHVlID09PSB3ZWVrU3RyaW5nKSB7CisgICAgICAgICAgICB0aGlz
Ll93ZWVrTnVtYmVyc1tpXS5jbGFzc0xpc3QuYWRkKENsYXNzTmFtZXMuU2VsZWN0ZWQpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9OworCisvKioKKyAqIEBwYXJhbSB7
IVdlZWt9IHdlZWsKKyAqLworV2Vla1BpY2tlckRheXNUYWJsZS5wcm90b3R5cGUuc2VsZWN0UmFu
Z2UgPSBmdW5jdGlvbih3ZWVrKSB7CisgICAgdGhpcy5fZGVzZWxlY3QoKTsKKyAgICB2YXIgd2Vl
a1N0YXJ0RGF0ZSA9IHdlZWsuc3RhcnREYXRlKCk7CisgICAgdmFyIHdlZWtFbmREYXRlID0gd2Vl
ay5lbmREYXRlKCk7CisgICAgaWYgKHRoaXMuc3RhcnREYXRlKCkgPj0gd2Vla0VuZERhdGUpCisg
ICAgICAgIHRoaXMucGlja2VyLnNob3dNb250aChNb250aC5jcmVhdGVGcm9tRGF0ZSh3ZWVrRW5k
RGF0ZSksIENhbGVuZGFyUGlja2VyLk5hdmlnYXRpb25CZWhhdmlvdXIuQW5pbWF0ZSk7CisgICAg
ZWxzZSBpZiAodGhpcy5lbmREYXRlKCkgPD0gd2Vla1N0YXJ0RGF0ZSkKKyAgICAgICAgdGhpcy5w
aWNrZXIuc2hvd01vbnRoKE1vbnRoLmNyZWF0ZUZyb21EYXRlKHdlZWtTdGFydERhdGUpLCBDYWxl
bmRhclBpY2tlci5OYXZpZ2F0aW9uQmVoYXZpb3VyLkFuaW1hdGUpOworICAgIHRoaXMuX21hcmtS
YW5nZUFzU2VsZWN0ZWQod2Vlayk7Cit9OworCisvKioKKyAqIEBwYXJhbSB7IVdlZWt9IHdlZWsK
KyAqLworV2Vla1BpY2tlckRheXNUYWJsZS5wcm90b3R5cGUuc2VsZWN0UmFuZ2VBbmRTaG93RW50
aXJlUmFuZ2UgPSBmdW5jdGlvbih3ZWVrKSB7CisgICAgdGhpcy5fZGVzZWxlY3QoKTsKKyAgICB2
YXIgd2Vla1N0YXJ0RGF0ZSA9IHdlZWsuc3RhcnREYXRlKCk7CisgICAgdmFyIHdlZWtFbmREYXRl
ID0gd2Vlay5lbmREYXRlKCk7CisgICAgaWYgKHRoaXMuc3RhcnREYXRlKCkgPiB3ZWVrU3RhcnRE
YXRlKQorICAgICAgICB0aGlzLnBpY2tlci5zaG93TW9udGgoTW9udGguY3JlYXRlRnJvbURhdGUo
d2Vla1N0YXJ0RGF0ZSksIENhbGVuZGFyUGlja2VyLk5hdmlnYXRpb25CZWhhdmlvdXIuQW5pbWF0
ZSk7CisgICAgZWxzZSBpZiAodGhpcy5lbmREYXRlKCkgPCB3ZWVrRW5kRGF0ZSkKKyAgICAgICAg
dGhpcy5waWNrZXIuc2hvd01vbnRoKE1vbnRoLmNyZWF0ZUZyb21EYXRlKHdlZWtFbmREYXRlKSwg
Q2FsZW5kYXJQaWNrZXIuTmF2aWdhdGlvbkJlaGF2aW91ci5BbmltYXRlKTsKKyAgICB0aGlzLl9t
YXJrUmFuZ2VBc1NlbGVjdGVkKHdlZWspOworfTsKKworLyoqCisgKiBAcGFyYW0geyFFbGVtZW50
fSBkYXlOb2RlCisgKiBAcmV0dXJuIHs/V2Vla30KKyAqLworV2Vla1BpY2tlckRheXNUYWJsZS5w
cm90b3R5cGUuX3JhbmdlRm9yTm9kZSA9IGZ1bmN0aW9uKGRheU5vZGUpIHsKKyAgICBpZiAoIWRh
eU5vZGUpCisgICAgICAgIHJldHVybiBudWxsOworICAgIHJldHVybiBXZWVrLnBhcnNlKGRheU5v
ZGUuZGF0YXNldC53ZWVrVmFsdWUpOworfTsKKworLyoqCisgKiBAcGFyYW0geyFFdmVudH0gZXZl
bnQKKyAqLworV2Vla1BpY2tlckRheXNUYWJsZS5wcm90b3R5cGUuX2hhbmRsZUtleSA9IGZ1bmN0
aW9uKGV2ZW50KSB7CisgICAgdGhpcy5waWNrZXIubWF5YmVVcGRhdGVGb2N1c1N0eWxlKCk7Cisg
ICAgdmFyIGtleSA9IGV2ZW50LmtleUlkZW50aWZpZXI7CisgICAgdmFyIGV2ZW50SGFuZGxlZCA9
IGZhbHNlOworICAgIHZhciBjdXJyZW50TW9udGggPSB0aGlzLnBpY2tlci5jdXJyZW50TW9udGgo
KTsKKyAgICB2YXIgZmlyc3ROb2RlSW5TZWxlY3RlZFJhbmdlID0gdGhpcy5fZmlyc3ROb2RlSW5T
ZWxlY3RlZFJhbmdlKCk7CisgICAgdmFyIHNlbGVjdGVkV2VlayA9IHRoaXMuX3JhbmdlRm9yTm9k
ZShmaXJzdE5vZGVJblNlbGVjdGVkUmFuZ2UpOworICAgIGlmICghZmlyc3ROb2RlSW5TZWxlY3Rl
ZFJhbmdlCisgICAgICAgICYmIChrZXkgPT0gIlJpZ2h0IiB8fCBrZXkgPT0gIkxlZnQiIHx8IGtl
eSA9PSAiVXAiIHx8IGtleSA9PSAiRG93biIgfHwga2V5ID09ICJQYWdlVXAiIHx8IGtleSA9PSAi
UGFnZURvd24iKSkgeworICAgICAgICAvLyBQdXQgdGhlIHNlbGVjdGlvbiBvbiBhIGNlbnRlciBj
ZWxsLgorICAgICAgICB0aGlzLl9zZWxlY3RSYW5nZUF0UG9zaXRpb24oMywgTWF0aC5mbG9vcihE
YXlzVGFibGUuX1dlZWtzIC8gMiAtIDEpKTsKKyAgICB9IGVsc2UgaWYgKGtleSA9PSAoZ2xvYmFs
LnBhcmFtcy5pc0NhbGVuZGFyUlRMID8gIlJpZ2h0IiA6ICJMZWZ0IikgfHwga2V5ID09ICJVcCIp
IHsKKyAgICAgICAgdGhpcy5zZWxlY3RSYW5nZUFuZFNob3dFbnRpcmVSYW5nZShzZWxlY3RlZFdl
ZWsucHJldmlvdXMoKSk7CisgICAgICAgIGV2ZW50SGFuZGxlZCA9IHRydWU7CisgICAgfSBlbHNl
IGlmIChrZXkgPT0gKGdsb2JhbC5wYXJhbXMuaXNDYWxlbmRhclJUTCA/ICJMZWZ0IiA6ICJSaWdo
dCIpIHx8IGtleSA9PSAiRG93biIpIHsKKyAgICAgICAgdGhpcy5zZWxlY3RSYW5nZUFuZFNob3dF
bnRpcmVSYW5nZShzZWxlY3RlZFdlZWsubmV4dCgpKTsKKyAgICAgICAgZXZlbnRIYW5kbGVkID0g
dHJ1ZTsKKyAgICB9IGVsc2UgaWYgKGtleSA9PSAiUGFnZVVwIikgeworICAgICAgICBpZiAoIXRo
aXMuX21heWJlU2V0UHJldmlvdXNNb250aChDYWxlbmRhclBpY2tlci5OYXZpZ2F0aW9uQmVoYXZp
b3VyLkFuaW1hdGUgfCBDYWxlbmRhclBpY2tlci5OYXZpZ2F0aW9uQmVoYXZpb3VyLktlZXBTZWxl
Y3Rpb25Qb3NpdGlvbikpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGV2ZW50SGFuZGxl
ZCA9IHRydWU7CisgICAgfSBlbHNlIGlmIChrZXkgPT0gIlBhZ2VEb3duIikgeworICAgICAgICBp
ZiAoIXRoaXMuX21heWJlU2V0TmV4dE1vbnRoKENhbGVuZGFyUGlja2VyLk5hdmlnYXRpb25CZWhh
dmlvdXIuQW5pbWF0ZSB8IENhbGVuZGFyUGlja2VyLk5hdmlnYXRpb25CZWhhdmlvdXIuS2VlcFNl
bGVjdGlvblBvc2l0aW9uKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZXZlbnRIYW5k
bGVkID0gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKHNlbGVjdGVkV2VlayAmJiBrZXkgPT0gIkVudGVy
IikgeworICAgICAgICBpZiAoZmlyc3ROb2RlSW5TZWxlY3RlZFJhbmdlLmNsYXNzTGlzdC5jb250
YWlucyhDbGFzc05hbWVzLkF2YWlsYWJsZSkpIHsKKyAgICAgICAgICAgIHRoaXMucGlja2VyLnN1
Ym1pdFZhbHVlKHNlbGVjdGVkV2Vlay50b1N0cmluZygpKTsKKyAgICAgICAgICAgIGV2ZW50SGFu
ZGxlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGtleSA9PSAiVSswMDU0Iikg
eyAvLyAndCcKKyAgICAgICAgdGhpcy5zZWxlY3RSYW5nZUFuZFNob3dFbnRpcmVSYW5nZShXZWVr
LmNyZWF0ZUZyb21Ub2RheSgpKTsKKyAgICAgICAgZXZlbnRIYW5kbGVkID0gdHJ1ZTsKKyAgICB9
CisgICAgaWYgKGV2ZW50SGFuZGxlZCkgeworICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24o
KTsKKyAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKKyAgICB9Cit9OworCisvKioKICAq
IEBwYXJhbSB7IUV2ZW50fSBldmVudAogICovCiBDYWxlbmRhclBpY2tlci5wcm90b3R5cGUuX2hh
bmRsZUJvZHlLZXlEb3duID0gZnVuY3Rpb24oZXZlbnQpIHsKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBhNTY5MjMzYTVjYjlm
ZGYxNzgzYmQxYmFkNTFjODQyNTY4ZjlmZTU0Li4wNWU1YWZkNjM0MzM0ZjQ2YTJlMWU4NTUyZDQw
NzUyMTIyYTU4N2ExIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTItMTEtMDggIEtlaXNoaSBI
YXR0b3JpICA8a2Vpc2hpQHdlYmtpdC5vcmc+CisKKyAgICAgICAgSW1wbGVtZW50IHdlZWsgcGlj
a2luZyB0byBjYWxlbmRhciBwaWNrZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEwMTQ0OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vZmFzdC9mb3Jtcy9jYWxlbmRhci1w
aWNrZXIvY2FsZW5kYXItcGlja2VyLW1vdXNlLW9wZXJhdGlvbnMuaHRtbDogTmVlZHMgdG8gYmUg
Y2hhbmdlZCBiZWNhdXNlIHdlIGNoYW5nZWQgRGF5c1RhYmxlIERPTS4KKwogMjAxMi0xMS0wNiAg
RGFuIEJlYW0gIDxkYmVhbUBjaHJvbWl1bS5vcmc+ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgCiAKICAgICAgICAgRW5hYmxlIFJFUVVFU1RfQVVUT0NPTVBMRVRFIGZvciBjaHJvbWl1
bSBwb3J0CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9mYXN0L2Zv
cm1zL2NhbGVuZGFyLXBpY2tlci9jYWxlbmRhci1waWNrZXItbW91c2Utb3BlcmF0aW9ucy5odG1s
IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vZmFzdC9mb3Jtcy9jYWxlbmRhci1waWNr
ZXIvY2FsZW5kYXItcGlja2VyLW1vdXNlLW9wZXJhdGlvbnMuaHRtbAppbmRleCBmODAxYTQ3YWFk
MzUyN2JmZDUzNGM2NjM3M2ZjNWVkNGZhNzQyZTgwLi5jYjEyNTYzZGI0OTNlNDNiN2FiMmI2MGJh
Zjg2YmJjMzk1MWEzODU4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1
bS9mYXN0L2Zvcm1zL2NhbGVuZGFyLXBpY2tlci9jYWxlbmRhci1waWNrZXItbW91c2Utb3BlcmF0
aW9ucy5odG1sCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2Zhc3QvZm9ybXMv
Y2FsZW5kYXItcGlja2VyL2NhbGVuZGFyLXBpY2tlci1tb3VzZS1vcGVyYXRpb25zLmh0bWwKQEAg
LTIzLDExICsyMywxMSBAQCBmdW5jdGlvbiB0ZXN0KCkgewogICAgIHNob3VsZEJlKCdjdXJyZW50
TW9udGgoKScsICciMjAwMC0wMSInKTsKIAogICAgIGRlYnVnKCdDaGVjayB0aGF0IGhvdmVyaW5n
IG92ZXIgYW4gZW50cnkgaGlnaGxpZ2h0cyBpdC4nKTsKLSAgICBob3Zlck92ZXJFbGVtZW50KHBv
cHVwV2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImRheSIpWzVdKTsKKyAg
ICBob3Zlck92ZXJFbGVtZW50KHBvcHVwV2luZG93LmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwo
Ii5kYXk6bm90KC53ZWVrLWNvbHVtbikiKVs1XSk7CiAgICAgc2hvdWxkQmUoJ3NlbGVjdGVkRGF0
ZSgpJywgJyIxOTk5LTEyLTMxIicpOwogICAgIHNob3VsZEJlKCdjdXJyZW50TW9udGgoKScsICci
MjAwMC0wMSInKTsKIAotICAgIGhvdmVyT3ZlckVsZW1lbnQocG9wdXBXaW5kb3cuZG9jdW1lbnQu
Z2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiZGF5IilbOV0pOworICAgIGhvdmVyT3ZlckVsZW1lbnQo
cG9wdXBXaW5kb3cuZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiLmRheTpub3QoLndlZWstY29s
dW1uKSIpWzldKTsKICAgICBzaG91bGRCZSgnc2VsZWN0ZWREYXRlKCknLCAnIjIwMDAtMDEtMDQi
Jyk7CiAgICAgc2hvdWxkQmUoJ2N1cnJlbnRNb250aCgpJywgJyIyMDAwLTAxIicpOwogCkBAIC00
MSw3ICs0MSw3IEBAIGZ1bmN0aW9uIHRlc3QoKSB7CiAgICAgc2hvdWxkQmVVbmRlZmluZWQoJ3Nl
bGVjdGVkRGF0ZSgpJyk7CiAKICAgICBkZWJ1ZygnQ2hlY2sgdGhhdCBtb3VzZSBjbGljayBjbG9z
ZXMgdGhlIHBvcHVwIGFuZCBzZXRzIHRoZSB2YWx1ZS4nKTsKLSAgICBjbGlja0VsZW1lbnQocG9w
dXBXaW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiZGF5IilbNl0pOworICAg
IGNsaWNrRWxlbWVudChwb3B1cFdpbmRvdy5kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIuZGF5
Om5vdCgud2Vlay1jb2x1bW4pIilbNl0pOwogICAgIHNob3VsZEJlTnVsbCgnZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoIm1vY2stcGFnZS1wb3B1cCIpJyk7CiAgICAgc2hvdWxkQmUoJ2RvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJkYXRlIikudmFsdWUnLCAnIjIwMDAtMDItMDUiJyk7CiAKZGlmZiAt
LWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCBmM2QxNjQ0YjViYTgzZDA3YThhMmYz
MjUwZDBiZTY4ZWYwNGJjYTM3Li42YjRiMzEyNDYyZmJmNmI2OGU4ZDViN2I3NjMyNGE3YTQ5OTc2
ZDczIDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIg
QEAKKzIwMTItMTEtMDggIEtlaXNoaSBIYXR0b3JpICA8a2Vpc2hpQHdlYmtpdC5vcmc+CisKKyAg
ICAgICAgSW1wbGVtZW50IHdlZWsgcGlja2luZyB0byBjYWxlbmRhciBwaWNrZXIKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMTQ0OQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogTWFudWFsVGVzdHMvZm9y
bXMvY2FsZW5kYXItcGlja2VyLmh0bWw6IEFkZGVkIHRlc3QgZm9yIHdlZWsgcGlja2VyLgorCiAy
MDEyLTExLTA2ICBLZWlzaGkgSGF0dG9yaSAgPGtlaXNoaUB3ZWJraXQub3JnPgogCiAgICAgICAg
IEltcGxlbWVudCBtb250aCBwaWNraW5nIHRvIGNhbGVuZGFyIHBpY2tlcgpkaWZmIC0tZ2l0IGEv
TWFudWFsVGVzdHMvZm9ybXMvY2FsZW5kYXItcGlja2VyLmh0bWwgYi9NYW51YWxUZXN0cy9mb3Jt
cy9jYWxlbmRhci1waWNrZXIuaHRtbAppbmRleCA1NTIwN2U0ZDNkYjc1MThlMWI4ZjU2ZmJlMDgw
MjFiNTRmMjY4YmRjLi43OTBjM2Q1NWFhYTk3OTk1Y2Y5MzY0MjEyOTUzZDIyNzdhMTM0NDVmIDEw
MDY0NAotLS0gYS9NYW51YWxUZXN0cy9mb3Jtcy9jYWxlbmRhci1waWNrZXIuaHRtbAorKysgYi9N
YW51YWxUZXN0cy9mb3Jtcy9jYWxlbmRhci1waWNrZXIuaHRtbApAQCAtMjcsNiArMjcsNyBAQCBp
ZnJhbWUgewogIDxvcHRpb24+d2l0aCBsb25nIGRhdGFsaXN0PC9vcHRpb24+CiAgPG9wdGlvbj5B
cmFiaWMgd2l0aCBkYXRhbGlzdDwvb3B0aW9uPgogIDxvcHRpb24+QXJhYmljIHdpdGggbG9uZyBk
YXRhbGlzdDwvb3B0aW9uPgorIDxvcHRpb24+V2Vlazwvb3B0aW9uPgogIDxvcHRpb24+TW9udGg8
L29wdGlvbj4KIDwvc2VsZWN0PgogCkBAIC0yMzksNiArMjQwLDIyIEBAIHZhciBhcmFiaWNMb25n
RGF0YWxpc3RBcmd1bWVudHMgPSB7CiAgICAgc3VnZ2VzdGlvbkhpZ2hsaWdodENvbG9yOiAiIzAw
MDBmZiIsCiAgICAgc3VnZ2VzdGlvbkhpZ2hsaWdodFRleHRDb2xvcjogIiNmZmZmZmYiCiB9Owor
dmFyIHdlZWtBcmd1bWVudHMgPSB7CisgICAgbG9jYWxlOiAnZW4tVVMnLAorICAgIG1vbnRoTGFi
ZWxzIDogWydKYW51YXJ5JywgJ0ZlYnJ1YXJ5JywgJ01hcmNoJywgJ0FwcmlsJywgJ01heScsICdK
dW5lJywKKyAgICAnSnVseScsICdBdWd1c3QnLCAnU2VwdGVtYmVyJywgJ09jdG9iZXInLCAnTm92
ZW1iZXInLCAnRGVjZW1iZXInXSwKKyAgICBkYXlMYWJlbHMgOiBbJ1N1bicsICdNb24nLCAnVHVl
JywgJ1dlZCcsICdUaHUnLCAnRnJpJywgJ1NhdCddLAorICAgIHRvZGF5TGFiZWwgOiAnVGhpcyBX
ZWVrJywKKyAgICBjbGVhckxhYmVsIDogJ0NsZWFyJywKKyAgICBjYW5jZWxMYWJlbCA6ICdDYW5j
ZWwnLAorICAgIHdlZWtMYWJlbDogJ1dlZWsnLAorICAgIHdlZWtTdGFydERheSA6IDAsCisgICAg
c3RlcCA6ICI2MDQ4MDAwMDAiLAorICAgIHN0ZXBCYXNlOiAiLTI1OTIwMDAwMCIsCisgICAgY3Vy
cmVudFZhbHVlIDogJzIwMDAtVzAxJywKKyAgICBtYXggOiAnMjA5OS1XMDMnLAorICAgIG1vZGU6
ICJ3ZWVrIgorfTsKIHZhciBtb250aEFyZ3VtZW50cyA9IHsKICAgICBsb2NhbGU6ICdlbi1VUycs
CiAgICAgbW9udGhMYWJlbHMgOiBbJ0phbnVhcnknLCAnRmVicnVhcnknLCAnTWFyY2gnLCAnQXBy
aWwnLCAnTWF5JywgJ0p1bmUnLApAQCAtMzI3LDYgKzM0NCw5IEBAIGZ1bmN0aW9uIHNlbGVjdGVk
KHNlbGVjdCkgewogICAgICAgICBvcGVuQ2FsZW5kYXIoYXJhYmljTG9uZ0RhdGFsaXN0QXJndW1l
bnRzKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSA3OgorICAgICAgICBvcGVuQ2FsZW5kYXIo
d2Vla0FyZ3VtZW50cyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgODoKICAgICAgICAgb3Bl
bkNhbGVuZGFyKG1vbnRoQXJndW1lbnRzKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>172929</attachid>
            <date>2012-11-07 21:49:21 -0800</date>
            <delta_ts>2012-11-07 22:36:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101449-20121108144730.patch</filename>
            <type>text/plain</type>
            <size>35335</size>
            <attacher name="Keishi Hattori">keishi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMzNzIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjI2MzdkZDI0ZjcxOWMz
MmFlYmQ0OWNjYjkyNmMzNmU4ZWY2ZWY4Ni4uMzFlNjkxNGFlNWE5NDRmMzYwOWFlNDI3YThiNmU0
M2U0ODFkZTY0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYxIEBACisyMDEyLTExLTA4ICBLZWlz
aGkgSGF0dG9yaSAgPGtlaXNoaUB3ZWJraXQub3JnPgorCisgICAgICAgIEltcGxlbWVudCB3ZWVr
IHBpY2tpbmcgdG8gY2FsZW5kYXIgcGlja2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMDE0NDkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUaGlzIGFkZHMgd2VlayBwaWNrZXIgbW9kZSB0byBDYWxlbmRh
clBpY2tlci4KKworICAgICAgICBObyBuZXcgdGVzdHMuIFRlc3RzIHdpbGwgYmUgYWRkZWQgbGF0
ZXIgd2hlbiB0aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCBpbiBEUlQuCisKKyAgICAgICAgKiBSZXNv
dXJjZXMvcGFnZXBvcHVwcy9jYWxlbmRhclBpY2tlci5jc3M6CisgICAgICAgICgubW9udGgtbW9k
ZSAuZGF5KToKKyAgICAgICAgKC53ZWVrLW1vZGUgLmF2YWlsYWJsZS5kYXktc2VsZWN0ZWQubW9u
ZGF5KTogUm91bmRlZCBjb3JuZXJzIGFyb3VuZCB3ZWVrIHNlbGVjdGlvbi4KKyAgICAgICAgKC53
ZWVrLW1vZGUgLmF2YWlsYWJsZS5kYXktc2VsZWN0ZWQuc3VuZGF5KTogRGl0dG8uCisgICAgICAg
ICgud2Vlay1tb2RlIC51bmF2YWlsYWJsZS5kYXktc2VsZWN0ZWQpOgorICAgICAgICAoLndlZWst
bW9kZSAudW5hdmFpbGFibGUuZGF5LXNlbGVjdGVkLm1vbmRheSk6CisgICAgICAgICgud2Vlay1t
b2RlIC51bmF2YWlsYWJsZS5kYXktc2VsZWN0ZWQuc3VuZGF5KToKKyAgICAgICAgKC53ZWVrLW1v
ZGUgLndlZWstY29sdW1uLnVuYXZhaWxhYmxlLmRheS1zZWxlY3RlZCk6CisgICAgICAgICgud2Vl
ay1jb2x1bW4pOiBIaWRlIHdlZWsgY29sdW1uIHVubGVzcyBpbiB3ZWVrIG1vZGUuCisgICAgICAg
ICgud2Vlay1tb2RlIC53ZWVrLWNvbHVtbik6CisgICAgICAgICogUmVzb3VyY2VzL3BhZ2Vwb3B1
cHMvY2FsZW5kYXJQaWNrZXIuanM6CisgICAgICAgIChwYXJzZURhdGVTdHJpbmcpOiBTdXBwb3J0
IHdlZWsgc3RyaW5nLgorICAgICAgICAoV2Vlayk6CisgICAgICAgIChXZWVrLnBhcnNlKTogUGFy
c2VzICJ5eXl5LVd3dyIgc3RyaW5nLgorICAgICAgICAoV2Vlay5jcmVhdGVGcm9tRGF0ZSk6IENy
ZWF0ZXMgV2VlayBjb250YWluaW5nIGRhdGV0aW1lLgorICAgICAgICAoV2Vlay5jcmVhdGVGcm9t
VG9kYXkpOiBDcmVhdGVzIFdlZWsgY29udGFpbmluZyB0b2RheS4KKyAgICAgICAgKFdlZWsud2Vl
a09uZVN0YXJ0RGF0ZUZvclllYXIpOiBSZXR1cm5zIHRoZSBzdGFydCBkYXRlIGZvciB0aGUgZmly
c3Qgd2VlayBvZiB5ZWFyLgorICAgICAgICAoV2Vlay5udW1iZXJPZldlZWtzSW5ZZWFyKTogUmV0
dXJucyB0aGUgbnVtYmVyIG9mIHdlZWtzIGluIHllYXIuCisgICAgICAgIChXZWVrLl9udW1iZXJP
ZldlZWtzU2luY2VEYXRlKTogUmV0dXJucyBudW1iZXIgb2Ygd2Vla3Mgc2luY2UgYSBkYXRlLgor
ICAgICAgICAoV2Vlay5wcm90b3R5cGUuZXF1YWxzKTogUmV0dXJucyB0cnVlIGlmIHRoZSBXZWVr
cyBhcmUgdGhlIHNhbWUuCisgICAgICAgIChXZWVrLnByb3RvdHlwZS5wcmV2aW91cyk6IFJldHVy
bnMgdGhlIHByZXZpb3VzIFdlZWsuCisgICAgICAgIChXZWVrLnByb3RvdHlwZS5uZXh0KTogUmV0
dXJucyB0aGUgbmV4dCBXZWVrLgorICAgICAgICAoV2Vlay5wcm90b3R5cGUuc3RhcnREYXRlKTog
UmV0dXJucyBzdGFydCBkYXRldGltZSBvZiBXZWVrLgorICAgICAgICAoV2Vlay5wcm90b3R5cGUu
ZW5kRGF0ZSk6IFJldHVybnMgZW5kIGRhdGV0aW1lIG9mIFdlZWsuCisgICAgICAgIChXZWVrLnBy
b3RvdHlwZS52YWx1ZU9mKTogUmV0dXJucyB0aGUgbWlsbGlzZWNvbmRzIHNpbmNlIGVwb2NoLgor
ICAgICAgICAoV2Vlay5wcm90b3R5cGUudG9TdHJpbmcpOiBSZXR1cm5zIElTTyB3ZWVrIHN0cmlu
Zy4KKyAgICAgICAgKENhbGVuZGFyUGlja2VyKTogQWRkIHdlZWsgcGlja2VyIG1vZGUuCisgICAg
ICAgIChDYWxlbmRhclBpY2tlci5wcm90b3R5cGUuc2hvd01vbnRoKTogVXNlIE5hdmlnYXRpb25C
ZWhhdmlvdXIgaW5zdGVhZCBvZiBib29scy4KKyAgICAgICAgKFllYXJNb250aENvbnRyb2xsZXIu
cHJvdG90eXBlLmF0dGFjaFRvKTogRml4IGJ1Zy4KKyAgICAgICAgKFllYXJNb250aENvbnRyb2xs
ZXIucHJvdG90eXBlLm1vdmVSZWxhdGl2ZWx5KTogVXNlIG5ldyBzaG93TW9udGguCisgICAgICAg
IChEYXlzVGFibGUucHJvdG90eXBlLmF0dGFjaFRvKTogQWRkIHdlZWsgbnVtYmVyIGNvbHVtbi4K
KyAgICAgICAgKERheXNUYWJsZS5wcm90b3R5cGUuX3JlbmRlck1vbnRoKTogUmVuZGVyIHdlZWsg
bnVtYmVycy4KKyAgICAgICAgKERheXNUYWJsZS5wcm90b3R5cGUubmF2aWdhdGVUb01vbnRoKTog
UmVuZGVyIHdlZWsgbnVtYmVycy4KKyAgICAgICAgKERheXNUYWJsZS5wcm90b3R5cGUuc2VsZWN0
UmFuZ2UpOgorICAgICAgICAoRGF5c1RhYmxlLnByb3RvdHlwZS5fc2VsZWN0UmFuZ2VBdFBvc2l0
aW9uKTogV2VlayBudW1iZXIgbm9kZXMgaGF2ZSBhbiBwb3NpdGlvblggb2YgLTEuCisgICAgICAg
IChEYXlzVGFibGUucHJvdG90eXBlLl9tYXliZVNldFByZXZpb3VzTW9udGgpOgorICAgICAgICAo
RGF5c1RhYmxlLnByb3RvdHlwZS5fbWF5YmVTZXROZXh0TW9udGgpOgorICAgICAgICAoTW9udGhQ
aWNrZXJEYXlzVGFibGUucHJvdG90eXBlLnNlbGVjdFJhbmdlKToKKyAgICAgICAgKE1vbnRoUGlj
a2VyRGF5c1RhYmxlLnByb3RvdHlwZS5zZWxlY3RSYW5nZUFuZFNob3dFbnRpcmVSYW5nZSk6Cisg
ICAgICAgIChNb250aFBpY2tlckRheXNUYWJsZS5wcm90b3R5cGUuX2hhbmRsZUtleSk6CisgICAg
ICAgIChXZWVrUGlja2VyRGF5c1RhYmxlKTogQWRkZWQuCisgICAgICAgIChXZWVrUGlja2VyRGF5
c1RhYmxlLnByb3RvdHlwZS5fbWFya1JhbmdlQXNTZWxlY3RlZCk6IE1hcmtzIHdlZWsgYXMgc2Vs
ZWN0ZWQuCisgICAgICAgIChXZWVrUGlja2VyRGF5c1RhYmxlLnByb3RvdHlwZS5zZWxlY3RSYW5n
ZSk6IFNlbGVjdHMgd2Vlay4KKyAgICAgICAgKFdlZWtQaWNrZXJEYXlzVGFibGUucHJvdG90eXBl
LnNlbGVjdFJhbmdlQW5kU2hvd0VudGlyZVJhbmdlKTogU2VsZWN0cyB3ZWVrIGFuZCBuYXZpZ2F0
ZSB0byBzaG93IGVudGlyZSBzZWxlY3Rpb24uCisgICAgICAgIChXZWVrUGlja2VyRGF5c1RhYmxl
LnByb3RvdHlwZS5fcmFuZ2VGb3JOb2RlKTogUmV0dXJucyBXZWVrIGZvciBub2RlLgorICAgICAg
ICAoV2Vla1BpY2tlckRheXNUYWJsZS5wcm90b3R5cGUuX2hhbmRsZUtleSk6CisKIDIwMTItMTEt
MDYgIEtlaXNoaSBIYXR0b3JpICA8a2Vpc2hpQHdlYmtpdC5vcmc+CiAKICAgICAgICAgSW1wbGVt
ZW50IG1vbnRoIHBpY2tpbmcgdG8gY2FsZW5kYXIgcGlja2VyCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9SZXNvdXJjZXMvcGFnZXBvcHVwcy9jYWxlbmRhclBpY2tlci5jc3MgYi9Tb3VyY2Uv
V2ViQ29yZS9SZXNvdXJjZXMvcGFnZXBvcHVwcy9jYWxlbmRhclBpY2tlci5jc3MKaW5kZXggY2Ex
ZGJiMjI1ZWYwMGYxZjUxYzRkMjExZDM5ODBkMWUzZDlmZmQ4Ny4uYzIyZTM5Njc2MTRiZTRlODVi
N2ExZjBjMmRkM2UwNTdlYmE4YWJiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUmVzb3Vy
Y2VzL3BhZ2Vwb3B1cHMvY2FsZW5kYXJQaWNrZXIuY3NzCisrKyBiL1NvdXJjZS9XZWJDb3JlL1Jl
c291cmNlcy9wYWdlcG9wdXBzL2NhbGVuZGFyUGlja2VyLmNzcwpAQCAtMjI1LDggKzIyNSw1MSBA
QCBib2R5IHsKICAgICAtd2Via2l0LXRyYW5zaXRpb246IG5vbmU7CiB9CiAKKy53ZWVrLW1vZGUg
LmRheSwKIC5tb250aC1tb2RlIC5kYXkgewogICAgIC13ZWJraXQtdHJhbnNpdGlvbjogbm9uZTsK
ICAgICBib3JkZXItcmFkaXVzOiAwOwotICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50
OworICAgIGJvcmRlcjogbm9uZTsKKyAgICBwYWRkaW5nOiAycHg7Cit9CisKKy53ZWVrLW1vZGUg
LmF2YWlsYWJsZS5kYXktc2VsZWN0ZWQubW9uZGF5IHsKKyAgICBib3JkZXItdG9wLWxlZnQtcmFk
aXVzOiA1cHg7CisgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogNXB4OworfQorCisud2Vl
ay1tb2RlIC5hdmFpbGFibGUuZGF5LXNlbGVjdGVkLnN1bmRheSB7CisgICAgYm9yZGVyLXRvcC1y
aWdodC1yYWRpdXM6IDVweDsKKyAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogNXB4Owor
fQorCisud2Vlay1tb2RlIC51bmF2YWlsYWJsZS5kYXktc2VsZWN0ZWQgeworICAgIHBhZGRpbmc6
IDFweCAycHg7CisgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIGhpZ2hsaWdodDsKKyAgICBib3Jk
ZXItYm90dG9tOiAxcHggc29saWQgaGlnaGxpZ2h0OworfQorCisud2Vlay1tb2RlIC51bmF2YWls
YWJsZS5kYXktc2VsZWN0ZWQubW9uZGF5IHsKKyAgICBwYWRkaW5nLWxlZnQ6IDFweDsKKyAgICBi
b3JkZXItbGVmdDogMXB4IHNvbGlkIGhpZ2hsaWdodDsKK30KKworLndlZWstbW9kZSAudW5hdmFp
bGFibGUuZGF5LXNlbGVjdGVkLnN1bmRheSB7CisgICAgcGFkZGluZy1yaWdodDogMXB4OworICAg
IGJvcmRlci1yaWdodDogMXB4IHNvbGlkIGhpZ2hsaWdodDsKK30KKworLndlZWstbW9kZSAud2Vl
ay1jb2x1bW4udW5hdmFpbGFibGUuZGF5LXNlbGVjdGVkIHsKKyAgcGFkZGluZzogMXB4OworICBi
b3JkZXI6IDFweCBzb2xpZCBoaWdobGlnaHQ7Cit9CisKKy53ZWVrLWNvbHVtbiB7CisgICAgZGlz
cGxheTogbm9uZTsKK30KKworLndlZWstbW9kZSAud2Vlay1jb2x1bW4geworICAgIGRpc3BsYXk6
IGJsb2NrOworICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICM5OTk7CisgICAgcGFkZGluZy1y
aWdodDogMXB4OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUmVzb3VyY2VzL3BhZ2Vw
b3B1cHMvY2FsZW5kYXJQaWNrZXIuanMgYi9Tb3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMvcGFnZXBv
cHVwcy9jYWxlbmRhclBpY2tlci5qcwppbmRleCA5OGNiN2RlMzk2MzI0OWIyODY0NTMwNDhlMGZm
N2RiNmRhYzNkMDNiLi5iN2QxMmNkNTE2MjcyNzA4MjBhMTg1MDdjZTIwMTViMDUwZWEwYjNmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMvcGFnZXBvcHVwcy9jYWxlbmRhclBp
Y2tlci5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMvcGFnZXBvcHVwcy9jYWxlbmRh
clBpY2tlci5qcwpAQCAtNDYsNiArNDYsNyBAQCB2YXIgQ2xhc3NOYW1lcyA9IHsKICAgICBEYXlM
YWJlbENvbnRhaW5lcjogImRheS1sYWJlbC1jb250YWluZXIiLAogICAgIERheXNBcmVhOiAiZGF5
cy1hcmVhIiwKICAgICBEYXlzQXJlYUNvbnRhaW5lcjogImRheXMtYXJlYS1jb250YWluZXIiLAor
ICAgIE1vbmRheTogIm1vbmRheSIsCiAgICAgTW9udGhNb2RlOiAibW9udGgtbW9kZSIsCiAgICAg
TW9udGhTZWxlY3RvcjogIm1vbnRoLXNlbGVjdG9yIiwKICAgICBNb250aFNlbGVjdG9yQm94OiAi
bW9udGgtc2VsZWN0b3ItYm94IiwKQEAgLTU3LDEwICs1OCwxMyBAQCB2YXIgQ2xhc3NOYW1lcyA9
IHsKICAgICBOb3RUaGlzTW9udGg6ICJub3QtdGhpcy1tb250aCIsCiAgICAgU2VsZWN0ZWQ6ICJk
YXktc2VsZWN0ZWQiLAogICAgIFNlbGVjdGVkTW9udGhZZWFyOiAic2VsZWN0ZWQtbW9udGgteWVh
ciIsCisgICAgU3VuZGF5OiAic3VuZGF5IiwKICAgICBUb2RheUJ1dHRvbjogInRvZGF5LWJ1dHRv
biIsCiAgICAgVG9kYXlDbGVhckFyZWE6ICJ0b2RheS1jbGVhci1hcmVhIiwKICAgICBVbmF2YWls
YWJsZTogInVuYXZhaWxhYmxlIiwKICAgICBXZWVrQ29udGFpbmVyOiAid2Vlay1jb250YWluZXIi
LAorICAgIFdlZWtDb2x1bW46ICJ3ZWVrLWNvbHVtbiIsCisgICAgV2Vla01vZGU6ICJ3ZWVrLW1v
ZGUiLAogICAgIFllYXJNb250aEFyZWE6ICJ5ZWFyLW1vbnRoLWFyZWEiLAogICAgIFllYXJNb250
aEJ1dHRvbjogInllYXItbW9udGgtYnV0dG9uIiwKICAgICBZZWFyTW9udGhCdXR0b25MZWZ0OiAi
eWVhci1tb250aC1idXR0b24tbGVmdCIsCkBAIC0xODUsMTIgKzE4OSwxNSBAQCBmdW5jdGlvbiBj
cmVhdGVVVENEYXRlKHllYXIsIG1vbnRoLCBkYXRlKSB7CiAKIC8qKgogICogQHBhcmFtIHtzdHJp
bmd9IGRhdGVTdHJpbmcKLSAqIEByZXR1cm4gez9EYXl8TW9udGh9CisgKiBAcmV0dXJuIHs/RGF5
fFdlZWt8TW9udGh9CiAgKi8KIGZ1bmN0aW9uIHBhcnNlRGF0ZVN0cmluZyhkYXRlU3RyaW5nKSB7
CiAgICAgdmFyIG1vbnRoID0gTW9udGgucGFyc2UoZGF0ZVN0cmluZyk7CiAgICAgaWYgKG1vbnRo
KQogICAgICAgICByZXR1cm4gbW9udGg7CisgICAgdmFyIHdlZWsgPSBXZWVrLnBhcnNlKGRhdGVT
dHJpbmcpOworICAgIGlmICh3ZWVrKQorICAgICAgICByZXR1cm4gd2VlazsKICAgICByZXR1cm4g
RGF5LnBhcnNlKGRhdGVTdHJpbmcpOwogfQogCkBAIC0yMTQsMTAgKzIyMSw2IEBAIGZ1bmN0aW9u
IERheSh2YWx1ZU9yRGF5T3JZZWFyLCBtb250aCwgZGF0ZSkgewogCiBEYXkuSVNPU3RyaW5nUmVn
RXhwID0gL14oXGQrKS0oXGQrKS0oXGQrKSQvOwogCi0vLyBTZWUgV2ViQ29yZS9wbGF0Zm9ybS9E
YXRlQ29tcG9uZW50cy5oLgotRGF5Lk1pbmltdW0gPSBuZXcgRGF5KC02MjEzNTU5NjgwMDAwMC4w
KTsKLURheS5NYXhpbXVtID0gbmV3IERheSg4NjQwMDAwMDAwMDAwMDAwLjApOwotCiAvKioKICAq
IEBwYXJhbSB7IXN0cmluZ30gc3RyCiAgKiBAcmV0dXJuIHs/TW9udGh9CkBAIC0yMzQsMTQgKzIz
NywxNCBAQCBEYXkucGFyc2UgPSBmdW5jdGlvbihzdHIpIHsKIAogLyoqCiAgKiBAcGFyYW0geyFE
YXRlfSBkYXRlCi0gKiBAcmV0dXJuIHshTW9udGh9CisgKiBAcmV0dXJuIHshRGF5fQogICovCiBE
YXkuY3JlYXRlRnJvbURhdGUgPSBmdW5jdGlvbihkYXRlKSB7CiAgICAgcmV0dXJuIG5ldyBEYXko
ZGF0ZS5nZXRVVENGdWxsWWVhcigpLCBkYXRlLmdldFVUQ01vbnRoKCksIGRhdGUuZ2V0VVRDRGF0
ZSgpKTsKIH07CiAKIC8qKgotICogQHJldHVybiB7IU1vbnRofQorICogQHJldHVybiB7IURheX0K
ICAqLwogRGF5LmNyZWF0ZUZyb21Ub2RheSA9IGZ1bmN0aW9uKCkgewogICAgIHZhciBub3cgPSBu
ZXcgRGF0ZSgpOwpAQCAtMzAxLDYgKzMwNCwxNzIgQEAgRGF5LnByb3RvdHlwZS50b1N0cmluZyA9
IGZ1bmN0aW9uKCkgewogICAgIHJldHVybiB5ZWFyU3RyaW5nICsgIi0iICsgKCIwIiArICh0aGlz
Lm1vbnRoICsgMSkpLnN1YnN0cigtMiwgMikgKyAiLSIgKyAoIjAiICsgdGhpcy5kYXRlKS5zdWJz
dHIoLTIsIDIpOwogfTsKIAorLy8gU2VlIFdlYkNvcmUvcGxhdGZvcm0vRGF0ZUNvbXBvbmVudHMu
aC4KK0RheS5NaW5pbXVtID0gbmV3IERheSgtNjIxMzU1OTY4MDAwMDAuMCk7CitEYXkuTWF4aW11
bSA9IG5ldyBEYXkoODY0MDAwMDAwMDAwMDAwMC4wKTsKKy8vIFNlZSBXZWJDb3JlL2h0bWwvRGF5
SW5wdXRUeXBlLmNwcC4KK0RheS5EZWZhdWx0U3RlcCA9IDg2NDAwMDAwOworRGF5LkRlZmF1bHRT
dGVwQmFzZSA9IDA7CisKKy8qKgorICogQGNvbnN0cnVjdG9yCisgKiBAcGFyYW0geyFudW1iZXJ8
V2Vla30gdmFsdWVPcldlZWtPclllYXIKKyAqIEBwYXJhbSB7IW51bWJlcj19IHdlZWsKKyAqLwor
ZnVuY3Rpb24gV2Vlayh2YWx1ZU9yV2Vla09yWWVhciwgd2VlaykgeworICAgIGlmIChhcmd1bWVu
dHMubGVuZ3RoID09PSAyKSB7CisgICAgICAgIHRoaXMueWVhciA9IHZhbHVlT3JXZWVrT3JZZWFy
OworICAgICAgICB0aGlzLndlZWsgPSB3ZWVrOworICAgICAgICAvLyBOdW1iZXIgb2YgeWVhcnMg
cGVyIHllYXIgaXMgZWl0aGVyIDUyIG9yIDUzLgorICAgICAgICBpZiAodGhpcy53ZWVrIDwgMSB8
fCAodGhpcy53ZWVrID4gNTIgJiYgdGhpcy53ZWVrID4gV2Vlay5udW1iZXJPZldlZWtzSW5ZZWFy
KHRoaXMueWVhcikpKSB7CisgICAgICAgICAgICB2YXIgbm9ybWFsaXplZFdlZWsgPSBXZWVrLmNy
ZWF0ZUZyb21EYXRlKHRoaXMuc3RhcnREYXRlKCkpOworICAgICAgICAgICAgdGhpcy55ZWFyID0g
bm9ybWFsaXplZFdlZWsueWVhcjsKKyAgICAgICAgICAgIHRoaXMud2VlayA9IG5vcm1hbGl6ZWRX
ZWVrLndlZWs7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHZhbHVlT3JNb250aE9yWWVhciBp
bnN0YW5jZW9mIFdlZWspIHsKKyAgICAgICAgdGhpcy55ZWFyID0gdmFsdWVPcldlZWtPclllYXIu
eWVhcjsKKyAgICAgICAgdGhpcy53ZWVrID0gdmFsdWVPcldlZWtPclllYXIud2VlazsKKyAgICB9
IGVsc2UgeworICAgICAgICB2YXIgd2VlayA9IFdlZWsuY3JlYXRlRnJvbURhdGUobmV3IERhdGUo
dmFsdWVPcldlZWtPclllYXIpKTsKKyAgICAgICAgdGhpcy55ZWFyID0gd2Vlay55ZWFyOworICAg
ICAgICB0aGlzLndlZWsgPSB3ZWVrLndlZWs7CisgICAgfQorfQorCitXZWVrLk1pbGxpc2Vjb25k
c1BlcldlZWsgPSA3ICogMjQgKiA2MCAqIDYwICogMTAwMDsKK1dlZWsuSVNPU3RyaW5nUmVnRXhw
ID0gL14oXGQrKS1bd1ddKFxkKykkLzsKKy8vIFNlZSBXZWJDb3JlL3BsYXRmb3JtL0RhdGVDb21w
b25lbnRzLmguCitXZWVrLk1pbmltdW0gPSBuZXcgV2VlaygxLCAxKTsKK1dlZWsuTWF4aW11bSA9
IG5ldyBXZWVrKDI3NTc2MCwgMzcpOworLy8gU2VlIFdlYkNvcmUvaHRtbC9XZWVrSW5wdXRUeXBl
LmNwcC4KK1dlZWsuRGVmYXVsdFN0ZXAgPSA2MDQ4MDAwMDA7CitXZWVrLkRlZmF1bHRTdGVwQmFz
ZSA9IC0yNTkyMDAwMDA7CisKKy8qKgorICogQHBhcmFtIHshc3RyaW5nfSBzdHIKKyAqIEByZXR1
cm4gez9XZWVrfQorICovCitXZWVrLnBhcnNlID0gZnVuY3Rpb24oc3RyKSB7CisgICAgdmFyIG1h
dGNoID0gV2Vlay5JU09TdHJpbmdSZWdFeHAuZXhlYyhzdHIpOworICAgIGlmICghbWF0Y2gpCisg
ICAgICAgIHJldHVybiBudWxsOworICAgIHZhciB5ZWFyID0gcGFyc2VJbnQobWF0Y2hbMV0sIDEw
KTsKKyAgICB2YXIgd2VlayA9IHBhcnNlSW50KG1hdGNoWzJdLCAxMCk7CisgICAgcmV0dXJuIG5l
dyBXZWVrKHllYXIsIHdlZWspOworfTsKKworLyoqCisgKiBAcGFyYW0geyFEYXRlfSBkYXRlCisg
KiBAcmV0dXJuIHshV2Vla30KKyAqLworV2Vlay5jcmVhdGVGcm9tRGF0ZSA9IGZ1bmN0aW9uKGRh
dGUpIHsKKyAgICB2YXIgeWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTsKKyAgICBpZiAoeWVh
ciA8PSBXZWVrLk1heGltdW0ueWVhciAmJiBXZWVrLndlZWtPbmVTdGFydERhdGVGb3JZZWFyKHll
YXIgKyAxKS5nZXRUaW1lKCkgPD0gZGF0ZS5nZXRUaW1lKCkpCisgICAgICAgIHllYXIrKzsKKyAg
ICBlbHNlIGlmICh5ZWFyID4gMSAmJiBXZWVrLndlZWtPbmVTdGFydERhdGVGb3JZZWFyKHllYXIp
LmdldFRpbWUoKSA+IGRhdGUuZ2V0VGltZSgpKQorICAgICAgICB5ZWFyLS07CisgICAgdmFyIHdl
ZWsgPSAxICsgV2Vlay5fbnVtYmVyT2ZXZWVrc1NpbmNlRGF0ZShXZWVrLndlZWtPbmVTdGFydERh
dGVGb3JZZWFyKHllYXIpLCBkYXRlKTsKKyAgICByZXR1cm4gbmV3IFdlZWsoeWVhciwgd2Vlayk7
Cit9OworCisvKioKKyAqIEByZXR1cm4geyFXZWVrfQorICovCitXZWVrLmNyZWF0ZUZyb21Ub2Rh
eSA9IGZ1bmN0aW9uKCkgeworICAgIHZhciBub3cgPSBuZXcgRGF0ZSgpOworICAgIHJldHVybiBX
ZWVrLmNyZWF0ZUZyb21EYXRlKGNyZWF0ZVVUQ0RhdGUobm93LmdldEZ1bGxZZWFyKCksIG5vdy5n
ZXRNb250aCgpLCBub3cuZ2V0RGF0ZSgpKSk7Cit9OworCisvKioKKyAqIEBwYXJhbSB7IW51bWJl
cn0geWVhcgorICogQHJldHVybiB7IURhdGV9CisgKi8KK1dlZWsud2Vla09uZVN0YXJ0RGF0ZUZv
clllYXIgPSBmdW5jdGlvbih5ZWFyKSB7CisgICAgaWYgKHllYXIgPCAxKQorICAgICAgICByZXR1
cm4gY3JlYXRlVVRDRGF0ZSgxLCAwLCAxKTsKKyAgICAvLyBUaGUgd2VlayBjb250YWluaW5nIEph
bnVhcnkgNHRoIGlzIHdlZWsgb25lLgorICAgIHZhciB5ZWFyU3RhcnREYXkgPSBjcmVhdGVVVENE
YXRlKHllYXIsIDAsIDQpLmdldFVUQ0RheSgpOworICAgIHJldHVybiBjcmVhdGVVVENEYXRlKHll
YXIsIDAsIDQgLSAoeWVhclN0YXJ0RGF5ICsgNikgJSA3KTsKK307CisKKy8qKgorICogQHBhcmFt
IHshbnVtYmVyfSB5ZWFyCisgKiBAcmV0dXJuIHshbnVtYmVyfQorICovCitXZWVrLm51bWJlck9m
V2Vla3NJblllYXIgPSBmdW5jdGlvbih5ZWFyKSB7CisgICAgaWYgKHllYXIgPCAxIHx8IHllYXIg
PiBXZWVrLk1heGltdW0ueWVhcikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgZWxzZSBpZiAoeWVh
ciA9PT0gV2Vlay5NYXhpbXVtLnllYXIpCisgICAgICAgIHJldHVybiBXZWVrLk1heGltdW0ud2Vl
azsKKyAgICByZXR1cm4gV2Vlay5fbnVtYmVyT2ZXZWVrc1NpbmNlRGF0ZShXZWVrLndlZWtPbmVT
dGFydERhdGVGb3JZZWFyKHllYXIpLCBXZWVrLndlZWtPbmVTdGFydERhdGVGb3JZZWFyKHllYXIg
KyAxKSk7Cit9OworCisvKioKKyAqIEBwYXJhbSB7IURhdGV9IGJhc2VEYXRlCisgKiBAcGFyYW0g
eyFEYXRlfSBkYXRlCisgKiBAcmV0dXJuIHshbnVtYmVyfQorICovCitXZWVrLl9udW1iZXJPZldl
ZWtzU2luY2VEYXRlID0gZnVuY3Rpb24oYmFzZURhdGUsIGRhdGUpIHsKKyAgICByZXR1cm4gTWF0
aC5mbG9vcigoZGF0ZS5nZXRUaW1lKCkgLSBiYXNlRGF0ZS5nZXRUaW1lKCkpIC8gV2Vlay5NaWxs
aXNlY29uZHNQZXJXZWVrKTsKK307CisKKy8qKgorICogQHBhcmFtIHshV2Vla30gb3RoZXIKKyAq
IEByZXR1cm4geyFib29sfQorICovCitXZWVrLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbihv
dGhlcikgeworICAgIHJldHVybiB0aGlzLnllYXIgPT09IG90aGVyLnllYXIgJiYgdGhpcy53ZWVr
ID09PSBvdGhlci53ZWVrOworfTsKKworLyoqCisgKiBAcmV0dXJuIHshV2Vla30KKyAqLworV2Vl
ay5wcm90b3R5cGUucHJldmlvdXMgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gbmV3IFdlZWso
dGhpcy55ZWFyLCB0aGlzLndlZWsgLSAxKTsKK307CisKKy8qKgorICogQHJldHVybiB7IVdlZWt9
CisgKi8KK1dlZWsucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gbmV3
IFdlZWsodGhpcy55ZWFyLCB0aGlzLndlZWsgKyAxKTsKK307CisKKy8qKgorICogQHJldHVybiB7
IURhdGV9CisgKi8KK1dlZWsucHJvdG90eXBlLnN0YXJ0RGF0ZSA9IGZ1bmN0aW9uKCkgeworICAg
IHZhciB3ZWVrU3RhcnREYXRlID0gV2Vlay53ZWVrT25lU3RhcnREYXRlRm9yWWVhcih0aGlzLnll
YXIpOworICAgIHdlZWtTdGFydERhdGUuc2V0VVRDRGF0ZSh3ZWVrU3RhcnREYXRlLmdldFVUQ0Rh
dGUoKSArICh0aGlzLndlZWsgLSAxKSAqIDcpOworICAgIHJldHVybiB3ZWVrU3RhcnREYXRlOwor
fTsKKworLyoqCisgKiBAcmV0dXJuIHshRGF0ZX0KKyAqLworV2Vlay5wcm90b3R5cGUuZW5kRGF0
ZSA9IGZ1bmN0aW9uKCkgeworICAgIGlmICh0aGlzLmVxdWFscyhXZWVrLk1heGltdW0pKQorICAg
ICAgICByZXR1cm4gRGF5Lk1heGltdW0uc3RhcnREYXRlKCk7CisgICAgcmV0dXJuIHRoaXMubmV4
dCgpLnN0YXJ0RGF0ZSgpOworfTsKKworLyoqCisgKiBAcmV0dXJuIHshbnVtYmVyfQorICovCitX
ZWVrLnByb3RvdHlwZS52YWx1ZU9mID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRoaXMuc3Rh
cnREYXRlKCkuZ2V0VGltZSgpIC0gY3JlYXRlVVRDRGF0ZSgxOTcwLCAwLCAxKS5nZXRUaW1lKCk7
Cit9OworCisvKioKKyAqIEByZXR1cm4geyFzdHJpbmd9CisgKi8KK1dlZWsucHJvdG90eXBlLnRv
U3RyaW5nID0gZnVuY3Rpb24oKSB7CisgICAgdmFyIHllYXJTdHJpbmcgPSBTdHJpbmcodGhpcy55
ZWFyKTsKKyAgICBpZiAoeWVhclN0cmluZy5sZW5ndGggPCA0KQorICAgICAgICB5ZWFyU3RyaW5n
ID0gKCIwMDAiICsgeWVhclN0cmluZykuc3Vic3RyKC00LCA0KTsKKyAgICByZXR1cm4geWVhclN0
cmluZyArICItVyIgKyAoIjAiICsgdGhpcy53ZWVrKS5zdWJzdHIoLTIsIDIpOworfTsKKwogLyoq
CiAgKiBAcGFyYW0geyFudW1iZXJ8TW9udGh9IHZhbHVlT3JNb250aE9yWWVhcgogICogQHBhcmFt
IHshbnVtYmVyPX0gbW9udGgKQEAgLTMyOSw2ICs0OTgsOSBAQCBNb250aC5JU09TdHJpbmdSZWdF
eHAgPSAvXihcZCspLShcZCspJC87CiAvLyBTZWUgV2ViQ29yZS9wbGF0Zm9ybS9EYXRlQ29tcG9u
ZW50cy5oLgogTW9udGguTWluaW11bSA9IG5ldyBNb250aCgxLCAwKTsKIE1vbnRoLk1heGltdW0g
PSBuZXcgTW9udGgoMjc1NzYwLCA4KTsKKy8vIFNlZSBXZWJDb3JlL2h0bWwvTW9udGhJbnB1dFR5
cGUuY3BwLgorTW9udGguRGVmYXVsdFN0ZXAgPSAxOworTW9udGguRGVmYXVsdFN0ZXBCYXNlID0g
MDsKIAogLyoqCiAgKiBAcGFyYW0geyFzdHJpbmd9IHN0cgpAQCAtNTE4LDYgKzY5MCwxMCBAQCBm
dW5jdGlvbiBDYWxlbmRhclBpY2tlcihlbGVtZW50LCBjb25maWcpIHsKICAgICAgICAgdGhpcy5z
ZWxlY3Rpb25Db25zdHJ1Y3RvciA9IE1vbnRoOwogICAgICAgICB0aGlzLl9kYXlzVGFibGUgPSBu
ZXcgTW9udGhQaWNrZXJEYXlzVGFibGUodGhpcyk7CiAgICAgICAgIHRoaXMuX2VsZW1lbnQuY2xh
c3NMaXN0LmFkZChDbGFzc05hbWVzLk1vbnRoTW9kZSk7CisgICAgfSBlbHNlIGlmICh0aGlzLl9j
b25maWcubW9kZSA9PT0gIndlZWsiKSB7CisgICAgICAgIHRoaXMuc2VsZWN0aW9uQ29uc3RydWN0
b3IgPSBXZWVrOworICAgICAgICB0aGlzLl9kYXlzVGFibGUgPSBuZXcgV2Vla1BpY2tlckRheXNU
YWJsZSh0aGlzKTsKKyAgICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENsYXNzTmFt
ZXMuV2Vla01vZGUpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHRoaXMuc2VsZWN0aW9uQ29uc3Ry
dWN0b3IgPSBEYXk7CiAgICAgICAgIHRoaXMuX2RheXNUYWJsZSA9IG5ldyBEYXlzVGFibGUodGhp
cyk7CkBAIC01MzEsOCArNzA3LDggQEAgZnVuY3Rpb24gQ2FsZW5kYXJQaWNrZXIoZWxlbWVudCwg
Y29uZmlnKSB7CiAgICAgdmFyIG1heGltdW0gPSAodHlwZW9mIHRoaXMuX2NvbmZpZy5tYXggIT09
ICJ1bmRlZmluZWQiKSA/IHBhcnNlRGF0ZVN0cmluZyh0aGlzLl9jb25maWcubWF4KSA6IHRoaXMu
c2VsZWN0aW9uQ29uc3RydWN0b3IuTWF4aW11bTsKICAgICB0aGlzLl9taW5pbXVtVmFsdWUgPSBt
aW5pbXVtLnZhbHVlT2YoKTsKICAgICB0aGlzLl9tYXhpbXVtVmFsdWUgPSBtYXhpbXVtLnZhbHVl
T2YoKTsKLSAgICB0aGlzLnN0ZXAgPSAodHlwZW9mIHRoaXMuX2NvbmZpZy5zdGVwICE9PSB1bmRl
ZmluZWQpID8gTnVtYmVyKHRoaXMuX2NvbmZpZy5zdGVwKSA6IENhbGVuZGFyUGlja2VyLkRlZmF1
bHRTdGVwU2NhbGVGYWN0b3I7Ci0gICAgdGhpcy5zdGVwQmFzZSA9ICh0eXBlb2YgdGhpcy5fY29u
ZmlnLnN0ZXBCYXNlICE9PSAidW5kZWZpbmVkIikgPyBOdW1iZXIodGhpcy5fY29uZmlnLnN0ZXBC
YXNlKSA6IENhbGVuZGFyUGlja2VyLkRlZmF1bHRTdGVwQmFzZTsKKyAgICB0aGlzLnN0ZXAgPSAo
dHlwZW9mIHRoaXMuX2NvbmZpZy5zdGVwICE9PSB1bmRlZmluZWQpID8gTnVtYmVyKHRoaXMuX2Nv
bmZpZy5zdGVwKSA6IHRoaXMuc2VsZWN0aW9uQ29uc3RydWN0b3IuRGVmYXVsdFN0ZXA7CisgICAg
dGhpcy5zdGVwQmFzZSA9ICh0eXBlb2YgdGhpcy5fY29uZmlnLnN0ZXBCYXNlICE9PSAidW5kZWZp
bmVkIikgPyBOdW1iZXIodGhpcy5fY29uZmlnLnN0ZXBCYXNlKSA6IHRoaXMuc2VsZWN0aW9uQ29u
c3RydWN0b3IuRGVmYXVsdFN0ZXBCYXNlOwogICAgIHRoaXMuX21pbmltdW1Nb250aCA9IE1vbnRo
LmNyZWF0ZUZyb21EYXRlKG1pbmltdW0uc3RhcnREYXRlKCkpOwogICAgIHRoaXMubWF4aW11bU1v
bnRoID0gTW9udGguY3JlYXRlRnJvbURhdGUobWF4aW11bS5zdGFydERhdGUoKSk7CiAgICAgdGhp
cy5fY3VycmVudE1vbnRoID0gbmV3IE1vbnRoKE5hTiwgTmFOKTsKQEAgLTU0Niw3ICs3MjIsNyBA
QCBmdW5jdGlvbiBDYWxlbmRhclBpY2tlcihlbGVtZW50LCBjb25maWcpIHsKICAgICAgICAgaW5p
dGlhbFNlbGVjdGlvbiA9IG5ldyB0aGlzLnNlbGVjdGlvbkNvbnN0cnVjdG9yKHRoaXMuX21pbmlt
dW1WYWx1ZSk7CiAgICAgZWxzZSBpZiAoaW5pdGlhbFNlbGVjdGlvbi52YWx1ZU9mKCkgPiB0aGlz
Ll9tYXhpbXVtVmFsdWUpCiAgICAgICAgIGluaXRpYWxTZWxlY3Rpb24gPSBuZXcgdGhpcy5zZWxl
Y3Rpb25Db25zdHJ1Y3Rvcih0aGlzLl9tYXhpbXVtVmFsdWUpOwotICAgIHRoaXMuc2hvd01vbnRo
KE1vbnRoLmNyZWF0ZUZyb21EYXRlKGluaXRpYWxTZWxlY3Rpb24uc3RhcnREYXRlKCkpLCBmYWxz
ZSk7CisgICAgdGhpcy5zaG93TW9udGgoTW9udGguY3JlYXRlRnJvbURhdGUoaW5pdGlhbFNlbGVj
dGlvbi5zdGFydERhdGUoKSkpOwogICAgIHRoaXMuX2RheXNUYWJsZS5zZWxlY3RSYW5nZUFuZFNo
b3dFbnRpcmVSYW5nZShpbml0aWFsU2VsZWN0aW9uKTsKICAgICB0aGlzLmZpeFdpbmRvd1NpemUo
KTsKICAgICB0aGlzLl9oYW5kbGVCb2R5S2V5RG93bkJvdW5kID0gdGhpcy5faGFuZGxlQm9keUtl
eURvd24uYmluZCh0aGlzKTsKQEAgLTU1NCw5ICs3MzAsMTEgQEAgZnVuY3Rpb24gQ2FsZW5kYXJQ
aWNrZXIoZWxlbWVudCwgY29uZmlnKSB7CiB9CiBDYWxlbmRhclBpY2tlci5wcm90b3R5cGUgPSBP
YmplY3QuY3JlYXRlKFBpY2tlci5wcm90b3R5cGUpOwogCi0vLyBTZWUgV2ViQ29yZS9odG1sL0Rh
dGVJbnB1dFR5cGUuY3BwLgotQ2FsZW5kYXJQaWNrZXIuRGVmYXVsdFN0ZXBTY2FsZUZhY3RvciA9
IDg2NDAwMDAwOwotQ2FsZW5kYXJQaWNrZXIuRGVmYXVsdFN0ZXBCYXNlID0gMC4wOworQ2FsZW5k
YXJQaWNrZXIuTmF2aWdhdGlvbkJlaGF2aW91ciA9IHsKKyAgICBOb25lOiAwLAorICAgIEFuaW1h
dGU6IDEgPDwgMCwKKyAgICBLZWVwU2VsZWN0aW9uUG9zaXRpb246IDEgPDwgMQorfTsKIAogQ2Fs
ZW5kYXJQaWNrZXIucHJvdG90eXBlLl9oYW5kbGVXaW5kb3dSZXNpemUgPSBmdW5jdGlvbigpIHsK
ICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoInByZXBhcmluZyIpOwpAQCAtNjUx
LDEwICs4MjksOSBAQCBDYWxlbmRhclBpY2tlci5wcm90b3R5cGUuc2hvdWxkU2hvd01vbnRoID0g
ZnVuY3Rpb24obW9udGgpIHsKIAogLyoqCiAgKiBAcGFyYW0geyFNb250aH0gbW9udGgKLSAqIEBw
YXJhbSB7IWJvb2w9fSBhbmltYXRlCi0gKiBAcGFyYW0geyFib29sPX0ga2VlcFNlbGVjdGlvblBv
c2l0aW9uCisgKiBAcGFyYW0geyFDYWxlbmRhclBpY2tlci5OYXZpZ2F0aW9uQmVoYXZpb3VyPX0g
bmF2aWdhdGlvbkJlaGF2aW91cgogICovCi1DYWxlbmRhclBpY2tlci5wcm90b3R5cGUuc2hvd01v
bnRoID0gZnVuY3Rpb24obW9udGgsIGFuaW1hdGUsIGtlZXBTZWxlY3Rpb25Qb3NpdGlvbikgewor
Q2FsZW5kYXJQaWNrZXIucHJvdG90eXBlLnNob3dNb250aCA9IGZ1bmN0aW9uKG1vbnRoLCBuYXZp
Z2F0aW9uQmVoYXZpb3VyKSB7CiAgICAgaWYgKHRoaXMuX2N1cnJlbnRNb250aC5lcXVhbHMobW9u
dGgpKQogICAgICAgICByZXR1cm47CiAgICAgZWxzZSBpZiAobW9udGgudmFsdWVPZigpIDwgdGhp
cy5fbWluaW11bU1vbnRoLnZhbHVlT2YoKSkKQEAgLTY2Miw3ICs4MzksNyBAQCBDYWxlbmRhclBp
Y2tlci5wcm90b3R5cGUuc2hvd01vbnRoID0gZnVuY3Rpb24obW9udGgsIGFuaW1hdGUsIGtlZXBT
ZWxlY3Rpb25Qb3NpdAogICAgIGVsc2UgaWYgKG1vbnRoLnZhbHVlT2YoKSA+IHRoaXMubWF4aW11
bU1vbnRoLnZhbHVlT2YoKSkKICAgICAgICAgbW9udGggPSB0aGlzLm1heGltdW1Nb250aDsKICAg
ICB0aGlzLl95ZWFyTW9udGhDb250cm9sbGVyLnNldE1vbnRoKG1vbnRoKTsKLSAgICB0aGlzLl9k
YXlzVGFibGUubmF2aWdhdGVUb01vbnRoKG1vbnRoLCBhbmltYXRlLCBrZWVwU2VsZWN0aW9uUG9z
aXRpb24pOworICAgIHRoaXMuX2RheXNUYWJsZS5uYXZpZ2F0ZVRvTW9udGgobW9udGgsIG5hdmln
YXRpb25CZWhhdmlvdXIgfHwgQ2FsZW5kYXJQaWNrZXIuTmF2aWdhdGlvbkJlaGF2aW91ci5Ob25l
KTsKICAgICB0aGlzLl9jdXJyZW50TW9udGggPSBtb250aDsKIH07CiAKQEAgLTcyNCw3ICs5MDEs
NyBAQCBZZWFyTW9udGhDb250cm9sbGVyLnByb3RvdHlwZS5hdHRhY2hUbyA9IGZ1bmN0aW9uKGVs
ZW1lbnQpIHsKICAgICAgICAgbWF4V2lkdGggPSBNYXRoLm1heChtYXhXaWR0aCwgdGhpcy5fbW9u
dGgub2Zmc2V0V2lkdGgpOwogICAgICAgICBtb250aCA9IG1vbnRoLnByZXZpb3VzKCk7CiAgICAg
fQotICAgIGlmIChnZXRMYW5ndWFnZSgpID09ICJqYSIgJiYgSW1wZXJpYWxFcmFMaW1pdCA8IG1h
eGltdW1ZZWFyKSB7CisgICAgaWYgKGdldExhbmd1YWdlKCkgPT0gImphIiAmJiBJbXBlcmlhbEVy
YUxpbWl0IDwgdGhpcy5waWNrZXIubWF4aW11bU1vbnRoLnllYXIpIHsKICAgICAgICAgZm9yICh2
YXIgbSA9IDA7IG0gPCAxMjsgKyttKSB7CiAgICAgICAgICAgICB0aGlzLl9tb250aC50ZXh0Q29u
dGVudCA9IG5ldyBNb250aChJbXBlcmlhbEVyYUxpbWl0LCBtKS50b0xvY2FsZVN0cmluZygpOwog
ICAgICAgICAgICAgbWF4V2lkdGggPSBNYXRoLm1heChtYXhXaWR0aCwgdGhpcy5fbW9udGgub2Zm
c2V0V2lkdGgpOwpAQCAtOTk1LDcgKzExNzIsNyBAQCBZZWFyTW9udGhDb250cm9sbGVyLnByb3Rv
dHlwZS5faGFuZGxlQnV0dG9uQ2xpY2sgPSBmdW5jdGlvbihldmVudCkgewogWWVhck1vbnRoQ29u
dHJvbGxlci5wcm90b3R5cGUubW92ZVJlbGF0aXZlbHkgPSBmdW5jdGlvbihhbW91bnQpIHsKICAg
ICB2YXIgY3VycmVudCA9IHRoaXMucGlja2VyLmN1cnJlbnRNb250aCgpLnZhbHVlT2YoKTsKICAg
ICB2YXIgdXBkYXRlZCA9IG5ldyBNb250aChjdXJyZW50ICsgYW1vdW50KTsKLSAgICB0aGlzLnBp
Y2tlci5zaG93TW9udGgodXBkYXRlZCwgdHJ1ZSwgdHJ1ZSk7CisgICAgdGhpcy5waWNrZXIuc2hv
d01vbnRoKHVwZGF0ZWQsIENhbGVuZGFyUGlja2VyLk5hdmlnYXRpb25CZWhhdmlvdXIuQW5pbWF0
ZSB8IENhbGVuZGFyUGlja2VyLk5hdmlnYXRpb25CZWhhdmlvdXIuS2VlcFNlbGVjdGlvblBvc2l0
aW9uKTsKIH07CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTEwMzMsMTMgKzEyMTAsMjAgQEAgRGF5c1RhYmxl
LnByb3RvdHlwZS5hdHRhY2hUbyA9IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgICB0aGlzLl9kYXlz
Q29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoIndlYmtpdFRyYW5zaXRpb25FbmQiLCB0aGlzLl9t
b3ZlSW5EYXlzLmJpbmQodGhpcyksIGZhbHNlKTsKICAgICB2YXIgY29udGFpbmVyID0gY3JlYXRl
RWxlbWVudCgidHIiLCBDbGFzc05hbWVzLkRheUxhYmVsQ29udGFpbmVyKTsKICAgICB2YXIgd2Vl
a1N0YXJ0RGF5ID0gZ2xvYmFsLnBhcmFtcy53ZWVrU3RhcnREYXkgfHwgMDsKKyAgICBjb250YWlu
ZXIuYXBwZW5kQ2hpbGQoY3JlYXRlRWxlbWVudCgidGgiLCBDbGFzc05hbWVzLkRheUxhYmVsICsg
IiAiICsgQ2xhc3NOYW1lcy5XZWVrQ29sdW1uLCBnbG9iYWwucGFyYW1zLndlZWtMYWJlbCkpOwog
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNzsgaSsrKQogICAgICAgICBjb250YWluZXIuYXBwZW5k
Q2hpbGQoY3JlYXRlRWxlbWVudCgidGgiLCBDbGFzc05hbWVzLkRheUxhYmVsLCBnbG9iYWwucGFy
YW1zLmRheUxhYmVsc1sod2Vla1N0YXJ0RGF5ICsgaSkgJSA3XSkpOwogICAgIHRoaXMuX2RheXND
b250YWluZXIuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTsKICAgICB0aGlzLl9kYXlzID0gW107Cisg
ICAgdGhpcy5fd2Vla051bWJlcnMgPSBbXTsKICAgICBmb3IgKHZhciB3ID0gMDsgdyA8IERheXNU
YWJsZS5fV2Vla3M7IHcrKykgewogICAgICAgICBjb250YWluZXIgPSBjcmVhdGVFbGVtZW50KCJ0
ciIsIENsYXNzTmFtZXMuV2Vla0NvbnRhaW5lcik7CiAgICAgICAgIHZhciB3ZWVrID0gW107Cisg
ICAgICAgIHZhciB3ZWVrTnVtYmVyTm9kZSA9IGNyZWF0ZUVsZW1lbnQoInRkIiwgQ2xhc3NOYW1l
cy5EYXkgKyAiICIgKyBDbGFzc05hbWVzLldlZWtDb2x1bW4sICIgIik7CisgICAgICAgIHdlZWtO
dW1iZXJOb2RlLmRhdGFzZXQucG9zaXRpb25YID0gLTE7CisgICAgICAgIHdlZWtOdW1iZXJOb2Rl
LmRhdGFzZXQucG9zaXRpb25ZID0gdzsKKyAgICAgICAgdGhpcy5fd2Vla051bWJlcnMucHVzaCh3
ZWVrTnVtYmVyTm9kZSk7CisgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZCh3ZWVrTnVtYmVy
Tm9kZSk7CiAgICAgICAgIGZvciAodmFyIGQgPSAwOyBkIDwgNzsgZCsrKSB7CiAgICAgICAgICAg
ICB2YXIgZGF5ID0gY3JlYXRlRWxlbWVudCgidGQiLCBDbGFzc05hbWVzLkRheSwgIiAiKTsKICAg
ICAgICAgICAgIGRheS5zZXRBdHRyaWJ1dGUoImRhdGEtcG9zaXRpb24teCIsIFN0cmluZyhkKSk7
CkBAIC0xMDk1LDE0ICsxMjc5LDE4IEBAIERheXNUYWJsZS5wcm90b3R5cGUuX3JlbmRlck1vbnRo
ID0gZnVuY3Rpb24obW9udGgpIHsKICAgICBpZiAoc3RhcnRPZmZzZXQgPj0gMCkKICAgICAgICAg
c3RhcnRPZmZzZXQgLT0gNzsKICAgICBkYXlJdGVyYXRvci5zZXRVVENEYXRlKHN0YXJ0T2Zmc2V0
ICsgMSk7CisgICAgdmFyIG1vbmRheU9mZnNldCA9ICg4IC0gd2Vla1N0YXJ0RGF5KSAlIDc7Cisg
ICAgdmFyIHN1bmRheU9mZnNldCA9IHdlZWtTdGFydERheSAlIDc7CiAgICAgZm9yICh2YXIgdyA9
IDA7IHcgPCBEYXlzVGFibGUuX1dlZWtzOyB3KyspIHsKICAgICAgICAgZm9yICh2YXIgZCA9IDA7
IGQgPCA3OyBkKyspIHsKICAgICAgICAgICAgIHZhciBpdGVyTW9udGggPSBNb250aC5jcmVhdGVG
cm9tRGF0ZShkYXlJdGVyYXRvcik7CisgICAgICAgICAgICB2YXIgaXRlcldlZWsgPSBXZWVrLmNy
ZWF0ZUZyb21EYXRlKGRheUl0ZXJhdG9yKTsKICAgICAgICAgICAgIHZhciB0aW1lID0gZGF5SXRl
cmF0b3IuZ2V0VGltZSgpOwogICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzLl9kYXlzW3dd
W2RdOwogICAgICAgICAgICAgZWxlbWVudC5pbm5lclRleHQgPSBsb2NhbGl6ZU51bWJlcihkYXlJ
dGVyYXRvci5nZXRVVENEYXRlKCkpOwogICAgICAgICAgICAgZWxlbWVudC5jbGFzc05hbWUgPSBD
bGFzc05hbWVzLkRheTsKICAgICAgICAgICAgIGVsZW1lbnQuZGF0YXNldC5zdWJtaXRWYWx1ZSA9
IERheS5jcmVhdGVGcm9tRGF0ZShkYXlJdGVyYXRvcikudG9TdHJpbmcoKTsKKyAgICAgICAgICAg
IGVsZW1lbnQuZGF0YXNldC53ZWVrVmFsdWUgPSBpdGVyV2Vlay50b1N0cmluZygpOwogICAgICAg
ICAgICAgZWxlbWVudC5kYXRhc2V0Lm1vbnRoVmFsdWUgPSBpdGVyTW9udGgudG9TdHJpbmcoKTsK
ICAgICAgICAgICAgIGlmIChpc05hTih0aW1lKSkgewogICAgICAgICAgICAgICAgIGVsZW1lbnQu
aW5uZXJUZXh0ID0gIi0iOwpAQCAtMTExNCw2ICsxMzAyLDE4IEBAIERheXNUYWJsZS5wcm90b3R5
cGUuX3JlbmRlck1vbnRoID0gZnVuY3Rpb24obW9udGgpIHsKICAgICAgICAgICAgICAgICBlbGVt
ZW50LmNsYXNzTGlzdC5hZGQoQ2xhc3NOYW1lcy5Ob3RUaGlzTW9udGgpOwogICAgICAgICAgICAg
fSBlbHNlCiAgICAgICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKENsYXNzTmFtZXMu
QXZhaWxhYmxlKTsKKyAgICAgICAgICAgIGlmIChkID09PSBtb25kYXlPZmZzZXQpIHsKKyAgICAg
ICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoQ2xhc3NOYW1lcy5Nb25kYXkpOworICAg
ICAgICAgICAgICAgIGlmICh0aGlzLl93ZWVrTnVtYmVyc1t3XSkgeworICAgICAgICAgICAgICAg
ICAgICB0aGlzLl93ZWVrTnVtYmVyc1t3XS5kYXRhc2V0LndlZWtWYWx1ZSA9IGl0ZXJXZWVrLnRv
U3RyaW5nKCk7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX3dlZWtOdW1iZXJzW3ddLmlubmVy
VGV4dCA9IGxvY2FsaXplTnVtYmVyKGl0ZXJXZWVrLndlZWspOworICAgICAgICAgICAgICAgICAg
ICBpZiAoZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ2xhc3NOYW1lcy5BdmFpbGFibGUpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fd2Vla051bWJlcnNbd10uY2xhc3NMaXN0LmFk
ZChDbGFzc05hbWVzLkF2YWlsYWJsZSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHRoaXMuX3dlZWtOdW1iZXJzW3ddLmNsYXNzTGlzdC5hZGQoQ2xh
c3NOYW1lcy5VbmF2YWlsYWJsZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBl
bHNlIGlmIChkID09PSBzdW5kYXlPZmZzZXQpCisgICAgICAgICAgICAgICAgZWxlbWVudC5jbGFz
c0xpc3QuYWRkKENsYXNzTmFtZXMuU3VuZGF5KTsKICAgICAgICAgICAgIGRheUl0ZXJhdG9yLnNl
dFVUQ0RhdGUoZGF5SXRlcmF0b3IuZ2V0VVRDRGF0ZSgpICsgMSk7CiAgICAgICAgIH0KICAgICB9
CkBAIC0xMTIxLDE5ICsxMzIxLDE4IEBAIERheXNUYWJsZS5wcm90b3R5cGUuX3JlbmRlck1vbnRo
ID0gZnVuY3Rpb24obW9udGgpIHsKIAogLyoqCiAgKiBAcGFyYW0geyFNb250aH0gbW9udGgKLSAq
IEBwYXJhbSB7IWJvb2x9IGFuaW1hdGUKLSAqIEBwYXJhbSB7IWJvb2x9IGtlZXBTZWxlY3Rpb25Q
b3NpdGlvbgorICogQHBhcmFtIHshQ2FsZW5kYXJQaWNrZXIuTmF2aWdhdGlvbkJlaGF2aW91cn0g
bmF2aWdhdGlvbkJlaGF2aW91cgogICovCi1EYXlzVGFibGUucHJvdG90eXBlLm5hdmlnYXRlVG9N
b250aCA9IGZ1bmN0aW9uKG1vbnRoLCBhbmltYXRlLCBrZWVwU2VsZWN0aW9uUG9zaXRpb24pIHsK
K0RheXNUYWJsZS5wcm90b3R5cGUubmF2aWdhdGVUb01vbnRoID0gZnVuY3Rpb24obW9udGgsIG5h
dmlnYXRpb25CZWhhdmlvdXIpIHsKICAgICB2YXIgZmlyc3ROb2RlSW5TZWxlY3RlZFJhbmdlID0g
dGhpcy5fZmlyc3ROb2RlSW5TZWxlY3RlZFJhbmdlKCk7Ci0gICAgaWYgKGFuaW1hdGUpIHsKKyAg
ICBpZiAobmF2aWdhdGlvbkJlaGF2aW91ciAmIENhbGVuZGFyUGlja2VyLk5hdmlnYXRpb25CZWhh
dmlvdXIuQW5pbWF0ZSkgewogICAgICAgICB2YXIgZGF5c1N0eWxlID0gdGhpcy5fZGF5c0NvbnRh
aW5lci5zdHlsZTsKICAgICAgICAgZGF5c1N0eWxlLnBvc2l0aW9uID0gInJlbGF0aXZlIjsKICAg
ICAgICAgZGF5c1N0eWxlLndlYmtpdFRyYW5zaXRpb24gPSAibGVmdCAwLjFzIGVhc2UiOwogICAg
ICAgICBkYXlzU3R5bGUubGVmdCA9ICh0aGlzLnBpY2tlci5jdXJyZW50TW9udGgoKS52YWx1ZU9m
KCkgPiBtb250aC52YWx1ZU9mKCkgPyAiIiA6ICItIikgKyB0aGlzLl9kYXlzQ29udGFpbmVyLm9m
ZnNldFdpZHRoICsgInB4IjsKICAgICB9CiAgICAgdGhpcy5fcmVuZGVyTW9udGgobW9udGgpOwot
ICAgIGlmIChrZWVwU2VsZWN0aW9uUG9zaXRpb24gJiYgZmlyc3ROb2RlSW5TZWxlY3RlZFJhbmdl
KSB7CisgICAgaWYgKG5hdmlnYXRpb25CZWhhdmlvdXIgJiBDYWxlbmRhclBpY2tlci5OYXZpZ2F0
aW9uQmVoYXZpb3VyLktlZXBTZWxlY3Rpb25Qb3NpdGlvbiAmJiBmaXJzdE5vZGVJblNlbGVjdGVk
UmFuZ2UpIHsKICAgICAgICAgdmFyIHggPSBwYXJzZUludChmaXJzdE5vZGVJblNlbGVjdGVkUmFu
Z2UuZGF0YXNldC5wb3NpdGlvblgsIDEwKTsKICAgICAgICAgdmFyIHkgPSBwYXJzZUludChmaXJz
dE5vZGVJblNlbGVjdGVkUmFuZ2UuZGF0YXNldC5wb3NpdGlvblksIDEwKTsKICAgICAgICAgdGhp
cy5fc2VsZWN0UmFuZ2VBdFBvc2l0aW9uKHgsIHkpOwpAQCAtMTE3Miw3ICsxMzcxLDcgQEAgRGF5
c1RhYmxlLnByb3RvdHlwZS5fbWFya1JhbmdlQXNTZWxlY3RlZCA9IGZ1bmN0aW9uKGRheSkgewog
RGF5c1RhYmxlLnByb3RvdHlwZS5zZWxlY3RSYW5nZSA9IGZ1bmN0aW9uKGRheSkgewogICAgIHRo
aXMuX2Rlc2VsZWN0KCk7CiAgICAgaWYgKHRoaXMuc3RhcnREYXRlKCkgPiBkYXkuc3RhcnREYXRl
KCkgfHwgdGhpcy5lbmREYXRlKCkgPCBkYXkuZW5kRGF0ZSgpKQotICAgICAgICB0aGlzLnBpY2tl
ci5zaG93TW9udGgoTW9udGguY3JlYXRlRnJvbURhdGUoZGF5LnN0YXJ0RGF0ZSgpKSwgZmFsc2Up
OworICAgICAgICB0aGlzLnBpY2tlci5zaG93TW9udGgoTW9udGguY3JlYXRlRnJvbURhdGUoZGF5
LnN0YXJ0RGF0ZSgpKSk7CiAgICAgdGhpcy5fbWFya1JhbmdlQXNTZWxlY3RlZChkYXkpOwogfTsK
IApAQCAtMTIyMiw3ICsxNDIxLDggQEAgRGF5c1RhYmxlLnByb3RvdHlwZS5lbmREYXRlID0gZnVu
Y3Rpb24oKSB7CiAgKiBAcGFyYW0geyFudW1iZXJ9IHkKICAqLwogRGF5c1RhYmxlLnByb3RvdHlw
ZS5fc2VsZWN0UmFuZ2VBdFBvc2l0aW9uID0gZnVuY3Rpb24oeCwgeSkgewotICAgIHRoaXMuX3Nl
bGVjdFJhbmdlQ29udGFpbmluZ05vZGUodGhpcy5fZGF5c1t5XVt4XSk7CisgICAgdmFyIG5vZGUg
PSB4ID09PSAtMSA/IHRoaXMuX3dlZWtOdW1iZXJzW3ldIDogdGhpcy5fZGF5c1t5XVt4XTsKKyAg
ICB0aGlzLl9zZWxlY3RSYW5nZUNvbnRhaW5pbmdOb2RlKG5vZGUpOwogfTsKIAogLyoqCkBAIC0x
MjM5LDI0ICsxNDM5LDMwIEBAIERheXNUYWJsZS5wcm90b3R5cGUuX2Rlc2VsZWN0ID0gZnVuY3Rp
b24oKSB7CiB9OwogCiAvKioKKyAqIEBwYXJhbSB7IUNhbGVuZGFyUGlja2VyLk5hdmlnYXRpb25C
ZWhhdmlvdXI9fSBuYXZpZ2F0aW9uQmVoYXZpb3VyCiAgKiBAcmV0dXJuIHshYm9vbGVhbn0KICAq
LwotRGF5c1RhYmxlLnByb3RvdHlwZS5fbWF5YmVTZXRQcmV2aW91c01vbnRoID0gZnVuY3Rpb24o
KSB7CitEYXlzVGFibGUucHJvdG90eXBlLl9tYXliZVNldFByZXZpb3VzTW9udGggPSBmdW5jdGlv
bihuYXZpZ2F0aW9uQmVoYXZpb3VyKSB7CisgICAgaWYgKHR5cGVvZiBuYXZpZ2F0aW9uQmVoYXZp
b3VyID09PSAidW5kZWZpbmVkIikKKyAgICAgICAgbmF2aWdhdGlvbkJlaGF2aW91ciA9IENhbGVu
ZGFyUGlja2VyLk5hdmlnYXRpb25CZWhhdmlvdXIuQW5pbWF0ZTsKICAgICB2YXIgcHJldmlvdXNN
b250aCA9IHRoaXMucGlja2VyLmN1cnJlbnRNb250aCgpLnByZXZpb3VzKCk7CiAgICAgaWYgKCF0
aGlzLnBpY2tlci5zaG91bGRTaG93TW9udGgocHJldmlvdXNNb250aCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB0aGlzLnBpY2tlci5zaG93TW9udGgocHJldmlvdXNNb250aCwgdHJ1ZSk7
CisgICAgdGhpcy5waWNrZXIuc2hvd01vbnRoKHByZXZpb3VzTW9udGgsIG5hdmlnYXRpb25CZWhh
dmlvdXIpOwogICAgIHJldHVybiB0cnVlOwogfTsKIAogLyoqCisgKiBAcGFyYW0geyFDYWxlbmRh
clBpY2tlci5OYXZpZ2F0aW9uQmVoYXZpb3VyPX0gbmF2aWdhdGlvbkJlaGF2aW91cgogICogQHJl
dHVybiB7IWJvb2xlYW59CiAgKi8KLURheXNUYWJsZS5wcm90b3R5cGUuX21heWJlU2V0TmV4dE1v
bnRoID0gZnVuY3Rpb24oKSB7CitEYXlzVGFibGUucHJvdG90eXBlLl9tYXliZVNldE5leHRNb250
aCA9IGZ1bmN0aW9uKG5hdmlnYXRpb25CZWhhdmlvdXIpIHsKKyAgICBpZiAodHlwZW9mIG5hdmln
YXRpb25CZWhhdmlvdXIgPT09ICJ1bmRlZmluZWQiKQorICAgICAgICBuYXZpZ2F0aW9uQmVoYXZp
b3VyID0gQ2FsZW5kYXJQaWNrZXIuTmF2aWdhdGlvbkJlaGF2aW91ci5BbmltYXRlOwogICAgIHZh
ciBuZXh0TW9udGggPSB0aGlzLnBpY2tlci5jdXJyZW50TW9udGgoKS5uZXh0KCk7CiAgICAgaWYg
KCF0aGlzLnBpY2tlci5zaG91bGRTaG93TW9udGgobmV4dE1vbnRoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIHRoaXMucGlja2VyLnNob3dNb250aChuZXh0TW9udGgsIHRydWUpOworICAg
IHRoaXMucGlja2VyLnNob3dNb250aChuZXh0TW9udGgsIG5hdmlnYXRpb25CZWhhdmlvdXIpOwog
ICAgIHJldHVybiB0cnVlOwogfTsKIApAQCAtMTQxMiw3ICsxNjE4LDcgQEAgTW9udGhQaWNrZXJE
YXlzVGFibGUucHJvdG90eXBlLl9tYXJrUmFuZ2VBc1NlbGVjdGVkID0gZnVuY3Rpb24obW9udGgp
IHsKIE1vbnRoUGlja2VyRGF5c1RhYmxlLnByb3RvdHlwZS5zZWxlY3RSYW5nZSA9IGZ1bmN0aW9u
KG1vbnRoKSB7CiAgICAgdGhpcy5fZGVzZWxlY3QoKTsKICAgICBpZiAodGhpcy5zdGFydERhdGUo
KSA+PSBtb250aC5lbmREYXRlKCkgfHwgdGhpcy5lbmREYXRlKCkgPD0gbW9udGguc3RhcnREYXRl
KCkpCi0gICAgICAgIHRoaXMucGlja2VyLnNob3dNb250aChtb250aCwgdHJ1ZSk7CisgICAgICAg
IHRoaXMucGlja2VyLnNob3dNb250aChtb250aCwgQ2FsZW5kYXJQaWNrZXIuTmF2aWdhdGlvbkJl
aGF2aW91ci5BbmltYXRlKTsKICAgICB0aGlzLl9tYXJrUmFuZ2VBc1NlbGVjdGVkKG1vbnRoKTsK
IH07CiAKQEAgLTE0MjEsNyArMTYyNyw3IEBAIE1vbnRoUGlja2VyRGF5c1RhYmxlLnByb3RvdHlw
ZS5zZWxlY3RSYW5nZSA9IGZ1bmN0aW9uKG1vbnRoKSB7CiAgKi8KIE1vbnRoUGlja2VyRGF5c1Rh
YmxlLnByb3RvdHlwZS5zZWxlY3RSYW5nZUFuZFNob3dFbnRpcmVSYW5nZSA9IGZ1bmN0aW9uKG1v
bnRoKSB7CiAgICAgdGhpcy5fZGVzZWxlY3QoKTsKLSAgICB0aGlzLnBpY2tlci5zaG93TW9udGgo
bW9udGgsIHRydWUpOworICAgIHRoaXMucGlja2VyLnNob3dNb250aChtb250aCwgQ2FsZW5kYXJQ
aWNrZXIuTmF2aWdhdGlvbkJlaGF2aW91ci5BbmltYXRlKTsKICAgICB0aGlzLl9tYXJrUmFuZ2VB
c1NlbGVjdGVkKG1vbnRoKTsKIH07CiAKQEAgLTE0NDQsMTUgKzE2NTAsMTIgQEAgTW9udGhQaWNr
ZXJEYXlzVGFibGUucHJvdG90eXBlLl9oYW5kbGVLZXkgPSBmdW5jdGlvbihldmVudCkgewogICAg
IHZhciBldmVudEhhbmRsZWQgPSBmYWxzZTsKICAgICB2YXIgY3VycmVudE1vbnRoID0gdGhpcy5w
aWNrZXIuY3VycmVudE1vbnRoKCk7CiAgICAgdmFyIGZpcnN0Tm9kZUluU2VsZWN0ZWRSYW5nZSA9
IHRoaXMuX2ZpcnN0Tm9kZUluU2VsZWN0ZWRSYW5nZSgpOworICAgIHZhciBzZWxlY3RlZE1vbnRo
ID0gdGhpcy5fcmFuZ2VGb3JOb2RlKGZpcnN0Tm9kZUluU2VsZWN0ZWRSYW5nZSk7CiAgICAgaWYg
KCFmaXJzdE5vZGVJblNlbGVjdGVkUmFuZ2UKICAgICAgICAgJiYgKGtleSA9PSAiUmlnaHQiIHx8
IGtleSA9PSAiTGVmdCIgfHwga2V5ID09ICJVcCIgfHwga2V5ID09ICJEb3duIiB8fCBrZXkgPT0g
IlBhZ2VVcCIgfHwga2V5ID09ICJQYWdlRG93biIpKSB7CiAgICAgICAgIHRoaXMuc2VsZWN0UmFu
Z2UoY3VycmVudE1vbnRoKTsKLSAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7Ci0gICAg
ICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
dmFyIHNlbGVjdGVkTW9udGggPSB0aGlzLl9yYW5nZUZvck5vZGUoZmlyc3ROb2RlSW5TZWxlY3Rl
ZFJhbmdlKTsKLSAgICBpZiAoa2V5ID09IChnbG9iYWwucGFyYW1zLmlzQ2FsZW5kYXJSVEwgPyAi
UmlnaHQiIDogIkxlZnQiKSB8fCBrZXkgPT0gIlVwIiB8fCBrZXkgPT0gIlBhZ2VVcCIpIHsKKyAg
ICAgICAgZXZlbnRIYW5kbGVkID0gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKGtleSA9PSAoZ2xvYmFs
LnBhcmFtcy5pc0NhbGVuZGFyUlRMID8gIlJpZ2h0IiA6ICJMZWZ0IikgfHwga2V5ID09ICJVcCIg
fHwga2V5ID09ICJQYWdlVXAiKSB7CiAgICAgICAgIGlmIChzZWxlY3RlZE1vbnRoLnZhbHVlT2Yo
KSA+IGN1cnJlbnRNb250aC52YWx1ZU9mKCkpCiAgICAgICAgICAgICB0aGlzLnNlbGVjdFJhbmdl
QW5kU2hvd0VudGlyZVJhbmdlKGN1cnJlbnRNb250aCk7CiAgICAgICAgIGVsc2UKQEAgLTE0NjQs
OSArMTY2Nyw5IEBAIE1vbnRoUGlja2VyRGF5c1RhYmxlLnByb3RvdHlwZS5faGFuZGxlS2V5ID0g
ZnVuY3Rpb24oZXZlbnQpIHsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgdGhpcy5zZWxlY3RS
YW5nZUFuZFNob3dFbnRpcmVSYW5nZShjdXJyZW50TW9udGgubmV4dCgpKTsKICAgICAgICAgZXZl
bnRIYW5kbGVkID0gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKHRoaXMuX2hhc1NlbGVjdGlvbigpICYm
IGtleSA9PSAiRW50ZXIiKSB7Ci0gICAgICAgIGlmIChjdXJyZW50U2VsZWN0aW9uKSB7Ci0gICAg
ICAgICAgICB0aGlzLnBpY2tlci5zdWJtaXRWYWx1ZShjdXJyZW50U2VsZWN0aW9uLnRvU3RyaW5n
KCkpOworICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWRNb250aCAmJiBrZXkgPT0gIkVudGVyIikgewor
ICAgICAgICBpZiAoZmlyc3ROb2RlSW5TZWxlY3RlZFJhbmdlLmNsYXNzTGlzdC5jb250YWlucyhD
bGFzc05hbWVzLkF2YWlsYWJsZSkpIHsKKyAgICAgICAgICAgIHRoaXMucGlja2VyLnN1Ym1pdFZh
bHVlKHNlbGVjdGVkTW9udGgudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICBldmVudEhhbmRsZWQg
PSB0cnVlOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChrZXkgPT0gIlUrMDA1NCIpIHsgLy8g
J3QnCkBAIC0xNDgwLDYgKzE2ODMsMTE2IEBAIE1vbnRoUGlja2VyRGF5c1RhYmxlLnByb3RvdHlw
ZS5faGFuZGxlS2V5ID0gZnVuY3Rpb24oZXZlbnQpIHsKIH07CiAKIC8qKgorICogQGNvbnN0cnVj
dG9yCisgKiBAcGFyYW17IUNhbGVuZGFyUGlja2VyfSBwaWNrZXIKKyAqLworZnVuY3Rpb24gV2Vl
a1BpY2tlckRheXNUYWJsZShwaWNrZXIpIHsKKyAgICBEYXlzVGFibGUuY2FsbCh0aGlzLCBwaWNr
ZXIpOworfQorV2Vla1BpY2tlckRheXNUYWJsZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKERh
eXNUYWJsZS5wcm90b3R5cGUpOworCisvKioKKyAqIEBwYXJhbSB7IVdlZWt9IHdlZWsKKyAqLwor
V2Vla1BpY2tlckRheXNUYWJsZS5wcm90b3R5cGUuX21hcmtSYW5nZUFzU2VsZWN0ZWQgPSBmdW5j
dGlvbih3ZWVrKSB7CisgICAgdmFyIHdlZWtTdHJpbmcgPSB3ZWVrLnRvU3RyaW5nKCk7CisgICAg
Zm9yICh2YXIgdyA9IDA7IHcgPCBEYXlzVGFibGUuX1dlZWtzOyB3KyspIHsKKyAgICAgICAgZm9y
ICh2YXIgZCA9IDA7IGQgPCA3OyBkKyspIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9kYXlzW3dd
W2RdLmRhdGFzZXQud2Vla1ZhbHVlID09IHdlZWtTdHJpbmcpIHsKKyAgICAgICAgICAgICAgICB0
aGlzLl9kYXlzW3ddW2RdLmNsYXNzTGlzdC5hZGQoQ2xhc3NOYW1lcy5TZWxlY3RlZCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlz
Ll93ZWVrTnVtYmVycy5sZW5ndGg7ICsraSkgeworICAgICAgICBpZiAodGhpcy5fd2Vla051bWJl
cnNbaV0uZGF0YXNldC53ZWVrVmFsdWUgPT09IHdlZWtTdHJpbmcpIHsKKyAgICAgICAgICAgIHRo
aXMuX3dlZWtOdW1iZXJzW2ldLmNsYXNzTGlzdC5hZGQoQ2xhc3NOYW1lcy5TZWxlY3RlZCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK307CisKKy8qKgorICogQHBhcmFt
IHshV2Vla30gd2VlaworICovCitXZWVrUGlja2VyRGF5c1RhYmxlLnByb3RvdHlwZS5zZWxlY3RS
YW5nZSA9IGZ1bmN0aW9uKHdlZWspIHsKKyAgICB0aGlzLl9kZXNlbGVjdCgpOworICAgIHZhciB3
ZWVrU3RhcnREYXRlID0gd2Vlay5zdGFydERhdGUoKTsKKyAgICB2YXIgd2Vla0VuZERhdGUgPSB3
ZWVrLmVuZERhdGUoKTsKKyAgICBpZiAodGhpcy5zdGFydERhdGUoKSA+PSB3ZWVrRW5kRGF0ZSkK
KyAgICAgICAgdGhpcy5waWNrZXIuc2hvd01vbnRoKE1vbnRoLmNyZWF0ZUZyb21EYXRlKHdlZWtF
bmREYXRlKSwgQ2FsZW5kYXJQaWNrZXIuTmF2aWdhdGlvbkJlaGF2aW91ci5BbmltYXRlKTsKKyAg
ICBlbHNlIGlmICh0aGlzLmVuZERhdGUoKSA8PSB3ZWVrU3RhcnREYXRlKQorICAgICAgICB0aGlz
LnBpY2tlci5zaG93TW9udGgoTW9udGguY3JlYXRlRnJvbURhdGUod2Vla1N0YXJ0RGF0ZSksIENh
bGVuZGFyUGlja2VyLk5hdmlnYXRpb25CZWhhdmlvdXIuQW5pbWF0ZSk7CisgICAgdGhpcy5fbWFy
a1JhbmdlQXNTZWxlY3RlZCh3ZWVrKTsKK307CisKKy8qKgorICogQHBhcmFtIHshV2Vla30gd2Vl
aworICovCitXZWVrUGlja2VyRGF5c1RhYmxlLnByb3RvdHlwZS5zZWxlY3RSYW5nZUFuZFNob3dF
bnRpcmVSYW5nZSA9IGZ1bmN0aW9uKHdlZWspIHsKKyAgICB0aGlzLl9kZXNlbGVjdCgpOworICAg
IHZhciB3ZWVrU3RhcnREYXRlID0gd2Vlay5zdGFydERhdGUoKTsKKyAgICB2YXIgd2Vla0VuZERh
dGUgPSB3ZWVrLmVuZERhdGUoKTsKKyAgICBpZiAodGhpcy5zdGFydERhdGUoKSA+IHdlZWtTdGFy
dERhdGUpCisgICAgICAgIHRoaXMucGlja2VyLnNob3dNb250aChNb250aC5jcmVhdGVGcm9tRGF0
ZSh3ZWVrU3RhcnREYXRlKSwgQ2FsZW5kYXJQaWNrZXIuTmF2aWdhdGlvbkJlaGF2aW91ci5Bbmlt
YXRlKTsKKyAgICBlbHNlIGlmICh0aGlzLmVuZERhdGUoKSA8IHdlZWtFbmREYXRlKQorICAgICAg
ICB0aGlzLnBpY2tlci5zaG93TW9udGgoTW9udGguY3JlYXRlRnJvbURhdGUod2Vla0VuZERhdGUp
LCBDYWxlbmRhclBpY2tlci5OYXZpZ2F0aW9uQmVoYXZpb3VyLkFuaW1hdGUpOworICAgIHRoaXMu
X21hcmtSYW5nZUFzU2VsZWN0ZWQod2Vlayk7Cit9OworCisvKioKKyAqIEBwYXJhbSB7IUVsZW1l
bnR9IGRheU5vZGUKKyAqIEByZXR1cm4gez9XZWVrfQorICovCitXZWVrUGlja2VyRGF5c1RhYmxl
LnByb3RvdHlwZS5fcmFuZ2VGb3JOb2RlID0gZnVuY3Rpb24oZGF5Tm9kZSkgeworICAgIGlmICgh
ZGF5Tm9kZSkKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgcmV0dXJuIFdlZWsucGFyc2UoZGF5
Tm9kZS5kYXRhc2V0LndlZWtWYWx1ZSk7Cit9OworCisvKioKKyAqIEBwYXJhbSB7IUV2ZW50fSBl
dmVudAorICovCitXZWVrUGlja2VyRGF5c1RhYmxlLnByb3RvdHlwZS5faGFuZGxlS2V5ID0gZnVu
Y3Rpb24oZXZlbnQpIHsKKyAgICB0aGlzLnBpY2tlci5tYXliZVVwZGF0ZUZvY3VzU3R5bGUoKTsK
KyAgICB2YXIga2V5ID0gZXZlbnQua2V5SWRlbnRpZmllcjsKKyAgICB2YXIgZXZlbnRIYW5kbGVk
ID0gZmFsc2U7CisgICAgdmFyIGN1cnJlbnRNb250aCA9IHRoaXMucGlja2VyLmN1cnJlbnRNb250
aCgpOworICAgIHZhciBmaXJzdE5vZGVJblNlbGVjdGVkUmFuZ2UgPSB0aGlzLl9maXJzdE5vZGVJ
blNlbGVjdGVkUmFuZ2UoKTsKKyAgICB2YXIgc2VsZWN0ZWRXZWVrID0gdGhpcy5fcmFuZ2VGb3JO
b2RlKGZpcnN0Tm9kZUluU2VsZWN0ZWRSYW5nZSk7CisgICAgaWYgKCFmaXJzdE5vZGVJblNlbGVj
dGVkUmFuZ2UKKyAgICAgICAgJiYgKGtleSA9PSAiUmlnaHQiIHx8IGtleSA9PSAiTGVmdCIgfHwg
a2V5ID09ICJVcCIgfHwga2V5ID09ICJEb3duIiB8fCBrZXkgPT0gIlBhZ2VVcCIgfHwga2V5ID09
ICJQYWdlRG93biIpKSB7CisgICAgICAgIC8vIFB1dCB0aGUgc2VsZWN0aW9uIG9uIGEgY2VudGVy
IGNlbGwuCisgICAgICAgIHRoaXMuX3NlbGVjdFJhbmdlQXRQb3NpdGlvbigzLCBNYXRoLmZsb29y
KERheXNUYWJsZS5fV2Vla3MgLyAyIC0gMSkpOworICAgIH0gZWxzZSBpZiAoa2V5ID09IChnbG9i
YWwucGFyYW1zLmlzQ2FsZW5kYXJSVEwgPyAiUmlnaHQiIDogIkxlZnQiKSB8fCBrZXkgPT0gIlVw
IikgeworICAgICAgICB0aGlzLnNlbGVjdFJhbmdlQW5kU2hvd0VudGlyZVJhbmdlKHNlbGVjdGVk
V2Vlay5wcmV2aW91cygpKTsKKyAgICAgICAgZXZlbnRIYW5kbGVkID0gdHJ1ZTsKKyAgICB9IGVs
c2UgaWYgKGtleSA9PSAoZ2xvYmFsLnBhcmFtcy5pc0NhbGVuZGFyUlRMID8gIkxlZnQiIDogIlJp
Z2h0IikgfHwga2V5ID09ICJEb3duIikgeworICAgICAgICB0aGlzLnNlbGVjdFJhbmdlQW5kU2hv
d0VudGlyZVJhbmdlKHNlbGVjdGVkV2Vlay5uZXh0KCkpOworICAgICAgICBldmVudEhhbmRsZWQg
PSB0cnVlOworICAgIH0gZWxzZSBpZiAoa2V5ID09ICJQYWdlVXAiKSB7CisgICAgICAgIGlmICgh
dGhpcy5fbWF5YmVTZXRQcmV2aW91c01vbnRoKENhbGVuZGFyUGlja2VyLk5hdmlnYXRpb25CZWhh
dmlvdXIuQW5pbWF0ZSB8IENhbGVuZGFyUGlja2VyLk5hdmlnYXRpb25CZWhhdmlvdXIuS2VlcFNl
bGVjdGlvblBvc2l0aW9uKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZXZlbnRIYW5k
bGVkID0gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKGtleSA9PSAiUGFnZURvd24iKSB7CisgICAgICAg
IGlmICghdGhpcy5fbWF5YmVTZXROZXh0TW9udGgoQ2FsZW5kYXJQaWNrZXIuTmF2aWdhdGlvbkJl
aGF2aW91ci5BbmltYXRlIHwgQ2FsZW5kYXJQaWNrZXIuTmF2aWdhdGlvbkJlaGF2aW91ci5LZWVw
U2VsZWN0aW9uUG9zaXRpb24pKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBldmVudEhh
bmRsZWQgPSB0cnVlOworICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWRXZWVrICYmIGtleSA9PSAiRW50
ZXIiKSB7CisgICAgICAgIGlmIChmaXJzdE5vZGVJblNlbGVjdGVkUmFuZ2UuY2xhc3NMaXN0LmNv
bnRhaW5zKENsYXNzTmFtZXMuQXZhaWxhYmxlKSkgeworICAgICAgICAgICAgdGhpcy5waWNrZXIu
c3VibWl0VmFsdWUoc2VsZWN0ZWRXZWVrLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgZXZlbnRI
YW5kbGVkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoa2V5ID09ICJVKzAwNTQi
KSB7IC8vICd0JworICAgICAgICB0aGlzLnNlbGVjdFJhbmdlQW5kU2hvd0VudGlyZVJhbmdlKFdl
ZWsuY3JlYXRlRnJvbVRvZGF5KCkpOworICAgICAgICBldmVudEhhbmRsZWQgPSB0cnVlOworICAg
IH0KKyAgICBpZiAoZXZlbnRIYW5kbGVkKSB7CisgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlv
bigpOworICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworICAgIH0KK307CisKKy8qKgog
ICogQHBhcmFtIHshRXZlbnR9IGV2ZW50CiAgKi8KIENhbGVuZGFyUGlja2VyLnByb3RvdHlwZS5f
aGFuZGxlQm9keUtleURvd24gPSBmdW5jdGlvbihldmVudCkgewpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGE1NjkyMzNhNWNi
OWZkZjE3ODNiZDFiYWQ1MWM4NDI1NjhmOWZlNTQuLjA1ZTVhZmQ2MzQzMzRmNDZhMmUxZTg1NTJk
NDA3NTIxMjJhNTg3YTEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAxMi0xMS0wOCAgS2Vpc2hp
IEhhdHRvcmkgIDxrZWlzaGlAd2Via2l0Lm9yZz4KKworICAgICAgICBJbXBsZW1lbnQgd2VlayBw
aWNraW5nIHRvIGNhbGVuZGFyIHBpY2tlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTAxNDQ5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9mYXN0L2Zvcm1zL2NhbGVuZGFy
LXBpY2tlci9jYWxlbmRhci1waWNrZXItbW91c2Utb3BlcmF0aW9ucy5odG1sOiBOZWVkcyB0byBi
ZSBjaGFuZ2VkIGJlY2F1c2Ugd2UgY2hhbmdlZCBEYXlzVGFibGUgRE9NLgorCiAyMDEyLTExLTA2
ICBEYW4gQmVhbSAgPGRiZWFtQGNocm9taXVtLm9yZz4gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAKIAogICAgICAgICBFbmFibGUgUkVRVUVTVF9BVVRPQ09NUExFVEUgZm9yIGNocm9t
aXVtIHBvcnQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2Zhc3Qv
Zm9ybXMvY2FsZW5kYXItcGlja2VyL2NhbGVuZGFyLXBpY2tlci1tb3VzZS1vcGVyYXRpb25zLmh0
bWwgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9mYXN0L2Zvcm1zL2NhbGVuZGFyLXBp
Y2tlci9jYWxlbmRhci1waWNrZXItbW91c2Utb3BlcmF0aW9ucy5odG1sCmluZGV4IGY4MDFhNDdh
YWQzNTI3YmZkNTM0YzY2MzczZmM1ZWQ0ZmE3NDJlODAuLmNiMTI1NjNkYjQ5M2U0M2I3YWIyYjYw
YmFmODZiYmMzOTUxYTM4NTggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9t
aXVtL2Zhc3QvZm9ybXMvY2FsZW5kYXItcGlja2VyL2NhbGVuZGFyLXBpY2tlci1tb3VzZS1vcGVy
YXRpb25zLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vZmFzdC9mb3Jt
cy9jYWxlbmRhci1waWNrZXIvY2FsZW5kYXItcGlja2VyLW1vdXNlLW9wZXJhdGlvbnMuaHRtbApA
QCAtMjMsMTEgKzIzLDExIEBAIGZ1bmN0aW9uIHRlc3QoKSB7CiAgICAgc2hvdWxkQmUoJ2N1cnJl
bnRNb250aCgpJywgJyIyMDAwLTAxIicpOwogCiAgICAgZGVidWcoJ0NoZWNrIHRoYXQgaG92ZXJp
bmcgb3ZlciBhbiBlbnRyeSBoaWdobGlnaHRzIGl0LicpOwotICAgIGhvdmVyT3ZlckVsZW1lbnQo
cG9wdXBXaW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiZGF5IilbNV0pOwor
ICAgIGhvdmVyT3ZlckVsZW1lbnQocG9wdXBXaW5kb3cuZG9jdW1lbnQucXVlcnlTZWxlY3RvckFs
bCgiLmRheTpub3QoLndlZWstY29sdW1uKSIpWzVdKTsKICAgICBzaG91bGRCZSgnc2VsZWN0ZWRE
YXRlKCknLCAnIjE5OTktMTItMzEiJyk7CiAgICAgc2hvdWxkQmUoJ2N1cnJlbnRNb250aCgpJywg
JyIyMDAwLTAxIicpOwogCi0gICAgaG92ZXJPdmVyRWxlbWVudChwb3B1cFdpbmRvdy5kb2N1bWVu
dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJkYXkiKVs5XSk7CisgICAgaG92ZXJPdmVyRWxlbWVu
dChwb3B1cFdpbmRvdy5kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIuZGF5Om5vdCgud2Vlay1j
b2x1bW4pIilbOV0pOwogICAgIHNob3VsZEJlKCdzZWxlY3RlZERhdGUoKScsICciMjAwMC0wMS0w
NCInKTsKICAgICBzaG91bGRCZSgnY3VycmVudE1vbnRoKCknLCAnIjIwMDAtMDEiJyk7CiAKQEAg
LTQxLDcgKzQxLDcgQEAgZnVuY3Rpb24gdGVzdCgpIHsKICAgICBzaG91bGRCZVVuZGVmaW5lZCgn
c2VsZWN0ZWREYXRlKCknKTsKIAogICAgIGRlYnVnKCdDaGVjayB0aGF0IG1vdXNlIGNsaWNrIGNs
b3NlcyB0aGUgcG9wdXAgYW5kIHNldHMgdGhlIHZhbHVlLicpOwotICAgIGNsaWNrRWxlbWVudChw
b3B1cFdpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJkYXkiKVs2XSk7Cisg
ICAgY2xpY2tFbGVtZW50KHBvcHVwV2luZG93LmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIi5k
YXk6bm90KC53ZWVrLWNvbHVtbikiKVs2XSk7CiAgICAgc2hvdWxkQmVOdWxsKCdkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgibW9jay1wYWdlLXBvcHVwIiknKTsKICAgICBzaG91bGRCZSgnZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoImRhdGUiKS52YWx1ZScsICciMjAwMC0wMi0wNSInKTsKIApkaWZm
IC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCmluZGV4IGYzZDE2NDRiNWJhODNkMDdhOGEy
ZjMyNTBkMGJlNjhlZjA0YmNhMzcuLjZiNGIzMTI0NjJmYmY2YjY4ZThkNWI3Yjc2MzI0YTdhNDk5
NzZkNzMgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
MiBAQAorMjAxMi0xMS0wOCAgS2Vpc2hpIEhhdHRvcmkgIDxrZWlzaGlAd2Via2l0Lm9yZz4KKwor
ICAgICAgICBJbXBsZW1lbnQgd2VlayBwaWNraW5nIHRvIGNhbGVuZGFyIHBpY2tlcgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAxNDQ5CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBNYW51YWxUZXN0cy9m
b3Jtcy9jYWxlbmRhci1waWNrZXIuaHRtbDogQWRkZWQgdGVzdCBmb3Igd2VlayBwaWNrZXIuCisK
IDIwMTItMTEtMDYgIEtlaXNoaSBIYXR0b3JpICA8a2Vpc2hpQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgSW1wbGVtZW50IG1vbnRoIHBpY2tpbmcgdG8gY2FsZW5kYXIgcGlja2VyCmRpZmYgLS1naXQg
YS9NYW51YWxUZXN0cy9mb3Jtcy9jYWxlbmRhci1waWNrZXIuaHRtbCBiL01hbnVhbFRlc3RzL2Zv
cm1zL2NhbGVuZGFyLXBpY2tlci5odG1sCmluZGV4IDU1MjA3ZTRkM2RiNzUxOGUxYjhmNTZmYmUw
ODAyMWI1NGYyNjhiZGMuLjc5MGMzZDU1YWFhOTc5OTVjZjkzNjQyMTI5NTNkMjI3N2ExMzQ0NWYg
MTAwNjQ0Ci0tLSBhL01hbnVhbFRlc3RzL2Zvcm1zL2NhbGVuZGFyLXBpY2tlci5odG1sCisrKyBi
L01hbnVhbFRlc3RzL2Zvcm1zL2NhbGVuZGFyLXBpY2tlci5odG1sCkBAIC0yNyw2ICsyNyw3IEBA
IGlmcmFtZSB7CiAgPG9wdGlvbj53aXRoIGxvbmcgZGF0YWxpc3Q8L29wdGlvbj4KICA8b3B0aW9u
PkFyYWJpYyB3aXRoIGRhdGFsaXN0PC9vcHRpb24+CiAgPG9wdGlvbj5BcmFiaWMgd2l0aCBsb25n
IGRhdGFsaXN0PC9vcHRpb24+CisgPG9wdGlvbj5XZWVrPC9vcHRpb24+CiAgPG9wdGlvbj5Nb250
aDwvb3B0aW9uPgogPC9zZWxlY3Q+CiAKQEAgLTIzOSw2ICsyNDAsMjIgQEAgdmFyIGFyYWJpY0xv
bmdEYXRhbGlzdEFyZ3VtZW50cyA9IHsKICAgICBzdWdnZXN0aW9uSGlnaGxpZ2h0Q29sb3I6ICIj
MDAwMGZmIiwKICAgICBzdWdnZXN0aW9uSGlnaGxpZ2h0VGV4dENvbG9yOiAiI2ZmZmZmZiIKIH07
Cit2YXIgd2Vla0FyZ3VtZW50cyA9IHsKKyAgICBsb2NhbGU6ICdlbi1VUycsCisgICAgbW9udGhM
YWJlbHMgOiBbJ0phbnVhcnknLCAnRmVicnVhcnknLCAnTWFyY2gnLCAnQXByaWwnLCAnTWF5Jywg
J0p1bmUnLAorICAgICdKdWx5JywgJ0F1Z3VzdCcsICdTZXB0ZW1iZXInLCAnT2N0b2JlcicsICdO
b3ZlbWJlcicsICdEZWNlbWJlciddLAorICAgIGRheUxhYmVscyA6IFsnU3VuJywgJ01vbicsICdU
dWUnLCAnV2VkJywgJ1RodScsICdGcmknLCAnU2F0J10sCisgICAgdG9kYXlMYWJlbCA6ICdUaGlz
IFdlZWsnLAorICAgIGNsZWFyTGFiZWwgOiAnQ2xlYXInLAorICAgIGNhbmNlbExhYmVsIDogJ0Nh
bmNlbCcsCisgICAgd2Vla0xhYmVsOiAnV2VlaycsCisgICAgd2Vla1N0YXJ0RGF5IDogMCwKKyAg
ICBzdGVwIDogIjYwNDgwMDAwMCIsCisgICAgc3RlcEJhc2U6ICItMjU5MjAwMDAwIiwKKyAgICBj
dXJyZW50VmFsdWUgOiAnMjAwMC1XMDEnLAorICAgIG1heCA6ICcyMDk5LVcwMycsCisgICAgbW9k
ZTogIndlZWsiCit9OwogdmFyIG1vbnRoQXJndW1lbnRzID0gewogICAgIGxvY2FsZTogJ2VuLVVT
JywKICAgICBtb250aExhYmVscyA6IFsnSmFudWFyeScsICdGZWJydWFyeScsICdNYXJjaCcsICdB
cHJpbCcsICdNYXknLCAnSnVuZScsCkBAIC0zMjcsNiArMzQ0LDkgQEAgZnVuY3Rpb24gc2VsZWN0
ZWQoc2VsZWN0KSB7CiAgICAgICAgIG9wZW5DYWxlbmRhcihhcmFiaWNMb25nRGF0YWxpc3RBcmd1
bWVudHMpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIDc6CisgICAgICAgIG9wZW5DYWxlbmRh
cih3ZWVrQXJndW1lbnRzKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSA4OgogICAgICAgICBv
cGVuQ2FsZW5kYXIobW9udGhBcmd1bWVudHMpOwogICAgICAgICBicmVhazsKICAgICB9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>