<?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>88430</bug_id>
          
          <creation_ts>2012-06-06 10:08:58 -0700</creation_ts>
          <short_desc>Element.getBoundingClientRect() and Element.getClientRects() return incorrect values in frames in a scaled page</short_desc>
          <delta_ts>2012-12-17 20:58:01 -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>DOM</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Xianzhu Wang">wangxianzhu</reporter>
          <assigned_to name="Xianzhu Wang">wangxianzhu</assigned_to>
          <cc>aelias</cc>
    
    <cc>bdakin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>eric</cc>
    
    <cc>jamesr</cc>
    
    <cc>klobag</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>642571</commentid>
    <comment_count>0</comment_count>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2012-06-06 10:08:58 -0700</bug_when>
    <thetext>Element.getBoudingClientRect() and Element.getClientRects() should not scale back the rects if the element is in a frame because page scale only apply to elements in the main frame.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642629</commentid>
    <comment_count>1</comment_count>
      <attachid>146068</attachid>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2012-06-06 11:23:05 -0700</bug_when>
    <thetext>Created attachment 146068
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642644</commentid>
    <comment_count>2</comment_count>
      <attachid>146075</attachid>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2012-06-06 11:35:54 -0700</bug_when>
    <thetext>Created attachment 146075
patch v2 (removed extra code in layout test)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642724</commentid>
    <comment_count>3</comment_count>
    <who name="Alexandre Elias">aelias</who>
    <bug_when>2012-06-06 13:05:02 -0700</bug_when>
    <thetext>Looks like frame()-&gt;frameScaleFactor() was already introduced for this purpose in  bug 68081 , maybe we can reuse that?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642749</commentid>
    <comment_count>4</comment_count>
      <attachid>146098</attachid>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2012-06-06 13:28:33 -0700</bug_when>
    <thetext>Created attachment 146098
patch v3 (using Frame::frameScaleFactor())

Thanks Alex for your good idea.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642903</commentid>
    <comment_count>5</comment_count>
      <attachid>146098</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-06-06 15:39:45 -0700</bug_when>
    <thetext>Comment on attachment 146098
patch v3 (using Frame::frameScaleFactor())

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

R=me

&gt; Source/WebCore/ChangeLog:3
&gt; +        Element.getBoudingClientRect() and Element.getClientRects() return incorrect values in frames in a scaled page

typo &quot;bouding&quot; -&gt; &quot;bounding&quot;

&gt; Source/WebCore/dom/Document.cpp:6041
&gt; +

extra newline

&gt; LayoutTests/fast/dom/Element/scale-page-bounding-client-rect-in-frame.html:1
&gt; +&lt;html&gt;

please use &lt;!DOCTYPE html&gt; for this and other new test files unless you explicitly want to test quirks mode behavior</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642953</commentid>
    <comment_count>6</comment_count>
      <attachid>146098</attachid>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2012-06-06 16:51:51 -0700</bug_when>
    <thetext>Comment on attachment 146098
patch v3 (using Frame::frameScaleFactor())

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

&gt;&gt; Source/WebCore/ChangeLog:3
&gt;&gt; +        Element.getBoudingClientRect() and Element.getClientRects() return incorrect values in frames in a scaled page
&gt; 
&gt; typo &quot;bouding&quot; -&gt; &quot;bounding&quot;

Done (also other places)

&gt;&gt; Source/WebCore/dom/Document.cpp:6041
&gt;&gt; +
&gt; 
&gt; extra newline

Done.

&gt;&gt; LayoutTests/fast/dom/Element/scale-page-bounding-client-rect-in-frame.html:1
&gt;&gt; +&lt;html&gt;
&gt; 
&gt; please use &lt;!DOCTYPE html&gt; for this and other new test files unless you explicitly want to test quirks mode behavior

Done (also other places).

Also changed &quot;xxxPageScale&quot; in the change to &quot;xxxFrameScale&quot; as per Grace&apos;s suggestion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642954</commentid>
    <comment_count>7</comment_count>
      <attachid>146146</attachid>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2012-06-06 16:52:07 -0700</bug_when>
    <thetext>Created attachment 146146
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>643270</commentid>
    <comment_count>8</comment_count>
      <attachid>146146</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-06 23:57:38 -0700</bug_when>
    <thetext>Comment on attachment 146146
patch for landing

Clearing flags on attachment: 146146

Committed r119690: &lt;http://trac.webkit.org/changeset/119690&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>643271</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-06 23:57:43 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>793323</commentid>
    <comment_count>10</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-12-17 20:58:01 -0800</bug_when>
    <thetext>I wish we could have just fixed absoluteQuads() to not include frame scale, rather than adding code to adjustFloatQuadsForScrollAndAbsoluteZoomAndFrameScale() to remove frame scale from the quads again.

We don&apos;t have a clear policy about when localToAbsolute() stuff includes frame scale, but could add one.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>146068</attachid>
            <date>2012-06-06 11:23:05 -0700</date>
            <delta_ts>2012-06-06 11:35:54 -0700</delta_ts>
            <desc>patch</desc>
            <filename>88430</filename>
            <type>text/plain</type>
            <size>15157</size>
            <attacher name="Xianzhu Wang">wangxianzhu</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExOTYwMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMzIEBACisyMDEyLTA2LTA2ICBYaWFuemh1
