<?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>79397</bug_id>
          
          <creation_ts>2012-02-23 13:52:41 -0800</creation_ts>
          <short_desc>XSS Auditor targeting legitimate frames as false positives.</short_desc>
          <delta_ts>2012-02-24 18:39:32 -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>WebKit Misc.</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="Thomas Sepez">tsepez</reporter>
          <assigned_to name="Thomas Sepez">tsepez</assigned_to>
          <cc>abarth</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>kenjibaheux</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>563436</commentid>
    <comment_count>0</comment_count>
    <who name="Thomas Sepez">tsepez</who>
    <bug_when>2012-02-23 13:52:41 -0800</bug_when>
    <thetext>Report by fbingha, Feb 20 (3 days ago) at http://code.google.com/p/chromium/issues/detail?id=98787


Say you have an editor and in your page source you have a script reference, say

&lt;script type=&quot;text/javascript&quot; src=&quot;https://www.vbulletin.com/forum/clientscript/vbulletin-core.js?v=4110c&quot;&gt;&lt;/script&gt;

Now say, within the editor you type:

src=&quot;https://www.vbulletin.com&quot;

Or even better, your editor has an image in it like

&lt;img src=&quot;https://www.vbulletin.com/me.png&quot; /&gt;

Now you preview, and bang, javascript is dead because Chrome insists on ANY usage of src=&quot;yourdomain&quot; appearing in the request means that an XSS has been triggered.

Previously I would had to have this in my request to trigger the problem:

src=&quot;https://www.vbulletin.com/forum/clientscript/vbulletin-core.js?v=4110c&quot;&gt;

Now you&apos;ve pared it down to just this

src=&quot;https://www.vbulletin.com&quot;&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563446</commentid>
    <comment_count>1</comment_count>
      <attachid>128551</attachid>
    <who name="Thomas Sepez">tsepez</who>
    <bug_when>2012-02-23 13:58:34 -0800</bug_when>
    <thetext>Created attachment 128551
Patch + tests

This is the most straightforward way of preventing these false positives.  Please double-check that we don&apos;t care about these &quot;protected&quot; attributes without an injected tag.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563455</commentid>
    <comment_count>2</comment_count>
      <attachid>128551</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-02-23 14:02:09 -0800</bug_when>
    <thetext>Comment on attachment 128551
Patch + tests

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

&gt; Source/WebCore/html/parser/XSSAuditor.cpp:338
&gt; +    if (isContainedInRequest(&quot;&lt;script&quot;))

What about &quot;&lt;ScriPt&quot; ?  IMHO, it would be better if we grabbed the characters to match from the m_cachedSnippet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563461</commentid>
    <comment_count>3</comment_count>
    <who name="Thomas Sepez">tsepez</who>
    <bug_when>2012-02-23 14:06:10 -0800</bug_when>
    <thetext>IsContainedInRequest() should handle the case issues.  Also there&apos;s an ASSERT(hasName(token, embedTag)).  But we&apos;ll take it from token.name</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563595</commentid>
    <comment_count>4</comment_count>
      <attachid>128580</attachid>
    <who name="Thomas Sepez">tsepez</who>
    <bug_when>2012-02-23 15:58:55 -0800</bug_when>
    <thetext>Created attachment 128580
Patch + some refactoring.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563610</commentid>
    <comment_count>5</comment_count>
      <attachid>128580</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-02-23 16:03:00 -0800</bug_when>
    <thetext>Comment on attachment 128580
Patch + some refactoring.

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

&gt; Source/WebCore/html/parser/XSSAuditor.cpp:502
&gt; +    size_t start = decodedSnippet.find(&quot;&lt;&quot;);

How can this fail to be the first character?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563614</commentid>
    <comment_count>6</comment_count>
    <who name="Thomas Sepez">tsepez</who>
    <bug_when>2012-02-23 16:04:13 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 128580 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=128580&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/html/parser/XSSAuditor.cpp:502
&gt; &gt; +    size_t start = decodedSnippet.find(&quot;&lt;&quot;);
&gt; 
&gt; How can this fail to be the first character?

Wasn&apos;t sure, nor was I taking any chances...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563627</commentid>
    <comment_count>7</comment_count>
      <attachid>128580</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-02-23 16:08:22 -0800</bug_when>
    <thetext>Comment on attachment 128580
Patch + some refactoring.

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

This looks great.

