<?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>110970</bug_id>
          
          <creation_ts>2013-02-27 04:28:17 -0800</creation_ts>
          <short_desc>Add calendar table view for the new calendar picker</short_desc>
          <delta_ts>2013-02-28 23:50:36 -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>109439</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Keishi Hattori">keishi</reporter>
          <assigned_to name="Keishi Hattori">keishi</assigned_to>
          <cc>tkent</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>842937</commentid>
    <comment_count>0</comment_count>
    <who name="Keishi Hattori">keishi</who>
    <bug_when>2013-02-27 04:28:17 -0800</bug_when>
    <thetext>Add calendar table view for the new calendar picker</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>842950</commentid>
    <comment_count>1</comment_count>
      <attachid>190493</attachid>
    <who name="Keishi Hattori">keishi</who>
    <bug_when>2013-02-27 05:00:57 -0800</bug_when>
    <thetext>Created attachment 190493
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>843010</commentid>
    <comment_count>2</comment_count>
      <attachid>190493</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2013-02-27 06:45:29 -0800</bug_when>
    <thetext>Comment on attachment 190493
Patch

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

&gt; Source/WebCore/Resources/pagepopups/calendarPicker.js:1901
&gt; +DayCell.Height = 20;

Is it enough for touch input devices?  We use 28px in the pointer:coarse case for now.