IFdhbmcgIDx3YW5neGlhbnpodUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgRWxlbWVudC5nZXRC
b3VkaW5nQ2xpZW50UmVjdCgpIGFuZCBFbGVtZW50LmdldENsaWVudFJlY3RzKCkgcmV0dXJuIGlu
Y29ycmVjdCB2YWx1ZXMgaW4gZnJhbWVzIGluIGEgc2NhbGVkIHBhZ2UKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg4NDMwCisKKyAgICAgICAgRWxlbWVu
dC5nZXRCb3VkaW5nQ2xpZW50UmVjdCgpIGFuZCBFbGVtZW50LmdldENsaWVudFJlY3RzKCkgc2hv
dWxkIG5vdCBzY2FsZSBiYWNrIHRoZSByZWN0cworICAgICAgICBpZiB0aGUgZWxlbWVudCBpcyBp
biBhIGZyYW1lIGJlY2F1c2UgcGFnZSBzY2FsZSBvbmx5IGFwcGx5IHRvIGVsZW1lbnRzIGluIHRo
ZSBtYWluIGZyYW1lLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRlc3RzOiBmYXN0L2RvbS9FbGVtZW50L3NjYWxlLXBhZ2UtYm91bmRpbmctY2xpZW50
LXJlY3QtaW4tZnJhbWUuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9kb20vRWxlbWVudC9zY2Fs
ZS1wYWdlLWNsaWVudC1yZWN0cy1pbi1mcmFtZS5odG1sCisKKyAgICAgICAgKiBkb20vRG9jdW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6
YWRqdXN0RmxvYXRRdWFkc0ZvclNjcm9sbEFuZEFic29sdXRlWm9vbUFuZFBhZ2VTY2FsZSk6IEV4
dHJhY3RlZCBmcm9tIEVsZW1lbnQuY3BwIGFuZCBSYW5nZS5jcHAgYW5kIGZpeGVkIGlzc3VlIG9m
IHBhZ2VTY2FsZSBpbiBmcmFtZXMuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6YWRqdXN0
RmxvYXRSZWN0Rm9yU2Nyb2xsQW5kQWJzb2x1dGVab29tQW5kUGFnZVNjYWxlKTogRXh0cmFjdGVk
IGZyb20gRWxlbWVudC5jcHAgYW5kIGZpeGVkIGlzc3VlIG9mIHBhZ2VTY2FsZSBpbiBmcmFtZXMu
CisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KERvY3VtZW50KToKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpFbGVtZW50OjpnZXRDbGllbnRSZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojpn
ZXRCb3VuZGluZ0NsaWVudFJlY3QpOgorICAgICAgICAqIGRvbS9SYW5nZS5jcHA6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OmFkanVzdEZsb2F0UXVhZHNGb3JTY3JvbGxB
bmRBYnNvbHV0ZVpvb21BbmRQYWdlU2NhbGUpOiBNb3ZlZCBpbnRvIERvY3VtZW50IGFuZCBmaXhl
ZCBpc3N1ZSBvZiBwYWdlU2NhbGUgaW4gZnJhbWVzLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6
OmdldEJvcmRlckFuZFRleHRRdWFkcyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5oOiBSZW1vdmVkIGFkanVzdEZsb2F0UXVhZEZvclBhZ2VTY2FsZSBhbmQgYWRqdXN0RmxvYXRS
ZWN0Rm9yUGFnZVNjYWxlIGJlY2F1c2UgdGhleSBzZWVtIHVucmVsYXRlZCB0byBSZW5kZXJPYmpl
Y3QuCisgICAgICAgIChXZWJDb3JlKToKKwogMjAxMi0wNi0wNiAgSnVsaWVuIENoYWZmcmFpeCAg
PGpjaGFmZnJhaXhAd2Via2l0Lm9yZz4KIAogICAgICAgICBBZGQgc3VwcG9ydCBmb3IgZGlyZWN0
aW9uIG9uIHRhYmxlIHJvdyBncm91cCB3aXRoIGNvbGxhcHNpbmcgYm9yZGVycwpJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAxMTk1OTQpCisrKyBTb3VyY2UvV2ViQ29yZS9k
b20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MDM4LDQgKzYwMzgsMzkgQEAgTm9k
ZSogZXZlbnRUYXJnZXROb2RlRm9yRG9jdW1lbnQoRG9jdW1lbgogICAgIHJldHVybiBub2RlOwog
fQogCisKK3ZvaWQgRG9jdW1lbnQ6OmFkanVzdEZsb2F0UXVhZHNGb3JTY3JvbGxBbmRBYnNvbHV0
ZVpvb21BbmRQYWdlU2NhbGUoVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzLCBSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyKQoreworICAgIGlmICghdmlldygpKQorICAgICAgICByZXR1cm47CisKKyAgICBm
bG9hdCBpbnZlcnNlUGFnZVNjYWxlID0gMTsKKyAgICBpZiAocGFnZSgpICYmIHBhZ2UoKS0+bWFp
bkZyYW1lKCkgPT0gZnJhbWUoKSkKKyAgICAgICAgaW52ZXJzZVBhZ2VTY2FsZSA9IDEgLyBwYWdl
KCktPnBhZ2VTY2FsZUZhY3RvcigpOworCisgICAgTGF5b3V0UmVjdCB2aXNpYmxlQ29udGVudFJl
Y3QgPSB2aWV3KCktPnZpc2libGVDb250ZW50UmVjdCgpOworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgcXVhZHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgcXVhZHNbaV0ubW92ZSgtdmlzaWJs
ZUNvbnRlbnRSZWN0LngoKSwgLXZpc2libGVDb250ZW50UmVjdC55KCkpOworICAgICAgICBhZGp1
c3RGbG9hdFF1YWRGb3JBYnNvbHV0ZVpvb20ocXVhZHNbaV0sIHJlbmRlcmVyKTsKKyAgICAgICAg
aWYgKGludmVyc2VQYWdlU2NhbGUgIT0gMSkKKyAgICAgICAgICAgIHF1YWRzW2ldLnNjYWxlKGlu
dmVyc2VQYWdlU2NhbGUsIGludmVyc2VQYWdlU2NhbGUpOworICAgIH0KK30KKwordm9pZCBEb2N1
bWVudDo6YWRqdXN0RmxvYXRSZWN0Rm9yU2Nyb2xsQW5kQWJzb2x1dGVab29tQW5kUGFnZVNjYWxl
KEZsb2F0UmVjdCYgcmVjdCwgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKK3sKKyAgICBpZiAoIXZp
ZXcoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZmxvYXQgaW52ZXJzZVBhZ2VTY2FsZSA9IDE7
CisgICAgaWYgKHBhZ2UoKSAmJiBwYWdlKCktPm1haW5GcmFtZSgpID09IGZyYW1lKCkpCisgICAg
ICAgIGludmVyc2VQYWdlU2NhbGUgPSAxIC8gcGFnZSgpLT5wYWdlU2NhbGVGYWN0b3IoKTsKKwor
ICAgIExheW91dFJlY3QgdmlzaWJsZUNvbnRlbnRSZWN0ID0gdmlldygpLT52aXNpYmxlQ29udGVu
dFJlY3QoKTsKKyAgICByZWN0Lm1vdmUoLXZpc2libGVDb250ZW50UmVjdC54KCksIC12aXNpYmxl
Q29udGVudFJlY3QueSgpKTsKKyAgICBhZGp1c3RGbG9hdFJlY3RGb3JBYnNvbHV0ZVpvb20ocmVj
dCwgcmVuZGVyZXIpOworICAgIGlmIChpbnZlcnNlUGFnZVNjYWxlICE9IDEpCisgICAgICAgIHJl
Y3Quc2NhbGUoaW52ZXJzZVBhZ2VTY2FsZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiAxMTk1OTQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtODMsNiArODMsOCBAQCBjbGFz
cyBFbGVtZW50OwogY2xhc3MgRW50aXR5UmVmZXJlbmNlOwogY2xhc3MgRXZlbnQ7CiBjbGFzcyBF
dmVudExpc3RlbmVyOworY2xhc3MgRmxvYXRSZWN0OworY2xhc3MgRmxvYXRRdWFkOwogY2xhc3Mg
Rm9udERhdGE7CiBjbGFzcyBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ7CiBjbGFzcyBGcmFtZTsKQEAg
LTExNjAsNiArMTE2Miw5IEBAIHB1YmxpYzoKICAgICBQcmVyZW5kZXJlciogcHJlcmVuZGVyZXIo
KSB7IHJldHVybiBtX3ByZXJlbmRlcmVyLmdldCgpOyB9CiAjZW5kaWYKIAorICAgIHZvaWQgYWRq
dXN0RmxvYXRRdWFkc0ZvclNjcm9sbEFuZEFic29sdXRlWm9vbUFuZFBhZ2VTY2FsZShWZWN0b3I8
RmxvYXRRdWFkPiYsIFJlbmRlck9iamVjdCopOworICAgIHZvaWQgYWRqdXN0RmxvYXRSZWN0Rm9y
U2Nyb2xsQW5kQWJzb2x1dGVab29tQW5kUGFnZVNjYWxlKEZsb2F0UmVjdCYsIFJlbmRlck9iamVj
dCopOworCiBwcm90ZWN0ZWQ6CiAgICAgRG9jdW1lbnQoRnJhbWUqLCBjb25zdCBLVVJMJiwgYm9v
bCBpc1hIVE1MLCBib29sIGlzSFRNTCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDExOTU5NCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTU3LDIxICs1NTcsNyBAQCBQYXNzUmVmUHRyPENsaWVudFJlY3RMaXN0PiBF
bGVtZW50OjpnZXRDCiAKICAgICBWZWN0b3I8RmxvYXRRdWFkPiBxdWFkczsKICAgICByZW5kZXJC
b3hNb2RlbE9iamVjdC0+YWJzb2x1dGVRdWFkcyhxdWFkcyk7Ci0KLSAgICBmbG9hdCBwYWdlU2Nh
bGUgPSAxOwotICAgIGlmIChQYWdlKiBwYWdlID0gZG9jdW1lbnQoKS0+cGFnZSgpKSAKLSAgICAg
ICAgcGFnZVNjYWxlID0gcGFnZS0+cGFnZVNjYWxlRmFjdG9yKCk7Ci0KLSAgICBpZiAoRnJhbWVW
aWV3KiB2aWV3ID0gZG9jdW1lbnQoKS0+dmlldygpKSB7Ci0gICAgICAgIExheW91dFJlY3Qgdmlz
aWJsZUNvbnRlbnRSZWN0ID0gdmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7Ci0gICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgcXVhZHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIHF1
YWRzW2ldLm1vdmUoLXZpc2libGVDb250ZW50UmVjdC54KCksIC12aXNpYmxlQ29udGVudFJlY3Qu
eSgpKTsKLSAgICAgICAgICAgIGFkanVzdEZsb2F0UXVhZEZvckFic29sdXRlWm9vbShxdWFkc1tp
XSwgcmVuZGVyQm94TW9kZWxPYmplY3QpOwotICAgICAgICAgICAgaWYgKHBhZ2VTY2FsZSAhPSAx
KQotICAgICAgICAgICAgICAgIGFkanVzdEZsb2F0UXVhZEZvclBhZ2VTY2FsZShxdWFkc1tpXSwg
cGFnZVNjYWxlKTsKLSAgICAgICAgfQotICAgIH0KLQorICAgIGRvY3VtZW50KCktPmFkanVzdEZs
b2F0UXVhZHNGb3JTY3JvbGxBbmRBYnNvbHV0ZVpvb21BbmRQYWdlU2NhbGUocXVhZHMsIHJlbmRl
ckJveE1vZGVsT2JqZWN0KTsKICAgICByZXR1cm4gQ2xpZW50UmVjdExpc3Q6OmNyZWF0ZShxdWFk
cyk7CiB9CiAKQEAgLTYwMiwxNSArNTg4LDcgQEAgUGFzc1JlZlB0cjxDbGllbnRSZWN0PiBFbGVt
ZW50OjpnZXRCb3VuZAogICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgcXVhZHMuc2l6ZSgpOyAr
K2kpCiAgICAgICAgIHJlc3VsdC51bml0ZShxdWFkc1tpXS5ib3VuZGluZ0JveCgpKTsKIAotICAg
IGlmIChGcmFtZVZpZXcqIHZpZXcgPSBkb2N1bWVudCgpLT52aWV3KCkpIHsKLSAgICAgICAgTGF5
b3V0UmVjdCB2aXNpYmxlQ29udGVudFJlY3QgPSB2aWV3LT52aXNpYmxlQ29udGVudFJlY3QoKTsK
LSAgICAgICAgcmVzdWx0Lm1vdmUoLXZpc2libGVDb250ZW50UmVjdC54KCksIC12aXNpYmxlQ29u
dGVudFJlY3QueSgpKTsKLSAgICB9Ci0KLSAgICBhZGp1c3RGbG9hdFJlY3RGb3JBYnNvbHV0ZVpv
b20ocmVzdWx0LCByZW5kZXJlcigpKTsKLSAgICBpZiAoUGFnZSogcGFnZSA9IGRvY3VtZW50KCkt
PnBhZ2UoKSkKLSAgICAgICAgYWRqdXN0RmxvYXRSZWN0Rm9yUGFnZVNjYWxlKHJlc3VsdCwgcGFn
ZS0+cGFnZVNjYWxlRmFjdG9yKCkpOwotCisgICAgZG9jdW1lbnQoKS0+YWRqdXN0RmxvYXRSZWN0
Rm9yU2Nyb2xsQW5kQWJzb2x1dGVab29tQW5kUGFnZVNjYWxlKHJlc3VsdCwgcmVuZGVyZXIoKSk7
CiAgICAgcmV0dXJuIENsaWVudFJlY3Q6OmNyZWF0ZShyZXN1bHQpOwogfQogICAgIApJbmRleDog
U291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9kb20vUmFuZ2UuY3BwCShyZXZpc2lvbiAxMTk1OTQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20v
UmFuZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTQwLDI1ICsxOTQwLDYgQEAgUGFzc1JlZlB0
cjxDbGllbnRSZWN0PiBSYW5nZTo6Z2V0Qm91bmRpbgogICAgIHJldHVybiBDbGllbnRSZWN0Ojpj
cmVhdGUoYm91bmRpbmdSZWN0KCkpOwogfQogCi1zdGF0aWMgdm9pZCBhZGp1c3RGbG9hdFF1YWRz
Rm9yU2Nyb2xsQW5kQWJzb2x1dGVab29tQW5kUGFnZVNjYWxlKFZlY3RvcjxGbG9hdFF1YWQ+JiBx
dWFkcywgRG9jdW1lbnQqIGRvY3VtZW50LCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQotewotICAg
IEZyYW1lVmlldyogdmlldyA9IGRvY3VtZW50LT52aWV3KCk7Ci0gICAgaWYgKCF2aWV3KQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBmbG9hdCBwYWdlU2NhbGUgPSAxOwotICAgIGlmIChQYWdlKiBw
YWdlID0gZG9jdW1lbnQtPnBhZ2UoKSkKLSAgICAgICAgcGFnZVNjYWxlID0gcGFnZS0+cGFnZVNj
YWxlRmFjdG9yKCk7Ci0KLSAgICBMYXlvdXRSZWN0IHZpc2libGVDb250ZW50UmVjdCA9IHZpZXct
PnZpc2libGVDb250ZW50UmVjdCgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcXVhZHMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcXVhZHNbaV0ubW92ZSgtdmlzaWJsZUNvbnRlbnRSZWN0
LngoKSwgLXZpc2libGVDb250ZW50UmVjdC55KCkpOwotICAgICAgICBhZGp1c3RGbG9hdFF1YWRG
b3JBYnNvbHV0ZVpvb20ocXVhZHNbaV0sIHJlbmRlcmVyKTsKLSAgICAgICAgaWYgKHBhZ2VTY2Fs
ZSAhPSAxKQotICAgICAgICAgICAgYWRqdXN0RmxvYXRRdWFkRm9yUGFnZVNjYWxlKHF1YWRzW2ld
LCBwYWdlU2NhbGUpOwotICAgIH0KLX0KLQogdm9pZCBSYW5nZTo6Z2V0Qm9yZGVyQW5kVGV4dFF1
YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcykgY29uc3QKIHsKICAgICBOb2RlKiBzdGFydENv
bnRhaW5lciA9IG1fc3RhcnQuY29udGFpbmVyKCk7CkBAIC0xOTc3LDcgKzE5NTgsNyBAQCB2b2lk
IFJhbmdlOjpnZXRCb3JkZXJBbmRUZXh0UXVhZHMoVmVjdG9yCiAgICAgICAgICAgICAgICAgaWYg
KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZW5kZXJCb3hNb2RlbE9iamVjdCA9IHN0YXRpY19jYXN0
PEVsZW1lbnQqPihub2RlKS0+cmVuZGVyQm94TW9kZWxPYmplY3QoKSkgewogICAgICAgICAgICAg
ICAgICAgICBWZWN0b3I8RmxvYXRRdWFkPiBlbGVtZW50UXVhZHM7CiAgICAgICAgICAgICAgICAg
ICAgIHJlbmRlckJveE1vZGVsT2JqZWN0LT5hYnNvbHV0ZVF1YWRzKGVsZW1lbnRRdWFkcyk7Ci0g
ICAgICAgICAgICAgICAgICAgIGFkanVzdEZsb2F0UXVhZHNGb3JTY3JvbGxBbmRBYnNvbHV0ZVpv
b21BbmRQYWdlU2NhbGUoZWxlbWVudFF1YWRzLCBtX293bmVyRG9jdW1lbnQuZ2V0KCksIHJlbmRl
ckJveE1vZGVsT2JqZWN0KTsKKyAgICAgICAgICAgICAgICAgICAgbV9vd25lckRvY3VtZW50LT5h
ZGp1c3RGbG9hdFF1YWRzRm9yU2Nyb2xsQW5kQWJzb2x1dGVab29tQW5kUGFnZVNjYWxlKGVsZW1l
bnRRdWFkcywgcmVuZGVyQm94TW9kZWxPYmplY3QpOwogCiAgICAgICAgICAgICAgICAgICAgIHF1
YWRzLmFwcGVuZChlbGVtZW50UXVhZHMpOwogICAgICAgICAgICAgICAgIH0KQEAgLTE5OTAsNyAr
MTk3MSw3IEBAIHZvaWQgUmFuZ2U6OmdldEJvcmRlckFuZFRleHRRdWFkcyhWZWN0b3IKICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICBWZWN0b3I8RmxvYXRRdWFkPiB0ZXh0UXVhZHM7
CiAgICAgICAgICAgICAgICAgcmVuZGVyVGV4dC0+YWJzb2x1dGVRdWFkc0ZvclJhbmdlKHRleHRR
dWFkcywgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7Ci0gICAgICAgICAgICAgICAgYWRqdXN0Rmxv
YXRRdWFkc0ZvclNjcm9sbEFuZEFic29sdXRlWm9vbUFuZFBhZ2VTY2FsZSh0ZXh0UXVhZHMsIG1f
b3duZXJEb2N1bWVudC5nZXQoKSwgcmVuZGVyVGV4dCk7CisgICAgICAgICAgICAgICAgbV9vd25l
ckRvY3VtZW50LT5hZGp1c3RGbG9hdFF1YWRzRm9yU2Nyb2xsQW5kQWJzb2x1dGVab29tQW5kUGFn
ZVNjYWxlKHRleHRRdWFkcywgcmVuZGVyVGV4dCk7CiAKICAgICAgICAgICAgICAgICBxdWFkcy5h
cHBlbmQodGV4dFF1YWRzKTsKICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHJldmlzaW9uIDExOTU5NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTIxNCwxOCArMTIx
NCw2IEBAIGlubGluZSB2b2lkIGFkanVzdEZsb2F0UmVjdEZvckFic29sdXRlWm8KICAgICAgICAg
cmVjdC5zY2FsZSgxIC8gem9vbSwgMSAvIHpvb20pOwogfQogCi1pbmxpbmUgdm9pZCBhZGp1c3RG
bG9hdFF1YWRGb3JQYWdlU2NhbGUoRmxvYXRRdWFkJiBxdWFkLCBmbG9hdCBwYWdlU2NhbGUpCi17
Ci0gICAgaWYgKHBhZ2VTY2FsZSAhPSAxKQotICAgICAgICBxdWFkLnNjYWxlKDEgLyBwYWdlU2Nh
bGUsIDEgLyBwYWdlU2NhbGUpOwotfQotCi1pbmxpbmUgdm9pZCBhZGp1c3RGbG9hdFJlY3RGb3JQ
YWdlU2NhbGUoRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBwYWdlU2NhbGUpCi17Ci0gICAgaWYgKHBh
Z2VTY2FsZSAhPSAxKQotICAgICAgICByZWN0LnNjYWxlKDEgLyBwYWdlU2NhbGUsIDEgLyBwYWdl
U2NhbGUpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNpZm5kZWYgTkRFQlVHCklu
ZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxMTk2MDApCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAxMi0wNi0wNiAgWGlhbnpodSBXYW5nICA8d2Fu
Z3hpYW56aHVAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEVsZW1lbnQuZ2V0Qm91ZGluZ0NsaWVu
dFJlY3QoKSBhbmQgRWxlbWVudC5nZXRDbGllbnRSZWN0cygpIHJldHVybiBpbmNvcnJlY3QgdmFs
dWVzIGluIGZyYW1lcyBpbiBhIHNjYWxlZCBwYWdlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD04ODQzMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogZmFzdC9kb20vRWxlbWVudC9yZXNvdXJjZXMvY2xpZW50
LXJlY3QtZnJhbWUuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vRWxlbWVudC9zY2Fs
ZS1wYWdlLWJvdW5kaW5nLWNsaWVudC1yZWN0LWluLWZyYW1lLWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICogZmFzdC9kb20vRWxlbWVudC9zY2FsZS1wYWdlLWJvdW5kaW5nLWNsaWVudC1y
ZWN0LWluLWZyYW1lLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL0VsZW1lbnQvc2Nh
bGUtcGFnZS1jbGllbnQtcmVjdHMtaW4tZnJhbWUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiBmYXN0L2RvbS9FbGVtZW50L3NjYWxlLXBhZ2UtY2xpZW50LXJlY3RzLWluLWZyYW1lLmh0
bWw6IEFkZGVkLgorCiAyMDEyLTA2LTA2ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3Jn
PgogCiAgICAgICAgIENocm9taXVtIHJlYmFzZWxpbmUgYWZ0ZXIgcjExOTU5MSBiZWNhdXNlIGl0
IHdhcyBmYWlsaW5nIHdpdGggbWlzc2luZyByZXN1bHRzLgpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC9kb20vRWxlbWVudC9zY2FsZS1wYWdlLWJvdW5kaW5nLWNsaWVudC1yZWN0LWluLWZyYW1lLWV4
cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L3Nj
YWxlLXBhZ2UtYm91bmRpbmctY2xpZW50LXJlY3QtaW4tZnJhbWUtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9zY2FsZS1wYWdlLWJvdW5k
aW5nLWNsaWVudC1yZWN0LWluLWZyYW1lLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwyIEBACisKK1Bhc3MKClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2Zhc3Qv
ZG9tL0VsZW1lbnQvc2NhbGUtcGFnZS1ib3VuZGluZy1jbGllbnQtcmVjdC1pbi1mcmFtZS1leHBl
Y3RlZC50eHQKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRleDog
TGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9zY2FsZS1wYWdlLWJvdW5kaW5nLWNsaWVudC1y
ZWN0LWluLWZyYW1lLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxl
bWVudC9zY2FsZS1wYWdlLWJvdW5kaW5nLWNsaWVudC1yZWN0LWluLWZyYW1lLmh0bWwJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L3NjYWxlLXBhZ2UtYm91bmRp
bmctY2xpZW50LXJlY3QtaW4tZnJhbWUuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMiBA
QAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CitmdW5jdGlvbiB0ZXN0UmVjdHMoKQoreworICAg
IGlmICghd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyIHx8ICF3aW5kb3cuaW50ZXJuYWxzKQor
ICAgICAgICByZXR1cm47CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOwor
ICAgIAorICAgIHZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZnJhbWUiKS5jb250
ZW50RG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRpdiIpOworICAgIHZhciByZWN0ID0gZGl2Lmdl
dEJvdW5kaW5nQ2xpZW50UmVjdCgpOworICAgIHdpbmRvdy5pbnRlcm5hbHMuc2V0dGluZ3Muc2V0
UGFnZVNjYWxlRmFjdG9yKDIsIDAsIDApOworICAgIHZhciBzY2FsZWRSZWN0ID0gZGl2LmdldEJv
dW5kaW5nQ2xpZW50UmVjdCgpOworCisgICAgdmFyIHJlc3VsdCA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJyZXN1bHQiKTsKKyAgICBpZiAocmVjdC5sZWZ0ID09IHNjYWxlZFJlY3QubGVmdCAm
JgorICAgICAgICByZWN0LnRvcCA9PSBzY2FsZWRSZWN0LnRvcCAmJgorICAgICAgICByZWN0LnJp
Z2h0ID09IHNjYWxlZFJlY3QucmlnaHQgJiYKKyAgICAgICAgcmVjdC5ib3R0b20gPT0gc2NhbGVk
UmVjdC5ib3R0b20pCisgICAgICAgIHJlc3VsdC5pbm5lckhUTUwgPSAiUGFzcyI7CisgICAgZWxz
ZQorICAgICAgICByZXN1bHQuaW5uZXJIVE1MID0gIkZhaWwiOworICAgIAorfQorPC9zY3JpcHQ+
Cis8L2hlYWQ+CisKKzxib2R5IG9ubG9hZD0idGVzdFJlY3RzKCk7Ij4KKyAgICA8aWZyYW1lIGlk
PSJmcmFtZSIgc3JjPSJyZXNvdXJjZXMvY2xpZW50LXJlY3QtZnJhbWUuaHRtbCIgd2lkdGg9IjMw
MCIgaGVpZ2h0PSIyMDAiPjwvaWZyYW1lPgorICAgIDxwIGlkPSJyZXN1bHQiPlRoaXMgdGVzdCBt
dXN0IGJlIHJ1biB2aWEgRHVtcFJlbmRlclRyZWUuPC9wPgorPC9ib2R5PgorPC9odG1sPgoKUHJv
cGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9zY2FsZS1wYWdl
LWJvdW5kaW5nLWNsaWVudC1yZWN0LWluLWZyYW1lLmh0bWwKX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3Zu
OmVvbC1zdHlsZQogICArIExGCgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9z
Y2FsZS1wYWdlLWNsaWVudC1yZWN0cy1pbi1mcmFtZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9zY2FsZS1wYWdlLWNsaWVudC1yZWN0cy1p
bi1mcmFtZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Rv
bS9FbGVtZW50L3NjYWxlLXBhZ2UtY2xpZW50LXJlY3RzLWluLWZyYW1lLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwyIEBACisKK1Bhc3MKClByb3BlcnR5IGNoYW5nZXMgb246
IExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvc2NhbGUtcGFnZS1jbGllbnQtcmVjdHMtaW4t
ZnJhbWUtZXhwZWN0ZWQudHh0Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBM
RgoKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvc2NhbGUtcGFnZS1jbGllbnQt
cmVjdHMtaW4tZnJhbWUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9F
bGVtZW50L3NjYWxlLXBhZ2UtY2xpZW50LXJlY3RzLWluLWZyYW1lLmh0bWwJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L3NjYWxlLXBhZ2UtY2xpZW50LXJlY3Rz
LWluLWZyYW1lLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzIgQEAKKzxodG1sPgorPGhl
YWQ+Cis8c2NyaXB0PgorZnVuY3Rpb24gdGVzdFJlY3RzKCkKK3sKKyAgICBpZiAoIXdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlciB8fCAhd2luZG93LmludGVybmFscykKKyAgICAgICAgcmV0dXJu
OworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAKKyAgICB2YXIg
ZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZyYW1lIikuY29udGVudERvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJkaXYiKTsKKyAgICB2YXIgcmVjdCA9IGRpdi5nZXRDbGllbnRSZWN0cygp
WzBdOworICAgIHdpbmRvdy5pbnRlcm5hbHMuc2V0dGluZ3Muc2V0UGFnZVNjYWxlRmFjdG9yKDIs
IDAsIDApOworICAgIHZhciBzY2FsZWRSZWN0ID0gZGl2LmdldENsaWVudFJlY3RzKClbMF07CisK
KyAgICB2YXIgcmVzdWx0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlc3VsdCIpOworICAg
IGlmIChyZWN0LmxlZnQgPT0gc2NhbGVkUmVjdC5sZWZ0ICYmCisgICAgICAgIHJlY3QudG9wID09
IHNjYWxlZFJlY3QudG9wICYmCisgICAgICAgIHJlY3QucmlnaHQgPT0gc2NhbGVkUmVjdC5yaWdo
dCAmJgorICAgICAgICByZWN0LmJvdHRvbSA9PSBzY2FsZWRSZWN0LmJvdHRvbSkKKyAgICAgICAg
cmVzdWx0LmlubmVySFRNTCA9ICJQYXNzIjsKKyAgICBlbHNlCisgICAgICAgIHJlc3VsdC5pbm5l
ckhUTUwgPSAiRmFpbCI7CisgICAgCit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHkgb25s
b2FkPSJ0ZXN0UmVjdHMoKTsiPgorICAgIDxpZnJhbWUgaWQ9ImZyYW1lIiBzcmM9InJlc291cmNl
cy9jbGllbnQtcmVjdC1mcmFtZS5odG1sIiB3aWR0aD0iMzAwIiBoZWlnaHQ9IjIwMCI+PC9pZnJh
bWU+CisgICAgPHAgaWQ9InJlc3VsdCI+VGhpcyB0ZXN0IG11c3QgYmUgcnVuIHZpYSBEdW1wUmVu
ZGVyVHJlZS48L3A+Cis8L2JvZHk+Cis8L2h0bWw+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlv
dXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L3NjYWxlLXBhZ2UtY2xpZW50LXJlY3RzLWluLWZyYW1l
Lmh0bWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRleDogTGF5
b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9yZXNvdXJjZXMvY2xpZW50LXJlY3QtZnJhbWUuaHRt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L3Jlc291cmNlcy9j
bGllbnQtcmVjdC1mcmFtZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9k
b20vRWxlbWVudC9yZXNvdXJjZXMvY2xpZW50LXJlY3QtZnJhbWUuaHRtbAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwyMyBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CitmdW5jdGlvbiB0ZXN0
UmVjdHMoKQoreworICAgIHZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGl2Iik7
CisgICAgdmFyIHJlY3QgPSBkaXYuZ2V0Q2xpZW50UmVjdHMoKVswXTsKKyAgICB2YXIgcmVzdWx0
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlc3VsdCIpOworICAgIGlmIChyZWN0LmxlZnQg
PT0gNjAgJiYgcmVjdC50b3AgPT0gMzMgJiYKKyAgICAgICAgcmVjdC5yaWdodCA9PSAyMTAgJiYg
cmVjdC5ib3R0b20gPT0gMTQzKQorICAgICAgICByZXN1bHQuaW5uZXJIVE1MID0gIlBhc3MiOwor
ICAgIGVsc2UKKyAgICAgICAgcmVzdWx0LmlubmVySFRNTCA9ICJGYWlsIjsKKyAgICAKK30KKzwv
c2NyaXB0PgorPC9oZWFkPgorCis8Ym9keSBvbmxvYWQ9InRlc3RSZWN0cygpOyI+CisgICAgPGRp
diBpZD0iZGl2IiBzdHlsZT0ibWFyZ2luLWxlZnQ6NjBweDsgbWFyZ2luLXRvcDozM3B4OyB3aWR0
aDoxNTBweDsgaGVpZ2h0OjExMHB4OyBiYWNrZ3JvdW5kLWNvbG9yOmdyZWVuOyI+PC9kaXY+Cisg
ICAgPHAgaWQ9InJlc3VsdCI+PC9wPgorPC9ib2R5PgorPC9odG1sPgoKUHJvcGVydHkgY2hhbmdl
cyBvbjogTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9yZXNvdXJjZXMvY2xpZW50LXJlY3Qt
ZnJhbWUuaHRtbApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>146075</attachid>
            <date>2012-06-06 11:35:54 -0700</date>
            <delta_ts>2012-06-06 13:28:33 -0700</delta_ts>
            <desc>patch v2 (removed extra code in layout test)</desc>
            <filename>88430</filename>
            <type>text/plain</type>
            <size>14716</size>
            <attacher name="Xianzhu Wang">wangxianzhu</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExOTYwMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMzIEBACisyMDEyLTA2LTA2ICBYaWFuemh1