&gt; Source/WebCore/html/parser/XSSAuditor.cpp:316
&gt; +    if (isContainedInRequest(m_cachedDecodedSnippet) &amp;&amp; isContainedInRequest(decodedSnippetForJavascript(token))) {

Javascript =&gt; JavaScript</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563628</commentid>
    <comment_count>8</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-02-23 16:10:57 -0800</bug_when>
    <thetext>Here&apos;s an interesting case:

&lt;script/src=&quot;http://attacker.com/foo.js&quot;&gt;&lt;/script&gt;

I think we get that subtly wrong in this patch, actually.  The attacker can inject:

&lt;script/src=&quot;http://attacker.com/foo

and let the rest of the page terminate the request.  We&apos;ll wait for an HTMLSpace to terminate the token name, which could include characters that aren&apos;t in the request.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563631</commentid>
    <comment_count>9</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-02-23 16:11:55 -0800</bug_when>
    <thetext>Rather than searching for an HTMLSpace to terminate the token name, why don&apos;t we just grab a fixed number of characters equal to one plus the length of the token&apos;s name (to account for the &quot;&lt;&quot;)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563643</commentid>
    <comment_count>10</comment_count>
      <attachid>128592</attachid>
    <who name="Thomas Sepez">tsepez</who>
    <bug_when>2012-02-23 16:21:56 -0800</bug_when>
    <thetext>Created attachment 128592
Patch w/ fixed char grab</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563650</commentid>
    <comment_count>11</comment_count>
      <attachid>128592</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-02-23 16:24:59 -0800</bug_when>
    <thetext>Comment on attachment 128592
Patch w/ fixed char grab

Ok.  We should also add a test for the &lt;script/src thing do we don&apos;t forget it in the future.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>564117</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2012-02-24 02:08:32 -0800</bug_when>
    <thetext>Attachment 128592 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/http...&quot; exit_code: 1
Source/WebCore/html/parser/XSSAuditor.cpp:495:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WebCore/html/parser/XSSAuditor.cpp:500:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 2 in 7 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>564801</commentid>
    <comment_count>13</comment_count>
      <attachid>128837</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-02-24 18:19:43 -0800</bug_when>
    <thetext>Created attachment 128837
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>564807</commentid>
    <comment_count>14</comment_count>
      <attachid>128837</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-24 18:39:27 -0800</bug_when>
    <thetext>Comment on attachment 128837
Patch for landing

Clearing flags on attachment: 128837

Committed r108881: &lt;http://trac.webkit.org/changeset/108881&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>564808</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-24 18:39:32 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128551</attachid>
            <date>2012-02-23 13:58:34 -0800</date>
            <delta_ts>2012-02-23 15:58:55 -0800</delta_ts>
            <desc>Patch + tests</desc>
            <filename>patch_79397.txt</filename>
            <type>text/plain</type>
            <size>6642</size>
            <attacher name="Thomas Sepez">tsepez</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwODY3MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDEyLTAyLTIzICBUb20gU2Vw
ZXogIDx0c2VwZXpAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFhTUyBBdWRpdG9yIHRhcmdldGlu
ZyBsZWdpdGltYXRlIGZyYW1lcyBhcyBmYWxzZSBwb3NpdGl2ZXMuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03OTM5NworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3Q6IGh0dHAvdGVzdHMvc2VjdXJpdHkv
eHNzQXVkaXRvci9zY3JpcHQtdGFnLXNhZmU0Lmh0bWwKKworICAgICAgICAqIGh0bWwvcGFyc2Vy
L1hTU0F1ZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WFNTQXVkaXRvcjo6ZmlsdGVyU2Ny
aXB0VG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6WFNTQXVkaXRvcjo6ZmlsdGVyT2JqZWN0VG9r
ZW4pOgorICAgICAgICAoV2ViQ29yZTo6WFNTQXVkaXRvcjo6ZmlsdGVyRW1iZWRUb2tlbik6Cisg
ICAgICAgIChXZWJDb3JlOjpYU1NBdWRpdG9yOjpmaWx0ZXJBcHBsZXRUb2tlbik6CisgICAgICAg
IChXZWJDb3JlOjpYU1NBdWRpdG9yOjpmaWx0ZXJJZnJhbWVUb2tlbik6CisKIDIwMTItMDItMjMg
IEVyaWsgQXJ2aWRzc29uICA8YXJ2QGNocm9taXVtLm9yZz4KIAogICAgICAgICBBZGQgc3VwcG9y
dCBmb3IgSW50ZXJmYWNlTmFtZSBpbiB0aGUgYmluZGluZ3MKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvcGFyc2VyL1hTU0F1ZGl0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvcGFyc2VyL1hTU0F1ZGl0b3IuY3BwCShyZXZpc2lvbiAxMDg2NTcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9YU1NBdWRpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMy
LDExICszMzIsMTIgQEAgYm9vbCBYU1NBdWRpdG9yOjpmaWx0ZXJTY3JpcHRUb2tlbihIVE1MVAog
ICAgIEFTU0VSVCh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnKTsKICAg
ICBBU1NFUlQoaGFzTmFtZSh0b2tlbiwgc2NyaXB0VGFnKSk7CiAKLSAgICBpZiAoZXJhc2VBdHRy
aWJ1dGVJZkluamVjdGVkKHRva2VuLCBzcmNBdHRyLCBibGFua1VSTCgpLnN0cmluZygpLCBTcmNM
aWtlQXR0cmlidXRlKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KICAgICBtX2NhY2hlZFNuaXBw
ZXQgPSBtX3BhcnNlci0+c291cmNlRm9yVG9rZW4odG9rZW4pOwogICAgIG1fc2hvdWxkQWxsb3dD
REFUQSA9IG1fcGFyc2VyLT50b2tlbml6ZXIoKS0+c2hvdWxkQWxsb3dDREFUQSgpOworCisgICAg
aWYgKGlzQ29udGFpbmVkSW5SZXF1ZXN0KCI8c2NyaXB0IikpCisgICAgICAgIHJldHVybiBlcmFz
ZUF0dHJpYnV0ZUlmSW5qZWN0ZWQodG9rZW4sIHNyY0F0dHIsIGJsYW5rVVJMKCkuc3RyaW5nKCks
IFNyY0xpa2VBdHRyaWJ1dGUpOworCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0zNDYsMTEg
KzM0NywxMSBAQCBib29sIFhTU0F1ZGl0b3I6OmZpbHRlck9iamVjdFRva2VuKEhUTUxUCiAgICAg
QVNTRVJUKGhhc05hbWUodG9rZW4sIG9iamVjdFRhZykpOwogCiAgICAgYm9vbCBkaWRCbG9ja1Nj
cmlwdCA9IGZhbHNlOwotCi0gICAgZGlkQmxvY2tTY3JpcHQgfD0gZXJhc2VBdHRyaWJ1dGVJZklu
amVjdGVkKHRva2VuLCBkYXRhQXR0ciwgYmxhbmtVUkwoKS5zdHJpbmcoKSwgU3JjTGlrZUF0dHJp
YnV0ZSk7Ci0gICAgZGlkQmxvY2tTY3JpcHQgfD0gZXJhc2VBdHRyaWJ1dGVJZkluamVjdGVkKHRv
a2VuLCB0eXBlQXR0cik7Ci0gICAgZGlkQmxvY2tTY3JpcHQgfD0gZXJhc2VBdHRyaWJ1dGVJZklu
amVjdGVkKHRva2VuLCBjbGFzc2lkQXR0cik7Ci0KKyAgICBpZiAoaXNDb250YWluZWRJblJlcXVl
c3QoIjxvYmplY3QiKSkgeworICAgICAgICBkaWRCbG9ja1NjcmlwdCB8PSBlcmFzZUF0dHJpYnV0
ZUlmSW5qZWN0ZWQodG9rZW4sIGRhdGFBdHRyLCBibGFua1VSTCgpLnN0cmluZygpLCBTcmNMaWtl
QXR0cmlidXRlKTsKKyAgICAgICAgZGlkQmxvY2tTY3JpcHQgfD0gZXJhc2VBdHRyaWJ1dGVJZklu
amVjdGVkKHRva2VuLCB0eXBlQXR0cik7CisgICAgICAgIGRpZEJsb2NrU2NyaXB0IHw9IGVyYXNl
QXR0cmlidXRlSWZJbmplY3RlZCh0b2tlbiwgY2xhc3NpZEF0dHIpOworICAgIH0KICAgICByZXR1
cm4gZGlkQmxvY2tTY3JpcHQ7CiB9CiAKQEAgLTM3OCwxMSArMzc5LDExIEBAIGJvb2wgWFNTQXVk
aXRvcjo6ZmlsdGVyRW1iZWRUb2tlbihIVE1MVG8KICAgICBBU1NFUlQoaGFzTmFtZSh0b2tlbiwg
ZW1iZWRUYWcpKTsKIAogICAgIGJvb2wgZGlkQmxvY2tTY3JpcHQgPSBmYWxzZTsKLQotICAgIGRp
ZEJsb2NrU2NyaXB0IHw9IGVyYXNlQXR0cmlidXRlSWZJbmplY3RlZCh0b2tlbiwgY29kZUF0dHIs
IFN0cmluZygpLCBTcmNMaWtlQXR0cmlidXRlKTsKLSAgICBkaWRCbG9ja1NjcmlwdCB8PSBlcmFz
ZUF0dHJpYnV0ZUlmSW5qZWN0ZWQodG9rZW4sIHNyY0F0dHIsIGJsYW5rVVJMKCkuc3RyaW5nKCks
IFNyY0xpa2VBdHRyaWJ1dGUpOwotICAgIGRpZEJsb2NrU2NyaXB0IHw9IGVyYXNlQXR0cmlidXRl
SWZJbmplY3RlZCh0b2tlbiwgdHlwZUF0dHIpOwotCisgICAgaWYgKGlzQ29udGFpbmVkSW5SZXF1
ZXN0KCI8ZW1iZWQiKSkgeworICAgICAgICBkaWRCbG9ja1NjcmlwdCB8PSBlcmFzZUF0dHJpYnV0
ZUlmSW5qZWN0ZWQodG9rZW4sIGNvZGVBdHRyLCBTdHJpbmcoKSwgU3JjTGlrZUF0dHJpYnV0ZSk7
CisgICAgICAgIGRpZEJsb2NrU2NyaXB0IHw9IGVyYXNlQXR0cmlidXRlSWZJbmplY3RlZCh0b2tl
biwgc3JjQXR0ciwgYmxhbmtVUkwoKS5zdHJpbmcoKSwgU3JjTGlrZUF0dHJpYnV0ZSk7CisgICAg
ICAgIGRpZEJsb2NrU2NyaXB0IHw9IGVyYXNlQXR0cmlidXRlSWZJbmplY3RlZCh0b2tlbiwgdHlw
ZUF0dHIpOworICAgIH0KICAgICByZXR1cm4gZGlkQmxvY2tTY3JpcHQ7CiB9CiAKQEAgLTM5Miwx
MCArMzkzLDEwIEBAIGJvb2wgWFNTQXVkaXRvcjo6ZmlsdGVyQXBwbGV0VG9rZW4oSFRNTFQKICAg
ICBBU1NFUlQoaGFzTmFtZSh0b2tlbiwgYXBwbGV0VGFnKSk7CiAKICAgICBib29sIGRpZEJsb2Nr
U2NyaXB0ID0gZmFsc2U7Ci0KLSAgICBkaWRCbG9ja1NjcmlwdCB8PSBlcmFzZUF0dHJpYnV0ZUlm
SW5qZWN0ZWQodG9rZW4sIGNvZGVBdHRyLCBTdHJpbmcoKSwgU3JjTGlrZUF0dHJpYnV0ZSk7Ci0g
ICAgZGlkQmxvY2tTY3JpcHQgfD0gZXJhc2VBdHRyaWJ1dGVJZkluamVjdGVkKHRva2VuLCBvYmpl
Y3RBdHRyKTsKLQorICAgIGlmIChpc0NvbnRhaW5lZEluUmVxdWVzdCgiPGFwcGxldCIpKSB7Cisg
ICAgICAgIGRpZEJsb2NrU2NyaXB0IHw9IGVyYXNlQXR0cmlidXRlSWZJbmplY3RlZCh0b2tlbiwg
Y29kZUF0dHIsIFN0cmluZygpLCBTcmNMaWtlQXR0cmlidXRlKTsKKyAgICAgICAgZGlkQmxvY2tT
Y3JpcHQgfD0gZXJhc2VBdHRyaWJ1dGVJZkluamVjdGVkKHRva2VuLCBvYmplY3RBdHRyKTsKKyAg
ICB9CiAgICAgcmV0dXJuIGRpZEJsb2NrU2NyaXB0OwogfQogCkBAIC00MDQsNyArNDA1LDEwIEBA
IGJvb2wgWFNTQXVkaXRvcjo6ZmlsdGVySWZyYW1lVG9rZW4oSFRNTFQKICAgICBBU1NFUlQodG9r
ZW4udHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpTdGFydFRhZyk7CiAgICAgQVNTRVJUKGhhc05h
bWUodG9rZW4sIGlmcmFtZVRhZykpOwogCi0gICAgcmV0dXJuIGVyYXNlQXR0cmlidXRlSWZJbmpl
Y3RlZCh0b2tlbiwgc3JjQXR0ciwgU3RyaW5nKCksIFNyY0xpa2VBdHRyaWJ1dGUpOworICAgIGlm
IChpc0NvbnRhaW5lZEluUmVxdWVzdCgiPGlmcmFtZSIpKQorICAgICAgICByZXR1cm4gZXJhc2VB
dHRyaWJ1dGVJZkluamVjdGVkKHRva2VuLCBzcmNBdHRyLCBTdHJpbmcoKSwgU3JjTGlrZUF0dHJp
YnV0ZSk7CisKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgWFNTQXVkaXRvcjo6ZmlsdGVy
TWV0YVRva2VuKEhUTUxUb2tlbiYgdG9rZW4pCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMDg2NzMpCisr
KyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAor
MjAxMi0wMi0yMyAgVG9tIFNlcGV6ICA8dHNlcGV6QGNocm9taXVtLm9yZz4KKworICAgICAgICBY
U1MgQXVkaXRvciB0YXJnZXRpbmcgbGVnaXRpbWF0ZSBmcmFtZXMgYXMgZmFsc2UgcG9zaXRpdmVz
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzkzOTcK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGh0dHAv
dGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9yZXNvdXJjZXMvc2NyaXB0LXRhZy1zYWZlNC1mcmFt
ZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Iv
c2NyaXB0LXRhZy1zYWZlNC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVz
dHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLXNhZmU0Lmh0bWw6IEFkZGVkLgorCiAy
MDEyLTAyLTIyICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJF
R1JFU1NJT04ocjk5MDc2KTogV2ViS2l0IHBhc3RlcyB0aGUgdHJhaWxpbmcgbmV3bGluZSBpbnRv
IGEgc2luZ2xlLWxpbmUgdGV4dCBmaWVsZApJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9z
ZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctc2FmZTQtZXhwZWN0ZWQudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQt
dGFnLXNhZmU0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAv
dGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLXNhZmU0LWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSBAQAorIFRlc3QgcGFzc2VzIGlmIFhTU0F1ZGl0b3IgaXMg
bm90IHRyaWdnZXJlZC4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNz
QXVkaXRvci9zY3JpcHQtdGFnLXNhZmU0Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctc2FmZTQuaHRtbAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9z
Y3JpcHQtdGFnLXNhZmU0Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTYgQEAKKzwhRE9D
VFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CitpZiAod2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOwor
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLnNldFhTU0F1ZGl0b3JFbmFibGVkKHRydWUpOworfQor
PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxpZnJhbWUgc3JjPSJodHRwOi8vbG9jYWxob3N0
OjgwMDAvc2VjdXJpdHkveHNzQXVkaXRvci9yZXNvdXJjZXMvc2NyaXB0LXRhZy1zYWZlNC1mcmFt
ZS5odG1sP3E9PGltZyUyMHNyYz0lMjJodHRwOi8vMTI3LjAuMC4xOjgwMDAvZm9vJTIyLz4iPgor
PC9pZnJhbWU+CitUZXN0IHBhc3NlcyBpZiBYU1NBdWRpdG9yIGlzIG5vdCB0cmlnZ2VyZWQuCis8
L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hz
c0F1ZGl0b3IvcmVzb3VyY2VzL3NjcmlwdC10YWctc2FmZTQtZnJhbWUuaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3IvcmVzb3VyY2Vz
L3NjcmlwdC10YWctc2FmZTQtZnJhbWUuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9yZXNvdXJjZXMvc2NyaXB0LXRhZy1zYWZl
NC1mcmFtZS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkgQEAKKzwhRE9DVFlQRSBodG1s
PgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJodHRwOi8vMTI3LjAuMC4xOjgwMDAvZm9v
Ij48L3NjcmlwdD4KKzxpbWcgc3JjPSJodHRwOi8vMTI3LjAuMC4xOjgwMDAvZm9vIi8+Cis8L2hl
YWQ+Cis8Ym9keT4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128580</attachid>
            <date>2012-02-23 15:58:55 -0800</date>
            <delta_ts>2012-02-23 16:21:56 -0800</delta_ts>
            <desc>Patch + some refactoring.</desc>
            <filename>patch_79397.txt</filename>
            <type>text/plain</type>
            <size>14171</size>
            <attacher name="Thomas Sepez">tsepez</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwODY5MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4IEBACisyMDEyLTAyLTIzICBUb20gU2Vw
ZXogIDx0c2VwZXpAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFhTUyBBdWRpdG9yIHRhcmdldGlu
ZyBsZWdpdGltYXRlIGZyYW1lcyBhcyBmYWxzZSBwb3NpdGl2ZXMuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03OTM5NworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3Q6IGh0dHAvdGVzdHMvc2VjdXJpdHkv
eHNzQXVkaXRvci9zY3JpcHQtdGFnLXNhZmU0Lmh0bWwKKworICAgICAgICAqIGh0bWwvcGFyc2Vy
L1hTU0F1ZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WFNTQXVkaXRvcjo6ZmlsdGVyQ2hh
cmFjdGVyVG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6WFNTQXVkaXRvcjo6ZmlsdGVyU2NyaXB0
VG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6WFNTQXVkaXRvcjo6ZmlsdGVyT2JqZWN0VG9rZW4p
OgorICAgICAgICAoV2ViQ29yZTo6WFNTQXVkaXRvcjo6ZmlsdGVyRW1iZWRUb2tlbik6CisgICAg
ICAgIChXZWJDb3JlOjpYU1NBdWRpdG9yOjpmaWx0ZXJBcHBsZXRUb2tlbik6CisgICAgICAgIChX
ZWJDb3JlOjpYU1NBdWRpdG9yOjpmaWx0ZXJJZnJhbWVUb2tlbik6CisgICAgICAgIChXZWJDb3Jl
OjpYU1NBdWRpdG9yOjpkZWNvZGVkU25pcHBldEZvclRva2VuKToKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6WFNTQXVkaXRvcjo6ZGVjb2RlZFNuaXBwZXRGb3JOYW1lKToK
KyAgICAgICAgKFdlYkNvcmU6OlhTU0F1ZGl0b3I6OmRlY29kZWRTbmlwcGV0Rm9yQXR0cmlidXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlhTU0F1ZGl0b3I6OmRlY29kZWRTbmlwcGV0Rm9ySmF2YXNj
cmlwdCk6CisgICAgICAgIChXZWJDb3JlOjpYU1NBdWRpdG9yOjppc0NvbnRhaW5lZEluUmVxdWVz
dCk6CisgICAgICAgIChXZWJDb3JlOjpYU1NBdWRpdG9yOjppc1NhbWVPcmlnaW5SZXNvdXJjZSk6
CisgICAgICAgICogaHRtbC9wYXJzZXIvWFNTQXVkaXRvci5oOgorCiAyMDEyLTAyLTIzICBLb2pp
IElzaGlpICA8a29qaWlzaGlAZ21haWwuY29tPgogCiAgICAgICAgIENTUzI6dGV4dC1kZWNvcmF0
aW9uOiA8cnQ+IGVsZW1lbnQgc2hvdWxkIG5vdCBpbmhlcml0IHRleHQtZGVjb3JhdGlvbiBwcm9w
ZXJ0eQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvWFNTQXVkaXRvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvWFNTQXVkaXRvci5jcHAJKHJl
dmlzaW9uIDEwODY1NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1hTU0F1ZGl0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTMsMTYgKzMxMywxMCBAQCB2b2lkIFhTU0F1ZGl0b3I6
OmZpbHRlckVuZFRva2VuKEhUTUxUb2tlCiBib29sIFhTU0F1ZGl0b3I6OmZpbHRlckNoYXJhY3Rl
clRva2VuKEhUTUxUb2tlbiYgdG9rZW4pCiB7CiAgICAgQVNTRVJUKG1fc2NyaXB0VGFnTmVzdGlu
Z0xldmVsKTsKLSAgICBUZXh0UmVzb3VyY2VEZWNvZGVyKiBkZWNvZGVyID0gbV9wYXJzZXItPmRv
Y3VtZW50KCktPmRlY29kZXIoKTsKLSAgICBpZiAoaXNDb250YWluZWRJblJlcXVlc3QoZnVsbHlE
ZWNvZGVTdHJpbmcobV9jYWNoZWRTbmlwcGV0LCBkZWNvZGVyKSkpIHsKLSAgICAgICAgaW50IHN0
YXJ0ID0gMDsKLSAgICAgICAgaW50IGVuZCA9IHRva2VuLmVuZEluZGV4KCkgLSB0b2tlbi5zdGFy
dEluZGV4KCk7Ci0gICAgICAgIFN0cmluZyBzbmlwcGV0ID0gc25pcHBldEZvckphdmFTY3JpcHQo
c25pcHBldEZvclJhbmdlKHRva2VuLCBzdGFydCwgZW5kKSk7Ci0gICAgICAgIGlmIChpc0NvbnRh
aW5lZEluUmVxdWVzdChmdWxseURlY29kZVN0cmluZyhzbmlwcGV0LCBkZWNvZGVyKSkpIHsKLSAg
ICAgICAgICAgIHRva2VuLmVyYXNlQ2hhcmFjdGVycygpOwotICAgICAgICAgICAgdG9rZW4uYXBw
ZW5kVG9DaGFyYWN0ZXIoJyAnKTsgLy8gVGVjaG5pY2FsbHksIGNoYXJhY3RlciB0b2tlbnMgY2Fu
J3QgYmUgZW1wdHkuCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQorICAgIGlm
IChpc0NvbnRhaW5lZEluUmVxdWVzdChtX2NhY2hlZERlY29kZWRTbmlwcGV0KSAmJiBpc0NvbnRh
aW5lZEluUmVxdWVzdChkZWNvZGVkU25pcHBldEZvckphdmFzY3JpcHQodG9rZW4pKSkgeworICAg
ICAgICB0b2tlbi5lcmFzZUNoYXJhY3RlcnMoKTsKKyAgICAgICAgdG9rZW4uYXBwZW5kVG9DaGFy
YWN0ZXIoJyAnKTsgLy8gVGVjaG5pY2FsbHksIGNoYXJhY3RlciB0b2tlbnMgY2FuJ3QgYmUgZW1w
dHkuCisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9CkBA
IC0zMzIsMTEgKzMyNiwxMiBAQCBib29sIFhTU0F1ZGl0b3I6OmZpbHRlclNjcmlwdFRva2VuKEhU
TUxUCiAgICAgQVNTRVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6U3RhcnRUYWcp
OwogICAgIEFTU0VSVChoYXNOYW1lKHRva2VuLCBzY3JpcHRUYWcpKTsKIAotICAgIGlmIChlcmFz
ZUF0dHJpYnV0ZUlmSW5qZWN0ZWQodG9rZW4sIHNyY0F0dHIsIGJsYW5rVVJMKCkuc3RyaW5nKCks
IFNyY0xpa2VBdHRyaWJ1dGUpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIG1fY2FjaGVk
U25pcHBldCA9IG1fcGFyc2VyLT5zb3VyY2VGb3JUb2tlbih0b2tlbik7CisgICAgbV9jYWNoZWRE
ZWNvZGVkU25pcHBldCA9IHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRNTFNwYWNlcyhkZWNvZGVk
U25pcHBldEZvclRva2VuKHRva2VuKSk7CiAgICAgbV9zaG91bGRBbGxvd0NEQVRBID0gbV9wYXJz
ZXItPnRva2VuaXplcigpLT5zaG91bGRBbGxvd0NEQVRBKCk7CisKKyAgICBpZiAoaXNDb250YWlu
ZWRJblJlcXVlc3QoZGVjb2RlZFNuaXBwZXRGb3JOYW1lKHRva2VuKSkpCisgICAgICAgIHJldHVy
biBlcmFzZUF0dHJpYnV0ZUlmSW5qZWN0ZWQodG9rZW4sIHNyY0F0dHIsIGJsYW5rVVJMKCkuc3Ry
aW5nKCksIFNyY0xpa2VBdHRyaWJ1dGUpOworCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0z
NDYsMTEgKzM0MSwxMSBAQCBib29sIFhTU0F1ZGl0b3I6OmZpbHRlck9iamVjdFRva2VuKEhUTUxU
CiAgICAgQVNTRVJUKGhhc05hbWUodG9rZW4sIG9iamVjdFRhZykpOwogCiAgICAgYm9vbCBkaWRC
bG9ja1NjcmlwdCA9IGZhbHNlOwotCi0gICAgZGlkQmxvY2tTY3JpcHQgfD0gZXJhc2VBdHRyaWJ1
dGVJZkluamVjdGVkKHRva2VuLCBkYXRhQXR0ciwgYmxhbmtVUkwoKS5zdHJpbmcoKSwgU3JjTGlr
ZUF0dHJpYnV0ZSk7Ci0gICAgZGlkQmxvY2tTY3JpcHQgfD0gZXJhc2VBdHRyaWJ1dGVJZkluamVj
dGVkKHRva2VuLCB0eXBlQXR0cik7Ci0gICAgZGlkQmxvY2tTY3JpcHQgfD0gZXJhc2VBdHRyaWJ1
dGVJZkluamVjdGVkKHRva2VuLCBjbGFzc2lkQXR0cik7Ci0KKyAgICBpZiAoaXNDb250YWluZWRJ
blJlcXVlc3QoZGVjb2RlZFNuaXBwZXRGb3JOYW1lKHRva2VuKSkpIHsKKyAgICAgICAgZGlkQmxv
Y2tTY3JpcHQgfD0gZXJhc2VBdHRyaWJ1dGVJZkluamVjdGVkKHRva2VuLCBkYXRhQXR0ciwgYmxh
bmtVUkwoKS5zdHJpbmcoKSwgU3JjTGlrZUF0dHJpYnV0ZSk7CisgICAgICAgIGRpZEJsb2NrU2Ny
aXB0IHw9IGVyYXNlQXR0cmlidXRlSWZJbmplY3RlZCh0b2tlbiwgdHlwZUF0dHIpOworICAgICAg
ICBkaWRCbG9ja1NjcmlwdCB8PSBlcmFzZUF0dHJpYnV0ZUlmSW5qZWN0ZWQodG9rZW4sIGNsYXNz
aWRBdHRyKTsKKyAgICB9CiAgICAgcmV0dXJuIGRpZEJsb2NrU2NyaXB0OwogfQogCkBAIC0zNzgs
MTEgKzM3MywxMSBAQCBib29sIFhTU0F1ZGl0b3I6OmZpbHRlckVtYmVkVG9rZW4oSFRNTFRvCiAg
ICAgQVNTRVJUKGhhc05hbWUodG9rZW4sIGVtYmVkVGFnKSk7CiAKICAgICBib29sIGRpZEJsb2Nr
U2NyaXB0ID0gZmFsc2U7Ci0KLSAgICBkaWRCbG9ja1NjcmlwdCB8PSBlcmFzZUF0dHJpYnV0ZUlm
SW5qZWN0ZWQodG9rZW4sIGNvZGVBdHRyLCBTdHJpbmcoKSwgU3JjTGlrZUF0dHJpYnV0ZSk7Ci0g
ICAgZGlkQmxvY2tTY3JpcHQgfD0gZXJhc2VBdHRyaWJ1dGVJZkluamVjdGVkKHRva2VuLCBzcmNB
dHRyLCBibGFua1VSTCgpLnN0cmluZygpLCBTcmNMaWtlQXR0cmlidXRlKTsKLSAgICBkaWRCbG9j
a1NjcmlwdCB8PSBlcmFzZUF0dHJpYnV0ZUlmSW5qZWN0ZWQodG9rZW4sIHR5cGVBdHRyKTsKLQor
ICAgIGlmIChpc0NvbnRhaW5lZEluUmVxdWVzdChkZWNvZGVkU25pcHBldEZvck5hbWUodG9rZW4p
KSkgeworICAgICAgICBkaWRCbG9ja1NjcmlwdCB8PSBlcmFzZUF0dHJpYnV0ZUlmSW5qZWN0ZWQo
dG9rZW4sIGNvZGVBdHRyLCBTdHJpbmcoKSwgU3JjTGlrZUF0dHJpYnV0ZSk7CisgICAgICAgIGRp
ZEJsb2NrU2NyaXB0IHw9IGVyYXNlQXR0cmlidXRlSWZJbmplY3RlZCh0b2tlbiwgc3JjQXR0ciwg
YmxhbmtVUkwoKS5zdHJpbmcoKSwgU3JjTGlrZUF0dHJpYnV0ZSk7CisgICAgICAgIGRpZEJsb2Nr
U2NyaXB0IHw9IGVyYXNlQXR0cmlidXRlSWZJbmplY3RlZCh0b2tlbiwgdHlwZUF0dHIpOworICAg
IH0KICAgICByZXR1cm4gZGlkQmxvY2tTY3JpcHQ7CiB9CiAKQEAgLTM5MiwxMCArMzg3LDEwIEBA
IGJvb2wgWFNTQXVkaXRvcjo6ZmlsdGVyQXBwbGV0VG9rZW4oSFRNTFQKICAgICBBU1NFUlQoaGFz
TmFtZSh0b2tlbiwgYXBwbGV0VGFnKSk7CiAKICAgICBib29sIGRpZEJsb2NrU2NyaXB0ID0gZmFs
c2U7Ci0KLSAgICBkaWRCbG9ja1NjcmlwdCB8PSBlcmFzZUF0dHJpYnV0ZUlmSW5qZWN0ZWQodG9r
ZW4sIGNvZGVBdHRyLCBTdHJpbmcoKSwgU3JjTGlrZUF0dHJpYnV0ZSk7Ci0gICAgZGlkQmxvY2tT
Y3JpcHQgfD0gZXJhc2VBdHRyaWJ1dGVJZkluamVjdGVkKHRva2VuLCBvYmplY3RBdHRyKTsKLQor
ICAgIGlmIChpc0NvbnRhaW5lZEluUmVxdWVzdChkZWNvZGVkU25pcHBldEZvck5hbWUodG9rZW4p
KSkgeworICAgICAgICBkaWRCbG9ja1NjcmlwdCB8PSBlcmFzZUF0dHJpYnV0ZUlmSW5qZWN0ZWQo
dG9rZW4sIGNvZGVBdHRyLCBTdHJpbmcoKSwgU3JjTGlrZUF0dHJpYnV0ZSk7CisgICAgICAgIGRp
ZEJsb2NrU2NyaXB0IHw9IGVyYXNlQXR0cmlidXRlSWZJbmplY3RlZCh0b2tlbiwgb2JqZWN0QXR0
cik7CisgICAgfQogICAgIHJldHVybiBkaWRCbG9ja1NjcmlwdDsKIH0KIApAQCAtNDA0LDcgKzM5
OSwxMCBAQCBib29sIFhTU0F1ZGl0b3I6OmZpbHRlcklmcmFtZVRva2VuKEhUTUxUCiAgICAgQVNT
RVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6U3RhcnRUYWcpOwogICAgIEFTU0VS
VChoYXNOYW1lKHRva2VuLCBpZnJhbWVUYWcpKTsKIAotICAgIHJldHVybiBlcmFzZUF0dHJpYnV0
ZUlmSW5qZWN0ZWQodG9rZW4sIHNyY0F0dHIsIFN0cmluZygpLCBTcmNMaWtlQXR0cmlidXRlKTsK
KyAgICBpZiAoaXNDb250YWluZWRJblJlcXVlc3QoZGVjb2RlZFNuaXBwZXRGb3JOYW1lKHRva2Vu
KSkpCisgICAgICAgIHJldHVybiBlcmFzZUF0dHJpYnV0ZUlmSW5qZWN0ZWQodG9rZW4sIHNyY0F0
dHIsIFN0cmluZygpLCBTcmNMaWtlQXR0cmlidXRlKTsKKworICAgIHJldHVybiBmYWxzZTsKIH0K
IAogYm9vbCBYU1NBdWRpdG9yOjpmaWx0ZXJNZXRhVG9rZW4oSFRNTFRva2VuJiB0b2tlbikKQEAg
LTQ5NCwxMSArNDkyLDIxIEBAIGJvb2wgWFNTQXVkaXRvcjo6ZXJhc2VBdHRyaWJ1dGVJZkluamVj
dGUKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVN0cmluZyBYU1NBdWRpdG9yOjpzbmlwcGV0Rm9y
UmFuZ2UoY29uc3QgSFRNTFRva2VuJiB0b2tlbiwgaW50IHN0YXJ0LCBpbnQgZW5kKQotewotICAg
IC8vIEZJWE1FOiBUaGVyZSdzIGFuIGV4dHJhIGFsbG9jYXRpb24gaGVyZSB0aGF0IHdlIGNvdWxk
IHNhdmUgYnkKLSAgICAvLyAgICAgICAgcGFzc2luZyB0aGUgcmFuZ2UgdG8gdGhlIHBhcnNlci4K
LSAgICByZXR1cm4gbV9wYXJzZXItPnNvdXJjZUZvclRva2VuKHRva2VuKS5zdWJzdHJpbmcoc3Rh
cnQsIGVuZCAtIHN0YXJ0KTsKK1N0cmluZyBYU1NBdWRpdG9yOjpkZWNvZGVkU25pcHBldEZvclRv
a2VuKGNvbnN0IEhUTUxUb2tlbiYgdG9rZW4pIHsKKyAgICBTdHJpbmcgc25pcHBldCA9IG1fcGFy
c2VyLT5zb3VyY2VGb3JUb2tlbih0b2tlbik7CisgICAgcmV0dXJuIGZ1bGx5RGVjb2RlU3RyaW5n
KHNuaXBwZXQsIG1fcGFyc2VyLT5kb2N1bWVudCgpLT5kZWNvZGVyKCkpOworfQorCitTdHJpbmcg
WFNTQXVkaXRvcjo6ZGVjb2RlZFNuaXBwZXRGb3JOYW1lKGNvbnN0IEhUTUxUb2tlbiYgdG9rZW4p
IHsKKyAgICBTdHJpbmcgZGVjb2RlZFNuaXBwZXQgPSBkZWNvZGVkU25pcHBldEZvclRva2VuKHRv
a2VuKTsKKyAgICBzaXplX3Qgc3RhcnQgPSBkZWNvZGVkU25pcHBldC5maW5kKCI8Iik7CisgICAg
aWYgKHN0YXJ0ICE9IG5vdEZvdW5kKSB7CisgICAgICAgIHNpemVfdCBlbmQgPSBkZWNvZGVkU25p
cHBldC5maW5kKGlzSFRNTFNwYWNlLCBzdGFydCArIDEpOworICAgICAgICBpZiAoZW5kICE9IG5v
dEZvdW5kKSAKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVkU25pcHBldC5zdWJzdHJpbmcoc3Rh
cnQsIGVuZCAtIHN0YXJ0KTsKKyAgICB9CisKKyAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKIFN0
cmluZyBYU1NBdWRpdG9yOjpkZWNvZGVkU25pcHBldEZvckF0dHJpYnV0ZShjb25zdCBIVE1MVG9r
ZW4mIHRva2VuLCBjb25zdCBIVE1MVG9rZW46OkF0dHJpYnV0ZSYgYXR0cmlidXRlLCBBdHRyaWJ1
dGVLaW5kIHRyZWF0bWVudCkKQEAgLTUwOSw3ICs1MTcsNyBAQCBTdHJpbmcgWFNTQXVkaXRvcjo6
ZGVjb2RlZFNuaXBwZXRGb3JBdHRyCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBncmFiIG9uZSBj
aGFyYWN0ZXIgYmVmb3JlIHRoZSBuYW1lIGFsc28uCiAgICAgaW50IHN0YXJ0ID0gYXR0cmlidXRl
Lm1fbmFtZVJhbmdlLm1fc3RhcnQgLSB0b2tlbi5zdGFydEluZGV4KCk7CiAgICAgaW50IGVuZCA9
IGF0dHJpYnV0ZS5tX3ZhbHVlUmFuZ2UubV9lbmQgLSB0b2tlbi5zdGFydEluZGV4KCk7Ci0gICAg
U3RyaW5nIGRlY29kZWRTbmlwcGV0ID0gZnVsbHlEZWNvZGVTdHJpbmcoc25pcHBldEZvclJhbmdl
KHRva2VuLCBzdGFydCwgZW5kKSwgbV9wYXJzZXItPmRvY3VtZW50KCktPmRlY29kZXIoKSk7Cisg
ICAgU3RyaW5nIGRlY29kZWRTbmlwcGV0ID0gZnVsbHlEZWNvZGVTdHJpbmcobV9wYXJzZXItPnNv
dXJjZUZvclRva2VuKHRva2VuKS5zdWJzdHJpbmcoc3RhcnQsIGVuZCAtIHN0YXJ0KSwgbV9wYXJz
ZXItPmRvY3VtZW50KCktPmRlY29kZXIoKSk7CiAgICAgZGVjb2RlZFNuaXBwZXQudHJ1bmNhdGUo
a01heGltdW1GcmFnbWVudExlbmd0aFRhcmdldCk7CiAgICAgaWYgKHRyZWF0bWVudCA9PSBTcmNM
aWtlQXR0cmlidXRlKSB7CiAgICAgICAgIGludCBzbGFzaENvdW50OwpAQCAtNTI4LDMxICs1MzYs
OSBAQCBTdHJpbmcgWFNTQXVkaXRvcjo6ZGVjb2RlZFNuaXBwZXRGb3JBdHRyCiAgICAgcmV0dXJu
IGRlY29kZWRTbmlwcGV0OwogfQogCi1ib29sIFhTU0F1ZGl0b3I6OmlzQ29udGFpbmVkSW5SZXF1
ZXN0KGNvbnN0IFN0cmluZyYgZGVjb2RlZFNuaXBwZXQpCi17Ci0gICAgaWYgKGRlY29kZWRTbmlw
cGV0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtX2RlY29kZWRV
UkwuZmluZChkZWNvZGVkU25pcHBldCwgMCwgZmFsc2UpICE9IG5vdEZvdW5kKQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICBpZiAobV9kZWNvZGVkSFRUUEJvZHlTdWZmaXhUcmVlICYmICFtX2Rl
Y29kZWRIVFRQQm9keVN1ZmZpeFRyZWUtPm1pZ2h0Q29udGFpbihkZWNvZGVkU25pcHBldCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gbV9kZWNvZGVkSFRUUEJvZHkuZmluZChk
ZWNvZGVkU25pcHBldCwgMCwgZmFsc2UpICE9IG5vdEZvdW5kOwotfQotCi1ib29sIFhTU0F1ZGl0
b3I6OmlzU2FtZU9yaWdpblJlc291cmNlKGNvbnN0IFN0cmluZyYgdXJsKQotewotICAgIC8vIElm
IHRoZSByZXNvdXJjZSBpcyBsb2FkZWQgZnJvbSB0aGUgc2FtZSBVUkwgYXMgdGhlIGVuY2xvc2lu
ZyBwYWdlLCBpdCdzCi0gICAgLy8gcHJvYmFibHkgbm90IGFuIFhTUyBhdHRhY2ssIHNvIHdlIHJl
ZHVjZSBmYWxzZSBwb3NpdGl2ZXMgYnkgYWxsb3dpbmcgdGhlCi0gICAgLy8gcmVxdWVzdC4gSWYg
dGhlIHJlc291cmNlIGhhcyBhIHF1ZXJ5IHN0cmluZywgd2UncmUgbW9yZSBzdXNwaWNpb3VzLAot
ICAgIC8vIGhvd2V2ZXIsIGJlY2F1c2UgdGhhdCdzIHByZXR0eSByYXJlIGFuZCB0aGUgYXR0YWNr
ZXIgbWlnaHQgYmUgYWJsZSB0bwotICAgIC8vIHRyaWNrIGEgc2VydmVyLXNpZGUgc2NyaXB0IGlu
dG8gZG9pbmcgc29tZXRoaW5nIGRhbmdlcm91cyB3aXRoIHRoZSBxdWVyeQotICAgIC8vIHN0cmlu
Zy4KLSAgICBLVVJMIHJlc291cmNlVVJMKG1fcGFyc2VyLT5kb2N1bWVudCgpLT51cmwoKSwgdXJs
KTsKLSAgICByZXR1cm4gKG1fcGFyc2VyLT5kb2N1bWVudCgpLT51cmwoKS5ob3N0KCkgPT0gcmVz
b3VyY2VVUkwuaG9zdCgpICYmIHJlc291cmNlVVJMLnF1ZXJ5KCkuaXNFbXB0eSgpKTsKLX0KLQot
U3RyaW5nIFhTU0F1ZGl0b3I6OnNuaXBwZXRGb3JKYXZhU2NyaXB0KGNvbnN0IFN0cmluZyYgc3Ry
aW5nKQorU3RyaW5nIFhTU0F1ZGl0b3I6OmRlY29kZWRTbmlwcGV0Rm9ySmF2YXNjcmlwdChjb25z
dCBIVE1MVG9rZW4mIHRva2VuKQogeworICAgIFN0cmluZyBzdHJpbmcgPSBtX3BhcnNlci0+c291
cmNlRm9yVG9rZW4odG9rZW4pOwogICAgIHNpemVfdCBzdGFydFBvc2l0aW9uID0gMDsKICAgICBz
aXplX3QgZW5kUG9zaXRpb24gPSBzdHJpbmcubGVuZ3RoKCk7CiAgICAgc2l6ZV90IGZvdW5kUG9z
aXRpb24gPSBub3RGb3VuZDsKQEAgLTYwNSw3ICs1OTEsMzAgQEAgU3RyaW5nIFhTU0F1ZGl0b3I6
OnNuaXBwZXRGb3JKYXZhU2NyaXB0KAogICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIHN0
cmluZy5zdWJzdHJpbmcoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24gLSBzdGFydFBvc2l0aW9u
KTsKKyAgICByZXR1cm4gZnVsbHlEZWNvZGVTdHJpbmcoc3RyaW5nLnN1YnN0cmluZyhzdGFydFBv
c2l0aW9uLCBlbmRQb3NpdGlvbiAtIHN0YXJ0UG9zaXRpb24pLCBtX3BhcnNlci0+ZG9jdW1lbnQo
KS0+ZGVjb2RlcigpKTsKK30KKworYm9vbCBYU1NBdWRpdG9yOjppc0NvbnRhaW5lZEluUmVxdWVz
dChjb25zdCBTdHJpbmcmIGRlY29kZWRTbmlwcGV0KQoreworICAgIGlmIChkZWNvZGVkU25pcHBl
dC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV9kZWNvZGVkVVJM
LmZpbmQoZGVjb2RlZFNuaXBwZXQsIDAsIGZhbHNlKSAhPSBub3RGb3VuZCkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgaWYgKG1fZGVjb2RlZEhUVFBCb2R5U3VmZml4VHJlZSAmJiAhbV9kZWNv
ZGVkSFRUUEJvZHlTdWZmaXhUcmVlLT5taWdodENvbnRhaW4oZGVjb2RlZFNuaXBwZXQpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG1fZGVjb2RlZEhUVFBCb2R5LmZpbmQoZGVj
b2RlZFNuaXBwZXQsIDAsIGZhbHNlKSAhPSBub3RGb3VuZDsKK30KKworYm9vbCBYU1NBdWRpdG9y
Ojppc1NhbWVPcmlnaW5SZXNvdXJjZShjb25zdCBTdHJpbmcmIHVybCkKK3sKKyAgICAvLyBJZiB0
aGUgcmVzb3VyY2UgaXMgbG9hZGVkIGZyb20gdGhlIHNhbWUgVVJMIGFzIHRoZSBlbmNsb3Npbmcg
cGFnZSwgaXQncworICAgIC8vIHByb2JhYmx5IG5vdCBhbiBYU1MgYXR0YWNrLCBzbyB3ZSByZWR1
Y2UgZmFsc2UgcG9zaXRpdmVzIGJ5IGFsbG93aW5nIHRoZQorICAgIC8vIHJlcXVlc3QuIElmIHRo
ZSByZXNvdXJjZSBoYXMgYSBxdWVyeSBzdHJpbmcsIHdlJ3JlIG1vcmUgc3VzcGljaW91cywKKyAg
ICAvLyBob3dldmVyLCBiZWNhdXNlIHRoYXQncyBwcmV0dHkgcmFyZSBhbmQgdGhlIGF0dGFja2Vy
IG1pZ2h0IGJlIGFibGUgdG8KKyAgICAvLyB0cmljayBhIHNlcnZlci1zaWRlIHNjcmlwdCBpbnRv
IGRvaW5nIHNvbWV0aGluZyBkYW5nZXJvdXMgd2l0aCB0aGUgcXVlcnkKKyAgICAvLyBzdHJpbmcu
CisgICAgS1VSTCByZXNvdXJjZVVSTChtX3BhcnNlci0+ZG9jdW1lbnQoKS0+dXJsKCksIHVybCk7
CisgICAgcmV0dXJuIChtX3BhcnNlci0+ZG9jdW1lbnQoKS0+dXJsKCkuaG9zdCgpID09IHJlc291
cmNlVVJMLmhvc3QoKSAmJiByZXNvdXJjZVVSTC5xdWVyeSgpLmlzRW1wdHkoKSk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1hT
U0F1ZGl0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9YU1NB
dWRpdG9yLmgJKHJldmlzaW9uIDEwODY1NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2Vy
L1hTU0F1ZGl0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNzIsOSArNzIsMTAgQEAgcHJpdmF0ZToK
ICAgICBib29sIGVyYXNlRGFuZ2Vyb3VzQXR0cmlidXRlc0lmSW5qZWN0ZWQoSFRNTFRva2VuJik7
CiAgICAgYm9vbCBlcmFzZUF0dHJpYnV0ZUlmSW5qZWN0ZWQoSFRNTFRva2VuJiwgY29uc3QgUXVh
bGlmaWVkTmFtZSYsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRWYWx1ZSA9IFN0cmluZygpLCBB
dHRyaWJ1dGVLaW5kIHRyZWF0bWVudCA9IE5vcm1hbEF0dHJpYnV0ZSk7CiAKLSAgICBTdHJpbmcg
c25pcHBldEZvclJhbmdlKGNvbnN0IEhUTUxUb2tlbiYsIGludCBzdGFydCwgaW50IGVuZCk7Ci0g
ICAgU3RyaW5nIHNuaXBwZXRGb3JKYXZhU2NyaXB0KGNvbnN0IFN0cmluZyYpOworICAgIFN0cmlu
ZyBkZWNvZGVkU25pcHBldEZvclRva2VuKGNvbnN0IEhUTUxUb2tlbiYpOworICAgIFN0cmluZyBk
ZWNvZGVkU25pcHBldEZvck5hbWUoY29uc3QgSFRNTFRva2VuJik7CiAgICAgU3RyaW5nIGRlY29k
ZWRTbmlwcGV0Rm9yQXR0cmlidXRlKGNvbnN0IEhUTUxUb2tlbiYsIGNvbnN0IEhUTUxUb2tlbjo6
QXR0cmlidXRlJiwgQXR0cmlidXRlS2luZCB0cmVhdG1lbnQgPSBOb3JtYWxBdHRyaWJ1dGUpOwor
ICAgIFN0cmluZyBkZWNvZGVkU25pcHBldEZvckphdmFzY3JpcHQoY29uc3QgSFRNTFRva2VuJik7
CiAKICAgICBib29sIGlzQ29udGFpbmVkSW5SZXF1ZXN0KGNvbnN0IFN0cmluZyYpOwogICAgIGJv
b2wgaXNTYW1lT3JpZ2luUmVzb3VyY2UoY29uc3QgU3RyaW5nJiB1cmwpOwpAQCAtODgsNyArODks
NyBAQCBwcml2YXRlOgogICAgIE93blB0cjxTdWZmaXhUcmVlPEFTQ0lJQ29kZWJvb2s+ID4gbV9k
ZWNvZGVkSFRUUEJvZHlTdWZmaXhUcmVlOwogCiAgICAgU3RhdGUgbV9zdGF0ZTsKLSAgICBTdHJp
bmcgbV9jYWNoZWRTbmlwcGV0OworICAgIFN0cmluZyBtX2NhY2hlZERlY29kZWRTbmlwcGV0Owog
ICAgIGJvb2wgbV9zaG91bGRBbGxvd0NEQVRBOwogICAgIHVuc2lnbmVkIG1fc2NyaXB0VGFnTmVz
dGluZ0xldmVsOwogICAgIGJvb2wgbV9ub3RpZmllZENsaWVudDsKSW5kZXg6IExheW91dFRlc3Rz
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9u
IDEwODY5MCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE0IEBACisyMDEyLTAyLTIzICBUb20gU2VwZXogIDx0c2VwZXpAY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFhTUyBBdWRpdG9yIHRhcmdldGluZyBsZWdpdGltYXRlIGZyYW1lcyBhcyBmYWxz
ZSBwb3NpdGl2ZXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD03OTM5NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3Jlc291cmNlcy9zY3JpcHQtdGFn
LXNhZmU0LWZyYW1lLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkv
eHNzQXVkaXRvci9zY3JpcHQtdGFnLXNhZmU0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctc2FmZTQuaHRtbDog
QWRkZWQuCisKIDIwMTItMDItMjMgIEtvamkgSXNoaWkgIDxrb2ppaXNoaUBnbWFpbC5jb20+CiAK
ICAgICAgICAgQ1NTMjp0ZXh0LWRlY29yYXRpb246IDxydD4gZWxlbWVudCBzaG91bGQgbm90IGlu
aGVyaXQgdGV4dC1kZWNvcmF0aW9uIHByb3BlcnR5CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1zYWZlNC1leHBlY3RlZC50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3Nj
cmlwdC10YWctc2FmZTQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctc2FmZTQtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxIEBACisgVGVzdCBwYXNzZXMgaWYgWFNTQXVkaXRv
ciBpcyBub3QgdHJpZ2dlcmVkLgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0
eS94c3NBdWRpdG9yL3NjcmlwdC10YWctc2FmZTQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1zYWZlNC5odG1s
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRp
dG9yL3NjcmlwdC10YWctc2FmZTQuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNiBAQAor
PCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KK2lmICh3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0
KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0WFNTQXVkaXRvckVuYWJsZWQodHJ1ZSk7
Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGlmcmFtZSBzcmM9Imh0dHA6Ly9sb2Nh
bGhvc3Q6ODAwMC9zZWN1cml0eS94c3NBdWRpdG9yL3Jlc291cmNlcy9zY3JpcHQtdGFnLXNhZmU0
LWZyYW1lLmh0bWw/cT08aW1nJTIwc3JjPSUyMmh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9mb28lMjIv
PiI+Cis8L2lmcmFtZT4KK1Rlc3QgcGFzc2VzIGlmIFhTU0F1ZGl0b3IgaXMgbm90IHRyaWdnZXJl
ZC4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJp
dHkveHNzQXVkaXRvci9yZXNvdXJjZXMvc2NyaXB0LXRhZy1zYWZlNC1mcmFtZS5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9yZXNv
dXJjZXMvc2NyaXB0LXRhZy1zYWZlNC1mcmFtZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3Jlc291cmNlcy9zY3JpcHQtdGFn
LXNhZmU0LWZyYW1lLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOSBAQAorPCFET0NUWVBF
IGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Imh0dHA6Ly8xMjcuMC4wLjE6ODAw
MC9mb28iPjwvc2NyaXB0PgorPGltZyBzcmM9Imh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9mb28iLz4K
KzwvaGVhZD4KKzxib2R5PgorPC9ib2R5PgorPC9odG1sPgo=
</data>
<flag name="review"
          id="131004"
          type_id="1"
          status="+"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128592</attachid>
            <date>2012-02-23 16:21:56 -0800</date>
            <delta_ts>2012-02-24 18:19:37 -0800</delta_ts>
            <desc>Patch w/ fixed char grab</desc>
            <filename>patch_79397.txt</filename>
            <type>text/plain</type>
            <size>14038</size>
            <attacher name="Thomas Sepez">tsepez</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwODY5MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4IEBACisyMDEyLTAyLTIzICBUb20gU2Vw
ZXogIDx0c2VwZXpAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFhTUyBBdWRpdG9yIHRhcmdldGlu
ZyBsZWdpdGltYXRlIGZyYW1lcyBhcyBmYWxzZSBwb3NpdGl2ZXMuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03OTM5NworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3Q6IGh0dHAvdGVzdHMvc2VjdXJpdHkv
eHNzQXVkaXRvci9zY3JpcHQtdGFnLXNhZmU0Lmh0bWwKKworICAgICAgICAqIGh0bWwvcGFyc2Vy
L1hTU0F1ZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WFNTQXVkaXRvcjo6ZmlsdGVyQ2hh
cmFjdGVyVG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6WFNTQXVkaXRvcjo6ZmlsdGVyU2NyaXB0
VG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6WFNTQXVkaXRvcjo6ZmlsdGVyT2JqZWN0VG9rZW4p
OgorICAgICAgICAoV2ViQ29yZTo6WFNTQXVkaXRvcjo6ZmlsdGVyRW1iZWRUb2tlbik6CisgICAg
ICAgIChXZWJDb3JlOjpYU1NBdWRpdG9yOjpmaWx0ZXJBcHBsZXRUb2tlbik6CisgICAgICAgIChX
ZWJDb3JlOjpYU1NBdWRpdG9yOjpmaWx0ZXJJZnJhbWVUb2tlbik6CisgICAgICAgIChXZWJDb3Jl
OjpYU1NBdWRpdG9yOjpkZWNvZGVkU25pcHBldEZvclRva2VuKToKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6WFNTQXVkaXRvcjo6ZGVjb2RlZFNuaXBwZXRGb3JOYW1lKToK
KyAgICAgICAgKFdlYkNvcmU6OlhTU0F1ZGl0b3I6OmRlY29kZWRTbmlwcGV0Rm9yQXR0cmlidXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlhTU0F1ZGl0b3I6OmRlY29kZWRTbmlwcGV0Rm9ySmF2YXNj
cmlwdCk6CisgICAgICAgIChXZWJDb3JlOjpYU1NBdWRpdG9yOjppc0NvbnRhaW5lZEluUmVxdWVz
dCk6CisgICAgICAgIChXZWJDb3JlOjpYU1NBdWRpdG9yOjppc1NhbWVPcmlnaW5SZXNvdXJjZSk6
CisgICAgICAgICogaHRtbC9wYXJzZXIvWFNTQXVkaXRvci5oOgorCiAyMDEyLTAyLTIzICBLb2pp
IElzaGlpICA8a29qaWlzaGlAZ21haWwuY29tPgogCiAgICAgICAgIENTUzI6dGV4dC1kZWNvcmF0
aW9uOiA8cnQ+IGVsZW1lbnQgc2hvdWxkIG5vdCBpbmhlcml0IHRleHQtZGVjb3JhdGlvbiBwcm9w
ZXJ0eQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvWFNTQXVkaXRvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvWFNTQXVkaXRvci5jcHAJKHJl
dmlzaW9uIDEwODY1NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1hTU0F1ZGl0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTMsMTYgKzMxMywxMCBAQCB2b2lkIFhTU0F1ZGl0b3I6
OmZpbHRlckVuZFRva2VuKEhUTUxUb2tlCiBib29sIFhTU0F1ZGl0b3I6OmZpbHRlckNoYXJhY3Rl
clRva2VuKEhUTUxUb2tlbiYgdG9rZW4pCiB7CiAgICAgQVNTRVJUKG1fc2NyaXB0VGFnTmVzdGlu
Z0xldmVsKTsKLSAgICBUZXh0UmVzb3VyY2VEZWNvZGVyKiBkZWNvZGVyID0gbV9wYXJzZXItPmRv
Y3VtZW50KCktPmRlY29kZXIoKTsKLSAgICBpZiAoaXNDb250YWluZWRJblJlcXVlc3QoZnVsbHlE
ZWNvZGVTdHJpbmcobV9jYWNoZWRTbmlwcGV0LCBkZWNvZGVyKSkpIHsKLSAgICAgICAgaW50IHN0
YXJ0ID0gMDsKLSAgICAgICAgaW50IGVuZCA9IHRva2VuLmVuZEluZGV4KCkgLSB0b2tlbi5zdGFy
dEluZGV4KCk7Ci0gICAgICAgIFN0cmluZyBzbmlwcGV0ID0gc25pcHBldEZvckphdmFTY3JpcHQo
c25pcHBldEZvclJhbmdlKHRva2VuLCBzdGFydCwgZW5kKSk7Ci0gICAgICAgIGlmIChpc0NvbnRh
aW5lZEluUmVxdWVzdChmdWxseURlY29kZVN0cmluZyhzbmlwcGV0LCBkZWNvZGVyKSkpIHsKLSAg
ICAgICAgICAgIHRva2VuLmVyYXNlQ2hhcmFjdGVycygpOwotICAgICAgICAgICAgdG9rZW4uYXBw
ZW5kVG9DaGFyYWN0ZXIoJyAnKTsgLy8gVGVjaG5pY2FsbHksIGNoYXJhY3RlciB0b2tlbnMgY2Fu
J3QgYmUgZW1wdHkuCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQorICAgIGlm
IChpc0NvbnRhaW5lZEluUmVxdWVzdChtX2NhY2hlZERlY29kZWRTbmlwcGV0KSAmJiBpc0NvbnRh
aW5lZEluUmVxdWVzdChkZWNvZGVkU25pcHBldEZvckphdmFTY3JpcHQodG9rZW4pKSkgeworICAg
ICAgICB0b2tlbi5lcmFzZUNoYXJhY3RlcnMoKTsKKyAgICAgICAgdG9rZW4uYXBwZW5kVG9DaGFy
YWN0ZXIoJyAnKTsgLy8gVGVjaG5pY2FsbHksIGNoYXJhY3RlciB0b2tlbnMgY2FuJ3QgYmUgZW1w
dHkuCisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9CkBA
IC0zMzIsMTEgKzMyNiwxMiBAQCBib29sIFhTU0F1ZGl0b3I6OmZpbHRlclNjcmlwdFRva2VuKEhU
TUxUCiAgICAgQVNTRVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6U3RhcnRUYWcp
OwogICAgIEFTU0VSVChoYXNOYW1lKHRva2VuLCBzY3JpcHRUYWcpKTsKIAotICAgIGlmIChlcmFz
ZUF0dHJpYnV0ZUlmSW5qZWN0ZWQodG9rZW4sIHNyY0F0dHIsIGJsYW5rVVJMKCkuc3RyaW5nKCks
IFNyY0xpa2VBdHRyaWJ1dGUpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIG1fY2FjaGVk
U25pcHBldCA9IG1fcGFyc2VyLT5zb3VyY2VGb3JUb2tlbih0b2tlbik7CisgICAgbV9jYWNoZWRE
ZWNvZGVkU25pcHBldCA9IHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRNTFNwYWNlcyhkZWNvZGVk
U25pcHBldEZvclRva2VuKHRva2VuKSk7CiAgICAgbV9zaG91bGRBbGxvd0NEQVRBID0gbV9wYXJz
ZXItPnRva2VuaXplcigpLT5zaG91bGRBbGxvd0NEQVRBKCk7CisKKyAgICBpZiAoaXNDb250YWlu
ZWRJblJlcXVlc3QoZGVjb2RlZFNuaXBwZXRGb3JOYW1lKHRva2VuKSkpCisgICAgICAgIHJldHVy
biBlcmFzZUF0dHJpYnV0ZUlmSW5qZWN0ZWQodG9rZW4sIHNyY0F0dHIsIGJsYW5rVVJMKCkuc3Ry
aW5nKCksIFNyY0xpa2VBdHRyaWJ1dGUpOworCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0z
NDYsMTEgKzM0MSwxMSBAQCBib29sIFhTU0F1ZGl0b3I6OmZpbHRlck9iamVjdFRva2VuKEhUTUxU
CiAgICAgQVNTRVJUKGhhc05hbWUodG9rZW4sIG9iamVjdFRhZykpOwogCiAgICAgYm9vbCBkaWRC
bG9ja1NjcmlwdCA9IGZhbHNlOwotCi0gICAgZGlkQmxvY2tTY3JpcHQgfD0gZXJhc2VBdHRyaWJ1
dGVJZkluamVjdGVkKHRva2VuLCBkYXRhQXR0ciwgYmxhbmtVUkwoKS5zdHJpbmcoKSwgU3JjTGlr
ZUF0dHJpYnV0ZSk7Ci0gICAgZGlkQmxvY2tTY3JpcHQgfD0gZXJhc2VBdHRyaWJ1dGVJZkluamVj
dGVkKHRva2VuLCB0eXBlQXR0cik7Ci0gICAgZGlkQmxvY2tTY3JpcHQgfD0gZXJhc2VBdHRyaWJ1
dGVJZkluamVjdGVkKHRva2VuLCBjbGFzc2lkQXR0cik7Ci0KKyAgICBpZiAoaXNDb250YWluZWRJ
blJlcXVlc3QoZGVjb2RlZFNuaXBwZXRGb3JOYW1lKHRva2VuKSkpIHsKKyAgICAgICAgZGlkQmxv
Y2tTY3JpcHQgfD0gZXJhc2VBdHRyaWJ1dGVJZkluamVjdGVkKHRva2VuLCBkYXRhQXR0ciwgYmxh
bmtVUkwoKS5zdHJpbmcoKSwgU3JjTGlrZUF0dHJpYnV0ZSk7CisgICAgICAgIGRpZEJsb2NrU2Ny
aXB0IHw9IGVyYXNlQXR0cmlidXRlSWZJbmplY3RlZCh0b2tlbiwgdHlwZUF0dHIpOworICAgICAg
ICBkaWRCbG9ja1NjcmlwdCB8PSBlcmFzZUF0dHJpYnV0ZUlmSW5qZWN0ZWQodG9rZW4sIGNsYXNz
aWRBdHRyKTsKKyAgICB9CiAgICAgcmV0dXJuIGRpZEJsb2NrU2NyaXB0OwogfQogCkBAIC0zNzgs
MTEgKzM3MywxMSBAQCBib29sIFhTU0F1ZGl0b3I6OmZpbHRlckVtYmVkVG9rZW4oSFRNTFRvCiAg
ICAgQVNTRVJUKGhhc05hbWUodG9rZW4sIGVtYmVkVGFnKSk7CiAKICAgICBib29sIGRpZEJsb2Nr
U2NyaXB0ID0gZmFsc2U7Ci0KLSAgICBkaWRCbG9ja1NjcmlwdCB8PSBlcmFzZUF0dHJpYnV0ZUlm
SW5qZWN0ZWQodG9rZW4sIGNvZGVBdHRyLCBTdHJpbmcoKSwgU3JjTGlrZUF0dHJpYnV0ZSk7Ci0g
ICAgZGlkQmxvY2tTY3JpcHQgfD0gZXJhc2VBdHRyaWJ1dGVJZkluamVjdGVkKHRva2VuLCBzcmNB
dHRyLCBibGFua1VSTCgpLnN0cmluZygpLCBTcmNMaWtlQXR0cmlidXRlKTsKLSAgICBkaWRCbG9j
a1NjcmlwdCB8PSBlcmFzZUF0dHJpYnV0ZUlmSW5qZWN0ZWQodG9rZW4sIHR5cGVBdHRyKTsKLQor
ICAgIGlmIChpc0NvbnRhaW5lZEluUmVxdWVzdChkZWNvZGVkU25pcHBldEZvck5hbWUodG9rZW4p
KSkgeworICAgICAgICBkaWRCbG9ja1NjcmlwdCB8PSBlcmFzZUF0dHJpYnV0ZUlmSW5qZWN0ZWQo
dG9rZW4sIGNvZGVBdHRyLCBTdHJpbmcoKSwgU3JjTGlrZUF0dHJpYnV0ZSk7CisgICAgICAgIGRp
ZEJsb2NrU2NyaXB0IHw9IGVyYXNlQXR0cmlidXRlSWZJbmplY3RlZCh0b2tlbiwgc3JjQXR0ciwg
YmxhbmtVUkwoKS5zdHJpbmcoKSwgU3JjTGlrZUF0dHJpYnV0ZSk7CisgICAgICAgIGRpZEJsb2Nr
U2NyaXB0IHw9IGVyYXNlQXR0cmlidXRlSWZJbmplY3RlZCh0b2tlbiwgdHlwZUF0dHIpOworICAg
IH0KICAgICByZXR1cm4gZGlkQmxvY2tTY3JpcHQ7CiB9CiAKQEAgLTM5MiwxMCArMzg3LDEwIEBA
IGJvb2wgWFNTQXVkaXRvcjo6ZmlsdGVyQXBwbGV0VG9rZW4oSFRNTFQKICAgICBBU1NFUlQoaGFz
TmFtZSh0b2tlbiwgYXBwbGV0VGFnKSk7CiAKICAgICBib29sIGRpZEJsb2NrU2NyaXB0ID0gZmFs
c2U7Ci0KLSAgICBkaWRCbG9ja1NjcmlwdCB8PSBlcmFzZUF0dHJpYnV0ZUlmSW5qZWN0ZWQodG9r
ZW4sIGNvZGVBdHRyLCBTdHJpbmcoKSwgU3JjTGlrZUF0dHJpYnV0ZSk7Ci0gICAgZGlkQmxvY2tT
Y3JpcHQgfD0gZXJhc2VBdHRyaWJ1dGVJZkluamVjdGVkKHRva2VuLCBvYmplY3RBdHRyKTsKLQor
ICAgIGlmIChpc0NvbnRhaW5lZEluUmVxdWVzdChkZWNvZGVkU25pcHBldEZvck5hbWUodG9rZW4p
KSkgeworICAgICAgICBkaWRCbG9ja1NjcmlwdCB8PSBlcmFzZUF0dHJpYnV0ZUlmSW5qZWN0ZWQo
dG9rZW4sIGNvZGVBdHRyLCBTdHJpbmcoKSwgU3JjTGlrZUF0dHJpYnV0ZSk7CisgICAgICAgIGRp
ZEJsb2NrU2NyaXB0IHw9IGVyYXNlQXR0cmlidXRlSWZJbmplY3RlZCh0b2tlbiwgb2JqZWN0QXR0
cik7CisgICAgfQogICAgIHJldHVybiBkaWRCbG9ja1NjcmlwdDsKIH0KIApAQCAtNDA0LDcgKzM5
OSwxMCBAQCBib29sIFhTU0F1ZGl0b3I6OmZpbHRlcklmcmFtZVRva2VuKEhUTUxUCiAgICAgQVNT
RVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6U3RhcnRUYWcpOwogICAgIEFTU0VS
VChoYXNOYW1lKHRva2VuLCBpZnJhbWVUYWcpKTsKIAotICAgIHJldHVybiBlcmFzZUF0dHJpYnV0
ZUlmSW5qZWN0ZWQodG9rZW4sIHNyY0F0dHIsIFN0cmluZygpLCBTcmNMaWtlQXR0cmlidXRlKTsK
KyAgICBpZiAoaXNDb250YWluZWRJblJlcXVlc3QoZGVjb2RlZFNuaXBwZXRGb3JOYW1lKHRva2Vu
KSkpCisgICAgICAgIHJldHVybiBlcmFzZUF0dHJpYnV0ZUlmSW5qZWN0ZWQodG9rZW4sIHNyY0F0
dHIsIFN0cmluZygpLCBTcmNMaWtlQXR0cmlidXRlKTsKKworICAgIHJldHVybiBmYWxzZTsKIH0K
IAogYm9vbCBYU1NBdWRpdG9yOjpmaWx0ZXJNZXRhVG9rZW4oSFRNTFRva2VuJiB0b2tlbikKQEAg
LTQ5NCwxMSArNDkyLDE0IEBAIGJvb2wgWFNTQXVkaXRvcjo6ZXJhc2VBdHRyaWJ1dGVJZkluamVj
dGUKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVN0cmluZyBYU1NBdWRpdG9yOjpzbmlwcGV0Rm9y
UmFuZ2UoY29uc3QgSFRNTFRva2VuJiB0b2tlbiwgaW50IHN0YXJ0LCBpbnQgZW5kKQotewotICAg
IC8vIEZJWE1FOiBUaGVyZSdzIGFuIGV4dHJhIGFsbG9jYXRpb24gaGVyZSB0aGF0IHdlIGNvdWxk
IHNhdmUgYnkKLSAgICAvLyAgICAgICAgcGFzc2luZyB0aGUgcmFuZ2UgdG8gdGhlIHBhcnNlci4K
LSAgICByZXR1cm4gbV9wYXJzZXItPnNvdXJjZUZvclRva2VuKHRva2VuKS5zdWJzdHJpbmcoc3Rh
cnQsIGVuZCAtIHN0YXJ0KTsKK1N0cmluZyBYU1NBdWRpdG9yOjpkZWNvZGVkU25pcHBldEZvclRv
a2VuKGNvbnN0IEhUTUxUb2tlbiYgdG9rZW4pIHsKKyAgICBTdHJpbmcgc25pcHBldCA9IG1fcGFy
c2VyLT5zb3VyY2VGb3JUb2tlbih0b2tlbik7CisgICAgcmV0dXJuIGZ1bGx5RGVjb2RlU3RyaW5n
KHNuaXBwZXQsIG1fcGFyc2VyLT5kb2N1bWVudCgpLT5kZWNvZGVyKCkpOworfQorCitTdHJpbmcg
WFNTQXVkaXRvcjo6ZGVjb2RlZFNuaXBwZXRGb3JOYW1lKGNvbnN0IEhUTUxUb2tlbiYgdG9rZW4p
IHsKKyAgICAvLyBHcmFiIGEgZml4ZWQgbnVtYmVyIG9mIGNoYXJhY3RlcnMgZXF1YWwgdG8gdGhl
IGxlbmd0aCBvZiB0aGUgdG9rZW4ncyBuYW1lIHBsdXMgb25lICh0byBhY2NvdW50IGZvciB0aGUg
IjwiKS4KKyAgICByZXR1cm4gZGVjb2RlZFNuaXBwZXRGb3JUb2tlbih0b2tlbikuc3Vic3RyaW5n
KDAsIHRva2VuLm5hbWUoKS5zaXplKCkgKyAxKTsKIH0KIAogU3RyaW5nIFhTU0F1ZGl0b3I6OmRl
Y29kZWRTbmlwcGV0Rm9yQXR0cmlidXRlKGNvbnN0IEhUTUxUb2tlbiYgdG9rZW4sIGNvbnN0IEhU
TUxUb2tlbjo6QXR0cmlidXRlJiBhdHRyaWJ1dGUsIEF0dHJpYnV0ZUtpbmQgdHJlYXRtZW50KQpA
QCAtNTA5LDcgKzUxMCw3IEBAIFN0cmluZyBYU1NBdWRpdG9yOjpkZWNvZGVkU25pcHBldEZvckF0
dHIKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGdyYWIgb25lIGNoYXJhY3RlciBiZWZvcmUgdGhl
IG5hbWUgYWxzby4KICAgICBpbnQgc3RhcnQgPSBhdHRyaWJ1dGUubV9uYW1lUmFuZ2UubV9zdGFy
dCAtIHRva2VuLnN0YXJ0SW5kZXgoKTsKICAgICBpbnQgZW5kID0gYXR0cmlidXRlLm1fdmFsdWVS
YW5nZS5tX2VuZCAtIHRva2VuLnN0YXJ0SW5kZXgoKTsKLSAgICBTdHJpbmcgZGVjb2RlZFNuaXBw
ZXQgPSBmdWxseURlY29kZVN0cmluZyhzbmlwcGV0Rm9yUmFuZ2UodG9rZW4sIHN0YXJ0LCBlbmQp
LCBtX3BhcnNlci0+ZG9jdW1lbnQoKS0+ZGVjb2RlcigpKTsKKyAgICBTdHJpbmcgZGVjb2RlZFNu
aXBwZXQgPSBmdWxseURlY29kZVN0cmluZyhtX3BhcnNlci0+c291cmNlRm9yVG9rZW4odG9rZW4p
LnN1YnN0cmluZyhzdGFydCwgZW5kIC0gc3RhcnQpLCBtX3BhcnNlci0+ZG9jdW1lbnQoKS0+ZGVj
b2RlcigpKTsKICAgICBkZWNvZGVkU25pcHBldC50cnVuY2F0ZShrTWF4aW11bUZyYWdtZW50TGVu
Z3RoVGFyZ2V0KTsKICAgICBpZiAodHJlYXRtZW50ID09IFNyY0xpa2VBdHRyaWJ1dGUpIHsKICAg
ICAgICAgaW50IHNsYXNoQ291bnQ7CkBAIC01MjgsMzEgKzUyOSw5IEBAIFN0cmluZyBYU1NBdWRp
dG9yOjpkZWNvZGVkU25pcHBldEZvckF0dHIKICAgICByZXR1cm4gZGVjb2RlZFNuaXBwZXQ7CiB9
CiAKLWJvb2wgWFNTQXVkaXRvcjo6aXNDb250YWluZWRJblJlcXVlc3QoY29uc3QgU3RyaW5nJiBk
ZWNvZGVkU25pcHBldCkKLXsKLSAgICBpZiAoZGVjb2RlZFNuaXBwZXQuaXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1fZGVjb2RlZFVSTC5maW5kKGRlY29kZWRTbmlw
cGV0LCAwLCBmYWxzZSkgIT0gbm90Rm91bmQpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlm
IChtX2RlY29kZWRIVFRQQm9keVN1ZmZpeFRyZWUgJiYgIW1fZGVjb2RlZEhUVFBCb2R5U3VmZml4
VHJlZS0+bWlnaHRDb250YWluKGRlY29kZWRTbmlwcGV0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIHJldHVybiBtX2RlY29kZWRIVFRQQm9keS5maW5kKGRlY29kZWRTbmlwcGV0LCAwLCBm
YWxzZSkgIT0gbm90Rm91bmQ7Ci19Ci0KLWJvb2wgWFNTQXVkaXRvcjo6aXNTYW1lT3JpZ2luUmVz
b3VyY2UoY29uc3QgU3RyaW5nJiB1cmwpCi17Ci0gICAgLy8gSWYgdGhlIHJlc291cmNlIGlzIGxv
YWRlZCBmcm9tIHRoZSBzYW1lIFVSTCBhcyB0aGUgZW5jbG9zaW5nIHBhZ2UsIGl0J3MKLSAgICAv
LyBwcm9iYWJseSBub3QgYW4gWFNTIGF0dGFjaywgc28gd2UgcmVkdWNlIGZhbHNlIHBvc2l0aXZl
cyBieSBhbGxvd2luZyB0aGUKLSAgICAvLyByZXF1ZXN0LiBJZiB0aGUgcmVzb3VyY2UgaGFzIGEg
cXVlcnkgc3RyaW5nLCB3ZSdyZSBtb3JlIHN1c3BpY2lvdXMsCi0gICAgLy8gaG93ZXZlciwgYmVj
YXVzZSB0aGF0J3MgcHJldHR5IHJhcmUgYW5kIHRoZSBhdHRhY2tlciBtaWdodCBiZSBhYmxlIHRv
Ci0gICAgLy8gdHJpY2sgYSBzZXJ2ZXItc2lkZSBzY3JpcHQgaW50byBkb2luZyBzb21ldGhpbmcg
ZGFuZ2Vyb3VzIHdpdGggdGhlIHF1ZXJ5Ci0gICAgLy8gc3RyaW5nLgotICAgIEtVUkwgcmVzb3Vy
Y2VVUkwobV9wYXJzZXItPmRvY3VtZW50KCktPnVybCgpLCB1cmwpOwotICAgIHJldHVybiAobV9w
YXJzZXItPmRvY3VtZW50KCktPnVybCgpLmhvc3QoKSA9PSByZXNvdXJjZVVSTC5ob3N0KCkgJiYg
cmVzb3VyY2VVUkwucXVlcnkoKS5pc0VtcHR5KCkpOwotfQotCi1TdHJpbmcgWFNTQXVkaXRvcjo6
c25pcHBldEZvckphdmFTY3JpcHQoY29uc3QgU3RyaW5nJiBzdHJpbmcpCitTdHJpbmcgWFNTQXVk
aXRvcjo6ZGVjb2RlZFNuaXBwZXRGb3JKYXZhU2NyaXB0KGNvbnN0IEhUTUxUb2tlbiYgdG9rZW4p
CiB7CisgICAgU3RyaW5nIHN0cmluZyA9IG1fcGFyc2VyLT5zb3VyY2VGb3JUb2tlbih0b2tlbik7
CiAgICAgc2l6ZV90IHN0YXJ0UG9zaXRpb24gPSAwOwogICAgIHNpemVfdCBlbmRQb3NpdGlvbiA9
IHN0cmluZy5sZW5ndGgoKTsKICAgICBzaXplX3QgZm91bmRQb3NpdGlvbiA9IG5vdEZvdW5kOwpA
QCAtNjA1LDcgKzU4NCwzMCBAQCBTdHJpbmcgWFNTQXVkaXRvcjo6c25pcHBldEZvckphdmFTY3Jp
cHQoCiAgICAgICAgIH0KICAgICB9CiAKLSAgICByZXR1cm4gc3RyaW5nLnN1YnN0cmluZyhzdGFy
dFBvc2l0aW9uLCBlbmRQb3NpdGlvbiAtIHN0YXJ0UG9zaXRpb24pOworICAgIHJldHVybiBmdWxs
eURlY29kZVN0cmluZyhzdHJpbmcuc3Vic3RyaW5nKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9u
IC0gc3RhcnRQb3NpdGlvbiksIG1fcGFyc2VyLT5kb2N1bWVudCgpLT5kZWNvZGVyKCkpOworfQor
Citib29sIFhTU0F1ZGl0b3I6OmlzQ29udGFpbmVkSW5SZXF1ZXN0KGNvbnN0IFN0cmluZyYgZGVj
b2RlZFNuaXBwZXQpCit7CisgICAgaWYgKGRlY29kZWRTbmlwcGV0LmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX2RlY29kZWRVUkwuZmluZChkZWNvZGVkU25pcHBl
dCwgMCwgZmFsc2UpICE9IG5vdEZvdW5kKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAo
bV9kZWNvZGVkSFRUUEJvZHlTdWZmaXhUcmVlICYmICFtX2RlY29kZWRIVFRQQm9keVN1ZmZpeFRy
ZWUtPm1pZ2h0Q29udGFpbihkZWNvZGVkU25pcHBldCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICByZXR1cm4gbV9kZWNvZGVkSFRUUEJvZHkuZmluZChkZWNvZGVkU25pcHBldCwgMCwgZmFs
c2UpICE9IG5vdEZvdW5kOworfQorCitib29sIFhTU0F1ZGl0b3I6OmlzU2FtZU9yaWdpblJlc291
cmNlKGNvbnN0IFN0cmluZyYgdXJsKQoreworICAgIC8vIElmIHRoZSByZXNvdXJjZSBpcyBsb2Fk
ZWQgZnJvbSB0aGUgc2FtZSBVUkwgYXMgdGhlIGVuY2xvc2luZyBwYWdlLCBpdCdzCisgICAgLy8g
cHJvYmFibHkgbm90IGFuIFhTUyBhdHRhY2ssIHNvIHdlIHJlZHVjZSBmYWxzZSBwb3NpdGl2ZXMg
YnkgYWxsb3dpbmcgdGhlCisgICAgLy8gcmVxdWVzdC4gSWYgdGhlIHJlc291cmNlIGhhcyBhIHF1
ZXJ5IHN0cmluZywgd2UncmUgbW9yZSBzdXNwaWNpb3VzLAorICAgIC8vIGhvd2V2ZXIsIGJlY2F1
c2UgdGhhdCdzIHByZXR0eSByYXJlIGFuZCB0aGUgYXR0YWNrZXIgbWlnaHQgYmUgYWJsZSB0bwor
ICAgIC8vIHRyaWNrIGEgc2VydmVyLXNpZGUgc2NyaXB0IGludG8gZG9pbmcgc29tZXRoaW5nIGRh
bmdlcm91cyB3aXRoIHRoZSBxdWVyeQorICAgIC8vIHN0cmluZy4KKyAgICBLVVJMIHJlc291cmNl
VVJMKG1fcGFyc2VyLT5kb2N1bWVudCgpLT51cmwoKSwgdXJsKTsKKyAgICByZXR1cm4gKG1fcGFy
c2VyLT5kb2N1bWVudCgpLT51cmwoKS5ob3N0KCkgPT0gcmVzb3VyY2VVUkwuaG9zdCgpICYmIHJl
c291cmNlVVJMLnF1ZXJ5KCkuaXNFbXB0eSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvWFNTQXVkaXRvci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1hTU0F1ZGl0b3IuaAkocmV2aXNpb24g
MTA4NjU3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvWFNTQXVkaXRvci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03Miw5ICs3MiwxMCBAQCBwcml2YXRlOgogICAgIGJvb2wgZXJhc2VEYW5n
ZXJvdXNBdHRyaWJ1dGVzSWZJbmplY3RlZChIVE1MVG9rZW4mKTsKICAgICBib29sIGVyYXNlQXR0
cmlidXRlSWZJbmplY3RlZChIVE1MVG9rZW4mLCBjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3Qg
U3RyaW5nJiByZXBsYWNlbWVudFZhbHVlID0gU3RyaW5nKCksIEF0dHJpYnV0ZUtpbmQgdHJlYXRt
ZW50ID0gTm9ybWFsQXR0cmlidXRlKTsKIAotICAgIFN0cmluZyBzbmlwcGV0Rm9yUmFuZ2UoY29u
c3QgSFRNTFRva2VuJiwgaW50IHN0YXJ0LCBpbnQgZW5kKTsKLSAgICBTdHJpbmcgc25pcHBldEZv
ckphdmFTY3JpcHQoY29uc3QgU3RyaW5nJik7CisgICAgU3RyaW5nIGRlY29kZWRTbmlwcGV0Rm9y
VG9rZW4oY29uc3QgSFRNTFRva2VuJik7CisgICAgU3RyaW5nIGRlY29kZWRTbmlwcGV0Rm9yTmFt
ZShjb25zdCBIVE1MVG9rZW4mKTsKICAgICBTdHJpbmcgZGVjb2RlZFNuaXBwZXRGb3JBdHRyaWJ1
dGUoY29uc3QgSFRNTFRva2VuJiwgY29uc3QgSFRNTFRva2VuOjpBdHRyaWJ1dGUmLCBBdHRyaWJ1
dGVLaW5kIHRyZWF0bWVudCA9IE5vcm1hbEF0dHJpYnV0ZSk7CisgICAgU3RyaW5nIGRlY29kZWRT
bmlwcGV0Rm9ySmF2YVNjcmlwdChjb25zdCBIVE1MVG9rZW4mKTsKIAogICAgIGJvb2wgaXNDb250
YWluZWRJblJlcXVlc3QoY29uc3QgU3RyaW5nJik7CiAgICAgYm9vbCBpc1NhbWVPcmlnaW5SZXNv
dXJjZShjb25zdCBTdHJpbmcmIHVybCk7CkBAIC04OCw3ICs4OSw3IEBAIHByaXZhdGU6CiAgICAg
T3duUHRyPFN1ZmZpeFRyZWU8QVNDSUlDb2RlYm9vaz4gPiBtX2RlY29kZWRIVFRQQm9keVN1ZmZp
eFRyZWU7CiAKICAgICBTdGF0ZSBtX3N0YXRlOwotICAgIFN0cmluZyBtX2NhY2hlZFNuaXBwZXQ7
CisgICAgU3RyaW5nIG1fY2FjaGVkRGVjb2RlZFNuaXBwZXQ7CiAgICAgYm9vbCBtX3Nob3VsZEFs
bG93Q0RBVEE7CiAgICAgdW5zaWduZWQgbV9zY3JpcHRUYWdOZXN0aW5nTGV2ZWw7CiAgICAgYm9v
bCBtX25vdGlmaWVkQ2xpZW50OwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTA4NjkwKQorKysgTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTItMDIt
MjMgIFRvbSBTZXBleiAgPHRzZXBlekBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgWFNTIEF1ZGl0
b3IgdGFyZ2V0aW5nIGxlZ2l0aW1hdGUgZnJhbWVzIGFzIGZhbHNlIHBvc2l0aXZlcy4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc5Mzk3CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBodHRwL3Rlc3RzL3Nl
Y3VyaXR5L3hzc0F1ZGl0b3IvcmVzb3VyY2VzL3NjcmlwdC10YWctc2FmZTQtZnJhbWUuaHRtbDog
QWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10
YWctc2FmZTQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3Vy
aXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1zYWZlNC5odG1sOiBBZGRlZC4KKwogMjAxMi0wMi0y
MyAgS29qaSBJc2hpaSAgPGtvamlpc2hpQGdtYWlsLmNvbT4KIAogICAgICAgICBDU1MyOnRleHQt
ZGVjb3JhdGlvbjogPHJ0PiBlbGVtZW50IHNob3VsZCBub3QgaW5oZXJpdCB0ZXh0LWRlY29yYXRp
b24gcHJvcGVydHkKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVk
aXRvci9zY3JpcHQtdGFnLXNhZmU0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1zYWZlNC1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5
L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1zYWZlNC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEgQEAKKyBUZXN0IHBhc3NlcyBpZiBYU1NBdWRpdG9yIGlzIG5vdCB0cmlnZ2VyZWQu
CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0
LXRhZy1zYWZlNC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2Vj
dXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLXNhZmU0Lmh0bWwJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1zYWZl
NC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE2IEBACis8IURPQ1RZUEUgaHRtbD4KKzxo
dG1sPgorPGhlYWQ+Cis8c2NyaXB0PgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikg
eworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci5zZXRYU1NBdWRpdG9yRW5hYmxlZCh0cnVlKTsKK30KKzwvc2NyaXB0PgorPC9o
ZWFkPgorPGJvZHk+Cis8aWZyYW1lIHNyYz0iaHR0cDovL2xvY2FsaG9zdDo4MDAwL3NlY3VyaXR5
L3hzc0F1ZGl0b3IvcmVzb3VyY2VzL3NjcmlwdC10YWctc2FmZTQtZnJhbWUuaHRtbD9xPTxpbWcl
MjBzcmM9JTIyaHR0cDovLzEyNy4wLjAuMTo4MDAwL2ZvbyUyMi8+Ij4KKzwvaWZyYW1lPgorVGVz
dCBwYXNzZXMgaWYgWFNTQXVkaXRvciBpcyBub3QgdHJpZ2dlcmVkLgorPC9ib2R5PgorPC9odG1s
PgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3Jlc291
cmNlcy9zY3JpcHQtdGFnLXNhZmU0LWZyYW1lLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3Jlc291cmNlcy9zY3JpcHQtdGFnLXNh
ZmU0LWZyYW1lLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3Nl
Y3VyaXR5L3hzc0F1ZGl0b3IvcmVzb3VyY2VzL3NjcmlwdC10YWctc2FmZTQtZnJhbWUuaHRtbAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw5IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhl
YWQ+Cis8c2NyaXB0IHNyYz0iaHR0cDovLzEyNy4wLjAuMTo4MDAwL2ZvbyI+PC9zY3JpcHQ+Cis8
aW1nIHNyYz0iaHR0cDovLzEyNy4wLjAuMTo4MDAwL2ZvbyIvPgorPC9oZWFkPgorPGJvZHk+Cis8
L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128837</attachid>
            <date>2012-02-24 18:19:43 -0800</date>
            <delta_ts>2012-02-24 18:39:27 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-79397-20120224181942.patch</filename>
            <type>text/plain</type>
            <size>13973</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwODg3NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4IEBACisyMDEyLTAyLTI0ICBUb20gU2Vw
ZXogIDx0c2VwZXpAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFhTUyBBdWRpdG9yIHRhcmdldGlu
ZyBsZWdpdGltYXRlIGZyYW1lcyBhcyBmYWxzZSBwb3NpdGl2ZXMuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03OTM5NworCisgICAgICAgIFJldmlld2Vk
IGJ5IEFkYW0gQmFydGguCisKKyAgICAgICAgVGVzdDogaHR0cC90ZXN0cy9zZWN1cml0eS94c3NB
dWRpdG9yL3NjcmlwdC10YWctc2FmZTQuaHRtbAorCisgICAgICAgICogaHRtbC9wYXJzZXIvWFNT
QXVkaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYU1NBdWRpdG9yOjpmaWx0ZXJDaGFyYWN0
ZXJUb2tlbik6CisgICAgICAgIChXZWJDb3JlOjpYU1NBdWRpdG9yOjpmaWx0ZXJTY3JpcHRUb2tl
bik6CisgICAgICAgIChXZWJDb3JlOjpYU1NBdWRpdG9yOjpmaWx0ZXJPYmplY3RUb2tlbik6Cisg
ICAgICAgIChXZWJDb3JlOjpYU1NBdWRpdG9yOjpmaWx0ZXJFbWJlZFRva2VuKToKKyAgICAgICAg
KFdlYkNvcmU6OlhTU0F1ZGl0b3I6OmZpbHRlckFwcGxldFRva2VuKToKKyAgICAgICAgKFdlYkNv
cmU6OlhTU0F1ZGl0b3I6OmZpbHRlcklmcmFtZVRva2VuKToKKyAgICAgICAgKFdlYkNvcmU6OlhT
U0F1ZGl0b3I6OmRlY29kZWRTbmlwcGV0Rm9yVG9rZW4pOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpYU1NBdWRpdG9yOjpkZWNvZGVkU25pcHBldEZvck5hbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6WFNTQXVkaXRvcjo6ZGVjb2RlZFNuaXBwZXRGb3JBdHRyaWJ1dGUpOgor
ICAgICAgICAoV2ViQ29yZTo6WFNTQXVkaXRvcjo6ZGVjb2RlZFNuaXBwZXRGb3JKYXZhc2NyaXB0
KToKKyAgICAgICAgKFdlYkNvcmU6OlhTU0F1ZGl0b3I6OmlzQ29udGFpbmVkSW5SZXF1ZXN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlhTU0F1ZGl0b3I6OmlzU2FtZU9yaWdpblJlc291cmNlKToKKyAg
ICAgICAgKiBodG1sL3BhcnNlci9YU1NBdWRpdG9yLmg6CisKIDIwMTItMDItMjQgIFRvbnkgQ2hh
bmcgIDx0b255QGNocm9taXVtLm9yZz4KIAogICAgICAgICBNb3JlIHJlZmFjdG9yaW5nIGluIFJl
bmRlckZsZXhpYmxlQm94CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9YU1NBdWRp
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9YU1NBdWRp
dG9yLmNwcAkocmV2aXNpb24gMTA4ODc2KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIv
WFNTQXVkaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxMywxNiArMzEzLDEwIEBAIHZvaWQg
WFNTQXVkaXRvcjo6ZmlsdGVyRW5kVG9rZW4oSFRNTFRva2UKIGJvb2wgWFNTQXVkaXRvcjo6Zmls
dGVyQ2hhcmFjdGVyVG9rZW4oSFRNTFRva2VuJiB0b2tlbikKIHsKICAgICBBU1NFUlQobV9zY3Jp
cHRUYWdOZXN0aW5nTGV2ZWwpOwotICAgIFRleHRSZXNvdXJjZURlY29kZXIqIGRlY29kZXIgPSBt
X3BhcnNlci0+ZG9jdW1lbnQoKS0+ZGVjb2RlcigpOwotICAgIGlmIChpc0NvbnRhaW5lZEluUmVx
dWVzdChmdWxseURlY29kZVN0cmluZyhtX2NhY2hlZFNuaXBwZXQsIGRlY29kZXIpKSkgewotICAg
ICAgICBpbnQgc3RhcnQgPSAwOwotICAgICAgICBpbnQgZW5kID0gdG9rZW4uZW5kSW5kZXgoKSAt
IHRva2VuLnN0YXJ0SW5kZXgoKTsKLSAgICAgICAgU3RyaW5nIHNuaXBwZXQgPSBzbmlwcGV0Rm9y
SmF2YVNjcmlwdChzbmlwcGV0Rm9yUmFuZ2UodG9rZW4sIHN0YXJ0LCBlbmQpKTsKLSAgICAgICAg
aWYgKGlzQ29udGFpbmVkSW5SZXF1ZXN0KGZ1bGx5RGVjb2RlU3RyaW5nKHNuaXBwZXQsIGRlY29k
ZXIpKSkgewotICAgICAgICAgICAgdG9rZW4uZXJhc2VDaGFyYWN0ZXJzKCk7Ci0gICAgICAgICAg
ICB0b2tlbi5hcHBlbmRUb0NoYXJhY3RlcignICcpOyAvLyBUZWNobmljYWxseSwgY2hhcmFjdGVy
IHRva2VucyBjYW4ndCBiZSBlbXB0eS4KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICB9CisgICAgaWYgKGlzQ29udGFpbmVkSW5SZXF1ZXN0KG1fY2FjaGVkRGVjb2RlZFNuaXBwZXQp
ICYmIGlzQ29udGFpbmVkSW5SZXF1ZXN0KGRlY29kZWRTbmlwcGV0Rm9ySmF2YVNjcmlwdCh0b2tl
bikpKSB7CisgICAgICAgIHRva2VuLmVyYXNlQ2hhcmFjdGVycygpOworICAgICAgICB0b2tlbi5h
cHBlbmRUb0NoYXJhY3RlcignICcpOyAvLyBUZWNobmljYWxseSwgY2hhcmFjdGVyIHRva2VucyBj
YW4ndCBiZSBlbXB0eS4KKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBm
YWxzZTsKIH0KQEAgLTMzMiwxMSArMzI2LDEyIEBAIGJvb2wgWFNTQXVkaXRvcjo6ZmlsdGVyU2Ny
aXB0VG9rZW4oSFRNTFQKICAgICBBU1NFUlQodG9rZW4udHlwZSgpID09IEhUTUxUb2tlblR5cGVz
OjpTdGFydFRhZyk7CiAgICAgQVNTRVJUKGhhc05hbWUodG9rZW4sIHNjcmlwdFRhZykpOwogCi0g
ICAgaWYgKGVyYXNlQXR0cmlidXRlSWZJbmplY3RlZCh0b2tlbiwgc3JjQXR0ciwgYmxhbmtVUkwo
KS5zdHJpbmcoKSwgU3JjTGlrZUF0dHJpYnV0ZSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0g
ICAgbV9jYWNoZWRTbmlwcGV0ID0gbV9wYXJzZXItPnNvdXJjZUZvclRva2VuKHRva2VuKTsKKyAg
ICBtX2NhY2hlZERlY29kZWRTbmlwcGV0ID0gc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3Bh
Y2VzKGRlY29kZWRTbmlwcGV0Rm9yVG9rZW4odG9rZW4pKTsKICAgICBtX3Nob3VsZEFsbG93Q0RB
VEEgPSBtX3BhcnNlci0+dG9rZW5pemVyKCktPnNob3VsZEFsbG93Q0RBVEEoKTsKKworICAgIGlm
IChpc0NvbnRhaW5lZEluUmVxdWVzdChkZWNvZGVkU25pcHBldEZvck5hbWUodG9rZW4pKSkKKyAg
ICAgICAgcmV0dXJuIGVyYXNlQXR0cmlidXRlSWZJbmplY3RlZCh0b2tlbiwgc3JjQXR0ciwgYmxh
bmtVUkwoKS5zdHJpbmcoKSwgU3JjTGlrZUF0dHJpYnV0ZSk7CisKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKQEAgLTM0NiwxMSArMzQxLDExIEBAIGJvb2wgWFNTQXVkaXRvcjo6ZmlsdGVyT2JqZWN0
VG9rZW4oSFRNTFQKICAgICBBU1NFUlQoaGFzTmFtZSh0b2tlbiwgb2JqZWN0VGFnKSk7CiAKICAg
ICBib29sIGRpZEJsb2NrU2NyaXB0ID0gZmFsc2U7Ci0KLSAgICBkaWRCbG9ja1NjcmlwdCB8PSBl
cmFzZUF0dHJpYnV0ZUlmSW5qZWN0ZWQodG9rZW4sIGRhdGFBdHRyLCBibGFua1VSTCgpLnN0cmlu
ZygpLCBTcmNMaWtlQXR0cmlidXRlKTsKLSAgICBkaWRCbG9ja1NjcmlwdCB8PSBlcmFzZUF0dHJp
YnV0ZUlmSW5qZWN0ZWQodG9rZW4sIHR5cGVBdHRyKTsKLSAgICBkaWRCbG9ja1NjcmlwdCB8PSBl
cmFzZUF0dHJpYnV0ZUlmSW5qZWN0ZWQodG9rZW4sIGNsYXNzaWRBdHRyKTsKLQorICAgIGlmIChp
c0NvbnRhaW5lZEluUmVxdWVzdChkZWNvZGVkU25pcHBldEZvck5hbWUodG9rZW4pKSkgeworICAg
ICAgICBkaWRCbG9ja1NjcmlwdCB8PSBlcmFzZUF0dHJpYnV0ZUlmSW5qZWN0ZWQodG9rZW4sIGRh
dGFBdHRyLCBibGFua1VSTCgpLnN0cmluZygpLCBTcmNMaWtlQXR0cmlidXRlKTsKKyAgICAgICAg
ZGlkQmxvY2tTY3JpcHQgfD0gZXJhc2VBdHRyaWJ1dGVJZkluamVjdGVkKHRva2VuLCB0eXBlQXR0
cik7CisgICAgICAgIGRpZEJsb2NrU2NyaXB0IHw9IGVyYXNlQXR0cmlidXRlSWZJbmplY3RlZCh0
b2tlbiwgY2xhc3NpZEF0dHIpOworICAgIH0KICAgICByZXR1cm4gZGlkQmxvY2tTY3JpcHQ7CiB9
CiAKQEAgLTM3OCwxMSArMzczLDExIEBAIGJvb2wgWFNTQXVkaXRvcjo6ZmlsdGVyRW1iZWRUb2tl
bihIVE1MVG8KICAgICBBU1NFUlQoaGFzTmFtZSh0b2tlbiwgZW1iZWRUYWcpKTsKIAogICAgIGJv
b2wgZGlkQmxvY2tTY3JpcHQgPSBmYWxzZTsKLQotICAgIGRpZEJsb2NrU2NyaXB0IHw9IGVyYXNl
QXR0cmlidXRlSWZJbmplY3RlZCh0b2tlbiwgY29kZUF0dHIsIFN0cmluZygpLCBTcmNMaWtlQXR0
cmlidXRlKTsKLSAgICBkaWRCbG9ja1NjcmlwdCB8PSBlcmFzZUF0dHJpYnV0ZUlmSW5qZWN0ZWQo
dG9rZW4sIHNyY0F0dHIsIGJsYW5rVVJMKCkuc3RyaW5nKCksIFNyY0xpa2VBdHRyaWJ1dGUpOwot
ICAgIGRpZEJsb2NrU2NyaXB0IHw9IGVyYXNlQXR0cmlidXRlSWZJbmplY3RlZCh0b2tlbiwgdHlw
ZUF0dHIpOwotCisgICAgaWYgKGlzQ29udGFpbmVkSW5SZXF1ZXN0KGRlY29kZWRTbmlwcGV0Rm9y
TmFtZSh0b2tlbikpKSB7CisgICAgICAgIGRpZEJsb2NrU2NyaXB0IHw9IGVyYXNlQXR0cmlidXRl
SWZJbmplY3RlZCh0b2tlbiwgY29kZUF0dHIsIFN0cmluZygpLCBTcmNMaWtlQXR0cmlidXRlKTsK
KyAgICAgICAgZGlkQmxvY2tTY3JpcHQgfD0gZXJhc2VBdHRyaWJ1dGVJZkluamVjdGVkKHRva2Vu
LCBzcmNBdHRyLCBibGFua1VSTCgpLnN0cmluZygpLCBTcmNMaWtlQXR0cmlidXRlKTsKKyAgICAg
ICAgZGlkQmxvY2tTY3JpcHQgfD0gZXJhc2VBdHRyaWJ1dGVJZkluamVjdGVkKHRva2VuLCB0eXBl
QXR0cik7CisgICAgfQogICAgIHJldHVybiBkaWRCbG9ja1NjcmlwdDsKIH0KIApAQCAtMzkyLDEw
ICszODcsMTAgQEAgYm9vbCBYU1NBdWRpdG9yOjpmaWx0ZXJBcHBsZXRUb2tlbihIVE1MVAogICAg
IEFTU0VSVChoYXNOYW1lKHRva2VuLCBhcHBsZXRUYWcpKTsKIAogICAgIGJvb2wgZGlkQmxvY2tT
Y3JpcHQgPSBmYWxzZTsKLQotICAgIGRpZEJsb2NrU2NyaXB0IHw9IGVyYXNlQXR0cmlidXRlSWZJ
bmplY3RlZCh0b2tlbiwgY29kZUF0dHIsIFN0cmluZygpLCBTcmNMaWtlQXR0cmlidXRlKTsKLSAg
ICBkaWRCbG9ja1NjcmlwdCB8PSBlcmFzZUF0dHJpYnV0ZUlmSW5qZWN0ZWQodG9rZW4sIG9iamVj
dEF0dHIpOwotCisgICAgaWYgKGlzQ29udGFpbmVkSW5SZXF1ZXN0KGRlY29kZWRTbmlwcGV0Rm9y
TmFtZSh0b2tlbikpKSB7CisgICAgICAgIGRpZEJsb2NrU2NyaXB0IHw9IGVyYXNlQXR0cmlidXRl
SWZJbmplY3RlZCh0b2tlbiwgY29kZUF0dHIsIFN0cmluZygpLCBTcmNMaWtlQXR0cmlidXRlKTsK
KyAgICAgICAgZGlkQmxvY2tTY3JpcHQgfD0gZXJhc2VBdHRyaWJ1dGVJZkluamVjdGVkKHRva2Vu
LCBvYmplY3RBdHRyKTsKKyAgICB9CiAgICAgcmV0dXJuIGRpZEJsb2NrU2NyaXB0OwogfQogCkBA
IC00MDQsNyArMzk5LDEwIEBAIGJvb2wgWFNTQXVkaXRvcjo6ZmlsdGVySWZyYW1lVG9rZW4oSFRN
TFQKICAgICBBU1NFUlQodG9rZW4udHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpTdGFydFRhZyk7
CiAgICAgQVNTRVJUKGhhc05hbWUodG9rZW4sIGlmcmFtZVRhZykpOwogCi0gICAgcmV0dXJuIGVy
YXNlQXR0cmlidXRlSWZJbmplY3RlZCh0b2tlbiwgc3JjQXR0ciwgU3RyaW5nKCksIFNyY0xpa2VB
dHRyaWJ1dGUpOworICAgIGlmIChpc0NvbnRhaW5lZEluUmVxdWVzdChkZWNvZGVkU25pcHBldEZv
ck5hbWUodG9rZW4pKSkKKyAgICAgICAgcmV0dXJuIGVyYXNlQXR0cmlidXRlSWZJbmplY3RlZCh0
b2tlbiwgc3JjQXR0ciwgU3RyaW5nKCksIFNyY0xpa2VBdHRyaWJ1dGUpOworCisgICAgcmV0dXJu
IGZhbHNlOwogfQogCiBib29sIFhTU0F1ZGl0b3I6OmZpbHRlck1ldGFUb2tlbihIVE1MVG9rZW4m
IHRva2VuKQpAQCAtNDk0LDExICs0OTIsMTcgQEAgYm9vbCBYU1NBdWRpdG9yOjplcmFzZUF0dHJp
YnV0ZUlmSW5qZWN0ZQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotU3RyaW5nIFhTU0F1ZGl0b3I6
OnNuaXBwZXRGb3JSYW5nZShjb25zdCBIVE1MVG9rZW4mIHRva2VuLCBpbnQgc3RhcnQsIGludCBl
bmQpCitTdHJpbmcgWFNTQXVkaXRvcjo6ZGVjb2RlZFNuaXBwZXRGb3JUb2tlbihjb25zdCBIVE1M
VG9rZW4mIHRva2VuKQogewotICAgIC8vIEZJWE1FOiBUaGVyZSdzIGFuIGV4dHJhIGFsbG9jYXRp
b24gaGVyZSB0aGF0IHdlIGNvdWxkIHNhdmUgYnkKLSAgICAvLyAgICAgICAgcGFzc2luZyB0aGUg
cmFuZ2UgdG8gdGhlIHBhcnNlci4KLSAgICByZXR1cm4gbV9wYXJzZXItPnNvdXJjZUZvclRva2Vu
KHRva2VuKS5zdWJzdHJpbmcoc3RhcnQsIGVuZCAtIHN0YXJ0KTsKKyAgICBTdHJpbmcgc25pcHBl
dCA9IG1fcGFyc2VyLT5zb3VyY2VGb3JUb2tlbih0b2tlbik7CisgICAgcmV0dXJuIGZ1bGx5RGVj
b2RlU3RyaW5nKHNuaXBwZXQsIG1fcGFyc2VyLT5kb2N1bWVudCgpLT5kZWNvZGVyKCkpOworfQor
CitTdHJpbmcgWFNTQXVkaXRvcjo6ZGVjb2RlZFNuaXBwZXRGb3JOYW1lKGNvbnN0IEhUTUxUb2tl
biYgdG9rZW4pCit7CisgICAgLy8gR3JhYiBhIGZpeGVkIG51bWJlciBvZiBjaGFyYWN0ZXJzIGVx
dWFsIHRvIHRoZSBsZW5ndGggb2YgdGhlIHRva2VuJ3MKKyAgICAvLyBuYW1lIHBsdXMgb25lICh0
byBhY2NvdW50IGZvciB0aGUgIjwiKS4KKyAgICByZXR1cm4gZGVjb2RlZFNuaXBwZXRGb3JUb2tl
bih0b2tlbikuc3Vic3RyaW5nKDAsIHRva2VuLm5hbWUoKS5zaXplKCkgKyAxKTsKIH0KIAogU3Ry
aW5nIFhTU0F1ZGl0b3I6OmRlY29kZWRTbmlwcGV0Rm9yQXR0cmlidXRlKGNvbnN0IEhUTUxUb2tl
biYgdG9rZW4sIGNvbnN0IEhUTUxUb2tlbjo6QXR0cmlidXRlJiBhdHRyaWJ1dGUsIEF0dHJpYnV0
ZUtpbmQgdHJlYXRtZW50KQpAQCAtNTA5LDcgKzUxMyw3IEBAIFN0cmluZyBYU1NBdWRpdG9yOjpk
ZWNvZGVkU25pcHBldEZvckF0dHIKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGdyYWIgb25lIGNo
YXJhY3RlciBiZWZvcmUgdGhlIG5hbWUgYWxzby4KICAgICBpbnQgc3RhcnQgPSBhdHRyaWJ1dGUu
bV9uYW1lUmFuZ2UubV9zdGFydCAtIHRva2VuLnN0YXJ0SW5kZXgoKTsKICAgICBpbnQgZW5kID0g
YXR0cmlidXRlLm1fdmFsdWVSYW5nZS5tX2VuZCAtIHRva2VuLnN0YXJ0SW5kZXgoKTsKLSAgICBT
dHJpbmcgZGVjb2RlZFNuaXBwZXQgPSBmdWxseURlY29kZVN0cmluZyhzbmlwcGV0Rm9yUmFuZ2Uo
dG9rZW4sIHN0YXJ0LCBlbmQpLCBtX3BhcnNlci0+ZG9jdW1lbnQoKS0+ZGVjb2RlcigpKTsKKyAg
ICBTdHJpbmcgZGVjb2RlZFNuaXBwZXQgPSBmdWxseURlY29kZVN0cmluZyhtX3BhcnNlci0+c291
cmNlRm9yVG9rZW4odG9rZW4pLnN1YnN0cmluZyhzdGFydCwgZW5kIC0gc3RhcnQpLCBtX3BhcnNl
ci0+ZG9jdW1lbnQoKS0+ZGVjb2RlcigpKTsKICAgICBkZWNvZGVkU25pcHBldC50cnVuY2F0ZShr
TWF4aW11bUZyYWdtZW50TGVuZ3RoVGFyZ2V0KTsKICAgICBpZiAodHJlYXRtZW50ID09IFNyY0xp
a2VBdHRyaWJ1dGUpIHsKICAgICAgICAgaW50IHNsYXNoQ291bnQ7CkBAIC01MjgsMzEgKzUzMiw5
IEBAIFN0cmluZyBYU1NBdWRpdG9yOjpkZWNvZGVkU25pcHBldEZvckF0dHIKICAgICByZXR1cm4g
ZGVjb2RlZFNuaXBwZXQ7CiB9CiAKLWJvb2wgWFNTQXVkaXRvcjo6aXNDb250YWluZWRJblJlcXVl
c3QoY29uc3QgU3RyaW5nJiBkZWNvZGVkU25pcHBldCkKLXsKLSAgICBpZiAoZGVjb2RlZFNuaXBw
ZXQuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1fZGVjb2RlZFVS
TC5maW5kKGRlY29kZWRTbmlwcGV0LCAwLCBmYWxzZSkgIT0gbm90Rm91bmQpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIGlmIChtX2RlY29kZWRIVFRQQm9keVN1ZmZpeFRyZWUgJiYgIW1fZGVj
b2RlZEhUVFBCb2R5U3VmZml4VHJlZS0+bWlnaHRDb250YWluKGRlY29kZWRTbmlwcGV0KSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBtX2RlY29kZWRIVFRQQm9keS5maW5kKGRl
Y29kZWRTbmlwcGV0LCAwLCBmYWxzZSkgIT0gbm90Rm91bmQ7Ci19Ci0KLWJvb2wgWFNTQXVkaXRv
cjo6aXNTYW1lT3JpZ2luUmVzb3VyY2UoY29uc3QgU3RyaW5nJiB1cmwpCi17Ci0gICAgLy8gSWYg
dGhlIHJlc291cmNlIGlzIGxvYWRlZCBmcm9tIHRoZSBzYW1lIFVSTCBhcyB0aGUgZW5jbG9zaW5n
IHBhZ2UsIGl0J3MKLSAgICAvLyBwcm9iYWJseSBub3QgYW4gWFNTIGF0dGFjaywgc28gd2UgcmVk
dWNlIGZhbHNlIHBvc2l0aXZlcyBieSBhbGxvd2luZyB0aGUKLSAgICAvLyByZXF1ZXN0LiBJZiB0
aGUgcmVzb3VyY2UgaGFzIGEgcXVlcnkgc3RyaW5nLCB3ZSdyZSBtb3JlIHN1c3BpY2lvdXMsCi0g
ICAgLy8gaG93ZXZlciwgYmVjYXVzZSB0aGF0J3MgcHJldHR5IHJhcmUgYW5kIHRoZSBhdHRhY2tl
ciBtaWdodCBiZSBhYmxlIHRvCi0gICAgLy8gdHJpY2sgYSBzZXJ2ZXItc2lkZSBzY3JpcHQgaW50
byBkb2luZyBzb21ldGhpbmcgZGFuZ2Vyb3VzIHdpdGggdGhlIHF1ZXJ5Ci0gICAgLy8gc3RyaW5n
LgotICAgIEtVUkwgcmVzb3VyY2VVUkwobV9wYXJzZXItPmRvY3VtZW50KCktPnVybCgpLCB1cmwp
OwotICAgIHJldHVybiAobV9wYXJzZXItPmRvY3VtZW50KCktPnVybCgpLmhvc3QoKSA9PSByZXNv
dXJjZVVSTC5ob3N0KCkgJiYgcmVzb3VyY2VVUkwucXVlcnkoKS5pc0VtcHR5KCkpOwotfQotCi1T
dHJpbmcgWFNTQXVkaXRvcjo6c25pcHBldEZvckphdmFTY3JpcHQoY29uc3QgU3RyaW5nJiBzdHJp
bmcpCitTdHJpbmcgWFNTQXVkaXRvcjo6ZGVjb2RlZFNuaXBwZXRGb3JKYXZhU2NyaXB0KGNvbnN0
IEhUTUxUb2tlbiYgdG9rZW4pCiB7CisgICAgU3RyaW5nIHN0cmluZyA9IG1fcGFyc2VyLT5zb3Vy
Y2VGb3JUb2tlbih0b2tlbik7CiAgICAgc2l6ZV90IHN0YXJ0UG9zaXRpb24gPSAwOwogICAgIHNp
emVfdCBlbmRQb3NpdGlvbiA9IHN0cmluZy5sZW5ndGgoKTsKICAgICBzaXplX3QgZm91bmRQb3Np
dGlvbiA9IG5vdEZvdW5kOwpAQCAtNjA1LDcgKzU4NywzMCBAQCBTdHJpbmcgWFNTQXVkaXRvcjo6
c25pcHBldEZvckphdmFTY3JpcHQoCiAgICAgICAgIH0KICAgICB9CiAKLSAgICByZXR1cm4gc3Ry
aW5nLnN1YnN0cmluZyhzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbiAtIHN0YXJ0UG9zaXRpb24p
OworICAgIHJldHVybiBmdWxseURlY29kZVN0cmluZyhzdHJpbmcuc3Vic3RyaW5nKHN0YXJ0UG9z
aXRpb24sIGVuZFBvc2l0aW9uIC0gc3RhcnRQb3NpdGlvbiksIG1fcGFyc2VyLT5kb2N1bWVudCgp
LT5kZWNvZGVyKCkpOworfQorCitib29sIFhTU0F1ZGl0b3I6OmlzQ29udGFpbmVkSW5SZXF1ZXN0
KGNvbnN0IFN0cmluZyYgZGVjb2RlZFNuaXBwZXQpCit7CisgICAgaWYgKGRlY29kZWRTbmlwcGV0
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX2RlY29kZWRVUkwu
ZmluZChkZWNvZGVkU25pcHBldCwgMCwgZmFsc2UpICE9IG5vdEZvdW5kKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICBpZiAobV9kZWNvZGVkSFRUUEJvZHlTdWZmaXhUcmVlICYmICFtX2RlY29k
ZWRIVFRQQm9keVN1ZmZpeFRyZWUtPm1pZ2h0Q29udGFpbihkZWNvZGVkU25pcHBldCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gbV9kZWNvZGVkSFRUUEJvZHkuZmluZChkZWNv
ZGVkU25pcHBldCwgMCwgZmFsc2UpICE9IG5vdEZvdW5kOworfQorCitib29sIFhTU0F1ZGl0b3I6
OmlzU2FtZU9yaWdpblJlc291cmNlKGNvbnN0IFN0cmluZyYgdXJsKQoreworICAgIC8vIElmIHRo
ZSByZXNvdXJjZSBpcyBsb2FkZWQgZnJvbSB0aGUgc2FtZSBVUkwgYXMgdGhlIGVuY2xvc2luZyBw
YWdlLCBpdCdzCisgICAgLy8gcHJvYmFibHkgbm90IGFuIFhTUyBhdHRhY2ssIHNvIHdlIHJlZHVj
ZSBmYWxzZSBwb3NpdGl2ZXMgYnkgYWxsb3dpbmcgdGhlCisgICAgLy8gcmVxdWVzdC4gSWYgdGhl
IHJlc291cmNlIGhhcyBhIHF1ZXJ5IHN0cmluZywgd2UncmUgbW9yZSBzdXNwaWNpb3VzLAorICAg
IC8vIGhvd2V2ZXIsIGJlY2F1c2UgdGhhdCdzIHByZXR0eSByYXJlIGFuZCB0aGUgYXR0YWNrZXIg
bWlnaHQgYmUgYWJsZSB0bworICAgIC8vIHRyaWNrIGEgc2VydmVyLXNpZGUgc2NyaXB0IGludG8g
ZG9pbmcgc29tZXRoaW5nIGRhbmdlcm91cyB3aXRoIHRoZSBxdWVyeQorICAgIC8vIHN0cmluZy4K
KyAgICBLVVJMIHJlc291cmNlVVJMKG1fcGFyc2VyLT5kb2N1bWVudCgpLT51cmwoKSwgdXJsKTsK
KyAgICByZXR1cm4gKG1fcGFyc2VyLT5kb2N1bWVudCgpLT51cmwoKS5ob3N0KCkgPT0gcmVzb3Vy
Y2VVUkwuaG9zdCgpICYmIHJlc291cmNlVVJMLnF1ZXJ5KCkuaXNFbXB0eSgpKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvWFNT
QXVkaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1hTU0F1
ZGl0b3IuaAkocmV2aXNpb24gMTA4ODc2KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIv
WFNTQXVkaXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC03Miw5ICs3MiwxMCBAQCBwcml2YXRlOgog
ICAgIGJvb2wgZXJhc2VEYW5nZXJvdXNBdHRyaWJ1dGVzSWZJbmplY3RlZChIVE1MVG9rZW4mKTsK
ICAgICBib29sIGVyYXNlQXR0cmlidXRlSWZJbmplY3RlZChIVE1MVG9rZW4mLCBjb25zdCBRdWFs
aWZpZWROYW1lJiwgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFZhbHVlID0gU3RyaW5nKCksIEF0
dHJpYnV0ZUtpbmQgdHJlYXRtZW50ID0gTm9ybWFsQXR0cmlidXRlKTsKIAotICAgIFN0cmluZyBz
bmlwcGV0Rm9yUmFuZ2UoY29uc3QgSFRNTFRva2VuJiwgaW50IHN0YXJ0LCBpbnQgZW5kKTsKLSAg
ICBTdHJpbmcgc25pcHBldEZvckphdmFTY3JpcHQoY29uc3QgU3RyaW5nJik7CisgICAgU3RyaW5n
IGRlY29kZWRTbmlwcGV0Rm9yVG9rZW4oY29uc3QgSFRNTFRva2VuJik7CisgICAgU3RyaW5nIGRl
Y29kZWRTbmlwcGV0Rm9yTmFtZShjb25zdCBIVE1MVG9rZW4mKTsKICAgICBTdHJpbmcgZGVjb2Rl
ZFNuaXBwZXRGb3JBdHRyaWJ1dGUoY29uc3QgSFRNTFRva2VuJiwgY29uc3QgSFRNTFRva2VuOjpB
dHRyaWJ1dGUmLCBBdHRyaWJ1dGVLaW5kIHRyZWF0bWVudCA9IE5vcm1hbEF0dHJpYnV0ZSk7Cisg
ICAgU3RyaW5nIGRlY29kZWRTbmlwcGV0Rm9ySmF2YVNjcmlwdChjb25zdCBIVE1MVG9rZW4mKTsK
IAogICAgIGJvb2wgaXNDb250YWluZWRJblJlcXVlc3QoY29uc3QgU3RyaW5nJik7CiAgICAgYm9v
bCBpc1NhbWVPcmlnaW5SZXNvdXJjZShjb25zdCBTdHJpbmcmIHVybCk7CkBAIC04OCw3ICs4OSw3
IEBAIHByaXZhdGU6CiAgICAgT3duUHRyPFN1ZmZpeFRyZWU8QVNDSUlDb2RlYm9vaz4gPiBtX2Rl
Y29kZWRIVFRQQm9keVN1ZmZpeFRyZWU7CiAKICAgICBTdGF0ZSBtX3N0YXRlOwotICAgIFN0cmlu
ZyBtX2NhY2hlZFNuaXBwZXQ7CisgICAgU3RyaW5nIG1fY2FjaGVkRGVjb2RlZFNuaXBwZXQ7CiAg
ICAgYm9vbCBtX3Nob3VsZEFsbG93Q0RBVEE7CiAgICAgdW5zaWduZWQgbV9zY3JpcHRUYWdOZXN0
aW5nTGV2ZWw7CiAgICAgYm9vbCBtX25vdGlmaWVkQ2xpZW50OwpJbmRleDogTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24g
MTA4ODc2KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTQgQEAKKzIwMTItMDItMjQgIFRvbSBTZXBleiAgPHRzZXBlekBjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgWFNTIEF1ZGl0b3IgdGFyZ2V0aW5nIGxlZ2l0aW1hdGUgZnJhbWVzIGFzIGZhbHNl
IHBvc2l0aXZlcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTc5Mzk3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KKworICAgICAgICAq
IGh0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9yZXNvdXJjZXMvc2NyaXB0LXRhZy1zYWZl
NC1mcmFtZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1
ZGl0b3Ivc2NyaXB0LXRhZy1zYWZlNC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0
dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLXNhZmU0Lmh0bWw6IEFkZGVk
LgorCiAyMDEyLTAyLTI0ICBBYmhpc2hlayBBcnlhICA8aW5mZXJub0BjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgUG9zaXRpb25lZCBvYmplY3RzIG5vdCBjbGVhcmVkIHdoZW4gbW92aW5nIGNoaWxk
cmVuCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2Ny
aXB0LXRhZy1zYWZlNC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctc2FmZTQtZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRp
dG9yL3NjcmlwdC10YWctc2FmZTQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
IEBACisgVGVzdCBwYXNzZXMgaWYgWFNTQXVkaXRvciBpcyBub3QgdHJpZ2dlcmVkLgpJbmRleDog
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctc2Fm
ZTQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hz
c0F1ZGl0b3Ivc2NyaXB0LXRhZy1zYWZlNC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctc2FmZTQuaHRtbAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxo
ZWFkPgorPHNjcmlwdD4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIuc2V0WFNTQXVkaXRvckVuYWJsZWQodHJ1ZSk7Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5PgorPGlmcmFtZSBzcmM9Imh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC9zZWN1cml0eS94c3NBdWRp
dG9yL3Jlc291cmNlcy9zY3JpcHQtdGFnLXNhZmU0LWZyYW1lLmh0bWw/cT08aW1nJTIwc3JjPSUy
Mmh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9mb28lMjIvPiI+Cis8L2lmcmFtZT4KK1Rlc3QgcGFzc2Vz
IGlmIFhTU0F1ZGl0b3IgaXMgbm90IHRyaWdnZXJlZC4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6
IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9yZXNvdXJjZXMvc2Ny
aXB0LXRhZy1zYWZlNC1mcmFtZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAv
dGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9yZXNvdXJjZXMvc2NyaXB0LXRhZy1zYWZlNC1mcmFt
ZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94
c3NBdWRpdG9yL3Jlc291cmNlcy9zY3JpcHQtdGFnLXNhZmU0LWZyYW1lLmh0bWwJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsOSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNj
cmlwdCBzcmM9Imh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9mb28iPjwvc2NyaXB0PgorPGltZyBzcmM9
Imh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9mb28iLz4KKzwvaGVhZD4KKzxib2R5PgorPC9ib2R5Pgor
PC9odG1sPgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>