<?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>78509</bug_id>
          
          <creation_ts>2012-02-13 11:24:09 -0800</creation_ts>
          <short_desc>[BlackBerry] Upstream touch handling related classes</short_desc>
          <delta_ts>2012-02-16 16:05:00 -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>UI Events</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>
          
          <blocked>73144</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Antonio Gomes">tonikitoo</reporter>
          <assigned_to name="Antonio Gomes">tonikitoo</assigned_to>
          <cc>allan.jensen</cc>
    
    <cc>kenneth</cc>
    
    <cc>rwlbuis</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>555414</commentid>
    <comment_count>0</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-02-13 11:24:09 -0800</bug_when>
    <thetext>It mostly accounts for TouchEventHandler.cpp|h and FatFingers.cpp|h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558273</commentid>
    <comment_count>1</comment_count>
      <attachid>127393</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-02-16 09:37:12 -0800</bug_when>
    <thetext>Created attachment 127393
patch_1/3 v1 - TouchEventHandler</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558275</commentid>
    <comment_count>2</comment_count>
      <attachid>127395</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-02-16 09:42:18 -0800</bug_when>
    <thetext>Created attachment 127395
patch_2/3 v1 - FatFingers</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558284</commentid>
    <comment_count>3</comment_count>
      <attachid>127396</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-02-16 09:53:47 -0800</bug_when>
    <thetext>Created attachment 127396
patch_1/3 v2 - TouchEventHandler</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558285</commentid>
    <comment_count>4</comment_count>
      <attachid>127397</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-02-16 09:54:09 -0800</bug_when>
    <thetext>Created attachment 127397
patch_2/3 v2 - FatFingers</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558286</commentid>
    <comment_count>5</comment_count>
      <attachid>127398</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-02-16 09:54:32 -0800</bug_when>
    <thetext>Created attachment 127398
(landed r107990) patch_3/3 v1 - InRegionScrollableArea</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558349</commentid>
    <comment_count>6</comment_count>
      <attachid>127396</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2012-02-16 11:13:21 -0800</bug_when>
    <thetext>Comment on attachment 127396
patch_1/3 v2 - TouchEventHandler

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

Looks good, still soem issues.

&gt; Source/WebKit/blackberry/WebKitSupport/TouchEventHandler.cpp:74
&gt; +{

I think ASSERT(element); needs to be done here and not in the above two methods, assuming those are used by elementExpectsMouseEvents only.

&gt; Source/WebKit/blackberry/WebKitSupport/TouchEventHandler.cpp:96
&gt; +    // Check for plugin

Add period :)

&gt; Source/WebKit/blackberry/WebKitSupport/TouchEventHandler.cpp:236
&gt; +            // Create  MouseReleased Event.

Double spacing.

&gt; Source/WebKit/blackberry/WebKitSupport/TouchEventHandler.cpp:239
&gt; +            m_lastFatFingersResult.reset(); // reset the fat finger result as its no longer valid when a user&apos;s finger is not on the screen.

reset -&gt; Reset

&gt; Source/WebKit/blackberry/WebKitSupport/TouchEventHandler.cpp:242
&gt; +            if (spellLength) {

Can combine these two, also just &apos;unsigned&apos; is enough and actually is what spellCheck returns.

&gt; Source/WebKit/blackberry/WebKitSupport/TouchEventHandler.cpp:244
&gt; +                unsigned int start = end - spellLength;

Can be just unsigned.

&gt; Source/WebKit/blackberry/WebKitSupport/TouchEventHandler.cpp:282
&gt; +    IntPoint newContentPos = IntPoint(rect.x() + rect.width(), rect.y() + rect.height() / 2); // midway of right edge

No sentence...

&gt; Source/WebKit/blackberry/WebKitSupport/TouchEventHandler.cpp:297
&gt; +        // Send the mouse move event

No proper sentences.

&gt; Source/WebKit/blackberry/WebKitSupport/TouchEventHandler.cpp:301
&gt; +        // Then send the MousePressed event

Lacks period.

&gt; Source/WebKit/blackberry/WebKitSupport/TouchEventHandler.cpp:312
&gt; +    bool isArea = elementUnderFatFinger-&gt;hasTagName(HTMLNames::areaTag);

Can be moved below the if.

&gt; Source/WebKit/blackberry/WebKitSupport/TouchEventHandler.cpp:316
&gt; +    // renderer.

Is this the right position for this comment?

&gt; Source/WebKit/blackberry/WebKitSupport/TouchEventHandler.cpp:374
&gt; +    // FIXME: We can get more precise on the MAP case by calculating the rect with HTMLAreaElement::computeRect().

MAP case?

&gt; Source/WebKit/blackberry/WebKitSupport/TouchEventHandler.h:2
&gt; + * Copyright (C) 2010, 2011 Research In Motion Limited. All rights reserved.

Once you start changing this, 2012 can be added.

&gt; Source/WebKit/blackberry/WebKitSupport/TouchEventHandler.h:30
&gt; +class IntPoint;

Maybe not needed since we include it?

&gt; Source/WebKit/blackberry/WebKitSupport/TouchEventHandler.h:31
&gt; +class Element;

Does not seem used.

&gt; Source/WebKit/blackberry/WebKitSupport/TouchEventHandler.h:44
&gt; +    bool handleTouchPoint(BlackBerry::Platform::TouchPoint&amp;);

BlackBerry:: prefix can be dropped in this header.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558367</commentid>
    <comment_count>7</comment_count>
      <attachid>127416</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-02-16 11:28:31 -0800</bug_when>
    <thetext>Created attachment 127416
(landed r107972) patch_1/3 v3 -TouchEventHandler</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558371</commentid>
    <comment_count>8</comment_count>
      <attachid>127397</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2012-02-16 11:31:24 -0800</bug_when>
    <thetext>Comment on attachment 127397
patch_2/3 v2 - FatFingers

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

Looks good, still some issues.

&gt; Source/WebKit/blackberry/WebKitSupport/FatFingers.cpp:2
&gt; + * Copyright (C) 2010, 2011 Research In Motion Limited. All rights reserved.

2012 should be added.

&gt; Source/WebKit/blackberry/WebKitSupport/FatFingers.cpp:45
&gt; +#include &quot;WebPage_p.h&quot;

Is above minimal?

&gt; Source/WebKit/blackberry/WebKitSupport/FatFingers.cpp:56
&gt; +using WTF::Vector;

WTF does the above itself, can be removed.

&gt; Source/WebKit/blackberry/WebKitSupport/FatFingers.cpp:124
&gt; +    Element* element = toElement(node);

Not sure if temp var is needed here.

&gt; Source/WebKit/blackberry/WebKitSupport/FatFingers.cpp:185
&gt; +        // If we are looking for a Clickable Element and we found one, we can quite early.

quite -&gt; quit.

&gt; Source/WebKit/blackberry/WebKitSupport/FatFingers.cpp:200
&gt; +    // force blit to make the fat fingers rects show up

Not a proper sentence.

&gt; Source/WebKit/blackberry/WebKitSupport/FatFingers.cpp:330
&gt; +        bool isElement = curNode-&gt;isElementNode();

isElement maybe not needed.

&gt; Source/WebKit/blackberry/WebKitSupport/FatFingers.h:2
&gt; + * Copyright (C) 2010, 2011 Research In Motion Limited. All rights reserved.

2012 should be added.

&gt; Source/WebKit/blackberry/WebKitSupport/FatFingers.h:23
&gt; +#include &quot;RenderLayer.h&quot;

Is this one needed? Also it is in the cpp as well.

&gt; Source/WebKit/blackberry/WebKitSupport/FatFingers.h:41
&gt; +namespace BlackBerry {

You can remove BlackBerry:: prefix throughout this header.

&gt; Source/WebKit/blackberry/WebKitSupport/FatFingers.h:100
&gt; +    const FatFingersResult findBestPoint();

Can this be const?

&gt; Source/WebKit/blackberry/WebKitSupport/FatFingers.h:109
&gt; +#endif

DEBUG_FAT_FINGERS could be moved into .cpp if these were just local static vars in the .cpp.

&gt; Source/WebKit/blackberry/WebKitSupport/FatFingers.h:112
&gt; +

No need for empty line.

&gt; Source/WebKit/blackberry/WebKitSupport/FatFingers.h:135
&gt; +    void setSuccessfulFatFingersResult(FatFingersResult&amp;, WebCore::Node*, const WebCore::IntPoint&amp;);

Can this be const?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558373</commentid>
    <comment_count>9</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-02-16 11:32:18 -0800</bug_when>
    <thetext>&gt; &gt; Source/WebKit/blackberry/WebKitSupport/TouchEventHandler.cpp:74
&gt; &gt; +{
&gt; 
&gt; I think ASSERT(element); needs to be done here and not in the above two methods, assuming those are used by elementExpectsMouseEvents only.

Nice! I added in all of them instead.

&gt; &gt; Source/WebKit/blackberry/WebKitSupport/TouchEventHandler.cpp:96
&gt; &gt; +    // Check for plugin
&gt; 
&gt; Add period :)

Removed the unneeded comment instead.
 
&gt; &gt; Source/WebKit/blackberry/WebKitSupport/TouchEventHandler.cpp:236
&gt; &gt; +            // Create  MouseReleased Event.
&gt; 
&gt; Double spacing.

Fixed.

 
&gt; &gt; Source/WebKit/blackberry/WebKitSupport/TouchEventHandler.cpp:239
&gt; &gt; +            m_lastFatFingersResult.reset(); // reset the fat finger result as its no longer valid when a user&apos;s finger is not on the screen.
&gt; 
&gt; reset -&gt; Reset

Fixed.

&gt; &gt; Source/WebKit/blackberry/WebKitSupport/TouchEventHandler.cpp:242
&gt; &gt; +            if (spellLength) {
&gt; 
&gt; Can combine these two, also just &apos;unsigned&apos; is enough and actually is what spellCheck returns.
&gt; &gt; Source/WebKit/blackberry/WebKitSupport/TouchEventHandler.cpp:244
&gt; &gt; +                unsigned int start = end - spellLength;
&gt; 
&gt; Can be just unsigned.

Changed them all to unsigned. As a matter of self-documenting the method return value I left the spellLength, unless you feel strong about remove it..

&gt; &gt; Source/WebKit/blackberry/WebKitSupport/TouchEventHandler.cpp:282
&gt; &gt; +    IntPoint newContentPos = IntPoint(rect.x() + rect.width(), rect.y() + rect.height() / 2); // midway of right edge
&gt; 
&gt; No sentence...

Dropped the comment.

&gt; &gt; Source/WebKit/blackberry/WebKitSupport/TouchEventHandler.cpp:297
&gt; &gt; +        // Send the mouse move event
&gt; 
&gt; No proper sentences.

Ditto.

&gt; &gt; Source/WebKit/blackberry/WebKitSupport/TouchEventHandler.cpp:301
&gt; &gt; +        // Then send the MousePressed event
&gt; 
&gt; Lacks period.

Ditto.

&gt; &gt; Source/WebKit/blackberry/WebKitSupport/TouchEventHandler.cpp:312
&gt; &gt; +    bool isArea = elementUnderFatFinger-&gt;hasTagName(HTMLNames::areaTag);
&gt; 
&gt; Can be moved below the if.

Done.

&gt; &gt; Source/WebKit/blackberry/WebKitSupport/TouchEventHandler.cpp:316
&gt; &gt; +    // renderer.
&gt; 
&gt; Is this the right position for this comment?

No, fixed.

&gt; &gt; Source/WebKit/blackberry/WebKitSupport/TouchEventHandler.cpp:374
&gt; &gt; +    // FIXME: We can get more precise on the MAP case by calculating the rect with HTMLAreaElement::computeRect().
&gt; 
&gt; MAP case?

:%s/MAP/&lt;map&gt;/g

&gt; &gt; Source/WebKit/blackberry/WebKitSupport/TouchEventHandler.h:2
&gt; &gt; + * Copyright (C) 2010, 2011 Research In Motion Limited. All rights reserved.
&gt; 
&gt; Once you start changing this, 2012 can be added.

Done.

&gt; &gt; Source/WebKit/blackberry/WebKitSupport/TouchEventHandler.h:30
&gt; &gt; +class IntPoint;
&gt; 
&gt; Maybe not needed since we include it?
&gt; 
&gt; &gt; Source/WebKit/blackberry/WebKitSupport/TouchEventHandler.h:31
&gt; &gt; +class Element;
&gt; 
&gt; Does not seem used

Removed both.

&gt; &gt; Source/WebKit/blackberry/WebKitSupport/TouchEventHandler.h:44
&gt; &gt; +    bool handleTouchPoint(BlackBerry::Platform::TouchPoint&amp;);
&gt; 
&gt; BlackBerry:: prefix can be dropped in this header.

True, removed throughout the files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558387</commentid>
    <comment_count>10</comment_count>
      <attachid>127418</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-02-16 11:41:12 -0800</bug_when>
    <thetext>Created attachment 127418
(landed r107978) patch_2/3 v3 - FatFingers</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558393</commentid>
    <comment_count>11</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-02-16 11:44:31 -0800</bug_when>
    <thetext>&gt; &gt; Source/WebKit/blackberry/WebKitSupport/FatFingers.cpp:2
&gt; &gt; + * Copyright (C) 2010, 2011 Research In Motion Limited. All rights reserved.
&gt; 
&gt; 2012 should be added.

Fixed.

&gt; &gt; Source/WebKit/blackberry/WebKitSupport/FatFingers.cpp:45
&gt; &gt; +#include &quot;WebPage_p.h&quot;
&gt; 
&gt; Is above minimal?

No, removed one unneeded: RenderLayer.h

&gt; &gt; Source/WebKit/blackberry/WebKitSupport/FatFingers.cpp:56
&gt; &gt; +using WTF::Vector;
&gt; 
&gt; WTF does the above itself, can be removed.

Ok.

&gt; &gt; Source/WebKit/blackberry/WebKitSupport/FatFingers.cpp:124
&gt; &gt; +    Element* element = toElement(node);
&gt; 
&gt; Not sure if temp var is needed here.

Left here, but let me know if you feel strong about removing it.

&gt; &gt; Source/WebKit/blackberry/WebKitSupport/FatFingers.cpp:185
&gt; &gt; +        // If we are looking for a Clickable Element and we found one, we can quite early.
&gt; 
&gt; quite -&gt; quit.

Fixed.

&gt; &gt; Source/WebKit/blackberry/WebKitSupport/FatFingers.cpp:200
&gt; &gt; +    // force blit to make the fat fingers rects show up
&gt; 
&gt; Not a proper sentence.

Fixed.

&gt; &gt; Source/WebKit/blackberry/WebKitSupport/FatFingers.cpp:330
&gt; &gt; +        bool isElement = curNode-&gt;isElementNode();
&gt; 
&gt; isElement maybe not needed.

It is used in two spots, so I left for now. Let me know if you feel strong about it.

&gt; &gt; Source/WebKit/blackberry/WebKitSupport/FatFingers.h:2
&gt; &gt; + * Copyright (C) 2010, 2011 Research In Motion Limited. All rights reserved.
&gt; 
&gt; 2012 should be added.

Done.

&gt; &gt; Source/WebKit/blackberry/WebKitSupport/FatFingers.h:23
&gt; &gt; +#include &quot;RenderLayer.h&quot;
&gt; 
&gt; Is this one needed? Also it is in the cpp as well.

Needed here, but removed from the .cpp

&gt; &gt; Source/WebKit/blackberry/WebKitSupport/FatFingers.h:41
&gt; &gt; +namespace BlackBerry {
&gt; 
&gt; You can remove BlackBerry:: prefix throughout this header.

Cool done.

&gt; &gt; Source/WebKit/blackberry/WebKitSupport/FatFingers.h:100
&gt; &gt; +    const FatFingersResult findBestPoint();
&gt; 
&gt; Can this be const?

No.

&gt; &gt; Source/WebKit/blackberry/WebKitSupport/FatFingers.h:109
&gt; &gt; +#endif
&gt; 
&gt; DEBUG_FAT_FINGERS could be moved into .cpp if these were just local static vars in the .cpp.

They are used in BackingStore.cpp
 
&gt; &gt; Source/WebKit/blackberry/WebKitSupport/FatFingers.h:112
&gt; &gt; +
&gt; 
&gt; No need for empty line.

Done.I

&gt; &gt; Source/WebKit/blackberry/WebKitSupport/FatFingers.h:135
&gt; &gt; +    void setSuccessfulFatFingersResult(FatFingersResult&amp;, WebCore::Node*, const WebCore::IntPoint&amp;);
&gt; 
&gt; Can this be const?

Maybe, but a setter being &apos;const&apos; might look even more strange?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558411</commentid>
    <comment_count>12</comment_count>
      <attachid>127416</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2012-02-16 11:53:48 -0800</bug_when>
    <thetext>Comment on attachment 127416
(landed r107972) patch_1/3 v3 -TouchEventHandler

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

Looks good, with some stuff to do before landing.

&gt; Source/WebKit/blackberry/WebKitSupport/TouchEventHandler.cpp:25
&gt; +#include &quot;FatFingers.h&quot;

Already included in header.

&gt; Source/WebKit/blackberry/WebKitSupport/TouchEventHandler.cpp:48
&gt; +#include &quot;WebSettings.h&quot;

Before landing please check this is minimal number of includes.

&gt; Source/WebKit/blackberry/WebKitSupport/TouchEventHandler.h:22
&gt; +#include &quot;ChromeClient.h&quot;

Not needed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558452</commentid>
    <comment_count>13</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-02-16 12:57:18 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 127416 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=127416&amp;action=review
&gt; 
&gt; Looks good, with some stuff to do before landing.
&gt; 
&gt; &gt; Source/WebKit/blackberry/WebKitSupport/TouchEventHandler.cpp:25
&gt; &gt; +#include &quot;FatFingers.h&quot;
&gt; 
&gt; Already included in header.

Removed.


&gt; &gt; Source/WebKit/blackberry/WebKitSupport/TouchEventHandler.cpp:48
&gt; &gt; +#include &quot;WebSettings.h&quot;
&gt; 
&gt; Before landing please check this is minimal number of includes.

Removed

&gt; &gt; Source/WebKit/blackberry/WebKitSupport/TouchEventHandler.h:22
&gt; &gt; +#include &quot;ChromeClient.h&quot;
&gt; 
&gt; Not needed?

It is needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558472</commentid>
    <comment_count>14</comment_count>
      <attachid>127418</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2012-02-16 13:28:50 -0800</bug_when>
    <thetext>Comment on attachment 127418
(landed r107978) patch_2/3 v3 - FatFingers

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

Looks good.

&gt; Source/WebKit/blackberry/WebKitSupport/FatFingers.cpp:44
&gt; +#include &quot;WebPage_p.h&quot;

Is this minimal?

&gt; Source/WebKit/blackberry/WebKitSupport/FatFingers.cpp:54
&gt; +using WTF::String;

Probably not needed.

&gt; Source/WebKit/blackberry/WebKitSupport/FatFingers.cpp:315
&gt; +    // Iterate over the list of nodes (and subrects of nodes where possible), for each saving the intersection of the bounding box with the finger rect

Lacks period.

&gt; Source/WebKit/blackberry/WebKitSupport/FatFingers.cpp:416
&gt; +        // Iterate through all words, breaking at whitespace, to find the bounding box of each word

Lacks period.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558577</commentid>
    <comment_count>15</comment_count>
      <attachid>127398</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2012-02-16 15:12:10 -0800</bug_when>
    <thetext>Comment on attachment 127398
(landed r107990) patch_3/3 v1 - InRegionScrollableArea

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

&gt; Source/WebKit/blackberry/WebKitSupport/InRegionScrollableArea.cpp:2
&gt; + * Copyright (C) 2011 Research In Motion Limited. All rights reserved.

Could add 2012.

&gt; Source/WebKit/blackberry/WebKitSupport/InRegionScrollableArea.cpp:67
&gt; +        IntRect transformedWindowRect = IntRect(IntPoint(0, 0), m_webPage-&gt;transformedViewportSize());

Could use IntPoint::zero</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127393</attachid>
            <date>2012-02-16 09:37:12 -0800</date>
            <delta_ts>2012-02-16 09:48:32 -0800</delta_ts>
            <desc>patch_1/3 v1 - TouchEventHandler</desc>
            <filename>0001-2012-02-16-Antonio-Gomes-agomes-rim.com.patch</filename>
            <type>text/plain</type>
            <size>23860</size>
            <attacher name="Antonio Gomes">tonikitoo</attacher>
            
              <data encoding="base64">RnJvbSAzMzM1MjI4YWY2N2Y4YmRmNDk4ZjM0NzU5YWM0YmJjOGY3NDYyYTEwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbnRvbmlvIEdvbWVzIDxhZ29tZXNAcmltLmNvbT4KRGF0ZTog
VGh1LCAxNiBGZWIgMjAxMiAxMjowOToyOCAtMDUwMApTdWJqZWN0OiBbUEFUQ0hdIDIwMTItMDIt
MTYgIEFudG9uaW8gR29tZXMgIDxhZ29tZXNAcmltLmNvbT4KCiAgICAgICAgW0JsYWNrQmVycnld
IFVwc3RyZWFtIHRvdWNoIGhhbmRsaW5nIHJlbGF0ZWQgY2xhc3NlcwogICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODUwOQoKICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KCiAgICAgICAgSW5pdGlhbCB1cHN0cmVhbSBvZiB0aGUgQmxhY2ti
ZXJyeSBzcGVjaWZpYyBzaW5nbGUgdG91Y2ggZXZlbnQKICAgICAgICBoYW5kbGVyIGNsYXNzLgoK
ICAgICAgICAqIGJsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9Ub3VjaEV2ZW50SGFuZGxlci5jcHA6
IEFkZGVkLgogICAgICAgIChXZWJLaXQpOgogICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6Omhh
c01vdXNlTW92ZUxpc3RlbmVyKToKICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpoYXNUb3Vj
aExpc3RlbmVyKToKICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjplbGVtZW50RXhwZWN0c01v
dXNlRXZlbnRzKToKICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpzaG91bGRDb252ZXJ0VG91
Y2hUb01vdXNlKToKICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpUb3VjaEV2ZW50SGFuZGxl
cjo6VG91Y2hFdmVudEhhbmRsZXIpOgogICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OlRvdWNo
RXZlbnRIYW5kbGVyOjp+VG91Y2hFdmVudEhhbmRsZXIpOgogICAgICAgIChCbGFja0JlcnJ5OjpX
ZWJLaXQ6OlRvdWNoRXZlbnRIYW5kbGVyOjpzaG91bGRTdXBwcmVzc01vdXNlRG93bk9uVG91Y2hE
b3duKToKICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpUb3VjaEV2ZW50SGFuZGxlcjo6dG91
Y2hFdmVudENhbmNlbCk6CiAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6VG91Y2hFdmVudEhh
bmRsZXI6OnRvdWNoSG9sZEV2ZW50KToKICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpUb3Vj
aEV2ZW50SGFuZGxlcjo6aGFuZGxlVG91Y2hQb2ludCk6CiAgICAgICAgKEJsYWNrQmVycnk6Oldl
YktpdDo6VG91Y2hFdmVudEhhbmRsZXI6OnNwZWxsQ2hlY2spOgogICAgICAgIChCbGFja0JlcnJ5
OjpXZWJLaXQ6OlRvdWNoRXZlbnRIYW5kbGVyOjpoYW5kbGVGYXRGaW5nZXJQcmVzc2VkKToKICAg
ICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjplbGVtZW50Rm9yVGFwSGlnaGxpZ2h0KToKICAgICAg
ICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpUb3VjaEV2ZW50SGFuZGxlcjo6ZHJhd1RhcEhpZ2hsaWdo
dCk6CiAgICAgICAgKiBibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvVG91Y2hFdmVudEhhbmRsZXIu
aDogQWRkZWQuCiAgICAgICAgKFdlYkNvcmUpOgogICAgICAgIChXZWJLaXQpOgogICAgICAgIChU
b3VjaEV2ZW50SGFuZGxlcik6CiAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6VG91Y2hFdmVu
dEhhbmRsZXI6Omxhc3RGYXRGaW5nZXJzUmVzdWx0KToKICAgICAgICAoQmxhY2tCZXJyeTo6V2Vi
S2l0OjpUb3VjaEV2ZW50SGFuZGxlcjo6cmVzZXRMYXN0RmF0RmluZ2Vyc1Jlc3VsdCk6Ci0tLQog
U291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgfCAgIDMw
ICsrCiAuLi4vYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L1RvdWNoRXZlbnRIYW5kbGVyLmNwcCB8
ICA0MDggKysrKysrKysrKysrKysrKysrKysKIC4uLi9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQv
VG91Y2hFdmVudEhhbmRsZXIuaCAgIHwgICA3NiArKysrCiAzIGZpbGVzIGNoYW5nZWQsIDUxNCBp
bnNlcnRpb25zKCspLCAwIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9X
ZWJLaXQvYmxhY2tiZXJyeS9DaGFuZ2VMb2cKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2Vi
S2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9Ub3VjaEV2ZW50SGFuZGxlci5jcHAKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9Ub3Vj
aEV2ZW50SGFuZGxlci5oCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9DaGFuZ2VMb2cKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU0ZWMwNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvYmxhY2tiZXJyeS9DaGFuZ2VMb2cKQEAgLTAsMCArMSwzMCBAQAorMjAxMi0wMi0x
NiAgQW50b25pbyBHb21lcyAgPGFnb21lc0ByaW0uY29tPgorCisgICAgICAgIFtCbGFja0JlcnJ5
XSBVcHN0cmVhbSB0b3VjaCBoYW5kbGluZyByZWxhdGVkIGNsYXNzZXMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4NTA5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBibGFja2JlcnJ5L1dlYktpdFN1cHBv
cnQvVG91Y2hFdmVudEhhbmRsZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAg
ICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6Omhhc01vdXNlTW92ZUxpc3RlbmVyKToKKyAgICAgICAg
KEJsYWNrQmVycnk6OldlYktpdDo6aGFzVG91Y2hMaXN0ZW5lcik6CisgICAgICAgIChCbGFja0Jl
cnJ5OjpXZWJLaXQ6OmVsZW1lbnRFeHBlY3RzTW91c2VFdmVudHMpOgorICAgICAgICAoQmxhY2tC
ZXJyeTo6V2ViS2l0OjpzaG91bGRDb252ZXJ0VG91Y2hUb01vdXNlKToKKyAgICAgICAgKEJsYWNr
QmVycnk6OldlYktpdDo6VG91Y2hFdmVudEhhbmRsZXI6OlRvdWNoRXZlbnRIYW5kbGVyKToKKyAg
ICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6VG91Y2hFdmVudEhhbmRsZXI6On5Ub3VjaEV2ZW50
SGFuZGxlcik6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OlRvdWNoRXZlbnRIYW5kbGVy
OjpzaG91bGRTdXBwcmVzc01vdXNlRG93bk9uVG91Y2hEb3duKToKKyAgICAgICAgKEJsYWNrQmVy
cnk6OldlYktpdDo6VG91Y2hFdmVudEhhbmRsZXI6OnRvdWNoRXZlbnRDYW5jZWwpOgorICAgICAg
ICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpUb3VjaEV2ZW50SGFuZGxlcjo6dG91Y2hIb2xkRXZlbnQp
OgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpUb3VjaEV2ZW50SGFuZGxlcjo6aGFuZGxl
VG91Y2hQb2ludCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OlRvdWNoRXZlbnRIYW5k
bGVyOjpzcGVsbENoZWNrKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6VG91Y2hFdmVu
dEhhbmRsZXI6OmhhbmRsZUZhdEZpbmdlclByZXNzZWQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6
V2ViS2l0OjplbGVtZW50Rm9yVGFwSGlnaGxpZ2h0KToKKyAgICAgICAgKEJsYWNrQmVycnk6Oldl
YktpdDo6VG91Y2hFdmVudEhhbmRsZXI6OmRyYXdUYXBIaWdobGlnaHQpOgorICAgICAgICAqIGJs
YWNrYmVycnkvV2ViS2l0U3VwcG9ydC9Ub3VjaEV2ZW50SGFuZGxlci5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFRvdWNoRXZlbnRIYW5k
bGVyKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6VG91Y2hFdmVudEhhbmRsZXI6Omxh
c3RGYXRGaW5nZXJzUmVzdWx0KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6VG91Y2hF
dmVudEhhbmRsZXI6OnJlc2V0TGFzdEZhdEZpbmdlcnNSZXN1bHQpOgorCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9Ub3VjaEV2ZW50SGFuZGxlci5j
cHAgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9Ub3VjaEV2ZW50SGFu
ZGxlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTYxNWM3YQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L1Rv
dWNoRXZlbnRIYW5kbGVyLmNwcApAQCAtMCwwICsxLDQwOCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMCwgMjAxMSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24s
IE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiVG91Y2hFdmVudEhhbmRsZXIuaCIKKworI2luY2x1ZGUgIkRPTVN1cHBvcnQuaCIKKyNpbmNs
dWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkRvY3VtZW50TWFya2VyQ29udHJvbGxlci5oIgor
I2luY2x1ZGUgIkZhdEZpbmdlcnMuaCIKKyNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKKyNp
bmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkhUTUxB
bmNob3JFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTEFyZWFFbGVtZW50LmgiCisjaW5jbHVkZSAi
SFRNTEltYWdlRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKKyNpbmNs
dWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MUGx1Z0luRWxlbWVudC5oIgorI2luY2x1
ZGUgIklucHV0SGFuZGxlci5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJJbnRT
aXplLmgiCisjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQ
bGF0Zm9ybU1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVRvdWNoRXZlbnQuaCIKKyNp
bmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCisjaW5jbHVk
ZSAiUmVuZGVyVmlldy5oIgorI2luY2x1ZGUgIlJlbmRlcmVkRG9jdW1lbnRNYXJrZXIuaCIKKyNp
bmNsdWRlICJTZWxlY3Rpb25IYW5kbGVyLmgiCisjaW5jbHVkZSAiV2ViUGFnZV9wLmgiCisjaW5j
bHVkZSAiV2ViU2V0dGluZ3MuaCIKKworI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisKK3Vz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIFdURjsKKworbmFtZXNwYWNl
IEJsYWNrQmVycnkgeworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0YXRpYyBib29sIGhhc01vdXNl
TW92ZUxpc3RlbmVyKEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgQVNTRVJUKGVsZW1lbnQpOwor
ICAgIHJldHVybiBlbGVtZW50LT5oYXNFdmVudExpc3RlbmVycyhldmVudE5hbWVzKCkubW91c2Vt
b3ZlRXZlbnQpIHx8IGVsZW1lbnQtPmRvY3VtZW50KCktPmhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50
TmFtZXMoKS5tb3VzZW1vdmVFdmVudCk7Cit9CisKK3N0YXRpYyBib29sIGhhc1RvdWNoTGlzdGVu
ZXIoRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBBU1NFUlQoZWxlbWVudCk7CisgICAgcmV0dXJu
IGVsZW1lbnQtPmhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMoKS50b3VjaHN0YXJ0RXZlbnQp
CisgICAgICAgIHx8IGVsZW1lbnQtPmhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMoKS50b3Vj
aG1vdmVFdmVudCkKKyAgICAgICAgfHwgZWxlbWVudC0+aGFzRXZlbnRMaXN0ZW5lcnMoZXZlbnRO
YW1lcygpLnRvdWNoY2FuY2VsRXZlbnQpCisgICAgICAgIHx8IGVsZW1lbnQtPmhhc0V2ZW50TGlz
dGVuZXJzKGV2ZW50TmFtZXMoKS50b3VjaGVuZEV2ZW50KTsKK30KKworc3RhdGljIGJvb2wgZWxl
bWVudEV4cGVjdHNNb3VzZUV2ZW50cyhFbGVtZW50KiBlbGVtZW50KQoreworICAgIC8vIE1ha2Ug
c3VyZSB3ZSBhcmUgbm90IG9wZXJhdGluZyBhIHNoYWRvdyBub2RlIGhlcmUsIHNpbmNlIHRoZSB3
ZWJwYWdlcworICAgIC8vIGFyZW4ndCBhYmxlIHRvIGF0dGFjaCBldmVudCBsaXN0ZW5lcnMgdG8g
c2hhZG93IGNvbnRlbnQuCisgICAgd2hpbGUgKGVsZW1lbnQtPmlzSW5TaGFkb3dUcmVlKCkpCisg
ICAgICAgIGVsZW1lbnQgPSB0b0VsZW1lbnQoZWxlbWVudC0+c2hhZG93QW5jZXN0b3JOb2RlKCkp
OworCisgICAgcmV0dXJuIGhhc01vdXNlTW92ZUxpc3RlbmVyKGVsZW1lbnQpICYmICFoYXNUb3Vj
aExpc3RlbmVyKGVsZW1lbnQpOworfQorCitzdGF0aWMgYm9vbCBzaG91bGRDb252ZXJ0VG91Y2hU
b01vdXNlKEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgaWYgKCFlbGVtZW50KQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAvLyBSYW5nZSBlbGVtZW50IGFyZSBhIHNwZWNpYWwgY2FzZSB0
aGF0IHJlcXVpcmUgbmF0dXJhbCBtb3VzZSBldmVudHMgaW4gb3JkZXIgdG8gYWxsb3cKKyAgICAv
LyBkcmFnZ2luZyBvZiB0aGUgc2xpZGVyIGhhbmRsZS4KKyAgICBpZiAoZWxlbWVudC0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OmlucHV0VGFnKSkgeworICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBp
bnB1dEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oZWxlbWVudCk7Cisg
ICAgICAgIGlmIChpbnB1dEVsZW1lbnQtPmlzUmFuZ2VDb250cm9sKCkpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBDaGVjayBmb3IgcGx1Z2luCisgICAgaWYgKChl
bGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2JqZWN0VGFnKSB8fCBlbGVtZW50LT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6ZW1iZWRUYWcpKSAmJiBzdGF0aWNfY2FzdDxIVE1MUGx1Z0luRWxl
bWVudCo+KGVsZW1lbnQpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIENoZWNrIGlm
IHRoZSBlbGVtZW50IGhhcyBhIG1vdXNlIGxpc3RlbmVyIGFuZCBubyB0b3VjaCBsaXN0ZW5lci4g
SWYgc28sCisgICAgLy8gdGhlIGZpZWxkIHdpbGwgcmVxdWlyZSB0b3VjaCBldmVudHMgYmUgY29u
dmVydGVkIHRvIG1vdXNlIGV2ZW50cyB0byBmdW5jdGlvbiBwcm9wZXJseS4KKyAgICBpZiAoZWxl
bWVudEV4cGVjdHNNb3VzZUV2ZW50cyhlbGVtZW50KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1RvdWNoRXZlbnRIYW5kbGVyOjpUb3VjaEV2ZW50SGFu
ZGxlcihXZWJQYWdlUHJpdmF0ZSogd2VicGFnZSkKKyAgICA6IG1fd2ViUGFnZSh3ZWJwYWdlKQor
ICAgICwgbV9kaWRDYW5jZWxUb3VjaChmYWxzZSkKKyAgICAsIG1fY29udmVydFRvdWNoVG9Nb3Vz
ZShmYWxzZSkKKyAgICAsIG1fZXhpc3RpbmdUb3VjaE1vZGUoUHJvY2Vzc2VkVG91Y2hFdmVudHMp
Cit7Cit9CisKK1RvdWNoRXZlbnRIYW5kbGVyOjp+VG91Y2hFdmVudEhhbmRsZXIoKQoreworfQor
Citib29sIFRvdWNoRXZlbnRIYW5kbGVyOjpzaG91bGRTdXBwcmVzc01vdXNlRG93bk9uVG91Y2hE
b3duKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXN0RmF0RmluZ2Vyc1Jlc3VsdC5pc1RleHRJ
bnB1dCgpIHx8IG1fd2ViUGFnZS0+bV9pbnB1dEhhbmRsZXItPmlzSW5wdXRNb2RlKCkgfHwgbV93
ZWJQYWdlLT5tX3NlbGVjdGlvbkhhbmRsZXItPmlzU2VsZWN0aW9uQWN0aXZlKCk7Cit9CisKK3Zv
aWQgVG91Y2hFdmVudEhhbmRsZXI6OnRvdWNoRXZlbnRDYW5jZWwoKQoreworICAgIG1fd2ViUGFn
ZS0+bV9pbnB1dEhhbmRsZXItPnByb2Nlc3NQZW5kaW5nQ2xpZW50TmF2aWdhdGlvbk1vZGVDaGFu
Z2VOb3RpZmljYXRpb24oKTsKKworICAgIGlmICghc2hvdWxkU3VwcHJlc3NNb3VzZURvd25PblRv
dWNoRG93bigpKSB7CisgICAgICAgIC8vIElucHV0IGVsZW1lbnRzIGRlbGF5IG1vdXNlIGRvd24g
YW5kIGRvIG5vdCBuZWVkIHRvIGJlIHJlbGVhc2VkIG9uIHRvdWNoIGNhbmNlbC4KKyAgICAgICAg
bV93ZWJQYWdlLT5tX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUo
KS0+ZXZlbnRIYW5kbGVyKCktPnNldE1vdXNlUHJlc3NlZChmYWxzZSk7CisgICAgfQorICAgIG1f
Y29udmVydFRvdWNoVG9Nb3VzZSA9IGZhbHNlOworICAgIG1fZGlkQ2FuY2VsVG91Y2ggPSB0cnVl
OworCisgICAgLy8gSWYgd2UgY2FuY2VsIGEgc2luZ2xlIHRvdWNoIGV2ZW50LCB3ZSBuZWVkIHRv
IGFsc28gY2xlYW4gdXAgYW55IGhvdmVyCisgICAgLy8gc3RhdGUgd2UgZ2V0IGludG8gYnkgc3lu
dGhldGljYWxseSBtb3ZpbmcgdGhlIG1vdXNlIHRvIHRoZSBtX2ZpbmdlclBvaW50LgorICAgIEVs
ZW1lbnQqIGVsZW1lbnRVbmRlckZhdEZpbmdlciA9IG1fbGFzdEZhdEZpbmdlcnNSZXN1bHQubm9k
ZUFzRWxlbWVudElmQXBwbGljYWJsZSgpOworICAgIGlmIChlbGVtZW50VW5kZXJGYXRGaW5nZXIg
JiYgZWxlbWVudFVuZGVyRmF0RmluZ2VyLT5yZW5kZXJlcigpKSB7CisKKyAgICAgICAgSGl0VGVz
dFJlcXVlc3QgcmVxdWVzdChIaXRUZXN0UmVxdWVzdDo6RmluZ2VyVXApOworICAgICAgICAvLyBU
aGUgSGl0VGVzdFJlc3VsdCBwb2ludCBpcyBub3QgYWN0dWFsbHkgbmVlZGVkLgorICAgICAgICBI
aXRUZXN0UmVzdWx0IHJlc3VsdChJbnRQb2ludDo6emVybygpKTsKKyAgICAgICAgcmVzdWx0LnNl
dElubmVyTm9kZShlbGVtZW50VW5kZXJGYXRGaW5nZXIpOworCisgICAgICAgIERvY3VtZW50KiBk
b2N1bWVudCA9IGVsZW1lbnRVbmRlckZhdEZpbmdlci0+ZG9jdW1lbnQoKTsKKyAgICAgICAgQVNT
RVJUKGRvY3VtZW50KTsKKyAgICAgICAgZG9jdW1lbnQtPnJlbmRlclZpZXcoKS0+bGF5ZXIoKS0+
dXBkYXRlSG92ZXJBY3RpdmVTdGF0ZShyZXF1ZXN0LCByZXN1bHQpOworICAgICAgICBkb2N1bWVu
dC0+dXBkYXRlU3R5bGVJZk5lZWRlZCgpOworICAgICAgICAvLyBVcGRhdGluZyB0aGUgZG9jdW1l
bnQgc3R5bGUgbWF5IGRlc3Ryb3kgdGhlIHJlbmRlcmVyLgorICAgICAgICBpZiAoZWxlbWVudFVu
ZGVyRmF0RmluZ2VyLT5yZW5kZXJlcigpKQorICAgICAgICAgICAgZWxlbWVudFVuZGVyRmF0Rmlu
Z2VyLT5yZW5kZXJlcigpLT5yZXBhaW50KCk7CisgICAgICAgIEFTU0VSVCghZWxlbWVudFVuZGVy
RmF0RmluZ2VyLT5ob3ZlcmVkKCkpOworICAgIH0KKworICAgIG1fbGFzdEZhdEZpbmdlcnNSZXN1
bHQucmVzZXQoKTsKK30KKwordm9pZCBUb3VjaEV2ZW50SGFuZGxlcjo6dG91Y2hFdmVudENhbmNl
bEFuZENsZWFyRm9jdXNlZE5vZGUoKQoreworICAgIHRvdWNoRXZlbnRDYW5jZWwoKTsKKyAgICBt
X3dlYlBhZ2UtPmNsZWFyRm9jdXNOb2RlKCk7Cit9CisKK3ZvaWQgVG91Y2hFdmVudEhhbmRsZXI6
OnRvdWNoSG9sZEV2ZW50KCkKK3sKKyAgICAvLyBUaGlzIGlzIGEgaGFjayBmb3Igb3VyIGhhY2sg
dGhhdCBjb252ZXJ0cyB0aGUgdG91Y2ggcHJlc3NlZCBldmVudCB0aGF0IHdlJ3ZlIGRlbGF5ZWQg
YmVjYXVzZSB0aGUgdXNlciBoYXMgZm9jdXNlZCBhIGlucHV0IGZpZWxkCisgICAgLy8gdG8gdGhl
IHBhZ2UgYXMgYSBtb3VzZSBwcmVzc2VkIGV2ZW50LgorICAgIGlmIChzaG91bGRTdXBwcmVzc01v
dXNlRG93bk9uVG91Y2hEb3duKCkpCisgICAgICAgIGhhbmRsZUZhdEZpbmdlclByZXNzZWQoKTsK
KworICAgIC8vIENsZWFyIHRoZSBmb2N1cyByaW5nIGluZGljYXRpb24gaWYgdGFwLWFuZC1ob2xk
J2luZyBvbiBhIGxpbmsuCisgICAgaWYgKG1fbGFzdEZhdEZpbmdlcnNSZXN1bHQudmFsaWROb2Rl
KCkgJiYgbV9sYXN0RmF0RmluZ2Vyc1Jlc3VsdC52YWxpZE5vZGUoKS0+aXNMaW5rKCkpCisgICAg
ICAgIG1fd2ViUGFnZS0+Y2xlYXJGb2N1c05vZGUoKTsKK30KKworYm9vbCBUb3VjaEV2ZW50SGFu
ZGxlcjo6aGFuZGxlVG91Y2hQb2ludChCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6VG91Y2hQb2ludCYg
cG9pbnQpCit7CisgICAgc3dpdGNoIChwb2ludC5tX3N0YXRlKSB7CisgICAgY2FzZSBCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6VG91Y2hQb2ludDo6VG91Y2hQcmVzc2VkOgorICAgICAgICB7CisgICAg
ICAgICAgICBtX2xhc3RGYXRGaW5nZXJzUmVzdWx0LnJlc2V0KCk7IC8vIFRoZW9yZXRpY2FsbHkg
dGhpcyBzaG91bGRuJ3QgYmUgcmVxdWlyZWQuIEtlZXAgaXQganVzdCBpbiBjYXNlIHN0YXRlcyBn
ZXQgbWFuZ2xlZC4KKyAgICAgICAgICAgIG1fZGlkQ2FuY2VsVG91Y2ggPSBmYWxzZTsKKyAgICAg
ICAgICAgIG1fbGFzdFNjcmVlblBvaW50ID0gcG9pbnQubV9zY3JlZW5Qb3M7CisKKyAgICAgICAg
ICAgIEludFBvaW50IGNvbnRlbnRQb3MobV93ZWJQYWdlLT5tYXBGcm9tVmlld3BvcnRUb0NvbnRl
bnRzKHBvaW50Lm1fcG9zKSk7CisKKyAgICAgICAgICAgIG1fbGFzdEZhdEZpbmdlcnNSZXN1bHQg
PSBGYXRGaW5nZXJzKG1fd2ViUGFnZSwgY29udGVudFBvcywgRmF0RmluZ2Vyczo6Q2xpY2thYmxl
RWxlbWVudCkuZmluZEJlc3RQb2ludCgpOworCisgICAgICAgICAgICBFbGVtZW50KiBlbGVtZW50
VW5kZXJGYXRGaW5nZXIgPSAwOworICAgICAgICAgICAgaWYgKG1fbGFzdEZhdEZpbmdlcnNSZXN1
bHQucG9zaXRpb25XYXNBZGp1c3RlZCgpICYmIG1fbGFzdEZhdEZpbmdlcnNSZXN1bHQudmFsaWRO
b2RlKCkpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQobV9sYXN0RmF0RmluZ2Vyc1Jlc3VsdC52
YWxpZE5vZGUoKS0+aXNFbGVtZW50Tm9kZSgpKTsKKyAgICAgICAgICAgICAgICBlbGVtZW50VW5k
ZXJGYXRGaW5nZXIgPSBtX2xhc3RGYXRGaW5nZXJzUmVzdWx0Lm5vZGVBc0VsZW1lbnRJZkFwcGxp
Y2FibGUoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gU2V0IG9yIHJlc2V0IHRo
ZSB0b3VjaCBtb2RlLgorICAgICAgICAgICAgRWxlbWVudCogcG9zc2libGVUYXJnZXROb2RlRm9y
TW91c2VNb3ZlRXZlbnRzID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG1fbGFzdEZhdEZpbmdlcnNS
ZXN1bHQucG9zaXRpb25XYXNBZGp1c3RlZCgpID8gZWxlbWVudFVuZGVyRmF0RmluZ2VyIDogbV9s
YXN0RmF0RmluZ2Vyc1Jlc3VsdC52YWxpZE5vZGUoKSk7CisgICAgICAgICAgICBtX2NvbnZlcnRU
b3VjaFRvTW91c2UgPSBzaG91bGRDb252ZXJ0VG91Y2hUb01vdXNlKHBvc3NpYmxlVGFyZ2V0Tm9k
ZUZvck1vdXNlTW92ZUV2ZW50cyk7CisKKyAgICAgICAgICAgIGlmIChlbGVtZW50VW5kZXJGYXRG
aW5nZXIpCisgICAgICAgICAgICAgICAgZHJhd1RhcEhpZ2hsaWdodCgpOworCisgICAgICAgICAg
ICAvLyBMZXRzIGJlIGNvbnNlcnZhdGl2ZSBoZXJlOiBzaW5jZSB3ZSBoYXZlIHByb2JsZW1zIG9u
IG1ham9yIHdlYnNpdGUgaGF2aW5nCisgICAgICAgICAgICAvLyBtb3VzZW1vdmUgbGlzdGVuZXIg
Zm9yIG5vIGdvb2QgcmVhc29uIChlLmcuIGdvb2dsZS5jb20sIGRlc2t0b3AgZWRpdGlvbiksCisg
ICAgICAgICAgICAvLyBsZXQgb25seSBkZWxheSBjbGllbnQgbm90aWZpY2F0aW9ucyB3aGVuIHRo
ZXJlIGlzIG5vdCBpbnB1dCB0ZXh0IG5vZGUgaW52b2x2ZWQuCisgICAgICAgICAgICBpZiAobV9j
b252ZXJ0VG91Y2hUb01vdXNlCisgICAgICAgICAgICAgICAgJiYgKG1fd2ViUGFnZS0+bV9pbnB1
dEhhbmRsZXItPmlzSW5wdXRNb2RlKCkgJiYgIW1fbGFzdEZhdEZpbmdlcnNSZXN1bHQuaXNUZXh0
SW5wdXQoKSkpIHsKKyAgICAgICAgICAgICAgICBtX3dlYlBhZ2UtPm1faW5wdXRIYW5kbGVyLT5z
ZXREZWxheUNsaWVudE5vdGlmaWNhdGlvbk9mTmF2aWdhdGlvbk1vZGVDaGFuZ2UodHJ1ZSk7Cisg
ICAgICAgICAgICAgICAgaGFuZGxlRmF0RmluZ2VyUHJlc3NlZCgpOworICAgICAgICAgICAgfSBl
bHNlIGlmICghc2hvdWxkU3VwcHJlc3NNb3VzZURvd25PblRvdWNoRG93bigpKQorICAgICAgICAg
ICAgICAgIGhhbmRsZUZhdEZpbmdlclByZXNzZWQoKTsKKworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0KKyAgICBjYXNlIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpUb3VjaFBvaW50
OjpUb3VjaFJlbGVhc2VkOgorICAgICAgICB7CisgICAgICAgICAgICBtX3dlYlBhZ2UtPm1faW5w
dXRIYW5kbGVyLT5wcm9jZXNzUGVuZGluZ0NsaWVudE5hdmlnYXRpb25Nb2RlQ2hhbmdlTm90aWZp
Y2F0aW9uKCk7CisKKyAgICAgICAgICAgIGlmIChzaG91bGRTdXBwcmVzc01vdXNlRG93bk9uVG91
Y2hEb3duKCkpCisgICAgICAgICAgICAgICAgaGFuZGxlRmF0RmluZ2VyUHJlc3NlZCgpOworCisg
ICAgICAgICAgICAvLyBUaGUgcmViYXNlIGhhcyBlbGltaW5hdGVkIGEgbmVjZXNzYXJ5IGV2ZW50
IHdoZW4gdGhlIG1vdXNlIGRvZXMgbm90CisgICAgICAgICAgICAvLyB0cmlnZ2VyIGFuIGFjdHVh
bCBzZWxlY3Rpb24gY2hhbmdlIHByZXZlbnRpbmcgcmUtc2hvd2luZyBvZiB0aGUKKyAgICAgICAg
ICAgIC8vIGtleWJvYXJkLiBJZiBpbnB1dCBtb2RlIGlzIGFjdGl2ZSwgY2FsbCBzZXROYXZpZ2F0
aW9uTW9kZSB3aGljaAorICAgICAgICAgICAgLy8gd2lsbCB1cGRhdGUgdGhlIHN0YXRlIGFuZCBk
aXNwbGF5IGtleWJvYXJkIGlmIG5lZWRlZC4KKyAgICAgICAgICAgIGlmIChtX3dlYlBhZ2UtPm1f
aW5wdXRIYW5kbGVyLT5pc0lucHV0TW9kZSgpKQorICAgICAgICAgICAgICAgIG1fd2ViUGFnZS0+
bV9pbnB1dEhhbmRsZXItPnNldE5hdmlnYXRpb25Nb2RlKHRydWUpOworCisgICAgICAgICAgICBJ
bnRQb2ludCBhZGp1c3RlZFBvaW50OworICAgICAgICAgICAgaWYgKG1fY29udmVydFRvdWNoVG9N
b3VzZSkgeworICAgICAgICAgICAgICAgIGFkanVzdGVkUG9pbnQgPSBwb2ludC5tX3BvczsKKyAg
ICAgICAgICAgICAgICBtX2NvbnZlcnRUb3VjaFRvTW91c2UgPSBmYWxzZTsKKyAgICAgICAgICAg
IH0gZWxzZSAvLyBGYXQgZmluZ2VyIHBvaW50IGluIHZpZXdwb3J0IGNvb3JkaW5hdGVzLgorICAg
ICAgICAgICAgICAgIGFkanVzdGVkUG9pbnQgPSBtX3dlYlBhZ2UtPm1hcEZyb21Db250ZW50c1Rv
Vmlld3BvcnQobV9sYXN0RmF0RmluZ2Vyc1Jlc3VsdC5hZGp1c3RlZFBvc2l0aW9uKCkpOworCisg
ICAgICAgICAgICAvLyBDcmVhdGUgIE1vdXNlUmVsZWFzZWQgRXZlbnQuCisgICAgICAgICAgICBQ
bGF0Zm9ybU1vdXNlRXZlbnQgbW91c2VFdmVudChhZGp1c3RlZFBvaW50LCBtX2xhc3RTY3JlZW5Q
b2ludCwgTW91c2VFdmVudFJlbGVhc2VkLCAxLCBMZWZ0QnV0dG9uLCBUb3VjaFNjcmVlbik7Cisg
ICAgICAgICAgICBtX3dlYlBhZ2UtPmhhbmRsZU1vdXNlRXZlbnQobW91c2VFdmVudCk7CisgICAg
ICAgICAgICBtX2xhc3RGYXRGaW5nZXJzUmVzdWx0LnJlc2V0KCk7IC8vIHJlc2V0IHRoZSBmYXQg
ZmluZ2VyIHJlc3VsdCBhcyBpdHMgbm8gbG9uZ2VyIHZhbGlkIHdoZW4gYSB1c2VyJ3MgZmluZ2Vy
IGlzIG5vdCBvbiB0aGUgc2NyZWVuLgorCisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc3BlbGxM
ZW5ndGggPSBzcGVsbENoZWNrKHBvaW50KTsKKyAgICAgICAgICAgIGlmIChzcGVsbExlbmd0aCkg
eworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBlbmQgPSBtX3dlYlBhZ2UtPm1faW5wdXRI
YW5kbGVyLT5jYXJldFBvc2l0aW9uKCk7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHN0
YXJ0ID0gZW5kIC0gc3BlbGxMZW5ndGg7CisgICAgICAgICAgICAgICAgbV93ZWJQYWdlLT5tX2Ns
aWVudC0+cmVxdWVzdFNwZWxsaW5nU3VnZ2VzdGlvbnNGb3JTdHJpbmcoc3RhcnQsIGVuZCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIGNh
c2UgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlRvdWNoUG9pbnQ6OlRvdWNoTW92ZWQ6CisgICAgICAg
IGlmIChtX2NvbnZlcnRUb3VjaFRvTW91c2UpIHsKKyAgICAgICAgICAgIFBsYXRmb3JtTW91c2VF
dmVudCBtb3VzZUV2ZW50KHBvaW50Lm1fcG9zLCBtX2xhc3RTY3JlZW5Qb2ludCwgTW91c2VFdmVu
dE1vdmVkLCAxLCBMZWZ0QnV0dG9uLCBUb3VjaFNjcmVlbik7CisgICAgICAgICAgICBtX2xhc3RT
Y3JlZW5Qb2ludCA9IHBvaW50Lm1fc2NyZWVuUG9zOworICAgICAgICAgICAgaWYgKCFtX3dlYlBh
Z2UtPmhhbmRsZU1vdXNlRXZlbnQobW91c2VFdmVudCkpIHsKKyAgICAgICAgICAgICAgICBtX2Nv
bnZlcnRUb3VjaFRvTW91c2UgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0
dXJuIGZhbHNlOworfQorCit1bnNpZ25lZCBUb3VjaEV2ZW50SGFuZGxlcjo6c3BlbGxDaGVjayhC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6VG91Y2hQb2ludCYgdG91Y2hQb2ludCkKK3sKKyAgICBFbGVt
ZW50KiBlbGVtZW50VW5kZXJGYXRGaW5nZXIgPSBtX2xhc3RGYXRGaW5nZXJzUmVzdWx0Lm5vZGVB
c0VsZW1lbnRJZkFwcGxpY2FibGUoKTsKKyAgICBpZiAoIW1fbGFzdEZhdEZpbmdlcnNSZXN1bHQu
aXNUZXh0SW5wdXQoKSB8fCAhZWxlbWVudFVuZGVyRmF0RmluZ2VyKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIEludFBvaW50IGNvbnRlbnRQb3MobV93ZWJQYWdlLT5tYXBGcm9tVmlld3BvcnRU
b0NvbnRlbnRzKHRvdWNoUG9pbnQubV9wb3MpKTsKKyAgICBjb250ZW50UG9zID0gRE9NU3VwcG9y
dDo6Y29udmVydFBvaW50VG9GcmFtZShtX3dlYlBhZ2UtPm1haW5GcmFtZSgpLCBtX3dlYlBhZ2Ut
PmZvY3VzZWRPck1haW5GcmFtZSgpLCBjb250ZW50UG9zKTsKKworICAgIERvY3VtZW50KiBkb2N1
bWVudCA9IGVsZW1lbnRVbmRlckZhdEZpbmdlci0+ZG9jdW1lbnQoKTsKKyAgICBBU1NFUlQoZG9j
dW1lbnQpOworICAgIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqIG1hcmtlciA9IGRvY3VtZW50LT5t
YXJrZXJzKCktPnJlbmRlcmVkTWFya2VyQ29udGFpbmluZ1BvaW50KGNvbnRlbnRQb3MsIERvY3Vt
ZW50TWFya2VyOjpTcGVsbGluZyk7CisgICAgaWYgKCFtYXJrZXIpCisgICAgICAgIHJldHVybiAw
OworCisgICAgSW50UmVjdCByZWN0ID0gbWFya2VyLT5yZW5kZXJlZFJlY3QoKTsKKyAgICBJbnRQ
b2ludCBuZXdDb250ZW50UG9zID0gSW50UG9pbnQocmVjdC54KCkgKyByZWN0LndpZHRoKCksIHJl
Y3QueSgpICsgcmVjdC5oZWlnaHQoKSAvIDIpOyAvLyBtaWR3YXkgb2YgcmlnaHQgZWRnZQorICAg
IEZyYW1lKiBmcmFtZSA9IG1fd2ViUGFnZS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7CisgICAgaWYg
KGZyYW1lICE9IG1fd2ViUGFnZS0+bWFpbkZyYW1lKCkpCisgICAgICAgIG5ld0NvbnRlbnRQb3Mg
PSBtX3dlYlBhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCktPndpbmRvd1RvQ29udGVudHMoZnJhbWUt
PnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhuZXdDb250ZW50UG9zKSk7CisgICAgbV9sYXN0RmF0
RmluZ2Vyc1Jlc3VsdC5tX2FkanVzdGVkUG9zaXRpb24gPSBuZXdDb250ZW50UG9zOworICAgIG1f
bGFzdEZhdEZpbmdlcnNSZXN1bHQubV9wb3NpdGlvbldhc0FkanVzdGVkID0gdHJ1ZTsKKyAgICBy
ZXR1cm4gbWFya2VyLT5lbmRPZmZzZXQoKSAtIG1hcmtlci0+c3RhcnRPZmZzZXQoKTsKK30KKwor
dm9pZCBUb3VjaEV2ZW50SGFuZGxlcjo6aGFuZGxlRmF0RmluZ2VyUHJlc3NlZCgpCit7CisgICAg
aWYgKCFtX2RpZENhbmNlbFRvdWNoKSB7CisKKyAgICAgICAgLy8gQ29udmVydCB0b3VjaCBldmVu
dCB0byBhIG1vdXNlIGV2ZW50CisgICAgICAgIC8vIEZpcnN0IHVwZGF0ZSB0aGUgbW91c2UgcG9z
aXRpb24gd2l0aCBhIE1vdXNlTW92ZWQgZXZlbnQKKyAgICAgICAgLy8gU2VuZCB0aGUgbW91c2Ug
bW92ZSBldmVudAorICAgICAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgbW91c2VNb3ZlRXZlbnQobV93
ZWJQYWdlLT5tYXBGcm9tQ29udGVudHNUb1ZpZXdwb3J0KG1fbGFzdEZhdEZpbmdlcnNSZXN1bHQu
YWRqdXN0ZWRQb3NpdGlvbigpKSwgbV9sYXN0U2NyZWVuUG9pbnQsIE1vdXNlRXZlbnRNb3ZlZCwg
MCwgTGVmdEJ1dHRvbiwgVG91Y2hTY3JlZW4pOworICAgICAgICBtX3dlYlBhZ2UtPmhhbmRsZU1v
dXNlRXZlbnQobW91c2VNb3ZlRXZlbnQpOworCisgICAgICAgIC8vIFRoZW4gc2VuZCB0aGUgTW91
c2VQcmVzc2VkIGV2ZW50CisgICAgICAgIFBsYXRmb3JtTW91c2VFdmVudCBtb3VzZVByZXNzZWRF
dmVudChtX3dlYlBhZ2UtPm1hcEZyb21Db250ZW50c1RvVmlld3BvcnQobV9sYXN0RmF0RmluZ2Vy
c1Jlc3VsdC5hZGp1c3RlZFBvc2l0aW9uKCkpLCBtX2xhc3RTY3JlZW5Qb2ludCwgTW91c2VFdmVu
dFByZXNzZWQsIDEsIExlZnRCdXR0b24sIFRvdWNoU2NyZWVuKTsKKyAgICAgICAgbV93ZWJQYWdl
LT5oYW5kbGVNb3VzZUV2ZW50KG1vdXNlUHJlc3NlZEV2ZW50KTsKKyAgICB9Cit9CisKKy8vIFRo
aXMgbWV0aG9kIGZpbHRlcnMgd2hhdCBlbGVtZW50IHdpbGwgZ2V0IHRhcC1oaWdobGlnaHQnZWQg
b3Igbm90LiBUbyBzdGFydCB3aXRoLAorLy8gd2UgYXJlIGdvaW5nIHRvIGhpZ2hsaWdodCBsaW5r
cyAoYW5jaG9ycyB3aXRoIGEgdmFsaWQgaHJlZiBlbGVtZW50KSwgYW5kIGVsZW1lbnRzCisvLyB3
aG9zZSB0YXAgaGlnaGxpZ2h0IGNvbG9yIHZhbHVlIGlzIGRpZmZlcmVudCB0aGFuIHRoZSBkZWZh
dWx0IHZhbHVlLgorc3RhdGljIEVsZW1lbnQqIGVsZW1lbnRGb3JUYXBIaWdobGlnaHQoRWxlbWVu
dCogZWxlbWVudFVuZGVyRmF0RmluZ2VyKQoreworICAgIGJvb2wgaXNBcmVhID0gZWxlbWVudFVu
ZGVyRmF0RmluZ2VyLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YXJlYVRhZyk7CisKKyAgICAvLyBE
byBub3QgYmFpbCBvdXQgcmlnaHQgd2F5IGhlcmUgaWYgdGhlcmUgZWxlbWVudCBkb2VzIG5vdCBo
YXZlIGEgcmVuZGVyZXIuIEl0IGlzIHRoZSBjYXNlCisgICAgLy8gZm9yIDxtYXA+IChkZXNjZW5k
ZW50IG9mIDxhcmVhPikgZWxlbWVudHMuIFRoZSBhc3NvY2lhdGVkIDxpbWFnZT4gZWxlbWVudCBh
Y3R1YWxseSBoYXMgdGhlCisgICAgLy8gcmVuZGVyZXIuCisgICAgaWYgKGVsZW1lbnRVbmRlckZh
dEZpbmdlci0+cmVuZGVyZXIoKSkgeworICAgICAgICBDb2xvciB0YXBIaWdobGlnaHRDb2xvciA9
IGVsZW1lbnRVbmRlckZhdEZpbmdlci0+cmVuZGVyU3R5bGUoKS0+dGFwSGlnaGxpZ2h0Q29sb3Io
KTsKKyAgICAgICAgaWYgKHRhcEhpZ2hsaWdodENvbG9yICE9IFJlbmRlclRoZW1lOjpkZWZhdWx0
VGhlbWUoKS0+cGxhdGZvcm1UYXBIaWdobGlnaHRDb2xvcigpKQorICAgICAgICAgICAgcmV0dXJu
IGVsZW1lbnRVbmRlckZhdEZpbmdlcjsKKyAgICB9CisKKyAgICBOb2RlKiBsaW5rTm9kZSA9IGVs
ZW1lbnRVbmRlckZhdEZpbmdlci0+ZW5jbG9zaW5nTGlua0V2ZW50UGFyZW50T3JTZWxmKCk7Cisg
ICAgaWYgKCFsaW5rTm9kZSB8fCAhbGlua05vZGUtPmlzSFRNTEVsZW1lbnQoKSB8fCAoIWxpbmtO
b2RlLT5yZW5kZXJlcigpICYmICFpc0FyZWEpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEFT
U0VSVChsaW5rTm9kZS0+aXNMaW5rKCkpOworCisgICAgLy8gRmF0RmluZ2VycyBjbGFzcyBzZWxl
Y3RvciBlbnN1cmUgb25seSBhbmNob3Igd2l0aCB2YWxpZCBocmVmIGF0dHIgdmFsdWUgZ2V0IGhl
cmUuCisgICAgLy8gSXQgaW5jbHVkZXMgZW1wdHkgaHJlZnMuCisgICAgRWxlbWVudCogaGlnaGxp
Z2h0Q2FuZGlkYXRlRWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihsaW5rTm9kZSk7CisK
KyAgICBpZiAoIWlzQXJlYSkKKyAgICAgICAgcmV0dXJuIGhpZ2hsaWdodENhbmRpZGF0ZUVsZW1l
bnQ7CisKKyAgICBIVE1MQXJlYUVsZW1lbnQqIGFyZWEgPSBzdGF0aWNfY2FzdDxIVE1MQXJlYUVs
ZW1lbnQqPihoaWdobGlnaHRDYW5kaWRhdGVFbGVtZW50KTsKKyAgICBIVE1MSW1hZ2VFbGVtZW50
KiBpbWFnZSA9IGFyZWEtPmltYWdlRWxlbWVudCgpOworICAgIGlmIChpbWFnZSAmJiBpbWFnZS0+
cmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJuIGltYWdlOworCisgICAgcmV0dXJuIDA7Cit9CisK
K3ZvaWQgVG91Y2hFdmVudEhhbmRsZXI6OmRyYXdUYXBIaWdobGlnaHQoKQoreworICAgIEVsZW1l
bnQqIGVsZW1lbnRVbmRlckZhdEZpbmdlciA9IG1fbGFzdEZhdEZpbmdlcnNSZXN1bHQubm9kZUFz
RWxlbWVudElmQXBwbGljYWJsZSgpOworICAgIGlmICghZWxlbWVudFVuZGVyRmF0RmluZ2VyKQor
ICAgICAgICByZXR1cm47CisKKyAgICBFbGVtZW50KiBlbGVtZW50ID0gZWxlbWVudEZvclRhcEhp
Z2hsaWdodChlbGVtZW50VW5kZXJGYXRGaW5nZXIpOworICAgIGlmICghZWxlbWVudCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgLy8gR2V0IHRoZSBlbGVtZW50IGJvdW5kaW5nIHJlY3QgaW4gdHJh
bnNmb3JtZWQgY29vcmRpbmF0ZXMgc28gd2UgY2FuIGV4dHJhY3QKKyAgICAvLyB0aGUgZm9jdXMg
cmluZyByZWxhdGl2ZSBwb3NpdGlvbiBlYWNoIHJlY3QuCisgICAgUmVuZGVyT2JqZWN0KiByZW5k
ZXJlciA9IGVsZW1lbnQtPnJlbmRlcmVyKCk7CisgICAgQVNTRVJUKHJlbmRlcmVyKTsKKworICAg
IEZyYW1lKiBlbGVtZW50RnJhbWUgPSBlbGVtZW50LT5kb2N1bWVudCgpLT5mcmFtZSgpOworICAg
IEFTU0VSVChlbGVtZW50RnJhbWUpOworCisgICAgRnJhbWVWaWV3KiBlbGVtZW50RnJhbWVWaWV3
ID0gZWxlbWVudEZyYW1lLT52aWV3KCk7CisgICAgaWYgKCFlbGVtZW50RnJhbWVWaWV3KQorICAg
ICAgICByZXR1cm47CisKKyAgICAvLyBUZWxsIHRoZSBjbGllbnQgaWYgdGhlIGVsZW1lbnQgaXMg
ZWl0aGVyIGluIGEgc2Nyb2xsYWJsZSBjb250YWluZXIgb3IgaW4gYSBmaXhlZCBwb3NpdGlvbmVk
IGNvbnRhaW5lci4KKyAgICAvLyBPbiB0aGUgY2xpZW50IHNpZGUsIHRoaXMgaW5mbyBpcyBiZWlu
ZyB1c2VkIHRvIGhpZGUgdGhlIHRhcCBoaWdobGlnaHQgd2luZG93IG9uIHNjcm9sbC4KKyAgICBS
ZW5kZXJMYXllciogbGF5ZXIgPSBtX3dlYlBhZ2UtPmVuY2xvc2luZ0ZpeGVkUG9zaXRpb25lZEFu
Y2VzdG9yT3JTZWxmSWZGaXhlZFBvc2l0aW9uZWQocmVuZGVyZXItPmVuY2xvc2luZ0xheWVyKCkp
OworICAgIGJvb2wgc2hvdWxkSGlkZVRhcEhpZ2hsaWdodFJpZ2h0QWZ0ZXJTY3JvbGxpbmcgPSAh
bGF5ZXItPnJlbmRlcmVyKCktPmlzUmVuZGVyVmlldygpOworICAgIHNob3VsZEhpZGVUYXBIaWdo
bGlnaHRSaWdodEFmdGVyU2Nyb2xsaW5nIHw9ICEhbV93ZWJQYWdlLT5tX2luUmVnaW9uU2Nyb2xs
U3RhcnRpbmdOb2RlLmdldCgpOworCisgICAgSW50UG9pbnQgZnJhbWVQb3MobV93ZWJQYWdlLT5m
cmFtZU9mZnNldChlbGVtZW50RnJhbWUpKTsKKworICAgIC8vIEZJWE1FOiBXZSBjYW4gZ2V0IG1v
cmUgcHJlY2lzZSBvbiB0aGUgTUFQIGNhc2UgYnkgY2FsY3VsYXRpbmcgdGhlIHJlY3Qgd2l0aCBI
VE1MQXJlYUVsZW1lbnQ6OmNvbXB1dGVSZWN0KCkuCisgICAgSW50UmVjdCBhYnNvbHV0ZVJlY3Qg
PSByZW5kZXJlci0+YWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0KCk7CisgICAgYWJzb2x1dGVS
ZWN0Lm1vdmUoZnJhbWVQb3MueCgpLCBmcmFtZVBvcy55KCkpOworCisgICAgSW50UmVjdCBjbGlw
cGluZ1JlY3Q7CisgICAgaWYgKGVsZW1lbnRGcmFtZSA9PSBtX3dlYlBhZ2UtPm1haW5GcmFtZSgp
KQorICAgICAgICBjbGlwcGluZ1JlY3QgPSBJbnRSZWN0KEludFBvaW50KDAsIDApLCBlbGVtZW50
RnJhbWVWaWV3LT5jb250ZW50c1NpemUoKSk7CisgICAgZWxzZQorICAgICAgICBjbGlwcGluZ1Jl
Y3QgPSBtX3dlYlBhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCktPndpbmRvd1RvQ29udGVudHMobV93
ZWJQYWdlLT5nZXRSZWN1cnNpdmVWaXNpYmxlV2luZG93UmVjdChlbGVtZW50RnJhbWVWaWV3LCB0
cnVlIC8qbm9DbGlwVG9NYWluRnJhbWUqLykpOworICAgIGNsaXBwaW5nUmVjdCA9IGludGVyc2Vj
dGlvbihhYnNvbHV0ZVJlY3QsIGNsaXBwaW5nUmVjdCk7CisKKyAgICBWZWN0b3I8RmxvYXRRdWFk
PiBmb2N1c1JpbmdRdWFkczsKKyAgICByZW5kZXJlci0+YWJzb2x1dGVGb2N1c1JpbmdRdWFkcyhm
b2N1c1JpbmdRdWFkcyk7CisKKyAgICBQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbiByZWdpb247Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmb2N1c1JpbmdRdWFkcy5zaXplKCk7ICsraSkgewor
ICAgICAgICBJbnRSZWN0IHJlY3QgPSBmb2N1c1JpbmdRdWFkc1tpXS5lbmNsb3NpbmdCb3VuZGlu
Z0JveCgpOworICAgICAgICByZWN0Lm1vdmUoZnJhbWVQb3MueCgpLCBmcmFtZVBvcy55KCkpOwor
ICAgICAgICBJbnRSZWN0IGNsaXBwZWRSZWN0ID0gaW50ZXJzZWN0aW9uKGNsaXBwaW5nUmVjdCwg
cmVjdCk7CisgICAgICAgIGNsaXBwZWRSZWN0LmluZmxhdGUoMik7CisgICAgICAgIHJlZ2lvbiA9
IHVuaW9uUmVnaW9ucyhyZWdpb24sIFBsYXRmb3JtOjpJbnRSZWN0KGNsaXBwZWRSZWN0KSk7Cisg
ICAgfQorCisgICAgQ29sb3IgaGlnaGxpZ2h0Q29sb3IgPSBlbGVtZW50LT5yZW5kZXJTdHlsZSgp
LT50YXBIaWdobGlnaHRDb2xvcigpOworCisgICAgbV93ZWJQYWdlLT5tX2NsaWVudC0+ZHJhd1Rh
cEhpZ2hsaWdodChyZWdpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBoaWdobGlnaHRDb2xvci5yZWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGhpZ2hsaWdodENvbG9yLmdyZWVuKCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBoaWdobGlnaHRDb2xvci5ibHVlKCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWdobGlnaHRDb2xvci5hbHBoYSgpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkSGlkZVRhcEhp
Z2hsaWdodFJpZ2h0QWZ0ZXJTY3JvbGxpbmcpOworfQorCit9Cit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9Ub3VjaEV2ZW50SGFuZGxlci5oIGIv
U291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvVG91Y2hFdmVudEhhbmRsZXIu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmRkOTFmCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvVG91Y2hFdmVu
dEhhbmRsZXIuaApAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAy
MDExIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEw
LTEzMDEgIFVTQQorICovCisKKyNpZm5kZWYgVG91Y2hFdmVudEhhbmRsZXJfaAorI2RlZmluZSBU
b3VjaEV2ZW50SGFuZGxlcl9oCisKKyNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKKyNpbmNsdWRl
ICJGYXRGaW5nZXJzLmgiCisjaW5jbHVkZSAiSW50UG9pbnQuaCIKKworI2luY2x1ZGUgPEJsYWNr
QmVycnlQbGF0Zm9ybVRvdWNoRXZlbnQuaD4KKyNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1X
aW5kb3cuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgSW50UG9pbnQ7CitjbGFzcyBF
bGVtZW50OworfQorCituYW1lc3BhY2UgQmxhY2tCZXJyeSB7CituYW1lc3BhY2UgV2ViS2l0IHsK
KworY2xhc3MgV2ViUGFnZVByaXZhdGU7CisKK2NsYXNzIFRvdWNoRXZlbnRIYW5kbGVyIHsKK3B1
YmxpYzoKKyAgICBUb3VjaEV2ZW50SGFuZGxlcihXZWJQYWdlUHJpdmF0ZSogd2VicGFnZSk7Cisg
ICAgflRvdWNoRXZlbnRIYW5kbGVyKCk7CisKKyAgICBib29sIGhhbmRsZVRvdWNoUG9pbnQoQmxh
Y2tCZXJyeTo6UGxhdGZvcm06OlRvdWNoUG9pbnQmKTsKKyAgICB2b2lkIHRvdWNoRXZlbnRDYW5j
ZWwoKTsKKyAgICB2b2lkIHRvdWNoRXZlbnRDYW5jZWxBbmRDbGVhckZvY3VzZWROb2RlKCk7Cisg
ICAgdm9pZCB0b3VjaEhvbGRFdmVudCgpOworCisgICAgYm9vbCBzaG91bGRTdXBwcmVzc01vdXNl
RG93bk9uVG91Y2hEb3duKCkgY29uc3Q7CisKKyAgICBjb25zdCBGYXRGaW5nZXJzUmVzdWx0JiBs
YXN0RmF0RmluZ2Vyc1Jlc3VsdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdEZhdEZpbmdlcnNSZXN1
bHQ7IH0KKyAgICB2b2lkIHJlc2V0TGFzdEZhdEZpbmdlcnNSZXN1bHQoKSB7IG1fbGFzdEZhdEZp
bmdlcnNSZXN1bHQucmVzZXQoKTsgfQorCitwcml2YXRlOgorICAgIHVuc2lnbmVkIHNwZWxsQ2hl
Y2soQmxhY2tCZXJyeTo6UGxhdGZvcm06OlRvdWNoUG9pbnQmKTsKKyAgICB2b2lkIGhhbmRsZUZh
dEZpbmdlclByZXNzZWQoKTsKKworICAgIHZvaWQgZHJhd1RhcEhpZ2hsaWdodCgpOworCitwcml2
YXRlOgorICAgIFdlYlBhZ2VQcml2YXRlKiBtX3dlYlBhZ2U7CisKKyAgICBib29sIG1fZGlkQ2Fu
Y2VsVG91Y2g7CisgICAgYm9vbCBtX2NvbnZlcnRUb3VjaFRvTW91c2U7CisKKyAgICBXZWJDb3Jl
OjpUb3VjaEV2ZW50TW9kZSBtX2V4aXN0aW5nVG91Y2hNb2RlOworCisgICAgV2ViQ29yZTo6SW50
UG9pbnQgbV9sYXN0U2NyZWVuUG9pbnQ7IC8vIFNjcmVlbiBQb3NpdGlvbgorCisgICAgRmF0Rmlu
Z2Vyc1Jlc3VsdCBtX2xhc3RGYXRGaW5nZXJzUmVzdWx0OworfTsKKworfQorfQorCisjZW5kaWYg
Ly8gVG91Y2hFdmVudEhhbmRsZXJfaAotLSAKMS43LjEKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127395</attachid>
            <date>2012-02-16 09:42:18 -0800</date>
            <delta_ts>2012-02-16 09:48:41 -0800</delta_ts>
            <desc>patch_2/3 v1 - FatFingers</desc>
            <filename>0001-2012-02-16-Antonio-Gomes-agomes-rim.com.patch</filename>
            <type>text/plain</type>
            <size>33821</size>
            <attacher name="Antonio Gomes">tonikitoo</attacher>
            
              <data encoding="base64">RnJvbSBiZjNiYmI1MjczNWJkYzEwNmQ3NWI4YzU5N2VmYWJhODhkYTkxMmZhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbnRvbmlvIEdvbWVzIDxhZ29tZXNAcmltLmNvbT4KRGF0ZTog
VGh1LCAxNiBGZWIgMjAxMiAxMjozOTo1OSAtMDUwMApTdWJqZWN0OiBbUEFUQ0hdIDIwMTItMDIt
MTYgIEFudG9uaW8gR29tZXMgIDxhZ29tZXNAcmltLmNvbT4KCiAgICAgICAgW0JsYWNrQmVycnld
IFVwc3RyZWFtIHRvdWNoIGhhbmRsaW5nIHJlbGF0ZWQgY2xhc3NlcyAocGFydCBJSTogRmF0Rmlu
Z2VycykKICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg1
MDkKCiAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgogICAgICAgIEZhdEZpbmdl
cnMgaXMgdGhlIGNsYXNzIHJlc3BvbnNpYmxlIHRvIHRoZSB3aG9sZSB0b3VjaAogICAgICAgIGFj
Y3VyYWN5IG9mIHRoZSBCbGFja0JlcnJ5IHBvcnQuIEluaXRpYWwgdXBzdHJlYW0uCgogICAgICAg
ICogV2ViS2l0U3VwcG9ydC9GYXRGaW5nZXJzLmNwcDogQWRkZWQuCiAgICAgICAgKFdlYktpdCk6
CiAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6RmF0RmluZ2Vyczo6ZmluZ2VyUmVjdEZvclBv
aW50KToKICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpoYXNNb3VzZVByZXNzTGlzdGVuZXIp
OgogICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkZhdEZpbmdlcnM6OmlzRWxlbWVudENsaWNr
YWJsZSk6CiAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6aXNGaWVsZFdpdGhUZXh0KToKICAg
ICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpkaXN0YW5jZUJldHdlZW5Qb2ludHMpOgogICAgICAg
IChCbGFja0JlcnJ5OjpXZWJLaXQ6OmNvbXBhcmVEaXN0YW5jZUJldHdlZW5Qb2ludHMpOgogICAg
ICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OmlzVmFsaWRGcmFtZU93bmVyKToKICAgICAgICAoQmxh
Y2tCZXJyeTo6V2ViS2l0OjpGYXRGaW5nZXJzOjpGYXRGaW5nZXJzKToKICAgICAgICAoQmxhY2tC
ZXJyeTo6V2ViS2l0OjpGYXRGaW5nZXJzOjp+RmF0RmluZ2Vycyk6CiAgICAgICAgKEJsYWNrQmVy
cnk6OldlYktpdDo6RmF0RmluZ2Vyczo6ZmluZEJlc3RQb2ludCk6CiAgICAgICAgKEJsYWNrQmVy
cnk6OldlYktpdDo6RmF0RmluZ2Vyczo6Y2hlY2tGaW5nZXJJbnRlcnNlY3Rpb24pOgogICAgICAg
IChCbGFja0JlcnJ5OjpXZWJLaXQ6OkZhdEZpbmdlcnM6OmZpbmRJbnRlcnNlY3RpbmdSZWdpb25z
KToKICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpGYXRGaW5nZXJzOjpjaGVja0ZvckNsaWNr
YWJsZUVsZW1lbnQpOgogICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkZhdEZpbmdlcnM6OmNo
ZWNrRm9yVGV4dCk6CiAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6RmF0RmluZ2Vyczo6Z2V0
UGFkZGluZ3MpOgogICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkZhdEZpbmdlcnM6Om5vZGVz
RnJvbVJlY3QpOgogICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkZhdEZpbmdlcnM6OmdldFJl
bGV2YW50SW5mb0Zyb21Qb2ludCk6CiAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6RmF0Rmlu
Z2Vyczo6c2V0U3VjY2Vzc2Z1bEZhdEZpbmdlcnNSZXN1bHQpOgogICAgICAgICogV2ViS2l0U3Vw
cG9ydC9GYXRGaW5nZXJzLmg6IEFkZGVkLgogICAgICAgIChXZWJDb3JlKToKICAgICAgICAoV2Vi
S2l0KToKICAgICAgICAoRmF0RmluZ2Vyc1Jlc3VsdCk6CiAgICAgICAgKEJsYWNrQmVycnk6Oldl
YktpdDo6RmF0RmluZ2Vyc1Jlc3VsdDo6RmF0RmluZ2Vyc1Jlc3VsdCk6CiAgICAgICAgKEJsYWNr
QmVycnk6OldlYktpdDo6RmF0RmluZ2Vyc1Jlc3VsdDo6cmVzZXQpOgogICAgICAgIChCbGFja0Jl
cnJ5OjpXZWJLaXQ6OkZhdEZpbmdlcnNSZXN1bHQ6Om9yaWdpblBvc2l0aW9uKToKICAgICAgICAo
QmxhY2tCZXJyeTo6V2ViS2l0OjpGYXRGaW5nZXJzUmVzdWx0OjphZGp1c3RlZFBvc2l0aW9uKToK
ICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpGYXRGaW5nZXJzUmVzdWx0Ojpwb3NpdGlvbldh
c0FkanVzdGVkKToKICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpGYXRGaW5nZXJzUmVzdWx0
Ojppc1RleHRJbnB1dCk6CiAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6RmF0RmluZ2Vyc1Jl
c3VsdDo6aXNWYWxpZCk6CiAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6RmF0RmluZ2Vyc1Jl
c3VsdDo6dmFsaWROb2RlKToKICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpGYXRGaW5nZXJz
UmVzdWx0Ojpub2RlQXNFbGVtZW50SWZBcHBsaWNhYmxlKToKICAgICAgICAoRmF0RmluZ2Vycyk6
Ci0tLQogU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5nZUxvZyAgICAgICAgICAgICAgICAg
fCAgIDQyICsrCiAuLi4vV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9GYXRGaW5nZXJz
LmNwcCB8ICA1MDcgKysrKysrKysrKysrKysrKysrKysKIC4uLi9XZWJLaXQvYmxhY2tiZXJyeS9X
ZWJLaXRTdXBwb3J0L0ZhdEZpbmdlcnMuaCAgIHwgIDE2MSArKysrKysrCiAzIGZpbGVzIGNoYW5n
ZWQsIDcxMCBpbnNlcnRpb25zKCspLCAwIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0
IFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0ZhdEZpbmdlcnMuY3BwCiBj
cmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQv
RmF0RmluZ2Vycy5oCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9DaGFuZ2VMb2cKaW5kZXggMzU0ZWMwNi4u
NDcxYTI5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQ2hhbmdlTG9nCkBAIC01LDYgKzUsNDggQEAK
IAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KIAorICAgICAgICAqIFdlYktp
dFN1cHBvcnQvRmF0RmluZ2Vycy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAg
ICAgKEJsYWNrQmVycnk6OldlYktpdDo6RmF0RmluZ2Vyczo6ZmluZ2VyUmVjdEZvclBvaW50KToK
KyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6aGFzTW91c2VQcmVzc0xpc3RlbmVyKToKKyAg
ICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6RmF0RmluZ2Vyczo6aXNFbGVtZW50Q2xpY2thYmxl
KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6aXNGaWVsZFdpdGhUZXh0KToKKyAgICAg
ICAgKEJsYWNrQmVycnk6OldlYktpdDo6ZGlzdGFuY2VCZXR3ZWVuUG9pbnRzKToKKyAgICAgICAg
KEJsYWNrQmVycnk6OldlYktpdDo6Y29tcGFyZURpc3RhbmNlQmV0d2VlblBvaW50cyk6CisgICAg
ICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OmlzVmFsaWRGcmFtZU93bmVyKToKKyAgICAgICAgKEJs
YWNrQmVycnk6OldlYktpdDo6RmF0RmluZ2Vyczo6RmF0RmluZ2Vycyk6CisgICAgICAgIChCbGFj
a0JlcnJ5OjpXZWJLaXQ6OkZhdEZpbmdlcnM6On5GYXRGaW5nZXJzKToKKyAgICAgICAgKEJsYWNr
QmVycnk6OldlYktpdDo6RmF0RmluZ2Vyczo6ZmluZEJlc3RQb2ludCk6CisgICAgICAgIChCbGFj
a0JlcnJ5OjpXZWJLaXQ6OkZhdEZpbmdlcnM6OmNoZWNrRmluZ2VySW50ZXJzZWN0aW9uKToKKyAg
ICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6RmF0RmluZ2Vyczo6ZmluZEludGVyc2VjdGluZ1Jl
Z2lvbnMpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpGYXRGaW5nZXJzOjpjaGVja0Zv
ckNsaWNrYWJsZUVsZW1lbnQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpGYXRGaW5n
ZXJzOjpjaGVja0ZvclRleHQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpGYXRGaW5n
ZXJzOjpnZXRQYWRkaW5ncyk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkZhdEZpbmdl
cnM6Om5vZGVzRnJvbVJlY3QpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpGYXRGaW5n
ZXJzOjpnZXRSZWxldmFudEluZm9Gcm9tUG9pbnQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2Vi
S2l0OjpGYXRGaW5nZXJzOjpzZXRTdWNjZXNzZnVsRmF0RmluZ2Vyc1Jlc3VsdCk6CisgICAgICAg
ICogV2ViS2l0U3VwcG9ydC9GYXRGaW5nZXJzLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoRmF0RmluZ2Vyc1Jlc3VsdCk6CisgICAgICAg
IChCbGFja0JlcnJ5OjpXZWJLaXQ6OkZhdEZpbmdlcnNSZXN1bHQ6OkZhdEZpbmdlcnNSZXN1bHQp
OgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpGYXRGaW5nZXJzUmVzdWx0OjpyZXNldCk6
CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkZhdEZpbmdlcnNSZXN1bHQ6Om9yaWdpblBv
c2l0aW9uKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6RmF0RmluZ2Vyc1Jlc3VsdDo6
YWRqdXN0ZWRQb3NpdGlvbik6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkZhdEZpbmdl
cnNSZXN1bHQ6OnBvc2l0aW9uV2FzQWRqdXN0ZWQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2Vi
S2l0OjpGYXRGaW5nZXJzUmVzdWx0Ojppc1RleHRJbnB1dCk6CisgICAgICAgIChCbGFja0JlcnJ5
OjpXZWJLaXQ6OkZhdEZpbmdlcnNSZXN1bHQ6OmlzVmFsaWQpOgorICAgICAgICAoQmxhY2tCZXJy
eTo6V2ViS2l0OjpGYXRGaW5nZXJzUmVzdWx0Ojp2YWxpZE5vZGUpOgorICAgICAgICAoQmxhY2tC
ZXJyeTo6V2ViS2l0OjpGYXRGaW5nZXJzUmVzdWx0Ojpub2RlQXNFbGVtZW50SWZBcHBsaWNhYmxl
KToKKyAgICAgICAgKEZhdEZpbmdlcnMpOgorCisyMDEyLTAyLTE2ICBBbnRvbmlvIEdvbWVzICA8
YWdvbWVzQHJpbS5jb20+CisKKyAgICAgICAgW0JsYWNrQmVycnldIFVwc3RyZWFtIHRvdWNoIGhh
bmRsaW5nIHJlbGF0ZWQgY2xhc3NlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9Nzg1MDkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKwogICAgICAgICAqIGJsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9Ub3VjaEV2ZW50SGFuZGxl
ci5jcHA6IEFkZGVkLgogICAgICAgICAoV2ViS2l0KToKICAgICAgICAgKEJsYWNrQmVycnk6Oldl
YktpdDo6aGFzTW91c2VNb3ZlTGlzdGVuZXIpOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9i
bGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvRmF0RmluZ2Vycy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Js
YWNrYmVycnkvV2ViS2l0U3VwcG9ydC9GYXRGaW5nZXJzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4wY2M3MGQwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvRmF0RmluZ2Vycy5jcHAKQEAgLTAsMCArMSw1MDcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgUmVzZWFyY2ggSW4gTW90aW9uIExp
bWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0
aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZhdEZpbmdlcnMuaCIKKworI2luY2x1ZGUgIkJsYWNr
QmVycnlQbGF0Zm9ybUxvZy5oIgorI2luY2x1ZGUgIkJsYWNrQmVycnlQbGF0Zm9ybVNjcmVlbi5o
IgorI2luY2x1ZGUgIkJsYWNrQmVycnlQbGF0Zm9ybVNldHRpbmdzLmgiCisjaW5jbHVkZSAiQ1NT
Q29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiQ1NTUGFyc2VyLmgiCisjaW5j
bHVkZSAiRE9NU3VwcG9ydC5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRWxl
bWVudC5oIgorI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2Rl
LmgiCisjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRl
ICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJIVE1MRnJhbWVPd25lckVsZW1lbnQuaCIKKyNpbmNs
dWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVk
ZSAiSFRNTFRleHRBcmVhRWxlbWVudC5oIgorI2luY2x1ZGUgIlJhbmdlLmgiCisjaW5jbHVkZSAi
UmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKKyNpbmNsdWRlICJSZW5k
ZXJWaWV3LmgiCisjaW5jbHVkZSAiVGV4dC5oIgorI2luY2x1ZGUgIlRleHRCcmVha0l0ZXJhdG9y
LmgiCisjaW5jbHVkZSAiV2ViUGFnZV9wLmgiCisKKyNpZiBERUJVR19GQVRfRklOR0VSUworI2lu
Y2x1ZGUgIkJhY2tpbmdTdG9yZS5oIgorI2VuZGlmCisKK3VzaW5nIEJsYWNrQmVycnk6OlBsYXRm
b3JtOjpMb2dMZXZlbEluZm87Cit1c2luZyBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6bG9nOwordXNp
bmcgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkludFJlY3RSZWdpb247Cit1c2luZyBXVEY6OlJlZlB0
cjsKK3VzaW5nIFdURjo6U3RyaW5nOwordXNpbmcgV1RGOjpWZWN0b3I7CisKK3VzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOworCisvLyBMZXRzIG1ha2UgdGhlIHRvcCBwYWRkaW5nIGJpZ2dlciB0aGFu
IG90aGVyIGRpcmVjdGlvbnMsIHNpbmNlIGl0IGdldHMgdXMgbW9yZQorLy8gYWNjdXJhdGUgY2xp
Y2tpbmcgcmVzdWx0cy4KKworbmFtZXNwYWNlIEJsYWNrQmVycnkgeworbmFtZXNwYWNlIFdlYktp
dCB7CisKKyNpZiBERUJVR19GQVRfRklOR0VSUworSW50UmVjdCBGYXRGaW5nZXJzOjptX2RlYnVn
RmF0RmluZ2VyUmVjdDsKK0ludFBvaW50IEZhdEZpbmdlcnM6Om1fZGVidWdGYXRGaW5nZXJDbGlj
a1Bvc2l0aW9uOworSW50UG9pbnQgRmF0RmluZ2Vyczo6bV9kZWJ1Z0ZhdEZpbmdlckFkanVzdGVk
UG9zaXRpb247CisjZW5kaWYKKworSW50UmVjdCBGYXRGaW5nZXJzOjpmaW5nZXJSZWN0Rm9yUG9p
bnQoY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAoreworICAgIHVuc2lnbmVkIHRvcFBhZGRp
bmcsIHJpZ2h0UGFkZGluZywgYm90dG9tUGFkZGluZywgbGVmdFBhZGRpbmc7CisgICAgZ2V0UGFk
ZGluZ3ModG9wUGFkZGluZywgcmlnaHRQYWRkaW5nLCBib3R0b21QYWRkaW5nLCBsZWZ0UGFkZGlu
Zyk7CisKKyAgICByZXR1cm4gSGl0VGVzdFJlc3VsdDo6cmVjdEZvclBvaW50KHBvaW50LCB0b3BQ
YWRkaW5nLCByaWdodFBhZGRpbmcsIGJvdHRvbVBhZGRpbmcsIGxlZnRQYWRkaW5nKTsKK30KKwor
c3RhdGljIGJvb2wgaGFzTW91c2VQcmVzc0xpc3RlbmVyKEVsZW1lbnQqIGVsZW1lbnQpCit7Cisg
ICAgQVNTRVJUKGVsZW1lbnQpOworICAgIHJldHVybiBlbGVtZW50LT5oYXNFdmVudExpc3RlbmVy
cyhldmVudE5hbWVzKCkuY2xpY2tFdmVudCkKKyAgICAgICAgfHwgZWxlbWVudC0+aGFzRXZlbnRM
aXN0ZW5lcnMoZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50KQorICAgICAgICB8fCBlbGVtZW50
LT5oYXNFdmVudExpc3RlbmVycyhldmVudE5hbWVzKCkubW91c2V1cEV2ZW50KTsKK30KKworYm9v
bCBGYXRGaW5nZXJzOjppc0VsZW1lbnRDbGlja2FibGUoRWxlbWVudCogZWxlbWVudCkgY29uc3QK
K3sKKyAgICBBU1NFUlQoZWxlbWVudCk7CisgICAgQVNTRVJUKG1fbWF0Y2hpbmdBcHByb2FjaCAh
PSBEb25lKTsKKyAgICBBU1NFUlQobV90YXJnZXRUeXBlID09IENsaWNrYWJsZUVsZW1lbnQpOwor
CisgICAgc3dpdGNoIChtX21hdGNoaW5nQXBwcm9hY2gpIHsKKyAgICBjYXNlIENsaWNrYWJsZUJ5
RGVmYXVsdDogeworICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAgcmV0dXJu
IGVsZW1lbnQtPndlYmtpdE1hdGNoZXNTZWxlY3RvcigiYVtocmVmXSwqOmxpbmssKjp2aXNpdGVk
LCpbcm9sZT1idXR0b25dLGJ1dHRvbixpbnB1dCxzZWxlY3QsbGFiZWxbZm9yXSxhcmVhW2hyZWZd
LHRleHRhcmVhLGVtYmVkLG9iamVjdCIsIGVjKQorICAgICAgICAgICAgfHwgZWxlbWVudC0+aXND
b250ZW50RWRpdGFibGUoKTsKKyAgICB9CisgICAgY2FzZSBNYWRlQ2xpY2thYmxlQnlUaGVXZWJw
YWdlOgorICAgICAgICAvLyBGSVhNRTogV2UgZmFsbCBiYWNrIHRvIGNoZWNraW5nIGZvciB0aGUg
cHJlc2VuY2Ugb2YgQ1NTIHN0eWxlICJjdXJzb3I6IHBvaW50ZXIiIHRvIGluZGljYXRlIHdoZXRo
ZXIgdGhlIGVsZW1lbnQgQQorICAgICAgICAvLyBjYW4gYmUgY2xpY2tlZCB3aGVuIEEgbmVpdGhl
ciByZWdpc3RlcnMgbW91c2UgZXZlbnRzIGhhbmRsZXJzIG5vciBpcyBhIGh5cGVybGluayBvciBm
b3JtIGNvbnRyb2wuIFRoaXMgd29ya2Fyb3VuZAorICAgICAgICAvLyBlbnN1cmVzIHRoYXQgd2Ug
ZG9uJ3QgYnJlYWsgdmFyaW91cyBHb29nbGUgd2ViIGFwcHMsIGluY2x1ZGluZyA8aHR0cDovL21h
cHMuZ29vZ2xlLmNvbT4uIElkZWFsbHksIHdlIHNob3VsZCB3YWxrCisgICAgICAgIC8vIHVwIHRo
ZSBET00gaGllcmFyY2h5IHRvIGRldGVybWluZSB0aGUgZmlyc3QgcGFyZW50IGVsZW1lbnQgdGhh
dCBhY2NlcHRzIG1vdXNlIGV2ZW50cy4KKyAgICAgICAgLy8gQ29uc2lkZXIgdGhlIEhUTUwgc25p
cHBldDogPGRpdiBpZD0iQSIgb25jbGljaz0iLi4uIj48ZGl2IGlkPSJCIj5FeGFtcGxlPC9kaXY+
PC9kaXY+CisgICAgICAgIC8vIE5vdGljZSwgQiBpcyBub3QgYSBoeXBlcmxpbmssIG9yIGZvcm0g
Y29udHJvbCwgYW5kIGRvZXMgbm90IHJlZ2lzdGVyIGFueSBtb3VzZSBldmVudCBoYW5kbGVyLiBU
aGVuIEIgY2Fubm90CisgICAgICAgIC8vIGJlIGNsaWNrZWQuIFN1cHBvc2UgQiBzcGVjaWZpZWQg
dGhlIENTUyBwcm9wZXJ0eSAiY3Vyc29yOiBwb2ludGVyIi4gVGhlbiwgQiB3aWxsIGJlIGNvbnNp
ZGVyZWQgYXMgY2xpY2thYmxlLgorICAgICAgICByZXR1cm4gaGFzTW91c2VQcmVzc0xpc3RlbmVy
KGVsZW1lbnQpCisgICAgICAgICAgICB8fCBjb21wdXRlZFN0eWxlKGVsZW1lbnQpLT5nZXRQcm9w
ZXJ0eVZhbHVlKGNzc1Byb3BlcnR5SUQoImN1cnNvciIpKSA9PSAicG9pbnRlciI7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgcmV0dXJu
IGZhbHNlOworfQorCisvLyBGSVhNRTogSGFuZGxlIGNvbnRlbnQgZWRpdGFibGUgbm9kZXMgaGVy
ZSB0b28uCitzdGF0aWMgaW5saW5lIGJvb2wgaXNGaWVsZFdpdGhUZXh0KE5vZGUqIG5vZGUpCit7
CisgICAgQVNTRVJUKG5vZGUpOworICAgIGlmICghbm9kZSB8fCAhbm9kZS0+aXNFbGVtZW50Tm9k
ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBFbGVtZW50KiBlbGVtZW50ID0gdG9F
bGVtZW50KG5vZGUpOworCisgICAgcmV0dXJuICFET01TdXBwb3J0OjppbnB1dEVsZW1lbnRUZXh0
KGVsZW1lbnQpLmlzRW1wdHkoKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZGlzdGFuY2VCZXR3
ZWVuUG9pbnRzKGNvbnN0IEludFBvaW50JiBwMSwgY29uc3QgSW50UG9pbnQmIHAyKQoreworICAg
IGludCBkeCA9IHAxLngoKSAtIHAyLngoKTsKKyAgICBpbnQgZHkgPSBwMS55KCkgLSBwMi55KCk7
CisgICAgcmV0dXJuIHNxcnQoKGRvdWJsZSkoKGR4ICogZHgpICsgKGR5ICogZHkpKSk7Cit9CisK
K3N0YXRpYyBib29sIGNvbXBhcmVEaXN0YW5jZUJldHdlZW5Qb2ludHMoY29uc3QgQmxhY2tCZXJy
eTo6UGxhdGZvcm06OkludFBvaW50JiBwLCBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6SW50
UmVjdFJlZ2lvbiYgcjEsIGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpJbnRSZWN0UmVnaW9u
JiByMikKK3sKKyAgICByZXR1cm4gZGlzdGFuY2VCZXR3ZWVuUG9pbnRzKHAsIHIxLmV4dGVudHMo
KS5jZW50ZXIoKSkgPiBkaXN0YW5jZUJldHdlZW5Qb2ludHMocCwgcjIuZXh0ZW50cygpLmNlbnRl
cigpKTsKK30KKworc3RhdGljIGJvb2wgaXNWYWxpZEZyYW1lT3duZXIoV2ViQ29yZTo6RWxlbWVu
dCogZWxlbWVudCkKK3sKKyAgICBBU1NFUlQoZWxlbWVudCk7CisgICAgcmV0dXJuIGVsZW1lbnQt
PmlzRnJhbWVPd25lckVsZW1lbnQoKSAmJiBzdGF0aWNfY2FzdDxIVE1MRnJhbWVPd25lckVsZW1l
bnQqPihlbGVtZW50KS0+Y29udGVudEZyYW1lKCk7Cit9CisKKy8vIE5PVEU6ICdjb250ZW50UG9z
JyBpcyBpbiBtYWluIGZyYW1lIGNvbnRlbnRzIGNvb3JkaW5hdGVzLgorRmF0RmluZ2Vyczo6RmF0
RmluZ2VycyhXZWJQYWdlUHJpdmF0ZSogd2ViUGFnZSwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQm
IGNvbnRlbnRQb3MsIFRhcmdldFR5cGUgdGFyZ2V0VHlwZSkKKyAgICA6IG1fd2ViUGFnZSh3ZWJQ
YWdlKQorICAgICwgbV9jb250ZW50UG9zKGNvbnRlbnRQb3MpCisgICAgLCBtX3RhcmdldFR5cGUo
dGFyZ2V0VHlwZSkKKyAgICAsIG1fbWF0Y2hpbmdBcHByb2FjaChEb25lKQoreworICAgIEFTU0VS
VCh3ZWJQYWdlKTsKKworI2lmIERFQlVHX0ZBVF9GSU5HRVJTCisgICAgbV9kZWJ1Z0ZhdEZpbmdl
clJlY3QgPSBJbnRSZWN0KDAsIDAsIDAsIDApOworICAgIG1fZGVidWdGYXRGaW5nZXJDbGlja1Bv
c2l0aW9uID0gbV93ZWJQYWdlLT5tYXBUb1RyYW5zZm9ybWVkKG1fd2ViUGFnZS0+bWFwRnJvbUNv
bnRlbnRzVG9WaWV3cG9ydChjb250ZW50UG9zKSk7CisgICAgbV9kZWJ1Z0ZhdEZpbmdlckFkanVz
dGVkUG9zaXRpb24gPSBtX3dlYlBhZ2UtPm1hcFRvVHJhbnNmb3JtZWQobV93ZWJQYWdlLT5tYXBG
cm9tQ29udGVudHNUb1ZpZXdwb3J0KGNvbnRlbnRQb3MpKTsKKyNlbmRpZgorfQorCitGYXRGaW5n
ZXJzOjp+RmF0RmluZ2VycygpCit7Cit9CisKK2NvbnN0IEZhdEZpbmdlcnNSZXN1bHQgRmF0Rmlu
Z2Vyczo6ZmluZEJlc3RQb2ludCgpCit7CisgICAgQVNTRVJUKG1fd2ViUGFnZSk7CisKKyAgICBp
ZiAoIW1fd2ViUGFnZS0+bV9tYWluRnJhbWUpCisgICAgICAgIHJldHVybiBtX2NvbnRlbnRQb3M7
CisgICAgRmF0RmluZ2Vyc1Jlc3VsdCByZXN1bHQobV9jb250ZW50UG9zKTsKKyAgICBtX21hdGNo
aW5nQXBwcm9hY2ggPSBDbGlja2FibGVCeURlZmF1bHQ7CisKKyAgICAvLyBMZXRzIHNldCBub2Rl
VW5kZXJGYXRGaW5nZXIgdG8gdGhlIHJlc3VsdCBvZiBhIHBvaW50IGJhc2VkIGhpdCB0ZXN0IGhl
cmUuIElmIHNvbWV0aGluZworICAgIC8vIHRhcmdhYmxlIGlzIGFjdHVhbGx5IGZvdW5kIGJ5IDo6
ZmluZEludGVyc2VjdGluZ1JlZ2lvbnMsIHRoZW4gd2UgbWlnaHQgcmVwbGFjZSB3aGF0IHdlIGp1
c3Qgc2V0IGJlbG93IGxhdGVyIG9uLgorICAgIEVsZW1lbnQqIGVsZW1lbnRVbmRlclBvaW50Owor
ICAgIEVsZW1lbnQqIGNsaWNrYWJsZUVsZW1lbnRVbmRlclBvaW50OworICAgIGdldFJlbGV2YW50
SW5mb0Zyb21Qb2ludChtX3dlYlBhZ2UtPm1fbWFpbkZyYW1lLT5kb2N1bWVudCgpLCBtX2NvbnRl
bnRQb3MsIGVsZW1lbnRVbmRlclBvaW50LCBjbGlja2FibGVFbGVtZW50VW5kZXJQb2ludCk7CisK
KyAgICBpZiAoZWxlbWVudFVuZGVyUG9pbnQpIHsKKyAgICAgICAgcmVzdWx0Lm1fbm9kZVVuZGVy
RmF0RmluZ2VyID0gZWxlbWVudFVuZGVyUG9pbnQ7CisKKyAgICAgICAgLy8gSWYgd2UgYXJlIGxv
b2tpbmcgZm9yIGEgQ2xpY2thYmxlIEVsZW1lbnQgYW5kIHdlIGZvdW5kIG9uZSwgd2UgY2FuIHF1
aXRlIGVhcmx5LgorICAgICAgICBpZiAobV90YXJnZXRUeXBlID09IENsaWNrYWJsZUVsZW1lbnQp
IHsKKyAgICAgICAgICAgIGlmIChjbGlja2FibGVFbGVtZW50VW5kZXJQb2ludCkgeworICAgICAg
ICAgICAgICAgIHNldFN1Y2Nlc3NmdWxGYXRGaW5nZXJzUmVzdWx0KHJlc3VsdCwgY2xpY2thYmxl
RWxlbWVudFVuZGVyUG9pbnQsIG1fY29udGVudFBvcyAvKmFkanVzdGVkUG9zaXRpb24qLyk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGlzRWxlbWVudENsaWNrYWJsZShlbGVtZW50VW5kZXJQb2ludCkpIHsKKyAgICAgICAg
ICAgICAgICBzZXRTdWNjZXNzZnVsRmF0RmluZ2Vyc1Jlc3VsdChyZXN1bHQsIGVsZW1lbnRVbmRl
clBvaW50LCBtX2NvbnRlbnRQb3MgLyphZGp1c3RlZFBvc2l0aW9uKi8pOworICAgICAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyNp
ZiBERUJVR19GQVRfRklOR0VSUworICAgIC8vIGZvcmNlIGJsaXQgdG8gbWFrZSB0aGUgZmF0IGZp
bmdlcnMgcmVjdHMgc2hvdyB1cAorICAgIGlmICghbV9kZWJ1Z0ZhdEZpbmdlclJlY3QuaXNFbXB0
eSgpKQorICAgICAgICBtX3dlYlBhZ2UtPm1fYmFja2luZ1N0b3JlLT5yZXBhaW50KDAsIDAsIG1f
d2ViUGFnZS0+dHJhbnNmb3JtZWRWaWV3cG9ydFNpemUoKS53aWR0aCgpLCBtX3dlYlBhZ2UtPnRy
YW5zZm9ybWVkVmlld3BvcnRTaXplKCkuaGVpZ2h0KCksIHRydWUsIHRydWUpOworI2VuZGlmCisK
KyAgICBWZWN0b3I8SW50ZXJzZWN0aW5nUmVnaW9uPiBpbnRlcnNlY3RpbmdSZWdpb25zOworICAg
IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uIHJlbWFpbmluZ0ZpbmdlclJlZ2lv
biA9IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uKGZpbmdlclJlY3RGb3JQb2lu
dChtX2NvbnRlbnRQb3MpKTsKKworICAgIGJvb2wgZm91bmRPbmUgPSBmaW5kSW50ZXJzZWN0aW5n
UmVnaW9ucyhtX3dlYlBhZ2UtPm1fbWFpbkZyYW1lLT5kb2N1bWVudCgpLCBpbnRlcnNlY3RpbmdS
ZWdpb25zLCByZW1haW5pbmdGaW5nZXJSZWdpb24pOworICAgIGlmICghZm91bmRPbmUpIHsKKyAg
ICAgICAgbV9tYXRjaGluZ0FwcHJvYWNoID0gTWFkZUNsaWNrYWJsZUJ5VGhlV2VicGFnZTsKKyAg
ICAgICAgcmVtYWluaW5nRmluZ2VyUmVnaW9uID0gQmxhY2tCZXJyeTo6UGxhdGZvcm06OkludFJl
Y3RSZWdpb24oZmluZ2VyUmVjdEZvclBvaW50KG1fY29udGVudFBvcykpOworICAgICAgICBmb3Vu
ZE9uZSA9IGZpbmRJbnRlcnNlY3RpbmdSZWdpb25zKG1fd2ViUGFnZS0+bV9tYWluRnJhbWUtPmRv
Y3VtZW50KCksIGludGVyc2VjdGluZ1JlZ2lvbnMsIHJlbWFpbmluZ0ZpbmdlclJlZ2lvbik7Cisg
ICAgfQorCisgICAgbV9tYXRjaGluZ0FwcHJvYWNoID0gRG9uZTsKKworICAgIGlmICghZm91bmRP
bmUpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICBOb2RlKiBiZXN0Tm9kZSA9IDA7Cisg
ICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkludFJlY3RSZWdpb24gbGFyZ2VzdEludGVyc2VjdGlv
blJlZ2lvbjsKKyAgICBJbnRQb2ludCBiZXN0UG9pbnQ7CisgICAgaW50IGxhcmdlc3RJbnRlcnNl
Y3Rpb25SZWdpb25BcmVhID0gMDsKKworICAgIFZlY3RvcjxJbnRlcnNlY3RpbmdSZWdpb24+Ojpj
b25zdF9pdGVyYXRvciBlbmRJdCA9IGludGVyc2VjdGluZ1JlZ2lvbnMuZW5kKCk7CisgICAgZm9y
IChWZWN0b3I8SW50ZXJzZWN0aW5nUmVnaW9uPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBpbnRlcnNl
Y3RpbmdSZWdpb25zLmJlZ2luKCk7IGl0ICE9IGVuZEl0OyArK2l0KSB7CisgICAgICAgIE5vZGUq
IGN1cnJlbnROb2RlID0gaXQtPmZpcnN0OworICAgICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6
SW50UmVjdFJlZ2lvbiBjdXJyZW50SW50ZXJzZWN0aW9uUmVnaW9uID0gaXQtPnNlY29uZDsKKwor
ICAgICAgICBpbnQgY3VycmVudEludGVyc2VjdGlvblJlZ2lvbkFyZWEgPSBjdXJyZW50SW50ZXJz
ZWN0aW9uUmVnaW9uLmFyZWEoKTsKKyAgICAgICAgaWYgKGN1cnJlbnRJbnRlcnNlY3Rpb25SZWdp
b25BcmVhID4gbGFyZ2VzdEludGVyc2VjdGlvblJlZ2lvbkFyZWEKKyAgICAgICAgICAgIHx8IChj
dXJyZW50SW50ZXJzZWN0aW9uUmVnaW9uQXJlYSA9PSBsYXJnZXN0SW50ZXJzZWN0aW9uUmVnaW9u
QXJlYQorICAgICAgICAgICAgJiYgY29tcGFyZURpc3RhbmNlQmV0d2VlblBvaW50cyhtX2NvbnRl
bnRQb3MsIGN1cnJlbnRJbnRlcnNlY3Rpb25SZWdpb24sIGxhcmdlc3RJbnRlcnNlY3Rpb25SZWdp
b24pKSkgeworICAgICAgICAgICAgYmVzdE5vZGUgPSBjdXJyZW50Tm9kZTsKKyAgICAgICAgICAg
IGxhcmdlc3RJbnRlcnNlY3Rpb25SZWdpb24gPSBjdXJyZW50SW50ZXJzZWN0aW9uUmVnaW9uOwor
ICAgICAgICAgICAgbGFyZ2VzdEludGVyc2VjdGlvblJlZ2lvbkFyZWEgPSBjdXJyZW50SW50ZXJz
ZWN0aW9uUmVnaW9uQXJlYTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghYmVzdE5vZGUg
fHwgbGFyZ2VzdEludGVyc2VjdGlvblJlZ2lvbi5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisKKyNpZiBERUJVR19GQVRfRklOR0VSUworICAgIG1fZGVidWdGYXRGaW5nZXJBZGp1
c3RlZFBvc2l0aW9uID0gbV93ZWJQYWdlLT5tYXBUb1RyYW5zZm9ybWVkKG1fd2ViUGFnZS0+bWFw
RnJvbUNvbnRlbnRzVG9WaWV3cG9ydChsYXJnZXN0SW50ZXJzZWN0aW9uUmVnaW9uLnJlY3RzKClb
MF0uY2VudGVyKCkpKTsKKyNlbmRpZgorCisgICAgc2V0U3VjY2Vzc2Z1bEZhdEZpbmdlcnNSZXN1
bHQocmVzdWx0LCBiZXN0Tm9kZSwgbGFyZ2VzdEludGVyc2VjdGlvblJlZ2lvbi5yZWN0cygpWzBd
LmNlbnRlcigpIC8qYWRqdXN0ZWRQb3NpdGlvbiovKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKKy8vICdyZWdpb24nIGlzIGluIGNvbnRlbnRzIGNvb3JkaW5hdGVzIHJlbGF0aXZlIHRvIHRo
ZSBmcmFtZSBjb250YWluaW5nICdub2RlJworLy8gJ3JlbWFpbmluZ0ZpbmdlclJlZ2lvbicgYW5k
ICdpbnRlcnNlY3RpbmdSZWdpb25zJyB3aWxsIGFsd2F5cyBiZSBpbiBtYWluIGZyYW1lIGNvbnRl
bnRzCisvLyBjb29yZGluYXRlcy4KKy8vIFRodXMsIGJlZm9yZSBjb21wYXJpbmcsIHdlIG5lZWQg
dG8gbWFwIHRoZSBmb3JtZXIgdG8gbWFpbiBmcmFtZSBjb250ZW50cyBjb29yZGluYXRlcy4KK2Jv
b2wgRmF0RmluZ2Vyczo6Y2hlY2tGaW5nZXJJbnRlcnNlY3Rpb24oY29uc3QgQmxhY2tCZXJyeTo6
UGxhdGZvcm06OkludFJlY3RSZWdpb24mIHJlZ2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkludFJlY3RSZWdp
b24mIHJlbWFpbmluZ0ZpbmdlclJlZ2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgTm9kZSogbm9kZSwgVmVjdG9yPEludGVyc2VjdGluZ1JlZ2lvbj4mIGludGVy
c2VjdGluZ1JlZ2lvbnMpCit7CisgICAgQVNTRVJUKG5vZGUpOworCisgICAgQmxhY2tCZXJyeTo6
UGxhdGZvcm06OkludFJlY3RSZWdpb24gcmVnaW9uQ29weShyZWdpb24pOworICAgIFdlYkNvcmU6
OkludFBvaW50IGZyYW1lUG9zKG1fd2ViUGFnZS0+ZnJhbWVPZmZzZXQobm9kZS0+ZG9jdW1lbnQo
KS0+ZnJhbWUoKSkpOworICAgIHJlZ2lvbkNvcHkubW92ZShmcmFtZVBvcy54KCksIGZyYW1lUG9z
LnkoKSk7CisKKyAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbiBpbnRlcnNl
Y3Rpb24gPSBpbnRlcnNlY3RSZWdpb25zKHJlZ2lvbkNvcHksIHJlbWFpbmluZ0ZpbmdlclJlZ2lv
bik7CisgICAgaWYgKGludGVyc2VjdGlvbi5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworI2lmIERFQlVHX0ZBVF9GSU5HRVJTCisgICAgU3RyaW5nIG5vZGVOYW1lOworICAgIGlm
IChub2RlLT5pc1RleHROb2RlKCkpCisgICAgICAgIG5vZGVOYW1lID0gInRleHQgbm9kZSI7Cisg
ICAgZWxzZSBpZiAobm9kZS0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICBub2RlTmFtZSA9IFN0
cmluZzo6Zm9ybWF0KCIlcyBub2RlIiwgdG9FbGVtZW50KG5vZGUpLT50YWdOYW1lKCkubGF0aW4x
KCkuZGF0YSgpKTsKKyAgICBlbHNlCisgICAgICAgIG5vZGVOYW1lID0gInVua25vd24gbm9kZSI7
CisgICAgbG9nKExvZ0xldmVsSW5mbywgIiVzIGhhcyByZWdpb24gJXMsIGludGVyc2VjdGluZyBh
dCAlcyAoYXJlYSAlZCkiLCBub2RlTmFtZS5sYXRpbjEoKS5kYXRhKCksCisgICAgICAgIHJlZ2lv
bkNvcHkudG9TdHJpbmcoKS5jX3N0cigpLCBpbnRlcnNlY3Rpb24udG9TdHJpbmcoKS5jX3N0cigp
LCBpbnRlcnNlY3Rpb24uYXJlYSgpKTsKKyNlbmRpZgorCisgICAgaW50ZXJzZWN0aW5nUmVnaW9u
cy5hcHBlbmQoc3RkOjptYWtlX3BhaXIobm9kZSwgaW50ZXJzZWN0aW9uKSk7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKKworLy8gaW50ZXJzZWN0aW5nUmVnaW9ucyBhbmQgcmVtYWluaW5nRmluZ2Vy
UmVnaW9uIGFyZSBhbGwgaW4gbWFpbiBmcmFtZSBjb250ZW50cyBjb29yZGluYXRlcywKKy8vIGV2
ZW4gb24gcmVjdXJzaXZlIGNhbGxzIG9mIDo6ZmluZEludGVyc2VjdGluZ1JlZ2lvbnMuCitib29s
IEZhdEZpbmdlcnM6OmZpbmRJbnRlcnNlY3RpbmdSZWdpb25zKERvY3VtZW50KiBkb2N1bWVudCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPEludGVyc2Vj
dGluZ1JlZ2lvbj4mIGludGVyc2VjdGluZ1JlZ2lvbnMsIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpJ
bnRSZWN0UmVnaW9uJiByZW1haW5pbmdGaW5nZXJSZWdpb24pCit7CisgICAgaWYgKCFkb2N1bWVu
dCB8fCAhZG9jdW1lbnQtPmZyYW1lKCktPnZpZXcoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgLy8gVGhlIGxheW91dCBuZWVkcyB0byBiZSB1cC10by1kYXRlIHRvIGRldGVybWluZSBp
ZiBhIG5vZGUgaXMgZm9jdXNhYmxlLgorICAgIGRvY3VtZW50LT51cGRhdGVMYXlvdXRJZ25vcmVQ
ZW5kaW5nU3R5bGVzaGVldHMoKTsKKworICAgIC8vIENyZWF0ZSBmaW5nZXJSZWN0LgorICAgIElu
dFBvaW50IGZyYW1lQ29udGVudFBvcyhkb2N1bWVudC0+ZnJhbWUoKS0+dmlldygpLT53aW5kb3dU
b0NvbnRlbnRzKG1fd2ViUGFnZS0+bV9tYWluRnJhbWUtPnZpZXcoKS0+Y29udGVudHNUb1dpbmRv
dyhtX2NvbnRlbnRQb3MpKSk7CisKKyNpZiBERUJVR19GQVRfRklOR0VSUworICAgIEludFJlY3Qg
ZmluZ2VyUmVjdChmaW5nZXJSZWN0Rm9yUG9pbnQoZnJhbWVDb250ZW50UG9zKSk7CisgICAgSW50
UmVjdCBzY3JlZW5GaW5nZXJSZWN0ID0gbV93ZWJQYWdlLT5tYXBUb1RyYW5zZm9ybWVkKGZpbmdl
clJlY3QpOworICAgIGxvZyhMb2dMZXZlbEluZm8sICJmYXQgZmluZ2VyIHJlY3Qgbm93ICVzIiwg
c2NyZWVuRmluZ2VyUmVjdC50b1N0cmluZygpLmxhdGluMSgpLmRhdGEoKSk7CisKKyAgICAvLyBv
bmx5IHJlY29yZCB0aGUgZmlyc3QgZmluZ2VyIHJlY3QKKyAgICBpZiAoZG9jdW1lbnQgPT0gbV93
ZWJQYWdlLT5tX21haW5GcmFtZS0+ZG9jdW1lbnQoKSkKKyAgICAgICAgbV9kZWJ1Z0ZhdEZpbmdl
clJlY3QgPSBtX3dlYlBhZ2UtPm1hcFRvVHJhbnNmb3JtZWQobV93ZWJQYWdlLT5tYXBGcm9tQ29u
dGVudHNUb1ZpZXdwb3J0KGZpbmdlclJlY3QpKTsKKyNlbmRpZgorCisgICAgLy8gRG9jdW1lbnQ6
Om5vZGVzRnJvbVJlY3QgbmVlZHMgdmlld3BvcnQgY29vcmRpbmF0ZXMsIGJ1dCBGYXRGaW5nZXI6
Om5vZGVzRnJvbVJlY3QgZ2V0cyBjb250ZW50cyBjb29yZGluYXRlcworICAgIC8vIGZvciBzaW1w
bGljaXR5IGluc3RlYWQuCisgICAgYm9vbCBmb3VuZE9uZSA9IGZhbHNlOworICAgIEhpdFRlc3RS
ZXN1bHQgcmVzdWx0ID0gbm9kZXNGcm9tUmVjdChkb2N1bWVudCwgZnJhbWVDb250ZW50UG9zKTsK
KworICAgIFJlbmRlckxheWVyKiBsb3dlc3RQb3NpdGlvbmVkRW5jbG9zaW5nTGF5ZXJTb0ZhciA9
IDA7CisKKyAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIGxpc3Qgb2Ygbm9kZXMgKGFuZCBzdWJyZWN0
cyBvZiBub2RlcyB3aGVyZSBwb3NzaWJsZSksIGZvciBlYWNoIHNhdmluZyB0aGUgaW50ZXJzZWN0
aW9uIG9mIHRoZSBib3VuZGluZyBib3ggd2l0aCB0aGUgZmluZ2VyIHJlY3QKKyAgICBMaXN0SGFz
aFNldDxSZWZQdHI8Tm9kZT4gPiBpbnRlcnNlY3RlZE5vZGVzID0gcmVzdWx0LnJlY3RCYXNlZFRl
c3RSZXN1bHQoKTsKKyAgICBMaXN0SGFzaFNldDxSZWZQdHI8Tm9kZT4gPjo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBpbnRlcnNlY3RlZE5vZGVzLmJlZ2luKCk7CisgICAgTGlzdEhhc2hTZXQ8UmVmUHRy
PE5vZGU+ID46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGludGVyc2VjdGVkTm9kZXMuZW5kKCk7Cisg
ICAgZm9yICggOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgTm9kZSogY3VyTm9kZSA9ICgq
aXQpLmdldCgpOworICAgICAgICBpZiAoIWN1ck5vZGUgfHwgIWN1ck5vZGUtPnJlbmRlcmVyKCkp
CisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAocmVtYWluaW5nRmluZ2VyUmVn
aW9uLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGJvb2wgaXNFbGVt
ZW50ID0gY3VyTm9kZS0+aXNFbGVtZW50Tm9kZSgpOworICAgICAgICBpZiAoaXNFbGVtZW50ICYm
IGlzVmFsaWRGcmFtZU93bmVyKHRvRWxlbWVudChjdXJOb2RlKSkpIHsKKworICAgICAgICAgICAg
SFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lciA9IHN0YXRpY19jYXN0PEhUTUxGcmFtZU93bmVy
RWxlbWVudCo+KGN1ck5vZGUpOworICAgICAgICAgICAgRG9jdW1lbnQqIGNoaWxkRG9jdW1lbnQg
PSBvd25lciAmJiBvd25lci0+Y29udGVudEZyYW1lKCkgPyBvd25lci0+Y29udGVudEZyYW1lKCkt
PmRvY3VtZW50KCkgOiAwOworICAgICAgICAgICAgaWYgKCFjaGlsZERvY3VtZW50KQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBBU1NFUlQoY2hpbGREb2N1bWVudC0+
ZnJhbWUoKS0+dmlldygpKTsKKworICAgICAgICAgICAgZm91bmRPbmUgfD0gZmluZEludGVyc2Vj
dGluZ1JlZ2lvbnMoY2hpbGREb2N1bWVudCwgaW50ZXJzZWN0aW5nUmVnaW9ucywgcmVtYWluaW5n
RmluZ2VyUmVnaW9uKTsKKyAgICAgICAgfSBlbHNlIGlmIChpc0VsZW1lbnQgJiYgbV90YXJnZXRU
eXBlID09IENsaWNrYWJsZUVsZW1lbnQpIHsKKyAgICAgICAgICAgIGZvdW5kT25lIHw9IGNoZWNr
Rm9yQ2xpY2thYmxlRWxlbWVudCh0b0VsZW1lbnQoY3VyTm9kZSksIGludGVyc2VjdGluZ1JlZ2lv
bnMsIHJlbWFpbmluZ0ZpbmdlclJlZ2lvbiwgbG93ZXN0UG9zaXRpb25lZEVuY2xvc2luZ0xheWVy
U29GYXIpOworICAgICAgICB9IGVsc2UgaWYgKG1fdGFyZ2V0VHlwZSA9PSBUZXh0KQorICAgICAg
ICAgICAgZm91bmRPbmUgfD0gY2hlY2tGb3JUZXh0KGN1ck5vZGUsIGludGVyc2VjdGluZ1JlZ2lv
bnMsIHJlbWFpbmluZ0ZpbmdlclJlZ2lvbik7CisgICAgfQorCisgICAgcmV0dXJuIGZvdW5kT25l
OworfQorCitib29sIEZhdEZpbmdlcnM6OmNoZWNrRm9yQ2xpY2thYmxlRWxlbWVudChFbGVtZW50
KiBjdXJFbGVtZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VmVjdG9yPEludGVyc2VjdGluZ1JlZ2lvbj4mIGludGVyc2VjdGluZ1JlZ2lvbnMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6
SW50UmVjdFJlZ2lvbiYgcmVtYWluaW5nRmluZ2VyUmVnaW9uLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyTGF5ZXIqJiBsb3dlc3RQb3NpdGlvbmVkRW5j
bG9zaW5nTGF5ZXJTb0ZhcikKK3sKKyAgICBBU1NFUlQoY3VyRWxlbWVudCk7CisKKyAgICBib29s
IGludGVyc2VjdHMgPSBmYWxzZTsKKyAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6SW50UmVjdFJl
Z2lvbiBlbGVtZW50UmVnaW9uOworCisgICAgYm9vbCBpc0NsaWNrYWJsZUVsZW1lbnQgPSBpc0Vs
ZW1lbnRDbGlja2FibGUoY3VyRWxlbWVudCk7CisgICAgaWYgKGlzQ2xpY2thYmxlRWxlbWVudCkg
eworICAgICAgICBpZiAoY3VyRWxlbWVudC0+aXNMaW5rKCkpIHsKKyAgICAgICAgICAgIC8vIExp
bmtzIGNhbiB3cmFwIGxpbmVzLCBhbmQgaW4gc3VjaCBjYXNlcyBOb2RlOjpnZXRSZWN0KCkgY2Fu
IGdpdmUgdXMKKyAgICAgICAgICAgIC8vIG5vdCBhY2N1cmF0ZSByZWN0cywgc2luY2UgaXQgdW5p
dGVzIGFsbCBJbmxpbmVCb3gncyByZWN0cy4gSW4gdGhlc2UKKyAgICAgICAgICAgIC8vIGNhc2Vz
LCB3ZSBjYW4gcHJvY2VzcyBlYWNoIGxpbmUgb2YgdGhlIGxpbmsgc2VwYXJhdGVseSB3aXRoIG91
cgorICAgICAgICAgICAgLy8gaW50ZXJzZWN0aW9uIHJlY3QsIGdldHRpbmcgYSBtb3JlIGFjY3Vy
YXRlIGNsaWNraW5nLgorICAgICAgICAgICAgVmVjdG9yPEZsb2F0UXVhZD4gcXVhZHM7CisgICAg
ICAgICAgICBjdXJFbGVtZW50LT5yZW5kZXJlcigpLT5hYnNvbHV0ZUZvY3VzUmluZ1F1YWRzKHF1
YWRzKTsKKworICAgICAgICAgICAgc2l6ZV90IG4gPSBxdWFkcy5zaXplKCk7CisgICAgICAgICAg
ICBBU1NFUlQobik7CisKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbjsgKytp
KQorICAgICAgICAgICAgICAgIGVsZW1lbnRSZWdpb24gPSB1bmlvblJlZ2lvbnMoZWxlbWVudFJl
Z2lvbiwgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkludFJlY3QocXVhZHNbaV0uZW5jbG9zaW5nQm91
bmRpbmdCb3goKSkpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGVsZW1lbnRSZWdpb24g
PSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbihjdXJFbGVtZW50LT5yZW5kZXJl
cigpLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCh0cnVlIC8qdXNlIHRyYW5zZm9ybXMqLykpOwor
CisgICAgfSBlbHNlCisgICAgICAgIGVsZW1lbnRSZWdpb24gPSBCbGFja0JlcnJ5OjpQbGF0Zm9y
bTo6SW50UmVjdFJlZ2lvbihjdXJFbGVtZW50LT5yZW5kZXJlcigpLT5hYnNvbHV0ZUJvdW5kaW5n
Qm94UmVjdCh0cnVlIC8qdXNlIHRyYW5zZm9ybXMqLykpOworCisgICAgaWYgKGxvd2VzdFBvc2l0
aW9uZWRFbmNsb3NpbmdMYXllclNvRmFyKSB7CisgICAgICAgIFJlbmRlckxheWVyKiBjdXJFbGVt
ZW50UmVuZGVyTGF5ZXIgPSBtX3dlYlBhZ2UtPmVuY2xvc2luZ1Bvc2l0aW9uZWRBbmNlc3Rvck9y
U2VsZklmUG9zaXRpb25lZChjdXJFbGVtZW50LT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigp
KTsKKyAgICAgICAgaWYgKGN1ckVsZW1lbnRSZW5kZXJMYXllciAhPSBsb3dlc3RQb3NpdGlvbmVk
RW5jbG9zaW5nTGF5ZXJTb0ZhcikgeworCisgICAgICAgICAgICAvLyBlbGVtZW50UmVnaW9uIHdp
bGwgYWx3YXlzIGJlIGluIGNvbnRlbnRzIGNvb3JkaW5hdGVzIG9mIGl0cyBjb250YWluZXIgZnJh
bWUuIEl0IG5lZWRzIHRvIGJlCisgICAgICAgICAgICAvLyBtYXBwZWQgdG8gbWFpbiBmcmFtZSBj
b250ZW50cyBjb29yZGluYXRlcyBpbiBvcmRlciB0byBzdWJ0cmFjdCB0aGUgZmluZ2VyUmVnaW9u
LCB0aGVuLgorICAgICAgICAgICAgV2ViQ29yZTo6SW50UG9pbnQgZnJhbWVQb3MobV93ZWJQYWdl
LT5mcmFtZU9mZnNldChjdXJFbGVtZW50LT5kb2N1bWVudCgpLT5mcmFtZSgpKSk7CisgICAgICAg
ICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbiBsYXllclJlZ2lvbihCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6SW50UmVjdChsb3dlc3RQb3NpdGlvbmVkRW5jbG9zaW5nTGF5ZXJT
b0Zhci0+cmVuZGVyZXIoKS0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QodHJ1ZS8qdXNlIHRyYW5z
Zm9ybXMqLykpKTsKKyAgICAgICAgICAgIGxheWVyUmVnaW9uLm1vdmUoZnJhbWVQb3MueCgpLCBm
cmFtZVBvcy55KCkpOworCisgICAgICAgICAgICByZW1haW5pbmdGaW5nZXJSZWdpb24gPSBzdWJ0
cmFjdFJlZ2lvbnMocmVtYWluaW5nRmluZ2VyUmVnaW9uLCBsYXllclJlZ2lvbik7CisKKyAgICAg
ICAgICAgIGxvd2VzdFBvc2l0aW9uZWRFbmNsb3NpbmdMYXllclNvRmFyID0gY3VyRWxlbWVudFJl
bmRlckxheWVyOworICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIGxvd2VzdFBvc2l0aW9u
ZWRFbmNsb3NpbmdMYXllclNvRmFyID0gbV93ZWJQYWdlLT5lbmNsb3NpbmdQb3NpdGlvbmVkQW5j
ZXN0b3JPclNlbGZJZlBvc2l0aW9uZWQoY3VyRWxlbWVudC0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5n
TGF5ZXIoKSk7CisKKyAgICBpZiAoaXNDbGlja2FibGVFbGVtZW50KQorICAgICAgICBpbnRlcnNl
Y3RzID0gY2hlY2tGaW5nZXJJbnRlcnNlY3Rpb24oZWxlbWVudFJlZ2lvbiwgcmVtYWluaW5nRmlu
Z2VyUmVnaW9uLCBjdXJFbGVtZW50LCBpbnRlcnNlY3RpbmdSZWdpb25zKTsKKworICAgIHJldHVy
biBpbnRlcnNlY3RzOworfQorCitib29sIEZhdEZpbmdlcnM6OmNoZWNrRm9yVGV4dChOb2RlKiBj
dXJOb2RlLCBWZWN0b3I8SW50ZXJzZWN0aW5nUmVnaW9uPiYgaW50ZXJzZWN0aW5nUmVnaW9ucywg
QmxhY2tCZXJyeTo6UGxhdGZvcm06OkludFJlY3RSZWdpb24mIGZpbmdlclJlZ2lvbikKK3sKKyAg
ICBBU1NFUlQoY3VyTm9kZSk7CisgICAgaWYgKGlzRmllbGRXaXRoVGV4dChjdXJOb2RlKSkgewor
ICAgICAgICAvLyBGSVhNRTogRmluZCBhbGwgdGV4dCBpbiB0aGUgZmllbGQgYW5kIGZpbmQgdGhl
IGJlc3Qgd29yZC4KKyAgICAgICAgLy8gRm9yIG5vdywgd2Ugd2lsbCBqdXN0IHNlbGVjdCB0aGUg
d2hvbGUgZmllbGQuCisgICAgICAgIEludFJlY3QgYm91bmRpbmdSZWN0ID0gY3VyTm9kZS0+cmVu
ZGVyZXIoKS0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QodHJ1ZSAvKnVzZSB0cmFuc2Zvcm1zKi8p
OworICAgICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbiBub2RlUmVnaW9u
KGJvdW5kaW5nUmVjdCk7CisgICAgICAgIHJldHVybiBjaGVja0ZpbmdlckludGVyc2VjdGlvbihu
b2RlUmVnaW9uLCBmaW5nZXJSZWdpb24sIGN1ck5vZGUsIGludGVyc2VjdGluZ1JlZ2lvbnMpOwor
ICAgIH0KKworICAgIGlmIChjdXJOb2RlLT5pc1RleHROb2RlKCkpIHsKKyAgICAgICAgV2ViQ29y
ZTo6VGV4dCogY3VyVGV4dCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRleHQqPihjdXJOb2RlKTsK
KyAgICAgICAgU3RyaW5nIGFsbFRleHQgPSBjdXJUZXh0LT53aG9sZVRleHQoKTsKKworICAgICAg
ICAvLyBJdGVyYXRlIHRocm91Z2ggYWxsIHdvcmRzLCBicmVha2luZyBhdCB3aGl0ZXNwYWNlLCB0
byBmaW5kIHRoZSBib3VuZGluZyBib3ggb2YgZWFjaCB3b3JkCisgICAgICAgIFRleHRCcmVha0l0
ZXJhdG9yKiB3b3JkSXRlcmF0b3IgPSB3b3JkQnJlYWtJdGVyYXRvcihhbGxUZXh0LmNoYXJhY3Rl
cnMoKSwgYWxsVGV4dC5sZW5ndGgoKSk7CisKKyAgICAgICAgaW50IGxhc3RPZmZzZXQgPSB0ZXh0
QnJlYWtGaXJzdCh3b3JkSXRlcmF0b3IpOworICAgICAgICBpZiAobGFzdE9mZnNldCA9PSAtMSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBib29sIGZvdW5kT25lID0gZmFs
c2U7CisgICAgICAgIGludCBvZmZzZXQ7CisgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGN1
ck5vZGUtPmRvY3VtZW50KCk7CisKKyAgICAgICAgd2hpbGUgKChvZmZzZXQgPSB0ZXh0QnJlYWtO
ZXh0KHdvcmRJdGVyYXRvcikpICE9IC0xKSB7CisgICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IHJh
bmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCwgY3VyVGV4dCwgbGFzdE9mZnNldCwgY3VyVGV4
dCwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGlmICghcmFuZ2UtPnRleHQoKS5zdHJpcFdoaXRlU3Bh
Y2UoKS5pc0VtcHR5KCkpIHsKKyNpZiBERUJVR19GQVRfRklOR0VSUworICAgICAgICAgICAgICAg
IGxvZyhMb2dMZXZlbEluZm8sICJDaGVja2luZyB3b3JkICclcyciLCByYW5nZS0+dGV4dCgpLmxh
dGluMSgpLmRhdGEoKSk7CisjZW5kaWYKKyAgICAgICAgICAgICAgICBCbGFja0JlcnJ5OjpQbGF0
Zm9ybTo6SW50UmVjdFJlZ2lvbiByYW5nZVJlZ2lvbihET01TdXBwb3J0Ojp0cmFuc2Zvcm1lZEJv
dW5kaW5nQm94Rm9yUmFuZ2UoKnJhbmdlKSk7CisgICAgICAgICAgICAgICAgZm91bmRPbmUgfD0g
Y2hlY2tGaW5nZXJJbnRlcnNlY3Rpb24ocmFuZ2VSZWdpb24sIGZpbmdlclJlZ2lvbiwgY3VyTm9k
ZSwgaW50ZXJzZWN0aW5nUmVnaW9ucyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsYXN0
T2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICB9CisgICAgICAgIHJldHVybiBmb3VuZE9uZTsKKyAg
ICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEZhdEZpbmdlcnM6OmdldFBhZGRpbmdz
KHVuc2lnbmVkJiB0b3AsIHVuc2lnbmVkJiByaWdodCwgdW5zaWduZWQmIGJvdHRvbSwgdW5zaWdu
ZWQmIGxlZnQpIGNvbnN0Cit7CisgICAgc3RhdGljIHVuc2lnbmVkIHRvcFBhZGRpbmcgPSBCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6U2V0dGluZ3M6OmdldCgpLT50b3BGYXRGaW5nZXJQYWRkaW5nKCk7
CisgICAgc3RhdGljIHVuc2lnbmVkIHJpZ2h0UGFkZGluZyA9IEJsYWNrQmVycnk6OlBsYXRmb3Jt
OjpTZXR0aW5nczo6Z2V0KCktPnJpZ2h0RmF0RmluZ2VyUGFkZGluZygpOworICAgIHN0YXRpYyB1
bnNpZ25lZCBib3R0b21QYWRkaW5nID0gQmxhY2tCZXJyeTo6UGxhdGZvcm06OlNldHRpbmdzOjpn
ZXQoKS0+Ym90dG9tRmF0RmluZ2VyUGFkZGluZygpOworICAgIHN0YXRpYyB1bnNpZ25lZCBsZWZ0
UGFkZGluZyA9IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTZXR0aW5nczo6Z2V0KCktPmxlZnRGYXRG
aW5nZXJQYWRkaW5nKCk7CisKKyAgICBkb3VibGUgY3VycmVudFNjYWxlID0gbV93ZWJQYWdlLT5j
dXJyZW50U2NhbGUoKTsKKyAgICB0b3AgPSB0b3BQYWRkaW5nIC8gY3VycmVudFNjYWxlOworICAg
IHJpZ2h0ID0gcmlnaHRQYWRkaW5nIC8gY3VycmVudFNjYWxlOworICAgIGJvdHRvbSA9IGJvdHRv
bVBhZGRpbmcgLyBjdXJyZW50U2NhbGU7CisgICAgbGVmdCA9IGxlZnRQYWRkaW5nIC8gY3VycmVu
dFNjYWxlOworfQorCitIaXRUZXN0UmVzdWx0IEZhdEZpbmdlcnM6Om5vZGVzRnJvbVJlY3QoRG9j
dW1lbnQqIGRvY3VtZW50LCBjb25zdCBJbnRQb2ludCYgY29udGVudFBvcykgY29uc3QKK3sKKyAg
ICB1bnNpZ25lZCB0b3BQYWRkaW5nLCByaWdodFBhZGRpbmcsIGJvdHRvbVBhZGRpbmcsIGxlZnRQ
YWRkaW5nOworICAgIGdldFBhZGRpbmdzKHRvcFBhZGRpbmcsIHJpZ2h0UGFkZGluZywgYm90dG9t
UGFkZGluZywgbGVmdFBhZGRpbmcpOworCisgICAgSGl0VGVzdFJlcXVlc3QgcmVxdWVzdChIaXRU
ZXN0UmVxdWVzdDo6UmVhZE9ubHkgfCBIaXRUZXN0UmVxdWVzdDo6QWN0aXZlIHwgSGl0VGVzdFJl
cXVlc3Q6Oklnbm9yZUNsaXBwaW5nKTsKKyAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdChjb250ZW50
UG9zLCB0b3BQYWRkaW5nLCByaWdodFBhZGRpbmcsIGJvdHRvbVBhZGRpbmcsIGxlZnRQYWRkaW5n
LCBIaXRUZXN0U2hhZG93RE9NKTsKKworICAgIGRvY3VtZW50LT5yZW5kZXJWaWV3KCktPmxheWVy
KCktPmhpdFRlc3QocmVxdWVzdCwgcmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2
b2lkIEZhdEZpbmdlcnM6OmdldFJlbGV2YW50SW5mb0Zyb21Qb2ludChEb2N1bWVudCogZG9jdW1l
bnQsIGNvbnN0IEludFBvaW50JiBjb250ZW50UG9zLCBFbGVtZW50KiYgZWxlbWVudFVuZGVyUG9p
bnQsIEVsZW1lbnQqJiBjbGlja2FibGVFbGVtZW50VW5kZXJQb2ludCkgY29uc3QKK3sKKyAgICBl
bGVtZW50VW5kZXJQb2ludCA9IDA7CisgICAgY2xpY2thYmxlRWxlbWVudFVuZGVyUG9pbnQgPSAw
OworCisgICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPnJlbmRlcmVyKCkgfHwgIWRvY3Vt
ZW50LT5mcmFtZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBIaXRUZXN0UmVzdWx0IHJlc3Vs
dCAgPSBkb2N1bWVudC0+ZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPmhpdFRlc3RSZXN1bHRBdFBv
aW50KGNvbnRlbnRQb3MsIHRydWUgLyphbGxvd1NoYWRvd0NvbnRlbnQqLyk7CisgICAgTm9kZSog
bm9kZSA9IHJlc3VsdC5pbm5lck5vZGUoKTsKKyAgICB3aGlsZSAobm9kZSAmJiAhbm9kZS0+aXNF
bGVtZW50Tm9kZSgpKQorICAgICAgICBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpOworCisgICAg
ZWxlbWVudFVuZGVyUG9pbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSk7CisgICAgY2xp
Y2thYmxlRWxlbWVudFVuZGVyUG9pbnQgPSByZXN1bHQuVVJMRWxlbWVudCgpOworfQorCit2b2lk
IEZhdEZpbmdlcnM6OnNldFN1Y2Nlc3NmdWxGYXRGaW5nZXJzUmVzdWx0KEZhdEZpbmdlcnNSZXN1
bHQmIHJlc3VsdCwgTm9kZSogYmVzdE5vZGUsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBhZGp1
c3RlZFBvaW50KQoreworICAgIHJlc3VsdC5tX25vZGVVbmRlckZhdEZpbmdlciA9IGJlc3ROb2Rl
OworICAgIHJlc3VsdC5tX2FkanVzdGVkUG9zaXRpb24gPSBhZGp1c3RlZFBvaW50OworICAgIHJl
c3VsdC5tX3Bvc2l0aW9uV2FzQWRqdXN0ZWQgPSB0cnVlOworICAgIHJlc3VsdC5tX2lzVmFsaWQg
PSB0cnVlOworCisgICAgYm9vbCBpc1RleHRJbnB1dEVsZW1lbnQgPSBmYWxzZTsKKyAgICBpZiAo
bV90YXJnZXRUeXBlID09IENsaWNrYWJsZUVsZW1lbnQpIHsKKyAgICAgICAgQVNTRVJUKGJlc3RO
b2RlLT5pc0VsZW1lbnROb2RlKCkpOworICAgICAgICBFbGVtZW50KiBiZXN0RWxlbWVudCA9IHN0
YXRpY19jYXN0PEVsZW1lbnQqPihiZXN0Tm9kZSk7CisgICAgICAgIGlzVGV4dElucHV0RWxlbWVu
dCA9IERPTVN1cHBvcnQ6OmlzVGV4dElucHV0RWxlbWVudChiZXN0RWxlbWVudCk7CisgICAgfQor
ICAgIHJlc3VsdC5tX2lzVGV4dElucHV0ID0gaXNUZXh0SW5wdXRFbGVtZW50OworfQorCit9Cit9
CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0Zh
dEZpbmdlcnMuaCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0ZhdEZp
bmdlcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTIyYzMzCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvRmF0
RmluZ2Vycy5oCkBAIC0wLDAgKzEsMTYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAy
MDExIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEw
LTEzMDEgIFVTQQorICovCisKKyNpZm5kZWYgRmF0RmluZ2Vyc19oCisjZGVmaW5lIEZhdEZpbmdl
cnNfaAorCisjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVy
LmgiCisKKyNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1JbnRSZWN0UmVnaW9uLmg+CisKKyNp
bmNsdWRlIDx1dGlsaXR5PgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworY2xhc3MgRG9jdW1lbnQ7CitjbGFzcyBFbGVtZW50OworY2xhc3MgSW50UG9pbnQ7
CitjbGFzcyBJbnRSZWN0OworY2xhc3MgSW50U2l6ZTsKK2NsYXNzIE5vZGU7Cit9CisKKyNkZWZp
bmUgREVCVUdfRkFUX0ZJTkdFUlMgMAorCituYW1lc3BhY2UgQmxhY2tCZXJyeSB7CituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworY2xhc3MgV2ViUGFnZVByaXZhdGU7CitjbGFzcyBGYXRGaW5nZXJzOwor
Y2xhc3MgVG91Y2hFdmVudEhhbmRsZXI7CisKK2NsYXNzIEZhdEZpbmdlcnNSZXN1bHQgeworcHVi
bGljOgorICAgIEZhdEZpbmdlcnNSZXN1bHQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHAgPSBX
ZWJDb3JlOjpJbnRQb2ludDo6emVybygpKQorICAgICAgICA6IG1fb3JpZ2luYWxQb3NpdGlvbihw
KQorICAgICAgICAsIG1fYWRqdXN0ZWRQb3NpdGlvbihwKQorICAgICAgICAsIG1fcG9zaXRpb25X
YXNBZGp1c3RlZChmYWxzZSkKKyAgICAgICAgLCBtX2lzVGV4dElucHV0KGZhbHNlKQorICAgICAg
ICAsIG1faXNWYWxpZChmYWxzZSkKKyAgICAgICAgLCBtX25vZGVVbmRlckZhdEZpbmdlcigwKQor
ICAgIHsKKyAgICB9CisKKyAgICB2b2lkIHJlc2V0KCkKKyAgICB7CisgICAgICAgIG1fb3JpZ2lu
YWxQb3NpdGlvbiA9IG1fYWRqdXN0ZWRQb3NpdGlvbiA9IFdlYkNvcmU6OkludFBvaW50Ojp6ZXJv
KCk7CisgICAgICAgIG1fcG9zaXRpb25XYXNBZGp1c3RlZCA9IGZhbHNlOworICAgICAgICBtX2lz
VGV4dElucHV0ID0gZmFsc2U7CisgICAgICAgIG1faXNWYWxpZCA9IGZhbHNlOworICAgICAgICBt
X25vZGVVbmRlckZhdEZpbmdlciA9IDA7CisgICAgfQorCisgICAgV2ViQ29yZTo6SW50UG9pbnQg
b3JpZ2luUG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX29yaWdpbmFsUG9zaXRpb247IH0KKyAg
ICBXZWJDb3JlOjpJbnRQb2ludCBhZGp1c3RlZFBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9h
ZGp1c3RlZFBvc2l0aW9uOyB9CisgICAgYm9vbCBwb3NpdGlvbldhc0FkanVzdGVkKCkgY29uc3Qg
eyByZXR1cm4gbV9pc1ZhbGlkICYmIG1fcG9zaXRpb25XYXNBZGp1c3RlZDsgfQorICAgIGJvb2wg
aXNUZXh0SW5wdXQoKSBjb25zdCB7IHJldHVybiBtX2lzVmFsaWQgJiYgISFtX25vZGVVbmRlckZh
dEZpbmdlciAmJiBtX2lzVGV4dElucHV0OyB9CisgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyBy
ZXR1cm4gbV9pc1ZhbGlkOyB9CisgICAgV2ViQ29yZTo6Tm9kZSogdmFsaWROb2RlKCkgY29uc3Qg
eyByZXR1cm4gbV9ub2RlVW5kZXJGYXRGaW5nZXIgJiYgbV9ub2RlVW5kZXJGYXRGaW5nZXItPmlu
RG9jdW1lbnQoKSA/IG1fbm9kZVVuZGVyRmF0RmluZ2VyLmdldCgpIDogMDsgfQorICAgIFdlYkNv
cmU6OkVsZW1lbnQqIG5vZGVBc0VsZW1lbnRJZkFwcGxpY2FibGUoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYkNvcmU6OkVsZW1lbnQqPihtX25vZGVVbmRlckZh
dEZpbmdlciAmJiBtX25vZGVVbmRlckZhdEZpbmdlci0+aW5Eb2N1bWVudCgpICYmIG1fbm9kZVVu
ZGVyRmF0RmluZ2VyLT5pc0VsZW1lbnROb2RlKCkgPyBtX25vZGVVbmRlckZhdEZpbmdlci5nZXQo
KSA6IDApOworICAgIH0KKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQmxhY2tCZXJyeTo6
V2ViS2l0OjpGYXRGaW5nZXJzOworICAgIGZyaWVuZCBjbGFzcyBCbGFja0JlcnJ5OjpXZWJLaXQ6
OlRvdWNoRXZlbnRIYW5kbGVyOworCisgICAgV2ViQ29yZTo6SW50UG9pbnQgbV9vcmlnaW5hbFBv
c2l0aW9uOyAvLyBNYWluIGZyYW1lIGNvbnRlbnRzIGNvb3JkaW5hdGVzLgorICAgIFdlYkNvcmU6
OkludFBvaW50IG1fYWRqdXN0ZWRQb3NpdGlvbjsgLy8gTWFpbiBmcmFtZSBjb250ZW50cyBjb29y
ZGluYXRlcy4KKyAgICBib29sIG1fcG9zaXRpb25XYXNBZGp1c3RlZDsKKyAgICBib29sIG1faXNU
ZXh0SW5wdXQ7IC8vIENoZWNrIGlmIHRoZSBlbGVtZW50IHVuZGVyIHRoZSB0b3VjaCBwb2ludCB3
aWxsIHJlcXVpcmUgYSBWS0IgYmUgZGlzcGxheWVkIHNvIHRoYXQKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIHRoZSB0b3VjaCBkb3duIGNhbiBiZSBzdXBwcmVzc2VkLgorICAgIGJvb2wgbV9p
c1ZhbGlkOworICAgIFJlZlB0cjxXZWJDb3JlOjpOb2RlPiBtX25vZGVVbmRlckZhdEZpbmdlcjsK
K307CisKK2NsYXNzIEZhdEZpbmdlcnMgeworcHVibGljOgorICAgIGVudW0gVGFyZ2V0VHlwZSB7
IENsaWNrYWJsZUVsZW1lbnQsIFRleHQgfTsKKworICAgIEZhdEZpbmdlcnMoV2ViUGFnZVByaXZh
dGUqIHdlYnBhZ2UsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBjb250ZW50UG9zLCBUYXJnZXRU
eXBlKTsKKyAgICB+RmF0RmluZ2VycygpOworCisgICAgY29uc3QgRmF0RmluZ2Vyc1Jlc3VsdCBm
aW5kQmVzdFBvaW50KCk7CisKKyNpZiBERUJVR19GQVRfRklOR0VSUworICAgIC8vIFRoZXNlIGRl
YnVnIHZhcnMgYXJlIGFsbCBpbiBjb250ZW50IGNvb3JkaW5hdGVzLiBUaGV5IGFyZSBwdWJsaWMg
c28KKyAgICAvLyB0aGV5IGNhbiBiZSByZWFkIGZyb20gQmFja2luZ1N0b3JlLCB3aGljaCB3aWxs
IGRyYXcgYSB2aXNpYmxlIHJlY3QKKyAgICAvLyBhcm91bmQgdGhlIGZhdCBmaW5nZXJzIGFyZWEu
CisgICAgc3RhdGljIFdlYkNvcmU6OkludFJlY3QgbV9kZWJ1Z0ZhdEZpbmdlclJlY3Q7CisgICAg
c3RhdGljIFdlYkNvcmU6OkludFBvaW50IG1fZGVidWdGYXRGaW5nZXJDbGlja1Bvc2l0aW9uOwor
ICAgIHN0YXRpYyBXZWJDb3JlOjpJbnRQb2ludCBtX2RlYnVnRmF0RmluZ2VyQWRqdXN0ZWRQb3Np
dGlvbjsKKyNlbmRpZgorCitwcml2YXRlOgorCisgICAgZW51bSBNYXRjaGluZ0FwcHJvYWNoRm9y
Q2xpY2thYmxlIHsgQ2xpY2thYmxlQnlEZWZhdWx0ID0gMCwgTWFkZUNsaWNrYWJsZUJ5VGhlV2Vi
cGFnZSwgRG9uZSB9OworCisgICAgdHlwZWRlZiBzdGQ6OnBhaXI8V2ViQ29yZTo6Tm9kZSosIEJs
YWNrQmVycnk6OlBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uPiBJbnRlcnNlY3RpbmdSZWdpb247CisK
KyAgICBib29sIGNoZWNrRmluZ2VySW50ZXJzZWN0aW9uKGNvbnN0IEJsYWNrQmVycnk6OlBsYXRm
b3JtOjpJbnRSZWN0UmVnaW9uJiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uJiByZW1haW5pbmdGaW5nZXJS
ZWdpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJDb3JlOjpOb2RlKiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxJbnRlcnNlY3RpbmdSZWdp
b24+JiBpbnRlcnNlY3RpbmdSZWdpb25zKTsKKworICAgIGJvb2wgZmluZEludGVyc2VjdGluZ1Jl
Z2lvbnMoV2ViQ29yZTo6RG9jdW1lbnQqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVmVjdG9yPEludGVyc2VjdGluZ1JlZ2lvbj4mIGludGVyc2VjdGluZ1JlZ2lvbnMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6SW50UmVj
dFJlZ2lvbiYgcmVtYWluaW5nRmluZ2VyUmVnaW9uKTsKKworICAgIGJvb2wgY2hlY2tGb3JDbGlj
a2FibGVFbGVtZW50KFdlYkNvcmU6OkVsZW1lbnQqLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFZlY3RvcjxJbnRlcnNlY3RpbmdSZWdpb24+JiBpbnRlcnNlY3RpbmdSZWdpb25z
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJsYWNrQmVycnk6OlBsYXRmb3Jt
OjpJbnRSZWN0UmVnaW9uJiByZW1haW5pbmdGaW5nZXJSZWdpb24sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgV2ViQ29yZTo6UmVuZGVyTGF5ZXIqJiBsb3dlc3RQb3NpdGlvbmVk
RW5jbG9zaW5nTGF5ZXJTb0Zhcik7CisKKyAgICBib29sIGNoZWNrRm9yVGV4dChXZWJDb3JlOjpO
b2RlKiwKKyAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8SW50ZXJzZWN0aW5nUmVnaW9uPiYg
aW50ZXJzZWN0aW5nUmVnaW9ucywKKyAgICAgICAgICAgICAgICAgICAgICBCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6SW50UmVjdFJlZ2lvbiYgZmluZ2VyUmVnaW9uKTsKKworICAgIHZvaWQgc2V0U3Vj
Y2Vzc2Z1bEZhdEZpbmdlcnNSZXN1bHQoRmF0RmluZ2Vyc1Jlc3VsdCYsIFdlYkNvcmU6Ok5vZGUq
LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOworCisgICAgLy8gSXQgbWltaWNzIERvY3VtZW50
Ojpub2Rlc0Zyb21SZWN0LCBidXQgaGFzIGEgZGlmZmVyZW50IHJldHVybiB2YWx1ZSB0byBmaXQg
b3VyIG5lZWRzLgorICAgIFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQgbm9kZXNGcm9tUmVjdChXZWJD
b3JlOjpEb2N1bWVudCosIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JikgY29uc3Q7CisKKyAgICAv
LyBJdCBtaW1pY3MgRG9jdW1lbnQ6OmVsZW1lbnRGcm9tUG9pbnQsIGJ1dCByZWN1cnNpdmVseSBo
aXQtdGVzdHMgaW4gY2FzZSBhbiBpbm5lciBmcmFtZSBpcyBmb3VuZC4KKyAgICB2b2lkIGdldFJl
bGV2YW50SW5mb0Zyb21Qb2ludChXZWJDb3JlOjpEb2N1bWVudCosCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFdlYkNvcmU6OkVsZW1lbnQqJiBlbGVtZW50VW5kZXJQb2lu
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJDb3JlOjpFbGVtZW50KiYg
Y2xpY2thYmxlRWxlbWVudFVuZGVyUG9pbnQpIGNvbnN0OworCisgICAgYm9vbCBpc0VsZW1lbnRD
bGlja2FibGUoV2ViQ29yZTo6RWxlbWVudCopIGNvbnN0OworCisgICAgaW5saW5lIFdlYkNvcmU6
OkludFJlY3QgZmluZ2VyUmVjdEZvclBvaW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JikgY29u
c3Q7CisgICAgdm9pZCBnZXRQYWRkaW5ncyh1bnNpZ25lZCYgdG9wLCB1bnNpZ25lZCYgcmlnaHQs
IHVuc2lnbmVkJiBib3R0b20sIHVuc2lnbmVkJiBsZWZ0KSBjb25zdDsKKworICAgIFdlYlBhZ2VQ
cml2YXRlKiBtX3dlYlBhZ2U7CisgICAgV2ViQ29yZTo6SW50UG9pbnQgbV9jb250ZW50UG9zOwor
ICAgIFRhcmdldFR5cGUgbV90YXJnZXRUeXBlOworICAgIE1hdGNoaW5nQXBwcm9hY2hGb3JDbGlj
a2FibGUgbV9tYXRjaGluZ0FwcHJvYWNoOworfTsKKworfQorfQorCisjZW5kaWYgLy8gRmF0Rmlu
Z2Vyc19oCisKLS0gCjEuNy4xCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127396</attachid>
            <date>2012-02-16 09:53:47 -0800</date>
            <delta_ts>2012-02-16 11:28:31 -0800</delta_ts>
            <desc>patch_1/3 v2 - TouchEventHandler</desc>
            <filename>0001-2012-02-16-Antonio-Gomes-agomes-rim.com.patch</filename>
            <type>text/plain</type>
            <size>23962</size>
            <attacher name="Antonio Gomes">tonikitoo</attacher>
            
              <data encoding="base64">RnJvbSBlOWY1ZWFlNDFjNjIxYzVhZTM3MGZiYTYzMDc4NzY3NDMzY2QxZDhjIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbnRvbmlvIEdvbWVzIDxhZ29tZXNAcmltLmNvbT4KRGF0ZTog
VGh1LCAxNiBGZWIgMjAxMiAxMjowOToyOCAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggMS8zXSAyMDEy
LTAyLTE2ICBBbnRvbmlvIEdvbWVzICA8YWdvbWVzQHJpbS5jb20+CgogICAgICAgIFtCbGFja0Jl
cnJ5XSBVcHN0cmVhbSB0b3VjaCBoYW5kbGluZyByZWxhdGVkIGNsYXNzZXMKICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg1MDkKCiAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCgogICAgICAgIEluaXRpYWwgdXBzdHJlYW0gb2YgdGhlIEJs
YWNrYmVycnkgc3BlY2lmaWMgc2luZ2xlIHRvdWNoIGV2ZW50CiAgICAgICAgaGFuZGxlciBjbGFz
cy4KCiAgICAgICAgKiBibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvVG91Y2hFdmVudEhhbmRsZXIu
Y3BwOiBBZGRlZC4KICAgICAgICAoV2ViS2l0KToKICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0
OjpoYXNNb3VzZU1vdmVMaXN0ZW5lcik6CiAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6aGFz
VG91Y2hMaXN0ZW5lcik6CiAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6ZWxlbWVudEV4cGVj
dHNNb3VzZUV2ZW50cyk6CiAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6c2hvdWxkQ29udmVy
dFRvdWNoVG9Nb3VzZSk6CiAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6VG91Y2hFdmVudEhh
bmRsZXI6OlRvdWNoRXZlbnRIYW5kbGVyKToKICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpU
b3VjaEV2ZW50SGFuZGxlcjo6flRvdWNoRXZlbnRIYW5kbGVyKToKICAgICAgICAoQmxhY2tCZXJy
eTo6V2ViS2l0OjpUb3VjaEV2ZW50SGFuZGxlcjo6c2hvdWxkU3VwcHJlc3NNb3VzZURvd25PblRv
dWNoRG93bik6CiAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6VG91Y2hFdmVudEhhbmRsZXI6
OnRvdWNoRXZlbnRDYW5jZWwpOgogICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OlRvdWNoRXZl
bnRIYW5kbGVyOjp0b3VjaEhvbGRFdmVudCk6CiAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6
VG91Y2hFdmVudEhhbmRsZXI6OmhhbmRsZVRvdWNoUG9pbnQpOgogICAgICAgIChCbGFja0JlcnJ5
OjpXZWJLaXQ6OlRvdWNoRXZlbnRIYW5kbGVyOjpzcGVsbENoZWNrKToKICAgICAgICAoQmxhY2tC
ZXJyeTo6V2ViS2l0OjpUb3VjaEV2ZW50SGFuZGxlcjo6aGFuZGxlRmF0RmluZ2VyUHJlc3NlZCk6
CiAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6ZWxlbWVudEZvclRhcEhpZ2hsaWdodCk6CiAg
ICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6VG91Y2hFdmVudEhhbmRsZXI6OmRyYXdUYXBIaWdo
bGlnaHQpOgogICAgICAgICogYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L1RvdWNoRXZlbnRIYW5k
bGVyLmg6IEFkZGVkLgogICAgICAgIChXZWJDb3JlKToKICAgICAgICAoV2ViS2l0KToKICAgICAg
ICAoVG91Y2hFdmVudEhhbmRsZXIpOgogICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OlRvdWNo
RXZlbnRIYW5kbGVyOjpsYXN0RmF0RmluZ2Vyc1Jlc3VsdCk6CiAgICAgICAgKEJsYWNrQmVycnk6
OldlYktpdDo6VG91Y2hFdmVudEhhbmRsZXI6OnJlc2V0TGFzdEZhdEZpbmdlcnNSZXN1bHQpOgot
LS0KIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgIHwg
ICAzMyArKwogLi4uL2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9Ub3VjaEV2ZW50SGFuZGxlci5j
cHAgfCAgNDA4ICsrKysrKysrKysrKysrKysrKysrCiAuLi4vYmxhY2tiZXJyeS9XZWJLaXRTdXBw
b3J0L1RvdWNoRXZlbnRIYW5kbGVyLmggICB8ICAgNzYgKysrKwogMyBmaWxlcyBjaGFuZ2VkLCA1
MTcgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3Vy
Y2UvV2ViS2l0L2JsYWNrYmVycnkvQ2hhbmdlTG9nCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNl
L1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvVG91Y2hFdmVudEhhbmRsZXIuY3BwCiBj
cmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQv
VG91Y2hFdmVudEhhbmRsZXIuaAoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJy
eS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQ2hhbmdlTG9nCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzZTM3OGMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQ2hhbmdlTG9nCkBAIC0wLDAgKzEsMzMgQEAKKzIwMTIt
MDItMTYgIEFudG9uaW8gR29tZXMgIDxhZ29tZXNAcmltLmNvbT4KKworICAgICAgICBbQmxhY2tC
ZXJyeV0gVXBzdHJlYW0gdG91Y2ggaGFuZGxpbmcgcmVsYXRlZCBjbGFzc2VzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODUwOQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluaXRpYWwgdXBzdHJlYW0gb2Yg
dGhlIEJsYWNrYmVycnkgc3BlY2lmaWMgc2luZ2xlIHRvdWNoIGV2ZW50CisgICAgICAgIGhhbmRs
ZXIgY2xhc3MuCisKKyAgICAgICAgKiBibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvVG91Y2hFdmVu
dEhhbmRsZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChCbGFja0Jl
cnJ5OjpXZWJLaXQ6Omhhc01vdXNlTW92ZUxpc3RlbmVyKToKKyAgICAgICAgKEJsYWNrQmVycnk6
OldlYktpdDo6aGFzVG91Y2hMaXN0ZW5lcik6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6
OmVsZW1lbnRFeHBlY3RzTW91c2VFdmVudHMpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0
OjpzaG91bGRDb252ZXJ0VG91Y2hUb01vdXNlKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktp
dDo6VG91Y2hFdmVudEhhbmRsZXI6OlRvdWNoRXZlbnRIYW5kbGVyKToKKyAgICAgICAgKEJsYWNr
QmVycnk6OldlYktpdDo6VG91Y2hFdmVudEhhbmRsZXI6On5Ub3VjaEV2ZW50SGFuZGxlcik6Cisg
ICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OlRvdWNoRXZlbnRIYW5kbGVyOjpzaG91bGRTdXBw
cmVzc01vdXNlRG93bk9uVG91Y2hEb3duKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6
VG91Y2hFdmVudEhhbmRsZXI6OnRvdWNoRXZlbnRDYW5jZWwpOgorICAgICAgICAoQmxhY2tCZXJy
eTo6V2ViS2l0OjpUb3VjaEV2ZW50SGFuZGxlcjo6dG91Y2hIb2xkRXZlbnQpOgorICAgICAgICAo
QmxhY2tCZXJyeTo6V2ViS2l0OjpUb3VjaEV2ZW50SGFuZGxlcjo6aGFuZGxlVG91Y2hQb2ludCk6
CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OlRvdWNoRXZlbnRIYW5kbGVyOjpzcGVsbENo
ZWNrKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6VG91Y2hFdmVudEhhbmRsZXI6Omhh
bmRsZUZhdEZpbmdlclByZXNzZWQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjplbGVt
ZW50Rm9yVGFwSGlnaGxpZ2h0KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6VG91Y2hF
dmVudEhhbmRsZXI6OmRyYXdUYXBIaWdobGlnaHQpOgorICAgICAgICAqIGJsYWNrYmVycnkvV2Vi
S2l0U3VwcG9ydC9Ub3VjaEV2ZW50SGFuZGxlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFRvdWNoRXZlbnRIYW5kbGVyKToKKyAgICAg
ICAgKEJsYWNrQmVycnk6OldlYktpdDo6VG91Y2hFdmVudEhhbmRsZXI6Omxhc3RGYXRGaW5nZXJz
UmVzdWx0KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6VG91Y2hFdmVudEhhbmRsZXI6
OnJlc2V0TGFzdEZhdEZpbmdlcnNSZXN1bHQpOgorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9Ub3VjaEV2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9Ub3VjaEV2ZW50SGFuZGxlci5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTYxNWM3YQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L1RvdWNoRXZlbnRIYW5k
bGVyLmNwcApAQCAtMCwwICsxLDQwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAx
MSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0x
MzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVG91Y2hFdmVu
dEhhbmRsZXIuaCIKKworI2luY2x1ZGUgIkRPTVN1cHBvcnQuaCIKKyNpbmNsdWRlICJEb2N1bWVu
dC5oIgorI2luY2x1ZGUgIkRvY3VtZW50TWFya2VyQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIkZh
dEZpbmdlcnMuaCIKKyNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJGcmFt
ZS5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkhUTUxBbmNob3JFbGVtZW50
LmgiCisjaW5jbHVkZSAiSFRNTEFyZWFFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTEltYWdlRWxl
bWVudC5oIgorI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFt
ZXMuaCIKKyNpbmNsdWRlICJIVE1MUGx1Z0luRWxlbWVudC5oIgorI2luY2x1ZGUgIklucHV0SGFu
ZGxlci5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5j
bHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybU1vdXNl
RXZlbnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVRvdWNoRXZlbnQuaCIKKyNpbmNsdWRlICJSZW5k
ZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCisjaW5jbHVkZSAiUmVuZGVyVmll
dy5oIgorI2luY2x1ZGUgIlJlbmRlcmVkRG9jdW1lbnRNYXJrZXIuaCIKKyNpbmNsdWRlICJTZWxl
Y3Rpb25IYW5kbGVyLmgiCisjaW5jbHVkZSAiV2ViUGFnZV9wLmgiCisjaW5jbHVkZSAiV2ViU2V0
dGluZ3MuaCIKKworI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisKK3VzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIFdURjsKKworbmFtZXNwYWNlIEJsYWNrQmVycnkg
eworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0YXRpYyBib29sIGhhc01vdXNlTW92ZUxpc3RlbmVy
KEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgQVNTRVJUKGVsZW1lbnQpOworICAgIHJldHVybiBl
bGVtZW50LT5oYXNFdmVudExpc3RlbmVycyhldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZlbnQpIHx8
IGVsZW1lbnQtPmRvY3VtZW50KCktPmhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMoKS5tb3Vz
ZW1vdmVFdmVudCk7Cit9CisKK3N0YXRpYyBib29sIGhhc1RvdWNoTGlzdGVuZXIoRWxlbWVudCog
ZWxlbWVudCkKK3sKKyAgICBBU1NFUlQoZWxlbWVudCk7CisgICAgcmV0dXJuIGVsZW1lbnQtPmhh
c0V2ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMoKS50b3VjaHN0YXJ0RXZlbnQpCisgICAgICAgIHx8
IGVsZW1lbnQtPmhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMoKS50b3VjaG1vdmVFdmVudCkK
KyAgICAgICAgfHwgZWxlbWVudC0+aGFzRXZlbnRMaXN0ZW5lcnMoZXZlbnROYW1lcygpLnRvdWNo
Y2FuY2VsRXZlbnQpCisgICAgICAgIHx8IGVsZW1lbnQtPmhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50
TmFtZXMoKS50b3VjaGVuZEV2ZW50KTsKK30KKworc3RhdGljIGJvb2wgZWxlbWVudEV4cGVjdHNN
b3VzZUV2ZW50cyhFbGVtZW50KiBlbGVtZW50KQoreworICAgIC8vIE1ha2Ugc3VyZSB3ZSBhcmUg
bm90IG9wZXJhdGluZyBhIHNoYWRvdyBub2RlIGhlcmUsIHNpbmNlIHRoZSB3ZWJwYWdlcworICAg
IC8vIGFyZW4ndCBhYmxlIHRvIGF0dGFjaCBldmVudCBsaXN0ZW5lcnMgdG8gc2hhZG93IGNvbnRl
bnQuCisgICAgd2hpbGUgKGVsZW1lbnQtPmlzSW5TaGFkb3dUcmVlKCkpCisgICAgICAgIGVsZW1l
bnQgPSB0b0VsZW1lbnQoZWxlbWVudC0+c2hhZG93QW5jZXN0b3JOb2RlKCkpOworCisgICAgcmV0
dXJuIGhhc01vdXNlTW92ZUxpc3RlbmVyKGVsZW1lbnQpICYmICFoYXNUb3VjaExpc3RlbmVyKGVs
ZW1lbnQpOworfQorCitzdGF0aWMgYm9vbCBzaG91bGRDb252ZXJ0VG91Y2hUb01vdXNlKEVsZW1l
bnQqIGVsZW1lbnQpCit7CisgICAgaWYgKCFlbGVtZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAvLyBSYW5nZSBlbGVtZW50IGFyZSBhIHNwZWNpYWwgY2FzZSB0aGF0IHJlcXVpcmUg
bmF0dXJhbCBtb3VzZSBldmVudHMgaW4gb3JkZXIgdG8gYWxsb3cKKyAgICAvLyBkcmFnZ2luZyBv
ZiB0aGUgc2xpZGVyIGhhbmRsZS4KKyAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OmlucHV0VGFnKSkgeworICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQg
PSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oZWxlbWVudCk7CisgICAgICAgIGlmIChp
bnB1dEVsZW1lbnQtPmlzUmFuZ2VDb250cm9sKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKKyAgICAvLyBDaGVjayBmb3IgcGx1Z2luCisgICAgaWYgKChlbGVtZW50LT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6b2JqZWN0VGFnKSB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6ZW1iZWRUYWcpKSAmJiBzdGF0aWNfY2FzdDxIVE1MUGx1Z0luRWxlbWVudCo+KGVsZW1l
bnQpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIENoZWNrIGlmIHRoZSBlbGVtZW50
IGhhcyBhIG1vdXNlIGxpc3RlbmVyIGFuZCBubyB0b3VjaCBsaXN0ZW5lci4gSWYgc28sCisgICAg
Ly8gdGhlIGZpZWxkIHdpbGwgcmVxdWlyZSB0b3VjaCBldmVudHMgYmUgY29udmVydGVkIHRvIG1v
dXNlIGV2ZW50cyB0byBmdW5jdGlvbiBwcm9wZXJseS4KKyAgICBpZiAoZWxlbWVudEV4cGVjdHNN
b3VzZUV2ZW50cyhlbGVtZW50KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK1RvdWNoRXZlbnRIYW5kbGVyOjpUb3VjaEV2ZW50SGFuZGxlcihXZWJQYWdl
UHJpdmF0ZSogd2VicGFnZSkKKyAgICA6IG1fd2ViUGFnZSh3ZWJwYWdlKQorICAgICwgbV9kaWRD
YW5jZWxUb3VjaChmYWxzZSkKKyAgICAsIG1fY29udmVydFRvdWNoVG9Nb3VzZShmYWxzZSkKKyAg
ICAsIG1fZXhpc3RpbmdUb3VjaE1vZGUoUHJvY2Vzc2VkVG91Y2hFdmVudHMpCit7Cit9CisKK1Rv
dWNoRXZlbnRIYW5kbGVyOjp+VG91Y2hFdmVudEhhbmRsZXIoKQoreworfQorCitib29sIFRvdWNo
RXZlbnRIYW5kbGVyOjpzaG91bGRTdXBwcmVzc01vdXNlRG93bk9uVG91Y2hEb3duKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9sYXN0RmF0RmluZ2Vyc1Jlc3VsdC5pc1RleHRJbnB1dCgpIHx8IG1f
d2ViUGFnZS0+bV9pbnB1dEhhbmRsZXItPmlzSW5wdXRNb2RlKCkgfHwgbV93ZWJQYWdlLT5tX3Nl
bGVjdGlvbkhhbmRsZXItPmlzU2VsZWN0aW9uQWN0aXZlKCk7Cit9CisKK3ZvaWQgVG91Y2hFdmVu
dEhhbmRsZXI6OnRvdWNoRXZlbnRDYW5jZWwoKQoreworICAgIG1fd2ViUGFnZS0+bV9pbnB1dEhh
bmRsZXItPnByb2Nlc3NQZW5kaW5nQ2xpZW50TmF2aWdhdGlvbk1vZGVDaGFuZ2VOb3RpZmljYXRp
b24oKTsKKworICAgIGlmICghc2hvdWxkU3VwcHJlc3NNb3VzZURvd25PblRvdWNoRG93bigpKSB7
CisgICAgICAgIC8vIElucHV0IGVsZW1lbnRzIGRlbGF5IG1vdXNlIGRvd24gYW5kIGRvIG5vdCBu
ZWVkIHRvIGJlIHJlbGVhc2VkIG9uIHRvdWNoIGNhbmNlbC4KKyAgICAgICAgbV93ZWJQYWdlLT5t
X3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKS0+ZXZlbnRIYW5k
bGVyKCktPnNldE1vdXNlUHJlc3NlZChmYWxzZSk7CisgICAgfQorICAgIG1fY29udmVydFRvdWNo
VG9Nb3VzZSA9IGZhbHNlOworICAgIG1fZGlkQ2FuY2VsVG91Y2ggPSB0cnVlOworCisgICAgLy8g
SWYgd2UgY2FuY2VsIGEgc2luZ2xlIHRvdWNoIGV2ZW50LCB3ZSBuZWVkIHRvIGFsc28gY2xlYW4g
dXAgYW55IGhvdmVyCisgICAgLy8gc3RhdGUgd2UgZ2V0IGludG8gYnkgc3ludGhldGljYWxseSBt
b3ZpbmcgdGhlIG1vdXNlIHRvIHRoZSBtX2ZpbmdlclBvaW50LgorICAgIEVsZW1lbnQqIGVsZW1l
bnRVbmRlckZhdEZpbmdlciA9IG1fbGFzdEZhdEZpbmdlcnNSZXN1bHQubm9kZUFzRWxlbWVudElm
QXBwbGljYWJsZSgpOworICAgIGlmIChlbGVtZW50VW5kZXJGYXRGaW5nZXIgJiYgZWxlbWVudFVu
ZGVyRmF0RmluZ2VyLT5yZW5kZXJlcigpKSB7CisKKyAgICAgICAgSGl0VGVzdFJlcXVlc3QgcmVx
dWVzdChIaXRUZXN0UmVxdWVzdDo6RmluZ2VyVXApOworICAgICAgICAvLyBUaGUgSGl0VGVzdFJl
c3VsdCBwb2ludCBpcyBub3QgYWN0dWFsbHkgbmVlZGVkLgorICAgICAgICBIaXRUZXN0UmVzdWx0
IHJlc3VsdChJbnRQb2ludDo6emVybygpKTsKKyAgICAgICAgcmVzdWx0LnNldElubmVyTm9kZShl
bGVtZW50VW5kZXJGYXRGaW5nZXIpOworCisgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGVs
ZW1lbnRVbmRlckZhdEZpbmdlci0+ZG9jdW1lbnQoKTsKKyAgICAgICAgQVNTRVJUKGRvY3VtZW50
KTsKKyAgICAgICAgZG9jdW1lbnQtPnJlbmRlclZpZXcoKS0+bGF5ZXIoKS0+dXBkYXRlSG92ZXJB
Y3RpdmVTdGF0ZShyZXF1ZXN0LCByZXN1bHQpOworICAgICAgICBkb2N1bWVudC0+dXBkYXRlU3R5
bGVJZk5lZWRlZCgpOworICAgICAgICAvLyBVcGRhdGluZyB0aGUgZG9jdW1lbnQgc3R5bGUgbWF5
IGRlc3Ryb3kgdGhlIHJlbmRlcmVyLgorICAgICAgICBpZiAoZWxlbWVudFVuZGVyRmF0RmluZ2Vy
LT5yZW5kZXJlcigpKQorICAgICAgICAgICAgZWxlbWVudFVuZGVyRmF0RmluZ2VyLT5yZW5kZXJl
cigpLT5yZXBhaW50KCk7CisgICAgICAgIEFTU0VSVCghZWxlbWVudFVuZGVyRmF0RmluZ2VyLT5o
b3ZlcmVkKCkpOworICAgIH0KKworICAgIG1fbGFzdEZhdEZpbmdlcnNSZXN1bHQucmVzZXQoKTsK
K30KKwordm9pZCBUb3VjaEV2ZW50SGFuZGxlcjo6dG91Y2hFdmVudENhbmNlbEFuZENsZWFyRm9j
dXNlZE5vZGUoKQoreworICAgIHRvdWNoRXZlbnRDYW5jZWwoKTsKKyAgICBtX3dlYlBhZ2UtPmNs
ZWFyRm9jdXNOb2RlKCk7Cit9CisKK3ZvaWQgVG91Y2hFdmVudEhhbmRsZXI6OnRvdWNoSG9sZEV2
ZW50KCkKK3sKKyAgICAvLyBUaGlzIGlzIGEgaGFjayBmb3Igb3VyIGhhY2sgdGhhdCBjb252ZXJ0
cyB0aGUgdG91Y2ggcHJlc3NlZCBldmVudCB0aGF0IHdlJ3ZlIGRlbGF5ZWQgYmVjYXVzZSB0aGUg
dXNlciBoYXMgZm9jdXNlZCBhIGlucHV0IGZpZWxkCisgICAgLy8gdG8gdGhlIHBhZ2UgYXMgYSBt
b3VzZSBwcmVzc2VkIGV2ZW50LgorICAgIGlmIChzaG91bGRTdXBwcmVzc01vdXNlRG93bk9uVG91
Y2hEb3duKCkpCisgICAgICAgIGhhbmRsZUZhdEZpbmdlclByZXNzZWQoKTsKKworICAgIC8vIENs
ZWFyIHRoZSBmb2N1cyByaW5nIGluZGljYXRpb24gaWYgdGFwLWFuZC1ob2xkJ2luZyBvbiBhIGxp
bmsuCisgICAgaWYgKG1fbGFzdEZhdEZpbmdlcnNSZXN1bHQudmFsaWROb2RlKCkgJiYgbV9sYXN0
RmF0RmluZ2Vyc1Jlc3VsdC52YWxpZE5vZGUoKS0+aXNMaW5rKCkpCisgICAgICAgIG1fd2ViUGFn
ZS0+Y2xlYXJGb2N1c05vZGUoKTsKK30KKworYm9vbCBUb3VjaEV2ZW50SGFuZGxlcjo6aGFuZGxl
VG91Y2hQb2ludChCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6VG91Y2hQb2ludCYgcG9pbnQpCit7Cisg
ICAgc3dpdGNoIChwb2ludC5tX3N0YXRlKSB7CisgICAgY2FzZSBCbGFja0JlcnJ5OjpQbGF0Zm9y
bTo6VG91Y2hQb2ludDo6VG91Y2hQcmVzc2VkOgorICAgICAgICB7CisgICAgICAgICAgICBtX2xh
c3RGYXRGaW5nZXJzUmVzdWx0LnJlc2V0KCk7IC8vIFRoZW9yZXRpY2FsbHkgdGhpcyBzaG91bGRu
J3QgYmUgcmVxdWlyZWQuIEtlZXAgaXQganVzdCBpbiBjYXNlIHN0YXRlcyBnZXQgbWFuZ2xlZC4K
KyAgICAgICAgICAgIG1fZGlkQ2FuY2VsVG91Y2ggPSBmYWxzZTsKKyAgICAgICAgICAgIG1fbGFz
dFNjcmVlblBvaW50ID0gcG9pbnQubV9zY3JlZW5Qb3M7CisKKyAgICAgICAgICAgIEludFBvaW50
IGNvbnRlbnRQb3MobV93ZWJQYWdlLT5tYXBGcm9tVmlld3BvcnRUb0NvbnRlbnRzKHBvaW50Lm1f
cG9zKSk7CisKKyAgICAgICAgICAgIG1fbGFzdEZhdEZpbmdlcnNSZXN1bHQgPSBGYXRGaW5nZXJz
KG1fd2ViUGFnZSwgY29udGVudFBvcywgRmF0RmluZ2Vyczo6Q2xpY2thYmxlRWxlbWVudCkuZmlu
ZEJlc3RQb2ludCgpOworCisgICAgICAgICAgICBFbGVtZW50KiBlbGVtZW50VW5kZXJGYXRGaW5n
ZXIgPSAwOworICAgICAgICAgICAgaWYgKG1fbGFzdEZhdEZpbmdlcnNSZXN1bHQucG9zaXRpb25X
YXNBZGp1c3RlZCgpICYmIG1fbGFzdEZhdEZpbmdlcnNSZXN1bHQudmFsaWROb2RlKCkpIHsKKyAg
ICAgICAgICAgICAgICBBU1NFUlQobV9sYXN0RmF0RmluZ2Vyc1Jlc3VsdC52YWxpZE5vZGUoKS0+
aXNFbGVtZW50Tm9kZSgpKTsKKyAgICAgICAgICAgICAgICBlbGVtZW50VW5kZXJGYXRGaW5nZXIg
PSBtX2xhc3RGYXRGaW5nZXJzUmVzdWx0Lm5vZGVBc0VsZW1lbnRJZkFwcGxpY2FibGUoKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gU2V0IG9yIHJlc2V0IHRoZSB0b3VjaCBtb2Rl
LgorICAgICAgICAgICAgRWxlbWVudCogcG9zc2libGVUYXJnZXROb2RlRm9yTW91c2VNb3ZlRXZl
bnRzID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG1fbGFzdEZhdEZpbmdlcnNSZXN1bHQucG9zaXRp
b25XYXNBZGp1c3RlZCgpID8gZWxlbWVudFVuZGVyRmF0RmluZ2VyIDogbV9sYXN0RmF0RmluZ2Vy
c1Jlc3VsdC52YWxpZE5vZGUoKSk7CisgICAgICAgICAgICBtX2NvbnZlcnRUb3VjaFRvTW91c2Ug
PSBzaG91bGRDb252ZXJ0VG91Y2hUb01vdXNlKHBvc3NpYmxlVGFyZ2V0Tm9kZUZvck1vdXNlTW92
ZUV2ZW50cyk7CisKKyAgICAgICAgICAgIGlmIChlbGVtZW50VW5kZXJGYXRGaW5nZXIpCisgICAg
ICAgICAgICAgICAgZHJhd1RhcEhpZ2hsaWdodCgpOworCisgICAgICAgICAgICAvLyBMZXRzIGJl
IGNvbnNlcnZhdGl2ZSBoZXJlOiBzaW5jZSB3ZSBoYXZlIHByb2JsZW1zIG9uIG1ham9yIHdlYnNp
dGUgaGF2aW5nCisgICAgICAgICAgICAvLyBtb3VzZW1vdmUgbGlzdGVuZXIgZm9yIG5vIGdvb2Qg
cmVhc29uIChlLmcuIGdvb2dsZS5jb20sIGRlc2t0b3AgZWRpdGlvbiksCisgICAgICAgICAgICAv
LyBsZXQgb25seSBkZWxheSBjbGllbnQgbm90aWZpY2F0aW9ucyB3aGVuIHRoZXJlIGlzIG5vdCBp
bnB1dCB0ZXh0IG5vZGUgaW52b2x2ZWQuCisgICAgICAgICAgICBpZiAobV9jb252ZXJ0VG91Y2hU
b01vdXNlCisgICAgICAgICAgICAgICAgJiYgKG1fd2ViUGFnZS0+bV9pbnB1dEhhbmRsZXItPmlz
SW5wdXRNb2RlKCkgJiYgIW1fbGFzdEZhdEZpbmdlcnNSZXN1bHQuaXNUZXh0SW5wdXQoKSkpIHsK
KyAgICAgICAgICAgICAgICBtX3dlYlBhZ2UtPm1faW5wdXRIYW5kbGVyLT5zZXREZWxheUNsaWVu
dE5vdGlmaWNhdGlvbk9mTmF2aWdhdGlvbk1vZGVDaGFuZ2UodHJ1ZSk7CisgICAgICAgICAgICAg
ICAgaGFuZGxlRmF0RmluZ2VyUHJlc3NlZCgpOworICAgICAgICAgICAgfSBlbHNlIGlmICghc2hv
dWxkU3VwcHJlc3NNb3VzZURvd25PblRvdWNoRG93bigpKQorICAgICAgICAgICAgICAgIGhhbmRs
ZUZhdEZpbmdlclByZXNzZWQoKTsKKworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IH0KKyAgICBjYXNlIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpUb3VjaFBvaW50OjpUb3VjaFJlbGVh
c2VkOgorICAgICAgICB7CisgICAgICAgICAgICBtX3dlYlBhZ2UtPm1faW5wdXRIYW5kbGVyLT5w
cm9jZXNzUGVuZGluZ0NsaWVudE5hdmlnYXRpb25Nb2RlQ2hhbmdlTm90aWZpY2F0aW9uKCk7CisK
KyAgICAgICAgICAgIGlmIChzaG91bGRTdXBwcmVzc01vdXNlRG93bk9uVG91Y2hEb3duKCkpCisg
ICAgICAgICAgICAgICAgaGFuZGxlRmF0RmluZ2VyUHJlc3NlZCgpOworCisgICAgICAgICAgICAv
LyBUaGUgcmViYXNlIGhhcyBlbGltaW5hdGVkIGEgbmVjZXNzYXJ5IGV2ZW50IHdoZW4gdGhlIG1v
dXNlIGRvZXMgbm90CisgICAgICAgICAgICAvLyB0cmlnZ2VyIGFuIGFjdHVhbCBzZWxlY3Rpb24g
Y2hhbmdlIHByZXZlbnRpbmcgcmUtc2hvd2luZyBvZiB0aGUKKyAgICAgICAgICAgIC8vIGtleWJv
YXJkLiBJZiBpbnB1dCBtb2RlIGlzIGFjdGl2ZSwgY2FsbCBzZXROYXZpZ2F0aW9uTW9kZSB3aGlj
aAorICAgICAgICAgICAgLy8gd2lsbCB1cGRhdGUgdGhlIHN0YXRlIGFuZCBkaXNwbGF5IGtleWJv
YXJkIGlmIG5lZWRlZC4KKyAgICAgICAgICAgIGlmIChtX3dlYlBhZ2UtPm1faW5wdXRIYW5kbGVy
LT5pc0lucHV0TW9kZSgpKQorICAgICAgICAgICAgICAgIG1fd2ViUGFnZS0+bV9pbnB1dEhhbmRs
ZXItPnNldE5hdmlnYXRpb25Nb2RlKHRydWUpOworCisgICAgICAgICAgICBJbnRQb2ludCBhZGp1
c3RlZFBvaW50OworICAgICAgICAgICAgaWYgKG1fY29udmVydFRvdWNoVG9Nb3VzZSkgeworICAg
ICAgICAgICAgICAgIGFkanVzdGVkUG9pbnQgPSBwb2ludC5tX3BvczsKKyAgICAgICAgICAgICAg
ICBtX2NvbnZlcnRUb3VjaFRvTW91c2UgPSBmYWxzZTsKKyAgICAgICAgICAgIH0gZWxzZSAvLyBG
YXQgZmluZ2VyIHBvaW50IGluIHZpZXdwb3J0IGNvb3JkaW5hdGVzLgorICAgICAgICAgICAgICAg
IGFkanVzdGVkUG9pbnQgPSBtX3dlYlBhZ2UtPm1hcEZyb21Db250ZW50c1RvVmlld3BvcnQobV9s
YXN0RmF0RmluZ2Vyc1Jlc3VsdC5hZGp1c3RlZFBvc2l0aW9uKCkpOworCisgICAgICAgICAgICAv
LyBDcmVhdGUgIE1vdXNlUmVsZWFzZWQgRXZlbnQuCisgICAgICAgICAgICBQbGF0Zm9ybU1vdXNl
RXZlbnQgbW91c2VFdmVudChhZGp1c3RlZFBvaW50LCBtX2xhc3RTY3JlZW5Qb2ludCwgTW91c2VF
dmVudFJlbGVhc2VkLCAxLCBMZWZ0QnV0dG9uLCBUb3VjaFNjcmVlbik7CisgICAgICAgICAgICBt
X3dlYlBhZ2UtPmhhbmRsZU1vdXNlRXZlbnQobW91c2VFdmVudCk7CisgICAgICAgICAgICBtX2xh
c3RGYXRGaW5nZXJzUmVzdWx0LnJlc2V0KCk7IC8vIHJlc2V0IHRoZSBmYXQgZmluZ2VyIHJlc3Vs
dCBhcyBpdHMgbm8gbG9uZ2VyIHZhbGlkIHdoZW4gYSB1c2VyJ3MgZmluZ2VyIGlzIG5vdCBvbiB0
aGUgc2NyZWVuLgorCisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc3BlbGxMZW5ndGggPSBzcGVs
bENoZWNrKHBvaW50KTsKKyAgICAgICAgICAgIGlmIChzcGVsbExlbmd0aCkgeworICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGludCBlbmQgPSBtX3dlYlBhZ2UtPm1faW5wdXRIYW5kbGVyLT5jYXJl
dFBvc2l0aW9uKCk7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHN0YXJ0ID0gZW5kIC0g
c3BlbGxMZW5ndGg7CisgICAgICAgICAgICAgICAgbV93ZWJQYWdlLT5tX2NsaWVudC0+cmVxdWVz
dFNwZWxsaW5nU3VnZ2VzdGlvbnNGb3JTdHJpbmcoc3RhcnQsIGVuZCk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIGNhc2UgQmxhY2tCZXJy
eTo6UGxhdGZvcm06OlRvdWNoUG9pbnQ6OlRvdWNoTW92ZWQ6CisgICAgICAgIGlmIChtX2NvbnZl
cnRUb3VjaFRvTW91c2UpIHsKKyAgICAgICAgICAgIFBsYXRmb3JtTW91c2VFdmVudCBtb3VzZUV2
ZW50KHBvaW50Lm1fcG9zLCBtX2xhc3RTY3JlZW5Qb2ludCwgTW91c2VFdmVudE1vdmVkLCAxLCBM
ZWZ0QnV0dG9uLCBUb3VjaFNjcmVlbik7CisgICAgICAgICAgICBtX2xhc3RTY3JlZW5Qb2ludCA9
IHBvaW50Lm1fc2NyZWVuUG9zOworICAgICAgICAgICAgaWYgKCFtX3dlYlBhZ2UtPmhhbmRsZU1v
dXNlRXZlbnQobW91c2VFdmVudCkpIHsKKyAgICAgICAgICAgICAgICBtX2NvbnZlcnRUb3VjaFRv
TW91c2UgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsK
KyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCit1bnNpZ25lZCBUb3VjaEV2ZW50SGFuZGxlcjo6c3BlbGxDaGVjayhCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6VG91Y2hQb2ludCYgdG91Y2hQb2ludCkKK3sKKyAgICBFbGVtZW50KiBlbGVtZW50
VW5kZXJGYXRGaW5nZXIgPSBtX2xhc3RGYXRGaW5nZXJzUmVzdWx0Lm5vZGVBc0VsZW1lbnRJZkFw
cGxpY2FibGUoKTsKKyAgICBpZiAoIW1fbGFzdEZhdEZpbmdlcnNSZXN1bHQuaXNUZXh0SW5wdXQo
KSB8fCAhZWxlbWVudFVuZGVyRmF0RmluZ2VyKQorICAgICAgICByZXR1cm4gMDsKKworICAgIElu
dFBvaW50IGNvbnRlbnRQb3MobV93ZWJQYWdlLT5tYXBGcm9tVmlld3BvcnRUb0NvbnRlbnRzKHRv
dWNoUG9pbnQubV9wb3MpKTsKKyAgICBjb250ZW50UG9zID0gRE9NU3VwcG9ydDo6Y29udmVydFBv
aW50VG9GcmFtZShtX3dlYlBhZ2UtPm1haW5GcmFtZSgpLCBtX3dlYlBhZ2UtPmZvY3VzZWRPck1h
aW5GcmFtZSgpLCBjb250ZW50UG9zKTsKKworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGVsZW1l
bnRVbmRlckZhdEZpbmdlci0+ZG9jdW1lbnQoKTsKKyAgICBBU1NFUlQoZG9jdW1lbnQpOworICAg
IFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqIG1hcmtlciA9IGRvY3VtZW50LT5tYXJrZXJzKCktPnJl
bmRlcmVkTWFya2VyQ29udGFpbmluZ1BvaW50KGNvbnRlbnRQb3MsIERvY3VtZW50TWFya2VyOjpT
cGVsbGluZyk7CisgICAgaWYgKCFtYXJrZXIpCisgICAgICAgIHJldHVybiAwOworCisgICAgSW50
UmVjdCByZWN0ID0gbWFya2VyLT5yZW5kZXJlZFJlY3QoKTsKKyAgICBJbnRQb2ludCBuZXdDb250
ZW50UG9zID0gSW50UG9pbnQocmVjdC54KCkgKyByZWN0LndpZHRoKCksIHJlY3QueSgpICsgcmVj
dC5oZWlnaHQoKSAvIDIpOyAvLyBtaWR3YXkgb2YgcmlnaHQgZWRnZQorICAgIEZyYW1lKiBmcmFt
ZSA9IG1fd2ViUGFnZS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7CisgICAgaWYgKGZyYW1lICE9IG1f
d2ViUGFnZS0+bWFpbkZyYW1lKCkpCisgICAgICAgIG5ld0NvbnRlbnRQb3MgPSBtX3dlYlBhZ2Ut
Pm1haW5GcmFtZSgpLT52aWV3KCktPndpbmRvd1RvQ29udGVudHMoZnJhbWUtPnZpZXcoKS0+Y29u
dGVudHNUb1dpbmRvdyhuZXdDb250ZW50UG9zKSk7CisgICAgbV9sYXN0RmF0RmluZ2Vyc1Jlc3Vs
dC5tX2FkanVzdGVkUG9zaXRpb24gPSBuZXdDb250ZW50UG9zOworICAgIG1fbGFzdEZhdEZpbmdl
cnNSZXN1bHQubV9wb3NpdGlvbldhc0FkanVzdGVkID0gdHJ1ZTsKKyAgICByZXR1cm4gbWFya2Vy
LT5lbmRPZmZzZXQoKSAtIG1hcmtlci0+c3RhcnRPZmZzZXQoKTsKK30KKwordm9pZCBUb3VjaEV2
ZW50SGFuZGxlcjo6aGFuZGxlRmF0RmluZ2VyUHJlc3NlZCgpCit7CisgICAgaWYgKCFtX2RpZENh
bmNlbFRvdWNoKSB7CisKKyAgICAgICAgLy8gQ29udmVydCB0b3VjaCBldmVudCB0byBhIG1vdXNl
IGV2ZW50CisgICAgICAgIC8vIEZpcnN0IHVwZGF0ZSB0aGUgbW91c2UgcG9zaXRpb24gd2l0aCBh
IE1vdXNlTW92ZWQgZXZlbnQKKyAgICAgICAgLy8gU2VuZCB0aGUgbW91c2UgbW92ZSBldmVudAor
ICAgICAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgbW91c2VNb3ZlRXZlbnQobV93ZWJQYWdlLT5tYXBG
cm9tQ29udGVudHNUb1ZpZXdwb3J0KG1fbGFzdEZhdEZpbmdlcnNSZXN1bHQuYWRqdXN0ZWRQb3Np
dGlvbigpKSwgbV9sYXN0U2NyZWVuUG9pbnQsIE1vdXNlRXZlbnRNb3ZlZCwgMCwgTGVmdEJ1dHRv
biwgVG91Y2hTY3JlZW4pOworICAgICAgICBtX3dlYlBhZ2UtPmhhbmRsZU1vdXNlRXZlbnQobW91
c2VNb3ZlRXZlbnQpOworCisgICAgICAgIC8vIFRoZW4gc2VuZCB0aGUgTW91c2VQcmVzc2VkIGV2
ZW50CisgICAgICAgIFBsYXRmb3JtTW91c2VFdmVudCBtb3VzZVByZXNzZWRFdmVudChtX3dlYlBh
Z2UtPm1hcEZyb21Db250ZW50c1RvVmlld3BvcnQobV9sYXN0RmF0RmluZ2Vyc1Jlc3VsdC5hZGp1
c3RlZFBvc2l0aW9uKCkpLCBtX2xhc3RTY3JlZW5Qb2ludCwgTW91c2VFdmVudFByZXNzZWQsIDEs
IExlZnRCdXR0b24sIFRvdWNoU2NyZWVuKTsKKyAgICAgICAgbV93ZWJQYWdlLT5oYW5kbGVNb3Vz
ZUV2ZW50KG1vdXNlUHJlc3NlZEV2ZW50KTsKKyAgICB9Cit9CisKKy8vIFRoaXMgbWV0aG9kIGZp
bHRlcnMgd2hhdCBlbGVtZW50IHdpbGwgZ2V0IHRhcC1oaWdobGlnaHQnZWQgb3Igbm90LiBUbyBz
dGFydCB3aXRoLAorLy8gd2UgYXJlIGdvaW5nIHRvIGhpZ2hsaWdodCBsaW5rcyAoYW5jaG9ycyB3
aXRoIGEgdmFsaWQgaHJlZiBlbGVtZW50KSwgYW5kIGVsZW1lbnRzCisvLyB3aG9zZSB0YXAgaGln
aGxpZ2h0IGNvbG9yIHZhbHVlIGlzIGRpZmZlcmVudCB0aGFuIHRoZSBkZWZhdWx0IHZhbHVlLgor
c3RhdGljIEVsZW1lbnQqIGVsZW1lbnRGb3JUYXBIaWdobGlnaHQoRWxlbWVudCogZWxlbWVudFVu
ZGVyRmF0RmluZ2VyKQoreworICAgIGJvb2wgaXNBcmVhID0gZWxlbWVudFVuZGVyRmF0RmluZ2Vy
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YXJlYVRhZyk7CisKKyAgICAvLyBEbyBub3QgYmFpbCBv
dXQgcmlnaHQgd2F5IGhlcmUgaWYgdGhlcmUgZWxlbWVudCBkb2VzIG5vdCBoYXZlIGEgcmVuZGVy
ZXIuIEl0IGlzIHRoZSBjYXNlCisgICAgLy8gZm9yIDxtYXA+IChkZXNjZW5kZW50IG9mIDxhcmVh
PikgZWxlbWVudHMuIFRoZSBhc3NvY2lhdGVkIDxpbWFnZT4gZWxlbWVudCBhY3R1YWxseSBoYXMg
dGhlCisgICAgLy8gcmVuZGVyZXIuCisgICAgaWYgKGVsZW1lbnRVbmRlckZhdEZpbmdlci0+cmVu
ZGVyZXIoKSkgeworICAgICAgICBDb2xvciB0YXBIaWdobGlnaHRDb2xvciA9IGVsZW1lbnRVbmRl
ckZhdEZpbmdlci0+cmVuZGVyU3R5bGUoKS0+dGFwSGlnaGxpZ2h0Q29sb3IoKTsKKyAgICAgICAg
aWYgKHRhcEhpZ2hsaWdodENvbG9yICE9IFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS0+cGxh
dGZvcm1UYXBIaWdobGlnaHRDb2xvcigpKQorICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRVbmRl
ckZhdEZpbmdlcjsKKyAgICB9CisKKyAgICBOb2RlKiBsaW5rTm9kZSA9IGVsZW1lbnRVbmRlckZh
dEZpbmdlci0+ZW5jbG9zaW5nTGlua0V2ZW50UGFyZW50T3JTZWxmKCk7CisgICAgaWYgKCFsaW5r
Tm9kZSB8fCAhbGlua05vZGUtPmlzSFRNTEVsZW1lbnQoKSB8fCAoIWxpbmtOb2RlLT5yZW5kZXJl
cigpICYmICFpc0FyZWEpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEFTU0VSVChsaW5rTm9k
ZS0+aXNMaW5rKCkpOworCisgICAgLy8gRmF0RmluZ2VycyBjbGFzcyBzZWxlY3RvciBlbnN1cmUg
b25seSBhbmNob3Igd2l0aCB2YWxpZCBocmVmIGF0dHIgdmFsdWUgZ2V0IGhlcmUuCisgICAgLy8g
SXQgaW5jbHVkZXMgZW1wdHkgaHJlZnMuCisgICAgRWxlbWVudCogaGlnaGxpZ2h0Q2FuZGlkYXRl
RWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihsaW5rTm9kZSk7CisKKyAgICBpZiAoIWlz
QXJlYSkKKyAgICAgICAgcmV0dXJuIGhpZ2hsaWdodENhbmRpZGF0ZUVsZW1lbnQ7CisKKyAgICBI
VE1MQXJlYUVsZW1lbnQqIGFyZWEgPSBzdGF0aWNfY2FzdDxIVE1MQXJlYUVsZW1lbnQqPihoaWdo
bGlnaHRDYW5kaWRhdGVFbGVtZW50KTsKKyAgICBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZSA9IGFy
ZWEtPmltYWdlRWxlbWVudCgpOworICAgIGlmIChpbWFnZSAmJiBpbWFnZS0+cmVuZGVyZXIoKSkK
KyAgICAgICAgcmV0dXJuIGltYWdlOworCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgVG91Y2hF
dmVudEhhbmRsZXI6OmRyYXdUYXBIaWdobGlnaHQoKQoreworICAgIEVsZW1lbnQqIGVsZW1lbnRV
bmRlckZhdEZpbmdlciA9IG1fbGFzdEZhdEZpbmdlcnNSZXN1bHQubm9kZUFzRWxlbWVudElmQXBw
bGljYWJsZSgpOworICAgIGlmICghZWxlbWVudFVuZGVyRmF0RmluZ2VyKQorICAgICAgICByZXR1
cm47CisKKyAgICBFbGVtZW50KiBlbGVtZW50ID0gZWxlbWVudEZvclRhcEhpZ2hsaWdodChlbGVt
ZW50VW5kZXJGYXRGaW5nZXIpOworICAgIGlmICghZWxlbWVudCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgLy8gR2V0IHRoZSBlbGVtZW50IGJvdW5kaW5nIHJlY3QgaW4gdHJhbnNmb3JtZWQgY29v
cmRpbmF0ZXMgc28gd2UgY2FuIGV4dHJhY3QKKyAgICAvLyB0aGUgZm9jdXMgcmluZyByZWxhdGl2
ZSBwb3NpdGlvbiBlYWNoIHJlY3QuCisgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGVsZW1l
bnQtPnJlbmRlcmVyKCk7CisgICAgQVNTRVJUKHJlbmRlcmVyKTsKKworICAgIEZyYW1lKiBlbGVt
ZW50RnJhbWUgPSBlbGVtZW50LT5kb2N1bWVudCgpLT5mcmFtZSgpOworICAgIEFTU0VSVChlbGVt
ZW50RnJhbWUpOworCisgICAgRnJhbWVWaWV3KiBlbGVtZW50RnJhbWVWaWV3ID0gZWxlbWVudEZy
YW1lLT52aWV3KCk7CisgICAgaWYgKCFlbGVtZW50RnJhbWVWaWV3KQorICAgICAgICByZXR1cm47
CisKKyAgICAvLyBUZWxsIHRoZSBjbGllbnQgaWYgdGhlIGVsZW1lbnQgaXMgZWl0aGVyIGluIGEg
c2Nyb2xsYWJsZSBjb250YWluZXIgb3IgaW4gYSBmaXhlZCBwb3NpdGlvbmVkIGNvbnRhaW5lci4K
KyAgICAvLyBPbiB0aGUgY2xpZW50IHNpZGUsIHRoaXMgaW5mbyBpcyBiZWluZyB1c2VkIHRvIGhp
ZGUgdGhlIHRhcCBoaWdobGlnaHQgd2luZG93IG9uIHNjcm9sbC4KKyAgICBSZW5kZXJMYXllciog
bGF5ZXIgPSBtX3dlYlBhZ2UtPmVuY2xvc2luZ0ZpeGVkUG9zaXRpb25lZEFuY2VzdG9yT3JTZWxm
SWZGaXhlZFBvc2l0aW9uZWQocmVuZGVyZXItPmVuY2xvc2luZ0xheWVyKCkpOworICAgIGJvb2wg
c2hvdWxkSGlkZVRhcEhpZ2hsaWdodFJpZ2h0QWZ0ZXJTY3JvbGxpbmcgPSAhbGF5ZXItPnJlbmRl
cmVyKCktPmlzUmVuZGVyVmlldygpOworICAgIHNob3VsZEhpZGVUYXBIaWdobGlnaHRSaWdodEFm
dGVyU2Nyb2xsaW5nIHw9ICEhbV93ZWJQYWdlLT5tX2luUmVnaW9uU2Nyb2xsU3RhcnRpbmdOb2Rl
LmdldCgpOworCisgICAgSW50UG9pbnQgZnJhbWVQb3MobV93ZWJQYWdlLT5mcmFtZU9mZnNldChl
bGVtZW50RnJhbWUpKTsKKworICAgIC8vIEZJWE1FOiBXZSBjYW4gZ2V0IG1vcmUgcHJlY2lzZSBv
biB0aGUgTUFQIGNhc2UgYnkgY2FsY3VsYXRpbmcgdGhlIHJlY3Qgd2l0aCBIVE1MQXJlYUVsZW1l
bnQ6OmNvbXB1dGVSZWN0KCkuCisgICAgSW50UmVjdCBhYnNvbHV0ZVJlY3QgPSByZW5kZXJlci0+
YWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0KCk7CisgICAgYWJzb2x1dGVSZWN0Lm1vdmUoZnJh
bWVQb3MueCgpLCBmcmFtZVBvcy55KCkpOworCisgICAgSW50UmVjdCBjbGlwcGluZ1JlY3Q7Cisg
ICAgaWYgKGVsZW1lbnRGcmFtZSA9PSBtX3dlYlBhZ2UtPm1haW5GcmFtZSgpKQorICAgICAgICBj
bGlwcGluZ1JlY3QgPSBJbnRSZWN0KEludFBvaW50KDAsIDApLCBlbGVtZW50RnJhbWVWaWV3LT5j
b250ZW50c1NpemUoKSk7CisgICAgZWxzZQorICAgICAgICBjbGlwcGluZ1JlY3QgPSBtX3dlYlBh
Z2UtPm1haW5GcmFtZSgpLT52aWV3KCktPndpbmRvd1RvQ29udGVudHMobV93ZWJQYWdlLT5nZXRS
ZWN1cnNpdmVWaXNpYmxlV2luZG93UmVjdChlbGVtZW50RnJhbWVWaWV3LCB0cnVlIC8qbm9DbGlw
VG9NYWluRnJhbWUqLykpOworICAgIGNsaXBwaW5nUmVjdCA9IGludGVyc2VjdGlvbihhYnNvbHV0
ZVJlY3QsIGNsaXBwaW5nUmVjdCk7CisKKyAgICBWZWN0b3I8RmxvYXRRdWFkPiBmb2N1c1JpbmdR
dWFkczsKKyAgICByZW5kZXJlci0+YWJzb2x1dGVGb2N1c1JpbmdRdWFkcyhmb2N1c1JpbmdRdWFk
cyk7CisKKyAgICBQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbiByZWdpb247CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBmb2N1c1JpbmdRdWFkcy5zaXplKCk7ICsraSkgeworICAgICAgICBJbnRS
ZWN0IHJlY3QgPSBmb2N1c1JpbmdRdWFkc1tpXS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOworICAg
ICAgICByZWN0Lm1vdmUoZnJhbWVQb3MueCgpLCBmcmFtZVBvcy55KCkpOworICAgICAgICBJbnRS
ZWN0IGNsaXBwZWRSZWN0ID0gaW50ZXJzZWN0aW9uKGNsaXBwaW5nUmVjdCwgcmVjdCk7CisgICAg
ICAgIGNsaXBwZWRSZWN0LmluZmxhdGUoMik7CisgICAgICAgIHJlZ2lvbiA9IHVuaW9uUmVnaW9u
cyhyZWdpb24sIFBsYXRmb3JtOjpJbnRSZWN0KGNsaXBwZWRSZWN0KSk7CisgICAgfQorCisgICAg
Q29sb3IgaGlnaGxpZ2h0Q29sb3IgPSBlbGVtZW50LT5yZW5kZXJTdHlsZSgpLT50YXBIaWdobGln
aHRDb2xvcigpOworCisgICAgbV93ZWJQYWdlLT5tX2NsaWVudC0+ZHJhd1RhcEhpZ2hsaWdodChy
ZWdpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWdobGln
aHRDb2xvci5yZWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGhpZ2hsaWdodENvbG9yLmdyZWVuKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBoaWdobGlnaHRDb2xvci5ibHVlKCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBoaWdobGlnaHRDb2xvci5hbHBoYSgpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkSGlkZVRhcEhpZ2hsaWdodFJpZ2h0
QWZ0ZXJTY3JvbGxpbmcpOworfQorCit9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Js
YWNrYmVycnkvV2ViS2l0U3VwcG9ydC9Ub3VjaEV2ZW50SGFuZGxlci5oIGIvU291cmNlL1dlYktp
dC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvVG91Y2hFdmVudEhhbmRsZXIuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmRkOTFmCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvVG91Y2hFdmVudEhhbmRsZXIuaApA
QCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIFJlc2VhcmNo
IEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5v
dCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQor
ICovCisKKyNpZm5kZWYgVG91Y2hFdmVudEhhbmRsZXJfaAorI2RlZmluZSBUb3VjaEV2ZW50SGFu
ZGxlcl9oCisKKyNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKKyNpbmNsdWRlICJGYXRGaW5nZXJz
LmgiCisjaW5jbHVkZSAiSW50UG9pbnQuaCIKKworI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9y
bVRvdWNoRXZlbnQuaD4KKyNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1XaW5kb3cuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgSW50UG9pbnQ7CitjbGFzcyBFbGVtZW50OworfQor
CituYW1lc3BhY2UgQmxhY2tCZXJyeSB7CituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2Vi
UGFnZVByaXZhdGU7CisKK2NsYXNzIFRvdWNoRXZlbnRIYW5kbGVyIHsKK3B1YmxpYzoKKyAgICBU
b3VjaEV2ZW50SGFuZGxlcihXZWJQYWdlUHJpdmF0ZSogd2VicGFnZSk7CisgICAgflRvdWNoRXZl
bnRIYW5kbGVyKCk7CisKKyAgICBib29sIGhhbmRsZVRvdWNoUG9pbnQoQmxhY2tCZXJyeTo6UGxh
dGZvcm06OlRvdWNoUG9pbnQmKTsKKyAgICB2b2lkIHRvdWNoRXZlbnRDYW5jZWwoKTsKKyAgICB2
b2lkIHRvdWNoRXZlbnRDYW5jZWxBbmRDbGVhckZvY3VzZWROb2RlKCk7CisgICAgdm9pZCB0b3Vj
aEhvbGRFdmVudCgpOworCisgICAgYm9vbCBzaG91bGRTdXBwcmVzc01vdXNlRG93bk9uVG91Y2hE
b3duKCkgY29uc3Q7CisKKyAgICBjb25zdCBGYXRGaW5nZXJzUmVzdWx0JiBsYXN0RmF0RmluZ2Vy
c1Jlc3VsdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdEZhdEZpbmdlcnNSZXN1bHQ7IH0KKyAgICB2
b2lkIHJlc2V0TGFzdEZhdEZpbmdlcnNSZXN1bHQoKSB7IG1fbGFzdEZhdEZpbmdlcnNSZXN1bHQu
cmVzZXQoKTsgfQorCitwcml2YXRlOgorICAgIHVuc2lnbmVkIHNwZWxsQ2hlY2soQmxhY2tCZXJy
eTo6UGxhdGZvcm06OlRvdWNoUG9pbnQmKTsKKyAgICB2b2lkIGhhbmRsZUZhdEZpbmdlclByZXNz
ZWQoKTsKKworICAgIHZvaWQgZHJhd1RhcEhpZ2hsaWdodCgpOworCitwcml2YXRlOgorICAgIFdl
YlBhZ2VQcml2YXRlKiBtX3dlYlBhZ2U7CisKKyAgICBib29sIG1fZGlkQ2FuY2VsVG91Y2g7Cisg
ICAgYm9vbCBtX2NvbnZlcnRUb3VjaFRvTW91c2U7CisKKyAgICBXZWJDb3JlOjpUb3VjaEV2ZW50
TW9kZSBtX2V4aXN0aW5nVG91Y2hNb2RlOworCisgICAgV2ViQ29yZTo6SW50UG9pbnQgbV9sYXN0
U2NyZWVuUG9pbnQ7IC8vIFNjcmVlbiBQb3NpdGlvbgorCisgICAgRmF0RmluZ2Vyc1Jlc3VsdCBt
X2xhc3RGYXRGaW5nZXJzUmVzdWx0OworfTsKKworfQorfQorCisjZW5kaWYgLy8gVG91Y2hFdmVu
dEhhbmRsZXJfaAotLSAKMS43LjEKCg==
</data>
<flag name="review"
          id="129513"
          type_id="1"
          status="-"
          setter="rwlbuis"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127397</attachid>
            <date>2012-02-16 09:54:09 -0800</date>
            <delta_ts>2012-02-16 11:41:12 -0800</delta_ts>
            <desc>patch_2/3 v2 - FatFingers</desc>
            <filename>0002-2012-02-16-Antonio-Gomes-agomes-rim.com.patch</filename>
            <type>text/plain</type>
            <size>33911</size>
            <attacher name="Antonio Gomes">tonikitoo</attacher>
            
              <data encoding="base64">RnJvbSBkNDI1OTg3NGMwYTcxY2NlZGM4YTU5OThlYmMzODAyMzU3NTU4OWIxIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbnRvbmlvIEdvbWVzIDxhZ29tZXNAcmltLmNvbT4KRGF0ZTog
VGh1LCAxNiBGZWIgMjAxMiAxMjozOTo1OSAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggMi8zXSAyMDEy
LTAyLTE2ICBBbnRvbmlvIEdvbWVzICA8YWdvbWVzQHJpbS5jb20+CgogICAgICAgIFtCbGFja0Jl
cnJ5XSBVcHN0cmVhbSB0b3VjaCBoYW5kbGluZyByZWxhdGVkIGNsYXNzZXMgKHBhcnQgSUk6IEZh
dEZpbmdlcnMpCiAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTc4NTA5CgogICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgoKICAgICAgICBGYXRG
aW5nZXJzIGlzIHRoZSBjbGFzcyByZXNwb25zaWJsZSB0byB0aGUgd2hvbGUgdG91Y2gKICAgICAg
ICBhY2N1cmFjeSBvZiB0aGUgQmxhY2tCZXJyeSBwb3J0LiBJbml0aWFsIHVwc3RyZWFtLgoKICAg
ICAgICAqIFdlYktpdFN1cHBvcnQvRmF0RmluZ2Vycy5jcHA6IEFkZGVkLgogICAgICAgIChXZWJL
aXQpOgogICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkZhdEZpbmdlcnM6OmZpbmdlclJlY3RG
b3JQb2ludCk6CiAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6aGFzTW91c2VQcmVzc0xpc3Rl
bmVyKToKICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpGYXRGaW5nZXJzOjppc0VsZW1lbnRD
bGlja2FibGUpOgogICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OmlzRmllbGRXaXRoVGV4dCk6
CiAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6ZGlzdGFuY2VCZXR3ZWVuUG9pbnRzKToKICAg
ICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0Ojpjb21wYXJlRGlzdGFuY2VCZXR3ZWVuUG9pbnRzKToK
ICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0Ojppc1ZhbGlkRnJhbWVPd25lcik6CiAgICAgICAg
KEJsYWNrQmVycnk6OldlYktpdDo6RmF0RmluZ2Vyczo6RmF0RmluZ2Vycyk6CiAgICAgICAgKEJs
YWNrQmVycnk6OldlYktpdDo6RmF0RmluZ2Vyczo6fkZhdEZpbmdlcnMpOgogICAgICAgIChCbGFj
a0JlcnJ5OjpXZWJLaXQ6OkZhdEZpbmdlcnM6OmZpbmRCZXN0UG9pbnQpOgogICAgICAgIChCbGFj
a0JlcnJ5OjpXZWJLaXQ6OkZhdEZpbmdlcnM6OmNoZWNrRmluZ2VySW50ZXJzZWN0aW9uKToKICAg
ICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpGYXRGaW5nZXJzOjpmaW5kSW50ZXJzZWN0aW5nUmVn
aW9ucyk6CiAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6RmF0RmluZ2Vyczo6Y2hlY2tGb3JD
bGlja2FibGVFbGVtZW50KToKICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpGYXRGaW5nZXJz
OjpjaGVja0ZvclRleHQpOgogICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkZhdEZpbmdlcnM6
OmdldFBhZGRpbmdzKToKICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpGYXRGaW5nZXJzOjpu
b2Rlc0Zyb21SZWN0KToKICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpGYXRGaW5nZXJzOjpn
ZXRSZWxldmFudEluZm9Gcm9tUG9pbnQpOgogICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkZh
dEZpbmdlcnM6OnNldFN1Y2Nlc3NmdWxGYXRGaW5nZXJzUmVzdWx0KToKICAgICAgICAqIFdlYktp
dFN1cHBvcnQvRmF0RmluZ2Vycy5oOiBBZGRlZC4KICAgICAgICAoV2ViQ29yZSk6CiAgICAgICAg
KFdlYktpdCk6CiAgICAgICAgKEZhdEZpbmdlcnNSZXN1bHQpOgogICAgICAgIChCbGFja0JlcnJ5
OjpXZWJLaXQ6OkZhdEZpbmdlcnNSZXN1bHQ6OkZhdEZpbmdlcnNSZXN1bHQpOgogICAgICAgIChC
bGFja0JlcnJ5OjpXZWJLaXQ6OkZhdEZpbmdlcnNSZXN1bHQ6OnJlc2V0KToKICAgICAgICAoQmxh
Y2tCZXJyeTo6V2ViS2l0OjpGYXRGaW5nZXJzUmVzdWx0OjpvcmlnaW5Qb3NpdGlvbik6CiAgICAg
ICAgKEJsYWNrQmVycnk6OldlYktpdDo6RmF0RmluZ2Vyc1Jlc3VsdDo6YWRqdXN0ZWRQb3NpdGlv
bik6CiAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6RmF0RmluZ2Vyc1Jlc3VsdDo6cG9zaXRp
b25XYXNBZGp1c3RlZCk6CiAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6RmF0RmluZ2Vyc1Jl
c3VsdDo6aXNUZXh0SW5wdXQpOgogICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkZhdEZpbmdl
cnNSZXN1bHQ6OmlzVmFsaWQpOgogICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkZhdEZpbmdl
cnNSZXN1bHQ6OnZhbGlkTm9kZSk6CiAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6RmF0Rmlu
Z2Vyc1Jlc3VsdDo6bm9kZUFzRWxlbWVudElmQXBwbGljYWJsZSk6CiAgICAgICAgKEZhdEZpbmdl
cnMpOgotLS0KIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9DaGFuZ2VMb2cgICAgICAgICAgICAg
ICAgIHwgICA0NSArKwogLi4uL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvRmF0Rmlu
Z2Vycy5jcHAgfCAgNTA3ICsrKysrKysrKysrKysrKysrKysrCiAuLi4vV2ViS2l0L2JsYWNrYmVy
cnkvV2ViS2l0U3VwcG9ydC9GYXRGaW5nZXJzLmggICB8ICAxNjEgKysrKysrKwogMyBmaWxlcyBj
aGFuZ2VkLCA3MTMgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9GYXRGaW5nZXJzLmNw
cAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBw
b3J0L0ZhdEZpbmdlcnMuaAoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQ2hhbmdlTG9nCmluZGV4IGUzZTM3
OGMuLmExOWVlNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5nZUxvZwpAQCAtNSw2ICs1LDUx
IEBACiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCiAKKyAgICAgICAgRmF0
RmluZ2VycyBpcyB0aGUgY2xhc3MgcmVzcG9uc2libGUgdG8gdGhlIHdob2xlIHRvdWNoCisgICAg
ICAgIGFjY3VyYWN5IG9mIHRoZSBCbGFja0JlcnJ5IHBvcnQuIEluaXRpYWwgdXBzdHJlYW0uCisK
KyAgICAgICAgKiBXZWJLaXRTdXBwb3J0L0ZhdEZpbmdlcnMuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYktpdCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkZhdEZpbmdlcnM6OmZpbmdl
clJlY3RGb3JQb2ludCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6Omhhc01vdXNlUHJl
c3NMaXN0ZW5lcik6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkZhdEZpbmdlcnM6Omlz
RWxlbWVudENsaWNrYWJsZSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OmlzRmllbGRX
aXRoVGV4dCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OmRpc3RhbmNlQmV0d2VlblBv
aW50cyk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OmNvbXBhcmVEaXN0YW5jZUJldHdl
ZW5Qb2ludHMpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0Ojppc1ZhbGlkRnJhbWVPd25l
cik6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkZhdEZpbmdlcnM6OkZhdEZpbmdlcnMp
OgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpGYXRGaW5nZXJzOjp+RmF0RmluZ2Vycyk6
CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkZhdEZpbmdlcnM6OmZpbmRCZXN0UG9pbnQp
OgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpGYXRGaW5nZXJzOjpjaGVja0Zpbmdlcklu
dGVyc2VjdGlvbik6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkZhdEZpbmdlcnM6OmZp
bmRJbnRlcnNlY3RpbmdSZWdpb25zKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6RmF0
RmluZ2Vyczo6Y2hlY2tGb3JDbGlja2FibGVFbGVtZW50KToKKyAgICAgICAgKEJsYWNrQmVycnk6
OldlYktpdDo6RmF0RmluZ2Vyczo6Y2hlY2tGb3JUZXh0KToKKyAgICAgICAgKEJsYWNrQmVycnk6
OldlYktpdDo6RmF0RmluZ2Vyczo6Z2V0UGFkZGluZ3MpOgorICAgICAgICAoQmxhY2tCZXJyeTo6
V2ViS2l0OjpGYXRGaW5nZXJzOjpub2Rlc0Zyb21SZWN0KToKKyAgICAgICAgKEJsYWNrQmVycnk6
OldlYktpdDo6RmF0RmluZ2Vyczo6Z2V0UmVsZXZhbnRJbmZvRnJvbVBvaW50KToKKyAgICAgICAg
KEJsYWNrQmVycnk6OldlYktpdDo6RmF0RmluZ2Vyczo6c2V0U3VjY2Vzc2Z1bEZhdEZpbmdlcnNS
ZXN1bHQpOgorICAgICAgICAqIFdlYktpdFN1cHBvcnQvRmF0RmluZ2Vycy5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKEZhdEZpbmdlcnNS
ZXN1bHQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpGYXRGaW5nZXJzUmVzdWx0OjpG
YXRGaW5nZXJzUmVzdWx0KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6RmF0RmluZ2Vy
c1Jlc3VsdDo6cmVzZXQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpGYXRGaW5nZXJz
UmVzdWx0OjpvcmlnaW5Qb3NpdGlvbik6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkZh
dEZpbmdlcnNSZXN1bHQ6OmFkanVzdGVkUG9zaXRpb24pOgorICAgICAgICAoQmxhY2tCZXJyeTo6
V2ViS2l0OjpGYXRGaW5nZXJzUmVzdWx0Ojpwb3NpdGlvbldhc0FkanVzdGVkKToKKyAgICAgICAg
KEJsYWNrQmVycnk6OldlYktpdDo6RmF0RmluZ2Vyc1Jlc3VsdDo6aXNUZXh0SW5wdXQpOgorICAg
ICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpGYXRGaW5nZXJzUmVzdWx0Ojppc1ZhbGlkKToKKyAg
ICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6RmF0RmluZ2Vyc1Jlc3VsdDo6dmFsaWROb2RlKToK
KyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6RmF0RmluZ2Vyc1Jlc3VsdDo6bm9kZUFzRWxl
bWVudElmQXBwbGljYWJsZSk6CisgICAgICAgIChGYXRGaW5nZXJzKToKKworMjAxMi0wMi0xNiAg
QW50b25pbyBHb21lcyAgPGFnb21lc0ByaW0uY29tPgorCisgICAgICAgIFtCbGFja0JlcnJ5XSBV
cHN0cmVhbSB0b3VjaCBoYW5kbGluZyByZWxhdGVkIGNsYXNzZXMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4NTA5CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKICAgICAgICAgSW5pdGlhbCB1cHN0cmVhbSBvZiB0aGUgQmxh
Y2tiZXJyeSBzcGVjaWZpYyBzaW5nbGUgdG91Y2ggZXZlbnQKICAgICAgICAgaGFuZGxlciBjbGFz
cy4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQv
RmF0RmluZ2Vycy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9G
YXRGaW5nZXJzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2M3MGQw
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBv
cnQvRmF0RmluZ2Vycy5jcHAKQEAgLTAsMCArMSw1MDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAsIDIwMTEgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBN
QSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkZhdEZpbmdlcnMuaCIKKworI2luY2x1ZGUgIkJsYWNrQmVycnlQbGF0Zm9ybUxvZy5oIgorI2lu
Y2x1ZGUgIkJsYWNrQmVycnlQbGF0Zm9ybVNjcmVlbi5oIgorI2luY2x1ZGUgIkJsYWNrQmVycnlQ
bGF0Zm9ybVNldHRpbmdzLmgiCisjaW5jbHVkZSAiQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9u
LmgiCisjaW5jbHVkZSAiQ1NTUGFyc2VyLmgiCisjaW5jbHVkZSAiRE9NU3VwcG9ydC5oIgorI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIkV2ZW50
TmFtZXMuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiRmxvYXRRdWFk
LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRl
ICJIVE1MRnJhbWVPd25lckVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50Lmgi
CisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTFRleHRBcmVhRWxlbWVudC5o
IgorI2luY2x1ZGUgIlJhbmdlLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRl
ICJSZW5kZXJPYmplY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCisjaW5jbHVkZSAiVGV4
dC5oIgorI2luY2x1ZGUgIlRleHRCcmVha0l0ZXJhdG9yLmgiCisjaW5jbHVkZSAiV2ViUGFnZV9w
LmgiCisKKyNpZiBERUJVR19GQVRfRklOR0VSUworI2luY2x1ZGUgIkJhY2tpbmdTdG9yZS5oIgor
I2VuZGlmCisKK3VzaW5nIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpMb2dMZXZlbEluZm87Cit1c2lu
ZyBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6bG9nOwordXNpbmcgQmxhY2tCZXJyeTo6UGxhdGZvcm06
OkludFJlY3RSZWdpb247Cit1c2luZyBXVEY6OlJlZlB0cjsKK3VzaW5nIFdURjo6U3RyaW5nOwor
dXNpbmcgV1RGOjpWZWN0b3I7CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCisvLyBMZXRz
IG1ha2UgdGhlIHRvcCBwYWRkaW5nIGJpZ2dlciB0aGFuIG90aGVyIGRpcmVjdGlvbnMsIHNpbmNl
IGl0IGdldHMgdXMgbW9yZQorLy8gYWNjdXJhdGUgY2xpY2tpbmcgcmVzdWx0cy4KKworbmFtZXNw
YWNlIEJsYWNrQmVycnkgeworbmFtZXNwYWNlIFdlYktpdCB7CisKKyNpZiBERUJVR19GQVRfRklO
R0VSUworSW50UmVjdCBGYXRGaW5nZXJzOjptX2RlYnVnRmF0RmluZ2VyUmVjdDsKK0ludFBvaW50
IEZhdEZpbmdlcnM6Om1fZGVidWdGYXRGaW5nZXJDbGlja1Bvc2l0aW9uOworSW50UG9pbnQgRmF0
RmluZ2Vyczo6bV9kZWJ1Z0ZhdEZpbmdlckFkanVzdGVkUG9zaXRpb247CisjZW5kaWYKKworSW50
UmVjdCBGYXRGaW5nZXJzOjpmaW5nZXJSZWN0Rm9yUG9pbnQoY29uc3QgSW50UG9pbnQmIHBvaW50
KSBjb25zdAoreworICAgIHVuc2lnbmVkIHRvcFBhZGRpbmcsIHJpZ2h0UGFkZGluZywgYm90dG9t
UGFkZGluZywgbGVmdFBhZGRpbmc7CisgICAgZ2V0UGFkZGluZ3ModG9wUGFkZGluZywgcmlnaHRQ
YWRkaW5nLCBib3R0b21QYWRkaW5nLCBsZWZ0UGFkZGluZyk7CisKKyAgICByZXR1cm4gSGl0VGVz
dFJlc3VsdDo6cmVjdEZvclBvaW50KHBvaW50LCB0b3BQYWRkaW5nLCByaWdodFBhZGRpbmcsIGJv
dHRvbVBhZGRpbmcsIGxlZnRQYWRkaW5nKTsKK30KKworc3RhdGljIGJvb2wgaGFzTW91c2VQcmVz
c0xpc3RlbmVyKEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgQVNTRVJUKGVsZW1lbnQpOworICAg
IHJldHVybiBlbGVtZW50LT5oYXNFdmVudExpc3RlbmVycyhldmVudE5hbWVzKCkuY2xpY2tFdmVu
dCkKKyAgICAgICAgfHwgZWxlbWVudC0+aGFzRXZlbnRMaXN0ZW5lcnMoZXZlbnROYW1lcygpLm1v
dXNlZG93bkV2ZW50KQorICAgICAgICB8fCBlbGVtZW50LT5oYXNFdmVudExpc3RlbmVycyhldmVu
dE5hbWVzKCkubW91c2V1cEV2ZW50KTsKK30KKworYm9vbCBGYXRGaW5nZXJzOjppc0VsZW1lbnRD
bGlja2FibGUoRWxlbWVudCogZWxlbWVudCkgY29uc3QKK3sKKyAgICBBU1NFUlQoZWxlbWVudCk7
CisgICAgQVNTRVJUKG1fbWF0Y2hpbmdBcHByb2FjaCAhPSBEb25lKTsKKyAgICBBU1NFUlQobV90
YXJnZXRUeXBlID09IENsaWNrYWJsZUVsZW1lbnQpOworCisgICAgc3dpdGNoIChtX21hdGNoaW5n
QXBwcm9hY2gpIHsKKyAgICBjYXNlIENsaWNrYWJsZUJ5RGVmYXVsdDogeworICAgICAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAgcmV0dXJuIGVsZW1lbnQtPndlYmtpdE1hdGNoZXNT
ZWxlY3RvcigiYVtocmVmXSwqOmxpbmssKjp2aXNpdGVkLCpbcm9sZT1idXR0b25dLGJ1dHRvbixp
bnB1dCxzZWxlY3QsbGFiZWxbZm9yXSxhcmVhW2hyZWZdLHRleHRhcmVhLGVtYmVkLG9iamVjdCIs
IGVjKQorICAgICAgICAgICAgfHwgZWxlbWVudC0+aXNDb250ZW50RWRpdGFibGUoKTsKKyAgICB9
CisgICAgY2FzZSBNYWRlQ2xpY2thYmxlQnlUaGVXZWJwYWdlOgorICAgICAgICAvLyBGSVhNRTog
V2UgZmFsbCBiYWNrIHRvIGNoZWNraW5nIGZvciB0aGUgcHJlc2VuY2Ugb2YgQ1NTIHN0eWxlICJj
dXJzb3I6IHBvaW50ZXIiIHRvIGluZGljYXRlIHdoZXRoZXIgdGhlIGVsZW1lbnQgQQorICAgICAg
ICAvLyBjYW4gYmUgY2xpY2tlZCB3aGVuIEEgbmVpdGhlciByZWdpc3RlcnMgbW91c2UgZXZlbnRz
IGhhbmRsZXJzIG5vciBpcyBhIGh5cGVybGluayBvciBmb3JtIGNvbnRyb2wuIFRoaXMgd29ya2Fy
b3VuZAorICAgICAgICAvLyBlbnN1cmVzIHRoYXQgd2UgZG9uJ3QgYnJlYWsgdmFyaW91cyBHb29n
bGUgd2ViIGFwcHMsIGluY2x1ZGluZyA8aHR0cDovL21hcHMuZ29vZ2xlLmNvbT4uIElkZWFsbHks
IHdlIHNob3VsZCB3YWxrCisgICAgICAgIC8vIHVwIHRoZSBET00gaGllcmFyY2h5IHRvIGRldGVy
bWluZSB0aGUgZmlyc3QgcGFyZW50IGVsZW1lbnQgdGhhdCBhY2NlcHRzIG1vdXNlIGV2ZW50cy4K
KyAgICAgICAgLy8gQ29uc2lkZXIgdGhlIEhUTUwgc25pcHBldDogPGRpdiBpZD0iQSIgb25jbGlj
az0iLi4uIj48ZGl2IGlkPSJCIj5FeGFtcGxlPC9kaXY+PC9kaXY+CisgICAgICAgIC8vIE5vdGlj
ZSwgQiBpcyBub3QgYSBoeXBlcmxpbmssIG9yIGZvcm0gY29udHJvbCwgYW5kIGRvZXMgbm90IHJl
Z2lzdGVyIGFueSBtb3VzZSBldmVudCBoYW5kbGVyLiBUaGVuIEIgY2Fubm90CisgICAgICAgIC8v
IGJlIGNsaWNrZWQuIFN1cHBvc2UgQiBzcGVjaWZpZWQgdGhlIENTUyBwcm9wZXJ0eSAiY3Vyc29y
OiBwb2ludGVyIi4gVGhlbiwgQiB3aWxsIGJlIGNvbnNpZGVyZWQgYXMgY2xpY2thYmxlLgorICAg
ICAgICByZXR1cm4gaGFzTW91c2VQcmVzc0xpc3RlbmVyKGVsZW1lbnQpCisgICAgICAgICAgICB8
fCBjb21wdXRlZFN0eWxlKGVsZW1lbnQpLT5nZXRQcm9wZXJ0eVZhbHVlKGNzc1Byb3BlcnR5SUQo
ImN1cnNvciIpKSA9PSAicG9pbnRlciI7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLyBGSVhNRTog
SGFuZGxlIGNvbnRlbnQgZWRpdGFibGUgbm9kZXMgaGVyZSB0b28uCitzdGF0aWMgaW5saW5lIGJv
b2wgaXNGaWVsZFdpdGhUZXh0KE5vZGUqIG5vZGUpCit7CisgICAgQVNTRVJUKG5vZGUpOworICAg
IGlmICghbm9kZSB8fCAhbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBFbGVtZW50KiBlbGVtZW50ID0gdG9FbGVtZW50KG5vZGUpOworCisgICAgcmV0
dXJuICFET01TdXBwb3J0OjppbnB1dEVsZW1lbnRUZXh0KGVsZW1lbnQpLmlzRW1wdHkoKTsKK30K
Kworc3RhdGljIGlubGluZSBpbnQgZGlzdGFuY2VCZXR3ZWVuUG9pbnRzKGNvbnN0IEludFBvaW50
JiBwMSwgY29uc3QgSW50UG9pbnQmIHAyKQoreworICAgIGludCBkeCA9IHAxLngoKSAtIHAyLngo
KTsKKyAgICBpbnQgZHkgPSBwMS55KCkgLSBwMi55KCk7CisgICAgcmV0dXJuIHNxcnQoKGRvdWJs
ZSkoKGR4ICogZHgpICsgKGR5ICogZHkpKSk7Cit9CisKK3N0YXRpYyBib29sIGNvbXBhcmVEaXN0
YW5jZUJldHdlZW5Qb2ludHMoY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkludFBvaW50JiBw
LCBjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbiYgcjEsIGNvbnN0IEJs
YWNrQmVycnk6OlBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uJiByMikKK3sKKyAgICByZXR1cm4gZGlz
dGFuY2VCZXR3ZWVuUG9pbnRzKHAsIHIxLmV4dGVudHMoKS5jZW50ZXIoKSkgPiBkaXN0YW5jZUJl
dHdlZW5Qb2ludHMocCwgcjIuZXh0ZW50cygpLmNlbnRlcigpKTsKK30KKworc3RhdGljIGJvb2wg
aXNWYWxpZEZyYW1lT3duZXIoV2ViQ29yZTo6RWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBBU1NF
UlQoZWxlbWVudCk7CisgICAgcmV0dXJuIGVsZW1lbnQtPmlzRnJhbWVPd25lckVsZW1lbnQoKSAm
JiBzdGF0aWNfY2FzdDxIVE1MRnJhbWVPd25lckVsZW1lbnQqPihlbGVtZW50KS0+Y29udGVudEZy
YW1lKCk7Cit9CisKKy8vIE5PVEU6ICdjb250ZW50UG9zJyBpcyBpbiBtYWluIGZyYW1lIGNvbnRl
bnRzIGNvb3JkaW5hdGVzLgorRmF0RmluZ2Vyczo6RmF0RmluZ2VycyhXZWJQYWdlUHJpdmF0ZSog
d2ViUGFnZSwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGNvbnRlbnRQb3MsIFRhcmdldFR5cGUg
dGFyZ2V0VHlwZSkKKyAgICA6IG1fd2ViUGFnZSh3ZWJQYWdlKQorICAgICwgbV9jb250ZW50UG9z
KGNvbnRlbnRQb3MpCisgICAgLCBtX3RhcmdldFR5cGUodGFyZ2V0VHlwZSkKKyAgICAsIG1fbWF0
Y2hpbmdBcHByb2FjaChEb25lKQoreworICAgIEFTU0VSVCh3ZWJQYWdlKTsKKworI2lmIERFQlVH
X0ZBVF9GSU5HRVJTCisgICAgbV9kZWJ1Z0ZhdEZpbmdlclJlY3QgPSBJbnRSZWN0KDAsIDAsIDAs
IDApOworICAgIG1fZGVidWdGYXRGaW5nZXJDbGlja1Bvc2l0aW9uID0gbV93ZWJQYWdlLT5tYXBU
b1RyYW5zZm9ybWVkKG1fd2ViUGFnZS0+bWFwRnJvbUNvbnRlbnRzVG9WaWV3cG9ydChjb250ZW50
UG9zKSk7CisgICAgbV9kZWJ1Z0ZhdEZpbmdlckFkanVzdGVkUG9zaXRpb24gPSBtX3dlYlBhZ2Ut
Pm1hcFRvVHJhbnNmb3JtZWQobV93ZWJQYWdlLT5tYXBGcm9tQ29udGVudHNUb1ZpZXdwb3J0KGNv
bnRlbnRQb3MpKTsKKyNlbmRpZgorfQorCitGYXRGaW5nZXJzOjp+RmF0RmluZ2VycygpCit7Cit9
CisKK2NvbnN0IEZhdEZpbmdlcnNSZXN1bHQgRmF0RmluZ2Vyczo6ZmluZEJlc3RQb2ludCgpCit7
CisgICAgQVNTRVJUKG1fd2ViUGFnZSk7CisKKyAgICBpZiAoIW1fd2ViUGFnZS0+bV9tYWluRnJh
bWUpCisgICAgICAgIHJldHVybiBtX2NvbnRlbnRQb3M7CisgICAgRmF0RmluZ2Vyc1Jlc3VsdCBy
ZXN1bHQobV9jb250ZW50UG9zKTsKKyAgICBtX21hdGNoaW5nQXBwcm9hY2ggPSBDbGlja2FibGVC
eURlZmF1bHQ7CisKKyAgICAvLyBMZXRzIHNldCBub2RlVW5kZXJGYXRGaW5nZXIgdG8gdGhlIHJl
c3VsdCBvZiBhIHBvaW50IGJhc2VkIGhpdCB0ZXN0IGhlcmUuIElmIHNvbWV0aGluZworICAgIC8v
IHRhcmdhYmxlIGlzIGFjdHVhbGx5IGZvdW5kIGJ5IDo6ZmluZEludGVyc2VjdGluZ1JlZ2lvbnMs
IHRoZW4gd2UgbWlnaHQgcmVwbGFjZSB3aGF0IHdlIGp1c3Qgc2V0IGJlbG93IGxhdGVyIG9uLgor
ICAgIEVsZW1lbnQqIGVsZW1lbnRVbmRlclBvaW50OworICAgIEVsZW1lbnQqIGNsaWNrYWJsZUVs
ZW1lbnRVbmRlclBvaW50OworICAgIGdldFJlbGV2YW50SW5mb0Zyb21Qb2ludChtX3dlYlBhZ2Ut
Pm1fbWFpbkZyYW1lLT5kb2N1bWVudCgpLCBtX2NvbnRlbnRQb3MsIGVsZW1lbnRVbmRlclBvaW50
LCBjbGlja2FibGVFbGVtZW50VW5kZXJQb2ludCk7CisKKyAgICBpZiAoZWxlbWVudFVuZGVyUG9p
bnQpIHsKKyAgICAgICAgcmVzdWx0Lm1fbm9kZVVuZGVyRmF0RmluZ2VyID0gZWxlbWVudFVuZGVy
UG9pbnQ7CisKKyAgICAgICAgLy8gSWYgd2UgYXJlIGxvb2tpbmcgZm9yIGEgQ2xpY2thYmxlIEVs
ZW1lbnQgYW5kIHdlIGZvdW5kIG9uZSwgd2UgY2FuIHF1aXRlIGVhcmx5LgorICAgICAgICBpZiAo
bV90YXJnZXRUeXBlID09IENsaWNrYWJsZUVsZW1lbnQpIHsKKyAgICAgICAgICAgIGlmIChjbGlj
a2FibGVFbGVtZW50VW5kZXJQb2ludCkgeworICAgICAgICAgICAgICAgIHNldFN1Y2Nlc3NmdWxG
YXRGaW5nZXJzUmVzdWx0KHJlc3VsdCwgY2xpY2thYmxlRWxlbWVudFVuZGVyUG9pbnQsIG1fY29u
dGVudFBvcyAvKmFkanVzdGVkUG9zaXRpb24qLyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzRWxlbWVudENsaWNrYWJs
ZShlbGVtZW50VW5kZXJQb2ludCkpIHsKKyAgICAgICAgICAgICAgICBzZXRTdWNjZXNzZnVsRmF0
RmluZ2Vyc1Jlc3VsdChyZXN1bHQsIGVsZW1lbnRVbmRlclBvaW50LCBtX2NvbnRlbnRQb3MgLyph
ZGp1c3RlZFBvc2l0aW9uKi8pOworICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyNpZiBERUJVR19GQVRfRklOR0VSUworICAg
IC8vIGZvcmNlIGJsaXQgdG8gbWFrZSB0aGUgZmF0IGZpbmdlcnMgcmVjdHMgc2hvdyB1cAorICAg
IGlmICghbV9kZWJ1Z0ZhdEZpbmdlclJlY3QuaXNFbXB0eSgpKQorICAgICAgICBtX3dlYlBhZ2Ut
Pm1fYmFja2luZ1N0b3JlLT5yZXBhaW50KDAsIDAsIG1fd2ViUGFnZS0+dHJhbnNmb3JtZWRWaWV3
cG9ydFNpemUoKS53aWR0aCgpLCBtX3dlYlBhZ2UtPnRyYW5zZm9ybWVkVmlld3BvcnRTaXplKCku
aGVpZ2h0KCksIHRydWUsIHRydWUpOworI2VuZGlmCisKKyAgICBWZWN0b3I8SW50ZXJzZWN0aW5n
UmVnaW9uPiBpbnRlcnNlY3RpbmdSZWdpb25zOworICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpJ
bnRSZWN0UmVnaW9uIHJlbWFpbmluZ0ZpbmdlclJlZ2lvbiA9IEJsYWNrQmVycnk6OlBsYXRmb3Jt
OjpJbnRSZWN0UmVnaW9uKGZpbmdlclJlY3RGb3JQb2ludChtX2NvbnRlbnRQb3MpKTsKKworICAg
IGJvb2wgZm91bmRPbmUgPSBmaW5kSW50ZXJzZWN0aW5nUmVnaW9ucyhtX3dlYlBhZ2UtPm1fbWFp
bkZyYW1lLT5kb2N1bWVudCgpLCBpbnRlcnNlY3RpbmdSZWdpb25zLCByZW1haW5pbmdGaW5nZXJS
ZWdpb24pOworICAgIGlmICghZm91bmRPbmUpIHsKKyAgICAgICAgbV9tYXRjaGluZ0FwcHJvYWNo
ID0gTWFkZUNsaWNrYWJsZUJ5VGhlV2VicGFnZTsKKyAgICAgICAgcmVtYWluaW5nRmluZ2VyUmVn
aW9uID0gQmxhY2tCZXJyeTo6UGxhdGZvcm06OkludFJlY3RSZWdpb24oZmluZ2VyUmVjdEZvclBv
aW50KG1fY29udGVudFBvcykpOworICAgICAgICBmb3VuZE9uZSA9IGZpbmRJbnRlcnNlY3RpbmdS
ZWdpb25zKG1fd2ViUGFnZS0+bV9tYWluRnJhbWUtPmRvY3VtZW50KCksIGludGVyc2VjdGluZ1Jl
Z2lvbnMsIHJlbWFpbmluZ0ZpbmdlclJlZ2lvbik7CisgICAgfQorCisgICAgbV9tYXRjaGluZ0Fw
cHJvYWNoID0gRG9uZTsKKworICAgIGlmICghZm91bmRPbmUpCisgICAgICAgIHJldHVybiByZXN1
bHQ7CisKKyAgICBOb2RlKiBiZXN0Tm9kZSA9IDA7CisgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06
OkludFJlY3RSZWdpb24gbGFyZ2VzdEludGVyc2VjdGlvblJlZ2lvbjsKKyAgICBJbnRQb2ludCBi
ZXN0UG9pbnQ7CisgICAgaW50IGxhcmdlc3RJbnRlcnNlY3Rpb25SZWdpb25BcmVhID0gMDsKKwor
ICAgIFZlY3RvcjxJbnRlcnNlY3RpbmdSZWdpb24+Ojpjb25zdF9pdGVyYXRvciBlbmRJdCA9IGlu
dGVyc2VjdGluZ1JlZ2lvbnMuZW5kKCk7CisgICAgZm9yIChWZWN0b3I8SW50ZXJzZWN0aW5nUmVn
aW9uPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBpbnRlcnNlY3RpbmdSZWdpb25zLmJlZ2luKCk7IGl0
ICE9IGVuZEl0OyArK2l0KSB7CisgICAgICAgIE5vZGUqIGN1cnJlbnROb2RlID0gaXQtPmZpcnN0
OworICAgICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbiBjdXJyZW50SW50
ZXJzZWN0aW9uUmVnaW9uID0gaXQtPnNlY29uZDsKKworICAgICAgICBpbnQgY3VycmVudEludGVy
c2VjdGlvblJlZ2lvbkFyZWEgPSBjdXJyZW50SW50ZXJzZWN0aW9uUmVnaW9uLmFyZWEoKTsKKyAg
ICAgICAgaWYgKGN1cnJlbnRJbnRlcnNlY3Rpb25SZWdpb25BcmVhID4gbGFyZ2VzdEludGVyc2Vj
dGlvblJlZ2lvbkFyZWEKKyAgICAgICAgICAgIHx8IChjdXJyZW50SW50ZXJzZWN0aW9uUmVnaW9u
QXJlYSA9PSBsYXJnZXN0SW50ZXJzZWN0aW9uUmVnaW9uQXJlYQorICAgICAgICAgICAgJiYgY29t
cGFyZURpc3RhbmNlQmV0d2VlblBvaW50cyhtX2NvbnRlbnRQb3MsIGN1cnJlbnRJbnRlcnNlY3Rp
b25SZWdpb24sIGxhcmdlc3RJbnRlcnNlY3Rpb25SZWdpb24pKSkgeworICAgICAgICAgICAgYmVz
dE5vZGUgPSBjdXJyZW50Tm9kZTsKKyAgICAgICAgICAgIGxhcmdlc3RJbnRlcnNlY3Rpb25SZWdp
b24gPSBjdXJyZW50SW50ZXJzZWN0aW9uUmVnaW9uOworICAgICAgICAgICAgbGFyZ2VzdEludGVy
c2VjdGlvblJlZ2lvbkFyZWEgPSBjdXJyZW50SW50ZXJzZWN0aW9uUmVnaW9uQXJlYTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGlmICghYmVzdE5vZGUgfHwgbGFyZ2VzdEludGVyc2VjdGlvblJl
Z2lvbi5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyNpZiBERUJVR19GQVRf
RklOR0VSUworICAgIG1fZGVidWdGYXRGaW5nZXJBZGp1c3RlZFBvc2l0aW9uID0gbV93ZWJQYWdl
LT5tYXBUb1RyYW5zZm9ybWVkKG1fd2ViUGFnZS0+bWFwRnJvbUNvbnRlbnRzVG9WaWV3cG9ydChs
YXJnZXN0SW50ZXJzZWN0aW9uUmVnaW9uLnJlY3RzKClbMF0uY2VudGVyKCkpKTsKKyNlbmRpZgor
CisgICAgc2V0U3VjY2Vzc2Z1bEZhdEZpbmdlcnNSZXN1bHQocmVzdWx0LCBiZXN0Tm9kZSwgbGFy
Z2VzdEludGVyc2VjdGlvblJlZ2lvbi5yZWN0cygpWzBdLmNlbnRlcigpIC8qYWRqdXN0ZWRQb3Np
dGlvbiovKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8vICdyZWdpb24nIGlzIGluIGNv
bnRlbnRzIGNvb3JkaW5hdGVzIHJlbGF0aXZlIHRvIHRoZSBmcmFtZSBjb250YWluaW5nICdub2Rl
JworLy8gJ3JlbWFpbmluZ0ZpbmdlclJlZ2lvbicgYW5kICdpbnRlcnNlY3RpbmdSZWdpb25zJyB3
aWxsIGFsd2F5cyBiZSBpbiBtYWluIGZyYW1lIGNvbnRlbnRzCisvLyBjb29yZGluYXRlcy4KKy8v
IFRodXMsIGJlZm9yZSBjb21wYXJpbmcsIHdlIG5lZWQgdG8gbWFwIHRoZSBmb3JtZXIgdG8gbWFp
biBmcmFtZSBjb250ZW50cyBjb29yZGluYXRlcy4KK2Jvb2wgRmF0RmluZ2Vyczo6Y2hlY2tGaW5n
ZXJJbnRlcnNlY3Rpb24oY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkludFJlY3RSZWdpb24m
IHJlZ2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
QmxhY2tCZXJyeTo6UGxhdGZvcm06OkludFJlY3RSZWdpb24mIHJlbWFpbmluZ0ZpbmdlclJlZ2lv
biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSwg
VmVjdG9yPEludGVyc2VjdGluZ1JlZ2lvbj4mIGludGVyc2VjdGluZ1JlZ2lvbnMpCit7CisgICAg
QVNTRVJUKG5vZGUpOworCisgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkludFJlY3RSZWdpb24g
cmVnaW9uQ29weShyZWdpb24pOworICAgIFdlYkNvcmU6OkludFBvaW50IGZyYW1lUG9zKG1fd2Vi
UGFnZS0+ZnJhbWVPZmZzZXQobm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSkpOworICAgIHJlZ2lv
bkNvcHkubW92ZShmcmFtZVBvcy54KCksIGZyYW1lUG9zLnkoKSk7CisKKyAgICBCbGFja0JlcnJ5
OjpQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbiBpbnRlcnNlY3Rpb24gPSBpbnRlcnNlY3RSZWdpb25z
KHJlZ2lvbkNvcHksIHJlbWFpbmluZ0ZpbmdlclJlZ2lvbik7CisgICAgaWYgKGludGVyc2VjdGlv
bi5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworI2lmIERFQlVHX0ZBVF9GSU5H
RVJTCisgICAgU3RyaW5nIG5vZGVOYW1lOworICAgIGlmIChub2RlLT5pc1RleHROb2RlKCkpCisg
ICAgICAgIG5vZGVOYW1lID0gInRleHQgbm9kZSI7CisgICAgZWxzZSBpZiAobm9kZS0+aXNFbGVt
ZW50Tm9kZSgpKQorICAgICAgICBub2RlTmFtZSA9IFN0cmluZzo6Zm9ybWF0KCIlcyBub2RlIiwg
dG9FbGVtZW50KG5vZGUpLT50YWdOYW1lKCkubGF0aW4xKCkuZGF0YSgpKTsKKyAgICBlbHNlCisg
ICAgICAgIG5vZGVOYW1lID0gInVua25vd24gbm9kZSI7CisgICAgbG9nKExvZ0xldmVsSW5mbywg
IiVzIGhhcyByZWdpb24gJXMsIGludGVyc2VjdGluZyBhdCAlcyAoYXJlYSAlZCkiLCBub2RlTmFt
ZS5sYXRpbjEoKS5kYXRhKCksCisgICAgICAgIHJlZ2lvbkNvcHkudG9TdHJpbmcoKS5jX3N0cigp
LCBpbnRlcnNlY3Rpb24udG9TdHJpbmcoKS5jX3N0cigpLCBpbnRlcnNlY3Rpb24uYXJlYSgpKTsK
KyNlbmRpZgorCisgICAgaW50ZXJzZWN0aW5nUmVnaW9ucy5hcHBlbmQoc3RkOjptYWtlX3BhaXIo
bm9kZSwgaW50ZXJzZWN0aW9uKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKKworLy8gaW50ZXJz
ZWN0aW5nUmVnaW9ucyBhbmQgcmVtYWluaW5nRmluZ2VyUmVnaW9uIGFyZSBhbGwgaW4gbWFpbiBm
cmFtZSBjb250ZW50cyBjb29yZGluYXRlcywKKy8vIGV2ZW4gb24gcmVjdXJzaXZlIGNhbGxzIG9m
IDo6ZmluZEludGVyc2VjdGluZ1JlZ2lvbnMuCitib29sIEZhdEZpbmdlcnM6OmZpbmRJbnRlcnNl
Y3RpbmdSZWdpb25zKERvY3VtZW50KiBkb2N1bWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVmVjdG9yPEludGVyc2VjdGluZ1JlZ2lvbj4mIGludGVyc2VjdGlu
Z1JlZ2lvbnMsIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uJiByZW1haW5pbmdG
aW5nZXJSZWdpb24pCit7CisgICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPmZyYW1lKCkt
PnZpZXcoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gVGhlIGxheW91dCBuZWVk
cyB0byBiZSB1cC10by1kYXRlIHRvIGRldGVybWluZSBpZiBhIG5vZGUgaXMgZm9jdXNhYmxlLgor
ICAgIGRvY3VtZW50LT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKKwor
ICAgIC8vIENyZWF0ZSBmaW5nZXJSZWN0LgorICAgIEludFBvaW50IGZyYW1lQ29udGVudFBvcyhk
b2N1bWVudC0+ZnJhbWUoKS0+dmlldygpLT53aW5kb3dUb0NvbnRlbnRzKG1fd2ViUGFnZS0+bV9t
YWluRnJhbWUtPnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhtX2NvbnRlbnRQb3MpKSk7CisKKyNp
ZiBERUJVR19GQVRfRklOR0VSUworICAgIEludFJlY3QgZmluZ2VyUmVjdChmaW5nZXJSZWN0Rm9y
UG9pbnQoZnJhbWVDb250ZW50UG9zKSk7CisgICAgSW50UmVjdCBzY3JlZW5GaW5nZXJSZWN0ID0g
bV93ZWJQYWdlLT5tYXBUb1RyYW5zZm9ybWVkKGZpbmdlclJlY3QpOworICAgIGxvZyhMb2dMZXZl
bEluZm8sICJmYXQgZmluZ2VyIHJlY3Qgbm93ICVzIiwgc2NyZWVuRmluZ2VyUmVjdC50b1N0cmlu
ZygpLmxhdGluMSgpLmRhdGEoKSk7CisKKyAgICAvLyBvbmx5IHJlY29yZCB0aGUgZmlyc3QgZmlu
Z2VyIHJlY3QKKyAgICBpZiAoZG9jdW1lbnQgPT0gbV93ZWJQYWdlLT5tX21haW5GcmFtZS0+ZG9j
dW1lbnQoKSkKKyAgICAgICAgbV9kZWJ1Z0ZhdEZpbmdlclJlY3QgPSBtX3dlYlBhZ2UtPm1hcFRv
VHJhbnNmb3JtZWQobV93ZWJQYWdlLT5tYXBGcm9tQ29udGVudHNUb1ZpZXdwb3J0KGZpbmdlclJl
Y3QpKTsKKyNlbmRpZgorCisgICAgLy8gRG9jdW1lbnQ6Om5vZGVzRnJvbVJlY3QgbmVlZHMgdmll
d3BvcnQgY29vcmRpbmF0ZXMsIGJ1dCBGYXRGaW5nZXI6Om5vZGVzRnJvbVJlY3QgZ2V0cyBjb250
ZW50cyBjb29yZGluYXRlcworICAgIC8vIGZvciBzaW1wbGljaXR5IGluc3RlYWQuCisgICAgYm9v
bCBmb3VuZE9uZSA9IGZhbHNlOworICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0ID0gbm9kZXNGcm9t
UmVjdChkb2N1bWVudCwgZnJhbWVDb250ZW50UG9zKTsKKworICAgIFJlbmRlckxheWVyKiBsb3dl
c3RQb3NpdGlvbmVkRW5jbG9zaW5nTGF5ZXJTb0ZhciA9IDA7CisKKyAgICAvLyBJdGVyYXRlIG92
ZXIgdGhlIGxpc3Qgb2Ygbm9kZXMgKGFuZCBzdWJyZWN0cyBvZiBub2RlcyB3aGVyZSBwb3NzaWJs
ZSksIGZvciBlYWNoIHNhdmluZyB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoZSBib3VuZGluZyBib3gg
d2l0aCB0aGUgZmluZ2VyIHJlY3QKKyAgICBMaXN0SGFzaFNldDxSZWZQdHI8Tm9kZT4gPiBpbnRl
cnNlY3RlZE5vZGVzID0gcmVzdWx0LnJlY3RCYXNlZFRlc3RSZXN1bHQoKTsKKyAgICBMaXN0SGFz
aFNldDxSZWZQdHI8Tm9kZT4gPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBpbnRlcnNlY3RlZE5vZGVz
LmJlZ2luKCk7CisgICAgTGlzdEhhc2hTZXQ8UmVmUHRyPE5vZGU+ID46OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IGludGVyc2VjdGVkTm9kZXMuZW5kKCk7CisgICAgZm9yICggOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKKyAgICAgICAgTm9kZSogY3VyTm9kZSA9ICgqaXQpLmdldCgpOworICAgICAgICBpZiAo
IWN1ck5vZGUgfHwgIWN1ck5vZGUtPnJlbmRlcmVyKCkpCisgICAgICAgICAgICBjb250aW51ZTsK
KworICAgICAgICBpZiAocmVtYWluaW5nRmluZ2VyUmVnaW9uLmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgIGJvb2wgaXNFbGVtZW50ID0gY3VyTm9kZS0+aXNFbGVtZW50
Tm9kZSgpOworICAgICAgICBpZiAoaXNFbGVtZW50ICYmIGlzVmFsaWRGcmFtZU93bmVyKHRvRWxl
bWVudChjdXJOb2RlKSkpIHsKKworICAgICAgICAgICAgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBv
d25lciA9IHN0YXRpY19jYXN0PEhUTUxGcmFtZU93bmVyRWxlbWVudCo+KGN1ck5vZGUpOworICAg
ICAgICAgICAgRG9jdW1lbnQqIGNoaWxkRG9jdW1lbnQgPSBvd25lciAmJiBvd25lci0+Y29udGVu
dEZyYW1lKCkgPyBvd25lci0+Y29udGVudEZyYW1lKCktPmRvY3VtZW50KCkgOiAwOworICAgICAg
ICAgICAgaWYgKCFjaGlsZERvY3VtZW50KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgICAgICBBU1NFUlQoY2hpbGREb2N1bWVudC0+ZnJhbWUoKS0+dmlldygpKTsKKworICAg
ICAgICAgICAgZm91bmRPbmUgfD0gZmluZEludGVyc2VjdGluZ1JlZ2lvbnMoY2hpbGREb2N1bWVu
dCwgaW50ZXJzZWN0aW5nUmVnaW9ucywgcmVtYWluaW5nRmluZ2VyUmVnaW9uKTsKKyAgICAgICAg
fSBlbHNlIGlmIChpc0VsZW1lbnQgJiYgbV90YXJnZXRUeXBlID09IENsaWNrYWJsZUVsZW1lbnQp
IHsKKyAgICAgICAgICAgIGZvdW5kT25lIHw9IGNoZWNrRm9yQ2xpY2thYmxlRWxlbWVudCh0b0Vs
ZW1lbnQoY3VyTm9kZSksIGludGVyc2VjdGluZ1JlZ2lvbnMsIHJlbWFpbmluZ0ZpbmdlclJlZ2lv
biwgbG93ZXN0UG9zaXRpb25lZEVuY2xvc2luZ0xheWVyU29GYXIpOworICAgICAgICB9IGVsc2Ug
aWYgKG1fdGFyZ2V0VHlwZSA9PSBUZXh0KQorICAgICAgICAgICAgZm91bmRPbmUgfD0gY2hlY2tG
b3JUZXh0KGN1ck5vZGUsIGludGVyc2VjdGluZ1JlZ2lvbnMsIHJlbWFpbmluZ0ZpbmdlclJlZ2lv
bik7CisgICAgfQorCisgICAgcmV0dXJuIGZvdW5kT25lOworfQorCitib29sIEZhdEZpbmdlcnM6
OmNoZWNrRm9yQ2xpY2thYmxlRWxlbWVudChFbGVtZW50KiBjdXJFbGVtZW50LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPEludGVyc2VjdGluZ1JlZ2lv
bj4mIGludGVyc2VjdGluZ1JlZ2lvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbiYgcmVtYWluaW5n
RmluZ2VyUmVnaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UmVuZGVyTGF5ZXIqJiBsb3dlc3RQb3NpdGlvbmVkRW5jbG9zaW5nTGF5ZXJTb0ZhcikKK3sKKyAg
ICBBU1NFUlQoY3VyRWxlbWVudCk7CisKKyAgICBib29sIGludGVyc2VjdHMgPSBmYWxzZTsKKyAg
ICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbiBlbGVtZW50UmVnaW9uOworCisg
ICAgYm9vbCBpc0NsaWNrYWJsZUVsZW1lbnQgPSBpc0VsZW1lbnRDbGlja2FibGUoY3VyRWxlbWVu
dCk7CisgICAgaWYgKGlzQ2xpY2thYmxlRWxlbWVudCkgeworICAgICAgICBpZiAoY3VyRWxlbWVu
dC0+aXNMaW5rKCkpIHsKKyAgICAgICAgICAgIC8vIExpbmtzIGNhbiB3cmFwIGxpbmVzLCBhbmQg
aW4gc3VjaCBjYXNlcyBOb2RlOjpnZXRSZWN0KCkgY2FuIGdpdmUgdXMKKyAgICAgICAgICAgIC8v
IG5vdCBhY2N1cmF0ZSByZWN0cywgc2luY2UgaXQgdW5pdGVzIGFsbCBJbmxpbmVCb3gncyByZWN0
cy4gSW4gdGhlc2UKKyAgICAgICAgICAgIC8vIGNhc2VzLCB3ZSBjYW4gcHJvY2VzcyBlYWNoIGxp
bmUgb2YgdGhlIGxpbmsgc2VwYXJhdGVseSB3aXRoIG91cgorICAgICAgICAgICAgLy8gaW50ZXJz
ZWN0aW9uIHJlY3QsIGdldHRpbmcgYSBtb3JlIGFjY3VyYXRlIGNsaWNraW5nLgorICAgICAgICAg
ICAgVmVjdG9yPEZsb2F0UXVhZD4gcXVhZHM7CisgICAgICAgICAgICBjdXJFbGVtZW50LT5yZW5k
ZXJlcigpLT5hYnNvbHV0ZUZvY3VzUmluZ1F1YWRzKHF1YWRzKTsKKworICAgICAgICAgICAgc2l6
ZV90IG4gPSBxdWFkcy5zaXplKCk7CisgICAgICAgICAgICBBU1NFUlQobik7CisKKyAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbjsgKytpKQorICAgICAgICAgICAgICAgIGVsZW1l
bnRSZWdpb24gPSB1bmlvblJlZ2lvbnMoZWxlbWVudFJlZ2lvbiwgQmxhY2tCZXJyeTo6UGxhdGZv
cm06OkludFJlY3QocXVhZHNbaV0uZW5jbG9zaW5nQm91bmRpbmdCb3goKSkpOworICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgIGVsZW1lbnRSZWdpb24gPSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6
SW50UmVjdFJlZ2lvbihjdXJFbGVtZW50LT5yZW5kZXJlcigpLT5hYnNvbHV0ZUJvdW5kaW5nQm94
UmVjdCh0cnVlIC8qdXNlIHRyYW5zZm9ybXMqLykpOworCisgICAgfSBlbHNlCisgICAgICAgIGVs
ZW1lbnRSZWdpb24gPSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbihjdXJFbGVt
ZW50LT5yZW5kZXJlcigpLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCh0cnVlIC8qdXNlIHRyYW5z
Zm9ybXMqLykpOworCisgICAgaWYgKGxvd2VzdFBvc2l0aW9uZWRFbmNsb3NpbmdMYXllclNvRmFy
KSB7CisgICAgICAgIFJlbmRlckxheWVyKiBjdXJFbGVtZW50UmVuZGVyTGF5ZXIgPSBtX3dlYlBh
Z2UtPmVuY2xvc2luZ1Bvc2l0aW9uZWRBbmNlc3Rvck9yU2VsZklmUG9zaXRpb25lZChjdXJFbGVt
ZW50LT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpKTsKKyAgICAgICAgaWYgKGN1ckVsZW1l
bnRSZW5kZXJMYXllciAhPSBsb3dlc3RQb3NpdGlvbmVkRW5jbG9zaW5nTGF5ZXJTb0Zhcikgewor
CisgICAgICAgICAgICAvLyBlbGVtZW50UmVnaW9uIHdpbGwgYWx3YXlzIGJlIGluIGNvbnRlbnRz
IGNvb3JkaW5hdGVzIG9mIGl0cyBjb250YWluZXIgZnJhbWUuIEl0IG5lZWRzIHRvIGJlCisgICAg
ICAgICAgICAvLyBtYXBwZWQgdG8gbWFpbiBmcmFtZSBjb250ZW50cyBjb29yZGluYXRlcyBpbiBv
cmRlciB0byBzdWJ0cmFjdCB0aGUgZmluZ2VyUmVnaW9uLCB0aGVuLgorICAgICAgICAgICAgV2Vi
Q29yZTo6SW50UG9pbnQgZnJhbWVQb3MobV93ZWJQYWdlLT5mcmFtZU9mZnNldChjdXJFbGVtZW50
LT5kb2N1bWVudCgpLT5mcmFtZSgpKSk7CisgICAgICAgICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9y
bTo6SW50UmVjdFJlZ2lvbiBsYXllclJlZ2lvbihCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6SW50UmVj
dChsb3dlc3RQb3NpdGlvbmVkRW5jbG9zaW5nTGF5ZXJTb0Zhci0+cmVuZGVyZXIoKS0+YWJzb2x1
dGVCb3VuZGluZ0JveFJlY3QodHJ1ZS8qdXNlIHRyYW5zZm9ybXMqLykpKTsKKyAgICAgICAgICAg
IGxheWVyUmVnaW9uLm1vdmUoZnJhbWVQb3MueCgpLCBmcmFtZVBvcy55KCkpOworCisgICAgICAg
ICAgICByZW1haW5pbmdGaW5nZXJSZWdpb24gPSBzdWJ0cmFjdFJlZ2lvbnMocmVtYWluaW5nRmlu
Z2VyUmVnaW9uLCBsYXllclJlZ2lvbik7CisKKyAgICAgICAgICAgIGxvd2VzdFBvc2l0aW9uZWRF
bmNsb3NpbmdMYXllclNvRmFyID0gY3VyRWxlbWVudFJlbmRlckxheWVyOworICAgICAgICB9Cisg
ICAgfSBlbHNlCisgICAgICAgIGxvd2VzdFBvc2l0aW9uZWRFbmNsb3NpbmdMYXllclNvRmFyID0g
bV93ZWJQYWdlLT5lbmNsb3NpbmdQb3NpdGlvbmVkQW5jZXN0b3JPclNlbGZJZlBvc2l0aW9uZWQo
Y3VyRWxlbWVudC0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKSk7CisKKyAgICBpZiAoaXND
bGlja2FibGVFbGVtZW50KQorICAgICAgICBpbnRlcnNlY3RzID0gY2hlY2tGaW5nZXJJbnRlcnNl
Y3Rpb24oZWxlbWVudFJlZ2lvbiwgcmVtYWluaW5nRmluZ2VyUmVnaW9uLCBjdXJFbGVtZW50LCBp
bnRlcnNlY3RpbmdSZWdpb25zKTsKKworICAgIHJldHVybiBpbnRlcnNlY3RzOworfQorCitib29s
IEZhdEZpbmdlcnM6OmNoZWNrRm9yVGV4dChOb2RlKiBjdXJOb2RlLCBWZWN0b3I8SW50ZXJzZWN0
aW5nUmVnaW9uPiYgaW50ZXJzZWN0aW5nUmVnaW9ucywgQmxhY2tCZXJyeTo6UGxhdGZvcm06Oklu
dFJlY3RSZWdpb24mIGZpbmdlclJlZ2lvbikKK3sKKyAgICBBU1NFUlQoY3VyTm9kZSk7CisgICAg
aWYgKGlzRmllbGRXaXRoVGV4dChjdXJOb2RlKSkgeworICAgICAgICAvLyBGSVhNRTogRmluZCBh
bGwgdGV4dCBpbiB0aGUgZmllbGQgYW5kIGZpbmQgdGhlIGJlc3Qgd29yZC4KKyAgICAgICAgLy8g
Rm9yIG5vdywgd2Ugd2lsbCBqdXN0IHNlbGVjdCB0aGUgd2hvbGUgZmllbGQuCisgICAgICAgIElu
dFJlY3QgYm91bmRpbmdSZWN0ID0gY3VyTm9kZS0+cmVuZGVyZXIoKS0+YWJzb2x1dGVCb3VuZGlu
Z0JveFJlY3QodHJ1ZSAvKnVzZSB0cmFuc2Zvcm1zKi8pOworICAgICAgICBCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6SW50UmVjdFJlZ2lvbiBub2RlUmVnaW9uKGJvdW5kaW5nUmVjdCk7CisgICAgICAg
IHJldHVybiBjaGVja0ZpbmdlckludGVyc2VjdGlvbihub2RlUmVnaW9uLCBmaW5nZXJSZWdpb24s
IGN1ck5vZGUsIGludGVyc2VjdGluZ1JlZ2lvbnMpOworICAgIH0KKworICAgIGlmIChjdXJOb2Rl
LT5pc1RleHROb2RlKCkpIHsKKyAgICAgICAgV2ViQ29yZTo6VGV4dCogY3VyVGV4dCA9IHN0YXRp
Y19jYXN0PFdlYkNvcmU6OlRleHQqPihjdXJOb2RlKTsKKyAgICAgICAgU3RyaW5nIGFsbFRleHQg
PSBjdXJUZXh0LT53aG9sZVRleHQoKTsKKworICAgICAgICAvLyBJdGVyYXRlIHRocm91Z2ggYWxs
IHdvcmRzLCBicmVha2luZyBhdCB3aGl0ZXNwYWNlLCB0byBmaW5kIHRoZSBib3VuZGluZyBib3gg
b2YgZWFjaCB3b3JkCisgICAgICAgIFRleHRCcmVha0l0ZXJhdG9yKiB3b3JkSXRlcmF0b3IgPSB3
b3JkQnJlYWtJdGVyYXRvcihhbGxUZXh0LmNoYXJhY3RlcnMoKSwgYWxsVGV4dC5sZW5ndGgoKSk7
CisKKyAgICAgICAgaW50IGxhc3RPZmZzZXQgPSB0ZXh0QnJlYWtGaXJzdCh3b3JkSXRlcmF0b3Ip
OworICAgICAgICBpZiAobGFzdE9mZnNldCA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgICAgICBib29sIGZvdW5kT25lID0gZmFsc2U7CisgICAgICAgIGludCBvZmZzZXQ7
CisgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGN1ck5vZGUtPmRvY3VtZW50KCk7CisKKyAg
ICAgICAgd2hpbGUgKChvZmZzZXQgPSB0ZXh0QnJlYWtOZXh0KHdvcmRJdGVyYXRvcikpICE9IC0x
KSB7CisgICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1
bWVudCwgY3VyVGV4dCwgbGFzdE9mZnNldCwgY3VyVGV4dCwgb2Zmc2V0KTsKKyAgICAgICAgICAg
IGlmICghcmFuZ2UtPnRleHQoKS5zdHJpcFdoaXRlU3BhY2UoKS5pc0VtcHR5KCkpIHsKKyNpZiBE
RUJVR19GQVRfRklOR0VSUworICAgICAgICAgICAgICAgIGxvZyhMb2dMZXZlbEluZm8sICJDaGVj
a2luZyB3b3JkICclcyciLCByYW5nZS0+dGV4dCgpLmxhdGluMSgpLmRhdGEoKSk7CisjZW5kaWYK
KyAgICAgICAgICAgICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbiByYW5n
ZVJlZ2lvbihET01TdXBwb3J0Ojp0cmFuc2Zvcm1lZEJvdW5kaW5nQm94Rm9yUmFuZ2UoKnJhbmdl
KSk7CisgICAgICAgICAgICAgICAgZm91bmRPbmUgfD0gY2hlY2tGaW5nZXJJbnRlcnNlY3Rpb24o
cmFuZ2VSZWdpb24sIGZpbmdlclJlZ2lvbiwgY3VyTm9kZSwgaW50ZXJzZWN0aW5nUmVnaW9ucyk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsYXN0T2Zmc2V0ID0gb2Zmc2V0OworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBmb3VuZE9uZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCit2b2lkIEZhdEZpbmdlcnM6OmdldFBhZGRpbmdzKHVuc2lnbmVkJiB0b3AsIHVuc2lnbmVk
JiByaWdodCwgdW5zaWduZWQmIGJvdHRvbSwgdW5zaWduZWQmIGxlZnQpIGNvbnN0Cit7CisgICAg
c3RhdGljIHVuc2lnbmVkIHRvcFBhZGRpbmcgPSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U2V0dGlu
Z3M6OmdldCgpLT50b3BGYXRGaW5nZXJQYWRkaW5nKCk7CisgICAgc3RhdGljIHVuc2lnbmVkIHJp
Z2h0UGFkZGluZyA9IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTZXR0aW5nczo6Z2V0KCktPnJpZ2h0
RmF0RmluZ2VyUGFkZGluZygpOworICAgIHN0YXRpYyB1bnNpZ25lZCBib3R0b21QYWRkaW5nID0g
QmxhY2tCZXJyeTo6UGxhdGZvcm06OlNldHRpbmdzOjpnZXQoKS0+Ym90dG9tRmF0RmluZ2VyUGFk
ZGluZygpOworICAgIHN0YXRpYyB1bnNpZ25lZCBsZWZ0UGFkZGluZyA9IEJsYWNrQmVycnk6OlBs
YXRmb3JtOjpTZXR0aW5nczo6Z2V0KCktPmxlZnRGYXRGaW5nZXJQYWRkaW5nKCk7CisKKyAgICBk
b3VibGUgY3VycmVudFNjYWxlID0gbV93ZWJQYWdlLT5jdXJyZW50U2NhbGUoKTsKKyAgICB0b3Ag
PSB0b3BQYWRkaW5nIC8gY3VycmVudFNjYWxlOworICAgIHJpZ2h0ID0gcmlnaHRQYWRkaW5nIC8g
Y3VycmVudFNjYWxlOworICAgIGJvdHRvbSA9IGJvdHRvbVBhZGRpbmcgLyBjdXJyZW50U2NhbGU7
CisgICAgbGVmdCA9IGxlZnRQYWRkaW5nIC8gY3VycmVudFNjYWxlOworfQorCitIaXRUZXN0UmVz
dWx0IEZhdEZpbmdlcnM6Om5vZGVzRnJvbVJlY3QoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBJ
bnRQb2ludCYgY29udGVudFBvcykgY29uc3QKK3sKKyAgICB1bnNpZ25lZCB0b3BQYWRkaW5nLCBy
aWdodFBhZGRpbmcsIGJvdHRvbVBhZGRpbmcsIGxlZnRQYWRkaW5nOworICAgIGdldFBhZGRpbmdz
KHRvcFBhZGRpbmcsIHJpZ2h0UGFkZGluZywgYm90dG9tUGFkZGluZywgbGVmdFBhZGRpbmcpOwor
CisgICAgSGl0VGVzdFJlcXVlc3QgcmVxdWVzdChIaXRUZXN0UmVxdWVzdDo6UmVhZE9ubHkgfCBI
aXRUZXN0UmVxdWVzdDo6QWN0aXZlIHwgSGl0VGVzdFJlcXVlc3Q6Oklnbm9yZUNsaXBwaW5nKTsK
KyAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdChjb250ZW50UG9zLCB0b3BQYWRkaW5nLCByaWdodFBh
ZGRpbmcsIGJvdHRvbVBhZGRpbmcsIGxlZnRQYWRkaW5nLCBIaXRUZXN0U2hhZG93RE9NKTsKKwor
ICAgIGRvY3VtZW50LT5yZW5kZXJWaWV3KCktPmxheWVyKCktPmhpdFRlc3QocmVxdWVzdCwgcmVz
dWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEZhdEZpbmdlcnM6OmdldFJlbGV2
YW50SW5mb0Zyb21Qb2ludChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEludFBvaW50JiBjb250
ZW50UG9zLCBFbGVtZW50KiYgZWxlbWVudFVuZGVyUG9pbnQsIEVsZW1lbnQqJiBjbGlja2FibGVF
bGVtZW50VW5kZXJQb2ludCkgY29uc3QKK3sKKyAgICBlbGVtZW50VW5kZXJQb2ludCA9IDA7Cisg
ICAgY2xpY2thYmxlRWxlbWVudFVuZGVyUG9pbnQgPSAwOworCisgICAgaWYgKCFkb2N1bWVudCB8
fCAhZG9jdW1lbnQtPnJlbmRlcmVyKCkgfHwgIWRvY3VtZW50LT5mcmFtZSgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdCAgPSBkb2N1bWVudC0+ZnJhbWUoKS0+
ZXZlbnRIYW5kbGVyKCktPmhpdFRlc3RSZXN1bHRBdFBvaW50KGNvbnRlbnRQb3MsIHRydWUgLyph
bGxvd1NoYWRvd0NvbnRlbnQqLyk7CisgICAgTm9kZSogbm9kZSA9IHJlc3VsdC5pbm5lck5vZGUo
KTsKKyAgICB3aGlsZSAobm9kZSAmJiAhbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICBu
b2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpOworCisgICAgZWxlbWVudFVuZGVyUG9pbnQgPSBzdGF0
aWNfY2FzdDxFbGVtZW50Kj4obm9kZSk7CisgICAgY2xpY2thYmxlRWxlbWVudFVuZGVyUG9pbnQg
PSByZXN1bHQuVVJMRWxlbWVudCgpOworfQorCit2b2lkIEZhdEZpbmdlcnM6OnNldFN1Y2Nlc3Nm
dWxGYXRGaW5nZXJzUmVzdWx0KEZhdEZpbmdlcnNSZXN1bHQmIHJlc3VsdCwgTm9kZSogYmVzdE5v
ZGUsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBhZGp1c3RlZFBvaW50KQoreworICAgIHJlc3Vs
dC5tX25vZGVVbmRlckZhdEZpbmdlciA9IGJlc3ROb2RlOworICAgIHJlc3VsdC5tX2FkanVzdGVk
UG9zaXRpb24gPSBhZGp1c3RlZFBvaW50OworICAgIHJlc3VsdC5tX3Bvc2l0aW9uV2FzQWRqdXN0
ZWQgPSB0cnVlOworICAgIHJlc3VsdC5tX2lzVmFsaWQgPSB0cnVlOworCisgICAgYm9vbCBpc1Rl
eHRJbnB1dEVsZW1lbnQgPSBmYWxzZTsKKyAgICBpZiAobV90YXJnZXRUeXBlID09IENsaWNrYWJs
ZUVsZW1lbnQpIHsKKyAgICAgICAgQVNTRVJUKGJlc3ROb2RlLT5pc0VsZW1lbnROb2RlKCkpOwor
ICAgICAgICBFbGVtZW50KiBiZXN0RWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihiZXN0
Tm9kZSk7CisgICAgICAgIGlzVGV4dElucHV0RWxlbWVudCA9IERPTVN1cHBvcnQ6OmlzVGV4dElu
cHV0RWxlbWVudChiZXN0RWxlbWVudCk7CisgICAgfQorICAgIHJlc3VsdC5tX2lzVGV4dElucHV0
ID0gaXNUZXh0SW5wdXRFbGVtZW50OworfQorCit9Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0ZhdEZpbmdlcnMuaCBiL1NvdXJjZS9XZWJL
aXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0ZhdEZpbmdlcnMuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5hYTIyYzMzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvRmF0RmluZ2Vycy5oCkBAIC0wLDAgKzEsMTYx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIFJlc2VhcmNoIEluIE1vdGlvbiBM
aW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8g
dGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpZm5k
ZWYgRmF0RmluZ2Vyc19oCisjZGVmaW5lIEZhdEZpbmdlcnNfaAorCisjaW5jbHVkZSAiSGl0VGVz
dFJlc3VsdC5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisKKyNpbmNsdWRlIDxCbGFja0Jl
cnJ5UGxhdGZvcm1JbnRSZWN0UmVnaW9uLmg+CisKKyNpbmNsdWRlIDx1dGlsaXR5PgorI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgRG9jdW1lbnQ7
CitjbGFzcyBFbGVtZW50OworY2xhc3MgSW50UG9pbnQ7CitjbGFzcyBJbnRSZWN0OworY2xhc3Mg
SW50U2l6ZTsKK2NsYXNzIE5vZGU7Cit9CisKKyNkZWZpbmUgREVCVUdfRkFUX0ZJTkdFUlMgMAor
CituYW1lc3BhY2UgQmxhY2tCZXJyeSB7CituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2Vi
UGFnZVByaXZhdGU7CitjbGFzcyBGYXRGaW5nZXJzOworY2xhc3MgVG91Y2hFdmVudEhhbmRsZXI7
CisKK2NsYXNzIEZhdEZpbmdlcnNSZXN1bHQgeworcHVibGljOgorICAgIEZhdEZpbmdlcnNSZXN1
bHQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHAgPSBXZWJDb3JlOjpJbnRQb2ludDo6emVybygp
KQorICAgICAgICA6IG1fb3JpZ2luYWxQb3NpdGlvbihwKQorICAgICAgICAsIG1fYWRqdXN0ZWRQ
b3NpdGlvbihwKQorICAgICAgICAsIG1fcG9zaXRpb25XYXNBZGp1c3RlZChmYWxzZSkKKyAgICAg
ICAgLCBtX2lzVGV4dElucHV0KGZhbHNlKQorICAgICAgICAsIG1faXNWYWxpZChmYWxzZSkKKyAg
ICAgICAgLCBtX25vZGVVbmRlckZhdEZpbmdlcigwKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lk
IHJlc2V0KCkKKyAgICB7CisgICAgICAgIG1fb3JpZ2luYWxQb3NpdGlvbiA9IG1fYWRqdXN0ZWRQ
b3NpdGlvbiA9IFdlYkNvcmU6OkludFBvaW50Ojp6ZXJvKCk7CisgICAgICAgIG1fcG9zaXRpb25X
YXNBZGp1c3RlZCA9IGZhbHNlOworICAgICAgICBtX2lzVGV4dElucHV0ID0gZmFsc2U7CisgICAg
ICAgIG1faXNWYWxpZCA9IGZhbHNlOworICAgICAgICBtX25vZGVVbmRlckZhdEZpbmdlciA9IDA7
CisgICAgfQorCisgICAgV2ViQ29yZTo6SW50UG9pbnQgb3JpZ2luUG9zaXRpb24oKSBjb25zdCB7
IHJldHVybiBtX29yaWdpbmFsUG9zaXRpb247IH0KKyAgICBXZWJDb3JlOjpJbnRQb2ludCBhZGp1
c3RlZFBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hZGp1c3RlZFBvc2l0aW9uOyB9CisgICAg
Ym9vbCBwb3NpdGlvbldhc0FkanVzdGVkKCkgY29uc3QgeyByZXR1cm4gbV9pc1ZhbGlkICYmIG1f
cG9zaXRpb25XYXNBZGp1c3RlZDsgfQorICAgIGJvb2wgaXNUZXh0SW5wdXQoKSBjb25zdCB7IHJl
dHVybiBtX2lzVmFsaWQgJiYgISFtX25vZGVVbmRlckZhdEZpbmdlciAmJiBtX2lzVGV4dElucHV0
OyB9CisgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gbV9pc1ZhbGlkOyB9CisgICAg
V2ViQ29yZTo6Tm9kZSogdmFsaWROb2RlKCkgY29uc3QgeyByZXR1cm4gbV9ub2RlVW5kZXJGYXRG
aW5nZXIgJiYgbV9ub2RlVW5kZXJGYXRGaW5nZXItPmluRG9jdW1lbnQoKSA/IG1fbm9kZVVuZGVy
RmF0RmluZ2VyLmdldCgpIDogMDsgfQorICAgIFdlYkNvcmU6OkVsZW1lbnQqIG5vZGVBc0VsZW1l
bnRJZkFwcGxpY2FibGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFdlYkNvcmU6OkVsZW1lbnQqPihtX25vZGVVbmRlckZhdEZpbmdlciAmJiBtX25vZGVVbmRlckZh
dEZpbmdlci0+aW5Eb2N1bWVudCgpICYmIG1fbm9kZVVuZGVyRmF0RmluZ2VyLT5pc0VsZW1lbnRO
b2RlKCkgPyBtX25vZGVVbmRlckZhdEZpbmdlci5nZXQoKSA6IDApOworICAgIH0KKworcHJpdmF0
ZToKKyAgICBmcmllbmQgY2xhc3MgQmxhY2tCZXJyeTo6V2ViS2l0OjpGYXRGaW5nZXJzOworICAg
IGZyaWVuZCBjbGFzcyBCbGFja0JlcnJ5OjpXZWJLaXQ6OlRvdWNoRXZlbnRIYW5kbGVyOworCisg
ICAgV2ViQ29yZTo6SW50UG9pbnQgbV9vcmlnaW5hbFBvc2l0aW9uOyAvLyBNYWluIGZyYW1lIGNv
bnRlbnRzIGNvb3JkaW5hdGVzLgorICAgIFdlYkNvcmU6OkludFBvaW50IG1fYWRqdXN0ZWRQb3Np
dGlvbjsgLy8gTWFpbiBmcmFtZSBjb250ZW50cyBjb29yZGluYXRlcy4KKyAgICBib29sIG1fcG9z
aXRpb25XYXNBZGp1c3RlZDsKKyAgICBib29sIG1faXNUZXh0SW5wdXQ7IC8vIENoZWNrIGlmIHRo
ZSBlbGVtZW50IHVuZGVyIHRoZSB0b3VjaCBwb2ludCB3aWxsIHJlcXVpcmUgYSBWS0IgYmUgZGlz
cGxheWVkIHNvIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSB0b3VjaCBkb3du
IGNhbiBiZSBzdXBwcmVzc2VkLgorICAgIGJvb2wgbV9pc1ZhbGlkOworICAgIFJlZlB0cjxXZWJD
b3JlOjpOb2RlPiBtX25vZGVVbmRlckZhdEZpbmdlcjsKK307CisKK2NsYXNzIEZhdEZpbmdlcnMg
eworcHVibGljOgorICAgIGVudW0gVGFyZ2V0VHlwZSB7IENsaWNrYWJsZUVsZW1lbnQsIFRleHQg
fTsKKworICAgIEZhdEZpbmdlcnMoV2ViUGFnZVByaXZhdGUqIHdlYnBhZ2UsIGNvbnN0IFdlYkNv
cmU6OkludFBvaW50JiBjb250ZW50UG9zLCBUYXJnZXRUeXBlKTsKKyAgICB+RmF0RmluZ2Vycygp
OworCisgICAgY29uc3QgRmF0RmluZ2Vyc1Jlc3VsdCBmaW5kQmVzdFBvaW50KCk7CisKKyNpZiBE
RUJVR19GQVRfRklOR0VSUworICAgIC8vIFRoZXNlIGRlYnVnIHZhcnMgYXJlIGFsbCBpbiBjb250
ZW50IGNvb3JkaW5hdGVzLiBUaGV5IGFyZSBwdWJsaWMgc28KKyAgICAvLyB0aGV5IGNhbiBiZSBy
ZWFkIGZyb20gQmFja2luZ1N0b3JlLCB3aGljaCB3aWxsIGRyYXcgYSB2aXNpYmxlIHJlY3QKKyAg
ICAvLyBhcm91bmQgdGhlIGZhdCBmaW5nZXJzIGFyZWEuCisgICAgc3RhdGljIFdlYkNvcmU6Oklu
dFJlY3QgbV9kZWJ1Z0ZhdEZpbmdlclJlY3Q7CisgICAgc3RhdGljIFdlYkNvcmU6OkludFBvaW50
IG1fZGVidWdGYXRGaW5nZXJDbGlja1Bvc2l0aW9uOworICAgIHN0YXRpYyBXZWJDb3JlOjpJbnRQ
b2ludCBtX2RlYnVnRmF0RmluZ2VyQWRqdXN0ZWRQb3NpdGlvbjsKKyNlbmRpZgorCitwcml2YXRl
OgorCisgICAgZW51bSBNYXRjaGluZ0FwcHJvYWNoRm9yQ2xpY2thYmxlIHsgQ2xpY2thYmxlQnlE
ZWZhdWx0ID0gMCwgTWFkZUNsaWNrYWJsZUJ5VGhlV2VicGFnZSwgRG9uZSB9OworCisgICAgdHlw
ZWRlZiBzdGQ6OnBhaXI8V2ViQ29yZTo6Tm9kZSosIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpJbnRS
ZWN0UmVnaW9uPiBJbnRlcnNlY3RpbmdSZWdpb247CisKKyAgICBib29sIGNoZWNrRmluZ2VySW50
ZXJzZWN0aW9uKGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uJiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3Jt
OjpJbnRSZWN0UmVnaW9uJiByZW1haW5pbmdGaW5nZXJSZWdpb24sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBXZWJDb3JlOjpOb2RlKiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFZlY3RvcjxJbnRlcnNlY3RpbmdSZWdpb24+JiBpbnRlcnNlY3RpbmdSZWdpb25z
KTsKKworICAgIGJvb2wgZmluZEludGVyc2VjdGluZ1JlZ2lvbnMoV2ViQ29yZTo6RG9jdW1lbnQq
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPEludGVyc2VjdGluZ1Jl
Z2lvbj4mIGludGVyc2VjdGluZ1JlZ2lvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbiYgcmVtYWluaW5nRmluZ2Vy
UmVnaW9uKTsKKworICAgIGJvb2wgY2hlY2tGb3JDbGlja2FibGVFbGVtZW50KFdlYkNvcmU6OkVs
ZW1lbnQqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxJbnRlcnNl
Y3RpbmdSZWdpb24+JiBpbnRlcnNlY3RpbmdSZWdpb25zLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uJiByZW1haW5p
bmdGaW5nZXJSZWdpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViQ29y
ZTo6UmVuZGVyTGF5ZXIqJiBsb3dlc3RQb3NpdGlvbmVkRW5jbG9zaW5nTGF5ZXJTb0Zhcik7CisK
KyAgICBib29sIGNoZWNrRm9yVGV4dChXZWJDb3JlOjpOb2RlKiwKKyAgICAgICAgICAgICAgICAg
ICAgICBWZWN0b3I8SW50ZXJzZWN0aW5nUmVnaW9uPiYgaW50ZXJzZWN0aW5nUmVnaW9ucywKKyAg
ICAgICAgICAgICAgICAgICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbiYg
ZmluZ2VyUmVnaW9uKTsKKworICAgIHZvaWQgc2V0U3VjY2Vzc2Z1bEZhdEZpbmdlcnNSZXN1bHQo
RmF0RmluZ2Vyc1Jlc3VsdCYsIFdlYkNvcmU6Ok5vZGUqLCBjb25zdCBXZWJDb3JlOjpJbnRQb2lu
dCYpOworCisgICAgLy8gSXQgbWltaWNzIERvY3VtZW50Ojpub2Rlc0Zyb21SZWN0LCBidXQgaGFz
IGEgZGlmZmVyZW50IHJldHVybiB2YWx1ZSB0byBmaXQgb3VyIG5lZWRzLgorICAgIFdlYkNvcmU6
OkhpdFRlc3RSZXN1bHQgbm9kZXNGcm9tUmVjdChXZWJDb3JlOjpEb2N1bWVudCosIGNvbnN0IFdl
YkNvcmU6OkludFBvaW50JikgY29uc3Q7CisKKyAgICAvLyBJdCBtaW1pY3MgRG9jdW1lbnQ6OmVs
ZW1lbnRGcm9tUG9pbnQsIGJ1dCByZWN1cnNpdmVseSBoaXQtdGVzdHMgaW4gY2FzZSBhbiBpbm5l
ciBmcmFtZSBpcyBmb3VuZC4KKyAgICB2b2lkIGdldFJlbGV2YW50SW5mb0Zyb21Qb2ludChXZWJD
b3JlOjpEb2N1bWVudCosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
V2ViQ29yZTo6SW50UG9pbnQmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdl
YkNvcmU6OkVsZW1lbnQqJiBlbGVtZW50VW5kZXJQb2ludCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBXZWJDb3JlOjpFbGVtZW50KiYgY2xpY2thYmxlRWxlbWVudFVuZGVyUG9p
bnQpIGNvbnN0OworCisgICAgYm9vbCBpc0VsZW1lbnRDbGlja2FibGUoV2ViQ29yZTo6RWxlbWVu
dCopIGNvbnN0OworCisgICAgaW5saW5lIFdlYkNvcmU6OkludFJlY3QgZmluZ2VyUmVjdEZvclBv
aW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JikgY29uc3Q7CisgICAgdm9pZCBnZXRQYWRkaW5n
cyh1bnNpZ25lZCYgdG9wLCB1bnNpZ25lZCYgcmlnaHQsIHVuc2lnbmVkJiBib3R0b20sIHVuc2ln
bmVkJiBsZWZ0KSBjb25zdDsKKworICAgIFdlYlBhZ2VQcml2YXRlKiBtX3dlYlBhZ2U7CisgICAg
V2ViQ29yZTo6SW50UG9pbnQgbV9jb250ZW50UG9zOworICAgIFRhcmdldFR5cGUgbV90YXJnZXRU
eXBlOworICAgIE1hdGNoaW5nQXBwcm9hY2hGb3JDbGlja2FibGUgbV9tYXRjaGluZ0FwcHJvYWNo
OworfTsKKworfQorfQorCisjZW5kaWYgLy8gRmF0RmluZ2Vyc19oCisKLS0gCjEuNy4xCgo=
</data>
<flag name="review"
          id="129514"
          type_id="1"
          status="-"
          setter="rwlbuis"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127398</attachid>
            <date>2012-02-16 09:54:32 -0800</date>
            <delta_ts>2012-02-16 16:04:52 -0800</delta_ts>
            <desc>(landed r107990) patch_3/3 v1 - InRegionScrollableArea</desc>
            <filename>0003-2012-02-16-Antonio-Gomes-agomes-rim.com.patch</filename>
            <type>text/plain</type>
            <size>10652</size>
            <attacher name="Antonio Gomes">tonikitoo</attacher>
            
              <data encoding="base64">RnJvbSAwZTllOTZlZjI4NTU4M2E5ODY5NDc2MGRlODE3Zjk5OWRlMjliZGUzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbnRvbmlvIEdvbWVzIDxhZ29tZXNAcmltLmNvbT4KRGF0ZTog
VGh1LCAxNiBGZWIgMjAxMiAxMjo0Mzo0OCAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggMy8zXSAyMDEy
LTAyLTE2ICBBbnRvbmlvIEdvbWVzICA8YWdvbWVzQHJpbS5jb20+CgogICAgICAgIFtCbGFja0Jl
cnJ5XSBVcHN0cmVhbSB0b3VjaCBoYW5kbGluZyByZWxhdGVkIGNsYXNzZXMKICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg1MDkKCiAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCgogICAgICAgIEluUmVnaW9uU2Nyb2xsYWJsZUFyZWEgc3Bl
Y2lhbGl6ZXMgdGhlIEJsYWNrQmVycnkgc3BlY2lmaWMgU2Nyb2xsVmlld0Jhc2UsCiAgICAgICAg
d29ya2luZyBhcyBhIHJlYWQtb25seSB3cmFwcGVyIG9iamVjdCBmb3IgYSBzY3JvbGxhYmxlIGFy
ZWFzIGluIHRoZSBwYWdlLgogICAgICAgIEl0IGlzIHVzZWQgaW4gb3VyIGNsaWVudCBzaWRlIHRv
IGNvbnRyb2wgaW4tcmVnaW9uIHNjcm9sbGluZyAoc2Nyb2xsYWJsZSBib3hlcywKICAgICAgICBp
bm5lciBmcmFtZXMsIGV0YykuCgogICAgICAgIEluaXRpYWwgdXBzdHJlYW0uCgogICAgICAgICog
V2ViS2l0U3VwcG9ydC9JblJlZ2lvblNjcm9sbGFibGVBcmVhLmNwcDogQWRkZWQuCiAgICAgICAg
KFdlYktpdCk6CiAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6SW5SZWdpb25TY3JvbGxhYmxl
QXJlYTo6SW5SZWdpb25TY3JvbGxhYmxlQXJlYSk6CiAgICAgICAgKEJsYWNrQmVycnk6OldlYktp
dDo6SW5SZWdpb25TY3JvbGxhYmxlQXJlYTo6Y2FsY3VsYXRlTWluaW11bVNjcm9sbFBvc2l0aW9u
KToKICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpJblJlZ2lvblNjcm9sbGFibGVBcmVhOjpj
YWxjdWxhdGVNYXhpbXVtU2Nyb2xsUG9zaXRpb24pOgogICAgICAgIChCbGFja0JlcnJ5OjpXZWJL
aXQ6OkluUmVnaW9uU2Nyb2xsYWJsZUFyZWE6OmxheWVyKToKICAgICAgICAoQmxhY2tCZXJyeSk6
CiAgICAgICAgKiBXZWJLaXRTdXBwb3J0L0luUmVnaW9uU2Nyb2xsYWJsZUFyZWEuaDogQWRkZWQu
CiAgICAgICAgKFdlYkNvcmUpOgogICAgICAgIChXZWJLaXQpOgogICAgICAgIChJblJlZ2lvblNj
cm9sbGFibGVBcmVhKToKLS0tCiBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQ2hhbmdlTG9nICAg
ICAgICAgICAgICAgICB8ICAgMjYgKysrKwogLi4uL1dlYktpdFN1cHBvcnQvSW5SZWdpb25TY3Jv
bGxhYmxlQXJlYS5jcHAgICAgICAgfCAgMTM4ICsrKysrKysrKysrKysrKysrKysrCiAuLi4vV2Vi
S2l0U3VwcG9ydC9JblJlZ2lvblNjcm9sbGFibGVBcmVhLmggICAgICAgICB8ICAgMzkgKysrKysr
CiAzIGZpbGVzIGNoYW5nZWQsIDIwMyBpbnNlcnRpb25zKCspLCAwIGRlbGV0aW9ucygtKQogY3Jl
YXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0lu
UmVnaW9uU2Nyb2xsYWJsZUFyZWEuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktp
dC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5SZWdpb25TY3JvbGxhYmxlQXJlYS5oCgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXQvYmxhY2tiZXJyeS9DaGFuZ2VMb2cKaW5kZXggYTE5ZWU3Ny4uMmQ2YmE4OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L2JsYWNrYmVycnkvQ2hhbmdlTG9nCkBAIC01LDYgKzUsMzIgQEAKIAogICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KIAorICAgICAgICBJblJlZ2lvblNjcm9sbGFibGVBcmVhIHNw
ZWNpYWxpemVzIHRoZSBCbGFja0JlcnJ5IHNwZWNpZmljIFNjcm9sbFZpZXdCYXNlLAorICAgICAg
ICB3b3JraW5nIGFzIGEgcmVhZC1vbmx5IHdyYXBwZXIgb2JqZWN0IGZvciBhIHNjcm9sbGFibGUg
YXJlYXMgaW4gdGhlIHBhZ2UuCisgICAgICAgIEl0IGlzIHVzZWQgaW4gb3VyIGNsaWVudCBzaWRl
IHRvIGNvbnRyb2wgaW4tcmVnaW9uIHNjcm9sbGluZyAoc2Nyb2xsYWJsZSBib3hlcywKKyAgICAg
ICAgaW5uZXIgZnJhbWVzLCBldGMpLgorCisgICAgICAgIEluaXRpYWwgdXBzdHJlYW0uCisKKyAg
ICAgICAgKiBXZWJLaXRTdXBwb3J0L0luUmVnaW9uU2Nyb2xsYWJsZUFyZWEuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkluUmVnaW9u
U2Nyb2xsYWJsZUFyZWE6OkluUmVnaW9uU2Nyb2xsYWJsZUFyZWEpOgorICAgICAgICAoQmxhY2tC
ZXJyeTo6V2ViS2l0OjpJblJlZ2lvblNjcm9sbGFibGVBcmVhOjpjYWxjdWxhdGVNaW5pbXVtU2Ny
b2xsUG9zaXRpb24pOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpJblJlZ2lvblNjcm9s
bGFibGVBcmVhOjpjYWxjdWxhdGVNYXhpbXVtU2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoQmxh
Y2tCZXJyeTo6V2ViS2l0OjpJblJlZ2lvblNjcm9sbGFibGVBcmVhOjpsYXllcik6CisgICAgICAg
IChCbGFja0JlcnJ5KToKKyAgICAgICAgKiBXZWJLaXRTdXBwb3J0L0luUmVnaW9uU2Nyb2xsYWJs
ZUFyZWEuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYktpdCk6Cisg
ICAgICAgIChJblJlZ2lvblNjcm9sbGFibGVBcmVhKToKKworMjAxMi0wMi0xNiAgQW50b25pbyBH
b21lcyAgPGFnb21lc0ByaW0uY29tPgorCisgICAgICAgIFtCbGFja0JlcnJ5XSBVcHN0cmVhbSB0
b3VjaCBoYW5kbGluZyByZWxhdGVkIGNsYXNzZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTc4NTA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKICAgICAgICAgRmF0RmluZ2VycyBpcyB0aGUgY2xhc3MgcmVzcG9uc2libGUg
dG8gdGhlIHdob2xlIHRvdWNoCiAgICAgICAgIGFjY3VyYWN5IG9mIHRoZSBCbGFja0JlcnJ5IHBv
cnQuIEluaXRpYWwgdXBzdHJlYW0uCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2ti
ZXJyeS9XZWJLaXRTdXBwb3J0L0luUmVnaW9uU2Nyb2xsYWJsZUFyZWEuY3BwIGIvU291cmNlL1dl
YktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5SZWdpb25TY3JvbGxhYmxlQXJlYS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJjZjM0MQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0luUmVnaW9uU2Ny
b2xsYWJsZUFyZWEuY3BwCkBAIC0wLDAgKzEsMTM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDExIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEw
LTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJblJlZ2lv
blNjcm9sbGFibGVBcmVhLmgiCisKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIk5vdElt
cGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUmVuZGVyQm94LmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5
ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJWaWV3Lmgi
CisjaW5jbHVkZSAiV2ViUGFnZV9wLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitu
YW1lc3BhY2UgQmxhY2tCZXJyeSB7CituYW1lc3BhY2UgV2ViS2l0IHsKKworSW5SZWdpb25TY3Jv
bGxhYmxlQXJlYTo6SW5SZWdpb25TY3JvbGxhYmxlQXJlYSgpCisgICAgOiBtX3dlYlBhZ2UoMCkK
KyAgICAsIG1fbGF5ZXIoMCkKK3sKK30KKworSW5SZWdpb25TY3JvbGxhYmxlQXJlYTo6SW5SZWdp
b25TY3JvbGxhYmxlQXJlYShXZWJQYWdlUHJpdmF0ZSogd2ViUGFnZSwgUmVuZGVyTGF5ZXIqIGxh
eWVyKQorICAgIDogbV93ZWJQYWdlKHdlYlBhZ2UpCisgICAgLCBtX2xheWVyKGxheWVyKQorewor
ICAgIEFTU0VSVCh3ZWJQYWdlKTsKKyAgICBBU1NFUlQobGF5ZXIpOworICAgIG1faXNOdWxsID0g
ZmFsc2U7CisKKyAgICAvLyBGSVhNRTogQWRkIGFuIEFTU0VSVCBoZXJlIGFzIHRoZSAnbGF5ZXIn
IG11c3QgYmUgc2Nyb2xsYWJsZS4KKworICAgIFJlbmRlck9iamVjdCogbGF5ZXJSZW5kZXJlciA9
IGxheWVyLT5yZW5kZXJlcigpOworICAgIEFTU0VSVChsYXllclJlbmRlcmVyKTsKKworICAgIGlm
IChsYXllclJlbmRlcmVyLT5pc1JlbmRlclZpZXcoKSkgeyAvLyAjZG9jdW1lbnQgY2FzZQorCisg
ICAgICAgIEZyYW1lVmlldyogdmlldyA9IHRvUmVuZGVyVmlldyhsYXllclJlbmRlcmVyKS0+ZnJh
bWVWaWV3KCk7CisgICAgICAgIEFTU0VSVCh2aWV3KTsKKworICAgICAgICBGcmFtZSogZnJhbWUg
PSB2aWV3LT5mcmFtZSgpOworICAgICAgICBBU1NFUlRfVU5VU0VEKGZyYW1lLCBmcmFtZSk7CisK
KyAgICAgICAgbV9zY3JvbGxQb3NpdGlvbiA9IG1fd2ViUGFnZS0+bWFwVG9UcmFuc2Zvcm1lZCh2
aWV3LT5zY3JvbGxQb3NpdGlvbigpKTsKKyAgICAgICAgbV9jb250ZW50c1NpemUgPSBtX3dlYlBh
Z2UtPm1hcFRvVHJhbnNmb3JtZWQodmlldy0+Y29udGVudHNTaXplKCkpOworICAgICAgICBtX3Zp
ZXdwb3J0UmVjdCA9IG1fd2ViUGFnZS0+bWFwVG9UcmFuc2Zvcm1lZCh2aWV3LT52aXNpYmxlQ29u
dGVudFJlY3QoZmFsc2UgLyppbmNsdWRlU2Nyb2xsYmFycyovKSk7CisKKyAgICAgICAgbV92aXNp
YmxlV2luZG93UmVjdCA9IG1fd2ViUGFnZS0+bWFwVG9UcmFuc2Zvcm1lZChtX3dlYlBhZ2UtPmdl
dFJlY3Vyc2l2ZVZpc2libGVXaW5kb3dSZWN0KHZpZXcpKTsKKyAgICAgICAgSW50UmVjdCB0cmFu
c2Zvcm1lZFdpbmRvd1JlY3QgPSBJbnRSZWN0KEludFBvaW50KDAsIDApLCBtX3dlYlBhZ2UtPnRy
YW5zZm9ybWVkVmlld3BvcnRTaXplKCkpOworICAgICAgICBtX3Zpc2libGVXaW5kb3dSZWN0Lmlu
dGVyc2VjdCh0cmFuc2Zvcm1lZFdpbmRvd1JlY3QpOworCisgICAgICAgIG1fc2Nyb2xsc0hvcml6
b250YWxseSA9IHZpZXctPmNvbnRlbnRzV2lkdGgoKSA+IHZpZXctPnZpc2libGVXaWR0aCgpOwor
ICAgICAgICBtX3Njcm9sbHNWZXJ0aWNhbGx5ID0gdmlldy0+Y29udGVudHNIZWlnaHQoKSA+IHZp
ZXctPnZpc2libGVIZWlnaHQoKTsKKworICAgICAgICBtX21pbmltdW1TY3JvbGxQb3NpdGlvbiA9
IG1fd2ViUGFnZS0+bWFwVG9UcmFuc2Zvcm1lZChjYWxjdWxhdGVNaW5pbXVtU2Nyb2xsUG9zaXRp
b24oCisgICAgICAgICAgICB2aWV3LT52aXNpYmxlQ29udGVudFJlY3QoKS5zaXplKCksCisgICAg
ICAgICAgICAwLjAgLypvdmVyc2Nyb2xsTGltaXQqLykpOworICAgICAgICBtX21heGltdW1TY3Jv
bGxQb3NpdGlvbiA9IG1fd2ViUGFnZS0+bWFwVG9UcmFuc2Zvcm1lZChjYWxjdWxhdGVNYXhpbXVt
U2Nyb2xsUG9zaXRpb24oCisgICAgICAgICAgICB2aWV3LT52aXNpYmxlQ29udGVudFJlY3QoKS5z
aXplKCksCisgICAgICAgICAgICB2aWV3LT5jb250ZW50c1NpemUoKSwKKyAgICAgICAgICAgIDAu
MCAvKm92ZXJzY3JvbGxMaW1pdCovKSk7CisKKyAgICB9IGVsc2UgeyAvLyBSZW5kZXJCb3gtYmFz
ZWQgZWxlbWVudHMgY2FzZSAoc2Nyb2xsYWJsZSBib3hlcyAoZGl2J3MsIHAncywgdGV4dGFyZWEn
cywgZXRjKSkuCisKKyAgICAgICAgUmVuZGVyQm94KiBib3ggPSBtX2xheWVyLT5yZW5kZXJCb3go
KTsKKyAgICAgICAgQVNTRVJUKGJveCk7CisgICAgICAgIEFTU0VSVChib3gtPmNhbkJlU2Nyb2xs
ZWRBbmRIYXNTY3JvbGxhYmxlQXJlYSgpKTsKKworICAgICAgICBTY3JvbGxhYmxlQXJlYSogc2Ny
b2xsYWJsZUFyZWEgPSBzdGF0aWNfY2FzdDxTY3JvbGxhYmxlQXJlYSo+KG1fbGF5ZXIpOworICAg
ICAgICBtX3Njcm9sbFBvc2l0aW9uID0gbV93ZWJQYWdlLT5tYXBUb1RyYW5zZm9ybWVkKHNjcm9s
bGFibGVBcmVhLT5zY3JvbGxQb3NpdGlvbigpKTsKKyAgICAgICAgbV9jb250ZW50c1NpemUgPSBt
X3dlYlBhZ2UtPm1hcFRvVHJhbnNmb3JtZWQoc2Nyb2xsYWJsZUFyZWEtPmNvbnRlbnRzU2l6ZSgp
KTsKKyAgICAgICAgbV92aWV3cG9ydFJlY3QgPSBtX3dlYlBhZ2UtPm1hcFRvVHJhbnNmb3JtZWQo
c2Nyb2xsYWJsZUFyZWEtPnZpc2libGVDb250ZW50UmVjdChmYWxzZSAvKmluY2x1ZGVTY3JvbGxi
YXJzKi8pKTsKKworICAgICAgICBtX3Zpc2libGVXaW5kb3dSZWN0ID0gbV9sYXllci0+cmVuZGVy
ZXIoKS0+YWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0KCk7CisgICAgICAgIG1fdmlzaWJsZVdp
bmRvd1JlY3QgPSBtX2xheWVyLT5yZW5kZXJlcigpLT5mcmFtZSgpLT52aWV3KCktPmNvbnRlbnRz
VG9XaW5kb3cobV92aXNpYmxlV2luZG93UmVjdCk7CisgICAgICAgIEludFJlY3QgdmlzaWJsZUZy
YW1lV2luZG93UmVjdCA9IG1fd2ViUGFnZS0+Z2V0UmVjdXJzaXZlVmlzaWJsZVdpbmRvd1JlY3Qo
bV9sYXllci0+cmVuZGVyZXIoKS0+ZnJhbWUoKS0+dmlldygpKTsKKyAgICAgICAgbV92aXNpYmxl
V2luZG93UmVjdC5pbnRlcnNlY3QodmlzaWJsZUZyYW1lV2luZG93UmVjdCk7CisgICAgICAgIG1f
dmlzaWJsZVdpbmRvd1JlY3QgPSBtX3dlYlBhZ2UtPm1hcFRvVHJhbnNmb3JtZWQobV92aXNpYmxl
V2luZG93UmVjdCk7CisgICAgICAgIEludFJlY3QgdHJhbnNmb3JtZWRXaW5kb3dSZWN0ID0gSW50
UmVjdChJbnRQb2ludCgwLCAwKSwgbV93ZWJQYWdlLT50cmFuc2Zvcm1lZFZpZXdwb3J0U2l6ZSgp
KTsKKyAgICAgICAgbV92aXNpYmxlV2luZG93UmVjdC5pbnRlcnNlY3QodHJhbnNmb3JtZWRXaW5k
b3dSZWN0KTsKKworICAgICAgICBtX3Njcm9sbHNIb3Jpem9udGFsbHkgPSBib3gtPnNjcm9sbFdp
ZHRoKCkgIT0gYm94LT5jbGllbnRXaWR0aCgpICYmIGJveC0+c2Nyb2xsc092ZXJmbG93WCgpOwor
ICAgICAgICBtX3Njcm9sbHNWZXJ0aWNhbGx5ID0gYm94LT5zY3JvbGxIZWlnaHQoKSAhPSBib3gt
PmNsaWVudEhlaWdodCgpICYmIGJveC0+c2Nyb2xsc092ZXJmbG93WSgpOworCisgICAgICAgIG1f
bWluaW11bVNjcm9sbFBvc2l0aW9uID0gbV93ZWJQYWdlLT5tYXBUb1RyYW5zZm9ybWVkKGNhbGN1
bGF0ZU1pbmltdW1TY3JvbGxQb3NpdGlvbigKKyAgICAgICAgICAgIFBsYXRmb3JtOjpJbnRTaXpl
KGJveC0+Y2xpZW50V2lkdGgoKSwgYm94LT5jbGllbnRIZWlnaHQoKSksCisgICAgICAgICAgICAw
LjAgLypvdmVyc2Nyb2xsTGltaXQqLykpOworICAgICAgICBtX21heGltdW1TY3JvbGxQb3NpdGlv
biA9IG1fd2ViUGFnZS0+bWFwVG9UcmFuc2Zvcm1lZChjYWxjdWxhdGVNYXhpbXVtU2Nyb2xsUG9z
aXRpb24oCisgICAgICAgICAgICBQbGF0Zm9ybTo6SW50U2l6ZShib3gtPmNsaWVudFdpZHRoKCks
IGJveC0+Y2xpZW50SGVpZ2h0KCkpLAorICAgICAgICAgICAgUGxhdGZvcm06OkludFNpemUoYm94
LT5zY3JvbGxXaWR0aCgpLCBib3gtPnNjcm9sbEhlaWdodCgpKSwKKyAgICAgICAgICAgIDAuMCAv
Km92ZXJzY3JvbGxMaW1pdCovKSk7CisgICAgfQorfQorCitQbGF0Zm9ybTo6SW50UG9pbnQgSW5S
ZWdpb25TY3JvbGxhYmxlQXJlYTo6Y2FsY3VsYXRlTWluaW11bVNjcm9sbFBvc2l0aW9uKGNvbnN0
IFBsYXRmb3JtOjpJbnRTaXplJiB2aWV3cG9ydFNpemUsIGZsb2F0IG92ZXJzY3JvbGxMaW1pdEZh
Y3RvcikgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogRXZlbnR1YWxseSB3ZSBzaG91bGQgc3VwcG9y
dCBvdmVyc2Nyb2xsIGxpa2UgaU9TNSBkb2VzLgorICAgIEFTU0VSVCghYWxsb3dzT3ZlcnNjcm9s
bCgpKTsKKworICAgIHJldHVybiBQbGF0Zm9ybTo6SW50UG9pbnQoLSh2aWV3cG9ydFNpemUud2lk
dGgoKSAqIG92ZXJzY3JvbGxMaW1pdEZhY3RvciksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAtKHZpZXdwb3J0U2l6ZS5oZWlnaHQoKSAqIG92ZXJzY3JvbGxMaW1pdEZhY3RvcikpOwor
fQorCitQbGF0Zm9ybTo6SW50UG9pbnQgSW5SZWdpb25TY3JvbGxhYmxlQXJlYTo6Y2FsY3VsYXRl
TWF4aW11bVNjcm9sbFBvc2l0aW9uKGNvbnN0IFBsYXRmb3JtOjpJbnRTaXplJiB2aWV3cG9ydFNp
emUsIGNvbnN0IFBsYXRmb3JtOjpJbnRTaXplJiBjb250ZW50c1NpemUsIGZsb2F0IG92ZXJzY3Jv
bGxMaW1pdEZhY3RvcikgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogRXZlbnR1YWxseSB3ZSBzaG91
bGQgc3VwcG9ydCBvdmVyc2Nyb2xsIGxpa2UgaU9TNSBkb2VzLgorICAgIEFTU0VSVCghYWxsb3dz
T3ZlcnNjcm9sbCgpKTsKKworICAgIHJldHVybiBQbGF0Zm9ybTo6SW50UG9pbnQoc3RkOjptYXgo
Y29udGVudHNTaXplLndpZHRoKCkgLSB2aWV3cG9ydFNpemUud2lkdGgoKSwgMCkgKyBvdmVyc2Ny
b2xsTGltaXRGYWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heChj
b250ZW50c1NpemUuaGVpZ2h0KCkgLSB2aWV3cG9ydFNpemUuaGVpZ2h0KCksIDApICsgb3ZlcnNj
cm9sbExpbWl0RmFjdG9yKTsKK30KKworUmVuZGVyTGF5ZXIqIEluUmVnaW9uU2Nyb2xsYWJsZUFy
ZWE6OmxheWVyKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIW1faXNOdWxsKTsKKyAgICByZXR1cm4g
bV9sYXllcjsKK30KK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5
L1dlYktpdFN1cHBvcnQvSW5SZWdpb25TY3JvbGxhYmxlQXJlYS5oIGIvU291cmNlL1dlYktpdC9i
bGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5SZWdpb25TY3JvbGxhYmxlQXJlYS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwM2NiOGIKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JblJlZ2lvblNjcm9sbGFibGVB
cmVhLmgKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4g
TW90aW9uIExpbWl0ZWQgMjAwOS0yMDExLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICovCisKKyNp
Zm5kZWYgSW5SZWdpb25TY3JvbGxhYmxlQXJlYV9oCisjZGVmaW5lIEluUmVnaW9uU2Nyb2xsYWJs
ZUFyZWFfaAorCisjaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtUHJpbWl0aXZlcy5oPgorI2lu
Y2x1ZGUgPGludGVyYWN0aW9uL1Njcm9sbFZpZXdCYXNlLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKK2NsYXNzIFJlbmRlckxheWVyOworfQorCituYW1lc3BhY2UgQmxhY2tCZXJyeSB7CituYW1l
c3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViUGFnZVByaXZhdGU7CisKK2NsYXNzIEluUmVnaW9u
U2Nyb2xsYWJsZUFyZWEgOiBwdWJsaWMgUGxhdGZvcm06OlNjcm9sbFZpZXdCYXNlIHsKK3B1Ymxp
YzoKKworICAgIEluUmVnaW9uU2Nyb2xsYWJsZUFyZWEoKTsKKyAgICBJblJlZ2lvblNjcm9sbGFi
bGVBcmVhKFdlYlBhZ2VQcml2YXRlKiwgV2ViQ29yZTo6UmVuZGVyTGF5ZXIqKTsKKworICAgIFdl
YkNvcmU6OlJlbmRlckxheWVyKiBsYXllcigpIGNvbnN0OworCitwcml2YXRlOgorICAgIFBsYXRm
b3JtOjpJbnRQb2ludCBjYWxjdWxhdGVNaW5pbXVtU2Nyb2xsUG9zaXRpb24oY29uc3QgUGxhdGZv
cm06OkludFNpemUmIHZpZXdwb3J0U2l6ZSwgZmxvYXQgb3ZlcnNjcm9sbExpbWl0RmFjdG9yKSBj
b25zdDsKKyAgICBQbGF0Zm9ybTo6SW50UG9pbnQgY2FsY3VsYXRlTWF4aW11bVNjcm9sbFBvc2l0
aW9uKGNvbnN0IFBsYXRmb3JtOjpJbnRTaXplJiB2aWV3cG9ydFNpemUsIGNvbnN0IFBsYXRmb3Jt
OjpJbnRTaXplJiBjb250ZW50c1NpemUsIGZsb2F0IG92ZXJzY3JvbGxMaW1pdEZhY3RvcikgY29u
c3Q7CisKKyAgICBXZWJQYWdlUHJpdmF0ZSogbV93ZWJQYWdlOworICAgIFdlYkNvcmU6OlJlbmRl
ckxheWVyKiBtX2xheWVyOworfTsKKworfQorfQorCisjZW5kaWYKLS0gCjEuNy4xCgo=
</data>
<flag name="review"
          id="129515"
          type_id="1"
          status="+"
          setter="manyoso"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127416</attachid>
            <date>2012-02-16 11:28:31 -0800</date>
            <delta_ts>2012-02-16 12:56:51 -0800</delta_ts>
            <desc>(landed r107972) patch_1/3 v3 -TouchEventHandler</desc>
            <filename>0001-2012-02-16-Antonio-Gomes-agomes-rim.com.patch</filename>
            <type>text/plain</type>
            <size>23657</size>
            <attacher name="Antonio Gomes">tonikitoo</attacher>
            
              <data encoding="base64">RnJvbSBhNTc1NDAzZWI5NDNiNWU3NWNlNGZhYzZiM2ExOGI0NWRiMThhMzQ1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbnRvbmlvIEdvbWVzIDxhZ29tZXNAcmltLmNvbT4KRGF0ZTog
VGh1LCAxNiBGZWIgMjAxMiAxMjowOToyOCAtMDUwMApTdWJqZWN0OiBbUEFUQ0hdIDIwMTItMDIt
MTYgIEFudG9uaW8gR29tZXMgIDxhZ29tZXNAcmltLmNvbT4KCiAgICAgICAgW0JsYWNrQmVycnld
IFVwc3RyZWFtIHRvdWNoIGhhbmRsaW5nIHJlbGF0ZWQgY2xhc3NlcwogICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODUwOQoKICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KCiAgICAgICAgSW5pdGlhbCB1cHN0cmVhbSBvZiB0aGUgQmxhY2ti
ZXJyeSBzcGVjaWZpYyBzaW5nbGUgdG91Y2ggZXZlbnQKICAgICAgICBoYW5kbGVyIGNsYXNzLgoK
ICAgICAgICAqIGJsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9Ub3VjaEV2ZW50SGFuZGxlci5jcHA6
IEFkZGVkLgogICAgICAgIChXZWJLaXQpOgogICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6Omhh
c01vdXNlTW92ZUxpc3RlbmVyKToKICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpoYXNUb3Vj
aExpc3RlbmVyKToKICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjplbGVtZW50RXhwZWN0c01v
dXNlRXZlbnRzKToKICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpzaG91bGRDb252ZXJ0VG91
Y2hUb01vdXNlKToKICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpUb3VjaEV2ZW50SGFuZGxl
cjo6VG91Y2hFdmVudEhhbmRsZXIpOgogICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OlRvdWNo
RXZlbnRIYW5kbGVyOjp+VG91Y2hFdmVudEhhbmRsZXIpOgogICAgICAgIChCbGFja0JlcnJ5OjpX
ZWJLaXQ6OlRvdWNoRXZlbnRIYW5kbGVyOjpzaG91bGRTdXBwcmVzc01vdXNlRG93bk9uVG91Y2hE
b3duKToKICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpUb3VjaEV2ZW50SGFuZGxlcjo6dG91
Y2hFdmVudENhbmNlbCk6CiAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6VG91Y2hFdmVudEhh
bmRsZXI6OnRvdWNoSG9sZEV2ZW50KToKICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpUb3Vj
aEV2ZW50SGFuZGxlcjo6aGFuZGxlVG91Y2hQb2ludCk6CiAgICAgICAgKEJsYWNrQmVycnk6Oldl
YktpdDo6VG91Y2hFdmVudEhhbmRsZXI6OnNwZWxsQ2hlY2spOgogICAgICAgIChCbGFja0JlcnJ5
OjpXZWJLaXQ6OlRvdWNoRXZlbnRIYW5kbGVyOjpoYW5kbGVGYXRGaW5nZXJQcmVzc2VkKToKICAg
ICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjplbGVtZW50Rm9yVGFwSGlnaGxpZ2h0KToKICAgICAg
ICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpUb3VjaEV2ZW50SGFuZGxlcjo6ZHJhd1RhcEhpZ2hsaWdo
dCk6CiAgICAgICAgKiBibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvVG91Y2hFdmVudEhhbmRsZXIu
aDogQWRkZWQuCiAgICAgICAgKFdlYkNvcmUpOgogICAgICAgIChXZWJLaXQpOgogICAgICAgIChU
b3VjaEV2ZW50SGFuZGxlcik6CiAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6VG91Y2hFdmVu
dEhhbmRsZXI6Omxhc3RGYXRGaW5nZXJzUmVzdWx0KToKICAgICAgICAoQmxhY2tCZXJyeTo6V2Vi
S2l0OjpUb3VjaEV2ZW50SGFuZGxlcjo6cmVzZXRMYXN0RmF0RmluZ2Vyc1Jlc3VsdCk6Ci0tLQog
U291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgfCAgIDMz
ICsrCiAuLi4vYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L1RvdWNoRXZlbnRIYW5kbGVyLmNwcCB8
ICA0MDQgKysrKysrKysrKysrKysrKysrKysKIC4uLi9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQv
VG91Y2hFdmVudEhhbmRsZXIuaCAgIHwgICA3MSArKysrCiAzIGZpbGVzIGNoYW5nZWQsIDUwOCBp
bnNlcnRpb25zKCspLCAwIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9X
ZWJLaXQvYmxhY2tiZXJyeS9DaGFuZ2VMb2cKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2Vi
S2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9Ub3VjaEV2ZW50SGFuZGxlci5jcHAKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9Ub3Vj
aEV2ZW50SGFuZGxlci5oCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9DaGFuZ2VMb2cKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTNlMzc4YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvYmxhY2tiZXJyeS9DaGFuZ2VMb2cKQEAgLTAsMCArMSwzMyBAQAorMjAxMi0wMi0x
NiAgQW50b25pbyBHb21lcyAgPGFnb21lc0ByaW0uY29tPgorCisgICAgICAgIFtCbGFja0JlcnJ5
XSBVcHN0cmVhbSB0b3VjaCBoYW5kbGluZyByZWxhdGVkIGNsYXNzZXMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4NTA5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW5pdGlhbCB1cHN0cmVhbSBvZiB0aGUg
QmxhY2tiZXJyeSBzcGVjaWZpYyBzaW5nbGUgdG91Y2ggZXZlbnQKKyAgICAgICAgaGFuZGxlciBj
bGFzcy4KKworICAgICAgICAqIGJsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9Ub3VjaEV2ZW50SGFu
ZGxlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKEJsYWNrQmVycnk6
OldlYktpdDo6aGFzTW91c2VNb3ZlTGlzdGVuZXIpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2Vi
S2l0OjpoYXNUb3VjaExpc3RlbmVyKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6ZWxl
bWVudEV4cGVjdHNNb3VzZUV2ZW50cyk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OnNo
b3VsZENvbnZlcnRUb3VjaFRvTW91c2UpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpU
b3VjaEV2ZW50SGFuZGxlcjo6VG91Y2hFdmVudEhhbmRsZXIpOgorICAgICAgICAoQmxhY2tCZXJy
eTo6V2ViS2l0OjpUb3VjaEV2ZW50SGFuZGxlcjo6flRvdWNoRXZlbnRIYW5kbGVyKToKKyAgICAg
ICAgKEJsYWNrQmVycnk6OldlYktpdDo6VG91Y2hFdmVudEhhbmRsZXI6OnNob3VsZFN1cHByZXNz
TW91c2VEb3duT25Ub3VjaERvd24pOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpUb3Vj
aEV2ZW50SGFuZGxlcjo6dG91Y2hFdmVudENhbmNlbCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpX
ZWJLaXQ6OlRvdWNoRXZlbnRIYW5kbGVyOjp0b3VjaEhvbGRFdmVudCk6CisgICAgICAgIChCbGFj
a0JlcnJ5OjpXZWJLaXQ6OlRvdWNoRXZlbnRIYW5kbGVyOjpoYW5kbGVUb3VjaFBvaW50KToKKyAg
ICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6VG91Y2hFdmVudEhhbmRsZXI6OnNwZWxsQ2hlY2sp
OgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpUb3VjaEV2ZW50SGFuZGxlcjo6aGFuZGxl
RmF0RmluZ2VyUHJlc3NlZCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OmVsZW1lbnRG
b3JUYXBIaWdobGlnaHQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpUb3VjaEV2ZW50
SGFuZGxlcjo6ZHJhd1RhcEhpZ2hsaWdodCk6CisgICAgICAgICogYmxhY2tiZXJyeS9XZWJLaXRT
dXBwb3J0L1RvdWNoRXZlbnRIYW5kbGVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJLaXQpOgorICAgICAgICAoVG91Y2hFdmVudEhhbmRsZXIpOgorICAgICAgICAo
QmxhY2tCZXJyeTo6V2ViS2l0OjpUb3VjaEV2ZW50SGFuZGxlcjo6bGFzdEZhdEZpbmdlcnNSZXN1
bHQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpUb3VjaEV2ZW50SGFuZGxlcjo6cmVz
ZXRMYXN0RmF0RmluZ2Vyc1Jlc3VsdCk6CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9XZWJLaXRTdXBwb3J0L1RvdWNoRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJL
aXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L1RvdWNoRXZlbnRIYW5kbGVyLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzE1MTc0Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvVG91Y2hFdmVudEhhbmRsZXIu
Y3BwCkBAIC0wLDAgKzEsNDA0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExLCAy
MDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEw
LTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUb3VjaEV2
ZW50SGFuZGxlci5oIgorCisjaW5jbHVkZSAiRE9NU3VwcG9ydC5oIgorI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmgiCisjaW5jbHVkZSAi
RmF0RmluZ2Vycy5oIgorI2luY2x1ZGUgIkZvY3VzQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIkZy
YW1lLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiSFRNTEFuY2hvckVsZW1l
bnQuaCIKKyNpbmNsdWRlICJIVE1MQXJlYUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MSW1hZ2VF
bGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxO
YW1lcy5oIgorI2luY2x1ZGUgIkhUTUxQbHVnSW5FbGVtZW50LmgiCisjaW5jbHVkZSAiSW5wdXRI
YW5kbGVyLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNp
bmNsdWRlICJOb2RlLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtTW91
c2VFdmVudC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtVG91Y2hFdmVudC5oIgorI2luY2x1ZGUgIlJl
bmRlckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKKyNpbmNsdWRlICJSZW5kZXJW
aWV3LmgiCisjaW5jbHVkZSAiUmVuZGVyZWREb2N1bWVudE1hcmtlci5oIgorI2luY2x1ZGUgIlNl
bGVjdGlvbkhhbmRsZXIuaCIKKyNpbmNsdWRlICJXZWJQYWdlX3AuaCIKKyNpbmNsdWRlICJXZWJT
ZXR0aW5ncy5oIgorCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKwordXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgV1RGOworCituYW1lc3BhY2UgQmxhY2tCZXJy
eSB7CituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RhdGljIGJvb2wgaGFzTW91c2VNb3ZlTGlzdGVu
ZXIoRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBBU1NFUlQoZWxlbWVudCk7CisgICAgcmV0dXJu
IGVsZW1lbnQtPmhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMoKS5tb3VzZW1vdmVFdmVudCkg
fHwgZWxlbWVudC0+ZG9jdW1lbnQoKS0+aGFzRXZlbnRMaXN0ZW5lcnMoZXZlbnROYW1lcygpLm1v
dXNlbW92ZUV2ZW50KTsKK30KKworc3RhdGljIGJvb2wgaGFzVG91Y2hMaXN0ZW5lcihFbGVtZW50
KiBlbGVtZW50KQoreworICAgIEFTU0VSVChlbGVtZW50KTsKKyAgICByZXR1cm4gZWxlbWVudC0+
aGFzRXZlbnRMaXN0ZW5lcnMoZXZlbnROYW1lcygpLnRvdWNoc3RhcnRFdmVudCkKKyAgICAgICAg
fHwgZWxlbWVudC0+aGFzRXZlbnRMaXN0ZW5lcnMoZXZlbnROYW1lcygpLnRvdWNobW92ZUV2ZW50
KQorICAgICAgICB8fCBlbGVtZW50LT5oYXNFdmVudExpc3RlbmVycyhldmVudE5hbWVzKCkudG91
Y2hjYW5jZWxFdmVudCkKKyAgICAgICAgfHwgZWxlbWVudC0+aGFzRXZlbnRMaXN0ZW5lcnMoZXZl
bnROYW1lcygpLnRvdWNoZW5kRXZlbnQpOworfQorCitzdGF0aWMgYm9vbCBlbGVtZW50RXhwZWN0
c01vdXNlRXZlbnRzKEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgLy8gTWFrZSBzdXJlIHdlIGFy
ZSBub3Qgb3BlcmF0aW5nIGEgc2hhZG93IG5vZGUgaGVyZSwgc2luY2UgdGhlIHdlYnBhZ2VzCisg
ICAgLy8gYXJlbid0IGFibGUgdG8gYXR0YWNoIGV2ZW50IGxpc3RlbmVycyB0byBzaGFkb3cgY29u
dGVudC4KKyAgICBBU1NFUlQoZWxlbWVudCk7CisgICAgd2hpbGUgKGVsZW1lbnQtPmlzSW5TaGFk
b3dUcmVlKCkpCisgICAgICAgIGVsZW1lbnQgPSB0b0VsZW1lbnQoZWxlbWVudC0+c2hhZG93QW5j
ZXN0b3JOb2RlKCkpOworCisgICAgcmV0dXJuIGhhc01vdXNlTW92ZUxpc3RlbmVyKGVsZW1lbnQp
ICYmICFoYXNUb3VjaExpc3RlbmVyKGVsZW1lbnQpOworfQorCitzdGF0aWMgYm9vbCBzaG91bGRD
b252ZXJ0VG91Y2hUb01vdXNlKEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgaWYgKCFlbGVtZW50
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBSYW5nZSBlbGVtZW50IGFyZSBhIHNw
ZWNpYWwgY2FzZSB0aGF0IHJlcXVpcmUgbmF0dXJhbCBtb3VzZSBldmVudHMgaW4gb3JkZXIgdG8g
YWxsb3cKKyAgICAvLyBkcmFnZ2luZyBvZiB0aGUgc2xpZGVyIGhhbmRsZS4KKyAgICBpZiAoZWxl
bWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmlucHV0VGFnKSkgeworICAgICAgICBIVE1MSW5w
dXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4o
ZWxlbWVudCk7CisgICAgICAgIGlmIChpbnB1dEVsZW1lbnQtPmlzUmFuZ2VDb250cm9sKCkpCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoKGVsZW1lbnQtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpvYmplY3RUYWcpIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjplbWJlZFRhZykpICYmIHN0YXRpY19jYXN0PEhUTUxQbHVnSW5FbGVtZW50Kj4oZWxlbWVu
dCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gQ2hlY2sgaWYgdGhlIGVsZW1lbnQg
aGFzIGEgbW91c2UgbGlzdGVuZXIgYW5kIG5vIHRvdWNoIGxpc3RlbmVyLiBJZiBzbywKKyAgICAv
LyB0aGUgZmllbGQgd2lsbCByZXF1aXJlIHRvdWNoIGV2ZW50cyBiZSBjb252ZXJ0ZWQgdG8gbW91
c2UgZXZlbnRzIHRvIGZ1bmN0aW9uIHByb3Blcmx5LgorICAgIGlmIChlbGVtZW50RXhwZWN0c01v
dXNlRXZlbnRzKGVsZW1lbnQpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBm
YWxzZTsKK30KKworVG91Y2hFdmVudEhhbmRsZXI6OlRvdWNoRXZlbnRIYW5kbGVyKFdlYlBhZ2VQ
cml2YXRlKiB3ZWJwYWdlKQorICAgIDogbV93ZWJQYWdlKHdlYnBhZ2UpCisgICAgLCBtX2RpZENh
bmNlbFRvdWNoKGZhbHNlKQorICAgICwgbV9jb252ZXJ0VG91Y2hUb01vdXNlKGZhbHNlKQorICAg
ICwgbV9leGlzdGluZ1RvdWNoTW9kZShQcm9jZXNzZWRUb3VjaEV2ZW50cykKK3sKK30KKworVG91
Y2hFdmVudEhhbmRsZXI6On5Ub3VjaEV2ZW50SGFuZGxlcigpCit7Cit9CisKK2Jvb2wgVG91Y2hF
dmVudEhhbmRsZXI6OnNob3VsZFN1cHByZXNzTW91c2VEb3duT25Ub3VjaERvd24oKSBjb25zdAor
eworICAgIHJldHVybiBtX2xhc3RGYXRGaW5nZXJzUmVzdWx0LmlzVGV4dElucHV0KCkgfHwgbV93
ZWJQYWdlLT5tX2lucHV0SGFuZGxlci0+aXNJbnB1dE1vZGUoKSB8fCBtX3dlYlBhZ2UtPm1fc2Vs
ZWN0aW9uSGFuZGxlci0+aXNTZWxlY3Rpb25BY3RpdmUoKTsKK30KKwordm9pZCBUb3VjaEV2ZW50
SGFuZGxlcjo6dG91Y2hFdmVudENhbmNlbCgpCit7CisgICAgbV93ZWJQYWdlLT5tX2lucHV0SGFu
ZGxlci0+cHJvY2Vzc1BlbmRpbmdDbGllbnROYXZpZ2F0aW9uTW9kZUNoYW5nZU5vdGlmaWNhdGlv
bigpOworCisgICAgaWYgKCFzaG91bGRTdXBwcmVzc01vdXNlRG93bk9uVG91Y2hEb3duKCkpIHsK
KyAgICAgICAgLy8gSW5wdXQgZWxlbWVudHMgZGVsYXkgbW91c2UgZG93biBhbmQgZG8gbm90IG5l
ZWQgdG8gYmUgcmVsZWFzZWQgb24gdG91Y2ggY2FuY2VsLgorICAgICAgICBtX3dlYlBhZ2UtPm1f
cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpLT5ldmVudEhhbmRs
ZXIoKS0+c2V0TW91c2VQcmVzc2VkKGZhbHNlKTsKKyAgICB9CisgICAgbV9jb252ZXJ0VG91Y2hU
b01vdXNlID0gZmFsc2U7CisgICAgbV9kaWRDYW5jZWxUb3VjaCA9IHRydWU7CisKKyAgICAvLyBJ
ZiB3ZSBjYW5jZWwgYSBzaW5nbGUgdG91Y2ggZXZlbnQsIHdlIG5lZWQgdG8gYWxzbyBjbGVhbiB1
cCBhbnkgaG92ZXIKKyAgICAvLyBzdGF0ZSB3ZSBnZXQgaW50byBieSBzeW50aGV0aWNhbGx5IG1v
dmluZyB0aGUgbW91c2UgdG8gdGhlIG1fZmluZ2VyUG9pbnQuCisgICAgRWxlbWVudCogZWxlbWVu
dFVuZGVyRmF0RmluZ2VyID0gbV9sYXN0RmF0RmluZ2Vyc1Jlc3VsdC5ub2RlQXNFbGVtZW50SWZB
cHBsaWNhYmxlKCk7CisgICAgaWYgKGVsZW1lbnRVbmRlckZhdEZpbmdlciAmJiBlbGVtZW50VW5k
ZXJGYXRGaW5nZXItPnJlbmRlcmVyKCkpIHsKKworICAgICAgICBIaXRUZXN0UmVxdWVzdCByZXF1
ZXN0KEhpdFRlc3RSZXF1ZXN0OjpGaW5nZXJVcCk7CisgICAgICAgIC8vIFRoZSBIaXRUZXN0UmVz
dWx0IHBvaW50IGlzIG5vdCBhY3R1YWxseSBuZWVkZWQuCisgICAgICAgIEhpdFRlc3RSZXN1bHQg
cmVzdWx0KEludFBvaW50Ojp6ZXJvKCkpOworICAgICAgICByZXN1bHQuc2V0SW5uZXJOb2RlKGVs
ZW1lbnRVbmRlckZhdEZpbmdlcik7CisKKyAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZWxl
bWVudFVuZGVyRmF0RmluZ2VyLT5kb2N1bWVudCgpOworICAgICAgICBBU1NFUlQoZG9jdW1lbnQp
OworICAgICAgICBkb2N1bWVudC0+cmVuZGVyVmlldygpLT5sYXllcigpLT51cGRhdGVIb3ZlckFj
dGl2ZVN0YXRlKHJlcXVlc3QsIHJlc3VsdCk7CisgICAgICAgIGRvY3VtZW50LT51cGRhdGVTdHls
ZUlmTmVlZGVkKCk7CisgICAgICAgIC8vIFVwZGF0aW5nIHRoZSBkb2N1bWVudCBzdHlsZSBtYXkg
ZGVzdHJveSB0aGUgcmVuZGVyZXIuCisgICAgICAgIGlmIChlbGVtZW50VW5kZXJGYXRGaW5nZXIt
PnJlbmRlcmVyKCkpCisgICAgICAgICAgICBlbGVtZW50VW5kZXJGYXRGaW5nZXItPnJlbmRlcmVy
KCktPnJlcGFpbnQoKTsKKyAgICAgICAgQVNTRVJUKCFlbGVtZW50VW5kZXJGYXRGaW5nZXItPmhv
dmVyZWQoKSk7CisgICAgfQorCisgICAgbV9sYXN0RmF0RmluZ2Vyc1Jlc3VsdC5yZXNldCgpOwor
fQorCit2b2lkIFRvdWNoRXZlbnRIYW5kbGVyOjp0b3VjaEV2ZW50Q2FuY2VsQW5kQ2xlYXJGb2N1
c2VkTm9kZSgpCit7CisgICAgdG91Y2hFdmVudENhbmNlbCgpOworICAgIG1fd2ViUGFnZS0+Y2xl
YXJGb2N1c05vZGUoKTsKK30KKwordm9pZCBUb3VjaEV2ZW50SGFuZGxlcjo6dG91Y2hIb2xkRXZl
bnQoKQoreworICAgIC8vIFRoaXMgaXMgYSBoYWNrIGZvciBvdXIgaGFjayB0aGF0IGNvbnZlcnRz
IHRoZSB0b3VjaCBwcmVzc2VkIGV2ZW50IHRoYXQgd2UndmUgZGVsYXllZCBiZWNhdXNlIHRoZSB1
c2VyIGhhcyBmb2N1c2VkIGEgaW5wdXQgZmllbGQKKyAgICAvLyB0byB0aGUgcGFnZSBhcyBhIG1v
dXNlIHByZXNzZWQgZXZlbnQuCisgICAgaWYgKHNob3VsZFN1cHByZXNzTW91c2VEb3duT25Ub3Vj
aERvd24oKSkKKyAgICAgICAgaGFuZGxlRmF0RmluZ2VyUHJlc3NlZCgpOworCisgICAgLy8gQ2xl
YXIgdGhlIGZvY3VzIHJpbmcgaW5kaWNhdGlvbiBpZiB0YXAtYW5kLWhvbGQnaW5nIG9uIGEgbGlu
ay4KKyAgICBpZiAobV9sYXN0RmF0RmluZ2Vyc1Jlc3VsdC52YWxpZE5vZGUoKSAmJiBtX2xhc3RG
YXRGaW5nZXJzUmVzdWx0LnZhbGlkTm9kZSgpLT5pc0xpbmsoKSkKKyAgICAgICAgbV93ZWJQYWdl
LT5jbGVhckZvY3VzTm9kZSgpOworfQorCitib29sIFRvdWNoRXZlbnRIYW5kbGVyOjpoYW5kbGVU
b3VjaFBvaW50KFBsYXRmb3JtOjpUb3VjaFBvaW50JiBwb2ludCkKK3sKKyAgICBzd2l0Y2ggKHBv
aW50Lm1fc3RhdGUpIHsKKyAgICBjYXNlIFBsYXRmb3JtOjpUb3VjaFBvaW50OjpUb3VjaFByZXNz
ZWQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIG1fbGFzdEZhdEZpbmdlcnNSZXN1bHQucmVzZXQo
KTsgLy8gVGhlb3JldGljYWxseSB0aGlzIHNob3VsZG4ndCBiZSByZXF1aXJlZC4gS2VlcCBpdCBq
dXN0IGluIGNhc2Ugc3RhdGVzIGdldCBtYW5nbGVkLgorICAgICAgICAgICAgbV9kaWRDYW5jZWxU
b3VjaCA9IGZhbHNlOworICAgICAgICAgICAgbV9sYXN0U2NyZWVuUG9pbnQgPSBwb2ludC5tX3Nj
cmVlblBvczsKKworICAgICAgICAgICAgSW50UG9pbnQgY29udGVudFBvcyhtX3dlYlBhZ2UtPm1h
cEZyb21WaWV3cG9ydFRvQ29udGVudHMocG9pbnQubV9wb3MpKTsKKworICAgICAgICAgICAgbV9s
YXN0RmF0RmluZ2Vyc1Jlc3VsdCA9IEZhdEZpbmdlcnMobV93ZWJQYWdlLCBjb250ZW50UG9zLCBG
YXRGaW5nZXJzOjpDbGlja2FibGVFbGVtZW50KS5maW5kQmVzdFBvaW50KCk7CisKKyAgICAgICAg
ICAgIEVsZW1lbnQqIGVsZW1lbnRVbmRlckZhdEZpbmdlciA9IDA7CisgICAgICAgICAgICBpZiAo
bV9sYXN0RmF0RmluZ2Vyc1Jlc3VsdC5wb3NpdGlvbldhc0FkanVzdGVkKCkgJiYgbV9sYXN0RmF0
RmluZ2Vyc1Jlc3VsdC52YWxpZE5vZGUoKSkgeworICAgICAgICAgICAgICAgIEFTU0VSVChtX2xh
c3RGYXRGaW5nZXJzUmVzdWx0LnZhbGlkTm9kZSgpLT5pc0VsZW1lbnROb2RlKCkpOworICAgICAg
ICAgICAgICAgIGVsZW1lbnRVbmRlckZhdEZpbmdlciA9IG1fbGFzdEZhdEZpbmdlcnNSZXN1bHQu
bm9kZUFzRWxlbWVudElmQXBwbGljYWJsZSgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAvLyBTZXQgb3IgcmVzZXQgdGhlIHRvdWNoIG1vZGUuCisgICAgICAgICAgICBFbGVtZW50KiBw
b3NzaWJsZVRhcmdldE5vZGVGb3JNb3VzZU1vdmVFdmVudHMgPSBzdGF0aWNfY2FzdDxFbGVtZW50
Kj4obV9sYXN0RmF0RmluZ2Vyc1Jlc3VsdC5wb3NpdGlvbldhc0FkanVzdGVkKCkgPyBlbGVtZW50
VW5kZXJGYXRGaW5nZXIgOiBtX2xhc3RGYXRGaW5nZXJzUmVzdWx0LnZhbGlkTm9kZSgpKTsKKyAg
ICAgICAgICAgIG1fY29udmVydFRvdWNoVG9Nb3VzZSA9IHNob3VsZENvbnZlcnRUb3VjaFRvTW91
c2UocG9zc2libGVUYXJnZXROb2RlRm9yTW91c2VNb3ZlRXZlbnRzKTsKKworICAgICAgICAgICAg
aWYgKGVsZW1lbnRVbmRlckZhdEZpbmdlcikKKyAgICAgICAgICAgICAgICBkcmF3VGFwSGlnaGxp
Z2h0KCk7CisKKyAgICAgICAgICAgIC8vIExldHMgYmUgY29uc2VydmF0aXZlIGhlcmU6IHNpbmNl
IHdlIGhhdmUgcHJvYmxlbXMgb24gbWFqb3Igd2Vic2l0ZSBoYXZpbmcKKyAgICAgICAgICAgIC8v
IG1vdXNlbW92ZSBsaXN0ZW5lciBmb3Igbm8gZ29vZCByZWFzb24gKGUuZy4gZ29vZ2xlLmNvbSwg
ZGVza3RvcCBlZGl0aW9uKSwKKyAgICAgICAgICAgIC8vIGxldCBvbmx5IGRlbGF5IGNsaWVudCBu
b3RpZmljYXRpb25zIHdoZW4gdGhlcmUgaXMgbm90IGlucHV0IHRleHQgbm9kZSBpbnZvbHZlZC4K
KyAgICAgICAgICAgIGlmIChtX2NvbnZlcnRUb3VjaFRvTW91c2UKKyAgICAgICAgICAgICAgICAm
JiAobV93ZWJQYWdlLT5tX2lucHV0SGFuZGxlci0+aXNJbnB1dE1vZGUoKSAmJiAhbV9sYXN0RmF0
RmluZ2Vyc1Jlc3VsdC5pc1RleHRJbnB1dCgpKSkgeworICAgICAgICAgICAgICAgIG1fd2ViUGFn
ZS0+bV9pbnB1dEhhbmRsZXItPnNldERlbGF5Q2xpZW50Tm90aWZpY2F0aW9uT2ZOYXZpZ2F0aW9u
TW9kZUNoYW5nZSh0cnVlKTsKKyAgICAgICAgICAgICAgICBoYW5kbGVGYXRGaW5nZXJQcmVzc2Vk
KCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCFzaG91bGRTdXBwcmVzc01vdXNlRG93bk9uVG91
Y2hEb3duKCkpCisgICAgICAgICAgICAgICAgaGFuZGxlRmF0RmluZ2VyUHJlc3NlZCgpOworCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIGNhc2UgUGxhdGZvcm06OlRv
dWNoUG9pbnQ6OlRvdWNoUmVsZWFzZWQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIG1fd2ViUGFn
ZS0+bV9pbnB1dEhhbmRsZXItPnByb2Nlc3NQZW5kaW5nQ2xpZW50TmF2aWdhdGlvbk1vZGVDaGFu
Z2VOb3RpZmljYXRpb24oKTsKKworICAgICAgICAgICAgaWYgKHNob3VsZFN1cHByZXNzTW91c2VE
b3duT25Ub3VjaERvd24oKSkKKyAgICAgICAgICAgICAgICBoYW5kbGVGYXRGaW5nZXJQcmVzc2Vk
KCk7CisKKyAgICAgICAgICAgIC8vIFRoZSByZWJhc2UgaGFzIGVsaW1pbmF0ZWQgYSBuZWNlc3Nh
cnkgZXZlbnQgd2hlbiB0aGUgbW91c2UgZG9lcyBub3QKKyAgICAgICAgICAgIC8vIHRyaWdnZXIg
YW4gYWN0dWFsIHNlbGVjdGlvbiBjaGFuZ2UgcHJldmVudGluZyByZS1zaG93aW5nIG9mIHRoZQor
ICAgICAgICAgICAgLy8ga2V5Ym9hcmQuIElmIGlucHV0IG1vZGUgaXMgYWN0aXZlLCBjYWxsIHNl
dE5hdmlnYXRpb25Nb2RlIHdoaWNoCisgICAgICAgICAgICAvLyB3aWxsIHVwZGF0ZSB0aGUgc3Rh
dGUgYW5kIGRpc3BsYXkga2V5Ym9hcmQgaWYgbmVlZGVkLgorICAgICAgICAgICAgaWYgKG1fd2Vi
UGFnZS0+bV9pbnB1dEhhbmRsZXItPmlzSW5wdXRNb2RlKCkpCisgICAgICAgICAgICAgICAgbV93
ZWJQYWdlLT5tX2lucHV0SGFuZGxlci0+c2V0TmF2aWdhdGlvbk1vZGUodHJ1ZSk7CisKKyAgICAg
ICAgICAgIEludFBvaW50IGFkanVzdGVkUG9pbnQ7CisgICAgICAgICAgICBpZiAobV9jb252ZXJ0
VG91Y2hUb01vdXNlKSB7CisgICAgICAgICAgICAgICAgYWRqdXN0ZWRQb2ludCA9IHBvaW50Lm1f
cG9zOworICAgICAgICAgICAgICAgIG1fY29udmVydFRvdWNoVG9Nb3VzZSA9IGZhbHNlOworICAg
ICAgICAgICAgfSBlbHNlIC8vIEZhdCBmaW5nZXIgcG9pbnQgaW4gdmlld3BvcnQgY29vcmRpbmF0
ZXMuCisgICAgICAgICAgICAgICAgYWRqdXN0ZWRQb2ludCA9IG1fd2ViUGFnZS0+bWFwRnJvbUNv
bnRlbnRzVG9WaWV3cG9ydChtX2xhc3RGYXRGaW5nZXJzUmVzdWx0LmFkanVzdGVkUG9zaXRpb24o
KSk7CisKKyAgICAgICAgICAgIFBsYXRmb3JtTW91c2VFdmVudCBtb3VzZUV2ZW50KGFkanVzdGVk
UG9pbnQsIG1fbGFzdFNjcmVlblBvaW50LCBNb3VzZUV2ZW50UmVsZWFzZWQsIDEsIExlZnRCdXR0
b24sIFRvdWNoU2NyZWVuKTsKKyAgICAgICAgICAgIG1fd2ViUGFnZS0+aGFuZGxlTW91c2VFdmVu
dChtb3VzZUV2ZW50KTsKKyAgICAgICAgICAgIG1fbGFzdEZhdEZpbmdlcnNSZXN1bHQucmVzZXQo
KTsgLy8gUmVzZXQgdGhlIGZhdCBmaW5nZXIgcmVzdWx0IGFzIGl0cyBubyBsb25nZXIgdmFsaWQg
d2hlbiBhIHVzZXIncyBmaW5nZXIgaXMgbm90IG9uIHRoZSBzY3JlZW4uCisKKyAgICAgICAgICAg
IHVuc2lnbmVkIHNwZWxsTGVuZ3RoID0gc3BlbGxDaGVjayhwb2ludCk7CisgICAgICAgICAgICBp
ZiAoc3BlbGxMZW5ndGgpIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBlbmQgPSBtX3dlYlBh
Z2UtPm1faW5wdXRIYW5kbGVyLT5jYXJldFBvc2l0aW9uKCk7CisgICAgICAgICAgICAgICAgdW5z
aWduZWQgc3RhcnQgPSBlbmQgLSBzcGVsbExlbmd0aDsKKyAgICAgICAgICAgICAgICBtX3dlYlBh
Z2UtPm1fY2xpZW50LT5yZXF1ZXN0U3BlbGxpbmdTdWdnZXN0aW9uc0ZvclN0cmluZyhzdGFydCwg
ZW5kKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9
CisgICAgY2FzZSBQbGF0Zm9ybTo6VG91Y2hQb2ludDo6VG91Y2hNb3ZlZDoKKyAgICAgICAgaWYg
KG1fY29udmVydFRvdWNoVG9Nb3VzZSkgeworICAgICAgICAgICAgUGxhdGZvcm1Nb3VzZUV2ZW50
IG1vdXNlRXZlbnQocG9pbnQubV9wb3MsIG1fbGFzdFNjcmVlblBvaW50LCBNb3VzZUV2ZW50TW92
ZWQsIDEsIExlZnRCdXR0b24sIFRvdWNoU2NyZWVuKTsKKyAgICAgICAgICAgIG1fbGFzdFNjcmVl
blBvaW50ID0gcG9pbnQubV9zY3JlZW5Qb3M7CisgICAgICAgICAgICBpZiAoIW1fd2ViUGFnZS0+
aGFuZGxlTW91c2VFdmVudChtb3VzZUV2ZW50KSkgeworICAgICAgICAgICAgICAgIG1fY29udmVy
dFRvdWNoVG9Nb3VzZSA9IGZhbHNlOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAg
IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK3Vuc2lnbmVkIFRvdWNoRXZlbnRIYW5kbGVyOjpzcGVsbENoZWNrKFBsYXRm
b3JtOjpUb3VjaFBvaW50JiB0b3VjaFBvaW50KQoreworICAgIEVsZW1lbnQqIGVsZW1lbnRVbmRl
ckZhdEZpbmdlciA9IG1fbGFzdEZhdEZpbmdlcnNSZXN1bHQubm9kZUFzRWxlbWVudElmQXBwbGlj
YWJsZSgpOworICAgIGlmICghbV9sYXN0RmF0RmluZ2Vyc1Jlc3VsdC5pc1RleHRJbnB1dCgpIHx8
ICFlbGVtZW50VW5kZXJGYXRGaW5nZXIpCisgICAgICAgIHJldHVybiAwOworCisgICAgSW50UG9p
bnQgY29udGVudFBvcyhtX3dlYlBhZ2UtPm1hcEZyb21WaWV3cG9ydFRvQ29udGVudHModG91Y2hQ
b2ludC5tX3BvcykpOworICAgIGNvbnRlbnRQb3MgPSBET01TdXBwb3J0Ojpjb252ZXJ0UG9pbnRU
b0ZyYW1lKG1fd2ViUGFnZS0+bWFpbkZyYW1lKCksIG1fd2ViUGFnZS0+Zm9jdXNlZE9yTWFpbkZy
YW1lKCksIGNvbnRlbnRQb3MpOworCisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZWxlbWVudFVu
ZGVyRmF0RmluZ2VyLT5kb2N1bWVudCgpOworICAgIEFTU0VSVChkb2N1bWVudCk7CisgICAgUmVu
ZGVyZWREb2N1bWVudE1hcmtlciogbWFya2VyID0gZG9jdW1lbnQtPm1hcmtlcnMoKS0+cmVuZGVy
ZWRNYXJrZXJDb250YWluaW5nUG9pbnQoY29udGVudFBvcywgRG9jdW1lbnRNYXJrZXI6OlNwZWxs
aW5nKTsKKyAgICBpZiAoIW1hcmtlcikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBJbnRSZWN0
IHJlY3QgPSBtYXJrZXItPnJlbmRlcmVkUmVjdCgpOworICAgIEludFBvaW50IG5ld0NvbnRlbnRQ
b3MgPSBJbnRQb2ludChyZWN0LngoKSArIHJlY3Qud2lkdGgoKSwgcmVjdC55KCkgKyByZWN0Lmhl
aWdodCgpIC8gMik7CisgICAgRnJhbWUqIGZyYW1lID0gbV93ZWJQYWdlLT5mb2N1c2VkT3JNYWlu
RnJhbWUoKTsKKyAgICBpZiAoZnJhbWUgIT0gbV93ZWJQYWdlLT5tYWluRnJhbWUoKSkKKyAgICAg
ICAgbmV3Q29udGVudFBvcyA9IG1fd2ViUGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+d2luZG93
VG9Db250ZW50cyhmcmFtZS0+dmlldygpLT5jb250ZW50c1RvV2luZG93KG5ld0NvbnRlbnRQb3Mp
KTsKKyAgICBtX2xhc3RGYXRGaW5nZXJzUmVzdWx0Lm1fYWRqdXN0ZWRQb3NpdGlvbiA9IG5ld0Nv
bnRlbnRQb3M7CisgICAgbV9sYXN0RmF0RmluZ2Vyc1Jlc3VsdC5tX3Bvc2l0aW9uV2FzQWRqdXN0
ZWQgPSB0cnVlOworICAgIHJldHVybiBtYXJrZXItPmVuZE9mZnNldCgpIC0gbWFya2VyLT5zdGFy
dE9mZnNldCgpOworfQorCit2b2lkIFRvdWNoRXZlbnRIYW5kbGVyOjpoYW5kbGVGYXRGaW5nZXJQ
cmVzc2VkKCkKK3sKKyAgICBpZiAoIW1fZGlkQ2FuY2VsVG91Y2gpIHsKKworICAgICAgICAvLyBG
aXJzdCB1cGRhdGUgdGhlIG1vdXNlIHBvc2l0aW9uIHdpdGggYSBNb3VzZU1vdmVkIGV2ZW50Lgor
ICAgICAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgbW91c2VNb3ZlRXZlbnQobV93ZWJQYWdlLT5tYXBG
cm9tQ29udGVudHNUb1ZpZXdwb3J0KG1fbGFzdEZhdEZpbmdlcnNSZXN1bHQuYWRqdXN0ZWRQb3Np
dGlvbigpKSwgbV9sYXN0U2NyZWVuUG9pbnQsIE1vdXNlRXZlbnRNb3ZlZCwgMCwgTGVmdEJ1dHRv
biwgVG91Y2hTY3JlZW4pOworICAgICAgICBtX3dlYlBhZ2UtPmhhbmRsZU1vdXNlRXZlbnQobW91
c2VNb3ZlRXZlbnQpOworCisgICAgICAgIC8vIFRoZW4gc2VuZCB0aGUgTW91c2VQcmVzc2VkIGV2
ZW50LgorICAgICAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgbW91c2VQcmVzc2VkRXZlbnQobV93ZWJQ
YWdlLT5tYXBGcm9tQ29udGVudHNUb1ZpZXdwb3J0KG1fbGFzdEZhdEZpbmdlcnNSZXN1bHQuYWRq
dXN0ZWRQb3NpdGlvbigpKSwgbV9sYXN0U2NyZWVuUG9pbnQsIE1vdXNlRXZlbnRQcmVzc2VkLCAx
LCBMZWZ0QnV0dG9uLCBUb3VjaFNjcmVlbik7CisgICAgICAgIG1fd2ViUGFnZS0+aGFuZGxlTW91
c2VFdmVudChtb3VzZVByZXNzZWRFdmVudCk7CisgICAgfQorfQorCisvLyBUaGlzIG1ldGhvZCBm
aWx0ZXJzIHdoYXQgZWxlbWVudCB3aWxsIGdldCB0YXAtaGlnaGxpZ2h0J2VkIG9yIG5vdC4gVG8g
c3RhcnQgd2l0aCwKKy8vIHdlIGFyZSBnb2luZyB0byBoaWdobGlnaHQgbGlua3MgKGFuY2hvcnMg
d2l0aCBhIHZhbGlkIGhyZWYgZWxlbWVudCksIGFuZCBlbGVtZW50cworLy8gd2hvc2UgdGFwIGhp
Z2hsaWdodCBjb2xvciB2YWx1ZSBpcyBkaWZmZXJlbnQgdGhhbiB0aGUgZGVmYXVsdCB2YWx1ZS4K
K3N0YXRpYyBFbGVtZW50KiBlbGVtZW50Rm9yVGFwSGlnaGxpZ2h0KEVsZW1lbnQqIGVsZW1lbnRV
bmRlckZhdEZpbmdlcikKK3sKKyAgICAvLyBEbyBub3QgYmFpbCBvdXQgcmlnaHQgd2F5IGhlcmUg
aWYgdGhlcmUgZWxlbWVudCBkb2VzIG5vdCBoYXZlIGEgcmVuZGVyZXIuCisgICAgLy8gSXQgaXMg
dGhlIGNhc2Vmb3IgPG1hcD4gKGRlc2NlbmRlbnQgb2YgPGFyZWE+KSBlbGVtZW50cy4gVGhlIGFz
c29jaWF0ZWQgPGltYWdlPgorICAgIC8vIGVsZW1lbnQgYWN0dWFsbHkgaGFzIHRoZSByZW5kZXJl
ci4KKyAgICBpZiAoZWxlbWVudFVuZGVyRmF0RmluZ2VyLT5yZW5kZXJlcigpKSB7CisgICAgICAg
IENvbG9yIHRhcEhpZ2hsaWdodENvbG9yID0gZWxlbWVudFVuZGVyRmF0RmluZ2VyLT5yZW5kZXJT
dHlsZSgpLT50YXBIaWdobGlnaHRDb2xvcigpOworICAgICAgICBpZiAodGFwSGlnaGxpZ2h0Q29s
b3IgIT0gUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLT5wbGF0Zm9ybVRhcEhpZ2hsaWdodENv
bG9yKCkpCisgICAgICAgICAgICByZXR1cm4gZWxlbWVudFVuZGVyRmF0RmluZ2VyOworICAgIH0K
KworICAgIGJvb2wgaXNBcmVhID0gZWxlbWVudFVuZGVyRmF0RmluZ2VyLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6YXJlYVRhZyk7CisgICAgTm9kZSogbGlua05vZGUgPSBlbGVtZW50VW5kZXJGYXRG
aW5nZXItPmVuY2xvc2luZ0xpbmtFdmVudFBhcmVudE9yU2VsZigpOworICAgIGlmICghbGlua05v
ZGUgfHwgIWxpbmtOb2RlLT5pc0hUTUxFbGVtZW50KCkgfHwgKCFsaW5rTm9kZS0+cmVuZGVyZXIo
KSAmJiAhaXNBcmVhKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBBU1NFUlQobGlua05vZGUt
PmlzTGluaygpKTsKKworICAgIC8vIEZhdEZpbmdlcnMgY2xhc3Mgc2VsZWN0b3IgZW5zdXJlIG9u
bHkgYW5jaG9yIHdpdGggdmFsaWQgaHJlZiBhdHRyIHZhbHVlIGdldCBoZXJlLgorICAgIC8vIEl0
IGluY2x1ZGVzIGVtcHR5IGhyZWZzLgorICAgIEVsZW1lbnQqIGhpZ2hsaWdodENhbmRpZGF0ZUVs
ZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obGlua05vZGUpOworCisgICAgaWYgKCFpc0Fy
ZWEpCisgICAgICAgIHJldHVybiBoaWdobGlnaHRDYW5kaWRhdGVFbGVtZW50OworCisgICAgSFRN
TEFyZWFFbGVtZW50KiBhcmVhID0gc3RhdGljX2Nhc3Q8SFRNTEFyZWFFbGVtZW50Kj4oaGlnaGxp
Z2h0Q2FuZGlkYXRlRWxlbWVudCk7CisgICAgSFRNTEltYWdlRWxlbWVudCogaW1hZ2UgPSBhcmVh
LT5pbWFnZUVsZW1lbnQoKTsKKyAgICBpZiAoaW1hZ2UgJiYgaW1hZ2UtPnJlbmRlcmVyKCkpCisg
ICAgICAgIHJldHVybiBpbWFnZTsKKworICAgIHJldHVybiAwOworfQorCit2b2lkIFRvdWNoRXZl
bnRIYW5kbGVyOjpkcmF3VGFwSGlnaGxpZ2h0KCkKK3sKKyAgICBFbGVtZW50KiBlbGVtZW50VW5k
ZXJGYXRGaW5nZXIgPSBtX2xhc3RGYXRGaW5nZXJzUmVzdWx0Lm5vZGVBc0VsZW1lbnRJZkFwcGxp
Y2FibGUoKTsKKyAgICBpZiAoIWVsZW1lbnRVbmRlckZhdEZpbmdlcikKKyAgICAgICAgcmV0dXJu
OworCisgICAgRWxlbWVudCogZWxlbWVudCA9IGVsZW1lbnRGb3JUYXBIaWdobGlnaHQoZWxlbWVu
dFVuZGVyRmF0RmluZ2VyKTsKKyAgICBpZiAoIWVsZW1lbnQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIC8vIEdldCB0aGUgZWxlbWVudCBib3VuZGluZyByZWN0IGluIHRyYW5zZm9ybWVkIGNvb3Jk
aW5hdGVzIHNvIHdlIGNhbiBleHRyYWN0CisgICAgLy8gdGhlIGZvY3VzIHJpbmcgcmVsYXRpdmUg
cG9zaXRpb24gZWFjaCByZWN0LgorICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBlbGVtZW50
LT5yZW5kZXJlcigpOworICAgIEFTU0VSVChyZW5kZXJlcik7CisKKyAgICBGcmFtZSogZWxlbWVu
dEZyYW1lID0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKKyAgICBBU1NFUlQoZWxlbWVu
dEZyYW1lKTsKKworICAgIEZyYW1lVmlldyogZWxlbWVudEZyYW1lVmlldyA9IGVsZW1lbnRGcmFt
ZS0+dmlldygpOworICAgIGlmICghZWxlbWVudEZyYW1lVmlldykKKyAgICAgICAgcmV0dXJuOwor
CisgICAgLy8gVGVsbCB0aGUgY2xpZW50IGlmIHRoZSBlbGVtZW50IGlzIGVpdGhlciBpbiBhIHNj
cm9sbGFibGUgY29udGFpbmVyIG9yIGluIGEgZml4ZWQgcG9zaXRpb25lZCBjb250YWluZXIuCisg
ICAgLy8gT24gdGhlIGNsaWVudCBzaWRlLCB0aGlzIGluZm8gaXMgYmVpbmcgdXNlZCB0byBoaWRl
IHRoZSB0YXAgaGlnaGxpZ2h0IHdpbmRvdyBvbiBzY3JvbGwuCisgICAgUmVuZGVyTGF5ZXIqIGxh
eWVyID0gbV93ZWJQYWdlLT5lbmNsb3NpbmdGaXhlZFBvc2l0aW9uZWRBbmNlc3Rvck9yU2VsZklm
Rml4ZWRQb3NpdGlvbmVkKHJlbmRlcmVyLT5lbmNsb3NpbmdMYXllcigpKTsKKyAgICBib29sIHNo
b3VsZEhpZGVUYXBIaWdobGlnaHRSaWdodEFmdGVyU2Nyb2xsaW5nID0gIWxheWVyLT5yZW5kZXJl
cigpLT5pc1JlbmRlclZpZXcoKTsKKyAgICBzaG91bGRIaWRlVGFwSGlnaGxpZ2h0UmlnaHRBZnRl
clNjcm9sbGluZyB8PSAhIW1fd2ViUGFnZS0+bV9pblJlZ2lvblNjcm9sbFN0YXJ0aW5nTm9kZS5n
ZXQoKTsKKworICAgIEludFBvaW50IGZyYW1lUG9zKG1fd2ViUGFnZS0+ZnJhbWVPZmZzZXQoZWxl
bWVudEZyYW1lKSk7CisKKyAgICAvLyBGSVhNRTogV2UgY2FuIGdldCBtb3JlIHByZWNpc2Ugb24g
dGhlIDxtYXA+IGNhc2UgYnkgY2FsY3VsYXRpbmcgdGhlIHJlY3Qgd2l0aCBIVE1MQXJlYUVsZW1l
bnQ6OmNvbXB1dGVSZWN0KCkuCisgICAgSW50UmVjdCBhYnNvbHV0ZVJlY3QgPSByZW5kZXJlci0+
YWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0KCk7CisgICAgYWJzb2x1dGVSZWN0Lm1vdmUoZnJh
bWVQb3MueCgpLCBmcmFtZVBvcy55KCkpOworCisgICAgSW50UmVjdCBjbGlwcGluZ1JlY3Q7Cisg
ICAgaWYgKGVsZW1lbnRGcmFtZSA9PSBtX3dlYlBhZ2UtPm1haW5GcmFtZSgpKQorICAgICAgICBj
bGlwcGluZ1JlY3QgPSBJbnRSZWN0KEludFBvaW50KDAsIDApLCBlbGVtZW50RnJhbWVWaWV3LT5j
b250ZW50c1NpemUoKSk7CisgICAgZWxzZQorICAgICAgICBjbGlwcGluZ1JlY3QgPSBtX3dlYlBh
Z2UtPm1haW5GcmFtZSgpLT52aWV3KCktPndpbmRvd1RvQ29udGVudHMobV93ZWJQYWdlLT5nZXRS
ZWN1cnNpdmVWaXNpYmxlV2luZG93UmVjdChlbGVtZW50RnJhbWVWaWV3LCB0cnVlIC8qbm9DbGlw
VG9NYWluRnJhbWUqLykpOworICAgIGNsaXBwaW5nUmVjdCA9IGludGVyc2VjdGlvbihhYnNvbHV0
ZVJlY3QsIGNsaXBwaW5nUmVjdCk7CisKKyAgICBWZWN0b3I8RmxvYXRRdWFkPiBmb2N1c1JpbmdR
dWFkczsKKyAgICByZW5kZXJlci0+YWJzb2x1dGVGb2N1c1JpbmdRdWFkcyhmb2N1c1JpbmdRdWFk
cyk7CisKKyAgICBQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbiByZWdpb247CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBmb2N1c1JpbmdRdWFkcy5zaXplKCk7ICsraSkgeworICAgICAgICBJbnRS
ZWN0IHJlY3QgPSBmb2N1c1JpbmdRdWFkc1tpXS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOworICAg
ICAgICByZWN0Lm1vdmUoZnJhbWVQb3MueCgpLCBmcmFtZVBvcy55KCkpOworICAgICAgICBJbnRS
ZWN0IGNsaXBwZWRSZWN0ID0gaW50ZXJzZWN0aW9uKGNsaXBwaW5nUmVjdCwgcmVjdCk7CisgICAg
ICAgIGNsaXBwZWRSZWN0LmluZmxhdGUoMik7CisgICAgICAgIHJlZ2lvbiA9IHVuaW9uUmVnaW9u
cyhyZWdpb24sIFBsYXRmb3JtOjpJbnRSZWN0KGNsaXBwZWRSZWN0KSk7CisgICAgfQorCisgICAg
Q29sb3IgaGlnaGxpZ2h0Q29sb3IgPSBlbGVtZW50LT5yZW5kZXJTdHlsZSgpLT50YXBIaWdobGln
aHRDb2xvcigpOworCisgICAgbV93ZWJQYWdlLT5tX2NsaWVudC0+ZHJhd1RhcEhpZ2hsaWdodChy
ZWdpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWdobGln
aHRDb2xvci5yZWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGhpZ2hsaWdodENvbG9yLmdyZWVuKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBoaWdobGlnaHRDb2xvci5ibHVlKCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBoaWdobGlnaHRDb2xvci5hbHBoYSgpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkSGlkZVRhcEhpZ2hsaWdodFJpZ2h0
QWZ0ZXJTY3JvbGxpbmcpOworfQorCit9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Js
YWNrYmVycnkvV2ViS2l0U3VwcG9ydC9Ub3VjaEV2ZW50SGFuZGxlci5oIGIvU291cmNlL1dlYktp
dC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvVG91Y2hFdmVudEhhbmRsZXIuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzNmYzMwCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvVG91Y2hFdmVudEhhbmRsZXIuaApA
QCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExLCAyMDEyIFJl
c2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEg
IFVTQQorICovCisKKyNpZm5kZWYgVG91Y2hFdmVudEhhbmRsZXJfaAorI2RlZmluZSBUb3VjaEV2
ZW50SGFuZGxlcl9oCisKKyNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKKyNpbmNsdWRlICJGYXRG
aW5nZXJzLmgiCisjaW5jbHVkZSAiSW50UG9pbnQuaCIKKworI2luY2x1ZGUgPEJsYWNrQmVycnlQ
bGF0Zm9ybVRvdWNoRXZlbnQuaD4KKyNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1XaW5kb3cu
aD4KKworbmFtZXNwYWNlIEJsYWNrQmVycnkgeworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNz
IFdlYlBhZ2VQcml2YXRlOworCitjbGFzcyBUb3VjaEV2ZW50SGFuZGxlciB7CitwdWJsaWM6Cisg
ICAgVG91Y2hFdmVudEhhbmRsZXIoV2ViUGFnZVByaXZhdGUqIHdlYnBhZ2UpOworICAgIH5Ub3Vj
aEV2ZW50SGFuZGxlcigpOworCisgICAgYm9vbCBoYW5kbGVUb3VjaFBvaW50KFBsYXRmb3JtOjpU
b3VjaFBvaW50Jik7CisgICAgdm9pZCB0b3VjaEV2ZW50Q2FuY2VsKCk7CisgICAgdm9pZCB0b3Vj
aEV2ZW50Q2FuY2VsQW5kQ2xlYXJGb2N1c2VkTm9kZSgpOworICAgIHZvaWQgdG91Y2hIb2xkRXZl
bnQoKTsKKworICAgIGJvb2wgc2hvdWxkU3VwcHJlc3NNb3VzZURvd25PblRvdWNoRG93bigpIGNv
bnN0OworCisgICAgY29uc3QgRmF0RmluZ2Vyc1Jlc3VsdCYgbGFzdEZhdEZpbmdlcnNSZXN1bHQo
KSBjb25zdCB7IHJldHVybiBtX2xhc3RGYXRGaW5nZXJzUmVzdWx0OyB9CisgICAgdm9pZCByZXNl
dExhc3RGYXRGaW5nZXJzUmVzdWx0KCkgeyBtX2xhc3RGYXRGaW5nZXJzUmVzdWx0LnJlc2V0KCk7
IH0KKworcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBzcGVsbENoZWNrKFBsYXRmb3JtOjpUb3VjaFBv
aW50Jik7CisgICAgdm9pZCBoYW5kbGVGYXRGaW5nZXJQcmVzc2VkKCk7CisKKyAgICB2b2lkIGRy
YXdUYXBIaWdobGlnaHQoKTsKKworcHJpdmF0ZToKKyAgICBXZWJQYWdlUHJpdmF0ZSogbV93ZWJQ
YWdlOworCisgICAgYm9vbCBtX2RpZENhbmNlbFRvdWNoOworICAgIGJvb2wgbV9jb252ZXJ0VG91
Y2hUb01vdXNlOworCisgICAgV2ViQ29yZTo6VG91Y2hFdmVudE1vZGUgbV9leGlzdGluZ1RvdWNo
TW9kZTsKKworICAgIFdlYkNvcmU6OkludFBvaW50IG1fbGFzdFNjcmVlblBvaW50OyAvLyBTY3Jl
ZW4gUG9zaXRpb24KKworICAgIEZhdEZpbmdlcnNSZXN1bHQgbV9sYXN0RmF0RmluZ2Vyc1Jlc3Vs
dDsKK307CisKK30KK30KKworI2VuZGlmIC8vIFRvdWNoRXZlbnRIYW5kbGVyX2gKLS0gCjEuNy4x
Cgo=
</data>
<flag name="review"
          id="129541"
          type_id="1"
          status="+"
          setter="rwlbuis"
    />
    <flag name="commit-queue"
          id="129547"
          type_id="3"
          status="-"
          setter="rwlbuis"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127418</attachid>
            <date>2012-02-16 11:41:12 -0800</date>
            <delta_ts>2012-02-16 14:05:33 -0800</delta_ts>
            <desc>(landed r107978) patch_2/3 v3 - FatFingers</desc>
            <filename>0001-2012-02-16-Antonio-Gomes-agomes-rim.com.patch</filename>
            <type>text/plain</type>
            <size>33449</size>
            <attacher name="Antonio Gomes">tonikitoo</attacher>
            
              <data encoding="base64">RnJvbSA2OGI1ZTljYmFhOWIzMTZiMzA4NTFjZTQwNTJmOGM5MzQ0MmNlYTI0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbnRvbmlvIEdvbWVzIDxhZ29tZXNAcmltLmNvbT4KRGF0ZTog
VGh1LCAxNiBGZWIgMjAxMiAxMjozOTo1OSAtMDUwMApTdWJqZWN0OiBbUEFUQ0hdIDIwMTItMDIt
MTYgIEFudG9uaW8gR29tZXMgIDxhZ29tZXNAcmltLmNvbT4KCiAgICAgICAgW0JsYWNrQmVycnld
IFVwc3RyZWFtIHRvdWNoIGhhbmRsaW5nIHJlbGF0ZWQgY2xhc3NlcyAocGFydCBJSTogRmF0Rmlu
Z2VycykKICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg1
MDkKCiAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgogICAgICAgIEZhdEZpbmdl
cnMgaXMgdGhlIGNsYXNzIHJlc3BvbnNpYmxlIHRvIHRoZSB3aG9sZSB0b3VjaAogICAgICAgIGFj
Y3VyYWN5IG9mIHRoZSBCbGFja0JlcnJ5IHBvcnQuIEluaXRpYWwgdXBzdHJlYW0uCgogICAgICAg
ICogV2ViS2l0U3VwcG9ydC9GYXRGaW5nZXJzLmNwcDogQWRkZWQuCiAgICAgICAgKFdlYktpdCk6
CiAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6RmF0RmluZ2Vyczo6ZmluZ2VyUmVjdEZvclBv
aW50KToKICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpoYXNNb3VzZVByZXNzTGlzdGVuZXIp
OgogICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkZhdEZpbmdlcnM6OmlzRWxlbWVudENsaWNr
YWJsZSk6CiAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6aXNGaWVsZFdpdGhUZXh0KToKICAg
ICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpkaXN0YW5jZUJldHdlZW5Qb2ludHMpOgogICAgICAg
IChCbGFja0JlcnJ5OjpXZWJLaXQ6OmNvbXBhcmVEaXN0YW5jZUJldHdlZW5Qb2ludHMpOgogICAg
ICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OmlzVmFsaWRGcmFtZU93bmVyKToKICAgICAgICAoQmxh
Y2tCZXJyeTo6V2ViS2l0OjpGYXRGaW5nZXJzOjpGYXRGaW5nZXJzKToKICAgICAgICAoQmxhY2tC
ZXJyeTo6V2ViS2l0OjpGYXRGaW5nZXJzOjp+RmF0RmluZ2Vycyk6CiAgICAgICAgKEJsYWNrQmVy
cnk6OldlYktpdDo6RmF0RmluZ2Vyczo6ZmluZEJlc3RQb2ludCk6CiAgICAgICAgKEJsYWNrQmVy
cnk6OldlYktpdDo6RmF0RmluZ2Vyczo6Y2hlY2tGaW5nZXJJbnRlcnNlY3Rpb24pOgogICAgICAg
IChCbGFja0JlcnJ5OjpXZWJLaXQ6OkZhdEZpbmdlcnM6OmZpbmRJbnRlcnNlY3RpbmdSZWdpb25z
KToKICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpGYXRGaW5nZXJzOjpjaGVja0ZvckNsaWNr
YWJsZUVsZW1lbnQpOgogICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkZhdEZpbmdlcnM6OmNo
ZWNrRm9yVGV4dCk6CiAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6RmF0RmluZ2Vyczo6Z2V0
UGFkZGluZ3MpOgogICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkZhdEZpbmdlcnM6Om5vZGVz
RnJvbVJlY3QpOgogICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkZhdEZpbmdlcnM6OmdldFJl
bGV2YW50SW5mb0Zyb21Qb2ludCk6CiAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6RmF0Rmlu
Z2Vyczo6c2V0U3VjY2Vzc2Z1bEZhdEZpbmdlcnNSZXN1bHQpOgogICAgICAgICogV2ViS2l0U3Vw
cG9ydC9GYXRGaW5nZXJzLmg6IEFkZGVkLgogICAgICAgIChXZWJDb3JlKToKICAgICAgICAoV2Vi
S2l0KToKICAgICAgICAoRmF0RmluZ2Vyc1Jlc3VsdCk6CiAgICAgICAgKEJsYWNrQmVycnk6Oldl
YktpdDo6RmF0RmluZ2Vyc1Jlc3VsdDo6RmF0RmluZ2Vyc1Jlc3VsdCk6CiAgICAgICAgKEJsYWNr
QmVycnk6OldlYktpdDo6RmF0RmluZ2Vyc1Jlc3VsdDo6cmVzZXQpOgogICAgICAgIChCbGFja0Jl
cnJ5OjpXZWJLaXQ6OkZhdEZpbmdlcnNSZXN1bHQ6Om9yaWdpblBvc2l0aW9uKToKICAgICAgICAo
QmxhY2tCZXJyeTo6V2ViS2l0OjpGYXRGaW5nZXJzUmVzdWx0OjphZGp1c3RlZFBvc2l0aW9uKToK
ICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpGYXRGaW5nZXJzUmVzdWx0Ojpwb3NpdGlvbldh
c0FkanVzdGVkKToKICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpGYXRGaW5nZXJzUmVzdWx0
Ojppc1RleHRJbnB1dCk6CiAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6RmF0RmluZ2Vyc1Jl
c3VsdDo6aXNWYWxpZCk6CiAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6RmF0RmluZ2Vyc1Jl
c3VsdDo6dmFsaWROb2RlKToKICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpGYXRGaW5nZXJz
UmVzdWx0Ojpub2RlQXNFbGVtZW50SWZBcHBsaWNhYmxlKToKICAgICAgICAoRmF0RmluZ2Vycyk6
Ci0tLQogU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5nZUxvZyAgICAgICAgICAgICAgICAg
fCAgIDQ1ICsrCiAuLi4vV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9GYXRGaW5nZXJz
LmNwcCB8ICA1MDQgKysrKysrKysrKysrKysrKysrKysKIC4uLi9XZWJLaXQvYmxhY2tiZXJyeS9X
ZWJLaXRTdXBwb3J0L0ZhdEZpbmdlcnMuaCAgIHwgIDE2MCArKysrKysrCiAzIGZpbGVzIGNoYW5n
ZWQsIDcwOSBpbnNlcnRpb25zKCspLCAwIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0
IFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0ZhdEZpbmdlcnMuY3BwCiBj
cmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQv
RmF0RmluZ2Vycy5oCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9DaGFuZ2VMb2cKaW5kZXggZTNlMzc4Yy4u
YTE5ZWU3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQ2hhbmdlTG9nCkBAIC01LDYgKzUsNTEgQEAK
IAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KIAorICAgICAgICBGYXRGaW5n
ZXJzIGlzIHRoZSBjbGFzcyByZXNwb25zaWJsZSB0byB0aGUgd2hvbGUgdG91Y2gKKyAgICAgICAg
YWNjdXJhY3kgb2YgdGhlIEJsYWNrQmVycnkgcG9ydC4gSW5pdGlhbCB1cHN0cmVhbS4KKworICAg
ICAgICAqIFdlYktpdFN1cHBvcnQvRmF0RmluZ2Vycy5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
S2l0KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6RmF0RmluZ2Vyczo6ZmluZ2VyUmVj
dEZvclBvaW50KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6aGFzTW91c2VQcmVzc0xp
c3RlbmVyKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6RmF0RmluZ2Vyczo6aXNFbGVt
ZW50Q2xpY2thYmxlKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6aXNGaWVsZFdpdGhU
ZXh0KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6ZGlzdGFuY2VCZXR3ZWVuUG9pbnRz
KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6Y29tcGFyZURpc3RhbmNlQmV0d2VlblBv
aW50cyk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OmlzVmFsaWRGcmFtZU93bmVyKToK
KyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6RmF0RmluZ2Vyczo6RmF0RmluZ2Vycyk6Cisg
ICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkZhdEZpbmdlcnM6On5GYXRGaW5nZXJzKToKKyAg
ICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6RmF0RmluZ2Vyczo6ZmluZEJlc3RQb2ludCk6Cisg
ICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkZhdEZpbmdlcnM6OmNoZWNrRmluZ2VySW50ZXJz
ZWN0aW9uKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6RmF0RmluZ2Vyczo6ZmluZElu
dGVyc2VjdGluZ1JlZ2lvbnMpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpGYXRGaW5n
ZXJzOjpjaGVja0ZvckNsaWNrYWJsZUVsZW1lbnQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2Vi
S2l0OjpGYXRGaW5nZXJzOjpjaGVja0ZvclRleHQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2Vi
S2l0OjpGYXRGaW5nZXJzOjpnZXRQYWRkaW5ncyk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJL
aXQ6OkZhdEZpbmdlcnM6Om5vZGVzRnJvbVJlY3QpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2Vi
S2l0OjpGYXRGaW5nZXJzOjpnZXRSZWxldmFudEluZm9Gcm9tUG9pbnQpOgorICAgICAgICAoQmxh
Y2tCZXJyeTo6V2ViS2l0OjpGYXRGaW5nZXJzOjpzZXRTdWNjZXNzZnVsRmF0RmluZ2Vyc1Jlc3Vs
dCk6CisgICAgICAgICogV2ViS2l0U3VwcG9ydC9GYXRGaW5nZXJzLmg6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoRmF0RmluZ2Vyc1Jlc3Vs
dCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkZhdEZpbmdlcnNSZXN1bHQ6OkZhdEZp
bmdlcnNSZXN1bHQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpGYXRGaW5nZXJzUmVz
dWx0OjpyZXNldCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkZhdEZpbmdlcnNSZXN1
bHQ6Om9yaWdpblBvc2l0aW9uKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6RmF0Rmlu
Z2Vyc1Jlc3VsdDo6YWRqdXN0ZWRQb3NpdGlvbik6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJL
aXQ6OkZhdEZpbmdlcnNSZXN1bHQ6OnBvc2l0aW9uV2FzQWRqdXN0ZWQpOgorICAgICAgICAoQmxh
Y2tCZXJyeTo6V2ViS2l0OjpGYXRGaW5nZXJzUmVzdWx0Ojppc1RleHRJbnB1dCk6CisgICAgICAg
IChCbGFja0JlcnJ5OjpXZWJLaXQ6OkZhdEZpbmdlcnNSZXN1bHQ6OmlzVmFsaWQpOgorICAgICAg
ICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpGYXRGaW5nZXJzUmVzdWx0Ojp2YWxpZE5vZGUpOgorICAg
ICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpGYXRGaW5nZXJzUmVzdWx0Ojpub2RlQXNFbGVtZW50
SWZBcHBsaWNhYmxlKToKKyAgICAgICAgKEZhdEZpbmdlcnMpOgorCisyMDEyLTAyLTE2ICBBbnRv
bmlvIEdvbWVzICA8YWdvbWVzQHJpbS5jb20+CisKKyAgICAgICAgW0JsYWNrQmVycnldIFVwc3Ry
ZWFtIHRvdWNoIGhhbmRsaW5nIHJlbGF0ZWQgY2xhc3NlcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg1MDkKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKwogICAgICAgICBJbml0aWFsIHVwc3RyZWFtIG9mIHRoZSBCbGFja2Jl
cnJ5IHNwZWNpZmljIHNpbmdsZSB0b3VjaCBldmVudAogICAgICAgICBoYW5kbGVyIGNsYXNzLgog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9GYXRG
aW5nZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0ZhdEZp
bmdlcnMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhYTkzN2EKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9G
YXRGaW5nZXJzLmNwcApAQCAtMCwwICsxLDUwNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MCwgMjAxMSwgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24s
IE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiRmF0RmluZ2Vycy5oIgorCisjaW5jbHVkZSAiQmxhY2tCZXJyeVBsYXRmb3JtTG9nLmgiCisj
aW5jbHVkZSAiQmxhY2tCZXJyeVBsYXRmb3JtU2NyZWVuLmgiCisjaW5jbHVkZSAiQmxhY2tCZXJy
eVBsYXRmb3JtU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRp
b24uaCIKKyNpbmNsdWRlICJDU1NQYXJzZXIuaCIKKyNpbmNsdWRlICJET01TdXBwb3J0LmgiCisj
aW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiRXZl
bnROYW1lcy5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJGbG9hdFF1
YWQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1
ZGUgIkhUTUxGcmFtZU93bmVyRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQu
aCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MVGV4dEFyZWFFbGVtZW50
LmgiCisjaW5jbHVkZSAiUmFuZ2UuaCIKKyNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKKyNpbmNs
dWRlICJSZW5kZXJWaWV3LmgiCisjaW5jbHVkZSAiVGV4dC5oIgorI2luY2x1ZGUgIlRleHRCcmVh
a0l0ZXJhdG9yLmgiCisjaW5jbHVkZSAiV2ViUGFnZV9wLmgiCisKKyNpZiBERUJVR19GQVRfRklO
R0VSUworI2luY2x1ZGUgIkJhY2tpbmdTdG9yZS5oIgorI2VuZGlmCisKK3VzaW5nIEJsYWNrQmVy
cnk6OlBsYXRmb3JtOjpMb2dMZXZlbEluZm87Cit1c2luZyBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6
bG9nOwordXNpbmcgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkludFJlY3RSZWdpb247Cit1c2luZyBX
VEY6OlJlZlB0cjsKK3VzaW5nIFdURjo6U3RyaW5nOworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKKworLy8gTGV0cyBtYWtlIHRoZSB0b3AgcGFkZGluZyBiaWdnZXIgdGhhbiBvdGhlciBkaXJl
Y3Rpb25zLCBzaW5jZSBpdCBnZXRzIHVzIG1vcmUKKy8vIGFjY3VyYXRlIGNsaWNraW5nIHJlc3Vs
dHMuCisKK25hbWVzcGFjZSBCbGFja0JlcnJ5IHsKK25hbWVzcGFjZSBXZWJLaXQgeworCisjaWYg
REVCVUdfRkFUX0ZJTkdFUlMKK0ludFJlY3QgRmF0RmluZ2Vyczo6bV9kZWJ1Z0ZhdEZpbmdlclJl
Y3Q7CitJbnRQb2ludCBGYXRGaW5nZXJzOjptX2RlYnVnRmF0RmluZ2VyQ2xpY2tQb3NpdGlvbjsK
K0ludFBvaW50IEZhdEZpbmdlcnM6Om1fZGVidWdGYXRGaW5nZXJBZGp1c3RlZFBvc2l0aW9uOwor
I2VuZGlmCisKK0ludFJlY3QgRmF0RmluZ2Vyczo6ZmluZ2VyUmVjdEZvclBvaW50KGNvbnN0IElu
dFBvaW50JiBwb2ludCkgY29uc3QKK3sKKyAgICB1bnNpZ25lZCB0b3BQYWRkaW5nLCByaWdodFBh
ZGRpbmcsIGJvdHRvbVBhZGRpbmcsIGxlZnRQYWRkaW5nOworICAgIGdldFBhZGRpbmdzKHRvcFBh
ZGRpbmcsIHJpZ2h0UGFkZGluZywgYm90dG9tUGFkZGluZywgbGVmdFBhZGRpbmcpOworCisgICAg
cmV0dXJuIEhpdFRlc3RSZXN1bHQ6OnJlY3RGb3JQb2ludChwb2ludCwgdG9wUGFkZGluZywgcmln
aHRQYWRkaW5nLCBib3R0b21QYWRkaW5nLCBsZWZ0UGFkZGluZyk7Cit9CisKK3N0YXRpYyBib29s
IGhhc01vdXNlUHJlc3NMaXN0ZW5lcihFbGVtZW50KiBlbGVtZW50KQoreworICAgIEFTU0VSVChl
bGVtZW50KTsKKyAgICByZXR1cm4gZWxlbWVudC0+aGFzRXZlbnRMaXN0ZW5lcnMoZXZlbnROYW1l
cygpLmNsaWNrRXZlbnQpCisgICAgICAgIHx8IGVsZW1lbnQtPmhhc0V2ZW50TGlzdGVuZXJzKGV2
ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCkKKyAgICAgICAgfHwgZWxlbWVudC0+aGFzRXZlbnRM
aXN0ZW5lcnMoZXZlbnROYW1lcygpLm1vdXNldXBFdmVudCk7Cit9CisKK2Jvb2wgRmF0RmluZ2Vy
czo6aXNFbGVtZW50Q2xpY2thYmxlKEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Cit7CisgICAgQVNT
RVJUKGVsZW1lbnQpOworICAgIEFTU0VSVChtX21hdGNoaW5nQXBwcm9hY2ggIT0gRG9uZSk7Cisg
ICAgQVNTRVJUKG1fdGFyZ2V0VHlwZSA9PSBDbGlja2FibGVFbGVtZW50KTsKKworICAgIHN3aXRj
aCAobV9tYXRjaGluZ0FwcHJvYWNoKSB7CisgICAgY2FzZSBDbGlja2FibGVCeURlZmF1bHQ6IHsK
KyAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgICAgIHJldHVybiBlbGVtZW50LT53
ZWJraXRNYXRjaGVzU2VsZWN0b3IoImFbaHJlZl0sKjpsaW5rLCo6dmlzaXRlZCwqW3JvbGU9YnV0
dG9uXSxidXR0b24saW5wdXQsc2VsZWN0LGxhYmVsW2Zvcl0sYXJlYVtocmVmXSx0ZXh0YXJlYSxl
bWJlZCxvYmplY3QiLCBlYykKKyAgICAgICAgICAgIHx8IGVsZW1lbnQtPmlzQ29udGVudEVkaXRh
YmxlKCk7CisgICAgfQorICAgIGNhc2UgTWFkZUNsaWNrYWJsZUJ5VGhlV2VicGFnZToKKyAgICAg
ICAgLy8gRklYTUU6IFdlIGZhbGwgYmFjayB0byBjaGVja2luZyBmb3IgdGhlIHByZXNlbmNlIG9m
IENTUyBzdHlsZSAiY3Vyc29yOiBwb2ludGVyIiB0byBpbmRpY2F0ZSB3aGV0aGVyIHRoZSBlbGVt
ZW50IEEKKyAgICAgICAgLy8gY2FuIGJlIGNsaWNrZWQgd2hlbiBBIG5laXRoZXIgcmVnaXN0ZXJz
IG1vdXNlIGV2ZW50cyBoYW5kbGVycyBub3IgaXMgYSBoeXBlcmxpbmsgb3IgZm9ybSBjb250cm9s
LiBUaGlzIHdvcmthcm91bmQKKyAgICAgICAgLy8gZW5zdXJlcyB0aGF0IHdlIGRvbid0IGJyZWFr
IHZhcmlvdXMgR29vZ2xlIHdlYiBhcHBzLCBpbmNsdWRpbmcgPGh0dHA6Ly9tYXBzLmdvb2dsZS5j
b20+LiBJZGVhbGx5LCB3ZSBzaG91bGQgd2FsaworICAgICAgICAvLyB1cCB0aGUgRE9NIGhpZXJh
cmNoeSB0byBkZXRlcm1pbmUgdGhlIGZpcnN0IHBhcmVudCBlbGVtZW50IHRoYXQgYWNjZXB0cyBt
b3VzZSBldmVudHMuCisgICAgICAgIC8vIENvbnNpZGVyIHRoZSBIVE1MIHNuaXBwZXQ6IDxkaXYg
aWQ9IkEiIG9uY2xpY2s9Ii4uLiI+PGRpdiBpZD0iQiI+RXhhbXBsZTwvZGl2PjwvZGl2PgorICAg
ICAgICAvLyBOb3RpY2UsIEIgaXMgbm90IGEgaHlwZXJsaW5rLCBvciBmb3JtIGNvbnRyb2wsIGFu
ZCBkb2VzIG5vdCByZWdpc3RlciBhbnkgbW91c2UgZXZlbnQgaGFuZGxlci4gVGhlbiBCIGNhbm5v
dAorICAgICAgICAvLyBiZSBjbGlja2VkLiBTdXBwb3NlIEIgc3BlY2lmaWVkIHRoZSBDU1MgcHJv
cGVydHkgImN1cnNvcjogcG9pbnRlciIuIFRoZW4sIEIgd2lsbCBiZSBjb25zaWRlcmVkIGFzIGNs
aWNrYWJsZS4KKyAgICAgICAgcmV0dXJuIGhhc01vdXNlUHJlc3NMaXN0ZW5lcihlbGVtZW50KQor
ICAgICAgICAgICAgfHwgY29tcHV0ZWRTdHlsZShlbGVtZW50KS0+Z2V0UHJvcGVydHlWYWx1ZShj
c3NQcm9wZXJ0eUlEKCJjdXJzb3IiKSkgPT0gInBvaW50ZXIiOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30K
KworLy8gRklYTUU6IEhhbmRsZSBjb250ZW50IGVkaXRhYmxlIG5vZGVzIGhlcmUgdG9vLgorc3Rh
dGljIGlubGluZSBib29sIGlzRmllbGRXaXRoVGV4dChOb2RlKiBub2RlKQoreworICAgIEFTU0VS
VChub2RlKTsKKyAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgRWxlbWVudCogZWxlbWVudCA9IHRvRWxlbWVudChub2Rl
KTsKKyAgICByZXR1cm4gIURPTVN1cHBvcnQ6OmlucHV0RWxlbWVudFRleHQoZWxlbWVudCkuaXNF
bXB0eSgpOworfQorCitzdGF0aWMgaW5saW5lIGludCBkaXN0YW5jZUJldHdlZW5Qb2ludHMoY29u
c3QgSW50UG9pbnQmIHAxLCBjb25zdCBJbnRQb2ludCYgcDIpCit7CisgICAgaW50IGR4ID0gcDEu
eCgpIC0gcDIueCgpOworICAgIGludCBkeSA9IHAxLnkoKSAtIHAyLnkoKTsKKyAgICByZXR1cm4g
c3FydCgoZG91YmxlKSgoZHggKiBkeCkgKyAoZHkgKiBkeSkpKTsKK30KKworc3RhdGljIGJvb2wg
Y29tcGFyZURpc3RhbmNlQmV0d2VlblBvaW50cyhjb25zdCBQbGF0Zm9ybTo6SW50UG9pbnQmIHAs
IGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uJiByMSwgY29uc3QgUGxhdGZvcm06OkludFJl
Y3RSZWdpb24mIHIyKQoreworICAgIHJldHVybiBkaXN0YW5jZUJldHdlZW5Qb2ludHMocCwgcjEu
ZXh0ZW50cygpLmNlbnRlcigpKSA+IGRpc3RhbmNlQmV0d2VlblBvaW50cyhwLCByMi5leHRlbnRz
KCkuY2VudGVyKCkpOworfQorCitzdGF0aWMgYm9vbCBpc1ZhbGlkRnJhbWVPd25lcihXZWJDb3Jl
OjpFbGVtZW50KiBlbGVtZW50KQoreworICAgIEFTU0VSVChlbGVtZW50KTsKKyAgICByZXR1cm4g
ZWxlbWVudC0+aXNGcmFtZU93bmVyRWxlbWVudCgpICYmIHN0YXRpY19jYXN0PEhUTUxGcmFtZU93
bmVyRWxlbWVudCo+KGVsZW1lbnQpLT5jb250ZW50RnJhbWUoKTsKK30KKworLy8gTk9URTogJ2Nv
bnRlbnRQb3MnIGlzIGluIG1haW4gZnJhbWUgY29udGVudHMgY29vcmRpbmF0ZXMuCitGYXRGaW5n
ZXJzOjpGYXRGaW5nZXJzKFdlYlBhZ2VQcml2YXRlKiB3ZWJQYWdlLCBjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCYgY29udGVudFBvcywgVGFyZ2V0VHlwZSB0YXJnZXRUeXBlKQorICAgIDogbV93ZWJQ
YWdlKHdlYlBhZ2UpCisgICAgLCBtX2NvbnRlbnRQb3MoY29udGVudFBvcykKKyAgICAsIG1fdGFy
Z2V0VHlwZSh0YXJnZXRUeXBlKQorICAgICwgbV9tYXRjaGluZ0FwcHJvYWNoKERvbmUpCit7Cisg
ICAgQVNTRVJUKHdlYlBhZ2UpOworCisjaWYgREVCVUdfRkFUX0ZJTkdFUlMKKyAgICBtX2RlYnVn
RmF0RmluZ2VyUmVjdCA9IEludFJlY3QoMCwgMCwgMCwgMCk7CisgICAgbV9kZWJ1Z0ZhdEZpbmdl
ckNsaWNrUG9zaXRpb24gPSBtX3dlYlBhZ2UtPm1hcFRvVHJhbnNmb3JtZWQobV93ZWJQYWdlLT5t
YXBGcm9tQ29udGVudHNUb1ZpZXdwb3J0KGNvbnRlbnRQb3MpKTsKKyAgICBtX2RlYnVnRmF0Rmlu
Z2VyQWRqdXN0ZWRQb3NpdGlvbiA9IG1fd2ViUGFnZS0+bWFwVG9UcmFuc2Zvcm1lZChtX3dlYlBh
Z2UtPm1hcEZyb21Db250ZW50c1RvVmlld3BvcnQoY29udGVudFBvcykpOworI2VuZGlmCit9CisK
K0ZhdEZpbmdlcnM6On5GYXRGaW5nZXJzKCkKK3sKK30KKworY29uc3QgRmF0RmluZ2Vyc1Jlc3Vs
dCBGYXRGaW5nZXJzOjpmaW5kQmVzdFBvaW50KCkKK3sKKyAgICBBU1NFUlQobV93ZWJQYWdlKTsK
KworICAgIGlmICghbV93ZWJQYWdlLT5tX21haW5GcmFtZSkKKyAgICAgICAgcmV0dXJuIG1fY29u
dGVudFBvczsKKyAgICBGYXRGaW5nZXJzUmVzdWx0IHJlc3VsdChtX2NvbnRlbnRQb3MpOworICAg
IG1fbWF0Y2hpbmdBcHByb2FjaCA9IENsaWNrYWJsZUJ5RGVmYXVsdDsKKworICAgIC8vIExldHMg
c2V0IG5vZGVVbmRlckZhdEZpbmdlciB0byB0aGUgcmVzdWx0IG9mIGEgcG9pbnQgYmFzZWQgaGl0
IHRlc3QgaGVyZS4gSWYgc29tZXRoaW5nCisgICAgLy8gdGFyZ2FibGUgaXMgYWN0dWFsbHkgZm91
bmQgYnkgOjpmaW5kSW50ZXJzZWN0aW5nUmVnaW9ucywgdGhlbiB3ZSBtaWdodCByZXBsYWNlIHdo
YXQgd2UganVzdCBzZXQgYmVsb3cgbGF0ZXIgb24uCisgICAgRWxlbWVudCogZWxlbWVudFVuZGVy
UG9pbnQ7CisgICAgRWxlbWVudCogY2xpY2thYmxlRWxlbWVudFVuZGVyUG9pbnQ7CisgICAgZ2V0
UmVsZXZhbnRJbmZvRnJvbVBvaW50KG1fd2ViUGFnZS0+bV9tYWluRnJhbWUtPmRvY3VtZW50KCks
IG1fY29udGVudFBvcywgZWxlbWVudFVuZGVyUG9pbnQsIGNsaWNrYWJsZUVsZW1lbnRVbmRlclBv
aW50KTsKKworICAgIGlmIChlbGVtZW50VW5kZXJQb2ludCkgeworICAgICAgICByZXN1bHQubV9u
b2RlVW5kZXJGYXRGaW5nZXIgPSBlbGVtZW50VW5kZXJQb2ludDsKKworICAgICAgICAvLyBJZiB3
ZSBhcmUgbG9va2luZyBmb3IgYSBDbGlja2FibGUgRWxlbWVudCBhbmQgd2UgZm91bmQgb25lLCB3
ZSBjYW4gcXVpdCBlYXJseS4KKyAgICAgICAgaWYgKG1fdGFyZ2V0VHlwZSA9PSBDbGlja2FibGVF
bGVtZW50KSB7CisgICAgICAgICAgICBpZiAoY2xpY2thYmxlRWxlbWVudFVuZGVyUG9pbnQpIHsK
KyAgICAgICAgICAgICAgICBzZXRTdWNjZXNzZnVsRmF0RmluZ2Vyc1Jlc3VsdChyZXN1bHQsIGNs
aWNrYWJsZUVsZW1lbnRVbmRlclBvaW50LCBtX2NvbnRlbnRQb3MgLyphZGp1c3RlZFBvc2l0aW9u
Ki8pOworICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGlmIChpc0VsZW1lbnRDbGlja2FibGUoZWxlbWVudFVuZGVyUG9pbnQpKSB7Cisg
ICAgICAgICAgICAgICAgc2V0U3VjY2Vzc2Z1bEZhdEZpbmdlcnNSZXN1bHQocmVzdWx0LCBlbGVt
ZW50VW5kZXJQb2ludCwgbV9jb250ZW50UG9zIC8qYWRqdXN0ZWRQb3NpdGlvbiovKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorCisjaWYgREVCVUdfRkFUX0ZJTkdFUlMKKyAgICAvLyBGb3JjZSBibGl0IHRvIG1ha2UgdGhl
IGZhdCBmaW5nZXJzIHJlY3RzIHNob3cgdXAuCisgICAgaWYgKCFtX2RlYnVnRmF0RmluZ2VyUmVj
dC5pc0VtcHR5KCkpCisgICAgICAgIG1fd2ViUGFnZS0+bV9iYWNraW5nU3RvcmUtPnJlcGFpbnQo
MCwgMCwgbV93ZWJQYWdlLT50cmFuc2Zvcm1lZFZpZXdwb3J0U2l6ZSgpLndpZHRoKCksIG1fd2Vi
UGFnZS0+dHJhbnNmb3JtZWRWaWV3cG9ydFNpemUoKS5oZWlnaHQoKSwgdHJ1ZSwgdHJ1ZSk7Cisj
ZW5kaWYKKworICAgIFZlY3RvcjxJbnRlcnNlY3RpbmdSZWdpb24+IGludGVyc2VjdGluZ1JlZ2lv
bnM7CisgICAgUGxhdGZvcm06OkludFJlY3RSZWdpb24gcmVtYWluaW5nRmluZ2VyUmVnaW9uID0g
UGxhdGZvcm06OkludFJlY3RSZWdpb24oZmluZ2VyUmVjdEZvclBvaW50KG1fY29udGVudFBvcykp
OworCisgICAgYm9vbCBmb3VuZE9uZSA9IGZpbmRJbnRlcnNlY3RpbmdSZWdpb25zKG1fd2ViUGFn
ZS0+bV9tYWluRnJhbWUtPmRvY3VtZW50KCksIGludGVyc2VjdGluZ1JlZ2lvbnMsIHJlbWFpbmlu
Z0ZpbmdlclJlZ2lvbik7CisgICAgaWYgKCFmb3VuZE9uZSkgeworICAgICAgICBtX21hdGNoaW5n
QXBwcm9hY2ggPSBNYWRlQ2xpY2thYmxlQnlUaGVXZWJwYWdlOworICAgICAgICByZW1haW5pbmdG
aW5nZXJSZWdpb24gPSBQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbihmaW5nZXJSZWN0Rm9yUG9pbnQo
bV9jb250ZW50UG9zKSk7CisgICAgICAgIGZvdW5kT25lID0gZmluZEludGVyc2VjdGluZ1JlZ2lv
bnMobV93ZWJQYWdlLT5tX21haW5GcmFtZS0+ZG9jdW1lbnQoKSwgaW50ZXJzZWN0aW5nUmVnaW9u
cywgcmVtYWluaW5nRmluZ2VyUmVnaW9uKTsKKyAgICB9CisKKyAgICBtX21hdGNoaW5nQXBwcm9h
Y2ggPSBEb25lOworCisgICAgaWYgKCFmb3VuZE9uZSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KworICAgIE5vZGUqIGJlc3ROb2RlID0gMDsKKyAgICBQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbiBs
YXJnZXN0SW50ZXJzZWN0aW9uUmVnaW9uOworICAgIEludFBvaW50IGJlc3RQb2ludDsKKyAgICBp
bnQgbGFyZ2VzdEludGVyc2VjdGlvblJlZ2lvbkFyZWEgPSAwOworCisgICAgVmVjdG9yPEludGVy
c2VjdGluZ1JlZ2lvbj46OmNvbnN0X2l0ZXJhdG9yIGVuZEl0ID0gaW50ZXJzZWN0aW5nUmVnaW9u
cy5lbmQoKTsKKyAgICBmb3IgKFZlY3RvcjxJbnRlcnNlY3RpbmdSZWdpb24+Ojpjb25zdF9pdGVy
YXRvciBpdCA9IGludGVyc2VjdGluZ1JlZ2lvbnMuYmVnaW4oKTsgaXQgIT0gZW5kSXQ7ICsraXQp
IHsKKyAgICAgICAgTm9kZSogY3VycmVudE5vZGUgPSBpdC0+Zmlyc3Q7CisgICAgICAgIFBsYXRm
b3JtOjpJbnRSZWN0UmVnaW9uIGN1cnJlbnRJbnRlcnNlY3Rpb25SZWdpb24gPSBpdC0+c2Vjb25k
OworCisgICAgICAgIGludCBjdXJyZW50SW50ZXJzZWN0aW9uUmVnaW9uQXJlYSA9IGN1cnJlbnRJ
bnRlcnNlY3Rpb25SZWdpb24uYXJlYSgpOworICAgICAgICBpZiAoY3VycmVudEludGVyc2VjdGlv
blJlZ2lvbkFyZWEgPiBsYXJnZXN0SW50ZXJzZWN0aW9uUmVnaW9uQXJlYQorICAgICAgICAgICAg
fHwgKGN1cnJlbnRJbnRlcnNlY3Rpb25SZWdpb25BcmVhID09IGxhcmdlc3RJbnRlcnNlY3Rpb25S
ZWdpb25BcmVhCisgICAgICAgICAgICAmJiBjb21wYXJlRGlzdGFuY2VCZXR3ZWVuUG9pbnRzKG1f
Y29udGVudFBvcywgY3VycmVudEludGVyc2VjdGlvblJlZ2lvbiwgbGFyZ2VzdEludGVyc2VjdGlv
blJlZ2lvbikpKSB7CisgICAgICAgICAgICBiZXN0Tm9kZSA9IGN1cnJlbnROb2RlOworICAgICAg
ICAgICAgbGFyZ2VzdEludGVyc2VjdGlvblJlZ2lvbiA9IGN1cnJlbnRJbnRlcnNlY3Rpb25SZWdp
b247CisgICAgICAgICAgICBsYXJnZXN0SW50ZXJzZWN0aW9uUmVnaW9uQXJlYSA9IGN1cnJlbnRJ
bnRlcnNlY3Rpb25SZWdpb25BcmVhOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFiZXN0
Tm9kZSB8fCBsYXJnZXN0SW50ZXJzZWN0aW9uUmVnaW9uLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKworI2lmIERFQlVHX0ZBVF9GSU5HRVJTCisgICAgbV9kZWJ1Z0ZhdEZpbmdl
ckFkanVzdGVkUG9zaXRpb24gPSBtX3dlYlBhZ2UtPm1hcFRvVHJhbnNmb3JtZWQobV93ZWJQYWdl
LT5tYXBGcm9tQ29udGVudHNUb1ZpZXdwb3J0KGxhcmdlc3RJbnRlcnNlY3Rpb25SZWdpb24ucmVj
dHMoKVswXS5jZW50ZXIoKSkpOworI2VuZGlmCisKKyAgICBzZXRTdWNjZXNzZnVsRmF0RmluZ2Vy
c1Jlc3VsdChyZXN1bHQsIGJlc3ROb2RlLCBsYXJnZXN0SW50ZXJzZWN0aW9uUmVnaW9uLnJlY3Rz
KClbMF0uY2VudGVyKCkgLyphZGp1c3RlZFBvc2l0aW9uKi8pOworCisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworLy8gJ3JlZ2lvbicgaXMgaW4gY29udGVudHMgY29vcmRpbmF0ZXMgcmVsYXRpdmUg
dG8gdGhlIGZyYW1lIGNvbnRhaW5pbmcgJ25vZGUnCisvLyAncmVtYWluaW5nRmluZ2VyUmVnaW9u
JyBhbmQgJ2ludGVyc2VjdGluZ1JlZ2lvbnMnIHdpbGwgYWx3YXlzIGJlIGluIG1haW4gZnJhbWUg
Y29udGVudHMKKy8vIGNvb3JkaW5hdGVzLgorLy8gVGh1cywgYmVmb3JlIGNvbXBhcmluZywgd2Ug
bmVlZCB0byBtYXAgdGhlIGZvcm1lciB0byBtYWluIGZyYW1lIGNvbnRlbnRzIGNvb3JkaW5hdGVz
LgorYm9vbCBGYXRGaW5nZXJzOjpjaGVja0ZpbmdlckludGVyc2VjdGlvbihjb25zdCBQbGF0Zm9y
bTo6SW50UmVjdFJlZ2lvbiYgcmVnaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbiYgcmVtYWluaW5nRmluZ2Vy
UmVnaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBu
b2RlLCBWZWN0b3I8SW50ZXJzZWN0aW5nUmVnaW9uPiYgaW50ZXJzZWN0aW5nUmVnaW9ucykKK3sK
KyAgICBBU1NFUlQobm9kZSk7CisKKyAgICBQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbiByZWdpb25D
b3B5KHJlZ2lvbik7CisgICAgV2ViQ29yZTo6SW50UG9pbnQgZnJhbWVQb3MobV93ZWJQYWdlLT5m
cmFtZU9mZnNldChub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpKSk7CisgICAgcmVnaW9uQ29weS5t
b3ZlKGZyYW1lUG9zLngoKSwgZnJhbWVQb3MueSgpKTsKKworICAgIFBsYXRmb3JtOjpJbnRSZWN0
UmVnaW9uIGludGVyc2VjdGlvbiA9IGludGVyc2VjdFJlZ2lvbnMocmVnaW9uQ29weSwgcmVtYWlu
aW5nRmluZ2VyUmVnaW9uKTsKKyAgICBpZiAoaW50ZXJzZWN0aW9uLmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisjaWYgREVCVUdfRkFUX0ZJTkdFUlMKKyAgICBTdHJpbmcgbm9k
ZU5hbWU7CisgICAgaWYgKG5vZGUtPmlzVGV4dE5vZGUoKSkKKyAgICAgICAgbm9kZU5hbWUgPSAi
dGV4dCBub2RlIjsKKyAgICBlbHNlIGlmIChub2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAg
IG5vZGVOYW1lID0gU3RyaW5nOjpmb3JtYXQoIiVzIG5vZGUiLCB0b0VsZW1lbnQobm9kZSktPnRh
Z05hbWUoKS5sYXRpbjEoKS5kYXRhKCkpOworICAgIGVsc2UKKyAgICAgICAgbm9kZU5hbWUgPSAi
dW5rbm93biBub2RlIjsKKyAgICBsb2coTG9nTGV2ZWxJbmZvLCAiJXMgaGFzIHJlZ2lvbiAlcywg
aW50ZXJzZWN0aW5nIGF0ICVzIChhcmVhICVkKSIsIG5vZGVOYW1lLmxhdGluMSgpLmRhdGEoKSwK
KyAgICAgICAgcmVnaW9uQ29weS50b1N0cmluZygpLmNfc3RyKCksIGludGVyc2VjdGlvbi50b1N0
cmluZygpLmNfc3RyKCksIGludGVyc2VjdGlvbi5hcmVhKCkpOworI2VuZGlmCisKKyAgICBpbnRl
cnNlY3RpbmdSZWdpb25zLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihub2RlLCBpbnRlcnNlY3Rpb24p
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworCisvLyBpbnRlcnNlY3RpbmdSZWdpb25zIGFuZCBy
ZW1haW5pbmdGaW5nZXJSZWdpb24gYXJlIGFsbCBpbiBtYWluIGZyYW1lIGNvbnRlbnRzIGNvb3Jk
aW5hdGVzLAorLy8gZXZlbiBvbiByZWN1cnNpdmUgY2FsbHMgb2YgOjpmaW5kSW50ZXJzZWN0aW5n
UmVnaW9ucy4KK2Jvb2wgRmF0RmluZ2Vyczo6ZmluZEludGVyc2VjdGluZ1JlZ2lvbnMoRG9jdW1l
bnQqIGRvY3VtZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBW
ZWN0b3I8SW50ZXJzZWN0aW5nUmVnaW9uPiYgaW50ZXJzZWN0aW5nUmVnaW9ucywgUGxhdGZvcm06
OkludFJlY3RSZWdpb24mIHJlbWFpbmluZ0ZpbmdlclJlZ2lvbikKK3sKKyAgICBpZiAoIWRvY3Vt
ZW50IHx8ICFkb2N1bWVudC0+ZnJhbWUoKS0+dmlldygpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAvLyBUaGUgbGF5b3V0IG5lZWRzIHRvIGJlIHVwLXRvLWRhdGUgdG8gZGV0ZXJtaW5l
IGlmIGEgbm9kZSBpcyBmb2N1c2FibGUuCisgICAgZG9jdW1lbnQtPnVwZGF0ZUxheW91dElnbm9y
ZVBlbmRpbmdTdHlsZXNoZWV0cygpOworCisgICAgLy8gQ3JlYXRlIGZpbmdlclJlY3QuCisgICAg
SW50UG9pbnQgZnJhbWVDb250ZW50UG9zKGRvY3VtZW50LT5mcmFtZSgpLT52aWV3KCktPndpbmRv
d1RvQ29udGVudHMobV93ZWJQYWdlLT5tX21haW5GcmFtZS0+dmlldygpLT5jb250ZW50c1RvV2lu
ZG93KG1fY29udGVudFBvcykpKTsKKworI2lmIERFQlVHX0ZBVF9GSU5HRVJTCisgICAgSW50UmVj
dCBmaW5nZXJSZWN0KGZpbmdlclJlY3RGb3JQb2ludChmcmFtZUNvbnRlbnRQb3MpKTsKKyAgICBJ
bnRSZWN0IHNjcmVlbkZpbmdlclJlY3QgPSBtX3dlYlBhZ2UtPm1hcFRvVHJhbnNmb3JtZWQoZmlu
Z2VyUmVjdCk7CisgICAgbG9nKExvZ0xldmVsSW5mbywgImZhdCBmaW5nZXIgcmVjdCBub3cgJXMi
LCBzY3JlZW5GaW5nZXJSZWN0LnRvU3RyaW5nKCkubGF0aW4xKCkuZGF0YSgpKTsKKworICAgIC8v
IG9ubHkgcmVjb3JkIHRoZSBmaXJzdCBmaW5nZXIgcmVjdAorICAgIGlmIChkb2N1bWVudCA9PSBt
X3dlYlBhZ2UtPm1fbWFpbkZyYW1lLT5kb2N1bWVudCgpKQorICAgICAgICBtX2RlYnVnRmF0Rmlu
Z2VyUmVjdCA9IG1fd2ViUGFnZS0+bWFwVG9UcmFuc2Zvcm1lZChtX3dlYlBhZ2UtPm1hcEZyb21D
b250ZW50c1RvVmlld3BvcnQoZmluZ2VyUmVjdCkpOworI2VuZGlmCisKKyAgICAvLyBEb2N1bWVu
dDo6bm9kZXNGcm9tUmVjdCBuZWVkcyB2aWV3cG9ydCBjb29yZGluYXRlcywgYnV0IEZhdEZpbmdl
cjo6bm9kZXNGcm9tUmVjdCBnZXRzIGNvbnRlbnRzIGNvb3JkaW5hdGVzCisgICAgLy8gZm9yIHNp
bXBsaWNpdHkgaW5zdGVhZC4KKyAgICBib29sIGZvdW5kT25lID0gZmFsc2U7CisgICAgSGl0VGVz
dFJlc3VsdCByZXN1bHQgPSBub2Rlc0Zyb21SZWN0KGRvY3VtZW50LCBmcmFtZUNvbnRlbnRQb3Mp
OworCisgICAgUmVuZGVyTGF5ZXIqIGxvd2VzdFBvc2l0aW9uZWRFbmNsb3NpbmdMYXllclNvRmFy
ID0gMDsKKworICAgIC8vIEl0ZXJhdGUgb3ZlciB0aGUgbGlzdCBvZiBub2RlcyAoYW5kIHN1YnJl
Y3RzIG9mIG5vZGVzIHdoZXJlIHBvc3NpYmxlKSwgZm9yIGVhY2ggc2F2aW5nIHRoZSBpbnRlcnNl
Y3Rpb24gb2YgdGhlIGJvdW5kaW5nIGJveCB3aXRoIHRoZSBmaW5nZXIgcmVjdAorICAgIExpc3RI
YXNoU2V0PFJlZlB0cjxOb2RlPiA+IGludGVyc2VjdGVkTm9kZXMgPSByZXN1bHQucmVjdEJhc2Vk
VGVzdFJlc3VsdCgpOworICAgIExpc3RIYXNoU2V0PFJlZlB0cjxOb2RlPiA+Ojpjb25zdF9pdGVy
YXRvciBpdCA9IGludGVyc2VjdGVkTm9kZXMuYmVnaW4oKTsKKyAgICBMaXN0SGFzaFNldDxSZWZQ
dHI8Tm9kZT4gPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaW50ZXJzZWN0ZWROb2Rlcy5lbmQoKTsK
KyAgICBmb3IgKCA7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBOb2RlKiBjdXJOb2RlID0g
KCppdCkuZ2V0KCk7CisgICAgICAgIGlmICghY3VyTm9kZSB8fCAhY3VyTm9kZS0+cmVuZGVyZXIo
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmIChyZW1haW5pbmdGaW5nZXJS
ZWdpb24uaXNFbXB0eSgpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgYm9vbCBpc0Vs
ZW1lbnQgPSBjdXJOb2RlLT5pc0VsZW1lbnROb2RlKCk7CisgICAgICAgIGlmIChpc0VsZW1lbnQg
JiYgaXNWYWxpZEZyYW1lT3duZXIodG9FbGVtZW50KGN1ck5vZGUpKSkgeworCisgICAgICAgICAg
ICBIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyID0gc3RhdGljX2Nhc3Q8SFRNTEZyYW1lT3du
ZXJFbGVtZW50Kj4oY3VyTm9kZSk7CisgICAgICAgICAgICBEb2N1bWVudCogY2hpbGREb2N1bWVu
dCA9IG93bmVyICYmIG93bmVyLT5jb250ZW50RnJhbWUoKSA/IG93bmVyLT5jb250ZW50RnJhbWUo
KS0+ZG9jdW1lbnQoKSA6IDA7CisgICAgICAgICAgICBpZiAoIWNoaWxkRG9jdW1lbnQpCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIEFTU0VSVChjaGlsZERvY3VtZW50
LT5mcmFtZSgpLT52aWV3KCkpOworCisgICAgICAgICAgICBmb3VuZE9uZSB8PSBmaW5kSW50ZXJz
ZWN0aW5nUmVnaW9ucyhjaGlsZERvY3VtZW50LCBpbnRlcnNlY3RpbmdSZWdpb25zLCByZW1haW5p
bmdGaW5nZXJSZWdpb24pOworICAgICAgICB9IGVsc2UgaWYgKGlzRWxlbWVudCAmJiBtX3Rhcmdl
dFR5cGUgPT0gQ2xpY2thYmxlRWxlbWVudCkgeworICAgICAgICAgICAgZm91bmRPbmUgfD0gY2hl
Y2tGb3JDbGlja2FibGVFbGVtZW50KHRvRWxlbWVudChjdXJOb2RlKSwgaW50ZXJzZWN0aW5nUmVn
aW9ucywgcmVtYWluaW5nRmluZ2VyUmVnaW9uLCBsb3dlc3RQb3NpdGlvbmVkRW5jbG9zaW5nTGF5
ZXJTb0Zhcik7CisgICAgICAgIH0gZWxzZSBpZiAobV90YXJnZXRUeXBlID09IFRleHQpCisgICAg
ICAgICAgICBmb3VuZE9uZSB8PSBjaGVja0ZvclRleHQoY3VyTm9kZSwgaW50ZXJzZWN0aW5nUmVn
aW9ucywgcmVtYWluaW5nRmluZ2VyUmVnaW9uKTsKKyAgICB9CisKKyAgICByZXR1cm4gZm91bmRP
bmU7Cit9CisKK2Jvb2wgRmF0RmluZ2Vyczo6Y2hlY2tGb3JDbGlja2FibGVFbGVtZW50KEVsZW1l
bnQqIGN1ckVsZW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBWZWN0b3I8SW50ZXJzZWN0aW5nUmVnaW9uPiYgaW50ZXJzZWN0aW5nUmVnaW9ucywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsYXRmb3JtOjpJbnRSZWN0UmVn
aW9uJiByZW1haW5pbmdGaW5nZXJSZWdpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBSZW5kZXJMYXllciomIGxvd2VzdFBvc2l0aW9uZWRFbmNsb3NpbmdMYXll
clNvRmFyKQoreworICAgIEFTU0VSVChjdXJFbGVtZW50KTsKKworICAgIGJvb2wgaW50ZXJzZWN0
cyA9IGZhbHNlOworICAgIFBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uIGVsZW1lbnRSZWdpb247CisK
KyAgICBib29sIGlzQ2xpY2thYmxlRWxlbWVudCA9IGlzRWxlbWVudENsaWNrYWJsZShjdXJFbGVt
ZW50KTsKKyAgICBpZiAoaXNDbGlja2FibGVFbGVtZW50KSB7CisgICAgICAgIGlmIChjdXJFbGVt
ZW50LT5pc0xpbmsoKSkgeworICAgICAgICAgICAgLy8gTGlua3MgY2FuIHdyYXAgbGluZXMsIGFu
ZCBpbiBzdWNoIGNhc2VzIE5vZGU6OmdldFJlY3QoKSBjYW4gZ2l2ZSB1cworICAgICAgICAgICAg
Ly8gbm90IGFjY3VyYXRlIHJlY3RzLCBzaW5jZSBpdCB1bml0ZXMgYWxsIElubGluZUJveCdzIHJl
Y3RzLiBJbiB0aGVzZQorICAgICAgICAgICAgLy8gY2FzZXMsIHdlIGNhbiBwcm9jZXNzIGVhY2gg
bGluZSBvZiB0aGUgbGluayBzZXBhcmF0ZWx5IHdpdGggb3VyCisgICAgICAgICAgICAvLyBpbnRl
cnNlY3Rpb24gcmVjdCwgZ2V0dGluZyBhIG1vcmUgYWNjdXJhdGUgY2xpY2tpbmcuCisgICAgICAg
ICAgICBWZWN0b3I8RmxvYXRRdWFkPiBxdWFkczsKKyAgICAgICAgICAgIGN1ckVsZW1lbnQtPnJl
bmRlcmVyKCktPmFic29sdXRlRm9jdXNSaW5nUXVhZHMocXVhZHMpOworCisgICAgICAgICAgICBz
aXplX3QgbiA9IHF1YWRzLnNpemUoKTsKKyAgICAgICAgICAgIEFTU0VSVChuKTsKKworICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuOyArK2kpCisgICAgICAgICAgICAgICAgZWxl
bWVudFJlZ2lvbiA9IHVuaW9uUmVnaW9ucyhlbGVtZW50UmVnaW9uLCBQbGF0Zm9ybTo6SW50UmVj
dChxdWFkc1tpXS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpKSk7CisgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgZWxlbWVudFJlZ2lvbiA9IFBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uKGN1ckVsZW1l
bnQtPnJlbmRlcmVyKCktPmFic29sdXRlQm91bmRpbmdCb3hSZWN0KHRydWUgLyp1c2UgdHJhbnNm
b3JtcyovKSk7CisKKyAgICB9IGVsc2UKKyAgICAgICAgZWxlbWVudFJlZ2lvbiA9IFBsYXRmb3Jt
OjpJbnRSZWN0UmVnaW9uKGN1ckVsZW1lbnQtPnJlbmRlcmVyKCktPmFic29sdXRlQm91bmRpbmdC
b3hSZWN0KHRydWUgLyp1c2UgdHJhbnNmb3JtcyovKSk7CisKKyAgICBpZiAobG93ZXN0UG9zaXRp
b25lZEVuY2xvc2luZ0xheWVyU29GYXIpIHsKKyAgICAgICAgUmVuZGVyTGF5ZXIqIGN1ckVsZW1l
bnRSZW5kZXJMYXllciA9IG1fd2ViUGFnZS0+ZW5jbG9zaW5nUG9zaXRpb25lZEFuY2VzdG9yT3JT
ZWxmSWZQb3NpdGlvbmVkKGN1ckVsZW1lbnQtPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCkp
OworICAgICAgICBpZiAoY3VyRWxlbWVudFJlbmRlckxheWVyICE9IGxvd2VzdFBvc2l0aW9uZWRF
bmNsb3NpbmdMYXllclNvRmFyKSB7CisKKyAgICAgICAgICAgIC8vIGVsZW1lbnRSZWdpb24gd2ls
bCBhbHdheXMgYmUgaW4gY29udGVudHMgY29vcmRpbmF0ZXMgb2YgaXRzIGNvbnRhaW5lciBmcmFt
ZS4gSXQgbmVlZHMgdG8gYmUKKyAgICAgICAgICAgIC8vIG1hcHBlZCB0byBtYWluIGZyYW1lIGNv
bnRlbnRzIGNvb3JkaW5hdGVzIGluIG9yZGVyIHRvIHN1YnRyYWN0IHRoZSBmaW5nZXJSZWdpb24s
IHRoZW4uCisgICAgICAgICAgICBXZWJDb3JlOjpJbnRQb2ludCBmcmFtZVBvcyhtX3dlYlBhZ2Ut
PmZyYW1lT2Zmc2V0KGN1ckVsZW1lbnQtPmRvY3VtZW50KCktPmZyYW1lKCkpKTsKKyAgICAgICAg
ICAgIFBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uIGxheWVyUmVnaW9uKFBsYXRmb3JtOjpJbnRSZWN0
KGxvd2VzdFBvc2l0aW9uZWRFbmNsb3NpbmdMYXllclNvRmFyLT5yZW5kZXJlcigpLT5hYnNvbHV0
ZUJvdW5kaW5nQm94UmVjdCh0cnVlLyp1c2UgdHJhbnNmb3JtcyovKSkpOworICAgICAgICAgICAg
bGF5ZXJSZWdpb24ubW92ZShmcmFtZVBvcy54KCksIGZyYW1lUG9zLnkoKSk7CisKKyAgICAgICAg
ICAgIHJlbWFpbmluZ0ZpbmdlclJlZ2lvbiA9IHN1YnRyYWN0UmVnaW9ucyhyZW1haW5pbmdGaW5n
ZXJSZWdpb24sIGxheWVyUmVnaW9uKTsKKworICAgICAgICAgICAgbG93ZXN0UG9zaXRpb25lZEVu
Y2xvc2luZ0xheWVyU29GYXIgPSBjdXJFbGVtZW50UmVuZGVyTGF5ZXI7CisgICAgICAgIH0KKyAg
ICB9IGVsc2UKKyAgICAgICAgbG93ZXN0UG9zaXRpb25lZEVuY2xvc2luZ0xheWVyU29GYXIgPSBt
X3dlYlBhZ2UtPmVuY2xvc2luZ1Bvc2l0aW9uZWRBbmNlc3Rvck9yU2VsZklmUG9zaXRpb25lZChj
dXJFbGVtZW50LT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpKTsKKworICAgIGlmIChpc0Ns
aWNrYWJsZUVsZW1lbnQpCisgICAgICAgIGludGVyc2VjdHMgPSBjaGVja0ZpbmdlckludGVyc2Vj
dGlvbihlbGVtZW50UmVnaW9uLCByZW1haW5pbmdGaW5nZXJSZWdpb24sIGN1ckVsZW1lbnQsIGlu
dGVyc2VjdGluZ1JlZ2lvbnMpOworCisgICAgcmV0dXJuIGludGVyc2VjdHM7Cit9CisKK2Jvb2wg
RmF0RmluZ2Vyczo6Y2hlY2tGb3JUZXh0KE5vZGUqIGN1ck5vZGUsIFZlY3RvcjxJbnRlcnNlY3Rp
bmdSZWdpb24+JiBpbnRlcnNlY3RpbmdSZWdpb25zLCBQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbiYg
ZmluZ2VyUmVnaW9uKQoreworICAgIEFTU0VSVChjdXJOb2RlKTsKKyAgICBpZiAoaXNGaWVsZFdp
dGhUZXh0KGN1ck5vZGUpKSB7CisgICAgICAgIC8vIEZJWE1FOiBGaW5kIGFsbCB0ZXh0IGluIHRo
ZSBmaWVsZCBhbmQgZmluZCB0aGUgYmVzdCB3b3JkLgorICAgICAgICAvLyBGb3Igbm93LCB3ZSB3
aWxsIGp1c3Qgc2VsZWN0IHRoZSB3aG9sZSBmaWVsZC4KKyAgICAgICAgSW50UmVjdCBib3VuZGlu
Z1JlY3QgPSBjdXJOb2RlLT5yZW5kZXJlcigpLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCh0cnVl
IC8qdXNlIHRyYW5zZm9ybXMqLyk7CisgICAgICAgIFBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uIG5v
ZGVSZWdpb24oYm91bmRpbmdSZWN0KTsKKyAgICAgICAgcmV0dXJuIGNoZWNrRmluZ2VySW50ZXJz
ZWN0aW9uKG5vZGVSZWdpb24sIGZpbmdlclJlZ2lvbiwgY3VyTm9kZSwgaW50ZXJzZWN0aW5nUmVn
aW9ucyk7CisgICAgfQorCisgICAgaWYgKGN1ck5vZGUtPmlzVGV4dE5vZGUoKSkgeworICAgICAg
ICBXZWJDb3JlOjpUZXh0KiBjdXJUZXh0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGV4dCo+KGN1
ck5vZGUpOworICAgICAgICBTdHJpbmcgYWxsVGV4dCA9IGN1clRleHQtPndob2xlVGV4dCgpOwor
CisgICAgICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCBhbGwgd29yZHMsIGJyZWFraW5nIGF0IHdoaXRl
c3BhY2UsIHRvIGZpbmQgdGhlIGJvdW5kaW5nIGJveCBvZiBlYWNoIHdvcmQKKyAgICAgICAgVGV4
dEJyZWFrSXRlcmF0b3IqIHdvcmRJdGVyYXRvciA9IHdvcmRCcmVha0l0ZXJhdG9yKGFsbFRleHQu
Y2hhcmFjdGVycygpLCBhbGxUZXh0Lmxlbmd0aCgpKTsKKworICAgICAgICBpbnQgbGFzdE9mZnNl
dCA9IHRleHRCcmVha0ZpcnN0KHdvcmRJdGVyYXRvcik7CisgICAgICAgIGlmIChsYXN0T2Zmc2V0
ID09IC0xKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGJvb2wgZm91bmRP
bmUgPSBmYWxzZTsKKyAgICAgICAgaW50IG9mZnNldDsKKyAgICAgICAgRG9jdW1lbnQqIGRvY3Vt
ZW50ID0gY3VyTm9kZS0+ZG9jdW1lbnQoKTsKKworICAgICAgICB3aGlsZSAoKG9mZnNldCA9IHRl
eHRCcmVha05leHQod29yZEl0ZXJhdG9yKSkgIT0gLTEpIHsKKyAgICAgICAgICAgIFJlZlB0cjxS
YW5nZT4gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50LCBjdXJUZXh0LCBsYXN0T2Zmc2V0
LCBjdXJUZXh0LCBvZmZzZXQpOworICAgICAgICAgICAgaWYgKCFyYW5nZS0+dGV4dCgpLnN0cmlw
V2hpdGVTcGFjZSgpLmlzRW1wdHkoKSkgeworI2lmIERFQlVHX0ZBVF9GSU5HRVJTCisgICAgICAg
ICAgICAgICAgbG9nKExvZ0xldmVsSW5mbywgIkNoZWNraW5nIHdvcmQgJyVzJyIsIHJhbmdlLT50
ZXh0KCkubGF0aW4xKCkuZGF0YSgpKTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIFBsYXRmb3Jt
OjpJbnRSZWN0UmVnaW9uIHJhbmdlUmVnaW9uKERPTVN1cHBvcnQ6OnRyYW5zZm9ybWVkQm91bmRp
bmdCb3hGb3JSYW5nZSgqcmFuZ2UpKTsKKyAgICAgICAgICAgICAgICBmb3VuZE9uZSB8PSBjaGVj
a0ZpbmdlckludGVyc2VjdGlvbihyYW5nZVJlZ2lvbiwgZmluZ2VyUmVnaW9uLCBjdXJOb2RlLCBp
bnRlcnNlY3RpbmdSZWdpb25zKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxhc3RPZmZz
ZXQgPSBvZmZzZXQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZvdW5kT25lOworICAgIH0K
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgRmF0RmluZ2Vyczo6Z2V0UGFkZGluZ3ModW5z
aWduZWQmIHRvcCwgdW5zaWduZWQmIHJpZ2h0LCB1bnNpZ25lZCYgYm90dG9tLCB1bnNpZ25lZCYg
bGVmdCkgY29uc3QKK3sKKyAgICBzdGF0aWMgdW5zaWduZWQgdG9wUGFkZGluZyA9IFBsYXRmb3Jt
OjpTZXR0aW5nczo6Z2V0KCktPnRvcEZhdEZpbmdlclBhZGRpbmcoKTsKKyAgICBzdGF0aWMgdW5z
aWduZWQgcmlnaHRQYWRkaW5nID0gUGxhdGZvcm06OlNldHRpbmdzOjpnZXQoKS0+cmlnaHRGYXRG
aW5nZXJQYWRkaW5nKCk7CisgICAgc3RhdGljIHVuc2lnbmVkIGJvdHRvbVBhZGRpbmcgPSBQbGF0
Zm9ybTo6U2V0dGluZ3M6OmdldCgpLT5ib3R0b21GYXRGaW5nZXJQYWRkaW5nKCk7CisgICAgc3Rh
dGljIHVuc2lnbmVkIGxlZnRQYWRkaW5nID0gUGxhdGZvcm06OlNldHRpbmdzOjpnZXQoKS0+bGVm
dEZhdEZpbmdlclBhZGRpbmcoKTsKKworICAgIGRvdWJsZSBjdXJyZW50U2NhbGUgPSBtX3dlYlBh
Z2UtPmN1cnJlbnRTY2FsZSgpOworICAgIHRvcCA9IHRvcFBhZGRpbmcgLyBjdXJyZW50U2NhbGU7
CisgICAgcmlnaHQgPSByaWdodFBhZGRpbmcgLyBjdXJyZW50U2NhbGU7CisgICAgYm90dG9tID0g
Ym90dG9tUGFkZGluZyAvIGN1cnJlbnRTY2FsZTsKKyAgICBsZWZ0ID0gbGVmdFBhZGRpbmcgLyBj
dXJyZW50U2NhbGU7Cit9CisKK0hpdFRlc3RSZXN1bHQgRmF0RmluZ2Vyczo6bm9kZXNGcm9tUmVj
dChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEludFBvaW50JiBjb250ZW50UG9zKSBjb25zdAor
eworICAgIHVuc2lnbmVkIHRvcFBhZGRpbmcsIHJpZ2h0UGFkZGluZywgYm90dG9tUGFkZGluZywg
bGVmdFBhZGRpbmc7CisgICAgZ2V0UGFkZGluZ3ModG9wUGFkZGluZywgcmlnaHRQYWRkaW5nLCBi
b3R0b21QYWRkaW5nLCBsZWZ0UGFkZGluZyk7CisKKyAgICBIaXRUZXN0UmVxdWVzdCByZXF1ZXN0
KEhpdFRlc3RSZXF1ZXN0OjpSZWFkT25seSB8IEhpdFRlc3RSZXF1ZXN0OjpBY3RpdmUgfCBIaXRU
ZXN0UmVxdWVzdDo6SWdub3JlQ2xpcHBpbmcpOworICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0KGNv
bnRlbnRQb3MsIHRvcFBhZGRpbmcsIHJpZ2h0UGFkZGluZywgYm90dG9tUGFkZGluZywgbGVmdFBh
ZGRpbmcsIEhpdFRlc3RTaGFkb3dET00pOworCisgICAgZG9jdW1lbnQtPnJlbmRlclZpZXcoKS0+
bGF5ZXIoKS0+aGl0VGVzdChyZXF1ZXN0LCByZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3ZvaWQgRmF0RmluZ2Vyczo6Z2V0UmVsZXZhbnRJbmZvRnJvbVBvaW50KERvY3VtZW50KiBk
b2N1bWVudCwgY29uc3QgSW50UG9pbnQmIGNvbnRlbnRQb3MsIEVsZW1lbnQqJiBlbGVtZW50VW5k
ZXJQb2ludCwgRWxlbWVudComIGNsaWNrYWJsZUVsZW1lbnRVbmRlclBvaW50KSBjb25zdAorewor
ICAgIGVsZW1lbnRVbmRlclBvaW50ID0gMDsKKyAgICBjbGlja2FibGVFbGVtZW50VW5kZXJQb2lu
dCA9IDA7CisKKyAgICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVudC0+cmVuZGVyZXIoKSB8fCAh
ZG9jdW1lbnQtPmZyYW1lKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEhpdFRlc3RSZXN1bHQg
cmVzdWx0ICA9IGRvY3VtZW50LT5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+aGl0VGVzdFJlc3Vs
dEF0UG9pbnQoY29udGVudFBvcywgdHJ1ZSAvKmFsbG93U2hhZG93Q29udGVudCovKTsKKyAgICBO
b2RlKiBub2RlID0gcmVzdWx0LmlubmVyTm9kZSgpOworICAgIHdoaWxlIChub2RlICYmICFub2Rl
LT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgIG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7CisK
KyAgICBlbGVtZW50VW5kZXJQb2ludCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKTsKKyAg
ICBjbGlja2FibGVFbGVtZW50VW5kZXJQb2ludCA9IHJlc3VsdC5VUkxFbGVtZW50KCk7Cit9CisK
K3ZvaWQgRmF0RmluZ2Vyczo6c2V0U3VjY2Vzc2Z1bEZhdEZpbmdlcnNSZXN1bHQoRmF0RmluZ2Vy
c1Jlc3VsdCYgcmVzdWx0LCBOb2RlKiBiZXN0Tm9kZSwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQm
IGFkanVzdGVkUG9pbnQpCit7CisgICAgcmVzdWx0Lm1fbm9kZVVuZGVyRmF0RmluZ2VyID0gYmVz
dE5vZGU7CisgICAgcmVzdWx0Lm1fYWRqdXN0ZWRQb3NpdGlvbiA9IGFkanVzdGVkUG9pbnQ7Cisg
ICAgcmVzdWx0Lm1fcG9zaXRpb25XYXNBZGp1c3RlZCA9IHRydWU7CisgICAgcmVzdWx0Lm1faXNW
YWxpZCA9IHRydWU7CisKKyAgICBib29sIGlzVGV4dElucHV0RWxlbWVudCA9IGZhbHNlOworICAg
IGlmIChtX3RhcmdldFR5cGUgPT0gQ2xpY2thYmxlRWxlbWVudCkgeworICAgICAgICBBU1NFUlQo
YmVzdE5vZGUtPmlzRWxlbWVudE5vZGUoKSk7CisgICAgICAgIEVsZW1lbnQqIGJlc3RFbGVtZW50
ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KGJlc3ROb2RlKTsKKyAgICAgICAgaXNUZXh0SW5wdXRF
bGVtZW50ID0gRE9NU3VwcG9ydDo6aXNUZXh0SW5wdXRFbGVtZW50KGJlc3RFbGVtZW50KTsKKyAg
ICB9CisgICAgcmVzdWx0Lm1faXNUZXh0SW5wdXQgPSBpc1RleHRJbnB1dEVsZW1lbnQ7Cit9CisK
K30KK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBv
cnQvRmF0RmluZ2Vycy5oIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQv
RmF0RmluZ2Vycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxN2Q3YjQK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9y
dC9GYXRGaW5nZXJzLmgKQEAgLTAsMCArMSwxNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAsIDIwMTEsIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICog
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9u
LCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lmbmRlZiBGYXRGaW5nZXJzX2gKKyNkZWZp
bmUgRmF0RmluZ2Vyc19oCisKKyNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCisjaW5jbHVkZSAi
UmVuZGVyTGF5ZXIuaCIKKworI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUludFJlY3RSZWdp
b24uaD4KKworI2luY2x1ZGUgPHV0aWxpdHk+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBEb2N1bWVudDsKK2NsYXNzIEVsZW1lbnQ7CitjbGFz
cyBJbnRQb2ludDsKK2NsYXNzIEludFJlY3Q7CitjbGFzcyBJbnRTaXplOworY2xhc3MgTm9kZTsK
K30KKworI2RlZmluZSBERUJVR19GQVRfRklOR0VSUyAwCisKK25hbWVzcGFjZSBCbGFja0JlcnJ5
IHsKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJQYWdlUHJpdmF0ZTsKK2NsYXNzIEZh
dEZpbmdlcnM7CitjbGFzcyBUb3VjaEV2ZW50SGFuZGxlcjsKKworY2xhc3MgRmF0RmluZ2Vyc1Jl
c3VsdCB7CitwdWJsaWM6CisgICAgRmF0RmluZ2Vyc1Jlc3VsdChjb25zdCBXZWJDb3JlOjpJbnRQ
b2ludCYgcCA9IFdlYkNvcmU6OkludFBvaW50Ojp6ZXJvKCkpCisgICAgICAgIDogbV9vcmlnaW5h
bFBvc2l0aW9uKHApCisgICAgICAgICwgbV9hZGp1c3RlZFBvc2l0aW9uKHApCisgICAgICAgICwg
bV9wb3NpdGlvbldhc0FkanVzdGVkKGZhbHNlKQorICAgICAgICAsIG1faXNUZXh0SW5wdXQoZmFs
c2UpCisgICAgICAgICwgbV9pc1ZhbGlkKGZhbHNlKQorICAgICAgICAsIG1fbm9kZVVuZGVyRmF0
RmluZ2VyKDApCisgICAgeworICAgIH0KKworICAgIHZvaWQgcmVzZXQoKQorICAgIHsKKyAgICAg
ICAgbV9vcmlnaW5hbFBvc2l0aW9uID0gbV9hZGp1c3RlZFBvc2l0aW9uID0gV2ViQ29yZTo6SW50
UG9pbnQ6Onplcm8oKTsKKyAgICAgICAgbV9wb3NpdGlvbldhc0FkanVzdGVkID0gZmFsc2U7Cisg
ICAgICAgIG1faXNUZXh0SW5wdXQgPSBmYWxzZTsKKyAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7
CisgICAgICAgIG1fbm9kZVVuZGVyRmF0RmluZ2VyID0gMDsKKyAgICB9CisKKyAgICBXZWJDb3Jl
OjpJbnRQb2ludCBvcmlnaW5Qb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luYWxQb3Np
dGlvbjsgfQorICAgIFdlYkNvcmU6OkludFBvaW50IGFkanVzdGVkUG9zaXRpb24oKSBjb25zdCB7
IHJldHVybiBtX2FkanVzdGVkUG9zaXRpb247IH0KKyAgICBib29sIHBvc2l0aW9uV2FzQWRqdXN0
ZWQoKSBjb25zdCB7IHJldHVybiBtX2lzVmFsaWQgJiYgbV9wb3NpdGlvbldhc0FkanVzdGVkOyB9
CisgICAgYm9vbCBpc1RleHRJbnB1dCgpIGNvbnN0IHsgcmV0dXJuIG1faXNWYWxpZCAmJiAhIW1f
bm9kZVVuZGVyRmF0RmluZ2VyICYmIG1faXNUZXh0SW5wdXQ7IH0KKyAgICBib29sIGlzVmFsaWQo
KSBjb25zdCB7IHJldHVybiBtX2lzVmFsaWQ7IH0KKyAgICBXZWJDb3JlOjpOb2RlKiB2YWxpZE5v
ZGUoKSBjb25zdCB7IHJldHVybiBtX25vZGVVbmRlckZhdEZpbmdlciAmJiBtX25vZGVVbmRlckZh
dEZpbmdlci0+aW5Eb2N1bWVudCgpID8gbV9ub2RlVW5kZXJGYXRGaW5nZXIuZ2V0KCkgOiAwOyB9
CisgICAgV2ViQ29yZTo6RWxlbWVudCogbm9kZUFzRWxlbWVudElmQXBwbGljYWJsZSgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RWxlbWVudCo+KG1f
bm9kZVVuZGVyRmF0RmluZ2VyICYmIG1fbm9kZVVuZGVyRmF0RmluZ2VyLT5pbkRvY3VtZW50KCkg
JiYgbV9ub2RlVW5kZXJGYXRGaW5nZXItPmlzRWxlbWVudE5vZGUoKSA/IG1fbm9kZVVuZGVyRmF0
RmluZ2VyLmdldCgpIDogMCk7CisgICAgfQorCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBX
ZWJLaXQ6OkZhdEZpbmdlcnM7CisgICAgZnJpZW5kIGNsYXNzIFdlYktpdDo6VG91Y2hFdmVudEhh
bmRsZXI7CisKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBtX29yaWdpbmFsUG9zaXRpb247IC8vIE1h
aW4gZnJhbWUgY29udGVudHMgY29vcmRpbmF0ZXMuCisgICAgV2ViQ29yZTo6SW50UG9pbnQgbV9h
ZGp1c3RlZFBvc2l0aW9uOyAvLyBNYWluIGZyYW1lIGNvbnRlbnRzIGNvb3JkaW5hdGVzLgorICAg
IGJvb2wgbV9wb3NpdGlvbldhc0FkanVzdGVkOworICAgIGJvb2wgbV9pc1RleHRJbnB1dDsgLy8g
Q2hlY2sgaWYgdGhlIGVsZW1lbnQgdW5kZXIgdGhlIHRvdWNoIHBvaW50IHdpbGwgcmVxdWlyZSBh
IFZLQiBiZSBkaXNwbGF5ZWQgc28gdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhl
IHRvdWNoIGRvd24gY2FuIGJlIHN1cHByZXNzZWQuCisgICAgYm9vbCBtX2lzVmFsaWQ7CisgICAg
UmVmUHRyPFdlYkNvcmU6Ok5vZGU+IG1fbm9kZVVuZGVyRmF0RmluZ2VyOworfTsKKworY2xhc3Mg
RmF0RmluZ2VycyB7CitwdWJsaWM6CisgICAgZW51bSBUYXJnZXRUeXBlIHsgQ2xpY2thYmxlRWxl
bWVudCwgVGV4dCB9OworCisgICAgRmF0RmluZ2VycyhXZWJQYWdlUHJpdmF0ZSogd2VicGFnZSwg
Y29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGNvbnRlbnRQb3MsIFRhcmdldFR5cGUpOworICAgIH5G
YXRGaW5nZXJzKCk7CisKKyAgICBjb25zdCBGYXRGaW5nZXJzUmVzdWx0IGZpbmRCZXN0UG9pbnQo
KTsKKworI2lmIERFQlVHX0ZBVF9GSU5HRVJTCisgICAgLy8gVGhlc2UgZGVidWcgdmFycyBhcmUg
YWxsIGluIGNvbnRlbnQgY29vcmRpbmF0ZXMuIFRoZXkgYXJlIHB1YmxpYyBzbworICAgIC8vIHRo
ZXkgY2FuIGJlIHJlYWQgZnJvbSBCYWNraW5nU3RvcmUsIHdoaWNoIHdpbGwgZHJhdyBhIHZpc2li
bGUgcmVjdAorICAgIC8vIGFyb3VuZCB0aGUgZmF0IGZpbmdlcnMgYXJlYS4KKyAgICBzdGF0aWMg
V2ViQ29yZTo6SW50UmVjdCBtX2RlYnVnRmF0RmluZ2VyUmVjdDsKKyAgICBzdGF0aWMgV2ViQ29y
ZTo6SW50UG9pbnQgbV9kZWJ1Z0ZhdEZpbmdlckNsaWNrUG9zaXRpb247CisgICAgc3RhdGljIFdl
YkNvcmU6OkludFBvaW50IG1fZGVidWdGYXRGaW5nZXJBZGp1c3RlZFBvc2l0aW9uOworI2VuZGlm
CisKK3ByaXZhdGU6CisgICAgZW51bSBNYXRjaGluZ0FwcHJvYWNoRm9yQ2xpY2thYmxlIHsgQ2xp
Y2thYmxlQnlEZWZhdWx0ID0gMCwgTWFkZUNsaWNrYWJsZUJ5VGhlV2VicGFnZSwgRG9uZSB9Owor
CisgICAgdHlwZWRlZiBzdGQ6OnBhaXI8V2ViQ29yZTo6Tm9kZSosIFBsYXRmb3JtOjpJbnRSZWN0
UmVnaW9uPiBJbnRlcnNlY3RpbmdSZWdpb247CisKKyAgICBib29sIGNoZWNrRmluZ2VySW50ZXJz
ZWN0aW9uKGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uJiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uJiByZW1haW5pbmdG
aW5nZXJSZWdpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJDb3JlOjpO
b2RlKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxJbnRlcnNlY3Rp
bmdSZWdpb24+JiBpbnRlcnNlY3RpbmdSZWdpb25zKTsKKworICAgIGJvb2wgZmluZEludGVyc2Vj
dGluZ1JlZ2lvbnMoV2ViQ29yZTo6RG9jdW1lbnQqLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVmVjdG9yPEludGVyc2VjdGluZ1JlZ2lvbj4mIGludGVyc2VjdGluZ1JlZ2lvbnMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGF0Zm9ybTo6SW50UmVjdFJlZ2lv
biYgcmVtYWluaW5nRmluZ2VyUmVnaW9uKTsKKworICAgIGJvb2wgY2hlY2tGb3JDbGlja2FibGVF
bGVtZW50KFdlYkNvcmU6OkVsZW1lbnQqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFZlY3RvcjxJbnRlcnNlY3RpbmdSZWdpb24+JiBpbnRlcnNlY3RpbmdSZWdpb25zLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uJiBy
ZW1haW5pbmdGaW5nZXJSZWdpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
V2ViQ29yZTo6UmVuZGVyTGF5ZXIqJiBsb3dlc3RQb3NpdGlvbmVkRW5jbG9zaW5nTGF5ZXJTb0Zh
cik7CisKKyAgICBib29sIGNoZWNrRm9yVGV4dChXZWJDb3JlOjpOb2RlKiwKKyAgICAgICAgICAg
ICAgICAgICAgICBWZWN0b3I8SW50ZXJzZWN0aW5nUmVnaW9uPiYgaW50ZXJzZWN0aW5nUmVnaW9u
cywKKyAgICAgICAgICAgICAgICAgICAgICBQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbiYgZmluZ2Vy
UmVnaW9uKTsKKworICAgIHZvaWQgc2V0U3VjY2Vzc2Z1bEZhdEZpbmdlcnNSZXN1bHQoRmF0Rmlu
Z2Vyc1Jlc3VsdCYsIFdlYkNvcmU6Ok5vZGUqLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOwor
CisgICAgLy8gSXQgbWltaWNzIERvY3VtZW50Ojpub2Rlc0Zyb21SZWN0LCBidXQgaGFzIGEgZGlm
ZmVyZW50IHJldHVybiB2YWx1ZSB0byBmaXQgb3VyIG5lZWRzLgorICAgIFdlYkNvcmU6OkhpdFRl
c3RSZXN1bHQgbm9kZXNGcm9tUmVjdChXZWJDb3JlOjpEb2N1bWVudCosIGNvbnN0IFdlYkNvcmU6
OkludFBvaW50JikgY29uc3Q7CisKKyAgICAvLyBJdCBtaW1pY3MgRG9jdW1lbnQ6OmVsZW1lbnRG
cm9tUG9pbnQsIGJ1dCByZWN1cnNpdmVseSBoaXQtdGVzdHMgaW4gY2FzZSBhbiBpbm5lciBmcmFt
ZSBpcyBmb3VuZC4KKyAgICB2b2lkIGdldFJlbGV2YW50SW5mb0Zyb21Qb2ludChXZWJDb3JlOjpE
b2N1bWVudCosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViQ29y
ZTo6SW50UG9pbnQmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYkNvcmU6
OkVsZW1lbnQqJiBlbGVtZW50VW5kZXJQb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBXZWJDb3JlOjpFbGVtZW50KiYgY2xpY2thYmxlRWxlbWVudFVuZGVyUG9pbnQpIGNv
bnN0OworCisgICAgYm9vbCBpc0VsZW1lbnRDbGlja2FibGUoV2ViQ29yZTo6RWxlbWVudCopIGNv
bnN0OworCisgICAgaW5saW5lIFdlYkNvcmU6OkludFJlY3QgZmluZ2VyUmVjdEZvclBvaW50KGNv
bnN0IFdlYkNvcmU6OkludFBvaW50JikgY29uc3Q7CisgICAgdm9pZCBnZXRQYWRkaW5ncyh1bnNp
Z25lZCYgdG9wLCB1bnNpZ25lZCYgcmlnaHQsIHVuc2lnbmVkJiBib3R0b20sIHVuc2lnbmVkJiBs
ZWZ0KSBjb25zdDsKKworICAgIFdlYlBhZ2VQcml2YXRlKiBtX3dlYlBhZ2U7CisgICAgV2ViQ29y
ZTo6SW50UG9pbnQgbV9jb250ZW50UG9zOworICAgIFRhcmdldFR5cGUgbV90YXJnZXRUeXBlOwor
ICAgIE1hdGNoaW5nQXBwcm9hY2hGb3JDbGlja2FibGUgbV9tYXRjaGluZ0FwcHJvYWNoOworfTsK
KworfQorfQorCisjZW5kaWYgLy8gRmF0RmluZ2Vyc19oCisKLS0gCjEuNy4xCgo=
</data>
<flag name="review"
          id="129543"
          type_id="1"
          status="+"
          setter="rwlbuis"
    />
    <flag name="commit-queue"
          id="129566"
          type_id="3"
          status="-"
          setter="rwlbuis"
    />
          </attachment>
      

    </bug>

</bugzilla>