<?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>55440</bug_id>
          
          <creation_ts>2011-02-28 19:19:13 -0800</creation_ts>
          <short_desc>improve layout performance by reducing the traversal time of the floating objects</short_desc>
          <delta_ts>2011-03-04 16:00:47 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://ie.microsoft.com/testdrive/Performance/MazeSolver/Default.html</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Yuqiang Xian">yuqiang.xian</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>hyatt</cc>
    
    <cc>mrowe</cc>
    
    <cc>sam</cc>
    
    <cc>staikos</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>359599</commentid>
    <comment_count>0</comment_count>
    <who name="Yuqiang Xian">yuqiang.xian</who>
    <bug_when>2011-02-28 19:19:13 -0800</bug_when>
    <thetext>The WebKit layout engine performs bad on the case of MazeSolver from Microsoft (http://ie.microsoft.com/testdrive/Performance/MazeSolver/Default.html), which is caused by large overhead on traversing the floating objects list in logicalLeftOffsetForLine() and logicalRightOffsetForLine() especially when the list becomes enormous, for example in the default 30x30 maze there&apos;re &gt;3700 floating objects. When placing a new floating object the entire list (from begin to end) is traversed for multiple times, and it requires O(n^2) time when we do a re-layout to place all the floating objects.
We need to improve such performance issue either 1) by improving the efficiency of the traversal (possibly by using other data structures to hold the floating objects), or 2) by reducing the chances to do the traversal. 
There&apos;s a low hanging fruit for approach 2) which is especially applicable in logicalLeftOffsetForLine and logicalRightOffsetForLine. As the two routines either cares about FloatLeft objects or FloatRight objects only, if we know there&apos;s no corresponding type floating objects in the list we can avoid the traversal actually. One thing we could do is to record the number of FloatLeft objects and the number of FloatRight objects and add a check before doing the traversal. This can improve the 30x30 MazeSolver performance by 80~90% measured on N450 Netbook MeeGo using latest Chromium browser 11 (i.e. from 503s to 269s to resolve the 30x30 maze). 
We could also think about traversing from the last visited object instead of from the beginning of the list each time when placing a new floating object, as long as we know that the state of the existing objects in the list doesn&apos;t change since last traversal, which could ideally convert the O(n^2) to O(n) when placing all the floating objects. But this is a bit tricky and needs further investigation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>359605</commentid>
    <comment_count>1</comment_count>
      <attachid>84173</attachid>
    <who name="Yuqiang Xian">yuqiang.xian</who>
    <bug_when>2011-02-28 19:29:13 -0800</bug_when>
    <thetext>Created attachment 84173
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>359607</commentid>
    <comment_count>2</comment_count>
    <who name="Yuqiang Xian">yuqiang.xian</who>
    <bug_when>2011-02-28 19:31:18 -0800</bug_when>
    <thetext>Add CC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>359798</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2011-03-01 04:24:27 -0800</bug_when>
    <thetext>Maybe I’m missing something, but how is going from 503s to 269s a 80~90% improvement?  That seems like a 45% improvement to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>359855</commentid>
    <comment_count>4</comment_count>
    <who name="Yuqiang Xian">yuqiang.xian</who>
    <bug_when>2011-03-01 06:17:51 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Maybe I’m missing something, but how is going from 503s to 269s a 80~90% improvement?  That seems like a 45% improvement to me.

Sorry for confusing you but I think it depends on how we describe the speedup. Yes the time is reduced by 45%, but considering the speed it&apos;s a 80~90% improvement. Just like we see &quot;2X speedup&quot; more often than &quot;50% improvement&quot; when the time to complete a job is shortened from 2s to 1s.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>360085</commentid>
    <comment_count>5</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2011-03-01 11:58:10 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; Maybe I’m missing something, but how is going from 503s to 269s a 80~90% improvement?  That seems like a 45% improvement to me.
&gt; 
&gt; Sorry for confusing you but I think it depends on how we describe the speedup. Yes the time is reduced by 45%, but considering the speed it&apos;s a 80~90% improvement. Just like we see &quot;2X speedup&quot; more often than &quot;50% improvement&quot; when the time to complete a job is shortened from 2s to 1s.