IFdhbmcgIDx3YW5neGlhbnpodUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgRWxlbWVudC5nZXRC
b3VkaW5nQ2xpZW50UmVjdCgpIGFuZCBFbGVtZW50LmdldENsaWVudFJlY3RzKCkgcmV0dXJuIGlu
Y29ycmVjdCB2YWx1ZXMgaW4gZnJhbWVzIGluIGEgc2NhbGVkIHBhZ2UKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg4NDMwCisKKyAgICAgICAgRWxlbWVu
dC5nZXRCb3VkaW5nQ2xpZW50UmVjdCgpIGFuZCBFbGVtZW50LmdldENsaWVudFJlY3RzKCkgc2hv
dWxkIG5vdCBzY2FsZSBiYWNrIHRoZSByZWN0cworICAgICAgICBpZiB0aGUgZWxlbWVudCBpcyBp
biBhIGZyYW1lIGJlY2F1c2UgcGFnZSBzY2FsZSBvbmx5IGFwcGx5IHRvIGVsZW1lbnRzIGluIHRo
ZSBtYWluIGZyYW1lLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRlc3RzOiBmYXN0L2RvbS9FbGVtZW50L3NjYWxlLXBhZ2UtYm91bmRpbmctY2xpZW50
LXJlY3QtaW4tZnJhbWUuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9kb20vRWxlbWVudC9zY2Fs
ZS1wYWdlLWNsaWVudC1yZWN0cy1pbi1mcmFtZS5odG1sCisKKyAgICAgICAgKiBkb20vRG9jdW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6
YWRqdXN0RmxvYXRRdWFkc0ZvclNjcm9sbEFuZEFic29sdXRlWm9vbUFuZFBhZ2VTY2FsZSk6IEV4
dHJhY3RlZCBmcm9tIEVsZW1lbnQuY3BwIGFuZCBSYW5nZS5jcHAgYW5kIGZpeGVkIGlzc3VlIG9m
IHBhZ2VTY2FsZSBpbiBmcmFtZXMuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6YWRqdXN0
RmxvYXRSZWN0Rm9yU2Nyb2xsQW5kQWJzb2x1dGVab29tQW5kUGFnZVNjYWxlKTogRXh0cmFjdGVk
IGZyb20gRWxlbWVudC5jcHAgYW5kIGZpeGVkIGlzc3VlIG9mIHBhZ2VTY2FsZSBpbiBmcmFtZXMu
CisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KERvY3VtZW50KToKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpFbGVtZW50OjpnZXRDbGllbnRSZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojpn
ZXRCb3VuZGluZ0NsaWVudFJlY3QpOgorICAgICAgICAqIGRvbS9SYW5nZS5jcHA6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OmFkanVzdEZsb2F0UXVhZHNGb3JTY3JvbGxB
bmRBYnNvbHV0ZVpvb21BbmRQYWdlU2NhbGUpOiBNb3ZlZCBpbnRvIERvY3VtZW50IGFuZCBmaXhl
ZCBpc3N1ZSBvZiBwYWdlU2NhbGUgaW4gZnJhbWVzLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6
OmdldEJvcmRlckFuZFRleHRRdWFkcyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5oOiBSZW1vdmVkIGFkanVzdEZsb2F0UXVhZEZvclBhZ2VTY2FsZSBhbmQgYWRqdXN0RmxvYXRS
ZWN0Rm9yUGFnZVNjYWxlIGJlY2F1c2UgdGhleSBzZWVtIHVucmVsYXRlZCB0byBSZW5kZXJPYmpl
Y3QuCisgICAgICAgIChXZWJDb3JlKToKKwogMjAxMi0wNi0wNiAgSnVsaWVuIENoYWZmcmFpeCAg
PGpjaGFmZnJhaXhAd2Via2l0Lm9yZz4KIAogICAgICAgICBBZGQgc3VwcG9ydCBmb3IgZGlyZWN0
aW9uIG9uIHRhYmxlIHJvdyBncm91cCB3aXRoIGNvbGxhcHNpbmcgYm9yZGVycwpJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAxMTk1OTQpCisrKyBTb3VyY2UvV2ViQ29yZS9k
b20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MDM4LDQgKzYwMzgsMzkgQEAgTm9k
ZSogZXZlbnRUYXJnZXROb2RlRm9yRG9jdW1lbnQoRG9jdW1lbgogICAgIHJldHVybiBub2RlOwog
fQogCisKK3ZvaWQgRG9jdW1lbnQ6OmFkanVzdEZsb2F0UXVhZHNGb3JTY3JvbGxBbmRBYnNvbHV0
ZVpvb21BbmRQYWdlU2NhbGUoVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzLCBSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyKQoreworICAgIGlmICghdmlldygpKQorICAgICAgICByZXR1cm47CisKKyAgICBm
bG9hdCBpbnZlcnNlUGFnZVNjYWxlID0gMTsKKyAgICBpZiAocGFnZSgpICYmIHBhZ2UoKS0+bWFp
bkZyYW1lKCkgPT0gZnJhbWUoKSkKKyAgICAgICAgaW52ZXJzZVBhZ2VTY2FsZSA9IDEgLyBwYWdl
KCktPnBhZ2VTY2FsZUZhY3RvcigpOworCisgICAgTGF5b3V0UmVjdCB2aXNpYmxlQ29udGVudFJl
Y3QgPSB2aWV3KCktPnZpc2libGVDb250ZW50UmVjdCgpOworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgcXVhZHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgcXVhZHNbaV0ubW92ZSgtdmlzaWJs
ZUNvbnRlbnRSZWN0LngoKSwgLXZpc2libGVDb250ZW50UmVjdC55KCkpOworICAgICAgICBhZGp1
c3RGbG9hdFF1YWRGb3JBYnNvbHV0ZVpvb20ocXVhZHNbaV0sIHJlbmRlcmVyKTsKKyAgICAgICAg
aWYgKGludmVyc2VQYWdlU2NhbGUgIT0gMSkKKyAgICAgICAgICAgIHF1YWRzW2ldLnNjYWxlKGlu
dmVyc2VQYWdlU2NhbGUsIGludmVyc2VQYWdlU2NhbGUpOworICAgIH0KK30KKwordm9pZCBEb2N1
bWVudDo6YWRqdXN0RmxvYXRSZWN0Rm9yU2Nyb2xsQW5kQWJzb2x1dGVab29tQW5kUGFnZVNjYWxl
KEZsb2F0UmVjdCYgcmVjdCwgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKK3sKKyAgICBpZiAoIXZp
ZXcoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZmxvYXQgaW52ZXJzZVBhZ2VTY2FsZSA9IDE7
CisgICAgaWYgKHBhZ2UoKSAmJiBwYWdlKCktPm1haW5GcmFtZSgpID09IGZyYW1lKCkpCisgICAg
ICAgIGludmVyc2VQYWdlU2NhbGUgPSAxIC8gcGFnZSgpLT5wYWdlU2NhbGVGYWN0b3IoKTsKKwor
ICAgIExheW91dFJlY3QgdmlzaWJsZUNvbnRlbnRSZWN0ID0gdmlldygpLT52aXNpYmxlQ29udGVu
dFJlY3QoKTsKKyAgICByZWN0Lm1vdmUoLXZpc2libGVDb250ZW50UmVjdC54KCksIC12aXNpYmxl
Q29udGVudFJlY3QueSgpKTsKKyAgICBhZGp1c3RGbG9hdFJlY3RGb3JBYnNvbHV0ZVpvb20ocmVj
dCwgcmVuZGVyZXIpOworICAgIGlmIChpbnZlcnNlUGFnZVNjYWxlICE9IDEpCisgICAgICAgIHJl
Y3Quc2NhbGUoaW52ZXJzZVBhZ2VTY2FsZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiAxMTk1OTQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtODMsNiArODMsOCBAQCBjbGFz
cyBFbGVtZW50OwogY2xhc3MgRW50aXR5UmVmZXJlbmNlOwogY2xhc3MgRXZlbnQ7CiBjbGFzcyBF
dmVudExpc3RlbmVyOworY2xhc3MgRmxvYXRSZWN0OworY2xhc3MgRmxvYXRRdWFkOwogY2xhc3Mg
Rm9udERhdGE7CiBjbGFzcyBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ7CiBjbGFzcyBGcmFtZTsKQEAg
LTExNjAsNiArMTE2Miw5IEBAIHB1YmxpYzoKICAgICBQcmVyZW5kZXJlciogcHJlcmVuZGVyZXIo
KSB7IHJldHVybiBtX3ByZXJlbmRlcmVyLmdldCgpOyB9CiAjZW5kaWYKIAorICAgIHZvaWQgYWRq
dXN0RmxvYXRRdWFkc0ZvclNjcm9sbEFuZEFic29sdXRlWm9vbUFuZFBhZ2VTY2FsZShWZWN0b3I8
RmxvYXRRdWFkPiYsIFJlbmRlck9iamVjdCopOworICAgIHZvaWQgYWRqdXN0RmxvYXRSZWN0Rm9y
U2Nyb2xsQW5kQWJzb2x1dGVab29tQW5kUGFnZVNjYWxlKEZsb2F0UmVjdCYsIFJlbmRlck9iamVj
dCopOworCiBwcm90ZWN0ZWQ6CiAgICAgRG9jdW1lbnQoRnJhbWUqLCBjb25zdCBLVVJMJiwgYm9v
bCBpc1hIVE1MLCBib29sIGlzSFRNTCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDExOTU5NCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTU3LDIxICs1NTcsNyBAQCBQYXNzUmVmUHRyPENsaWVudFJlY3RMaXN0PiBF
bGVtZW50OjpnZXRDCiAKICAgICBWZWN0b3I8RmxvYXRRdWFkPiBxdWFkczsKICAgICByZW5kZXJC
b3hNb2RlbE9iamVjdC0+YWJzb2x1dGVRdWFkcyhxdWFkcyk7Ci0KLSAgICBmbG9hdCBwYWdlU2Nh
bGUgPSAxOwotICAgIGlmIChQYWdlKiBwYWdlID0gZG9jdW1lbnQoKS0+cGFnZSgpKSAKLSAgICAg
ICAgcGFnZVNjYWxlID0gcGFnZS0+cGFnZVNjYWxlRmFjdG9yKCk7Ci0KLSAgICBpZiAoRnJhbWVW
aWV3KiB2aWV3ID0gZG9jdW1lbnQoKS0+dmlldygpKSB7Ci0gICAgICAgIExheW91dFJlY3Qgdmlz
aWJsZUNvbnRlbnRSZWN0ID0gdmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7Ci0gICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgcXVhZHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIHF1
YWRzW2ldLm1vdmUoLXZpc2libGVDb250ZW50UmVjdC54KCksIC12aXNpYmxlQ29udGVudFJlY3Qu
eSgpKTsKLSAgICAgICAgICAgIGFkanVzdEZsb2F0UXVhZEZvckFic29sdXRlWm9vbShxdWFkc1tp
XSwgcmVuZGVyQm94TW9kZWxPYmplY3QpOwotICAgICAgICAgICAgaWYgKHBhZ2VTY2FsZSAhPSAx
KQotICAgICAgICAgICAgICAgIGFkanVzdEZsb2F0UXVhZEZvclBhZ2VTY2FsZShxdWFkc1tpXSwg
cGFnZVNjYWxlKTsKLSAgICAgICAgfQotICAgIH0KLQorICAgIGRvY3VtZW50KCktPmFkanVzdEZs
b2F0UXVhZHNGb3JTY3JvbGxBbmRBYnNvbHV0ZVpvb21BbmRQYWdlU2NhbGUocXVhZHMsIHJlbmRl
ckJveE1vZGVsT2JqZWN0KTsKICAgICByZXR1cm4gQ2xpZW50UmVjdExpc3Q6OmNyZWF0ZShxdWFk
cyk7CiB9CiAKQEAgLTYwMiwxNSArNTg4LDcgQEAgUGFzc1JlZlB0cjxDbGllbnRSZWN0PiBFbGVt
ZW50OjpnZXRCb3VuZAogICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgcXVhZHMuc2l6ZSgpOyAr
K2kpCiAgICAgICAgIHJlc3VsdC51bml0ZShxdWFkc1tpXS5ib3VuZGluZ0JveCgpKTsKIAotICAg
IGlmIChGcmFtZVZpZXcqIHZpZXcgPSBkb2N1bWVudCgpLT52aWV3KCkpIHsKLSAgICAgICAgTGF5
b3V0UmVjdCB2aXNpYmxlQ29udGVudFJlY3QgPSB2aWV3LT52aXNpYmxlQ29udGVudFJlY3QoKTsK
LSAgICAgICAgcmVzdWx0Lm1vdmUoLXZpc2libGVDb250ZW50UmVjdC54KCksIC12aXNpYmxlQ29u
dGVudFJlY3QueSgpKTsKLSAgICB9Ci0KLSAgICBhZGp1c3RGbG9hdFJlY3RGb3JBYnNvbHV0ZVpv
b20ocmVzdWx0LCByZW5kZXJlcigpKTsKLSAgICBpZiAoUGFnZSogcGFnZSA9IGRvY3VtZW50KCkt
PnBhZ2UoKSkKLSAgICAgICAgYWRqdXN0RmxvYXRSZWN0Rm9yUGFnZVNjYWxlKHJlc3VsdCwgcGFn
ZS0+cGFnZVNjYWxlRmFjdG9yKCkpOwotCisgICAgZG9jdW1lbnQoKS0+YWRqdXN0RmxvYXRSZWN0
Rm9yU2Nyb2xsQW5kQWJzb2x1dGVab29tQW5kUGFnZVNjYWxlKHJlc3VsdCwgcmVuZGVyZXIoKSk7
CiAgICAgcmV0dXJuIENsaWVudFJlY3Q6OmNyZWF0ZShyZXN1bHQpOwogfQogICAgIApJbmRleDog
U291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9kb20vUmFuZ2UuY3BwCShyZXZpc2lvbiAxMTk1OTQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20v
UmFuZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTQwLDI1ICsxOTQwLDYgQEAgUGFzc1JlZlB0
cjxDbGllbnRSZWN0PiBSYW5nZTo6Z2V0Qm91bmRpbgogICAgIHJldHVybiBDbGllbnRSZWN0Ojpj
cmVhdGUoYm91bmRpbmdSZWN0KCkpOwogfQogCi1zdGF0aWMgdm9pZCBhZGp1c3RGbG9hdFF1YWRz
Rm9yU2Nyb2xsQW5kQWJzb2x1dGVab29tQW5kUGFnZVNjYWxlKFZlY3RvcjxGbG9hdFF1YWQ+JiBx
dWFkcywgRG9jdW1lbnQqIGRvY3VtZW50LCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQotewotICAg
IEZyYW1lVmlldyogdmlldyA9IGRvY3VtZW50LT52aWV3KCk7Ci0gICAgaWYgKCF2aWV3KQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBmbG9hdCBwYWdlU2NhbGUgPSAxOwotICAgIGlmIChQYWdlKiBw
YWdlID0gZG9jdW1lbnQtPnBhZ2UoKSkKLSAgICAgICAgcGFnZVNjYWxlID0gcGFnZS0+cGFnZVNj
YWxlRmFjdG9yKCk7Ci0KLSAgICBMYXlvdXRSZWN0IHZpc2libGVDb250ZW50UmVjdCA9IHZpZXct
PnZpc2libGVDb250ZW50UmVjdCgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcXVhZHMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcXVhZHNbaV0ubW92ZSgtdmlzaWJsZUNvbnRlbnRSZWN0
LngoKSwgLXZpc2libGVDb250ZW50UmVjdC55KCkpOwotICAgICAgICBhZGp1c3RGbG9hdFF1YWRG
b3JBYnNvbHV0ZVpvb20ocXVhZHNbaV0sIHJlbmRlcmVyKTsKLSAgICAgICAgaWYgKHBhZ2VTY2Fs
ZSAhPSAxKQotICAgICAgICAgICAgYWRqdXN0RmxvYXRRdWFkRm9yUGFnZVNjYWxlKHF1YWRzW2ld
LCBwYWdlU2NhbGUpOwotICAgIH0KLX0KLQogdm9pZCBSYW5nZTo6Z2V0Qm9yZGVyQW5kVGV4dFF1
YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcykgY29uc3QKIHsKICAgICBOb2RlKiBzdGFydENv
bnRhaW5lciA9IG1fc3RhcnQuY29udGFpbmVyKCk7CkBAIC0xOTc3LDcgKzE5NTgsNyBAQCB2b2lk
IFJhbmdlOjpnZXRCb3JkZXJBbmRUZXh0UXVhZHMoVmVjdG9yCiAgICAgICAgICAgICAgICAgaWYg
KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZW5kZXJCb3hNb2RlbE9iamVjdCA9IHN0YXRpY19jYXN0
PEVsZW1lbnQqPihub2RlKS0+cmVuZGVyQm94TW9kZWxPYmplY3QoKSkgewogICAgICAgICAgICAg
ICAgICAgICBWZWN0b3I8RmxvYXRRdWFkPiBlbGVtZW50UXVhZHM7CiAgICAgICAgICAgICAgICAg
ICAgIHJlbmRlckJveE1vZGVsT2JqZWN0LT5hYnNvbHV0ZVF1YWRzKGVsZW1lbnRRdWFkcyk7Ci0g
ICAgICAgICAgICAgICAgICAgIGFkanVzdEZsb2F0UXVhZHNGb3JTY3JvbGxBbmRBYnNvbHV0ZVpv
b21BbmRQYWdlU2NhbGUoZWxlbWVudFF1YWRzLCBtX293bmVyRG9jdW1lbnQuZ2V0KCksIHJlbmRl
ckJveE1vZGVsT2JqZWN0KTsKKyAgICAgICAgICAgICAgICAgICAgbV9vd25lckRvY3VtZW50LT5h
ZGp1c3RGbG9hdFF1YWRzRm9yU2Nyb2xsQW5kQWJzb2x1dGVab29tQW5kUGFnZVNjYWxlKGVsZW1l
bnRRdWFkcywgcmVuZGVyQm94TW9kZWxPYmplY3QpOwogCiAgICAgICAgICAgICAgICAgICAgIHF1
YWRzLmFwcGVuZChlbGVtZW50UXVhZHMpOwogICAgICAgICAgICAgICAgIH0KQEAgLTE5OTAsNyAr
MTk3MSw3IEBAIHZvaWQgUmFuZ2U6OmdldEJvcmRlckFuZFRleHRRdWFkcyhWZWN0b3IKICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICBWZWN0b3I8RmxvYXRRdWFkPiB0ZXh0UXVhZHM7
CiAgICAgICAgICAgICAgICAgcmVuZGVyVGV4dC0+YWJzb2x1dGVRdWFkc0ZvclJhbmdlKHRleHRR
dWFkcywgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7Ci0gICAgICAgICAgICAgICAgYWRqdXN0Rmxv
YXRRdWFkc0ZvclNjcm9sbEFuZEFic29sdXRlWm9vbUFuZFBhZ2VTY2FsZSh0ZXh0UXVhZHMsIG1f
b3duZXJEb2N1bWVudC5nZXQoKSwgcmVuZGVyVGV4dCk7CisgICAgICAgICAgICAgICAgbV9vd25l
ckRvY3VtZW50LT5hZGp1c3RGbG9hdFF1YWRzRm9yU2Nyb2xsQW5kQWJzb2x1dGVab29tQW5kUGFn
ZVNjYWxlKHRleHRRdWFkcywgcmVuZGVyVGV4dCk7CiAKICAgICAgICAgICAgICAgICBxdWFkcy5h
cHBlbmQodGV4dFF1YWRzKTsKICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHJldmlzaW9uIDExOTU5NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTIxNCwxOCArMTIx
NCw2IEBAIGlubGluZSB2b2lkIGFkanVzdEZsb2F0UmVjdEZvckFic29sdXRlWm8KICAgICAgICAg
cmVjdC5zY2FsZSgxIC8gem9vbSwgMSAvIHpvb20pOwogfQogCi1pbmxpbmUgdm9pZCBhZGp1c3RG
bG9hdFF1YWRGb3JQYWdlU2NhbGUoRmxvYXRRdWFkJiBxdWFkLCBmbG9hdCBwYWdlU2NhbGUpCi17
Ci0gICAgaWYgKHBhZ2VTY2FsZSAhPSAxKQotICAgICAgICBxdWFkLnNjYWxlKDEgLyBwYWdlU2Nh
bGUsIDEgLyBwYWdlU2NhbGUpOwotfQotCi1pbmxpbmUgdm9pZCBhZGp1c3RGbG9hdFJlY3RGb3JQ
YWdlU2NhbGUoRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBwYWdlU2NhbGUpCi17Ci0gICAgaWYgKHBh
Z2VTY2FsZSAhPSAxKQotICAgICAgICByZWN0LnNjYWxlKDEgLyBwYWdlU2NhbGUsIDEgLyBwYWdl
U2NhbGUpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNpZm5kZWYgTkRFQlVHCklu
ZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxMTk2MDApCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAxMi0wNi0wNiAgWGlhbnpodSBXYW5nICA8d2Fu
Z3hpYW56aHVAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEVsZW1lbnQuZ2V0Qm91ZGluZ0NsaWVu
dFJlY3QoKSBhbmQgRWxlbWVudC5nZXRDbGllbnRSZWN0cygpIHJldHVybiBpbmNvcnJlY3QgdmFs
dWVzIGluIGZyYW1lcyBpbiBhIHNjYWxlZCBwYWdlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD04ODQzMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogZmFzdC9kb20vRWxlbWVudC9yZXNvdXJjZXMvY2xpZW50
LXJlY3QtZnJhbWUuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vRWxlbWVudC9zY2Fs
ZS1wYWdlLWJvdW5kaW5nLWNsaWVudC1yZWN0LWluLWZyYW1lLWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICogZmFzdC9kb20vRWxlbWVudC9zY2FsZS1wYWdlLWJvdW5kaW5nLWNsaWVudC1y
ZWN0LWluLWZyYW1lLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL0VsZW1lbnQvc2Nh
bGUtcGFnZS1jbGllbnQtcmVjdHMtaW4tZnJhbWUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiBmYXN0L2RvbS9FbGVtZW50L3NjYWxlLXBhZ2UtY2xpZW50LXJlY3RzLWluLWZyYW1lLmh0
bWw6IEFkZGVkLgorCiAyMDEyLTA2LTA2ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3Jn
PgogCiAgICAgICAgIENocm9taXVtIHJlYmFzZWxpbmUgYWZ0ZXIgcjExOTU5MSBiZWNhdXNlIGl0
IHdhcyBmYWlsaW5nIHdpdGggbWlzc2luZyByZXN1bHRzLgpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC9kb20vRWxlbWVudC9zY2FsZS1wYWdlLWJvdW5kaW5nLWNsaWVudC1yZWN0LWluLWZyYW1lLWV4
cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L3Nj
YWxlLXBhZ2UtYm91bmRpbmctY2xpZW50LXJlY3QtaW4tZnJhbWUtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9zY2FsZS1wYWdlLWJvdW5k
aW5nLWNsaWVudC1yZWN0LWluLWZyYW1lLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwyIEBACisKK1Bhc3MKClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2Zhc3Qv
ZG9tL0VsZW1lbnQvc2NhbGUtcGFnZS1ib3VuZGluZy1jbGllbnQtcmVjdC1pbi1mcmFtZS1leHBl
Y3RlZC50eHQKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRleDog
TGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9zY2FsZS1wYWdlLWJvdW5kaW5nLWNsaWVudC1y
ZWN0LWluLWZyYW1lLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxl
bWVudC9zY2FsZS1wYWdlLWJvdW5kaW5nLWNsaWVudC1yZWN0LWluLWZyYW1lLmh0bWwJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L3NjYWxlLXBhZ2UtYm91bmRp
bmctY2xpZW50LXJlY3QtaW4tZnJhbWUuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMiBA
QAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CitmdW5jdGlvbiB0ZXN0UmVjdHMoKQoreworICAg
IGlmICghd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyIHx8ICF3aW5kb3cuaW50ZXJuYWxzKQor
ICAgICAgICByZXR1cm47CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOwor
ICAgIAorICAgIHZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZnJhbWUiKS5jb250
ZW50RG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRpdiIpOworICAgIHZhciByZWN0ID0gZGl2Lmdl
dEJvdW5kaW5nQ2xpZW50UmVjdCgpOworICAgIHdpbmRvdy5pbnRlcm5hbHMuc2V0dGluZ3Muc2V0
UGFnZVNjYWxlRmFjdG9yKDIsIDAsIDApOworICAgIHZhciBzY2FsZWRSZWN0ID0gZGl2LmdldEJv
dW5kaW5nQ2xpZW50UmVjdCgpOworCisgICAgdmFyIHJlc3VsdCA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJyZXN1bHQiKTsKKyAgICBpZiAocmVjdC5sZWZ0ID09IHNjYWxlZFJlY3QubGVmdCAm
JgorICAgICAgICByZWN0LnRvcCA9PSBzY2FsZWRSZWN0LnRvcCAmJgorICAgICAgICByZWN0LnJp
Z2h0ID09IHNjYWxlZFJlY3QucmlnaHQgJiYKKyAgICAgICAgcmVjdC5ib3R0b20gPT0gc2NhbGVk
UmVjdC5ib3R0b20pCisgICAgICAgIHJlc3VsdC5pbm5lckhUTUwgPSAiUGFzcyI7CisgICAgZWxz
ZQorICAgICAgICByZXN1bHQuaW5uZXJIVE1MID0gIkZhaWwiOworICAgIAorfQorPC9zY3JpcHQ+
Cis8L2hlYWQ+CisKKzxib2R5IG9ubG9hZD0idGVzdFJlY3RzKCk7Ij4KKyAgICA8aWZyYW1lIGlk
PSJmcmFtZSIgc3JjPSJyZXNvdXJjZXMvY2xpZW50LXJlY3QtZnJhbWUuaHRtbCIgd2lkdGg9IjMw
MCIgaGVpZ2h0PSIyMDAiPjwvaWZyYW1lPgorICAgIDxwIGlkPSJyZXN1bHQiPlRoaXMgdGVzdCBt
dXN0IGJlIHJ1biB2aWEgRHVtcFJlbmRlclRyZWUuPC9wPgorPC9ib2R5PgorPC9odG1sPgoKUHJv
cGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9zY2FsZS1wYWdl
LWJvdW5kaW5nLWNsaWVudC1yZWN0LWluLWZyYW1lLmh0bWwKX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3Zu
OmVvbC1zdHlsZQogICArIExGCgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9z
Y2FsZS1wYWdlLWNsaWVudC1yZWN0cy1pbi1mcmFtZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9zY2FsZS1wYWdlLWNsaWVudC1yZWN0cy1p
bi1mcmFtZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Rv
bS9FbGVtZW50L3NjYWxlLXBhZ2UtY2xpZW50LXJlY3RzLWluLWZyYW1lLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwyIEBACisKK1Bhc3MKClByb3BlcnR5IGNoYW5nZXMgb246
IExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvc2NhbGUtcGFnZS1jbGllbnQtcmVjdHMtaW4t
ZnJhbWUtZXhwZWN0ZWQudHh0Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBM
RgoKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvc2NhbGUtcGFnZS1jbGllbnQt
cmVjdHMtaW4tZnJhbWUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9F
bGVtZW50L3NjYWxlLXBhZ2UtY2xpZW50LXJlY3RzLWluLWZyYW1lLmh0bWwJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L3NjYWxlLXBhZ2UtY2xpZW50LXJlY3Rz
LWluLWZyYW1lLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzIgQEAKKzxodG1sPgorPGhl
YWQ+Cis8c2NyaXB0PgorZnVuY3Rpb24gdGVzdFJlY3RzKCkKK3sKKyAgICBpZiAoIXdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlciB8fCAhd2luZG93LmludGVybmFscykKKyAgICAgICAgcmV0dXJu
OworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAKKyAgICB2YXIg
ZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZyYW1lIikuY29udGVudERvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJkaXYiKTsKKyAgICB2YXIgcmVjdCA9IGRpdi5nZXRDbGllbnRSZWN0cygp
WzBdOworICAgIHdpbmRvdy5pbnRlcm5hbHMuc2V0dGluZ3Muc2V0UGFnZVNjYWxlRmFjdG9yKDIs
IDAsIDApOworICAgIHZhciBzY2FsZWRSZWN0ID0gZGl2LmdldENsaWVudFJlY3RzKClbMF07CisK
KyAgICB2YXIgcmVzdWx0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlc3VsdCIpOworICAg
IGlmIChyZWN0LmxlZnQgPT0gc2NhbGVkUmVjdC5sZWZ0ICYmCisgICAgICAgIHJlY3QudG9wID09
IHNjYWxlZFJlY3QudG9wICYmCisgICAgICAgIHJlY3QucmlnaHQgPT0gc2NhbGVkUmVjdC5yaWdo
dCAmJgorICAgICAgICByZWN0LmJvdHRvbSA9PSBzY2FsZWRSZWN0LmJvdHRvbSkKKyAgICAgICAg
cmVzdWx0LmlubmVySFRNTCA9ICJQYXNzIjsKKyAgICBlbHNlCisgICAgICAgIHJlc3VsdC5pbm5l
ckhUTUwgPSAiRmFpbCI7CisgICAgCit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHkgb25s
b2FkPSJ0ZXN0UmVjdHMoKTsiPgorICAgIDxpZnJhbWUgaWQ9ImZyYW1lIiBzcmM9InJlc291cmNl
cy9jbGllbnQtcmVjdC1mcmFtZS5odG1sIiB3aWR0aD0iMzAwIiBoZWlnaHQ9IjIwMCI+PC9pZnJh
bWU+CisgICAgPHAgaWQ9InJlc3VsdCI+VGhpcyB0ZXN0IG11c3QgYmUgcnVuIHZpYSBEdW1wUmVu
ZGVyVHJlZS48L3A+Cis8L2JvZHk+Cis8L2h0bWw+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlv
dXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L3NjYWxlLXBhZ2UtY2xpZW50LXJlY3RzLWluLWZyYW1l
Lmh0bWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRleDogTGF5
b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9yZXNvdXJjZXMvY2xpZW50LXJlY3QtZnJhbWUuaHRt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L3Jlc291cmNlcy9j
bGllbnQtcmVjdC1mcmFtZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9k
b20vRWxlbWVudC9yZXNvdXJjZXMvY2xpZW50LXJlY3QtZnJhbWUuaHRtbAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw1IEBACis8aHRtbD4KKzxib2R5PgorICAgIDxkaXYgaWQ9ImRpdiIgc3R5bGU9
Im1hcmdpbi1sZWZ0OjYwcHg7IG1hcmdpbi10b3A6MzNweDsgd2lkdGg6MTUwcHg7IGhlaWdodDox
MTBweDsgYmFja2dyb3VuZC1jb2xvcjpncmVlbjsiPjwvZGl2PgorPC9ib2R5PgorPC9odG1sPgoK
UHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9yZXNvdXJj
ZXMvY2xpZW50LXJlY3QtZnJhbWUuaHRtbApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxl
CiAgICsgTEYKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>146098</attachid>
            <date>2012-06-06 13:28:33 -0700</date>
            <delta_ts>2012-06-06 16:52:07 -0700</delta_ts>
            <desc>patch v3 (using Frame::frameScaleFactor())</desc>
            <filename>88430a</filename>
            <type>text/plain</type>
            <size>14654</size>
            <attacher name="Xianzhu Wang">wangxianzhu</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExOTYwMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMzIEBACisyMDEyLTA2LTA2ICBYaWFuemh1
