<?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>93482</bug_id>
          
          <creation_ts>2012-08-08 07:43:01 -0700</creation_ts>
          <short_desc>[BlackBerry] Tie up the scrolling machinery to  the graphics tree when applicable for in-region scroll</short_desc>
          <delta_ts>2012-08-08 12:24:01 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit BlackBerry</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>93478</dependson>
    
    <dependson>93480</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antonio Gomes">tonikitoo</reporter>
          <assigned_to name="Antonio Gomes">tonikitoo</assigned_to>
          <cc>anilsson</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kpiascik</cc>
    
    <cc>mifenton</cc>
    
    <cc>rakuco</cc>
    
    <cc>rwlbuis</cc>
    
    <cc>staikos</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yong.li.webkit</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>690310</commentid>
    <comment_count>0</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-08-08 07:43:01 -0700</bug_when>
    <thetext>PR #187672

WebKit side needs to expose a way to client to translate the proper layer in the ui/compositing thread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>690364</commentid>
    <comment_count>1</comment_count>
      <attachid>157229</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-08-08 08:40:41 -0700</bug_when>
    <thetext>Created attachment 157229
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>690367</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-08 08:43:36 -0700</bug_when>
    <thetext>Attachment 157229 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit/PlatformBlackBerry.cmake&apos;, u...&quot; exit_code: 1
Source/WebKit/blackberry/Api/InRegionScroller_p.h:19:  #ifndef header guard has wrong style, please use: InRegionScroller_p_h  [build/header_guard] [5]
Source/WebKit/blackberry/WebKitSupport/InRegionScrollableArea.cpp:23:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 2 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>690400</commentid>
    <comment_count>3</comment_count>
      <attachid>157235</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-08-08 09:27:30 -0700</bug_when>
    <thetext>Created attachment 157235
patch - fixed style errors</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>690419</commentid>
    <comment_count>4</comment_count>
      <attachid>157235</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2012-08-08 09:51:38 -0700</bug_when>
    <thetext>Comment on attachment 157235
patch - fixed style errors

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

Looks good, can be cleaned up some more.

&gt; Source/WebKit/ChangeLog:3
&gt; +        [BlackBerry] Tie up the scrolling machinery to  the graphics tree when applicable for in-region scroll

Some unneeded whitespace in there.

&gt; Source/WebKit/PlatformBlackBerry.cmake:-104
&gt; -    blackberry/WebKitSupport/InspectorOverlay.cpp

Why remove this?

&gt; Source/WebKit/blackberry/WebKitSupport/InRegionScrollableArea.cpp:91
&gt; +        if (usesCompositedScrolling) {

usesCompositedScrolling variable does not seem needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>690425</commentid>
    <comment_count>5</comment_count>
      <attachid>157235</attachid>
    <who name="Konrad Piascik">kpiascik</who>
    <bug_when>2012-08-08 09:54:55 -0700</bug_when>
    <thetext>Comment on attachment 157235
patch - fixed style errors

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

&gt; Source/WebKit/blackberry/Api/InRegionScroller.cpp:278
&gt; +            layer-&gt;scrollToOffset(newOffset.x(), newOffset.y());

Use the new updated API for RenderLayer::scrollToOffset(IntSize)

&gt; Source/WebKit/blackberry/Api/InRegionScroller.cpp:376
&gt; +    return o-&gt;isPositioned() &amp;&amp; o-&gt;style()-&gt;position() == FixedPosition;

This needs to be changed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>690477</commentid>
    <comment_count>6</comment_count>
      <attachid>157248</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-08-08 10:32:52 -0700</bug_when>
    <thetext>Created attachment 157248
patch - fixed rob&apos;s suggestions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>690496</commentid>
    <comment_count>7</comment_count>
      <attachid>157251</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-08-08 10:43:31 -0700</bug_when>
    <thetext>Created attachment 157251
patch - fixed konrad&apos;s suggestions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>690517</commentid>
    <comment_count>8</comment_count>
      <attachid>157251</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2012-08-08 10:58:25 -0700</bug_when>
    <thetext>Comment on attachment 157251
patch - fixed konrad&apos;s suggestions

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

This looks good in general but please check your headers.

&gt; Source/WebKit/blackberry/Api/InRegionScroller.h:32
&gt; +

Empty line not needed.

&gt; Source/WebKit/blackberry/Api/InRegionScroller_p.h:22
&gt; +#include &quot;IntRect.h&quot;

Is this actually used?

&gt; Source/WebKit/blackberry/Api/InRegionScroller_p.h:29
&gt; +class LayerCompositingThread;

Does not seem used?

&gt; Source/WebKit/blackberry/Api/InRegionScroller_p.h:40
&gt; +

Empty line not needed

&gt; Source/WebKit/blackberry/Api/InRegionScroller_p.h:57
&gt; +private:

I wonder if we need private in this class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>690539</commentid>
    <comment_count>9</comment_count>
      <attachid>157258</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-08-08 11:25:56 -0700</bug_when>
    <thetext>Created attachment 157258
patch - fixed rob&apos;s suggestions

&gt; &gt; Source/WebKit/blackberry/Api/InRegionScroller.h:32
&gt; &gt; +
&gt; 
&gt; Empty line not needed.

Fixed

&gt; &gt; Source/WebKit/blackberry/Api/InRegionScroller_p.h:22
&gt; &gt; +#include &quot;IntRect.h&quot;
&gt; 
&gt; Is this actually used?

Yes and no, but I replaced by IntSize.h and IntPoint.h to be explicit.
 
&gt; &gt; Source/WebKit/blackberry/Api/InRegionScroller_p.h:29
&gt; &gt; +class LayerCompositingThread;
&gt; 
&gt; Does not seem used?

No, removed.

&gt; &gt; Source/WebKit/blackberry/Api/InRegionScroller_p.h:40
&gt; &gt; +
&gt; 
&gt; Empty line not needed

Fixed.

&gt; &gt; Source/WebKit/blackberry/Api/InRegionScroller_p.h:57
&gt; &gt; +private:
&gt; 
&gt; I wonder if we need private in this class.

Although it is uncommon and I agree to generally make all member of private classes asa public, I do not want these private methods to be called at all by anyone else. They are internal helpers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>690543</commentid>
    <comment_count>10</comment_count>
      <attachid>157258</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2012-08-08 11:27:56 -0700</bug_when>
    <thetext>Comment on attachment 157258
patch - fixed rob&apos;s suggestions

Looks good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>690546</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-08 11:30:08 -0700</bug_when>
    <thetext>Attachment 157258 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit/ChangeLog&apos;, u&apos;Source/WebKit/...&quot; exit_code: 1
Source/WebKit/blackberry/Api/InRegionScroller_p.h:22:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>690607</commentid>
    <comment_count>12</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-08-08 12:24:01 -0700</bug_when>
    <thetext>Committed &lt;http://trac.webkit.org/changeset/125071&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>157229</attachid>
            <date>2012-08-08 08:40:41 -0700</date>
            <delta_ts>2012-08-08 09:27:30 -0700</delta_ts>
            <desc>patch</desc>
            <filename>0001-2012-08-03-Antonio-Gomes-agomes-rim.com.patch</filename>
            <type>text/plain</type>
            <size>46442</size>
            <attacher name="Antonio Gomes">tonikitoo</attacher>
            
              <data encoding="base64">RnJvbSA0ODI2YmE5MzQxNzM5Mzg1NTk0MjVlOTdmNDE1MDlkNDZhODk0N2QxIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbnRvbmlvIEdvbWVzIDxhZ29tZXNAcmltLmNvbT4KRGF0ZTog
RnJpLCAzIEF1ZyAyMDEyIDEyOjQwOjU4IC0wNDAwClN1YmplY3Q6IFtQQVRDSF0gMjAxMi0wOC0w
MyAgQW50b25pbyBHb21lcyAgPGFnb21lc0ByaW0uY29tPgoKICAgICAgICBUaWUgdXAgdGhlIHNj
cm9sbGluZyBtYWNoaW5lcnkgdG8gdGhlIGdyYXBoaWNzIHRyZWUgd2hlbiBhcHBsaWNhYmxlIGZv
ciBpbi1yZWdpb24gc2Nyb2xsCiAgICAgICAgUFIgIzE4NzY3MgogICAgICAgIE1ha2UgSW5SZWdp
b25TY3JvbGxlciBhIHNpbXBsZSBwdWJsaWMgd2Via2l0LyBBUEkKICAgICAgICBQUiAjMTg4Njc3
CgogICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgoKICAgICAgICBJbiBvcmRlciB0
byBwcmVwYXJlIEluUmVnaW9uU2Nyb2xsZXIgdG8gYmUgYSBwdWJsaWMgQVBJCiAgICAgICAgaW4g
d2Via2l0LywgdGhlIHBhdGNoOgoKICAgICAgICAxKSBSZW5hbWVkIHRoZSBjdXJyZW50IEluUmVn
aW9uU2Nyb2xsZXIgY2xhc3MgdG8gSW5SZWdpb25TY3JvbGxlclByaXZhdGU7CiAgICAgICAgMikg
TW92ZWQgSW5SZWdpb25TY3JvbGxlci5jcHB8aCBmcm9tIFdlYktpdFN1cHBvcnQvIHRvIEFwaS87
CiAgICAgICAgMykgUmVuYW1lZCBJblJlZ2lvblNjcm9sbGVyLmggdG8gSW5SZWdpb25TY3JvbGxl
cl9wLmg7CiAgICAgICAgNCkgQWRkZWQgYSBuZXcgcHVibGljIGNsYXNzIGltcGxlbWVudGF0aW9u
IHRvIEluUmVnaW9uU2Nyb2xsZXIuaDsKICAgICAgICA1KSBBZGFwdGVkIFdlYlBhZ2UgYW5kIFRv
dWNoRXZlbnRIYW5kbGVyIGNsYXNzZXMgdG8gdXNlIEluUmVnaW9uU2Nyb2xsZXI6OmQgZGlyZWN0
bHkuCgogICAgICAgIFRoZSBtb3N0IGltcG9ydGFudCBBUEkgaGVyZSBpcyAnOjpjb21wb3NpdGVk
U2V0U2Nyb2xsUG9zaXRpb24nCgogICAgICAgIEl0IGlzIGEgIFVJL0NvbXBvc2l0aW5nIHRocmVh
ZCBtZXRob2Qgb25seSBhbmQgc2V0cyB0aGUgYXNzb2NpYXRlZCBMYXllckNvbXBvc2l0aW5nVGhy
ZWFkCiAgICAgICAgKGNhbW91ZmxhZ2VkIGFzIGEgdW5zaWduZWQpIGZvciBlYWNoIGNyZWF0ZWQg
SW5SZWdpb25TY3JvbGxhYmxlQXJlYSB0aGF0IHN1cHBvcnRzCiAgICAgICAgY29tcG9zaXRlZCBz
Y3JvbGxpbmcuCgogICAgICAgIFRoZSB3YXkgOjpjb21wb3NpdGVkU2V0U2Nyb2xsUG9zaXRpb24g
InNjcm9sbHMiIGEgbGF5ZXIgaXMgYnkgc2V0dGluZyB0aGUgYm91bmRzT3JpZ2luCiAgICAgICAg
cHJvcGVydHkgdG8gdGhlIExheWVyQ29tcG9zaXRpbmdUaHJlYWQncyAnb3ZlcnJpZGUnIHByb3Bl
cnR5IGluIHRoZSBVSS9Db21wb3NpdGluZyB0aHJlYWQuCgogICAgICAgIFNvdXJjZS9XZWJLaXQ6
CiAgICAgICAgKiBQbGF0Zm9ybUJsYWNrQmVycnkuY21ha2U6IEJ1aWxkIHN5c3RlbSBhZGFwdGF0
aW9uLgoKICAgICAgICBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnk6CiAgICAgICAgKiBBcGkvSW5S
ZWdpb25TY3JvbGxlci5jcHA6IEFkZGVkLgogICAgICAgIChXZWJLaXQpOgogICAgICAgIChCbGFj
a0JlcnJ5OjpXZWJLaXQ6OkluUmVnaW9uU2Nyb2xsZXI6OkluUmVnaW9uU2Nyb2xsZXIpOgogICAg
ICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkluUmVnaW9uU2Nyb2xsZXI6On5JblJlZ2lvblNjcm9s
bGVyKToKICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpJblJlZ2lvblNjcm9sbGVyOjpjb21w
b3NpdGVkU2V0U2Nyb2xsUG9zaXRpb24pOgogICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6Oklu
UmVnaW9uU2Nyb2xsZXJQcml2YXRlOjpJblJlZ2lvblNjcm9sbGVyUHJpdmF0ZSk6CiAgICAgICAg
KEJsYWNrQmVycnk6OldlYktpdDo6SW5SZWdpb25TY3JvbGxlclByaXZhdGU6OnNldE5vZGUpOgog
ICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkluUmVnaW9uU2Nyb2xsZXJQcml2YXRlOjpub2Rl
KToKICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpJblJlZ2lvblNjcm9sbGVyUHJpdmF0ZTo6
cmVzZXQpOgogICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkluUmVnaW9uU2Nyb2xsZXJQcml2
YXRlOjpoYXNOb2RlKToKICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpJblJlZ2lvblNjcm9s
bGVyUHJpdmF0ZTo6Y2FuU2Nyb2xsKToKICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpJblJl
Z2lvblNjcm9sbGVyUHJpdmF0ZTo6Y29tcG9zaXRlZFNldFNjcm9sbFBvc2l0aW9uKToKICAgICAg
ICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpJblJlZ2lvblNjcm9sbGVyUHJpdmF0ZTo6c2Nyb2xsQnkp
OgogICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkluUmVnaW9uU2Nyb2xsZXJQcml2YXRlOjpp
blJlZ2lvblNjcm9sbGFibGVBcmVhc0ZvclBvaW50KToKICAgICAgICAoQmxhY2tCZXJyeTo6V2Vi
S2l0OjpJblJlZ2lvblNjcm9sbGVyUHJpdmF0ZTo6c2Nyb2xsTm9kZVJlY3Vyc2l2ZWx5KToKICAg
ICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpJblJlZ2lvblNjcm9sbGVyUHJpdmF0ZTo6c2Nyb2xs
UmVuZGVyZXIpOgogICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkluUmVnaW9uU2Nyb2xsZXJQ
cml2YXRlOjphZGp1c3RTY3JvbGxEZWx0YSk6CiAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6
Y2FuU2Nyb2xsSW5uZXJGcmFtZSk6CiAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6Y2FuU2Ny
b2xsUmVuZGVyQm94KToKICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpwYXJlbnRMYXllcik6
CiAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6ZW5jbG9zaW5nTGF5ZXJOb2RlKToKICAgICAg
ICAoQmxhY2tCZXJyeTo6V2ViS2l0Ojppc05vblJlbmRlclZpZXdGaXhlZFBvc2l0aW9uZWRDb250
YWluZXIpOgogICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OnB1c2hCYWNrSW5SZWdpb25TY3Jv
bGxhYmxlKToKICAgICAgICAqIEFwaS9JblJlZ2lvblNjcm9sbGVyLmg6IEFkZGVkLgogICAgICAg
IChXZWJLaXQpOgogICAgICAgIChJblJlZ2lvblNjcm9sbGVyKToKICAgICAgICAqIEFwaS9JblJl
Z2lvblNjcm9sbGVyX3AuaDogQWRkZWQuCiAgICAgICAgKFdlYkNvcmUpOgogICAgICAgIChXZWJL
aXQpOgogICAgICAgIChJblJlZ2lvblNjcm9sbGVyUHJpdmF0ZSk6CiAgICAgICAgKiBBcGkvV2Vi
UGFnZS5jcHA6CiAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFnZVByaXZhdGU6OnNj
cm9sbEJ5KToKICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJQYWdlUHJpdmF0ZTo6bm90
aWZ5SW5SZWdpb25TY3JvbGxTdGF0dXNDaGFuZ2VkKToKICAgICAgICAoQmxhY2tCZXJyeTo6V2Vi
S2l0OjpXZWJQYWdlUHJpdmF0ZTo6Y2xlYXJEb2N1bWVudERhdGEpOgogICAgICAgIChCbGFja0Jl
cnJ5OjpXZWJLaXQ6OldlYlBhZ2VQcml2YXRlOjpzZXRTY3JvbGxPcmlnaW5Qb2ludCk6CiAgICAg
ICAgKiBXZWJLaXRTdXBwb3J0L1RvdWNoRXZlbnRIYW5kbGVyLmNwcDoKICAgICAgICAoQmxhY2tC
ZXJyeTo6V2ViS2l0OjpUb3VjaEV2ZW50SGFuZGxlcjo6ZHJhd1RhcEhpZ2hsaWdodCk6CgpDb25m
bGljdHM6CgoJU291cmNlL1dlYktpdC9QbGF0Zm9ybUJsYWNrQmVycnkuY21ha2UKLS0tCiBTb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtQmxhY2tCZXJyeS5jbWFrZSAgICAgICAgICAgICB8ICAgIDMgKy0K
IFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvSW5SZWdpb25TY3JvbGxlci5jcHAgIHwgIDM5
MyArKysrKysrKysrKysrKysrKysrKwogU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9JblJl
Z2lvblNjcm9sbGVyLmggICAgfCAgIDQ4ICsrKwogU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0Fw
aS9JblJlZ2lvblNjcm9sbGVyX3AuaCAgfCAgIDcwICsrKysKIFNvdXJjZS9XZWJLaXQvYmxhY2ti
ZXJyeS9BcGkvV2ViUGFnZS5jcHAgICAgICAgICAgIHwgICAyMiArLQogU291cmNlL1dlYktpdC9i
bGFja2JlcnJ5L0FwaS9XZWJQYWdlLmggICAgICAgICAgICAgfCAgICAzICsKIC4uLi9XZWJLaXRT
dXBwb3J0L0luUmVnaW9uU2Nyb2xsYWJsZUFyZWEuY3BwICAgICAgIHwgICAxNSArLQogLi4uL2Js
YWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JblJlZ2lvblNjcm9sbGVyLmNwcCAgfCAgMzU2IC0tLS0t
LS0tLS0tLS0tLS0tLQogLi4uL2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JblJlZ2lvblNjcm9s
bGVyLmggICAgfCAgIDY3IC0tLS0KIC4uLi9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvVG91Y2hF
dmVudEhhbmRsZXIuY3BwIHwgICAgMyArLQogMTAgZmlsZXMgY2hhbmdlZCwgNTQ1IGluc2VydGlv
bnMoKyksIDQzNSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0
L2JsYWNrYmVycnkvQXBpL0luUmVnaW9uU2Nyb2xsZXIuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQg
U291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9JblJlZ2lvblNjcm9sbGVyLmgKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL0luUmVnaW9uU2Nyb2xsZXJf
cC5oCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1
cHBvcnQvSW5SZWdpb25TY3JvbGxlci5jcHAKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2Vi
S2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JblJlZ2lvblNjcm9sbGVyLmgKCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtQmxhY2tCZXJyeS5jbWFrZSBiL1NvdXJjZS9XZWJL
aXQvUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtlCmluZGV4IGVlMTFlZDYuLmJlNGZlZDMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtlCisrKyBiL1NvdXJj
ZS9XZWJLaXQvUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtlCkBAIC01Nyw2ICs1Nyw3IEBAIEFERF9E
RUZJTklUSU9OUygtRFVTRVJfUFJPQ0VTU0VTKQogTElTVChBUFBFTkQgV2ViS2l0X1NPVVJDRVMK
ICAgICBibGFja2JlcnJ5L0FwaS9CYWNraW5nU3RvcmUuY3BwCiAgICAgYmxhY2tiZXJyeS9BcGkv
QmxhY2tCZXJyeUdsb2JhbC5jcHAKKyAgICBibGFja2JlcnJ5L0FwaS9JblJlZ2lvblNjcm9sbGVy
LmNwcAogICAgIGJsYWNrYmVycnkvQXBpL1dlYkFuaW1hdGlvbi5jcHAKICAgICBibGFja2JlcnJ5
L0FwaS9XZWJLaXRNSU1FVHlwZUNvbnZlcnRlci5jcHAKICAgICBibGFja2JlcnJ5L0FwaS9XZWJL
aXRUZXh0Q29kZWMuY3BwCkBAIC0xMDAsOCArMTAxLDYgQEAgTElTVChBUFBFTkQgV2ViS2l0X1NP
VVJDRVMKICAgICBibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5QYWdlU2VhcmNoTWFuYWdlci5j
cHAKICAgICBibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5wdXRIYW5kbGVyLmNwcAogICAgIGJs
YWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JblJlZ2lvblNjcm9sbGFibGVBcmVhLmNwcAotICAgIGJs
YWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JblJlZ2lvblNjcm9sbGVyLmNwcAotICAgIGJsYWNrYmVy
cnkvV2ViS2l0U3VwcG9ydC9JbnNwZWN0b3JPdmVybGF5LmNwcAogICAgIGJsYWNrYmVycnkvV2Vi
S2l0U3VwcG9ydC9SZW5kZXJRdWV1ZS5jcHAKICAgICBibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQv
U2VsZWN0aW9uSGFuZGxlci5jcHAKICAgICBibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvU2VsZWN0
aW9uT3ZlcmxheS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkv
SW5SZWdpb25TY3JvbGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL0luUmVn
aW9uU2Nyb2xsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhNTk0
MGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL0luUmVn
aW9uU2Nyb2xsZXIuY3BwCkBAIC0wLDAgKzEsMzkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDExLCAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEg
IDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJ
blJlZ2lvblNjcm9sbGVyLmgiCisKKyNpbmNsdWRlICJCYWNraW5nU3RvcmVDbGllbnQuaCIKKyNp
bmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkhUTUxGcmFtZU93bmVyRWxlbWVudC5oIgorI2lu
Y2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKKyNpbmNsdWRlICJJblJlZ2lvblNjcm9sbGFibGVBcmVh
LmgiCisjaW5jbHVkZSAiSW5SZWdpb25TY3JvbGxlcl9wLmgiCisjaW5jbHVkZSAiTGF5ZXJDb21w
b3NpdGluZ1RocmVhZC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJSZW5kZXJCb3gu
aCIKKyNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgor
I2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKKyNpbmNsdWRlICJXZWJQYWdlX3AuaCIKKwordXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBCbGFja0JlcnJ5IHsKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitzdGF0aWMgYm9vbCBjYW5TY3JvbGxJbm5lckZyYW1lKEZyYW1lKik7CitzdGF0
aWMgYm9vbCBjYW5TY3JvbGxSZW5kZXJCb3goUmVuZGVyQm94Kik7CitzdGF0aWMgUmVuZGVyTGF5
ZXIqIHBhcmVudExheWVyKFJlbmRlckxheWVyKik7CitzdGF0aWMgTm9kZSogZW5jbG9zaW5nTGF5
ZXJOb2RlKFJlbmRlckxheWVyKik7CitzdGF0aWMgYm9vbCBpc05vblJlbmRlclZpZXdGaXhlZFBv
c2l0aW9uZWRDb250YWluZXIoUmVuZGVyTGF5ZXIqKTsKK3N0YXRpYyB2b2lkIHB1c2hCYWNrSW5S
ZWdpb25TY3JvbGxhYmxlKHN0ZDo6dmVjdG9yPFBsYXRmb3JtOjpTY3JvbGxWaWV3QmFzZSo+Jiwg
SW5SZWdpb25TY3JvbGxhYmxlQXJlYSosIEluUmVnaW9uU2Nyb2xsZXJQcml2YXRlKik7CisKK0lu
UmVnaW9uU2Nyb2xsZXI6OkluUmVnaW9uU2Nyb2xsZXIoV2ViUGFnZVByaXZhdGUqIHdlYlBhZ2VQ
cml2YXRlKQorICAgIDogZChuZXcgSW5SZWdpb25TY3JvbGxlclByaXZhdGUod2ViUGFnZVByaXZh
dGUpKQoreworICAgIEFTU0VSVCh3ZWJQYWdlUHJpdmF0ZSk7Cit9CisKK0luUmVnaW9uU2Nyb2xs
ZXI6On5JblJlZ2lvblNjcm9sbGVyKCkKK3sKKyAgICBkZWxldGUgZDsKK30KKworYm9vbCBJblJl
Z2lvblNjcm9sbGVyOjpjb21wb3NpdGVkU2V0U2Nyb2xsUG9zaXRpb24odW5zaWduZWQgY2Ftb3Vm
bGFnZWRMYXllciwgY29uc3QgUGxhdGZvcm06OkludFBvaW50JiBzY3JvbGxQb3NpdGlvbikKK3sK
KyAgICBBU1NFUlQoUGxhdGZvcm06OnVzZXJJbnRlcmZhY2VUaHJlYWRNZXNzYWdlQ2xpZW50KCkt
PmlzQ3VycmVudFRocmVhZCgpKTsKKyAgICByZXR1cm4gZC0+Y29tcG9zaXRlZFNldFNjcm9sbFBv
c2l0aW9uKGNhbW91ZmxhZ2VkTGF5ZXIsIGQtPm1fd2ViUGFnZS0+bWFwRnJvbVRyYW5zZm9ybWVk
KHNjcm9sbFBvc2l0aW9uKSk7Cit9CisKK0luUmVnaW9uU2Nyb2xsZXJQcml2YXRlOjpJblJlZ2lv
blNjcm9sbGVyUHJpdmF0ZShXZWJQYWdlUHJpdmF0ZSogd2ViUGFnZVByaXZhdGUpCisgICAgOiBt
X3dlYlBhZ2Uod2ViUGFnZVByaXZhdGUpCit7Cit9CisKK3ZvaWQgSW5SZWdpb25TY3JvbGxlclBy
aXZhdGU6OnNldE5vZGUoV2ViQ29yZTo6Tm9kZSogbm9kZSkKK3sKKyAgICBtX2luUmVnaW9uU2Ny
b2xsU3RhcnRpbmdOb2RlID0gbm9kZTsKK30KKworV2ViQ29yZTo6Tm9kZSogSW5SZWdpb25TY3Jv
bGxlclByaXZhdGU6Om5vZGUoKSBjb25zdAoreworICAgIHJldHVybiBtX2luUmVnaW9uU2Nyb2xs
U3RhcnRpbmdOb2RlLmdldCgpOworfQorCit2b2lkIEluUmVnaW9uU2Nyb2xsZXJQcml2YXRlOjpy
ZXNldCgpCit7CisgICAgc2V0Tm9kZSgwKTsKK30KKworYm9vbCBJblJlZ2lvblNjcm9sbGVyUHJp
dmF0ZTo6aGFzTm9kZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICEhbV9pblJlZ2lvblNjcm9sbFN0
YXJ0aW5nTm9kZTsKK30KKworYm9vbCBJblJlZ2lvblNjcm9sbGVyUHJpdmF0ZTo6Y2FuU2Nyb2xs
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzTm9kZSgpOworfQorCitib29sIEluUmVnaW9uU2Ny
b2xsZXJQcml2YXRlOjpjb21wb3NpdGVkU2V0U2Nyb2xsUG9zaXRpb24odW5zaWduZWQgY2Ftb3Vm
bGFnZWRMYXllciwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHNjcm9sbFBvc2l0aW9uKQorewor
ICAgIExheWVyQ29tcG9zaXRpbmdUaHJlYWQqIHNjcm9sbExheWVyID0gcmVpbnRlcnByZXRfY2Fz
dDxMYXllckNvbXBvc2l0aW5nVGhyZWFkKj4oY2Ftb3VmbGFnZWRMYXllcik7CisgICAgc2Nyb2xs
TGF5ZXItPm92ZXJyaWRlKCktPnNldEJvdW5kc09yaWdpbihXZWJDb3JlOjpGbG9hdFBvaW50KHNj
cm9sbFBvc2l0aW9uLngoKSwgc2Nyb2xsUG9zaXRpb24ueSgpKSk7CisKKyAgICBtX3dlYlBhZ2Ut
PnNjaGVkdWxlQ29tcG9zaXRpbmdSdW4oKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBJ
blJlZ2lvblNjcm9sbGVyUHJpdmF0ZTo6c2Nyb2xsQnkoY29uc3QgUGxhdGZvcm06OkludFNpemUm
IGRlbHRhKQoreworICAgIEFTU0VSVChQbGF0Zm9ybTo6d2Via2l0VGhyZWFkTWVzc2FnZUNsaWVu
dCgpLT5pc0N1cnJlbnRUaHJlYWQoKSk7CisKKyAgICBpZiAoIWNhblNjcm9sbCgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gc2Nyb2xsTm9kZVJlY3Vyc2l2ZWx5KG5vZGUo
KSwgZGVsdGEpOworfQorCitzdGQ6OnZlY3RvcjxQbGF0Zm9ybTo6U2Nyb2xsVmlld0Jhc2UqPiBJ
blJlZ2lvblNjcm9sbGVyUHJpdmF0ZTo6aW5SZWdpb25TY3JvbGxhYmxlQXJlYXNGb3JQb2ludChj
b25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQpCit7CisgICAgc3RkOjp2ZWN0b3I8UGxhdGZv
cm06OlNjcm9sbFZpZXdCYXNlKj4gdmFsaWRSZXR1cm47CisgICAgc3RkOjp2ZWN0b3I8UGxhdGZv
cm06OlNjcm9sbFZpZXdCYXNlKj4gZW1wdHlSZXR1cm47CisKKyAgICBIaXRUZXN0UmVzdWx0IHJl
c3VsdCA9IG1fd2ViUGFnZS0+bV9tYWluRnJhbWUtPmV2ZW50SGFuZGxlcigpLT5oaXRUZXN0UmVz
dWx0QXRQb2ludChtX3dlYlBhZ2UtPm1hcEZyb21WaWV3cG9ydFRvQ29udGVudHMocG9pbnQpLCBm
YWxzZSAvKmFsbG93U2hhZG93Q29udGVudCovKTsKKyAgICBOb2RlKiBub2RlID0gcmVzdWx0Lmlu
bmVyTm9uU2hhcmVkTm9kZSgpOworICAgIGlmICghbm9kZSB8fCAhbm9kZS0+cmVuZGVyZXIoKSkK
KyAgICAgICAgcmV0dXJuIGVtcHR5UmV0dXJuOworCisgICAgUmVuZGVyTGF5ZXIqIGxheWVyID0g
bm9kZS0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKTsKKyAgICBkbyB7CisgICAgICAgIFJl
bmRlck9iamVjdCogcmVuZGVyZXIgPSBsYXllci0+cmVuZGVyZXIoKTsKKworICAgICAgICBpZiAo
cmVuZGVyZXItPmlzUmVuZGVyVmlldygpKSB7CisgICAgICAgICAgICBpZiAoUmVuZGVyVmlldyog
cmVuZGVyVmlldyA9IHRvUmVuZGVyVmlldyhyZW5kZXJlcikpIHsKKyAgICAgICAgICAgICAgICBG
cmFtZVZpZXcqIHZpZXcgPSByZW5kZXJWaWV3LT5mcmFtZVZpZXcoKTsKKyAgICAgICAgICAgICAg
ICBpZiAoIXZpZXcpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbXB0eVJldHVybjsKKwor
ICAgICAgICAgICAgICAgIGlmIChjYW5TY3JvbGxJbm5lckZyYW1lKHZpZXctPmZyYW1lKCkpKSB7
CisgICAgICAgICAgICAgICAgICAgIHB1c2hCYWNrSW5SZWdpb25TY3JvbGxhYmxlKHZhbGlkUmV0
dXJuLCBuZXcgSW5SZWdpb25TY3JvbGxhYmxlQXJlYShtX3dlYlBhZ2UsIGxheWVyKSwgdGhpcyk7
CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChjYW5TY3JvbGxSZW5kZXJCb3gobGF5ZXItPnJl
bmRlckJveCgpKSkgeworICAgICAgICAgICAgcHVzaEJhY2tJblJlZ2lvblNjcm9sbGFibGUodmFs
aWRSZXR1cm4sIG5ldyBJblJlZ2lvblNjcm9sbGFibGVBcmVhKG1fd2ViUGFnZSwgbGF5ZXIpLCB0
aGlzKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gSWYg
d2UgcnVuIGludG8gYSBmaXggcG9zaXRpb25lZCBsYXllciwgc2V0IHRoZSBsYXN0IHNjcm9sbGFi
bGUgaW4tcmVnaW9uIG9iamVjdAorICAgICAgICAvLyBhcyBub3QgYWJsZSB0byBwcm9wYWdhdGUg
c2Nyb2xsIHRvIGl0cyBwYXJlbnQgc2Nyb2xsYWJsZS4KKyAgICAgICAgaWYgKGlzTm9uUmVuZGVy
Vmlld0ZpeGVkUG9zaXRpb25lZENvbnRhaW5lcihsYXllcikgJiYgdmFsaWRSZXR1cm4uc2l6ZSgp
KSB7CisgICAgICAgICAgICBQbGF0Zm9ybTo6U2Nyb2xsVmlld0Jhc2UqIGVuZCA9IHZhbGlkUmV0
dXJuLmJhY2soKTsKKyAgICAgICAgICAgIGVuZC0+c2V0Q2FuUHJvcGFnYXRlU2Nyb2xsaW5nVG9F
bmNsb3NpbmdTY3JvbGxhYmxlKGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgfSB3aGlsZSAobGF5
ZXIgPSBwYXJlbnRMYXllcihsYXllcikpOworCisgICAgaWYgKHZhbGlkUmV0dXJuLmVtcHR5KCkp
CisgICAgICAgIHJldHVybiBlbXB0eVJldHVybjsKKworICAgIC8vIFBvc3QtY2FsY3VsYXRlIHRo
ZSB2aXNpYmxlIHdpbmRvdyByZWN0cyBpbiByZXZlcnNlIGhpdCB0ZXN0IG9yZGVyIHNvCisgICAg
Ly8gd2UgYWNjb3VudCBmb3IgYWxsIGFuZCBhbnkgY2xpcHBpbmcgcmVjdHMuCisgICAgV2ViQ29y
ZTo6SW50UmVjdCByZWN1cnNpdmVDbGlwcGluZ1JlY3QoV2ViQ29yZTo6SW50UG9pbnQ6Onplcm8o
KSwgbV93ZWJQYWdlLT50cmFuc2Zvcm1lZFZpZXdwb3J0U2l6ZSgpKTsKKworICAgIHN0ZDo6dmVj
dG9yPFBsYXRmb3JtOjpTY3JvbGxWaWV3QmFzZSo+OjpyZXZlcnNlX2l0ZXJhdG9yIHJlbmQgPSB2
YWxpZFJldHVybi5yZW5kKCk7CisgICAgZm9yIChzdGQ6OnZlY3RvcjxQbGF0Zm9ybTo6U2Nyb2xs
Vmlld0Jhc2UqPjo6cmV2ZXJzZV9pdGVyYXRvciByaXQgPSB2YWxpZFJldHVybi5yYmVnaW4oKTsg
cml0ICE9IHJlbmQ7ICsrcml0KSB7CisKKyAgICAgICAgSW5SZWdpb25TY3JvbGxhYmxlQXJlYSog
Y3VyciA9IHN0YXRpY19jYXN0PEluUmVnaW9uU2Nyb2xsYWJsZUFyZWEqPigqcml0KTsKKyAgICAg
ICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gY3Vyci0+bGF5ZXIoKTsKKworICAgICAgICBpZiAobGF5
ZXIgJiYgbGF5ZXItPnJlbmRlcmVyKCktPmlzUmVuZGVyVmlldygpKSB7IC8vICNkb2N1bWVudCBj
YXNlCisgICAgICAgICAgICBGcmFtZVZpZXcqIHZpZXcgPSB0b1JlbmRlclZpZXcobGF5ZXItPnJl
bmRlcmVyKCkpLT5mcmFtZVZpZXcoKTsKKyAgICAgICAgICAgIEFTU0VSVCh2aWV3KTsKKyAgICAg
ICAgICAgIEFTU0VSVChjYW5TY3JvbGxJbm5lckZyYW1lKHZpZXctPmZyYW1lKCkpKTsKKworICAg
ICAgICAgICAgV2ViQ29yZTo6SW50UmVjdCBmcmFtZVdpbmRvd1JlY3QgPSBtX3dlYlBhZ2UtPm1h
cFRvVHJhbnNmb3JtZWQobV93ZWJQYWdlLT5nZXRSZWN1cnNpdmVWaXNpYmxlV2luZG93UmVjdCh2
aWV3KSk7CisgICAgICAgICAgICBmcmFtZVdpbmRvd1JlY3QuaW50ZXJzZWN0KHJlY3Vyc2l2ZUNs
aXBwaW5nUmVjdCk7CisgICAgICAgICAgICBjdXJyLT5zZXRWaXNpYmxlV2luZG93UmVjdChmcmFt
ZVdpbmRvd1JlY3QpOworICAgICAgICAgICAgcmVjdXJzaXZlQ2xpcHBpbmdSZWN0ID0gZnJhbWVX
aW5kb3dSZWN0OworCisgICAgICAgIH0gZWxzZSB7IC8vIFJlbmRlckJveC1iYXNlZCBlbGVtZW50
cyBjYXNlIChzY3JvbGxhYmxlIGJveGVzIChkaXYncywgcCdzLCB0ZXh0YXJlYSdzLCBldGMpKS4K
KworICAgICAgICAgICAgUmVuZGVyQm94KiBib3ggPSBsYXllci0+cmVuZGVyQm94KCk7CisgICAg
ICAgICAgICBBU1NFUlQoYm94KTsKKyAgICAgICAgICAgIEFTU0VSVChjYW5TY3JvbGxSZW5kZXJC
b3goYm94KSk7CisKKyAgICAgICAgICAgIFdlYkNvcmU6OkludFJlY3QgdmlzaWJsZVdpbmRvd1Jl
Y3QgPSBlbmNsb3NpbmdJbnRSZWN0KGJveC0+YWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0KCkp
OworICAgICAgICAgICAgdmlzaWJsZVdpbmRvd1JlY3QgPSBib3gtPmZyYW1lKCktPnZpZXcoKS0+
Y29udGVudHNUb1dpbmRvdyh2aXNpYmxlV2luZG93UmVjdCk7CisgICAgICAgICAgICB2aXNpYmxl
V2luZG93UmVjdCA9IG1fd2ViUGFnZS0+bWFwVG9UcmFuc2Zvcm1lZCh2aXNpYmxlV2luZG93UmVj
dCk7CisgICAgICAgICAgICB2aXNpYmxlV2luZG93UmVjdC5pbnRlcnNlY3QocmVjdXJzaXZlQ2xp
cHBpbmdSZWN0KTsKKworICAgICAgICAgICAgY3Vyci0+c2V0VmlzaWJsZVdpbmRvd1JlY3Qodmlz
aWJsZVdpbmRvd1JlY3QpOworICAgICAgICAgICAgcmVjdXJzaXZlQ2xpcHBpbmdSZWN0ID0gdmlz
aWJsZVdpbmRvd1JlY3Q7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdmFsaWRSZXR1
cm47Cit9CisKK2Jvb2wgSW5SZWdpb25TY3JvbGxlclByaXZhdGU6OnNjcm9sbE5vZGVSZWN1cnNp
dmVseShXZWJDb3JlOjpOb2RlKiBub2RlLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBkZWx0YSkK
K3sKKyAgICBpZiAoZGVsdGEuaXNaZXJvKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
aWYgKCFub2RlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSZW5kZXJPYmplY3QqIHJl
bmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKKyAgICBpZiAoIXJlbmRlcmVyKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBGcmFtZVZpZXcqIHZpZXcgPSByZW5kZXJlci0+dmlldygpLT5m
cmFtZVZpZXcoKTsKKyAgICBpZiAoIXZpZXcpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IC8vIFRyeSBzY3JvbGxpbmcgdGhlIHJlbmRlcmVyLgorICAgIGlmIChzY3JvbGxSZW5kZXJlcihy
ZW5kZXJlciwgZGVsdGEpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIFdlJ3ZlIGhp
dCB0aGUgcGFnZSwgZG9uJ3Qgc2Nyb2xsIGl0IGFuZCByZXR1cm4gZmFsc2UuCisgICAgaWYgKHZp
ZXcgPT0gbV93ZWJQYWdlLT5tX21haW5GcmFtZS0+dmlldygpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAvLyBUcnkgc2Nyb2xsaW5nIHRoZSBGcmFtZVZpZXcuCisgICAgaWYgKGNhblNj
cm9sbElubmVyRnJhbWUodmlldy0+ZnJhbWUoKSkpIHsKKyAgICAgICAgSW50U2l6ZSB2aWV3RGVs
dGEgPSBkZWx0YTsKKyAgICAgICAgSW50UG9pbnQgbmV3Vmlld09mZnNldCA9IHZpZXctPnNjcm9s
bFBvc2l0aW9uKCk7CisgICAgICAgIEludFBvaW50IG1heFZpZXdPZmZzZXQgPSB2aWV3LT5tYXhp
bXVtU2Nyb2xsUG9zaXRpb24oKTsKKyAgICAgICAgYWRqdXN0U2Nyb2xsRGVsdGEobWF4Vmlld09m
ZnNldCwgbmV3Vmlld09mZnNldCwgdmlld0RlbHRhKTsKKworICAgICAgICBpZiAoIXZpZXdEZWx0
YS5pc1plcm8oKSkgeworICAgICAgICAgICAgdmlldy0+c2V0Q2FuQmxpdE9uU2Nyb2xsKGZhbHNl
KTsKKworICAgICAgICAgICAgQmFja2luZ1N0b3JlQ2xpZW50KiBiYWNraW5nU3RvcmVDbGllbnQg
PSBtX3dlYlBhZ2UtPmJhY2tpbmdTdG9yZUNsaWVudEZvckZyYW1lKHZpZXctPmZyYW1lKCkpOwor
ICAgICAgICAgICAgaWYgKGJhY2tpbmdTdG9yZUNsaWVudCkgeworICAgICAgICAgICAgICAgIGJh
Y2tpbmdTdG9yZUNsaWVudC0+c2V0SXNDbGllbnRHZW5lcmF0ZWRTY3JvbGwodHJ1ZSk7CisgICAg
ICAgICAgICAgICAgYmFja2luZ1N0b3JlQ2xpZW50LT5zZXRJc1Njcm9sbE5vdGlmaWNhdGlvblN1
cHByZXNzZWQodHJ1ZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNldE5vZGUodmll
dy0+ZnJhbWUoKS0+ZG9jdW1lbnQoKSk7CisKKyAgICAgICAgICAgIHZpZXctPnNjcm9sbEJ5KHZp
ZXdEZWx0YSk7CisKKyAgICAgICAgICAgIGlmIChiYWNraW5nU3RvcmVDbGllbnQpIHsKKyAgICAg
ICAgICAgICAgICBiYWNraW5nU3RvcmVDbGllbnQtPnNldElzQ2xpZW50R2VuZXJhdGVkU2Nyb2xs
KGZhbHNlKTsKKyAgICAgICAgICAgICAgICBiYWNraW5nU3RvcmVDbGllbnQtPnNldElzU2Nyb2xs
Tm90aWZpY2F0aW9uU3VwcHJlc3NlZChmYWxzZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gVHJ5IHNjcm9sbGlu
ZyB0aGUgbm9kZSBvZiB0aGUgZW5jbG9zaW5nIGZyYW1lLgorICAgIEZyYW1lKiBmcmFtZSA9IG5v
ZGUtPmRvY3VtZW50KCktPmZyYW1lKCk7CisgICAgaWYgKGZyYW1lKSB7CisgICAgICAgIE5vZGUq
IG93bmVyTm9kZSA9IGZyYW1lLT5vd25lckVsZW1lbnQoKTsKKyAgICAgICAgaWYgKHNjcm9sbE5v
ZGVSZWN1cnNpdmVseShvd25lck5vZGUsIGRlbHRhKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBJblJlZ2lvblNjcm9sbGVy
UHJpdmF0ZTo6c2Nyb2xsUmVuZGVyZXIoV2ViQ29yZTo6UmVuZGVyT2JqZWN0KiByZW5kZXJlciwg
Y29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgZGVsdGEpCit7CisgICAgUmVuZGVyTGF5ZXIqIGxheWVy
ID0gcmVuZGVyZXItPmVuY2xvc2luZ0xheWVyKCk7CisgICAgaWYgKCFsYXllcikKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgLy8gVHJ5IHRvIHNjcm9sbCBsYXllci4KKyAgICBib29sIHJl
c3RyaWN0ZWRCeUxpbmVDbGFtcCA9IGZhbHNlOworICAgIGlmIChyZW5kZXJlci0+cGFyZW50KCkp
CisgICAgICAgIHJlc3RyaWN0ZWRCeUxpbmVDbGFtcCA9ICFyZW5kZXJlci0+cGFyZW50KCktPnN0
eWxlKCktPmxpbmVDbGFtcCgpLmlzTm9uZSgpOworCisgICAgaWYgKHJlbmRlcmVyLT5oYXNPdmVy
Zmxvd0NsaXAoKSAmJiAhcmVzdHJpY3RlZEJ5TGluZUNsYW1wKSB7CisgICAgICAgIEludFNpemUg
bGF5ZXJEZWx0YSA9IGRlbHRhOworICAgICAgICBJbnRQb2ludCBtYXhPZmZzZXQobGF5ZXItPnNj
cm9sbFdpZHRoKCkgLSBsYXllci0+cmVuZGVyQm94KCktPmNsaWVudFdpZHRoKCksIGxheWVyLT5z
Y3JvbGxIZWlnaHQoKSAtIGxheWVyLT5yZW5kZXJCb3goKS0+Y2xpZW50SGVpZ2h0KCkpOworICAg
ICAgICBJbnRQb2ludCBjdXJyZW50T2Zmc2V0KGxheWVyLT5zY3JvbGxYT2Zmc2V0KCksIGxheWVy
LT5zY3JvbGxZT2Zmc2V0KCkpOworICAgICAgICBhZGp1c3RTY3JvbGxEZWx0YShtYXhPZmZzZXQs
IGN1cnJlbnRPZmZzZXQsIGxheWVyRGVsdGEpOworICAgICAgICBpZiAoIWxheWVyRGVsdGEuaXNa
ZXJvKCkpIHsKKyAgICAgICAgICAgIHNldE5vZGUoZW5jbG9zaW5nTGF5ZXJOb2RlKGxheWVyKSk7
CisgICAgICAgICAgICBJbnRQb2ludCBuZXdPZmZzZXQgPSBjdXJyZW50T2Zmc2V0ICsgbGF5ZXJE
ZWx0YTsKKyAgICAgICAgICAgIGxheWVyLT5zY3JvbGxUb09mZnNldChuZXdPZmZzZXQueCgpLCBu
ZXdPZmZzZXQueSgpKTsKKyAgICAgICAgICAgIHJlbmRlcmVyLT5yZXBhaW50KHRydWUpOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB3aGlsZSAobGF5
ZXIgPSBsYXllci0+cGFyZW50KCkpIHsKKyAgICAgICAgaWYgKGNhblNjcm9sbFJlbmRlckJveChs
YXllci0+cmVuZGVyQm94KCkpKQorICAgICAgICAgICAgcmV0dXJuIHNjcm9sbFJlbmRlcmVyKGxh
eWVyLT5yZW5kZXJCb3goKSwgZGVsdGEpOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30K
Kwordm9pZCBJblJlZ2lvblNjcm9sbGVyUHJpdmF0ZTo6YWRqdXN0U2Nyb2xsRGVsdGEoY29uc3Qg
V2ViQ29yZTo6SW50UG9pbnQmIG1heE9mZnNldCwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGN1
cnJlbnRPZmZzZXQsIFdlYkNvcmU6OkludFNpemUmIGRlbHRhKSBjb25zdAoreworICAgIGlmIChj
dXJyZW50T2Zmc2V0LngoKSArIGRlbHRhLndpZHRoKCkgPiBtYXhPZmZzZXQueCgpKQorICAgICAg
ICBkZWx0YS5zZXRXaWR0aChzdGQ6Om1pbihtYXhPZmZzZXQueCgpIC0gY3VycmVudE9mZnNldC54
KCksIGRlbHRhLndpZHRoKCkpKTsKKworICAgIGlmIChjdXJyZW50T2Zmc2V0LngoKSArIGRlbHRh
LndpZHRoKCkgPCAwKQorICAgICAgICBkZWx0YS5zZXRXaWR0aChzdGQ6Om1heCgtY3VycmVudE9m
ZnNldC54KCksIGRlbHRhLndpZHRoKCkpKTsKKworICAgIGlmIChjdXJyZW50T2Zmc2V0LnkoKSAr
IGRlbHRhLmhlaWdodCgpID4gbWF4T2Zmc2V0LnkoKSkKKyAgICAgICAgZGVsdGEuc2V0SGVpZ2h0
KHN0ZDo6bWluKG1heE9mZnNldC55KCkgLSBjdXJyZW50T2Zmc2V0LnkoKSwgZGVsdGEuaGVpZ2h0
KCkpKTsKKworICAgIGlmIChjdXJyZW50T2Zmc2V0LnkoKSArIGRlbHRhLmhlaWdodCgpIDwgMCkK
KyAgICAgICAgZGVsdGEuc2V0SGVpZ2h0KHN0ZDo6bWF4KC1jdXJyZW50T2Zmc2V0LnkoKSwgZGVs
dGEuaGVpZ2h0KCkpKTsKK30KKworc3RhdGljIGJvb2wgY2FuU2Nyb2xsSW5uZXJGcmFtZShGcmFt
ZSogZnJhbWUpCit7CisgICAgaWYgKCFmcmFtZSB8fCAhZnJhbWUtPnZpZXcoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgLy8gTm90IGhhdmluZyBhbiBvd25lciBlbGVtZW50IG1lYW5z
IHRoYXQgd2UgYXJlIG9uIHRoZSBtYWluZnJhbWUuCisgICAgaWYgKCFmcmFtZS0+b3duZXJFbGVt
ZW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEFTU0VSVChmcmFtZSAhPSBmcmFt
ZS0+cGFnZSgpLT5tYWluRnJhbWUoKSk7CisKKyAgICBJbnRTaXplIHZpc2libGVTaXplID0gZnJh
bWUtPnZpZXcoKS0+dmlzaWJsZUNvbnRlbnRSZWN0KCkuc2l6ZSgpOworICAgIEludFNpemUgY29u
dGVudHNTaXplID0gZnJhbWUtPnZpZXcoKS0+Y29udGVudHNTaXplKCk7CisKKyAgICBib29sIGNh
bkJlU2Nyb2xsZWQgPSBjb250ZW50c1NpemUuaGVpZ2h0KCkgPiB2aXNpYmxlU2l6ZS5oZWlnaHQo
KSB8fCBjb250ZW50c1NpemUud2lkdGgoKSA+IHZpc2libGVTaXplLndpZHRoKCk7CisKKyAgICAv
LyBMZXRzIGFsc28gY29uc2lkZXIgdGhlICdvdmVyZmxvdy17eCx5fSBwcm9wZXJ0eSBzZXQgZGly
ZWN0bHkgdG8gdGhlIHtpfWZyYW1lIHRhZy4KKyAgICByZXR1cm4gY2FuQmVTY3JvbGxlZCAmJiAo
ZnJhbWUtPm93bmVyRWxlbWVudCgpLT5zY3JvbGxpbmdNb2RlKCkgIT0gU2Nyb2xsYmFyQWx3YXlz
T2ZmKTsKK30KKworLy8gVGhlIFJlbmRlckJveDo6Y2FuYmVTY3JvbGxlZEFuZEhhc1Njcm9sbGFi
bGVBcmVhIG1ldGhvZCByZXR1cm5zIHRydWUgZm9yIHRoZQorLy8gZm9sbG93aW5nIHNjZW5hcmlv
LCBmb3IgZXhhbXBsZToKKy8vICgxKSBhIGRpdiB0aGF0IGhhcyBhIHZlcnRpY2FsIG92ZXJmbG93
IGJ1dCBubyBob3Jpem9udGFsIG92ZXJmbG93CisvLyAgICAgd2l0aCBvdmVyZmxvdy15OiBoaWRk
ZW4gYW5kIG92ZXJmbG93LXg6IGF1dG8gc2V0LgorLy8gVGhlIHZlcnNpb24gYmVsb3cgZml4ZXMg
aXQuCisvLyBGSVhNRTogRml4IFJlbmRlckJveDo6Y2FuQmVTY3JvbGxlZEFuZEhhc1Njcm9sbGFi
bGVBcmVhIG1ldGhvZCBpbnN0ZWFkLgorc3RhdGljIGJvb2wgY2FuU2Nyb2xsUmVuZGVyQm94KFJl
bmRlckJveCogYm94KQoreworICAgIGlmICghYm94IHx8ICFib3gtPmhhc092ZXJmbG93Q2xpcCgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoYm94LT5zY3JvbGxzT3ZlcmZsb3dY
KCkgJiYgKGJveC0+c2Nyb2xsV2lkdGgoKSAhPSBib3gtPmNsaWVudFdpZHRoKCkpCisgICAgICAg
IHx8IGJveC0+c2Nyb2xsc092ZXJmbG93WSgpICYmIChib3gtPnNjcm9sbEhlaWdodCgpICE9IGJv
eC0+Y2xpZW50SGVpZ2h0KCkpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIE5vZGUqIG5v
ZGUgPSBib3gtPm5vZGUoKTsKKyAgICByZXR1cm4gbm9kZSAmJiAobm9kZS0+cmVuZGVyZXJJc0Vk
aXRhYmxlKCkgfHwgbm9kZS0+aXNEb2N1bWVudE5vZGUoKSk7Cit9CisKK3N0YXRpYyBSZW5kZXJM
YXllciogcGFyZW50TGF5ZXIoUmVuZGVyTGF5ZXIqIGxheWVyKQoreworICAgIEFTU0VSVChsYXll
cik7CisgICAgaWYgKGxheWVyLT5wYXJlbnQoKSkKKyAgICAgICAgcmV0dXJuIGxheWVyLT5wYXJl
bnQoKTsKKworICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBsYXllci0+cmVuZGVyZXIoKTsK
KyAgICBpZiAocmVuZGVyZXItPmRvY3VtZW50KCkgJiYgcmVuZGVyZXItPmRvY3VtZW50KCktPm93
bmVyRWxlbWVudCgpICYmIHJlbmRlcmVyLT5kb2N1bWVudCgpLT5vd25lckVsZW1lbnQoKS0+cmVu
ZGVyZXIoKSkKKyAgICAgICAgcmV0dXJuIHJlbmRlcmVyLT5kb2N1bWVudCgpLT5vd25lckVsZW1l
bnQoKS0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKTsKKworICAgIHJldHVybiAwOworfQor
CisvLyBGSVhNRTogTWFrZSBSZW5kZXJMYXllcjo6ZW5jbG9zaW5nRWxlbWVudCBwdWJsaWMgc28g
dGhpcyBvbmUgY2FuIGJlIHJlbW92ZWQuCitzdGF0aWMgTm9kZSogZW5jbG9zaW5nTGF5ZXJOb2Rl
KFJlbmRlckxheWVyKiBsYXllcikKK3sKKyAgICBmb3IgKFJlbmRlck9iamVjdCogciA9IGxheWVy
LT5yZW5kZXJlcigpOyByOyByID0gci0+cGFyZW50KCkpIHsKKyAgICAgICAgaWYgKE5vZGUqIGUg
PSByLT5ub2RlKCkpCisgICAgICAgICAgICByZXR1cm4gZTsKKyAgICB9CisgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBib29sIGlzTm9uUmVuZGVy
Vmlld0ZpeGVkUG9zaXRpb25lZENvbnRhaW5lcihSZW5kZXJMYXllciogbGF5ZXIpCit7CisgICAg
UmVuZGVyT2JqZWN0KiBvID0gbGF5ZXItPnJlbmRlcmVyKCk7CisgICAgaWYgKG8tPmlzUmVuZGVy
VmlldygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gby0+aXNQb3NpdGlv
bmVkKCkgJiYgby0+c3R5bGUoKS0+cG9zaXRpb24oKSA9PSBGaXhlZFBvc2l0aW9uOworfQorCitz
dGF0aWMgdm9pZCBwdXNoQmFja0luUmVnaW9uU2Nyb2xsYWJsZShzdGQ6OnZlY3RvcjxQbGF0Zm9y
bTo6U2Nyb2xsVmlld0Jhc2UqPiYgdmVjdG9yLCBJblJlZ2lvblNjcm9sbGFibGVBcmVhKiBzY3Jv
bGxhYmxlQXJlYSwgSW5SZWdpb25TY3JvbGxlclByaXZhdGUqIHNjcm9sbGVyKQoreworICAgIEFT
U0VSVChzY3JvbGxlcik7CisgICAgQVNTRVJUKCFzY3JvbGxhYmxlQXJlYS0+aXNOdWxsKCkpOwor
CisgICAgc2Nyb2xsYWJsZUFyZWEtPnNldENhblByb3BhZ2F0ZVNjcm9sbGluZ1RvRW5jbG9zaW5n
U2Nyb2xsYWJsZSghaXNOb25SZW5kZXJWaWV3Rml4ZWRQb3NpdGlvbmVkQ29udGFpbmVyKHNjcm9s
bGFibGVBcmVhLT5sYXllcigpKSk7CisgICAgdmVjdG9yLnB1c2hfYmFjayhzY3JvbGxhYmxlQXJl
YSk7CisgICAgaWYgKHZlY3Rvci5zaXplKCkgPT0gMSkgeworICAgICAgICAvLyBGSVhNRTogVXNl
IFJlbmRlckxheWVyOjpyZW5kZXJCb3goKS0+bm9kZSgpIGluc3RlYWQ/CisgICAgICAgIHNjcm9s
bGVyLT5zZXROb2RlKGVuY2xvc2luZ0xheWVyTm9kZShzY3JvbGxhYmxlQXJlYS0+bGF5ZXIoKSkp
OworICAgIH0KK30KKworfQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5
L0FwaS9JblJlZ2lvblNjcm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL0lu
UmVnaW9uU2Nyb2xsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjYx
YTJiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9JblJl
Z2lvblNjcm9sbGVyLmgKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSwgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAw
MjExMC0xMzAxICBVU0EKKyAqLworCisjaWZuZGVmIEluUmVnaW9uU2Nyb2xsZXJfaAorI2RlZmlu
ZSBJblJlZ2lvblNjcm9sbGVyX2gKKworI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybVByaW1p
dGl2ZXMuaD4KKworbmFtZXNwYWNlIEJsYWNrQmVycnkgeworbmFtZXNwYWNlIFdlYktpdCB7CisK
K2NsYXNzIEluUmVnaW9uU2Nyb2xsZXJQcml2YXRlOworY2xhc3MgVG91Y2hFdmVudEhhbmRsZXI7
CitjbGFzcyBXZWJQYWdlUHJpdmF0ZTsKKworY2xhc3MgSW5SZWdpb25TY3JvbGxlciB7CisKK3B1
YmxpYzoKKyAgICBJblJlZ2lvblNjcm9sbGVyKFdlYlBhZ2VQcml2YXRlKik7CisgICAgfkluUmVn
aW9uU2Nyb2xsZXIoKTsKKworICAgIGJvb2wgY29tcG9zaXRlZFNldFNjcm9sbFBvc2l0aW9uKHVu
c2lnbmVkIC8qY2Ftb3VmbGFnZWRMYXllciovLCBjb25zdCBQbGF0Zm9ybTo6SW50UG9pbnQmIC8q
c2Nyb2xsUG9zaXRpb24qLyk7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFdlYlBhZ2VQ
cml2YXRlOworICAgIGZyaWVuZCBjbGFzcyBUb3VjaEV2ZW50SGFuZGxlcjsKKyAgICBJblJlZ2lv
blNjcm9sbGVyUHJpdmF0ZSAqZDsKK307CisKK30KK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL0luUmVnaW9uU2Nyb2xsZXJfcC5oIGIvU291cmNl
L1dlYktpdC9ibGFja2JlcnJ5L0FwaS9JblJlZ2lvblNjcm9sbGVyX3AuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzY5ZWY1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9ibGFja2JlcnJ5L0FwaS9JblJlZ2lvblNjcm9sbGVyX3AuaApAQCAtMCwwICsxLDcw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBM
aW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8g
dGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpZm5k
ZWYgSW5SZWdpb25TY3JvbGxlclByaXZhdGVfaAorI2RlZmluZSBJblJlZ2lvblNjcm9sbGVyUHJp
dmF0ZV9oCisKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisKKyNpbmNsdWRlIDxpbnRlcmFjdGlvbi9T
Y3JvbGxWaWV3QmFzZS5oPgorI2luY2x1ZGUgPHZlY3Rvcj4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworY2xhc3MgRnJhbWU7CitjbGFzcyBMYXllckNvbXBvc2l0aW5nVGhyZWFkOworY2xhc3MgTm9k
ZTsKK2NsYXNzIFJlbmRlck9iamVjdDsKK30KKworbmFtZXNwYWNlIEJsYWNrQmVycnkgeworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlBhZ2VQcml2YXRlOworCitjbGFzcyBJblJlZ2lv
blNjcm9sbGVyUHJpdmF0ZSB7CisKK3B1YmxpYzoKKyAgICBJblJlZ2lvblNjcm9sbGVyUHJpdmF0
ZShXZWJQYWdlUHJpdmF0ZSopOworCisgICAgdm9pZCBzZXROb2RlKFdlYkNvcmU6Ok5vZGUqKTsK
KyAgICBXZWJDb3JlOjpOb2RlKiBub2RlKCkgY29uc3Q7CisgICAgdm9pZCByZXNldCgpOworCisg
ICAgYm9vbCBjYW5TY3JvbGwoKSBjb25zdDsKKyAgICBib29sIGhhc05vZGUoKSBjb25zdDsKKwor
ICAgIGJvb2wgc2Nyb2xsQnkoY29uc3QgUGxhdGZvcm06OkludFNpemUmIGRlbHRhKTsKKyAgICBi
b29sIGNvbXBvc2l0ZWRTZXRTY3JvbGxQb3NpdGlvbih1bnNpZ25lZCBjYW1vdWZsYWdlZExheWVy
LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24pOworCisgICAgc3RkOjp2
ZWN0b3I8UGxhdGZvcm06OlNjcm9sbFZpZXdCYXNlKj4gaW5SZWdpb25TY3JvbGxhYmxlQXJlYXNG
b3JQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOworCisgICAgV2ViUGFnZVByaXZhdGUq
IG1fd2ViUGFnZTsKK3ByaXZhdGU6CisKKyAgICBib29sIHNjcm9sbE5vZGVSZWN1cnNpdmVseShX
ZWJDb3JlOjpOb2RlKiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgZGVsdGEpOworICAgIGJvb2wg
c2Nyb2xsUmVuZGVyZXIoV2ViQ29yZTo6UmVuZGVyT2JqZWN0KiwgY29uc3QgV2ViQ29yZTo6SW50
U2l6ZSYgZGVsdGEpOworCisgICAgdm9pZCBhZGp1c3RTY3JvbGxEZWx0YShjb25zdCBXZWJDb3Jl
OjpJbnRQb2ludCYgbWF4T2Zmc2V0LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgY3VycmVudE9m
ZnNldCwgV2ViQ29yZTo6SW50U2l6ZSYgZGVsdGEpIGNvbnN0OworCisgICAgUmVmUHRyPFdlYkNv
cmU6Ok5vZGU+IG1faW5SZWdpb25TY3JvbGxTdGFydGluZ05vZGU7Cit9OworCit9Cit9CisKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJQYWdlLmNw
cCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFnZS5jcHAKaW5kZXggMTEzZDQ2
MS4uNzdjNDVlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJQ
YWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2UuY3BwCkBA
IC03MSw2ICs3MSw3IEBACiAjaW5jbHVkZSAiSWNvbkRhdGFiYXNlQ2xpZW50QmxhY2tCZXJyeS5o
IgogI2luY2x1ZGUgIkluUGFnZVNlYXJjaE1hbmFnZXIuaCIKICNpbmNsdWRlICJJblJlZ2lvblNj
cm9sbGFibGVBcmVhLmgiCisjaW5jbHVkZSAiSW5SZWdpb25TY3JvbGxlcl9wLmgiCiAjaW5jbHVk
ZSAiSW5wdXRIYW5kbGVyLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIu
aCIKICNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnRCbGFja0JlcnJ5LmgiCkBAIC0xNTIyLDcgKzE1
MjMsNyBAQCBib29sIFdlYlBhZ2VQcml2YXRlOjpzY3JvbGxCeShpbnQgZGVsdGFYLCBpbnQgZGVs
dGFZLCBib29sIHNjcm9sbE1haW5GcmFtZSkKICAgICAgICAgICAgIGRlbHRhLndpZHRoKCkgPCAw
ID8gLXVudHJhbnNmb3JtZWRDb3BpZWREZWx0YS53aWR0aCgpIDogdW50cmFuc2Zvcm1lZENvcGll
ZERlbHRhLndpZHRoKCksCiAgICAgICAgICAgICBkZWx0YS5oZWlnaHQoKSA8IDAgPyAtdW50cmFu
c2Zvcm1lZENvcGllZERlbHRhLmhlaWdodCgpOiB1bnRyYW5zZm9ybWVkQ29waWVkRGVsdGEuaGVp
Z2h0KCkpOwogCi0gICAgICAgIGlmIChtX2luUmVnaW9uU2Nyb2xsZXItPnNjcm9sbEJ5KGRlbHRh
KSkgeworICAgICAgICBpZiAobV9pblJlZ2lvblNjcm9sbGVyLT5kLT5zY3JvbGxCeShkZWx0YSkp
IHsKICAgICAgICAgICAgIG1fc2VsZWN0aW9uSGFuZGxlci0+c2VsZWN0aW9uUG9zaXRpb25DaGFu
Z2VkKCk7CiAgICAgICAgICAgICAvLyBGSVhNRTogV2UgaGF2ZSBjb2RlIGluIHBsYWNlIHRvIGhh
bmRsZSBzY3JvbGxpbmcgYW5kIGNsaXBwaW5nIHRhcCBoaWdobGlnaHQKICAgICAgICAgICAgIC8v
IG9uIGluLXJlZ2lvbiBzY3JvbGxpbmcuIEFzIHNvb24gYXMgaXQgaXMgZmFzdCBlbm91Z2ggKGku
ZS4gd2UgaGF2ZSBpdCBiYWNrZWQgYnkKQEAgLTE1NDgsOSArMTU0OSw5IEBAIGJvb2wgV2ViUGFn
ZTo6c2Nyb2xsQnkoY29uc3QgUGxhdGZvcm06OkludFNpemUmIGRlbHRhLCBib29sIHNjcm9sbE1h
aW5GcmFtZSkKIAogdm9pZCBXZWJQYWdlUHJpdmF0ZTo6bm90aWZ5SW5SZWdpb25TY3JvbGxTdGF0
dXNDaGFuZ2VkKGJvb2wgc3RhdHVzKQogewotICAgIGlmICghc3RhdHVzICYmIG1faW5SZWdpb25T
Y3JvbGxlci0+aGFzTm9kZSgpKSB7Ci0gICAgICAgIGVucXVldWVSZW5kZXJpbmdPZkNsaXBwZWRD
b250ZW50T2ZTY3JvbGxhYmxlTm9kZUFmdGVySW5SZWdpb25TY3JvbGxpbmcobV9pblJlZ2lvblNj
cm9sbGVyLT5ub2RlKCkpOwotICAgICAgICBtX2luUmVnaW9uU2Nyb2xsZXItPnJlc2V0KCk7Cisg
ICAgaWYgKCFzdGF0dXMgJiYgbV9pblJlZ2lvblNjcm9sbGVyLT5kLT5oYXNOb2RlKCkpIHsKKyAg
ICAgICAgZW5xdWV1ZVJlbmRlcmluZ09mQ2xpcHBlZENvbnRlbnRPZlNjcm9sbGFibGVOb2RlQWZ0
ZXJJblJlZ2lvblNjcm9sbGluZyhtX2luUmVnaW9uU2Nyb2xsZXItPmQtPm5vZGUoKSk7CisgICAg
ICAgIG1faW5SZWdpb25TY3JvbGxlci0+ZC0+cmVzZXQoKTsKICAgICB9CiB9CiAKQEAgLTI2MzMs
OCArMjYzNCw4IEBAIHZvaWQgV2ViUGFnZVByaXZhdGU6OmNsZWFyRG9jdW1lbnREYXRhKGNvbnN0
IERvY3VtZW50KiBkb2N1bWVudEdvaW5nQXdheSkKICAgICBpZiAobV9jdXJyZW50QmxvY2tab29t
QWRqdXN0ZWROb2RlICYmIG1fY3VycmVudEJsb2NrWm9vbUFkanVzdGVkTm9kZS0+ZG9jdW1lbnQo
KSA9PSBkb2N1bWVudEdvaW5nQXdheSkKICAgICAgICAgbV9jdXJyZW50QmxvY2tab29tQWRqdXN0
ZWROb2RlID0gMDsKIAotICAgIGlmIChtX2luUmVnaW9uU2Nyb2xsZXItPmhhc05vZGUoKSAmJiBt
X2luUmVnaW9uU2Nyb2xsZXItPm5vZGUoKS0+ZG9jdW1lbnQoKSA9PSBkb2N1bWVudEdvaW5nQXdh
eSkKLSAgICAgICAgbV9pblJlZ2lvblNjcm9sbGVyLT5yZXNldCgpOworICAgIGlmIChtX2luUmVn
aW9uU2Nyb2xsZXItPmQtPmhhc05vZGUoKSAmJiBtX2luUmVnaW9uU2Nyb2xsZXItPmQtPm5vZGUo
KS0+ZG9jdW1lbnQoKSA9PSBkb2N1bWVudEdvaW5nQXdheSkKKyAgICAgICAgbV9pblJlZ2lvblNj
cm9sbGVyLT5kLT5yZXNldCgpOwogCiAgICAgaWYgKGRvY3VtZW50R29pbmdBd2F5LT5mcmFtZSgp
KQogICAgICAgICBtX2lucHV0SGFuZGxlci0+ZnJhbWVVbmxvYWRlZChkb2N1bWVudEdvaW5nQXdh
eS0+ZnJhbWUoKSk7CkBAIC00MjExLDEyICs0MjEyLDEyIEBAIGJvb2wgV2ViUGFnZTo6dG91Y2hF
dmVudChjb25zdCBQbGF0Zm9ybTo6VG91Y2hFdmVudCYgZXZlbnQpCiAKIHZvaWQgV2ViUGFnZVBy
aXZhdGU6OnNldFNjcm9sbE9yaWdpblBvaW50KGNvbnN0IFBsYXRmb3JtOjpJbnRQb2ludCYgcG9p
bnQpCiB7Ci0gICAgbV9pblJlZ2lvblNjcm9sbGVyLT5yZXNldCgpOworICAgIG1faW5SZWdpb25T
Y3JvbGxlci0+ZC0+cmVzZXQoKTsKIAogICAgIGlmICghbV9oYXNJblJlZ2lvblNjcm9sbGFibGVB
cmVhcykKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9jbGllbnQtPm5vdGlmeUluUmVnaW9uU2Ny
b2xsaW5nU3RhcnRpbmdQb2ludENoYW5nZWQobV9pblJlZ2lvblNjcm9sbGVyLT5pblJlZ2lvblNj
cm9sbGFibGVBcmVhc0ZvclBvaW50KHBvaW50KSk7CisgICAgbV9jbGllbnQtPm5vdGlmeUluUmVn
aW9uU2Nyb2xsaW5nU3RhcnRpbmdQb2ludENoYW5nZWQobV9pblJlZ2lvblNjcm9sbGVyLT5kLT5p
blJlZ2lvblNjcm9sbGFibGVBcmVhc0ZvclBvaW50KHBvaW50KSk7CiB9CiAKIHZvaWQgV2ViUGFn
ZTo6c2V0U2Nyb2xsT3JpZ2luUG9pbnQoY29uc3QgUGxhdGZvcm06OkludFBvaW50JiBwb2ludCkK
QEAgLTQ2NTQsNiArNDY1NSwxMSBAQCBCYWNraW5nU3RvcmUqIFdlYlBhZ2U6OmJhY2tpbmdTdG9y
ZSgpIGNvbnN0CiAgICAgcmV0dXJuIGQtPm1fYmFja2luZ1N0b3JlOwogfQogCitJblJlZ2lvblNj
cm9sbGVyKiBXZWJQYWdlOjppblJlZ2lvblNjcm9sbGVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
ZC0+bV9pblJlZ2lvblNjcm9sbGVyLmdldCgpOworfQorCiBib29sIFdlYlBhZ2U6Onpvb21Ub0Zp
dCgpCiB7CiAgICAgaWYgKGQtPmNvbnRlbnRzU2l6ZSgpLmlzRW1wdHkoKSB8fCAhZC0+aXNVc2Vy
U2NhbGFibGUoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2Vi
UGFnZS5oIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJQYWdlLmgKaW5kZXggMWYw
YTc1MS4uMjQwNWE3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9X
ZWJQYWdlLmgKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJQYWdlLmgKQEAg
LTYzLDYgKzYzLDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBCYWNraW5nU3RvcmU7CiBj
bGFzcyBCYWNraW5nU3RvcmVDbGllbnQ7CiBjbGFzcyBCYWNraW5nU3RvcmVQcml2YXRlOworY2xh
c3MgSW5SZWdpb25TY3JvbGxlcjsKIGNsYXNzIFJlbmRlclF1ZXVlOwogY2xhc3MgV2ViT3Zlcmxh
eTsKIGNsYXNzIFdlYlBhZ2VDbGllbnQ7CkBAIC0xNzksNiArMTgwLDggQEAgcHVibGljOgogCiAg
ICAgQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUoKSBjb25zdDsKIAorICAgIEluUmVnaW9uU2Ny
b2xsZXIqIGluUmVnaW9uU2Nyb2xsZXIoKSBjb25zdDsKKwogICAgIGJvb2wgem9vbVRvRml0KCk7
CiAgICAgYm9vbCB6b29tVG9PbmVPbmUoKTsKICAgICB2b2lkIHpvb21Ub0luaXRpYWxTY2FsZSgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5S
ZWdpb25TY3JvbGxhYmxlQXJlYS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0
U3VwcG9ydC9JblJlZ2lvblNjcm9sbGFibGVBcmVhLmNwcAppbmRleCA3NmE5ODBlLi40YzYwODE1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JblJl
Z2lvblNjcm9sbGFibGVBcmVhLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2Vi
S2l0U3VwcG9ydC9JblJlZ2lvblNjcm9sbGFibGVBcmVhLmNwcApAQCAtMjAsOCArMjAsMTEgQEAK
ICNpbmNsdWRlICJJblJlZ2lvblNjcm9sbGFibGVBcmVhLmgiCiAKICNpbmNsdWRlICJGcmFtZS5o
IgorI2luY2x1ZGUgIkxheWVyV2ViS2l0VGhyZWFkLmgiCisjaW5jbHVkZSAiTGF5ZXJDb21wb3Np
dGluZ1RocmVhZC5oIgogI2luY2x1ZGUgIlJlbmRlckJveC5oIgogI2luY2x1ZGUgIlJlbmRlckxh
eWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCiAjaW5jbHVkZSAiUmVuZGVy
T2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIldlYlBhZ2VfcC5o
IgpAQCAtNjgsNiArNzEsOCBAQCBJblJlZ2lvblNjcm9sbGFibGVBcmVhOjpJblJlZ2lvblNjcm9s
bGFibGVBcmVhKFdlYlBhZ2VQcml2YXRlKiB3ZWJQYWdlLCBSZW5kZXJMYQogICAgICAgICBtX3Nj
cm9sbHNWZXJ0aWNhbGx5ID0gdmlldy0+Y29udGVudHNIZWlnaHQoKSA+IHZpZXctPnZpc2libGVI
ZWlnaHQoKTsKIAogICAgICAgICBtX292ZXJzY3JvbGxMaW1pdEZhY3RvciA9IDAuMDsgLy8gRklY
TUUgZXZlbnR1YWxseSBzdXBwb3J0IG92ZXJzY3JvbGwKKyAgICAgICAgbV9jYWNoZWRDb21wb3Np
dGVkU2Nyb2xsYWJsZUxheWVyID0gMDsgLy8gRklYTUU6IE5lZWRzIGNvbXBvc2l0ZWQgbGF5ZXIg
Zm9yIGlubmVyIGZyYW1lcy4KKwogICAgIH0gZWxzZSB7IC8vIFJlbmRlckJveC1iYXNlZCBlbGVt
ZW50cyBjYXNlIChzY3JvbGxhYmxlIGJveGVzIChkaXYncywgcCdzLCB0ZXh0YXJlYSdzLCBldGMp
KS4KIAogICAgICAgICBSZW5kZXJCb3gqIGJveCA9IG1fbGF5ZXItPnJlbmRlckJveCgpOwpAQCAt
ODIsNyArODcsMTUgQEAgSW5SZWdpb25TY3JvbGxhYmxlQXJlYTo6SW5SZWdpb25TY3JvbGxhYmxl
QXJlYShXZWJQYWdlUHJpdmF0ZSogd2ViUGFnZSwgUmVuZGVyTGEKICAgICAgICAgbV9zY3JvbGxz
SG9yaXpvbnRhbGx5ID0gYm94LT5zY3JvbGxXaWR0aCgpICE9IGJveC0+Y2xpZW50V2lkdGgoKSAm
JiBib3gtPnNjcm9sbHNPdmVyZmxvd1goKTsKICAgICAgICAgbV9zY3JvbGxzVmVydGljYWxseSA9
IGJveC0+c2Nyb2xsSGVpZ2h0KCkgIT0gYm94LT5jbGllbnRIZWlnaHQoKSAmJiBib3gtPnNjcm9s
bHNPdmVyZmxvd1koKTsKIAotICAgICAgICBtX292ZXJzY3JvbGxMaW1pdEZhY3RvciA9IDAuMDsg
Ly8gRklYTUUgZXZlbnR1YWxseSBzdXBwb3J0IG92ZXJzY3JvbGwKKyAgICAgICAgYm9vbCB1c2Vz
Q29tcG9zaXRlZFNjcm9sbGluZyA9IG1fbGF5ZXItPnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCk7
CisgICAgICAgIGlmICh1c2VzQ29tcG9zaXRlZFNjcm9sbGluZykgeworICAgICAgICAgICAgbV9z
dXBwb3J0c0NvbXBvc2l0ZWRTY3JvbGxpbmcgPSB0cnVlOworICAgICAgICAgICAgQVNTRVJUKG1f
bGF5ZXItPmJhY2tpbmcoKS0+aGFzU2Nyb2xsaW5nTGF5ZXIoKSk7CisKKyAgICAgICAgICAgIG1f
Y2FjaGVkQ29tcG9zaXRlZFNjcm9sbGFibGVMYXllciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWdu
ZWQ+KG1fbGF5ZXItPmJhY2tpbmcoKS0+c2Nyb2xsaW5nTGF5ZXIoKS0+cGxhdGZvcm1MYXllcigp
LT5sYXllckNvbXBvc2l0aW5nVGhyZWFkKCkpOworICAgICAgICB9CisKKyAgICAgICAgbV9vdmVy
c2Nyb2xsTGltaXRGYWN0b3IgPSAwLjA7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JblJlZ2lvblNjcm9sbGVyLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0luUmVnaW9uU2Nyb2xsZXIuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZDk4Mzc1Li4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0luUmVnaW9uU2Nyb2xsZXIuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsMzU2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTEsIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAg
MDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIklu
UmVnaW9uU2Nyb2xsZXIuaCIKLQotI2luY2x1ZGUgIkJhY2tpbmdTdG9yZUNsaWVudC5oIgotI2lu
Y2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCi0jaW5j
bHVkZSAiSGl0VGVzdFJlc3VsdC5oIgotI2luY2x1ZGUgIkluUmVnaW9uU2Nyb2xsYWJsZUFyZWEu
aCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUmVuZGVyQm94LmgiCi0jaW5jbHVkZSAi
UmVuZGVyTGF5ZXIuaCIKLSNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKLSNpbmNsdWRlICJSZW5k
ZXJWaWV3LmgiCi0jaW5jbHVkZSAiV2ViUGFnZV9wLmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwotCi1uYW1lc3BhY2UgQmxhY2tCZXJyeSB7Ci1uYW1lc3BhY2UgV2ViS2l0IHsKLQotc3Rh
dGljIGJvb2wgY2FuU2Nyb2xsSW5uZXJGcmFtZShGcmFtZSogZnJhbWUpCi17Ci0gICAgaWYgKCFm
cmFtZSB8fCAhZnJhbWUtPnZpZXcoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8g
Tm90IGhhdmluZyBhbiBvd25lciBlbGVtZW50IG1lYW5zIHRoYXQgd2UgYXJlIG9uIHRoZSBtYWlu
ZnJhbWUuCi0gICAgaWYgKCFmcmFtZS0+b3duZXJFbGVtZW50KCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIEFTU0VSVChmcmFtZSAhPSBmcmFtZS0+cGFnZSgpLT5tYWluRnJhbWUoKSk7
Ci0KLSAgICBJbnRTaXplIHZpc2libGVTaXplID0gZnJhbWUtPnZpZXcoKS0+dmlzaWJsZUNvbnRl
bnRSZWN0KCkuc2l6ZSgpOwotICAgIEludFNpemUgY29udGVudHNTaXplID0gZnJhbWUtPnZpZXco
KS0+Y29udGVudHNTaXplKCk7Ci0KLSAgICBib29sIGNhbkJlU2Nyb2xsZWQgPSBjb250ZW50c1Np
emUuaGVpZ2h0KCkgPiB2aXNpYmxlU2l6ZS5oZWlnaHQoKSB8fCBjb250ZW50c1NpemUud2lkdGgo
KSA+IHZpc2libGVTaXplLndpZHRoKCk7Ci0KLSAgICAvLyBMZXRzIGFsc28gY29uc2lkZXIgdGhl
ICdvdmVyZmxvdy17eCx5fSBwcm9wZXJ0eSBzZXQgZGlyZWN0bHkgdG8gdGhlIHtpfWZyYW1lIHRh
Zy4KLSAgICByZXR1cm4gY2FuQmVTY3JvbGxlZCAmJiAoZnJhbWUtPm93bmVyRWxlbWVudCgpLT5z
Y3JvbGxpbmdNb2RlKCkgIT0gU2Nyb2xsYmFyQWx3YXlzT2ZmKTsKLX0KLQotLy8gVGhlIFJlbmRl
ckJveDo6Y2FuYmVTY3JvbGxlZEFuZEhhc1Njcm9sbGFibGVBcmVhIG1ldGhvZCByZXR1cm5zIHRy
dWUgZm9yIHRoZQotLy8gZm9sbG93aW5nIHNjZW5hcmlvLCBmb3IgZXhhbXBsZToKLS8vICgxKSBh
IGRpdiB0aGF0IGhhcyBhIHZlcnRpY2FsIG92ZXJmbG93IGJ1dCBubyBob3Jpem9udGFsIG92ZXJm
bG93Ci0vLyAgICAgd2l0aCBvdmVyZmxvdy15OiBoaWRkZW4gYW5kIG92ZXJmbG93LXg6IGF1dG8g
c2V0LgotLy8gVGhlIHZlcnNpb24gYmVsb3cgZml4ZXMgaXQuCi0vLyBGSVhNRTogRml4IFJlbmRl
ckJveDo6Y2FuQmVTY3JvbGxlZEFuZEhhc1Njcm9sbGFibGVBcmVhIG1ldGhvZCBpbnN0ZWFkLgot
c3RhdGljIGJvb2wgY2FuU2Nyb2xsUmVuZGVyQm94KFJlbmRlckJveCogYm94KQotewotICAgIGlm
ICghYm94IHx8ICFib3gtPmhhc092ZXJmbG93Q2xpcCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBpZiAoYm94LT5zY3JvbGxzT3ZlcmZsb3dYKCkgJiYgKGJveC0+c2Nyb2xsV2lkdGgo
KSAhPSBib3gtPmNsaWVudFdpZHRoKCkpCi0gICAgICAgIHx8IGJveC0+c2Nyb2xsc092ZXJmbG93
WSgpICYmIChib3gtPnNjcm9sbEhlaWdodCgpICE9IGJveC0+Y2xpZW50SGVpZ2h0KCkpKQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIE5vZGUqIG5vZGUgPSBib3gtPm5vZGUoKTsKLSAgICBy
ZXR1cm4gbm9kZSAmJiAobm9kZS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkgfHwgbm9kZS0+aXNEb2N1
bWVudE5vZGUoKSk7Ci19Ci0KLXN0YXRpYyBSZW5kZXJMYXllciogcGFyZW50TGF5ZXIoUmVuZGVy
TGF5ZXIqIGxheWVyKQotewotICAgIEFTU0VSVChsYXllcik7Ci0gICAgaWYgKGxheWVyLT5wYXJl
bnQoKSkKLSAgICAgICAgcmV0dXJuIGxheWVyLT5wYXJlbnQoKTsKLQotICAgIFJlbmRlck9iamVj
dCogcmVuZGVyZXIgPSBsYXllci0+cmVuZGVyZXIoKTsKLSAgICBpZiAocmVuZGVyZXItPmRvY3Vt
ZW50KCkgJiYgcmVuZGVyZXItPmRvY3VtZW50KCktPm93bmVyRWxlbWVudCgpICYmIHJlbmRlcmVy
LT5kb2N1bWVudCgpLT5vd25lckVsZW1lbnQoKS0+cmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJu
IHJlbmRlcmVyLT5kb2N1bWVudCgpLT5vd25lckVsZW1lbnQoKS0+cmVuZGVyZXIoKS0+ZW5jbG9z
aW5nTGF5ZXIoKTsKLQotICAgIHJldHVybiAwOwotfQotCi0vLyBGSVhNRTogTWFrZSBSZW5kZXJM
YXllcjo6ZW5jbG9zaW5nRWxlbWVudCBwdWJsaWMgc28gdGhpcyBvbmUgY2FuIGJlIHJlbW92ZWQu
Ci1zdGF0aWMgTm9kZSogZW5jbG9zaW5nTGF5ZXJOb2RlKFJlbmRlckxheWVyKiBsYXllcikKLXsK
LSAgICBmb3IgKFJlbmRlck9iamVjdCogciA9IGxheWVyLT5yZW5kZXJlcigpOyByOyByID0gci0+
cGFyZW50KCkpIHsKLSAgICAgICAgaWYgKE5vZGUqIGUgPSByLT5ub2RlKCkpCi0gICAgICAgICAg
ICByZXR1cm4gZTsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJu
IDA7Ci19Ci0KLXN0YXRpYyBib29sIGlzTm9uUmVuZGVyVmlld0ZpeGVkUG9zaXRpb25lZENvbnRh
aW5lcihSZW5kZXJMYXllciogbGF5ZXIpCi17Ci0gICAgUmVuZGVyT2JqZWN0KiBvID0gbGF5ZXIt
PnJlbmRlcmVyKCk7Ci0gICAgaWYgKG8tPmlzUmVuZGVyVmlldygpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICByZXR1cm4gby0+aXNQb3NpdGlvbmVkKCkgJiYgby0+c3R5bGUoKS0+cG9z
aXRpb24oKSA9PSBGaXhlZFBvc2l0aW9uOwotfQotCi1zdGF0aWMgdm9pZCBwdXNoQmFja0luUmVn
aW9uU2Nyb2xsYWJsZShzdGQ6OnZlY3RvcjxQbGF0Zm9ybTo6U2Nyb2xsVmlld0Jhc2UqPiYgdmVj
dG9yLCBJblJlZ2lvblNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSwgSW5SZWdpb25TY3Jv
bGxlciogc2Nyb2xsZXIpCi17Ci0gICAgQVNTRVJUKHNjcm9sbGVyKTsKLSAgICBBU1NFUlQoIXNj
cm9sbGFibGVBcmVhLT5pc051bGwoKSk7Ci0KLSAgICBzY3JvbGxhYmxlQXJlYS0+c2V0Q2FuUHJv
cGFnYXRlU2Nyb2xsaW5nVG9FbmNsb3NpbmdTY3JvbGxhYmxlKCFpc05vblJlbmRlclZpZXdGaXhl
ZFBvc2l0aW9uZWRDb250YWluZXIoc2Nyb2xsYWJsZUFyZWEtPmxheWVyKCkpKTsKLSAgICB2ZWN0
b3IucHVzaF9iYWNrKHNjcm9sbGFibGVBcmVhKTsKLSAgICBpZiAodmVjdG9yLnNpemUoKSA9PSAx
KSB7Ci0gICAgICAgIC8vIEZJWE1FOiBVc2UgUmVuZGVyTGF5ZXI6OnJlbmRlckJveCgpLT5ub2Rl
KCkgaW5zdGVhZD8KLSAgICAgICAgc2Nyb2xsZXItPnNldE5vZGUoZW5jbG9zaW5nTGF5ZXJOb2Rl
KHNjcm9sbGFibGVBcmVhLT5sYXllcigpKSk7Ci0gICAgfQotfQotCi1JblJlZ2lvblNjcm9sbGVy
OjpJblJlZ2lvblNjcm9sbGVyKFdlYlBhZ2VQcml2YXRlKiB3ZWJQYWdlUHJpdmF0ZSkKLSAgICA6
IG1fd2ViUGFnZSh3ZWJQYWdlUHJpdmF0ZSkKLXsKLX0KLQotdm9pZCBJblJlZ2lvblNjcm9sbGVy
OjpzZXROb2RlKFdlYkNvcmU6Ok5vZGUqIG5vZGUpCi17Ci0gICAgbV9pblJlZ2lvblNjcm9sbFN0
YXJ0aW5nTm9kZSA9IG5vZGU7Ci19Ci0KLVdlYkNvcmU6Ok5vZGUqIEluUmVnaW9uU2Nyb2xsZXI6
Om5vZGUoKSBjb25zdAotewotICAgIHJldHVybiBtX2luUmVnaW9uU2Nyb2xsU3RhcnRpbmdOb2Rl
LmdldCgpOwotfQotCi12b2lkIEluUmVnaW9uU2Nyb2xsZXI6OnJlc2V0KCkKLXsKLSAgICBzZXRO
b2RlKDApOwotfQotCi1ib29sIEluUmVnaW9uU2Nyb2xsZXI6Omhhc05vZGUoKSBjb25zdAotewot
ICAgIHJldHVybiAhIW1faW5SZWdpb25TY3JvbGxTdGFydGluZ05vZGU7Ci19Ci0KLWJvb2wgSW5S
ZWdpb25TY3JvbGxlcjo6Y2FuU2Nyb2xsKCkgY29uc3QKLXsKLSAgICByZXR1cm4gaGFzTm9kZSgp
OwotfQotCi1ib29sIEluUmVnaW9uU2Nyb2xsZXI6OnNjcm9sbEJ5KGNvbnN0IFBsYXRmb3JtOjpJ
bnRTaXplJiBkZWx0YSkKLXsKLSAgICBpZiAoIWNhblNjcm9sbCgpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICByZXR1cm4gc2Nyb2xsTm9kZVJlY3Vyc2l2ZWx5KG5vZGUoKSwgZGVsdGEp
OwotfQotCi1zdGQ6OnZlY3RvcjxQbGF0Zm9ybTo6U2Nyb2xsVmlld0Jhc2UqPiBJblJlZ2lvblNj
cm9sbGVyOjppblJlZ2lvblNjcm9sbGFibGVBcmVhc0ZvclBvaW50KGNvbnN0IFdlYkNvcmU6Oklu
dFBvaW50JiBwb2ludCkKLXsKLSAgICBzdGQ6OnZlY3RvcjxQbGF0Zm9ybTo6U2Nyb2xsVmlld0Jh
c2UqPiB2YWxpZFJldHVybjsKLSAgICBzdGQ6OnZlY3RvcjxQbGF0Zm9ybTo6U2Nyb2xsVmlld0Jh
c2UqPiBlbXB0eVJldHVybjsKLQotICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0ID0gbV93ZWJQYWdl
LT5tX21haW5GcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmhpdFRlc3RSZXN1bHRBdFBvaW50KG1fd2Vi
UGFnZS0+bWFwRnJvbVZpZXdwb3J0VG9Db250ZW50cyhwb2ludCksIGZhbHNlIC8qYWxsb3dTaGFk
b3dDb250ZW50Ki8pOwotICAgIE5vZGUqIG5vZGUgPSByZXN1bHQuaW5uZXJOb25TaGFyZWROb2Rl
KCk7Ci0gICAgaWYgKCFub2RlIHx8ICFub2RlLT5yZW5kZXJlcigpKQotICAgICAgICByZXR1cm4g
ZW1wdHlSZXR1cm47Ci0KLSAgICBSZW5kZXJMYXllciogbGF5ZXIgPSBub2RlLT5yZW5kZXJlcigp
LT5lbmNsb3NpbmdMYXllcigpOwotICAgIGRvIHsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5k
ZXJlciA9IGxheWVyLT5yZW5kZXJlcigpOwotCi0gICAgICAgIGlmIChyZW5kZXJlci0+aXNSZW5k
ZXJWaWV3KCkpIHsKLSAgICAgICAgICAgIGlmIChSZW5kZXJWaWV3KiByZW5kZXJWaWV3ID0gdG9S
ZW5kZXJWaWV3KHJlbmRlcmVyKSkgewotICAgICAgICAgICAgICAgIEZyYW1lVmlldyogdmlldyA9
IHJlbmRlclZpZXctPmZyYW1lVmlldygpOwotICAgICAgICAgICAgICAgIGlmICghdmlldykKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGVtcHR5UmV0dXJuOwotCi0gICAgICAgICAgICAgICAg
aWYgKGNhblNjcm9sbElubmVyRnJhbWUodmlldy0+ZnJhbWUoKSkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgcHVzaEJhY2tJblJlZ2lvblNjcm9sbGFibGUodmFsaWRSZXR1cm4sIG5ldyBJblJlZ2lv
blNjcm9sbGFibGVBcmVhKG1fd2ViUGFnZSwgbGF5ZXIpLCB0aGlzKTsKLSAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICB9IGVsc2UgaWYgKGNhblNjcm9sbFJlbmRlckJveChsYXllci0+cmVuZGVyQm94KCkpKSB7Ci0g
ICAgICAgICAgICBwdXNoQmFja0luUmVnaW9uU2Nyb2xsYWJsZSh2YWxpZFJldHVybiwgbmV3IElu
UmVnaW9uU2Nyb2xsYWJsZUFyZWEobV93ZWJQYWdlLCBsYXllciksIHRoaXMpOwotICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJZiB3ZSBydW4gaW50byBhIGZp
eCBwb3NpdGlvbmVkIGxheWVyLCBzZXQgdGhlIGxhc3Qgc2Nyb2xsYWJsZSBpbi1yZWdpb24gb2Jq
ZWN0Ci0gICAgICAgIC8vIGFzIG5vdCBhYmxlIHRvIHByb3BhZ2F0ZSBzY3JvbGwgdG8gaXRzIHBh
cmVudCBzY3JvbGxhYmxlLgotICAgICAgICBpZiAoaXNOb25SZW5kZXJWaWV3Rml4ZWRQb3NpdGlv
bmVkQ29udGFpbmVyKGxheWVyKSAmJiB2YWxpZFJldHVybi5zaXplKCkpIHsKLSAgICAgICAgICAg
IFBsYXRmb3JtOjpTY3JvbGxWaWV3QmFzZSogZW5kID0gdmFsaWRSZXR1cm4uYmFjaygpOwotICAg
ICAgICAgICAgZW5kLT5zZXRDYW5Qcm9wYWdhdGVTY3JvbGxpbmdUb0VuY2xvc2luZ1Njcm9sbGFi
bGUoZmFsc2UpOwotICAgICAgICB9Ci0KLSAgICB9IHdoaWxlIChsYXllciA9IHBhcmVudExheWVy
KGxheWVyKSk7Ci0KLSAgICBpZiAodmFsaWRSZXR1cm4uZW1wdHkoKSkKLSAgICAgICAgcmV0dXJu
IGVtcHR5UmV0dXJuOwotCi0gICAgLy8gUG9zdC1jYWxjdWxhdGUgdGhlIHZpc2libGUgd2luZG93
IHJlY3RzIGluIHJldmVyc2UgaGl0IHRlc3Qgb3JkZXIgc28KLSAgICAvLyB3ZSBhY2NvdW50IGZv
ciBhbGwgYW5kIGFueSBjbGlwcGluZyByZWN0cy4KLSAgICBXZWJDb3JlOjpJbnRSZWN0IHJlY3Vy
c2l2ZUNsaXBwaW5nUmVjdChXZWJDb3JlOjpJbnRQb2ludDo6emVybygpLCBtX3dlYlBhZ2UtPnRy
YW5zZm9ybWVkVmlld3BvcnRTaXplKCkpOwotCi0gICAgc3RkOjp2ZWN0b3I8UGxhdGZvcm06OlNj
cm9sbFZpZXdCYXNlKj46OnJldmVyc2VfaXRlcmF0b3IgcmVuZCA9IHZhbGlkUmV0dXJuLnJlbmQo
KTsKLSAgICBmb3IgKHN0ZDo6dmVjdG9yPFBsYXRmb3JtOjpTY3JvbGxWaWV3QmFzZSo+OjpyZXZl
cnNlX2l0ZXJhdG9yIHJpdCA9IHZhbGlkUmV0dXJuLnJiZWdpbigpOyByaXQgIT0gcmVuZDsgKyty
aXQpIHsKLQotICAgICAgICBJblJlZ2lvblNjcm9sbGFibGVBcmVhKiBjdXJyID0gc3RhdGljX2Nh
c3Q8SW5SZWdpb25TY3JvbGxhYmxlQXJlYSo+KCpyaXQpOwotICAgICAgICBSZW5kZXJMYXllciog
bGF5ZXIgPSBjdXJyLT5sYXllcigpOwotCi0gICAgICAgIGlmIChsYXllciAmJiBsYXllci0+cmVu
ZGVyZXIoKS0+aXNSZW5kZXJWaWV3KCkpIHsgLy8gI2RvY3VtZW50IGNhc2UKLSAgICAgICAgICAg
IEZyYW1lVmlldyogdmlldyA9IHRvUmVuZGVyVmlldyhsYXllci0+cmVuZGVyZXIoKSktPmZyYW1l
VmlldygpOwotICAgICAgICAgICAgQVNTRVJUKHZpZXcpOwotICAgICAgICAgICAgQVNTRVJUKGNh
blNjcm9sbElubmVyRnJhbWUodmlldy0+ZnJhbWUoKSkpOwotCi0gICAgICAgICAgICBXZWJDb3Jl
OjpJbnRSZWN0IGZyYW1lV2luZG93UmVjdCA9IG1fd2ViUGFnZS0+bWFwVG9UcmFuc2Zvcm1lZCht
X3dlYlBhZ2UtPmdldFJlY3Vyc2l2ZVZpc2libGVXaW5kb3dSZWN0KHZpZXcpKTsKLSAgICAgICAg
ICAgIGZyYW1lV2luZG93UmVjdC5pbnRlcnNlY3QocmVjdXJzaXZlQ2xpcHBpbmdSZWN0KTsKLSAg
ICAgICAgICAgIGN1cnItPnNldFZpc2libGVXaW5kb3dSZWN0KGZyYW1lV2luZG93UmVjdCk7Ci0g
ICAgICAgICAgICByZWN1cnNpdmVDbGlwcGluZ1JlY3QgPSBmcmFtZVdpbmRvd1JlY3Q7Ci0KLSAg
ICAgICAgfSBlbHNlIHsgLy8gUmVuZGVyQm94LWJhc2VkIGVsZW1lbnRzIGNhc2UgKHNjcm9sbGFi
bGUgYm94ZXMgKGRpdidzLCBwJ3MsIHRleHRhcmVhJ3MsIGV0YykpLgotCi0gICAgICAgICAgICBS
ZW5kZXJCb3gqIGJveCA9IGxheWVyLT5yZW5kZXJCb3goKTsKLSAgICAgICAgICAgIEFTU0VSVChi
b3gpOwotICAgICAgICAgICAgQVNTRVJUKGNhblNjcm9sbFJlbmRlckJveChib3gpKTsKLQotICAg
ICAgICAgICAgV2ViQ29yZTo6SW50UmVjdCB2aXNpYmxlV2luZG93UmVjdCA9IGVuY2xvc2luZ0lu
dFJlY3QoYm94LT5hYnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3QoKSk7Ci0gICAgICAgICAgICB2
aXNpYmxlV2luZG93UmVjdCA9IGJveC0+ZnJhbWUoKS0+dmlldygpLT5jb250ZW50c1RvV2luZG93
KHZpc2libGVXaW5kb3dSZWN0KTsKLSAgICAgICAgICAgIHZpc2libGVXaW5kb3dSZWN0ID0gbV93
ZWJQYWdlLT5tYXBUb1RyYW5zZm9ybWVkKHZpc2libGVXaW5kb3dSZWN0KTsKLSAgICAgICAgICAg
IHZpc2libGVXaW5kb3dSZWN0LmludGVyc2VjdChyZWN1cnNpdmVDbGlwcGluZ1JlY3QpOwotCi0g
ICAgICAgICAgICBjdXJyLT5zZXRWaXNpYmxlV2luZG93UmVjdCh2aXNpYmxlV2luZG93UmVjdCk7
Ci0gICAgICAgICAgICByZWN1cnNpdmVDbGlwcGluZ1JlY3QgPSB2aXNpYmxlV2luZG93UmVjdDsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB2YWxpZFJldHVybjsKLX0KLQotYm9vbCBJ
blJlZ2lvblNjcm9sbGVyOjpzY3JvbGxOb2RlUmVjdXJzaXZlbHkoV2ViQ29yZTo6Tm9kZSogbm9k
ZSwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgZGVsdGEpCi17Ci0gICAgaWYgKGRlbHRhLmlzWmVy
bygpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVy
KCk7Ci0gICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgRnJh
bWVWaWV3KiB2aWV3ID0gcmVuZGVyZXItPnZpZXcoKS0+ZnJhbWVWaWV3KCk7Ci0gICAgaWYgKCF2
aWV3KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBUcnkgc2Nyb2xsaW5nIHRoZSBy
ZW5kZXJlci4KLSAgICBpZiAoc2Nyb2xsUmVuZGVyZXIocmVuZGVyZXIsIGRlbHRhKSkKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBXZSd2ZSBoaXQgdGhlIHBhZ2UsIGRvbid0IHNjcm9s
bCBpdCBhbmQgcmV0dXJuIGZhbHNlLgotICAgIGlmICh2aWV3ID09IG1fd2ViUGFnZS0+bV9tYWlu
RnJhbWUtPnZpZXcoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gVHJ5IHNjcm9s
bGluZyB0aGUgRnJhbWVWaWV3LgotICAgIGlmIChjYW5TY3JvbGxJbm5lckZyYW1lKHZpZXctPmZy
YW1lKCkpKSB7Ci0gICAgICAgIEludFNpemUgdmlld0RlbHRhID0gZGVsdGE7Ci0gICAgICAgIElu
dFBvaW50IG5ld1ZpZXdPZmZzZXQgPSB2aWV3LT5zY3JvbGxQb3NpdGlvbigpOwotICAgICAgICBJ
bnRQb2ludCBtYXhWaWV3T2Zmc2V0ID0gdmlldy0+bWF4aW11bVNjcm9sbFBvc2l0aW9uKCk7Ci0g
ICAgICAgIGFkanVzdFNjcm9sbERlbHRhKG1heFZpZXdPZmZzZXQsIG5ld1ZpZXdPZmZzZXQsIHZp
ZXdEZWx0YSk7Ci0KLSAgICAgICAgaWYgKCF2aWV3RGVsdGEuaXNaZXJvKCkpIHsKLSAgICAgICAg
ICAgIHZpZXctPnNldENhbkJsaXRPblNjcm9sbChmYWxzZSk7Ci0KLSAgICAgICAgICAgIEJhY2tp
bmdTdG9yZUNsaWVudCogYmFja2luZ1N0b3JlQ2xpZW50ID0gbV93ZWJQYWdlLT5iYWNraW5nU3Rv
cmVDbGllbnRGb3JGcmFtZSh2aWV3LT5mcmFtZSgpKTsKLSAgICAgICAgICAgIGlmIChiYWNraW5n
U3RvcmVDbGllbnQpIHsKLSAgICAgICAgICAgICAgICBiYWNraW5nU3RvcmVDbGllbnQtPnNldElz
Q2xpZW50R2VuZXJhdGVkU2Nyb2xsKHRydWUpOwotICAgICAgICAgICAgICAgIGJhY2tpbmdTdG9y
ZUNsaWVudC0+c2V0SXNTY3JvbGxOb3RpZmljYXRpb25TdXBwcmVzc2VkKHRydWUpOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBzZXROb2RlKHZpZXctPmZyYW1lKCktPmRvY3VtZW50KCkp
OwotCi0gICAgICAgICAgICB2aWV3LT5zY3JvbGxCeSh2aWV3RGVsdGEpOwotCi0gICAgICAgICAg
ICBpZiAoYmFja2luZ1N0b3JlQ2xpZW50KSB7Ci0gICAgICAgICAgICAgICAgYmFja2luZ1N0b3Jl
Q2xpZW50LT5zZXRJc0NsaWVudEdlbmVyYXRlZFNjcm9sbChmYWxzZSk7Ci0gICAgICAgICAgICAg
ICAgYmFja2luZ1N0b3JlQ2xpZW50LT5zZXRJc1Njcm9sbE5vdGlmaWNhdGlvblN1cHByZXNzZWQo
ZmFsc2UpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIC8vIFRyeSBzY3JvbGxpbmcgdGhlIG5vZGUgb2YgdGhlIGVuY2xv
c2luZyBmcmFtZS4KLSAgICBGcmFtZSogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgp
OwotICAgIGlmIChmcmFtZSkgewotICAgICAgICBOb2RlKiBvd25lck5vZGUgPSBmcmFtZS0+b3du
ZXJFbGVtZW50KCk7Ci0gICAgICAgIGlmIChzY3JvbGxOb2RlUmVjdXJzaXZlbHkob3duZXJOb2Rl
LCBkZWx0YSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLWJvb2wgSW5SZWdpb25TY3JvbGxlcjo6c2Nyb2xsUmVuZGVyZXIoV2ViQ29y
ZTo6UmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgZGVsdGEp
Ci17Ci0gICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gcmVuZGVyZXItPmVuY2xvc2luZ0xheWVyKCk7
Ci0gICAgaWYgKCFsYXllcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gVHJ5IHRv
IHNjcm9sbCBsYXllci4KLSAgICBib29sIHJlc3RyaWN0ZWRCeUxpbmVDbGFtcCA9IGZhbHNlOwot
ICAgIGlmIChyZW5kZXJlci0+cGFyZW50KCkpCi0gICAgICAgIHJlc3RyaWN0ZWRCeUxpbmVDbGFt
cCA9ICFyZW5kZXJlci0+cGFyZW50KCktPnN0eWxlKCktPmxpbmVDbGFtcCgpLmlzTm9uZSgpOwot
Ci0gICAgaWYgKHJlbmRlcmVyLT5oYXNPdmVyZmxvd0NsaXAoKSAmJiAhcmVzdHJpY3RlZEJ5TGlu
ZUNsYW1wKSB7Ci0gICAgICAgIEludFNpemUgbGF5ZXJEZWx0YSA9IGRlbHRhOwotICAgICAgICBJ
bnRQb2ludCBtYXhPZmZzZXQobGF5ZXItPnNjcm9sbFdpZHRoKCkgLSBsYXllci0+cmVuZGVyQm94
KCktPmNsaWVudFdpZHRoKCksIGxheWVyLT5zY3JvbGxIZWlnaHQoKSAtIGxheWVyLT5yZW5kZXJC
b3goKS0+Y2xpZW50SGVpZ2h0KCkpOwotICAgICAgICBJbnRQb2ludCBjdXJyZW50T2Zmc2V0KGxh
eWVyLT5zY3JvbGxYT2Zmc2V0KCksIGxheWVyLT5zY3JvbGxZT2Zmc2V0KCkpOwotICAgICAgICBh
ZGp1c3RTY3JvbGxEZWx0YShtYXhPZmZzZXQsIGN1cnJlbnRPZmZzZXQsIGxheWVyRGVsdGEpOwot
ICAgICAgICBpZiAoIWxheWVyRGVsdGEuaXNaZXJvKCkpIHsKLSAgICAgICAgICAgIHNldE5vZGUo
ZW5jbG9zaW5nTGF5ZXJOb2RlKGxheWVyKSk7Ci0gICAgICAgICAgICBJbnRQb2ludCBuZXdPZmZz
ZXQgPSBjdXJyZW50T2Zmc2V0ICsgbGF5ZXJEZWx0YTsKLSAgICAgICAgICAgIGxheWVyLT5zY3Jv
bGxUb09mZnNldChuZXdPZmZzZXQueCgpLCBuZXdPZmZzZXQueSgpKTsKLSAgICAgICAgICAgIHJl
bmRlcmVyLT5yZXBhaW50KHRydWUpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICB3aGlsZSAobGF5ZXIgPSBsYXllci0+cGFyZW50KCkpIHsKLSAgICAg
ICAgaWYgKGNhblNjcm9sbFJlbmRlckJveChsYXllci0+cmVuZGVyQm94KCkpKQotICAgICAgICAg
ICAgcmV0dXJuIHNjcm9sbFJlbmRlcmVyKGxheWVyLT5yZW5kZXJCb3goKSwgZGVsdGEpOwotICAg
IH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBJblJlZ2lvblNjcm9sbGVyOjphZGp1
c3RTY3JvbGxEZWx0YShjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgbWF4T2Zmc2V0LCBjb25zdCBX
ZWJDb3JlOjpJbnRQb2ludCYgY3VycmVudE9mZnNldCwgV2ViQ29yZTo6SW50U2l6ZSYgZGVsdGEp
IGNvbnN0Ci17Ci0gICAgaWYgKGN1cnJlbnRPZmZzZXQueCgpICsgZGVsdGEud2lkdGgoKSA+IG1h
eE9mZnNldC54KCkpCi0gICAgICAgIGRlbHRhLnNldFdpZHRoKHN0ZDo6bWluKG1heE9mZnNldC54
KCkgLSBjdXJyZW50T2Zmc2V0LngoKSwgZGVsdGEud2lkdGgoKSkpOwotCi0gICAgaWYgKGN1cnJl
bnRPZmZzZXQueCgpICsgZGVsdGEud2lkdGgoKSA8IDApCi0gICAgICAgIGRlbHRhLnNldFdpZHRo
KHN0ZDo6bWF4KC1jdXJyZW50T2Zmc2V0LngoKSwgZGVsdGEud2lkdGgoKSkpOwotCi0gICAgaWYg
KGN1cnJlbnRPZmZzZXQueSgpICsgZGVsdGEuaGVpZ2h0KCkgPiBtYXhPZmZzZXQueSgpKQotICAg
ICAgICBkZWx0YS5zZXRIZWlnaHQoc3RkOjptaW4obWF4T2Zmc2V0LnkoKSAtIGN1cnJlbnRPZmZz
ZXQueSgpLCBkZWx0YS5oZWlnaHQoKSkpOwotCi0gICAgaWYgKGN1cnJlbnRPZmZzZXQueSgpICsg
ZGVsdGEuaGVpZ2h0KCkgPCAwKQotICAgICAgICBkZWx0YS5zZXRIZWlnaHQoc3RkOjptYXgoLWN1
cnJlbnRPZmZzZXQueSgpLCBkZWx0YS5oZWlnaHQoKSkpOwotfQotCi19Ci19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JblJlZ2lvblNjcm9sbGVy
LmggYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JblJlZ2lvblNjcm9s
bGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5YjE5MTIuLjAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5SZWdpb25TY3JvbGxl
ci5oCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMSwgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
LSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1B
ICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaWZuZGVmIEluUmVnaW9uU2Nyb2xsZXJfaAotI2Rl
ZmluZSBJblJlZ2lvblNjcm9sbGVyX2gKLQotI2luY2x1ZGUgIkludFJlY3QuaCIKLQotI2luY2x1
ZGUgPGludGVyYWN0aW9uL1Njcm9sbFZpZXdCYXNlLmg+Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBGcmFtZTsKLWNsYXNzIE5vZGU7Ci1jbGFzcyBSZW5k
ZXJPYmplY3Q7Ci19Ci0KLW5hbWVzcGFjZSBCbGFja0JlcnJ5IHsKLW5hbWVzcGFjZSBXZWJLaXQg
ewotCi1jbGFzcyBXZWJQYWdlUHJpdmF0ZTsKLQotY2xhc3MgSW5SZWdpb25TY3JvbGxlciB7Ci0K
LXB1YmxpYzoKLSAgICBJblJlZ2lvblNjcm9sbGVyKFdlYlBhZ2VQcml2YXRlKik7Ci0KLSAgICB2
b2lkIHNldE5vZGUoV2ViQ29yZTo6Tm9kZSopOwotICAgIFdlYkNvcmU6Ok5vZGUqIG5vZGUoKSBj
b25zdDsKLSAgICB2b2lkIHJlc2V0KCk7Ci0KLSAgICBib29sIGNhblNjcm9sbCgpIGNvbnN0Owot
ICAgIGJvb2wgaGFzTm9kZSgpIGNvbnN0OwotCi0gICAgYm9vbCBzY3JvbGxCeShjb25zdCBQbGF0
Zm9ybTo6SW50U2l6ZSYgZGVsdGEpOwotCi0gICAgc3RkOjp2ZWN0b3I8UGxhdGZvcm06OlNjcm9s
bFZpZXdCYXNlKj4gaW5SZWdpb25TY3JvbGxhYmxlQXJlYXNGb3JQb2ludChjb25zdCBXZWJDb3Jl
OjpJbnRQb2ludCYpOwotcHJpdmF0ZToKLQotICAgIGJvb2wgc2Nyb2xsTm9kZVJlY3Vyc2l2ZWx5
KFdlYkNvcmU6Ok5vZGUqLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBkZWx0YSk7Ci0gICAgYm9v
bCBzY3JvbGxSZW5kZXJlcihXZWJDb3JlOjpSZW5kZXJPYmplY3QqLCBjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJiBkZWx0YSk7Ci0KLSAgICB2b2lkIGFkanVzdFNjcm9sbERlbHRhKGNvbnN0IFdlYkNv
cmU6OkludFBvaW50JiBtYXhPZmZzZXQsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBjdXJyZW50
T2Zmc2V0LCBXZWJDb3JlOjpJbnRTaXplJiBkZWx0YSkgY29uc3Q7Ci0KLSAgICBSZWZQdHI8V2Vi
Q29yZTo6Tm9kZT4gbV9pblJlZ2lvblNjcm9sbFN0YXJ0aW5nTm9kZTsKLSAgICBXZWJQYWdlUHJp
dmF0ZSogbV93ZWJQYWdlOwotfTsKLQotfQotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L1RvdWNoRXZlbnRIYW5kbGVyLmNwcCBi
L1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L1RvdWNoRXZlbnRIYW5kbGVy
LmNwcAppbmRleCBjNGM4NDc4Li5jMmUzMDEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Js
YWNrYmVycnkvV2ViS2l0U3VwcG9ydC9Ub3VjaEV2ZW50SGFuZGxlci5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvVG91Y2hFdmVudEhhbmRsZXIuY3BwCkBA
IC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUg
IkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxQbHVnSW5FbGVtZW50LmgiCisjaW5jbHVkZSAi
SW5SZWdpb25TY3JvbGxlcl9wLmgiCiAjaW5jbHVkZSAiSW5wdXRIYW5kbGVyLmgiCiAjaW5jbHVk
ZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKQEAgLTMzOSw3ICszNDAsNyBAQCB2
b2lkIFRvdWNoRXZlbnRIYW5kbGVyOjpkcmF3VGFwSGlnaGxpZ2h0KCkKICAgICAvLyBPbiB0aGUg
Y2xpZW50IHNpZGUsIHRoaXMgaW5mbyBpcyBiZWluZyB1c2VkIHRvIGhpZGUgdGhlIHRhcCBoaWdo
bGlnaHQgd2luZG93IG9uIHNjcm9sbC4KICAgICBSZW5kZXJMYXllciogbGF5ZXIgPSBtX3dlYlBh
Z2UtPmVuY2xvc2luZ0ZpeGVkUG9zaXRpb25lZEFuY2VzdG9yT3JTZWxmSWZGaXhlZFBvc2l0aW9u
ZWQocmVuZGVyZXItPmVuY2xvc2luZ0xheWVyKCkpOwogICAgIGJvb2wgc2hvdWxkSGlkZVRhcEhp
Z2hsaWdodFJpZ2h0QWZ0ZXJTY3JvbGxpbmcgPSAhbGF5ZXItPnJlbmRlcmVyKCktPmlzUmVuZGVy
VmlldygpOwotICAgIHNob3VsZEhpZGVUYXBIaWdobGlnaHRSaWdodEFmdGVyU2Nyb2xsaW5nIHw9
ICEhbV93ZWJQYWdlLT5tX2luUmVnaW9uU2Nyb2xsZXItPm5vZGUoKTsKKyAgICBzaG91bGRIaWRl
VGFwSGlnaGxpZ2h0UmlnaHRBZnRlclNjcm9sbGluZyB8PSAhIW1fd2ViUGFnZS0+bV9pblJlZ2lv
blNjcm9sbGVyLT5kLT5ub2RlKCk7CiAKICAgICBJbnRQb2ludCBmcmFtZVBvcyhtX3dlYlBhZ2Ut
PmZyYW1lT2Zmc2V0KGVsZW1lbnRGcmFtZSkpOwogCi0tIAoxLjcuNS40Cgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>157235</attachid>
            <date>2012-08-08 09:27:30 -0700</date>
            <delta_ts>2012-08-08 10:32:52 -0700</delta_ts>
            <desc>patch - fixed style errors</desc>
            <filename>0001-BlackBerry-Tie-up-the-scrolling-machinery-to-the-gra.patch</filename>
            <type>text/plain</type>
            <size>51385</size>
            <attacher name="Antonio Gomes">tonikitoo</attacher>
            
              <data encoding="base64">RnJvbSAzMjU4OTAyMzgwYjUwYzkyM2FiZjdjMzk5Y2E1MjNmZDliNDE5MDk2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbnRvbmlvIEdvbWVzIDxhZ29tZXNAcmltLmNvbT4KRGF0ZTog
V2VkLCA4IEF1ZyAyMDEyIDEyOjIzOjA0IC0wNDAwClN1YmplY3Q6IFtQQVRDSF0gW0JsYWNrQmVy
cnldIFRpZSB1cCB0aGUgc2Nyb2xsaW5nIG1hY2hpbmVyeSB0byAgdGhlIGdyYXBoaWNzCiB0cmVl
IHdoZW4gYXBwbGljYWJsZSBmb3IgaW4tcmVnaW9uIHNjcm9sbAogaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTkzNDgyIFBSICMxODc2NzIKIE1ha2UgSW5SZWdpb25TY3Jv
bGxlciBhIHNpbXBsZSBwdWJsaWMgd2Via2l0LyBBUEkgUFIKICMxODg2NzcKClJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgpQYXRjaCBieSBBbnRvbmlvIEdvbWVzIDxhZ29tZXNAcmltLmNvbT4K
CkluIG9yZGVyIHRvIHByZXBhcmUgSW5SZWdpb25TY3JvbGxlciB0byBiZSBhIHB1YmxpYyBBUEkK
aW4gd2Via2l0LywgdGhlIHBhdGNoOgoKMSkgUmVuYW1lZCB0aGUgY3VycmVudCBJblJlZ2lvblNj
cm9sbGVyIGNsYXNzIHRvIEluUmVnaW9uU2Nyb2xsZXJQcml2YXRlOwoyKSBNb3ZlZCBJblJlZ2lv
blNjcm9sbGVyLmNwcHxoIGZyb20gV2ViS2l0U3VwcG9ydC8gdG8gQXBpLzsKMykgUmVuYW1lZCBJ
blJlZ2lvblNjcm9sbGVyLmggdG8gSW5SZWdpb25TY3JvbGxlcl9wLmg7CjQpIEFkZGVkIGEgbmV3
IHB1YmxpYyBjbGFzcyBpbXBsZW1lbnRhdGlvbiB0byBJblJlZ2lvblNjcm9sbGVyLmg7CjUpIEFk
YXB0ZWQgV2ViUGFnZSBhbmQgVG91Y2hFdmVudEhhbmRsZXIgY2xhc3NlcyB0byB1c2UgSW5SZWdp
b25TY3JvbGxlcjo6ZCBkaXJlY3RseS4KClRoZSBtb3N0IGltcG9ydGFudCBBUEkgaGVyZSBpcyAn
Ojpjb21wb3NpdGVkU2V0U2Nyb2xsUG9zaXRpb24nCgpJdCBpcyBhICBVSS9Db21wb3NpdGluZyB0
aHJlYWQgbWV0aG9kIG9ubHkgYW5kIHNldHMgdGhlIGFzc29jaWF0ZWQgTGF5ZXJDb21wb3NpdGlu
Z1RocmVhZAooY2Ftb3VmbGFnZWQgYXMgYSB1bnNpZ25lZCkgZm9yIGVhY2ggY3JlYXRlZCBJblJl
Z2lvblNjcm9sbGFibGVBcmVhIHRoYXQgc3VwcG9ydHMKY29tcG9zaXRlZCBzY3JvbGxpbmcuCgpU
aGUgd2F5IDo6Y29tcG9zaXRlZFNldFNjcm9sbFBvc2l0aW9uICJzY3JvbGxzIiBhIGxheWVyIGlz
IGJ5IHNldHRpbmcgdGhlIGJvdW5kc09yaWdpbgpwcm9wZXJ0eSB0byB0aGUgTGF5ZXJDb21wb3Np
dGluZ1RocmVhZCdzICdvdmVycmlkZScgcHJvcGVydHkgaW4gdGhlIFVJL0NvbXBvc2l0aW5nIHRo
cmVhZC4KCiogUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtlOiBCdWlsZCBzeXN0ZW0gYWRhcHRhdGlv
bi4KCiogQXBpL0luUmVnaW9uU2Nyb2xsZXIuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktp
dC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5SZWdpb25TY3JvbGxlci5jcHAuCihXZWJLaXQp
OgooQmxhY2tCZXJyeTo6V2ViS2l0OjpJblJlZ2lvblNjcm9sbGVyOjpJblJlZ2lvblNjcm9sbGVy
KToKKEJsYWNrQmVycnk6OldlYktpdDo6SW5SZWdpb25TY3JvbGxlcjo6fkluUmVnaW9uU2Nyb2xs
ZXIpOgooQmxhY2tCZXJyeTo6V2ViS2l0OjpJblJlZ2lvblNjcm9sbGVyOjpjb21wb3NpdGVkU2V0
U2Nyb2xsUG9zaXRpb24pOgooQmxhY2tCZXJyeTo6V2ViS2l0OjpJblJlZ2lvblNjcm9sbGVyUHJp
dmF0ZTo6SW5SZWdpb25TY3JvbGxlclByaXZhdGUpOgooQmxhY2tCZXJyeTo6V2ViS2l0OjpJblJl
Z2lvblNjcm9sbGVyUHJpdmF0ZTo6c2V0Tm9kZSk6CihCbGFja0JlcnJ5OjpXZWJLaXQ6OkluUmVn
aW9uU2Nyb2xsZXJQcml2YXRlOjpub2RlKToKKEJsYWNrQmVycnk6OldlYktpdDo6SW5SZWdpb25T
Y3JvbGxlclByaXZhdGU6OnJlc2V0KToKKEJsYWNrQmVycnk6OldlYktpdDo6SW5SZWdpb25TY3Jv
bGxlclByaXZhdGU6Omhhc05vZGUpOgooQmxhY2tCZXJyeTo6V2ViS2l0OjpJblJlZ2lvblNjcm9s
bGVyUHJpdmF0ZTo6Y2FuU2Nyb2xsKToKKEJsYWNrQmVycnk6OldlYktpdDo6SW5SZWdpb25TY3Jv
bGxlclByaXZhdGU6OmNvbXBvc2l0ZWRTZXRTY3JvbGxQb3NpdGlvbik6CihCbGFja0JlcnJ5OjpX
ZWJLaXQ6OkluUmVnaW9uU2Nyb2xsZXJQcml2YXRlOjpzY3JvbGxCeSk6CihCbGFja0JlcnJ5OjpX
ZWJLaXQ6OkluUmVnaW9uU2Nyb2xsZXJQcml2YXRlOjppblJlZ2lvblNjcm9sbGFibGVBcmVhc0Zv
clBvaW50KToKKEJsYWNrQmVycnk6OldlYktpdDo6SW5SZWdpb25TY3JvbGxlclByaXZhdGU6OnNj
cm9sbE5vZGVSZWN1cnNpdmVseSk6CihCbGFja0JlcnJ5OjpXZWJLaXQ6OkluUmVnaW9uU2Nyb2xs
ZXJQcml2YXRlOjpzY3JvbGxSZW5kZXJlcik6CihCbGFja0JlcnJ5OjpXZWJLaXQ6OkluUmVnaW9u
U2Nyb2xsZXJQcml2YXRlOjphZGp1c3RTY3JvbGxEZWx0YSk6CihCbGFja0JlcnJ5OjpXZWJLaXQ6
OmNhblNjcm9sbElubmVyRnJhbWUpOgooQmxhY2tCZXJyeTo6V2ViS2l0OjpjYW5TY3JvbGxSZW5k
ZXJCb3gpOgooQmxhY2tCZXJyeTo6V2ViS2l0OjpwYXJlbnRMYXllcik6CihCbGFja0JlcnJ5OjpX
ZWJLaXQ6OmVuY2xvc2luZ0xheWVyTm9kZSk6CihCbGFja0JlcnJ5OjpXZWJLaXQ6OmlzTm9uUmVu
ZGVyVmlld0ZpeGVkUG9zaXRpb25lZENvbnRhaW5lcik6CihCbGFja0JlcnJ5OjpXZWJLaXQ6OnB1
c2hCYWNrSW5SZWdpb25TY3JvbGxhYmxlKToKKiBBcGkvSW5SZWdpb25TY3JvbGxlci5oOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JblJlZ2lvblNj
cm9sbGVyLmguCihXZWJLaXQpOgooSW5SZWdpb25TY3JvbGxlcik6CiogQXBpL0luUmVnaW9uU2Ny
b2xsZXJfcC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1
cHBvcnQvSW5SZWdpb25TY3JvbGxlci5oLgooV2ViQ29yZSk6CihXZWJLaXQpOgooSW5SZWdpb25T
Y3JvbGxlclByaXZhdGUpOgoqIEFwaS9XZWJQYWdlLmNwcDoKKEJsYWNrQmVycnk6OldlYktpdDo6
V2ViUGFnZVByaXZhdGU6OnNjcm9sbEJ5KToKKEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFnZVBy
aXZhdGU6Om5vdGlmeUluUmVnaW9uU2Nyb2xsU3RhdHVzQ2hhbmdlZCk6CihCbGFja0JlcnJ5OjpX
ZWJLaXQ6OldlYlBhZ2VQcml2YXRlOjpjbGVhckRvY3VtZW50RGF0YSk6CihCbGFja0JlcnJ5OjpX
ZWJLaXQ6OldlYlBhZ2VQcml2YXRlOjpzZXRTY3JvbGxPcmlnaW5Qb2ludCk6CihCbGFja0JlcnJ5
OjpXZWJLaXQ6OldlYlBhZ2U6OmluUmVnaW9uU2Nyb2xsZXIpOgooV2ViS2l0KToKKiBBcGkvV2Vi
UGFnZS5oOgooV2ViS2l0KToKKiBXZWJLaXRTdXBwb3J0L0luUmVnaW9uU2Nyb2xsYWJsZUFyZWEu
Y3BwOgooQmxhY2tCZXJyeTo6V2ViS2l0OjpJblJlZ2lvblNjcm9sbGFibGVBcmVhOjpJblJlZ2lv
blNjcm9sbGFibGVBcmVhKToKKiBXZWJLaXRTdXBwb3J0L1RvdWNoRXZlbnRIYW5kbGVyLmNwcDoK
KEJsYWNrQmVycnk6OldlYktpdDo6VG91Y2hFdmVudEhhbmRsZXI6OmRyYXdUYXBIaWdobGlnaHQp
OgotLS0KIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgICAgOSArCiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtQmxhY2tCZXJyeS5jbWFrZSAgICAgICAg
ICAgICB8ICAgIDMgKy0KIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvSW5SZWdpb25TY3Jv
bGxlci5jcHAgIHwgIDM5MyArKysrKysrKysrKysrKysrKysrKwogU291cmNlL1dlYktpdC9ibGFj
a2JlcnJ5L0FwaS9JblJlZ2lvblNjcm9sbGVyLmggICAgfCAgIDQ4ICsrKwogU291cmNlL1dlYktp
dC9ibGFja2JlcnJ5L0FwaS9JblJlZ2lvblNjcm9sbGVyX3AuaCAgfCAgIDcwICsrKysKIFNvdXJj
ZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFnZS5jcHAgICAgICAgICAgIHwgICAyMiArLQog
U291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJQYWdlLmggICAgICAgICAgICAgfCAgICAz
ICsKIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgIHwg
ICA3MiArKysrCiAuLi4vV2ViS2l0U3VwcG9ydC9JblJlZ2lvblNjcm9sbGFibGVBcmVhLmNwcCAg
ICAgICB8ICAgMTUgKy0KIC4uLi9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5SZWdpb25TY3Jv
bGxlci5jcHAgIHwgIDM1NiAtLS0tLS0tLS0tLS0tLS0tLS0KIC4uLi9ibGFja2JlcnJ5L1dlYktp
dFN1cHBvcnQvSW5SZWdpb25TY3JvbGxlci5oICAgIHwgICA2NyAtLS0tCiAuLi4vYmxhY2tiZXJy
eS9XZWJLaXRTdXBwb3J0L1RvdWNoRXZlbnRIYW5kbGVyLmNwcCB8ICAgIDMgKy0KIDEyIGZpbGVz
IGNoYW5nZWQsIDYyNiBpbnNlcnRpb25zKCspLCA0MzUgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9JblJlZ2lvblNjcm9sbGVyLmNw
cAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvSW5SZWdp
b25TY3JvbGxlci5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdC9ibGFja2JlcnJ5
L0FwaS9JblJlZ2lvblNjcm9sbGVyX3AuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJL
aXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0luUmVnaW9uU2Nyb2xsZXIuY3BwCiBkZWxldGUg
bW9kZSAxMDA2NDQgU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5SZWdp
b25TY3JvbGxlci5oCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBkZjhiODkyLi5mNzUzYjY1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAt
MSwzICsxLDEyIEBACisyMDEyLTA4LTA4ICBBbnRvbmlvIEdvbWVzICA8YWdvbWVzQHJpbS5jb20+
CisKKyAgICAgICAgW0JsYWNrQmVycnldIFRpZSB1cCB0aGUgc2Nyb2xsaW5nIG1hY2hpbmVyeSB0
byAgdGhlIGdyYXBoaWNzIHRyZWUgd2hlbiBhcHBsaWNhYmxlIGZvciBpbi1yZWdpb24gc2Nyb2xs
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MzQ4Mgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogUGxhdGZv
cm1CbGFja0JlcnJ5LmNtYWtlOiBCdWlsZCBzeXN0ZW0gYWRhcHRhdGlvbi4KKwogMjAxMi0wOC0w
NyAgUnl1YW4gQ2hvaSAgPHJ5dWFuLmNob2lAc2Ftc3VuZy5jb20+CiAKICAgICAgICAgW0VGTF0g
UmVtb3ZlIFBsYXRmb3JtVG91Y2hFdmVudEVmbCBhbmQgUGxhdGZvcm1Ub3VjaFBvaW50RWZsCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtQmxhY2tCZXJyeS5jbWFrZSBiL1NvdXJj
ZS9XZWJLaXQvUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtlCmluZGV4IGVlMTFlZDYuLmJlNGZlZDMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtlCisrKyBi
L1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtlCkBAIC01Nyw2ICs1Nyw3IEBA
IEFERF9ERUZJTklUSU9OUygtRFVTRVJfUFJPQ0VTU0VTKQogTElTVChBUFBFTkQgV2ViS2l0X1NP
VVJDRVMKICAgICBibGFja2JlcnJ5L0FwaS9CYWNraW5nU3RvcmUuY3BwCiAgICAgYmxhY2tiZXJy
eS9BcGkvQmxhY2tCZXJyeUdsb2JhbC5jcHAKKyAgICBibGFja2JlcnJ5L0FwaS9JblJlZ2lvblNj
cm9sbGVyLmNwcAogICAgIGJsYWNrYmVycnkvQXBpL1dlYkFuaW1hdGlvbi5jcHAKICAgICBibGFj
a2JlcnJ5L0FwaS9XZWJLaXRNSU1FVHlwZUNvbnZlcnRlci5jcHAKICAgICBibGFja2JlcnJ5L0Fw
aS9XZWJLaXRUZXh0Q29kZWMuY3BwCkBAIC0xMDAsOCArMTAxLDYgQEAgTElTVChBUFBFTkQgV2Vi
S2l0X1NPVVJDRVMKICAgICBibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5QYWdlU2VhcmNoTWFu
YWdlci5jcHAKICAgICBibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5wdXRIYW5kbGVyLmNwcAog
ICAgIGJsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JblJlZ2lvblNjcm9sbGFibGVBcmVhLmNwcAot
ICAgIGJsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JblJlZ2lvblNjcm9sbGVyLmNwcAotICAgIGJs
YWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JbnNwZWN0b3JPdmVybGF5LmNwcAogICAgIGJsYWNrYmVy
cnkvV2ViS2l0U3VwcG9ydC9SZW5kZXJRdWV1ZS5jcHAKICAgICBibGFja2JlcnJ5L1dlYktpdFN1
cHBvcnQvU2VsZWN0aW9uSGFuZGxlci5jcHAKICAgICBibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQv
U2VsZWN0aW9uT3ZlcmxheS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJy
eS9BcGkvSW5SZWdpb25TY3JvbGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBp
L0luUmVnaW9uU2Nyb2xsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmVhNTk0MGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBp
L0luUmVnaW9uU2Nyb2xsZXIuY3BwCkBAIC0wLDAgKzEsMzkzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExLCAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAq
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rv
biwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJJblJlZ2lvblNjcm9sbGVyLmgiCisKKyNpbmNsdWRlICJCYWNraW5nU3RvcmVDbGllbnQu
aCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkhUTUxGcmFtZU93bmVyRWxlbWVudC5o
IgorI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKKyNpbmNsdWRlICJJblJlZ2lvblNjcm9sbGFi
bGVBcmVhLmgiCisjaW5jbHVkZSAiSW5SZWdpb25TY3JvbGxlcl9wLmgiCisjaW5jbHVkZSAiTGF5
ZXJDb21wb3NpdGluZ1RocmVhZC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJSZW5k
ZXJCb3guaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlck9iamVj
dC5oIgorI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKKyNpbmNsdWRlICJXZWJQYWdlX3AuaCIKKwor
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBCbGFja0JlcnJ5IHsKK25hbWVz
cGFjZSBXZWJLaXQgeworCitzdGF0aWMgYm9vbCBjYW5TY3JvbGxJbm5lckZyYW1lKEZyYW1lKik7
CitzdGF0aWMgYm9vbCBjYW5TY3JvbGxSZW5kZXJCb3goUmVuZGVyQm94Kik7CitzdGF0aWMgUmVu
ZGVyTGF5ZXIqIHBhcmVudExheWVyKFJlbmRlckxheWVyKik7CitzdGF0aWMgTm9kZSogZW5jbG9z
aW5nTGF5ZXJOb2RlKFJlbmRlckxheWVyKik7CitzdGF0aWMgYm9vbCBpc05vblJlbmRlclZpZXdG
aXhlZFBvc2l0aW9uZWRDb250YWluZXIoUmVuZGVyTGF5ZXIqKTsKK3N0YXRpYyB2b2lkIHB1c2hC
YWNrSW5SZWdpb25TY3JvbGxhYmxlKHN0ZDo6dmVjdG9yPFBsYXRmb3JtOjpTY3JvbGxWaWV3QmFz
ZSo+JiwgSW5SZWdpb25TY3JvbGxhYmxlQXJlYSosIEluUmVnaW9uU2Nyb2xsZXJQcml2YXRlKik7
CisKK0luUmVnaW9uU2Nyb2xsZXI6OkluUmVnaW9uU2Nyb2xsZXIoV2ViUGFnZVByaXZhdGUqIHdl
YlBhZ2VQcml2YXRlKQorICAgIDogZChuZXcgSW5SZWdpb25TY3JvbGxlclByaXZhdGUod2ViUGFn
ZVByaXZhdGUpKQoreworICAgIEFTU0VSVCh3ZWJQYWdlUHJpdmF0ZSk7Cit9CisKK0luUmVnaW9u
U2Nyb2xsZXI6On5JblJlZ2lvblNjcm9sbGVyKCkKK3sKKyAgICBkZWxldGUgZDsKK30KKworYm9v
bCBJblJlZ2lvblNjcm9sbGVyOjpjb21wb3NpdGVkU2V0U2Nyb2xsUG9zaXRpb24odW5zaWduZWQg
Y2Ftb3VmbGFnZWRMYXllciwgY29uc3QgUGxhdGZvcm06OkludFBvaW50JiBzY3JvbGxQb3NpdGlv
bikKK3sKKyAgICBBU1NFUlQoUGxhdGZvcm06OnVzZXJJbnRlcmZhY2VUaHJlYWRNZXNzYWdlQ2xp
ZW50KCktPmlzQ3VycmVudFRocmVhZCgpKTsKKyAgICByZXR1cm4gZC0+Y29tcG9zaXRlZFNldFNj
cm9sbFBvc2l0aW9uKGNhbW91ZmxhZ2VkTGF5ZXIsIGQtPm1fd2ViUGFnZS0+bWFwRnJvbVRyYW5z
Zm9ybWVkKHNjcm9sbFBvc2l0aW9uKSk7Cit9CisKK0luUmVnaW9uU2Nyb2xsZXJQcml2YXRlOjpJ
blJlZ2lvblNjcm9sbGVyUHJpdmF0ZShXZWJQYWdlUHJpdmF0ZSogd2ViUGFnZVByaXZhdGUpCisg
ICAgOiBtX3dlYlBhZ2Uod2ViUGFnZVByaXZhdGUpCit7Cit9CisKK3ZvaWQgSW5SZWdpb25TY3Jv
bGxlclByaXZhdGU6OnNldE5vZGUoV2ViQ29yZTo6Tm9kZSogbm9kZSkKK3sKKyAgICBtX2luUmVn
aW9uU2Nyb2xsU3RhcnRpbmdOb2RlID0gbm9kZTsKK30KKworV2ViQ29yZTo6Tm9kZSogSW5SZWdp
b25TY3JvbGxlclByaXZhdGU6Om5vZGUoKSBjb25zdAoreworICAgIHJldHVybiBtX2luUmVnaW9u
U2Nyb2xsU3RhcnRpbmdOb2RlLmdldCgpOworfQorCit2b2lkIEluUmVnaW9uU2Nyb2xsZXJQcml2
YXRlOjpyZXNldCgpCit7CisgICAgc2V0Tm9kZSgwKTsKK30KKworYm9vbCBJblJlZ2lvblNjcm9s
bGVyUHJpdmF0ZTo6aGFzTm9kZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICEhbV9pblJlZ2lvblNj
cm9sbFN0YXJ0aW5nTm9kZTsKK30KKworYm9vbCBJblJlZ2lvblNjcm9sbGVyUHJpdmF0ZTo6Y2Fu
U2Nyb2xsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzTm9kZSgpOworfQorCitib29sIEluUmVn
aW9uU2Nyb2xsZXJQcml2YXRlOjpjb21wb3NpdGVkU2V0U2Nyb2xsUG9zaXRpb24odW5zaWduZWQg
Y2Ftb3VmbGFnZWRMYXllciwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHNjcm9sbFBvc2l0aW9u
KQoreworICAgIExheWVyQ29tcG9zaXRpbmdUaHJlYWQqIHNjcm9sbExheWVyID0gcmVpbnRlcnBy
ZXRfY2FzdDxMYXllckNvbXBvc2l0aW5nVGhyZWFkKj4oY2Ftb3VmbGFnZWRMYXllcik7CisgICAg
c2Nyb2xsTGF5ZXItPm92ZXJyaWRlKCktPnNldEJvdW5kc09yaWdpbihXZWJDb3JlOjpGbG9hdFBv
aW50KHNjcm9sbFBvc2l0aW9uLngoKSwgc2Nyb2xsUG9zaXRpb24ueSgpKSk7CisKKyAgICBtX3dl
YlBhZ2UtPnNjaGVkdWxlQ29tcG9zaXRpbmdSdW4oKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBJblJlZ2lvblNjcm9sbGVyUHJpdmF0ZTo6c2Nyb2xsQnkoY29uc3QgUGxhdGZvcm06Oklu
dFNpemUmIGRlbHRhKQoreworICAgIEFTU0VSVChQbGF0Zm9ybTo6d2Via2l0VGhyZWFkTWVzc2Fn
ZUNsaWVudCgpLT5pc0N1cnJlbnRUaHJlYWQoKSk7CisKKyAgICBpZiAoIWNhblNjcm9sbCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gc2Nyb2xsTm9kZVJlY3Vyc2l2ZWx5
KG5vZGUoKSwgZGVsdGEpOworfQorCitzdGQ6OnZlY3RvcjxQbGF0Zm9ybTo6U2Nyb2xsVmlld0Jh
c2UqPiBJblJlZ2lvblNjcm9sbGVyUHJpdmF0ZTo6aW5SZWdpb25TY3JvbGxhYmxlQXJlYXNGb3JQ
b2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQpCit7CisgICAgc3RkOjp2ZWN0b3I8
UGxhdGZvcm06OlNjcm9sbFZpZXdCYXNlKj4gdmFsaWRSZXR1cm47CisgICAgc3RkOjp2ZWN0b3I8
UGxhdGZvcm06OlNjcm9sbFZpZXdCYXNlKj4gZW1wdHlSZXR1cm47CisKKyAgICBIaXRUZXN0UmVz
dWx0IHJlc3VsdCA9IG1fd2ViUGFnZS0+bV9tYWluRnJhbWUtPmV2ZW50SGFuZGxlcigpLT5oaXRU
ZXN0UmVzdWx0QXRQb2ludChtX3dlYlBhZ2UtPm1hcEZyb21WaWV3cG9ydFRvQ29udGVudHMocG9p
bnQpLCBmYWxzZSAvKmFsbG93U2hhZG93Q29udGVudCovKTsKKyAgICBOb2RlKiBub2RlID0gcmVz
dWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpOworICAgIGlmICghbm9kZSB8fCAhbm9kZS0+cmVuZGVy
ZXIoKSkKKyAgICAgICAgcmV0dXJuIGVtcHR5UmV0dXJuOworCisgICAgUmVuZGVyTGF5ZXIqIGxh
eWVyID0gbm9kZS0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKTsKKyAgICBkbyB7CisgICAg
ICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBsYXllci0+cmVuZGVyZXIoKTsKKworICAgICAg
ICBpZiAocmVuZGVyZXItPmlzUmVuZGVyVmlldygpKSB7CisgICAgICAgICAgICBpZiAoUmVuZGVy
VmlldyogcmVuZGVyVmlldyA9IHRvUmVuZGVyVmlldyhyZW5kZXJlcikpIHsKKyAgICAgICAgICAg
ICAgICBGcmFtZVZpZXcqIHZpZXcgPSByZW5kZXJWaWV3LT5mcmFtZVZpZXcoKTsKKyAgICAgICAg
ICAgICAgICBpZiAoIXZpZXcpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbXB0eVJldHVy
bjsKKworICAgICAgICAgICAgICAgIGlmIChjYW5TY3JvbGxJbm5lckZyYW1lKHZpZXctPmZyYW1l
KCkpKSB7CisgICAgICAgICAgICAgICAgICAgIHB1c2hCYWNrSW5SZWdpb25TY3JvbGxhYmxlKHZh
bGlkUmV0dXJuLCBuZXcgSW5SZWdpb25TY3JvbGxhYmxlQXJlYShtX3dlYlBhZ2UsIGxheWVyKSwg
dGhpcyk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChjYW5TY3JvbGxSZW5kZXJCb3gobGF5
ZXItPnJlbmRlckJveCgpKSkgeworICAgICAgICAgICAgcHVzaEJhY2tJblJlZ2lvblNjcm9sbGFi
bGUodmFsaWRSZXR1cm4sIG5ldyBJblJlZ2lvblNjcm9sbGFibGVBcmVhKG1fd2ViUGFnZSwgbGF5
ZXIpLCB0aGlzKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAg
Ly8gSWYgd2UgcnVuIGludG8gYSBmaXggcG9zaXRpb25lZCBsYXllciwgc2V0IHRoZSBsYXN0IHNj
cm9sbGFibGUgaW4tcmVnaW9uIG9iamVjdAorICAgICAgICAvLyBhcyBub3QgYWJsZSB0byBwcm9w
YWdhdGUgc2Nyb2xsIHRvIGl0cyBwYXJlbnQgc2Nyb2xsYWJsZS4KKyAgICAgICAgaWYgKGlzTm9u
UmVuZGVyVmlld0ZpeGVkUG9zaXRpb25lZENvbnRhaW5lcihsYXllcikgJiYgdmFsaWRSZXR1cm4u
c2l6ZSgpKSB7CisgICAgICAgICAgICBQbGF0Zm9ybTo6U2Nyb2xsVmlld0Jhc2UqIGVuZCA9IHZh
bGlkUmV0dXJuLmJhY2soKTsKKyAgICAgICAgICAgIGVuZC0+c2V0Q2FuUHJvcGFnYXRlU2Nyb2xs
aW5nVG9FbmNsb3NpbmdTY3JvbGxhYmxlKGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgfSB3aGls
ZSAobGF5ZXIgPSBwYXJlbnRMYXllcihsYXllcikpOworCisgICAgaWYgKHZhbGlkUmV0dXJuLmVt
cHR5KCkpCisgICAgICAgIHJldHVybiBlbXB0eVJldHVybjsKKworICAgIC8vIFBvc3QtY2FsY3Vs
YXRlIHRoZSB2aXNpYmxlIHdpbmRvdyByZWN0cyBpbiByZXZlcnNlIGhpdCB0ZXN0IG9yZGVyIHNv
CisgICAgLy8gd2UgYWNjb3VudCBmb3IgYWxsIGFuZCBhbnkgY2xpcHBpbmcgcmVjdHMuCisgICAg
V2ViQ29yZTo6SW50UmVjdCByZWN1cnNpdmVDbGlwcGluZ1JlY3QoV2ViQ29yZTo6SW50UG9pbnQ6
Onplcm8oKSwgbV93ZWJQYWdlLT50cmFuc2Zvcm1lZFZpZXdwb3J0U2l6ZSgpKTsKKworICAgIHN0
ZDo6dmVjdG9yPFBsYXRmb3JtOjpTY3JvbGxWaWV3QmFzZSo+OjpyZXZlcnNlX2l0ZXJhdG9yIHJl
bmQgPSB2YWxpZFJldHVybi5yZW5kKCk7CisgICAgZm9yIChzdGQ6OnZlY3RvcjxQbGF0Zm9ybTo6
U2Nyb2xsVmlld0Jhc2UqPjo6cmV2ZXJzZV9pdGVyYXRvciByaXQgPSB2YWxpZFJldHVybi5yYmVn
aW4oKTsgcml0ICE9IHJlbmQ7ICsrcml0KSB7CisKKyAgICAgICAgSW5SZWdpb25TY3JvbGxhYmxl
QXJlYSogY3VyciA9IHN0YXRpY19jYXN0PEluUmVnaW9uU2Nyb2xsYWJsZUFyZWEqPigqcml0KTsK
KyAgICAgICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gY3Vyci0+bGF5ZXIoKTsKKworICAgICAgICBp
ZiAobGF5ZXIgJiYgbGF5ZXItPnJlbmRlcmVyKCktPmlzUmVuZGVyVmlldygpKSB7IC8vICNkb2N1
bWVudCBjYXNlCisgICAgICAgICAgICBGcmFtZVZpZXcqIHZpZXcgPSB0b1JlbmRlclZpZXcobGF5
ZXItPnJlbmRlcmVyKCkpLT5mcmFtZVZpZXcoKTsKKyAgICAgICAgICAgIEFTU0VSVCh2aWV3KTsK
KyAgICAgICAgICAgIEFTU0VSVChjYW5TY3JvbGxJbm5lckZyYW1lKHZpZXctPmZyYW1lKCkpKTsK
KworICAgICAgICAgICAgV2ViQ29yZTo6SW50UmVjdCBmcmFtZVdpbmRvd1JlY3QgPSBtX3dlYlBh
Z2UtPm1hcFRvVHJhbnNmb3JtZWQobV93ZWJQYWdlLT5nZXRSZWN1cnNpdmVWaXNpYmxlV2luZG93
UmVjdCh2aWV3KSk7CisgICAgICAgICAgICBmcmFtZVdpbmRvd1JlY3QuaW50ZXJzZWN0KHJlY3Vy
c2l2ZUNsaXBwaW5nUmVjdCk7CisgICAgICAgICAgICBjdXJyLT5zZXRWaXNpYmxlV2luZG93UmVj
dChmcmFtZVdpbmRvd1JlY3QpOworICAgICAgICAgICAgcmVjdXJzaXZlQ2xpcHBpbmdSZWN0ID0g
ZnJhbWVXaW5kb3dSZWN0OworCisgICAgICAgIH0gZWxzZSB7IC8vIFJlbmRlckJveC1iYXNlZCBl
bGVtZW50cyBjYXNlIChzY3JvbGxhYmxlIGJveGVzIChkaXYncywgcCdzLCB0ZXh0YXJlYSdzLCBl
dGMpKS4KKworICAgICAgICAgICAgUmVuZGVyQm94KiBib3ggPSBsYXllci0+cmVuZGVyQm94KCk7
CisgICAgICAgICAgICBBU1NFUlQoYm94KTsKKyAgICAgICAgICAgIEFTU0VSVChjYW5TY3JvbGxS
ZW5kZXJCb3goYm94KSk7CisKKyAgICAgICAgICAgIFdlYkNvcmU6OkludFJlY3QgdmlzaWJsZVdp
bmRvd1JlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGJveC0+YWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dS
ZWN0KCkpOworICAgICAgICAgICAgdmlzaWJsZVdpbmRvd1JlY3QgPSBib3gtPmZyYW1lKCktPnZp
ZXcoKS0+Y29udGVudHNUb1dpbmRvdyh2aXNpYmxlV2luZG93UmVjdCk7CisgICAgICAgICAgICB2
aXNpYmxlV2luZG93UmVjdCA9IG1fd2ViUGFnZS0+bWFwVG9UcmFuc2Zvcm1lZCh2aXNpYmxlV2lu
ZG93UmVjdCk7CisgICAgICAgICAgICB2aXNpYmxlV2luZG93UmVjdC5pbnRlcnNlY3QocmVjdXJz
aXZlQ2xpcHBpbmdSZWN0KTsKKworICAgICAgICAgICAgY3Vyci0+c2V0VmlzaWJsZVdpbmRvd1Jl
Y3QodmlzaWJsZVdpbmRvd1JlY3QpOworICAgICAgICAgICAgcmVjdXJzaXZlQ2xpcHBpbmdSZWN0
ID0gdmlzaWJsZVdpbmRvd1JlY3Q7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdmFs
aWRSZXR1cm47Cit9CisKK2Jvb2wgSW5SZWdpb25TY3JvbGxlclByaXZhdGU6OnNjcm9sbE5vZGVS
ZWN1cnNpdmVseShXZWJDb3JlOjpOb2RlKiBub2RlLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBk
ZWx0YSkKK3sKKyAgICBpZiAoZGVsdGEuaXNaZXJvKCkpCisgICAgICAgIHJldHVybiB0cnVlOwor
CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKKyAgICBpZiAoIXJlbmRlcmVyKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBGcmFtZVZpZXcqIHZpZXcgPSByZW5kZXJlci0+dmll
dygpLT5mcmFtZVZpZXcoKTsKKyAgICBpZiAoIXZpZXcpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIC8vIFRyeSBzY3JvbGxpbmcgdGhlIHJlbmRlcmVyLgorICAgIGlmIChzY3JvbGxSZW5k
ZXJlcihyZW5kZXJlciwgZGVsdGEpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIFdl
J3ZlIGhpdCB0aGUgcGFnZSwgZG9uJ3Qgc2Nyb2xsIGl0IGFuZCByZXR1cm4gZmFsc2UuCisgICAg
aWYgKHZpZXcgPT0gbV93ZWJQYWdlLT5tX21haW5GcmFtZS0+dmlldygpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAvLyBUcnkgc2Nyb2xsaW5nIHRoZSBGcmFtZVZpZXcuCisgICAgaWYg
KGNhblNjcm9sbElubmVyRnJhbWUodmlldy0+ZnJhbWUoKSkpIHsKKyAgICAgICAgSW50U2l6ZSB2
aWV3RGVsdGEgPSBkZWx0YTsKKyAgICAgICAgSW50UG9pbnQgbmV3Vmlld09mZnNldCA9IHZpZXct
PnNjcm9sbFBvc2l0aW9uKCk7CisgICAgICAgIEludFBvaW50IG1heFZpZXdPZmZzZXQgPSB2aWV3
LT5tYXhpbXVtU2Nyb2xsUG9zaXRpb24oKTsKKyAgICAgICAgYWRqdXN0U2Nyb2xsRGVsdGEobWF4
Vmlld09mZnNldCwgbmV3Vmlld09mZnNldCwgdmlld0RlbHRhKTsKKworICAgICAgICBpZiAoIXZp
ZXdEZWx0YS5pc1plcm8oKSkgeworICAgICAgICAgICAgdmlldy0+c2V0Q2FuQmxpdE9uU2Nyb2xs
KGZhbHNlKTsKKworICAgICAgICAgICAgQmFja2luZ1N0b3JlQ2xpZW50KiBiYWNraW5nU3RvcmVD
bGllbnQgPSBtX3dlYlBhZ2UtPmJhY2tpbmdTdG9yZUNsaWVudEZvckZyYW1lKHZpZXctPmZyYW1l
KCkpOworICAgICAgICAgICAgaWYgKGJhY2tpbmdTdG9yZUNsaWVudCkgeworICAgICAgICAgICAg
ICAgIGJhY2tpbmdTdG9yZUNsaWVudC0+c2V0SXNDbGllbnRHZW5lcmF0ZWRTY3JvbGwodHJ1ZSk7
CisgICAgICAgICAgICAgICAgYmFja2luZ1N0b3JlQ2xpZW50LT5zZXRJc1Njcm9sbE5vdGlmaWNh
dGlvblN1cHByZXNzZWQodHJ1ZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNldE5v
ZGUodmlldy0+ZnJhbWUoKS0+ZG9jdW1lbnQoKSk7CisKKyAgICAgICAgICAgIHZpZXctPnNjcm9s
bEJ5KHZpZXdEZWx0YSk7CisKKyAgICAgICAgICAgIGlmIChiYWNraW5nU3RvcmVDbGllbnQpIHsK
KyAgICAgICAgICAgICAgICBiYWNraW5nU3RvcmVDbGllbnQtPnNldElzQ2xpZW50R2VuZXJhdGVk
U2Nyb2xsKGZhbHNlKTsKKyAgICAgICAgICAgICAgICBiYWNraW5nU3RvcmVDbGllbnQtPnNldElz
U2Nyb2xsTm90aWZpY2F0aW9uU3VwcHJlc3NlZChmYWxzZSk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gVHJ5IHNj
cm9sbGluZyB0aGUgbm9kZSBvZiB0aGUgZW5jbG9zaW5nIGZyYW1lLgorICAgIEZyYW1lKiBmcmFt
ZSA9IG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCk7CisgICAgaWYgKGZyYW1lKSB7CisgICAgICAg
IE5vZGUqIG93bmVyTm9kZSA9IGZyYW1lLT5vd25lckVsZW1lbnQoKTsKKyAgICAgICAgaWYgKHNj
cm9sbE5vZGVSZWN1cnNpdmVseShvd25lck5vZGUsIGRlbHRhKSkKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBJblJlZ2lvblNj
cm9sbGVyUHJpdmF0ZTo6c2Nyb2xsUmVuZGVyZXIoV2ViQ29yZTo6UmVuZGVyT2JqZWN0KiByZW5k
ZXJlciwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgZGVsdGEpCit7CisgICAgUmVuZGVyTGF5ZXIq
IGxheWVyID0gcmVuZGVyZXItPmVuY2xvc2luZ0xheWVyKCk7CisgICAgaWYgKCFsYXllcikKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gVHJ5IHRvIHNjcm9sbCBsYXllci4KKyAgICBi
b29sIHJlc3RyaWN0ZWRCeUxpbmVDbGFtcCA9IGZhbHNlOworICAgIGlmIChyZW5kZXJlci0+cGFy
ZW50KCkpCisgICAgICAgIHJlc3RyaWN0ZWRCeUxpbmVDbGFtcCA9ICFyZW5kZXJlci0+cGFyZW50
KCktPnN0eWxlKCktPmxpbmVDbGFtcCgpLmlzTm9uZSgpOworCisgICAgaWYgKHJlbmRlcmVyLT5o
YXNPdmVyZmxvd0NsaXAoKSAmJiAhcmVzdHJpY3RlZEJ5TGluZUNsYW1wKSB7CisgICAgICAgIElu
dFNpemUgbGF5ZXJEZWx0YSA9IGRlbHRhOworICAgICAgICBJbnRQb2ludCBtYXhPZmZzZXQobGF5
ZXItPnNjcm9sbFdpZHRoKCkgLSBsYXllci0+cmVuZGVyQm94KCktPmNsaWVudFdpZHRoKCksIGxh
eWVyLT5zY3JvbGxIZWlnaHQoKSAtIGxheWVyLT5yZW5kZXJCb3goKS0+Y2xpZW50SGVpZ2h0KCkp
OworICAgICAgICBJbnRQb2ludCBjdXJyZW50T2Zmc2V0KGxheWVyLT5zY3JvbGxYT2Zmc2V0KCks
IGxheWVyLT5zY3JvbGxZT2Zmc2V0KCkpOworICAgICAgICBhZGp1c3RTY3JvbGxEZWx0YShtYXhP
ZmZzZXQsIGN1cnJlbnRPZmZzZXQsIGxheWVyRGVsdGEpOworICAgICAgICBpZiAoIWxheWVyRGVs
dGEuaXNaZXJvKCkpIHsKKyAgICAgICAgICAgIHNldE5vZGUoZW5jbG9zaW5nTGF5ZXJOb2RlKGxh
eWVyKSk7CisgICAgICAgICAgICBJbnRQb2ludCBuZXdPZmZzZXQgPSBjdXJyZW50T2Zmc2V0ICsg
bGF5ZXJEZWx0YTsKKyAgICAgICAgICAgIGxheWVyLT5zY3JvbGxUb09mZnNldChuZXdPZmZzZXQu
eCgpLCBuZXdPZmZzZXQueSgpKTsKKyAgICAgICAgICAgIHJlbmRlcmVyLT5yZXBhaW50KHRydWUp
OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB3aGls
ZSAobGF5ZXIgPSBsYXllci0+cGFyZW50KCkpIHsKKyAgICAgICAgaWYgKGNhblNjcm9sbFJlbmRl
ckJveChsYXllci0+cmVuZGVyQm94KCkpKQorICAgICAgICAgICAgcmV0dXJuIHNjcm9sbFJlbmRl
cmVyKGxheWVyLT5yZW5kZXJCb3goKSwgZGVsdGEpOworICAgIH0KKworICAgIHJldHVybiBmYWxz
ZTsKK30KKwordm9pZCBJblJlZ2lvblNjcm9sbGVyUHJpdmF0ZTo6YWRqdXN0U2Nyb2xsRGVsdGEo
Y29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIG1heE9mZnNldCwgY29uc3QgV2ViQ29yZTo6SW50UG9p
bnQmIGN1cnJlbnRPZmZzZXQsIFdlYkNvcmU6OkludFNpemUmIGRlbHRhKSBjb25zdAoreworICAg
IGlmIChjdXJyZW50T2Zmc2V0LngoKSArIGRlbHRhLndpZHRoKCkgPiBtYXhPZmZzZXQueCgpKQor
ICAgICAgICBkZWx0YS5zZXRXaWR0aChzdGQ6Om1pbihtYXhPZmZzZXQueCgpIC0gY3VycmVudE9m
ZnNldC54KCksIGRlbHRhLndpZHRoKCkpKTsKKworICAgIGlmIChjdXJyZW50T2Zmc2V0LngoKSAr
IGRlbHRhLndpZHRoKCkgPCAwKQorICAgICAgICBkZWx0YS5zZXRXaWR0aChzdGQ6Om1heCgtY3Vy
cmVudE9mZnNldC54KCksIGRlbHRhLndpZHRoKCkpKTsKKworICAgIGlmIChjdXJyZW50T2Zmc2V0
LnkoKSArIGRlbHRhLmhlaWdodCgpID4gbWF4T2Zmc2V0LnkoKSkKKyAgICAgICAgZGVsdGEuc2V0
SGVpZ2h0KHN0ZDo6bWluKG1heE9mZnNldC55KCkgLSBjdXJyZW50T2Zmc2V0LnkoKSwgZGVsdGEu
aGVpZ2h0KCkpKTsKKworICAgIGlmIChjdXJyZW50T2Zmc2V0LnkoKSArIGRlbHRhLmhlaWdodCgp
IDwgMCkKKyAgICAgICAgZGVsdGEuc2V0SGVpZ2h0KHN0ZDo6bWF4KC1jdXJyZW50T2Zmc2V0Lnko
KSwgZGVsdGEuaGVpZ2h0KCkpKTsKK30KKworc3RhdGljIGJvb2wgY2FuU2Nyb2xsSW5uZXJGcmFt
ZShGcmFtZSogZnJhbWUpCit7CisgICAgaWYgKCFmcmFtZSB8fCAhZnJhbWUtPnZpZXcoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gTm90IGhhdmluZyBhbiBvd25lciBlbGVtZW50
IG1lYW5zIHRoYXQgd2UgYXJlIG9uIHRoZSBtYWluZnJhbWUuCisgICAgaWYgKCFmcmFtZS0+b3du
ZXJFbGVtZW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEFTU0VSVChmcmFtZSAh
PSBmcmFtZS0+cGFnZSgpLT5tYWluRnJhbWUoKSk7CisKKyAgICBJbnRTaXplIHZpc2libGVTaXpl
ID0gZnJhbWUtPnZpZXcoKS0+dmlzaWJsZUNvbnRlbnRSZWN0KCkuc2l6ZSgpOworICAgIEludFNp
emUgY29udGVudHNTaXplID0gZnJhbWUtPnZpZXcoKS0+Y29udGVudHNTaXplKCk7CisKKyAgICBi
b29sIGNhbkJlU2Nyb2xsZWQgPSBjb250ZW50c1NpemUuaGVpZ2h0KCkgPiB2aXNpYmxlU2l6ZS5o
ZWlnaHQoKSB8fCBjb250ZW50c1NpemUud2lkdGgoKSA+IHZpc2libGVTaXplLndpZHRoKCk7CisK
KyAgICAvLyBMZXRzIGFsc28gY29uc2lkZXIgdGhlICdvdmVyZmxvdy17eCx5fSBwcm9wZXJ0eSBz
ZXQgZGlyZWN0bHkgdG8gdGhlIHtpfWZyYW1lIHRhZy4KKyAgICByZXR1cm4gY2FuQmVTY3JvbGxl
ZCAmJiAoZnJhbWUtPm93bmVyRWxlbWVudCgpLT5zY3JvbGxpbmdNb2RlKCkgIT0gU2Nyb2xsYmFy
QWx3YXlzT2ZmKTsKK30KKworLy8gVGhlIFJlbmRlckJveDo6Y2FuYmVTY3JvbGxlZEFuZEhhc1Nj
cm9sbGFibGVBcmVhIG1ldGhvZCByZXR1cm5zIHRydWUgZm9yIHRoZQorLy8gZm9sbG93aW5nIHNj
ZW5hcmlvLCBmb3IgZXhhbXBsZToKKy8vICgxKSBhIGRpdiB0aGF0IGhhcyBhIHZlcnRpY2FsIG92
ZXJmbG93IGJ1dCBubyBob3Jpem9udGFsIG92ZXJmbG93CisvLyAgICAgd2l0aCBvdmVyZmxvdy15
OiBoaWRkZW4gYW5kIG92ZXJmbG93LXg6IGF1dG8gc2V0LgorLy8gVGhlIHZlcnNpb24gYmVsb3cg
Zml4ZXMgaXQuCisvLyBGSVhNRTogRml4IFJlbmRlckJveDo6Y2FuQmVTY3JvbGxlZEFuZEhhc1Nj
cm9sbGFibGVBcmVhIG1ldGhvZCBpbnN0ZWFkLgorc3RhdGljIGJvb2wgY2FuU2Nyb2xsUmVuZGVy
Qm94KFJlbmRlckJveCogYm94KQoreworICAgIGlmICghYm94IHx8ICFib3gtPmhhc092ZXJmbG93
Q2xpcCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoYm94LT5zY3JvbGxzT3Zl
cmZsb3dYKCkgJiYgKGJveC0+c2Nyb2xsV2lkdGgoKSAhPSBib3gtPmNsaWVudFdpZHRoKCkpCisg
ICAgICAgIHx8IGJveC0+c2Nyb2xsc092ZXJmbG93WSgpICYmIChib3gtPnNjcm9sbEhlaWdodCgp
ICE9IGJveC0+Y2xpZW50SGVpZ2h0KCkpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIE5v
ZGUqIG5vZGUgPSBib3gtPm5vZGUoKTsKKyAgICByZXR1cm4gbm9kZSAmJiAobm9kZS0+cmVuZGVy
ZXJJc0VkaXRhYmxlKCkgfHwgbm9kZS0+aXNEb2N1bWVudE5vZGUoKSk7Cit9CisKK3N0YXRpYyBS
ZW5kZXJMYXllciogcGFyZW50TGF5ZXIoUmVuZGVyTGF5ZXIqIGxheWVyKQoreworICAgIEFTU0VS
VChsYXllcik7CisgICAgaWYgKGxheWVyLT5wYXJlbnQoKSkKKyAgICAgICAgcmV0dXJuIGxheWVy
LT5wYXJlbnQoKTsKKworICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBsYXllci0+cmVuZGVy
ZXIoKTsKKyAgICBpZiAocmVuZGVyZXItPmRvY3VtZW50KCkgJiYgcmVuZGVyZXItPmRvY3VtZW50
KCktPm93bmVyRWxlbWVudCgpICYmIHJlbmRlcmVyLT5kb2N1bWVudCgpLT5vd25lckVsZW1lbnQo
KS0+cmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJuIHJlbmRlcmVyLT5kb2N1bWVudCgpLT5vd25l
ckVsZW1lbnQoKS0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKTsKKworICAgIHJldHVybiAw
OworfQorCisvLyBGSVhNRTogTWFrZSBSZW5kZXJMYXllcjo6ZW5jbG9zaW5nRWxlbWVudCBwdWJs
aWMgc28gdGhpcyBvbmUgY2FuIGJlIHJlbW92ZWQuCitzdGF0aWMgTm9kZSogZW5jbG9zaW5nTGF5
ZXJOb2RlKFJlbmRlckxheWVyKiBsYXllcikKK3sKKyAgICBmb3IgKFJlbmRlck9iamVjdCogciA9
IGxheWVyLT5yZW5kZXJlcigpOyByOyByID0gci0+cGFyZW50KCkpIHsKKyAgICAgICAgaWYgKE5v
ZGUqIGUgPSByLT5ub2RlKCkpCisgICAgICAgICAgICByZXR1cm4gZTsKKyAgICB9CisgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBib29sIGlzTm9u
UmVuZGVyVmlld0ZpeGVkUG9zaXRpb25lZENvbnRhaW5lcihSZW5kZXJMYXllciogbGF5ZXIpCit7
CisgICAgUmVuZGVyT2JqZWN0KiBvID0gbGF5ZXItPnJlbmRlcmVyKCk7CisgICAgaWYgKG8tPmlz
UmVuZGVyVmlldygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gby0+aXNQ
b3NpdGlvbmVkKCkgJiYgby0+c3R5bGUoKS0+cG9zaXRpb24oKSA9PSBGaXhlZFBvc2l0aW9uOwor
fQorCitzdGF0aWMgdm9pZCBwdXNoQmFja0luUmVnaW9uU2Nyb2xsYWJsZShzdGQ6OnZlY3RvcjxQ
bGF0Zm9ybTo6U2Nyb2xsVmlld0Jhc2UqPiYgdmVjdG9yLCBJblJlZ2lvblNjcm9sbGFibGVBcmVh
KiBzY3JvbGxhYmxlQXJlYSwgSW5SZWdpb25TY3JvbGxlclByaXZhdGUqIHNjcm9sbGVyKQorewor
ICAgIEFTU0VSVChzY3JvbGxlcik7CisgICAgQVNTRVJUKCFzY3JvbGxhYmxlQXJlYS0+aXNOdWxs
KCkpOworCisgICAgc2Nyb2xsYWJsZUFyZWEtPnNldENhblByb3BhZ2F0ZVNjcm9sbGluZ1RvRW5j
bG9zaW5nU2Nyb2xsYWJsZSghaXNOb25SZW5kZXJWaWV3Rml4ZWRQb3NpdGlvbmVkQ29udGFpbmVy
KHNjcm9sbGFibGVBcmVhLT5sYXllcigpKSk7CisgICAgdmVjdG9yLnB1c2hfYmFjayhzY3JvbGxh
YmxlQXJlYSk7CisgICAgaWYgKHZlY3Rvci5zaXplKCkgPT0gMSkgeworICAgICAgICAvLyBGSVhN
RTogVXNlIFJlbmRlckxheWVyOjpyZW5kZXJCb3goKS0+bm9kZSgpIGluc3RlYWQ/CisgICAgICAg
IHNjcm9sbGVyLT5zZXROb2RlKGVuY2xvc2luZ0xheWVyTm9kZShzY3JvbGxhYmxlQXJlYS0+bGF5
ZXIoKSkpOworICAgIH0KK30KKworfQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFj
a2JlcnJ5L0FwaS9JblJlZ2lvblNjcm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkv
QXBpL0luUmVnaW9uU2Nyb2xsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li4zZjYxYTJiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0Fw
aS9JblJlZ2lvblNjcm9sbGVyLmgKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSwgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24s
IE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaWZuZGVmIEluUmVnaW9uU2Nyb2xsZXJfaAor
I2RlZmluZSBJblJlZ2lvblNjcm9sbGVyX2gKKworI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9y
bVByaW1pdGl2ZXMuaD4KKworbmFtZXNwYWNlIEJsYWNrQmVycnkgeworbmFtZXNwYWNlIFdlYktp
dCB7CisKK2NsYXNzIEluUmVnaW9uU2Nyb2xsZXJQcml2YXRlOworY2xhc3MgVG91Y2hFdmVudEhh
bmRsZXI7CitjbGFzcyBXZWJQYWdlUHJpdmF0ZTsKKworY2xhc3MgSW5SZWdpb25TY3JvbGxlciB7
CisKK3B1YmxpYzoKKyAgICBJblJlZ2lvblNjcm9sbGVyKFdlYlBhZ2VQcml2YXRlKik7CisgICAg
fkluUmVnaW9uU2Nyb2xsZXIoKTsKKworICAgIGJvb2wgY29tcG9zaXRlZFNldFNjcm9sbFBvc2l0
aW9uKHVuc2lnbmVkIC8qY2Ftb3VmbGFnZWRMYXllciovLCBjb25zdCBQbGF0Zm9ybTo6SW50UG9p
bnQmIC8qc2Nyb2xsUG9zaXRpb24qLyk7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFdl
YlBhZ2VQcml2YXRlOworICAgIGZyaWVuZCBjbGFzcyBUb3VjaEV2ZW50SGFuZGxlcjsKKyAgICBJ
blJlZ2lvblNjcm9sbGVyUHJpdmF0ZSAqZDsKK307CisKK30KK30KKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL0luUmVnaW9uU2Nyb2xsZXJfcC5oIGIv
U291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9JblJlZ2lvblNjcm9sbGVyX3AuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOGVkMTc2Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9JblJlZ2lvblNjcm9sbGVyX3AuaApAQCAtMCww
ICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIFJlc2VhcmNoIEluIE1v
dGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3Jp
dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisK
KyNpZm5kZWYgSW5SZWdpb25TY3JvbGxlcl9wX2gKKyNkZWZpbmUgSW5SZWdpb25TY3JvbGxlcl9w
X2gKKworI2luY2x1ZGUgIkludFJlY3QuaCIKKworI2luY2x1ZGUgPGludGVyYWN0aW9uL1Njcm9s
bFZpZXdCYXNlLmg+CisjaW5jbHVkZSA8dmVjdG9yPgorCituYW1lc3BhY2UgV2ViQ29yZSB7Citj
bGFzcyBGcmFtZTsKK2NsYXNzIExheWVyQ29tcG9zaXRpbmdUaHJlYWQ7CitjbGFzcyBOb2RlOwor
Y2xhc3MgUmVuZGVyT2JqZWN0OworfQorCituYW1lc3BhY2UgQmxhY2tCZXJyeSB7CituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworY2xhc3MgV2ViUGFnZVByaXZhdGU7CisKK2NsYXNzIEluUmVnaW9uU2Ny
b2xsZXJQcml2YXRlIHsKKworcHVibGljOgorICAgIEluUmVnaW9uU2Nyb2xsZXJQcml2YXRlKFdl
YlBhZ2VQcml2YXRlKik7CisKKyAgICB2b2lkIHNldE5vZGUoV2ViQ29yZTo6Tm9kZSopOworICAg
IFdlYkNvcmU6Ok5vZGUqIG5vZGUoKSBjb25zdDsKKyAgICB2b2lkIHJlc2V0KCk7CisKKyAgICBi
b29sIGNhblNjcm9sbCgpIGNvbnN0OworICAgIGJvb2wgaGFzTm9kZSgpIGNvbnN0OworCisgICAg
Ym9vbCBzY3JvbGxCeShjb25zdCBQbGF0Zm9ybTo6SW50U2l6ZSYgZGVsdGEpOworICAgIGJvb2wg
Y29tcG9zaXRlZFNldFNjcm9sbFBvc2l0aW9uKHVuc2lnbmVkIGNhbW91ZmxhZ2VkTGF5ZXIsIGNv
bnN0IFdlYkNvcmU6OkludFBvaW50JiBzY3JvbGxQb3NpdGlvbik7CisKKyAgICBzdGQ6OnZlY3Rv
cjxQbGF0Zm9ybTo6U2Nyb2xsVmlld0Jhc2UqPiBpblJlZ2lvblNjcm9sbGFibGVBcmVhc0ZvclBv
aW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7CisKKyAgICBXZWJQYWdlUHJpdmF0ZSogbV93
ZWJQYWdlOworcHJpdmF0ZToKKworICAgIGJvb2wgc2Nyb2xsTm9kZVJlY3Vyc2l2ZWx5KFdlYkNv
cmU6Ok5vZGUqLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBkZWx0YSk7CisgICAgYm9vbCBzY3Jv
bGxSZW5kZXJlcihXZWJDb3JlOjpSZW5kZXJPYmplY3QqLCBjb25zdCBXZWJDb3JlOjpJbnRTaXpl
JiBkZWx0YSk7CisKKyAgICB2b2lkIGFkanVzdFNjcm9sbERlbHRhKGNvbnN0IFdlYkNvcmU6Oklu
dFBvaW50JiBtYXhPZmZzZXQsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBjdXJyZW50T2Zmc2V0
LCBXZWJDb3JlOjpJbnRTaXplJiBkZWx0YSkgY29uc3Q7CisKKyAgICBSZWZQdHI8V2ViQ29yZTo6
Tm9kZT4gbV9pblJlZ2lvblNjcm9sbFN0YXJ0aW5nTm9kZTsKK307CisKK30KK30KKworI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2UuY3BwIGIv
U291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJQYWdlLmNwcAppbmRleCBiNTQ5NGFkLi5j
ZGZhODFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFnZS5jcHAKQEAgLTcx
LDYgKzcxLDcgQEAKICNpbmNsdWRlICJJY29uRGF0YWJhc2VDbGllbnRCbGFja0JlcnJ5LmgiCiAj
aW5jbHVkZSAiSW5QYWdlU2VhcmNoTWFuYWdlci5oIgogI2luY2x1ZGUgIkluUmVnaW9uU2Nyb2xs
YWJsZUFyZWEuaCIKKyNpbmNsdWRlICJJblJlZ2lvblNjcm9sbGVyX3AuaCIKICNpbmNsdWRlICJJ
bnB1dEhhbmRsZXIuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oIgog
I2luY2x1ZGUgIkluc3BlY3RvckNsaWVudEJsYWNrQmVycnkuaCIKQEAgLTE1MjIsNyArMTUyMyw3
IEBAIGJvb2wgV2ViUGFnZVByaXZhdGU6OnNjcm9sbEJ5KGludCBkZWx0YVgsIGludCBkZWx0YVks
IGJvb2wgc2Nyb2xsTWFpbkZyYW1lKQogICAgICAgICAgICAgZGVsdGEud2lkdGgoKSA8IDAgPyAt
dW50cmFuc2Zvcm1lZENvcGllZERlbHRhLndpZHRoKCkgOiB1bnRyYW5zZm9ybWVkQ29waWVkRGVs
dGEud2lkdGgoKSwKICAgICAgICAgICAgIGRlbHRhLmhlaWdodCgpIDwgMCA/IC11bnRyYW5zZm9y
bWVkQ29waWVkRGVsdGEuaGVpZ2h0KCk6IHVudHJhbnNmb3JtZWRDb3BpZWREZWx0YS5oZWlnaHQo
KSk7CiAKLSAgICAgICAgaWYgKG1faW5SZWdpb25TY3JvbGxlci0+c2Nyb2xsQnkoZGVsdGEpKSB7
CisgICAgICAgIGlmIChtX2luUmVnaW9uU2Nyb2xsZXItPmQtPnNjcm9sbEJ5KGRlbHRhKSkgewog
ICAgICAgICAgICAgbV9zZWxlY3Rpb25IYW5kbGVyLT5zZWxlY3Rpb25Qb3NpdGlvbkNoYW5nZWQo
KTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBoYXZlIGNvZGUgaW4gcGxhY2UgdG8gaGFuZGxl
IHNjcm9sbGluZyBhbmQgY2xpcHBpbmcgdGFwIGhpZ2hsaWdodAogICAgICAgICAgICAgLy8gb24g
aW4tcmVnaW9uIHNjcm9sbGluZy4gQXMgc29vbiBhcyBpdCBpcyBmYXN0IGVub3VnaCAoaS5lLiB3
ZSBoYXZlIGl0IGJhY2tlZCBieQpAQCAtMTU0OCw5ICsxNTQ5LDkgQEAgYm9vbCBXZWJQYWdlOjpz
Y3JvbGxCeShjb25zdCBQbGF0Zm9ybTo6SW50U2l6ZSYgZGVsdGEsIGJvb2wgc2Nyb2xsTWFpbkZy
YW1lKQogCiB2b2lkIFdlYlBhZ2VQcml2YXRlOjpub3RpZnlJblJlZ2lvblNjcm9sbFN0YXR1c0No
YW5nZWQoYm9vbCBzdGF0dXMpCiB7Ci0gICAgaWYgKCFzdGF0dXMgJiYgbV9pblJlZ2lvblNjcm9s
bGVyLT5oYXNOb2RlKCkpIHsKLSAgICAgICAgZW5xdWV1ZVJlbmRlcmluZ09mQ2xpcHBlZENvbnRl
bnRPZlNjcm9sbGFibGVOb2RlQWZ0ZXJJblJlZ2lvblNjcm9sbGluZyhtX2luUmVnaW9uU2Nyb2xs
ZXItPm5vZGUoKSk7Ci0gICAgICAgIG1faW5SZWdpb25TY3JvbGxlci0+cmVzZXQoKTsKKyAgICBp
ZiAoIXN0YXR1cyAmJiBtX2luUmVnaW9uU2Nyb2xsZXItPmQtPmhhc05vZGUoKSkgeworICAgICAg
ICBlbnF1ZXVlUmVuZGVyaW5nT2ZDbGlwcGVkQ29udGVudE9mU2Nyb2xsYWJsZU5vZGVBZnRlcklu
UmVnaW9uU2Nyb2xsaW5nKG1faW5SZWdpb25TY3JvbGxlci0+ZC0+bm9kZSgpKTsKKyAgICAgICAg
bV9pblJlZ2lvblNjcm9sbGVyLT5kLT5yZXNldCgpOwogICAgIH0KIH0KIApAQCAtMjYzMyw4ICsy
NjM0LDggQEAgdm9pZCBXZWJQYWdlUHJpdmF0ZTo6Y2xlYXJEb2N1bWVudERhdGEoY29uc3QgRG9j
dW1lbnQqIGRvY3VtZW50R29pbmdBd2F5KQogICAgIGlmIChtX2N1cnJlbnRCbG9ja1pvb21BZGp1
c3RlZE5vZGUgJiYgbV9jdXJyZW50QmxvY2tab29tQWRqdXN0ZWROb2RlLT5kb2N1bWVudCgpID09
IGRvY3VtZW50R29pbmdBd2F5KQogICAgICAgICBtX2N1cnJlbnRCbG9ja1pvb21BZGp1c3RlZE5v
ZGUgPSAwOwogCi0gICAgaWYgKG1faW5SZWdpb25TY3JvbGxlci0+aGFzTm9kZSgpICYmIG1faW5S
ZWdpb25TY3JvbGxlci0+bm9kZSgpLT5kb2N1bWVudCgpID09IGRvY3VtZW50R29pbmdBd2F5KQot
ICAgICAgICBtX2luUmVnaW9uU2Nyb2xsZXItPnJlc2V0KCk7CisgICAgaWYgKG1faW5SZWdpb25T
Y3JvbGxlci0+ZC0+aGFzTm9kZSgpICYmIG1faW5SZWdpb25TY3JvbGxlci0+ZC0+bm9kZSgpLT5k
b2N1bWVudCgpID09IGRvY3VtZW50R29pbmdBd2F5KQorICAgICAgICBtX2luUmVnaW9uU2Nyb2xs
ZXItPmQtPnJlc2V0KCk7CiAKICAgICBpZiAoZG9jdW1lbnRHb2luZ0F3YXktPmZyYW1lKCkpCiAg
ICAgICAgIG1faW5wdXRIYW5kbGVyLT5mcmFtZVVubG9hZGVkKGRvY3VtZW50R29pbmdBd2F5LT5m
cmFtZSgpKTsKQEAgLTQyMTEsMTIgKzQyMTIsMTIgQEAgYm9vbCBXZWJQYWdlOjp0b3VjaEV2ZW50
KGNvbnN0IFBsYXRmb3JtOjpUb3VjaEV2ZW50JiBldmVudCkKIAogdm9pZCBXZWJQYWdlUHJpdmF0
ZTo6c2V0U2Nyb2xsT3JpZ2luUG9pbnQoY29uc3QgUGxhdGZvcm06OkludFBvaW50JiBwb2ludCkK
IHsKLSAgICBtX2luUmVnaW9uU2Nyb2xsZXItPnJlc2V0KCk7CisgICAgbV9pblJlZ2lvblNjcm9s
bGVyLT5kLT5yZXNldCgpOwogCiAgICAgaWYgKCFtX2hhc0luUmVnaW9uU2Nyb2xsYWJsZUFyZWFz
KQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2NsaWVudC0+bm90aWZ5SW5SZWdpb25TY3JvbGxp
bmdTdGFydGluZ1BvaW50Q2hhbmdlZChtX2luUmVnaW9uU2Nyb2xsZXItPmluUmVnaW9uU2Nyb2xs
YWJsZUFyZWFzRm9yUG9pbnQocG9pbnQpKTsKKyAgICBtX2NsaWVudC0+bm90aWZ5SW5SZWdpb25T
Y3JvbGxpbmdTdGFydGluZ1BvaW50Q2hhbmdlZChtX2luUmVnaW9uU2Nyb2xsZXItPmQtPmluUmVn
aW9uU2Nyb2xsYWJsZUFyZWFzRm9yUG9pbnQocG9pbnQpKTsKIH0KIAogdm9pZCBXZWJQYWdlOjpz
ZXRTY3JvbGxPcmlnaW5Qb2ludChjb25zdCBQbGF0Zm9ybTo6SW50UG9pbnQmIHBvaW50KQpAQCAt
NDY1NCw2ICs0NjU1LDExIEBAIEJhY2tpbmdTdG9yZSogV2ViUGFnZTo6YmFja2luZ1N0b3JlKCkg
Y29uc3QKICAgICByZXR1cm4gZC0+bV9iYWNraW5nU3RvcmU7CiB9CiAKK0luUmVnaW9uU2Nyb2xs
ZXIqIFdlYlBhZ2U6OmluUmVnaW9uU2Nyb2xsZXIoKSBjb25zdAoreworICAgIHJldHVybiBkLT5t
X2luUmVnaW9uU2Nyb2xsZXIuZ2V0KCk7Cit9CisKIGJvb2wgV2ViUGFnZTo6em9vbVRvRml0KCkK
IHsKICAgICBpZiAoZC0+Y29udGVudHNTaXplKCkuaXNFbXB0eSgpIHx8ICFkLT5pc1VzZXJTY2Fs
YWJsZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJQYWdl
LmggYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2UuaAppbmRleCAxZjBhNzUx
Li4yNDA1YTc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBh
Z2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2UuaApAQCAtNjMs
NiArNjMsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIEJhY2tpbmdTdG9yZTsKIGNsYXNz
IEJhY2tpbmdTdG9yZUNsaWVudDsKIGNsYXNzIEJhY2tpbmdTdG9yZVByaXZhdGU7CitjbGFzcyBJ
blJlZ2lvblNjcm9sbGVyOwogY2xhc3MgUmVuZGVyUXVldWU7CiBjbGFzcyBXZWJPdmVybGF5Owog
Y2xhc3MgV2ViUGFnZUNsaWVudDsKQEAgLTE3OSw2ICsxODAsOCBAQCBwdWJsaWM6CiAKICAgICBC
YWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSgpIGNvbnN0OwogCisgICAgSW5SZWdpb25TY3JvbGxl
ciogaW5SZWdpb25TY3JvbGxlcigpIGNvbnN0OworCiAgICAgYm9vbCB6b29tVG9GaXQoKTsKICAg
ICBib29sIHpvb21Ub09uZU9uZSgpOwogICAgIHZvaWQgem9vbVRvSW5pdGlhbFNjYWxlKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9ibGFja2JlcnJ5L0NoYW5nZUxvZwppbmRleCA4OGI0M2M3Li4zMzAzZjBhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQvYmxhY2tiZXJyeS9DaGFuZ2VMb2cKQEAgLTEsNSArMSw3NyBAQAogMjAxMi0wOC0wOCAgQW50
b25pbyBHb21lcyAgPGFnb21lc0ByaW0uY29tPgogCisgICAgICAgIFtCbGFja0JlcnJ5XSBUaWUg
dXAgdGhlIHNjcm9sbGluZyBtYWNoaW5lcnkgdG8gIHRoZSBncmFwaGljcyB0cmVlIHdoZW4gYXBw
bGljYWJsZSBmb3IgaW4tcmVnaW9uIHNjcm9sbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTM0ODIKKyAgICAgICAgUFIgIzE4NzY3MgorICAgICAgICBN
YWtlIEluUmVnaW9uU2Nyb2xsZXIgYSBzaW1wbGUgcHVibGljIHdlYmtpdC8gQVBJCisgICAgICAg
IFBSICMxODg2NzcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBJbiBvcmRlciB0byBwcmVwYXJlIEluUmVnaW9uU2Nyb2xsZXIgdG8gYmUgYSBwdWJsaWMg
QVBJCisgICAgICAgIGluIHdlYmtpdC8sIHRoZSBwYXRjaDoKKworICAgICAgICAxKSBSZW5hbWVk
IHRoZSBjdXJyZW50IEluUmVnaW9uU2Nyb2xsZXIgY2xhc3MgdG8gSW5SZWdpb25TY3JvbGxlclBy
aXZhdGU7CisgICAgICAgIDIpIE1vdmVkIEluUmVnaW9uU2Nyb2xsZXIuY3BwfGggZnJvbSBXZWJL
aXRTdXBwb3J0LyB0byBBcGkvOworICAgICAgICAzKSBSZW5hbWVkIEluUmVnaW9uU2Nyb2xsZXIu
aCB0byBJblJlZ2lvblNjcm9sbGVyX3AuaDsKKyAgICAgICAgNCkgQWRkZWQgYSBuZXcgcHVibGlj
IGNsYXNzIGltcGxlbWVudGF0aW9uIHRvIEluUmVnaW9uU2Nyb2xsZXIuaDsKKyAgICAgICAgNSkg
QWRhcHRlZCBXZWJQYWdlIGFuZCBUb3VjaEV2ZW50SGFuZGxlciBjbGFzc2VzIHRvIHVzZSBJblJl
Z2lvblNjcm9sbGVyOjpkIGRpcmVjdGx5LgorCisgICAgICAgIFRoZSBtb3N0IGltcG9ydGFudCBB
UEkgaGVyZSBpcyAnOjpjb21wb3NpdGVkU2V0U2Nyb2xsUG9zaXRpb24nCisKKyAgICAgICAgSXQg
aXMgYSAgVUkvQ29tcG9zaXRpbmcgdGhyZWFkIG1ldGhvZCBvbmx5IGFuZCBzZXRzIHRoZSBhc3Nv
Y2lhdGVkIExheWVyQ29tcG9zaXRpbmdUaHJlYWQKKyAgICAgICAgKGNhbW91ZmxhZ2VkIGFzIGEg
dW5zaWduZWQpIGZvciBlYWNoIGNyZWF0ZWQgSW5SZWdpb25TY3JvbGxhYmxlQXJlYSB0aGF0IHN1
cHBvcnRzCisgICAgICAgIGNvbXBvc2l0ZWQgc2Nyb2xsaW5nLgorCisgICAgICAgIFRoZSB3YXkg
Ojpjb21wb3NpdGVkU2V0U2Nyb2xsUG9zaXRpb24gInNjcm9sbHMiIGEgbGF5ZXIgaXMgYnkgc2V0
dGluZyB0aGUgYm91bmRzT3JpZ2luCisgICAgICAgIHByb3BlcnR5IHRvIHRoZSBMYXllckNvbXBv
c2l0aW5nVGhyZWFkJ3MgJ292ZXJyaWRlJyBwcm9wZXJ0eSBpbiB0aGUgVUkvQ29tcG9zaXRpbmcg
dGhyZWFkLgorCisgICAgICAgICogQXBpL0luUmVnaW9uU2Nyb2xsZXIuY3BwOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5SZWdpb25TY3JvbGxl
ci5jcHAuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpJ
blJlZ2lvblNjcm9sbGVyOjpJblJlZ2lvblNjcm9sbGVyKToKKyAgICAgICAgKEJsYWNrQmVycnk6
OldlYktpdDo6SW5SZWdpb25TY3JvbGxlcjo6fkluUmVnaW9uU2Nyb2xsZXIpOgorICAgICAgICAo
QmxhY2tCZXJyeTo6V2ViS2l0OjpJblJlZ2lvblNjcm9sbGVyOjpjb21wb3NpdGVkU2V0U2Nyb2xs
UG9zaXRpb24pOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpJblJlZ2lvblNjcm9sbGVy
UHJpdmF0ZTo6SW5SZWdpb25TY3JvbGxlclByaXZhdGUpOgorICAgICAgICAoQmxhY2tCZXJyeTo6
V2ViS2l0OjpJblJlZ2lvblNjcm9sbGVyUHJpdmF0ZTo6c2V0Tm9kZSk6CisgICAgICAgIChCbGFj
a0JlcnJ5OjpXZWJLaXQ6OkluUmVnaW9uU2Nyb2xsZXJQcml2YXRlOjpub2RlKToKKyAgICAgICAg
KEJsYWNrQmVycnk6OldlYktpdDo6SW5SZWdpb25TY3JvbGxlclByaXZhdGU6OnJlc2V0KToKKyAg
ICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6SW5SZWdpb25TY3JvbGxlclByaXZhdGU6Omhhc05v
ZGUpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpJblJlZ2lvblNjcm9sbGVyUHJpdmF0
ZTo6Y2FuU2Nyb2xsKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6SW5SZWdpb25TY3Jv
bGxlclByaXZhdGU6OmNvbXBvc2l0ZWRTZXRTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChCbGFj
a0JlcnJ5OjpXZWJLaXQ6OkluUmVnaW9uU2Nyb2xsZXJQcml2YXRlOjpzY3JvbGxCeSk6CisgICAg
ICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkluUmVnaW9uU2Nyb2xsZXJQcml2YXRlOjppblJlZ2lv
blNjcm9sbGFibGVBcmVhc0ZvclBvaW50KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6
SW5SZWdpb25TY3JvbGxlclByaXZhdGU6OnNjcm9sbE5vZGVSZWN1cnNpdmVseSk6CisgICAgICAg
IChCbGFja0JlcnJ5OjpXZWJLaXQ6OkluUmVnaW9uU2Nyb2xsZXJQcml2YXRlOjpzY3JvbGxSZW5k
ZXJlcik6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkluUmVnaW9uU2Nyb2xsZXJQcml2
YXRlOjphZGp1c3RTY3JvbGxEZWx0YSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OmNh
blNjcm9sbElubmVyRnJhbWUpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpjYW5TY3Jv
bGxSZW5kZXJCb3gpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpwYXJlbnRMYXllcik6
CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OmVuY2xvc2luZ0xheWVyTm9kZSk6CisgICAg
ICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OmlzTm9uUmVuZGVyVmlld0ZpeGVkUG9zaXRpb25lZENv
bnRhaW5lcik6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OnB1c2hCYWNrSW5SZWdpb25T
Y3JvbGxhYmxlKToKKyAgICAgICAgKiBBcGkvSW5SZWdpb25TY3JvbGxlci5oOiBDb3BpZWQgZnJv
bSBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JblJlZ2lvblNjcm9sbGVy
LmguCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoSW5SZWdpb25TY3JvbGxlcik6CisgICAg
ICAgICogQXBpL0luUmVnaW9uU2Nyb2xsZXJfcC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktp
dC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5SZWdpb25TY3JvbGxlci5oLgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoSW5SZWdpb25TY3JvbGxlclBy
aXZhdGUpOgorICAgICAgICAqIEFwaS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKEJsYWNrQmVycnk6
OldlYktpdDo6V2ViUGFnZVByaXZhdGU6OnNjcm9sbEJ5KToKKyAgICAgICAgKEJsYWNrQmVycnk6
OldlYktpdDo6V2ViUGFnZVByaXZhdGU6Om5vdGlmeUluUmVnaW9uU2Nyb2xsU3RhdHVzQ2hhbmdl
ZCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2VQcml2YXRlOjpjbGVhckRv
Y3VtZW50RGF0YSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2VQcml2YXRl
OjpzZXRTY3JvbGxPcmlnaW5Qb2ludCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6Oldl
YlBhZ2U6OmluUmVnaW9uU2Nyb2xsZXIpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKiBB
cGkvV2ViUGFnZS5oOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKiBXZWJLaXRTdXBwb3J0
L0luUmVnaW9uU2Nyb2xsYWJsZUFyZWEuY3BwOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0
OjpJblJlZ2lvblNjcm9sbGFibGVBcmVhOjpJblJlZ2lvblNjcm9sbGFibGVBcmVhKToKKyAgICAg
ICAgKiBXZWJLaXRTdXBwb3J0L1RvdWNoRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKEJsYWNr
QmVycnk6OldlYktpdDo6VG91Y2hFdmVudEhhbmRsZXI6OmRyYXdUYXBIaWdobGlnaHQpOgorCisy
MDEyLTA4LTA4ICBBbnRvbmlvIEdvbWVzICA8YWdvbWVzQHJpbS5jb20+CisKICAgICAgICAgW0Js
YWNrQmVycnldIE1ha2UgV2ViT3ZlcmxheVByaXZhdGU6OnNjaGVkdWxlQ29tcG9zaXRpbmdSdW4g
YSBXZWJQYWdlUHJpdmF0ZSBtZXRob2QuCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD05MzQ4MAogICAgICAgICBQUiAjMTg4NjgyCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JblJlZ2lvblNjcm9sbGFibGVB
cmVhLmNwcCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0luUmVnaW9u
U2Nyb2xsYWJsZUFyZWEuY3BwCmluZGV4IDc2YTk4MGUuLjc1ZmFkZGQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0luUmVnaW9uU2Nyb2xsYWJsZUFy
ZWEuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0luUmVn
aW9uU2Nyb2xsYWJsZUFyZWEuY3BwCkBAIC0yMCw4ICsyMCwxMSBAQAogI2luY2x1ZGUgIkluUmVn
aW9uU2Nyb2xsYWJsZUFyZWEuaCIKIAogI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiTGF5
ZXJDb21wb3NpdGluZ1RocmVhZC5oIgorI2luY2x1ZGUgIkxheWVyV2ViS2l0VGhyZWFkLmgiCiAj
aW5jbHVkZSAiUmVuZGVyQm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRl
ICJSZW5kZXJMYXllckJhY2tpbmcuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNs
dWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiV2ViUGFnZV9wLmgiCkBAIC02OCw2ICs3MSw4
IEBAIEluUmVnaW9uU2Nyb2xsYWJsZUFyZWE6OkluUmVnaW9uU2Nyb2xsYWJsZUFyZWEoV2ViUGFn
ZVByaXZhdGUqIHdlYlBhZ2UsIFJlbmRlckxhCiAgICAgICAgIG1fc2Nyb2xsc1ZlcnRpY2FsbHkg
PSB2aWV3LT5jb250ZW50c0hlaWdodCgpID4gdmlldy0+dmlzaWJsZUhlaWdodCgpOwogCiAgICAg
ICAgIG1fb3ZlcnNjcm9sbExpbWl0RmFjdG9yID0gMC4wOyAvLyBGSVhNRSBldmVudHVhbGx5IHN1
cHBvcnQgb3ZlcnNjcm9sbAorICAgICAgICBtX2NhY2hlZENvbXBvc2l0ZWRTY3JvbGxhYmxlTGF5
ZXIgPSAwOyAvLyBGSVhNRTogTmVlZHMgY29tcG9zaXRlZCBsYXllciBmb3IgaW5uZXIgZnJhbWVz
LgorCiAgICAgfSBlbHNlIHsgLy8gUmVuZGVyQm94LWJhc2VkIGVsZW1lbnRzIGNhc2UgKHNjcm9s
bGFibGUgYm94ZXMgKGRpdidzLCBwJ3MsIHRleHRhcmVhJ3MsIGV0YykpLgogCiAgICAgICAgIFJl
bmRlckJveCogYm94ID0gbV9sYXllci0+cmVuZGVyQm94KCk7CkBAIC04Miw3ICs4NywxNSBAQCBJ
blJlZ2lvblNjcm9sbGFibGVBcmVhOjpJblJlZ2lvblNjcm9sbGFibGVBcmVhKFdlYlBhZ2VQcml2
YXRlKiB3ZWJQYWdlLCBSZW5kZXJMYQogICAgICAgICBtX3Njcm9sbHNIb3Jpem9udGFsbHkgPSBi
b3gtPnNjcm9sbFdpZHRoKCkgIT0gYm94LT5jbGllbnRXaWR0aCgpICYmIGJveC0+c2Nyb2xsc092
ZXJmbG93WCgpOwogICAgICAgICBtX3Njcm9sbHNWZXJ0aWNhbGx5ID0gYm94LT5zY3JvbGxIZWln
aHQoKSAhPSBib3gtPmNsaWVudEhlaWdodCgpICYmIGJveC0+c2Nyb2xsc092ZXJmbG93WSgpOwog
Ci0gICAgICAgIG1fb3ZlcnNjcm9sbExpbWl0RmFjdG9yID0gMC4wOyAvLyBGSVhNRSBldmVudHVh
bGx5IHN1cHBvcnQgb3ZlcnNjcm9sbAorICAgICAgICBib29sIHVzZXNDb21wb3NpdGVkU2Nyb2xs
aW5nID0gbV9sYXllci0+dXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKTsKKyAgICAgICAgaWYgKHVz
ZXNDb21wb3NpdGVkU2Nyb2xsaW5nKSB7CisgICAgICAgICAgICBtX3N1cHBvcnRzQ29tcG9zaXRl
ZFNjcm9sbGluZyA9IHRydWU7CisgICAgICAgICAgICBBU1NFUlQobV9sYXllci0+YmFja2luZygp
LT5oYXNTY3JvbGxpbmdMYXllcigpKTsKKworICAgICAgICAgICAgbV9jYWNoZWRDb21wb3NpdGVk
U2Nyb2xsYWJsZUxheWVyID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4obV9sYXllci0+YmFj
a2luZygpLT5zY3JvbGxpbmdMYXllcigpLT5wbGF0Zm9ybUxheWVyKCktPmxheWVyQ29tcG9zaXRp
bmdUaHJlYWQoKSk7CisgICAgICAgIH0KKworICAgICAgICBtX292ZXJzY3JvbGxMaW1pdEZhY3Rv
ciA9IDAuMDsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJy
eS9XZWJLaXRTdXBwb3J0L0luUmVnaW9uU2Nyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdC9ibGFj
a2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5SZWdpb25TY3JvbGxlci5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDNkOTgzNzUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9ibGFj
a2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5SZWdpb25TY3JvbGxlci5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSwzNTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBSZXNlYXJj
aCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0g
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
LSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBu
b3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EK
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW5SZWdpb25TY3JvbGxlci5o
IgotCi0jaW5jbHVkZSAiQmFja2luZ1N0b3JlQ2xpZW50LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIK
LSNpbmNsdWRlICJIVE1MRnJhbWVPd25lckVsZW1lbnQuaCIKLSNpbmNsdWRlICJIaXRUZXN0UmVz
dWx0LmgiCi0jaW5jbHVkZSAiSW5SZWdpb25TY3JvbGxhYmxlQXJlYS5oIgotI2luY2x1ZGUgIlBh
Z2UuaCIKLSNpbmNsdWRlICJSZW5kZXJCb3guaCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgot
I2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgotI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKLSNpbmNs
dWRlICJXZWJQYWdlX3AuaCIKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFj
ZSBCbGFja0JlcnJ5IHsKLW5hbWVzcGFjZSBXZWJLaXQgewotCi1zdGF0aWMgYm9vbCBjYW5TY3Jv
bGxJbm5lckZyYW1lKEZyYW1lKiBmcmFtZSkKLXsKLSAgICBpZiAoIWZyYW1lIHx8ICFmcmFtZS0+
dmlldygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBOb3QgaGF2aW5nIGFuIG93
bmVyIGVsZW1lbnQgbWVhbnMgdGhhdCB3ZSBhcmUgb24gdGhlIG1haW5mcmFtZS4KLSAgICBpZiAo
IWZyYW1lLT5vd25lckVsZW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQVNT
RVJUKGZyYW1lICE9IGZyYW1lLT5wYWdlKCktPm1haW5GcmFtZSgpKTsKLQotICAgIEludFNpemUg
dmlzaWJsZVNpemUgPSBmcmFtZS0+dmlldygpLT52aXNpYmxlQ29udGVudFJlY3QoKS5zaXplKCk7
Ci0gICAgSW50U2l6ZSBjb250ZW50c1NpemUgPSBmcmFtZS0+dmlldygpLT5jb250ZW50c1NpemUo
KTsKLQotICAgIGJvb2wgY2FuQmVTY3JvbGxlZCA9IGNvbnRlbnRzU2l6ZS5oZWlnaHQoKSA+IHZp
c2libGVTaXplLmhlaWdodCgpIHx8IGNvbnRlbnRzU2l6ZS53aWR0aCgpID4gdmlzaWJsZVNpemUu
d2lkdGgoKTsKLQotICAgIC8vIExldHMgYWxzbyBjb25zaWRlciB0aGUgJ292ZXJmbG93LXt4LHl9
IHByb3BlcnR5IHNldCBkaXJlY3RseSB0byB0aGUge2l9ZnJhbWUgdGFnLgotICAgIHJldHVybiBj
YW5CZVNjcm9sbGVkICYmIChmcmFtZS0+b3duZXJFbGVtZW50KCktPnNjcm9sbGluZ01vZGUoKSAh
PSBTY3JvbGxiYXJBbHdheXNPZmYpOwotfQotCi0vLyBUaGUgUmVuZGVyQm94OjpjYW5iZVNjcm9s
bGVkQW5kSGFzU2Nyb2xsYWJsZUFyZWEgbWV0aG9kIHJldHVybnMgdHJ1ZSBmb3IgdGhlCi0vLyBm
b2xsb3dpbmcgc2NlbmFyaW8sIGZvciBleGFtcGxlOgotLy8gKDEpIGEgZGl2IHRoYXQgaGFzIGEg
dmVydGljYWwgb3ZlcmZsb3cgYnV0IG5vIGhvcml6b250YWwgb3ZlcmZsb3cKLS8vICAgICB3aXRo
IG92ZXJmbG93LXk6IGhpZGRlbiBhbmQgb3ZlcmZsb3cteDogYXV0byBzZXQuCi0vLyBUaGUgdmVy
c2lvbiBiZWxvdyBmaXhlcyBpdC4KLS8vIEZJWE1FOiBGaXggUmVuZGVyQm94OjpjYW5CZVNjcm9s
bGVkQW5kSGFzU2Nyb2xsYWJsZUFyZWEgbWV0aG9kIGluc3RlYWQuCi1zdGF0aWMgYm9vbCBjYW5T
Y3JvbGxSZW5kZXJCb3goUmVuZGVyQm94KiBib3gpCi17Ci0gICAgaWYgKCFib3ggfHwgIWJveC0+
aGFzT3ZlcmZsb3dDbGlwKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChib3gt
PnNjcm9sbHNPdmVyZmxvd1goKSAmJiAoYm94LT5zY3JvbGxXaWR0aCgpICE9IGJveC0+Y2xpZW50
V2lkdGgoKSkKLSAgICAgICAgfHwgYm94LT5zY3JvbGxzT3ZlcmZsb3dZKCkgJiYgKGJveC0+c2Ny
b2xsSGVpZ2h0KCkgIT0gYm94LT5jbGllbnRIZWlnaHQoKSkpCi0gICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgTm9kZSogbm9kZSA9IGJveC0+bm9kZSgpOwotICAgIHJldHVybiBub2RlICYmIChu
b2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKSB8fCBub2RlLT5pc0RvY3VtZW50Tm9kZSgpKTsKLX0K
LQotc3RhdGljIFJlbmRlckxheWVyKiBwYXJlbnRMYXllcihSZW5kZXJMYXllciogbGF5ZXIpCi17
Ci0gICAgQVNTRVJUKGxheWVyKTsKLSAgICBpZiAobGF5ZXItPnBhcmVudCgpKQotICAgICAgICBy
ZXR1cm4gbGF5ZXItPnBhcmVudCgpOwotCi0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGxh
eWVyLT5yZW5kZXJlcigpOwotICAgIGlmIChyZW5kZXJlci0+ZG9jdW1lbnQoKSAmJiByZW5kZXJl
ci0+ZG9jdW1lbnQoKS0+b3duZXJFbGVtZW50KCkgJiYgcmVuZGVyZXItPmRvY3VtZW50KCktPm93
bmVyRWxlbWVudCgpLT5yZW5kZXJlcigpKQotICAgICAgICByZXR1cm4gcmVuZGVyZXItPmRvY3Vt
ZW50KCktPm93bmVyRWxlbWVudCgpLT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpOwotCi0g
ICAgcmV0dXJuIDA7Ci19Ci0KLS8vIEZJWE1FOiBNYWtlIFJlbmRlckxheWVyOjplbmNsb3NpbmdF
bGVtZW50IHB1YmxpYyBzbyB0aGlzIG9uZSBjYW4gYmUgcmVtb3ZlZC4KLXN0YXRpYyBOb2RlKiBl
bmNsb3NpbmdMYXllck5vZGUoUmVuZGVyTGF5ZXIqIGxheWVyKQotewotICAgIGZvciAoUmVuZGVy
T2JqZWN0KiByID0gbGF5ZXItPnJlbmRlcmVyKCk7IHI7IHIgPSByLT5wYXJlbnQoKSkgewotICAg
ICAgICBpZiAoTm9kZSogZSA9IHItPm5vZGUoKSkKLSAgICAgICAgICAgIHJldHVybiBlOwotICAg
IH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGlj
IGJvb2wgaXNOb25SZW5kZXJWaWV3Rml4ZWRQb3NpdGlvbmVkQ29udGFpbmVyKFJlbmRlckxheWVy
KiBsYXllcikKLXsKLSAgICBSZW5kZXJPYmplY3QqIG8gPSBsYXllci0+cmVuZGVyZXIoKTsKLSAg
ICBpZiAoby0+aXNSZW5kZXJWaWV3KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJl
dHVybiBvLT5pc1Bvc2l0aW9uZWQoKSAmJiBvLT5zdHlsZSgpLT5wb3NpdGlvbigpID09IEZpeGVk
UG9zaXRpb247Ci19Ci0KLXN0YXRpYyB2b2lkIHB1c2hCYWNrSW5SZWdpb25TY3JvbGxhYmxlKHN0
ZDo6dmVjdG9yPFBsYXRmb3JtOjpTY3JvbGxWaWV3QmFzZSo+JiB2ZWN0b3IsIEluUmVnaW9uU2Ny
b2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhLCBJblJlZ2lvblNjcm9sbGVyKiBzY3JvbGxlcikK
LXsKLSAgICBBU1NFUlQoc2Nyb2xsZXIpOwotICAgIEFTU0VSVCghc2Nyb2xsYWJsZUFyZWEtPmlz
TnVsbCgpKTsKLQotICAgIHNjcm9sbGFibGVBcmVhLT5zZXRDYW5Qcm9wYWdhdGVTY3JvbGxpbmdU
b0VuY2xvc2luZ1Njcm9sbGFibGUoIWlzTm9uUmVuZGVyVmlld0ZpeGVkUG9zaXRpb25lZENvbnRh
aW5lcihzY3JvbGxhYmxlQXJlYS0+bGF5ZXIoKSkpOwotICAgIHZlY3Rvci5wdXNoX2JhY2soc2Ny
b2xsYWJsZUFyZWEpOwotICAgIGlmICh2ZWN0b3Iuc2l6ZSgpID09IDEpIHsKLSAgICAgICAgLy8g
RklYTUU6IFVzZSBSZW5kZXJMYXllcjo6cmVuZGVyQm94KCktPm5vZGUoKSBpbnN0ZWFkPwotICAg
ICAgICBzY3JvbGxlci0+c2V0Tm9kZShlbmNsb3NpbmdMYXllck5vZGUoc2Nyb2xsYWJsZUFyZWEt
PmxheWVyKCkpKTsKLSAgICB9Ci19Ci0KLUluUmVnaW9uU2Nyb2xsZXI6OkluUmVnaW9uU2Nyb2xs
ZXIoV2ViUGFnZVByaXZhdGUqIHdlYlBhZ2VQcml2YXRlKQotICAgIDogbV93ZWJQYWdlKHdlYlBh
Z2VQcml2YXRlKQotewotfQotCi12b2lkIEluUmVnaW9uU2Nyb2xsZXI6OnNldE5vZGUoV2ViQ29y
ZTo6Tm9kZSogbm9kZSkKLXsKLSAgICBtX2luUmVnaW9uU2Nyb2xsU3RhcnRpbmdOb2RlID0gbm9k
ZTsKLX0KLQotV2ViQ29yZTo6Tm9kZSogSW5SZWdpb25TY3JvbGxlcjo6bm9kZSgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1faW5SZWdpb25TY3JvbGxTdGFydGluZ05vZGUuZ2V0KCk7Ci19Ci0KLXZv
aWQgSW5SZWdpb25TY3JvbGxlcjo6cmVzZXQoKQotewotICAgIHNldE5vZGUoMCk7Ci19Ci0KLWJv
b2wgSW5SZWdpb25TY3JvbGxlcjo6aGFzTm9kZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICEhbV9p
blJlZ2lvblNjcm9sbFN0YXJ0aW5nTm9kZTsKLX0KLQotYm9vbCBJblJlZ2lvblNjcm9sbGVyOjpj
YW5TY3JvbGwoKSBjb25zdAotewotICAgIHJldHVybiBoYXNOb2RlKCk7Ci19Ci0KLWJvb2wgSW5S
ZWdpb25TY3JvbGxlcjo6c2Nyb2xsQnkoY29uc3QgUGxhdGZvcm06OkludFNpemUmIGRlbHRhKQot
ewotICAgIGlmICghY2FuU2Nyb2xsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJl
dHVybiBzY3JvbGxOb2RlUmVjdXJzaXZlbHkobm9kZSgpLCBkZWx0YSk7Ci19Ci0KLXN0ZDo6dmVj
dG9yPFBsYXRmb3JtOjpTY3JvbGxWaWV3QmFzZSo+IEluUmVnaW9uU2Nyb2xsZXI6OmluUmVnaW9u
U2Nyb2xsYWJsZUFyZWFzRm9yUG9pbnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvaW50KQot
ewotICAgIHN0ZDo6dmVjdG9yPFBsYXRmb3JtOjpTY3JvbGxWaWV3QmFzZSo+IHZhbGlkUmV0dXJu
OwotICAgIHN0ZDo6dmVjdG9yPFBsYXRmb3JtOjpTY3JvbGxWaWV3QmFzZSo+IGVtcHR5UmV0dXJu
OwotCi0gICAgSGl0VGVzdFJlc3VsdCByZXN1bHQgPSBtX3dlYlBhZ2UtPm1fbWFpbkZyYW1lLT5l
dmVudEhhbmRsZXIoKS0+aGl0VGVzdFJlc3VsdEF0UG9pbnQobV93ZWJQYWdlLT5tYXBGcm9tVmll
d3BvcnRUb0NvbnRlbnRzKHBvaW50KSwgZmFsc2UgLyphbGxvd1NoYWRvd0NvbnRlbnQqLyk7Ci0g
ICAgTm9kZSogbm9kZSA9IHJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKTsKLSAgICBpZiAoIW5v
ZGUgfHwgIW5vZGUtPnJlbmRlcmVyKCkpCi0gICAgICAgIHJldHVybiBlbXB0eVJldHVybjsKLQot
ICAgIFJlbmRlckxheWVyKiBsYXllciA9IG5vZGUtPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVy
KCk7Ci0gICAgZG8gewotICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbGF5ZXItPnJl
bmRlcmVyKCk7Ci0KLSAgICAgICAgaWYgKHJlbmRlcmVyLT5pc1JlbmRlclZpZXcoKSkgewotICAg
ICAgICAgICAgaWYgKFJlbmRlclZpZXcqIHJlbmRlclZpZXcgPSB0b1JlbmRlclZpZXcocmVuZGVy
ZXIpKSB7Ci0gICAgICAgICAgICAgICAgRnJhbWVWaWV3KiB2aWV3ID0gcmVuZGVyVmlldy0+ZnJh
bWVWaWV3KCk7Ci0gICAgICAgICAgICAgICAgaWYgKCF2aWV3KQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZW1wdHlSZXR1cm47Ci0KLSAgICAgICAgICAgICAgICBpZiAoY2FuU2Nyb2xsSW5u
ZXJGcmFtZSh2aWV3LT5mcmFtZSgpKSkgewotICAgICAgICAgICAgICAgICAgICBwdXNoQmFja0lu
UmVnaW9uU2Nyb2xsYWJsZSh2YWxpZFJldHVybiwgbmV3IEluUmVnaW9uU2Nyb2xsYWJsZUFyZWEo
bV93ZWJQYWdlLCBsYXllciksIHRoaXMpOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoY2Fu
U2Nyb2xsUmVuZGVyQm94KGxheWVyLT5yZW5kZXJCb3goKSkpIHsKLSAgICAgICAgICAgIHB1c2hC
YWNrSW5SZWdpb25TY3JvbGxhYmxlKHZhbGlkUmV0dXJuLCBuZXcgSW5SZWdpb25TY3JvbGxhYmxl
QXJlYShtX3dlYlBhZ2UsIGxheWVyKSwgdGhpcyk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgfQotCi0gICAgICAgIC8vIElmIHdlIHJ1biBpbnRvIGEgZml4IHBvc2l0aW9uZWQgbGF5
ZXIsIHNldCB0aGUgbGFzdCBzY3JvbGxhYmxlIGluLXJlZ2lvbiBvYmplY3QKLSAgICAgICAgLy8g
YXMgbm90IGFibGUgdG8gcHJvcGFnYXRlIHNjcm9sbCB0byBpdHMgcGFyZW50IHNjcm9sbGFibGUu
Ci0gICAgICAgIGlmIChpc05vblJlbmRlclZpZXdGaXhlZFBvc2l0aW9uZWRDb250YWluZXIobGF5
ZXIpICYmIHZhbGlkUmV0dXJuLnNpemUoKSkgewotICAgICAgICAgICAgUGxhdGZvcm06OlNjcm9s
bFZpZXdCYXNlKiBlbmQgPSB2YWxpZFJldHVybi5iYWNrKCk7Ci0gICAgICAgICAgICBlbmQtPnNl
dENhblByb3BhZ2F0ZVNjcm9sbGluZ1RvRW5jbG9zaW5nU2Nyb2xsYWJsZShmYWxzZSk7Ci0gICAg
ICAgIH0KLQotICAgIH0gd2hpbGUgKGxheWVyID0gcGFyZW50TGF5ZXIobGF5ZXIpKTsKLQotICAg
IGlmICh2YWxpZFJldHVybi5lbXB0eSgpKQotICAgICAgICByZXR1cm4gZW1wdHlSZXR1cm47Ci0K
LSAgICAvLyBQb3N0LWNhbGN1bGF0ZSB0aGUgdmlzaWJsZSB3aW5kb3cgcmVjdHMgaW4gcmV2ZXJz
ZSBoaXQgdGVzdCBvcmRlciBzbwotICAgIC8vIHdlIGFjY291bnQgZm9yIGFsbCBhbmQgYW55IGNs
aXBwaW5nIHJlY3RzLgotICAgIFdlYkNvcmU6OkludFJlY3QgcmVjdXJzaXZlQ2xpcHBpbmdSZWN0
KFdlYkNvcmU6OkludFBvaW50Ojp6ZXJvKCksIG1fd2ViUGFnZS0+dHJhbnNmb3JtZWRWaWV3cG9y
dFNpemUoKSk7Ci0KLSAgICBzdGQ6OnZlY3RvcjxQbGF0Zm9ybTo6U2Nyb2xsVmlld0Jhc2UqPjo6
cmV2ZXJzZV9pdGVyYXRvciByZW5kID0gdmFsaWRSZXR1cm4ucmVuZCgpOwotICAgIGZvciAoc3Rk
Ojp2ZWN0b3I8UGxhdGZvcm06OlNjcm9sbFZpZXdCYXNlKj46OnJldmVyc2VfaXRlcmF0b3Igcml0
ID0gdmFsaWRSZXR1cm4ucmJlZ2luKCk7IHJpdCAhPSByZW5kOyArK3JpdCkgewotCi0gICAgICAg
IEluUmVnaW9uU2Nyb2xsYWJsZUFyZWEqIGN1cnIgPSBzdGF0aWNfY2FzdDxJblJlZ2lvblNjcm9s
bGFibGVBcmVhKj4oKnJpdCk7Ci0gICAgICAgIFJlbmRlckxheWVyKiBsYXllciA9IGN1cnItPmxh
eWVyKCk7Ci0KLSAgICAgICAgaWYgKGxheWVyICYmIGxheWVyLT5yZW5kZXJlcigpLT5pc1JlbmRl
clZpZXcoKSkgeyAvLyAjZG9jdW1lbnQgY2FzZQotICAgICAgICAgICAgRnJhbWVWaWV3KiB2aWV3
ID0gdG9SZW5kZXJWaWV3KGxheWVyLT5yZW5kZXJlcigpKS0+ZnJhbWVWaWV3KCk7Ci0gICAgICAg
ICAgICBBU1NFUlQodmlldyk7Ci0gICAgICAgICAgICBBU1NFUlQoY2FuU2Nyb2xsSW5uZXJGcmFt
ZSh2aWV3LT5mcmFtZSgpKSk7Ci0KLSAgICAgICAgICAgIFdlYkNvcmU6OkludFJlY3QgZnJhbWVX
aW5kb3dSZWN0ID0gbV93ZWJQYWdlLT5tYXBUb1RyYW5zZm9ybWVkKG1fd2ViUGFnZS0+Z2V0UmVj
dXJzaXZlVmlzaWJsZVdpbmRvd1JlY3QodmlldykpOwotICAgICAgICAgICAgZnJhbWVXaW5kb3dS
ZWN0LmludGVyc2VjdChyZWN1cnNpdmVDbGlwcGluZ1JlY3QpOwotICAgICAgICAgICAgY3Vyci0+
c2V0VmlzaWJsZVdpbmRvd1JlY3QoZnJhbWVXaW5kb3dSZWN0KTsKLSAgICAgICAgICAgIHJlY3Vy
c2l2ZUNsaXBwaW5nUmVjdCA9IGZyYW1lV2luZG93UmVjdDsKLQotICAgICAgICB9IGVsc2UgeyAv
LyBSZW5kZXJCb3gtYmFzZWQgZWxlbWVudHMgY2FzZSAoc2Nyb2xsYWJsZSBib3hlcyAoZGl2J3Ms
IHAncywgdGV4dGFyZWEncywgZXRjKSkuCi0KLSAgICAgICAgICAgIFJlbmRlckJveCogYm94ID0g
bGF5ZXItPnJlbmRlckJveCgpOwotICAgICAgICAgICAgQVNTRVJUKGJveCk7Ci0gICAgICAgICAg
ICBBU1NFUlQoY2FuU2Nyb2xsUmVuZGVyQm94KGJveCkpOwotCi0gICAgICAgICAgICBXZWJDb3Jl
OjpJbnRSZWN0IHZpc2libGVXaW5kb3dSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChib3gtPmFic29s
dXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgpKTsKLSAgICAgICAgICAgIHZpc2libGVXaW5kb3dSZWN0
ID0gYm94LT5mcmFtZSgpLT52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3codmlzaWJsZVdpbmRvd1Jl
Y3QpOwotICAgICAgICAgICAgdmlzaWJsZVdpbmRvd1JlY3QgPSBtX3dlYlBhZ2UtPm1hcFRvVHJh
bnNmb3JtZWQodmlzaWJsZVdpbmRvd1JlY3QpOwotICAgICAgICAgICAgdmlzaWJsZVdpbmRvd1Jl
Y3QuaW50ZXJzZWN0KHJlY3Vyc2l2ZUNsaXBwaW5nUmVjdCk7Ci0KLSAgICAgICAgICAgIGN1cnIt
PnNldFZpc2libGVXaW5kb3dSZWN0KHZpc2libGVXaW5kb3dSZWN0KTsKLSAgICAgICAgICAgIHJl
Y3Vyc2l2ZUNsaXBwaW5nUmVjdCA9IHZpc2libGVXaW5kb3dSZWN0OwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgcmV0dXJuIHZhbGlkUmV0dXJuOwotfQotCi1ib29sIEluUmVnaW9uU2Nyb2xsZXI6
OnNjcm9sbE5vZGVSZWN1cnNpdmVseShXZWJDb3JlOjpOb2RlKiBub2RlLCBjb25zdCBXZWJDb3Jl
OjpJbnRTaXplJiBkZWx0YSkKLXsKLSAgICBpZiAoZGVsdGEuaXNaZXJvKCkpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKLSAgICBpZiAoIXJl
bmRlcmVyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBGcmFtZVZpZXcqIHZpZXcgPSBy
ZW5kZXJlci0+dmlldygpLT5mcmFtZVZpZXcoKTsKLSAgICBpZiAoIXZpZXcpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIC8vIFRyeSBzY3JvbGxpbmcgdGhlIHJlbmRlcmVyLgotICAgIGlm
IChzY3JvbGxSZW5kZXJlcihyZW5kZXJlciwgZGVsdGEpKQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LQotICAgIC8vIFdlJ3ZlIGhpdCB0aGUgcGFnZSwgZG9uJ3Qgc2Nyb2xsIGl0IGFuZCByZXR1cm4g
ZmFsc2UuCi0gICAgaWYgKHZpZXcgPT0gbV93ZWJQYWdlLT5tX21haW5GcmFtZS0+dmlldygpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBUcnkgc2Nyb2xsaW5nIHRoZSBGcmFtZVZp
ZXcuCi0gICAgaWYgKGNhblNjcm9sbElubmVyRnJhbWUodmlldy0+ZnJhbWUoKSkpIHsKLSAgICAg
ICAgSW50U2l6ZSB2aWV3RGVsdGEgPSBkZWx0YTsKLSAgICAgICAgSW50UG9pbnQgbmV3Vmlld09m
ZnNldCA9IHZpZXctPnNjcm9sbFBvc2l0aW9uKCk7Ci0gICAgICAgIEludFBvaW50IG1heFZpZXdP
ZmZzZXQgPSB2aWV3LT5tYXhpbXVtU2Nyb2xsUG9zaXRpb24oKTsKLSAgICAgICAgYWRqdXN0U2Ny
b2xsRGVsdGEobWF4Vmlld09mZnNldCwgbmV3Vmlld09mZnNldCwgdmlld0RlbHRhKTsKLQotICAg
ICAgICBpZiAoIXZpZXdEZWx0YS5pc1plcm8oKSkgewotICAgICAgICAgICAgdmlldy0+c2V0Q2Fu
QmxpdE9uU2Nyb2xsKGZhbHNlKTsKLQotICAgICAgICAgICAgQmFja2luZ1N0b3JlQ2xpZW50KiBi
YWNraW5nU3RvcmVDbGllbnQgPSBtX3dlYlBhZ2UtPmJhY2tpbmdTdG9yZUNsaWVudEZvckZyYW1l
KHZpZXctPmZyYW1lKCkpOwotICAgICAgICAgICAgaWYgKGJhY2tpbmdTdG9yZUNsaWVudCkgewot
ICAgICAgICAgICAgICAgIGJhY2tpbmdTdG9yZUNsaWVudC0+c2V0SXNDbGllbnRHZW5lcmF0ZWRT
Y3JvbGwodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgYmFja2luZ1N0b3JlQ2xpZW50LT5zZXRJc1Nj
cm9sbE5vdGlmaWNhdGlvblN1cHByZXNzZWQodHJ1ZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIHNldE5vZGUodmlldy0+ZnJhbWUoKS0+ZG9jdW1lbnQoKSk7Ci0KLSAgICAgICAgICAg
IHZpZXctPnNjcm9sbEJ5KHZpZXdEZWx0YSk7Ci0KLSAgICAgICAgICAgIGlmIChiYWNraW5nU3Rv
cmVDbGllbnQpIHsKLSAgICAgICAgICAgICAgICBiYWNraW5nU3RvcmVDbGllbnQtPnNldElzQ2xp
ZW50R2VuZXJhdGVkU2Nyb2xsKGZhbHNlKTsKLSAgICAgICAgICAgICAgICBiYWNraW5nU3RvcmVD
bGllbnQtPnNldElzU2Nyb2xsTm90aWZpY2F0aW9uU3VwcHJlc3NlZChmYWxzZSk7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgLy8gVHJ5IHNjcm9sbGluZyB0aGUgbm9kZSBvZiB0aGUgZW5jbG9zaW5nIGZyYW1lLgotICAg
IEZyYW1lKiBmcmFtZSA9IG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCk7Ci0gICAgaWYgKGZyYW1l
KSB7Ci0gICAgICAgIE5vZGUqIG93bmVyTm9kZSA9IGZyYW1lLT5vd25lckVsZW1lbnQoKTsKLSAg
ICAgICAgaWYgKHNjcm9sbE5vZGVSZWN1cnNpdmVseShvd25lck5vZGUsIGRlbHRhKSkKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9v
bCBJblJlZ2lvblNjcm9sbGVyOjpzY3JvbGxSZW5kZXJlcihXZWJDb3JlOjpSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBkZWx0YSkKLXsKLSAgICBSZW5kZXJM
YXllciogbGF5ZXIgPSByZW5kZXJlci0+ZW5jbG9zaW5nTGF5ZXIoKTsKLSAgICBpZiAoIWxheWVy
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBUcnkgdG8gc2Nyb2xsIGxheWVyLgot
ICAgIGJvb2wgcmVzdHJpY3RlZEJ5TGluZUNsYW1wID0gZmFsc2U7Ci0gICAgaWYgKHJlbmRlcmVy
LT5wYXJlbnQoKSkKLSAgICAgICAgcmVzdHJpY3RlZEJ5TGluZUNsYW1wID0gIXJlbmRlcmVyLT5w
YXJlbnQoKS0+c3R5bGUoKS0+bGluZUNsYW1wKCkuaXNOb25lKCk7Ci0KLSAgICBpZiAocmVuZGVy
ZXItPmhhc092ZXJmbG93Q2xpcCgpICYmICFyZXN0cmljdGVkQnlMaW5lQ2xhbXApIHsKLSAgICAg
ICAgSW50U2l6ZSBsYXllckRlbHRhID0gZGVsdGE7Ci0gICAgICAgIEludFBvaW50IG1heE9mZnNl
dChsYXllci0+c2Nyb2xsV2lkdGgoKSAtIGxheWVyLT5yZW5kZXJCb3goKS0+Y2xpZW50V2lkdGgo
KSwgbGF5ZXItPnNjcm9sbEhlaWdodCgpIC0gbGF5ZXItPnJlbmRlckJveCgpLT5jbGllbnRIZWln
aHQoKSk7Ci0gICAgICAgIEludFBvaW50IGN1cnJlbnRPZmZzZXQobGF5ZXItPnNjcm9sbFhPZmZz
ZXQoKSwgbGF5ZXItPnNjcm9sbFlPZmZzZXQoKSk7Ci0gICAgICAgIGFkanVzdFNjcm9sbERlbHRh
KG1heE9mZnNldCwgY3VycmVudE9mZnNldCwgbGF5ZXJEZWx0YSk7Ci0gICAgICAgIGlmICghbGF5
ZXJEZWx0YS5pc1plcm8oKSkgewotICAgICAgICAgICAgc2V0Tm9kZShlbmNsb3NpbmdMYXllck5v
ZGUobGF5ZXIpKTsKLSAgICAgICAgICAgIEludFBvaW50IG5ld09mZnNldCA9IGN1cnJlbnRPZmZz
ZXQgKyBsYXllckRlbHRhOwotICAgICAgICAgICAgbGF5ZXItPnNjcm9sbFRvT2Zmc2V0KG5ld09m
ZnNldC54KCksIG5ld09mZnNldC55KCkpOwotICAgICAgICAgICAgcmVuZGVyZXItPnJlcGFpbnQo
dHJ1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IHdoaWxlIChsYXllciA9IGxheWVyLT5wYXJlbnQoKSkgewotICAgICAgICBpZiAoY2FuU2Nyb2xs
UmVuZGVyQm94KGxheWVyLT5yZW5kZXJCb3goKSkpCi0gICAgICAgICAgICByZXR1cm4gc2Nyb2xs
UmVuZGVyZXIobGF5ZXItPnJlbmRlckJveCgpLCBkZWx0YSk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi12b2lkIEluUmVnaW9uU2Nyb2xsZXI6OmFkanVzdFNjcm9sbERlbHRhKGNv
bnN0IFdlYkNvcmU6OkludFBvaW50JiBtYXhPZmZzZXQsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50
JiBjdXJyZW50T2Zmc2V0LCBXZWJDb3JlOjpJbnRTaXplJiBkZWx0YSkgY29uc3QKLXsKLSAgICBp
ZiAoY3VycmVudE9mZnNldC54KCkgKyBkZWx0YS53aWR0aCgpID4gbWF4T2Zmc2V0LngoKSkKLSAg
ICAgICAgZGVsdGEuc2V0V2lkdGgoc3RkOjptaW4obWF4T2Zmc2V0LngoKSAtIGN1cnJlbnRPZmZz
ZXQueCgpLCBkZWx0YS53aWR0aCgpKSk7Ci0KLSAgICBpZiAoY3VycmVudE9mZnNldC54KCkgKyBk
ZWx0YS53aWR0aCgpIDwgMCkKLSAgICAgICAgZGVsdGEuc2V0V2lkdGgoc3RkOjptYXgoLWN1cnJl
bnRPZmZzZXQueCgpLCBkZWx0YS53aWR0aCgpKSk7Ci0KLSAgICBpZiAoY3VycmVudE9mZnNldC55
KCkgKyBkZWx0YS5oZWlnaHQoKSA+IG1heE9mZnNldC55KCkpCi0gICAgICAgIGRlbHRhLnNldEhl
aWdodChzdGQ6Om1pbihtYXhPZmZzZXQueSgpIC0gY3VycmVudE9mZnNldC55KCksIGRlbHRhLmhl
aWdodCgpKSk7Ci0KLSAgICBpZiAoY3VycmVudE9mZnNldC55KCkgKyBkZWx0YS5oZWlnaHQoKSA8
IDApCi0gICAgICAgIGRlbHRhLnNldEhlaWdodChzdGQ6Om1heCgtY3VycmVudE9mZnNldC55KCks
IGRlbHRhLmhlaWdodCgpKSk7Ci19Ci0KLX0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
YmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0luUmVnaW9uU2Nyb2xsZXIuaCBiL1NvdXJjZS9XZWJL
aXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0luUmVnaW9uU2Nyb2xsZXIuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZTliMTkxMi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JblJlZ2lvblNjcm9sbGVyLmgKKysrIC9kZXYvbnVs
bApAQCAtMSw2NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIFJlc2Vh
cmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlm
IG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVT
QQotICovCi0KLSNpZm5kZWYgSW5SZWdpb25TY3JvbGxlcl9oCi0jZGVmaW5lIEluUmVnaW9uU2Ny
b2xsZXJfaAotCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotCi0jaW5jbHVkZSA8aW50ZXJhY3Rpb24v
U2Nyb2xsVmlld0Jhc2UuaD4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLWNsYXNzIEZyYW1lOwotY2xhc3MgTm9kZTsKLWNsYXNzIFJlbmRlck9iamVjdDsKLX0KLQot
bmFtZXNwYWNlIEJsYWNrQmVycnkgewotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYlBh
Z2VQcml2YXRlOwotCi1jbGFzcyBJblJlZ2lvblNjcm9sbGVyIHsKLQotcHVibGljOgotICAgIElu
UmVnaW9uU2Nyb2xsZXIoV2ViUGFnZVByaXZhdGUqKTsKLQotICAgIHZvaWQgc2V0Tm9kZShXZWJD
b3JlOjpOb2RlKik7Ci0gICAgV2ViQ29yZTo6Tm9kZSogbm9kZSgpIGNvbnN0OwotICAgIHZvaWQg
cmVzZXQoKTsKLQotICAgIGJvb2wgY2FuU2Nyb2xsKCkgY29uc3Q7Ci0gICAgYm9vbCBoYXNOb2Rl
KCkgY29uc3Q7Ci0KLSAgICBib29sIHNjcm9sbEJ5KGNvbnN0IFBsYXRmb3JtOjpJbnRTaXplJiBk
ZWx0YSk7Ci0KLSAgICBzdGQ6OnZlY3RvcjxQbGF0Zm9ybTo6U2Nyb2xsVmlld0Jhc2UqPiBpblJl
Z2lvblNjcm9sbGFibGVBcmVhc0ZvclBvaW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7Ci1w
cml2YXRlOgotCi0gICAgYm9vbCBzY3JvbGxOb2RlUmVjdXJzaXZlbHkoV2ViQ29yZTo6Tm9kZSos
IGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGRlbHRhKTsKLSAgICBib29sIHNjcm9sbFJlbmRlcmVy
KFdlYkNvcmU6OlJlbmRlck9iamVjdCosIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGRlbHRhKTsK
LQotICAgIHZvaWQgYWRqdXN0U2Nyb2xsRGVsdGEoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIG1h
eE9mZnNldCwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGN1cnJlbnRPZmZzZXQsIFdlYkNvcmU6
OkludFNpemUmIGRlbHRhKSBjb25zdDsKLQotICAgIFJlZlB0cjxXZWJDb3JlOjpOb2RlPiBtX2lu
UmVnaW9uU2Nyb2xsU3RhcnRpbmdOb2RlOwotICAgIFdlYlBhZ2VQcml2YXRlKiBtX3dlYlBhZ2U7
Ci19OwotCi19Ci19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2Jl
cnJ5L1dlYktpdFN1cHBvcnQvVG91Y2hFdmVudEhhbmRsZXIuY3BwIGIvU291cmNlL1dlYktpdC9i
bGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvVG91Y2hFdmVudEhhbmRsZXIuY3BwCmluZGV4IGM0Yzg0
NzguLmMyZTMwMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRT
dXBwb3J0L1RvdWNoRXZlbnRIYW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVy
cnkvV2ViS2l0U3VwcG9ydC9Ub3VjaEV2ZW50SGFuZGxlci5jcHAKQEAgLTMxLDYgKzMxLDcgQEAK
ICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAj
aW5jbHVkZSAiSFRNTFBsdWdJbkVsZW1lbnQuaCIKKyNpbmNsdWRlICJJblJlZ2lvblNjcm9sbGVy
X3AuaCIKICNpbmNsdWRlICJJbnB1dEhhbmRsZXIuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAj
aW5jbHVkZSAiSW50U2l6ZS5oIgpAQCAtMzM5LDcgKzM0MCw3IEBAIHZvaWQgVG91Y2hFdmVudEhh
bmRsZXI6OmRyYXdUYXBIaWdobGlnaHQoKQogICAgIC8vIE9uIHRoZSBjbGllbnQgc2lkZSwgdGhp
cyBpbmZvIGlzIGJlaW5nIHVzZWQgdG8gaGlkZSB0aGUgdGFwIGhpZ2hsaWdodCB3aW5kb3cgb24g
c2Nyb2xsLgogICAgIFJlbmRlckxheWVyKiBsYXllciA9IG1fd2ViUGFnZS0+ZW5jbG9zaW5nRml4
ZWRQb3NpdGlvbmVkQW5jZXN0b3JPclNlbGZJZkZpeGVkUG9zaXRpb25lZChyZW5kZXJlci0+ZW5j
bG9zaW5nTGF5ZXIoKSk7CiAgICAgYm9vbCBzaG91bGRIaWRlVGFwSGlnaGxpZ2h0UmlnaHRBZnRl
clNjcm9sbGluZyA9ICFsYXllci0+cmVuZGVyZXIoKS0+aXNSZW5kZXJWaWV3KCk7Ci0gICAgc2hv
dWxkSGlkZVRhcEhpZ2hsaWdodFJpZ2h0QWZ0ZXJTY3JvbGxpbmcgfD0gISFtX3dlYlBhZ2UtPm1f
aW5SZWdpb25TY3JvbGxlci0+bm9kZSgpOworICAgIHNob3VsZEhpZGVUYXBIaWdobGlnaHRSaWdo
dEFmdGVyU2Nyb2xsaW5nIHw9ICEhbV93ZWJQYWdlLT5tX2luUmVnaW9uU2Nyb2xsZXItPmQtPm5v
ZGUoKTsKIAogICAgIEludFBvaW50IGZyYW1lUG9zKG1fd2ViUGFnZS0+ZnJhbWVPZmZzZXQoZWxl
bWVudEZyYW1lKSk7CiAKLS0gCjEuNy41LjQKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>157248</attachid>
            <date>2012-08-08 10:32:52 -0700</date>
            <delta_ts>2012-08-08 10:43:31 -0700</delta_ts>
            <desc>patch - fixed rob&apos;s suggestions</desc>
            <filename>0001-BlackBerry-Tie-up-the-scrolling-machinery-to-the-gra.patch</filename>
            <type>text/plain</type>
            <size>51264</size>
            <attacher name="Antonio Gomes">tonikitoo</attacher>
            
              <data encoding="base64">RnJvbSBiZWNhZTMxYmJkMDNlMTcwOTYwMTMzZDg4OTI5YTNiY2JmZGU5NGNjIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbnRvbmlvIEdvbWVzIDxhZ29tZXNAcmltLmNvbT4KRGF0ZTog
V2VkLCA4IEF1ZyAyMDEyIDEyOjIzOjA0IC0wNDAwClN1YmplY3Q6IFtQQVRDSF0gW0JsYWNrQmVy
cnldIFRpZSB1cCB0aGUgc2Nyb2xsaW5nIG1hY2hpbmVyeSB0byB0aGUgZ3JhcGhpY3MKIHRyZWUg
d2hlbiBhcHBsaWNhYmxlIGZvciBpbi1yZWdpb24gc2Nyb2xsCiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTM0ODIgUFIgIzE4NzY3MgogTWFrZSBJblJlZ2lvblNjcm9s
bGVyIGEgc2ltcGxlIHB1YmxpYyB3ZWJraXQvIEFQSSBQUgogIzE4ODY3NwoKUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuClBhdGNoIGJ5IEFudG9uaW8gR29tZXMgPGFnb21lc0ByaW0uY29tPgoK
SW4gb3JkZXIgdG8gcHJlcGFyZSBJblJlZ2lvblNjcm9sbGVyIHRvIGJlIGEgcHVibGljIEFQSQpp
biB3ZWJraXQvLCB0aGUgcGF0Y2g6CgoxKSBSZW5hbWVkIHRoZSBjdXJyZW50IEluUmVnaW9uU2Ny
b2xsZXIgY2xhc3MgdG8gSW5SZWdpb25TY3JvbGxlclByaXZhdGU7CjIpIE1vdmVkIEluUmVnaW9u
U2Nyb2xsZXIuY3BwfGggZnJvbSBXZWJLaXRTdXBwb3J0LyB0byBBcGkvOwozKSBSZW5hbWVkIElu
UmVnaW9uU2Nyb2xsZXIuaCB0byBJblJlZ2lvblNjcm9sbGVyX3AuaDsKNCkgQWRkZWQgYSBuZXcg
cHVibGljIGNsYXNzIGltcGxlbWVudGF0aW9uIHRvIEluUmVnaW9uU2Nyb2xsZXIuaDsKNSkgQWRh
cHRlZCBXZWJQYWdlIGFuZCBUb3VjaEV2ZW50SGFuZGxlciBjbGFzc2VzIHRvIHVzZSBJblJlZ2lv
blNjcm9sbGVyOjpkIGRpcmVjdGx5LgoKVGhlIG1vc3QgaW1wb3J0YW50IEFQSSBoZXJlIGlzICc6
OmNvbXBvc2l0ZWRTZXRTY3JvbGxQb3NpdGlvbicKCkl0IGlzIGEgIFVJL0NvbXBvc2l0aW5nIHRo
cmVhZCBtZXRob2Qgb25seSBhbmQgc2V0cyB0aGUgYXNzb2NpYXRlZCBMYXllckNvbXBvc2l0aW5n
VGhyZWFkCihjYW1vdWZsYWdlZCBhcyBhIHVuc2lnbmVkKSBmb3IgZWFjaCBjcmVhdGVkIEluUmVn
aW9uU2Nyb2xsYWJsZUFyZWEgdGhhdCBzdXBwb3J0cwpjb21wb3NpdGVkIHNjcm9sbGluZy4KClRo
ZSB3YXkgOjpjb21wb3NpdGVkU2V0U2Nyb2xsUG9zaXRpb24gInNjcm9sbHMiIGEgbGF5ZXIgaXMg
Ynkgc2V0dGluZyB0aGUgYm91bmRzT3JpZ2luCnByb3BlcnR5IHRvIHRoZSBMYXllckNvbXBvc2l0
aW5nVGhyZWFkJ3MgJ292ZXJyaWRlJyBwcm9wZXJ0eSBpbiB0aGUgVUkvQ29tcG9zaXRpbmcgdGhy
ZWFkLgoKKiBQbGF0Zm9ybUJsYWNrQmVycnkuY21ha2U6IEJ1aWxkIHN5c3RlbSBhZGFwdGF0aW9u
LgoKKiBBcGkvSW5SZWdpb25TY3JvbGxlci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0
L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JblJlZ2lvblNjcm9sbGVyLmNwcC4KKFdlYktpdCk6
CihCbGFja0JlcnJ5OjpXZWJLaXQ6OkluUmVnaW9uU2Nyb2xsZXI6OkluUmVnaW9uU2Nyb2xsZXIp
OgooQmxhY2tCZXJyeTo6V2ViS2l0OjpJblJlZ2lvblNjcm9sbGVyOjp+SW5SZWdpb25TY3JvbGxl
cik6CihCbGFja0JlcnJ5OjpXZWJLaXQ6OkluUmVnaW9uU2Nyb2xsZXI6OmNvbXBvc2l0ZWRTZXRT
Y3JvbGxQb3NpdGlvbik6CihCbGFja0JlcnJ5OjpXZWJLaXQ6OkluUmVnaW9uU2Nyb2xsZXJQcml2
YXRlOjpJblJlZ2lvblNjcm9sbGVyUHJpdmF0ZSk6CihCbGFja0JlcnJ5OjpXZWJLaXQ6OkluUmVn
aW9uU2Nyb2xsZXJQcml2YXRlOjpzZXROb2RlKToKKEJsYWNrQmVycnk6OldlYktpdDo6SW5SZWdp
b25TY3JvbGxlclByaXZhdGU6Om5vZGUpOgooQmxhY2tCZXJyeTo6V2ViS2l0OjpJblJlZ2lvblNj
cm9sbGVyUHJpdmF0ZTo6cmVzZXQpOgooQmxhY2tCZXJyeTo6V2ViS2l0OjpJblJlZ2lvblNjcm9s
bGVyUHJpdmF0ZTo6aGFzTm9kZSk6CihCbGFja0JlcnJ5OjpXZWJLaXQ6OkluUmVnaW9uU2Nyb2xs
ZXJQcml2YXRlOjpjYW5TY3JvbGwpOgooQmxhY2tCZXJyeTo6V2ViS2l0OjpJblJlZ2lvblNjcm9s
bGVyUHJpdmF0ZTo6Y29tcG9zaXRlZFNldFNjcm9sbFBvc2l0aW9uKToKKEJsYWNrQmVycnk6Oldl
YktpdDo6SW5SZWdpb25TY3JvbGxlclByaXZhdGU6OnNjcm9sbEJ5KToKKEJsYWNrQmVycnk6Oldl
YktpdDo6SW5SZWdpb25TY3JvbGxlclByaXZhdGU6OmluUmVnaW9uU2Nyb2xsYWJsZUFyZWFzRm9y
UG9pbnQpOgooQmxhY2tCZXJyeTo6V2ViS2l0OjpJblJlZ2lvblNjcm9sbGVyUHJpdmF0ZTo6c2Ny
b2xsTm9kZVJlY3Vyc2l2ZWx5KToKKEJsYWNrQmVycnk6OldlYktpdDo6SW5SZWdpb25TY3JvbGxl
clByaXZhdGU6OnNjcm9sbFJlbmRlcmVyKToKKEJsYWNrQmVycnk6OldlYktpdDo6SW5SZWdpb25T
Y3JvbGxlclByaXZhdGU6OmFkanVzdFNjcm9sbERlbHRhKToKKEJsYWNrQmVycnk6OldlYktpdDo6
Y2FuU2Nyb2xsSW5uZXJGcmFtZSk6CihCbGFja0JlcnJ5OjpXZWJLaXQ6OmNhblNjcm9sbFJlbmRl
ckJveCk6CihCbGFja0JlcnJ5OjpXZWJLaXQ6OnBhcmVudExheWVyKToKKEJsYWNrQmVycnk6Oldl
YktpdDo6ZW5jbG9zaW5nTGF5ZXJOb2RlKToKKEJsYWNrQmVycnk6OldlYktpdDo6aXNOb25SZW5k
ZXJWaWV3Rml4ZWRQb3NpdGlvbmVkQ29udGFpbmVyKToKKEJsYWNrQmVycnk6OldlYktpdDo6cHVz
aEJhY2tJblJlZ2lvblNjcm9sbGFibGUpOgoqIEFwaS9JblJlZ2lvblNjcm9sbGVyLmg6IENvcGll
ZCBmcm9tIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0luUmVnaW9uU2Ny
b2xsZXIuaC4KKFdlYktpdCk6CihJblJlZ2lvblNjcm9sbGVyKToKKiBBcGkvSW5SZWdpb25TY3Jv
bGxlcl9wLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3Vw
cG9ydC9JblJlZ2lvblNjcm9sbGVyLmguCihXZWJDb3JlKToKKFdlYktpdCk6CihJblJlZ2lvblNj
cm9sbGVyUHJpdmF0ZSk6CiogQXBpL1dlYlBhZ2UuY3BwOgooQmxhY2tCZXJyeTo6V2ViS2l0OjpX
ZWJQYWdlUHJpdmF0ZTo6c2Nyb2xsQnkpOgooQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJQYWdlUHJp
dmF0ZTo6bm90aWZ5SW5SZWdpb25TY3JvbGxTdGF0dXNDaGFuZ2VkKToKKEJsYWNrQmVycnk6Oldl
YktpdDo6V2ViUGFnZVByaXZhdGU6OmNsZWFyRG9jdW1lbnREYXRhKToKKEJsYWNrQmVycnk6Oldl
YktpdDo6V2ViUGFnZVByaXZhdGU6OnNldFNjcm9sbE9yaWdpblBvaW50KToKKEJsYWNrQmVycnk6
OldlYktpdDo6V2ViUGFnZTo6aW5SZWdpb25TY3JvbGxlcik6CihXZWJLaXQpOgoqIEFwaS9XZWJQ
YWdlLmg6CihXZWJLaXQpOgoqIFdlYktpdFN1cHBvcnQvSW5SZWdpb25TY3JvbGxhYmxlQXJlYS5j
cHA6CihCbGFja0JlcnJ5OjpXZWJLaXQ6OkluUmVnaW9uU2Nyb2xsYWJsZUFyZWE6OkluUmVnaW9u
U2Nyb2xsYWJsZUFyZWEpOgoqIFdlYktpdFN1cHBvcnQvVG91Y2hFdmVudEhhbmRsZXIuY3BwOgoo
QmxhY2tCZXJyeTo6V2ViS2l0OjpUb3VjaEV2ZW50SGFuZGxlcjo6ZHJhd1RhcEhpZ2hsaWdodCk6
Ci0tLQogU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fCAgICA5ICsKIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtlICAgICAgICAg
ICAgIHwgICAgMiArLQogU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9JblJlZ2lvblNjcm9s
bGVyLmNwcCAgfCAgMzkzICsrKysrKysrKysrKysrKysrKysrCiBTb3VyY2UvV2ViS2l0L2JsYWNr
YmVycnkvQXBpL0luUmVnaW9uU2Nyb2xsZXIuaCAgICB8ICAgNDggKysrCiBTb3VyY2UvV2ViS2l0
L2JsYWNrYmVycnkvQXBpL0luUmVnaW9uU2Nyb2xsZXJfcC5oICB8ICAgNzAgKysrKwogU291cmNl
L1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJQYWdlLmNwcCAgICAgICAgICAgfCAgIDIyICstCiBT
b3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2UuaCAgICAgICAgICAgICB8ICAgIDMg
KwogU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgfCAg
IDcyICsrKysKIC4uLi9XZWJLaXRTdXBwb3J0L0luUmVnaW9uU2Nyb2xsYWJsZUFyZWEuY3BwICAg
ICAgIHwgICAxMyArLQogLi4uL2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JblJlZ2lvblNjcm9s
bGVyLmNwcCAgfCAgMzU2IC0tLS0tLS0tLS0tLS0tLS0tLQogLi4uL2JsYWNrYmVycnkvV2ViS2l0
U3VwcG9ydC9JblJlZ2lvblNjcm9sbGVyLmggICAgfCAgIDY3IC0tLS0KIC4uLi9ibGFja2JlcnJ5
L1dlYktpdFN1cHBvcnQvVG91Y2hFdmVudEhhbmRsZXIuY3BwIHwgICAgMyArLQogMTIgZmlsZXMg
Y2hhbmdlZCwgNjI0IGluc2VydGlvbnMoKyksIDQzNCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL0luUmVnaW9uU2Nyb2xsZXIuY3Bw
CiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9JblJlZ2lv
blNjcm9sbGVyLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkv
QXBpL0luUmVnaW9uU2Nyb2xsZXJfcC5oCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktp
dC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5SZWdpb25TY3JvbGxlci5jcHAKIGRlbGV0ZSBt
b2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JblJlZ2lv
blNjcm9sbGVyLmgKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGRmOGI4OTIuLjUzN2FjMzQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTIgQEAKKzIwMTItMDgtMDggIEFudG9uaW8gR29tZXMgIDxhZ29tZXNAcmltLmNvbT4K
KworICAgICAgICBbQmxhY2tCZXJyeV0gVGllIHVwIHRoZSBzY3JvbGxpbmcgbWFjaGluZXJ5IHRv
IHRoZSBncmFwaGljcyB0cmVlIHdoZW4gYXBwbGljYWJsZSBmb3IgaW4tcmVnaW9uIHNjcm9sbAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTM0ODIKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFBsYXRmb3Jt
QmxhY2tCZXJyeS5jbWFrZTogQnVpbGQgc3lzdGVtIGFkYXB0YXRpb24uCisKIDIwMTItMDgtMDcg
IFJ5dWFuIENob2kgIDxyeXVhbi5jaG9pQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFtFRkxdIFJl
bW92ZSBQbGF0Zm9ybVRvdWNoRXZlbnRFZmwgYW5kIFBsYXRmb3JtVG91Y2hQb2ludEVmbApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybUJsYWNrQmVycnkuY21ha2UgYi9Tb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtQmxhY2tCZXJyeS5jbWFrZQppbmRleCBlZTExZWQ2Li5hNzgxNTI5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtQmxhY2tCZXJyeS5jbWFrZQorKysgYi9T
b3VyY2UvV2ViS2l0L1BsYXRmb3JtQmxhY2tCZXJyeS5jbWFrZQpAQCAtNTcsNiArNTcsNyBAQCBB
RERfREVGSU5JVElPTlMoLURVU0VSX1BST0NFU1NFUykKIExJU1QoQVBQRU5EIFdlYktpdF9TT1VS
Q0VTCiAgICAgYmxhY2tiZXJyeS9BcGkvQmFja2luZ1N0b3JlLmNwcAogICAgIGJsYWNrYmVycnkv
QXBpL0JsYWNrQmVycnlHbG9iYWwuY3BwCisgICAgYmxhY2tiZXJyeS9BcGkvSW5SZWdpb25TY3Jv
bGxlci5jcHAKICAgICBibGFja2JlcnJ5L0FwaS9XZWJBbmltYXRpb24uY3BwCiAgICAgYmxhY2ti
ZXJyeS9BcGkvV2ViS2l0TUlNRVR5cGVDb252ZXJ0ZXIuY3BwCiAgICAgYmxhY2tiZXJyeS9BcGkv
V2ViS2l0VGV4dENvZGVjLmNwcApAQCAtMTAwLDcgKzEwMSw2IEBAIExJU1QoQVBQRU5EIFdlYktp
dF9TT1VSQ0VTCiAgICAgYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0luUGFnZVNlYXJjaE1hbmFn
ZXIuY3BwCiAgICAgYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0lucHV0SGFuZGxlci5jcHAKICAg
ICBibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5SZWdpb25TY3JvbGxhYmxlQXJlYS5jcHAKLSAg
ICBibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5SZWdpb25TY3JvbGxlci5jcHAKICAgICBibGFj
a2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5zcGVjdG9yT3ZlcmxheS5jcHAKICAgICBibGFja2JlcnJ5
L1dlYktpdFN1cHBvcnQvUmVuZGVyUXVldWUuY3BwCiAgICAgYmxhY2tiZXJyeS9XZWJLaXRTdXBw
b3J0L1NlbGVjdGlvbkhhbmRsZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNr
YmVycnkvQXBpL0luUmVnaW9uU2Nyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5
L0FwaS9JblJlZ2lvblNjcm9sbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5lYTU5NDBjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5
L0FwaS9JblJlZ2lvblNjcm9sbGVyLmNwcApAQCAtMCwwICsxLDM5MyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSwgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl
CisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBC
b3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiSW5SZWdpb25TY3JvbGxlci5oIgorCisjaW5jbHVkZSAiQmFja2luZ1N0b3JlQ2xp
ZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJIVE1MRnJhbWVPd25lckVsZW1l
bnQuaCIKKyNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCisjaW5jbHVkZSAiSW5SZWdpb25TY3Jv
bGxhYmxlQXJlYS5oIgorI2luY2x1ZGUgIkluUmVnaW9uU2Nyb2xsZXJfcC5oIgorI2luY2x1ZGUg
IkxheWVyQ29tcG9zaXRpbmdUaHJlYWQuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAi
UmVuZGVyQm94LmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJP
YmplY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCisjaW5jbHVkZSAiV2ViUGFnZV9wLmgi
CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgQmxhY2tCZXJyeSB7Citu
YW1lc3BhY2UgV2ViS2l0IHsKKworc3RhdGljIGJvb2wgY2FuU2Nyb2xsSW5uZXJGcmFtZShGcmFt
ZSopOworc3RhdGljIGJvb2wgY2FuU2Nyb2xsUmVuZGVyQm94KFJlbmRlckJveCopOworc3RhdGlj
IFJlbmRlckxheWVyKiBwYXJlbnRMYXllcihSZW5kZXJMYXllciopOworc3RhdGljIE5vZGUqIGVu
Y2xvc2luZ0xheWVyTm9kZShSZW5kZXJMYXllciopOworc3RhdGljIGJvb2wgaXNOb25SZW5kZXJW
aWV3Rml4ZWRQb3NpdGlvbmVkQ29udGFpbmVyKFJlbmRlckxheWVyKik7CitzdGF0aWMgdm9pZCBw
dXNoQmFja0luUmVnaW9uU2Nyb2xsYWJsZShzdGQ6OnZlY3RvcjxQbGF0Zm9ybTo6U2Nyb2xsVmll
d0Jhc2UqPiYsIEluUmVnaW9uU2Nyb2xsYWJsZUFyZWEqLCBJblJlZ2lvblNjcm9sbGVyUHJpdmF0
ZSopOworCitJblJlZ2lvblNjcm9sbGVyOjpJblJlZ2lvblNjcm9sbGVyKFdlYlBhZ2VQcml2YXRl
KiB3ZWJQYWdlUHJpdmF0ZSkKKyAgICA6IGQobmV3IEluUmVnaW9uU2Nyb2xsZXJQcml2YXRlKHdl
YlBhZ2VQcml2YXRlKSkKK3sKKyAgICBBU1NFUlQod2ViUGFnZVByaXZhdGUpOworfQorCitJblJl
Z2lvblNjcm9sbGVyOjp+SW5SZWdpb25TY3JvbGxlcigpCit7CisgICAgZGVsZXRlIGQ7Cit9CisK
K2Jvb2wgSW5SZWdpb25TY3JvbGxlcjo6Y29tcG9zaXRlZFNldFNjcm9sbFBvc2l0aW9uKHVuc2ln
bmVkIGNhbW91ZmxhZ2VkTGF5ZXIsIGNvbnN0IFBsYXRmb3JtOjpJbnRQb2ludCYgc2Nyb2xsUG9z
aXRpb24pCit7CisgICAgQVNTRVJUKFBsYXRmb3JtOjp1c2VySW50ZXJmYWNlVGhyZWFkTWVzc2Fn
ZUNsaWVudCgpLT5pc0N1cnJlbnRUaHJlYWQoKSk7CisgICAgcmV0dXJuIGQtPmNvbXBvc2l0ZWRT
ZXRTY3JvbGxQb3NpdGlvbihjYW1vdWZsYWdlZExheWVyLCBkLT5tX3dlYlBhZ2UtPm1hcEZyb21U
cmFuc2Zvcm1lZChzY3JvbGxQb3NpdGlvbikpOworfQorCitJblJlZ2lvblNjcm9sbGVyUHJpdmF0
ZTo6SW5SZWdpb25TY3JvbGxlclByaXZhdGUoV2ViUGFnZVByaXZhdGUqIHdlYlBhZ2VQcml2YXRl
KQorICAgIDogbV93ZWJQYWdlKHdlYlBhZ2VQcml2YXRlKQoreworfQorCit2b2lkIEluUmVnaW9u
U2Nyb2xsZXJQcml2YXRlOjpzZXROb2RlKFdlYkNvcmU6Ok5vZGUqIG5vZGUpCit7CisgICAgbV9p
blJlZ2lvblNjcm9sbFN0YXJ0aW5nTm9kZSA9IG5vZGU7Cit9CisKK1dlYkNvcmU6Ok5vZGUqIElu
UmVnaW9uU2Nyb2xsZXJQcml2YXRlOjpub2RlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pblJl
Z2lvblNjcm9sbFN0YXJ0aW5nTm9kZS5nZXQoKTsKK30KKwordm9pZCBJblJlZ2lvblNjcm9sbGVy
UHJpdmF0ZTo6cmVzZXQoKQoreworICAgIHNldE5vZGUoMCk7Cit9CisKK2Jvb2wgSW5SZWdpb25T
Y3JvbGxlclByaXZhdGU6Omhhc05vZGUoKSBjb25zdAoreworICAgIHJldHVybiAhIW1faW5SZWdp
b25TY3JvbGxTdGFydGluZ05vZGU7Cit9CisKK2Jvb2wgSW5SZWdpb25TY3JvbGxlclByaXZhdGU6
OmNhblNjcm9sbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc05vZGUoKTsKK30KKworYm9vbCBJ
blJlZ2lvblNjcm9sbGVyUHJpdmF0ZTo6Y29tcG9zaXRlZFNldFNjcm9sbFBvc2l0aW9uKHVuc2ln
bmVkIGNhbW91ZmxhZ2VkTGF5ZXIsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBzY3JvbGxQb3Np
dGlvbikKK3sKKyAgICBMYXllckNvbXBvc2l0aW5nVGhyZWFkKiBzY3JvbGxMYXllciA9IHJlaW50
ZXJwcmV0X2Nhc3Q8TGF5ZXJDb21wb3NpdGluZ1RocmVhZCo+KGNhbW91ZmxhZ2VkTGF5ZXIpOwor
ICAgIHNjcm9sbExheWVyLT5vdmVycmlkZSgpLT5zZXRCb3VuZHNPcmlnaW4oV2ViQ29yZTo6Rmxv
YXRQb2ludChzY3JvbGxQb3NpdGlvbi54KCksIHNjcm9sbFBvc2l0aW9uLnkoKSkpOworCisgICAg
bV93ZWJQYWdlLT5zY2hlZHVsZUNvbXBvc2l0aW5nUnVuKCk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgSW5SZWdpb25TY3JvbGxlclByaXZhdGU6OnNjcm9sbEJ5KGNvbnN0IFBsYXRmb3Jt
OjpJbnRTaXplJiBkZWx0YSkKK3sKKyAgICBBU1NFUlQoUGxhdGZvcm06OndlYmtpdFRocmVhZE1l
c3NhZ2VDbGllbnQoKS0+aXNDdXJyZW50VGhyZWFkKCkpOworCisgICAgaWYgKCFjYW5TY3JvbGwo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHNjcm9sbE5vZGVSZWN1cnNp
dmVseShub2RlKCksIGRlbHRhKTsKK30KKworc3RkOjp2ZWN0b3I8UGxhdGZvcm06OlNjcm9sbFZp
ZXdCYXNlKj4gSW5SZWdpb25TY3JvbGxlclByaXZhdGU6OmluUmVnaW9uU2Nyb2xsYWJsZUFyZWFz
Rm9yUG9pbnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvaW50KQoreworICAgIHN0ZDo6dmVj
dG9yPFBsYXRmb3JtOjpTY3JvbGxWaWV3QmFzZSo+IHZhbGlkUmV0dXJuOworICAgIHN0ZDo6dmVj
dG9yPFBsYXRmb3JtOjpTY3JvbGxWaWV3QmFzZSo+IGVtcHR5UmV0dXJuOworCisgICAgSGl0VGVz
dFJlc3VsdCByZXN1bHQgPSBtX3dlYlBhZ2UtPm1fbWFpbkZyYW1lLT5ldmVudEhhbmRsZXIoKS0+
aGl0VGVzdFJlc3VsdEF0UG9pbnQobV93ZWJQYWdlLT5tYXBGcm9tVmlld3BvcnRUb0NvbnRlbnRz
KHBvaW50KSwgZmFsc2UgLyphbGxvd1NoYWRvd0NvbnRlbnQqLyk7CisgICAgTm9kZSogbm9kZSA9
IHJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKTsKKyAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPnJl
bmRlcmVyKCkpCisgICAgICAgIHJldHVybiBlbXB0eVJldHVybjsKKworICAgIFJlbmRlckxheWVy
KiBsYXllciA9IG5vZGUtPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCk7CisgICAgZG8gewor
ICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbGF5ZXItPnJlbmRlcmVyKCk7CisKKyAg
ICAgICAgaWYgKHJlbmRlcmVyLT5pc1JlbmRlclZpZXcoKSkgeworICAgICAgICAgICAgaWYgKFJl
bmRlclZpZXcqIHJlbmRlclZpZXcgPSB0b1JlbmRlclZpZXcocmVuZGVyZXIpKSB7CisgICAgICAg
ICAgICAgICAgRnJhbWVWaWV3KiB2aWV3ID0gcmVuZGVyVmlldy0+ZnJhbWVWaWV3KCk7CisgICAg
ICAgICAgICAgICAgaWYgKCF2aWV3KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW1wdHlS
ZXR1cm47CisKKyAgICAgICAgICAgICAgICBpZiAoY2FuU2Nyb2xsSW5uZXJGcmFtZSh2aWV3LT5m
cmFtZSgpKSkgeworICAgICAgICAgICAgICAgICAgICBwdXNoQmFja0luUmVnaW9uU2Nyb2xsYWJs
ZSh2YWxpZFJldHVybiwgbmV3IEluUmVnaW9uU2Nyb2xsYWJsZUFyZWEobV93ZWJQYWdlLCBsYXll
ciksIHRoaXMpOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoY2FuU2Nyb2xsUmVuZGVyQm94
KGxheWVyLT5yZW5kZXJCb3goKSkpIHsKKyAgICAgICAgICAgIHB1c2hCYWNrSW5SZWdpb25TY3Jv
bGxhYmxlKHZhbGlkUmV0dXJuLCBuZXcgSW5SZWdpb25TY3JvbGxhYmxlQXJlYShtX3dlYlBhZ2Us
IGxheWVyKSwgdGhpcyk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vIElmIHdlIHJ1biBpbnRvIGEgZml4IHBvc2l0aW9uZWQgbGF5ZXIsIHNldCB0aGUgbGFz
dCBzY3JvbGxhYmxlIGluLXJlZ2lvbiBvYmplY3QKKyAgICAgICAgLy8gYXMgbm90IGFibGUgdG8g
cHJvcGFnYXRlIHNjcm9sbCB0byBpdHMgcGFyZW50IHNjcm9sbGFibGUuCisgICAgICAgIGlmIChp
c05vblJlbmRlclZpZXdGaXhlZFBvc2l0aW9uZWRDb250YWluZXIobGF5ZXIpICYmIHZhbGlkUmV0
dXJuLnNpemUoKSkgeworICAgICAgICAgICAgUGxhdGZvcm06OlNjcm9sbFZpZXdCYXNlKiBlbmQg
PSB2YWxpZFJldHVybi5iYWNrKCk7CisgICAgICAgICAgICBlbmQtPnNldENhblByb3BhZ2F0ZVNj
cm9sbGluZ1RvRW5jbG9zaW5nU2Nyb2xsYWJsZShmYWxzZSk7CisgICAgICAgIH0KKworICAgIH0g
d2hpbGUgKGxheWVyID0gcGFyZW50TGF5ZXIobGF5ZXIpKTsKKworICAgIGlmICh2YWxpZFJldHVy
bi5lbXB0eSgpKQorICAgICAgICByZXR1cm4gZW1wdHlSZXR1cm47CisKKyAgICAvLyBQb3N0LWNh
bGN1bGF0ZSB0aGUgdmlzaWJsZSB3aW5kb3cgcmVjdHMgaW4gcmV2ZXJzZSBoaXQgdGVzdCBvcmRl
ciBzbworICAgIC8vIHdlIGFjY291bnQgZm9yIGFsbCBhbmQgYW55IGNsaXBwaW5nIHJlY3RzLgor
ICAgIFdlYkNvcmU6OkludFJlY3QgcmVjdXJzaXZlQ2xpcHBpbmdSZWN0KFdlYkNvcmU6OkludFBv
aW50Ojp6ZXJvKCksIG1fd2ViUGFnZS0+dHJhbnNmb3JtZWRWaWV3cG9ydFNpemUoKSk7CisKKyAg
ICBzdGQ6OnZlY3RvcjxQbGF0Zm9ybTo6U2Nyb2xsVmlld0Jhc2UqPjo6cmV2ZXJzZV9pdGVyYXRv
ciByZW5kID0gdmFsaWRSZXR1cm4ucmVuZCgpOworICAgIGZvciAoc3RkOjp2ZWN0b3I8UGxhdGZv
cm06OlNjcm9sbFZpZXdCYXNlKj46OnJldmVyc2VfaXRlcmF0b3Igcml0ID0gdmFsaWRSZXR1cm4u
cmJlZ2luKCk7IHJpdCAhPSByZW5kOyArK3JpdCkgeworCisgICAgICAgIEluUmVnaW9uU2Nyb2xs
YWJsZUFyZWEqIGN1cnIgPSBzdGF0aWNfY2FzdDxJblJlZ2lvblNjcm9sbGFibGVBcmVhKj4oKnJp
dCk7CisgICAgICAgIFJlbmRlckxheWVyKiBsYXllciA9IGN1cnItPmxheWVyKCk7CisKKyAgICAg
ICAgaWYgKGxheWVyICYmIGxheWVyLT5yZW5kZXJlcigpLT5pc1JlbmRlclZpZXcoKSkgeyAvLyAj
ZG9jdW1lbnQgY2FzZQorICAgICAgICAgICAgRnJhbWVWaWV3KiB2aWV3ID0gdG9SZW5kZXJWaWV3
KGxheWVyLT5yZW5kZXJlcigpKS0+ZnJhbWVWaWV3KCk7CisgICAgICAgICAgICBBU1NFUlQodmll
dyk7CisgICAgICAgICAgICBBU1NFUlQoY2FuU2Nyb2xsSW5uZXJGcmFtZSh2aWV3LT5mcmFtZSgp
KSk7CisKKyAgICAgICAgICAgIFdlYkNvcmU6OkludFJlY3QgZnJhbWVXaW5kb3dSZWN0ID0gbV93
ZWJQYWdlLT5tYXBUb1RyYW5zZm9ybWVkKG1fd2ViUGFnZS0+Z2V0UmVjdXJzaXZlVmlzaWJsZVdp
bmRvd1JlY3QodmlldykpOworICAgICAgICAgICAgZnJhbWVXaW5kb3dSZWN0LmludGVyc2VjdChy
ZWN1cnNpdmVDbGlwcGluZ1JlY3QpOworICAgICAgICAgICAgY3Vyci0+c2V0VmlzaWJsZVdpbmRv
d1JlY3QoZnJhbWVXaW5kb3dSZWN0KTsKKyAgICAgICAgICAgIHJlY3Vyc2l2ZUNsaXBwaW5nUmVj
dCA9IGZyYW1lV2luZG93UmVjdDsKKworICAgICAgICB9IGVsc2UgeyAvLyBSZW5kZXJCb3gtYmFz
ZWQgZWxlbWVudHMgY2FzZSAoc2Nyb2xsYWJsZSBib3hlcyAoZGl2J3MsIHAncywgdGV4dGFyZWEn
cywgZXRjKSkuCisKKyAgICAgICAgICAgIFJlbmRlckJveCogYm94ID0gbGF5ZXItPnJlbmRlckJv
eCgpOworICAgICAgICAgICAgQVNTRVJUKGJveCk7CisgICAgICAgICAgICBBU1NFUlQoY2FuU2Ny
b2xsUmVuZGVyQm94KGJveCkpOworCisgICAgICAgICAgICBXZWJDb3JlOjpJbnRSZWN0IHZpc2li
bGVXaW5kb3dSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChib3gtPmFic29sdXRlQ2xpcHBlZE92ZXJm
bG93UmVjdCgpKTsKKyAgICAgICAgICAgIHZpc2libGVXaW5kb3dSZWN0ID0gYm94LT5mcmFtZSgp
LT52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3codmlzaWJsZVdpbmRvd1JlY3QpOworICAgICAgICAg
ICAgdmlzaWJsZVdpbmRvd1JlY3QgPSBtX3dlYlBhZ2UtPm1hcFRvVHJhbnNmb3JtZWQodmlzaWJs
ZVdpbmRvd1JlY3QpOworICAgICAgICAgICAgdmlzaWJsZVdpbmRvd1JlY3QuaW50ZXJzZWN0KHJl
Y3Vyc2l2ZUNsaXBwaW5nUmVjdCk7CisKKyAgICAgICAgICAgIGN1cnItPnNldFZpc2libGVXaW5k
b3dSZWN0KHZpc2libGVXaW5kb3dSZWN0KTsKKyAgICAgICAgICAgIHJlY3Vyc2l2ZUNsaXBwaW5n
UmVjdCA9IHZpc2libGVXaW5kb3dSZWN0OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJu
IHZhbGlkUmV0dXJuOworfQorCitib29sIEluUmVnaW9uU2Nyb2xsZXJQcml2YXRlOjpzY3JvbGxO
b2RlUmVjdXJzaXZlbHkoV2ViQ29yZTo6Tm9kZSogbm9kZSwgY29uc3QgV2ViQ29yZTo6SW50U2l6
ZSYgZGVsdGEpCit7CisgICAgaWYgKGRlbHRhLmlzWmVybygpKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmVuZGVy
T2JqZWN0KiByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlcikK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgRnJhbWVWaWV3KiB2aWV3ID0gcmVuZGVyZXIt
PnZpZXcoKS0+ZnJhbWVWaWV3KCk7CisgICAgaWYgKCF2aWV3KQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAvLyBUcnkgc2Nyb2xsaW5nIHRoZSByZW5kZXJlci4KKyAgICBpZiAoc2Nyb2xs
UmVuZGVyZXIocmVuZGVyZXIsIGRlbHRhKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAv
LyBXZSd2ZSBoaXQgdGhlIHBhZ2UsIGRvbid0IHNjcm9sbCBpdCBhbmQgcmV0dXJuIGZhbHNlLgor
ICAgIGlmICh2aWV3ID09IG1fd2ViUGFnZS0+bV9tYWluRnJhbWUtPnZpZXcoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgLy8gVHJ5IHNjcm9sbGluZyB0aGUgRnJhbWVWaWV3LgorICAg
IGlmIChjYW5TY3JvbGxJbm5lckZyYW1lKHZpZXctPmZyYW1lKCkpKSB7CisgICAgICAgIEludFNp
emUgdmlld0RlbHRhID0gZGVsdGE7CisgICAgICAgIEludFBvaW50IG5ld1ZpZXdPZmZzZXQgPSB2
aWV3LT5zY3JvbGxQb3NpdGlvbigpOworICAgICAgICBJbnRQb2ludCBtYXhWaWV3T2Zmc2V0ID0g
dmlldy0+bWF4aW11bVNjcm9sbFBvc2l0aW9uKCk7CisgICAgICAgIGFkanVzdFNjcm9sbERlbHRh
KG1heFZpZXdPZmZzZXQsIG5ld1ZpZXdPZmZzZXQsIHZpZXdEZWx0YSk7CisKKyAgICAgICAgaWYg
KCF2aWV3RGVsdGEuaXNaZXJvKCkpIHsKKyAgICAgICAgICAgIHZpZXctPnNldENhbkJsaXRPblNj
cm9sbChmYWxzZSk7CisKKyAgICAgICAgICAgIEJhY2tpbmdTdG9yZUNsaWVudCogYmFja2luZ1N0
b3JlQ2xpZW50ID0gbV93ZWJQYWdlLT5iYWNraW5nU3RvcmVDbGllbnRGb3JGcmFtZSh2aWV3LT5m
cmFtZSgpKTsKKyAgICAgICAgICAgIGlmIChiYWNraW5nU3RvcmVDbGllbnQpIHsKKyAgICAgICAg
ICAgICAgICBiYWNraW5nU3RvcmVDbGllbnQtPnNldElzQ2xpZW50R2VuZXJhdGVkU2Nyb2xsKHRy
dWUpOworICAgICAgICAgICAgICAgIGJhY2tpbmdTdG9yZUNsaWVudC0+c2V0SXNTY3JvbGxOb3Rp
ZmljYXRpb25TdXBwcmVzc2VkKHRydWUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBz
ZXROb2RlKHZpZXctPmZyYW1lKCktPmRvY3VtZW50KCkpOworCisgICAgICAgICAgICB2aWV3LT5z
Y3JvbGxCeSh2aWV3RGVsdGEpOworCisgICAgICAgICAgICBpZiAoYmFja2luZ1N0b3JlQ2xpZW50
KSB7CisgICAgICAgICAgICAgICAgYmFja2luZ1N0b3JlQ2xpZW50LT5zZXRJc0NsaWVudEdlbmVy
YXRlZFNjcm9sbChmYWxzZSk7CisgICAgICAgICAgICAgICAgYmFja2luZ1N0b3JlQ2xpZW50LT5z
ZXRJc1Njcm9sbE5vdGlmaWNhdGlvblN1cHByZXNzZWQoZmFsc2UpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFRy
eSBzY3JvbGxpbmcgdGhlIG5vZGUgb2YgdGhlIGVuY2xvc2luZyBmcmFtZS4KKyAgICBGcmFtZSog
ZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpOworICAgIGlmIChmcmFtZSkgeworICAg
ICAgICBOb2RlKiBvd25lck5vZGUgPSBmcmFtZS0+b3duZXJFbGVtZW50KCk7CisgICAgICAgIGlm
IChzY3JvbGxOb2RlUmVjdXJzaXZlbHkob3duZXJOb2RlLCBkZWx0YSkpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgSW5SZWdp
b25TY3JvbGxlclByaXZhdGU6OnNjcm9sbFJlbmRlcmVyKFdlYkNvcmU6OlJlbmRlck9iamVjdCog
cmVuZGVyZXIsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGRlbHRhKQoreworICAgIFJlbmRlckxh
eWVyKiBsYXllciA9IHJlbmRlcmVyLT5lbmNsb3NpbmdMYXllcigpOworICAgIGlmICghbGF5ZXIp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFRyeSB0byBzY3JvbGwgbGF5ZXIuCisg
ICAgYm9vbCByZXN0cmljdGVkQnlMaW5lQ2xhbXAgPSBmYWxzZTsKKyAgICBpZiAocmVuZGVyZXIt
PnBhcmVudCgpKQorICAgICAgICByZXN0cmljdGVkQnlMaW5lQ2xhbXAgPSAhcmVuZGVyZXItPnBh
cmVudCgpLT5zdHlsZSgpLT5saW5lQ2xhbXAoKS5pc05vbmUoKTsKKworICAgIGlmIChyZW5kZXJl
ci0+aGFzT3ZlcmZsb3dDbGlwKCkgJiYgIXJlc3RyaWN0ZWRCeUxpbmVDbGFtcCkgeworICAgICAg
ICBJbnRTaXplIGxheWVyRGVsdGEgPSBkZWx0YTsKKyAgICAgICAgSW50UG9pbnQgbWF4T2Zmc2V0
KGxheWVyLT5zY3JvbGxXaWR0aCgpIC0gbGF5ZXItPnJlbmRlckJveCgpLT5jbGllbnRXaWR0aCgp
LCBsYXllci0+c2Nyb2xsSGVpZ2h0KCkgLSBsYXllci0+cmVuZGVyQm94KCktPmNsaWVudEhlaWdo
dCgpKTsKKyAgICAgICAgSW50UG9pbnQgY3VycmVudE9mZnNldChsYXllci0+c2Nyb2xsWE9mZnNl
dCgpLCBsYXllci0+c2Nyb2xsWU9mZnNldCgpKTsKKyAgICAgICAgYWRqdXN0U2Nyb2xsRGVsdGEo
bWF4T2Zmc2V0LCBjdXJyZW50T2Zmc2V0LCBsYXllckRlbHRhKTsKKyAgICAgICAgaWYgKCFsYXll
ckRlbHRhLmlzWmVybygpKSB7CisgICAgICAgICAgICBzZXROb2RlKGVuY2xvc2luZ0xheWVyTm9k
ZShsYXllcikpOworICAgICAgICAgICAgSW50UG9pbnQgbmV3T2Zmc2V0ID0gY3VycmVudE9mZnNl
dCArIGxheWVyRGVsdGE7CisgICAgICAgICAgICBsYXllci0+c2Nyb2xsVG9PZmZzZXQobmV3T2Zm
c2V0LngoKSwgbmV3T2Zmc2V0LnkoKSk7CisgICAgICAgICAgICByZW5kZXJlci0+cmVwYWludCh0
cnVlKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAg
d2hpbGUgKGxheWVyID0gbGF5ZXItPnBhcmVudCgpKSB7CisgICAgICAgIGlmIChjYW5TY3JvbGxS
ZW5kZXJCb3gobGF5ZXItPnJlbmRlckJveCgpKSkKKyAgICAgICAgICAgIHJldHVybiBzY3JvbGxS
ZW5kZXJlcihsYXllci0+cmVuZGVyQm94KCksIGRlbHRhKTsKKyAgICB9CisKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK3ZvaWQgSW5SZWdpb25TY3JvbGxlclByaXZhdGU6OmFkanVzdFNjcm9sbERl
bHRhKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBtYXhPZmZzZXQsIGNvbnN0IFdlYkNvcmU6Oklu
dFBvaW50JiBjdXJyZW50T2Zmc2V0LCBXZWJDb3JlOjpJbnRTaXplJiBkZWx0YSkgY29uc3QKK3sK
KyAgICBpZiAoY3VycmVudE9mZnNldC54KCkgKyBkZWx0YS53aWR0aCgpID4gbWF4T2Zmc2V0Lngo
KSkKKyAgICAgICAgZGVsdGEuc2V0V2lkdGgoc3RkOjptaW4obWF4T2Zmc2V0LngoKSAtIGN1cnJl
bnRPZmZzZXQueCgpLCBkZWx0YS53aWR0aCgpKSk7CisKKyAgICBpZiAoY3VycmVudE9mZnNldC54
KCkgKyBkZWx0YS53aWR0aCgpIDwgMCkKKyAgICAgICAgZGVsdGEuc2V0V2lkdGgoc3RkOjptYXgo
LWN1cnJlbnRPZmZzZXQueCgpLCBkZWx0YS53aWR0aCgpKSk7CisKKyAgICBpZiAoY3VycmVudE9m
ZnNldC55KCkgKyBkZWx0YS5oZWlnaHQoKSA+IG1heE9mZnNldC55KCkpCisgICAgICAgIGRlbHRh
LnNldEhlaWdodChzdGQ6Om1pbihtYXhPZmZzZXQueSgpIC0gY3VycmVudE9mZnNldC55KCksIGRl
bHRhLmhlaWdodCgpKSk7CisKKyAgICBpZiAoY3VycmVudE9mZnNldC55KCkgKyBkZWx0YS5oZWln
aHQoKSA8IDApCisgICAgICAgIGRlbHRhLnNldEhlaWdodChzdGQ6Om1heCgtY3VycmVudE9mZnNl
dC55KCksIGRlbHRhLmhlaWdodCgpKSk7Cit9CisKK3N0YXRpYyBib29sIGNhblNjcm9sbElubmVy
RnJhbWUoRnJhbWUqIGZyYW1lKQoreworICAgIGlmICghZnJhbWUgfHwgIWZyYW1lLT52aWV3KCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIE5vdCBoYXZpbmcgYW4gb3duZXIgZWxl
bWVudCBtZWFucyB0aGF0IHdlIGFyZSBvbiB0aGUgbWFpbmZyYW1lLgorICAgIGlmICghZnJhbWUt
Pm93bmVyRWxlbWVudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBBU1NFUlQoZnJh
bWUgIT0gZnJhbWUtPnBhZ2UoKS0+bWFpbkZyYW1lKCkpOworCisgICAgSW50U2l6ZSB2aXNpYmxl
U2l6ZSA9IGZyYW1lLT52aWV3KCktPnZpc2libGVDb250ZW50UmVjdCgpLnNpemUoKTsKKyAgICBJ
bnRTaXplIGNvbnRlbnRzU2l6ZSA9IGZyYW1lLT52aWV3KCktPmNvbnRlbnRzU2l6ZSgpOworCisg
ICAgYm9vbCBjYW5CZVNjcm9sbGVkID0gY29udGVudHNTaXplLmhlaWdodCgpID4gdmlzaWJsZVNp
emUuaGVpZ2h0KCkgfHwgY29udGVudHNTaXplLndpZHRoKCkgPiB2aXNpYmxlU2l6ZS53aWR0aCgp
OworCisgICAgLy8gTGV0cyBhbHNvIGNvbnNpZGVyIHRoZSAnb3ZlcmZsb3cte3gseX0gcHJvcGVy
dHkgc2V0IGRpcmVjdGx5IHRvIHRoZSB7aX1mcmFtZSB0YWcuCisgICAgcmV0dXJuIGNhbkJlU2Ny
b2xsZWQgJiYgKGZyYW1lLT5vd25lckVsZW1lbnQoKS0+c2Nyb2xsaW5nTW9kZSgpICE9IFNjcm9s
bGJhckFsd2F5c09mZik7Cit9CisKKy8vIFRoZSBSZW5kZXJCb3g6OmNhbmJlU2Nyb2xsZWRBbmRI
YXNTY3JvbGxhYmxlQXJlYSBtZXRob2QgcmV0dXJucyB0cnVlIGZvciB0aGUKKy8vIGZvbGxvd2lu
ZyBzY2VuYXJpbywgZm9yIGV4YW1wbGU6CisvLyAoMSkgYSBkaXYgdGhhdCBoYXMgYSB2ZXJ0aWNh
bCBvdmVyZmxvdyBidXQgbm8gaG9yaXpvbnRhbCBvdmVyZmxvdworLy8gICAgIHdpdGggb3ZlcmZs
b3cteTogaGlkZGVuIGFuZCBvdmVyZmxvdy14OiBhdXRvIHNldC4KKy8vIFRoZSB2ZXJzaW9uIGJl
bG93IGZpeGVzIGl0LgorLy8gRklYTUU6IEZpeCBSZW5kZXJCb3g6OmNhbkJlU2Nyb2xsZWRBbmRI
YXNTY3JvbGxhYmxlQXJlYSBtZXRob2QgaW5zdGVhZC4KK3N0YXRpYyBib29sIGNhblNjcm9sbFJl
bmRlckJveChSZW5kZXJCb3gqIGJveCkKK3sKKyAgICBpZiAoIWJveCB8fCAhYm94LT5oYXNPdmVy
Zmxvd0NsaXAoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGJveC0+c2Nyb2xs
c092ZXJmbG93WCgpICYmIChib3gtPnNjcm9sbFdpZHRoKCkgIT0gYm94LT5jbGllbnRXaWR0aCgp
KQorICAgICAgICB8fCBib3gtPnNjcm9sbHNPdmVyZmxvd1koKSAmJiAoYm94LT5zY3JvbGxIZWln
aHQoKSAhPSBib3gtPmNsaWVudEhlaWdodCgpKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICBOb2RlKiBub2RlID0gYm94LT5ub2RlKCk7CisgICAgcmV0dXJuIG5vZGUgJiYgKG5vZGUtPnJl
bmRlcmVySXNFZGl0YWJsZSgpIHx8IG5vZGUtPmlzRG9jdW1lbnROb2RlKCkpOworfQorCitzdGF0
aWMgUmVuZGVyTGF5ZXIqIHBhcmVudExheWVyKFJlbmRlckxheWVyKiBsYXllcikKK3sKKyAgICBB
U1NFUlQobGF5ZXIpOworICAgIGlmIChsYXllci0+cGFyZW50KCkpCisgICAgICAgIHJldHVybiBs
YXllci0+cGFyZW50KCk7CisKKyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbGF5ZXItPnJl
bmRlcmVyKCk7CisgICAgaWYgKHJlbmRlcmVyLT5kb2N1bWVudCgpICYmIHJlbmRlcmVyLT5kb2N1
bWVudCgpLT5vd25lckVsZW1lbnQoKSAmJiByZW5kZXJlci0+ZG9jdW1lbnQoKS0+b3duZXJFbGVt
ZW50KCktPnJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybiByZW5kZXJlci0+ZG9jdW1lbnQoKS0+
b3duZXJFbGVtZW50KCktPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCk7CisKKyAgICByZXR1
cm4gMDsKK30KKworLy8gRklYTUU6IE1ha2UgUmVuZGVyTGF5ZXI6OmVuY2xvc2luZ0VsZW1lbnQg
cHVibGljIHNvIHRoaXMgb25lIGNhbiBiZSByZW1vdmVkLgorc3RhdGljIE5vZGUqIGVuY2xvc2lu
Z0xheWVyTm9kZShSZW5kZXJMYXllciogbGF5ZXIpCit7CisgICAgZm9yIChSZW5kZXJPYmplY3Qq
IHIgPSBsYXllci0+cmVuZGVyZXIoKTsgcjsgciA9IHItPnBhcmVudCgpKSB7CisgICAgICAgIGlm
IChOb2RlKiBlID0gci0+bm9kZSgpKQorICAgICAgICAgICAgcmV0dXJuIGU7CisgICAgfQorICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgYm9vbCBp
c05vblJlbmRlclZpZXdGaXhlZFBvc2l0aW9uZWRDb250YWluZXIoUmVuZGVyTGF5ZXIqIGxheWVy
KQoreworICAgIFJlbmRlck9iamVjdCogbyA9IGxheWVyLT5yZW5kZXJlcigpOworICAgIGlmIChv
LT5pc1JlbmRlclZpZXcoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIG8t
PmlzUG9zaXRpb25lZCgpICYmIG8tPnN0eWxlKCktPnBvc2l0aW9uKCkgPT0gRml4ZWRQb3NpdGlv
bjsKK30KKworc3RhdGljIHZvaWQgcHVzaEJhY2tJblJlZ2lvblNjcm9sbGFibGUoc3RkOjp2ZWN0
b3I8UGxhdGZvcm06OlNjcm9sbFZpZXdCYXNlKj4mIHZlY3RvciwgSW5SZWdpb25TY3JvbGxhYmxl
QXJlYSogc2Nyb2xsYWJsZUFyZWEsIEluUmVnaW9uU2Nyb2xsZXJQcml2YXRlKiBzY3JvbGxlcikK
K3sKKyAgICBBU1NFUlQoc2Nyb2xsZXIpOworICAgIEFTU0VSVCghc2Nyb2xsYWJsZUFyZWEtPmlz
TnVsbCgpKTsKKworICAgIHNjcm9sbGFibGVBcmVhLT5zZXRDYW5Qcm9wYWdhdGVTY3JvbGxpbmdU
b0VuY2xvc2luZ1Njcm9sbGFibGUoIWlzTm9uUmVuZGVyVmlld0ZpeGVkUG9zaXRpb25lZENvbnRh
aW5lcihzY3JvbGxhYmxlQXJlYS0+bGF5ZXIoKSkpOworICAgIHZlY3Rvci5wdXNoX2JhY2soc2Ny
b2xsYWJsZUFyZWEpOworICAgIGlmICh2ZWN0b3Iuc2l6ZSgpID09IDEpIHsKKyAgICAgICAgLy8g
RklYTUU6IFVzZSBSZW5kZXJMYXllcjo6cmVuZGVyQm94KCktPm5vZGUoKSBpbnN0ZWFkPworICAg
ICAgICBzY3JvbGxlci0+c2V0Tm9kZShlbmNsb3NpbmdMYXllck5vZGUoc2Nyb2xsYWJsZUFyZWEt
PmxheWVyKCkpKTsKKyAgICB9Cit9CisKK30KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
YmxhY2tiZXJyeS9BcGkvSW5SZWdpb25TY3JvbGxlci5oIGIvU291cmNlL1dlYktpdC9ibGFja2Jl
cnJ5L0FwaS9JblJlZ2lvblNjcm9sbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uM2Y2MWEyYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJy
eS9BcGkvSW5SZWdpb25TY3JvbGxlci5oCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEsIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQor
ICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9z
dG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lmbmRlZiBJblJlZ2lvblNjcm9sbGVy
X2gKKyNkZWZpbmUgSW5SZWdpb25TY3JvbGxlcl9oCisKKyNpbmNsdWRlIDxCbGFja0JlcnJ5UGxh
dGZvcm1QcmltaXRpdmVzLmg+CisKK25hbWVzcGFjZSBCbGFja0JlcnJ5IHsKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitjbGFzcyBJblJlZ2lvblNjcm9sbGVyUHJpdmF0ZTsKK2NsYXNzIFRvdWNoRXZl
bnRIYW5kbGVyOworY2xhc3MgV2ViUGFnZVByaXZhdGU7CisKK2NsYXNzIEluUmVnaW9uU2Nyb2xs
ZXIgeworCitwdWJsaWM6CisgICAgSW5SZWdpb25TY3JvbGxlcihXZWJQYWdlUHJpdmF0ZSopOwor
ICAgIH5JblJlZ2lvblNjcm9sbGVyKCk7CisKKyAgICBib29sIGNvbXBvc2l0ZWRTZXRTY3JvbGxQ
b3NpdGlvbih1bnNpZ25lZCAvKmNhbW91ZmxhZ2VkTGF5ZXIqLywgY29uc3QgUGxhdGZvcm06Oklu
dFBvaW50JiAvKnNjcm9sbFBvc2l0aW9uKi8pOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFz
cyBXZWJQYWdlUHJpdmF0ZTsKKyAgICBmcmllbmQgY2xhc3MgVG91Y2hFdmVudEhhbmRsZXI7Cisg
ICAgSW5SZWdpb25TY3JvbGxlclByaXZhdGUgKmQ7Cit9OworCit9Cit9CisKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9JblJlZ2lvblNjcm9sbGVyX3Au
aCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvSW5SZWdpb25TY3JvbGxlcl9wLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjhlZDE3NgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvSW5SZWdpb25TY3JvbGxlcl9wLmgKQEAg
LTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBSZXNlYXJjaCBJ
biBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3Qs
IHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAq
LworCisjaWZuZGVmIEluUmVnaW9uU2Nyb2xsZXJfcF9oCisjZGVmaW5lIEluUmVnaW9uU2Nyb2xs
ZXJfcF9oCisKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisKKyNpbmNsdWRlIDxpbnRlcmFjdGlvbi9T
Y3JvbGxWaWV3QmFzZS5oPgorI2luY2x1ZGUgPHZlY3Rvcj4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworY2xhc3MgRnJhbWU7CitjbGFzcyBMYXllckNvbXBvc2l0aW5nVGhyZWFkOworY2xhc3MgTm9k
ZTsKK2NsYXNzIFJlbmRlck9iamVjdDsKK30KKworbmFtZXNwYWNlIEJsYWNrQmVycnkgeworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlBhZ2VQcml2YXRlOworCitjbGFzcyBJblJlZ2lv
blNjcm9sbGVyUHJpdmF0ZSB7CisKK3B1YmxpYzoKKyAgICBJblJlZ2lvblNjcm9sbGVyUHJpdmF0
ZShXZWJQYWdlUHJpdmF0ZSopOworCisgICAgdm9pZCBzZXROb2RlKFdlYkNvcmU6Ok5vZGUqKTsK
KyAgICBXZWJDb3JlOjpOb2RlKiBub2RlKCkgY29uc3Q7CisgICAgdm9pZCByZXNldCgpOworCisg
ICAgYm9vbCBjYW5TY3JvbGwoKSBjb25zdDsKKyAgICBib29sIGhhc05vZGUoKSBjb25zdDsKKwor
ICAgIGJvb2wgc2Nyb2xsQnkoY29uc3QgUGxhdGZvcm06OkludFNpemUmIGRlbHRhKTsKKyAgICBi
b29sIGNvbXBvc2l0ZWRTZXRTY3JvbGxQb3NpdGlvbih1bnNpZ25lZCBjYW1vdWZsYWdlZExheWVy
LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24pOworCisgICAgc3RkOjp2
ZWN0b3I8UGxhdGZvcm06OlNjcm9sbFZpZXdCYXNlKj4gaW5SZWdpb25TY3JvbGxhYmxlQXJlYXNG
b3JQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOworCisgICAgV2ViUGFnZVByaXZhdGUq
IG1fd2ViUGFnZTsKK3ByaXZhdGU6CisKKyAgICBib29sIHNjcm9sbE5vZGVSZWN1cnNpdmVseShX
ZWJDb3JlOjpOb2RlKiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgZGVsdGEpOworICAgIGJvb2wg
c2Nyb2xsUmVuZGVyZXIoV2ViQ29yZTo6UmVuZGVyT2JqZWN0KiwgY29uc3QgV2ViQ29yZTo6SW50
U2l6ZSYgZGVsdGEpOworCisgICAgdm9pZCBhZGp1c3RTY3JvbGxEZWx0YShjb25zdCBXZWJDb3Jl
OjpJbnRQb2ludCYgbWF4T2Zmc2V0LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgY3VycmVudE9m
ZnNldCwgV2ViQ29yZTo6SW50U2l6ZSYgZGVsdGEpIGNvbnN0OworCisgICAgUmVmUHRyPFdlYkNv
cmU6Ok5vZGU+IG1faW5SZWdpb25TY3JvbGxTdGFydGluZ05vZGU7Cit9OworCit9Cit9CisKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJQYWdlLmNw
cCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFnZS5jcHAKaW5kZXggYjU0OTRh
ZC4uY2RmYTgxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJQ
YWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2UuY3BwCkBA
IC03MSw2ICs3MSw3IEBACiAjaW5jbHVkZSAiSWNvbkRhdGFiYXNlQ2xpZW50QmxhY2tCZXJyeS5o
IgogI2luY2x1ZGUgIkluUGFnZVNlYXJjaE1hbmFnZXIuaCIKICNpbmNsdWRlICJJblJlZ2lvblNj
cm9sbGFibGVBcmVhLmgiCisjaW5jbHVkZSAiSW5SZWdpb25TY3JvbGxlcl9wLmgiCiAjaW5jbHVk
ZSAiSW5wdXRIYW5kbGVyLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIu
aCIKICNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnRCbGFja0JlcnJ5LmgiCkBAIC0xNTIyLDcgKzE1
MjMsNyBAQCBib29sIFdlYlBhZ2VQcml2YXRlOjpzY3JvbGxCeShpbnQgZGVsdGFYLCBpbnQgZGVs
dGFZLCBib29sIHNjcm9sbE1haW5GcmFtZSkKICAgICAgICAgICAgIGRlbHRhLndpZHRoKCkgPCAw
ID8gLXVudHJhbnNmb3JtZWRDb3BpZWREZWx0YS53aWR0aCgpIDogdW50cmFuc2Zvcm1lZENvcGll
ZERlbHRhLndpZHRoKCksCiAgICAgICAgICAgICBkZWx0YS5oZWlnaHQoKSA8IDAgPyAtdW50cmFu
c2Zvcm1lZENvcGllZERlbHRhLmhlaWdodCgpOiB1bnRyYW5zZm9ybWVkQ29waWVkRGVsdGEuaGVp
Z2h0KCkpOwogCi0gICAgICAgIGlmIChtX2luUmVnaW9uU2Nyb2xsZXItPnNjcm9sbEJ5KGRlbHRh
KSkgeworICAgICAgICBpZiAobV9pblJlZ2lvblNjcm9sbGVyLT5kLT5zY3JvbGxCeShkZWx0YSkp
IHsKICAgICAgICAgICAgIG1fc2VsZWN0aW9uSGFuZGxlci0+c2VsZWN0aW9uUG9zaXRpb25DaGFu
Z2VkKCk7CiAgICAgICAgICAgICAvLyBGSVhNRTogV2UgaGF2ZSBjb2RlIGluIHBsYWNlIHRvIGhh
bmRsZSBzY3JvbGxpbmcgYW5kIGNsaXBwaW5nIHRhcCBoaWdobGlnaHQKICAgICAgICAgICAgIC8v
IG9uIGluLXJlZ2lvbiBzY3JvbGxpbmcuIEFzIHNvb24gYXMgaXQgaXMgZmFzdCBlbm91Z2ggKGku
ZS4gd2UgaGF2ZSBpdCBiYWNrZWQgYnkKQEAgLTE1NDgsOSArMTU0OSw5IEBAIGJvb2wgV2ViUGFn
ZTo6c2Nyb2xsQnkoY29uc3QgUGxhdGZvcm06OkludFNpemUmIGRlbHRhLCBib29sIHNjcm9sbE1h
aW5GcmFtZSkKIAogdm9pZCBXZWJQYWdlUHJpdmF0ZTo6bm90aWZ5SW5SZWdpb25TY3JvbGxTdGF0
dXNDaGFuZ2VkKGJvb2wgc3RhdHVzKQogewotICAgIGlmICghc3RhdHVzICYmIG1faW5SZWdpb25T
Y3JvbGxlci0+aGFzTm9kZSgpKSB7Ci0gICAgICAgIGVucXVldWVSZW5kZXJpbmdPZkNsaXBwZWRD
b250ZW50T2ZTY3JvbGxhYmxlTm9kZUFmdGVySW5SZWdpb25TY3JvbGxpbmcobV9pblJlZ2lvblNj
cm9sbGVyLT5ub2RlKCkpOwotICAgICAgICBtX2luUmVnaW9uU2Nyb2xsZXItPnJlc2V0KCk7Cisg
ICAgaWYgKCFzdGF0dXMgJiYgbV9pblJlZ2lvblNjcm9sbGVyLT5kLT5oYXNOb2RlKCkpIHsKKyAg
ICAgICAgZW5xdWV1ZVJlbmRlcmluZ09mQ2xpcHBlZENvbnRlbnRPZlNjcm9sbGFibGVOb2RlQWZ0
ZXJJblJlZ2lvblNjcm9sbGluZyhtX2luUmVnaW9uU2Nyb2xsZXItPmQtPm5vZGUoKSk7CisgICAg
ICAgIG1faW5SZWdpb25TY3JvbGxlci0+ZC0+cmVzZXQoKTsKICAgICB9CiB9CiAKQEAgLTI2MzMs
OCArMjYzNCw4IEBAIHZvaWQgV2ViUGFnZVByaXZhdGU6OmNsZWFyRG9jdW1lbnREYXRhKGNvbnN0
IERvY3VtZW50KiBkb2N1bWVudEdvaW5nQXdheSkKICAgICBpZiAobV9jdXJyZW50QmxvY2tab29t
QWRqdXN0ZWROb2RlICYmIG1fY3VycmVudEJsb2NrWm9vbUFkanVzdGVkTm9kZS0+ZG9jdW1lbnQo
KSA9PSBkb2N1bWVudEdvaW5nQXdheSkKICAgICAgICAgbV9jdXJyZW50QmxvY2tab29tQWRqdXN0
ZWROb2RlID0gMDsKIAotICAgIGlmIChtX2luUmVnaW9uU2Nyb2xsZXItPmhhc05vZGUoKSAmJiBt
X2luUmVnaW9uU2Nyb2xsZXItPm5vZGUoKS0+ZG9jdW1lbnQoKSA9PSBkb2N1bWVudEdvaW5nQXdh
eSkKLSAgICAgICAgbV9pblJlZ2lvblNjcm9sbGVyLT5yZXNldCgpOworICAgIGlmIChtX2luUmVn
aW9uU2Nyb2xsZXItPmQtPmhhc05vZGUoKSAmJiBtX2luUmVnaW9uU2Nyb2xsZXItPmQtPm5vZGUo
KS0+ZG9jdW1lbnQoKSA9PSBkb2N1bWVudEdvaW5nQXdheSkKKyAgICAgICAgbV9pblJlZ2lvblNj
cm9sbGVyLT5kLT5yZXNldCgpOwogCiAgICAgaWYgKGRvY3VtZW50R29pbmdBd2F5LT5mcmFtZSgp
KQogICAgICAgICBtX2lucHV0SGFuZGxlci0+ZnJhbWVVbmxvYWRlZChkb2N1bWVudEdvaW5nQXdh
eS0+ZnJhbWUoKSk7CkBAIC00MjExLDEyICs0MjEyLDEyIEBAIGJvb2wgV2ViUGFnZTo6dG91Y2hF
dmVudChjb25zdCBQbGF0Zm9ybTo6VG91Y2hFdmVudCYgZXZlbnQpCiAKIHZvaWQgV2ViUGFnZVBy
aXZhdGU6OnNldFNjcm9sbE9yaWdpblBvaW50KGNvbnN0IFBsYXRmb3JtOjpJbnRQb2ludCYgcG9p
bnQpCiB7Ci0gICAgbV9pblJlZ2lvblNjcm9sbGVyLT5yZXNldCgpOworICAgIG1faW5SZWdpb25T
Y3JvbGxlci0+ZC0+cmVzZXQoKTsKIAogICAgIGlmICghbV9oYXNJblJlZ2lvblNjcm9sbGFibGVB
cmVhcykKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9jbGllbnQtPm5vdGlmeUluUmVnaW9uU2Ny
b2xsaW5nU3RhcnRpbmdQb2ludENoYW5nZWQobV9pblJlZ2lvblNjcm9sbGVyLT5pblJlZ2lvblNj
cm9sbGFibGVBcmVhc0ZvclBvaW50KHBvaW50KSk7CisgICAgbV9jbGllbnQtPm5vdGlmeUluUmVn
aW9uU2Nyb2xsaW5nU3RhcnRpbmdQb2ludENoYW5nZWQobV9pblJlZ2lvblNjcm9sbGVyLT5kLT5p
blJlZ2lvblNjcm9sbGFibGVBcmVhc0ZvclBvaW50KHBvaW50KSk7CiB9CiAKIHZvaWQgV2ViUGFn
ZTo6c2V0U2Nyb2xsT3JpZ2luUG9pbnQoY29uc3QgUGxhdGZvcm06OkludFBvaW50JiBwb2ludCkK
QEAgLTQ2NTQsNiArNDY1NSwxMSBAQCBCYWNraW5nU3RvcmUqIFdlYlBhZ2U6OmJhY2tpbmdTdG9y
ZSgpIGNvbnN0CiAgICAgcmV0dXJuIGQtPm1fYmFja2luZ1N0b3JlOwogfQogCitJblJlZ2lvblNj
cm9sbGVyKiBXZWJQYWdlOjppblJlZ2lvblNjcm9sbGVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
ZC0+bV9pblJlZ2lvblNjcm9sbGVyLmdldCgpOworfQorCiBib29sIFdlYlBhZ2U6Onpvb21Ub0Zp
dCgpCiB7CiAgICAgaWYgKGQtPmNvbnRlbnRzU2l6ZSgpLmlzRW1wdHkoKSB8fCAhZC0+aXNVc2Vy
U2NhbGFibGUoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2Vi
UGFnZS5oIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJQYWdlLmgKaW5kZXggMWYw
YTc1MS4uMjQwNWE3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9X
ZWJQYWdlLmgKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJQYWdlLmgKQEAg
LTYzLDYgKzYzLDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBCYWNraW5nU3RvcmU7CiBj
bGFzcyBCYWNraW5nU3RvcmVDbGllbnQ7CiBjbGFzcyBCYWNraW5nU3RvcmVQcml2YXRlOworY2xh
c3MgSW5SZWdpb25TY3JvbGxlcjsKIGNsYXNzIFJlbmRlclF1ZXVlOwogY2xhc3MgV2ViT3Zlcmxh
eTsKIGNsYXNzIFdlYlBhZ2VDbGllbnQ7CkBAIC0xNzksNiArMTgwLDggQEAgcHVibGljOgogCiAg
ICAgQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUoKSBjb25zdDsKIAorICAgIEluUmVnaW9uU2Ny
b2xsZXIqIGluUmVnaW9uU2Nyb2xsZXIoKSBjb25zdDsKKwogICAgIGJvb2wgem9vbVRvRml0KCk7
CiAgICAgYm9vbCB6b29tVG9PbmVPbmUoKTsKICAgICB2b2lkIHpvb21Ub0luaXRpYWxTY2FsZSgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQvYmxhY2tiZXJyeS9DaGFuZ2VMb2cKaW5kZXggODhiNDNjNy4uMWNmMGNlOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViS2l0L2JsYWNrYmVycnkvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNzcgQEAKIDIwMTItMDgtMDgg
IEFudG9uaW8gR29tZXMgIDxhZ29tZXNAcmltLmNvbT4KIAorICAgICAgICBbQmxhY2tCZXJyeV0g
VGllIHVwIHRoZSBzY3JvbGxpbmcgbWFjaGluZXJ5IHRvIHRoZSBncmFwaGljcyB0cmVlIHdoZW4g
YXBwbGljYWJsZSBmb3IgaW4tcmVnaW9uIHNjcm9sbAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTM0ODIKKyAgICAgICAgUFIgIzE4NzY3MgorICAgICAg
ICBNYWtlIEluUmVnaW9uU2Nyb2xsZXIgYSBzaW1wbGUgcHVibGljIHdlYmtpdC8gQVBJCisgICAg
ICAgIFBSICMxODg2NzcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBJbiBvcmRlciB0byBwcmVwYXJlIEluUmVnaW9uU2Nyb2xsZXIgdG8gYmUgYSBwdWJs
aWMgQVBJCisgICAgICAgIGluIHdlYmtpdC8sIHRoZSBwYXRjaDoKKworICAgICAgICAxKSBSZW5h
bWVkIHRoZSBjdXJyZW50IEluUmVnaW9uU2Nyb2xsZXIgY2xhc3MgdG8gSW5SZWdpb25TY3JvbGxl
clByaXZhdGU7CisgICAgICAgIDIpIE1vdmVkIEluUmVnaW9uU2Nyb2xsZXIuY3BwfGggZnJvbSBX
ZWJLaXRTdXBwb3J0LyB0byBBcGkvOworICAgICAgICAzKSBSZW5hbWVkIEluUmVnaW9uU2Nyb2xs
ZXIuaCB0byBJblJlZ2lvblNjcm9sbGVyX3AuaDsKKyAgICAgICAgNCkgQWRkZWQgYSBuZXcgcHVi
bGljIGNsYXNzIGltcGxlbWVudGF0aW9uIHRvIEluUmVnaW9uU2Nyb2xsZXIuaDsKKyAgICAgICAg
NSkgQWRhcHRlZCBXZWJQYWdlIGFuZCBUb3VjaEV2ZW50SGFuZGxlciBjbGFzc2VzIHRvIHVzZSBJ
blJlZ2lvblNjcm9sbGVyOjpkIGRpcmVjdGx5LgorCisgICAgICAgIFRoZSBtb3N0IGltcG9ydGFu
dCBBUEkgaGVyZSBpcyAnOjpjb21wb3NpdGVkU2V0U2Nyb2xsUG9zaXRpb24nCisKKyAgICAgICAg
SXQgaXMgYSAgVUkvQ29tcG9zaXRpbmcgdGhyZWFkIG1ldGhvZCBvbmx5IGFuZCBzZXRzIHRoZSBh
c3NvY2lhdGVkIExheWVyQ29tcG9zaXRpbmdUaHJlYWQKKyAgICAgICAgKGNhbW91ZmxhZ2VkIGFz
IGEgdW5zaWduZWQpIGZvciBlYWNoIGNyZWF0ZWQgSW5SZWdpb25TY3JvbGxhYmxlQXJlYSB0aGF0
IHN1cHBvcnRzCisgICAgICAgIGNvbXBvc2l0ZWQgc2Nyb2xsaW5nLgorCisgICAgICAgIFRoZSB3
YXkgOjpjb21wb3NpdGVkU2V0U2Nyb2xsUG9zaXRpb24gInNjcm9sbHMiIGEgbGF5ZXIgaXMgYnkg
c2V0dGluZyB0aGUgYm91bmRzT3JpZ2luCisgICAgICAgIHByb3BlcnR5IHRvIHRoZSBMYXllckNv
bXBvc2l0aW5nVGhyZWFkJ3MgJ292ZXJyaWRlJyBwcm9wZXJ0eSBpbiB0aGUgVUkvQ29tcG9zaXRp
bmcgdGhyZWFkLgorCisgICAgICAgICogQXBpL0luUmVnaW9uU2Nyb2xsZXIuY3BwOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5SZWdpb25TY3Jv
bGxlci5jcHAuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0
OjpJblJlZ2lvblNjcm9sbGVyOjpJblJlZ2lvblNjcm9sbGVyKToKKyAgICAgICAgKEJsYWNrQmVy
cnk6OldlYktpdDo6SW5SZWdpb25TY3JvbGxlcjo6fkluUmVnaW9uU2Nyb2xsZXIpOgorICAgICAg
ICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpJblJlZ2lvblNjcm9sbGVyOjpjb21wb3NpdGVkU2V0U2Ny
b2xsUG9zaXRpb24pOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpJblJlZ2lvblNjcm9s
bGVyUHJpdmF0ZTo6SW5SZWdpb25TY3JvbGxlclByaXZhdGUpOgorICAgICAgICAoQmxhY2tCZXJy
eTo6V2ViS2l0OjpJblJlZ2lvblNjcm9sbGVyUHJpdmF0ZTo6c2V0Tm9kZSk6CisgICAgICAgIChC
bGFja0JlcnJ5OjpXZWJLaXQ6OkluUmVnaW9uU2Nyb2xsZXJQcml2YXRlOjpub2RlKToKKyAgICAg
ICAgKEJsYWNrQmVycnk6OldlYktpdDo6SW5SZWdpb25TY3JvbGxlclByaXZhdGU6OnJlc2V0KToK
KyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6SW5SZWdpb25TY3JvbGxlclByaXZhdGU6Omhh
c05vZGUpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpJblJlZ2lvblNjcm9sbGVyUHJp
dmF0ZTo6Y2FuU2Nyb2xsKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6SW5SZWdpb25T
Y3JvbGxlclByaXZhdGU6OmNvbXBvc2l0ZWRTZXRTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChC
bGFja0JlcnJ5OjpXZWJLaXQ6OkluUmVnaW9uU2Nyb2xsZXJQcml2YXRlOjpzY3JvbGxCeSk6Cisg
ICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkluUmVnaW9uU2Nyb2xsZXJQcml2YXRlOjppblJl
Z2lvblNjcm9sbGFibGVBcmVhc0ZvclBvaW50KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktp
dDo6SW5SZWdpb25TY3JvbGxlclByaXZhdGU6OnNjcm9sbE5vZGVSZWN1cnNpdmVseSk6CisgICAg
ICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkluUmVnaW9uU2Nyb2xsZXJQcml2YXRlOjpzY3JvbGxS
ZW5kZXJlcik6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkluUmVnaW9uU2Nyb2xsZXJQ
cml2YXRlOjphZGp1c3RTY3JvbGxEZWx0YSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6
OmNhblNjcm9sbElubmVyRnJhbWUpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpjYW5T
Y3JvbGxSZW5kZXJCb3gpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpwYXJlbnRMYXll
cik6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OmVuY2xvc2luZ0xheWVyTm9kZSk6Cisg
ICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OmlzTm9uUmVuZGVyVmlld0ZpeGVkUG9zaXRpb25l
ZENvbnRhaW5lcik6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OnB1c2hCYWNrSW5SZWdp
b25TY3JvbGxhYmxlKToKKyAgICAgICAgKiBBcGkvSW5SZWdpb25TY3JvbGxlci5oOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JblJlZ2lvblNjcm9s
bGVyLmguCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoSW5SZWdpb25TY3JvbGxlcik6Cisg
ICAgICAgICogQXBpL0luUmVnaW9uU2Nyb2xsZXJfcC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dl
YktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5SZWdpb25TY3JvbGxlci5oLgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoSW5SZWdpb25TY3JvbGxl
clByaXZhdGUpOgorICAgICAgICAqIEFwaS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKEJsYWNrQmVy
cnk6OldlYktpdDo6V2ViUGFnZVByaXZhdGU6OnNjcm9sbEJ5KToKKyAgICAgICAgKEJsYWNrQmVy
cnk6OldlYktpdDo6V2ViUGFnZVByaXZhdGU6Om5vdGlmeUluUmVnaW9uU2Nyb2xsU3RhdHVzQ2hh
bmdlZCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2VQcml2YXRlOjpjbGVh
ckRvY3VtZW50RGF0YSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2VQcml2
YXRlOjpzZXRTY3JvbGxPcmlnaW5Qb2ludCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6
OldlYlBhZ2U6OmluUmVnaW9uU2Nyb2xsZXIpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAg
KiBBcGkvV2ViUGFnZS5oOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKiBXZWJLaXRTdXBw
b3J0L0luUmVnaW9uU2Nyb2xsYWJsZUFyZWEuY3BwOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2Vi
S2l0OjpJblJlZ2lvblNjcm9sbGFibGVBcmVhOjpJblJlZ2lvblNjcm9sbGFibGVBcmVhKToKKyAg
ICAgICAgKiBXZWJLaXRTdXBwb3J0L1RvdWNoRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKEJs
YWNrQmVycnk6OldlYktpdDo6VG91Y2hFdmVudEhhbmRsZXI6OmRyYXdUYXBIaWdobGlnaHQpOgor
CisyMDEyLTA4LTA4ICBBbnRvbmlvIEdvbWVzICA8YWdvbWVzQHJpbS5jb20+CisKICAgICAgICAg
W0JsYWNrQmVycnldIE1ha2UgV2ViT3ZlcmxheVByaXZhdGU6OnNjaGVkdWxlQ29tcG9zaXRpbmdS
dW4gYSBXZWJQYWdlUHJpdmF0ZSBtZXRob2QuCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05MzQ4MAogICAgICAgICBQUiAjMTg4NjgyCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JblJlZ2lvblNjcm9sbGFi
bGVBcmVhLmNwcCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0luUmVn
aW9uU2Nyb2xsYWJsZUFyZWEuY3BwCmluZGV4IDc2YTk4MGUuLmQ0MjA1OWUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0luUmVnaW9uU2Nyb2xsYWJs
ZUFyZWEuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0lu
UmVnaW9uU2Nyb2xsYWJsZUFyZWEuY3BwCkBAIC0yMCw4ICsyMCwxMSBAQAogI2luY2x1ZGUgIklu
UmVnaW9uU2Nyb2xsYWJsZUFyZWEuaCIKIAogI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAi
TGF5ZXJDb21wb3NpdGluZ1RocmVhZC5oIgorI2luY2x1ZGUgIkxheWVyV2ViS2l0VGhyZWFkLmgi
CiAjaW5jbHVkZSAiUmVuZGVyQm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNs
dWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNp
bmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiV2ViUGFnZV9wLmgiCkBAIC02OCw2ICs3
MSw4IEBAIEluUmVnaW9uU2Nyb2xsYWJsZUFyZWE6OkluUmVnaW9uU2Nyb2xsYWJsZUFyZWEoV2Vi
UGFnZVByaXZhdGUqIHdlYlBhZ2UsIFJlbmRlckxhCiAgICAgICAgIG1fc2Nyb2xsc1ZlcnRpY2Fs
bHkgPSB2aWV3LT5jb250ZW50c0hlaWdodCgpID4gdmlldy0+dmlzaWJsZUhlaWdodCgpOwogCiAg
ICAgICAgIG1fb3ZlcnNjcm9sbExpbWl0RmFjdG9yID0gMC4wOyAvLyBGSVhNRSBldmVudHVhbGx5
IHN1cHBvcnQgb3ZlcnNjcm9sbAorICAgICAgICBtX2NhY2hlZENvbXBvc2l0ZWRTY3JvbGxhYmxl
TGF5ZXIgPSAwOyAvLyBGSVhNRTogTmVlZHMgY29tcG9zaXRlZCBsYXllciBmb3IgaW5uZXIgZnJh
bWVzLgorCiAgICAgfSBlbHNlIHsgLy8gUmVuZGVyQm94LWJhc2VkIGVsZW1lbnRzIGNhc2UgKHNj
cm9sbGFibGUgYm94ZXMgKGRpdidzLCBwJ3MsIHRleHRhcmVhJ3MsIGV0YykpLgogCiAgICAgICAg
IFJlbmRlckJveCogYm94ID0gbV9sYXllci0+cmVuZGVyQm94KCk7CkBAIC04Miw3ICs4NywxMyBA
QCBJblJlZ2lvblNjcm9sbGFibGVBcmVhOjpJblJlZ2lvblNjcm9sbGFibGVBcmVhKFdlYlBhZ2VQ
cml2YXRlKiB3ZWJQYWdlLCBSZW5kZXJMYQogICAgICAgICBtX3Njcm9sbHNIb3Jpem9udGFsbHkg
PSBib3gtPnNjcm9sbFdpZHRoKCkgIT0gYm94LT5jbGllbnRXaWR0aCgpICYmIGJveC0+c2Nyb2xs
c092ZXJmbG93WCgpOwogICAgICAgICBtX3Njcm9sbHNWZXJ0aWNhbGx5ID0gYm94LT5zY3JvbGxI
ZWlnaHQoKSAhPSBib3gtPmNsaWVudEhlaWdodCgpICYmIGJveC0+c2Nyb2xsc092ZXJmbG93WSgp
OwogCi0gICAgICAgIG1fb3ZlcnNjcm9sbExpbWl0RmFjdG9yID0gMC4wOyAvLyBGSVhNRSBldmVu
dHVhbGx5IHN1cHBvcnQgb3ZlcnNjcm9sbAorICAgICAgICBpZiAobV9sYXllci0+dXNlc0NvbXBv
c2l0ZWRTY3JvbGxpbmcoKSkgeworICAgICAgICAgICAgbV9zdXBwb3J0c0NvbXBvc2l0ZWRTY3Jv
bGxpbmcgPSB0cnVlOworICAgICAgICAgICAgQVNTRVJUKG1fbGF5ZXItPmJhY2tpbmcoKS0+aGFz
U2Nyb2xsaW5nTGF5ZXIoKSk7CisgICAgICAgICAgICBtX2NhY2hlZENvbXBvc2l0ZWRTY3JvbGxh
YmxlTGF5ZXIgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihtX2xheWVyLT5iYWNraW5nKCkt
PnNjcm9sbGluZ0xheWVyKCktPnBsYXRmb3JtTGF5ZXIoKS0+bGF5ZXJDb21wb3NpdGluZ1RocmVh
ZCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIG1fb3ZlcnNjcm9sbExpbWl0RmFjdG9yID0gMC4w
OwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktp
dFN1cHBvcnQvSW5SZWdpb25TY3JvbGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkv
V2ViS2l0U3VwcG9ydC9JblJlZ2lvblNjcm9sbGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggM2Q5ODM3NS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkv
V2ViS2l0U3VwcG9ydC9JblJlZ2lvblNjcm9sbGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM1
NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIFJlc2VhcmNoIEluIE1v
dGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0g
KiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3Jp
dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJblJlZ2lvblNjcm9sbGVyLmgiCi0KLSNp
bmNsdWRlICJCYWNraW5nU3RvcmVDbGllbnQuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1
ZGUgIkhUTUxGcmFtZU93bmVyRWxlbWVudC5oIgotI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIK
LSNpbmNsdWRlICJJblJlZ2lvblNjcm9sbGFibGVBcmVhLmgiCi0jaW5jbHVkZSAiUGFnZS5oIgot
I2luY2x1ZGUgIlJlbmRlckJveC5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCi0jaW5jbHVk
ZSAiUmVuZGVyT2JqZWN0LmgiCi0jaW5jbHVkZSAiUmVuZGVyVmlldy5oIgotI2luY2x1ZGUgIldl
YlBhZ2VfcC5oIgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIEJsYWNr
QmVycnkgewotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXN0YXRpYyBib29sIGNhblNjcm9sbElubmVy
RnJhbWUoRnJhbWUqIGZyYW1lKQotewotICAgIGlmICghZnJhbWUgfHwgIWZyYW1lLT52aWV3KCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIE5vdCBoYXZpbmcgYW4gb3duZXIgZWxl
bWVudCBtZWFucyB0aGF0IHdlIGFyZSBvbiB0aGUgbWFpbmZyYW1lLgotICAgIGlmICghZnJhbWUt
Pm93bmVyRWxlbWVudCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBBU1NFUlQoZnJh
bWUgIT0gZnJhbWUtPnBhZ2UoKS0+bWFpbkZyYW1lKCkpOwotCi0gICAgSW50U2l6ZSB2aXNpYmxl
U2l6ZSA9IGZyYW1lLT52aWV3KCktPnZpc2libGVDb250ZW50UmVjdCgpLnNpemUoKTsKLSAgICBJ
bnRTaXplIGNvbnRlbnRzU2l6ZSA9IGZyYW1lLT52aWV3KCktPmNvbnRlbnRzU2l6ZSgpOwotCi0g
ICAgYm9vbCBjYW5CZVNjcm9sbGVkID0gY29udGVudHNTaXplLmhlaWdodCgpID4gdmlzaWJsZVNp
emUuaGVpZ2h0KCkgfHwgY29udGVudHNTaXplLndpZHRoKCkgPiB2aXNpYmxlU2l6ZS53aWR0aCgp
OwotCi0gICAgLy8gTGV0cyBhbHNvIGNvbnNpZGVyIHRoZSAnb3ZlcmZsb3cte3gseX0gcHJvcGVy
dHkgc2V0IGRpcmVjdGx5IHRvIHRoZSB7aX1mcmFtZSB0YWcuCi0gICAgcmV0dXJuIGNhbkJlU2Ny
b2xsZWQgJiYgKGZyYW1lLT5vd25lckVsZW1lbnQoKS0+c2Nyb2xsaW5nTW9kZSgpICE9IFNjcm9s
bGJhckFsd2F5c09mZik7Ci19Ci0KLS8vIFRoZSBSZW5kZXJCb3g6OmNhbmJlU2Nyb2xsZWRBbmRI
YXNTY3JvbGxhYmxlQXJlYSBtZXRob2QgcmV0dXJucyB0cnVlIGZvciB0aGUKLS8vIGZvbGxvd2lu
ZyBzY2VuYXJpbywgZm9yIGV4YW1wbGU6Ci0vLyAoMSkgYSBkaXYgdGhhdCBoYXMgYSB2ZXJ0aWNh
bCBvdmVyZmxvdyBidXQgbm8gaG9yaXpvbnRhbCBvdmVyZmxvdwotLy8gICAgIHdpdGggb3ZlcmZs
b3cteTogaGlkZGVuIGFuZCBvdmVyZmxvdy14OiBhdXRvIHNldC4KLS8vIFRoZSB2ZXJzaW9uIGJl
bG93IGZpeGVzIGl0LgotLy8gRklYTUU6IEZpeCBSZW5kZXJCb3g6OmNhbkJlU2Nyb2xsZWRBbmRI
YXNTY3JvbGxhYmxlQXJlYSBtZXRob2QgaW5zdGVhZC4KLXN0YXRpYyBib29sIGNhblNjcm9sbFJl
bmRlckJveChSZW5kZXJCb3gqIGJveCkKLXsKLSAgICBpZiAoIWJveCB8fCAhYm94LT5oYXNPdmVy
Zmxvd0NsaXAoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGJveC0+c2Nyb2xs
c092ZXJmbG93WCgpICYmIChib3gtPnNjcm9sbFdpZHRoKCkgIT0gYm94LT5jbGllbnRXaWR0aCgp
KQotICAgICAgICB8fCBib3gtPnNjcm9sbHNPdmVyZmxvd1koKSAmJiAoYm94LT5zY3JvbGxIZWln
aHQoKSAhPSBib3gtPmNsaWVudEhlaWdodCgpKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAg
ICBOb2RlKiBub2RlID0gYm94LT5ub2RlKCk7Ci0gICAgcmV0dXJuIG5vZGUgJiYgKG5vZGUtPnJl
bmRlcmVySXNFZGl0YWJsZSgpIHx8IG5vZGUtPmlzRG9jdW1lbnROb2RlKCkpOwotfQotCi1zdGF0
aWMgUmVuZGVyTGF5ZXIqIHBhcmVudExheWVyKFJlbmRlckxheWVyKiBsYXllcikKLXsKLSAgICBB
U1NFUlQobGF5ZXIpOwotICAgIGlmIChsYXllci0+cGFyZW50KCkpCi0gICAgICAgIHJldHVybiBs
YXllci0+cGFyZW50KCk7Ci0KLSAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbGF5ZXItPnJl
bmRlcmVyKCk7Ci0gICAgaWYgKHJlbmRlcmVyLT5kb2N1bWVudCgpICYmIHJlbmRlcmVyLT5kb2N1
bWVudCgpLT5vd25lckVsZW1lbnQoKSAmJiByZW5kZXJlci0+ZG9jdW1lbnQoKS0+b3duZXJFbGVt
ZW50KCktPnJlbmRlcmVyKCkpCi0gICAgICAgIHJldHVybiByZW5kZXJlci0+ZG9jdW1lbnQoKS0+
b3duZXJFbGVtZW50KCktPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCk7Ci0KLSAgICByZXR1
cm4gMDsKLX0KLQotLy8gRklYTUU6IE1ha2UgUmVuZGVyTGF5ZXI6OmVuY2xvc2luZ0VsZW1lbnQg
cHVibGljIHNvIHRoaXMgb25lIGNhbiBiZSByZW1vdmVkLgotc3RhdGljIE5vZGUqIGVuY2xvc2lu
Z0xheWVyTm9kZShSZW5kZXJMYXllciogbGF5ZXIpCi17Ci0gICAgZm9yIChSZW5kZXJPYmplY3Qq
IHIgPSBsYXllci0+cmVuZGVyZXIoKTsgcjsgciA9IHItPnBhcmVudCgpKSB7Ci0gICAgICAgIGlm
IChOb2RlKiBlID0gci0+bm9kZSgpKQotICAgICAgICAgICAgcmV0dXJuIGU7Ci0gICAgfQotICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgYm9vbCBp
c05vblJlbmRlclZpZXdGaXhlZFBvc2l0aW9uZWRDb250YWluZXIoUmVuZGVyTGF5ZXIqIGxheWVy
KQotewotICAgIFJlbmRlck9iamVjdCogbyA9IGxheWVyLT5yZW5kZXJlcigpOwotICAgIGlmIChv
LT5pc1JlbmRlclZpZXcoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIG8t
PmlzUG9zaXRpb25lZCgpICYmIG8tPnN0eWxlKCktPnBvc2l0aW9uKCkgPT0gRml4ZWRQb3NpdGlv
bjsKLX0KLQotc3RhdGljIHZvaWQgcHVzaEJhY2tJblJlZ2lvblNjcm9sbGFibGUoc3RkOjp2ZWN0
b3I8UGxhdGZvcm06OlNjcm9sbFZpZXdCYXNlKj4mIHZlY3RvciwgSW5SZWdpb25TY3JvbGxhYmxl
QXJlYSogc2Nyb2xsYWJsZUFyZWEsIEluUmVnaW9uU2Nyb2xsZXIqIHNjcm9sbGVyKQotewotICAg
IEFTU0VSVChzY3JvbGxlcik7Ci0gICAgQVNTRVJUKCFzY3JvbGxhYmxlQXJlYS0+aXNOdWxsKCkp
OwotCi0gICAgc2Nyb2xsYWJsZUFyZWEtPnNldENhblByb3BhZ2F0ZVNjcm9sbGluZ1RvRW5jbG9z
aW5nU2Nyb2xsYWJsZSghaXNOb25SZW5kZXJWaWV3Rml4ZWRQb3NpdGlvbmVkQ29udGFpbmVyKHNj
cm9sbGFibGVBcmVhLT5sYXllcigpKSk7Ci0gICAgdmVjdG9yLnB1c2hfYmFjayhzY3JvbGxhYmxl
QXJlYSk7Ci0gICAgaWYgKHZlY3Rvci5zaXplKCkgPT0gMSkgewotICAgICAgICAvLyBGSVhNRTog
VXNlIFJlbmRlckxheWVyOjpyZW5kZXJCb3goKS0+bm9kZSgpIGluc3RlYWQ/Ci0gICAgICAgIHNj
cm9sbGVyLT5zZXROb2RlKGVuY2xvc2luZ0xheWVyTm9kZShzY3JvbGxhYmxlQXJlYS0+bGF5ZXIo
KSkpOwotICAgIH0KLX0KLQotSW5SZWdpb25TY3JvbGxlcjo6SW5SZWdpb25TY3JvbGxlcihXZWJQ
YWdlUHJpdmF0ZSogd2ViUGFnZVByaXZhdGUpCi0gICAgOiBtX3dlYlBhZ2Uod2ViUGFnZVByaXZh
dGUpCi17Ci19Ci0KLXZvaWQgSW5SZWdpb25TY3JvbGxlcjo6c2V0Tm9kZShXZWJDb3JlOjpOb2Rl
KiBub2RlKQotewotICAgIG1faW5SZWdpb25TY3JvbGxTdGFydGluZ05vZGUgPSBub2RlOwotfQot
Ci1XZWJDb3JlOjpOb2RlKiBJblJlZ2lvblNjcm9sbGVyOjpub2RlKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV9pblJlZ2lvblNjcm9sbFN0YXJ0aW5nTm9kZS5nZXQoKTsKLX0KLQotdm9pZCBJblJl
Z2lvblNjcm9sbGVyOjpyZXNldCgpCi17Ci0gICAgc2V0Tm9kZSgwKTsKLX0KLQotYm9vbCBJblJl
Z2lvblNjcm9sbGVyOjpoYXNOb2RlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gISFtX2luUmVnaW9u
U2Nyb2xsU3RhcnRpbmdOb2RlOwotfQotCi1ib29sIEluUmVnaW9uU2Nyb2xsZXI6OmNhblNjcm9s
bCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGhhc05vZGUoKTsKLX0KLQotYm9vbCBJblJlZ2lvblNj
cm9sbGVyOjpzY3JvbGxCeShjb25zdCBQbGF0Zm9ybTo6SW50U2l6ZSYgZGVsdGEpCi17Ci0gICAg
aWYgKCFjYW5TY3JvbGwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHNj
cm9sbE5vZGVSZWN1cnNpdmVseShub2RlKCksIGRlbHRhKTsKLX0KLQotc3RkOjp2ZWN0b3I8UGxh
dGZvcm06OlNjcm9sbFZpZXdCYXNlKj4gSW5SZWdpb25TY3JvbGxlcjo6aW5SZWdpb25TY3JvbGxh
YmxlQXJlYXNGb3JQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQpCi17Ci0gICAg
c3RkOjp2ZWN0b3I8UGxhdGZvcm06OlNjcm9sbFZpZXdCYXNlKj4gdmFsaWRSZXR1cm47Ci0gICAg
c3RkOjp2ZWN0b3I8UGxhdGZvcm06OlNjcm9sbFZpZXdCYXNlKj4gZW1wdHlSZXR1cm47Ci0KLSAg
ICBIaXRUZXN0UmVzdWx0IHJlc3VsdCA9IG1fd2ViUGFnZS0+bV9tYWluRnJhbWUtPmV2ZW50SGFu
ZGxlcigpLT5oaXRUZXN0UmVzdWx0QXRQb2ludChtX3dlYlBhZ2UtPm1hcEZyb21WaWV3cG9ydFRv
Q29udGVudHMocG9pbnQpLCBmYWxzZSAvKmFsbG93U2hhZG93Q29udGVudCovKTsKLSAgICBOb2Rl
KiBub2RlID0gcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpOwotICAgIGlmICghbm9kZSB8fCAh
bm9kZS0+cmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJuIGVtcHR5UmV0dXJuOwotCi0gICAgUmVu
ZGVyTGF5ZXIqIGxheWVyID0gbm9kZS0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKTsKLSAg
ICBkbyB7Ci0gICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBsYXllci0+cmVuZGVyZXIo
KTsKLQotICAgICAgICBpZiAocmVuZGVyZXItPmlzUmVuZGVyVmlldygpKSB7Ci0gICAgICAgICAg
ICBpZiAoUmVuZGVyVmlldyogcmVuZGVyVmlldyA9IHRvUmVuZGVyVmlldyhyZW5kZXJlcikpIHsK
LSAgICAgICAgICAgICAgICBGcmFtZVZpZXcqIHZpZXcgPSByZW5kZXJWaWV3LT5mcmFtZVZpZXco
KTsKLSAgICAgICAgICAgICAgICBpZiAoIXZpZXcpCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBlbXB0eVJldHVybjsKLQotICAgICAgICAgICAgICAgIGlmIChjYW5TY3JvbGxJbm5lckZyYW1l
KHZpZXctPmZyYW1lKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2hCYWNrSW5SZWdpb25T
Y3JvbGxhYmxlKHZhbGlkUmV0dXJuLCBuZXcgSW5SZWdpb25TY3JvbGxhYmxlQXJlYShtX3dlYlBh
Z2UsIGxheWVyKSwgdGhpcyk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChjYW5TY3JvbGxS
ZW5kZXJCb3gobGF5ZXItPnJlbmRlckJveCgpKSkgewotICAgICAgICAgICAgcHVzaEJhY2tJblJl
Z2lvblNjcm9sbGFibGUodmFsaWRSZXR1cm4sIG5ldyBJblJlZ2lvblNjcm9sbGFibGVBcmVhKG1f
d2ViUGFnZSwgbGF5ZXIpLCB0aGlzKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9
Ci0KLSAgICAgICAgLy8gSWYgd2UgcnVuIGludG8gYSBmaXggcG9zaXRpb25lZCBsYXllciwgc2V0
IHRoZSBsYXN0IHNjcm9sbGFibGUgaW4tcmVnaW9uIG9iamVjdAotICAgICAgICAvLyBhcyBub3Qg
YWJsZSB0byBwcm9wYWdhdGUgc2Nyb2xsIHRvIGl0cyBwYXJlbnQgc2Nyb2xsYWJsZS4KLSAgICAg
ICAgaWYgKGlzTm9uUmVuZGVyVmlld0ZpeGVkUG9zaXRpb25lZENvbnRhaW5lcihsYXllcikgJiYg
dmFsaWRSZXR1cm4uc2l6ZSgpKSB7Ci0gICAgICAgICAgICBQbGF0Zm9ybTo6U2Nyb2xsVmlld0Jh
c2UqIGVuZCA9IHZhbGlkUmV0dXJuLmJhY2soKTsKLSAgICAgICAgICAgIGVuZC0+c2V0Q2FuUHJv
cGFnYXRlU2Nyb2xsaW5nVG9FbmNsb3NpbmdTY3JvbGxhYmxlKGZhbHNlKTsKLSAgICAgICAgfQot
Ci0gICAgfSB3aGlsZSAobGF5ZXIgPSBwYXJlbnRMYXllcihsYXllcikpOwotCi0gICAgaWYgKHZh
bGlkUmV0dXJuLmVtcHR5KCkpCi0gICAgICAgIHJldHVybiBlbXB0eVJldHVybjsKLQotICAgIC8v
IFBvc3QtY2FsY3VsYXRlIHRoZSB2aXNpYmxlIHdpbmRvdyByZWN0cyBpbiByZXZlcnNlIGhpdCB0
ZXN0IG9yZGVyIHNvCi0gICAgLy8gd2UgYWNjb3VudCBmb3IgYWxsIGFuZCBhbnkgY2xpcHBpbmcg
cmVjdHMuCi0gICAgV2ViQ29yZTo6SW50UmVjdCByZWN1cnNpdmVDbGlwcGluZ1JlY3QoV2ViQ29y
ZTo6SW50UG9pbnQ6Onplcm8oKSwgbV93ZWJQYWdlLT50cmFuc2Zvcm1lZFZpZXdwb3J0U2l6ZSgp
KTsKLQotICAgIHN0ZDo6dmVjdG9yPFBsYXRmb3JtOjpTY3JvbGxWaWV3QmFzZSo+OjpyZXZlcnNl
X2l0ZXJhdG9yIHJlbmQgPSB2YWxpZFJldHVybi5yZW5kKCk7Ci0gICAgZm9yIChzdGQ6OnZlY3Rv
cjxQbGF0Zm9ybTo6U2Nyb2xsVmlld0Jhc2UqPjo6cmV2ZXJzZV9pdGVyYXRvciByaXQgPSB2YWxp
ZFJldHVybi5yYmVnaW4oKTsgcml0ICE9IHJlbmQ7ICsrcml0KSB7Ci0KLSAgICAgICAgSW5SZWdp
b25TY3JvbGxhYmxlQXJlYSogY3VyciA9IHN0YXRpY19jYXN0PEluUmVnaW9uU2Nyb2xsYWJsZUFy
ZWEqPigqcml0KTsKLSAgICAgICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gY3Vyci0+bGF5ZXIoKTsK
LQotICAgICAgICBpZiAobGF5ZXIgJiYgbGF5ZXItPnJlbmRlcmVyKCktPmlzUmVuZGVyVmlldygp
KSB7IC8vICNkb2N1bWVudCBjYXNlCi0gICAgICAgICAgICBGcmFtZVZpZXcqIHZpZXcgPSB0b1Jl
bmRlclZpZXcobGF5ZXItPnJlbmRlcmVyKCkpLT5mcmFtZVZpZXcoKTsKLSAgICAgICAgICAgIEFT
U0VSVCh2aWV3KTsKLSAgICAgICAgICAgIEFTU0VSVChjYW5TY3JvbGxJbm5lckZyYW1lKHZpZXct
PmZyYW1lKCkpKTsKLQotICAgICAgICAgICAgV2ViQ29yZTo6SW50UmVjdCBmcmFtZVdpbmRvd1Jl
Y3QgPSBtX3dlYlBhZ2UtPm1hcFRvVHJhbnNmb3JtZWQobV93ZWJQYWdlLT5nZXRSZWN1cnNpdmVW
aXNpYmxlV2luZG93UmVjdCh2aWV3KSk7Ci0gICAgICAgICAgICBmcmFtZVdpbmRvd1JlY3QuaW50
ZXJzZWN0KHJlY3Vyc2l2ZUNsaXBwaW5nUmVjdCk7Ci0gICAgICAgICAgICBjdXJyLT5zZXRWaXNp
YmxlV2luZG93UmVjdChmcmFtZVdpbmRvd1JlY3QpOwotICAgICAgICAgICAgcmVjdXJzaXZlQ2xp
cHBpbmdSZWN0ID0gZnJhbWVXaW5kb3dSZWN0OwotCi0gICAgICAgIH0gZWxzZSB7IC8vIFJlbmRl
ckJveC1iYXNlZCBlbGVtZW50cyBjYXNlIChzY3JvbGxhYmxlIGJveGVzIChkaXYncywgcCdzLCB0
ZXh0YXJlYSdzLCBldGMpKS4KLQotICAgICAgICAgICAgUmVuZGVyQm94KiBib3ggPSBsYXllci0+
cmVuZGVyQm94KCk7Ci0gICAgICAgICAgICBBU1NFUlQoYm94KTsKLSAgICAgICAgICAgIEFTU0VS
VChjYW5TY3JvbGxSZW5kZXJCb3goYm94KSk7Ci0KLSAgICAgICAgICAgIFdlYkNvcmU6OkludFJl
Y3QgdmlzaWJsZVdpbmRvd1JlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGJveC0+YWJzb2x1dGVDbGlw
cGVkT3ZlcmZsb3dSZWN0KCkpOwotICAgICAgICAgICAgdmlzaWJsZVdpbmRvd1JlY3QgPSBib3gt
PmZyYW1lKCktPnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyh2aXNpYmxlV2luZG93UmVjdCk7Ci0g
ICAgICAgICAgICB2aXNpYmxlV2luZG93UmVjdCA9IG1fd2ViUGFnZS0+bWFwVG9UcmFuc2Zvcm1l
ZCh2aXNpYmxlV2luZG93UmVjdCk7Ci0gICAgICAgICAgICB2aXNpYmxlV2luZG93UmVjdC5pbnRl
cnNlY3QocmVjdXJzaXZlQ2xpcHBpbmdSZWN0KTsKLQotICAgICAgICAgICAgY3Vyci0+c2V0Vmlz
aWJsZVdpbmRvd1JlY3QodmlzaWJsZVdpbmRvd1JlY3QpOwotICAgICAgICAgICAgcmVjdXJzaXZl
Q2xpcHBpbmdSZWN0ID0gdmlzaWJsZVdpbmRvd1JlY3Q7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICByZXR1cm4gdmFsaWRSZXR1cm47Ci19Ci0KLWJvb2wgSW5SZWdpb25TY3JvbGxlcjo6c2Nyb2xs
Tm9kZVJlY3Vyc2l2ZWx5KFdlYkNvcmU6Ok5vZGUqIG5vZGUsIGNvbnN0IFdlYkNvcmU6OkludFNp
emUmIGRlbHRhKQotewotICAgIGlmIChkZWx0YS5pc1plcm8oKSkKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0KLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFJlbmRl
ck9iamVjdCogcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOwotICAgIGlmICghcmVuZGVyZXIp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEZyYW1lVmlldyogdmlldyA9IHJlbmRlcmVy
LT52aWV3KCktPmZyYW1lVmlldygpOwotICAgIGlmICghdmlldykKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgLy8gVHJ5IHNjcm9sbGluZyB0aGUgcmVuZGVyZXIuCi0gICAgaWYgKHNjcm9s
bFJlbmRlcmVyKHJlbmRlcmVyLCBkZWx0YSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAg
Ly8gV2UndmUgaGl0IHRoZSBwYWdlLCBkb24ndCBzY3JvbGwgaXQgYW5kIHJldHVybiBmYWxzZS4K
LSAgICBpZiAodmlldyA9PSBtX3dlYlBhZ2UtPm1fbWFpbkZyYW1lLT52aWV3KCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIC8vIFRyeSBzY3JvbGxpbmcgdGhlIEZyYW1lVmlldy4KLSAg
ICBpZiAoY2FuU2Nyb2xsSW5uZXJGcmFtZSh2aWV3LT5mcmFtZSgpKSkgewotICAgICAgICBJbnRT
aXplIHZpZXdEZWx0YSA9IGRlbHRhOwotICAgICAgICBJbnRQb2ludCBuZXdWaWV3T2Zmc2V0ID0g
dmlldy0+c2Nyb2xsUG9zaXRpb24oKTsKLSAgICAgICAgSW50UG9pbnQgbWF4Vmlld09mZnNldCA9
IHZpZXctPm1heGltdW1TY3JvbGxQb3NpdGlvbigpOwotICAgICAgICBhZGp1c3RTY3JvbGxEZWx0
YShtYXhWaWV3T2Zmc2V0LCBuZXdWaWV3T2Zmc2V0LCB2aWV3RGVsdGEpOwotCi0gICAgICAgIGlm
ICghdmlld0RlbHRhLmlzWmVybygpKSB7Ci0gICAgICAgICAgICB2aWV3LT5zZXRDYW5CbGl0T25T
Y3JvbGwoZmFsc2UpOwotCi0gICAgICAgICAgICBCYWNraW5nU3RvcmVDbGllbnQqIGJhY2tpbmdT
dG9yZUNsaWVudCA9IG1fd2ViUGFnZS0+YmFja2luZ1N0b3JlQ2xpZW50Rm9yRnJhbWUodmlldy0+
ZnJhbWUoKSk7Ci0gICAgICAgICAgICBpZiAoYmFja2luZ1N0b3JlQ2xpZW50KSB7Ci0gICAgICAg
ICAgICAgICAgYmFja2luZ1N0b3JlQ2xpZW50LT5zZXRJc0NsaWVudEdlbmVyYXRlZFNjcm9sbCh0
cnVlKTsKLSAgICAgICAgICAgICAgICBiYWNraW5nU3RvcmVDbGllbnQtPnNldElzU2Nyb2xsTm90
aWZpY2F0aW9uU3VwcHJlc3NlZCh0cnVlKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
c2V0Tm9kZSh2aWV3LT5mcmFtZSgpLT5kb2N1bWVudCgpKTsKLQotICAgICAgICAgICAgdmlldy0+
c2Nyb2xsQnkodmlld0RlbHRhKTsKLQotICAgICAgICAgICAgaWYgKGJhY2tpbmdTdG9yZUNsaWVu
dCkgewotICAgICAgICAgICAgICAgIGJhY2tpbmdTdG9yZUNsaWVudC0+c2V0SXNDbGllbnRHZW5l
cmF0ZWRTY3JvbGwoZmFsc2UpOwotICAgICAgICAgICAgICAgIGJhY2tpbmdTdG9yZUNsaWVudC0+
c2V0SXNTY3JvbGxOb3RpZmljYXRpb25TdXBwcmVzc2VkKGZhbHNlKTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBU
cnkgc2Nyb2xsaW5nIHRoZSBub2RlIG9mIHRoZSBlbmNsb3NpbmcgZnJhbWUuCi0gICAgRnJhbWUq
IGZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKLSAgICBpZiAoZnJhbWUpIHsKLSAg
ICAgICAgTm9kZSogb3duZXJOb2RlID0gZnJhbWUtPm93bmVyRWxlbWVudCgpOwotICAgICAgICBp
ZiAoc2Nyb2xsTm9kZVJlY3Vyc2l2ZWx5KG93bmVyTm9kZSwgZGVsdGEpKQotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEluUmVn
aW9uU2Nyb2xsZXI6OnNjcm9sbFJlbmRlcmVyKFdlYkNvcmU6OlJlbmRlck9iamVjdCogcmVuZGVy
ZXIsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGRlbHRhKQotewotICAgIFJlbmRlckxheWVyKiBs
YXllciA9IHJlbmRlcmVyLT5lbmNsb3NpbmdMYXllcigpOwotICAgIGlmICghbGF5ZXIpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIFRyeSB0byBzY3JvbGwgbGF5ZXIuCi0gICAgYm9v
bCByZXN0cmljdGVkQnlMaW5lQ2xhbXAgPSBmYWxzZTsKLSAgICBpZiAocmVuZGVyZXItPnBhcmVu
dCgpKQotICAgICAgICByZXN0cmljdGVkQnlMaW5lQ2xhbXAgPSAhcmVuZGVyZXItPnBhcmVudCgp
LT5zdHlsZSgpLT5saW5lQ2xhbXAoKS5pc05vbmUoKTsKLQotICAgIGlmIChyZW5kZXJlci0+aGFz
T3ZlcmZsb3dDbGlwKCkgJiYgIXJlc3RyaWN0ZWRCeUxpbmVDbGFtcCkgewotICAgICAgICBJbnRT
aXplIGxheWVyRGVsdGEgPSBkZWx0YTsKLSAgICAgICAgSW50UG9pbnQgbWF4T2Zmc2V0KGxheWVy
LT5zY3JvbGxXaWR0aCgpIC0gbGF5ZXItPnJlbmRlckJveCgpLT5jbGllbnRXaWR0aCgpLCBsYXll
ci0+c2Nyb2xsSGVpZ2h0KCkgLSBsYXllci0+cmVuZGVyQm94KCktPmNsaWVudEhlaWdodCgpKTsK
LSAgICAgICAgSW50UG9pbnQgY3VycmVudE9mZnNldChsYXllci0+c2Nyb2xsWE9mZnNldCgpLCBs
YXllci0+c2Nyb2xsWU9mZnNldCgpKTsKLSAgICAgICAgYWRqdXN0U2Nyb2xsRGVsdGEobWF4T2Zm
c2V0LCBjdXJyZW50T2Zmc2V0LCBsYXllckRlbHRhKTsKLSAgICAgICAgaWYgKCFsYXllckRlbHRh
LmlzWmVybygpKSB7Ci0gICAgICAgICAgICBzZXROb2RlKGVuY2xvc2luZ0xheWVyTm9kZShsYXll
cikpOwotICAgICAgICAgICAgSW50UG9pbnQgbmV3T2Zmc2V0ID0gY3VycmVudE9mZnNldCArIGxh
eWVyRGVsdGE7Ci0gICAgICAgICAgICBsYXllci0+c2Nyb2xsVG9PZmZzZXQobmV3T2Zmc2V0Lngo
KSwgbmV3T2Zmc2V0LnkoKSk7Ci0gICAgICAgICAgICByZW5kZXJlci0+cmVwYWludCh0cnVlKTsK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgd2hpbGUg
KGxheWVyID0gbGF5ZXItPnBhcmVudCgpKSB7Ci0gICAgICAgIGlmIChjYW5TY3JvbGxSZW5kZXJC
b3gobGF5ZXItPnJlbmRlckJveCgpKSkKLSAgICAgICAgICAgIHJldHVybiBzY3JvbGxSZW5kZXJl
cihsYXllci0+cmVuZGVyQm94KCksIGRlbHRhKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLXZvaWQgSW5SZWdpb25TY3JvbGxlcjo6YWRqdXN0U2Nyb2xsRGVsdGEoY29uc3QgV2Vi
Q29yZTo6SW50UG9pbnQmIG1heE9mZnNldCwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGN1cnJl
bnRPZmZzZXQsIFdlYkNvcmU6OkludFNpemUmIGRlbHRhKSBjb25zdAotewotICAgIGlmIChjdXJy
ZW50T2Zmc2V0LngoKSArIGRlbHRhLndpZHRoKCkgPiBtYXhPZmZzZXQueCgpKQotICAgICAgICBk
ZWx0YS5zZXRXaWR0aChzdGQ6Om1pbihtYXhPZmZzZXQueCgpIC0gY3VycmVudE9mZnNldC54KCks
IGRlbHRhLndpZHRoKCkpKTsKLQotICAgIGlmIChjdXJyZW50T2Zmc2V0LngoKSArIGRlbHRhLndp
ZHRoKCkgPCAwKQotICAgICAgICBkZWx0YS5zZXRXaWR0aChzdGQ6Om1heCgtY3VycmVudE9mZnNl
dC54KCksIGRlbHRhLndpZHRoKCkpKTsKLQotICAgIGlmIChjdXJyZW50T2Zmc2V0LnkoKSArIGRl
bHRhLmhlaWdodCgpID4gbWF4T2Zmc2V0LnkoKSkKLSAgICAgICAgZGVsdGEuc2V0SGVpZ2h0KHN0
ZDo6bWluKG1heE9mZnNldC55KCkgLSBjdXJyZW50T2Zmc2V0LnkoKSwgZGVsdGEuaGVpZ2h0KCkp
KTsKLQotICAgIGlmIChjdXJyZW50T2Zmc2V0LnkoKSArIGRlbHRhLmhlaWdodCgpIDwgMCkKLSAg
ICAgICAgZGVsdGEuc2V0SGVpZ2h0KHN0ZDo6bWF4KC1jdXJyZW50T2Zmc2V0LnkoKSwgZGVsdGEu
aGVpZ2h0KCkpKTsKLX0KLQotfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2Jl
cnJ5L1dlYktpdFN1cHBvcnQvSW5SZWdpb25TY3JvbGxlci5oIGIvU291cmNlL1dlYktpdC9ibGFj
a2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5SZWdpb25TY3JvbGxlci5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBlOWIxOTEyLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvYmxhY2ti
ZXJyeS9XZWJLaXRTdXBwb3J0L0luUmVnaW9uU2Nyb2xsZXIuaAorKysgL2Rldi9udWxsCkBAIC0x
LDY3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgUmVzZWFyY2ggSW4g
TW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwot
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
LSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgot
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3
cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8K
LQotI2lmbmRlZiBJblJlZ2lvblNjcm9sbGVyX2gKLSNkZWZpbmUgSW5SZWdpb25TY3JvbGxlcl9o
Ci0KLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0KLSNpbmNsdWRlIDxpbnRlcmFjdGlvbi9TY3JvbGxW
aWV3QmFzZS5oPgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xh
c3MgRnJhbWU7Ci1jbGFzcyBOb2RlOwotY2xhc3MgUmVuZGVyT2JqZWN0OwotfQotCi1uYW1lc3Bh
Y2UgQmxhY2tCZXJyeSB7Ci1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViUGFnZVByaXZh
dGU7Ci0KLWNsYXNzIEluUmVnaW9uU2Nyb2xsZXIgewotCi1wdWJsaWM6Ci0gICAgSW5SZWdpb25T
Y3JvbGxlcihXZWJQYWdlUHJpdmF0ZSopOwotCi0gICAgdm9pZCBzZXROb2RlKFdlYkNvcmU6Ok5v
ZGUqKTsKLSAgICBXZWJDb3JlOjpOb2RlKiBub2RlKCkgY29uc3Q7Ci0gICAgdm9pZCByZXNldCgp
OwotCi0gICAgYm9vbCBjYW5TY3JvbGwoKSBjb25zdDsKLSAgICBib29sIGhhc05vZGUoKSBjb25z
dDsKLQotICAgIGJvb2wgc2Nyb2xsQnkoY29uc3QgUGxhdGZvcm06OkludFNpemUmIGRlbHRhKTsK
LQotICAgIHN0ZDo6dmVjdG9yPFBsYXRmb3JtOjpTY3JvbGxWaWV3QmFzZSo+IGluUmVnaW9uU2Ny
b2xsYWJsZUFyZWFzRm9yUG9pbnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKLXByaXZhdGU6
Ci0KLSAgICBib29sIHNjcm9sbE5vZGVSZWN1cnNpdmVseShXZWJDb3JlOjpOb2RlKiwgY29uc3Qg
V2ViQ29yZTo6SW50U2l6ZSYgZGVsdGEpOwotICAgIGJvb2wgc2Nyb2xsUmVuZGVyZXIoV2ViQ29y
ZTo6UmVuZGVyT2JqZWN0KiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgZGVsdGEpOwotCi0gICAg
dm9pZCBhZGp1c3RTY3JvbGxEZWx0YShjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgbWF4T2Zmc2V0
LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgY3VycmVudE9mZnNldCwgV2ViQ29yZTo6SW50U2l6
ZSYgZGVsdGEpIGNvbnN0OwotCi0gICAgUmVmUHRyPFdlYkNvcmU6Ok5vZGU+IG1faW5SZWdpb25T
Y3JvbGxTdGFydGluZ05vZGU7Ci0gICAgV2ViUGFnZVByaXZhdGUqIG1fd2ViUGFnZTsKLX07Ci0K
LX0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2Vi
S2l0U3VwcG9ydC9Ub3VjaEV2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVy
cnkvV2ViS2l0U3VwcG9ydC9Ub3VjaEV2ZW50SGFuZGxlci5jcHAKaW5kZXggYzRjODQ3OC4uYzJl
MzAxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQv
VG91Y2hFdmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJL
aXRTdXBwb3J0L1RvdWNoRXZlbnRIYW5kbGVyLmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1
ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRl
ICJIVE1MUGx1Z0luRWxlbWVudC5oIgorI2luY2x1ZGUgIkluUmVnaW9uU2Nyb2xsZXJfcC5oIgog
I2luY2x1ZGUgIklucHV0SGFuZGxlci5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRl
ICJJbnRTaXplLmgiCkBAIC0zMzksNyArMzQwLDcgQEAgdm9pZCBUb3VjaEV2ZW50SGFuZGxlcjo6
ZHJhd1RhcEhpZ2hsaWdodCgpCiAgICAgLy8gT24gdGhlIGNsaWVudCBzaWRlLCB0aGlzIGluZm8g
aXMgYmVpbmcgdXNlZCB0byBoaWRlIHRoZSB0YXAgaGlnaGxpZ2h0IHdpbmRvdyBvbiBzY3JvbGwu
CiAgICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gbV93ZWJQYWdlLT5lbmNsb3NpbmdGaXhlZFBvc2l0
aW9uZWRBbmNlc3Rvck9yU2VsZklmRml4ZWRQb3NpdGlvbmVkKHJlbmRlcmVyLT5lbmNsb3NpbmdM
YXllcigpKTsKICAgICBib29sIHNob3VsZEhpZGVUYXBIaWdobGlnaHRSaWdodEFmdGVyU2Nyb2xs
aW5nID0gIWxheWVyLT5yZW5kZXJlcigpLT5pc1JlbmRlclZpZXcoKTsKLSAgICBzaG91bGRIaWRl
VGFwSGlnaGxpZ2h0UmlnaHRBZnRlclNjcm9sbGluZyB8PSAhIW1fd2ViUGFnZS0+bV9pblJlZ2lv
blNjcm9sbGVyLT5ub2RlKCk7CisgICAgc2hvdWxkSGlkZVRhcEhpZ2hsaWdodFJpZ2h0QWZ0ZXJT
Y3JvbGxpbmcgfD0gISFtX3dlYlBhZ2UtPm1faW5SZWdpb25TY3JvbGxlci0+ZC0+bm9kZSgpOwog
CiAgICAgSW50UG9pbnQgZnJhbWVQb3MobV93ZWJQYWdlLT5mcmFtZU9mZnNldChlbGVtZW50RnJh
bWUpKTsKIAotLSAKMS43LjUuNAoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>157251</attachid>
            <date>2012-08-08 10:43:31 -0700</date>
            <delta_ts>2012-08-08 11:25:56 -0700</delta_ts>
            <desc>patch - fixed konrad&apos;s suggestions</desc>
            <filename>0001-BlackBerry-Tie-up-the-scrolling-machinery-to-the-gra.patch</filename>
            <type>text/plain</type>
            <size>51282</size>
            <attacher name="Antonio Gomes">tonikitoo</attacher>
            
              <data encoding="base64">RnJvbSA5YWJkMzI5NjJjMTRkY2JiOTk1NGU0Y2I0MzEzNWZjYTQ2MzA3MjZmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbnRvbmlvIEdvbWVzIDxhZ29tZXNAcmltLmNvbT4KRGF0ZTog
V2VkLCA4IEF1ZyAyMDEyIDEyOjIzOjA0IC0wNDAwClN1YmplY3Q6IFtQQVRDSF0gW0JsYWNrQmVy
cnldIFRpZSB1cCB0aGUgc2Nyb2xsaW5nIG1hY2hpbmVyeSB0byB0aGUgZ3JhcGhpY3MKIHRyZWUg
d2hlbiBhcHBsaWNhYmxlIGZvciBpbi1yZWdpb24gc2Nyb2xsCiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTM0ODIgUFIgIzE4NzY3MgogTWFrZSBJblJlZ2lvblNjcm9s
bGVyIGEgc2ltcGxlIHB1YmxpYyB3ZWJraXQvIEFQSSBQUgogIzE4ODY3NwoKUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuClBhdGNoIGJ5IEFudG9uaW8gR29tZXMgPGFnb21lc0ByaW0uY29tPgoK
SW4gb3JkZXIgdG8gcHJlcGFyZSBJblJlZ2lvblNjcm9sbGVyIHRvIGJlIGEgcHVibGljIEFQSQpp
biB3ZWJraXQvLCB0aGUgcGF0Y2g6CgoxKSBSZW5hbWVkIHRoZSBjdXJyZW50IEluUmVnaW9uU2Ny
b2xsZXIgY2xhc3MgdG8gSW5SZWdpb25TY3JvbGxlclByaXZhdGU7CjIpIE1vdmVkIEluUmVnaW9u
U2Nyb2xsZXIuY3BwfGggZnJvbSBXZWJLaXRTdXBwb3J0LyB0byBBcGkvOwozKSBSZW5hbWVkIElu
UmVnaW9uU2Nyb2xsZXIuaCB0byBJblJlZ2lvblNjcm9sbGVyX3AuaDsKNCkgQWRkZWQgYSBuZXcg
cHVibGljIGNsYXNzIGltcGxlbWVudGF0aW9uIHRvIEluUmVnaW9uU2Nyb2xsZXIuaDsKNSkgQWRh
cHRlZCBXZWJQYWdlIGFuZCBUb3VjaEV2ZW50SGFuZGxlciBjbGFzc2VzIHRvIHVzZSBJblJlZ2lv
blNjcm9sbGVyOjpkIGRpcmVjdGx5LgoKVGhlIG1vc3QgaW1wb3J0YW50IEFQSSBoZXJlIGlzICc6
OmNvbXBvc2l0ZWRTZXRTY3JvbGxQb3NpdGlvbicKCkl0IGlzIGEgIFVJL0NvbXBvc2l0aW5nIHRo
cmVhZCBtZXRob2Qgb25seSBhbmQgc2V0cyB0aGUgYXNzb2NpYXRlZCBMYXllckNvbXBvc2l0aW5n
VGhyZWFkCihjYW1vdWZsYWdlZCBhcyBhIHVuc2lnbmVkKSBmb3IgZWFjaCBjcmVhdGVkIEluUmVn
aW9uU2Nyb2xsYWJsZUFyZWEgdGhhdCBzdXBwb3J0cwpjb21wb3NpdGVkIHNjcm9sbGluZy4KClRo
ZSB3YXkgOjpjb21wb3NpdGVkU2V0U2Nyb2xsUG9zaXRpb24gInNjcm9sbHMiIGEgbGF5ZXIgaXMg
Ynkgc2V0dGluZyB0aGUgYm91bmRzT3JpZ2luCnByb3BlcnR5IHRvIHRoZSBMYXllckNvbXBvc2l0
aW5nVGhyZWFkJ3MgJ292ZXJyaWRlJyBwcm9wZXJ0eSBpbiB0aGUgVUkvQ29tcG9zaXRpbmcgdGhy
ZWFkLgoKKiBQbGF0Zm9ybUJsYWNrQmVycnkuY21ha2U6IEJ1aWxkIHN5c3RlbSBhZGFwdGF0aW9u
LgoKKiBBcGkvSW5SZWdpb25TY3JvbGxlci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0
L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JblJlZ2lvblNjcm9sbGVyLmNwcC4KKFdlYktpdCk6
CihCbGFja0JlcnJ5OjpXZWJLaXQ6OkluUmVnaW9uU2Nyb2xsZXI6OkluUmVnaW9uU2Nyb2xsZXIp
OgooQmxhY2tCZXJyeTo6V2ViS2l0OjpJblJlZ2lvblNjcm9sbGVyOjp+SW5SZWdpb25TY3JvbGxl
cik6CihCbGFja0JlcnJ5OjpXZWJLaXQ6OkluUmVnaW9uU2Nyb2xsZXI6OmNvbXBvc2l0ZWRTZXRT
Y3JvbGxQb3NpdGlvbik6CihCbGFja0JlcnJ5OjpXZWJLaXQ6OkluUmVnaW9uU2Nyb2xsZXJQcml2
YXRlOjpJblJlZ2lvblNjcm9sbGVyUHJpdmF0ZSk6CihCbGFja0JlcnJ5OjpXZWJLaXQ6OkluUmVn
aW9uU2Nyb2xsZXJQcml2YXRlOjpzZXROb2RlKToKKEJsYWNrQmVycnk6OldlYktpdDo6SW5SZWdp
b25TY3JvbGxlclByaXZhdGU6Om5vZGUpOgooQmxhY2tCZXJyeTo6V2ViS2l0OjpJblJlZ2lvblNj
cm9sbGVyUHJpdmF0ZTo6cmVzZXQpOgooQmxhY2tCZXJyeTo6V2ViS2l0OjpJblJlZ2lvblNjcm9s
bGVyUHJpdmF0ZTo6aGFzTm9kZSk6CihCbGFja0JlcnJ5OjpXZWJLaXQ6OkluUmVnaW9uU2Nyb2xs
ZXJQcml2YXRlOjpjYW5TY3JvbGwpOgooQmxhY2tCZXJyeTo6V2ViS2l0OjpJblJlZ2lvblNjcm9s
bGVyUHJpdmF0ZTo6Y29tcG9zaXRlZFNldFNjcm9sbFBvc2l0aW9uKToKKEJsYWNrQmVycnk6Oldl
YktpdDo6SW5SZWdpb25TY3JvbGxlclByaXZhdGU6OnNjcm9sbEJ5KToKKEJsYWNrQmVycnk6Oldl
YktpdDo6SW5SZWdpb25TY3JvbGxlclByaXZhdGU6OmluUmVnaW9uU2Nyb2xsYWJsZUFyZWFzRm9y
UG9pbnQpOgooQmxhY2tCZXJyeTo6V2ViS2l0OjpJblJlZ2lvblNjcm9sbGVyUHJpdmF0ZTo6c2Ny
b2xsTm9kZVJlY3Vyc2l2ZWx5KToKKEJsYWNrQmVycnk6OldlYktpdDo6SW5SZWdpb25TY3JvbGxl
clByaXZhdGU6OnNjcm9sbFJlbmRlcmVyKToKKEJsYWNrQmVycnk6OldlYktpdDo6SW5SZWdpb25T
Y3JvbGxlclByaXZhdGU6OmFkanVzdFNjcm9sbERlbHRhKToKKEJsYWNrQmVycnk6OldlYktpdDo6
Y2FuU2Nyb2xsSW5uZXJGcmFtZSk6CihCbGFja0JlcnJ5OjpXZWJLaXQ6OmNhblNjcm9sbFJlbmRl
ckJveCk6CihCbGFja0JlcnJ5OjpXZWJLaXQ6OnBhcmVudExheWVyKToKKEJsYWNrQmVycnk6Oldl
YktpdDo6ZW5jbG9zaW5nTGF5ZXJOb2RlKToKKEJsYWNrQmVycnk6OldlYktpdDo6aXNOb25SZW5k
ZXJWaWV3Rml4ZWRQb3NpdGlvbmVkQ29udGFpbmVyKToKKEJsYWNrQmVycnk6OldlYktpdDo6cHVz
aEJhY2tJblJlZ2lvblNjcm9sbGFibGUpOgoqIEFwaS9JblJlZ2lvblNjcm9sbGVyLmg6IENvcGll
ZCBmcm9tIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0luUmVnaW9uU2Ny
b2xsZXIuaC4KKFdlYktpdCk6CihJblJlZ2lvblNjcm9sbGVyKToKKiBBcGkvSW5SZWdpb25TY3Jv
bGxlcl9wLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3Vw
cG9ydC9JblJlZ2lvblNjcm9sbGVyLmguCihXZWJDb3JlKToKKFdlYktpdCk6CihJblJlZ2lvblNj
cm9sbGVyUHJpdmF0ZSk6CiogQXBpL1dlYlBhZ2UuY3BwOgooQmxhY2tCZXJyeTo6V2ViS2l0OjpX
ZWJQYWdlUHJpdmF0ZTo6c2Nyb2xsQnkpOgooQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJQYWdlUHJp
dmF0ZTo6bm90aWZ5SW5SZWdpb25TY3JvbGxTdGF0dXNDaGFuZ2VkKToKKEJsYWNrQmVycnk6Oldl
YktpdDo6V2ViUGFnZVByaXZhdGU6OmNsZWFyRG9jdW1lbnREYXRhKToKKEJsYWNrQmVycnk6Oldl
YktpdDo6V2ViUGFnZVByaXZhdGU6OnNldFNjcm9sbE9yaWdpblBvaW50KToKKEJsYWNrQmVycnk6
OldlYktpdDo6V2ViUGFnZTo6aW5SZWdpb25TY3JvbGxlcik6CihXZWJLaXQpOgoqIEFwaS9XZWJQ
YWdlLmg6CihXZWJLaXQpOgoqIFdlYktpdFN1cHBvcnQvSW5SZWdpb25TY3JvbGxhYmxlQXJlYS5j
cHA6CihCbGFja0JlcnJ5OjpXZWJLaXQ6OkluUmVnaW9uU2Nyb2xsYWJsZUFyZWE6OkluUmVnaW9u
U2Nyb2xsYWJsZUFyZWEpOgoqIFdlYktpdFN1cHBvcnQvVG91Y2hFdmVudEhhbmRsZXIuY3BwOgoo
QmxhY2tCZXJyeTo6V2ViS2l0OjpUb3VjaEV2ZW50SGFuZGxlcjo6ZHJhd1RhcEhpZ2hsaWdodCk6
Ci0tLQogU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fCAgICA5ICsKIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtlICAgICAgICAg
ICAgIHwgICAgMiArLQogU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9JblJlZ2lvblNjcm9s
bGVyLmNwcCAgfCAgMzkzICsrKysrKysrKysrKysrKysrKysrCiBTb3VyY2UvV2ViS2l0L2JsYWNr
YmVycnkvQXBpL0luUmVnaW9uU2Nyb2xsZXIuaCAgICB8ICAgNDggKysrCiBTb3VyY2UvV2ViS2l0
L2JsYWNrYmVycnkvQXBpL0luUmVnaW9uU2Nyb2xsZXJfcC5oICB8ICAgNzAgKysrKwogU291cmNl
L1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJQYWdlLmNwcCAgICAgICAgICAgfCAgIDIyICstCiBT
b3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2UuaCAgICAgICAgICAgICB8ICAgIDMg
KwogU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgfCAg
IDcyICsrKysKIC4uLi9XZWJLaXRTdXBwb3J0L0luUmVnaW9uU2Nyb2xsYWJsZUFyZWEuY3BwICAg
ICAgIHwgICAxMyArLQogLi4uL2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JblJlZ2lvblNjcm9s
bGVyLmNwcCAgfCAgMzU2IC0tLS0tLS0tLS0tLS0tLS0tLQogLi4uL2JsYWNrYmVycnkvV2ViS2l0
U3VwcG9ydC9JblJlZ2lvblNjcm9sbGVyLmggICAgfCAgIDY3IC0tLS0KIC4uLi9ibGFja2JlcnJ5
L1dlYktpdFN1cHBvcnQvVG91Y2hFdmVudEhhbmRsZXIuY3BwIHwgICAgMyArLQogMTIgZmlsZXMg
Y2hhbmdlZCwgNjI0IGluc2VydGlvbnMoKyksIDQzNCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL0luUmVnaW9uU2Nyb2xsZXIuY3Bw
CiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9JblJlZ2lv
blNjcm9sbGVyLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkv
QXBpL0luUmVnaW9uU2Nyb2xsZXJfcC5oCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktp
dC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5SZWdpb25TY3JvbGxlci5jcHAKIGRlbGV0ZSBt
b2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JblJlZ2lv
blNjcm9sbGVyLmgKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGRmOGI4OTIuLjUzN2FjMzQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTIgQEAKKzIwMTItMDgtMDggIEFudG9uaW8gR29tZXMgIDxhZ29tZXNAcmltLmNvbT4K
KworICAgICAgICBbQmxhY2tCZXJyeV0gVGllIHVwIHRoZSBzY3JvbGxpbmcgbWFjaGluZXJ5IHRv
IHRoZSBncmFwaGljcyB0cmVlIHdoZW4gYXBwbGljYWJsZSBmb3IgaW4tcmVnaW9uIHNjcm9sbAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTM0ODIKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFBsYXRmb3Jt
QmxhY2tCZXJyeS5jbWFrZTogQnVpbGQgc3lzdGVtIGFkYXB0YXRpb24uCisKIDIwMTItMDgtMDcg
IFJ5dWFuIENob2kgIDxyeXVhbi5jaG9pQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFtFRkxdIFJl
bW92ZSBQbGF0Zm9ybVRvdWNoRXZlbnRFZmwgYW5kIFBsYXRmb3JtVG91Y2hQb2ludEVmbApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybUJsYWNrQmVycnkuY21ha2UgYi9Tb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtQmxhY2tCZXJyeS5jbWFrZQppbmRleCBlZTExZWQ2Li5hNzgxNTI5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtQmxhY2tCZXJyeS5jbWFrZQorKysgYi9T
b3VyY2UvV2ViS2l0L1BsYXRmb3JtQmxhY2tCZXJyeS5jbWFrZQpAQCAtNTcsNiArNTcsNyBAQCBB
RERfREVGSU5JVElPTlMoLURVU0VSX1BST0NFU1NFUykKIExJU1QoQVBQRU5EIFdlYktpdF9TT1VS
Q0VTCiAgICAgYmxhY2tiZXJyeS9BcGkvQmFja2luZ1N0b3JlLmNwcAogICAgIGJsYWNrYmVycnkv
QXBpL0JsYWNrQmVycnlHbG9iYWwuY3BwCisgICAgYmxhY2tiZXJyeS9BcGkvSW5SZWdpb25TY3Jv
bGxlci5jcHAKICAgICBibGFja2JlcnJ5L0FwaS9XZWJBbmltYXRpb24uY3BwCiAgICAgYmxhY2ti
ZXJyeS9BcGkvV2ViS2l0TUlNRVR5cGVDb252ZXJ0ZXIuY3BwCiAgICAgYmxhY2tiZXJyeS9BcGkv
V2ViS2l0VGV4dENvZGVjLmNwcApAQCAtMTAwLDcgKzEwMSw2IEBAIExJU1QoQVBQRU5EIFdlYktp
dF9TT1VSQ0VTCiAgICAgYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0luUGFnZVNlYXJjaE1hbmFn
ZXIuY3BwCiAgICAgYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0lucHV0SGFuZGxlci5jcHAKICAg
ICBibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5SZWdpb25TY3JvbGxhYmxlQXJlYS5jcHAKLSAg
ICBibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5SZWdpb25TY3JvbGxlci5jcHAKICAgICBibGFj
a2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5zcGVjdG9yT3ZlcmxheS5jcHAKICAgICBibGFja2JlcnJ5
L1dlYktpdFN1cHBvcnQvUmVuZGVyUXVldWUuY3BwCiAgICAgYmxhY2tiZXJyeS9XZWJLaXRTdXBw
b3J0L1NlbGVjdGlvbkhhbmRsZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNr
YmVycnkvQXBpL0luUmVnaW9uU2Nyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5
L0FwaS9JblJlZ2lvblNjcm9sbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi4wOTAxMmMxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5
L0FwaS9JblJlZ2lvblNjcm9sbGVyLmNwcApAQCAtMCwwICsxLDM5MyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSwgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl
CisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBC
b3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiSW5SZWdpb25TY3JvbGxlci5oIgorCisjaW5jbHVkZSAiQmFja2luZ1N0b3JlQ2xp
ZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJIVE1MRnJhbWVPd25lckVsZW1l
bnQuaCIKKyNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCisjaW5jbHVkZSAiSW5SZWdpb25TY3Jv
bGxhYmxlQXJlYS5oIgorI2luY2x1ZGUgIkluUmVnaW9uU2Nyb2xsZXJfcC5oIgorI2luY2x1ZGUg
IkxheWVyQ29tcG9zaXRpbmdUaHJlYWQuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAi
UmVuZGVyQm94LmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJP
YmplY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCisjaW5jbHVkZSAiV2ViUGFnZV9wLmgi
CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgQmxhY2tCZXJyeSB7Citu
YW1lc3BhY2UgV2ViS2l0IHsKKworc3RhdGljIGJvb2wgY2FuU2Nyb2xsSW5uZXJGcmFtZShGcmFt
ZSopOworc3RhdGljIGJvb2wgY2FuU2Nyb2xsUmVuZGVyQm94KFJlbmRlckJveCopOworc3RhdGlj
IFJlbmRlckxheWVyKiBwYXJlbnRMYXllcihSZW5kZXJMYXllciopOworc3RhdGljIE5vZGUqIGVu
Y2xvc2luZ0xheWVyTm9kZShSZW5kZXJMYXllciopOworc3RhdGljIGJvb2wgaXNOb25SZW5kZXJW
aWV3Rml4ZWRQb3NpdGlvbmVkQ29udGFpbmVyKFJlbmRlckxheWVyKik7CitzdGF0aWMgdm9pZCBw
dXNoQmFja0luUmVnaW9uU2Nyb2xsYWJsZShzdGQ6OnZlY3RvcjxQbGF0Zm9ybTo6U2Nyb2xsVmll
d0Jhc2UqPiYsIEluUmVnaW9uU2Nyb2xsYWJsZUFyZWEqLCBJblJlZ2lvblNjcm9sbGVyUHJpdmF0
ZSopOworCitJblJlZ2lvblNjcm9sbGVyOjpJblJlZ2lvblNjcm9sbGVyKFdlYlBhZ2VQcml2YXRl
KiB3ZWJQYWdlUHJpdmF0ZSkKKyAgICA6IGQobmV3IEluUmVnaW9uU2Nyb2xsZXJQcml2YXRlKHdl
YlBhZ2VQcml2YXRlKSkKK3sKKyAgICBBU1NFUlQod2ViUGFnZVByaXZhdGUpOworfQorCitJblJl
Z2lvblNjcm9sbGVyOjp+SW5SZWdpb25TY3JvbGxlcigpCit7CisgICAgZGVsZXRlIGQ7Cit9CisK
K2Jvb2wgSW5SZWdpb25TY3JvbGxlcjo6Y29tcG9zaXRlZFNldFNjcm9sbFBvc2l0aW9uKHVuc2ln
bmVkIGNhbW91ZmxhZ2VkTGF5ZXIsIGNvbnN0IFBsYXRmb3JtOjpJbnRQb2ludCYgc2Nyb2xsUG9z
aXRpb24pCit7CisgICAgQVNTRVJUKFBsYXRmb3JtOjp1c2VySW50ZXJmYWNlVGhyZWFkTWVzc2Fn
ZUNsaWVudCgpLT5pc0N1cnJlbnRUaHJlYWQoKSk7CisgICAgcmV0dXJuIGQtPmNvbXBvc2l0ZWRT
ZXRTY3JvbGxQb3NpdGlvbihjYW1vdWZsYWdlZExheWVyLCBkLT5tX3dlYlBhZ2UtPm1hcEZyb21U
cmFuc2Zvcm1lZChzY3JvbGxQb3NpdGlvbikpOworfQorCitJblJlZ2lvblNjcm9sbGVyUHJpdmF0
ZTo6SW5SZWdpb25TY3JvbGxlclByaXZhdGUoV2ViUGFnZVByaXZhdGUqIHdlYlBhZ2VQcml2YXRl
KQorICAgIDogbV93ZWJQYWdlKHdlYlBhZ2VQcml2YXRlKQoreworfQorCit2b2lkIEluUmVnaW9u
U2Nyb2xsZXJQcml2YXRlOjpzZXROb2RlKFdlYkNvcmU6Ok5vZGUqIG5vZGUpCit7CisgICAgbV9p
blJlZ2lvblNjcm9sbFN0YXJ0aW5nTm9kZSA9IG5vZGU7Cit9CisKK1dlYkNvcmU6Ok5vZGUqIElu
UmVnaW9uU2Nyb2xsZXJQcml2YXRlOjpub2RlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pblJl
Z2lvblNjcm9sbFN0YXJ0aW5nTm9kZS5nZXQoKTsKK30KKwordm9pZCBJblJlZ2lvblNjcm9sbGVy
UHJpdmF0ZTo6cmVzZXQoKQoreworICAgIHNldE5vZGUoMCk7Cit9CisKK2Jvb2wgSW5SZWdpb25T
Y3JvbGxlclByaXZhdGU6Omhhc05vZGUoKSBjb25zdAoreworICAgIHJldHVybiAhIW1faW5SZWdp
b25TY3JvbGxTdGFydGluZ05vZGU7Cit9CisKK2Jvb2wgSW5SZWdpb25TY3JvbGxlclByaXZhdGU6
OmNhblNjcm9sbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc05vZGUoKTsKK30KKworYm9vbCBJ
blJlZ2lvblNjcm9sbGVyUHJpdmF0ZTo6Y29tcG9zaXRlZFNldFNjcm9sbFBvc2l0aW9uKHVuc2ln
bmVkIGNhbW91ZmxhZ2VkTGF5ZXIsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBzY3JvbGxQb3Np
dGlvbikKK3sKKyAgICBMYXllckNvbXBvc2l0aW5nVGhyZWFkKiBzY3JvbGxMYXllciA9IHJlaW50
ZXJwcmV0X2Nhc3Q8TGF5ZXJDb21wb3NpdGluZ1RocmVhZCo+KGNhbW91ZmxhZ2VkTGF5ZXIpOwor
ICAgIHNjcm9sbExheWVyLT5vdmVycmlkZSgpLT5zZXRCb3VuZHNPcmlnaW4oV2ViQ29yZTo6Rmxv
YXRQb2ludChzY3JvbGxQb3NpdGlvbi54KCksIHNjcm9sbFBvc2l0aW9uLnkoKSkpOworCisgICAg
bV93ZWJQYWdlLT5zY2hlZHVsZUNvbXBvc2l0aW5nUnVuKCk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgSW5SZWdpb25TY3JvbGxlclByaXZhdGU6OnNjcm9sbEJ5KGNvbnN0IFBsYXRmb3Jt
OjpJbnRTaXplJiBkZWx0YSkKK3sKKyAgICBBU1NFUlQoUGxhdGZvcm06OndlYmtpdFRocmVhZE1l
c3NhZ2VDbGllbnQoKS0+aXNDdXJyZW50VGhyZWFkKCkpOworCisgICAgaWYgKCFjYW5TY3JvbGwo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHNjcm9sbE5vZGVSZWN1cnNp
dmVseShub2RlKCksIGRlbHRhKTsKK30KKworc3RkOjp2ZWN0b3I8UGxhdGZvcm06OlNjcm9sbFZp
ZXdCYXNlKj4gSW5SZWdpb25TY3JvbGxlclByaXZhdGU6OmluUmVnaW9uU2Nyb2xsYWJsZUFyZWFz
Rm9yUG9pbnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvaW50KQoreworICAgIHN0ZDo6dmVj
dG9yPFBsYXRmb3JtOjpTY3JvbGxWaWV3QmFzZSo+IHZhbGlkUmV0dXJuOworICAgIHN0ZDo6dmVj
dG9yPFBsYXRmb3JtOjpTY3JvbGxWaWV3QmFzZSo+IGVtcHR5UmV0dXJuOworCisgICAgSGl0VGVz
dFJlc3VsdCByZXN1bHQgPSBtX3dlYlBhZ2UtPm1fbWFpbkZyYW1lLT5ldmVudEhhbmRsZXIoKS0+
aGl0VGVzdFJlc3VsdEF0UG9pbnQobV93ZWJQYWdlLT5tYXBGcm9tVmlld3BvcnRUb0NvbnRlbnRz
KHBvaW50KSwgZmFsc2UgLyphbGxvd1NoYWRvd0NvbnRlbnQqLyk7CisgICAgTm9kZSogbm9kZSA9
IHJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKTsKKyAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPnJl
bmRlcmVyKCkpCisgICAgICAgIHJldHVybiBlbXB0eVJldHVybjsKKworICAgIFJlbmRlckxheWVy
KiBsYXllciA9IG5vZGUtPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCk7CisgICAgZG8gewor
ICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbGF5ZXItPnJlbmRlcmVyKCk7CisKKyAg
ICAgICAgaWYgKHJlbmRlcmVyLT5pc1JlbmRlclZpZXcoKSkgeworICAgICAgICAgICAgaWYgKFJl
bmRlclZpZXcqIHJlbmRlclZpZXcgPSB0b1JlbmRlclZpZXcocmVuZGVyZXIpKSB7CisgICAgICAg
ICAgICAgICAgRnJhbWVWaWV3KiB2aWV3ID0gcmVuZGVyVmlldy0+ZnJhbWVWaWV3KCk7CisgICAg
ICAgICAgICAgICAgaWYgKCF2aWV3KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW1wdHlS
ZXR1cm47CisKKyAgICAgICAgICAgICAgICBpZiAoY2FuU2Nyb2xsSW5uZXJGcmFtZSh2aWV3LT5m
cmFtZSgpKSkgeworICAgICAgICAgICAgICAgICAgICBwdXNoQmFja0luUmVnaW9uU2Nyb2xsYWJs
ZSh2YWxpZFJldHVybiwgbmV3IEluUmVnaW9uU2Nyb2xsYWJsZUFyZWEobV93ZWJQYWdlLCBsYXll
ciksIHRoaXMpOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoY2FuU2Nyb2xsUmVuZGVyQm94
KGxheWVyLT5yZW5kZXJCb3goKSkpIHsKKyAgICAgICAgICAgIHB1c2hCYWNrSW5SZWdpb25TY3Jv
bGxhYmxlKHZhbGlkUmV0dXJuLCBuZXcgSW5SZWdpb25TY3JvbGxhYmxlQXJlYShtX3dlYlBhZ2Us
IGxheWVyKSwgdGhpcyk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vIElmIHdlIHJ1biBpbnRvIGEgZml4IHBvc2l0aW9uZWQgbGF5ZXIsIHNldCB0aGUgbGFz
dCBzY3JvbGxhYmxlIGluLXJlZ2lvbiBvYmplY3QKKyAgICAgICAgLy8gYXMgbm90IGFibGUgdG8g
cHJvcGFnYXRlIHNjcm9sbCB0byBpdHMgcGFyZW50IHNjcm9sbGFibGUuCisgICAgICAgIGlmIChp
c05vblJlbmRlclZpZXdGaXhlZFBvc2l0aW9uZWRDb250YWluZXIobGF5ZXIpICYmIHZhbGlkUmV0
dXJuLnNpemUoKSkgeworICAgICAgICAgICAgUGxhdGZvcm06OlNjcm9sbFZpZXdCYXNlKiBlbmQg
PSB2YWxpZFJldHVybi5iYWNrKCk7CisgICAgICAgICAgICBlbmQtPnNldENhblByb3BhZ2F0ZVNj
cm9sbGluZ1RvRW5jbG9zaW5nU2Nyb2xsYWJsZShmYWxzZSk7CisgICAgICAgIH0KKworICAgIH0g
d2hpbGUgKGxheWVyID0gcGFyZW50TGF5ZXIobGF5ZXIpKTsKKworICAgIGlmICh2YWxpZFJldHVy
bi5lbXB0eSgpKQorICAgICAgICByZXR1cm4gZW1wdHlSZXR1cm47CisKKyAgICAvLyBQb3N0LWNh
bGN1bGF0ZSB0aGUgdmlzaWJsZSB3aW5kb3cgcmVjdHMgaW4gcmV2ZXJzZSBoaXQgdGVzdCBvcmRl
ciBzbworICAgIC8vIHdlIGFjY291bnQgZm9yIGFsbCBhbmQgYW55IGNsaXBwaW5nIHJlY3RzLgor
ICAgIFdlYkNvcmU6OkludFJlY3QgcmVjdXJzaXZlQ2xpcHBpbmdSZWN0KFdlYkNvcmU6OkludFBv
aW50Ojp6ZXJvKCksIG1fd2ViUGFnZS0+dHJhbnNmb3JtZWRWaWV3cG9ydFNpemUoKSk7CisKKyAg
ICBzdGQ6OnZlY3RvcjxQbGF0Zm9ybTo6U2Nyb2xsVmlld0Jhc2UqPjo6cmV2ZXJzZV9pdGVyYXRv
ciByZW5kID0gdmFsaWRSZXR1cm4ucmVuZCgpOworICAgIGZvciAoc3RkOjp2ZWN0b3I8UGxhdGZv
cm06OlNjcm9sbFZpZXdCYXNlKj46OnJldmVyc2VfaXRlcmF0b3Igcml0ID0gdmFsaWRSZXR1cm4u
cmJlZ2luKCk7IHJpdCAhPSByZW5kOyArK3JpdCkgeworCisgICAgICAgIEluUmVnaW9uU2Nyb2xs
YWJsZUFyZWEqIGN1cnIgPSBzdGF0aWNfY2FzdDxJblJlZ2lvblNjcm9sbGFibGVBcmVhKj4oKnJp
dCk7CisgICAgICAgIFJlbmRlckxheWVyKiBsYXllciA9IGN1cnItPmxheWVyKCk7CisKKyAgICAg
ICAgaWYgKGxheWVyICYmIGxheWVyLT5yZW5kZXJlcigpLT5pc1JlbmRlclZpZXcoKSkgeyAvLyAj
ZG9jdW1lbnQgY2FzZQorICAgICAgICAgICAgRnJhbWVWaWV3KiB2aWV3ID0gdG9SZW5kZXJWaWV3
KGxheWVyLT5yZW5kZXJlcigpKS0+ZnJhbWVWaWV3KCk7CisgICAgICAgICAgICBBU1NFUlQodmll
dyk7CisgICAgICAgICAgICBBU1NFUlQoY2FuU2Nyb2xsSW5uZXJGcmFtZSh2aWV3LT5mcmFtZSgp
KSk7CisKKyAgICAgICAgICAgIFdlYkNvcmU6OkludFJlY3QgZnJhbWVXaW5kb3dSZWN0ID0gbV93
ZWJQYWdlLT5tYXBUb1RyYW5zZm9ybWVkKG1fd2ViUGFnZS0+Z2V0UmVjdXJzaXZlVmlzaWJsZVdp
bmRvd1JlY3QodmlldykpOworICAgICAgICAgICAgZnJhbWVXaW5kb3dSZWN0LmludGVyc2VjdChy
ZWN1cnNpdmVDbGlwcGluZ1JlY3QpOworICAgICAgICAgICAgY3Vyci0+c2V0VmlzaWJsZVdpbmRv
d1JlY3QoZnJhbWVXaW5kb3dSZWN0KTsKKyAgICAgICAgICAgIHJlY3Vyc2l2ZUNsaXBwaW5nUmVj
dCA9IGZyYW1lV2luZG93UmVjdDsKKworICAgICAgICB9IGVsc2UgeyAvLyBSZW5kZXJCb3gtYmFz
ZWQgZWxlbWVudHMgY2FzZSAoc2Nyb2xsYWJsZSBib3hlcyAoZGl2J3MsIHAncywgdGV4dGFyZWEn
cywgZXRjKSkuCisKKyAgICAgICAgICAgIFJlbmRlckJveCogYm94ID0gbGF5ZXItPnJlbmRlckJv
eCgpOworICAgICAgICAgICAgQVNTRVJUKGJveCk7CisgICAgICAgICAgICBBU1NFUlQoY2FuU2Ny
b2xsUmVuZGVyQm94KGJveCkpOworCisgICAgICAgICAgICBXZWJDb3JlOjpJbnRSZWN0IHZpc2li
bGVXaW5kb3dSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChib3gtPmFic29sdXRlQ2xpcHBlZE92ZXJm
bG93UmVjdCgpKTsKKyAgICAgICAgICAgIHZpc2libGVXaW5kb3dSZWN0ID0gYm94LT5mcmFtZSgp
LT52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3codmlzaWJsZVdpbmRvd1JlY3QpOworICAgICAgICAg
ICAgdmlzaWJsZVdpbmRvd1JlY3QgPSBtX3dlYlBhZ2UtPm1hcFRvVHJhbnNmb3JtZWQodmlzaWJs
ZVdpbmRvd1JlY3QpOworICAgICAgICAgICAgdmlzaWJsZVdpbmRvd1JlY3QuaW50ZXJzZWN0KHJl
Y3Vyc2l2ZUNsaXBwaW5nUmVjdCk7CisKKyAgICAgICAgICAgIGN1cnItPnNldFZpc2libGVXaW5k
b3dSZWN0KHZpc2libGVXaW5kb3dSZWN0KTsKKyAgICAgICAgICAgIHJlY3Vyc2l2ZUNsaXBwaW5n
UmVjdCA9IHZpc2libGVXaW5kb3dSZWN0OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJu
IHZhbGlkUmV0dXJuOworfQorCitib29sIEluUmVnaW9uU2Nyb2xsZXJQcml2YXRlOjpzY3JvbGxO
b2RlUmVjdXJzaXZlbHkoV2ViQ29yZTo6Tm9kZSogbm9kZSwgY29uc3QgV2ViQ29yZTo6SW50U2l6
ZSYgZGVsdGEpCit7CisgICAgaWYgKGRlbHRhLmlzWmVybygpKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmVuZGVy
T2JqZWN0KiByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlcikK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgRnJhbWVWaWV3KiB2aWV3ID0gcmVuZGVyZXIt
PnZpZXcoKS0+ZnJhbWVWaWV3KCk7CisgICAgaWYgKCF2aWV3KQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAvLyBUcnkgc2Nyb2xsaW5nIHRoZSByZW5kZXJlci4KKyAgICBpZiAoc2Nyb2xs
UmVuZGVyZXIocmVuZGVyZXIsIGRlbHRhKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAv
LyBXZSd2ZSBoaXQgdGhlIHBhZ2UsIGRvbid0IHNjcm9sbCBpdCBhbmQgcmV0dXJuIGZhbHNlLgor
ICAgIGlmICh2aWV3ID09IG1fd2ViUGFnZS0+bV9tYWluRnJhbWUtPnZpZXcoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgLy8gVHJ5IHNjcm9sbGluZyB0aGUgRnJhbWVWaWV3LgorICAg
IGlmIChjYW5TY3JvbGxJbm5lckZyYW1lKHZpZXctPmZyYW1lKCkpKSB7CisgICAgICAgIEludFNp
emUgdmlld0RlbHRhID0gZGVsdGE7CisgICAgICAgIEludFBvaW50IG5ld1ZpZXdPZmZzZXQgPSB2
aWV3LT5zY3JvbGxQb3NpdGlvbigpOworICAgICAgICBJbnRQb2ludCBtYXhWaWV3T2Zmc2V0ID0g
dmlldy0+bWF4aW11bVNjcm9sbFBvc2l0aW9uKCk7CisgICAgICAgIGFkanVzdFNjcm9sbERlbHRh
KG1heFZpZXdPZmZzZXQsIG5ld1ZpZXdPZmZzZXQsIHZpZXdEZWx0YSk7CisKKyAgICAgICAgaWYg
KCF2aWV3RGVsdGEuaXNaZXJvKCkpIHsKKyAgICAgICAgICAgIHZpZXctPnNldENhbkJsaXRPblNj
cm9sbChmYWxzZSk7CisKKyAgICAgICAgICAgIEJhY2tpbmdTdG9yZUNsaWVudCogYmFja2luZ1N0
b3JlQ2xpZW50ID0gbV93ZWJQYWdlLT5iYWNraW5nU3RvcmVDbGllbnRGb3JGcmFtZSh2aWV3LT5m
cmFtZSgpKTsKKyAgICAgICAgICAgIGlmIChiYWNraW5nU3RvcmVDbGllbnQpIHsKKyAgICAgICAg
ICAgICAgICBiYWNraW5nU3RvcmVDbGllbnQtPnNldElzQ2xpZW50R2VuZXJhdGVkU2Nyb2xsKHRy
dWUpOworICAgICAgICAgICAgICAgIGJhY2tpbmdTdG9yZUNsaWVudC0+c2V0SXNTY3JvbGxOb3Rp
ZmljYXRpb25TdXBwcmVzc2VkKHRydWUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBz
ZXROb2RlKHZpZXctPmZyYW1lKCktPmRvY3VtZW50KCkpOworCisgICAgICAgICAgICB2aWV3LT5z
Y3JvbGxCeSh2aWV3RGVsdGEpOworCisgICAgICAgICAgICBpZiAoYmFja2luZ1N0b3JlQ2xpZW50
KSB7CisgICAgICAgICAgICAgICAgYmFja2luZ1N0b3JlQ2xpZW50LT5zZXRJc0NsaWVudEdlbmVy
YXRlZFNjcm9sbChmYWxzZSk7CisgICAgICAgICAgICAgICAgYmFja2luZ1N0b3JlQ2xpZW50LT5z
ZXRJc1Njcm9sbE5vdGlmaWNhdGlvblN1cHByZXNzZWQoZmFsc2UpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFRy
eSBzY3JvbGxpbmcgdGhlIG5vZGUgb2YgdGhlIGVuY2xvc2luZyBmcmFtZS4KKyAgICBGcmFtZSog
ZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpOworICAgIGlmIChmcmFtZSkgeworICAg
ICAgICBOb2RlKiBvd25lck5vZGUgPSBmcmFtZS0+b3duZXJFbGVtZW50KCk7CisgICAgICAgIGlm
IChzY3JvbGxOb2RlUmVjdXJzaXZlbHkob3duZXJOb2RlLCBkZWx0YSkpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgSW5SZWdp
b25TY3JvbGxlclByaXZhdGU6OnNjcm9sbFJlbmRlcmVyKFdlYkNvcmU6OlJlbmRlck9iamVjdCog
cmVuZGVyZXIsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGRlbHRhKQoreworICAgIFJlbmRlckxh
eWVyKiBsYXllciA9IHJlbmRlcmVyLT5lbmNsb3NpbmdMYXllcigpOworICAgIGlmICghbGF5ZXIp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFRyeSB0byBzY3JvbGwgbGF5ZXIuCisg
ICAgYm9vbCByZXN0cmljdGVkQnlMaW5lQ2xhbXAgPSBmYWxzZTsKKyAgICBpZiAocmVuZGVyZXIt
PnBhcmVudCgpKQorICAgICAgICByZXN0cmljdGVkQnlMaW5lQ2xhbXAgPSAhcmVuZGVyZXItPnBh
cmVudCgpLT5zdHlsZSgpLT5saW5lQ2xhbXAoKS5pc05vbmUoKTsKKworICAgIGlmIChyZW5kZXJl
ci0+aGFzT3ZlcmZsb3dDbGlwKCkgJiYgIXJlc3RyaWN0ZWRCeUxpbmVDbGFtcCkgeworICAgICAg
ICBJbnRTaXplIGxheWVyRGVsdGEgPSBkZWx0YTsKKyAgICAgICAgSW50UG9pbnQgbWF4T2Zmc2V0
KGxheWVyLT5zY3JvbGxXaWR0aCgpIC0gbGF5ZXItPnJlbmRlckJveCgpLT5jbGllbnRXaWR0aCgp
LCBsYXllci0+c2Nyb2xsSGVpZ2h0KCkgLSBsYXllci0+cmVuZGVyQm94KCktPmNsaWVudEhlaWdo
dCgpKTsKKyAgICAgICAgSW50UG9pbnQgY3VycmVudE9mZnNldChsYXllci0+c2Nyb2xsWE9mZnNl
dCgpLCBsYXllci0+c2Nyb2xsWU9mZnNldCgpKTsKKyAgICAgICAgYWRqdXN0U2Nyb2xsRGVsdGEo
bWF4T2Zmc2V0LCBjdXJyZW50T2Zmc2V0LCBsYXllckRlbHRhKTsKKyAgICAgICAgaWYgKCFsYXll
ckRlbHRhLmlzWmVybygpKSB7CisgICAgICAgICAgICBzZXROb2RlKGVuY2xvc2luZ0xheWVyTm9k
ZShsYXllcikpOworICAgICAgICAgICAgSW50UG9pbnQgbmV3T2Zmc2V0ID0gY3VycmVudE9mZnNl
dCArIGxheWVyRGVsdGE7CisgICAgICAgICAgICBsYXllci0+c2Nyb2xsVG9PZmZzZXQoSW50U2l6
ZShuZXdPZmZzZXQueCgpLCBuZXdPZmZzZXQueSgpKSk7CisgICAgICAgICAgICByZW5kZXJlci0+
cmVwYWludCh0cnVlKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAg
fQorCisgICAgd2hpbGUgKGxheWVyID0gbGF5ZXItPnBhcmVudCgpKSB7CisgICAgICAgIGlmIChj
YW5TY3JvbGxSZW5kZXJCb3gobGF5ZXItPnJlbmRlckJveCgpKSkKKyAgICAgICAgICAgIHJldHVy
biBzY3JvbGxSZW5kZXJlcihsYXllci0+cmVuZGVyQm94KCksIGRlbHRhKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgSW5SZWdpb25TY3JvbGxlclByaXZhdGU6OmFkanVz
dFNjcm9sbERlbHRhKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBtYXhPZmZzZXQsIGNvbnN0IFdl
YkNvcmU6OkludFBvaW50JiBjdXJyZW50T2Zmc2V0LCBXZWJDb3JlOjpJbnRTaXplJiBkZWx0YSkg
Y29uc3QKK3sKKyAgICBpZiAoY3VycmVudE9mZnNldC54KCkgKyBkZWx0YS53aWR0aCgpID4gbWF4
T2Zmc2V0LngoKSkKKyAgICAgICAgZGVsdGEuc2V0V2lkdGgoc3RkOjptaW4obWF4T2Zmc2V0Lngo
KSAtIGN1cnJlbnRPZmZzZXQueCgpLCBkZWx0YS53aWR0aCgpKSk7CisKKyAgICBpZiAoY3VycmVu
dE9mZnNldC54KCkgKyBkZWx0YS53aWR0aCgpIDwgMCkKKyAgICAgICAgZGVsdGEuc2V0V2lkdGgo
c3RkOjptYXgoLWN1cnJlbnRPZmZzZXQueCgpLCBkZWx0YS53aWR0aCgpKSk7CisKKyAgICBpZiAo
Y3VycmVudE9mZnNldC55KCkgKyBkZWx0YS5oZWlnaHQoKSA+IG1heE9mZnNldC55KCkpCisgICAg
ICAgIGRlbHRhLnNldEhlaWdodChzdGQ6Om1pbihtYXhPZmZzZXQueSgpIC0gY3VycmVudE9mZnNl
dC55KCksIGRlbHRhLmhlaWdodCgpKSk7CisKKyAgICBpZiAoY3VycmVudE9mZnNldC55KCkgKyBk
ZWx0YS5oZWlnaHQoKSA8IDApCisgICAgICAgIGRlbHRhLnNldEhlaWdodChzdGQ6Om1heCgtY3Vy
cmVudE9mZnNldC55KCksIGRlbHRhLmhlaWdodCgpKSk7Cit9CisKK3N0YXRpYyBib29sIGNhblNj
cm9sbElubmVyRnJhbWUoRnJhbWUqIGZyYW1lKQoreworICAgIGlmICghZnJhbWUgfHwgIWZyYW1l
LT52aWV3KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIE5vdCBoYXZpbmcgYW4g
b3duZXIgZWxlbWVudCBtZWFucyB0aGF0IHdlIGFyZSBvbiB0aGUgbWFpbmZyYW1lLgorICAgIGlm
ICghZnJhbWUtPm93bmVyRWxlbWVudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBB
U1NFUlQoZnJhbWUgIT0gZnJhbWUtPnBhZ2UoKS0+bWFpbkZyYW1lKCkpOworCisgICAgSW50U2l6
ZSB2aXNpYmxlU2l6ZSA9IGZyYW1lLT52aWV3KCktPnZpc2libGVDb250ZW50UmVjdCgpLnNpemUo
KTsKKyAgICBJbnRTaXplIGNvbnRlbnRzU2l6ZSA9IGZyYW1lLT52aWV3KCktPmNvbnRlbnRzU2l6
ZSgpOworCisgICAgYm9vbCBjYW5CZVNjcm9sbGVkID0gY29udGVudHNTaXplLmhlaWdodCgpID4g
dmlzaWJsZVNpemUuaGVpZ2h0KCkgfHwgY29udGVudHNTaXplLndpZHRoKCkgPiB2aXNpYmxlU2l6
ZS53aWR0aCgpOworCisgICAgLy8gTGV0cyBhbHNvIGNvbnNpZGVyIHRoZSAnb3ZlcmZsb3cte3gs
eX0gcHJvcGVydHkgc2V0IGRpcmVjdGx5IHRvIHRoZSB7aX1mcmFtZSB0YWcuCisgICAgcmV0dXJu
IGNhbkJlU2Nyb2xsZWQgJiYgKGZyYW1lLT5vd25lckVsZW1lbnQoKS0+c2Nyb2xsaW5nTW9kZSgp
ICE9IFNjcm9sbGJhckFsd2F5c09mZik7Cit9CisKKy8vIFRoZSBSZW5kZXJCb3g6OmNhbmJlU2Ny
b2xsZWRBbmRIYXNTY3JvbGxhYmxlQXJlYSBtZXRob2QgcmV0dXJucyB0cnVlIGZvciB0aGUKKy8v
IGZvbGxvd2luZyBzY2VuYXJpbywgZm9yIGV4YW1wbGU6CisvLyAoMSkgYSBkaXYgdGhhdCBoYXMg
YSB2ZXJ0aWNhbCBvdmVyZmxvdyBidXQgbm8gaG9yaXpvbnRhbCBvdmVyZmxvdworLy8gICAgIHdp
dGggb3ZlcmZsb3cteTogaGlkZGVuIGFuZCBvdmVyZmxvdy14OiBhdXRvIHNldC4KKy8vIFRoZSB2
ZXJzaW9uIGJlbG93IGZpeGVzIGl0LgorLy8gRklYTUU6IEZpeCBSZW5kZXJCb3g6OmNhbkJlU2Ny
b2xsZWRBbmRIYXNTY3JvbGxhYmxlQXJlYSBtZXRob2QgaW5zdGVhZC4KK3N0YXRpYyBib29sIGNh
blNjcm9sbFJlbmRlckJveChSZW5kZXJCb3gqIGJveCkKK3sKKyAgICBpZiAoIWJveCB8fCAhYm94
LT5oYXNPdmVyZmxvd0NsaXAoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGJv
eC0+c2Nyb2xsc092ZXJmbG93WCgpICYmIChib3gtPnNjcm9sbFdpZHRoKCkgIT0gYm94LT5jbGll
bnRXaWR0aCgpKQorICAgICAgICB8fCBib3gtPnNjcm9sbHNPdmVyZmxvd1koKSAmJiAoYm94LT5z
Y3JvbGxIZWlnaHQoKSAhPSBib3gtPmNsaWVudEhlaWdodCgpKSkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICBOb2RlKiBub2RlID0gYm94LT5ub2RlKCk7CisgICAgcmV0dXJuIG5vZGUgJiYg
KG5vZGUtPnJlbmRlcmVySXNFZGl0YWJsZSgpIHx8IG5vZGUtPmlzRG9jdW1lbnROb2RlKCkpOwor
fQorCitzdGF0aWMgUmVuZGVyTGF5ZXIqIHBhcmVudExheWVyKFJlbmRlckxheWVyKiBsYXllcikK
K3sKKyAgICBBU1NFUlQobGF5ZXIpOworICAgIGlmIChsYXllci0+cGFyZW50KCkpCisgICAgICAg
IHJldHVybiBsYXllci0+cGFyZW50KCk7CisKKyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0g
bGF5ZXItPnJlbmRlcmVyKCk7CisgICAgaWYgKHJlbmRlcmVyLT5kb2N1bWVudCgpICYmIHJlbmRl
cmVyLT5kb2N1bWVudCgpLT5vd25lckVsZW1lbnQoKSAmJiByZW5kZXJlci0+ZG9jdW1lbnQoKS0+
b3duZXJFbGVtZW50KCktPnJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybiByZW5kZXJlci0+ZG9j
dW1lbnQoKS0+b3duZXJFbGVtZW50KCktPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCk7CisK
KyAgICByZXR1cm4gMDsKK30KKworLy8gRklYTUU6IE1ha2UgUmVuZGVyTGF5ZXI6OmVuY2xvc2lu
Z0VsZW1lbnQgcHVibGljIHNvIHRoaXMgb25lIGNhbiBiZSByZW1vdmVkLgorc3RhdGljIE5vZGUq
IGVuY2xvc2luZ0xheWVyTm9kZShSZW5kZXJMYXllciogbGF5ZXIpCit7CisgICAgZm9yIChSZW5k
ZXJPYmplY3QqIHIgPSBsYXllci0+cmVuZGVyZXIoKTsgcjsgciA9IHItPnBhcmVudCgpKSB7Cisg
ICAgICAgIGlmIChOb2RlKiBlID0gci0+bm9kZSgpKQorICAgICAgICAgICAgcmV0dXJuIGU7Cisg
ICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCitzdGF0
aWMgYm9vbCBpc05vblJlbmRlclZpZXdGaXhlZFBvc2l0aW9uZWRDb250YWluZXIoUmVuZGVyTGF5
ZXIqIGxheWVyKQoreworICAgIFJlbmRlck9iamVjdCogbyA9IGxheWVyLT5yZW5kZXJlcigpOwor
ICAgIGlmIChvLT5pc1JlbmRlclZpZXcoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
cmV0dXJuIG8tPmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpICYmIG8tPnN0eWxlKCktPnBvc2l0aW9u
KCkgPT0gRml4ZWRQb3NpdGlvbjsKK30KKworc3RhdGljIHZvaWQgcHVzaEJhY2tJblJlZ2lvblNj
cm9sbGFibGUoc3RkOjp2ZWN0b3I8UGxhdGZvcm06OlNjcm9sbFZpZXdCYXNlKj4mIHZlY3Rvciwg
SW5SZWdpb25TY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEsIEluUmVnaW9uU2Nyb2xsZXJQ
cml2YXRlKiBzY3JvbGxlcikKK3sKKyAgICBBU1NFUlQoc2Nyb2xsZXIpOworICAgIEFTU0VSVCgh
c2Nyb2xsYWJsZUFyZWEtPmlzTnVsbCgpKTsKKworICAgIHNjcm9sbGFibGVBcmVhLT5zZXRDYW5Q
cm9wYWdhdGVTY3JvbGxpbmdUb0VuY2xvc2luZ1Njcm9sbGFibGUoIWlzTm9uUmVuZGVyVmlld0Zp
eGVkUG9zaXRpb25lZENvbnRhaW5lcihzY3JvbGxhYmxlQXJlYS0+bGF5ZXIoKSkpOworICAgIHZl
Y3Rvci5wdXNoX2JhY2soc2Nyb2xsYWJsZUFyZWEpOworICAgIGlmICh2ZWN0b3Iuc2l6ZSgpID09
IDEpIHsKKyAgICAgICAgLy8gRklYTUU6IFVzZSBSZW5kZXJMYXllcjo6cmVuZGVyQm94KCktPm5v
ZGUoKSBpbnN0ZWFkPworICAgICAgICBzY3JvbGxlci0+c2V0Tm9kZShlbmNsb3NpbmdMYXllck5v
ZGUoc2Nyb2xsYWJsZUFyZWEtPmxheWVyKCkpKTsKKyAgICB9Cit9CisKK30KK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvSW5SZWdpb25TY3JvbGxlci5oIGIvU291
cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9JblJlZ2lvblNjcm9sbGVyLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y2MWEyYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvSW5SZWdpb25TY3JvbGxlci5oCkBAIC0wLDAgKzEsNDgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExp
bWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0
aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lmbmRl
ZiBJblJlZ2lvblNjcm9sbGVyX2gKKyNkZWZpbmUgSW5SZWdpb25TY3JvbGxlcl9oCisKKyNpbmNs
dWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1QcmltaXRpdmVzLmg+CisKK25hbWVzcGFjZSBCbGFja0Jl
cnJ5IHsKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBJblJlZ2lvblNjcm9sbGVyUHJpdmF0
ZTsKK2NsYXNzIFRvdWNoRXZlbnRIYW5kbGVyOworY2xhc3MgV2ViUGFnZVByaXZhdGU7CisKK2Ns
YXNzIEluUmVnaW9uU2Nyb2xsZXIgeworCitwdWJsaWM6CisgICAgSW5SZWdpb25TY3JvbGxlcihX
ZWJQYWdlUHJpdmF0ZSopOworICAgIH5JblJlZ2lvblNjcm9sbGVyKCk7CisKKyAgICBib29sIGNv
bXBvc2l0ZWRTZXRTY3JvbGxQb3NpdGlvbih1bnNpZ25lZCAvKmNhbW91ZmxhZ2VkTGF5ZXIqLywg
Y29uc3QgUGxhdGZvcm06OkludFBvaW50JiAvKnNjcm9sbFBvc2l0aW9uKi8pOworCitwcml2YXRl
OgorICAgIGZyaWVuZCBjbGFzcyBXZWJQYWdlUHJpdmF0ZTsKKyAgICBmcmllbmQgY2xhc3MgVG91
Y2hFdmVudEhhbmRsZXI7CisgICAgSW5SZWdpb25TY3JvbGxlclByaXZhdGUgKmQ7Cit9OworCit9
Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9J
blJlZ2lvblNjcm9sbGVyX3AuaCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvSW5SZWdp
b25TY3JvbGxlcl9wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjhlZDE3
NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvSW5SZWdp
b25TY3JvbGxlcl9wLmgKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSwgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAw
MjExMC0xMzAxICBVU0EKKyAqLworCisjaWZuZGVmIEluUmVnaW9uU2Nyb2xsZXJfcF9oCisjZGVm
aW5lIEluUmVnaW9uU2Nyb2xsZXJfcF9oCisKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisKKyNpbmNs
dWRlIDxpbnRlcmFjdGlvbi9TY3JvbGxWaWV3QmFzZS5oPgorI2luY2x1ZGUgPHZlY3Rvcj4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgRnJhbWU7CitjbGFzcyBMYXllckNvbXBvc2l0aW5n
VGhyZWFkOworY2xhc3MgTm9kZTsKK2NsYXNzIFJlbmRlck9iamVjdDsKK30KKworbmFtZXNwYWNl
IEJsYWNrQmVycnkgeworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlBhZ2VQcml2YXRl
OworCitjbGFzcyBJblJlZ2lvblNjcm9sbGVyUHJpdmF0ZSB7CisKK3B1YmxpYzoKKyAgICBJblJl
Z2lvblNjcm9sbGVyUHJpdmF0ZShXZWJQYWdlUHJpdmF0ZSopOworCisgICAgdm9pZCBzZXROb2Rl
KFdlYkNvcmU6Ok5vZGUqKTsKKyAgICBXZWJDb3JlOjpOb2RlKiBub2RlKCkgY29uc3Q7CisgICAg
dm9pZCByZXNldCgpOworCisgICAgYm9vbCBjYW5TY3JvbGwoKSBjb25zdDsKKyAgICBib29sIGhh
c05vZGUoKSBjb25zdDsKKworICAgIGJvb2wgc2Nyb2xsQnkoY29uc3QgUGxhdGZvcm06OkludFNp
emUmIGRlbHRhKTsKKyAgICBib29sIGNvbXBvc2l0ZWRTZXRTY3JvbGxQb3NpdGlvbih1bnNpZ25l
ZCBjYW1vdWZsYWdlZExheWVyLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgc2Nyb2xsUG9zaXRp
b24pOworCisgICAgc3RkOjp2ZWN0b3I8UGxhdGZvcm06OlNjcm9sbFZpZXdCYXNlKj4gaW5SZWdp
b25TY3JvbGxhYmxlQXJlYXNGb3JQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOworCisg
ICAgV2ViUGFnZVByaXZhdGUqIG1fd2ViUGFnZTsKK3ByaXZhdGU6CisKKyAgICBib29sIHNjcm9s
bE5vZGVSZWN1cnNpdmVseShXZWJDb3JlOjpOb2RlKiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYg
ZGVsdGEpOworICAgIGJvb2wgc2Nyb2xsUmVuZGVyZXIoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Kiwg
Y29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgZGVsdGEpOworCisgICAgdm9pZCBhZGp1c3RTY3JvbGxE
ZWx0YShjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgbWF4T2Zmc2V0LCBjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCYgY3VycmVudE9mZnNldCwgV2ViQ29yZTo6SW50U2l6ZSYgZGVsdGEpIGNvbnN0Owor
CisgICAgUmVmUHRyPFdlYkNvcmU6Ok5vZGU+IG1faW5SZWdpb25TY3JvbGxTdGFydGluZ05vZGU7
Cit9OworCit9Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2Jl
cnJ5L0FwaS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFn
ZS5jcHAKaW5kZXggYjU0OTRhZC4uY2RmYTgxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9i
bGFja2JlcnJ5L0FwaS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkv
QXBpL1dlYlBhZ2UuY3BwCkBAIC03MSw2ICs3MSw3IEBACiAjaW5jbHVkZSAiSWNvbkRhdGFiYXNl
Q2xpZW50QmxhY2tCZXJyeS5oIgogI2luY2x1ZGUgIkluUGFnZVNlYXJjaE1hbmFnZXIuaCIKICNp
bmNsdWRlICJJblJlZ2lvblNjcm9sbGFibGVBcmVhLmgiCisjaW5jbHVkZSAiSW5SZWdpb25TY3Jv
bGxlcl9wLmgiCiAjaW5jbHVkZSAiSW5wdXRIYW5kbGVyLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXIuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnRCbGFja0JlcnJ5
LmgiCkBAIC0xNTIyLDcgKzE1MjMsNyBAQCBib29sIFdlYlBhZ2VQcml2YXRlOjpzY3JvbGxCeShp
bnQgZGVsdGFYLCBpbnQgZGVsdGFZLCBib29sIHNjcm9sbE1haW5GcmFtZSkKICAgICAgICAgICAg
IGRlbHRhLndpZHRoKCkgPCAwID8gLXVudHJhbnNmb3JtZWRDb3BpZWREZWx0YS53aWR0aCgpIDog
dW50cmFuc2Zvcm1lZENvcGllZERlbHRhLndpZHRoKCksCiAgICAgICAgICAgICBkZWx0YS5oZWln
aHQoKSA8IDAgPyAtdW50cmFuc2Zvcm1lZENvcGllZERlbHRhLmhlaWdodCgpOiB1bnRyYW5zZm9y
bWVkQ29waWVkRGVsdGEuaGVpZ2h0KCkpOwogCi0gICAgICAgIGlmIChtX2luUmVnaW9uU2Nyb2xs
ZXItPnNjcm9sbEJ5KGRlbHRhKSkgeworICAgICAgICBpZiAobV9pblJlZ2lvblNjcm9sbGVyLT5k
LT5zY3JvbGxCeShkZWx0YSkpIHsKICAgICAgICAgICAgIG1fc2VsZWN0aW9uSGFuZGxlci0+c2Vs
ZWN0aW9uUG9zaXRpb25DaGFuZ2VkKCk7CiAgICAgICAgICAgICAvLyBGSVhNRTogV2UgaGF2ZSBj
b2RlIGluIHBsYWNlIHRvIGhhbmRsZSBzY3JvbGxpbmcgYW5kIGNsaXBwaW5nIHRhcCBoaWdobGln
aHQKICAgICAgICAgICAgIC8vIG9uIGluLXJlZ2lvbiBzY3JvbGxpbmcuIEFzIHNvb24gYXMgaXQg
aXMgZmFzdCBlbm91Z2ggKGkuZS4gd2UgaGF2ZSBpdCBiYWNrZWQgYnkKQEAgLTE1NDgsOSArMTU0
OSw5IEBAIGJvb2wgV2ViUGFnZTo6c2Nyb2xsQnkoY29uc3QgUGxhdGZvcm06OkludFNpemUmIGRl
bHRhLCBib29sIHNjcm9sbE1haW5GcmFtZSkKIAogdm9pZCBXZWJQYWdlUHJpdmF0ZTo6bm90aWZ5
SW5SZWdpb25TY3JvbGxTdGF0dXNDaGFuZ2VkKGJvb2wgc3RhdHVzKQogewotICAgIGlmICghc3Rh
dHVzICYmIG1faW5SZWdpb25TY3JvbGxlci0+aGFzTm9kZSgpKSB7Ci0gICAgICAgIGVucXVldWVS
ZW5kZXJpbmdPZkNsaXBwZWRDb250ZW50T2ZTY3JvbGxhYmxlTm9kZUFmdGVySW5SZWdpb25TY3Jv
bGxpbmcobV9pblJlZ2lvblNjcm9sbGVyLT5ub2RlKCkpOwotICAgICAgICBtX2luUmVnaW9uU2Ny
b2xsZXItPnJlc2V0KCk7CisgICAgaWYgKCFzdGF0dXMgJiYgbV9pblJlZ2lvblNjcm9sbGVyLT5k
LT5oYXNOb2RlKCkpIHsKKyAgICAgICAgZW5xdWV1ZVJlbmRlcmluZ09mQ2xpcHBlZENvbnRlbnRP
ZlNjcm9sbGFibGVOb2RlQWZ0ZXJJblJlZ2lvblNjcm9sbGluZyhtX2luUmVnaW9uU2Nyb2xsZXIt
PmQtPm5vZGUoKSk7CisgICAgICAgIG1faW5SZWdpb25TY3JvbGxlci0+ZC0+cmVzZXQoKTsKICAg
ICB9CiB9CiAKQEAgLTI2MzMsOCArMjYzNCw4IEBAIHZvaWQgV2ViUGFnZVByaXZhdGU6OmNsZWFy
RG9jdW1lbnREYXRhKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudEdvaW5nQXdheSkKICAgICBpZiAo
bV9jdXJyZW50QmxvY2tab29tQWRqdXN0ZWROb2RlICYmIG1fY3VycmVudEJsb2NrWm9vbUFkanVz
dGVkTm9kZS0+ZG9jdW1lbnQoKSA9PSBkb2N1bWVudEdvaW5nQXdheSkKICAgICAgICAgbV9jdXJy
ZW50QmxvY2tab29tQWRqdXN0ZWROb2RlID0gMDsKIAotICAgIGlmIChtX2luUmVnaW9uU2Nyb2xs
ZXItPmhhc05vZGUoKSAmJiBtX2luUmVnaW9uU2Nyb2xsZXItPm5vZGUoKS0+ZG9jdW1lbnQoKSA9
PSBkb2N1bWVudEdvaW5nQXdheSkKLSAgICAgICAgbV9pblJlZ2lvblNjcm9sbGVyLT5yZXNldCgp
OworICAgIGlmIChtX2luUmVnaW9uU2Nyb2xsZXItPmQtPmhhc05vZGUoKSAmJiBtX2luUmVnaW9u
U2Nyb2xsZXItPmQtPm5vZGUoKS0+ZG9jdW1lbnQoKSA9PSBkb2N1bWVudEdvaW5nQXdheSkKKyAg
ICAgICAgbV9pblJlZ2lvblNjcm9sbGVyLT5kLT5yZXNldCgpOwogCiAgICAgaWYgKGRvY3VtZW50
R29pbmdBd2F5LT5mcmFtZSgpKQogICAgICAgICBtX2lucHV0SGFuZGxlci0+ZnJhbWVVbmxvYWRl
ZChkb2N1bWVudEdvaW5nQXdheS0+ZnJhbWUoKSk7CkBAIC00MjExLDEyICs0MjEyLDEyIEBAIGJv
b2wgV2ViUGFnZTo6dG91Y2hFdmVudChjb25zdCBQbGF0Zm9ybTo6VG91Y2hFdmVudCYgZXZlbnQp
CiAKIHZvaWQgV2ViUGFnZVByaXZhdGU6OnNldFNjcm9sbE9yaWdpblBvaW50KGNvbnN0IFBsYXRm
b3JtOjpJbnRQb2ludCYgcG9pbnQpCiB7Ci0gICAgbV9pblJlZ2lvblNjcm9sbGVyLT5yZXNldCgp
OworICAgIG1faW5SZWdpb25TY3JvbGxlci0+ZC0+cmVzZXQoKTsKIAogICAgIGlmICghbV9oYXNJ
blJlZ2lvblNjcm9sbGFibGVBcmVhcykKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9jbGllbnQt
Pm5vdGlmeUluUmVnaW9uU2Nyb2xsaW5nU3RhcnRpbmdQb2ludENoYW5nZWQobV9pblJlZ2lvblNj
cm9sbGVyLT5pblJlZ2lvblNjcm9sbGFibGVBcmVhc0ZvclBvaW50KHBvaW50KSk7CisgICAgbV9j
bGllbnQtPm5vdGlmeUluUmVnaW9uU2Nyb2xsaW5nU3RhcnRpbmdQb2ludENoYW5nZWQobV9pblJl
Z2lvblNjcm9sbGVyLT5kLT5pblJlZ2lvblNjcm9sbGFibGVBcmVhc0ZvclBvaW50KHBvaW50KSk7
CiB9CiAKIHZvaWQgV2ViUGFnZTo6c2V0U2Nyb2xsT3JpZ2luUG9pbnQoY29uc3QgUGxhdGZvcm06
OkludFBvaW50JiBwb2ludCkKQEAgLTQ2NTQsNiArNDY1NSwxMSBAQCBCYWNraW5nU3RvcmUqIFdl
YlBhZ2U6OmJhY2tpbmdTdG9yZSgpIGNvbnN0CiAgICAgcmV0dXJuIGQtPm1fYmFja2luZ1N0b3Jl
OwogfQogCitJblJlZ2lvblNjcm9sbGVyKiBXZWJQYWdlOjppblJlZ2lvblNjcm9sbGVyKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gZC0+bV9pblJlZ2lvblNjcm9sbGVyLmdldCgpOworfQorCiBib29s
IFdlYlBhZ2U6Onpvb21Ub0ZpdCgpCiB7CiAgICAgaWYgKGQtPmNvbnRlbnRzU2l6ZSgpLmlzRW1w
dHkoKSB8fCAhZC0+aXNVc2VyU2NhbGFibGUoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
YmxhY2tiZXJyeS9BcGkvV2ViUGFnZS5oIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9X
ZWJQYWdlLmgKaW5kZXggMWYwYTc1MS4uMjQwNWE3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9ibGFja2JlcnJ5L0FwaS9XZWJQYWdlLmgKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5
L0FwaS9XZWJQYWdlLmgKQEAgLTYzLDYgKzYzLDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFz
cyBCYWNraW5nU3RvcmU7CiBjbGFzcyBCYWNraW5nU3RvcmVDbGllbnQ7CiBjbGFzcyBCYWNraW5n
U3RvcmVQcml2YXRlOworY2xhc3MgSW5SZWdpb25TY3JvbGxlcjsKIGNsYXNzIFJlbmRlclF1ZXVl
OwogY2xhc3MgV2ViT3ZlcmxheTsKIGNsYXNzIFdlYlBhZ2VDbGllbnQ7CkBAIC0xNzksNiArMTgw
LDggQEAgcHVibGljOgogCiAgICAgQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUoKSBjb25zdDsK
IAorICAgIEluUmVnaW9uU2Nyb2xsZXIqIGluUmVnaW9uU2Nyb2xsZXIoKSBjb25zdDsKKwogICAg
IGJvb2wgem9vbVRvRml0KCk7CiAgICAgYm9vbCB6b29tVG9PbmVPbmUoKTsKICAgICB2b2lkIHpv
b21Ub0luaXRpYWxTY2FsZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9DaGFuZ2VMb2cKaW5kZXggODhi
NDNjNy4uMWNmMGNlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQ2hhbmdlTG9nCkBAIC0xLDUgKzEs
NzcgQEAKIDIwMTItMDgtMDggIEFudG9uaW8gR29tZXMgIDxhZ29tZXNAcmltLmNvbT4KIAorICAg
ICAgICBbQmxhY2tCZXJyeV0gVGllIHVwIHRoZSBzY3JvbGxpbmcgbWFjaGluZXJ5IHRvIHRoZSBn
cmFwaGljcyB0cmVlIHdoZW4gYXBwbGljYWJsZSBmb3IgaW4tcmVnaW9uIHNjcm9sbAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTM0ODIKKyAgICAgICAg
UFIgIzE4NzY3MgorICAgICAgICBNYWtlIEluUmVnaW9uU2Nyb2xsZXIgYSBzaW1wbGUgcHVibGlj
IHdlYmtpdC8gQVBJCisgICAgICAgIFBSICMxODg2NzcKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbiBvcmRlciB0byBwcmVwYXJlIEluUmVnaW9uU2Ny
b2xsZXIgdG8gYmUgYSBwdWJsaWMgQVBJCisgICAgICAgIGluIHdlYmtpdC8sIHRoZSBwYXRjaDoK
KworICAgICAgICAxKSBSZW5hbWVkIHRoZSBjdXJyZW50IEluUmVnaW9uU2Nyb2xsZXIgY2xhc3Mg
dG8gSW5SZWdpb25TY3JvbGxlclByaXZhdGU7CisgICAgICAgIDIpIE1vdmVkIEluUmVnaW9uU2Ny
b2xsZXIuY3BwfGggZnJvbSBXZWJLaXRTdXBwb3J0LyB0byBBcGkvOworICAgICAgICAzKSBSZW5h
bWVkIEluUmVnaW9uU2Nyb2xsZXIuaCB0byBJblJlZ2lvblNjcm9sbGVyX3AuaDsKKyAgICAgICAg
NCkgQWRkZWQgYSBuZXcgcHVibGljIGNsYXNzIGltcGxlbWVudGF0aW9uIHRvIEluUmVnaW9uU2Ny
b2xsZXIuaDsKKyAgICAgICAgNSkgQWRhcHRlZCBXZWJQYWdlIGFuZCBUb3VjaEV2ZW50SGFuZGxl
ciBjbGFzc2VzIHRvIHVzZSBJblJlZ2lvblNjcm9sbGVyOjpkIGRpcmVjdGx5LgorCisgICAgICAg
IFRoZSBtb3N0IGltcG9ydGFudCBBUEkgaGVyZSBpcyAnOjpjb21wb3NpdGVkU2V0U2Nyb2xsUG9z
aXRpb24nCisKKyAgICAgICAgSXQgaXMgYSAgVUkvQ29tcG9zaXRpbmcgdGhyZWFkIG1ldGhvZCBv
bmx5IGFuZCBzZXRzIHRoZSBhc3NvY2lhdGVkIExheWVyQ29tcG9zaXRpbmdUaHJlYWQKKyAgICAg
ICAgKGNhbW91ZmxhZ2VkIGFzIGEgdW5zaWduZWQpIGZvciBlYWNoIGNyZWF0ZWQgSW5SZWdpb25T
Y3JvbGxhYmxlQXJlYSB0aGF0IHN1cHBvcnRzCisgICAgICAgIGNvbXBvc2l0ZWQgc2Nyb2xsaW5n
LgorCisgICAgICAgIFRoZSB3YXkgOjpjb21wb3NpdGVkU2V0U2Nyb2xsUG9zaXRpb24gInNjcm9s
bHMiIGEgbGF5ZXIgaXMgYnkgc2V0dGluZyB0aGUgYm91bmRzT3JpZ2luCisgICAgICAgIHByb3Bl
cnR5IHRvIHRoZSBMYXllckNvbXBvc2l0aW5nVGhyZWFkJ3MgJ292ZXJyaWRlJyBwcm9wZXJ0eSBp
biB0aGUgVUkvQ29tcG9zaXRpbmcgdGhyZWFkLgorCisgICAgICAgICogQXBpL0luUmVnaW9uU2Ny
b2xsZXIuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1
cHBvcnQvSW5SZWdpb25TY3JvbGxlci5jcHAuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAo
QmxhY2tCZXJyeTo6V2ViS2l0OjpJblJlZ2lvblNjcm9sbGVyOjpJblJlZ2lvblNjcm9sbGVyKToK
KyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6SW5SZWdpb25TY3JvbGxlcjo6fkluUmVnaW9u
U2Nyb2xsZXIpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpJblJlZ2lvblNjcm9sbGVy
Ojpjb21wb3NpdGVkU2V0U2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2Vi
S2l0OjpJblJlZ2lvblNjcm9sbGVyUHJpdmF0ZTo6SW5SZWdpb25TY3JvbGxlclByaXZhdGUpOgor
ICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpJblJlZ2lvblNjcm9sbGVyUHJpdmF0ZTo6c2V0
Tm9kZSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkluUmVnaW9uU2Nyb2xsZXJQcml2
YXRlOjpub2RlKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6SW5SZWdpb25TY3JvbGxl
clByaXZhdGU6OnJlc2V0KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6SW5SZWdpb25T
Y3JvbGxlclByaXZhdGU6Omhhc05vZGUpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpJ
blJlZ2lvblNjcm9sbGVyUHJpdmF0ZTo6Y2FuU2Nyb2xsKToKKyAgICAgICAgKEJsYWNrQmVycnk6
OldlYktpdDo6SW5SZWdpb25TY3JvbGxlclByaXZhdGU6OmNvbXBvc2l0ZWRTZXRTY3JvbGxQb3Np
dGlvbik6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkluUmVnaW9uU2Nyb2xsZXJQcml2
YXRlOjpzY3JvbGxCeSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkluUmVnaW9uU2Ny
b2xsZXJQcml2YXRlOjppblJlZ2lvblNjcm9sbGFibGVBcmVhc0ZvclBvaW50KToKKyAgICAgICAg
KEJsYWNrQmVycnk6OldlYktpdDo6SW5SZWdpb25TY3JvbGxlclByaXZhdGU6OnNjcm9sbE5vZGVS
ZWN1cnNpdmVseSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkluUmVnaW9uU2Nyb2xs
ZXJQcml2YXRlOjpzY3JvbGxSZW5kZXJlcik6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6
OkluUmVnaW9uU2Nyb2xsZXJQcml2YXRlOjphZGp1c3RTY3JvbGxEZWx0YSk6CisgICAgICAgIChC
bGFja0JlcnJ5OjpXZWJLaXQ6OmNhblNjcm9sbElubmVyRnJhbWUpOgorICAgICAgICAoQmxhY2tC
ZXJyeTo6V2ViS2l0OjpjYW5TY3JvbGxSZW5kZXJCb3gpOgorICAgICAgICAoQmxhY2tCZXJyeTo6
V2ViS2l0OjpwYXJlbnRMYXllcik6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OmVuY2xv
c2luZ0xheWVyTm9kZSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OmlzTm9uUmVuZGVy
Vmlld0ZpeGVkUG9zaXRpb25lZENvbnRhaW5lcik6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJL
aXQ6OnB1c2hCYWNrSW5SZWdpb25TY3JvbGxhYmxlKToKKyAgICAgICAgKiBBcGkvSW5SZWdpb25T
Y3JvbGxlci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3Vw
cG9ydC9JblJlZ2lvblNjcm9sbGVyLmguCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoSW5S
ZWdpb25TY3JvbGxlcik6CisgICAgICAgICogQXBpL0luUmVnaW9uU2Nyb2xsZXJfcC5oOiBSZW5h
bWVkIGZyb20gU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5SZWdpb25T
Y3JvbGxlci5oLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAg
ICAoSW5SZWdpb25TY3JvbGxlclByaXZhdGUpOgorICAgICAgICAqIEFwaS9XZWJQYWdlLmNwcDoK
KyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFnZVByaXZhdGU6OnNjcm9sbEJ5KToK
KyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFnZVByaXZhdGU6Om5vdGlmeUluUmVn
aW9uU2Nyb2xsU3RhdHVzQ2hhbmdlZCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6Oldl
YlBhZ2VQcml2YXRlOjpjbGVhckRvY3VtZW50RGF0YSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpX
ZWJLaXQ6OldlYlBhZ2VQcml2YXRlOjpzZXRTY3JvbGxPcmlnaW5Qb2ludCk6CisgICAgICAgIChC
bGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2U6OmluUmVnaW9uU2Nyb2xsZXIpOgorICAgICAgICAo
V2ViS2l0KToKKyAgICAgICAgKiBBcGkvV2ViUGFnZS5oOgorICAgICAgICAoV2ViS2l0KToKKyAg
ICAgICAgKiBXZWJLaXRTdXBwb3J0L0luUmVnaW9uU2Nyb2xsYWJsZUFyZWEuY3BwOgorICAgICAg
ICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpJblJlZ2lvblNjcm9sbGFibGVBcmVhOjpJblJlZ2lvblNj
cm9sbGFibGVBcmVhKToKKyAgICAgICAgKiBXZWJLaXRTdXBwb3J0L1RvdWNoRXZlbnRIYW5kbGVy
LmNwcDoKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6VG91Y2hFdmVudEhhbmRsZXI6OmRy
YXdUYXBIaWdobGlnaHQpOgorCisyMDEyLTA4LTA4ICBBbnRvbmlvIEdvbWVzICA8YWdvbWVzQHJp
bS5jb20+CisKICAgICAgICAgW0JsYWNrQmVycnldIE1ha2UgV2ViT3ZlcmxheVByaXZhdGU6OnNj
aGVkdWxlQ29tcG9zaXRpbmdSdW4gYSBXZWJQYWdlUHJpdmF0ZSBtZXRob2QuCiAgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MzQ4MAogICAgICAgICBQUiAj
MTg4NjgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9y
dC9JblJlZ2lvblNjcm9sbGFibGVBcmVhLmNwcCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9X
ZWJLaXRTdXBwb3J0L0luUmVnaW9uU2Nyb2xsYWJsZUFyZWEuY3BwCmluZGV4IDc2YTk4MGUuLmQ0
MjA1OWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0
L0luUmVnaW9uU2Nyb2xsYWJsZUFyZWEuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJy
eS9XZWJLaXRTdXBwb3J0L0luUmVnaW9uU2Nyb2xsYWJsZUFyZWEuY3BwCkBAIC0yMCw4ICsyMCwx
MSBAQAogI2luY2x1ZGUgIkluUmVnaW9uU2Nyb2xsYWJsZUFyZWEuaCIKIAogI2luY2x1ZGUgIkZy
YW1lLmgiCisjaW5jbHVkZSAiTGF5ZXJDb21wb3NpdGluZ1RocmVhZC5oIgorI2luY2x1ZGUgIkxh
eWVyV2ViS2l0VGhyZWFkLmgiCiAjaW5jbHVkZSAiUmVuZGVyQm94LmgiCiAjaW5jbHVkZSAiUmVu
ZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIKICNpbmNsdWRlICJS
ZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiV2ViUGFn
ZV9wLmgiCkBAIC02OCw2ICs3MSw4IEBAIEluUmVnaW9uU2Nyb2xsYWJsZUFyZWE6OkluUmVnaW9u
U2Nyb2xsYWJsZUFyZWEoV2ViUGFnZVByaXZhdGUqIHdlYlBhZ2UsIFJlbmRlckxhCiAgICAgICAg
IG1fc2Nyb2xsc1ZlcnRpY2FsbHkgPSB2aWV3LT5jb250ZW50c0hlaWdodCgpID4gdmlldy0+dmlz
aWJsZUhlaWdodCgpOwogCiAgICAgICAgIG1fb3ZlcnNjcm9sbExpbWl0RmFjdG9yID0gMC4wOyAv
LyBGSVhNRSBldmVudHVhbGx5IHN1cHBvcnQgb3ZlcnNjcm9sbAorICAgICAgICBtX2NhY2hlZENv
bXBvc2l0ZWRTY3JvbGxhYmxlTGF5ZXIgPSAwOyAvLyBGSVhNRTogTmVlZHMgY29tcG9zaXRlZCBs
YXllciBmb3IgaW5uZXIgZnJhbWVzLgorCiAgICAgfSBlbHNlIHsgLy8gUmVuZGVyQm94LWJhc2Vk
IGVsZW1lbnRzIGNhc2UgKHNjcm9sbGFibGUgYm94ZXMgKGRpdidzLCBwJ3MsIHRleHRhcmVhJ3Ms
IGV0YykpLgogCiAgICAgICAgIFJlbmRlckJveCogYm94ID0gbV9sYXllci0+cmVuZGVyQm94KCk7
CkBAIC04Miw3ICs4NywxMyBAQCBJblJlZ2lvblNjcm9sbGFibGVBcmVhOjpJblJlZ2lvblNjcm9s
bGFibGVBcmVhKFdlYlBhZ2VQcml2YXRlKiB3ZWJQYWdlLCBSZW5kZXJMYQogICAgICAgICBtX3Nj
cm9sbHNIb3Jpem9udGFsbHkgPSBib3gtPnNjcm9sbFdpZHRoKCkgIT0gYm94LT5jbGllbnRXaWR0
aCgpICYmIGJveC0+c2Nyb2xsc092ZXJmbG93WCgpOwogICAgICAgICBtX3Njcm9sbHNWZXJ0aWNh
bGx5ID0gYm94LT5zY3JvbGxIZWlnaHQoKSAhPSBib3gtPmNsaWVudEhlaWdodCgpICYmIGJveC0+
c2Nyb2xsc092ZXJmbG93WSgpOwogCi0gICAgICAgIG1fb3ZlcnNjcm9sbExpbWl0RmFjdG9yID0g
MC4wOyAvLyBGSVhNRSBldmVudHVhbGx5IHN1cHBvcnQgb3ZlcnNjcm9sbAorICAgICAgICBpZiAo
bV9sYXllci0+dXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkgeworICAgICAgICAgICAgbV9zdXBw
b3J0c0NvbXBvc2l0ZWRTY3JvbGxpbmcgPSB0cnVlOworICAgICAgICAgICAgQVNTRVJUKG1fbGF5
ZXItPmJhY2tpbmcoKS0+aGFzU2Nyb2xsaW5nTGF5ZXIoKSk7CisgICAgICAgICAgICBtX2NhY2hl
ZENvbXBvc2l0ZWRTY3JvbGxhYmxlTGF5ZXIgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkPiht
X2xheWVyLT5iYWNraW5nKCktPnNjcm9sbGluZ0xheWVyKCktPnBsYXRmb3JtTGF5ZXIoKS0+bGF5
ZXJDb21wb3NpdGluZ1RocmVhZCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIG1fb3ZlcnNjcm9s
bExpbWl0RmFjdG9yID0gMC4wOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5SZWdpb25TY3JvbGxlci5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JblJlZ2lvblNjcm9sbGVyLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Q5ODM3NS4uMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JblJlZ2lvblNjcm9sbGVyLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDM1NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAy
MDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEw
LTEzMDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJblJlZ2lv
blNjcm9sbGVyLmgiCi0KLSNpbmNsdWRlICJCYWNraW5nU3RvcmVDbGllbnQuaCIKLSNpbmNsdWRl
ICJGcmFtZS5oIgotI2luY2x1ZGUgIkhUTUxGcmFtZU93bmVyRWxlbWVudC5oIgotI2luY2x1ZGUg
IkhpdFRlc3RSZXN1bHQuaCIKLSNpbmNsdWRlICJJblJlZ2lvblNjcm9sbGFibGVBcmVhLmgiCi0j
aW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlJlbmRlckJveC5oIgotI2luY2x1ZGUgIlJlbmRl
ckxheWVyLmgiCi0jaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCi0jaW5jbHVkZSAiUmVuZGVyVmll
dy5oIgotI2luY2x1ZGUgIldlYlBhZ2VfcC5oIgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
LQotbmFtZXNwYWNlIEJsYWNrQmVycnkgewotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXN0YXRpYyBi
b29sIGNhblNjcm9sbElubmVyRnJhbWUoRnJhbWUqIGZyYW1lKQotewotICAgIGlmICghZnJhbWUg
fHwgIWZyYW1lLT52aWV3KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIE5vdCBo
YXZpbmcgYW4gb3duZXIgZWxlbWVudCBtZWFucyB0aGF0IHdlIGFyZSBvbiB0aGUgbWFpbmZyYW1l
LgotICAgIGlmICghZnJhbWUtPm93bmVyRWxlbWVudCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBBU1NFUlQoZnJhbWUgIT0gZnJhbWUtPnBhZ2UoKS0+bWFpbkZyYW1lKCkpOwotCi0g
ICAgSW50U2l6ZSB2aXNpYmxlU2l6ZSA9IGZyYW1lLT52aWV3KCktPnZpc2libGVDb250ZW50UmVj
dCgpLnNpemUoKTsKLSAgICBJbnRTaXplIGNvbnRlbnRzU2l6ZSA9IGZyYW1lLT52aWV3KCktPmNv
bnRlbnRzU2l6ZSgpOwotCi0gICAgYm9vbCBjYW5CZVNjcm9sbGVkID0gY29udGVudHNTaXplLmhl
aWdodCgpID4gdmlzaWJsZVNpemUuaGVpZ2h0KCkgfHwgY29udGVudHNTaXplLndpZHRoKCkgPiB2
aXNpYmxlU2l6ZS53aWR0aCgpOwotCi0gICAgLy8gTGV0cyBhbHNvIGNvbnNpZGVyIHRoZSAnb3Zl
cmZsb3cte3gseX0gcHJvcGVydHkgc2V0IGRpcmVjdGx5IHRvIHRoZSB7aX1mcmFtZSB0YWcuCi0g
ICAgcmV0dXJuIGNhbkJlU2Nyb2xsZWQgJiYgKGZyYW1lLT5vd25lckVsZW1lbnQoKS0+c2Nyb2xs
aW5nTW9kZSgpICE9IFNjcm9sbGJhckFsd2F5c09mZik7Ci19Ci0KLS8vIFRoZSBSZW5kZXJCb3g6
OmNhbmJlU2Nyb2xsZWRBbmRIYXNTY3JvbGxhYmxlQXJlYSBtZXRob2QgcmV0dXJucyB0cnVlIGZv
ciB0aGUKLS8vIGZvbGxvd2luZyBzY2VuYXJpbywgZm9yIGV4YW1wbGU6Ci0vLyAoMSkgYSBkaXYg
dGhhdCBoYXMgYSB2ZXJ0aWNhbCBvdmVyZmxvdyBidXQgbm8gaG9yaXpvbnRhbCBvdmVyZmxvdwot
Ly8gICAgIHdpdGggb3ZlcmZsb3cteTogaGlkZGVuIGFuZCBvdmVyZmxvdy14OiBhdXRvIHNldC4K
LS8vIFRoZSB2ZXJzaW9uIGJlbG93IGZpeGVzIGl0LgotLy8gRklYTUU6IEZpeCBSZW5kZXJCb3g6
OmNhbkJlU2Nyb2xsZWRBbmRIYXNTY3JvbGxhYmxlQXJlYSBtZXRob2QgaW5zdGVhZC4KLXN0YXRp
YyBib29sIGNhblNjcm9sbFJlbmRlckJveChSZW5kZXJCb3gqIGJveCkKLXsKLSAgICBpZiAoIWJv
eCB8fCAhYm94LT5oYXNPdmVyZmxvd0NsaXAoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgaWYgKGJveC0+c2Nyb2xsc092ZXJmbG93WCgpICYmIChib3gtPnNjcm9sbFdpZHRoKCkgIT0g
Ym94LT5jbGllbnRXaWR0aCgpKQotICAgICAgICB8fCBib3gtPnNjcm9sbHNPdmVyZmxvd1koKSAm
JiAoYm94LT5zY3JvbGxIZWlnaHQoKSAhPSBib3gtPmNsaWVudEhlaWdodCgpKSkKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0KLSAgICBOb2RlKiBub2RlID0gYm94LT5ub2RlKCk7Ci0gICAgcmV0dXJu
IG5vZGUgJiYgKG5vZGUtPnJlbmRlcmVySXNFZGl0YWJsZSgpIHx8IG5vZGUtPmlzRG9jdW1lbnRO
b2RlKCkpOwotfQotCi1zdGF0aWMgUmVuZGVyTGF5ZXIqIHBhcmVudExheWVyKFJlbmRlckxheWVy
KiBsYXllcikKLXsKLSAgICBBU1NFUlQobGF5ZXIpOwotICAgIGlmIChsYXllci0+cGFyZW50KCkp
Ci0gICAgICAgIHJldHVybiBsYXllci0+cGFyZW50KCk7Ci0KLSAgICBSZW5kZXJPYmplY3QqIHJl
bmRlcmVyID0gbGF5ZXItPnJlbmRlcmVyKCk7Ci0gICAgaWYgKHJlbmRlcmVyLT5kb2N1bWVudCgp
ICYmIHJlbmRlcmVyLT5kb2N1bWVudCgpLT5vd25lckVsZW1lbnQoKSAmJiByZW5kZXJlci0+ZG9j
dW1lbnQoKS0+b3duZXJFbGVtZW50KCktPnJlbmRlcmVyKCkpCi0gICAgICAgIHJldHVybiByZW5k
ZXJlci0+ZG9jdW1lbnQoKS0+b3duZXJFbGVtZW50KCktPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xh
eWVyKCk7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotLy8gRklYTUU6IE1ha2UgUmVuZGVyTGF5ZXI6
OmVuY2xvc2luZ0VsZW1lbnQgcHVibGljIHNvIHRoaXMgb25lIGNhbiBiZSByZW1vdmVkLgotc3Rh
dGljIE5vZGUqIGVuY2xvc2luZ0xheWVyTm9kZShSZW5kZXJMYXllciogbGF5ZXIpCi17Ci0gICAg
Zm9yIChSZW5kZXJPYmplY3QqIHIgPSBsYXllci0+cmVuZGVyZXIoKTsgcjsgciA9IHItPnBhcmVu
dCgpKSB7Ci0gICAgICAgIGlmIChOb2RlKiBlID0gci0+bm9kZSgpKQotICAgICAgICAgICAgcmV0
dXJuIGU7Ci0gICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAwOwot
fQotCi1zdGF0aWMgYm9vbCBpc05vblJlbmRlclZpZXdGaXhlZFBvc2l0aW9uZWRDb250YWluZXIo
UmVuZGVyTGF5ZXIqIGxheWVyKQotewotICAgIFJlbmRlck9iamVjdCogbyA9IGxheWVyLT5yZW5k
ZXJlcigpOwotICAgIGlmIChvLT5pc1JlbmRlclZpZXcoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgcmV0dXJuIG8tPmlzUG9zaXRpb25lZCgpICYmIG8tPnN0eWxlKCktPnBvc2l0aW9u
KCkgPT0gRml4ZWRQb3NpdGlvbjsKLX0KLQotc3RhdGljIHZvaWQgcHVzaEJhY2tJblJlZ2lvblNj
cm9sbGFibGUoc3RkOjp2ZWN0b3I8UGxhdGZvcm06OlNjcm9sbFZpZXdCYXNlKj4mIHZlY3Rvciwg
SW5SZWdpb25TY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEsIEluUmVnaW9uU2Nyb2xsZXIq
IHNjcm9sbGVyKQotewotICAgIEFTU0VSVChzY3JvbGxlcik7Ci0gICAgQVNTRVJUKCFzY3JvbGxh
YmxlQXJlYS0+aXNOdWxsKCkpOwotCi0gICAgc2Nyb2xsYWJsZUFyZWEtPnNldENhblByb3BhZ2F0
ZVNjcm9sbGluZ1RvRW5jbG9zaW5nU2Nyb2xsYWJsZSghaXNOb25SZW5kZXJWaWV3Rml4ZWRQb3Np
dGlvbmVkQ29udGFpbmVyKHNjcm9sbGFibGVBcmVhLT5sYXllcigpKSk7Ci0gICAgdmVjdG9yLnB1
c2hfYmFjayhzY3JvbGxhYmxlQXJlYSk7Ci0gICAgaWYgKHZlY3Rvci5zaXplKCkgPT0gMSkgewot
ICAgICAgICAvLyBGSVhNRTogVXNlIFJlbmRlckxheWVyOjpyZW5kZXJCb3goKS0+bm9kZSgpIGlu
c3RlYWQ/Ci0gICAgICAgIHNjcm9sbGVyLT5zZXROb2RlKGVuY2xvc2luZ0xheWVyTm9kZShzY3Jv
bGxhYmxlQXJlYS0+bGF5ZXIoKSkpOwotICAgIH0KLX0KLQotSW5SZWdpb25TY3JvbGxlcjo6SW5S
ZWdpb25TY3JvbGxlcihXZWJQYWdlUHJpdmF0ZSogd2ViUGFnZVByaXZhdGUpCi0gICAgOiBtX3dl
YlBhZ2Uod2ViUGFnZVByaXZhdGUpCi17Ci19Ci0KLXZvaWQgSW5SZWdpb25TY3JvbGxlcjo6c2V0
Tm9kZShXZWJDb3JlOjpOb2RlKiBub2RlKQotewotICAgIG1faW5SZWdpb25TY3JvbGxTdGFydGlu
Z05vZGUgPSBub2RlOwotfQotCi1XZWJDb3JlOjpOb2RlKiBJblJlZ2lvblNjcm9sbGVyOjpub2Rl
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9pblJlZ2lvblNjcm9sbFN0YXJ0aW5nTm9kZS5nZXQo
KTsKLX0KLQotdm9pZCBJblJlZ2lvblNjcm9sbGVyOjpyZXNldCgpCi17Ci0gICAgc2V0Tm9kZSgw
KTsKLX0KLQotYm9vbCBJblJlZ2lvblNjcm9sbGVyOjpoYXNOb2RlKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gISFtX2luUmVnaW9uU2Nyb2xsU3RhcnRpbmdOb2RlOwotfQotCi1ib29sIEluUmVnaW9u
U2Nyb2xsZXI6OmNhblNjcm9sbCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGhhc05vZGUoKTsKLX0K
LQotYm9vbCBJblJlZ2lvblNjcm9sbGVyOjpzY3JvbGxCeShjb25zdCBQbGF0Zm9ybTo6SW50U2l6
ZSYgZGVsdGEpCi17Ci0gICAgaWYgKCFjYW5TY3JvbGwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgcmV0dXJuIHNjcm9sbE5vZGVSZWN1cnNpdmVseShub2RlKCksIGRlbHRhKTsKLX0K
LQotc3RkOjp2ZWN0b3I8UGxhdGZvcm06OlNjcm9sbFZpZXdCYXNlKj4gSW5SZWdpb25TY3JvbGxl
cjo6aW5SZWdpb25TY3JvbGxhYmxlQXJlYXNGb3JQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2lu
dCYgcG9pbnQpCi17Ci0gICAgc3RkOjp2ZWN0b3I8UGxhdGZvcm06OlNjcm9sbFZpZXdCYXNlKj4g
dmFsaWRSZXR1cm47Ci0gICAgc3RkOjp2ZWN0b3I8UGxhdGZvcm06OlNjcm9sbFZpZXdCYXNlKj4g
ZW1wdHlSZXR1cm47Ci0KLSAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdCA9IG1fd2ViUGFnZS0+bV9t
YWluRnJhbWUtPmV2ZW50SGFuZGxlcigpLT5oaXRUZXN0UmVzdWx0QXRQb2ludChtX3dlYlBhZ2Ut
Pm1hcEZyb21WaWV3cG9ydFRvQ29udGVudHMocG9pbnQpLCBmYWxzZSAvKmFsbG93U2hhZG93Q29u
dGVudCovKTsKLSAgICBOb2RlKiBub2RlID0gcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpOwot
ICAgIGlmICghbm9kZSB8fCAhbm9kZS0+cmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJuIGVtcHR5
UmV0dXJuOwotCi0gICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gbm9kZS0+cmVuZGVyZXIoKS0+ZW5j
bG9zaW5nTGF5ZXIoKTsKLSAgICBkbyB7Ci0gICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIg
PSBsYXllci0+cmVuZGVyZXIoKTsKLQotICAgICAgICBpZiAocmVuZGVyZXItPmlzUmVuZGVyVmll
dygpKSB7Ci0gICAgICAgICAgICBpZiAoUmVuZGVyVmlldyogcmVuZGVyVmlldyA9IHRvUmVuZGVy
VmlldyhyZW5kZXJlcikpIHsKLSAgICAgICAgICAgICAgICBGcmFtZVZpZXcqIHZpZXcgPSByZW5k
ZXJWaWV3LT5mcmFtZVZpZXcoKTsKLSAgICAgICAgICAgICAgICBpZiAoIXZpZXcpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBlbXB0eVJldHVybjsKLQotICAgICAgICAgICAgICAgIGlmIChj
YW5TY3JvbGxJbm5lckZyYW1lKHZpZXctPmZyYW1lKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHB1c2hCYWNrSW5SZWdpb25TY3JvbGxhYmxlKHZhbGlkUmV0dXJuLCBuZXcgSW5SZWdpb25TY3Jv
bGxhYmxlQXJlYShtX3dlYlBhZ2UsIGxheWVyKSwgdGhpcyk7Ci0gICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBl
bHNlIGlmIChjYW5TY3JvbGxSZW5kZXJCb3gobGF5ZXItPnJlbmRlckJveCgpKSkgewotICAgICAg
ICAgICAgcHVzaEJhY2tJblJlZ2lvblNjcm9sbGFibGUodmFsaWRSZXR1cm4sIG5ldyBJblJlZ2lv
blNjcm9sbGFibGVBcmVhKG1fd2ViUGFnZSwgbGF5ZXIpLCB0aGlzKTsKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSWYgd2UgcnVuIGludG8gYSBmaXggcG9z
aXRpb25lZCBsYXllciwgc2V0IHRoZSBsYXN0IHNjcm9sbGFibGUgaW4tcmVnaW9uIG9iamVjdAot
ICAgICAgICAvLyBhcyBub3QgYWJsZSB0byBwcm9wYWdhdGUgc2Nyb2xsIHRvIGl0cyBwYXJlbnQg
c2Nyb2xsYWJsZS4KLSAgICAgICAgaWYgKGlzTm9uUmVuZGVyVmlld0ZpeGVkUG9zaXRpb25lZENv
bnRhaW5lcihsYXllcikgJiYgdmFsaWRSZXR1cm4uc2l6ZSgpKSB7Ci0gICAgICAgICAgICBQbGF0
Zm9ybTo6U2Nyb2xsVmlld0Jhc2UqIGVuZCA9IHZhbGlkUmV0dXJuLmJhY2soKTsKLSAgICAgICAg
ICAgIGVuZC0+c2V0Q2FuUHJvcGFnYXRlU2Nyb2xsaW5nVG9FbmNsb3NpbmdTY3JvbGxhYmxlKGZh
bHNlKTsKLSAgICAgICAgfQotCi0gICAgfSB3aGlsZSAobGF5ZXIgPSBwYXJlbnRMYXllcihsYXll
cikpOwotCi0gICAgaWYgKHZhbGlkUmV0dXJuLmVtcHR5KCkpCi0gICAgICAgIHJldHVybiBlbXB0
eVJldHVybjsKLQotICAgIC8vIFBvc3QtY2FsY3VsYXRlIHRoZSB2aXNpYmxlIHdpbmRvdyByZWN0
cyBpbiByZXZlcnNlIGhpdCB0ZXN0IG9yZGVyIHNvCi0gICAgLy8gd2UgYWNjb3VudCBmb3IgYWxs
IGFuZCBhbnkgY2xpcHBpbmcgcmVjdHMuCi0gICAgV2ViQ29yZTo6SW50UmVjdCByZWN1cnNpdmVD
bGlwcGluZ1JlY3QoV2ViQ29yZTo6SW50UG9pbnQ6Onplcm8oKSwgbV93ZWJQYWdlLT50cmFuc2Zv
cm1lZFZpZXdwb3J0U2l6ZSgpKTsKLQotICAgIHN0ZDo6dmVjdG9yPFBsYXRmb3JtOjpTY3JvbGxW
aWV3QmFzZSo+OjpyZXZlcnNlX2l0ZXJhdG9yIHJlbmQgPSB2YWxpZFJldHVybi5yZW5kKCk7Ci0g
ICAgZm9yIChzdGQ6OnZlY3RvcjxQbGF0Zm9ybTo6U2Nyb2xsVmlld0Jhc2UqPjo6cmV2ZXJzZV9p
dGVyYXRvciByaXQgPSB2YWxpZFJldHVybi5yYmVnaW4oKTsgcml0ICE9IHJlbmQ7ICsrcml0KSB7
Ci0KLSAgICAgICAgSW5SZWdpb25TY3JvbGxhYmxlQXJlYSogY3VyciA9IHN0YXRpY19jYXN0PElu
UmVnaW9uU2Nyb2xsYWJsZUFyZWEqPigqcml0KTsKLSAgICAgICAgUmVuZGVyTGF5ZXIqIGxheWVy
ID0gY3Vyci0+bGF5ZXIoKTsKLQotICAgICAgICBpZiAobGF5ZXIgJiYgbGF5ZXItPnJlbmRlcmVy
KCktPmlzUmVuZGVyVmlldygpKSB7IC8vICNkb2N1bWVudCBjYXNlCi0gICAgICAgICAgICBGcmFt
ZVZpZXcqIHZpZXcgPSB0b1JlbmRlclZpZXcobGF5ZXItPnJlbmRlcmVyKCkpLT5mcmFtZVZpZXco
KTsKLSAgICAgICAgICAgIEFTU0VSVCh2aWV3KTsKLSAgICAgICAgICAgIEFTU0VSVChjYW5TY3Jv
bGxJbm5lckZyYW1lKHZpZXctPmZyYW1lKCkpKTsKLQotICAgICAgICAgICAgV2ViQ29yZTo6SW50
UmVjdCBmcmFtZVdpbmRvd1JlY3QgPSBtX3dlYlBhZ2UtPm1hcFRvVHJhbnNmb3JtZWQobV93ZWJQ
YWdlLT5nZXRSZWN1cnNpdmVWaXNpYmxlV2luZG93UmVjdCh2aWV3KSk7Ci0gICAgICAgICAgICBm
cmFtZVdpbmRvd1JlY3QuaW50ZXJzZWN0KHJlY3Vyc2l2ZUNsaXBwaW5nUmVjdCk7Ci0gICAgICAg
ICAgICBjdXJyLT5zZXRWaXNpYmxlV2luZG93UmVjdChmcmFtZVdpbmRvd1JlY3QpOwotICAgICAg
ICAgICAgcmVjdXJzaXZlQ2xpcHBpbmdSZWN0ID0gZnJhbWVXaW5kb3dSZWN0OwotCi0gICAgICAg
IH0gZWxzZSB7IC8vIFJlbmRlckJveC1iYXNlZCBlbGVtZW50cyBjYXNlIChzY3JvbGxhYmxlIGJv
eGVzIChkaXYncywgcCdzLCB0ZXh0YXJlYSdzLCBldGMpKS4KLQotICAgICAgICAgICAgUmVuZGVy
Qm94KiBib3ggPSBsYXllci0+cmVuZGVyQm94KCk7Ci0gICAgICAgICAgICBBU1NFUlQoYm94KTsK
LSAgICAgICAgICAgIEFTU0VSVChjYW5TY3JvbGxSZW5kZXJCb3goYm94KSk7Ci0KLSAgICAgICAg
ICAgIFdlYkNvcmU6OkludFJlY3QgdmlzaWJsZVdpbmRvd1JlY3QgPSBlbmNsb3NpbmdJbnRSZWN0
KGJveC0+YWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0KCkpOwotICAgICAgICAgICAgdmlzaWJs
ZVdpbmRvd1JlY3QgPSBib3gtPmZyYW1lKCktPnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyh2aXNp
YmxlV2luZG93UmVjdCk7Ci0gICAgICAgICAgICB2aXNpYmxlV2luZG93UmVjdCA9IG1fd2ViUGFn
ZS0+bWFwVG9UcmFuc2Zvcm1lZCh2aXNpYmxlV2luZG93UmVjdCk7Ci0gICAgICAgICAgICB2aXNp
YmxlV2luZG93UmVjdC5pbnRlcnNlY3QocmVjdXJzaXZlQ2xpcHBpbmdSZWN0KTsKLQotICAgICAg
ICAgICAgY3Vyci0+c2V0VmlzaWJsZVdpbmRvd1JlY3QodmlzaWJsZVdpbmRvd1JlY3QpOwotICAg
ICAgICAgICAgcmVjdXJzaXZlQ2xpcHBpbmdSZWN0ID0gdmlzaWJsZVdpbmRvd1JlY3Q7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdmFsaWRSZXR1cm47Ci19Ci0KLWJvb2wgSW5SZWdp
b25TY3JvbGxlcjo6c2Nyb2xsTm9kZVJlY3Vyc2l2ZWx5KFdlYkNvcmU6Ok5vZGUqIG5vZGUsIGNv
bnN0IFdlYkNvcmU6OkludFNpemUmIGRlbHRhKQotewotICAgIGlmIChkZWx0YS5pc1plcm8oKSkK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOwot
ICAgIGlmICghcmVuZGVyZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEZyYW1lVmll
dyogdmlldyA9IHJlbmRlcmVyLT52aWV3KCktPmZyYW1lVmlldygpOwotICAgIGlmICghdmlldykK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gVHJ5IHNjcm9sbGluZyB0aGUgcmVuZGVy
ZXIuCi0gICAgaWYgKHNjcm9sbFJlbmRlcmVyKHJlbmRlcmVyLCBkZWx0YSkpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgLy8gV2UndmUgaGl0IHRoZSBwYWdlLCBkb24ndCBzY3JvbGwgaXQg
YW5kIHJldHVybiBmYWxzZS4KLSAgICBpZiAodmlldyA9PSBtX3dlYlBhZ2UtPm1fbWFpbkZyYW1l
LT52aWV3KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIFRyeSBzY3JvbGxpbmcg
dGhlIEZyYW1lVmlldy4KLSAgICBpZiAoY2FuU2Nyb2xsSW5uZXJGcmFtZSh2aWV3LT5mcmFtZSgp
KSkgewotICAgICAgICBJbnRTaXplIHZpZXdEZWx0YSA9IGRlbHRhOwotICAgICAgICBJbnRQb2lu
dCBuZXdWaWV3T2Zmc2V0ID0gdmlldy0+c2Nyb2xsUG9zaXRpb24oKTsKLSAgICAgICAgSW50UG9p
bnQgbWF4Vmlld09mZnNldCA9IHZpZXctPm1heGltdW1TY3JvbGxQb3NpdGlvbigpOwotICAgICAg
ICBhZGp1c3RTY3JvbGxEZWx0YShtYXhWaWV3T2Zmc2V0LCBuZXdWaWV3T2Zmc2V0LCB2aWV3RGVs
dGEpOwotCi0gICAgICAgIGlmICghdmlld0RlbHRhLmlzWmVybygpKSB7Ci0gICAgICAgICAgICB2
aWV3LT5zZXRDYW5CbGl0T25TY3JvbGwoZmFsc2UpOwotCi0gICAgICAgICAgICBCYWNraW5nU3Rv
cmVDbGllbnQqIGJhY2tpbmdTdG9yZUNsaWVudCA9IG1fd2ViUGFnZS0+YmFja2luZ1N0b3JlQ2xp
ZW50Rm9yRnJhbWUodmlldy0+ZnJhbWUoKSk7Ci0gICAgICAgICAgICBpZiAoYmFja2luZ1N0b3Jl
Q2xpZW50KSB7Ci0gICAgICAgICAgICAgICAgYmFja2luZ1N0b3JlQ2xpZW50LT5zZXRJc0NsaWVu
dEdlbmVyYXRlZFNjcm9sbCh0cnVlKTsKLSAgICAgICAgICAgICAgICBiYWNraW5nU3RvcmVDbGll
bnQtPnNldElzU2Nyb2xsTm90aWZpY2F0aW9uU3VwcHJlc3NlZCh0cnVlKTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgc2V0Tm9kZSh2aWV3LT5mcmFtZSgpLT5kb2N1bWVudCgpKTsKLQot
ICAgICAgICAgICAgdmlldy0+c2Nyb2xsQnkodmlld0RlbHRhKTsKLQotICAgICAgICAgICAgaWYg
KGJhY2tpbmdTdG9yZUNsaWVudCkgewotICAgICAgICAgICAgICAgIGJhY2tpbmdTdG9yZUNsaWVu
dC0+c2V0SXNDbGllbnRHZW5lcmF0ZWRTY3JvbGwoZmFsc2UpOwotICAgICAgICAgICAgICAgIGJh
Y2tpbmdTdG9yZUNsaWVudC0+c2V0SXNTY3JvbGxOb3RpZmljYXRpb25TdXBwcmVzc2VkKGZhbHNl
KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICAvLyBUcnkgc2Nyb2xsaW5nIHRoZSBub2RlIG9mIHRoZSBlbmNsb3Npbmcg
ZnJhbWUuCi0gICAgRnJhbWUqIGZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKLSAg
ICBpZiAoZnJhbWUpIHsKLSAgICAgICAgTm9kZSogb3duZXJOb2RlID0gZnJhbWUtPm93bmVyRWxl
bWVudCgpOwotICAgICAgICBpZiAoc2Nyb2xsTm9kZVJlY3Vyc2l2ZWx5KG93bmVyTm9kZSwgZGVs
dGEpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi1ib29sIEluUmVnaW9uU2Nyb2xsZXI6OnNjcm9sbFJlbmRlcmVyKFdlYkNvcmU6OlJl
bmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGRlbHRhKQotewot
ICAgIFJlbmRlckxheWVyKiBsYXllciA9IHJlbmRlcmVyLT5lbmNsb3NpbmdMYXllcigpOwotICAg
IGlmICghbGF5ZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIFRyeSB0byBzY3Jv
bGwgbGF5ZXIuCi0gICAgYm9vbCByZXN0cmljdGVkQnlMaW5lQ2xhbXAgPSBmYWxzZTsKLSAgICBp
ZiAocmVuZGVyZXItPnBhcmVudCgpKQotICAgICAgICByZXN0cmljdGVkQnlMaW5lQ2xhbXAgPSAh
cmVuZGVyZXItPnBhcmVudCgpLT5zdHlsZSgpLT5saW5lQ2xhbXAoKS5pc05vbmUoKTsKLQotICAg
IGlmIChyZW5kZXJlci0+aGFzT3ZlcmZsb3dDbGlwKCkgJiYgIXJlc3RyaWN0ZWRCeUxpbmVDbGFt
cCkgewotICAgICAgICBJbnRTaXplIGxheWVyRGVsdGEgPSBkZWx0YTsKLSAgICAgICAgSW50UG9p
bnQgbWF4T2Zmc2V0KGxheWVyLT5zY3JvbGxXaWR0aCgpIC0gbGF5ZXItPnJlbmRlckJveCgpLT5j
bGllbnRXaWR0aCgpLCBsYXllci0+c2Nyb2xsSGVpZ2h0KCkgLSBsYXllci0+cmVuZGVyQm94KCkt
PmNsaWVudEhlaWdodCgpKTsKLSAgICAgICAgSW50UG9pbnQgY3VycmVudE9mZnNldChsYXllci0+
c2Nyb2xsWE9mZnNldCgpLCBsYXllci0+c2Nyb2xsWU9mZnNldCgpKTsKLSAgICAgICAgYWRqdXN0
U2Nyb2xsRGVsdGEobWF4T2Zmc2V0LCBjdXJyZW50T2Zmc2V0LCBsYXllckRlbHRhKTsKLSAgICAg
ICAgaWYgKCFsYXllckRlbHRhLmlzWmVybygpKSB7Ci0gICAgICAgICAgICBzZXROb2RlKGVuY2xv
c2luZ0xheWVyTm9kZShsYXllcikpOwotICAgICAgICAgICAgSW50UG9pbnQgbmV3T2Zmc2V0ID0g
Y3VycmVudE9mZnNldCArIGxheWVyRGVsdGE7Ci0gICAgICAgICAgICBsYXllci0+c2Nyb2xsVG9P
ZmZzZXQobmV3T2Zmc2V0LngoKSwgbmV3T2Zmc2V0LnkoKSk7Ci0gICAgICAgICAgICByZW5kZXJl
ci0+cmVwYWludCh0cnVlKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgd2hpbGUgKGxheWVyID0gbGF5ZXItPnBhcmVudCgpKSB7Ci0gICAgICAgIGlm
IChjYW5TY3JvbGxSZW5kZXJCb3gobGF5ZXItPnJlbmRlckJveCgpKSkKLSAgICAgICAgICAgIHJl
dHVybiBzY3JvbGxSZW5kZXJlcihsYXllci0+cmVuZGVyQm94KCksIGRlbHRhKTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgSW5SZWdpb25TY3JvbGxlcjo6YWRqdXN0U2Ny
b2xsRGVsdGEoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIG1heE9mZnNldCwgY29uc3QgV2ViQ29y
ZTo6SW50UG9pbnQmIGN1cnJlbnRPZmZzZXQsIFdlYkNvcmU6OkludFNpemUmIGRlbHRhKSBjb25z
dAotewotICAgIGlmIChjdXJyZW50T2Zmc2V0LngoKSArIGRlbHRhLndpZHRoKCkgPiBtYXhPZmZz
ZXQueCgpKQotICAgICAgICBkZWx0YS5zZXRXaWR0aChzdGQ6Om1pbihtYXhPZmZzZXQueCgpIC0g
Y3VycmVudE9mZnNldC54KCksIGRlbHRhLndpZHRoKCkpKTsKLQotICAgIGlmIChjdXJyZW50T2Zm
c2V0LngoKSArIGRlbHRhLndpZHRoKCkgPCAwKQotICAgICAgICBkZWx0YS5zZXRXaWR0aChzdGQ6
Om1heCgtY3VycmVudE9mZnNldC54KCksIGRlbHRhLndpZHRoKCkpKTsKLQotICAgIGlmIChjdXJy
ZW50T2Zmc2V0LnkoKSArIGRlbHRhLmhlaWdodCgpID4gbWF4T2Zmc2V0LnkoKSkKLSAgICAgICAg
ZGVsdGEuc2V0SGVpZ2h0KHN0ZDo6bWluKG1heE9mZnNldC55KCkgLSBjdXJyZW50T2Zmc2V0Lnko
KSwgZGVsdGEuaGVpZ2h0KCkpKTsKLQotICAgIGlmIChjdXJyZW50T2Zmc2V0LnkoKSArIGRlbHRh
LmhlaWdodCgpIDwgMCkKLSAgICAgICAgZGVsdGEuc2V0SGVpZ2h0KHN0ZDo6bWF4KC1jdXJyZW50
T2Zmc2V0LnkoKSwgZGVsdGEuaGVpZ2h0KCkpKTsKLX0KLQotfQotfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5SZWdpb25TY3JvbGxlci5oIGIv
U291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5SZWdpb25TY3JvbGxlci5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOWIxOTEyLi4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0luUmVnaW9uU2Nyb2xsZXIuaAor
KysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEs
IDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIx
MTAtMTMwMSAgVVNBCi0gKi8KLQotI2lmbmRlZiBJblJlZ2lvblNjcm9sbGVyX2gKLSNkZWZpbmUg
SW5SZWdpb25TY3JvbGxlcl9oCi0KLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0KLSNpbmNsdWRlIDxp
bnRlcmFjdGlvbi9TY3JvbGxWaWV3QmFzZS5oPgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotY2xhc3MgRnJhbWU7Ci1jbGFzcyBOb2RlOwotY2xhc3MgUmVuZGVyT2Jq
ZWN0OwotfQotCi1uYW1lc3BhY2UgQmxhY2tCZXJyeSB7Ci1uYW1lc3BhY2UgV2ViS2l0IHsKLQot
Y2xhc3MgV2ViUGFnZVByaXZhdGU7Ci0KLWNsYXNzIEluUmVnaW9uU2Nyb2xsZXIgewotCi1wdWJs
aWM6Ci0gICAgSW5SZWdpb25TY3JvbGxlcihXZWJQYWdlUHJpdmF0ZSopOwotCi0gICAgdm9pZCBz
ZXROb2RlKFdlYkNvcmU6Ok5vZGUqKTsKLSAgICBXZWJDb3JlOjpOb2RlKiBub2RlKCkgY29uc3Q7
Ci0gICAgdm9pZCByZXNldCgpOwotCi0gICAgYm9vbCBjYW5TY3JvbGwoKSBjb25zdDsKLSAgICBi
b29sIGhhc05vZGUoKSBjb25zdDsKLQotICAgIGJvb2wgc2Nyb2xsQnkoY29uc3QgUGxhdGZvcm06
OkludFNpemUmIGRlbHRhKTsKLQotICAgIHN0ZDo6dmVjdG9yPFBsYXRmb3JtOjpTY3JvbGxWaWV3
QmFzZSo+IGluUmVnaW9uU2Nyb2xsYWJsZUFyZWFzRm9yUG9pbnQoY29uc3QgV2ViQ29yZTo6SW50
UG9pbnQmKTsKLXByaXZhdGU6Ci0KLSAgICBib29sIHNjcm9sbE5vZGVSZWN1cnNpdmVseShXZWJD
b3JlOjpOb2RlKiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgZGVsdGEpOwotICAgIGJvb2wgc2Ny
b2xsUmVuZGVyZXIoV2ViQ29yZTo6UmVuZGVyT2JqZWN0KiwgY29uc3QgV2ViQ29yZTo6SW50U2l6
ZSYgZGVsdGEpOwotCi0gICAgdm9pZCBhZGp1c3RTY3JvbGxEZWx0YShjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCYgbWF4T2Zmc2V0LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgY3VycmVudE9mZnNl
dCwgV2ViQ29yZTo6SW50U2l6ZSYgZGVsdGEpIGNvbnN0OwotCi0gICAgUmVmUHRyPFdlYkNvcmU6
Ok5vZGU+IG1faW5SZWdpb25TY3JvbGxTdGFydGluZ05vZGU7Ci0gICAgV2ViUGFnZVByaXZhdGUq
IG1fd2ViUGFnZTsKLX07Ci0KLX0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9Ub3VjaEV2ZW50SGFuZGxlci5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9Ub3VjaEV2ZW50SGFuZGxlci5jcHAK
aW5kZXggYzRjODQ3OC4uYzJlMzAxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ibGFja2Jl
cnJ5L1dlYktpdFN1cHBvcnQvVG91Y2hFdmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L1RvdWNoRXZlbnRIYW5kbGVyLmNwcApAQCAtMzEs
NiArMzEsNyBAQAogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1M
TmFtZXMuaCIKICNpbmNsdWRlICJIVE1MUGx1Z0luRWxlbWVudC5oIgorI2luY2x1ZGUgIkluUmVn
aW9uU2Nyb2xsZXJfcC5oIgogI2luY2x1ZGUgIklucHV0SGFuZGxlci5oIgogI2luY2x1ZGUgIklu
dFJlY3QuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCkBAIC0zMzksNyArMzQwLDcgQEAgdm9pZCBU
b3VjaEV2ZW50SGFuZGxlcjo6ZHJhd1RhcEhpZ2hsaWdodCgpCiAgICAgLy8gT24gdGhlIGNsaWVu
dCBzaWRlLCB0aGlzIGluZm8gaXMgYmVpbmcgdXNlZCB0byBoaWRlIHRoZSB0YXAgaGlnaGxpZ2h0
IHdpbmRvdyBvbiBzY3JvbGwuCiAgICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gbV93ZWJQYWdlLT5l
bmNsb3NpbmdGaXhlZFBvc2l0aW9uZWRBbmNlc3Rvck9yU2VsZklmRml4ZWRQb3NpdGlvbmVkKHJl
bmRlcmVyLT5lbmNsb3NpbmdMYXllcigpKTsKICAgICBib29sIHNob3VsZEhpZGVUYXBIaWdobGln
aHRSaWdodEFmdGVyU2Nyb2xsaW5nID0gIWxheWVyLT5yZW5kZXJlcigpLT5pc1JlbmRlclZpZXco
KTsKLSAgICBzaG91bGRIaWRlVGFwSGlnaGxpZ2h0UmlnaHRBZnRlclNjcm9sbGluZyB8PSAhIW1f
d2ViUGFnZS0+bV9pblJlZ2lvblNjcm9sbGVyLT5ub2RlKCk7CisgICAgc2hvdWxkSGlkZVRhcEhp
Z2hsaWdodFJpZ2h0QWZ0ZXJTY3JvbGxpbmcgfD0gISFtX3dlYlBhZ2UtPm1faW5SZWdpb25TY3Jv
bGxlci0+ZC0+bm9kZSgpOwogCiAgICAgSW50UG9pbnQgZnJhbWVQb3MobV93ZWJQYWdlLT5mcmFt
ZU9mZnNldChlbGVtZW50RnJhbWUpKTsKIAotLSAKMS43LjUuNAoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>157258</attachid>
            <date>2012-08-08 11:25:56 -0700</date>
            <delta_ts>2012-08-08 11:27:55 -0700</delta_ts>
            <desc>patch - fixed rob&apos;s suggestions</desc>
            <filename>0001-BlackBerry-Tie-up-the-scrolling-machinery-to-the-gra.patch</filename>
            <type>text/plain</type>
            <size>51268</size>
            <attacher name="Antonio Gomes">tonikitoo</attacher>
            
              <data encoding="base64">RnJvbSA5MjkwZGQyNzg1NTMxMTJiZjdkMGZmZTRkNTEwZWM2MDBjMTdhOGM4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbnRvbmlvIEdvbWVzIDxhZ29tZXNAcmltLmNvbT4KRGF0ZTog
V2VkLCA4IEF1ZyAyMDEyIDEyOjIzOjA0IC0wNDAwClN1YmplY3Q6IFtQQVRDSF0gW0JsYWNrQmVy
cnldIFRpZSB1cCB0aGUgc2Nyb2xsaW5nIG1hY2hpbmVyeSB0byB0aGUgZ3JhcGhpY3MKIHRyZWUg
d2hlbiBhcHBsaWNhYmxlIGZvciBpbi1yZWdpb24gc2Nyb2xsCiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTM0ODIgUFIgIzE4NzY3MgogTWFrZSBJblJlZ2lvblNjcm9s
bGVyIGEgc2ltcGxlIHB1YmxpYyB3ZWJraXQvIEFQSSBQUgogIzE4ODY3NwoKUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuClBhdGNoIGJ5IEFudG9uaW8gR29tZXMgPGFnb21lc0ByaW0uY29tPgoK
SW4gb3JkZXIgdG8gcHJlcGFyZSBJblJlZ2lvblNjcm9sbGVyIHRvIGJlIGEgcHVibGljIEFQSQpp
biB3ZWJraXQvLCB0aGUgcGF0Y2g6CgoxKSBSZW5hbWVkIHRoZSBjdXJyZW50IEluUmVnaW9uU2Ny
b2xsZXIgY2xhc3MgdG8gSW5SZWdpb25TY3JvbGxlclByaXZhdGU7CjIpIE1vdmVkIEluUmVnaW9u
U2Nyb2xsZXIuY3BwfGggZnJvbSBXZWJLaXRTdXBwb3J0LyB0byBBcGkvOwozKSBSZW5hbWVkIElu
UmVnaW9uU2Nyb2xsZXIuaCB0byBJblJlZ2lvblNjcm9sbGVyX3AuaDsKNCkgQWRkZWQgYSBuZXcg
cHVibGljIGNsYXNzIGltcGxlbWVudGF0aW9uIHRvIEluUmVnaW9uU2Nyb2xsZXIuaDsKNSkgQWRh
cHRlZCBXZWJQYWdlIGFuZCBUb3VjaEV2ZW50SGFuZGxlciBjbGFzc2VzIHRvIHVzZSBJblJlZ2lv
blNjcm9sbGVyOjpkIGRpcmVjdGx5LgoKVGhlIG1vc3QgaW1wb3J0YW50IEFQSSBoZXJlIGlzICc6
OmNvbXBvc2l0ZWRTZXRTY3JvbGxQb3NpdGlvbicKCkl0IGlzIGEgIFVJL0NvbXBvc2l0aW5nIHRo
cmVhZCBtZXRob2Qgb25seSBhbmQgc2V0cyB0aGUgYXNzb2NpYXRlZCBMYXllckNvbXBvc2l0aW5n
VGhyZWFkCihjYW1vdWZsYWdlZCBhcyBhIHVuc2lnbmVkKSBmb3IgZWFjaCBjcmVhdGVkIEluUmVn
aW9uU2Nyb2xsYWJsZUFyZWEgdGhhdCBzdXBwb3J0cwpjb21wb3NpdGVkIHNjcm9sbGluZy4KClRo
ZSB3YXkgOjpjb21wb3NpdGVkU2V0U2Nyb2xsUG9zaXRpb24gInNjcm9sbHMiIGEgbGF5ZXIgaXMg
Ynkgc2V0dGluZyB0aGUgYm91bmRzT3JpZ2luCnByb3BlcnR5IHRvIHRoZSBMYXllckNvbXBvc2l0
aW5nVGhyZWFkJ3MgJ292ZXJyaWRlJyBwcm9wZXJ0eSBpbiB0aGUgVUkvQ29tcG9zaXRpbmcgdGhy
ZWFkLgoKKiBQbGF0Zm9ybUJsYWNrQmVycnkuY21ha2U6IEJ1aWxkIHN5c3RlbSBhZGFwdGF0aW9u
LgoKKiBBcGkvSW5SZWdpb25TY3JvbGxlci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0
L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JblJlZ2lvblNjcm9sbGVyLmNwcC4KKFdlYktpdCk6
CihCbGFja0JlcnJ5OjpXZWJLaXQ6OkluUmVnaW9uU2Nyb2xsZXI6OkluUmVnaW9uU2Nyb2xsZXIp
OgooQmxhY2tCZXJyeTo6V2ViS2l0OjpJblJlZ2lvblNjcm9sbGVyOjp+SW5SZWdpb25TY3JvbGxl
cik6CihCbGFja0JlcnJ5OjpXZWJLaXQ6OkluUmVnaW9uU2Nyb2xsZXI6OmNvbXBvc2l0ZWRTZXRT
Y3JvbGxQb3NpdGlvbik6CihCbGFja0JlcnJ5OjpXZWJLaXQ6OkluUmVnaW9uU2Nyb2xsZXJQcml2
YXRlOjpJblJlZ2lvblNjcm9sbGVyUHJpdmF0ZSk6CihCbGFja0JlcnJ5OjpXZWJLaXQ6OkluUmVn
aW9uU2Nyb2xsZXJQcml2YXRlOjpzZXROb2RlKToKKEJsYWNrQmVycnk6OldlYktpdDo6SW5SZWdp
b25TY3JvbGxlclByaXZhdGU6Om5vZGUpOgooQmxhY2tCZXJyeTo6V2ViS2l0OjpJblJlZ2lvblNj
cm9sbGVyUHJpdmF0ZTo6cmVzZXQpOgooQmxhY2tCZXJyeTo6V2ViS2l0OjpJblJlZ2lvblNjcm9s
bGVyUHJpdmF0ZTo6aGFzTm9kZSk6CihCbGFja0JlcnJ5OjpXZWJLaXQ6OkluUmVnaW9uU2Nyb2xs
ZXJQcml2YXRlOjpjYW5TY3JvbGwpOgooQmxhY2tCZXJyeTo6V2ViS2l0OjpJblJlZ2lvblNjcm9s
bGVyUHJpdmF0ZTo6Y29tcG9zaXRlZFNldFNjcm9sbFBvc2l0aW9uKToKKEJsYWNrQmVycnk6Oldl
YktpdDo6SW5SZWdpb25TY3JvbGxlclByaXZhdGU6OnNjcm9sbEJ5KToKKEJsYWNrQmVycnk6Oldl
YktpdDo6SW5SZWdpb25TY3JvbGxlclByaXZhdGU6OmluUmVnaW9uU2Nyb2xsYWJsZUFyZWFzRm9y
UG9pbnQpOgooQmxhY2tCZXJyeTo6V2ViS2l0OjpJblJlZ2lvblNjcm9sbGVyUHJpdmF0ZTo6c2Ny
b2xsTm9kZVJlY3Vyc2l2ZWx5KToKKEJsYWNrQmVycnk6OldlYktpdDo6SW5SZWdpb25TY3JvbGxl
clByaXZhdGU6OnNjcm9sbFJlbmRlcmVyKToKKEJsYWNrQmVycnk6OldlYktpdDo6SW5SZWdpb25T
Y3JvbGxlclByaXZhdGU6OmFkanVzdFNjcm9sbERlbHRhKToKKEJsYWNrQmVycnk6OldlYktpdDo6
Y2FuU2Nyb2xsSW5uZXJGcmFtZSk6CihCbGFja0JlcnJ5OjpXZWJLaXQ6OmNhblNjcm9sbFJlbmRl
ckJveCk6CihCbGFja0JlcnJ5OjpXZWJLaXQ6OnBhcmVudExheWVyKToKKEJsYWNrQmVycnk6Oldl
YktpdDo6ZW5jbG9zaW5nTGF5ZXJOb2RlKToKKEJsYWNrQmVycnk6OldlYktpdDo6aXNOb25SZW5k
ZXJWaWV3Rml4ZWRQb3NpdGlvbmVkQ29udGFpbmVyKToKKEJsYWNrQmVycnk6OldlYktpdDo6cHVz
aEJhY2tJblJlZ2lvblNjcm9sbGFibGUpOgoqIEFwaS9JblJlZ2lvblNjcm9sbGVyLmg6IENvcGll
ZCBmcm9tIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0luUmVnaW9uU2Ny
b2xsZXIuaC4KKFdlYktpdCk6CihJblJlZ2lvblNjcm9sbGVyKToKKiBBcGkvSW5SZWdpb25TY3Jv
bGxlcl9wLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3Vw
cG9ydC9JblJlZ2lvblNjcm9sbGVyLmguCihXZWJDb3JlKToKKFdlYktpdCk6CihJblJlZ2lvblNj
cm9sbGVyUHJpdmF0ZSk6CiogQXBpL1dlYlBhZ2UuY3BwOgooQmxhY2tCZXJyeTo6V2ViS2l0OjpX
ZWJQYWdlUHJpdmF0ZTo6c2Nyb2xsQnkpOgooQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJQYWdlUHJp
dmF0ZTo6bm90aWZ5SW5SZWdpb25TY3JvbGxTdGF0dXNDaGFuZ2VkKToKKEJsYWNrQmVycnk6Oldl
YktpdDo6V2ViUGFnZVByaXZhdGU6OmNsZWFyRG9jdW1lbnREYXRhKToKKEJsYWNrQmVycnk6Oldl
YktpdDo6V2ViUGFnZVByaXZhdGU6OnNldFNjcm9sbE9yaWdpblBvaW50KToKKEJsYWNrQmVycnk6
OldlYktpdDo6V2ViUGFnZTo6aW5SZWdpb25TY3JvbGxlcik6CihXZWJLaXQpOgoqIEFwaS9XZWJQ
YWdlLmg6CihXZWJLaXQpOgoqIFdlYktpdFN1cHBvcnQvSW5SZWdpb25TY3JvbGxhYmxlQXJlYS5j
cHA6CihCbGFja0JlcnJ5OjpXZWJLaXQ6OkluUmVnaW9uU2Nyb2xsYWJsZUFyZWE6OkluUmVnaW9u
U2Nyb2xsYWJsZUFyZWEpOgoqIFdlYktpdFN1cHBvcnQvVG91Y2hFdmVudEhhbmRsZXIuY3BwOgoo
QmxhY2tCZXJyeTo6V2ViS2l0OjpUb3VjaEV2ZW50SGFuZGxlcjo6ZHJhd1RhcEhpZ2hsaWdodCk6
Ci0tLQogU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fCAgICA5ICsKIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtlICAgICAgICAg
ICAgIHwgICAgMiArLQogU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9JblJlZ2lvblNjcm9s
bGVyLmNwcCAgfCAgMzkzICsrKysrKysrKysrKysrKysrKysrCiBTb3VyY2UvV2ViS2l0L2JsYWNr
YmVycnkvQXBpL0luUmVnaW9uU2Nyb2xsZXIuaCAgICB8ICAgNDcgKysrCiBTb3VyY2UvV2ViS2l0
L2JsYWNrYmVycnkvQXBpL0luUmVnaW9uU2Nyb2xsZXJfcC5oICB8ICAgNjggKysrKwogU291cmNl
L1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJQYWdlLmNwcCAgICAgICAgICAgfCAgIDIyICstCiBT
b3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2UuaCAgICAgICAgICAgICB8ICAgIDMg
KwogU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgfCAg
IDcyICsrKysKIC4uLi9XZWJLaXRTdXBwb3J0L0luUmVnaW9uU2Nyb2xsYWJsZUFyZWEuY3BwICAg
ICAgIHwgICAxMyArLQogLi4uL2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JblJlZ2lvblNjcm9s
bGVyLmNwcCAgfCAgMzU2IC0tLS0tLS0tLS0tLS0tLS0tLQogLi4uL2JsYWNrYmVycnkvV2ViS2l0
U3VwcG9ydC9JblJlZ2lvblNjcm9sbGVyLmggICAgfCAgIDY3IC0tLS0KIC4uLi9ibGFja2JlcnJ5
L1dlYktpdFN1cHBvcnQvVG91Y2hFdmVudEhhbmRsZXIuY3BwIHwgICAgMyArLQogMTIgZmlsZXMg
Y2hhbmdlZCwgNjIxIGluc2VydGlvbnMoKyksIDQzNCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL0luUmVnaW9uU2Nyb2xsZXIuY3Bw
CiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9JblJlZ2lv
blNjcm9sbGVyLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkv
QXBpL0luUmVnaW9uU2Nyb2xsZXJfcC5oCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktp
dC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5SZWdpb25TY3JvbGxlci5jcHAKIGRlbGV0ZSBt
b2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JblJlZ2lv
blNjcm9sbGVyLmgKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGRmOGI4OTIuLjUzN2FjMzQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTIgQEAKKzIwMTItMDgtMDggIEFudG9uaW8gR29tZXMgIDxhZ29tZXNAcmltLmNvbT4K
KworICAgICAgICBbQmxhY2tCZXJyeV0gVGllIHVwIHRoZSBzY3JvbGxpbmcgbWFjaGluZXJ5IHRv
IHRoZSBncmFwaGljcyB0cmVlIHdoZW4gYXBwbGljYWJsZSBmb3IgaW4tcmVnaW9uIHNjcm9sbAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTM0ODIKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFBsYXRmb3Jt
QmxhY2tCZXJyeS5jbWFrZTogQnVpbGQgc3lzdGVtIGFkYXB0YXRpb24uCisKIDIwMTItMDgtMDcg
IFJ5dWFuIENob2kgIDxyeXVhbi5jaG9pQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFtFRkxdIFJl
bW92ZSBQbGF0Zm9ybVRvdWNoRXZlbnRFZmwgYW5kIFBsYXRmb3JtVG91Y2hQb2ludEVmbApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybUJsYWNrQmVycnkuY21ha2UgYi9Tb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtQmxhY2tCZXJyeS5jbWFrZQppbmRleCBlZTExZWQ2Li5hNzgxNTI5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtQmxhY2tCZXJyeS5jbWFrZQorKysgYi9T
b3VyY2UvV2ViS2l0L1BsYXRmb3JtQmxhY2tCZXJyeS5jbWFrZQpAQCAtNTcsNiArNTcsNyBAQCBB
RERfREVGSU5JVElPTlMoLURVU0VSX1BST0NFU1NFUykKIExJU1QoQVBQRU5EIFdlYktpdF9TT1VS
Q0VTCiAgICAgYmxhY2tiZXJyeS9BcGkvQmFja2luZ1N0b3JlLmNwcAogICAgIGJsYWNrYmVycnkv
QXBpL0JsYWNrQmVycnlHbG9iYWwuY3BwCisgICAgYmxhY2tiZXJyeS9BcGkvSW5SZWdpb25TY3Jv
bGxlci5jcHAKICAgICBibGFja2JlcnJ5L0FwaS9XZWJBbmltYXRpb24uY3BwCiAgICAgYmxhY2ti
ZXJyeS9BcGkvV2ViS2l0TUlNRVR5cGVDb252ZXJ0ZXIuY3BwCiAgICAgYmxhY2tiZXJyeS9BcGkv
V2ViS2l0VGV4dENvZGVjLmNwcApAQCAtMTAwLDcgKzEwMSw2IEBAIExJU1QoQVBQRU5EIFdlYktp
dF9TT1VSQ0VTCiAgICAgYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0luUGFnZVNlYXJjaE1hbmFn
ZXIuY3BwCiAgICAgYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0lucHV0SGFuZGxlci5jcHAKICAg
ICBibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5SZWdpb25TY3JvbGxhYmxlQXJlYS5jcHAKLSAg
ICBibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5SZWdpb25TY3JvbGxlci5jcHAKICAgICBibGFj
a2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5zcGVjdG9yT3ZlcmxheS5jcHAKICAgICBibGFja2JlcnJ5
L1dlYktpdFN1cHBvcnQvUmVuZGVyUXVldWUuY3BwCiAgICAgYmxhY2tiZXJyeS9XZWJLaXRTdXBw
b3J0L1NlbGVjdGlvbkhhbmRsZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNr
YmVycnkvQXBpL0luUmVnaW9uU2Nyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5
L0FwaS9JblJlZ2lvblNjcm9sbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi4wOTAxMmMxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5
L0FwaS9JblJlZ2lvblNjcm9sbGVyLmNwcApAQCAtMCwwICsxLDM5MyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSwgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl
CisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBC
b3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiSW5SZWdpb25TY3JvbGxlci5oIgorCisjaW5jbHVkZSAiQmFja2luZ1N0b3JlQ2xp
ZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJIVE1MRnJhbWVPd25lckVsZW1l
bnQuaCIKKyNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCisjaW5jbHVkZSAiSW5SZWdpb25TY3Jv
bGxhYmxlQXJlYS5oIgorI2luY2x1ZGUgIkluUmVnaW9uU2Nyb2xsZXJfcC5oIgorI2luY2x1ZGUg
IkxheWVyQ29tcG9zaXRpbmdUaHJlYWQuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAi
UmVuZGVyQm94LmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJP
YmplY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCisjaW5jbHVkZSAiV2ViUGFnZV9wLmgi
CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgQmxhY2tCZXJyeSB7Citu
YW1lc3BhY2UgV2ViS2l0IHsKKworc3RhdGljIGJvb2wgY2FuU2Nyb2xsSW5uZXJGcmFtZShGcmFt
ZSopOworc3RhdGljIGJvb2wgY2FuU2Nyb2xsUmVuZGVyQm94KFJlbmRlckJveCopOworc3RhdGlj
IFJlbmRlckxheWVyKiBwYXJlbnRMYXllcihSZW5kZXJMYXllciopOworc3RhdGljIE5vZGUqIGVu
Y2xvc2luZ0xheWVyTm9kZShSZW5kZXJMYXllciopOworc3RhdGljIGJvb2wgaXNOb25SZW5kZXJW
aWV3Rml4ZWRQb3NpdGlvbmVkQ29udGFpbmVyKFJlbmRlckxheWVyKik7CitzdGF0aWMgdm9pZCBw
dXNoQmFja0luUmVnaW9uU2Nyb2xsYWJsZShzdGQ6OnZlY3RvcjxQbGF0Zm9ybTo6U2Nyb2xsVmll
d0Jhc2UqPiYsIEluUmVnaW9uU2Nyb2xsYWJsZUFyZWEqLCBJblJlZ2lvblNjcm9sbGVyUHJpdmF0
ZSopOworCitJblJlZ2lvblNjcm9sbGVyOjpJblJlZ2lvblNjcm9sbGVyKFdlYlBhZ2VQcml2YXRl
KiB3ZWJQYWdlUHJpdmF0ZSkKKyAgICA6IGQobmV3IEluUmVnaW9uU2Nyb2xsZXJQcml2YXRlKHdl
YlBhZ2VQcml2YXRlKSkKK3sKKyAgICBBU1NFUlQod2ViUGFnZVByaXZhdGUpOworfQorCitJblJl
Z2lvblNjcm9sbGVyOjp+SW5SZWdpb25TY3JvbGxlcigpCit7CisgICAgZGVsZXRlIGQ7Cit9CisK
K2Jvb2wgSW5SZWdpb25TY3JvbGxlcjo6Y29tcG9zaXRlZFNldFNjcm9sbFBvc2l0aW9uKHVuc2ln
bmVkIGNhbW91ZmxhZ2VkTGF5ZXIsIGNvbnN0IFBsYXRmb3JtOjpJbnRQb2ludCYgc2Nyb2xsUG9z
aXRpb24pCit7CisgICAgQVNTRVJUKFBsYXRmb3JtOjp1c2VySW50ZXJmYWNlVGhyZWFkTWVzc2Fn
ZUNsaWVudCgpLT5pc0N1cnJlbnRUaHJlYWQoKSk7CisgICAgcmV0dXJuIGQtPmNvbXBvc2l0ZWRT
ZXRTY3JvbGxQb3NpdGlvbihjYW1vdWZsYWdlZExheWVyLCBkLT5tX3dlYlBhZ2UtPm1hcEZyb21U
cmFuc2Zvcm1lZChzY3JvbGxQb3NpdGlvbikpOworfQorCitJblJlZ2lvblNjcm9sbGVyUHJpdmF0
ZTo6SW5SZWdpb25TY3JvbGxlclByaXZhdGUoV2ViUGFnZVByaXZhdGUqIHdlYlBhZ2VQcml2YXRl
KQorICAgIDogbV93ZWJQYWdlKHdlYlBhZ2VQcml2YXRlKQoreworfQorCit2b2lkIEluUmVnaW9u
U2Nyb2xsZXJQcml2YXRlOjpzZXROb2RlKFdlYkNvcmU6Ok5vZGUqIG5vZGUpCit7CisgICAgbV9p
blJlZ2lvblNjcm9sbFN0YXJ0aW5nTm9kZSA9IG5vZGU7Cit9CisKK1dlYkNvcmU6Ok5vZGUqIElu
UmVnaW9uU2Nyb2xsZXJQcml2YXRlOjpub2RlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pblJl
Z2lvblNjcm9sbFN0YXJ0aW5nTm9kZS5nZXQoKTsKK30KKwordm9pZCBJblJlZ2lvblNjcm9sbGVy
UHJpdmF0ZTo6cmVzZXQoKQoreworICAgIHNldE5vZGUoMCk7Cit9CisKK2Jvb2wgSW5SZWdpb25T
Y3JvbGxlclByaXZhdGU6Omhhc05vZGUoKSBjb25zdAoreworICAgIHJldHVybiAhIW1faW5SZWdp
b25TY3JvbGxTdGFydGluZ05vZGU7Cit9CisKK2Jvb2wgSW5SZWdpb25TY3JvbGxlclByaXZhdGU6
OmNhblNjcm9sbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc05vZGUoKTsKK30KKworYm9vbCBJ
blJlZ2lvblNjcm9sbGVyUHJpdmF0ZTo6Y29tcG9zaXRlZFNldFNjcm9sbFBvc2l0aW9uKHVuc2ln
bmVkIGNhbW91ZmxhZ2VkTGF5ZXIsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBzY3JvbGxQb3Np
dGlvbikKK3sKKyAgICBMYXllckNvbXBvc2l0aW5nVGhyZWFkKiBzY3JvbGxMYXllciA9IHJlaW50
ZXJwcmV0X2Nhc3Q8TGF5ZXJDb21wb3NpdGluZ1RocmVhZCo+KGNhbW91ZmxhZ2VkTGF5ZXIpOwor
ICAgIHNjcm9sbExheWVyLT5vdmVycmlkZSgpLT5zZXRCb3VuZHNPcmlnaW4oV2ViQ29yZTo6Rmxv
YXRQb2ludChzY3JvbGxQb3NpdGlvbi54KCksIHNjcm9sbFBvc2l0aW9uLnkoKSkpOworCisgICAg
bV93ZWJQYWdlLT5zY2hlZHVsZUNvbXBvc2l0aW5nUnVuKCk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgSW5SZWdpb25TY3JvbGxlclByaXZhdGU6OnNjcm9sbEJ5KGNvbnN0IFBsYXRmb3Jt
OjpJbnRTaXplJiBkZWx0YSkKK3sKKyAgICBBU1NFUlQoUGxhdGZvcm06OndlYmtpdFRocmVhZE1l
c3NhZ2VDbGllbnQoKS0+aXNDdXJyZW50VGhyZWFkKCkpOworCisgICAgaWYgKCFjYW5TY3JvbGwo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHNjcm9sbE5vZGVSZWN1cnNp
dmVseShub2RlKCksIGRlbHRhKTsKK30KKworc3RkOjp2ZWN0b3I8UGxhdGZvcm06OlNjcm9sbFZp
ZXdCYXNlKj4gSW5SZWdpb25TY3JvbGxlclByaXZhdGU6OmluUmVnaW9uU2Nyb2xsYWJsZUFyZWFz
Rm9yUG9pbnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvaW50KQoreworICAgIHN0ZDo6dmVj
dG9yPFBsYXRmb3JtOjpTY3JvbGxWaWV3QmFzZSo+IHZhbGlkUmV0dXJuOworICAgIHN0ZDo6dmVj
dG9yPFBsYXRmb3JtOjpTY3JvbGxWaWV3QmFzZSo+IGVtcHR5UmV0dXJuOworCisgICAgSGl0VGVz
dFJlc3VsdCByZXN1bHQgPSBtX3dlYlBhZ2UtPm1fbWFpbkZyYW1lLT5ldmVudEhhbmRsZXIoKS0+
aGl0VGVzdFJlc3VsdEF0UG9pbnQobV93ZWJQYWdlLT5tYXBGcm9tVmlld3BvcnRUb0NvbnRlbnRz
KHBvaW50KSwgZmFsc2UgLyphbGxvd1NoYWRvd0NvbnRlbnQqLyk7CisgICAgTm9kZSogbm9kZSA9
IHJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKTsKKyAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPnJl
bmRlcmVyKCkpCisgICAgICAgIHJldHVybiBlbXB0eVJldHVybjsKKworICAgIFJlbmRlckxheWVy
KiBsYXllciA9IG5vZGUtPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCk7CisgICAgZG8gewor
ICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbGF5ZXItPnJlbmRlcmVyKCk7CisKKyAg
ICAgICAgaWYgKHJlbmRlcmVyLT5pc1JlbmRlclZpZXcoKSkgeworICAgICAgICAgICAgaWYgKFJl
bmRlclZpZXcqIHJlbmRlclZpZXcgPSB0b1JlbmRlclZpZXcocmVuZGVyZXIpKSB7CisgICAgICAg
ICAgICAgICAgRnJhbWVWaWV3KiB2aWV3ID0gcmVuZGVyVmlldy0+ZnJhbWVWaWV3KCk7CisgICAg
ICAgICAgICAgICAgaWYgKCF2aWV3KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW1wdHlS
ZXR1cm47CisKKyAgICAgICAgICAgICAgICBpZiAoY2FuU2Nyb2xsSW5uZXJGcmFtZSh2aWV3LT5m
cmFtZSgpKSkgeworICAgICAgICAgICAgICAgICAgICBwdXNoQmFja0luUmVnaW9uU2Nyb2xsYWJs
ZSh2YWxpZFJldHVybiwgbmV3IEluUmVnaW9uU2Nyb2xsYWJsZUFyZWEobV93ZWJQYWdlLCBsYXll
ciksIHRoaXMpOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoY2FuU2Nyb2xsUmVuZGVyQm94
KGxheWVyLT5yZW5kZXJCb3goKSkpIHsKKyAgICAgICAgICAgIHB1c2hCYWNrSW5SZWdpb25TY3Jv
bGxhYmxlKHZhbGlkUmV0dXJuLCBuZXcgSW5SZWdpb25TY3JvbGxhYmxlQXJlYShtX3dlYlBhZ2Us
IGxheWVyKSwgdGhpcyk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vIElmIHdlIHJ1biBpbnRvIGEgZml4IHBvc2l0aW9uZWQgbGF5ZXIsIHNldCB0aGUgbGFz
dCBzY3JvbGxhYmxlIGluLXJlZ2lvbiBvYmplY3QKKyAgICAgICAgLy8gYXMgbm90IGFibGUgdG8g
cHJvcGFnYXRlIHNjcm9sbCB0byBpdHMgcGFyZW50IHNjcm9sbGFibGUuCisgICAgICAgIGlmIChp
c05vblJlbmRlclZpZXdGaXhlZFBvc2l0aW9uZWRDb250YWluZXIobGF5ZXIpICYmIHZhbGlkUmV0
dXJuLnNpemUoKSkgeworICAgICAgICAgICAgUGxhdGZvcm06OlNjcm9sbFZpZXdCYXNlKiBlbmQg
PSB2YWxpZFJldHVybi5iYWNrKCk7CisgICAgICAgICAgICBlbmQtPnNldENhblByb3BhZ2F0ZVNj
cm9sbGluZ1RvRW5jbG9zaW5nU2Nyb2xsYWJsZShmYWxzZSk7CisgICAgICAgIH0KKworICAgIH0g
d2hpbGUgKGxheWVyID0gcGFyZW50TGF5ZXIobGF5ZXIpKTsKKworICAgIGlmICh2YWxpZFJldHVy
bi5lbXB0eSgpKQorICAgICAgICByZXR1cm4gZW1wdHlSZXR1cm47CisKKyAgICAvLyBQb3N0LWNh
bGN1bGF0ZSB0aGUgdmlzaWJsZSB3aW5kb3cgcmVjdHMgaW4gcmV2ZXJzZSBoaXQgdGVzdCBvcmRl
ciBzbworICAgIC8vIHdlIGFjY291bnQgZm9yIGFsbCBhbmQgYW55IGNsaXBwaW5nIHJlY3RzLgor
ICAgIFdlYkNvcmU6OkludFJlY3QgcmVjdXJzaXZlQ2xpcHBpbmdSZWN0KFdlYkNvcmU6OkludFBv
aW50Ojp6ZXJvKCksIG1fd2ViUGFnZS0+dHJhbnNmb3JtZWRWaWV3cG9ydFNpemUoKSk7CisKKyAg
ICBzdGQ6OnZlY3RvcjxQbGF0Zm9ybTo6U2Nyb2xsVmlld0Jhc2UqPjo6cmV2ZXJzZV9pdGVyYXRv
ciByZW5kID0gdmFsaWRSZXR1cm4ucmVuZCgpOworICAgIGZvciAoc3RkOjp2ZWN0b3I8UGxhdGZv
cm06OlNjcm9sbFZpZXdCYXNlKj46OnJldmVyc2VfaXRlcmF0b3Igcml0ID0gdmFsaWRSZXR1cm4u
cmJlZ2luKCk7IHJpdCAhPSByZW5kOyArK3JpdCkgeworCisgICAgICAgIEluUmVnaW9uU2Nyb2xs
YWJsZUFyZWEqIGN1cnIgPSBzdGF0aWNfY2FzdDxJblJlZ2lvblNjcm9sbGFibGVBcmVhKj4oKnJp
dCk7CisgICAgICAgIFJlbmRlckxheWVyKiBsYXllciA9IGN1cnItPmxheWVyKCk7CisKKyAgICAg
ICAgaWYgKGxheWVyICYmIGxheWVyLT5yZW5kZXJlcigpLT5pc1JlbmRlclZpZXcoKSkgeyAvLyAj
ZG9jdW1lbnQgY2FzZQorICAgICAgICAgICAgRnJhbWVWaWV3KiB2aWV3ID0gdG9SZW5kZXJWaWV3
KGxheWVyLT5yZW5kZXJlcigpKS0+ZnJhbWVWaWV3KCk7CisgICAgICAgICAgICBBU1NFUlQodmll
dyk7CisgICAgICAgICAgICBBU1NFUlQoY2FuU2Nyb2xsSW5uZXJGcmFtZSh2aWV3LT5mcmFtZSgp
KSk7CisKKyAgICAgICAgICAgIFdlYkNvcmU6OkludFJlY3QgZnJhbWVXaW5kb3dSZWN0ID0gbV93
ZWJQYWdlLT5tYXBUb1RyYW5zZm9ybWVkKG1fd2ViUGFnZS0+Z2V0UmVjdXJzaXZlVmlzaWJsZVdp
bmRvd1JlY3QodmlldykpOworICAgICAgICAgICAgZnJhbWVXaW5kb3dSZWN0LmludGVyc2VjdChy
ZWN1cnNpdmVDbGlwcGluZ1JlY3QpOworICAgICAgICAgICAgY3Vyci0+c2V0VmlzaWJsZVdpbmRv
d1JlY3QoZnJhbWVXaW5kb3dSZWN0KTsKKyAgICAgICAgICAgIHJlY3Vyc2l2ZUNsaXBwaW5nUmVj
dCA9IGZyYW1lV2luZG93UmVjdDsKKworICAgICAgICB9IGVsc2UgeyAvLyBSZW5kZXJCb3gtYmFz
ZWQgZWxlbWVudHMgY2FzZSAoc2Nyb2xsYWJsZSBib3hlcyAoZGl2J3MsIHAncywgdGV4dGFyZWEn
cywgZXRjKSkuCisKKyAgICAgICAgICAgIFJlbmRlckJveCogYm94ID0gbGF5ZXItPnJlbmRlckJv
eCgpOworICAgICAgICAgICAgQVNTRVJUKGJveCk7CisgICAgICAgICAgICBBU1NFUlQoY2FuU2Ny
b2xsUmVuZGVyQm94KGJveCkpOworCisgICAgICAgICAgICBXZWJDb3JlOjpJbnRSZWN0IHZpc2li
bGVXaW5kb3dSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChib3gtPmFic29sdXRlQ2xpcHBlZE92ZXJm
bG93UmVjdCgpKTsKKyAgICAgICAgICAgIHZpc2libGVXaW5kb3dSZWN0ID0gYm94LT5mcmFtZSgp
LT52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3codmlzaWJsZVdpbmRvd1JlY3QpOworICAgICAgICAg
ICAgdmlzaWJsZVdpbmRvd1JlY3QgPSBtX3dlYlBhZ2UtPm1hcFRvVHJhbnNmb3JtZWQodmlzaWJs
ZVdpbmRvd1JlY3QpOworICAgICAgICAgICAgdmlzaWJsZVdpbmRvd1JlY3QuaW50ZXJzZWN0KHJl
Y3Vyc2l2ZUNsaXBwaW5nUmVjdCk7CisKKyAgICAgICAgICAgIGN1cnItPnNldFZpc2libGVXaW5k
b3dSZWN0KHZpc2libGVXaW5kb3dSZWN0KTsKKyAgICAgICAgICAgIHJlY3Vyc2l2ZUNsaXBwaW5n
UmVjdCA9IHZpc2libGVXaW5kb3dSZWN0OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJu
IHZhbGlkUmV0dXJuOworfQorCitib29sIEluUmVnaW9uU2Nyb2xsZXJQcml2YXRlOjpzY3JvbGxO
b2RlUmVjdXJzaXZlbHkoV2ViQ29yZTo6Tm9kZSogbm9kZSwgY29uc3QgV2ViQ29yZTo6SW50U2l6
ZSYgZGVsdGEpCit7CisgICAgaWYgKGRlbHRhLmlzWmVybygpKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmVuZGVy
T2JqZWN0KiByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlcikK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgRnJhbWVWaWV3KiB2aWV3ID0gcmVuZGVyZXIt
PnZpZXcoKS0+ZnJhbWVWaWV3KCk7CisgICAgaWYgKCF2aWV3KQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAvLyBUcnkgc2Nyb2xsaW5nIHRoZSByZW5kZXJlci4KKyAgICBpZiAoc2Nyb2xs
UmVuZGVyZXIocmVuZGVyZXIsIGRlbHRhKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAv
LyBXZSd2ZSBoaXQgdGhlIHBhZ2UsIGRvbid0IHNjcm9sbCBpdCBhbmQgcmV0dXJuIGZhbHNlLgor
ICAgIGlmICh2aWV3ID09IG1fd2ViUGFnZS0+bV9tYWluRnJhbWUtPnZpZXcoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgLy8gVHJ5IHNjcm9sbGluZyB0aGUgRnJhbWVWaWV3LgorICAg
IGlmIChjYW5TY3JvbGxJbm5lckZyYW1lKHZpZXctPmZyYW1lKCkpKSB7CisgICAgICAgIEludFNp
emUgdmlld0RlbHRhID0gZGVsdGE7CisgICAgICAgIEludFBvaW50IG5ld1ZpZXdPZmZzZXQgPSB2
aWV3LT5zY3JvbGxQb3NpdGlvbigpOworICAgICAgICBJbnRQb2ludCBtYXhWaWV3T2Zmc2V0ID0g
dmlldy0+bWF4aW11bVNjcm9sbFBvc2l0aW9uKCk7CisgICAgICAgIGFkanVzdFNjcm9sbERlbHRh
KG1heFZpZXdPZmZzZXQsIG5ld1ZpZXdPZmZzZXQsIHZpZXdEZWx0YSk7CisKKyAgICAgICAgaWYg
KCF2aWV3RGVsdGEuaXNaZXJvKCkpIHsKKyAgICAgICAgICAgIHZpZXctPnNldENhbkJsaXRPblNj
cm9sbChmYWxzZSk7CisKKyAgICAgICAgICAgIEJhY2tpbmdTdG9yZUNsaWVudCogYmFja2luZ1N0
b3JlQ2xpZW50ID0gbV93ZWJQYWdlLT5iYWNraW5nU3RvcmVDbGllbnRGb3JGcmFtZSh2aWV3LT5m
cmFtZSgpKTsKKyAgICAgICAgICAgIGlmIChiYWNraW5nU3RvcmVDbGllbnQpIHsKKyAgICAgICAg
ICAgICAgICBiYWNraW5nU3RvcmVDbGllbnQtPnNldElzQ2xpZW50R2VuZXJhdGVkU2Nyb2xsKHRy
dWUpOworICAgICAgICAgICAgICAgIGJhY2tpbmdTdG9yZUNsaWVudC0+c2V0SXNTY3JvbGxOb3Rp
ZmljYXRpb25TdXBwcmVzc2VkKHRydWUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBz
ZXROb2RlKHZpZXctPmZyYW1lKCktPmRvY3VtZW50KCkpOworCisgICAgICAgICAgICB2aWV3LT5z
Y3JvbGxCeSh2aWV3RGVsdGEpOworCisgICAgICAgICAgICBpZiAoYmFja2luZ1N0b3JlQ2xpZW50
KSB7CisgICAgICAgICAgICAgICAgYmFja2luZ1N0b3JlQ2xpZW50LT5zZXRJc0NsaWVudEdlbmVy
YXRlZFNjcm9sbChmYWxzZSk7CisgICAgICAgICAgICAgICAgYmFja2luZ1N0b3JlQ2xpZW50LT5z
ZXRJc1Njcm9sbE5vdGlmaWNhdGlvblN1cHByZXNzZWQoZmFsc2UpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFRy
eSBzY3JvbGxpbmcgdGhlIG5vZGUgb2YgdGhlIGVuY2xvc2luZyBmcmFtZS4KKyAgICBGcmFtZSog
ZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpOworICAgIGlmIChmcmFtZSkgeworICAg
ICAgICBOb2RlKiBvd25lck5vZGUgPSBmcmFtZS0+b3duZXJFbGVtZW50KCk7CisgICAgICAgIGlm
IChzY3JvbGxOb2RlUmVjdXJzaXZlbHkob3duZXJOb2RlLCBkZWx0YSkpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgSW5SZWdp
b25TY3JvbGxlclByaXZhdGU6OnNjcm9sbFJlbmRlcmVyKFdlYkNvcmU6OlJlbmRlck9iamVjdCog
cmVuZGVyZXIsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGRlbHRhKQoreworICAgIFJlbmRlckxh
eWVyKiBsYXllciA9IHJlbmRlcmVyLT5lbmNsb3NpbmdMYXllcigpOworICAgIGlmICghbGF5ZXIp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFRyeSB0byBzY3JvbGwgbGF5ZXIuCisg
ICAgYm9vbCByZXN0cmljdGVkQnlMaW5lQ2xhbXAgPSBmYWxzZTsKKyAgICBpZiAocmVuZGVyZXIt
PnBhcmVudCgpKQorICAgICAgICByZXN0cmljdGVkQnlMaW5lQ2xhbXAgPSAhcmVuZGVyZXItPnBh
cmVudCgpLT5zdHlsZSgpLT5saW5lQ2xhbXAoKS5pc05vbmUoKTsKKworICAgIGlmIChyZW5kZXJl
ci0+aGFzT3ZlcmZsb3dDbGlwKCkgJiYgIXJlc3RyaWN0ZWRCeUxpbmVDbGFtcCkgeworICAgICAg
ICBJbnRTaXplIGxheWVyRGVsdGEgPSBkZWx0YTsKKyAgICAgICAgSW50UG9pbnQgbWF4T2Zmc2V0
KGxheWVyLT5zY3JvbGxXaWR0aCgpIC0gbGF5ZXItPnJlbmRlckJveCgpLT5jbGllbnRXaWR0aCgp
LCBsYXllci0+c2Nyb2xsSGVpZ2h0KCkgLSBsYXllci0+cmVuZGVyQm94KCktPmNsaWVudEhlaWdo
dCgpKTsKKyAgICAgICAgSW50UG9pbnQgY3VycmVudE9mZnNldChsYXllci0+c2Nyb2xsWE9mZnNl
dCgpLCBsYXllci0+c2Nyb2xsWU9mZnNldCgpKTsKKyAgICAgICAgYWRqdXN0U2Nyb2xsRGVsdGEo
bWF4T2Zmc2V0LCBjdXJyZW50T2Zmc2V0LCBsYXllckRlbHRhKTsKKyAgICAgICAgaWYgKCFsYXll
ckRlbHRhLmlzWmVybygpKSB7CisgICAgICAgICAgICBzZXROb2RlKGVuY2xvc2luZ0xheWVyTm9k
ZShsYXllcikpOworICAgICAgICAgICAgSW50UG9pbnQgbmV3T2Zmc2V0ID0gY3VycmVudE9mZnNl
dCArIGxheWVyRGVsdGE7CisgICAgICAgICAgICBsYXllci0+c2Nyb2xsVG9PZmZzZXQoSW50U2l6
ZShuZXdPZmZzZXQueCgpLCBuZXdPZmZzZXQueSgpKSk7CisgICAgICAgICAgICByZW5kZXJlci0+
cmVwYWludCh0cnVlKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAg
fQorCisgICAgd2hpbGUgKGxheWVyID0gbGF5ZXItPnBhcmVudCgpKSB7CisgICAgICAgIGlmIChj
YW5TY3JvbGxSZW5kZXJCb3gobGF5ZXItPnJlbmRlckJveCgpKSkKKyAgICAgICAgICAgIHJldHVy
biBzY3JvbGxSZW5kZXJlcihsYXllci0+cmVuZGVyQm94KCksIGRlbHRhKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgSW5SZWdpb25TY3JvbGxlclByaXZhdGU6OmFkanVz
dFNjcm9sbERlbHRhKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBtYXhPZmZzZXQsIGNvbnN0IFdl
YkNvcmU6OkludFBvaW50JiBjdXJyZW50T2Zmc2V0LCBXZWJDb3JlOjpJbnRTaXplJiBkZWx0YSkg
Y29uc3QKK3sKKyAgICBpZiAoY3VycmVudE9mZnNldC54KCkgKyBkZWx0YS53aWR0aCgpID4gbWF4
T2Zmc2V0LngoKSkKKyAgICAgICAgZGVsdGEuc2V0V2lkdGgoc3RkOjptaW4obWF4T2Zmc2V0Lngo
KSAtIGN1cnJlbnRPZmZzZXQueCgpLCBkZWx0YS53aWR0aCgpKSk7CisKKyAgICBpZiAoY3VycmVu
dE9mZnNldC54KCkgKyBkZWx0YS53aWR0aCgpIDwgMCkKKyAgICAgICAgZGVsdGEuc2V0V2lkdGgo
c3RkOjptYXgoLWN1cnJlbnRPZmZzZXQueCgpLCBkZWx0YS53aWR0aCgpKSk7CisKKyAgICBpZiAo
Y3VycmVudE9mZnNldC55KCkgKyBkZWx0YS5oZWlnaHQoKSA+IG1heE9mZnNldC55KCkpCisgICAg
ICAgIGRlbHRhLnNldEhlaWdodChzdGQ6Om1pbihtYXhPZmZzZXQueSgpIC0gY3VycmVudE9mZnNl
dC55KCksIGRlbHRhLmhlaWdodCgpKSk7CisKKyAgICBpZiAoY3VycmVudE9mZnNldC55KCkgKyBk
ZWx0YS5oZWlnaHQoKSA8IDApCisgICAgICAgIGRlbHRhLnNldEhlaWdodChzdGQ6Om1heCgtY3Vy
cmVudE9mZnNldC55KCksIGRlbHRhLmhlaWdodCgpKSk7Cit9CisKK3N0YXRpYyBib29sIGNhblNj
cm9sbElubmVyRnJhbWUoRnJhbWUqIGZyYW1lKQoreworICAgIGlmICghZnJhbWUgfHwgIWZyYW1l
LT52aWV3KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIE5vdCBoYXZpbmcgYW4g
b3duZXIgZWxlbWVudCBtZWFucyB0aGF0IHdlIGFyZSBvbiB0aGUgbWFpbmZyYW1lLgorICAgIGlm
ICghZnJhbWUtPm93bmVyRWxlbWVudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBB
U1NFUlQoZnJhbWUgIT0gZnJhbWUtPnBhZ2UoKS0+bWFpbkZyYW1lKCkpOworCisgICAgSW50U2l6
ZSB2aXNpYmxlU2l6ZSA9IGZyYW1lLT52aWV3KCktPnZpc2libGVDb250ZW50UmVjdCgpLnNpemUo
KTsKKyAgICBJbnRTaXplIGNvbnRlbnRzU2l6ZSA9IGZyYW1lLT52aWV3KCktPmNvbnRlbnRzU2l6
ZSgpOworCisgICAgYm9vbCBjYW5CZVNjcm9sbGVkID0gY29udGVudHNTaXplLmhlaWdodCgpID4g
dmlzaWJsZVNpemUuaGVpZ2h0KCkgfHwgY29udGVudHNTaXplLndpZHRoKCkgPiB2aXNpYmxlU2l6
ZS53aWR0aCgpOworCisgICAgLy8gTGV0cyBhbHNvIGNvbnNpZGVyIHRoZSAnb3ZlcmZsb3cte3gs
eX0gcHJvcGVydHkgc2V0IGRpcmVjdGx5IHRvIHRoZSB7aX1mcmFtZSB0YWcuCisgICAgcmV0dXJu
IGNhbkJlU2Nyb2xsZWQgJiYgKGZyYW1lLT5vd25lckVsZW1lbnQoKS0+c2Nyb2xsaW5nTW9kZSgp
ICE9IFNjcm9sbGJhckFsd2F5c09mZik7Cit9CisKKy8vIFRoZSBSZW5kZXJCb3g6OmNhbmJlU2Ny
b2xsZWRBbmRIYXNTY3JvbGxhYmxlQXJlYSBtZXRob2QgcmV0dXJucyB0cnVlIGZvciB0aGUKKy8v
IGZvbGxvd2luZyBzY2VuYXJpbywgZm9yIGV4YW1wbGU6CisvLyAoMSkgYSBkaXYgdGhhdCBoYXMg
YSB2ZXJ0aWNhbCBvdmVyZmxvdyBidXQgbm8gaG9yaXpvbnRhbCBvdmVyZmxvdworLy8gICAgIHdp
dGggb3ZlcmZsb3cteTogaGlkZGVuIGFuZCBvdmVyZmxvdy14OiBhdXRvIHNldC4KKy8vIFRoZSB2
ZXJzaW9uIGJlbG93IGZpeGVzIGl0LgorLy8gRklYTUU6IEZpeCBSZW5kZXJCb3g6OmNhbkJlU2Ny
b2xsZWRBbmRIYXNTY3JvbGxhYmxlQXJlYSBtZXRob2QgaW5zdGVhZC4KK3N0YXRpYyBib29sIGNh
blNjcm9sbFJlbmRlckJveChSZW5kZXJCb3gqIGJveCkKK3sKKyAgICBpZiAoIWJveCB8fCAhYm94
LT5oYXNPdmVyZmxvd0NsaXAoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGJv
eC0+c2Nyb2xsc092ZXJmbG93WCgpICYmIChib3gtPnNjcm9sbFdpZHRoKCkgIT0gYm94LT5jbGll
bnRXaWR0aCgpKQorICAgICAgICB8fCBib3gtPnNjcm9sbHNPdmVyZmxvd1koKSAmJiAoYm94LT5z
Y3JvbGxIZWlnaHQoKSAhPSBib3gtPmNsaWVudEhlaWdodCgpKSkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICBOb2RlKiBub2RlID0gYm94LT5ub2RlKCk7CisgICAgcmV0dXJuIG5vZGUgJiYg
KG5vZGUtPnJlbmRlcmVySXNFZGl0YWJsZSgpIHx8IG5vZGUtPmlzRG9jdW1lbnROb2RlKCkpOwor
fQorCitzdGF0aWMgUmVuZGVyTGF5ZXIqIHBhcmVudExheWVyKFJlbmRlckxheWVyKiBsYXllcikK
K3sKKyAgICBBU1NFUlQobGF5ZXIpOworICAgIGlmIChsYXllci0+cGFyZW50KCkpCisgICAgICAg
IHJldHVybiBsYXllci0+cGFyZW50KCk7CisKKyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0g
bGF5ZXItPnJlbmRlcmVyKCk7CisgICAgaWYgKHJlbmRlcmVyLT5kb2N1bWVudCgpICYmIHJlbmRl
cmVyLT5kb2N1bWVudCgpLT5vd25lckVsZW1lbnQoKSAmJiByZW5kZXJlci0+ZG9jdW1lbnQoKS0+
b3duZXJFbGVtZW50KCktPnJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybiByZW5kZXJlci0+ZG9j
dW1lbnQoKS0+b3duZXJFbGVtZW50KCktPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCk7CisK
KyAgICByZXR1cm4gMDsKK30KKworLy8gRklYTUU6IE1ha2UgUmVuZGVyTGF5ZXI6OmVuY2xvc2lu
Z0VsZW1lbnQgcHVibGljIHNvIHRoaXMgb25lIGNhbiBiZSByZW1vdmVkLgorc3RhdGljIE5vZGUq
IGVuY2xvc2luZ0xheWVyTm9kZShSZW5kZXJMYXllciogbGF5ZXIpCit7CisgICAgZm9yIChSZW5k
ZXJPYmplY3QqIHIgPSBsYXllci0+cmVuZGVyZXIoKTsgcjsgciA9IHItPnBhcmVudCgpKSB7Cisg
ICAgICAgIGlmIChOb2RlKiBlID0gci0+bm9kZSgpKQorICAgICAgICAgICAgcmV0dXJuIGU7Cisg
ICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCitzdGF0
aWMgYm9vbCBpc05vblJlbmRlclZpZXdGaXhlZFBvc2l0aW9uZWRDb250YWluZXIoUmVuZGVyTGF5
ZXIqIGxheWVyKQoreworICAgIFJlbmRlck9iamVjdCogbyA9IGxheWVyLT5yZW5kZXJlcigpOwor
ICAgIGlmIChvLT5pc1JlbmRlclZpZXcoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
cmV0dXJuIG8tPmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpICYmIG8tPnN0eWxlKCktPnBvc2l0aW9u
KCkgPT0gRml4ZWRQb3NpdGlvbjsKK30KKworc3RhdGljIHZvaWQgcHVzaEJhY2tJblJlZ2lvblNj
cm9sbGFibGUoc3RkOjp2ZWN0b3I8UGxhdGZvcm06OlNjcm9sbFZpZXdCYXNlKj4mIHZlY3Rvciwg
SW5SZWdpb25TY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEsIEluUmVnaW9uU2Nyb2xsZXJQ
cml2YXRlKiBzY3JvbGxlcikKK3sKKyAgICBBU1NFUlQoc2Nyb2xsZXIpOworICAgIEFTU0VSVCgh
c2Nyb2xsYWJsZUFyZWEtPmlzTnVsbCgpKTsKKworICAgIHNjcm9sbGFibGVBcmVhLT5zZXRDYW5Q
cm9wYWdhdGVTY3JvbGxpbmdUb0VuY2xvc2luZ1Njcm9sbGFibGUoIWlzTm9uUmVuZGVyVmlld0Zp
eGVkUG9zaXRpb25lZENvbnRhaW5lcihzY3JvbGxhYmxlQXJlYS0+bGF5ZXIoKSkpOworICAgIHZl
Y3Rvci5wdXNoX2JhY2soc2Nyb2xsYWJsZUFyZWEpOworICAgIGlmICh2ZWN0b3Iuc2l6ZSgpID09
IDEpIHsKKyAgICAgICAgLy8gRklYTUU6IFVzZSBSZW5kZXJMYXllcjo6cmVuZGVyQm94KCktPm5v
ZGUoKSBpbnN0ZWFkPworICAgICAgICBzY3JvbGxlci0+c2V0Tm9kZShlbmNsb3NpbmdMYXllck5v
ZGUoc2Nyb2xsYWJsZUFyZWEtPmxheWVyKCkpKTsKKyAgICB9Cit9CisKK30KK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvSW5SZWdpb25TY3JvbGxlci5oIGIvU291
cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9JblJlZ2lvblNjcm9sbGVyLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQzN2FmYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvSW5SZWdpb25TY3JvbGxlci5oCkBAIC0wLDAgKzEsNDcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExp
bWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0
aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lmbmRl
ZiBJblJlZ2lvblNjcm9sbGVyX2gKKyNkZWZpbmUgSW5SZWdpb25TY3JvbGxlcl9oCisKKyNpbmNs
dWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1QcmltaXRpdmVzLmg+CisKK25hbWVzcGFjZSBCbGFja0Jl
cnJ5IHsKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBJblJlZ2lvblNjcm9sbGVyUHJpdmF0
ZTsKK2NsYXNzIFRvdWNoRXZlbnRIYW5kbGVyOworY2xhc3MgV2ViUGFnZVByaXZhdGU7CisKK2Ns
YXNzIEluUmVnaW9uU2Nyb2xsZXIgeworcHVibGljOgorICAgIEluUmVnaW9uU2Nyb2xsZXIoV2Vi
UGFnZVByaXZhdGUqKTsKKyAgICB+SW5SZWdpb25TY3JvbGxlcigpOworCisgICAgYm9vbCBjb21w
b3NpdGVkU2V0U2Nyb2xsUG9zaXRpb24odW5zaWduZWQgLypjYW1vdWZsYWdlZExheWVyKi8sIGNv
bnN0IFBsYXRmb3JtOjpJbnRQb2ludCYgLypzY3JvbGxQb3NpdGlvbiovKTsKKworcHJpdmF0ZToK
KyAgICBmcmllbmQgY2xhc3MgV2ViUGFnZVByaXZhdGU7CisgICAgZnJpZW5kIGNsYXNzIFRvdWNo
RXZlbnRIYW5kbGVyOworICAgIEluUmVnaW9uU2Nyb2xsZXJQcml2YXRlICpkOworfTsKKworfQor
fQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvSW5S
ZWdpb25TY3JvbGxlcl9wLmggYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL0luUmVnaW9u
U2Nyb2xsZXJfcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjNDdmOTYK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL0luUmVnaW9u
U2Nyb2xsZXJfcC5oCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEs
IDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIx
MTAtMTMwMSAgVVNBCisgKi8KKworI2lmbmRlZiBJblJlZ2lvblNjcm9sbGVyX3BfaAorI2RlZmlu
ZSBJblJlZ2lvblNjcm9sbGVyX3BfaAorCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUg
IkludFBvaW50LmgiCisKKyNpbmNsdWRlIDxpbnRlcmFjdGlvbi9TY3JvbGxWaWV3QmFzZS5oPgor
I2luY2x1ZGUgPHZlY3Rvcj4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgRnJhbWU7Citj
bGFzcyBOb2RlOworY2xhc3MgUmVuZGVyT2JqZWN0OworfQorCituYW1lc3BhY2UgQmxhY2tCZXJy
eSB7CituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViUGFnZVByaXZhdGU7CisKK2NsYXNz
IEluUmVnaW9uU2Nyb2xsZXJQcml2YXRlIHsKK3B1YmxpYzoKKyAgICBJblJlZ2lvblNjcm9sbGVy
UHJpdmF0ZShXZWJQYWdlUHJpdmF0ZSopOworCisgICAgdm9pZCBzZXROb2RlKFdlYkNvcmU6Ok5v
ZGUqKTsKKyAgICBXZWJDb3JlOjpOb2RlKiBub2RlKCkgY29uc3Q7CisgICAgdm9pZCByZXNldCgp
OworCisgICAgYm9vbCBjYW5TY3JvbGwoKSBjb25zdDsKKyAgICBib29sIGhhc05vZGUoKSBjb25z
dDsKKworICAgIGJvb2wgc2Nyb2xsQnkoY29uc3QgUGxhdGZvcm06OkludFNpemUmIGRlbHRhKTsK
KyAgICBib29sIGNvbXBvc2l0ZWRTZXRTY3JvbGxQb3NpdGlvbih1bnNpZ25lZCBjYW1vdWZsYWdl
ZExheWVyLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24pOworCisgICAg
c3RkOjp2ZWN0b3I8UGxhdGZvcm06OlNjcm9sbFZpZXdCYXNlKj4gaW5SZWdpb25TY3JvbGxhYmxl
QXJlYXNGb3JQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOworCisgICAgV2ViUGFnZVBy
aXZhdGUqIG1fd2ViUGFnZTsKKworcHJpdmF0ZToKKyAgICBib29sIHNjcm9sbE5vZGVSZWN1cnNp
dmVseShXZWJDb3JlOjpOb2RlKiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgZGVsdGEpOworICAg
IGJvb2wgc2Nyb2xsUmVuZGVyZXIoV2ViQ29yZTo6UmVuZGVyT2JqZWN0KiwgY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSYgZGVsdGEpOworICAgIHZvaWQgYWRqdXN0U2Nyb2xsRGVsdGEoY29uc3QgV2Vi
Q29yZTo6SW50UG9pbnQmIG1heE9mZnNldCwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGN1cnJl
bnRPZmZzZXQsIFdlYkNvcmU6OkludFNpemUmIGRlbHRhKSBjb25zdDsKKworICAgIFJlZlB0cjxX
ZWJDb3JlOjpOb2RlPiBtX2luUmVnaW9uU2Nyb2xsU3RhcnRpbmdOb2RlOworfTsKKworfQorfQor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFn
ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2UuY3BwCmluZGV4IGI1
NDk0YWQuLmNkZmE4MWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkv
V2ViUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJQYWdlLmNw
cApAQCAtNzEsNiArNzEsNyBAQAogI2luY2x1ZGUgIkljb25EYXRhYmFzZUNsaWVudEJsYWNrQmVy
cnkuaCIKICNpbmNsdWRlICJJblBhZ2VTZWFyY2hNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiSW5SZWdp
b25TY3JvbGxhYmxlQXJlYS5oIgorI2luY2x1ZGUgIkluUmVnaW9uU2Nyb2xsZXJfcC5oIgogI2lu
Y2x1ZGUgIklucHV0SGFuZGxlci5oIgogI2luY2x1ZGUgIkluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ2xpZW50QmxhY2tCZXJyeS5oIgpAQCAtMTUyMiw3
ICsxNTIzLDcgQEAgYm9vbCBXZWJQYWdlUHJpdmF0ZTo6c2Nyb2xsQnkoaW50IGRlbHRhWCwgaW50
IGRlbHRhWSwgYm9vbCBzY3JvbGxNYWluRnJhbWUpCiAgICAgICAgICAgICBkZWx0YS53aWR0aCgp
IDwgMCA/IC11bnRyYW5zZm9ybWVkQ29waWVkRGVsdGEud2lkdGgoKSA6IHVudHJhbnNmb3JtZWRD
b3BpZWREZWx0YS53aWR0aCgpLAogICAgICAgICAgICAgZGVsdGEuaGVpZ2h0KCkgPCAwID8gLXVu
dHJhbnNmb3JtZWRDb3BpZWREZWx0YS5oZWlnaHQoKTogdW50cmFuc2Zvcm1lZENvcGllZERlbHRh
LmhlaWdodCgpKTsKIAotICAgICAgICBpZiAobV9pblJlZ2lvblNjcm9sbGVyLT5zY3JvbGxCeShk
ZWx0YSkpIHsKKyAgICAgICAgaWYgKG1faW5SZWdpb25TY3JvbGxlci0+ZC0+c2Nyb2xsQnkoZGVs
dGEpKSB7CiAgICAgICAgICAgICBtX3NlbGVjdGlvbkhhbmRsZXItPnNlbGVjdGlvblBvc2l0aW9u
Q2hhbmdlZCgpOwogICAgICAgICAgICAgLy8gRklYTUU6IFdlIGhhdmUgY29kZSBpbiBwbGFjZSB0
byBoYW5kbGUgc2Nyb2xsaW5nIGFuZCBjbGlwcGluZyB0YXAgaGlnaGxpZ2h0CiAgICAgICAgICAg
ICAvLyBvbiBpbi1yZWdpb24gc2Nyb2xsaW5nLiBBcyBzb29uIGFzIGl0IGlzIGZhc3QgZW5vdWdo
IChpLmUuIHdlIGhhdmUgaXQgYmFja2VkIGJ5CkBAIC0xNTQ4LDkgKzE1NDksOSBAQCBib29sIFdl
YlBhZ2U6OnNjcm9sbEJ5KGNvbnN0IFBsYXRmb3JtOjpJbnRTaXplJiBkZWx0YSwgYm9vbCBzY3Jv
bGxNYWluRnJhbWUpCiAKIHZvaWQgV2ViUGFnZVByaXZhdGU6Om5vdGlmeUluUmVnaW9uU2Nyb2xs
U3RhdHVzQ2hhbmdlZChib29sIHN0YXR1cykKIHsKLSAgICBpZiAoIXN0YXR1cyAmJiBtX2luUmVn
aW9uU2Nyb2xsZXItPmhhc05vZGUoKSkgewotICAgICAgICBlbnF1ZXVlUmVuZGVyaW5nT2ZDbGlw
cGVkQ29udGVudE9mU2Nyb2xsYWJsZU5vZGVBZnRlckluUmVnaW9uU2Nyb2xsaW5nKG1faW5SZWdp
b25TY3JvbGxlci0+bm9kZSgpKTsKLSAgICAgICAgbV9pblJlZ2lvblNjcm9sbGVyLT5yZXNldCgp
OworICAgIGlmICghc3RhdHVzICYmIG1faW5SZWdpb25TY3JvbGxlci0+ZC0+aGFzTm9kZSgpKSB7
CisgICAgICAgIGVucXVldWVSZW5kZXJpbmdPZkNsaXBwZWRDb250ZW50T2ZTY3JvbGxhYmxlTm9k
ZUFmdGVySW5SZWdpb25TY3JvbGxpbmcobV9pblJlZ2lvblNjcm9sbGVyLT5kLT5ub2RlKCkpOwor
ICAgICAgICBtX2luUmVnaW9uU2Nyb2xsZXItPmQtPnJlc2V0KCk7CiAgICAgfQogfQogCkBAIC0y
NjMzLDggKzI2MzQsOCBAQCB2b2lkIFdlYlBhZ2VQcml2YXRlOjpjbGVhckRvY3VtZW50RGF0YShj
b25zdCBEb2N1bWVudCogZG9jdW1lbnRHb2luZ0F3YXkpCiAgICAgaWYgKG1fY3VycmVudEJsb2Nr
Wm9vbUFkanVzdGVkTm9kZSAmJiBtX2N1cnJlbnRCbG9ja1pvb21BZGp1c3RlZE5vZGUtPmRvY3Vt
ZW50KCkgPT0gZG9jdW1lbnRHb2luZ0F3YXkpCiAgICAgICAgIG1fY3VycmVudEJsb2NrWm9vbUFk
anVzdGVkTm9kZSA9IDA7CiAKLSAgICBpZiAobV9pblJlZ2lvblNjcm9sbGVyLT5oYXNOb2RlKCkg
JiYgbV9pblJlZ2lvblNjcm9sbGVyLT5ub2RlKCktPmRvY3VtZW50KCkgPT0gZG9jdW1lbnRHb2lu
Z0F3YXkpCi0gICAgICAgIG1faW5SZWdpb25TY3JvbGxlci0+cmVzZXQoKTsKKyAgICBpZiAobV9p
blJlZ2lvblNjcm9sbGVyLT5kLT5oYXNOb2RlKCkgJiYgbV9pblJlZ2lvblNjcm9sbGVyLT5kLT5u
b2RlKCktPmRvY3VtZW50KCkgPT0gZG9jdW1lbnRHb2luZ0F3YXkpCisgICAgICAgIG1faW5SZWdp
b25TY3JvbGxlci0+ZC0+cmVzZXQoKTsKIAogICAgIGlmIChkb2N1bWVudEdvaW5nQXdheS0+ZnJh
bWUoKSkKICAgICAgICAgbV9pbnB1dEhhbmRsZXItPmZyYW1lVW5sb2FkZWQoZG9jdW1lbnRHb2lu
Z0F3YXktPmZyYW1lKCkpOwpAQCAtNDIxMSwxMiArNDIxMiwxMiBAQCBib29sIFdlYlBhZ2U6OnRv
dWNoRXZlbnQoY29uc3QgUGxhdGZvcm06OlRvdWNoRXZlbnQmIGV2ZW50KQogCiB2b2lkIFdlYlBh
Z2VQcml2YXRlOjpzZXRTY3JvbGxPcmlnaW5Qb2ludChjb25zdCBQbGF0Zm9ybTo6SW50UG9pbnQm
IHBvaW50KQogewotICAgIG1faW5SZWdpb25TY3JvbGxlci0+cmVzZXQoKTsKKyAgICBtX2luUmVn
aW9uU2Nyb2xsZXItPmQtPnJlc2V0KCk7CiAKICAgICBpZiAoIW1faGFzSW5SZWdpb25TY3JvbGxh
YmxlQXJlYXMpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fY2xpZW50LT5ub3RpZnlJblJlZ2lv
blNjcm9sbGluZ1N0YXJ0aW5nUG9pbnRDaGFuZ2VkKG1faW5SZWdpb25TY3JvbGxlci0+aW5SZWdp
b25TY3JvbGxhYmxlQXJlYXNGb3JQb2ludChwb2ludCkpOworICAgIG1fY2xpZW50LT5ub3RpZnlJ
blJlZ2lvblNjcm9sbGluZ1N0YXJ0aW5nUG9pbnRDaGFuZ2VkKG1faW5SZWdpb25TY3JvbGxlci0+
ZC0+aW5SZWdpb25TY3JvbGxhYmxlQXJlYXNGb3JQb2ludChwb2ludCkpOwogfQogCiB2b2lkIFdl
YlBhZ2U6OnNldFNjcm9sbE9yaWdpblBvaW50KGNvbnN0IFBsYXRmb3JtOjpJbnRQb2ludCYgcG9p
bnQpCkBAIC00NjU0LDYgKzQ2NTUsMTEgQEAgQmFja2luZ1N0b3JlKiBXZWJQYWdlOjpiYWNraW5n
U3RvcmUoKSBjb25zdAogICAgIHJldHVybiBkLT5tX2JhY2tpbmdTdG9yZTsKIH0KIAorSW5SZWdp
b25TY3JvbGxlciogV2ViUGFnZTo6aW5SZWdpb25TY3JvbGxlcigpIGNvbnN0Cit7CisgICAgcmV0
dXJuIGQtPm1faW5SZWdpb25TY3JvbGxlci5nZXQoKTsKK30KKwogYm9vbCBXZWJQYWdlOjp6b29t
VG9GaXQoKQogewogICAgIGlmIChkLT5jb250ZW50c1NpemUoKS5pc0VtcHR5KCkgfHwgIWQtPmlz
VXNlclNjYWxhYmxlKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBp
L1dlYlBhZ2UuaCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFnZS5oCmluZGV4
IDFmMGE3NTEuLjI0MDVhNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9B
cGkvV2ViUGFnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFnZS5o
CkBAIC02Myw2ICs2Myw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3MgQmFja2luZ1N0b3Jl
OwogY2xhc3MgQmFja2luZ1N0b3JlQ2xpZW50OwogY2xhc3MgQmFja2luZ1N0b3JlUHJpdmF0ZTsK
K2NsYXNzIEluUmVnaW9uU2Nyb2xsZXI7CiBjbGFzcyBSZW5kZXJRdWV1ZTsKIGNsYXNzIFdlYk92
ZXJsYXk7CiBjbGFzcyBXZWJQYWdlQ2xpZW50OwpAQCAtMTc5LDYgKzE4MCw4IEBAIHB1YmxpYzoK
IAogICAgIEJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlKCkgY29uc3Q7CiAKKyAgICBJblJlZ2lv
blNjcm9sbGVyKiBpblJlZ2lvblNjcm9sbGVyKCkgY29uc3Q7CisKICAgICBib29sIHpvb21Ub0Zp
dCgpOwogICAgIGJvb2wgem9vbVRvT25lT25lKCk7CiAgICAgdm9pZCB6b29tVG9Jbml0aWFsU2Nh
bGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQ2hhbmdlTG9nCmluZGV4IDg4YjQzYzcuLjFjZjBjZTgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5nZUxvZwpAQCAtMSw1ICsxLDc3IEBACiAyMDEyLTA4
LTA4ICBBbnRvbmlvIEdvbWVzICA8YWdvbWVzQHJpbS5jb20+CiAKKyAgICAgICAgW0JsYWNrQmVy
cnldIFRpZSB1cCB0aGUgc2Nyb2xsaW5nIG1hY2hpbmVyeSB0byB0aGUgZ3JhcGhpY3MgdHJlZSB3
aGVuIGFwcGxpY2FibGUgZm9yIGluLXJlZ2lvbiBzY3JvbGwKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkzNDgyCisgICAgICAgIFBSICMxODc2NzIKKyAg
ICAgICAgTWFrZSBJblJlZ2lvblNjcm9sbGVyIGEgc2ltcGxlIHB1YmxpYyB3ZWJraXQvIEFQSQor
ICAgICAgICBQUiAjMTg4Njc3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgSW4gb3JkZXIgdG8gcHJlcGFyZSBJblJlZ2lvblNjcm9sbGVyIHRvIGJlIGEg
cHVibGljIEFQSQorICAgICAgICBpbiB3ZWJraXQvLCB0aGUgcGF0Y2g6CisKKyAgICAgICAgMSkg
UmVuYW1lZCB0aGUgY3VycmVudCBJblJlZ2lvblNjcm9sbGVyIGNsYXNzIHRvIEluUmVnaW9uU2Ny
b2xsZXJQcml2YXRlOworICAgICAgICAyKSBNb3ZlZCBJblJlZ2lvblNjcm9sbGVyLmNwcHxoIGZy
b20gV2ViS2l0U3VwcG9ydC8gdG8gQXBpLzsKKyAgICAgICAgMykgUmVuYW1lZCBJblJlZ2lvblNj
cm9sbGVyLmggdG8gSW5SZWdpb25TY3JvbGxlcl9wLmg7CisgICAgICAgIDQpIEFkZGVkIGEgbmV3
IHB1YmxpYyBjbGFzcyBpbXBsZW1lbnRhdGlvbiB0byBJblJlZ2lvblNjcm9sbGVyLmg7CisgICAg
ICAgIDUpIEFkYXB0ZWQgV2ViUGFnZSBhbmQgVG91Y2hFdmVudEhhbmRsZXIgY2xhc3NlcyB0byB1
c2UgSW5SZWdpb25TY3JvbGxlcjo6ZCBkaXJlY3RseS4KKworICAgICAgICBUaGUgbW9zdCBpbXBv
cnRhbnQgQVBJIGhlcmUgaXMgJzo6Y29tcG9zaXRlZFNldFNjcm9sbFBvc2l0aW9uJworCisgICAg
ICAgIEl0IGlzIGEgIFVJL0NvbXBvc2l0aW5nIHRocmVhZCBtZXRob2Qgb25seSBhbmQgc2V0cyB0
aGUgYXNzb2NpYXRlZCBMYXllckNvbXBvc2l0aW5nVGhyZWFkCisgICAgICAgIChjYW1vdWZsYWdl
ZCBhcyBhIHVuc2lnbmVkKSBmb3IgZWFjaCBjcmVhdGVkIEluUmVnaW9uU2Nyb2xsYWJsZUFyZWEg
dGhhdCBzdXBwb3J0cworICAgICAgICBjb21wb3NpdGVkIHNjcm9sbGluZy4KKworICAgICAgICBU
aGUgd2F5IDo6Y29tcG9zaXRlZFNldFNjcm9sbFBvc2l0aW9uICJzY3JvbGxzIiBhIGxheWVyIGlz
IGJ5IHNldHRpbmcgdGhlIGJvdW5kc09yaWdpbgorICAgICAgICBwcm9wZXJ0eSB0byB0aGUgTGF5
ZXJDb21wb3NpdGluZ1RocmVhZCdzICdvdmVycmlkZScgcHJvcGVydHkgaW4gdGhlIFVJL0NvbXBv
c2l0aW5nIHRocmVhZC4KKworICAgICAgICAqIEFwaS9JblJlZ2lvblNjcm9sbGVyLmNwcDogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0luUmVnaW9u
U2Nyb2xsZXIuY3BwLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKEJsYWNrQmVycnk6Oldl
YktpdDo6SW5SZWdpb25TY3JvbGxlcjo6SW5SZWdpb25TY3JvbGxlcik6CisgICAgICAgIChCbGFj
a0JlcnJ5OjpXZWJLaXQ6OkluUmVnaW9uU2Nyb2xsZXI6On5JblJlZ2lvblNjcm9sbGVyKToKKyAg
ICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6SW5SZWdpb25TY3JvbGxlcjo6Y29tcG9zaXRlZFNl
dFNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6SW5SZWdpb25T
Y3JvbGxlclByaXZhdGU6OkluUmVnaW9uU2Nyb2xsZXJQcml2YXRlKToKKyAgICAgICAgKEJsYWNr
QmVycnk6OldlYktpdDo6SW5SZWdpb25TY3JvbGxlclByaXZhdGU6OnNldE5vZGUpOgorICAgICAg
ICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpJblJlZ2lvblNjcm9sbGVyUHJpdmF0ZTo6bm9kZSk6Cisg
ICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkluUmVnaW9uU2Nyb2xsZXJQcml2YXRlOjpyZXNl
dCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkluUmVnaW9uU2Nyb2xsZXJQcml2YXRl
OjpoYXNOb2RlKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6SW5SZWdpb25TY3JvbGxl
clByaXZhdGU6OmNhblNjcm9sbCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkluUmVn
aW9uU2Nyb2xsZXJQcml2YXRlOjpjb21wb3NpdGVkU2V0U2Nyb2xsUG9zaXRpb24pOgorICAgICAg
ICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpJblJlZ2lvblNjcm9sbGVyUHJpdmF0ZTo6c2Nyb2xsQnkp
OgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpJblJlZ2lvblNjcm9sbGVyUHJpdmF0ZTo6
aW5SZWdpb25TY3JvbGxhYmxlQXJlYXNGb3JQb2ludCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpX
ZWJLaXQ6OkluUmVnaW9uU2Nyb2xsZXJQcml2YXRlOjpzY3JvbGxOb2RlUmVjdXJzaXZlbHkpOgor
ICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpJblJlZ2lvblNjcm9sbGVyUHJpdmF0ZTo6c2Ny
b2xsUmVuZGVyZXIpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpJblJlZ2lvblNjcm9s
bGVyUHJpdmF0ZTo6YWRqdXN0U2Nyb2xsRGVsdGEpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2Vi
S2l0OjpjYW5TY3JvbGxJbm5lckZyYW1lKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6
Y2FuU2Nyb2xsUmVuZGVyQm94KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6cGFyZW50
TGF5ZXIpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjplbmNsb3NpbmdMYXllck5vZGUp
OgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0Ojppc05vblJlbmRlclZpZXdGaXhlZFBvc2l0
aW9uZWRDb250YWluZXIpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpwdXNoQmFja0lu
UmVnaW9uU2Nyb2xsYWJsZSk6CisgICAgICAgICogQXBpL0luUmVnaW9uU2Nyb2xsZXIuaDogQ29w
aWVkIGZyb20gU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5SZWdpb25T
Y3JvbGxlci5oLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKEluUmVnaW9uU2Nyb2xsZXIp
OgorICAgICAgICAqIEFwaS9JblJlZ2lvblNjcm9sbGVyX3AuaDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0luUmVnaW9uU2Nyb2xsZXIuaC4KKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKEluUmVnaW9uU2Ny
b2xsZXJQcml2YXRlKToKKyAgICAgICAgKiBBcGkvV2ViUGFnZS5jcHA6CisgICAgICAgIChCbGFj
a0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2VQcml2YXRlOjpzY3JvbGxCeSk6CisgICAgICAgIChCbGFj
a0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2VQcml2YXRlOjpub3RpZnlJblJlZ2lvblNjcm9sbFN0YXR1
c0NoYW5nZWQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJQYWdlUHJpdmF0ZTo6
Y2xlYXJEb2N1bWVudERhdGEpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJQYWdl
UHJpdmF0ZTo6c2V0U2Nyb2xsT3JpZ2luUG9pbnQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2Vi
S2l0OjpXZWJQYWdlOjppblJlZ2lvblNjcm9sbGVyKToKKyAgICAgICAgKFdlYktpdCk6CisgICAg
ICAgICogQXBpL1dlYlBhZ2UuaDoKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgICogV2ViS2l0
U3VwcG9ydC9JblJlZ2lvblNjcm9sbGFibGVBcmVhLmNwcDoKKyAgICAgICAgKEJsYWNrQmVycnk6
OldlYktpdDo6SW5SZWdpb25TY3JvbGxhYmxlQXJlYTo6SW5SZWdpb25TY3JvbGxhYmxlQXJlYSk6
CisgICAgICAgICogV2ViS2l0U3VwcG9ydC9Ub3VjaEV2ZW50SGFuZGxlci5jcHA6CisgICAgICAg
IChCbGFja0JlcnJ5OjpXZWJLaXQ6OlRvdWNoRXZlbnRIYW5kbGVyOjpkcmF3VGFwSGlnaGxpZ2h0
KToKKworMjAxMi0wOC0wOCAgQW50b25pbyBHb21lcyAgPGFnb21lc0ByaW0uY29tPgorCiAgICAg
ICAgIFtCbGFja0JlcnJ5XSBNYWtlIFdlYk92ZXJsYXlQcml2YXRlOjpzY2hlZHVsZUNvbXBvc2l0
aW5nUnVuIGEgV2ViUGFnZVByaXZhdGUgbWV0aG9kLgogICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTM0ODAKICAgICAgICAgUFIgIzE4ODY4MgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5SZWdpb25TY3Jv
bGxhYmxlQXJlYS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9J
blJlZ2lvblNjcm9sbGFibGVBcmVhLmNwcAppbmRleCA3NmE5ODBlLi5kNDIwNTllIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JblJlZ2lvblNjcm9s
bGFibGVBcmVhLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9y
dC9JblJlZ2lvblNjcm9sbGFibGVBcmVhLmNwcApAQCAtMjAsOCArMjAsMTEgQEAKICNpbmNsdWRl
ICJJblJlZ2lvblNjcm9sbGFibGVBcmVhLmgiCiAKICNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1
ZGUgIkxheWVyQ29tcG9zaXRpbmdUaHJlYWQuaCIKKyNpbmNsdWRlICJMYXllcldlYktpdFRocmVh
ZC5oIgogI2luY2x1ZGUgIlJlbmRlckJveC5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisj
aW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0Lmgi
CiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIldlYlBhZ2VfcC5oIgpAQCAtNjgs
NiArNzEsOCBAQCBJblJlZ2lvblNjcm9sbGFibGVBcmVhOjpJblJlZ2lvblNjcm9sbGFibGVBcmVh
KFdlYlBhZ2VQcml2YXRlKiB3ZWJQYWdlLCBSZW5kZXJMYQogICAgICAgICBtX3Njcm9sbHNWZXJ0
aWNhbGx5ID0gdmlldy0+Y29udGVudHNIZWlnaHQoKSA+IHZpZXctPnZpc2libGVIZWlnaHQoKTsK
IAogICAgICAgICBtX292ZXJzY3JvbGxMaW1pdEZhY3RvciA9IDAuMDsgLy8gRklYTUUgZXZlbnR1
YWxseSBzdXBwb3J0IG92ZXJzY3JvbGwKKyAgICAgICAgbV9jYWNoZWRDb21wb3NpdGVkU2Nyb2xs
YWJsZUxheWVyID0gMDsgLy8gRklYTUU6IE5lZWRzIGNvbXBvc2l0ZWQgbGF5ZXIgZm9yIGlubmVy
IGZyYW1lcy4KKwogICAgIH0gZWxzZSB7IC8vIFJlbmRlckJveC1iYXNlZCBlbGVtZW50cyBjYXNl
IChzY3JvbGxhYmxlIGJveGVzIChkaXYncywgcCdzLCB0ZXh0YXJlYSdzLCBldGMpKS4KIAogICAg
ICAgICBSZW5kZXJCb3gqIGJveCA9IG1fbGF5ZXItPnJlbmRlckJveCgpOwpAQCAtODIsNyArODcs
MTMgQEAgSW5SZWdpb25TY3JvbGxhYmxlQXJlYTo6SW5SZWdpb25TY3JvbGxhYmxlQXJlYShXZWJQ
YWdlUHJpdmF0ZSogd2ViUGFnZSwgUmVuZGVyTGEKICAgICAgICAgbV9zY3JvbGxzSG9yaXpvbnRh
bGx5ID0gYm94LT5zY3JvbGxXaWR0aCgpICE9IGJveC0+Y2xpZW50V2lkdGgoKSAmJiBib3gtPnNj
cm9sbHNPdmVyZmxvd1goKTsKICAgICAgICAgbV9zY3JvbGxzVmVydGljYWxseSA9IGJveC0+c2Ny
b2xsSGVpZ2h0KCkgIT0gYm94LT5jbGllbnRIZWlnaHQoKSAmJiBib3gtPnNjcm9sbHNPdmVyZmxv
d1koKTsKIAotICAgICAgICBtX292ZXJzY3JvbGxMaW1pdEZhY3RvciA9IDAuMDsgLy8gRklYTUUg
ZXZlbnR1YWxseSBzdXBwb3J0IG92ZXJzY3JvbGwKKyAgICAgICAgaWYgKG1fbGF5ZXItPnVzZXND
b21wb3NpdGVkU2Nyb2xsaW5nKCkpIHsKKyAgICAgICAgICAgIG1fc3VwcG9ydHNDb21wb3NpdGVk
U2Nyb2xsaW5nID0gdHJ1ZTsKKyAgICAgICAgICAgIEFTU0VSVChtX2xheWVyLT5iYWNraW5nKCkt
Pmhhc1Njcm9sbGluZ0xheWVyKCkpOworICAgICAgICAgICAgbV9jYWNoZWRDb21wb3NpdGVkU2Ny
b2xsYWJsZUxheWVyID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4obV9sYXllci0+YmFja2lu
ZygpLT5zY3JvbGxpbmdMYXllcigpLT5wbGF0Zm9ybUxheWVyKCktPmxheWVyQ29tcG9zaXRpbmdU
aHJlYWQoKSk7CisgICAgICAgIH0KKworICAgICAgICBtX292ZXJzY3JvbGxMaW1pdEZhY3RvciA9
IDAuMDsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9X
ZWJLaXRTdXBwb3J0L0luUmVnaW9uU2Nyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdC9ibGFja2Jl
cnJ5L1dlYktpdFN1cHBvcnQvSW5SZWdpb25TY3JvbGxlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDNkOTgzNzUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9ibGFja2Jl
cnJ5L1dlYktpdFN1cHBvcnQvSW5SZWdpb25TY3JvbGxlci5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSwzNTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBSZXNlYXJjaCBJ
biBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
Ci0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAq
Ci0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3Qs
IHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW5SZWdpb25TY3JvbGxlci5oIgot
Ci0jaW5jbHVkZSAiQmFja2luZ1N0b3JlQ2xpZW50LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNp
bmNsdWRlICJIVE1MRnJhbWVPd25lckVsZW1lbnQuaCIKLSNpbmNsdWRlICJIaXRUZXN0UmVzdWx0
LmgiCi0jaW5jbHVkZSAiSW5SZWdpb25TY3JvbGxhYmxlQXJlYS5oIgotI2luY2x1ZGUgIlBhZ2Uu
aCIKLSNpbmNsdWRlICJSZW5kZXJCb3guaCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgotI2lu
Y2x1ZGUgIlJlbmRlck9iamVjdC5oIgotI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKLSNpbmNsdWRl
ICJXZWJQYWdlX3AuaCIKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBC
bGFja0JlcnJ5IHsKLW5hbWVzcGFjZSBXZWJLaXQgewotCi1zdGF0aWMgYm9vbCBjYW5TY3JvbGxJ
bm5lckZyYW1lKEZyYW1lKiBmcmFtZSkKLXsKLSAgICBpZiAoIWZyYW1lIHx8ICFmcmFtZS0+dmll
dygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBOb3QgaGF2aW5nIGFuIG93bmVy
IGVsZW1lbnQgbWVhbnMgdGhhdCB3ZSBhcmUgb24gdGhlIG1haW5mcmFtZS4KLSAgICBpZiAoIWZy
YW1lLT5vd25lckVsZW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQVNTRVJU
KGZyYW1lICE9IGZyYW1lLT5wYWdlKCktPm1haW5GcmFtZSgpKTsKLQotICAgIEludFNpemUgdmlz
aWJsZVNpemUgPSBmcmFtZS0+dmlldygpLT52aXNpYmxlQ29udGVudFJlY3QoKS5zaXplKCk7Ci0g
ICAgSW50U2l6ZSBjb250ZW50c1NpemUgPSBmcmFtZS0+dmlldygpLT5jb250ZW50c1NpemUoKTsK
LQotICAgIGJvb2wgY2FuQmVTY3JvbGxlZCA9IGNvbnRlbnRzU2l6ZS5oZWlnaHQoKSA+IHZpc2li
bGVTaXplLmhlaWdodCgpIHx8IGNvbnRlbnRzU2l6ZS53aWR0aCgpID4gdmlzaWJsZVNpemUud2lk
dGgoKTsKLQotICAgIC8vIExldHMgYWxzbyBjb25zaWRlciB0aGUgJ292ZXJmbG93LXt4LHl9IHBy
b3BlcnR5IHNldCBkaXJlY3RseSB0byB0aGUge2l9ZnJhbWUgdGFnLgotICAgIHJldHVybiBjYW5C
ZVNjcm9sbGVkICYmIChmcmFtZS0+b3duZXJFbGVtZW50KCktPnNjcm9sbGluZ01vZGUoKSAhPSBT
Y3JvbGxiYXJBbHdheXNPZmYpOwotfQotCi0vLyBUaGUgUmVuZGVyQm94OjpjYW5iZVNjcm9sbGVk
QW5kSGFzU2Nyb2xsYWJsZUFyZWEgbWV0aG9kIHJldHVybnMgdHJ1ZSBmb3IgdGhlCi0vLyBmb2xs
b3dpbmcgc2NlbmFyaW8sIGZvciBleGFtcGxlOgotLy8gKDEpIGEgZGl2IHRoYXQgaGFzIGEgdmVy
dGljYWwgb3ZlcmZsb3cgYnV0IG5vIGhvcml6b250YWwgb3ZlcmZsb3cKLS8vICAgICB3aXRoIG92
ZXJmbG93LXk6IGhpZGRlbiBhbmQgb3ZlcmZsb3cteDogYXV0byBzZXQuCi0vLyBUaGUgdmVyc2lv
biBiZWxvdyBmaXhlcyBpdC4KLS8vIEZJWE1FOiBGaXggUmVuZGVyQm94OjpjYW5CZVNjcm9sbGVk
QW5kSGFzU2Nyb2xsYWJsZUFyZWEgbWV0aG9kIGluc3RlYWQuCi1zdGF0aWMgYm9vbCBjYW5TY3Jv
bGxSZW5kZXJCb3goUmVuZGVyQm94KiBib3gpCi17Ci0gICAgaWYgKCFib3ggfHwgIWJveC0+aGFz
T3ZlcmZsb3dDbGlwKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChib3gtPnNj
cm9sbHNPdmVyZmxvd1goKSAmJiAoYm94LT5zY3JvbGxXaWR0aCgpICE9IGJveC0+Y2xpZW50V2lk
dGgoKSkKLSAgICAgICAgfHwgYm94LT5zY3JvbGxzT3ZlcmZsb3dZKCkgJiYgKGJveC0+c2Nyb2xs
SGVpZ2h0KCkgIT0gYm94LT5jbGllbnRIZWlnaHQoKSkpCi0gICAgICAgIHJldHVybiB0cnVlOwot
Ci0gICAgTm9kZSogbm9kZSA9IGJveC0+bm9kZSgpOwotICAgIHJldHVybiBub2RlICYmIChub2Rl
LT5yZW5kZXJlcklzRWRpdGFibGUoKSB8fCBub2RlLT5pc0RvY3VtZW50Tm9kZSgpKTsKLX0KLQot
c3RhdGljIFJlbmRlckxheWVyKiBwYXJlbnRMYXllcihSZW5kZXJMYXllciogbGF5ZXIpCi17Ci0g
ICAgQVNTRVJUKGxheWVyKTsKLSAgICBpZiAobGF5ZXItPnBhcmVudCgpKQotICAgICAgICByZXR1
cm4gbGF5ZXItPnBhcmVudCgpOwotCi0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGxheWVy
LT5yZW5kZXJlcigpOwotICAgIGlmIChyZW5kZXJlci0+ZG9jdW1lbnQoKSAmJiByZW5kZXJlci0+
ZG9jdW1lbnQoKS0+b3duZXJFbGVtZW50KCkgJiYgcmVuZGVyZXItPmRvY3VtZW50KCktPm93bmVy
RWxlbWVudCgpLT5yZW5kZXJlcigpKQotICAgICAgICByZXR1cm4gcmVuZGVyZXItPmRvY3VtZW50
KCktPm93bmVyRWxlbWVudCgpLT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpOwotCi0gICAg
cmV0dXJuIDA7Ci19Ci0KLS8vIEZJWE1FOiBNYWtlIFJlbmRlckxheWVyOjplbmNsb3NpbmdFbGVt
ZW50IHB1YmxpYyBzbyB0aGlzIG9uZSBjYW4gYmUgcmVtb3ZlZC4KLXN0YXRpYyBOb2RlKiBlbmNs
b3NpbmdMYXllck5vZGUoUmVuZGVyTGF5ZXIqIGxheWVyKQotewotICAgIGZvciAoUmVuZGVyT2Jq
ZWN0KiByID0gbGF5ZXItPnJlbmRlcmVyKCk7IHI7IHIgPSByLT5wYXJlbnQoKSkgewotICAgICAg
ICBpZiAoTm9kZSogZSA9IHItPm5vZGUoKSkKLSAgICAgICAgICAgIHJldHVybiBlOwotICAgIH0K
LSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGJv
b2wgaXNOb25SZW5kZXJWaWV3Rml4ZWRQb3NpdGlvbmVkQ29udGFpbmVyKFJlbmRlckxheWVyKiBs
YXllcikKLXsKLSAgICBSZW5kZXJPYmplY3QqIG8gPSBsYXllci0+cmVuZGVyZXIoKTsKLSAgICBp
ZiAoby0+aXNSZW5kZXJWaWV3KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVy
biBvLT5pc1Bvc2l0aW9uZWQoKSAmJiBvLT5zdHlsZSgpLT5wb3NpdGlvbigpID09IEZpeGVkUG9z
aXRpb247Ci19Ci0KLXN0YXRpYyB2b2lkIHB1c2hCYWNrSW5SZWdpb25TY3JvbGxhYmxlKHN0ZDo6
dmVjdG9yPFBsYXRmb3JtOjpTY3JvbGxWaWV3QmFzZSo+JiB2ZWN0b3IsIEluUmVnaW9uU2Nyb2xs
YWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhLCBJblJlZ2lvblNjcm9sbGVyKiBzY3JvbGxlcikKLXsK
LSAgICBBU1NFUlQoc2Nyb2xsZXIpOwotICAgIEFTU0VSVCghc2Nyb2xsYWJsZUFyZWEtPmlzTnVs
bCgpKTsKLQotICAgIHNjcm9sbGFibGVBcmVhLT5zZXRDYW5Qcm9wYWdhdGVTY3JvbGxpbmdUb0Vu
Y2xvc2luZ1Njcm9sbGFibGUoIWlzTm9uUmVuZGVyVmlld0ZpeGVkUG9zaXRpb25lZENvbnRhaW5l
cihzY3JvbGxhYmxlQXJlYS0+bGF5ZXIoKSkpOwotICAgIHZlY3Rvci5wdXNoX2JhY2soc2Nyb2xs
YWJsZUFyZWEpOwotICAgIGlmICh2ZWN0b3Iuc2l6ZSgpID09IDEpIHsKLSAgICAgICAgLy8gRklY
TUU6IFVzZSBSZW5kZXJMYXllcjo6cmVuZGVyQm94KCktPm5vZGUoKSBpbnN0ZWFkPwotICAgICAg
ICBzY3JvbGxlci0+c2V0Tm9kZShlbmNsb3NpbmdMYXllck5vZGUoc2Nyb2xsYWJsZUFyZWEtPmxh
eWVyKCkpKTsKLSAgICB9Ci19Ci0KLUluUmVnaW9uU2Nyb2xsZXI6OkluUmVnaW9uU2Nyb2xsZXIo
V2ViUGFnZVByaXZhdGUqIHdlYlBhZ2VQcml2YXRlKQotICAgIDogbV93ZWJQYWdlKHdlYlBhZ2VQ
cml2YXRlKQotewotfQotCi12b2lkIEluUmVnaW9uU2Nyb2xsZXI6OnNldE5vZGUoV2ViQ29yZTo6
Tm9kZSogbm9kZSkKLXsKLSAgICBtX2luUmVnaW9uU2Nyb2xsU3RhcnRpbmdOb2RlID0gbm9kZTsK
LX0KLQotV2ViQ29yZTo6Tm9kZSogSW5SZWdpb25TY3JvbGxlcjo6bm9kZSgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1faW5SZWdpb25TY3JvbGxTdGFydGluZ05vZGUuZ2V0KCk7Ci19Ci0KLXZvaWQg
SW5SZWdpb25TY3JvbGxlcjo6cmVzZXQoKQotewotICAgIHNldE5vZGUoMCk7Ci19Ci0KLWJvb2wg
SW5SZWdpb25TY3JvbGxlcjo6aGFzTm9kZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICEhbV9pblJl
Z2lvblNjcm9sbFN0YXJ0aW5nTm9kZTsKLX0KLQotYm9vbCBJblJlZ2lvblNjcm9sbGVyOjpjYW5T
Y3JvbGwoKSBjb25zdAotewotICAgIHJldHVybiBoYXNOb2RlKCk7Ci19Ci0KLWJvb2wgSW5SZWdp
b25TY3JvbGxlcjo6c2Nyb2xsQnkoY29uc3QgUGxhdGZvcm06OkludFNpemUmIGRlbHRhKQotewot
ICAgIGlmICghY2FuU2Nyb2xsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVy
biBzY3JvbGxOb2RlUmVjdXJzaXZlbHkobm9kZSgpLCBkZWx0YSk7Ci19Ci0KLXN0ZDo6dmVjdG9y
PFBsYXRmb3JtOjpTY3JvbGxWaWV3QmFzZSo+IEluUmVnaW9uU2Nyb2xsZXI6OmluUmVnaW9uU2Ny
b2xsYWJsZUFyZWFzRm9yUG9pbnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvaW50KQotewot
ICAgIHN0ZDo6dmVjdG9yPFBsYXRmb3JtOjpTY3JvbGxWaWV3QmFzZSo+IHZhbGlkUmV0dXJuOwot
ICAgIHN0ZDo6dmVjdG9yPFBsYXRmb3JtOjpTY3JvbGxWaWV3QmFzZSo+IGVtcHR5UmV0dXJuOwot
Ci0gICAgSGl0VGVzdFJlc3VsdCByZXN1bHQgPSBtX3dlYlBhZ2UtPm1fbWFpbkZyYW1lLT5ldmVu
dEhhbmRsZXIoKS0+aGl0VGVzdFJlc3VsdEF0UG9pbnQobV93ZWJQYWdlLT5tYXBGcm9tVmlld3Bv
cnRUb0NvbnRlbnRzKHBvaW50KSwgZmFsc2UgLyphbGxvd1NoYWRvd0NvbnRlbnQqLyk7Ci0gICAg
Tm9kZSogbm9kZSA9IHJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKTsKLSAgICBpZiAoIW5vZGUg
fHwgIW5vZGUtPnJlbmRlcmVyKCkpCi0gICAgICAgIHJldHVybiBlbXB0eVJldHVybjsKLQotICAg
IFJlbmRlckxheWVyKiBsYXllciA9IG5vZGUtPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCk7
Ci0gICAgZG8gewotICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbGF5ZXItPnJlbmRl
cmVyKCk7Ci0KLSAgICAgICAgaWYgKHJlbmRlcmVyLT5pc1JlbmRlclZpZXcoKSkgewotICAgICAg
ICAgICAgaWYgKFJlbmRlclZpZXcqIHJlbmRlclZpZXcgPSB0b1JlbmRlclZpZXcocmVuZGVyZXIp
KSB7Ci0gICAgICAgICAgICAgICAgRnJhbWVWaWV3KiB2aWV3ID0gcmVuZGVyVmlldy0+ZnJhbWVW
aWV3KCk7Ci0gICAgICAgICAgICAgICAgaWYgKCF2aWV3KQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZW1wdHlSZXR1cm47Ci0KLSAgICAgICAgICAgICAgICBpZiAoY2FuU2Nyb2xsSW5uZXJG
cmFtZSh2aWV3LT5mcmFtZSgpKSkgewotICAgICAgICAgICAgICAgICAgICBwdXNoQmFja0luUmVn
aW9uU2Nyb2xsYWJsZSh2YWxpZFJldHVybiwgbmV3IEluUmVnaW9uU2Nyb2xsYWJsZUFyZWEobV93
ZWJQYWdlLCBsYXllciksIHRoaXMpOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoY2FuU2Ny
b2xsUmVuZGVyQm94KGxheWVyLT5yZW5kZXJCb3goKSkpIHsKLSAgICAgICAgICAgIHB1c2hCYWNr
SW5SZWdpb25TY3JvbGxhYmxlKHZhbGlkUmV0dXJuLCBuZXcgSW5SZWdpb25TY3JvbGxhYmxlQXJl
YShtX3dlYlBhZ2UsIGxheWVyKSwgdGhpcyk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgfQotCi0gICAgICAgIC8vIElmIHdlIHJ1biBpbnRvIGEgZml4IHBvc2l0aW9uZWQgbGF5ZXIs
IHNldCB0aGUgbGFzdCBzY3JvbGxhYmxlIGluLXJlZ2lvbiBvYmplY3QKLSAgICAgICAgLy8gYXMg
bm90IGFibGUgdG8gcHJvcGFnYXRlIHNjcm9sbCB0byBpdHMgcGFyZW50IHNjcm9sbGFibGUuCi0g
ICAgICAgIGlmIChpc05vblJlbmRlclZpZXdGaXhlZFBvc2l0aW9uZWRDb250YWluZXIobGF5ZXIp
ICYmIHZhbGlkUmV0dXJuLnNpemUoKSkgewotICAgICAgICAgICAgUGxhdGZvcm06OlNjcm9sbFZp
ZXdCYXNlKiBlbmQgPSB2YWxpZFJldHVybi5iYWNrKCk7Ci0gICAgICAgICAgICBlbmQtPnNldENh
blByb3BhZ2F0ZVNjcm9sbGluZ1RvRW5jbG9zaW5nU2Nyb2xsYWJsZShmYWxzZSk7Ci0gICAgICAg
IH0KLQotICAgIH0gd2hpbGUgKGxheWVyID0gcGFyZW50TGF5ZXIobGF5ZXIpKTsKLQotICAgIGlm
ICh2YWxpZFJldHVybi5lbXB0eSgpKQotICAgICAgICByZXR1cm4gZW1wdHlSZXR1cm47Ci0KLSAg
ICAvLyBQb3N0LWNhbGN1bGF0ZSB0aGUgdmlzaWJsZSB3aW5kb3cgcmVjdHMgaW4gcmV2ZXJzZSBo
aXQgdGVzdCBvcmRlciBzbwotICAgIC8vIHdlIGFjY291bnQgZm9yIGFsbCBhbmQgYW55IGNsaXBw
aW5nIHJlY3RzLgotICAgIFdlYkNvcmU6OkludFJlY3QgcmVjdXJzaXZlQ2xpcHBpbmdSZWN0KFdl
YkNvcmU6OkludFBvaW50Ojp6ZXJvKCksIG1fd2ViUGFnZS0+dHJhbnNmb3JtZWRWaWV3cG9ydFNp
emUoKSk7Ci0KLSAgICBzdGQ6OnZlY3RvcjxQbGF0Zm9ybTo6U2Nyb2xsVmlld0Jhc2UqPjo6cmV2
ZXJzZV9pdGVyYXRvciByZW5kID0gdmFsaWRSZXR1cm4ucmVuZCgpOwotICAgIGZvciAoc3RkOjp2
ZWN0b3I8UGxhdGZvcm06OlNjcm9sbFZpZXdCYXNlKj46OnJldmVyc2VfaXRlcmF0b3Igcml0ID0g
dmFsaWRSZXR1cm4ucmJlZ2luKCk7IHJpdCAhPSByZW5kOyArK3JpdCkgewotCi0gICAgICAgIElu
UmVnaW9uU2Nyb2xsYWJsZUFyZWEqIGN1cnIgPSBzdGF0aWNfY2FzdDxJblJlZ2lvblNjcm9sbGFi
bGVBcmVhKj4oKnJpdCk7Ci0gICAgICAgIFJlbmRlckxheWVyKiBsYXllciA9IGN1cnItPmxheWVy
KCk7Ci0KLSAgICAgICAgaWYgKGxheWVyICYmIGxheWVyLT5yZW5kZXJlcigpLT5pc1JlbmRlclZp
ZXcoKSkgeyAvLyAjZG9jdW1lbnQgY2FzZQotICAgICAgICAgICAgRnJhbWVWaWV3KiB2aWV3ID0g
dG9SZW5kZXJWaWV3KGxheWVyLT5yZW5kZXJlcigpKS0+ZnJhbWVWaWV3KCk7Ci0gICAgICAgICAg
ICBBU1NFUlQodmlldyk7Ci0gICAgICAgICAgICBBU1NFUlQoY2FuU2Nyb2xsSW5uZXJGcmFtZSh2
aWV3LT5mcmFtZSgpKSk7Ci0KLSAgICAgICAgICAgIFdlYkNvcmU6OkludFJlY3QgZnJhbWVXaW5k
b3dSZWN0ID0gbV93ZWJQYWdlLT5tYXBUb1RyYW5zZm9ybWVkKG1fd2ViUGFnZS0+Z2V0UmVjdXJz
aXZlVmlzaWJsZVdpbmRvd1JlY3QodmlldykpOwotICAgICAgICAgICAgZnJhbWVXaW5kb3dSZWN0
LmludGVyc2VjdChyZWN1cnNpdmVDbGlwcGluZ1JlY3QpOwotICAgICAgICAgICAgY3Vyci0+c2V0
VmlzaWJsZVdpbmRvd1JlY3QoZnJhbWVXaW5kb3dSZWN0KTsKLSAgICAgICAgICAgIHJlY3Vyc2l2
ZUNsaXBwaW5nUmVjdCA9IGZyYW1lV2luZG93UmVjdDsKLQotICAgICAgICB9IGVsc2UgeyAvLyBS
ZW5kZXJCb3gtYmFzZWQgZWxlbWVudHMgY2FzZSAoc2Nyb2xsYWJsZSBib3hlcyAoZGl2J3MsIHAn
cywgdGV4dGFyZWEncywgZXRjKSkuCi0KLSAgICAgICAgICAgIFJlbmRlckJveCogYm94ID0gbGF5
ZXItPnJlbmRlckJveCgpOwotICAgICAgICAgICAgQVNTRVJUKGJveCk7Ci0gICAgICAgICAgICBB
U1NFUlQoY2FuU2Nyb2xsUmVuZGVyQm94KGJveCkpOwotCi0gICAgICAgICAgICBXZWJDb3JlOjpJ
bnRSZWN0IHZpc2libGVXaW5kb3dSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChib3gtPmFic29sdXRl
Q2xpcHBlZE92ZXJmbG93UmVjdCgpKTsKLSAgICAgICAgICAgIHZpc2libGVXaW5kb3dSZWN0ID0g
Ym94LT5mcmFtZSgpLT52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3codmlzaWJsZVdpbmRvd1JlY3Qp
OwotICAgICAgICAgICAgdmlzaWJsZVdpbmRvd1JlY3QgPSBtX3dlYlBhZ2UtPm1hcFRvVHJhbnNm
b3JtZWQodmlzaWJsZVdpbmRvd1JlY3QpOwotICAgICAgICAgICAgdmlzaWJsZVdpbmRvd1JlY3Qu
aW50ZXJzZWN0KHJlY3Vyc2l2ZUNsaXBwaW5nUmVjdCk7Ci0KLSAgICAgICAgICAgIGN1cnItPnNl
dFZpc2libGVXaW5kb3dSZWN0KHZpc2libGVXaW5kb3dSZWN0KTsKLSAgICAgICAgICAgIHJlY3Vy
c2l2ZUNsaXBwaW5nUmVjdCA9IHZpc2libGVXaW5kb3dSZWN0OwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgcmV0dXJuIHZhbGlkUmV0dXJuOwotfQotCi1ib29sIEluUmVnaW9uU2Nyb2xsZXI6OnNj
cm9sbE5vZGVSZWN1cnNpdmVseShXZWJDb3JlOjpOb2RlKiBub2RlLCBjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJiBkZWx0YSkKLXsKLSAgICBpZiAoZGVsdGEuaXNaZXJvKCkpCi0gICAgICAgIHJldHVy
biB0cnVlOwotCi0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKLSAgICBpZiAoIXJlbmRl
cmVyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBGcmFtZVZpZXcqIHZpZXcgPSByZW5k
ZXJlci0+dmlldygpLT5mcmFtZVZpZXcoKTsKLSAgICBpZiAoIXZpZXcpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIC8vIFRyeSBzY3JvbGxpbmcgdGhlIHJlbmRlcmVyLgotICAgIGlmIChz
Y3JvbGxSZW5kZXJlcihyZW5kZXJlciwgZGVsdGEpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQot
ICAgIC8vIFdlJ3ZlIGhpdCB0aGUgcGFnZSwgZG9uJ3Qgc2Nyb2xsIGl0IGFuZCByZXR1cm4gZmFs
c2UuCi0gICAgaWYgKHZpZXcgPT0gbV93ZWJQYWdlLT5tX21haW5GcmFtZS0+dmlldygpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBUcnkgc2Nyb2xsaW5nIHRoZSBGcmFtZVZpZXcu
Ci0gICAgaWYgKGNhblNjcm9sbElubmVyRnJhbWUodmlldy0+ZnJhbWUoKSkpIHsKLSAgICAgICAg
SW50U2l6ZSB2aWV3RGVsdGEgPSBkZWx0YTsKLSAgICAgICAgSW50UG9pbnQgbmV3Vmlld09mZnNl
dCA9IHZpZXctPnNjcm9sbFBvc2l0aW9uKCk7Ci0gICAgICAgIEludFBvaW50IG1heFZpZXdPZmZz
ZXQgPSB2aWV3LT5tYXhpbXVtU2Nyb2xsUG9zaXRpb24oKTsKLSAgICAgICAgYWRqdXN0U2Nyb2xs
RGVsdGEobWF4Vmlld09mZnNldCwgbmV3Vmlld09mZnNldCwgdmlld0RlbHRhKTsKLQotICAgICAg
ICBpZiAoIXZpZXdEZWx0YS5pc1plcm8oKSkgewotICAgICAgICAgICAgdmlldy0+c2V0Q2FuQmxp
dE9uU2Nyb2xsKGZhbHNlKTsKLQotICAgICAgICAgICAgQmFja2luZ1N0b3JlQ2xpZW50KiBiYWNr
aW5nU3RvcmVDbGllbnQgPSBtX3dlYlBhZ2UtPmJhY2tpbmdTdG9yZUNsaWVudEZvckZyYW1lKHZp
ZXctPmZyYW1lKCkpOwotICAgICAgICAgICAgaWYgKGJhY2tpbmdTdG9yZUNsaWVudCkgewotICAg
ICAgICAgICAgICAgIGJhY2tpbmdTdG9yZUNsaWVudC0+c2V0SXNDbGllbnRHZW5lcmF0ZWRTY3Jv
bGwodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgYmFja2luZ1N0b3JlQ2xpZW50LT5zZXRJc1Njcm9s
bE5vdGlmaWNhdGlvblN1cHByZXNzZWQodHJ1ZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIHNldE5vZGUodmlldy0+ZnJhbWUoKS0+ZG9jdW1lbnQoKSk7Ci0KLSAgICAgICAgICAgIHZp
ZXctPnNjcm9sbEJ5KHZpZXdEZWx0YSk7Ci0KLSAgICAgICAgICAgIGlmIChiYWNraW5nU3RvcmVD
bGllbnQpIHsKLSAgICAgICAgICAgICAgICBiYWNraW5nU3RvcmVDbGllbnQtPnNldElzQ2xpZW50
R2VuZXJhdGVkU2Nyb2xsKGZhbHNlKTsKLSAgICAgICAgICAgICAgICBiYWNraW5nU3RvcmVDbGll
bnQtPnNldElzU2Nyb2xsTm90aWZpY2F0aW9uU3VwcHJlc3NlZChmYWxzZSk7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
Ly8gVHJ5IHNjcm9sbGluZyB0aGUgbm9kZSBvZiB0aGUgZW5jbG9zaW5nIGZyYW1lLgotICAgIEZy
YW1lKiBmcmFtZSA9IG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCk7Ci0gICAgaWYgKGZyYW1lKSB7
Ci0gICAgICAgIE5vZGUqIG93bmVyTm9kZSA9IGZyYW1lLT5vd25lckVsZW1lbnQoKTsKLSAgICAg
ICAgaWYgKHNjcm9sbE5vZGVSZWN1cnNpdmVseShvd25lck5vZGUsIGRlbHRhKSkKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBJ
blJlZ2lvblNjcm9sbGVyOjpzY3JvbGxSZW5kZXJlcihXZWJDb3JlOjpSZW5kZXJPYmplY3QqIHJl
bmRlcmVyLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBkZWx0YSkKLXsKLSAgICBSZW5kZXJMYXll
ciogbGF5ZXIgPSByZW5kZXJlci0+ZW5jbG9zaW5nTGF5ZXIoKTsKLSAgICBpZiAoIWxheWVyKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBUcnkgdG8gc2Nyb2xsIGxheWVyLgotICAg
IGJvb2wgcmVzdHJpY3RlZEJ5TGluZUNsYW1wID0gZmFsc2U7Ci0gICAgaWYgKHJlbmRlcmVyLT5w
YXJlbnQoKSkKLSAgICAgICAgcmVzdHJpY3RlZEJ5TGluZUNsYW1wID0gIXJlbmRlcmVyLT5wYXJl
bnQoKS0+c3R5bGUoKS0+bGluZUNsYW1wKCkuaXNOb25lKCk7Ci0KLSAgICBpZiAocmVuZGVyZXIt
Pmhhc092ZXJmbG93Q2xpcCgpICYmICFyZXN0cmljdGVkQnlMaW5lQ2xhbXApIHsKLSAgICAgICAg
SW50U2l6ZSBsYXllckRlbHRhID0gZGVsdGE7Ci0gICAgICAgIEludFBvaW50IG1heE9mZnNldChs
YXllci0+c2Nyb2xsV2lkdGgoKSAtIGxheWVyLT5yZW5kZXJCb3goKS0+Y2xpZW50V2lkdGgoKSwg
bGF5ZXItPnNjcm9sbEhlaWdodCgpIC0gbGF5ZXItPnJlbmRlckJveCgpLT5jbGllbnRIZWlnaHQo
KSk7Ci0gICAgICAgIEludFBvaW50IGN1cnJlbnRPZmZzZXQobGF5ZXItPnNjcm9sbFhPZmZzZXQo
KSwgbGF5ZXItPnNjcm9sbFlPZmZzZXQoKSk7Ci0gICAgICAgIGFkanVzdFNjcm9sbERlbHRhKG1h
eE9mZnNldCwgY3VycmVudE9mZnNldCwgbGF5ZXJEZWx0YSk7Ci0gICAgICAgIGlmICghbGF5ZXJE
ZWx0YS5pc1plcm8oKSkgewotICAgICAgICAgICAgc2V0Tm9kZShlbmNsb3NpbmdMYXllck5vZGUo
bGF5ZXIpKTsKLSAgICAgICAgICAgIEludFBvaW50IG5ld09mZnNldCA9IGN1cnJlbnRPZmZzZXQg
KyBsYXllckRlbHRhOwotICAgICAgICAgICAgbGF5ZXItPnNjcm9sbFRvT2Zmc2V0KG5ld09mZnNl
dC54KCksIG5ld09mZnNldC55KCkpOwotICAgICAgICAgICAgcmVuZGVyZXItPnJlcGFpbnQodHJ1
ZSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHdo
aWxlIChsYXllciA9IGxheWVyLT5wYXJlbnQoKSkgewotICAgICAgICBpZiAoY2FuU2Nyb2xsUmVu
ZGVyQm94KGxheWVyLT5yZW5kZXJCb3goKSkpCi0gICAgICAgICAgICByZXR1cm4gc2Nyb2xsUmVu
ZGVyZXIobGF5ZXItPnJlbmRlckJveCgpLCBkZWx0YSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi12b2lkIEluUmVnaW9uU2Nyb2xsZXI6OmFkanVzdFNjcm9sbERlbHRhKGNvbnN0
IFdlYkNvcmU6OkludFBvaW50JiBtYXhPZmZzZXQsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBj
dXJyZW50T2Zmc2V0LCBXZWJDb3JlOjpJbnRTaXplJiBkZWx0YSkgY29uc3QKLXsKLSAgICBpZiAo
Y3VycmVudE9mZnNldC54KCkgKyBkZWx0YS53aWR0aCgpID4gbWF4T2Zmc2V0LngoKSkKLSAgICAg
ICAgZGVsdGEuc2V0V2lkdGgoc3RkOjptaW4obWF4T2Zmc2V0LngoKSAtIGN1cnJlbnRPZmZzZXQu
eCgpLCBkZWx0YS53aWR0aCgpKSk7Ci0KLSAgICBpZiAoY3VycmVudE9mZnNldC54KCkgKyBkZWx0
YS53aWR0aCgpIDwgMCkKLSAgICAgICAgZGVsdGEuc2V0V2lkdGgoc3RkOjptYXgoLWN1cnJlbnRP
ZmZzZXQueCgpLCBkZWx0YS53aWR0aCgpKSk7Ci0KLSAgICBpZiAoY3VycmVudE9mZnNldC55KCkg
KyBkZWx0YS5oZWlnaHQoKSA+IG1heE9mZnNldC55KCkpCi0gICAgICAgIGRlbHRhLnNldEhlaWdo
dChzdGQ6Om1pbihtYXhPZmZzZXQueSgpIC0gY3VycmVudE9mZnNldC55KCksIGRlbHRhLmhlaWdo
dCgpKSk7Ci0KLSAgICBpZiAoY3VycmVudE9mZnNldC55KCkgKyBkZWx0YS5oZWlnaHQoKSA8IDAp
Ci0gICAgICAgIGRlbHRhLnNldEhlaWdodChzdGQ6Om1heCgtY3VycmVudE9mZnNldC55KCksIGRl
bHRhLmhlaWdodCgpKSk7Ci19Ci0KLX0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9XZWJLaXRTdXBwb3J0L0luUmVnaW9uU2Nyb2xsZXIuaCBiL1NvdXJjZS9XZWJLaXQv
YmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0luUmVnaW9uU2Nyb2xsZXIuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggZTliMTkxMi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Js
YWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JblJlZ2lvblNjcm9sbGVyLmgKKysrIC9kZXYvbnVsbApA
QCAtMSw2NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIFJlc2VhcmNo
IEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
ICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5v
dCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQot
ICovCi0KLSNpZm5kZWYgSW5SZWdpb25TY3JvbGxlcl9oCi0jZGVmaW5lIEluUmVnaW9uU2Nyb2xs
ZXJfaAotCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotCi0jaW5jbHVkZSA8aW50ZXJhY3Rpb24vU2Ny
b2xsVmlld0Jhc2UuaD4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LWNsYXNzIEZyYW1lOwotY2xhc3MgTm9kZTsKLWNsYXNzIFJlbmRlck9iamVjdDsKLX0KLQotbmFt
ZXNwYWNlIEJsYWNrQmVycnkgewotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYlBhZ2VQ
cml2YXRlOwotCi1jbGFzcyBJblJlZ2lvblNjcm9sbGVyIHsKLQotcHVibGljOgotICAgIEluUmVn
aW9uU2Nyb2xsZXIoV2ViUGFnZVByaXZhdGUqKTsKLQotICAgIHZvaWQgc2V0Tm9kZShXZWJDb3Jl
OjpOb2RlKik7Ci0gICAgV2ViQ29yZTo6Tm9kZSogbm9kZSgpIGNvbnN0OwotICAgIHZvaWQgcmVz
ZXQoKTsKLQotICAgIGJvb2wgY2FuU2Nyb2xsKCkgY29uc3Q7Ci0gICAgYm9vbCBoYXNOb2RlKCkg
Y29uc3Q7Ci0KLSAgICBib29sIHNjcm9sbEJ5KGNvbnN0IFBsYXRmb3JtOjpJbnRTaXplJiBkZWx0
YSk7Ci0KLSAgICBzdGQ6OnZlY3RvcjxQbGF0Zm9ybTo6U2Nyb2xsVmlld0Jhc2UqPiBpblJlZ2lv
blNjcm9sbGFibGVBcmVhc0ZvclBvaW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7Ci1wcml2
YXRlOgotCi0gICAgYm9vbCBzY3JvbGxOb2RlUmVjdXJzaXZlbHkoV2ViQ29yZTo6Tm9kZSosIGNv
bnN0IFdlYkNvcmU6OkludFNpemUmIGRlbHRhKTsKLSAgICBib29sIHNjcm9sbFJlbmRlcmVyKFdl
YkNvcmU6OlJlbmRlck9iamVjdCosIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGRlbHRhKTsKLQot
ICAgIHZvaWQgYWRqdXN0U2Nyb2xsRGVsdGEoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIG1heE9m
ZnNldCwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGN1cnJlbnRPZmZzZXQsIFdlYkNvcmU6Oklu
dFNpemUmIGRlbHRhKSBjb25zdDsKLQotICAgIFJlZlB0cjxXZWJDb3JlOjpOb2RlPiBtX2luUmVn
aW9uU2Nyb2xsU3RhcnRpbmdOb2RlOwotICAgIFdlYlBhZ2VQcml2YXRlKiBtX3dlYlBhZ2U7Ci19
OwotCi19Ci19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5
L1dlYktpdFN1cHBvcnQvVG91Y2hFdmVudEhhbmRsZXIuY3BwIGIvU291cmNlL1dlYktpdC9ibGFj
a2JlcnJ5L1dlYktpdFN1cHBvcnQvVG91Y2hFdmVudEhhbmRsZXIuY3BwCmluZGV4IGM0Yzg0Nzgu
LmMyZTMwMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBw
b3J0L1RvdWNoRXZlbnRIYW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkv
V2ViS2l0U3VwcG9ydC9Ub3VjaEV2ZW50SGFuZGxlci5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNp
bmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5j
bHVkZSAiSFRNTFBsdWdJbkVsZW1lbnQuaCIKKyNpbmNsdWRlICJJblJlZ2lvblNjcm9sbGVyX3Au
aCIKICNpbmNsdWRlICJJbnB1dEhhbmRsZXIuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5j
bHVkZSAiSW50U2l6ZS5oIgpAQCAtMzM5LDcgKzM0MCw3IEBAIHZvaWQgVG91Y2hFdmVudEhhbmRs
ZXI6OmRyYXdUYXBIaWdobGlnaHQoKQogICAgIC8vIE9uIHRoZSBjbGllbnQgc2lkZSwgdGhpcyBp
bmZvIGlzIGJlaW5nIHVzZWQgdG8gaGlkZSB0aGUgdGFwIGhpZ2hsaWdodCB3aW5kb3cgb24gc2Ny
b2xsLgogICAgIFJlbmRlckxheWVyKiBsYXllciA9IG1fd2ViUGFnZS0+ZW5jbG9zaW5nRml4ZWRQ
b3NpdGlvbmVkQW5jZXN0b3JPclNlbGZJZkZpeGVkUG9zaXRpb25lZChyZW5kZXJlci0+ZW5jbG9z
aW5nTGF5ZXIoKSk7CiAgICAgYm9vbCBzaG91bGRIaWRlVGFwSGlnaGxpZ2h0UmlnaHRBZnRlclNj
cm9sbGluZyA9ICFsYXllci0+cmVuZGVyZXIoKS0+aXNSZW5kZXJWaWV3KCk7Ci0gICAgc2hvdWxk
SGlkZVRhcEhpZ2hsaWdodFJpZ2h0QWZ0ZXJTY3JvbGxpbmcgfD0gISFtX3dlYlBhZ2UtPm1faW5S
ZWdpb25TY3JvbGxlci0+bm9kZSgpOworICAgIHNob3VsZEhpZGVUYXBIaWdobGlnaHRSaWdodEFm
dGVyU2Nyb2xsaW5nIHw9ICEhbV93ZWJQYWdlLT5tX2luUmVnaW9uU2Nyb2xsZXItPmQtPm5vZGUo
KTsKIAogICAgIEludFBvaW50IGZyYW1lUG9zKG1fd2ViUGFnZS0+ZnJhbWVPZmZzZXQoZWxlbWVu
dEZyYW1lKSk7CiAKLS0gCjEuNy41LjQKCg==
</data>
<flag name="review"
          id="167133"
          type_id="1"
          status="+"
          setter="rwlbuis"
    />
          </attachment>
      

    </bug>

</bugzilla>