<?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>104366</bug_id>
          
          <creation_ts>2012-12-07 05:48:55 -0800</creation_ts>
          <short_desc>Make order iterator member stack allocated in RenderFlexibleBox</short_desc>
          <delta_ts>2012-12-20 01:19:23 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ap</cc>
    
    <cc>dbarton</cc>
    
    <cc>eric</cc>
    
    <cc>kling</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>785831</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-12-07 05:48:55 -0800</bug_when>
    <thetext>We avoid heap allocations during layout.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785837</commentid>
    <comment_count>1</comment_count>
      <attachid>178209</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-12-07 05:57:20 -0800</bug_when>
    <thetext>Created attachment 178209
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785846</commentid>
    <comment_count>2</comment_count>
      <attachid>178209</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-12-07 06:11:52 -0800</bug_when>
    <thetext>Comment on attachment 178209
Patch

Attachment 178209 did not pass win-ews (win):
Output: http://queues.webkit.org/results/15187298</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785966</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-12-07 10:32:08 -0800</bug_when>
    <thetext>&gt; We avoid heap allocations during layout.

I&apos;m a layout expert, but this is the first time I hear about this rule. Can you please elaborate?

Will this make RenderFlexibleBox much larger in some cases, or does m_orderIterator always get created eventually anyway?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785967</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-12-07 10:32:30 -0800</bug_when>
    <thetext>&gt; I&apos;m a layout expert,

I&apos;m NOT a layout expert :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785972</commentid>
    <comment_count>5</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2012-12-07 10:37:02 -0800</bug_when>
    <thetext>What benchmark (or web page) are you targeting? How big of an improvement is this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785985</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-12-07 10:54:02 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; &gt; We avoid heap allocations during layout.
&gt; 
&gt; I&apos;m a layout expert, but this is the first time I hear about this rule. Can you please elaborate?

We do lots of heap allocations during layout :-)  I haven&apos;t read the patch yet. But that rule as stated is overbroad. :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>786037</commentid>
    <comment_count>7</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-12-07 12:13:00 -0800</bug_when>
    <thetext>I don&apos;t think Carlos is saying that avoiding heap allocations during layout is a rule.  He&apos;s just saying for this code, we&apos;ll avoid a heap allocation since we always create this object.  He is simply describing the change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>786041</commentid>
    <comment_count>8</comment_count>
      <attachid>178209</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-12-07 12:18:17 -0800</bug_when>
    <thetext>Comment on attachment 178209
Patch

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

&gt; Source/WebCore/ChangeLog:14
&gt; +        (WebCore::RenderFlexibleBox::baselinePosition): Make it non const
&gt; +        because the order iterator is modified.

This doesn&apos;t work because now it&apos;s not actually overriding the parent class&apos;s virtual baselinePosition method. constness has to match. I&apos;m not what you should do instead. :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>786046</commentid>
    <comment_count>9</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-12-07 12:21:09 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 178209 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=178209&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:14