IFdhbmcgIDx3YW5neGlhbnpodUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgRWxlbWVudC5nZXRC
b3VkaW5nQ2xpZW50UmVjdCgpIGFuZCBFbGVtZW50LmdldENsaWVudFJlY3RzKCkgcmV0dXJuIGlu
Y29ycmVjdCB2YWx1ZXMgaW4gZnJhbWVzIGluIGEgc2NhbGVkIHBhZ2UKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg4NDMwCisKKyAgICAgICAgRWxlbWVu
dC5nZXRCb3VkaW5nQ2xpZW50UmVjdCgpIGFuZCBFbGVtZW50LmdldENsaWVudFJlY3RzKCkgc2hv
dWxkIG5vdCBzY2FsZSBiYWNrIHRoZSByZWN0cworICAgICAgICBpZiB0aGUgZWxlbWVudCBpcyBp
biBhIGZyYW1lIGJlY2F1c2UgcGFnZSBzY2FsZSBvbmx5IGFwcGx5IHRvIGVsZW1lbnRzIGluIHRo
ZSBtYWluIGZyYW1lLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRlc3RzOiBmYXN0L2RvbS9FbGVtZW50L3NjYWxlLXBhZ2UtYm91bmRpbmctY2xpZW50
LXJlY3QtaW4tZnJhbWUuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9kb20vRWxlbWVudC9zY2Fs
ZS1wYWdlLWNsaWVudC1yZWN0cy1pbi1mcmFtZS5odG1sCisKKyAgICAgICAgKiBkb20vRG9jdW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6
YWRqdXN0RmxvYXRRdWFkc0ZvclNjcm9sbEFuZEFic29sdXRlWm9vbUFuZFBhZ2VTY2FsZSk6IEV4
dHJhY3RlZCBmcm9tIEVsZW1lbnQuY3BwIGFuZCBSYW5nZS5jcHAgYW5kIGZpeGVkIGlzc3VlIG9m
IHBhZ2VTY2FsZSBpbiBmcmFtZXMuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6YWRqdXN0
RmxvYXRSZWN0Rm9yU2Nyb2xsQW5kQWJzb2x1dGVab29tQW5kUGFnZVNjYWxlKTogRXh0cmFjdGVk
IGZyb20gRWxlbWVudC5jcHAgYW5kIGZpeGVkIGlzc3VlIG9mIHBhZ2VTY2FsZSBpbiBmcmFtZXMu
CisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KERvY3VtZW50KToKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpFbGVtZW50OjpnZXRDbGllbnRSZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojpn
ZXRCb3VuZGluZ0NsaWVudFJlY3QpOgorICAgICAgICAqIGRvbS9SYW5nZS5jcHA6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OmFkanVzdEZsb2F0UXVhZHNGb3JTY3JvbGxB
bmRBYnNvbHV0ZVpvb21BbmRQYWdlU2NhbGUpOiBNb3ZlZCBpbnRvIERvY3VtZW50IGFuZCBmaXhl
ZCBpc3N1ZSBvZiBwYWdlU2NhbGUgaW4gZnJhbWVzLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6
OmdldEJvcmRlckFuZFRleHRRdWFkcyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5oOiBSZW1vdmVkIGFkanVzdEZsb2F0UXVhZEZvclBhZ2VTY2FsZSBhbmQgYWRqdXN0RmxvYXRS
ZWN0Rm9yUGFnZVNjYWxlIGJlY2F1c2UgdGhleSBzZWVtIHVucmVsYXRlZCB0byBSZW5kZXJPYmpl
Y3QuCisgICAgICAgIChXZWJDb3JlKToKKwogMjAxMi0wNi0wNiAgSnVsaWVuIENoYWZmcmFpeCAg
PGpjaGFmZnJhaXhAd2Via2l0Lm9yZz4KIAogICAgICAgICBBZGQgc3VwcG9ydCBmb3IgZGlyZWN0
aW9uIG9uIHRhYmxlIHJvdyBncm91cCB3aXRoIGNvbGxhcHNpbmcgYm9yZGVycwpJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAxMTk1OTQpCisrKyBTb3VyY2UvV2ViQ29yZS9k
b20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MDM4LDQgKzYwMzgsMzkgQEAgTm9k
ZSogZXZlbnRUYXJnZXROb2RlRm9yRG9jdW1lbnQoRG9jdW1lbgogICAgIHJldHVybiBub2RlOwog
fQogCisKK3ZvaWQgRG9jdW1lbnQ6OmFkanVzdEZsb2F0UXVhZHNGb3JTY3JvbGxBbmRBYnNvbHV0
ZVpvb21BbmRQYWdlU2NhbGUoVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzLCBSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyKQoreworICAgIGlmICghdmlldygpKQorICAgICAgICByZXR1cm47CisKKyAgICBm
bG9hdCBpbnZlcnNlUGFnZVNjYWxlID0gMTsKKyAgICBpZiAoZnJhbWUoKSkKKyAgICAgICAgaW52
ZXJzZVBhZ2VTY2FsZSA9IDEgLyBmcmFtZSgpLT5mcmFtZVNjYWxlRmFjdG9yKCk7CisKKyAgICBM
YXlvdXRSZWN0IHZpc2libGVDb250ZW50UmVjdCA9IHZpZXcoKS0+dmlzaWJsZUNvbnRlbnRSZWN0
KCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBxdWFkcy5zaXplKCk7ICsraSkgeworICAg
ICAgICBxdWFkc1tpXS5tb3ZlKC12aXNpYmxlQ29udGVudFJlY3QueCgpLCAtdmlzaWJsZUNvbnRl
bnRSZWN0LnkoKSk7CisgICAgICAgIGFkanVzdEZsb2F0UXVhZEZvckFic29sdXRlWm9vbShxdWFk
c1tpXSwgcmVuZGVyZXIpOworICAgICAgICBpZiAoaW52ZXJzZVBhZ2VTY2FsZSAhPSAxKQorICAg
ICAgICAgICAgcXVhZHNbaV0uc2NhbGUoaW52ZXJzZVBhZ2VTY2FsZSwgaW52ZXJzZVBhZ2VTY2Fs
ZSk7CisgICAgfQorfQorCit2b2lkIERvY3VtZW50OjphZGp1c3RGbG9hdFJlY3RGb3JTY3JvbGxB
bmRBYnNvbHV0ZVpvb21BbmRQYWdlU2NhbGUoRmxvYXRSZWN0JiByZWN0LCBSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyKQoreworICAgIGlmICghdmlldygpKQorICAgICAgICByZXR1cm47CisKKyAgICBm
bG9hdCBpbnZlcnNlUGFnZVNjYWxlID0gMTsKKyAgICBpZiAoZnJhbWUoKSkKKyAgICAgICAgaW52
ZXJzZVBhZ2VTY2FsZSA9IDEgLyBmcmFtZSgpLT5mcmFtZVNjYWxlRmFjdG9yKCk7CisKKyAgICBM
YXlvdXRSZWN0IHZpc2libGVDb250ZW50UmVjdCA9IHZpZXcoKS0+dmlzaWJsZUNvbnRlbnRSZWN0
KCk7CisgICAgcmVjdC5tb3ZlKC12aXNpYmxlQ29udGVudFJlY3QueCgpLCAtdmlzaWJsZUNvbnRl
bnRSZWN0LnkoKSk7CisgICAgYWRqdXN0RmxvYXRSZWN0Rm9yQWJzb2x1dGVab29tKHJlY3QsIHJl
bmRlcmVyKTsKKyAgICBpZiAoaW52ZXJzZVBhZ2VTY2FsZSAhPSAxKQorICAgICAgICByZWN0LnNj
YWxlKGludmVyc2VQYWdlU2NhbGUpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24gMTE5NTk0KQorKysgU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTgzLDYgKzgzLDggQEAgY2xhc3MgRWxl
bWVudDsKIGNsYXNzIEVudGl0eVJlZmVyZW5jZTsKIGNsYXNzIEV2ZW50OwogY2xhc3MgRXZlbnRM
aXN0ZW5lcjsKK2NsYXNzIEZsb2F0UmVjdDsKK2NsYXNzIEZsb2F0UXVhZDsKIGNsYXNzIEZvbnRE
YXRhOwogY2xhc3MgRm9ybUFzc29jaWF0ZWRFbGVtZW50OwogY2xhc3MgRnJhbWU7CkBAIC0xMTYw
LDYgKzExNjIsOSBAQCBwdWJsaWM6CiAgICAgUHJlcmVuZGVyZXIqIHByZXJlbmRlcmVyKCkgeyBy
ZXR1cm4gbV9wcmVyZW5kZXJlci5nZXQoKTsgfQogI2VuZGlmCiAKKyAgICB2b2lkIGFkanVzdEZs
b2F0UXVhZHNGb3JTY3JvbGxBbmRBYnNvbHV0ZVpvb21BbmRQYWdlU2NhbGUoVmVjdG9yPEZsb2F0
UXVhZD4mLCBSZW5kZXJPYmplY3QqKTsKKyAgICB2b2lkIGFkanVzdEZsb2F0UmVjdEZvclNjcm9s
bEFuZEFic29sdXRlWm9vbUFuZFBhZ2VTY2FsZShGbG9hdFJlY3QmLCBSZW5kZXJPYmplY3QqKTsK
KwogcHJvdGVjdGVkOgogICAgIERvY3VtZW50KEZyYW1lKiwgY29uc3QgS1VSTCYsIGJvb2wgaXNY
SFRNTCwgYm9vbCBpc0hUTUwpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCShyZXZpc2lv
biAxMTk1OTQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU1NywyMSArNTU3LDcgQEAgUGFzc1JlZlB0cjxDbGllbnRSZWN0TGlzdD4gRWxlbWVu
dDo6Z2V0QwogCiAgICAgVmVjdG9yPEZsb2F0UXVhZD4gcXVhZHM7CiAgICAgcmVuZGVyQm94TW9k
ZWxPYmplY3QtPmFic29sdXRlUXVhZHMocXVhZHMpOwotCi0gICAgZmxvYXQgcGFnZVNjYWxlID0g
MTsKLSAgICBpZiAoUGFnZSogcGFnZSA9IGRvY3VtZW50KCktPnBhZ2UoKSkgCi0gICAgICAgIHBh
Z2VTY2FsZSA9IHBhZ2UtPnBhZ2VTY2FsZUZhY3RvcigpOwotCi0gICAgaWYgKEZyYW1lVmlldyog
dmlldyA9IGRvY3VtZW50KCktPnZpZXcoKSkgewotICAgICAgICBMYXlvdXRSZWN0IHZpc2libGVD
b250ZW50UmVjdCA9IHZpZXctPnZpc2libGVDb250ZW50UmVjdCgpOwotICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHF1YWRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBxdWFkc1tp
XS5tb3ZlKC12aXNpYmxlQ29udGVudFJlY3QueCgpLCAtdmlzaWJsZUNvbnRlbnRSZWN0LnkoKSk7
Ci0gICAgICAgICAgICBhZGp1c3RGbG9hdFF1YWRGb3JBYnNvbHV0ZVpvb20ocXVhZHNbaV0sIHJl
bmRlckJveE1vZGVsT2JqZWN0KTsKLSAgICAgICAgICAgIGlmIChwYWdlU2NhbGUgIT0gMSkKLSAg
ICAgICAgICAgICAgICBhZGp1c3RGbG9hdFF1YWRGb3JQYWdlU2NhbGUocXVhZHNbaV0sIHBhZ2VT
Y2FsZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KKyAgICBkb2N1bWVudCgpLT5hZGp1c3RGbG9hdFF1
YWRzRm9yU2Nyb2xsQW5kQWJzb2x1dGVab29tQW5kUGFnZVNjYWxlKHF1YWRzLCByZW5kZXJCb3hN
b2RlbE9iamVjdCk7CiAgICAgcmV0dXJuIENsaWVudFJlY3RMaXN0OjpjcmVhdGUocXVhZHMpOwog
fQogCkBAIC02MDIsMTUgKzU4OCw3IEBAIFBhc3NSZWZQdHI8Q2xpZW50UmVjdD4gRWxlbWVudDo6
Z2V0Qm91bmQKICAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IHF1YWRzLnNpemUoKTsgKytpKQog
ICAgICAgICByZXN1bHQudW5pdGUocXVhZHNbaV0uYm91bmRpbmdCb3goKSk7CiAKLSAgICBpZiAo
RnJhbWVWaWV3KiB2aWV3ID0gZG9jdW1lbnQoKS0+dmlldygpKSB7Ci0gICAgICAgIExheW91dFJl
Y3QgdmlzaWJsZUNvbnRlbnRSZWN0ID0gdmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7Ci0gICAg
ICAgIHJlc3VsdC5tb3ZlKC12aXNpYmxlQ29udGVudFJlY3QueCgpLCAtdmlzaWJsZUNvbnRlbnRS
ZWN0LnkoKSk7Ci0gICAgfQotCi0gICAgYWRqdXN0RmxvYXRSZWN0Rm9yQWJzb2x1dGVab29tKHJl
c3VsdCwgcmVuZGVyZXIoKSk7Ci0gICAgaWYgKFBhZ2UqIHBhZ2UgPSBkb2N1bWVudCgpLT5wYWdl
KCkpCi0gICAgICAgIGFkanVzdEZsb2F0UmVjdEZvclBhZ2VTY2FsZShyZXN1bHQsIHBhZ2UtPnBh
Z2VTY2FsZUZhY3RvcigpKTsKLQorICAgIGRvY3VtZW50KCktPmFkanVzdEZsb2F0UmVjdEZvclNj
cm9sbEFuZEFic29sdXRlWm9vbUFuZFBhZ2VTY2FsZShyZXN1bHQsIHJlbmRlcmVyKCkpOwogICAg
IHJldHVybiBDbGllbnRSZWN0OjpjcmVhdGUocmVzdWx0KTsKIH0KICAgICAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9t
L1JhbmdlLmNwcAkocmV2aXNpb24gMTE5NTk0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1Jhbmdl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk0MCwyNSArMTk0MCw2IEBAIFBhc3NSZWZQdHI8Q2xp
ZW50UmVjdD4gUmFuZ2U6OmdldEJvdW5kaW4KICAgICByZXR1cm4gQ2xpZW50UmVjdDo6Y3JlYXRl
KGJvdW5kaW5nUmVjdCgpKTsKIH0KIAotc3RhdGljIHZvaWQgYWRqdXN0RmxvYXRRdWFkc0ZvclNj
cm9sbEFuZEFic29sdXRlWm9vbUFuZFBhZ2VTY2FsZShWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMs
IERvY3VtZW50KiBkb2N1bWVudCwgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKLXsKLSAgICBGcmFt
ZVZpZXcqIHZpZXcgPSBkb2N1bWVudC0+dmlldygpOwotICAgIGlmICghdmlldykKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgZmxvYXQgcGFnZVNjYWxlID0gMTsKLSAgICBpZiAoUGFnZSogcGFnZSA9
IGRvY3VtZW50LT5wYWdlKCkpCi0gICAgICAgIHBhZ2VTY2FsZSA9IHBhZ2UtPnBhZ2VTY2FsZUZh
Y3RvcigpOwotCi0gICAgTGF5b3V0UmVjdCB2aXNpYmxlQ29udGVudFJlY3QgPSB2aWV3LT52aXNp
YmxlQ29udGVudFJlY3QoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHF1YWRzLnNpemUo
KTsgKytpKSB7Ci0gICAgICAgIHF1YWRzW2ldLm1vdmUoLXZpc2libGVDb250ZW50UmVjdC54KCks
IC12aXNpYmxlQ29udGVudFJlY3QueSgpKTsKLSAgICAgICAgYWRqdXN0RmxvYXRRdWFkRm9yQWJz
b2x1dGVab29tKHF1YWRzW2ldLCByZW5kZXJlcik7Ci0gICAgICAgIGlmIChwYWdlU2NhbGUgIT0g
MSkKLSAgICAgICAgICAgIGFkanVzdEZsb2F0UXVhZEZvclBhZ2VTY2FsZShxdWFkc1tpXSwgcGFn
ZVNjYWxlKTsKLSAgICB9Ci19Ci0KIHZvaWQgUmFuZ2U6OmdldEJvcmRlckFuZFRleHRRdWFkcyhW
ZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMpIGNvbnN0CiB7CiAgICAgTm9kZSogc3RhcnRDb250YWlu
ZXIgPSBtX3N0YXJ0LmNvbnRhaW5lcigpOwpAQCAtMTk3Nyw3ICsxOTU4LDcgQEAgdm9pZCBSYW5n
ZTo6Z2V0Qm9yZGVyQW5kVGV4dFF1YWRzKFZlY3RvcgogICAgICAgICAgICAgICAgIGlmIChSZW5k
ZXJCb3hNb2RlbE9iamVjdCogcmVuZGVyQm94TW9kZWxPYmplY3QgPSBzdGF0aWNfY2FzdDxFbGVt
ZW50Kj4obm9kZSktPnJlbmRlckJveE1vZGVsT2JqZWN0KCkpIHsKICAgICAgICAgICAgICAgICAg
ICAgVmVjdG9yPEZsb2F0UXVhZD4gZWxlbWVudFF1YWRzOwogICAgICAgICAgICAgICAgICAgICBy
ZW5kZXJCb3hNb2RlbE9iamVjdC0+YWJzb2x1dGVRdWFkcyhlbGVtZW50UXVhZHMpOwotICAgICAg
ICAgICAgICAgICAgICBhZGp1c3RGbG9hdFF1YWRzRm9yU2Nyb2xsQW5kQWJzb2x1dGVab29tQW5k
UGFnZVNjYWxlKGVsZW1lbnRRdWFkcywgbV9vd25lckRvY3VtZW50LmdldCgpLCByZW5kZXJCb3hN
b2RlbE9iamVjdCk7CisgICAgICAgICAgICAgICAgICAgIG1fb3duZXJEb2N1bWVudC0+YWRqdXN0
RmxvYXRRdWFkc0ZvclNjcm9sbEFuZEFic29sdXRlWm9vbUFuZFBhZ2VTY2FsZShlbGVtZW50UXVh
ZHMsIHJlbmRlckJveE1vZGVsT2JqZWN0KTsKIAogICAgICAgICAgICAgICAgICAgICBxdWFkcy5h
cHBlbmQoZWxlbWVudFF1YWRzKTsKICAgICAgICAgICAgICAgICB9CkBAIC0xOTkwLDcgKzE5NzEs
NyBAQCB2b2lkIFJhbmdlOjpnZXRCb3JkZXJBbmRUZXh0UXVhZHMoVmVjdG9yCiAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgVmVjdG9yPEZsb2F0UXVhZD4gdGV4dFF1YWRzOwogICAg
ICAgICAgICAgICAgIHJlbmRlclRleHQtPmFic29sdXRlUXVhZHNGb3JSYW5nZSh0ZXh0UXVhZHMs
IHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOwotICAgICAgICAgICAgICAgIGFkanVzdEZsb2F0UXVh
ZHNGb3JTY3JvbGxBbmRBYnNvbHV0ZVpvb21BbmRQYWdlU2NhbGUodGV4dFF1YWRzLCBtX293bmVy
RG9jdW1lbnQuZ2V0KCksIHJlbmRlclRleHQpOworICAgICAgICAgICAgICAgIG1fb3duZXJEb2N1
bWVudC0+YWRqdXN0RmxvYXRRdWFkc0ZvclNjcm9sbEFuZEFic29sdXRlWm9vbUFuZFBhZ2VTY2Fs
ZSh0ZXh0UXVhZHMsIHJlbmRlclRleHQpOwogCiAgICAgICAgICAgICAgICAgcXVhZHMuYXBwZW5k
KHRleHRRdWFkcyk7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5oCShyZXZpc2lvbiAxMTk1OTQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMTQsMTggKzEyMTQsNiBA
QCBpbmxpbmUgdm9pZCBhZGp1c3RGbG9hdFJlY3RGb3JBYnNvbHV0ZVpvCiAgICAgICAgIHJlY3Qu
c2NhbGUoMSAvIHpvb20sIDEgLyB6b29tKTsKIH0KIAotaW5saW5lIHZvaWQgYWRqdXN0RmxvYXRR
dWFkRm9yUGFnZVNjYWxlKEZsb2F0UXVhZCYgcXVhZCwgZmxvYXQgcGFnZVNjYWxlKQotewotICAg
IGlmIChwYWdlU2NhbGUgIT0gMSkKLSAgICAgICAgcXVhZC5zY2FsZSgxIC8gcGFnZVNjYWxlLCAx
IC8gcGFnZVNjYWxlKTsKLX0KLQotaW5saW5lIHZvaWQgYWRqdXN0RmxvYXRSZWN0Rm9yUGFnZVNj
YWxlKEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgcGFnZVNjYWxlKQotewotICAgIGlmIChwYWdlU2Nh
bGUgIT0gMSkKLSAgICAgICAgcmVjdC5zY2FsZSgxIC8gcGFnZVNjYWxlLCAxIC8gcGFnZVNjYWxl
KTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjaWZuZGVmIE5ERUJVRwpJbmRleDog
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxv
ZwkocmV2aXNpb24gMTE5NjAwKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTItMDYtMDYgIFhpYW56aHUgV2FuZyAgPHdhbmd4aWFu
emh1QGNocm9taXVtLm9yZz4KKworICAgICAgICBFbGVtZW50LmdldEJvdWRpbmdDbGllbnRSZWN0
KCkgYW5kIEVsZW1lbnQuZ2V0Q2xpZW50UmVjdHMoKSByZXR1cm4gaW5jb3JyZWN0IHZhbHVlcyBp
biBmcmFtZXMgaW4gYSBzY2FsZWQgcGFnZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9ODg0MzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIGZhc3QvZG9tL0VsZW1lbnQvcmVzb3VyY2VzL2NsaWVudC1yZWN0
LWZyYW1lLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL0VsZW1lbnQvc2NhbGUtcGFn
ZS1ib3VuZGluZy1jbGllbnQtcmVjdC1pbi1mcmFtZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIGZhc3QvZG9tL0VsZW1lbnQvc2NhbGUtcGFnZS1ib3VuZGluZy1jbGllbnQtcmVjdC1p
bi1mcmFtZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9FbGVtZW50L3NjYWxlLXBh
Z2UtY2xpZW50LXJlY3RzLWluLWZyYW1lLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
ZmFzdC9kb20vRWxlbWVudC9zY2FsZS1wYWdlLWNsaWVudC1yZWN0cy1pbi1mcmFtZS5odG1sOiBB
ZGRlZC4KKwogMjAxMi0wNi0wNiAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAog
ICAgICAgICBDaHJvbWl1bSByZWJhc2VsaW5lIGFmdGVyIHIxMTk1OTEgYmVjYXVzZSBpdCB3YXMg
ZmFpbGluZyB3aXRoIG1pc3NpbmcgcmVzdWx0cy4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9t
L0VsZW1lbnQvc2NhbGUtcGFnZS1ib3VuZGluZy1jbGllbnQtcmVjdC1pbi1mcmFtZS1leHBlY3Rl
ZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9zY2FsZS1w
YWdlLWJvdW5kaW5nLWNsaWVudC1yZWN0LWluLWZyYW1lLWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvc2NhbGUtcGFnZS1ib3VuZGluZy1j
bGllbnQtcmVjdC1pbi1mcmFtZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MiBAQAorCitQYXNzCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9F
bGVtZW50L3NjYWxlLXBhZ2UtYm91bmRpbmctY2xpZW50LXJlY3QtaW4tZnJhbWUtZXhwZWN0ZWQu
dHh0Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoKSW5kZXg6IExheW91
dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvc2NhbGUtcGFnZS1ib3VuZGluZy1jbGllbnQtcmVjdC1p
bi1mcmFtZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQv
c2NhbGUtcGFnZS1ib3VuZGluZy1jbGllbnQtcmVjdC1pbi1mcmFtZS5odG1sCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9zY2FsZS1wYWdlLWJvdW5kaW5nLWNs
aWVudC1yZWN0LWluLWZyYW1lLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzIgQEAKKzxo
dG1sPgorPGhlYWQ+Cis8c2NyaXB0PgorZnVuY3Rpb24gdGVzdFJlY3RzKCkKK3sKKyAgICBpZiAo
IXdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlciB8fCAhd2luZG93LmludGVybmFscykKKyAgICAg
ICAgcmV0dXJuOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAK
KyAgICB2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZyYW1lIikuY29udGVudERv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJkaXYiKTsKKyAgICB2YXIgcmVjdCA9IGRpdi5nZXRCb3Vu
ZGluZ0NsaWVudFJlY3QoKTsKKyAgICB3aW5kb3cuaW50ZXJuYWxzLnNldHRpbmdzLnNldFBhZ2VT
Y2FsZUZhY3RvcigyLCAwLCAwKTsKKyAgICB2YXIgc2NhbGVkUmVjdCA9IGRpdi5nZXRCb3VuZGlu
Z0NsaWVudFJlY3QoKTsKKworICAgIHZhciByZXN1bHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgicmVzdWx0Iik7CisgICAgaWYgKHJlY3QubGVmdCA9PSBzY2FsZWRSZWN0LmxlZnQgJiYKKyAg
ICAgICAgcmVjdC50b3AgPT0gc2NhbGVkUmVjdC50b3AgJiYKKyAgICAgICAgcmVjdC5yaWdodCA9
PSBzY2FsZWRSZWN0LnJpZ2h0ICYmCisgICAgICAgIHJlY3QuYm90dG9tID09IHNjYWxlZFJlY3Qu
Ym90dG9tKQorICAgICAgICByZXN1bHQuaW5uZXJIVE1MID0gIlBhc3MiOworICAgIGVsc2UKKyAg
ICAgICAgcmVzdWx0LmlubmVySFRNTCA9ICJGYWlsIjsKKyAgICAKK30KKzwvc2NyaXB0PgorPC9o
ZWFkPgorCis8Ym9keSBvbmxvYWQ9InRlc3RSZWN0cygpOyI+CisgICAgPGlmcmFtZSBpZD0iZnJh
bWUiIHNyYz0icmVzb3VyY2VzL2NsaWVudC1yZWN0LWZyYW1lLmh0bWwiIHdpZHRoPSIzMDAiIGhl
aWdodD0iMjAwIj48L2lmcmFtZT4KKyAgICA8cCBpZD0icmVzdWx0Ij5UaGlzIHRlc3QgbXVzdCBi
ZSBydW4gdmlhIER1bXBSZW5kZXJUcmVlLjwvcD4KKzwvYm9keT4KKzwvaHRtbD4KClByb3BlcnR5
IGNoYW5nZXMgb246IExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvc2NhbGUtcGFnZS1ib3Vu
ZGluZy1jbGllbnQtcmVjdC1pbi1mcmFtZS5odG1sCl9fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wt
c3R5bGUKICAgKyBMRgoKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvc2NhbGUt
cGFnZS1jbGllbnQtcmVjdHMtaW4tZnJhbWUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvc2NhbGUtcGFnZS1jbGllbnQtcmVjdHMtaW4tZnJh
bWUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxl
bWVudC9zY2FsZS1wYWdlLWNsaWVudC1yZWN0cy1pbi1mcmFtZS1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMiBAQAorCitQYXNzCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlv
dXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L3NjYWxlLXBhZ2UtY2xpZW50LXJlY3RzLWluLWZyYW1l
LWV4cGVjdGVkLnR4dApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L3NjYWxlLXBhZ2UtY2xpZW50LXJlY3Rz
LWluLWZyYW1lLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVu
dC9zY2FsZS1wYWdlLWNsaWVudC1yZWN0cy1pbi1mcmFtZS5odG1sCShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9zY2FsZS1wYWdlLWNsaWVudC1yZWN0cy1pbi1m
cmFtZS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMyIEBACis8aHRtbD4KKzxoZWFkPgor
PHNjcmlwdD4KK2Z1bmN0aW9uIHRlc3RSZWN0cygpCit7CisgICAgaWYgKCF3aW5kb3cubGF5b3V0
VGVzdENvbnRyb2xsZXIgfHwgIXdpbmRvdy5pbnRlcm5hbHMpCisgICAgICAgIHJldHVybjsKKyAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgCisgICAgdmFyIGRpdiA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmcmFtZSIpLmNvbnRlbnREb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgiZGl2Iik7CisgICAgdmFyIHJlY3QgPSBkaXYuZ2V0Q2xpZW50UmVjdHMoKVswXTsK
KyAgICB3aW5kb3cuaW50ZXJuYWxzLnNldHRpbmdzLnNldFBhZ2VTY2FsZUZhY3RvcigyLCAwLCAw
KTsKKyAgICB2YXIgc2NhbGVkUmVjdCA9IGRpdi5nZXRDbGllbnRSZWN0cygpWzBdOworCisgICAg
dmFyIHJlc3VsdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXN1bHQiKTsKKyAgICBpZiAo
cmVjdC5sZWZ0ID09IHNjYWxlZFJlY3QubGVmdCAmJgorICAgICAgICByZWN0LnRvcCA9PSBzY2Fs
ZWRSZWN0LnRvcCAmJgorICAgICAgICByZWN0LnJpZ2h0ID09IHNjYWxlZFJlY3QucmlnaHQgJiYK
KyAgICAgICAgcmVjdC5ib3R0b20gPT0gc2NhbGVkUmVjdC5ib3R0b20pCisgICAgICAgIHJlc3Vs
dC5pbm5lckhUTUwgPSAiUGFzcyI7CisgICAgZWxzZQorICAgICAgICByZXN1bHQuaW5uZXJIVE1M
ID0gIkZhaWwiOworICAgIAorfQorPC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5IG9ubG9hZD0i
dGVzdFJlY3RzKCk7Ij4KKyAgICA8aWZyYW1lIGlkPSJmcmFtZSIgc3JjPSJyZXNvdXJjZXMvY2xp
ZW50LXJlY3QtZnJhbWUuaHRtbCIgd2lkdGg9IjMwMCIgaGVpZ2h0PSIyMDAiPjwvaWZyYW1lPgor
ICAgIDxwIGlkPSJyZXN1bHQiPlRoaXMgdGVzdCBtdXN0IGJlIHJ1biB2aWEgRHVtcFJlbmRlclRy
ZWUuPC9wPgorPC9ib2R5PgorPC9odG1sPgoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVz
dHMvZmFzdC9kb20vRWxlbWVudC9zY2FsZS1wYWdlLWNsaWVudC1yZWN0cy1pbi1mcmFtZS5odG1s
Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoKSW5kZXg6IExheW91dFRl
c3RzL2Zhc3QvZG9tL0VsZW1lbnQvcmVzb3VyY2VzL2NsaWVudC1yZWN0LWZyYW1lLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9yZXNvdXJjZXMvY2xpZW50
LXJlY3QtZnJhbWUuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL0Vs
ZW1lbnQvcmVzb3VyY2VzL2NsaWVudC1yZWN0LWZyYW1lLmh0bWwJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNSBAQAorPGh0bWw+Cis8Ym9keT4KKyAgICA8ZGl2IGlkPSJkaXYiIHN0eWxlPSJtYXJn
aW4tbGVmdDo2MHB4OyBtYXJnaW4tdG9wOjMzcHg7IHdpZHRoOjE1MHB4OyBoZWlnaHQ6MTEwcHg7
IGJhY2tncm91bmQtY29sb3I6Z3JlZW47Ij48L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KClByb3Bl
cnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvcmVzb3VyY2VzL2Ns
aWVudC1yZWN0LWZyYW1lLmh0bWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICAr
IExGCgo=
</data>
<flag name="review"
          id="153344"
          type_id="1"
          status="+"
          setter="jamesr"
    />
    <flag name="commit-queue"
          id="153379"
          type_id="3"
          status="-"
          setter="jamesr"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>146146</attachid>
            <date>2012-06-06 16:52:07 -0700</date>
            <delta_ts>2012-06-06 23:57:38 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>88430b</filename>
            <type>text/plain</type>
            <size>14674</size>
            <attacher name="Xianzhu Wang">wangxianzhu</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExOTYzNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMzIEBACisyMDEyLTA2LTA2ICBYaWFuemh1
