<?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>104312</bug_id>
          
          <creation_ts>2012-12-06 16:21:09 -0800</creation_ts>
          <short_desc>Shrink the size of NodeRareData by moving pointers into separate objects</short_desc>
          <delta_ts>2012-12-08 02:45:31 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>abarth</cc>
    
    <cc>adamk</cc>
    
    <cc>darin</cc>
    
    <cc>esprehn</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>mjs</cc>
    
    <cc>morrita</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>785385</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-12-06 16:21:09 -0800</bug_when>
    <thetext>Implement what I suggested in https://bugs.webkit.org/show_bug.cgi?id=104202#c22:
1. Move ChildNodeList back into NodeListsNodeData
2. Move m_mutationObserverRegistry &amp; m_transientMutationObserverRegistry into a separate object owned by NodeRareData
3. Move m_itemProp, m_itemRef, m_itemType &amp; into a separate object owned by NodeRareData</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785458</commentid>
    <comment_count>1</comment_count>
      <attachid>178119</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-12-06 17:29:13 -0800</bug_when>
    <thetext>Created attachment 178119
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785466</commentid>
    <comment_count>2</comment_count>
      <attachid>178119</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-12-06 17:40:59 -0800</bug_when>
    <thetext>Comment on attachment 178119
Patch

Attachment 178119 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/15159916</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785470</commentid>
    <comment_count>3</comment_count>
      <attachid>178119</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-12-06 17:42:54 -0800</bug_when>
    <thetext>Comment on attachment 178119
Patch

Attachment 178119 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/15186162</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785476</commentid>
    <comment_count>4</comment_count>
      <attachid>178119</attachid>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-12-06 17:47:23 -0800</bug_when>
    <thetext>Comment on attachment 178119
Patch

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

&gt; Source/WebCore/ChangeLog:16
&gt; +        This patch also fixes Mac build when microdata is enabled.

Why?

&gt; Source/WebCore/ChangeLog:57
&gt; +        is different from that, Node, of LiveNodeList::namedItem. It was shadowing the function name instead of overriding.

This seems like it should be in a separate patch.