The change from 269 to 503 is ~85%. The change from 503 to 269 is -45%.  It seems nonsensical to describe the speedup in terms of what regression it would take to get back to the original performance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>360373</commentid>
    <comment_count>6</comment_count>
    <who name="Yuqiang Xian">yuqiang.xian</who>
    <bug_when>2011-03-01 16:34:16 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; (In reply to comment #3)
&gt; &gt; &gt; Maybe I’m missing something, but how is going from 503s to 269s a 80~90% improvement?  That seems like a 45% improvement to me.
&gt; &gt; 
&gt; &gt; Sorry for confusing you but I think it depends on how we describe the speedup. Yes the time is reduced by 45%, but considering the speed it&apos;s a 80~90% improvement. Just like we see &quot;2X speedup&quot; more often than &quot;50% improvement&quot; when the time to complete a job is shortened from 2s to 1s.
&gt; 
&gt; The change from 269 to 503 is ~85%. The change from 503 to 269 is -45%.  It seems nonsensical to describe the speedup in terms of what regression it would take to get back to the original performance.

OK. Can we just say that the proposed patch reduces the time from 503s to 269s and not to stick to the debate of how speedup is calculated?
Back to the issue itself, can anybody help review if this is a issue that needs to be addressed, and if current quick fix reasonable to do? Also I&apos;d appreciate any discussions on how we will do in long term to address the floating objects performance issue when the list becomes enormous like the one demonstrated in this Microsoft test case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>360376</commentid>
    <comment_count>7</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2011-03-01 16:36:22 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; OK. Can we just say that the proposed patch reduces the time from 503s to 269s and not to stick to the debate of how speedup is calculated?

You’re free to say whatever you’d like so long as it is accurate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361140</commentid>
    <comment_count>8</comment_count>
      <attachid>84173</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-03-02 16:00:07 -0800</bug_when>
    <thetext>Comment on attachment 84173
the patch

This will increase the size of all RenderBlocks which would be a pretty big memory regression. One option is to only allocate this memory when there are floating objects (allocate it with  m_floatingObjects).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361530</commentid>
    <comment_count>9</comment_count>
      <attachid>84547</attachid>
    <who name="Yuqiang Xian">yuqiang.xian</who>
    <bug_when>2011-03-03 05:31:49 -0800</bug_when>
    <thetext>Created attachment 84547
updated patch addressing comment #8

Introduce the left and right floats counters only when there&apos;re floating objects in the RenderBlock, by wrapping the counters and the floating object list in one structure which is allocated on demand.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361780</commentid>
    <comment_count>10</comment_count>
      <attachid>84547</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-03-03 11:23:14 -0800</bug_when>
    <thetext>Comment on attachment 84547
updated patch addressing comment #8

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

Seems like a good approach, but needs some style fixes.

&gt; Source/WebCore/rendering/RenderBlock.h:716
&gt; -    OwnPtr&lt;FloatingObjectSet&gt; m_floatingObjects;
&gt; +    struct FloatingObjects {
&gt; +        FloatingObjects()

I don’t think the functions in this class should all be defined inside the class definition. That just makes the class harder to read. I suggest putting inline function bodies elsewhere. Since they are only used in the one .cpp file, they can be inside the .cpp file and not in the header at all.

&gt; Source/WebCore/rendering/RenderBlock.h:723
&gt; +        virtual ~FloatingObjects() {ASSERT(m_floatingObjectSet); delete m_floatingObjectSet;}

It is incorrect to mark this virtual. Makes the entire object bigger and makes calling the destructor slower for no reason.

And you won’t need this destructor if you take my advice below about m_floatingObjectSet.

Formatting without spaces is wrong for our project.

&gt; Source/WebCore/rendering/RenderBlock.h:729
&gt; +            m_leftFloatsCount = 0;

I don’t think the same class should call floating objects both “floating objects” and “floats”. We should choose one name or the other.

&gt; Source/WebCore/rendering/RenderBlock.h:741
&gt; +        void increaseFloatsCount(FloatingObject::Type type)
&gt; +        {
&gt; +            type == FloatingObject::FloatLeft ? m_leftFloatsCount++ : m_rightFloatsCount++;
&gt; +        }
&gt; +        void decreaseFloatsCount(FloatingObject::Type type)
&gt; +        {
&gt; +            type == FloatingObject::FloatLeft ? m_leftFloatsCount-- : m_rightFloatsCount--;
&gt; +            ASSERT(m_leftFloatsCount &gt;= 0 &amp;&amp; m_rightFloatsCount &gt;= 0);
&gt; +        }

I think these would read much better with if statements or switch statements. Using a ? : expression for its side effects is not a conventional readable coding style.

&gt; Source/WebCore/rendering/RenderBlock.h:743
&gt; +        bool hasLeftFloats() {return m_leftFloatsCount &gt; 0;}

WebKit style puts spaces after these.

&gt; Source/WebCore/rendering/RenderBlock.h:746
&gt; +        FloatingObjectSet* m_floatingObjectSet;

This should be a set, not a pointer to a set. If it was a pointer it should be OwnPtr.

This should probably be called just m_set. It’s already in a class named FloatingObjects.

Data members of a struct should not have the m_ prefix. We use those only for private data members in classes, not public data members like these. Maybe this should be a class. I’m not sure clients need direct access to the floating object counts.

&gt; Source/WebCore/rendering/RenderBlock.h:748
&gt; +        int m_leftFloatsCount;
&gt; +        int m_rightFloatsCount;

These should be unsigned integers, not signed. And maybe private as I mentioned above.

&gt; Source/WebCore/rendering/RenderBlock.h:751
&gt; +    FloatingObjectSet* getFloatingObjectSet() const {return m_floatingObjects ? m_floatingObjects-&gt;m_floatingObjectSet : 0;}

In the WebKit project we don’t use get in the function names of this type of function.

Further, the callers of this function all already have explicit checks to see if m_floatingObjects is 0, so you are adding a double check for null everywhere. I think you should probably dump this function and just use:

    m_floatingObjects-&gt;set()

everwherer. Or m_floatingObjects-&gt;set if you keep the set a public data member.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>362184</commentid>
    <comment_count>11</comment_count>
      <attachid>84677</attachid>
    <who name="Yuqiang Xian">yuqiang.xian</who>
    <bug_when>2011-03-03 18:30:38 -0800</bug_when>
    <thetext>Created attachment 84677
patch addressing comment #10

Thanks a lot for the comments from Darin. This new patch addresses those comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>362189</commentid>
    <comment_count>12</comment_count>
      <attachid>84677</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-03-03 18:36:40 -0800</bug_when>
    <thetext>Comment on attachment 84677
patch addressing comment #10

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

&gt; Source/WebCore/rendering/RenderBlock.h:729
&gt; +        FloatingObjectSet* set() const { return m_set.get(); }

Would be better to return a reference to the set instead of a pointer. Also no reason for this to be const.

&gt; Source/WebCore/rendering/RenderBlock.h:732
&gt; +        OwnPtr&lt;FloatingObjectSet&gt; m_set;

Why did you chose to use an OwnPtr here instead of just putting the set in? This should just be:

    FloatingObjectSet m_set;

&gt; Source/WebCore/rendering/RenderBlock.h:734
&gt; +        unsigned int m_leftObjectsCount;
&gt; +        unsigned int m_rightObjectsCount;

Should just be unsigned, not unsigned int, given WebKit coding style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>362194</commentid>
    <comment_count>13</comment_count>
    <who name="Yuqiang Xian">yuqiang.xian</who>
    <bug_when>2011-03-03 18:46:54 -0800</bug_when>
    <thetext>Thanks for the reivew.

(In reply to comment #12)
&gt; (From update of attachment 84677 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=84677&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderBlock.h:729
&gt; &gt; +        FloatingObjectSet* set() const { return m_set.get(); }
&gt; 
&gt; Would be better to return a reference to the set instead of a pointer. Also no reason for this to be const.

OK. Will modify it.

&gt; 
&gt; &gt; Source/WebCore/rendering/RenderBlock.h:732
&gt; &gt; +        OwnPtr&lt;FloatingObjectSet&gt; m_set;
&gt; 
&gt; Why did you chose to use an OwnPtr here instead of just putting the set in? This should just be:
&gt; 
&gt;     FloatingObjectSet m_set;
&gt; 

As the original code uses the FloatingObjectSet as an OwnPtr and I didn&apos;t want to change that. But yes it can be just an instance inside. Will modify it.

&gt; &gt; Source/WebCore/rendering/RenderBlock.h:734
&gt; &gt; +        unsigned int m_leftObjectsCount;
&gt; &gt; +        unsigned int m_rightObjectsCount;
&gt; 
&gt; Should just be unsigned, not unsigned int, given WebKit coding style.

Will modify it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>362206</commentid>
    <comment_count>14</comment_count>
      <attachid>84682</attachid>
    <who name="Yuqiang Xian">yuqiang.xian</who>
    <bug_when>2011-03-03 19:23:48 -0800</bug_when>
    <thetext>Created attachment 84682
patch addressing comment #12

Modify code to address comment #12 from Darin. Thanks for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>362653</commentid>
    <comment_count>15</comment_count>
      <attachid>84682</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-03-04 12:06:11 -0800</bug_when>
    <thetext>Comment on attachment 84682
patch addressing comment #12

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

Can we double check that increase/decrease is called in all the right places?

I’m going to say review+ even though I think we may want a little more refinement.

&gt; Source/WebCore/rendering/RenderBlock.cpp:6243
&gt; +inline void RenderBlock::FloatingObjects::clear()

If these are marked inline, I think they need to be in the file *before* the first call to the function. Otherwise on at least some compilers I think this won’t be inlined.

&gt; Source/WebCore/rendering/RenderBlock.cpp:6250
&gt; +inline void RenderBlock::FloatingObjects::increaseObjectsCount(FloatingObject::Type type)

Ditto.

&gt; Source/WebCore/rendering/RenderBlock.cpp:6258
&gt; +inline void RenderBlock::FloatingObjects::decreaseObjectsCount(FloatingObject::Type type)

Ditto.

&gt; Source/WebCore/rendering/RenderBlock.h:721
&gt; +        FloatingObjects()
&gt; +            : m_leftObjectsCount(0)
&gt; +            , m_rightObjectsCount(0)
&gt; +        {
&gt; +        }

Ideally I’d like to see this function body inside the cpp file too; I think the class is easier to read without the function body here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>362731</commentid>
    <comment_count>16</comment_count>
      <attachid>84682</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-03-04 15:07:30 -0800</bug_when>
    <thetext>Comment on attachment 84682
patch addressing comment #12

Clearing flags on attachment: 84682

Committed r80380: &lt;http://trac.webkit.org/changeset/80380&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>362732</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-03-04 15:07:37 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>362770</commentid>
    <comment_count>18</comment_count>
    <who name="Yuqiang Xian">yuqiang.xian</who>
    <bug_when>2011-03-04 16:00:47 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 84682 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=84682&amp;action=review
&gt; 
&gt; Can we double check that increase/decrease is called in all the right places?
&gt; 
&gt; I’m going to say review+ even though I think we may want a little more refinement.
&gt; 

Thanks for the review. Yes I&apos;ve checked the places of adding/removing the floating objects. There&apos;re 3 &quot;add&quot; and 2 &quot;remove&quot; in RenderBlock.cpp and nothing elsewhere. The corresponding increase/decrease is called in such place. 
Maybe in the future we could make that be automatically performed, for example bridging the add/remove calls through FloatingObjects. I just didn&apos;t do that this time because there&apos;re many other functions which add or remove objects in FloatingObjectSet class and if we bridge all of them the FloatingObjects class would become somewhat complex.
I&apos;ll address the refinement in another change.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>84173</attachid>
            <date>2011-02-28 19:29:13 -0800</date>
            <delta_ts>2011-03-03 05:31:49 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>WebCore-floating-objects.part0.patch</filename>
            <type>text/plain</type>
            <size>7464</size>
            <attacher name="Yuqiang Xian">yuqiang.xian</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc5OTU2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDAgQEAKKzIwMTEtMDItMjggIFl1cWlhbmcg
WGlhbiAgPHl1cWlhbmcueGlhbkBpbnRlbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgaW1wcm92ZSBsYXlvdXQgcGVyZm9ybWFuY2UgYnkgcmVk
dWNpbmcgdGhlIHRyYXZlcnNhbCB0aW1lIG9mIHRoZSBmbG9hdGluZyBvYmplY3RzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NTQ0MAorCisgICAgICAg
IFdlIG9ic2VydmVyZWQgbGFyZ2Ugb3ZlcmhlYWQgb24gdHJhdmVyc2luZyB0aGUgZmxvYXRpbmcg
b2JqZWN0cyBsaXN0IAorICAgICAgICBpbiBsb2dpY2FsTGVmdE9mZnNldEZvckxpbmUoKSBhbmQg
bG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZSgpIGVzcGVjaWFsbHkKKyAgICAgICAgd2hlbiB0aGUg
bGlzdCBiZWNvbWVzIGVub3Jtb3VzLCBmb3IgZXhhbXBsZSBpbiB0aGUgZGVmYXVsdCAzMHgzMCBt
YXplIHRlc3QKKyAgICAgICAgZnJvbSBodHRwOi8vaWUubWljcm9zb2Z0LmNvbS90ZXN0ZHJpdmUv
UGVyZm9ybWFuY2UvTWF6ZVNvbHZlci9EZWZhdWx0Lmh0bWwgCisgICAgICAgIHRoZXJlJ3JlID4z
NzAwIGZsb2F0aW5nIG9iamVjdHMuIFdoZW4gcGxhY2luZyBhIG5ldyBmbG9hdGluZyBvYmplY3Qg
dGhlIAorICAgICAgICBlbnRpcmUgbGlzdCAoZnJvbSBiZWdpbiB0byBlbmQpIGlzIHRyYXZlcnNl
ZCBmb3IgbXVsdGlwbGUgdGltZXMuCisgICAgICAgIFRoZXJlJ3MgYSBsb3cgaGFuZ2luZyBmcnVp
dCB0byByZWR1Y2UgdGhlIGNoYW5jZXMgdG8gZG8gdGhlIHRyYXZlcnNhbAorICAgICAgICB3aGlj
aCBpcyBlc3BlY2lhbGx5IGFwcGxpY2FibGUgaW4gbG9naWNhbExlZnRPZmZzZXRGb3JMaW5lIGFu
ZCBsb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lLiAKKyAgICAgICAgQXMgdGhlIHR3byByb3V0aW5l
cyBlaXRoZXIgY2FyZXMgYWJvdXQgRmxvYXRMZWZ0IG9iamVjdHMgb3IgRmxvYXRSaWdodCBvYmpl
Y3RzIG9ubHksIAorICAgICAgICBpZiB3ZSBrbm93IHRoZXJlJ3Mgbm8gY29ycmVzcG9uZGluZyB0
eXBlIGZsb2F0aW5nIG9iamVjdHMgaW4gdGhlIGxpc3QKKyAgICAgICAgd2UgY2FuIGF2b2lkIHRo
ZSB0cmF2ZXJzYWwgYWN0dWFsbHkuIE9uZSB0aGluZyB3ZSBjb3VsZCBkbyBpcyB0byByZWNvcmQK
KyAgICAgICAgdGhlIG51bWJlciBvZiBGbG9hdExlZnQgb2JqZWN0cyBhbmQgdGhlIG51bWJlciBv
ZiBGbG9hdFJpZ2h0IG9iamVjdHMgYW5kCisgICAgICAgIGFkZCBhIGNoZWNrIGJlZm9yZSBkb2lu
ZyB0aGUgdHJhdmVyc2FsLiBUaGlzIGNhbiBpbXByb3ZlIHRoZSAzMHgzMCBNYXplU29sdmVyIHBl
cmZvcm1hbmNlCisgICAgICAgIGJ5IDgwfjkwJSBtZWFzdXJlZCBvbiBONDUwIE5ldGJvb2sgTWVl
R28gdXNpbmcgbGF0ZXN0IENocm9taXVtIGJyb3dzZXIgMTEgKAorICAgICAgICBmcm9tIDUwM3Mg
dG8gMjY5cyB0byByZXNvbHZlIHRoZSAzMHgzMCBtYXplKS4KKworICAgICAgICBObyBuZXcgdGVz
dHMsIHJlbHlpbmcgb24gZXhpc3RpbmcgbGF5b3V0IHRlc3RzLgorCisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpSZW5k
ZXJCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6aW5zZXJ0RmxvYXRpbmdP
YmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnJlbW92ZUZsb2F0aW5nT2Jq
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpyZW1vdmVGbG9hdGluZ09iamVj
dHNCZWxvdyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bG9naWNhbExlZnRPZmZz
ZXRGb3JMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsb2dpY2FsUmlnaHRP
ZmZzZXRGb3JMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpjbGVhckZsb2F0
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6YWRkT3ZlcmhhbmdpbmdGbG9hdHMp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmFkZEludHJ1ZGluZ0Zsb2F0cyk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmg6CisKIDIwMTEtMDItMjggIERhdmlkIExl
dmluICA8bGV2aW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFk
bGVyLgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZp
c2lvbiA3OTk1NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTExMiw2ICsxMTIsOCBAQCBSZW5kZXJCbG9jazo6TWFyZ2luSW5m
bzo6TWFyZ2luSW5mbyhSZW5kCiBSZW5kZXJCbG9jazo6UmVuZGVyQmxvY2soTm9kZSogbm9kZSkK
ICAgICAgIDogUmVuZGVyQm94KG5vZGUpCiAgICAgICAsIG1fZmxvYXRpbmdPYmplY3RzKDApCisg
ICAgICAsIG1fbGVmdEZsb2F0c0NvdW50KDApCisgICAgICAsIG1fcmlnaHRGbG9hdHNDb3VudCgw
KQogICAgICAgLCBtX3Bvc2l0aW9uZWRPYmplY3RzKDApCiAgICAgICAsIG1fcmFyZURhdGEoMCkK
ICAgICAgICwgbV9saW5lSGVpZ2h0KC0xKQpAQCAtMzA5Niw2ICszMDk4LDEwIEBAIFJlbmRlckJs
b2NrOjpGbG9hdGluZ09iamVjdCogUmVuZGVyQmxvY2sKICAgICBuZXdPYmotPm1faXNEZXNjZW5k
YW50ID0gdHJ1ZTsKICAgICBuZXdPYmotPm1fcmVuZGVyZXIgPSBvOwogCisgICAgaWYgKG5ld09i
ai0+dHlwZSgpID09IEZsb2F0aW5nT2JqZWN0OjpGbG9hdExlZnQpCisgICAgICAgIG1fbGVmdEZs
b2F0c0NvdW50Kys7CisgICAgZWxzZSBpZiAobmV3T2JqLT50eXBlKCkgPT0gRmxvYXRpbmdPYmpl
Y3Q6OkZsb2F0UmlnaHQpCisgICAgICAgIG1fcmlnaHRGbG9hdHNDb3VudCsrOwogICAgIG1fZmxv
YXRpbmdPYmplY3RzLT5hZGQobmV3T2JqKTsKICAgICAKICAgICByZXR1cm4gbmV3T2JqOwpAQCAt
MzEyMiw2ICszMTI4LDEwIEBAIHZvaWQgUmVuZGVyQmxvY2s6OnJlbW92ZUZsb2F0aW5nT2JqZWN0
KFIKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgbWFya0xpbmVzRGlydHlJbkJs
b2NrUmFuZ2UoMCwgbG9naWNhbEJvdHRvbSk7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAoci0+dHlwZSgpID09IEZsb2F0aW5nT2JqZWN0OjpGbG9hdExlZnQpCisgICAgICAgICAgICAg
ICAgbV9sZWZ0RmxvYXRzQ291bnQtLTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHItPnR5cGUoKSA9
PSBGbG9hdGluZ09iamVjdDo6RmxvYXRSaWdodCkKKyAgICAgICAgICAgICAgICBtX3JpZ2h0Rmxv
YXRzQ291bnQtLTsKICAgICAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5yZW1vdmUoaXQpOwog
ICAgICAgICAgICAgZGVsZXRlIHI7CiAgICAgICAgIH0KQEAgLTMxMzUsNiArMzE0NSwxMCBAQCB2
b2lkIFJlbmRlckJsb2NrOjpyZW1vdmVGbG9hdGluZ09iamVjdHNCCiAgICAgCiAgICAgRmxvYXRp
bmdPYmplY3QqIGN1cnIgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+bGFzdCgpOwogICAgIHdoaWxlIChj
dXJyICE9IGxhc3RGbG9hdCAmJiAoIWN1cnItPmlzUGxhY2VkKCkgfHwgbG9naWNhbFRvcEZvckZs
b2F0KGN1cnIpID49IGxvZ2ljYWxPZmZzZXQpKSB7CisgICAgICAgIGlmIChjdXJyLT50eXBlKCkg
PT0gRmxvYXRpbmdPYmplY3Q6OkZsb2F0TGVmdCkKKyAgICAgICAgICAgIG1fbGVmdEZsb2F0c0Nv
dW50LS07CisgICAgICAgIGVsc2UgaWYgKGN1cnItPnR5cGUoKSA9PSBGbG9hdGluZ09iamVjdDo6
RmxvYXRSaWdodCkKKyAgICAgICAgICAgIG1fcmlnaHRGbG9hdHNDb3VudC0tOwogICAgICAgICBt
X2Zsb2F0aW5nT2JqZWN0cy0+cmVtb3ZlTGFzdCgpOwogICAgICAgICBkZWxldGUgY3VycjsKICAg
ICAgICAgY3VyciA9IG1fZmxvYXRpbmdPYmplY3RzLT5sYXN0KCk7CkBAIC0zMzkyLDcgKzM0MDYs
NyBAQCBIYXNoU2V0PFJlbmRlckJveCo+KiBSZW5kZXJCbG9jazo6cGVyY2VuCiBpbnQgUmVuZGVy
QmxvY2s6OmxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZShpbnQgbG9naWNhbFRvcCwgaW50IGZpeGVk
T2Zmc2V0LCBib29sIGFwcGx5VGV4dEluZGVudCwgaW50KiBoZWlnaHRSZW1haW5pbmcpIGNvbnN0
CiB7CiAgICAgaW50IGxlZnQgPSBmaXhlZE9mZnNldDsKLSAgICBpZiAobV9mbG9hdGluZ09iamVj
dHMpIHsKKyAgICBpZiAobV9mbG9hdGluZ09iamVjdHMgJiYgbV9sZWZ0RmxvYXRzQ291bnQpIHsK
ICAgICAgICAgaWYgKGhlaWdodFJlbWFpbmluZykKICAgICAgICAgICAgICpoZWlnaHRSZW1haW5p
bmcgPSAxOwogCkBAIC0zNDIzLDcgKzM0MzcsNyBAQCBpbnQgUmVuZGVyQmxvY2s6OmxvZ2ljYWxS
aWdodE9mZnNldEZvckxpCiB7CiAgICAgaW50IHJpZ2h0ID0gZml4ZWRPZmZzZXQ7CiAKLSAgICBp
ZiAobV9mbG9hdGluZ09iamVjdHMpIHsKKyAgICBpZiAobV9mbG9hdGluZ09iamVjdHMgJiYgbV9y
aWdodEZsb2F0c0NvdW50KSB7CiAgICAgICAgIGlmIChoZWlnaHRSZW1haW5pbmcpCiAgICAgICAg
ICAgICAqaGVpZ2h0UmVtYWluaW5nID0gMTsKICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVy
YXRvciBlbmQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+ZW5kKCk7CkBAIC0zNTA4LDggKzM1MjIsMTEg
QEAgdm9pZCBSZW5kZXJCbG9jazo6Y2xlYXJGbG9hdHMoKQogewogICAgIC8vIElubGluZSBibG9j
a3MgYXJlIGNvdmVyZWQgYnkgdGhlIGlzUmVwbGFjZWQoKSBjaGVjayBpbiB0aGUgYXZvaWRGbG9h
dHMgbWV0aG9kLgogICAgIGlmIChhdm9pZHNGbG9hdHMoKSB8fCBpc1Jvb3QoKSB8fCBpc1JlbmRl
clZpZXcoKSB8fCBpc0Zsb2F0aW5nT3JQb3NpdGlvbmVkKCkgfHwgaXNUYWJsZUNlbGwoKSkgewot
ICAgICAgICBpZiAobV9mbG9hdGluZ09iamVjdHMpCisgICAgICAgIGlmIChtX2Zsb2F0aW5nT2Jq
ZWN0cykgewogICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPmNsZWFyKCk7CisgICAgICAg
ICAgICBtX2xlZnRGbG9hdHNDb3VudCA9IDA7CisgICAgICAgICAgICBtX3JpZ2h0RmxvYXRzQ291
bnQgPSAwOworICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTM1MjYsNiAr
MzU0Myw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNsZWFyRmxvYXRzKCkKICAgICAgICAgfSBlbHNl
CiAgICAgICAgICAgICBkZWxldGVBbGxWYWx1ZXMoKm1fZmxvYXRpbmdPYmplY3RzKTsKICAgICAg
ICAgbV9mbG9hdGluZ09iamVjdHMtPmNsZWFyKCk7CisgICAgICAgIG1fbGVmdEZsb2F0c0NvdW50
ID0gMDsKKyAgICAgICAgbV9yaWdodEZsb2F0c0NvdW50ID0gMDsKICAgICB9CiAKICAgICAvLyBX
ZSBzaG91bGQgbm90IHByb2Nlc3MgZmxvYXRzIGlmIHRoZSBwYXJlbnQgbm9kZSBpcyBub3QgYSBS
ZW5kZXJCbG9jay4gT3RoZXJ3aXNlLCB3ZSB3aWxsIGFkZCAKQEAgLTM2NDgsNiArMzY2NywxMCBA
QCBpbnQgUmVuZGVyQmxvY2s6OmFkZE92ZXJoYW5naW5nRmxvYXRzKFJlCiAgICAgICAgICAgICAg
ICAgaWYgKCFtX2Zsb2F0aW5nT2JqZWN0cykKICAgICAgICAgICAgICAgICAgICAgbV9mbG9hdGlu
Z09iamVjdHMgPSBhZG9wdFB0cihuZXcgRmxvYXRpbmdPYmplY3RTZXQpOwogCisgICAgICAgICAg
ICAgICAgaWYgKGZsb2F0aW5nT2JqLT50eXBlKCkgPT0gRmxvYXRpbmdPYmplY3Q6OkZsb2F0TGVm
dCkKKyAgICAgICAgICAgICAgICAgICAgbV9sZWZ0RmxvYXRzQ291bnQrKzsKKyAgICAgICAgICAg
ICAgICBlbHNlIGlmIChmbG9hdGluZ09iai0+dHlwZSgpID09IEZsb2F0aW5nT2JqZWN0OjpGbG9h
dFJpZ2h0KQorICAgICAgICAgICAgICAgICAgICBtX3JpZ2h0RmxvYXRzQ291bnQrKzsKICAgICAg
ICAgICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+YWRkKGZsb2F0aW5nT2JqKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfSBlbHNlIHsKQEAgLTM3MDYsNiArMzcyOSwxMCBAQCB2b2lkIFJlbmRl
ckJsb2NrOjphZGRJbnRydWRpbmdGbG9hdHMoUmVuCiAgICAgICAgICAgICAgICAgLy8gV2UgY3Jl
YXRlIHRoZSBmbG9hdGluZyBvYmplY3QgbGlzdCBsYXppbHkuCiAgICAgICAgICAgICAgICAgaWYg
KCFtX2Zsb2F0aW5nT2JqZWN0cykKICAgICAgICAgICAgICAgICAgICAgbV9mbG9hdGluZ09iamVj
dHMgPSBhZG9wdFB0cihuZXcgRmxvYXRpbmdPYmplY3RTZXQpOworICAgICAgICAgICAgICAgIGlm
IChmbG9hdGluZ09iai0+dHlwZSgpID09IEZsb2F0aW5nT2JqZWN0OjpGbG9hdExlZnQpCisgICAg
ICAgICAgICAgICAgICAgIG1fbGVmdEZsb2F0c0NvdW50Kys7CisgICAgICAgICAgICAgICAgZWxz
ZSBpZiAoZmxvYXRpbmdPYmotPnR5cGUoKSA9PSBGbG9hdGluZ09iamVjdDo6RmxvYXRSaWdodCkK
KyAgICAgICAgICAgICAgICAgICAgbV9yaWdodEZsb2F0c0NvdW50Kys7CiAgICAgICAgICAgICAg
ICAgbV9mbG9hdGluZ09iamVjdHMtPmFkZChmbG9hdGluZ09iaik7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCShyZXZp
c2lvbiA3OTk1NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCSh3
b3JraW5nIGNvcHkpCkBAIC03MTUsNiArNzE1LDggQEAgcHJpdmF0ZToKICAgICB0eXBlZGVmIExp
c3RIYXNoU2V0PEZsb2F0aW5nT2JqZWN0KiwgNCwgRmxvYXRpbmdPYmplY3RIYXNoRnVuY3Rpb25z
PiBGbG9hdGluZ09iamVjdFNldDsKICAgICB0eXBlZGVmIEZsb2F0aW5nT2JqZWN0U2V0Ojpjb25z
dF9pdGVyYXRvciBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yOwogICAgIE93blB0cjxGbG9hdGlu
Z09iamVjdFNldD4gbV9mbG9hdGluZ09iamVjdHM7CisgICAgaW50IG1fbGVmdEZsb2F0c0NvdW50
OworICAgIGludCBtX3JpZ2h0RmxvYXRzQ291bnQ7CiAgICAgCiAgICAgdHlwZWRlZiBQb3NpdGlv
bmVkT2JqZWN0c0xpc3RIYXNoU2V0Ojpjb25zdF9pdGVyYXRvciBJdGVyYXRvcjsKICAgICBPd25Q
dHI8UG9zaXRpb25lZE9iamVjdHNMaXN0SGFzaFNldD4gbV9wb3NpdGlvbmVkT2JqZWN0czsK
</data>
<flag name="review"
          id="76140"
          type_id="1"
          status="-"
          setter="sam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>84547</attachid>
            <date>2011-03-03 05:31:49 -0800</date>
            <delta_ts>2011-03-03 18:30:38 -0800</delta_ts>
            <desc>updated patch addressing comment #8</desc>
            <filename>WebCore-floating-objects.part0.rev1.patch</filename>
            <type>text/plain</type>
            <size>30884</size>
            <attacher name="Yuqiang Xian">yuqiang.xian</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgwMjMzKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjMgQEAKKzIwMTEtMDMtMDMgIFl1cWlhbmcg
WGlhbiAgPHl1cWlhbmcueGlhbkBpbnRlbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgaW1wcm92ZSBsYXlvdXQgcGVyZm9ybWFuY2UgYnkgcmVk
dWNpbmcgdGhlIHRyYXZlcnNhbCB0aW1lIG9mIHRoZSBmbG9hdGluZyBvYmplY3RzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NTQ0MAorCisgICAgICAg
IFdlIG9ic2VydmVyZWQgbGFyZ2Ugb3ZlcmhlYWQgb24gdHJhdmVyc2luZyB0aGUgZmxvYXRpbmcg
b2JqZWN0cyBsaXN0CisgICAgICAgIGluIGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZSgpIGFuZCBs
b2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lKCkgZXNwZWNpYWxseQorICAgICAgICB3aGVuIHRoZSBs
aXN0IGJlY29tZXMgZW5vcm1vdXMsIGZvciBleGFtcGxlIGluIHRoZSBkZWZhdWx0IDMweDMwIG1h
emUgdGVzdAorICAgICAgICBmcm9tIGh0dHA6Ly9pZS5taWNyb3NvZnQuY29tL3Rlc3Rkcml2ZS9Q
ZXJmb3JtYW5jZS9NYXplU29sdmVyL0RlZmF1bHQuaHRtbAorICAgICAgICB0aGVyZSdyZSA+Mzcw
MCBmbG9hdGluZyBvYmplY3RzLiBXaGVuIHBsYWNpbmcgYSBuZXcgZmxvYXRpbmcgb2JqZWN0IHRo
ZQorICAgICAgICBlbnRpcmUgbGlzdCAoZnJvbSBiZWdpbiB0byBlbmQpIGlzIHRyYXZlcnNlZCBm
b3IgbXVsdGlwbGUgdGltZXMuCisgICAgICAgIFRoZXJlJ3MgYSBsb3cgaGFuZ2luZyBmcnVpdCB0
byByZWR1Y2UgdGhlIGNoYW5jZXMgdG8gZG8gdGhlIHRyYXZlcnNhbAorICAgICAgICB3aGljaCBp
cyBlc3BlY2lhbGx5IGFwcGxpY2FibGUgaW4gbG9naWNhbExlZnRPZmZzZXRGb3JMaW5lIGFuZCBs
b2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lLgorICAgICAgICBBcyB0aGUgdHdvIHJvdXRpbmVzIGVp
dGhlciBjYXJlcyBhYm91dCBGbG9hdExlZnQgb2JqZWN0cyBvciBGbG9hdFJpZ2h0IG9iamVjdHMg
b25seSwKKyAgICAgICAgaWYgd2Uga25vdyB0aGVyZSdzIG5vIGNvcnJlc3BvbmRpbmcgdHlwZSBm
bG9hdGluZyBvYmplY3RzIGluIHRoZSBsaXN0CisgICAgICAgIHdlIGNhbiBhdm9pZCB0aGUgdHJh
dmVyc2FsIGFjdHVhbGx5LiBPbmUgdGhpbmcgd2UgY291bGQgZG8gaXMgdG8gcmVjb3JkCisgICAg
ICAgIHRoZSBudW1iZXIgb2YgRmxvYXRMZWZ0IG9iamVjdHMgYW5kIHRoZSBudW1iZXIgb2YgRmxv
YXRSaWdodCBvYmplY3RzIGFuZAorICAgICAgICBhZGQgYSBjaGVjayBiZWZvcmUgZG9pbmcgdGhl
IHRyYXZlcnNhbC4gVGhpcyBjYW4gcmVkdWNlIHRoZSB0aW1lIGJ5IDQ1JQorICAgICAgICB0byBy
ZXNvbHZlIHRoZSAzMHgzMCBNYXplIG1lYXN1cmVkIG9uIE40NzAgTmV0Ym9vayBNZWVHbyB1c2lu
ZyBsYXRlc3QKKyAgICAgICAgQ2hyb21pdW0gYnJvd3NlciAxMSAoZnJvbSA1MDNzIHRvIDI2OXMp
LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgcmVseWluZyBvbiBleGlzdGluZyBsYXlvdXQgdGVz
dHMuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQmxvY2s6On5SZW5kZXJCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCbG9jazo6YWRkT3ZlcmZsb3dGcm9tRmxvYXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJsb2NrOjpyZXBhaW50T3ZlcmhhbmdpbmdGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQmxvY2s6OnBhaW50RmxvYXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpz
ZWxlY3Rpb25HYXBzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjppbnNlcnRGbG9h
dGluZ09iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cmVtb3ZlRmxvYXRp
bmdPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnJlbW92ZUZsb2F0aW5n
T2JqZWN0c0JlbG93KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpwb3NpdGlvbk5l
d0Zsb2F0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cG9zaXRpb25OZXdGbG9h
dE9uTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bG9naWNhbExlZnRPZmZz
ZXRGb3JMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsb2dpY2FsUmlnaHRP
ZmZzZXRGb3JMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpuZXh0RmxvYXRM
b2dpY2FsQm90dG9tQmVsb3cpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Omxvd2Vz
dEZsb2F0TG9naWNhbEJvdHRvbSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Y2xl
YXJGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmFkZE92ZXJoYW5naW5n
RmxvYXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjphZGRJbnRydWRpbmdGbG9h
dHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmNvbnRhaW5zRmxvYXQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmhpdFRlc3RGbG9hdHMpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQmxvY2s6OmFkanVzdEZvckJvcmRlckZpdCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Y29udGFp
bnNGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0
czo6RmxvYXRpbmdPYmplY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpGbG9h
dGluZ09iamVjdHM6On5GbG9hdGluZ09iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6aW5jcmVhc2VGbG9hdHNDb3VudCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RzOjpkZWNyZWFzZUZsb2F0c0NvdW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdHM6Omhhc0xl
ZnRGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0
czo6aGFzUmlnaHRGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmdldEZs
b2F0aW5nT2JqZWN0U2V0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5
b3V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVDaGls
ZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bWF0Y2hlZEVuZExpbmUpOgor
CiAyMDExLTAzLTAzICBEYXZpZCBIb2xsb3dheSAgPGRob2xsb3dhQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBEaW1pdHJpIEdsYXprb3YuCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHJldmlzaW9uIDgwMjI5KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIzLDcg
KzEyMyw3IEBAIFJlbmRlckJsb2NrOjpSZW5kZXJCbG9jayhOb2RlKiBub2RlKQogUmVuZGVyQmxv
Y2s6On5SZW5kZXJCbG9jaygpCiB7CiAgICAgaWYgKG1fZmxvYXRpbmdPYmplY3RzKQotICAgICAg
ICBkZWxldGVBbGxWYWx1ZXMoKm1fZmxvYXRpbmdPYmplY3RzKTsKKyAgICAgICAgZGVsZXRlQWxs
VmFsdWVzKCpnZXRGbG9hdGluZ09iamVjdFNldCgpKTsKICAgICAKICAgICBpZiAoaGFzQ29sdW1u
cygpKQogICAgICAgICBkZWxldGUgZ0NvbHVtbkluZm9NYXAtPnRha2UodGhpcyk7CkBAIC0xMzgw
LDggKzEzODAsOSBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGRPdmVyZmxvd0Zyb21GbG9hdHMoCiAg
ICAgaWYgKCFtX2Zsb2F0aW5nT2JqZWN0cykKICAgICAgICAgcmV0dXJuOwogCi0gICAgRmxvYXRp
bmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+ZW5kKCk7Ci0gICAg
Zm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gbV9mbG9hdGluZ09iamVjdHMtPmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgIEZsb2F0aW5nT2JqZWN0U2V0KiBmbG9hdGlu
Z09iamVjdFNldCA9IGdldEZsb2F0aW5nT2JqZWN0U2V0KCk7CisgICAgRmxvYXRpbmdPYmplY3RT
ZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC0+ZW5kKCk7CisgICAgZm9yIChGbG9h
dGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQtPmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgewogICAgICAgICBGbG9hdGluZ09iamVjdCogciA9ICppdDsKICAgICAg
ICAgaWYgKHItPm1faXNEZXNjZW5kYW50KQogICAgICAgICAgICAgYWRkT3ZlcmZsb3dGcm9tQ2hp
bGQoci0+bV9yZW5kZXJlciwgSW50U2l6ZSh4UG9zaXRpb25Gb3JGbG9hdEluY2x1ZGluZ01hcmdp
bihyKSwgeVBvc2l0aW9uRm9yRmxvYXRJbmNsdWRpbmdNYXJnaW4ocikpKTsKQEAgLTIxNzcsOCAr
MjE3OCw5IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnJlcGFpbnRPdmVyaGFuZ2luZ0Zsb2EKICAgICAg
ICAgLy8gRklYTUU6IEF2b2lkIGRpc2FibGluZyBMYXlvdXRTdGF0ZS4gQXQgdGhlIHZlcnkgbGVh
c3QsIGRvbid0IGRpc2FibGUgaXQgZm9yIGZsb2F0cyBvcmlnaW5hdGluZwogICAgICAgICAvLyBp
biB0aGlzIGJsb2NrLiBCZXR0ZXIgeWV0IHdvdWxkIGJlIHRvIHB1c2ggZXh0cmEgc3RhdGUgZm9y
IHRoZSBjb250YWluZXJzIG9mIG90aGVyIGZsb2F0cy4KICAgICAgICAgdmlldygpLT5kaXNhYmxl
TGF5b3V0U3RhdGUoKTsKLSAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBt
X2Zsb2F0aW5nT2JqZWN0cy0+ZW5kKCk7Ci0gICAgICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJ
dGVyYXRvciBpdCA9IG1fZmxvYXRpbmdPYmplY3RzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKKyAgICAgICAgRmxvYXRpbmdPYmplY3RTZXQqIGZsb2F0aW5nT2JqZWN0U2V0ID0gZ2V0Rmxv
YXRpbmdPYmplY3RTZXQoKTsKKyAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQg
PSBmbG9hdGluZ09iamVjdFNldC0+ZW5kKCk7CisgICAgICAgIGZvciAoRmxvYXRpbmdPYmplY3RT
ZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiByID0gKml0OwogICAgICAgICAgICAg
Ly8gT25seSByZXBhaW50IHRoZSBvYmplY3QgaWYgaXQgaXMgb3ZlcmhhbmdpbmcsIGlzIG5vdCBp
biBpdHMgb3duIGxheWVyLCBhbmQKICAgICAgICAgICAgIC8vIGlzIG91ciByZXNwb25zaWJpbGl0
eSB0byBwYWludCAobV9zaG91bGRQYWludCBpcyBzZXQpLiBXaGVuIHBhaW50QWxsRGVzY2VuZGFu
dHMgaXMgdHJ1ZSwgdGhlIGxhdHRlcgpAQCAtMjUwMyw4ICsyNTA1LDkgQEAgdm9pZCBSZW5kZXJC
bG9jazo6cGFpbnRGbG9hdHMoUGFpbnRJbmZvJgogICAgIGlmICghbV9mbG9hdGluZ09iamVjdHMp
CiAgICAgICAgIHJldHVybjsKIAotICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0g
bV9mbG9hdGluZ09iamVjdHMtPmVuZCgpOwotICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVy
YXRvciBpdCA9IG1fZmxvYXRpbmdPYmplY3RzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
KyAgICBGbG9hdGluZ09iamVjdFNldCogZmxvYXRpbmdPYmplY3RTZXQgPSBnZXRGbG9hdGluZ09i
amVjdFNldCgpOworICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdP
YmplY3RTZXQtPmVuZCgpOworICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9
IGZsb2F0aW5nT2JqZWN0U2V0LT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAg
RmxvYXRpbmdPYmplY3QqIHIgPSAqaXQ7CiAgICAgICAgIC8vIE9ubHkgcGFpbnQgdGhlIG9iamVj
dCBpZiBvdXIgbV9zaG91bGRQYWludCBmbGFnIGlzIHNldC4KICAgICAgICAgaWYgKHItPm1fc2hv
dWxkUGFpbnQgJiYgIXItPm1fcmVuZGVyZXItPmhhc1NlbGZQYWludGluZ0xheWVyKCkpIHsKQEAg
LTI3NTUsOCArMjc1OCw5IEBAIEdhcFJlY3RzIFJlbmRlckJsb2NrOjpzZWxlY3Rpb25HYXBzKFJl
bmQKICAgICAgICAgICAgIGZvciAoUmVuZGVyQmxvY2sqIGNiID0gY29udGFpbmluZ0Jsb2NrKCk7
IGNiICYmICFjYi0+aXNSZW5kZXJWaWV3KCk7IGNiID0gY2ItPmNvbnRhaW5pbmdCbG9jaygpKQog
ICAgICAgICAgICAgICAgIGNsaXBPdXRQb3NpdGlvbmVkT2JqZWN0cyhwYWludEluZm8sIEludFBv
aW50KGNiLT54KCksIGNiLT55KCkpLCBjYi0+bV9wb3NpdGlvbmVkT2JqZWN0cy5nZXQoKSk7IC8v
IEZJWE1FOiBOb3QgcmlnaHQgZm9yIGZsaXBwZWQgd3JpdGluZyBtb2Rlcy4KICAgICAgICAgaWYg
KG1fZmxvYXRpbmdPYmplY3RzKSB7Ci0gICAgICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJh
dG9yIGVuZCA9IG1fZmxvYXRpbmdPYmplY3RzLT5lbmQoKTsKLSAgICAgICAgICAgIGZvciAoRmxv
YXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IG1fZmxvYXRpbmdPYmplY3RzLT5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0KiBmbG9hdGlu
Z09iamVjdFNldCA9IGdldEZsb2F0aW5nT2JqZWN0U2V0KCk7CisgICAgICAgICAgICBGbG9hdGlu
Z09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LT5lbmQoKTsKKyAgICAg
ICAgICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0
U2V0LT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgICAgICBGbG9hdGlu
Z09iamVjdCogciA9ICppdDsKICAgICAgICAgICAgICAgICBJbnRSZWN0IGZsb2F0Qm94ID0gSW50
UmVjdChvZmZzZXRGcm9tUm9vdEJsb2NrLndpZHRoKCkgKyB4UG9zaXRpb25Gb3JGbG9hdEluY2x1
ZGluZ01hcmdpbihyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvZmZzZXRGcm9tUm9vdEJsb2NrLmhlaWdodCgpICsgeVBvc2l0aW9uRm9yRmxvYXRJbmNsdWRp
bmdNYXJnaW4ociksCkBAIC0zMDY1LDExICszMDY5LDEyIEBAIFJlbmRlckJsb2NrOjpGbG9hdGlu
Z09iamVjdCogUmVuZGVyQmxvY2sKIAogICAgIC8vIENyZWF0ZSB0aGUgbGlzdCBvZiBzcGVjaWFs
IG9iamVjdHMgaWYgd2UgZG9uJ3QgYWxlYWR5IGhhdmUgb25lCiAgICAgaWYgKCFtX2Zsb2F0aW5n
T2JqZWN0cykKLSAgICAgICAgbV9mbG9hdGluZ09iamVjdHMgPSBhZG9wdFB0cihuZXcgRmxvYXRp
bmdPYmplY3RTZXQpOworICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cyA9IGFkb3B0UHRyKG5ldyBG
bG9hdGluZ09iamVjdHMpOwogICAgIGVsc2UgewogICAgICAgICAvLyBEb24ndCBpbnNlcnQgdGhl
IG9iamVjdCBhZ2FpbiBpZiBpdCdzIGFscmVhZHkgaW4gdGhlIGxpc3QKLSAgICAgICAgRmxvYXRp
bmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IG1fZmxvYXRpbmdPYmplY3RzLT5maW5kPFJlbmRlckJv
eCosIEZsb2F0aW5nT2JqZWN0SGFzaFRyYW5zbGF0b3I+KG8pOwotICAgICAgICBpZiAoaXQgIT0g
bV9mbG9hdGluZ09iamVjdHMtPmVuZCgpKQorICAgICAgICBGbG9hdGluZ09iamVjdFNldCogZmxv
YXRpbmdPYmplY3RTZXQgPSBnZXRGbG9hdGluZ09iamVjdFNldCgpOworICAgICAgICBGbG9hdGlu
Z09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQtPmZpbmQ8UmVuZGVyQm94
KiwgRmxvYXRpbmdPYmplY3RIYXNoVHJhbnNsYXRvcj4obyk7CisgICAgICAgIGlmIChpdCAhPSBm
bG9hdGluZ09iamVjdFNldC0+ZW5kKCkpCiAgICAgICAgICAgICByZXR1cm4gKml0OwogICAgIH0K
IApAQCAtMzA5Niw3ICszMTAxLDggQEAgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0KiBSZW5k
ZXJCbG9jawogICAgIG5ld09iai0+bV9pc0Rlc2NlbmRhbnQgPSB0cnVlOwogICAgIG5ld09iai0+
bV9yZW5kZXJlciA9IG87CiAKLSAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+YWRkKG5ld09iaik7Cisg
ICAgbV9mbG9hdGluZ09iamVjdHMtPmluY3JlYXNlRmxvYXRzQ291bnQobmV3T2JqLT50eXBlKCkp
OworICAgIGdldEZsb2F0aW5nT2JqZWN0U2V0KCktPmFkZChuZXdPYmopOwogICAgIAogICAgIHJl
dHVybiBuZXdPYmo7CiB9CkBAIC0zMTA0LDggKzMxMTAsOSBAQCBSZW5kZXJCbG9jazo6RmxvYXRp
bmdPYmplY3QqIFJlbmRlckJsb2NrCiB2b2lkIFJlbmRlckJsb2NrOjpyZW1vdmVGbG9hdGluZ09i
amVjdChSZW5kZXJCb3gqIG8pCiB7CiAgICAgaWYgKG1fZmxvYXRpbmdPYmplY3RzKSB7Ci0gICAg
ICAgIEZsb2F0aW5nT2JqZWN0U2V0OjppdGVyYXRvciBpdCA9IG1fZmxvYXRpbmdPYmplY3RzLT5m
aW5kPFJlbmRlckJveCosIEZsb2F0aW5nT2JqZWN0SGFzaFRyYW5zbGF0b3I+KG8pOwotICAgICAg
ICBpZiAoaXQgIT0gbV9mbG9hdGluZ09iamVjdHMtPmVuZCgpKSB7CisgICAgICAgIEZsb2F0aW5n
T2JqZWN0U2V0KiBmbG9hdGluZ09iamVjdFNldCA9IGdldEZsb2F0aW5nT2JqZWN0U2V0KCk7Cisg
ICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0OjppdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0
LT5maW5kPFJlbmRlckJveCosIEZsb2F0aW5nT2JqZWN0SGFzaFRyYW5zbGF0b3I+KG8pOworICAg
ICAgICBpZiAoaXQgIT0gZmxvYXRpbmdPYmplY3RTZXQtPmVuZCgpKSB7CiAgICAgICAgICAgICBG
bG9hdGluZ09iamVjdCogciA9ICppdDsKICAgICAgICAgICAgIGlmIChjaGlsZHJlbklubGluZSgp
KSB7CiAgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxUb3AgPSBsb2dpY2FsVG9wRm9yRmxvYXQo
cik7CkBAIC0zMTIyLDcgKzMxMjksOCBAQCB2b2lkIFJlbmRlckJsb2NrOjpyZW1vdmVGbG9hdGlu
Z09iamVjdChSCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIG1hcmtMaW5lc0Rp
cnR5SW5CbG9ja1JhbmdlKDAsIGxvZ2ljYWxCb3R0b20pOwogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgbV9mbG9hdGluZ09iamVjdHMtPnJlbW92ZShpdCk7CisgICAgICAgICAgICBtX2Zsb2F0
aW5nT2JqZWN0cy0+ZGVjcmVhc2VGbG9hdHNDb3VudChyLT50eXBlKCkpOworICAgICAgICAgICAg
ZmxvYXRpbmdPYmplY3RTZXQtPnJlbW92ZShpdCk7CiAgICAgICAgICAgICBkZWxldGUgcjsKICAg
ICAgICAgfQogICAgIH0KQEAgLTMxMzMsMTEgKzMxNDEsMTMgQEAgdm9pZCBSZW5kZXJCbG9jazo6
cmVtb3ZlRmxvYXRpbmdPYmplY3RzQgogICAgIGlmICghbV9mbG9hdGluZ09iamVjdHMpCiAgICAg
ICAgIHJldHVybjsKICAgICAKLSAgICBGbG9hdGluZ09iamVjdCogY3VyciA9IG1fZmxvYXRpbmdP
YmplY3RzLT5sYXN0KCk7CisgICAgRmxvYXRpbmdPYmplY3RTZXQqIGZsb2F0aW5nT2JqZWN0U2V0
ID0gZ2V0RmxvYXRpbmdPYmplY3RTZXQoKTsKKyAgICBGbG9hdGluZ09iamVjdCogY3VyciA9IGZs
b2F0aW5nT2JqZWN0U2V0LT5sYXN0KCk7CiAgICAgd2hpbGUgKGN1cnIgIT0gbGFzdEZsb2F0ICYm
ICghY3Vyci0+aXNQbGFjZWQoKSB8fCBsb2dpY2FsVG9wRm9yRmxvYXQoY3VycikgPj0gbG9naWNh
bE9mZnNldCkpIHsKLSAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPnJlbW92ZUxhc3QoKTsKKyAg
ICAgICAgbV9mbG9hdGluZ09iamVjdHMtPmRlY3JlYXNlRmxvYXRzQ291bnQoY3Vyci0+dHlwZSgp
KTsKKyAgICAgICAgZmxvYXRpbmdPYmplY3RTZXQtPnJlbW92ZUxhc3QoKTsKICAgICAgICAgZGVs
ZXRlIGN1cnI7Ci0gICAgICAgIGN1cnIgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+bGFzdCgpOworICAg
ICAgICBjdXJyID0gZmxvYXRpbmdPYmplY3RTZXQtPmxhc3QoKTsKICAgICB9CiB9CiAKQEAgLTMx
NDYsMTkgKzMxNTYsMjAgQEAgYm9vbCBSZW5kZXJCbG9jazo6cG9zaXRpb25OZXdGbG9hdHMoKQog
ICAgIGlmICghbV9mbG9hdGluZ09iamVjdHMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IGlmIChtX2Zsb2F0aW5nT2JqZWN0cy0+aXNFbXB0eSgpKQorICAgIEZsb2F0aW5nT2JqZWN0U2V0
KiBmbG9hdGluZ09iamVjdFNldCA9IGdldEZsb2F0aW5nT2JqZWN0U2V0KCk7CisgICAgaWYgKGZs
b2F0aW5nT2JqZWN0U2V0LT5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IC8vIElmIGFsbCBmbG9hdHMgaGF2ZSBhbHJlYWR5IGJlZW4gcG9zaXRpb25lZCwgdGhlbiB3ZSBo
YXZlIG5vIHdvcmsgdG8gZG8uCi0gICAgaWYgKG1fZmxvYXRpbmdPYmplY3RzLT5sYXN0KCktPmlz
UGxhY2VkKCkpCisgICAgaWYgKGZsb2F0aW5nT2JqZWN0U2V0LT5sYXN0KCktPmlzUGxhY2VkKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIE1vdmUgYmFja3dhcmRzIHRocm91Z2gg
b3VyIGZsb2F0aW5nIG9iamVjdCBsaXN0IHVudGlsIHdlIGZpbmQgYSBmbG9hdCB0aGF0IGhhcwog
ICAgIC8vIGFscmVhZHkgYmVlbiBwb3NpdGlvbmVkLiAgVGhlbiB3ZSdsbCBiZSBhYmxlIHRvIG1v
dmUgZm9yd2FyZCwgcG9zaXRpb25pbmcgYWxsIG9mCiAgICAgLy8gdGhlIG5ldyBmbG9hdHMgdGhh
dCBuZWVkIGl0LgotICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBtX2Zsb2F0aW5n
T2JqZWN0cy0+ZW5kKCk7CisgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0
aW5nT2JqZWN0U2V0LT5lbmQoKTsKICAgICAtLWl0OyAvLyBHbyB0byBsYXN0IGl0ZW0uCi0gICAg
RmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBiZWdpbiA9IG1fZmxvYXRpbmdPYmplY3RzLT5iZWdp
bigpOworICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgYmVnaW4gPSBmbG9hdGluZ09iamVj
dFNldC0+YmVnaW4oKTsKICAgICBGbG9hdGluZ09iamVjdCogbGFzdFBsYWNlZEZsb2F0aW5nT2Jq
ZWN0ID0gMDsKICAgICB3aGlsZSAoaXQgIT0gYmVnaW4pIHsKICAgICAgICAgLS1pdDsKQEAgLTMx
NzUsNyArMzE4Niw3IEBAIGJvb2wgUmVuZGVyQmxvY2s6OnBvc2l0aW9uTmV3RmxvYXRzKCkKICAg
ICBpZiAobGFzdFBsYWNlZEZsb2F0aW5nT2JqZWN0KQogICAgICAgICBsb2dpY2FsVG9wID0gbWF4
KGxvZ2ljYWxUb3BGb3JGbG9hdChsYXN0UGxhY2VkRmxvYXRpbmdPYmplY3QpLCBsb2dpY2FsVG9w
KTsKIAotICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gbV9mbG9hdGluZ09iamVj
dHMtPmVuZCgpOworICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdP
YmplY3RTZXQtPmVuZCgpOwogICAgIC8vIE5vdyB3YWxrIHRocm91Z2ggdGhlIHNldCBvZiB1bnBv
c2l0aW9uZWQgZmxvYXRzIGFuZCBwbGFjZSB0aGVtLgogICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCA9ICppdDsKQEAg
LTMyNzQsNyArMzI4NSw4IEBAIGJvb2wgUmVuZGVyQmxvY2s6OnBvc2l0aW9uTmV3RmxvYXRPbkxp
bmUKICAgICBpZiAoIWRpZFBvc2l0aW9uIHx8ICFuZXdGbG9hdC0+bV9wYWdpbmF0aW9uU3RydXQp
CiAgICAgICAgIHJldHVybiBkaWRQb3NpdGlvbjsKICAgICAKLSAgICBBU1NFUlQobV9mbG9hdGlu
Z09iamVjdHMtPmxhc3QoKSA9PSBuZXdGbG9hdCk7CisgICAgRmxvYXRpbmdPYmplY3RTZXQqIGZs
b2F0aW5nT2JqZWN0U2V0ID0gZ2V0RmxvYXRpbmdPYmplY3RTZXQoKTsKKyAgICBBU1NFUlQoZmxv
YXRpbmdPYmplY3RTZXQtPmxhc3QoKSA9PSBuZXdGbG9hdCk7CiAKICAgICBpbnQgZmxvYXRMb2dp
Y2FsVG9wID0gbG9naWNhbFRvcEZvckZsb2F0KG5ld0Zsb2F0KTsKICAgICBpbnQgcGFnaW5hdGlv
blN0cnV0ID0gbmV3RmxvYXQtPm1fcGFnaW5hdGlvblN0cnV0OwpAQCAtMzI4Miw5ICszMjk0LDkg
QEAgYm9vbCBSZW5kZXJCbG9jazo6cG9zaXRpb25OZXdGbG9hdE9uTGluZQogICAgIGlmIChmbG9h
dExvZ2ljYWxUb3AgLSBwYWdpbmF0aW9uU3RydXQgIT0gbG9naWNhbEhlaWdodCgpKQogICAgICAg
ICByZXR1cm4gZGlkUG9zaXRpb247CiAKLSAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0
ID0gbV9mbG9hdGluZ09iamVjdHMtPmVuZCgpOworICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0
b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC0+ZW5kKCk7CiAgICAgLS1pdDsgLy8gTGFzdCBmbG9h
dCBpcyBuZXdGbG9hdCwgc2tpcCB0aGF0IG9uZS4KLSAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJh
dG9yIGJlZ2luID0gbV9mbG9hdGluZ09iamVjdHMtPmJlZ2luKCk7CisgICAgRmxvYXRpbmdPYmpl
Y3RTZXRJdGVyYXRvciBiZWdpbiA9IGZsb2F0aW5nT2JqZWN0U2V0LT5iZWdpbigpOwogICAgIHdo
aWxlIChpdCAhPSBiZWdpbikgewogICAgICAgICAtLWl0OwogICAgICAgICBGbG9hdGluZ09iamVj
dCogZiA9ICppdDsKQEAgLTMzOTIsMTIgKzM0MDQsMTMgQEAgSGFzaFNldDxSZW5kZXJCb3gqPiog
UmVuZGVyQmxvY2s6OnBlcmNlbgogaW50IFJlbmRlckJsb2NrOjpsb2dpY2FsTGVmdE9mZnNldEZv
ckxpbmUoaW50IGxvZ2ljYWxUb3AsIGludCBmaXhlZE9mZnNldCwgYm9vbCBhcHBseVRleHRJbmRl
bnQsIGludCogaGVpZ2h0UmVtYWluaW5nKSBjb25zdAogewogICAgIGludCBsZWZ0ID0gZml4ZWRP
ZmZzZXQ7Ci0gICAgaWYgKG1fZmxvYXRpbmdPYmplY3RzKSB7CisgICAgaWYgKG1fZmxvYXRpbmdP
YmplY3RzICYmIG1fZmxvYXRpbmdPYmplY3RzLT5oYXNMZWZ0RmxvYXRzKCkpIHsKICAgICAgICAg
aWYgKGhlaWdodFJlbWFpbmluZykKICAgICAgICAgICAgICpoZWlnaHRSZW1haW5pbmcgPSAxOwog
Ci0gICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gbV9mbG9hdGluZ09iamVj
dHMtPmVuZCgpOwotICAgICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBt
X2Zsb2F0aW5nT2JqZWN0cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIEZs
b2F0aW5nT2JqZWN0U2V0KiBmbG9hdGluZ09iamVjdFNldCA9IGdldEZsb2F0aW5nT2JqZWN0U2V0
KCk7CisgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmpl
Y3RTZXQtPmVuZCgpOworICAgICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQg
PSBmbG9hdGluZ09iamVjdFNldC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAg
ICAgICBGbG9hdGluZ09iamVjdCogciA9ICppdDsKICAgICAgICAgICAgIGlmIChyLT5pc1BsYWNl
ZCgpICYmIGxvZ2ljYWxUb3BGb3JGbG9hdChyKSA8PSBsb2dpY2FsVG9wICYmIGxvZ2ljYWxCb3R0
b21Gb3JGbG9hdChyKSA+IGxvZ2ljYWxUb3AKICAgICAgICAgICAgICAgICAmJiByLT50eXBlKCkg
PT0gRmxvYXRpbmdPYmplY3Q6OkZsb2F0TGVmdApAQCAtMzQyMywxMSArMzQzNiwxMiBAQCBpbnQg
UmVuZGVyQmxvY2s6OmxvZ2ljYWxSaWdodE9mZnNldEZvckxpCiB7CiAgICAgaW50IHJpZ2h0ID0g
Zml4ZWRPZmZzZXQ7CiAKLSAgICBpZiAobV9mbG9hdGluZ09iamVjdHMpIHsKKyAgICBpZiAobV9m
bG9hdGluZ09iamVjdHMgJiYgbV9mbG9hdGluZ09iamVjdHMtPmhhc1JpZ2h0RmxvYXRzKCkpIHsK
ICAgICAgICAgaWYgKGhlaWdodFJlbWFpbmluZykKICAgICAgICAgICAgICpoZWlnaHRSZW1haW5p
bmcgPSAxOwotICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IG1fZmxvYXRp
bmdPYmplY3RzLT5lbmQoKTsKLSAgICAgICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9y
IGl0ID0gbV9mbG9hdGluZ09iamVjdHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAg
ICAgICBGbG9hdGluZ09iamVjdFNldCogZmxvYXRpbmdPYmplY3RTZXQgPSBnZXRGbG9hdGluZ09i
amVjdFNldCgpOworICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0
aW5nT2JqZWN0U2V0LT5lbmQoKTsKKyAgICAgICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJh
dG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewog
ICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIHIgPSAqaXQ7CiAgICAgICAgICAgICBpZiAoci0+
aXNQbGFjZWQoKSAmJiBsb2dpY2FsVG9wRm9yRmxvYXQocikgPD0gbG9naWNhbFRvcCAmJiBsb2dp
Y2FsQm90dG9tRm9yRmxvYXQocikgPiBsb2dpY2FsVG9wCiAgICAgICAgICAgICAgICAgJiYgci0+
dHlwZSgpID09IEZsb2F0aW5nT2JqZWN0OjpGbG9hdFJpZ2h0CkBAIC0zNDYxLDggKzM0NzUsOSBA
QCBpbnQgUmVuZGVyQmxvY2s6Om5leHRGbG9hdExvZ2ljYWxCb3R0b21CCiAgICAgICAgIHJldHVy
biAwOwogCiAgICAgaW50IGJvdHRvbSA9IElOVF9NQVg7Ci0gICAgRmxvYXRpbmdPYmplY3RTZXRJ
dGVyYXRvciBlbmQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+ZW5kKCk7Ci0gICAgZm9yIChGbG9hdGlu
Z09iamVjdFNldEl0ZXJhdG9yIGl0ID0gbV9mbG9hdGluZ09iamVjdHMtPmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgeworICAgIEZsb2F0aW5nT2JqZWN0U2V0KiBmbG9hdGluZ09iamVjdFNldCA9
IGdldEZsb2F0aW5nT2JqZWN0U2V0KCk7CisgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBl
bmQgPSBmbG9hdGluZ09iamVjdFNldC0+ZW5kKCk7CisgICAgZm9yIChGbG9hdGluZ09iamVjdFNl
dEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgewogICAgICAgICBGbG9hdGluZ09iamVjdCogciA9ICppdDsKICAgICAgICAgaW50IGZsb2F0
Qm90dG9tID0gbG9naWNhbEJvdHRvbUZvckZsb2F0KHIpOwogICAgICAgICBpZiAoZmxvYXRCb3R0
b20gPiBsb2dpY2FsSGVpZ2h0KQpAQCAtMzQ3Nyw4ICszNDkyLDkgQEAgaW50IFJlbmRlckJsb2Nr
Ojpsb3dlc3RGbG9hdExvZ2ljYWxCb3R0bwogICAgIGlmICghbV9mbG9hdGluZ09iamVjdHMpCiAg
ICAgICAgIHJldHVybiAwOwogICAgIGludCBsb3dlc3RGbG9hdEJvdHRvbSA9IDA7Ci0gICAgRmxv
YXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+ZW5kKCk7Ci0g
ICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gbV9mbG9hdGluZ09iamVjdHMt
PmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgIEZsb2F0aW5nT2JqZWN0U2V0KiBmbG9h
dGluZ09iamVjdFNldCA9IGdldEZsb2F0aW5nT2JqZWN0U2V0KCk7CisgICAgRmxvYXRpbmdPYmpl
Y3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC0+ZW5kKCk7CisgICAgZm9yIChG
bG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQtPmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBGbG9hdGluZ09iamVjdCogciA9ICppdDsKICAg
ICAgICAgaWYgKHItPmlzUGxhY2VkKCkgJiYgci0+dHlwZSgpICYgZmxvYXRUeXBlKQogICAgICAg
ICAgICAgbG93ZXN0RmxvYXRCb3R0b20gPSBtYXgobG93ZXN0RmxvYXRCb3R0b20sIGxvZ2ljYWxC
b3R0b21Gb3JGbG9hdChyKSk7CkBAIC0zNTA5LDcgKzM1MjUsNyBAQCB2b2lkIFJlbmRlckJsb2Nr
OjpjbGVhckZsb2F0cygpCiAgICAgLy8gSW5saW5lIGJsb2NrcyBhcmUgY292ZXJlZCBieSB0aGUg
aXNSZXBsYWNlZCgpIGNoZWNrIGluIHRoZSBhdm9pZEZsb2F0cyBtZXRob2QuCiAgICAgaWYgKGF2
b2lkc0Zsb2F0cygpIHx8IGlzUm9vdCgpIHx8IGlzUmVuZGVyVmlldygpIHx8IGlzRmxvYXRpbmdP
clBvc2l0aW9uZWQoKSB8fCBpc1RhYmxlQ2VsbCgpKSB7CiAgICAgICAgIGlmIChtX2Zsb2F0aW5n
T2JqZWN0cykgewotICAgICAgICAgICAgZGVsZXRlQWxsVmFsdWVzKCptX2Zsb2F0aW5nT2JqZWN0
cyk7CisgICAgICAgICAgICBkZWxldGVBbGxWYWx1ZXMoKmdldEZsb2F0aW5nT2JqZWN0U2V0KCkp
OwogICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPmNsZWFyKCk7CiAgICAgICAgIH0KICAg
ICAgICAgcmV0dXJuOwpAQCAtMzUxOSwxNCArMzUzNSwxNSBAQCB2b2lkIFJlbmRlckJsb2NrOjpj
bGVhckZsb2F0cygpCiAgICAgUmVuZGVyZXJUb0Zsb2F0SW5mb01hcCBmbG9hdE1hcDsKIAogICAg
IGlmIChtX2Zsb2F0aW5nT2JqZWN0cykgeworICAgICAgICBGbG9hdGluZ09iamVjdFNldCogZmxv
YXRpbmdPYmplY3RTZXQgPSBnZXRGbG9hdGluZ09iamVjdFNldCgpOwogICAgICAgICBpZiAoY2hp
bGRyZW5JbmxpbmUoKSkgewotICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXQ6Oml0ZXJhdG9y
IGVuZCA9IG1fZmxvYXRpbmdPYmplY3RzLT5lbmQoKTsKLSAgICAgICAgICAgIGZvciAoRmxvYXRp
bmdPYmplY3RTZXQ6Oml0ZXJhdG9yIGl0ID0gbV9mbG9hdGluZ09iamVjdHMtPmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXQ6Oml0ZXJhdG9y
IGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LT5lbmQoKTsKKyAgICAgICAgICAgIGZvciAoRmxvYXRp
bmdPYmplY3RTZXQ6Oml0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQtPmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmID0gKml0
OwogICAgICAgICAgICAgICAgIGZsb2F0TWFwLmFkZChmLT5tX3JlbmRlcmVyLCBmKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBkZWxldGVBbGxWYWx1ZXMoKm1f
ZmxvYXRpbmdPYmplY3RzKTsKKyAgICAgICAgICAgIGRlbGV0ZUFsbFZhbHVlcygqZmxvYXRpbmdP
YmplY3RTZXQpOwogICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+Y2xlYXIoKTsKICAgICB9CiAK
QEAgLTM1NzMsOCArMzU5MCw5IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNsZWFyRmxvYXRzKCkKICAg
ICAgICAgaW50IGNoYW5nZUxvZ2ljYWxUb3AgPSBudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsK
ICAgICAgICAgaW50IGNoYW5nZUxvZ2ljYWxCb3R0b20gPSBudW1lcmljX2xpbWl0czxpbnQ+Ojpt
aW4oKTsKICAgICAgICAgaWYgKG1fZmxvYXRpbmdPYmplY3RzKSB7Ci0gICAgICAgICAgICBGbG9h
dGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IG1fZmxvYXRpbmdPYmplY3RzLT5lbmQoKTsKLSAg
ICAgICAgICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IG1fZmxvYXRpbmdP
YmplY3RzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIEZsb2F0aW5n
T2JqZWN0U2V0KiBmbG9hdGluZ09iamVjdFNldCA9IGdldEZsb2F0aW5nT2JqZWN0U2V0KCk7Cisg
ICAgICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0aW5nT2JqZWN0
U2V0LT5lbmQoKTsKKyAgICAgICAgICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBp
dCA9IGZsb2F0aW5nT2JqZWN0U2V0LT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAg
ICAgICAgICAgICBGbG9hdGluZ09iamVjdCogZiA9ICppdDsKICAgICAgICAgICAgICAgICBGbG9h
dGluZ09iamVjdCogb2xkRmxvYXRpbmdPYmplY3QgPSBmbG9hdE1hcC5nZXQoZi0+bV9yZW5kZXJl
cik7CiAgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxCb3R0b20gPSBsb2dpY2FsQm90dG9tRm9y
RmxvYXQoZik7CkBAIC0zNjIxLDggKzM2MzksOCBAQCBpbnQgUmVuZGVyQmxvY2s6OmFkZE92ZXJo
YW5naW5nRmxvYXRzKFJlCiAKICAgICAvLyBGbG9hdHMgdGhhdCB3aWxsIHJlbWFpbiB0aGUgY2hp
bGQncyByZXNwb25zaWJpbGl0eSB0byBwYWludCBzaG91bGQgZmFjdG9yIGludG8gaXRzCiAgICAg
Ly8gb3ZlcmZsb3cuCi0gICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBjaGlsZEVuZCA9IGNo
aWxkLT5tX2Zsb2F0aW5nT2JqZWN0cy0+ZW5kKCk7Ci0gICAgZm9yIChGbG9hdGluZ09iamVjdFNl
dEl0ZXJhdG9yIGNoaWxkSXQgPSBjaGlsZC0+bV9mbG9hdGluZ09iamVjdHMtPmJlZ2luKCk7IGNo
aWxkSXQgIT0gY2hpbGRFbmQ7ICsrY2hpbGRJdCkgeworICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRl
cmF0b3IgY2hpbGRFbmQgPSBjaGlsZC0+Z2V0RmxvYXRpbmdPYmplY3RTZXQoKS0+ZW5kKCk7Cisg
ICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGNoaWxkSXQgPSBjaGlsZC0+Z2V0Rmxv
YXRpbmdPYmplY3RTZXQoKS0+YmVnaW4oKTsgY2hpbGRJdCAhPSBjaGlsZEVuZDsgKytjaGlsZEl0
KSB7CiAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiByID0gKmNoaWxkSXQ7CiAgICAgICAgIGludCBs
b2dpY2FsQm90dG9tID0gY2hpbGQtPmxvZ2ljYWxUb3AoKSArIGxvZ2ljYWxCb3R0b21Gb3JGbG9h
dChyKTsKICAgICAgICAgbG93ZXN0RmxvYXRMb2dpY2FsQm90dG9tID0gbWF4KGxvd2VzdEZsb2F0
TG9naWNhbEJvdHRvbSwgbG9naWNhbEJvdHRvbSk7CkBAIC0zNjQ4LDkgKzM2NjYsMTAgQEAgaW50
IFJlbmRlckJsb2NrOjphZGRPdmVyaGFuZ2luZ0Zsb2F0cyhSZQogCiAgICAgICAgICAgICAgICAg
Ly8gV2UgY3JlYXRlIHRoZSBmbG9hdGluZyBvYmplY3QgbGlzdCBsYXppbHkuCiAgICAgICAgICAg
ICAgICAgaWYgKCFtX2Zsb2F0aW5nT2JqZWN0cykKLSAgICAgICAgICAgICAgICAgICAgbV9mbG9h
dGluZ09iamVjdHMgPSBhZG9wdFB0cihuZXcgRmxvYXRpbmdPYmplY3RTZXQpOworICAgICAgICAg
ICAgICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cyA9IGFkb3B0UHRyKG5ldyBGbG9hdGluZ09iamVj
dHMpOwogCi0gICAgICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPmFkZChmbG9hdGluZ09i
aik7CisgICAgICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPmluY3JlYXNlRmxvYXRzQ291
bnQoZmxvYXRpbmdPYmotPnR5cGUoKSk7CisgICAgICAgICAgICAgICAgZ2V0RmxvYXRpbmdPYmpl
Y3RTZXQoKS0+YWRkKGZsb2F0aW5nT2JqKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgIGlmIChtYWtlQ2hpbGRQYWludE90aGVyRmxvYXRzICYmICFyLT5tX3No
b3VsZFBhaW50ICYmICFyLT5tX3JlbmRlcmVyLT5oYXNTZWxmUGFpbnRpbmdMYXllcigpICYmCkBA
IC0zNjgwLDExICszNjk5LDEzIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkZEludHJ1ZGluZ0Zsb2F0
cyhSZW4KIAogICAgIGxvZ2ljYWxMZWZ0T2Zmc2V0ICs9IChzdHlsZSgpLT5pc0hvcml6b250YWxX
cml0aW5nTW9kZSgpID8gbWFyZ2luTGVmdCgpIDogbWFyZ2luVG9wKCkpOwogCi0gICAgRmxvYXRp
bmdPYmplY3RTZXRJdGVyYXRvciBwcmV2RW5kID0gcHJldi0+bV9mbG9hdGluZ09iamVjdHMtPmVu
ZCgpOwotICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBwcmV2SXQgPSBwcmV2LT5t
X2Zsb2F0aW5nT2JqZWN0cy0+YmVnaW4oKTsgcHJldkl0ICE9IHByZXZFbmQ7ICsrcHJldkl0KSB7
CisgICAgRmxvYXRpbmdPYmplY3RTZXQqIGZsb2F0aW5nT2JqZWN0U2V0ID0gZ2V0RmxvYXRpbmdP
YmplY3RTZXQoKTsKKyAgICBGbG9hdGluZ09iamVjdFNldCogcHJldlNldCA9IHByZXYtPmdldEZs
b2F0aW5nT2JqZWN0U2V0KCk7CisgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBwcmV2RW5k
ID0gcHJldlNldC0+ZW5kKCk7CisgICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIHBy
ZXZJdCA9IHByZXZTZXQtPmJlZ2luKCk7IHByZXZJdCAhPSBwcmV2RW5kOyArK3ByZXZJdCkgewog
ICAgICAgICBGbG9hdGluZ09iamVjdCogciA9ICpwcmV2SXQ7CiAgICAgICAgIGlmIChsb2dpY2Fs
Qm90dG9tRm9yRmxvYXQocikgPiBsb2dpY2FsVG9wT2Zmc2V0KSB7Ci0gICAgICAgICAgICBpZiAo
IW1fZmxvYXRpbmdPYmplY3RzIHx8ICFtX2Zsb2F0aW5nT2JqZWN0cy0+Y29udGFpbnMocikpIHsK
KyAgICAgICAgICAgIGlmICghZmxvYXRpbmdPYmplY3RTZXQgfHwgIWZsb2F0aW5nT2JqZWN0U2V0
LT5jb250YWlucyhyKSkgewogICAgICAgICAgICAgICAgIGludCBsZWZ0T2Zmc2V0ID0gc3R5bGUo
KS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGxvZ2ljYWxMZWZ0T2Zmc2V0IDogbG9naWNh
bFRvcE9mZnNldDsKICAgICAgICAgICAgICAgICBpbnQgdG9wT2Zmc2V0ID0gc3R5bGUoKS0+aXNI
b3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGxvZ2ljYWxUb3BPZmZzZXQgOiBsb2dpY2FsTGVmdE9m
ZnNldDsKICAgICAgICAgICAgICAgICAKQEAgLTM3MDcsOCArMzcyOCw5IEBAIHZvaWQgUmVuZGVy
QmxvY2s6OmFkZEludHJ1ZGluZ0Zsb2F0cyhSZW4KICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICAvLyBXZSBjcmVhdGUgdGhlIGZsb2F0aW5nIG9iamVjdCBsaXN0IGxhemlseS4KICAg
ICAgICAgICAgICAgICBpZiAoIW1fZmxvYXRpbmdPYmplY3RzKQotICAgICAgICAgICAgICAgICAg
ICBtX2Zsb2F0aW5nT2JqZWN0cyA9IGFkb3B0UHRyKG5ldyBGbG9hdGluZ09iamVjdFNldCk7Ci0g
ICAgICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPmFkZChmbG9hdGluZ09iaik7CisgICAg
ICAgICAgICAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzID0gYWRvcHRQdHIobmV3IEZsb2F0aW5n
T2JqZWN0cyk7CisgICAgICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPmluY3JlYXNlRmxv
YXRzQ291bnQoZmxvYXRpbmdPYmotPnR5cGUoKSk7CisgICAgICAgICAgICAgICAgZ2V0RmxvYXRp
bmdPYmplY3RTZXQoKS0+YWRkKGZsb2F0aW5nT2JqKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgIH0KQEAgLTM3MjIsNyArMzc0NCw3IEBAIGJvb2wgUmVuZGVyQmxvY2s6OmF2b2lkc0Zs
b2F0cygpIGNvbnN0CiAKIGJvb2wgUmVuZGVyQmxvY2s6OmNvbnRhaW5zRmxvYXQoUmVuZGVyQm94
KiByZW5kZXJlcikKIHsKLSAgICByZXR1cm4gbV9mbG9hdGluZ09iamVjdHMgJiYgbV9mbG9hdGlu
Z09iamVjdHMtPmNvbnRhaW5zPFJlbmRlckJveCosIEZsb2F0aW5nT2JqZWN0SGFzaFRyYW5zbGF0
b3I+KHJlbmRlcmVyKTsKKyAgICByZXR1cm4gbV9mbG9hdGluZ09iamVjdHMgJiYgZ2V0RmxvYXRp
bmdPYmplY3RTZXQoKS0+Y29udGFpbnM8UmVuZGVyQm94KiwgRmxvYXRpbmdPYmplY3RIYXNoVHJh
bnNsYXRvcj4ocmVuZGVyZXIpOwogfQogCiB2b2lkIFJlbmRlckJsb2NrOjptYXJrQWxsRGVzY2Vu
ZGFudHNXaXRoRmxvYXRzRm9yTGF5b3V0KFJlbmRlckJveCogZmxvYXRUb1JlbW92ZSwgYm9vbCBp
bkxheW91dCkKQEAgLTM4ODAsOCArMzkwMiw5IEBAIGJvb2wgUmVuZGVyQmxvY2s6OmhpdFRlc3RG
bG9hdHMoY29uc3QgSGkKICAgICAgICAgdHkgKz0gdG9SZW5kZXJWaWV3KHRoaXMpLT5mcmFtZVZp
ZXcoKS0+c2Nyb2xsWSgpOwogICAgIH0KIAotICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3Ig
YmVnaW4gPSBtX2Zsb2F0aW5nT2JqZWN0cy0+YmVnaW4oKTsKLSAgICBmb3IgKEZsb2F0aW5nT2Jq
ZWN0U2V0SXRlcmF0b3IgaXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+ZW5kKCk7IGl0ICE9IGJlZ2lu
OykgeworICAgIEZsb2F0aW5nT2JqZWN0U2V0KiBmbG9hdGluZ09iamVjdFNldCA9IGdldEZsb2F0
aW5nT2JqZWN0U2V0KCk7CisgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBiZWdpbiA9IGZs
b2F0aW5nT2JqZWN0U2V0LT5iZWdpbigpOworICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVy
YXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LT5lbmQoKTsgaXQgIT0gYmVnaW47KSB7CiAgICAg
ICAgIC0taXQ7CiAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCA9ICppdDsK
ICAgICAgICAgaWYgKGZsb2F0aW5nT2JqZWN0LT5tX3Nob3VsZFBhaW50ICYmICFmbG9hdGluZ09i
amVjdC0+bV9yZW5kZXJlci0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSkgewpAQCAtNTUwOCw4ICs1
NTMxLDkgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRqdXN0Rm9yQm9yZGVyRml0KGludAogICAgICAg
ICB9CiAgICAgICAgIAogICAgICAgICBpZiAobV9mbG9hdGluZ09iamVjdHMpIHsKLSAgICAgICAg
ICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gbV9mbG9hdGluZ09iamVjdHMtPmVu
ZCgpOwotICAgICAgICAgICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gbV9m
bG9hdGluZ09iamVjdHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAg
RmxvYXRpbmdPYmplY3RTZXQqIGZsb2F0aW5nT2JqZWN0U2V0ID0gZ2V0RmxvYXRpbmdPYmplY3RT
ZXQoKTsKKyAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRp
bmdPYmplY3RTZXQtPmVuZCgpOworICAgICAgICAgICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0
ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewogICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiByID0gKml0OwogICAgICAgICAgICAg
ICAgIC8vIE9ubHkgZXhhbWluZSB0aGUgb2JqZWN0IGlmIG91ciBtX3Nob3VsZFBhaW50IGZsYWcg
aXMgc2V0LgogICAgICAgICAgICAgICAgIGlmIChyLT5tX3Nob3VsZFBhaW50KSB7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAkocmV2aXNpb24gODAyMjkpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAt
OTUsNyArOTUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBtYXJrUG9zaXRpb25lZE9iamVjdHNGb3JM
YXlvdXQoKTsKICAgICB2aXJ0dWFsIHZvaWQgbWFya0ZvclBhZ2luYXRpb25SZWxheW91dElmTmVl
ZGVkKCk7CiAgICAgCi0gICAgYm9vbCBjb250YWluc0Zsb2F0cygpIHsgcmV0dXJuIG1fZmxvYXRp
bmdPYmplY3RzICYmICFtX2Zsb2F0aW5nT2JqZWN0cy0+aXNFbXB0eSgpOyB9CisgICAgYm9vbCBj
b250YWluc0Zsb2F0cygpIHsgcmV0dXJuIG1fZmxvYXRpbmdPYmplY3RzICYmICFnZXRGbG9hdGlu
Z09iamVjdFNldCgpLT5pc0VtcHR5KCk7IH0KICAgICBib29sIGNvbnRhaW5zRmxvYXQoUmVuZGVy
Qm94Kik7CiAKICAgICBpbnQgYXZhaWxhYmxlTG9naWNhbFdpZHRoRm9yTGluZShpbnQgcG9zaXRp
b24sIGJvb2wgZmlyc3RMaW5lKSBjb25zdDsKQEAgLTcxMiw3ICs3MTIsNDMgQEAgcHJpdmF0ZToK
ICAgICB9OwogICAgIHR5cGVkZWYgTGlzdEhhc2hTZXQ8RmxvYXRpbmdPYmplY3QqLCA0LCBGbG9h
dGluZ09iamVjdEhhc2hGdW5jdGlvbnM+IEZsb2F0aW5nT2JqZWN0U2V0OwogICAgIHR5cGVkZWYg
RmxvYXRpbmdPYmplY3RTZXQ6OmNvbnN0X2l0ZXJhdG9yIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0
b3I7Ci0gICAgT3duUHRyPEZsb2F0aW5nT2JqZWN0U2V0PiBtX2Zsb2F0aW5nT2JqZWN0czsKKyAg
ICBzdHJ1Y3QgRmxvYXRpbmdPYmplY3RzIHsKKyAgICAgICAgRmxvYXRpbmdPYmplY3RzKCkKKyAg
ICAgICAgICAgIDogbV9mbG9hdGluZ09iamVjdFNldChuZXcgRmxvYXRpbmdPYmplY3RTZXQpCisg
ICAgICAgICAgICAsIG1fbGVmdEZsb2F0c0NvdW50KDApCisgICAgICAgICAgICAsIG1fcmlnaHRG
bG9hdHNDb3VudCgwKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICB2aXJ0dWFsIH5G
bG9hdGluZ09iamVjdHMoKSB7QVNTRVJUKG1fZmxvYXRpbmdPYmplY3RTZXQpOyBkZWxldGUgbV9m
bG9hdGluZ09iamVjdFNldDt9CisKKyAgICAgICAgdm9pZCBjbGVhcigpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIEFTU0VSVChtX2Zsb2F0aW5nT2JqZWN0U2V0KTsKKyAgICAgICAgICAgIG1fZmxv
YXRpbmdPYmplY3RTZXQtPmNsZWFyKCk7CisgICAgICAgICAgICBtX2xlZnRGbG9hdHNDb3VudCA9
IDA7CisgICAgICAgICAgICBtX3JpZ2h0RmxvYXRzQ291bnQgPSAwOworICAgICAgICB9CisKKyAg
ICAgICAgdm9pZCBpbmNyZWFzZUZsb2F0c0NvdW50KEZsb2F0aW5nT2JqZWN0OjpUeXBlIHR5cGUp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHR5cGUgPT0gRmxvYXRpbmdPYmplY3Q6OkZsb2F0TGVm
dCA/IG1fbGVmdEZsb2F0c0NvdW50KysgOiBtX3JpZ2h0RmxvYXRzQ291bnQrKzsKKyAgICAgICAg
fQorICAgICAgICB2b2lkIGRlY3JlYXNlRmxvYXRzQ291bnQoRmxvYXRpbmdPYmplY3Q6OlR5cGUg
dHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAgdHlwZSA9PSBGbG9hdGluZ09iamVjdDo6Rmxv
YXRMZWZ0ID8gbV9sZWZ0RmxvYXRzQ291bnQtLSA6IG1fcmlnaHRGbG9hdHNDb3VudC0tOworICAg
ICAgICAgICAgQVNTRVJUKG1fbGVmdEZsb2F0c0NvdW50ID49IDAgJiYgbV9yaWdodEZsb2F0c0Nv
dW50ID49IDApOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBoYXNMZWZ0RmxvYXRzKCkge3Jl
dHVybiBtX2xlZnRGbG9hdHNDb3VudCA+IDA7fQorICAgICAgICBib29sIGhhc1JpZ2h0RmxvYXRz
KCkge3JldHVybiBtX3JpZ2h0RmxvYXRzQ291bnQgPiAwO30KKworICAgICAgICBGbG9hdGluZ09i
amVjdFNldCogbV9mbG9hdGluZ09iamVjdFNldDsKKyAgICAgICAgaW50IG1fbGVmdEZsb2F0c0Nv
dW50OworICAgICAgICBpbnQgbV9yaWdodEZsb2F0c0NvdW50OworICAgIH07CisgICAgT3duUHRy
PEZsb2F0aW5nT2JqZWN0cz4gbV9mbG9hdGluZ09iamVjdHM7CisgICAgRmxvYXRpbmdPYmplY3RT
ZXQqIGdldEZsb2F0aW5nT2JqZWN0U2V0KCkgY29uc3Qge3JldHVybiBtX2Zsb2F0aW5nT2JqZWN0
cyA/IG1fZmxvYXRpbmdPYmplY3RzLT5tX2Zsb2F0aW5nT2JqZWN0U2V0IDogMDt9CiAgICAgCiAg
ICAgdHlwZWRlZiBQb3NpdGlvbmVkT2JqZWN0c0xpc3RIYXNoU2V0Ojpjb25zdF9pdGVyYXRvciBJ
dGVyYXRvcjsKICAgICBPd25QdHI8UG9zaXRpb25lZE9iamVjdHNMaXN0SGFzaFNldD4gbV9wb3Np
dGlvbmVkT2JqZWN0czsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
a0xpbmVMYXlvdXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCShyZXZpc2lvbiA4MDIyOSkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02MTgsNyArNjE4LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4o
YgogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgRmxvYXRpbmdPYmplY3QqIGxh
c3RGbG9hdCA9IChtX2Zsb2F0aW5nT2JqZWN0cyAmJiAhbV9mbG9hdGluZ09iamVjdHMtPmlzRW1w
dHkoKSkgPyBtX2Zsb2F0aW5nT2JqZWN0cy0+bGFzdCgpIDogMDsKKyAgICAgICAgRmxvYXRpbmdP
YmplY3QqIGxhc3RGbG9hdCA9IChtX2Zsb2F0aW5nT2JqZWN0cyAmJiAhZ2V0RmxvYXRpbmdPYmpl
Y3RTZXQoKS0+aXNFbXB0eSgpKSA/IGdldEZsb2F0aW5nT2JqZWN0U2V0KCktPmxhc3QoKSA6IDA7
CiAKICAgICAgICAgTGluZU1pZHBvaW50U3RhdGUmIGxpbmVNaWRwb2ludFN0YXRlID0gcmVzb2x2
ZXIubWlkcG9pbnRTdGF0ZSgpOwogCkBAIC02ODgsNyArNjg4LDcgQEAgdm9pZCBSZW5kZXJCbG9j
azo6bGF5b3V0SW5saW5lQ2hpbGRyZW4oYgogICAgICAgICAgICAgYm9vbCBoeXBoZW5hdGVkOwog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBJbmxpbmVJdGVyYXRvciBvbGRFbmQgPSBlbmQ7Ci0g
ICAgICAgICAgICBGbG9hdGluZ09iamVjdCogbGFzdEZsb2F0RnJvbVByZXZpb3VzTGluZSA9ICht
X2Zsb2F0aW5nT2JqZWN0cyAmJiAhbV9mbG9hdGluZ09iamVjdHMtPmlzRW1wdHkoKSkgPyBtX2Zs
b2F0aW5nT2JqZWN0cy0+bGFzdCgpIDogMDsKKyAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBs
YXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lID0gKG1fZmxvYXRpbmdPYmplY3RzICYmICFnZXRGbG9h
dGluZ09iamVjdFNldCgpLT5pc0VtcHR5KCkpID8gZ2V0RmxvYXRpbmdPYmplY3RTZXQoKS0+bGFz
dCgpIDogMDsKICAgICAgICAgICAgIGVuZCA9IGZpbmROZXh0TGluZUJyZWFrKHJlc29sdmVyLCBm
aXJzdExpbmUsIGlzTGluZUVtcHR5LCBsaW5lQnJlYWtJdGVyYXRvckluZm8sIHByZXZpb3VzTGlu
ZUJyb2tlQ2xlYW5seSwgaHlwaGVuYXRlZCwgJmNsZWFyLCBsYXN0RmxvYXRGcm9tUHJldmlvdXNM
aW5lKTsKICAgICAgICAgICAgIGlmIChyZXNvbHZlci5wb3NpdGlvbigpLmF0RW5kKCkpIHsKICAg
ICAgICAgICAgICAgICByZXNvbHZlci5kZWxldGVSdW5zKCk7CkBAIC04MzksMTAgKzgzOSwxMSBA
QCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVDaGlsZHJlbihiCiAgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0cyAmJiBsYXN0Um9vdEJveCgpKSB7
Ci0gICAgICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IG1fZmxvYXRp
bmdPYmplY3RzLT5iZWdpbigpOwotICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRl
cmF0b3IgZW5kID0gbV9mbG9hdGluZ09iamVjdHMtPmVuZCgpOworICAgICAgICAgICAgICAgIEZs
b2F0aW5nT2JqZWN0U2V0KiBmbG9hdGluZ09iamVjdFNldCA9IGdldEZsb2F0aW5nT2JqZWN0U2V0
KCk7CisgICAgICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0
aW5nT2JqZWN0U2V0LT5iZWdpbigpOworICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0
SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQtPmVuZCgpOwogICAgICAgICAgICAgICAg
IGlmIChsYXN0RmxvYXQpIHsKLSAgICAgICAgICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJ
dGVyYXRvciBsYXN0RmxvYXRJdGVyYXRvciA9IG1fZmxvYXRpbmdPYmplY3RzLT5maW5kKGxhc3RG
bG9hdCk7CisgICAgICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgbGFz
dEZsb2F0SXRlcmF0b3IgPSBmbG9hdGluZ09iamVjdFNldC0+ZmluZChsYXN0RmxvYXQpOwogICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQobGFzdEZsb2F0SXRlcmF0b3IgIT0gZW5kKTsKICAgICAg
ICAgICAgICAgICAgICAgKytsYXN0RmxvYXRJdGVyYXRvcjsKICAgICAgICAgICAgICAgICAgICAg
aXQgPSBsYXN0RmxvYXRJdGVyYXRvcjsKQEAgLTg1Niw3ICs4NTcsNyBAQCB2b2lkIFJlbmRlckJs
b2NrOjpsYXlvdXRJbmxpbmVDaGlsZHJlbihiCiAgICAgICAgICAgICAgICAgICAgICAgICBjaGVj
a0ZvckVuZExpbmVNYXRjaCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICBmbG9hdEluZGV4
Kys7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGxhc3RGbG9hdCA9ICFtX2Zs
b2F0aW5nT2JqZWN0cy0+aXNFbXB0eSgpID8gbV9mbG9hdGluZ09iamVjdHMtPmxhc3QoKSA6IDA7
CisgICAgICAgICAgICAgICAgbGFzdEZsb2F0ID0gIWZsb2F0aW5nT2JqZWN0U2V0LT5pc0VtcHR5
KCkgPyBmbG9hdGluZ09iamVjdFNldC0+bGFzdCgpIDogMDsKICAgICAgICAgICAgIH0KIAogICAg
ICAgICAgICAgbGluZU1pZHBvaW50U3RhdGUucmVzZXQoKTsKQEAgLTkyMCwxNyArOTIxLDE4IEBA
IHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dElubGluZUNoaWxkcmVuKGIKICAgICAgICAgICAgICAg
ICB0cmFpbGluZ0Zsb2F0c0xpbmVCb3gtPnNldEJsb2NrTG9naWNhbEhlaWdodChsb2dpY2FsSGVp
Z2h0KCkpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0
ZXJhdG9yIGl0ID0gbV9mbG9hdGluZ09iamVjdHMtPmJlZ2luKCk7Ci0gICAgICAgICAgICBGbG9h
dGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IG1fZmxvYXRpbmdPYmplY3RzLT5lbmQoKTsKKyAg
ICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0KiBmbG9hdGluZ09iamVjdFNldCA9IGdldEZsb2F0
aW5nT2JqZWN0U2V0KCk7CisgICAgICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0
ID0gZmxvYXRpbmdPYmplY3RTZXQtPmJlZ2luKCk7CisgICAgICAgICAgICBGbG9hdGluZ09iamVj
dFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LT5lbmQoKTsKICAgICAgICAgICAg
IGlmIChsYXN0RmxvYXQpIHsKLSAgICAgICAgICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJh
dG9yIGxhc3RGbG9hdEl0ZXJhdG9yID0gbV9mbG9hdGluZ09iamVjdHMtPmZpbmQobGFzdEZsb2F0
KTsKKyAgICAgICAgICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGxhc3RGbG9hdEl0
ZXJhdG9yID0gZmxvYXRpbmdPYmplY3RTZXQtPmZpbmQobGFzdEZsb2F0KTsKICAgICAgICAgICAg
ICAgICBBU1NFUlQobGFzdEZsb2F0SXRlcmF0b3IgIT0gZW5kKTsKICAgICAgICAgICAgICAgICAr
K2xhc3RGbG9hdEl0ZXJhdG9yOwogICAgICAgICAgICAgICAgIGl0ID0gbGFzdEZsb2F0SXRlcmF0
b3I7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KQog
ICAgICAgICAgICAgICAgIGxhc3RSb290Qm94KCktPmZsb2F0cygpLmFwcGVuZCgoKml0KS0+bV9y
ZW5kZXJlcik7Ci0gICAgICAgICAgICBsYXN0RmxvYXQgPSAhbV9mbG9hdGluZ09iamVjdHMtPmlz
RW1wdHkoKSA/IG1fZmxvYXRpbmdPYmplY3RzLT5sYXN0KCkgOiAwOworICAgICAgICAgICAgbGFz
dEZsb2F0ID0gIWZsb2F0aW5nT2JqZWN0U2V0LT5pc0VtcHR5KCkgPyBmbG9hdGluZ09iamVjdFNl
dC0+bGFzdCgpIDogMDsKICAgICAgICAgfQogICAgICAgICBzaXplX3QgZmxvYXRDb3VudCA9IGZs
b2F0cy5zaXplKCk7CiAgICAgICAgIC8vIEZsb2F0cyB0aGF0IGRpZCBub3QgaGF2ZSBsYXlvdXQg
ZGlkIG5vdCByZXBhaW50IHdoZW4gd2UgbGFpZCB0aGVtIG91dC4gVGhleSB3b3VsZCBoYXZlCkBA
IC0xMTY3LDggKzExNjksOSBAQCBib29sIFJlbmRlckJsb2NrOjptYXRjaGVkRW5kTGluZShjb25z
dCBJCiAKICAgICAgICAgaW50IGxvZ2ljYWxCb3R0b20gPSBsYXN0TGluZS0+YmxvY2tMb2dpY2Fs
SGVpZ2h0KCkgKyBhYnMoZGVsdGEpOwogCi0gICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0
b3IgZW5kID0gbV9mbG9hdGluZ09iamVjdHMtPmVuZCgpOwotICAgICAgICBmb3IgKEZsb2F0aW5n
T2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+YmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7CisgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0KiBmbG9hdGluZ09iamVjdFNl
dCA9IGdldEZsb2F0aW5nT2JqZWN0U2V0KCk7CisgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRl
cmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQtPmVuZCgpOworICAgICAgICBmb3IgKEZsb2F0
aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC0+YmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICBGbG9hdGluZ09iamVjdCogZiA9ICppdDsKICAg
ICAgICAgICAgIGlmIChsb2dpY2FsQm90dG9tRm9yRmxvYXQoZikgPj0gbG9naWNhbFRvcCAmJiBs
b2dpY2FsQm90dG9tRm9yRmxvYXQoZikgPCBsb2dpY2FsQm90dG9tKQogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKQEAgLTEyMDMsOCArMTIwNiw5IEBAIGJvb2wgUmVuZGVyQmxvY2s6Om1h
dGNoZWRFbmRMaW5lKGNvbnN0IEkKIAogICAgICAgICAgICAgICAgIGludCBsb2dpY2FsQm90dG9t
ID0gbGFzdExpbmUtPmJsb2NrTG9naWNhbEhlaWdodCgpICsgYWJzKGRlbHRhKTsKIAotICAgICAg
ICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gbV9mbG9hdGluZ09iamVj
dHMtPmVuZCgpOwotICAgICAgICAgICAgICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRv
ciBpdCA9IG1fZmxvYXRpbmdPYmplY3RzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAg
ICAgICAgICAgICAgICBGbG9hdGluZ09iamVjdFNldCogZmxvYXRpbmdPYmplY3RTZXQgPSBnZXRG
bG9hdGluZ09iamVjdFNldCgpOworICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRl
cmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQtPmVuZCgpOworICAgICAgICAgICAgICAgIGZv
ciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LT5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgICAgICAgICAgRmxvYXRpbmdPYmpl
Y3QqIGYgPSAqaXQ7CiAgICAgICAgICAgICAgICAgICAgIGlmIChsb2dpY2FsQm90dG9tRm9yRmxv
YXQoZikgPj0gbG9naWNhbFRvcCAmJiBsb2dpY2FsQm90dG9tRm9yRmxvYXQoZikgPCBsb2dpY2Fs
Qm90dG9tKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwo=
</data>
<flag name="review"
          id="76538"
          type_id="1"
          status="-"
          setter="darin"
    />
    <flag name="commit-queue"
          id="76539"
          type_id="3"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>84677</attachid>
            <date>2011-03-03 18:30:38 -0800</date>
            <delta_ts>2011-03-03 19:23:48 -0800</delta_ts>
            <desc>patch addressing comment #10</desc>
            <filename>WebCore-floating-objects.part0.rev2.patch</filename>
            <type>text/plain</type>
            <size>30952</size>
            <attacher name="Yuqiang Xian">yuqiang.xian</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgwMzA0KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjIgQEAKKzIwMTEtMDMtMDMgIFl1cWlhbmcg
WGlhbiAgPHl1cWlhbmcueGlhbkBpbnRlbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgaW1wcm92ZSBsYXlvdXQgcGVyZm9ybWFuY2UgYnkgcmVk
dWNpbmcgdGhlIHRyYXZlcnNhbCB0aW1lIG9mIHRoZSBmbG9hdGluZyBvYmplY3RzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NTQ0MAorCisgICAgICAg
IFdlIG9ic2VydmVyZWQgbGFyZ2Ugb3ZlcmhlYWQgb24gdHJhdmVyc2luZyB0aGUgZmxvYXRpbmcg
b2JqZWN0cyBsaXN0CisgICAgICAgIGluIGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZSgpIGFuZCBs
b2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lKCkgZXNwZWNpYWxseQorICAgICAgICB3aGVuIHRoZSBs
aXN0IGJlY29tZXMgZW5vcm1vdXMsIGZvciBleGFtcGxlIGluIHRoZSBkZWZhdWx0IDMweDMwIG1h
emUgdGVzdAorICAgICAgICBmcm9tIGh0dHA6Ly9pZS5taWNyb3NvZnQuY29tL3Rlc3Rkcml2ZS9Q
ZXJmb3JtYW5jZS9NYXplU29sdmVyL0RlZmF1bHQuaHRtbAorICAgICAgICB0aGVyZSdyZSA+Mzcw
MCBmbG9hdGluZyBvYmplY3RzLiBXaGVuIHBsYWNpbmcgYSBuZXcgZmxvYXRpbmcgb2JqZWN0IHRo
ZQorICAgICAgICBlbnRpcmUgbGlzdCAoZnJvbSBiZWdpbiB0byBlbmQpIGlzIHRyYXZlcnNlZCBm
b3IgbXVsdGlwbGUgdGltZXMuCisgICAgICAgIFRoZXJlJ3MgYSBsb3cgaGFuZ2luZyBmcnVpdCB0
byByZWR1Y2UgdGhlIGNoYW5jZXMgdG8gZG8gdGhlIHRyYXZlcnNhbAorICAgICAgICB3aGljaCBp
cyBlc3BlY2lhbGx5IGFwcGxpY2FibGUgaW4gbG9naWNhbExlZnRPZmZzZXRGb3JMaW5lIGFuZCBs
b2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lLgorICAgICAgICBBcyB0aGUgdHdvIHJvdXRpbmVzIGVp
dGhlciBjYXJlcyBhYm91dCBGbG9hdExlZnQgb2JqZWN0cyBvciBGbG9hdFJpZ2h0IG9iamVjdHMg
b25seSwKKyAgICAgICAgaWYgd2Uga25vdyB0aGVyZSdzIG5vIGNvcnJlc3BvbmRpbmcgdHlwZSBm
bG9hdGluZyBvYmplY3RzIGluIHRoZSBsaXN0CisgICAgICAgIHdlIGNhbiBhdm9pZCB0aGUgdHJh
dmVyc2FsIGFjdHVhbGx5LiBPbmUgdGhpbmcgd2UgY291bGQgZG8gaXMgdG8gcmVjb3JkCisgICAg
ICAgIHRoZSBudW1iZXIgb2YgRmxvYXRMZWZ0IG9iamVjdHMgYW5kIHRoZSBudW1iZXIgb2YgRmxv
YXRSaWdodCBvYmplY3RzIGFuZAorICAgICAgICBhZGQgYSBjaGVjayBiZWZvcmUgZG9pbmcgdGhl
IHRyYXZlcnNhbC4gVGhpcyBjYW4gcmVkdWNlIHRoZSB0aW1lIGJ5IDQ1JQorICAgICAgICB0byBy
ZXNvbHZlIHRoZSAzMHgzMCBNYXplIG1lYXN1cmVkIG9uIE40NzAgTmV0Ym9vayBNZWVHbyB1c2lu
ZyBsYXRlc3QKKyAgICAgICAgQ2hyb21pdW0gYnJvd3NlciAxMSAoZnJvbSA1MDNzIHRvIDI2OXMp
LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgcmVseWluZyBvbiBleGlzdGluZyBsYXlvdXQgdGVz
dHMuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQmxvY2s6On5SZW5kZXJCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCbG9jazo6YWRkT3ZlcmZsb3dGcm9tRmxvYXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJsb2NrOjpyZXBhaW50T3ZlcmhhbmdpbmdGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQmxvY2s6OnBhaW50RmxvYXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpz
ZWxlY3Rpb25HYXBzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjppbnNlcnRGbG9h
dGluZ09iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cmVtb3ZlRmxvYXRp
bmdPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnJlbW92ZUZsb2F0aW5n
T2JqZWN0c0JlbG93KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpwb3NpdGlvbk5l
d0Zsb2F0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cG9zaXRpb25OZXdGbG9h
dE9uTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bG9naWNhbExlZnRPZmZz
ZXRGb3JMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsb2dpY2FsUmlnaHRP
ZmZzZXRGb3JMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpuZXh0RmxvYXRM
b2dpY2FsQm90dG9tQmVsb3cpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Omxvd2Vz
dEZsb2F0TG9naWNhbEJvdHRvbSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Y2xl
YXJGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmFkZE92ZXJoYW5naW5n
RmxvYXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjphZGRJbnRydWRpbmdGbG9h
dHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmNvbnRhaW5zRmxvYXQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmhpdFRlc3RGbG9hdHMpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQmxvY2s6OmFkanVzdEZvckJvcmRlckZpdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RzOjpjbGVhcik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RzOjppbmNyZWFzZU9iamVjdHNDb3VudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RzOjpkZWNyZWFzZU9i
amVjdHNDb3VudCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmg6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Y29udGFpbnNGbG9hdHMpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6RmxvYXRpbmdPYmplY3RzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdHM6Omhhc0xlZnRPYmplY3Rz
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdHM6Omhhc1Jp
Z2h0T2JqZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmpl
Y3RzOjpzZXQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxheW91dElubGluZUNoaWxkcmVuKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjptYXRjaGVkRW5kTGluZSk6CisKIDIwMTEt
MDMtMDMgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIEJ1
aWxkIGZpeC4gTmVlZCB3aW4vY1VSTCBEb3dubG9hZEJ1bmRsZSBzdHViLgpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lvbiA4MDMwNCkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEyMyw3ICsxMjMsNyBAQCBSZW5kZXJCbG9jazo6UmVuZGVyQmxvY2soTm9kZSogbm9kZSkKIFJl
bmRlckJsb2NrOjp+UmVuZGVyQmxvY2soKQogewogICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0cykK
LSAgICAgICAgZGVsZXRlQWxsVmFsdWVzKCptX2Zsb2F0aW5nT2JqZWN0cyk7CisgICAgICAgIGRl
bGV0ZUFsbFZhbHVlcygqbV9mbG9hdGluZ09iamVjdHMtPnNldCgpKTsKICAgICAKICAgICBpZiAo
aGFzQ29sdW1ucygpKQogICAgICAgICBkZWxldGUgZ0NvbHVtbkluZm9NYXAtPnRha2UodGhpcyk7
CkBAIC0xMzgwLDggKzEzODAsOSBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGRPdmVyZmxvd0Zyb21G
bG9hdHMoCiAgICAgaWYgKCFtX2Zsb2F0aW5nT2JqZWN0cykKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+ZW5k
KCk7Ci0gICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gbV9mbG9hdGluZ09i
amVjdHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgIEZsb2F0aW5nT2JqZWN0U2V0
KiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICBGbG9h
dGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LT5lbmQoKTsKKyAg
ICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC0+
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiByID0g
Kml0OwogICAgICAgICBpZiAoci0+bV9pc0Rlc2NlbmRhbnQpCiAgICAgICAgICAgICBhZGRPdmVy
Zmxvd0Zyb21DaGlsZChyLT5tX3JlbmRlcmVyLCBJbnRTaXplKHhQb3NpdGlvbkZvckZsb2F0SW5j
bHVkaW5nTWFyZ2luKHIpLCB5UG9zaXRpb25Gb3JGbG9hdEluY2x1ZGluZ01hcmdpbihyKSkpOwpA
QCAtMjE3Nyw4ICsyMTc4LDkgQEAgdm9pZCBSZW5kZXJCbG9jazo6cmVwYWludE92ZXJoYW5naW5n
RmxvYQogICAgICAgICAvLyBGSVhNRTogQXZvaWQgZGlzYWJsaW5nIExheW91dFN0YXRlLiBBdCB0
aGUgdmVyeSBsZWFzdCwgZG9uJ3QgZGlzYWJsZSBpdCBmb3IgZmxvYXRzIG9yaWdpbmF0aW5nCiAg
ICAgICAgIC8vIGluIHRoaXMgYmxvY2suIEJldHRlciB5ZXQgd291bGQgYmUgdG8gcHVzaCBleHRy
YSBzdGF0ZSBmb3IgdGhlIGNvbnRhaW5lcnMgb2Ygb3RoZXIgZmxvYXRzLgogICAgICAgICB2aWV3
KCktPmRpc2FibGVMYXlvdXRTdGF0ZSgpOwotICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJh
dG9yIGVuZCA9IG1fZmxvYXRpbmdPYmplY3RzLT5lbmQoKTsKLSAgICAgICAgZm9yIChGbG9hdGlu
Z09iamVjdFNldEl0ZXJhdG9yIGl0ID0gbV9mbG9hdGluZ09iamVjdHMtPmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgeworICAgICAgICBGbG9hdGluZ09iamVjdFNldCogZmxvYXRpbmdPYmplY3RT
ZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CisgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0
SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQtPmVuZCgpOworICAgICAgICBmb3IgKEZs
b2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC0+YmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICBGbG9hdGluZ09iamVjdCogciA9ICppdDsK
ICAgICAgICAgICAgIC8vIE9ubHkgcmVwYWludCB0aGUgb2JqZWN0IGlmIGl0IGlzIG92ZXJoYW5n
aW5nLCBpcyBub3QgaW4gaXRzIG93biBsYXllciwgYW5kCiAgICAgICAgICAgICAvLyBpcyBvdXIg
cmVzcG9uc2liaWxpdHkgdG8gcGFpbnQgKG1fc2hvdWxkUGFpbnQgaXMgc2V0KS4gV2hlbiBwYWlu
dEFsbERlc2NlbmRhbnRzIGlzIHRydWUsIHRoZSBsYXR0ZXIKQEAgLTI1MDMsOCArMjUwNSw5IEBA
IHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50RmxvYXRzKFBhaW50SW5mbyYKICAgICBpZiAoIW1fZmxv
YXRpbmdPYmplY3RzKQogICAgICAgICByZXR1cm47CiAKLSAgICBGbG9hdGluZ09iamVjdFNldEl0
ZXJhdG9yIGVuZCA9IG1fZmxvYXRpbmdPYmplY3RzLT5lbmQoKTsKLSAgICBmb3IgKEZsb2F0aW5n
T2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+YmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7CisgICAgRmxvYXRpbmdPYmplY3RTZXQqIGZsb2F0aW5nT2JqZWN0U2V0ID0g
bV9mbG9hdGluZ09iamVjdHMtPnNldCgpOworICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3Ig
ZW5kID0gZmxvYXRpbmdPYmplY3RTZXQtPmVuZCgpOworICAgIGZvciAoRmxvYXRpbmdPYmplY3RT
ZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKICAgICAgICAgRmxvYXRpbmdPYmplY3QqIHIgPSAqaXQ7CiAgICAgICAgIC8vIE9ubHkg
cGFpbnQgdGhlIG9iamVjdCBpZiBvdXIgbV9zaG91bGRQYWludCBmbGFnIGlzIHNldC4KICAgICAg
ICAgaWYgKHItPm1fc2hvdWxkUGFpbnQgJiYgIXItPm1fcmVuZGVyZXItPmhhc1NlbGZQYWludGlu
Z0xheWVyKCkpIHsKQEAgLTI3NTUsOCArMjc1OCw5IEBAIEdhcFJlY3RzIFJlbmRlckJsb2NrOjpz
ZWxlY3Rpb25HYXBzKFJlbmQKICAgICAgICAgICAgIGZvciAoUmVuZGVyQmxvY2sqIGNiID0gY29u
dGFpbmluZ0Jsb2NrKCk7IGNiICYmICFjYi0+aXNSZW5kZXJWaWV3KCk7IGNiID0gY2ItPmNvbnRh
aW5pbmdCbG9jaygpKQogICAgICAgICAgICAgICAgIGNsaXBPdXRQb3NpdGlvbmVkT2JqZWN0cyhw
YWludEluZm8sIEludFBvaW50KGNiLT54KCksIGNiLT55KCkpLCBjYi0+bV9wb3NpdGlvbmVkT2Jq
ZWN0cy5nZXQoKSk7IC8vIEZJWE1FOiBOb3QgcmlnaHQgZm9yIGZsaXBwZWQgd3JpdGluZyBtb2Rl
cy4KICAgICAgICAgaWYgKG1fZmxvYXRpbmdPYmplY3RzKSB7Ci0gICAgICAgICAgICBGbG9hdGlu
Z09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IG1fZmxvYXRpbmdPYmplY3RzLT5lbmQoKTsKLSAgICAg
ICAgICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IG1fZmxvYXRpbmdPYmpl
Y3RzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIEZsb2F0aW5nT2Jq
ZWN0U2V0KiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAg
ICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RT
ZXQtPmVuZCgpOworICAgICAgICAgICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0
ID0gZmxvYXRpbmdPYmplY3RTZXQtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAg
ICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiByID0gKml0OwogICAgICAgICAgICAgICAgIEludFJl
Y3QgZmxvYXRCb3ggPSBJbnRSZWN0KG9mZnNldEZyb21Sb290QmxvY2sud2lkdGgoKSArIHhQb3Np
dGlvbkZvckZsb2F0SW5jbHVkaW5nTWFyZ2luKHIpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG9mZnNldEZyb21Sb290QmxvY2suaGVpZ2h0KCkgKyB5UG9zaXRp
b25Gb3JGbG9hdEluY2x1ZGluZ01hcmdpbihyKSwKQEAgLTMwNjUsMTEgKzMwNjksMTIgQEAgUmVu
ZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0KiBSZW5kZXJCbG9jawogCiAgICAgLy8gQ3JlYXRlIHRo
ZSBsaXN0IG9mIHNwZWNpYWwgb2JqZWN0cyBpZiB3ZSBkb24ndCBhbGVhZHkgaGF2ZSBvbmUKICAg
ICBpZiAoIW1fZmxvYXRpbmdPYmplY3RzKQotICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cyA9IGFk
b3B0UHRyKG5ldyBGbG9hdGluZ09iamVjdFNldCk7CisgICAgICAgIG1fZmxvYXRpbmdPYmplY3Rz
ID0gYWRvcHRQdHIobmV3IEZsb2F0aW5nT2JqZWN0cyk7CiAgICAgZWxzZSB7CiAgICAgICAgIC8v
IERvbid0IGluc2VydCB0aGUgb2JqZWN0IGFnYWluIGlmIGl0J3MgYWxyZWFkeSBpbiB0aGUgbGlz
dAotICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gbV9mbG9hdGluZ09iamVj
dHMtPmZpbmQ8UmVuZGVyQm94KiwgRmxvYXRpbmdPYmplY3RIYXNoVHJhbnNsYXRvcj4obyk7Ci0g
ICAgICAgIGlmIChpdCAhPSBtX2Zsb2F0aW5nT2JqZWN0cy0+ZW5kKCkpCisgICAgICAgIEZsb2F0
aW5nT2JqZWN0U2V0KiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQo
KTsKKyAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0
U2V0LT5maW5kPFJlbmRlckJveCosIEZsb2F0aW5nT2JqZWN0SGFzaFRyYW5zbGF0b3I+KG8pOwor
ICAgICAgICBpZiAoaXQgIT0gZmxvYXRpbmdPYmplY3RTZXQtPmVuZCgpKQogICAgICAgICAgICAg
cmV0dXJuICppdDsKICAgICB9CiAKQEAgLTMwOTYsNyArMzEwMSw4IEBAIFJlbmRlckJsb2NrOjpG
bG9hdGluZ09iamVjdCogUmVuZGVyQmxvY2sKICAgICBuZXdPYmotPm1faXNEZXNjZW5kYW50ID0g
dHJ1ZTsKICAgICBuZXdPYmotPm1fcmVuZGVyZXIgPSBvOwogCi0gICAgbV9mbG9hdGluZ09iamVj
dHMtPmFkZChuZXdPYmopOworICAgIG1fZmxvYXRpbmdPYmplY3RzLT5pbmNyZWFzZU9iamVjdHND
b3VudChuZXdPYmotPnR5cGUoKSk7CisgICAgbV9mbG9hdGluZ09iamVjdHMtPnNldCgpLT5hZGQo
bmV3T2JqKTsKICAgICAKICAgICByZXR1cm4gbmV3T2JqOwogfQpAQCAtMzEwNCw4ICszMTEwLDkg
QEAgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0KiBSZW5kZXJCbG9jawogdm9pZCBSZW5kZXJC
bG9jazo6cmVtb3ZlRmxvYXRpbmdPYmplY3QoUmVuZGVyQm94KiBvKQogewogICAgIGlmIChtX2Zs
b2F0aW5nT2JqZWN0cykgewotICAgICAgICBGbG9hdGluZ09iamVjdFNldDo6aXRlcmF0b3IgaXQg
PSBtX2Zsb2F0aW5nT2JqZWN0cy0+ZmluZDxSZW5kZXJCb3gqLCBGbG9hdGluZ09iamVjdEhhc2hU
cmFuc2xhdG9yPihvKTsKLSAgICAgICAgaWYgKGl0ICE9IG1fZmxvYXRpbmdPYmplY3RzLT5lbmQo
KSkgeworICAgICAgICBGbG9hdGluZ09iamVjdFNldCogZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zs
b2F0aW5nT2JqZWN0cy0+c2V0KCk7CisgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0OjppdGVyYXRv
ciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LT5maW5kPFJlbmRlckJveCosIEZsb2F0aW5nT2JqZWN0
SGFzaFRyYW5zbGF0b3I+KG8pOworICAgICAgICBpZiAoaXQgIT0gZmxvYXRpbmdPYmplY3RTZXQt
PmVuZCgpKSB7CiAgICAgICAgICAgICBGbG9hdGluZ09iamVjdCogciA9ICppdDsKICAgICAgICAg
ICAgIGlmIChjaGlsZHJlbklubGluZSgpKSB7CiAgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxU
b3AgPSBsb2dpY2FsVG9wRm9yRmxvYXQocik7CkBAIC0zMTIyLDcgKzMxMjksOCBAQCB2b2lkIFJl
bmRlckJsb2NrOjpyZW1vdmVGbG9hdGluZ09iamVjdChSCiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIG1hcmtMaW5lc0RpcnR5SW5CbG9ja1JhbmdlKDAsIGxvZ2ljYWxCb3R0b20p
OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPnJlbW92ZShp
dCk7CisgICAgICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+ZGVjcmVhc2VPYmplY3RzQ291bnQo
ci0+dHlwZSgpKTsKKyAgICAgICAgICAgIGZsb2F0aW5nT2JqZWN0U2V0LT5yZW1vdmUoaXQpOwog
ICAgICAgICAgICAgZGVsZXRlIHI7CiAgICAgICAgIH0KICAgICB9CkBAIC0zMTMzLDExICszMTQx
LDEzIEBAIHZvaWQgUmVuZGVyQmxvY2s6OnJlbW92ZUZsb2F0aW5nT2JqZWN0c0IKICAgICBpZiAo
IW1fZmxvYXRpbmdPYmplY3RzKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgRmxvYXRpbmdP
YmplY3QqIGN1cnIgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+bGFzdCgpOworICAgIEZsb2F0aW5nT2Jq
ZWN0U2V0KiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAg
ICBGbG9hdGluZ09iamVjdCogY3VyciA9IGZsb2F0aW5nT2JqZWN0U2V0LT5sYXN0KCk7CiAgICAg
d2hpbGUgKGN1cnIgIT0gbGFzdEZsb2F0ICYmICghY3Vyci0+aXNQbGFjZWQoKSB8fCBsb2dpY2Fs
VG9wRm9yRmxvYXQoY3VycikgPj0gbG9naWNhbE9mZnNldCkpIHsKLSAgICAgICAgbV9mbG9hdGlu
Z09iamVjdHMtPnJlbW92ZUxhc3QoKTsKKyAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPmRlY3Jl
YXNlT2JqZWN0c0NvdW50KGN1cnItPnR5cGUoKSk7CisgICAgICAgIGZsb2F0aW5nT2JqZWN0U2V0
LT5yZW1vdmVMYXN0KCk7CiAgICAgICAgIGRlbGV0ZSBjdXJyOwotICAgICAgICBjdXJyID0gbV9m
bG9hdGluZ09iamVjdHMtPmxhc3QoKTsKKyAgICAgICAgY3VyciA9IGZsb2F0aW5nT2JqZWN0U2V0
LT5sYXN0KCk7CiAgICAgfQogfQogCkBAIC0zMTQ2LDE5ICszMTU2LDIwIEBAIGJvb2wgUmVuZGVy
QmxvY2s6OnBvc2l0aW9uTmV3RmxvYXRzKCkKICAgICBpZiAoIW1fZmxvYXRpbmdPYmplY3RzKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAobV9mbG9hdGluZ09iamVjdHMtPmlzRW1w
dHkoKSkKKyAgICBGbG9hdGluZ09iamVjdFNldCogZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0
aW5nT2JqZWN0cy0+c2V0KCk7CisgICAgaWYgKGZsb2F0aW5nT2JqZWN0U2V0LT5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIElmIGFsbCBmbG9hdHMgaGF2ZSBhbHJl
YWR5IGJlZW4gcG9zaXRpb25lZCwgdGhlbiB3ZSBoYXZlIG5vIHdvcmsgdG8gZG8uCi0gICAgaWYg
KG1fZmxvYXRpbmdPYmplY3RzLT5sYXN0KCktPmlzUGxhY2VkKCkpCisgICAgaWYgKGZsb2F0aW5n
T2JqZWN0U2V0LT5sYXN0KCktPmlzUGxhY2VkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIC8vIE1vdmUgYmFja3dhcmRzIHRocm91Z2ggb3VyIGZsb2F0aW5nIG9iamVjdCBsaXN0IHVu
dGlsIHdlIGZpbmQgYSBmbG9hdCB0aGF0IGhhcwogICAgIC8vIGFscmVhZHkgYmVlbiBwb3NpdGlv
bmVkLiAgVGhlbiB3ZSdsbCBiZSBhYmxlIHRvIG1vdmUgZm9yd2FyZCwgcG9zaXRpb25pbmcgYWxs
IG9mCiAgICAgLy8gdGhlIG5ldyBmbG9hdHMgdGhhdCBuZWVkIGl0LgotICAgIEZsb2F0aW5nT2Jq
ZWN0U2V0SXRlcmF0b3IgaXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+ZW5kKCk7CisgICAgRmxvYXRp
bmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LT5lbmQoKTsKICAgICAt
LWl0OyAvLyBHbyB0byBsYXN0IGl0ZW0uCi0gICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBi
ZWdpbiA9IG1fZmxvYXRpbmdPYmplY3RzLT5iZWdpbigpOworICAgIEZsb2F0aW5nT2JqZWN0U2V0
SXRlcmF0b3IgYmVnaW4gPSBmbG9hdGluZ09iamVjdFNldC0+YmVnaW4oKTsKICAgICBGbG9hdGlu
Z09iamVjdCogbGFzdFBsYWNlZEZsb2F0aW5nT2JqZWN0ID0gMDsKICAgICB3aGlsZSAoaXQgIT0g
YmVnaW4pIHsKICAgICAgICAgLS1pdDsKQEAgLTMxNzUsNyArMzE4Niw3IEBAIGJvb2wgUmVuZGVy
QmxvY2s6OnBvc2l0aW9uTmV3RmxvYXRzKCkKICAgICBpZiAobGFzdFBsYWNlZEZsb2F0aW5nT2Jq
ZWN0KQogICAgICAgICBsb2dpY2FsVG9wID0gbWF4KGxvZ2ljYWxUb3BGb3JGbG9hdChsYXN0UGxh
Y2VkRmxvYXRpbmdPYmplY3QpLCBsb2dpY2FsVG9wKTsKIAotICAgIEZsb2F0aW5nT2JqZWN0U2V0
SXRlcmF0b3IgZW5kID0gbV9mbG9hdGluZ09iamVjdHMtPmVuZCgpOworICAgIEZsb2F0aW5nT2Jq
ZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQtPmVuZCgpOwogICAgIC8vIE5v
dyB3YWxrIHRocm91Z2ggdGhlIHNldCBvZiB1bnBvc2l0aW9uZWQgZmxvYXRzIGFuZCBwbGFjZSB0
aGVtLgogICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgIEZsb2F0aW5nT2Jq
ZWN0KiBmbG9hdGluZ09iamVjdCA9ICppdDsKQEAgLTMyNzQsNyArMzI4NSw4IEBAIGJvb2wgUmVu
ZGVyQmxvY2s6OnBvc2l0aW9uTmV3RmxvYXRPbkxpbmUKICAgICBpZiAoIWRpZFBvc2l0aW9uIHx8
ICFuZXdGbG9hdC0+bV9wYWdpbmF0aW9uU3RydXQpCiAgICAgICAgIHJldHVybiBkaWRQb3NpdGlv
bjsKICAgICAKLSAgICBBU1NFUlQobV9mbG9hdGluZ09iamVjdHMtPmxhc3QoKSA9PSBuZXdGbG9h
dCk7CisgICAgRmxvYXRpbmdPYmplY3RTZXQqIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGlu
Z09iamVjdHMtPnNldCgpOworICAgIEFTU0VSVChmbG9hdGluZ09iamVjdFNldC0+bGFzdCgpID09
IG5ld0Zsb2F0KTsKIAogICAgIGludCBmbG9hdExvZ2ljYWxUb3AgPSBsb2dpY2FsVG9wRm9yRmxv
YXQobmV3RmxvYXQpOwogICAgIGludCBwYWdpbmF0aW9uU3RydXQgPSBuZXdGbG9hdC0+bV9wYWdp
bmF0aW9uU3RydXQ7CkBAIC0zMjgyLDkgKzMyOTQsOSBAQCBib29sIFJlbmRlckJsb2NrOjpwb3Np
dGlvbk5ld0Zsb2F0T25MaW5lCiAgICAgaWYgKGZsb2F0TG9naWNhbFRvcCAtIHBhZ2luYXRpb25T
dHJ1dCAhPSBsb2dpY2FsSGVpZ2h0KCkpCiAgICAgICAgIHJldHVybiBkaWRQb3NpdGlvbjsKIAot
ICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+ZW5k
KCk7CisgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0
LT5lbmQoKTsKICAgICAtLWl0OyAvLyBMYXN0IGZsb2F0IGlzIG5ld0Zsb2F0LCBza2lwIHRoYXQg
b25lLgotICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgYmVnaW4gPSBtX2Zsb2F0aW5nT2Jq
ZWN0cy0+YmVnaW4oKTsKKyAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGJlZ2luID0gZmxv
YXRpbmdPYmplY3RTZXQtPmJlZ2luKCk7CiAgICAgd2hpbGUgKGl0ICE9IGJlZ2luKSB7CiAgICAg
ICAgIC0taXQ7CiAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmID0gKml0OwpAQCAtMzM5MiwxMiAr
MzQwNCwxMyBAQCBIYXNoU2V0PFJlbmRlckJveCo+KiBSZW5kZXJCbG9jazo6cGVyY2VuCiBpbnQg
UmVuZGVyQmxvY2s6OmxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZShpbnQgbG9naWNhbFRvcCwgaW50
IGZpeGVkT2Zmc2V0LCBib29sIGFwcGx5VGV4dEluZGVudCwgaW50KiBoZWlnaHRSZW1haW5pbmcp
IGNvbnN0CiB7CiAgICAgaW50IGxlZnQgPSBmaXhlZE9mZnNldDsKLSAgICBpZiAobV9mbG9hdGlu
Z09iamVjdHMpIHsKKyAgICBpZiAobV9mbG9hdGluZ09iamVjdHMgJiYgbV9mbG9hdGluZ09iamVj
dHMtPmhhc0xlZnRPYmplY3RzKCkpIHsKICAgICAgICAgaWYgKGhlaWdodFJlbWFpbmluZykKICAg
ICAgICAgICAgICpoZWlnaHRSZW1haW5pbmcgPSAxOwogCi0gICAgICAgIEZsb2F0aW5nT2JqZWN0
U2V0SXRlcmF0b3IgZW5kID0gbV9mbG9hdGluZ09iamVjdHMtPmVuZCgpOwotICAgICAgICBmb3Ig
KEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+YmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0KiBmbG9hdGlu
Z09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICAgICAgRmxvYXRpbmdP
YmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC0+ZW5kKCk7CisgICAgICAg
IGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LT5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBy
ID0gKml0OwogICAgICAgICAgICAgaWYgKHItPmlzUGxhY2VkKCkgJiYgbG9naWNhbFRvcEZvckZs
b2F0KHIpIDw9IGxvZ2ljYWxUb3AgJiYgbG9naWNhbEJvdHRvbUZvckZsb2F0KHIpID4gbG9naWNh
bFRvcAogICAgICAgICAgICAgICAgICYmIHItPnR5cGUoKSA9PSBGbG9hdGluZ09iamVjdDo6Rmxv
YXRMZWZ0CkBAIC0zNDIzLDExICszNDM2LDEyIEBAIGludCBSZW5kZXJCbG9jazo6bG9naWNhbFJp
Z2h0T2Zmc2V0Rm9yTGkKIHsKICAgICBpbnQgcmlnaHQgPSBmaXhlZE9mZnNldDsKIAotICAgIGlm
IChtX2Zsb2F0aW5nT2JqZWN0cykgeworICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0cyAmJiBtX2Zs
b2F0aW5nT2JqZWN0cy0+aGFzUmlnaHRPYmplY3RzKCkpIHsKICAgICAgICAgaWYgKGhlaWdodFJl
bWFpbmluZykKICAgICAgICAgICAgICpoZWlnaHRSZW1haW5pbmcgPSAxOwotICAgICAgICBGbG9h
dGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IG1fZmxvYXRpbmdPYmplY3RzLT5lbmQoKTsKLSAg
ICAgICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gbV9mbG9hdGluZ09iamVj
dHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBGbG9hdGluZ09iamVjdFNl
dCogZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CisgICAgICAg
IEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQtPmVuZCgp
OworICAgICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09i
amVjdFNldC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICBGbG9hdGlu
Z09iamVjdCogciA9ICppdDsKICAgICAgICAgICAgIGlmIChyLT5pc1BsYWNlZCgpICYmIGxvZ2lj
YWxUb3BGb3JGbG9hdChyKSA8PSBsb2dpY2FsVG9wICYmIGxvZ2ljYWxCb3R0b21Gb3JGbG9hdChy
KSA+IGxvZ2ljYWxUb3AKICAgICAgICAgICAgICAgICAmJiByLT50eXBlKCkgPT0gRmxvYXRpbmdP
YmplY3Q6OkZsb2F0UmlnaHQKQEAgLTM0NjEsOCArMzQ3NSw5IEBAIGludCBSZW5kZXJCbG9jazo6
bmV4dEZsb2F0TG9naWNhbEJvdHRvbUIKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBpbnQgYm90
dG9tID0gSU5UX01BWDsKLSAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IG1fZmxv
YXRpbmdPYmplY3RzLT5lbmQoKTsKLSAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3Ig
aXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAg
RmxvYXRpbmdPYmplY3RTZXQqIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMt
PnNldCgpOworICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmpl
Y3RTZXQtPmVuZCgpOworICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZs
b2F0aW5nT2JqZWN0U2V0LT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgRmxv
YXRpbmdPYmplY3QqIHIgPSAqaXQ7CiAgICAgICAgIGludCBmbG9hdEJvdHRvbSA9IGxvZ2ljYWxC
b3R0b21Gb3JGbG9hdChyKTsKICAgICAgICAgaWYgKGZsb2F0Qm90dG9tID4gbG9naWNhbEhlaWdo
dCkKQEAgLTM0NzcsOCArMzQ5Miw5IEBAIGludCBSZW5kZXJCbG9jazo6bG93ZXN0RmxvYXRMb2dp
Y2FsQm90dG8KICAgICBpZiAoIW1fZmxvYXRpbmdPYmplY3RzKQogICAgICAgICByZXR1cm4gMDsK
ICAgICBpbnQgbG93ZXN0RmxvYXRCb3R0b20gPSAwOwotICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRl
cmF0b3IgZW5kID0gbV9mbG9hdGluZ09iamVjdHMtPmVuZCgpOwotICAgIGZvciAoRmxvYXRpbmdP
YmplY3RTZXRJdGVyYXRvciBpdCA9IG1fZmxvYXRpbmdPYmplY3RzLT5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKKyAgICBGbG9hdGluZ09iamVjdFNldCogZmxvYXRpbmdPYmplY3RTZXQgPSBt
X2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CisgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBl
bmQgPSBmbG9hdGluZ09iamVjdFNldC0+ZW5kKCk7CisgICAgZm9yIChGbG9hdGluZ09iamVjdFNl
dEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgewogICAgICAgICBGbG9hdGluZ09iamVjdCogciA9ICppdDsKICAgICAgICAgaWYgKHItPmlz
UGxhY2VkKCkgJiYgci0+dHlwZSgpICYgZmxvYXRUeXBlKQogICAgICAgICAgICAgbG93ZXN0Rmxv
YXRCb3R0b20gPSBtYXgobG93ZXN0RmxvYXRCb3R0b20sIGxvZ2ljYWxCb3R0b21Gb3JGbG9hdChy
KSk7CkBAIC0zNTA5LDcgKzM1MjUsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpjbGVhckZsb2F0cygp
CiAgICAgLy8gSW5saW5lIGJsb2NrcyBhcmUgY292ZXJlZCBieSB0aGUgaXNSZXBsYWNlZCgpIGNo
ZWNrIGluIHRoZSBhdm9pZEZsb2F0cyBtZXRob2QuCiAgICAgaWYgKGF2b2lkc0Zsb2F0cygpIHx8
IGlzUm9vdCgpIHx8IGlzUmVuZGVyVmlldygpIHx8IGlzRmxvYXRpbmdPclBvc2l0aW9uZWQoKSB8
fCBpc1RhYmxlQ2VsbCgpKSB7CiAgICAgICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0cykgewotICAg
ICAgICAgICAgZGVsZXRlQWxsVmFsdWVzKCptX2Zsb2F0aW5nT2JqZWN0cyk7CisgICAgICAgICAg
ICBkZWxldGVBbGxWYWx1ZXMoKm1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKSk7CiAgICAgICAgICAg
ICBtX2Zsb2F0aW5nT2JqZWN0cy0+Y2xlYXIoKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47
CkBAIC0zNTE5LDE0ICszNTM1LDE1IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNsZWFyRmxvYXRzKCkK
ICAgICBSZW5kZXJlclRvRmxvYXRJbmZvTWFwIGZsb2F0TWFwOwogCiAgICAgaWYgKG1fZmxvYXRp
bmdPYmplY3RzKSB7CisgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0KiBmbG9hdGluZ09iamVjdFNl
dCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKICAgICAgICAgaWYgKGNoaWxkcmVuSW5saW5l
KCkpIHsKLSAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0OjppdGVyYXRvciBlbmQgPSBtX2Zs
b2F0aW5nT2JqZWN0cy0+ZW5kKCk7Ci0gICAgICAgICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0
OjppdGVyYXRvciBpdCA9IG1fZmxvYXRpbmdPYmplY3RzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKKyAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0OjppdGVyYXRvciBlbmQgPSBmbG9h
dGluZ09iamVjdFNldC0+ZW5kKCk7CisgICAgICAgICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0
OjppdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKICAgICAgICAgICAgICAgICBGbG9hdGluZ09iamVjdCogZiA9ICppdDsKICAgICAgICAg
ICAgICAgICBmbG9hdE1hcC5hZGQoZi0+bV9yZW5kZXJlciwgZik7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgZGVsZXRlQWxsVmFsdWVzKCptX2Zsb2F0aW5nT2Jq
ZWN0cyk7CisgICAgICAgICAgICBkZWxldGVBbGxWYWx1ZXMoKmZsb2F0aW5nT2JqZWN0U2V0KTsK
ICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPmNsZWFyKCk7CiAgICAgfQogCkBAIC0zNTczLDgg
KzM1OTAsOSBAQCB2b2lkIFJlbmRlckJsb2NrOjpjbGVhckZsb2F0cygpCiAgICAgICAgIGludCBj
aGFuZ2VMb2dpY2FsVG9wID0gbnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCk7CiAgICAgICAgIGlu
dCBjaGFuZ2VMb2dpY2FsQm90dG9tID0gbnVtZXJpY19saW1pdHM8aW50Pjo6bWluKCk7CiAgICAg
ICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0cykgewotICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RT
ZXRJdGVyYXRvciBlbmQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+ZW5kKCk7Ci0gICAgICAgICAgICBm
b3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+YmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBGbG9hdGluZ09iamVjdFNldCog
ZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CisgICAgICAgICAg
ICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LT5lbmQo
KTsKKyAgICAgICAgICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0
aW5nT2JqZWN0U2V0LT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgICAg
ICBGbG9hdGluZ09iamVjdCogZiA9ICppdDsKICAgICAgICAgICAgICAgICBGbG9hdGluZ09iamVj
dCogb2xkRmxvYXRpbmdPYmplY3QgPSBmbG9hdE1hcC5nZXQoZi0+bV9yZW5kZXJlcik7CiAgICAg
ICAgICAgICAgICAgaW50IGxvZ2ljYWxCb3R0b20gPSBsb2dpY2FsQm90dG9tRm9yRmxvYXQoZik7
CkBAIC0zNjIxLDggKzM2MzksOCBAQCBpbnQgUmVuZGVyQmxvY2s6OmFkZE92ZXJoYW5naW5nRmxv
YXRzKFJlCiAKICAgICAvLyBGbG9hdHMgdGhhdCB3aWxsIHJlbWFpbiB0aGUgY2hpbGQncyByZXNw
b25zaWJpbGl0eSB0byBwYWludCBzaG91bGQgZmFjdG9yIGludG8gaXRzCiAgICAgLy8gb3ZlcmZs
b3cuCi0gICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBjaGlsZEVuZCA9IGNoaWxkLT5tX2Zs
b2F0aW5nT2JqZWN0cy0+ZW5kKCk7Ci0gICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9y
IGNoaWxkSXQgPSBjaGlsZC0+bV9mbG9hdGluZ09iamVjdHMtPmJlZ2luKCk7IGNoaWxkSXQgIT0g
Y2hpbGRFbmQ7ICsrY2hpbGRJdCkgeworICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgY2hp
bGRFbmQgPSBjaGlsZC0+bV9mbG9hdGluZ09iamVjdHMtPnNldCgpLT5lbmQoKTsKKyAgICBmb3Ig
KEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgY2hpbGRJdCA9IGNoaWxkLT5tX2Zsb2F0aW5nT2Jq
ZWN0cy0+c2V0KCktPmJlZ2luKCk7IGNoaWxkSXQgIT0gY2hpbGRFbmQ7ICsrY2hpbGRJdCkgewog
ICAgICAgICBGbG9hdGluZ09iamVjdCogciA9ICpjaGlsZEl0OwogICAgICAgICBpbnQgbG9naWNh
bEJvdHRvbSA9IGNoaWxkLT5sb2dpY2FsVG9wKCkgKyBsb2dpY2FsQm90dG9tRm9yRmxvYXQocik7
CiAgICAgICAgIGxvd2VzdEZsb2F0TG9naWNhbEJvdHRvbSA9IG1heChsb3dlc3RGbG9hdExvZ2lj
YWxCb3R0b20sIGxvZ2ljYWxCb3R0b20pOwpAQCAtMzY0OCw5ICszNjY2LDEwIEBAIGludCBSZW5k
ZXJCbG9jazo6YWRkT3ZlcmhhbmdpbmdGbG9hdHMoUmUKIAogICAgICAgICAgICAgICAgIC8vIFdl
IGNyZWF0ZSB0aGUgZmxvYXRpbmcgb2JqZWN0IGxpc3QgbGF6aWx5LgogICAgICAgICAgICAgICAg
IGlmICghbV9mbG9hdGluZ09iamVjdHMpCi0gICAgICAgICAgICAgICAgICAgIG1fZmxvYXRpbmdP
YmplY3RzID0gYWRvcHRQdHIobmV3IEZsb2F0aW5nT2JqZWN0U2V0KTsKKyAgICAgICAgICAgICAg
ICAgICAgbV9mbG9hdGluZ09iamVjdHMgPSBhZG9wdFB0cihuZXcgRmxvYXRpbmdPYmplY3RzKTsK
IAotICAgICAgICAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5hZGQoZmxvYXRpbmdPYmopOwor
ICAgICAgICAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5pbmNyZWFzZU9iamVjdHNDb3VudChm
bG9hdGluZ09iai0+dHlwZSgpKTsKKyAgICAgICAgICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+
c2V0KCktPmFkZChmbG9hdGluZ09iaik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICBpZiAobWFrZUNoaWxkUGFpbnRPdGhlckZsb2F0cyAmJiAhci0+bV9zaG91
bGRQYWludCAmJiAhci0+bV9yZW5kZXJlci0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSAmJgpAQCAt
MzY4MCwxMSArMzY5OSwxMiBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGRJbnRydWRpbmdGbG9hdHMo
UmVuCiAKICAgICBsb2dpY2FsTGVmdE9mZnNldCArPSAoc3R5bGUoKS0+aXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSA/IG1hcmdpbkxlZnQoKSA6IG1hcmdpblRvcCgpKTsKIAotICAgIEZsb2F0aW5n
T2JqZWN0U2V0SXRlcmF0b3IgcHJldkVuZCA9IHByZXYtPm1fZmxvYXRpbmdPYmplY3RzLT5lbmQo
KTsKLSAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgcHJldkl0ID0gcHJldi0+bV9m
bG9hdGluZ09iamVjdHMtPmJlZ2luKCk7IHByZXZJdCAhPSBwcmV2RW5kOyArK3ByZXZJdCkgewor
ICAgIEZsb2F0aW5nT2JqZWN0U2V0KiBwcmV2U2V0ID0gcHJldi0+bV9mbG9hdGluZ09iamVjdHMt
PnNldCgpOworICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgcHJldkVuZCA9IHByZXZTZXQt
PmVuZCgpOworICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBwcmV2SXQgPSBwcmV2
U2V0LT5iZWdpbigpOyBwcmV2SXQgIT0gcHJldkVuZDsgKytwcmV2SXQpIHsKICAgICAgICAgRmxv
YXRpbmdPYmplY3QqIHIgPSAqcHJldkl0OwogICAgICAgICBpZiAobG9naWNhbEJvdHRvbUZvckZs
b2F0KHIpID4gbG9naWNhbFRvcE9mZnNldCkgewotICAgICAgICAgICAgaWYgKCFtX2Zsb2F0aW5n
T2JqZWN0cyB8fCAhbV9mbG9hdGluZ09iamVjdHMtPmNvbnRhaW5zKHIpKSB7CisgICAgICAgICAg
ICBpZiAoIW1fZmxvYXRpbmdPYmplY3RzIHx8ICFtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCktPmNv
bnRhaW5zKHIpKSB7CiAgICAgICAgICAgICAgICAgaW50IGxlZnRPZmZzZXQgPSBzdHlsZSgpLT5p
c0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gbG9naWNhbExlZnRPZmZzZXQgOiBsb2dpY2FsVG9w
T2Zmc2V0OwogICAgICAgICAgICAgICAgIGludCB0b3BPZmZzZXQgPSBzdHlsZSgpLT5pc0hvcml6
b250YWxXcml0aW5nTW9kZSgpID8gbG9naWNhbFRvcE9mZnNldCA6IGxvZ2ljYWxMZWZ0T2Zmc2V0
OwogICAgICAgICAgICAgICAgIApAQCAtMzcwNyw4ICszNzI3LDkgQEAgdm9pZCBSZW5kZXJCbG9j
azo6YWRkSW50cnVkaW5nRmxvYXRzKFJlbgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIC8vIFdlIGNyZWF0ZSB0aGUgZmxvYXRpbmcgb2JqZWN0IGxpc3QgbGF6aWx5LgogICAgICAg
ICAgICAgICAgIGlmICghbV9mbG9hdGluZ09iamVjdHMpCi0gICAgICAgICAgICAgICAgICAgIG1f
ZmxvYXRpbmdPYmplY3RzID0gYWRvcHRQdHIobmV3IEZsb2F0aW5nT2JqZWN0U2V0KTsKLSAgICAg
ICAgICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+YWRkKGZsb2F0aW5nT2JqKTsKKyAgICAgICAg
ICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMgPSBhZG9wdFB0cihuZXcgRmxvYXRpbmdPYmpl
Y3RzKTsKKyAgICAgICAgICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+aW5jcmVhc2VPYmplY3Rz
Q291bnQoZmxvYXRpbmdPYmotPnR5cGUoKSk7CisgICAgICAgICAgICAgICAgbV9mbG9hdGluZ09i
amVjdHMtPnNldCgpLT5hZGQoZmxvYXRpbmdPYmopOwogICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgfQpAQCAtMzcyMiw3ICszNzQzLDcgQEAgYm9vbCBSZW5kZXJCbG9jazo6YXZvaWRzRmxv
YXRzKCkgY29uc3QKIAogYm9vbCBSZW5kZXJCbG9jazo6Y29udGFpbnNGbG9hdChSZW5kZXJCb3gq
IHJlbmRlcmVyKQogewotICAgIHJldHVybiBtX2Zsb2F0aW5nT2JqZWN0cyAmJiBtX2Zsb2F0aW5n
T2JqZWN0cy0+Y29udGFpbnM8UmVuZGVyQm94KiwgRmxvYXRpbmdPYmplY3RIYXNoVHJhbnNsYXRv
cj4ocmVuZGVyZXIpOworICAgIHJldHVybiBtX2Zsb2F0aW5nT2JqZWN0cyAmJiBtX2Zsb2F0aW5n
T2JqZWN0cy0+c2V0KCktPmNvbnRhaW5zPFJlbmRlckJveCosIEZsb2F0aW5nT2JqZWN0SGFzaFRy
YW5zbGF0b3I+KHJlbmRlcmVyKTsKIH0KIAogdm9pZCBSZW5kZXJCbG9jazo6bWFya0FsbERlc2Nl
bmRhbnRzV2l0aEZsb2F0c0ZvckxheW91dChSZW5kZXJCb3gqIGZsb2F0VG9SZW1vdmUsIGJvb2wg
aW5MYXlvdXQpCkBAIC0zODgwLDggKzM5MDEsOSBAQCBib29sIFJlbmRlckJsb2NrOjpoaXRUZXN0
RmxvYXRzKGNvbnN0IEhpCiAgICAgICAgIHR5ICs9IHRvUmVuZGVyVmlldyh0aGlzKS0+ZnJhbWVW
aWV3KCktPnNjcm9sbFkoKTsKICAgICB9CiAKLSAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9y
IGJlZ2luID0gbV9mbG9hdGluZ09iamVjdHMtPmJlZ2luKCk7Ci0gICAgZm9yIChGbG9hdGluZ09i
amVjdFNldEl0ZXJhdG9yIGl0ID0gbV9mbG9hdGluZ09iamVjdHMtPmVuZCgpOyBpdCAhPSBiZWdp
bjspIHsKKyAgICBGbG9hdGluZ09iamVjdFNldCogZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0
aW5nT2JqZWN0cy0+c2V0KCk7CisgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBiZWdpbiA9
IGZsb2F0aW5nT2JqZWN0U2V0LT5iZWdpbigpOworICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJ
dGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LT5lbmQoKTsgaXQgIT0gYmVnaW47KSB7CiAg
ICAgICAgIC0taXQ7CiAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCA9ICpp
dDsKICAgICAgICAgaWYgKGZsb2F0aW5nT2JqZWN0LT5tX3Nob3VsZFBhaW50ICYmICFmbG9hdGlu
Z09iamVjdC0+bV9yZW5kZXJlci0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSkgewpAQCAtNTUwOCw4
ICs1NTMwLDkgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRqdXN0Rm9yQm9yZGVyRml0KGludAogICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAobV9mbG9hdGluZ09iamVjdHMpIHsKLSAgICAg
ICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gbV9mbG9hdGluZ09iamVjdHMt
PmVuZCgpOwotICAgICAgICAgICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0g
bV9mbG9hdGluZ09iamVjdHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAg
ICAgRmxvYXRpbmdPYmplY3RTZXQqIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVj
dHMtPnNldCgpOworICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBm
bG9hdGluZ09iamVjdFNldC0+ZW5kKCk7CisgICAgICAgICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0
U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC0+YmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7CiAgICAgICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIHIgPSAqaXQ7CiAgICAgICAg
ICAgICAgICAgLy8gT25seSBleGFtaW5lIHRoZSBvYmplY3QgaWYgb3VyIG1fc2hvdWxkUGFpbnQg
ZmxhZyBpcyBzZXQuCiAgICAgICAgICAgICAgICAgaWYgKHItPm1fc2hvdWxkUGFpbnQpIHsKQEAg
LTYyMTcsNCArNjI0MCwyNyBAQCBjb25zdCBjaGFyKiBSZW5kZXJCbG9jazo6cmVuZGVyTmFtZSgp
IGNvCiAgICAgcmV0dXJuICJSZW5kZXJCbG9jayI7CiB9CiAKK2lubGluZSB2b2lkIFJlbmRlckJs
b2NrOjpGbG9hdGluZ09iamVjdHM6OmNsZWFyKCkKK3sKKyAgICBtX3NldC0+Y2xlYXIoKTsKKyAg
ICBtX2xlZnRPYmplY3RzQ291bnQgPSAwOworICAgIG1fcmlnaHRPYmplY3RzQ291bnQgPSAwOwor
fQorCitpbmxpbmUgdm9pZCBSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RzOjppbmNyZWFzZU9i
amVjdHNDb3VudChGbG9hdGluZ09iamVjdDo6VHlwZSB0eXBlKQoreyAgICAKKyAgICBpZiAodHlw
ZSA9PSBGbG9hdGluZ09iamVjdDo6RmxvYXRMZWZ0KQorICAgICAgICBtX2xlZnRPYmplY3RzQ291
bnQrKzsKKyAgICBlbHNlCisgICAgICAgIG1fcmlnaHRPYmplY3RzQ291bnQrKzsKK30KKworaW5s
aW5lIHZvaWQgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6ZGVjcmVhc2VPYmplY3RzQ291
bnQoRmxvYXRpbmdPYmplY3Q6OlR5cGUgdHlwZSkKK3sKKyAgICBpZiAodHlwZSA9PSBGbG9hdGlu
Z09iamVjdDo6RmxvYXRMZWZ0KQorICAgICAgICBtX2xlZnRPYmplY3RzQ291bnQtLTsKKyAgICBl
bHNlCisgICAgICAgIG1fcmlnaHRPYmplY3RzQ291bnQtLTsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHJldmlz
aW9uIDgwMzA0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHdv
cmtpbmcgY29weSkKQEAgLTk1LDcgKzk1LDcgQEAgcHVibGljOgogICAgIHZvaWQgbWFya1Bvc2l0
aW9uZWRPYmplY3RzRm9yTGF5b3V0KCk7CiAgICAgdmlydHVhbCB2b2lkIG1hcmtGb3JQYWdpbmF0
aW9uUmVsYXlvdXRJZk5lZWRlZCgpOwogICAgIAotICAgIGJvb2wgY29udGFpbnNGbG9hdHMoKSB7
IHJldHVybiBtX2Zsb2F0aW5nT2JqZWN0cyAmJiAhbV9mbG9hdGluZ09iamVjdHMtPmlzRW1wdHko
KTsgfQorICAgIGJvb2wgY29udGFpbnNGbG9hdHMoKSB7IHJldHVybiBtX2Zsb2F0aW5nT2JqZWN0
cyAmJiAhbV9mbG9hdGluZ09iamVjdHMtPnNldCgpLT5pc0VtcHR5KCk7IH0KICAgICBib29sIGNv
bnRhaW5zRmxvYXQoUmVuZGVyQm94Kik7CiAKICAgICBpbnQgYXZhaWxhYmxlTG9naWNhbFdpZHRo
Rm9yTGluZShpbnQgcG9zaXRpb24sIGJvb2wgZmlyc3RMaW5lKSBjb25zdDsKQEAgLTcxMiw3ICs3
MTIsMjggQEAgcHJpdmF0ZToKICAgICB9OwogICAgIHR5cGVkZWYgTGlzdEhhc2hTZXQ8RmxvYXRp
bmdPYmplY3QqLCA0LCBGbG9hdGluZ09iamVjdEhhc2hGdW5jdGlvbnM+IEZsb2F0aW5nT2JqZWN0
U2V0OwogICAgIHR5cGVkZWYgRmxvYXRpbmdPYmplY3RTZXQ6OmNvbnN0X2l0ZXJhdG9yIEZsb2F0
aW5nT2JqZWN0U2V0SXRlcmF0b3I7Ci0gICAgT3duUHRyPEZsb2F0aW5nT2JqZWN0U2V0PiBtX2Zs
b2F0aW5nT2JqZWN0czsKKyAgICBjbGFzcyBGbG9hdGluZ09iamVjdHMgeworICAgIHB1YmxpYzoK
KyAgICAgICAgRmxvYXRpbmdPYmplY3RzKCkKKyAgICAgICAgICAgIDogbV9zZXQoYWRvcHRQdHIo
bmV3IEZsb2F0aW5nT2JqZWN0U2V0KSkKKyAgICAgICAgICAgICwgbV9sZWZ0T2JqZWN0c0NvdW50
KDApCisgICAgICAgICAgICAsIG1fcmlnaHRPYmplY3RzQ291bnQoMCkKKyAgICAgICAgeworICAg
ICAgICB9CisKKyAgICAgICAgdm9pZCBjbGVhcigpOworICAgICAgICB2b2lkIGluY3JlYXNlT2Jq
ZWN0c0NvdW50KEZsb2F0aW5nT2JqZWN0OjpUeXBlKTsKKyAgICAgICAgdm9pZCBkZWNyZWFzZU9i
amVjdHNDb3VudChGbG9hdGluZ09iamVjdDo6VHlwZSk7CisgICAgICAgIGJvb2wgaGFzTGVmdE9i
amVjdHMoKSBjb25zdCB7IHJldHVybiBtX2xlZnRPYmplY3RzQ291bnQgPiAwOyB9CisgICAgICAg
IGJvb2wgaGFzUmlnaHRPYmplY3RzKCkgY29uc3QgeyByZXR1cm4gbV9yaWdodE9iamVjdHNDb3Vu
dCA+IDA7IH0KKyAgICAgICAgRmxvYXRpbmdPYmplY3RTZXQqIHNldCgpIGNvbnN0IHsgcmV0dXJu
IG1fc2V0LmdldCgpOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBPd25QdHI8RmxvYXRpbmdP
YmplY3RTZXQ+IG1fc2V0OworICAgICAgICB1bnNpZ25lZCBpbnQgbV9sZWZ0T2JqZWN0c0NvdW50
OworICAgICAgICB1bnNpZ25lZCBpbnQgbV9yaWdodE9iamVjdHNDb3VudDsKKyAgICB9OworICAg
IE93blB0cjxGbG9hdGluZ09iamVjdHM+IG1fZmxvYXRpbmdPYmplY3RzOwogICAgIAogICAgIHR5
cGVkZWYgUG9zaXRpb25lZE9iamVjdHNMaXN0SGFzaFNldDo6Y29uc3RfaXRlcmF0b3IgSXRlcmF0
b3I7CiAgICAgT3duUHRyPFBvc2l0aW9uZWRPYmplY3RzTGlzdEhhc2hTZXQ+IG1fcG9zaXRpb25l
ZE9iamVjdHM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5l
TGF5b3V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2tMaW5lTGF5b3V0LmNwcAkocmV2aXNpb24gODAzMDQpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjE4
LDcgKzYxOCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dElubGluZUNoaWxkcmVuKGIKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIEZsb2F0aW5nT2JqZWN0KiBsYXN0Rmxv
YXQgPSAobV9mbG9hdGluZ09iamVjdHMgJiYgIW1fZmxvYXRpbmdPYmplY3RzLT5pc0VtcHR5KCkp
ID8gbV9mbG9hdGluZ09iamVjdHMtPmxhc3QoKSA6IDA7CisgICAgICAgIEZsb2F0aW5nT2JqZWN0
KiBsYXN0RmxvYXQgPSAobV9mbG9hdGluZ09iamVjdHMgJiYgIW1fZmxvYXRpbmdPYmplY3RzLT5z
ZXQoKS0+aXNFbXB0eSgpKSA/IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKS0+bGFzdCgpIDogMDsK
IAogICAgICAgICBMaW5lTWlkcG9pbnRTdGF0ZSYgbGluZU1pZHBvaW50U3RhdGUgPSByZXNvbHZl
ci5taWRwb2ludFN0YXRlKCk7CiAKQEAgLTY4OCw3ICs2ODgsNyBAQCB2b2lkIFJlbmRlckJsb2Nr
OjpsYXlvdXRJbmxpbmVDaGlsZHJlbihiCiAgICAgICAgICAgICBib29sIGh5cGhlbmF0ZWQ7CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIElubGluZUl0ZXJhdG9yIG9sZEVuZCA9IGVuZDsKLSAg
ICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lID0gKG1f
ZmxvYXRpbmdPYmplY3RzICYmICFtX2Zsb2F0aW5nT2JqZWN0cy0+aXNFbXB0eSgpKSA/IG1fZmxv
YXRpbmdPYmplY3RzLT5sYXN0KCkgOiAwOworICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGxh
c3RGbG9hdEZyb21QcmV2aW91c0xpbmUgPSAobV9mbG9hdGluZ09iamVjdHMgJiYgIW1fZmxvYXRp
bmdPYmplY3RzLT5zZXQoKS0+aXNFbXB0eSgpKSA/IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKS0+
bGFzdCgpIDogMDsKICAgICAgICAgICAgIGVuZCA9IGZpbmROZXh0TGluZUJyZWFrKHJlc29sdmVy
LCBmaXJzdExpbmUsIGlzTGluZUVtcHR5LCBsaW5lQnJlYWtJdGVyYXRvckluZm8sIHByZXZpb3Vz
TGluZUJyb2tlQ2xlYW5seSwgaHlwaGVuYXRlZCwgJmNsZWFyLCBsYXN0RmxvYXRGcm9tUHJldmlv
dXNMaW5lKTsKICAgICAgICAgICAgIGlmIChyZXNvbHZlci5wb3NpdGlvbigpLmF0RW5kKCkpIHsK
ICAgICAgICAgICAgICAgICByZXNvbHZlci5kZWxldGVSdW5zKCk7CkBAIC04MzksMTAgKzgzOSwx
MSBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVDaGlsZHJlbihiCiAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0cyAmJiBsYXN0Um9vdEJveCgp
KSB7Ci0gICAgICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IG1fZmxv
YXRpbmdPYmplY3RzLT5iZWdpbigpOwotICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0
SXRlcmF0b3IgZW5kID0gbV9mbG9hdGluZ09iamVjdHMtPmVuZCgpOworICAgICAgICAgICAgICAg
IEZsb2F0aW5nT2JqZWN0U2V0KiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3Rz
LT5zZXQoKTsKKyAgICAgICAgICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0g
ZmxvYXRpbmdPYmplY3RTZXQtPmJlZ2luKCk7CisgICAgICAgICAgICAgICAgRmxvYXRpbmdPYmpl
Y3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC0+ZW5kKCk7CiAgICAgICAgICAg
ICAgICAgaWYgKGxhc3RGbG9hdCkgewotICAgICAgICAgICAgICAgICAgICBGbG9hdGluZ09iamVj
dFNldEl0ZXJhdG9yIGxhc3RGbG9hdEl0ZXJhdG9yID0gbV9mbG9hdGluZ09iamVjdHMtPmZpbmQo
bGFzdEZsb2F0KTsKKyAgICAgICAgICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRv
ciBsYXN0RmxvYXRJdGVyYXRvciA9IGZsb2F0aW5nT2JqZWN0U2V0LT5maW5kKGxhc3RGbG9hdCk7
CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChsYXN0RmxvYXRJdGVyYXRvciAhPSBlbmQpOwog
ICAgICAgICAgICAgICAgICAgICArK2xhc3RGbG9hdEl0ZXJhdG9yOwogICAgICAgICAgICAgICAg
ICAgICBpdCA9IGxhc3RGbG9hdEl0ZXJhdG9yOwpAQCAtODU2LDcgKzg1Nyw3IEBAIHZvaWQgUmVu
ZGVyQmxvY2s6OmxheW91dElubGluZUNoaWxkcmVuKGIKICAgICAgICAgICAgICAgICAgICAgICAg
IGNoZWNrRm9yRW5kTGluZU1hdGNoID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIGZsb2F0
SW5kZXgrKzsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbGFzdEZsb2F0ID0g
IW1fZmxvYXRpbmdPYmplY3RzLT5pc0VtcHR5KCkgPyBtX2Zsb2F0aW5nT2JqZWN0cy0+bGFzdCgp
IDogMDsKKyAgICAgICAgICAgICAgICBsYXN0RmxvYXQgPSAhZmxvYXRpbmdPYmplY3RTZXQtPmlz
RW1wdHkoKSA/IGZsb2F0aW5nT2JqZWN0U2V0LT5sYXN0KCkgOiAwOwogICAgICAgICAgICAgfQog
CiAgICAgICAgICAgICBsaW5lTWlkcG9pbnRTdGF0ZS5yZXNldCgpOwpAQCAtOTIwLDE3ICs5MjEs
MTggQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4oYgogICAgICAgICAg
ICAgICAgIHRyYWlsaW5nRmxvYXRzTGluZUJveC0+c2V0QmxvY2tMb2dpY2FsSGVpZ2h0KGxvZ2lj
YWxIZWlnaHQoKSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0
U2V0SXRlcmF0b3IgaXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+YmVnaW4oKTsKLSAgICAgICAgICAg
IEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gbV9mbG9hdGluZ09iamVjdHMtPmVuZCgp
OworICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXQqIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9m
bG9hdGluZ09iamVjdHMtPnNldCgpOworICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVy
YXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LT5iZWdpbigpOworICAgICAgICAgICAgRmxvYXRp
bmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC0+ZW5kKCk7CiAgICAg
ICAgICAgICBpZiAobGFzdEZsb2F0KSB7Ci0gICAgICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RT
ZXRJdGVyYXRvciBsYXN0RmxvYXRJdGVyYXRvciA9IG1fZmxvYXRpbmdPYmplY3RzLT5maW5kKGxh
c3RGbG9hdCk7CisgICAgICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBsYXN0
RmxvYXRJdGVyYXRvciA9IGZsb2F0aW5nT2JqZWN0U2V0LT5maW5kKGxhc3RGbG9hdCk7CiAgICAg
ICAgICAgICAgICAgQVNTRVJUKGxhc3RGbG9hdEl0ZXJhdG9yICE9IGVuZCk7CiAgICAgICAgICAg
ICAgICAgKytsYXN0RmxvYXRJdGVyYXRvcjsKICAgICAgICAgICAgICAgICBpdCA9IGxhc3RGbG9h
dEl0ZXJhdG9yOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZm9yICg7IGl0ICE9IGVuZDsg
KytpdCkKICAgICAgICAgICAgICAgICBsYXN0Um9vdEJveCgpLT5mbG9hdHMoKS5hcHBlbmQoKCpp
dCktPm1fcmVuZGVyZXIpOwotICAgICAgICAgICAgbGFzdEZsb2F0ID0gIW1fZmxvYXRpbmdPYmpl
Y3RzLT5pc0VtcHR5KCkgPyBtX2Zsb2F0aW5nT2JqZWN0cy0+bGFzdCgpIDogMDsKKyAgICAgICAg
ICAgIGxhc3RGbG9hdCA9ICFmbG9hdGluZ09iamVjdFNldC0+aXNFbXB0eSgpID8gZmxvYXRpbmdP
YmplY3RTZXQtPmxhc3QoKSA6IDA7CiAgICAgICAgIH0KICAgICAgICAgc2l6ZV90IGZsb2F0Q291
bnQgPSBmbG9hdHMuc2l6ZSgpOwogICAgICAgICAvLyBGbG9hdHMgdGhhdCBkaWQgbm90IGhhdmUg
bGF5b3V0IGRpZCBub3QgcmVwYWludCB3aGVuIHdlIGxhaWQgdGhlbSBvdXQuIFRoZXkgd291bGQg
aGF2ZQpAQCAtMTE2Nyw4ICsxMTY5LDkgQEAgYm9vbCBSZW5kZXJCbG9jazo6bWF0Y2hlZEVuZExp
bmUoY29uc3QgSQogCiAgICAgICAgIGludCBsb2dpY2FsQm90dG9tID0gbGFzdExpbmUtPmJsb2Nr
TG9naWNhbEhlaWdodCgpICsgYWJzKGRlbHRhKTsKIAotICAgICAgICBGbG9hdGluZ09iamVjdFNl
dEl0ZXJhdG9yIGVuZCA9IG1fZmxvYXRpbmdPYmplY3RzLT5lbmQoKTsKLSAgICAgICAgZm9yIChG
bG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gbV9mbG9hdGluZ09iamVjdHMtPmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBGbG9hdGluZ09iamVjdFNldCogZmxvYXRpbmdP
YmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CisgICAgICAgIEZsb2F0aW5nT2Jq
ZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQtPmVuZCgpOworICAgICAgICBm
b3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC0+YmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICBGbG9hdGluZ09iamVjdCogZiA9
ICppdDsKICAgICAgICAgICAgIGlmIChsb2dpY2FsQm90dG9tRm9yRmxvYXQoZikgPj0gbG9naWNh
bFRvcCAmJiBsb2dpY2FsQm90dG9tRm9yRmxvYXQoZikgPCBsb2dpY2FsQm90dG9tKQogICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEyMDMsOCArMTIwNiw5IEBAIGJvb2wgUmVuZGVy
QmxvY2s6Om1hdGNoZWRFbmRMaW5lKGNvbnN0IEkKIAogICAgICAgICAgICAgICAgIGludCBsb2dp
Y2FsQm90dG9tID0gbGFzdExpbmUtPmJsb2NrTG9naWNhbEhlaWdodCgpICsgYWJzKGRlbHRhKTsK
IAotICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gbV9mbG9h
dGluZ09iamVjdHMtPmVuZCgpOwotICAgICAgICAgICAgICAgIGZvciAoRmxvYXRpbmdPYmplY3RT
ZXRJdGVyYXRvciBpdCA9IG1fZmxvYXRpbmdPYmplY3RzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKKyAgICAgICAgICAgICAgICBGbG9hdGluZ09iamVjdFNldCogZmxvYXRpbmdPYmplY3RT
ZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CisgICAgICAgICAgICAgICAgRmxvYXRpbmdP
YmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC0+ZW5kKCk7CisgICAgICAg
ICAgICAgICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmpl
Y3RTZXQtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgICAgICAgICBG
bG9hdGluZ09iamVjdCogZiA9ICppdDsKICAgICAgICAgICAgICAgICAgICAgaWYgKGxvZ2ljYWxC
b3R0b21Gb3JGbG9hdChmKSA+PSBsb2dpY2FsVG9wICYmIGxvZ2ljYWxCb3R0b21Gb3JGbG9hdChm
KSA8IGxvZ2ljYWxCb3R0b20pCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>84682</attachid>
            <date>2011-03-03 19:23:48 -0800</date>
            <delta_ts>2011-03-04 15:07:30 -0800</delta_ts>
            <desc>patch addressing comment #12</desc>
            <filename>WebCore-floating-objects.part0.rev3.patch</filename>
            <type>text/plain</type>
            <size>30798</size>
            <attacher name="Yuqiang Xian">yuqiang.xian</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgwMzA0KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjIgQEAKKzIwMTEtMDMtMDMgIFl1cWlhbmcg
WGlhbiAgPHl1cWlhbmcueGlhbkBpbnRlbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgaW1wcm92ZSBsYXlvdXQgcGVyZm9ybWFuY2UgYnkgcmVk
dWNpbmcgdGhlIHRyYXZlcnNhbCB0aW1lIG9mIHRoZSBmbG9hdGluZyBvYmplY3RzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NTQ0MAorCisgICAgICAg
IFdlIG9ic2VydmVyZWQgbGFyZ2Ugb3ZlcmhlYWQgb24gdHJhdmVyc2luZyB0aGUgZmxvYXRpbmcg
b2JqZWN0cyBsaXN0CisgICAgICAgIGluIGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZSgpIGFuZCBs
b2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lKCkgZXNwZWNpYWxseQorICAgICAgICB3aGVuIHRoZSBs
aXN0IGJlY29tZXMgZW5vcm1vdXMsIGZvciBleGFtcGxlIGluIHRoZSBkZWZhdWx0IDMweDMwIG1h
emUgdGVzdAorICAgICAgICBmcm9tIGh0dHA6Ly9pZS5taWNyb3NvZnQuY29tL3Rlc3Rkcml2ZS9Q
ZXJmb3JtYW5jZS9NYXplU29sdmVyL0RlZmF1bHQuaHRtbAorICAgICAgICB0aGVyZSdyZSA+Mzcw
MCBmbG9hdGluZyBvYmplY3RzLiBXaGVuIHBsYWNpbmcgYSBuZXcgZmxvYXRpbmcgb2JqZWN0IHRo
ZQorICAgICAgICBlbnRpcmUgbGlzdCAoZnJvbSBiZWdpbiB0byBlbmQpIGlzIHRyYXZlcnNlZCBm
b3IgbXVsdGlwbGUgdGltZXMuCisgICAgICAgIFRoZXJlJ3MgYSBsb3cgaGFuZ2luZyBmcnVpdCB0
byByZWR1Y2UgdGhlIGNoYW5jZXMgdG8gZG8gdGhlIHRyYXZlcnNhbAorICAgICAgICB3aGljaCBp
cyBlc3BlY2lhbGx5IGFwcGxpY2FibGUgaW4gbG9naWNhbExlZnRPZmZzZXRGb3JMaW5lIGFuZCBs
b2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lLgorICAgICAgICBBcyB0aGUgdHdvIHJvdXRpbmVzIGVp
dGhlciBjYXJlcyBhYm91dCBGbG9hdExlZnQgb2JqZWN0cyBvciBGbG9hdFJpZ2h0IG9iamVjdHMg
b25seSwKKyAgICAgICAgaWYgd2Uga25vdyB0aGVyZSdzIG5vIGNvcnJlc3BvbmRpbmcgdHlwZSBm
bG9hdGluZyBvYmplY3RzIGluIHRoZSBsaXN0CisgICAgICAgIHdlIGNhbiBhdm9pZCB0aGUgdHJh
dmVyc2FsIGFjdHVhbGx5LiBPbmUgdGhpbmcgd2UgY291bGQgZG8gaXMgdG8gcmVjb3JkCisgICAg
ICAgIHRoZSBudW1iZXIgb2YgRmxvYXRMZWZ0IG9iamVjdHMgYW5kIHRoZSBudW1iZXIgb2YgRmxv
YXRSaWdodCBvYmplY3RzIGFuZAorICAgICAgICBhZGQgYSBjaGVjayBiZWZvcmUgZG9pbmcgdGhl
IHRyYXZlcnNhbC4gVGhpcyBjYW4gcmVkdWNlIHRoZSB0aW1lIGJ5IDQ1JQorICAgICAgICB0byBy
ZXNvbHZlIHRoZSAzMHgzMCBNYXplIG1lYXN1cmVkIG9uIE40NzAgTmV0Ym9vayBNZWVHbyB1c2lu
ZyBsYXRlc3QKKyAgICAgICAgQ2hyb21pdW0gYnJvd3NlciAxMSAoZnJvbSA1MDNzIHRvIDI2OXMp
LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgcmVseWluZyBvbiBleGlzdGluZyBsYXlvdXQgdGVz
dHMuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQmxvY2s6On5SZW5kZXJCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCbG9jazo6YWRkT3ZlcmZsb3dGcm9tRmxvYXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJsb2NrOjpyZXBhaW50T3ZlcmhhbmdpbmdGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQmxvY2s6OnBhaW50RmxvYXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpz
ZWxlY3Rpb25HYXBzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjppbnNlcnRGbG9h
dGluZ09iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cmVtb3ZlRmxvYXRp
bmdPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnJlbW92ZUZsb2F0aW5n
T2JqZWN0c0JlbG93KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpwb3NpdGlvbk5l
d0Zsb2F0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cG9zaXRpb25OZXdGbG9h
dE9uTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bG9naWNhbExlZnRPZmZz
ZXRGb3JMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsb2dpY2FsUmlnaHRP
ZmZzZXRGb3JMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpuZXh0RmxvYXRM
b2dpY2FsQm90dG9tQmVsb3cpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Omxvd2Vz
dEZsb2F0TG9naWNhbEJvdHRvbSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Y2xl
YXJGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmFkZE92ZXJoYW5naW5n
RmxvYXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjphZGRJbnRydWRpbmdGbG9h
dHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmNvbnRhaW5zRmxvYXQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmhpdFRlc3RGbG9hdHMpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQmxvY2s6OmFkanVzdEZvckJvcmRlckZpdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RzOjpjbGVhcik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RzOjppbmNyZWFzZU9iamVjdHNDb3VudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RzOjpkZWNyZWFzZU9i
amVjdHNDb3VudCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmg6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Y29udGFpbnNGbG9hdHMpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6RmxvYXRpbmdPYmplY3RzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdHM6Omhhc0xlZnRPYmplY3Rz
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdHM6Omhhc1Jp
Z2h0T2JqZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmpl
Y3RzOjpzZXQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxheW91dElubGluZUNoaWxkcmVuKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjptYXRjaGVkRW5kTGluZSk6CisKIDIwMTEt
MDMtMDMgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIEJ1
aWxkIGZpeC4gTmVlZCB3aW4vY1VSTCBEb3dubG9hZEJ1bmRsZSBzdHViLgpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lvbiA4MDMwNCkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEyMyw3ICsxMjMsNyBAQCBSZW5kZXJCbG9jazo6UmVuZGVyQmxvY2soTm9kZSogbm9kZSkKIFJl
bmRlckJsb2NrOjp+UmVuZGVyQmxvY2soKQogewogICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0cykK
LSAgICAgICAgZGVsZXRlQWxsVmFsdWVzKCptX2Zsb2F0aW5nT2JqZWN0cyk7CisgICAgICAgIGRl
bGV0ZUFsbFZhbHVlcyhtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCkpOwogICAgIAogICAgIGlmICho
YXNDb2x1bW5zKCkpCiAgICAgICAgIGRlbGV0ZSBnQ29sdW1uSW5mb01hcC0+dGFrZSh0aGlzKTsK
QEAgLTEzODAsOCArMTM4MCw5IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkZE92ZXJmbG93RnJvbUZs
b2F0cygKICAgICBpZiAoIW1fZmxvYXRpbmdPYmplY3RzKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IG1fZmxvYXRpbmdPYmplY3RzLT5lbmQo
KTsKLSAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBtX2Zsb2F0aW5nT2Jq
ZWN0cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgRmxvYXRpbmdPYmplY3RTZXQm
IGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOworICAgIEZsb2F0
aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7CisgICAg
Zm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiByID0gKml0
OwogICAgICAgICBpZiAoci0+bV9pc0Rlc2NlbmRhbnQpCiAgICAgICAgICAgICBhZGRPdmVyZmxv
d0Zyb21DaGlsZChyLT5tX3JlbmRlcmVyLCBJbnRTaXplKHhQb3NpdGlvbkZvckZsb2F0SW5jbHVk
aW5nTWFyZ2luKHIpLCB5UG9zaXRpb25Gb3JGbG9hdEluY2x1ZGluZ01hcmdpbihyKSkpOwpAQCAt
MjE3Nyw4ICsyMTc4LDkgQEAgdm9pZCBSZW5kZXJCbG9jazo6cmVwYWludE92ZXJoYW5naW5nRmxv
YQogICAgICAgICAvLyBGSVhNRTogQXZvaWQgZGlzYWJsaW5nIExheW91dFN0YXRlLiBBdCB0aGUg
dmVyeSBsZWFzdCwgZG9uJ3QgZGlzYWJsZSBpdCBmb3IgZmxvYXRzIG9yaWdpbmF0aW5nCiAgICAg
ICAgIC8vIGluIHRoaXMgYmxvY2suIEJldHRlciB5ZXQgd291bGQgYmUgdG8gcHVzaCBleHRyYSBz
dGF0ZSBmb3IgdGhlIGNvbnRhaW5lcnMgb2Ygb3RoZXIgZmxvYXRzLgogICAgICAgICB2aWV3KCkt
PmRpc2FibGVMYXlvdXRTdGF0ZSgpOwotICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9y
IGVuZCA9IG1fZmxvYXRpbmdPYmplY3RzLT5lbmQoKTsKLSAgICAgICAgZm9yIChGbG9hdGluZ09i
amVjdFNldEl0ZXJhdG9yIGl0ID0gbV9mbG9hdGluZ09iamVjdHMtPmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgeworICAgICAgICBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQg
PSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CisgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRl
cmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7CisgICAgICAgIGZvciAoRmxvYXRp
bmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgewogICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIHIgPSAqaXQ7CiAgICAg
ICAgICAgICAvLyBPbmx5IHJlcGFpbnQgdGhlIG9iamVjdCBpZiBpdCBpcyBvdmVyaGFuZ2luZywg
aXMgbm90IGluIGl0cyBvd24gbGF5ZXIsIGFuZAogICAgICAgICAgICAgLy8gaXMgb3VyIHJlc3Bv
bnNpYmlsaXR5IHRvIHBhaW50IChtX3Nob3VsZFBhaW50IGlzIHNldCkuIFdoZW4gcGFpbnRBbGxE
ZXNjZW5kYW50cyBpcyB0cnVlLCB0aGUgbGF0dGVyCkBAIC0yNTAzLDggKzI1MDUsOSBAQCB2b2lk
IFJlbmRlckJsb2NrOjpwYWludEZsb2F0cyhQYWludEluZm8mCiAgICAgaWYgKCFtX2Zsb2F0aW5n
T2JqZWN0cykKICAgICAgICAgcmV0dXJuOwogCi0gICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRv
ciBlbmQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+ZW5kKCk7Ci0gICAgZm9yIChGbG9hdGluZ09iamVj
dFNldEl0ZXJhdG9yIGl0ID0gbV9mbG9hdGluZ09iamVjdHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgeworICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxv
YXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9
IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOworICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVy
YXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewog
ICAgICAgICBGbG9hdGluZ09iamVjdCogciA9ICppdDsKICAgICAgICAgLy8gT25seSBwYWludCB0
aGUgb2JqZWN0IGlmIG91ciBtX3Nob3VsZFBhaW50IGZsYWcgaXMgc2V0LgogICAgICAgICBpZiAo
ci0+bV9zaG91bGRQYWludCAmJiAhci0+bV9yZW5kZXJlci0+aGFzU2VsZlBhaW50aW5nTGF5ZXIo
KSkgewpAQCAtMjc1NSw4ICsyNzU4LDkgQEAgR2FwUmVjdHMgUmVuZGVyQmxvY2s6OnNlbGVjdGlv
bkdhcHMoUmVuZAogICAgICAgICAgICAgZm9yIChSZW5kZXJCbG9jayogY2IgPSBjb250YWluaW5n
QmxvY2soKTsgY2IgJiYgIWNiLT5pc1JlbmRlclZpZXcoKTsgY2IgPSBjYi0+Y29udGFpbmluZ0Js
b2NrKCkpCiAgICAgICAgICAgICAgICAgY2xpcE91dFBvc2l0aW9uZWRPYmplY3RzKHBhaW50SW5m
bywgSW50UG9pbnQoY2ItPngoKSwgY2ItPnkoKSksIGNiLT5tX3Bvc2l0aW9uZWRPYmplY3RzLmdl
dCgpKTsgLy8gRklYTUU6IE5vdCByaWdodCBmb3IgZmxpcHBlZCB3cml0aW5nIG1vZGVzLgogICAg
ICAgICBpZiAobV9mbG9hdGluZ09iamVjdHMpIHsKLSAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0
U2V0SXRlcmF0b3IgZW5kID0gbV9mbG9hdGluZ09iamVjdHMtPmVuZCgpOwotICAgICAgICAgICAg
Zm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gbV9mbG9hdGluZ09iamVjdHMtPmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXQm
IGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOworICAgICAgICAg
ICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQo
KTsKKyAgICAgICAgICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0
aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgICAg
IEZsb2F0aW5nT2JqZWN0KiByID0gKml0OwogICAgICAgICAgICAgICAgIEludFJlY3QgZmxvYXRC
b3ggPSBJbnRSZWN0KG9mZnNldEZyb21Sb290QmxvY2sud2lkdGgoKSArIHhQb3NpdGlvbkZvckZs
b2F0SW5jbHVkaW5nTWFyZ2luKHIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG9mZnNldEZyb21Sb290QmxvY2suaGVpZ2h0KCkgKyB5UG9zaXRpb25Gb3JGbG9h
dEluY2x1ZGluZ01hcmdpbihyKSwKQEAgLTMwNjUsMTEgKzMwNjksMTIgQEAgUmVuZGVyQmxvY2s6
OkZsb2F0aW5nT2JqZWN0KiBSZW5kZXJCbG9jawogCiAgICAgLy8gQ3JlYXRlIHRoZSBsaXN0IG9m
IHNwZWNpYWwgb2JqZWN0cyBpZiB3ZSBkb24ndCBhbGVhZHkgaGF2ZSBvbmUKICAgICBpZiAoIW1f
ZmxvYXRpbmdPYmplY3RzKQotICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cyA9IGFkb3B0UHRyKG5l
dyBGbG9hdGluZ09iamVjdFNldCk7CisgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzID0gYWRvcHRQ
dHIobmV3IEZsb2F0aW5nT2JqZWN0cyk7CiAgICAgZWxzZSB7CiAgICAgICAgIC8vIERvbid0IGlu
c2VydCB0aGUgb2JqZWN0IGFnYWluIGlmIGl0J3MgYWxyZWFkeSBpbiB0aGUgbGlzdAotICAgICAg
ICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gbV9mbG9hdGluZ09iamVjdHMtPmZpbmQ8
UmVuZGVyQm94KiwgRmxvYXRpbmdPYmplY3RIYXNoVHJhbnNsYXRvcj4obyk7Ci0gICAgICAgIGlm
IChpdCAhPSBtX2Zsb2F0aW5nT2JqZWN0cy0+ZW5kKCkpCisgICAgICAgIEZsb2F0aW5nT2JqZWN0
U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICAg
ICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmZpbmQ8
UmVuZGVyQm94KiwgRmxvYXRpbmdPYmplY3RIYXNoVHJhbnNsYXRvcj4obyk7CisgICAgICAgIGlm
IChpdCAhPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKSkKICAgICAgICAgICAgIHJldHVybiAqaXQ7
CiAgICAgfQogCkBAIC0zMDk2LDcgKzMxMDEsOCBAQCBSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmpl
Y3QqIFJlbmRlckJsb2NrCiAgICAgbmV3T2JqLT5tX2lzRGVzY2VuZGFudCA9IHRydWU7CiAgICAg
bmV3T2JqLT5tX3JlbmRlcmVyID0gbzsKIAotICAgIG1fZmxvYXRpbmdPYmplY3RzLT5hZGQobmV3
T2JqKTsKKyAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+aW5jcmVhc2VPYmplY3RzQ291bnQobmV3T2Jq
LT50eXBlKCkpOworICAgIG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKS5hZGQobmV3T2JqKTsKICAg
ICAKICAgICByZXR1cm4gbmV3T2JqOwogfQpAQCAtMzEwNCw4ICszMTEwLDkgQEAgUmVuZGVyQmxv
Y2s6OkZsb2F0aW5nT2JqZWN0KiBSZW5kZXJCbG9jawogdm9pZCBSZW5kZXJCbG9jazo6cmVtb3Zl
RmxvYXRpbmdPYmplY3QoUmVuZGVyQm94KiBvKQogewogICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0
cykgewotICAgICAgICBGbG9hdGluZ09iamVjdFNldDo6aXRlcmF0b3IgaXQgPSBtX2Zsb2F0aW5n
T2JqZWN0cy0+ZmluZDxSZW5kZXJCb3gqLCBGbG9hdGluZ09iamVjdEhhc2hUcmFuc2xhdG9yPihv
KTsKLSAgICAgICAgaWYgKGl0ICE9IG1fZmxvYXRpbmdPYmplY3RzLT5lbmQoKSkgeworICAgICAg
ICBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0
cy0+c2V0KCk7CisgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0OjppdGVyYXRvciBpdCA9IGZsb2F0
aW5nT2JqZWN0U2V0LmZpbmQ8UmVuZGVyQm94KiwgRmxvYXRpbmdPYmplY3RIYXNoVHJhbnNsYXRv
cj4obyk7CisgICAgICAgIGlmIChpdCAhPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKSkgewogICAg
ICAgICAgICAgRmxvYXRpbmdPYmplY3QqIHIgPSAqaXQ7CiAgICAgICAgICAgICBpZiAoY2hpbGRy
ZW5JbmxpbmUoKSkgewogICAgICAgICAgICAgICAgIGludCBsb2dpY2FsVG9wID0gbG9naWNhbFRv
cEZvckZsb2F0KHIpOwpAQCAtMzEyMiw3ICszMTI5LDggQEAgdm9pZCBSZW5kZXJCbG9jazo6cmVt
b3ZlRmxvYXRpbmdPYmplY3QoUgogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBt
YXJrTGluZXNEaXJ0eUluQmxvY2tSYW5nZSgwLCBsb2dpY2FsQm90dG9tKTsKICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5yZW1vdmUoaXQpOworICAgICAgICAg
ICAgbV9mbG9hdGluZ09iamVjdHMtPmRlY3JlYXNlT2JqZWN0c0NvdW50KHItPnR5cGUoKSk7Cisg
ICAgICAgICAgICBmbG9hdGluZ09iamVjdFNldC5yZW1vdmUoaXQpOwogICAgICAgICAgICAgZGVs
ZXRlIHI7CiAgICAgICAgIH0KICAgICB9CkBAIC0zMTMzLDExICszMTQxLDEzIEBAIHZvaWQgUmVu
ZGVyQmxvY2s6OnJlbW92ZUZsb2F0aW5nT2JqZWN0c0IKICAgICBpZiAoIW1fZmxvYXRpbmdPYmpl
Y3RzKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgRmxvYXRpbmdPYmplY3QqIGN1cnIgPSBt
X2Zsb2F0aW5nT2JqZWN0cy0+bGFzdCgpOworICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGlu
Z09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICBGbG9hdGluZ09iamVj
dCogY3VyciA9IGZsb2F0aW5nT2JqZWN0U2V0Lmxhc3QoKTsKICAgICB3aGlsZSAoY3VyciAhPSBs
YXN0RmxvYXQgJiYgKCFjdXJyLT5pc1BsYWNlZCgpIHx8IGxvZ2ljYWxUb3BGb3JGbG9hdChjdXJy
KSA+PSBsb2dpY2FsT2Zmc2V0KSkgewotICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+cmVtb3Zl
TGFzdCgpOworICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+ZGVjcmVhc2VPYmplY3RzQ291bnQo
Y3Vyci0+dHlwZSgpKTsKKyAgICAgICAgZmxvYXRpbmdPYmplY3RTZXQucmVtb3ZlTGFzdCgpOwog
ICAgICAgICBkZWxldGUgY3VycjsKLSAgICAgICAgY3VyciA9IG1fZmxvYXRpbmdPYmplY3RzLT5s
YXN0KCk7CisgICAgICAgIGN1cnIgPSBmbG9hdGluZ09iamVjdFNldC5sYXN0KCk7CiAgICAgfQog
fQogCkBAIC0zMTQ2LDE5ICszMTU2LDIwIEBAIGJvb2wgUmVuZGVyQmxvY2s6OnBvc2l0aW9uTmV3
RmxvYXRzKCkKICAgICBpZiAoIW1fZmxvYXRpbmdPYmplY3RzKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBpZiAobV9mbG9hdGluZ09iamVjdHMtPmlzRW1wdHkoKSkKKyAgICBGbG9hdGlu
Z09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7
CisgICAgaWYgKGZsb2F0aW5nT2JqZWN0U2V0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgLy8gSWYgYWxsIGZsb2F0cyBoYXZlIGFscmVhZHkgYmVlbiBwb3NpdGlvbmVk
LCB0aGVuIHdlIGhhdmUgbm8gd29yayB0byBkby4KLSAgICBpZiAobV9mbG9hdGluZ09iamVjdHMt
Pmxhc3QoKS0+aXNQbGFjZWQoKSkKKyAgICBpZiAoZmxvYXRpbmdPYmplY3RTZXQubGFzdCgpLT5p
c1BsYWNlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBNb3ZlIGJhY2t3YXJk
cyB0aHJvdWdoIG91ciBmbG9hdGluZyBvYmplY3QgbGlzdCB1bnRpbCB3ZSBmaW5kIGEgZmxvYXQg
dGhhdCBoYXMKICAgICAvLyBhbHJlYWR5IGJlZW4gcG9zaXRpb25lZC4gIFRoZW4gd2UnbGwgYmUg
YWJsZSB0byBtb3ZlIGZvcndhcmQsIHBvc2l0aW9uaW5nIGFsbCBvZgogICAgIC8vIHRoZSBuZXcg
ZmxvYXRzIHRoYXQgbmVlZCBpdC4KLSAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0g
bV9mbG9hdGluZ09iamVjdHMtPmVuZCgpOworICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3Ig
aXQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKICAgICAtLWl0OyAvLyBHbyB0byBsYXN0IGl0
ZW0uCi0gICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBiZWdpbiA9IG1fZmxvYXRpbmdPYmpl
Y3RzLT5iZWdpbigpOworICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgYmVnaW4gPSBmbG9h
dGluZ09iamVjdFNldC5iZWdpbigpOwogICAgIEZsb2F0aW5nT2JqZWN0KiBsYXN0UGxhY2VkRmxv
YXRpbmdPYmplY3QgPSAwOwogICAgIHdoaWxlIChpdCAhPSBiZWdpbikgewogICAgICAgICAtLWl0
OwpAQCAtMzE3NSw3ICszMTg2LDcgQEAgYm9vbCBSZW5kZXJCbG9jazo6cG9zaXRpb25OZXdGbG9h
dHMoKQogICAgIGlmIChsYXN0UGxhY2VkRmxvYXRpbmdPYmplY3QpCiAgICAgICAgIGxvZ2ljYWxU
b3AgPSBtYXgobG9naWNhbFRvcEZvckZsb2F0KGxhc3RQbGFjZWRGbG9hdGluZ09iamVjdCksIGxv
Z2ljYWxUb3ApOwogCi0gICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBtX2Zsb2F0
aW5nT2JqZWN0cy0+ZW5kKCk7CisgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBm
bG9hdGluZ09iamVjdFNldC5lbmQoKTsKICAgICAvLyBOb3cgd2FsayB0aHJvdWdoIHRoZSBzZXQg
b2YgdW5wb3NpdGlvbmVkIGZsb2F0cyBhbmQgcGxhY2UgdGhlbS4KICAgICBmb3IgKDsgaXQgIT0g
ZW5kOyArK2l0KSB7CiAgICAgICAgICBGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QgPSAq
aXQ7CkBAIC0zMjc0LDcgKzMyODUsOCBAQCBib29sIFJlbmRlckJsb2NrOjpwb3NpdGlvbk5ld0Zs
b2F0T25MaW5lCiAgICAgaWYgKCFkaWRQb3NpdGlvbiB8fCAhbmV3RmxvYXQtPm1fcGFnaW5hdGlv
blN0cnV0KQogICAgICAgICByZXR1cm4gZGlkUG9zaXRpb247CiAgICAgCi0gICAgQVNTRVJUKG1f
ZmxvYXRpbmdPYmplY3RzLT5sYXN0KCkgPT0gbmV3RmxvYXQpOworICAgIEZsb2F0aW5nT2JqZWN0
U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICBB
U1NFUlQoZmxvYXRpbmdPYmplY3RTZXQubGFzdCgpID09IG5ld0Zsb2F0KTsKIAogICAgIGludCBm
bG9hdExvZ2ljYWxUb3AgPSBsb2dpY2FsVG9wRm9yRmxvYXQobmV3RmxvYXQpOwogICAgIGludCBw
YWdpbmF0aW9uU3RydXQgPSBuZXdGbG9hdC0+bV9wYWdpbmF0aW9uU3RydXQ7CkBAIC0zMjgyLDkg
KzMyOTQsOSBAQCBib29sIFJlbmRlckJsb2NrOjpwb3NpdGlvbk5ld0Zsb2F0T25MaW5lCiAgICAg
aWYgKGZsb2F0TG9naWNhbFRvcCAtIHBhZ2luYXRpb25TdHJ1dCAhPSBsb2dpY2FsSGVpZ2h0KCkp
CiAgICAgICAgIHJldHVybiBkaWRQb3NpdGlvbjsKIAotICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRl
cmF0b3IgaXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+ZW5kKCk7CisgICAgRmxvYXRpbmdPYmplY3RT
ZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOwogICAgIC0taXQ7IC8vIExh
c3QgZmxvYXQgaXMgbmV3RmxvYXQsIHNraXAgdGhhdCBvbmUuCi0gICAgRmxvYXRpbmdPYmplY3RT
ZXRJdGVyYXRvciBiZWdpbiA9IG1fZmxvYXRpbmdPYmplY3RzLT5iZWdpbigpOworICAgIEZsb2F0
aW5nT2JqZWN0U2V0SXRlcmF0b3IgYmVnaW4gPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigpOwog
ICAgIHdoaWxlIChpdCAhPSBiZWdpbikgewogICAgICAgICAtLWl0OwogICAgICAgICBGbG9hdGlu
Z09iamVjdCogZiA9ICppdDsKQEAgLTMzOTIsMTIgKzM0MDQsMTMgQEAgSGFzaFNldDxSZW5kZXJC
b3gqPiogUmVuZGVyQmxvY2s6OnBlcmNlbgogaW50IFJlbmRlckJsb2NrOjpsb2dpY2FsTGVmdE9m
ZnNldEZvckxpbmUoaW50IGxvZ2ljYWxUb3AsIGludCBmaXhlZE9mZnNldCwgYm9vbCBhcHBseVRl
eHRJbmRlbnQsIGludCogaGVpZ2h0UmVtYWluaW5nKSBjb25zdAogewogICAgIGludCBsZWZ0ID0g
Zml4ZWRPZmZzZXQ7Ci0gICAgaWYgKG1fZmxvYXRpbmdPYmplY3RzKSB7CisgICAgaWYgKG1fZmxv
YXRpbmdPYmplY3RzICYmIG1fZmxvYXRpbmdPYmplY3RzLT5oYXNMZWZ0T2JqZWN0cygpKSB7CiAg
ICAgICAgIGlmIChoZWlnaHRSZW1haW5pbmcpCiAgICAgICAgICAgICAqaGVpZ2h0UmVtYWluaW5n
ID0gMTsKIAotICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IG1fZmxvYXRp
bmdPYmplY3RzLT5lbmQoKTsKLSAgICAgICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9y
IGl0ID0gbV9mbG9hdGluZ09iamVjdHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAg
ICAgICBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2Jq
ZWN0cy0+c2V0KCk7CisgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxv
YXRpbmdPYmplY3RTZXQuZW5kKCk7CisgICAgICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVy
YXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewog
ICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIHIgPSAqaXQ7CiAgICAgICAgICAgICBpZiAoci0+
aXNQbGFjZWQoKSAmJiBsb2dpY2FsVG9wRm9yRmxvYXQocikgPD0gbG9naWNhbFRvcCAmJiBsb2dp
Y2FsQm90dG9tRm9yRmxvYXQocikgPiBsb2dpY2FsVG9wCiAgICAgICAgICAgICAgICAgJiYgci0+
dHlwZSgpID09IEZsb2F0aW5nT2JqZWN0OjpGbG9hdExlZnQKQEAgLTM0MjMsMTEgKzM0MzYsMTIg
QEAgaW50IFJlbmRlckJsb2NrOjpsb2dpY2FsUmlnaHRPZmZzZXRGb3JMaQogewogICAgIGludCBy
aWdodCA9IGZpeGVkT2Zmc2V0OwogCi0gICAgaWYgKG1fZmxvYXRpbmdPYmplY3RzKSB7CisgICAg
aWYgKG1fZmxvYXRpbmdPYmplY3RzICYmIG1fZmxvYXRpbmdPYmplY3RzLT5oYXNSaWdodE9iamVj
dHMoKSkgewogICAgICAgICBpZiAoaGVpZ2h0UmVtYWluaW5nKQogICAgICAgICAgICAgKmhlaWdo
dFJlbWFpbmluZyA9IDE7Ci0gICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0g
bV9mbG9hdGluZ09iamVjdHMtPmVuZCgpOwotICAgICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0
SXRlcmF0b3IgaXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7CisgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxv
YXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBl
bmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKKyAgICAgICAgZm9yIChGbG9hdGluZ09iamVj
dFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7CiAgICAgICAgICAgICBGbG9hdGluZ09iamVjdCogciA9ICppdDsKICAgICAgICAgICAg
IGlmIChyLT5pc1BsYWNlZCgpICYmIGxvZ2ljYWxUb3BGb3JGbG9hdChyKSA8PSBsb2dpY2FsVG9w
ICYmIGxvZ2ljYWxCb3R0b21Gb3JGbG9hdChyKSA+IGxvZ2ljYWxUb3AKICAgICAgICAgICAgICAg
ICAmJiByLT50eXBlKCkgPT0gRmxvYXRpbmdPYmplY3Q6OkZsb2F0UmlnaHQKQEAgLTM0NjEsOCAr
MzQ3NSw5IEBAIGludCBSZW5kZXJCbG9jazo6bmV4dEZsb2F0TG9naWNhbEJvdHRvbUIKICAgICAg
ICAgcmV0dXJuIDA7CiAKICAgICBpbnQgYm90dG9tID0gSU5UX01BWDsKLSAgICBGbG9hdGluZ09i
amVjdFNldEl0ZXJhdG9yIGVuZCA9IG1fZmxvYXRpbmdPYmplY3RzLT5lbmQoKTsKLSAgICBmb3Ig
KEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+YmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2Jq
ZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOworICAgIEZsb2F0aW5nT2JqZWN0U2V0
SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7CisgICAgZm9yIChGbG9hdGlu
Z09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7CiAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiByID0gKml0OwogICAgICAgICBp
bnQgZmxvYXRCb3R0b20gPSBsb2dpY2FsQm90dG9tRm9yRmxvYXQocik7CiAgICAgICAgIGlmIChm
bG9hdEJvdHRvbSA+IGxvZ2ljYWxIZWlnaHQpCkBAIC0zNDc3LDggKzM0OTIsOSBAQCBpbnQgUmVu
ZGVyQmxvY2s6Omxvd2VzdEZsb2F0TG9naWNhbEJvdHRvCiAgICAgaWYgKCFtX2Zsb2F0aW5nT2Jq
ZWN0cykKICAgICAgICAgcmV0dXJuIDA7CiAgICAgaW50IGxvd2VzdEZsb2F0Qm90dG9tID0gMDsK
LSAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IG1fZmxvYXRpbmdPYmplY3RzLT5l
bmQoKTsKLSAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBtX2Zsb2F0aW5n
T2JqZWN0cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgRmxvYXRpbmdPYmplY3RT
ZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOworICAgIEZs
b2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7Cisg
ICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiByID0g
Kml0OwogICAgICAgICBpZiAoci0+aXNQbGFjZWQoKSAmJiByLT50eXBlKCkgJiBmbG9hdFR5cGUp
CiAgICAgICAgICAgICBsb3dlc3RGbG9hdEJvdHRvbSA9IG1heChsb3dlc3RGbG9hdEJvdHRvbSwg
bG9naWNhbEJvdHRvbUZvckZsb2F0KHIpKTsKQEAgLTM1MDksNyArMzUyNSw3IEBAIHZvaWQgUmVu
ZGVyQmxvY2s6OmNsZWFyRmxvYXRzKCkKICAgICAvLyBJbmxpbmUgYmxvY2tzIGFyZSBjb3ZlcmVk
IGJ5IHRoZSBpc1JlcGxhY2VkKCkgY2hlY2sgaW4gdGhlIGF2b2lkRmxvYXRzIG1ldGhvZC4KICAg
ICBpZiAoYXZvaWRzRmxvYXRzKCkgfHwgaXNSb290KCkgfHwgaXNSZW5kZXJWaWV3KCkgfHwgaXNG
bG9hdGluZ09yUG9zaXRpb25lZCgpIHx8IGlzVGFibGVDZWxsKCkpIHsKICAgICAgICAgaWYgKG1f
ZmxvYXRpbmdPYmplY3RzKSB7Ci0gICAgICAgICAgICBkZWxldGVBbGxWYWx1ZXMoKm1fZmxvYXRp
bmdPYmplY3RzKTsKKyAgICAgICAgICAgIGRlbGV0ZUFsbFZhbHVlcyhtX2Zsb2F0aW5nT2JqZWN0
cy0+c2V0KCkpOwogICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPmNsZWFyKCk7CiAgICAg
ICAgIH0KICAgICAgICAgcmV0dXJuOwpAQCAtMzUxOSwxNCArMzUzNSwxNSBAQCB2b2lkIFJlbmRl
ckJsb2NrOjpjbGVhckZsb2F0cygpCiAgICAgUmVuZGVyZXJUb0Zsb2F0SW5mb01hcCBmbG9hdE1h
cDsKIAogICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0cykgeworICAgICAgICBGbG9hdGluZ09iamVj
dFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CiAgICAg
ICAgIGlmIChjaGlsZHJlbklubGluZSgpKSB7Ci0gICAgICAgICAgICBGbG9hdGluZ09iamVjdFNl
dDo6aXRlcmF0b3IgZW5kID0gbV9mbG9hdGluZ09iamVjdHMtPmVuZCgpOwotICAgICAgICAgICAg
Zm9yIChGbG9hdGluZ09iamVjdFNldDo6aXRlcmF0b3IgaXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBGbG9hdGluZ09iamVjdFNl
dDo6aXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7CisgICAgICAgICAgICBm
b3IgKEZsb2F0aW5nT2JqZWN0U2V0OjppdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0
KiBmID0gKml0OwogICAgICAgICAgICAgICAgIGZsb2F0TWFwLmFkZChmLT5tX3JlbmRlcmVyLCBm
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBkZWxldGVBbGxW
YWx1ZXMoKm1fZmxvYXRpbmdPYmplY3RzKTsKKyAgICAgICAgICAgIGRlbGV0ZUFsbFZhbHVlcyhm
bG9hdGluZ09iamVjdFNldCk7CiAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5jbGVhcigpOwog
ICAgIH0KIApAQCAtMzU3Myw4ICszNTkwLDkgQEAgdm9pZCBSZW5kZXJCbG9jazo6Y2xlYXJGbG9h
dHMoKQogICAgICAgICBpbnQgY2hhbmdlTG9naWNhbFRvcCA9IG51bWVyaWNfbGltaXRzPGludD46
Om1heCgpOwogICAgICAgICBpbnQgY2hhbmdlTG9naWNhbEJvdHRvbSA9IG51bWVyaWNfbGltaXRz
PGludD46Om1pbigpOwogICAgICAgICBpZiAobV9mbG9hdGluZ09iamVjdHMpIHsKLSAgICAgICAg
ICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gbV9mbG9hdGluZ09iamVjdHMtPmVu
ZCgpOwotICAgICAgICAgICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gbV9m
bG9hdGluZ09iamVjdHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAg
RmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMt
PnNldCgpOworICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9h
dGluZ09iamVjdFNldC5lbmQoKTsKKyAgICAgICAgICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJ
dGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewogICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmID0gKml0OwogICAgICAgICAgICAg
ICAgIEZsb2F0aW5nT2JqZWN0KiBvbGRGbG9hdGluZ09iamVjdCA9IGZsb2F0TWFwLmdldChmLT5t
X3JlbmRlcmVyKTsKICAgICAgICAgICAgICAgICBpbnQgbG9naWNhbEJvdHRvbSA9IGxvZ2ljYWxC
b3R0b21Gb3JGbG9hdChmKTsKQEAgLTM2MjEsOCArMzYzOSw4IEBAIGludCBSZW5kZXJCbG9jazo6
YWRkT3ZlcmhhbmdpbmdGbG9hdHMoUmUKIAogICAgIC8vIEZsb2F0cyB0aGF0IHdpbGwgcmVtYWlu
IHRoZSBjaGlsZCdzIHJlc3BvbnNpYmlsaXR5IHRvIHBhaW50IHNob3VsZCBmYWN0b3IgaW50byBp
dHMKICAgICAvLyBvdmVyZmxvdy4KLSAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGNoaWxk
RW5kID0gY2hpbGQtPm1fZmxvYXRpbmdPYmplY3RzLT5lbmQoKTsKLSAgICBmb3IgKEZsb2F0aW5n
T2JqZWN0U2V0SXRlcmF0b3IgY2hpbGRJdCA9IGNoaWxkLT5tX2Zsb2F0aW5nT2JqZWN0cy0+YmVn
aW4oKTsgY2hpbGRJdCAhPSBjaGlsZEVuZDsgKytjaGlsZEl0KSB7CisgICAgRmxvYXRpbmdPYmpl
Y3RTZXRJdGVyYXRvciBjaGlsZEVuZCA9IGNoaWxkLT5tX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCku
ZW5kKCk7CisgICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGNoaWxkSXQgPSBjaGls
ZC0+bV9mbG9hdGluZ09iamVjdHMtPnNldCgpLmJlZ2luKCk7IGNoaWxkSXQgIT0gY2hpbGRFbmQ7
ICsrY2hpbGRJdCkgewogICAgICAgICBGbG9hdGluZ09iamVjdCogciA9ICpjaGlsZEl0OwogICAg
ICAgICBpbnQgbG9naWNhbEJvdHRvbSA9IGNoaWxkLT5sb2dpY2FsVG9wKCkgKyBsb2dpY2FsQm90
dG9tRm9yRmxvYXQocik7CiAgICAgICAgIGxvd2VzdEZsb2F0TG9naWNhbEJvdHRvbSA9IG1heChs
b3dlc3RGbG9hdExvZ2ljYWxCb3R0b20sIGxvZ2ljYWxCb3R0b20pOwpAQCAtMzY0OCw5ICszNjY2
LDEwIEBAIGludCBSZW5kZXJCbG9jazo6YWRkT3ZlcmhhbmdpbmdGbG9hdHMoUmUKIAogICAgICAg
ICAgICAgICAgIC8vIFdlIGNyZWF0ZSB0aGUgZmxvYXRpbmcgb2JqZWN0IGxpc3QgbGF6aWx5Lgog
ICAgICAgICAgICAgICAgIGlmICghbV9mbG9hdGluZ09iamVjdHMpCi0gICAgICAgICAgICAgICAg
ICAgIG1fZmxvYXRpbmdPYmplY3RzID0gYWRvcHRQdHIobmV3IEZsb2F0aW5nT2JqZWN0U2V0KTsK
KyAgICAgICAgICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMgPSBhZG9wdFB0cihuZXcgRmxv
YXRpbmdPYmplY3RzKTsKIAotICAgICAgICAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5hZGQo
ZmxvYXRpbmdPYmopOworICAgICAgICAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5pbmNyZWFz
ZU9iamVjdHNDb3VudChmbG9hdGluZ09iai0+dHlwZSgpKTsKKyAgICAgICAgICAgICAgICBtX2Zs
b2F0aW5nT2JqZWN0cy0+c2V0KCkuYWRkKGZsb2F0aW5nT2JqKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChtYWtlQ2hpbGRQYWludE90aGVyRmxvYXRz
ICYmICFyLT5tX3Nob3VsZFBhaW50ICYmICFyLT5tX3JlbmRlcmVyLT5oYXNTZWxmUGFpbnRpbmdM
YXllcigpICYmCkBAIC0zNjgwLDExICszNjk5LDEyIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkZElu
dHJ1ZGluZ0Zsb2F0cyhSZW4KIAogICAgIGxvZ2ljYWxMZWZ0T2Zmc2V0ICs9IChzdHlsZSgpLT5p
c0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gbWFyZ2luTGVmdCgpIDogbWFyZ2luVG9wKCkpOwog
Ci0gICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBwcmV2RW5kID0gcHJldi0+bV9mbG9hdGlu
Z09iamVjdHMtPmVuZCgpOwotICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBwcmV2
SXQgPSBwcmV2LT5tX2Zsb2F0aW5nT2JqZWN0cy0+YmVnaW4oKTsgcHJldkl0ICE9IHByZXZFbmQ7
ICsrcHJldkl0KSB7CisgICAgRmxvYXRpbmdPYmplY3RTZXQmIHByZXZTZXQgPSBwcmV2LT5tX2Zs
b2F0aW5nT2JqZWN0cy0+c2V0KCk7CisgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBwcmV2
RW5kID0gcHJldlNldC5lbmQoKTsKKyAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3Ig
cHJldkl0ID0gcHJldlNldC5iZWdpbigpOyBwcmV2SXQgIT0gcHJldkVuZDsgKytwcmV2SXQpIHsK
ICAgICAgICAgRmxvYXRpbmdPYmplY3QqIHIgPSAqcHJldkl0OwogICAgICAgICBpZiAobG9naWNh
bEJvdHRvbUZvckZsb2F0KHIpID4gbG9naWNhbFRvcE9mZnNldCkgewotICAgICAgICAgICAgaWYg
KCFtX2Zsb2F0aW5nT2JqZWN0cyB8fCAhbV9mbG9hdGluZ09iamVjdHMtPmNvbnRhaW5zKHIpKSB7
CisgICAgICAgICAgICBpZiAoIW1fZmxvYXRpbmdPYmplY3RzIHx8ICFtX2Zsb2F0aW5nT2JqZWN0
cy0+c2V0KCkuY29udGFpbnMocikpIHsKICAgICAgICAgICAgICAgICBpbnQgbGVmdE9mZnNldCA9
IHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBsb2dpY2FsTGVmdE9mZnNldCA6
IGxvZ2ljYWxUb3BPZmZzZXQ7CiAgICAgICAgICAgICAgICAgaW50IHRvcE9mZnNldCA9IHN0eWxl
KCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBsb2dpY2FsVG9wT2Zmc2V0IDogbG9naWNh
bExlZnRPZmZzZXQ7CiAgICAgICAgICAgICAgICAgCkBAIC0zNzA3LDggKzM3MjcsOSBAQCB2b2lk
IFJlbmRlckJsb2NrOjphZGRJbnRydWRpbmdGbG9hdHMoUmVuCiAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgLy8gV2UgY3JlYXRlIHRoZSBmbG9hdGluZyBvYmplY3QgbGlzdCBsYXpp
bHkuCiAgICAgICAgICAgICAgICAgaWYgKCFtX2Zsb2F0aW5nT2JqZWN0cykKLSAgICAgICAgICAg
ICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMgPSBhZG9wdFB0cihuZXcgRmxvYXRpbmdPYmplY3RT
ZXQpOwotICAgICAgICAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5hZGQoZmxvYXRpbmdPYmop
OworICAgICAgICAgICAgICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cyA9IGFkb3B0UHRyKG5ldyBG
bG9hdGluZ09iamVjdHMpOworICAgICAgICAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5pbmNy
ZWFzZU9iamVjdHNDb3VudChmbG9hdGluZ09iai0+dHlwZSgpKTsKKyAgICAgICAgICAgICAgICBt
X2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCkuYWRkKGZsb2F0aW5nT2JqKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgIH0KQEAgLTM3MjIsNyArMzc0Myw3IEBAIGJvb2wgUmVuZGVyQmxvY2s6
OmF2b2lkc0Zsb2F0cygpIGNvbnN0CiAKIGJvb2wgUmVuZGVyQmxvY2s6OmNvbnRhaW5zRmxvYXQo
UmVuZGVyQm94KiByZW5kZXJlcikKIHsKLSAgICByZXR1cm4gbV9mbG9hdGluZ09iamVjdHMgJiYg
bV9mbG9hdGluZ09iamVjdHMtPmNvbnRhaW5zPFJlbmRlckJveCosIEZsb2F0aW5nT2JqZWN0SGFz
aFRyYW5zbGF0b3I+KHJlbmRlcmVyKTsKKyAgICByZXR1cm4gbV9mbG9hdGluZ09iamVjdHMgJiYg
bV9mbG9hdGluZ09iamVjdHMtPnNldCgpLmNvbnRhaW5zPFJlbmRlckJveCosIEZsb2F0aW5nT2Jq
ZWN0SGFzaFRyYW5zbGF0b3I+KHJlbmRlcmVyKTsKIH0KIAogdm9pZCBSZW5kZXJCbG9jazo6bWFy
a0FsbERlc2NlbmRhbnRzV2l0aEZsb2F0c0ZvckxheW91dChSZW5kZXJCb3gqIGZsb2F0VG9SZW1v
dmUsIGJvb2wgaW5MYXlvdXQpCkBAIC0zODgwLDggKzM5MDEsOSBAQCBib29sIFJlbmRlckJsb2Nr
OjpoaXRUZXN0RmxvYXRzKGNvbnN0IEhpCiAgICAgICAgIHR5ICs9IHRvUmVuZGVyVmlldyh0aGlz
KS0+ZnJhbWVWaWV3KCktPnNjcm9sbFkoKTsKICAgICB9CiAKLSAgICBGbG9hdGluZ09iamVjdFNl
dEl0ZXJhdG9yIGJlZ2luID0gbV9mbG9hdGluZ09iamVjdHMtPmJlZ2luKCk7Ci0gICAgZm9yIChG
bG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gbV9mbG9hdGluZ09iamVjdHMtPmVuZCgpOyBp
dCAhPSBiZWdpbjspIHsKKyAgICBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQg
PSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CisgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRv
ciBiZWdpbiA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7CisgICAgZm9yIChGbG9hdGluZ09i
amVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7IGl0ICE9IGJlZ2lu
OykgewogICAgICAgICAtLWl0OwogICAgICAgICBGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmpl
Y3QgPSAqaXQ7CiAgICAgICAgIGlmIChmbG9hdGluZ09iamVjdC0+bV9zaG91bGRQYWludCAmJiAh
ZmxvYXRpbmdPYmplY3QtPm1fcmVuZGVyZXItPmhhc1NlbGZQYWludGluZ0xheWVyKCkpIHsKQEAg
LTU1MDgsOCArNTUzMCw5IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkanVzdEZvckJvcmRlckZpdChp
bnQKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKG1fZmxvYXRpbmdPYmplY3RzKSB7
Ci0gICAgICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IG1fZmxvYXRpbmdP
YmplY3RzLT5lbmQoKTsKLSAgICAgICAgICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRv
ciBpdCA9IG1fZmxvYXRpbmdPYmplY3RzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAg
ICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRp
bmdPYmplY3RzLT5zZXQoKTsKKyAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3Ig
ZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7CisgICAgICAgICAgICBmb3IgKEZsb2F0aW5n
T2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKICAgICAgICAgICAgICAgICBGbG9hdGluZ09iamVjdCogciA9ICppdDsKICAg
ICAgICAgICAgICAgICAvLyBPbmx5IGV4YW1pbmUgdGhlIG9iamVjdCBpZiBvdXIgbV9zaG91bGRQ
YWludCBmbGFnIGlzIHNldC4KICAgICAgICAgICAgICAgICBpZiAoci0+bV9zaG91bGRQYWludCkg
ewpAQCAtNjIxNyw0ICs2MjQwLDI3IEBAIGNvbnN0IGNoYXIqIFJlbmRlckJsb2NrOjpyZW5kZXJO
YW1lKCkgY28KICAgICByZXR1cm4gIlJlbmRlckJsb2NrIjsKIH0KIAoraW5saW5lIHZvaWQgUmVu
ZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6Y2xlYXIoKQoreworICAgIG1fc2V0LmNsZWFyKCk7
CisgICAgbV9sZWZ0T2JqZWN0c0NvdW50ID0gMDsKKyAgICBtX3JpZ2h0T2JqZWN0c0NvdW50ID0g
MDsKK30KKworaW5saW5lIHZvaWQgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0czo6aW5jcmVh
c2VPYmplY3RzQ291bnQoRmxvYXRpbmdPYmplY3Q6OlR5cGUgdHlwZSkKK3sgICAgCisgICAgaWYg
KHR5cGUgPT0gRmxvYXRpbmdPYmplY3Q6OkZsb2F0TGVmdCkKKyAgICAgICAgbV9sZWZ0T2JqZWN0
c0NvdW50Kys7CisgICAgZWxzZQorICAgICAgICBtX3JpZ2h0T2JqZWN0c0NvdW50Kys7Cit9CisK
K2lubGluZSB2b2lkIFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdHM6OmRlY3JlYXNlT2JqZWN0
c0NvdW50KEZsb2F0aW5nT2JqZWN0OjpUeXBlIHR5cGUpCit7CisgICAgaWYgKHR5cGUgPT0gRmxv
YXRpbmdPYmplY3Q6OkZsb2F0TGVmdCkKKyAgICAgICAgbV9sZWZ0T2JqZWN0c0NvdW50LS07Cisg
ICAgZWxzZQorICAgICAgICBtX3JpZ2h0T2JqZWN0c0NvdW50LS07Cit9CisKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCShy
ZXZpc2lvbiA4MDMwNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5o
CSh3b3JraW5nIGNvcHkpCkBAIC05NSw3ICs5NSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIG1hcmtQ
b3NpdGlvbmVkT2JqZWN0c0ZvckxheW91dCgpOwogICAgIHZpcnR1YWwgdm9pZCBtYXJrRm9yUGFn
aW5hdGlvblJlbGF5b3V0SWZOZWVkZWQoKTsKICAgICAKLSAgICBib29sIGNvbnRhaW5zRmxvYXRz
KCkgeyByZXR1cm4gbV9mbG9hdGluZ09iamVjdHMgJiYgIW1fZmxvYXRpbmdPYmplY3RzLT5pc0Vt
cHR5KCk7IH0KKyAgICBib29sIGNvbnRhaW5zRmxvYXRzKCkgeyByZXR1cm4gbV9mbG9hdGluZ09i
amVjdHMgJiYgIW1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKS5pc0VtcHR5KCk7IH0KICAgICBib29s
IGNvbnRhaW5zRmxvYXQoUmVuZGVyQm94Kik7CiAKICAgICBpbnQgYXZhaWxhYmxlTG9naWNhbFdp
ZHRoRm9yTGluZShpbnQgcG9zaXRpb24sIGJvb2wgZmlyc3RMaW5lKSBjb25zdDsKQEAgLTcxMiw3
ICs3MTIsMjcgQEAgcHJpdmF0ZToKICAgICB9OwogICAgIHR5cGVkZWYgTGlzdEhhc2hTZXQ8Rmxv
YXRpbmdPYmplY3QqLCA0LCBGbG9hdGluZ09iamVjdEhhc2hGdW5jdGlvbnM+IEZsb2F0aW5nT2Jq
ZWN0U2V0OwogICAgIHR5cGVkZWYgRmxvYXRpbmdPYmplY3RTZXQ6OmNvbnN0X2l0ZXJhdG9yIEZs
b2F0aW5nT2JqZWN0U2V0SXRlcmF0b3I7Ci0gICAgT3duUHRyPEZsb2F0aW5nT2JqZWN0U2V0PiBt
X2Zsb2F0aW5nT2JqZWN0czsKKyAgICBjbGFzcyBGbG9hdGluZ09iamVjdHMgeworICAgIHB1Ymxp
YzoKKyAgICAgICAgRmxvYXRpbmdPYmplY3RzKCkKKyAgICAgICAgICAgIDogbV9sZWZ0T2JqZWN0
c0NvdW50KDApCisgICAgICAgICAgICAsIG1fcmlnaHRPYmplY3RzQ291bnQoMCkKKyAgICAgICAg
eworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBjbGVhcigpOworICAgICAgICB2b2lkIGluY3Jl
YXNlT2JqZWN0c0NvdW50KEZsb2F0aW5nT2JqZWN0OjpUeXBlKTsKKyAgICAgICAgdm9pZCBkZWNy
ZWFzZU9iamVjdHNDb3VudChGbG9hdGluZ09iamVjdDo6VHlwZSk7CisgICAgICAgIGJvb2wgaGFz
TGVmdE9iamVjdHMoKSBjb25zdCB7IHJldHVybiBtX2xlZnRPYmplY3RzQ291bnQgPiAwOyB9Cisg
ICAgICAgIGJvb2wgaGFzUmlnaHRPYmplY3RzKCkgY29uc3QgeyByZXR1cm4gbV9yaWdodE9iamVj
dHNDb3VudCA+IDA7IH0KKyAgICAgICAgRmxvYXRpbmdPYmplY3RTZXQmIHNldCgpIHsgcmV0dXJu
IG1fc2V0OyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBGbG9hdGluZ09iamVjdFNldCBtX3Nl
dDsKKyAgICAgICAgdW5zaWduZWQgbV9sZWZ0T2JqZWN0c0NvdW50OworICAgICAgICB1bnNpZ25l
ZCBtX3JpZ2h0T2JqZWN0c0NvdW50OworICAgIH07CisgICAgT3duUHRyPEZsb2F0aW5nT2JqZWN0
cz4gbV9mbG9hdGluZ09iamVjdHM7CiAgICAgCiAgICAgdHlwZWRlZiBQb3NpdGlvbmVkT2JqZWN0
c0xpc3RIYXNoU2V0Ojpjb25zdF9pdGVyYXRvciBJdGVyYXRvcjsKICAgICBPd25QdHI8UG9zaXRp
b25lZE9iamVjdHNMaXN0SGFzaFNldD4gbV9wb3NpdGlvbmVkT2JqZWN0czsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCShy
ZXZpc2lvbiA4MDMwNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xp
bmVMYXlvdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MTgsNyArNjE4LDcgQEAgdm9pZCBSZW5k
ZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4oYgogICAgICAgICAgICAgfQogICAgICAgICB9
CiAKLSAgICAgICAgRmxvYXRpbmdPYmplY3QqIGxhc3RGbG9hdCA9IChtX2Zsb2F0aW5nT2JqZWN0
cyAmJiAhbV9mbG9hdGluZ09iamVjdHMtPmlzRW1wdHkoKSkgPyBtX2Zsb2F0aW5nT2JqZWN0cy0+
bGFzdCgpIDogMDsKKyAgICAgICAgRmxvYXRpbmdPYmplY3QqIGxhc3RGbG9hdCA9IChtX2Zsb2F0
aW5nT2JqZWN0cyAmJiAhbV9mbG9hdGluZ09iamVjdHMtPnNldCgpLmlzRW1wdHkoKSkgPyBtX2Zs
b2F0aW5nT2JqZWN0cy0+c2V0KCkubGFzdCgpIDogMDsKIAogICAgICAgICBMaW5lTWlkcG9pbnRT
dGF0ZSYgbGluZU1pZHBvaW50U3RhdGUgPSByZXNvbHZlci5taWRwb2ludFN0YXRlKCk7CiAKQEAg
LTY4OCw3ICs2ODgsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVDaGlsZHJlbihi
CiAgICAgICAgICAgICBib29sIGh5cGhlbmF0ZWQ7CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IElubGluZUl0ZXJhdG9yIG9sZEVuZCA9IGVuZDsKLSAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0
KiBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lID0gKG1fZmxvYXRpbmdPYmplY3RzICYmICFtX2Zs
b2F0aW5nT2JqZWN0cy0+aXNFbXB0eSgpKSA/IG1fZmxvYXRpbmdPYmplY3RzLT5sYXN0KCkgOiAw
OworICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUg
PSAobV9mbG9hdGluZ09iamVjdHMgJiYgIW1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKS5pc0VtcHR5
KCkpID8gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpLmxhc3QoKSA6IDA7CiAgICAgICAgICAgICBl
bmQgPSBmaW5kTmV4dExpbmVCcmVhayhyZXNvbHZlciwgZmlyc3RMaW5lLCBpc0xpbmVFbXB0eSwg
bGluZUJyZWFrSXRlcmF0b3JJbmZvLCBwcmV2aW91c0xpbmVCcm9rZUNsZWFubHksIGh5cGhlbmF0
ZWQsICZjbGVhciwgbGFzdEZsb2F0RnJvbVByZXZpb3VzTGluZSk7CiAgICAgICAgICAgICBpZiAo
cmVzb2x2ZXIucG9zaXRpb24oKS5hdEVuZCgpKSB7CiAgICAgICAgICAgICAgICAgcmVzb2x2ZXIu
ZGVsZXRlUnVucygpOwpAQCAtODM5LDEwICs4MzksMTEgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5
b3V0SW5saW5lQ2hpbGRyZW4oYgogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAobV9m
bG9hdGluZ09iamVjdHMgJiYgbGFzdFJvb3RCb3goKSkgewotICAgICAgICAgICAgICAgIEZsb2F0
aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+YmVnaW4oKTsKLSAg
ICAgICAgICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IG1fZmxvYXRpbmdP
YmplY3RzLT5lbmQoKTsKKyAgICAgICAgICAgICAgICBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRp
bmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CisgICAgICAgICAgICAgICAg
RmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7
CisgICAgICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGlu
Z09iamVjdFNldC5lbmQoKTsKICAgICAgICAgICAgICAgICBpZiAobGFzdEZsb2F0KSB7Ci0gICAg
ICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgbGFzdEZsb2F0SXRlcmF0
b3IgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+ZmluZChsYXN0RmxvYXQpOworICAgICAgICAgICAgICAg
ICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGxhc3RGbG9hdEl0ZXJhdG9yID0gZmxvYXRp
bmdPYmplY3RTZXQuZmluZChsYXN0RmxvYXQpOwogICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
bGFzdEZsb2F0SXRlcmF0b3IgIT0gZW5kKTsKICAgICAgICAgICAgICAgICAgICAgKytsYXN0Rmxv
YXRJdGVyYXRvcjsKICAgICAgICAgICAgICAgICAgICAgaXQgPSBsYXN0RmxvYXRJdGVyYXRvcjsK
QEAgLTg1Niw3ICs4NTcsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVDaGlsZHJl
bihiCiAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja0ZvckVuZExpbmVNYXRjaCA9IGZhbHNl
OwogICAgICAgICAgICAgICAgICAgICBmbG9hdEluZGV4Kys7CiAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGxhc3RGbG9hdCA9ICFtX2Zsb2F0aW5nT2JqZWN0cy0+aXNFbXB0eSgp
ID8gbV9mbG9hdGluZ09iamVjdHMtPmxhc3QoKSA6IDA7CisgICAgICAgICAgICAgICAgbGFzdEZs
b2F0ID0gIWZsb2F0aW5nT2JqZWN0U2V0LmlzRW1wdHkoKSA/IGZsb2F0aW5nT2JqZWN0U2V0Lmxh
c3QoKSA6IDA7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGxpbmVNaWRwb2ludFN0YXRl
LnJlc2V0KCk7CkBAIC05MjAsMTcgKzkyMSwxOCBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRJ
bmxpbmVDaGlsZHJlbihiCiAgICAgICAgICAgICAgICAgdHJhaWxpbmdGbG9hdHNMaW5lQm94LT5z
ZXRCbG9ja0xvZ2ljYWxIZWlnaHQobG9naWNhbEhlaWdodCgpKTsKICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IG1fZmxvYXRpbmdPYmpl
Y3RzLT5iZWdpbigpOwotICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQg
PSBtX2Zsb2F0aW5nT2JqZWN0cy0+ZW5kKCk7CisgICAgICAgICAgICBGbG9hdGluZ09iamVjdFNl
dCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CisgICAgICAg
ICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVn
aW4oKTsKKyAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRp
bmdPYmplY3RTZXQuZW5kKCk7CiAgICAgICAgICAgICBpZiAobGFzdEZsb2F0KSB7Ci0gICAgICAg
ICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBsYXN0RmxvYXRJdGVyYXRvciA9IG1f
ZmxvYXRpbmdPYmplY3RzLT5maW5kKGxhc3RGbG9hdCk7CisgICAgICAgICAgICAgICAgRmxvYXRp
bmdPYmplY3RTZXRJdGVyYXRvciBsYXN0RmxvYXRJdGVyYXRvciA9IGZsb2F0aW5nT2JqZWN0U2V0
LmZpbmQobGFzdEZsb2F0KTsKICAgICAgICAgICAgICAgICBBU1NFUlQobGFzdEZsb2F0SXRlcmF0
b3IgIT0gZW5kKTsKICAgICAgICAgICAgICAgICArK2xhc3RGbG9hdEl0ZXJhdG9yOwogICAgICAg
ICAgICAgICAgIGl0ID0gbGFzdEZsb2F0SXRlcmF0b3I7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KQogICAgICAgICAgICAgICAgIGxhc3RSb290Qm94
KCktPmZsb2F0cygpLmFwcGVuZCgoKml0KS0+bV9yZW5kZXJlcik7Ci0gICAgICAgICAgICBsYXN0
RmxvYXQgPSAhbV9mbG9hdGluZ09iamVjdHMtPmlzRW1wdHkoKSA/IG1fZmxvYXRpbmdPYmplY3Rz
LT5sYXN0KCkgOiAwOworICAgICAgICAgICAgbGFzdEZsb2F0ID0gIWZsb2F0aW5nT2JqZWN0U2V0
LmlzRW1wdHkoKSA/IGZsb2F0aW5nT2JqZWN0U2V0Lmxhc3QoKSA6IDA7CiAgICAgICAgIH0KICAg
ICAgICAgc2l6ZV90IGZsb2F0Q291bnQgPSBmbG9hdHMuc2l6ZSgpOwogICAgICAgICAvLyBGbG9h
dHMgdGhhdCBkaWQgbm90IGhhdmUgbGF5b3V0IGRpZCBub3QgcmVwYWludCB3aGVuIHdlIGxhaWQg
dGhlbSBvdXQuIFRoZXkgd291bGQgaGF2ZQpAQCAtMTE2Nyw4ICsxMTY5LDkgQEAgYm9vbCBSZW5k
ZXJCbG9jazo6bWF0Y2hlZEVuZExpbmUoY29uc3QgSQogCiAgICAgICAgIGludCBsb2dpY2FsQm90
dG9tID0gbGFzdExpbmUtPmJsb2NrTG9naWNhbEhlaWdodCgpICsgYWJzKGRlbHRhKTsKIAotICAg
ICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IG1fZmxvYXRpbmdPYmplY3RzLT5l
bmQoKTsKLSAgICAgICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gbV9mbG9h
dGluZ09iamVjdHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBGbG9hdGlu
Z09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7
CisgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RT
ZXQuZW5kKCk7CisgICAgICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZs
b2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAg
RmxvYXRpbmdPYmplY3QqIGYgPSAqaXQ7CiAgICAgICAgICAgICBpZiAobG9naWNhbEJvdHRvbUZv
ckZsb2F0KGYpID49IGxvZ2ljYWxUb3AgJiYgbG9naWNhbEJvdHRvbUZvckZsb2F0KGYpIDwgbG9n
aWNhbEJvdHRvbSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMjAzLDggKzEy
MDYsOSBAQCBib29sIFJlbmRlckJsb2NrOjptYXRjaGVkRW5kTGluZShjb25zdCBJCiAKICAgICAg
ICAgICAgICAgICBpbnQgbG9naWNhbEJvdHRvbSA9IGxhc3RMaW5lLT5ibG9ja0xvZ2ljYWxIZWln
aHQoKSArIGFicyhkZWx0YSk7CiAKLSAgICAgICAgICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0
ZXJhdG9yIGVuZCA9IG1fZmxvYXRpbmdPYmplY3RzLT5lbmQoKTsKLSAgICAgICAgICAgICAgICBm
b3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+YmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RT
ZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOworICAgICAg
ICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RT
ZXQuZW5kKCk7CisgICAgICAgICAgICAgICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9y
IGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAg
ICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmID0gKml0OwogICAgICAgICAgICAgICAg
ICAgICBpZiAobG9naWNhbEJvdHRvbUZvckZsb2F0KGYpID49IGxvZ2ljYWxUb3AgJiYgbG9naWNh
bEJvdHRvbUZvckZsb2F0KGYpIDwgbG9naWNhbEJvdHRvbSkKICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>