&gt; Source/WebCore/Resources/pagepopups/calendarPicker.js:2069
&gt; +        if (global.params.locale === &quot;ja&quot;) {

global.params.locale should be getLanguage().
Or, this should check if the region part is &quot;jp&quot; because the rule of blue Saturdays and red Sundays is a common sense in Japan, not Japanese language. (But Google Chrome might provide no &quot;jp&quot; part.)

&gt; Source/WebCore/Resources/pagepopups/calendarPicker.js:2204
&gt; +    // Disable mouse wheel scrolling.

why?
We prefer &quot;why&quot; comments to &quot;what&quot; comments.

&gt; Source/WebCore/Resources/pagepopups/calendarPicker.js:2329
&gt; + * @return {!Object}

should explain the content of Object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>844032</commentid>
    <comment_count>3</comment_count>
      <attachid>190493</attachid>
    <who name="Keishi Hattori">keishi</who>
    <bug_when>2013-02-28 06:39:39 -0800</bug_when>
    <thetext>Comment on attachment 190493
Patch

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

&gt;&gt; Source/WebCore/Resources/pagepopups/calendarPicker.js:1901
&gt;&gt; +DayCell.Height = 20;
&gt; 
&gt; Is it enough for touch input devices?  We use 28px in the pointer:coarse case for now.

Can I add touch support in another patch? I&apos;ll have to prepare a patch so the ScrollView supports scrolling with touch events so you can scroll in the month popup anyway.

&gt;&gt; Source/WebCore/Resources/pagepopups/calendarPicker.js:2069
&gt;&gt; +        if (global.params.locale === &quot;ja&quot;) {
&gt; 
&gt; global.params.locale should be getLanguage().
&gt; Or, this should check if the region part is &quot;jp&quot; because the rule of blue Saturdays and red Sundays is a common sense in Japan, not Japanese language. (But Google Chrome might provide no &quot;jp&quot; part.)

I confirmed that Chrome on Mac only provides &quot;ja&quot; for Japanese. I&apos;ll use getLanguage.

&gt;&gt; Source/WebCore/Resources/pagepopups/calendarPicker.js:2204
&gt;&gt; +    // Disable mouse wheel scrolling.
&gt; 
&gt; why?
&gt; We prefer &quot;why&quot; comments to &quot;what&quot; comments.

Done.

&gt;&gt; Source/WebCore/Resources/pagepopups/calendarPicker.js:2329
&gt;&gt; + * @return {!Object}
&gt; 
&gt; should explain the content of Object.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>844034</commentid>
    <comment_count>4</comment_count>
      <attachid>190714</attachid>
    <who name="Keishi Hattori">keishi</who>
    <bug_when>2013-02-28 06:41:44 -0800</bug_when>
    <thetext>Created attachment 190714
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>844733</commentid>
    <comment_count>5</comment_count>
      <attachid>190493</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2013-02-28 19:41:08 -0800</bug_when>
    <thetext>Comment on attachment 190493
Patch

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

&gt;&gt;&gt; Source/WebCore/Resources/pagepopups/calendarPicker.js:1901
&gt;&gt;&gt; +DayCell.Height = 20;
&gt;&gt; 
&gt;&gt; Is it enough for touch input devices?  We use 28px in the pointer:coarse case for now.
&gt; 
&gt; Can I add touch support in another patch? I&apos;ll have to prepare a patch so the ScrollView supports scrolling with touch events so you can scroll in the month popup anyway.

Please add a FIXEM comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>844734</commentid>
    <comment_count>6</comment_count>
      <attachid>190714</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2013-02-28 19:41:24 -0800</bug_when>
    <thetext>Comment on attachment 190714
Patch

ok</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>844850</commentid>
    <comment_count>7</comment_count>
      <attachid>190891</attachid>
    <who name="Keishi Hattori">keishi</who>
    <bug_when>2013-02-28 22:54:19 -0800</bug_when>
    <thetext>Created attachment 190891
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>844865</commentid>
    <comment_count>8</comment_count>
      <attachid>190891</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-28 23:50:32 -0800</bug_when>
    <thetext>Comment on attachment 190891
Patch

Clearing flags on attachment: 190891

Committed r144423: &lt;http://trac.webkit.org/changeset/144423&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>844866</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-28 23:50:36 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>190493</attachid>
            <date>2013-02-27 05:00:57 -0800</date>
            <delta_ts>2013-02-28 19:41:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-110970-20130227215711.patch</filename>
            <type>text/plain</type>
            <size>21202</size>
            <attacher name="Keishi Hattori">keishi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ0MTY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjAxZGVlODcyYjc0NDFk
NmRhYjY0MjU5YTM5NzZlMjRhYjdhMjFlNC4uMTlkOGEzOTE4OWZiMDc3MjE0ZmJkNmM4MzJjNWU3
NWFhYjZjMWQ1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU0IEBACisyMDEzLTAyLTI3ICBLZWlz
aGkgSGF0dG9yaSAgPGtlaXNoaUB3ZWJraXQub3JnPgorCisgICAgICAgIEFkZCBjYWxlbmRhciB0
YWJsZSB2aWV3IGZvciB0aGUgbmV3IGNhbGVuZGFyIHBpY2tlcgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEwOTcwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIGNhbGVuZGFyIHRhYmxlIHRoYXQgd2ls
bCBiZSB1c2VkIGluIHRoZSBuZXcgY2FsZW5kYXIgcGlja2VyIChCdWcgMTA5NDM5KS4KKworICAg
ICAgICBObyBuZXcgdGVzdHMuIENvZGUgaXMgbm90IHVzZWQgeWV0LgorCisgICAgICAgICogUmVz
b3VyY2VzL3BhZ2Vwb3B1cHMvY2FsZW5kYXJQaWNrZXIuanM6CisgICAgICAgIChEYXlDZWxsKTog
Q2VsbCB3aGljaCByZXByZXNlbnRzIG9uZSBkYXkgaW4gdGhlIGNhbGVuZGFyLgorICAgICAgICAo
RGF5Q2VsbC5yZWN5Y2xlT3JDcmVhdGUpOgorICAgICAgICAoRGF5Q2VsbC5wcm90b3R5cGUuX3Jl
Y3ljbGVCaW4pOgorICAgICAgICAoRGF5Q2VsbC5wcm90b3R5cGUudGhyb3dBd2F5KToKKyAgICAg
ICAgKERheUNlbGwucHJvdG90eXBlLnNldEhpZ2hsaWdodGVkKTogU2V0cyB0aGUgaGlnaGxpZ2h0
ZWQgY2xhc3Mgb24gdGhlIGVsZW1lbnQuCisgICAgICAgIChEYXlDZWxsLnByb3RvdHlwZS5zZXRE
aXNhYmxlZCk6IFNldHMgdGhlIGRpc2FibGVkIGNsYXNzIG9uIHRoZSBlbGVtZW50LgorICAgICAg
ICAoRGF5Q2VsbC5wcm90b3R5cGUuc2V0SXNJbkN1cnJlbnRNb250aCk6IFNldHMgdGhlIGN1cnJl
bnQtbW9udGggY2xhc3Mgb24gdGhlIGVsZW1lbnQuCisgICAgICAgIChEYXlDZWxsLnByb3RvdHlw
ZS5zZXRJc1RvZGF5KTogU2V0cyB0aGUgdG9kYXkgY2xhc3Mgb24gdGhlIGVsZW1lbnQuCisgICAg
ICAgIChEYXlDZWxsLnByb3RvdHlwZS5yZXNldCk6IFJlc2V0cyB0aGUgZGF5IGNlbGwgdG8gYmUg
cmV1c2VkLgorICAgICAgICAoV2Vla051bWJlckNlbGwpOiBDZWxsIHVzZWQgZm9yIHRoZSB3ZWVr
IG51bWJlciBjb2x1bW4uCisgICAgICAgIChXZWVrTnVtYmVyQ2VsbC5wcm90b3R5cGUuX3JlY3lj
bGVCaW4pOgorICAgICAgICAoV2Vla051bWJlckNlbGwucmVjeWNsZU9yQ3JlYXRlKToKKyAgICAg
ICAgKFdlZWtOdW1iZXJDZWxsLnByb3RvdHlwZS5yZXNldCk6CisgICAgICAgIChXZWVrTnVtYmVy
Q2VsbC5wcm90b3R5cGUudGhyb3dBd2F5KToKKyAgICAgICAgKFdlZWtOdW1iZXJDZWxsLnByb3Rv
dHlwZS5zZXRIaWdobGlnaHRlZCk6IFNldHMgdGhlIGhpZ2hsaWdodGVkIGNsYXNzIG9uIHRoZSBl
bGVtZW50LgorICAgICAgICAoV2Vla051bWJlckNlbGwucHJvdG90eXBlLnNldERpc2FibGVkKTog
U2V0cyB0aGUgZGlzYWJsZWQgY2xhc3Mgb24gdGhlIGVsZW1lbnQuCisgICAgICAgIChDYWxlbmRh
clRhYmxlSGVhZGVyVmlldyk6IEhlYWRlciBmb3IgdGhlIGNhbGVuZGFyIHRhYmxlLiBDb250YWlu
cyB0aGUgY29sdW1uIGxhYmVscy4KKyAgICAgICAgKENhbGVuZGFyUm93Q2VsbCk6IFJvdyBjb250
YWluaW5nIGRheSBjZWxscyBhbmQgbWF5YmUgYSB3ZWVrIG51bWJlciBjZWxsLgorICAgICAgICAo
Q2FsZW5kYXJSb3dDZWxsLnByb3RvdHlwZS5fcmVjeWNsZUJpbik6CisgICAgICAgIChDYWxlbmRh
clJvd0NlbGwucHJvdG90eXBlLnJlc2V0KToKKyAgICAgICAgKENhbGVuZGFyUm93Q2VsbC5wcm90
b3R5cGUudGhyb3dBd2F5KToKKyAgICAgICAgKENhbGVuZGFyVGFibGVWaWV3KTogQSBsaXN0IHZp
ZXcgc2hvd2luZyBhIGdyaWQgb2YgZGF5cy4KKyAgICAgICAgKENhbGVuZGFyVGFibGVWaWV3LnBy
b3RvdHlwZS5yb3dBdFNjcm9sbE9mZnNldCk6IFJldHVybnMgdGhlIHJvdyBudW1iZXIgY3VycmVu
dGx5IGF0IHRoZSBzY3JvbGwgb2Zmc2V0LgorICAgICAgICAoQ2FsZW5kYXJUYWJsZVZpZXcucHJv
dG90eXBlLnNjcm9sbE9mZnNldEZvclJvdyk6IFJldHVybnMgdGhlIGN1cnJlbnQgc2Nyb2xsIG9m
ZnNldCBmb3IgdGhlIGdpdmVuIHJvdy4KKyAgICAgICAgKENhbGVuZGFyVGFibGVWaWV3LnByb3Rv
dHlwZS5vbkNsaWNrKTogSWYgdGhlIGNsaWNrIGlzIG9uIGEgRGF5Q2VsbCBvciBXZWVrTnVtYmVy
Q2VsbCwgc2VsZWN0IHRoZSBhcHByb3ByaWF0ZSBkYXRlIHJhbmdlLgorICAgICAgICAoQ2FsZW5k
YXJUYWJsZVZpZXcucHJvdG90eXBlLm9uTW91c2VPdmVyKTogSWYgdGhlIGNsaWNrIGlzIG9uIGEg
RGF5Q2VsbCBvciBXZWVrTnVtYmVyQ2VsbCwgaGlnaGxpZ2h0IHRoZSBhcHByb3ByaWF0ZSBkYXRl
IHJhbmdlLgorICAgICAgICAoQ2FsZW5kYXJUYWJsZVZpZXcucHJvdG90eXBlLm9uTW91c2VPdXQp
OgorICAgICAgICAoQ2FsZW5kYXJUYWJsZVZpZXcucHJvdG90eXBlLnByZXBhcmVOZXdDZWxsKTog
UHJlcGFyZXMgYSBuZXcgcm93IGNlbGwgYnkgcmVjeWNsaW5nIG9yIGNyZWF0aW5nIGEgbmV3IG9u
ZS4KKyAgICAgICAgKENhbGVuZGFyVGFibGVWaWV3LnByb3RvdHlwZS5oZWlnaHQpOiBSZXR1cm5z
IHRoZSBoZWlnaHQgb2YgdGhlIHZpZXcgaW4gcGl4ZWxzLgorICAgICAgICAoQ2FsZW5kYXJUYWJs
ZVZpZXcucHJvdG90eXBlLnNldEhlaWdodCk6IFNldHMgdGhlIGhlaWdodCBvZiB0aGUgdmlldyBp
biBwaXhlbHMuCisgICAgICAgIChDYWxlbmRhclRhYmxlVmlldy5wcm90b3R5cGUuc2Nyb2xsVG9N
b250aCk6IFNjcm9sbHMgdG8gcmV2ZWFsIHRoZSBnaXZlbiBtb250aC4KKyAgICAgICAgKENhbGVu
ZGFyVGFibGVWaWV3LnByb3RvdHlwZS5kYXlBdENvbHVtbkFuZFJvdyk6IERheSBhdCBhIGdpdmVu
IGNvbHVtbiBhbmQgcm93LiBDb2x1bW4gbnVtYmVyIGRvZXNuJ3QgY291bnQgd2VlayBudW1iZXIg
Y29sdW1uLgorICAgICAgICAoQ2FsZW5kYXJUYWJsZVZpZXcucHJvdG90eXBlLmNvbHVtbkFuZFJv
d0ZvckRheSk6IENvbHVtbiBhbmQgcm93IGZvciB0aGUgZ2l2ZW4gZGF5LgorICAgICAgICAoQ2Fs
ZW5kYXJUYWJsZVZpZXcucHJvdG90eXBlLnVwZGF0ZUNlbGxzKTogVXBkYXRlIHRoZSBwb3NpdGlv
biBhbmQgYXBwZWFyYW5jZSBvZiB0aGUgY2VsbC5zCisgICAgICAgIChDYWxlbmRhclRhYmxlVmll
dy5wcm90b3R5cGUucHJlcGFyZU5ld0RheUNlbGwpOiBQcmVwYXJlcyBhIG5ldyBkYXkgY2VsbC4g
VGhlIGNlbGwgaXMgcmVnaXN0ZXJlZCB0byB0aGlzLl9kYXlDZWxscy4KKyAgICAgICAgKENhbGVu
ZGFyVGFibGVWaWV3LnByb3RvdHlwZS5wcmVwYXJlTmV3V2Vla051bWJlckNlbGwpOiBQcmVwYXJl
cyBhIG5ldyB3ZWVrIG51bWJlciBjZWxsLiBUaGUgY2VsbCBpcyByZWdpc3RlcmVkIHRvIHRoaXMu
X3dlZWtOdW1iZXJDZWxscy4KKyAgICAgICAgKENhbGVuZGFyVGFibGVWaWV3LnByb3RvdHlwZS50
aHJvd0F3YXlEYXlDZWxsKTogVGhlIGNlbGwgaXMgdW5yZWdpc3RlcmVkIGZyb20gdGhpcy5fZGF5
Q2VsbHMuCisgICAgICAgIChDYWxlbmRhclRhYmxlVmlldy5wcm90b3R5cGUudGhyb3dBd2F5V2Vl
a051bWJlckNlbGwpOiBUaGUgY2VsbCBpcyB1bnJlZ2lzdGVyZWQgZnJvbSB0aGlzLl93ZWVrTnVt
YmVyQ2VsbHMuCisKIDIwMTMtMDItMjcgIEV1Z2VuZSBLbHl1Y2huaWtvdiAgPGV1c3Rhc0BjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogdGltZWxpbmUgc3RvcHMgd29ya2lu
ZyBvbiBjZXJ0YWluIHNpdGVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMv
cGFnZXBvcHVwcy9jYWxlbmRhclBpY2tlci5qcyBiL1NvdXJjZS9XZWJDb3JlL1Jlc291cmNlcy9w
YWdlcG9wdXBzL2NhbGVuZGFyUGlja2VyLmpzCmluZGV4IDM5MzEzYmY5ZGM3NWQ3Y2NjMjliN2Nj
ZmViOTdjYTE1NTc0OTVmOWEuLjIzYWU0MmJmNDk0MGRlMDQ2NzYxNjFmN2Q0NmU3MmY2ZWJlZjBm
ZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1Jlc291cmNlcy9wYWdlcG9wdXBzL2NhbGVu
ZGFyUGlja2VyLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL1Jlc291cmNlcy9wYWdlcG9wdXBzL2Nh
bGVuZGFyUGlja2VyLmpzCkBAIC0xODgxLDYgKzE4ODEsNTUwIEBAIFNjcnViYnlTY3JvbGxCYXIu
cHJvdG90eXBlLm9uU2Nyb2xsVGltZXIgPSBmdW5jdGlvbigpIHsKIAogLyoqCiAgKiBAY29uc3Ry
dWN0b3IKKyAqIEBleHRlbmRzIExpc3RDZWxsCisgKi8KK2Z1bmN0aW9uIERheUNlbGwoKSB7Cisg
ICAgTGlzdENlbGwuY2FsbCh0aGlzKTsKKyAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChE
YXlDZWxsLkNsYXNzTmFtZURheUNlbGwpOworICAgIHRoaXMuZWxlbWVudC5zdHlsZS53aWR0aCA9
IERheUNlbGwuV2lkdGggKyAicHgiOworICAgIHRoaXMuZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBE
YXlDZWxsLkhlaWdodCArICJweCI7CisgICAgdGhpcy5lbGVtZW50LnN0eWxlLmxpbmVIZWlnaHQg
PSAoRGF5Q2VsbC5IZWlnaHQgLSBEYXlDZWxsLkJvcmRlcldpZHRoICogMikgKyAicHgiOworICAg
IC8qKgorICAgICAqIEB0eXBlIHs/RGF5fQorICAgICAqLworICAgIHRoaXMuZGF5ID0gbnVsbDsK
K307CisKK0RheUNlbGwucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShMaXN0Q2VsbC5wcm90b3R5
cGUpOworCitEYXlDZWxsLldpZHRoID0gMzQ7CitEYXlDZWxsLkhlaWdodCA9IDIwOworRGF5Q2Vs
bC5Cb3JkZXJXaWR0aCA9IDE7CitEYXlDZWxsLkNsYXNzTmFtZURheUNlbGwgPSAiZGF5LWNlbGwi
OworRGF5Q2VsbC5DbGFzc05hbWVIaWdobGlnaHRlZCA9ICJoaWdobGlnaHRlZCI7CitEYXlDZWxs
LkNsYXNzTmFtZURpc2FibGVkID0gImRpc2FibGVkIjsKK0RheUNlbGwuQ2xhc3NOYW1lQ3VycmVu
dE1vbnRoID0gImN1cnJlbnQtbW9udGgiOworRGF5Q2VsbC5DbGFzc05hbWVUb2RheSA9ICJ0b2Rh
eSI7CisKK0RheUNlbGwuX3JlY3ljbGVCaW4gPSBbXTsKKworRGF5Q2VsbC5yZWN5Y2xlT3JDcmVh
dGUgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gRGF5Q2VsbC5fcmVjeWNsZUJpbi5wb3AoKSB8
fCBuZXcgRGF5Q2VsbCgpOworfTsKKworLyoqCisgKiBAcmV0dXJuIHshQXJyYXl9CisgKiBAb3Zl
cnJpZGUKKyAqLworRGF5Q2VsbC5wcm90b3R5cGUuX3JlY3ljbGVCaW4gPSBmdW5jdGlvbigpIHsK
KyAgICByZXR1cm4gRGF5Q2VsbC5fcmVjeWNsZUJpbjsKK307CisKKy8qKgorICogQG92ZXJyaWRl
CisgKi8KK0RheUNlbGwucHJvdG90eXBlLnRocm93QXdheSA9IGZ1bmN0aW9uKCkgeworICAgIExp
c3RDZWxsLnByb3RvdHlwZS50aHJvd0F3YXkuY2FsbCh0aGlzKTsKKyAgICB0aGlzLmRheSA9IG51
bGw7Cit9OworCisvKioKKyAqIEBwYXJhbSB7IWJvb2xlYW59IGhpZ2hsaWdodGVkCisgKi8KK0Rh
eUNlbGwucHJvdG90eXBlLnNldEhpZ2hsaWdodGVkID0gZnVuY3Rpb24oaGlnaGxpZ2h0ZWQpIHsK
KyAgICBpZiAoaGlnaGxpZ2h0ZWQpCisgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRk
KERheUNlbGwuQ2xhc3NOYW1lSGlnaGxpZ2h0ZWQpOworICAgIGVsc2UKKyAgICAgICAgdGhpcy5l
bGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoRGF5Q2VsbC5DbGFzc05hbWVIaWdobGlnaHRlZCk7Cit9
OworCisvKioKKyAqIEBwYXJhbSB7IWJvb2xlYW59IGRpc2FibGVkCisgKi8KK0RheUNlbGwucHJv
dG90eXBlLnNldERpc2FibGVkID0gZnVuY3Rpb24oZGlzYWJsZWQpIHsKKyAgICBpZiAoZGlzYWJs
ZWQpCisgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKERheUNlbGwuQ2xhc3NOYW1l
RGlzYWJsZWQpOworICAgIGVsc2UKKyAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5yZW1v
dmUoRGF5Q2VsbC5DbGFzc05hbWVEaXNhYmxlZCk7Cit9OworCisvKioKKyAqIEBwYXJhbSB7IWJv
b2xlYW59IHNlbGVjdGVkCisgKi8KK0RheUNlbGwucHJvdG90eXBlLnNldElzSW5DdXJyZW50TW9u
dGggPSBmdW5jdGlvbihzZWxlY3RlZCkgeworICAgIGlmIChzZWxlY3RlZCkKKyAgICAgICAgdGhp
cy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoRGF5Q2VsbC5DbGFzc05hbWVDdXJyZW50TW9udGgpOwor
ICAgIGVsc2UKKyAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoRGF5Q2VsbC5D
bGFzc05hbWVDdXJyZW50TW9udGgpOworfTsKKworLyoqCisgKiBAcGFyYW0geyFib29sZWFufSBz
ZWxlY3RlZAorICovCitEYXlDZWxsLnByb3RvdHlwZS5zZXRJc1RvZGF5ID0gZnVuY3Rpb24oc2Vs
ZWN0ZWQpIHsKKyAgICBpZiAoc2VsZWN0ZWQpCisgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xp
c3QuYWRkKERheUNlbGwuQ2xhc3NOYW1lVG9kYXkpOworICAgIGVsc2UKKyAgICAgICAgdGhpcy5l
bGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoRGF5Q2VsbC5DbGFzc05hbWVUb2RheSk7Cit9OworCisv
KioKKyAqIEBwYXJhbSB7IURheX0gZGF5CisgKi8KK0RheUNlbGwucHJvdG90eXBlLnJlc2V0ID0g
ZnVuY3Rpb24oZGF5KSB7CisgICAgdGhpcy5kYXkgPSBkYXk7CisgICAgdGhpcy5lbGVtZW50LnRl
eHRDb250ZW50ID0gbG9jYWxpemVOdW1iZXIodGhpcy5kYXkuZGF0ZS50b1N0cmluZygpKTsKKyAg
ICB0aGlzLnNob3coKTsKK307CisKKy8qKgorICogQGNvbnN0cnVjdG9yCisgKiBAZXh0ZW5kcyBM
aXN0Q2VsbAorICovCitmdW5jdGlvbiBXZWVrTnVtYmVyQ2VsbCgpIHsKKyAgICBMaXN0Q2VsbC5j
YWxsKHRoaXMpOworICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKFdlZWtOdW1iZXJDZWxs
LkNsYXNzTmFtZVdlZWtOdW1iZXJDZWxsKTsKKyAgICB0aGlzLmVsZW1lbnQuc3R5bGUud2lkdGgg
PSAoV2Vla051bWJlckNlbGwuV2lkdGggLSBXZWVrTnVtYmVyQ2VsbC5SaWdodEJvcmRlcldpZHRo
KSArICJweCI7CisgICAgdGhpcy5lbGVtZW50LnN0eWxlLmhlaWdodCA9IFdlZWtOdW1iZXJDZWxs
LkhlaWdodCArICJweCI7CisgICAgLyoqCisgICAgICogQHR5cGUgez9XZWVrfQorICAgICAqLwor
ICAgIHRoaXMud2VlayA9IG51bGw7Cit9OworCitXZWVrTnVtYmVyQ2VsbC5wcm90b3R5cGUgPSBP
YmplY3QuY3JlYXRlKExpc3RDZWxsLnByb3RvdHlwZSk7CisKK1dlZWtOdW1iZXJDZWxsLldpZHRo
ID0gNDg7CitXZWVrTnVtYmVyQ2VsbC5IZWlnaHQgPSBEYXlDZWxsLkhlaWdodDsKK1dlZWtOdW1i
ZXJDZWxsLlJpZ2h0Qm9yZGVyV2lkdGggPSAxOworV2Vla051bWJlckNlbGwuQ2xhc3NOYW1lV2Vl
a051bWJlckNlbGwgPSAid2Vlay1udW1iZXItY2VsbCI7CitXZWVrTnVtYmVyQ2VsbC5DbGFzc05h
bWVIaWdobGlnaHRlZCA9ICJoaWdobGlnaHRlZCI7CitXZWVrTnVtYmVyQ2VsbC5DbGFzc05hbWVE
aXNhYmxlZCA9ICJkaXNhYmxlZCI7CisKK1dlZWtOdW1iZXJDZWxsLl9yZWN5Y2xlQmluID0gW107
CisKKy8qKgorICogQHJldHVybiB7IUFycmF5fQorICogQG92ZXJyaWRlCisgKi8KK1dlZWtOdW1i
ZXJDZWxsLnByb3RvdHlwZS5fcmVjeWNsZUJpbiA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBX
ZWVrTnVtYmVyQ2VsbC5fcmVjeWNsZUJpbjsKK307CisKKy8qKgorICogQHJldHVybiB7IVdlZWtO
dW1iZXJDZWxsfQorICovCitXZWVrTnVtYmVyQ2VsbC5yZWN5Y2xlT3JDcmVhdGUgPSBmdW5jdGlv
bigpIHsKKyAgICByZXR1cm4gV2Vla051bWJlckNlbGwuX3JlY3ljbGVCaW4ucG9wKCkgfHwgbmV3
IFdlZWtOdW1iZXJDZWxsKCk7Cit9OworCisvKioKKyAqIEBwYXJhbSB7IVdlZWt9IHdlZWsKKyAq
LworV2Vla051bWJlckNlbGwucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24od2VlaykgeworICAg
IHRoaXMud2VlayA9IHdlZWs7CisgICAgdGhpcy5lbGVtZW50LnRleHRDb250ZW50ID0gbG9jYWxp
emVOdW1iZXIodGhpcy53ZWVrLndlZWsudG9TdHJpbmcoKSk7CisgICAgdGhpcy5zaG93KCk7Cit9
OworCisvKioKKyAqIEBvdmVycmlkZQorICovCitXZWVrTnVtYmVyQ2VsbC5wcm90b3R5cGUudGhy
b3dBd2F5ID0gZnVuY3Rpb24oKSB7CisgICAgTGlzdENlbGwucHJvdG90eXBlLnRocm93QXdheS5j
YWxsKHRoaXMpOworICAgIHRoaXMud2VlayA9IG51bGw7Cit9OworCitXZWVrTnVtYmVyQ2VsbC5w
cm90b3R5cGUuc2V0SGlnaGxpZ2h0ZWQgPSBmdW5jdGlvbihoaWdobGlnaHRlZCkgeworICAgIGlm
IChoaWdobGlnaHRlZCkKKyAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoV2Vla051
bWJlckNlbGwuQ2xhc3NOYW1lSGlnaGxpZ2h0ZWQpOworICAgIGVsc2UKKyAgICAgICAgdGhpcy5l
bGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoV2Vla051bWJlckNlbGwuQ2xhc3NOYW1lSGlnaGxpZ2h0
ZWQpOworfTsKKworV2Vla051bWJlckNlbGwucHJvdG90eXBlLnNldERpc2FibGVkID0gZnVuY3Rp
b24oZGlzYWJsZWQpIHsKKyAgICBpZiAoZGlzYWJsZWQpCisgICAgICAgIHRoaXMuZWxlbWVudC5j
bGFzc0xpc3QuYWRkKFdlZWtOdW1iZXJDZWxsLkNsYXNzTmFtZURpc2FibGVkKTsKKyAgICBlbHNl
CisgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKFdlZWtOdW1iZXJDZWxsLkNs
YXNzTmFtZURpc2FibGVkKTsKK307CisKKy8qKgorICogQGNvbnN0cnVjdG9yCisgKiBAZXh0ZW5k
cyBWaWV3CisgKiBAcGFyYW0geyFib29sZWFufSBoYXNXZWVrTnVtYmVyQ29sdW1uCisgKi8KK2Z1
bmN0aW9uIENhbGVuZGFyVGFibGVIZWFkZXJWaWV3KGhhc1dlZWtOdW1iZXJDb2x1bW4pIHsKKyAg
ICBWaWV3LmNhbGwodGhpcywgY3JlYXRlRWxlbWVudCgiZGl2IiwgImNhbGVuZGFyLXRhYmxlLWhl
YWRlci12aWV3IikpOworICAgIGlmIChoYXNXZWVrTnVtYmVyQ29sdW1uKSB7CisgICAgICAgIHZh
ciB3ZWVrTnVtYmVyTGFiZWxFbGVtZW50ID0gY3JlYXRlRWxlbWVudCgiZGl2IiwgIndlZWstbnVt
YmVyLWxhYmVsIiwgZ2xvYmFsLnBhcmFtcy53ZWVrTGFiZWwpOworICAgICAgICB3ZWVrTnVtYmVy
TGFiZWxFbGVtZW50LnN0eWxlLndpZHRoID0gV2Vla051bWJlckNlbGwuV2lkdGggKyAicHgiOwor
ICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQod2Vla051bWJlckxhYmVsRWxlbWVudCk7
CisgICAgfQorICAgIGZvciAodmFyIGkgPSAwOyBpIDwgRGF5c1BlcldlZWs7ICsraSkgeworICAg
ICAgICB2YXIgd2Vla0RheU51bWJlciA9IChnbG9iYWwucGFyYW1zLndlZWtTdGFydERheSArIGkp
ICUgRGF5c1BlcldlZWs7CisgICAgICAgIHZhciBsYWJlbEVsZW1lbnQgPSBjcmVhdGVFbGVtZW50
KCJkaXYiLCAid2Vlay1kYXktbGFiZWwiLCBnbG9iYWwucGFyYW1zLmRheUxhYmVsc1t3ZWVrRGF5
TnVtYmVyXSk7CisgICAgICAgIGxhYmVsRWxlbWVudC5zdHlsZS53aWR0aCA9IERheUNlbGwuV2lk
dGggKyAicHgiOworICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQobGFiZWxFbGVtZW50
KTsKKyAgICAgICAgaWYgKGdsb2JhbC5wYXJhbXMubG9jYWxlID09PSAiamEiKSB7CisgICAgICAg
ICAgICBpZiAod2Vla0RheU51bWJlciA9PT0gMCkKKyAgICAgICAgICAgICAgICBsYWJlbEVsZW1l
bnQuc3R5bGUuY29sb3IgPSAicmVkIjsKKyAgICAgICAgICAgIGVsc2UgaWYgKHdlZWtEYXlOdW1i
ZXIgPT09IDYpCisgICAgICAgICAgICAgICAgbGFiZWxFbGVtZW50LnN0eWxlLmNvbG9yID0gImJs
dWUiOworICAgICAgICB9CisgICAgfQorfQorCitDYWxlbmRhclRhYmxlSGVhZGVyVmlldy5wcm90
b3R5cGUgPSBPYmplY3QuY3JlYXRlKFZpZXcucHJvdG90eXBlKTsKKworQ2FsZW5kYXJUYWJsZUhl
YWRlclZpZXcuSGVpZ2h0ID0gMjU7CisKKy8qKgorICogQGNvbnN0cnVjdG9yCisgKiBAZXh0ZW5k
cyBMaXN0Q2VsbAorICovCitmdW5jdGlvbiBDYWxlbmRhclJvd0NlbGwoKSB7CisgICAgTGlzdENl
bGwuY2FsbCh0aGlzKTsKKyAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChDYWxlbmRhclJv
d0NlbGwuQ2xhc3NOYW1lQ2FsZW5kYXJSb3dDZWxsKTsKKyAgICB0aGlzLmVsZW1lbnQuc3R5bGUu
aGVpZ2h0ID0gQ2FsZW5kYXJSb3dDZWxsLkhlaWdodCArICJweCI7CisKKyAgICAvKioKKyAgICAg
KiBAdHlwZSB7IUFycmF5fQorICAgICAqIEBwcm90ZWN0ZWQKKyAgICAgKi8KKyAgICB0aGlzLl9k
YXlDZWxscyA9IFtdOworICAgIC8qKgorICAgICAqIEB0eXBlIHshbnVtYmVyfQorICAgICAqLwor
ICAgIHRoaXMucm93ID0gMDsKKyAgICAvKioKKyAgICAgKiBAdHlwZSB7P0NhbGVuZGFyVGFibGVW
aWV3fQorICAgICAqLworICAgIHRoaXMuY2FsZW5kYXJUYWJsZVZpZXcgPSBudWxsOworfQorCitD
YWxlbmRhclJvd0NlbGwucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShMaXN0Q2VsbC5wcm90b3R5
cGUpOworCitDYWxlbmRhclJvd0NlbGwuSGVpZ2h0ID0gRGF5Q2VsbC5IZWlnaHQ7CitDYWxlbmRh
clJvd0NlbGwuQ2xhc3NOYW1lQ2FsZW5kYXJSb3dDZWxsID0gImNhbGVuZGFyLXJvdy1jZWxsIjsK
KworQ2FsZW5kYXJSb3dDZWxsLl9yZWN5Y2xlQmluID0gW107CisKKy8qKgorICogQHJldHVybiB7
IUFycmF5fQorICogQG92ZXJyaWRlCisgKi8KK0NhbGVuZGFyUm93Q2VsbC5wcm90b3R5cGUuX3Jl
Y3ljbGVCaW4gPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gQ2FsZW5kYXJSb3dDZWxsLl9yZWN5
Y2xlQmluOworfTsKKworLyoqCisgKiBAcGFyYW0geyFudW1iZXJ9IHJvdworICogQHBhcmFtIHsh
Q2FsZW5kYXJUYWJsZVZpZXd9IGNhbGVuZGFyVGFibGVWaWV3CisgKi8KK0NhbGVuZGFyUm93Q2Vs
bC5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbihyb3csIGNhbGVuZGFyVGFibGVWaWV3KSB7Cisg
ICAgdGhpcy5yb3cgPSByb3c7CisgICAgdGhpcy5jYWxlbmRhclRhYmxlVmlldyA9IGNhbGVuZGFy
VGFibGVWaWV3OworICAgIGlmICh0aGlzLmNhbGVuZGFyVGFibGVWaWV3Lmhhc1dlZWtOdW1iZXJD
b2x1bW4pIHsKKyAgICAgICAgdmFyIG1pZGRsZURheSA9IHRoaXMuY2FsZW5kYXJUYWJsZVZpZXcu
ZGF5QXRDb2x1bW5BbmRSb3coMywgcm93KTsKKyAgICAgICAgdmFyIHdlZWsgPSBXZWVrLmNyZWF0
ZUZyb21EYXkobWlkZGxlRGF5KTsKKyAgICAgICAgdGhpcy53ZWVrTnVtYmVyQ2VsbCA9IHRoaXMu
Y2FsZW5kYXJUYWJsZVZpZXcucHJlcGFyZU5ld1dlZWtOdW1iZXJDZWxsKHdlZWspOworICAgICAg
ICB0aGlzLndlZWtOdW1iZXJDZWxsLmF0dGFjaFRvKHRoaXMpOworICAgIH0KKyAgICB2YXIgZGF5
ID0gY2FsZW5kYXJUYWJsZVZpZXcuZGF5QXRDb2x1bW5BbmRSb3coMCwgcm93KTsKKyAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IERheXNQZXJXZWVrOyArK2kpIHsKKyAgICAgICAgdmFyIGRheUNlbGwg
PSB0aGlzLmNhbGVuZGFyVGFibGVWaWV3LnByZXBhcmVOZXdEYXlDZWxsKGRheSk7CisgICAgICAg
IGRheUNlbGwuYXR0YWNoVG8odGhpcyk7CisgICAgICAgIHRoaXMuX2RheUNlbGxzLnB1c2goZGF5
Q2VsbCk7CisgICAgICAgIGRheSA9IGRheS5uZXh0KCk7CisgICAgfQorICAgIHRoaXMuc2hvdygp
OworfTsKKworLyoqCisgKiBAb3ZlcnJpZGUKKyAqLworQ2FsZW5kYXJSb3dDZWxsLnByb3RvdHlw
ZS50aHJvd0F3YXkgPSBmdW5jdGlvbigpIHsKKyAgICBMaXN0Q2VsbC5wcm90b3R5cGUudGhyb3dB
d2F5LmNhbGwodGhpcyk7CisgICAgaWYgKHRoaXMud2Vla051bWJlckNlbGwpCisgICAgICAgIHRo
aXMuY2FsZW5kYXJUYWJsZVZpZXcudGhyb3dBd2F5V2Vla051bWJlckNlbGwodGhpcy53ZWVrTnVt
YmVyQ2VsbCk7CisgICAgdGhpcy5fZGF5Q2VsbHMuZm9yRWFjaCh0aGlzLmNhbGVuZGFyVGFibGVW
aWV3LnRocm93QXdheURheUNlbGwsIHRoaXMuY2FsZW5kYXJUYWJsZVZpZXcpOworICAgIHRoaXMu
X2RheUNlbGxzLmxlbmd0aCA9IDA7Cit9OworCisvKioKKyAqIEBjb25zdHJ1Y3RvcgorICogQGV4
dGVuZHMgTGlzdFZpZXcKKyAqIEBwYXJhbSB7IUNhbGVuZGFyUGlja2VyfSBjYWxlbmRhclBpY2tl
cgorICovCitmdW5jdGlvbiBDYWxlbmRhclRhYmxlVmlldyhjYWxlbmRhclBpY2tlcikgeworICAg
IExpc3RWaWV3LmNhbGwodGhpcyk7CisgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ2Fs
ZW5kYXJUYWJsZVZpZXcuQ2xhc3NOYW1lQ2FsZW5kYXJUYWJsZVZpZXcpOworICAgIHRoaXMuZWxl
bWVudC50YWJJbmRleCA9IDA7CisKKyAgICAvKioKKyAgICAgKiBAdHlwZSB7IWJvb2xlYW59Cisg
ICAgICogQGNvbnN0CisgICAgICovCisgICAgdGhpcy5oYXNXZWVrTnVtYmVyQ29sdW1uID0gY2Fs
ZW5kYXJQaWNrZXIudHlwZSA9PT0gIndlZWsiOworICAgIC8qKgorICAgICAqIEB0eXBlIHshQ2Fs
ZW5kYXJQaWNrZXJ9CisgICAgICogQGNvbnN0CisgICAgICovCisgICAgdGhpcy5jYWxlbmRhclBp
Y2tlciA9IGNhbGVuZGFyUGlja2VyOworICAgIC8qKgorICAgICAqIEB0eXBlIHshT2JqZWN0fQor
ICAgICAqIEBjb25zdAorICAgICAqLworICAgIHRoaXMuX2RheUNlbGxzID0ge307CisgICAgdmFy
IGhlYWRlclZpZXcgPSBuZXcgQ2FsZW5kYXJUYWJsZUhlYWRlclZpZXcodGhpcy5oYXNXZWVrTnVt
YmVyQ29sdW1uKTsKKyAgICBoZWFkZXJWaWV3LmF0dGFjaFRvKHRoaXMsIHRoaXMuc2Nyb2xsVmll
dyk7CisKKyAgICBpZiAodGhpcy5oYXNXZWVrTnVtYmVyQ29sdW1uKSB7CisgICAgICAgIHRoaXMu
c2V0V2lkdGgoRGF5Q2VsbC5XaWR0aCAqIERheXNQZXJXZWVrICsgV2Vla051bWJlckNlbGwuV2lk
dGgpOworICAgICAgICAvKioKKyAgICAgICAgICogQHR5cGUgez9BcnJheX0KKyAgICAgICAgICog
QGNvbnN0CisgICAgICAgICAqLworICAgICAgICB0aGlzLl93ZWVrTnVtYmVyQ2VsbHMgPSBbXTsK
KyAgICB9IGVsc2UgeworICAgICAgICB0aGlzLnNldFdpZHRoKERheUNlbGwuV2lkdGggKiBEYXlz
UGVyV2Vlayk7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIEB0eXBlIHshYm9vbGVhbn0K
KyAgICAgKiBAcHJvdGVjdGVkCisgICAgICovCisgICAgdGhpcy5faWdub3JlTW91c2VPdXRVbnRp
bGxOZXh0TW91c2VPdmVyID0gZmFsc2U7CisKKyAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0
ZW5lcigiY2xpY2siLCB0aGlzLm9uQ2xpY2ssIGZhbHNlKTsKKyAgICB0aGlzLmVsZW1lbnQuYWRk
RXZlbnRMaXN0ZW5lcigibW91c2VvdmVyIiwgdGhpcy5vbk1vdXNlT3ZlciwgZmFsc2UpOworICAg
IHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW91dCIsIHRoaXMub25Nb3VzZU91
dCwgZmFsc2UpOworCisgICAgLy8gRGlzYWJsZSBtb3VzZSB3aGVlbCBzY3JvbGxpbmcuCisgICAg
dGhpcy5zY3JvbGxWaWV3LmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V3aGVlbCIs
IHRoaXMuc2Nyb2xsVmlldy5vbk1vdXNlV2hlZWwsIGZhbHNlKTsKK30KKworQ2FsZW5kYXJUYWJs
ZVZpZXcucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShMaXN0Vmlldy5wcm90b3R5cGUpOworCitD
YWxlbmRhclRhYmxlVmlldy5Cb3JkZXJXaWR0aCA9IDE7CitDYWxlbmRhclRhYmxlVmlldy5DbGFz
c05hbWVDYWxlbmRhclRhYmxlVmlldyA9ICJjYWxlbmRhci10YWJsZS12aWV3IjsKKworLyoqCisg
KiBAcGFyYW0geyFudW1iZXJ9IHNjcm9sbE9mZnNldAorICogQHJldHVybiB7IW51bWJlcn0KKyAq
LworQ2FsZW5kYXJUYWJsZVZpZXcucHJvdG90eXBlLnJvd0F0U2Nyb2xsT2Zmc2V0ID0gZnVuY3Rp
b24oc2Nyb2xsT2Zmc2V0KSB7CisgICAgcmV0dXJuIE1hdGguZmxvb3Ioc2Nyb2xsT2Zmc2V0IC8g
Q2FsZW5kYXJSb3dDZWxsLkhlaWdodCk7Cit9OworCisvKioKKyAqIEBwYXJhbSB7IW51bWJlcn0g
cm93CisgKiBAcmV0dXJuIHshbnVtYmVyfQorICovCitDYWxlbmRhclRhYmxlVmlldy5wcm90b3R5
cGUuc2Nyb2xsT2Zmc2V0Rm9yUm93ID0gZnVuY3Rpb24ocm93KSB7CisgICAgcmV0dXJuIHJvdyAq
IENhbGVuZGFyUm93Q2VsbC5IZWlnaHQ7Cit9OworCisvKioKKyAqIEBwYXJhbSB7P0V2ZW50fSBl
dmVudAorICovCitDYWxlbmRhclRhYmxlVmlldy5wcm90b3R5cGUub25DbGljayA9IGZ1bmN0aW9u
KGV2ZW50KSB7CisgICAgaWYgKHRoaXMuaGFzV2Vla051bWJlckNvbHVtbikgeworICAgICAgICB2
YXIgd2Vla051bWJlckNlbGxFbGVtZW50ID0gZW5jbG9zaW5nTm9kZU9yU2VsZldpdGhDbGFzcyhl
dmVudC50YXJnZXQsIFdlZWtOdW1iZXJDZWxsLkNsYXNzTmFtZVdlZWtOdW1iZXJDZWxsKTsKKyAg
ICAgICAgaWYgKHdlZWtOdW1iZXJDZWxsRWxlbWVudCkgeworICAgICAgICAgICAgdmFyIHdlZWtO
dW1iZXJDZWxsID0gd2Vla051bWJlckNlbGxFbGVtZW50LiR2aWV3OworICAgICAgICAgICAgdGhp
cy5jYWxlbmRhclBpY2tlci5zZWxlY3RSYW5nZUNvbnRhaW5pbmdEYXkod2Vla051bWJlckNlbGwu
d2Vlay5maXJzdERheSgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0K
KyAgICB2YXIgZGF5Q2VsbEVsZW1lbnQgPSBlbmNsb3NpbmdOb2RlT3JTZWxmV2l0aENsYXNzKGV2
ZW50LnRhcmdldCwgRGF5Q2VsbC5DbGFzc05hbWVEYXlDZWxsKTsKKyAgICBpZiAoIWRheUNlbGxF
bGVtZW50KQorICAgICAgICByZXR1cm47CisgICAgdmFyIGRheUNlbGwgPSBkYXlDZWxsRWxlbWVu
dC4kdmlldzsKKyAgICB0aGlzLmNhbGVuZGFyUGlja2VyLnNlbGVjdFJhbmdlQ29udGFpbmluZ0Rh
eShkYXlDZWxsLmRheSk7Cit9OworCisvKioKKyAqIEBwYXJhbSB7P0V2ZW50fSBldmVudAorICov
CitDYWxlbmRhclRhYmxlVmlldy5wcm90b3R5cGUub25Nb3VzZU92ZXIgPSBmdW5jdGlvbihldmVu
dCkgeworICAgIGlmICh0aGlzLmhhc1dlZWtOdW1iZXJDb2x1bW4pIHsKKyAgICAgICAgdmFyIHdl
ZWtOdW1iZXJDZWxsRWxlbWVudCA9IGVuY2xvc2luZ05vZGVPclNlbGZXaXRoQ2xhc3MoZXZlbnQu
dGFyZ2V0LCBXZWVrTnVtYmVyQ2VsbC5DbGFzc05hbWVXZWVrTnVtYmVyQ2VsbCk7CisgICAgICAg
IGlmICh3ZWVrTnVtYmVyQ2VsbEVsZW1lbnQpIHsKKyAgICAgICAgICAgIHZhciB3ZWVrTnVtYmVy
Q2VsbCA9IHdlZWtOdW1iZXJDZWxsRWxlbWVudC4kdmlldzsKKyAgICAgICAgICAgIHRoaXMuY2Fs
ZW5kYXJQaWNrZXIuaGlnaGxpZ2h0UmFuZ2VDb250YWluaW5nRGF5KHdlZWtOdW1iZXJDZWxsLndl
ZWsuZmlyc3REYXkoKSk7CisgICAgICAgICAgICB0aGlzLl9pZ25vcmVNb3VzZU91dFVudGlsbE5l
eHRNb3VzZU92ZXIgPSBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
IH0KKyAgICB2YXIgZGF5Q2VsbEVsZW1lbnQgPSBlbmNsb3NpbmdOb2RlT3JTZWxmV2l0aENsYXNz
KGV2ZW50LnRhcmdldCwgRGF5Q2VsbC5DbGFzc05hbWVEYXlDZWxsKTsKKyAgICBpZiAoIWRheUNl
bGxFbGVtZW50KQorICAgICAgICByZXR1cm47CisgICAgdmFyIGRheUNlbGwgPSBkYXlDZWxsRWxl
bWVudC4kdmlldzsKKyAgICB0aGlzLmNhbGVuZGFyUGlja2VyLmhpZ2hsaWdodFJhbmdlQ29udGFp
bmluZ0RheShkYXlDZWxsLmRheSk7CisgICAgdGhpcy5faWdub3JlTW91c2VPdXRVbnRpbGxOZXh0
TW91c2VPdmVyID0gZmFsc2U7Cit9OworCisvKioKKyAqIEBwYXJhbSB7P0V2ZW50fSBldmVudAor
ICovCitDYWxlbmRhclRhYmxlVmlldy5wcm90b3R5cGUub25Nb3VzZU91dCA9IGZ1bmN0aW9uKGV2
ZW50KSB7CisgICAgaWYgKHRoaXMuX2lnbm9yZU1vdXNlT3V0VW50aWxsTmV4dE1vdXNlT3ZlcikK
KyAgICAgICAgcmV0dXJuOworICAgIHZhciBkYXlDZWxsRWxlbWVudCA9IGVuY2xvc2luZ05vZGVP
clNlbGZXaXRoQ2xhc3MoZXZlbnQudGFyZ2V0LCBEYXlDZWxsLkNsYXNzTmFtZURheUNlbGwpOwor
ICAgIGlmICghZGF5Q2VsbEVsZW1lbnQpIHsKKyAgICAgICAgdGhpcy5jYWxlbmRhclBpY2tlci5o
aWdobGlnaHRSYW5nZUNvbnRhaW5pbmdEYXkobnVsbCk7CisgICAgfQorfTsKKworLyoqCisgKiBA
cGFyYW0geyFudW1iZXJ9IHJvdworICogQHJldHVybiB7IUNhbGVuZGFyUm93Q2VsbH0KKyAqLwor
Q2FsZW5kYXJUYWJsZVZpZXcucHJvdG90eXBlLnByZXBhcmVOZXdDZWxsID0gZnVuY3Rpb24ocm93
KSB7CisgICAgdmFyIGNlbGwgPSBDYWxlbmRhclJvd0NlbGwuX3JlY3ljbGVCaW4ucG9wKCkgfHwg
bmV3IENhbGVuZGFyUm93Q2VsbCgpOworICAgIGNlbGwucmVzZXQocm93LCB0aGlzKTsKKyAgICBy
ZXR1cm4gY2VsbDsKK307CisKKy8qKgorICogQHJldHVybiB7IW51bWJlcn0gSGVpZ2h0IGluIHBp
eGVscy4KKyAqLworQ2FsZW5kYXJUYWJsZVZpZXcucHJvdG90eXBlLmhlaWdodCA9IGZ1bmN0aW9u
KCkgeworICAgIHJldHVybiB0aGlzLnNjcm9sbFZpZXcuaGVpZ2h0KCkgKyBDYWxlbmRhclRhYmxl
SGVhZGVyVmlldy5IZWlnaHQgKyBDYWxlbmRhclRhYmxlVmlldy5Cb3JkZXJXaWR0aCAqIDI7Cit9
OworCisvKioKKyAqIEBwYXJhbSB7IW51bWJlcn0gaGVpZ2h0IEhlaWdodCBpbiBwaXhlbHMuCisg
Ki8KK0NhbGVuZGFyVGFibGVWaWV3LnByb3RvdHlwZS5zZXRIZWlnaHQgPSBmdW5jdGlvbihoZWln
aHQpIHsKKyAgICB0aGlzLnNjcm9sbFZpZXcuc2V0SGVpZ2h0KGhlaWdodCAtIENhbGVuZGFyVGFi
bGVIZWFkZXJWaWV3LkhlaWdodCAtIENhbGVuZGFyVGFibGVWaWV3LkJvcmRlcldpZHRoICogMik7
Cit9OworCisvKioKKyAqIEBwYXJhbSB7IU1vbnRofSBtb250aAorICogQHBhcmFtIHshYm9vbGVh
bn0gYW5pbWF0ZQorICovCitDYWxlbmRhclRhYmxlVmlldy5wcm90b3R5cGUuc2Nyb2xsVG9Nb250
aCA9IGZ1bmN0aW9uKG1vbnRoLCBhbmltYXRlKSB7CisgICAgdmFyIHJvd0ZvckZpcnN0RGF5SW5N
b250aCA9IHRoaXMuY29sdW1uQW5kUm93Rm9yRGF5KG1vbnRoLmZpcnN0RGF5KCkpLnJvdzsKKyAg
ICB0aGlzLnNjcm9sbFZpZXcuc2Nyb2xsVG8odGhpcy5zY3JvbGxPZmZzZXRGb3JSb3cocm93Rm9y
Rmlyc3REYXlJbk1vbnRoKSwgYW5pbWF0ZSk7Cit9OworCisvKioKKyAqIEBwYXJhbSB7IW51bWJl
cn0gY29sdW1uCisgKiBAcGFyYW0geyFudW1iZXJ9IHJvdworICogQHJldHVybiB7IURheX0KKyAq
LworQ2FsZW5kYXJUYWJsZVZpZXcucHJvdG90eXBlLmRheUF0Q29sdW1uQW5kUm93ID0gZnVuY3Rp
b24oY29sdW1uLCByb3cpIHsKKyAgICB2YXIgZGF5c1NpbmNlTWluaW11bSA9IHJvdyAqIERheXNQ
ZXJXZWVrICsgY29sdW1uICsgZ2xvYmFsLnBhcmFtcy53ZWVrU3RhcnREYXkgLSBDYWxlbmRhclRh
YmxlVmlldy5fTWluaW11bURheVdlZWtEYXk7CisgICAgcmV0dXJuIERheS5jcmVhdGVGcm9tVmFs
dWUoZGF5c1NpbmNlTWluaW11bSAqIE1pbGxpc2Vjb25kc1BlckRheSArIENhbGVuZGFyVGFibGVW
aWV3Ll9NaW5pbXVtRGF5VmFsdWUpOworfTsKKworQ2FsZW5kYXJUYWJsZVZpZXcuX01pbmltdW1E
YXlWYWx1ZSA9IERheS5NaW5pbXVtLnZhbHVlT2YoKTsKK0NhbGVuZGFyVGFibGVWaWV3Ll9NaW5p
bXVtRGF5V2Vla0RheSA9IERheS5NaW5pbXVtLndlZWtEYXkoKTsKKworLyoqCisgKiBAcGFyYW0g
eyFEYXl9IGRheQorICogQHJldHVybiB7IU9iamVjdH0KKyAqLworQ2FsZW5kYXJUYWJsZVZpZXcu
cHJvdG90eXBlLmNvbHVtbkFuZFJvd0ZvckRheSA9IGZ1bmN0aW9uKGRheSkgeworICAgIHZhciBk
YXlzU2luY2VNaW5pbXVtID0gKGRheS52YWx1ZU9mKCkgLSBDYWxlbmRhclRhYmxlVmlldy5fTWlu
aW11bURheVZhbHVlKSAvIE1pbGxpc2Vjb25kc1BlckRheTsKKyAgICB2YXIgb2Zmc2V0ID0gZGF5
c1NpbmNlTWluaW11bSArIENhbGVuZGFyVGFibGVWaWV3Ll9NaW5pbXVtRGF5V2Vla0RheSAtIGds
b2JhbC5wYXJhbXMud2Vla1N0YXJ0RGF5OworICAgIHZhciByb3cgPSBNYXRoLmZsb29yKG9mZnNl
dCAvIERheXNQZXJXZWVrKTsKKyAgICB2YXIgY29sdW1uID0gb2Zmc2V0IC0gcm93ICogRGF5c1Bl
cldlZWs7CisgICAgcmV0dXJuIHsKKyAgICAgICAgY29sdW1uOiBjb2x1bW4sCisgICAgICAgIHJv
dzogcm93CisgICAgfTsKK307CisKK0NhbGVuZGFyVGFibGVWaWV3LnByb3RvdHlwZS51cGRhdGVD
ZWxscyA9IGZ1bmN0aW9uKCkgeworICAgIExpc3RWaWV3LnByb3RvdHlwZS51cGRhdGVDZWxscy5j
YWxsKHRoaXMpOworCisgICAgdmFyIHNlbGVjdGlvbiA9IHRoaXMuY2FsZW5kYXJQaWNrZXIuc2Vs
ZWN0aW9uKCk7CisgICAgdmFyIGZpcnN0RGF5SW5TZWxlY3Rpb247CisgICAgdmFyIGxhc3REYXlJ
blNlbGVjdGlvbjsKKyAgICBpZiAoc2VsZWN0aW9uKSB7CisgICAgICAgIGZpcnN0RGF5SW5TZWxl
Y3Rpb24gPSBzZWxlY3Rpb24uZmlyc3REYXkoKS52YWx1ZU9mKCk7CisgICAgICAgIGxhc3REYXlJ
blNlbGVjdGlvbiA9IHNlbGVjdGlvbi5sYXN0RGF5KCkudmFsdWVPZigpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGZpcnN0RGF5SW5TZWxlY3Rpb24gPSBJbmZpbml0eTsKKyAgICAgICAgbGFzdERh
eUluU2VsZWN0aW9uID0gSW5maW5pdHk7CisgICAgfQorICAgIHZhciBoaWdobGlnaHQgPSB0aGlz
LmNhbGVuZGFyUGlja2VyLmhpZ2hsaWdodCgpOworICAgIHZhciBmaXJzdERheUluSGlnaGxpZ2h0
OworICAgIHZhciBsYXN0RGF5SW5IaWdobGlnaHQ7CisgICAgaWYgKGhpZ2hsaWdodCkgeworICAg
ICAgICBmaXJzdERheUluSGlnaGxpZ2h0ID0gaGlnaGxpZ2h0LmZpcnN0RGF5KCkudmFsdWVPZigp
OworICAgICAgICBsYXN0RGF5SW5IaWdobGlnaHQgPSBoaWdobGlnaHQubGFzdERheSgpLnZhbHVl
T2YoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBmaXJzdERheUluSGlnaGxpZ2h0ID0gSW5maW5p
dHk7CisgICAgICAgIGxhc3REYXlJbkhpZ2hsaWdodCA9IEluZmluaXR5OworICAgIH0KKyAgICB2
YXIgY3VycmVudE1vbnRoID0gdGhpcy5jYWxlbmRhclBpY2tlci5jdXJyZW50TW9udGgoKTsKKyAg
ICB2YXIgZmlyc3REYXlJbkN1cnJlbnRNb250aCA9IGN1cnJlbnRNb250aC5maXJzdERheSgpLnZh
bHVlT2YoKTsKKyAgICB2YXIgbGFzdERheUluQ3VycmVudE1vbnRoID0gY3VycmVudE1vbnRoLmxh
c3REYXkoKS52YWx1ZU9mKCk7CisgICAgZm9yICh2YXIgZGF5U3RyaW5nIGluIHRoaXMuX2RheUNl
bGxzKSB7CisgICAgICAgIHZhciBkYXlDZWxsID0gdGhpcy5fZGF5Q2VsbHNbZGF5U3RyaW5nXTsK
KyAgICAgICAgdmFyIGRheSA9IGRheUNlbGwuZGF5OworICAgICAgICBkYXlDZWxsLnNldElzVG9k
YXkoRGF5LmNyZWF0ZUZyb21Ub2RheSgpLmVxdWFscyhkYXkpKTsKKyAgICAgICAgZGF5Q2VsbC5z
ZXRTZWxlY3RlZChkYXkgPj0gZmlyc3REYXlJblNlbGVjdGlvbiAmJiBkYXkgPD0gbGFzdERheUlu
U2VsZWN0aW9uKTsKKyAgICAgICAgZGF5Q2VsbC5zZXRIaWdobGlnaHRlZChkYXkgPj0gZmlyc3RE
YXlJbkhpZ2hsaWdodCAmJiBkYXkgPD0gbGFzdERheUluSGlnaGxpZ2h0KTsKKyAgICAgICAgZGF5
Q2VsbC5zZXRJc0luQ3VycmVudE1vbnRoKGRheSA+PSBmaXJzdERheUluQ3VycmVudE1vbnRoICYm
IGRheSA8PSBsYXN0RGF5SW5DdXJyZW50TW9udGgpOworICAgICAgICBkYXlDZWxsLnNldERpc2Fi
bGVkKCF0aGlzLmNhbGVuZGFyUGlja2VyLmlzVmFsaWREYXkoZGF5KSk7CisgICAgfQorICAgIGlm
ICh0aGlzLmhhc1dlZWtOdW1iZXJDb2x1bW4pIHsKKyAgICAgICAgZm9yICh2YXIgd2Vla1N0cmlu
ZyBpbiB0aGlzLl93ZWVrTnVtYmVyQ2VsbHMpIHsKKyAgICAgICAgICAgIHZhciB3ZWVrTnVtYmVy
Q2VsbCA9IHRoaXMuX3dlZWtOdW1iZXJDZWxsc1t3ZWVrU3RyaW5nXTsKKyAgICAgICAgICAgIHZh
ciB3ZWVrID0gd2Vla051bWJlckNlbGwud2VlazsKKyAgICAgICAgICAgIHdlZWtOdW1iZXJDZWxs
LnNldFNlbGVjdGVkKHNlbGVjdGlvbiAmJiBzZWxlY3Rpb24uZXF1YWxzKHdlZWspKTsKKyAgICAg
ICAgICAgIHdlZWtOdW1iZXJDZWxsLnNldEhpZ2hsaWdodGVkKGhpZ2hsaWdodCAmJiBoaWdobGln
aHQuZXF1YWxzKHdlZWspKTsKKyAgICAgICAgICAgIHdlZWtOdW1iZXJDZWxsLnNldERpc2FibGVk
KCF0aGlzLmNhbGVuZGFyUGlja2VyLmlzVmFsaWQod2VlaykpOworICAgICAgICB9CisgICAgfQor
fTsKKworLyoqCisgKiBAcGFyYW0geyFEYXl9IGRheQorICogQHJldHVybiB7IURheUNlbGx9Cisg
Ki8KK0NhbGVuZGFyVGFibGVWaWV3LnByb3RvdHlwZS5wcmVwYXJlTmV3RGF5Q2VsbCA9IGZ1bmN0
aW9uKGRheSkgeworICAgIHZhciBkYXlDZWxsID0gRGF5Q2VsbC5yZWN5Y2xlT3JDcmVhdGUoKTsK
KyAgICBkYXlDZWxsLnJlc2V0KGRheSk7CisgICAgdGhpcy5fZGF5Q2VsbHNbZGF5Q2VsbC5kYXku
dG9TdHJpbmcoKV0gPSBkYXlDZWxsOworICAgIHJldHVybiBkYXlDZWxsOworfTsKKworLyoqCisg
KiBAcGFyYW0geyFXZWVrfSB3ZWVrCisgKiBAcmV0dXJuIHshV2Vla051bWJlckNlbGx9CisgKi8K
K0NhbGVuZGFyVGFibGVWaWV3LnByb3RvdHlwZS5wcmVwYXJlTmV3V2Vla051bWJlckNlbGwgPSBm
dW5jdGlvbih3ZWVrKSB7CisgICAgdmFyIHdlZWtOdW1iZXJDZWxsID0gV2Vla051bWJlckNlbGwu
cmVjeWNsZU9yQ3JlYXRlKCk7CisgICAgd2Vla051bWJlckNlbGwucmVzZXQod2Vlayk7CisgICAg
dGhpcy5fd2Vla051bWJlckNlbGxzW3dlZWtOdW1iZXJDZWxsLndlZWsudG9TdHJpbmcoKV0gPSB3
ZWVrTnVtYmVyQ2VsbDsKKyAgICByZXR1cm4gd2Vla051bWJlckNlbGw7Cit9OworCisvKioKKyAq
IEBwYXJhbSB7IURheUNlbGx9IGRheUNlbGwKKyAqLworQ2FsZW5kYXJUYWJsZVZpZXcucHJvdG90
eXBlLnRocm93QXdheURheUNlbGwgPSBmdW5jdGlvbihkYXlDZWxsKSB7CisgICAgZGVsZXRlIHRo
aXMuX2RheUNlbGxzW2RheUNlbGwuZGF5LnRvU3RyaW5nKCldOworICAgIGRheUNlbGwudGhyb3dB
d2F5KCk7Cit9OworCisvKioKKyAqIEBwYXJhbSB7IVdlZWtOdW1iZXJDZWxsfSB3ZWVrTnVtYmVy
Q2VsbAorICovCitDYWxlbmRhclRhYmxlVmlldy5wcm90b3R5cGUudGhyb3dBd2F5V2Vla051bWJl
ckNlbGwgPSBmdW5jdGlvbih3ZWVrTnVtYmVyQ2VsbCkgeworICAgIGRlbGV0ZSB0aGlzLl93ZWVr
TnVtYmVyQ2VsbHNbd2Vla051bWJlckNlbGwud2Vlay50b1N0cmluZygpXTsKKyAgICB3ZWVrTnVt
YmVyQ2VsbC50aHJvd0F3YXkoKTsKK307CisKKy8qKgorICogQGNvbnN0cnVjdG9yCiAgKiBAcGFy
YW0geyFFbGVtZW50fSBlbGVtZW50CiAgKiBAcGFyYW0geyFPYmplY3R9IGNvbmZpZwogICovCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>190714</attachid>
            <date>2013-02-28 06:41:44 -0800</date>
            <delta_ts>2013-02-28 22:54:15 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-110970-20130228233756.patch</filename>
            <type>text/plain</type>
            <size>21250</size>
            <attacher name="Keishi Hattori">keishi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ0Mjk5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2M5ODA2NWIwMDZiNmE1
NmFjOWE1MmJhZWE5YTJkM2NlZTA4ZTBmMC4uZGY5NWQ1NmVlZWE4YzlkNjZkNjQzMWQ1N2RlNTJl
NjI0MzYxNGIxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU0IEBACisyMDEzLTAyLTI3ICBLZWlz
aGkgSGF0dG9yaSAgPGtlaXNoaUB3ZWJraXQub3JnPgorCisgICAgICAgIEFkZCBjYWxlbmRhciB0
YWJsZSB2aWV3IGZvciB0aGUgbmV3IGNhbGVuZGFyIHBpY2tlcgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEwOTcwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIGNhbGVuZGFyIHRhYmxlIHRoYXQgd2ls
bCBiZSB1c2VkIGluIHRoZSBuZXcgY2FsZW5kYXIgcGlja2VyIChCdWcgMTA5NDM5KS4KKworICAg
ICAgICBObyBuZXcgdGVzdHMuIENvZGUgaXMgbm90IHVzZWQgeWV0LgorCisgICAgICAgICogUmVz
b3VyY2VzL3BhZ2Vwb3B1cHMvY2FsZW5kYXJQaWNrZXIuanM6CisgICAgICAgIChEYXlDZWxsKTog
Q2VsbCB3aGljaCByZXByZXNlbnRzIG9uZSBkYXkgaW4gdGhlIGNhbGVuZGFyLgorICAgICAgICAo
RGF5Q2VsbC5yZWN5Y2xlT3JDcmVhdGUpOgorICAgICAgICAoRGF5Q2VsbC5wcm90b3R5cGUuX3Jl
Y3ljbGVCaW4pOgorICAgICAgICAoRGF5Q2VsbC5wcm90b3R5cGUudGhyb3dBd2F5KToKKyAgICAg
ICAgKERheUNlbGwucHJvdG90eXBlLnNldEhpZ2hsaWdodGVkKTogU2V0cyB0aGUgaGlnaGxpZ2h0
ZWQgY2xhc3Mgb24gdGhlIGVsZW1lbnQuCisgICAgICAgIChEYXlDZWxsLnByb3RvdHlwZS5zZXRE
aXNhYmxlZCk6IFNldHMgdGhlIGRpc2FibGVkIGNsYXNzIG9uIHRoZSBlbGVtZW50LgorICAgICAg
ICAoRGF5Q2VsbC5wcm90b3R5cGUuc2V0SXNJbkN1cnJlbnRNb250aCk6IFNldHMgdGhlIGN1cnJl
bnQtbW9udGggY2xhc3Mgb24gdGhlIGVsZW1lbnQuCisgICAgICAgIChEYXlDZWxsLnByb3RvdHlw
ZS5zZXRJc1RvZGF5KTogU2V0cyB0aGUgdG9kYXkgY2xhc3Mgb24gdGhlIGVsZW1lbnQuCisgICAg
ICAgIChEYXlDZWxsLnByb3RvdHlwZS5yZXNldCk6IFJlc2V0cyB0aGUgZGF5IGNlbGwgdG8gYmUg
cmV1c2VkLgorICAgICAgICAoV2Vla051bWJlckNlbGwpOiBDZWxsIHVzZWQgZm9yIHRoZSB3ZWVr
IG51bWJlciBjb2x1bW4uCisgICAgICAgIChXZWVrTnVtYmVyQ2VsbC5wcm90b3R5cGUuX3JlY3lj
bGVCaW4pOgorICAgICAgICAoV2Vla051bWJlckNlbGwucmVjeWNsZU9yQ3JlYXRlKToKKyAgICAg
ICAgKFdlZWtOdW1iZXJDZWxsLnByb3RvdHlwZS5yZXNldCk6CisgICAgICAgIChXZWVrTnVtYmVy
Q2VsbC5wcm90b3R5cGUudGhyb3dBd2F5KToKKyAgICAgICAgKFdlZWtOdW1iZXJDZWxsLnByb3Rv
dHlwZS5zZXRIaWdobGlnaHRlZCk6IFNldHMgdGhlIGhpZ2hsaWdodGVkIGNsYXNzIG9uIHRoZSBl
bGVtZW50LgorICAgICAgICAoV2Vla051bWJlckNlbGwucHJvdG90eXBlLnNldERpc2FibGVkKTog
U2V0cyB0aGUgZGlzYWJsZWQgY2xhc3Mgb24gdGhlIGVsZW1lbnQuCisgICAgICAgIChDYWxlbmRh
clRhYmxlSGVhZGVyVmlldyk6IEhlYWRlciBmb3IgdGhlIGNhbGVuZGFyIHRhYmxlLiBDb250YWlu
cyB0aGUgY29sdW1uIGxhYmVscy4KKyAgICAgICAgKENhbGVuZGFyUm93Q2VsbCk6IFJvdyBjb250
YWluaW5nIGRheSBjZWxscyBhbmQgbWF5YmUgYSB3ZWVrIG51bWJlciBjZWxsLgorICAgICAgICAo
Q2FsZW5kYXJSb3dDZWxsLnByb3RvdHlwZS5fcmVjeWNsZUJpbik6CisgICAgICAgIChDYWxlbmRh
clJvd0NlbGwucHJvdG90eXBlLnJlc2V0KToKKyAgICAgICAgKENhbGVuZGFyUm93Q2VsbC5wcm90
b3R5cGUudGhyb3dBd2F5KToKKyAgICAgICAgKENhbGVuZGFyVGFibGVWaWV3KTogQSBsaXN0IHZp
ZXcgc2hvd2luZyBhIGdyaWQgb2YgZGF5cy4KKyAgICAgICAgKENhbGVuZGFyVGFibGVWaWV3LnBy
b3RvdHlwZS5yb3dBdFNjcm9sbE9mZnNldCk6IFJldHVybnMgdGhlIHJvdyBudW1iZXIgY3VycmVu
dGx5IGF0IHRoZSBzY3JvbGwgb2Zmc2V0LgorICAgICAgICAoQ2FsZW5kYXJUYWJsZVZpZXcucHJv
dG90eXBlLnNjcm9sbE9mZnNldEZvclJvdyk6IFJldHVybnMgdGhlIGN1cnJlbnQgc2Nyb2xsIG9m
ZnNldCBmb3IgdGhlIGdpdmVuIHJvdy4KKyAgICAgICAgKENhbGVuZGFyVGFibGVWaWV3LnByb3Rv
dHlwZS5vbkNsaWNrKTogSWYgdGhlIGNsaWNrIGlzIG9uIGEgRGF5Q2VsbCBvciBXZWVrTnVtYmVy
Q2VsbCwgc2VsZWN0IHRoZSBhcHByb3ByaWF0ZSBkYXRlIHJhbmdlLgorICAgICAgICAoQ2FsZW5k
YXJUYWJsZVZpZXcucHJvdG90eXBlLm9uTW91c2VPdmVyKTogSWYgdGhlIGNsaWNrIGlzIG9uIGEg
RGF5Q2VsbCBvciBXZWVrTnVtYmVyQ2VsbCwgaGlnaGxpZ2h0IHRoZSBhcHByb3ByaWF0ZSBkYXRl
IHJhbmdlLgorICAgICAgICAoQ2FsZW5kYXJUYWJsZVZpZXcucHJvdG90eXBlLm9uTW91c2VPdXQp
OgorICAgICAgICAoQ2FsZW5kYXJUYWJsZVZpZXcucHJvdG90eXBlLnByZXBhcmVOZXdDZWxsKTog
UHJlcGFyZXMgYSBuZXcgcm93IGNlbGwgYnkgcmVjeWNsaW5nIG9yIGNyZWF0aW5nIGEgbmV3IG9u
ZS4KKyAgICAgICAgKENhbGVuZGFyVGFibGVWaWV3LnByb3RvdHlwZS5oZWlnaHQpOiBSZXR1cm5z
IHRoZSBoZWlnaHQgb2YgdGhlIHZpZXcgaW4gcGl4ZWxzLgorICAgICAgICAoQ2FsZW5kYXJUYWJs
ZVZpZXcucHJvdG90eXBlLnNldEhlaWdodCk6IFNldHMgdGhlIGhlaWdodCBvZiB0aGUgdmlldyBp
biBwaXhlbHMuCisgICAgICAgIChDYWxlbmRhclRhYmxlVmlldy5wcm90b3R5cGUuc2Nyb2xsVG9N
b250aCk6IFNjcm9sbHMgdG8gcmV2ZWFsIHRoZSBnaXZlbiBtb250aC4KKyAgICAgICAgKENhbGVu
ZGFyVGFibGVWaWV3LnByb3RvdHlwZS5kYXlBdENvbHVtbkFuZFJvdyk6IERheSBhdCBhIGdpdmVu
IGNvbHVtbiBhbmQgcm93LiBDb2x1bW4gbnVtYmVyIGRvZXNuJ3QgY291bnQgd2VlayBudW1iZXIg
Y29sdW1uLgorICAgICAgICAoQ2FsZW5kYXJUYWJsZVZpZXcucHJvdG90eXBlLmNvbHVtbkFuZFJv
d0ZvckRheSk6IENvbHVtbiBhbmQgcm93IGZvciB0aGUgZ2l2ZW4gZGF5LgorICAgICAgICAoQ2Fs
ZW5kYXJUYWJsZVZpZXcucHJvdG90eXBlLnVwZGF0ZUNlbGxzKTogVXBkYXRlIHRoZSBwb3NpdGlv
biBhbmQgYXBwZWFyYW5jZSBvZiB0aGUgY2VsbC5zCisgICAgICAgIChDYWxlbmRhclRhYmxlVmll
dy5wcm90b3R5cGUucHJlcGFyZU5ld0RheUNlbGwpOiBQcmVwYXJlcyBhIG5ldyBkYXkgY2VsbC4g
VGhlIGNlbGwgaXMgcmVnaXN0ZXJlZCB0byB0aGlzLl9kYXlDZWxscy4KKyAgICAgICAgKENhbGVu
ZGFyVGFibGVWaWV3LnByb3RvdHlwZS5wcmVwYXJlTmV3V2Vla051bWJlckNlbGwpOiBQcmVwYXJl
cyBhIG5ldyB3ZWVrIG51bWJlciBjZWxsLiBUaGUgY2VsbCBpcyByZWdpc3RlcmVkIHRvIHRoaXMu
X3dlZWtOdW1iZXJDZWxscy4KKyAgICAgICAgKENhbGVuZGFyVGFibGVWaWV3LnByb3RvdHlwZS50
aHJvd0F3YXlEYXlDZWxsKTogVGhlIGNlbGwgaXMgdW5yZWdpc3RlcmVkIGZyb20gdGhpcy5fZGF5
Q2VsbHMuCisgICAgICAgIChDYWxlbmRhclRhYmxlVmlldy5wcm90b3R5cGUudGhyb3dBd2F5V2Vl
a051bWJlckNlbGwpOiBUaGUgY2VsbCBpcyB1bnJlZ2lzdGVyZWQgZnJvbSB0aGlzLl93ZWVrTnVt
YmVyQ2VsbHMuCisKIDIwMTMtMDItMjggIEtlaXNoaSBIYXR0b3JpICA8a2Vpc2hpQHdlYmtpdC5v
cmc+CiAKICAgICAgICAgQWRkIGNhbGVuZGFyIGhlYWRlciBmb3IgbmV3IGNhbGVuZGFyIHBpY2tl
cgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUmVzb3VyY2VzL3BhZ2Vwb3B1cHMvY2FsZW5k
YXJQaWNrZXIuanMgYi9Tb3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMvcGFnZXBvcHVwcy9jYWxlbmRh
clBpY2tlci5qcwppbmRleCBlNjI5ZTQ2YTFiMWMyMTczNTM2YmQ0YWUzNGRhZTViMDllNzE4YTk0
Li5jN2Q5NmM0MzkwYzkzZjY4NjE2N2NjN2Q0NmIyYzk2ZWI5NDg5Y2ZlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMvcGFnZXBvcHVwcy9jYWxlbmRhclBpY2tlci5qcworKysg
Yi9Tb3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMvcGFnZXBvcHVwcy9jYWxlbmRhclBpY2tlci5qcwpA
QCAtMjczNSw2ICsyNzM1LDU1MCBAQCBDYWxlbmRhckhlYWRlclZpZXcucHJvdG90eXBlLnNldERp
c2FibGVkID0gZnVuY3Rpb24oZGlzYWJsZWQpIHsKIAogLyoqCiAgKiBAY29uc3RydWN0b3IKKyAq
IEBleHRlbmRzIExpc3RDZWxsCisgKi8KK2Z1bmN0aW9uIERheUNlbGwoKSB7CisgICAgTGlzdENl
bGwuY2FsbCh0aGlzKTsKKyAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChEYXlDZWxsLkNs
YXNzTmFtZURheUNlbGwpOworICAgIHRoaXMuZWxlbWVudC5zdHlsZS53aWR0aCA9IERheUNlbGwu
V2lkdGggKyAicHgiOworICAgIHRoaXMuZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBEYXlDZWxsLkhl
aWdodCArICJweCI7CisgICAgdGhpcy5lbGVtZW50LnN0eWxlLmxpbmVIZWlnaHQgPSAoRGF5Q2Vs
bC5IZWlnaHQgLSBEYXlDZWxsLkJvcmRlcldpZHRoICogMikgKyAicHgiOworICAgIC8qKgorICAg
ICAqIEB0eXBlIHs/RGF5fQorICAgICAqLworICAgIHRoaXMuZGF5ID0gbnVsbDsKK307CisKK0Rh
eUNlbGwucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShMaXN0Q2VsbC5wcm90b3R5cGUpOworCitE
YXlDZWxsLldpZHRoID0gMzQ7CitEYXlDZWxsLkhlaWdodCA9IDIwOworRGF5Q2VsbC5Cb3JkZXJX
aWR0aCA9IDE7CitEYXlDZWxsLkNsYXNzTmFtZURheUNlbGwgPSAiZGF5LWNlbGwiOworRGF5Q2Vs
bC5DbGFzc05hbWVIaWdobGlnaHRlZCA9ICJoaWdobGlnaHRlZCI7CitEYXlDZWxsLkNsYXNzTmFt
ZURpc2FibGVkID0gImRpc2FibGVkIjsKK0RheUNlbGwuQ2xhc3NOYW1lQ3VycmVudE1vbnRoID0g
ImN1cnJlbnQtbW9udGgiOworRGF5Q2VsbC5DbGFzc05hbWVUb2RheSA9ICJ0b2RheSI7CisKK0Rh
eUNlbGwuX3JlY3ljbGVCaW4gPSBbXTsKKworRGF5Q2VsbC5yZWN5Y2xlT3JDcmVhdGUgPSBmdW5j
dGlvbigpIHsKKyAgICByZXR1cm4gRGF5Q2VsbC5fcmVjeWNsZUJpbi5wb3AoKSB8fCBuZXcgRGF5
Q2VsbCgpOworfTsKKworLyoqCisgKiBAcmV0dXJuIHshQXJyYXl9CisgKiBAb3ZlcnJpZGUKKyAq
LworRGF5Q2VsbC5wcm90b3R5cGUuX3JlY3ljbGVCaW4gPSBmdW5jdGlvbigpIHsKKyAgICByZXR1
cm4gRGF5Q2VsbC5fcmVjeWNsZUJpbjsKK307CisKKy8qKgorICogQG92ZXJyaWRlCisgKi8KK0Rh
eUNlbGwucHJvdG90eXBlLnRocm93QXdheSA9IGZ1bmN0aW9uKCkgeworICAgIExpc3RDZWxsLnBy
b3RvdHlwZS50aHJvd0F3YXkuY2FsbCh0aGlzKTsKKyAgICB0aGlzLmRheSA9IG51bGw7Cit9Owor
CisvKioKKyAqIEBwYXJhbSB7IWJvb2xlYW59IGhpZ2hsaWdodGVkCisgKi8KK0RheUNlbGwucHJv
dG90eXBlLnNldEhpZ2hsaWdodGVkID0gZnVuY3Rpb24oaGlnaGxpZ2h0ZWQpIHsKKyAgICBpZiAo
aGlnaGxpZ2h0ZWQpCisgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKERheUNlbGwu
Q2xhc3NOYW1lSGlnaGxpZ2h0ZWQpOworICAgIGVsc2UKKyAgICAgICAgdGhpcy5lbGVtZW50LmNs
YXNzTGlzdC5yZW1vdmUoRGF5Q2VsbC5DbGFzc05hbWVIaWdobGlnaHRlZCk7Cit9OworCisvKioK
KyAqIEBwYXJhbSB7IWJvb2xlYW59IGRpc2FibGVkCisgKi8KK0RheUNlbGwucHJvdG90eXBlLnNl
dERpc2FibGVkID0gZnVuY3Rpb24oZGlzYWJsZWQpIHsKKyAgICBpZiAoZGlzYWJsZWQpCisgICAg
ICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKERheUNlbGwuQ2xhc3NOYW1lRGlzYWJsZWQp
OworICAgIGVsc2UKKyAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoRGF5Q2Vs
bC5DbGFzc05hbWVEaXNhYmxlZCk7Cit9OworCisvKioKKyAqIEBwYXJhbSB7IWJvb2xlYW59IHNl
bGVjdGVkCisgKi8KK0RheUNlbGwucHJvdG90eXBlLnNldElzSW5DdXJyZW50TW9udGggPSBmdW5j
dGlvbihzZWxlY3RlZCkgeworICAgIGlmIChzZWxlY3RlZCkKKyAgICAgICAgdGhpcy5lbGVtZW50
LmNsYXNzTGlzdC5hZGQoRGF5Q2VsbC5DbGFzc05hbWVDdXJyZW50TW9udGgpOworICAgIGVsc2UK
KyAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoRGF5Q2VsbC5DbGFzc05hbWVD
dXJyZW50TW9udGgpOworfTsKKworLyoqCisgKiBAcGFyYW0geyFib29sZWFufSBzZWxlY3RlZAor
ICovCitEYXlDZWxsLnByb3RvdHlwZS5zZXRJc1RvZGF5ID0gZnVuY3Rpb24oc2VsZWN0ZWQpIHsK
KyAgICBpZiAoc2VsZWN0ZWQpCisgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKERh
eUNlbGwuQ2xhc3NOYW1lVG9kYXkpOworICAgIGVsc2UKKyAgICAgICAgdGhpcy5lbGVtZW50LmNs
YXNzTGlzdC5yZW1vdmUoRGF5Q2VsbC5DbGFzc05hbWVUb2RheSk7Cit9OworCisvKioKKyAqIEBw
YXJhbSB7IURheX0gZGF5CisgKi8KK0RheUNlbGwucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24o
ZGF5KSB7CisgICAgdGhpcy5kYXkgPSBkYXk7CisgICAgdGhpcy5lbGVtZW50LnRleHRDb250ZW50
ID0gbG9jYWxpemVOdW1iZXIodGhpcy5kYXkuZGF0ZS50b1N0cmluZygpKTsKKyAgICB0aGlzLnNo
b3coKTsKK307CisKKy8qKgorICogQGNvbnN0cnVjdG9yCisgKiBAZXh0ZW5kcyBMaXN0Q2VsbAor
ICovCitmdW5jdGlvbiBXZWVrTnVtYmVyQ2VsbCgpIHsKKyAgICBMaXN0Q2VsbC5jYWxsKHRoaXMp
OworICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKFdlZWtOdW1iZXJDZWxsLkNsYXNzTmFt
ZVdlZWtOdW1iZXJDZWxsKTsKKyAgICB0aGlzLmVsZW1lbnQuc3R5bGUud2lkdGggPSAoV2Vla051
bWJlckNlbGwuV2lkdGggLSBXZWVrTnVtYmVyQ2VsbC5SaWdodEJvcmRlcldpZHRoKSArICJweCI7
CisgICAgdGhpcy5lbGVtZW50LnN0eWxlLmhlaWdodCA9IFdlZWtOdW1iZXJDZWxsLkhlaWdodCAr
ICJweCI7CisgICAgLyoqCisgICAgICogQHR5cGUgez9XZWVrfQorICAgICAqLworICAgIHRoaXMu
d2VlayA9IG51bGw7Cit9OworCitXZWVrTnVtYmVyQ2VsbC5wcm90b3R5cGUgPSBPYmplY3QuY3Jl
YXRlKExpc3RDZWxsLnByb3RvdHlwZSk7CisKK1dlZWtOdW1iZXJDZWxsLldpZHRoID0gNDg7CitX
ZWVrTnVtYmVyQ2VsbC5IZWlnaHQgPSBEYXlDZWxsLkhlaWdodDsKK1dlZWtOdW1iZXJDZWxsLlJp
Z2h0Qm9yZGVyV2lkdGggPSAxOworV2Vla051bWJlckNlbGwuQ2xhc3NOYW1lV2Vla051bWJlckNl
bGwgPSAid2Vlay1udW1iZXItY2VsbCI7CitXZWVrTnVtYmVyQ2VsbC5DbGFzc05hbWVIaWdobGln
aHRlZCA9ICJoaWdobGlnaHRlZCI7CitXZWVrTnVtYmVyQ2VsbC5DbGFzc05hbWVEaXNhYmxlZCA9
ICJkaXNhYmxlZCI7CisKK1dlZWtOdW1iZXJDZWxsLl9yZWN5Y2xlQmluID0gW107CisKKy8qKgor
ICogQHJldHVybiB7IUFycmF5fQorICogQG92ZXJyaWRlCisgKi8KK1dlZWtOdW1iZXJDZWxsLnBy
b3RvdHlwZS5fcmVjeWNsZUJpbiA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBXZWVrTnVtYmVy
Q2VsbC5fcmVjeWNsZUJpbjsKK307CisKKy8qKgorICogQHJldHVybiB7IVdlZWtOdW1iZXJDZWxs
fQorICovCitXZWVrTnVtYmVyQ2VsbC5yZWN5Y2xlT3JDcmVhdGUgPSBmdW5jdGlvbigpIHsKKyAg
ICByZXR1cm4gV2Vla051bWJlckNlbGwuX3JlY3ljbGVCaW4ucG9wKCkgfHwgbmV3IFdlZWtOdW1i
ZXJDZWxsKCk7Cit9OworCisvKioKKyAqIEBwYXJhbSB7IVdlZWt9IHdlZWsKKyAqLworV2Vla051
bWJlckNlbGwucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24od2VlaykgeworICAgIHRoaXMud2Vl
ayA9IHdlZWs7CisgICAgdGhpcy5lbGVtZW50LnRleHRDb250ZW50ID0gbG9jYWxpemVOdW1iZXIo
dGhpcy53ZWVrLndlZWsudG9TdHJpbmcoKSk7CisgICAgdGhpcy5zaG93KCk7Cit9OworCisvKioK
KyAqIEBvdmVycmlkZQorICovCitXZWVrTnVtYmVyQ2VsbC5wcm90b3R5cGUudGhyb3dBd2F5ID0g
ZnVuY3Rpb24oKSB7CisgICAgTGlzdENlbGwucHJvdG90eXBlLnRocm93QXdheS5jYWxsKHRoaXMp
OworICAgIHRoaXMud2VlayA9IG51bGw7Cit9OworCitXZWVrTnVtYmVyQ2VsbC5wcm90b3R5cGUu
c2V0SGlnaGxpZ2h0ZWQgPSBmdW5jdGlvbihoaWdobGlnaHRlZCkgeworICAgIGlmIChoaWdobGln
aHRlZCkKKyAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoV2Vla051bWJlckNlbGwu
Q2xhc3NOYW1lSGlnaGxpZ2h0ZWQpOworICAgIGVsc2UKKyAgICAgICAgdGhpcy5lbGVtZW50LmNs
YXNzTGlzdC5yZW1vdmUoV2Vla051bWJlckNlbGwuQ2xhc3NOYW1lSGlnaGxpZ2h0ZWQpOworfTsK
KworV2Vla051bWJlckNlbGwucHJvdG90eXBlLnNldERpc2FibGVkID0gZnVuY3Rpb24oZGlzYWJs
ZWQpIHsKKyAgICBpZiAoZGlzYWJsZWQpCisgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3Qu
YWRkKFdlZWtOdW1iZXJDZWxsLkNsYXNzTmFtZURpc2FibGVkKTsKKyAgICBlbHNlCisgICAgICAg
IHRoaXMuZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKFdlZWtOdW1iZXJDZWxsLkNsYXNzTmFtZURp
c2FibGVkKTsKK307CisKKy8qKgorICogQGNvbnN0cnVjdG9yCisgKiBAZXh0ZW5kcyBWaWV3Cisg
KiBAcGFyYW0geyFib29sZWFufSBoYXNXZWVrTnVtYmVyQ29sdW1uCisgKi8KK2Z1bmN0aW9uIENh
bGVuZGFyVGFibGVIZWFkZXJWaWV3KGhhc1dlZWtOdW1iZXJDb2x1bW4pIHsKKyAgICBWaWV3LmNh
bGwodGhpcywgY3JlYXRlRWxlbWVudCgiZGl2IiwgImNhbGVuZGFyLXRhYmxlLWhlYWRlci12aWV3
IikpOworICAgIGlmIChoYXNXZWVrTnVtYmVyQ29sdW1uKSB7CisgICAgICAgIHZhciB3ZWVrTnVt
YmVyTGFiZWxFbGVtZW50ID0gY3JlYXRlRWxlbWVudCgiZGl2IiwgIndlZWstbnVtYmVyLWxhYmVs
IiwgZ2xvYmFsLnBhcmFtcy53ZWVrTGFiZWwpOworICAgICAgICB3ZWVrTnVtYmVyTGFiZWxFbGVt
ZW50LnN0eWxlLndpZHRoID0gV2Vla051bWJlckNlbGwuV2lkdGggKyAicHgiOworICAgICAgICB0
aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQod2Vla051bWJlckxhYmVsRWxlbWVudCk7CisgICAgfQor
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgRGF5c1BlcldlZWs7ICsraSkgeworICAgICAgICB2YXIg
d2Vla0RheU51bWJlciA9IChnbG9iYWwucGFyYW1zLndlZWtTdGFydERheSArIGkpICUgRGF5c1Bl
cldlZWs7CisgICAgICAgIHZhciBsYWJlbEVsZW1lbnQgPSBjcmVhdGVFbGVtZW50KCJkaXYiLCAi
d2Vlay1kYXktbGFiZWwiLCBnbG9iYWwucGFyYW1zLmRheUxhYmVsc1t3ZWVrRGF5TnVtYmVyXSk7
CisgICAgICAgIGxhYmVsRWxlbWVudC5zdHlsZS53aWR0aCA9IERheUNlbGwuV2lkdGggKyAicHgi
OworICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQobGFiZWxFbGVtZW50KTsKKyAgICAg
ICAgaWYgKGdldExhbmd1YWdlKCkgPT09ICJqYSIpIHsKKyAgICAgICAgICAgIGlmICh3ZWVrRGF5
TnVtYmVyID09PSAwKQorICAgICAgICAgICAgICAgIGxhYmVsRWxlbWVudC5zdHlsZS5jb2xvciA9
ICJyZWQiOworICAgICAgICAgICAgZWxzZSBpZiAod2Vla0RheU51bWJlciA9PT0gNikKKyAgICAg
ICAgICAgICAgICBsYWJlbEVsZW1lbnQuc3R5bGUuY29sb3IgPSAiYmx1ZSI7CisgICAgICAgIH0K
KyAgICB9Cit9CisKK0NhbGVuZGFyVGFibGVIZWFkZXJWaWV3LnByb3RvdHlwZSA9IE9iamVjdC5j
cmVhdGUoVmlldy5wcm90b3R5cGUpOworCitDYWxlbmRhclRhYmxlSGVhZGVyVmlldy5IZWlnaHQg
PSAyNTsKKworLyoqCisgKiBAY29uc3RydWN0b3IKKyAqIEBleHRlbmRzIExpc3RDZWxsCisgKi8K
K2Z1bmN0aW9uIENhbGVuZGFyUm93Q2VsbCgpIHsKKyAgICBMaXN0Q2VsbC5jYWxsKHRoaXMpOwor
ICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKENhbGVuZGFyUm93Q2VsbC5DbGFzc05hbWVD
YWxlbmRhclJvd0NlbGwpOworICAgIHRoaXMuZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBDYWxlbmRh
clJvd0NlbGwuSGVpZ2h0ICsgInB4IjsKKworICAgIC8qKgorICAgICAqIEB0eXBlIHshQXJyYXl9
CisgICAgICogQHByb3RlY3RlZAorICAgICAqLworICAgIHRoaXMuX2RheUNlbGxzID0gW107Cisg
ICAgLyoqCisgICAgICogQHR5cGUgeyFudW1iZXJ9CisgICAgICovCisgICAgdGhpcy5yb3cgPSAw
OworICAgIC8qKgorICAgICAqIEB0eXBlIHs/Q2FsZW5kYXJUYWJsZVZpZXd9CisgICAgICovCisg
ICAgdGhpcy5jYWxlbmRhclRhYmxlVmlldyA9IG51bGw7Cit9CisKK0NhbGVuZGFyUm93Q2VsbC5w
cm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKExpc3RDZWxsLnByb3RvdHlwZSk7CisKK0NhbGVuZGFy
Um93Q2VsbC5IZWlnaHQgPSBEYXlDZWxsLkhlaWdodDsKK0NhbGVuZGFyUm93Q2VsbC5DbGFzc05h
bWVDYWxlbmRhclJvd0NlbGwgPSAiY2FsZW5kYXItcm93LWNlbGwiOworCitDYWxlbmRhclJvd0Nl
bGwuX3JlY3ljbGVCaW4gPSBbXTsKKworLyoqCisgKiBAcmV0dXJuIHshQXJyYXl9CisgKiBAb3Zl
cnJpZGUKKyAqLworQ2FsZW5kYXJSb3dDZWxsLnByb3RvdHlwZS5fcmVjeWNsZUJpbiA9IGZ1bmN0
aW9uKCkgeworICAgIHJldHVybiBDYWxlbmRhclJvd0NlbGwuX3JlY3ljbGVCaW47Cit9OworCisv
KioKKyAqIEBwYXJhbSB7IW51bWJlcn0gcm93CisgKiBAcGFyYW0geyFDYWxlbmRhclRhYmxlVmll
d30gY2FsZW5kYXJUYWJsZVZpZXcKKyAqLworQ2FsZW5kYXJSb3dDZWxsLnByb3RvdHlwZS5yZXNl
dCA9IGZ1bmN0aW9uKHJvdywgY2FsZW5kYXJUYWJsZVZpZXcpIHsKKyAgICB0aGlzLnJvdyA9IHJv
dzsKKyAgICB0aGlzLmNhbGVuZGFyVGFibGVWaWV3ID0gY2FsZW5kYXJUYWJsZVZpZXc7CisgICAg
aWYgKHRoaXMuY2FsZW5kYXJUYWJsZVZpZXcuaGFzV2Vla051bWJlckNvbHVtbikgeworICAgICAg
ICB2YXIgbWlkZGxlRGF5ID0gdGhpcy5jYWxlbmRhclRhYmxlVmlldy5kYXlBdENvbHVtbkFuZFJv
dygzLCByb3cpOworICAgICAgICB2YXIgd2VlayA9IFdlZWsuY3JlYXRlRnJvbURheShtaWRkbGVE
YXkpOworICAgICAgICB0aGlzLndlZWtOdW1iZXJDZWxsID0gdGhpcy5jYWxlbmRhclRhYmxlVmll
dy5wcmVwYXJlTmV3V2Vla051bWJlckNlbGwod2Vlayk7CisgICAgICAgIHRoaXMud2Vla051bWJl
ckNlbGwuYXR0YWNoVG8odGhpcyk7CisgICAgfQorICAgIHZhciBkYXkgPSBjYWxlbmRhclRhYmxl
Vmlldy5kYXlBdENvbHVtbkFuZFJvdygwLCByb3cpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
RGF5c1BlcldlZWs7ICsraSkgeworICAgICAgICB2YXIgZGF5Q2VsbCA9IHRoaXMuY2FsZW5kYXJU
YWJsZVZpZXcucHJlcGFyZU5ld0RheUNlbGwoZGF5KTsKKyAgICAgICAgZGF5Q2VsbC5hdHRhY2hU
byh0aGlzKTsKKyAgICAgICAgdGhpcy5fZGF5Q2VsbHMucHVzaChkYXlDZWxsKTsKKyAgICAgICAg
ZGF5ID0gZGF5Lm5leHQoKTsKKyAgICB9CisgICAgdGhpcy5zaG93KCk7Cit9OworCisvKioKKyAq
IEBvdmVycmlkZQorICovCitDYWxlbmRhclJvd0NlbGwucHJvdG90eXBlLnRocm93QXdheSA9IGZ1
bmN0aW9uKCkgeworICAgIExpc3RDZWxsLnByb3RvdHlwZS50aHJvd0F3YXkuY2FsbCh0aGlzKTsK
KyAgICBpZiAodGhpcy53ZWVrTnVtYmVyQ2VsbCkKKyAgICAgICAgdGhpcy5jYWxlbmRhclRhYmxl
Vmlldy50aHJvd0F3YXlXZWVrTnVtYmVyQ2VsbCh0aGlzLndlZWtOdW1iZXJDZWxsKTsKKyAgICB0
aGlzLl9kYXlDZWxscy5mb3JFYWNoKHRoaXMuY2FsZW5kYXJUYWJsZVZpZXcudGhyb3dBd2F5RGF5
Q2VsbCwgdGhpcy5jYWxlbmRhclRhYmxlVmlldyk7CisgICAgdGhpcy5fZGF5Q2VsbHMubGVuZ3Ro
ID0gMDsKK307CisKKy8qKgorICogQGNvbnN0cnVjdG9yCisgKiBAZXh0ZW5kcyBMaXN0Vmlldwor
ICogQHBhcmFtIHshQ2FsZW5kYXJQaWNrZXJ9IGNhbGVuZGFyUGlja2VyCisgKi8KK2Z1bmN0aW9u
IENhbGVuZGFyVGFibGVWaWV3KGNhbGVuZGFyUGlja2VyKSB7CisgICAgTGlzdFZpZXcuY2FsbCh0
aGlzKTsKKyAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChDYWxlbmRhclRhYmxlVmlldy5D
bGFzc05hbWVDYWxlbmRhclRhYmxlVmlldyk7CisgICAgdGhpcy5lbGVtZW50LnRhYkluZGV4ID0g
MDsKKworICAgIC8qKgorICAgICAqIEB0eXBlIHshYm9vbGVhbn0KKyAgICAgKiBAY29uc3QKKyAg
ICAgKi8KKyAgICB0aGlzLmhhc1dlZWtOdW1iZXJDb2x1bW4gPSBjYWxlbmRhclBpY2tlci50eXBl
ID09PSAid2VlayI7CisgICAgLyoqCisgICAgICogQHR5cGUgeyFDYWxlbmRhclBpY2tlcn0KKyAg
ICAgKiBAY29uc3QKKyAgICAgKi8KKyAgICB0aGlzLmNhbGVuZGFyUGlja2VyID0gY2FsZW5kYXJQ
aWNrZXI7CisgICAgLyoqCisgICAgICogQHR5cGUgeyFPYmplY3R9CisgICAgICogQGNvbnN0Cisg
ICAgICovCisgICAgdGhpcy5fZGF5Q2VsbHMgPSB7fTsKKyAgICB2YXIgaGVhZGVyVmlldyA9IG5l
dyBDYWxlbmRhclRhYmxlSGVhZGVyVmlldyh0aGlzLmhhc1dlZWtOdW1iZXJDb2x1bW4pOworICAg
IGhlYWRlclZpZXcuYXR0YWNoVG8odGhpcywgdGhpcy5zY3JvbGxWaWV3KTsKKworICAgIGlmICh0
aGlzLmhhc1dlZWtOdW1iZXJDb2x1bW4pIHsKKyAgICAgICAgdGhpcy5zZXRXaWR0aChEYXlDZWxs
LldpZHRoICogRGF5c1BlcldlZWsgKyBXZWVrTnVtYmVyQ2VsbC5XaWR0aCk7CisgICAgICAgIC8q
KgorICAgICAgICAgKiBAdHlwZSB7P0FycmF5fQorICAgICAgICAgKiBAY29uc3QKKyAgICAgICAg
ICovCisgICAgICAgIHRoaXMuX3dlZWtOdW1iZXJDZWxscyA9IFtdOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIHRoaXMuc2V0V2lkdGgoRGF5Q2VsbC5XaWR0aCAqIERheXNQZXJXZWVrKTsKKyAgICB9
CisgICAgCisgICAgLyoqCisgICAgICogQHR5cGUgeyFib29sZWFufQorICAgICAqIEBwcm90ZWN0
ZWQKKyAgICAgKi8KKyAgICB0aGlzLl9pZ25vcmVNb3VzZU91dFVudGlsbE5leHRNb3VzZU92ZXIg
PSBmYWxzZTsKKworICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRo
aXMub25DbGljaywgZmFsc2UpOworICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJt
b3VzZW92ZXIiLCB0aGlzLm9uTW91c2VPdmVyLCBmYWxzZSk7CisgICAgdGhpcy5lbGVtZW50LmFk
ZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3V0IiwgdGhpcy5vbk1vdXNlT3V0LCBmYWxzZSk7CisKKyAg
ICAvLyB5b3Ugc2hvdWxkbid0IGJlIGFibGUgdG8gdXNlIHRoZSBtb3VzZSB3aGVlbCB0byBzY3Jv
bGwuCisgICAgdGhpcy5zY3JvbGxWaWV3LmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91
c2V3aGVlbCIsIHRoaXMuc2Nyb2xsVmlldy5vbk1vdXNlV2hlZWwsIGZhbHNlKTsKK30KKworQ2Fs
ZW5kYXJUYWJsZVZpZXcucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShMaXN0Vmlldy5wcm90b3R5
cGUpOworCitDYWxlbmRhclRhYmxlVmlldy5Cb3JkZXJXaWR0aCA9IDE7CitDYWxlbmRhclRhYmxl
Vmlldy5DbGFzc05hbWVDYWxlbmRhclRhYmxlVmlldyA9ICJjYWxlbmRhci10YWJsZS12aWV3IjsK
KworLyoqCisgKiBAcGFyYW0geyFudW1iZXJ9IHNjcm9sbE9mZnNldAorICogQHJldHVybiB7IW51
bWJlcn0KKyAqLworQ2FsZW5kYXJUYWJsZVZpZXcucHJvdG90eXBlLnJvd0F0U2Nyb2xsT2Zmc2V0
ID0gZnVuY3Rpb24oc2Nyb2xsT2Zmc2V0KSB7CisgICAgcmV0dXJuIE1hdGguZmxvb3Ioc2Nyb2xs
T2Zmc2V0IC8gQ2FsZW5kYXJSb3dDZWxsLkhlaWdodCk7Cit9OworCisvKioKKyAqIEBwYXJhbSB7
IW51bWJlcn0gcm93CisgKiBAcmV0dXJuIHshbnVtYmVyfQorICovCitDYWxlbmRhclRhYmxlVmll
dy5wcm90b3R5cGUuc2Nyb2xsT2Zmc2V0Rm9yUm93ID0gZnVuY3Rpb24ocm93KSB7CisgICAgcmV0
dXJuIHJvdyAqIENhbGVuZGFyUm93Q2VsbC5IZWlnaHQ7Cit9OworCisvKioKKyAqIEBwYXJhbSB7
P0V2ZW50fSBldmVudAorICovCitDYWxlbmRhclRhYmxlVmlldy5wcm90b3R5cGUub25DbGljayA9
IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgaWYgKHRoaXMuaGFzV2Vla051bWJlckNvbHVtbikgewor
ICAgICAgICB2YXIgd2Vla051bWJlckNlbGxFbGVtZW50ID0gZW5jbG9zaW5nTm9kZU9yU2VsZldp
dGhDbGFzcyhldmVudC50YXJnZXQsIFdlZWtOdW1iZXJDZWxsLkNsYXNzTmFtZVdlZWtOdW1iZXJD
ZWxsKTsKKyAgICAgICAgaWYgKHdlZWtOdW1iZXJDZWxsRWxlbWVudCkgeworICAgICAgICAgICAg
dmFyIHdlZWtOdW1iZXJDZWxsID0gd2Vla051bWJlckNlbGxFbGVtZW50LiR2aWV3OworICAgICAg
ICAgICAgdGhpcy5jYWxlbmRhclBpY2tlci5zZWxlY3RSYW5nZUNvbnRhaW5pbmdEYXkod2Vla051
bWJlckNlbGwud2Vlay5maXJzdERheSgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgIH0KKyAgICB2YXIgZGF5Q2VsbEVsZW1lbnQgPSBlbmNsb3NpbmdOb2RlT3JTZWxmV2l0
aENsYXNzKGV2ZW50LnRhcmdldCwgRGF5Q2VsbC5DbGFzc05hbWVEYXlDZWxsKTsKKyAgICBpZiAo
IWRheUNlbGxFbGVtZW50KQorICAgICAgICByZXR1cm47CisgICAgdmFyIGRheUNlbGwgPSBkYXlD
ZWxsRWxlbWVudC4kdmlldzsKKyAgICB0aGlzLmNhbGVuZGFyUGlja2VyLnNlbGVjdFJhbmdlQ29u
dGFpbmluZ0RheShkYXlDZWxsLmRheSk7Cit9OworCisvKioKKyAqIEBwYXJhbSB7P0V2ZW50fSBl
dmVudAorICovCitDYWxlbmRhclRhYmxlVmlldy5wcm90b3R5cGUub25Nb3VzZU92ZXIgPSBmdW5j
dGlvbihldmVudCkgeworICAgIGlmICh0aGlzLmhhc1dlZWtOdW1iZXJDb2x1bW4pIHsKKyAgICAg
ICAgdmFyIHdlZWtOdW1iZXJDZWxsRWxlbWVudCA9IGVuY2xvc2luZ05vZGVPclNlbGZXaXRoQ2xh
c3MoZXZlbnQudGFyZ2V0LCBXZWVrTnVtYmVyQ2VsbC5DbGFzc05hbWVXZWVrTnVtYmVyQ2VsbCk7
CisgICAgICAgIGlmICh3ZWVrTnVtYmVyQ2VsbEVsZW1lbnQpIHsKKyAgICAgICAgICAgIHZhciB3
ZWVrTnVtYmVyQ2VsbCA9IHdlZWtOdW1iZXJDZWxsRWxlbWVudC4kdmlldzsKKyAgICAgICAgICAg
IHRoaXMuY2FsZW5kYXJQaWNrZXIuaGlnaGxpZ2h0UmFuZ2VDb250YWluaW5nRGF5KHdlZWtOdW1i
ZXJDZWxsLndlZWsuZmlyc3REYXkoKSk7CisgICAgICAgICAgICB0aGlzLl9pZ25vcmVNb3VzZU91
dFVudGlsbE5leHRNb3VzZU92ZXIgPSBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgIH0KKyAgICB2YXIgZGF5Q2VsbEVsZW1lbnQgPSBlbmNsb3NpbmdOb2RlT3JTZWxm
V2l0aENsYXNzKGV2ZW50LnRhcmdldCwgRGF5Q2VsbC5DbGFzc05hbWVEYXlDZWxsKTsKKyAgICBp
ZiAoIWRheUNlbGxFbGVtZW50KQorICAgICAgICByZXR1cm47CisgICAgdmFyIGRheUNlbGwgPSBk
YXlDZWxsRWxlbWVudC4kdmlldzsKKyAgICB0aGlzLmNhbGVuZGFyUGlja2VyLmhpZ2hsaWdodFJh
bmdlQ29udGFpbmluZ0RheShkYXlDZWxsLmRheSk7CisgICAgdGhpcy5faWdub3JlTW91c2VPdXRV
bnRpbGxOZXh0TW91c2VPdmVyID0gZmFsc2U7Cit9OworCisvKioKKyAqIEBwYXJhbSB7P0V2ZW50
fSBldmVudAorICovCitDYWxlbmRhclRhYmxlVmlldy5wcm90b3R5cGUub25Nb3VzZU91dCA9IGZ1
bmN0aW9uKGV2ZW50KSB7CisgICAgaWYgKHRoaXMuX2lnbm9yZU1vdXNlT3V0VW50aWxsTmV4dE1v
dXNlT3ZlcikKKyAgICAgICAgcmV0dXJuOworICAgIHZhciBkYXlDZWxsRWxlbWVudCA9IGVuY2xv
c2luZ05vZGVPclNlbGZXaXRoQ2xhc3MoZXZlbnQudGFyZ2V0LCBEYXlDZWxsLkNsYXNzTmFtZURh
eUNlbGwpOworICAgIGlmICghZGF5Q2VsbEVsZW1lbnQpIHsKKyAgICAgICAgdGhpcy5jYWxlbmRh
clBpY2tlci5oaWdobGlnaHRSYW5nZUNvbnRhaW5pbmdEYXkobnVsbCk7CisgICAgfQorfTsKKwor
LyoqCisgKiBAcGFyYW0geyFudW1iZXJ9IHJvdworICogQHJldHVybiB7IUNhbGVuZGFyUm93Q2Vs
bH0KKyAqLworQ2FsZW5kYXJUYWJsZVZpZXcucHJvdG90eXBlLnByZXBhcmVOZXdDZWxsID0gZnVu
Y3Rpb24ocm93KSB7CisgICAgdmFyIGNlbGwgPSBDYWxlbmRhclJvd0NlbGwuX3JlY3ljbGVCaW4u
cG9wKCkgfHwgbmV3IENhbGVuZGFyUm93Q2VsbCgpOworICAgIGNlbGwucmVzZXQocm93LCB0aGlz
KTsKKyAgICByZXR1cm4gY2VsbDsKK307CisKKy8qKgorICogQHJldHVybiB7IW51bWJlcn0gSGVp
Z2h0IGluIHBpeGVscy4KKyAqLworQ2FsZW5kYXJUYWJsZVZpZXcucHJvdG90eXBlLmhlaWdodCA9
IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLnNjcm9sbFZpZXcuaGVpZ2h0KCkgKyBDYWxl
bmRhclRhYmxlSGVhZGVyVmlldy5IZWlnaHQgKyBDYWxlbmRhclRhYmxlVmlldy5Cb3JkZXJXaWR0
aCAqIDI7Cit9OworCisvKioKKyAqIEBwYXJhbSB7IW51bWJlcn0gaGVpZ2h0IEhlaWdodCBpbiBw
aXhlbHMuCisgKi8KK0NhbGVuZGFyVGFibGVWaWV3LnByb3RvdHlwZS5zZXRIZWlnaHQgPSBmdW5j
dGlvbihoZWlnaHQpIHsKKyAgICB0aGlzLnNjcm9sbFZpZXcuc2V0SGVpZ2h0KGhlaWdodCAtIENh
bGVuZGFyVGFibGVIZWFkZXJWaWV3LkhlaWdodCAtIENhbGVuZGFyVGFibGVWaWV3LkJvcmRlcldp
ZHRoICogMik7Cit9OworCisvKioKKyAqIEBwYXJhbSB7IU1vbnRofSBtb250aAorICogQHBhcmFt
IHshYm9vbGVhbn0gYW5pbWF0ZQorICovCitDYWxlbmRhclRhYmxlVmlldy5wcm90b3R5cGUuc2Ny
b2xsVG9Nb250aCA9IGZ1bmN0aW9uKG1vbnRoLCBhbmltYXRlKSB7CisgICAgdmFyIHJvd0ZvckZp
cnN0RGF5SW5Nb250aCA9IHRoaXMuY29sdW1uQW5kUm93Rm9yRGF5KG1vbnRoLmZpcnN0RGF5KCkp
LnJvdzsKKyAgICB0aGlzLnNjcm9sbFZpZXcuc2Nyb2xsVG8odGhpcy5zY3JvbGxPZmZzZXRGb3JS
b3cocm93Rm9yRmlyc3REYXlJbk1vbnRoKSwgYW5pbWF0ZSk7Cit9OworCisvKioKKyAqIEBwYXJh
bSB7IW51bWJlcn0gY29sdW1uCisgKiBAcGFyYW0geyFudW1iZXJ9IHJvdworICogQHJldHVybiB7
IURheX0KKyAqLworQ2FsZW5kYXJUYWJsZVZpZXcucHJvdG90eXBlLmRheUF0Q29sdW1uQW5kUm93
ID0gZnVuY3Rpb24oY29sdW1uLCByb3cpIHsKKyAgICB2YXIgZGF5c1NpbmNlTWluaW11bSA9IHJv
dyAqIERheXNQZXJXZWVrICsgY29sdW1uICsgZ2xvYmFsLnBhcmFtcy53ZWVrU3RhcnREYXkgLSBD
YWxlbmRhclRhYmxlVmlldy5fTWluaW11bURheVdlZWtEYXk7CisgICAgcmV0dXJuIERheS5jcmVh
dGVGcm9tVmFsdWUoZGF5c1NpbmNlTWluaW11bSAqIE1pbGxpc2Vjb25kc1BlckRheSArIENhbGVu
ZGFyVGFibGVWaWV3Ll9NaW5pbXVtRGF5VmFsdWUpOworfTsKKworQ2FsZW5kYXJUYWJsZVZpZXcu
X01pbmltdW1EYXlWYWx1ZSA9IERheS5NaW5pbXVtLnZhbHVlT2YoKTsKK0NhbGVuZGFyVGFibGVW
aWV3Ll9NaW5pbXVtRGF5V2Vla0RheSA9IERheS5NaW5pbXVtLndlZWtEYXkoKTsKKworLyoqCisg
KiBAcGFyYW0geyFEYXl9IGRheQorICogQHJldHVybiB7IU9iamVjdH0gT2JqZWN0IHdpdGggcHJv
cGVydGllcyBjb2x1bW4gYW5kIHJvdy4KKyAqLworQ2FsZW5kYXJUYWJsZVZpZXcucHJvdG90eXBl
LmNvbHVtbkFuZFJvd0ZvckRheSA9IGZ1bmN0aW9uKGRheSkgeworICAgIHZhciBkYXlzU2luY2VN
aW5pbXVtID0gKGRheS52YWx1ZU9mKCkgLSBDYWxlbmRhclRhYmxlVmlldy5fTWluaW11bURheVZh
bHVlKSAvIE1pbGxpc2Vjb25kc1BlckRheTsKKyAgICB2YXIgb2Zmc2V0ID0gZGF5c1NpbmNlTWlu
aW11bSArIENhbGVuZGFyVGFibGVWaWV3Ll9NaW5pbXVtRGF5V2Vla0RheSAtIGdsb2JhbC5wYXJh
bXMud2Vla1N0YXJ0RGF5OworICAgIHZhciByb3cgPSBNYXRoLmZsb29yKG9mZnNldCAvIERheXNQ
ZXJXZWVrKTsKKyAgICB2YXIgY29sdW1uID0gb2Zmc2V0IC0gcm93ICogRGF5c1BlcldlZWs7Cisg
ICAgcmV0dXJuIHsKKyAgICAgICAgY29sdW1uOiBjb2x1bW4sCisgICAgICAgIHJvdzogcm93Cisg
ICAgfTsKK307CisKK0NhbGVuZGFyVGFibGVWaWV3LnByb3RvdHlwZS51cGRhdGVDZWxscyA9IGZ1
bmN0aW9uKCkgeworICAgIExpc3RWaWV3LnByb3RvdHlwZS51cGRhdGVDZWxscy5jYWxsKHRoaXMp
OworCisgICAgdmFyIHNlbGVjdGlvbiA9IHRoaXMuY2FsZW5kYXJQaWNrZXIuc2VsZWN0aW9uKCk7
CisgICAgdmFyIGZpcnN0RGF5SW5TZWxlY3Rpb247CisgICAgdmFyIGxhc3REYXlJblNlbGVjdGlv
bjsKKyAgICBpZiAoc2VsZWN0aW9uKSB7CisgICAgICAgIGZpcnN0RGF5SW5TZWxlY3Rpb24gPSBz
ZWxlY3Rpb24uZmlyc3REYXkoKS52YWx1ZU9mKCk7CisgICAgICAgIGxhc3REYXlJblNlbGVjdGlv
biA9IHNlbGVjdGlvbi5sYXN0RGF5KCkudmFsdWVPZigpOworICAgIH0gZWxzZSB7CisgICAgICAg
IGZpcnN0RGF5SW5TZWxlY3Rpb24gPSBJbmZpbml0eTsKKyAgICAgICAgbGFzdERheUluU2VsZWN0
aW9uID0gSW5maW5pdHk7CisgICAgfQorICAgIHZhciBoaWdobGlnaHQgPSB0aGlzLmNhbGVuZGFy
UGlja2VyLmhpZ2hsaWdodCgpOworICAgIHZhciBmaXJzdERheUluSGlnaGxpZ2h0OworICAgIHZh
ciBsYXN0RGF5SW5IaWdobGlnaHQ7CisgICAgaWYgKGhpZ2hsaWdodCkgeworICAgICAgICBmaXJz
dERheUluSGlnaGxpZ2h0ID0gaGlnaGxpZ2h0LmZpcnN0RGF5KCkudmFsdWVPZigpOworICAgICAg
ICBsYXN0RGF5SW5IaWdobGlnaHQgPSBoaWdobGlnaHQubGFzdERheSgpLnZhbHVlT2YoKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBmaXJzdERheUluSGlnaGxpZ2h0ID0gSW5maW5pdHk7CisgICAg
ICAgIGxhc3REYXlJbkhpZ2hsaWdodCA9IEluZmluaXR5OworICAgIH0KKyAgICB2YXIgY3VycmVu
dE1vbnRoID0gdGhpcy5jYWxlbmRhclBpY2tlci5jdXJyZW50TW9udGgoKTsKKyAgICB2YXIgZmly
c3REYXlJbkN1cnJlbnRNb250aCA9IGN1cnJlbnRNb250aC5maXJzdERheSgpLnZhbHVlT2YoKTsK
KyAgICB2YXIgbGFzdERheUluQ3VycmVudE1vbnRoID0gY3VycmVudE1vbnRoLmxhc3REYXkoKS52
YWx1ZU9mKCk7CisgICAgZm9yICh2YXIgZGF5U3RyaW5nIGluIHRoaXMuX2RheUNlbGxzKSB7Cisg
ICAgICAgIHZhciBkYXlDZWxsID0gdGhpcy5fZGF5Q2VsbHNbZGF5U3RyaW5nXTsKKyAgICAgICAg
dmFyIGRheSA9IGRheUNlbGwuZGF5OworICAgICAgICBkYXlDZWxsLnNldElzVG9kYXkoRGF5LmNy
ZWF0ZUZyb21Ub2RheSgpLmVxdWFscyhkYXkpKTsKKyAgICAgICAgZGF5Q2VsbC5zZXRTZWxlY3Rl
ZChkYXkgPj0gZmlyc3REYXlJblNlbGVjdGlvbiAmJiBkYXkgPD0gbGFzdERheUluU2VsZWN0aW9u
KTsKKyAgICAgICAgZGF5Q2VsbC5zZXRIaWdobGlnaHRlZChkYXkgPj0gZmlyc3REYXlJbkhpZ2hs
aWdodCAmJiBkYXkgPD0gbGFzdERheUluSGlnaGxpZ2h0KTsKKyAgICAgICAgZGF5Q2VsbC5zZXRJ
c0luQ3VycmVudE1vbnRoKGRheSA+PSBmaXJzdERheUluQ3VycmVudE1vbnRoICYmIGRheSA8PSBs
YXN0RGF5SW5DdXJyZW50TW9udGgpOworICAgICAgICBkYXlDZWxsLnNldERpc2FibGVkKCF0aGlz
LmNhbGVuZGFyUGlja2VyLmlzVmFsaWREYXkoZGF5KSk7CisgICAgfQorICAgIGlmICh0aGlzLmhh
c1dlZWtOdW1iZXJDb2x1bW4pIHsKKyAgICAgICAgZm9yICh2YXIgd2Vla1N0cmluZyBpbiB0aGlz
Ll93ZWVrTnVtYmVyQ2VsbHMpIHsKKyAgICAgICAgICAgIHZhciB3ZWVrTnVtYmVyQ2VsbCA9IHRo
aXMuX3dlZWtOdW1iZXJDZWxsc1t3ZWVrU3RyaW5nXTsKKyAgICAgICAgICAgIHZhciB3ZWVrID0g
d2Vla051bWJlckNlbGwud2VlazsKKyAgICAgICAgICAgIHdlZWtOdW1iZXJDZWxsLnNldFNlbGVj
dGVkKHNlbGVjdGlvbiAmJiBzZWxlY3Rpb24uZXF1YWxzKHdlZWspKTsKKyAgICAgICAgICAgIHdl
ZWtOdW1iZXJDZWxsLnNldEhpZ2hsaWdodGVkKGhpZ2hsaWdodCAmJiBoaWdobGlnaHQuZXF1YWxz
KHdlZWspKTsKKyAgICAgICAgICAgIHdlZWtOdW1iZXJDZWxsLnNldERpc2FibGVkKCF0aGlzLmNh
bGVuZGFyUGlja2VyLmlzVmFsaWQod2VlaykpOworICAgICAgICB9CisgICAgfQorfTsKKworLyoq
CisgKiBAcGFyYW0geyFEYXl9IGRheQorICogQHJldHVybiB7IURheUNlbGx9CisgKi8KK0NhbGVu
ZGFyVGFibGVWaWV3LnByb3RvdHlwZS5wcmVwYXJlTmV3RGF5Q2VsbCA9IGZ1bmN0aW9uKGRheSkg
eworICAgIHZhciBkYXlDZWxsID0gRGF5Q2VsbC5yZWN5Y2xlT3JDcmVhdGUoKTsKKyAgICBkYXlD
ZWxsLnJlc2V0KGRheSk7CisgICAgdGhpcy5fZGF5Q2VsbHNbZGF5Q2VsbC5kYXkudG9TdHJpbmco
KV0gPSBkYXlDZWxsOworICAgIHJldHVybiBkYXlDZWxsOworfTsKKworLyoqCisgKiBAcGFyYW0g
eyFXZWVrfSB3ZWVrCisgKiBAcmV0dXJuIHshV2Vla051bWJlckNlbGx9CisgKi8KK0NhbGVuZGFy
VGFibGVWaWV3LnByb3RvdHlwZS5wcmVwYXJlTmV3V2Vla051bWJlckNlbGwgPSBmdW5jdGlvbih3
ZWVrKSB7CisgICAgdmFyIHdlZWtOdW1iZXJDZWxsID0gV2Vla051bWJlckNlbGwucmVjeWNsZU9y
Q3JlYXRlKCk7CisgICAgd2Vla051bWJlckNlbGwucmVzZXQod2Vlayk7CisgICAgdGhpcy5fd2Vl
a051bWJlckNlbGxzW3dlZWtOdW1iZXJDZWxsLndlZWsudG9TdHJpbmcoKV0gPSB3ZWVrTnVtYmVy
Q2VsbDsKKyAgICByZXR1cm4gd2Vla051bWJlckNlbGw7Cit9OworCisvKioKKyAqIEBwYXJhbSB7
IURheUNlbGx9IGRheUNlbGwKKyAqLworQ2FsZW5kYXJUYWJsZVZpZXcucHJvdG90eXBlLnRocm93
QXdheURheUNlbGwgPSBmdW5jdGlvbihkYXlDZWxsKSB7CisgICAgZGVsZXRlIHRoaXMuX2RheUNl
bGxzW2RheUNlbGwuZGF5LnRvU3RyaW5nKCldOworICAgIGRheUNlbGwudGhyb3dBd2F5KCk7Cit9
OworCisvKioKKyAqIEBwYXJhbSB7IVdlZWtOdW1iZXJDZWxsfSB3ZWVrTnVtYmVyQ2VsbAorICov
CitDYWxlbmRhclRhYmxlVmlldy5wcm90b3R5cGUudGhyb3dBd2F5V2Vla051bWJlckNlbGwgPSBm
dW5jdGlvbih3ZWVrTnVtYmVyQ2VsbCkgeworICAgIGRlbGV0ZSB0aGlzLl93ZWVrTnVtYmVyQ2Vs
bHNbd2Vla051bWJlckNlbGwud2Vlay50b1N0cmluZygpXTsKKyAgICB3ZWVrTnVtYmVyQ2VsbC50
aHJvd0F3YXkoKTsKK307CisKKy8qKgorICogQGNvbnN0cnVjdG9yCiAgKiBAcGFyYW0geyFFbGVt
ZW50fSBlbGVtZW50CiAgKiBAcGFyYW0geyFPYmplY3R9IGNvbmZpZwogICovCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>190891</attachid>
            <date>2013-02-28 22:54:19 -0800</date>
            <delta_ts>2013-02-28 23:50:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-110970-20130301155030.patch</filename>
            <type>text/plain</type>
            <size>21371</size>
            <attacher name="Keishi Hattori">keishi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ0NDA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGU0Y2Q1Yzg3MTllNDZi
NmY0ZTdjMWM0NmMwZjU3MWViNjVlYjNjMC4uMGY3ZmM5NTU0MjljNGNmYzNhZWU0YmE4ZGM5MjIz
YTQzZTEwMDE2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU0IEBACisyMDEzLTAyLTI3ICBLZWlz
aGkgSGF0dG9yaSAgPGtlaXNoaUB3ZWJraXQub3JnPgorCisgICAgICAgIEFkZCBjYWxlbmRhciB0
YWJsZSB2aWV3IGZvciB0aGUgbmV3IGNhbGVuZGFyIHBpY2tlcgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEwOTcwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgS2VudCBUYW11cmEuCisKKyAgICAgICAgVGhlIGNhbGVuZGFyIHRhYmxlIHRoYXQgd2lsbCBi
ZSB1c2VkIGluIHRoZSBuZXcgY2FsZW5kYXIgcGlja2VyIChCdWcgMTA5NDM5KS4KKworICAgICAg
ICBObyBuZXcgdGVzdHMuIENvZGUgaXMgbm90IHVzZWQgeWV0LgorCisgICAgICAgICogUmVzb3Vy
Y2VzL3BhZ2Vwb3B1cHMvY2FsZW5kYXJQaWNrZXIuanM6CisgICAgICAgIChEYXlDZWxsKTogQ2Vs
bCB3aGljaCByZXByZXNlbnRzIG9uZSBkYXkgaW4gdGhlIGNhbGVuZGFyLgorICAgICAgICAoRGF5
Q2VsbC5yZWN5Y2xlT3JDcmVhdGUpOgorICAgICAgICAoRGF5Q2VsbC5wcm90b3R5cGUuX3JlY3lj
bGVCaW4pOgorICAgICAgICAoRGF5Q2VsbC5wcm90b3R5cGUudGhyb3dBd2F5KToKKyAgICAgICAg
KERheUNlbGwucHJvdG90eXBlLnNldEhpZ2hsaWdodGVkKTogU2V0cyB0aGUgaGlnaGxpZ2h0ZWQg
Y2xhc3Mgb24gdGhlIGVsZW1lbnQuCisgICAgICAgIChEYXlDZWxsLnByb3RvdHlwZS5zZXREaXNh
YmxlZCk6IFNldHMgdGhlIGRpc2FibGVkIGNsYXNzIG9uIHRoZSBlbGVtZW50LgorICAgICAgICAo
RGF5Q2VsbC5wcm90b3R5cGUuc2V0SXNJbkN1cnJlbnRNb250aCk6IFNldHMgdGhlIGN1cnJlbnQt
bW9udGggY2xhc3Mgb24gdGhlIGVsZW1lbnQuCisgICAgICAgIChEYXlDZWxsLnByb3RvdHlwZS5z
ZXRJc1RvZGF5KTogU2V0cyB0aGUgdG9kYXkgY2xhc3Mgb24gdGhlIGVsZW1lbnQuCisgICAgICAg
IChEYXlDZWxsLnByb3RvdHlwZS5yZXNldCk6IFJlc2V0cyB0aGUgZGF5IGNlbGwgdG8gYmUgcmV1
c2VkLgorICAgICAgICAoV2Vla051bWJlckNlbGwpOiBDZWxsIHVzZWQgZm9yIHRoZSB3ZWVrIG51
bWJlciBjb2x1bW4uCisgICAgICAgIChXZWVrTnVtYmVyQ2VsbC5wcm90b3R5cGUuX3JlY3ljbGVC
aW4pOgorICAgICAgICAoV2Vla051bWJlckNlbGwucmVjeWNsZU9yQ3JlYXRlKToKKyAgICAgICAg
KFdlZWtOdW1iZXJDZWxsLnByb3RvdHlwZS5yZXNldCk6CisgICAgICAgIChXZWVrTnVtYmVyQ2Vs
bC5wcm90b3R5cGUudGhyb3dBd2F5KToKKyAgICAgICAgKFdlZWtOdW1iZXJDZWxsLnByb3RvdHlw
ZS5zZXRIaWdobGlnaHRlZCk6IFNldHMgdGhlIGhpZ2hsaWdodGVkIGNsYXNzIG9uIHRoZSBlbGVt
ZW50LgorICAgICAgICAoV2Vla051bWJlckNlbGwucHJvdG90eXBlLnNldERpc2FibGVkKTogU2V0
cyB0aGUgZGlzYWJsZWQgY2xhc3Mgb24gdGhlIGVsZW1lbnQuCisgICAgICAgIChDYWxlbmRhclRh
YmxlSGVhZGVyVmlldyk6IEhlYWRlciBmb3IgdGhlIGNhbGVuZGFyIHRhYmxlLiBDb250YWlucyB0
aGUgY29sdW1uIGxhYmVscy4KKyAgICAgICAgKENhbGVuZGFyUm93Q2VsbCk6IFJvdyBjb250YWlu
aW5nIGRheSBjZWxscyBhbmQgbWF5YmUgYSB3ZWVrIG51bWJlciBjZWxsLgorICAgICAgICAoQ2Fs
ZW5kYXJSb3dDZWxsLnByb3RvdHlwZS5fcmVjeWNsZUJpbik6CisgICAgICAgIChDYWxlbmRhclJv
d0NlbGwucHJvdG90eXBlLnJlc2V0KToKKyAgICAgICAgKENhbGVuZGFyUm93Q2VsbC5wcm90b3R5
cGUudGhyb3dBd2F5KToKKyAgICAgICAgKENhbGVuZGFyVGFibGVWaWV3KTogQSBsaXN0IHZpZXcg
c2hvd2luZyBhIGdyaWQgb2YgZGF5cy4KKyAgICAgICAgKENhbGVuZGFyVGFibGVWaWV3LnByb3Rv
dHlwZS5yb3dBdFNjcm9sbE9mZnNldCk6IFJldHVybnMgdGhlIHJvdyBudW1iZXIgY3VycmVudGx5
IGF0IHRoZSBzY3JvbGwgb2Zmc2V0LgorICAgICAgICAoQ2FsZW5kYXJUYWJsZVZpZXcucHJvdG90
eXBlLnNjcm9sbE9mZnNldEZvclJvdyk6IFJldHVybnMgdGhlIGN1cnJlbnQgc2Nyb2xsIG9mZnNl
dCBmb3IgdGhlIGdpdmVuIHJvdy4KKyAgICAgICAgKENhbGVuZGFyVGFibGVWaWV3LnByb3RvdHlw
ZS5vbkNsaWNrKTogSWYgdGhlIGNsaWNrIGlzIG9uIGEgRGF5Q2VsbCBvciBXZWVrTnVtYmVyQ2Vs
bCwgc2VsZWN0IHRoZSBhcHByb3ByaWF0ZSBkYXRlIHJhbmdlLgorICAgICAgICAoQ2FsZW5kYXJU
YWJsZVZpZXcucHJvdG90eXBlLm9uTW91c2VPdmVyKTogSWYgdGhlIGNsaWNrIGlzIG9uIGEgRGF5
Q2VsbCBvciBXZWVrTnVtYmVyQ2VsbCwgaGlnaGxpZ2h0IHRoZSBhcHByb3ByaWF0ZSBkYXRlIHJh
bmdlLgorICAgICAgICAoQ2FsZW5kYXJUYWJsZVZpZXcucHJvdG90eXBlLm9uTW91c2VPdXQpOgor
ICAgICAgICAoQ2FsZW5kYXJUYWJsZVZpZXcucHJvdG90eXBlLnByZXBhcmVOZXdDZWxsKTogUHJl
cGFyZXMgYSBuZXcgcm93IGNlbGwgYnkgcmVjeWNsaW5nIG9yIGNyZWF0aW5nIGEgbmV3IG9uZS4K
KyAgICAgICAgKENhbGVuZGFyVGFibGVWaWV3LnByb3RvdHlwZS5oZWlnaHQpOiBSZXR1cm5zIHRo
ZSBoZWlnaHQgb2YgdGhlIHZpZXcgaW4gcGl4ZWxzLgorICAgICAgICAoQ2FsZW5kYXJUYWJsZVZp
ZXcucHJvdG90eXBlLnNldEhlaWdodCk6IFNldHMgdGhlIGhlaWdodCBvZiB0aGUgdmlldyBpbiBw
aXhlbHMuCisgICAgICAgIChDYWxlbmRhclRhYmxlVmlldy5wcm90b3R5cGUuc2Nyb2xsVG9Nb250
aCk6IFNjcm9sbHMgdG8gcmV2ZWFsIHRoZSBnaXZlbiBtb250aC4KKyAgICAgICAgKENhbGVuZGFy
VGFibGVWaWV3LnByb3RvdHlwZS5kYXlBdENvbHVtbkFuZFJvdyk6IERheSBhdCBhIGdpdmVuIGNv
bHVtbiBhbmQgcm93LiBDb2x1bW4gbnVtYmVyIGRvZXNuJ3QgY291bnQgd2VlayBudW1iZXIgY29s
dW1uLgorICAgICAgICAoQ2FsZW5kYXJUYWJsZVZpZXcucHJvdG90eXBlLmNvbHVtbkFuZFJvd0Zv
ckRheSk6IENvbHVtbiBhbmQgcm93IGZvciB0aGUgZ2l2ZW4gZGF5LgorICAgICAgICAoQ2FsZW5k
YXJUYWJsZVZpZXcucHJvdG90eXBlLnVwZGF0ZUNlbGxzKTogVXBkYXRlIHRoZSBwb3NpdGlvbiBh
bmQgYXBwZWFyYW5jZSBvZiB0aGUgY2VsbC5zCisgICAgICAgIChDYWxlbmRhclRhYmxlVmlldy5w
cm90b3R5cGUucHJlcGFyZU5ld0RheUNlbGwpOiBQcmVwYXJlcyBhIG5ldyBkYXkgY2VsbC4gVGhl
IGNlbGwgaXMgcmVnaXN0ZXJlZCB0byB0aGlzLl9kYXlDZWxscy4KKyAgICAgICAgKENhbGVuZGFy
VGFibGVWaWV3LnByb3RvdHlwZS5wcmVwYXJlTmV3V2Vla051bWJlckNlbGwpOiBQcmVwYXJlcyBh
IG5ldyB3ZWVrIG51bWJlciBjZWxsLiBUaGUgY2VsbCBpcyByZWdpc3RlcmVkIHRvIHRoaXMuX3dl
ZWtOdW1iZXJDZWxscy4KKyAgICAgICAgKENhbGVuZGFyVGFibGVWaWV3LnByb3RvdHlwZS50aHJv
d0F3YXlEYXlDZWxsKTogVGhlIGNlbGwgaXMgdW5yZWdpc3RlcmVkIGZyb20gdGhpcy5fZGF5Q2Vs
bHMuCisgICAgICAgIChDYWxlbmRhclRhYmxlVmlldy5wcm90b3R5cGUudGhyb3dBd2F5V2Vla051
bWJlckNlbGwpOiBUaGUgY2VsbCBpcyB1bnJlZ2lzdGVyZWQgZnJvbSB0aGlzLl93ZWVrTnVtYmVy
Q2VsbHMuCisKIDIwMTMtMDItMjggIEFua3VyIFRhbHkgIDxhdGFseUBnb29nbGUuY29tPgogCiAg
ICAgICAgIFdlYktpdCBBUEkgZm9yIGVuYWJsaW5nIERPTSBsb2dnaW5nIGZvciBjZXJ0YWluIHdv
cmxkcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUmVzb3VyY2VzL3BhZ2Vwb3B1cHMvY2Fs
ZW5kYXJQaWNrZXIuanMgYi9Tb3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMvcGFnZXBvcHVwcy9jYWxl
bmRhclBpY2tlci5qcwppbmRleCBlNjI5ZTQ2YTFiMWMyMTczNTM2YmQ0YWUzNGRhZTViMDllNzE4
YTk0Li42N2YxMmEwOTI3MGE0MDI5OWIwMzUwNzlhNDJmZGIxZjJjYjk1NThhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMvcGFnZXBvcHVwcy9jYWxlbmRhclBpY2tlci5qcwor
KysgYi9Tb3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMvcGFnZXBvcHVwcy9jYWxlbmRhclBpY2tlci5q
cwpAQCAtMzEsNiArMzEsNyBAQAogCiAvLyBGSVhNRToKIC8vICAtIFRvdWNoIGV2ZW50CisvLyAg
LSBBZGp1c3QgaGl0IHRhcmdldCBzaXplIGZvciB0b3VjaAogCiAvKioKICAqIENTUyBjbGFzcyBu
YW1lcy4KQEAgLTI3MzUsNiArMjczNiw1NTAgQEAgQ2FsZW5kYXJIZWFkZXJWaWV3LnByb3RvdHlw
ZS5zZXREaXNhYmxlZCA9IGZ1bmN0aW9uKGRpc2FibGVkKSB7CiAKIC8qKgogICogQGNvbnN0cnVj
dG9yCisgKiBAZXh0ZW5kcyBMaXN0Q2VsbAorICovCitmdW5jdGlvbiBEYXlDZWxsKCkgeworICAg
IExpc3RDZWxsLmNhbGwodGhpcyk7CisgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoRGF5
Q2VsbC5DbGFzc05hbWVEYXlDZWxsKTsKKyAgICB0aGlzLmVsZW1lbnQuc3R5bGUud2lkdGggPSBE
YXlDZWxsLldpZHRoICsgInB4IjsKKyAgICB0aGlzLmVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gRGF5
Q2VsbC5IZWlnaHQgKyAicHgiOworICAgIHRoaXMuZWxlbWVudC5zdHlsZS5saW5lSGVpZ2h0ID0g
KERheUNlbGwuSGVpZ2h0IC0gRGF5Q2VsbC5Cb3JkZXJXaWR0aCAqIDIpICsgInB4IjsKKyAgICAv
KioKKyAgICAgKiBAdHlwZSB7P0RheX0KKyAgICAgKi8KKyAgICB0aGlzLmRheSA9IG51bGw7Cit9
OworCitEYXlDZWxsLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTGlzdENlbGwucHJvdG90eXBl
KTsKKworRGF5Q2VsbC5XaWR0aCA9IDM0OworRGF5Q2VsbC5IZWlnaHQgPSAyMDsKK0RheUNlbGwu
Qm9yZGVyV2lkdGggPSAxOworRGF5Q2VsbC5DbGFzc05hbWVEYXlDZWxsID0gImRheS1jZWxsIjsK
K0RheUNlbGwuQ2xhc3NOYW1lSGlnaGxpZ2h0ZWQgPSAiaGlnaGxpZ2h0ZWQiOworRGF5Q2VsbC5D
bGFzc05hbWVEaXNhYmxlZCA9ICJkaXNhYmxlZCI7CitEYXlDZWxsLkNsYXNzTmFtZUN1cnJlbnRN
b250aCA9ICJjdXJyZW50LW1vbnRoIjsKK0RheUNlbGwuQ2xhc3NOYW1lVG9kYXkgPSAidG9kYXki
OworCitEYXlDZWxsLl9yZWN5Y2xlQmluID0gW107CisKK0RheUNlbGwucmVjeWNsZU9yQ3JlYXRl
ID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIERheUNlbGwuX3JlY3ljbGVCaW4ucG9wKCkgfHwg
bmV3IERheUNlbGwoKTsKK307CisKKy8qKgorICogQHJldHVybiB7IUFycmF5fQorICogQG92ZXJy
aWRlCisgKi8KK0RheUNlbGwucHJvdG90eXBlLl9yZWN5Y2xlQmluID0gZnVuY3Rpb24oKSB7Cisg
ICAgcmV0dXJuIERheUNlbGwuX3JlY3ljbGVCaW47Cit9OworCisvKioKKyAqIEBvdmVycmlkZQor
ICovCitEYXlDZWxsLnByb3RvdHlwZS50aHJvd0F3YXkgPSBmdW5jdGlvbigpIHsKKyAgICBMaXN0
Q2VsbC5wcm90b3R5cGUudGhyb3dBd2F5LmNhbGwodGhpcyk7CisgICAgdGhpcy5kYXkgPSBudWxs
OworfTsKKworLyoqCisgKiBAcGFyYW0geyFib29sZWFufSBoaWdobGlnaHRlZAorICovCitEYXlD
ZWxsLnByb3RvdHlwZS5zZXRIaWdobGlnaHRlZCA9IGZ1bmN0aW9uKGhpZ2hsaWdodGVkKSB7Cisg
ICAgaWYgKGhpZ2hsaWdodGVkKQorICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChE
YXlDZWxsLkNsYXNzTmFtZUhpZ2hsaWdodGVkKTsKKyAgICBlbHNlCisgICAgICAgIHRoaXMuZWxl
bWVudC5jbGFzc0xpc3QucmVtb3ZlKERheUNlbGwuQ2xhc3NOYW1lSGlnaGxpZ2h0ZWQpOworfTsK
KworLyoqCisgKiBAcGFyYW0geyFib29sZWFufSBkaXNhYmxlZAorICovCitEYXlDZWxsLnByb3Rv
dHlwZS5zZXREaXNhYmxlZCA9IGZ1bmN0aW9uKGRpc2FibGVkKSB7CisgICAgaWYgKGRpc2FibGVk
KQorICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChEYXlDZWxsLkNsYXNzTmFtZURp
c2FibGVkKTsKKyAgICBlbHNlCisgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QucmVtb3Zl
KERheUNlbGwuQ2xhc3NOYW1lRGlzYWJsZWQpOworfTsKKworLyoqCisgKiBAcGFyYW0geyFib29s
ZWFufSBzZWxlY3RlZAorICovCitEYXlDZWxsLnByb3RvdHlwZS5zZXRJc0luQ3VycmVudE1vbnRo
ID0gZnVuY3Rpb24oc2VsZWN0ZWQpIHsKKyAgICBpZiAoc2VsZWN0ZWQpCisgICAgICAgIHRoaXMu
ZWxlbWVudC5jbGFzc0xpc3QuYWRkKERheUNlbGwuQ2xhc3NOYW1lQ3VycmVudE1vbnRoKTsKKyAg
ICBlbHNlCisgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKERheUNlbGwuQ2xh
c3NOYW1lQ3VycmVudE1vbnRoKTsKK307CisKKy8qKgorICogQHBhcmFtIHshYm9vbGVhbn0gc2Vs
ZWN0ZWQKKyAqLworRGF5Q2VsbC5wcm90b3R5cGUuc2V0SXNUb2RheSA9IGZ1bmN0aW9uKHNlbGVj
dGVkKSB7CisgICAgaWYgKHNlbGVjdGVkKQorICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0
LmFkZChEYXlDZWxsLkNsYXNzTmFtZVRvZGF5KTsKKyAgICBlbHNlCisgICAgICAgIHRoaXMuZWxl
bWVudC5jbGFzc0xpc3QucmVtb3ZlKERheUNlbGwuQ2xhc3NOYW1lVG9kYXkpOworfTsKKworLyoq
CisgKiBAcGFyYW0geyFEYXl9IGRheQorICovCitEYXlDZWxsLnByb3RvdHlwZS5yZXNldCA9IGZ1
bmN0aW9uKGRheSkgeworICAgIHRoaXMuZGF5ID0gZGF5OworICAgIHRoaXMuZWxlbWVudC50ZXh0
Q29udGVudCA9IGxvY2FsaXplTnVtYmVyKHRoaXMuZGF5LmRhdGUudG9TdHJpbmcoKSk7CisgICAg
dGhpcy5zaG93KCk7Cit9OworCisvKioKKyAqIEBjb25zdHJ1Y3RvcgorICogQGV4dGVuZHMgTGlz
dENlbGwKKyAqLworZnVuY3Rpb24gV2Vla051bWJlckNlbGwoKSB7CisgICAgTGlzdENlbGwuY2Fs
bCh0aGlzKTsKKyAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChXZWVrTnVtYmVyQ2VsbC5D
bGFzc05hbWVXZWVrTnVtYmVyQ2VsbCk7CisgICAgdGhpcy5lbGVtZW50LnN0eWxlLndpZHRoID0g
KFdlZWtOdW1iZXJDZWxsLldpZHRoIC0gV2Vla051bWJlckNlbGwuUmlnaHRCb3JkZXJXaWR0aCkg
KyAicHgiOworICAgIHRoaXMuZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBXZWVrTnVtYmVyQ2VsbC5I
ZWlnaHQgKyAicHgiOworICAgIC8qKgorICAgICAqIEB0eXBlIHs/V2Vla30KKyAgICAgKi8KKyAg
ICB0aGlzLndlZWsgPSBudWxsOworfTsKKworV2Vla051bWJlckNlbGwucHJvdG90eXBlID0gT2Jq
ZWN0LmNyZWF0ZShMaXN0Q2VsbC5wcm90b3R5cGUpOworCitXZWVrTnVtYmVyQ2VsbC5XaWR0aCA9
IDQ4OworV2Vla051bWJlckNlbGwuSGVpZ2h0ID0gRGF5Q2VsbC5IZWlnaHQ7CitXZWVrTnVtYmVy
Q2VsbC5SaWdodEJvcmRlcldpZHRoID0gMTsKK1dlZWtOdW1iZXJDZWxsLkNsYXNzTmFtZVdlZWtO
dW1iZXJDZWxsID0gIndlZWstbnVtYmVyLWNlbGwiOworV2Vla051bWJlckNlbGwuQ2xhc3NOYW1l
SGlnaGxpZ2h0ZWQgPSAiaGlnaGxpZ2h0ZWQiOworV2Vla051bWJlckNlbGwuQ2xhc3NOYW1lRGlz
YWJsZWQgPSAiZGlzYWJsZWQiOworCitXZWVrTnVtYmVyQ2VsbC5fcmVjeWNsZUJpbiA9IFtdOwor
CisvKioKKyAqIEByZXR1cm4geyFBcnJheX0KKyAqIEBvdmVycmlkZQorICovCitXZWVrTnVtYmVy
Q2VsbC5wcm90b3R5cGUuX3JlY3ljbGVCaW4gPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gV2Vl
a051bWJlckNlbGwuX3JlY3ljbGVCaW47Cit9OworCisvKioKKyAqIEByZXR1cm4geyFXZWVrTnVt
YmVyQ2VsbH0KKyAqLworV2Vla051bWJlckNlbGwucmVjeWNsZU9yQ3JlYXRlID0gZnVuY3Rpb24o
KSB7CisgICAgcmV0dXJuIFdlZWtOdW1iZXJDZWxsLl9yZWN5Y2xlQmluLnBvcCgpIHx8IG5ldyBX
ZWVrTnVtYmVyQ2VsbCgpOworfTsKKworLyoqCisgKiBAcGFyYW0geyFXZWVrfSB3ZWVrCisgKi8K
K1dlZWtOdW1iZXJDZWxsLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uKHdlZWspIHsKKyAgICB0
aGlzLndlZWsgPSB3ZWVrOworICAgIHRoaXMuZWxlbWVudC50ZXh0Q29udGVudCA9IGxvY2FsaXpl
TnVtYmVyKHRoaXMud2Vlay53ZWVrLnRvU3RyaW5nKCkpOworICAgIHRoaXMuc2hvdygpOworfTsK
KworLyoqCisgKiBAb3ZlcnJpZGUKKyAqLworV2Vla051bWJlckNlbGwucHJvdG90eXBlLnRocm93
QXdheSA9IGZ1bmN0aW9uKCkgeworICAgIExpc3RDZWxsLnByb3RvdHlwZS50aHJvd0F3YXkuY2Fs
bCh0aGlzKTsKKyAgICB0aGlzLndlZWsgPSBudWxsOworfTsKKworV2Vla051bWJlckNlbGwucHJv
dG90eXBlLnNldEhpZ2hsaWdodGVkID0gZnVuY3Rpb24oaGlnaGxpZ2h0ZWQpIHsKKyAgICBpZiAo
aGlnaGxpZ2h0ZWQpCisgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKFdlZWtOdW1i
ZXJDZWxsLkNsYXNzTmFtZUhpZ2hsaWdodGVkKTsKKyAgICBlbHNlCisgICAgICAgIHRoaXMuZWxl
bWVudC5jbGFzc0xpc3QucmVtb3ZlKFdlZWtOdW1iZXJDZWxsLkNsYXNzTmFtZUhpZ2hsaWdodGVk
KTsKK307CisKK1dlZWtOdW1iZXJDZWxsLnByb3RvdHlwZS5zZXREaXNhYmxlZCA9IGZ1bmN0aW9u
KGRpc2FibGVkKSB7CisgICAgaWYgKGRpc2FibGVkKQorICAgICAgICB0aGlzLmVsZW1lbnQuY2xh
c3NMaXN0LmFkZChXZWVrTnVtYmVyQ2VsbC5DbGFzc05hbWVEaXNhYmxlZCk7CisgICAgZWxzZQor
ICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShXZWVrTnVtYmVyQ2VsbC5DbGFz
c05hbWVEaXNhYmxlZCk7Cit9OworCisvKioKKyAqIEBjb25zdHJ1Y3RvcgorICogQGV4dGVuZHMg
VmlldworICogQHBhcmFtIHshYm9vbGVhbn0gaGFzV2Vla051bWJlckNvbHVtbgorICovCitmdW5j
dGlvbiBDYWxlbmRhclRhYmxlSGVhZGVyVmlldyhoYXNXZWVrTnVtYmVyQ29sdW1uKSB7CisgICAg
Vmlldy5jYWxsKHRoaXMsIGNyZWF0ZUVsZW1lbnQoImRpdiIsICJjYWxlbmRhci10YWJsZS1oZWFk
ZXItdmlldyIpKTsKKyAgICBpZiAoaGFzV2Vla051bWJlckNvbHVtbikgeworICAgICAgICB2YXIg
d2Vla051bWJlckxhYmVsRWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQoImRpdiIsICJ3ZWVrLW51bWJl
ci1sYWJlbCIsIGdsb2JhbC5wYXJhbXMud2Vla0xhYmVsKTsKKyAgICAgICAgd2Vla051bWJlckxh
YmVsRWxlbWVudC5zdHlsZS53aWR0aCA9IFdlZWtOdW1iZXJDZWxsLldpZHRoICsgInB4IjsKKyAg
ICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHdlZWtOdW1iZXJMYWJlbEVsZW1lbnQpOwor
ICAgIH0KKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IERheXNQZXJXZWVrOyArK2kpIHsKKyAgICAg
ICAgdmFyIHdlZWtEYXlOdW1iZXIgPSAoZ2xvYmFsLnBhcmFtcy53ZWVrU3RhcnREYXkgKyBpKSAl
IERheXNQZXJXZWVrOworICAgICAgICB2YXIgbGFiZWxFbGVtZW50ID0gY3JlYXRlRWxlbWVudCgi
ZGl2IiwgIndlZWstZGF5LWxhYmVsIiwgZ2xvYmFsLnBhcmFtcy5kYXlMYWJlbHNbd2Vla0RheU51
bWJlcl0pOworICAgICAgICBsYWJlbEVsZW1lbnQuc3R5bGUud2lkdGggPSBEYXlDZWxsLldpZHRo
ICsgInB4IjsKKyAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGxhYmVsRWxlbWVudCk7
CisgICAgICAgIGlmIChnZXRMYW5ndWFnZSgpID09PSAiamEiKSB7CisgICAgICAgICAgICBpZiAo
d2Vla0RheU51bWJlciA9PT0gMCkKKyAgICAgICAgICAgICAgICBsYWJlbEVsZW1lbnQuc3R5bGUu
Y29sb3IgPSAicmVkIjsKKyAgICAgICAgICAgIGVsc2UgaWYgKHdlZWtEYXlOdW1iZXIgPT09IDYp
CisgICAgICAgICAgICAgICAgbGFiZWxFbGVtZW50LnN0eWxlLmNvbG9yID0gImJsdWUiOworICAg
ICAgICB9CisgICAgfQorfQorCitDYWxlbmRhclRhYmxlSGVhZGVyVmlldy5wcm90b3R5cGUgPSBP
YmplY3QuY3JlYXRlKFZpZXcucHJvdG90eXBlKTsKKworQ2FsZW5kYXJUYWJsZUhlYWRlclZpZXcu
SGVpZ2h0ID0gMjU7CisKKy8qKgorICogQGNvbnN0cnVjdG9yCisgKiBAZXh0ZW5kcyBMaXN0Q2Vs
bAorICovCitmdW5jdGlvbiBDYWxlbmRhclJvd0NlbGwoKSB7CisgICAgTGlzdENlbGwuY2FsbCh0
aGlzKTsKKyAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChDYWxlbmRhclJvd0NlbGwuQ2xh
c3NOYW1lQ2FsZW5kYXJSb3dDZWxsKTsKKyAgICB0aGlzLmVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0g
Q2FsZW5kYXJSb3dDZWxsLkhlaWdodCArICJweCI7CisKKyAgICAvKioKKyAgICAgKiBAdHlwZSB7
IUFycmF5fQorICAgICAqIEBwcm90ZWN0ZWQKKyAgICAgKi8KKyAgICB0aGlzLl9kYXlDZWxscyA9
IFtdOworICAgIC8qKgorICAgICAqIEB0eXBlIHshbnVtYmVyfQorICAgICAqLworICAgIHRoaXMu
cm93ID0gMDsKKyAgICAvKioKKyAgICAgKiBAdHlwZSB7P0NhbGVuZGFyVGFibGVWaWV3fQorICAg
ICAqLworICAgIHRoaXMuY2FsZW5kYXJUYWJsZVZpZXcgPSBudWxsOworfQorCitDYWxlbmRhclJv
d0NlbGwucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShMaXN0Q2VsbC5wcm90b3R5cGUpOworCitD
YWxlbmRhclJvd0NlbGwuSGVpZ2h0ID0gRGF5Q2VsbC5IZWlnaHQ7CitDYWxlbmRhclJvd0NlbGwu
Q2xhc3NOYW1lQ2FsZW5kYXJSb3dDZWxsID0gImNhbGVuZGFyLXJvdy1jZWxsIjsKKworQ2FsZW5k
YXJSb3dDZWxsLl9yZWN5Y2xlQmluID0gW107CisKKy8qKgorICogQHJldHVybiB7IUFycmF5fQor
ICogQG92ZXJyaWRlCisgKi8KK0NhbGVuZGFyUm93Q2VsbC5wcm90b3R5cGUuX3JlY3ljbGVCaW4g
PSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gQ2FsZW5kYXJSb3dDZWxsLl9yZWN5Y2xlQmluOwor
fTsKKworLyoqCisgKiBAcGFyYW0geyFudW1iZXJ9IHJvdworICogQHBhcmFtIHshQ2FsZW5kYXJU
YWJsZVZpZXd9IGNhbGVuZGFyVGFibGVWaWV3CisgKi8KK0NhbGVuZGFyUm93Q2VsbC5wcm90b3R5
cGUucmVzZXQgPSBmdW5jdGlvbihyb3csIGNhbGVuZGFyVGFibGVWaWV3KSB7CisgICAgdGhpcy5y
b3cgPSByb3c7CisgICAgdGhpcy5jYWxlbmRhclRhYmxlVmlldyA9IGNhbGVuZGFyVGFibGVWaWV3
OworICAgIGlmICh0aGlzLmNhbGVuZGFyVGFibGVWaWV3Lmhhc1dlZWtOdW1iZXJDb2x1bW4pIHsK
KyAgICAgICAgdmFyIG1pZGRsZURheSA9IHRoaXMuY2FsZW5kYXJUYWJsZVZpZXcuZGF5QXRDb2x1
bW5BbmRSb3coMywgcm93KTsKKyAgICAgICAgdmFyIHdlZWsgPSBXZWVrLmNyZWF0ZUZyb21EYXko
bWlkZGxlRGF5KTsKKyAgICAgICAgdGhpcy53ZWVrTnVtYmVyQ2VsbCA9IHRoaXMuY2FsZW5kYXJU
YWJsZVZpZXcucHJlcGFyZU5ld1dlZWtOdW1iZXJDZWxsKHdlZWspOworICAgICAgICB0aGlzLndl
ZWtOdW1iZXJDZWxsLmF0dGFjaFRvKHRoaXMpOworICAgIH0KKyAgICB2YXIgZGF5ID0gY2FsZW5k
YXJUYWJsZVZpZXcuZGF5QXRDb2x1bW5BbmRSb3coMCwgcm93KTsKKyAgICBmb3IgKHZhciBpID0g
MDsgaSA8IERheXNQZXJXZWVrOyArK2kpIHsKKyAgICAgICAgdmFyIGRheUNlbGwgPSB0aGlzLmNh
bGVuZGFyVGFibGVWaWV3LnByZXBhcmVOZXdEYXlDZWxsKGRheSk7CisgICAgICAgIGRheUNlbGwu
YXR0YWNoVG8odGhpcyk7CisgICAgICAgIHRoaXMuX2RheUNlbGxzLnB1c2goZGF5Q2VsbCk7Cisg
ICAgICAgIGRheSA9IGRheS5uZXh0KCk7CisgICAgfQorICAgIHRoaXMuc2hvdygpOworfTsKKwor
LyoqCisgKiBAb3ZlcnJpZGUKKyAqLworQ2FsZW5kYXJSb3dDZWxsLnByb3RvdHlwZS50aHJvd0F3
YXkgPSBmdW5jdGlvbigpIHsKKyAgICBMaXN0Q2VsbC5wcm90b3R5cGUudGhyb3dBd2F5LmNhbGwo
dGhpcyk7CisgICAgaWYgKHRoaXMud2Vla051bWJlckNlbGwpCisgICAgICAgIHRoaXMuY2FsZW5k
YXJUYWJsZVZpZXcudGhyb3dBd2F5V2Vla051bWJlckNlbGwodGhpcy53ZWVrTnVtYmVyQ2VsbCk7
CisgICAgdGhpcy5fZGF5Q2VsbHMuZm9yRWFjaCh0aGlzLmNhbGVuZGFyVGFibGVWaWV3LnRocm93
QXdheURheUNlbGwsIHRoaXMuY2FsZW5kYXJUYWJsZVZpZXcpOworICAgIHRoaXMuX2RheUNlbGxz
Lmxlbmd0aCA9IDA7Cit9OworCisvKioKKyAqIEBjb25zdHJ1Y3RvcgorICogQGV4dGVuZHMgTGlz
dFZpZXcKKyAqIEBwYXJhbSB7IUNhbGVuZGFyUGlja2VyfSBjYWxlbmRhclBpY2tlcgorICovCitm
dW5jdGlvbiBDYWxlbmRhclRhYmxlVmlldyhjYWxlbmRhclBpY2tlcikgeworICAgIExpc3RWaWV3
LmNhbGwodGhpcyk7CisgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ2FsZW5kYXJUYWJs
ZVZpZXcuQ2xhc3NOYW1lQ2FsZW5kYXJUYWJsZVZpZXcpOworICAgIHRoaXMuZWxlbWVudC50YWJJ
bmRleCA9IDA7CisKKyAgICAvKioKKyAgICAgKiBAdHlwZSB7IWJvb2xlYW59CisgICAgICogQGNv
bnN0CisgICAgICovCisgICAgdGhpcy5oYXNXZWVrTnVtYmVyQ29sdW1uID0gY2FsZW5kYXJQaWNr
ZXIudHlwZSA9PT0gIndlZWsiOworICAgIC8qKgorICAgICAqIEB0eXBlIHshQ2FsZW5kYXJQaWNr
ZXJ9CisgICAgICogQGNvbnN0CisgICAgICovCisgICAgdGhpcy5jYWxlbmRhclBpY2tlciA9IGNh
bGVuZGFyUGlja2VyOworICAgIC8qKgorICAgICAqIEB0eXBlIHshT2JqZWN0fQorICAgICAqIEBj
b25zdAorICAgICAqLworICAgIHRoaXMuX2RheUNlbGxzID0ge307CisgICAgdmFyIGhlYWRlclZp
ZXcgPSBuZXcgQ2FsZW5kYXJUYWJsZUhlYWRlclZpZXcodGhpcy5oYXNXZWVrTnVtYmVyQ29sdW1u
KTsKKyAgICBoZWFkZXJWaWV3LmF0dGFjaFRvKHRoaXMsIHRoaXMuc2Nyb2xsVmlldyk7CisKKyAg
ICBpZiAodGhpcy5oYXNXZWVrTnVtYmVyQ29sdW1uKSB7CisgICAgICAgIHRoaXMuc2V0V2lkdGgo
RGF5Q2VsbC5XaWR0aCAqIERheXNQZXJXZWVrICsgV2Vla051bWJlckNlbGwuV2lkdGgpOworICAg
ICAgICAvKioKKyAgICAgICAgICogQHR5cGUgez9BcnJheX0KKyAgICAgICAgICogQGNvbnN0Cisg
ICAgICAgICAqLworICAgICAgICB0aGlzLl93ZWVrTnVtYmVyQ2VsbHMgPSBbXTsKKyAgICB9IGVs
c2UgeworICAgICAgICB0aGlzLnNldFdpZHRoKERheUNlbGwuV2lkdGggKiBEYXlzUGVyV2Vlayk7
CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIEB0eXBlIHshYm9vbGVhbn0KKyAgICAgKiBA
cHJvdGVjdGVkCisgICAgICovCisgICAgdGhpcy5faWdub3JlTW91c2VPdXRVbnRpbGxOZXh0TW91
c2VPdmVyID0gZmFsc2U7CisKKyAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xp
Y2siLCB0aGlzLm9uQ2xpY2ssIGZhbHNlKTsKKyAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0
ZW5lcigibW91c2VvdmVyIiwgdGhpcy5vbk1vdXNlT3ZlciwgZmFsc2UpOworICAgIHRoaXMuZWxl
bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW91dCIsIHRoaXMub25Nb3VzZU91dCwgZmFsc2Up
OworCisgICAgLy8geW91IHNob3VsZG4ndCBiZSBhYmxlIHRvIHVzZSB0aGUgbW91c2Ugd2hlZWwg
dG8gc2Nyb2xsLgorICAgIHRoaXMuc2Nyb2xsVmlldy5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVu
ZXIoIm1vdXNld2hlZWwiLCB0aGlzLnNjcm9sbFZpZXcub25Nb3VzZVdoZWVsLCBmYWxzZSk7Cit9
CisKK0NhbGVuZGFyVGFibGVWaWV3LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTGlzdFZpZXcu
cHJvdG90eXBlKTsKKworQ2FsZW5kYXJUYWJsZVZpZXcuQm9yZGVyV2lkdGggPSAxOworQ2FsZW5k
YXJUYWJsZVZpZXcuQ2xhc3NOYW1lQ2FsZW5kYXJUYWJsZVZpZXcgPSAiY2FsZW5kYXItdGFibGUt
dmlldyI7CisKKy8qKgorICogQHBhcmFtIHshbnVtYmVyfSBzY3JvbGxPZmZzZXQKKyAqIEByZXR1
cm4geyFudW1iZXJ9CisgKi8KK0NhbGVuZGFyVGFibGVWaWV3LnByb3RvdHlwZS5yb3dBdFNjcm9s
bE9mZnNldCA9IGZ1bmN0aW9uKHNjcm9sbE9mZnNldCkgeworICAgIHJldHVybiBNYXRoLmZsb29y
KHNjcm9sbE9mZnNldCAvIENhbGVuZGFyUm93Q2VsbC5IZWlnaHQpOworfTsKKworLyoqCisgKiBA
cGFyYW0geyFudW1iZXJ9IHJvdworICogQHJldHVybiB7IW51bWJlcn0KKyAqLworQ2FsZW5kYXJU
YWJsZVZpZXcucHJvdG90eXBlLnNjcm9sbE9mZnNldEZvclJvdyA9IGZ1bmN0aW9uKHJvdykgewor
ICAgIHJldHVybiByb3cgKiBDYWxlbmRhclJvd0NlbGwuSGVpZ2h0OworfTsKKworLyoqCisgKiBA
cGFyYW0gez9FdmVudH0gZXZlbnQKKyAqLworQ2FsZW5kYXJUYWJsZVZpZXcucHJvdG90eXBlLm9u
Q2xpY2sgPSBmdW5jdGlvbihldmVudCkgeworICAgIGlmICh0aGlzLmhhc1dlZWtOdW1iZXJDb2x1
bW4pIHsKKyAgICAgICAgdmFyIHdlZWtOdW1iZXJDZWxsRWxlbWVudCA9IGVuY2xvc2luZ05vZGVP
clNlbGZXaXRoQ2xhc3MoZXZlbnQudGFyZ2V0LCBXZWVrTnVtYmVyQ2VsbC5DbGFzc05hbWVXZWVr
TnVtYmVyQ2VsbCk7CisgICAgICAgIGlmICh3ZWVrTnVtYmVyQ2VsbEVsZW1lbnQpIHsKKyAgICAg
ICAgICAgIHZhciB3ZWVrTnVtYmVyQ2VsbCA9IHdlZWtOdW1iZXJDZWxsRWxlbWVudC4kdmlldzsK
KyAgICAgICAgICAgIHRoaXMuY2FsZW5kYXJQaWNrZXIuc2VsZWN0UmFuZ2VDb250YWluaW5nRGF5
KHdlZWtOdW1iZXJDZWxsLndlZWsuZmlyc3REYXkoKSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICB9CisgICAgdmFyIGRheUNlbGxFbGVtZW50ID0gZW5jbG9zaW5nTm9kZU9y
U2VsZldpdGhDbGFzcyhldmVudC50YXJnZXQsIERheUNlbGwuQ2xhc3NOYW1lRGF5Q2VsbCk7Cisg
ICAgaWYgKCFkYXlDZWxsRWxlbWVudCkKKyAgICAgICAgcmV0dXJuOworICAgIHZhciBkYXlDZWxs
ID0gZGF5Q2VsbEVsZW1lbnQuJHZpZXc7CisgICAgdGhpcy5jYWxlbmRhclBpY2tlci5zZWxlY3RS
YW5nZUNvbnRhaW5pbmdEYXkoZGF5Q2VsbC5kYXkpOworfTsKKworLyoqCisgKiBAcGFyYW0gez9F
dmVudH0gZXZlbnQKKyAqLworQ2FsZW5kYXJUYWJsZVZpZXcucHJvdG90eXBlLm9uTW91c2VPdmVy
ID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICBpZiAodGhpcy5oYXNXZWVrTnVtYmVyQ29sdW1uKSB7
CisgICAgICAgIHZhciB3ZWVrTnVtYmVyQ2VsbEVsZW1lbnQgPSBlbmNsb3NpbmdOb2RlT3JTZWxm
V2l0aENsYXNzKGV2ZW50LnRhcmdldCwgV2Vla051bWJlckNlbGwuQ2xhc3NOYW1lV2Vla051bWJl
ckNlbGwpOworICAgICAgICBpZiAod2Vla051bWJlckNlbGxFbGVtZW50KSB7CisgICAgICAgICAg
ICB2YXIgd2Vla051bWJlckNlbGwgPSB3ZWVrTnVtYmVyQ2VsbEVsZW1lbnQuJHZpZXc7CisgICAg
ICAgICAgICB0aGlzLmNhbGVuZGFyUGlja2VyLmhpZ2hsaWdodFJhbmdlQ29udGFpbmluZ0RheSh3
ZWVrTnVtYmVyQ2VsbC53ZWVrLmZpcnN0RGF5KCkpOworICAgICAgICAgICAgdGhpcy5faWdub3Jl
TW91c2VPdXRVbnRpbGxOZXh0TW91c2VPdmVyID0gZmFsc2U7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICB9CisgICAgdmFyIGRheUNlbGxFbGVtZW50ID0gZW5jbG9zaW5nTm9k
ZU9yU2VsZldpdGhDbGFzcyhldmVudC50YXJnZXQsIERheUNlbGwuQ2xhc3NOYW1lRGF5Q2VsbCk7
CisgICAgaWYgKCFkYXlDZWxsRWxlbWVudCkKKyAgICAgICAgcmV0dXJuOworICAgIHZhciBkYXlD
ZWxsID0gZGF5Q2VsbEVsZW1lbnQuJHZpZXc7CisgICAgdGhpcy5jYWxlbmRhclBpY2tlci5oaWdo
bGlnaHRSYW5nZUNvbnRhaW5pbmdEYXkoZGF5Q2VsbC5kYXkpOworICAgIHRoaXMuX2lnbm9yZU1v
dXNlT3V0VW50aWxsTmV4dE1vdXNlT3ZlciA9IGZhbHNlOworfTsKKworLyoqCisgKiBAcGFyYW0g
ez9FdmVudH0gZXZlbnQKKyAqLworQ2FsZW5kYXJUYWJsZVZpZXcucHJvdG90eXBlLm9uTW91c2VP
dXQgPSBmdW5jdGlvbihldmVudCkgeworICAgIGlmICh0aGlzLl9pZ25vcmVNb3VzZU91dFVudGls
bE5leHRNb3VzZU92ZXIpCisgICAgICAgIHJldHVybjsKKyAgICB2YXIgZGF5Q2VsbEVsZW1lbnQg
PSBlbmNsb3NpbmdOb2RlT3JTZWxmV2l0aENsYXNzKGV2ZW50LnRhcmdldCwgRGF5Q2VsbC5DbGFz
c05hbWVEYXlDZWxsKTsKKyAgICBpZiAoIWRheUNlbGxFbGVtZW50KSB7CisgICAgICAgIHRoaXMu
Y2FsZW5kYXJQaWNrZXIuaGlnaGxpZ2h0UmFuZ2VDb250YWluaW5nRGF5KG51bGwpOworICAgIH0K
K307CisKKy8qKgorICogQHBhcmFtIHshbnVtYmVyfSByb3cKKyAqIEByZXR1cm4geyFDYWxlbmRh
clJvd0NlbGx9CisgKi8KK0NhbGVuZGFyVGFibGVWaWV3LnByb3RvdHlwZS5wcmVwYXJlTmV3Q2Vs
bCA9IGZ1bmN0aW9uKHJvdykgeworICAgIHZhciBjZWxsID0gQ2FsZW5kYXJSb3dDZWxsLl9yZWN5
Y2xlQmluLnBvcCgpIHx8IG5ldyBDYWxlbmRhclJvd0NlbGwoKTsKKyAgICBjZWxsLnJlc2V0KHJv
dywgdGhpcyk7CisgICAgcmV0dXJuIGNlbGw7Cit9OworCisvKioKKyAqIEByZXR1cm4geyFudW1i
ZXJ9IEhlaWdodCBpbiBwaXhlbHMuCisgKi8KK0NhbGVuZGFyVGFibGVWaWV3LnByb3RvdHlwZS5o
ZWlnaHQgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gdGhpcy5zY3JvbGxWaWV3LmhlaWdodCgp
ICsgQ2FsZW5kYXJUYWJsZUhlYWRlclZpZXcuSGVpZ2h0ICsgQ2FsZW5kYXJUYWJsZVZpZXcuQm9y
ZGVyV2lkdGggKiAyOworfTsKKworLyoqCisgKiBAcGFyYW0geyFudW1iZXJ9IGhlaWdodCBIZWln
aHQgaW4gcGl4ZWxzLgorICovCitDYWxlbmRhclRhYmxlVmlldy5wcm90b3R5cGUuc2V0SGVpZ2h0
ID0gZnVuY3Rpb24oaGVpZ2h0KSB7CisgICAgdGhpcy5zY3JvbGxWaWV3LnNldEhlaWdodChoZWln
aHQgLSBDYWxlbmRhclRhYmxlSGVhZGVyVmlldy5IZWlnaHQgLSBDYWxlbmRhclRhYmxlVmlldy5C
b3JkZXJXaWR0aCAqIDIpOworfTsKKworLyoqCisgKiBAcGFyYW0geyFNb250aH0gbW9udGgKKyAq
IEBwYXJhbSB7IWJvb2xlYW59IGFuaW1hdGUKKyAqLworQ2FsZW5kYXJUYWJsZVZpZXcucHJvdG90
eXBlLnNjcm9sbFRvTW9udGggPSBmdW5jdGlvbihtb250aCwgYW5pbWF0ZSkgeworICAgIHZhciBy
b3dGb3JGaXJzdERheUluTW9udGggPSB0aGlzLmNvbHVtbkFuZFJvd0ZvckRheShtb250aC5maXJz
dERheSgpKS5yb3c7CisgICAgdGhpcy5zY3JvbGxWaWV3LnNjcm9sbFRvKHRoaXMuc2Nyb2xsT2Zm
c2V0Rm9yUm93KHJvd0ZvckZpcnN0RGF5SW5Nb250aCksIGFuaW1hdGUpOworfTsKKworLyoqCisg
KiBAcGFyYW0geyFudW1iZXJ9IGNvbHVtbgorICogQHBhcmFtIHshbnVtYmVyfSByb3cKKyAqIEBy
ZXR1cm4geyFEYXl9CisgKi8KK0NhbGVuZGFyVGFibGVWaWV3LnByb3RvdHlwZS5kYXlBdENvbHVt
bkFuZFJvdyA9IGZ1bmN0aW9uKGNvbHVtbiwgcm93KSB7CisgICAgdmFyIGRheXNTaW5jZU1pbmlt
dW0gPSByb3cgKiBEYXlzUGVyV2VlayArIGNvbHVtbiArIGdsb2JhbC5wYXJhbXMud2Vla1N0YXJ0
RGF5IC0gQ2FsZW5kYXJUYWJsZVZpZXcuX01pbmltdW1EYXlXZWVrRGF5OworICAgIHJldHVybiBE
YXkuY3JlYXRlRnJvbVZhbHVlKGRheXNTaW5jZU1pbmltdW0gKiBNaWxsaXNlY29uZHNQZXJEYXkg
KyBDYWxlbmRhclRhYmxlVmlldy5fTWluaW11bURheVZhbHVlKTsKK307CisKK0NhbGVuZGFyVGFi
bGVWaWV3Ll9NaW5pbXVtRGF5VmFsdWUgPSBEYXkuTWluaW11bS52YWx1ZU9mKCk7CitDYWxlbmRh
clRhYmxlVmlldy5fTWluaW11bURheVdlZWtEYXkgPSBEYXkuTWluaW11bS53ZWVrRGF5KCk7CisK
Ky8qKgorICogQHBhcmFtIHshRGF5fSBkYXkKKyAqIEByZXR1cm4geyFPYmplY3R9IE9iamVjdCB3
aXRoIHByb3BlcnRpZXMgY29sdW1uIGFuZCByb3cuCisgKi8KK0NhbGVuZGFyVGFibGVWaWV3LnBy
b3RvdHlwZS5jb2x1bW5BbmRSb3dGb3JEYXkgPSBmdW5jdGlvbihkYXkpIHsKKyAgICB2YXIgZGF5
c1NpbmNlTWluaW11bSA9IChkYXkudmFsdWVPZigpIC0gQ2FsZW5kYXJUYWJsZVZpZXcuX01pbmlt
dW1EYXlWYWx1ZSkgLyBNaWxsaXNlY29uZHNQZXJEYXk7CisgICAgdmFyIG9mZnNldCA9IGRheXNT
aW5jZU1pbmltdW0gKyBDYWxlbmRhclRhYmxlVmlldy5fTWluaW11bURheVdlZWtEYXkgLSBnbG9i
YWwucGFyYW1zLndlZWtTdGFydERheTsKKyAgICB2YXIgcm93ID0gTWF0aC5mbG9vcihvZmZzZXQg
LyBEYXlzUGVyV2Vlayk7CisgICAgdmFyIGNvbHVtbiA9IG9mZnNldCAtIHJvdyAqIERheXNQZXJX
ZWVrOworICAgIHJldHVybiB7CisgICAgICAgIGNvbHVtbjogY29sdW1uLAorICAgICAgICByb3c6
IHJvdworICAgIH07Cit9OworCitDYWxlbmRhclRhYmxlVmlldy5wcm90b3R5cGUudXBkYXRlQ2Vs
bHMgPSBmdW5jdGlvbigpIHsKKyAgICBMaXN0Vmlldy5wcm90b3R5cGUudXBkYXRlQ2VsbHMuY2Fs
bCh0aGlzKTsKKworICAgIHZhciBzZWxlY3Rpb24gPSB0aGlzLmNhbGVuZGFyUGlja2VyLnNlbGVj
dGlvbigpOworICAgIHZhciBmaXJzdERheUluU2VsZWN0aW9uOworICAgIHZhciBsYXN0RGF5SW5T
ZWxlY3Rpb247CisgICAgaWYgKHNlbGVjdGlvbikgeworICAgICAgICBmaXJzdERheUluU2VsZWN0
aW9uID0gc2VsZWN0aW9uLmZpcnN0RGF5KCkudmFsdWVPZigpOworICAgICAgICBsYXN0RGF5SW5T
ZWxlY3Rpb24gPSBzZWxlY3Rpb24ubGFzdERheSgpLnZhbHVlT2YoKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBmaXJzdERheUluU2VsZWN0aW9uID0gSW5maW5pdHk7CisgICAgICAgIGxhc3REYXlJ
blNlbGVjdGlvbiA9IEluZmluaXR5OworICAgIH0KKyAgICB2YXIgaGlnaGxpZ2h0ID0gdGhpcy5j
YWxlbmRhclBpY2tlci5oaWdobGlnaHQoKTsKKyAgICB2YXIgZmlyc3REYXlJbkhpZ2hsaWdodDsK
KyAgICB2YXIgbGFzdERheUluSGlnaGxpZ2h0OworICAgIGlmIChoaWdobGlnaHQpIHsKKyAgICAg
ICAgZmlyc3REYXlJbkhpZ2hsaWdodCA9IGhpZ2hsaWdodC5maXJzdERheSgpLnZhbHVlT2YoKTsK
KyAgICAgICAgbGFzdERheUluSGlnaGxpZ2h0ID0gaGlnaGxpZ2h0Lmxhc3REYXkoKS52YWx1ZU9m
KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZmlyc3REYXlJbkhpZ2hsaWdodCA9IEluZmluaXR5
OworICAgICAgICBsYXN0RGF5SW5IaWdobGlnaHQgPSBJbmZpbml0eTsKKyAgICB9CisgICAgdmFy
IGN1cnJlbnRNb250aCA9IHRoaXMuY2FsZW5kYXJQaWNrZXIuY3VycmVudE1vbnRoKCk7CisgICAg
dmFyIGZpcnN0RGF5SW5DdXJyZW50TW9udGggPSBjdXJyZW50TW9udGguZmlyc3REYXkoKS52YWx1
ZU9mKCk7CisgICAgdmFyIGxhc3REYXlJbkN1cnJlbnRNb250aCA9IGN1cnJlbnRNb250aC5sYXN0
RGF5KCkudmFsdWVPZigpOworICAgIGZvciAodmFyIGRheVN0cmluZyBpbiB0aGlzLl9kYXlDZWxs
cykgeworICAgICAgICB2YXIgZGF5Q2VsbCA9IHRoaXMuX2RheUNlbGxzW2RheVN0cmluZ107Cisg
ICAgICAgIHZhciBkYXkgPSBkYXlDZWxsLmRheTsKKyAgICAgICAgZGF5Q2VsbC5zZXRJc1RvZGF5
KERheS5jcmVhdGVGcm9tVG9kYXkoKS5lcXVhbHMoZGF5KSk7CisgICAgICAgIGRheUNlbGwuc2V0
U2VsZWN0ZWQoZGF5ID49IGZpcnN0RGF5SW5TZWxlY3Rpb24gJiYgZGF5IDw9IGxhc3REYXlJblNl
bGVjdGlvbik7CisgICAgICAgIGRheUNlbGwuc2V0SGlnaGxpZ2h0ZWQoZGF5ID49IGZpcnN0RGF5
SW5IaWdobGlnaHQgJiYgZGF5IDw9IGxhc3REYXlJbkhpZ2hsaWdodCk7CisgICAgICAgIGRheUNl
bGwuc2V0SXNJbkN1cnJlbnRNb250aChkYXkgPj0gZmlyc3REYXlJbkN1cnJlbnRNb250aCAmJiBk
YXkgPD0gbGFzdERheUluQ3VycmVudE1vbnRoKTsKKyAgICAgICAgZGF5Q2VsbC5zZXREaXNhYmxl
ZCghdGhpcy5jYWxlbmRhclBpY2tlci5pc1ZhbGlkRGF5KGRheSkpOworICAgIH0KKyAgICBpZiAo
dGhpcy5oYXNXZWVrTnVtYmVyQ29sdW1uKSB7CisgICAgICAgIGZvciAodmFyIHdlZWtTdHJpbmcg
aW4gdGhpcy5fd2Vla051bWJlckNlbGxzKSB7CisgICAgICAgICAgICB2YXIgd2Vla051bWJlckNl
bGwgPSB0aGlzLl93ZWVrTnVtYmVyQ2VsbHNbd2Vla1N0cmluZ107CisgICAgICAgICAgICB2YXIg
d2VlayA9IHdlZWtOdW1iZXJDZWxsLndlZWs7CisgICAgICAgICAgICB3ZWVrTnVtYmVyQ2VsbC5z
ZXRTZWxlY3RlZChzZWxlY3Rpb24gJiYgc2VsZWN0aW9uLmVxdWFscyh3ZWVrKSk7CisgICAgICAg
ICAgICB3ZWVrTnVtYmVyQ2VsbC5zZXRIaWdobGlnaHRlZChoaWdobGlnaHQgJiYgaGlnaGxpZ2h0
LmVxdWFscyh3ZWVrKSk7CisgICAgICAgICAgICB3ZWVrTnVtYmVyQ2VsbC5zZXREaXNhYmxlZCgh
dGhpcy5jYWxlbmRhclBpY2tlci5pc1ZhbGlkKHdlZWspKTsKKyAgICAgICAgfQorICAgIH0KK307
CisKKy8qKgorICogQHBhcmFtIHshRGF5fSBkYXkKKyAqIEByZXR1cm4geyFEYXlDZWxsfQorICov
CitDYWxlbmRhclRhYmxlVmlldy5wcm90b3R5cGUucHJlcGFyZU5ld0RheUNlbGwgPSBmdW5jdGlv
bihkYXkpIHsKKyAgICB2YXIgZGF5Q2VsbCA9IERheUNlbGwucmVjeWNsZU9yQ3JlYXRlKCk7Cisg
ICAgZGF5Q2VsbC5yZXNldChkYXkpOworICAgIHRoaXMuX2RheUNlbGxzW2RheUNlbGwuZGF5LnRv
U3RyaW5nKCldID0gZGF5Q2VsbDsKKyAgICByZXR1cm4gZGF5Q2VsbDsKK307CisKKy8qKgorICog
QHBhcmFtIHshV2Vla30gd2VlaworICogQHJldHVybiB7IVdlZWtOdW1iZXJDZWxsfQorICovCitD
YWxlbmRhclRhYmxlVmlldy5wcm90b3R5cGUucHJlcGFyZU5ld1dlZWtOdW1iZXJDZWxsID0gZnVu
Y3Rpb24od2VlaykgeworICAgIHZhciB3ZWVrTnVtYmVyQ2VsbCA9IFdlZWtOdW1iZXJDZWxsLnJl
Y3ljbGVPckNyZWF0ZSgpOworICAgIHdlZWtOdW1iZXJDZWxsLnJlc2V0KHdlZWspOworICAgIHRo
aXMuX3dlZWtOdW1iZXJDZWxsc1t3ZWVrTnVtYmVyQ2VsbC53ZWVrLnRvU3RyaW5nKCldID0gd2Vl
a051bWJlckNlbGw7CisgICAgcmV0dXJuIHdlZWtOdW1iZXJDZWxsOworfTsKKworLyoqCisgKiBA
cGFyYW0geyFEYXlDZWxsfSBkYXlDZWxsCisgKi8KK0NhbGVuZGFyVGFibGVWaWV3LnByb3RvdHlw
ZS50aHJvd0F3YXlEYXlDZWxsID0gZnVuY3Rpb24oZGF5Q2VsbCkgeworICAgIGRlbGV0ZSB0aGlz
Ll9kYXlDZWxsc1tkYXlDZWxsLmRheS50b1N0cmluZygpXTsKKyAgICBkYXlDZWxsLnRocm93QXdh
eSgpOworfTsKKworLyoqCisgKiBAcGFyYW0geyFXZWVrTnVtYmVyQ2VsbH0gd2Vla051bWJlckNl
bGwKKyAqLworQ2FsZW5kYXJUYWJsZVZpZXcucHJvdG90eXBlLnRocm93QXdheVdlZWtOdW1iZXJD
ZWxsID0gZnVuY3Rpb24od2Vla051bWJlckNlbGwpIHsKKyAgICBkZWxldGUgdGhpcy5fd2Vla051
bWJlckNlbGxzW3dlZWtOdW1iZXJDZWxsLndlZWsudG9TdHJpbmcoKV07CisgICAgd2Vla051bWJl
ckNlbGwudGhyb3dBd2F5KCk7Cit9OworCisvKioKKyAqIEBjb25zdHJ1Y3RvcgogICogQHBhcmFt
IHshRWxlbWVudH0gZWxlbWVudAogICogQHBhcmFtIHshT2JqZWN0fSBjb25maWcKICAqLwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>