&gt; &gt; +        (WebCore::RenderFlexibleBox::baselinePosition): Make it non const
&gt; &gt; +        because the order iterator is modified.
&gt; 
&gt; This doesn&apos;t work because now it&apos;s not actually overriding the parent class&apos;s virtual baselinePosition method. constness has to match. I&apos;m not what you should do instead. :(

I would probably make m_orderIterator mutable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>786483</commentid>
    <comment_count>10</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-12-08 04:55:10 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; I don&apos;t think Carlos is saying that avoiding heap allocations during layout is a rule.  He&apos;s just saying for this code, we&apos;ll avoid a heap allocation since we always create this object.  He is simply describing the change.

Yes, exactly, the iterator was not a member at first, then it became a member and Tony suggested that maybe we could make it stack allocated, which I think makes sense, so I wrote the patch. This doesn&apos;t try to fix a performance issue in the layout algorithm.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>786484</commentid>
    <comment_count>11</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-12-08 04:55:45 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 178209 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=178209&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:14
&gt; &gt; +        (WebCore::RenderFlexibleBox::baselinePosition): Make it non const
&gt; &gt; +        because the order iterator is modified.
&gt; 
&gt; This doesn&apos;t work because now it&apos;s not actually overriding the parent class&apos;s virtual baselinePosition method. constness has to match. I&apos;m not what you should do instead. :(

Yes, I noticed it when I saw the windows build failed :-(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>793571</commentid>
    <comment_count>12</comment_count>
      <attachid>179926</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-12-18 05:22:39 -0800</bug_when>
    <thetext>Created attachment 179926
Updated patch

Make the iterator mutable as suggested by Tony.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>793843</commentid>
    <comment_count>13</comment_count>
      <attachid>179926</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-12-18 11:09:38 -0800</bug_when>
    <thetext>Comment on attachment 179926
Updated patch

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

&gt; Source/WebCore/ChangeLog:8
&gt; +        It avoids heap allocations during the layout.

Nit: I would say, &quot;It avoids a heap allocation during layout.&quot;

&gt; Source/WebCore/rendering/RenderFlexibleBox.h:92
&gt; +        void setOrderValues(const OrderHashSet&amp; orderValues)
&gt; +        {
&gt; +            reset();

Can we move this method definition into the .cpp file? That would also let you keep OrderHashTraits in the .cpp file.

&gt; Source/WebCore/rendering/RenderFlexibleBox.h:107
&gt; +        RenderBox* next()
&gt; +        {
&gt; +            do {

Can we move this method definition into the .cpp file?

&gt; Source/WebCore/rendering/RenderFlexibleBox.h:133
&gt; +    private:
&gt; +        RenderFlexibleBox* m_flexibleBox;

Maybe add WTF_MAKE_NONCOPYABLE(OrderIterator) to avoid accidental copies?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794411</commentid>
    <comment_count>14</comment_count>
      <attachid>180110</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-12-19 00:39:16 -0800</bug_when>
    <thetext>Created attachment 180110
Updated patch

Moved the implementation of the OrderIterator class to the cpp file and made it non copyable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794457</commentid>
    <comment_count>15</comment_count>
      <attachid>180121</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-12-19 01:56:59 -0800</bug_when>
    <thetext>Created attachment 180121
Updated patch to apply on current git master</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794800</commentid>
    <comment_count>16</comment_count>
      <attachid>180121</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-12-19 10:46:57 -0800</bug_when>
    <thetext>Comment on attachment 180121
Updated patch to apply on current git master

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>795263</commentid>
    <comment_count>17</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-12-20 01:19:23 -0800</bug_when>
    <thetext>Committed r138235: &lt;http://trac.webkit.org/changeset/138235&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>178209</attachid>
            <date>2012-12-07 05:57:20 -0800</date>
            <delta_ts>2012-12-18 05:22:39 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>wcore-flexbox-order-iterator-stack.diff</filename>
            <type>text/plain</type>
            <size>25912</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwZTNlNGI5Li41YzhkODI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTcg
QEAKKzIwMTItMTItMDcgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIE1ha2Ugb3JkZXIgaXRlcmF0b3IgbWVtYmVyIHN0YWNrIGFsbG9jYXRlZCBp
biBSZW5kZXJGbGV4aWJsZUJveAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTA0MzY2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgSXQgYXZvaWRzIGhlYXAgYWxsb2NhdGlvbnMgZHVyaW5nIHRoZSBsYXlvdXQu
CisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyRmxleGlibGVCb3g6OlJlbmRlckZsZXhpYmxlQm94KTogSW5pdGlhbGl6
ZSB0aGUKKyAgICAgICAgb3JkZXIgaXRlcmF0b3IuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJG
bGV4aWJsZUJveDo6YmFzZWxpbmVQb3NpdGlvbik6IE1ha2UgaXQgbm9uIGNvbnN0CisgICAgICAg
IGJlY2F1c2UgdGhlIG9yZGVyIGl0ZXJhdG9yIGlzIG1vZGlmaWVkLgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyRmxleGlibGVCb3g6OmZpcnN0TGluZUJveEJhc2VsaW5lKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJGbGV4aWJsZUJveDo6aW5saW5lQmxvY2tCYXNlbGluZSk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxleGlibGVCb3g6OmxheW91dEJsb2NrKTog
VXNlIHNldE9yZGVyVmFsdWVzKCkgdG8KKyAgICAgICAgc2V0IHRoZSBuZXcgb3JkZXIgdmFsdWVz
IGZvciB0aGUgaXRlcmF0b3IuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbGV4aWJsZUJveDo6
YXBwZW5kQ2hpbGRGcmFtZVJlY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsZXhpYmxl
Qm94OjpyZXBhaW50Q2hpbGRyZW5EdXJpbmdMYXlvdXRJZk1vdmVkKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckZsZXhpYmxlQm94OjpwYWludENoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckZsZXhpYmxlQm94OjpsYXlvdXRGbGV4SXRlbXMpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyRmxleGlibGVCb3g6OmNvbXB1dGVOZXh0RmxleExpbmUpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyRmxleGlibGVCb3g6OmFsaWduRmxleExpbmVzKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckZsZXhpYmxlQm94OjphbGlnbkNoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckZsZXhpYmxlQm94OjpmbGlwRm9yUmlnaHRUb0xlZnRDb2x1bW4pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyRmxleGlibGVCb3g6OmZsaXBGb3JXcmFwUmV2ZXJzZSk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94Lmg6CisgICAgICAgIChPcmRlckhhc2hUcmFpdHMp
OiBNb3ZlZCBmcm9tIHRoZSBjcHAgZmlsZSB0byB0aGUgaGVhZGVyLgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyRmxleGlibGVCb3g6Ok9yZGVySGFzaFRyYWl0czo6ZW1wdHlWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJGbGV4aWJsZUJveDo6T3JkZXJIYXNoVHJhaXRzOjpjb25zdHJ1
Y3REZWxldGVkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxleGlibGVCb3g6Ok9y
ZGVySGFzaFRyYWl0czo6aXNEZWxldGVkVmFsdWUpOgorICAgICAgICAoT3JkZXJJdGVyYXRvcik6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxleGlibGVCb3g6Ok9yZGVySXRlcmF0
b3I6Ok9yZGVySXRlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxleGlibGVCb3g6
Ok9yZGVySXRlcmF0b3I6OnNldE9yZGVyVmFsdWVzKTogTmV3CisgICAgICAgIG1ldGhvZCB0byBz
ZXQgdGhlIG9yZGVyIHZhbHVlcy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsZXhpYmxlQm94
OjpPcmRlckl0ZXJhdG9yOjpjdXJyZW50Q2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
RmxleGlibGVCb3g6Ok9yZGVySXRlcmF0b3I6OmZpcnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckZsZXhpYmxlQm94OjpPcmRlckl0ZXJhdG9yOjpuZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckZsZXhpYmxlQm94OjpPcmRlckl0ZXJhdG9yOjpyZXNldCk6CisgICAgICAgIChSZW5k
ZXJGbGV4aWJsZUJveCk6CisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxC
bG9jay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxCbG9jazo6YmFzZWxpbmVQ
b3NpdGlvbik6IE1ha2UgaXQgbm9uIGNvbnN0CisgICAgICAgIGJlY2F1c2UgdGhlIG9yZGVyIGl0
ZXJhdG9yIGlzIG1vZGlmaWVkLgorICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0
aE1MQmxvY2suaDoKKyAgICAgICAgKFJlbmRlck1hdGhNTEJsb2NrKTogRGl0dG8uCisgICAgICAg
ICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGcmFjdGlvbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJNYXRoTUxGcmFjdGlvbjo6Zmlyc3RMaW5lQm94QmFzZWxpbmUpOiBEaXR0
by4KKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEZyYWN0aW9uLmg6Cisg
ICAgICAgIChSZW5kZXJNYXRoTUxGcmFjdGlvbik6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmlu
Zy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTWF0aE1MT3BlcmF0b3I6OmZpcnN0TGluZUJveEJhc2VsaW5lKTogRGl0dG8uCisgICAgICAg
ICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5oOgorCiAyMDEyLTEyLTA2
ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBV
c2UgYWx3YXlzIHRoZSBvcmRlciBpdGVyYXRvciBmcm9tIGRhdGEgbWVtYmVyIGluIFJlbmRlckZs
ZXhpYmxlQm94CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxl
eGlibGVCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94
LmNwcAppbmRleCAyNzAyZTU2Li4xYWFkYzYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHAKQEAgLTM5LDY5ICszOSw2IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotLy8gTm9ybWFsbHksIC0xIGFuZCAwIGFyZSBub3QgdmFsaWQgaW4gYSBI
YXNoU2V0LCBidXQgdGhlc2UgYXJlIHJlbGF0aXZlbHkgbGlrZWx5IG9yZGVyOiB2YWx1ZXMuIElu
c3RlYWQsCi0vLyB3ZSBtYWtlIHRoZSB0d28gc21hbGxlc3QgaW50IHZhbHVlcyBpbnZhbGlkIG9y
ZGVyOiB2YWx1ZXMgKGluIHRoZSBjc3MgcGFyc2VyIGNvZGUgd2UgY2xhbXAgdGhlbSB0bwotLy8g
aW50IG1pbiArIDIpLgotc3RydWN0IFJlbmRlckZsZXhpYmxlQm94OjpPcmRlckhhc2hUcmFpdHMg
OiBXVEY6OkdlbmVyaWNIYXNoVHJhaXRzPGludD4gewotICAgIHN0YXRpYyBjb25zdCBib29sIGVt
cHR5VmFsdWVJc1plcm8gPSBmYWxzZTsKLSAgICBzdGF0aWMgaW50IGVtcHR5VmFsdWUoKSB7IHJl
dHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1pbigpOyB9Ci0gICAgc3RhdGljIHZvaWQg
Y29uc3RydWN0RGVsZXRlZFZhbHVlKGludCYgc2xvdCkgeyBzbG90ID0gc3RkOjpudW1lcmljX2xp
bWl0czxpbnQ+OjptaW4oKSArIDE7IH0KLSAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShp
bnQgdmFsdWUpIHsgcmV0dXJuIHZhbHVlID09IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWlu
KCkgKyAxOyB9Ci19OwotCi1jbGFzcyBSZW5kZXJGbGV4aWJsZUJveDo6T3JkZXJJdGVyYXRvciB7
Ci1wdWJsaWM6Ci0gICAgT3JkZXJJdGVyYXRvcihSZW5kZXJGbGV4aWJsZUJveCogZmxleGlibGVC
b3gsIGNvbnN0IE9yZGVySGFzaFNldCYgb3JkZXJWYWx1ZXMpCi0gICAgICAgIDogbV9mbGV4aWJs
ZUJveChmbGV4aWJsZUJveCkKLSAgICAgICAgLCBtX2N1cnJlbnRDaGlsZCgwKQotICAgICAgICAs
IG1fb3JkZXJWYWx1ZXNJdGVyYXRvcigwKQotICAgIHsKLSAgICAgICAgY29weVRvVmVjdG9yKG9y
ZGVyVmFsdWVzLCBtX29yZGVyVmFsdWVzKTsKLSAgICAgICAgc3RkOjpzb3J0KG1fb3JkZXJWYWx1
ZXMuYmVnaW4oKSwgbV9vcmRlclZhbHVlcy5lbmQoKSk7Ci0gICAgfQotCi0gICAgUmVuZGVyQm94
KiBjdXJyZW50Q2hpbGQoKSB7IHJldHVybiBtX2N1cnJlbnRDaGlsZDsgfQotCi0gICAgUmVuZGVy
Qm94KiBmaXJzdCgpCi0gICAgewotICAgICAgICByZXNldCgpOwotICAgICAgICByZXR1cm4gbmV4
dCgpOwotICAgIH0KLQotICAgIFJlbmRlckJveCogbmV4dCgpCi0gICAgewotICAgICAgICBkbyB7
Ci0gICAgICAgICAgICBpZiAoIW1fY3VycmVudENoaWxkKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KG1fb3JkZXJWYWx1ZXNJdGVyYXRvciA9PSBtX29yZGVyVmFsdWVzLmVuZCgpKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICBpZiAobV9vcmRlclZhbHVlc0l0
ZXJhdG9yKSB7Ci0gICAgICAgICAgICAgICAgICAgICsrbV9vcmRlclZhbHVlc0l0ZXJhdG9yOwot
ICAgICAgICAgICAgICAgICAgICBpZiAobV9vcmRlclZhbHVlc0l0ZXJhdG9yID09IG1fb3JkZXJW
YWx1ZXMuZW5kKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAg
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV9vcmRlclZhbHVlc0l0ZXJhdG9y
ID0gbV9vcmRlclZhbHVlcy5iZWdpbigpOwotCi0gICAgICAgICAgICAgICAgbV9jdXJyZW50Q2hp
bGQgPSBtX2ZsZXhpYmxlQm94LT5maXJzdENoaWxkQm94KCk7Ci0gICAgICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgICAgICBtX2N1cnJlbnRDaGlsZCA9IG1fY3VycmVudENoaWxkLT5uZXh0U2li
bGluZ0JveCgpOwotICAgICAgICB9IHdoaWxlICghbV9jdXJyZW50Q2hpbGQgfHwgbV9jdXJyZW50
Q2hpbGQtPnN0eWxlKCktPm9yZGVyKCkgIT0gKm1fb3JkZXJWYWx1ZXNJdGVyYXRvcik7Ci0KLSAg
ICAgICAgcmV0dXJuIG1fY3VycmVudENoaWxkOwotICAgIH0KLQotICAgIHZvaWQgcmVzZXQoKQot
ICAgIHsKLSAgICAgICAgbV9jdXJyZW50Q2hpbGQgPSAwOwotICAgICAgICBtX29yZGVyVmFsdWVz
SXRlcmF0b3IgPSAwOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBSZW5kZXJGbGV4aWJsZUJveCog
bV9mbGV4aWJsZUJveDsKLSAgICBSZW5kZXJCb3gqIG1fY3VycmVudENoaWxkOwotICAgIFZlY3Rv
cjxpbnQ+IG1fb3JkZXJWYWx1ZXM7Ci0gICAgVmVjdG9yPGludD46OmNvbnN0X2l0ZXJhdG9yIG1f
b3JkZXJWYWx1ZXNJdGVyYXRvcjsKLX07Ci0KIHN0cnVjdCBSZW5kZXJGbGV4aWJsZUJveDo6TGlu
ZUNvbnRleHQgewogICAgIExpbmVDb250ZXh0KExheW91dFVuaXQgY3Jvc3NBeGlzT2Zmc2V0LCBM
YXlvdXRVbml0IGNyb3NzQXhpc0V4dGVudCwgc2l6ZV90IG51bWJlck9mQ2hpbGRyZW4sIExheW91
dFVuaXQgbWF4QXNjZW50KQogICAgICAgICA6IGNyb3NzQXhpc09mZnNldChjcm9zc0F4aXNPZmZz
ZXQpCkBAIC0xMzEsNiArNjgsNyBAQCBzdHJ1Y3QgUmVuZGVyRmxleGlibGVCb3g6OlZpb2xhdGlv
biB7CiAKIFJlbmRlckZsZXhpYmxlQm94OjpSZW5kZXJGbGV4aWJsZUJveChOb2RlKiBub2RlKQog
ICAgIDogUmVuZGVyQmxvY2sobm9kZSkKKyAgICAsIG1fb3JkZXJJdGVyYXRvcih0aGlzKQogICAg
ICwgbV9udW1iZXJPZkluRmxvd0NoaWxkcmVuT25GaXJzdExpbmUoLTEpCiB7CiAgICAgc2V0Q2hp
bGRyZW5JbmxpbmUoZmFsc2UpOyAvLyBBbGwgb2Ygb3VyIGNoaWxkcmVuIG11c3QgYmUgYmxvY2st
bGV2ZWwuCkBAIC0yMzksNyArMTc3LDcgQEAgc3RhdGljIGludCBzeW50aGVzaXplZEJhc2VsaW5l
RnJvbUNvbnRlbnRCb3goY29uc3QgUmVuZGVyQm94KiBib3gsIExpbmVEaXJlY3Rpb24KICAgICBy
ZXR1cm4gZGlyZWN0aW9uID09IEhvcml6b250YWxMaW5lID8gYm94LT5ib3JkZXJUb3AoKSArIGJv
eC0+cGFkZGluZ1RvcCgpICsgYm94LT5jb250ZW50SGVpZ2h0KCkgOiBib3gtPmJvcmRlclJpZ2h0
KCkgKyBib3gtPnBhZGRpbmdSaWdodCgpICsgYm94LT5jb250ZW50V2lkdGgoKTsKIH0KIAotaW50
IFJlbmRlckZsZXhpYmxlQm94OjpiYXNlbGluZVBvc2l0aW9uKEZvbnRCYXNlbGluZSwgYm9vbCwg
TGluZURpcmVjdGlvbk1vZGUgZGlyZWN0aW9uLCBMaW5lUG9zaXRpb25Nb2RlKSBjb25zdAoraW50
IFJlbmRlckZsZXhpYmxlQm94OjpiYXNlbGluZVBvc2l0aW9uKEZvbnRCYXNlbGluZSwgYm9vbCwg
TGluZURpcmVjdGlvbk1vZGUgZGlyZWN0aW9uLCBMaW5lUG9zaXRpb25Nb2RlKQogewogICAgIGlu
dCBiYXNlbGluZSA9IGZpcnN0TGluZUJveEJhc2VsaW5lKCk7CiAgICAgaWYgKGJhc2VsaW5lID09
IC0xKQpAQCAtMjQ5LDE1ICsxODcsMTMgQEAgaW50IFJlbmRlckZsZXhpYmxlQm94OjpiYXNlbGlu
ZVBvc2l0aW9uKEZvbnRCYXNlbGluZSwgYm9vbCwgTGluZURpcmVjdGlvbk1vZGUgZGkKICAgICBy
ZXR1cm4gYmFzZWxpbmUgKyBtYXJnaW5Bc2NlbnQ7CiB9CiAKLWludCBSZW5kZXJGbGV4aWJsZUJv
eDo6Zmlyc3RMaW5lQm94QmFzZWxpbmUoKSBjb25zdAoraW50IFJlbmRlckZsZXhpYmxlQm94Ojpm
aXJzdExpbmVCb3hCYXNlbGluZSgpCiB7Ci0gICAgQVNTRVJUKG1fb3JkZXJJdGVyYXRvcik7Ci0K
ICAgICBpZiAoaXNXcml0aW5nTW9kZVJvb3QoKSB8fCBtX251bWJlck9mSW5GbG93Q2hpbGRyZW5P
bkZpcnN0TGluZSA8PSAwKQogICAgICAgICByZXR1cm4gLTE7CiAgICAgUmVuZGVyQm94KiBiYXNl
bGluZUNoaWxkID0gMDsKICAgICBpbnQgY2hpbGROdW1iZXIgPSAwOwotICAgIGZvciAoUmVuZGVy
Qm94KiBjaGlsZCA9IG1fb3JkZXJJdGVyYXRvci0+Zmlyc3QoKTsgY2hpbGQ7IGNoaWxkID0gbV9v
cmRlckl0ZXJhdG9yLT5uZXh0KCkpIHsKKyAgICBmb3IgKFJlbmRlckJveCogY2hpbGQgPSBtX29y
ZGVySXRlcmF0b3IuZmlyc3QoKTsgY2hpbGQ7IGNoaWxkID0gbV9vcmRlckl0ZXJhdG9yLm5leHQo
KSkgewogICAgICAgICBpZiAoY2hpbGQtPmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKQogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIGlmIChhbGlnbm1lbnRGb3JDaGlsZChjaGlsZCkgPT0g
QWxpZ25CYXNlbGluZSAmJiAhaGFzQXV0b01hcmdpbnNJbkNyb3NzQXhpcyhjaGlsZCkpIHsKQEAg
LTI5MSw3ICsyMjcsNyBAQCBpbnQgUmVuZGVyRmxleGlibGVCb3g6OmZpcnN0TGluZUJveEJhc2Vs
aW5lKCkgY29uc3QKICAgICByZXR1cm4gYmFzZWxpbmUgKyBiYXNlbGluZUNoaWxkLT5sb2dpY2Fs
VG9wKCk7CiB9CiAKLWludCBSZW5kZXJGbGV4aWJsZUJveDo6aW5saW5lQmxvY2tCYXNlbGluZShM
aW5lRGlyZWN0aW9uTW9kZSBkaXJlY3Rpb24pIGNvbnN0CitpbnQgUmVuZGVyRmxleGlibGVCb3g6
OmlubGluZUJsb2NrQmFzZWxpbmUoTGluZURpcmVjdGlvbk1vZGUgZGlyZWN0aW9uKQogewogICAg
IGludCBiYXNlbGluZSA9IGZpcnN0TGluZUJveEJhc2VsaW5lKCk7CiAgICAgaWYgKGJhc2VsaW5l
ICE9IC0xKQpAQCAtMzMxLDcgKzI2Nyw3IEBAIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmxheW91
dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCkKICAgICBWZWN0b3I8TGlu
ZUNvbnRleHQ+IGxpbmVDb250ZXh0czsKICAgICBPcmRlckhhc2hTZXQgb3JkZXJWYWx1ZXM7CiAg
ICAgY29tcHV0ZU1haW5BeGlzUHJlZmVycmVkU2l6ZXMocmVsYXlvdXRDaGlsZHJlbiwgb3JkZXJW
YWx1ZXMpOwotICAgIG1fb3JkZXJJdGVyYXRvciA9IGFkb3B0UHRyKG5ldyBPcmRlckl0ZXJhdG9y
KHRoaXMsIG9yZGVyVmFsdWVzKSk7CisgICAgbV9vcmRlckl0ZXJhdG9yLnNldE9yZGVyVmFsdWVz
KG9yZGVyVmFsdWVzKTsKIAogICAgIENoaWxkRnJhbWVSZWN0cyBvbGRDaGlsZFJlY3RzOwogICAg
IGFwcGVuZENoaWxkRnJhbWVSZWN0cyhvbGRDaGlsZFJlY3RzKTsKQEAgLTM2OSw5ICszMDUsNyBA
QCB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjpsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRy
ZW4sIExheW91dFVuaXQpCiAKIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmFwcGVuZENoaWxkRnJh
bWVSZWN0cyhDaGlsZEZyYW1lUmVjdHMmIGNoaWxkRnJhbWVSZWN0cykKIHsKLSAgICBBU1NFUlQo
bV9vcmRlckl0ZXJhdG9yKTsKLQotICAgIGZvciAoUmVuZGVyQm94KiBjaGlsZCA9IG1fb3JkZXJJ
dGVyYXRvci0+Zmlyc3QoKTsgY2hpbGQ7IGNoaWxkID0gbV9vcmRlckl0ZXJhdG9yLT5uZXh0KCkp
IHsKKyAgICBmb3IgKFJlbmRlckJveCogY2hpbGQgPSBtX29yZGVySXRlcmF0b3IuZmlyc3QoKTsg
Y2hpbGQ7IGNoaWxkID0gbV9vcmRlckl0ZXJhdG9yLm5leHQoKSkgewogICAgICAgICBpZiAoIWNo
aWxkLT5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSkKICAgICAgICAgICAgIGNoaWxkRnJhbWVSZWN0
cy5hcHBlbmQoY2hpbGQtPmZyYW1lUmVjdCgpKTsKICAgICB9CkBAIC0zNzksMTAgKzMxMyw4IEBA
IHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmFwcGVuZENoaWxkRnJhbWVSZWN0cyhDaGlsZEZyYW1l
UmVjdHMmIGNoaWxkRnJhbWVSZWN0cykKIAogdm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6cmVwYWlu
dENoaWxkcmVuRHVyaW5nTGF5b3V0SWZNb3ZlZChjb25zdCBDaGlsZEZyYW1lUmVjdHMmIG9sZENo
aWxkUmVjdHMpCiB7Ci0gICAgQVNTRVJUKG1fb3JkZXJJdGVyYXRvcik7Ci0KICAgICBzaXplX3Qg
Y2hpbGRJbmRleCA9IDA7Ci0gICAgZm9yIChSZW5kZXJCb3gqIGNoaWxkID0gbV9vcmRlckl0ZXJh
dG9yLT5maXJzdCgpOyBjaGlsZDsgY2hpbGQgPSBtX29yZGVySXRlcmF0b3ItPm5leHQoKSkgewor
ICAgIGZvciAoUmVuZGVyQm94KiBjaGlsZCA9IG1fb3JkZXJJdGVyYXRvci5maXJzdCgpOyBjaGls
ZDsgY2hpbGQgPSBtX29yZGVySXRlcmF0b3IubmV4dCgpKSB7CiAgICAgICAgIGlmIChjaGlsZC0+
aXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIApAQCAtMzk4
LDkgKzMzMCw3IEBAIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OnJlcGFpbnRDaGlsZHJlbkR1cmlu
Z0xheW91dElmTW92ZWQoY29uc3QgQ2hpbGRGcmFtZVJlY3RzCiAKIHZvaWQgUmVuZGVyRmxleGli
bGVCb3g6OnBhaW50Q2hpbGRyZW4oUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBv
aW50JiBwYWludE9mZnNldCwgUGFpbnRJbmZvJiBwYWludEluZm9Gb3JDaGlsZCwgYm9vbCB1c2VQ
cmludFJlY3QpCiB7Ci0gICAgQVNTRVJUKG1fb3JkZXJJdGVyYXRvcik7Ci0KLSAgICBmb3IgKFJl
bmRlckJveCogY2hpbGQgPSBtX29yZGVySXRlcmF0b3ItPmZpcnN0KCk7IGNoaWxkOyBjaGlsZCA9
IG1fb3JkZXJJdGVyYXRvci0+bmV4dCgpKSB7CisgICAgZm9yIChSZW5kZXJCb3gqIGNoaWxkID0g
bV9vcmRlckl0ZXJhdG9yLmZpcnN0KCk7IGNoaWxkOyBjaGlsZCA9IG1fb3JkZXJJdGVyYXRvci5u
ZXh0KCkpIHsKICAgICAgICAgaWYgKCFwYWludENoaWxkKGNoaWxkLCBwYWludEluZm8sIHBhaW50
T2Zmc2V0LCBwYWludEluZm9Gb3JDaGlsZCwgdXNlUHJpbnRSZWN0KSkKICAgICAgICAgICAgIHJl
dHVybjsKICAgICB9CkBAIC03MjUsMTUgKzY1NSwxMyBAQCBMYXlvdXRVbml0IFJlbmRlckZsZXhp
YmxlQm94OjpwcmVmZXJyZWRNYWluQXhpc0NvbnRlbnRFeHRlbnRGb3JDaGlsZChSZW5kZXJCb3gq
CiAKIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmxheW91dEZsZXhJdGVtcyhWZWN0b3I8TGluZUNv
bnRleHQ+JiBsaW5lQ29udGV4dHMpCiB7Ci0gICAgQVNTRVJUKG1fb3JkZXJJdGVyYXRvcik7Ci0K
ICAgICBPcmRlcmVkRmxleEl0ZW1MaXN0IG9yZGVyZWRDaGlsZHJlbjsKICAgICBMYXlvdXRVbml0
IHByZWZlcnJlZE1haW5BeGlzRXh0ZW50OwogICAgIGRvdWJsZSB0b3RhbEZsZXhHcm93OwogICAg
IGRvdWJsZSB0b3RhbFdlaWdodGVkRmxleFNocmluazsKICAgICBMYXlvdXRVbml0IG1pbk1heEFw
cGxpZWRNYWluQXhpc0V4dGVudDsKIAotICAgIG1fb3JkZXJJdGVyYXRvci0+Zmlyc3QoKTsKKyAg
ICBtX29yZGVySXRlcmF0b3IuZmlyc3QoKTsKICAgICBMYXlvdXRVbml0IGNyb3NzQXhpc09mZnNl
dCA9IGZsb3dBd2FyZUJvcmRlckJlZm9yZSgpICsgZmxvd0F3YXJlUGFkZGluZ0JlZm9yZSgpOwog
ICAgIHdoaWxlIChjb21wdXRlTmV4dEZsZXhMaW5lKG9yZGVyZWRDaGlsZHJlbiwgcHJlZmVycmVk
TWFpbkF4aXNFeHRlbnQsIHRvdGFsRmxleEdyb3csIHRvdGFsV2VpZ2h0ZWRGbGV4U2hyaW5rLCBt
aW5NYXhBcHBsaWVkTWFpbkF4aXNFeHRlbnQpKSB7CiAgICAgICAgIExheW91dFVuaXQgYXZhaWxh
YmxlRnJlZVNwYWNlID0gbWFpbkF4aXNDb250ZW50RXh0ZW50KHByZWZlcnJlZE1haW5BeGlzRXh0
ZW50KSAtIHByZWZlcnJlZE1haW5BeGlzRXh0ZW50OwpAQCAtOTE2LDIwICs4NDQsMTggQEAgTGF5
b3V0VW5pdCBSZW5kZXJGbGV4aWJsZUJveDo6YWRqdXN0Q2hpbGRTaXplRm9yTWluQW5kTWF4KFJl
bmRlckJveCogY2hpbGQsIExheW8KIAogYm9vbCBSZW5kZXJGbGV4aWJsZUJveDo6Y29tcHV0ZU5l
eHRGbGV4TGluZShPcmRlcmVkRmxleEl0ZW1MaXN0JiBvcmRlcmVkQ2hpbGRyZW4sIExheW91dFVu
aXQmIHByZWZlcnJlZE1haW5BeGlzRXh0ZW50LCBkb3VibGUmIHRvdGFsRmxleEdyb3csIGRvdWJs
ZSYgdG90YWxXZWlnaHRlZEZsZXhTaHJpbmssIExheW91dFVuaXQmIG1pbk1heEFwcGxpZWRNYWlu
QXhpc0V4dGVudCkKIHsKLSAgICBBU1NFUlQobV9vcmRlckl0ZXJhdG9yKTsKLQogICAgIG9yZGVy
ZWRDaGlsZHJlbi5jbGVhcigpOwogICAgIHByZWZlcnJlZE1haW5BeGlzRXh0ZW50ID0gMDsKICAg
ICB0b3RhbEZsZXhHcm93ID0gdG90YWxXZWlnaHRlZEZsZXhTaHJpbmsgPSAwOwogICAgIG1pbk1h
eEFwcGxpZWRNYWluQXhpc0V4dGVudCA9IDA7CiAKLSAgICBpZiAoIW1fb3JkZXJJdGVyYXRvci0+
Y3VycmVudENoaWxkKCkpCisgICAgaWYgKCFtX29yZGVySXRlcmF0b3IuY3VycmVudENoaWxkKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIExheW91dFVuaXQgbGluZUJyZWFrTGVuZ3Ro
ID0gbWFpbkF4aXNDb250ZW50RXh0ZW50KExheW91dFVuaXQ6Om1heCgpKTsKICAgICBib29sIGxp
bmVIYXNJbkZsb3dJdGVtID0gZmFsc2U7CiAKLSAgICBmb3IgKFJlbmRlckJveCogY2hpbGQgPSBt
X29yZGVySXRlcmF0b3ItPmN1cnJlbnRDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBtX29yZGVySXRl
cmF0b3ItPm5leHQoKSkgeworICAgIGZvciAoUmVuZGVyQm94KiBjaGlsZCA9IG1fb3JkZXJJdGVy
YXRvci5jdXJyZW50Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gbV9vcmRlckl0ZXJhdG9yLm5leHQo
KSkgewogICAgICAgICBpZiAoY2hpbGQtPmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKSB7CiAgICAg
ICAgICAgICBvcmRlcmVkQ2hpbGRyZW4uYXBwZW5kKGNoaWxkKTsKICAgICAgICAgICAgIGNvbnRp
bnVlOwpAQCAtMTI0Nyw4ICsxMTczLDYgQEAgc3RhdGljIExheW91dFVuaXQgYWxpZ25Db250ZW50
U3BhY2VCZXR3ZWVuQ2hpbGRyZW4oTGF5b3V0VW5pdCBhdmFpbGFibGVGcmVlU3BhY2UKIAogdm9p
ZCBSZW5kZXJGbGV4aWJsZUJveDo6YWxpZ25GbGV4TGluZXMoVmVjdG9yPExpbmVDb250ZXh0PiYg
bGluZUNvbnRleHRzKQogewotICAgIEFTU0VSVChtX29yZGVySXRlcmF0b3IpOwotCiAgICAgaWYg
KCFpc011bHRpbGluZSgpIHx8IHN0eWxlKCktPmFsaWduQ29udGVudCgpID09IEFsaWduQ29udGVu
dEZsZXhTdGFydCkKICAgICAgICAgcmV0dXJuOwogCkBAIC0xMjU2LDExICsxMTgwLDExIEBAIHZv
aWQgUmVuZGVyRmxleGlibGVCb3g6OmFsaWduRmxleExpbmVzKFZlY3RvcjxMaW5lQ29udGV4dD4m
IGxpbmVDb250ZXh0cykKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpbmVDb250ZXh0cy5z
aXplKCk7ICsraSkKICAgICAgICAgYXZhaWxhYmxlQ3Jvc3NBeGlzU3BhY2UgLT0gbGluZUNvbnRl
eHRzW2ldLmNyb3NzQXhpc0V4dGVudDsKIAotICAgIFJlbmRlckJveCogY2hpbGQgPSBtX29yZGVy
SXRlcmF0b3ItPmZpcnN0KCk7CisgICAgUmVuZGVyQm94KiBjaGlsZCA9IG1fb3JkZXJJdGVyYXRv
ci5maXJzdCgpOwogICAgIExheW91dFVuaXQgbGluZU9mZnNldCA9IGluaXRpYWxBbGlnbkNvbnRl
bnRPZmZzZXQoYXZhaWxhYmxlQ3Jvc3NBeGlzU3BhY2UsIHN0eWxlKCktPmFsaWduQ29udGVudCgp
LCBsaW5lQ29udGV4dHMuc2l6ZSgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGxpbmVOdW1iZXIgPSAw
OyBsaW5lTnVtYmVyIDwgbGluZUNvbnRleHRzLnNpemUoKTsgKytsaW5lTnVtYmVyKSB7CiAgICAg
ICAgIGxpbmVDb250ZXh0c1tsaW5lTnVtYmVyXS5jcm9zc0F4aXNPZmZzZXQgKz0gbGluZU9mZnNl
dDsKLSAgICAgICAgZm9yIChzaXplX3QgY2hpbGROdW1iZXIgPSAwOyBjaGlsZE51bWJlciA8IGxp
bmVDb250ZXh0c1tsaW5lTnVtYmVyXS5udW1iZXJPZkNoaWxkcmVuOyArK2NoaWxkTnVtYmVyLCBj
aGlsZCA9IG1fb3JkZXJJdGVyYXRvci0+bmV4dCgpKQorICAgICAgICBmb3IgKHNpemVfdCBjaGls
ZE51bWJlciA9IDA7IGNoaWxkTnVtYmVyIDwgbGluZUNvbnRleHRzW2xpbmVOdW1iZXJdLm51bWJl
ck9mQ2hpbGRyZW47ICsrY2hpbGROdW1iZXIsIGNoaWxkID0gbV9vcmRlckl0ZXJhdG9yLm5leHQo
KSkKICAgICAgICAgICAgIGFkanVzdEFsaWdubWVudEZvckNoaWxkKGNoaWxkLCBsaW5lT2Zmc2V0
KTsKIAogICAgICAgICBpZiAoc3R5bGUoKS0+YWxpZ25Db250ZW50KCkgPT0gQWxpZ25Db250ZW50
U3RyZXRjaCAmJiBhdmFpbGFibGVDcm9zc0F4aXNTcGFjZSA+IDApCkBAIC0xMjg3LDE4ICsxMjEx
LDE2IEBAIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmFkanVzdEFsaWdubWVudEZvckNoaWxkKFJl
bmRlckJveCogY2hpbGQsIExheW91dFVuaXQgZGVsCiAKIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6
OmFsaWduQ2hpbGRyZW4oY29uc3QgVmVjdG9yPExpbmVDb250ZXh0PiYgbGluZUNvbnRleHRzKQog
ewotICAgIEFTU0VSVChtX29yZGVySXRlcmF0b3IpOwotCiAgICAgLy8gS2VlcCB0cmFjayBvZiB0
aGUgc3BhY2UgYmV0d2VlbiB0aGUgYmFzZWxpbmUgZWRnZSBhbmQgdGhlIGFmdGVyIGVkZ2Ugb2Yg
dGhlIGJveCBmb3IgZWFjaCBsaW5lLgogICAgIFZlY3RvcjxMYXlvdXRVbml0PiBtaW5NYXJnaW5B
ZnRlckJhc2VsaW5lczsKIAotICAgIFJlbmRlckJveCogY2hpbGQgPSBtX29yZGVySXRlcmF0b3It
PmZpcnN0KCk7CisgICAgUmVuZGVyQm94KiBjaGlsZCA9IG1fb3JkZXJJdGVyYXRvci5maXJzdCgp
OwogICAgIGZvciAoc2l6ZV90IGxpbmVOdW1iZXIgPSAwOyBsaW5lTnVtYmVyIDwgbGluZUNvbnRl
eHRzLnNpemUoKTsgKytsaW5lTnVtYmVyKSB7CiAgICAgICAgIExheW91dFVuaXQgbWluTWFyZ2lu
QWZ0ZXJCYXNlbGluZSA9IExheW91dFVuaXQ6Om1heCgpOwogICAgICAgICBMYXlvdXRVbml0IGxp
bmVDcm9zc0F4aXNFeHRlbnQgPSBsaW5lQ29udGV4dHNbbGluZU51bWJlcl0uY3Jvc3NBeGlzRXh0
ZW50OwogICAgICAgICBMYXlvdXRVbml0IG1heEFzY2VudCA9IGxpbmVDb250ZXh0c1tsaW5lTnVt
YmVyXS5tYXhBc2NlbnQ7CiAKLSAgICAgICAgZm9yIChzaXplX3QgY2hpbGROdW1iZXIgPSAwOyBj
aGlsZE51bWJlciA8IGxpbmVDb250ZXh0c1tsaW5lTnVtYmVyXS5udW1iZXJPZkNoaWxkcmVuOyAr
K2NoaWxkTnVtYmVyLCBjaGlsZCA9IG1fb3JkZXJJdGVyYXRvci0+bmV4dCgpKSB7CisgICAgICAg
IGZvciAoc2l6ZV90IGNoaWxkTnVtYmVyID0gMDsgY2hpbGROdW1iZXIgPCBsaW5lQ29udGV4dHNb
bGluZU51bWJlcl0ubnVtYmVyT2ZDaGlsZHJlbjsgKytjaGlsZE51bWJlciwgY2hpbGQgPSBtX29y
ZGVySXRlcmF0b3IubmV4dCgpKSB7CiAgICAgICAgICAgICBBU1NFUlQoY2hpbGQpOwogICAgICAg
ICAgICAgaWYgKGNoaWxkLT5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSkgewogICAgICAgICAgICAg
ICAgIGlmIChzdHlsZSgpLT5mbGV4V3JhcCgpID09IEZsZXhXcmFwUmV2ZXJzZSkKQEAgLTEzNDks
MTAgKzEyNzEsMTAgQEAgdm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6YWxpZ25DaGlsZHJlbihjb25z
dCBWZWN0b3I8TGluZUNvbnRleHQ+JiBsaW5lQ29udGV4dHMpCiAKICAgICAvLyB3cmFwLXJldmVy
c2UgZmxpcHMgdGhlIGNyb3NzIGF4aXMgc3RhcnQgYW5kIGVuZC4gRm9yIGJhc2VsaW5lIGFsaWdu
bWVudCwgdGhpcyBtZWFucyB3ZQogICAgIC8vIG5lZWQgdG8gYWxpZ24gdGhlIGFmdGVyIGVkZ2Ug
b2YgYmFzZWxpbmUgZWxlbWVudHMgd2l0aCB0aGUgYWZ0ZXIgZWRnZSBvZiB0aGUgZmxleCBsaW5l
LgotICAgIGNoaWxkID0gbV9vcmRlckl0ZXJhdG9yLT5maXJzdCgpOworICAgIGNoaWxkID0gbV9v
cmRlckl0ZXJhdG9yLmZpcnN0KCk7CiAgICAgZm9yIChzaXplX3QgbGluZU51bWJlciA9IDA7IGxp
bmVOdW1iZXIgPCBsaW5lQ29udGV4dHMuc2l6ZSgpOyArK2xpbmVOdW1iZXIpIHsKICAgICAgICAg
TGF5b3V0VW5pdCBtaW5NYXJnaW5BZnRlckJhc2VsaW5lID0gbWluTWFyZ2luQWZ0ZXJCYXNlbGlu
ZXNbbGluZU51bWJlcl07Ci0gICAgICAgIGZvciAoc2l6ZV90IGNoaWxkTnVtYmVyID0gMDsgY2hp
bGROdW1iZXIgPCBsaW5lQ29udGV4dHNbbGluZU51bWJlcl0ubnVtYmVyT2ZDaGlsZHJlbjsgKytj
aGlsZE51bWJlciwgY2hpbGQgPSBtX29yZGVySXRlcmF0b3ItPm5leHQoKSkgeworICAgICAgICBm
b3IgKHNpemVfdCBjaGlsZE51bWJlciA9IDA7IGNoaWxkTnVtYmVyIDwgbGluZUNvbnRleHRzW2xp
bmVOdW1iZXJdLm51bWJlck9mQ2hpbGRyZW47ICsrY2hpbGROdW1iZXIsIGNoaWxkID0gbV9vcmRl
ckl0ZXJhdG9yLm5leHQoKSkgewogICAgICAgICAgICAgQVNTRVJUKGNoaWxkKTsKICAgICAgICAg
ICAgIGlmIChhbGlnbm1lbnRGb3JDaGlsZChjaGlsZCkgPT0gQWxpZ25CYXNlbGluZSAmJiAhaGFz
QXV0b01hcmdpbnNJbkNyb3NzQXhpcyhjaGlsZCkgJiYgbWluTWFyZ2luQWZ0ZXJCYXNlbGluZSkK
ICAgICAgICAgICAgICAgICBhZGp1c3RBbGlnbm1lbnRGb3JDaGlsZChjaGlsZCwgbWluTWFyZ2lu
QWZ0ZXJCYXNlbGluZSk7CkBAIC0xMzkzLDEzICsxMzE1LDExIEBAIHZvaWQgUmVuZGVyRmxleGli
bGVCb3g6OmFwcGx5U3RyZXRjaEFsaWdubWVudFRvQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCwgTGF5
b3V0VW5pCiAKIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmZsaXBGb3JSaWdodFRvTGVmdENvbHVt
bigpCiB7Ci0gICAgQVNTRVJUKG1fb3JkZXJJdGVyYXRvcik7Ci0KICAgICBpZiAoc3R5bGUoKS0+
aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpIHx8ICFpc0NvbHVtbkZsb3coKSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgTGF5b3V0VW5pdCBjcm9zc0V4dGVudCA9IGNyb3NzQXhpc0V4dGVudCgpOwot
ICAgIGZvciAoUmVuZGVyQm94KiBjaGlsZCA9IG1fb3JkZXJJdGVyYXRvci0+Zmlyc3QoKTsgY2hp
bGQ7IGNoaWxkID0gbV9vcmRlckl0ZXJhdG9yLT5uZXh0KCkpIHsKKyAgICBmb3IgKFJlbmRlckJv
eCogY2hpbGQgPSBtX29yZGVySXRlcmF0b3IuZmlyc3QoKTsgY2hpbGQ7IGNoaWxkID0gbV9vcmRl
ckl0ZXJhdG9yLm5leHQoKSkgewogICAgICAgICBpZiAoY2hpbGQtPmlzT3V0T2ZGbG93UG9zaXRp
b25lZCgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIExheW91dFBvaW50IGxvY2F0
aW9uID0gZmxvd0F3YXJlTG9jYXRpb25Gb3JDaGlsZChjaGlsZCk7CkBAIC0xNDEwLDEyICsxMzMw
LDEwIEBAIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmZsaXBGb3JSaWdodFRvTGVmdENvbHVtbigp
CiAKIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmZsaXBGb3JXcmFwUmV2ZXJzZShjb25zdCBWZWN0
b3I8TGluZUNvbnRleHQ+JiBsaW5lQ29udGV4dHMsIExheW91dFVuaXQgY3Jvc3NBeGlzU3RhcnRF
ZGdlKQogewotICAgIEFTU0VSVChtX29yZGVySXRlcmF0b3IpOwotCiAgICAgTGF5b3V0VW5pdCBj
b250ZW50RXh0ZW50ID0gY3Jvc3NBeGlzQ29udGVudEV4dGVudCgpOwotICAgIFJlbmRlckJveCog
Y2hpbGQgPSBtX29yZGVySXRlcmF0b3ItPmZpcnN0KCk7CisgICAgUmVuZGVyQm94KiBjaGlsZCA9
IG1fb3JkZXJJdGVyYXRvci5maXJzdCgpOwogICAgIGZvciAoc2l6ZV90IGxpbmVOdW1iZXIgPSAw
OyBsaW5lTnVtYmVyIDwgbGluZUNvbnRleHRzLnNpemUoKTsgKytsaW5lTnVtYmVyKSB7Ci0gICAg
ICAgIGZvciAoc2l6ZV90IGNoaWxkTnVtYmVyID0gMDsgY2hpbGROdW1iZXIgPCBsaW5lQ29udGV4
dHNbbGluZU51bWJlcl0ubnVtYmVyT2ZDaGlsZHJlbjsgKytjaGlsZE51bWJlciwgY2hpbGQgPSBt
X29yZGVySXRlcmF0b3ItPm5leHQoKSkgeworICAgICAgICBmb3IgKHNpemVfdCBjaGlsZE51bWJl
ciA9IDA7IGNoaWxkTnVtYmVyIDwgbGluZUNvbnRleHRzW2xpbmVOdW1iZXJdLm51bWJlck9mQ2hp
bGRyZW47ICsrY2hpbGROdW1iZXIsIGNoaWxkID0gbV9vcmRlckl0ZXJhdG9yLm5leHQoKSkgewog
ICAgICAgICAgICAgQVNTRVJUKGNoaWxkKTsKICAgICAgICAgICAgIExheW91dFVuaXQgbGluZUNy
b3NzQXhpc0V4dGVudCA9IGxpbmVDb250ZXh0c1tsaW5lTnVtYmVyXS5jcm9zc0F4aXNFeHRlbnQ7
CiAgICAgICAgICAgICBMYXlvdXRVbml0IG9yaWdpbmFsT2Zmc2V0ID0gbGluZUNvbnRleHRzW2xp
bmVOdW1iZXJdLmNyb3NzQXhpc09mZnNldCAtIGNyb3NzQXhpc1N0YXJ0RWRnZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5oIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmgKaW5kZXggZDIyZTRmYy4uM2Zj
MjhmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxl
Qm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmgK
QEAgLTMyLDcgKzMyLDYgQEAKICNkZWZpbmUgUmVuZGVyRmxleGlibGVCb3hfaAogCiAjaW5jbHVk
ZSAiUmVuZGVyQmxvY2suaCIKLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApAQCAtNDksOSArNDgsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGNv
bXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lk
IGxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCBwYWdlTG9naWNh
bEhlaWdodCA9IDApIE9WRVJSSURFOwogCi0gICAgdmlydHVhbCBpbnQgYmFzZWxpbmVQb3NpdGlv
bihGb250QmFzZWxpbmUsIGJvb2wgZmlyc3RMaW5lLCBMaW5lRGlyZWN0aW9uTW9kZSwgTGluZVBv
c2l0aW9uTW9kZSA9IFBvc2l0aW9uT25Db250YWluaW5nTGluZSkgY29uc3QgT1ZFUlJJREU7Ci0g
ICAgdmlydHVhbCBpbnQgZmlyc3RMaW5lQm94QmFzZWxpbmUoKSBjb25zdCBPVkVSUklERTsKLSAg
ICB2aXJ0dWFsIGludCBpbmxpbmVCbG9ja0Jhc2VsaW5lKExpbmVEaXJlY3Rpb25Nb2RlKSBjb25z
dCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGludCBiYXNlbGluZVBvc2l0aW9uKEZvbnRCYXNlbGlu
ZSwgYm9vbCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlLCBMaW5lUG9zaXRpb25Nb2RlID0g
UG9zaXRpb25PbkNvbnRhaW5pbmdMaW5lKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGludCBmaXJz
dExpbmVCb3hCYXNlbGluZSgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgaW50IGlubGluZUJsb2Nr
QmFzZWxpbmUoTGluZURpcmVjdGlvbk1vZGUpIE9WRVJSSURFOwogCiAgICAgdmlydHVhbCB2b2lk
IHBhaW50Q2hpbGRyZW4oUGFpbnRJbmZvJiBmb3JTZWxmLCBjb25zdCBMYXlvdXRQb2ludCYsIFBh
aW50SW5mbyYgZm9yQ2hpbGQsIGJvb2wgdXNlUHJpbnRSZWN0KSBPVkVSUklERTsKIApAQCAtNjgs
MTAgKzY3LDc1IEBAIHByaXZhdGU6CiAgICAgICAgIE5vRmxpcEZvclJvd1JldmVyc2UsCiAgICAg
fTsKIAotICAgIHN0cnVjdCBPcmRlckhhc2hUcmFpdHM7CisgICAgLy8gTm9ybWFsbHksIC0xIGFu
ZCAwIGFyZSBub3QgdmFsaWQgaW4gYSBIYXNoU2V0LCBidXQgdGhlc2UgYXJlIHJlbGF0aXZlbHkg
bGlrZWx5IG9yZGVyOiB2YWx1ZXMuIEluc3RlYWQsCisgICAgLy8gd2UgbWFrZSB0aGUgdHdvIHNt
YWxsZXN0IGludCB2YWx1ZXMgaW52YWxpZCBvcmRlcjogdmFsdWVzIChpbiB0aGUgY3NzIHBhcnNl
ciBjb2RlIHdlIGNsYW1wIHRoZW0gdG8KKyAgICAvLyBpbnQgbWluICsgMikuCisgICAgc3RydWN0
IE9yZGVySGFzaFRyYWl0cyA6IFdURjo6R2VuZXJpY0hhc2hUcmFpdHM8aW50PiB7CisgICAgICAg
IHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSBmYWxzZTsKKyAgICAgICAgc3Rh
dGljIGludCBlbXB0eVZhbHVlKCkgeyByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+Ojpt
aW4oKTsgfQorICAgICAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoaW50JiBz
bG90KSB7IHNsb3QgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1pbigpICsgMTsgfQorICAg
ICAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShpbnQgdmFsdWUpIHsgcmV0dXJuIHZhbHVl
ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWluKCkgKyAxOyB9CisgICAgfTsKICAgICB0
eXBlZGVmIEhhc2hTZXQ8aW50LCBEZWZhdWx0SGFzaDxpbnQ+OjpIYXNoLCBPcmRlckhhc2hUcmFp
dHM+IE9yZGVySGFzaFNldDsKIAotICAgIGNsYXNzIE9yZGVySXRlcmF0b3I7CisgICAgY2xhc3Mg
T3JkZXJJdGVyYXRvciB7CisgICAgcHVibGljOgorICAgICAgICBPcmRlckl0ZXJhdG9yKFJlbmRl
ckZsZXhpYmxlQm94KiBmbGV4aWJsZUJveCkKKyAgICAgICAgICAgIDogbV9mbGV4aWJsZUJveChm
bGV4aWJsZUJveCkKKyAgICAgICAgICAgICwgbV9jdXJyZW50Q2hpbGQoMCkKKyAgICAgICAgICAg
ICwgbV9vcmRlclZhbHVlc0l0ZXJhdG9yKDApCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAg
ICAgIHZvaWQgc2V0T3JkZXJWYWx1ZXMoY29uc3QgT3JkZXJIYXNoU2V0JiBvcmRlclZhbHVlcykK
KyAgICAgICAgeworICAgICAgICAgICAgcmVzZXQoKTsKKyAgICAgICAgICAgIGNvcHlUb1ZlY3Rv
cihvcmRlclZhbHVlcywgbV9vcmRlclZhbHVlcyk7CisgICAgICAgICAgICBzdGQ6OnNvcnQobV9v
cmRlclZhbHVlcy5iZWdpbigpLCBtX29yZGVyVmFsdWVzLmVuZCgpKTsKKyAgICAgICAgfQorCisg
ICAgICAgIFJlbmRlckJveCogY3VycmVudENoaWxkKCkgeyByZXR1cm4gbV9jdXJyZW50Q2hpbGQ7
IH0KKworICAgICAgICBSZW5kZXJCb3gqIGZpcnN0KCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmVzZXQoKTsKKyAgICAgICAgICAgIHJldHVybiBuZXh0KCk7CisgICAgICAgIH0KKworICAgICAg
ICBSZW5kZXJCb3gqIG5leHQoKQorICAgICAgICB7CisgICAgICAgICAgICBkbyB7CisgICAgICAg
ICAgICAgICAgaWYgKCFtX2N1cnJlbnRDaGlsZCkgeworICAgICAgICAgICAgICAgICAgICBpZiAo
bV9vcmRlclZhbHVlc0l0ZXJhdG9yID09IG1fb3JkZXJWYWx1ZXMuZW5kKCkpCisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fb3JkZXJW
YWx1ZXNJdGVyYXRvcikgeworICAgICAgICAgICAgICAgICAgICAgICAgKyttX29yZGVyVmFsdWVz
SXRlcmF0b3I7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9vcmRlclZhbHVlc0l0ZXJh
dG9yID09IG1fb3JkZXJWYWx1ZXMuZW5kKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAg
ICAgICAgbV9vcmRlclZhbHVlc0l0ZXJhdG9yID0gbV9vcmRlclZhbHVlcy5iZWdpbigpOworCisg
ICAgICAgICAgICAgICAgICAgIG1fY3VycmVudENoaWxkID0gbV9mbGV4aWJsZUJveC0+Zmlyc3RD
aGlsZEJveCgpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBt
X2N1cnJlbnRDaGlsZCA9IG1fY3VycmVudENoaWxkLT5uZXh0U2libGluZ0JveCgpOworICAgICAg
ICAgICAgfSB3aGlsZSAoIW1fY3VycmVudENoaWxkIHx8IG1fY3VycmVudENoaWxkLT5zdHlsZSgp
LT5vcmRlcigpICE9ICptX29yZGVyVmFsdWVzSXRlcmF0b3IpOworCisgICAgICAgICAgICByZXR1
cm4gbV9jdXJyZW50Q2hpbGQ7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHJlc2V0KCkKKyAg
ICAgICAgeworICAgICAgICAgICAgbV9jdXJyZW50Q2hpbGQgPSAwOworICAgICAgICAgICAgbV9v
cmRlclZhbHVlc0l0ZXJhdG9yID0gMDsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAg
ICAgUmVuZGVyRmxleGlibGVCb3gqIG1fZmxleGlibGVCb3g7CisgICAgICAgIFJlbmRlckJveCog
bV9jdXJyZW50Q2hpbGQ7CisgICAgICAgIFZlY3RvcjxpbnQ+IG1fb3JkZXJWYWx1ZXM7CisgICAg
ICAgIFZlY3RvcjxpbnQ+Ojpjb25zdF9pdGVyYXRvciBtX29yZGVyVmFsdWVzSXRlcmF0b3I7Cisg
ICAgfTsKKwogICAgIHR5cGVkZWYgSGFzaE1hcDxjb25zdCBSZW5kZXJCb3gqLCBMYXlvdXRVbml0
PiBJbmZsZXhpYmxlRmxleEl0ZW1TaXplOwogICAgIHR5cGVkZWYgVmVjdG9yPFJlbmRlckJveCo+
IE9yZGVyZWRGbGV4SXRlbUxpc3Q7CiAKQEAgLTE1Miw3ICsyMTYsNyBAQCBwcml2YXRlOgogICAg
IHZvaWQgZmxpcEZvclJpZ2h0VG9MZWZ0Q29sdW1uKCk7CiAgICAgdm9pZCBmbGlwRm9yV3JhcFJl
dmVyc2UoY29uc3QgVmVjdG9yPExpbmVDb250ZXh0PiYsIExheW91dFVuaXQgY3Jvc3NBeGlzU3Rh
cnRFZGdlKTsKIAotICAgIE93blB0cjxPcmRlckl0ZXJhdG9yPiBtX29yZGVySXRlcmF0b3I7Cisg
ICAgT3JkZXJJdGVyYXRvciBtX29yZGVySXRlcmF0b3I7CiAgICAgaW50IG1fbnVtYmVyT2ZJbkZs
b3dDaGlsZHJlbk9uRmlyc3RMaW5lOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmNwcAppbmRleCBjMjNhOWRlLi45Nzdi
YTZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1h
dGhNTEJsb2NrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRl
ck1hdGhNTEJsb2NrLmNwcApAQCAtMjEwLDcgKzIxMCw3IEBAIExheW91dFVuaXQgUmVuZGVyTWF0
aE1MQmxvY2s6OnByZWZlcnJlZExvZ2ljYWxIZWlnaHRBZnRlclNpemluZyhSZW5kZXJPYmplY3Qq
IGNoCiAgICAgcmV0dXJuIGNoaWxkLT5zdHlsZSgpLT5mb250U2l6ZSgpOwogfQogCi1pbnQgUmVu
ZGVyTWF0aE1MQmxvY2s6OmJhc2VsaW5lUG9zaXRpb24oRm9udEJhc2VsaW5lIGJhc2VsaW5lVHlw
ZSwgYm9vbCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlIGRpcmVjdGlvbiwgTGluZVBvc2l0
aW9uTW9kZSBsaW5lUG9zaXRpb25Nb2RlKSBjb25zdAoraW50IFJlbmRlck1hdGhNTEJsb2NrOjpi
YXNlbGluZVBvc2l0aW9uKEZvbnRCYXNlbGluZSBiYXNlbGluZVR5cGUsIGJvb2wgZmlyc3RMaW5l
LCBMaW5lRGlyZWN0aW9uTW9kZSBkaXJlY3Rpb24sIExpbmVQb3NpdGlvbk1vZGUgbGluZVBvc2l0
aW9uTW9kZSkKIHsKICAgICAvLyBtYXRobWwuY3NzIHNldHMgbWF0aCB7IC13ZWJraXQtbGluZS1i
b3gtY29udGFpbjogZ2x5cGhzIHJlcGxhY2VkOyBsaW5lLWhlaWdodDogMDsgfSwgc28gd2hlbiBs
aW5lUG9zaXRpb25Nb2RlID09IFBvc2l0aW9uT2ZJbnRlcmlvckxpbmVCb3hlcyB3ZSB3YW50IHRv
CiAgICAgLy8gcmV0dXJuIDAgaGVyZSB0byBtYXRjaCBvdXIgbGluZS1oZWlnaHQuIFRoaXMgbWF0
dGVycyB3aGVuIFJvb3RJbmxpbmVCb3g6OmFzY2VudEFuZERlc2NlbnRGb3JCb3ggaXMgY2FsbGVk
IG9uIGEgUm9vdElubGluZUJveCBmb3IgYW4gaW5saW5lLWJsb2NrLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5oIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5oCmluZGV4IDUxZTgw
ZWMuLjNmMWFjYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwv
UmVuZGVyTWF0aE1MQmxvY2suaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1s
L1JlbmRlck1hdGhNTEJsb2NrLmgKQEAgLTg0LDcgKzg0LDcgQEAgcHVibGljOgogICAgIC8vIGNv
bXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCkgaW4gZGVyaXZlZCBjbGFzc2VzIG11c3QgZW5z
dXJlIG1fcHJlZmVycmVkTG9naWNhbEhlaWdodCBpcyBzZXQgdG8gPCAwIG9yIGl0cyBjb3JyZWN0
IHZhbHVlLgogICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygp
IE9WRVJSSURFOwogICAgIAotICAgIHZpcnR1YWwgaW50IGJhc2VsaW5lUG9zaXRpb24oRm9udEJh
c2VsaW5lLCBib29sIGZpcnN0TGluZSwgTGluZURpcmVjdGlvbk1vZGUsIExpbmVQb3NpdGlvbk1v
ZGUgPSBQb3NpdGlvbk9uQ29udGFpbmluZ0xpbmUpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1
YWwgaW50IGJhc2VsaW5lUG9zaXRpb24oRm9udEJhc2VsaW5lLCBib29sIGZpcnN0TGluZSwgTGlu
ZURpcmVjdGlvbk1vZGUsIExpbmVQb3NpdGlvbk1vZGUgPSBQb3NpdGlvbk9uQ29udGFpbmluZ0xp
bmUpIE9WRVJSSURFOwogICAgIAogI2lmIEVOQUJMRShERUJVR19NQVRIX0xBWU9VVCkKICAgICB2
aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MRnJhY3Rp
b24uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGcmFj
dGlvbi5jcHAKaW5kZXggNTYwM2ViNS4uZTZhMzM0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGcmFjdGlvbi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGcmFjdGlvbi5jcHAKQEAgLTE1
OCw3ICsxNTgsNyBAQCB2b2lkIFJlbmRlck1hdGhNTEZyYWN0aW9uOjpwYWludChQYWludEluZm8m
IGluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldAogICAgIGluZm8uY29udGV4dC0+
ZHJhd0xpbmUoYWRqdXN0ZWRQYWludE9mZnNldCwgSW50UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNl
dC54KCkgKyBkZW5vbWluYXRvcldyYXBwZXItPnBpeGVsU25hcHBlZE9mZnNldFdpZHRoKCksIGFk
anVzdGVkUGFpbnRPZmZzZXQueSgpKSk7CiB9CiAKLWludCBSZW5kZXJNYXRoTUxGcmFjdGlvbjo6
Zmlyc3RMaW5lQm94QmFzZWxpbmUoKSBjb25zdAoraW50IFJlbmRlck1hdGhNTEZyYWN0aW9uOjpm
aXJzdExpbmVCb3hCYXNlbGluZSgpCiB7CiAgICAgaWYgKFJlbmRlckJveCogZGVub21pbmF0b3JX
cmFwcGVyID0gbGFzdENoaWxkQm94KCkpCiAgICAgICAgIHJldHVybiBkZW5vbWluYXRvcldyYXBw
ZXItPmxvZ2ljYWxUb3AoKSArIHN0YXRpY19jYXN0PGludD4obHJvdW5kZigobV9saW5lVGhpY2tu
ZXNzICsgc3R5bGUoKS0+Zm9udE1ldHJpY3MoKS54SGVpZ2h0KCkpIC8gMikpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGcmFjdGlvbi5o
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGcmFjdGlvbi5o
CmluZGV4IDFlYzRhMDYuLjk5OWExZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9tYXRobWwvUmVuZGVyTWF0aE1MRnJhY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEZyYWN0aW9uLmgKQEAgLTQxLDcgKzQxLDcgQEAg
cHVibGljOgogICAgIAogICAgIHZpcnR1YWwgUmVuZGVyTWF0aE1MT3BlcmF0b3IqIHVuZW1iZWxs
aXNoZWRPcGVyYXRvcigpOwogICAgIAotICAgIHZpcnR1YWwgaW50IGZpcnN0TGluZUJveEJhc2Vs
aW5lKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBpbnQgZmlyc3RMaW5lQm94QmFzZWxp
bmUoKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3Qg
TGF5b3V0UG9pbnQmKTsKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9w
ZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1M
T3BlcmF0b3IuY3BwCmluZGV4IGJkZThiYWYuLjhiZTRlYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwCkBA
IC0zMTksNyArMzE5LDcgQEAgUmVuZGVyQmxvY2sqIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpjcmVh
dGVHbHlwaChVQ2hhciBnbHlwaCwgaW50IG1heEhlaWdodEZvclJlbmQKICAgICByZXR1cm4gY29u
dGFpbmVyOwogfQogCi1pbnQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OmZpcnN0TGluZUJveEJhc2Vs
aW5lKCkgY29uc3QKK2ludCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Zmlyc3RMaW5lQm94QmFzZWxp
bmUoKQogewogICAgIGlmIChtX2lzU3RhY2tlZCkKICAgICAgICAgcmV0dXJuIG1fc3RyZXRjaEhl
aWdodCAqIDIgLyAzIC0gKG1fc3RyZXRjaEhlaWdodCAtIHN0YXRpY19jYXN0PGludD4obV9zdHJl
dGNoSGVpZ2h0IC8gZ09wZXJhdG9yRXhwYW5zaW9uKSkgLyAyOyAgICAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuaCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuaAppbmRl
eCA3NWJiOTQxLi4xMzU5ZDFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
bWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5oCkBAIC00NSw3ICs0NSw3IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIFJlbmRlck1hdGhNTE9wZXJhdG9yKiB1bmVtYmVsbGlzaGVkT3BlcmF0
b3IoKSBPVkVSUklERSB7IHJldHVybiB0aGlzOyB9CiAgICAgdm9pZCBzdHJldGNoVG9IZWlnaHQo
aW50IHBpeGVsSGVpZ2h0KTsKICAgICAKLSAgICB2aXJ0dWFsIGludCBmaXJzdExpbmVCb3hCYXNl
bGluZSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgaW50IGZpcnN0TGluZUJveEJhc2Vs
aW5lKCkgT1ZFUlJJREU7CiAgICAgCiAgICAgZW51bSBPcGVyYXRvclR5cGUgeyBEZWZhdWx0LCBT
ZXBhcmF0b3IsIEZlbmNlIH07CiAgICAgdm9pZCBzZXRPcGVyYXRvclR5cGUoT3BlcmF0b3JUeXBl
IHR5cGUpIHsgbV9vcGVyYXRvclR5cGUgPSB0eXBlOyB9Cg==
</data>
<flag name="review"
          id="194649"
          type_id="1"
          status="-"
          setter="ojan"
    />
    <flag name="commit-queue"
          id="194652"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>179926</attachid>
            <date>2012-12-18 05:22:39 -0800</date>
            <delta_ts>2012-12-19 00:39:16 -0800</delta_ts>
            <desc>Updated patch</desc>
            <filename>wcore-flexbox-stack-iterator.diff</filename>
            <type>text/plain</type>
            <size>18380</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAxNjZhYjUwLi4xZTFmODc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzkg
QEAKKzIwMTItMTItMTggIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIE1ha2Ugb3JkZXIgaXRlcmF0b3IgbWVtYmVyIHN0YWNrIGFsbG9jYXRlZCBp
biBSZW5kZXJGbGV4aWJsZUJveAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTA0MzY2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgSXQgYXZvaWRzIGhlYXAgYWxsb2NhdGlvbnMgZHVyaW5nIHRoZSBsYXlvdXQu
CisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyRmxleGlibGVCb3g6OlJlbmRlckZsZXhpYmxlQm94KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckZsZXhpYmxlQm94OjpmaXJzdExpbmVCb3hCYXNlbGluZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJGbGV4aWJsZUJveDo6bGF5b3V0QmxvY2spOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyRmxleGlibGVCb3g6OmFwcGVuZENoaWxkRnJhbWVSZWN0cyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJGbGV4aWJsZUJveDo6cmVwYWludENoaWxkcmVuRHVyaW5nTGF5
b3V0SWZNb3ZlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbGV4aWJsZUJveDo6cGFpbnRD
aGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbGV4aWJsZUJveDo6bGF5b3V0Rmxl
eEl0ZW1zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsZXhpYmxlQm94Ojpjb21wdXRlTmV4
dEZsZXhMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsZXhpYmxlQm94OjphbGlnbkZs
ZXhMaW5lcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbGV4aWJsZUJveDo6YWxpZ25DaGls
ZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbGV4aWJsZUJveDo6ZmxpcEZvclJpZ2h0
VG9MZWZ0Q29sdW1uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsZXhpYmxlQm94OjpmbGlw
Rm9yV3JhcFJldmVyc2UpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5o
OgorICAgICAgICAoT3JkZXJIYXNoVHJhaXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZs
ZXhpYmxlQm94OjpPcmRlckhhc2hUcmFpdHM6OmVtcHR5VmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyRmxleGlibGVCb3g6Ok9yZGVySGFzaFRyYWl0czo6Y29uc3RydWN0RGVsZXRlZFZh
bHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsZXhpYmxlQm94OjpPcmRlckhhc2hUcmFp
dHM6OmlzRGVsZXRlZFZhbHVlKToKKyAgICAgICAgKE9yZGVySXRlcmF0b3IpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyRmxleGlibGVCb3g6Ok9yZGVySXRlcmF0b3I6Ok9yZGVySXRlcmF0b3Ip
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxleGlibGVCb3g6Ok9yZGVySXRlcmF0b3I6OnNl
dE9yZGVyVmFsdWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsZXhpYmxlQm94OjpPcmRl
ckl0ZXJhdG9yOjpjdXJyZW50Q2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxleGli
bGVCb3g6Ok9yZGVySXRlcmF0b3I6OmZpcnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZs
ZXhpYmxlQm94OjpPcmRlckl0ZXJhdG9yOjpuZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckZsZXhpYmxlQm94OjpPcmRlckl0ZXJhdG9yOjpyZXNldCk6CisgICAgICAgIChSZW5kZXJGbGV4
aWJsZUJveCk6CisKIDIwMTItMTItMTcgIEx1a2UgTWFjcGhlcnNvbiAgIDxtYWNwaGVyc29uQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBBZGQgQVNTRVJUaW9ucyB0byBlbnN1cmUgdGhhdCBDU1NQ
cm9wZXJ0eXMgdGhhdCBhcmUgdmFyaWFibGVzIG9ubHkgZXZlciByZWZlciB0byBDU1NWYWx1ZXMg
dGhhdCBhcmUgdmFyaWFibGVzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckZsZXhpYmxlQm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJG
bGV4aWJsZUJveC5jcHAKaW5kZXggMjcwMmU1Ni4uZDUwNzhjNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guY3BwCkBAIC0zOSw2OSArMzksNiBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8vIE5vcm1hbGx5LCAtMSBhbmQgMCBhcmUgbm90IHZh
bGlkIGluIGEgSGFzaFNldCwgYnV0IHRoZXNlIGFyZSByZWxhdGl2ZWx5IGxpa2VseSBvcmRlcjog
dmFsdWVzLiBJbnN0ZWFkLAotLy8gd2UgbWFrZSB0aGUgdHdvIHNtYWxsZXN0IGludCB2YWx1ZXMg
aW52YWxpZCBvcmRlcjogdmFsdWVzIChpbiB0aGUgY3NzIHBhcnNlciBjb2RlIHdlIGNsYW1wIHRo
ZW0gdG8KLS8vIGludCBtaW4gKyAyKS4KLXN0cnVjdCBSZW5kZXJGbGV4aWJsZUJveDo6T3JkZXJI
YXNoVHJhaXRzIDogV1RGOjpHZW5lcmljSGFzaFRyYWl0czxpbnQ+IHsKLSAgICBzdGF0aWMgY29u
c3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gZmFsc2U7Ci0gICAgc3RhdGljIGludCBlbXB0eVZh
bHVlKCkgeyByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKTsgfQotICAgIHN0
YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShpbnQmIHNsb3QpIHsgc2xvdCA9IHN0ZDo6
bnVtZXJpY19saW1pdHM8aW50Pjo6bWluKCkgKyAxOyB9Ci0gICAgc3RhdGljIGJvb2wgaXNEZWxl
dGVkVmFsdWUoaW50IHZhbHVlKSB7IHJldHVybiB2YWx1ZSA9PSBzdGQ6Om51bWVyaWNfbGltaXRz
PGludD46Om1pbigpICsgMTsgfQotfTsKLQotY2xhc3MgUmVuZGVyRmxleGlibGVCb3g6Ok9yZGVy
SXRlcmF0b3IgewotcHVibGljOgotICAgIE9yZGVySXRlcmF0b3IoUmVuZGVyRmxleGlibGVCb3gq
IGZsZXhpYmxlQm94LCBjb25zdCBPcmRlckhhc2hTZXQmIG9yZGVyVmFsdWVzKQotICAgICAgICA6
IG1fZmxleGlibGVCb3goZmxleGlibGVCb3gpCi0gICAgICAgICwgbV9jdXJyZW50Q2hpbGQoMCkK
LSAgICAgICAgLCBtX29yZGVyVmFsdWVzSXRlcmF0b3IoMCkKLSAgICB7Ci0gICAgICAgIGNvcHlU
b1ZlY3RvcihvcmRlclZhbHVlcywgbV9vcmRlclZhbHVlcyk7Ci0gICAgICAgIHN0ZDo6c29ydCht
X29yZGVyVmFsdWVzLmJlZ2luKCksIG1fb3JkZXJWYWx1ZXMuZW5kKCkpOwotICAgIH0KLQotICAg
IFJlbmRlckJveCogY3VycmVudENoaWxkKCkgeyByZXR1cm4gbV9jdXJyZW50Q2hpbGQ7IH0KLQot
ICAgIFJlbmRlckJveCogZmlyc3QoKQotICAgIHsKLSAgICAgICAgcmVzZXQoKTsKLSAgICAgICAg
cmV0dXJuIG5leHQoKTsKLSAgICB9Ci0KLSAgICBSZW5kZXJCb3gqIG5leHQoKQotICAgIHsKLSAg
ICAgICAgZG8gewotICAgICAgICAgICAgaWYgKCFtX2N1cnJlbnRDaGlsZCkgewotICAgICAgICAg
ICAgICAgIGlmIChtX29yZGVyVmFsdWVzSXRlcmF0b3IgPT0gbV9vcmRlclZhbHVlcy5lbmQoKSkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgaWYgKG1fb3Jk
ZXJWYWx1ZXNJdGVyYXRvcikgewotICAgICAgICAgICAgICAgICAgICArK21fb3JkZXJWYWx1ZXNJ
dGVyYXRvcjsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fb3JkZXJWYWx1ZXNJdGVyYXRvciA9
PSBtX29yZGVyVmFsdWVzLmVuZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7
Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1fb3JkZXJWYWx1
ZXNJdGVyYXRvciA9IG1fb3JkZXJWYWx1ZXMuYmVnaW4oKTsKLQotICAgICAgICAgICAgICAgIG1f
Y3VycmVudENoaWxkID0gbV9mbGV4aWJsZUJveC0+Zmlyc3RDaGlsZEJveCgpOwotICAgICAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgbV9jdXJyZW50Q2hpbGQgPSBtX2N1cnJlbnRDaGls
ZC0+bmV4dFNpYmxpbmdCb3goKTsKLSAgICAgICAgfSB3aGlsZSAoIW1fY3VycmVudENoaWxkIHx8
IG1fY3VycmVudENoaWxkLT5zdHlsZSgpLT5vcmRlcigpICE9ICptX29yZGVyVmFsdWVzSXRlcmF0
b3IpOwotCi0gICAgICAgIHJldHVybiBtX2N1cnJlbnRDaGlsZDsKLSAgICB9Ci0KLSAgICB2b2lk
IHJlc2V0KCkKLSAgICB7Ci0gICAgICAgIG1fY3VycmVudENoaWxkID0gMDsKLSAgICAgICAgbV9v
cmRlclZhbHVlc0l0ZXJhdG9yID0gMDsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgUmVuZGVyRmxl
eGlibGVCb3gqIG1fZmxleGlibGVCb3g7Ci0gICAgUmVuZGVyQm94KiBtX2N1cnJlbnRDaGlsZDsK
LSAgICBWZWN0b3I8aW50PiBtX29yZGVyVmFsdWVzOwotICAgIFZlY3RvcjxpbnQ+Ojpjb25zdF9p
dGVyYXRvciBtX29yZGVyVmFsdWVzSXRlcmF0b3I7Ci19OwotCiBzdHJ1Y3QgUmVuZGVyRmxleGli
bGVCb3g6OkxpbmVDb250ZXh0IHsKICAgICBMaW5lQ29udGV4dChMYXlvdXRVbml0IGNyb3NzQXhp
c09mZnNldCwgTGF5b3V0VW5pdCBjcm9zc0F4aXNFeHRlbnQsIHNpemVfdCBudW1iZXJPZkNoaWxk
cmVuLCBMYXlvdXRVbml0IG1heEFzY2VudCkKICAgICAgICAgOiBjcm9zc0F4aXNPZmZzZXQoY3Jv
c3NBeGlzT2Zmc2V0KQpAQCAtMTMxLDYgKzY4LDcgQEAgc3RydWN0IFJlbmRlckZsZXhpYmxlQm94
OjpWaW9sYXRpb24gewogCiBSZW5kZXJGbGV4aWJsZUJveDo6UmVuZGVyRmxleGlibGVCb3goTm9k
ZSogbm9kZSkKICAgICA6IFJlbmRlckJsb2NrKG5vZGUpCisgICAgLCBtX29yZGVySXRlcmF0b3Io
dGhpcykKICAgICAsIG1fbnVtYmVyT2ZJbkZsb3dDaGlsZHJlbk9uRmlyc3RMaW5lKC0xKQogewog
ICAgIHNldENoaWxkcmVuSW5saW5lKGZhbHNlKTsgLy8gQWxsIG9mIG91ciBjaGlsZHJlbiBtdXN0
IGJlIGJsb2NrLWxldmVsLgpAQCAtMjUxLDEzICsxODksMTEgQEAgaW50IFJlbmRlckZsZXhpYmxl
Qm94OjpiYXNlbGluZVBvc2l0aW9uKEZvbnRCYXNlbGluZSwgYm9vbCwgTGluZURpcmVjdGlvbk1v
ZGUgZGkKIAogaW50IFJlbmRlckZsZXhpYmxlQm94OjpmaXJzdExpbmVCb3hCYXNlbGluZSgpIGNv
bnN0CiB7Ci0gICAgQVNTRVJUKG1fb3JkZXJJdGVyYXRvcik7Ci0KICAgICBpZiAoaXNXcml0aW5n
TW9kZVJvb3QoKSB8fCBtX251bWJlck9mSW5GbG93Q2hpbGRyZW5PbkZpcnN0TGluZSA8PSAwKQog
ICAgICAgICByZXR1cm4gLTE7CiAgICAgUmVuZGVyQm94KiBiYXNlbGluZUNoaWxkID0gMDsKICAg
ICBpbnQgY2hpbGROdW1iZXIgPSAwOwotICAgIGZvciAoUmVuZGVyQm94KiBjaGlsZCA9IG1fb3Jk
ZXJJdGVyYXRvci0+Zmlyc3QoKTsgY2hpbGQ7IGNoaWxkID0gbV9vcmRlckl0ZXJhdG9yLT5uZXh0
KCkpIHsKKyAgICBmb3IgKFJlbmRlckJveCogY2hpbGQgPSBtX29yZGVySXRlcmF0b3IuZmlyc3Qo
KTsgY2hpbGQ7IGNoaWxkID0gbV9vcmRlckl0ZXJhdG9yLm5leHQoKSkgewogICAgICAgICBpZiAo
Y2hpbGQtPmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKQogICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgIGlmIChhbGlnbm1lbnRGb3JDaGlsZChjaGlsZCkgPT0gQWxpZ25CYXNlbGluZSAmJiAh
aGFzQXV0b01hcmdpbnNJbkNyb3NzQXhpcyhjaGlsZCkpIHsKQEAgLTMzMSw3ICsyNjcsNyBAQCB2
b2lkIFJlbmRlckZsZXhpYmxlQm94OjpsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4s
IExheW91dFVuaXQpCiAgICAgVmVjdG9yPExpbmVDb250ZXh0PiBsaW5lQ29udGV4dHM7CiAgICAg
T3JkZXJIYXNoU2V0IG9yZGVyVmFsdWVzOwogICAgIGNvbXB1dGVNYWluQXhpc1ByZWZlcnJlZFNp
emVzKHJlbGF5b3V0Q2hpbGRyZW4sIG9yZGVyVmFsdWVzKTsKLSAgICBtX29yZGVySXRlcmF0b3Ig
PSBhZG9wdFB0cihuZXcgT3JkZXJJdGVyYXRvcih0aGlzLCBvcmRlclZhbHVlcykpOworICAgIG1f
b3JkZXJJdGVyYXRvci5zZXRPcmRlclZhbHVlcyhvcmRlclZhbHVlcyk7CiAKICAgICBDaGlsZEZy
YW1lUmVjdHMgb2xkQ2hpbGRSZWN0czsKICAgICBhcHBlbmRDaGlsZEZyYW1lUmVjdHMob2xkQ2hp
bGRSZWN0cyk7CkBAIC0zNjksOSArMzA1LDcgQEAgdm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6bGF5
b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0KQogCiB2b2lkIFJlbmRl
ckZsZXhpYmxlQm94OjphcHBlbmRDaGlsZEZyYW1lUmVjdHMoQ2hpbGRGcmFtZVJlY3RzJiBjaGls
ZEZyYW1lUmVjdHMpCiB7Ci0gICAgQVNTRVJUKG1fb3JkZXJJdGVyYXRvcik7Ci0KLSAgICBmb3Ig
KFJlbmRlckJveCogY2hpbGQgPSBtX29yZGVySXRlcmF0b3ItPmZpcnN0KCk7IGNoaWxkOyBjaGls
ZCA9IG1fb3JkZXJJdGVyYXRvci0+bmV4dCgpKSB7CisgICAgZm9yIChSZW5kZXJCb3gqIGNoaWxk
ID0gbV9vcmRlckl0ZXJhdG9yLmZpcnN0KCk7IGNoaWxkOyBjaGlsZCA9IG1fb3JkZXJJdGVyYXRv
ci5uZXh0KCkpIHsKICAgICAgICAgaWYgKCFjaGlsZC0+aXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkp
CiAgICAgICAgICAgICBjaGlsZEZyYW1lUmVjdHMuYXBwZW5kKGNoaWxkLT5mcmFtZVJlY3QoKSk7
CiAgICAgfQpAQCAtMzc5LDEwICszMTMsOCBAQCB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjphcHBl
bmRDaGlsZEZyYW1lUmVjdHMoQ2hpbGRGcmFtZVJlY3RzJiBjaGlsZEZyYW1lUmVjdHMpCiAKIHZv
aWQgUmVuZGVyRmxleGlibGVCb3g6OnJlcGFpbnRDaGlsZHJlbkR1cmluZ0xheW91dElmTW92ZWQo
Y29uc3QgQ2hpbGRGcmFtZVJlY3RzJiBvbGRDaGlsZFJlY3RzKQogewotICAgIEFTU0VSVChtX29y
ZGVySXRlcmF0b3IpOwotCiAgICAgc2l6ZV90IGNoaWxkSW5kZXggPSAwOwotICAgIGZvciAoUmVu
ZGVyQm94KiBjaGlsZCA9IG1fb3JkZXJJdGVyYXRvci0+Zmlyc3QoKTsgY2hpbGQ7IGNoaWxkID0g
bV9vcmRlckl0ZXJhdG9yLT5uZXh0KCkpIHsKKyAgICBmb3IgKFJlbmRlckJveCogY2hpbGQgPSBt
X29yZGVySXRlcmF0b3IuZmlyc3QoKTsgY2hpbGQ7IGNoaWxkID0gbV9vcmRlckl0ZXJhdG9yLm5l
eHQoKSkgewogICAgICAgICBpZiAoY2hpbGQtPmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKQogICAg
ICAgICAgICAgY29udGludWU7CiAKQEAgLTM5OCw5ICszMzAsNyBAQCB2b2lkIFJlbmRlckZsZXhp
YmxlQm94OjpyZXBhaW50Q2hpbGRyZW5EdXJpbmdMYXlvdXRJZk1vdmVkKGNvbnN0IENoaWxkRnJh
bWVSZWN0cwogCiB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjpwYWludENoaWxkcmVuKFBhaW50SW5m
byYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsIFBhaW50SW5mbyYg
cGFpbnRJbmZvRm9yQ2hpbGQsIGJvb2wgdXNlUHJpbnRSZWN0KQogewotICAgIEFTU0VSVChtX29y
ZGVySXRlcmF0b3IpOwotCi0gICAgZm9yIChSZW5kZXJCb3gqIGNoaWxkID0gbV9vcmRlckl0ZXJh
dG9yLT5maXJzdCgpOyBjaGlsZDsgY2hpbGQgPSBtX29yZGVySXRlcmF0b3ItPm5leHQoKSkgewor
ICAgIGZvciAoUmVuZGVyQm94KiBjaGlsZCA9IG1fb3JkZXJJdGVyYXRvci5maXJzdCgpOyBjaGls
ZDsgY2hpbGQgPSBtX29yZGVySXRlcmF0b3IubmV4dCgpKSB7CiAgICAgICAgIGlmICghcGFpbnRD
aGlsZChjaGlsZCwgcGFpbnRJbmZvLCBwYWludE9mZnNldCwgcGFpbnRJbmZvRm9yQ2hpbGQsIHVz
ZVByaW50UmVjdCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNzI1LDE1ICs2NTUs
MTMgQEAgTGF5b3V0VW5pdCBSZW5kZXJGbGV4aWJsZUJveDo6cHJlZmVycmVkTWFpbkF4aXNDb250
ZW50RXh0ZW50Rm9yQ2hpbGQoUmVuZGVyQm94KgogCiB2b2lkIFJlbmRlckZsZXhpYmxlQm94Ojps
YXlvdXRGbGV4SXRlbXMoVmVjdG9yPExpbmVDb250ZXh0PiYgbGluZUNvbnRleHRzKQogewotICAg
IEFTU0VSVChtX29yZGVySXRlcmF0b3IpOwotCiAgICAgT3JkZXJlZEZsZXhJdGVtTGlzdCBvcmRl
cmVkQ2hpbGRyZW47CiAgICAgTGF5b3V0VW5pdCBwcmVmZXJyZWRNYWluQXhpc0V4dGVudDsKICAg
ICBkb3VibGUgdG90YWxGbGV4R3JvdzsKICAgICBkb3VibGUgdG90YWxXZWlnaHRlZEZsZXhTaHJp
bms7CiAgICAgTGF5b3V0VW5pdCBtaW5NYXhBcHBsaWVkTWFpbkF4aXNFeHRlbnQ7CiAKLSAgICBt
X29yZGVySXRlcmF0b3ItPmZpcnN0KCk7CisgICAgbV9vcmRlckl0ZXJhdG9yLmZpcnN0KCk7CiAg
ICAgTGF5b3V0VW5pdCBjcm9zc0F4aXNPZmZzZXQgPSBmbG93QXdhcmVCb3JkZXJCZWZvcmUoKSAr
IGZsb3dBd2FyZVBhZGRpbmdCZWZvcmUoKTsKICAgICB3aGlsZSAoY29tcHV0ZU5leHRGbGV4TGlu
ZShvcmRlcmVkQ2hpbGRyZW4sIHByZWZlcnJlZE1haW5BeGlzRXh0ZW50LCB0b3RhbEZsZXhHcm93
LCB0b3RhbFdlaWdodGVkRmxleFNocmluaywgbWluTWF4QXBwbGllZE1haW5BeGlzRXh0ZW50KSkg
ewogICAgICAgICBMYXlvdXRVbml0IGF2YWlsYWJsZUZyZWVTcGFjZSA9IG1haW5BeGlzQ29udGVu
dEV4dGVudChwcmVmZXJyZWRNYWluQXhpc0V4dGVudCkgLSBwcmVmZXJyZWRNYWluQXhpc0V4dGVu
dDsKQEAgLTkxNiwyMCArODQ0LDE4IEBAIExheW91dFVuaXQgUmVuZGVyRmxleGlibGVCb3g6OmFk
anVzdENoaWxkU2l6ZUZvck1pbkFuZE1heChSZW5kZXJCb3gqIGNoaWxkLCBMYXlvCiAKIGJvb2wg
UmVuZGVyRmxleGlibGVCb3g6OmNvbXB1dGVOZXh0RmxleExpbmUoT3JkZXJlZEZsZXhJdGVtTGlz
dCYgb3JkZXJlZENoaWxkcmVuLCBMYXlvdXRVbml0JiBwcmVmZXJyZWRNYWluQXhpc0V4dGVudCwg
ZG91YmxlJiB0b3RhbEZsZXhHcm93LCBkb3VibGUmIHRvdGFsV2VpZ2h0ZWRGbGV4U2hyaW5rLCBM
YXlvdXRVbml0JiBtaW5NYXhBcHBsaWVkTWFpbkF4aXNFeHRlbnQpCiB7Ci0gICAgQVNTRVJUKG1f
b3JkZXJJdGVyYXRvcik7Ci0KICAgICBvcmRlcmVkQ2hpbGRyZW4uY2xlYXIoKTsKICAgICBwcmVm
ZXJyZWRNYWluQXhpc0V4dGVudCA9IDA7CiAgICAgdG90YWxGbGV4R3JvdyA9IHRvdGFsV2VpZ2h0
ZWRGbGV4U2hyaW5rID0gMDsKICAgICBtaW5NYXhBcHBsaWVkTWFpbkF4aXNFeHRlbnQgPSAwOwog
Ci0gICAgaWYgKCFtX29yZGVySXRlcmF0b3ItPmN1cnJlbnRDaGlsZCgpKQorICAgIGlmICghbV9v
cmRlckl0ZXJhdG9yLmN1cnJlbnRDaGlsZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICBMYXlvdXRVbml0IGxpbmVCcmVha0xlbmd0aCA9IG1haW5BeGlzQ29udGVudEV4dGVudChMYXlv
dXRVbml0OjptYXgoKSk7CiAgICAgYm9vbCBsaW5lSGFzSW5GbG93SXRlbSA9IGZhbHNlOwogCi0g
ICAgZm9yIChSZW5kZXJCb3gqIGNoaWxkID0gbV9vcmRlckl0ZXJhdG9yLT5jdXJyZW50Q2hpbGQo
KTsgY2hpbGQ7IGNoaWxkID0gbV9vcmRlckl0ZXJhdG9yLT5uZXh0KCkpIHsKKyAgICBmb3IgKFJl
bmRlckJveCogY2hpbGQgPSBtX29yZGVySXRlcmF0b3IuY3VycmVudENoaWxkKCk7IGNoaWxkOyBj
aGlsZCA9IG1fb3JkZXJJdGVyYXRvci5uZXh0KCkpIHsKICAgICAgICAgaWYgKGNoaWxkLT5pc091
dE9mRmxvd1Bvc2l0aW9uZWQoKSkgewogICAgICAgICAgICAgb3JkZXJlZENoaWxkcmVuLmFwcGVu
ZChjaGlsZCk7CiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTEyNDcsOCArMTE3Myw2IEBAIHN0
YXRpYyBMYXlvdXRVbml0IGFsaWduQ29udGVudFNwYWNlQmV0d2VlbkNoaWxkcmVuKExheW91dFVu
aXQgYXZhaWxhYmxlRnJlZVNwYWNlCiAKIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmFsaWduRmxl
eExpbmVzKFZlY3RvcjxMaW5lQ29udGV4dD4mIGxpbmVDb250ZXh0cykKIHsKLSAgICBBU1NFUlQo
bV9vcmRlckl0ZXJhdG9yKTsKLQogICAgIGlmICghaXNNdWx0aWxpbmUoKSB8fCBzdHlsZSgpLT5h
bGlnbkNvbnRlbnQoKSA9PSBBbGlnbkNvbnRlbnRGbGV4U3RhcnQpCiAgICAgICAgIHJldHVybjsK
IApAQCAtMTI1NiwxMSArMTE4MCwxMSBAQCB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjphbGlnbkZs
ZXhMaW5lcyhWZWN0b3I8TGluZUNvbnRleHQ+JiBsaW5lQ29udGV4dHMpCiAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBsaW5lQ29udGV4dHMuc2l6ZSgpOyArK2kpCiAgICAgICAgIGF2YWlsYWJs
ZUNyb3NzQXhpc1NwYWNlIC09IGxpbmVDb250ZXh0c1tpXS5jcm9zc0F4aXNFeHRlbnQ7CiAKLSAg
ICBSZW5kZXJCb3gqIGNoaWxkID0gbV9vcmRlckl0ZXJhdG9yLT5maXJzdCgpOworICAgIFJlbmRl
ckJveCogY2hpbGQgPSBtX29yZGVySXRlcmF0b3IuZmlyc3QoKTsKICAgICBMYXlvdXRVbml0IGxp
bmVPZmZzZXQgPSBpbml0aWFsQWxpZ25Db250ZW50T2Zmc2V0KGF2YWlsYWJsZUNyb3NzQXhpc1Nw
YWNlLCBzdHlsZSgpLT5hbGlnbkNvbnRlbnQoKSwgbGluZUNvbnRleHRzLnNpemUoKSk7CiAgICAg
Zm9yICh1bnNpZ25lZCBsaW5lTnVtYmVyID0gMDsgbGluZU51bWJlciA8IGxpbmVDb250ZXh0cy5z
aXplKCk7ICsrbGluZU51bWJlcikgewogICAgICAgICBsaW5lQ29udGV4dHNbbGluZU51bWJlcl0u
Y3Jvc3NBeGlzT2Zmc2V0ICs9IGxpbmVPZmZzZXQ7Ci0gICAgICAgIGZvciAoc2l6ZV90IGNoaWxk
TnVtYmVyID0gMDsgY2hpbGROdW1iZXIgPCBsaW5lQ29udGV4dHNbbGluZU51bWJlcl0ubnVtYmVy
T2ZDaGlsZHJlbjsgKytjaGlsZE51bWJlciwgY2hpbGQgPSBtX29yZGVySXRlcmF0b3ItPm5leHQo
KSkKKyAgICAgICAgZm9yIChzaXplX3QgY2hpbGROdW1iZXIgPSAwOyBjaGlsZE51bWJlciA8IGxp
bmVDb250ZXh0c1tsaW5lTnVtYmVyXS5udW1iZXJPZkNoaWxkcmVuOyArK2NoaWxkTnVtYmVyLCBj
aGlsZCA9IG1fb3JkZXJJdGVyYXRvci5uZXh0KCkpCiAgICAgICAgICAgICBhZGp1c3RBbGlnbm1l
bnRGb3JDaGlsZChjaGlsZCwgbGluZU9mZnNldCk7CiAKICAgICAgICAgaWYgKHN0eWxlKCktPmFs
aWduQ29udGVudCgpID09IEFsaWduQ29udGVudFN0cmV0Y2ggJiYgYXZhaWxhYmxlQ3Jvc3NBeGlz
U3BhY2UgPiAwKQpAQCAtMTI4NywxOCArMTIxMSwxNiBAQCB2b2lkIFJlbmRlckZsZXhpYmxlQm94
OjphZGp1c3RBbGlnbm1lbnRGb3JDaGlsZChSZW5kZXJCb3gqIGNoaWxkLCBMYXlvdXRVbml0IGRl
bAogCiB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjphbGlnbkNoaWxkcmVuKGNvbnN0IFZlY3RvcjxM
aW5lQ29udGV4dD4mIGxpbmVDb250ZXh0cykKIHsKLSAgICBBU1NFUlQobV9vcmRlckl0ZXJhdG9y
KTsKLQogICAgIC8vIEtlZXAgdHJhY2sgb2YgdGhlIHNwYWNlIGJldHdlZW4gdGhlIGJhc2VsaW5l
IGVkZ2UgYW5kIHRoZSBhZnRlciBlZGdlIG9mIHRoZSBib3ggZm9yIGVhY2ggbGluZS4KICAgICBW
ZWN0b3I8TGF5b3V0VW5pdD4gbWluTWFyZ2luQWZ0ZXJCYXNlbGluZXM7CiAKLSAgICBSZW5kZXJC
b3gqIGNoaWxkID0gbV9vcmRlckl0ZXJhdG9yLT5maXJzdCgpOworICAgIFJlbmRlckJveCogY2hp
bGQgPSBtX29yZGVySXRlcmF0b3IuZmlyc3QoKTsKICAgICBmb3IgKHNpemVfdCBsaW5lTnVtYmVy
ID0gMDsgbGluZU51bWJlciA8IGxpbmVDb250ZXh0cy5zaXplKCk7ICsrbGluZU51bWJlcikgewog
ICAgICAgICBMYXlvdXRVbml0IG1pbk1hcmdpbkFmdGVyQmFzZWxpbmUgPSBMYXlvdXRVbml0Ojpt
YXgoKTsKICAgICAgICAgTGF5b3V0VW5pdCBsaW5lQ3Jvc3NBeGlzRXh0ZW50ID0gbGluZUNvbnRl
eHRzW2xpbmVOdW1iZXJdLmNyb3NzQXhpc0V4dGVudDsKICAgICAgICAgTGF5b3V0VW5pdCBtYXhB
c2NlbnQgPSBsaW5lQ29udGV4dHNbbGluZU51bWJlcl0ubWF4QXNjZW50OwogCi0gICAgICAgIGZv
ciAoc2l6ZV90IGNoaWxkTnVtYmVyID0gMDsgY2hpbGROdW1iZXIgPCBsaW5lQ29udGV4dHNbbGlu
ZU51bWJlcl0ubnVtYmVyT2ZDaGlsZHJlbjsgKytjaGlsZE51bWJlciwgY2hpbGQgPSBtX29yZGVy
SXRlcmF0b3ItPm5leHQoKSkgeworICAgICAgICBmb3IgKHNpemVfdCBjaGlsZE51bWJlciA9IDA7
IGNoaWxkTnVtYmVyIDwgbGluZUNvbnRleHRzW2xpbmVOdW1iZXJdLm51bWJlck9mQ2hpbGRyZW47
ICsrY2hpbGROdW1iZXIsIGNoaWxkID0gbV9vcmRlckl0ZXJhdG9yLm5leHQoKSkgewogICAgICAg
ICAgICAgQVNTRVJUKGNoaWxkKTsKICAgICAgICAgICAgIGlmIChjaGlsZC0+aXNPdXRPZkZsb3dQ
b3NpdGlvbmVkKCkpIHsKICAgICAgICAgICAgICAgICBpZiAoc3R5bGUoKS0+ZmxleFdyYXAoKSA9
PSBGbGV4V3JhcFJldmVyc2UpCkBAIC0xMzQ5LDEwICsxMjcxLDEwIEBAIHZvaWQgUmVuZGVyRmxl
eGlibGVCb3g6OmFsaWduQ2hpbGRyZW4oY29uc3QgVmVjdG9yPExpbmVDb250ZXh0PiYgbGluZUNv
bnRleHRzKQogCiAgICAgLy8gd3JhcC1yZXZlcnNlIGZsaXBzIHRoZSBjcm9zcyBheGlzIHN0YXJ0
IGFuZCBlbmQuIEZvciBiYXNlbGluZSBhbGlnbm1lbnQsIHRoaXMgbWVhbnMgd2UKICAgICAvLyBu
ZWVkIHRvIGFsaWduIHRoZSBhZnRlciBlZGdlIG9mIGJhc2VsaW5lIGVsZW1lbnRzIHdpdGggdGhl
IGFmdGVyIGVkZ2Ugb2YgdGhlIGZsZXggbGluZS4KLSAgICBjaGlsZCA9IG1fb3JkZXJJdGVyYXRv
ci0+Zmlyc3QoKTsKKyAgICBjaGlsZCA9IG1fb3JkZXJJdGVyYXRvci5maXJzdCgpOwogICAgIGZv
ciAoc2l6ZV90IGxpbmVOdW1iZXIgPSAwOyBsaW5lTnVtYmVyIDwgbGluZUNvbnRleHRzLnNpemUo
KTsgKytsaW5lTnVtYmVyKSB7CiAgICAgICAgIExheW91dFVuaXQgbWluTWFyZ2luQWZ0ZXJCYXNl
bGluZSA9IG1pbk1hcmdpbkFmdGVyQmFzZWxpbmVzW2xpbmVOdW1iZXJdOwotICAgICAgICBmb3Ig
KHNpemVfdCBjaGlsZE51bWJlciA9IDA7IGNoaWxkTnVtYmVyIDwgbGluZUNvbnRleHRzW2xpbmVO
dW1iZXJdLm51bWJlck9mQ2hpbGRyZW47ICsrY2hpbGROdW1iZXIsIGNoaWxkID0gbV9vcmRlckl0
ZXJhdG9yLT5uZXh0KCkpIHsKKyAgICAgICAgZm9yIChzaXplX3QgY2hpbGROdW1iZXIgPSAwOyBj
aGlsZE51bWJlciA8IGxpbmVDb250ZXh0c1tsaW5lTnVtYmVyXS5udW1iZXJPZkNoaWxkcmVuOyAr
K2NoaWxkTnVtYmVyLCBjaGlsZCA9IG1fb3JkZXJJdGVyYXRvci5uZXh0KCkpIHsKICAgICAgICAg
ICAgIEFTU0VSVChjaGlsZCk7CiAgICAgICAgICAgICBpZiAoYWxpZ25tZW50Rm9yQ2hpbGQoY2hp
bGQpID09IEFsaWduQmFzZWxpbmUgJiYgIWhhc0F1dG9NYXJnaW5zSW5Dcm9zc0F4aXMoY2hpbGQp
ICYmIG1pbk1hcmdpbkFmdGVyQmFzZWxpbmUpCiAgICAgICAgICAgICAgICAgYWRqdXN0QWxpZ25t
ZW50Rm9yQ2hpbGQoY2hpbGQsIG1pbk1hcmdpbkFmdGVyQmFzZWxpbmUpOwpAQCAtMTM5MywxMyAr
MTMxNSwxMSBAQCB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjphcHBseVN0cmV0Y2hBbGlnbm1lbnRU
b0NoaWxkKFJlbmRlckJveCogY2hpbGQsIExheW91dFVuaQogCiB2b2lkIFJlbmRlckZsZXhpYmxl
Qm94OjpmbGlwRm9yUmlnaHRUb0xlZnRDb2x1bW4oKQogewotICAgIEFTU0VSVChtX29yZGVySXRl
cmF0b3IpOwotCiAgICAgaWYgKHN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSB8fCAh
aXNDb2x1bW5GbG93KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIExheW91dFVuaXQgY3Jvc3NF
eHRlbnQgPSBjcm9zc0F4aXNFeHRlbnQoKTsKLSAgICBmb3IgKFJlbmRlckJveCogY2hpbGQgPSBt
X29yZGVySXRlcmF0b3ItPmZpcnN0KCk7IGNoaWxkOyBjaGlsZCA9IG1fb3JkZXJJdGVyYXRvci0+
bmV4dCgpKSB7CisgICAgZm9yIChSZW5kZXJCb3gqIGNoaWxkID0gbV9vcmRlckl0ZXJhdG9yLmZp
cnN0KCk7IGNoaWxkOyBjaGlsZCA9IG1fb3JkZXJJdGVyYXRvci5uZXh0KCkpIHsKICAgICAgICAg
aWYgKGNoaWxkLT5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICBMYXlvdXRQb2ludCBsb2NhdGlvbiA9IGZsb3dBd2FyZUxvY2F0aW9uRm9yQ2hp
bGQoY2hpbGQpOwpAQCAtMTQxMCwxMiArMTMzMCwxMCBAQCB2b2lkIFJlbmRlckZsZXhpYmxlQm94
OjpmbGlwRm9yUmlnaHRUb0xlZnRDb2x1bW4oKQogCiB2b2lkIFJlbmRlckZsZXhpYmxlQm94Ojpm
bGlwRm9yV3JhcFJldmVyc2UoY29uc3QgVmVjdG9yPExpbmVDb250ZXh0PiYgbGluZUNvbnRleHRz
LCBMYXlvdXRVbml0IGNyb3NzQXhpc1N0YXJ0RWRnZSkKIHsKLSAgICBBU1NFUlQobV9vcmRlckl0
ZXJhdG9yKTsKLQogICAgIExheW91dFVuaXQgY29udGVudEV4dGVudCA9IGNyb3NzQXhpc0NvbnRl
bnRFeHRlbnQoKTsKLSAgICBSZW5kZXJCb3gqIGNoaWxkID0gbV9vcmRlckl0ZXJhdG9yLT5maXJz
dCgpOworICAgIFJlbmRlckJveCogY2hpbGQgPSBtX29yZGVySXRlcmF0b3IuZmlyc3QoKTsKICAg
ICBmb3IgKHNpemVfdCBsaW5lTnVtYmVyID0gMDsgbGluZU51bWJlciA8IGxpbmVDb250ZXh0cy5z
aXplKCk7ICsrbGluZU51bWJlcikgewotICAgICAgICBmb3IgKHNpemVfdCBjaGlsZE51bWJlciA9
IDA7IGNoaWxkTnVtYmVyIDwgbGluZUNvbnRleHRzW2xpbmVOdW1iZXJdLm51bWJlck9mQ2hpbGRy
ZW47ICsrY2hpbGROdW1iZXIsIGNoaWxkID0gbV9vcmRlckl0ZXJhdG9yLT5uZXh0KCkpIHsKKyAg
ICAgICAgZm9yIChzaXplX3QgY2hpbGROdW1iZXIgPSAwOyBjaGlsZE51bWJlciA8IGxpbmVDb250
ZXh0c1tsaW5lTnVtYmVyXS5udW1iZXJPZkNoaWxkcmVuOyArK2NoaWxkTnVtYmVyLCBjaGlsZCA9
IG1fb3JkZXJJdGVyYXRvci5uZXh0KCkpIHsKICAgICAgICAgICAgIEFTU0VSVChjaGlsZCk7CiAg
ICAgICAgICAgICBMYXlvdXRVbml0IGxpbmVDcm9zc0F4aXNFeHRlbnQgPSBsaW5lQ29udGV4dHNb
bGluZU51bWJlcl0uY3Jvc3NBeGlzRXh0ZW50OwogICAgICAgICAgICAgTGF5b3V0VW5pdCBvcmln
aW5hbE9mZnNldCA9IGxpbmVDb250ZXh0c1tsaW5lTnVtYmVyXS5jcm9zc0F4aXNPZmZzZXQgLSBj
cm9zc0F4aXNTdGFydEVkZ2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRmxleGlibGVCb3guaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4
aWJsZUJveC5oCmluZGV4IGQyMmU0ZmMuLjE5MjhhNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5oCkBAIC0zMiw3ICszMiw2IEBACiAjZGVmaW5lIFJl
bmRlckZsZXhpYmxlQm94X2gKIAogI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCi0jaW5jbHVkZSA8
d3RmL093blB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTY4LDEwICs2Nyw3NSBA
QCBwcml2YXRlOgogICAgICAgICBOb0ZsaXBGb3JSb3dSZXZlcnNlLAogICAgIH07CiAKLSAgICBz
dHJ1Y3QgT3JkZXJIYXNoVHJhaXRzOworICAgIC8vIE5vcm1hbGx5LCAtMSBhbmQgMCBhcmUgbm90
IHZhbGlkIGluIGEgSGFzaFNldCwgYnV0IHRoZXNlIGFyZSByZWxhdGl2ZWx5IGxpa2VseSBvcmRl
cjogdmFsdWVzLiBJbnN0ZWFkLAorICAgIC8vIHdlIG1ha2UgdGhlIHR3byBzbWFsbGVzdCBpbnQg
dmFsdWVzIGludmFsaWQgb3JkZXI6IHZhbHVlcyAoaW4gdGhlIGNzcyBwYXJzZXIgY29kZSB3ZSBj
bGFtcCB0aGVtIHRvCisgICAgLy8gaW50IG1pbiArIDIpLgorICAgIHN0cnVjdCBPcmRlckhhc2hU
cmFpdHMgOiBXVEY6OkdlbmVyaWNIYXNoVHJhaXRzPGludD4geworICAgICAgICBzdGF0aWMgY29u
c3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gZmFsc2U7CisgICAgICAgIHN0YXRpYyBpbnQgZW1w
dHlWYWx1ZSgpIHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWluKCk7IH0KKyAg
ICAgICAgc3RhdGljIHZvaWQgY29uc3RydWN0RGVsZXRlZFZhbHVlKGludCYgc2xvdCkgeyBzbG90
ID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKSArIDE7IH0KKyAgICAgICAgc3RhdGlj
IGJvb2wgaXNEZWxldGVkVmFsdWUoaW50IHZhbHVlKSB7IHJldHVybiB2YWx1ZSA9PSBzdGQ6Om51
bWVyaWNfbGltaXRzPGludD46Om1pbigpICsgMTsgfQorICAgIH07CiAgICAgdHlwZWRlZiBIYXNo
U2V0PGludCwgRGVmYXVsdEhhc2g8aW50Pjo6SGFzaCwgT3JkZXJIYXNoVHJhaXRzPiBPcmRlckhh
c2hTZXQ7CiAKLSAgICBjbGFzcyBPcmRlckl0ZXJhdG9yOworICAgIGNsYXNzIE9yZGVySXRlcmF0
b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgT3JkZXJJdGVyYXRvcihSZW5kZXJGbGV4aWJsZUJv
eCogZmxleGlibGVCb3gpCisgICAgICAgICAgICA6IG1fZmxleGlibGVCb3goZmxleGlibGVCb3gp
CisgICAgICAgICAgICAsIG1fY3VycmVudENoaWxkKDApCisgICAgICAgICAgICAsIG1fb3JkZXJW
YWx1ZXNJdGVyYXRvcigwKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHNl
dE9yZGVyVmFsdWVzKGNvbnN0IE9yZGVySGFzaFNldCYgb3JkZXJWYWx1ZXMpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJlc2V0KCk7CisgICAgICAgICAgICBjb3B5VG9WZWN0b3Iob3JkZXJWYWx1
ZXMsIG1fb3JkZXJWYWx1ZXMpOworICAgICAgICAgICAgc3RkOjpzb3J0KG1fb3JkZXJWYWx1ZXMu
YmVnaW4oKSwgbV9vcmRlclZhbHVlcy5lbmQoKSk7CisgICAgICAgIH0KKworICAgICAgICBSZW5k
ZXJCb3gqIGN1cnJlbnRDaGlsZCgpIHsgcmV0dXJuIG1fY3VycmVudENoaWxkOyB9CisKKyAgICAg
ICAgUmVuZGVyQm94KiBmaXJzdCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlc2V0KCk7Cisg
ICAgICAgICAgICByZXR1cm4gbmV4dCgpOworICAgICAgICB9CisKKyAgICAgICAgUmVuZGVyQm94
KiBuZXh0KCkKKyAgICAgICAgeworICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgIGlm
ICghbV9jdXJyZW50Q2hpbGQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fb3JkZXJWYWx1
ZXNJdGVyYXRvciA9PSBtX29yZGVyVmFsdWVzLmVuZCgpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX29yZGVyVmFsdWVzSXRlcmF0
b3IpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICsrbV9vcmRlclZhbHVlc0l0ZXJhdG9yOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fb3JkZXJWYWx1ZXNJdGVyYXRvciA9PSBtX29y
ZGVyVmFsdWVzLmVuZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fb3Jk
ZXJWYWx1ZXNJdGVyYXRvciA9IG1fb3JkZXJWYWx1ZXMuYmVnaW4oKTsKKworICAgICAgICAgICAg
ICAgICAgICBtX2N1cnJlbnRDaGlsZCA9IG1fZmxleGlibGVCb3gtPmZpcnN0Q2hpbGRCb3goKTsK
KyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50Q2hp
bGQgPSBtX2N1cnJlbnRDaGlsZC0+bmV4dFNpYmxpbmdCb3goKTsKKyAgICAgICAgICAgIH0gd2hp
bGUgKCFtX2N1cnJlbnRDaGlsZCB8fCBtX2N1cnJlbnRDaGlsZC0+c3R5bGUoKS0+b3JkZXIoKSAh
PSAqbV9vcmRlclZhbHVlc0l0ZXJhdG9yKTsKKworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVu
dENoaWxkOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCByZXNldCgpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG1fY3VycmVudENoaWxkID0gMDsKKyAgICAgICAgICAgIG1fb3JkZXJWYWx1ZXNJ
dGVyYXRvciA9IDA7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIFJlbmRlckZs
ZXhpYmxlQm94KiBtX2ZsZXhpYmxlQm94OworICAgICAgICBSZW5kZXJCb3gqIG1fY3VycmVudENo
aWxkOworICAgICAgICBWZWN0b3I8aW50PiBtX29yZGVyVmFsdWVzOworICAgICAgICBWZWN0b3I8
aW50Pjo6Y29uc3RfaXRlcmF0b3IgbV9vcmRlclZhbHVlc0l0ZXJhdG9yOworICAgIH07CisKICAg
ICB0eXBlZGVmIEhhc2hNYXA8Y29uc3QgUmVuZGVyQm94KiwgTGF5b3V0VW5pdD4gSW5mbGV4aWJs
ZUZsZXhJdGVtU2l6ZTsKICAgICB0eXBlZGVmIFZlY3RvcjxSZW5kZXJCb3gqPiBPcmRlcmVkRmxl
eEl0ZW1MaXN0OwogCkBAIC0xNTIsNyArMjE2LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGZsaXBG
b3JSaWdodFRvTGVmdENvbHVtbigpOwogICAgIHZvaWQgZmxpcEZvcldyYXBSZXZlcnNlKGNvbnN0
IFZlY3RvcjxMaW5lQ29udGV4dD4mLCBMYXlvdXRVbml0IGNyb3NzQXhpc1N0YXJ0RWRnZSk7CiAK
LSAgICBPd25QdHI8T3JkZXJJdGVyYXRvcj4gbV9vcmRlckl0ZXJhdG9yOworICAgIG11dGFibGUg
T3JkZXJJdGVyYXRvciBtX29yZGVySXRlcmF0b3I7CiAgICAgaW50IG1fbnVtYmVyT2ZJbkZsb3dD
aGlsZHJlbk9uRmlyc3RMaW5lOwogfTsKIAo=
</data>
<flag name="review"
          id="197010"
          type_id="1"
          status="-"
          setter="tony"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180110</attachid>
            <date>2012-12-19 00:39:16 -0800</date>
            <delta_ts>2012-12-19 01:56:59 -0800</delta_ts>
            <desc>Updated patch</desc>
            <filename>wcore-flexbox-stack-iterator.diff</filename>
            <type>text/plain</type>
            <size>16892</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAxNjZhYjUwLi4yOTJlZDI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzUg
QEAKKzIwMTItMTItMTkgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIE1ha2Ugb3JkZXIgaXRlcmF0b3IgbWVtYmVyIHN0YWNrIGFsbG9jYXRlZCBp
biBSZW5kZXJGbGV4aWJsZUJveAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTA0MzY2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgSXQgYXZvaWRzIGEgaGVhcCBhbGxvY2F0aW9uIGR1cmluZyBsYXlvdXQuCisK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyRmxleGlibGVCb3g6Ok9yZGVySXRlcmF0b3I6Ok9yZGVySXRlcmF0b3IpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxleGlibGVCb3g6Ok9yZGVySXRlcmF0b3I6OnNldE9y
ZGVyVmFsdWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsZXhpYmxlQm94OjpPcmRlckl0
ZXJhdG9yOjpmaXJzdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbGV4aWJsZUJveDo6T3Jk
ZXJJdGVyYXRvcjo6bmV4dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbGV4aWJsZUJveDo6
T3JkZXJJdGVyYXRvcjo6cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxleGlibGVC
b3g6OlJlbmRlckZsZXhpYmxlQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsZXhpYmxl
Qm94OjpmaXJzdExpbmVCb3hCYXNlbGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbGV4
aWJsZUJveDo6bGF5b3V0QmxvY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxleGlibGVC
b3g6OmFwcGVuZENoaWxkRnJhbWVSZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbGV4
aWJsZUJveDo6cmVwYWludENoaWxkcmVuRHVyaW5nTGF5b3V0SWZNb3ZlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJGbGV4aWJsZUJveDo6cGFpbnRDaGlsZHJlbik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJGbGV4aWJsZUJveDo6bGF5b3V0RmxleEl0ZW1zKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckZsZXhpYmxlQm94Ojpjb21wdXRlTmV4dEZsZXhMaW5lKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckZsZXhpYmxlQm94OjphbGlnbkZsZXhMaW5lcyk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJGbGV4aWJsZUJveDo6YWxpZ25DaGlsZHJlbik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJGbGV4aWJsZUJveDo6ZmxpcEZvclJpZ2h0VG9MZWZ0Q29sdW1uKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckZsZXhpYmxlQm94OjpmbGlwRm9yV3JhcFJldmVyc2UpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5oOgorICAgICAgICAoT3JkZXJJdGVyYXRv
cik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbGV4aWJsZUJveDo6T3JkZXJJdGVyYXRvcjo6
Y3VycmVudENoaWxkKToKKyAgICAgICAgKFJlbmRlckZsZXhpYmxlQm94KToKKwogMjAxMi0xMi0x
NyAgTHVrZSBNYWNwaGVyc29uICAgPG1hY3BoZXJzb25AY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IEFkZCBBU1NFUlRpb25zIHRvIGVuc3VyZSB0aGF0IENTU1Byb3BlcnR5cyB0aGF0IGFyZSB2YXJp
YWJsZXMgb25seSBldmVyIHJlZmVyIHRvIENTU1ZhbHVlcyB0aGF0IGFyZSB2YXJpYWJsZXMuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmNwcAppbmRleCAy
NzAyZTU2Li43YTJmY2FhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRmxleGlibGVCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJG
bGV4aWJsZUJveC5jcHAKQEAgLTQ5LDU4ICs0OSw1MiBAQCBzdHJ1Y3QgUmVuZGVyRmxleGlibGVC
b3g6Ok9yZGVySGFzaFRyYWl0cyA6IFdURjo6R2VuZXJpY0hhc2hUcmFpdHM8aW50PiB7CiAgICAg
c3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUoaW50IHZhbHVlKSB7IHJldHVybiB2YWx1ZSA9PSBz
dGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1pbigpICsgMTsgfQogfTsKIAotY2xhc3MgUmVuZGVy
RmxleGlibGVCb3g6Ok9yZGVySXRlcmF0b3IgewotcHVibGljOgotICAgIE9yZGVySXRlcmF0b3Io
UmVuZGVyRmxleGlibGVCb3gqIGZsZXhpYmxlQm94LCBjb25zdCBPcmRlckhhc2hTZXQmIG9yZGVy
VmFsdWVzKQotICAgICAgICA6IG1fZmxleGlibGVCb3goZmxleGlibGVCb3gpCi0gICAgICAgICwg
bV9jdXJyZW50Q2hpbGQoMCkKLSAgICAgICAgLCBtX29yZGVyVmFsdWVzSXRlcmF0b3IoMCkKLSAg
ICB7Ci0gICAgICAgIGNvcHlUb1ZlY3RvcihvcmRlclZhbHVlcywgbV9vcmRlclZhbHVlcyk7Ci0g
ICAgICAgIHN0ZDo6c29ydChtX29yZGVyVmFsdWVzLmJlZ2luKCksIG1fb3JkZXJWYWx1ZXMuZW5k
KCkpOwotICAgIH0KK1JlbmRlckZsZXhpYmxlQm94OjpPcmRlckl0ZXJhdG9yOjpPcmRlckl0ZXJh
dG9yKGNvbnN0IFJlbmRlckZsZXhpYmxlQm94KiBmbGV4aWJsZUJveCkKKyAgICA6IG1fZmxleGli
bGVCb3goZmxleGlibGVCb3gpCisgICAgLCBtX2N1cnJlbnRDaGlsZCgwKQorICAgICwgbV9vcmRl
clZhbHVlc0l0ZXJhdG9yKDApCit7Cit9CiAKLSAgICBSZW5kZXJCb3gqIGN1cnJlbnRDaGlsZCgp
IHsgcmV0dXJuIG1fY3VycmVudENoaWxkOyB9Cit2b2lkIFJlbmRlckZsZXhpYmxlQm94OjpPcmRl
ckl0ZXJhdG9yOjpzZXRPcmRlclZhbHVlcyhjb25zdCBPcmRlckhhc2hTZXQmIG9yZGVyVmFsdWVz
KQoreworICAgIHJlc2V0KCk7CisgICAgY29weVRvVmVjdG9yKG9yZGVyVmFsdWVzLCBtX29yZGVy
VmFsdWVzKTsKKyAgICBzdGQ6OnNvcnQobV9vcmRlclZhbHVlcy5iZWdpbigpLCBtX29yZGVyVmFs
dWVzLmVuZCgpKTsKK30KIAotICAgIFJlbmRlckJveCogZmlyc3QoKQotICAgIHsKLSAgICAgICAg
cmVzZXQoKTsKLSAgICAgICAgcmV0dXJuIG5leHQoKTsKLSAgICB9CitSZW5kZXJCb3gqIFJlbmRl
ckZsZXhpYmxlQm94OjpPcmRlckl0ZXJhdG9yOjpmaXJzdCgpCit7CisgICAgcmVzZXQoKTsKKyAg
ICByZXR1cm4gbmV4dCgpOworfQogCi0gICAgUmVuZGVyQm94KiBuZXh0KCkKLSAgICB7Ci0gICAg
ICAgIGRvIHsKLSAgICAgICAgICAgIGlmICghbV9jdXJyZW50Q2hpbGQpIHsKK1JlbmRlckJveCog
UmVuZGVyRmxleGlibGVCb3g6Ok9yZGVySXRlcmF0b3I6Om5leHQoKQoreworICAgIGRvIHsKKyAg
ICAgICAgaWYgKCFtX2N1cnJlbnRDaGlsZCkgeworICAgICAgICAgICAgaWYgKG1fb3JkZXJWYWx1
ZXNJdGVyYXRvciA9PSBtX29yZGVyVmFsdWVzLmVuZCgpKQorICAgICAgICAgICAgICAgIHJldHVy
biAwOworICAgICAgICAgICAgaWYgKG1fb3JkZXJWYWx1ZXNJdGVyYXRvcikgeworICAgICAgICAg
ICAgICAgICsrbV9vcmRlclZhbHVlc0l0ZXJhdG9yOwogICAgICAgICAgICAgICAgIGlmIChtX29y
ZGVyVmFsdWVzSXRlcmF0b3IgPT0gbV9vcmRlclZhbHVlcy5lbmQoKSkKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgaWYgKG1fb3JkZXJWYWx1ZXNJdGVyYXRv
cikgewotICAgICAgICAgICAgICAgICAgICArK21fb3JkZXJWYWx1ZXNJdGVyYXRvcjsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKG1fb3JkZXJWYWx1ZXNJdGVyYXRvciA9PSBtX29yZGVyVmFsdWVz
LmVuZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1fb3JkZXJWYWx1ZXNJdGVyYXRvciA9IG1f
b3JkZXJWYWx1ZXMuYmVnaW4oKTsKLQotICAgICAgICAgICAgICAgIG1fY3VycmVudENoaWxkID0g
bV9mbGV4aWJsZUJveC0+Zmlyc3RDaGlsZEJveCgpOwogICAgICAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICAgICAgbV9jdXJyZW50Q2hpbGQgPSBtX2N1cnJlbnRDaGlsZC0+bmV4dFNpYmxpbmdC
b3goKTsKLSAgICAgICAgfSB3aGlsZSAoIW1fY3VycmVudENoaWxkIHx8IG1fY3VycmVudENoaWxk
LT5zdHlsZSgpLT5vcmRlcigpICE9ICptX29yZGVyVmFsdWVzSXRlcmF0b3IpOworICAgICAgICAg
ICAgICAgIG1fb3JkZXJWYWx1ZXNJdGVyYXRvciA9IG1fb3JkZXJWYWx1ZXMuYmVnaW4oKTsKIAot
ICAgICAgICByZXR1cm4gbV9jdXJyZW50Q2hpbGQ7Ci0gICAgfQorICAgICAgICAgICAgbV9jdXJy
ZW50Q2hpbGQgPSBtX2ZsZXhpYmxlQm94LT5maXJzdENoaWxkQm94KCk7CisgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgbV9jdXJyZW50Q2hpbGQgPSBtX2N1cnJlbnRDaGlsZC0+bmV4dFNpYmxp
bmdCb3goKTsKKyAgICB9IHdoaWxlICghbV9jdXJyZW50Q2hpbGQgfHwgbV9jdXJyZW50Q2hpbGQt
PnN0eWxlKCktPm9yZGVyKCkgIT0gKm1fb3JkZXJWYWx1ZXNJdGVyYXRvcik7CiAKLSAgICB2b2lk
IHJlc2V0KCkKLSAgICB7Ci0gICAgICAgIG1fY3VycmVudENoaWxkID0gMDsKLSAgICAgICAgbV9v
cmRlclZhbHVlc0l0ZXJhdG9yID0gMDsKLSAgICB9CisgICAgcmV0dXJuIG1fY3VycmVudENoaWxk
OworfQogCi1wcml2YXRlOgotICAgIFJlbmRlckZsZXhpYmxlQm94KiBtX2ZsZXhpYmxlQm94Owot
ICAgIFJlbmRlckJveCogbV9jdXJyZW50Q2hpbGQ7Ci0gICAgVmVjdG9yPGludD4gbV9vcmRlclZh
bHVlczsKLSAgICBWZWN0b3I8aW50Pjo6Y29uc3RfaXRlcmF0b3IgbV9vcmRlclZhbHVlc0l0ZXJh
dG9yOwotfTsKK3ZvaWQgUmVuZGVyRmxleGlibGVCb3g6Ok9yZGVySXRlcmF0b3I6OnJlc2V0KCkK
K3sKKyAgICBtX2N1cnJlbnRDaGlsZCA9IDA7CisgICAgbV9vcmRlclZhbHVlc0l0ZXJhdG9yID0g
MDsKK30KIAogc3RydWN0IFJlbmRlckZsZXhpYmxlQm94OjpMaW5lQ29udGV4dCB7CiAgICAgTGlu
ZUNvbnRleHQoTGF5b3V0VW5pdCBjcm9zc0F4aXNPZmZzZXQsIExheW91dFVuaXQgY3Jvc3NBeGlz
RXh0ZW50LCBzaXplX3QgbnVtYmVyT2ZDaGlsZHJlbiwgTGF5b3V0VW5pdCBtYXhBc2NlbnQpCkBA
IC0xMzEsNiArMTI1LDcgQEAgc3RydWN0IFJlbmRlckZsZXhpYmxlQm94OjpWaW9sYXRpb24gewog
CiBSZW5kZXJGbGV4aWJsZUJveDo6UmVuZGVyRmxleGlibGVCb3goTm9kZSogbm9kZSkKICAgICA6
IFJlbmRlckJsb2NrKG5vZGUpCisgICAgLCBtX29yZGVySXRlcmF0b3IodGhpcykKICAgICAsIG1f
bnVtYmVyT2ZJbkZsb3dDaGlsZHJlbk9uRmlyc3RMaW5lKC0xKQogewogICAgIHNldENoaWxkcmVu
SW5saW5lKGZhbHNlKTsgLy8gQWxsIG9mIG91ciBjaGlsZHJlbiBtdXN0IGJlIGJsb2NrLWxldmVs
LgpAQCAtMjUxLDEzICsyNDYsMTEgQEAgaW50IFJlbmRlckZsZXhpYmxlQm94OjpiYXNlbGluZVBv
c2l0aW9uKEZvbnRCYXNlbGluZSwgYm9vbCwgTGluZURpcmVjdGlvbk1vZGUgZGkKIAogaW50IFJl
bmRlckZsZXhpYmxlQm94OjpmaXJzdExpbmVCb3hCYXNlbGluZSgpIGNvbnN0CiB7Ci0gICAgQVNT
RVJUKG1fb3JkZXJJdGVyYXRvcik7Ci0KICAgICBpZiAoaXNXcml0aW5nTW9kZVJvb3QoKSB8fCBt
X251bWJlck9mSW5GbG93Q2hpbGRyZW5PbkZpcnN0TGluZSA8PSAwKQogICAgICAgICByZXR1cm4g
LTE7CiAgICAgUmVuZGVyQm94KiBiYXNlbGluZUNoaWxkID0gMDsKICAgICBpbnQgY2hpbGROdW1i
ZXIgPSAwOwotICAgIGZvciAoUmVuZGVyQm94KiBjaGlsZCA9IG1fb3JkZXJJdGVyYXRvci0+Zmly
c3QoKTsgY2hpbGQ7IGNoaWxkID0gbV9vcmRlckl0ZXJhdG9yLT5uZXh0KCkpIHsKKyAgICBmb3Ig
KFJlbmRlckJveCogY2hpbGQgPSBtX29yZGVySXRlcmF0b3IuZmlyc3QoKTsgY2hpbGQ7IGNoaWxk
ID0gbV9vcmRlckl0ZXJhdG9yLm5leHQoKSkgewogICAgICAgICBpZiAoY2hpbGQtPmlzT3V0T2ZG
bG93UG9zaXRpb25lZCgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlmIChhbGln
bm1lbnRGb3JDaGlsZChjaGlsZCkgPT0gQWxpZ25CYXNlbGluZSAmJiAhaGFzQXV0b01hcmdpbnNJ
bkNyb3NzQXhpcyhjaGlsZCkpIHsKQEAgLTMzMSw3ICszMjQsNyBAQCB2b2lkIFJlbmRlckZsZXhp
YmxlQm94OjpsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQpCiAg
ICAgVmVjdG9yPExpbmVDb250ZXh0PiBsaW5lQ29udGV4dHM7CiAgICAgT3JkZXJIYXNoU2V0IG9y
ZGVyVmFsdWVzOwogICAgIGNvbXB1dGVNYWluQXhpc1ByZWZlcnJlZFNpemVzKHJlbGF5b3V0Q2hp
bGRyZW4sIG9yZGVyVmFsdWVzKTsKLSAgICBtX29yZGVySXRlcmF0b3IgPSBhZG9wdFB0cihuZXcg
T3JkZXJJdGVyYXRvcih0aGlzLCBvcmRlclZhbHVlcykpOworICAgIG1fb3JkZXJJdGVyYXRvci5z
ZXRPcmRlclZhbHVlcyhvcmRlclZhbHVlcyk7CiAKICAgICBDaGlsZEZyYW1lUmVjdHMgb2xkQ2hp
bGRSZWN0czsKICAgICBhcHBlbmRDaGlsZEZyYW1lUmVjdHMob2xkQ2hpbGRSZWN0cyk7CkBAIC0z
NjksOSArMzYyLDcgQEAgdm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6bGF5b3V0QmxvY2soYm9vbCBy
ZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0KQogCiB2b2lkIFJlbmRlckZsZXhpYmxlQm94Ojph
cHBlbmRDaGlsZEZyYW1lUmVjdHMoQ2hpbGRGcmFtZVJlY3RzJiBjaGlsZEZyYW1lUmVjdHMpCiB7
Ci0gICAgQVNTRVJUKG1fb3JkZXJJdGVyYXRvcik7Ci0KLSAgICBmb3IgKFJlbmRlckJveCogY2hp
bGQgPSBtX29yZGVySXRlcmF0b3ItPmZpcnN0KCk7IGNoaWxkOyBjaGlsZCA9IG1fb3JkZXJJdGVy
YXRvci0+bmV4dCgpKSB7CisgICAgZm9yIChSZW5kZXJCb3gqIGNoaWxkID0gbV9vcmRlckl0ZXJh
dG9yLmZpcnN0KCk7IGNoaWxkOyBjaGlsZCA9IG1fb3JkZXJJdGVyYXRvci5uZXh0KCkpIHsKICAg
ICAgICAgaWYgKCFjaGlsZC0+aXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpCiAgICAgICAgICAgICBj
aGlsZEZyYW1lUmVjdHMuYXBwZW5kKGNoaWxkLT5mcmFtZVJlY3QoKSk7CiAgICAgfQpAQCAtMzc5
LDEwICszNzAsOCBAQCB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjphcHBlbmRDaGlsZEZyYW1lUmVj
dHMoQ2hpbGRGcmFtZVJlY3RzJiBjaGlsZEZyYW1lUmVjdHMpCiAKIHZvaWQgUmVuZGVyRmxleGli
bGVCb3g6OnJlcGFpbnRDaGlsZHJlbkR1cmluZ0xheW91dElmTW92ZWQoY29uc3QgQ2hpbGRGcmFt
ZVJlY3RzJiBvbGRDaGlsZFJlY3RzKQogewotICAgIEFTU0VSVChtX29yZGVySXRlcmF0b3IpOwot
CiAgICAgc2l6ZV90IGNoaWxkSW5kZXggPSAwOwotICAgIGZvciAoUmVuZGVyQm94KiBjaGlsZCA9
IG1fb3JkZXJJdGVyYXRvci0+Zmlyc3QoKTsgY2hpbGQ7IGNoaWxkID0gbV9vcmRlckl0ZXJhdG9y
LT5uZXh0KCkpIHsKKyAgICBmb3IgKFJlbmRlckJveCogY2hpbGQgPSBtX29yZGVySXRlcmF0b3Iu
Zmlyc3QoKTsgY2hpbGQ7IGNoaWxkID0gbV9vcmRlckl0ZXJhdG9yLm5leHQoKSkgewogICAgICAg
ICBpZiAoY2hpbGQtPmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKQogICAgICAgICAgICAgY29udGlu
dWU7CiAKQEAgLTM5OCw5ICszODcsNyBAQCB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjpyZXBhaW50
Q2hpbGRyZW5EdXJpbmdMYXlvdXRJZk1vdmVkKGNvbnN0IENoaWxkRnJhbWVSZWN0cwogCiB2b2lk
IFJlbmRlckZsZXhpYmxlQm94OjpwYWludENoaWxkcmVuKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
b25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsIFBhaW50SW5mbyYgcGFpbnRJbmZvRm9yQ2hp
bGQsIGJvb2wgdXNlUHJpbnRSZWN0KQogewotICAgIEFTU0VSVChtX29yZGVySXRlcmF0b3IpOwot
Ci0gICAgZm9yIChSZW5kZXJCb3gqIGNoaWxkID0gbV9vcmRlckl0ZXJhdG9yLT5maXJzdCgpOyBj
aGlsZDsgY2hpbGQgPSBtX29yZGVySXRlcmF0b3ItPm5leHQoKSkgeworICAgIGZvciAoUmVuZGVy
Qm94KiBjaGlsZCA9IG1fb3JkZXJJdGVyYXRvci5maXJzdCgpOyBjaGlsZDsgY2hpbGQgPSBtX29y
ZGVySXRlcmF0b3IubmV4dCgpKSB7CiAgICAgICAgIGlmICghcGFpbnRDaGlsZChjaGlsZCwgcGFp
bnRJbmZvLCBwYWludE9mZnNldCwgcGFpbnRJbmZvRm9yQ2hpbGQsIHVzZVByaW50UmVjdCkpCiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNzI1LDE1ICs3MTIsMTMgQEAgTGF5b3V0VW5p
dCBSZW5kZXJGbGV4aWJsZUJveDo6cHJlZmVycmVkTWFpbkF4aXNDb250ZW50RXh0ZW50Rm9yQ2hp
bGQoUmVuZGVyQm94KgogCiB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjpsYXlvdXRGbGV4SXRlbXMo
VmVjdG9yPExpbmVDb250ZXh0PiYgbGluZUNvbnRleHRzKQogewotICAgIEFTU0VSVChtX29yZGVy
SXRlcmF0b3IpOwotCiAgICAgT3JkZXJlZEZsZXhJdGVtTGlzdCBvcmRlcmVkQ2hpbGRyZW47CiAg
ICAgTGF5b3V0VW5pdCBwcmVmZXJyZWRNYWluQXhpc0V4dGVudDsKICAgICBkb3VibGUgdG90YWxG
bGV4R3JvdzsKICAgICBkb3VibGUgdG90YWxXZWlnaHRlZEZsZXhTaHJpbms7CiAgICAgTGF5b3V0
VW5pdCBtaW5NYXhBcHBsaWVkTWFpbkF4aXNFeHRlbnQ7CiAKLSAgICBtX29yZGVySXRlcmF0b3It
PmZpcnN0KCk7CisgICAgbV9vcmRlckl0ZXJhdG9yLmZpcnN0KCk7CiAgICAgTGF5b3V0VW5pdCBj
cm9zc0F4aXNPZmZzZXQgPSBmbG93QXdhcmVCb3JkZXJCZWZvcmUoKSArIGZsb3dBd2FyZVBhZGRp
bmdCZWZvcmUoKTsKICAgICB3aGlsZSAoY29tcHV0ZU5leHRGbGV4TGluZShvcmRlcmVkQ2hpbGRy
ZW4sIHByZWZlcnJlZE1haW5BeGlzRXh0ZW50LCB0b3RhbEZsZXhHcm93LCB0b3RhbFdlaWdodGVk
RmxleFNocmluaywgbWluTWF4QXBwbGllZE1haW5BeGlzRXh0ZW50KSkgewogICAgICAgICBMYXlv
dXRVbml0IGF2YWlsYWJsZUZyZWVTcGFjZSA9IG1haW5BeGlzQ29udGVudEV4dGVudChwcmVmZXJy
ZWRNYWluQXhpc0V4dGVudCkgLSBwcmVmZXJyZWRNYWluQXhpc0V4dGVudDsKQEAgLTkxNiwyMCAr
OTAxLDE4IEBAIExheW91dFVuaXQgUmVuZGVyRmxleGlibGVCb3g6OmFkanVzdENoaWxkU2l6ZUZv
ck1pbkFuZE1heChSZW5kZXJCb3gqIGNoaWxkLCBMYXlvCiAKIGJvb2wgUmVuZGVyRmxleGlibGVC
b3g6OmNvbXB1dGVOZXh0RmxleExpbmUoT3JkZXJlZEZsZXhJdGVtTGlzdCYgb3JkZXJlZENoaWxk
cmVuLCBMYXlvdXRVbml0JiBwcmVmZXJyZWRNYWluQXhpc0V4dGVudCwgZG91YmxlJiB0b3RhbEZs
ZXhHcm93LCBkb3VibGUmIHRvdGFsV2VpZ2h0ZWRGbGV4U2hyaW5rLCBMYXlvdXRVbml0JiBtaW5N
YXhBcHBsaWVkTWFpbkF4aXNFeHRlbnQpCiB7Ci0gICAgQVNTRVJUKG1fb3JkZXJJdGVyYXRvcik7
Ci0KICAgICBvcmRlcmVkQ2hpbGRyZW4uY2xlYXIoKTsKICAgICBwcmVmZXJyZWRNYWluQXhpc0V4
dGVudCA9IDA7CiAgICAgdG90YWxGbGV4R3JvdyA9IHRvdGFsV2VpZ2h0ZWRGbGV4U2hyaW5rID0g
MDsKICAgICBtaW5NYXhBcHBsaWVkTWFpbkF4aXNFeHRlbnQgPSAwOwogCi0gICAgaWYgKCFtX29y
ZGVySXRlcmF0b3ItPmN1cnJlbnRDaGlsZCgpKQorICAgIGlmICghbV9vcmRlckl0ZXJhdG9yLmN1
cnJlbnRDaGlsZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBMYXlvdXRVbml0IGxp
bmVCcmVha0xlbmd0aCA9IG1haW5BeGlzQ29udGVudEV4dGVudChMYXlvdXRVbml0OjptYXgoKSk7
CiAgICAgYm9vbCBsaW5lSGFzSW5GbG93SXRlbSA9IGZhbHNlOwogCi0gICAgZm9yIChSZW5kZXJC
b3gqIGNoaWxkID0gbV9vcmRlckl0ZXJhdG9yLT5jdXJyZW50Q2hpbGQoKTsgY2hpbGQ7IGNoaWxk
ID0gbV9vcmRlckl0ZXJhdG9yLT5uZXh0KCkpIHsKKyAgICBmb3IgKFJlbmRlckJveCogY2hpbGQg
PSBtX29yZGVySXRlcmF0b3IuY3VycmVudENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IG1fb3JkZXJJ
dGVyYXRvci5uZXh0KCkpIHsKICAgICAgICAgaWYgKGNoaWxkLT5pc091dE9mRmxvd1Bvc2l0aW9u
ZWQoKSkgewogICAgICAgICAgICAgb3JkZXJlZENoaWxkcmVuLmFwcGVuZChjaGlsZCk7CiAgICAg
ICAgICAgICBjb250aW51ZTsKQEAgLTEyNDcsOCArMTIzMCw2IEBAIHN0YXRpYyBMYXlvdXRVbml0
IGFsaWduQ29udGVudFNwYWNlQmV0d2VlbkNoaWxkcmVuKExheW91dFVuaXQgYXZhaWxhYmxlRnJl
ZVNwYWNlCiAKIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmFsaWduRmxleExpbmVzKFZlY3RvcjxM
aW5lQ29udGV4dD4mIGxpbmVDb250ZXh0cykKIHsKLSAgICBBU1NFUlQobV9vcmRlckl0ZXJhdG9y
KTsKLQogICAgIGlmICghaXNNdWx0aWxpbmUoKSB8fCBzdHlsZSgpLT5hbGlnbkNvbnRlbnQoKSA9
PSBBbGlnbkNvbnRlbnRGbGV4U3RhcnQpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTI1NiwxMSAr
MTIzNywxMSBAQCB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjphbGlnbkZsZXhMaW5lcyhWZWN0b3I8
TGluZUNvbnRleHQ+JiBsaW5lQ29udGV4dHMpCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBs
aW5lQ29udGV4dHMuc2l6ZSgpOyArK2kpCiAgICAgICAgIGF2YWlsYWJsZUNyb3NzQXhpc1NwYWNl
IC09IGxpbmVDb250ZXh0c1tpXS5jcm9zc0F4aXNFeHRlbnQ7CiAKLSAgICBSZW5kZXJCb3gqIGNo
aWxkID0gbV9vcmRlckl0ZXJhdG9yLT5maXJzdCgpOworICAgIFJlbmRlckJveCogY2hpbGQgPSBt
X29yZGVySXRlcmF0b3IuZmlyc3QoKTsKICAgICBMYXlvdXRVbml0IGxpbmVPZmZzZXQgPSBpbml0
aWFsQWxpZ25Db250ZW50T2Zmc2V0KGF2YWlsYWJsZUNyb3NzQXhpc1NwYWNlLCBzdHlsZSgpLT5h
bGlnbkNvbnRlbnQoKSwgbGluZUNvbnRleHRzLnNpemUoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBs
aW5lTnVtYmVyID0gMDsgbGluZU51bWJlciA8IGxpbmVDb250ZXh0cy5zaXplKCk7ICsrbGluZU51
bWJlcikgewogICAgICAgICBsaW5lQ29udGV4dHNbbGluZU51bWJlcl0uY3Jvc3NBeGlzT2Zmc2V0
ICs9IGxpbmVPZmZzZXQ7Ci0gICAgICAgIGZvciAoc2l6ZV90IGNoaWxkTnVtYmVyID0gMDsgY2hp
bGROdW1iZXIgPCBsaW5lQ29udGV4dHNbbGluZU51bWJlcl0ubnVtYmVyT2ZDaGlsZHJlbjsgKytj
aGlsZE51bWJlciwgY2hpbGQgPSBtX29yZGVySXRlcmF0b3ItPm5leHQoKSkKKyAgICAgICAgZm9y
IChzaXplX3QgY2hpbGROdW1iZXIgPSAwOyBjaGlsZE51bWJlciA8IGxpbmVDb250ZXh0c1tsaW5l
TnVtYmVyXS5udW1iZXJPZkNoaWxkcmVuOyArK2NoaWxkTnVtYmVyLCBjaGlsZCA9IG1fb3JkZXJJ
dGVyYXRvci5uZXh0KCkpCiAgICAgICAgICAgICBhZGp1c3RBbGlnbm1lbnRGb3JDaGlsZChjaGls
ZCwgbGluZU9mZnNldCk7CiAKICAgICAgICAgaWYgKHN0eWxlKCktPmFsaWduQ29udGVudCgpID09
IEFsaWduQ29udGVudFN0cmV0Y2ggJiYgYXZhaWxhYmxlQ3Jvc3NBeGlzU3BhY2UgPiAwKQpAQCAt
MTI4NywxOCArMTI2OCwxNiBAQCB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjphZGp1c3RBbGlnbm1l
bnRGb3JDaGlsZChSZW5kZXJCb3gqIGNoaWxkLCBMYXlvdXRVbml0IGRlbAogCiB2b2lkIFJlbmRl
ckZsZXhpYmxlQm94OjphbGlnbkNoaWxkcmVuKGNvbnN0IFZlY3RvcjxMaW5lQ29udGV4dD4mIGxp
bmVDb250ZXh0cykKIHsKLSAgICBBU1NFUlQobV9vcmRlckl0ZXJhdG9yKTsKLQogICAgIC8vIEtl
ZXAgdHJhY2sgb2YgdGhlIHNwYWNlIGJldHdlZW4gdGhlIGJhc2VsaW5lIGVkZ2UgYW5kIHRoZSBh
ZnRlciBlZGdlIG9mIHRoZSBib3ggZm9yIGVhY2ggbGluZS4KICAgICBWZWN0b3I8TGF5b3V0VW5p
dD4gbWluTWFyZ2luQWZ0ZXJCYXNlbGluZXM7CiAKLSAgICBSZW5kZXJCb3gqIGNoaWxkID0gbV9v
cmRlckl0ZXJhdG9yLT5maXJzdCgpOworICAgIFJlbmRlckJveCogY2hpbGQgPSBtX29yZGVySXRl
cmF0b3IuZmlyc3QoKTsKICAgICBmb3IgKHNpemVfdCBsaW5lTnVtYmVyID0gMDsgbGluZU51bWJl
ciA8IGxpbmVDb250ZXh0cy5zaXplKCk7ICsrbGluZU51bWJlcikgewogICAgICAgICBMYXlvdXRV
bml0IG1pbk1hcmdpbkFmdGVyQmFzZWxpbmUgPSBMYXlvdXRVbml0OjptYXgoKTsKICAgICAgICAg
TGF5b3V0VW5pdCBsaW5lQ3Jvc3NBeGlzRXh0ZW50ID0gbGluZUNvbnRleHRzW2xpbmVOdW1iZXJd
LmNyb3NzQXhpc0V4dGVudDsKICAgICAgICAgTGF5b3V0VW5pdCBtYXhBc2NlbnQgPSBsaW5lQ29u
dGV4dHNbbGluZU51bWJlcl0ubWF4QXNjZW50OwogCi0gICAgICAgIGZvciAoc2l6ZV90IGNoaWxk
TnVtYmVyID0gMDsgY2hpbGROdW1iZXIgPCBsaW5lQ29udGV4dHNbbGluZU51bWJlcl0ubnVtYmVy
T2ZDaGlsZHJlbjsgKytjaGlsZE51bWJlciwgY2hpbGQgPSBtX29yZGVySXRlcmF0b3ItPm5leHQo
KSkgeworICAgICAgICBmb3IgKHNpemVfdCBjaGlsZE51bWJlciA9IDA7IGNoaWxkTnVtYmVyIDwg
bGluZUNvbnRleHRzW2xpbmVOdW1iZXJdLm51bWJlck9mQ2hpbGRyZW47ICsrY2hpbGROdW1iZXIs
IGNoaWxkID0gbV9vcmRlckl0ZXJhdG9yLm5leHQoKSkgewogICAgICAgICAgICAgQVNTRVJUKGNo
aWxkKTsKICAgICAgICAgICAgIGlmIChjaGlsZC0+aXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpIHsK
ICAgICAgICAgICAgICAgICBpZiAoc3R5bGUoKS0+ZmxleFdyYXAoKSA9PSBGbGV4V3JhcFJldmVy
c2UpCkBAIC0xMzQ5LDEwICsxMzI4LDEwIEBAIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmFsaWdu
Q2hpbGRyZW4oY29uc3QgVmVjdG9yPExpbmVDb250ZXh0PiYgbGluZUNvbnRleHRzKQogCiAgICAg
Ly8gd3JhcC1yZXZlcnNlIGZsaXBzIHRoZSBjcm9zcyBheGlzIHN0YXJ0IGFuZCBlbmQuIEZvciBi
YXNlbGluZSBhbGlnbm1lbnQsIHRoaXMgbWVhbnMgd2UKICAgICAvLyBuZWVkIHRvIGFsaWduIHRo
ZSBhZnRlciBlZGdlIG9mIGJhc2VsaW5lIGVsZW1lbnRzIHdpdGggdGhlIGFmdGVyIGVkZ2Ugb2Yg
dGhlIGZsZXggbGluZS4KLSAgICBjaGlsZCA9IG1fb3JkZXJJdGVyYXRvci0+Zmlyc3QoKTsKKyAg
ICBjaGlsZCA9IG1fb3JkZXJJdGVyYXRvci5maXJzdCgpOwogICAgIGZvciAoc2l6ZV90IGxpbmVO
dW1iZXIgPSAwOyBsaW5lTnVtYmVyIDwgbGluZUNvbnRleHRzLnNpemUoKTsgKytsaW5lTnVtYmVy
KSB7CiAgICAgICAgIExheW91dFVuaXQgbWluTWFyZ2luQWZ0ZXJCYXNlbGluZSA9IG1pbk1hcmdp
bkFmdGVyQmFzZWxpbmVzW2xpbmVOdW1iZXJdOwotICAgICAgICBmb3IgKHNpemVfdCBjaGlsZE51
bWJlciA9IDA7IGNoaWxkTnVtYmVyIDwgbGluZUNvbnRleHRzW2xpbmVOdW1iZXJdLm51bWJlck9m
Q2hpbGRyZW47ICsrY2hpbGROdW1iZXIsIGNoaWxkID0gbV9vcmRlckl0ZXJhdG9yLT5uZXh0KCkp
IHsKKyAgICAgICAgZm9yIChzaXplX3QgY2hpbGROdW1iZXIgPSAwOyBjaGlsZE51bWJlciA8IGxp
bmVDb250ZXh0c1tsaW5lTnVtYmVyXS5udW1iZXJPZkNoaWxkcmVuOyArK2NoaWxkTnVtYmVyLCBj
aGlsZCA9IG1fb3JkZXJJdGVyYXRvci5uZXh0KCkpIHsKICAgICAgICAgICAgIEFTU0VSVChjaGls
ZCk7CiAgICAgICAgICAgICBpZiAoYWxpZ25tZW50Rm9yQ2hpbGQoY2hpbGQpID09IEFsaWduQmFz
ZWxpbmUgJiYgIWhhc0F1dG9NYXJnaW5zSW5Dcm9zc0F4aXMoY2hpbGQpICYmIG1pbk1hcmdpbkFm
dGVyQmFzZWxpbmUpCiAgICAgICAgICAgICAgICAgYWRqdXN0QWxpZ25tZW50Rm9yQ2hpbGQoY2hp
bGQsIG1pbk1hcmdpbkFmdGVyQmFzZWxpbmUpOwpAQCAtMTM5MywxMyArMTM3MiwxMSBAQCB2b2lk
IFJlbmRlckZsZXhpYmxlQm94OjphcHBseVN0cmV0Y2hBbGlnbm1lbnRUb0NoaWxkKFJlbmRlckJv
eCogY2hpbGQsIExheW91dFVuaQogCiB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjpmbGlwRm9yUmln
aHRUb0xlZnRDb2x1bW4oKQogewotICAgIEFTU0VSVChtX29yZGVySXRlcmF0b3IpOwotCiAgICAg
aWYgKHN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSB8fCAhaXNDb2x1bW5GbG93KCkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIExheW91dFVuaXQgY3Jvc3NFeHRlbnQgPSBjcm9zc0F4
aXNFeHRlbnQoKTsKLSAgICBmb3IgKFJlbmRlckJveCogY2hpbGQgPSBtX29yZGVySXRlcmF0b3It
PmZpcnN0KCk7IGNoaWxkOyBjaGlsZCA9IG1fb3JkZXJJdGVyYXRvci0+bmV4dCgpKSB7CisgICAg
Zm9yIChSZW5kZXJCb3gqIGNoaWxkID0gbV9vcmRlckl0ZXJhdG9yLmZpcnN0KCk7IGNoaWxkOyBj
aGlsZCA9IG1fb3JkZXJJdGVyYXRvci5uZXh0KCkpIHsKICAgICAgICAgaWYgKGNoaWxkLT5pc091
dE9mRmxvd1Bvc2l0aW9uZWQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBMYXlv
dXRQb2ludCBsb2NhdGlvbiA9IGZsb3dBd2FyZUxvY2F0aW9uRm9yQ2hpbGQoY2hpbGQpOwpAQCAt
MTQxMCwxMiArMTM4NywxMCBAQCB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjpmbGlwRm9yUmlnaHRU
b0xlZnRDb2x1bW4oKQogCiB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjpmbGlwRm9yV3JhcFJldmVy
c2UoY29uc3QgVmVjdG9yPExpbmVDb250ZXh0PiYgbGluZUNvbnRleHRzLCBMYXlvdXRVbml0IGNy
b3NzQXhpc1N0YXJ0RWRnZSkKIHsKLSAgICBBU1NFUlQobV9vcmRlckl0ZXJhdG9yKTsKLQogICAg
IExheW91dFVuaXQgY29udGVudEV4dGVudCA9IGNyb3NzQXhpc0NvbnRlbnRFeHRlbnQoKTsKLSAg
ICBSZW5kZXJCb3gqIGNoaWxkID0gbV9vcmRlckl0ZXJhdG9yLT5maXJzdCgpOworICAgIFJlbmRl
ckJveCogY2hpbGQgPSBtX29yZGVySXRlcmF0b3IuZmlyc3QoKTsKICAgICBmb3IgKHNpemVfdCBs
aW5lTnVtYmVyID0gMDsgbGluZU51bWJlciA8IGxpbmVDb250ZXh0cy5zaXplKCk7ICsrbGluZU51
bWJlcikgewotICAgICAgICBmb3IgKHNpemVfdCBjaGlsZE51bWJlciA9IDA7IGNoaWxkTnVtYmVy
IDwgbGluZUNvbnRleHRzW2xpbmVOdW1iZXJdLm51bWJlck9mQ2hpbGRyZW47ICsrY2hpbGROdW1i
ZXIsIGNoaWxkID0gbV9vcmRlckl0ZXJhdG9yLT5uZXh0KCkpIHsKKyAgICAgICAgZm9yIChzaXpl
X3QgY2hpbGROdW1iZXIgPSAwOyBjaGlsZE51bWJlciA8IGxpbmVDb250ZXh0c1tsaW5lTnVtYmVy
XS5udW1iZXJPZkNoaWxkcmVuOyArK2NoaWxkTnVtYmVyLCBjaGlsZCA9IG1fb3JkZXJJdGVyYXRv
ci5uZXh0KCkpIHsKICAgICAgICAgICAgIEFTU0VSVChjaGlsZCk7CiAgICAgICAgICAgICBMYXlv
dXRVbml0IGxpbmVDcm9zc0F4aXNFeHRlbnQgPSBsaW5lQ29udGV4dHNbbGluZU51bWJlcl0uY3Jv
c3NBeGlzRXh0ZW50OwogICAgICAgICAgICAgTGF5b3V0VW5pdCBvcmlnaW5hbE9mZnNldCA9IGxp
bmVDb250ZXh0c1tsaW5lTnVtYmVyXS5jcm9zc0F4aXNPZmZzZXQgLSBjcm9zc0F4aXNTdGFydEVk
Z2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVC
b3guaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5oCmluZGV4
IGQyMmU0ZmMuLmZhYjFlN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJGbGV4aWJsZUJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJG
bGV4aWJsZUJveC5oCkBAIC0zMiw3ICszMiw2IEBACiAjZGVmaW5lIFJlbmRlckZsZXhpYmxlQm94
X2gKIAogI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCi0jaW5jbHVkZSA8d3RmL093blB0ci5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTcxLDcgKzcwLDIzIEBAIHByaXZhdGU6CiAgICAg
c3RydWN0IE9yZGVySGFzaFRyYWl0czsKICAgICB0eXBlZGVmIEhhc2hTZXQ8aW50LCBEZWZhdWx0
SGFzaDxpbnQ+OjpIYXNoLCBPcmRlckhhc2hUcmFpdHM+IE9yZGVySGFzaFNldDsKIAotICAgIGNs
YXNzIE9yZGVySXRlcmF0b3I7CisgICAgY2xhc3MgT3JkZXJJdGVyYXRvciB7CisgICAgICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKE9yZGVySXRlcmF0b3IpOworICAgIHB1YmxpYzoKKyAgICAgICAg
T3JkZXJJdGVyYXRvcihjb25zdCBSZW5kZXJGbGV4aWJsZUJveCopOworICAgICAgICB2b2lkIHNl
dE9yZGVyVmFsdWVzKGNvbnN0IE9yZGVySGFzaFNldCYpOworICAgICAgICBSZW5kZXJCb3gqIGN1
cnJlbnRDaGlsZCgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudENoaWxkOyB9CisgICAgICAgIFJl
bmRlckJveCogZmlyc3QoKTsKKyAgICAgICAgUmVuZGVyQm94KiBuZXh0KCk7CisgICAgICAgIHZv
aWQgcmVzZXQoKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIGNvbnN0IFJlbmRlckZsZXhpYmxl
Qm94KiBtX2ZsZXhpYmxlQm94OworICAgICAgICBSZW5kZXJCb3gqIG1fY3VycmVudENoaWxkOwor
ICAgICAgICBWZWN0b3I8aW50PiBtX29yZGVyVmFsdWVzOworICAgICAgICBWZWN0b3I8aW50Pjo6
Y29uc3RfaXRlcmF0b3IgbV9vcmRlclZhbHVlc0l0ZXJhdG9yOworICAgIH07CisKICAgICB0eXBl
ZGVmIEhhc2hNYXA8Y29uc3QgUmVuZGVyQm94KiwgTGF5b3V0VW5pdD4gSW5mbGV4aWJsZUZsZXhJ
dGVtU2l6ZTsKICAgICB0eXBlZGVmIFZlY3RvcjxSZW5kZXJCb3gqPiBPcmRlcmVkRmxleEl0ZW1M
aXN0OwogCkBAIC0xNTIsNyArMTY3LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGZsaXBGb3JSaWdo
dFRvTGVmdENvbHVtbigpOwogICAgIHZvaWQgZmxpcEZvcldyYXBSZXZlcnNlKGNvbnN0IFZlY3Rv
cjxMaW5lQ29udGV4dD4mLCBMYXlvdXRVbml0IGNyb3NzQXhpc1N0YXJ0RWRnZSk7CiAKLSAgICBP
d25QdHI8T3JkZXJJdGVyYXRvcj4gbV9vcmRlckl0ZXJhdG9yOworICAgIG11dGFibGUgT3JkZXJJ
dGVyYXRvciBtX29yZGVySXRlcmF0b3I7CiAgICAgaW50IG1fbnVtYmVyT2ZJbkZsb3dDaGlsZHJl
bk9uRmlyc3RMaW5lOwogfTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180121</attachid>
            <date>2012-12-19 01:56:59 -0800</date>
            <delta_ts>2012-12-19 10:46:57 -0800</delta_ts>
            <desc>Updated patch to apply on current git master</desc>
            <filename>wcore-flexbox-stack-iterator.diff</filename>
            <type>text/plain</type>
            <size>16836</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA1ZDFiZDAxLi42MDc5YmZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzUg
QEAKKzIwMTItMTItMTkgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIE1ha2Ugb3JkZXIgaXRlcmF0b3IgbWVtYmVyIHN0YWNrIGFsbG9jYXRlZCBp
biBSZW5kZXJGbGV4aWJsZUJveAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTA0MzY2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgSXQgYXZvaWRzIGEgaGVhcCBhbGxvY2F0aW9uIGR1cmluZyBsYXlvdXQuCisK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyRmxleGlibGVCb3g6Ok9yZGVySXRlcmF0b3I6Ok9yZGVySXRlcmF0b3IpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxleGlibGVCb3g6Ok9yZGVySXRlcmF0b3I6OnNldE9y
ZGVyVmFsdWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsZXhpYmxlQm94OjpPcmRlckl0
ZXJhdG9yOjpmaXJzdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbGV4aWJsZUJveDo6T3Jk
ZXJJdGVyYXRvcjo6bmV4dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbGV4aWJsZUJveDo6
T3JkZXJJdGVyYXRvcjo6cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxleGlibGVC
b3g6OlJlbmRlckZsZXhpYmxlQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsZXhpYmxl
Qm94OjpmaXJzdExpbmVCb3hCYXNlbGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbGV4
aWJsZUJveDo6bGF5b3V0QmxvY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxleGlibGVC
b3g6OmFwcGVuZENoaWxkRnJhbWVSZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbGV4
aWJsZUJveDo6cmVwYWludENoaWxkcmVuRHVyaW5nTGF5b3V0SWZNb3ZlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJGbGV4aWJsZUJveDo6cGFpbnRDaGlsZHJlbik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJGbGV4aWJsZUJveDo6bGF5b3V0RmxleEl0ZW1zKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckZsZXhpYmxlQm94Ojpjb21wdXRlTmV4dEZsZXhMaW5lKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckZsZXhpYmxlQm94OjphbGlnbkZsZXhMaW5lcyk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJGbGV4aWJsZUJveDo6YWxpZ25DaGlsZHJlbik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJGbGV4aWJsZUJveDo6ZmxpcEZvclJpZ2h0VG9MZWZ0Q29sdW1uKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckZsZXhpYmxlQm94OjpmbGlwRm9yV3JhcFJldmVyc2UpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5oOgorICAgICAgICAoT3JkZXJJdGVyYXRv
cik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbGV4aWJsZUJveDo6T3JkZXJJdGVyYXRvcjo6
Y3VycmVudENoaWxkKToKKyAgICAgICAgKFJlbmRlckZsZXhpYmxlQm94KToKKwogMjAxMi0xMi0x
OCAgU2hpbnlhIEthd2FuYWthICA8c2hpbnlha0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgU2hh
ZG93Um9vdC5nZXRFbGVtZW50QnlJZCgpIHJldHVybnMgYSBkZWxldGVkIGVsZW1lbnQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guY3BwCmluZGV4IGQ0NWY0
NTYuLmNkYjJhMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJG
bGV4aWJsZUJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsZXhp
YmxlQm94LmNwcApAQCAtNDksNTggKzQ5LDUyIEBAIHN0cnVjdCBSZW5kZXJGbGV4aWJsZUJveDo6
T3JkZXJIYXNoVHJhaXRzIDogV1RGOjpHZW5lcmljSGFzaFRyYWl0czxpbnQ+IHsKICAgICBzdGF0
aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShpbnQgdmFsdWUpIHsgcmV0dXJuIHZhbHVlID09IHN0ZDo6
bnVtZXJpY19saW1pdHM8aW50Pjo6bWluKCkgKyAxOyB9CiB9OwogCi1jbGFzcyBSZW5kZXJGbGV4
aWJsZUJveDo6T3JkZXJJdGVyYXRvciB7Ci1wdWJsaWM6Ci0gICAgT3JkZXJJdGVyYXRvcihSZW5k
ZXJGbGV4aWJsZUJveCogZmxleGlibGVCb3gsIGNvbnN0IE9yZGVySGFzaFNldCYgb3JkZXJWYWx1
ZXMpCi0gICAgICAgIDogbV9mbGV4aWJsZUJveChmbGV4aWJsZUJveCkKLSAgICAgICAgLCBtX2N1
cnJlbnRDaGlsZCgwKQotICAgICAgICAsIG1fb3JkZXJWYWx1ZXNJdGVyYXRvcigwKQotICAgIHsK
LSAgICAgICAgY29weVRvVmVjdG9yKG9yZGVyVmFsdWVzLCBtX29yZGVyVmFsdWVzKTsKLSAgICAg
ICAgc3RkOjpzb3J0KG1fb3JkZXJWYWx1ZXMuYmVnaW4oKSwgbV9vcmRlclZhbHVlcy5lbmQoKSk7
Ci0gICAgfQorUmVuZGVyRmxleGlibGVCb3g6Ok9yZGVySXRlcmF0b3I6Ok9yZGVySXRlcmF0b3Io
Y29uc3QgUmVuZGVyRmxleGlibGVCb3gqIGZsZXhpYmxlQm94KQorICAgIDogbV9mbGV4aWJsZUJv
eChmbGV4aWJsZUJveCkKKyAgICAsIG1fY3VycmVudENoaWxkKDApCisgICAgLCBtX29yZGVyVmFs
dWVzSXRlcmF0b3IoMCkKK3sKK30KIAotICAgIFJlbmRlckJveCogY3VycmVudENoaWxkKCkgeyBy
ZXR1cm4gbV9jdXJyZW50Q2hpbGQ7IH0KK3ZvaWQgUmVuZGVyRmxleGlibGVCb3g6Ok9yZGVySXRl
cmF0b3I6OnNldE9yZGVyVmFsdWVzKGNvbnN0IE9yZGVySGFzaFNldCYgb3JkZXJWYWx1ZXMpCit7
CisgICAgcmVzZXQoKTsKKyAgICBjb3B5VG9WZWN0b3Iob3JkZXJWYWx1ZXMsIG1fb3JkZXJWYWx1
ZXMpOworICAgIHN0ZDo6c29ydChtX29yZGVyVmFsdWVzLmJlZ2luKCksIG1fb3JkZXJWYWx1ZXMu
ZW5kKCkpOworfQogCi0gICAgUmVuZGVyQm94KiBmaXJzdCgpCi0gICAgewotICAgICAgICByZXNl
dCgpOwotICAgICAgICByZXR1cm4gbmV4dCgpOwotICAgIH0KK1JlbmRlckJveCogUmVuZGVyRmxl
eGlibGVCb3g6Ok9yZGVySXRlcmF0b3I6OmZpcnN0KCkKK3sKKyAgICByZXNldCgpOworICAgIHJl
dHVybiBuZXh0KCk7Cit9CiAKLSAgICBSZW5kZXJCb3gqIG5leHQoKQotICAgIHsKLSAgICAgICAg
ZG8gewotICAgICAgICAgICAgaWYgKCFtX2N1cnJlbnRDaGlsZCkgeworUmVuZGVyQm94KiBSZW5k
ZXJGbGV4aWJsZUJveDo6T3JkZXJJdGVyYXRvcjo6bmV4dCgpCit7CisgICAgZG8geworICAgICAg
ICBpZiAoIW1fY3VycmVudENoaWxkKSB7CisgICAgICAgICAgICBpZiAobV9vcmRlclZhbHVlc0l0
ZXJhdG9yID09IG1fb3JkZXJWYWx1ZXMuZW5kKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgICAgICBpZiAobV9vcmRlclZhbHVlc0l0ZXJhdG9yKSB7CisgICAgICAgICAgICAg
ICAgKyttX29yZGVyVmFsdWVzSXRlcmF0b3I7CiAgICAgICAgICAgICAgICAgaWYgKG1fb3JkZXJW
YWx1ZXNJdGVyYXRvciA9PSBtX29yZGVyVmFsdWVzLmVuZCgpKQogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICBpZiAobV9vcmRlclZhbHVlc0l0ZXJhdG9yKSB7
Ci0gICAgICAgICAgICAgICAgICAgICsrbV9vcmRlclZhbHVlc0l0ZXJhdG9yOwotICAgICAgICAg
ICAgICAgICAgICBpZiAobV9vcmRlclZhbHVlc0l0ZXJhdG9yID09IG1fb3JkZXJWYWx1ZXMuZW5k
KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV9vcmRlclZhbHVlc0l0ZXJhdG9yID0gbV9vcmRl
clZhbHVlcy5iZWdpbigpOwotCi0gICAgICAgICAgICAgICAgbV9jdXJyZW50Q2hpbGQgPSBtX2Zs
ZXhpYmxlQm94LT5maXJzdENoaWxkQm94KCk7CiAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgICAgICBtX2N1cnJlbnRDaGlsZCA9IG1fY3VycmVudENoaWxkLT5uZXh0U2libGluZ0JveCgp
OwotICAgICAgICB9IHdoaWxlICghbV9jdXJyZW50Q2hpbGQgfHwgbV9jdXJyZW50Q2hpbGQtPnN0
eWxlKCktPm9yZGVyKCkgIT0gKm1fb3JkZXJWYWx1ZXNJdGVyYXRvcik7CisgICAgICAgICAgICAg
ICAgbV9vcmRlclZhbHVlc0l0ZXJhdG9yID0gbV9vcmRlclZhbHVlcy5iZWdpbigpOwogCi0gICAg
ICAgIHJldHVybiBtX2N1cnJlbnRDaGlsZDsKLSAgICB9CisgICAgICAgICAgICBtX2N1cnJlbnRD
aGlsZCA9IG1fZmxleGlibGVCb3gtPmZpcnN0Q2hpbGRCb3goKTsKKyAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICBtX2N1cnJlbnRDaGlsZCA9IG1fY3VycmVudENoaWxkLT5uZXh0U2libGluZ0Jv
eCgpOworICAgIH0gd2hpbGUgKCFtX2N1cnJlbnRDaGlsZCB8fCBtX2N1cnJlbnRDaGlsZC0+c3R5
bGUoKS0+b3JkZXIoKSAhPSAqbV9vcmRlclZhbHVlc0l0ZXJhdG9yKTsKIAotICAgIHZvaWQgcmVz
ZXQoKQotICAgIHsKLSAgICAgICAgbV9jdXJyZW50Q2hpbGQgPSAwOwotICAgICAgICBtX29yZGVy
VmFsdWVzSXRlcmF0b3IgPSAwOwotICAgIH0KKyAgICByZXR1cm4gbV9jdXJyZW50Q2hpbGQ7Cit9
CiAKLXByaXZhdGU6Ci0gICAgUmVuZGVyRmxleGlibGVCb3gqIG1fZmxleGlibGVCb3g7Ci0gICAg
UmVuZGVyQm94KiBtX2N1cnJlbnRDaGlsZDsKLSAgICBWZWN0b3I8aW50PiBtX29yZGVyVmFsdWVz
OwotICAgIFZlY3RvcjxpbnQ+Ojpjb25zdF9pdGVyYXRvciBtX29yZGVyVmFsdWVzSXRlcmF0b3I7
Ci19Owordm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6T3JkZXJJdGVyYXRvcjo6cmVzZXQoKQorewor
ICAgIG1fY3VycmVudENoaWxkID0gMDsKKyAgICBtX29yZGVyVmFsdWVzSXRlcmF0b3IgPSAwOwor
fQogCiBzdHJ1Y3QgUmVuZGVyRmxleGlibGVCb3g6OkxpbmVDb250ZXh0IHsKICAgICBMaW5lQ29u
dGV4dChMYXlvdXRVbml0IGNyb3NzQXhpc09mZnNldCwgTGF5b3V0VW5pdCBjcm9zc0F4aXNFeHRl
bnQsIHNpemVfdCBudW1iZXJPZkNoaWxkcmVuLCBMYXlvdXRVbml0IG1heEFzY2VudCkKQEAgLTEz
MSw2ICsxMjUsNyBAQCBzdHJ1Y3QgUmVuZGVyRmxleGlibGVCb3g6OlZpb2xhdGlvbiB7CiAKIFJl
bmRlckZsZXhpYmxlQm94OjpSZW5kZXJGbGV4aWJsZUJveChOb2RlKiBub2RlKQogICAgIDogUmVu
ZGVyQmxvY2sobm9kZSkKKyAgICAsIG1fb3JkZXJJdGVyYXRvcih0aGlzKQogICAgICwgbV9udW1i
ZXJPZkluRmxvd0NoaWxkcmVuT25GaXJzdExpbmUoLTEpCiB7CiAgICAgc2V0Q2hpbGRyZW5Jbmxp
bmUoZmFsc2UpOyAvLyBBbGwgb2Ygb3VyIGNoaWxkcmVuIG11c3QgYmUgYmxvY2stbGV2ZWwuCkBA
IC0yNTEsMTMgKzI0NiwxMSBAQCBpbnQgUmVuZGVyRmxleGlibGVCb3g6OmJhc2VsaW5lUG9zaXRp
b24oRm9udEJhc2VsaW5lLCBib29sLCBMaW5lRGlyZWN0aW9uTW9kZSBkaQogCiBpbnQgUmVuZGVy
RmxleGlibGVCb3g6OmZpcnN0TGluZUJveEJhc2VsaW5lKCkgY29uc3QKIHsKLSAgICBBU1NFUlQo
bV9vcmRlckl0ZXJhdG9yKTsKLQogICAgIGlmIChpc1dyaXRpbmdNb2RlUm9vdCgpIHx8IG1fbnVt
YmVyT2ZJbkZsb3dDaGlsZHJlbk9uRmlyc3RMaW5lIDw9IDApCiAgICAgICAgIHJldHVybiAtMTsK
ICAgICBSZW5kZXJCb3gqIGJhc2VsaW5lQ2hpbGQgPSAwOwogICAgIGludCBjaGlsZE51bWJlciA9
IDA7Ci0gICAgZm9yIChSZW5kZXJCb3gqIGNoaWxkID0gbV9vcmRlckl0ZXJhdG9yLT5maXJzdCgp
OyBjaGlsZDsgY2hpbGQgPSBtX29yZGVySXRlcmF0b3ItPm5leHQoKSkgeworICAgIGZvciAoUmVu
ZGVyQm94KiBjaGlsZCA9IG1fb3JkZXJJdGVyYXRvci5maXJzdCgpOyBjaGlsZDsgY2hpbGQgPSBt
X29yZGVySXRlcmF0b3IubmV4dCgpKSB7CiAgICAgICAgIGlmIChjaGlsZC0+aXNPdXRPZkZsb3dQ
b3NpdGlvbmVkKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKGFsaWdubWVu
dEZvckNoaWxkKGNoaWxkKSA9PSBBbGlnbkJhc2VsaW5lICYmICFoYXNBdXRvTWFyZ2luc0luQ3Jv
c3NBeGlzKGNoaWxkKSkgewpAQCAtMzMxLDcgKzMyNCw3IEBAIHZvaWQgUmVuZGVyRmxleGlibGVC
b3g6OmxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCkKICAgICBW
ZWN0b3I8TGluZUNvbnRleHQ+IGxpbmVDb250ZXh0czsKICAgICBPcmRlckhhc2hTZXQgb3JkZXJW
YWx1ZXM7CiAgICAgY29tcHV0ZU1haW5BeGlzUHJlZmVycmVkU2l6ZXMob3JkZXJWYWx1ZXMpOwot
ICAgIG1fb3JkZXJJdGVyYXRvciA9IGFkb3B0UHRyKG5ldyBPcmRlckl0ZXJhdG9yKHRoaXMsIG9y
ZGVyVmFsdWVzKSk7CisgICAgbV9vcmRlckl0ZXJhdG9yLnNldE9yZGVyVmFsdWVzKG9yZGVyVmFs
dWVzKTsKIAogICAgIENoaWxkRnJhbWVSZWN0cyBvbGRDaGlsZFJlY3RzOwogICAgIGFwcGVuZENo
aWxkRnJhbWVSZWN0cyhvbGRDaGlsZFJlY3RzKTsKQEAgLTM2OSw5ICszNjIsNyBAQCB2b2lkIFJl
bmRlckZsZXhpYmxlQm94OjpsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91
dFVuaXQpCiAKIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmFwcGVuZENoaWxkRnJhbWVSZWN0cyhD
aGlsZEZyYW1lUmVjdHMmIGNoaWxkRnJhbWVSZWN0cykKIHsKLSAgICBBU1NFUlQobV9vcmRlckl0
ZXJhdG9yKTsKLQotICAgIGZvciAoUmVuZGVyQm94KiBjaGlsZCA9IG1fb3JkZXJJdGVyYXRvci0+
Zmlyc3QoKTsgY2hpbGQ7IGNoaWxkID0gbV9vcmRlckl0ZXJhdG9yLT5uZXh0KCkpIHsKKyAgICBm
b3IgKFJlbmRlckJveCogY2hpbGQgPSBtX29yZGVySXRlcmF0b3IuZmlyc3QoKTsgY2hpbGQ7IGNo
aWxkID0gbV9vcmRlckl0ZXJhdG9yLm5leHQoKSkgewogICAgICAgICBpZiAoIWNoaWxkLT5pc091
dE9mRmxvd1Bvc2l0aW9uZWQoKSkKICAgICAgICAgICAgIGNoaWxkRnJhbWVSZWN0cy5hcHBlbmQo
Y2hpbGQtPmZyYW1lUmVjdCgpKTsKICAgICB9CkBAIC0zNzksMTAgKzM3MCw4IEBAIHZvaWQgUmVu
ZGVyRmxleGlibGVCb3g6OmFwcGVuZENoaWxkRnJhbWVSZWN0cyhDaGlsZEZyYW1lUmVjdHMmIGNo
aWxkRnJhbWVSZWN0cykKIAogdm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6cmVwYWludENoaWxkcmVu
RHVyaW5nTGF5b3V0SWZNb3ZlZChjb25zdCBDaGlsZEZyYW1lUmVjdHMmIG9sZENoaWxkUmVjdHMp
CiB7Ci0gICAgQVNTRVJUKG1fb3JkZXJJdGVyYXRvcik7Ci0KICAgICBzaXplX3QgY2hpbGRJbmRl
eCA9IDA7Ci0gICAgZm9yIChSZW5kZXJCb3gqIGNoaWxkID0gbV9vcmRlckl0ZXJhdG9yLT5maXJz
dCgpOyBjaGlsZDsgY2hpbGQgPSBtX29yZGVySXRlcmF0b3ItPm5leHQoKSkgeworICAgIGZvciAo
UmVuZGVyQm94KiBjaGlsZCA9IG1fb3JkZXJJdGVyYXRvci5maXJzdCgpOyBjaGlsZDsgY2hpbGQg
PSBtX29yZGVySXRlcmF0b3IubmV4dCgpKSB7CiAgICAgICAgIGlmIChjaGlsZC0+aXNPdXRPZkZs
b3dQb3NpdGlvbmVkKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIApAQCAtMzk4LDkgKzM4Nyw3
IEBAIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OnJlcGFpbnRDaGlsZHJlbkR1cmluZ0xheW91dElm
TW92ZWQoY29uc3QgQ2hpbGRGcmFtZVJlY3RzCiAKIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OnBh
aW50Q2hpbGRyZW4oUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWlu
dE9mZnNldCwgUGFpbnRJbmZvJiBwYWludEluZm9Gb3JDaGlsZCwgYm9vbCB1c2VQcmludFJlY3Qp
CiB7Ci0gICAgQVNTRVJUKG1fb3JkZXJJdGVyYXRvcik7Ci0KLSAgICBmb3IgKFJlbmRlckJveCog
Y2hpbGQgPSBtX29yZGVySXRlcmF0b3ItPmZpcnN0KCk7IGNoaWxkOyBjaGlsZCA9IG1fb3JkZXJJ
dGVyYXRvci0+bmV4dCgpKSB7CisgICAgZm9yIChSZW5kZXJCb3gqIGNoaWxkID0gbV9vcmRlckl0
ZXJhdG9yLmZpcnN0KCk7IGNoaWxkOyBjaGlsZCA9IG1fb3JkZXJJdGVyYXRvci5uZXh0KCkpIHsK
ICAgICAgICAgaWYgKCFwYWludENoaWxkKGNoaWxkLCBwYWludEluZm8sIHBhaW50T2Zmc2V0LCBw
YWludEluZm9Gb3JDaGlsZCwgdXNlUHJpbnRSZWN0KSkKICAgICAgICAgICAgIHJldHVybjsKICAg
ICB9CkBAIC03MjUsMTUgKzcxMiwxMyBAQCBMYXlvdXRVbml0IFJlbmRlckZsZXhpYmxlQm94Ojpw
cmVmZXJyZWRNYWluQXhpc0NvbnRlbnRFeHRlbnRGb3JDaGlsZChSZW5kZXJCb3gqCiAKIHZvaWQg
UmVuZGVyRmxleGlibGVCb3g6OmxheW91dEZsZXhJdGVtcyhib29sIHJlbGF5b3V0Q2hpbGRyZW4s
IFZlY3RvcjxMaW5lQ29udGV4dD4mIGxpbmVDb250ZXh0cykKIHsKLSAgICBBU1NFUlQobV9vcmRl
ckl0ZXJhdG9yKTsKLQogICAgIE9yZGVyZWRGbGV4SXRlbUxpc3Qgb3JkZXJlZENoaWxkcmVuOwog
ICAgIExheW91dFVuaXQgcHJlZmVycmVkTWFpbkF4aXNFeHRlbnQ7CiAgICAgZG91YmxlIHRvdGFs
RmxleEdyb3c7CiAgICAgZG91YmxlIHRvdGFsV2VpZ2h0ZWRGbGV4U2hyaW5rOwogICAgIExheW91
dFVuaXQgbWluTWF4QXBwbGllZE1haW5BeGlzRXh0ZW50OwogCi0gICAgbV9vcmRlckl0ZXJhdG9y
LT5maXJzdCgpOworICAgIG1fb3JkZXJJdGVyYXRvci5maXJzdCgpOwogICAgIExheW91dFVuaXQg
Y3Jvc3NBeGlzT2Zmc2V0ID0gZmxvd0F3YXJlQm9yZGVyQmVmb3JlKCkgKyBmbG93QXdhcmVQYWRk
aW5nQmVmb3JlKCk7CiAgICAgd2hpbGUgKGNvbXB1dGVOZXh0RmxleExpbmUob3JkZXJlZENoaWxk
cmVuLCBwcmVmZXJyZWRNYWluQXhpc0V4dGVudCwgdG90YWxGbGV4R3JvdywgdG90YWxXZWlnaHRl
ZEZsZXhTaHJpbmssIG1pbk1heEFwcGxpZWRNYWluQXhpc0V4dGVudCkpIHsKICAgICAgICAgTGF5
b3V0VW5pdCBhdmFpbGFibGVGcmVlU3BhY2UgPSBtYWluQXhpc0NvbnRlbnRFeHRlbnQocHJlZmVy
cmVkTWFpbkF4aXNFeHRlbnQpIC0gcHJlZmVycmVkTWFpbkF4aXNFeHRlbnQ7CkBAIC05MTUsMjAg
KzkwMCwxOCBAQCBMYXlvdXRVbml0IFJlbmRlckZsZXhpYmxlQm94OjphZGp1c3RDaGlsZFNpemVG
b3JNaW5BbmRNYXgoUmVuZGVyQm94KiBjaGlsZCwgTGF5bwogCiBib29sIFJlbmRlckZsZXhpYmxl
Qm94Ojpjb21wdXRlTmV4dEZsZXhMaW5lKE9yZGVyZWRGbGV4SXRlbUxpc3QmIG9yZGVyZWRDaGls
ZHJlbiwgTGF5b3V0VW5pdCYgcHJlZmVycmVkTWFpbkF4aXNFeHRlbnQsIGRvdWJsZSYgdG90YWxG
bGV4R3JvdywgZG91YmxlJiB0b3RhbFdlaWdodGVkRmxleFNocmluaywgTGF5b3V0VW5pdCYgbWlu
TWF4QXBwbGllZE1haW5BeGlzRXh0ZW50KQogewotICAgIEFTU0VSVChtX29yZGVySXRlcmF0b3Ip
OwotCiAgICAgb3JkZXJlZENoaWxkcmVuLmNsZWFyKCk7CiAgICAgcHJlZmVycmVkTWFpbkF4aXNF
eHRlbnQgPSAwOwogICAgIHRvdGFsRmxleEdyb3cgPSB0b3RhbFdlaWdodGVkRmxleFNocmluayA9
IDA7CiAgICAgbWluTWF4QXBwbGllZE1haW5BeGlzRXh0ZW50ID0gMDsKIAotICAgIGlmICghbV9v
cmRlckl0ZXJhdG9yLT5jdXJyZW50Q2hpbGQoKSkKKyAgICBpZiAoIW1fb3JkZXJJdGVyYXRvci5j
dXJyZW50Q2hpbGQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgTGF5b3V0VW5pdCBs
aW5lQnJlYWtMZW5ndGggPSBtYWluQXhpc0NvbnRlbnRFeHRlbnQoTGF5b3V0VW5pdDo6bWF4KCkp
OwogICAgIGJvb2wgbGluZUhhc0luRmxvd0l0ZW0gPSBmYWxzZTsKIAotICAgIGZvciAoUmVuZGVy
Qm94KiBjaGlsZCA9IG1fb3JkZXJJdGVyYXRvci0+Y3VycmVudENoaWxkKCk7IGNoaWxkOyBjaGls
ZCA9IG1fb3JkZXJJdGVyYXRvci0+bmV4dCgpKSB7CisgICAgZm9yIChSZW5kZXJCb3gqIGNoaWxk
ID0gbV9vcmRlckl0ZXJhdG9yLmN1cnJlbnRDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBtX29yZGVy
SXRlcmF0b3IubmV4dCgpKSB7CiAgICAgICAgIGlmIChjaGlsZC0+aXNPdXRPZkZsb3dQb3NpdGlv
bmVkKCkpIHsKICAgICAgICAgICAgIG9yZGVyZWRDaGlsZHJlbi5hcHBlbmQoY2hpbGQpOwogICAg
ICAgICAgICAgY29udGludWU7CkBAIC0xMjQ4LDggKzEyMzEsNiBAQCBzdGF0aWMgTGF5b3V0VW5p
dCBhbGlnbkNvbnRlbnRTcGFjZUJldHdlZW5DaGlsZHJlbihMYXlvdXRVbml0IGF2YWlsYWJsZUZy
ZWVTcGFjZQogCiB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjphbGlnbkZsZXhMaW5lcyhWZWN0b3I8
TGluZUNvbnRleHQ+JiBsaW5lQ29udGV4dHMpCiB7Ci0gICAgQVNTRVJUKG1fb3JkZXJJdGVyYXRv
cik7Ci0KICAgICBpZiAoIWlzTXVsdGlsaW5lKCkgfHwgc3R5bGUoKS0+YWxpZ25Db250ZW50KCkg
PT0gQWxpZ25Db250ZW50RmxleFN0YXJ0KQogICAgICAgICByZXR1cm47CiAKQEAgLTEyNTcsMTEg
KzEyMzgsMTEgQEAgdm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6YWxpZ25GbGV4TGluZXMoVmVjdG9y
PExpbmVDb250ZXh0PiYgbGluZUNvbnRleHRzKQogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bGluZUNvbnRleHRzLnNpemUoKTsgKytpKQogICAgICAgICBhdmFpbGFibGVDcm9zc0F4aXNTcGFj
ZSAtPSBsaW5lQ29udGV4dHNbaV0uY3Jvc3NBeGlzRXh0ZW50OwogCi0gICAgUmVuZGVyQm94KiBj
aGlsZCA9IG1fb3JkZXJJdGVyYXRvci0+Zmlyc3QoKTsKKyAgICBSZW5kZXJCb3gqIGNoaWxkID0g
bV9vcmRlckl0ZXJhdG9yLmZpcnN0KCk7CiAgICAgTGF5b3V0VW5pdCBsaW5lT2Zmc2V0ID0gaW5p
dGlhbEFsaWduQ29udGVudE9mZnNldChhdmFpbGFibGVDcm9zc0F4aXNTcGFjZSwgc3R5bGUoKS0+
YWxpZ25Db250ZW50KCksIGxpbmVDb250ZXh0cy5zaXplKCkpOwogICAgIGZvciAodW5zaWduZWQg
bGluZU51bWJlciA9IDA7IGxpbmVOdW1iZXIgPCBsaW5lQ29udGV4dHMuc2l6ZSgpOyArK2xpbmVO
dW1iZXIpIHsKICAgICAgICAgbGluZUNvbnRleHRzW2xpbmVOdW1iZXJdLmNyb3NzQXhpc09mZnNl
dCArPSBsaW5lT2Zmc2V0OwotICAgICAgICBmb3IgKHNpemVfdCBjaGlsZE51bWJlciA9IDA7IGNo
aWxkTnVtYmVyIDwgbGluZUNvbnRleHRzW2xpbmVOdW1iZXJdLm51bWJlck9mQ2hpbGRyZW47ICsr
Y2hpbGROdW1iZXIsIGNoaWxkID0gbV9vcmRlckl0ZXJhdG9yLT5uZXh0KCkpCisgICAgICAgIGZv
ciAoc2l6ZV90IGNoaWxkTnVtYmVyID0gMDsgY2hpbGROdW1iZXIgPCBsaW5lQ29udGV4dHNbbGlu
ZU51bWJlcl0ubnVtYmVyT2ZDaGlsZHJlbjsgKytjaGlsZE51bWJlciwgY2hpbGQgPSBtX29yZGVy
SXRlcmF0b3IubmV4dCgpKQogICAgICAgICAgICAgYWRqdXN0QWxpZ25tZW50Rm9yQ2hpbGQoY2hp
bGQsIGxpbmVPZmZzZXQpOwogCiAgICAgICAgIGlmIChzdHlsZSgpLT5hbGlnbkNvbnRlbnQoKSA9
PSBBbGlnbkNvbnRlbnRTdHJldGNoICYmIGF2YWlsYWJsZUNyb3NzQXhpc1NwYWNlID4gMCkKQEAg
LTEyODgsMTggKzEyNjksMTYgQEAgdm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6YWRqdXN0QWxpZ25t
ZW50Rm9yQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCwgTGF5b3V0VW5pdCBkZWwKIAogdm9pZCBSZW5k
ZXJGbGV4aWJsZUJveDo6YWxpZ25DaGlsZHJlbihjb25zdCBWZWN0b3I8TGluZUNvbnRleHQ+JiBs
aW5lQ29udGV4dHMpCiB7Ci0gICAgQVNTRVJUKG1fb3JkZXJJdGVyYXRvcik7Ci0KICAgICAvLyBL
ZWVwIHRyYWNrIG9mIHRoZSBzcGFjZSBiZXR3ZWVuIHRoZSBiYXNlbGluZSBlZGdlIGFuZCB0aGUg
YWZ0ZXIgZWRnZSBvZiB0aGUgYm94IGZvciBlYWNoIGxpbmUuCiAgICAgVmVjdG9yPExheW91dFVu
aXQ+IG1pbk1hcmdpbkFmdGVyQmFzZWxpbmVzOwogCi0gICAgUmVuZGVyQm94KiBjaGlsZCA9IG1f
b3JkZXJJdGVyYXRvci0+Zmlyc3QoKTsKKyAgICBSZW5kZXJCb3gqIGNoaWxkID0gbV9vcmRlckl0
ZXJhdG9yLmZpcnN0KCk7CiAgICAgZm9yIChzaXplX3QgbGluZU51bWJlciA9IDA7IGxpbmVOdW1i
ZXIgPCBsaW5lQ29udGV4dHMuc2l6ZSgpOyArK2xpbmVOdW1iZXIpIHsKICAgICAgICAgTGF5b3V0
VW5pdCBtaW5NYXJnaW5BZnRlckJhc2VsaW5lID0gTGF5b3V0VW5pdDo6bWF4KCk7CiAgICAgICAg
IExheW91dFVuaXQgbGluZUNyb3NzQXhpc0V4dGVudCA9IGxpbmVDb250ZXh0c1tsaW5lTnVtYmVy
XS5jcm9zc0F4aXNFeHRlbnQ7CiAgICAgICAgIExheW91dFVuaXQgbWF4QXNjZW50ID0gbGluZUNv
bnRleHRzW2xpbmVOdW1iZXJdLm1heEFzY2VudDsKIAotICAgICAgICBmb3IgKHNpemVfdCBjaGls
ZE51bWJlciA9IDA7IGNoaWxkTnVtYmVyIDwgbGluZUNvbnRleHRzW2xpbmVOdW1iZXJdLm51bWJl
ck9mQ2hpbGRyZW47ICsrY2hpbGROdW1iZXIsIGNoaWxkID0gbV9vcmRlckl0ZXJhdG9yLT5uZXh0
KCkpIHsKKyAgICAgICAgZm9yIChzaXplX3QgY2hpbGROdW1iZXIgPSAwOyBjaGlsZE51bWJlciA8
IGxpbmVDb250ZXh0c1tsaW5lTnVtYmVyXS5udW1iZXJPZkNoaWxkcmVuOyArK2NoaWxkTnVtYmVy
LCBjaGlsZCA9IG1fb3JkZXJJdGVyYXRvci5uZXh0KCkpIHsKICAgICAgICAgICAgIEFTU0VSVChj
aGlsZCk7CiAgICAgICAgICAgICBpZiAoY2hpbGQtPmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKSB7
CiAgICAgICAgICAgICAgICAgaWYgKHN0eWxlKCktPmZsZXhXcmFwKCkgPT0gRmxleFdyYXBSZXZl
cnNlKQpAQCAtMTM1MCwxMCArMTMyOSwxMCBAQCB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjphbGln
bkNoaWxkcmVuKGNvbnN0IFZlY3RvcjxMaW5lQ29udGV4dD4mIGxpbmVDb250ZXh0cykKIAogICAg
IC8vIHdyYXAtcmV2ZXJzZSBmbGlwcyB0aGUgY3Jvc3MgYXhpcyBzdGFydCBhbmQgZW5kLiBGb3Ig
YmFzZWxpbmUgYWxpZ25tZW50LCB0aGlzIG1lYW5zIHdlCiAgICAgLy8gbmVlZCB0byBhbGlnbiB0
aGUgYWZ0ZXIgZWRnZSBvZiBiYXNlbGluZSBlbGVtZW50cyB3aXRoIHRoZSBhZnRlciBlZGdlIG9m
IHRoZSBmbGV4IGxpbmUuCi0gICAgY2hpbGQgPSBtX29yZGVySXRlcmF0b3ItPmZpcnN0KCk7Cisg
ICAgY2hpbGQgPSBtX29yZGVySXRlcmF0b3IuZmlyc3QoKTsKICAgICBmb3IgKHNpemVfdCBsaW5l
TnVtYmVyID0gMDsgbGluZU51bWJlciA8IGxpbmVDb250ZXh0cy5zaXplKCk7ICsrbGluZU51bWJl
cikgewogICAgICAgICBMYXlvdXRVbml0IG1pbk1hcmdpbkFmdGVyQmFzZWxpbmUgPSBtaW5NYXJn
aW5BZnRlckJhc2VsaW5lc1tsaW5lTnVtYmVyXTsKLSAgICAgICAgZm9yIChzaXplX3QgY2hpbGRO
dW1iZXIgPSAwOyBjaGlsZE51bWJlciA8IGxpbmVDb250ZXh0c1tsaW5lTnVtYmVyXS5udW1iZXJP
ZkNoaWxkcmVuOyArK2NoaWxkTnVtYmVyLCBjaGlsZCA9IG1fb3JkZXJJdGVyYXRvci0+bmV4dCgp
KSB7CisgICAgICAgIGZvciAoc2l6ZV90IGNoaWxkTnVtYmVyID0gMDsgY2hpbGROdW1iZXIgPCBs
aW5lQ29udGV4dHNbbGluZU51bWJlcl0ubnVtYmVyT2ZDaGlsZHJlbjsgKytjaGlsZE51bWJlciwg
Y2hpbGQgPSBtX29yZGVySXRlcmF0b3IubmV4dCgpKSB7CiAgICAgICAgICAgICBBU1NFUlQoY2hp
bGQpOwogICAgICAgICAgICAgaWYgKGFsaWdubWVudEZvckNoaWxkKGNoaWxkKSA9PSBBbGlnbkJh
c2VsaW5lICYmICFoYXNBdXRvTWFyZ2luc0luQ3Jvc3NBeGlzKGNoaWxkKSAmJiBtaW5NYXJnaW5B
ZnRlckJhc2VsaW5lKQogICAgICAgICAgICAgICAgIGFkanVzdEFsaWdubWVudEZvckNoaWxkKGNo
aWxkLCBtaW5NYXJnaW5BZnRlckJhc2VsaW5lKTsKQEAgLTEzOTQsMTMgKzEzNzMsMTEgQEAgdm9p
ZCBSZW5kZXJGbGV4aWJsZUJveDo6YXBwbHlTdHJldGNoQWxpZ25tZW50VG9DaGlsZChSZW5kZXJC
b3gqIGNoaWxkLCBMYXlvdXRVbmkKIAogdm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6ZmxpcEZvclJp
Z2h0VG9MZWZ0Q29sdW1uKCkKIHsKLSAgICBBU1NFUlQobV9vcmRlckl0ZXJhdG9yKTsKLQogICAg
IGlmIChzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgfHwgIWlzQ29sdW1uRmxvdygp
KQogICAgICAgICByZXR1cm47CiAKICAgICBMYXlvdXRVbml0IGNyb3NzRXh0ZW50ID0gY3Jvc3NB
eGlzRXh0ZW50KCk7Ci0gICAgZm9yIChSZW5kZXJCb3gqIGNoaWxkID0gbV9vcmRlckl0ZXJhdG9y
LT5maXJzdCgpOyBjaGlsZDsgY2hpbGQgPSBtX29yZGVySXRlcmF0b3ItPm5leHQoKSkgeworICAg
IGZvciAoUmVuZGVyQm94KiBjaGlsZCA9IG1fb3JkZXJJdGVyYXRvci5maXJzdCgpOyBjaGlsZDsg
Y2hpbGQgPSBtX29yZGVySXRlcmF0b3IubmV4dCgpKSB7CiAgICAgICAgIGlmIChjaGlsZC0+aXNP
dXRPZkZsb3dQb3NpdGlvbmVkKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgTGF5
b3V0UG9pbnQgbG9jYXRpb24gPSBmbG93QXdhcmVMb2NhdGlvbkZvckNoaWxkKGNoaWxkKTsKQEAg
LTE0MTEsMTIgKzEzODgsMTAgQEAgdm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6ZmxpcEZvclJpZ2h0
VG9MZWZ0Q29sdW1uKCkKIAogdm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6ZmxpcEZvcldyYXBSZXZl
cnNlKGNvbnN0IFZlY3RvcjxMaW5lQ29udGV4dD4mIGxpbmVDb250ZXh0cywgTGF5b3V0VW5pdCBj
cm9zc0F4aXNTdGFydEVkZ2UpCiB7Ci0gICAgQVNTRVJUKG1fb3JkZXJJdGVyYXRvcik7Ci0KICAg
ICBMYXlvdXRVbml0IGNvbnRlbnRFeHRlbnQgPSBjcm9zc0F4aXNDb250ZW50RXh0ZW50KCk7Ci0g
ICAgUmVuZGVyQm94KiBjaGlsZCA9IG1fb3JkZXJJdGVyYXRvci0+Zmlyc3QoKTsKKyAgICBSZW5k
ZXJCb3gqIGNoaWxkID0gbV9vcmRlckl0ZXJhdG9yLmZpcnN0KCk7CiAgICAgZm9yIChzaXplX3Qg
bGluZU51bWJlciA9IDA7IGxpbmVOdW1iZXIgPCBsaW5lQ29udGV4dHMuc2l6ZSgpOyArK2xpbmVO
dW1iZXIpIHsKLSAgICAgICAgZm9yIChzaXplX3QgY2hpbGROdW1iZXIgPSAwOyBjaGlsZE51bWJl
ciA8IGxpbmVDb250ZXh0c1tsaW5lTnVtYmVyXS5udW1iZXJPZkNoaWxkcmVuOyArK2NoaWxkTnVt
YmVyLCBjaGlsZCA9IG1fb3JkZXJJdGVyYXRvci0+bmV4dCgpKSB7CisgICAgICAgIGZvciAoc2l6
ZV90IGNoaWxkTnVtYmVyID0gMDsgY2hpbGROdW1iZXIgPCBsaW5lQ29udGV4dHNbbGluZU51bWJl
cl0ubnVtYmVyT2ZDaGlsZHJlbjsgKytjaGlsZE51bWJlciwgY2hpbGQgPSBtX29yZGVySXRlcmF0
b3IubmV4dCgpKSB7CiAgICAgICAgICAgICBBU1NFUlQoY2hpbGQpOwogICAgICAgICAgICAgTGF5
b3V0VW5pdCBsaW5lQ3Jvc3NBeGlzRXh0ZW50ID0gbGluZUNvbnRleHRzW2xpbmVOdW1iZXJdLmNy
b3NzQXhpc0V4dGVudDsKICAgICAgICAgICAgIExheW91dFVuaXQgb3JpZ2luYWxPZmZzZXQgPSBs
aW5lQ29udGV4dHNbbGluZU51bWJlcl0uY3Jvc3NBeGlzT2Zmc2V0IC0gY3Jvc3NBeGlzU3RhcnRF
ZGdlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxl
Qm94LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guaAppbmRl
eCAxYWZiZGRhLi4xOGEwZDg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRmxleGlibGVCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
RmxleGlibGVCb3guaApAQCAtMzIsNyArMzIsNiBAQAogI2RlZmluZSBSZW5kZXJGbGV4aWJsZUJv
eF9oCiAKICNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC03MSw3ICs3MCwyMyBAQCBwcml2YXRlOgogICAg
IHN0cnVjdCBPcmRlckhhc2hUcmFpdHM7CiAgICAgdHlwZWRlZiBIYXNoU2V0PGludCwgRGVmYXVs
dEhhc2g8aW50Pjo6SGFzaCwgT3JkZXJIYXNoVHJhaXRzPiBPcmRlckhhc2hTZXQ7CiAKLSAgICBj
bGFzcyBPcmRlckl0ZXJhdG9yOworICAgIGNsYXNzIE9yZGVySXRlcmF0b3IgeworICAgICAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShPcmRlckl0ZXJhdG9yKTsKKyAgICBwdWJsaWM6CisgICAgICAg
IE9yZGVySXRlcmF0b3IoY29uc3QgUmVuZGVyRmxleGlibGVCb3gqKTsKKyAgICAgICAgdm9pZCBz
ZXRPcmRlclZhbHVlcyhjb25zdCBPcmRlckhhc2hTZXQmKTsKKyAgICAgICAgUmVuZGVyQm94KiBj
dXJyZW50Q2hpbGQoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRDaGlsZDsgfQorICAgICAgICBS
ZW5kZXJCb3gqIGZpcnN0KCk7CisgICAgICAgIFJlbmRlckJveCogbmV4dCgpOworICAgICAgICB2
b2lkIHJlc2V0KCk7CisKKyAgICBwcml2YXRlOgorICAgICAgICBjb25zdCBSZW5kZXJGbGV4aWJs
ZUJveCogbV9mbGV4aWJsZUJveDsKKyAgICAgICAgUmVuZGVyQm94KiBtX2N1cnJlbnRDaGlsZDsK
KyAgICAgICAgVmVjdG9yPGludD4gbV9vcmRlclZhbHVlczsKKyAgICAgICAgVmVjdG9yPGludD46
OmNvbnN0X2l0ZXJhdG9yIG1fb3JkZXJWYWx1ZXNJdGVyYXRvcjsKKyAgICB9OworCiAgICAgdHlw
ZWRlZiBIYXNoTWFwPGNvbnN0IFJlbmRlckJveCosIExheW91dFVuaXQ+IEluZmxleGlibGVGbGV4
SXRlbVNpemU7CiAgICAgdHlwZWRlZiBWZWN0b3I8UmVuZGVyQm94Kj4gT3JkZXJlZEZsZXhJdGVt
TGlzdDsKIApAQCAtMTUyLDcgKzE2Nyw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBmbGlwRm9yUmln
aHRUb0xlZnRDb2x1bW4oKTsKICAgICB2b2lkIGZsaXBGb3JXcmFwUmV2ZXJzZShjb25zdCBWZWN0
b3I8TGluZUNvbnRleHQ+JiwgTGF5b3V0VW5pdCBjcm9zc0F4aXNTdGFydEVkZ2UpOwogCi0gICAg
T3duUHRyPE9yZGVySXRlcmF0b3I+IG1fb3JkZXJJdGVyYXRvcjsKKyAgICBtdXRhYmxlIE9yZGVy
SXRlcmF0b3IgbV9vcmRlckl0ZXJhdG9yOwogICAgIGludCBtX251bWJlck9mSW5GbG93Q2hpbGRy
ZW5PbkZpcnN0TGluZTsKIH07CiAK
</data>
<flag name="review"
          id="197273"
          type_id="1"
          status="+"
          setter="tony"
    />
          </attachment>
      

    </bug>

</bugzilla>