<?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>73969</bug_id>
          
          <creation_ts>2011-12-06 17:38:52 -0800</creation_ts>
          <short_desc>NodeChildList shouldn&apos;t be in NodeListNodeData</short_desc>
          <delta_ts>2011-12-14 15:18:36 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>
          <dependson>74028</dependson>
          <blocked>73853</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>ap</cc>
    
    <cc>arv</cc>
    
    <cc>darin</cc>
    
    <cc>ojan</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>516411</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-06 17:38:52 -0800</bug_when>
    <thetext>We don&apos;t need to invalidate child node lists for all ancestors when inserting or removing a child. Furthermore, it makes zero sense to remove child node list of an element when adding/removing an attribute to/from the element.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518172</commentid>
    <comment_count>1</comment_count>
      <attachid>118546</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-09 01:02:51 -0800</bug_when>
    <thetext>Created attachment 118546
cleanup; might have improved perf.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518319</commentid>
    <comment_count>2</comment_count>
      <attachid>118546</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-12-09 10:12:35 -0800</bug_when>
    <thetext>Comment on attachment 118546
cleanup; might have improved perf.

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

&gt; Source/WebCore/ChangeLog:8
&gt; +        Move the child node list&apos;s cache from NodeListNodeData to NodeRareData.

Why? I’d guess that this would cost more memory since all the other rare data is allocated every time.

Please make sure to say *why* in your comments and change logs. This does not say why.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518328</commentid>
    <comment_count>3</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-09 10:24:27 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 118546 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=118546&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:8
&gt; &gt; +        Move the child node list&apos;s cache from NodeListNodeData to NodeRareData.
&gt; 
&gt; Why? I’d guess that this would cost more memory since all the other rare data is allocated every time.
&gt; 
&gt; Please make sure to say *why* in your comments and change logs. This does not say why.

The goal here is to get rid of NodeListNodeData altogether and move that to TreeScope-level hash map of node to node lists in order to resolve the bug 73853.

According to the stat I posted on https://bugs.webkit.org/show_bug.cgi?id=73853#c10, we can clear all node lists caches on every DOM mutation without having to iterate through ancestors.