&gt; Source/WebCore/dom/NodeRareData.cpp:41
&gt; +struct SameSizeAsNodeRareData {

This is really the same size? What about the super class?

&gt; Source/WebCore/dom/NodeRareData.cpp:53
&gt; +COMPILE_ASSERT(sizeof(NodeRareData) == sizeof(SameSizeAsNodeRareData), NodeRareDataShouldStaySmall);

We usually (always?) use underscores for separating the assert name: NodeRareData_should_stay_small

&gt; Source/WebCore/html/HTMLPropertiesCollection.idl:41
&gt; +    [ImplementedAs=propertyNodeList] PropertyNodeList namedItem(in DOMString name);

Why is this change in here? It doesn&apos;t seem related.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785477</commentid>
    <comment_count>5</comment_count>
      <attachid>178124</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-12-06 17:47:43 -0800</bug_when>
    <thetext>Created attachment 178124
Fixed builds</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785483</commentid>
    <comment_count>6</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-12-06 17:52:08 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; &gt; Source/WebCore/dom/NodeRareData.cpp:53
&gt; &gt; +COMPILE_ASSERT(sizeof(NodeRareData) == sizeof(SameSizeAsNodeRareData), NodeRareDataShouldStaySmall);
&gt; 
&gt; We usually (always?) use underscores for separating the assert name: NodeRareData_should_stay_small

That clearly violates the WebKit style guide: http://www.webkit.org/coding/coding-style.html#names We need to fix existing ones.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785493</commentid>
    <comment_count>7</comment_count>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-12-06 17:57:24 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #4)
&gt; &gt; &gt; Source/WebCore/dom/NodeRareData.cpp:53
&gt; &gt; &gt; +COMPILE_ASSERT(sizeof(NodeRareData) == sizeof(SameSizeAsNodeRareData), NodeRareDataShouldStaySmall);
&gt; &gt; 
&gt; &gt; We usually (always?) use underscores for separating the assert name: NodeRareData_should_stay_small
&gt; 
&gt; That clearly violates the WebKit style guide: http://www.webkit.org/coding/coding-style.html#names We need to fix existing ones.

I&apos;m not sure that style thing really matches. This is what&apos;s output when the assertion fails.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785496</commentid>
    <comment_count>8</comment_count>
      <attachid>178124</attachid>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-12-06 18:00:03 -0800</bug_when>
    <thetext>Comment on attachment 178124
Fixed builds

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

&gt; Source/WebCore/dom/NodeRareData.cpp:43
&gt; +    unsigned indicesAndBitfields[2];

Naming doesn&apos;t match. m_indicesAndBitfields.

&gt; Source/WebCore/dom/NodeRareData.h:233
&gt; +struct NodeMicroDataTokenLists {

Can we place these structs inside the NodeRareData definition? No one should ever call ::create() on them outside of here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785537</commentid>
    <comment_count>9</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-12-06 18:57:08 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 178124 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=178124&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/dom/NodeRareData.cpp:43
&gt; &gt; +    unsigned indicesAndBitfields[2];
&gt; 
&gt; Naming doesn&apos;t match. m_indicesAndBitfields.

Oops, will fix.

&gt; &gt; Source/WebCore/dom/NodeRareData.h:233
&gt; &gt; +struct NodeMicroDataTokenLists {
&gt; 
&gt; Can we place these structs inside the NodeRareData definition? No one should ever call ::create() on them outside of here.

Good idea.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785560</commentid>
    <comment_count>10</comment_count>
      <attachid>178139</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-12-06 19:47:49 -0800</bug_when>
    <thetext>Created attachment 178139
Moved new classes into NodeRareData</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785703</commentid>
    <comment_count>11</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-12-07 00:37:06 -0800</bug_when>
    <thetext>Another idea is to let a set of sub-raredata polymorphic and store it to a list.
For non speed critical thing, it will work well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>786312</commentid>
    <comment_count>12</comment_count>
      <attachid>178139</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2012-12-07 16:57:58 -0800</bug_when>
    <thetext>Comment on attachment 178139
Moved new classes into NodeRareData

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

Great, r=me.

&gt; Source/WebCore/dom/NodeRareData.h:64
&gt; +        if (m_childNodeList)
&gt; +            return m_childNodeList;
&gt; +        RefPtr&lt;ChildNodeList&gt; list = ChildNodeList::create(node);
&gt; +        m_childNodeList = list.get();
&gt; +        return list.release();

Would read slightly nicer as:

if (!m_childNodeList)
    m_childNodeList = ChildNodeList::create(node);
return m_childNodeList;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>786314</commentid>
    <comment_count>13</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-12-07 17:00:12 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 178139 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=178139&amp;action=review
&gt; 
&gt; Great, r=me.
&gt; 
&gt; &gt; Source/WebCore/dom/NodeRareData.h:64
&gt; &gt; +        if (m_childNodeList)
&gt; &gt; +            return m_childNodeList;
&gt; &gt; +        RefPtr&lt;ChildNodeList&gt; list = ChildNodeList::create(node);
&gt; &gt; +        m_childNodeList = list.get();
&gt; &gt; +        return list.release();
&gt; 
&gt; Would read slightly nicer as:
&gt; 
&gt; if (!m_childNodeList)
&gt;     m_childNodeList = ChildNodeList::create(node);
&gt; return m_childNodeList;

We can’t do that because m_childNodeList is a raw pointer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>786320</commentid>
    <comment_count>14</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-12-07 17:18:24 -0800</bug_when>
    <thetext>Committed r137003: &lt;http://trac.webkit.org/changeset/137003&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>786468</commentid>
    <comment_count>15</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2012-12-08 02:30:51 -0800</bug_when>
    <thetext>This seems to be causing:

In file included from ../../Source/WebCore/dom/ChildNodeList.cpp:27:0:
../../Source/WebCore/dom/NodeRareData.h:230:23: error: ‘MutationObserverRegistration’ was not declared in this scope
../../Source/WebCore/dom/NodeRareData.h:230:51: error: template argument 1 is invalid
../../Source/WebCore/dom/NodeRareData.h:230:53: error: template argument 1 is invalid
../../Source/WebCore/dom/NodeRareData.h:231:17: error: ‘MutationObserverRegistration’ was not declared in this scope
../../Source/WebCore/dom/NodeRareData.h:231:46: error: template argument 1 is invalid
../../Source/WebCore/dom/NodeRareData.h:231:46: error: template argument 2 is invalid
../../Source/WebCore/dom/NodeRareData.h:231:46: error: template argument 3 is invalid
make[1]: *** [Source/WebCore/dom/libWebCore_la-ChildNodeList.lo] Error 1


in my laptop. The bots are fine, so perhaps this is GCC version dependent? (4.6.3 here)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>786469</commentid>
    <comment_count>16</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-12-08 02:36:53 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; This seems to be causing:
&gt; 
&gt; In file included from ../../Source/WebCore/dom/ChildNodeList.cpp:27:0:
&gt; ../../Source/WebCore/dom/NodeRareData.h:230:23: error: ‘MutationObserverRegistration’ was not declared in this scope
&gt; ../../Source/WebCore/dom/NodeRareData.h:230:51: error: template argument 1 is invalid
&gt; ../../Source/WebCore/dom/NodeRareData.h:230:53: error: template argument 1 is invalid
&gt; ../../Source/WebCore/dom/NodeRareData.h:231:17: error: ‘MutationObserverRegistration’ was not declared in this scope
&gt; ../../Source/WebCore/dom/NodeRareData.h:231:46: error: template argument 1 is invalid
&gt; ../../Source/WebCore/dom/NodeRareData.h:231:46: error: template argument 2 is invalid
&gt; ../../Source/WebCore/dom/NodeRareData.h:231:46: error: template argument 3 is invalid
&gt; make[1]: *** [Source/WebCore/dom/libWebCore_la-ChildNodeList.lo] Error 1
&gt; 
&gt; 
&gt; in my laptop. The bots are fine, so perhaps this is GCC version dependent? (4.6.3 here)

Oops, sorry, it’s missing if-def for ENABLE(MUTATION_OBSERVERS). Let me fix that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>786470</commentid>
    <comment_count>17</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-12-08 02:38:05 -0800</bug_when>
    <thetext>Fixed in http://trac.webkit.org/changeset/137024.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>786471</commentid>
    <comment_count>18</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2012-12-08 02:45:31 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; Oops, sorry, it’s missing if-def for ENABLE(MUTATION_OBSERVERS). Let me fix that.

Yeah, was about to commit that. There was a similar mistake for a Microdata-only section, so I just fixed that too.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>178119</attachid>
            <date>2012-12-06 17:29:13 -0800</date>
            <delta_ts>2012-12-06 17:47:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-104312-20121206172637.patch</filename>
            <type>text/plain</type>
            <size>18874</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNjkwOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY0IEBACisyMDEyLTEyLTA2ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFNocmluayB0aGUgc2l6ZSBvZiBO
b2RlUmFyZURhdGEgYnkgbW92aW5nIHBvaW50ZXJzIGludG8gc2VwYXJhdGUgb2JqZWN0cworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA0MzEyCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBk
b2VzIHRocmVlIHRoaW5nczoKKyAgICAgICAgMS4gTW92ZSBDaGlsZE5vZGVMaXN0IGJhY2sgaW50
byBOb2RlTGlzdHNOb2RlRGF0YS4KKyAgICAgICAgMi4gTW92ZSBtX211dGF0aW9uT2JzZXJ2ZXJS
ZWdpc3RyeSAmIG1fdHJhbnNpZW50TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5IGludG8gYSBzZXBh
cmF0ZSBvYmplY3Qgb3duZWQgYnkgTm9kZVJhcmVEYXRhLgorICAgICAgICAzLiBNb3ZlIG1faXRl
bVByb3AsIG1faXRlbVJlZiwgbV9pdGVtVHlwZSAmIGludG8gYSBzZXBhcmF0ZSBvYmplY3Qgb3du
ZWQgYnkgTm9kZVJhcmVEYXRhLgorCisgICAgICAgIE1vdmluZyBtX2NoaWxkTm9kZUxpc3QgZnJv
bSBOb2RlUmFyZURhdGEgdG8gTm9kZUxpc3RzTm9kZURhdGEgYWxzbyBoYXMgYSBuaWNlIHNpZGUt
ZWZmZWN0IG9mIG1ha2luZyBDaGlsZE5vZGVMaXN0CisgICAgICAgIGJlaGF2ZSBtb3JlIGxpa2Ug
b3RoZXIgTGl2ZU5vZGVMaXN0cy4KKworICAgICAgICBUaGlzIHBhdGNoIGFsc28gZml4ZXMgTWFj
IGJ1aWxkIHdoZW4gbWljcm9kYXRhIGlzIGVuYWJsZWQuCisKKyAgICAgICAgVGhlcmUgc2hvdWxk
IGJlIG5vIHVzZXItdmlzaWJsZSBiZWhhdmlvciBjaGFuZ2UuCisKKyAgICAgICAgKiBkb20vQ2hp
bGROb2RlTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZE5vZGVMaXN0Ojp+Q2hpbGRO
b2RlTGlzdCk6CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9k
ZTo6Y2hpbGROb2Rlcyk6IE1vdmVkIHRoZSBjb2RlIHRvIGNyZWF0ZSBDaGlsZE5vZGVMaXN0IGlu
dG8gTm9kZUxpc3RzTm9kZURhdGEgdG8gbWF0Y2ggb3RoZXIgbm9kZSBsaXN0cy4KKyAgICAgICAg
KFdlYkNvcmU6Ok5vZGU6OmludmFsaWRhdGVOb2RlTGlzdENhY2hlc0luQW5jZXN0b3JzKToKKyAg
ICAgICAgKFdlYkNvcmUpOiBSZW1vdmVkIHJlbW92ZUNhY2hlZENoaWxkTm9kZUxpc3QuCisgICAg
ICAgICogZG9tL05vZGUuaDoKKyAgICAgICAgKE5vZGUpOgorICAgICAgICAqIGRvbS9Ob2RlUmFy
ZURhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZSk6IEFzc2VydCB0aGUgc2l6ZSBvZiBOb2RlUmFy
ZURhdGEgYXQgY29tcGlsYXRpb24gdGltZS4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVMaXN0c05v
ZGVEYXRhOjpyZXBvcnRNZW1vcnlVc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlUmFyZURh
dGE6OnJlcG9ydE1lbW9yeVVzYWdlKToKKyAgICAgICAgKiBkb20vTm9kZVJhcmVEYXRhLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpOb2RlTGlzdHNOb2RlRGF0YTo6Y2xlYXJDaGlsZE5vZGVMaXN0Q2Fj
aGUpOiBNb3ZlZCBmcm9tIE5vZGVSYXJlRGF0YS4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVMaXN0
c05vZGVEYXRhOjplbnN1cmVDaGlsZE5vZGVMaXN0KTogRXh0cmFjdGVkIGZyb20gTm9kZTo6Y2hp
bGROb2Rlcy4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVMaXN0c05vZGVEYXRhOjpyZW1vdmVDaGls
ZE5vZGVMaXN0KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpOb2RlTGlzdHNOb2RlRGF0YTo6
Tm9kZUxpc3RzTm9kZURhdGEpOiBJbml0aWFsaXplIG1fY2hpbGROb2RlTGlzdC4KKyAgICAgICAg
KE5vZGVNdXRhdGlvbk9ic2VydmVyRGF0YSk6IEV4dHJhY3RlZCBmcm9tIE5vZGVSYXJlRGF0YS4K
KyAgICAgICAgKFdlYkNvcmU6Ok5vZGVNdXRhdGlvbk9ic2VydmVyRGF0YTo6Y3JlYXRlKToKKyAg
ICAgICAgKE5vZGVNaWNyb0RhdGFUb2tlbkxpc3RzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpOb2RlTWljcm9EYXRhVG9rZW5MaXN0czo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5v
ZGVSYXJlRGF0YTo6Tm9kZVJhcmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVSYXJlRGF0
YTo6ZW5zdXJlTm9kZUxpc3RzKTogTWVyZ2VkIHNldE5vZGVMaXN0cyBzaW5jZSBpdCdzIG5vdCBj
YWxsZWQgZWxzZXdoZXJlLgorICAgICAgICAoV2ViQ29yZTo6Tm9kZVJhcmVEYXRhOjptdXRhdGlv
bk9ic2VydmVyUmVnaXN0cnkpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZVJhcmVEYXRhOjplbnN1
cmVNdXRhdGlvbk9ic2VydmVyUmVnaXN0cnkpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok5v
ZGVSYXJlRGF0YTo6dHJhbnNpZW50TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5KToKKyAgICAgICAg
KFdlYkNvcmU6Ok5vZGVSYXJlRGF0YTo6ZW5zdXJlVHJhbnNpZW50TXV0YXRpb25PYnNlcnZlclJl
Z2lzdHJ5KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVSYXJlRGF0YTo6ZW5zdXJlTWljcm9EYXRh
VG9rZW5MaXN0cyk6CisgICAgICAgIChOb2RlUmFyZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
Tm9kZVJhcmVEYXRhOjppdGVtUHJvcCk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlUmFyZURhdGE6
OnNldEl0ZW1Qcm9wKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVSYXJlRGF0YTo6aXRlbVJlZik6
CisgICAgICAgIChXZWJDb3JlOjpOb2RlUmFyZURhdGE6OnNldEl0ZW1SZWYpOgorICAgICAgICAo
V2ViQ29yZTo6Tm9kZVJhcmVEYXRhOjppdGVtVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpOb2Rl
UmFyZURhdGE6OnNldEl0ZW1UeXBlKToKKyAgICAgICAgKiBodG1sL0hUTUxQcm9wZXJ0aWVzQ29s
bGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUHJvcGVydGllc0NvbGxlY3Rpb246
OnByb3BlcnR5Tm9kZUxpc3QpOiBSZW5hbWVkIGZyb20gbmFtZWRJdGVtIHNpbmNlIGl0cyByZXR1
cm4gdHlwZSwgUHJvcGVydHlOb2RlTGlzdCwKKyAgICAgICAgaXMgZGlmZmVyZW50IGZyb20gdGhh
dCwgTm9kZSwgb2YgTGl2ZU5vZGVMaXN0OjpuYW1lZEl0ZW0uIEl0IHdhcyBzaGFkb3dpbmcgdGhl
IGZ1bmN0aW9uIG5hbWUgaW5zdGVhZCBvZiBvdmVycmlkaW5nLgorICAgICAgICAqIGh0bWwvSFRN
TFByb3BlcnRpZXNDb2xsZWN0aW9uLmg6CisgICAgICAgIChIVE1MUHJvcGVydGllc0NvbGxlY3Rp
b24pOgorICAgICAgICAqIGh0bWwvSFRNTFByb3BlcnRpZXNDb2xsZWN0aW9uLmlkbDoKKwogMjAx
Mi0xMi0wNiAgQW5kcmVpIEJ1Y3VyICA8YWJ1Y3VyQGFkb2JlLmNvbT4KIAogICAgICAgICBbQ1NT
IFJlZ2lvbnNdIFJlbW92ZSB0aGUgc2FuaXRpemUgbWVjaGFuaXNtIGZyb20gTGluZUZyYWdtZW50
YXRpb25EYXRhCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGROb2RlTGlzdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0NoaWxkTm9kZUxpc3QuY3BwCShyZXZpc2lv
biAxMzY5MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGROb2RlTGlzdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlICJDaGlsZE5vZGVMaXN0LmgiCiAK
ICNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiTm9kZVJhcmVEYXRhLmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIApAQCAtMzQsNyArMzUsNyBAQCBDaGlsZE5vZGVMaXN0OjpDaGlsZE5v
ZGVMaXN0KFBhc3NSZWZQdHI8CiAKIENoaWxkTm9kZUxpc3Q6On5DaGlsZE5vZGVMaXN0KCkKIHsK
LSAgICBvd25lck5vZGUoKS0+cmVtb3ZlQ2FjaGVkQ2hpbGROb2RlTGlzdCgpOworICAgIG93bmVy
Tm9kZSgpLT5ub2RlTGlzdHMoKS0+cmVtb3ZlQ2hpbGROb2RlTGlzdCh0aGlzKTsKIH0KIAogYm9v
bCBDaGlsZE5vZGVMaXN0Ojpub2RlTWF0Y2hlcyhFbGVtZW50KiB0ZXN0Tm9kZSkgY29uc3QKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vTm9kZS5jcHAJKHJldmlzaW9uIDEzNjkwMykKKysrIFNvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYwLDEzICs1NjAsNyBAQCB2b2lkIE5vZGU6
OnNldE5vZGVWYWx1ZShjb25zdCBTdHJpbmcmIC8qCiAKIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IE5v
ZGU6OmNoaWxkTm9kZXMoKQogewotICAgIE5vZGVSYXJlRGF0YSogZGF0YSA9IGVuc3VyZVJhcmVE
YXRhKCk7Ci0gICAgaWYgKGRhdGEtPmNoaWxkTm9kZUxpc3QoKSkKLSAgICAgICAgcmV0dXJuIFBh
c3NSZWZQdHI8Tm9kZUxpc3Q+KGRhdGEtPmNoaWxkTm9kZUxpc3QoKSk7Ci0KLSAgICBSZWZQdHI8
Q2hpbGROb2RlTGlzdD4gbGlzdCA9IENoaWxkTm9kZUxpc3Q6OmNyZWF0ZSh0aGlzKTsKLSAgICBk
YXRhLT5zZXRDaGlsZE5vZGVMaXN0KGxpc3QuZ2V0KCkpOwotICAgIHJldHVybiBsaXN0LnJlbGVh
c2UoKTsKKyAgICByZXR1cm4gZW5zdXJlUmFyZURhdGEoKS0+ZW5zdXJlTm9kZUxpc3RzKCktPmVu
c3VyZUNoaWxkTm9kZUxpc3QodGhpcyk7CiB9CiAKIE5vZGUgKk5vZGU6Omxhc3REZXNjZW5kYW50
KCkgY29uc3QKQEAgLTEwMTcsOCArMTAxMSwxMCBAQCB2b2lkIERvY3VtZW50OjppbnZhbGlkYXRl
Tm9kZUxpc3RDYWNoZXMoCiAKIHZvaWQgTm9kZTo6aW52YWxpZGF0ZU5vZGVMaXN0Q2FjaGVzSW5B
bmNlc3RvcnMoY29uc3QgUXVhbGlmaWVkTmFtZSogYXR0ck5hbWUsIEVsZW1lbnQqIGF0dHJpYnV0
ZU93bmVyRWxlbWVudCkKIHsKLSAgICBpZiAoaGFzUmFyZURhdGEoKSAmJiAoIWF0dHJOYW1lIHx8
IGlzQXR0cmlidXRlTm9kZSgpKSkKLSAgICAgICAgcmFyZURhdGEoKS0+Y2xlYXJDaGlsZE5vZGVM
aXN0Q2FjaGUoKTsKKyAgICBpZiAoaGFzUmFyZURhdGEoKSAmJiAoIWF0dHJOYW1lIHx8IGlzQXR0
cmlidXRlTm9kZSgpKSkgeworICAgICAgICBpZiAoTm9kZUxpc3RzTm9kZURhdGEqIGxpc3RzID0g
cmFyZURhdGEoKS0+bm9kZUxpc3RzKCkpCisgICAgICAgICAgICBsaXN0cy0+Y2xlYXJDaGlsZE5v
ZGVMaXN0Q2FjaGUoKTsKKyAgICB9CiAKICAgICAvLyBNb2RpZmljYXRpb25zIHRvIGF0dHJpYnV0
ZXMgdGhhdCBhcmUgbm90IGFzc29jaWF0ZWQgd2l0aCBhbiBFbGVtZW50IGNhbid0IGludmFsaWRh
dGUgTm9kZUxpc3QgY2FjaGVzLgogICAgIGlmIChhdHRyTmFtZSAmJiAhYXR0cmlidXRlT3duZXJF
bGVtZW50KQpAQCAtMTA0MywxMiArMTAzOSw2IEBAIE5vZGVMaXN0c05vZGVEYXRhKiBOb2RlOjpu
b2RlTGlzdHMoKQogICAgIHJldHVybiBoYXNSYXJlRGF0YSgpID8gcmFyZURhdGEoKS0+bm9kZUxp
c3RzKCkgOiAwOwogfQogCi12b2lkIE5vZGU6OnJlbW92ZUNhY2hlZENoaWxkTm9kZUxpc3QoKQot
ewotICAgIEFTU0VSVChyYXJlRGF0YSgpKTsKLSAgICByYXJlRGF0YSgpLT5zZXRDaGlsZE5vZGVM
aXN0KDApOwotfQotCiBOb2RlKiBOb2RlOjp0cmF2ZXJzZU5leHRBbmNlc3RvclNpYmxpbmcoKSBj
b25zdAogewogICAgIEFTU0VSVCghbmV4dFNpYmxpbmcoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9kb20vTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgJKHJl
dmlzaW9uIDEzNjkwMykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTYwMSw3ICs2MDEsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGludmFsaWRhdGVOb2Rl
TGlzdENhY2hlc0luQW5jZXN0b3JzKGNvbnN0IFF1YWxpZmllZE5hbWUqIGF0dHJOYW1lID0gMCwg
RWxlbWVudCogYXR0cmlidXRlT3duZXJFbGVtZW50ID0gMCk7CiAgICAgTm9kZUxpc3RzTm9kZURh
dGEqIG5vZGVMaXN0cygpOwotICAgIHZvaWQgcmVtb3ZlQ2FjaGVkQ2hpbGROb2RlTGlzdCgpOwog
CiAgICAgUGFzc1JlZlB0cjxOb2RlTGlzdD4gZ2V0RWxlbWVudHNCeVRhZ05hbWUoY29uc3QgQXRv
bWljU3RyaW5nJik7CiAgICAgUGFzc1JlZlB0cjxOb2RlTGlzdD4gZ2V0RWxlbWVudHNCeVRhZ05h
bWVOUyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgQXRvbWljU3RyaW5n
JiBsb2NhbE5hbWUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGVSYXJlRGF0YS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGVSYXJlRGF0YS5jcHAJKHJldmlz
aW9uIDEzNjkwMykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOCw5ICszOCwyNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0
cnVjdCBTYW1lU2l6ZUFzTm9kZVJhcmVEYXRhIHsKKyAgICB2b2lkKiBtX3BvaW50ZXI7CisgICAg
dW5zaWduZWQgaW5kaWNlc0FuZEJpdGZpZWxkc1syXTsKKworI2lmIEVOQUJMRShNVVRBVElPTl9P
QlNFUlZFUlMpCisgICAgdm9pZCogbV9tdXRhdGlvbk9ic2VydmVyOworI2VuZGlmCisKKyNpZiBF
TkFCTEUoTUlDUk9EQVRBKQorICAgIHZvaWQqIG1fbWljcm9EYXRhOworI2VuZGlmCit9OworQ09N
UElMRV9BU1NFUlQoc2l6ZW9mKE5vZGVSYXJlRGF0YSkgPT0gc2l6ZW9mKFNhbWVTaXplQXNOb2Rl
UmFyZURhdGEpLCBOb2RlUmFyZURhdGFTaG91bGRTdGF5U21hbGwpOworCiB2b2lkIE5vZGVMaXN0
c05vZGVEYXRhOjpyZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmpl
Y3RJbmZvKSBjb25zdAogewogICAgIE1lbW9yeUNsYXNzSW5mbyBpbmZvKG1lbW9yeU9iamVjdElu
Zm8sIHRoaXMsIFdlYkNvcmVNZW1vcnlUeXBlczo6RE9NKTsKKyAgICBpbmZvLmFkZE1lbWJlciht
X2NoaWxkTm9kZUxpc3QpOwogICAgIGluZm8uYWRkTWVtYmVyKG1fYXRvbWljTmFtZUNhY2hlcyk7
CiAgICAgaW5mby5hZGRNZW1iZXIobV9uYW1lQ2FjaGVzKTsKICAgICBpbmZvLmFkZE1lbWJlciht
X3RhZ05vZGVMaXN0Q2FjaGVOUyk7CkBAIC01MSwxNyArNjYsMTMgQEAgdm9pZCBOb2RlUmFyZURh
dGE6OnJlcG9ydE1lbW9yeVVzYWdlKE1lbQogICAgIE1lbW9yeUNsYXNzSW5mbyBpbmZvKG1lbW9y
eU9iamVjdEluZm8sIHRoaXMsIFdlYkNvcmVNZW1vcnlUeXBlczo6RE9NKTsKICAgICBpbmZvLmFk
ZE1lbWJlcih0cmVlU2NvcGUoKSk7CiAgICAgaW5mby5hZGRNZW1iZXIobV9ub2RlTGlzdHMpOwot
ICAgIGluZm8uYWRkTWVtYmVyKG1fY2hpbGROb2RlTGlzdCk7CiAKICNpZiBFTkFCTEUoTVVUQVRJ
T05fT0JTRVJWRVJTKQotICAgIGluZm8uYWRkTWVtYmVyKG1fbXV0YXRpb25PYnNlcnZlclJlZ2lz
dHJ5KTsKLSAgICBpbmZvLmFkZE1lbWJlcihtX3RyYW5zaWVudE11dGF0aW9uT2JzZXJ2ZXJSZWdp
c3RyeSk7CisgICAgaW5mby5hZGRNZW1iZXIobV9tdXRhdGlvbk9ic2VydmVyRGF0YSk7CiAjZW5k
aWYKIAogI2lmIEVOQUJMRShNSUNST0RBVEEpCi0gICAgaW5mby5hZGRNZW1iZXIobV9pdGVtUHJv
cCk7Ci0gICAgaW5mby5hZGRNZW1iZXIobV9pdGVtUmVmKTsKLSAgICBpbmZvLmFkZE1lbWJlciht
X2l0ZW1UeXBlKTsKKyAgICBpbmZvLmFkZE1lbWJlcihtX21pY3JvRGF0YVRva2VuTGlzdHMpOwog
I2VuZGlmCiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRhLmgJKHJldmlzaW9uIDEz
NjkwMykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaAkod29ya2luZyBjb3B5
KQpAQCAtNDksNiArNDksMjcgQEAgY2xhc3MgVHJlZVNjb3BlOwogY2xhc3MgTm9kZUxpc3RzTm9k
ZURhdGEgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE5vZGVMaXN0c05vZGVEYXRhKTsgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CisgICAgdm9pZCBjbGVhckNoaWxkTm9kZUxp
c3RDYWNoZSgpCisgICAgeworICAgICAgICBpZiAobV9jaGlsZE5vZGVMaXN0KQorICAgICAgICAg
ICAgbV9jaGlsZE5vZGVMaXN0LT5pbnZhbGlkYXRlQ2FjaGUoKTsKKyAgICB9CisKKyAgICBQYXNz
UmVmUHRyPENoaWxkTm9kZUxpc3Q+IGVuc3VyZUNoaWxkTm9kZUxpc3QoTm9kZSogbm9kZSkKKyAg
ICB7CisgICAgICAgIGlmIChtX2NoaWxkTm9kZUxpc3QpCisgICAgICAgICAgICByZXR1cm4gbV9j
aGlsZE5vZGVMaXN0OworICAgICAgICBSZWZQdHI8Q2hpbGROb2RlTGlzdD4gbGlzdCA9IENoaWxk
Tm9kZUxpc3Q6OmNyZWF0ZShub2RlKTsKKyAgICAgICAgbV9jaGlsZE5vZGVMaXN0ID0gbGlzdC5n
ZXQoKTsKKyAgICAgICAgcmV0dXJuIGxpc3QucmVsZWFzZSgpOworICAgIH0KKworICAgIHZvaWQg
cmVtb3ZlQ2hpbGROb2RlTGlzdChDaGlsZE5vZGVMaXN0KiBsaXN0KQorICAgIHsKKyAgICAgICAg
QVNTRVJUX1VOVVNFRChsaXN0LCBtX2NoaWxkTm9kZUxpc3QgPSBsaXN0KTsKKyAgICAgICAgbV9j
aGlsZE5vZGVMaXN0ID0gMDsKKyAgICB9CisKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgU3RyaW5n
VHlwZT4KICAgICBzdHJ1Y3QgTm9kZUxpc3RDYWNoZU1hcEVudHJ5SGFzaCB7CiAgICAgICAgIHN0
YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IHN0ZDo6cGFpcjx1bnNpZ25lZCBjaGFyLCBTdHJpbmdU
eXBlPiYgZW50cnkpCkBAIC03NSw2ICs5Niw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGxp
c3QucmVsZWFzZSgpOwogICAgIH0KIAorICAgIC8vIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIHNob3Vs
ZCBiZSByZW5hbWVkIHNpbmNlIGl0IGRvZXNuJ3QgaGF2ZSBhbiBhdG9taWMgbmFtZS4KICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAgIFBhc3NSZWZQdHI8VD4gYWRkQ2FjaGVXaXRoQXRvbWlj
TmFtZShOb2RlKiBub2RlLCBDb2xsZWN0aW9uVHlwZSBjb2xsZWN0aW9uVHlwZSkKICAgICB7CkBA
IC0xNzksNyArMjAxLDkgQEAgcHVibGljOgogICAgIHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2UoTWVt
b3J5T2JqZWN0SW5mbyopIGNvbnN0OwogCiBwcml2YXRlOgotICAgIE5vZGVMaXN0c05vZGVEYXRh
KCkgeyB9CisgICAgTm9kZUxpc3RzTm9kZURhdGEoKQorICAgICAgICA6IG1fY2hpbGROb2RlTGlz
dCgwKQorICAgIHsgfQogCiAgICAgc3RkOjpwYWlyPHVuc2lnbmVkIGNoYXIsIEF0b21pY1N0cmlu
Zz4gbmFtZWROb2RlTGlzdEtleShDb2xsZWN0aW9uVHlwZSB0eXBlLCBjb25zdCBBdG9taWNTdHJp
bmcmIG5hbWUpCiAgICAgewpAQCAtMTkxLDE3ICsyMTUsMzQgQEAgcHJpdmF0ZToKICAgICAgICAg
cmV0dXJuIHN0ZDo6cGFpcjx1bnNpZ25lZCBjaGFyLCBTdHJpbmc+KHR5cGUsIG5hbWUpOwogICAg
IH0KIAorICAgIC8vIEZJWE1FOiBtX2NoaWxkTm9kZUxpc3Qgc2hvdWxkIGJlIG1lcmdlZCBpbnRv
IG1fYXRvbWljTmFtZUNhY2hlcyBvciBhdCBsZWFzdCBiZSBzaGFyZWQgd2l0aCBIVE1MQ29sbGVj
dGlvbiByZXR1cm5lZCBieSBFbGVtZW50OjpjaGlsZHJlbgorICAgIC8vIGJ1dCBpdCdzIHRyaWNr
eSBiZWNhdXNlIGludmFsaWRhdGVDYWNoZXMgc2hvdWxkbid0IGludmFsaWRhdGUgdGhpcyBjYWNo
ZSBhbmQgYWRvcHRUcmVlU2NvcGUgc2hvdWxkbid0IGNhbGwgcmVnaXN0ZXJOb2RlTGlzdCBvciB1
bnJlZ2lzdGVyTm9kZUxpc3QuCisgICAgQ2hpbGROb2RlTGlzdCogbV9jaGlsZE5vZGVMaXN0Owog
ICAgIE5vZGVMaXN0QXRvbWljTmFtZUNhY2hlTWFwIG1fYXRvbWljTmFtZUNhY2hlczsKICAgICBO
b2RlTGlzdE5hbWVDYWNoZU1hcCBtX25hbWVDYWNoZXM7CiAgICAgVGFnTm9kZUxpc3RDYWNoZU5T
IG1fdGFnTm9kZUxpc3RDYWNoZU5TOwogfTsKIAorc3RydWN0IE5vZGVNdXRhdGlvbk9ic2VydmVy
RGF0YSB7CisgICAgVmVjdG9yPE93blB0cjxNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uPiA+
IG1fcmVnaXN0cnk7CisgICAgSGFzaFNldDxNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uKj4g
bV90cmFuc2llbnRSZWdpc3RyeTsKKworICAgIHN0YXRpYyBQYXNzT3duUHRyPE5vZGVNdXRhdGlv
bk9ic2VydmVyRGF0YT4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IE5vZGVNdXRhdGlv
bk9ic2VydmVyRGF0YSk7IH0KK307CisKK3N0cnVjdCBOb2RlTWljcm9EYXRhVG9rZW5MaXN0cyB7
CisgICAgUmVmUHRyPERPTVNldHRhYmxlVG9rZW5MaXN0PiBtX2l0ZW1Qcm9wOworICAgIFJlZlB0
cjxET01TZXR0YWJsZVRva2VuTGlzdD4gbV9pdGVtUmVmOworICAgIFJlZlB0cjxET01TZXR0YWJs
ZVRva2VuTGlzdD4gbV9pdGVtVHlwZTsKKworICAgIHN0YXRpYyBQYXNzT3duUHRyPE5vZGVNaWNy
b0RhdGFUb2tlbkxpc3RzPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFB0cihuZXcgTm9kZU1pY3Jv
RGF0YVRva2VuTGlzdHMpOyB9Cit9OworCiBjbGFzcyBOb2RlUmFyZURhdGEgOiBwdWJsaWMgTm9k
ZVJhcmVEYXRhQmFzZSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTm9kZVJhcmVEYXRhKTsg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6ICAgIAogICAgIE5vZGVSYXJlRGF0YShE
b2N1bWVudCogZG9jdW1lbnQpCiAgICAgICAgIDogTm9kZVJhcmVEYXRhQmFzZShkb2N1bWVudCkK
LSAgICAgICAgLCBtX2NoaWxkTm9kZUxpc3QoMCkKICAgICAgICAgLCBtX3RhYkluZGV4KDApCiAg
ICAgICAgICwgbV9jaGlsZEluZGV4KDApCiAgICAgICAgICwgbV90YWJJbmRleFdhc1NldEV4cGxp
Y2l0bHkoZmFsc2UpCkBAIC0yMzEsMjIgKzI3MiwxMyBAQCBwdWJsaWM6ICAgIAogICAgIH0KIAog
ICAgIHZvaWQgY2xlYXJOb2RlTGlzdHMoKSB7IG1fbm9kZUxpc3RzLmNsZWFyKCk7IH0KLSAgICB2
b2lkIHNldE5vZGVMaXN0cyhQYXNzT3duUHRyPE5vZGVMaXN0c05vZGVEYXRhPiBsaXN0cykgeyBt
X25vZGVMaXN0cyA9IGxpc3RzOyB9CiAgICAgTm9kZUxpc3RzTm9kZURhdGEqIG5vZGVMaXN0cygp
IGNvbnN0IHsgcmV0dXJuIG1fbm9kZUxpc3RzLmdldCgpOyB9CiAgICAgTm9kZUxpc3RzTm9kZURh
dGEqIGVuc3VyZU5vZGVMaXN0cygpCiAgICAgewogICAgICAgICBpZiAoIW1fbm9kZUxpc3RzKQot
ICAgICAgICAgICAgc2V0Tm9kZUxpc3RzKE5vZGVMaXN0c05vZGVEYXRhOjpjcmVhdGUoKSk7Cisg
ICAgICAgICAgICBtX25vZGVMaXN0cyA9IE5vZGVMaXN0c05vZGVEYXRhOjpjcmVhdGUoKTsKICAg
ICAgICAgcmV0dXJuIG1fbm9kZUxpc3RzLmdldCgpOwogICAgIH0KLSAgICB2b2lkIGNsZWFyQ2hp
bGROb2RlTGlzdENhY2hlKCkKLSAgICB7Ci0gICAgICAgIGlmIChtX2NoaWxkTm9kZUxpc3QpCi0g
ICAgICAgICAgICBtX2NoaWxkTm9kZUxpc3QtPmludmFsaWRhdGVDYWNoZSgpOwotICAgIH0KLQot
ICAgIENoaWxkTm9kZUxpc3QqIGNoaWxkTm9kZUxpc3QoKSBjb25zdCB7IHJldHVybiBtX2NoaWxk
Tm9kZUxpc3Q7IH0KLSAgICB2b2lkIHNldENoaWxkTm9kZUxpc3QoQ2hpbGROb2RlTGlzdCogbGlz
dCkgeyBtX2NoaWxkTm9kZUxpc3QgPSBsaXN0OyB9CiAKICAgICBzaG9ydCB0YWJJbmRleCgpIGNv
bnN0IHsgcmV0dXJuIG1fdGFiSW5kZXg7IH0KICAgICB2b2lkIHNldFRhYkluZGV4RXhwbGljaXRs
eShzaG9ydCBpbmRleCkgeyBtX3RhYkluZGV4ID0gaW5kZXg7IG1fdGFiSW5kZXhXYXNTZXRFeHBs
aWNpdGx5ID0gdHJ1ZTsgfQpAQCAtMjU0LDcwICsyODYsNzcgQEAgcHVibGljOiAgICAKICAgICB2
b2lkIGNsZWFyVGFiSW5kZXhFeHBsaWNpdGx5KCkgeyBtX3RhYkluZGV4ID0gMDsgbV90YWJJbmRl
eFdhc1NldEV4cGxpY2l0bHkgPSBmYWxzZTsgfQogCiAjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VS
VkVSUykKLSAgICBWZWN0b3I8T3duUHRyPE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24+ID4q
IG11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSgpIHsgcmV0dXJuIG1fbXV0YXRpb25PYnNlcnZlclJl
Z2lzdHJ5LmdldCgpOyB9CisgICAgVmVjdG9yPE93blB0cjxNdXRhdGlvbk9ic2VydmVyUmVnaXN0
cmF0aW9uPiA+KiBtdXRhdGlvbk9ic2VydmVyUmVnaXN0cnkoKSB7IHJldHVybiBtX211dGF0aW9u
T2JzZXJ2ZXJEYXRhID8gJm1fbXV0YXRpb25PYnNlcnZlckRhdGEtPm1fcmVnaXN0cnkgOiAwOyB9
CiAgICAgVmVjdG9yPE93blB0cjxNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uPiA+KiBlbnN1
cmVNdXRhdGlvbk9ic2VydmVyUmVnaXN0cnkoKQogICAgIHsKLSAgICAgICAgaWYgKCFtX211dGF0
aW9uT2JzZXJ2ZXJSZWdpc3RyeSkKLSAgICAgICAgICAgIG1fbXV0YXRpb25PYnNlcnZlclJlZ2lz
dHJ5ID0gYWRvcHRQdHIobmV3IFZlY3RvcjxPd25QdHI8TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJh
dGlvbj4gPik7Ci0gICAgICAgIHJldHVybiBtX211dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeS5nZXQo
KTsKKyAgICAgICAgaWYgKCFtX211dGF0aW9uT2JzZXJ2ZXJEYXRhKQorICAgICAgICAgICAgbV9t
dXRhdGlvbk9ic2VydmVyRGF0YSA9IE5vZGVNdXRhdGlvbk9ic2VydmVyRGF0YTo6Y3JlYXRlKCk7
CisgICAgICAgIHJldHVybiAmbV9tdXRhdGlvbk9ic2VydmVyRGF0YS0+bV9yZWdpc3RyeTsKICAg
ICB9CiAKLSAgICBIYXNoU2V0PE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24qPiogdHJhbnNp
ZW50TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5KCkgeyByZXR1cm4gbV90cmFuc2llbnRNdXRhdGlv
bk9ic2VydmVyUmVnaXN0cnkuZ2V0KCk7IH0KKyAgICBIYXNoU2V0PE11dGF0aW9uT2JzZXJ2ZXJS
ZWdpc3RyYXRpb24qPiogdHJhbnNpZW50TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5KCkgeyByZXR1
cm4gbV9tdXRhdGlvbk9ic2VydmVyRGF0YSA/ICZtX211dGF0aW9uT2JzZXJ2ZXJEYXRhLT5tX3Ry
YW5zaWVudFJlZ2lzdHJ5IDogMDsgfQogICAgIEhhc2hTZXQ8TXV0YXRpb25PYnNlcnZlclJlZ2lz
dHJhdGlvbio+KiBlbnN1cmVUcmFuc2llbnRNdXRhdGlvbk9ic2VydmVyUmVnaXN0cnkoKQogICAg
IHsKLSAgICAgICAgaWYgKCFtX3RyYW5zaWVudE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSkKLSAg
ICAgICAgICAgIG1fdHJhbnNpZW50TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5ID0gYWRvcHRQdHIo
bmV3IEhhc2hTZXQ8TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbio+KTsKLSAgICAgICAgcmV0
dXJuIG1fdHJhbnNpZW50TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5LmdldCgpOworICAgICAgICBp
ZiAoIW1fbXV0YXRpb25PYnNlcnZlckRhdGEpCisgICAgICAgICAgICBtX211dGF0aW9uT2JzZXJ2
ZXJEYXRhID0gTm9kZU11dGF0aW9uT2JzZXJ2ZXJEYXRhOjpjcmVhdGUoKTsKKyAgICAgICAgcmV0
dXJuICZtX211dGF0aW9uT2JzZXJ2ZXJEYXRhLT5tX3RyYW5zaWVudFJlZ2lzdHJ5OwogICAgIH0K
ICNlbmRpZgogCiAjaWYgRU5BQkxFKE1JQ1JPREFUQSkKKyAgICBOb2RlTWljcm9EYXRhVG9rZW5M
aXN0cyogZW5zdXJlTWljcm9EYXRhVG9rZW5MaXN0cygpIGNvbnN0CisgICAgeworICAgICAgICBp
ZiAoIW1fbWljcm9EYXRhVG9rZW5MaXN0cykKKyAgICAgICAgICAgIG1fbWljcm9EYXRhVG9rZW5M
aXN0cyA9IE5vZGVNaWNyb0RhdGFUb2tlbkxpc3RzOjpjcmVhdGUoKTsKKyAgICAgICAgcmV0dXJu
IG1fbWljcm9EYXRhVG9rZW5MaXN0cy5nZXQoKTsKKyAgICB9CisKICAgICBET01TZXR0YWJsZVRv
a2VuTGlzdCogaXRlbVByb3AoKSBjb25zdAogICAgIHsKLSAgICAgICAgaWYgKCFtX2l0ZW1Qcm9w
KQotICAgICAgICAgICAgbV9pdGVtUHJvcCA9IERPTVNldHRhYmxlVG9rZW5MaXN0OjpjcmVhdGUo
KTsKKyAgICAgICAgaWYgKCFlbnN1cmVNaWNyb0RhdGFUb2tlbkxpc3RzKCktPm1faXRlbVByb3Ap
CisgICAgICAgICAgICBtX21pY3JvRGF0YVRva2VuTGlzdHMtPm1faXRlbVByb3AgPSBET01TZXR0
YWJsZVRva2VuTGlzdDo6Y3JlYXRlKCk7CiAKLSAgICAgICAgcmV0dXJuIG1faXRlbVByb3AuZ2V0
KCk7CisgICAgICAgIHJldHVybiBtX21pY3JvRGF0YVRva2VuTGlzdHMtPm1faXRlbVByb3AuZ2V0
KCk7CiAgICAgfQogCiAgICAgdm9pZCBzZXRJdGVtUHJvcChjb25zdCBTdHJpbmcmIHZhbHVlKQog
ICAgIHsKLSAgICAgICAgaWYgKCFtX2l0ZW1Qcm9wKQotICAgICAgICAgICAgbV9pdGVtUHJvcCA9
IERPTVNldHRhYmxlVG9rZW5MaXN0OjpjcmVhdGUoKTsKKyAgICAgICAgaWYgKCFlbnN1cmVNaWNy
b0RhdGFUb2tlbkxpc3RzKCktPm1faXRlbVByb3ApCisgICAgICAgICAgICBtX21pY3JvRGF0YVRv
a2VuTGlzdHMtPm1faXRlbVByb3AgPSBET01TZXR0YWJsZVRva2VuTGlzdDo6Y3JlYXRlKCk7CiAK
LSAgICAgICAgbV9pdGVtUHJvcC0+c2V0VmFsdWUodmFsdWUpOworICAgICAgICBtX21pY3JvRGF0
YVRva2VuTGlzdHMtPm1faXRlbVByb3AtPnNldFZhbHVlKHZhbHVlKTsKICAgICB9CiAKICAgICBE
T01TZXR0YWJsZVRva2VuTGlzdCogaXRlbVJlZigpIGNvbnN0CiAgICAgewotICAgICAgICBpZiAo
IW1faXRlbVJlZikKLSAgICAgICAgICAgIG1faXRlbVJlZiA9IERPTVNldHRhYmxlVG9rZW5MaXN0
OjpjcmVhdGUoKTsKKyAgICAgICAgaWYgKCFlbnN1cmVNaWNyb0RhdGFUb2tlbkxpc3RzKCktPm1f
aXRlbVJlZikKKyAgICAgICAgICAgIG1fbWljcm9EYXRhVG9rZW5MaXN0cy0+bV9pdGVtUmVmID0g
RE9NU2V0dGFibGVUb2tlbkxpc3Q6OmNyZWF0ZSgpOwogCi0gICAgICAgIHJldHVybiBtX2l0ZW1S
ZWYuZ2V0KCk7CisgICAgICAgIHJldHVybiBtX21pY3JvRGF0YVRva2VuTGlzdHMtPm1faXRlbVJl
Zi5nZXQoKTsKICAgICB9CiAKICAgICB2b2lkIHNldEl0ZW1SZWYoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKICAgICB7Ci0gICAgICAgIGlmICghbV9pdGVtUmVmKQotICAgICAgICAgICAgbV9pdGVtUmVm
ID0gRE9NU2V0dGFibGVUb2tlbkxpc3Q6OmNyZWF0ZSgpOworICAgICAgICBpZiAoIWVuc3VyZU1p
Y3JvRGF0YVRva2VuTGlzdHMoKS0+bV9pdGVtUmVmKQorICAgICAgICAgICAgbV9taWNyb0RhdGFU
b2tlbkxpc3RzLT5tX2l0ZW1SZWYgPSBET01TZXR0YWJsZVRva2VuTGlzdDo6Y3JlYXRlKCk7CiAK
LSAgICAgICAgbV9pdGVtUmVmLT5zZXRWYWx1ZSh2YWx1ZSk7CisgICAgICAgIG1fbWljcm9EYXRh
VG9rZW5MaXN0cy0+bV9pdGVtUmVmLT5zZXRWYWx1ZSh2YWx1ZSk7CiAgICAgfQogCiAgICAgRE9N
U2V0dGFibGVUb2tlbkxpc3QqIGl0ZW1UeXBlKCkgY29uc3QKICAgICB7Ci0gICAgICAgIGlmICgh
bV9pdGVtVHlwZSkKLSAgICAgICAgICAgIG1faXRlbVR5cGUgPSBET01TZXR0YWJsZVRva2VuTGlz
dDo6Y3JlYXRlKCk7CisgICAgICAgIGlmICghZW5zdXJlTWljcm9EYXRhVG9rZW5MaXN0cygpLT5t
X2l0ZW1UeXBlKQorICAgICAgICAgICAgbV9taWNyb0RhdGFUb2tlbkxpc3RzLT5tX2l0ZW1UeXBl
ID0gRE9NU2V0dGFibGVUb2tlbkxpc3Q6OmNyZWF0ZSgpOwogCi0gICAgICAgIHJldHVybiBtX2l0
ZW1UeXBlLmdldCgpOworICAgICAgICByZXR1cm4gbV9taWNyb0RhdGFUb2tlbkxpc3RzLT5tX2l0
ZW1UeXBlLmdldCgpOwogICAgIH0KIAogICAgIHZvaWQgc2V0SXRlbVR5cGUoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGlmICghbV9pdGVtVHlwZSkKLSAgICAgICAgICAgIG1f
aXRlbVR5cGUgPSBET01TZXR0YWJsZVRva2VuTGlzdDo6Y3JlYXRlKCk7CisgICAgICAgIGlmICgh
ZW5zdXJlTWljcm9EYXRhVG9rZW5MaXN0cygpLT5tX2l0ZW1UeXBlKQorICAgICAgICAgICAgbV9t
aWNyb0RhdGFUb2tlbkxpc3RzLT5tX2l0ZW1UeXBlID0gRE9NU2V0dGFibGVUb2tlbkxpc3Q6OmNy
ZWF0ZSgpOwogCi0gICAgICAgIG1faXRlbVR5cGUtPnNldFZhbHVlKHZhbHVlKTsKKyAgICAgICAg
bV9taWNyb0RhdGFUb2tlbkxpc3RzLT5tX2l0ZW1UeXBlLT5zZXRWYWx1ZSh2YWx1ZSk7CiAgICAg
fQogI2VuZGlmCiAKQEAgLTMyOCw3ICszNjcsNiBAQCBwdWJsaWM6ICAgIAogCiBwcm90ZWN0ZWQ6
CiAgICAgT3duUHRyPE5vZGVMaXN0c05vZGVEYXRhPiBtX25vZGVMaXN0czsKLSAgICBDaGlsZE5v
ZGVMaXN0KiBtX2NoaWxkTm9kZUxpc3Q7CiAgICAgc2hvcnQgbV90YWJJbmRleDsKICAgICB1bnNp
Z25lZCBzaG9ydCBtX2NoaWxkSW5kZXg7CiAgICAgYm9vbCBtX3RhYkluZGV4V2FzU2V0RXhwbGlj
aXRseSA6IDE7CkBAIC0zNTUsMTQgKzM5MywxMSBAQCBwcm90ZWN0ZWQ6CiAgICAgYm9vbCBtX2No
aWxkcmVuQWZmZWN0ZWRCeUJhY2t3YXJkUG9zaXRpb25hbFJ1bGVzIDogMTsKIAogI2lmIEVOQUJM
RShNVVRBVElPTl9PQlNFUlZFUlMpCi0gICAgT3duUHRyPFZlY3RvcjxPd25QdHI8TXV0YXRpb25P
YnNlcnZlclJlZ2lzdHJhdGlvbj4gPiA+IG1fbXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5OwotICAg
IE93blB0cjxIYXNoU2V0PE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24qPiA+IG1fdHJhbnNp
ZW50TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5OworICAgIE93blB0cjxOb2RlTXV0YXRpb25PYnNl
cnZlckRhdGE+IG1fbXV0YXRpb25PYnNlcnZlckRhdGE7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShN
SUNST0RBVEEpCi0gICAgbXV0YWJsZSBSZWZQdHI8RE9NU2V0dGFibGVUb2tlbkxpc3Q+IG1faXRl
bVByb3A7Ci0gICAgbXV0YWJsZSBSZWZQdHI8RE9NU2V0dGFibGVUb2tlbkxpc3Q+IG1faXRlbVJl
ZjsKLSAgICBtdXRhYmxlIFJlZlB0cjxET01TZXR0YWJsZVRva2VuTGlzdD4gbV9pdGVtVHlwZTsK
KyAgICBtdXRhYmxlIE93blB0cjxOb2RlTWljcm9EYXRhVG9rZW5MaXN0cz4gbV9taWNyb0RhdGFU
b2tlbkxpc3RzOwogI2VuZGlmCiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQ
cm9wZXJ0aWVzQ29sbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MUHJvcGVydGllc0NvbGxlY3Rpb24uY3BwCShyZXZpc2lvbiAxMzY5MDMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxQcm9wZXJ0aWVzQ29sbGVjdGlvbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEzNSw3ICsxMzUsNyBAQCBQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IEhUTUxQcm9w
ZXJ0aWVzCiAgICAgcmV0dXJuIG1fcHJvcGVydHlOYW1lczsKIH0KIAotUGFzc1JlZlB0cjxQcm9w
ZXJ0eU5vZGVMaXN0PiBIVE1MUHJvcGVydGllc0NvbGxlY3Rpb246Om5hbWVkSXRlbShjb25zdCBT
dHJpbmcmIG5hbWUpIGNvbnN0CitQYXNzUmVmUHRyPFByb3BlcnR5Tm9kZUxpc3Q+IEhUTUxQcm9w
ZXJ0aWVzQ29sbGVjdGlvbjo6cHJvcGVydHlOb2RlTGlzdChjb25zdCBTdHJpbmcmIG5hbWUpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIG93bmVyTm9kZSgpLT5wcm9wZXJ0eU5vZGVMaXN0KG5hbWUpOwog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUHJvcGVydGllc0NvbGxlY3Rpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQcm9wZXJ0aWVzQ29sbGVjdGlv
bi5oCShyZXZpc2lvbiAxMzY5MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQcm9wZXJ0
aWVzQ29sbGVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHVwZGF0ZVJlZkVsZW1lbnRzKCkgY29uc3Q7CiAKICAgICBQYXNzUmVmUHRyPERP
TVN0cmluZ0xpc3Q+IG5hbWVzKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFByb3Bl
cnR5Tm9kZUxpc3Q+IG5hbWVkSXRlbShjb25zdCBTdHJpbmcmKSBjb25zdCBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8UHJvcGVydHlOb2RlTGlzdD4gcHJvcGVydHlOb2RlTGlzdChj
b25zdCBTdHJpbmcmKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaGFzTmFtZWRJdGVtKGNvbnN0
IEF0b21pY1N0cmluZyYpIGNvbnN0IE9WRVJSSURFOwogCiAgICAgdm9pZCBpbnZhbGlkYXRlQ2Fj
aGUoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUHJvcGVydGllc0NvbGxl
Y3Rpb24uaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFByb3BlcnRp
ZXNDb2xsZWN0aW9uLmlkbAkocmV2aXNpb24gMTM2OTAzKQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MUHJvcGVydGllc0NvbGxlY3Rpb24uaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw1ICsz
OCw1IEBACiAgICAgTm9kZSBpdGVtKGluIHVuc2lnbmVkIGxvbmcgaW5kZXgpOwogCiAgICAgcmVh
ZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZ0xpc3QgbmFtZXM7Ci0gICAgUHJvcGVydHlOb2RlTGlz
dCBuYW1lZEl0ZW0oaW4gRE9NU3RyaW5nIG5hbWUpOworICAgIFtJbXBsZW1lbnRlZEFzPXByb3Bl
cnR5Tm9kZUxpc3RdIFByb3BlcnR5Tm9kZUxpc3QgbmFtZWRJdGVtKGluIERPTVN0cmluZyBuYW1l
KTsKIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>178124</attachid>
            <date>2012-12-06 17:47:43 -0800</date>
            <delta_ts>2012-12-06 19:47:46 -0800</delta_ts>
            <desc>Fixed builds</desc>
            <filename>bug-104312-20121206174508.patch</filename>
            <type>text/plain</type>
            <size>18877</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNjkwOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY0IEBACisyMDEyLTEyLTA2ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFNocmluayB0aGUgc2l6ZSBvZiBO
b2RlUmFyZURhdGEgYnkgbW92aW5nIHBvaW50ZXJzIGludG8gc2VwYXJhdGUgb2JqZWN0cworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA0MzEyCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBk
b2VzIHRocmVlIHRoaW5nczoKKyAgICAgICAgMS4gTW92ZSBDaGlsZE5vZGVMaXN0IGJhY2sgaW50
byBOb2RlTGlzdHNOb2RlRGF0YS4KKyAgICAgICAgMi4gTW92ZSBtX211dGF0aW9uT2JzZXJ2ZXJS
ZWdpc3RyeSAmIG1fdHJhbnNpZW50TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5IGludG8gYSBzZXBh
cmF0ZSBvYmplY3Qgb3duZWQgYnkgTm9kZVJhcmVEYXRhLgorICAgICAgICAzLiBNb3ZlIG1faXRl
bVByb3AsIG1faXRlbVJlZiwgbV9pdGVtVHlwZSAmIGludG8gYSBzZXBhcmF0ZSBvYmplY3Qgb3du
ZWQgYnkgTm9kZVJhcmVEYXRhLgorCisgICAgICAgIE1vdmluZyBtX2NoaWxkTm9kZUxpc3QgZnJv
bSBOb2RlUmFyZURhdGEgdG8gTm9kZUxpc3RzTm9kZURhdGEgYWxzbyBoYXMgYSBuaWNlIHNpZGUt
ZWZmZWN0IG9mIG1ha2luZyBDaGlsZE5vZGVMaXN0CisgICAgICAgIGJlaGF2ZSBtb3JlIGxpa2Ug
b3RoZXIgTGl2ZU5vZGVMaXN0cy4KKworICAgICAgICBUaGlzIHBhdGNoIGFsc28gZml4ZXMgTWFj
IGJ1aWxkIHdoZW4gbWljcm9kYXRhIGlzIGVuYWJsZWQuCisKKyAgICAgICAgVGhlcmUgc2hvdWxk
IGJlIG5vIHVzZXItdmlzaWJsZSBiZWhhdmlvciBjaGFuZ2UuCisKKyAgICAgICAgKiBkb20vQ2hp
bGROb2RlTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZE5vZGVMaXN0Ojp+Q2hpbGRO
b2RlTGlzdCk6CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9k
ZTo6Y2hpbGROb2Rlcyk6IE1vdmVkIHRoZSBjb2RlIHRvIGNyZWF0ZSBDaGlsZE5vZGVMaXN0IGlu
dG8gTm9kZUxpc3RzTm9kZURhdGEgdG8gbWF0Y2ggb3RoZXIgbm9kZSBsaXN0cy4KKyAgICAgICAg
KFdlYkNvcmU6Ok5vZGU6OmludmFsaWRhdGVOb2RlTGlzdENhY2hlc0luQW5jZXN0b3JzKToKKyAg
ICAgICAgKFdlYkNvcmUpOiBSZW1vdmVkIHJlbW92ZUNhY2hlZENoaWxkTm9kZUxpc3QuCisgICAg
ICAgICogZG9tL05vZGUuaDoKKyAgICAgICAgKE5vZGUpOgorICAgICAgICAqIGRvbS9Ob2RlUmFy
ZURhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZSk6IEFzc2VydCB0aGUgc2l6ZSBvZiBOb2RlUmFy
ZURhdGEgYXQgY29tcGlsYXRpb24gdGltZS4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVMaXN0c05v
ZGVEYXRhOjpyZXBvcnRNZW1vcnlVc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlUmFyZURh
dGE6OnJlcG9ydE1lbW9yeVVzYWdlKToKKyAgICAgICAgKiBkb20vTm9kZVJhcmVEYXRhLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpOb2RlTGlzdHNOb2RlRGF0YTo6Y2xlYXJDaGlsZE5vZGVMaXN0Q2Fj
aGUpOiBNb3ZlZCBmcm9tIE5vZGVSYXJlRGF0YS4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVMaXN0
c05vZGVEYXRhOjplbnN1cmVDaGlsZE5vZGVMaXN0KTogRXh0cmFjdGVkIGZyb20gTm9kZTo6Y2hp
bGROb2Rlcy4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVMaXN0c05vZGVEYXRhOjpyZW1vdmVDaGls
ZE5vZGVMaXN0KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpOb2RlTGlzdHNOb2RlRGF0YTo6
Tm9kZUxpc3RzTm9kZURhdGEpOiBJbml0aWFsaXplIG1fY2hpbGROb2RlTGlzdC4KKyAgICAgICAg
KE5vZGVNdXRhdGlvbk9ic2VydmVyRGF0YSk6IEV4dHJhY3RlZCBmcm9tIE5vZGVSYXJlRGF0YS4K
KyAgICAgICAgKFdlYkNvcmU6Ok5vZGVNdXRhdGlvbk9ic2VydmVyRGF0YTo6Y3JlYXRlKToKKyAg
ICAgICAgKE5vZGVNaWNyb0RhdGFUb2tlbkxpc3RzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpOb2RlTWljcm9EYXRhVG9rZW5MaXN0czo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5v
ZGVSYXJlRGF0YTo6Tm9kZVJhcmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVSYXJlRGF0
YTo6ZW5zdXJlTm9kZUxpc3RzKTogTWVyZ2VkIHNldE5vZGVMaXN0cyBzaW5jZSBpdCdzIG5vdCBj
YWxsZWQgZWxzZXdoZXJlLgorICAgICAgICAoV2ViQ29yZTo6Tm9kZVJhcmVEYXRhOjptdXRhdGlv
bk9ic2VydmVyUmVnaXN0cnkpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZVJhcmVEYXRhOjplbnN1
cmVNdXRhdGlvbk9ic2VydmVyUmVnaXN0cnkpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok5v
ZGVSYXJlRGF0YTo6dHJhbnNpZW50TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5KToKKyAgICAgICAg
KFdlYkNvcmU6Ok5vZGVSYXJlRGF0YTo6ZW5zdXJlVHJhbnNpZW50TXV0YXRpb25PYnNlcnZlclJl
Z2lzdHJ5KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVSYXJlRGF0YTo6ZW5zdXJlTWljcm9EYXRh
VG9rZW5MaXN0cyk6CisgICAgICAgIChOb2RlUmFyZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
Tm9kZVJhcmVEYXRhOjppdGVtUHJvcCk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlUmFyZURhdGE6
OnNldEl0ZW1Qcm9wKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVSYXJlRGF0YTo6aXRlbVJlZik6
CisgICAgICAgIChXZWJDb3JlOjpOb2RlUmFyZURhdGE6OnNldEl0ZW1SZWYpOgorICAgICAgICAo
V2ViQ29yZTo6Tm9kZVJhcmVEYXRhOjppdGVtVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpOb2Rl
UmFyZURhdGE6OnNldEl0ZW1UeXBlKToKKyAgICAgICAgKiBodG1sL0hUTUxQcm9wZXJ0aWVzQ29s
bGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUHJvcGVydGllc0NvbGxlY3Rpb246
OnByb3BlcnR5Tm9kZUxpc3QpOiBSZW5hbWVkIGZyb20gbmFtZWRJdGVtIHNpbmNlIGl0cyByZXR1
cm4gdHlwZSwgUHJvcGVydHlOb2RlTGlzdCwKKyAgICAgICAgaXMgZGlmZmVyZW50IGZyb20gdGhh
dCwgTm9kZSwgb2YgTGl2ZU5vZGVMaXN0OjpuYW1lZEl0ZW0uIEl0IHdhcyBzaGFkb3dpbmcgdGhl
IGZ1bmN0aW9uIG5hbWUgaW5zdGVhZCBvZiBvdmVycmlkaW5nLgorICAgICAgICAqIGh0bWwvSFRN
TFByb3BlcnRpZXNDb2xsZWN0aW9uLmg6CisgICAgICAgIChIVE1MUHJvcGVydGllc0NvbGxlY3Rp
b24pOgorICAgICAgICAqIGh0bWwvSFRNTFByb3BlcnRpZXNDb2xsZWN0aW9uLmlkbDoKKwogMjAx
Mi0xMi0wNiAgQW5kcmVpIEJ1Y3VyICA8YWJ1Y3VyQGFkb2JlLmNvbT4KIAogICAgICAgICBbQ1NT
IFJlZ2lvbnNdIFJlbW92ZSB0aGUgc2FuaXRpemUgbWVjaGFuaXNtIGZyb20gTGluZUZyYWdtZW50
YXRpb25EYXRhCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGROb2RlTGlzdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0NoaWxkTm9kZUxpc3QuY3BwCShyZXZpc2lv
biAxMzY5MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGROb2RlTGlzdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlICJDaGlsZE5vZGVMaXN0LmgiCiAK
ICNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiTm9kZVJhcmVEYXRhLmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIApAQCAtMzQsNyArMzUsNyBAQCBDaGlsZE5vZGVMaXN0OjpDaGlsZE5v
ZGVMaXN0KFBhc3NSZWZQdHI8CiAKIENoaWxkTm9kZUxpc3Q6On5DaGlsZE5vZGVMaXN0KCkKIHsK
LSAgICBvd25lck5vZGUoKS0+cmVtb3ZlQ2FjaGVkQ2hpbGROb2RlTGlzdCgpOworICAgIG93bmVy
Tm9kZSgpLT5ub2RlTGlzdHMoKS0+cmVtb3ZlQ2hpbGROb2RlTGlzdCh0aGlzKTsKIH0KIAogYm9v
bCBDaGlsZE5vZGVMaXN0Ojpub2RlTWF0Y2hlcyhFbGVtZW50KiB0ZXN0Tm9kZSkgY29uc3QKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vTm9kZS5jcHAJKHJldmlzaW9uIDEzNjkwMykKKysrIFNvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYwLDEzICs1NjAsNyBAQCB2b2lkIE5vZGU6
OnNldE5vZGVWYWx1ZShjb25zdCBTdHJpbmcmIC8qCiAKIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IE5v
ZGU6OmNoaWxkTm9kZXMoKQogewotICAgIE5vZGVSYXJlRGF0YSogZGF0YSA9IGVuc3VyZVJhcmVE
YXRhKCk7Ci0gICAgaWYgKGRhdGEtPmNoaWxkTm9kZUxpc3QoKSkKLSAgICAgICAgcmV0dXJuIFBh
c3NSZWZQdHI8Tm9kZUxpc3Q+KGRhdGEtPmNoaWxkTm9kZUxpc3QoKSk7Ci0KLSAgICBSZWZQdHI8
Q2hpbGROb2RlTGlzdD4gbGlzdCA9IENoaWxkTm9kZUxpc3Q6OmNyZWF0ZSh0aGlzKTsKLSAgICBk
YXRhLT5zZXRDaGlsZE5vZGVMaXN0KGxpc3QuZ2V0KCkpOwotICAgIHJldHVybiBsaXN0LnJlbGVh
c2UoKTsKKyAgICByZXR1cm4gZW5zdXJlUmFyZURhdGEoKS0+ZW5zdXJlTm9kZUxpc3RzKCktPmVu
c3VyZUNoaWxkTm9kZUxpc3QodGhpcyk7CiB9CiAKIE5vZGUgKk5vZGU6Omxhc3REZXNjZW5kYW50
KCkgY29uc3QKQEAgLTEwMTcsOCArMTAxMSwxMCBAQCB2b2lkIERvY3VtZW50OjppbnZhbGlkYXRl
Tm9kZUxpc3RDYWNoZXMoCiAKIHZvaWQgTm9kZTo6aW52YWxpZGF0ZU5vZGVMaXN0Q2FjaGVzSW5B
bmNlc3RvcnMoY29uc3QgUXVhbGlmaWVkTmFtZSogYXR0ck5hbWUsIEVsZW1lbnQqIGF0dHJpYnV0
ZU93bmVyRWxlbWVudCkKIHsKLSAgICBpZiAoaGFzUmFyZURhdGEoKSAmJiAoIWF0dHJOYW1lIHx8
IGlzQXR0cmlidXRlTm9kZSgpKSkKLSAgICAgICAgcmFyZURhdGEoKS0+Y2xlYXJDaGlsZE5vZGVM
aXN0Q2FjaGUoKTsKKyAgICBpZiAoaGFzUmFyZURhdGEoKSAmJiAoIWF0dHJOYW1lIHx8IGlzQXR0
cmlidXRlTm9kZSgpKSkgeworICAgICAgICBpZiAoTm9kZUxpc3RzTm9kZURhdGEqIGxpc3RzID0g
cmFyZURhdGEoKS0+bm9kZUxpc3RzKCkpCisgICAgICAgICAgICBsaXN0cy0+Y2xlYXJDaGlsZE5v
ZGVMaXN0Q2FjaGUoKTsKKyAgICB9CiAKICAgICAvLyBNb2RpZmljYXRpb25zIHRvIGF0dHJpYnV0
ZXMgdGhhdCBhcmUgbm90IGFzc29jaWF0ZWQgd2l0aCBhbiBFbGVtZW50IGNhbid0IGludmFsaWRh
dGUgTm9kZUxpc3QgY2FjaGVzLgogICAgIGlmIChhdHRyTmFtZSAmJiAhYXR0cmlidXRlT3duZXJF
bGVtZW50KQpAQCAtMTA0MywxMiArMTAzOSw2IEBAIE5vZGVMaXN0c05vZGVEYXRhKiBOb2RlOjpu
b2RlTGlzdHMoKQogICAgIHJldHVybiBoYXNSYXJlRGF0YSgpID8gcmFyZURhdGEoKS0+bm9kZUxp
c3RzKCkgOiAwOwogfQogCi12b2lkIE5vZGU6OnJlbW92ZUNhY2hlZENoaWxkTm9kZUxpc3QoKQot
ewotICAgIEFTU0VSVChyYXJlRGF0YSgpKTsKLSAgICByYXJlRGF0YSgpLT5zZXRDaGlsZE5vZGVM
aXN0KDApOwotfQotCiBOb2RlKiBOb2RlOjp0cmF2ZXJzZU5leHRBbmNlc3RvclNpYmxpbmcoKSBj
b25zdAogewogICAgIEFTU0VSVCghbmV4dFNpYmxpbmcoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9kb20vTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgJKHJl
dmlzaW9uIDEzNjkwMykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTYwMSw3ICs2MDEsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGludmFsaWRhdGVOb2Rl
TGlzdENhY2hlc0luQW5jZXN0b3JzKGNvbnN0IFF1YWxpZmllZE5hbWUqIGF0dHJOYW1lID0gMCwg
RWxlbWVudCogYXR0cmlidXRlT3duZXJFbGVtZW50ID0gMCk7CiAgICAgTm9kZUxpc3RzTm9kZURh
dGEqIG5vZGVMaXN0cygpOwotICAgIHZvaWQgcmVtb3ZlQ2FjaGVkQ2hpbGROb2RlTGlzdCgpOwog
CiAgICAgUGFzc1JlZlB0cjxOb2RlTGlzdD4gZ2V0RWxlbWVudHNCeVRhZ05hbWUoY29uc3QgQXRv
bWljU3RyaW5nJik7CiAgICAgUGFzc1JlZlB0cjxOb2RlTGlzdD4gZ2V0RWxlbWVudHNCeVRhZ05h
bWVOUyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgQXRvbWljU3RyaW5n
JiBsb2NhbE5hbWUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGVSYXJlRGF0YS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGVSYXJlRGF0YS5jcHAJKHJldmlz
aW9uIDEzNjkwMykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOCw5ICszOCwyNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0
cnVjdCBTYW1lU2l6ZUFzTm9kZVJhcmVEYXRhIHsKKyAgICB2b2lkKiBtX3BvaW50ZXJbNF07Cisg
ICAgdW5zaWduZWQgaW5kaWNlc0FuZEJpdGZpZWxkc1syXTsKKworI2lmIEVOQUJMRShNVVRBVElP
Tl9PQlNFUlZFUlMpCisgICAgdm9pZCogbV9tdXRhdGlvbk9ic2VydmVyOworI2VuZGlmCisKKyNp
ZiBFTkFCTEUoTUlDUk9EQVRBKQorICAgIHZvaWQqIG1fbWljcm9EYXRhOworI2VuZGlmCit9Owor
Q09NUElMRV9BU1NFUlQoc2l6ZW9mKE5vZGVSYXJlRGF0YSkgPT0gc2l6ZW9mKFNhbWVTaXplQXNO
b2RlUmFyZURhdGEpLCBOb2RlUmFyZURhdGFTaG91bGRTdGF5U21hbGwpOworCiB2b2lkIE5vZGVM
aXN0c05vZGVEYXRhOjpyZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlP
YmplY3RJbmZvKSBjb25zdAogewogICAgIE1lbW9yeUNsYXNzSW5mbyBpbmZvKG1lbW9yeU9iamVj
dEluZm8sIHRoaXMsIFdlYkNvcmVNZW1vcnlUeXBlczo6RE9NKTsKKyAgICBpbmZvLmFkZE1lbWJl
cihtX2NoaWxkTm9kZUxpc3QpOwogICAgIGluZm8uYWRkTWVtYmVyKG1fYXRvbWljTmFtZUNhY2hl
cyk7CiAgICAgaW5mby5hZGRNZW1iZXIobV9uYW1lQ2FjaGVzKTsKICAgICBpbmZvLmFkZE1lbWJl
cihtX3RhZ05vZGVMaXN0Q2FjaGVOUyk7CkBAIC01MSwxNyArNjYsMTMgQEAgdm9pZCBOb2RlUmFy
ZURhdGE6OnJlcG9ydE1lbW9yeVVzYWdlKE1lbQogICAgIE1lbW9yeUNsYXNzSW5mbyBpbmZvKG1l
bW9yeU9iamVjdEluZm8sIHRoaXMsIFdlYkNvcmVNZW1vcnlUeXBlczo6RE9NKTsKICAgICBpbmZv
LmFkZE1lbWJlcih0cmVlU2NvcGUoKSk7CiAgICAgaW5mby5hZGRNZW1iZXIobV9ub2RlTGlzdHMp
OwotICAgIGluZm8uYWRkTWVtYmVyKG1fY2hpbGROb2RlTGlzdCk7CiAKICNpZiBFTkFCTEUoTVVU
QVRJT05fT0JTRVJWRVJTKQotICAgIGluZm8uYWRkTWVtYmVyKG1fbXV0YXRpb25PYnNlcnZlclJl
Z2lzdHJ5KTsKLSAgICBpbmZvLmFkZE1lbWJlcihtX3RyYW5zaWVudE11dGF0aW9uT2JzZXJ2ZXJS
ZWdpc3RyeSk7CisgICAgaW5mby5hZGRNZW1iZXIobV9tdXRhdGlvbk9ic2VydmVyRGF0YSk7CiAj
ZW5kaWYKIAogI2lmIEVOQUJMRShNSUNST0RBVEEpCi0gICAgaW5mby5hZGRNZW1iZXIobV9pdGVt
UHJvcCk7Ci0gICAgaW5mby5hZGRNZW1iZXIobV9pdGVtUmVmKTsKLSAgICBpbmZvLmFkZE1lbWJl
cihtX2l0ZW1UeXBlKTsKKyAgICBpbmZvLmFkZE1lbWJlcihtX21pY3JvRGF0YVRva2VuTGlzdHMp
OwogI2VuZGlmCiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRhLmgJKHJldmlzaW9u
IDEzNjkwMykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaAkod29ya2luZyBj
b3B5KQpAQCAtNDksNiArNDksMjcgQEAgY2xhc3MgVHJlZVNjb3BlOwogY2xhc3MgTm9kZUxpc3Rz
Tm9kZURhdGEgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE5vZGVMaXN0c05vZGVEYXRhKTsg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CisgICAgdm9pZCBjbGVhckNoaWxkTm9k
ZUxpc3RDYWNoZSgpCisgICAgeworICAgICAgICBpZiAobV9jaGlsZE5vZGVMaXN0KQorICAgICAg
ICAgICAgbV9jaGlsZE5vZGVMaXN0LT5pbnZhbGlkYXRlQ2FjaGUoKTsKKyAgICB9CisKKyAgICBQ
YXNzUmVmUHRyPENoaWxkTm9kZUxpc3Q+IGVuc3VyZUNoaWxkTm9kZUxpc3QoTm9kZSogbm9kZSkK
KyAgICB7CisgICAgICAgIGlmIChtX2NoaWxkTm9kZUxpc3QpCisgICAgICAgICAgICByZXR1cm4g
bV9jaGlsZE5vZGVMaXN0OworICAgICAgICBSZWZQdHI8Q2hpbGROb2RlTGlzdD4gbGlzdCA9IENo
aWxkTm9kZUxpc3Q6OmNyZWF0ZShub2RlKTsKKyAgICAgICAgbV9jaGlsZE5vZGVMaXN0ID0gbGlz
dC5nZXQoKTsKKyAgICAgICAgcmV0dXJuIGxpc3QucmVsZWFzZSgpOworICAgIH0KKworICAgIHZv
aWQgcmVtb3ZlQ2hpbGROb2RlTGlzdChDaGlsZE5vZGVMaXN0KiBsaXN0KQorICAgIHsKKyAgICAg
ICAgQVNTRVJUX1VOVVNFRChsaXN0LCBtX2NoaWxkTm9kZUxpc3QgPSBsaXN0KTsKKyAgICAgICAg
bV9jaGlsZE5vZGVMaXN0ID0gMDsKKyAgICB9CisKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgU3Ry
aW5nVHlwZT4KICAgICBzdHJ1Y3QgTm9kZUxpc3RDYWNoZU1hcEVudHJ5SGFzaCB7CiAgICAgICAg
IHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IHN0ZDo6cGFpcjx1bnNpZ25lZCBjaGFyLCBTdHJp
bmdUeXBlPiYgZW50cnkpCkBAIC03NSw2ICs5Niw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IGxpc3QucmVsZWFzZSgpOwogICAgIH0KIAorICAgIC8vIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIHNo
b3VsZCBiZSByZW5hbWVkIHNpbmNlIGl0IGRvZXNuJ3QgaGF2ZSBhbiBhdG9taWMgbmFtZS4KICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAgIFBhc3NSZWZQdHI8VD4gYWRkQ2FjaGVXaXRoQXRv
bWljTmFtZShOb2RlKiBub2RlLCBDb2xsZWN0aW9uVHlwZSBjb2xsZWN0aW9uVHlwZSkKICAgICB7
CkBAIC0xNzksNyArMjAxLDkgQEAgcHVibGljOgogICAgIHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2Uo
TWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0OwogCiBwcml2YXRlOgotICAgIE5vZGVMaXN0c05vZGVE
YXRhKCkgeyB9CisgICAgTm9kZUxpc3RzTm9kZURhdGEoKQorICAgICAgICA6IG1fY2hpbGROb2Rl
TGlzdCgwKQorICAgIHsgfQogCiAgICAgc3RkOjpwYWlyPHVuc2lnbmVkIGNoYXIsIEF0b21pY1N0
cmluZz4gbmFtZWROb2RlTGlzdEtleShDb2xsZWN0aW9uVHlwZSB0eXBlLCBjb25zdCBBdG9taWNT
dHJpbmcmIG5hbWUpCiAgICAgewpAQCAtMTkxLDE3ICsyMTUsMzQgQEAgcHJpdmF0ZToKICAgICAg
ICAgcmV0dXJuIHN0ZDo6cGFpcjx1bnNpZ25lZCBjaGFyLCBTdHJpbmc+KHR5cGUsIG5hbWUpOwog
ICAgIH0KIAorICAgIC8vIEZJWE1FOiBtX2NoaWxkTm9kZUxpc3Qgc2hvdWxkIGJlIG1lcmdlZCBp
bnRvIG1fYXRvbWljTmFtZUNhY2hlcyBvciBhdCBsZWFzdCBiZSBzaGFyZWQgd2l0aCBIVE1MQ29s
bGVjdGlvbiByZXR1cm5lZCBieSBFbGVtZW50OjpjaGlsZHJlbgorICAgIC8vIGJ1dCBpdCdzIHRy
aWNreSBiZWNhdXNlIGludmFsaWRhdGVDYWNoZXMgc2hvdWxkbid0IGludmFsaWRhdGUgdGhpcyBj
YWNoZSBhbmQgYWRvcHRUcmVlU2NvcGUgc2hvdWxkbid0IGNhbGwgcmVnaXN0ZXJOb2RlTGlzdCBv
ciB1bnJlZ2lzdGVyTm9kZUxpc3QuCisgICAgQ2hpbGROb2RlTGlzdCogbV9jaGlsZE5vZGVMaXN0
OwogICAgIE5vZGVMaXN0QXRvbWljTmFtZUNhY2hlTWFwIG1fYXRvbWljTmFtZUNhY2hlczsKICAg
ICBOb2RlTGlzdE5hbWVDYWNoZU1hcCBtX25hbWVDYWNoZXM7CiAgICAgVGFnTm9kZUxpc3RDYWNo
ZU5TIG1fdGFnTm9kZUxpc3RDYWNoZU5TOwogfTsKIAorc3RydWN0IE5vZGVNdXRhdGlvbk9ic2Vy
dmVyRGF0YSB7CisgICAgVmVjdG9yPE93blB0cjxNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9u
PiA+IG1fcmVnaXN0cnk7CisgICAgSGFzaFNldDxNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9u
Kj4gbV90cmFuc2llbnRSZWdpc3RyeTsKKworICAgIHN0YXRpYyBQYXNzT3duUHRyPE5vZGVNdXRh
dGlvbk9ic2VydmVyRGF0YT4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IE5vZGVNdXRh
dGlvbk9ic2VydmVyRGF0YSk7IH0KK307CisKK3N0cnVjdCBOb2RlTWljcm9EYXRhVG9rZW5MaXN0
cyB7CisgICAgUmVmUHRyPERPTVNldHRhYmxlVG9rZW5MaXN0PiBtX2l0ZW1Qcm9wOworICAgIFJl
ZlB0cjxET01TZXR0YWJsZVRva2VuTGlzdD4gbV9pdGVtUmVmOworICAgIFJlZlB0cjxET01TZXR0
YWJsZVRva2VuTGlzdD4gbV9pdGVtVHlwZTsKKworICAgIHN0YXRpYyBQYXNzT3duUHRyPE5vZGVN
aWNyb0RhdGFUb2tlbkxpc3RzPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFB0cihuZXcgTm9kZU1p
Y3JvRGF0YVRva2VuTGlzdHMpOyB9Cit9OworCiBjbGFzcyBOb2RlUmFyZURhdGEgOiBwdWJsaWMg
Tm9kZVJhcmVEYXRhQmFzZSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTm9kZVJhcmVEYXRh
KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6ICAgIAogICAgIE5vZGVSYXJlRGF0
YShEb2N1bWVudCogZG9jdW1lbnQpCiAgICAgICAgIDogTm9kZVJhcmVEYXRhQmFzZShkb2N1bWVu
dCkKLSAgICAgICAgLCBtX2NoaWxkTm9kZUxpc3QoMCkKICAgICAgICAgLCBtX3RhYkluZGV4KDAp
CiAgICAgICAgICwgbV9jaGlsZEluZGV4KDApCiAgICAgICAgICwgbV90YWJJbmRleFdhc1NldEV4
cGxpY2l0bHkoZmFsc2UpCkBAIC0yMzEsMjIgKzI3MiwxMyBAQCBwdWJsaWM6ICAgIAogICAgIH0K
IAogICAgIHZvaWQgY2xlYXJOb2RlTGlzdHMoKSB7IG1fbm9kZUxpc3RzLmNsZWFyKCk7IH0KLSAg
ICB2b2lkIHNldE5vZGVMaXN0cyhQYXNzT3duUHRyPE5vZGVMaXN0c05vZGVEYXRhPiBsaXN0cykg
eyBtX25vZGVMaXN0cyA9IGxpc3RzOyB9CiAgICAgTm9kZUxpc3RzTm9kZURhdGEqIG5vZGVMaXN0
cygpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZUxpc3RzLmdldCgpOyB9CiAgICAgTm9kZUxpc3RzTm9k
ZURhdGEqIGVuc3VyZU5vZGVMaXN0cygpCiAgICAgewogICAgICAgICBpZiAoIW1fbm9kZUxpc3Rz
KQotICAgICAgICAgICAgc2V0Tm9kZUxpc3RzKE5vZGVMaXN0c05vZGVEYXRhOjpjcmVhdGUoKSk7
CisgICAgICAgICAgICBtX25vZGVMaXN0cyA9IE5vZGVMaXN0c05vZGVEYXRhOjpjcmVhdGUoKTsK
ICAgICAgICAgcmV0dXJuIG1fbm9kZUxpc3RzLmdldCgpOwogICAgIH0KLSAgICB2b2lkIGNsZWFy
Q2hpbGROb2RlTGlzdENhY2hlKCkKLSAgICB7Ci0gICAgICAgIGlmIChtX2NoaWxkTm9kZUxpc3Qp
Ci0gICAgICAgICAgICBtX2NoaWxkTm9kZUxpc3QtPmludmFsaWRhdGVDYWNoZSgpOwotICAgIH0K
LQotICAgIENoaWxkTm9kZUxpc3QqIGNoaWxkTm9kZUxpc3QoKSBjb25zdCB7IHJldHVybiBtX2No
aWxkTm9kZUxpc3Q7IH0KLSAgICB2b2lkIHNldENoaWxkTm9kZUxpc3QoQ2hpbGROb2RlTGlzdCog
bGlzdCkgeyBtX2NoaWxkTm9kZUxpc3QgPSBsaXN0OyB9CiAKICAgICBzaG9ydCB0YWJJbmRleCgp
IGNvbnN0IHsgcmV0dXJuIG1fdGFiSW5kZXg7IH0KICAgICB2b2lkIHNldFRhYkluZGV4RXhwbGlj
aXRseShzaG9ydCBpbmRleCkgeyBtX3RhYkluZGV4ID0gaW5kZXg7IG1fdGFiSW5kZXhXYXNTZXRF
eHBsaWNpdGx5ID0gdHJ1ZTsgfQpAQCAtMjU0LDcwICsyODYsNzcgQEAgcHVibGljOiAgICAKICAg
ICB2b2lkIGNsZWFyVGFiSW5kZXhFeHBsaWNpdGx5KCkgeyBtX3RhYkluZGV4ID0gMDsgbV90YWJJ
bmRleFdhc1NldEV4cGxpY2l0bHkgPSBmYWxzZTsgfQogCiAjaWYgRU5BQkxFKE1VVEFUSU9OX09C
U0VSVkVSUykKLSAgICBWZWN0b3I8T3duUHRyPE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24+
ID4qIG11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSgpIHsgcmV0dXJuIG1fbXV0YXRpb25PYnNlcnZl
clJlZ2lzdHJ5LmdldCgpOyB9CisgICAgVmVjdG9yPE93blB0cjxNdXRhdGlvbk9ic2VydmVyUmVn
aXN0cmF0aW9uPiA+KiBtdXRhdGlvbk9ic2VydmVyUmVnaXN0cnkoKSB7IHJldHVybiBtX211dGF0
aW9uT2JzZXJ2ZXJEYXRhID8gJm1fbXV0YXRpb25PYnNlcnZlckRhdGEtPm1fcmVnaXN0cnkgOiAw
OyB9CiAgICAgVmVjdG9yPE93blB0cjxNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uPiA+KiBl
bnN1cmVNdXRhdGlvbk9ic2VydmVyUmVnaXN0cnkoKQogICAgIHsKLSAgICAgICAgaWYgKCFtX211
dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSkKLSAgICAgICAgICAgIG1fbXV0YXRpb25PYnNlcnZlclJl
Z2lzdHJ5ID0gYWRvcHRQdHIobmV3IFZlY3RvcjxPd25QdHI8TXV0YXRpb25PYnNlcnZlclJlZ2lz
dHJhdGlvbj4gPik7Ci0gICAgICAgIHJldHVybiBtX211dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeS5n
ZXQoKTsKKyAgICAgICAgaWYgKCFtX211dGF0aW9uT2JzZXJ2ZXJEYXRhKQorICAgICAgICAgICAg
bV9tdXRhdGlvbk9ic2VydmVyRGF0YSA9IE5vZGVNdXRhdGlvbk9ic2VydmVyRGF0YTo6Y3JlYXRl
KCk7CisgICAgICAgIHJldHVybiAmbV9tdXRhdGlvbk9ic2VydmVyRGF0YS0+bV9yZWdpc3RyeTsK
ICAgICB9CiAKLSAgICBIYXNoU2V0PE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24qPiogdHJh
bnNpZW50TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5KCkgeyByZXR1cm4gbV90cmFuc2llbnRNdXRh
dGlvbk9ic2VydmVyUmVnaXN0cnkuZ2V0KCk7IH0KKyAgICBIYXNoU2V0PE11dGF0aW9uT2JzZXJ2
ZXJSZWdpc3RyYXRpb24qPiogdHJhbnNpZW50TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5KCkgeyBy
ZXR1cm4gbV9tdXRhdGlvbk9ic2VydmVyRGF0YSA/ICZtX211dGF0aW9uT2JzZXJ2ZXJEYXRhLT5t
X3RyYW5zaWVudFJlZ2lzdHJ5IDogMDsgfQogICAgIEhhc2hTZXQ8TXV0YXRpb25PYnNlcnZlclJl
Z2lzdHJhdGlvbio+KiBlbnN1cmVUcmFuc2llbnRNdXRhdGlvbk9ic2VydmVyUmVnaXN0cnkoKQog
ICAgIHsKLSAgICAgICAgaWYgKCFtX3RyYW5zaWVudE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSkK
LSAgICAgICAgICAgIG1fdHJhbnNpZW50TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5ID0gYWRvcHRQ
dHIobmV3IEhhc2hTZXQ8TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbio+KTsKLSAgICAgICAg
cmV0dXJuIG1fdHJhbnNpZW50TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5LmdldCgpOworICAgICAg
ICBpZiAoIW1fbXV0YXRpb25PYnNlcnZlckRhdGEpCisgICAgICAgICAgICBtX211dGF0aW9uT2Jz
ZXJ2ZXJEYXRhID0gTm9kZU11dGF0aW9uT2JzZXJ2ZXJEYXRhOjpjcmVhdGUoKTsKKyAgICAgICAg
cmV0dXJuICZtX211dGF0aW9uT2JzZXJ2ZXJEYXRhLT5tX3RyYW5zaWVudFJlZ2lzdHJ5OwogICAg
IH0KICNlbmRpZgogCiAjaWYgRU5BQkxFKE1JQ1JPREFUQSkKKyAgICBOb2RlTWljcm9EYXRhVG9r
ZW5MaXN0cyogZW5zdXJlTWljcm9EYXRhVG9rZW5MaXN0cygpIGNvbnN0CisgICAgeworICAgICAg
ICBpZiAoIW1fbWljcm9EYXRhVG9rZW5MaXN0cykKKyAgICAgICAgICAgIG1fbWljcm9EYXRhVG9r
ZW5MaXN0cyA9IE5vZGVNaWNyb0RhdGFUb2tlbkxpc3RzOjpjcmVhdGUoKTsKKyAgICAgICAgcmV0
dXJuIG1fbWljcm9EYXRhVG9rZW5MaXN0cy5nZXQoKTsKKyAgICB9CisKICAgICBET01TZXR0YWJs
ZVRva2VuTGlzdCogaXRlbVByb3AoKSBjb25zdAogICAgIHsKLSAgICAgICAgaWYgKCFtX2l0ZW1Q
cm9wKQotICAgICAgICAgICAgbV9pdGVtUHJvcCA9IERPTVNldHRhYmxlVG9rZW5MaXN0OjpjcmVh
dGUoKTsKKyAgICAgICAgaWYgKCFlbnN1cmVNaWNyb0RhdGFUb2tlbkxpc3RzKCktPm1faXRlbVBy
b3ApCisgICAgICAgICAgICBtX21pY3JvRGF0YVRva2VuTGlzdHMtPm1faXRlbVByb3AgPSBET01T
ZXR0YWJsZVRva2VuTGlzdDo6Y3JlYXRlKCk7CiAKLSAgICAgICAgcmV0dXJuIG1faXRlbVByb3Au
Z2V0KCk7CisgICAgICAgIHJldHVybiBtX21pY3JvRGF0YVRva2VuTGlzdHMtPm1faXRlbVByb3Au
Z2V0KCk7CiAgICAgfQogCiAgICAgdm9pZCBzZXRJdGVtUHJvcChjb25zdCBTdHJpbmcmIHZhbHVl
KQogICAgIHsKLSAgICAgICAgaWYgKCFtX2l0ZW1Qcm9wKQotICAgICAgICAgICAgbV9pdGVtUHJv
cCA9IERPTVNldHRhYmxlVG9rZW5MaXN0OjpjcmVhdGUoKTsKKyAgICAgICAgaWYgKCFlbnN1cmVN
aWNyb0RhdGFUb2tlbkxpc3RzKCktPm1faXRlbVByb3ApCisgICAgICAgICAgICBtX21pY3JvRGF0
YVRva2VuTGlzdHMtPm1faXRlbVByb3AgPSBET01TZXR0YWJsZVRva2VuTGlzdDo6Y3JlYXRlKCk7
CiAKLSAgICAgICAgbV9pdGVtUHJvcC0+c2V0VmFsdWUodmFsdWUpOworICAgICAgICBtX21pY3Jv
RGF0YVRva2VuTGlzdHMtPm1faXRlbVByb3AtPnNldFZhbHVlKHZhbHVlKTsKICAgICB9CiAKICAg
ICBET01TZXR0YWJsZVRva2VuTGlzdCogaXRlbVJlZigpIGNvbnN0CiAgICAgewotICAgICAgICBp
ZiAoIW1faXRlbVJlZikKLSAgICAgICAgICAgIG1faXRlbVJlZiA9IERPTVNldHRhYmxlVG9rZW5M
aXN0OjpjcmVhdGUoKTsKKyAgICAgICAgaWYgKCFlbnN1cmVNaWNyb0RhdGFUb2tlbkxpc3RzKCkt
Pm1faXRlbVJlZikKKyAgICAgICAgICAgIG1fbWljcm9EYXRhVG9rZW5MaXN0cy0+bV9pdGVtUmVm
ID0gRE9NU2V0dGFibGVUb2tlbkxpc3Q6OmNyZWF0ZSgpOwogCi0gICAgICAgIHJldHVybiBtX2l0
ZW1SZWYuZ2V0KCk7CisgICAgICAgIHJldHVybiBtX21pY3JvRGF0YVRva2VuTGlzdHMtPm1faXRl
bVJlZi5nZXQoKTsKICAgICB9CiAKICAgICB2b2lkIHNldEl0ZW1SZWYoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKICAgICB7Ci0gICAgICAgIGlmICghbV9pdGVtUmVmKQotICAgICAgICAgICAgbV9pdGVt
UmVmID0gRE9NU2V0dGFibGVUb2tlbkxpc3Q6OmNyZWF0ZSgpOworICAgICAgICBpZiAoIWVuc3Vy
ZU1pY3JvRGF0YVRva2VuTGlzdHMoKS0+bV9pdGVtUmVmKQorICAgICAgICAgICAgbV9taWNyb0Rh
dGFUb2tlbkxpc3RzLT5tX2l0ZW1SZWYgPSBET01TZXR0YWJsZVRva2VuTGlzdDo6Y3JlYXRlKCk7
CiAKLSAgICAgICAgbV9pdGVtUmVmLT5zZXRWYWx1ZSh2YWx1ZSk7CisgICAgICAgIG1fbWljcm9E
YXRhVG9rZW5MaXN0cy0+bV9pdGVtUmVmLT5zZXRWYWx1ZSh2YWx1ZSk7CiAgICAgfQogCiAgICAg
RE9NU2V0dGFibGVUb2tlbkxpc3QqIGl0ZW1UeXBlKCkgY29uc3QKICAgICB7Ci0gICAgICAgIGlm
ICghbV9pdGVtVHlwZSkKLSAgICAgICAgICAgIG1faXRlbVR5cGUgPSBET01TZXR0YWJsZVRva2Vu
TGlzdDo6Y3JlYXRlKCk7CisgICAgICAgIGlmICghZW5zdXJlTWljcm9EYXRhVG9rZW5MaXN0cygp
LT5tX2l0ZW1UeXBlKQorICAgICAgICAgICAgbV9taWNyb0RhdGFUb2tlbkxpc3RzLT5tX2l0ZW1U
eXBlID0gRE9NU2V0dGFibGVUb2tlbkxpc3Q6OmNyZWF0ZSgpOwogCi0gICAgICAgIHJldHVybiBt
X2l0ZW1UeXBlLmdldCgpOworICAgICAgICByZXR1cm4gbV9taWNyb0RhdGFUb2tlbkxpc3RzLT5t
X2l0ZW1UeXBlLmdldCgpOwogICAgIH0KIAogICAgIHZvaWQgc2V0SXRlbVR5cGUoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGlmICghbV9pdGVtVHlwZSkKLSAgICAgICAgICAg
IG1faXRlbVR5cGUgPSBET01TZXR0YWJsZVRva2VuTGlzdDo6Y3JlYXRlKCk7CisgICAgICAgIGlm
ICghZW5zdXJlTWljcm9EYXRhVG9rZW5MaXN0cygpLT5tX2l0ZW1UeXBlKQorICAgICAgICAgICAg
bV9taWNyb0RhdGFUb2tlbkxpc3RzLT5tX2l0ZW1UeXBlID0gRE9NU2V0dGFibGVUb2tlbkxpc3Q6
OmNyZWF0ZSgpOwogCi0gICAgICAgIG1faXRlbVR5cGUtPnNldFZhbHVlKHZhbHVlKTsKKyAgICAg
ICAgbV9taWNyb0RhdGFUb2tlbkxpc3RzLT5tX2l0ZW1UeXBlLT5zZXRWYWx1ZSh2YWx1ZSk7CiAg
ICAgfQogI2VuZGlmCiAKQEAgLTMyOCw3ICszNjcsNiBAQCBwdWJsaWM6ICAgIAogCiBwcm90ZWN0
ZWQ6CiAgICAgT3duUHRyPE5vZGVMaXN0c05vZGVEYXRhPiBtX25vZGVMaXN0czsKLSAgICBDaGls
ZE5vZGVMaXN0KiBtX2NoaWxkTm9kZUxpc3Q7CiAgICAgc2hvcnQgbV90YWJJbmRleDsKICAgICB1
bnNpZ25lZCBzaG9ydCBtX2NoaWxkSW5kZXg7CiAgICAgYm9vbCBtX3RhYkluZGV4V2FzU2V0RXhw
bGljaXRseSA6IDE7CkBAIC0zNTUsMTQgKzM5MywxMSBAQCBwcm90ZWN0ZWQ6CiAgICAgYm9vbCBt
X2NoaWxkcmVuQWZmZWN0ZWRCeUJhY2t3YXJkUG9zaXRpb25hbFJ1bGVzIDogMTsKIAogI2lmIEVO
QUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCi0gICAgT3duUHRyPFZlY3RvcjxPd25QdHI8TXV0YXRp
b25PYnNlcnZlclJlZ2lzdHJhdGlvbj4gPiA+IG1fbXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5Owot
ICAgIE93blB0cjxIYXNoU2V0PE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24qPiA+IG1fdHJh
bnNpZW50TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5OworICAgIE93blB0cjxOb2RlTXV0YXRpb25P
YnNlcnZlckRhdGE+IG1fbXV0YXRpb25PYnNlcnZlckRhdGE7CiAjZW5kaWYKIAogI2lmIEVOQUJM
RShNSUNST0RBVEEpCi0gICAgbXV0YWJsZSBSZWZQdHI8RE9NU2V0dGFibGVUb2tlbkxpc3Q+IG1f
aXRlbVByb3A7Ci0gICAgbXV0YWJsZSBSZWZQdHI8RE9NU2V0dGFibGVUb2tlbkxpc3Q+IG1faXRl
bVJlZjsKLSAgICBtdXRhYmxlIFJlZlB0cjxET01TZXR0YWJsZVRva2VuTGlzdD4gbV9pdGVtVHlw
ZTsKKyAgICBtdXRhYmxlIE93blB0cjxOb2RlTWljcm9EYXRhVG9rZW5MaXN0cz4gbV9taWNyb0Rh
dGFUb2tlbkxpc3RzOwogI2VuZGlmCiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxQcm9wZXJ0aWVzQ29sbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MUHJvcGVydGllc0NvbGxlY3Rpb24uY3BwCShyZXZpc2lvbiAxMzY5MDMpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQcm9wZXJ0aWVzQ29sbGVjdGlvbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEzNSw3ICsxMzUsNyBAQCBQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IEhUTUxQ
cm9wZXJ0aWVzCiAgICAgcmV0dXJuIG1fcHJvcGVydHlOYW1lczsKIH0KIAotUGFzc1JlZlB0cjxQ
cm9wZXJ0eU5vZGVMaXN0PiBIVE1MUHJvcGVydGllc0NvbGxlY3Rpb246Om5hbWVkSXRlbShjb25z
dCBTdHJpbmcmIG5hbWUpIGNvbnN0CitQYXNzUmVmUHRyPFByb3BlcnR5Tm9kZUxpc3Q+IEhUTUxQ
cm9wZXJ0aWVzQ29sbGVjdGlvbjo6cHJvcGVydHlOb2RlTGlzdChjb25zdCBTdHJpbmcmIG5hbWUp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIG93bmVyTm9kZSgpLT5wcm9wZXJ0eU5vZGVMaXN0KG5hbWUp
OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUHJvcGVydGllc0NvbGxlY3Rpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQcm9wZXJ0aWVzQ29sbGVj
dGlvbi5oCShyZXZpc2lvbiAxMzY5MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQcm9w
ZXJ0aWVzQ29sbGVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHVwZGF0ZVJlZkVsZW1lbnRzKCkgY29uc3Q7CiAKICAgICBQYXNzUmVmUHRy
PERPTVN0cmluZ0xpc3Q+IG5hbWVzKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFBy
b3BlcnR5Tm9kZUxpc3Q+IG5hbWVkSXRlbShjb25zdCBTdHJpbmcmKSBjb25zdCBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8UHJvcGVydHlOb2RlTGlzdD4gcHJvcGVydHlOb2RlTGlz
dChjb25zdCBTdHJpbmcmKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaGFzTmFtZWRJdGVtKGNv
bnN0IEF0b21pY1N0cmluZyYpIGNvbnN0IE9WRVJSSURFOwogCiAgICAgdm9pZCBpbnZhbGlkYXRl
Q2FjaGUoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUHJvcGVydGllc0Nv
bGxlY3Rpb24uaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFByb3Bl
cnRpZXNDb2xsZWN0aW9uLmlkbAkocmV2aXNpb24gMTM2OTAzKQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MUHJvcGVydGllc0NvbGxlY3Rpb24uaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw1
ICszOCw1IEBACiAgICAgTm9kZSBpdGVtKGluIHVuc2lnbmVkIGxvbmcgaW5kZXgpOwogCiAgICAg
cmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZ0xpc3QgbmFtZXM7Ci0gICAgUHJvcGVydHlOb2Rl
TGlzdCBuYW1lZEl0ZW0oaW4gRE9NU3RyaW5nIG5hbWUpOworICAgIFtJbXBsZW1lbnRlZEFzPXBy
b3BlcnR5Tm9kZUxpc3RdIFByb3BlcnR5Tm9kZUxpc3QgbmFtZWRJdGVtKGluIERPTVN0cmluZyBu
YW1lKTsKIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>178139</attachid>
            <date>2012-12-06 19:47:49 -0800</date>
            <delta_ts>2012-12-07 16:57:58 -0800</delta_ts>
            <desc>Moved new classes into NodeRareData</desc>
            <filename>bug-104312-20121206194513.patch</filename>
            <type>text/plain</type>
            <size>19200</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNjkwOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY0IEBACisyMDEyLTEyLTA2ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFNocmluayB0aGUgc2l6ZSBvZiBO
b2RlUmFyZURhdGEgYnkgbW92aW5nIHBvaW50ZXJzIGludG8gc2VwYXJhdGUgb2JqZWN0cworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA0MzEyCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBk
b2VzIHRocmVlIHRoaW5nczoKKyAgICAgICAgMS4gTW92ZSBDaGlsZE5vZGVMaXN0IGJhY2sgaW50
byBOb2RlTGlzdHNOb2RlRGF0YS4KKyAgICAgICAgMi4gTW92ZSBtX211dGF0aW9uT2JzZXJ2ZXJS
ZWdpc3RyeSAmIG1fdHJhbnNpZW50TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5IGludG8gYSBzZXBh
cmF0ZSBvYmplY3Qgb3duZWQgYnkgTm9kZVJhcmVEYXRhLgorICAgICAgICAzLiBNb3ZlIG1faXRl
bVByb3AsIG1faXRlbVJlZiwgbV9pdGVtVHlwZSAmIGludG8gYSBzZXBhcmF0ZSBvYmplY3Qgb3du
ZWQgYnkgTm9kZVJhcmVEYXRhLgorCisgICAgICAgIE1vdmluZyBtX2NoaWxkTm9kZUxpc3QgZnJv
bSBOb2RlUmFyZURhdGEgdG8gTm9kZUxpc3RzTm9kZURhdGEgYWxzbyBoYXMgYSBuaWNlIHNpZGUt
ZWZmZWN0IG9mIG1ha2luZyBDaGlsZE5vZGVMaXN0CisgICAgICAgIGJlaGF2ZSBtb3JlIGxpa2Ug
b3RoZXIgTGl2ZU5vZGVMaXN0cy4KKworICAgICAgICBUaGlzIHBhdGNoIGFsc28gZml4ZXMgTWFj
IGJ1aWxkIHdoZW4gbWljcm9kYXRhIGlzIGVuYWJsZWQuCisKKyAgICAgICAgVGhlcmUgc2hvdWxk
IGJlIG5vIHVzZXItdmlzaWJsZSBiZWhhdmlvciBjaGFuZ2UuCisKKyAgICAgICAgKiBkb20vQ2hp
bGROb2RlTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZE5vZGVMaXN0Ojp+Q2hpbGRO
b2RlTGlzdCk6CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9k
ZTo6Y2hpbGROb2Rlcyk6IE1vdmVkIHRoZSBjb2RlIHRvIGNyZWF0ZSBDaGlsZE5vZGVMaXN0IGlu
dG8gTm9kZUxpc3RzTm9kZURhdGEgdG8gbWF0Y2ggb3RoZXIgbm9kZSBsaXN0cy4KKyAgICAgICAg
KFdlYkNvcmU6Ok5vZGU6OmludmFsaWRhdGVOb2RlTGlzdENhY2hlc0luQW5jZXN0b3JzKToKKyAg
ICAgICAgKFdlYkNvcmUpOiBSZW1vdmVkIHJlbW92ZUNhY2hlZENoaWxkTm9kZUxpc3QuCisgICAg
ICAgICogZG9tL05vZGUuaDoKKyAgICAgICAgKE5vZGUpOgorICAgICAgICAqIGRvbS9Ob2RlUmFy
ZURhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZSk6IEFzc2VydCB0aGUgc2l6ZSBvZiBOb2RlUmFy
ZURhdGEgYXQgY29tcGlsYXRpb24gdGltZS4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVMaXN0c05v
ZGVEYXRhOjpyZXBvcnRNZW1vcnlVc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlUmFyZURh
dGE6OnJlcG9ydE1lbW9yeVVzYWdlKToKKyAgICAgICAgKiBkb20vTm9kZVJhcmVEYXRhLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpOb2RlTGlzdHNOb2RlRGF0YTo6Y2xlYXJDaGlsZE5vZGVMaXN0Q2Fj
aGUpOiBNb3ZlZCBmcm9tIE5vZGVSYXJlRGF0YS4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVMaXN0
c05vZGVEYXRhOjplbnN1cmVDaGlsZE5vZGVMaXN0KTogRXh0cmFjdGVkIGZyb20gTm9kZTo6Y2hp
bGROb2Rlcy4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVMaXN0c05vZGVEYXRhOjpyZW1vdmVDaGls
ZE5vZGVMaXN0KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpOb2RlTGlzdHNOb2RlRGF0YTo6
Tm9kZUxpc3RzTm9kZURhdGEpOiBJbml0aWFsaXplIG1fY2hpbGROb2RlTGlzdC4KKyAgICAgICAg
KFdlYkNvcmU6Ok5vZGVSYXJlRGF0YTo6Tm9kZU11dGF0aW9uT2JzZXJ2ZXJEYXRhKTogRXh0cmFj
dGVkIGZyb20gTm9kZVJhcmVEYXRhLgorICAgICAgICAoV2ViQ29yZTo6Tm9kZVJhcmVEYXRhOjpO
b2RlTXV0YXRpb25PYnNlcnZlckRhdGE6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpOb2Rl
UmFyZURhdGE6Ok5vZGVNaWNyb0RhdGFUb2tlbkxpc3RzKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpOb2RlUmFyZURhdGE6Ok5vZGVNaWNyb0RhdGFUb2tlbkxpc3RzOjpjcmVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6Tm9kZVJhcmVEYXRhOjpOb2RlUmFyZURhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6Tm9kZVJhcmVEYXRhOjplbnN1cmVOb2RlTGlzdHMpOiBNZXJnZWQgc2V0Tm9kZUxpc3Rz
IHNpbmNlIGl0J3Mgbm90IGNhbGxlZCBlbHNld2hlcmUuCisgICAgICAgIChXZWJDb3JlOjpOb2Rl
UmFyZURhdGE6Om11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSk6CisgICAgICAgIChXZWJDb3JlOjpO
b2RlUmFyZURhdGE6OmVuc3VyZU11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSk6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Tm9kZVJhcmVEYXRhOjp0cmFuc2llbnRNdXRhdGlvbk9ic2VydmVyUmVn
aXN0cnkpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZVJhcmVEYXRhOjplbnN1cmVUcmFuc2llbnRN
dXRhdGlvbk9ic2VydmVyUmVnaXN0cnkpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZVJhcmVEYXRh
OjplbnN1cmVNaWNyb0RhdGFUb2tlbkxpc3RzKToKKyAgICAgICAgKE5vZGVSYXJlRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpOb2RlUmFyZURhdGE6Oml0ZW1Qcm9wKToKKyAgICAgICAgKFdlYkNv
cmU6Ok5vZGVSYXJlRGF0YTo6c2V0SXRlbVByb3ApOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZVJh
cmVEYXRhOjppdGVtUmVmKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVSYXJlRGF0YTo6c2V0SXRl
bVJlZik6CisgICAgICAgIChXZWJDb3JlOjpOb2RlUmFyZURhdGE6Oml0ZW1UeXBlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok5vZGVSYXJlRGF0YTo6c2V0SXRlbVR5cGUpOgorICAgICAgICAqIGh0bWwv
SFRNTFByb3BlcnRpZXNDb2xsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQcm9w
ZXJ0aWVzQ29sbGVjdGlvbjo6cHJvcGVydHlOb2RlTGlzdCk6IFJlbmFtZWQgZnJvbSBuYW1lZEl0
ZW0gc2luY2UgaXRzIHJldHVybiB0eXBlLCBQcm9wZXJ0eU5vZGVMaXN0LAorICAgICAgICBpcyBk
aWZmZXJlbnQgZnJvbSB0aGF0LCBOb2RlLCBvZiBMaXZlTm9kZUxpc3Q6Om5hbWVkSXRlbS4gSXQg
d2FzIHNoYWRvd2luZyB0aGUgZnVuY3Rpb24gbmFtZSBpbnN0ZWFkIG9mIG92ZXJyaWRpbmcuCisg
ICAgICAgICogaHRtbC9IVE1MUHJvcGVydGllc0NvbGxlY3Rpb24uaDoKKyAgICAgICAgKEhUTUxQ
cm9wZXJ0aWVzQ29sbGVjdGlvbik6CisgICAgICAgICogaHRtbC9IVE1MUHJvcGVydGllc0NvbGxl
Y3Rpb24uaWRsOgorCiAyMDEyLTEyLTA2ICBBbmRyZWkgQnVjdXIgIDxhYnVjdXJAYWRvYmUuY29t
PgogCiAgICAgICAgIFtDU1MgUmVnaW9uc10gUmVtb3ZlIHRoZSBzYW5pdGl6ZSBtZWNoYW5pc20g
ZnJvbSBMaW5lRnJhZ21lbnRhdGlvbkRhdGEKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9DaGls
ZE5vZGVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGROb2Rl
TGlzdC5jcHAJKHJldmlzaW9uIDEzNjkwMykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZE5v
ZGVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgIkNo
aWxkTm9kZUxpc3QuaCIKIAogI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJOb2RlUmFy
ZURhdGEuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zNCw3ICszNSw3IEBAIENoaWxk
Tm9kZUxpc3Q6OkNoaWxkTm9kZUxpc3QoUGFzc1JlZlB0cjwKIAogQ2hpbGROb2RlTGlzdDo6fkNo
aWxkTm9kZUxpc3QoKQogewotICAgIG93bmVyTm9kZSgpLT5yZW1vdmVDYWNoZWRDaGlsZE5vZGVM
aXN0KCk7CisgICAgb3duZXJOb2RlKCktPm5vZGVMaXN0cygpLT5yZW1vdmVDaGlsZE5vZGVMaXN0
KHRoaXMpOwogfQogCiBib29sIENoaWxkTm9kZUxpc3Q6Om5vZGVNYXRjaGVzKEVsZW1lbnQqIHRl
c3ROb2RlKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkocmV2aXNpb24gMTM2OTAzKQorKysg
U291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NjAsMTMgKzU2
MCw3IEBAIHZvaWQgTm9kZTo6c2V0Tm9kZVZhbHVlKGNvbnN0IFN0cmluZyYgLyoKIAogUGFzc1Jl
ZlB0cjxOb2RlTGlzdD4gTm9kZTo6Y2hpbGROb2RlcygpCiB7Ci0gICAgTm9kZVJhcmVEYXRhKiBk
YXRhID0gZW5zdXJlUmFyZURhdGEoKTsKLSAgICBpZiAoZGF0YS0+Y2hpbGROb2RlTGlzdCgpKQot
ICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxOb2RlTGlzdD4oZGF0YS0+Y2hpbGROb2RlTGlzdCgp
KTsKLQotICAgIFJlZlB0cjxDaGlsZE5vZGVMaXN0PiBsaXN0ID0gQ2hpbGROb2RlTGlzdDo6Y3Jl
YXRlKHRoaXMpOwotICAgIGRhdGEtPnNldENoaWxkTm9kZUxpc3QobGlzdC5nZXQoKSk7Ci0gICAg
cmV0dXJuIGxpc3QucmVsZWFzZSgpOworICAgIHJldHVybiBlbnN1cmVSYXJlRGF0YSgpLT5lbnN1
cmVOb2RlTGlzdHMoKS0+ZW5zdXJlQ2hpbGROb2RlTGlzdCh0aGlzKTsKIH0KIAogTm9kZSAqTm9k
ZTo6bGFzdERlc2NlbmRhbnQoKSBjb25zdApAQCAtMTAxNyw4ICsxMDExLDEwIEBAIHZvaWQgRG9j
dW1lbnQ6OmludmFsaWRhdGVOb2RlTGlzdENhY2hlcygKIAogdm9pZCBOb2RlOjppbnZhbGlkYXRl
Tm9kZUxpc3RDYWNoZXNJbkFuY2VzdG9ycyhjb25zdCBRdWFsaWZpZWROYW1lKiBhdHRyTmFtZSwg
RWxlbWVudCogYXR0cmlidXRlT3duZXJFbGVtZW50KQogewotICAgIGlmIChoYXNSYXJlRGF0YSgp
ICYmICghYXR0ck5hbWUgfHwgaXNBdHRyaWJ1dGVOb2RlKCkpKQotICAgICAgICByYXJlRGF0YSgp
LT5jbGVhckNoaWxkTm9kZUxpc3RDYWNoZSgpOworICAgIGlmIChoYXNSYXJlRGF0YSgpICYmICgh
YXR0ck5hbWUgfHwgaXNBdHRyaWJ1dGVOb2RlKCkpKSB7CisgICAgICAgIGlmIChOb2RlTGlzdHNO
b2RlRGF0YSogbGlzdHMgPSByYXJlRGF0YSgpLT5ub2RlTGlzdHMoKSkKKyAgICAgICAgICAgIGxp
c3RzLT5jbGVhckNoaWxkTm9kZUxpc3RDYWNoZSgpOworICAgIH0KIAogICAgIC8vIE1vZGlmaWNh
dGlvbnMgdG8gYXR0cmlidXRlcyB0aGF0IGFyZSBub3QgYXNzb2NpYXRlZCB3aXRoIGFuIEVsZW1l
bnQgY2FuJ3QgaW52YWxpZGF0ZSBOb2RlTGlzdCBjYWNoZXMuCiAgICAgaWYgKGF0dHJOYW1lICYm
ICFhdHRyaWJ1dGVPd25lckVsZW1lbnQpCkBAIC0xMDQzLDEyICsxMDM5LDYgQEAgTm9kZUxpc3Rz
Tm9kZURhdGEqIE5vZGU6Om5vZGVMaXN0cygpCiAgICAgcmV0dXJuIGhhc1JhcmVEYXRhKCkgPyBy
YXJlRGF0YSgpLT5ub2RlTGlzdHMoKSA6IDA7CiB9CiAKLXZvaWQgTm9kZTo6cmVtb3ZlQ2FjaGVk
Q2hpbGROb2RlTGlzdCgpCi17Ci0gICAgQVNTRVJUKHJhcmVEYXRhKCkpOwotICAgIHJhcmVEYXRh
KCktPnNldENoaWxkTm9kZUxpc3QoMCk7Ci19Ci0KIE5vZGUqIE5vZGU6OnRyYXZlcnNlTmV4dEFu
Y2VzdG9yU2libGluZygpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFuZXh0U2libGluZygpKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZG9tL05vZGUuaAkocmV2aXNpb24gMTM2OTAzKQorKysgU291cmNlL1dlYkNvcmUvZG9tL05v
ZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjAxLDcgKzYwMSw2IEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgaW52YWxpZGF0ZU5vZGVMaXN0Q2FjaGVzSW5BbmNlc3RvcnMoY29uc3QgUXVhbGlmaWVkTmFt
ZSogYXR0ck5hbWUgPSAwLCBFbGVtZW50KiBhdHRyaWJ1dGVPd25lckVsZW1lbnQgPSAwKTsKICAg
ICBOb2RlTGlzdHNOb2RlRGF0YSogbm9kZUxpc3RzKCk7Ci0gICAgdm9pZCByZW1vdmVDYWNoZWRD
aGlsZE5vZGVMaXN0KCk7CiAKICAgICBQYXNzUmVmUHRyPE5vZGVMaXN0PiBnZXRFbGVtZW50c0J5
VGFnTmFtZShjb25zdCBBdG9taWNTdHJpbmcmKTsKICAgICBQYXNzUmVmUHRyPE5vZGVMaXN0PiBn
ZXRFbGVtZW50c0J5VGFnTmFtZU5TKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBj
b25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20v
Tm9kZVJhcmVEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJh
cmVEYXRhLmNwcAkocmV2aXNpb24gMTM2OTAzKQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGVS
YXJlRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDkgKzM4LDI0IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAorc3RydWN0IFNhbWVTaXplQXNOb2RlUmFyZURhdGEgeworICAgIHZvaWQq
IG1fcG9pbnRlcls0XTsKKyAgICB1bnNpZ25lZCBtX2luZGljZXNBbmRCaXRmaWVsZHNbMl07CisK
KyNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQorICAgIHZvaWQqIG1fbXV0YXRpb25PYnNl
cnZlcjsKKyNlbmRpZgorCisjaWYgRU5BQkxFKE1JQ1JPREFUQSkKKyAgICB2b2lkKiBtX21pY3Jv
RGF0YTsKKyNlbmRpZgorfTsKK0NPTVBJTEVfQVNTRVJUKHNpemVvZihOb2RlUmFyZURhdGEpID09
IHNpemVvZihTYW1lU2l6ZUFzTm9kZVJhcmVEYXRhKSwgTm9kZVJhcmVEYXRhU2hvdWxkU3RheVNt
YWxsKTsKKwogdm9pZCBOb2RlTGlzdHNOb2RlRGF0YTo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5
T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29uc3QKIHsKICAgICBNZW1vcnlDbGFzc0lu
Zm8gaW5mbyhtZW1vcnlPYmplY3RJbmZvLCB0aGlzLCBXZWJDb3JlTWVtb3J5VHlwZXM6OkRPTSk7
CisgICAgaW5mby5hZGRNZW1iZXIobV9jaGlsZE5vZGVMaXN0KTsKICAgICBpbmZvLmFkZE1lbWJl
cihtX2F0b21pY05hbWVDYWNoZXMpOwogICAgIGluZm8uYWRkTWVtYmVyKG1fbmFtZUNhY2hlcyk7
CiAgICAgaW5mby5hZGRNZW1iZXIobV90YWdOb2RlTGlzdENhY2hlTlMpOwpAQCAtNTEsMTcgKzY2
LDEzIEBAIHZvaWQgTm9kZVJhcmVEYXRhOjpyZXBvcnRNZW1vcnlVc2FnZShNZW0KICAgICBNZW1v
cnlDbGFzc0luZm8gaW5mbyhtZW1vcnlPYmplY3RJbmZvLCB0aGlzLCBXZWJDb3JlTWVtb3J5VHlw
ZXM6OkRPTSk7CiAgICAgaW5mby5hZGRNZW1iZXIodHJlZVNjb3BlKCkpOwogICAgIGluZm8uYWRk
TWVtYmVyKG1fbm9kZUxpc3RzKTsKLSAgICBpbmZvLmFkZE1lbWJlcihtX2NoaWxkTm9kZUxpc3Qp
OwogCiAjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKLSAgICBpbmZvLmFkZE1lbWJlciht
X211dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSk7Ci0gICAgaW5mby5hZGRNZW1iZXIobV90cmFuc2ll
bnRNdXRhdGlvbk9ic2VydmVyUmVnaXN0cnkpOworICAgIGluZm8uYWRkTWVtYmVyKG1fbXV0YXRp
b25PYnNlcnZlckRhdGEpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoTUlDUk9EQVRBKQotICAgIGlu
Zm8uYWRkTWVtYmVyKG1faXRlbVByb3ApOwotICAgIGluZm8uYWRkTWVtYmVyKG1faXRlbVJlZik7
Ci0gICAgaW5mby5hZGRNZW1iZXIobV9pdGVtVHlwZSk7CisgICAgaW5mby5hZGRNZW1iZXIobV9t
aWNyb0RhdGFUb2tlbkxpc3RzKTsKICNlbmRpZgogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9k
b20vTm9kZVJhcmVEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGVS
YXJlRGF0YS5oCShyZXZpc2lvbiAxMzY5MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJh
cmVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDI3IEBAIGNsYXNzIFRyZWVTY29w
ZTsKIGNsYXNzIE5vZGVMaXN0c05vZGVEYXRhIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShO
b2RlTGlzdHNOb2RlRGF0YSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgorICAg
IHZvaWQgY2xlYXJDaGlsZE5vZGVMaXN0Q2FjaGUoKQorICAgIHsKKyAgICAgICAgaWYgKG1fY2hp
bGROb2RlTGlzdCkKKyAgICAgICAgICAgIG1fY2hpbGROb2RlTGlzdC0+aW52YWxpZGF0ZUNhY2hl
KCk7CisgICAgfQorCisgICAgUGFzc1JlZlB0cjxDaGlsZE5vZGVMaXN0PiBlbnN1cmVDaGlsZE5v
ZGVMaXN0KE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBpZiAobV9jaGlsZE5vZGVMaXN0KQor
ICAgICAgICAgICAgcmV0dXJuIG1fY2hpbGROb2RlTGlzdDsKKyAgICAgICAgUmVmUHRyPENoaWxk
Tm9kZUxpc3Q+IGxpc3QgPSBDaGlsZE5vZGVMaXN0OjpjcmVhdGUobm9kZSk7CisgICAgICAgIG1f
Y2hpbGROb2RlTGlzdCA9IGxpc3QuZ2V0KCk7CisgICAgICAgIHJldHVybiBsaXN0LnJlbGVhc2Uo
KTsKKyAgICB9CisKKyAgICB2b2lkIHJlbW92ZUNoaWxkTm9kZUxpc3QoQ2hpbGROb2RlTGlzdCog
bGlzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVF9VTlVTRUQobGlzdCwgbV9jaGlsZE5vZGVMaXN0
ID0gbGlzdCk7CisgICAgICAgIG1fY2hpbGROb2RlTGlzdCA9IDA7CisgICAgfQorCiAgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIFN0cmluZ1R5cGU+CiAgICAgc3RydWN0IE5vZGVMaXN0Q2FjaGVNYXBF
bnRyeUhhc2ggewogICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBzdGQ6OnBhaXI8
dW5zaWduZWQgY2hhciwgU3RyaW5nVHlwZT4mIGVudHJ5KQpAQCAtNzUsNiArOTYsNyBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBsaXN0LnJlbGVhc2UoKTsKICAgICB9CiAKKyAgICAvLyBGSVhN
RTogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgcmVuYW1lZCBzaW5jZSBpdCBkb2Vzbid0IGhhdmUg
YW4gYXRvbWljIG5hbWUuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICBQYXNzUmVmUHRy
PFQ+IGFkZENhY2hlV2l0aEF0b21pY05hbWUoTm9kZSogbm9kZSwgQ29sbGVjdGlvblR5cGUgY29s
bGVjdGlvblR5cGUpCiAgICAgewpAQCAtMTc5LDcgKzIwMSw5IEBAIHB1YmxpYzoKICAgICB2b2lk
IHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qKSBjb25zdDsKIAogcHJpdmF0ZToK
LSAgICBOb2RlTGlzdHNOb2RlRGF0YSgpIHsgfQorICAgIE5vZGVMaXN0c05vZGVEYXRhKCkKKyAg
ICAgICAgOiBtX2NoaWxkTm9kZUxpc3QoMCkKKyAgICB7IH0KIAogICAgIHN0ZDo6cGFpcjx1bnNp
Z25lZCBjaGFyLCBBdG9taWNTdHJpbmc+IG5hbWVkTm9kZUxpc3RLZXkoQ29sbGVjdGlvblR5cGUg
dHlwZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKQogICAgIHsKQEAgLTE5MSw2ICsyMTUsOSBA
QCBwcml2YXRlOgogICAgICAgICByZXR1cm4gc3RkOjpwYWlyPHVuc2lnbmVkIGNoYXIsIFN0cmlu
Zz4odHlwZSwgbmFtZSk7CiAgICAgfQogCisgICAgLy8gRklYTUU6IG1fY2hpbGROb2RlTGlzdCBz
aG91bGQgYmUgbWVyZ2VkIGludG8gbV9hdG9taWNOYW1lQ2FjaGVzIG9yIGF0IGxlYXN0IGJlIHNo
YXJlZCB3aXRoIEhUTUxDb2xsZWN0aW9uIHJldHVybmVkIGJ5IEVsZW1lbnQ6OmNoaWxkcmVuCisg
ICAgLy8gYnV0IGl0J3MgdHJpY2t5IGJlY2F1c2UgaW52YWxpZGF0ZUNhY2hlcyBzaG91bGRuJ3Qg
aW52YWxpZGF0ZSB0aGlzIGNhY2hlIGFuZCBhZG9wdFRyZWVTY29wZSBzaG91bGRuJ3QgY2FsbCBy
ZWdpc3Rlck5vZGVMaXN0IG9yIHVucmVnaXN0ZXJOb2RlTGlzdC4KKyAgICBDaGlsZE5vZGVMaXN0
KiBtX2NoaWxkTm9kZUxpc3Q7CiAgICAgTm9kZUxpc3RBdG9taWNOYW1lQ2FjaGVNYXAgbV9hdG9t
aWNOYW1lQ2FjaGVzOwogICAgIE5vZGVMaXN0TmFtZUNhY2hlTWFwIG1fbmFtZUNhY2hlczsKICAg
ICBUYWdOb2RlTGlzdENhY2hlTlMgbV90YWdOb2RlTGlzdENhY2hlTlM7CkBAIC0xOTgsMTAgKzIy
NSwyNSBAQCBwcml2YXRlOgogCiBjbGFzcyBOb2RlUmFyZURhdGEgOiBwdWJsaWMgTm9kZVJhcmVE
YXRhQmFzZSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTm9kZVJhcmVEYXRhKTsgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CisKKyAgICBzdHJ1Y3QgTm9kZU11dGF0aW9uT2JzZXJ2ZXJEYXRh
IHsKKyAgICAgICAgVmVjdG9yPE93blB0cjxNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uPiA+
IG1fcmVnaXN0cnk7CisgICAgICAgIEhhc2hTZXQ8TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlv
bio+IG1fdHJhbnNpZW50UmVnaXN0cnk7CisKKyAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8Tm9k
ZU11dGF0aW9uT2JzZXJ2ZXJEYXRhPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFB0cihuZXcgTm9k
ZU11dGF0aW9uT2JzZXJ2ZXJEYXRhKTsgfQorICAgIH07CisKKyAgICBzdHJ1Y3QgTm9kZU1pY3Jv
RGF0YVRva2VuTGlzdHMgeworICAgICAgICBSZWZQdHI8RE9NU2V0dGFibGVUb2tlbkxpc3Q+IG1f
aXRlbVByb3A7CisgICAgICAgIFJlZlB0cjxET01TZXR0YWJsZVRva2VuTGlzdD4gbV9pdGVtUmVm
OworICAgICAgICBSZWZQdHI8RE9NU2V0dGFibGVUb2tlbkxpc3Q+IG1faXRlbVR5cGU7CisKKyAg
ICAgICAgc3RhdGljIFBhc3NPd25QdHI8Tm9kZU1pY3JvRGF0YVRva2VuTGlzdHM+IGNyZWF0ZSgp
IHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBOb2RlTWljcm9EYXRhVG9rZW5MaXN0cyk7IH0KKyAgICB9
OworCiBwdWJsaWM6ICAgIAogICAgIE5vZGVSYXJlRGF0YShEb2N1bWVudCogZG9jdW1lbnQpCiAg
ICAgICAgIDogTm9kZVJhcmVEYXRhQmFzZShkb2N1bWVudCkKLSAgICAgICAgLCBtX2NoaWxkTm9k
ZUxpc3QoMCkKICAgICAgICAgLCBtX3RhYkluZGV4KDApCiAgICAgICAgICwgbV9jaGlsZEluZGV4
KDApCiAgICAgICAgICwgbV90YWJJbmRleFdhc1NldEV4cGxpY2l0bHkoZmFsc2UpCkBAIC0yMzEs
MjIgKzI3MywxMyBAQCBwdWJsaWM6ICAgIAogICAgIH0KIAogICAgIHZvaWQgY2xlYXJOb2RlTGlz
dHMoKSB7IG1fbm9kZUxpc3RzLmNsZWFyKCk7IH0KLSAgICB2b2lkIHNldE5vZGVMaXN0cyhQYXNz
T3duUHRyPE5vZGVMaXN0c05vZGVEYXRhPiBsaXN0cykgeyBtX25vZGVMaXN0cyA9IGxpc3RzOyB9
CiAgICAgTm9kZUxpc3RzTm9kZURhdGEqIG5vZGVMaXN0cygpIGNvbnN0IHsgcmV0dXJuIG1fbm9k
ZUxpc3RzLmdldCgpOyB9CiAgICAgTm9kZUxpc3RzTm9kZURhdGEqIGVuc3VyZU5vZGVMaXN0cygp
CiAgICAgewogICAgICAgICBpZiAoIW1fbm9kZUxpc3RzKQotICAgICAgICAgICAgc2V0Tm9kZUxp
c3RzKE5vZGVMaXN0c05vZGVEYXRhOjpjcmVhdGUoKSk7CisgICAgICAgICAgICBtX25vZGVMaXN0
cyA9IE5vZGVMaXN0c05vZGVEYXRhOjpjcmVhdGUoKTsKICAgICAgICAgcmV0dXJuIG1fbm9kZUxp
c3RzLmdldCgpOwogICAgIH0KLSAgICB2b2lkIGNsZWFyQ2hpbGROb2RlTGlzdENhY2hlKCkKLSAg
ICB7Ci0gICAgICAgIGlmIChtX2NoaWxkTm9kZUxpc3QpCi0gICAgICAgICAgICBtX2NoaWxkTm9k
ZUxpc3QtPmludmFsaWRhdGVDYWNoZSgpOwotICAgIH0KLQotICAgIENoaWxkTm9kZUxpc3QqIGNo
aWxkTm9kZUxpc3QoKSBjb25zdCB7IHJldHVybiBtX2NoaWxkTm9kZUxpc3Q7IH0KLSAgICB2b2lk
IHNldENoaWxkTm9kZUxpc3QoQ2hpbGROb2RlTGlzdCogbGlzdCkgeyBtX2NoaWxkTm9kZUxpc3Qg
PSBsaXN0OyB9CiAKICAgICBzaG9ydCB0YWJJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFiSW5k
ZXg7IH0KICAgICB2b2lkIHNldFRhYkluZGV4RXhwbGljaXRseShzaG9ydCBpbmRleCkgeyBtX3Rh
YkluZGV4ID0gaW5kZXg7IG1fdGFiSW5kZXhXYXNTZXRFeHBsaWNpdGx5ID0gdHJ1ZTsgfQpAQCAt
MjU0LDcwICsyODcsNzcgQEAgcHVibGljOiAgICAKICAgICB2b2lkIGNsZWFyVGFiSW5kZXhFeHBs
aWNpdGx5KCkgeyBtX3RhYkluZGV4ID0gMDsgbV90YWJJbmRleFdhc1NldEV4cGxpY2l0bHkgPSBm
YWxzZTsgfQogCiAjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKLSAgICBWZWN0b3I8T3du
UHRyPE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24+ID4qIG11dGF0aW9uT2JzZXJ2ZXJSZWdp
c3RyeSgpIHsgcmV0dXJuIG1fbXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5LmdldCgpOyB9CisgICAg
VmVjdG9yPE93blB0cjxNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uPiA+KiBtdXRhdGlvbk9i
c2VydmVyUmVnaXN0cnkoKSB7IHJldHVybiBtX211dGF0aW9uT2JzZXJ2ZXJEYXRhID8gJm1fbXV0
YXRpb25PYnNlcnZlckRhdGEtPm1fcmVnaXN0cnkgOiAwOyB9CiAgICAgVmVjdG9yPE93blB0cjxN
dXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0aW9uPiA+KiBlbnN1cmVNdXRhdGlvbk9ic2VydmVyUmVn
aXN0cnkoKQogICAgIHsKLSAgICAgICAgaWYgKCFtX211dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSkK
LSAgICAgICAgICAgIG1fbXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5ID0gYWRvcHRQdHIobmV3IFZl
Y3RvcjxPd25QdHI8TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbj4gPik7Ci0gICAgICAgIHJl
dHVybiBtX211dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeS5nZXQoKTsKKyAgICAgICAgaWYgKCFtX211
dGF0aW9uT2JzZXJ2ZXJEYXRhKQorICAgICAgICAgICAgbV9tdXRhdGlvbk9ic2VydmVyRGF0YSA9
IE5vZGVNdXRhdGlvbk9ic2VydmVyRGF0YTo6Y3JlYXRlKCk7CisgICAgICAgIHJldHVybiAmbV9t
dXRhdGlvbk9ic2VydmVyRGF0YS0+bV9yZWdpc3RyeTsKICAgICB9CiAKLSAgICBIYXNoU2V0PE11
dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24qPiogdHJhbnNpZW50TXV0YXRpb25PYnNlcnZlclJl
Z2lzdHJ5KCkgeyByZXR1cm4gbV90cmFuc2llbnRNdXRhdGlvbk9ic2VydmVyUmVnaXN0cnkuZ2V0
KCk7IH0KKyAgICBIYXNoU2V0PE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyYXRpb24qPiogdHJhbnNp
ZW50TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5KCkgeyByZXR1cm4gbV9tdXRhdGlvbk9ic2VydmVy
RGF0YSA/ICZtX211dGF0aW9uT2JzZXJ2ZXJEYXRhLT5tX3RyYW5zaWVudFJlZ2lzdHJ5IDogMDsg
fQogICAgIEhhc2hTZXQ8TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbio+KiBlbnN1cmVUcmFu
c2llbnRNdXRhdGlvbk9ic2VydmVyUmVnaXN0cnkoKQogICAgIHsKLSAgICAgICAgaWYgKCFtX3Ry
YW5zaWVudE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSkKLSAgICAgICAgICAgIG1fdHJhbnNpZW50
TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJ5ID0gYWRvcHRQdHIobmV3IEhhc2hTZXQ8TXV0YXRpb25P
YnNlcnZlclJlZ2lzdHJhdGlvbio+KTsKLSAgICAgICAgcmV0dXJuIG1fdHJhbnNpZW50TXV0YXRp
b25PYnNlcnZlclJlZ2lzdHJ5LmdldCgpOworICAgICAgICBpZiAoIW1fbXV0YXRpb25PYnNlcnZl
ckRhdGEpCisgICAgICAgICAgICBtX211dGF0aW9uT2JzZXJ2ZXJEYXRhID0gTm9kZU11dGF0aW9u
T2JzZXJ2ZXJEYXRhOjpjcmVhdGUoKTsKKyAgICAgICAgcmV0dXJuICZtX211dGF0aW9uT2JzZXJ2
ZXJEYXRhLT5tX3RyYW5zaWVudFJlZ2lzdHJ5OwogICAgIH0KICNlbmRpZgogCiAjaWYgRU5BQkxF
KE1JQ1JPREFUQSkKKyAgICBOb2RlTWljcm9EYXRhVG9rZW5MaXN0cyogZW5zdXJlTWljcm9EYXRh
VG9rZW5MaXN0cygpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIW1fbWljcm9EYXRhVG9rZW5M
aXN0cykKKyAgICAgICAgICAgIG1fbWljcm9EYXRhVG9rZW5MaXN0cyA9IE5vZGVNaWNyb0RhdGFU
b2tlbkxpc3RzOjpjcmVhdGUoKTsKKyAgICAgICAgcmV0dXJuIG1fbWljcm9EYXRhVG9rZW5MaXN0
cy5nZXQoKTsKKyAgICB9CisKICAgICBET01TZXR0YWJsZVRva2VuTGlzdCogaXRlbVByb3AoKSBj
b25zdAogICAgIHsKLSAgICAgICAgaWYgKCFtX2l0ZW1Qcm9wKQotICAgICAgICAgICAgbV9pdGVt
UHJvcCA9IERPTVNldHRhYmxlVG9rZW5MaXN0OjpjcmVhdGUoKTsKKyAgICAgICAgaWYgKCFlbnN1
cmVNaWNyb0RhdGFUb2tlbkxpc3RzKCktPm1faXRlbVByb3ApCisgICAgICAgICAgICBtX21pY3Jv
RGF0YVRva2VuTGlzdHMtPm1faXRlbVByb3AgPSBET01TZXR0YWJsZVRva2VuTGlzdDo6Y3JlYXRl
KCk7CiAKLSAgICAgICAgcmV0dXJuIG1faXRlbVByb3AuZ2V0KCk7CisgICAgICAgIHJldHVybiBt
X21pY3JvRGF0YVRva2VuTGlzdHMtPm1faXRlbVByb3AuZ2V0KCk7CiAgICAgfQogCiAgICAgdm9p
ZCBzZXRJdGVtUHJvcChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgIHsKLSAgICAgICAgaWYgKCFt
X2l0ZW1Qcm9wKQotICAgICAgICAgICAgbV9pdGVtUHJvcCA9IERPTVNldHRhYmxlVG9rZW5MaXN0
OjpjcmVhdGUoKTsKKyAgICAgICAgaWYgKCFlbnN1cmVNaWNyb0RhdGFUb2tlbkxpc3RzKCktPm1f
aXRlbVByb3ApCisgICAgICAgICAgICBtX21pY3JvRGF0YVRva2VuTGlzdHMtPm1faXRlbVByb3Ag
PSBET01TZXR0YWJsZVRva2VuTGlzdDo6Y3JlYXRlKCk7CiAKLSAgICAgICAgbV9pdGVtUHJvcC0+
c2V0VmFsdWUodmFsdWUpOworICAgICAgICBtX21pY3JvRGF0YVRva2VuTGlzdHMtPm1faXRlbVBy
b3AtPnNldFZhbHVlKHZhbHVlKTsKICAgICB9CiAKICAgICBET01TZXR0YWJsZVRva2VuTGlzdCog
aXRlbVJlZigpIGNvbnN0CiAgICAgewotICAgICAgICBpZiAoIW1faXRlbVJlZikKLSAgICAgICAg
ICAgIG1faXRlbVJlZiA9IERPTVNldHRhYmxlVG9rZW5MaXN0OjpjcmVhdGUoKTsKKyAgICAgICAg
aWYgKCFlbnN1cmVNaWNyb0RhdGFUb2tlbkxpc3RzKCktPm1faXRlbVJlZikKKyAgICAgICAgICAg
IG1fbWljcm9EYXRhVG9rZW5MaXN0cy0+bV9pdGVtUmVmID0gRE9NU2V0dGFibGVUb2tlbkxpc3Q6
OmNyZWF0ZSgpOwogCi0gICAgICAgIHJldHVybiBtX2l0ZW1SZWYuZ2V0KCk7CisgICAgICAgIHJl
dHVybiBtX21pY3JvRGF0YVRva2VuTGlzdHMtPm1faXRlbVJlZi5nZXQoKTsKICAgICB9CiAKICAg
ICB2b2lkIHNldEl0ZW1SZWYoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGlm
ICghbV9pdGVtUmVmKQotICAgICAgICAgICAgbV9pdGVtUmVmID0gRE9NU2V0dGFibGVUb2tlbkxp
c3Q6OmNyZWF0ZSgpOworICAgICAgICBpZiAoIWVuc3VyZU1pY3JvRGF0YVRva2VuTGlzdHMoKS0+
bV9pdGVtUmVmKQorICAgICAgICAgICAgbV9taWNyb0RhdGFUb2tlbkxpc3RzLT5tX2l0ZW1SZWYg
PSBET01TZXR0YWJsZVRva2VuTGlzdDo6Y3JlYXRlKCk7CiAKLSAgICAgICAgbV9pdGVtUmVmLT5z
ZXRWYWx1ZSh2YWx1ZSk7CisgICAgICAgIG1fbWljcm9EYXRhVG9rZW5MaXN0cy0+bV9pdGVtUmVm
LT5zZXRWYWx1ZSh2YWx1ZSk7CiAgICAgfQogCiAgICAgRE9NU2V0dGFibGVUb2tlbkxpc3QqIGl0
ZW1UeXBlKCkgY29uc3QKICAgICB7Ci0gICAgICAgIGlmICghbV9pdGVtVHlwZSkKLSAgICAgICAg
ICAgIG1faXRlbVR5cGUgPSBET01TZXR0YWJsZVRva2VuTGlzdDo6Y3JlYXRlKCk7CisgICAgICAg
IGlmICghZW5zdXJlTWljcm9EYXRhVG9rZW5MaXN0cygpLT5tX2l0ZW1UeXBlKQorICAgICAgICAg
ICAgbV9taWNyb0RhdGFUb2tlbkxpc3RzLT5tX2l0ZW1UeXBlID0gRE9NU2V0dGFibGVUb2tlbkxp
c3Q6OmNyZWF0ZSgpOwogCi0gICAgICAgIHJldHVybiBtX2l0ZW1UeXBlLmdldCgpOworICAgICAg
ICByZXR1cm4gbV9taWNyb0RhdGFUb2tlbkxpc3RzLT5tX2l0ZW1UeXBlLmdldCgpOwogICAgIH0K
IAogICAgIHZvaWQgc2V0SXRlbVR5cGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICB7Ci0gICAg
ICAgIGlmICghbV9pdGVtVHlwZSkKLSAgICAgICAgICAgIG1faXRlbVR5cGUgPSBET01TZXR0YWJs
ZVRva2VuTGlzdDo6Y3JlYXRlKCk7CisgICAgICAgIGlmICghZW5zdXJlTWljcm9EYXRhVG9rZW5M
aXN0cygpLT5tX2l0ZW1UeXBlKQorICAgICAgICAgICAgbV9taWNyb0RhdGFUb2tlbkxpc3RzLT5t
X2l0ZW1UeXBlID0gRE9NU2V0dGFibGVUb2tlbkxpc3Q6OmNyZWF0ZSgpOwogCi0gICAgICAgIG1f
aXRlbVR5cGUtPnNldFZhbHVlKHZhbHVlKTsKKyAgICAgICAgbV9taWNyb0RhdGFUb2tlbkxpc3Rz
LT5tX2l0ZW1UeXBlLT5zZXRWYWx1ZSh2YWx1ZSk7CiAgICAgfQogI2VuZGlmCiAKQEAgLTMyNyw4
ICszNjcsNiBAQCBwdWJsaWM6ICAgIAogICAgIHZpcnR1YWwgdm9pZCByZXBvcnRNZW1vcnlVc2Fn
ZShNZW1vcnlPYmplY3RJbmZvKikgY29uc3Q7CiAKIHByb3RlY3RlZDoKLSAgICBPd25QdHI8Tm9k
ZUxpc3RzTm9kZURhdGE+IG1fbm9kZUxpc3RzOwotICAgIENoaWxkTm9kZUxpc3QqIG1fY2hpbGRO
b2RlTGlzdDsKICAgICBzaG9ydCBtX3RhYkluZGV4OwogICAgIHVuc2lnbmVkIHNob3J0IG1fY2hp
bGRJbmRleDsKICAgICBib29sIG1fdGFiSW5kZXhXYXNTZXRFeHBsaWNpdGx5IDogMTsKQEAgLTM1
NCwxNSArMzkyLDE1IEBAIHByb3RlY3RlZDoKICAgICBib29sIG1fY2hpbGRyZW5BZmZlY3RlZEJ5
Rm9yd2FyZFBvc2l0aW9uYWxSdWxlcyA6IDE7CiAgICAgYm9vbCBtX2NoaWxkcmVuQWZmZWN0ZWRC
eUJhY2t3YXJkUG9zaXRpb25hbFJ1bGVzIDogMTsKIAorcHJpdmF0ZToKKyAgICBPd25QdHI8Tm9k
ZUxpc3RzTm9kZURhdGE+IG1fbm9kZUxpc3RzOworCiAjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VS
VkVSUykKLSAgICBPd25QdHI8VmVjdG9yPE93blB0cjxNdXRhdGlvbk9ic2VydmVyUmVnaXN0cmF0
aW9uPiA+ID4gbV9tdXRhdGlvbk9ic2VydmVyUmVnaXN0cnk7Ci0gICAgT3duUHRyPEhhc2hTZXQ8
TXV0YXRpb25PYnNlcnZlclJlZ2lzdHJhdGlvbio+ID4gbV90cmFuc2llbnRNdXRhdGlvbk9ic2Vy
dmVyUmVnaXN0cnk7CisgICAgT3duUHRyPE5vZGVNdXRhdGlvbk9ic2VydmVyRGF0YT4gbV9tdXRh
dGlvbk9ic2VydmVyRGF0YTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKE1JQ1JPREFUQSkKLSAgICBt
dXRhYmxlIFJlZlB0cjxET01TZXR0YWJsZVRva2VuTGlzdD4gbV9pdGVtUHJvcDsKLSAgICBtdXRh
YmxlIFJlZlB0cjxET01TZXR0YWJsZVRva2VuTGlzdD4gbV9pdGVtUmVmOwotICAgIG11dGFibGUg
UmVmUHRyPERPTVNldHRhYmxlVG9rZW5MaXN0PiBtX2l0ZW1UeXBlOworICAgIG11dGFibGUgT3du
UHRyPE5vZGVNaWNyb0RhdGFUb2tlbkxpc3RzPiBtX21pY3JvRGF0YVRva2VuTGlzdHM7CiAjZW5k
aWYKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFByb3BlcnRpZXNDb2xsZWN0
aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQcm9wZXJ0aWVz
Q29sbGVjdGlvbi5jcHAJKHJldmlzaW9uIDEzNjkwMykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFByb3BlcnRpZXNDb2xsZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM1LDcgKzEz
NSw3IEBAIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gSFRNTFByb3BlcnRpZXMKICAgICByZXR1
cm4gbV9wcm9wZXJ0eU5hbWVzOwogfQogCi1QYXNzUmVmUHRyPFByb3BlcnR5Tm9kZUxpc3Q+IEhU
TUxQcm9wZXJ0aWVzQ29sbGVjdGlvbjo6bmFtZWRJdGVtKGNvbnN0IFN0cmluZyYgbmFtZSkgY29u
c3QKK1Bhc3NSZWZQdHI8UHJvcGVydHlOb2RlTGlzdD4gSFRNTFByb3BlcnRpZXNDb2xsZWN0aW9u
Ojpwcm9wZXJ0eU5vZGVMaXN0KGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKIHsKICAgICByZXR1
cm4gb3duZXJOb2RlKCktPnByb3BlcnR5Tm9kZUxpc3QobmFtZSk7CiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxQcm9wZXJ0aWVzQ29sbGVjdGlvbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFByb3BlcnRpZXNDb2xsZWN0aW9uLmgJKHJldmlzaW9uIDEz
NjkwMykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFByb3BlcnRpZXNDb2xsZWN0aW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgcHVibGljOgogICAgIHZvaWQgdXBkYXRl
UmVmRWxlbWVudHMoKSBjb25zdDsKIAogICAgIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gbmFt
ZXMoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8UHJvcGVydHlOb2RlTGlzdD4gbmFt
ZWRJdGVtKGNvbnN0IFN0cmluZyYpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxQcm9wZXJ0eU5vZGVMaXN0PiBwcm9wZXJ0eU5vZGVMaXN0KGNvbnN0IFN0cmluZyYpIGNv
bnN0OwogICAgIHZpcnR1YWwgYm9vbCBoYXNOYW1lZEl0ZW0oY29uc3QgQXRvbWljU3RyaW5nJikg
Y29uc3QgT1ZFUlJJREU7CiAKICAgICB2b2lkIGludmFsaWRhdGVDYWNoZSgpIGNvbnN0CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQcm9wZXJ0aWVzQ29sbGVjdGlvbi5pZGwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUHJvcGVydGllc0NvbGxlY3Rpb24uaWRs
CShyZXZpc2lvbiAxMzY5MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQcm9wZXJ0aWVz
Q29sbGVjdGlvbi5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTM4LDUgKzM4LDUgQEAKICAgICBOb2Rl
IGl0ZW0oaW4gdW5zaWduZWQgbG9uZyBpbmRleCk7CiAKICAgICByZWFkb25seSBhdHRyaWJ1dGUg
RE9NU3RyaW5nTGlzdCBuYW1lczsKLSAgICBQcm9wZXJ0eU5vZGVMaXN0IG5hbWVkSXRlbShpbiBE
T01TdHJpbmcgbmFtZSk7CisgICAgW0ltcGxlbWVudGVkQXM9cHJvcGVydHlOb2RlTGlzdF0gUHJv
cGVydHlOb2RlTGlzdCBuYW1lZEl0ZW0oaW4gRE9NU3RyaW5nIG5hbWUpOwogfTsK
</data>
<flag name="review"
          id="194555"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>