IFdhbmcgIDx3YW5neGlhbnpodUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgRWxlbWVudC5nZXRC
b3VuZGluZ0NsaWVudFJlY3QoKSBhbmQgRWxlbWVudC5nZXRDbGllbnRSZWN0cygpIHJldHVybiBp
bmNvcnJlY3QgdmFsdWVzIGluIGZyYW1lcyBpbiBhIHNjYWxlZCBwYWdlCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04ODQzMAorCisgICAgICAgIEVsZW1l
bnQuZ2V0Qm91ZGluZ0NsaWVudFJlY3QoKSBhbmQgRWxlbWVudC5nZXRDbGllbnRSZWN0cygpIHNo
b3VsZCBub3Qgc2NhbGUgYmFjayB0aGUgcmVjdHMKKyAgICAgICAgaWYgdGhlIGVsZW1lbnQgaXMg
aW4gYSBmcmFtZSBiZWNhdXNlIHBhZ2Ugc2NhbGUgb25seSBhcHBseSB0byBlbGVtZW50cyBpbiB0
aGUgbWFpbiBmcmFtZS4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBUZXN0czogZmFzdC9kb20vRWxlbWVudC9zY2FsZS1wYWdlLWJvdW5kaW5nLWNsaWVu
dC1yZWN0LWluLWZyYW1lLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvZG9tL0VsZW1lbnQvc2Nh
bGUtcGFnZS1jbGllbnQtcmVjdHMtaW4tZnJhbWUuaHRtbAorCisgICAgICAgICogZG9tL0RvY3Vt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6
OmFkanVzdEZsb2F0UXVhZHNGb3JTY3JvbGxBbmRBYnNvbHV0ZVpvb21BbmRGcmFtZVNjYWxlKTog
RXh0cmFjdGVkIGZyb20gRWxlbWVudC5jcHAgYW5kIFJhbmdlLmNwcCBhbmQgZml4ZWQgaXNzdWUg
b2YgcGFnZVNjYWxlIGluIGZyYW1lcy4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjphZGp1
c3RGbG9hdFJlY3RGb3JTY3JvbGxBbmRBYnNvbHV0ZVpvb21BbmRGcmFtZVNjYWxlKTogRXh0cmFj
dGVkIGZyb20gRWxlbWVudC5jcHAgYW5kIGZpeGVkIGlzc3VlIG9mIHBhZ2VTY2FsZSBpbiBmcmFt
ZXMuCisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKERvY3VtZW50KToKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpFbGVtZW50OjpnZXRDbGllbnRSZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50
OjpnZXRCb3VuZGluZ0NsaWVudFJlY3QpOgorICAgICAgICAqIGRvbS9SYW5nZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OmFkanVzdEZsb2F0UXVhZHNGb3JTY3Jv
bGxBbmRBYnNvbHV0ZVpvb21BbmRQYWdlU2NhbGUpOiBNb3ZlZCBpbnRvIERvY3VtZW50IGFuZCBm
aXhlZCBpc3N1ZSBvZiBwYWdlU2NhbGUgaW4gZnJhbWVzLgorICAgICAgICAoV2ViQ29yZTo6UmFu
Z2U6OmdldEJvcmRlckFuZFRleHRRdWFkcyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5oOiBSZW1vdmVkIGFkanVzdEZsb2F0UXVhZEZvclBhZ2VTY2FsZSBhbmQgYWRqdXN0Rmxv
YXRSZWN0Rm9yUGFnZVNjYWxlIGJlY2F1c2UgdGhleSBzZWVtIHVucmVsYXRlZCB0byBSZW5kZXJP
YmplY3QuCisgICAgICAgIChXZWJDb3JlKToKKwogMjAxMi0wNi0wNiAgTWFyayBIYWhuZW5iZXJn
ICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgogCiAgICAgICAgIFdvcmtlciB0ZWFyLWRvd24gY2Fu
IHJlLWVudGVyIEpTQyBkdXJpbmcgR0MgZmluYWxpemF0aW9uCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5jcHAJKHJldmlzaW9uIDExOTYzNSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwMzgsNCArNjAzOCwzOCBAQCBOb2RlKiBldmVudFRh
cmdldE5vZGVGb3JEb2N1bWVudChEb2N1bWVuCiAgICAgcmV0dXJuIG5vZGU7CiB9CiAKK3ZvaWQg
RG9jdW1lbnQ6OmFkanVzdEZsb2F0UXVhZHNGb3JTY3JvbGxBbmRBYnNvbHV0ZVpvb21BbmRGcmFt
ZVNjYWxlKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcywgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikK
K3sKKyAgICBpZiAoIXZpZXcoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZmxvYXQgaW52ZXJz
ZUZyYW1lU2NhbGUgPSAxOworICAgIGlmIChmcmFtZSgpKQorICAgICAgICBpbnZlcnNlRnJhbWVT
Y2FsZSA9IDEgLyBmcmFtZSgpLT5mcmFtZVNjYWxlRmFjdG9yKCk7CisKKyAgICBMYXlvdXRSZWN0
IHZpc2libGVDb250ZW50UmVjdCA9IHZpZXcoKS0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBxdWFkcy5zaXplKCk7ICsraSkgeworICAgICAgICBxdWFk
c1tpXS5tb3ZlKC12aXNpYmxlQ29udGVudFJlY3QueCgpLCAtdmlzaWJsZUNvbnRlbnRSZWN0Lnko
KSk7CisgICAgICAgIGFkanVzdEZsb2F0UXVhZEZvckFic29sdXRlWm9vbShxdWFkc1tpXSwgcmVu
ZGVyZXIpOworICAgICAgICBpZiAoaW52ZXJzZUZyYW1lU2NhbGUgIT0gMSkKKyAgICAgICAgICAg
IHF1YWRzW2ldLnNjYWxlKGludmVyc2VGcmFtZVNjYWxlLCBpbnZlcnNlRnJhbWVTY2FsZSk7Cisg
ICAgfQorfQorCit2b2lkIERvY3VtZW50OjphZGp1c3RGbG9hdFJlY3RGb3JTY3JvbGxBbmRBYnNv
bHV0ZVpvb21BbmRGcmFtZVNjYWxlKEZsb2F0UmVjdCYgcmVjdCwgUmVuZGVyT2JqZWN0KiByZW5k
ZXJlcikKK3sKKyAgICBpZiAoIXZpZXcoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZmxvYXQg
aW52ZXJzZUZyYW1lU2NhbGUgPSAxOworICAgIGlmIChmcmFtZSgpKQorICAgICAgICBpbnZlcnNl
RnJhbWVTY2FsZSA9IDEgLyBmcmFtZSgpLT5mcmFtZVNjYWxlRmFjdG9yKCk7CisKKyAgICBMYXlv
dXRSZWN0IHZpc2libGVDb250ZW50UmVjdCA9IHZpZXcoKS0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7
CisgICAgcmVjdC5tb3ZlKC12aXNpYmxlQ29udGVudFJlY3QueCgpLCAtdmlzaWJsZUNvbnRlbnRS
ZWN0LnkoKSk7CisgICAgYWRqdXN0RmxvYXRSZWN0Rm9yQWJzb2x1dGVab29tKHJlY3QsIHJlbmRl
cmVyKTsKKyAgICBpZiAoaW52ZXJzZUZyYW1lU2NhbGUgIT0gMSkKKyAgICAgICAgcmVjdC5zY2Fs
ZShpbnZlcnNlRnJhbWVTY2FsZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiAxMTk2MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9k
b20vRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtODMsNiArODMsOCBAQCBjbGFzcyBFbGVt
ZW50OwogY2xhc3MgRW50aXR5UmVmZXJlbmNlOwogY2xhc3MgRXZlbnQ7CiBjbGFzcyBFdmVudExp
c3RlbmVyOworY2xhc3MgRmxvYXRSZWN0OworY2xhc3MgRmxvYXRRdWFkOwogY2xhc3MgRm9udERh
dGE7CiBjbGFzcyBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ7CiBjbGFzcyBGcmFtZTsKQEAgLTExNjAs
NiArMTE2Miw5IEBAIHB1YmxpYzoKICAgICBQcmVyZW5kZXJlciogcHJlcmVuZGVyZXIoKSB7IHJl
dHVybiBtX3ByZXJlbmRlcmVyLmdldCgpOyB9CiAjZW5kaWYKIAorICAgIHZvaWQgYWRqdXN0Rmxv
YXRRdWFkc0ZvclNjcm9sbEFuZEFic29sdXRlWm9vbUFuZEZyYW1lU2NhbGUoVmVjdG9yPEZsb2F0
UXVhZD4mLCBSZW5kZXJPYmplY3QqKTsKKyAgICB2b2lkIGFkanVzdEZsb2F0UmVjdEZvclNjcm9s
bEFuZEFic29sdXRlWm9vbUFuZEZyYW1lU2NhbGUoRmxvYXRSZWN0JiwgUmVuZGVyT2JqZWN0Kik7
CisKIHByb3RlY3RlZDoKICAgICBEb2N1bWVudChGcmFtZSosIGNvbnN0IEtVUkwmLCBib29sIGlz
WEhUTUwsIGJvb2wgaXNIVE1MKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkocmV2aXNp
b24gMTE5NjM1KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01NTcsMjEgKzU1Nyw3IEBAIFBhc3NSZWZQdHI8Q2xpZW50UmVjdExpc3Q+IEVsZW1l
bnQ6OmdldEMKIAogICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRzOwogICAgIHJlbmRlckJveE1v
ZGVsT2JqZWN0LT5hYnNvbHV0ZVF1YWRzKHF1YWRzKTsKLQotICAgIGZsb2F0IHBhZ2VTY2FsZSA9
IDE7Ci0gICAgaWYgKFBhZ2UqIHBhZ2UgPSBkb2N1bWVudCgpLT5wYWdlKCkpIAotICAgICAgICBw
YWdlU2NhbGUgPSBwYWdlLT5wYWdlU2NhbGVGYWN0b3IoKTsKLQotICAgIGlmIChGcmFtZVZpZXcq
IHZpZXcgPSBkb2N1bWVudCgpLT52aWV3KCkpIHsKLSAgICAgICAgTGF5b3V0UmVjdCB2aXNpYmxl
Q29udGVudFJlY3QgPSB2aWV3LT52aXNpYmxlQ29udGVudFJlY3QoKTsKLSAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBxdWFkcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgcXVhZHNb
aV0ubW92ZSgtdmlzaWJsZUNvbnRlbnRSZWN0LngoKSwgLXZpc2libGVDb250ZW50UmVjdC55KCkp
OwotICAgICAgICAgICAgYWRqdXN0RmxvYXRRdWFkRm9yQWJzb2x1dGVab29tKHF1YWRzW2ldLCBy
ZW5kZXJCb3hNb2RlbE9iamVjdCk7Ci0gICAgICAgICAgICBpZiAocGFnZVNjYWxlICE9IDEpCi0g
ICAgICAgICAgICAgICAgYWRqdXN0RmxvYXRRdWFkRm9yUGFnZVNjYWxlKHF1YWRzW2ldLCBwYWdl
U2NhbGUpOwotICAgICAgICB9Ci0gICAgfQotCisgICAgZG9jdW1lbnQoKS0+YWRqdXN0RmxvYXRR
dWFkc0ZvclNjcm9sbEFuZEFic29sdXRlWm9vbUFuZEZyYW1lU2NhbGUocXVhZHMsIHJlbmRlckJv
eE1vZGVsT2JqZWN0KTsKICAgICByZXR1cm4gQ2xpZW50UmVjdExpc3Q6OmNyZWF0ZShxdWFkcyk7
CiB9CiAKQEAgLTYwMiwxNSArNTg4LDcgQEAgUGFzc1JlZlB0cjxDbGllbnRSZWN0PiBFbGVtZW50
OjpnZXRCb3VuZAogICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgcXVhZHMuc2l6ZSgpOyArK2kp
CiAgICAgICAgIHJlc3VsdC51bml0ZShxdWFkc1tpXS5ib3VuZGluZ0JveCgpKTsKIAotICAgIGlm
IChGcmFtZVZpZXcqIHZpZXcgPSBkb2N1bWVudCgpLT52aWV3KCkpIHsKLSAgICAgICAgTGF5b3V0
UmVjdCB2aXNpYmxlQ29udGVudFJlY3QgPSB2aWV3LT52aXNpYmxlQ29udGVudFJlY3QoKTsKLSAg
ICAgICAgcmVzdWx0Lm1vdmUoLXZpc2libGVDb250ZW50UmVjdC54KCksIC12aXNpYmxlQ29udGVu
dFJlY3QueSgpKTsKLSAgICB9Ci0KLSAgICBhZGp1c3RGbG9hdFJlY3RGb3JBYnNvbHV0ZVpvb20o
cmVzdWx0LCByZW5kZXJlcigpKTsKLSAgICBpZiAoUGFnZSogcGFnZSA9IGRvY3VtZW50KCktPnBh
Z2UoKSkKLSAgICAgICAgYWRqdXN0RmxvYXRSZWN0Rm9yUGFnZVNjYWxlKHJlc3VsdCwgcGFnZS0+
cGFnZVNjYWxlRmFjdG9yKCkpOwotCisgICAgZG9jdW1lbnQoKS0+YWRqdXN0RmxvYXRSZWN0Rm9y
U2Nyb2xsQW5kQWJzb2x1dGVab29tQW5kRnJhbWVTY2FsZShyZXN1bHQsIHJlbmRlcmVyKCkpOwog
ICAgIHJldHVybiBDbGllbnRSZWN0OjpjcmVhdGUocmVzdWx0KTsKIH0KICAgICAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZG9tL1JhbmdlLmNwcAkocmV2aXNpb24gMTE5NjM1KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1Jh
bmdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk0MCwyNSArMTk0MCw2IEBAIFBhc3NSZWZQdHI8
Q2xpZW50UmVjdD4gUmFuZ2U6OmdldEJvdW5kaW4KICAgICByZXR1cm4gQ2xpZW50UmVjdDo6Y3Jl
YXRlKGJvdW5kaW5nUmVjdCgpKTsKIH0KIAotc3RhdGljIHZvaWQgYWRqdXN0RmxvYXRRdWFkc0Zv
clNjcm9sbEFuZEFic29sdXRlWm9vbUFuZFBhZ2VTY2FsZShWZWN0b3I8RmxvYXRRdWFkPiYgcXVh
ZHMsIERvY3VtZW50KiBkb2N1bWVudCwgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKLXsKLSAgICBG
cmFtZVZpZXcqIHZpZXcgPSBkb2N1bWVudC0+dmlldygpOwotICAgIGlmICghdmlldykKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgZmxvYXQgcGFnZVNjYWxlID0gMTsKLSAgICBpZiAoUGFnZSogcGFn
ZSA9IGRvY3VtZW50LT5wYWdlKCkpCi0gICAgICAgIHBhZ2VTY2FsZSA9IHBhZ2UtPnBhZ2VTY2Fs
ZUZhY3RvcigpOwotCi0gICAgTGF5b3V0UmVjdCB2aXNpYmxlQ29udGVudFJlY3QgPSB2aWV3LT52
aXNpYmxlQ29udGVudFJlY3QoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHF1YWRzLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgIHF1YWRzW2ldLm1vdmUoLXZpc2libGVDb250ZW50UmVjdC54
KCksIC12aXNpYmxlQ29udGVudFJlY3QueSgpKTsKLSAgICAgICAgYWRqdXN0RmxvYXRRdWFkRm9y
QWJzb2x1dGVab29tKHF1YWRzW2ldLCByZW5kZXJlcik7Ci0gICAgICAgIGlmIChwYWdlU2NhbGUg
IT0gMSkKLSAgICAgICAgICAgIGFkanVzdEZsb2F0UXVhZEZvclBhZ2VTY2FsZShxdWFkc1tpXSwg
cGFnZVNjYWxlKTsKLSAgICB9Ci19Ci0KIHZvaWQgUmFuZ2U6OmdldEJvcmRlckFuZFRleHRRdWFk
cyhWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMpIGNvbnN0CiB7CiAgICAgTm9kZSogc3RhcnRDb250
YWluZXIgPSBtX3N0YXJ0LmNvbnRhaW5lcigpOwpAQCAtMTk3Nyw3ICsxOTU4LDcgQEAgdm9pZCBS
YW5nZTo6Z2V0Qm9yZGVyQW5kVGV4dFF1YWRzKFZlY3RvcgogICAgICAgICAgICAgICAgIGlmIChS
ZW5kZXJCb3hNb2RlbE9iamVjdCogcmVuZGVyQm94TW9kZWxPYmplY3QgPSBzdGF0aWNfY2FzdDxF
bGVtZW50Kj4obm9kZSktPnJlbmRlckJveE1vZGVsT2JqZWN0KCkpIHsKICAgICAgICAgICAgICAg
ICAgICAgVmVjdG9yPEZsb2F0UXVhZD4gZWxlbWVudFF1YWRzOwogICAgICAgICAgICAgICAgICAg
ICByZW5kZXJCb3hNb2RlbE9iamVjdC0+YWJzb2x1dGVRdWFkcyhlbGVtZW50UXVhZHMpOwotICAg
ICAgICAgICAgICAgICAgICBhZGp1c3RGbG9hdFF1YWRzRm9yU2Nyb2xsQW5kQWJzb2x1dGVab29t
QW5kUGFnZVNjYWxlKGVsZW1lbnRRdWFkcywgbV9vd25lckRvY3VtZW50LmdldCgpLCByZW5kZXJC
b3hNb2RlbE9iamVjdCk7CisgICAgICAgICAgICAgICAgICAgIG1fb3duZXJEb2N1bWVudC0+YWRq
dXN0RmxvYXRRdWFkc0ZvclNjcm9sbEFuZEFic29sdXRlWm9vbUFuZEZyYW1lU2NhbGUoZWxlbWVu
dFF1YWRzLCByZW5kZXJCb3hNb2RlbE9iamVjdCk7CiAKICAgICAgICAgICAgICAgICAgICAgcXVh
ZHMuYXBwZW5kKGVsZW1lbnRRdWFkcyk7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTk5MCw3ICsx
OTcxLDcgQEAgdm9pZCBSYW5nZTo6Z2V0Qm9yZGVyQW5kVGV4dFF1YWRzKFZlY3RvcgogICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHRleHRRdWFkczsK
ICAgICAgICAgICAgICAgICByZW5kZXJUZXh0LT5hYnNvbHV0ZVF1YWRzRm9yUmFuZ2UodGV4dFF1
YWRzLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBhZGp1c3RGbG9h
dFF1YWRzRm9yU2Nyb2xsQW5kQWJzb2x1dGVab29tQW5kUGFnZVNjYWxlKHRleHRRdWFkcywgbV9v
d25lckRvY3VtZW50LmdldCgpLCByZW5kZXJUZXh0KTsKKyAgICAgICAgICAgICAgICBtX293bmVy
RG9jdW1lbnQtPmFkanVzdEZsb2F0UXVhZHNGb3JTY3JvbGxBbmRBYnNvbHV0ZVpvb21BbmRGcmFt
ZVNjYWxlKHRleHRRdWFkcywgcmVuZGVyVGV4dCk7CiAKICAgICAgICAgICAgICAgICBxdWFkcy5h
cHBlbmQodGV4dFF1YWRzKTsKICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHJldmlzaW9uIDExOTYzNSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTIxNCwxOCArMTIx
NCw2IEBAIGlubGluZSB2b2lkIGFkanVzdEZsb2F0UmVjdEZvckFic29sdXRlWm8KICAgICAgICAg
cmVjdC5zY2FsZSgxIC8gem9vbSwgMSAvIHpvb20pOwogfQogCi1pbmxpbmUgdm9pZCBhZGp1c3RG
bG9hdFF1YWRGb3JQYWdlU2NhbGUoRmxvYXRRdWFkJiBxdWFkLCBmbG9hdCBwYWdlU2NhbGUpCi17
Ci0gICAgaWYgKHBhZ2VTY2FsZSAhPSAxKQotICAgICAgICBxdWFkLnNjYWxlKDEgLyBwYWdlU2Nh
bGUsIDEgLyBwYWdlU2NhbGUpOwotfQotCi1pbmxpbmUgdm9pZCBhZGp1c3RGbG9hdFJlY3RGb3JQ
YWdlU2NhbGUoRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBwYWdlU2NhbGUpCi17Ci0gICAgaWYgKHBh
Z2VTY2FsZSAhPSAxKQotICAgICAgICByZWN0LnNjYWxlKDEgLyBwYWdlU2NhbGUsIDEgLyBwYWdl
U2NhbGUpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNpZm5kZWYgTkRFQlVHCklu
ZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxMTk2MzUpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAxMi0wNi0wNiAgWGlhbnpodSBXYW5nICA8d2Fu
Z3hpYW56aHVAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGll
bnRSZWN0KCkgYW5kIEVsZW1lbnQuZ2V0Q2xpZW50UmVjdHMoKSByZXR1cm4gaW5jb3JyZWN0IHZh
bHVlcyBpbiBmcmFtZXMgaW4gYSBzY2FsZWQgcGFnZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODg0MzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIGZhc3QvZG9tL0VsZW1lbnQvcmVzb3VyY2VzL2NsaWVu
dC1yZWN0LWZyYW1lLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL0VsZW1lbnQvc2Nh
bGUtcGFnZS1ib3VuZGluZy1jbGllbnQtcmVjdC1pbi1mcmFtZS1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIGZhc3QvZG9tL0VsZW1lbnQvc2NhbGUtcGFnZS1ib3VuZGluZy1jbGllbnQt
cmVjdC1pbi1mcmFtZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9FbGVtZW50L3Nj
YWxlLXBhZ2UtY2xpZW50LXJlY3RzLWluLWZyYW1lLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogZmFzdC9kb20vRWxlbWVudC9zY2FsZS1wYWdlLWNsaWVudC1yZWN0cy1pbi1mcmFtZS5o
dG1sOiBBZGRlZC4KKwogMjAxMi0wNi0wNiAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9y
Zz4KIAogICAgICAgICBDaHJvbWl1bSByZWJhc2VsaW5lIGFmdGVyIHIxMTk2MTcgcGFydCAyLgpJ
bmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9zY2FsZS1wYWdlLWJvdW5kaW5nLWNs
aWVudC1yZWN0LWluLWZyYW1lLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9mYXN0L2RvbS9FbGVtZW50L3NjYWxlLXBhZ2UtYm91bmRpbmctY2xpZW50LXJlY3QtaW4tZnJh
bWUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxl
bWVudC9zY2FsZS1wYWdlLWJvdW5kaW5nLWNsaWVudC1yZWN0LWluLWZyYW1lLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyIEBACisKK1Bhc3MKClByb3BlcnR5IGNoYW5nZXMg
b246IExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvc2NhbGUtcGFnZS1ib3VuZGluZy1jbGll
bnQtcmVjdC1pbi1mcmFtZS1leHBlY3RlZC50eHQKX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1z
dHlsZQogICArIExGCgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9zY2FsZS1w
YWdlLWJvdW5kaW5nLWNsaWVudC1yZWN0LWluLWZyYW1lLmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9zY2FsZS1wYWdlLWJvdW5kaW5nLWNsaWVudC1yZWN0
LWluLWZyYW1lLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVt
ZW50L3NjYWxlLXBhZ2UtYm91bmRpbmctY2xpZW50LXJlY3QtaW4tZnJhbWUuaHRtbAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwzMyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgor
PHNjcmlwdD4KK2Z1bmN0aW9uIHRlc3RSZWN0cygpCit7CisgICAgaWYgKCF3aW5kb3cubGF5b3V0
VGVzdENvbnRyb2xsZXIgfHwgIXdpbmRvdy5pbnRlcm5hbHMpCisgICAgICAgIHJldHVybjsKKyAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgCisgICAgdmFyIGRpdiA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmcmFtZSIpLmNvbnRlbnREb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgiZGl2Iik7CisgICAgdmFyIHJlY3QgPSBkaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0
KCk7CisgICAgd2luZG93LmludGVybmFscy5zZXR0aW5ncy5zZXRQYWdlU2NhbGVGYWN0b3IoMiwg
MCwgMCk7CisgICAgdmFyIHNjYWxlZFJlY3QgPSBkaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7
CisKKyAgICB2YXIgcmVzdWx0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlc3VsdCIpOwor
ICAgIGlmIChyZWN0LmxlZnQgPT0gc2NhbGVkUmVjdC5sZWZ0ICYmCisgICAgICAgIHJlY3QudG9w
ID09IHNjYWxlZFJlY3QudG9wICYmCisgICAgICAgIHJlY3QucmlnaHQgPT0gc2NhbGVkUmVjdC5y
aWdodCAmJgorICAgICAgICByZWN0LmJvdHRvbSA9PSBzY2FsZWRSZWN0LmJvdHRvbSkKKyAgICAg
ICAgcmVzdWx0LmlubmVySFRNTCA9ICJQYXNzIjsKKyAgICBlbHNlCisgICAgICAgIHJlc3VsdC5p
bm5lckhUTUwgPSAiRmFpbCI7CisgICAgCit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHkg
b25sb2FkPSJ0ZXN0UmVjdHMoKTsiPgorICAgIDxpZnJhbWUgaWQ9ImZyYW1lIiBzcmM9InJlc291
cmNlcy9jbGllbnQtcmVjdC1mcmFtZS5odG1sIiB3aWR0aD0iMzAwIiBoZWlnaHQ9IjIwMCI+PC9p
ZnJhbWU+CisgICAgPHAgaWQ9InJlc3VsdCI+VGhpcyB0ZXN0IG11c3QgYmUgcnVuIHZpYSBEdW1w
UmVuZGVyVHJlZS48L3A+Cis8L2JvZHk+Cis8L2h0bWw+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBM
YXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L3NjYWxlLXBhZ2UtYm91bmRpbmctY2xpZW50LXJl
Y3QtaW4tZnJhbWUuaHRtbApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYK
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L3NjYWxlLXBhZ2UtY2xpZW50LXJl
Y3RzLWluLWZyYW1lLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0
L2RvbS9FbGVtZW50L3NjYWxlLXBhZ2UtY2xpZW50LXJlY3RzLWluLWZyYW1lLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvc2NhbGUtcGFn
ZS1jbGllbnQtcmVjdHMtaW4tZnJhbWUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDIgQEAKKworUGFzcwoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvZmFzdC9k
b20vRWxlbWVudC9zY2FsZS1wYWdlLWNsaWVudC1yZWN0cy1pbi1mcmFtZS1leHBlY3RlZC50eHQK
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC9kb20vRWxlbWVudC9zY2FsZS1wYWdlLWNsaWVudC1yZWN0cy1pbi1mcmFtZS5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvc2NhbGUtcGFnZS1j
bGllbnQtcmVjdHMtaW4tZnJhbWUuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zh
c3QvZG9tL0VsZW1lbnQvc2NhbGUtcGFnZS1jbGllbnQtcmVjdHMtaW4tZnJhbWUuaHRtbAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwzMyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFk
PgorPHNjcmlwdD4KK2Z1bmN0aW9uIHRlc3RSZWN0cygpCit7CisgICAgaWYgKCF3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIgfHwgIXdpbmRvdy5pbnRlcm5hbHMpCisgICAgICAgIHJldHVybjsK
KyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgCisgICAgdmFyIGRp
diA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmcmFtZSIpLmNvbnRlbnREb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgiZGl2Iik7CisgICAgdmFyIHJlY3QgPSBkaXYuZ2V0Q2xpZW50UmVjdHMoKVsw
XTsKKyAgICB3aW5kb3cuaW50ZXJuYWxzLnNldHRpbmdzLnNldFBhZ2VTY2FsZUZhY3RvcigyLCAw
LCAwKTsKKyAgICB2YXIgc2NhbGVkUmVjdCA9IGRpdi5nZXRDbGllbnRSZWN0cygpWzBdOworCisg
ICAgdmFyIHJlc3VsdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXN1bHQiKTsKKyAgICBp
ZiAocmVjdC5sZWZ0ID09IHNjYWxlZFJlY3QubGVmdCAmJgorICAgICAgICByZWN0LnRvcCA9PSBz
Y2FsZWRSZWN0LnRvcCAmJgorICAgICAgICByZWN0LnJpZ2h0ID09IHNjYWxlZFJlY3QucmlnaHQg
JiYKKyAgICAgICAgcmVjdC5ib3R0b20gPT0gc2NhbGVkUmVjdC5ib3R0b20pCisgICAgICAgIHJl
c3VsdC5pbm5lckhUTUwgPSAiUGFzcyI7CisgICAgZWxzZQorICAgICAgICByZXN1bHQuaW5uZXJI
VE1MID0gIkZhaWwiOworICAgIAorfQorPC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5IG9ubG9h
ZD0idGVzdFJlY3RzKCk7Ij4KKyAgICA8aWZyYW1lIGlkPSJmcmFtZSIgc3JjPSJyZXNvdXJjZXMv
Y2xpZW50LXJlY3QtZnJhbWUuaHRtbCIgd2lkdGg9IjMwMCIgaGVpZ2h0PSIyMDAiPjwvaWZyYW1l
PgorICAgIDxwIGlkPSJyZXN1bHQiPlRoaXMgdGVzdCBtdXN0IGJlIHJ1biB2aWEgRHVtcFJlbmRl
clRyZWUuPC9wPgorPC9ib2R5PgorPC9odG1sPgoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0
VGVzdHMvZmFzdC9kb20vRWxlbWVudC9zY2FsZS1wYWdlLWNsaWVudC1yZWN0cy1pbi1mcmFtZS5o
dG1sCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoKSW5kZXg6IExheW91
dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvcmVzb3VyY2VzL2NsaWVudC1yZWN0LWZyYW1lLmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9yZXNvdXJjZXMvY2xp
ZW50LXJlY3QtZnJhbWUuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9t
L0VsZW1lbnQvcmVzb3VyY2VzL2NsaWVudC1yZWN0LWZyYW1lLmh0bWwJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxib2R5PgorICAgIDxkaXYg
aWQ9ImRpdiIgc3R5bGU9Im1hcmdpbi1sZWZ0OjYwcHg7IG1hcmdpbi10b3A6MzNweDsgd2lkdGg6
MTUwcHg7IGhlaWdodDoxMTBweDsgYmFja2dyb3VuZC1jb2xvcjpncmVlbjsiPjwvZGl2PgorPC9i
b2R5PgorPC9odG1sPgoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvZmFzdC9kb20v
RWxlbWVudC9yZXNvdXJjZXMvY2xpZW50LXJlY3QtZnJhbWUuaHRtbApfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVk
OiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>