However, since child node lists are second most common node lists used (see https://bugs.webkit.org/show_bug.cgi?id=73853#c6; alive about 60% of the time), and there is no need for it be invalidated when non-child descendants mutate, it seems undesirable to make it hang off of a TreeScope.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518338</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-12-09 10:43:54 -0800</bug_when>
    <thetext>So then the comment I would have written in the change log would be something like this:

    Move NodeChildList out of NodeListNodeData to separate it from the other node lists.

    NodeChildList is simple to invalidate when children change. Other node lists need to
    be invalidated more often; NodeChildList should be separated from them to make that easy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518339</commentid>
    <comment_count>5</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-09 10:44:45 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; So then the comment I would have written in the change log would be something like this:
&gt; 
&gt;     Move NodeChildList out of NodeListNodeData to separate it from the other node lists.
&gt; 
&gt;     NodeChildList is simple to invalidate when children change. Other node lists need to
&gt;     be invalidated more often; NodeChildList should be separated from them to make that easy.

Sure. That sounds good to me. I&apos;ll add that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518397</commentid>
    <comment_count>6</comment_count>
      <attachid>118546</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-09 12:27:34 -0800</bug_when>
    <thetext>Comment on attachment 118546
cleanup; might have improved perf.

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

&gt; Source/WebCore/ChangeLog:23
&gt; +        (WebCore::ChildNodeList::itemWithName): Added; while DynamicNodeList&apos;s version uses TreeScope&apos;s
&gt; +        getElementById, this is undesirable for ChildNodeList because this would create DynamicNodeList
&gt; +        on on the TreeScope and we&apos;ll end up having to walk up the entire tree in childrenChanged.

It turned out this isn&apos;t accurate at all :( TreeScope has a DocumentOrderedMap so it&apos;s super fast.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518405</commentid>
    <comment_count>7</comment_count>
      <attachid>118613</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-09 12:34:34 -0800</bug_when>
    <thetext>Created attachment 118613
Updated per Darin&apos;s comment; also fixed ChildNodeList::itemWithName</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518647</commentid>
    <comment_count>8</comment_count>
      <attachid>118613</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-12-09 16:59:27 -0800</bug_when>
    <thetext>Comment on attachment 118613
Updated per Darin&apos;s comment; also fixed ChildNodeList::itemWithName

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

review- because of the offset problem

&gt; Source/WebCore/dom/ChildNodeList.cpp:114
&gt; +    if (m_node-&gt;isDocumentNode() || m_node-&gt;inDocument()) {

Why do we need to check isDocumentNode()? Doesn&apos;t inDocument() return true for document nodes themselves?

&gt; Source/WebCore/dom/ChildNodeList.cpp:118
&gt; +        // In the case of multiple nodes with the same name, just fall through.

Shouldn’t this comment say “the same ID”?

&gt; Source/WebCore/dom/ChildNodeList.cpp:121
&gt; +    unsigned offset = 0;

I think you forgot the code that updates offset. It’s always zero!

Why didn’t any test case catch this? I think we may need to add test cases.

&gt; Source/WebCore/dom/Node.cpp:1016
&gt;      ASSERT(rareData());

Shouldn’t this assertion say ASSERT(hasRareData())?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518668</commentid>
    <comment_count>9</comment_count>
      <attachid>118669</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-09 17:25:42 -0800</bug_when>
    <thetext>Created attachment 118669
Fixed the bug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518687</commentid>
    <comment_count>10</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-09 17:39:58 -0800</bug_when>
    <thetext>Will upload a new patch that addresses the rest of your comments in a minute.

(In reply to comment #8)
&gt; (From update of attachment 118613 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=118613&amp;action=review
&gt; 
&gt; review- because of the offset problem
&gt; 
&gt; &gt; Source/WebCore/dom/ChildNodeList.cpp:114
&gt; &gt; +    if (m_node-&gt;isDocumentNode() || m_node-&gt;inDocument()) {
&gt; 
&gt; Why do we need to check isDocumentNode()? Doesn&apos;t inDocument() return true for document nodes themselves?

Good point. I just copied it from DynamicNodeList but document node can never have a child so this check is useless.

&gt; &gt; Source/WebCore/dom/ChildNodeList.cpp:118
&gt; &gt; +        // In the case of multiple nodes with the same name, just fall through.
&gt; 
&gt; Shouldn’t this comment say “the same ID”?

Fixed.

&gt; &gt; Source/WebCore/dom/ChildNodeList.cpp:121
&gt; &gt; +    unsigned offset = 0;
&gt; 
&gt; I think you forgot the code that updates offset. It’s always zero!
&gt; 
&gt; Why didn’t any test case catch this? I think we may need to add test cases.

Fixed and added a test.

&gt; &gt; Source/WebCore/dom/Node.cpp:1016
&gt; &gt;      ASSERT(rareData());
&gt; 
&gt; Shouldn’t this assertion say ASSERT(hasRareData())?

Sure. Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518699</commentid>
    <comment_count>11</comment_count>
      <attachid>118674</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-09 17:51:13 -0800</bug_when>
    <thetext>Created attachment 118674
Fixed per Darin&apos;s comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519404</commentid>
    <comment_count>12</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-12 13:15:08 -0800</bug_when>
    <thetext>Ping reviewers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519411</commentid>
    <comment_count>13</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-12-12 13:25:24 -0800</bug_when>
    <thetext>I am not thrilled with making ChildNodeList not inherit from DynamicNodeList.  I would be more comfortable moving things that are unique to non-ChildNodeList DynamicNodeList into a new shared class that derives from DynamicNodeList.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519419</commentid>
    <comment_count>14</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-12 13:33:10 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; I am not thrilled with making ChildNodeList not inherit from DynamicNodeList.  I would be more comfortable moving things that are unique to non-ChildNodeList DynamicNodeList into a new shared class that derives from DynamicNodeList.

But ChildNodeList and DynamicNodeList share so little! They even manage DynamicNodeList::Caches differently.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519424</commentid>
    <comment_count>15</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-12-12 13:38:49 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; (In reply to comment #13)
&gt; &gt; I am not thrilled with making ChildNodeList not inherit from DynamicNodeList.  I would be more comfortable moving things that are unique to non-ChildNodeList DynamicNodeList into a new shared class that derives from DynamicNodeList.
&gt; 
&gt; But ChildNodeList and DynamicNodeList share so little! They even manage DynamicNodeList::Caches differently.

Well, they share the important point that they are both dynamic as opposed to static.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519433</commentid>
    <comment_count>16</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-12 13:44:30 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; (In reply to comment #14)
&gt; &gt; 
&gt; &gt; But ChildNodeList and DynamicNodeList share so little! They even manage DynamicNodeList::Caches differently.
&gt; 
&gt; Well, they share the important point that they are both dynamic as opposed to static.

Sure. But implementation-wise, they&apos;re almost completely disjoint.

We could rename the existing DynamicNodeList to something like SubtreeDynamicNodeList and create new DynamicNodeList that has item(unsigned) = 0 and itemName(~) if you&apos;ll prefer that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520503</commentid>
    <comment_count>17</comment_count>
      <attachid>119114</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-13 17:08:40 -0800</bug_when>
    <thetext>Created attachment 119114
Fixed per Sam&apos;s comment</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520506</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-13 17:11:02 -0800</bug_when>
    <thetext>Attachment 119114 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/fast...&quot; exit_code: 1

Source/WebCore/dom/TagNodeList.h:33:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WebCore/dom/ClassNodeList.h:39:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WebCore/dom/NameNodeList.h:34:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 3 in 21 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>520515</commentid>
    <comment_count>19</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-13 17:18:30 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; Attachment 119114 [details] did not pass style-queue:
&gt; 
&gt; Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/fast...&quot; exit_code: 1
&gt; 
&gt; Source/WebCore/dom/TagNodeList.h:33:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
&gt; Source/WebCore/dom/ClassNodeList.h:39:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
&gt; Source/WebCore/dom/NameNodeList.h:34:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
&gt; Total errors found: 3 in 21 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against check-webkit-style.

While it&apos;ll be nice to fix these styles, I think it&apos;s out of scope for this patch since I&apos;m just renaming the superclass.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521227</commentid>
    <comment_count>20</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-14 13:14:08 -0800</bug_when>
    <thetext>Ping reviewers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521261</commentid>
    <comment_count>21</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-14 13:52:41 -0800</bug_when>
    <thetext>Thanks for the review, Sam! I&apos;m excited to land this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521344</commentid>
    <comment_count>22</comment_count>
      <attachid>119114</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-14 15:18:30 -0800</bug_when>
    <thetext>Comment on attachment 119114
Fixed per Sam&apos;s comment

Clearing flags on attachment: 119114

Committed r102834: &lt;http://trac.webkit.org/changeset/102834&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521345</commentid>
    <comment_count>23</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-14 15:18:36 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118546</attachid>
            <date>2011-12-09 01:02:51 -0800</date>
            <delta_ts>2011-12-09 12:27:44 -0800</delta_ts>
            <desc>cleanup; might have improved perf.</desc>
            <filename>bug-73969-20111209010250.patch</filename>
            <type>text/plain</type>
            <size>19168</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMjQzOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBACisyMDExLTEyLTA5ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIE5vZGVDaGlsZExpc3Qgc2hvdWxk
bid0IGJlIGluIE5vZGVMaXN0Tm9kZURhdGEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTczOTY5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTW92ZSB0aGUgY2hpbGQgbm9kZSBsaXN0J3MgY2FjaGUgZnJvbSBO
b2RlTGlzdE5vZGVEYXRhIHRvIE5vZGVSYXJlRGF0YS4KKworICAgICAgICBBbHNvIG1ha2UgQ2hp
bGROb2RlTGlzdCBub3QgaW5oZXJpdCBmcm9tIER5bmFtaWNOb2RlTGlzdCBzaW5jZSB3ZSBkb24n
dCB3YW50IHRvIGhhc05vZGVMaXN0Q2FjaGVzCisgICAgICAgIHRvIHJldHVybiB0cnVlIGp1c3Qg
YmVjYXVzZSB3ZSBoYXZlIGEgY2hpbGQgbm9kZSBzb21ld2hlcmUgaW4gdGhlIGRvY3VtZW50Lgor
ICAgICAgICBUaGVzZSB0d28gb2JqZWN0cyBiZWhhdmUgdmVyeSBkaWZmZXJlbnRseSBhbnl3YXku
IFRoZSBvbmx5IGRyYXdiYWNrIGlzIHRoYXQgd2UgaGF2ZSB0byBzb21ld2hhdAorICAgICAgICBk
dXBsaWNhdGUgdGhlIGNvZGUgZm9yIGl0ZW1XaXRoTmFtZSBidXQgdGhhdCBzZWVtcyBva2F5IGJl
Y2F1c2Ugbm93IHdlIGNhbiBkbyBjaGlsZCBub2RlIGxpc3QKKyAgICAgICAgc3BlY2lmaWMgb3B0
aW1pemF0aW9ucy4KKworICAgICAgICAqIGRvbS9DaGlsZE5vZGVMaXN0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNoaWxkTm9kZUxpc3Q6OkNoaWxkTm9kZUxpc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2hpbGROb2RlTGlzdDo6bGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTm9kZUxp
c3Q6Oml0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6bWF0Y2hlc0lkKTogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpDaGlsZE5vZGVMaXN0OjppdGVtV2l0aE5hbWUpOiBBZGRlZDsgd2hpbGUgRHlu
YW1pY05vZGVMaXN0J3MgdmVyc2lvbiB1c2VzIFRyZWVTY29wZSdzCisgICAgICAgIGdldEVsZW1l
bnRCeUlkLCB0aGlzIGlzIHVuZGVzaXJhYmxlIGZvciBDaGlsZE5vZGVMaXN0IGJlY2F1c2UgdGhp
cyB3b3VsZCBjcmVhdGUgRHluYW1pY05vZGVMaXN0CisgICAgICAgIG9uIG9uIHRoZSBUcmVlU2Nv
cGUgYW5kIHdlJ2xsIGVuZCB1cCBoYXZpbmcgdG8gd2FsayB1cCB0aGUgZW50aXJlIHRyZWUgaW4g
Y2hpbGRyZW5DaGFuZ2VkLgorICAgICAgICAqIGRvbS9DaGlsZE5vZGVMaXN0Lmg6CisgICAgICAg
IChXZWJDb3JlOjpDaGlsZE5vZGVMaXN0OjpjcmVhdGUpOgorICAgICAgICAqIGRvbS9Db250YWlu
ZXJOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5lck5vZGU6OmNoaWxkcmVuQ2hh
bmdlZCk6IEFsd2F5cyBjYWxsIGludmFsaWRhdGVOb2RlTGlzdHNDYWNoZUFmdGVyQ2hpbGRyZW5D
aGFuZ2VkCisgICAgICAgIHNpbmNlIHRoZSBlYXJseSBleGl0IGlzIG5vdyBpbnNpZGUgdGhlIGZ1
bmN0aW9uLgorICAgICAgICAqIGRvbS9EeW5hbWljTm9kZUxpc3QuY3BwOiBMb3RzIG9mIGNsZWFu
dXAhCisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljTm9kZUxpc3Q6OkR5bmFtaWNOb2RlTGlzdCk6
IFJlbW92ZWQgYSBjb25zdHJ1Y3RvciBmb3IgQ2hpbGROb2RlTGlzdC4KKyAgICAgICAgKFdlYkNv
cmU6OkR5bmFtaWNOb2RlTGlzdDo6aXRlbVdpdGhOYW1lKTogVXNlIGlzRGVzY2VuZGFudE9mIGlu
c3RlYWQgb2YgYSBtYW51YWwgbG9vcC4KKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNOb2RlTGlz
dDo6aW52YWxpZGF0ZUNhY2hlKToKKyAgICAgICAgKiBkb20vRHluYW1pY05vZGVMaXN0Lmg6Cisg
ICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Y2hpbGROb2Rl
cyk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpyZWdpc3RlckR5bmFtaWNOb2RlTGlzdCk6IE5v
IGxvbmdlciBjaGVja3MgaGFzT3duQ2FjaGVzKCkuCisgICAgICAgIChXZWJDb3JlOjpOb2RlOjp1
bnJlZ2lzdGVyRHluYW1pY05vZGVMaXN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpOb2Rl
OjppbnZhbGlkYXRlTm9kZUxpc3RzQ2FjaGVBZnRlckF0dHJpYnV0ZUNoYW5nZWQpOiBDbGVhciBD
aGlsZE5vZGVMaXN0J3MgY2FjaGUKKyAgICAgICAgZXhwbGljaXRseSBhdCB0aGUgYmVnaW5uaW5n
IGZvciBhbiBhdHRyaWJ1dGUgbm9kZS4gRXhpdCBlYXJseSBpZiB0aGVyZSBhcmUgbm8gRHluYW1p
Y05vZGVMaXN0LgorICAgICAgICBObyBuZWVkIHRvIGRvIHRoZSBzYW1lIGluIHRoZSBsb29wIHNp
bmNlIGFuIGF0dHJpYnV0ZSBub2RlIGNhbid0IGhhdmUgYW4gYXR0cmlidXRlIG5vZGUgYXMKKyAg
ICAgICAgYW4gYW5jZXN0b3IuIEFsc28gZG9uJ3QgY2FsbCBpbnZhbGlkYXRlQ2FjaGVzIGluIGFs
bCBjYXNlcyBiZWNhdXNlIG1vZGlmeWluZyBhdHRyaWJ1dGVzIGNhbiBuZXZlcgorICAgICAgICBh
ZmZlY3QgZ2V0RWxlbWVudHNCeVRhZ05hbWUgb3IgZ2V0RWxlbWVudHNCeVRhZ05hbWVOUy4KKyAg
ICAgICAgKFdlYkNvcmU6Ok5vZGU6OmludmFsaWRhdGVOb2RlTGlzdHNDYWNoZUFmdGVyQ2hpbGRy
ZW5DaGFuZ2VkKTogTGlrZXdpc2UuIENsZWFyIENoaWxkTm9kZUxpc3QncworICAgICAgICBjYWNo
ZSBleHBsaWNpdGx5IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxvb3AgYW5kIGV4aXQgZWFybHkg
aWYgaGFzTm9kZUxpc3RDYWNoZXMoKSBpcyBmYWxzZS4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6
OnJlbW92ZUNhY2hlZENsYXNzTm9kZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6cmVt
b3ZlQ2FjaGVkTmFtZU5vZGVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnJlbW92ZUNh
Y2hlZFRhZ05vZGVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnJlbW92ZUNhY2hlZExh
YmVsc05vZGVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVMaXN0c05vZGVEYXRhOjppbnZh
bGlkYXRlQ2FjaGVzKTogTm8gbG9uZ2VyIGNsZWFycyBtX2NoaWxkTm9kZUxpc3RDYWNoZXMuIEl0
J3MgZG9uZQorICAgICAgICBpbiBpbnZhbGlkYXRlTm9kZUxpc3RzQ2FjaGVBZnRlckF0dHJpYnV0
ZUNoYW5nZWQgYW5kIGludmFsaWRhdGVOb2RlTGlzdHNDYWNoZUFmdGVyQ2hpbGRyZW5DaGFuZ2Vk
LgorICAgICAgICAoV2ViQ29yZTo6Tm9kZUxpc3RzTm9kZURhdGE6OmlzRW1wdHkpOgorICAgICAg
ICAoV2ViQ29yZTo6Tm9kZVJhcmVEYXRhOjpjbGVhckNoaWxkTm9kZUxpc3RDYWNoZSk6IEFkZGVk
LgorICAgICAgICAqIGRvbS9Ob2RlUmFyZURhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVS
YXJlRGF0YTo6bm9kZUxpc3RzKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVSYXJlRGF0YTo6ZW5z
dXJlQ2hpbGROb2RlTGlzdENhY2hlKTogQWRkZWQuCisKIDIwMTEtMTItMDggIFZpYXRjaGVzbGF2
IE9zdGFwZW5rbyAgPG9zdGFwZW5rby52aWF0Y2hlc2xhdkBub2tpYS5jb20+CiAKICAgICAgICAg
W1F0XSBbV0syXSBXZWJraXQgc2hvdWxkIHJlbGVhc2UgVGV4dHVyZU1hcHBlciBHTCBvYmplY3Rz
IGlmIHBhZ2UgcGFpbnQgbm9kZSBpcyBkZWFsbG9jYXRlZC4KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2RvbS9DaGlsZE5vZGVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20v
Q2hpbGROb2RlTGlzdC5jcHAJKHJldmlzaW9uIDEwMjQzMSkKKysrIFNvdXJjZS9XZWJDb3JlL2Rv
bS9DaGlsZE5vZGVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMyw2ICszLDcgQEAKICAqICAg
ICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAg
ICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKICAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjcsOCArMjgsOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLUNoaWxkTm9kZUxpc3Q6OkNoaWxkTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290
Tm9kZSwgRHluYW1pY05vZGVMaXN0OjpDYWNoZXMqIGluZm8pCi0gICAgOiBEeW5hbWljTm9kZUxp
c3Qocm9vdE5vZGUsIGluZm8pCitDaGlsZE5vZGVMaXN0OjpDaGlsZE5vZGVMaXN0KFBhc3NSZWZQ
dHI8Tm9kZT4gbm9kZSwgRHluYW1pY05vZGVMaXN0OjpDYWNoZXMqIGNhY2hlcykKKyAgICA6IG1f
bm9kZShub2RlKQorICAgICwgbV9jYWNoZXMoY2FjaGVzKQogewogfQogCkBAIC0zOCw3ICs0MCw3
IEBAIHVuc2lnbmVkIENoaWxkTm9kZUxpc3Q6Omxlbmd0aCgpIGNvbnN0CiAgICAgICAgIHJldHVy
biBtX2NhY2hlcy0+Y2FjaGVkTGVuZ3RoOwogCiAgICAgdW5zaWduZWQgbGVuID0gMDsKLSAgICBm
b3IgKE5vZGUqIG4gPSBtX3Jvb3ROb2RlLT5maXJzdENoaWxkKCk7IG47IG4gPSBuLT5uZXh0U2li
bGluZygpKQorICAgIGZvciAoTm9kZSogbiA9IG1fbm9kZS0+Zmlyc3RDaGlsZCgpOyBuOyBuID0g
bi0+bmV4dFNpYmxpbmcoKSkKICAgICAgICAgbGVuKys7CiAKICAgICBtX2NhY2hlcy0+Y2FjaGVk
TGVuZ3RoID0gbGVuOwpAQCAtNTAsNyArNTIsNyBAQCB1bnNpZ25lZCBDaGlsZE5vZGVMaXN0Ojps
ZW5ndGgoKSBjb25zdAogTm9kZSogQ2hpbGROb2RlTGlzdDo6aXRlbSh1bnNpZ25lZCBpbmRleCkg
Y29uc3QKIHsKICAgICB1bnNpZ25lZCBpbnQgcG9zID0gMDsKLSAgICBOb2RlKiBuID0gbV9yb290
Tm9kZS0+Zmlyc3RDaGlsZCgpOworICAgIE5vZGUqIG4gPSBtX25vZGUtPmZpcnN0Q2hpbGQoKTsK
IAogICAgIGlmIChtX2NhY2hlcy0+aXNJdGVtQ2FjaGVWYWxpZCkgewogICAgICAgICBpZiAoaW5k
ZXggPT0gbV9jYWNoZXMtPmxhc3RJdGVtT2Zmc2V0KQpAQCAtNzEsNyArNzMsNyBAQCBOb2RlKiBD
aGlsZE5vZGVMaXN0OjppdGVtKHVuc2lnbmVkIGluZGV4CiAgICAgICAgIGludCBkaWZmID0gaW5k
ZXggLSBwb3M7CiAgICAgICAgIHVuc2lnbmVkIGRpc3QgPSBhYnMoZGlmZik7CiAgICAgICAgIGlm
IChkaXN0ID4gbV9jYWNoZXMtPmNhY2hlZExlbmd0aCAtIDEgLSBpbmRleCkgewotICAgICAgICAg
ICAgbiA9IG1fcm9vdE5vZGUtPmxhc3RDaGlsZCgpOworICAgICAgICAgICAgbiA9IG1fbm9kZS0+
bGFzdENoaWxkKCk7CiAgICAgICAgICAgICBwb3MgPSBtX2NhY2hlcy0+Y2FjaGVkTGVuZ3RoIC0g
MTsKICAgICAgICAgfQogICAgIH0KQEAgLTk4LDEyICsxMDAsMjcgQEAgTm9kZSogQ2hpbGROb2Rl
TGlzdDo6aXRlbSh1bnNpZ25lZCBpbmRleAogICAgIHJldHVybiAwOwogfQogCi1ib29sIENoaWxk
Tm9kZUxpc3Q6Om5vZGVNYXRjaGVzKEVsZW1lbnQqIHRlc3ROb2RlKSBjb25zdAorc3RhdGljIGlu
bGluZSBib29sIG1hdGNoZXNJZChOb2RlKiBub2RlLCBjb25zdCBBdG9taWNTdHJpbmcmIGVsZW1l
bnRJZCkKIHsKLSAgICAvLyBOb3RlOiBEdWUgdG8gdGhlIG92ZXJyaWRlcyBvZiB0aGUgbGVuZ3Ro
IGFuZCBpdGVtIGZ1bmN0aW9ucyBhYm92ZSwKLSAgICAvLyB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUg
Y2FsbGVkIG9ubHkgYnkgRHluYW1pY05vZGVMaXN0OjppdGVtV2l0aE5hbWUsCi0gICAgLy8gZm9y
IGFuIGVsZW1lbnQgdGhhdCB3YXMgbG9jYXRlZCB3aXRoIGdldEVsZW1lbnRCeUlkLgotICAgIHJl
dHVybiB0ZXN0Tm9kZS0+cGFyZW50Tm9kZSgpID09IG1fcm9vdE5vZGU7CisgICAgLy8gRklYTUU6
IFRoaXMgc2hvdWxkIHByb2JhYmx5IGJlIHVzaW5nIGdldElkQXR0cmlidXRlIGluc3RlYWQgb2Yg
aWRGb3JTdHlsZVJlc29sdXRpb24uCisgICAgcmV0dXJuIG5vZGUtPmhhc0lEKCkgJiYgc3RhdGlj
X2Nhc3Q8RWxlbWVudCo+KG5vZGUpLT5pZEZvclN0eWxlUmVzb2x1dGlvbigpID09IGVsZW1lbnRJ
ZDsKK30KKworTm9kZSogQ2hpbGROb2RlTGlzdDo6aXRlbVdpdGhOYW1lKGNvbnN0IEF0b21pY1N0
cmluZyYgZWxlbWVudElkKSBjb25zdAoreworICAgIGlmIChtX2NhY2hlcy0+aXNJdGVtQ2FjaGVW
YWxpZCAmJiBtYXRjaGVzSWQobV9jYWNoZXMtPmxhc3RJdGVtLCBlbGVtZW50SWQpKQorICAgICAg
ICByZXR1cm4gbV9jYWNoZXMtPmxhc3RJdGVtOworCisgICAgdW5zaWduZWQgb2Zmc2V0ID0gMDsK
KyAgICBmb3IgKE5vZGUqIG5vZGUgPSBtX25vZGUtPmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9
IG5vZGUtPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKG1hdGNoZXNJZChub2RlLCBlbGVt
ZW50SWQpKSB7CisgICAgICAgICAgICBtX2NhY2hlcy0+bGFzdEl0ZW0gPSBub2RlOworICAgICAg
ICAgICAgbV9jYWNoZXMtPmxhc3RJdGVtT2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICAgICAgbV9j
YWNoZXMtPmlzSXRlbUNhY2hlVmFsaWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIG5vZGU7
CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIDA7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZE5vZGVMaXN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0NoaWxkTm9kZUxpc3QuaAkocmV2aXNpb24gMTAyNDMx
KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0NoaWxkTm9kZUxpc3QuaAkod29ya2luZyBjb3B5KQpA
QCAtMyw2ICszLDcgQEAKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29p
dmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxs
ZXJAa2RlLm9yZykKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjksMjEgKzMwLDI0IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIENoaWxkTm9kZUxpc3QgOiBwdWJsaWMg
RHluYW1pY05vZGVMaXN0IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PENoaWxkTm9kZUxpc3Q+IGNyZWF0ZShQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBDYWNoZXMq
IGNhY2hlcykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDaGls
ZE5vZGVMaXN0KHJvb3ROb2RlLCBjYWNoZXMpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZpcnR1
YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgTm9kZSogaXRlbSh1
bnNpZ25lZCBpbmRleCkgY29uc3Q7Ci0KLSAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIENoaWxkTm9k
ZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgQ2FjaGVzKik7Ci0KLSAgICAgICAgdmly
dHVhbCBib29sIG5vZGVNYXRjaGVzKEVsZW1lbnQqKSBjb25zdDsKLSAgICB9OworY2xhc3MgQ2hp
bGROb2RlTGlzdCA6IHB1YmxpYyBOb2RlTGlzdCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8Q2hpbGROb2RlTGlzdD4gY3JlYXRlKFBhc3NSZWZQdHI8Tm9kZT4gbm9kZSwgRHluYW1p
Y05vZGVMaXN0OjpDYWNoZXMqIGNhY2hlcykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgQ2hpbGROb2RlTGlzdChub2RlLCBjYWNoZXMpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFs
IHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgTm9kZSogaXRl
bSh1bnNpZ25lZCBpbmRleCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBOb2RlKiBpdGVt
V2l0aE5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiBlbGVtZW50SWQpIGNvbnN0IE9WRVJSSURFOwor
Citwcm90ZWN0ZWQ6CisgICAgQ2hpbGROb2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+LCBEeW5hbWlj
Tm9kZUxpc3Q6OkNhY2hlcyopOworCitwcml2YXRlOgorICAgIFJlZlB0cjxOb2RlPiBtX25vZGU7
CisgICAgbXV0YWJsZSBSZWZQdHI8RHluYW1pY05vZGVMaXN0OjpDYWNoZXM+IG1fY2FjaGVzOwor
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20v
Q29udGFpbmVyTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0NvbnRh
aW5lck5vZGUuY3BwCShyZXZpc2lvbiAxMDI0MzEpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ29u
dGFpbmVyTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0NCw4ICs4NDQsNyBAQCB2b2lkIENv
bnRhaW5lck5vZGU6OmNoaWxkcmVuQ2hhbmdlZChib29sCiAgICAgTm9kZTo6Y2hpbGRyZW5DaGFu
Z2VkKGNoYW5nZWRCeVBhcnNlciwgYmVmb3JlQ2hhbmdlLCBhZnRlckNoYW5nZSwgY2hpbGRDb3Vu
dERlbHRhKTsKICAgICBpZiAoIWNoYW5nZWRCeVBhcnNlciAmJiBjaGlsZENvdW50RGVsdGEpCiAg
ICAgICAgIGRvY3VtZW50KCktPnVwZGF0ZVJhbmdlc0FmdGVyQ2hpbGRyZW5DaGFuZ2VkKHRoaXMp
OwotICAgIGlmICh0cmVlU2NvcGUoKS0+aGFzTm9kZUxpc3RDYWNoZXMoKSkKLSAgICAgICAgaW52
YWxpZGF0ZU5vZGVMaXN0c0NhY2hlQWZ0ZXJDaGlsZHJlbkNoYW5nZWQoKTsKKyAgICBpbnZhbGlk
YXRlTm9kZUxpc3RzQ2FjaGVBZnRlckNoaWxkcmVuQ2hhbmdlZCgpOwogfQogCiB2b2lkIENvbnRh
aW5lck5vZGU6OmNsb25lQ2hpbGROb2RlcyhDb250YWluZXJOb2RlICpjbG9uZSkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2RvbS9EeW5hbWljTm9kZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2RvbS9EeW5hbWljTm9kZUxpc3QuY3BwCShyZXZpc2lvbiAxMDI0MzEpCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vRHluYW1pY05vZGVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzEsMTggKzMxLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogRHluYW1pY05vZGVMaXN0OjpEeW5h
bWljTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSkKICAgICA6IG1fcm9vdE5vZGUo
cm9vdE5vZGUpCiAgICAgLCBtX2NhY2hlcyhDYWNoZXM6OmNyZWF0ZSgpKQotICAgICwgbV9vd25z
Q2FjaGVzKHRydWUpCiB7CiAgICAgbV9yb290Tm9kZS0+cmVnaXN0ZXJEeW5hbWljTm9kZUxpc3Qo
dGhpcyk7Ci19ICAgIAotCi1EeW5hbWljTm9kZUxpc3Q6OkR5bmFtaWNOb2RlTGlzdChQYXNzUmVm
UHRyPE5vZGU+IHJvb3ROb2RlLCBEeW5hbWljTm9kZUxpc3Q6OkNhY2hlcyogY2FjaGVzKQotICAg
IDogbV9yb290Tm9kZShyb290Tm9kZSkKLSAgICAsIG1fY2FjaGVzKGNhY2hlcykKLSAgICAsIG1f
b3duc0NhY2hlcyhmYWxzZSkKLXsKLSAgICBtX3Jvb3ROb2RlLT5yZWdpc3RlckR5bmFtaWNOb2Rl
TGlzdCh0aGlzKTsKLX0gICAgCit9CiAKIER5bmFtaWNOb2RlTGlzdDo6fkR5bmFtaWNOb2RlTGlz
dCgpCiB7CkBAIC0xMjMsMTIgKzExNCw4IEBAIE5vZGUqIER5bmFtaWNOb2RlTGlzdDo6aXRlbVdp
dGhOYW1lKGNvbnMKIHsKICAgICBpZiAobV9yb290Tm9kZS0+aXNEb2N1bWVudE5vZGUoKSB8fCBt
X3Jvb3ROb2RlLT5pbkRvY3VtZW50KCkpIHsKICAgICAgICAgRWxlbWVudCogbm9kZSA9IG1fcm9v
dE5vZGUtPnRyZWVTY29wZSgpLT5nZXRFbGVtZW50QnlJZChlbGVtZW50SWQpOwotICAgICAgICBp
ZiAobm9kZSAmJiBub2RlTWF0Y2hlcyhub2RlKSkgewotICAgICAgICAgICAgZm9yIChDb250YWlu
ZXJOb2RlKiBwID0gbm9kZS0+cGFyZW50Tm9kZSgpOyBwOyBwID0gcC0+cGFyZW50Tm9kZSgpKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKHAgPT0gbV9yb290Tm9kZSkKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG5vZGU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKG5v
ZGUgJiYgbm9kZU1hdGNoZXMobm9kZSkgJiYgbm9kZS0+aXNEZXNjZW5kYW50T2YobV9yb290Tm9k
ZS5nZXQoKSkpCisgICAgICAgICAgICByZXR1cm4gbm9kZTsKICAgICAgICAgaWYgKCFub2RlKQog
ICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIC8vIEluIHRoZSBjYXNlIG9mIG11bHRpcGxl
IG5vZGVzIHdpdGggdGhlIHNhbWUgbmFtZSwganVzdCBmYWxsIHRocm91Z2guCkBAIC0xNTIsOCAr
MTM5LDYgQEAgYm9vbCBEeW5hbWljTm9kZUxpc3Q6OmlzRHluYW1pY05vZGVMaXN0KAogCiB2b2lk
IER5bmFtaWNOb2RlTGlzdDo6aW52YWxpZGF0ZUNhY2hlKCkKIHsKLSAgICAvLyBUaGlzIHNob3Vs
ZCBvbmx5IGJlIGNhbGxlZCBmb3Igbm9kZSBsaXN0cyB0aGF0IG93biB0aGVpciBvd24gY2FjaGVz
LgotICAgIEFTU0VSVChtX293bnNDYWNoZXMpOwogICAgIG1fY2FjaGVzLT5yZXNldCgpOwogfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRHluYW1pY05vZGVMaXN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZG9tL0R5bmFtaWNOb2RlTGlzdC5oCShyZXZpc2lvbiAxMDI0MzEp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRHluYW1pY05vZGVMaXN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTUxLDggKzUxLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZpcnR1YWwg
fkR5bmFtaWNOb2RlTGlzdCgpOwogCi0gICAgICAgIGJvb2wgaGFzT3duQ2FjaGVzKCkgY29uc3Qg
eyByZXR1cm4gbV9vd25zQ2FjaGVzOyB9Ci0KICAgICAgICAgLy8gRE9NIG1ldGhvZHMgJiBhdHRy
aWJ1dGVzIGZvciBOb2RlTGlzdAogICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIGxlbmd0aCgpIGNv
bnN0OwogICAgICAgICB2aXJ0dWFsIE5vZGUqIGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0OwpA
QCAtNjQsNyArNjIsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBwcm90ZWN0ZWQ6CiAg
ICAgICAgIER5bmFtaWNOb2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlKTsKLSAgICAg
ICAgRHluYW1pY05vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIENhY2hlcyopOwog
CiAgICAgICAgIHZpcnR1YWwgYm9vbCBub2RlTWF0Y2hlcyhFbGVtZW50KikgY29uc3QgPSAwOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZG9tL05vZGUuY3BwCShyZXZpc2lvbiAxMDI0MzEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9kb20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyMywxMCArNjIzLDcgQEAgdm9pZCBO
b2RlOjpzZXROb2RlVmFsdWUoY29uc3QgU3RyaW5nJiAvKgogCiBQYXNzUmVmUHRyPE5vZGVMaXN0
PiBOb2RlOjpjaGlsZE5vZGVzKCkKIHsKLSAgICBOb2RlTGlzdHNOb2RlRGF0YSogbm9kZUxpc3Rz
ID0gZW5zdXJlUmFyZURhdGEoKS0+ZW5zdXJlTm9kZUxpc3RzKHRoaXMpOwotICAgIGlmICghbm9k
ZUxpc3RzLT5tX2NoaWxkTm9kZUxpc3RDYWNoZXMpCi0gICAgICAgIG5vZGVMaXN0cy0+bV9jaGls
ZE5vZGVMaXN0Q2FjaGVzID0gRHluYW1pY05vZGVMaXN0OjpDYWNoZXM6OmNyZWF0ZSgpOwotICAg
IHJldHVybiBDaGlsZE5vZGVMaXN0OjpjcmVhdGUodGhpcywgbm9kZUxpc3RzLT5tX2NoaWxkTm9k
ZUxpc3RDYWNoZXMuZ2V0KCkpOworICAgIHJldHVybiBDaGlsZE5vZGVMaXN0OjpjcmVhdGUodGhp
cywgZW5zdXJlUmFyZURhdGEoKS0+ZW5zdXJlQ2hpbGROb2RlTGlzdENhY2hlKCkpOwogfQogCiBO
b2RlICpOb2RlOjpsYXN0RGVzY2VuZGFudCgpIGNvbnN0CkBAIC0xMDExLDQyICsxMDA4LDQ5IEBA
IHZvaWQgTm9kZTo6cmVnaXN0ZXJEeW5hbWljTm9kZUxpc3QoRHluYW0KICAgICBpZiAoZGF0YS0+
bm9kZUxpc3RzKCkgJiYgKCF0cmVlU2NvcGUoKSB8fCAhdHJlZVNjb3BlKCktPmhhc05vZGVMaXN0
Q2FjaGVzKCkpKQogICAgICAgICBkYXRhLT5ub2RlTGlzdHMoKS0+aW52YWxpZGF0ZUNhY2hlcygp
OwogCi0gICAgaWYgKGxpc3QtPmhhc093bkNhY2hlcygpKQotICAgICAgICBkYXRhLT5lbnN1cmVO
b2RlTGlzdHModGhpcyktPm1fbGlzdHNXaXRoQ2FjaGVzLmFkZChsaXN0KTsKKyAgICBkYXRhLT5l
bnN1cmVOb2RlTGlzdHModGhpcyktPm1fbGlzdHNXaXRoQ2FjaGVzLmFkZChsaXN0KTsKIH0KIAog
dm9pZCBOb2RlOjp1bnJlZ2lzdGVyRHluYW1pY05vZGVMaXN0KER5bmFtaWNOb2RlTGlzdCogbGlz
dCkKIHsKICAgICBBU1NFUlQocmFyZURhdGEoKSk7CiAgICAgQVNTRVJUKHJhcmVEYXRhKCktPm5v
ZGVMaXN0cygpKTsKLSAgICBpZiAobGlzdC0+aGFzT3duQ2FjaGVzKCkpIHsKLSAgICAgICAgTm9k
ZVJhcmVEYXRhKiBkYXRhID0gcmFyZURhdGEoKTsKLSAgICAgICAgZGF0YS0+bm9kZUxpc3RzKCkt
Pm1fbGlzdHNXaXRoQ2FjaGVzLnJlbW92ZShsaXN0KTsKLSAgICAgICAgcmVtb3ZlTm9kZUxpc3RD
YWNoZUlmUG9zc2libGUodGhpcywgZGF0YSk7Ci0gICAgfQorICAgIE5vZGVSYXJlRGF0YSogZGF0
YSA9IHJhcmVEYXRhKCk7CisgICAgZGF0YS0+bm9kZUxpc3RzKCktPm1fbGlzdHNXaXRoQ2FjaGVz
LnJlbW92ZShsaXN0KTsKKyAgICByZW1vdmVOb2RlTGlzdENhY2hlSWZQb3NzaWJsZSh0aGlzLCBk
YXRhKTsKIH0KIAogdm9pZCBOb2RlOjppbnZhbGlkYXRlTm9kZUxpc3RzQ2FjaGVBZnRlckF0dHJp
YnV0ZUNoYW5nZWQoKQogeworICAgIGlmIChoYXNSYXJlRGF0YSgpICYmIGlzQXR0cmlidXRlTm9k
ZSgpKSB7CisgICAgICAgIE5vZGVSYXJlRGF0YSogZGF0YSA9IHJhcmVEYXRhKCk7CisgICAgICAg
IEFTU0VSVCghZGF0YS0+bm9kZUxpc3RzKCkpOworICAgICAgICBkYXRhLT5jbGVhckNoaWxkTm9k
ZUxpc3RDYWNoZSgpOworICAgIH0KKworICAgIGlmICghdHJlZVNjb3BlKCktPmhhc05vZGVMaXN0
Q2FjaGVzKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGZvciAoTm9kZSogbm9kZSA9IHRoaXM7
IG5vZGU7IG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCkpIHsKKyAgICAgICAgQVNTRVJUKHRoaXMg
PT0gbm9kZSB8fCAhbm9kZS0+aXNBdHRyaWJ1dGVOb2RlKCkpOwogICAgICAgICBpZiAoIW5vZGUt
Pmhhc1JhcmVEYXRhKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgTm9kZVJhcmVE
YXRhKiBkYXRhID0gbm9kZS0+cmFyZURhdGEoKTsKICAgICAgICAgaWYgKCFkYXRhLT5ub2RlTGlz
dHMoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIC8vIEZvciBhdHRyaWJ1dGUg
bm9kZXMsIHdlIG5lZWQgdG8gaW52YWxpZGF0ZSBjaGlsZE5vZGVzIGFzIHdlbGwuCi0gICAgICAg
IGlmIChub2RlLT5pc0F0dHJpYnV0ZU5vZGUoKSkKLSAgICAgICAgICAgIGRhdGEtPm5vZGVMaXN0
cygpLT5pbnZhbGlkYXRlQ2FjaGVzKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGRhdGEt
Pm5vZGVMaXN0cygpLT5pbnZhbGlkYXRlQ2FjaGVzVGhhdERlcGVuZE9uQXR0cmlidXRlcygpOwot
CisgICAgICAgIGRhdGEtPm5vZGVMaXN0cygpLT5pbnZhbGlkYXRlQ2FjaGVzVGhhdERlcGVuZE9u
QXR0cmlidXRlcygpOwogICAgICAgICByZW1vdmVOb2RlTGlzdENhY2hlSWZQb3NzaWJsZShub2Rl
LCBkYXRhKTsKICAgICB9CiB9CiAKIHZvaWQgTm9kZTo6aW52YWxpZGF0ZU5vZGVMaXN0c0NhY2hl
QWZ0ZXJDaGlsZHJlbkNoYW5nZWQoKQogeworICAgIGlmIChoYXNSYXJlRGF0YSgpKQorICAgICAg
ICByYXJlRGF0YSgpLT5jbGVhckNoaWxkTm9kZUxpc3RDYWNoZSgpOworCisgICAgaWYgKCF0cmVl
U2NvcGUoKS0+aGFzTm9kZUxpc3RDYWNoZXMoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIGZvciAo
Tm9kZSogbm9kZSA9IHRoaXM7IG5vZGU7IG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCkpIHsKICAg
ICAgICAgaWYgKCFub2RlLT5oYXNSYXJlRGF0YSgpKQogICAgICAgICAgICAgY29udGludWU7CkBA
IC0xMDgwLDcgKzEwODQsNiBAQCB2b2lkIE5vZGU6OnJlbW92ZUNhY2hlZENsYXNzTm9kZUxpc3Qo
Q2xhCiB7CiAgICAgQVNTRVJUKHJhcmVEYXRhKCkpOwogICAgIEFTU0VSVChyYXJlRGF0YSgpLT5u
b2RlTGlzdHMoKSk7Ci0gICAgQVNTRVJUX1VOVVNFRChsaXN0LCBsaXN0LT5oYXNPd25DYWNoZXMo
KSk7CiAKICAgICBOb2RlTGlzdHNOb2RlRGF0YSogZGF0YSA9IHJhcmVEYXRhKCktPm5vZGVMaXN0
cygpOwogICAgIEFTU0VSVF9VTlVTRUQobGlzdCwgbGlzdCA9PSBkYXRhLT5tX2NsYXNzTm9kZUxp
c3RDYWNoZS5nZXQoY2xhc3NOYW1lKSk7CkBAIC0xMDkxLDcgKzEwOTQsNiBAQCB2b2lkIE5vZGU6
OnJlbW92ZUNhY2hlZE5hbWVOb2RlTGlzdChOYW1lCiB7CiAgICAgQVNTRVJUKHJhcmVEYXRhKCkp
OwogICAgIEFTU0VSVChyYXJlRGF0YSgpLT5ub2RlTGlzdHMoKSk7Ci0gICAgQVNTRVJUX1VOVVNF
RChsaXN0LCBsaXN0LT5oYXNPd25DYWNoZXMoKSk7CiAKICAgICBOb2RlTGlzdHNOb2RlRGF0YSog
ZGF0YSA9IHJhcmVEYXRhKCktPm5vZGVMaXN0cygpOwogICAgIEFTU0VSVF9VTlVTRUQobGlzdCwg
bGlzdCA9PSBkYXRhLT5tX25hbWVOb2RlTGlzdENhY2hlLmdldChub2RlTmFtZSkpOwpAQCAtMTEw
Miw3ICsxMTA0LDYgQEAgdm9pZCBOb2RlOjpyZW1vdmVDYWNoZWRUYWdOb2RlTGlzdChUYWdObwog
ewogICAgIEFTU0VSVChyYXJlRGF0YSgpKTsKICAgICBBU1NFUlQocmFyZURhdGEoKS0+bm9kZUxp
c3RzKCkpOwotICAgIEFTU0VSVF9VTlVTRUQobGlzdCwgbGlzdC0+aGFzT3duQ2FjaGVzKCkpOwog
CiAgICAgTm9kZUxpc3RzTm9kZURhdGEqIGRhdGEgPSByYXJlRGF0YSgpLT5ub2RlTGlzdHMoKTsK
ICAgICBBU1NFUlRfVU5VU0VEKGxpc3QsIGxpc3QgPT0gZGF0YS0+bV90YWdOb2RlTGlzdENhY2hl
LmdldChuYW1lLmltcGwoKSkpOwpAQCAtMTExMyw3ICsxMTE0LDYgQEAgdm9pZCBOb2RlOjpyZW1v
dmVDYWNoZWRUYWdOb2RlTGlzdChUYWdObwogewogICAgIEFTU0VSVChyYXJlRGF0YSgpKTsKICAg
ICBBU1NFUlQocmFyZURhdGEoKS0+bm9kZUxpc3RzKCkpOwotICAgIEFTU0VSVF9VTlVTRUQobGlz
dCwgbGlzdC0+aGFzT3duQ2FjaGVzKCkpOwogCiAgICAgTm9kZUxpc3RzTm9kZURhdGEqIGRhdGEg
PSByYXJlRGF0YSgpLT5ub2RlTGlzdHMoKTsKICAgICBBU1NFUlRfVU5VU0VEKGxpc3QsIGxpc3Qg
PT0gZGF0YS0+bV90YWdOb2RlTGlzdENhY2hlTlMuZ2V0KG5hbWUuaW1wbCgpKSk7CkBAIC0xMTI0
LDkgKzExMjQsOSBAQCB2b2lkIE5vZGU6OnJlbW92ZUNhY2hlZExhYmVsc05vZGVMaXN0KER5CiB7
CiAgICAgQVNTRVJUKHJhcmVEYXRhKCkpOwogICAgIEFTU0VSVChyYXJlRGF0YSgpLT5ub2RlTGlz
dHMoKSk7Ci0gICAgQVNTRVJUX1VOVVNFRChsaXN0LCBsaXN0LT5oYXNPd25DYWNoZXMoKSk7Ci0g
ICAgCisKICAgICBOb2RlTGlzdHNOb2RlRGF0YSogZGF0YSA9IHJhcmVEYXRhKCktPm5vZGVMaXN0
cygpOworICAgIEFTU0VSVF9VTlVTRUQobGlzdCwgbGlzdCA9PSBkYXRhLT5tX2xhYmVsc05vZGVM
aXN0Q2FjaGUpOwogICAgIGRhdGEtPm1fbGFiZWxzTm9kZUxpc3RDYWNoZSA9IDA7CiB9CiAKQEAg
LTIzODksMTMgKzIzODksNiBAQCB2b2lkIE5vZGU6OnNob3dUcmVlRm9yVGhpc0Fjcm9zc0ZyYW1l
KCkgCiAKIHZvaWQgTm9kZUxpc3RzTm9kZURhdGE6OmludmFsaWRhdGVDYWNoZXMoKQogewotICAg
IGlmIChtX2NoaWxkTm9kZUxpc3RDYWNoZXMpIHsKLSAgICAgICAgaWYgKG1fY2hpbGROb2RlTGlz
dENhY2hlcy0+aGFzT25lUmVmKCkpCi0gICAgICAgICAgICBtX2NoaWxkTm9kZUxpc3RDYWNoZXMu
Y2xlYXIoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9jaGlsZE5vZGVMaXN0Q2FjaGVz
LT5yZXNldCgpOwotICAgIH0KLQogICAgIGlmIChtX2xhYmVsc05vZGVMaXN0Q2FjaGUpCiAgICAg
ICAgIG1fbGFiZWxzTm9kZUxpc3RDYWNoZS0+aW52YWxpZGF0ZUNhY2hlKCk7CiAgICAgVGFnTm9k
ZUxpc3RDYWNoZTo6Y29uc3RfaXRlcmF0b3IgdGFnQ2FjaGVFbmQgPSBtX3RhZ05vZGVMaXN0Q2Fj
aGUuZW5kKCk7CkBAIC0yNDM4LDkgKzI0MzEsNiBAQCBib29sIE5vZGVMaXN0c05vZGVEYXRhOjpp
c0VtcHR5KCkgY29uc3QKICAgICBpZiAoIW1fbGlzdHNXaXRoQ2FjaGVzLmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKG1fY2hpbGROb2RlTGlzdENhY2hlcykKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCiAgICAgaWYgKCFtX3RhZ05vZGVMaXN0Q2FjaGUuaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFtX3RhZ05vZGVMaXN0Q2FjaGVO
Uy5pc0VtcHR5KCkpCkBAIC0zMDA0LDYgKzI5OTQsMTcgQEAgdm9pZCBOb2RlUmFyZURhdGE6OmNy
ZWF0ZU5vZGVMaXN0cyhOb2RlKgogICAgICAgICB0cmVlU2NvcGUtPmFkZE5vZGVMaXN0Q2FjaGUo
KTsKIH0KIAordm9pZCBOb2RlUmFyZURhdGE6OmNsZWFyQ2hpbGROb2RlTGlzdENhY2hlKCkKK3sK
KyAgICBpZiAoIW1fY2hpbGROb2RlTGlzdENhY2hlKQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAobV9jaGlsZE5vZGVMaXN0Q2FjaGUtPmhhc09uZVJlZigpKQorICAgICAgICBtX2NoaWxkTm9k
ZUxpc3RDYWNoZS5jbGVhcigpOworICAgIGVsc2UKKyAgICAgICAgbV9jaGlsZE5vZGVMaXN0Q2Fj
aGUtPnJlc2V0KCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2lmbmRlZiBOREVC
VUcKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRhLmgJKHJldmlzaW9uIDEwMjQzMSkKKysr
IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMjIs
NiArMjIsNyBAQAogI2lmbmRlZiBOb2RlUmFyZURhdGFfaAogI2RlZmluZSBOb2RlUmFyZURhdGFf
aAogCisjaW5jbHVkZSAiQ2hpbGROb2RlTGlzdC5oIgogI2luY2x1ZGUgIkNsYXNzTm9kZUxpc3Qu
aCIKICNpbmNsdWRlICJET01TZXR0YWJsZVRva2VuTGlzdC5oIgogI2luY2x1ZGUgIkR5bmFtaWNO
b2RlTGlzdC5oIgpAQCAtNTEsOSArNTIsNyBAQCBzdHJ1Y3QgTm9kZUxpc3RzTm9kZURhdGEgewog
cHVibGljOgogICAgIHR5cGVkZWYgSGFzaFNldDxEeW5hbWljTm9kZUxpc3QqPiBOb2RlTGlzdFNl
dDsKICAgICBOb2RlTGlzdFNldCBtX2xpc3RzV2l0aENhY2hlczsKLSAgICAKLSAgICBSZWZQdHI8
RHluYW1pY05vZGVMaXN0OjpDYWNoZXM+IG1fY2hpbGROb2RlTGlzdENhY2hlczsKLSAgICAKKwog
ICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIENsYXNzTm9kZUxpc3QqPiBDbGFzc05vZGVMaXN0
Q2FjaGU7CiAgICAgQ2xhc3NOb2RlTGlzdENhY2hlIG1fY2xhc3NOb2RlTGlzdENhY2hlOwogCkBA
IC0xMjYsMTMgKzEyNSwxOSBAQCBwdWJsaWM6ICAgIAogICAgIHZvaWQgY2xlYXJOb2RlTGlzdHMo
KSB7IG1fbm9kZUxpc3RzLmNsZWFyKCk7IH0KICAgICB2b2lkIHNldE5vZGVMaXN0cyhQYXNzT3du
UHRyPE5vZGVMaXN0c05vZGVEYXRhPiBsaXN0cykgeyBtX25vZGVMaXN0cyA9IGxpc3RzOyB9CiAg
ICAgTm9kZUxpc3RzTm9kZURhdGEqIG5vZGVMaXN0cygpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZUxp
c3RzLmdldCgpOyB9Ci0KICAgICBOb2RlTGlzdHNOb2RlRGF0YSogZW5zdXJlTm9kZUxpc3RzKE5v
ZGUqIG5vZGUpCiAgICAgewogICAgICAgICBpZiAoIW1fbm9kZUxpc3RzKQogICAgICAgICAgICAg
Y3JlYXRlTm9kZUxpc3RzKG5vZGUpOwogICAgICAgICByZXR1cm4gbV9ub2RlTGlzdHMuZ2V0KCk7
CiAgICAgfQorICAgIHZvaWQgY2xlYXJDaGlsZE5vZGVMaXN0Q2FjaGUoKTsKKyAgICBEeW5hbWlj
Tm9kZUxpc3Q6OkNhY2hlcyogZW5zdXJlQ2hpbGROb2RlTGlzdENhY2hlKCkKKyAgICB7CisgICAg
ICAgIGlmICghbV9jaGlsZE5vZGVMaXN0Q2FjaGUpCisgICAgICAgICAgICBtX2NoaWxkTm9kZUxp
c3RDYWNoZSA9IER5bmFtaWNOb2RlTGlzdDo6Q2FjaGVzOjpjcmVhdGUoKTsKKyAgICAgICAgcmV0
dXJuIG1fY2hpbGROb2RlTGlzdENhY2hlLmdldCgpOworICAgIH0KIAogICAgIHNob3J0IHRhYklu
ZGV4KCkgY29uc3QgeyByZXR1cm4gbV90YWJJbmRleDsgfQogICAgIHZvaWQgc2V0VGFiSW5kZXhF
eHBsaWNpdGx5KHNob3J0IGluZGV4KSB7IG1fdGFiSW5kZXggPSBpbmRleDsgbV90YWJJbmRleFdh
c1NldEV4cGxpY2l0bHkgPSB0cnVlOyB9CkBAIC0yMzYsNiArMjQxLDcgQEAgcHJpdmF0ZToKIAog
ICAgIFRyZWVTY29wZSogbV90cmVlU2NvcGU7CiAgICAgT3duUHRyPE5vZGVMaXN0c05vZGVEYXRh
PiBtX25vZGVMaXN0czsKKyAgICBSZWZQdHI8RHluYW1pY05vZGVMaXN0OjpDYWNoZXM+IG1fY2hp
bGROb2RlTGlzdENhY2hlOwogICAgIE93blB0cjxFdmVudFRhcmdldERhdGE+IG1fZXZlbnRUYXJn
ZXREYXRhOwogICAgIHNob3J0IG1fdGFiSW5kZXg7CiAgICAgYm9vbCBtX3RhYkluZGV4V2FzU2V0
RXhwbGljaXRseSA6IDE7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118613</attachid>
            <date>2011-12-09 12:34:34 -0800</date>
            <delta_ts>2011-12-09 17:25:38 -0800</delta_ts>
            <desc>Updated per Darin&apos;s comment; also fixed ChildNodeList::itemWithName</desc>
            <filename>bug-73969-20111209123433.patch</filename>
            <type>text/plain</type>
            <size>19665</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMjQ0NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYwIEBACisyMDExLTEyLTA5ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIE5vZGVDaGlsZExpc3Qgc2hvdWxk
bid0IGJlIGluIE5vZGVMaXN0Tm9kZURhdGEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTczOTY5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTW92ZSBOb2RlQ2hpbGRMaXN0IG91dCBvZiBOb2RlTGlzdE5vZGVE
YXRhIHRvIHNlcGFyYXRlIGl0IGZyb20gdGhlIG90aGVyIG5vZGUgbGlzdHMgaW4gb3JkZXIgdG8K
KyAgICAgICAgcmVzb2x2ZSB0aGUgYnVnIDczODUzLiBVbmxpa2Ugb3RoZXIgRHluYW1pY05vZGVM
aXN0LCB3ZSBkb24ndCBuZWVkIHRvIGludmFsaWRhdGUgTm9kZUNoaWxkTGlzdAorICAgICAgICBv
biBhbmNlc3RvcnMgd2hlbiBjaGlsZHJlbiBjaGFuZ2UuIE1vdmluZyBDaGlsZE5vZGVMaXN0IG91
dCBvZiBOb2RlTGlzdE5vZGVEYXRhIG1ha2VzIHRoaXMgZWFzaWVyCisgICAgICAgIGFuZCB0aGUg
bGlmZS1jeWNsZSBvZiBub2RlIGxpc3RzIGluIE5vZGVMaXN0Tm9kZURhdGEgbW9yZSBjb25zaXN0
ZW50LgorCisgICAgICAgIEFsc28gbWFrZSBDaGlsZE5vZGVMaXN0IG5vdCBpbmhlcml0IGZyb20g
RHluYW1pY05vZGVMaXN0IHNpbmNlIHdlIGRvbid0IHdhbnQgdG8gaGFzTm9kZUxpc3RDYWNoZXMK
KyAgICAgICAgdG8gcmV0dXJuIHRydWUganVzdCBiZWNhdXNlIHdlIGhhdmUgYSBjaGlsZCBub2Rl
IHNvbWV3aGVyZSBpbiB0aGUgZG9jdW1lbnQuCisgICAgICAgIFRoZXNlIHR3byBvYmplY3RzIGJl
aGF2ZSB2ZXJ5IGRpZmZlcmVudGx5IGFueXdheS4gVGhlIG9ubHkgZHJhd2JhY2sgaXMgdGhhdCB3
ZSBoYXZlIHRvIHNvbWV3aGF0CisgICAgICAgIGR1cGxpY2F0ZSB0aGUgY29kZSBmb3IgaXRlbVdp
dGhOYW1lIGJ1dCB0aGF0IHNlZW1zIG9rYXkgYmVjYXVzZSBub3cgd2UgY2FuIGRvIGNoaWxkIG5v
ZGUgbGlzdAorICAgICAgICBzcGVjaWZpYyBvcHRpbWl6YXRpb25zLgorCisgICAgICAgICogZG9t
L0NoaWxkTm9kZUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hpbGROb2RlTGlzdDo6Q2hp
bGROb2RlTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZE5vZGVMaXN0OjpsZW5ndGgpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2hpbGROb2RlTGlzdDo6aXRlbSk6CisgICAgICAgIChXZWJDb3Jl
OjptYXRjaGVzSWQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTm9kZUxpc3Q6Oml0
ZW1XaXRoTmFtZSk6IEFkZGVkLgorICAgICAgICAqIGRvbS9DaGlsZE5vZGVMaXN0Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpDaGlsZE5vZGVMaXN0OjpjcmVhdGUpOgorICAgICAgICAqIGRvbS9Db250
YWluZXJOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5lck5vZGU6OmNoaWxkcmVu
Q2hhbmdlZCk6IEFsd2F5cyBjYWxsIGludmFsaWRhdGVOb2RlTGlzdHNDYWNoZUFmdGVyQ2hpbGRy
ZW5DaGFuZ2VkCisgICAgICAgIHNpbmNlIHRoZSBlYXJseSBleGl0IGlzIG5vdyBpbnNpZGUgdGhl
IGZ1bmN0aW9uLgorICAgICAgICAqIGRvbS9EeW5hbWljTm9kZUxpc3QuY3BwOiBMb3RzIG9mIGNs
ZWFudXAhCisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljTm9kZUxpc3Q6OkR5bmFtaWNOb2RlTGlz
dCk6IFJlbW92ZWQgYSBjb25zdHJ1Y3RvciBmb3IgQ2hpbGROb2RlTGlzdC4KKyAgICAgICAgKFdl
YkNvcmU6OkR5bmFtaWNOb2RlTGlzdDo6aXRlbVdpdGhOYW1lKTogVXNlIGlzRGVzY2VuZGFudE9m
IGluc3RlYWQgb2YgYSBtYW51YWwgbG9vcC4KKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNOb2Rl
TGlzdDo6aW52YWxpZGF0ZUNhY2hlKToKKyAgICAgICAgKiBkb20vRHluYW1pY05vZGVMaXN0Lmg6
CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Y2hpbGRO
b2Rlcyk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpyZWdpc3RlckR5bmFtaWNOb2RlTGlzdCk6
IE5vIGxvbmdlciBjaGVja3MgaGFzT3duQ2FjaGVzKCkuCisgICAgICAgIChXZWJDb3JlOjpOb2Rl
Ojp1bnJlZ2lzdGVyRHluYW1pY05vZGVMaXN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpO
b2RlOjppbnZhbGlkYXRlTm9kZUxpc3RzQ2FjaGVBZnRlckF0dHJpYnV0ZUNoYW5nZWQpOiBDbGVh
ciBDaGlsZE5vZGVMaXN0J3MgY2FjaGUKKyAgICAgICAgZXhwbGljaXRseSBhdCB0aGUgYmVnaW5u
aW5nIGZvciBhbiBhdHRyaWJ1dGUgbm9kZS4gRXhpdCBlYXJseSBpZiB0aGVyZSBhcmUgbm8gRHlu
YW1pY05vZGVMaXN0LgorICAgICAgICBObyBuZWVkIHRvIGRvIHRoZSBzYW1lIGluIHRoZSBsb29w
IHNpbmNlIGFuIGF0dHJpYnV0ZSBub2RlIGNhbid0IGhhdmUgYW4gYXR0cmlidXRlIG5vZGUgYXMK
KyAgICAgICAgYW4gYW5jZXN0b3IuIEFsc28gZG9uJ3QgY2FsbCBpbnZhbGlkYXRlQ2FjaGVzIGlu
IGFsbCBjYXNlcyBiZWNhdXNlIG1vZGlmeWluZyBhdHRyaWJ1dGVzIGNhbiBuZXZlcgorICAgICAg
ICBhZmZlY3QgZ2V0RWxlbWVudHNCeVRhZ05hbWUgb3IgZ2V0RWxlbWVudHNCeVRhZ05hbWVOUy4K
KyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmludmFsaWRhdGVOb2RlTGlzdHNDYWNoZUFmdGVyQ2hp
bGRyZW5DaGFuZ2VkKTogTGlrZXdpc2UuIENsZWFyIENoaWxkTm9kZUxpc3QncworICAgICAgICBj
YWNoZSBleHBsaWNpdGx5IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxvb3AgYW5kIGV4aXQgZWFy
bHkgaWYgaGFzTm9kZUxpc3RDYWNoZXMoKSBpcyBmYWxzZS4KKyAgICAgICAgKFdlYkNvcmU6Ok5v
ZGU6OnJlbW92ZUNhY2hlZENsYXNzTm9kZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6
cmVtb3ZlQ2FjaGVkTmFtZU5vZGVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnJlbW92
ZUNhY2hlZFRhZ05vZGVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnJlbW92ZUNhY2hl
ZExhYmVsc05vZGVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVMaXN0c05vZGVEYXRhOjpp
bnZhbGlkYXRlQ2FjaGVzKTogTm8gbG9uZ2VyIGNsZWFycyBtX2NoaWxkTm9kZUxpc3RDYWNoZXMu
IEl0J3MgZG9uZQorICAgICAgICBpbiBpbnZhbGlkYXRlTm9kZUxpc3RzQ2FjaGVBZnRlckF0dHJp
YnV0ZUNoYW5nZWQgYW5kIGludmFsaWRhdGVOb2RlTGlzdHNDYWNoZUFmdGVyQ2hpbGRyZW5DaGFu
Z2VkLgorICAgICAgICAoV2ViQ29yZTo6Tm9kZUxpc3RzTm9kZURhdGE6OmlzRW1wdHkpOgorICAg
ICAgICAoV2ViQ29yZTo6Tm9kZVJhcmVEYXRhOjpjbGVhckNoaWxkTm9kZUxpc3RDYWNoZSk6IEFk
ZGVkLgorICAgICAgICAqIGRvbS9Ob2RlUmFyZURhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok5v
ZGVSYXJlRGF0YTo6bm9kZUxpc3RzKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVSYXJlRGF0YTo6
ZW5zdXJlQ2hpbGROb2RlTGlzdENhY2hlKTogQWRkZWQuCisKIDIwMTEtMTItMDkgIFBldGVyIFJ5
YmluICA8cGV0ZXIucnliaW5AZ21haWwuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFtw
cm90b2NvbF0gZ2VuZXJhdGUgQysrIGNsYXNzZXMgZm9yIHByb3RvY29sIEpTT04gbmFtZWQgdHlw
ZXMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZE5vZGVMaXN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGROb2RlTGlzdC5jcHAJKHJldmlzaW9uIDEwMjQ0
NCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZE5vZGVMaXN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMyw2ICszLDcgQEAKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAo
a29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11
ZWxsZXJAa2RlLm9yZykKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNywgMjAwOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjcsOCArMjgs
OSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNoaWxkTm9kZUxpc3Q6OkNoaWxkTm9kZUxp
c3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgRHluYW1pY05vZGVMaXN0OjpDYWNoZXMqIGlu
Zm8pCi0gICAgOiBEeW5hbWljTm9kZUxpc3Qocm9vdE5vZGUsIGluZm8pCitDaGlsZE5vZGVMaXN0
OjpDaGlsZE5vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gbm9kZSwgRHluYW1pY05vZGVMaXN0OjpD
YWNoZXMqIGNhY2hlcykKKyAgICA6IG1fbm9kZShub2RlKQorICAgICwgbV9jYWNoZXMoY2FjaGVz
KQogewogfQogCkBAIC0zOCw3ICs0MCw3IEBAIHVuc2lnbmVkIENoaWxkTm9kZUxpc3Q6Omxlbmd0
aCgpIGNvbnN0CiAgICAgICAgIHJldHVybiBtX2NhY2hlcy0+Y2FjaGVkTGVuZ3RoOwogCiAgICAg
dW5zaWduZWQgbGVuID0gMDsKLSAgICBmb3IgKE5vZGUqIG4gPSBtX3Jvb3ROb2RlLT5maXJzdENo
aWxkKCk7IG47IG4gPSBuLT5uZXh0U2libGluZygpKQorICAgIGZvciAoTm9kZSogbiA9IG1fbm9k
ZS0+Zmlyc3RDaGlsZCgpOyBuOyBuID0gbi0+bmV4dFNpYmxpbmcoKSkKICAgICAgICAgbGVuKys7
CiAKICAgICBtX2NhY2hlcy0+Y2FjaGVkTGVuZ3RoID0gbGVuOwpAQCAtNTAsNyArNTIsNyBAQCB1
bnNpZ25lZCBDaGlsZE5vZGVMaXN0OjpsZW5ndGgoKSBjb25zdAogTm9kZSogQ2hpbGROb2RlTGlz
dDo6aXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3QKIHsKICAgICB1bnNpZ25lZCBpbnQgcG9zID0g
MDsKLSAgICBOb2RlKiBuID0gbV9yb290Tm9kZS0+Zmlyc3RDaGlsZCgpOworICAgIE5vZGUqIG4g
PSBtX25vZGUtPmZpcnN0Q2hpbGQoKTsKIAogICAgIGlmIChtX2NhY2hlcy0+aXNJdGVtQ2FjaGVW
YWxpZCkgewogICAgICAgICBpZiAoaW5kZXggPT0gbV9jYWNoZXMtPmxhc3RJdGVtT2Zmc2V0KQpA
QCAtNzEsNyArNzMsNyBAQCBOb2RlKiBDaGlsZE5vZGVMaXN0OjppdGVtKHVuc2lnbmVkIGluZGV4
CiAgICAgICAgIGludCBkaWZmID0gaW5kZXggLSBwb3M7CiAgICAgICAgIHVuc2lnbmVkIGRpc3Qg
PSBhYnMoZGlmZik7CiAgICAgICAgIGlmIChkaXN0ID4gbV9jYWNoZXMtPmNhY2hlZExlbmd0aCAt
IDEgLSBpbmRleCkgewotICAgICAgICAgICAgbiA9IG1fcm9vdE5vZGUtPmxhc3RDaGlsZCgpOwor
ICAgICAgICAgICAgbiA9IG1fbm9kZS0+bGFzdENoaWxkKCk7CiAgICAgICAgICAgICBwb3MgPSBt
X2NhY2hlcy0+Y2FjaGVkTGVuZ3RoIC0gMTsKICAgICAgICAgfQogICAgIH0KQEAgLTk4LDEyICsx
MDAsMzQgQEAgTm9kZSogQ2hpbGROb2RlTGlzdDo6aXRlbSh1bnNpZ25lZCBpbmRleAogICAgIHJl
dHVybiAwOwogfQogCi1ib29sIENoaWxkTm9kZUxpc3Q6Om5vZGVNYXRjaGVzKEVsZW1lbnQqIHRl
c3ROb2RlKSBjb25zdAorc3RhdGljIGlubGluZSBib29sIG1hdGNoZXNJZChOb2RlKiBub2RlLCBj
b25zdCBBdG9taWNTdHJpbmcmIGVsZW1lbnRJZCkKIHsKLSAgICAvLyBOb3RlOiBEdWUgdG8gdGhl
IG92ZXJyaWRlcyBvZiB0aGUgbGVuZ3RoIGFuZCBpdGVtIGZ1bmN0aW9ucyBhYm92ZSwKLSAgICAv
LyB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIG9ubHkgYnkgRHluYW1pY05vZGVMaXN0Ojpp
dGVtV2l0aE5hbWUsCi0gICAgLy8gZm9yIGFuIGVsZW1lbnQgdGhhdCB3YXMgbG9jYXRlZCB3aXRo
IGdldEVsZW1lbnRCeUlkLgotICAgIHJldHVybiB0ZXN0Tm9kZS0+cGFyZW50Tm9kZSgpID09IG1f
cm9vdE5vZGU7CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHByb2JhYmx5IGJlIHVzaW5nIGdl
dElkQXR0cmlidXRlIGluc3RlYWQgb2YgaWRGb3JTdHlsZVJlc29sdXRpb24uCisgICAgcmV0dXJu
IG5vZGUtPmhhc0lEKCkgJiYgc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpLT5pZEZvclN0eWxl
UmVzb2x1dGlvbigpID09IGVsZW1lbnRJZDsKK30KKworTm9kZSogQ2hpbGROb2RlTGlzdDo6aXRl
bVdpdGhOYW1lKGNvbnN0IEF0b21pY1N0cmluZyYgZWxlbWVudElkKSBjb25zdAoreworICAgIGlm
IChtX2NhY2hlcy0+aXNJdGVtQ2FjaGVWYWxpZCAmJiBtYXRjaGVzSWQobV9jYWNoZXMtPmxhc3RJ
dGVtLCBlbGVtZW50SWQpKQorICAgICAgICByZXR1cm4gbV9jYWNoZXMtPmxhc3RJdGVtOworCisg
ICAgaWYgKG1fbm9kZS0+aXNEb2N1bWVudE5vZGUoKSB8fCBtX25vZGUtPmluRG9jdW1lbnQoKSkg
eworICAgICAgICBFbGVtZW50KiBub2RlID0gbV9ub2RlLT50cmVlU2NvcGUoKS0+Z2V0RWxlbWVu
dEJ5SWQoZWxlbWVudElkKTsKKyAgICAgICAgaWYgKCFub2RlIHx8IG5vZGUtPnBhcmVudE5vZGUo
KSA9PSBtX25vZGUpCisgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgLy8gSW4gdGhl
IGNhc2Ugb2YgbXVsdGlwbGUgbm9kZXMgd2l0aCB0aGUgc2FtZSBuYW1lLCBqdXN0IGZhbGwgdGhy
b3VnaC4KKyAgICB9CisKKyAgICB1bnNpZ25lZCBvZmZzZXQgPSAwOworICAgIGZvciAoTm9kZSog
bm9kZSA9IG1fbm9kZS0+Zmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gbm9kZS0+bmV4dFNpYmxp
bmcoKSkgeworICAgICAgICBpZiAobWF0Y2hlc0lkKG5vZGUsIGVsZW1lbnRJZCkpIHsKKyAgICAg
ICAgICAgIG1fY2FjaGVzLT5sYXN0SXRlbSA9IG5vZGU7CisgICAgICAgICAgICBtX2NhY2hlcy0+
bGFzdEl0ZW1PZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgICAgICBtX2NhY2hlcy0+aXNJdGVtQ2Fj
aGVWYWxpZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgfQorICAg
IH0KKyAgICByZXR1cm4gMDsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL0NoaWxkTm9kZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vQ2hpbGROb2RlTGlzdC5oCShyZXZpc2lvbiAxMDI0NDQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9kb20vQ2hpbGROb2RlTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zLDYgKzMsNyBAQAog
ICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQog
ICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQogICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yOSwyMSArMzAsMjQgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi0gICAgY2xhc3MgQ2hpbGROb2RlTGlzdCA6IHB1YmxpYyBEeW5hbWljTm9kZUxpc3Qg
ewotICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2hpbGROb2RlTGlzdD4g
Y3JlYXRlKFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIENhY2hlcyogY2FjaGVzKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENoaWxkTm9kZUxpc3Qocm9vdE5v
ZGUsIGNhY2hlcykpOwotICAgICAgICB9Ci0KLSAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBsZW5n
dGgoKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBOb2RlKiBpdGVtKHVuc2lnbmVkIGluZGV4KSBj
b25zdDsKLQotICAgIHByb3RlY3RlZDoKLSAgICAgICAgQ2hpbGROb2RlTGlzdChQYXNzUmVmUHRy
PE5vZGU+IHJvb3ROb2RlLCBDYWNoZXMqKTsKLQotICAgICAgICB2aXJ0dWFsIGJvb2wgbm9kZU1h
dGNoZXMoRWxlbWVudCopIGNvbnN0OwotICAgIH07CitjbGFzcyBDaGlsZE5vZGVMaXN0IDogcHVi
bGljIE5vZGVMaXN0IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDaGlsZE5vZGVM
aXN0PiBjcmVhdGUoUGFzc1JlZlB0cjxOb2RlPiBub2RlLCBEeW5hbWljTm9kZUxpc3Q6OkNhY2hl
cyogY2FjaGVzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDaGlsZE5vZGVM
aXN0KG5vZGUsIGNhY2hlcykpOworICAgIH0KKworICAgIHZpcnR1YWwgdW5zaWduZWQgbGVuZ3Ro
KCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBOb2RlKiBpdGVtKHVuc2lnbmVkIGluZGV4
KSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIE5vZGUqIGl0ZW1XaXRoTmFtZShjb25zdCBB
dG9taWNTdHJpbmcmIGVsZW1lbnRJZCkgY29uc3QgT1ZFUlJJREU7CisKK3Byb3RlY3RlZDoKKyAg
ICBDaGlsZE5vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4sIER5bmFtaWNOb2RlTGlzdDo6Q2FjaGVz
Kik7CisKK3ByaXZhdGU6CisgICAgUmVmUHRyPE5vZGU+IG1fbm9kZTsKKyAgICBtdXRhYmxlIFJl
ZlB0cjxEeW5hbWljTm9kZUxpc3Q6OkNhY2hlcz4gbV9jYWNoZXM7Cit9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAJKHJl
dmlzaW9uIDEwMjQ0NCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODQ0LDggKzg0NCw3IEBAIHZvaWQgQ29udGFpbmVyTm9kZTo6Y2hp
bGRyZW5DaGFuZ2VkKGJvb2wKICAgICBOb2RlOjpjaGlsZHJlbkNoYW5nZWQoY2hhbmdlZEJ5UGFy
c2VyLCBiZWZvcmVDaGFuZ2UsIGFmdGVyQ2hhbmdlLCBjaGlsZENvdW50RGVsdGEpOwogICAgIGlm
ICghY2hhbmdlZEJ5UGFyc2VyICYmIGNoaWxkQ291bnREZWx0YSkKICAgICAgICAgZG9jdW1lbnQo
KS0+dXBkYXRlUmFuZ2VzQWZ0ZXJDaGlsZHJlbkNoYW5nZWQodGhpcyk7Ci0gICAgaWYgKHRyZWVT
Y29wZSgpLT5oYXNOb2RlTGlzdENhY2hlcygpKQotICAgICAgICBpbnZhbGlkYXRlTm9kZUxpc3Rz
Q2FjaGVBZnRlckNoaWxkcmVuQ2hhbmdlZCgpOworICAgIGludmFsaWRhdGVOb2RlTGlzdHNDYWNo
ZUFmdGVyQ2hpbGRyZW5DaGFuZ2VkKCk7CiB9CiAKIHZvaWQgQ29udGFpbmVyTm9kZTo6Y2xvbmVD
aGlsZE5vZGVzKENvbnRhaW5lck5vZGUgKmNsb25lKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9t
L0R5bmFtaWNOb2RlTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0R5
bmFtaWNOb2RlTGlzdC5jcHAJKHJldmlzaW9uIDEwMjQ0NCkKKysrIFNvdXJjZS9XZWJDb3JlL2Rv
bS9EeW5hbWljTm9kZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxOCArMzEsOSBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiBEeW5hbWljTm9kZUxpc3Q6OkR5bmFtaWNOb2RlTGlzdChQYXNz
UmVmUHRyPE5vZGU+IHJvb3ROb2RlKQogICAgIDogbV9yb290Tm9kZShyb290Tm9kZSkKICAgICAs
IG1fY2FjaGVzKENhY2hlczo6Y3JlYXRlKCkpCi0gICAgLCBtX293bnNDYWNoZXModHJ1ZSkKIHsK
ICAgICBtX3Jvb3ROb2RlLT5yZWdpc3RlckR5bmFtaWNOb2RlTGlzdCh0aGlzKTsKLX0gICAgCi0K
LUR5bmFtaWNOb2RlTGlzdDo6RHluYW1pY05vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5v
ZGUsIER5bmFtaWNOb2RlTGlzdDo6Q2FjaGVzKiBjYWNoZXMpCi0gICAgOiBtX3Jvb3ROb2RlKHJv
b3ROb2RlKQotICAgICwgbV9jYWNoZXMoY2FjaGVzKQotICAgICwgbV9vd25zQ2FjaGVzKGZhbHNl
KQotewotICAgIG1fcm9vdE5vZGUtPnJlZ2lzdGVyRHluYW1pY05vZGVMaXN0KHRoaXMpOwotfSAg
ICAKK30KIAogRHluYW1pY05vZGVMaXN0Ojp+RHluYW1pY05vZGVMaXN0KCkKIHsKQEAgLTEyMywx
MiArMTE0LDggQEAgTm9kZSogRHluYW1pY05vZGVMaXN0OjppdGVtV2l0aE5hbWUoY29ucwogewog
ICAgIGlmIChtX3Jvb3ROb2RlLT5pc0RvY3VtZW50Tm9kZSgpIHx8IG1fcm9vdE5vZGUtPmluRG9j
dW1lbnQoKSkgewogICAgICAgICBFbGVtZW50KiBub2RlID0gbV9yb290Tm9kZS0+dHJlZVNjb3Bl
KCktPmdldEVsZW1lbnRCeUlkKGVsZW1lbnRJZCk7Ci0gICAgICAgIGlmIChub2RlICYmIG5vZGVN
YXRjaGVzKG5vZGUpKSB7Ci0gICAgICAgICAgICBmb3IgKENvbnRhaW5lck5vZGUqIHAgPSBub2Rl
LT5wYXJlbnROb2RlKCk7IHA7IHAgPSBwLT5wYXJlbnROb2RlKCkpIHsKLSAgICAgICAgICAgICAg
ICBpZiAocCA9PSBtX3Jvb3ROb2RlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICBpZiAobm9kZSAmJiBub2RlTWF0Y2hl
cyhub2RlKSAmJiBub2RlLT5pc0Rlc2NlbmRhbnRPZihtX3Jvb3ROb2RlLmdldCgpKSkKKyAgICAg
ICAgICAgIHJldHVybiBub2RlOwogICAgICAgICBpZiAoIW5vZGUpCiAgICAgICAgICAgICByZXR1
cm4gMDsKICAgICAgICAgLy8gSW4gdGhlIGNhc2Ugb2YgbXVsdGlwbGUgbm9kZXMgd2l0aCB0aGUg
c2FtZSBuYW1lLCBqdXN0IGZhbGwgdGhyb3VnaC4KQEAgLTE1Miw4ICsxMzksNiBAQCBib29sIER5
bmFtaWNOb2RlTGlzdDo6aXNEeW5hbWljTm9kZUxpc3QoCiAKIHZvaWQgRHluYW1pY05vZGVMaXN0
OjppbnZhbGlkYXRlQ2FjaGUoKQogewotICAgIC8vIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVk
IGZvciBub2RlIGxpc3RzIHRoYXQgb3duIHRoZWlyIG93biBjYWNoZXMuCi0gICAgQVNTRVJUKG1f
b3duc0NhY2hlcyk7CiAgICAgbV9jYWNoZXMtPnJlc2V0KCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9EeW5hbWljTm9kZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9kb20vRHluYW1pY05vZGVMaXN0LmgJKHJldmlzaW9uIDEwMjQ0NCkKKysrIFNvdXJjZS9XZWJD
b3JlL2RvbS9EeW5hbWljTm9kZUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsOCArNTEsNiBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdmlydHVhbCB+RHluYW1pY05vZGVMaXN0
KCk7CiAKLSAgICAgICAgYm9vbCBoYXNPd25DYWNoZXMoKSBjb25zdCB7IHJldHVybiBtX293bnND
YWNoZXM7IH0KLQogICAgICAgICAvLyBET00gbWV0aG9kcyAmIGF0dHJpYnV0ZXMgZm9yIE5vZGVM
aXN0CiAgICAgICAgIHZpcnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CiAgICAgICAgIHZp
cnR1YWwgTm9kZSogaXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3Q7CkBAIC02NCwxMyArNjIsMTEg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBEeW5hbWlj
Tm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSk7Ci0gICAgICAgIER5bmFtaWNOb2Rl
TGlzdChQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBDYWNoZXMqKTsKIAogICAgICAgICB2aXJ0
dWFsIGJvb2wgbm9kZU1hdGNoZXMoRWxlbWVudCopIGNvbnN0ID0gMDsKIAogICAgICAgICBSZWZQ
dHI8Tm9kZT4gbV9yb290Tm9kZTsKICAgICAgICAgbXV0YWJsZSBSZWZQdHI8Q2FjaGVzPiBtX2Nh
Y2hlczsKLSAgICAgICAgYm9vbCBtX293bnNDYWNoZXM7CiAKICAgICBwcml2YXRlOgogICAgICAg
ICB2aXJ0dWFsIGJvb2wgaXNEeW5hbWljTm9kZUxpc3QoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9k
ZS5jcHAJKHJldmlzaW9uIDEwMjQ0NCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjIzLDEwICs2MjMsNyBAQCB2b2lkIE5vZGU6OnNldE5vZGVWYWx1
ZShjb25zdCBTdHJpbmcmIC8qCiAKIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IE5vZGU6OmNoaWxkTm9k
ZXMoKQogewotICAgIE5vZGVMaXN0c05vZGVEYXRhKiBub2RlTGlzdHMgPSBlbnN1cmVSYXJlRGF0
YSgpLT5lbnN1cmVOb2RlTGlzdHModGhpcyk7Ci0gICAgaWYgKCFub2RlTGlzdHMtPm1fY2hpbGRO
b2RlTGlzdENhY2hlcykKLSAgICAgICAgbm9kZUxpc3RzLT5tX2NoaWxkTm9kZUxpc3RDYWNoZXMg
PSBEeW5hbWljTm9kZUxpc3Q6OkNhY2hlczo6Y3JlYXRlKCk7Ci0gICAgcmV0dXJuIENoaWxkTm9k
ZUxpc3Q6OmNyZWF0ZSh0aGlzLCBub2RlTGlzdHMtPm1fY2hpbGROb2RlTGlzdENhY2hlcy5nZXQo
KSk7CisgICAgcmV0dXJuIENoaWxkTm9kZUxpc3Q6OmNyZWF0ZSh0aGlzLCBlbnN1cmVSYXJlRGF0
YSgpLT5lbnN1cmVDaGlsZE5vZGVMaXN0Q2FjaGUoKSk7CiB9CiAKIE5vZGUgKk5vZGU6Omxhc3RE
ZXNjZW5kYW50KCkgY29uc3QKQEAgLTEwMTEsNDIgKzEwMDgsNDkgQEAgdm9pZCBOb2RlOjpyZWdp
c3RlckR5bmFtaWNOb2RlTGlzdChEeW5hbQogICAgIGlmIChkYXRhLT5ub2RlTGlzdHMoKSAmJiAo
IXRyZWVTY29wZSgpIHx8ICF0cmVlU2NvcGUoKS0+aGFzTm9kZUxpc3RDYWNoZXMoKSkpCiAgICAg
ICAgIGRhdGEtPm5vZGVMaXN0cygpLT5pbnZhbGlkYXRlQ2FjaGVzKCk7CiAKLSAgICBpZiAobGlz
dC0+aGFzT3duQ2FjaGVzKCkpCi0gICAgICAgIGRhdGEtPmVuc3VyZU5vZGVMaXN0cyh0aGlzKS0+
bV9saXN0c1dpdGhDYWNoZXMuYWRkKGxpc3QpOworICAgIGRhdGEtPmVuc3VyZU5vZGVMaXN0cyh0
aGlzKS0+bV9saXN0c1dpdGhDYWNoZXMuYWRkKGxpc3QpOwogfQogCiB2b2lkIE5vZGU6OnVucmVn
aXN0ZXJEeW5hbWljTm9kZUxpc3QoRHluYW1pY05vZGVMaXN0KiBsaXN0KQogewogICAgIEFTU0VS
VChyYXJlRGF0YSgpKTsKICAgICBBU1NFUlQocmFyZURhdGEoKS0+bm9kZUxpc3RzKCkpOwotICAg
IGlmIChsaXN0LT5oYXNPd25DYWNoZXMoKSkgewotICAgICAgICBOb2RlUmFyZURhdGEqIGRhdGEg
PSByYXJlRGF0YSgpOwotICAgICAgICBkYXRhLT5ub2RlTGlzdHMoKS0+bV9saXN0c1dpdGhDYWNo
ZXMucmVtb3ZlKGxpc3QpOwotICAgICAgICByZW1vdmVOb2RlTGlzdENhY2hlSWZQb3NzaWJsZSh0
aGlzLCBkYXRhKTsKLSAgICB9CisgICAgTm9kZVJhcmVEYXRhKiBkYXRhID0gcmFyZURhdGEoKTsK
KyAgICBkYXRhLT5ub2RlTGlzdHMoKS0+bV9saXN0c1dpdGhDYWNoZXMucmVtb3ZlKGxpc3QpOwor
ICAgIHJlbW92ZU5vZGVMaXN0Q2FjaGVJZlBvc3NpYmxlKHRoaXMsIGRhdGEpOwogfQogCiB2b2lk
IE5vZGU6OmludmFsaWRhdGVOb2RlTGlzdHNDYWNoZUFmdGVyQXR0cmlidXRlQ2hhbmdlZCgpCiB7
CisgICAgaWYgKGhhc1JhcmVEYXRhKCkgJiYgaXNBdHRyaWJ1dGVOb2RlKCkpIHsKKyAgICAgICAg
Tm9kZVJhcmVEYXRhKiBkYXRhID0gcmFyZURhdGEoKTsKKyAgICAgICAgQVNTRVJUKCFkYXRhLT5u
b2RlTGlzdHMoKSk7CisgICAgICAgIGRhdGEtPmNsZWFyQ2hpbGROb2RlTGlzdENhY2hlKCk7Cisg
ICAgfQorCisgICAgaWYgKCF0cmVlU2NvcGUoKS0+aGFzTm9kZUxpc3RDYWNoZXMoKSkKKyAgICAg
ICAgcmV0dXJuOworCiAgICAgZm9yIChOb2RlKiBub2RlID0gdGhpczsgbm9kZTsgbm9kZSA9IG5v
ZGUtPnBhcmVudE5vZGUoKSkgeworICAgICAgICBBU1NFUlQodGhpcyA9PSBub2RlIHx8ICFub2Rl
LT5pc0F0dHJpYnV0ZU5vZGUoKSk7CiAgICAgICAgIGlmICghbm9kZS0+aGFzUmFyZURhdGEoKSkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBOb2RlUmFyZURhdGEqIGRhdGEgPSBub2Rl
LT5yYXJlRGF0YSgpOwogICAgICAgICBpZiAoIWRhdGEtPm5vZGVMaXN0cygpKQogICAgICAgICAg
ICAgY29udGludWU7CiAKLSAgICAgICAgLy8gRm9yIGF0dHJpYnV0ZSBub2Rlcywgd2UgbmVlZCB0
byBpbnZhbGlkYXRlIGNoaWxkTm9kZXMgYXMgd2VsbC4KLSAgICAgICAgaWYgKG5vZGUtPmlzQXR0
cmlidXRlTm9kZSgpKQotICAgICAgICAgICAgZGF0YS0+bm9kZUxpc3RzKCktPmludmFsaWRhdGVD
YWNoZXMoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZGF0YS0+bm9kZUxpc3RzKCktPmlu
dmFsaWRhdGVDYWNoZXNUaGF0RGVwZW5kT25BdHRyaWJ1dGVzKCk7Ci0KKyAgICAgICAgZGF0YS0+
bm9kZUxpc3RzKCktPmludmFsaWRhdGVDYWNoZXNUaGF0RGVwZW5kT25BdHRyaWJ1dGVzKCk7CiAg
ICAgICAgIHJlbW92ZU5vZGVMaXN0Q2FjaGVJZlBvc3NpYmxlKG5vZGUsIGRhdGEpOwogICAgIH0K
IH0KIAogdm9pZCBOb2RlOjppbnZhbGlkYXRlTm9kZUxpc3RzQ2FjaGVBZnRlckNoaWxkcmVuQ2hh
bmdlZCgpCiB7CisgICAgaWYgKGhhc1JhcmVEYXRhKCkpCisgICAgICAgIHJhcmVEYXRhKCktPmNs
ZWFyQ2hpbGROb2RlTGlzdENhY2hlKCk7CisKKyAgICBpZiAoIXRyZWVTY29wZSgpLT5oYXNOb2Rl
TGlzdENhY2hlcygpKQorICAgICAgICByZXR1cm47CiAgICAgZm9yIChOb2RlKiBub2RlID0gdGhp
czsgbm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkgewogICAgICAgICBpZiAoIW5vZGUt
Pmhhc1JhcmVEYXRhKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTEwODAsNyArMTA4NCw2
IEBAIHZvaWQgTm9kZTo6cmVtb3ZlQ2FjaGVkQ2xhc3NOb2RlTGlzdChDbGEKIHsKICAgICBBU1NF
UlQocmFyZURhdGEoKSk7CiAgICAgQVNTRVJUKHJhcmVEYXRhKCktPm5vZGVMaXN0cygpKTsKLSAg
ICBBU1NFUlRfVU5VU0VEKGxpc3QsIGxpc3QtPmhhc093bkNhY2hlcygpKTsKIAogICAgIE5vZGVM
aXN0c05vZGVEYXRhKiBkYXRhID0gcmFyZURhdGEoKS0+bm9kZUxpc3RzKCk7CiAgICAgQVNTRVJU
X1VOVVNFRChsaXN0LCBsaXN0ID09IGRhdGEtPm1fY2xhc3NOb2RlTGlzdENhY2hlLmdldChjbGFz
c05hbWUpKTsKQEAgLTEwOTEsNyArMTA5NCw2IEBAIHZvaWQgTm9kZTo6cmVtb3ZlQ2FjaGVkTmFt
ZU5vZGVMaXN0KE5hbWUKIHsKICAgICBBU1NFUlQocmFyZURhdGEoKSk7CiAgICAgQVNTRVJUKHJh
cmVEYXRhKCktPm5vZGVMaXN0cygpKTsKLSAgICBBU1NFUlRfVU5VU0VEKGxpc3QsIGxpc3QtPmhh
c093bkNhY2hlcygpKTsKIAogICAgIE5vZGVMaXN0c05vZGVEYXRhKiBkYXRhID0gcmFyZURhdGEo
KS0+bm9kZUxpc3RzKCk7CiAgICAgQVNTRVJUX1VOVVNFRChsaXN0LCBsaXN0ID09IGRhdGEtPm1f
bmFtZU5vZGVMaXN0Q2FjaGUuZ2V0KG5vZGVOYW1lKSk7CkBAIC0xMTAyLDcgKzExMDQsNiBAQCB2
b2lkIE5vZGU6OnJlbW92ZUNhY2hlZFRhZ05vZGVMaXN0KFRhZ05vCiB7CiAgICAgQVNTRVJUKHJh
cmVEYXRhKCkpOwogICAgIEFTU0VSVChyYXJlRGF0YSgpLT5ub2RlTGlzdHMoKSk7Ci0gICAgQVNT
RVJUX1VOVVNFRChsaXN0LCBsaXN0LT5oYXNPd25DYWNoZXMoKSk7CiAKICAgICBOb2RlTGlzdHNO
b2RlRGF0YSogZGF0YSA9IHJhcmVEYXRhKCktPm5vZGVMaXN0cygpOwogICAgIEFTU0VSVF9VTlVT
RUQobGlzdCwgbGlzdCA9PSBkYXRhLT5tX3RhZ05vZGVMaXN0Q2FjaGUuZ2V0KG5hbWUuaW1wbCgp
KSk7CkBAIC0xMTEzLDcgKzExMTQsNiBAQCB2b2lkIE5vZGU6OnJlbW92ZUNhY2hlZFRhZ05vZGVM
aXN0KFRhZ05vCiB7CiAgICAgQVNTRVJUKHJhcmVEYXRhKCkpOwogICAgIEFTU0VSVChyYXJlRGF0
YSgpLT5ub2RlTGlzdHMoKSk7Ci0gICAgQVNTRVJUX1VOVVNFRChsaXN0LCBsaXN0LT5oYXNPd25D
YWNoZXMoKSk7CiAKICAgICBOb2RlTGlzdHNOb2RlRGF0YSogZGF0YSA9IHJhcmVEYXRhKCktPm5v
ZGVMaXN0cygpOwogICAgIEFTU0VSVF9VTlVTRUQobGlzdCwgbGlzdCA9PSBkYXRhLT5tX3RhZ05v
ZGVMaXN0Q2FjaGVOUy5nZXQobmFtZS5pbXBsKCkpKTsKQEAgLTExMjQsOSArMTEyNCw5IEBAIHZv
aWQgTm9kZTo6cmVtb3ZlQ2FjaGVkTGFiZWxzTm9kZUxpc3QoRHkKIHsKICAgICBBU1NFUlQocmFy
ZURhdGEoKSk7CiAgICAgQVNTRVJUKHJhcmVEYXRhKCktPm5vZGVMaXN0cygpKTsKLSAgICBBU1NF
UlRfVU5VU0VEKGxpc3QsIGxpc3QtPmhhc093bkNhY2hlcygpKTsKLSAgICAKKwogICAgIE5vZGVM
aXN0c05vZGVEYXRhKiBkYXRhID0gcmFyZURhdGEoKS0+bm9kZUxpc3RzKCk7CisgICAgQVNTRVJU
X1VOVVNFRChsaXN0LCBsaXN0ID09IGRhdGEtPm1fbGFiZWxzTm9kZUxpc3RDYWNoZSk7CiAgICAg
ZGF0YS0+bV9sYWJlbHNOb2RlTGlzdENhY2hlID0gMDsKIH0KIApAQCAtMjM4OSwxMyArMjM4OSw2
IEBAIHZvaWQgTm9kZTo6c2hvd1RyZWVGb3JUaGlzQWNyb3NzRnJhbWUoKSAKIAogdm9pZCBOb2Rl
TGlzdHNOb2RlRGF0YTo6aW52YWxpZGF0ZUNhY2hlcygpCiB7Ci0gICAgaWYgKG1fY2hpbGROb2Rl
TGlzdENhY2hlcykgewotICAgICAgICBpZiAobV9jaGlsZE5vZGVMaXN0Q2FjaGVzLT5oYXNPbmVS
ZWYoKSkKLSAgICAgICAgICAgIG1fY2hpbGROb2RlTGlzdENhY2hlcy5jbGVhcigpOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBtX2NoaWxkTm9kZUxpc3RDYWNoZXMtPnJlc2V0KCk7Ci0gICAg
fQotCiAgICAgaWYgKG1fbGFiZWxzTm9kZUxpc3RDYWNoZSkKICAgICAgICAgbV9sYWJlbHNOb2Rl
TGlzdENhY2hlLT5pbnZhbGlkYXRlQ2FjaGUoKTsKICAgICBUYWdOb2RlTGlzdENhY2hlOjpjb25z
dF9pdGVyYXRvciB0YWdDYWNoZUVuZCA9IG1fdGFnTm9kZUxpc3RDYWNoZS5lbmQoKTsKQEAgLTI0
MzgsOSArMjQzMSw2IEBAIGJvb2wgTm9kZUxpc3RzTm9kZURhdGE6OmlzRW1wdHkoKSBjb25zdAog
ICAgIGlmICghbV9saXN0c1dpdGhDYWNoZXMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBpZiAobV9jaGlsZE5vZGVMaXN0Q2FjaGVzKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KICAgICBpZiAoIW1fdGFnTm9kZUxpc3RDYWNoZS5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICBpZiAoIW1fdGFnTm9kZUxpc3RDYWNoZU5TLmlzRW1wdHkoKSkKQEAg
LTMwMDQsNiArMjk5NCwxNyBAQCB2b2lkIE5vZGVSYXJlRGF0YTo6Y3JlYXRlTm9kZUxpc3RzKE5v
ZGUqCiAgICAgICAgIHRyZWVTY29wZS0+YWRkTm9kZUxpc3RDYWNoZSgpOwogfQogCit2b2lkIE5v
ZGVSYXJlRGF0YTo6Y2xlYXJDaGlsZE5vZGVMaXN0Q2FjaGUoKQoreworICAgIGlmICghbV9jaGls
ZE5vZGVMaXN0Q2FjaGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2NoaWxkTm9kZUxp
c3RDYWNoZS0+aGFzT25lUmVmKCkpCisgICAgICAgIG1fY2hpbGROb2RlTGlzdENhY2hlLmNsZWFy
KCk7CisgICAgZWxzZQorICAgICAgICBtX2NoaWxkTm9kZUxpc3RDYWNoZS0+cmVzZXQoKTsKK30K
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjaWZuZGVmIE5ERUJVRwpJbmRleDogU291cmNl
L1dlYkNvcmUvZG9tL05vZGVSYXJlRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9Ob2RlUmFyZURhdGEuaAkocmV2aXNpb24gMTAyNDQ0KQorKysgU291cmNlL1dlYkNvcmUv
ZG9tL05vZGVSYXJlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAjaWZu
ZGVmIE5vZGVSYXJlRGF0YV9oCiAjZGVmaW5lIE5vZGVSYXJlRGF0YV9oCiAKKyNpbmNsdWRlICJD
aGlsZE5vZGVMaXN0LmgiCiAjaW5jbHVkZSAiQ2xhc3NOb2RlTGlzdC5oIgogI2luY2x1ZGUgIkRP
TVNldHRhYmxlVG9rZW5MaXN0LmgiCiAjaW5jbHVkZSAiRHluYW1pY05vZGVMaXN0LmgiCkBAIC01
MSw5ICs1Miw3IEBAIHN0cnVjdCBOb2RlTGlzdHNOb2RlRGF0YSB7CiBwdWJsaWM6CiAgICAgdHlw
ZWRlZiBIYXNoU2V0PER5bmFtaWNOb2RlTGlzdCo+IE5vZGVMaXN0U2V0OwogICAgIE5vZGVMaXN0
U2V0IG1fbGlzdHNXaXRoQ2FjaGVzOwotICAgIAotICAgIFJlZlB0cjxEeW5hbWljTm9kZUxpc3Q6
OkNhY2hlcz4gbV9jaGlsZE5vZGVMaXN0Q2FjaGVzOwotICAgIAorCiAgICAgdHlwZWRlZiBIYXNo
TWFwPFN0cmluZywgQ2xhc3NOb2RlTGlzdCo+IENsYXNzTm9kZUxpc3RDYWNoZTsKICAgICBDbGFz
c05vZGVMaXN0Q2FjaGUgbV9jbGFzc05vZGVMaXN0Q2FjaGU7CiAKQEAgLTEyNiwxMyArMTI1LDE5
IEBAIHB1YmxpYzogICAgCiAgICAgdm9pZCBjbGVhck5vZGVMaXN0cygpIHsgbV9ub2RlTGlzdHMu
Y2xlYXIoKTsgfQogICAgIHZvaWQgc2V0Tm9kZUxpc3RzKFBhc3NPd25QdHI8Tm9kZUxpc3RzTm9k
ZURhdGE+IGxpc3RzKSB7IG1fbm9kZUxpc3RzID0gbGlzdHM7IH0KICAgICBOb2RlTGlzdHNOb2Rl
RGF0YSogbm9kZUxpc3RzKCkgY29uc3QgeyByZXR1cm4gbV9ub2RlTGlzdHMuZ2V0KCk7IH0KLQog
ICAgIE5vZGVMaXN0c05vZGVEYXRhKiBlbnN1cmVOb2RlTGlzdHMoTm9kZSogbm9kZSkKICAgICB7
CiAgICAgICAgIGlmICghbV9ub2RlTGlzdHMpCiAgICAgICAgICAgICBjcmVhdGVOb2RlTGlzdHMo
bm9kZSk7CiAgICAgICAgIHJldHVybiBtX25vZGVMaXN0cy5nZXQoKTsKICAgICB9CisgICAgdm9p
ZCBjbGVhckNoaWxkTm9kZUxpc3RDYWNoZSgpOworICAgIER5bmFtaWNOb2RlTGlzdDo6Q2FjaGVz
KiBlbnN1cmVDaGlsZE5vZGVMaXN0Q2FjaGUoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2NoaWxk
Tm9kZUxpc3RDYWNoZSkKKyAgICAgICAgICAgIG1fY2hpbGROb2RlTGlzdENhY2hlID0gRHluYW1p
Y05vZGVMaXN0OjpDYWNoZXM6OmNyZWF0ZSgpOworICAgICAgICByZXR1cm4gbV9jaGlsZE5vZGVM
aXN0Q2FjaGUuZ2V0KCk7CisgICAgfQogCiAgICAgc2hvcnQgdGFiSW5kZXgoKSBjb25zdCB7IHJl
dHVybiBtX3RhYkluZGV4OyB9CiAgICAgdm9pZCBzZXRUYWJJbmRleEV4cGxpY2l0bHkoc2hvcnQg
aW5kZXgpIHsgbV90YWJJbmRleCA9IGluZGV4OyBtX3RhYkluZGV4V2FzU2V0RXhwbGljaXRseSA9
IHRydWU7IH0KQEAgLTIzNiw2ICsyNDEsNyBAQCBwcml2YXRlOgogCiAgICAgVHJlZVNjb3BlKiBt
X3RyZWVTY29wZTsKICAgICBPd25QdHI8Tm9kZUxpc3RzTm9kZURhdGE+IG1fbm9kZUxpc3RzOwor
ICAgIFJlZlB0cjxEeW5hbWljTm9kZUxpc3Q6OkNhY2hlcz4gbV9jaGlsZE5vZGVMaXN0Q2FjaGU7
CiAgICAgT3duUHRyPEV2ZW50VGFyZ2V0RGF0YT4gbV9ldmVudFRhcmdldERhdGE7CiAgICAgc2hv
cnQgbV90YWJJbmRleDsKICAgICBib29sIG1fdGFiSW5kZXhXYXNTZXRFeHBsaWNpdGx5IDogMTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118669</attachid>
            <date>2011-12-09 17:25:42 -0800</date>
            <delta_ts>2011-12-09 17:51:09 -0800</delta_ts>
            <desc>Fixed the bug</desc>
            <filename>bug-73969-20111209172541.patch</filename>
            <type>text/plain</type>
            <size>21827</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMjQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYyIEBACisyMDExLTEyLTA5ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIE5vZGVDaGlsZExpc3Qgc2hvdWxk
bid0IGJlIGluIE5vZGVMaXN0Tm9kZURhdGEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTczOTY5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTW92ZSBOb2RlQ2hpbGRMaXN0IG91dCBvZiBOb2RlTGlzdE5vZGVE
YXRhIHRvIHNlcGFyYXRlIGl0IGZyb20gdGhlIG90aGVyIG5vZGUgbGlzdHMgaW4gb3JkZXIgdG8K
KyAgICAgICAgcmVzb2x2ZSB0aGUgYnVnIDczODUzLiBVbmxpa2Ugb3RoZXIgRHluYW1pY05vZGVM
aXN0LCB3ZSBkb24ndCBuZWVkIHRvIGludmFsaWRhdGUgTm9kZUNoaWxkTGlzdAorICAgICAgICBv
biBhbmNlc3RvcnMgd2hlbiBjaGlsZHJlbiBjaGFuZ2UuIE1vdmluZyBDaGlsZE5vZGVMaXN0IG91
dCBvZiBOb2RlTGlzdE5vZGVEYXRhIG1ha2VzIHRoaXMgZWFzaWVyCisgICAgICAgIGFuZCB0aGUg
bGlmZS1jeWNsZSBvZiBub2RlIGxpc3RzIGluIE5vZGVMaXN0Tm9kZURhdGEgbW9yZSBjb25zaXN0
ZW50LgorCisgICAgICAgIEFsc28gbWFrZSBDaGlsZE5vZGVMaXN0IG5vdCBpbmhlcml0IGZyb20g
RHluYW1pY05vZGVMaXN0IHNpbmNlIHdlIGRvbid0IHdhbnQgdG8gaGFzTm9kZUxpc3RDYWNoZXMK
KyAgICAgICAgdG8gcmV0dXJuIHRydWUganVzdCBiZWNhdXNlIHdlIGhhdmUgYSBjaGlsZCBub2Rl
IHNvbWV3aGVyZSBpbiB0aGUgZG9jdW1lbnQuCisgICAgICAgIFRoZXNlIHR3byBvYmplY3RzIGJl
aGF2ZSB2ZXJ5IGRpZmZlcmVudGx5IGFueXdheS4gVGhlIG9ubHkgZHJhd2JhY2sgaXMgdGhhdCB3
ZSBoYXZlIHRvIHNvbWV3aGF0CisgICAgICAgIGR1cGxpY2F0ZSB0aGUgY29kZSBmb3IgaXRlbVdp
dGhOYW1lIGJ1dCB0aGF0IHNlZW1zIG9rYXkgYmVjYXVzZSBub3cgd2UgY2FuIGRvIGNoaWxkIG5v
ZGUgbGlzdAorICAgICAgICBzcGVjaWZpYyBvcHRpbWl6YXRpb25zLgorCisgICAgICAgIFRlc3Q6
IGZhc3QvZG9tL2NoaWxkbm9kZS1pdGVtLWFmdGVyLWl0ZW1uYW1lLmh0bWwKKworICAgICAgICAq
IGRvbS9DaGlsZE5vZGVMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTm9kZUxpc3Q6
OkNoaWxkTm9kZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2hpbGROb2RlTGlzdDo6bGVuZ3Ro
KToKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTm9kZUxpc3Q6Oml0ZW0pOgorICAgICAgICAoV2Vi
Q29yZTo6bWF0Y2hlc0lkKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDaGlsZE5vZGVMaXN0
OjppdGVtV2l0aE5hbWUpOiBBZGRlZC4KKyAgICAgICAgKiBkb20vQ2hpbGROb2RlTGlzdC5oOgor
ICAgICAgICAoV2ViQ29yZTo6Q2hpbGROb2RlTGlzdDo6Y3JlYXRlKToKKyAgICAgICAgKiBkb20v
Q29udGFpbmVyTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250YWluZXJOb2RlOjpjaGls
ZHJlbkNoYW5nZWQpOiBBbHdheXMgY2FsbCBpbnZhbGlkYXRlTm9kZUxpc3RzQ2FjaGVBZnRlckNo
aWxkcmVuQ2hhbmdlZAorICAgICAgICBzaW5jZSB0aGUgZWFybHkgZXhpdCBpcyBub3cgaW5zaWRl
IHRoZSBmdW5jdGlvbi4KKyAgICAgICAgKiBkb20vRHluYW1pY05vZGVMaXN0LmNwcDogTG90cyBv
ZiBjbGVhbnVwIQorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY05vZGVMaXN0OjpEeW5hbWljTm9k
ZUxpc3QpOiBSZW1vdmVkIGEgY29uc3RydWN0b3IgZm9yIENoaWxkTm9kZUxpc3QuCisgICAgICAg
IChXZWJDb3JlOjpEeW5hbWljTm9kZUxpc3Q6Oml0ZW1XaXRoTmFtZSk6IFVzZSBpc0Rlc2NlbmRh
bnRPZiBpbnN0ZWFkIG9mIGEgbWFudWFsIGxvb3AuCisgICAgICAgIChXZWJDb3JlOjpEeW5hbWlj
Tm9kZUxpc3Q6OmludmFsaWRhdGVDYWNoZSk6CisgICAgICAgICogZG9tL0R5bmFtaWNOb2RlTGlz
dC5oOgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmNo
aWxkTm9kZXMpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6cmVnaXN0ZXJEeW5hbWljTm9kZUxp
c3QpOiBObyBsb25nZXIgY2hlY2tzIGhhc093bkNhY2hlcygpLgorICAgICAgICAoV2ViQ29yZTo6
Tm9kZTo6dW5yZWdpc3RlckR5bmFtaWNOb2RlTGlzdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6Tm9kZTo6aW52YWxpZGF0ZU5vZGVMaXN0c0NhY2hlQWZ0ZXJBdHRyaWJ1dGVDaGFuZ2VkKTog
Q2xlYXIgQ2hpbGROb2RlTGlzdCdzIGNhY2hlCisgICAgICAgIGV4cGxpY2l0bHkgYXQgdGhlIGJl
Z2lubmluZyBmb3IgYW4gYXR0cmlidXRlIG5vZGUuIEV4aXQgZWFybHkgaWYgdGhlcmUgYXJlIG5v
IER5bmFtaWNOb2RlTGlzdC4KKyAgICAgICAgTm8gbmVlZCB0byBkbyB0aGUgc2FtZSBpbiB0aGUg
bG9vcCBzaW5jZSBhbiBhdHRyaWJ1dGUgbm9kZSBjYW4ndCBoYXZlIGFuIGF0dHJpYnV0ZSBub2Rl
IGFzCisgICAgICAgIGFuIGFuY2VzdG9yLiBBbHNvIGRvbid0IGNhbGwgaW52YWxpZGF0ZUNhY2hl
cyBpbiBhbGwgY2FzZXMgYmVjYXVzZSBtb2RpZnlpbmcgYXR0cmlidXRlcyBjYW4gbmV2ZXIKKyAg
ICAgICAgYWZmZWN0IGdldEVsZW1lbnRzQnlUYWdOYW1lIG9yIGdldEVsZW1lbnRzQnlUYWdOYW1l
TlMuCisgICAgICAgIChXZWJDb3JlOjpOb2RlOjppbnZhbGlkYXRlTm9kZUxpc3RzQ2FjaGVBZnRl
ckNoaWxkcmVuQ2hhbmdlZCk6IExpa2V3aXNlLiBDbGVhciBDaGlsZE5vZGVMaXN0J3MKKyAgICAg
ICAgY2FjaGUgZXhwbGljaXRseSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsb29wIGFuZCBleGl0
IGVhcmx5IGlmIGhhc05vZGVMaXN0Q2FjaGVzKCkgaXMgZmFsc2UuCisgICAgICAgIChXZWJDb3Jl
OjpOb2RlOjpyZW1vdmVDYWNoZWRDbGFzc05vZGVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok5v
ZGU6OnJlbW92ZUNhY2hlZE5hbWVOb2RlTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpy
ZW1vdmVDYWNoZWRUYWdOb2RlTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpyZW1vdmVD
YWNoZWRMYWJlbHNOb2RlTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlTGlzdHNOb2RlRGF0
YTo6aW52YWxpZGF0ZUNhY2hlcyk6IE5vIGxvbmdlciBjbGVhcnMgbV9jaGlsZE5vZGVMaXN0Q2Fj
aGVzLiBJdCdzIGRvbmUKKyAgICAgICAgaW4gaW52YWxpZGF0ZU5vZGVMaXN0c0NhY2hlQWZ0ZXJB
dHRyaWJ1dGVDaGFuZ2VkIGFuZCBpbnZhbGlkYXRlTm9kZUxpc3RzQ2FjaGVBZnRlckNoaWxkcmVu
Q2hhbmdlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVMaXN0c05vZGVEYXRhOjppc0VtcHR5KToK
KyAgICAgICAgKFdlYkNvcmU6Ok5vZGVSYXJlRGF0YTo6Y2xlYXJDaGlsZE5vZGVMaXN0Q2FjaGUp
OiBBZGRlZC4KKyAgICAgICAgKiBkb20vTm9kZVJhcmVEYXRhLmg6CisgICAgICAgIChXZWJDb3Jl
OjpOb2RlUmFyZURhdGE6Om5vZGVMaXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlUmFyZURh
dGE6OmVuc3VyZUNoaWxkTm9kZUxpc3RDYWNoZSk6IEFkZGVkLgorCiAyMDExLTEyLTA5ICBNYXJ5
IFd1ICA8bWFyeS53dUB0b3JjaG1vYmlsZS5jb20uY24+CiAKICAgICAgICAgU21hbGwgc3R5bGUg
Zml4IG9uIERyYWdEYXRhQmxhY2tCZXJyeS5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9D
aGlsZE5vZGVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGRO
b2RlTGlzdC5jcHAJKHJldmlzaW9uIDEwMjQ0NCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9DaGls
ZE5vZGVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMyw2ICszLDcgQEAKICAqICAgICAgICAg
ICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAg
ICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKICAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwpAQCAtMjcsOCArMjgsOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LUNoaWxkTm9kZUxpc3Q6OkNoaWxkTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwg
RHluYW1pY05vZGVMaXN0OjpDYWNoZXMqIGluZm8pCi0gICAgOiBEeW5hbWljTm9kZUxpc3Qocm9v
dE5vZGUsIGluZm8pCitDaGlsZE5vZGVMaXN0OjpDaGlsZE5vZGVMaXN0KFBhc3NSZWZQdHI8Tm9k
ZT4gbm9kZSwgRHluYW1pY05vZGVMaXN0OjpDYWNoZXMqIGNhY2hlcykKKyAgICA6IG1fbm9kZShu
b2RlKQorICAgICwgbV9jYWNoZXMoY2FjaGVzKQogewogfQogCkBAIC0zOCw3ICs0MCw3IEBAIHVu
c2lnbmVkIENoaWxkTm9kZUxpc3Q6Omxlbmd0aCgpIGNvbnN0CiAgICAgICAgIHJldHVybiBtX2Nh
Y2hlcy0+Y2FjaGVkTGVuZ3RoOwogCiAgICAgdW5zaWduZWQgbGVuID0gMDsKLSAgICBmb3IgKE5v
ZGUqIG4gPSBtX3Jvb3ROb2RlLT5maXJzdENoaWxkKCk7IG47IG4gPSBuLT5uZXh0U2libGluZygp
KQorICAgIGZvciAoTm9kZSogbiA9IG1fbm9kZS0+Zmlyc3RDaGlsZCgpOyBuOyBuID0gbi0+bmV4
dFNpYmxpbmcoKSkKICAgICAgICAgbGVuKys7CiAKICAgICBtX2NhY2hlcy0+Y2FjaGVkTGVuZ3Ro
ID0gbGVuOwpAQCAtNTAsNyArNTIsNyBAQCB1bnNpZ25lZCBDaGlsZE5vZGVMaXN0OjpsZW5ndGgo
KSBjb25zdAogTm9kZSogQ2hpbGROb2RlTGlzdDo6aXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3QK
IHsKICAgICB1bnNpZ25lZCBpbnQgcG9zID0gMDsKLSAgICBOb2RlKiBuID0gbV9yb290Tm9kZS0+
Zmlyc3RDaGlsZCgpOworICAgIE5vZGUqIG4gPSBtX25vZGUtPmZpcnN0Q2hpbGQoKTsKIAogICAg
IGlmIChtX2NhY2hlcy0+aXNJdGVtQ2FjaGVWYWxpZCkgewogICAgICAgICBpZiAoaW5kZXggPT0g
bV9jYWNoZXMtPmxhc3RJdGVtT2Zmc2V0KQpAQCAtNzEsNyArNzMsNyBAQCBOb2RlKiBDaGlsZE5v
ZGVMaXN0OjppdGVtKHVuc2lnbmVkIGluZGV4CiAgICAgICAgIGludCBkaWZmID0gaW5kZXggLSBw
b3M7CiAgICAgICAgIHVuc2lnbmVkIGRpc3QgPSBhYnMoZGlmZik7CiAgICAgICAgIGlmIChkaXN0
ID4gbV9jYWNoZXMtPmNhY2hlZExlbmd0aCAtIDEgLSBpbmRleCkgewotICAgICAgICAgICAgbiA9
IG1fcm9vdE5vZGUtPmxhc3RDaGlsZCgpOworICAgICAgICAgICAgbiA9IG1fbm9kZS0+bGFzdENo
aWxkKCk7CiAgICAgICAgICAgICBwb3MgPSBtX2NhY2hlcy0+Y2FjaGVkTGVuZ3RoIC0gMTsKICAg
ICAgICAgfQogICAgIH0KQEAgLTk4LDEyICsxMDAsMzUgQEAgTm9kZSogQ2hpbGROb2RlTGlzdDo6
aXRlbSh1bnNpZ25lZCBpbmRleAogICAgIHJldHVybiAwOwogfQogCi1ib29sIENoaWxkTm9kZUxp
c3Q6Om5vZGVNYXRjaGVzKEVsZW1lbnQqIHRlc3ROb2RlKSBjb25zdAorc3RhdGljIGlubGluZSBi
b29sIG1hdGNoZXNJZChOb2RlKiBub2RlLCBjb25zdCBBdG9taWNTdHJpbmcmIGVsZW1lbnRJZCkK
IHsKLSAgICAvLyBOb3RlOiBEdWUgdG8gdGhlIG92ZXJyaWRlcyBvZiB0aGUgbGVuZ3RoIGFuZCBp
dGVtIGZ1bmN0aW9ucyBhYm92ZSwKLSAgICAvLyB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVk
IG9ubHkgYnkgRHluYW1pY05vZGVMaXN0OjppdGVtV2l0aE5hbWUsCi0gICAgLy8gZm9yIGFuIGVs
ZW1lbnQgdGhhdCB3YXMgbG9jYXRlZCB3aXRoIGdldEVsZW1lbnRCeUlkLgotICAgIHJldHVybiB0
ZXN0Tm9kZS0+cGFyZW50Tm9kZSgpID09IG1fcm9vdE5vZGU7CisgICAgLy8gRklYTUU6IFRoaXMg
c2hvdWxkIHByb2JhYmx5IGJlIHVzaW5nIGdldElkQXR0cmlidXRlIGluc3RlYWQgb2YgaWRGb3JT
dHlsZVJlc29sdXRpb24uCisgICAgcmV0dXJuIG5vZGUtPmhhc0lEKCkgJiYgc3RhdGljX2Nhc3Q8
RWxlbWVudCo+KG5vZGUpLT5pZEZvclN0eWxlUmVzb2x1dGlvbigpID09IGVsZW1lbnRJZDsKK30K
KworTm9kZSogQ2hpbGROb2RlTGlzdDo6aXRlbVdpdGhOYW1lKGNvbnN0IEF0b21pY1N0cmluZyYg
ZWxlbWVudElkKSBjb25zdAoreworICAgIGlmIChtX2NhY2hlcy0+aXNJdGVtQ2FjaGVWYWxpZCAm
JiBtYXRjaGVzSWQobV9jYWNoZXMtPmxhc3RJdGVtLCBlbGVtZW50SWQpKQorICAgICAgICByZXR1
cm4gbV9jYWNoZXMtPmxhc3RJdGVtOworCisgICAgaWYgKG1fbm9kZS0+aXNEb2N1bWVudE5vZGUo
KSB8fCBtX25vZGUtPmluRG9jdW1lbnQoKSkgeworICAgICAgICBFbGVtZW50KiBub2RlID0gbV9u
b2RlLT50cmVlU2NvcGUoKS0+Z2V0RWxlbWVudEJ5SWQoZWxlbWVudElkKTsKKyAgICAgICAgaWYg
KCFub2RlIHx8IG5vZGUtPnBhcmVudE5vZGUoKSA9PSBtX25vZGUpCisgICAgICAgICAgICByZXR1
cm4gbm9kZTsKKyAgICAgICAgLy8gSW4gdGhlIGNhc2Ugb2YgbXVsdGlwbGUgbm9kZXMgd2l0aCB0
aGUgc2FtZSBuYW1lLCBqdXN0IGZhbGwgdGhyb3VnaC4KKyAgICB9CisKKyAgICB1bnNpZ25lZCBv
ZmZzZXQgPSAwOworICAgIGZvciAoTm9kZSogbm9kZSA9IG1fbm9kZS0+Zmlyc3RDaGlsZCgpOyBu
b2RlOyBub2RlID0gbm9kZS0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBpZiAobWF0Y2hlc0lk
KG5vZGUsIGVsZW1lbnRJZCkpIHsKKyAgICAgICAgICAgIG1fY2FjaGVzLT5sYXN0SXRlbSA9IG5v
ZGU7CisgICAgICAgICAgICBtX2NhY2hlcy0+bGFzdEl0ZW1PZmZzZXQgPSBvZmZzZXQ7CisgICAg
ICAgICAgICBtX2NhY2hlcy0+aXNJdGVtQ2FjaGVWYWxpZCA9IHRydWU7CisgICAgICAgICAgICBy
ZXR1cm4gbm9kZTsKKyAgICAgICAgfQorICAgICAgICBvZmZzZXQrKzsKKyAgICB9CisgICAgcmV0
dXJuIDA7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2RvbS9DaGlsZE5vZGVMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0No
aWxkTm9kZUxpc3QuaAkocmV2aXNpb24gMTAyNDQ0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0No
aWxkTm9kZUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMyw2ICszLDcgQEAKICAqICAgICAgICAg
ICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAg
ICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKICAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwpAQCAtMjksMjEgKzMwLDI0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAg
IGNsYXNzIENoaWxkTm9kZUxpc3QgOiBwdWJsaWMgRHluYW1pY05vZGVMaXN0IHsKLSAgICBwdWJs
aWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENoaWxkTm9kZUxpc3Q+IGNyZWF0ZShQYXNz
UmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBDYWNoZXMqIGNhY2hlcykKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDaGlsZE5vZGVMaXN0KHJvb3ROb2RlLCBjYWNoZXMp
KTsKLSAgICAgICAgfQotCi0gICAgICAgIHZpcnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7
Ci0gICAgICAgIHZpcnR1YWwgTm9kZSogaXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3Q7Ci0KLSAg
ICBwcm90ZWN0ZWQ6Ci0gICAgICAgIENoaWxkTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290
Tm9kZSwgQ2FjaGVzKik7Ci0KLSAgICAgICAgdmlydHVhbCBib29sIG5vZGVNYXRjaGVzKEVsZW1l
bnQqKSBjb25zdDsKLSAgICB9OworY2xhc3MgQ2hpbGROb2RlTGlzdCA6IHB1YmxpYyBOb2RlTGlz
dCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2hpbGROb2RlTGlzdD4gY3JlYXRl
KFBhc3NSZWZQdHI8Tm9kZT4gbm9kZSwgRHluYW1pY05vZGVMaXN0OjpDYWNoZXMqIGNhY2hlcykK
KyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2hpbGROb2RlTGlzdChub2RlLCBj
YWNoZXMpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IE9W
RVJSSURFOworICAgIHZpcnR1YWwgTm9kZSogaXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3QgT1ZF
UlJJREU7CisgICAgdmlydHVhbCBOb2RlKiBpdGVtV2l0aE5hbWUoY29uc3QgQXRvbWljU3RyaW5n
JiBlbGVtZW50SWQpIGNvbnN0IE9WRVJSSURFOworCitwcm90ZWN0ZWQ6CisgICAgQ2hpbGROb2Rl
TGlzdChQYXNzUmVmUHRyPE5vZGU+LCBEeW5hbWljTm9kZUxpc3Q6OkNhY2hlcyopOworCitwcml2
YXRlOgorICAgIFJlZlB0cjxOb2RlPiBtX25vZGU7CisgICAgbXV0YWJsZSBSZWZQdHI8RHluYW1p
Y05vZGVMaXN0OjpDYWNoZXM+IG1fY2FjaGVzOworfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCShyZXZpc2lvbiAxMDI0
NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTg0NCw4ICs4NDQsNyBAQCB2b2lkIENvbnRhaW5lck5vZGU6OmNoaWxkcmVuQ2hhbmdl
ZChib29sCiAgICAgTm9kZTo6Y2hpbGRyZW5DaGFuZ2VkKGNoYW5nZWRCeVBhcnNlciwgYmVmb3Jl
Q2hhbmdlLCBhZnRlckNoYW5nZSwgY2hpbGRDb3VudERlbHRhKTsKICAgICBpZiAoIWNoYW5nZWRC
eVBhcnNlciAmJiBjaGlsZENvdW50RGVsdGEpCiAgICAgICAgIGRvY3VtZW50KCktPnVwZGF0ZVJh
bmdlc0FmdGVyQ2hpbGRyZW5DaGFuZ2VkKHRoaXMpOwotICAgIGlmICh0cmVlU2NvcGUoKS0+aGFz
Tm9kZUxpc3RDYWNoZXMoKSkKLSAgICAgICAgaW52YWxpZGF0ZU5vZGVMaXN0c0NhY2hlQWZ0ZXJD
aGlsZHJlbkNoYW5nZWQoKTsKKyAgICBpbnZhbGlkYXRlTm9kZUxpc3RzQ2FjaGVBZnRlckNoaWxk
cmVuQ2hhbmdlZCgpOwogfQogCiB2b2lkIENvbnRhaW5lck5vZGU6OmNsb25lQ2hpbGROb2RlcyhD
b250YWluZXJOb2RlICpjbG9uZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9EeW5hbWljTm9k
ZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9EeW5hbWljTm9kZUxp
c3QuY3BwCShyZXZpc2lvbiAxMDI0NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRHluYW1pY05v
ZGVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTggKzMxLDkgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogRHluYW1pY05vZGVMaXN0OjpEeW5hbWljTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2Rl
PiByb290Tm9kZSkKICAgICA6IG1fcm9vdE5vZGUocm9vdE5vZGUpCiAgICAgLCBtX2NhY2hlcyhD
YWNoZXM6OmNyZWF0ZSgpKQotICAgICwgbV9vd25zQ2FjaGVzKHRydWUpCiB7CiAgICAgbV9yb290
Tm9kZS0+cmVnaXN0ZXJEeW5hbWljTm9kZUxpc3QodGhpcyk7Ci19ICAgIAotCi1EeW5hbWljTm9k
ZUxpc3Q6OkR5bmFtaWNOb2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBEeW5hbWlj
Tm9kZUxpc3Q6OkNhY2hlcyogY2FjaGVzKQotICAgIDogbV9yb290Tm9kZShyb290Tm9kZSkKLSAg
ICAsIG1fY2FjaGVzKGNhY2hlcykKLSAgICAsIG1fb3duc0NhY2hlcyhmYWxzZSkKLXsKLSAgICBt
X3Jvb3ROb2RlLT5yZWdpc3RlckR5bmFtaWNOb2RlTGlzdCh0aGlzKTsKLX0gICAgCit9CiAKIER5
bmFtaWNOb2RlTGlzdDo6fkR5bmFtaWNOb2RlTGlzdCgpCiB7CkBAIC0xMjMsMTIgKzExNCw4IEBA
IE5vZGUqIER5bmFtaWNOb2RlTGlzdDo6aXRlbVdpdGhOYW1lKGNvbnMKIHsKICAgICBpZiAobV9y
b290Tm9kZS0+aXNEb2N1bWVudE5vZGUoKSB8fCBtX3Jvb3ROb2RlLT5pbkRvY3VtZW50KCkpIHsK
ICAgICAgICAgRWxlbWVudCogbm9kZSA9IG1fcm9vdE5vZGUtPnRyZWVTY29wZSgpLT5nZXRFbGVt
ZW50QnlJZChlbGVtZW50SWQpOwotICAgICAgICBpZiAobm9kZSAmJiBub2RlTWF0Y2hlcyhub2Rl
KSkgewotICAgICAgICAgICAgZm9yIChDb250YWluZXJOb2RlKiBwID0gbm9kZS0+cGFyZW50Tm9k
ZSgpOyBwOyBwID0gcC0+cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHAgPT0g
bV9yb290Tm9kZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKG5vZGUgJiYgbm9kZU1hdGNoZXMobm9kZSkgJiYg
bm9kZS0+aXNEZXNjZW5kYW50T2YobV9yb290Tm9kZS5nZXQoKSkpCisgICAgICAgICAgICByZXR1
cm4gbm9kZTsKICAgICAgICAgaWYgKCFub2RlKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAg
ICAgIC8vIEluIHRoZSBjYXNlIG9mIG11bHRpcGxlIG5vZGVzIHdpdGggdGhlIHNhbWUgbmFtZSwg
anVzdCBmYWxsIHRocm91Z2guCkBAIC0xNTIsOCArMTM5LDYgQEAgYm9vbCBEeW5hbWljTm9kZUxp
c3Q6OmlzRHluYW1pY05vZGVMaXN0KAogCiB2b2lkIER5bmFtaWNOb2RlTGlzdDo6aW52YWxpZGF0
ZUNhY2hlKCkKIHsKLSAgICAvLyBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBmb3Igbm9kZSBs
aXN0cyB0aGF0IG93biB0aGVpciBvd24gY2FjaGVzLgotICAgIEFTU0VSVChtX293bnNDYWNoZXMp
OwogICAgIG1fY2FjaGVzLT5yZXNldCgpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20v
RHluYW1pY05vZGVMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0R5bmFt
aWNOb2RlTGlzdC5oCShyZXZpc2lvbiAxMDI0NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRHlu
YW1pY05vZGVMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDggKzUxLDYgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiAgICAgICAgIHZpcnR1YWwgfkR5bmFtaWNOb2RlTGlzdCgpOwogCi0gICAg
ICAgIGJvb2wgaGFzT3duQ2FjaGVzKCkgY29uc3QgeyByZXR1cm4gbV9vd25zQ2FjaGVzOyB9Ci0K
ICAgICAgICAgLy8gRE9NIG1ldGhvZHMgJiBhdHRyaWJ1dGVzIGZvciBOb2RlTGlzdAogICAgICAg
ICB2aXJ0dWFsIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIE5vZGUq
IGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0OwpAQCAtNjQsMTMgKzYyLDExIEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogICAgIHByb3RlY3RlZDoKICAgICAgICAgRHluYW1pY05vZGVMaXN0KFBh
c3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUpOwotICAgICAgICBEeW5hbWljTm9kZUxpc3QoUGFzc1Jl
ZlB0cjxOb2RlPiByb290Tm9kZSwgQ2FjaGVzKik7CiAKICAgICAgICAgdmlydHVhbCBib29sIG5v
ZGVNYXRjaGVzKEVsZW1lbnQqKSBjb25zdCA9IDA7CiAKICAgICAgICAgUmVmUHRyPE5vZGU+IG1f
cm9vdE5vZGU7CiAgICAgICAgIG11dGFibGUgUmVmUHRyPENhY2hlcz4gbV9jYWNoZXM7Ci0gICAg
ICAgIGJvb2wgbV9vd25zQ2FjaGVzOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBi
b29sIGlzRHluYW1pY05vZGVMaXN0KCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20v
Tm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCShyZXZp
c2lvbiAxMDI0NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTYyMywxMCArNjIzLDcgQEAgdm9pZCBOb2RlOjpzZXROb2RlVmFsdWUoY29uc3QgU3Ry
aW5nJiAvKgogCiBQYXNzUmVmUHRyPE5vZGVMaXN0PiBOb2RlOjpjaGlsZE5vZGVzKCkKIHsKLSAg
ICBOb2RlTGlzdHNOb2RlRGF0YSogbm9kZUxpc3RzID0gZW5zdXJlUmFyZURhdGEoKS0+ZW5zdXJl
Tm9kZUxpc3RzKHRoaXMpOwotICAgIGlmICghbm9kZUxpc3RzLT5tX2NoaWxkTm9kZUxpc3RDYWNo
ZXMpCi0gICAgICAgIG5vZGVMaXN0cy0+bV9jaGlsZE5vZGVMaXN0Q2FjaGVzID0gRHluYW1pY05v
ZGVMaXN0OjpDYWNoZXM6OmNyZWF0ZSgpOwotICAgIHJldHVybiBDaGlsZE5vZGVMaXN0OjpjcmVh
dGUodGhpcywgbm9kZUxpc3RzLT5tX2NoaWxkTm9kZUxpc3RDYWNoZXMuZ2V0KCkpOworICAgIHJl
dHVybiBDaGlsZE5vZGVMaXN0OjpjcmVhdGUodGhpcywgZW5zdXJlUmFyZURhdGEoKS0+ZW5zdXJl
Q2hpbGROb2RlTGlzdENhY2hlKCkpOwogfQogCiBOb2RlICpOb2RlOjpsYXN0RGVzY2VuZGFudCgp
IGNvbnN0CkBAIC0xMDExLDQyICsxMDA4LDQ5IEBAIHZvaWQgTm9kZTo6cmVnaXN0ZXJEeW5hbWlj
Tm9kZUxpc3QoRHluYW0KICAgICBpZiAoZGF0YS0+bm9kZUxpc3RzKCkgJiYgKCF0cmVlU2NvcGUo
KSB8fCAhdHJlZVNjb3BlKCktPmhhc05vZGVMaXN0Q2FjaGVzKCkpKQogICAgICAgICBkYXRhLT5u
b2RlTGlzdHMoKS0+aW52YWxpZGF0ZUNhY2hlcygpOwogCi0gICAgaWYgKGxpc3QtPmhhc093bkNh
Y2hlcygpKQotICAgICAgICBkYXRhLT5lbnN1cmVOb2RlTGlzdHModGhpcyktPm1fbGlzdHNXaXRo
Q2FjaGVzLmFkZChsaXN0KTsKKyAgICBkYXRhLT5lbnN1cmVOb2RlTGlzdHModGhpcyktPm1fbGlz
dHNXaXRoQ2FjaGVzLmFkZChsaXN0KTsKIH0KIAogdm9pZCBOb2RlOjp1bnJlZ2lzdGVyRHluYW1p
Y05vZGVMaXN0KER5bmFtaWNOb2RlTGlzdCogbGlzdCkKIHsKICAgICBBU1NFUlQocmFyZURhdGEo
KSk7CiAgICAgQVNTRVJUKHJhcmVEYXRhKCktPm5vZGVMaXN0cygpKTsKLSAgICBpZiAobGlzdC0+
aGFzT3duQ2FjaGVzKCkpIHsKLSAgICAgICAgTm9kZVJhcmVEYXRhKiBkYXRhID0gcmFyZURhdGEo
KTsKLSAgICAgICAgZGF0YS0+bm9kZUxpc3RzKCktPm1fbGlzdHNXaXRoQ2FjaGVzLnJlbW92ZShs
aXN0KTsKLSAgICAgICAgcmVtb3ZlTm9kZUxpc3RDYWNoZUlmUG9zc2libGUodGhpcywgZGF0YSk7
Ci0gICAgfQorICAgIE5vZGVSYXJlRGF0YSogZGF0YSA9IHJhcmVEYXRhKCk7CisgICAgZGF0YS0+
bm9kZUxpc3RzKCktPm1fbGlzdHNXaXRoQ2FjaGVzLnJlbW92ZShsaXN0KTsKKyAgICByZW1vdmVO
b2RlTGlzdENhY2hlSWZQb3NzaWJsZSh0aGlzLCBkYXRhKTsKIH0KIAogdm9pZCBOb2RlOjppbnZh
bGlkYXRlTm9kZUxpc3RzQ2FjaGVBZnRlckF0dHJpYnV0ZUNoYW5nZWQoKQogeworICAgIGlmICho
YXNSYXJlRGF0YSgpICYmIGlzQXR0cmlidXRlTm9kZSgpKSB7CisgICAgICAgIE5vZGVSYXJlRGF0
YSogZGF0YSA9IHJhcmVEYXRhKCk7CisgICAgICAgIEFTU0VSVCghZGF0YS0+bm9kZUxpc3RzKCkp
OworICAgICAgICBkYXRhLT5jbGVhckNoaWxkTm9kZUxpc3RDYWNoZSgpOworICAgIH0KKworICAg
IGlmICghdHJlZVNjb3BlKCktPmhhc05vZGVMaXN0Q2FjaGVzKCkpCisgICAgICAgIHJldHVybjsK
KwogICAgIGZvciAoTm9kZSogbm9kZSA9IHRoaXM7IG5vZGU7IG5vZGUgPSBub2RlLT5wYXJlbnRO
b2RlKCkpIHsKKyAgICAgICAgQVNTRVJUKHRoaXMgPT0gbm9kZSB8fCAhbm9kZS0+aXNBdHRyaWJ1
dGVOb2RlKCkpOwogICAgICAgICBpZiAoIW5vZGUtPmhhc1JhcmVEYXRhKCkpCiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgTm9kZVJhcmVEYXRhKiBkYXRhID0gbm9kZS0+cmFyZURhdGEo
KTsKICAgICAgICAgaWYgKCFkYXRhLT5ub2RlTGlzdHMoKSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogCi0gICAgICAgIC8vIEZvciBhdHRyaWJ1dGUgbm9kZXMsIHdlIG5lZWQgdG8gaW52YWxpZGF0
ZSBjaGlsZE5vZGVzIGFzIHdlbGwuCi0gICAgICAgIGlmIChub2RlLT5pc0F0dHJpYnV0ZU5vZGUo
KSkKLSAgICAgICAgICAgIGRhdGEtPm5vZGVMaXN0cygpLT5pbnZhbGlkYXRlQ2FjaGVzKCk7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIGRhdGEtPm5vZGVMaXN0cygpLT5pbnZhbGlkYXRlQ2Fj
aGVzVGhhdERlcGVuZE9uQXR0cmlidXRlcygpOwotCisgICAgICAgIGRhdGEtPm5vZGVMaXN0cygp
LT5pbnZhbGlkYXRlQ2FjaGVzVGhhdERlcGVuZE9uQXR0cmlidXRlcygpOwogICAgICAgICByZW1v
dmVOb2RlTGlzdENhY2hlSWZQb3NzaWJsZShub2RlLCBkYXRhKTsKICAgICB9CiB9CiAKIHZvaWQg
Tm9kZTo6aW52YWxpZGF0ZU5vZGVMaXN0c0NhY2hlQWZ0ZXJDaGlsZHJlbkNoYW5nZWQoKQogewor
ICAgIGlmIChoYXNSYXJlRGF0YSgpKQorICAgICAgICByYXJlRGF0YSgpLT5jbGVhckNoaWxkTm9k
ZUxpc3RDYWNoZSgpOworCisgICAgaWYgKCF0cmVlU2NvcGUoKS0+aGFzTm9kZUxpc3RDYWNoZXMo
KSkKKyAgICAgICAgcmV0dXJuOwogICAgIGZvciAoTm9kZSogbm9kZSA9IHRoaXM7IG5vZGU7IG5v
ZGUgPSBub2RlLT5wYXJlbnROb2RlKCkpIHsKICAgICAgICAgaWYgKCFub2RlLT5oYXNSYXJlRGF0
YSgpKQogICAgICAgICAgICAgY29udGludWU7CkBAIC0xMDgwLDcgKzEwODQsNiBAQCB2b2lkIE5v
ZGU6OnJlbW92ZUNhY2hlZENsYXNzTm9kZUxpc3QoQ2xhCiB7CiAgICAgQVNTRVJUKHJhcmVEYXRh
KCkpOwogICAgIEFTU0VSVChyYXJlRGF0YSgpLT5ub2RlTGlzdHMoKSk7Ci0gICAgQVNTRVJUX1VO
VVNFRChsaXN0LCBsaXN0LT5oYXNPd25DYWNoZXMoKSk7CiAKICAgICBOb2RlTGlzdHNOb2RlRGF0
YSogZGF0YSA9IHJhcmVEYXRhKCktPm5vZGVMaXN0cygpOwogICAgIEFTU0VSVF9VTlVTRUQobGlz
dCwgbGlzdCA9PSBkYXRhLT5tX2NsYXNzTm9kZUxpc3RDYWNoZS5nZXQoY2xhc3NOYW1lKSk7CkBA
IC0xMDkxLDcgKzEwOTQsNiBAQCB2b2lkIE5vZGU6OnJlbW92ZUNhY2hlZE5hbWVOb2RlTGlzdChO
YW1lCiB7CiAgICAgQVNTRVJUKHJhcmVEYXRhKCkpOwogICAgIEFTU0VSVChyYXJlRGF0YSgpLT5u
b2RlTGlzdHMoKSk7Ci0gICAgQVNTRVJUX1VOVVNFRChsaXN0LCBsaXN0LT5oYXNPd25DYWNoZXMo
KSk7CiAKICAgICBOb2RlTGlzdHNOb2RlRGF0YSogZGF0YSA9IHJhcmVEYXRhKCktPm5vZGVMaXN0
cygpOwogICAgIEFTU0VSVF9VTlVTRUQobGlzdCwgbGlzdCA9PSBkYXRhLT5tX25hbWVOb2RlTGlz
dENhY2hlLmdldChub2RlTmFtZSkpOwpAQCAtMTEwMiw3ICsxMTA0LDYgQEAgdm9pZCBOb2RlOjpy
ZW1vdmVDYWNoZWRUYWdOb2RlTGlzdChUYWdObwogewogICAgIEFTU0VSVChyYXJlRGF0YSgpKTsK
ICAgICBBU1NFUlQocmFyZURhdGEoKS0+bm9kZUxpc3RzKCkpOwotICAgIEFTU0VSVF9VTlVTRUQo
bGlzdCwgbGlzdC0+aGFzT3duQ2FjaGVzKCkpOwogCiAgICAgTm9kZUxpc3RzTm9kZURhdGEqIGRh
dGEgPSByYXJlRGF0YSgpLT5ub2RlTGlzdHMoKTsKICAgICBBU1NFUlRfVU5VU0VEKGxpc3QsIGxp
c3QgPT0gZGF0YS0+bV90YWdOb2RlTGlzdENhY2hlLmdldChuYW1lLmltcGwoKSkpOwpAQCAtMTEx
Myw3ICsxMTE0LDYgQEAgdm9pZCBOb2RlOjpyZW1vdmVDYWNoZWRUYWdOb2RlTGlzdChUYWdObwog
ewogICAgIEFTU0VSVChyYXJlRGF0YSgpKTsKICAgICBBU1NFUlQocmFyZURhdGEoKS0+bm9kZUxp
c3RzKCkpOwotICAgIEFTU0VSVF9VTlVTRUQobGlzdCwgbGlzdC0+aGFzT3duQ2FjaGVzKCkpOwog
CiAgICAgTm9kZUxpc3RzTm9kZURhdGEqIGRhdGEgPSByYXJlRGF0YSgpLT5ub2RlTGlzdHMoKTsK
ICAgICBBU1NFUlRfVU5VU0VEKGxpc3QsIGxpc3QgPT0gZGF0YS0+bV90YWdOb2RlTGlzdENhY2hl
TlMuZ2V0KG5hbWUuaW1wbCgpKSk7CkBAIC0xMTI0LDkgKzExMjQsOSBAQCB2b2lkIE5vZGU6OnJl
bW92ZUNhY2hlZExhYmVsc05vZGVMaXN0KER5CiB7CiAgICAgQVNTRVJUKHJhcmVEYXRhKCkpOwog
ICAgIEFTU0VSVChyYXJlRGF0YSgpLT5ub2RlTGlzdHMoKSk7Ci0gICAgQVNTRVJUX1VOVVNFRChs
aXN0LCBsaXN0LT5oYXNPd25DYWNoZXMoKSk7Ci0gICAgCisKICAgICBOb2RlTGlzdHNOb2RlRGF0
YSogZGF0YSA9IHJhcmVEYXRhKCktPm5vZGVMaXN0cygpOworICAgIEFTU0VSVF9VTlVTRUQobGlz
dCwgbGlzdCA9PSBkYXRhLT5tX2xhYmVsc05vZGVMaXN0Q2FjaGUpOwogICAgIGRhdGEtPm1fbGFi
ZWxzTm9kZUxpc3RDYWNoZSA9IDA7CiB9CiAKQEAgLTIzODksMTMgKzIzODksNiBAQCB2b2lkIE5v
ZGU6OnNob3dUcmVlRm9yVGhpc0Fjcm9zc0ZyYW1lKCkgCiAKIHZvaWQgTm9kZUxpc3RzTm9kZURh
dGE6OmludmFsaWRhdGVDYWNoZXMoKQogewotICAgIGlmIChtX2NoaWxkTm9kZUxpc3RDYWNoZXMp
IHsKLSAgICAgICAgaWYgKG1fY2hpbGROb2RlTGlzdENhY2hlcy0+aGFzT25lUmVmKCkpCi0gICAg
ICAgICAgICBtX2NoaWxkTm9kZUxpc3RDYWNoZXMuY2xlYXIoKTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgbV9jaGlsZE5vZGVMaXN0Q2FjaGVzLT5yZXNldCgpOwotICAgIH0KLQogICAgIGlm
IChtX2xhYmVsc05vZGVMaXN0Q2FjaGUpCiAgICAgICAgIG1fbGFiZWxzTm9kZUxpc3RDYWNoZS0+
aW52YWxpZGF0ZUNhY2hlKCk7CiAgICAgVGFnTm9kZUxpc3RDYWNoZTo6Y29uc3RfaXRlcmF0b3Ig
dGFnQ2FjaGVFbmQgPSBtX3RhZ05vZGVMaXN0Q2FjaGUuZW5kKCk7CkBAIC0yNDM4LDkgKzI0MzEs
NiBAQCBib29sIE5vZGVMaXN0c05vZGVEYXRhOjppc0VtcHR5KCkgY29uc3QKICAgICBpZiAoIW1f
bGlzdHNXaXRoQ2FjaGVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
aWYgKG1fY2hpbGROb2RlTGlzdENhY2hlcykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCiAgICAg
aWYgKCFtX3RhZ05vZGVMaXN0Q2FjaGUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgaWYgKCFtX3RhZ05vZGVMaXN0Q2FjaGVOUy5pc0VtcHR5KCkpCkBAIC0zMDA0LDYgKzI5
OTQsMTcgQEAgdm9pZCBOb2RlUmFyZURhdGE6OmNyZWF0ZU5vZGVMaXN0cyhOb2RlKgogICAgICAg
ICB0cmVlU2NvcGUtPmFkZE5vZGVMaXN0Q2FjaGUoKTsKIH0KIAordm9pZCBOb2RlUmFyZURhdGE6
OmNsZWFyQ2hpbGROb2RlTGlzdENhY2hlKCkKK3sKKyAgICBpZiAoIW1fY2hpbGROb2RlTGlzdENh
Y2hlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9jaGlsZE5vZGVMaXN0Q2FjaGUtPmhh
c09uZVJlZigpKQorICAgICAgICBtX2NoaWxkTm9kZUxpc3RDYWNoZS5jbGVhcigpOworICAgIGVs
c2UKKyAgICAgICAgbV9jaGlsZE5vZGVMaXN0Q2FjaGUtPnJlc2V0KCk7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAogI2lmbmRlZiBOREVCVUcKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlUmFyZURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJh
cmVEYXRhLmgJKHJldmlzaW9uIDEwMjQ0NCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFy
ZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBAQAogI2lmbmRlZiBOb2RlUmFy
ZURhdGFfaAogI2RlZmluZSBOb2RlUmFyZURhdGFfaAogCisjaW5jbHVkZSAiQ2hpbGROb2RlTGlz
dC5oIgogI2luY2x1ZGUgIkNsYXNzTm9kZUxpc3QuaCIKICNpbmNsdWRlICJET01TZXR0YWJsZVRv
a2VuTGlzdC5oIgogI2luY2x1ZGUgIkR5bmFtaWNOb2RlTGlzdC5oIgpAQCAtNTEsOSArNTIsNyBA
QCBzdHJ1Y3QgTm9kZUxpc3RzTm9kZURhdGEgewogcHVibGljOgogICAgIHR5cGVkZWYgSGFzaFNl
dDxEeW5hbWljTm9kZUxpc3QqPiBOb2RlTGlzdFNldDsKICAgICBOb2RlTGlzdFNldCBtX2xpc3Rz
V2l0aENhY2hlczsKLSAgICAKLSAgICBSZWZQdHI8RHluYW1pY05vZGVMaXN0OjpDYWNoZXM+IG1f
Y2hpbGROb2RlTGlzdENhY2hlczsKLSAgICAKKwogICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcs
IENsYXNzTm9kZUxpc3QqPiBDbGFzc05vZGVMaXN0Q2FjaGU7CiAgICAgQ2xhc3NOb2RlTGlzdENh
Y2hlIG1fY2xhc3NOb2RlTGlzdENhY2hlOwogCkBAIC0xMjYsMTMgKzEyNSwxOSBAQCBwdWJsaWM6
ICAgIAogICAgIHZvaWQgY2xlYXJOb2RlTGlzdHMoKSB7IG1fbm9kZUxpc3RzLmNsZWFyKCk7IH0K
ICAgICB2b2lkIHNldE5vZGVMaXN0cyhQYXNzT3duUHRyPE5vZGVMaXN0c05vZGVEYXRhPiBsaXN0
cykgeyBtX25vZGVMaXN0cyA9IGxpc3RzOyB9CiAgICAgTm9kZUxpc3RzTm9kZURhdGEqIG5vZGVM
aXN0cygpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZUxpc3RzLmdldCgpOyB9Ci0KICAgICBOb2RlTGlz
dHNOb2RlRGF0YSogZW5zdXJlTm9kZUxpc3RzKE5vZGUqIG5vZGUpCiAgICAgewogICAgICAgICBp
ZiAoIW1fbm9kZUxpc3RzKQogICAgICAgICAgICAgY3JlYXRlTm9kZUxpc3RzKG5vZGUpOwogICAg
ICAgICByZXR1cm4gbV9ub2RlTGlzdHMuZ2V0KCk7CiAgICAgfQorICAgIHZvaWQgY2xlYXJDaGls
ZE5vZGVMaXN0Q2FjaGUoKTsKKyAgICBEeW5hbWljTm9kZUxpc3Q6OkNhY2hlcyogZW5zdXJlQ2hp
bGROb2RlTGlzdENhY2hlKCkKKyAgICB7CisgICAgICAgIGlmICghbV9jaGlsZE5vZGVMaXN0Q2Fj
aGUpCisgICAgICAgICAgICBtX2NoaWxkTm9kZUxpc3RDYWNoZSA9IER5bmFtaWNOb2RlTGlzdDo6
Q2FjaGVzOjpjcmVhdGUoKTsKKyAgICAgICAgcmV0dXJuIG1fY2hpbGROb2RlTGlzdENhY2hlLmdl
dCgpOworICAgIH0KIAogICAgIHNob3J0IHRhYkluZGV4KCkgY29uc3QgeyByZXR1cm4gbV90YWJJ
bmRleDsgfQogICAgIHZvaWQgc2V0VGFiSW5kZXhFeHBsaWNpdGx5KHNob3J0IGluZGV4KSB7IG1f
dGFiSW5kZXggPSBpbmRleDsgbV90YWJJbmRleFdhc1NldEV4cGxpY2l0bHkgPSB0cnVlOyB9CkBA
IC0yMzYsNiArMjQxLDcgQEAgcHJpdmF0ZToKIAogICAgIFRyZWVTY29wZSogbV90cmVlU2NvcGU7
CiAgICAgT3duUHRyPE5vZGVMaXN0c05vZGVEYXRhPiBtX25vZGVMaXN0czsKKyAgICBSZWZQdHI8
RHluYW1pY05vZGVMaXN0OjpDYWNoZXM+IG1fY2hpbGROb2RlTGlzdENhY2hlOwogICAgIE93blB0
cjxFdmVudFRhcmdldERhdGE+IG1fZXZlbnRUYXJnZXREYXRhOwogICAgIHNob3J0IG1fdGFiSW5k
ZXg7CiAgICAgYm9vbCBtX3RhYkluZGV4V2FzU2V0RXhwbGljaXRseSA6IDE7CkluZGV4OiBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAxMDI0OTYpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxMyBAQAorMjAxMS0xMi0wOSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0
Lm9yZz4KKworICAgICAgICBOb2RlQ2hpbGRMaXN0IHNob3VsZG4ndCBiZSBpbiBOb2RlTGlzdE5v
ZGVEYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
Mzk2OQorCisgICAgICAgIEFkZGVkIGEgcmVncmVzc2lvbiB0ZXN0IGZvciBDaGlsZE5vZGVMaXN0
OyBpdCBjYXRjaGVzIGEgYnVnIGNhdWdodCBpbiB0aGUgcmV2aWV3IHByb2Nlc3MuCisKKyAgICAg
ICAgKiBmYXN0L2RvbS9jaGlsZG5vZGUtaXRlbS1hZnRlci1pdGVtbmFtZS1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL2NoaWxkbm9kZS1pdGVtLWFmdGVyLWl0ZW1uYW1l
Lmh0bWw6IEFkZGVkLgorCiAyMDExLTEyLTA5ICBUb255IENoYW5nICA8dG9ueUBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgRml4IHRlc3QgZXhwZWN0YXRpb25zIGZyb20gcjEwMjQ4NjogZmxleC1m
bG93IHJldHVybnMgZGlyZWN0aW9uIGFuZCB3cmFwIG5vdy4KSW5kZXg6IExheW91dFRlc3RzL2Zh
c3QvZG9tL2NoaWxkbm9kZS1pdGVtLWFmdGVyLWl0ZW1uYW1lLWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9jaGlsZG5vZGUtaXRlbS1hZnRlci1pdGVtbmFt
ZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9jaGls
ZG5vZGUtaXRlbS1hZnRlci1pdGVtbmFtZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMyBAQAorVGhpcyB0ZXN0cyBhY2Nlc3NpbmcgdGhlIGZpcnN0IGVsZW1lbnQgaW4gY2hp
bGROb2RlcyBhZnRlciBhY2Nlc3NpbmcgdGhlIHNlY29uZCBlbGVtZW50IGJ5IGl0cyBpZC4gV2Vi
S2l0IHNob3VsZCByZXRyaWV2ZSBlYWNoIGVsZW1lbnQgY29ycmVjdGx5LCBhbmQgeW91IHNob3Vs
ZCBzZWUgMiAxIGJlbG93OgorCisyIDEKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL2NoaWxk
bm9kZS1pdGVtLWFmdGVyLWl0ZW1uYW1lLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZmFzdC9kb20vY2hpbGRub2RlLWl0ZW0tYWZ0ZXItaXRlbW5hbWUuaHRtbAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2Zhc3QvZG9tL2NoaWxkbm9kZS1pdGVtLWFmdGVyLWl0ZW1uYW1lLmh0
bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTggQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+
Cis8Ym9keT4KKzxwPlRoaXMgdGVzdHMgYWNjZXNzaW5nIHRoZSBmaXJzdCBlbGVtZW50IGluIGNo
aWxkTm9kZXMgYWZ0ZXIgYWNjZXNzaW5nIHRoZSBzZWNvbmQgZWxlbWVudCBieSBpdHMgaWQuCitX
ZWJLaXQgc2hvdWxkIHJldHJpZXZlIGVhY2ggZWxlbWVudCBjb3JyZWN0bHksIGFuZCB5b3Ugc2hv
dWxkIHNlZSAyIDEgYmVsb3c6PC9wPgorPHNwYW4gaWQ9Iml0ZW0iPjwvc3Bhbj48c3BhbiBpZD0i
dGVzdHMiIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+MTxzcGFuIGlkPSJpdGVtIj4yPC9zcGFuPjwv
c3Bhbj4KKzxzY3JpcHQ+CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCit2YXIgdGVzdHMgPSBkb2N1bWVu
dC5xdWVyeVNlbGVjdG9yKCcjdGVzdHMnKTsKK2RvY3VtZW50LndyaXRlbG4odGVzdHMuY2hpbGRO
b2Rlc1snaXRlbSddLnRleHRDb250ZW50KTsKK2RvY3VtZW50LndyaXRlbG4odGVzdHMuY2hpbGRO
b2Rlc1swXS50ZXh0Q29udGVudCk7CisKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118674</attachid>
            <date>2011-12-09 17:51:13 -0800</date>
            <delta_ts>2011-12-13 17:08:36 -0800</delta_ts>
            <desc>Fixed per Darin&apos;s comments</desc>
            <filename>bug-73969-20111209175112.patch</filename>
            <type>text/plain</type>
            <size>21825</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMjQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYyIEBACisyMDExLTEyLTA5ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIE5vZGVDaGlsZExpc3Qgc2hvdWxk
bid0IGJlIGluIE5vZGVMaXN0Tm9kZURhdGEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTczOTY5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTW92ZSBOb2RlQ2hpbGRMaXN0IG91dCBvZiBOb2RlTGlzdE5vZGVE
YXRhIHRvIHNlcGFyYXRlIGl0IGZyb20gdGhlIG90aGVyIG5vZGUgbGlzdHMgaW4gb3JkZXIgdG8K
KyAgICAgICAgcmVzb2x2ZSB0aGUgYnVnIDczODUzLiBVbmxpa2Ugb3RoZXIgRHluYW1pY05vZGVM
aXN0LCB3ZSBkb24ndCBuZWVkIHRvIGludmFsaWRhdGUgTm9kZUNoaWxkTGlzdAorICAgICAgICBv
biBhbmNlc3RvcnMgd2hlbiBjaGlsZHJlbiBjaGFuZ2UuIE1vdmluZyBDaGlsZE5vZGVMaXN0IG91
dCBvZiBOb2RlTGlzdE5vZGVEYXRhIG1ha2VzIHRoaXMgZWFzaWVyCisgICAgICAgIGFuZCB0aGUg
bGlmZS1jeWNsZSBvZiBub2RlIGxpc3RzIGluIE5vZGVMaXN0Tm9kZURhdGEgbW9yZSBjb25zaXN0
ZW50LgorCisgICAgICAgIEFsc28gbWFrZSBDaGlsZE5vZGVMaXN0IG5vdCBpbmhlcml0IGZyb20g
RHluYW1pY05vZGVMaXN0IHNpbmNlIHdlIGRvbid0IHdhbnQgdG8gaGFzTm9kZUxpc3RDYWNoZXMK
KyAgICAgICAgdG8gcmV0dXJuIHRydWUganVzdCBiZWNhdXNlIHdlIGhhdmUgYSBjaGlsZCBub2Rl
IHNvbWV3aGVyZSBpbiB0aGUgZG9jdW1lbnQuCisgICAgICAgIFRoZXNlIHR3byBvYmplY3RzIGJl
aGF2ZSB2ZXJ5IGRpZmZlcmVudGx5IGFueXdheS4gVGhlIG9ubHkgZHJhd2JhY2sgaXMgdGhhdCB3
ZSBoYXZlIHRvIHNvbWV3aGF0CisgICAgICAgIGR1cGxpY2F0ZSB0aGUgY29kZSBmb3IgaXRlbVdp
dGhOYW1lIGJ1dCB0aGF0IHNlZW1zIG9rYXkgYmVjYXVzZSBub3cgd2UgY2FuIGRvIGNoaWxkIG5v
ZGUgbGlzdAorICAgICAgICBzcGVjaWZpYyBvcHRpbWl6YXRpb25zLgorCisgICAgICAgIFRlc3Q6
IGZhc3QvZG9tL2NoaWxkbm9kZS1pdGVtLWFmdGVyLWl0ZW1uYW1lLmh0bWwKKworICAgICAgICAq
IGRvbS9DaGlsZE5vZGVMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTm9kZUxpc3Q6
OkNoaWxkTm9kZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2hpbGROb2RlTGlzdDo6bGVuZ3Ro
KToKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTm9kZUxpc3Q6Oml0ZW0pOgorICAgICAgICAoV2Vi
Q29yZTo6bWF0Y2hlc0lkKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDaGlsZE5vZGVMaXN0
OjppdGVtV2l0aE5hbWUpOiBBZGRlZC4KKyAgICAgICAgKiBkb20vQ2hpbGROb2RlTGlzdC5oOgor
ICAgICAgICAoV2ViQ29yZTo6Q2hpbGROb2RlTGlzdDo6Y3JlYXRlKToKKyAgICAgICAgKiBkb20v
Q29udGFpbmVyTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250YWluZXJOb2RlOjpjaGls
ZHJlbkNoYW5nZWQpOiBBbHdheXMgY2FsbCBpbnZhbGlkYXRlTm9kZUxpc3RzQ2FjaGVBZnRlckNo
aWxkcmVuQ2hhbmdlZAorICAgICAgICBzaW5jZSB0aGUgZWFybHkgZXhpdCBpcyBub3cgaW5zaWRl
IHRoZSBmdW5jdGlvbi4KKyAgICAgICAgKiBkb20vRHluYW1pY05vZGVMaXN0LmNwcDogTG90cyBv
ZiBjbGVhbnVwIQorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY05vZGVMaXN0OjpEeW5hbWljTm9k
ZUxpc3QpOiBSZW1vdmVkIGEgY29uc3RydWN0b3IgZm9yIENoaWxkTm9kZUxpc3QuCisgICAgICAg
IChXZWJDb3JlOjpEeW5hbWljTm9kZUxpc3Q6Oml0ZW1XaXRoTmFtZSk6IFVzZSBpc0Rlc2NlbmRh
bnRPZiBpbnN0ZWFkIG9mIGEgbWFudWFsIGxvb3AuCisgICAgICAgIChXZWJDb3JlOjpEeW5hbWlj
Tm9kZUxpc3Q6OmludmFsaWRhdGVDYWNoZSk6CisgICAgICAgICogZG9tL0R5bmFtaWNOb2RlTGlz
dC5oOgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmNo
aWxkTm9kZXMpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6cmVnaXN0ZXJEeW5hbWljTm9kZUxp
c3QpOiBObyBsb25nZXIgY2hlY2tzIGhhc093bkNhY2hlcygpLgorICAgICAgICAoV2ViQ29yZTo6
Tm9kZTo6dW5yZWdpc3RlckR5bmFtaWNOb2RlTGlzdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6Tm9kZTo6aW52YWxpZGF0ZU5vZGVMaXN0c0NhY2hlQWZ0ZXJBdHRyaWJ1dGVDaGFuZ2VkKTog
Q2xlYXIgQ2hpbGROb2RlTGlzdCdzIGNhY2hlCisgICAgICAgIGV4cGxpY2l0bHkgYXQgdGhlIGJl
Z2lubmluZyBmb3IgYW4gYXR0cmlidXRlIG5vZGUuIEV4aXQgZWFybHkgaWYgdGhlcmUgYXJlIG5v
IER5bmFtaWNOb2RlTGlzdC4KKyAgICAgICAgTm8gbmVlZCB0byBkbyB0aGUgc2FtZSBpbiB0aGUg
bG9vcCBzaW5jZSBhbiBhdHRyaWJ1dGUgbm9kZSBjYW4ndCBoYXZlIGFuIGF0dHJpYnV0ZSBub2Rl
IGFzCisgICAgICAgIGFuIGFuY2VzdG9yLiBBbHNvIGRvbid0IGNhbGwgaW52YWxpZGF0ZUNhY2hl
cyBpbiBhbGwgY2FzZXMgYmVjYXVzZSBtb2RpZnlpbmcgYXR0cmlidXRlcyBjYW4gbmV2ZXIKKyAg
ICAgICAgYWZmZWN0IGdldEVsZW1lbnRzQnlUYWdOYW1lIG9yIGdldEVsZW1lbnRzQnlUYWdOYW1l
TlMuCisgICAgICAgIChXZWJDb3JlOjpOb2RlOjppbnZhbGlkYXRlTm9kZUxpc3RzQ2FjaGVBZnRl
ckNoaWxkcmVuQ2hhbmdlZCk6IExpa2V3aXNlLiBDbGVhciBDaGlsZE5vZGVMaXN0J3MKKyAgICAg
ICAgY2FjaGUgZXhwbGljaXRseSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsb29wIGFuZCBleGl0
IGVhcmx5IGlmIGhhc05vZGVMaXN0Q2FjaGVzKCkgaXMgZmFsc2UuCisgICAgICAgIChXZWJDb3Jl
OjpOb2RlOjpyZW1vdmVDYWNoZWRDbGFzc05vZGVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok5v
ZGU6OnJlbW92ZUNhY2hlZE5hbWVOb2RlTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpy
ZW1vdmVDYWNoZWRUYWdOb2RlTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpyZW1vdmVD
YWNoZWRMYWJlbHNOb2RlTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlTGlzdHNOb2RlRGF0
YTo6aW52YWxpZGF0ZUNhY2hlcyk6IE5vIGxvbmdlciBjbGVhcnMgbV9jaGlsZE5vZGVMaXN0Q2Fj
aGVzLiBJdCdzIGRvbmUKKyAgICAgICAgaW4gaW52YWxpZGF0ZU5vZGVMaXN0c0NhY2hlQWZ0ZXJB
dHRyaWJ1dGVDaGFuZ2VkIGFuZCBpbnZhbGlkYXRlTm9kZUxpc3RzQ2FjaGVBZnRlckNoaWxkcmVu
Q2hhbmdlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVMaXN0c05vZGVEYXRhOjppc0VtcHR5KToK
KyAgICAgICAgKFdlYkNvcmU6Ok5vZGVSYXJlRGF0YTo6Y2xlYXJDaGlsZE5vZGVMaXN0Q2FjaGUp
OiBBZGRlZC4KKyAgICAgICAgKiBkb20vTm9kZVJhcmVEYXRhLmg6CisgICAgICAgIChXZWJDb3Jl
OjpOb2RlUmFyZURhdGE6Om5vZGVMaXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlUmFyZURh
dGE6OmVuc3VyZUNoaWxkTm9kZUxpc3RDYWNoZSk6IEFkZGVkLgorCiAyMDExLTEyLTA5ICBNYXJ5
IFd1ICA8bWFyeS53dUB0b3JjaG1vYmlsZS5jb20uY24+CiAKICAgICAgICAgU21hbGwgc3R5bGUg
Zml4IG9uIERyYWdEYXRhQmxhY2tCZXJyeS5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9D
aGlsZE5vZGVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGRO
b2RlTGlzdC5jcHAJKHJldmlzaW9uIDEwMjQ0NCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9DaGls
ZE5vZGVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMyw2ICszLDcgQEAKICAqICAgICAgICAg
ICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAg
ICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKICAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwpAQCAtMjcsOCArMjgsOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LUNoaWxkTm9kZUxpc3Q6OkNoaWxkTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwg
RHluYW1pY05vZGVMaXN0OjpDYWNoZXMqIGluZm8pCi0gICAgOiBEeW5hbWljTm9kZUxpc3Qocm9v
dE5vZGUsIGluZm8pCitDaGlsZE5vZGVMaXN0OjpDaGlsZE5vZGVMaXN0KFBhc3NSZWZQdHI8Tm9k
ZT4gbm9kZSwgRHluYW1pY05vZGVMaXN0OjpDYWNoZXMqIGNhY2hlcykKKyAgICA6IG1fbm9kZShu
b2RlKQorICAgICwgbV9jYWNoZXMoY2FjaGVzKQogewogfQogCkBAIC0zOCw3ICs0MCw3IEBAIHVu
c2lnbmVkIENoaWxkTm9kZUxpc3Q6Omxlbmd0aCgpIGNvbnN0CiAgICAgICAgIHJldHVybiBtX2Nh
Y2hlcy0+Y2FjaGVkTGVuZ3RoOwogCiAgICAgdW5zaWduZWQgbGVuID0gMDsKLSAgICBmb3IgKE5v
ZGUqIG4gPSBtX3Jvb3ROb2RlLT5maXJzdENoaWxkKCk7IG47IG4gPSBuLT5uZXh0U2libGluZygp
KQorICAgIGZvciAoTm9kZSogbiA9IG1fbm9kZS0+Zmlyc3RDaGlsZCgpOyBuOyBuID0gbi0+bmV4
dFNpYmxpbmcoKSkKICAgICAgICAgbGVuKys7CiAKICAgICBtX2NhY2hlcy0+Y2FjaGVkTGVuZ3Ro
ID0gbGVuOwpAQCAtNTAsNyArNTIsNyBAQCB1bnNpZ25lZCBDaGlsZE5vZGVMaXN0OjpsZW5ndGgo
KSBjb25zdAogTm9kZSogQ2hpbGROb2RlTGlzdDo6aXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3QK
IHsKICAgICB1bnNpZ25lZCBpbnQgcG9zID0gMDsKLSAgICBOb2RlKiBuID0gbV9yb290Tm9kZS0+
Zmlyc3RDaGlsZCgpOworICAgIE5vZGUqIG4gPSBtX25vZGUtPmZpcnN0Q2hpbGQoKTsKIAogICAg
IGlmIChtX2NhY2hlcy0+aXNJdGVtQ2FjaGVWYWxpZCkgewogICAgICAgICBpZiAoaW5kZXggPT0g
bV9jYWNoZXMtPmxhc3RJdGVtT2Zmc2V0KQpAQCAtNzEsNyArNzMsNyBAQCBOb2RlKiBDaGlsZE5v
ZGVMaXN0OjppdGVtKHVuc2lnbmVkIGluZGV4CiAgICAgICAgIGludCBkaWZmID0gaW5kZXggLSBw
b3M7CiAgICAgICAgIHVuc2lnbmVkIGRpc3QgPSBhYnMoZGlmZik7CiAgICAgICAgIGlmIChkaXN0
ID4gbV9jYWNoZXMtPmNhY2hlZExlbmd0aCAtIDEgLSBpbmRleCkgewotICAgICAgICAgICAgbiA9
IG1fcm9vdE5vZGUtPmxhc3RDaGlsZCgpOworICAgICAgICAgICAgbiA9IG1fbm9kZS0+bGFzdENo
aWxkKCk7CiAgICAgICAgICAgICBwb3MgPSBtX2NhY2hlcy0+Y2FjaGVkTGVuZ3RoIC0gMTsKICAg
ICAgICAgfQogICAgIH0KQEAgLTk4LDEyICsxMDAsMzUgQEAgTm9kZSogQ2hpbGROb2RlTGlzdDo6
aXRlbSh1bnNpZ25lZCBpbmRleAogICAgIHJldHVybiAwOwogfQogCi1ib29sIENoaWxkTm9kZUxp
c3Q6Om5vZGVNYXRjaGVzKEVsZW1lbnQqIHRlc3ROb2RlKSBjb25zdAorc3RhdGljIGlubGluZSBi
b29sIG1hdGNoZXNJZChOb2RlKiBub2RlLCBjb25zdCBBdG9taWNTdHJpbmcmIGVsZW1lbnRJZCkK
IHsKLSAgICAvLyBOb3RlOiBEdWUgdG8gdGhlIG92ZXJyaWRlcyBvZiB0aGUgbGVuZ3RoIGFuZCBp
dGVtIGZ1bmN0aW9ucyBhYm92ZSwKLSAgICAvLyB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVk
IG9ubHkgYnkgRHluYW1pY05vZGVMaXN0OjppdGVtV2l0aE5hbWUsCi0gICAgLy8gZm9yIGFuIGVs
ZW1lbnQgdGhhdCB3YXMgbG9jYXRlZCB3aXRoIGdldEVsZW1lbnRCeUlkLgotICAgIHJldHVybiB0
ZXN0Tm9kZS0+cGFyZW50Tm9kZSgpID09IG1fcm9vdE5vZGU7CisgICAgLy8gRklYTUU6IFRoaXMg
c2hvdWxkIHByb2JhYmx5IGJlIHVzaW5nIGdldElkQXR0cmlidXRlIGluc3RlYWQgb2YgaWRGb3JT
dHlsZVJlc29sdXRpb24uCisgICAgcmV0dXJuIG5vZGUtPmhhc0lEKCkgJiYgc3RhdGljX2Nhc3Q8
RWxlbWVudCo+KG5vZGUpLT5pZEZvclN0eWxlUmVzb2x1dGlvbigpID09IGVsZW1lbnRJZDsKK30K
KworTm9kZSogQ2hpbGROb2RlTGlzdDo6aXRlbVdpdGhOYW1lKGNvbnN0IEF0b21pY1N0cmluZyYg
ZWxlbWVudElkKSBjb25zdAoreworICAgIGlmIChtX2NhY2hlcy0+aXNJdGVtQ2FjaGVWYWxpZCAm
JiBtYXRjaGVzSWQobV9jYWNoZXMtPmxhc3RJdGVtLCBlbGVtZW50SWQpKQorICAgICAgICByZXR1
cm4gbV9jYWNoZXMtPmxhc3RJdGVtOworCisgICAgaWYgKG1fbm9kZS0+aW5Eb2N1bWVudCgpKSB7
CisgICAgICAgIEVsZW1lbnQqIG5vZGUgPSBtX25vZGUtPnRyZWVTY29wZSgpLT5nZXRFbGVtZW50
QnlJZChlbGVtZW50SWQpOworICAgICAgICBpZiAoIW5vZGUgfHwgbm9kZS0+cGFyZW50Tm9kZSgp
ID09IG1fbm9kZSkKKyAgICAgICAgICAgIHJldHVybiBub2RlOworICAgICAgICAvLyBJbiB0aGUg
Y2FzZSBvZiBtdWx0aXBsZSBub2RlcyB3aXRoIHRoZSBzYW1lIElELCBqdXN0IGZhbGwgdGhyb3Vn
aC4KKyAgICB9CisKKyAgICB1bnNpZ25lZCBvZmZzZXQgPSAwOworICAgIGZvciAoTm9kZSogbm9k
ZSA9IG1fbm9kZS0+Zmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gbm9kZS0+bmV4dFNpYmxpbmco
KSkgeworICAgICAgICBpZiAobWF0Y2hlc0lkKG5vZGUsIGVsZW1lbnRJZCkpIHsKKyAgICAgICAg
ICAgIG1fY2FjaGVzLT5sYXN0SXRlbSA9IG5vZGU7CisgICAgICAgICAgICBtX2NhY2hlcy0+bGFz
dEl0ZW1PZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgICAgICBtX2NhY2hlcy0+aXNJdGVtQ2FjaGVW
YWxpZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgfQorICAgICAg
ICBvZmZzZXQrKzsKKyAgICB9CisgICAgcmV0dXJuIDA7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZE5vZGVMaXN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0NoaWxkTm9kZUxpc3QuaAkocmV2aXNpb24gMTAyNDQ0
KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0NoaWxkTm9kZUxpc3QuaAkod29ya2luZyBjb3B5KQpA
QCAtMyw2ICszLDcgQEAKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29p
dmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxs
ZXJAa2RlLm9yZykKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjksMjEgKzMwLDI0IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIENoaWxkTm9kZUxpc3QgOiBwdWJsaWMg
RHluYW1pY05vZGVMaXN0IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PENoaWxkTm9kZUxpc3Q+IGNyZWF0ZShQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBDYWNoZXMq
IGNhY2hlcykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDaGls
ZE5vZGVMaXN0KHJvb3ROb2RlLCBjYWNoZXMpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZpcnR1
YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgTm9kZSogaXRlbSh1
bnNpZ25lZCBpbmRleCkgY29uc3Q7Ci0KLSAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIENoaWxkTm9k
ZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgQ2FjaGVzKik7Ci0KLSAgICAgICAgdmly
dHVhbCBib29sIG5vZGVNYXRjaGVzKEVsZW1lbnQqKSBjb25zdDsKLSAgICB9OworY2xhc3MgQ2hp
bGROb2RlTGlzdCA6IHB1YmxpYyBOb2RlTGlzdCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8Q2hpbGROb2RlTGlzdD4gY3JlYXRlKFBhc3NSZWZQdHI8Tm9kZT4gbm9kZSwgRHluYW1p
Y05vZGVMaXN0OjpDYWNoZXMqIGNhY2hlcykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgQ2hpbGROb2RlTGlzdChub2RlLCBjYWNoZXMpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFs
IHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgTm9kZSogaXRl
bSh1bnNpZ25lZCBpbmRleCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBOb2RlKiBpdGVt
V2l0aE5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiBlbGVtZW50SWQpIGNvbnN0IE9WRVJSSURFOwor
Citwcm90ZWN0ZWQ6CisgICAgQ2hpbGROb2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+LCBEeW5hbWlj
Tm9kZUxpc3Q6OkNhY2hlcyopOworCitwcml2YXRlOgorICAgIFJlZlB0cjxOb2RlPiBtX25vZGU7
CisgICAgbXV0YWJsZSBSZWZQdHI8RHluYW1pY05vZGVMaXN0OjpDYWNoZXM+IG1fY2FjaGVzOwor
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20v
Q29udGFpbmVyTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0NvbnRh
aW5lck5vZGUuY3BwCShyZXZpc2lvbiAxMDI0NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ29u
dGFpbmVyTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0NCw4ICs4NDQsNyBAQCB2b2lkIENv
bnRhaW5lck5vZGU6OmNoaWxkcmVuQ2hhbmdlZChib29sCiAgICAgTm9kZTo6Y2hpbGRyZW5DaGFu
Z2VkKGNoYW5nZWRCeVBhcnNlciwgYmVmb3JlQ2hhbmdlLCBhZnRlckNoYW5nZSwgY2hpbGRDb3Vu
dERlbHRhKTsKICAgICBpZiAoIWNoYW5nZWRCeVBhcnNlciAmJiBjaGlsZENvdW50RGVsdGEpCiAg
ICAgICAgIGRvY3VtZW50KCktPnVwZGF0ZVJhbmdlc0FmdGVyQ2hpbGRyZW5DaGFuZ2VkKHRoaXMp
OwotICAgIGlmICh0cmVlU2NvcGUoKS0+aGFzTm9kZUxpc3RDYWNoZXMoKSkKLSAgICAgICAgaW52
YWxpZGF0ZU5vZGVMaXN0c0NhY2hlQWZ0ZXJDaGlsZHJlbkNoYW5nZWQoKTsKKyAgICBpbnZhbGlk
YXRlTm9kZUxpc3RzQ2FjaGVBZnRlckNoaWxkcmVuQ2hhbmdlZCgpOwogfQogCiB2b2lkIENvbnRh
aW5lck5vZGU6OmNsb25lQ2hpbGROb2RlcyhDb250YWluZXJOb2RlICpjbG9uZSkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2RvbS9EeW5hbWljTm9kZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2RvbS9EeW5hbWljTm9kZUxpc3QuY3BwCShyZXZpc2lvbiAxMDI0NDQpCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vRHluYW1pY05vZGVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzEsMTggKzMxLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogRHluYW1pY05vZGVMaXN0OjpEeW5h
bWljTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSkKICAgICA6IG1fcm9vdE5vZGUo
cm9vdE5vZGUpCiAgICAgLCBtX2NhY2hlcyhDYWNoZXM6OmNyZWF0ZSgpKQotICAgICwgbV9vd25z
Q2FjaGVzKHRydWUpCiB7CiAgICAgbV9yb290Tm9kZS0+cmVnaXN0ZXJEeW5hbWljTm9kZUxpc3Qo
dGhpcyk7Ci19ICAgIAotCi1EeW5hbWljTm9kZUxpc3Q6OkR5bmFtaWNOb2RlTGlzdChQYXNzUmVm
UHRyPE5vZGU+IHJvb3ROb2RlLCBEeW5hbWljTm9kZUxpc3Q6OkNhY2hlcyogY2FjaGVzKQotICAg
IDogbV9yb290Tm9kZShyb290Tm9kZSkKLSAgICAsIG1fY2FjaGVzKGNhY2hlcykKLSAgICAsIG1f
b3duc0NhY2hlcyhmYWxzZSkKLXsKLSAgICBtX3Jvb3ROb2RlLT5yZWdpc3RlckR5bmFtaWNOb2Rl
TGlzdCh0aGlzKTsKLX0gICAgCit9CiAKIER5bmFtaWNOb2RlTGlzdDo6fkR5bmFtaWNOb2RlTGlz
dCgpCiB7CkBAIC0xMjMsMTIgKzExNCw4IEBAIE5vZGUqIER5bmFtaWNOb2RlTGlzdDo6aXRlbVdp
dGhOYW1lKGNvbnMKIHsKICAgICBpZiAobV9yb290Tm9kZS0+aXNEb2N1bWVudE5vZGUoKSB8fCBt
X3Jvb3ROb2RlLT5pbkRvY3VtZW50KCkpIHsKICAgICAgICAgRWxlbWVudCogbm9kZSA9IG1fcm9v
dE5vZGUtPnRyZWVTY29wZSgpLT5nZXRFbGVtZW50QnlJZChlbGVtZW50SWQpOwotICAgICAgICBp
ZiAobm9kZSAmJiBub2RlTWF0Y2hlcyhub2RlKSkgewotICAgICAgICAgICAgZm9yIChDb250YWlu
ZXJOb2RlKiBwID0gbm9kZS0+cGFyZW50Tm9kZSgpOyBwOyBwID0gcC0+cGFyZW50Tm9kZSgpKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKHAgPT0gbV9yb290Tm9kZSkKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG5vZGU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKG5v
ZGUgJiYgbm9kZU1hdGNoZXMobm9kZSkgJiYgbm9kZS0+aXNEZXNjZW5kYW50T2YobV9yb290Tm9k
ZS5nZXQoKSkpCisgICAgICAgICAgICByZXR1cm4gbm9kZTsKICAgICAgICAgaWYgKCFub2RlKQog
ICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIC8vIEluIHRoZSBjYXNlIG9mIG11bHRpcGxl
IG5vZGVzIHdpdGggdGhlIHNhbWUgbmFtZSwganVzdCBmYWxsIHRocm91Z2guCkBAIC0xNTIsOCAr
MTM5LDYgQEAgYm9vbCBEeW5hbWljTm9kZUxpc3Q6OmlzRHluYW1pY05vZGVMaXN0KAogCiB2b2lk
IER5bmFtaWNOb2RlTGlzdDo6aW52YWxpZGF0ZUNhY2hlKCkKIHsKLSAgICAvLyBUaGlzIHNob3Vs
ZCBvbmx5IGJlIGNhbGxlZCBmb3Igbm9kZSBsaXN0cyB0aGF0IG93biB0aGVpciBvd24gY2FjaGVz
LgotICAgIEFTU0VSVChtX293bnNDYWNoZXMpOwogICAgIG1fY2FjaGVzLT5yZXNldCgpOwogfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRHluYW1pY05vZGVMaXN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZG9tL0R5bmFtaWNOb2RlTGlzdC5oCShyZXZpc2lvbiAxMDI0NDQp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRHluYW1pY05vZGVMaXN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTUxLDggKzUxLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZpcnR1YWwg
fkR5bmFtaWNOb2RlTGlzdCgpOwogCi0gICAgICAgIGJvb2wgaGFzT3duQ2FjaGVzKCkgY29uc3Qg
eyByZXR1cm4gbV9vd25zQ2FjaGVzOyB9Ci0KICAgICAgICAgLy8gRE9NIG1ldGhvZHMgJiBhdHRy
aWJ1dGVzIGZvciBOb2RlTGlzdAogICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIGxlbmd0aCgpIGNv
bnN0OwogICAgICAgICB2aXJ0dWFsIE5vZGUqIGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0OwpA
QCAtNjQsMTMgKzYyLDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIHByb3RlY3RlZDoK
ICAgICAgICAgRHluYW1pY05vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUpOwotICAg
ICAgICBEeW5hbWljTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgQ2FjaGVzKik7
CiAKICAgICAgICAgdmlydHVhbCBib29sIG5vZGVNYXRjaGVzKEVsZW1lbnQqKSBjb25zdCA9IDA7
CiAKICAgICAgICAgUmVmUHRyPE5vZGU+IG1fcm9vdE5vZGU7CiAgICAgICAgIG11dGFibGUgUmVm
UHRyPENhY2hlcz4gbV9jYWNoZXM7Ci0gICAgICAgIGJvb2wgbV9vd25zQ2FjaGVzOwogCiAgICAg
cHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBib29sIGlzRHluYW1pY05vZGVMaXN0KCkgY29uc3Q7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZG9tL05vZGUuY3BwCShyZXZpc2lvbiAxMDI0NDQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9kb20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyMywxMCArNjIzLDcgQEAgdm9pZCBO
b2RlOjpzZXROb2RlVmFsdWUoY29uc3QgU3RyaW5nJiAvKgogCiBQYXNzUmVmUHRyPE5vZGVMaXN0
PiBOb2RlOjpjaGlsZE5vZGVzKCkKIHsKLSAgICBOb2RlTGlzdHNOb2RlRGF0YSogbm9kZUxpc3Rz
ID0gZW5zdXJlUmFyZURhdGEoKS0+ZW5zdXJlTm9kZUxpc3RzKHRoaXMpOwotICAgIGlmICghbm9k
ZUxpc3RzLT5tX2NoaWxkTm9kZUxpc3RDYWNoZXMpCi0gICAgICAgIG5vZGVMaXN0cy0+bV9jaGls
ZE5vZGVMaXN0Q2FjaGVzID0gRHluYW1pY05vZGVMaXN0OjpDYWNoZXM6OmNyZWF0ZSgpOwotICAg
IHJldHVybiBDaGlsZE5vZGVMaXN0OjpjcmVhdGUodGhpcywgbm9kZUxpc3RzLT5tX2NoaWxkTm9k
ZUxpc3RDYWNoZXMuZ2V0KCkpOworICAgIHJldHVybiBDaGlsZE5vZGVMaXN0OjpjcmVhdGUodGhp
cywgZW5zdXJlUmFyZURhdGEoKS0+ZW5zdXJlQ2hpbGROb2RlTGlzdENhY2hlKCkpOwogfQogCiBO
b2RlICpOb2RlOjpsYXN0RGVzY2VuZGFudCgpIGNvbnN0CkBAIC0xMDExLDQyICsxMDA4LDQ5IEBA
IHZvaWQgTm9kZTo6cmVnaXN0ZXJEeW5hbWljTm9kZUxpc3QoRHluYW0KICAgICBpZiAoZGF0YS0+
bm9kZUxpc3RzKCkgJiYgKCF0cmVlU2NvcGUoKSB8fCAhdHJlZVNjb3BlKCktPmhhc05vZGVMaXN0
Q2FjaGVzKCkpKQogICAgICAgICBkYXRhLT5ub2RlTGlzdHMoKS0+aW52YWxpZGF0ZUNhY2hlcygp
OwogCi0gICAgaWYgKGxpc3QtPmhhc093bkNhY2hlcygpKQotICAgICAgICBkYXRhLT5lbnN1cmVO
b2RlTGlzdHModGhpcyktPm1fbGlzdHNXaXRoQ2FjaGVzLmFkZChsaXN0KTsKKyAgICBkYXRhLT5l
bnN1cmVOb2RlTGlzdHModGhpcyktPm1fbGlzdHNXaXRoQ2FjaGVzLmFkZChsaXN0KTsKIH0KIAog
dm9pZCBOb2RlOjp1bnJlZ2lzdGVyRHluYW1pY05vZGVMaXN0KER5bmFtaWNOb2RlTGlzdCogbGlz
dCkKIHsKLSAgICBBU1NFUlQocmFyZURhdGEoKSk7CisgICAgQVNTRVJUKGhhc1JhcmVEYXRhKCkp
OwogICAgIEFTU0VSVChyYXJlRGF0YSgpLT5ub2RlTGlzdHMoKSk7Ci0gICAgaWYgKGxpc3QtPmhh
c093bkNhY2hlcygpKSB7Ci0gICAgICAgIE5vZGVSYXJlRGF0YSogZGF0YSA9IHJhcmVEYXRhKCk7
Ci0gICAgICAgIGRhdGEtPm5vZGVMaXN0cygpLT5tX2xpc3RzV2l0aENhY2hlcy5yZW1vdmUobGlz
dCk7Ci0gICAgICAgIHJlbW92ZU5vZGVMaXN0Q2FjaGVJZlBvc3NpYmxlKHRoaXMsIGRhdGEpOwot
ICAgIH0KKyAgICBOb2RlUmFyZURhdGEqIGRhdGEgPSByYXJlRGF0YSgpOworICAgIGRhdGEtPm5v
ZGVMaXN0cygpLT5tX2xpc3RzV2l0aENhY2hlcy5yZW1vdmUobGlzdCk7CisgICAgcmVtb3ZlTm9k
ZUxpc3RDYWNoZUlmUG9zc2libGUodGhpcywgZGF0YSk7CiB9CiAKIHZvaWQgTm9kZTo6aW52YWxp
ZGF0ZU5vZGVMaXN0c0NhY2hlQWZ0ZXJBdHRyaWJ1dGVDaGFuZ2VkKCkKIHsKKyAgICBpZiAoaGFz
UmFyZURhdGEoKSAmJiBpc0F0dHJpYnV0ZU5vZGUoKSkgeworICAgICAgICBOb2RlUmFyZURhdGEq
IGRhdGEgPSByYXJlRGF0YSgpOworICAgICAgICBBU1NFUlQoIWRhdGEtPm5vZGVMaXN0cygpKTsK
KyAgICAgICAgZGF0YS0+Y2xlYXJDaGlsZE5vZGVMaXN0Q2FjaGUoKTsKKyAgICB9CisKKyAgICBp
ZiAoIXRyZWVTY29wZSgpLT5oYXNOb2RlTGlzdENhY2hlcygpKQorICAgICAgICByZXR1cm47CisK
ICAgICBmb3IgKE5vZGUqIG5vZGUgPSB0aGlzOyBub2RlOyBub2RlID0gbm9kZS0+cGFyZW50Tm9k
ZSgpKSB7CisgICAgICAgIEFTU0VSVCh0aGlzID09IG5vZGUgfHwgIW5vZGUtPmlzQXR0cmlidXRl
Tm9kZSgpKTsKICAgICAgICAgaWYgKCFub2RlLT5oYXNSYXJlRGF0YSgpKQogICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgIE5vZGVSYXJlRGF0YSogZGF0YSA9IG5vZGUtPnJhcmVEYXRhKCk7
CiAgICAgICAgIGlmICghZGF0YS0+bm9kZUxpc3RzKCkpCiAgICAgICAgICAgICBjb250aW51ZTsK
IAotICAgICAgICAvLyBGb3IgYXR0cmlidXRlIG5vZGVzLCB3ZSBuZWVkIHRvIGludmFsaWRhdGUg
Y2hpbGROb2RlcyBhcyB3ZWxsLgotICAgICAgICBpZiAobm9kZS0+aXNBdHRyaWJ1dGVOb2RlKCkp
Ci0gICAgICAgICAgICBkYXRhLT5ub2RlTGlzdHMoKS0+aW52YWxpZGF0ZUNhY2hlcygpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBkYXRhLT5ub2RlTGlzdHMoKS0+aW52YWxpZGF0ZUNhY2hl
c1RoYXREZXBlbmRPbkF0dHJpYnV0ZXMoKTsKLQorICAgICAgICBkYXRhLT5ub2RlTGlzdHMoKS0+
aW52YWxpZGF0ZUNhY2hlc1RoYXREZXBlbmRPbkF0dHJpYnV0ZXMoKTsKICAgICAgICAgcmVtb3Zl
Tm9kZUxpc3RDYWNoZUlmUG9zc2libGUobm9kZSwgZGF0YSk7CiAgICAgfQogfQogCiB2b2lkIE5v
ZGU6OmludmFsaWRhdGVOb2RlTGlzdHNDYWNoZUFmdGVyQ2hpbGRyZW5DaGFuZ2VkKCkKIHsKKyAg
ICBpZiAoaGFzUmFyZURhdGEoKSkKKyAgICAgICAgcmFyZURhdGEoKS0+Y2xlYXJDaGlsZE5vZGVM
aXN0Q2FjaGUoKTsKKworICAgIGlmICghdHJlZVNjb3BlKCktPmhhc05vZGVMaXN0Q2FjaGVzKCkp
CisgICAgICAgIHJldHVybjsKICAgICBmb3IgKE5vZGUqIG5vZGUgPSB0aGlzOyBub2RlOyBub2Rl
ID0gbm9kZS0+cGFyZW50Tm9kZSgpKSB7CiAgICAgICAgIGlmICghbm9kZS0+aGFzUmFyZURhdGEo
KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTA4MCw3ICsxMDg0LDYgQEAgdm9pZCBOb2Rl
OjpyZW1vdmVDYWNoZWRDbGFzc05vZGVMaXN0KENsYQogewogICAgIEFTU0VSVChyYXJlRGF0YSgp
KTsKICAgICBBU1NFUlQocmFyZURhdGEoKS0+bm9kZUxpc3RzKCkpOwotICAgIEFTU0VSVF9VTlVT
RUQobGlzdCwgbGlzdC0+aGFzT3duQ2FjaGVzKCkpOwogCiAgICAgTm9kZUxpc3RzTm9kZURhdGEq
IGRhdGEgPSByYXJlRGF0YSgpLT5ub2RlTGlzdHMoKTsKICAgICBBU1NFUlRfVU5VU0VEKGxpc3Qs
IGxpc3QgPT0gZGF0YS0+bV9jbGFzc05vZGVMaXN0Q2FjaGUuZ2V0KGNsYXNzTmFtZSkpOwpAQCAt
MTA5MSw3ICsxMDk0LDYgQEAgdm9pZCBOb2RlOjpyZW1vdmVDYWNoZWROYW1lTm9kZUxpc3QoTmFt
ZQogewogICAgIEFTU0VSVChyYXJlRGF0YSgpKTsKICAgICBBU1NFUlQocmFyZURhdGEoKS0+bm9k
ZUxpc3RzKCkpOwotICAgIEFTU0VSVF9VTlVTRUQobGlzdCwgbGlzdC0+aGFzT3duQ2FjaGVzKCkp
OwogCiAgICAgTm9kZUxpc3RzTm9kZURhdGEqIGRhdGEgPSByYXJlRGF0YSgpLT5ub2RlTGlzdHMo
KTsKICAgICBBU1NFUlRfVU5VU0VEKGxpc3QsIGxpc3QgPT0gZGF0YS0+bV9uYW1lTm9kZUxpc3RD
YWNoZS5nZXQobm9kZU5hbWUpKTsKQEAgLTExMDIsNyArMTEwNCw2IEBAIHZvaWQgTm9kZTo6cmVt
b3ZlQ2FjaGVkVGFnTm9kZUxpc3QoVGFnTm8KIHsKICAgICBBU1NFUlQocmFyZURhdGEoKSk7CiAg
ICAgQVNTRVJUKHJhcmVEYXRhKCktPm5vZGVMaXN0cygpKTsKLSAgICBBU1NFUlRfVU5VU0VEKGxp
c3QsIGxpc3QtPmhhc093bkNhY2hlcygpKTsKIAogICAgIE5vZGVMaXN0c05vZGVEYXRhKiBkYXRh
ID0gcmFyZURhdGEoKS0+bm9kZUxpc3RzKCk7CiAgICAgQVNTRVJUX1VOVVNFRChsaXN0LCBsaXN0
ID09IGRhdGEtPm1fdGFnTm9kZUxpc3RDYWNoZS5nZXQobmFtZS5pbXBsKCkpKTsKQEAgLTExMTMs
NyArMTExNCw2IEBAIHZvaWQgTm9kZTo6cmVtb3ZlQ2FjaGVkVGFnTm9kZUxpc3QoVGFnTm8KIHsK
ICAgICBBU1NFUlQocmFyZURhdGEoKSk7CiAgICAgQVNTRVJUKHJhcmVEYXRhKCktPm5vZGVMaXN0
cygpKTsKLSAgICBBU1NFUlRfVU5VU0VEKGxpc3QsIGxpc3QtPmhhc093bkNhY2hlcygpKTsKIAog
ICAgIE5vZGVMaXN0c05vZGVEYXRhKiBkYXRhID0gcmFyZURhdGEoKS0+bm9kZUxpc3RzKCk7CiAg
ICAgQVNTRVJUX1VOVVNFRChsaXN0LCBsaXN0ID09IGRhdGEtPm1fdGFnTm9kZUxpc3RDYWNoZU5T
LmdldChuYW1lLmltcGwoKSkpOwpAQCAtMTEyNCw5ICsxMTI0LDkgQEAgdm9pZCBOb2RlOjpyZW1v
dmVDYWNoZWRMYWJlbHNOb2RlTGlzdChEeQogewogICAgIEFTU0VSVChyYXJlRGF0YSgpKTsKICAg
ICBBU1NFUlQocmFyZURhdGEoKS0+bm9kZUxpc3RzKCkpOwotICAgIEFTU0VSVF9VTlVTRUQobGlz
dCwgbGlzdC0+aGFzT3duQ2FjaGVzKCkpOwotICAgIAorCiAgICAgTm9kZUxpc3RzTm9kZURhdGEq
IGRhdGEgPSByYXJlRGF0YSgpLT5ub2RlTGlzdHMoKTsKKyAgICBBU1NFUlRfVU5VU0VEKGxpc3Qs
IGxpc3QgPT0gZGF0YS0+bV9sYWJlbHNOb2RlTGlzdENhY2hlKTsKICAgICBkYXRhLT5tX2xhYmVs
c05vZGVMaXN0Q2FjaGUgPSAwOwogfQogCkBAIC0yMzg5LDEzICsyMzg5LDYgQEAgdm9pZCBOb2Rl
OjpzaG93VHJlZUZvclRoaXNBY3Jvc3NGcmFtZSgpIAogCiB2b2lkIE5vZGVMaXN0c05vZGVEYXRh
OjppbnZhbGlkYXRlQ2FjaGVzKCkKIHsKLSAgICBpZiAobV9jaGlsZE5vZGVMaXN0Q2FjaGVzKSB7
Ci0gICAgICAgIGlmIChtX2NoaWxkTm9kZUxpc3RDYWNoZXMtPmhhc09uZVJlZigpKQotICAgICAg
ICAgICAgbV9jaGlsZE5vZGVMaXN0Q2FjaGVzLmNsZWFyKCk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIG1fY2hpbGROb2RlTGlzdENhY2hlcy0+cmVzZXQoKTsKLSAgICB9Ci0KICAgICBpZiAo
bV9sYWJlbHNOb2RlTGlzdENhY2hlKQogICAgICAgICBtX2xhYmVsc05vZGVMaXN0Q2FjaGUtPmlu
dmFsaWRhdGVDYWNoZSgpOwogICAgIFRhZ05vZGVMaXN0Q2FjaGU6OmNvbnN0X2l0ZXJhdG9yIHRh
Z0NhY2hlRW5kID0gbV90YWdOb2RlTGlzdENhY2hlLmVuZCgpOwpAQCAtMjQzOCw5ICsyNDMxLDYg
QEAgYm9vbCBOb2RlTGlzdHNOb2RlRGF0YTo6aXNFbXB0eSgpIGNvbnN0CiAgICAgaWYgKCFtX2xp
c3RzV2l0aENhY2hlcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlm
IChtX2NoaWxkTm9kZUxpc3RDYWNoZXMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQogICAgIGlm
ICghbV90YWdOb2RlTGlzdENhY2hlLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIGlmICghbV90YWdOb2RlTGlzdENhY2hlTlMuaXNFbXB0eSgpKQpAQCAtMzAwNCw2ICsyOTk0
LDE3IEBAIHZvaWQgTm9kZVJhcmVEYXRhOjpjcmVhdGVOb2RlTGlzdHMoTm9kZSoKICAgICAgICAg
dHJlZVNjb3BlLT5hZGROb2RlTGlzdENhY2hlKCk7CiB9CiAKK3ZvaWQgTm9kZVJhcmVEYXRhOjpj
bGVhckNoaWxkTm9kZUxpc3RDYWNoZSgpCit7CisgICAgaWYgKCFtX2NoaWxkTm9kZUxpc3RDYWNo
ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fY2hpbGROb2RlTGlzdENhY2hlLT5oYXNP
bmVSZWYoKSkKKyAgICAgICAgbV9jaGlsZE5vZGVMaXN0Q2FjaGUuY2xlYXIoKTsKKyAgICBlbHNl
CisgICAgICAgIG1fY2hpbGROb2RlTGlzdENhY2hlLT5yZXNldCgpOworfQorCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKICNpZm5kZWYgTkRFQlVHCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20v
Tm9kZVJhcmVEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGVSYXJl
RGF0YS5oCShyZXZpc2lvbiAxMDI0NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVE
YXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyLDYgKzIyLDcgQEAKICNpZm5kZWYgTm9kZVJhcmVE
YXRhX2gKICNkZWZpbmUgTm9kZVJhcmVEYXRhX2gKIAorI2luY2x1ZGUgIkNoaWxkTm9kZUxpc3Qu
aCIKICNpbmNsdWRlICJDbGFzc05vZGVMaXN0LmgiCiAjaW5jbHVkZSAiRE9NU2V0dGFibGVUb2tl
bkxpc3QuaCIKICNpbmNsdWRlICJEeW5hbWljTm9kZUxpc3QuaCIKQEAgLTUxLDkgKzUyLDcgQEAg
c3RydWN0IE5vZGVMaXN0c05vZGVEYXRhIHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIEhhc2hTZXQ8
RHluYW1pY05vZGVMaXN0Kj4gTm9kZUxpc3RTZXQ7CiAgICAgTm9kZUxpc3RTZXQgbV9saXN0c1dp
dGhDYWNoZXM7Ci0gICAgCi0gICAgUmVmUHRyPER5bmFtaWNOb2RlTGlzdDo6Q2FjaGVzPiBtX2No
aWxkTm9kZUxpc3RDYWNoZXM7Ci0gICAgCisKICAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBD
bGFzc05vZGVMaXN0Kj4gQ2xhc3NOb2RlTGlzdENhY2hlOwogICAgIENsYXNzTm9kZUxpc3RDYWNo
ZSBtX2NsYXNzTm9kZUxpc3RDYWNoZTsKIApAQCAtMTI2LDEzICsxMjUsMTkgQEAgcHVibGljOiAg
ICAKICAgICB2b2lkIGNsZWFyTm9kZUxpc3RzKCkgeyBtX25vZGVMaXN0cy5jbGVhcigpOyB9CiAg
ICAgdm9pZCBzZXROb2RlTGlzdHMoUGFzc093blB0cjxOb2RlTGlzdHNOb2RlRGF0YT4gbGlzdHMp
IHsgbV9ub2RlTGlzdHMgPSBsaXN0czsgfQogICAgIE5vZGVMaXN0c05vZGVEYXRhKiBub2RlTGlz
dHMoKSBjb25zdCB7IHJldHVybiBtX25vZGVMaXN0cy5nZXQoKTsgfQotCiAgICAgTm9kZUxpc3Rz
Tm9kZURhdGEqIGVuc3VyZU5vZGVMaXN0cyhOb2RlKiBub2RlKQogICAgIHsKICAgICAgICAgaWYg
KCFtX25vZGVMaXN0cykKICAgICAgICAgICAgIGNyZWF0ZU5vZGVMaXN0cyhub2RlKTsKICAgICAg
ICAgcmV0dXJuIG1fbm9kZUxpc3RzLmdldCgpOwogICAgIH0KKyAgICB2b2lkIGNsZWFyQ2hpbGRO
b2RlTGlzdENhY2hlKCk7CisgICAgRHluYW1pY05vZGVMaXN0OjpDYWNoZXMqIGVuc3VyZUNoaWxk
Tm9kZUxpc3RDYWNoZSgpCisgICAgeworICAgICAgICBpZiAoIW1fY2hpbGROb2RlTGlzdENhY2hl
KQorICAgICAgICAgICAgbV9jaGlsZE5vZGVMaXN0Q2FjaGUgPSBEeW5hbWljTm9kZUxpc3Q6OkNh
Y2hlczo6Y3JlYXRlKCk7CisgICAgICAgIHJldHVybiBtX2NoaWxkTm9kZUxpc3RDYWNoZS5nZXQo
KTsKKyAgICB9CiAKICAgICBzaG9ydCB0YWJJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFiSW5k
ZXg7IH0KICAgICB2b2lkIHNldFRhYkluZGV4RXhwbGljaXRseShzaG9ydCBpbmRleCkgeyBtX3Rh
YkluZGV4ID0gaW5kZXg7IG1fdGFiSW5kZXhXYXNTZXRFeHBsaWNpdGx5ID0gdHJ1ZTsgfQpAQCAt
MjM2LDYgKzI0MSw3IEBAIHByaXZhdGU6CiAKICAgICBUcmVlU2NvcGUqIG1fdHJlZVNjb3BlOwog
ICAgIE93blB0cjxOb2RlTGlzdHNOb2RlRGF0YT4gbV9ub2RlTGlzdHM7CisgICAgUmVmUHRyPER5
bmFtaWNOb2RlTGlzdDo6Q2FjaGVzPiBtX2NoaWxkTm9kZUxpc3RDYWNoZTsKICAgICBPd25QdHI8
RXZlbnRUYXJnZXREYXRhPiBtX2V2ZW50VGFyZ2V0RGF0YTsKICAgICBzaG9ydCBtX3RhYkluZGV4
OwogICAgIGJvb2wgbV90YWJJbmRleFdhc1NldEV4cGxpY2l0bHkgOiAxOwpJbmRleDogTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2
aXNpb24gMTAyNDk2KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTMgQEAKKzIwMTEtMTItMDkgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgTm9kZUNoaWxkTGlzdCBzaG91bGRuJ3QgYmUgaW4gTm9kZUxpc3ROb2Rl
RGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM5
NjkKKworICAgICAgICBBZGRlZCBhIHJlZ3Jlc3Npb24gdGVzdCBmb3IgQ2hpbGROb2RlTGlzdDsg
aXQgY2F0Y2hlcyBhIGJ1ZyBjYXVnaHQgaW4gdGhlIHJldmlldyBwcm9jZXNzLgorCisgICAgICAg
ICogZmFzdC9kb20vY2hpbGRub2RlLWl0ZW0tYWZ0ZXItaXRlbW5hbWUtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9jaGlsZG5vZGUtaXRlbS1hZnRlci1pdGVtbmFtZS5o
dG1sOiBBZGRlZC4KKwogMjAxMS0xMi0wOSAgVG9ueSBDaGFuZyAgPHRvbnlAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIEZpeCB0ZXN0IGV4cGVjdGF0aW9ucyBmcm9tIHIxMDI0ODY6IGZsZXgtZmxv
dyByZXR1cm5zIGRpcmVjdGlvbiBhbmQgd3JhcCBub3cuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0
L2RvbS9jaGlsZG5vZGUtaXRlbS1hZnRlci1pdGVtbmFtZS1leHBlY3RlZC50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vY2hpbGRub2RlLWl0ZW0tYWZ0ZXItaXRlbW5hbWUt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vY2hpbGRu
b2RlLWl0ZW0tYWZ0ZXItaXRlbW5hbWUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDMgQEAKK1RoaXMgdGVzdHMgYWNjZXNzaW5nIHRoZSBmaXJzdCBlbGVtZW50IGluIGNoaWxk
Tm9kZXMgYWZ0ZXIgYWNjZXNzaW5nIHRoZSBzZWNvbmQgZWxlbWVudCBieSBpdHMgaWQuIFdlYktp
dCBzaG91bGQgcmV0cmlldmUgZWFjaCBlbGVtZW50IGNvcnJlY3RseSwgYW5kIHlvdSBzaG91bGQg
c2VlIDIgMSBiZWxvdzoKKworMiAxCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9jaGlsZG5v
ZGUtaXRlbS1hZnRlci1pdGVtbmFtZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3QvZG9tL2NoaWxkbm9kZS1pdGVtLWFmdGVyLWl0ZW1uYW1lLmh0bWwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9jaGlsZG5vZGUtaXRlbS1hZnRlci1pdGVtbmFtZS5odG1s
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE4IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgor
PGJvZHk+Cis8cD5UaGlzIHRlc3RzIGFjY2Vzc2luZyB0aGUgZmlyc3QgZWxlbWVudCBpbiBjaGls
ZE5vZGVzIGFmdGVyIGFjY2Vzc2luZyB0aGUgc2Vjb25kIGVsZW1lbnQgYnkgaXRzIGlkLgorV2Vi
S2l0IHNob3VsZCByZXRyaWV2ZSBlYWNoIGVsZW1lbnQgY29ycmVjdGx5LCBhbmQgeW91IHNob3Vs
ZCBzZWUgMiAxIGJlbG93OjwvcD4KKzxzcGFuIGlkPSJpdGVtIj48L3NwYW4+PHNwYW4gaWQ9InRl
c3RzIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjE8c3BhbiBpZD0iaXRlbSI+Mjwvc3Bhbj48L3Nw
YW4+Cis8c2NyaXB0PgorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKwordmFyIHRlc3RzID0gZG9jdW1lbnQu
cXVlcnlTZWxlY3RvcignI3Rlc3RzJyk7Citkb2N1bWVudC53cml0ZWxuKHRlc3RzLmNoaWxkTm9k
ZXNbJ2l0ZW0nXS50ZXh0Q29udGVudCk7Citkb2N1bWVudC53cml0ZWxuKHRlc3RzLmNoaWxkTm9k
ZXNbMF0udGV4dENvbnRlbnQpOworCis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119114</attachid>
            <date>2011-12-13 17:08:40 -0800</date>
            <delta_ts>2011-12-14 15:18:30 -0800</delta_ts>
            <desc>Fixed per Sam&apos;s comment</desc>
            <filename>bug-73969-20111213170839.patch</filename>
            <type>text/plain</type>
            <size>33888</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMjcyMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg3IEBACisyMDExLTEyLTEzICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIE5vZGVDaGlsZExpc3Qgc2hvdWxk
bid0IGJlIGluIE5vZGVMaXN0Tm9kZURhdGEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTczOTY5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTW92ZSBOb2RlQ2hpbGRMaXN0IG91dCBvZiBOb2RlTGlzdE5vZGVE
YXRhIHRvIHNlcGFyYXRlIGl0IGZyb20gdGhlIG90aGVyIG5vZGUgbGlzdHMgaW4gb3JkZXIgdG8K
KyAgICAgICAgcmVzb2x2ZSB0aGUgYnVnIDczODUzLiBVbmxpa2Ugb3RoZXIgRHluYW1pY05vZGVM
aXN0LCB3ZSBkb24ndCBuZWVkIHRvIGludmFsaWRhdGUgTm9kZUNoaWxkTGlzdAorICAgICAgICBv
biBhbmNlc3RvcnMgd2hlbiBjaGlsZHJlbiBjaGFuZ2UuIE1vdmluZyBDaGlsZE5vZGVMaXN0IG91
dCBvZiBOb2RlTGlzdE5vZGVEYXRhIG1ha2VzIHRoaXMgZGlmZmVyZW5jZQorICAgICAgICBhcHBh
cmVudCBhbmQgbWFrZXMgRHluYW1pY05vZGVMaXN0OjpDYWNoZXMgaW4gTm9kZUxpc3ROb2RlRGF0
YSBhbHdheXMgaGVsZCBieSBhIER5bmFtaWNTdWJ0cmVlTm9kZUxpc3QsCisgICAgICAgIGVsaW1p
bmF0aW5nIHRoZSBuZWVkIGZvciBoYXNPd25DYWNoZXMoKSBjaGVja3MgaW4gdmFyaW91cyBwbGFj
ZXMuCisKKyAgICAgICAgQWxzbyByZW5hbWVkIHRoZSBleGlzdGluZyBEeW5hbWljTm9kZUxpc3Qg
dG8gRHluYW1pY1N1YnRyZWVOb2RlTGlzdCBhbmQgcmUtaW50cm9kdWNlZCBEeW5hbWljTm9kZUxp
c3QKKyAgICAgICAgZnJvbSB3aGljaCBEeW5hbWljU3VidHJlZU5vZGVMaXN0IGFuZCBDaGlsZE5v
ZGVMaXN0IGJvdGggaW5oZXJpdCB0byBzaGFyZSB0aGUgY29kZSBmb3IgaXRlbVdpdGhOYW1lLgor
CisgICAgICAgIEluIGFkZGl0aW9uLCByZW5hbWVkIHJlZ2lzdGVyRHluYW1pY05vZGVMaXN0IGFu
ZCB1bnJlZ2lzdGVyRHluYW1pY05vZGVMaXN0LCB3aGljaCB1cGRhdGVzIGEgY291bnRlciBmb3IK
KyAgICAgICAgVHJlZVNjb3BlOjpoYXNOb2RlTGlzdENhY2hlcywgdG8gcmVnaXN0ZXJEeW5hbWlj
U3VidHJlZU5vZGVMaXN0IGFuZCB1bnJlZ2lzdGVyRHluYW1pY1N1YnRyZWVOb2RlTGlzdAorICAg
ICAgICByZXNwZWN0aXZlbHkuIFRoZXkgYXJlIG5vIGxvbmdlciBjYWxsZWQgYnkgQ2hpbGROb2Rl
TGlzdCBpbiBvcmRlciB0byBhdm9pZCB3YWxraW5nIHVwIHRoZSBET00gdHJlZQorICAgICAgICBp
bnNpZGUgaW52YWxpZGF0ZU5vZGVMaXN0c0NhY2hlQWZ0ZXJBdHRyaWJ1dGVDaGFuZ2VkIGFuZCBp
bnZhbGlkYXRlTm9kZUxpc3RzQ2FjaGVBZnRlckNoaWxkcmVuQ2hhbmdlZC4KKworICAgICAgICBU
ZXN0OiBmYXN0L2RvbS9jaGlsZG5vZGUtaXRlbS1hZnRlci1pdGVtbmFtZS5odG1sCisKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU05vZGVMaXN0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkpTTm9kZUxpc3RPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMpOgorICAgICAgICAq
IGRvbS9DaGlsZE5vZGVMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTm9kZUxpc3Q6
OkNoaWxkTm9kZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2hpbGROb2RlTGlzdDo6bGVuZ3Ro
KToKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTm9kZUxpc3Q6Oml0ZW0pOgorICAgICAgICAoV2Vi
Q29yZTo6Q2hpbGROb2RlTGlzdDo6bm9kZU1hdGNoZXMpOgorICAgICAgICAqIGRvbS9DaGlsZE5v
ZGVMaXN0Lmg6CisgICAgICAgICogZG9tL0NsYXNzTm9kZUxpc3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q2xhc3NOb2RlTGlzdDo6Q2xhc3NOb2RlTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpD
bGFzc05vZGVMaXN0Ojp+Q2xhc3NOb2RlTGlzdCk6CisgICAgICAgICogZG9tL0NsYXNzTm9kZUxp
c3QuaDoKKyAgICAgICAgKiBkb20vQ29udGFpbmVyTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDb250YWluZXJOb2RlOjpjaGlsZHJlbkNoYW5nZWQpOgorICAgICAgICAqIGRvbS9EeW5hbWlj
Tm9kZUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY1N1YnRyZWVOb2RlTGlzdDo6
RHluYW1pY1N1YnRyZWVOb2RlTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljU3VidHJl
ZU5vZGVMaXN0Ojp+RHluYW1pY1N1YnRyZWVOb2RlTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpE
eW5hbWljU3VidHJlZU5vZGVMaXN0OjpsZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1p
Y1N1YnRyZWVOb2RlTGlzdDo6aXRlbUZvcndhcmRzRnJvbUN1cnJlbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6RHluYW1pY1N1YnRyZWVOb2RlTGlzdDo6aXRlbUJhY2t3YXJkc0Zyb21DdXJyZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNTdWJ0cmVlTm9kZUxpc3Q6Oml0ZW0pOgorICAgICAg
ICAoV2ViQ29yZTo6RHluYW1pY05vZGVMaXN0OjppdGVtV2l0aE5hbWUpOgorICAgICAgICAoV2Vi
Q29yZTo6RHluYW1pY1N1YnRyZWVOb2RlTGlzdDo6aXNEeW5hbWljTm9kZUxpc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RHluYW1pY1N1YnRyZWVOb2RlTGlzdDo6aW52YWxpZGF0ZUNhY2hlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkR5bmFtaWNTdWJ0cmVlTm9kZUxpc3Q6OkNhY2hlczo6Q2FjaGVzKToK
KyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNTdWJ0cmVlTm9kZUxpc3Q6OkNhY2hlczo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNTdWJ0cmVlTm9kZUxpc3Q6OkNhY2hlczo6cmVz
ZXQpOgorICAgICAgICAqIGRvbS9EeW5hbWljTm9kZUxpc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkR5bmFtaWNOb2RlTGlzdDo6RHluYW1pY05vZGVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkR5
bmFtaWNOb2RlTGlzdDo6fkR5bmFtaWNOb2RlTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpEeW5h
bWljTm9kZUxpc3Q6Om5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY1N1YnRyZWVOb2Rl
TGlzdDo6cm9vdE5vZGUpOgorICAgICAgICAqIGRvbS9OYW1lTm9kZUxpc3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6TmFtZU5vZGVMaXN0OjpOYW1lTm9kZUxpc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6TmFtZU5vZGVMaXN0Ojp+TmFtZU5vZGVMaXN0KToKKyAgICAgICAgKiBkb20vTmFtZU5vZGVM
aXN0Lmg6CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6
Y2hpbGROb2Rlcyk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpyZWdpc3RlckR5bmFtaWNTdWJ0
cmVlTm9kZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6dW5yZWdpc3RlckR5bmFtaWNT
dWJ0cmVlTm9kZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6aW52YWxpZGF0ZU5vZGVM
aXN0c0NhY2hlQWZ0ZXJBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6
OmludmFsaWRhdGVOb2RlTGlzdHNDYWNoZUFmdGVyQ2hpbGRyZW5DaGFuZ2VkKToKKyAgICAgICAg
KFdlYkNvcmU6Ok5vZGU6OnJlbW92ZUNhY2hlZENsYXNzTm9kZUxpc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Tm9kZTo6cmVtb3ZlQ2FjaGVkTmFtZU5vZGVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6
Ok5vZGU6OnJlbW92ZUNhY2hlZFRhZ05vZGVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6
OnJlbW92ZUNhY2hlZExhYmVsc05vZGVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVMaXN0
c05vZGVEYXRhOjppbnZhbGlkYXRlQ2FjaGVzKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVMaXN0
c05vZGVEYXRhOjppc0VtcHR5KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVSYXJlRGF0YTo6Y2xl
YXJDaGlsZE5vZGVMaXN0Q2FjaGUpOgorICAgICAgICAqIGRvbS9Ob2RlLmg6CisgICAgICAgICog
ZG9tL05vZGVSYXJlRGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZVJhcmVEYXRhOjpub2Rl
TGlzdHMpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZVJhcmVEYXRhOjplbnN1cmVDaGlsZE5vZGVM
aXN0Q2FjaGUpOgorICAgICAgICAqIGRvbS9UYWdOb2RlTGlzdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpUYWdOb2RlTGlzdDo6VGFnTm9kZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6VGFnTm9k
ZUxpc3Q6On5UYWdOb2RlTGlzdCk6CisgICAgICAgICogZG9tL1RhZ05vZGVMaXN0Lmg6CisgICAg
ICAgICogaHRtbC9MYWJlbHNOb2RlTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYWJlbHNO
b2RlTGlzdDo6TGFiZWxzTm9kZUxpc3QpOgorICAgICAgICAqIGh0bWwvTGFiZWxzTm9kZUxpc3Qu
aDoKKwogMjAxMS0xMi0xMyAgUm9iaW4gRHVubiAgPHJvYmluQGFsbGR1bm4uY29tPgogCiAgICAg
ICAgIERvbid0IG1ha2UgdGhlIGJpdG1hcCB0cmFuc3BhcmVudCB3aGVuIHVzaW5nIHRoZW1lIGRy
YXdpbmcKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUxpc3RDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUxpc3RD
dXN0b20uY3BwCShyZXZpc2lvbiAxMDI0NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU05vZGVMaXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCBi
b29sIEpTTm9kZUxpc3RPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICBpZiAoIWpzTm9kZUxpc3QtPmltcGwoKS0+aXNEeW5hbWljTm9kZUxpc3QoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB2aXNpdG9yLmNvbnRhaW5zT3BhcXVl
Um9vdChyb290KHN0YXRpY19jYXN0PER5bmFtaWNOb2RlTGlzdCo+KGpzTm9kZUxpc3QtPmltcGwo
KSktPnJvb3ROb2RlKCkpKTsKKyAgICByZXR1cm4gdmlzaXRvci5jb250YWluc09wYXF1ZVJvb3Qo
cm9vdChzdGF0aWNfY2FzdDxEeW5hbWljTm9kZUxpc3QqPihqc05vZGVMaXN0LT5pbXBsKCkpLT5u
b2RlKCkpKTsKIH0KIAogYm9vbCBKU05vZGVMaXN0OjpjYW5HZXRJdGVtc0Zvck5hbWUoRXhlY1N0
YXRlKiwgTm9kZUxpc3QqIGltcGwsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZE5vZGVMaXN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9kb20vQ2hpbGROb2RlTGlzdC5jcHAJKHJldmlzaW9uIDEwMjQ0NCkKKysr
IFNvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZE5vZGVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjcsOCArMjcsOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNoaWxkTm9kZUxpc3Q6OkNo
aWxkTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgRHluYW1pY05vZGVMaXN0OjpD
YWNoZXMqIGluZm8pCi0gICAgOiBEeW5hbWljTm9kZUxpc3Qocm9vdE5vZGUsIGluZm8pCitDaGls
ZE5vZGVMaXN0OjpDaGlsZE5vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gbm9kZSwgRHluYW1pY05v
ZGVMaXN0OjpDYWNoZXMqIGNhY2hlcykKKyAgICA6IER5bmFtaWNOb2RlTGlzdChub2RlKQorICAg
ICwgbV9jYWNoZXMoY2FjaGVzKQogewogfQogCkBAIC0zOCw3ICszOSw3IEBAIHVuc2lnbmVkIENo
aWxkTm9kZUxpc3Q6Omxlbmd0aCgpIGNvbnN0CiAgICAgICAgIHJldHVybiBtX2NhY2hlcy0+Y2Fj
aGVkTGVuZ3RoOwogCiAgICAgdW5zaWduZWQgbGVuID0gMDsKLSAgICBmb3IgKE5vZGUqIG4gPSBt
X3Jvb3ROb2RlLT5maXJzdENoaWxkKCk7IG47IG4gPSBuLT5uZXh0U2libGluZygpKQorICAgIGZv
ciAoTm9kZSogbiA9IG5vZGUoKS0+Zmlyc3RDaGlsZCgpOyBuOyBuID0gbi0+bmV4dFNpYmxpbmco
KSkKICAgICAgICAgbGVuKys7CiAKICAgICBtX2NhY2hlcy0+Y2FjaGVkTGVuZ3RoID0gbGVuOwpA
QCAtNTAsNyArNTEsNyBAQCB1bnNpZ25lZCBDaGlsZE5vZGVMaXN0OjpsZW5ndGgoKSBjb25zdAog
Tm9kZSogQ2hpbGROb2RlTGlzdDo6aXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3QKIHsKICAgICB1
bnNpZ25lZCBpbnQgcG9zID0gMDsKLSAgICBOb2RlKiBuID0gbV9yb290Tm9kZS0+Zmlyc3RDaGls
ZCgpOworICAgIE5vZGUqIG4gPSBub2RlKCktPmZpcnN0Q2hpbGQoKTsKIAogICAgIGlmIChtX2Nh
Y2hlcy0+aXNJdGVtQ2FjaGVWYWxpZCkgewogICAgICAgICBpZiAoaW5kZXggPT0gbV9jYWNoZXMt
Pmxhc3RJdGVtT2Zmc2V0KQpAQCAtNzEsNyArNzIsNyBAQCBOb2RlKiBDaGlsZE5vZGVMaXN0Ojpp
dGVtKHVuc2lnbmVkIGluZGV4CiAgICAgICAgIGludCBkaWZmID0gaW5kZXggLSBwb3M7CiAgICAg
ICAgIHVuc2lnbmVkIGRpc3QgPSBhYnMoZGlmZik7CiAgICAgICAgIGlmIChkaXN0ID4gbV9jYWNo
ZXMtPmNhY2hlZExlbmd0aCAtIDEgLSBpbmRleCkgewotICAgICAgICAgICAgbiA9IG1fcm9vdE5v
ZGUtPmxhc3RDaGlsZCgpOworICAgICAgICAgICAgbiA9IG5vZGUoKS0+bGFzdENoaWxkKCk7CiAg
ICAgICAgICAgICBwb3MgPSBtX2NhY2hlcy0+Y2FjaGVkTGVuZ3RoIC0gMTsKICAgICAgICAgfQog
ICAgIH0KQEAgLTEwMyw3ICsxMDQsNyBAQCBib29sIENoaWxkTm9kZUxpc3Q6Om5vZGVNYXRjaGVz
KEVsZW1lbnQqCiAgICAgLy8gTm90ZTogRHVlIHRvIHRoZSBvdmVycmlkZXMgb2YgdGhlIGxlbmd0
aCBhbmQgaXRlbSBmdW5jdGlvbnMgYWJvdmUsCiAgICAgLy8gdGhpcyBmdW5jdGlvbiB3aWxsIGJl
IGNhbGxlZCBvbmx5IGJ5IER5bmFtaWNOb2RlTGlzdDo6aXRlbVdpdGhOYW1lLAogICAgIC8vIGZv
ciBhbiBlbGVtZW50IHRoYXQgd2FzIGxvY2F0ZWQgd2l0aCBnZXRFbGVtZW50QnlJZC4KLSAgICBy
ZXR1cm4gdGVzdE5vZGUtPnBhcmVudE5vZGUoKSA9PSBtX3Jvb3ROb2RlOworICAgIHJldHVybiB0
ZXN0Tm9kZS0+cGFyZW50Tm9kZSgpID09IG5vZGUoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0NoaWxkTm9kZUxpc3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGROb2RlTGlzdC5oCShyZXZpc2lvbiAxMDI0NDQp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGROb2RlTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC00Myw2ICs0Myw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgQ2hpbGROb2RlTGlz
dChQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBDYWNoZXMqKTsKIAogICAgICAgICB2aXJ0dWFs
IGJvb2wgbm9kZU1hdGNoZXMoRWxlbWVudCopIGNvbnN0OworCisgICAgICAgIG11dGFibGUgUmVm
UHRyPER5bmFtaWNOb2RlTGlzdDo6Q2FjaGVzPiBtX2NhY2hlczsKICAgICB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQ2xhc3NOb2RlTGlzdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0NsYXNzTm9kZUxpc3QuY3BwCShy
ZXZpc2lvbiAxMDI0NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ2xhc3NOb2RlTGlzdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM2LDE1ICszNiwxNSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBDbGFzc05vZGVMaXN0OjpDbGFzc05vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUs
IGNvbnN0IFN0cmluZyYgY2xhc3NOYW1lcykKLSAgICA6IER5bmFtaWNOb2RlTGlzdChyb290Tm9k
ZSkKLSAgICAsIG1fY2xhc3NOYW1lcyhjbGFzc05hbWVzLCBtX3Jvb3ROb2RlLT5kb2N1bWVudCgp
LT5pblF1aXJrc01vZGUoKSkKKyAgICA6IER5bmFtaWNTdWJ0cmVlTm9kZUxpc3Qocm9vdE5vZGUp
CisgICAgLCBtX2NsYXNzTmFtZXMoY2xhc3NOYW1lcywgbm9kZSgpLT5kb2N1bWVudCgpLT5pblF1
aXJrc01vZGUoKSkKICAgICAsIG1fb3JpZ2luYWxDbGFzc05hbWVzKGNsYXNzTmFtZXMpCiB7CiB9
CiAKIENsYXNzTm9kZUxpc3Q6On5DbGFzc05vZGVMaXN0KCkKIHsKLSAgICBtX3Jvb3ROb2RlLT5y
ZW1vdmVDYWNoZWRDbGFzc05vZGVMaXN0KHRoaXMsIG1fb3JpZ2luYWxDbGFzc05hbWVzKTsKKyAg
ICByb290Tm9kZSgpLT5yZW1vdmVDYWNoZWRDbGFzc05vZGVMaXN0KHRoaXMsIG1fb3JpZ2luYWxD
bGFzc05hbWVzKTsKIH0gCiAKIGJvb2wgQ2xhc3NOb2RlTGlzdDo6bm9kZU1hdGNoZXMoRWxlbWVu
dCogdGVzdE5vZGUpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQ2xhc3NOb2RlTGlz
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9DbGFzc05vZGVMaXN0LmgJKHJl
dmlzaW9uIDEwMjQ0NCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9DbGFzc05vZGVMaXN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0g
ICAgY2xhc3MgQ2xhc3NOb2RlTGlzdCA6IHB1YmxpYyBEeW5hbWljTm9kZUxpc3QgeworICAgIGNs
YXNzIENsYXNzTm9kZUxpc3QgOiBwdWJsaWMgRHluYW1pY1N1YnRyZWVOb2RlTGlzdCB7CiAgICAg
cHVibGljOgogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDbGFzc05vZGVMaXN0PiBjcmVhdGUo
UGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgY29uc3QgU3RyaW5nJiBjbGFzc05hbWVzKQogICAg
ICAgICB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCShyZXZpc2lvbiAx
MDI0NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTg0NCw4ICs4NDQsNyBAQCB2b2lkIENvbnRhaW5lck5vZGU6OmNoaWxkcmVuQ2hh
bmdlZChib29sCiAgICAgTm9kZTo6Y2hpbGRyZW5DaGFuZ2VkKGNoYW5nZWRCeVBhcnNlciwgYmVm
b3JlQ2hhbmdlLCBhZnRlckNoYW5nZSwgY2hpbGRDb3VudERlbHRhKTsKICAgICBpZiAoIWNoYW5n
ZWRCeVBhcnNlciAmJiBjaGlsZENvdW50RGVsdGEpCiAgICAgICAgIGRvY3VtZW50KCktPnVwZGF0
ZVJhbmdlc0FmdGVyQ2hpbGRyZW5DaGFuZ2VkKHRoaXMpOwotICAgIGlmICh0cmVlU2NvcGUoKS0+
aGFzTm9kZUxpc3RDYWNoZXMoKSkKLSAgICAgICAgaW52YWxpZGF0ZU5vZGVMaXN0c0NhY2hlQWZ0
ZXJDaGlsZHJlbkNoYW5nZWQoKTsKKyAgICBpbnZhbGlkYXRlTm9kZUxpc3RzQ2FjaGVBZnRlckNo
aWxkcmVuQ2hhbmdlZCgpOwogfQogCiB2b2lkIENvbnRhaW5lck5vZGU6OmNsb25lQ2hpbGROb2Rl
cyhDb250YWluZXJOb2RlICpjbG9uZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9EeW5hbWlj
Tm9kZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9EeW5hbWljTm9k
ZUxpc3QuY3BwCShyZXZpc2lvbiAxMDI0NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRHluYW1p
Y05vZGVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMzUgKzI4LDI2IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotRHluYW1pY05vZGVMaXN0OjpEeW5hbWljTm9kZUxpc3QoUGFzc1Jl
ZlB0cjxOb2RlPiByb290Tm9kZSkKLSAgICA6IG1fcm9vdE5vZGUocm9vdE5vZGUpCitEeW5hbWlj
U3VidHJlZU5vZGVMaXN0OjpEeW5hbWljU3VidHJlZU5vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4g
bm9kZSkKKyAgICA6IER5bmFtaWNOb2RlTGlzdChub2RlKQogICAgICwgbV9jYWNoZXMoQ2FjaGVz
OjpjcmVhdGUoKSkKLSAgICAsIG1fb3duc0NhY2hlcyh0cnVlKQogewotICAgIG1fcm9vdE5vZGUt
PnJlZ2lzdGVyRHluYW1pY05vZGVMaXN0KHRoaXMpOwotfSAgICAKLQotRHluYW1pY05vZGVMaXN0
OjpEeW5hbWljTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgRHluYW1pY05vZGVM
aXN0OjpDYWNoZXMqIGNhY2hlcykKLSAgICA6IG1fcm9vdE5vZGUocm9vdE5vZGUpCi0gICAgLCBt
X2NhY2hlcyhjYWNoZXMpCi0gICAgLCBtX293bnNDYWNoZXMoZmFsc2UpCi17Ci0gICAgbV9yb290
Tm9kZS0+cmVnaXN0ZXJEeW5hbWljTm9kZUxpc3QodGhpcyk7Ci19ICAgIAorICAgIHJvb3ROb2Rl
KCktPnJlZ2lzdGVyRHluYW1pY1N1YnRyZWVOb2RlTGlzdCh0aGlzKTsKK30KIAotRHluYW1pY05v
ZGVMaXN0Ojp+RHluYW1pY05vZGVMaXN0KCkKK0R5bmFtaWNTdWJ0cmVlTm9kZUxpc3Q6On5EeW5h
bWljU3VidHJlZU5vZGVMaXN0KCkKIHsKLSAgICBtX3Jvb3ROb2RlLT51bnJlZ2lzdGVyRHluYW1p
Y05vZGVMaXN0KHRoaXMpOworICAgIHJvb3ROb2RlKCktPnVucmVnaXN0ZXJEeW5hbWljU3VidHJl
ZU5vZGVMaXN0KHRoaXMpOwogfQogCi11bnNpZ25lZCBEeW5hbWljTm9kZUxpc3Q6Omxlbmd0aCgp
IGNvbnN0Cit1bnNpZ25lZCBEeW5hbWljU3VidHJlZU5vZGVMaXN0OjpsZW5ndGgoKSBjb25zdAog
ewogICAgIGlmIChtX2NhY2hlcy0+aXNMZW5ndGhDYWNoZVZhbGlkKQogICAgICAgICByZXR1cm4g
bV9jYWNoZXMtPmNhY2hlZExlbmd0aDsKIAogICAgIHVuc2lnbmVkIGxlbmd0aCA9IDA7CiAKLSAg
ICBmb3IgKE5vZGUqIG4gPSBtX3Jvb3ROb2RlLT5maXJzdENoaWxkKCk7IG47IG4gPSBuLT50cmF2
ZXJzZU5leHROb2RlKG1fcm9vdE5vZGUuZ2V0KCkpKQorICAgIGZvciAoTm9kZSogbiA9IG5vZGUo
KS0+Zmlyc3RDaGlsZCgpOyBuOyBuID0gbi0+dHJhdmVyc2VOZXh0Tm9kZShyb290Tm9kZSgpKSkK
ICAgICAgICAgbGVuZ3RoICs9IG4tPmlzRWxlbWVudE5vZGUoKSAmJiBub2RlTWF0Y2hlcyhzdGF0
aWNfY2FzdDxFbGVtZW50Kj4obikpOwogCiAgICAgbV9jYWNoZXMtPmNhY2hlZExlbmd0aCA9IGxl
bmd0aDsKQEAgLTY1LDEwICs1NiwxMCBAQCB1bnNpZ25lZCBEeW5hbWljTm9kZUxpc3Q6Omxlbmd0
aCgpIGNvbnN0CiAgICAgcmV0dXJuIGxlbmd0aDsKIH0KIAotTm9kZSogRHluYW1pY05vZGVMaXN0
OjppdGVtRm9yd2FyZHNGcm9tQ3VycmVudChOb2RlKiBzdGFydCwgdW5zaWduZWQgb2Zmc2V0LCBp
bnQgcmVtYWluaW5nT2Zmc2V0KSBjb25zdAorTm9kZSogRHluYW1pY1N1YnRyZWVOb2RlTGlzdDo6
aXRlbUZvcndhcmRzRnJvbUN1cnJlbnQoTm9kZSogc3RhcnQsIHVuc2lnbmVkIG9mZnNldCwgaW50
IHJlbWFpbmluZ09mZnNldCkgY29uc3QKIHsKICAgICBBU1NFUlQocmVtYWluaW5nT2Zmc2V0ID49
IDApOwotICAgIGZvciAoTm9kZSogbiA9IHN0YXJ0OyBuOyBuID0gbi0+dHJhdmVyc2VOZXh0Tm9k
ZShtX3Jvb3ROb2RlLmdldCgpKSkgeworICAgIGZvciAoTm9kZSogbiA9IHN0YXJ0OyBuOyBuID0g
bi0+dHJhdmVyc2VOZXh0Tm9kZShyb290Tm9kZSgpKSkgewogICAgICAgICBpZiAobi0+aXNFbGVt
ZW50Tm9kZSgpICYmIG5vZGVNYXRjaGVzKHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKSkpIHsKICAg
ICAgICAgICAgIGlmICghcmVtYWluaW5nT2Zmc2V0KSB7CiAgICAgICAgICAgICAgICAgbV9jYWNo
ZXMtPmxhc3RJdGVtID0gbjsKQEAgLTgzLDEwICs3NCwxMCBAQCBOb2RlKiBEeW5hbWljTm9kZUxp
c3Q6Oml0ZW1Gb3J3YXJkc0Zyb21DCiAgICAgcmV0dXJuIDA7IC8vIG5vIG1hdGNoaW5nIG5vZGUg
aW4gdGhpcyBzdWJ0cmVlCiB9CiAKLU5vZGUqIER5bmFtaWNOb2RlTGlzdDo6aXRlbUJhY2t3YXJk
c0Zyb21DdXJyZW50KE5vZGUqIHN0YXJ0LCB1bnNpZ25lZCBvZmZzZXQsIGludCByZW1haW5pbmdP
ZmZzZXQpIGNvbnN0CitOb2RlKiBEeW5hbWljU3VidHJlZU5vZGVMaXN0OjppdGVtQmFja3dhcmRz
RnJvbUN1cnJlbnQoTm9kZSogc3RhcnQsIHVuc2lnbmVkIG9mZnNldCwgaW50IHJlbWFpbmluZ09m
ZnNldCkgY29uc3QKIHsKICAgICBBU1NFUlQocmVtYWluaW5nT2Zmc2V0IDwgMCk7Ci0gICAgZm9y
IChOb2RlKiBuID0gc3RhcnQ7IG47IG4gPSBuLT50cmF2ZXJzZVByZXZpb3VzTm9kZShtX3Jvb3RO
b2RlLmdldCgpKSkgeworICAgIGZvciAoTm9kZSogbiA9IHN0YXJ0OyBuOyBuID0gbi0+dHJhdmVy
c2VQcmV2aW91c05vZGUocm9vdE5vZGUoKSkpIHsKICAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5v
ZGUoKSAmJiBub2RlTWF0Y2hlcyhzdGF0aWNfY2FzdDxFbGVtZW50Kj4obikpKSB7CiAgICAgICAg
ICAgICBpZiAoIXJlbWFpbmluZ09mZnNldCkgewogICAgICAgICAgICAgICAgIG1fY2FjaGVzLT5s
YXN0SXRlbSA9IG47CkBAIC0xMDEsMTAgKzkyLDEwIEBAIE5vZGUqIER5bmFtaWNOb2RlTGlzdDo6
aXRlbUJhY2t3YXJkc0Zyb20KICAgICByZXR1cm4gMDsgLy8gbm8gbWF0Y2hpbmcgbm9kZSBpbiB0
aGlzIHN1YnRyZWUKIH0KIAotTm9kZSogRHluYW1pY05vZGVMaXN0OjppdGVtKHVuc2lnbmVkIG9m
ZnNldCkgY29uc3QKK05vZGUqIER5bmFtaWNTdWJ0cmVlTm9kZUxpc3Q6Oml0ZW0odW5zaWduZWQg
b2Zmc2V0KSBjb25zdAogewogICAgIGludCByZW1haW5pbmdPZmZzZXQgPSBvZmZzZXQ7Ci0gICAg
Tm9kZSogc3RhcnQgPSBtX3Jvb3ROb2RlLT5maXJzdENoaWxkKCk7CisgICAgTm9kZSogc3RhcnQg
PSBub2RlKCktPmZpcnN0Q2hpbGQoKTsKICAgICBpZiAobV9jYWNoZXMtPmlzSXRlbUNhY2hlVmFs
aWQpIHsKICAgICAgICAgaWYgKG9mZnNldCA9PSBtX2NhY2hlcy0+bGFzdEl0ZW1PZmZzZXQpCiAg
ICAgICAgICAgICByZXR1cm4gbV9jYWNoZXMtPmxhc3RJdGVtOwpAQCAtMTIxLDE0ICsxMTIsMTAg
QEAgTm9kZSogRHluYW1pY05vZGVMaXN0OjppdGVtKHVuc2lnbmVkIG9mZgogCiBOb2RlKiBEeW5h
bWljTm9kZUxpc3Q6Oml0ZW1XaXRoTmFtZShjb25zdCBBdG9taWNTdHJpbmcmIGVsZW1lbnRJZCkg
Y29uc3QKIHsKLSAgICBpZiAobV9yb290Tm9kZS0+aXNEb2N1bWVudE5vZGUoKSB8fCBtX3Jvb3RO
b2RlLT5pbkRvY3VtZW50KCkpIHsKLSAgICAgICAgRWxlbWVudCogbm9kZSA9IG1fcm9vdE5vZGUt
PnRyZWVTY29wZSgpLT5nZXRFbGVtZW50QnlJZChlbGVtZW50SWQpOwotICAgICAgICBpZiAobm9k
ZSAmJiBub2RlTWF0Y2hlcyhub2RlKSkgewotICAgICAgICAgICAgZm9yIChDb250YWluZXJOb2Rl
KiBwID0gbm9kZS0+cGFyZW50Tm9kZSgpOyBwOyBwID0gcC0+cGFyZW50Tm9kZSgpKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKHAgPT0gbV9yb290Tm9kZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIG5vZGU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICBpZiAobm9kZSgpLT5pc0Rv
Y3VtZW50Tm9kZSgpIHx8IG5vZGUoKS0+aW5Eb2N1bWVudCgpKSB7CisgICAgICAgIEVsZW1lbnQq
IG5vZGUgPSB0aGlzLT5ub2RlKCktPnRyZWVTY29wZSgpLT5nZXRFbGVtZW50QnlJZChlbGVtZW50
SWQpOworICAgICAgICBpZiAobm9kZSAmJiBub2RlTWF0Y2hlcyhub2RlKSAmJiBub2RlLT5pc0Rl
c2NlbmRhbnRPZih0aGlzLT5ub2RlKCkpKQorICAgICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAg
ICAgIGlmICghbm9kZSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAvLyBJbiB0aGUg
Y2FzZSBvZiBtdWx0aXBsZSBub2RlcyB3aXRoIHRoZSBzYW1lIG5hbWUsIGp1c3QgZmFsbCB0aHJv
dWdoLgpAQCAtMTQ1LDMxICsxMzIsMjkgQEAgTm9kZSogRHluYW1pY05vZGVMaXN0OjppdGVtV2l0
aE5hbWUoY29ucwogICAgIHJldHVybiAwOwogfQogCi1ib29sIER5bmFtaWNOb2RlTGlzdDo6aXNE
eW5hbWljTm9kZUxpc3QoKSBjb25zdAorYm9vbCBEeW5hbWljU3VidHJlZU5vZGVMaXN0Ojppc0R5
bmFtaWNOb2RlTGlzdCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgRHlu
YW1pY05vZGVMaXN0OjppbnZhbGlkYXRlQ2FjaGUoKQordm9pZCBEeW5hbWljU3VidHJlZU5vZGVM
aXN0OjppbnZhbGlkYXRlQ2FjaGUoKQogewotICAgIC8vIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2Fs
bGVkIGZvciBub2RlIGxpc3RzIHRoYXQgb3duIHRoZWlyIG93biBjYWNoZXMuCi0gICAgQVNTRVJU
KG1fb3duc0NhY2hlcyk7CiAgICAgbV9jYWNoZXMtPnJlc2V0KCk7CiB9CiAKLUR5bmFtaWNOb2Rl
TGlzdDo6Q2FjaGVzOjpDYWNoZXMoKQorRHluYW1pY1N1YnRyZWVOb2RlTGlzdDo6Q2FjaGVzOjpD
YWNoZXMoKQogICAgIDogbGFzdEl0ZW0oMCkKICAgICAsIGlzTGVuZ3RoQ2FjaGVWYWxpZChmYWxz
ZSkKICAgICAsIGlzSXRlbUNhY2hlVmFsaWQoZmFsc2UpCiB7CiB9CiAKLVBhc3NSZWZQdHI8RHlu
YW1pY05vZGVMaXN0OjpDYWNoZXM+IER5bmFtaWNOb2RlTGlzdDo6Q2FjaGVzOjpjcmVhdGUoKQor
UGFzc1JlZlB0cjxEeW5hbWljU3VidHJlZU5vZGVMaXN0OjpDYWNoZXM+IER5bmFtaWNTdWJ0cmVl
Tm9kZUxpc3Q6OkNhY2hlczo6Y3JlYXRlKCkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENh
Y2hlcygpKTsKIH0KIAotdm9pZCBEeW5hbWljTm9kZUxpc3Q6OkNhY2hlczo6cmVzZXQoKQordm9p
ZCBEeW5hbWljU3VidHJlZU5vZGVMaXN0OjpDYWNoZXM6OnJlc2V0KCkKIHsKICAgICBsYXN0SXRl
bSA9IDA7CiAgICAgaXNMZW5ndGhDYWNoZVZhbGlkID0gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9kb20vRHluYW1pY05vZGVMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZG9tL0R5bmFtaWNOb2RlTGlzdC5oCShyZXZpc2lvbiAxMDI0NDQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9kb20vRHluYW1pY05vZGVMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDUyICszMSw1OCBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBFbGVtZW50OwotICAgIGNsYXNz
IE5vZGU7Ci0KLSAgICBjbGFzcyBEeW5hbWljTm9kZUxpc3QgOiBwdWJsaWMgTm9kZUxpc3Qgewot
ICAgIHB1YmxpYzoKLSAgICAgICAgc3RydWN0IENhY2hlcyA6IFJlZkNvdW50ZWQ8Q2FjaGVzPiB7
Ci0gICAgICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDYWNoZXM+IGNyZWF0ZSgpOwotICAgICAg
ICAgICAgdm9pZCByZXNldCgpOwotCi0gICAgICAgICAgICB1bnNpZ25lZCBjYWNoZWRMZW5ndGg7
Ci0gICAgICAgICAgICBOb2RlKiBsYXN0SXRlbTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGxhc3RJ
dGVtT2Zmc2V0OwotICAgICAgICAgICAgYm9vbCBpc0xlbmd0aENhY2hlVmFsaWQgOiAxOwotICAg
ICAgICAgICAgYm9vbCBpc0l0ZW1DYWNoZVZhbGlkIDogMTsKLSAgICAgICAgcHJvdGVjdGVkOgot
ICAgICAgICAgICAgQ2FjaGVzKCk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgdmlydHVhbCB+RHlu
YW1pY05vZGVMaXN0KCk7Ci0KLSAgICAgICAgYm9vbCBoYXNPd25DYWNoZXMoKSBjb25zdCB7IHJl
dHVybiBtX293bnNDYWNoZXM7IH0KLQotICAgICAgICAvLyBET00gbWV0aG9kcyAmIGF0dHJpYnV0
ZXMgZm9yIE5vZGVMaXN0Ci0gICAgICAgIHZpcnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7
Ci0gICAgICAgIHZpcnR1YWwgTm9kZSogaXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3Q7Ci0gICAg
ICAgIHZpcnR1YWwgTm9kZSogaXRlbVdpdGhOYW1lKGNvbnN0IEF0b21pY1N0cmluZyYpIGNvbnN0
OwotCi0gICAgICAgIC8vIE90aGVyIG1ldGhvZHMgKG5vdCBwYXJ0IG9mIERPTSkKLSAgICAgICAg
dm9pZCBpbnZhbGlkYXRlQ2FjaGUoKTsKLSAgICAgICAgTm9kZSogcm9vdE5vZGUoKSBjb25zdCB7
IHJldHVybiBtX3Jvb3ROb2RlLmdldCgpOyB9CitjbGFzcyBFbGVtZW50OworY2xhc3MgTm9kZTsK
IAorY2xhc3MgRHluYW1pY05vZGVMaXN0IDogcHVibGljIE5vZGVMaXN0IHsKK3B1YmxpYzoKKyAg
ICBzdHJ1Y3QgQ2FjaGVzIDogUmVmQ291bnRlZDxDYWNoZXM+IHsKKyAgICAgICAgc3RhdGljIFBh
c3NSZWZQdHI8Q2FjaGVzPiBjcmVhdGUoKTsKKyAgICAgICAgdm9pZCByZXNldCgpOworICAgICAg
ICAKKyAgICAgICAgdW5zaWduZWQgY2FjaGVkTGVuZ3RoOworICAgICAgICBOb2RlKiBsYXN0SXRl
bTsKKyAgICAgICAgdW5zaWduZWQgbGFzdEl0ZW1PZmZzZXQ7CisgICAgICAgIGJvb2wgaXNMZW5n
dGhDYWNoZVZhbGlkIDogMTsKKyAgICAgICAgYm9vbCBpc0l0ZW1DYWNoZVZhbGlkIDogMTsKICAg
ICBwcm90ZWN0ZWQ6Ci0gICAgICAgIER5bmFtaWNOb2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+IHJv
b3ROb2RlKTsKLSAgICAgICAgRHluYW1pY05vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5v
ZGUsIENhY2hlcyopOwotCi0gICAgICAgIHZpcnR1YWwgYm9vbCBub2RlTWF0Y2hlcyhFbGVtZW50
KikgY29uc3QgPSAwOwotCi0gICAgICAgIFJlZlB0cjxOb2RlPiBtX3Jvb3ROb2RlOwotICAgICAg
ICBtdXRhYmxlIFJlZlB0cjxDYWNoZXM+IG1fY2FjaGVzOwotICAgICAgICBib29sIG1fb3duc0Nh
Y2hlczsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBpc0R5bmFtaWNOb2Rl
TGlzdCgpIGNvbnN0OwotICAgICAgICBOb2RlKiBpdGVtRm9yd2FyZHNGcm9tQ3VycmVudChOb2Rl
KiBzdGFydCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgcmVtYWluaW5nT2Zmc2V0KSBjb25zdDsKLSAg
ICAgICAgTm9kZSogaXRlbUJhY2t3YXJkc0Zyb21DdXJyZW50KE5vZGUqIHN0YXJ0LCB1bnNpZ25l
ZCBvZmZzZXQsIGludCByZW1haW5pbmdPZmZzZXQpIGNvbnN0OworICAgICAgICBDYWNoZXMoKTsK
ICAgICB9OworICAgIER5bmFtaWNOb2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+IG5vZGUpCisgICAg
ICAgIDogbV9ub2RlKG5vZGUpCisgICAgeyB9CisgICAgdmlydHVhbCB+RHluYW1pY05vZGVMaXN0
KCkgeyB9CisKKyAgICAvLyBET00gbWV0aG9kcyAmIGF0dHJpYnV0ZXMgZm9yIE5vZGVMaXN0Cisg
ICAgdmlydHVhbCB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBOb2Rl
KiBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBOb2RlKiBpdGVt
V2l0aE5hbWUoY29uc3QgQXRvbWljU3RyaW5nJikgY29uc3Q7CisKKyAgICAvLyBPdGhlciBtZXRo
b2RzIChub3QgcGFydCBvZiBET00pCisgICAgTm9kZSogbm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bm9kZS5nZXQoKTsgfQorCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBib29sIG5vZGVNYXRjaGVz
KEVsZW1lbnQqKSBjb25zdCA9IDA7CisgICAgUmVmUHRyPE5vZGU+IG1fbm9kZTsKK307CisKK2Ns
YXNzIER5bmFtaWNTdWJ0cmVlTm9kZUxpc3QgOiBwdWJsaWMgRHluYW1pY05vZGVMaXN0IHsKK3B1
YmxpYzoKKyAgICB2aXJ0dWFsIH5EeW5hbWljU3VidHJlZU5vZGVMaXN0KCk7CisgICAgdmlydHVh
bCB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIE5vZGUqIGl0
ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0IE9WRVJSSURFOworICAgIHZvaWQgaW52YWxpZGF0ZUNh
Y2hlKCk7CisgICAgTm9kZSogcm9vdE5vZGUoKSBjb25zdCB7IHJldHVybiBub2RlKCk7IH0KKwor
cHJvdGVjdGVkOgorICAgIER5bmFtaWNTdWJ0cmVlTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiBy
b290Tm9kZSk7CisgICAgbXV0YWJsZSBSZWZQdHI8Q2FjaGVzPiBtX2NhY2hlczsKKworcHJpdmF0
ZToKKyAgICB2aXJ0dWFsIGJvb2wgaXNEeW5hbWljTm9kZUxpc3QoKSBjb25zdDsKKyAgICBOb2Rl
KiBpdGVtRm9yd2FyZHNGcm9tQ3VycmVudChOb2RlKiBzdGFydCwgdW5zaWduZWQgb2Zmc2V0LCBp
bnQgcmVtYWluaW5nT2Zmc2V0KSBjb25zdDsKKyAgICBOb2RlKiBpdGVtQmFja3dhcmRzRnJvbUN1
cnJlbnQoTm9kZSogc3RhcnQsIHVuc2lnbmVkIG9mZnNldCwgaW50IHJlbWFpbmluZ09mZnNldCkg
Y29uc3Q7Cit9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9OYW1lTm9kZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9OYW1lTm9kZUxpc3QuY3BwCShyZXZpc2lvbiAxMDI0NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9k
b20vTmFtZU5vZGVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTQgKzMyLDE0IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIE5hbWVOb2Rl
TGlzdDo6TmFtZU5vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIGNvbnN0IFN0cmlu
ZyYgbmFtZSkKLSAgICA6IER5bmFtaWNOb2RlTGlzdChyb290Tm9kZSkKKyAgICA6IER5bmFtaWNT
dWJ0cmVlTm9kZUxpc3Qocm9vdE5vZGUpCiAgICAgLCBtX25vZGVOYW1lKG5hbWUpCiB7CiB9CiAK
IE5hbWVOb2RlTGlzdDo6fk5hbWVOb2RlTGlzdCgpCiB7Ci0gICAgbV9yb290Tm9kZS0+cmVtb3Zl
Q2FjaGVkTmFtZU5vZGVMaXN0KHRoaXMsIG1fbm9kZU5hbWUpOworICAgIHJvb3ROb2RlKCktPnJl
bW92ZUNhY2hlZE5hbWVOb2RlTGlzdCh0aGlzLCBtX25vZGVOYW1lKTsKIH0gCiAKIGJvb2wgTmFt
ZU5vZGVMaXN0Ojpub2RlTWF0Y2hlcyhFbGVtZW50KiB0ZXN0Tm9kZSkgY29uc3QKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2RvbS9OYW1lTm9kZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vTmFtZU5vZGVMaXN0LmgJKHJldmlzaW9uIDEwMjQ0NCkKKysrIFNvdXJjZS9XZWJD
b3JlL2RvbS9OYW1lTm9kZUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgLy8gTm9kZUxpc3Qgd2hpY2ggbGlzdHMgYWxsIE5v
ZGVzIGluIGEgRWxlbWVudCB3aXRoIGEgZ2l2ZW4gIm5hbWUiIGF0dHJpYnV0ZQotICAgIGNsYXNz
IE5hbWVOb2RlTGlzdCA6IHB1YmxpYyBEeW5hbWljTm9kZUxpc3QgeworICAgIGNsYXNzIE5hbWVO
b2RlTGlzdCA6IHB1YmxpYyBEeW5hbWljU3VidHJlZU5vZGVMaXN0IHsKICAgICBwdWJsaWM6CiAg
ICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPE5hbWVOb2RlTGlzdD4gY3JlYXRlKFBhc3NSZWZQdHI8
Tm9kZT4gcm9vdE5vZGUsIGNvbnN0IFN0cmluZyYgbmFtZSkKICAgICAgICAgewpJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlLmNwcAkocmV2aXNpb24gMTAyNDQ0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MjMsMTAgKzYyMyw3IEBAIHZvaWQgTm9kZTo6c2V0Tm9k
ZVZhbHVlKGNvbnN0IFN0cmluZyYgLyoKIAogUGFzc1JlZlB0cjxOb2RlTGlzdD4gTm9kZTo6Y2hp
bGROb2RlcygpCiB7Ci0gICAgTm9kZUxpc3RzTm9kZURhdGEqIG5vZGVMaXN0cyA9IGVuc3VyZVJh
cmVEYXRhKCktPmVuc3VyZU5vZGVMaXN0cyh0aGlzKTsKLSAgICBpZiAoIW5vZGVMaXN0cy0+bV9j
aGlsZE5vZGVMaXN0Q2FjaGVzKQotICAgICAgICBub2RlTGlzdHMtPm1fY2hpbGROb2RlTGlzdENh
Y2hlcyA9IER5bmFtaWNOb2RlTGlzdDo6Q2FjaGVzOjpjcmVhdGUoKTsKLSAgICByZXR1cm4gQ2hp
bGROb2RlTGlzdDo6Y3JlYXRlKHRoaXMsIG5vZGVMaXN0cy0+bV9jaGlsZE5vZGVMaXN0Q2FjaGVz
LmdldCgpKTsKKyAgICByZXR1cm4gQ2hpbGROb2RlTGlzdDo6Y3JlYXRlKHRoaXMsIGVuc3VyZVJh
cmVEYXRhKCktPmVuc3VyZUNoaWxkTm9kZUxpc3RDYWNoZSgpKTsKIH0KIAogTm9kZSAqTm9kZTo6
bGFzdERlc2NlbmRhbnQoKSBjb25zdApAQCAtMTAwNCw0OSArMTAwMSw1NiBAQCBzdGF0aWMgdm9p
ZCByZW1vdmVOb2RlTGlzdENhY2hlSWZQb3NzaWJsCiAgICAgbm9kZS0+dHJlZVNjb3BlKCktPnJl
bW92ZU5vZGVMaXN0Q2FjaGUoKTsKIH0KIAotdm9pZCBOb2RlOjpyZWdpc3RlckR5bmFtaWNOb2Rl
TGlzdChEeW5hbWljTm9kZUxpc3QqIGxpc3QpCit2b2lkIE5vZGU6OnJlZ2lzdGVyRHluYW1pY1N1
YnRyZWVOb2RlTGlzdChEeW5hbWljU3VidHJlZU5vZGVMaXN0KiBsaXN0KQogewogICAgIE5vZGVS
YXJlRGF0YSogZGF0YSA9IGVuc3VyZVJhcmVEYXRhKCk7CiAgICAgLy8gV2UgaGF2ZW4ndCBiZWVu
IHJlY2VpdmluZyBub3RpZmljYXRpb25zIHdoaWxlIHRoZXJlIHdlcmUgbm8gcmVnaXN0ZXJlZCBs
aXN0cywgc28gdGhlIGNhY2hlIGlzIGludmFsaWQgbm93LgogICAgIGlmIChkYXRhLT5ub2RlTGlz
dHMoKSAmJiAoIXRyZWVTY29wZSgpIHx8ICF0cmVlU2NvcGUoKS0+aGFzTm9kZUxpc3RDYWNoZXMo
KSkpCiAgICAgICAgIGRhdGEtPm5vZGVMaXN0cygpLT5pbnZhbGlkYXRlQ2FjaGVzKCk7CiAKLSAg
ICBpZiAobGlzdC0+aGFzT3duQ2FjaGVzKCkpCi0gICAgICAgIGRhdGEtPmVuc3VyZU5vZGVMaXN0
cyh0aGlzKS0+bV9saXN0c1dpdGhDYWNoZXMuYWRkKGxpc3QpOworICAgIGRhdGEtPmVuc3VyZU5v
ZGVMaXN0cyh0aGlzKS0+bV9saXN0c1dpdGhDYWNoZXMuYWRkKGxpc3QpOwogfQogCi12b2lkIE5v
ZGU6OnVucmVnaXN0ZXJEeW5hbWljTm9kZUxpc3QoRHluYW1pY05vZGVMaXN0KiBsaXN0KQordm9p
ZCBOb2RlOjp1bnJlZ2lzdGVyRHluYW1pY1N1YnRyZWVOb2RlTGlzdChEeW5hbWljU3VidHJlZU5v
ZGVMaXN0KiBsaXN0KQogewotICAgIEFTU0VSVChyYXJlRGF0YSgpKTsKKyAgICBBU1NFUlQoaGFz
UmFyZURhdGEoKSk7CiAgICAgQVNTRVJUKHJhcmVEYXRhKCktPm5vZGVMaXN0cygpKTsKLSAgICBp
ZiAobGlzdC0+aGFzT3duQ2FjaGVzKCkpIHsKLSAgICAgICAgTm9kZVJhcmVEYXRhKiBkYXRhID0g
cmFyZURhdGEoKTsKLSAgICAgICAgZGF0YS0+bm9kZUxpc3RzKCktPm1fbGlzdHNXaXRoQ2FjaGVz
LnJlbW92ZShsaXN0KTsKLSAgICAgICAgcmVtb3ZlTm9kZUxpc3RDYWNoZUlmUG9zc2libGUodGhp
cywgZGF0YSk7Ci0gICAgfQorICAgIE5vZGVSYXJlRGF0YSogZGF0YSA9IHJhcmVEYXRhKCk7Cisg
ICAgZGF0YS0+bm9kZUxpc3RzKCktPm1fbGlzdHNXaXRoQ2FjaGVzLnJlbW92ZShsaXN0KTsKKyAg
ICByZW1vdmVOb2RlTGlzdENhY2hlSWZQb3NzaWJsZSh0aGlzLCBkYXRhKTsKIH0KIAogdm9pZCBO
b2RlOjppbnZhbGlkYXRlTm9kZUxpc3RzQ2FjaGVBZnRlckF0dHJpYnV0ZUNoYW5nZWQoKQogewor
ICAgIGlmIChoYXNSYXJlRGF0YSgpICYmIGlzQXR0cmlidXRlTm9kZSgpKSB7CisgICAgICAgIE5v
ZGVSYXJlRGF0YSogZGF0YSA9IHJhcmVEYXRhKCk7CisgICAgICAgIEFTU0VSVCghZGF0YS0+bm9k
ZUxpc3RzKCkpOworICAgICAgICBkYXRhLT5jbGVhckNoaWxkTm9kZUxpc3RDYWNoZSgpOworICAg
IH0KKworICAgIGlmICghdHJlZVNjb3BlKCktPmhhc05vZGVMaXN0Q2FjaGVzKCkpCisgICAgICAg
IHJldHVybjsKKwogICAgIGZvciAoTm9kZSogbm9kZSA9IHRoaXM7IG5vZGU7IG5vZGUgPSBub2Rl
LT5wYXJlbnROb2RlKCkpIHsKKyAgICAgICAgQVNTRVJUKHRoaXMgPT0gbm9kZSB8fCAhbm9kZS0+
aXNBdHRyaWJ1dGVOb2RlKCkpOwogICAgICAgICBpZiAoIW5vZGUtPmhhc1JhcmVEYXRhKCkpCiAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgTm9kZVJhcmVEYXRhKiBkYXRhID0gbm9kZS0+
cmFyZURhdGEoKTsKICAgICAgICAgaWYgKCFkYXRhLT5ub2RlTGlzdHMoKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogCi0gICAgICAgIC8vIEZvciBhdHRyaWJ1dGUgbm9kZXMsIHdlIG5lZWQgdG8g
aW52YWxpZGF0ZSBjaGlsZE5vZGVzIGFzIHdlbGwuCi0gICAgICAgIGlmIChub2RlLT5pc0F0dHJp
YnV0ZU5vZGUoKSkKLSAgICAgICAgICAgIGRhdGEtPm5vZGVMaXN0cygpLT5pbnZhbGlkYXRlQ2Fj
aGVzKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGRhdGEtPm5vZGVMaXN0cygpLT5pbnZh
bGlkYXRlQ2FjaGVzVGhhdERlcGVuZE9uQXR0cmlidXRlcygpOwotCisgICAgICAgIGRhdGEtPm5v
ZGVMaXN0cygpLT5pbnZhbGlkYXRlQ2FjaGVzVGhhdERlcGVuZE9uQXR0cmlidXRlcygpOwogICAg
ICAgICByZW1vdmVOb2RlTGlzdENhY2hlSWZQb3NzaWJsZShub2RlLCBkYXRhKTsKICAgICB9CiB9
CiAKIHZvaWQgTm9kZTo6aW52YWxpZGF0ZU5vZGVMaXN0c0NhY2hlQWZ0ZXJDaGlsZHJlbkNoYW5n
ZWQoKQogeworICAgIGlmIChoYXNSYXJlRGF0YSgpKQorICAgICAgICByYXJlRGF0YSgpLT5jbGVh
ckNoaWxkTm9kZUxpc3RDYWNoZSgpOworCisgICAgaWYgKCF0cmVlU2NvcGUoKS0+aGFzTm9kZUxp
c3RDYWNoZXMoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIGZvciAoTm9kZSogbm9kZSA9IHRoaXM7
IG5vZGU7IG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCkpIHsKICAgICAgICAgaWYgKCFub2RlLT5o
YXNSYXJlRGF0YSgpKQogICAgICAgICAgICAgY29udGludWU7CkBAIC0xMDgwLDcgKzEwODQsNiBA
QCB2b2lkIE5vZGU6OnJlbW92ZUNhY2hlZENsYXNzTm9kZUxpc3QoQ2xhCiB7CiAgICAgQVNTRVJU
KHJhcmVEYXRhKCkpOwogICAgIEFTU0VSVChyYXJlRGF0YSgpLT5ub2RlTGlzdHMoKSk7Ci0gICAg
QVNTRVJUX1VOVVNFRChsaXN0LCBsaXN0LT5oYXNPd25DYWNoZXMoKSk7CiAKICAgICBOb2RlTGlz
dHNOb2RlRGF0YSogZGF0YSA9IHJhcmVEYXRhKCktPm5vZGVMaXN0cygpOwogICAgIEFTU0VSVF9V
TlVTRUQobGlzdCwgbGlzdCA9PSBkYXRhLT5tX2NsYXNzTm9kZUxpc3RDYWNoZS5nZXQoY2xhc3NO
YW1lKSk7CkBAIC0xMDkxLDcgKzEwOTQsNiBAQCB2b2lkIE5vZGU6OnJlbW92ZUNhY2hlZE5hbWVO
b2RlTGlzdChOYW1lCiB7CiAgICAgQVNTRVJUKHJhcmVEYXRhKCkpOwogICAgIEFTU0VSVChyYXJl
RGF0YSgpLT5ub2RlTGlzdHMoKSk7Ci0gICAgQVNTRVJUX1VOVVNFRChsaXN0LCBsaXN0LT5oYXNP
d25DYWNoZXMoKSk7CiAKICAgICBOb2RlTGlzdHNOb2RlRGF0YSogZGF0YSA9IHJhcmVEYXRhKCkt
Pm5vZGVMaXN0cygpOwogICAgIEFTU0VSVF9VTlVTRUQobGlzdCwgbGlzdCA9PSBkYXRhLT5tX25h
bWVOb2RlTGlzdENhY2hlLmdldChub2RlTmFtZSkpOwpAQCAtMTEwMiw3ICsxMTA0LDYgQEAgdm9p
ZCBOb2RlOjpyZW1vdmVDYWNoZWRUYWdOb2RlTGlzdChUYWdObwogewogICAgIEFTU0VSVChyYXJl
RGF0YSgpKTsKICAgICBBU1NFUlQocmFyZURhdGEoKS0+bm9kZUxpc3RzKCkpOwotICAgIEFTU0VS
VF9VTlVTRUQobGlzdCwgbGlzdC0+aGFzT3duQ2FjaGVzKCkpOwogCiAgICAgTm9kZUxpc3RzTm9k
ZURhdGEqIGRhdGEgPSByYXJlRGF0YSgpLT5ub2RlTGlzdHMoKTsKICAgICBBU1NFUlRfVU5VU0VE
KGxpc3QsIGxpc3QgPT0gZGF0YS0+bV90YWdOb2RlTGlzdENhY2hlLmdldChuYW1lLmltcGwoKSkp
OwpAQCAtMTExMywyMCArMTExNCwxOSBAQCB2b2lkIE5vZGU6OnJlbW92ZUNhY2hlZFRhZ05vZGVM
aXN0KFRhZ05vCiB7CiAgICAgQVNTRVJUKHJhcmVEYXRhKCkpOwogICAgIEFTU0VSVChyYXJlRGF0
YSgpLT5ub2RlTGlzdHMoKSk7Ci0gICAgQVNTRVJUX1VOVVNFRChsaXN0LCBsaXN0LT5oYXNPd25D
YWNoZXMoKSk7CiAKICAgICBOb2RlTGlzdHNOb2RlRGF0YSogZGF0YSA9IHJhcmVEYXRhKCktPm5v
ZGVMaXN0cygpOwogICAgIEFTU0VSVF9VTlVTRUQobGlzdCwgbGlzdCA9PSBkYXRhLT5tX3RhZ05v
ZGVMaXN0Q2FjaGVOUy5nZXQobmFtZS5pbXBsKCkpKTsKICAgICBkYXRhLT5tX3RhZ05vZGVMaXN0
Q2FjaGVOUy5yZW1vdmUobmFtZS5pbXBsKCkpOwogfQogCi12b2lkIE5vZGU6OnJlbW92ZUNhY2hl
ZExhYmVsc05vZGVMaXN0KER5bmFtaWNOb2RlTGlzdCogbGlzdCkKK3ZvaWQgTm9kZTo6cmVtb3Zl
Q2FjaGVkTGFiZWxzTm9kZUxpc3QoRHluYW1pY1N1YnRyZWVOb2RlTGlzdCogbGlzdCkKIHsKICAg
ICBBU1NFUlQocmFyZURhdGEoKSk7CiAgICAgQVNTRVJUKHJhcmVEYXRhKCktPm5vZGVMaXN0cygp
KTsKLSAgICBBU1NFUlRfVU5VU0VEKGxpc3QsIGxpc3QtPmhhc093bkNhY2hlcygpKTsKLSAgICAK
KwogICAgIE5vZGVMaXN0c05vZGVEYXRhKiBkYXRhID0gcmFyZURhdGEoKS0+bm9kZUxpc3RzKCk7
CisgICAgQVNTRVJUX1VOVVNFRChsaXN0LCBsaXN0ID09IGRhdGEtPm1fbGFiZWxzTm9kZUxpc3RD
YWNoZSk7CiAgICAgZGF0YS0+bV9sYWJlbHNOb2RlTGlzdENhY2hlID0gMDsKIH0KIApAQCAtMjM4
OSwxMyArMjM4OSw2IEBAIHZvaWQgTm9kZTo6c2hvd1RyZWVGb3JUaGlzQWNyb3NzRnJhbWUoKSAK
IAogdm9pZCBOb2RlTGlzdHNOb2RlRGF0YTo6aW52YWxpZGF0ZUNhY2hlcygpCiB7Ci0gICAgaWYg
KG1fY2hpbGROb2RlTGlzdENhY2hlcykgewotICAgICAgICBpZiAobV9jaGlsZE5vZGVMaXN0Q2Fj
aGVzLT5oYXNPbmVSZWYoKSkKLSAgICAgICAgICAgIG1fY2hpbGROb2RlTGlzdENhY2hlcy5jbGVh
cigpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2NoaWxkTm9kZUxpc3RDYWNoZXMtPnJl
c2V0KCk7Ci0gICAgfQotCiAgICAgaWYgKG1fbGFiZWxzTm9kZUxpc3RDYWNoZSkKICAgICAgICAg
bV9sYWJlbHNOb2RlTGlzdENhY2hlLT5pbnZhbGlkYXRlQ2FjaGUoKTsKICAgICBUYWdOb2RlTGlz
dENhY2hlOjpjb25zdF9pdGVyYXRvciB0YWdDYWNoZUVuZCA9IG1fdGFnTm9kZUxpc3RDYWNoZS5l
bmQoKTsKQEAgLTI0MzgsOSArMjQzMSw2IEBAIGJvb2wgTm9kZUxpc3RzTm9kZURhdGE6OmlzRW1w
dHkoKSBjb25zdAogICAgIGlmICghbV9saXN0c1dpdGhDYWNoZXMuaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAobV9jaGlsZE5vZGVMaXN0Q2FjaGVzKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KICAgICBpZiAoIW1fdGFnTm9kZUxpc3RDYWNoZS5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIW1fdGFnTm9kZUxpc3RDYWNoZU5TLmlz
RW1wdHkoKSkKQEAgLTMwMDQsNiArMjk5NCwxNyBAQCB2b2lkIE5vZGVSYXJlRGF0YTo6Y3JlYXRl
Tm9kZUxpc3RzKE5vZGUqCiAgICAgICAgIHRyZWVTY29wZS0+YWRkTm9kZUxpc3RDYWNoZSgpOwog
fQogCit2b2lkIE5vZGVSYXJlRGF0YTo6Y2xlYXJDaGlsZE5vZGVMaXN0Q2FjaGUoKQoreworICAg
IGlmICghbV9jaGlsZE5vZGVMaXN0Q2FjaGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICht
X2NoaWxkTm9kZUxpc3RDYWNoZS0+aGFzT25lUmVmKCkpCisgICAgICAgIG1fY2hpbGROb2RlTGlz
dENhY2hlLmNsZWFyKCk7CisgICAgZWxzZQorICAgICAgICBtX2NoaWxkTm9kZUxpc3RDYWNoZS0+
cmVzZXQoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjaWZuZGVmIE5ERUJVRwpJ
bmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vTm9kZS5oCShyZXZpc2lvbiAxMDI0NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20v
Tm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIGNsYXNzIENsYXNzTm9kZUxp
c3Q7CiBjbGFzcyBDb250YWluZXJOb2RlOwogY2xhc3MgRE9NU2V0dGFibGVUb2tlbkxpc3Q7CiBj
bGFzcyBEb2N1bWVudDsKLWNsYXNzIER5bmFtaWNOb2RlTGlzdDsKK2NsYXNzIER5bmFtaWNTdWJ0
cmVlTm9kZUxpc3Q7CiBjbGFzcyBFbGVtZW50OwogY2xhc3MgRXZlbnQ7CiBjbGFzcyBFdmVudENv
bnRleHQ7CkBAIC01MTcsOCArNTE3LDggQEAgcHVibGljOgogICAgIHZvaWQgc2hvd1RyZWVGb3JU
aGlzQWNyb3NzRnJhbWUoKSBjb25zdDsKICNlbmRpZgogCi0gICAgdm9pZCByZWdpc3RlckR5bmFt
aWNOb2RlTGlzdChEeW5hbWljTm9kZUxpc3QqKTsKLSAgICB2b2lkIHVucmVnaXN0ZXJEeW5hbWlj
Tm9kZUxpc3QoRHluYW1pY05vZGVMaXN0Kik7CisgICAgdm9pZCByZWdpc3RlckR5bmFtaWNTdWJ0
cmVlTm9kZUxpc3QoRHluYW1pY1N1YnRyZWVOb2RlTGlzdCopOworICAgIHZvaWQgdW5yZWdpc3Rl
ckR5bmFtaWNTdWJ0cmVlTm9kZUxpc3QoRHluYW1pY1N1YnRyZWVOb2RlTGlzdCopOwogICAgIHZv
aWQgaW52YWxpZGF0ZU5vZGVMaXN0c0NhY2hlQWZ0ZXJBdHRyaWJ1dGVDaGFuZ2VkKCk7CiAgICAg
dm9pZCBpbnZhbGlkYXRlTm9kZUxpc3RzQ2FjaGVBZnRlckNoaWxkcmVuQ2hhbmdlZCgpOwogICAg
IHZvaWQgbm90aWZ5TG9jYWxOb2RlTGlzdHNMYWJlbENoYW5nZWQoKTsKQEAgLTUyNyw3ICs1Mjcs
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmVDYWNoZWROYW1lTm9kZUxpc3QoTmFtZU5vZGVM
aXN0KiwgY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCByZW1vdmVDYWNoZWRUYWdOb2RlTGlzdChU
YWdOb2RlTGlzdCosIGNvbnN0IEF0b21pY1N0cmluZyYpOwogICAgIHZvaWQgcmVtb3ZlQ2FjaGVk
VGFnTm9kZUxpc3QoVGFnTm9kZUxpc3QqLCBjb25zdCBRdWFsaWZpZWROYW1lJik7Ci0gICAgdm9p
ZCByZW1vdmVDYWNoZWRMYWJlbHNOb2RlTGlzdChEeW5hbWljTm9kZUxpc3QqKTsKKyAgICB2b2lk
IHJlbW92ZUNhY2hlZExhYmVsc05vZGVMaXN0KER5bmFtaWNTdWJ0cmVlTm9kZUxpc3QqKTsKIAog
ICAgIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IGdldEVsZW1lbnRzQnlUYWdOYW1lKGNvbnN0IEF0b21p
Y1N0cmluZyYpOwogICAgIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IGdldEVsZW1lbnRzQnlUYWdOYW1l
TlMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IEF0b21pY1N0cmluZyYg
bG9jYWxOYW1lKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRhLmgJKHJldmlzaW9uIDEw
MjQ0NCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaAkod29ya2luZyBjb3B5
KQpAQCAtMjIsNiArMjIsNyBAQAogI2lmbmRlZiBOb2RlUmFyZURhdGFfaAogI2RlZmluZSBOb2Rl
UmFyZURhdGFfaAogCisjaW5jbHVkZSAiQ2hpbGROb2RlTGlzdC5oIgogI2luY2x1ZGUgIkNsYXNz
Tm9kZUxpc3QuaCIKICNpbmNsdWRlICJET01TZXR0YWJsZVRva2VuTGlzdC5oIgogI2luY2x1ZGUg
IkR5bmFtaWNOb2RlTGlzdC5oIgpAQCAtNDksMTEgKzUwLDkgQEAgY2xhc3MgVHJlZVNjb3BlOwog
c3RydWN0IE5vZGVMaXN0c05vZGVEYXRhIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShOb2Rl
TGlzdHNOb2RlRGF0YSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIHR5
cGVkZWYgSGFzaFNldDxEeW5hbWljTm9kZUxpc3QqPiBOb2RlTGlzdFNldDsKKyAgICB0eXBlZGVm
IEhhc2hTZXQ8RHluYW1pY1N1YnRyZWVOb2RlTGlzdCo+IE5vZGVMaXN0U2V0OwogICAgIE5vZGVM
aXN0U2V0IG1fbGlzdHNXaXRoQ2FjaGVzOwotICAgIAotICAgIFJlZlB0cjxEeW5hbWljTm9kZUxp
c3Q6OkNhY2hlcz4gbV9jaGlsZE5vZGVMaXN0Q2FjaGVzOwotICAgIAorCiAgICAgdHlwZWRlZiBI
YXNoTWFwPFN0cmluZywgQ2xhc3NOb2RlTGlzdCo+IENsYXNzTm9kZUxpc3RDYWNoZTsKICAgICBD
bGFzc05vZGVMaXN0Q2FjaGUgbV9jbGFzc05vZGVMaXN0Q2FjaGU7CiAKQEAgLTEyNiwxMyArMTI1
LDE5IEBAIHB1YmxpYzogICAgCiAgICAgdm9pZCBjbGVhck5vZGVMaXN0cygpIHsgbV9ub2RlTGlz
dHMuY2xlYXIoKTsgfQogICAgIHZvaWQgc2V0Tm9kZUxpc3RzKFBhc3NPd25QdHI8Tm9kZUxpc3Rz
Tm9kZURhdGE+IGxpc3RzKSB7IG1fbm9kZUxpc3RzID0gbGlzdHM7IH0KICAgICBOb2RlTGlzdHNO
b2RlRGF0YSogbm9kZUxpc3RzKCkgY29uc3QgeyByZXR1cm4gbV9ub2RlTGlzdHMuZ2V0KCk7IH0K
LQogICAgIE5vZGVMaXN0c05vZGVEYXRhKiBlbnN1cmVOb2RlTGlzdHMoTm9kZSogbm9kZSkKICAg
ICB7CiAgICAgICAgIGlmICghbV9ub2RlTGlzdHMpCiAgICAgICAgICAgICBjcmVhdGVOb2RlTGlz
dHMobm9kZSk7CiAgICAgICAgIHJldHVybiBtX25vZGVMaXN0cy5nZXQoKTsKICAgICB9CisgICAg
dm9pZCBjbGVhckNoaWxkTm9kZUxpc3RDYWNoZSgpOworICAgIER5bmFtaWNOb2RlTGlzdDo6Q2Fj
aGVzKiBlbnN1cmVDaGlsZE5vZGVMaXN0Q2FjaGUoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2No
aWxkTm9kZUxpc3RDYWNoZSkKKyAgICAgICAgICAgIG1fY2hpbGROb2RlTGlzdENhY2hlID0gRHlu
YW1pY05vZGVMaXN0OjpDYWNoZXM6OmNyZWF0ZSgpOworICAgICAgICByZXR1cm4gbV9jaGlsZE5v
ZGVMaXN0Q2FjaGUuZ2V0KCk7CisgICAgfQogCiAgICAgc2hvcnQgdGFiSW5kZXgoKSBjb25zdCB7
IHJldHVybiBtX3RhYkluZGV4OyB9CiAgICAgdm9pZCBzZXRUYWJJbmRleEV4cGxpY2l0bHkoc2hv
cnQgaW5kZXgpIHsgbV90YWJJbmRleCA9IGluZGV4OyBtX3RhYkluZGV4V2FzU2V0RXhwbGljaXRs
eSA9IHRydWU7IH0KQEAgLTIzNiw2ICsyNDEsNyBAQCBwcml2YXRlOgogCiAgICAgVHJlZVNjb3Bl
KiBtX3RyZWVTY29wZTsKICAgICBPd25QdHI8Tm9kZUxpc3RzTm9kZURhdGE+IG1fbm9kZUxpc3Rz
OworICAgIFJlZlB0cjxEeW5hbWljTm9kZUxpc3Q6OkNhY2hlcz4gbV9jaGlsZE5vZGVMaXN0Q2Fj
aGU7CiAgICAgT3duUHRyPEV2ZW50VGFyZ2V0RGF0YT4gbV9ldmVudFRhcmdldERhdGE7CiAgICAg
c2hvcnQgbV90YWJJbmRleDsKICAgICBib29sIG1fdGFiSW5kZXhXYXNTZXRFeHBsaWNpdGx5IDog
MTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9UYWdOb2RlTGlzdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZG9tL1RhZ05vZGVMaXN0LmNwcAkocmV2aXNpb24gMTAyNDQ0KQor
KysgU291cmNlL1dlYkNvcmUvZG9tL1RhZ05vZGVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsNyArMzAsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBUYWdOb2RlTGlzdDo6VGFnTm9k
ZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1l
c3BhY2VVUkksIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lKQotICAgIDogRHluYW1pY05v
ZGVMaXN0KHJvb3ROb2RlKQorICAgIDogRHluYW1pY1N1YnRyZWVOb2RlTGlzdChyb290Tm9kZSkK
ICAgICAsIG1fbmFtZXNwYWNlVVJJKG5hbWVzcGFjZVVSSSkKICAgICAsIG1fbG9jYWxOYW1lKGxv
Y2FsTmFtZSkKIHsKQEAgLTQwLDkgKzQwLDkgQEAgVGFnTm9kZUxpc3Q6OlRhZ05vZGVMaXN0KFBh
c3NSZWZQdHI8Tm9kZQogVGFnTm9kZUxpc3Q6On5UYWdOb2RlTGlzdCgpCiB7CiAgICAgaWYgKG1f
bmFtZXNwYWNlVVJJID09IHN0YXJBdG9tKQotICAgICAgICBtX3Jvb3ROb2RlLT5yZW1vdmVDYWNo
ZWRUYWdOb2RlTGlzdCh0aGlzLCBtX2xvY2FsTmFtZSk7CisgICAgICAgIHJvb3ROb2RlKCktPnJl
bW92ZUNhY2hlZFRhZ05vZGVMaXN0KHRoaXMsIG1fbG9jYWxOYW1lKTsKICAgICBlbHNlCi0gICAg
ICAgIG1fcm9vdE5vZGUtPnJlbW92ZUNhY2hlZFRhZ05vZGVMaXN0KHRoaXMsIFF1YWxpZmllZE5h
bWUobnVsbEF0b20sIG1fbG9jYWxOYW1lLCBtX25hbWVzcGFjZVVSSSkpOworICAgICAgICByb290
Tm9kZSgpLT5yZW1vdmVDYWNoZWRUYWdOb2RlTGlzdCh0aGlzLCBRdWFsaWZpZWROYW1lKG51bGxB
dG9tLCBtX2xvY2FsTmFtZSwgbV9uYW1lc3BhY2VVUkkpKTsKIH0KIAogYm9vbCBUYWdOb2RlTGlz
dDo6bm9kZU1hdGNoZXMoRWxlbWVudCogdGVzdE5vZGUpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9kb20vVGFnTm9kZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20v
VGFnTm9kZUxpc3QuaAkocmV2aXNpb24gMTAyNDQ0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1Rh
Z05vZGVMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogICAgIC8vIE5vZGVMaXN0IHRoYXQgbGltaXRzIHRvIGEgcGFydGljdWxhciB0
YWcuCi0gICAgY2xhc3MgVGFnTm9kZUxpc3QgOiBwdWJsaWMgRHluYW1pY05vZGVMaXN0IHsKKyAg
ICBjbGFzcyBUYWdOb2RlTGlzdCA6IHB1YmxpYyBEeW5hbWljU3VidHJlZU5vZGVMaXN0IHsKICAg
ICBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRhZ05vZGVMaXN0PiBjcmVhdGUo
UGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VV
UkksIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lKQogICAgICAgICB7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0xhYmVsc05vZGVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL0xhYmVsc05vZGVMaXN0LmNwcAkocmV2aXNpb24gMTAyNDQ0KQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9MYWJlbHNOb2RlTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMz
LDcgKzMzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1l
czsKIAogTGFiZWxzTm9kZUxpc3Q6OkxhYmVsc05vZGVMaXN0KE5vZGUqIGZvck5vZGUgKQotICAg
IDogRHluYW1pY05vZGVMaXN0KGZvck5vZGUtPmRvY3VtZW50KCkpICwgbV9mb3JOb2RlKGZvck5v
ZGUpCisgICAgOiBEeW5hbWljU3VidHJlZU5vZGVMaXN0KGZvck5vZGUtPmRvY3VtZW50KCkpICwg
bV9mb3JOb2RlKGZvck5vZGUpCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvTGFi
ZWxzTm9kZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0xhYmVsc05v
ZGVMaXN0LmgJKHJldmlzaW9uIDEwMjQ0NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvTGFiZWxz
Tm9kZUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLWNsYXNzIExhYmVsc05vZGVMaXN0IDogcHVibGljIER5bmFtaWNOb2RlTGlz
dCB7CitjbGFzcyBMYWJlbHNOb2RlTGlzdCA6IHB1YmxpYyBEeW5hbWljU3VidHJlZU5vZGVMaXN0
IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxMYWJlbHNOb2RlTGlzdD4gY3JlYXRl
KE5vZGUqIGZvck5vZGUpCiAgICAgewpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTAyNDk2KQorKysgTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTEt
MTItMDkgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTm9kZUNo
aWxkTGlzdCBzaG91bGRuJ3QgYmUgaW4gTm9kZUxpc3ROb2RlRGF0YQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM5NjkKKworICAgICAgICBBZGRlZCBh
IHJlZ3Jlc3Npb24gdGVzdCBmb3IgQ2hpbGROb2RlTGlzdDsgaXQgY2F0Y2hlcyBhIGJ1ZyBjYXVn
aHQgaW4gdGhlIHJldmlldyBwcm9jZXNzLgorCisgICAgICAgICogZmFzdC9kb20vY2hpbGRub2Rl
LWl0ZW0tYWZ0ZXItaXRlbW5hbWUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0
L2RvbS9jaGlsZG5vZGUtaXRlbS1hZnRlci1pdGVtbmFtZS5odG1sOiBBZGRlZC4KKwogMjAxMS0x
Mi0wOSAgVG9ueSBDaGFuZyAgPHRvbnlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEZpeCB0ZXN0
IGV4cGVjdGF0aW9ucyBmcm9tIHIxMDI0ODY6IGZsZXgtZmxvdyByZXR1cm5zIGRpcmVjdGlvbiBh
bmQgd3JhcCBub3cuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9jaGlsZG5vZGUtaXRlbS1h
ZnRlci1pdGVtbmFtZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC9kb20vY2hpbGRub2RlLWl0ZW0tYWZ0ZXItaXRlbW5hbWUtZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vY2hpbGRub2RlLWl0ZW0tYWZ0ZXItaXRlbW5h
bWUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMgQEAKK1RoaXMgdGVzdHMg
YWNjZXNzaW5nIHRoZSBmaXJzdCBlbGVtZW50IGluIGNoaWxkTm9kZXMgYWZ0ZXIgYWNjZXNzaW5n
IHRoZSBzZWNvbmQgZWxlbWVudCBieSBpdHMgaWQuIFdlYktpdCBzaG91bGQgcmV0cmlldmUgZWFj
aCBlbGVtZW50IGNvcnJlY3RseSwgYW5kIHlvdSBzaG91bGQgc2VlIDIgMSBiZWxvdzoKKworMiAx
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9jaGlsZG5vZGUtaXRlbS1hZnRlci1pdGVtbmFt
ZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL2NoaWxkbm9kZS1pdGVt
LWFmdGVyLWl0ZW1uYW1lLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Rv
bS9jaGlsZG5vZGUtaXRlbS1hZnRlci1pdGVtbmFtZS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDE4IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGJvZHk+Cis8cD5UaGlzIHRlc3Rz
IGFjY2Vzc2luZyB0aGUgZmlyc3QgZWxlbWVudCBpbiBjaGlsZE5vZGVzIGFmdGVyIGFjY2Vzc2lu
ZyB0aGUgc2Vjb25kIGVsZW1lbnQgYnkgaXRzIGlkLgorV2ViS2l0IHNob3VsZCByZXRyaWV2ZSBl
YWNoIGVsZW1lbnQgY29ycmVjdGx5LCBhbmQgeW91IHNob3VsZCBzZWUgMiAxIGJlbG93OjwvcD4K
KzxzcGFuIGlkPSJpdGVtIj48L3NwYW4+PHNwYW4gaWQ9InRlc3RzIiBzdHlsZT0iZGlzcGxheTog
bm9uZTsiPjE8c3BhbiBpZD0iaXRlbSI+Mjwvc3Bhbj48L3NwYW4+Cis8c2NyaXB0PgorCitpZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1
bXBBc1RleHQoKTsKKwordmFyIHRlc3RzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3Rlc3Rz
Jyk7Citkb2N1bWVudC53cml0ZWxuKHRlc3RzLmNoaWxkTm9kZXNbJ2l0ZW0nXS50ZXh0Q29udGVu
dCk7Citkb2N1bWVudC53cml0ZWxuKHRlc3RzLmNoaWxkTm9kZXNbMF0udGV4dENvbnRlbnQpOwor
Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
      

    </bug>

</bugzilla>