<?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>92889</bug_id>
          
          <creation_ts>2012-08-01 11:00:06 -0700</creation_ts>
          <short_desc>[BlackBerry] Implement InRegionScroller class as a in-region scroll controller</short_desc>
          <delta_ts>2012-08-02 13:23:37 -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>
          
          
          <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>mifenton</cc>
    
    <cc>rakuco</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>684323</commentid>
    <comment_count>0</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-08-01 11:00:06 -0700</bug_when>
    <thetext>From PR 186587:

Class will:
1) Centralize all in-region scrolling logic, cleaning up WebPage{Private}
2) Be the base to scroll in-region content from UI/Compositing thread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684623</commentid>
    <comment_count>1</comment_count>
      <attachid>155895</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-08-01 15:05:39 -0700</bug_when>
    <thetext>Created attachment 155895
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684626</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-01 15:08:59 -0700</bug_when>
    <thetext>Attachment 155895 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/WebKitSupport/InRegionScroller.cpp:24:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/blackberry/Api/WebPage.cpp:2638:  More than one command on the same line  [whitespace/newline] [4]
Source/WebKit/blackberry/Api/WebPage_p.h:25:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 3 in 9 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>684958</commentid>
    <comment_count>3</comment_count>
      <attachid>155895</attachid>
    <who name="Arvid Nilsson">anilsson</who>
    <bug_when>2012-08-01 21:45:31 -0700</bug_when>
    <thetext>Comment on attachment 155895
patch

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

Cool!

&gt; Source/WebKit/blackberry/WebKitSupport/InRegionScroller.cpp:145
&gt; +    return !m_inRegionScrollStartingNode;

Looking at the implementation and usage, would it make sense to rename this &quot;canScroll()&quot; and change if (!scroller-&gt;isNull()) to if (scroller-&gt;canScroll()) ?

I am thinking the scroller itself is never null, it lives as long as the web page, so name a bit misleading.

&gt; Source/WebKit/blackberry/WebKitSupport/InRegionScroller.h:46
&gt; +    bool isNull() const;

Would it make sense to rename this, maybe hasNode() or</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>685414</commentid>
    <comment_count>4</comment_count>
      <attachid>156091</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-08-02 08:19:59 -0700</bug_when>
    <thetext>Created attachment 156091
patch v2

Fixed style issues and Arvid&apos;s API suggestions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>685418</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-02 08:24:36 -0700</bug_when>
    <thetext>Attachment 156091 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/WebPage.cpp:2638:  More than one command on the same line  [whitespace/newline] [4]
Source/WebKit/blackberry/Api/WebPage_p.h:25:  &quot;InspectorOverlay.h&quot; already included at Source/WebKit/blackberry/Api/WebPage_p.h:24  [build/include] [4]
Source/WebKit/blackberry/Api/WebPage_p.h:25:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 3 in 9 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>685426</commentid>
    <comment_count>6</comment_count>
      <attachid>156094</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-08-02 08:31:21 -0700</bug_when>
    <thetext>Created attachment 156094
patch v3

One more style issue fixed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>685428</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-02 08:33:55 -0700</bug_when>
    <thetext>Attachment 156094 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/WebPage_p.h:25:  &quot;InspectorOverlay.h&quot; already included at Source/WebKit/blackberry/Api/WebPage_p.h:24  [build/include] [4]
Source/WebKit/blackberry/Api/WebPage_p.h:25:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 2 in 9 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>685435</commentid>
    <comment_count>8</comment_count>
      <attachid>156098</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-08-02 08:39:21 -0700</bug_when>
    <thetext>Created attachment 156098
(committed r124470, r=yoli) patch v4

Another style issue fixed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>685436</commentid>
    <comment_count>9</comment_count>
      <attachid>156091</attachid>
    <who name="Arvid Nilsson">anilsson</who>
    <bug_when>2012-08-02 08:39:22 -0700</bug_when>
    <thetext>Comment on attachment 156091
patch v2

Looks good to me :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>685444</commentid>
    <comment_count>10</comment_count>
      <attachid>156098</attachid>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2012-08-02 08:50:21 -0700</bug_when>
    <thetext>Comment on attachment 156098
(committed r124470, r=yoli) patch v4

r+</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>685495</commentid>
    <comment_count>11</comment_count>
      <attachid>156098</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-08-02 09:43:33 -0700</bug_when>
    <thetext>Comment on attachment 156098
(committed r124470, r=yoli) patch v4

&lt;http://trac.webkit.org/changeset/124470&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>685673</commentid>
    <comment_count>12</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-08-02 12:30:00 -0700</bug_when>
    <thetext>.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>685675</commentid>
    <comment_count>13</comment_count>
      <attachid>156140</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-08-02 12:30:32 -0700</bug_when>
    <thetext>Created attachment 156140
debug build fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>685726</commentid>
    <comment_count>14</comment_count>
      <attachid>156140</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-02 13:23:32 -0700</bug_when>
    <thetext>Comment on attachment 156140
debug build fix

Clearing flags on attachment: 156140

Committed r124488: &lt;http://trac.webkit.org/changeset/124488&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>685727</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-02 13:23:37 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155895</attachid>
            <date>2012-08-01 15:05:39 -0700</date>
            <delta_ts>2012-08-02 08:19:59 -0700</delta_ts>
            <desc>patch</desc>
            <filename>0001-BlackBerry-Implement-InRegionScroller-class-as-a-in-.patch</filename>
            <type>text/plain</type>
            <size>41731</size>
            <attacher name="Antonio Gomes">tonikitoo</attacher>
            
              <data encoding="base64">RnJvbSA5YmI3Zjg0N2U0Y2Y2NzhjMzUyZmJmNGEyMmFhNTVjYmM0N2QzNWZhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbnRvbmlvIEdvbWVzIDxhZ29tZXNAcmltLmNvbT4KRGF0ZTog
V2VkLCAxIEF1ZyAyMDEyIDE4OjA0OjI0IC0wNDAwClN1YmplY3Q6IFtQQVRDSF0gW0JsYWNrQmVy
cnldIEltcGxlbWVudCBJblJlZ2lvblNjcm9sbGVyIGNsYXNzIGFzIGEgaW4tcmVnaW9uCiBzY3Jv
bGwgY29udHJvbGxlcgogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTky
ODg5IFBSICMxODY1ODcKClJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgpQYXRjaCBieSBBbnRv
bmlvIEdvbWVzIDxhZ29tZXNAcmltLmNvbT4KClNvdXJjZS9XZWJLaXQ6CgoqIFBsYXRmb3JtQmxh
Y2tCZXJyeS5jbWFrZTogQWRkZWQgSW5SZWdpb25TY3JvbGxlci5jcHB8aCB0byB0aGUgYnVpbGQg
c3lzdGVtLgoKU291cmNlL1dlYktpdC9ibGFja2JlcnJ5OgoKTW92ZWQgYWxsIGluLXJlZ2lvbiBz
Y3JvbGxpbmcgY29kZSBvdXQgb2YgV2ViUGFnZVByaXZhdGUgdG8gdGhlIGp1c3QKY3JlYXRlZCBJ
blJlZ2lvblNjcm9sbGVyIGNsYXNzLiBUaGlzIGNsYXNzIGFpbXMgdG86CgoxKSBDZW50cmFsaXpl
IGFsbCBpbi1yZWdpb24gc2Nyb2xsIGNvZGUgYW5kIGNsZWFuIHVwIFdlYlBhZ2VQcml2YXRlIGFz
IGEgY29uc2VxdWVuY2UuCjIpIEJlIHRoZSBiYXNlcyB0byBhZGQgVUkvQ29tcG9zaXRpbmcgdGhy
ZWFkIGRyaXZlbiBzY3JvbGxzIHRvIGluLXJlZ2lvbi4KClRoZSBwYXRjaCBkb2VzIG5vdCBjaGFu
Z2UgYW55IGZ1bmN0aW9uYWxsaXR5IGNoYW5nZS4KCiogQXBpL1dlYlBhZ2UuY3BwOgooQmxhY2tC
ZXJyeTo6V2ViS2l0OjpXZWJQYWdlUHJpdmF0ZTo6V2ViUGFnZVByaXZhdGUpOgooQmxhY2tCZXJy
eTo6V2ViS2l0OjpXZWJQYWdlUHJpdmF0ZTo6aW5pdCk6CihCbGFja0JlcnJ5OjpXZWJLaXQ6Oldl
YlBhZ2VQcml2YXRlOjpzY3JvbGxCeSk6CihCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2VQcml2
YXRlOjpub3RpZnlJblJlZ2lvblNjcm9sbFN0YXR1c0NoYW5nZWQpOgooQmxhY2tCZXJyeTo6V2Vi
S2l0OjpXZWJQYWdlUHJpdmF0ZTo6Y2xlYXJEb2N1bWVudERhdGEpOgooQmxhY2tCZXJyeTo6V2Vi
S2l0OjpXZWJQYWdlUHJpdmF0ZTo6c2V0U2Nyb2xsT3JpZ2luUG9pbnQpOgoqIEFwaS9XZWJQYWdl
X3AuaDoKKFdlYlBhZ2VQcml2YXRlKToKKiBXZWJLaXRTdXBwb3J0L0luUmVnaW9uU2Nyb2xsYWJs
ZUFyZWEuY3BwOgooQmxhY2tCZXJyeTo6V2ViS2l0OjpJblJlZ2lvblNjcm9sbGFibGVBcmVhOjps
YXllcik6CiogV2ViS2l0U3VwcG9ydC9JblJlZ2lvblNjcm9sbGVyLmNwcDogQWRkZWQuCihXZWJL
aXQpOgooQmxhY2tCZXJyeTo6V2ViS2l0OjpjYW5TY3JvbGxJbm5lckZyYW1lKToKKEJsYWNrQmVy
cnk6OldlYktpdDo6Y2FuU2Nyb2xsUmVuZGVyQm94KToKKEJsYWNrQmVycnk6OldlYktpdDo6cGFy
ZW50TGF5ZXIpOgooQmxhY2tCZXJyeTo6V2ViS2l0OjplbmNsb3NpbmdMYXllck5vZGUpOgooQmxh
Y2tCZXJyeTo6V2ViS2l0Ojppc05vblJlbmRlclZpZXdGaXhlZFBvc2l0aW9uZWRDb250YWluZXIp
OgooQmxhY2tCZXJyeTo6V2ViS2l0OjpwdXNoQmFja0luUmVnaW9uU2Nyb2xsYWJsZSk6CihCbGFj
a0JlcnJ5OjpXZWJLaXQ6OkluUmVnaW9uU2Nyb2xsZXI6OkluUmVnaW9uU2Nyb2xsZXIpOgooQmxh
Y2tCZXJyeTo6V2ViS2l0OjpJblJlZ2lvblNjcm9sbGVyOjpzZXROb2RlKToKKEJsYWNrQmVycnk6
OldlYktpdDo6SW5SZWdpb25TY3JvbGxlcjo6bm9kZSk6CihCbGFja0JlcnJ5OjpXZWJLaXQ6Oklu
UmVnaW9uU2Nyb2xsZXI6OnJlc2V0KToKKEJsYWNrQmVycnk6OldlYktpdDo6SW5SZWdpb25TY3Jv
bGxlcjo6aXNOdWxsKToKKEJsYWNrQmVycnk6OldlYktpdDo6SW5SZWdpb25TY3JvbGxlcjo6c2Ny
b2xsQnkpOgooQmxhY2tCZXJyeTo6V2ViS2l0OjpJblJlZ2lvblNjcm9sbGVyOjppblJlZ2lvblNj
cm9sbGFibGVBcmVhc0ZvclBvaW50KToKKEJsYWNrQmVycnk6OldlYktpdDo6SW5SZWdpb25TY3Jv
bGxlcjo6c2Nyb2xsTm9kZVJlY3Vyc2l2ZWx5KToKKEJsYWNrQmVycnk6OldlYktpdDo6SW5SZWdp
b25TY3JvbGxlcjo6c2Nyb2xsUmVuZGVyZXIpOgooQmxhY2tCZXJyeTo6V2ViS2l0OjpJblJlZ2lv
blNjcm9sbGVyOjphZGp1c3RTY3JvbGxEZWx0YSk6CiogV2ViS2l0U3VwcG9ydC9JblJlZ2lvblNj
cm9sbGVyLmg6IEFkZGVkLgooV2ViQ29yZSk6CihXZWJLaXQpOgooSW5SZWdpb25TY3JvbGxlcik6
CiogV2ViS2l0U3VwcG9ydC9Ub3VjaEV2ZW50SGFuZGxlci5jcHA6CihCbGFja0JlcnJ5OjpXZWJL
aXQ6OlRvdWNoRXZlbnRIYW5kbGVyOjpkcmF3VGFwSGlnaGxpZ2h0KToKLS0tCiBTb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTAgKwogU291cmNl
L1dlYktpdC9QbGF0Zm9ybUJsYWNrQmVycnkuY21ha2UgICAgICAgICAgICAgfCAgICAyICsKIFNv
dXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFnZS5jcHAgICAgICAgICAgIHwgIDMxOSAr
LS0tLS0tLS0tLS0tLS0tLS0KIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFnZV9w
LmggICAgICAgICAgIHwgICAxMSArLQogU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5nZUxv
ZyAgICAgICAgICAgICAgICAgfCAgIDUyICsrKwogLi4uL1dlYktpdFN1cHBvcnQvSW5SZWdpb25T
Y3JvbGxhYmxlQXJlYS5jcHAgICAgICAgfCAgICAzICstCiAuLi4vYmxhY2tiZXJyeS9XZWJLaXRT
dXBwb3J0L0luUmVnaW9uU2Nyb2xsZXIuY3BwICB8ICAzNTAgKysrKysrKysrKysrKysrKysrKysK
IC4uLi9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5SZWdpb25TY3JvbGxlci5oICAgIHwgICA2
NSArKysrCiAuLi4vYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L1RvdWNoRXZlbnRIYW5kbGVyLmNw
cCB8ICAgIDIgKy0KIDkgZmlsZXMgY2hhbmdlZCwgNDk5IGluc2VydGlvbnMoKyksIDMxNSBkZWxl
dGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2Vi
S2l0U3VwcG9ydC9JblJlZ2lvblNjcm9sbGVyLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJj
ZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0luUmVnaW9uU2Nyb2xsZXIuaAoKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKaW5kZXggMTk5OTRkMS4uYWNiMTEwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAx
Mi0wOC0wMSAgQW50b25pbyBHb21lcyAgPGFnb21lc0ByaW0uY29tPgorCisgICAgICAgIFtCbGFj
a0JlcnJ5XSBJbXBsZW1lbnQgSW5SZWdpb25TY3JvbGxlciBjbGFzcyBhcyBhIGluLXJlZ2lvbiBz
Y3JvbGwgY29udHJvbGxlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9OTI4ODkKKyAgICAgICAgUFIgIzE4NjU4NworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtlOiBB
ZGRlZCBJblJlZ2lvblNjcm9sbGVyLmNwcHxoIHRvIHRoZSBidWlsZCBzeXN0ZW0uCisKIDIwMTIt
MDctMzAgIFNpbW9uIEhhdXNtYW5uICA8c2ltb24uaGF1c21hbm5Abm9raWEuY29tPgogCiAgICAg
ICAgIFVucmV2aWV3ZWQgUXQvTWFjIGJ1aWxkIGZpeDogVXNlIGxpYldlYktpdFN5c3RlbUludGVy
ZmFjZU1vdW50YWluTGlvbi5hCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtQmxh
Y2tCZXJyeS5jbWFrZSBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtlCmlu
ZGV4IDA1YWFlZDguLjhkYWJjODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1C
bGFja0JlcnJ5LmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1CbGFja0JlcnJ5LmNt
YWtlCkBAIC0xMDAsNiArMTAwLDggQEAgTElTVChBUFBFTkQgV2ViS2l0X1NPVVJDRVMKICAgICBi
bGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvRnJhbWVMYXllcnMuY3BwCiAgICAgYmxhY2tiZXJyeS9X
ZWJLaXRTdXBwb3J0L0luUGFnZVNlYXJjaE1hbmFnZXIuY3BwCiAgICAgYmxhY2tiZXJyeS9XZWJL
aXRTdXBwb3J0L0lucHV0SGFuZGxlci5jcHAKKyAgICBibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQv
SW5SZWdpb25TY3JvbGxhYmxlQXJlYS5jcHAKKyAgICBibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQv
SW5SZWdpb25TY3JvbGxlci5jcHAKICAgICBibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvUmVuZGVy
UXVldWUuY3BwCiAgICAgYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L1NlbGVjdGlvbkhhbmRsZXIu
Y3BwCiAgICAgYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L1NlbGVjdGlvbk92ZXJsYXkuY3BwCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2UuY3BwIGIvU291
cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJQYWdlLmNwcAppbmRleCA0ZTBhZjEyLi44NjVh
ZmYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFnZS5jcHAKQEAgLTM5Myw3
ICszOTMsNiBAQCBXZWJQYWdlUHJpdmF0ZTo6V2ViUGFnZVByaXZhdGUoV2ViUGFnZSogd2ViUGFn
ZSwgV2ViUGFnZUNsaWVudCogY2xpZW50LCBjb25zdCBJbgogICAgICwgbV9sYXN0VXNlckV2ZW50
VGltZXN0YW1wKDAuMCkKICAgICAsIG1fcGx1Z2luTW91c2VCdXR0b25QcmVzc2VkKGZhbHNlKQog
ICAgICwgbV9wbHVnaW5NYXlPcGVuTmV3VGFiKGZhbHNlKQotICAgICwgbV9pblJlZ2lvblNjcm9s
bFN0YXJ0aW5nTm9kZSgwKQogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICAs
IG1fcm9vdExheWVyQ29tbWl0VGltZXIoYWRvcHRQdHIobmV3IFRpbWVyPFdlYlBhZ2VQcml2YXRl
Pih0aGlzLCAmV2ViUGFnZVByaXZhdGU6OnJvb3RMYXllckNvbW1pdFRpbWVyRmlyZWQpKSkKICAg
ICAsIG1fbmVlZHNPbmVTaG90RHJhd2luZ1N5bmNocm9uaXphdGlvbihmYWxzZSkKQEAgLTU1OCw2
ICs1NTcsOCBAQCB2b2lkIFdlYlBhZ2VQcml2YXRlOjppbml0KGNvbnN0IFdlYlN0cmluZyYgcGFn
ZUdyb3VwTmFtZSkKICAgICBmcmFtZUxvYWRlckNsaWVudC0+c2V0RnJhbWUobV9tYWluRnJhbWUs
IHRoaXMpOwogICAgIG1fbWFpbkZyYW1lLT5pbml0KCk7CiAKKyAgICBtX2luUmVnaW9uU2Nyb2xs
ZXIgPSBhZG9wdFB0cihuZXcgSW5SZWdpb25TY3JvbGxlcih0aGlzKSk7CisKICNpZiBFTkFCTEUo
V0VCR0wpCiAgICAgUGxhdGZvcm06OlNldHRpbmdzKiBzZXR0aW5ncyA9IFBsYXRmb3JtOjpTZXR0
aW5nczo6aW5zdGFuY2UoKTsKICAgICBtX3BhZ2UtPnNldHRpbmdzKCktPnNldFdlYkdMRW5hYmxl
ZChzZXR0aW5ncyAmJiBzZXR0aW5ncy0+aXNXZWJHTFN1cHBvcnRlZCgpKTsKQEAgLTE1MjIsMTUg
KzE1MjMsMTMgQEAgYm9vbCBXZWJQYWdlUHJpdmF0ZTo6c2Nyb2xsQnkoaW50IGRlbHRhWCwgaW50
IGRlbHRhWSwgYm9vbCBzY3JvbGxNYWluRnJhbWUpCiAgICAgICAgICAgICBkZWx0YS53aWR0aCgp
IDwgMCA/IC11bnRyYW5zZm9ybWVkQ29waWVkRGVsdGEud2lkdGgoKSA6IHVudHJhbnNmb3JtZWRD
b3BpZWREZWx0YS53aWR0aCgpLAogICAgICAgICAgICAgZGVsdGEuaGVpZ2h0KCkgPCAwID8gLXVu
dHJhbnNmb3JtZWRDb3BpZWREZWx0YS5oZWlnaHQoKTogdW50cmFuc2Zvcm1lZENvcGllZERlbHRh
LmhlaWdodCgpKTsKIAotICAgICAgICBpZiAobV9pblJlZ2lvblNjcm9sbFN0YXJ0aW5nTm9kZSkg
ewotICAgICAgICAgICAgaWYgKHNjcm9sbE5vZGVSZWN1cnNpdmVseShtX2luUmVnaW9uU2Nyb2xs
U3RhcnRpbmdOb2RlLmdldCgpLCBkZWx0YSkpIHsKLSAgICAgICAgICAgICAgICBtX3NlbGVjdGlv
bkhhbmRsZXItPnNlbGVjdGlvblBvc2l0aW9uQ2hhbmdlZCgpOwotICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBXZSBoYXZlIGNvZGUgaW4gcGxhY2UgdG8gaGFuZGxlIHNjcm9sbGluZyBhbmQgY2xp
cHBpbmcgdGFwIGhpZ2hsaWdodAotICAgICAgICAgICAgICAgIC8vIG9uIGluLXJlZ2lvbiBzY3Jv
bGxpbmcuIEFzIHNvb24gYXMgaXQgaXMgZmFzdCBlbm91Z2ggKGkuZS4gd2UgaGF2ZSBpdCBiYWNr
ZWQgYnkKLSAgICAgICAgICAgICAgICAvLyBhIGJhY2tpbmcgc3RvcmUpLCB3ZSBjYW4gcmVsaWFi
bHkgbWFrZSB1c2Ugb2YgaXQgaW4gdGhlIHJlYWwgd29ybGQuCi0gICAgICAgICAgICAgICAgLy8g
bV90b3VjaEV2ZW50SGFuZGxlci0+ZHJhd1RhcEhpZ2hsaWdodCgpOwotICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQorICAgICAgICBpZiAobV9pblJlZ2lvblNjcm9s
bGVyLT5zY3JvbGxCeShkZWx0YSkpIHsKKyAgICAgICAgICAgIG1fc2VsZWN0aW9uSGFuZGxlci0+
c2VsZWN0aW9uUG9zaXRpb25DaGFuZ2VkKCk7CisgICAgICAgICAgICAvLyBGSVhNRTogV2UgaGF2
ZSBjb2RlIGluIHBsYWNlIHRvIGhhbmRsZSBzY3JvbGxpbmcgYW5kIGNsaXBwaW5nIHRhcCBoaWdo
bGlnaHQKKyAgICAgICAgICAgIC8vIG9uIGluLXJlZ2lvbiBzY3JvbGxpbmcuIEFzIHNvb24gYXMg
aXQgaXMgZmFzdCBlbm91Z2ggKGkuZS4gd2UgaGF2ZSBpdCBiYWNrZWQgYnkKKyAgICAgICAgICAg
IC8vIGEgYmFja2luZyBzdG9yZSksIHdlIGNhbiByZWxpYWJseSBtYWtlIHVzZSBvZiBpdCBpbiB0
aGUgcmVhbCB3b3JsZC4KKyAgICAgICAgICAgIC8vIG1fdG91Y2hFdmVudEhhbmRsZXItPmRyYXdU
YXBIaWdobGlnaHQoKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTU1MCw5ICsxNTQ5LDkgQEAgYm9vbCBXZWJQYWdlOjpz
Y3JvbGxCeShjb25zdCBQbGF0Zm9ybTo6SW50U2l6ZSYgZGVsdGEsIGJvb2wgc2Nyb2xsTWFpbkZy
YW1lKQogCiB2b2lkIFdlYlBhZ2VQcml2YXRlOjpub3RpZnlJblJlZ2lvblNjcm9sbFN0YXR1c0No
YW5nZWQoYm9vbCBzdGF0dXMpCiB7Ci0gICAgaWYgKCFzdGF0dXMgJiYgbV9pblJlZ2lvblNjcm9s
bFN0YXJ0aW5nTm9kZSkgewotICAgICAgICBlbnF1ZXVlUmVuZGVyaW5nT2ZDbGlwcGVkQ29udGVu
dE9mU2Nyb2xsYWJsZU5vZGVBZnRlckluUmVnaW9uU2Nyb2xsaW5nKG1faW5SZWdpb25TY3JvbGxT
dGFydGluZ05vZGUuZ2V0KCkpOwotICAgICAgICBtX2luUmVnaW9uU2Nyb2xsU3RhcnRpbmdOb2Rl
ID0gMDsKKyAgICBpZiAoIXN0YXR1cyAmJiAhbV9pblJlZ2lvblNjcm9sbGVyLT5pc051bGwoKSkg
eworICAgICAgICBlbnF1ZXVlUmVuZGVyaW5nT2ZDbGlwcGVkQ29udGVudE9mU2Nyb2xsYWJsZU5v
ZGVBZnRlckluUmVnaW9uU2Nyb2xsaW5nKG1faW5SZWdpb25TY3JvbGxlci0+bm9kZSgpKTsKKyAg
ICAgICAgbV9pblJlZ2lvblNjcm9sbGVyLT5yZXNldCgpOwogICAgIH0KIH0KIApAQCAtMjYzNSw4
ICsyNjM0LDggQEAgdm9pZCBXZWJQYWdlUHJpdmF0ZTo6Y2xlYXJEb2N1bWVudERhdGEoY29uc3Qg
RG9jdW1lbnQqIGRvY3VtZW50R29pbmdBd2F5KQogICAgIGlmIChtX2N1cnJlbnRCbG9ja1pvb21B
ZGp1c3RlZE5vZGUgJiYgbV9jdXJyZW50QmxvY2tab29tQWRqdXN0ZWROb2RlLT5kb2N1bWVudCgp
ID09IGRvY3VtZW50R29pbmdBd2F5KQogICAgICAgICBtX2N1cnJlbnRCbG9ja1pvb21BZGp1c3Rl
ZE5vZGUgPSAwOwogCi0gICAgaWYgKG1faW5SZWdpb25TY3JvbGxTdGFydGluZ05vZGUgJiYgbV9p
blJlZ2lvblNjcm9sbFN0YXJ0aW5nTm9kZS0+ZG9jdW1lbnQoKSA9PSBkb2N1bWVudEdvaW5nQXdh
eSkKLSAgICAgICAgbV9pblJlZ2lvblNjcm9sbFN0YXJ0aW5nTm9kZSA9IDA7CisgICAgaWYgKCFt
X2luUmVnaW9uU2Nyb2xsZXItPmlzTnVsbCgpICYmIG1faW5SZWdpb25TY3JvbGxlci0+bm9kZSgp
LT5kb2N1bWVudCgpID09IGRvY3VtZW50R29pbmdBd2F5KQorICAgICAgICBtX2luUmVnaW9uU2Ny
b2xsZXItPnJlc2V0KCk7OwogCiAgICAgaWYgKGRvY3VtZW50R29pbmdBd2F5LT5mcmFtZSgpKQog
ICAgICAgICBtX2lucHV0SGFuZGxlci0+ZnJhbWVVbmxvYWRlZChkb2N1bWVudEdvaW5nQXdheS0+
ZnJhbWUoKSk7CkBAIC0yNjU2LDE1ICsyNjU1LDYgQEAgc3RhdGljIGJvb2wgaXNQb3NpdGlvbmVk
Q29udGFpbmVyKFJlbmRlckxheWVyKiBsYXllcikKICAgICByZXR1cm4gby0+aXNSZW5kZXJWaWV3
KCkgfHwgby0+aXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgfHwgby0+aXNSZWxQb3NpdGlvbmVkKCkg
fHwgbGF5ZXItPmhhc1RyYW5zZm9ybSgpOwogfQogCi1zdGF0aWMgYm9vbCBpc05vblJlbmRlclZp
ZXdGaXhlZFBvc2l0aW9uZWRDb250YWluZXIoUmVuZGVyTGF5ZXIqIGxheWVyKQotewotICAgIFJl
bmRlck9iamVjdCogbyA9IGxheWVyLT5yZW5kZXJlcigpOwotICAgIGlmIChvLT5pc1JlbmRlclZp
ZXcoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIG8tPmlzT3V0T2ZGbG93
UG9zaXRpb25lZCgpICYmIG8tPnN0eWxlKCktPnBvc2l0aW9uKCkgPT0gRml4ZWRQb3NpdGlvbjsK
LX0KLQogc3RhdGljIGJvb2wgaXNGaXhlZFBvc2l0aW9uZWRDb250YWluZXIoUmVuZGVyTGF5ZXIq
IGxheWVyKQogewogICAgIFJlbmRlck9iamVjdCogbyA9IGxheWVyLT5yZW5kZXJlcigpOwpAQCAt
NDIyMywxMiArNDIxMywxMiBAQCBib29sIFdlYlBhZ2U6OnRvdWNoRXZlbnQoY29uc3QgUGxhdGZv
cm06OlRvdWNoRXZlbnQmIGV2ZW50KQogCiB2b2lkIFdlYlBhZ2VQcml2YXRlOjpzZXRTY3JvbGxP
cmlnaW5Qb2ludChjb25zdCBQbGF0Zm9ybTo6SW50UG9pbnQmIHBvaW50KQogewotICAgIG1faW5S
ZWdpb25TY3JvbGxTdGFydGluZ05vZGUgPSAwOworICAgIG1faW5SZWdpb25TY3JvbGxlci0+cmVz
ZXQoKTsKIAogICAgIGlmICghbV9oYXNJblJlZ2lvblNjcm9sbGFibGVBcmVhcykKICAgICAgICAg
cmV0dXJuOwogCi0gICAgbV9jbGllbnQtPm5vdGlmeUluUmVnaW9uU2Nyb2xsaW5nU3RhcnRpbmdQ
b2ludENoYW5nZWQoaW5SZWdpb25TY3JvbGxhYmxlQXJlYXNGb3JQb2ludChwb2ludCkpOworICAg
IG1fY2xpZW50LT5ub3RpZnlJblJlZ2lvblNjcm9sbGluZ1N0YXJ0aW5nUG9pbnRDaGFuZ2VkKG1f
aW5SZWdpb25TY3JvbGxlci0+aW5SZWdpb25TY3JvbGxhYmxlQXJlYXNGb3JQb2ludChwb2ludCkp
OwogfQogCiB2b2lkIFdlYlBhZ2U6OnNldFNjcm9sbE9yaWdpblBvaW50KGNvbnN0IFBsYXRmb3Jt
OjpJbnRQb2ludCYgcG9pbnQpCkBAIC00Mzk4LDEyMCArNDM4OCw2IEBAIHZvaWQgV2ViUGFnZTo6
c2V0Rm9yY2VkVGV4dEVuY29kaW5nKGNvbnN0IGNoYXIqIGVuY29kaW5nKQogICAgICAgICByZXR1
cm4gZC0+Zm9jdXNlZE9yTWFpbkZyYW1lKCktPmxvYWRlcigpLT5yZWxvYWRXaXRoT3ZlcnJpZGVF
bmNvZGluZyhlbmNvZGluZyk7CiB9CiAKLWJvb2wgV2ViUGFnZVByaXZhdGU6OnNjcm9sbE5vZGVS
ZWN1cnNpdmVseShOb2RlKiBub2RlLCBjb25zdCBJbnRTaXplJiBkZWx0YSkKLXsKLSAgICBpZiAo
ZGVsdGEuaXNaZXJvKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKCFub2RlKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbm9k
ZS0+cmVuZGVyZXIoKTsKLSAgICBpZiAoIXJlbmRlcmVyKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBGcmFtZVZpZXcqIHZpZXcgPSByZW5kZXJlci0+dmlldygpLT5mcmFtZVZpZXcoKTsK
LSAgICBpZiAoIXZpZXcpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIFRyeSBzY3Jv
bGxpbmcgdGhlIHJlbmRlcmVyLgotICAgIGlmIChzY3JvbGxSZW5kZXJlcihyZW5kZXJlciwgZGVs
dGEpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIFdlJ3ZlIGhpdCB0aGUgcGFnZSwg
ZG9uJ3Qgc2Nyb2xsIGl0IGFuZCByZXR1cm4gZmFsc2UuCi0gICAgaWYgKHZpZXcgPT0gbV9tYWlu
RnJhbWUtPnZpZXcoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gVHJ5IHNjcm9s
bGluZyB0aGUgRnJhbWVWaWV3LgotICAgIGlmIChjYW5TY3JvbGxJbm5lckZyYW1lKHZpZXctPmZy
YW1lKCkpKSB7Ci0gICAgICAgIEludFNpemUgdmlld0RlbHRhID0gZGVsdGE7Ci0gICAgICAgIElu
dFBvaW50IG5ld1ZpZXdPZmZzZXQgPSB2aWV3LT5zY3JvbGxQb3NpdGlvbigpOwotICAgICAgICBJ
bnRQb2ludCBtYXhWaWV3T2Zmc2V0ID0gdmlldy0+bWF4aW11bVNjcm9sbFBvc2l0aW9uKCk7Ci0g
ICAgICAgIGFkanVzdFNjcm9sbERlbHRhKG1heFZpZXdPZmZzZXQsIG5ld1ZpZXdPZmZzZXQsIHZp
ZXdEZWx0YSk7Ci0KLSAgICAgICAgaWYgKCF2aWV3RGVsdGEuaXNaZXJvKCkpIHsKLSAgICAgICAg
ICAgIHZpZXctPnNldENhbkJsaXRPblNjcm9sbChmYWxzZSk7Ci0KLSAgICAgICAgICAgIEJhY2tp
bmdTdG9yZUNsaWVudCogYmFja2luZ1N0b3JlQ2xpZW50ID0gYmFja2luZ1N0b3JlQ2xpZW50Rm9y
RnJhbWUodmlldy0+ZnJhbWUoKSk7Ci0gICAgICAgICAgICBpZiAoYmFja2luZ1N0b3JlQ2xpZW50
KSB7Ci0gICAgICAgICAgICAgICAgYmFja2luZ1N0b3JlQ2xpZW50LT5zZXRJc0NsaWVudEdlbmVy
YXRlZFNjcm9sbCh0cnVlKTsKLSAgICAgICAgICAgICAgICBiYWNraW5nU3RvcmVDbGllbnQtPnNl
dElzU2Nyb2xsTm90aWZpY2F0aW9uU3VwcHJlc3NlZCh0cnVlKTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgbV9pblJlZ2lvblNjcm9sbFN0YXJ0aW5nTm9kZSA9IHZpZXctPmZyYW1lKCkt
PmRvY3VtZW50KCk7Ci0KLSAgICAgICAgICAgIHZpZXctPnNjcm9sbEJ5KHZpZXdEZWx0YSk7Ci0K
LSAgICAgICAgICAgIGlmIChiYWNraW5nU3RvcmVDbGllbnQpIHsKLSAgICAgICAgICAgICAgICBi
YWNraW5nU3RvcmVDbGllbnQtPnNldElzQ2xpZW50R2VuZXJhdGVkU2Nyb2xsKGZhbHNlKTsKLSAg
ICAgICAgICAgICAgICBiYWNraW5nU3RvcmVDbGllbnQtPnNldElzU2Nyb2xsTm90aWZpY2F0aW9u
U3VwcHJlc3NlZChmYWxzZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gVHJ5IHNjcm9sbGluZyB0aGUgbm9kZSBv
ZiB0aGUgZW5jbG9zaW5nIGZyYW1lLgotICAgIEZyYW1lKiBmcmFtZSA9IG5vZGUtPmRvY3VtZW50
KCktPmZyYW1lKCk7Ci0gICAgaWYgKGZyYW1lKSB7Ci0gICAgICAgIE5vZGUqIG93bmVyTm9kZSA9
IGZyYW1lLT5vd25lckVsZW1lbnQoKTsKLSAgICAgICAgaWYgKHNjcm9sbE5vZGVSZWN1cnNpdmVs
eShvd25lck5vZGUsIGRlbHRhKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBXZWJQYWdlUHJpdmF0ZTo6YWRqdXN0U2Nyb2xs
RGVsdGEoY29uc3QgSW50UG9pbnQmIG1heE9mZnNldCwgY29uc3QgSW50UG9pbnQmIGN1cnJlbnRP
ZmZzZXQsIEludFNpemUmIGRlbHRhKSBjb25zdAotewotICAgIGlmIChjdXJyZW50T2Zmc2V0Lngo
KSArIGRlbHRhLndpZHRoKCkgPiBtYXhPZmZzZXQueCgpKQotICAgICAgICBkZWx0YS5zZXRXaWR0
aChtaW4obWF4T2Zmc2V0LngoKSAtIGN1cnJlbnRPZmZzZXQueCgpLCBkZWx0YS53aWR0aCgpKSk7
Ci0KLSAgICBpZiAoY3VycmVudE9mZnNldC54KCkgKyBkZWx0YS53aWR0aCgpIDwgMCkKLSAgICAg
ICAgZGVsdGEuc2V0V2lkdGgobWF4KC1jdXJyZW50T2Zmc2V0LngoKSwgZGVsdGEud2lkdGgoKSkp
OwotCi0gICAgaWYgKGN1cnJlbnRPZmZzZXQueSgpICsgZGVsdGEuaGVpZ2h0KCkgPiBtYXhPZmZz
ZXQueSgpKQotICAgICAgICBkZWx0YS5zZXRIZWlnaHQobWluKG1heE9mZnNldC55KCkgLSBjdXJy
ZW50T2Zmc2V0LnkoKSwgZGVsdGEuaGVpZ2h0KCkpKTsKLQotICAgIGlmIChjdXJyZW50T2Zmc2V0
LnkoKSArIGRlbHRhLmhlaWdodCgpIDwgMCkKLSAgICAgICAgZGVsdGEuc2V0SGVpZ2h0KG1heCgt
Y3VycmVudE9mZnNldC55KCksIGRlbHRhLmhlaWdodCgpKSk7Ci19Ci0KLXN0YXRpYyBOb2RlKiBl
bmNsb3NpbmdMYXllck5vZGUoUmVuZGVyTGF5ZXIqKTsKLQotYm9vbCBXZWJQYWdlUHJpdmF0ZTo6
c2Nyb2xsUmVuZGVyZXIoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgSW50U2l6ZSYgZGVs
dGEpCi17Ci0gICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gcmVuZGVyZXItPmVuY2xvc2luZ0xheWVy
KCk7Ci0gICAgaWYgKCFsYXllcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gVHJ5
IHRvIHNjcm9sbCBsYXllci4KLSAgICBib29sIHJlc3RyaWN0ZWRCeUxpbmVDbGFtcCA9IGZhbHNl
OwotICAgIGlmIChyZW5kZXJlci0+cGFyZW50KCkpCi0gICAgICAgIHJlc3RyaWN0ZWRCeUxpbmVD
bGFtcCA9ICFyZW5kZXJlci0+cGFyZW50KCktPnN0eWxlKCktPmxpbmVDbGFtcCgpLmlzTm9uZSgp
OwotCi0gICAgaWYgKHJlbmRlcmVyLT5oYXNPdmVyZmxvd0NsaXAoKSAmJiAhcmVzdHJpY3RlZEJ5
TGluZUNsYW1wKSB7Ci0gICAgICAgIEludFNpemUgbGF5ZXJEZWx0YSA9IGRlbHRhOwotICAgICAg
ICBJbnRQb2ludCBtYXhPZmZzZXQobGF5ZXItPnNjcm9sbFdpZHRoKCkgLSBsYXllci0+cmVuZGVy
Qm94KCktPmNsaWVudFdpZHRoKCksIGxheWVyLT5zY3JvbGxIZWlnaHQoKSAtIGxheWVyLT5yZW5k
ZXJCb3goKS0+Y2xpZW50SGVpZ2h0KCkpOwotICAgICAgICBJbnRQb2ludCBjdXJyZW50T2Zmc2V0
KGxheWVyLT5zY3JvbGxYT2Zmc2V0KCksIGxheWVyLT5zY3JvbGxZT2Zmc2V0KCkpOwotICAgICAg
ICBhZGp1c3RTY3JvbGxEZWx0YShtYXhPZmZzZXQsIGN1cnJlbnRPZmZzZXQsIGxheWVyRGVsdGEp
OwotICAgICAgICBpZiAoIWxheWVyRGVsdGEuaXNaZXJvKCkpIHsKLSAgICAgICAgICAgIG1faW5S
ZWdpb25TY3JvbGxTdGFydGluZ05vZGUgPSBlbmNsb3NpbmdMYXllck5vZGUobGF5ZXIpOwotICAg
ICAgICAgICAgSW50UG9pbnQgbmV3T2Zmc2V0ID0gY3VycmVudE9mZnNldCArIGxheWVyRGVsdGE7
Ci0gICAgICAgICAgICBsYXllci0+c2Nyb2xsVG9PZmZzZXQodG9TaXplKG5ld09mZnNldCkpOwot
ICAgICAgICAgICAgcmVuZGVyZXItPnJlcGFpbnQodHJ1ZSk7Ci0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHdoaWxlIChsYXllciA9IGxheWVyLT5wYXJl
bnQoKSkgewotICAgICAgICBpZiAoY2FuU2Nyb2xsUmVuZGVyQm94KGxheWVyLT5yZW5kZXJCb3go
KSkpCi0gICAgICAgICAgICByZXR1cm4gc2Nyb2xsUmVuZGVyZXIobGF5ZXItPnJlbmRlckJveCgp
LCBkZWx0YSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBzdGF0aWMgdm9pZCBo
YW5kbGVTY3JvbGxpbmcodW5zaWduZWQgc2hvcnQgY2hhcmFjdGVyLCBXZWJQYWdlUHJpdmF0ZSog
c2Nyb2xsZXIpCiB7CiAgICAgY29uc3QgaW50IHNjcm9sbEZhY3RvciA9IDIwOwpAQCAtNDc3NSwx
NjkgKzQ2NTEsNiBAQCB2b2lkIFdlYlBhZ2U6OnNlbGVjdEF0UG9pbnQoY29uc3QgUGxhdGZvcm06
OkludFBvaW50JiBsb2NhdGlvbikKICAgICBkLT5tX3NlbGVjdGlvbkhhbmRsZXItPnNlbGVjdEF0
UG9pbnQoc2VsZWN0aW9uTG9jYXRpb24pOwogfQogCi0vLyBGSVhNRTogTW92ZSB0byBET01TdXBw
b3J0LgotYm9vbCBXZWJQYWdlUHJpdmF0ZTo6Y2FuU2Nyb2xsSW5uZXJGcmFtZShGcmFtZSogZnJh
bWUpIGNvbnN0Ci17Ci0gICAgaWYgKCFmcmFtZSB8fCAhZnJhbWUtPnZpZXcoKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgLy8gTm90IGhhdmluZyBhbiBvd25lciBlbGVtZW50IG1lYW5z
IHRoYXQgd2UgYXJlIG9uIHRoZSBtYWluZnJhbWUuCi0gICAgaWYgKCFmcmFtZS0+b3duZXJFbGVt
ZW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEFTU0VSVChmcmFtZSAhPSBtX21h
aW5GcmFtZSk7Ci0KLSAgICBJbnRTaXplIHZpc2libGVTaXplID0gZnJhbWUtPnZpZXcoKS0+dmlz
aWJsZUNvbnRlbnRSZWN0KCkuc2l6ZSgpOwotICAgIEludFNpemUgY29udGVudHNTaXplID0gZnJh
bWUtPnZpZXcoKS0+Y29udGVudHNTaXplKCk7Ci0KLSAgICBib29sIGNhbkJlU2Nyb2xsZWQgPSBj
b250ZW50c1NpemUuaGVpZ2h0KCkgPiB2aXNpYmxlU2l6ZS5oZWlnaHQoKSB8fCBjb250ZW50c1Np
emUud2lkdGgoKSA+IHZpc2libGVTaXplLndpZHRoKCk7Ci0KLSAgICAvLyBMZXRzIGFsc28gY29u
c2lkZXIgdGhlICdvdmVyZmxvdy17eCx5fSBwcm9wZXJ0eSBzZXQgZGlyZWN0bHkgdG8gdGhlIHtp
fWZyYW1lIHRhZy4KLSAgICByZXR1cm4gY2FuQmVTY3JvbGxlZCAmJiAoZnJhbWUtPm93bmVyRWxl
bWVudCgpLT5zY3JvbGxpbmdNb2RlKCkgIT0gU2Nyb2xsYmFyQWx3YXlzT2ZmKTsKLX0KLQotLy8g
VGhlIFJlbmRlckJveDo6Y2FuYmVTY3JvbGxlZEFuZEhhc1Njcm9sbGFibGVBcmVhIG1ldGhvZCBy
ZXR1cm5zIHRydWUgZm9yIHRoZQotLy8gZm9sbG93aW5nIHNjZW5hcmlvLCBmb3IgZXhhbXBsZToK
LS8vICgxKSBhIGRpdiB0aGF0IGhhcyBhIHZlcnRpY2FsIG92ZXJmbG93IGJ1dCBubyBob3Jpem9u
dGFsIG92ZXJmbG93Ci0vLyAgICAgd2l0aCBvdmVyZmxvdy15OiBoaWRkZW4gYW5kIG92ZXJmbG93
LXg6IGF1dG8gc2V0LgotLy8gVGhlIHZlcnNpb24gYmVsb3cgZml4ZXMgaXQuCi0vLyBGSVhNRTog
Rml4IFJlbmRlckJveDo6Y2FuQmVTY3JvbGxlZEFuZEhhc1Njcm9sbGFibGVBcmVhIG1ldGhvZCBp
bnN0ZWFkLgotYm9vbCBXZWJQYWdlUHJpdmF0ZTo6Y2FuU2Nyb2xsUmVuZGVyQm94KFJlbmRlckJv
eCogYm94KQotewotICAgIGlmICghYm94IHx8ICFib3gtPmhhc092ZXJmbG93Q2xpcCgpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoYm94LT5zY3JvbGxzT3ZlcmZsb3dYKCkgJiYg
KGJveC0+c2Nyb2xsV2lkdGgoKSAhPSBib3gtPmNsaWVudFdpZHRoKCkpCi0gICAgICAgIHx8IGJv
eC0+c2Nyb2xsc092ZXJmbG93WSgpICYmIChib3gtPnNjcm9sbEhlaWdodCgpICE9IGJveC0+Y2xp
ZW50SGVpZ2h0KCkpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIE5vZGUqIG5vZGUgPSBi
b3gtPm5vZGUoKTsKLSAgICByZXR1cm4gbm9kZSAmJiAobm9kZS0+cmVuZGVyZXJJc0VkaXRhYmxl
KCkgfHwgbm9kZS0+aXNEb2N1bWVudE5vZGUoKSk7Ci19Ci0KLXN0YXRpYyBSZW5kZXJMYXllciog
cGFyZW50TGF5ZXIoUmVuZGVyTGF5ZXIqIGxheWVyKQotewotICAgIEFTU0VSVChsYXllcik7Ci0g
ICAgaWYgKGxheWVyLT5wYXJlbnQoKSkKLSAgICAgICAgcmV0dXJuIGxheWVyLT5wYXJlbnQoKTsK
LQotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBsYXllci0+cmVuZGVyZXIoKTsKLSAgICBp
ZiAocmVuZGVyZXItPmRvY3VtZW50KCkgJiYgcmVuZGVyZXItPmRvY3VtZW50KCktPm93bmVyRWxl
bWVudCgpICYmIHJlbmRlcmVyLT5kb2N1bWVudCgpLT5vd25lckVsZW1lbnQoKS0+cmVuZGVyZXIo
KSkKLSAgICAgICAgcmV0dXJuIHJlbmRlcmVyLT5kb2N1bWVudCgpLT5vd25lckVsZW1lbnQoKS0+
cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKTsKLQotICAgIHJldHVybiAwOwotfQotCi0vLyBG
SVhNRTogTWFrZSBSZW5kZXJMYXllcjo6ZW5jbG9zaW5nRWxlbWVudCBwdWJsaWMgc28gdGhpcyBv
bmUgY2FuIGJlIHJlbW92ZWQuCi1zdGF0aWMgTm9kZSogZW5jbG9zaW5nTGF5ZXJOb2RlKFJlbmRl
ckxheWVyKiBsYXllcikKLXsKLSAgICBmb3IgKFJlbmRlck9iamVjdCogciA9IGxheWVyLT5yZW5k
ZXJlcigpOyByOyByID0gci0+cGFyZW50KCkpIHsKLSAgICAgICAgaWYgKE5vZGUqIGUgPSByLT5u
b2RlKCkpCi0gICAgICAgICAgICByZXR1cm4gZTsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHB1c2hCYWNrSW5SZWdpb25T
Y3JvbGxhYmxlKHN0ZDo6dmVjdG9yPFBsYXRmb3JtOjpTY3JvbGxWaWV3QmFzZSo+JiB2ZWN0b3Is
IEluUmVnaW9uU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGVyLCBXZWJQYWdlUHJpdmF0ZSogd2ViUGFn
ZSkKLXsKLSAgICBBU1NFUlQod2ViUGFnZSk7Ci0gICAgQVNTRVJUKCFzY3JvbGxlci5pc051bGwo
KSk7Ci0KLSAgICBzY3JvbGxlci0+c2V0Q2FuUHJvcGFnYXRlU2Nyb2xsaW5nVG9FbmNsb3NpbmdT
Y3JvbGxhYmxlKCFpc05vblJlbmRlclZpZXdGaXhlZFBvc2l0aW9uZWRDb250YWluZXIoc2Nyb2xs
ZXItPmxheWVyKCkpKTsKLSAgICB2ZWN0b3IucHVzaF9iYWNrKHNjcm9sbGVyKTsKLSAgICBpZiAo
dmVjdG9yLnNpemUoKSA9PSAxKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBVc2UgUmVuZGVyTGF5ZXI6
OnJlbmRlckJveCgpLT5ub2RlKCkgaW5zdGVhZD8KLSAgICAgICAgd2ViUGFnZS0+bV9pblJlZ2lv
blNjcm9sbFN0YXJ0aW5nTm9kZSA9IGVuY2xvc2luZ0xheWVyTm9kZShzY3JvbGxlci0+bGF5ZXIo
KSk7Ci0gICAgfQotfQotCi1zdGQ6OnZlY3RvcjxQbGF0Zm9ybTo6U2Nyb2xsVmlld0Jhc2UqPiBX
ZWJQYWdlUHJpdmF0ZTo6aW5SZWdpb25TY3JvbGxhYmxlQXJlYXNGb3JQb2ludChjb25zdCBQbGF0
Zm9ybTo6SW50UG9pbnQmIHBvaW50KQotewotICAgIHN0ZDo6dmVjdG9yPFBsYXRmb3JtOjpTY3Jv
bGxWaWV3QmFzZSo+IHZhbGlkUmV0dXJuOwotICAgIHN0ZDo6dmVjdG9yPFBsYXRmb3JtOjpTY3Jv
bGxWaWV3QmFzZSo+IGVtcHR5UmV0dXJuOwotCi0gICAgSGl0VGVzdFJlc3VsdCByZXN1bHQgPSBt
X21haW5GcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmhpdFRlc3RSZXN1bHRBdFBvaW50KG1hcEZyb21W
aWV3cG9ydFRvQ29udGVudHMocG9pbnQpLCBmYWxzZSAvKmFsbG93U2hhZG93Q29udGVudCovKTsK
LSAgICBOb2RlKiBub2RlID0gcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpOwotICAgIGlmICgh
bm9kZSkKLSAgICAgICAgcmV0dXJuIGVtcHR5UmV0dXJuOwotCi0gICAgUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7Ci0gICAgLy8gRklYTUU6IFZhbGlkYXRlIHdpdGgg
ZWxlbWVudHMgd2l0aCB2aXNpYmlsaXR5OmhpZGRlbi4KLSAgICBpZiAoIXJlbmRlcmVyKQotICAg
ICAgICByZXR1cm4gZW1wdHlSZXR1cm47Ci0KLSAgICBSZW5kZXJMYXllciogbGF5ZXIgPSByZW5k
ZXJlci0+ZW5jbG9zaW5nTGF5ZXIoKTsKLSAgICBkbyB7Ci0gICAgICAgIFJlbmRlck9iamVjdCog
cmVuZGVyZXIgPSBsYXllci0+cmVuZGVyZXIoKTsKLQotICAgICAgICBpZiAocmVuZGVyZXItPmlz
UmVuZGVyVmlldygpKSB7Ci0gICAgICAgICAgICBpZiAoUmVuZGVyVmlldyogcmVuZGVyVmlldyA9
IHRvUmVuZGVyVmlldyhyZW5kZXJlcikpIHsKLSAgICAgICAgICAgICAgICBGcmFtZVZpZXcqIHZp
ZXcgPSByZW5kZXJWaWV3LT5mcmFtZVZpZXcoKTsKLSAgICAgICAgICAgICAgICBpZiAoIXZpZXcp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlbXB0eVJldHVybjsKLQotICAgICAgICAgICAg
ICAgIGlmIChjYW5TY3JvbGxJbm5lckZyYW1lKHZpZXctPmZyYW1lKCkpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHB1c2hCYWNrSW5SZWdpb25TY3JvbGxhYmxlKHZhbGlkUmV0dXJuLCBuZXcgSW5S
ZWdpb25TY3JvbGxhYmxlQXJlYSh0aGlzLCBsYXllciksIHRoaXMpOwotICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0gZWxzZSBpZiAoY2FuU2Nyb2xsUmVuZGVyQm94KGxheWVyLT5yZW5kZXJCb3goKSkpIHsKLSAg
ICAgICAgICAgIHB1c2hCYWNrSW5SZWdpb25TY3JvbGxhYmxlKHZhbGlkUmV0dXJuLCBuZXcgSW5S
ZWdpb25TY3JvbGxhYmxlQXJlYSh0aGlzLCBsYXllciksIHRoaXMpOwotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJZiB3ZSBydW4gaW50byBhIGZpeCBwb3Np
dGlvbmVkIGxheWVyLCBzZXQgdGhlIGxhc3Qgc2Nyb2xsYWJsZSBpbi1yZWdpb24gb2JqZWN0Ci0g
ICAgICAgIC8vIGFzIG5vdCBhYmxlIHRvIHByb3BhZ2F0ZSBzY3JvbGwgdG8gaXRzIHBhcmVudCBz
Y3JvbGxhYmxlLgotICAgICAgICBpZiAoaXNOb25SZW5kZXJWaWV3Rml4ZWRQb3NpdGlvbmVkQ29u
dGFpbmVyKGxheWVyKSAmJiB2YWxpZFJldHVybi5zaXplKCkpIHsKLSAgICAgICAgICAgIFBsYXRm
b3JtOjpTY3JvbGxWaWV3QmFzZSogZW5kID0gdmFsaWRSZXR1cm4uYmFjaygpOwotICAgICAgICAg
ICAgZW5kLT5zZXRDYW5Qcm9wYWdhdGVTY3JvbGxpbmdUb0VuY2xvc2luZ1Njcm9sbGFibGUoZmFs
c2UpOwotICAgICAgICB9Ci0KLSAgICB9IHdoaWxlIChsYXllciA9IHBhcmVudExheWVyKGxheWVy
KSk7Ci0KLSAgICBpZiAodmFsaWRSZXR1cm4uZW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGVtcHR5
UmV0dXJuOwotCi0gICAgLy8gUG9zdC1jYWxjdWxhdGUgdGhlIHZpc2libGUgd2luZG93IHJlY3Rz
IGluIHJldmVyc2UgaGl0IHRlc3Qgb3JkZXIgc28KLSAgICAvLyB3ZSBhY2NvdW50IGZvciBhbGwg
YW5kIGFueSBjbGlwcGluZyByZWN0cy4KLSAgICBXZWJDb3JlOjpJbnRSZWN0IHJlY3Vyc2l2ZUNs
aXBwaW5nUmVjdChXZWJDb3JlOjpJbnRQb2ludDo6emVybygpLCB0cmFuc2Zvcm1lZFZpZXdwb3J0
U2l6ZSgpKTsKLQotICAgIHN0ZDo6dmVjdG9yPFBsYXRmb3JtOjpTY3JvbGxWaWV3QmFzZSo+Ojpy
ZXZlcnNlX2l0ZXJhdG9yIHJlbmQgPSB2YWxpZFJldHVybi5yZW5kKCk7Ci0gICAgZm9yIChzdGQ6
OnZlY3RvcjxQbGF0Zm9ybTo6U2Nyb2xsVmlld0Jhc2UqPjo6cmV2ZXJzZV9pdGVyYXRvciByaXQg
PSB2YWxpZFJldHVybi5yYmVnaW4oKTsgcml0ICE9IHJlbmQ7ICsrcml0KSB7Ci0KLSAgICAgICAg
SW5SZWdpb25TY3JvbGxhYmxlQXJlYSogY3VyciA9IHN0YXRpY19jYXN0PEluUmVnaW9uU2Nyb2xs
YWJsZUFyZWEqPigqcml0KTsKLSAgICAgICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gY3Vyci0+bGF5
ZXIoKTsKLQotICAgICAgICBpZiAobGF5ZXIgJiYgbGF5ZXItPnJlbmRlcmVyKCktPmlzUmVuZGVy
VmlldygpKSB7IC8vICNkb2N1bWVudCBjYXNlCi0gICAgICAgICAgICBGcmFtZVZpZXcqIHZpZXcg
PSB0b1JlbmRlclZpZXcobGF5ZXItPnJlbmRlcmVyKCkpLT5mcmFtZVZpZXcoKTsKLSAgICAgICAg
ICAgIEFTU0VSVCh2aWV3KTsKLSAgICAgICAgICAgIEFTU0VSVChjYW5TY3JvbGxJbm5lckZyYW1l
KHZpZXctPmZyYW1lKCkpKTsKLQotICAgICAgICAgICAgV2ViQ29yZTo6SW50UmVjdCBmcmFtZVdp
bmRvd1JlY3QgPSBtYXBUb1RyYW5zZm9ybWVkKGdldFJlY3Vyc2l2ZVZpc2libGVXaW5kb3dSZWN0
KHZpZXcpKTsKLSAgICAgICAgICAgIGZyYW1lV2luZG93UmVjdC5pbnRlcnNlY3QocmVjdXJzaXZl
Q2xpcHBpbmdSZWN0KTsKLSAgICAgICAgICAgIGN1cnItPnNldFZpc2libGVXaW5kb3dSZWN0KGZy
YW1lV2luZG93UmVjdCk7Ci0gICAgICAgICAgICByZWN1cnNpdmVDbGlwcGluZ1JlY3QgPSBmcmFt
ZVdpbmRvd1JlY3Q7Ci0KLSAgICAgICAgfSBlbHNlIHsgLy8gUmVuZGVyQm94LWJhc2VkIGVsZW1l
bnRzIGNhc2UgKHNjcm9sbGFibGUgYm94ZXMgKGRpdidzLCBwJ3MsIHRleHRhcmVhJ3MsIGV0Yykp
LgotCi0gICAgICAgICAgICBSZW5kZXJCb3gqIGJveCA9IGxheWVyLT5yZW5kZXJCb3goKTsKLSAg
ICAgICAgICAgIEFTU0VSVChib3gpOwotICAgICAgICAgICAgQVNTRVJUKGNhblNjcm9sbFJlbmRl
ckJveChib3gpKTsKLQotICAgICAgICAgICAgV2ViQ29yZTo6SW50UmVjdCB2aXNpYmxlV2luZG93
UmVjdCA9IGJveC0+YWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0KCk7Ci0gICAgICAgICAgICB2
aXNpYmxlV2luZG93UmVjdCA9IGJveC0+ZnJhbWUoKS0+dmlldygpLT5jb250ZW50c1RvV2luZG93
KHZpc2libGVXaW5kb3dSZWN0KTsKLSAgICAgICAgICAgIHZpc2libGVXaW5kb3dSZWN0ID0gbWFw
VG9UcmFuc2Zvcm1lZCh2aXNpYmxlV2luZG93UmVjdCk7Ci0gICAgICAgICAgICB2aXNpYmxlV2lu
ZG93UmVjdC5pbnRlcnNlY3QocmVjdXJzaXZlQ2xpcHBpbmdSZWN0KTsKLQotICAgICAgICAgICAg
Y3Vyci0+c2V0VmlzaWJsZVdpbmRvd1JlY3QodmlzaWJsZVdpbmRvd1JlY3QpOwotICAgICAgICAg
ICAgcmVjdXJzaXZlQ2xpcHBpbmdSZWN0ID0gdmlzaWJsZVdpbmRvd1JlY3Q7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICByZXR1cm4gdmFsaWRSZXR1cm47Ci19Ci0KIEJhY2tpbmdTdG9yZSogV2Vi
UGFnZTo6YmFja2luZ1N0b3JlKCkgY29uc3QKIHsKICAgICByZXR1cm4gZC0+bV9iYWNraW5nU3Rv
cmU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2VfcC5o
IGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJQYWdlX3AuaAppbmRleCBjZWY1M2Y3
Li45ZTEzYTMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBh
Z2VfcC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFnZV9wLmgKQEAg
LTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKICNpbmNsdWRlICJJbnNw
ZWN0b3JDbGllbnRCbGFja0JlcnJ5LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yT3ZlcmxheS5oIgor
I2luY2x1ZGUgIkluUmVnaW9uU2Nyb2xsZXIuaCIKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCiAjaW5jbHVkZSAiR0xFUzJDb250ZXh0LmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJl
ci5oIgpAQCAtMTQzLDcgKzE0NCw2IEBAIHB1YmxpYzoKICAgICBib29sIHNjcm9sbEJ5KGludCBk
ZWx0YVgsIGludCBkZWx0YVksIGJvb2wgc2Nyb2xsTWFpbkZyYW1lID0gdHJ1ZSk7CiAKICAgICB2
b2lkIGVucXVldWVSZW5kZXJpbmdPZkNsaXBwZWRDb250ZW50T2ZTY3JvbGxhYmxlTm9kZUFmdGVy
SW5SZWdpb25TY3JvbGxpbmcoV2ViQ29yZTo6Tm9kZSopOwotICAgIHN0ZDo6dmVjdG9yPFBsYXRm
b3JtOjpTY3JvbGxWaWV3QmFzZSo+IGluUmVnaW9uU2Nyb2xsYWJsZUFyZWFzRm9yUG9pbnQoY29u
c3QgUGxhdGZvcm06OkludFBvaW50Jik7CiAgICAgdm9pZCBub3RpZnlJblJlZ2lvblNjcm9sbFN0
YXR1c0NoYW5nZWQoYm9vbCBzdGF0dXMpOwogICAgIHZvaWQgc2V0U2Nyb2xsT3JpZ2luUG9pbnQo
Y29uc3QgUGxhdGZvcm06OkludFBvaW50Jik7CiAgICAgdm9pZCBzZXRIYXNJblJlZ2lvblNjcm9s
bGFibGVBcmVhcyhib29sKTsKQEAgLTMzMCwxMyArMzMwLDYgQEAgcHVibGljOgogICAgIFdlYkNv
cmU6OkZyYW1lKiBmb2N1c2VkT3JNYWluRnJhbWUoKSBjb25zdDsKICAgICBXZWJDb3JlOjpGcmFt
ZSogbWFpbkZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9tYWluRnJhbWU7IH0KIAotICAgIGJvb2wg
c2Nyb2xsTm9kZVJlY3Vyc2l2ZWx5KFdlYkNvcmU6Ok5vZGUqIG9yaWdpbmFsTm9kZSwgY29uc3Qg
V2ViQ29yZTo6SW50U2l6ZSYgZGVsdGEpOwotICAgIGJvb2wgc2Nyb2xsUmVuZGVyZXIoV2ViQ29y
ZTo6UmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgZGVsdGEp
OwotICAgIHZvaWQgYWRqdXN0U2Nyb2xsRGVsdGEoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIG1h
eE9mZnNldCwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGN1cnJlbnRPZmZzZXQsIFdlYkNvcmU6
OkludFNpemUmIGRlbHRhKSBjb25zdDsKLQotICAgIGJvb2wgY2FuU2Nyb2xsUmVuZGVyQm94KFdl
YkNvcmU6OlJlbmRlckJveCopOwotICAgIGJvb2wgY2FuU2Nyb2xsSW5uZXJGcmFtZShXZWJDb3Jl
OjpGcmFtZSopIGNvbnN0OwotCiAjaWYgRU5BQkxFKEVWRU5UX01PREVfTUVUQVRBR1MpCiAgICAg
dm9pZCBkaWRSZWNlaXZlQ3Vyc29yRXZlbnRNb2RlKFdlYkNvcmU6OkN1cnNvckV2ZW50TW9kZSk7
CiAgICAgdm9pZCBkaWRSZWNlaXZlVG91Y2hFdmVudE1vZGUoV2ViQ29yZTo6VG91Y2hFdmVudE1v
ZGUpOwpAQCAtNTU2LDcgKzU0OSw3IEBAIHB1YmxpYzoKIAogICAgIEhhc2hTZXQ8V2ViQ29yZTo6
UGx1Z2luVmlldyo+IG1fcGx1Z2luVmlld3M7CiAKLSAgICBSZWZQdHI8V2ViQ29yZTo6Tm9kZT4g
bV9pblJlZ2lvblNjcm9sbFN0YXJ0aW5nTm9kZTsKKyAgICBPd25QdHI8SW5SZWdpb25TY3JvbGxl
cj4gbV9pblJlZ2lvblNjcm9sbGVyOwogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQogICAgIGJvb2wgbV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9ibGFj
a2JlcnJ5L0NoYW5nZUxvZwppbmRleCBmMmJjYzFhLi4xNjNiYjhiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2JsYWNrYmVycnkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2ti
ZXJyeS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1NSBAQAorMjAxMi0wOC0wMSAgQW50b25pbyBHb21l
cyAgPGFnb21lc0ByaW0uY29tPgorIAorICAgICAgICBbQmxhY2tCZXJyeV0gSW1wbGVtZW50IElu
UmVnaW9uU2Nyb2xsZXIgY2xhc3MgYXMgYSBpbi1yZWdpb24gc2Nyb2xsIGNvbnRyb2xsZXIKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkyODg5CisgICAg
ICAgIFBSICMxODY1ODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBNb3ZlZCBhbGwgaW4tcmVnaW9uIHNjcm9sbGluZyBjb2RlIG91dCBvZiBXZWJQYWdl
UHJpdmF0ZSB0byB0aGUganVzdAorICAgICAgICBjcmVhdGVkIEluUmVnaW9uU2Nyb2xsZXIgY2xh
c3MuIFRoaXMgY2xhc3MgYWltcyB0bzoKKworICAgICAgICAxKSBDZW50cmFsaXplIGFsbCBpbi1y
ZWdpb24gc2Nyb2xsIGNvZGUgYW5kIGNsZWFuIHVwIFdlYlBhZ2VQcml2YXRlIGFzIGEgY29uc2Vx
dWVuY2UuCisgICAgICAgIDIpIEJlIHRoZSBiYXNlcyB0byBhZGQgVUkvQ29tcG9zaXRpbmcgdGhy
ZWFkIGRyaXZlbiBzY3JvbGxzIHRvIGluLXJlZ2lvbi4KKworICAgICAgICBUaGUgcGF0Y2ggZG9l
cyBub3QgY2hhbmdlIGFueSBmdW5jdGlvbmFsbGl0eSBjaGFuZ2UuCisKKyAgICAgICAgKiBBcGkv
V2ViUGFnZS5jcHA6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2VQcml2YXRl
OjpXZWJQYWdlUHJpdmF0ZSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2VQ
cml2YXRlOjppbml0KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFnZVByaXZh
dGU6OnNjcm9sbEJ5KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFnZVByaXZh
dGU6Om5vdGlmeUluUmVnaW9uU2Nyb2xsU3RhdHVzQ2hhbmdlZCk6CisgICAgICAgIChCbGFja0Jl
cnJ5OjpXZWJLaXQ6OldlYlBhZ2VQcml2YXRlOjpjbGVhckRvY3VtZW50RGF0YSk6CisgICAgICAg
IChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2VQcml2YXRlOjpzZXRTY3JvbGxPcmlnaW5Qb2lu
dCk6CisgICAgICAgICogQXBpL1dlYlBhZ2VfcC5oOgorICAgICAgICAoV2ViUGFnZVByaXZhdGUp
OgorICAgICAgICAqIFdlYktpdFN1cHBvcnQvSW5SZWdpb25TY3JvbGxhYmxlQXJlYS5jcHA6Cisg
ICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkluUmVnaW9uU2Nyb2xsYWJsZUFyZWE6OmxheWVy
KToKKyAgICAgICAgKiBXZWJLaXRTdXBwb3J0L0luUmVnaW9uU2Nyb2xsZXIuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OmNhblNjcm9s
bElubmVyRnJhbWUpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpjYW5TY3JvbGxSZW5k
ZXJCb3gpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpwYXJlbnRMYXllcik6CisgICAg
ICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OmVuY2xvc2luZ0xheWVyTm9kZSk6CisgICAgICAgIChC
bGFja0JlcnJ5OjpXZWJLaXQ6OmlzTm9uUmVuZGVyVmlld0ZpeGVkUG9zaXRpb25lZENvbnRhaW5l
cik6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OnB1c2hCYWNrSW5SZWdpb25TY3JvbGxh
YmxlKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6SW5SZWdpb25TY3JvbGxlcjo6SW5S
ZWdpb25TY3JvbGxlcik6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkluUmVnaW9uU2Ny
b2xsZXI6OnNldE5vZGUpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpJblJlZ2lvblNj
cm9sbGVyOjpub2RlKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6SW5SZWdpb25TY3Jv
bGxlcjo6cmVzZXQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpJblJlZ2lvblNjcm9s
bGVyOjppc051bGwpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpJblJlZ2lvblNjcm9s
bGVyOjpzY3JvbGxCeSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkluUmVnaW9uU2Ny
b2xsZXI6OmluUmVnaW9uU2Nyb2xsYWJsZUFyZWFzRm9yUG9pbnQpOgorICAgICAgICAoQmxhY2tC
ZXJyeTo6V2ViS2l0OjpJblJlZ2lvblNjcm9sbGVyOjpzY3JvbGxOb2RlUmVjdXJzaXZlbHkpOgor
ICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpJblJlZ2lvblNjcm9sbGVyOjpzY3JvbGxSZW5k
ZXJlcik6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkluUmVnaW9uU2Nyb2xsZXI6OmFk
anVzdFNjcm9sbERlbHRhKToKKyAgICAgICAgKiBXZWJLaXRTdXBwb3J0L0luUmVnaW9uU2Nyb2xs
ZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYktpdCk6CisgICAg
ICAgIChJblJlZ2lvblNjcm9sbGVyKToKKyAgICAgICAgKiBXZWJLaXRTdXBwb3J0L1RvdWNoRXZl
bnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6VG91Y2hFdmVudEhh
bmRsZXI6OmRyYXdUYXBIaWdobGlnaHQpOgorCiAyMDEyLTA4LTAxICBKYWNreSBKaWFuZyAgPHpo
YWppYW5nQHJpbS5jb20+CiAKICAgICAgICAgW0JsYWNrQmVycnldIEFsbG93IGNsaWVudCBzaWRl
IHRvIGFkZCBhbmQgcmVtb3ZlIG9yaWdpbiBhY2Nlc3Mgd2hpdGVsaXN0IGVudHJpZXMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0luUmVnaW9uU2Ny
b2xsYWJsZUFyZWEuY3BwIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQv
SW5SZWdpb25TY3JvbGxhYmxlQXJlYS5jcHAKaW5kZXggZjU4Y2FlOC4uNzZhOTgwZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5SZWdpb25TY3Jv
bGxhYmxlQXJlYS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBv
cnQvSW5SZWdpb25TY3JvbGxhYmxlQXJlYS5jcHAKQEAgLTIwLDcgKzIwLDYgQEAKICNpbmNsdWRl
ICJJblJlZ2lvblNjcm9sbGFibGVBcmVhLmgiCiAKICNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1
ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUmVuZGVyQm94LmgiCiAjaW5jbHVkZSAi
UmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKQEAgLTEwNCw2ICsxMDMs
NiBAQCBSZW5kZXJMYXllciogSW5SZWdpb25TY3JvbGxhYmxlQXJlYTo6bGF5ZXIoKSBjb25zdAog
ICAgIEFTU0VSVCghbV9pc051bGwpOwogICAgIHJldHVybiBtX2xheWVyOwogfQotfQogCiB9Cit9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JblJl
Z2lvblNjcm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0
L0luUmVnaW9uU2Nyb2xsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmNmNTdkNmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2Vi
S2l0U3VwcG9ydC9JblJlZ2lvblNjcm9sbGVyLmNwcApAQCAtMCwwICsxLDM1MCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNv
ZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiSW5SZWdpb25TY3JvbGxlci5oIgorCisjaW5jbHVkZSAiQmFja2luZ1N0
b3JlQ2xpZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJIaXRUZXN0UmVzdWx0
LmgiCisjaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCisjaW5jbHVkZSAiSW5SZWdp
b25TY3JvbGxhYmxlQXJlYS5oIgorI2luY2x1ZGUgIlJlbmRlckJveC5oIgorI2luY2x1ZGUgIlJl
bmRlckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVy
Vmlldy5oIgorI2luY2x1ZGUgIldlYlBhZ2VfcC5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKKworbmFtZXNwYWNlIEJsYWNrQmVycnkgeworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0YXRp
YyBib29sIGNhblNjcm9sbElubmVyRnJhbWUoRnJhbWUqIGZyYW1lKQoreworICAgIGlmICghZnJh
bWUgfHwgIWZyYW1lLT52aWV3KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIE5v
dCBoYXZpbmcgYW4gb3duZXIgZWxlbWVudCBtZWFucyB0aGF0IHdlIGFyZSBvbiB0aGUgbWFpbmZy
YW1lLgorICAgIGlmICghZnJhbWUtPm93bmVyRWxlbWVudCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBBU1NFUlQoZnJhbWUgIT0gZnJhbWUtPnBhZ2UoKS0+bWFpbkZyYW1lKCkpOwor
CisgICAgSW50U2l6ZSB2aXNpYmxlU2l6ZSA9IGZyYW1lLT52aWV3KCktPnZpc2libGVDb250ZW50
UmVjdCgpLnNpemUoKTsKKyAgICBJbnRTaXplIGNvbnRlbnRzU2l6ZSA9IGZyYW1lLT52aWV3KCkt
PmNvbnRlbnRzU2l6ZSgpOworCisgICAgYm9vbCBjYW5CZVNjcm9sbGVkID0gY29udGVudHNTaXpl
LmhlaWdodCgpID4gdmlzaWJsZVNpemUuaGVpZ2h0KCkgfHwgY29udGVudHNTaXplLndpZHRoKCkg
PiB2aXNpYmxlU2l6ZS53aWR0aCgpOworCisgICAgLy8gTGV0cyBhbHNvIGNvbnNpZGVyIHRoZSAn
b3ZlcmZsb3cte3gseX0gcHJvcGVydHkgc2V0IGRpcmVjdGx5IHRvIHRoZSB7aX1mcmFtZSB0YWcu
CisgICAgcmV0dXJuIGNhbkJlU2Nyb2xsZWQgJiYgKGZyYW1lLT5vd25lckVsZW1lbnQoKS0+c2Ny
b2xsaW5nTW9kZSgpICE9IFNjcm9sbGJhckFsd2F5c09mZik7Cit9CisKKy8vIFRoZSBSZW5kZXJC
b3g6OmNhbmJlU2Nyb2xsZWRBbmRIYXNTY3JvbGxhYmxlQXJlYSBtZXRob2QgcmV0dXJucyB0cnVl
IGZvciB0aGUKKy8vIGZvbGxvd2luZyBzY2VuYXJpbywgZm9yIGV4YW1wbGU6CisvLyAoMSkgYSBk
aXYgdGhhdCBoYXMgYSB2ZXJ0aWNhbCBvdmVyZmxvdyBidXQgbm8gaG9yaXpvbnRhbCBvdmVyZmxv
dworLy8gICAgIHdpdGggb3ZlcmZsb3cteTogaGlkZGVuIGFuZCBvdmVyZmxvdy14OiBhdXRvIHNl
dC4KKy8vIFRoZSB2ZXJzaW9uIGJlbG93IGZpeGVzIGl0LgorLy8gRklYTUU6IEZpeCBSZW5kZXJC
b3g6OmNhbkJlU2Nyb2xsZWRBbmRIYXNTY3JvbGxhYmxlQXJlYSBtZXRob2QgaW5zdGVhZC4KK3N0
YXRpYyBib29sIGNhblNjcm9sbFJlbmRlckJveChSZW5kZXJCb3gqIGJveCkKK3sKKyAgICBpZiAo
IWJveCB8fCAhYm94LT5oYXNPdmVyZmxvd0NsaXAoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgaWYgKGJveC0+c2Nyb2xsc092ZXJmbG93WCgpICYmIChib3gtPnNjcm9sbFdpZHRoKCkg
IT0gYm94LT5jbGllbnRXaWR0aCgpKQorICAgICAgICB8fCBib3gtPnNjcm9sbHNPdmVyZmxvd1ko
KSAmJiAoYm94LT5zY3JvbGxIZWlnaHQoKSAhPSBib3gtPmNsaWVudEhlaWdodCgpKSkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICBOb2RlKiBub2RlID0gYm94LT5ub2RlKCk7CisgICAgcmV0
dXJuIG5vZGUgJiYgKG5vZGUtPnJlbmRlcmVySXNFZGl0YWJsZSgpIHx8IG5vZGUtPmlzRG9jdW1l
bnROb2RlKCkpOworfQorCitzdGF0aWMgUmVuZGVyTGF5ZXIqIHBhcmVudExheWVyKFJlbmRlckxh
eWVyKiBsYXllcikKK3sKKyAgICBBU1NFUlQobGF5ZXIpOworICAgIGlmIChsYXllci0+cGFyZW50
KCkpCisgICAgICAgIHJldHVybiBsYXllci0+cGFyZW50KCk7CisKKyAgICBSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyID0gbGF5ZXItPnJlbmRlcmVyKCk7CisgICAgaWYgKHJlbmRlcmVyLT5kb2N1bWVu
dCgpICYmIHJlbmRlcmVyLT5kb2N1bWVudCgpLT5vd25lckVsZW1lbnQoKSAmJiByZW5kZXJlci0+
ZG9jdW1lbnQoKS0+b3duZXJFbGVtZW50KCktPnJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybiBy
ZW5kZXJlci0+ZG9jdW1lbnQoKS0+b3duZXJFbGVtZW50KCktPnJlbmRlcmVyKCktPmVuY2xvc2lu
Z0xheWVyKCk7CisKKyAgICByZXR1cm4gMDsKK30KKworLy8gRklYTUU6IE1ha2UgUmVuZGVyTGF5
ZXI6OmVuY2xvc2luZ0VsZW1lbnQgcHVibGljIHNvIHRoaXMgb25lIGNhbiBiZSByZW1vdmVkLgor
c3RhdGljIE5vZGUqIGVuY2xvc2luZ0xheWVyTm9kZShSZW5kZXJMYXllciogbGF5ZXIpCit7Cisg
ICAgZm9yIChSZW5kZXJPYmplY3QqIHIgPSBsYXllci0+cmVuZGVyZXIoKTsgcjsgciA9IHItPnBh
cmVudCgpKSB7CisgICAgICAgIGlmIChOb2RlKiBlID0gci0+bm9kZSgpKQorICAgICAgICAgICAg
cmV0dXJuIGU7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAw
OworfQorCitzdGF0aWMgYm9vbCBpc05vblJlbmRlclZpZXdGaXhlZFBvc2l0aW9uZWRDb250YWlu
ZXIoUmVuZGVyTGF5ZXIqIGxheWVyKQoreworICAgIFJlbmRlck9iamVjdCogbyA9IGxheWVyLT5y
ZW5kZXJlcigpOworICAgIGlmIChvLT5pc1JlbmRlclZpZXcoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgcmV0dXJuIG8tPmlzUG9zaXRpb25lZCgpICYmIG8tPnN0eWxlKCktPnBvc2l0
aW9uKCkgPT0gRml4ZWRQb3NpdGlvbjsKK30KKworc3RhdGljIHZvaWQgcHVzaEJhY2tJblJlZ2lv
blNjcm9sbGFibGUoc3RkOjp2ZWN0b3I8UGxhdGZvcm06OlNjcm9sbFZpZXdCYXNlKj4mIHZlY3Rv
ciwgSW5SZWdpb25TY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEsIEluUmVnaW9uU2Nyb2xs
ZXIqIHNjcm9sbGVyKQoreworICAgIEFTU0VSVCh3ZWJQYWdlKTsKKyAgICBBU1NFUlQoIXNjcm9s
bGFibGVBcmVhLT5pc051bGwoKSk7CisKKyAgICBzY3JvbGxhYmxlQXJlYS0+c2V0Q2FuUHJvcGFn
YXRlU2Nyb2xsaW5nVG9FbmNsb3NpbmdTY3JvbGxhYmxlKCFpc05vblJlbmRlclZpZXdGaXhlZFBv
c2l0aW9uZWRDb250YWluZXIoc2Nyb2xsYWJsZUFyZWEtPmxheWVyKCkpKTsKKyAgICB2ZWN0b3Iu
cHVzaF9iYWNrKHNjcm9sbGFibGVBcmVhKTsKKyAgICBpZiAodmVjdG9yLnNpemUoKSA9PSAxKSB7
CisgICAgICAgIC8vIEZJWE1FOiBVc2UgUmVuZGVyTGF5ZXI6OnJlbmRlckJveCgpLT5ub2RlKCkg
aW5zdGVhZD8KKyAgICAgICAgc2Nyb2xsZXItPnNldE5vZGUoZW5jbG9zaW5nTGF5ZXJOb2RlKHNj
cm9sbGFibGVBcmVhLT5sYXllcigpKSk7CisgICAgfQorfQorCitJblJlZ2lvblNjcm9sbGVyOjpJ
blJlZ2lvblNjcm9sbGVyKFdlYlBhZ2VQcml2YXRlKiB3ZWJQYWdlUHJpdmF0ZSkKKyAgICA6IG1f
d2ViUGFnZSh3ZWJQYWdlUHJpdmF0ZSkKK3sKK30KKwordm9pZCBJblJlZ2lvblNjcm9sbGVyOjpz
ZXROb2RlKFdlYkNvcmU6Ok5vZGUqIG5vZGUpCit7CisgICAgbV9pblJlZ2lvblNjcm9sbFN0YXJ0
aW5nTm9kZSA9IG5vZGU7Cit9CisKK1dlYkNvcmU6Ok5vZGUqIEluUmVnaW9uU2Nyb2xsZXI6Om5v
ZGUoKSBjb25zdAoreworICAgIHJldHVybiBtX2luUmVnaW9uU2Nyb2xsU3RhcnRpbmdOb2RlLmdl
dCgpOworfQorCit2b2lkIEluUmVnaW9uU2Nyb2xsZXI6OnJlc2V0KCkKK3sKKyAgICBzZXROb2Rl
KDApOworfQorCitib29sIEluUmVnaW9uU2Nyb2xsZXI6OmlzTnVsbCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuICFtX2luUmVnaW9uU2Nyb2xsU3RhcnRpbmdOb2RlOworfQorCitib29sIEluUmVnaW9u
U2Nyb2xsZXI6OnNjcm9sbEJ5KGNvbnN0IFBsYXRmb3JtOjpJbnRTaXplJiBkZWx0YSkKK3sKKyAg
ICBpZiAoaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBzY3Jv
bGxOb2RlUmVjdXJzaXZlbHkobm9kZSgpLCBkZWx0YSk7Cit9CisKK3N0ZDo6dmVjdG9yPFBsYXRm
b3JtOjpTY3JvbGxWaWV3QmFzZSo+IEluUmVnaW9uU2Nyb2xsZXI6OmluUmVnaW9uU2Nyb2xsYWJs
ZUFyZWFzRm9yUG9pbnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvaW50KQoreworICAgIHN0
ZDo6dmVjdG9yPFBsYXRmb3JtOjpTY3JvbGxWaWV3QmFzZSo+IHZhbGlkUmV0dXJuOworICAgIHN0
ZDo6dmVjdG9yPFBsYXRmb3JtOjpTY3JvbGxWaWV3QmFzZSo+IGVtcHR5UmV0dXJuOworCisgICAg
SGl0VGVzdFJlc3VsdCByZXN1bHQgPSBtX3dlYlBhZ2UtPm1fbWFpbkZyYW1lLT5ldmVudEhhbmRs
ZXIoKS0+aGl0VGVzdFJlc3VsdEF0UG9pbnQobV93ZWJQYWdlLT5tYXBGcm9tVmlld3BvcnRUb0Nv
bnRlbnRzKHBvaW50KSwgZmFsc2UgLyphbGxvd1NoYWRvd0NvbnRlbnQqLyk7CisgICAgTm9kZSog
bm9kZSA9IHJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKTsKKyAgICBpZiAoIW5vZGUgfHwgIW5v
ZGUtPnJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybiBlbXB0eVJldHVybjsKKworICAgIFJlbmRl
ckxheWVyKiBsYXllciA9IG5vZGUtPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCk7CisgICAg
ZG8geworICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbGF5ZXItPnJlbmRlcmVyKCk7
CisKKyAgICAgICAgaWYgKHJlbmRlcmVyLT5pc1JlbmRlclZpZXcoKSkgeworICAgICAgICAgICAg
aWYgKFJlbmRlclZpZXcqIHJlbmRlclZpZXcgPSB0b1JlbmRlclZpZXcocmVuZGVyZXIpKSB7Cisg
ICAgICAgICAgICAgICAgRnJhbWVWaWV3KiB2aWV3ID0gcmVuZGVyVmlldy0+ZnJhbWVWaWV3KCk7
CisgICAgICAgICAgICAgICAgaWYgKCF2aWV3KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZW1wdHlSZXR1cm47CisKKyAgICAgICAgICAgICAgICBpZiAoY2FuU2Nyb2xsSW5uZXJGcmFtZSh2
aWV3LT5mcmFtZSgpKSkgeworICAgICAgICAgICAgICAgICAgICBwdXNoQmFja0luUmVnaW9uU2Ny
b2xsYWJsZSh2YWxpZFJldHVybiwgbmV3IEluUmVnaW9uU2Nyb2xsYWJsZUFyZWEobV93ZWJQYWdl
LCBsYXllciksIHRoaXMpOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoY2FuU2Nyb2xsUmVu
ZGVyQm94KGxheWVyLT5yZW5kZXJCb3goKSkpIHsKKyAgICAgICAgICAgIHB1c2hCYWNrSW5SZWdp
b25TY3JvbGxhYmxlKHZhbGlkUmV0dXJuLCBuZXcgSW5SZWdpb25TY3JvbGxhYmxlQXJlYShtX3dl
YlBhZ2UsIGxheWVyKSwgdGhpcyk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQor
CisgICAgICAgIC8vIElmIHdlIHJ1biBpbnRvIGEgZml4IHBvc2l0aW9uZWQgbGF5ZXIsIHNldCB0
aGUgbGFzdCBzY3JvbGxhYmxlIGluLXJlZ2lvbiBvYmplY3QKKyAgICAgICAgLy8gYXMgbm90IGFi
bGUgdG8gcHJvcGFnYXRlIHNjcm9sbCB0byBpdHMgcGFyZW50IHNjcm9sbGFibGUuCisgICAgICAg
IGlmIChpc05vblJlbmRlclZpZXdGaXhlZFBvc2l0aW9uZWRDb250YWluZXIobGF5ZXIpICYmIHZh
bGlkUmV0dXJuLnNpemUoKSkgeworICAgICAgICAgICAgUGxhdGZvcm06OlNjcm9sbFZpZXdCYXNl
KiBlbmQgPSB2YWxpZFJldHVybi5iYWNrKCk7CisgICAgICAgICAgICBlbmQtPnNldENhblByb3Bh
Z2F0ZVNjcm9sbGluZ1RvRW5jbG9zaW5nU2Nyb2xsYWJsZShmYWxzZSk7CisgICAgICAgIH0KKwor
ICAgIH0gd2hpbGUgKGxheWVyID0gcGFyZW50TGF5ZXIobGF5ZXIpKTsKKworICAgIGlmICh2YWxp
ZFJldHVybi5lbXB0eSgpKQorICAgICAgICByZXR1cm4gZW1wdHlSZXR1cm47CisKKyAgICAvLyBQ
b3N0LWNhbGN1bGF0ZSB0aGUgdmlzaWJsZSB3aW5kb3cgcmVjdHMgaW4gcmV2ZXJzZSBoaXQgdGVz
dCBvcmRlciBzbworICAgIC8vIHdlIGFjY291bnQgZm9yIGFsbCBhbmQgYW55IGNsaXBwaW5nIHJl
Y3RzLgorICAgIFdlYkNvcmU6OkludFJlY3QgcmVjdXJzaXZlQ2xpcHBpbmdSZWN0KFdlYkNvcmU6
OkludFBvaW50Ojp6ZXJvKCksIG1fd2ViUGFnZS0+dHJhbnNmb3JtZWRWaWV3cG9ydFNpemUoKSk7
CisKKyAgICBzdGQ6OnZlY3RvcjxQbGF0Zm9ybTo6U2Nyb2xsVmlld0Jhc2UqPjo6cmV2ZXJzZV9p
dGVyYXRvciByZW5kID0gdmFsaWRSZXR1cm4ucmVuZCgpOworICAgIGZvciAoc3RkOjp2ZWN0b3I8
UGxhdGZvcm06OlNjcm9sbFZpZXdCYXNlKj46OnJldmVyc2VfaXRlcmF0b3Igcml0ID0gdmFsaWRS
ZXR1cm4ucmJlZ2luKCk7IHJpdCAhPSByZW5kOyArK3JpdCkgeworCisgICAgICAgIEluUmVnaW9u
U2Nyb2xsYWJsZUFyZWEqIGN1cnIgPSBzdGF0aWNfY2FzdDxJblJlZ2lvblNjcm9sbGFibGVBcmVh
Kj4oKnJpdCk7CisgICAgICAgIFJlbmRlckxheWVyKiBsYXllciA9IGN1cnItPmxheWVyKCk7CisK
KyAgICAgICAgaWYgKGxheWVyICYmIGxheWVyLT5yZW5kZXJlcigpLT5pc1JlbmRlclZpZXcoKSkg
eyAvLyAjZG9jdW1lbnQgY2FzZQorICAgICAgICAgICAgRnJhbWVWaWV3KiB2aWV3ID0gdG9SZW5k
ZXJWaWV3KGxheWVyLT5yZW5kZXJlcigpKS0+ZnJhbWVWaWV3KCk7CisgICAgICAgICAgICBBU1NF
UlQodmlldyk7CisgICAgICAgICAgICBBU1NFUlQoY2FuU2Nyb2xsSW5uZXJGcmFtZSh2aWV3LT5m
cmFtZSgpKSk7CisKKyAgICAgICAgICAgIFdlYkNvcmU6OkludFJlY3QgZnJhbWVXaW5kb3dSZWN0
ID0gbV93ZWJQYWdlLT5tYXBUb1RyYW5zZm9ybWVkKG1fd2ViUGFnZS0+Z2V0UmVjdXJzaXZlVmlz
aWJsZVdpbmRvd1JlY3QodmlldykpOworICAgICAgICAgICAgZnJhbWVXaW5kb3dSZWN0LmludGVy
c2VjdChyZWN1cnNpdmVDbGlwcGluZ1JlY3QpOworICAgICAgICAgICAgY3Vyci0+c2V0VmlzaWJs
ZVdpbmRvd1JlY3QoZnJhbWVXaW5kb3dSZWN0KTsKKyAgICAgICAgICAgIHJlY3Vyc2l2ZUNsaXBw
aW5nUmVjdCA9IGZyYW1lV2luZG93UmVjdDsKKworICAgICAgICB9IGVsc2UgeyAvLyBSZW5kZXJC
b3gtYmFzZWQgZWxlbWVudHMgY2FzZSAoc2Nyb2xsYWJsZSBib3hlcyAoZGl2J3MsIHAncywgdGV4
dGFyZWEncywgZXRjKSkuCisKKyAgICAgICAgICAgIFJlbmRlckJveCogYm94ID0gbGF5ZXItPnJl
bmRlckJveCgpOworICAgICAgICAgICAgQVNTRVJUKGJveCk7CisgICAgICAgICAgICBBU1NFUlQo
Y2FuU2Nyb2xsUmVuZGVyQm94KGJveCkpOworCisgICAgICAgICAgICBXZWJDb3JlOjpJbnRSZWN0
IHZpc2libGVXaW5kb3dSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChib3gtPmFic29sdXRlQ2xpcHBl
ZE92ZXJmbG93UmVjdCgpKTsKKyAgICAgICAgICAgIHZpc2libGVXaW5kb3dSZWN0ID0gYm94LT5m
cmFtZSgpLT52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3codmlzaWJsZVdpbmRvd1JlY3QpOworICAg
ICAgICAgICAgdmlzaWJsZVdpbmRvd1JlY3QgPSBtX3dlYlBhZ2UtPm1hcFRvVHJhbnNmb3JtZWQo
dmlzaWJsZVdpbmRvd1JlY3QpOworICAgICAgICAgICAgdmlzaWJsZVdpbmRvd1JlY3QuaW50ZXJz
ZWN0KHJlY3Vyc2l2ZUNsaXBwaW5nUmVjdCk7CisKKyAgICAgICAgICAgIGN1cnItPnNldFZpc2li
bGVXaW5kb3dSZWN0KHZpc2libGVXaW5kb3dSZWN0KTsKKyAgICAgICAgICAgIHJlY3Vyc2l2ZUNs
aXBwaW5nUmVjdCA9IHZpc2libGVXaW5kb3dSZWN0OworICAgICAgICB9CisgICAgfQorCisgICAg
cmV0dXJuIHZhbGlkUmV0dXJuOworfQorCitib29sIEluUmVnaW9uU2Nyb2xsZXI6OnNjcm9sbE5v
ZGVSZWN1cnNpdmVseShXZWJDb3JlOjpOb2RlKiBub2RlLCBjb25zdCBXZWJDb3JlOjpJbnRTaXpl
JiBkZWx0YSkKK3sKKyAgICBpZiAoZGVsdGEuaXNaZXJvKCkpCisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSZW5kZXJP
YmplY3QqIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKKyAgICBpZiAoIXJlbmRlcmVyKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBGcmFtZVZpZXcqIHZpZXcgPSByZW5kZXJlci0+
dmlldygpLT5mcmFtZVZpZXcoKTsKKyAgICBpZiAoIXZpZXcpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIC8vIFRyeSBzY3JvbGxpbmcgdGhlIHJlbmRlcmVyLgorICAgIGlmIChzY3JvbGxS
ZW5kZXJlcihyZW5kZXJlciwgZGVsdGEpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8v
IFdlJ3ZlIGhpdCB0aGUgcGFnZSwgZG9uJ3Qgc2Nyb2xsIGl0IGFuZCByZXR1cm4gZmFsc2UuCisg
ICAgaWYgKHZpZXcgPT0gbV93ZWJQYWdlLT5tX21haW5GcmFtZS0+dmlldygpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAvLyBUcnkgc2Nyb2xsaW5nIHRoZSBGcmFtZVZpZXcuCisgICAg
aWYgKGNhblNjcm9sbElubmVyRnJhbWUodmlldy0+ZnJhbWUoKSkpIHsKKyAgICAgICAgSW50U2l6
ZSB2aWV3RGVsdGEgPSBkZWx0YTsKKyAgICAgICAgSW50UG9pbnQgbmV3Vmlld09mZnNldCA9IHZp
ZXctPnNjcm9sbFBvc2l0aW9uKCk7CisgICAgICAgIEludFBvaW50IG1heFZpZXdPZmZzZXQgPSB2
aWV3LT5tYXhpbXVtU2Nyb2xsUG9zaXRpb24oKTsKKyAgICAgICAgYWRqdXN0U2Nyb2xsRGVsdGEo
bWF4Vmlld09mZnNldCwgbmV3Vmlld09mZnNldCwgdmlld0RlbHRhKTsKKworICAgICAgICBpZiAo
IXZpZXdEZWx0YS5pc1plcm8oKSkgeworICAgICAgICAgICAgdmlldy0+c2V0Q2FuQmxpdE9uU2Ny
b2xsKGZhbHNlKTsKKworICAgICAgICAgICAgQmFja2luZ1N0b3JlQ2xpZW50KiBiYWNraW5nU3Rv
cmVDbGllbnQgPSBtX3dlYlBhZ2UtPmJhY2tpbmdTdG9yZUNsaWVudEZvckZyYW1lKHZpZXctPmZy
YW1lKCkpOworICAgICAgICAgICAgaWYgKGJhY2tpbmdTdG9yZUNsaWVudCkgeworICAgICAgICAg
ICAgICAgIGJhY2tpbmdTdG9yZUNsaWVudC0+c2V0SXNDbGllbnRHZW5lcmF0ZWRTY3JvbGwodHJ1
ZSk7CisgICAgICAgICAgICAgICAgYmFja2luZ1N0b3JlQ2xpZW50LT5zZXRJc1Njcm9sbE5vdGlm
aWNhdGlvblN1cHByZXNzZWQodHJ1ZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNl
dE5vZGUodmlldy0+ZnJhbWUoKS0+ZG9jdW1lbnQoKSk7CisKKyAgICAgICAgICAgIHZpZXctPnNj
cm9sbEJ5KHZpZXdEZWx0YSk7CisKKyAgICAgICAgICAgIGlmIChiYWNraW5nU3RvcmVDbGllbnQp
IHsKKyAgICAgICAgICAgICAgICBiYWNraW5nU3RvcmVDbGllbnQtPnNldElzQ2xpZW50R2VuZXJh
dGVkU2Nyb2xsKGZhbHNlKTsKKyAgICAgICAgICAgICAgICBiYWNraW5nU3RvcmVDbGllbnQtPnNl
dElzU2Nyb2xsTm90aWZpY2F0aW9uU3VwcHJlc3NlZChmYWxzZSk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gVHJ5
IHNjcm9sbGluZyB0aGUgbm9kZSBvZiB0aGUgZW5jbG9zaW5nIGZyYW1lLgorICAgIEZyYW1lKiBm
cmFtZSA9IG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCk7CisgICAgaWYgKGZyYW1lKSB7CisgICAg
ICAgIE5vZGUqIG93bmVyTm9kZSA9IGZyYW1lLT5vd25lckVsZW1lbnQoKTsKKyAgICAgICAgaWYg
KHNjcm9sbE5vZGVSZWN1cnNpdmVseShvd25lck5vZGUsIGRlbHRhKSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBJblJlZ2lv
blNjcm9sbGVyOjpzY3JvbGxSZW5kZXJlcihXZWJDb3JlOjpSZW5kZXJPYmplY3QqIHJlbmRlcmVy
LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBkZWx0YSkKK3sKKyAgICBSZW5kZXJMYXllciogbGF5
ZXIgPSByZW5kZXJlci0+ZW5jbG9zaW5nTGF5ZXIoKTsKKyAgICBpZiAoIWxheWVyKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBUcnkgdG8gc2Nyb2xsIGxheWVyLgorICAgIGJvb2wg
cmVzdHJpY3RlZEJ5TGluZUNsYW1wID0gZmFsc2U7CisgICAgaWYgKHJlbmRlcmVyLT5wYXJlbnQo
KSkKKyAgICAgICAgcmVzdHJpY3RlZEJ5TGluZUNsYW1wID0gIXJlbmRlcmVyLT5wYXJlbnQoKS0+
c3R5bGUoKS0+bGluZUNsYW1wKCkuaXNOb25lKCk7CisKKyAgICBpZiAocmVuZGVyZXItPmhhc092
ZXJmbG93Q2xpcCgpICYmICFyZXN0cmljdGVkQnlMaW5lQ2xhbXApIHsKKyAgICAgICAgSW50U2l6
ZSBsYXllckRlbHRhID0gZGVsdGE7CisgICAgICAgIEludFBvaW50IG1heE9mZnNldChsYXllci0+
c2Nyb2xsV2lkdGgoKSAtIGxheWVyLT5yZW5kZXJCb3goKS0+Y2xpZW50V2lkdGgoKSwgbGF5ZXIt
PnNjcm9sbEhlaWdodCgpIC0gbGF5ZXItPnJlbmRlckJveCgpLT5jbGllbnRIZWlnaHQoKSk7Cisg
ICAgICAgIEludFBvaW50IGN1cnJlbnRPZmZzZXQobGF5ZXItPnNjcm9sbFhPZmZzZXQoKSwgbGF5
ZXItPnNjcm9sbFlPZmZzZXQoKSk7CisgICAgICAgIGFkanVzdFNjcm9sbERlbHRhKG1heE9mZnNl
dCwgY3VycmVudE9mZnNldCwgbGF5ZXJEZWx0YSk7CisgICAgICAgIGlmICghbGF5ZXJEZWx0YS5p
c1plcm8oKSkgeworICAgICAgICAgICAgc2V0Tm9kZShlbmNsb3NpbmdMYXllck5vZGUobGF5ZXIp
KTsKKyAgICAgICAgICAgIEludFBvaW50IG5ld09mZnNldCA9IGN1cnJlbnRPZmZzZXQgKyBsYXll
ckRlbHRhOworICAgICAgICAgICAgbGF5ZXItPnNjcm9sbFRvT2Zmc2V0KG5ld09mZnNldC54KCks
IG5ld09mZnNldC55KCkpOworICAgICAgICAgICAgcmVuZGVyZXItPnJlcGFpbnQodHJ1ZSk7Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHdoaWxlIChs
YXllciA9IGxheWVyLT5wYXJlbnQoKSkgeworICAgICAgICBpZiAoY2FuU2Nyb2xsUmVuZGVyQm94
KGxheWVyLT5yZW5kZXJCb3goKSkpCisgICAgICAgICAgICByZXR1cm4gc2Nyb2xsUmVuZGVyZXIo
bGF5ZXItPnJlbmRlckJveCgpLCBkZWx0YSk7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOwor
fQorCit2b2lkIEluUmVnaW9uU2Nyb2xsZXI6OmFkanVzdFNjcm9sbERlbHRhKGNvbnN0IFdlYkNv
cmU6OkludFBvaW50JiBtYXhPZmZzZXQsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBjdXJyZW50
T2Zmc2V0LCBXZWJDb3JlOjpJbnRTaXplJiBkZWx0YSkgY29uc3QKK3sKKyAgICBpZiAoY3VycmVu
dE9mZnNldC54KCkgKyBkZWx0YS53aWR0aCgpID4gbWF4T2Zmc2V0LngoKSkKKyAgICAgICAgZGVs
dGEuc2V0V2lkdGgoc3RkOjptaW4obWF4T2Zmc2V0LngoKSAtIGN1cnJlbnRPZmZzZXQueCgpLCBk
ZWx0YS53aWR0aCgpKSk7CisKKyAgICBpZiAoY3VycmVudE9mZnNldC54KCkgKyBkZWx0YS53aWR0
aCgpIDwgMCkKKyAgICAgICAgZGVsdGEuc2V0V2lkdGgoc3RkOjptYXgoLWN1cnJlbnRPZmZzZXQu
eCgpLCBkZWx0YS53aWR0aCgpKSk7CisKKyAgICBpZiAoY3VycmVudE9mZnNldC55KCkgKyBkZWx0
YS5oZWlnaHQoKSA+IG1heE9mZnNldC55KCkpCisgICAgICAgIGRlbHRhLnNldEhlaWdodChzdGQ6
Om1pbihtYXhPZmZzZXQueSgpIC0gY3VycmVudE9mZnNldC55KCksIGRlbHRhLmhlaWdodCgpKSk7
CisKKyAgICBpZiAoY3VycmVudE9mZnNldC55KCkgKyBkZWx0YS5oZWlnaHQoKSA8IDApCisgICAg
ICAgIGRlbHRhLnNldEhlaWdodChzdGQ6Om1heCgtY3VycmVudE9mZnNldC55KCksIGRlbHRhLmhl
aWdodCgpKSk7Cit9CisKK30KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJy
eS9XZWJLaXRTdXBwb3J0L0luUmVnaW9uU2Nyb2xsZXIuaCBiL1NvdXJjZS9XZWJLaXQvYmxhY2ti
ZXJyeS9XZWJLaXRTdXBwb3J0L0luUmVnaW9uU2Nyb2xsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5jZTFlZmY3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5SZWdpb25TY3JvbGxlci5oCkBAIC0wLDAgKzEs
NjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9u
IExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExl
c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0
byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lm
bmRlZiBJblJlZ2lvblNjcm9sbGVyX2gKKyNkZWZpbmUgSW5SZWdpb25TY3JvbGxlcl9oCisKKyNp
bmNsdWRlICJJbnRSZWN0LmgiCisKKyNpbmNsdWRlIDxpbnRlcmFjdGlvbi9TY3JvbGxWaWV3QmFz
ZS5oPgorI2luY2x1ZGUgPHZlY3Rvcj4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgRnJh
bWU7CitjbGFzcyBOb2RlOworY2xhc3MgUmVuZGVyT2JqZWN0OworfQorCituYW1lc3BhY2UgQmxh
Y2tCZXJyeSB7CituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViUGFnZVByaXZhdGU7CisK
K2NsYXNzIEluUmVnaW9uU2Nyb2xsZXIgeworCitwdWJsaWM6CisgICAgSW5SZWdpb25TY3JvbGxl
cihXZWJQYWdlUHJpdmF0ZSopOworCisgICAgdm9pZCBzZXROb2RlKFdlYkNvcmU6Ok5vZGUqKTsK
KyAgICBXZWJDb3JlOjpOb2RlKiBub2RlKCkgY29uc3Q7CisgICAgdm9pZCByZXNldCgpOworICAg
IGJvb2wgaXNOdWxsKCkgY29uc3Q7CisKKyAgICBib29sIHNjcm9sbEJ5KGNvbnN0IFBsYXRmb3Jt
OjpJbnRTaXplJiBkZWx0YSk7CisKKyAgICBzdGQ6OnZlY3RvcjxQbGF0Zm9ybTo6U2Nyb2xsVmll
d0Jhc2UqPiBpblJlZ2lvblNjcm9sbGFibGVBcmVhc0ZvclBvaW50KGNvbnN0IFdlYkNvcmU6Oklu
dFBvaW50Jik7Citwcml2YXRlOgorCisgICAgYm9vbCBzY3JvbGxOb2RlUmVjdXJzaXZlbHkoV2Vi
Q29yZTo6Tm9kZSosIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGRlbHRhKTsKKyAgICBib29sIHNj
cm9sbFJlbmRlcmVyKFdlYkNvcmU6OlJlbmRlck9iamVjdCosIGNvbnN0IFdlYkNvcmU6OkludFNp
emUmIGRlbHRhKTsKKworICAgIHZvaWQgYWRqdXN0U2Nyb2xsRGVsdGEoY29uc3QgV2ViQ29yZTo6
SW50UG9pbnQmIG1heE9mZnNldCwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGN1cnJlbnRPZmZz
ZXQsIFdlYkNvcmU6OkludFNpemUmIGRlbHRhKSBjb25zdDsKKworICAgIFJlZlB0cjxXZWJDb3Jl
OjpOb2RlPiBtX2luUmVnaW9uU2Nyb2xsU3RhcnRpbmdOb2RlOworICAgIFdlYlBhZ2VQcml2YXRl
KiBtX3dlYlBhZ2U7Cit9OworCit9Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvVG91Y2hFdmVudEhhbmRsZXIuY3BwIGIvU291
cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvVG91Y2hFdmVudEhhbmRsZXIuY3Bw
CmluZGV4IGM4NjY4YmUuLmI0MTEzYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxhY2ti
ZXJyeS9XZWJLaXRTdXBwb3J0L1RvdWNoRXZlbnRIYW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9Ub3VjaEV2ZW50SGFuZGxlci5jcHAKQEAgLTM2
Myw3ICszNjMsNyBAQCB2b2lkIFRvdWNoRXZlbnRIYW5kbGVyOjpkcmF3VGFwSGlnaGxpZ2h0KCkK
ICAgICAvLyBPbiB0aGUgY2xpZW50IHNpZGUsIHRoaXMgaW5mbyBpcyBiZWluZyB1c2VkIHRvIGhp
ZGUgdGhlIHRhcCBoaWdobGlnaHQgd2luZG93IG9uIHNjcm9sbC4KICAgICBSZW5kZXJMYXllciog
bGF5ZXIgPSBtX3dlYlBhZ2UtPmVuY2xvc2luZ0ZpeGVkUG9zaXRpb25lZEFuY2VzdG9yT3JTZWxm
SWZGaXhlZFBvc2l0aW9uZWQocmVuZGVyZXItPmVuY2xvc2luZ0xheWVyKCkpOwogICAgIGJvb2wg
c2hvdWxkSGlkZVRhcEhpZ2hsaWdodFJpZ2h0QWZ0ZXJTY3JvbGxpbmcgPSAhbGF5ZXItPnJlbmRl
cmVyKCktPmlzUmVuZGVyVmlldygpOwotICAgIHNob3VsZEhpZGVUYXBIaWdobGlnaHRSaWdodEFm
dGVyU2Nyb2xsaW5nIHw9ICEhbV93ZWJQYWdlLT5tX2luUmVnaW9uU2Nyb2xsU3RhcnRpbmdOb2Rl
LmdldCgpOworICAgIHNob3VsZEhpZGVUYXBIaWdobGlnaHRSaWdodEFmdGVyU2Nyb2xsaW5nIHw9
ICEhbV93ZWJQYWdlLT5tX2luUmVnaW9uU2Nyb2xsZXItPm5vZGUoKTsKIAogICAgIEludFBvaW50
IGZyYW1lUG9zKG1fd2ViUGFnZS0+ZnJhbWVPZmZzZXQoZWxlbWVudEZyYW1lKSk7CiAKLS0gCjEu
Ny41LjQKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>156091</attachid>
            <date>2012-08-02 08:19:59 -0700</date>
            <delta_ts>2012-08-02 08:39:22 -0700</delta_ts>
            <desc>patch v2</desc>
            <filename>0001-BlackBerry-Implement-InRegionScroller-class-as-a-in-.patch</filename>
            <type>text/plain</type>
            <size>41873</size>
            <attacher name="Antonio Gomes">tonikitoo</attacher>
            
              <data encoding="base64">RnJvbSBjZWRiMmNiYjFjMjhkNDUxNjNiYWQ5NDQ2ZWNlYTczNjhlOGZmNDA1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbnRvbmlvIEdvbWVzIDxhZ29tZXNAcmltLmNvbT4KRGF0ZTog
V2VkLCAxIEF1ZyAyMDEyIDE4OjA0OjI0IC0wNDAwClN1YmplY3Q6IFtQQVRDSF0gW0JsYWNrQmVy
cnldIEltcGxlbWVudCBJblJlZ2lvblNjcm9sbGVyIGNsYXNzIGFzIGEgaW4tcmVnaW9uCiBzY3Jv
bGwgY29udHJvbGxlcgogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTky
ODg5IFBSICMxODY1ODcKClJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgpQYXRjaCBieSBBbnRv
bmlvIEdvbWVzIDxhZ29tZXNAcmltLmNvbT4KClNvdXJjZS9XZWJLaXQ6CgoqIFBsYXRmb3JtQmxh
Y2tCZXJyeS5jbWFrZTogQWRkZWQgSW5SZWdpb25TY3JvbGxlci5jcHB8aCB0byB0aGUgYnVpbGQg
c3lzdGVtLgoKU291cmNlL1dlYktpdC9ibGFja2JlcnJ5OgoKTW92ZWQgYWxsIGluLXJlZ2lvbiBz
Y3JvbGxpbmcgY29kZSBvdXQgb2YgV2ViUGFnZVByaXZhdGUgdG8gdGhlIGp1c3QKY3JlYXRlZCBJ
blJlZ2lvblNjcm9sbGVyIGNsYXNzLiBUaGlzIGNsYXNzIGFpbXMgdG86CgoxKSBDZW50cmFsaXpl
IGFsbCBpbi1yZWdpb24gc2Nyb2xsIGNvZGUgYW5kIGNsZWFuIHVwIFdlYlBhZ2VQcml2YXRlIGFz
IGEgY29uc2VxdWVuY2UuCjIpIEJlIHRoZSBiYXNlcyB0byBhZGQgVUkvQ29tcG9zaXRpbmcgdGhy
ZWFkIGRyaXZlbiBzY3JvbGxzIHRvIGluLXJlZ2lvbi4KClRoZSBwYXRjaCBkb2VzIG5vdCBjaGFu
Z2UgYW55IGZ1bmN0aW9uYWxsaXR5IGNoYW5nZS4KCiogQXBpL1dlYlBhZ2UuY3BwOgooQmxhY2tC
ZXJyeTo6V2ViS2l0OjpXZWJQYWdlUHJpdmF0ZTo6V2ViUGFnZVByaXZhdGUpOgooQmxhY2tCZXJy
eTo6V2ViS2l0OjpXZWJQYWdlUHJpdmF0ZTo6aW5pdCk6CihCbGFja0JlcnJ5OjpXZWJLaXQ6Oldl
YlBhZ2VQcml2YXRlOjpzY3JvbGxCeSk6CihCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2VQcml2
YXRlOjpub3RpZnlJblJlZ2lvblNjcm9sbFN0YXR1c0NoYW5nZWQpOgooQmxhY2tCZXJyeTo6V2Vi
S2l0OjpXZWJQYWdlUHJpdmF0ZTo6Y2xlYXJEb2N1bWVudERhdGEpOgooQmxhY2tCZXJyeTo6V2Vi
S2l0OjpXZWJQYWdlUHJpdmF0ZTo6c2V0U2Nyb2xsT3JpZ2luUG9pbnQpOgoqIEFwaS9XZWJQYWdl
X3AuaDoKKFdlYlBhZ2VQcml2YXRlKToKKiBXZWJLaXRTdXBwb3J0L0luUmVnaW9uU2Nyb2xsYWJs
ZUFyZWEuY3BwOgooQmxhY2tCZXJyeTo6V2ViS2l0OjpJblJlZ2lvblNjcm9sbGFibGVBcmVhOjps
YXllcik6CiogV2ViS2l0U3VwcG9ydC9JblJlZ2lvblNjcm9sbGVyLmNwcDogQWRkZWQuCihXZWJL
aXQpOgooQmxhY2tCZXJyeTo6V2ViS2l0OjpjYW5TY3JvbGxJbm5lckZyYW1lKToKKEJsYWNrQmVy
cnk6OldlYktpdDo6Y2FuU2Nyb2xsUmVuZGVyQm94KToKKEJsYWNrQmVycnk6OldlYktpdDo6cGFy
ZW50TGF5ZXIpOgooQmxhY2tCZXJyeTo6V2ViS2l0OjplbmNsb3NpbmdMYXllck5vZGUpOgooQmxh
Y2tCZXJyeTo6V2ViS2l0Ojppc05vblJlbmRlclZpZXdGaXhlZFBvc2l0aW9uZWRDb250YWluZXIp
OgooQmxhY2tCZXJyeTo6V2ViS2l0OjpwdXNoQmFja0luUmVnaW9uU2Nyb2xsYWJsZSk6CihCbGFj
a0JlcnJ5OjpXZWJLaXQ6OkluUmVnaW9uU2Nyb2xsZXI6OkluUmVnaW9uU2Nyb2xsZXIpOgooQmxh
Y2tCZXJyeTo6V2ViS2l0OjpJblJlZ2lvblNjcm9sbGVyOjpzZXROb2RlKToKKEJsYWNrQmVycnk6
OldlYktpdDo6SW5SZWdpb25TY3JvbGxlcjo6bm9kZSk6CihCbGFja0JlcnJ5OjpXZWJLaXQ6Oklu
UmVnaW9uU2Nyb2xsZXI6OnJlc2V0KToKKEJsYWNrQmVycnk6OldlYktpdDo6SW5SZWdpb25TY3Jv
bGxlcjo6aXNOdWxsKToKKEJsYWNrQmVycnk6OldlYktpdDo6SW5SZWdpb25TY3JvbGxlcjo6c2Ny
b2xsQnkpOgooQmxhY2tCZXJyeTo6V2ViS2l0OjpJblJlZ2lvblNjcm9sbGVyOjppblJlZ2lvblNj
cm9sbGFibGVBcmVhc0ZvclBvaW50KToKKEJsYWNrQmVycnk6OldlYktpdDo6SW5SZWdpb25TY3Jv
bGxlcjo6c2Nyb2xsTm9kZVJlY3Vyc2l2ZWx5KToKKEJsYWNrQmVycnk6OldlYktpdDo6SW5SZWdp
b25TY3JvbGxlcjo6c2Nyb2xsUmVuZGVyZXIpOgooQmxhY2tCZXJyeTo6V2ViS2l0OjpJblJlZ2lv
blNjcm9sbGVyOjphZGp1c3RTY3JvbGxEZWx0YSk6CiogV2ViS2l0U3VwcG9ydC9JblJlZ2lvblNj
cm9sbGVyLmg6IEFkZGVkLgooV2ViQ29yZSk6CihXZWJLaXQpOgooSW5SZWdpb25TY3JvbGxlcik6
CiogV2ViS2l0U3VwcG9ydC9Ub3VjaEV2ZW50SGFuZGxlci5jcHA6CihCbGFja0JlcnJ5OjpXZWJL
aXQ6OlRvdWNoRXZlbnRIYW5kbGVyOjpkcmF3VGFwSGlnaGxpZ2h0KToKLS0tCiBTb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTAgKwogU291cmNl
L1dlYktpdC9QbGF0Zm9ybUJsYWNrQmVycnkuY21ha2UgICAgICAgICAgICAgfCAgICAyICsKIFNv
dXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFnZS5jcHAgICAgICAgICAgIHwgIDMxOSAr
LS0tLS0tLS0tLS0tLS0tLS0KIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFnZV9w
LmggICAgICAgICAgIHwgICAxMiArLQogU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5nZUxv
ZyAgICAgICAgICAgICAgICAgfCAgIDUyICsrKwogLi4uL1dlYktpdFN1cHBvcnQvSW5SZWdpb25T
Y3JvbGxhYmxlQXJlYS5jcHAgICAgICAgfCAgICAzICstCiAuLi4vYmxhY2tiZXJyeS9XZWJLaXRT
dXBwb3J0L0luUmVnaW9uU2Nyb2xsZXIuY3BwICB8ICAzNTUgKysrKysrKysrKysrKysrKysrKysK
IC4uLi9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5SZWdpb25TY3JvbGxlci5oICAgIHwgICA2
NyArKysrCiAuLi4vYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L1RvdWNoRXZlbnRIYW5kbGVyLmNw
cCB8ICAgIDIgKy0KIDkgZmlsZXMgY2hhbmdlZCwgNTA3IGluc2VydGlvbnMoKyksIDMxNSBkZWxl
dGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2Vi
S2l0U3VwcG9ydC9JblJlZ2lvblNjcm9sbGVyLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJj
ZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0luUmVnaW9uU2Nyb2xsZXIuaAoKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKaW5kZXggMTk5OTRkMS4uYWNiMTEwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAx
Mi0wOC0wMSAgQW50b25pbyBHb21lcyAgPGFnb21lc0ByaW0uY29tPgorCisgICAgICAgIFtCbGFj
a0JlcnJ5XSBJbXBsZW1lbnQgSW5SZWdpb25TY3JvbGxlciBjbGFzcyBhcyBhIGluLXJlZ2lvbiBz
Y3JvbGwgY29udHJvbGxlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9OTI4ODkKKyAgICAgICAgUFIgIzE4NjU4NworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtlOiBB
ZGRlZCBJblJlZ2lvblNjcm9sbGVyLmNwcHxoIHRvIHRoZSBidWlsZCBzeXN0ZW0uCisKIDIwMTIt
MDctMzAgIFNpbW9uIEhhdXNtYW5uICA8c2ltb24uaGF1c21hbm5Abm9raWEuY29tPgogCiAgICAg
ICAgIFVucmV2aWV3ZWQgUXQvTWFjIGJ1aWxkIGZpeDogVXNlIGxpYldlYktpdFN5c3RlbUludGVy
ZmFjZU1vdW50YWluTGlvbi5hCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtQmxh
Y2tCZXJyeS5jbWFrZSBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtlCmlu
ZGV4IDA1YWFlZDguLjhkYWJjODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1C
bGFja0JlcnJ5LmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1CbGFja0JlcnJ5LmNt
YWtlCkBAIC0xMDAsNiArMTAwLDggQEAgTElTVChBUFBFTkQgV2ViS2l0X1NPVVJDRVMKICAgICBi
bGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvRnJhbWVMYXllcnMuY3BwCiAgICAgYmxhY2tiZXJyeS9X
ZWJLaXRTdXBwb3J0L0luUGFnZVNlYXJjaE1hbmFnZXIuY3BwCiAgICAgYmxhY2tiZXJyeS9XZWJL
aXRTdXBwb3J0L0lucHV0SGFuZGxlci5jcHAKKyAgICBibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQv
SW5SZWdpb25TY3JvbGxhYmxlQXJlYS5jcHAKKyAgICBibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQv
SW5SZWdpb25TY3JvbGxlci5jcHAKICAgICBibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvUmVuZGVy
UXVldWUuY3BwCiAgICAgYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L1NlbGVjdGlvbkhhbmRsZXIu
Y3BwCiAgICAgYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L1NlbGVjdGlvbk92ZXJsYXkuY3BwCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2UuY3BwIGIvU291
cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJQYWdlLmNwcAppbmRleCA0ZTBhZjEyLi5hOTM1
N2M1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFnZS5jcHAKQEAgLTM5Myw3
ICszOTMsNiBAQCBXZWJQYWdlUHJpdmF0ZTo6V2ViUGFnZVByaXZhdGUoV2ViUGFnZSogd2ViUGFn
ZSwgV2ViUGFnZUNsaWVudCogY2xpZW50LCBjb25zdCBJbgogICAgICwgbV9sYXN0VXNlckV2ZW50
VGltZXN0YW1wKDAuMCkKICAgICAsIG1fcGx1Z2luTW91c2VCdXR0b25QcmVzc2VkKGZhbHNlKQog
ICAgICwgbV9wbHVnaW5NYXlPcGVuTmV3VGFiKGZhbHNlKQotICAgICwgbV9pblJlZ2lvblNjcm9s
bFN0YXJ0aW5nTm9kZSgwKQogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICAs
IG1fcm9vdExheWVyQ29tbWl0VGltZXIoYWRvcHRQdHIobmV3IFRpbWVyPFdlYlBhZ2VQcml2YXRl
Pih0aGlzLCAmV2ViUGFnZVByaXZhdGU6OnJvb3RMYXllckNvbW1pdFRpbWVyRmlyZWQpKSkKICAg
ICAsIG1fbmVlZHNPbmVTaG90RHJhd2luZ1N5bmNocm9uaXphdGlvbihmYWxzZSkKQEAgLTU1OCw2
ICs1NTcsOCBAQCB2b2lkIFdlYlBhZ2VQcml2YXRlOjppbml0KGNvbnN0IFdlYlN0cmluZyYgcGFn
ZUdyb3VwTmFtZSkKICAgICBmcmFtZUxvYWRlckNsaWVudC0+c2V0RnJhbWUobV9tYWluRnJhbWUs
IHRoaXMpOwogICAgIG1fbWFpbkZyYW1lLT5pbml0KCk7CiAKKyAgICBtX2luUmVnaW9uU2Nyb2xs
ZXIgPSBhZG9wdFB0cihuZXcgSW5SZWdpb25TY3JvbGxlcih0aGlzKSk7CisKICNpZiBFTkFCTEUo
V0VCR0wpCiAgICAgUGxhdGZvcm06OlNldHRpbmdzKiBzZXR0aW5ncyA9IFBsYXRmb3JtOjpTZXR0
aW5nczo6aW5zdGFuY2UoKTsKICAgICBtX3BhZ2UtPnNldHRpbmdzKCktPnNldFdlYkdMRW5hYmxl
ZChzZXR0aW5ncyAmJiBzZXR0aW5ncy0+aXNXZWJHTFN1cHBvcnRlZCgpKTsKQEAgLTE1MjIsMTUg
KzE1MjMsMTMgQEAgYm9vbCBXZWJQYWdlUHJpdmF0ZTo6c2Nyb2xsQnkoaW50IGRlbHRhWCwgaW50
IGRlbHRhWSwgYm9vbCBzY3JvbGxNYWluRnJhbWUpCiAgICAgICAgICAgICBkZWx0YS53aWR0aCgp
IDwgMCA/IC11bnRyYW5zZm9ybWVkQ29waWVkRGVsdGEud2lkdGgoKSA6IHVudHJhbnNmb3JtZWRD
b3BpZWREZWx0YS53aWR0aCgpLAogICAgICAgICAgICAgZGVsdGEuaGVpZ2h0KCkgPCAwID8gLXVu
dHJhbnNmb3JtZWRDb3BpZWREZWx0YS5oZWlnaHQoKTogdW50cmFuc2Zvcm1lZENvcGllZERlbHRh
LmhlaWdodCgpKTsKIAotICAgICAgICBpZiAobV9pblJlZ2lvblNjcm9sbFN0YXJ0aW5nTm9kZSkg
ewotICAgICAgICAgICAgaWYgKHNjcm9sbE5vZGVSZWN1cnNpdmVseShtX2luUmVnaW9uU2Nyb2xs
U3RhcnRpbmdOb2RlLmdldCgpLCBkZWx0YSkpIHsKLSAgICAgICAgICAgICAgICBtX3NlbGVjdGlv
bkhhbmRsZXItPnNlbGVjdGlvblBvc2l0aW9uQ2hhbmdlZCgpOwotICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBXZSBoYXZlIGNvZGUgaW4gcGxhY2UgdG8gaGFuZGxlIHNjcm9sbGluZyBhbmQgY2xp
cHBpbmcgdGFwIGhpZ2hsaWdodAotICAgICAgICAgICAgICAgIC8vIG9uIGluLXJlZ2lvbiBzY3Jv
bGxpbmcuIEFzIHNvb24gYXMgaXQgaXMgZmFzdCBlbm91Z2ggKGkuZS4gd2UgaGF2ZSBpdCBiYWNr
ZWQgYnkKLSAgICAgICAgICAgICAgICAvLyBhIGJhY2tpbmcgc3RvcmUpLCB3ZSBjYW4gcmVsaWFi
bHkgbWFrZSB1c2Ugb2YgaXQgaW4gdGhlIHJlYWwgd29ybGQuCi0gICAgICAgICAgICAgICAgLy8g
bV90b3VjaEV2ZW50SGFuZGxlci0+ZHJhd1RhcEhpZ2hsaWdodCgpOwotICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQorICAgICAgICBpZiAobV9pblJlZ2lvblNjcm9s
bGVyLT5zY3JvbGxCeShkZWx0YSkpIHsKKyAgICAgICAgICAgIG1fc2VsZWN0aW9uSGFuZGxlci0+
c2VsZWN0aW9uUG9zaXRpb25DaGFuZ2VkKCk7CisgICAgICAgICAgICAvLyBGSVhNRTogV2UgaGF2
ZSBjb2RlIGluIHBsYWNlIHRvIGhhbmRsZSBzY3JvbGxpbmcgYW5kIGNsaXBwaW5nIHRhcCBoaWdo
bGlnaHQKKyAgICAgICAgICAgIC8vIG9uIGluLXJlZ2lvbiBzY3JvbGxpbmcuIEFzIHNvb24gYXMg
aXQgaXMgZmFzdCBlbm91Z2ggKGkuZS4gd2UgaGF2ZSBpdCBiYWNrZWQgYnkKKyAgICAgICAgICAg
IC8vIGEgYmFja2luZyBzdG9yZSksIHdlIGNhbiByZWxpYWJseSBtYWtlIHVzZSBvZiBpdCBpbiB0
aGUgcmVhbCB3b3JsZC4KKyAgICAgICAgICAgIC8vIG1fdG91Y2hFdmVudEhhbmRsZXItPmRyYXdU
YXBIaWdobGlnaHQoKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTU1MCw5ICsxNTQ5LDkgQEAgYm9vbCBXZWJQYWdlOjpz
Y3JvbGxCeShjb25zdCBQbGF0Zm9ybTo6SW50U2l6ZSYgZGVsdGEsIGJvb2wgc2Nyb2xsTWFpbkZy
YW1lKQogCiB2b2lkIFdlYlBhZ2VQcml2YXRlOjpub3RpZnlJblJlZ2lvblNjcm9sbFN0YXR1c0No
YW5nZWQoYm9vbCBzdGF0dXMpCiB7Ci0gICAgaWYgKCFzdGF0dXMgJiYgbV9pblJlZ2lvblNjcm9s
bFN0YXJ0aW5nTm9kZSkgewotICAgICAgICBlbnF1ZXVlUmVuZGVyaW5nT2ZDbGlwcGVkQ29udGVu
dE9mU2Nyb2xsYWJsZU5vZGVBZnRlckluUmVnaW9uU2Nyb2xsaW5nKG1faW5SZWdpb25TY3JvbGxT
dGFydGluZ05vZGUuZ2V0KCkpOwotICAgICAgICBtX2luUmVnaW9uU2Nyb2xsU3RhcnRpbmdOb2Rl
ID0gMDsKKyAgICBpZiAoIXN0YXR1cyAmJiBtX2luUmVnaW9uU2Nyb2xsZXItPmhhc05vZGUoKSkg
eworICAgICAgICBlbnF1ZXVlUmVuZGVyaW5nT2ZDbGlwcGVkQ29udGVudE9mU2Nyb2xsYWJsZU5v
ZGVBZnRlckluUmVnaW9uU2Nyb2xsaW5nKG1faW5SZWdpb25TY3JvbGxlci0+bm9kZSgpKTsKKyAg
ICAgICAgbV9pblJlZ2lvblNjcm9sbGVyLT5yZXNldCgpOwogICAgIH0KIH0KIApAQCAtMjYzNSw4
ICsyNjM0LDggQEAgdm9pZCBXZWJQYWdlUHJpdmF0ZTo6Y2xlYXJEb2N1bWVudERhdGEoY29uc3Qg
RG9jdW1lbnQqIGRvY3VtZW50R29pbmdBd2F5KQogICAgIGlmIChtX2N1cnJlbnRCbG9ja1pvb21B
ZGp1c3RlZE5vZGUgJiYgbV9jdXJyZW50QmxvY2tab29tQWRqdXN0ZWROb2RlLT5kb2N1bWVudCgp
ID09IGRvY3VtZW50R29pbmdBd2F5KQogICAgICAgICBtX2N1cnJlbnRCbG9ja1pvb21BZGp1c3Rl
ZE5vZGUgPSAwOwogCi0gICAgaWYgKG1faW5SZWdpb25TY3JvbGxTdGFydGluZ05vZGUgJiYgbV9p
blJlZ2lvblNjcm9sbFN0YXJ0aW5nTm9kZS0+ZG9jdW1lbnQoKSA9PSBkb2N1bWVudEdvaW5nQXdh
eSkKLSAgICAgICAgbV9pblJlZ2lvblNjcm9sbFN0YXJ0aW5nTm9kZSA9IDA7CisgICAgaWYgKG1f
aW5SZWdpb25TY3JvbGxlci0+aGFzTm9kZSgpICYmIG1faW5SZWdpb25TY3JvbGxlci0+bm9kZSgp
LT5kb2N1bWVudCgpID09IGRvY3VtZW50R29pbmdBd2F5KQorICAgICAgICBtX2luUmVnaW9uU2Ny
b2xsZXItPnJlc2V0KCk7OwogCiAgICAgaWYgKGRvY3VtZW50R29pbmdBd2F5LT5mcmFtZSgpKQog
ICAgICAgICBtX2lucHV0SGFuZGxlci0+ZnJhbWVVbmxvYWRlZChkb2N1bWVudEdvaW5nQXdheS0+
ZnJhbWUoKSk7CkBAIC0yNjU2LDE1ICsyNjU1LDYgQEAgc3RhdGljIGJvb2wgaXNQb3NpdGlvbmVk
Q29udGFpbmVyKFJlbmRlckxheWVyKiBsYXllcikKICAgICByZXR1cm4gby0+aXNSZW5kZXJWaWV3
KCkgfHwgby0+aXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgfHwgby0+aXNSZWxQb3NpdGlvbmVkKCkg
fHwgbGF5ZXItPmhhc1RyYW5zZm9ybSgpOwogfQogCi1zdGF0aWMgYm9vbCBpc05vblJlbmRlclZp
ZXdGaXhlZFBvc2l0aW9uZWRDb250YWluZXIoUmVuZGVyTGF5ZXIqIGxheWVyKQotewotICAgIFJl
bmRlck9iamVjdCogbyA9IGxheWVyLT5yZW5kZXJlcigpOwotICAgIGlmIChvLT5pc1JlbmRlclZp
ZXcoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIG8tPmlzT3V0T2ZGbG93
UG9zaXRpb25lZCgpICYmIG8tPnN0eWxlKCktPnBvc2l0aW9uKCkgPT0gRml4ZWRQb3NpdGlvbjsK
LX0KLQogc3RhdGljIGJvb2wgaXNGaXhlZFBvc2l0aW9uZWRDb250YWluZXIoUmVuZGVyTGF5ZXIq
IGxheWVyKQogewogICAgIFJlbmRlck9iamVjdCogbyA9IGxheWVyLT5yZW5kZXJlcigpOwpAQCAt
NDIyMywxMiArNDIxMywxMiBAQCBib29sIFdlYlBhZ2U6OnRvdWNoRXZlbnQoY29uc3QgUGxhdGZv
cm06OlRvdWNoRXZlbnQmIGV2ZW50KQogCiB2b2lkIFdlYlBhZ2VQcml2YXRlOjpzZXRTY3JvbGxP
cmlnaW5Qb2ludChjb25zdCBQbGF0Zm9ybTo6SW50UG9pbnQmIHBvaW50KQogewotICAgIG1faW5S
ZWdpb25TY3JvbGxTdGFydGluZ05vZGUgPSAwOworICAgIG1faW5SZWdpb25TY3JvbGxlci0+cmVz
ZXQoKTsKIAogICAgIGlmICghbV9oYXNJblJlZ2lvblNjcm9sbGFibGVBcmVhcykKICAgICAgICAg
cmV0dXJuOwogCi0gICAgbV9jbGllbnQtPm5vdGlmeUluUmVnaW9uU2Nyb2xsaW5nU3RhcnRpbmdQ
b2ludENoYW5nZWQoaW5SZWdpb25TY3JvbGxhYmxlQXJlYXNGb3JQb2ludChwb2ludCkpOworICAg
IG1fY2xpZW50LT5ub3RpZnlJblJlZ2lvblNjcm9sbGluZ1N0YXJ0aW5nUG9pbnRDaGFuZ2VkKG1f
aW5SZWdpb25TY3JvbGxlci0+aW5SZWdpb25TY3JvbGxhYmxlQXJlYXNGb3JQb2ludChwb2ludCkp
OwogfQogCiB2b2lkIFdlYlBhZ2U6OnNldFNjcm9sbE9yaWdpblBvaW50KGNvbnN0IFBsYXRmb3Jt
OjpJbnRQb2ludCYgcG9pbnQpCkBAIC00Mzk4LDEyMCArNDM4OCw2IEBAIHZvaWQgV2ViUGFnZTo6
c2V0Rm9yY2VkVGV4dEVuY29kaW5nKGNvbnN0IGNoYXIqIGVuY29kaW5nKQogICAgICAgICByZXR1
cm4gZC0+Zm9jdXNlZE9yTWFpbkZyYW1lKCktPmxvYWRlcigpLT5yZWxvYWRXaXRoT3ZlcnJpZGVF
bmNvZGluZyhlbmNvZGluZyk7CiB9CiAKLWJvb2wgV2ViUGFnZVByaXZhdGU6OnNjcm9sbE5vZGVS
ZWN1cnNpdmVseShOb2RlKiBub2RlLCBjb25zdCBJbnRTaXplJiBkZWx0YSkKLXsKLSAgICBpZiAo
ZGVsdGEuaXNaZXJvKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKCFub2RlKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbm9k
ZS0+cmVuZGVyZXIoKTsKLSAgICBpZiAoIXJlbmRlcmVyKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBGcmFtZVZpZXcqIHZpZXcgPSByZW5kZXJlci0+dmlldygpLT5mcmFtZVZpZXcoKTsK
LSAgICBpZiAoIXZpZXcpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIFRyeSBzY3Jv
bGxpbmcgdGhlIHJlbmRlcmVyLgotICAgIGlmIChzY3JvbGxSZW5kZXJlcihyZW5kZXJlciwgZGVs
dGEpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIFdlJ3ZlIGhpdCB0aGUgcGFnZSwg
ZG9uJ3Qgc2Nyb2xsIGl0IGFuZCByZXR1cm4gZmFsc2UuCi0gICAgaWYgKHZpZXcgPT0gbV9tYWlu
RnJhbWUtPnZpZXcoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gVHJ5IHNjcm9s
bGluZyB0aGUgRnJhbWVWaWV3LgotICAgIGlmIChjYW5TY3JvbGxJbm5lckZyYW1lKHZpZXctPmZy
YW1lKCkpKSB7Ci0gICAgICAgIEludFNpemUgdmlld0RlbHRhID0gZGVsdGE7Ci0gICAgICAgIElu
dFBvaW50IG5ld1ZpZXdPZmZzZXQgPSB2aWV3LT5zY3JvbGxQb3NpdGlvbigpOwotICAgICAgICBJ
bnRQb2ludCBtYXhWaWV3T2Zmc2V0ID0gdmlldy0+bWF4aW11bVNjcm9sbFBvc2l0aW9uKCk7Ci0g
ICAgICAgIGFkanVzdFNjcm9sbERlbHRhKG1heFZpZXdPZmZzZXQsIG5ld1ZpZXdPZmZzZXQsIHZp
ZXdEZWx0YSk7Ci0KLSAgICAgICAgaWYgKCF2aWV3RGVsdGEuaXNaZXJvKCkpIHsKLSAgICAgICAg
ICAgIHZpZXctPnNldENhbkJsaXRPblNjcm9sbChmYWxzZSk7Ci0KLSAgICAgICAgICAgIEJhY2tp
bmdTdG9yZUNsaWVudCogYmFja2luZ1N0b3JlQ2xpZW50ID0gYmFja2luZ1N0b3JlQ2xpZW50Rm9y
RnJhbWUodmlldy0+ZnJhbWUoKSk7Ci0gICAgICAgICAgICBpZiAoYmFja2luZ1N0b3JlQ2xpZW50
KSB7Ci0gICAgICAgICAgICAgICAgYmFja2luZ1N0b3JlQ2xpZW50LT5zZXRJc0NsaWVudEdlbmVy
YXRlZFNjcm9sbCh0cnVlKTsKLSAgICAgICAgICAgICAgICBiYWNraW5nU3RvcmVDbGllbnQtPnNl
dElzU2Nyb2xsTm90aWZpY2F0aW9uU3VwcHJlc3NlZCh0cnVlKTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgbV9pblJlZ2lvblNjcm9sbFN0YXJ0aW5nTm9kZSA9IHZpZXctPmZyYW1lKCkt
PmRvY3VtZW50KCk7Ci0KLSAgICAgICAgICAgIHZpZXctPnNjcm9sbEJ5KHZpZXdEZWx0YSk7Ci0K
LSAgICAgICAgICAgIGlmIChiYWNraW5nU3RvcmVDbGllbnQpIHsKLSAgICAgICAgICAgICAgICBi
YWNraW5nU3RvcmVDbGllbnQtPnNldElzQ2xpZW50R2VuZXJhdGVkU2Nyb2xsKGZhbHNlKTsKLSAg
ICAgICAgICAgICAgICBiYWNraW5nU3RvcmVDbGllbnQtPnNldElzU2Nyb2xsTm90aWZpY2F0aW9u
U3VwcHJlc3NlZChmYWxzZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gVHJ5IHNjcm9sbGluZyB0aGUgbm9kZSBv
ZiB0aGUgZW5jbG9zaW5nIGZyYW1lLgotICAgIEZyYW1lKiBmcmFtZSA9IG5vZGUtPmRvY3VtZW50
KCktPmZyYW1lKCk7Ci0gICAgaWYgKGZyYW1lKSB7Ci0gICAgICAgIE5vZGUqIG93bmVyTm9kZSA9
IGZyYW1lLT5vd25lckVsZW1lbnQoKTsKLSAgICAgICAgaWYgKHNjcm9sbE5vZGVSZWN1cnNpdmVs
eShvd25lck5vZGUsIGRlbHRhKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBXZWJQYWdlUHJpdmF0ZTo6YWRqdXN0U2Nyb2xs
RGVsdGEoY29uc3QgSW50UG9pbnQmIG1heE9mZnNldCwgY29uc3QgSW50UG9pbnQmIGN1cnJlbnRP
ZmZzZXQsIEludFNpemUmIGRlbHRhKSBjb25zdAotewotICAgIGlmIChjdXJyZW50T2Zmc2V0Lngo
KSArIGRlbHRhLndpZHRoKCkgPiBtYXhPZmZzZXQueCgpKQotICAgICAgICBkZWx0YS5zZXRXaWR0
aChtaW4obWF4T2Zmc2V0LngoKSAtIGN1cnJlbnRPZmZzZXQueCgpLCBkZWx0YS53aWR0aCgpKSk7
Ci0KLSAgICBpZiAoY3VycmVudE9mZnNldC54KCkgKyBkZWx0YS53aWR0aCgpIDwgMCkKLSAgICAg
ICAgZGVsdGEuc2V0V2lkdGgobWF4KC1jdXJyZW50T2Zmc2V0LngoKSwgZGVsdGEud2lkdGgoKSkp
OwotCi0gICAgaWYgKGN1cnJlbnRPZmZzZXQueSgpICsgZGVsdGEuaGVpZ2h0KCkgPiBtYXhPZmZz
ZXQueSgpKQotICAgICAgICBkZWx0YS5zZXRIZWlnaHQobWluKG1heE9mZnNldC55KCkgLSBjdXJy
ZW50T2Zmc2V0LnkoKSwgZGVsdGEuaGVpZ2h0KCkpKTsKLQotICAgIGlmIChjdXJyZW50T2Zmc2V0
LnkoKSArIGRlbHRhLmhlaWdodCgpIDwgMCkKLSAgICAgICAgZGVsdGEuc2V0SGVpZ2h0KG1heCgt
Y3VycmVudE9mZnNldC55KCksIGRlbHRhLmhlaWdodCgpKSk7Ci19Ci0KLXN0YXRpYyBOb2RlKiBl
bmNsb3NpbmdMYXllck5vZGUoUmVuZGVyTGF5ZXIqKTsKLQotYm9vbCBXZWJQYWdlUHJpdmF0ZTo6
c2Nyb2xsUmVuZGVyZXIoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgSW50U2l6ZSYgZGVs
dGEpCi17Ci0gICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gcmVuZGVyZXItPmVuY2xvc2luZ0xheWVy
KCk7Ci0gICAgaWYgKCFsYXllcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gVHJ5
IHRvIHNjcm9sbCBsYXllci4KLSAgICBib29sIHJlc3RyaWN0ZWRCeUxpbmVDbGFtcCA9IGZhbHNl
OwotICAgIGlmIChyZW5kZXJlci0+cGFyZW50KCkpCi0gICAgICAgIHJlc3RyaWN0ZWRCeUxpbmVD
bGFtcCA9ICFyZW5kZXJlci0+cGFyZW50KCktPnN0eWxlKCktPmxpbmVDbGFtcCgpLmlzTm9uZSgp
OwotCi0gICAgaWYgKHJlbmRlcmVyLT5oYXNPdmVyZmxvd0NsaXAoKSAmJiAhcmVzdHJpY3RlZEJ5
TGluZUNsYW1wKSB7Ci0gICAgICAgIEludFNpemUgbGF5ZXJEZWx0YSA9IGRlbHRhOwotICAgICAg
ICBJbnRQb2ludCBtYXhPZmZzZXQobGF5ZXItPnNjcm9sbFdpZHRoKCkgLSBsYXllci0+cmVuZGVy
Qm94KCktPmNsaWVudFdpZHRoKCksIGxheWVyLT5zY3JvbGxIZWlnaHQoKSAtIGxheWVyLT5yZW5k
ZXJCb3goKS0+Y2xpZW50SGVpZ2h0KCkpOwotICAgICAgICBJbnRQb2ludCBjdXJyZW50T2Zmc2V0
KGxheWVyLT5zY3JvbGxYT2Zmc2V0KCksIGxheWVyLT5zY3JvbGxZT2Zmc2V0KCkpOwotICAgICAg
ICBhZGp1c3RTY3JvbGxEZWx0YShtYXhPZmZzZXQsIGN1cnJlbnRPZmZzZXQsIGxheWVyRGVsdGEp
OwotICAgICAgICBpZiAoIWxheWVyRGVsdGEuaXNaZXJvKCkpIHsKLSAgICAgICAgICAgIG1faW5S
ZWdpb25TY3JvbGxTdGFydGluZ05vZGUgPSBlbmNsb3NpbmdMYXllck5vZGUobGF5ZXIpOwotICAg
ICAgICAgICAgSW50UG9pbnQgbmV3T2Zmc2V0ID0gY3VycmVudE9mZnNldCArIGxheWVyRGVsdGE7
Ci0gICAgICAgICAgICBsYXllci0+c2Nyb2xsVG9PZmZzZXQodG9TaXplKG5ld09mZnNldCkpOwot
ICAgICAgICAgICAgcmVuZGVyZXItPnJlcGFpbnQodHJ1ZSk7Ci0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHdoaWxlIChsYXllciA9IGxheWVyLT5wYXJl
bnQoKSkgewotICAgICAgICBpZiAoY2FuU2Nyb2xsUmVuZGVyQm94KGxheWVyLT5yZW5kZXJCb3go
KSkpCi0gICAgICAgICAgICByZXR1cm4gc2Nyb2xsUmVuZGVyZXIobGF5ZXItPnJlbmRlckJveCgp
LCBkZWx0YSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBzdGF0aWMgdm9pZCBo
YW5kbGVTY3JvbGxpbmcodW5zaWduZWQgc2hvcnQgY2hhcmFjdGVyLCBXZWJQYWdlUHJpdmF0ZSog
c2Nyb2xsZXIpCiB7CiAgICAgY29uc3QgaW50IHNjcm9sbEZhY3RvciA9IDIwOwpAQCAtNDc3NSwx
NjkgKzQ2NTEsNiBAQCB2b2lkIFdlYlBhZ2U6OnNlbGVjdEF0UG9pbnQoY29uc3QgUGxhdGZvcm06
OkludFBvaW50JiBsb2NhdGlvbikKICAgICBkLT5tX3NlbGVjdGlvbkhhbmRsZXItPnNlbGVjdEF0
UG9pbnQoc2VsZWN0aW9uTG9jYXRpb24pOwogfQogCi0vLyBGSVhNRTogTW92ZSB0byBET01TdXBw
b3J0LgotYm9vbCBXZWJQYWdlUHJpdmF0ZTo6Y2FuU2Nyb2xsSW5uZXJGcmFtZShGcmFtZSogZnJh
bWUpIGNvbnN0Ci17Ci0gICAgaWYgKCFmcmFtZSB8fCAhZnJhbWUtPnZpZXcoKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgLy8gTm90IGhhdmluZyBhbiBvd25lciBlbGVtZW50IG1lYW5z
IHRoYXQgd2UgYXJlIG9uIHRoZSBtYWluZnJhbWUuCi0gICAgaWYgKCFmcmFtZS0+b3duZXJFbGVt
ZW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEFTU0VSVChmcmFtZSAhPSBtX21h
aW5GcmFtZSk7Ci0KLSAgICBJbnRTaXplIHZpc2libGVTaXplID0gZnJhbWUtPnZpZXcoKS0+dmlz
aWJsZUNvbnRlbnRSZWN0KCkuc2l6ZSgpOwotICAgIEludFNpemUgY29udGVudHNTaXplID0gZnJh
bWUtPnZpZXcoKS0+Y29udGVudHNTaXplKCk7Ci0KLSAgICBib29sIGNhbkJlU2Nyb2xsZWQgPSBj
b250ZW50c1NpemUuaGVpZ2h0KCkgPiB2aXNpYmxlU2l6ZS5oZWlnaHQoKSB8fCBjb250ZW50c1Np
emUud2lkdGgoKSA+IHZpc2libGVTaXplLndpZHRoKCk7Ci0KLSAgICAvLyBMZXRzIGFsc28gY29u
c2lkZXIgdGhlICdvdmVyZmxvdy17eCx5fSBwcm9wZXJ0eSBzZXQgZGlyZWN0bHkgdG8gdGhlIHtp
fWZyYW1lIHRhZy4KLSAgICByZXR1cm4gY2FuQmVTY3JvbGxlZCAmJiAoZnJhbWUtPm93bmVyRWxl
bWVudCgpLT5zY3JvbGxpbmdNb2RlKCkgIT0gU2Nyb2xsYmFyQWx3YXlzT2ZmKTsKLX0KLQotLy8g
VGhlIFJlbmRlckJveDo6Y2FuYmVTY3JvbGxlZEFuZEhhc1Njcm9sbGFibGVBcmVhIG1ldGhvZCBy
ZXR1cm5zIHRydWUgZm9yIHRoZQotLy8gZm9sbG93aW5nIHNjZW5hcmlvLCBmb3IgZXhhbXBsZToK
LS8vICgxKSBhIGRpdiB0aGF0IGhhcyBhIHZlcnRpY2FsIG92ZXJmbG93IGJ1dCBubyBob3Jpem9u
dGFsIG92ZXJmbG93Ci0vLyAgICAgd2l0aCBvdmVyZmxvdy15OiBoaWRkZW4gYW5kIG92ZXJmbG93
LXg6IGF1dG8gc2V0LgotLy8gVGhlIHZlcnNpb24gYmVsb3cgZml4ZXMgaXQuCi0vLyBGSVhNRTog
Rml4IFJlbmRlckJveDo6Y2FuQmVTY3JvbGxlZEFuZEhhc1Njcm9sbGFibGVBcmVhIG1ldGhvZCBp
bnN0ZWFkLgotYm9vbCBXZWJQYWdlUHJpdmF0ZTo6Y2FuU2Nyb2xsUmVuZGVyQm94KFJlbmRlckJv
eCogYm94KQotewotICAgIGlmICghYm94IHx8ICFib3gtPmhhc092ZXJmbG93Q2xpcCgpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoYm94LT5zY3JvbGxzT3ZlcmZsb3dYKCkgJiYg
KGJveC0+c2Nyb2xsV2lkdGgoKSAhPSBib3gtPmNsaWVudFdpZHRoKCkpCi0gICAgICAgIHx8IGJv
eC0+c2Nyb2xsc092ZXJmbG93WSgpICYmIChib3gtPnNjcm9sbEhlaWdodCgpICE9IGJveC0+Y2xp
ZW50SGVpZ2h0KCkpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIE5vZGUqIG5vZGUgPSBi
b3gtPm5vZGUoKTsKLSAgICByZXR1cm4gbm9kZSAmJiAobm9kZS0+cmVuZGVyZXJJc0VkaXRhYmxl
KCkgfHwgbm9kZS0+aXNEb2N1bWVudE5vZGUoKSk7Ci19Ci0KLXN0YXRpYyBSZW5kZXJMYXllciog
cGFyZW50TGF5ZXIoUmVuZGVyTGF5ZXIqIGxheWVyKQotewotICAgIEFTU0VSVChsYXllcik7Ci0g
ICAgaWYgKGxheWVyLT5wYXJlbnQoKSkKLSAgICAgICAgcmV0dXJuIGxheWVyLT5wYXJlbnQoKTsK
LQotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBsYXllci0+cmVuZGVyZXIoKTsKLSAgICBp
ZiAocmVuZGVyZXItPmRvY3VtZW50KCkgJiYgcmVuZGVyZXItPmRvY3VtZW50KCktPm93bmVyRWxl
bWVudCgpICYmIHJlbmRlcmVyLT5kb2N1bWVudCgpLT5vd25lckVsZW1lbnQoKS0+cmVuZGVyZXIo
KSkKLSAgICAgICAgcmV0dXJuIHJlbmRlcmVyLT5kb2N1bWVudCgpLT5vd25lckVsZW1lbnQoKS0+
cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKTsKLQotICAgIHJldHVybiAwOwotfQotCi0vLyBG
SVhNRTogTWFrZSBSZW5kZXJMYXllcjo6ZW5jbG9zaW5nRWxlbWVudCBwdWJsaWMgc28gdGhpcyBv
bmUgY2FuIGJlIHJlbW92ZWQuCi1zdGF0aWMgTm9kZSogZW5jbG9zaW5nTGF5ZXJOb2RlKFJlbmRl
ckxheWVyKiBsYXllcikKLXsKLSAgICBmb3IgKFJlbmRlck9iamVjdCogciA9IGxheWVyLT5yZW5k
ZXJlcigpOyByOyByID0gci0+cGFyZW50KCkpIHsKLSAgICAgICAgaWYgKE5vZGUqIGUgPSByLT5u
b2RlKCkpCi0gICAgICAgICAgICByZXR1cm4gZTsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHB1c2hCYWNrSW5SZWdpb25T
Y3JvbGxhYmxlKHN0ZDo6dmVjdG9yPFBsYXRmb3JtOjpTY3JvbGxWaWV3QmFzZSo+JiB2ZWN0b3Is
IEluUmVnaW9uU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGVyLCBXZWJQYWdlUHJpdmF0ZSogd2ViUGFn
ZSkKLXsKLSAgICBBU1NFUlQod2ViUGFnZSk7Ci0gICAgQVNTRVJUKCFzY3JvbGxlci5pc051bGwo
KSk7Ci0KLSAgICBzY3JvbGxlci0+c2V0Q2FuUHJvcGFnYXRlU2Nyb2xsaW5nVG9FbmNsb3NpbmdT
Y3JvbGxhYmxlKCFpc05vblJlbmRlclZpZXdGaXhlZFBvc2l0aW9uZWRDb250YWluZXIoc2Nyb2xs
ZXItPmxheWVyKCkpKTsKLSAgICB2ZWN0b3IucHVzaF9iYWNrKHNjcm9sbGVyKTsKLSAgICBpZiAo
dmVjdG9yLnNpemUoKSA9PSAxKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBVc2UgUmVuZGVyTGF5ZXI6
OnJlbmRlckJveCgpLT5ub2RlKCkgaW5zdGVhZD8KLSAgICAgICAgd2ViUGFnZS0+bV9pblJlZ2lv
blNjcm9sbFN0YXJ0aW5nTm9kZSA9IGVuY2xvc2luZ0xheWVyTm9kZShzY3JvbGxlci0+bGF5ZXIo
KSk7Ci0gICAgfQotfQotCi1zdGQ6OnZlY3RvcjxQbGF0Zm9ybTo6U2Nyb2xsVmlld0Jhc2UqPiBX
ZWJQYWdlUHJpdmF0ZTo6aW5SZWdpb25TY3JvbGxhYmxlQXJlYXNGb3JQb2ludChjb25zdCBQbGF0
Zm9ybTo6SW50UG9pbnQmIHBvaW50KQotewotICAgIHN0ZDo6dmVjdG9yPFBsYXRmb3JtOjpTY3Jv
bGxWaWV3QmFzZSo+IHZhbGlkUmV0dXJuOwotICAgIHN0ZDo6dmVjdG9yPFBsYXRmb3JtOjpTY3Jv
bGxWaWV3QmFzZSo+IGVtcHR5UmV0dXJuOwotCi0gICAgSGl0VGVzdFJlc3VsdCByZXN1bHQgPSBt
X21haW5GcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmhpdFRlc3RSZXN1bHRBdFBvaW50KG1hcEZyb21W
aWV3cG9ydFRvQ29udGVudHMocG9pbnQpLCBmYWxzZSAvKmFsbG93U2hhZG93Q29udGVudCovKTsK
LSAgICBOb2RlKiBub2RlID0gcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpOwotICAgIGlmICgh
bm9kZSkKLSAgICAgICAgcmV0dXJuIGVtcHR5UmV0dXJuOwotCi0gICAgUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7Ci0gICAgLy8gRklYTUU6IFZhbGlkYXRlIHdpdGgg
ZWxlbWVudHMgd2l0aCB2aXNpYmlsaXR5OmhpZGRlbi4KLSAgICBpZiAoIXJlbmRlcmVyKQotICAg
ICAgICByZXR1cm4gZW1wdHlSZXR1cm47Ci0KLSAgICBSZW5kZXJMYXllciogbGF5ZXIgPSByZW5k
ZXJlci0+ZW5jbG9zaW5nTGF5ZXIoKTsKLSAgICBkbyB7Ci0gICAgICAgIFJlbmRlck9iamVjdCog
cmVuZGVyZXIgPSBsYXllci0+cmVuZGVyZXIoKTsKLQotICAgICAgICBpZiAocmVuZGVyZXItPmlz
UmVuZGVyVmlldygpKSB7Ci0gICAgICAgICAgICBpZiAoUmVuZGVyVmlldyogcmVuZGVyVmlldyA9
IHRvUmVuZGVyVmlldyhyZW5kZXJlcikpIHsKLSAgICAgICAgICAgICAgICBGcmFtZVZpZXcqIHZp
ZXcgPSByZW5kZXJWaWV3LT5mcmFtZVZpZXcoKTsKLSAgICAgICAgICAgICAgICBpZiAoIXZpZXcp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlbXB0eVJldHVybjsKLQotICAgICAgICAgICAg
ICAgIGlmIChjYW5TY3JvbGxJbm5lckZyYW1lKHZpZXctPmZyYW1lKCkpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHB1c2hCYWNrSW5SZWdpb25TY3JvbGxhYmxlKHZhbGlkUmV0dXJuLCBuZXcgSW5S
ZWdpb25TY3JvbGxhYmxlQXJlYSh0aGlzLCBsYXllciksIHRoaXMpOwotICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0gZWxzZSBpZiAoY2FuU2Nyb2xsUmVuZGVyQm94KGxheWVyLT5yZW5kZXJCb3goKSkpIHsKLSAg
ICAgICAgICAgIHB1c2hCYWNrSW5SZWdpb25TY3JvbGxhYmxlKHZhbGlkUmV0dXJuLCBuZXcgSW5S
ZWdpb25TY3JvbGxhYmxlQXJlYSh0aGlzLCBsYXllciksIHRoaXMpOwotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJZiB3ZSBydW4gaW50byBhIGZpeCBwb3Np
dGlvbmVkIGxheWVyLCBzZXQgdGhlIGxhc3Qgc2Nyb2xsYWJsZSBpbi1yZWdpb24gb2JqZWN0Ci0g
ICAgICAgIC8vIGFzIG5vdCBhYmxlIHRvIHByb3BhZ2F0ZSBzY3JvbGwgdG8gaXRzIHBhcmVudCBz
Y3JvbGxhYmxlLgotICAgICAgICBpZiAoaXNOb25SZW5kZXJWaWV3Rml4ZWRQb3NpdGlvbmVkQ29u
dGFpbmVyKGxheWVyKSAmJiB2YWxpZFJldHVybi5zaXplKCkpIHsKLSAgICAgICAgICAgIFBsYXRm
b3JtOjpTY3JvbGxWaWV3QmFzZSogZW5kID0gdmFsaWRSZXR1cm4uYmFjaygpOwotICAgICAgICAg
ICAgZW5kLT5zZXRDYW5Qcm9wYWdhdGVTY3JvbGxpbmdUb0VuY2xvc2luZ1Njcm9sbGFibGUoZmFs
c2UpOwotICAgICAgICB9Ci0KLSAgICB9IHdoaWxlIChsYXllciA9IHBhcmVudExheWVyKGxheWVy
KSk7Ci0KLSAgICBpZiAodmFsaWRSZXR1cm4uZW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGVtcHR5
UmV0dXJuOwotCi0gICAgLy8gUG9zdC1jYWxjdWxhdGUgdGhlIHZpc2libGUgd2luZG93IHJlY3Rz
IGluIHJldmVyc2UgaGl0IHRlc3Qgb3JkZXIgc28KLSAgICAvLyB3ZSBhY2NvdW50IGZvciBhbGwg
YW5kIGFueSBjbGlwcGluZyByZWN0cy4KLSAgICBXZWJDb3JlOjpJbnRSZWN0IHJlY3Vyc2l2ZUNs
aXBwaW5nUmVjdChXZWJDb3JlOjpJbnRQb2ludDo6emVybygpLCB0cmFuc2Zvcm1lZFZpZXdwb3J0
U2l6ZSgpKTsKLQotICAgIHN0ZDo6dmVjdG9yPFBsYXRmb3JtOjpTY3JvbGxWaWV3QmFzZSo+Ojpy
ZXZlcnNlX2l0ZXJhdG9yIHJlbmQgPSB2YWxpZFJldHVybi5yZW5kKCk7Ci0gICAgZm9yIChzdGQ6
OnZlY3RvcjxQbGF0Zm9ybTo6U2Nyb2xsVmlld0Jhc2UqPjo6cmV2ZXJzZV9pdGVyYXRvciByaXQg
PSB2YWxpZFJldHVybi5yYmVnaW4oKTsgcml0ICE9IHJlbmQ7ICsrcml0KSB7Ci0KLSAgICAgICAg
SW5SZWdpb25TY3JvbGxhYmxlQXJlYSogY3VyciA9IHN0YXRpY19jYXN0PEluUmVnaW9uU2Nyb2xs
YWJsZUFyZWEqPigqcml0KTsKLSAgICAgICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gY3Vyci0+bGF5
ZXIoKTsKLQotICAgICAgICBpZiAobGF5ZXIgJiYgbGF5ZXItPnJlbmRlcmVyKCktPmlzUmVuZGVy
VmlldygpKSB7IC8vICNkb2N1bWVudCBjYXNlCi0gICAgICAgICAgICBGcmFtZVZpZXcqIHZpZXcg
PSB0b1JlbmRlclZpZXcobGF5ZXItPnJlbmRlcmVyKCkpLT5mcmFtZVZpZXcoKTsKLSAgICAgICAg
ICAgIEFTU0VSVCh2aWV3KTsKLSAgICAgICAgICAgIEFTU0VSVChjYW5TY3JvbGxJbm5lckZyYW1l
KHZpZXctPmZyYW1lKCkpKTsKLQotICAgICAgICAgICAgV2ViQ29yZTo6SW50UmVjdCBmcmFtZVdp
bmRvd1JlY3QgPSBtYXBUb1RyYW5zZm9ybWVkKGdldFJlY3Vyc2l2ZVZpc2libGVXaW5kb3dSZWN0
KHZpZXcpKTsKLSAgICAgICAgICAgIGZyYW1lV2luZG93UmVjdC5pbnRlcnNlY3QocmVjdXJzaXZl
Q2xpcHBpbmdSZWN0KTsKLSAgICAgICAgICAgIGN1cnItPnNldFZpc2libGVXaW5kb3dSZWN0KGZy
YW1lV2luZG93UmVjdCk7Ci0gICAgICAgICAgICByZWN1cnNpdmVDbGlwcGluZ1JlY3QgPSBmcmFt
ZVdpbmRvd1JlY3Q7Ci0KLSAgICAgICAgfSBlbHNlIHsgLy8gUmVuZGVyQm94LWJhc2VkIGVsZW1l
bnRzIGNhc2UgKHNjcm9sbGFibGUgYm94ZXMgKGRpdidzLCBwJ3MsIHRleHRhcmVhJ3MsIGV0Yykp
LgotCi0gICAgICAgICAgICBSZW5kZXJCb3gqIGJveCA9IGxheWVyLT5yZW5kZXJCb3goKTsKLSAg
ICAgICAgICAgIEFTU0VSVChib3gpOwotICAgICAgICAgICAgQVNTRVJUKGNhblNjcm9sbFJlbmRl
ckJveChib3gpKTsKLQotICAgICAgICAgICAgV2ViQ29yZTo6SW50UmVjdCB2aXNpYmxlV2luZG93
UmVjdCA9IGJveC0+YWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0KCk7Ci0gICAgICAgICAgICB2
aXNpYmxlV2luZG93UmVjdCA9IGJveC0+ZnJhbWUoKS0+dmlldygpLT5jb250ZW50c1RvV2luZG93
KHZpc2libGVXaW5kb3dSZWN0KTsKLSAgICAgICAgICAgIHZpc2libGVXaW5kb3dSZWN0ID0gbWFw
VG9UcmFuc2Zvcm1lZCh2aXNpYmxlV2luZG93UmVjdCk7Ci0gICAgICAgICAgICB2aXNpYmxlV2lu
ZG93UmVjdC5pbnRlcnNlY3QocmVjdXJzaXZlQ2xpcHBpbmdSZWN0KTsKLQotICAgICAgICAgICAg
Y3Vyci0+c2V0VmlzaWJsZVdpbmRvd1JlY3QodmlzaWJsZVdpbmRvd1JlY3QpOwotICAgICAgICAg
ICAgcmVjdXJzaXZlQ2xpcHBpbmdSZWN0ID0gdmlzaWJsZVdpbmRvd1JlY3Q7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICByZXR1cm4gdmFsaWRSZXR1cm47Ci19Ci0KIEJhY2tpbmdTdG9yZSogV2Vi
UGFnZTo6YmFja2luZ1N0b3JlKCkgY29uc3QKIHsKICAgICByZXR1cm4gZC0+bV9iYWNraW5nU3Rv
cmU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2VfcC5o
IGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJQYWdlX3AuaAppbmRleCBjZWY1M2Y3
Li5lOWQzY2VjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBh
Z2VfcC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFnZV9wLmgKQEAg
LTIyLDYgKzIyLDggQEAKICNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKICNpbmNsdWRlICJJbnNw
ZWN0b3JDbGllbnRCbGFja0JlcnJ5LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yT3ZlcmxheS5oIgor
I2luY2x1ZGUgIkluc3BlY3Rvck92ZXJsYXkuaCIKKyNpbmNsdWRlICJJblJlZ2lvblNjcm9sbGVy
LmgiCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogI2luY2x1ZGUgIkdMRVMyQ29u
dGV4dC5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXIuaCIKQEAgLTE0Myw3ICsxNDUsNiBAQCBw
dWJsaWM6CiAgICAgYm9vbCBzY3JvbGxCeShpbnQgZGVsdGFYLCBpbnQgZGVsdGFZLCBib29sIHNj
cm9sbE1haW5GcmFtZSA9IHRydWUpOwogCiAgICAgdm9pZCBlbnF1ZXVlUmVuZGVyaW5nT2ZDbGlw
cGVkQ29udGVudE9mU2Nyb2xsYWJsZU5vZGVBZnRlckluUmVnaW9uU2Nyb2xsaW5nKFdlYkNvcmU6
Ok5vZGUqKTsKLSAgICBzdGQ6OnZlY3RvcjxQbGF0Zm9ybTo6U2Nyb2xsVmlld0Jhc2UqPiBpblJl
Z2lvblNjcm9sbGFibGVBcmVhc0ZvclBvaW50KGNvbnN0IFBsYXRmb3JtOjpJbnRQb2ludCYpOwog
ICAgIHZvaWQgbm90aWZ5SW5SZWdpb25TY3JvbGxTdGF0dXNDaGFuZ2VkKGJvb2wgc3RhdHVzKTsK
ICAgICB2b2lkIHNldFNjcm9sbE9yaWdpblBvaW50KGNvbnN0IFBsYXRmb3JtOjpJbnRQb2ludCYp
OwogICAgIHZvaWQgc2V0SGFzSW5SZWdpb25TY3JvbGxhYmxlQXJlYXMoYm9vbCk7CkBAIC0zMzAs
MTMgKzMzMSw2IEBAIHB1YmxpYzoKICAgICBXZWJDb3JlOjpGcmFtZSogZm9jdXNlZE9yTWFpbkZy
YW1lKCkgY29uc3Q7CiAgICAgV2ViQ29yZTo6RnJhbWUqIG1haW5GcmFtZSgpIGNvbnN0IHsgcmV0
dXJuIG1fbWFpbkZyYW1lOyB9CiAKLSAgICBib29sIHNjcm9sbE5vZGVSZWN1cnNpdmVseShXZWJD
b3JlOjpOb2RlKiBvcmlnaW5hbE5vZGUsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGRlbHRhKTsK
LSAgICBib29sIHNjcm9sbFJlbmRlcmVyKFdlYkNvcmU6OlJlbmRlck9iamVjdCogcmVuZGVyZXIs
IGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGRlbHRhKTsKLSAgICB2b2lkIGFkanVzdFNjcm9sbERl
bHRhKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBtYXhPZmZzZXQsIGNvbnN0IFdlYkNvcmU6Oklu
dFBvaW50JiBjdXJyZW50T2Zmc2V0LCBXZWJDb3JlOjpJbnRTaXplJiBkZWx0YSkgY29uc3Q7Ci0K
LSAgICBib29sIGNhblNjcm9sbFJlbmRlckJveChXZWJDb3JlOjpSZW5kZXJCb3gqKTsKLSAgICBi
b29sIGNhblNjcm9sbElubmVyRnJhbWUoV2ViQ29yZTo6RnJhbWUqKSBjb25zdDsKLQogI2lmIEVO
QUJMRShFVkVOVF9NT0RFX01FVEFUQUdTKQogICAgIHZvaWQgZGlkUmVjZWl2ZUN1cnNvckV2ZW50
TW9kZShXZWJDb3JlOjpDdXJzb3JFdmVudE1vZGUpOwogICAgIHZvaWQgZGlkUmVjZWl2ZVRvdWNo
RXZlbnRNb2RlKFdlYkNvcmU6OlRvdWNoRXZlbnRNb2RlKTsKQEAgLTU1Niw3ICs1NTAsNyBAQCBw
dWJsaWM6CiAKICAgICBIYXNoU2V0PFdlYkNvcmU6OlBsdWdpblZpZXcqPiBtX3BsdWdpblZpZXdz
OwogCi0gICAgUmVmUHRyPFdlYkNvcmU6Ok5vZGU+IG1faW5SZWdpb25TY3JvbGxTdGFydGluZ05v
ZGU7CisgICAgT3duUHRyPEluUmVnaW9uU2Nyb2xsZXI+IG1faW5SZWdpb25TY3JvbGxlcjsKIAog
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICBib29sIG1faXNBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nQWN0aXZlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9DaGFuZ2VMb2cKaW5kZXggZjJi
Y2MxYS4uMTYzYmI4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
NTUgQEAKKzIwMTItMDgtMDEgIEFudG9uaW8gR29tZXMgIDxhZ29tZXNAcmltLmNvbT4KKyAKKyAg
ICAgICAgW0JsYWNrQmVycnldIEltcGxlbWVudCBJblJlZ2lvblNjcm9sbGVyIGNsYXNzIGFzIGEg
aW4tcmVnaW9uIHNjcm9sbCBjb250cm9sbGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05Mjg4OQorICAgICAgICBQUiAjMTg2NTg3CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZWQgYWxsIGluLXJlZ2lv
biBzY3JvbGxpbmcgY29kZSBvdXQgb2YgV2ViUGFnZVByaXZhdGUgdG8gdGhlIGp1c3QKKyAgICAg
ICAgY3JlYXRlZCBJblJlZ2lvblNjcm9sbGVyIGNsYXNzLiBUaGlzIGNsYXNzIGFpbXMgdG86CisK
KyAgICAgICAgMSkgQ2VudHJhbGl6ZSBhbGwgaW4tcmVnaW9uIHNjcm9sbCBjb2RlIGFuZCBjbGVh
biB1cCBXZWJQYWdlUHJpdmF0ZSBhcyBhIGNvbnNlcXVlbmNlLgorICAgICAgICAyKSBCZSB0aGUg
YmFzZXMgdG8gYWRkIFVJL0NvbXBvc2l0aW5nIHRocmVhZCBkcml2ZW4gc2Nyb2xscyB0byBpbi1y
ZWdpb24uCisKKyAgICAgICAgVGhlIHBhdGNoIGRvZXMgbm90IGNoYW5nZSBhbnkgZnVuY3Rpb25h
bGxpdHkgY2hhbmdlLgorCisgICAgICAgICogQXBpL1dlYlBhZ2UuY3BwOgorICAgICAgICAoQmxh
Y2tCZXJyeTo6V2ViS2l0OjpXZWJQYWdlUHJpdmF0ZTo6V2ViUGFnZVByaXZhdGUpOgorICAgICAg
ICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJQYWdlUHJpdmF0ZTo6aW5pdCk6CisgICAgICAgIChC
bGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2VQcml2YXRlOjpzY3JvbGxCeSk6CisgICAgICAgIChC
bGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2VQcml2YXRlOjpub3RpZnlJblJlZ2lvblNjcm9sbFN0
YXR1c0NoYW5nZWQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJQYWdlUHJpdmF0
ZTo6Y2xlYXJEb2N1bWVudERhdGEpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJQ
YWdlUHJpdmF0ZTo6c2V0U2Nyb2xsT3JpZ2luUG9pbnQpOgorICAgICAgICAqIEFwaS9XZWJQYWdl
X3AuaDoKKyAgICAgICAgKFdlYlBhZ2VQcml2YXRlKToKKyAgICAgICAgKiBXZWJLaXRTdXBwb3J0
L0luUmVnaW9uU2Nyb2xsYWJsZUFyZWEuY3BwOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0
OjpJblJlZ2lvblNjcm9sbGFibGVBcmVhOjpsYXllcik6CisgICAgICAgICogV2ViS2l0U3VwcG9y
dC9JblJlZ2lvblNjcm9sbGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAg
ICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpjYW5TY3JvbGxJbm5lckZyYW1lKToKKyAgICAgICAgKEJs
YWNrQmVycnk6OldlYktpdDo6Y2FuU2Nyb2xsUmVuZGVyQm94KToKKyAgICAgICAgKEJsYWNrQmVy
cnk6OldlYktpdDo6cGFyZW50TGF5ZXIpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0Ojpl
bmNsb3NpbmdMYXllck5vZGUpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0Ojppc05vblJl
bmRlclZpZXdGaXhlZFBvc2l0aW9uZWRDb250YWluZXIpOgorICAgICAgICAoQmxhY2tCZXJyeTo6
V2ViS2l0OjpwdXNoQmFja0luUmVnaW9uU2Nyb2xsYWJsZSk6CisgICAgICAgIChCbGFja0JlcnJ5
OjpXZWJLaXQ6OkluUmVnaW9uU2Nyb2xsZXI6OkluUmVnaW9uU2Nyb2xsZXIpOgorICAgICAgICAo
QmxhY2tCZXJyeTo6V2ViS2l0OjpJblJlZ2lvblNjcm9sbGVyOjpzZXROb2RlKToKKyAgICAgICAg
KEJsYWNrQmVycnk6OldlYktpdDo6SW5SZWdpb25TY3JvbGxlcjo6bm9kZSk6CisgICAgICAgIChC
bGFja0JlcnJ5OjpXZWJLaXQ6OkluUmVnaW9uU2Nyb2xsZXI6OnJlc2V0KToKKyAgICAgICAgKEJs
YWNrQmVycnk6OldlYktpdDo6SW5SZWdpb25TY3JvbGxlcjo6aXNOdWxsKToKKyAgICAgICAgKEJs
YWNrQmVycnk6OldlYktpdDo6SW5SZWdpb25TY3JvbGxlcjo6c2Nyb2xsQnkpOgorICAgICAgICAo
QmxhY2tCZXJyeTo6V2ViS2l0OjpJblJlZ2lvblNjcm9sbGVyOjppblJlZ2lvblNjcm9sbGFibGVB
cmVhc0ZvclBvaW50KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6SW5SZWdpb25TY3Jv
bGxlcjo6c2Nyb2xsTm9kZVJlY3Vyc2l2ZWx5KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktp
dDo6SW5SZWdpb25TY3JvbGxlcjo6c2Nyb2xsUmVuZGVyZXIpOgorICAgICAgICAoQmxhY2tCZXJy
eTo6V2ViS2l0OjpJblJlZ2lvblNjcm9sbGVyOjphZGp1c3RTY3JvbGxEZWx0YSk6CisgICAgICAg
ICogV2ViS2l0U3VwcG9ydC9JblJlZ2lvblNjcm9sbGVyLmg6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoSW5SZWdpb25TY3JvbGxlcik6Cisg
ICAgICAgICogV2ViS2l0U3VwcG9ydC9Ub3VjaEV2ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChC
bGFja0JlcnJ5OjpXZWJLaXQ6OlRvdWNoRXZlbnRIYW5kbGVyOjpkcmF3VGFwSGlnaGxpZ2h0KToK
KwogMjAxMi0wOC0wMSAgSmFja3kgSmlhbmcgIDx6aGFqaWFuZ0ByaW0uY29tPgogCiAgICAgICAg
IFtCbGFja0JlcnJ5XSBBbGxvdyBjbGllbnQgc2lkZSB0byBhZGQgYW5kIHJlbW92ZSBvcmlnaW4g
YWNjZXNzIHdoaXRlbGlzdCBlbnRyaWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNr
YmVycnkvV2ViS2l0U3VwcG9ydC9JblJlZ2lvblNjcm9sbGFibGVBcmVhLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0luUmVnaW9uU2Nyb2xsYWJsZUFyZWEuY3Bw
CmluZGV4IGY1OGNhZTguLjc2YTk4MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxhY2ti
ZXJyeS9XZWJLaXRTdXBwb3J0L0luUmVnaW9uU2Nyb2xsYWJsZUFyZWEuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0luUmVnaW9uU2Nyb2xsYWJsZUFyZWEu
Y3BwCkBAIC0yMCw3ICsyMCw2IEBACiAjaW5jbHVkZSAiSW5SZWdpb25TY3JvbGxhYmxlQXJlYS5o
IgogCiAjaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2lu
Y2x1ZGUgIlJlbmRlckJveC5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAi
UmVuZGVyT2JqZWN0LmgiCkBAIC0xMDQsNiArMTAzLDYgQEAgUmVuZGVyTGF5ZXIqIEluUmVnaW9u
U2Nyb2xsYWJsZUFyZWE6OmxheWVyKCkgY29uc3QKICAgICBBU1NFUlQoIW1faXNOdWxsKTsKICAg
ICByZXR1cm4gbV9sYXllcjsKIH0KLX0KIAogfQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5SZWdpb25TY3JvbGxlci5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JblJlZ2lvblNjcm9sbGVyLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjU0ZDk3Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5SZWdpb25TY3JvbGxl
ci5jcHAKQEAgLTAsMCArMSwzNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIg
UmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMw
MSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluUmVnaW9uU2Ny
b2xsZXIuaCIKKworI2luY2x1ZGUgIkJhY2tpbmdTdG9yZUNsaWVudC5oIgorI2luY2x1ZGUgIkZy
YW1lLmgiCisjaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCisjaW5jbHVkZSAiSGl0
VGVzdFJlc3VsdC5oIgorI2luY2x1ZGUgIkluUmVnaW9uU2Nyb2xsYWJsZUFyZWEuaCIKKyNpbmNs
dWRlICJSZW5kZXJCb3guaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJl
bmRlck9iamVjdC5oIgorI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKKyNpbmNsdWRlICJXZWJQYWdl
X3AuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBCbGFja0JlcnJ5
IHsKK25hbWVzcGFjZSBXZWJLaXQgeworCitzdGF0aWMgYm9vbCBjYW5TY3JvbGxJbm5lckZyYW1l
KEZyYW1lKiBmcmFtZSkKK3sKKyAgICBpZiAoIWZyYW1lIHx8ICFmcmFtZS0+dmlldygpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBOb3QgaGF2aW5nIGFuIG93bmVyIGVsZW1lbnQg
bWVhbnMgdGhhdCB3ZSBhcmUgb24gdGhlIG1haW5mcmFtZS4KKyAgICBpZiAoIWZyYW1lLT5vd25l
ckVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQVNTRVJUKGZyYW1lICE9
IGZyYW1lLT5wYWdlKCktPm1haW5GcmFtZSgpKTsKKworICAgIEludFNpemUgdmlzaWJsZVNpemUg
PSBmcmFtZS0+dmlldygpLT52aXNpYmxlQ29udGVudFJlY3QoKS5zaXplKCk7CisgICAgSW50U2l6
ZSBjb250ZW50c1NpemUgPSBmcmFtZS0+dmlldygpLT5jb250ZW50c1NpemUoKTsKKworICAgIGJv
b2wgY2FuQmVTY3JvbGxlZCA9IGNvbnRlbnRzU2l6ZS5oZWlnaHQoKSA+IHZpc2libGVTaXplLmhl
aWdodCgpIHx8IGNvbnRlbnRzU2l6ZS53aWR0aCgpID4gdmlzaWJsZVNpemUud2lkdGgoKTsKKwor
ICAgIC8vIExldHMgYWxzbyBjb25zaWRlciB0aGUgJ292ZXJmbG93LXt4LHl9IHByb3BlcnR5IHNl
dCBkaXJlY3RseSB0byB0aGUge2l9ZnJhbWUgdGFnLgorICAgIHJldHVybiBjYW5CZVNjcm9sbGVk
ICYmIChmcmFtZS0+b3duZXJFbGVtZW50KCktPnNjcm9sbGluZ01vZGUoKSAhPSBTY3JvbGxiYXJB
bHdheXNPZmYpOworfQorCisvLyBUaGUgUmVuZGVyQm94OjpjYW5iZVNjcm9sbGVkQW5kSGFzU2Ny
b2xsYWJsZUFyZWEgbWV0aG9kIHJldHVybnMgdHJ1ZSBmb3IgdGhlCisvLyBmb2xsb3dpbmcgc2Nl
bmFyaW8sIGZvciBleGFtcGxlOgorLy8gKDEpIGEgZGl2IHRoYXQgaGFzIGEgdmVydGljYWwgb3Zl
cmZsb3cgYnV0IG5vIGhvcml6b250YWwgb3ZlcmZsb3cKKy8vICAgICB3aXRoIG92ZXJmbG93LXk6
IGhpZGRlbiBhbmQgb3ZlcmZsb3cteDogYXV0byBzZXQuCisvLyBUaGUgdmVyc2lvbiBiZWxvdyBm
aXhlcyBpdC4KKy8vIEZJWE1FOiBGaXggUmVuZGVyQm94OjpjYW5CZVNjcm9sbGVkQW5kSGFzU2Ny
b2xsYWJsZUFyZWEgbWV0aG9kIGluc3RlYWQuCitzdGF0aWMgYm9vbCBjYW5TY3JvbGxSZW5kZXJC
b3goUmVuZGVyQm94KiBib3gpCit7CisgICAgaWYgKCFib3ggfHwgIWJveC0+aGFzT3ZlcmZsb3dD
bGlwKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChib3gtPnNjcm9sbHNPdmVy
Zmxvd1goKSAmJiAoYm94LT5zY3JvbGxXaWR0aCgpICE9IGJveC0+Y2xpZW50V2lkdGgoKSkKKyAg
ICAgICAgfHwgYm94LT5zY3JvbGxzT3ZlcmZsb3dZKCkgJiYgKGJveC0+c2Nyb2xsSGVpZ2h0KCkg
IT0gYm94LT5jbGllbnRIZWlnaHQoKSkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgTm9k
ZSogbm9kZSA9IGJveC0+bm9kZSgpOworICAgIHJldHVybiBub2RlICYmIChub2RlLT5yZW5kZXJl
cklzRWRpdGFibGUoKSB8fCBub2RlLT5pc0RvY3VtZW50Tm9kZSgpKTsKK30KKworc3RhdGljIFJl
bmRlckxheWVyKiBwYXJlbnRMYXllcihSZW5kZXJMYXllciogbGF5ZXIpCit7CisgICAgQVNTRVJU
KGxheWVyKTsKKyAgICBpZiAobGF5ZXItPnBhcmVudCgpKQorICAgICAgICByZXR1cm4gbGF5ZXIt
PnBhcmVudCgpOworCisgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGxheWVyLT5yZW5kZXJl
cigpOworICAgIGlmIChyZW5kZXJlci0+ZG9jdW1lbnQoKSAmJiByZW5kZXJlci0+ZG9jdW1lbnQo
KS0+b3duZXJFbGVtZW50KCkgJiYgcmVuZGVyZXItPmRvY3VtZW50KCktPm93bmVyRWxlbWVudCgp
LT5yZW5kZXJlcigpKQorICAgICAgICByZXR1cm4gcmVuZGVyZXItPmRvY3VtZW50KCktPm93bmVy
RWxlbWVudCgpLT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpOworCisgICAgcmV0dXJuIDA7
Cit9CisKKy8vIEZJWE1FOiBNYWtlIFJlbmRlckxheWVyOjplbmNsb3NpbmdFbGVtZW50IHB1Ymxp
YyBzbyB0aGlzIG9uZSBjYW4gYmUgcmVtb3ZlZC4KK3N0YXRpYyBOb2RlKiBlbmNsb3NpbmdMYXll
ck5vZGUoUmVuZGVyTGF5ZXIqIGxheWVyKQoreworICAgIGZvciAoUmVuZGVyT2JqZWN0KiByID0g
bGF5ZXItPnJlbmRlcmVyKCk7IHI7IHIgPSByLT5wYXJlbnQoKSkgeworICAgICAgICBpZiAoTm9k
ZSogZSA9IHItPm5vZGUoKSkKKyAgICAgICAgICAgIHJldHVybiBlOworICAgIH0KKyAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGJvb2wgaXNOb25S
ZW5kZXJWaWV3Rml4ZWRQb3NpdGlvbmVkQ29udGFpbmVyKFJlbmRlckxheWVyKiBsYXllcikKK3sK
KyAgICBSZW5kZXJPYmplY3QqIG8gPSBsYXllci0+cmVuZGVyZXIoKTsKKyAgICBpZiAoby0+aXNS
ZW5kZXJWaWV3KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBvLT5pc1Bv
c2l0aW9uZWQoKSAmJiBvLT5zdHlsZSgpLT5wb3NpdGlvbigpID09IEZpeGVkUG9zaXRpb247Cit9
CisKK3N0YXRpYyB2b2lkIHB1c2hCYWNrSW5SZWdpb25TY3JvbGxhYmxlKHN0ZDo6dmVjdG9yPFBs
YXRmb3JtOjpTY3JvbGxWaWV3QmFzZSo+JiB2ZWN0b3IsIEluUmVnaW9uU2Nyb2xsYWJsZUFyZWEq
IHNjcm9sbGFibGVBcmVhLCBJblJlZ2lvblNjcm9sbGVyKiBzY3JvbGxlcikKK3sKKyAgICBBU1NF
UlQod2ViUGFnZSk7CisgICAgQVNTRVJUKCFzY3JvbGxhYmxlQXJlYS0+aXNOdWxsKCkpOworCisg
ICAgc2Nyb2xsYWJsZUFyZWEtPnNldENhblByb3BhZ2F0ZVNjcm9sbGluZ1RvRW5jbG9zaW5nU2Ny
b2xsYWJsZSghaXNOb25SZW5kZXJWaWV3Rml4ZWRQb3NpdGlvbmVkQ29udGFpbmVyKHNjcm9sbGFi
bGVBcmVhLT5sYXllcigpKSk7CisgICAgdmVjdG9yLnB1c2hfYmFjayhzY3JvbGxhYmxlQXJlYSk7
CisgICAgaWYgKHZlY3Rvci5zaXplKCkgPT0gMSkgeworICAgICAgICAvLyBGSVhNRTogVXNlIFJl
bmRlckxheWVyOjpyZW5kZXJCb3goKS0+bm9kZSgpIGluc3RlYWQ/CisgICAgICAgIHNjcm9sbGVy
LT5zZXROb2RlKGVuY2xvc2luZ0xheWVyTm9kZShzY3JvbGxhYmxlQXJlYS0+bGF5ZXIoKSkpOwor
ICAgIH0KK30KKworSW5SZWdpb25TY3JvbGxlcjo6SW5SZWdpb25TY3JvbGxlcihXZWJQYWdlUHJp
dmF0ZSogd2ViUGFnZVByaXZhdGUpCisgICAgOiBtX3dlYlBhZ2Uod2ViUGFnZVByaXZhdGUpCit7
Cit9CisKK3ZvaWQgSW5SZWdpb25TY3JvbGxlcjo6c2V0Tm9kZShXZWJDb3JlOjpOb2RlKiBub2Rl
KQoreworICAgIG1faW5SZWdpb25TY3JvbGxTdGFydGluZ05vZGUgPSBub2RlOworfQorCitXZWJD
b3JlOjpOb2RlKiBJblJlZ2lvblNjcm9sbGVyOjpub2RlKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9pblJlZ2lvblNjcm9sbFN0YXJ0aW5nTm9kZS5nZXQoKTsKK30KKwordm9pZCBJblJlZ2lvblNj
cm9sbGVyOjpyZXNldCgpCit7CisgICAgc2V0Tm9kZSgwKTsKK30KKworYm9vbCBJblJlZ2lvblNj
cm9sbGVyOjpoYXNOb2RlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gISFtX2luUmVnaW9uU2Nyb2xs
U3RhcnRpbmdOb2RlOworfQorCitib29sIEluUmVnaW9uU2Nyb2xsZXI6OmNhblNjcm9sbCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGhhc05vZGUoKTsKK30KKworYm9vbCBJblJlZ2lvblNjcm9sbGVy
OjpzY3JvbGxCeShjb25zdCBQbGF0Zm9ybTo6SW50U2l6ZSYgZGVsdGEpCit7CisgICAgaWYgKCFj
YW5TY3JvbGwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHNjcm9sbE5v
ZGVSZWN1cnNpdmVseShub2RlKCksIGRlbHRhKTsKK30KKworc3RkOjp2ZWN0b3I8UGxhdGZvcm06
OlNjcm9sbFZpZXdCYXNlKj4gSW5SZWdpb25TY3JvbGxlcjo6aW5SZWdpb25TY3JvbGxhYmxlQXJl
YXNGb3JQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQpCit7CisgICAgc3RkOjp2
ZWN0b3I8UGxhdGZvcm06OlNjcm9sbFZpZXdCYXNlKj4gdmFsaWRSZXR1cm47CisgICAgc3RkOjp2
ZWN0b3I8UGxhdGZvcm06OlNjcm9sbFZpZXdCYXNlKj4gZW1wdHlSZXR1cm47CisKKyAgICBIaXRU
ZXN0UmVzdWx0IHJlc3VsdCA9IG1fd2ViUGFnZS0+bV9tYWluRnJhbWUtPmV2ZW50SGFuZGxlcigp
LT5oaXRUZXN0UmVzdWx0QXRQb2ludChtX3dlYlBhZ2UtPm1hcEZyb21WaWV3cG9ydFRvQ29udGVu
dHMocG9pbnQpLCBmYWxzZSAvKmFsbG93U2hhZG93Q29udGVudCovKTsKKyAgICBOb2RlKiBub2Rl
ID0gcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpOworICAgIGlmICghbm9kZSB8fCAhbm9kZS0+
cmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJuIGVtcHR5UmV0dXJuOworCisgICAgUmVuZGVyTGF5
ZXIqIGxheWVyID0gbm9kZS0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKTsKKyAgICBkbyB7
CisgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBsYXllci0+cmVuZGVyZXIoKTsKKwor
ICAgICAgICBpZiAocmVuZGVyZXItPmlzUmVuZGVyVmlldygpKSB7CisgICAgICAgICAgICBpZiAo
UmVuZGVyVmlldyogcmVuZGVyVmlldyA9IHRvUmVuZGVyVmlldyhyZW5kZXJlcikpIHsKKyAgICAg
ICAgICAgICAgICBGcmFtZVZpZXcqIHZpZXcgPSByZW5kZXJWaWV3LT5mcmFtZVZpZXcoKTsKKyAg
ICAgICAgICAgICAgICBpZiAoIXZpZXcpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbXB0
eVJldHVybjsKKworICAgICAgICAgICAgICAgIGlmIChjYW5TY3JvbGxJbm5lckZyYW1lKHZpZXct
PmZyYW1lKCkpKSB7CisgICAgICAgICAgICAgICAgICAgIHB1c2hCYWNrSW5SZWdpb25TY3JvbGxh
YmxlKHZhbGlkUmV0dXJuLCBuZXcgSW5SZWdpb25TY3JvbGxhYmxlQXJlYShtX3dlYlBhZ2UsIGxh
eWVyKSwgdGhpcyk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChjYW5TY3JvbGxSZW5kZXJC
b3gobGF5ZXItPnJlbmRlckJveCgpKSkgeworICAgICAgICAgICAgcHVzaEJhY2tJblJlZ2lvblNj
cm9sbGFibGUodmFsaWRSZXR1cm4sIG5ldyBJblJlZ2lvblNjcm9sbGFibGVBcmVhKG1fd2ViUGFn
ZSwgbGF5ZXIpLCB0aGlzKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gSWYgd2UgcnVuIGludG8gYSBmaXggcG9zaXRpb25lZCBsYXllciwgc2V0IHRoZSBs
YXN0IHNjcm9sbGFibGUgaW4tcmVnaW9uIG9iamVjdAorICAgICAgICAvLyBhcyBub3QgYWJsZSB0
byBwcm9wYWdhdGUgc2Nyb2xsIHRvIGl0cyBwYXJlbnQgc2Nyb2xsYWJsZS4KKyAgICAgICAgaWYg
KGlzTm9uUmVuZGVyVmlld0ZpeGVkUG9zaXRpb25lZENvbnRhaW5lcihsYXllcikgJiYgdmFsaWRS
ZXR1cm4uc2l6ZSgpKSB7CisgICAgICAgICAgICBQbGF0Zm9ybTo6U2Nyb2xsVmlld0Jhc2UqIGVu
ZCA9IHZhbGlkUmV0dXJuLmJhY2soKTsKKyAgICAgICAgICAgIGVuZC0+c2V0Q2FuUHJvcGFnYXRl
U2Nyb2xsaW5nVG9FbmNsb3NpbmdTY3JvbGxhYmxlKGZhbHNlKTsKKyAgICAgICAgfQorCisgICAg
fSB3aGlsZSAobGF5ZXIgPSBwYXJlbnRMYXllcihsYXllcikpOworCisgICAgaWYgKHZhbGlkUmV0
dXJuLmVtcHR5KCkpCisgICAgICAgIHJldHVybiBlbXB0eVJldHVybjsKKworICAgIC8vIFBvc3Qt
Y2FsY3VsYXRlIHRoZSB2aXNpYmxlIHdpbmRvdyByZWN0cyBpbiByZXZlcnNlIGhpdCB0ZXN0IG9y
ZGVyIHNvCisgICAgLy8gd2UgYWNjb3VudCBmb3IgYWxsIGFuZCBhbnkgY2xpcHBpbmcgcmVjdHMu
CisgICAgV2ViQ29yZTo6SW50UmVjdCByZWN1cnNpdmVDbGlwcGluZ1JlY3QoV2ViQ29yZTo6SW50
UG9pbnQ6Onplcm8oKSwgbV93ZWJQYWdlLT50cmFuc2Zvcm1lZFZpZXdwb3J0U2l6ZSgpKTsKKwor
ICAgIHN0ZDo6dmVjdG9yPFBsYXRmb3JtOjpTY3JvbGxWaWV3QmFzZSo+OjpyZXZlcnNlX2l0ZXJh
dG9yIHJlbmQgPSB2YWxpZFJldHVybi5yZW5kKCk7CisgICAgZm9yIChzdGQ6OnZlY3RvcjxQbGF0
Zm9ybTo6U2Nyb2xsVmlld0Jhc2UqPjo6cmV2ZXJzZV9pdGVyYXRvciByaXQgPSB2YWxpZFJldHVy
bi5yYmVnaW4oKTsgcml0ICE9IHJlbmQ7ICsrcml0KSB7CisKKyAgICAgICAgSW5SZWdpb25TY3Jv
bGxhYmxlQXJlYSogY3VyciA9IHN0YXRpY19jYXN0PEluUmVnaW9uU2Nyb2xsYWJsZUFyZWEqPigq
cml0KTsKKyAgICAgICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gY3Vyci0+bGF5ZXIoKTsKKworICAg
ICAgICBpZiAobGF5ZXIgJiYgbGF5ZXItPnJlbmRlcmVyKCktPmlzUmVuZGVyVmlldygpKSB7IC8v
ICNkb2N1bWVudCBjYXNlCisgICAgICAgICAgICBGcmFtZVZpZXcqIHZpZXcgPSB0b1JlbmRlclZp
ZXcobGF5ZXItPnJlbmRlcmVyKCkpLT5mcmFtZVZpZXcoKTsKKyAgICAgICAgICAgIEFTU0VSVCh2
aWV3KTsKKyAgICAgICAgICAgIEFTU0VSVChjYW5TY3JvbGxJbm5lckZyYW1lKHZpZXctPmZyYW1l
KCkpKTsKKworICAgICAgICAgICAgV2ViQ29yZTo6SW50UmVjdCBmcmFtZVdpbmRvd1JlY3QgPSBt
X3dlYlBhZ2UtPm1hcFRvVHJhbnNmb3JtZWQobV93ZWJQYWdlLT5nZXRSZWN1cnNpdmVWaXNpYmxl
V2luZG93UmVjdCh2aWV3KSk7CisgICAgICAgICAgICBmcmFtZVdpbmRvd1JlY3QuaW50ZXJzZWN0
KHJlY3Vyc2l2ZUNsaXBwaW5nUmVjdCk7CisgICAgICAgICAgICBjdXJyLT5zZXRWaXNpYmxlV2lu
ZG93UmVjdChmcmFtZVdpbmRvd1JlY3QpOworICAgICAgICAgICAgcmVjdXJzaXZlQ2xpcHBpbmdS
ZWN0ID0gZnJhbWVXaW5kb3dSZWN0OworCisgICAgICAgIH0gZWxzZSB7IC8vIFJlbmRlckJveC1i
YXNlZCBlbGVtZW50cyBjYXNlIChzY3JvbGxhYmxlIGJveGVzIChkaXYncywgcCdzLCB0ZXh0YXJl
YSdzLCBldGMpKS4KKworICAgICAgICAgICAgUmVuZGVyQm94KiBib3ggPSBsYXllci0+cmVuZGVy
Qm94KCk7CisgICAgICAgICAgICBBU1NFUlQoYm94KTsKKyAgICAgICAgICAgIEFTU0VSVChjYW5T
Y3JvbGxSZW5kZXJCb3goYm94KSk7CisKKyAgICAgICAgICAgIFdlYkNvcmU6OkludFJlY3Qgdmlz
aWJsZVdpbmRvd1JlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGJveC0+YWJzb2x1dGVDbGlwcGVkT3Zl
cmZsb3dSZWN0KCkpOworICAgICAgICAgICAgdmlzaWJsZVdpbmRvd1JlY3QgPSBib3gtPmZyYW1l
KCktPnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyh2aXNpYmxlV2luZG93UmVjdCk7CisgICAgICAg
ICAgICB2aXNpYmxlV2luZG93UmVjdCA9IG1fd2ViUGFnZS0+bWFwVG9UcmFuc2Zvcm1lZCh2aXNp
YmxlV2luZG93UmVjdCk7CisgICAgICAgICAgICB2aXNpYmxlV2luZG93UmVjdC5pbnRlcnNlY3Qo
cmVjdXJzaXZlQ2xpcHBpbmdSZWN0KTsKKworICAgICAgICAgICAgY3Vyci0+c2V0VmlzaWJsZVdp
bmRvd1JlY3QodmlzaWJsZVdpbmRvd1JlY3QpOworICAgICAgICAgICAgcmVjdXJzaXZlQ2xpcHBp
bmdSZWN0ID0gdmlzaWJsZVdpbmRvd1JlY3Q7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1
cm4gdmFsaWRSZXR1cm47Cit9CisKK2Jvb2wgSW5SZWdpb25TY3JvbGxlcjo6c2Nyb2xsTm9kZVJl
Y3Vyc2l2ZWx5KFdlYkNvcmU6Ok5vZGUqIG5vZGUsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGRl
bHRhKQoreworICAgIGlmIChkZWx0YS5pc1plcm8oKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisK
KyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFJlbmRlck9iamVj
dCogcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOworICAgIGlmICghcmVuZGVyZXIpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIEZyYW1lVmlldyogdmlldyA9IHJlbmRlcmVyLT52aWV3
KCktPmZyYW1lVmlldygpOworICAgIGlmICghdmlldykKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgLy8gVHJ5IHNjcm9sbGluZyB0aGUgcmVuZGVyZXIuCisgICAgaWYgKHNjcm9sbFJlbmRl
cmVyKHJlbmRlcmVyLCBkZWx0YSkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gV2Un
dmUgaGl0IHRoZSBwYWdlLCBkb24ndCBzY3JvbGwgaXQgYW5kIHJldHVybiBmYWxzZS4KKyAgICBp
ZiAodmlldyA9PSBtX3dlYlBhZ2UtPm1fbWFpbkZyYW1lLT52aWV3KCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIC8vIFRyeSBzY3JvbGxpbmcgdGhlIEZyYW1lVmlldy4KKyAgICBpZiAo
Y2FuU2Nyb2xsSW5uZXJGcmFtZSh2aWV3LT5mcmFtZSgpKSkgeworICAgICAgICBJbnRTaXplIHZp
ZXdEZWx0YSA9IGRlbHRhOworICAgICAgICBJbnRQb2ludCBuZXdWaWV3T2Zmc2V0ID0gdmlldy0+
c2Nyb2xsUG9zaXRpb24oKTsKKyAgICAgICAgSW50UG9pbnQgbWF4Vmlld09mZnNldCA9IHZpZXct
Pm1heGltdW1TY3JvbGxQb3NpdGlvbigpOworICAgICAgICBhZGp1c3RTY3JvbGxEZWx0YShtYXhW
aWV3T2Zmc2V0LCBuZXdWaWV3T2Zmc2V0LCB2aWV3RGVsdGEpOworCisgICAgICAgIGlmICghdmll
d0RlbHRhLmlzWmVybygpKSB7CisgICAgICAgICAgICB2aWV3LT5zZXRDYW5CbGl0T25TY3JvbGwo
ZmFsc2UpOworCisgICAgICAgICAgICBCYWNraW5nU3RvcmVDbGllbnQqIGJhY2tpbmdTdG9yZUNs
aWVudCA9IG1fd2ViUGFnZS0+YmFja2luZ1N0b3JlQ2xpZW50Rm9yRnJhbWUodmlldy0+ZnJhbWUo
KSk7CisgICAgICAgICAgICBpZiAoYmFja2luZ1N0b3JlQ2xpZW50KSB7CisgICAgICAgICAgICAg
ICAgYmFja2luZ1N0b3JlQ2xpZW50LT5zZXRJc0NsaWVudEdlbmVyYXRlZFNjcm9sbCh0cnVlKTsK
KyAgICAgICAgICAgICAgICBiYWNraW5nU3RvcmVDbGllbnQtPnNldElzU2Nyb2xsTm90aWZpY2F0
aW9uU3VwcHJlc3NlZCh0cnVlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2V0Tm9k
ZSh2aWV3LT5mcmFtZSgpLT5kb2N1bWVudCgpKTsKKworICAgICAgICAgICAgdmlldy0+c2Nyb2xs
Qnkodmlld0RlbHRhKTsKKworICAgICAgICAgICAgaWYgKGJhY2tpbmdTdG9yZUNsaWVudCkgewor
ICAgICAgICAgICAgICAgIGJhY2tpbmdTdG9yZUNsaWVudC0+c2V0SXNDbGllbnRHZW5lcmF0ZWRT
Y3JvbGwoZmFsc2UpOworICAgICAgICAgICAgICAgIGJhY2tpbmdTdG9yZUNsaWVudC0+c2V0SXNT
Y3JvbGxOb3RpZmljYXRpb25TdXBwcmVzc2VkKGZhbHNlKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBUcnkgc2Ny
b2xsaW5nIHRoZSBub2RlIG9mIHRoZSBlbmNsb3NpbmcgZnJhbWUuCisgICAgRnJhbWUqIGZyYW1l
ID0gbm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKKyAgICBpZiAoZnJhbWUpIHsKKyAgICAgICAg
Tm9kZSogb3duZXJOb2RlID0gZnJhbWUtPm93bmVyRWxlbWVudCgpOworICAgICAgICBpZiAoc2Ny
b2xsTm9kZVJlY3Vyc2l2ZWx5KG93bmVyTm9kZSwgZGVsdGEpKQorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEluUmVnaW9uU2Ny
b2xsZXI6OnNjcm9sbFJlbmRlcmVyKFdlYkNvcmU6OlJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNv
bnN0IFdlYkNvcmU6OkludFNpemUmIGRlbHRhKQoreworICAgIFJlbmRlckxheWVyKiBsYXllciA9
IHJlbmRlcmVyLT5lbmNsb3NpbmdMYXllcigpOworICAgIGlmICghbGF5ZXIpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIC8vIFRyeSB0byBzY3JvbGwgbGF5ZXIuCisgICAgYm9vbCByZXN0
cmljdGVkQnlMaW5lQ2xhbXAgPSBmYWxzZTsKKyAgICBpZiAocmVuZGVyZXItPnBhcmVudCgpKQor
ICAgICAgICByZXN0cmljdGVkQnlMaW5lQ2xhbXAgPSAhcmVuZGVyZXItPnBhcmVudCgpLT5zdHls
ZSgpLT5saW5lQ2xhbXAoKS5pc05vbmUoKTsKKworICAgIGlmIChyZW5kZXJlci0+aGFzT3ZlcmZs
b3dDbGlwKCkgJiYgIXJlc3RyaWN0ZWRCeUxpbmVDbGFtcCkgeworICAgICAgICBJbnRTaXplIGxh
eWVyRGVsdGEgPSBkZWx0YTsKKyAgICAgICAgSW50UG9pbnQgbWF4T2Zmc2V0KGxheWVyLT5zY3Jv
bGxXaWR0aCgpIC0gbGF5ZXItPnJlbmRlckJveCgpLT5jbGllbnRXaWR0aCgpLCBsYXllci0+c2Ny
b2xsSGVpZ2h0KCkgLSBsYXllci0+cmVuZGVyQm94KCktPmNsaWVudEhlaWdodCgpKTsKKyAgICAg
ICAgSW50UG9pbnQgY3VycmVudE9mZnNldChsYXllci0+c2Nyb2xsWE9mZnNldCgpLCBsYXllci0+
c2Nyb2xsWU9mZnNldCgpKTsKKyAgICAgICAgYWRqdXN0U2Nyb2xsRGVsdGEobWF4T2Zmc2V0LCBj
dXJyZW50T2Zmc2V0LCBsYXllckRlbHRhKTsKKyAgICAgICAgaWYgKCFsYXllckRlbHRhLmlzWmVy
bygpKSB7CisgICAgICAgICAgICBzZXROb2RlKGVuY2xvc2luZ0xheWVyTm9kZShsYXllcikpOwor
ICAgICAgICAgICAgSW50UG9pbnQgbmV3T2Zmc2V0ID0gY3VycmVudE9mZnNldCArIGxheWVyRGVs
dGE7CisgICAgICAgICAgICBsYXllci0+c2Nyb2xsVG9PZmZzZXQobmV3T2Zmc2V0LngoKSwgbmV3
T2Zmc2V0LnkoKSk7CisgICAgICAgICAgICByZW5kZXJlci0+cmVwYWludCh0cnVlKTsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgd2hpbGUgKGxheWVy
ID0gbGF5ZXItPnBhcmVudCgpKSB7CisgICAgICAgIGlmIChjYW5TY3JvbGxSZW5kZXJCb3gobGF5
ZXItPnJlbmRlckJveCgpKSkKKyAgICAgICAgICAgIHJldHVybiBzY3JvbGxSZW5kZXJlcihsYXll
ci0+cmVuZGVyQm94KCksIGRlbHRhKTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K3ZvaWQgSW5SZWdpb25TY3JvbGxlcjo6YWRqdXN0U2Nyb2xsRGVsdGEoY29uc3QgV2ViQ29yZTo6
SW50UG9pbnQmIG1heE9mZnNldCwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGN1cnJlbnRPZmZz
ZXQsIFdlYkNvcmU6OkludFNpemUmIGRlbHRhKSBjb25zdAoreworICAgIGlmIChjdXJyZW50T2Zm
c2V0LngoKSArIGRlbHRhLndpZHRoKCkgPiBtYXhPZmZzZXQueCgpKQorICAgICAgICBkZWx0YS5z
ZXRXaWR0aChzdGQ6Om1pbihtYXhPZmZzZXQueCgpIC0gY3VycmVudE9mZnNldC54KCksIGRlbHRh
LndpZHRoKCkpKTsKKworICAgIGlmIChjdXJyZW50T2Zmc2V0LngoKSArIGRlbHRhLndpZHRoKCkg
PCAwKQorICAgICAgICBkZWx0YS5zZXRXaWR0aChzdGQ6Om1heCgtY3VycmVudE9mZnNldC54KCks
IGRlbHRhLndpZHRoKCkpKTsKKworICAgIGlmIChjdXJyZW50T2Zmc2V0LnkoKSArIGRlbHRhLmhl
aWdodCgpID4gbWF4T2Zmc2V0LnkoKSkKKyAgICAgICAgZGVsdGEuc2V0SGVpZ2h0KHN0ZDo6bWlu
KG1heE9mZnNldC55KCkgLSBjdXJyZW50T2Zmc2V0LnkoKSwgZGVsdGEuaGVpZ2h0KCkpKTsKKwor
ICAgIGlmIChjdXJyZW50T2Zmc2V0LnkoKSArIGRlbHRhLmhlaWdodCgpIDwgMCkKKyAgICAgICAg
ZGVsdGEuc2V0SGVpZ2h0KHN0ZDo6bWF4KC1jdXJyZW50T2Zmc2V0LnkoKSwgZGVsdGEuaGVpZ2h0
KCkpKTsKK30KKworfQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dl
YktpdFN1cHBvcnQvSW5SZWdpb25TY3JvbGxlci5oIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5
L1dlYktpdFN1cHBvcnQvSW5SZWdpb25TY3JvbGxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmU5YjE5MTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Js
YWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JblJlZ2lvblNjcm9sbGVyLmgKQEAgLTAsMCArMSw2NyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGlt
aXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRo
ZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaWZuZGVm
IEluUmVnaW9uU2Nyb2xsZXJfaAorI2RlZmluZSBJblJlZ2lvblNjcm9sbGVyX2gKKworI2luY2x1
ZGUgIkludFJlY3QuaCIKKworI2luY2x1ZGUgPGludGVyYWN0aW9uL1Njcm9sbFZpZXdCYXNlLmg+
CisjaW5jbHVkZSA8dmVjdG9yPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBGcmFtZTsK
K2NsYXNzIE5vZGU7CitjbGFzcyBSZW5kZXJPYmplY3Q7Cit9CisKK25hbWVzcGFjZSBCbGFja0Jl
cnJ5IHsKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJQYWdlUHJpdmF0ZTsKKworY2xh
c3MgSW5SZWdpb25TY3JvbGxlciB7CisKK3B1YmxpYzoKKyAgICBJblJlZ2lvblNjcm9sbGVyKFdl
YlBhZ2VQcml2YXRlKik7CisKKyAgICB2b2lkIHNldE5vZGUoV2ViQ29yZTo6Tm9kZSopOworICAg
IFdlYkNvcmU6Ok5vZGUqIG5vZGUoKSBjb25zdDsKKyAgICB2b2lkIHJlc2V0KCk7CisKKyAgICBi
b29sIGNhblNjcm9sbCgpIGNvbnN0OworICAgIGJvb2wgaGFzTm9kZSgpIGNvbnN0OworCisgICAg
Ym9vbCBzY3JvbGxCeShjb25zdCBQbGF0Zm9ybTo6SW50U2l6ZSYgZGVsdGEpOworCisgICAgc3Rk
Ojp2ZWN0b3I8UGxhdGZvcm06OlNjcm9sbFZpZXdCYXNlKj4gaW5SZWdpb25TY3JvbGxhYmxlQXJl
YXNGb3JQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOworcHJpdmF0ZToKKworICAgIGJv
b2wgc2Nyb2xsTm9kZVJlY3Vyc2l2ZWx5KFdlYkNvcmU6Ok5vZGUqLCBjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJiBkZWx0YSk7CisgICAgYm9vbCBzY3JvbGxSZW5kZXJlcihXZWJDb3JlOjpSZW5kZXJP
YmplY3QqLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBkZWx0YSk7CisKKyAgICB2b2lkIGFkanVz
dFNjcm9sbERlbHRhKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBtYXhPZmZzZXQsIGNvbnN0IFdl
YkNvcmU6OkludFBvaW50JiBjdXJyZW50T2Zmc2V0LCBXZWJDb3JlOjpJbnRTaXplJiBkZWx0YSkg
Y29uc3Q7CisKKyAgICBSZWZQdHI8V2ViQ29yZTo6Tm9kZT4gbV9pblJlZ2lvblNjcm9sbFN0YXJ0
aW5nTm9kZTsKKyAgICBXZWJQYWdlUHJpdmF0ZSogbV93ZWJQYWdlOworfTsKKworfQorfQorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0
L1RvdWNoRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRT
dXBwb3J0L1RvdWNoRXZlbnRIYW5kbGVyLmNwcAppbmRleCBjODY2OGJlLi5iNDExM2JhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9Ub3VjaEV2ZW50
SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQv
VG91Y2hFdmVudEhhbmRsZXIuY3BwCkBAIC0zNjMsNyArMzYzLDcgQEAgdm9pZCBUb3VjaEV2ZW50
SGFuZGxlcjo6ZHJhd1RhcEhpZ2hsaWdodCgpCiAgICAgLy8gT24gdGhlIGNsaWVudCBzaWRlLCB0
aGlzIGluZm8gaXMgYmVpbmcgdXNlZCB0byBoaWRlIHRoZSB0YXAgaGlnaGxpZ2h0IHdpbmRvdyBv
biBzY3JvbGwuCiAgICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gbV93ZWJQYWdlLT5lbmNsb3NpbmdG
aXhlZFBvc2l0aW9uZWRBbmNlc3Rvck9yU2VsZklmRml4ZWRQb3NpdGlvbmVkKHJlbmRlcmVyLT5l
bmNsb3NpbmdMYXllcigpKTsKICAgICBib29sIHNob3VsZEhpZGVUYXBIaWdobGlnaHRSaWdodEFm
dGVyU2Nyb2xsaW5nID0gIWxheWVyLT5yZW5kZXJlcigpLT5pc1JlbmRlclZpZXcoKTsKLSAgICBz
aG91bGRIaWRlVGFwSGlnaGxpZ2h0UmlnaHRBZnRlclNjcm9sbGluZyB8PSAhIW1fd2ViUGFnZS0+
bV9pblJlZ2lvblNjcm9sbFN0YXJ0aW5nTm9kZS5nZXQoKTsKKyAgICBzaG91bGRIaWRlVGFwSGln
aGxpZ2h0UmlnaHRBZnRlclNjcm9sbGluZyB8PSAhIW1fd2ViUGFnZS0+bV9pblJlZ2lvblNjcm9s
bGVyLT5ub2RlKCk7CiAKICAgICBJbnRQb2ludCBmcmFtZVBvcyhtX3dlYlBhZ2UtPmZyYW1lT2Zm
c2V0KGVsZW1lbnRGcmFtZSkpOwogCi0tIAoxLjcuNS40Cgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>156094</attachid>
            <date>2012-08-02 08:31:21 -0700</date>
            <delta_ts>2012-08-02 08:39:21 -0700</delta_ts>
            <desc>patch v3</desc>
            <filename>0001-BlackBerry-Implement-InRegionScroller-class-as-a-in-.patch</filename>
            <type>text/plain</type>
            <size>41876</size>
            <attacher name="Antonio Gomes">tonikitoo</attacher>
            
              <data encoding="base64">RnJvbSBhNzI3ZjYxN2RmZWI3ODMzMzM0MzIzMWMyMDIzZWNmYWFkMzI0NjI0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbnRvbmlvIEdvbWVzIDxhZ29tZXNAcmltLmNvbT4KRGF0ZTog
V2VkLCAxIEF1ZyAyMDEyIDE4OjA0OjI0IC0wNDAwClN1YmplY3Q6IFtQQVRDSF0gW0JsYWNrQmVy
cnldIEltcGxlbWVudCBJblJlZ2lvblNjcm9sbGVyIGNsYXNzIGFzIGEgaW4tcmVnaW9uCiBzY3Jv
bGwgY29udHJvbGxlcgogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTky
ODg5IFBSICMxODY1ODcKClJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgpQYXRjaCBieSBBbnRv
bmlvIEdvbWVzIDxhZ29tZXNAcmltLmNvbT4KClNvdXJjZS9XZWJLaXQ6CgoqIFBsYXRmb3JtQmxh
Y2tCZXJyeS5jbWFrZTogQWRkZWQgSW5SZWdpb25TY3JvbGxlci5jcHB8aCB0byB0aGUgYnVpbGQg
c3lzdGVtLgoKU291cmNlL1dlYktpdC9ibGFja2JlcnJ5OgoKTW92ZWQgYWxsIGluLXJlZ2lvbiBz
Y3JvbGxpbmcgY29kZSBvdXQgb2YgV2ViUGFnZVByaXZhdGUgdG8gdGhlIGp1c3QKY3JlYXRlZCBJ
blJlZ2lvblNjcm9sbGVyIGNsYXNzLiBUaGlzIGNsYXNzIGFpbXMgdG86CgoxKSBDZW50cmFsaXpl
IGFsbCBpbi1yZWdpb24gc2Nyb2xsIGNvZGUgYW5kIGNsZWFuIHVwIFdlYlBhZ2VQcml2YXRlIGFz
IGEgY29uc2VxdWVuY2UuCjIpIEJlIHRoZSBiYXNlcyB0byBhZGQgVUkvQ29tcG9zaXRpbmcgdGhy
ZWFkIGRyaXZlbiBzY3JvbGxzIHRvIGluLXJlZ2lvbi4KClRoZSBwYXRjaCBkb2VzIG5vdCBjaGFu
Z2UgYW55IGZ1bmN0aW9uYWxsaXR5IGNoYW5nZS4KCiogQXBpL1dlYlBhZ2UuY3BwOgooQmxhY2tC
ZXJyeTo6V2ViS2l0OjpXZWJQYWdlUHJpdmF0ZTo6V2ViUGFnZVByaXZhdGUpOgooQmxhY2tCZXJy
eTo6V2ViS2l0OjpXZWJQYWdlUHJpdmF0ZTo6aW5pdCk6CihCbGFja0JlcnJ5OjpXZWJLaXQ6Oldl
YlBhZ2VQcml2YXRlOjpzY3JvbGxCeSk6CihCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2VQcml2
YXRlOjpub3RpZnlJblJlZ2lvblNjcm9sbFN0YXR1c0NoYW5nZWQpOgooQmxhY2tCZXJyeTo6V2Vi
S2l0OjpXZWJQYWdlUHJpdmF0ZTo6Y2xlYXJEb2N1bWVudERhdGEpOgooQmxhY2tCZXJyeTo6V2Vi
S2l0OjpXZWJQYWdlUHJpdmF0ZTo6c2V0U2Nyb2xsT3JpZ2luUG9pbnQpOgoqIEFwaS9XZWJQYWdl
X3AuaDoKKFdlYlBhZ2VQcml2YXRlKToKKiBXZWJLaXRTdXBwb3J0L0luUmVnaW9uU2Nyb2xsYWJs
ZUFyZWEuY3BwOgooQmxhY2tCZXJyeTo6V2ViS2l0OjpJblJlZ2lvblNjcm9sbGFibGVBcmVhOjps
YXllcik6CiogV2ViS2l0U3VwcG9ydC9JblJlZ2lvblNjcm9sbGVyLmNwcDogQWRkZWQuCihXZWJL
aXQpOgooQmxhY2tCZXJyeTo6V2ViS2l0OjpjYW5TY3JvbGxJbm5lckZyYW1lKToKKEJsYWNrQmVy
cnk6OldlYktpdDo6Y2FuU2Nyb2xsUmVuZGVyQm94KToKKEJsYWNrQmVycnk6OldlYktpdDo6cGFy
ZW50TGF5ZXIpOgooQmxhY2tCZXJyeTo6V2ViS2l0OjplbmNsb3NpbmdMYXllck5vZGUpOgooQmxh
Y2tCZXJyeTo6V2ViS2l0Ojppc05vblJlbmRlclZpZXdGaXhlZFBvc2l0aW9uZWRDb250YWluZXIp
OgooQmxhY2tCZXJyeTo6V2ViS2l0OjpwdXNoQmFja0luUmVnaW9uU2Nyb2xsYWJsZSk6CihCbGFj
a0JlcnJ5OjpXZWJLaXQ6OkluUmVnaW9uU2Nyb2xsZXI6OkluUmVnaW9uU2Nyb2xsZXIpOgooQmxh
Y2tCZXJyeTo6V2ViS2l0OjpJblJlZ2lvblNjcm9sbGVyOjpzZXROb2RlKToKKEJsYWNrQmVycnk6
OldlYktpdDo6SW5SZWdpb25TY3JvbGxlcjo6bm9kZSk6CihCbGFja0JlcnJ5OjpXZWJLaXQ6Oklu
UmVnaW9uU2Nyb2xsZXI6OnJlc2V0KToKKEJsYWNrQmVycnk6OldlYktpdDo6SW5SZWdpb25TY3Jv
bGxlcjo6aXNOdWxsKToKKEJsYWNrQmVycnk6OldlYktpdDo6SW5SZWdpb25TY3JvbGxlcjo6c2Ny
b2xsQnkpOgooQmxhY2tCZXJyeTo6V2ViS2l0OjpJblJlZ2lvblNjcm9sbGVyOjppblJlZ2lvblNj
cm9sbGFibGVBcmVhc0ZvclBvaW50KToKKEJsYWNrQmVycnk6OldlYktpdDo6SW5SZWdpb25TY3Jv
bGxlcjo6c2Nyb2xsTm9kZVJlY3Vyc2l2ZWx5KToKKEJsYWNrQmVycnk6OldlYktpdDo6SW5SZWdp
b25TY3JvbGxlcjo6c2Nyb2xsUmVuZGVyZXIpOgooQmxhY2tCZXJyeTo6V2ViS2l0OjpJblJlZ2lv
blNjcm9sbGVyOjphZGp1c3RTY3JvbGxEZWx0YSk6CiogV2ViS2l0U3VwcG9ydC9JblJlZ2lvblNj
cm9sbGVyLmg6IEFkZGVkLgooV2ViQ29yZSk6CihXZWJLaXQpOgooSW5SZWdpb25TY3JvbGxlcik6
CiogV2ViS2l0U3VwcG9ydC9Ub3VjaEV2ZW50SGFuZGxlci5jcHA6CihCbGFja0JlcnJ5OjpXZWJL
aXQ6OlRvdWNoRXZlbnRIYW5kbGVyOjpkcmF3VGFwSGlnaGxpZ2h0KToKLS0tCiBTb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTAgKwogU291cmNl
L1dlYktpdC9QbGF0Zm9ybUJsYWNrQmVycnkuY21ha2UgICAgICAgICAgICAgfCAgICAyICsKIFNv
dXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFnZS5jcHAgICAgICAgICAgIHwgIDMxOSAr
LS0tLS0tLS0tLS0tLS0tLS0KIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFnZV9w
LmggICAgICAgICAgIHwgICAxMiArLQogU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5nZUxv
ZyAgICAgICAgICAgICAgICAgfCAgIDUyICsrKwogLi4uL1dlYktpdFN1cHBvcnQvSW5SZWdpb25T
Y3JvbGxhYmxlQXJlYS5jcHAgICAgICAgfCAgICAzICstCiAuLi4vYmxhY2tiZXJyeS9XZWJLaXRT
dXBwb3J0L0luUmVnaW9uU2Nyb2xsZXIuY3BwICB8ICAzNTUgKysrKysrKysrKysrKysrKysrKysK
IC4uLi9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5SZWdpb25TY3JvbGxlci5oICAgIHwgICA2
NyArKysrCiAuLi4vYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L1RvdWNoRXZlbnRIYW5kbGVyLmNw
cCB8ICAgIDIgKy0KIDkgZmlsZXMgY2hhbmdlZCwgNTA3IGluc2VydGlvbnMoKyksIDMxNSBkZWxl
dGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2Vi
S2l0U3VwcG9ydC9JblJlZ2lvblNjcm9sbGVyLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJj
ZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0luUmVnaW9uU2Nyb2xsZXIuaAoKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKaW5kZXggMTk5OTRkMS4uYWNiMTEwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAx
Mi0wOC0wMSAgQW50b25pbyBHb21lcyAgPGFnb21lc0ByaW0uY29tPgorCisgICAgICAgIFtCbGFj
a0JlcnJ5XSBJbXBsZW1lbnQgSW5SZWdpb25TY3JvbGxlciBjbGFzcyBhcyBhIGluLXJlZ2lvbiBz
Y3JvbGwgY29udHJvbGxlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9OTI4ODkKKyAgICAgICAgUFIgIzE4NjU4NworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtlOiBB
ZGRlZCBJblJlZ2lvblNjcm9sbGVyLmNwcHxoIHRvIHRoZSBidWlsZCBzeXN0ZW0uCisKIDIwMTIt
MDctMzAgIFNpbW9uIEhhdXNtYW5uICA8c2ltb24uaGF1c21hbm5Abm9raWEuY29tPgogCiAgICAg
ICAgIFVucmV2aWV3ZWQgUXQvTWFjIGJ1aWxkIGZpeDogVXNlIGxpYldlYktpdFN5c3RlbUludGVy
ZmFjZU1vdW50YWluTGlvbi5hCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtQmxh
Y2tCZXJyeS5jbWFrZSBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtlCmlu
ZGV4IDA1YWFlZDguLjhkYWJjODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1C
bGFja0JlcnJ5LmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1CbGFja0JlcnJ5LmNt
YWtlCkBAIC0xMDAsNiArMTAwLDggQEAgTElTVChBUFBFTkQgV2ViS2l0X1NPVVJDRVMKICAgICBi
bGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvRnJhbWVMYXllcnMuY3BwCiAgICAgYmxhY2tiZXJyeS9X
ZWJLaXRTdXBwb3J0L0luUGFnZVNlYXJjaE1hbmFnZXIuY3BwCiAgICAgYmxhY2tiZXJyeS9XZWJL
aXRTdXBwb3J0L0lucHV0SGFuZGxlci5jcHAKKyAgICBibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQv
SW5SZWdpb25TY3JvbGxhYmxlQXJlYS5jcHAKKyAgICBibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQv
SW5SZWdpb25TY3JvbGxlci5jcHAKICAgICBibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvUmVuZGVy
UXVldWUuY3BwCiAgICAgYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L1NlbGVjdGlvbkhhbmRsZXIu
Y3BwCiAgICAgYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L1NlbGVjdGlvbk92ZXJsYXkuY3BwCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2UuY3BwIGIvU291
cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJQYWdlLmNwcAppbmRleCA0ZTBhZjEyLi45YzYw
MjZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFnZS5jcHAKQEAgLTM5Myw3
ICszOTMsNiBAQCBXZWJQYWdlUHJpdmF0ZTo6V2ViUGFnZVByaXZhdGUoV2ViUGFnZSogd2ViUGFn
ZSwgV2ViUGFnZUNsaWVudCogY2xpZW50LCBjb25zdCBJbgogICAgICwgbV9sYXN0VXNlckV2ZW50
VGltZXN0YW1wKDAuMCkKICAgICAsIG1fcGx1Z2luTW91c2VCdXR0b25QcmVzc2VkKGZhbHNlKQog
ICAgICwgbV9wbHVnaW5NYXlPcGVuTmV3VGFiKGZhbHNlKQotICAgICwgbV9pblJlZ2lvblNjcm9s
bFN0YXJ0aW5nTm9kZSgwKQogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICAs
IG1fcm9vdExheWVyQ29tbWl0VGltZXIoYWRvcHRQdHIobmV3IFRpbWVyPFdlYlBhZ2VQcml2YXRl
Pih0aGlzLCAmV2ViUGFnZVByaXZhdGU6OnJvb3RMYXllckNvbW1pdFRpbWVyRmlyZWQpKSkKICAg
ICAsIG1fbmVlZHNPbmVTaG90RHJhd2luZ1N5bmNocm9uaXphdGlvbihmYWxzZSkKQEAgLTU1OCw2
ICs1NTcsOCBAQCB2b2lkIFdlYlBhZ2VQcml2YXRlOjppbml0KGNvbnN0IFdlYlN0cmluZyYgcGFn
ZUdyb3VwTmFtZSkKICAgICBmcmFtZUxvYWRlckNsaWVudC0+c2V0RnJhbWUobV9tYWluRnJhbWUs
IHRoaXMpOwogICAgIG1fbWFpbkZyYW1lLT5pbml0KCk7CiAKKyAgICBtX2luUmVnaW9uU2Nyb2xs
ZXIgPSBhZG9wdFB0cihuZXcgSW5SZWdpb25TY3JvbGxlcih0aGlzKSk7CisKICNpZiBFTkFCTEUo
V0VCR0wpCiAgICAgUGxhdGZvcm06OlNldHRpbmdzKiBzZXR0aW5ncyA9IFBsYXRmb3JtOjpTZXR0
aW5nczo6aW5zdGFuY2UoKTsKICAgICBtX3BhZ2UtPnNldHRpbmdzKCktPnNldFdlYkdMRW5hYmxl
ZChzZXR0aW5ncyAmJiBzZXR0aW5ncy0+aXNXZWJHTFN1cHBvcnRlZCgpKTsKQEAgLTE1MjIsMTUg
KzE1MjMsMTMgQEAgYm9vbCBXZWJQYWdlUHJpdmF0ZTo6c2Nyb2xsQnkoaW50IGRlbHRhWCwgaW50
IGRlbHRhWSwgYm9vbCBzY3JvbGxNYWluRnJhbWUpCiAgICAgICAgICAgICBkZWx0YS53aWR0aCgp
IDwgMCA/IC11bnRyYW5zZm9ybWVkQ29waWVkRGVsdGEud2lkdGgoKSA6IHVudHJhbnNmb3JtZWRD
b3BpZWREZWx0YS53aWR0aCgpLAogICAgICAgICAgICAgZGVsdGEuaGVpZ2h0KCkgPCAwID8gLXVu
dHJhbnNmb3JtZWRDb3BpZWREZWx0YS5oZWlnaHQoKTogdW50cmFuc2Zvcm1lZENvcGllZERlbHRh
LmhlaWdodCgpKTsKIAotICAgICAgICBpZiAobV9pblJlZ2lvblNjcm9sbFN0YXJ0aW5nTm9kZSkg
ewotICAgICAgICAgICAgaWYgKHNjcm9sbE5vZGVSZWN1cnNpdmVseShtX2luUmVnaW9uU2Nyb2xs
U3RhcnRpbmdOb2RlLmdldCgpLCBkZWx0YSkpIHsKLSAgICAgICAgICAgICAgICBtX3NlbGVjdGlv
bkhhbmRsZXItPnNlbGVjdGlvblBvc2l0aW9uQ2hhbmdlZCgpOwotICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBXZSBoYXZlIGNvZGUgaW4gcGxhY2UgdG8gaGFuZGxlIHNjcm9sbGluZyBhbmQgY2xp
cHBpbmcgdGFwIGhpZ2hsaWdodAotICAgICAgICAgICAgICAgIC8vIG9uIGluLXJlZ2lvbiBzY3Jv
bGxpbmcuIEFzIHNvb24gYXMgaXQgaXMgZmFzdCBlbm91Z2ggKGkuZS4gd2UgaGF2ZSBpdCBiYWNr
ZWQgYnkKLSAgICAgICAgICAgICAgICAvLyBhIGJhY2tpbmcgc3RvcmUpLCB3ZSBjYW4gcmVsaWFi
bHkgbWFrZSB1c2Ugb2YgaXQgaW4gdGhlIHJlYWwgd29ybGQuCi0gICAgICAgICAgICAgICAgLy8g
bV90b3VjaEV2ZW50SGFuZGxlci0+ZHJhd1RhcEhpZ2hsaWdodCgpOwotICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQorICAgICAgICBpZiAobV9pblJlZ2lvblNjcm9s
bGVyLT5zY3JvbGxCeShkZWx0YSkpIHsKKyAgICAgICAgICAgIG1fc2VsZWN0aW9uSGFuZGxlci0+
c2VsZWN0aW9uUG9zaXRpb25DaGFuZ2VkKCk7CisgICAgICAgICAgICAvLyBGSVhNRTogV2UgaGF2
ZSBjb2RlIGluIHBsYWNlIHRvIGhhbmRsZSBzY3JvbGxpbmcgYW5kIGNsaXBwaW5nIHRhcCBoaWdo
bGlnaHQKKyAgICAgICAgICAgIC8vIG9uIGluLXJlZ2lvbiBzY3JvbGxpbmcuIEFzIHNvb24gYXMg
aXQgaXMgZmFzdCBlbm91Z2ggKGkuZS4gd2UgaGF2ZSBpdCBiYWNrZWQgYnkKKyAgICAgICAgICAg
IC8vIGEgYmFja2luZyBzdG9yZSksIHdlIGNhbiByZWxpYWJseSBtYWtlIHVzZSBvZiBpdCBpbiB0
aGUgcmVhbCB3b3JsZC4KKyAgICAgICAgICAgIC8vIG1fdG91Y2hFdmVudEhhbmRsZXItPmRyYXdU
YXBIaWdobGlnaHQoKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTU1MCw5ICsxNTQ5LDkgQEAgYm9vbCBXZWJQYWdlOjpz
Y3JvbGxCeShjb25zdCBQbGF0Zm9ybTo6SW50U2l6ZSYgZGVsdGEsIGJvb2wgc2Nyb2xsTWFpbkZy
YW1lKQogCiB2b2lkIFdlYlBhZ2VQcml2YXRlOjpub3RpZnlJblJlZ2lvblNjcm9sbFN0YXR1c0No
YW5nZWQoYm9vbCBzdGF0dXMpCiB7Ci0gICAgaWYgKCFzdGF0dXMgJiYgbV9pblJlZ2lvblNjcm9s
bFN0YXJ0aW5nTm9kZSkgewotICAgICAgICBlbnF1ZXVlUmVuZGVyaW5nT2ZDbGlwcGVkQ29udGVu
dE9mU2Nyb2xsYWJsZU5vZGVBZnRlckluUmVnaW9uU2Nyb2xsaW5nKG1faW5SZWdpb25TY3JvbGxT
dGFydGluZ05vZGUuZ2V0KCkpOwotICAgICAgICBtX2luUmVnaW9uU2Nyb2xsU3RhcnRpbmdOb2Rl
ID0gMDsKKyAgICBpZiAoIXN0YXR1cyAmJiBtX2luUmVnaW9uU2Nyb2xsZXItPmhhc05vZGUoKSkg
eworICAgICAgICBlbnF1ZXVlUmVuZGVyaW5nT2ZDbGlwcGVkQ29udGVudE9mU2Nyb2xsYWJsZU5v
ZGVBZnRlckluUmVnaW9uU2Nyb2xsaW5nKG1faW5SZWdpb25TY3JvbGxlci0+bm9kZSgpKTsKKyAg
ICAgICAgbV9pblJlZ2lvblNjcm9sbGVyLT5yZXNldCgpOwogICAgIH0KIH0KIApAQCAtMjYzNSw4
ICsyNjM0LDggQEAgdm9pZCBXZWJQYWdlUHJpdmF0ZTo6Y2xlYXJEb2N1bWVudERhdGEoY29uc3Qg
RG9jdW1lbnQqIGRvY3VtZW50R29pbmdBd2F5KQogICAgIGlmIChtX2N1cnJlbnRCbG9ja1pvb21B
ZGp1c3RlZE5vZGUgJiYgbV9jdXJyZW50QmxvY2tab29tQWRqdXN0ZWROb2RlLT5kb2N1bWVudCgp
ID09IGRvY3VtZW50R29pbmdBd2F5KQogICAgICAgICBtX2N1cnJlbnRCbG9ja1pvb21BZGp1c3Rl
ZE5vZGUgPSAwOwogCi0gICAgaWYgKG1faW5SZWdpb25TY3JvbGxTdGFydGluZ05vZGUgJiYgbV9p
blJlZ2lvblNjcm9sbFN0YXJ0aW5nTm9kZS0+ZG9jdW1lbnQoKSA9PSBkb2N1bWVudEdvaW5nQXdh
eSkKLSAgICAgICAgbV9pblJlZ2lvblNjcm9sbFN0YXJ0aW5nTm9kZSA9IDA7CisgICAgaWYgKG1f
aW5SZWdpb25TY3JvbGxlci0+aGFzTm9kZSgpICYmIG1faW5SZWdpb25TY3JvbGxlci0+bm9kZSgp
LT5kb2N1bWVudCgpID09IGRvY3VtZW50R29pbmdBd2F5KQorICAgICAgICBtX2luUmVnaW9uU2Ny
b2xsZXItPnJlc2V0KCk7CiAKICAgICBpZiAoZG9jdW1lbnRHb2luZ0F3YXktPmZyYW1lKCkpCiAg
ICAgICAgIG1faW5wdXRIYW5kbGVyLT5mcmFtZVVubG9hZGVkKGRvY3VtZW50R29pbmdBd2F5LT5m
cmFtZSgpKTsKQEAgLTI2NTYsMTUgKzI2NTUsNiBAQCBzdGF0aWMgYm9vbCBpc1Bvc2l0aW9uZWRD
b250YWluZXIoUmVuZGVyTGF5ZXIqIGxheWVyKQogICAgIHJldHVybiBvLT5pc1JlbmRlclZpZXco
KSB8fCBvLT5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSB8fCBvLT5pc1JlbFBvc2l0aW9uZWQoKSB8
fCBsYXllci0+aGFzVHJhbnNmb3JtKCk7CiB9CiAKLXN0YXRpYyBib29sIGlzTm9uUmVuZGVyVmll
d0ZpeGVkUG9zaXRpb25lZENvbnRhaW5lcihSZW5kZXJMYXllciogbGF5ZXIpCi17Ci0gICAgUmVu
ZGVyT2JqZWN0KiBvID0gbGF5ZXItPnJlbmRlcmVyKCk7Ci0gICAgaWYgKG8tPmlzUmVuZGVyVmll
dygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gby0+aXNPdXRPZkZsb3dQ
b3NpdGlvbmVkKCkgJiYgby0+c3R5bGUoKS0+cG9zaXRpb24oKSA9PSBGaXhlZFBvc2l0aW9uOwot
fQotCiBzdGF0aWMgYm9vbCBpc0ZpeGVkUG9zaXRpb25lZENvbnRhaW5lcihSZW5kZXJMYXllciog
bGF5ZXIpCiB7CiAgICAgUmVuZGVyT2JqZWN0KiBvID0gbGF5ZXItPnJlbmRlcmVyKCk7CkBAIC00
MjIzLDEyICs0MjEzLDEyIEBAIGJvb2wgV2ViUGFnZTo6dG91Y2hFdmVudChjb25zdCBQbGF0Zm9y
bTo6VG91Y2hFdmVudCYgZXZlbnQpCiAKIHZvaWQgV2ViUGFnZVByaXZhdGU6OnNldFNjcm9sbE9y
aWdpblBvaW50KGNvbnN0IFBsYXRmb3JtOjpJbnRQb2ludCYgcG9pbnQpCiB7Ci0gICAgbV9pblJl
Z2lvblNjcm9sbFN0YXJ0aW5nTm9kZSA9IDA7CisgICAgbV9pblJlZ2lvblNjcm9sbGVyLT5yZXNl
dCgpOwogCiAgICAgaWYgKCFtX2hhc0luUmVnaW9uU2Nyb2xsYWJsZUFyZWFzKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBtX2NsaWVudC0+bm90aWZ5SW5SZWdpb25TY3JvbGxpbmdTdGFydGluZ1Bv
aW50Q2hhbmdlZChpblJlZ2lvblNjcm9sbGFibGVBcmVhc0ZvclBvaW50KHBvaW50KSk7CisgICAg
bV9jbGllbnQtPm5vdGlmeUluUmVnaW9uU2Nyb2xsaW5nU3RhcnRpbmdQb2ludENoYW5nZWQobV9p
blJlZ2lvblNjcm9sbGVyLT5pblJlZ2lvblNjcm9sbGFibGVBcmVhc0ZvclBvaW50KHBvaW50KSk7
CiB9CiAKIHZvaWQgV2ViUGFnZTo6c2V0U2Nyb2xsT3JpZ2luUG9pbnQoY29uc3QgUGxhdGZvcm06
OkludFBvaW50JiBwb2ludCkKQEAgLTQzOTgsMTIwICs0Mzg4LDYgQEAgdm9pZCBXZWJQYWdlOjpz
ZXRGb3JjZWRUZXh0RW5jb2RpbmcoY29uc3QgY2hhciogZW5jb2RpbmcpCiAgICAgICAgIHJldHVy
biBkLT5mb2N1c2VkT3JNYWluRnJhbWUoKS0+bG9hZGVyKCktPnJlbG9hZFdpdGhPdmVycmlkZUVu
Y29kaW5nKGVuY29kaW5nKTsKIH0KIAotYm9vbCBXZWJQYWdlUHJpdmF0ZTo6c2Nyb2xsTm9kZVJl
Y3Vyc2l2ZWx5KE5vZGUqIG5vZGUsIGNvbnN0IEludFNpemUmIGRlbHRhKQotewotICAgIGlmIChk
ZWx0YS5pc1plcm8oKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoIW5vZGUpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBub2Rl
LT5yZW5kZXJlcigpOwotICAgIGlmICghcmVuZGVyZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIEZyYW1lVmlldyogdmlldyA9IHJlbmRlcmVyLT52aWV3KCktPmZyYW1lVmlldygpOwot
ICAgIGlmICghdmlldykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gVHJ5IHNjcm9s
bGluZyB0aGUgcmVuZGVyZXIuCi0gICAgaWYgKHNjcm9sbFJlbmRlcmVyKHJlbmRlcmVyLCBkZWx0
YSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gV2UndmUgaGl0IHRoZSBwYWdlLCBk
b24ndCBzY3JvbGwgaXQgYW5kIHJldHVybiBmYWxzZS4KLSAgICBpZiAodmlldyA9PSBtX21haW5G
cmFtZS0+dmlldygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBUcnkgc2Nyb2xs
aW5nIHRoZSBGcmFtZVZpZXcuCi0gICAgaWYgKGNhblNjcm9sbElubmVyRnJhbWUodmlldy0+ZnJh
bWUoKSkpIHsKLSAgICAgICAgSW50U2l6ZSB2aWV3RGVsdGEgPSBkZWx0YTsKLSAgICAgICAgSW50
UG9pbnQgbmV3Vmlld09mZnNldCA9IHZpZXctPnNjcm9sbFBvc2l0aW9uKCk7Ci0gICAgICAgIElu
dFBvaW50IG1heFZpZXdPZmZzZXQgPSB2aWV3LT5tYXhpbXVtU2Nyb2xsUG9zaXRpb24oKTsKLSAg
ICAgICAgYWRqdXN0U2Nyb2xsRGVsdGEobWF4Vmlld09mZnNldCwgbmV3Vmlld09mZnNldCwgdmll
d0RlbHRhKTsKLQotICAgICAgICBpZiAoIXZpZXdEZWx0YS5pc1plcm8oKSkgewotICAgICAgICAg
ICAgdmlldy0+c2V0Q2FuQmxpdE9uU2Nyb2xsKGZhbHNlKTsKLQotICAgICAgICAgICAgQmFja2lu
Z1N0b3JlQ2xpZW50KiBiYWNraW5nU3RvcmVDbGllbnQgPSBiYWNraW5nU3RvcmVDbGllbnRGb3JG
cmFtZSh2aWV3LT5mcmFtZSgpKTsKLSAgICAgICAgICAgIGlmIChiYWNraW5nU3RvcmVDbGllbnQp
IHsKLSAgICAgICAgICAgICAgICBiYWNraW5nU3RvcmVDbGllbnQtPnNldElzQ2xpZW50R2VuZXJh
dGVkU2Nyb2xsKHRydWUpOwotICAgICAgICAgICAgICAgIGJhY2tpbmdTdG9yZUNsaWVudC0+c2V0
SXNTY3JvbGxOb3RpZmljYXRpb25TdXBwcmVzc2VkKHRydWUpOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBtX2luUmVnaW9uU2Nyb2xsU3RhcnRpbmdOb2RlID0gdmlldy0+ZnJhbWUoKS0+
ZG9jdW1lbnQoKTsKLQotICAgICAgICAgICAgdmlldy0+c2Nyb2xsQnkodmlld0RlbHRhKTsKLQot
ICAgICAgICAgICAgaWYgKGJhY2tpbmdTdG9yZUNsaWVudCkgewotICAgICAgICAgICAgICAgIGJh
Y2tpbmdTdG9yZUNsaWVudC0+c2V0SXNDbGllbnRHZW5lcmF0ZWRTY3JvbGwoZmFsc2UpOwotICAg
ICAgICAgICAgICAgIGJhY2tpbmdTdG9yZUNsaWVudC0+c2V0SXNTY3JvbGxOb3RpZmljYXRpb25T
dXBwcmVzc2VkKGZhbHNlKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBUcnkgc2Nyb2xsaW5nIHRoZSBub2RlIG9m
IHRoZSBlbmNsb3NpbmcgZnJhbWUuCi0gICAgRnJhbWUqIGZyYW1lID0gbm9kZS0+ZG9jdW1lbnQo
KS0+ZnJhbWUoKTsKLSAgICBpZiAoZnJhbWUpIHsKLSAgICAgICAgTm9kZSogb3duZXJOb2RlID0g
ZnJhbWUtPm93bmVyRWxlbWVudCgpOwotICAgICAgICBpZiAoc2Nyb2xsTm9kZVJlY3Vyc2l2ZWx5
KG93bmVyTm9kZSwgZGVsdGEpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFdlYlBhZ2VQcml2YXRlOjphZGp1c3RTY3JvbGxE
ZWx0YShjb25zdCBJbnRQb2ludCYgbWF4T2Zmc2V0LCBjb25zdCBJbnRQb2ludCYgY3VycmVudE9m
ZnNldCwgSW50U2l6ZSYgZGVsdGEpIGNvbnN0Ci17Ci0gICAgaWYgKGN1cnJlbnRPZmZzZXQueCgp
ICsgZGVsdGEud2lkdGgoKSA+IG1heE9mZnNldC54KCkpCi0gICAgICAgIGRlbHRhLnNldFdpZHRo
KG1pbihtYXhPZmZzZXQueCgpIC0gY3VycmVudE9mZnNldC54KCksIGRlbHRhLndpZHRoKCkpKTsK
LQotICAgIGlmIChjdXJyZW50T2Zmc2V0LngoKSArIGRlbHRhLndpZHRoKCkgPCAwKQotICAgICAg
ICBkZWx0YS5zZXRXaWR0aChtYXgoLWN1cnJlbnRPZmZzZXQueCgpLCBkZWx0YS53aWR0aCgpKSk7
Ci0KLSAgICBpZiAoY3VycmVudE9mZnNldC55KCkgKyBkZWx0YS5oZWlnaHQoKSA+IG1heE9mZnNl
dC55KCkpCi0gICAgICAgIGRlbHRhLnNldEhlaWdodChtaW4obWF4T2Zmc2V0LnkoKSAtIGN1cnJl
bnRPZmZzZXQueSgpLCBkZWx0YS5oZWlnaHQoKSkpOwotCi0gICAgaWYgKGN1cnJlbnRPZmZzZXQu
eSgpICsgZGVsdGEuaGVpZ2h0KCkgPCAwKQotICAgICAgICBkZWx0YS5zZXRIZWlnaHQobWF4KC1j
dXJyZW50T2Zmc2V0LnkoKSwgZGVsdGEuaGVpZ2h0KCkpKTsKLX0KLQotc3RhdGljIE5vZGUqIGVu
Y2xvc2luZ0xheWVyTm9kZShSZW5kZXJMYXllciopOwotCi1ib29sIFdlYlBhZ2VQcml2YXRlOjpz
Y3JvbGxSZW5kZXJlcihSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBJbnRTaXplJiBkZWx0
YSkKLXsKLSAgICBSZW5kZXJMYXllciogbGF5ZXIgPSByZW5kZXJlci0+ZW5jbG9zaW5nTGF5ZXIo
KTsKLSAgICBpZiAoIWxheWVyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBUcnkg
dG8gc2Nyb2xsIGxheWVyLgotICAgIGJvb2wgcmVzdHJpY3RlZEJ5TGluZUNsYW1wID0gZmFsc2U7
Ci0gICAgaWYgKHJlbmRlcmVyLT5wYXJlbnQoKSkKLSAgICAgICAgcmVzdHJpY3RlZEJ5TGluZUNs
YW1wID0gIXJlbmRlcmVyLT5wYXJlbnQoKS0+c3R5bGUoKS0+bGluZUNsYW1wKCkuaXNOb25lKCk7
Ci0KLSAgICBpZiAocmVuZGVyZXItPmhhc092ZXJmbG93Q2xpcCgpICYmICFyZXN0cmljdGVkQnlM
aW5lQ2xhbXApIHsKLSAgICAgICAgSW50U2l6ZSBsYXllckRlbHRhID0gZGVsdGE7Ci0gICAgICAg
IEludFBvaW50IG1heE9mZnNldChsYXllci0+c2Nyb2xsV2lkdGgoKSAtIGxheWVyLT5yZW5kZXJC
b3goKS0+Y2xpZW50V2lkdGgoKSwgbGF5ZXItPnNjcm9sbEhlaWdodCgpIC0gbGF5ZXItPnJlbmRl
ckJveCgpLT5jbGllbnRIZWlnaHQoKSk7Ci0gICAgICAgIEludFBvaW50IGN1cnJlbnRPZmZzZXQo
bGF5ZXItPnNjcm9sbFhPZmZzZXQoKSwgbGF5ZXItPnNjcm9sbFlPZmZzZXQoKSk7Ci0gICAgICAg
IGFkanVzdFNjcm9sbERlbHRhKG1heE9mZnNldCwgY3VycmVudE9mZnNldCwgbGF5ZXJEZWx0YSk7
Ci0gICAgICAgIGlmICghbGF5ZXJEZWx0YS5pc1plcm8oKSkgewotICAgICAgICAgICAgbV9pblJl
Z2lvblNjcm9sbFN0YXJ0aW5nTm9kZSA9IGVuY2xvc2luZ0xheWVyTm9kZShsYXllcik7Ci0gICAg
ICAgICAgICBJbnRQb2ludCBuZXdPZmZzZXQgPSBjdXJyZW50T2Zmc2V0ICsgbGF5ZXJEZWx0YTsK
LSAgICAgICAgICAgIGxheWVyLT5zY3JvbGxUb09mZnNldCh0b1NpemUobmV3T2Zmc2V0KSk7Ci0g
ICAgICAgICAgICByZW5kZXJlci0+cmVwYWludCh0cnVlKTsKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgd2hpbGUgKGxheWVyID0gbGF5ZXItPnBhcmVu
dCgpKSB7Ci0gICAgICAgIGlmIChjYW5TY3JvbGxSZW5kZXJCb3gobGF5ZXItPnJlbmRlckJveCgp
KSkKLSAgICAgICAgICAgIHJldHVybiBzY3JvbGxSZW5kZXJlcihsYXllci0+cmVuZGVyQm94KCks
IGRlbHRhKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIHN0YXRpYyB2b2lkIGhh
bmRsZVNjcm9sbGluZyh1bnNpZ25lZCBzaG9ydCBjaGFyYWN0ZXIsIFdlYlBhZ2VQcml2YXRlKiBz
Y3JvbGxlcikKIHsKICAgICBjb25zdCBpbnQgc2Nyb2xsRmFjdG9yID0gMjA7CkBAIC00Nzc1LDE2
OSArNDY1MSw2IEBAIHZvaWQgV2ViUGFnZTo6c2VsZWN0QXRQb2ludChjb25zdCBQbGF0Zm9ybTo6
SW50UG9pbnQmIGxvY2F0aW9uKQogICAgIGQtPm1fc2VsZWN0aW9uSGFuZGxlci0+c2VsZWN0QXRQ
b2ludChzZWxlY3Rpb25Mb2NhdGlvbik7CiB9CiAKLS8vIEZJWE1FOiBNb3ZlIHRvIERPTVN1cHBv
cnQuCi1ib29sIFdlYlBhZ2VQcml2YXRlOjpjYW5TY3JvbGxJbm5lckZyYW1lKEZyYW1lKiBmcmFt
ZSkgY29uc3QKLXsKLSAgICBpZiAoIWZyYW1lIHx8ICFmcmFtZS0+dmlldygpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBOb3QgaGF2aW5nIGFuIG93bmVyIGVsZW1lbnQgbWVhbnMg
dGhhdCB3ZSBhcmUgb24gdGhlIG1haW5mcmFtZS4KLSAgICBpZiAoIWZyYW1lLT5vd25lckVsZW1l
bnQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQVNTRVJUKGZyYW1lICE9IG1fbWFp
bkZyYW1lKTsKLQotICAgIEludFNpemUgdmlzaWJsZVNpemUgPSBmcmFtZS0+dmlldygpLT52aXNp
YmxlQ29udGVudFJlY3QoKS5zaXplKCk7Ci0gICAgSW50U2l6ZSBjb250ZW50c1NpemUgPSBmcmFt
ZS0+dmlldygpLT5jb250ZW50c1NpemUoKTsKLQotICAgIGJvb2wgY2FuQmVTY3JvbGxlZCA9IGNv
bnRlbnRzU2l6ZS5oZWlnaHQoKSA+IHZpc2libGVTaXplLmhlaWdodCgpIHx8IGNvbnRlbnRzU2l6
ZS53aWR0aCgpID4gdmlzaWJsZVNpemUud2lkdGgoKTsKLQotICAgIC8vIExldHMgYWxzbyBjb25z
aWRlciB0aGUgJ292ZXJmbG93LXt4LHl9IHByb3BlcnR5IHNldCBkaXJlY3RseSB0byB0aGUge2l9
ZnJhbWUgdGFnLgotICAgIHJldHVybiBjYW5CZVNjcm9sbGVkICYmIChmcmFtZS0+b3duZXJFbGVt
ZW50KCktPnNjcm9sbGluZ01vZGUoKSAhPSBTY3JvbGxiYXJBbHdheXNPZmYpOwotfQotCi0vLyBU
aGUgUmVuZGVyQm94OjpjYW5iZVNjcm9sbGVkQW5kSGFzU2Nyb2xsYWJsZUFyZWEgbWV0aG9kIHJl
dHVybnMgdHJ1ZSBmb3IgdGhlCi0vLyBmb2xsb3dpbmcgc2NlbmFyaW8sIGZvciBleGFtcGxlOgot
Ly8gKDEpIGEgZGl2IHRoYXQgaGFzIGEgdmVydGljYWwgb3ZlcmZsb3cgYnV0IG5vIGhvcml6b250
YWwgb3ZlcmZsb3cKLS8vICAgICB3aXRoIG92ZXJmbG93LXk6IGhpZGRlbiBhbmQgb3ZlcmZsb3ct
eDogYXV0byBzZXQuCi0vLyBUaGUgdmVyc2lvbiBiZWxvdyBmaXhlcyBpdC4KLS8vIEZJWE1FOiBG
aXggUmVuZGVyQm94OjpjYW5CZVNjcm9sbGVkQW5kSGFzU2Nyb2xsYWJsZUFyZWEgbWV0aG9kIGlu
c3RlYWQuCi1ib29sIFdlYlBhZ2VQcml2YXRlOjpjYW5TY3JvbGxSZW5kZXJCb3goUmVuZGVyQm94
KiBib3gpCi17Ci0gICAgaWYgKCFib3ggfHwgIWJveC0+aGFzT3ZlcmZsb3dDbGlwKCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChib3gtPnNjcm9sbHNPdmVyZmxvd1goKSAmJiAo
Ym94LT5zY3JvbGxXaWR0aCgpICE9IGJveC0+Y2xpZW50V2lkdGgoKSkKLSAgICAgICAgfHwgYm94
LT5zY3JvbGxzT3ZlcmZsb3dZKCkgJiYgKGJveC0+c2Nyb2xsSGVpZ2h0KCkgIT0gYm94LT5jbGll
bnRIZWlnaHQoKSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgTm9kZSogbm9kZSA9IGJv
eC0+bm9kZSgpOwotICAgIHJldHVybiBub2RlICYmIChub2RlLT5yZW5kZXJlcklzRWRpdGFibGUo
KSB8fCBub2RlLT5pc0RvY3VtZW50Tm9kZSgpKTsKLX0KLQotc3RhdGljIFJlbmRlckxheWVyKiBw
YXJlbnRMYXllcihSZW5kZXJMYXllciogbGF5ZXIpCi17Ci0gICAgQVNTRVJUKGxheWVyKTsKLSAg
ICBpZiAobGF5ZXItPnBhcmVudCgpKQotICAgICAgICByZXR1cm4gbGF5ZXItPnBhcmVudCgpOwot
Ci0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGxheWVyLT5yZW5kZXJlcigpOwotICAgIGlm
IChyZW5kZXJlci0+ZG9jdW1lbnQoKSAmJiByZW5kZXJlci0+ZG9jdW1lbnQoKS0+b3duZXJFbGVt
ZW50KCkgJiYgcmVuZGVyZXItPmRvY3VtZW50KCktPm93bmVyRWxlbWVudCgpLT5yZW5kZXJlcigp
KQotICAgICAgICByZXR1cm4gcmVuZGVyZXItPmRvY3VtZW50KCktPm93bmVyRWxlbWVudCgpLT5y
ZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLS8vIEZJ
WE1FOiBNYWtlIFJlbmRlckxheWVyOjplbmNsb3NpbmdFbGVtZW50IHB1YmxpYyBzbyB0aGlzIG9u
ZSBjYW4gYmUgcmVtb3ZlZC4KLXN0YXRpYyBOb2RlKiBlbmNsb3NpbmdMYXllck5vZGUoUmVuZGVy
TGF5ZXIqIGxheWVyKQotewotICAgIGZvciAoUmVuZGVyT2JqZWN0KiByID0gbGF5ZXItPnJlbmRl
cmVyKCk7IHI7IHIgPSByLT5wYXJlbnQoKSkgewotICAgICAgICBpZiAoTm9kZSogZSA9IHItPm5v
ZGUoKSkKLSAgICAgICAgICAgIHJldHVybiBlOwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgcHVzaEJhY2tJblJlZ2lvblNj
cm9sbGFibGUoc3RkOjp2ZWN0b3I8UGxhdGZvcm06OlNjcm9sbFZpZXdCYXNlKj4mIHZlY3Rvciwg
SW5SZWdpb25TY3JvbGxhYmxlQXJlYSogc2Nyb2xsZXIsIFdlYlBhZ2VQcml2YXRlKiB3ZWJQYWdl
KQotewotICAgIEFTU0VSVCh3ZWJQYWdlKTsKLSAgICBBU1NFUlQoIXNjcm9sbGVyLmlzTnVsbCgp
KTsKLQotICAgIHNjcm9sbGVyLT5zZXRDYW5Qcm9wYWdhdGVTY3JvbGxpbmdUb0VuY2xvc2luZ1Nj
cm9sbGFibGUoIWlzTm9uUmVuZGVyVmlld0ZpeGVkUG9zaXRpb25lZENvbnRhaW5lcihzY3JvbGxl
ci0+bGF5ZXIoKSkpOwotICAgIHZlY3Rvci5wdXNoX2JhY2soc2Nyb2xsZXIpOwotICAgIGlmICh2
ZWN0b3Iuc2l6ZSgpID09IDEpIHsKLSAgICAgICAgLy8gRklYTUU6IFVzZSBSZW5kZXJMYXllcjo6
cmVuZGVyQm94KCktPm5vZGUoKSBpbnN0ZWFkPwotICAgICAgICB3ZWJQYWdlLT5tX2luUmVnaW9u
U2Nyb2xsU3RhcnRpbmdOb2RlID0gZW5jbG9zaW5nTGF5ZXJOb2RlKHNjcm9sbGVyLT5sYXllcigp
KTsKLSAgICB9Ci19Ci0KLXN0ZDo6dmVjdG9yPFBsYXRmb3JtOjpTY3JvbGxWaWV3QmFzZSo+IFdl
YlBhZ2VQcml2YXRlOjppblJlZ2lvblNjcm9sbGFibGVBcmVhc0ZvclBvaW50KGNvbnN0IFBsYXRm
b3JtOjpJbnRQb2ludCYgcG9pbnQpCi17Ci0gICAgc3RkOjp2ZWN0b3I8UGxhdGZvcm06OlNjcm9s
bFZpZXdCYXNlKj4gdmFsaWRSZXR1cm47Ci0gICAgc3RkOjp2ZWN0b3I8UGxhdGZvcm06OlNjcm9s
bFZpZXdCYXNlKj4gZW1wdHlSZXR1cm47Ci0KLSAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdCA9IG1f
bWFpbkZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGl0VGVzdFJlc3VsdEF0UG9pbnQobWFwRnJvbVZp
ZXdwb3J0VG9Db250ZW50cyhwb2ludCksIGZhbHNlIC8qYWxsb3dTaGFkb3dDb250ZW50Ki8pOwot
ICAgIE5vZGUqIG5vZGUgPSByZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCk7Ci0gICAgaWYgKCFu
b2RlKQotICAgICAgICByZXR1cm4gZW1wdHlSZXR1cm47Ci0KLSAgICBSZW5kZXJPYmplY3QqIHJl
bmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKLSAgICAvLyBGSVhNRTogVmFsaWRhdGUgd2l0aCBl
bGVtZW50cyB3aXRoIHZpc2liaWxpdHk6aGlkZGVuLgotICAgIGlmICghcmVuZGVyZXIpCi0gICAg
ICAgIHJldHVybiBlbXB0eVJldHVybjsKLQotICAgIFJlbmRlckxheWVyKiBsYXllciA9IHJlbmRl
cmVyLT5lbmNsb3NpbmdMYXllcigpOwotICAgIGRvIHsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlciA9IGxheWVyLT5yZW5kZXJlcigpOwotCi0gICAgICAgIGlmIChyZW5kZXJlci0+aXNS
ZW5kZXJWaWV3KCkpIHsKLSAgICAgICAgICAgIGlmIChSZW5kZXJWaWV3KiByZW5kZXJWaWV3ID0g
dG9SZW5kZXJWaWV3KHJlbmRlcmVyKSkgewotICAgICAgICAgICAgICAgIEZyYW1lVmlldyogdmll
dyA9IHJlbmRlclZpZXctPmZyYW1lVmlldygpOwotICAgICAgICAgICAgICAgIGlmICghdmlldykK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVtcHR5UmV0dXJuOwotCi0gICAgICAgICAgICAg
ICAgaWYgKGNhblNjcm9sbElubmVyRnJhbWUodmlldy0+ZnJhbWUoKSkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgcHVzaEJhY2tJblJlZ2lvblNjcm9sbGFibGUodmFsaWRSZXR1cm4sIG5ldyBJblJl
Z2lvblNjcm9sbGFibGVBcmVhKHRoaXMsIGxheWVyKSwgdGhpcyk7Ci0gICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
fSBlbHNlIGlmIChjYW5TY3JvbGxSZW5kZXJCb3gobGF5ZXItPnJlbmRlckJveCgpKSkgewotICAg
ICAgICAgICAgcHVzaEJhY2tJblJlZ2lvblNjcm9sbGFibGUodmFsaWRSZXR1cm4sIG5ldyBJblJl
Z2lvblNjcm9sbGFibGVBcmVhKHRoaXMsIGxheWVyKSwgdGhpcyk7Ci0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIElmIHdlIHJ1biBpbnRvIGEgZml4IHBvc2l0
aW9uZWQgbGF5ZXIsIHNldCB0aGUgbGFzdCBzY3JvbGxhYmxlIGluLXJlZ2lvbiBvYmplY3QKLSAg
ICAgICAgLy8gYXMgbm90IGFibGUgdG8gcHJvcGFnYXRlIHNjcm9sbCB0byBpdHMgcGFyZW50IHNj
cm9sbGFibGUuCi0gICAgICAgIGlmIChpc05vblJlbmRlclZpZXdGaXhlZFBvc2l0aW9uZWRDb250
YWluZXIobGF5ZXIpICYmIHZhbGlkUmV0dXJuLnNpemUoKSkgewotICAgICAgICAgICAgUGxhdGZv
cm06OlNjcm9sbFZpZXdCYXNlKiBlbmQgPSB2YWxpZFJldHVybi5iYWNrKCk7Ci0gICAgICAgICAg
ICBlbmQtPnNldENhblByb3BhZ2F0ZVNjcm9sbGluZ1RvRW5jbG9zaW5nU2Nyb2xsYWJsZShmYWxz
ZSk7Ci0gICAgICAgIH0KLQotICAgIH0gd2hpbGUgKGxheWVyID0gcGFyZW50TGF5ZXIobGF5ZXIp
KTsKLQotICAgIGlmICh2YWxpZFJldHVybi5lbXB0eSgpKQotICAgICAgICByZXR1cm4gZW1wdHlS
ZXR1cm47Ci0KLSAgICAvLyBQb3N0LWNhbGN1bGF0ZSB0aGUgdmlzaWJsZSB3aW5kb3cgcmVjdHMg
aW4gcmV2ZXJzZSBoaXQgdGVzdCBvcmRlciBzbwotICAgIC8vIHdlIGFjY291bnQgZm9yIGFsbCBh
bmQgYW55IGNsaXBwaW5nIHJlY3RzLgotICAgIFdlYkNvcmU6OkludFJlY3QgcmVjdXJzaXZlQ2xp
cHBpbmdSZWN0KFdlYkNvcmU6OkludFBvaW50Ojp6ZXJvKCksIHRyYW5zZm9ybWVkVmlld3BvcnRT
aXplKCkpOwotCi0gICAgc3RkOjp2ZWN0b3I8UGxhdGZvcm06OlNjcm9sbFZpZXdCYXNlKj46OnJl
dmVyc2VfaXRlcmF0b3IgcmVuZCA9IHZhbGlkUmV0dXJuLnJlbmQoKTsKLSAgICBmb3IgKHN0ZDo6
dmVjdG9yPFBsYXRmb3JtOjpTY3JvbGxWaWV3QmFzZSo+OjpyZXZlcnNlX2l0ZXJhdG9yIHJpdCA9
IHZhbGlkUmV0dXJuLnJiZWdpbigpOyByaXQgIT0gcmVuZDsgKytyaXQpIHsKLQotICAgICAgICBJ
blJlZ2lvblNjcm9sbGFibGVBcmVhKiBjdXJyID0gc3RhdGljX2Nhc3Q8SW5SZWdpb25TY3JvbGxh
YmxlQXJlYSo+KCpyaXQpOwotICAgICAgICBSZW5kZXJMYXllciogbGF5ZXIgPSBjdXJyLT5sYXll
cigpOwotCi0gICAgICAgIGlmIChsYXllciAmJiBsYXllci0+cmVuZGVyZXIoKS0+aXNSZW5kZXJW
aWV3KCkpIHsgLy8gI2RvY3VtZW50IGNhc2UKLSAgICAgICAgICAgIEZyYW1lVmlldyogdmlldyA9
IHRvUmVuZGVyVmlldyhsYXllci0+cmVuZGVyZXIoKSktPmZyYW1lVmlldygpOwotICAgICAgICAg
ICAgQVNTRVJUKHZpZXcpOwotICAgICAgICAgICAgQVNTRVJUKGNhblNjcm9sbElubmVyRnJhbWUo
dmlldy0+ZnJhbWUoKSkpOwotCi0gICAgICAgICAgICBXZWJDb3JlOjpJbnRSZWN0IGZyYW1lV2lu
ZG93UmVjdCA9IG1hcFRvVHJhbnNmb3JtZWQoZ2V0UmVjdXJzaXZlVmlzaWJsZVdpbmRvd1JlY3Qo
dmlldykpOwotICAgICAgICAgICAgZnJhbWVXaW5kb3dSZWN0LmludGVyc2VjdChyZWN1cnNpdmVD
bGlwcGluZ1JlY3QpOwotICAgICAgICAgICAgY3Vyci0+c2V0VmlzaWJsZVdpbmRvd1JlY3QoZnJh
bWVXaW5kb3dSZWN0KTsKLSAgICAgICAgICAgIHJlY3Vyc2l2ZUNsaXBwaW5nUmVjdCA9IGZyYW1l
V2luZG93UmVjdDsKLQotICAgICAgICB9IGVsc2UgeyAvLyBSZW5kZXJCb3gtYmFzZWQgZWxlbWVu
dHMgY2FzZSAoc2Nyb2xsYWJsZSBib3hlcyAoZGl2J3MsIHAncywgdGV4dGFyZWEncywgZXRjKSku
Ci0KLSAgICAgICAgICAgIFJlbmRlckJveCogYm94ID0gbGF5ZXItPnJlbmRlckJveCgpOwotICAg
ICAgICAgICAgQVNTRVJUKGJveCk7Ci0gICAgICAgICAgICBBU1NFUlQoY2FuU2Nyb2xsUmVuZGVy
Qm94KGJveCkpOwotCi0gICAgICAgICAgICBXZWJDb3JlOjpJbnRSZWN0IHZpc2libGVXaW5kb3dS
ZWN0ID0gYm94LT5hYnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3QoKTsKLSAgICAgICAgICAgIHZp
c2libGVXaW5kb3dSZWN0ID0gYm94LT5mcmFtZSgpLT52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3co
dmlzaWJsZVdpbmRvd1JlY3QpOwotICAgICAgICAgICAgdmlzaWJsZVdpbmRvd1JlY3QgPSBtYXBU
b1RyYW5zZm9ybWVkKHZpc2libGVXaW5kb3dSZWN0KTsKLSAgICAgICAgICAgIHZpc2libGVXaW5k
b3dSZWN0LmludGVyc2VjdChyZWN1cnNpdmVDbGlwcGluZ1JlY3QpOwotCi0gICAgICAgICAgICBj
dXJyLT5zZXRWaXNpYmxlV2luZG93UmVjdCh2aXNpYmxlV2luZG93UmVjdCk7Ci0gICAgICAgICAg
ICByZWN1cnNpdmVDbGlwcGluZ1JlY3QgPSB2aXNpYmxlV2luZG93UmVjdDsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIHJldHVybiB2YWxpZFJldHVybjsKLX0KLQogQmFja2luZ1N0b3JlKiBXZWJQ
YWdlOjpiYWNraW5nU3RvcmUoKSBjb25zdAogewogICAgIHJldHVybiBkLT5tX2JhY2tpbmdTdG9y
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFnZV9wLmgg
Yi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2VfcC5oCmluZGV4IGNlZjUzZjcu
LmU5ZDNjZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFn
ZV9wLmgKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJQYWdlX3AuaApAQCAt
MjIsNiArMjIsOCBAQAogI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgogI2luY2x1ZGUgIkluc3Bl
Y3RvckNsaWVudEJsYWNrQmVycnkuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JPdmVybGF5LmgiCisj
aW5jbHVkZSAiSW5zcGVjdG9yT3ZlcmxheS5oIgorI2luY2x1ZGUgIkluUmVnaW9uU2Nyb2xsZXIu
aCIKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAjaW5jbHVkZSAiR0xFUzJDb250
ZXh0LmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlci5oIgpAQCAtMTQzLDcgKzE0NSw2IEBAIHB1
YmxpYzoKICAgICBib29sIHNjcm9sbEJ5KGludCBkZWx0YVgsIGludCBkZWx0YVksIGJvb2wgc2Ny
b2xsTWFpbkZyYW1lID0gdHJ1ZSk7CiAKICAgICB2b2lkIGVucXVldWVSZW5kZXJpbmdPZkNsaXBw
ZWRDb250ZW50T2ZTY3JvbGxhYmxlTm9kZUFmdGVySW5SZWdpb25TY3JvbGxpbmcoV2ViQ29yZTo6
Tm9kZSopOwotICAgIHN0ZDo6dmVjdG9yPFBsYXRmb3JtOjpTY3JvbGxWaWV3QmFzZSo+IGluUmVn
aW9uU2Nyb2xsYWJsZUFyZWFzRm9yUG9pbnQoY29uc3QgUGxhdGZvcm06OkludFBvaW50Jik7CiAg
ICAgdm9pZCBub3RpZnlJblJlZ2lvblNjcm9sbFN0YXR1c0NoYW5nZWQoYm9vbCBzdGF0dXMpOwog
ICAgIHZvaWQgc2V0U2Nyb2xsT3JpZ2luUG9pbnQoY29uc3QgUGxhdGZvcm06OkludFBvaW50Jik7
CiAgICAgdm9pZCBzZXRIYXNJblJlZ2lvblNjcm9sbGFibGVBcmVhcyhib29sKTsKQEAgLTMzMCwx
MyArMzMxLDYgQEAgcHVibGljOgogICAgIFdlYkNvcmU6OkZyYW1lKiBmb2N1c2VkT3JNYWluRnJh
bWUoKSBjb25zdDsKICAgICBXZWJDb3JlOjpGcmFtZSogbWFpbkZyYW1lKCkgY29uc3QgeyByZXR1
cm4gbV9tYWluRnJhbWU7IH0KIAotICAgIGJvb2wgc2Nyb2xsTm9kZVJlY3Vyc2l2ZWx5KFdlYkNv
cmU6Ok5vZGUqIG9yaWdpbmFsTm9kZSwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgZGVsdGEpOwot
ICAgIGJvb2wgc2Nyb2xsUmVuZGVyZXIoV2ViQ29yZTo6UmVuZGVyT2JqZWN0KiByZW5kZXJlciwg
Y29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgZGVsdGEpOwotICAgIHZvaWQgYWRqdXN0U2Nyb2xsRGVs
dGEoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIG1heE9mZnNldCwgY29uc3QgV2ViQ29yZTo6SW50
UG9pbnQmIGN1cnJlbnRPZmZzZXQsIFdlYkNvcmU6OkludFNpemUmIGRlbHRhKSBjb25zdDsKLQot
ICAgIGJvb2wgY2FuU2Nyb2xsUmVuZGVyQm94KFdlYkNvcmU6OlJlbmRlckJveCopOwotICAgIGJv
b2wgY2FuU2Nyb2xsSW5uZXJGcmFtZShXZWJDb3JlOjpGcmFtZSopIGNvbnN0OwotCiAjaWYgRU5B
QkxFKEVWRU5UX01PREVfTUVUQVRBR1MpCiAgICAgdm9pZCBkaWRSZWNlaXZlQ3Vyc29yRXZlbnRN
b2RlKFdlYkNvcmU6OkN1cnNvckV2ZW50TW9kZSk7CiAgICAgdm9pZCBkaWRSZWNlaXZlVG91Y2hF
dmVudE1vZGUoV2ViQ29yZTo6VG91Y2hFdmVudE1vZGUpOwpAQCAtNTU2LDcgKzU1MCw3IEBAIHB1
YmxpYzoKIAogICAgIEhhc2hTZXQ8V2ViQ29yZTo6UGx1Z2luVmlldyo+IG1fcGx1Z2luVmlld3M7
CiAKLSAgICBSZWZQdHI8V2ViQ29yZTo6Tm9kZT4gbV9pblJlZ2lvblNjcm9sbFN0YXJ0aW5nTm9k
ZTsKKyAgICBPd25QdHI8SW5SZWdpb25TY3JvbGxlcj4gbV9pblJlZ2lvblNjcm9sbGVyOwogCiAj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIGJvb2wgbV9pc0FjY2VsZXJhdGVk
Q29tcG9zaXRpbmdBY3RpdmU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkv
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5nZUxvZwppbmRleCA1ODIx
ZTdmLi5iNmZkYjY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1
NSBAQAorMjAxMi0wOC0wMSAgQW50b25pbyBHb21lcyAgPGFnb21lc0ByaW0uY29tPgorCisgICAg
ICAgIFtCbGFja0JlcnJ5XSBJbXBsZW1lbnQgSW5SZWdpb25TY3JvbGxlciBjbGFzcyBhcyBhIGlu
LXJlZ2lvbiBzY3JvbGwgY29udHJvbGxlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9OTI4ODkKKyAgICAgICAgUFIgIzE4NjU4NworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmVkIGFsbCBpbi1yZWdpb24g
c2Nyb2xsaW5nIGNvZGUgb3V0IG9mIFdlYlBhZ2VQcml2YXRlIHRvIHRoZSBqdXN0CisgICAgICAg
IGNyZWF0ZWQgSW5SZWdpb25TY3JvbGxlciBjbGFzcy4gVGhpcyBjbGFzcyBhaW1zIHRvOgorCisg
ICAgICAgIDEpIENlbnRyYWxpemUgYWxsIGluLXJlZ2lvbiBzY3JvbGwgY29kZSBhbmQgY2xlYW4g
dXAgV2ViUGFnZVByaXZhdGUgYXMgYSBjb25zZXF1ZW5jZS4KKyAgICAgICAgMikgQmUgdGhlIGJh
c2VzIHRvIGFkZCBVSS9Db21wb3NpdGluZyB0aHJlYWQgZHJpdmVuIHNjcm9sbHMgdG8gaW4tcmVn
aW9uLgorCisgICAgICAgIFRoZSBwYXRjaCBkb2VzIG5vdCBjaGFuZ2UgYW55IGZ1bmN0aW9uYWxs
aXR5IGNoYW5nZS4KKworICAgICAgICAqIEFwaS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKEJsYWNr
QmVycnk6OldlYktpdDo6V2ViUGFnZVByaXZhdGU6OldlYlBhZ2VQcml2YXRlKToKKyAgICAgICAg
KEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFnZVByaXZhdGU6OmluaXQpOgorICAgICAgICAoQmxh
Y2tCZXJyeTo6V2ViS2l0OjpXZWJQYWdlUHJpdmF0ZTo6c2Nyb2xsQnkpOgorICAgICAgICAoQmxh
Y2tCZXJyeTo6V2ViS2l0OjpXZWJQYWdlUHJpdmF0ZTo6bm90aWZ5SW5SZWdpb25TY3JvbGxTdGF0
dXNDaGFuZ2VkKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFnZVByaXZhdGU6
OmNsZWFyRG9jdW1lbnREYXRhKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFn
ZVByaXZhdGU6OnNldFNjcm9sbE9yaWdpblBvaW50KToKKyAgICAgICAgKiBBcGkvV2ViUGFnZV9w
Lmg6CisgICAgICAgIChXZWJQYWdlUHJpdmF0ZSk6CisgICAgICAgICogV2ViS2l0U3VwcG9ydC9J
blJlZ2lvblNjcm9sbGFibGVBcmVhLmNwcDoKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6
SW5SZWdpb25TY3JvbGxhYmxlQXJlYTo6bGF5ZXIpOgorICAgICAgICAqIFdlYktpdFN1cHBvcnQv
SW5SZWdpb25TY3JvbGxlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAg
KEJsYWNrQmVycnk6OldlYktpdDo6Y2FuU2Nyb2xsSW5uZXJGcmFtZSk6CisgICAgICAgIChCbGFj
a0JlcnJ5OjpXZWJLaXQ6OmNhblNjcm9sbFJlbmRlckJveCk6CisgICAgICAgIChCbGFja0JlcnJ5
OjpXZWJLaXQ6OnBhcmVudExheWVyKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6ZW5j
bG9zaW5nTGF5ZXJOb2RlKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6aXNOb25SZW5k
ZXJWaWV3Rml4ZWRQb3NpdGlvbmVkQ29udGFpbmVyKToKKyAgICAgICAgKEJsYWNrQmVycnk6Oldl
YktpdDo6cHVzaEJhY2tJblJlZ2lvblNjcm9sbGFibGUpOgorICAgICAgICAoQmxhY2tCZXJyeTo6
V2ViS2l0OjpJblJlZ2lvblNjcm9sbGVyOjpJblJlZ2lvblNjcm9sbGVyKToKKyAgICAgICAgKEJs
YWNrQmVycnk6OldlYktpdDo6SW5SZWdpb25TY3JvbGxlcjo6c2V0Tm9kZSk6CisgICAgICAgIChC
bGFja0JlcnJ5OjpXZWJLaXQ6OkluUmVnaW9uU2Nyb2xsZXI6Om5vZGUpOgorICAgICAgICAoQmxh
Y2tCZXJyeTo6V2ViS2l0OjpJblJlZ2lvblNjcm9sbGVyOjpyZXNldCk6CisgICAgICAgIChCbGFj
a0JlcnJ5OjpXZWJLaXQ6OkluUmVnaW9uU2Nyb2xsZXI6OmlzTnVsbCk6CisgICAgICAgIChCbGFj
a0JlcnJ5OjpXZWJLaXQ6OkluUmVnaW9uU2Nyb2xsZXI6OnNjcm9sbEJ5KToKKyAgICAgICAgKEJs
YWNrQmVycnk6OldlYktpdDo6SW5SZWdpb25TY3JvbGxlcjo6aW5SZWdpb25TY3JvbGxhYmxlQXJl
YXNGb3JQb2ludCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkluUmVnaW9uU2Nyb2xs
ZXI6OnNjcm9sbE5vZGVSZWN1cnNpdmVseSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6
OkluUmVnaW9uU2Nyb2xsZXI6OnNjcm9sbFJlbmRlcmVyKToKKyAgICAgICAgKEJsYWNrQmVycnk6
OldlYktpdDo6SW5SZWdpb25TY3JvbGxlcjo6YWRqdXN0U2Nyb2xsRGVsdGEpOgorICAgICAgICAq
IFdlYktpdFN1cHBvcnQvSW5SZWdpb25TY3JvbGxlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKEluUmVnaW9uU2Nyb2xsZXIpOgorICAg
ICAgICAqIFdlYktpdFN1cHBvcnQvVG91Y2hFdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoQmxh
Y2tCZXJyeTo6V2ViS2l0OjpUb3VjaEV2ZW50SGFuZGxlcjo6ZHJhd1RhcEhpZ2hsaWdodCk6CisK
IDIwMTItMDgtMDEgIENoYXJsZXMgV2VpICA8Y2hhcmxlcy53ZWlAdG9yY2htb2JpbGUuY29tLmNu
PgogCiAgICAgICAgIFtCbGFja0JlcnJ5XSBGYXZpY29uIHNob3VsZCBiZSBCYXNlNjQgZW5jb2Rl
ZCBmb3IgY3Jvc3MtcHJvY2VzcyBwYXNzaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Js
YWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JblJlZ2lvblNjcm9sbGFibGVBcmVhLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0luUmVnaW9uU2Nyb2xsYWJsZUFyZWEu
Y3BwCmluZGV4IGY1OGNhZTguLjc2YTk4MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9XZWJLaXRTdXBwb3J0L0luUmVnaW9uU2Nyb2xsYWJsZUFyZWEuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0luUmVnaW9uU2Nyb2xsYWJsZUFy
ZWEuY3BwCkBAIC0yMCw3ICsyMCw2IEBACiAjaW5jbHVkZSAiSW5SZWdpb25TY3JvbGxhYmxlQXJl
YS5oIgogCiAjaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgog
I2luY2x1ZGUgIlJlbmRlckJveC5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyT2JqZWN0LmgiCkBAIC0xMDQsNiArMTAzLDYgQEAgUmVuZGVyTGF5ZXIqIEluUmVn
aW9uU2Nyb2xsYWJsZUFyZWE6OmxheWVyKCkgY29uc3QKICAgICBBU1NFUlQoIW1faXNOdWxsKTsK
ICAgICByZXR1cm4gbV9sYXllcjsKIH0KLX0KIAogfQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5SZWdpb25TY3JvbGxlci5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JblJlZ2lvblNjcm9sbGVyLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjU0ZDk3Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5SZWdpb25TY3Jv
bGxlci5jcHAKQEAgLTAsMCArMSwzNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIw
MTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAt
MTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluUmVnaW9u
U2Nyb2xsZXIuaCIKKworI2luY2x1ZGUgIkJhY2tpbmdTdG9yZUNsaWVudC5oIgorI2luY2x1ZGUg
IkZyYW1lLmgiCisjaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCisjaW5jbHVkZSAi
SGl0VGVzdFJlc3VsdC5oIgorI2luY2x1ZGUgIkluUmVnaW9uU2Nyb2xsYWJsZUFyZWEuaCIKKyNp
bmNsdWRlICJSZW5kZXJCb3guaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUg
IlJlbmRlck9iamVjdC5oIgorI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKKyNpbmNsdWRlICJXZWJQ
YWdlX3AuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBCbGFja0Jl
cnJ5IHsKK25hbWVzcGFjZSBXZWJLaXQgeworCitzdGF0aWMgYm9vbCBjYW5TY3JvbGxJbm5lckZy
YW1lKEZyYW1lKiBmcmFtZSkKK3sKKyAgICBpZiAoIWZyYW1lIHx8ICFmcmFtZS0+dmlldygpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBOb3QgaGF2aW5nIGFuIG93bmVyIGVsZW1l
bnQgbWVhbnMgdGhhdCB3ZSBhcmUgb24gdGhlIG1haW5mcmFtZS4KKyAgICBpZiAoIWZyYW1lLT5v
d25lckVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQVNTRVJUKGZyYW1l
ICE9IGZyYW1lLT5wYWdlKCktPm1haW5GcmFtZSgpKTsKKworICAgIEludFNpemUgdmlzaWJsZVNp
emUgPSBmcmFtZS0+dmlldygpLT52aXNpYmxlQ29udGVudFJlY3QoKS5zaXplKCk7CisgICAgSW50
U2l6ZSBjb250ZW50c1NpemUgPSBmcmFtZS0+dmlldygpLT5jb250ZW50c1NpemUoKTsKKworICAg
IGJvb2wgY2FuQmVTY3JvbGxlZCA9IGNvbnRlbnRzU2l6ZS5oZWlnaHQoKSA+IHZpc2libGVTaXpl
LmhlaWdodCgpIHx8IGNvbnRlbnRzU2l6ZS53aWR0aCgpID4gdmlzaWJsZVNpemUud2lkdGgoKTsK
KworICAgIC8vIExldHMgYWxzbyBjb25zaWRlciB0aGUgJ292ZXJmbG93LXt4LHl9IHByb3BlcnR5
IHNldCBkaXJlY3RseSB0byB0aGUge2l9ZnJhbWUgdGFnLgorICAgIHJldHVybiBjYW5CZVNjcm9s
bGVkICYmIChmcmFtZS0+b3duZXJFbGVtZW50KCktPnNjcm9sbGluZ01vZGUoKSAhPSBTY3JvbGxi
YXJBbHdheXNPZmYpOworfQorCisvLyBUaGUgUmVuZGVyQm94OjpjYW5iZVNjcm9sbGVkQW5kSGFz
U2Nyb2xsYWJsZUFyZWEgbWV0aG9kIHJldHVybnMgdHJ1ZSBmb3IgdGhlCisvLyBmb2xsb3dpbmcg
c2NlbmFyaW8sIGZvciBleGFtcGxlOgorLy8gKDEpIGEgZGl2IHRoYXQgaGFzIGEgdmVydGljYWwg
b3ZlcmZsb3cgYnV0IG5vIGhvcml6b250YWwgb3ZlcmZsb3cKKy8vICAgICB3aXRoIG92ZXJmbG93
LXk6IGhpZGRlbiBhbmQgb3ZlcmZsb3cteDogYXV0byBzZXQuCisvLyBUaGUgdmVyc2lvbiBiZWxv
dyBmaXhlcyBpdC4KKy8vIEZJWE1FOiBGaXggUmVuZGVyQm94OjpjYW5CZVNjcm9sbGVkQW5kSGFz
U2Nyb2xsYWJsZUFyZWEgbWV0aG9kIGluc3RlYWQuCitzdGF0aWMgYm9vbCBjYW5TY3JvbGxSZW5k
ZXJCb3goUmVuZGVyQm94KiBib3gpCit7CisgICAgaWYgKCFib3ggfHwgIWJveC0+aGFzT3ZlcmZs
b3dDbGlwKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChib3gtPnNjcm9sbHNP
dmVyZmxvd1goKSAmJiAoYm94LT5zY3JvbGxXaWR0aCgpICE9IGJveC0+Y2xpZW50V2lkdGgoKSkK
KyAgICAgICAgfHwgYm94LT5zY3JvbGxzT3ZlcmZsb3dZKCkgJiYgKGJveC0+c2Nyb2xsSGVpZ2h0
KCkgIT0gYm94LT5jbGllbnRIZWlnaHQoKSkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
Tm9kZSogbm9kZSA9IGJveC0+bm9kZSgpOworICAgIHJldHVybiBub2RlICYmIChub2RlLT5yZW5k
ZXJlcklzRWRpdGFibGUoKSB8fCBub2RlLT5pc0RvY3VtZW50Tm9kZSgpKTsKK30KKworc3RhdGlj
IFJlbmRlckxheWVyKiBwYXJlbnRMYXllcihSZW5kZXJMYXllciogbGF5ZXIpCit7CisgICAgQVNT
RVJUKGxheWVyKTsKKyAgICBpZiAobGF5ZXItPnBhcmVudCgpKQorICAgICAgICByZXR1cm4gbGF5
ZXItPnBhcmVudCgpOworCisgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGxheWVyLT5yZW5k
ZXJlcigpOworICAgIGlmIChyZW5kZXJlci0+ZG9jdW1lbnQoKSAmJiByZW5kZXJlci0+ZG9jdW1l
bnQoKS0+b3duZXJFbGVtZW50KCkgJiYgcmVuZGVyZXItPmRvY3VtZW50KCktPm93bmVyRWxlbWVu
dCgpLT5yZW5kZXJlcigpKQorICAgICAgICByZXR1cm4gcmVuZGVyZXItPmRvY3VtZW50KCktPm93
bmVyRWxlbWVudCgpLT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpOworCisgICAgcmV0dXJu
IDA7Cit9CisKKy8vIEZJWE1FOiBNYWtlIFJlbmRlckxheWVyOjplbmNsb3NpbmdFbGVtZW50IHB1
YmxpYyBzbyB0aGlzIG9uZSBjYW4gYmUgcmVtb3ZlZC4KK3N0YXRpYyBOb2RlKiBlbmNsb3NpbmdM
YXllck5vZGUoUmVuZGVyTGF5ZXIqIGxheWVyKQoreworICAgIGZvciAoUmVuZGVyT2JqZWN0KiBy
ID0gbGF5ZXItPnJlbmRlcmVyKCk7IHI7IHIgPSByLT5wYXJlbnQoKSkgeworICAgICAgICBpZiAo
Tm9kZSogZSA9IHItPm5vZGUoKSkKKyAgICAgICAgICAgIHJldHVybiBlOworICAgIH0KKyAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGJvb2wgaXNO
b25SZW5kZXJWaWV3Rml4ZWRQb3NpdGlvbmVkQ29udGFpbmVyKFJlbmRlckxheWVyKiBsYXllcikK
K3sKKyAgICBSZW5kZXJPYmplY3QqIG8gPSBsYXllci0+cmVuZGVyZXIoKTsKKyAgICBpZiAoby0+
aXNSZW5kZXJWaWV3KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBvLT5p
c1Bvc2l0aW9uZWQoKSAmJiBvLT5zdHlsZSgpLT5wb3NpdGlvbigpID09IEZpeGVkUG9zaXRpb247
Cit9CisKK3N0YXRpYyB2b2lkIHB1c2hCYWNrSW5SZWdpb25TY3JvbGxhYmxlKHN0ZDo6dmVjdG9y
PFBsYXRmb3JtOjpTY3JvbGxWaWV3QmFzZSo+JiB2ZWN0b3IsIEluUmVnaW9uU2Nyb2xsYWJsZUFy
ZWEqIHNjcm9sbGFibGVBcmVhLCBJblJlZ2lvblNjcm9sbGVyKiBzY3JvbGxlcikKK3sKKyAgICBB
U1NFUlQod2ViUGFnZSk7CisgICAgQVNTRVJUKCFzY3JvbGxhYmxlQXJlYS0+aXNOdWxsKCkpOwor
CisgICAgc2Nyb2xsYWJsZUFyZWEtPnNldENhblByb3BhZ2F0ZVNjcm9sbGluZ1RvRW5jbG9zaW5n
U2Nyb2xsYWJsZSghaXNOb25SZW5kZXJWaWV3Rml4ZWRQb3NpdGlvbmVkQ29udGFpbmVyKHNjcm9s
bGFibGVBcmVhLT5sYXllcigpKSk7CisgICAgdmVjdG9yLnB1c2hfYmFjayhzY3JvbGxhYmxlQXJl
YSk7CisgICAgaWYgKHZlY3Rvci5zaXplKCkgPT0gMSkgeworICAgICAgICAvLyBGSVhNRTogVXNl
IFJlbmRlckxheWVyOjpyZW5kZXJCb3goKS0+bm9kZSgpIGluc3RlYWQ/CisgICAgICAgIHNjcm9s
bGVyLT5zZXROb2RlKGVuY2xvc2luZ0xheWVyTm9kZShzY3JvbGxhYmxlQXJlYS0+bGF5ZXIoKSkp
OworICAgIH0KK30KKworSW5SZWdpb25TY3JvbGxlcjo6SW5SZWdpb25TY3JvbGxlcihXZWJQYWdl
UHJpdmF0ZSogd2ViUGFnZVByaXZhdGUpCisgICAgOiBtX3dlYlBhZ2Uod2ViUGFnZVByaXZhdGUp
Cit7Cit9CisKK3ZvaWQgSW5SZWdpb25TY3JvbGxlcjo6c2V0Tm9kZShXZWJDb3JlOjpOb2RlKiBu
b2RlKQoreworICAgIG1faW5SZWdpb25TY3JvbGxTdGFydGluZ05vZGUgPSBub2RlOworfQorCitX
ZWJDb3JlOjpOb2RlKiBJblJlZ2lvblNjcm9sbGVyOjpub2RlKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9pblJlZ2lvblNjcm9sbFN0YXJ0aW5nTm9kZS5nZXQoKTsKK30KKwordm9pZCBJblJlZ2lv
blNjcm9sbGVyOjpyZXNldCgpCit7CisgICAgc2V0Tm9kZSgwKTsKK30KKworYm9vbCBJblJlZ2lv
blNjcm9sbGVyOjpoYXNOb2RlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gISFtX2luUmVnaW9uU2Ny
b2xsU3RhcnRpbmdOb2RlOworfQorCitib29sIEluUmVnaW9uU2Nyb2xsZXI6OmNhblNjcm9sbCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc05vZGUoKTsKK30KKworYm9vbCBJblJlZ2lvblNjcm9s
bGVyOjpzY3JvbGxCeShjb25zdCBQbGF0Zm9ybTo6SW50U2l6ZSYgZGVsdGEpCit7CisgICAgaWYg
KCFjYW5TY3JvbGwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHNjcm9s
bE5vZGVSZWN1cnNpdmVseShub2RlKCksIGRlbHRhKTsKK30KKworc3RkOjp2ZWN0b3I8UGxhdGZv
cm06OlNjcm9sbFZpZXdCYXNlKj4gSW5SZWdpb25TY3JvbGxlcjo6aW5SZWdpb25TY3JvbGxhYmxl
QXJlYXNGb3JQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQpCit7CisgICAgc3Rk
Ojp2ZWN0b3I8UGxhdGZvcm06OlNjcm9sbFZpZXdCYXNlKj4gdmFsaWRSZXR1cm47CisgICAgc3Rk
Ojp2ZWN0b3I8UGxhdGZvcm06OlNjcm9sbFZpZXdCYXNlKj4gZW1wdHlSZXR1cm47CisKKyAgICBI
aXRUZXN0UmVzdWx0IHJlc3VsdCA9IG1fd2ViUGFnZS0+bV9tYWluRnJhbWUtPmV2ZW50SGFuZGxl
cigpLT5oaXRUZXN0UmVzdWx0QXRQb2ludChtX3dlYlBhZ2UtPm1hcEZyb21WaWV3cG9ydFRvQ29u
dGVudHMocG9pbnQpLCBmYWxzZSAvKmFsbG93U2hhZG93Q29udGVudCovKTsKKyAgICBOb2RlKiBu
b2RlID0gcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpOworICAgIGlmICghbm9kZSB8fCAhbm9k
ZS0+cmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJuIGVtcHR5UmV0dXJuOworCisgICAgUmVuZGVy
TGF5ZXIqIGxheWVyID0gbm9kZS0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKTsKKyAgICBk
byB7CisgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBsYXllci0+cmVuZGVyZXIoKTsK
KworICAgICAgICBpZiAocmVuZGVyZXItPmlzUmVuZGVyVmlldygpKSB7CisgICAgICAgICAgICBp
ZiAoUmVuZGVyVmlldyogcmVuZGVyVmlldyA9IHRvUmVuZGVyVmlldyhyZW5kZXJlcikpIHsKKyAg
ICAgICAgICAgICAgICBGcmFtZVZpZXcqIHZpZXcgPSByZW5kZXJWaWV3LT5mcmFtZVZpZXcoKTsK
KyAgICAgICAgICAgICAgICBpZiAoIXZpZXcpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBl
bXB0eVJldHVybjsKKworICAgICAgICAgICAgICAgIGlmIChjYW5TY3JvbGxJbm5lckZyYW1lKHZp
ZXctPmZyYW1lKCkpKSB7CisgICAgICAgICAgICAgICAgICAgIHB1c2hCYWNrSW5SZWdpb25TY3Jv
bGxhYmxlKHZhbGlkUmV0dXJuLCBuZXcgSW5SZWdpb25TY3JvbGxhYmxlQXJlYShtX3dlYlBhZ2Us
IGxheWVyKSwgdGhpcyk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChjYW5TY3JvbGxSZW5k
ZXJCb3gobGF5ZXItPnJlbmRlckJveCgpKSkgeworICAgICAgICAgICAgcHVzaEJhY2tJblJlZ2lv
blNjcm9sbGFibGUodmFsaWRSZXR1cm4sIG5ldyBJblJlZ2lvblNjcm9sbGFibGVBcmVhKG1fd2Vi
UGFnZSwgbGF5ZXIpLCB0aGlzKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisK
KyAgICAgICAgLy8gSWYgd2UgcnVuIGludG8gYSBmaXggcG9zaXRpb25lZCBsYXllciwgc2V0IHRo
ZSBsYXN0IHNjcm9sbGFibGUgaW4tcmVnaW9uIG9iamVjdAorICAgICAgICAvLyBhcyBub3QgYWJs
ZSB0byBwcm9wYWdhdGUgc2Nyb2xsIHRvIGl0cyBwYXJlbnQgc2Nyb2xsYWJsZS4KKyAgICAgICAg
aWYgKGlzTm9uUmVuZGVyVmlld0ZpeGVkUG9zaXRpb25lZENvbnRhaW5lcihsYXllcikgJiYgdmFs
aWRSZXR1cm4uc2l6ZSgpKSB7CisgICAgICAgICAgICBQbGF0Zm9ybTo6U2Nyb2xsVmlld0Jhc2Uq
IGVuZCA9IHZhbGlkUmV0dXJuLmJhY2soKTsKKyAgICAgICAgICAgIGVuZC0+c2V0Q2FuUHJvcGFn
YXRlU2Nyb2xsaW5nVG9FbmNsb3NpbmdTY3JvbGxhYmxlKGZhbHNlKTsKKyAgICAgICAgfQorCisg
ICAgfSB3aGlsZSAobGF5ZXIgPSBwYXJlbnRMYXllcihsYXllcikpOworCisgICAgaWYgKHZhbGlk
UmV0dXJuLmVtcHR5KCkpCisgICAgICAgIHJldHVybiBlbXB0eVJldHVybjsKKworICAgIC8vIFBv
c3QtY2FsY3VsYXRlIHRoZSB2aXNpYmxlIHdpbmRvdyByZWN0cyBpbiByZXZlcnNlIGhpdCB0ZXN0
IG9yZGVyIHNvCisgICAgLy8gd2UgYWNjb3VudCBmb3IgYWxsIGFuZCBhbnkgY2xpcHBpbmcgcmVj
dHMuCisgICAgV2ViQ29yZTo6SW50UmVjdCByZWN1cnNpdmVDbGlwcGluZ1JlY3QoV2ViQ29yZTo6
SW50UG9pbnQ6Onplcm8oKSwgbV93ZWJQYWdlLT50cmFuc2Zvcm1lZFZpZXdwb3J0U2l6ZSgpKTsK
KworICAgIHN0ZDo6dmVjdG9yPFBsYXRmb3JtOjpTY3JvbGxWaWV3QmFzZSo+OjpyZXZlcnNlX2l0
ZXJhdG9yIHJlbmQgPSB2YWxpZFJldHVybi5yZW5kKCk7CisgICAgZm9yIChzdGQ6OnZlY3RvcjxQ
bGF0Zm9ybTo6U2Nyb2xsVmlld0Jhc2UqPjo6cmV2ZXJzZV9pdGVyYXRvciByaXQgPSB2YWxpZFJl
dHVybi5yYmVnaW4oKTsgcml0ICE9IHJlbmQ7ICsrcml0KSB7CisKKyAgICAgICAgSW5SZWdpb25T
Y3JvbGxhYmxlQXJlYSogY3VyciA9IHN0YXRpY19jYXN0PEluUmVnaW9uU2Nyb2xsYWJsZUFyZWEq
Pigqcml0KTsKKyAgICAgICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gY3Vyci0+bGF5ZXIoKTsKKwor
ICAgICAgICBpZiAobGF5ZXIgJiYgbGF5ZXItPnJlbmRlcmVyKCktPmlzUmVuZGVyVmlldygpKSB7
IC8vICNkb2N1bWVudCBjYXNlCisgICAgICAgICAgICBGcmFtZVZpZXcqIHZpZXcgPSB0b1JlbmRl
clZpZXcobGF5ZXItPnJlbmRlcmVyKCkpLT5mcmFtZVZpZXcoKTsKKyAgICAgICAgICAgIEFTU0VS
VCh2aWV3KTsKKyAgICAgICAgICAgIEFTU0VSVChjYW5TY3JvbGxJbm5lckZyYW1lKHZpZXctPmZy
YW1lKCkpKTsKKworICAgICAgICAgICAgV2ViQ29yZTo6SW50UmVjdCBmcmFtZVdpbmRvd1JlY3Qg
PSBtX3dlYlBhZ2UtPm1hcFRvVHJhbnNmb3JtZWQobV93ZWJQYWdlLT5nZXRSZWN1cnNpdmVWaXNp
YmxlV2luZG93UmVjdCh2aWV3KSk7CisgICAgICAgICAgICBmcmFtZVdpbmRvd1JlY3QuaW50ZXJz
ZWN0KHJlY3Vyc2l2ZUNsaXBwaW5nUmVjdCk7CisgICAgICAgICAgICBjdXJyLT5zZXRWaXNpYmxl
V2luZG93UmVjdChmcmFtZVdpbmRvd1JlY3QpOworICAgICAgICAgICAgcmVjdXJzaXZlQ2xpcHBp
bmdSZWN0ID0gZnJhbWVXaW5kb3dSZWN0OworCisgICAgICAgIH0gZWxzZSB7IC8vIFJlbmRlckJv
eC1iYXNlZCBlbGVtZW50cyBjYXNlIChzY3JvbGxhYmxlIGJveGVzIChkaXYncywgcCdzLCB0ZXh0
YXJlYSdzLCBldGMpKS4KKworICAgICAgICAgICAgUmVuZGVyQm94KiBib3ggPSBsYXllci0+cmVu
ZGVyQm94KCk7CisgICAgICAgICAgICBBU1NFUlQoYm94KTsKKyAgICAgICAgICAgIEFTU0VSVChj
YW5TY3JvbGxSZW5kZXJCb3goYm94KSk7CisKKyAgICAgICAgICAgIFdlYkNvcmU6OkludFJlY3Qg
dmlzaWJsZVdpbmRvd1JlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGJveC0+YWJzb2x1dGVDbGlwcGVk
T3ZlcmZsb3dSZWN0KCkpOworICAgICAgICAgICAgdmlzaWJsZVdpbmRvd1JlY3QgPSBib3gtPmZy
YW1lKCktPnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyh2aXNpYmxlV2luZG93UmVjdCk7CisgICAg
ICAgICAgICB2aXNpYmxlV2luZG93UmVjdCA9IG1fd2ViUGFnZS0+bWFwVG9UcmFuc2Zvcm1lZCh2
aXNpYmxlV2luZG93UmVjdCk7CisgICAgICAgICAgICB2aXNpYmxlV2luZG93UmVjdC5pbnRlcnNl
Y3QocmVjdXJzaXZlQ2xpcHBpbmdSZWN0KTsKKworICAgICAgICAgICAgY3Vyci0+c2V0VmlzaWJs
ZVdpbmRvd1JlY3QodmlzaWJsZVdpbmRvd1JlY3QpOworICAgICAgICAgICAgcmVjdXJzaXZlQ2xp
cHBpbmdSZWN0ID0gdmlzaWJsZVdpbmRvd1JlY3Q7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBy
ZXR1cm4gdmFsaWRSZXR1cm47Cit9CisKK2Jvb2wgSW5SZWdpb25TY3JvbGxlcjo6c2Nyb2xsTm9k
ZVJlY3Vyc2l2ZWx5KFdlYkNvcmU6Ok5vZGUqIG5vZGUsIGNvbnN0IFdlYkNvcmU6OkludFNpemUm
IGRlbHRhKQoreworICAgIGlmIChkZWx0YS5pc1plcm8oKSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFJlbmRlck9i
amVjdCogcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOworICAgIGlmICghcmVuZGVyZXIpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEZyYW1lVmlldyogdmlldyA9IHJlbmRlcmVyLT52
aWV3KCktPmZyYW1lVmlldygpOworICAgIGlmICghdmlldykKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgLy8gVHJ5IHNjcm9sbGluZyB0aGUgcmVuZGVyZXIuCisgICAgaWYgKHNjcm9sbFJl
bmRlcmVyKHJlbmRlcmVyLCBkZWx0YSkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8g
V2UndmUgaGl0IHRoZSBwYWdlLCBkb24ndCBzY3JvbGwgaXQgYW5kIHJldHVybiBmYWxzZS4KKyAg
ICBpZiAodmlldyA9PSBtX3dlYlBhZ2UtPm1fbWFpbkZyYW1lLT52aWV3KCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIC8vIFRyeSBzY3JvbGxpbmcgdGhlIEZyYW1lVmlldy4KKyAgICBp
ZiAoY2FuU2Nyb2xsSW5uZXJGcmFtZSh2aWV3LT5mcmFtZSgpKSkgeworICAgICAgICBJbnRTaXpl
IHZpZXdEZWx0YSA9IGRlbHRhOworICAgICAgICBJbnRQb2ludCBuZXdWaWV3T2Zmc2V0ID0gdmll
dy0+c2Nyb2xsUG9zaXRpb24oKTsKKyAgICAgICAgSW50UG9pbnQgbWF4Vmlld09mZnNldCA9IHZp
ZXctPm1heGltdW1TY3JvbGxQb3NpdGlvbigpOworICAgICAgICBhZGp1c3RTY3JvbGxEZWx0YSht
YXhWaWV3T2Zmc2V0LCBuZXdWaWV3T2Zmc2V0LCB2aWV3RGVsdGEpOworCisgICAgICAgIGlmICgh
dmlld0RlbHRhLmlzWmVybygpKSB7CisgICAgICAgICAgICB2aWV3LT5zZXRDYW5CbGl0T25TY3Jv
bGwoZmFsc2UpOworCisgICAgICAgICAgICBCYWNraW5nU3RvcmVDbGllbnQqIGJhY2tpbmdTdG9y
ZUNsaWVudCA9IG1fd2ViUGFnZS0+YmFja2luZ1N0b3JlQ2xpZW50Rm9yRnJhbWUodmlldy0+ZnJh
bWUoKSk7CisgICAgICAgICAgICBpZiAoYmFja2luZ1N0b3JlQ2xpZW50KSB7CisgICAgICAgICAg
ICAgICAgYmFja2luZ1N0b3JlQ2xpZW50LT5zZXRJc0NsaWVudEdlbmVyYXRlZFNjcm9sbCh0cnVl
KTsKKyAgICAgICAgICAgICAgICBiYWNraW5nU3RvcmVDbGllbnQtPnNldElzU2Nyb2xsTm90aWZp
Y2F0aW9uU3VwcHJlc3NlZCh0cnVlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2V0
Tm9kZSh2aWV3LT5mcmFtZSgpLT5kb2N1bWVudCgpKTsKKworICAgICAgICAgICAgdmlldy0+c2Ny
b2xsQnkodmlld0RlbHRhKTsKKworICAgICAgICAgICAgaWYgKGJhY2tpbmdTdG9yZUNsaWVudCkg
eworICAgICAgICAgICAgICAgIGJhY2tpbmdTdG9yZUNsaWVudC0+c2V0SXNDbGllbnRHZW5lcmF0
ZWRTY3JvbGwoZmFsc2UpOworICAgICAgICAgICAgICAgIGJhY2tpbmdTdG9yZUNsaWVudC0+c2V0
SXNTY3JvbGxOb3RpZmljYXRpb25TdXBwcmVzc2VkKGZhbHNlKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBUcnkg
c2Nyb2xsaW5nIHRoZSBub2RlIG9mIHRoZSBlbmNsb3NpbmcgZnJhbWUuCisgICAgRnJhbWUqIGZy
YW1lID0gbm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKKyAgICBpZiAoZnJhbWUpIHsKKyAgICAg
ICAgTm9kZSogb3duZXJOb2RlID0gZnJhbWUtPm93bmVyRWxlbWVudCgpOworICAgICAgICBpZiAo
c2Nyb2xsTm9kZVJlY3Vyc2l2ZWx5KG93bmVyTm9kZSwgZGVsdGEpKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEluUmVnaW9u
U2Nyb2xsZXI6OnNjcm9sbFJlbmRlcmVyKFdlYkNvcmU6OlJlbmRlck9iamVjdCogcmVuZGVyZXIs
IGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGRlbHRhKQoreworICAgIFJlbmRlckxheWVyKiBsYXll
ciA9IHJlbmRlcmVyLT5lbmNsb3NpbmdMYXllcigpOworICAgIGlmICghbGF5ZXIpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIC8vIFRyeSB0byBzY3JvbGwgbGF5ZXIuCisgICAgYm9vbCBy
ZXN0cmljdGVkQnlMaW5lQ2xhbXAgPSBmYWxzZTsKKyAgICBpZiAocmVuZGVyZXItPnBhcmVudCgp
KQorICAgICAgICByZXN0cmljdGVkQnlMaW5lQ2xhbXAgPSAhcmVuZGVyZXItPnBhcmVudCgpLT5z
dHlsZSgpLT5saW5lQ2xhbXAoKS5pc05vbmUoKTsKKworICAgIGlmIChyZW5kZXJlci0+aGFzT3Zl
cmZsb3dDbGlwKCkgJiYgIXJlc3RyaWN0ZWRCeUxpbmVDbGFtcCkgeworICAgICAgICBJbnRTaXpl
IGxheWVyRGVsdGEgPSBkZWx0YTsKKyAgICAgICAgSW50UG9pbnQgbWF4T2Zmc2V0KGxheWVyLT5z
Y3JvbGxXaWR0aCgpIC0gbGF5ZXItPnJlbmRlckJveCgpLT5jbGllbnRXaWR0aCgpLCBsYXllci0+
c2Nyb2xsSGVpZ2h0KCkgLSBsYXllci0+cmVuZGVyQm94KCktPmNsaWVudEhlaWdodCgpKTsKKyAg
ICAgICAgSW50UG9pbnQgY3VycmVudE9mZnNldChsYXllci0+c2Nyb2xsWE9mZnNldCgpLCBsYXll
ci0+c2Nyb2xsWU9mZnNldCgpKTsKKyAgICAgICAgYWRqdXN0U2Nyb2xsRGVsdGEobWF4T2Zmc2V0
LCBjdXJyZW50T2Zmc2V0LCBsYXllckRlbHRhKTsKKyAgICAgICAgaWYgKCFsYXllckRlbHRhLmlz
WmVybygpKSB7CisgICAgICAgICAgICBzZXROb2RlKGVuY2xvc2luZ0xheWVyTm9kZShsYXllcikp
OworICAgICAgICAgICAgSW50UG9pbnQgbmV3T2Zmc2V0ID0gY3VycmVudE9mZnNldCArIGxheWVy
RGVsdGE7CisgICAgICAgICAgICBsYXllci0+c2Nyb2xsVG9PZmZzZXQobmV3T2Zmc2V0LngoKSwg
bmV3T2Zmc2V0LnkoKSk7CisgICAgICAgICAgICByZW5kZXJlci0+cmVwYWludCh0cnVlKTsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgd2hpbGUgKGxh
eWVyID0gbGF5ZXItPnBhcmVudCgpKSB7CisgICAgICAgIGlmIChjYW5TY3JvbGxSZW5kZXJCb3go
bGF5ZXItPnJlbmRlckJveCgpKSkKKyAgICAgICAgICAgIHJldHVybiBzY3JvbGxSZW5kZXJlcihs
YXllci0+cmVuZGVyQm94KCksIGRlbHRhKTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK3ZvaWQgSW5SZWdpb25TY3JvbGxlcjo6YWRqdXN0U2Nyb2xsRGVsdGEoY29uc3QgV2ViQ29y
ZTo6SW50UG9pbnQmIG1heE9mZnNldCwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGN1cnJlbnRP
ZmZzZXQsIFdlYkNvcmU6OkludFNpemUmIGRlbHRhKSBjb25zdAoreworICAgIGlmIChjdXJyZW50
T2Zmc2V0LngoKSArIGRlbHRhLndpZHRoKCkgPiBtYXhPZmZzZXQueCgpKQorICAgICAgICBkZWx0
YS5zZXRXaWR0aChzdGQ6Om1pbihtYXhPZmZzZXQueCgpIC0gY3VycmVudE9mZnNldC54KCksIGRl
bHRhLndpZHRoKCkpKTsKKworICAgIGlmIChjdXJyZW50T2Zmc2V0LngoKSArIGRlbHRhLndpZHRo
KCkgPCAwKQorICAgICAgICBkZWx0YS5zZXRXaWR0aChzdGQ6Om1heCgtY3VycmVudE9mZnNldC54
KCksIGRlbHRhLndpZHRoKCkpKTsKKworICAgIGlmIChjdXJyZW50T2Zmc2V0LnkoKSArIGRlbHRh
LmhlaWdodCgpID4gbWF4T2Zmc2V0LnkoKSkKKyAgICAgICAgZGVsdGEuc2V0SGVpZ2h0KHN0ZDo6
bWluKG1heE9mZnNldC55KCkgLSBjdXJyZW50T2Zmc2V0LnkoKSwgZGVsdGEuaGVpZ2h0KCkpKTsK
KworICAgIGlmIChjdXJyZW50T2Zmc2V0LnkoKSArIGRlbHRhLmhlaWdodCgpIDwgMCkKKyAgICAg
ICAgZGVsdGEuc2V0SGVpZ2h0KHN0ZDo6bWF4KC1jdXJyZW50T2Zmc2V0LnkoKSwgZGVsdGEuaGVp
Z2h0KCkpKTsKK30KKworfQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5
L1dlYktpdFN1cHBvcnQvSW5SZWdpb25TY3JvbGxlci5oIGIvU291cmNlL1dlYktpdC9ibGFja2Jl
cnJ5L1dlYktpdFN1cHBvcnQvSW5SZWdpb25TY3JvbGxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmU5YjE5MTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JblJlZ2lvblNjcm9sbGVyLmgKQEAgLTAsMCArMSw2
NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24g
TGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVz
c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRv
IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaWZu
ZGVmIEluUmVnaW9uU2Nyb2xsZXJfaAorI2RlZmluZSBJblJlZ2lvblNjcm9sbGVyX2gKKworI2lu
Y2x1ZGUgIkludFJlY3QuaCIKKworI2luY2x1ZGUgPGludGVyYWN0aW9uL1Njcm9sbFZpZXdCYXNl
Lmg+CisjaW5jbHVkZSA8dmVjdG9yPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBGcmFt
ZTsKK2NsYXNzIE5vZGU7CitjbGFzcyBSZW5kZXJPYmplY3Q7Cit9CisKK25hbWVzcGFjZSBCbGFj
a0JlcnJ5IHsKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJQYWdlUHJpdmF0ZTsKKwor
Y2xhc3MgSW5SZWdpb25TY3JvbGxlciB7CisKK3B1YmxpYzoKKyAgICBJblJlZ2lvblNjcm9sbGVy
KFdlYlBhZ2VQcml2YXRlKik7CisKKyAgICB2b2lkIHNldE5vZGUoV2ViQ29yZTo6Tm9kZSopOwor
ICAgIFdlYkNvcmU6Ok5vZGUqIG5vZGUoKSBjb25zdDsKKyAgICB2b2lkIHJlc2V0KCk7CisKKyAg
ICBib29sIGNhblNjcm9sbCgpIGNvbnN0OworICAgIGJvb2wgaGFzTm9kZSgpIGNvbnN0OworCisg
ICAgYm9vbCBzY3JvbGxCeShjb25zdCBQbGF0Zm9ybTo6SW50U2l6ZSYgZGVsdGEpOworCisgICAg
c3RkOjp2ZWN0b3I8UGxhdGZvcm06OlNjcm9sbFZpZXdCYXNlKj4gaW5SZWdpb25TY3JvbGxhYmxl
QXJlYXNGb3JQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOworcHJpdmF0ZToKKworICAg
IGJvb2wgc2Nyb2xsTm9kZVJlY3Vyc2l2ZWx5KFdlYkNvcmU6Ok5vZGUqLCBjb25zdCBXZWJDb3Jl
OjpJbnRTaXplJiBkZWx0YSk7CisgICAgYm9vbCBzY3JvbGxSZW5kZXJlcihXZWJDb3JlOjpSZW5k
ZXJPYmplY3QqLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBkZWx0YSk7CisKKyAgICB2b2lkIGFk
anVzdFNjcm9sbERlbHRhKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBtYXhPZmZzZXQsIGNvbnN0
IFdlYkNvcmU6OkludFBvaW50JiBjdXJyZW50T2Zmc2V0LCBXZWJDb3JlOjpJbnRTaXplJiBkZWx0
YSkgY29uc3Q7CisKKyAgICBSZWZQdHI8V2ViQ29yZTo6Tm9kZT4gbV9pblJlZ2lvblNjcm9sbFN0
YXJ0aW5nTm9kZTsKKyAgICBXZWJQYWdlUHJpdmF0ZSogbV93ZWJQYWdlOworfTsKKworfQorfQor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBw
b3J0L1RvdWNoRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJL
aXRTdXBwb3J0L1RvdWNoRXZlbnRIYW5kbGVyLmNwcAppbmRleCBjODY2OGJlLi5iNDExM2JhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9Ub3VjaEV2
ZW50SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBv
cnQvVG91Y2hFdmVudEhhbmRsZXIuY3BwCkBAIC0zNjMsNyArMzYzLDcgQEAgdm9pZCBUb3VjaEV2
ZW50SGFuZGxlcjo6ZHJhd1RhcEhpZ2hsaWdodCgpCiAgICAgLy8gT24gdGhlIGNsaWVudCBzaWRl
LCB0aGlzIGluZm8gaXMgYmVpbmcgdXNlZCB0byBoaWRlIHRoZSB0YXAgaGlnaGxpZ2h0IHdpbmRv
dyBvbiBzY3JvbGwuCiAgICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gbV93ZWJQYWdlLT5lbmNsb3Np
bmdGaXhlZFBvc2l0aW9uZWRBbmNlc3Rvck9yU2VsZklmRml4ZWRQb3NpdGlvbmVkKHJlbmRlcmVy
LT5lbmNsb3NpbmdMYXllcigpKTsKICAgICBib29sIHNob3VsZEhpZGVUYXBIaWdobGlnaHRSaWdo
dEFmdGVyU2Nyb2xsaW5nID0gIWxheWVyLT5yZW5kZXJlcigpLT5pc1JlbmRlclZpZXcoKTsKLSAg
ICBzaG91bGRIaWRlVGFwSGlnaGxpZ2h0UmlnaHRBZnRlclNjcm9sbGluZyB8PSAhIW1fd2ViUGFn
ZS0+bV9pblJlZ2lvblNjcm9sbFN0YXJ0aW5nTm9kZS5nZXQoKTsKKyAgICBzaG91bGRIaWRlVGFw
SGlnaGxpZ2h0UmlnaHRBZnRlclNjcm9sbGluZyB8PSAhIW1fd2ViUGFnZS0+bV9pblJlZ2lvblNj
cm9sbGVyLT5ub2RlKCk7CiAKICAgICBJbnRQb2ludCBmcmFtZVBvcyhtX3dlYlBhZ2UtPmZyYW1l
T2Zmc2V0KGVsZW1lbnRGcmFtZSkpOwogCi0tIAoxLjcuNS40Cgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>156098</attachid>
            <date>2012-08-02 08:39:21 -0700</date>
            <delta_ts>2012-08-02 09:43:33 -0700</delta_ts>
            <desc>(committed r124470, r=yoli) patch v4</desc>
            <filename>0001-BlackBerry-Implement-InRegionScroller-class-as-a-in-.patch</filename>
            <type>text/plain</type>
            <size>41813</size>
            <attacher name="Antonio Gomes">tonikitoo</attacher>
            
              <data encoding="base64">RnJvbSBjYjM2Nzg2MmE3ZTlhMGY4NjYyMzAwYWFlZDQ4NWI5Y2FjMTdlY2JkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbnRvbmlvIEdvbWVzIDxhZ29tZXNAcmltLmNvbT4KRGF0ZTog
V2VkLCAxIEF1ZyAyMDEyIDE4OjA0OjI0IC0wNDAwClN1YmplY3Q6IFtQQVRDSF0gW0JsYWNrQmVy
cnldIEltcGxlbWVudCBJblJlZ2lvblNjcm9sbGVyIGNsYXNzIGFzIGEgaW4tcmVnaW9uCiBzY3Jv
bGwgY29udHJvbGxlcgogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTky
ODg5IFBSICMxODY1ODcKClJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgpQYXRjaCBieSBBbnRv
bmlvIEdvbWVzIDxhZ29tZXNAcmltLmNvbT4KClNvdXJjZS9XZWJLaXQ6CgoqIFBsYXRmb3JtQmxh
Y2tCZXJyeS5jbWFrZTogQWRkZWQgSW5SZWdpb25TY3JvbGxlci5jcHB8aCB0byB0aGUgYnVpbGQg
c3lzdGVtLgoKU291cmNlL1dlYktpdC9ibGFja2JlcnJ5OgoKTW92ZWQgYWxsIGluLXJlZ2lvbiBz
Y3JvbGxpbmcgY29kZSBvdXQgb2YgV2ViUGFnZVByaXZhdGUgdG8gdGhlIGp1c3QKY3JlYXRlZCBJ
blJlZ2lvblNjcm9sbGVyIGNsYXNzLiBUaGlzIGNsYXNzIGFpbXMgdG86CgoxKSBDZW50cmFsaXpl
IGFsbCBpbi1yZWdpb24gc2Nyb2xsIGNvZGUgYW5kIGNsZWFuIHVwIFdlYlBhZ2VQcml2YXRlIGFz
IGEgY29uc2VxdWVuY2UuCjIpIEJlIHRoZSBiYXNlcyB0byBhZGQgVUkvQ29tcG9zaXRpbmcgdGhy
ZWFkIGRyaXZlbiBzY3JvbGxzIHRvIGluLXJlZ2lvbi4KClRoZSBwYXRjaCBkb2VzIG5vdCBjaGFu
Z2UgYW55IGZ1bmN0aW9uYWxsaXR5IGNoYW5nZS4KCiogQXBpL1dlYlBhZ2UuY3BwOgooQmxhY2tC
ZXJyeTo6V2ViS2l0OjpXZWJQYWdlUHJpdmF0ZTo6V2ViUGFnZVByaXZhdGUpOgooQmxhY2tCZXJy
eTo6V2ViS2l0OjpXZWJQYWdlUHJpdmF0ZTo6aW5pdCk6CihCbGFja0JlcnJ5OjpXZWJLaXQ6Oldl
YlBhZ2VQcml2YXRlOjpzY3JvbGxCeSk6CihCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2VQcml2
YXRlOjpub3RpZnlJblJlZ2lvblNjcm9sbFN0YXR1c0NoYW5nZWQpOgooQmxhY2tCZXJyeTo6V2Vi
S2l0OjpXZWJQYWdlUHJpdmF0ZTo6Y2xlYXJEb2N1bWVudERhdGEpOgooQmxhY2tCZXJyeTo6V2Vi
S2l0OjpXZWJQYWdlUHJpdmF0ZTo6c2V0U2Nyb2xsT3JpZ2luUG9pbnQpOgoqIEFwaS9XZWJQYWdl
X3AuaDoKKFdlYlBhZ2VQcml2YXRlKToKKiBXZWJLaXRTdXBwb3J0L0luUmVnaW9uU2Nyb2xsYWJs
ZUFyZWEuY3BwOgooQmxhY2tCZXJyeTo6V2ViS2l0OjpJblJlZ2lvblNjcm9sbGFibGVBcmVhOjps
YXllcik6CiogV2ViS2l0U3VwcG9ydC9JblJlZ2lvblNjcm9sbGVyLmNwcDogQWRkZWQuCihXZWJL
aXQpOgooQmxhY2tCZXJyeTo6V2ViS2l0OjpjYW5TY3JvbGxJbm5lckZyYW1lKToKKEJsYWNrQmVy
cnk6OldlYktpdDo6Y2FuU2Nyb2xsUmVuZGVyQm94KToKKEJsYWNrQmVycnk6OldlYktpdDo6cGFy
ZW50TGF5ZXIpOgooQmxhY2tCZXJyeTo6V2ViS2l0OjplbmNsb3NpbmdMYXllck5vZGUpOgooQmxh
Y2tCZXJyeTo6V2ViS2l0Ojppc05vblJlbmRlclZpZXdGaXhlZFBvc2l0aW9uZWRDb250YWluZXIp
OgooQmxhY2tCZXJyeTo6V2ViS2l0OjpwdXNoQmFja0luUmVnaW9uU2Nyb2xsYWJsZSk6CihCbGFj
a0JlcnJ5OjpXZWJLaXQ6OkluUmVnaW9uU2Nyb2xsZXI6OkluUmVnaW9uU2Nyb2xsZXIpOgooQmxh
Y2tCZXJyeTo6V2ViS2l0OjpJblJlZ2lvblNjcm9sbGVyOjpzZXROb2RlKToKKEJsYWNrQmVycnk6
OldlYktpdDo6SW5SZWdpb25TY3JvbGxlcjo6bm9kZSk6CihCbGFja0JlcnJ5OjpXZWJLaXQ6Oklu
UmVnaW9uU2Nyb2xsZXI6OnJlc2V0KToKKEJsYWNrQmVycnk6OldlYktpdDo6SW5SZWdpb25TY3Jv
bGxlcjo6aXNOdWxsKToKKEJsYWNrQmVycnk6OldlYktpdDo6SW5SZWdpb25TY3JvbGxlcjo6c2Ny
b2xsQnkpOgooQmxhY2tCZXJyeTo6V2ViS2l0OjpJblJlZ2lvblNjcm9sbGVyOjppblJlZ2lvblNj
cm9sbGFibGVBcmVhc0ZvclBvaW50KToKKEJsYWNrQmVycnk6OldlYktpdDo6SW5SZWdpb25TY3Jv
bGxlcjo6c2Nyb2xsTm9kZVJlY3Vyc2l2ZWx5KToKKEJsYWNrQmVycnk6OldlYktpdDo6SW5SZWdp
b25TY3JvbGxlcjo6c2Nyb2xsUmVuZGVyZXIpOgooQmxhY2tCZXJyeTo6V2ViS2l0OjpJblJlZ2lv
blNjcm9sbGVyOjphZGp1c3RTY3JvbGxEZWx0YSk6CiogV2ViS2l0U3VwcG9ydC9JblJlZ2lvblNj
cm9sbGVyLmg6IEFkZGVkLgooV2ViQ29yZSk6CihXZWJLaXQpOgooSW5SZWdpb25TY3JvbGxlcik6
CiogV2ViS2l0U3VwcG9ydC9Ub3VjaEV2ZW50SGFuZGxlci5jcHA6CihCbGFja0JlcnJ5OjpXZWJL
aXQ6OlRvdWNoRXZlbnRIYW5kbGVyOjpkcmF3VGFwSGlnaGxpZ2h0KToKLS0tCiBTb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTAgKwogU291cmNl
L1dlYktpdC9QbGF0Zm9ybUJsYWNrQmVycnkuY21ha2UgICAgICAgICAgICAgfCAgICAyICsKIFNv
dXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFnZS5jcHAgICAgICAgICAgIHwgIDMxOSAr
LS0tLS0tLS0tLS0tLS0tLS0KIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFnZV9w
LmggICAgICAgICAgIHwgICAxMSArLQogU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5nZUxv
ZyAgICAgICAgICAgICAgICAgfCAgIDUyICsrKwogLi4uL1dlYktpdFN1cHBvcnQvSW5SZWdpb25T
Y3JvbGxhYmxlQXJlYS5jcHAgICAgICAgfCAgICAzICstCiAuLi4vYmxhY2tiZXJyeS9XZWJLaXRT
dXBwb3J0L0luUmVnaW9uU2Nyb2xsZXIuY3BwICB8ICAzNTUgKysrKysrKysrKysrKysrKysrKysK
IC4uLi9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5SZWdpb25TY3JvbGxlci5oICAgIHwgICA2
NyArKysrCiAuLi4vYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L1RvdWNoRXZlbnRIYW5kbGVyLmNw
cCB8ICAgIDIgKy0KIDkgZmlsZXMgY2hhbmdlZCwgNTA2IGluc2VydGlvbnMoKyksIDMxNSBkZWxl
dGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2Vi
S2l0U3VwcG9ydC9JblJlZ2lvblNjcm9sbGVyLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJj
ZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0luUmVnaW9uU2Nyb2xsZXIuaAoKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKaW5kZXggMTk5OTRkMS4uYWNiMTEwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAx
Mi0wOC0wMSAgQW50b25pbyBHb21lcyAgPGFnb21lc0ByaW0uY29tPgorCisgICAgICAgIFtCbGFj
a0JlcnJ5XSBJbXBsZW1lbnQgSW5SZWdpb25TY3JvbGxlciBjbGFzcyBhcyBhIGluLXJlZ2lvbiBz
Y3JvbGwgY29udHJvbGxlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9OTI4ODkKKyAgICAgICAgUFIgIzE4NjU4NworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtlOiBB
ZGRlZCBJblJlZ2lvblNjcm9sbGVyLmNwcHxoIHRvIHRoZSBidWlsZCBzeXN0ZW0uCisKIDIwMTIt
MDctMzAgIFNpbW9uIEhhdXNtYW5uICA8c2ltb24uaGF1c21hbm5Abm9raWEuY29tPgogCiAgICAg
ICAgIFVucmV2aWV3ZWQgUXQvTWFjIGJ1aWxkIGZpeDogVXNlIGxpYldlYktpdFN5c3RlbUludGVy
ZmFjZU1vdW50YWluTGlvbi5hCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtQmxh
Y2tCZXJyeS5jbWFrZSBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtlCmlu
ZGV4IDA1YWFlZDguLjhkYWJjODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1C
bGFja0JlcnJ5LmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1CbGFja0JlcnJ5LmNt
YWtlCkBAIC0xMDAsNiArMTAwLDggQEAgTElTVChBUFBFTkQgV2ViS2l0X1NPVVJDRVMKICAgICBi
bGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvRnJhbWVMYXllcnMuY3BwCiAgICAgYmxhY2tiZXJyeS9X
ZWJLaXRTdXBwb3J0L0luUGFnZVNlYXJjaE1hbmFnZXIuY3BwCiAgICAgYmxhY2tiZXJyeS9XZWJL
aXRTdXBwb3J0L0lucHV0SGFuZGxlci5jcHAKKyAgICBibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQv
SW5SZWdpb25TY3JvbGxhYmxlQXJlYS5jcHAKKyAgICBibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQv
SW5SZWdpb25TY3JvbGxlci5jcHAKICAgICBibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvUmVuZGVy
UXVldWUuY3BwCiAgICAgYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L1NlbGVjdGlvbkhhbmRsZXIu
Y3BwCiAgICAgYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L1NlbGVjdGlvbk92ZXJsYXkuY3BwCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2UuY3BwIGIvU291
cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJQYWdlLmNwcAppbmRleCA0ZTBhZjEyLi45YzYw
MjZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFnZS5jcHAKQEAgLTM5Myw3
ICszOTMsNiBAQCBXZWJQYWdlUHJpdmF0ZTo6V2ViUGFnZVByaXZhdGUoV2ViUGFnZSogd2ViUGFn
ZSwgV2ViUGFnZUNsaWVudCogY2xpZW50LCBjb25zdCBJbgogICAgICwgbV9sYXN0VXNlckV2ZW50
VGltZXN0YW1wKDAuMCkKICAgICAsIG1fcGx1Z2luTW91c2VCdXR0b25QcmVzc2VkKGZhbHNlKQog
ICAgICwgbV9wbHVnaW5NYXlPcGVuTmV3VGFiKGZhbHNlKQotICAgICwgbV9pblJlZ2lvblNjcm9s
bFN0YXJ0aW5nTm9kZSgwKQogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICAs
IG1fcm9vdExheWVyQ29tbWl0VGltZXIoYWRvcHRQdHIobmV3IFRpbWVyPFdlYlBhZ2VQcml2YXRl
Pih0aGlzLCAmV2ViUGFnZVByaXZhdGU6OnJvb3RMYXllckNvbW1pdFRpbWVyRmlyZWQpKSkKICAg
ICAsIG1fbmVlZHNPbmVTaG90RHJhd2luZ1N5bmNocm9uaXphdGlvbihmYWxzZSkKQEAgLTU1OCw2
ICs1NTcsOCBAQCB2b2lkIFdlYlBhZ2VQcml2YXRlOjppbml0KGNvbnN0IFdlYlN0cmluZyYgcGFn
ZUdyb3VwTmFtZSkKICAgICBmcmFtZUxvYWRlckNsaWVudC0+c2V0RnJhbWUobV9tYWluRnJhbWUs
IHRoaXMpOwogICAgIG1fbWFpbkZyYW1lLT5pbml0KCk7CiAKKyAgICBtX2luUmVnaW9uU2Nyb2xs
ZXIgPSBhZG9wdFB0cihuZXcgSW5SZWdpb25TY3JvbGxlcih0aGlzKSk7CisKICNpZiBFTkFCTEUo
V0VCR0wpCiAgICAgUGxhdGZvcm06OlNldHRpbmdzKiBzZXR0aW5ncyA9IFBsYXRmb3JtOjpTZXR0
aW5nczo6aW5zdGFuY2UoKTsKICAgICBtX3BhZ2UtPnNldHRpbmdzKCktPnNldFdlYkdMRW5hYmxl
ZChzZXR0aW5ncyAmJiBzZXR0aW5ncy0+aXNXZWJHTFN1cHBvcnRlZCgpKTsKQEAgLTE1MjIsMTUg
KzE1MjMsMTMgQEAgYm9vbCBXZWJQYWdlUHJpdmF0ZTo6c2Nyb2xsQnkoaW50IGRlbHRhWCwgaW50
IGRlbHRhWSwgYm9vbCBzY3JvbGxNYWluRnJhbWUpCiAgICAgICAgICAgICBkZWx0YS53aWR0aCgp
IDwgMCA/IC11bnRyYW5zZm9ybWVkQ29waWVkRGVsdGEud2lkdGgoKSA6IHVudHJhbnNmb3JtZWRD
b3BpZWREZWx0YS53aWR0aCgpLAogICAgICAgICAgICAgZGVsdGEuaGVpZ2h0KCkgPCAwID8gLXVu
dHJhbnNmb3JtZWRDb3BpZWREZWx0YS5oZWlnaHQoKTogdW50cmFuc2Zvcm1lZENvcGllZERlbHRh
LmhlaWdodCgpKTsKIAotICAgICAgICBpZiAobV9pblJlZ2lvblNjcm9sbFN0YXJ0aW5nTm9kZSkg
ewotICAgICAgICAgICAgaWYgKHNjcm9sbE5vZGVSZWN1cnNpdmVseShtX2luUmVnaW9uU2Nyb2xs
U3RhcnRpbmdOb2RlLmdldCgpLCBkZWx0YSkpIHsKLSAgICAgICAgICAgICAgICBtX3NlbGVjdGlv
bkhhbmRsZXItPnNlbGVjdGlvblBvc2l0aW9uQ2hhbmdlZCgpOwotICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBXZSBoYXZlIGNvZGUgaW4gcGxhY2UgdG8gaGFuZGxlIHNjcm9sbGluZyBhbmQgY2xp
cHBpbmcgdGFwIGhpZ2hsaWdodAotICAgICAgICAgICAgICAgIC8vIG9uIGluLXJlZ2lvbiBzY3Jv
bGxpbmcuIEFzIHNvb24gYXMgaXQgaXMgZmFzdCBlbm91Z2ggKGkuZS4gd2UgaGF2ZSBpdCBiYWNr
ZWQgYnkKLSAgICAgICAgICAgICAgICAvLyBhIGJhY2tpbmcgc3RvcmUpLCB3ZSBjYW4gcmVsaWFi
bHkgbWFrZSB1c2Ugb2YgaXQgaW4gdGhlIHJlYWwgd29ybGQuCi0gICAgICAgICAgICAgICAgLy8g
bV90b3VjaEV2ZW50SGFuZGxlci0+ZHJhd1RhcEhpZ2hsaWdodCgpOwotICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQorICAgICAgICBpZiAobV9pblJlZ2lvblNjcm9s
bGVyLT5zY3JvbGxCeShkZWx0YSkpIHsKKyAgICAgICAgICAgIG1fc2VsZWN0aW9uSGFuZGxlci0+
c2VsZWN0aW9uUG9zaXRpb25DaGFuZ2VkKCk7CisgICAgICAgICAgICAvLyBGSVhNRTogV2UgaGF2
ZSBjb2RlIGluIHBsYWNlIHRvIGhhbmRsZSBzY3JvbGxpbmcgYW5kIGNsaXBwaW5nIHRhcCBoaWdo
bGlnaHQKKyAgICAgICAgICAgIC8vIG9uIGluLXJlZ2lvbiBzY3JvbGxpbmcuIEFzIHNvb24gYXMg
aXQgaXMgZmFzdCBlbm91Z2ggKGkuZS4gd2UgaGF2ZSBpdCBiYWNrZWQgYnkKKyAgICAgICAgICAg
IC8vIGEgYmFja2luZyBzdG9yZSksIHdlIGNhbiByZWxpYWJseSBtYWtlIHVzZSBvZiBpdCBpbiB0
aGUgcmVhbCB3b3JsZC4KKyAgICAgICAgICAgIC8vIG1fdG91Y2hFdmVudEhhbmRsZXItPmRyYXdU
YXBIaWdobGlnaHQoKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTU1MCw5ICsxNTQ5LDkgQEAgYm9vbCBXZWJQYWdlOjpz
Y3JvbGxCeShjb25zdCBQbGF0Zm9ybTo6SW50U2l6ZSYgZGVsdGEsIGJvb2wgc2Nyb2xsTWFpbkZy
YW1lKQogCiB2b2lkIFdlYlBhZ2VQcml2YXRlOjpub3RpZnlJblJlZ2lvblNjcm9sbFN0YXR1c0No
YW5nZWQoYm9vbCBzdGF0dXMpCiB7Ci0gICAgaWYgKCFzdGF0dXMgJiYgbV9pblJlZ2lvblNjcm9s
bFN0YXJ0aW5nTm9kZSkgewotICAgICAgICBlbnF1ZXVlUmVuZGVyaW5nT2ZDbGlwcGVkQ29udGVu
dE9mU2Nyb2xsYWJsZU5vZGVBZnRlckluUmVnaW9uU2Nyb2xsaW5nKG1faW5SZWdpb25TY3JvbGxT
dGFydGluZ05vZGUuZ2V0KCkpOwotICAgICAgICBtX2luUmVnaW9uU2Nyb2xsU3RhcnRpbmdOb2Rl
ID0gMDsKKyAgICBpZiAoIXN0YXR1cyAmJiBtX2luUmVnaW9uU2Nyb2xsZXItPmhhc05vZGUoKSkg
eworICAgICAgICBlbnF1ZXVlUmVuZGVyaW5nT2ZDbGlwcGVkQ29udGVudE9mU2Nyb2xsYWJsZU5v
ZGVBZnRlckluUmVnaW9uU2Nyb2xsaW5nKG1faW5SZWdpb25TY3JvbGxlci0+bm9kZSgpKTsKKyAg
ICAgICAgbV9pblJlZ2lvblNjcm9sbGVyLT5yZXNldCgpOwogICAgIH0KIH0KIApAQCAtMjYzNSw4
ICsyNjM0LDggQEAgdm9pZCBXZWJQYWdlUHJpdmF0ZTo6Y2xlYXJEb2N1bWVudERhdGEoY29uc3Qg
RG9jdW1lbnQqIGRvY3VtZW50R29pbmdBd2F5KQogICAgIGlmIChtX2N1cnJlbnRCbG9ja1pvb21B
ZGp1c3RlZE5vZGUgJiYgbV9jdXJyZW50QmxvY2tab29tQWRqdXN0ZWROb2RlLT5kb2N1bWVudCgp
ID09IGRvY3VtZW50R29pbmdBd2F5KQogICAgICAgICBtX2N1cnJlbnRCbG9ja1pvb21BZGp1c3Rl
ZE5vZGUgPSAwOwogCi0gICAgaWYgKG1faW5SZWdpb25TY3JvbGxTdGFydGluZ05vZGUgJiYgbV9p
blJlZ2lvblNjcm9sbFN0YXJ0aW5nTm9kZS0+ZG9jdW1lbnQoKSA9PSBkb2N1bWVudEdvaW5nQXdh
eSkKLSAgICAgICAgbV9pblJlZ2lvblNjcm9sbFN0YXJ0aW5nTm9kZSA9IDA7CisgICAgaWYgKG1f
aW5SZWdpb25TY3JvbGxlci0+aGFzTm9kZSgpICYmIG1faW5SZWdpb25TY3JvbGxlci0+bm9kZSgp
LT5kb2N1bWVudCgpID09IGRvY3VtZW50R29pbmdBd2F5KQorICAgICAgICBtX2luUmVnaW9uU2Ny
b2xsZXItPnJlc2V0KCk7CiAKICAgICBpZiAoZG9jdW1lbnRHb2luZ0F3YXktPmZyYW1lKCkpCiAg
ICAgICAgIG1faW5wdXRIYW5kbGVyLT5mcmFtZVVubG9hZGVkKGRvY3VtZW50R29pbmdBd2F5LT5m
cmFtZSgpKTsKQEAgLTI2NTYsMTUgKzI2NTUsNiBAQCBzdGF0aWMgYm9vbCBpc1Bvc2l0aW9uZWRD
b250YWluZXIoUmVuZGVyTGF5ZXIqIGxheWVyKQogICAgIHJldHVybiBvLT5pc1JlbmRlclZpZXco
KSB8fCBvLT5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSB8fCBvLT5pc1JlbFBvc2l0aW9uZWQoKSB8
fCBsYXllci0+aGFzVHJhbnNmb3JtKCk7CiB9CiAKLXN0YXRpYyBib29sIGlzTm9uUmVuZGVyVmll
d0ZpeGVkUG9zaXRpb25lZENvbnRhaW5lcihSZW5kZXJMYXllciogbGF5ZXIpCi17Ci0gICAgUmVu
ZGVyT2JqZWN0KiBvID0gbGF5ZXItPnJlbmRlcmVyKCk7Ci0gICAgaWYgKG8tPmlzUmVuZGVyVmll
dygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gby0+aXNPdXRPZkZsb3dQ
b3NpdGlvbmVkKCkgJiYgby0+c3R5bGUoKS0+cG9zaXRpb24oKSA9PSBGaXhlZFBvc2l0aW9uOwot
fQotCiBzdGF0aWMgYm9vbCBpc0ZpeGVkUG9zaXRpb25lZENvbnRhaW5lcihSZW5kZXJMYXllciog
bGF5ZXIpCiB7CiAgICAgUmVuZGVyT2JqZWN0KiBvID0gbGF5ZXItPnJlbmRlcmVyKCk7CkBAIC00
MjIzLDEyICs0MjEzLDEyIEBAIGJvb2wgV2ViUGFnZTo6dG91Y2hFdmVudChjb25zdCBQbGF0Zm9y
bTo6VG91Y2hFdmVudCYgZXZlbnQpCiAKIHZvaWQgV2ViUGFnZVByaXZhdGU6OnNldFNjcm9sbE9y
aWdpblBvaW50KGNvbnN0IFBsYXRmb3JtOjpJbnRQb2ludCYgcG9pbnQpCiB7Ci0gICAgbV9pblJl
Z2lvblNjcm9sbFN0YXJ0aW5nTm9kZSA9IDA7CisgICAgbV9pblJlZ2lvblNjcm9sbGVyLT5yZXNl
dCgpOwogCiAgICAgaWYgKCFtX2hhc0luUmVnaW9uU2Nyb2xsYWJsZUFyZWFzKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBtX2NsaWVudC0+bm90aWZ5SW5SZWdpb25TY3JvbGxpbmdTdGFydGluZ1Bv
aW50Q2hhbmdlZChpblJlZ2lvblNjcm9sbGFibGVBcmVhc0ZvclBvaW50KHBvaW50KSk7CisgICAg
bV9jbGllbnQtPm5vdGlmeUluUmVnaW9uU2Nyb2xsaW5nU3RhcnRpbmdQb2ludENoYW5nZWQobV9p
blJlZ2lvblNjcm9sbGVyLT5pblJlZ2lvblNjcm9sbGFibGVBcmVhc0ZvclBvaW50KHBvaW50KSk7
CiB9CiAKIHZvaWQgV2ViUGFnZTo6c2V0U2Nyb2xsT3JpZ2luUG9pbnQoY29uc3QgUGxhdGZvcm06
OkludFBvaW50JiBwb2ludCkKQEAgLTQzOTgsMTIwICs0Mzg4LDYgQEAgdm9pZCBXZWJQYWdlOjpz
ZXRGb3JjZWRUZXh0RW5jb2RpbmcoY29uc3QgY2hhciogZW5jb2RpbmcpCiAgICAgICAgIHJldHVy
biBkLT5mb2N1c2VkT3JNYWluRnJhbWUoKS0+bG9hZGVyKCktPnJlbG9hZFdpdGhPdmVycmlkZUVu
Y29kaW5nKGVuY29kaW5nKTsKIH0KIAotYm9vbCBXZWJQYWdlUHJpdmF0ZTo6c2Nyb2xsTm9kZVJl
Y3Vyc2l2ZWx5KE5vZGUqIG5vZGUsIGNvbnN0IEludFNpemUmIGRlbHRhKQotewotICAgIGlmIChk
ZWx0YS5pc1plcm8oKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoIW5vZGUpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBub2Rl
LT5yZW5kZXJlcigpOwotICAgIGlmICghcmVuZGVyZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIEZyYW1lVmlldyogdmlldyA9IHJlbmRlcmVyLT52aWV3KCktPmZyYW1lVmlldygpOwot
ICAgIGlmICghdmlldykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gVHJ5IHNjcm9s
bGluZyB0aGUgcmVuZGVyZXIuCi0gICAgaWYgKHNjcm9sbFJlbmRlcmVyKHJlbmRlcmVyLCBkZWx0
YSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gV2UndmUgaGl0IHRoZSBwYWdlLCBk
b24ndCBzY3JvbGwgaXQgYW5kIHJldHVybiBmYWxzZS4KLSAgICBpZiAodmlldyA9PSBtX21haW5G
cmFtZS0+dmlldygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBUcnkgc2Nyb2xs
aW5nIHRoZSBGcmFtZVZpZXcuCi0gICAgaWYgKGNhblNjcm9sbElubmVyRnJhbWUodmlldy0+ZnJh
bWUoKSkpIHsKLSAgICAgICAgSW50U2l6ZSB2aWV3RGVsdGEgPSBkZWx0YTsKLSAgICAgICAgSW50
UG9pbnQgbmV3Vmlld09mZnNldCA9IHZpZXctPnNjcm9sbFBvc2l0aW9uKCk7Ci0gICAgICAgIElu
dFBvaW50IG1heFZpZXdPZmZzZXQgPSB2aWV3LT5tYXhpbXVtU2Nyb2xsUG9zaXRpb24oKTsKLSAg
ICAgICAgYWRqdXN0U2Nyb2xsRGVsdGEobWF4Vmlld09mZnNldCwgbmV3Vmlld09mZnNldCwgdmll
d0RlbHRhKTsKLQotICAgICAgICBpZiAoIXZpZXdEZWx0YS5pc1plcm8oKSkgewotICAgICAgICAg
ICAgdmlldy0+c2V0Q2FuQmxpdE9uU2Nyb2xsKGZhbHNlKTsKLQotICAgICAgICAgICAgQmFja2lu
Z1N0b3JlQ2xpZW50KiBiYWNraW5nU3RvcmVDbGllbnQgPSBiYWNraW5nU3RvcmVDbGllbnRGb3JG
cmFtZSh2aWV3LT5mcmFtZSgpKTsKLSAgICAgICAgICAgIGlmIChiYWNraW5nU3RvcmVDbGllbnQp
IHsKLSAgICAgICAgICAgICAgICBiYWNraW5nU3RvcmVDbGllbnQtPnNldElzQ2xpZW50R2VuZXJh
dGVkU2Nyb2xsKHRydWUpOwotICAgICAgICAgICAgICAgIGJhY2tpbmdTdG9yZUNsaWVudC0+c2V0
SXNTY3JvbGxOb3RpZmljYXRpb25TdXBwcmVzc2VkKHRydWUpOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBtX2luUmVnaW9uU2Nyb2xsU3RhcnRpbmdOb2RlID0gdmlldy0+ZnJhbWUoKS0+
ZG9jdW1lbnQoKTsKLQotICAgICAgICAgICAgdmlldy0+c2Nyb2xsQnkodmlld0RlbHRhKTsKLQot
ICAgICAgICAgICAgaWYgKGJhY2tpbmdTdG9yZUNsaWVudCkgewotICAgICAgICAgICAgICAgIGJh
Y2tpbmdTdG9yZUNsaWVudC0+c2V0SXNDbGllbnRHZW5lcmF0ZWRTY3JvbGwoZmFsc2UpOwotICAg
ICAgICAgICAgICAgIGJhY2tpbmdTdG9yZUNsaWVudC0+c2V0SXNTY3JvbGxOb3RpZmljYXRpb25T
dXBwcmVzc2VkKGZhbHNlKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBUcnkgc2Nyb2xsaW5nIHRoZSBub2RlIG9m
IHRoZSBlbmNsb3NpbmcgZnJhbWUuCi0gICAgRnJhbWUqIGZyYW1lID0gbm9kZS0+ZG9jdW1lbnQo
KS0+ZnJhbWUoKTsKLSAgICBpZiAoZnJhbWUpIHsKLSAgICAgICAgTm9kZSogb3duZXJOb2RlID0g
ZnJhbWUtPm93bmVyRWxlbWVudCgpOwotICAgICAgICBpZiAoc2Nyb2xsTm9kZVJlY3Vyc2l2ZWx5
KG93bmVyTm9kZSwgZGVsdGEpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFdlYlBhZ2VQcml2YXRlOjphZGp1c3RTY3JvbGxE
ZWx0YShjb25zdCBJbnRQb2ludCYgbWF4T2Zmc2V0LCBjb25zdCBJbnRQb2ludCYgY3VycmVudE9m
ZnNldCwgSW50U2l6ZSYgZGVsdGEpIGNvbnN0Ci17Ci0gICAgaWYgKGN1cnJlbnRPZmZzZXQueCgp
ICsgZGVsdGEud2lkdGgoKSA+IG1heE9mZnNldC54KCkpCi0gICAgICAgIGRlbHRhLnNldFdpZHRo
KG1pbihtYXhPZmZzZXQueCgpIC0gY3VycmVudE9mZnNldC54KCksIGRlbHRhLndpZHRoKCkpKTsK
LQotICAgIGlmIChjdXJyZW50T2Zmc2V0LngoKSArIGRlbHRhLndpZHRoKCkgPCAwKQotICAgICAg
ICBkZWx0YS5zZXRXaWR0aChtYXgoLWN1cnJlbnRPZmZzZXQueCgpLCBkZWx0YS53aWR0aCgpKSk7
Ci0KLSAgICBpZiAoY3VycmVudE9mZnNldC55KCkgKyBkZWx0YS5oZWlnaHQoKSA+IG1heE9mZnNl
dC55KCkpCi0gICAgICAgIGRlbHRhLnNldEhlaWdodChtaW4obWF4T2Zmc2V0LnkoKSAtIGN1cnJl
bnRPZmZzZXQueSgpLCBkZWx0YS5oZWlnaHQoKSkpOwotCi0gICAgaWYgKGN1cnJlbnRPZmZzZXQu
eSgpICsgZGVsdGEuaGVpZ2h0KCkgPCAwKQotICAgICAgICBkZWx0YS5zZXRIZWlnaHQobWF4KC1j
dXJyZW50T2Zmc2V0LnkoKSwgZGVsdGEuaGVpZ2h0KCkpKTsKLX0KLQotc3RhdGljIE5vZGUqIGVu
Y2xvc2luZ0xheWVyTm9kZShSZW5kZXJMYXllciopOwotCi1ib29sIFdlYlBhZ2VQcml2YXRlOjpz
Y3JvbGxSZW5kZXJlcihSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBJbnRTaXplJiBkZWx0
YSkKLXsKLSAgICBSZW5kZXJMYXllciogbGF5ZXIgPSByZW5kZXJlci0+ZW5jbG9zaW5nTGF5ZXIo
KTsKLSAgICBpZiAoIWxheWVyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBUcnkg
dG8gc2Nyb2xsIGxheWVyLgotICAgIGJvb2wgcmVzdHJpY3RlZEJ5TGluZUNsYW1wID0gZmFsc2U7
Ci0gICAgaWYgKHJlbmRlcmVyLT5wYXJlbnQoKSkKLSAgICAgICAgcmVzdHJpY3RlZEJ5TGluZUNs
YW1wID0gIXJlbmRlcmVyLT5wYXJlbnQoKS0+c3R5bGUoKS0+bGluZUNsYW1wKCkuaXNOb25lKCk7
Ci0KLSAgICBpZiAocmVuZGVyZXItPmhhc092ZXJmbG93Q2xpcCgpICYmICFyZXN0cmljdGVkQnlM
aW5lQ2xhbXApIHsKLSAgICAgICAgSW50U2l6ZSBsYXllckRlbHRhID0gZGVsdGE7Ci0gICAgICAg
IEludFBvaW50IG1heE9mZnNldChsYXllci0+c2Nyb2xsV2lkdGgoKSAtIGxheWVyLT5yZW5kZXJC
b3goKS0+Y2xpZW50V2lkdGgoKSwgbGF5ZXItPnNjcm9sbEhlaWdodCgpIC0gbGF5ZXItPnJlbmRl
ckJveCgpLT5jbGllbnRIZWlnaHQoKSk7Ci0gICAgICAgIEludFBvaW50IGN1cnJlbnRPZmZzZXQo
bGF5ZXItPnNjcm9sbFhPZmZzZXQoKSwgbGF5ZXItPnNjcm9sbFlPZmZzZXQoKSk7Ci0gICAgICAg
IGFkanVzdFNjcm9sbERlbHRhKG1heE9mZnNldCwgY3VycmVudE9mZnNldCwgbGF5ZXJEZWx0YSk7
Ci0gICAgICAgIGlmICghbGF5ZXJEZWx0YS5pc1plcm8oKSkgewotICAgICAgICAgICAgbV9pblJl
Z2lvblNjcm9sbFN0YXJ0aW5nTm9kZSA9IGVuY2xvc2luZ0xheWVyTm9kZShsYXllcik7Ci0gICAg
ICAgICAgICBJbnRQb2ludCBuZXdPZmZzZXQgPSBjdXJyZW50T2Zmc2V0ICsgbGF5ZXJEZWx0YTsK
LSAgICAgICAgICAgIGxheWVyLT5zY3JvbGxUb09mZnNldCh0b1NpemUobmV3T2Zmc2V0KSk7Ci0g
ICAgICAgICAgICByZW5kZXJlci0+cmVwYWludCh0cnVlKTsKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgd2hpbGUgKGxheWVyID0gbGF5ZXItPnBhcmVu
dCgpKSB7Ci0gICAgICAgIGlmIChjYW5TY3JvbGxSZW5kZXJCb3gobGF5ZXItPnJlbmRlckJveCgp
KSkKLSAgICAgICAgICAgIHJldHVybiBzY3JvbGxSZW5kZXJlcihsYXllci0+cmVuZGVyQm94KCks
IGRlbHRhKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIHN0YXRpYyB2b2lkIGhh
bmRsZVNjcm9sbGluZyh1bnNpZ25lZCBzaG9ydCBjaGFyYWN0ZXIsIFdlYlBhZ2VQcml2YXRlKiBz
Y3JvbGxlcikKIHsKICAgICBjb25zdCBpbnQgc2Nyb2xsRmFjdG9yID0gMjA7CkBAIC00Nzc1LDE2
OSArNDY1MSw2IEBAIHZvaWQgV2ViUGFnZTo6c2VsZWN0QXRQb2ludChjb25zdCBQbGF0Zm9ybTo6
SW50UG9pbnQmIGxvY2F0aW9uKQogICAgIGQtPm1fc2VsZWN0aW9uSGFuZGxlci0+c2VsZWN0QXRQ
b2ludChzZWxlY3Rpb25Mb2NhdGlvbik7CiB9CiAKLS8vIEZJWE1FOiBNb3ZlIHRvIERPTVN1cHBv
cnQuCi1ib29sIFdlYlBhZ2VQcml2YXRlOjpjYW5TY3JvbGxJbm5lckZyYW1lKEZyYW1lKiBmcmFt
ZSkgY29uc3QKLXsKLSAgICBpZiAoIWZyYW1lIHx8ICFmcmFtZS0+dmlldygpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBOb3QgaGF2aW5nIGFuIG93bmVyIGVsZW1lbnQgbWVhbnMg
dGhhdCB3ZSBhcmUgb24gdGhlIG1haW5mcmFtZS4KLSAgICBpZiAoIWZyYW1lLT5vd25lckVsZW1l
bnQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQVNTRVJUKGZyYW1lICE9IG1fbWFp
bkZyYW1lKTsKLQotICAgIEludFNpemUgdmlzaWJsZVNpemUgPSBmcmFtZS0+dmlldygpLT52aXNp
YmxlQ29udGVudFJlY3QoKS5zaXplKCk7Ci0gICAgSW50U2l6ZSBjb250ZW50c1NpemUgPSBmcmFt
ZS0+dmlldygpLT5jb250ZW50c1NpemUoKTsKLQotICAgIGJvb2wgY2FuQmVTY3JvbGxlZCA9IGNv
bnRlbnRzU2l6ZS5oZWlnaHQoKSA+IHZpc2libGVTaXplLmhlaWdodCgpIHx8IGNvbnRlbnRzU2l6
ZS53aWR0aCgpID4gdmlzaWJsZVNpemUud2lkdGgoKTsKLQotICAgIC8vIExldHMgYWxzbyBjb25z
aWRlciB0aGUgJ292ZXJmbG93LXt4LHl9IHByb3BlcnR5IHNldCBkaXJlY3RseSB0byB0aGUge2l9
ZnJhbWUgdGFnLgotICAgIHJldHVybiBjYW5CZVNjcm9sbGVkICYmIChmcmFtZS0+b3duZXJFbGVt
ZW50KCktPnNjcm9sbGluZ01vZGUoKSAhPSBTY3JvbGxiYXJBbHdheXNPZmYpOwotfQotCi0vLyBU
aGUgUmVuZGVyQm94OjpjYW5iZVNjcm9sbGVkQW5kSGFzU2Nyb2xsYWJsZUFyZWEgbWV0aG9kIHJl
dHVybnMgdHJ1ZSBmb3IgdGhlCi0vLyBmb2xsb3dpbmcgc2NlbmFyaW8sIGZvciBleGFtcGxlOgot
Ly8gKDEpIGEgZGl2IHRoYXQgaGFzIGEgdmVydGljYWwgb3ZlcmZsb3cgYnV0IG5vIGhvcml6b250
YWwgb3ZlcmZsb3cKLS8vICAgICB3aXRoIG92ZXJmbG93LXk6IGhpZGRlbiBhbmQgb3ZlcmZsb3ct
eDogYXV0byBzZXQuCi0vLyBUaGUgdmVyc2lvbiBiZWxvdyBmaXhlcyBpdC4KLS8vIEZJWE1FOiBG
aXggUmVuZGVyQm94OjpjYW5CZVNjcm9sbGVkQW5kSGFzU2Nyb2xsYWJsZUFyZWEgbWV0aG9kIGlu
c3RlYWQuCi1ib29sIFdlYlBhZ2VQcml2YXRlOjpjYW5TY3JvbGxSZW5kZXJCb3goUmVuZGVyQm94
KiBib3gpCi17Ci0gICAgaWYgKCFib3ggfHwgIWJveC0+aGFzT3ZlcmZsb3dDbGlwKCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChib3gtPnNjcm9sbHNPdmVyZmxvd1goKSAmJiAo
Ym94LT5zY3JvbGxXaWR0aCgpICE9IGJveC0+Y2xpZW50V2lkdGgoKSkKLSAgICAgICAgfHwgYm94
LT5zY3JvbGxzT3ZlcmZsb3dZKCkgJiYgKGJveC0+c2Nyb2xsSGVpZ2h0KCkgIT0gYm94LT5jbGll
bnRIZWlnaHQoKSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgTm9kZSogbm9kZSA9IGJv
eC0+bm9kZSgpOwotICAgIHJldHVybiBub2RlICYmIChub2RlLT5yZW5kZXJlcklzRWRpdGFibGUo
KSB8fCBub2RlLT5pc0RvY3VtZW50Tm9kZSgpKTsKLX0KLQotc3RhdGljIFJlbmRlckxheWVyKiBw
YXJlbnRMYXllcihSZW5kZXJMYXllciogbGF5ZXIpCi17Ci0gICAgQVNTRVJUKGxheWVyKTsKLSAg
ICBpZiAobGF5ZXItPnBhcmVudCgpKQotICAgICAgICByZXR1cm4gbGF5ZXItPnBhcmVudCgpOwot
Ci0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGxheWVyLT5yZW5kZXJlcigpOwotICAgIGlm
IChyZW5kZXJlci0+ZG9jdW1lbnQoKSAmJiByZW5kZXJlci0+ZG9jdW1lbnQoKS0+b3duZXJFbGVt
ZW50KCkgJiYgcmVuZGVyZXItPmRvY3VtZW50KCktPm93bmVyRWxlbWVudCgpLT5yZW5kZXJlcigp
KQotICAgICAgICByZXR1cm4gcmVuZGVyZXItPmRvY3VtZW50KCktPm93bmVyRWxlbWVudCgpLT5y
ZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLS8vIEZJ
WE1FOiBNYWtlIFJlbmRlckxheWVyOjplbmNsb3NpbmdFbGVtZW50IHB1YmxpYyBzbyB0aGlzIG9u
ZSBjYW4gYmUgcmVtb3ZlZC4KLXN0YXRpYyBOb2RlKiBlbmNsb3NpbmdMYXllck5vZGUoUmVuZGVy
TGF5ZXIqIGxheWVyKQotewotICAgIGZvciAoUmVuZGVyT2JqZWN0KiByID0gbGF5ZXItPnJlbmRl
cmVyKCk7IHI7IHIgPSByLT5wYXJlbnQoKSkgewotICAgICAgICBpZiAoTm9kZSogZSA9IHItPm5v
ZGUoKSkKLSAgICAgICAgICAgIHJldHVybiBlOwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgcHVzaEJhY2tJblJlZ2lvblNj
cm9sbGFibGUoc3RkOjp2ZWN0b3I8UGxhdGZvcm06OlNjcm9sbFZpZXdCYXNlKj4mIHZlY3Rvciwg
SW5SZWdpb25TY3JvbGxhYmxlQXJlYSogc2Nyb2xsZXIsIFdlYlBhZ2VQcml2YXRlKiB3ZWJQYWdl
KQotewotICAgIEFTU0VSVCh3ZWJQYWdlKTsKLSAgICBBU1NFUlQoIXNjcm9sbGVyLmlzTnVsbCgp
KTsKLQotICAgIHNjcm9sbGVyLT5zZXRDYW5Qcm9wYWdhdGVTY3JvbGxpbmdUb0VuY2xvc2luZ1Nj
cm9sbGFibGUoIWlzTm9uUmVuZGVyVmlld0ZpeGVkUG9zaXRpb25lZENvbnRhaW5lcihzY3JvbGxl
ci0+bGF5ZXIoKSkpOwotICAgIHZlY3Rvci5wdXNoX2JhY2soc2Nyb2xsZXIpOwotICAgIGlmICh2
ZWN0b3Iuc2l6ZSgpID09IDEpIHsKLSAgICAgICAgLy8gRklYTUU6IFVzZSBSZW5kZXJMYXllcjo6
cmVuZGVyQm94KCktPm5vZGUoKSBpbnN0ZWFkPwotICAgICAgICB3ZWJQYWdlLT5tX2luUmVnaW9u
U2Nyb2xsU3RhcnRpbmdOb2RlID0gZW5jbG9zaW5nTGF5ZXJOb2RlKHNjcm9sbGVyLT5sYXllcigp
KTsKLSAgICB9Ci19Ci0KLXN0ZDo6dmVjdG9yPFBsYXRmb3JtOjpTY3JvbGxWaWV3QmFzZSo+IFdl
YlBhZ2VQcml2YXRlOjppblJlZ2lvblNjcm9sbGFibGVBcmVhc0ZvclBvaW50KGNvbnN0IFBsYXRm
b3JtOjpJbnRQb2ludCYgcG9pbnQpCi17Ci0gICAgc3RkOjp2ZWN0b3I8UGxhdGZvcm06OlNjcm9s
bFZpZXdCYXNlKj4gdmFsaWRSZXR1cm47Ci0gICAgc3RkOjp2ZWN0b3I8UGxhdGZvcm06OlNjcm9s
bFZpZXdCYXNlKj4gZW1wdHlSZXR1cm47Ci0KLSAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdCA9IG1f
bWFpbkZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGl0VGVzdFJlc3VsdEF0UG9pbnQobWFwRnJvbVZp
ZXdwb3J0VG9Db250ZW50cyhwb2ludCksIGZhbHNlIC8qYWxsb3dTaGFkb3dDb250ZW50Ki8pOwot
ICAgIE5vZGUqIG5vZGUgPSByZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCk7Ci0gICAgaWYgKCFu
b2RlKQotICAgICAgICByZXR1cm4gZW1wdHlSZXR1cm47Ci0KLSAgICBSZW5kZXJPYmplY3QqIHJl
bmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKLSAgICAvLyBGSVhNRTogVmFsaWRhdGUgd2l0aCBl
bGVtZW50cyB3aXRoIHZpc2liaWxpdHk6aGlkZGVuLgotICAgIGlmICghcmVuZGVyZXIpCi0gICAg
ICAgIHJldHVybiBlbXB0eVJldHVybjsKLQotICAgIFJlbmRlckxheWVyKiBsYXllciA9IHJlbmRl
cmVyLT5lbmNsb3NpbmdMYXllcigpOwotICAgIGRvIHsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlciA9IGxheWVyLT5yZW5kZXJlcigpOwotCi0gICAgICAgIGlmIChyZW5kZXJlci0+aXNS
ZW5kZXJWaWV3KCkpIHsKLSAgICAgICAgICAgIGlmIChSZW5kZXJWaWV3KiByZW5kZXJWaWV3ID0g
dG9SZW5kZXJWaWV3KHJlbmRlcmVyKSkgewotICAgICAgICAgICAgICAgIEZyYW1lVmlldyogdmll
dyA9IHJlbmRlclZpZXctPmZyYW1lVmlldygpOwotICAgICAgICAgICAgICAgIGlmICghdmlldykK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVtcHR5UmV0dXJuOwotCi0gICAgICAgICAgICAg
ICAgaWYgKGNhblNjcm9sbElubmVyRnJhbWUodmlldy0+ZnJhbWUoKSkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgcHVzaEJhY2tJblJlZ2lvblNjcm9sbGFibGUodmFsaWRSZXR1cm4sIG5ldyBJblJl
Z2lvblNjcm9sbGFibGVBcmVhKHRoaXMsIGxheWVyKSwgdGhpcyk7Ci0gICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
fSBlbHNlIGlmIChjYW5TY3JvbGxSZW5kZXJCb3gobGF5ZXItPnJlbmRlckJveCgpKSkgewotICAg
ICAgICAgICAgcHVzaEJhY2tJblJlZ2lvblNjcm9sbGFibGUodmFsaWRSZXR1cm4sIG5ldyBJblJl
Z2lvblNjcm9sbGFibGVBcmVhKHRoaXMsIGxheWVyKSwgdGhpcyk7Ci0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIElmIHdlIHJ1biBpbnRvIGEgZml4IHBvc2l0
aW9uZWQgbGF5ZXIsIHNldCB0aGUgbGFzdCBzY3JvbGxhYmxlIGluLXJlZ2lvbiBvYmplY3QKLSAg
ICAgICAgLy8gYXMgbm90IGFibGUgdG8gcHJvcGFnYXRlIHNjcm9sbCB0byBpdHMgcGFyZW50IHNj
cm9sbGFibGUuCi0gICAgICAgIGlmIChpc05vblJlbmRlclZpZXdGaXhlZFBvc2l0aW9uZWRDb250
YWluZXIobGF5ZXIpICYmIHZhbGlkUmV0dXJuLnNpemUoKSkgewotICAgICAgICAgICAgUGxhdGZv
cm06OlNjcm9sbFZpZXdCYXNlKiBlbmQgPSB2YWxpZFJldHVybi5iYWNrKCk7Ci0gICAgICAgICAg
ICBlbmQtPnNldENhblByb3BhZ2F0ZVNjcm9sbGluZ1RvRW5jbG9zaW5nU2Nyb2xsYWJsZShmYWxz
ZSk7Ci0gICAgICAgIH0KLQotICAgIH0gd2hpbGUgKGxheWVyID0gcGFyZW50TGF5ZXIobGF5ZXIp
KTsKLQotICAgIGlmICh2YWxpZFJldHVybi5lbXB0eSgpKQotICAgICAgICByZXR1cm4gZW1wdHlS
ZXR1cm47Ci0KLSAgICAvLyBQb3N0LWNhbGN1bGF0ZSB0aGUgdmlzaWJsZSB3aW5kb3cgcmVjdHMg
aW4gcmV2ZXJzZSBoaXQgdGVzdCBvcmRlciBzbwotICAgIC8vIHdlIGFjY291bnQgZm9yIGFsbCBh
bmQgYW55IGNsaXBwaW5nIHJlY3RzLgotICAgIFdlYkNvcmU6OkludFJlY3QgcmVjdXJzaXZlQ2xp
cHBpbmdSZWN0KFdlYkNvcmU6OkludFBvaW50Ojp6ZXJvKCksIHRyYW5zZm9ybWVkVmlld3BvcnRT
aXplKCkpOwotCi0gICAgc3RkOjp2ZWN0b3I8UGxhdGZvcm06OlNjcm9sbFZpZXdCYXNlKj46OnJl
dmVyc2VfaXRlcmF0b3IgcmVuZCA9IHZhbGlkUmV0dXJuLnJlbmQoKTsKLSAgICBmb3IgKHN0ZDo6
dmVjdG9yPFBsYXRmb3JtOjpTY3JvbGxWaWV3QmFzZSo+OjpyZXZlcnNlX2l0ZXJhdG9yIHJpdCA9
IHZhbGlkUmV0dXJuLnJiZWdpbigpOyByaXQgIT0gcmVuZDsgKytyaXQpIHsKLQotICAgICAgICBJ
blJlZ2lvblNjcm9sbGFibGVBcmVhKiBjdXJyID0gc3RhdGljX2Nhc3Q8SW5SZWdpb25TY3JvbGxh
YmxlQXJlYSo+KCpyaXQpOwotICAgICAgICBSZW5kZXJMYXllciogbGF5ZXIgPSBjdXJyLT5sYXll
cigpOwotCi0gICAgICAgIGlmIChsYXllciAmJiBsYXllci0+cmVuZGVyZXIoKS0+aXNSZW5kZXJW
aWV3KCkpIHsgLy8gI2RvY3VtZW50IGNhc2UKLSAgICAgICAgICAgIEZyYW1lVmlldyogdmlldyA9
IHRvUmVuZGVyVmlldyhsYXllci0+cmVuZGVyZXIoKSktPmZyYW1lVmlldygpOwotICAgICAgICAg
ICAgQVNTRVJUKHZpZXcpOwotICAgICAgICAgICAgQVNTRVJUKGNhblNjcm9sbElubmVyRnJhbWUo
dmlldy0+ZnJhbWUoKSkpOwotCi0gICAgICAgICAgICBXZWJDb3JlOjpJbnRSZWN0IGZyYW1lV2lu
ZG93UmVjdCA9IG1hcFRvVHJhbnNmb3JtZWQoZ2V0UmVjdXJzaXZlVmlzaWJsZVdpbmRvd1JlY3Qo
dmlldykpOwotICAgICAgICAgICAgZnJhbWVXaW5kb3dSZWN0LmludGVyc2VjdChyZWN1cnNpdmVD
bGlwcGluZ1JlY3QpOwotICAgICAgICAgICAgY3Vyci0+c2V0VmlzaWJsZVdpbmRvd1JlY3QoZnJh
bWVXaW5kb3dSZWN0KTsKLSAgICAgICAgICAgIHJlY3Vyc2l2ZUNsaXBwaW5nUmVjdCA9IGZyYW1l
V2luZG93UmVjdDsKLQotICAgICAgICB9IGVsc2UgeyAvLyBSZW5kZXJCb3gtYmFzZWQgZWxlbWVu
dHMgY2FzZSAoc2Nyb2xsYWJsZSBib3hlcyAoZGl2J3MsIHAncywgdGV4dGFyZWEncywgZXRjKSku
Ci0KLSAgICAgICAgICAgIFJlbmRlckJveCogYm94ID0gbGF5ZXItPnJlbmRlckJveCgpOwotICAg
ICAgICAgICAgQVNTRVJUKGJveCk7Ci0gICAgICAgICAgICBBU1NFUlQoY2FuU2Nyb2xsUmVuZGVy
Qm94KGJveCkpOwotCi0gICAgICAgICAgICBXZWJDb3JlOjpJbnRSZWN0IHZpc2libGVXaW5kb3dS
ZWN0ID0gYm94LT5hYnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3QoKTsKLSAgICAgICAgICAgIHZp
c2libGVXaW5kb3dSZWN0ID0gYm94LT5mcmFtZSgpLT52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3co
dmlzaWJsZVdpbmRvd1JlY3QpOwotICAgICAgICAgICAgdmlzaWJsZVdpbmRvd1JlY3QgPSBtYXBU
b1RyYW5zZm9ybWVkKHZpc2libGVXaW5kb3dSZWN0KTsKLSAgICAgICAgICAgIHZpc2libGVXaW5k
b3dSZWN0LmludGVyc2VjdChyZWN1cnNpdmVDbGlwcGluZ1JlY3QpOwotCi0gICAgICAgICAgICBj
dXJyLT5zZXRWaXNpYmxlV2luZG93UmVjdCh2aXNpYmxlV2luZG93UmVjdCk7Ci0gICAgICAgICAg
ICByZWN1cnNpdmVDbGlwcGluZ1JlY3QgPSB2aXNpYmxlV2luZG93UmVjdDsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIHJldHVybiB2YWxpZFJldHVybjsKLX0KLQogQmFja2luZ1N0b3JlKiBXZWJQ
YWdlOjpiYWNraW5nU3RvcmUoKSBjb25zdAogewogICAgIHJldHVybiBkLT5tX2JhY2tpbmdTdG9y
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFnZV9wLmgg
Yi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2VfcC5oCmluZGV4IGNlZjUzZjcu
LmE3YzA2OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFn
ZV9wLmgKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJQYWdlX3AuaApAQCAt
MjAsNiArMjAsNyBAQAogI2RlZmluZSBXZWJQYWdlX3BfaAogCiAjaW5jbHVkZSAiQ2hyb21lQ2xp
ZW50LmgiCisjaW5jbHVkZSAiSW5SZWdpb25TY3JvbGxlci5oIgogI2luY2x1ZGUgIkluc3BlY3Rv
ckNsaWVudEJsYWNrQmVycnkuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JPdmVybGF5LmgiCiAjaWYg
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpAQCAtMTQzLDcgKzE0NCw2IEBAIHB1YmxpYzoK
ICAgICBib29sIHNjcm9sbEJ5KGludCBkZWx0YVgsIGludCBkZWx0YVksIGJvb2wgc2Nyb2xsTWFp
bkZyYW1lID0gdHJ1ZSk7CiAKICAgICB2b2lkIGVucXVldWVSZW5kZXJpbmdPZkNsaXBwZWRDb250
ZW50T2ZTY3JvbGxhYmxlTm9kZUFmdGVySW5SZWdpb25TY3JvbGxpbmcoV2ViQ29yZTo6Tm9kZSop
OwotICAgIHN0ZDo6dmVjdG9yPFBsYXRmb3JtOjpTY3JvbGxWaWV3QmFzZSo+IGluUmVnaW9uU2Ny
b2xsYWJsZUFyZWFzRm9yUG9pbnQoY29uc3QgUGxhdGZvcm06OkludFBvaW50Jik7CiAgICAgdm9p
ZCBub3RpZnlJblJlZ2lvblNjcm9sbFN0YXR1c0NoYW5nZWQoYm9vbCBzdGF0dXMpOwogICAgIHZv
aWQgc2V0U2Nyb2xsT3JpZ2luUG9pbnQoY29uc3QgUGxhdGZvcm06OkludFBvaW50Jik7CiAgICAg
dm9pZCBzZXRIYXNJblJlZ2lvblNjcm9sbGFibGVBcmVhcyhib29sKTsKQEAgLTMzMCwxMyArMzMw
LDYgQEAgcHVibGljOgogICAgIFdlYkNvcmU6OkZyYW1lKiBmb2N1c2VkT3JNYWluRnJhbWUoKSBj
b25zdDsKICAgICBXZWJDb3JlOjpGcmFtZSogbWFpbkZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9t
YWluRnJhbWU7IH0KIAotICAgIGJvb2wgc2Nyb2xsTm9kZVJlY3Vyc2l2ZWx5KFdlYkNvcmU6Ok5v
ZGUqIG9yaWdpbmFsTm9kZSwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgZGVsdGEpOwotICAgIGJv
b2wgc2Nyb2xsUmVuZGVyZXIoV2ViQ29yZTo6UmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3Qg
V2ViQ29yZTo6SW50U2l6ZSYgZGVsdGEpOwotICAgIHZvaWQgYWRqdXN0U2Nyb2xsRGVsdGEoY29u
c3QgV2ViQ29yZTo6SW50UG9pbnQmIG1heE9mZnNldCwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQm
IGN1cnJlbnRPZmZzZXQsIFdlYkNvcmU6OkludFNpemUmIGRlbHRhKSBjb25zdDsKLQotICAgIGJv
b2wgY2FuU2Nyb2xsUmVuZGVyQm94KFdlYkNvcmU6OlJlbmRlckJveCopOwotICAgIGJvb2wgY2Fu
U2Nyb2xsSW5uZXJGcmFtZShXZWJDb3JlOjpGcmFtZSopIGNvbnN0OwotCiAjaWYgRU5BQkxFKEVW
RU5UX01PREVfTUVUQVRBR1MpCiAgICAgdm9pZCBkaWRSZWNlaXZlQ3Vyc29yRXZlbnRNb2RlKFdl
YkNvcmU6OkN1cnNvckV2ZW50TW9kZSk7CiAgICAgdm9pZCBkaWRSZWNlaXZlVG91Y2hFdmVudE1v
ZGUoV2ViQ29yZTo6VG91Y2hFdmVudE1vZGUpOwpAQCAtNTU2LDcgKzU0OSw3IEBAIHB1YmxpYzoK
IAogICAgIEhhc2hTZXQ8V2ViQ29yZTo6UGx1Z2luVmlldyo+IG1fcGx1Z2luVmlld3M7CiAKLSAg
ICBSZWZQdHI8V2ViQ29yZTo6Tm9kZT4gbV9pblJlZ2lvblNjcm9sbFN0YXJ0aW5nTm9kZTsKKyAg
ICBPd25QdHI8SW5SZWdpb25TY3JvbGxlcj4gbV9pblJlZ2lvblNjcm9sbGVyOwogCiAjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIGJvb2wgbV9pc0FjY2VsZXJhdGVkQ29tcG9z
aXRpbmdBY3RpdmU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQ2hhbmdl
TG9nIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5nZUxvZwppbmRleCA1ODIxZTdmLi5i
NmZkYjY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1NSBAQAor
MjAxMi0wOC0wMSAgQW50b25pbyBHb21lcyAgPGFnb21lc0ByaW0uY29tPgorCisgICAgICAgIFtC
bGFja0JlcnJ5XSBJbXBsZW1lbnQgSW5SZWdpb25TY3JvbGxlciBjbGFzcyBhcyBhIGluLXJlZ2lv
biBzY3JvbGwgY29udHJvbGxlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9OTI4ODkKKyAgICAgICAgUFIgIzE4NjU4NworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmVkIGFsbCBpbi1yZWdpb24gc2Nyb2xs
aW5nIGNvZGUgb3V0IG9mIFdlYlBhZ2VQcml2YXRlIHRvIHRoZSBqdXN0CisgICAgICAgIGNyZWF0
ZWQgSW5SZWdpb25TY3JvbGxlciBjbGFzcy4gVGhpcyBjbGFzcyBhaW1zIHRvOgorCisgICAgICAg
IDEpIENlbnRyYWxpemUgYWxsIGluLXJlZ2lvbiBzY3JvbGwgY29kZSBhbmQgY2xlYW4gdXAgV2Vi
UGFnZVByaXZhdGUgYXMgYSBjb25zZXF1ZW5jZS4KKyAgICAgICAgMikgQmUgdGhlIGJhc2VzIHRv
IGFkZCBVSS9Db21wb3NpdGluZyB0aHJlYWQgZHJpdmVuIHNjcm9sbHMgdG8gaW4tcmVnaW9uLgor
CisgICAgICAgIFRoZSBwYXRjaCBkb2VzIG5vdCBjaGFuZ2UgYW55IGZ1bmN0aW9uYWxsaXR5IGNo
YW5nZS4KKworICAgICAgICAqIEFwaS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKEJsYWNrQmVycnk6
OldlYktpdDo6V2ViUGFnZVByaXZhdGU6OldlYlBhZ2VQcml2YXRlKToKKyAgICAgICAgKEJsYWNr
QmVycnk6OldlYktpdDo6V2ViUGFnZVByaXZhdGU6OmluaXQpOgorICAgICAgICAoQmxhY2tCZXJy
eTo6V2ViS2l0OjpXZWJQYWdlUHJpdmF0ZTo6c2Nyb2xsQnkpOgorICAgICAgICAoQmxhY2tCZXJy
eTo6V2ViS2l0OjpXZWJQYWdlUHJpdmF0ZTo6bm90aWZ5SW5SZWdpb25TY3JvbGxTdGF0dXNDaGFu
Z2VkKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFnZVByaXZhdGU6OmNsZWFy
RG9jdW1lbnREYXRhKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFnZVByaXZh
dGU6OnNldFNjcm9sbE9yaWdpblBvaW50KToKKyAgICAgICAgKiBBcGkvV2ViUGFnZV9wLmg6Cisg
ICAgICAgIChXZWJQYWdlUHJpdmF0ZSk6CisgICAgICAgICogV2ViS2l0U3VwcG9ydC9JblJlZ2lv
blNjcm9sbGFibGVBcmVhLmNwcDoKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6SW5SZWdp
b25TY3JvbGxhYmxlQXJlYTo6bGF5ZXIpOgorICAgICAgICAqIFdlYktpdFN1cHBvcnQvSW5SZWdp
b25TY3JvbGxlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKEJsYWNr
QmVycnk6OldlYktpdDo6Y2FuU2Nyb2xsSW5uZXJGcmFtZSk6CisgICAgICAgIChCbGFja0JlcnJ5
OjpXZWJLaXQ6OmNhblNjcm9sbFJlbmRlckJveCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJL
aXQ6OnBhcmVudExheWVyKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6ZW5jbG9zaW5n
TGF5ZXJOb2RlKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6aXNOb25SZW5kZXJWaWV3
Rml4ZWRQb3NpdGlvbmVkQ29udGFpbmVyKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6
cHVzaEJhY2tJblJlZ2lvblNjcm9sbGFibGUpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0
OjpJblJlZ2lvblNjcm9sbGVyOjpJblJlZ2lvblNjcm9sbGVyKToKKyAgICAgICAgKEJsYWNrQmVy
cnk6OldlYktpdDo6SW5SZWdpb25TY3JvbGxlcjo6c2V0Tm9kZSk6CisgICAgICAgIChCbGFja0Jl
cnJ5OjpXZWJLaXQ6OkluUmVnaW9uU2Nyb2xsZXI6Om5vZGUpOgorICAgICAgICAoQmxhY2tCZXJy
eTo6V2ViS2l0OjpJblJlZ2lvblNjcm9sbGVyOjpyZXNldCk6CisgICAgICAgIChCbGFja0JlcnJ5
OjpXZWJLaXQ6OkluUmVnaW9uU2Nyb2xsZXI6OmlzTnVsbCk6CisgICAgICAgIChCbGFja0JlcnJ5
OjpXZWJLaXQ6OkluUmVnaW9uU2Nyb2xsZXI6OnNjcm9sbEJ5KToKKyAgICAgICAgKEJsYWNrQmVy
cnk6OldlYktpdDo6SW5SZWdpb25TY3JvbGxlcjo6aW5SZWdpb25TY3JvbGxhYmxlQXJlYXNGb3JQ
b2ludCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkluUmVnaW9uU2Nyb2xsZXI6OnNj
cm9sbE5vZGVSZWN1cnNpdmVseSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkluUmVn
aW9uU2Nyb2xsZXI6OnNjcm9sbFJlbmRlcmVyKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktp
dDo6SW5SZWdpb25TY3JvbGxlcjo6YWRqdXN0U2Nyb2xsRGVsdGEpOgorICAgICAgICAqIFdlYktp
dFN1cHBvcnQvSW5SZWdpb25TY3JvbGxlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKEluUmVnaW9uU2Nyb2xsZXIpOgorICAgICAgICAq
IFdlYktpdFN1cHBvcnQvVG91Y2hFdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoQmxhY2tCZXJy
eTo6V2ViS2l0OjpUb3VjaEV2ZW50SGFuZGxlcjo6ZHJhd1RhcEhpZ2hsaWdodCk6CisKIDIwMTIt
MDgtMDEgIENoYXJsZXMgV2VpICA8Y2hhcmxlcy53ZWlAdG9yY2htb2JpbGUuY29tLmNuPgogCiAg
ICAgICAgIFtCbGFja0JlcnJ5XSBGYXZpY29uIHNob3VsZCBiZSBCYXNlNjQgZW5jb2RlZCBmb3Ig
Y3Jvc3MtcHJvY2VzcyBwYXNzaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVy
cnkvV2ViS2l0U3VwcG9ydC9JblJlZ2lvblNjcm9sbGFibGVBcmVhLmNwcCBiL1NvdXJjZS9XZWJL
aXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0luUmVnaW9uU2Nyb2xsYWJsZUFyZWEuY3BwCmlu
ZGV4IGY1OGNhZTguLjc2YTk4MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJy
eS9XZWJLaXRTdXBwb3J0L0luUmVnaW9uU2Nyb2xsYWJsZUFyZWEuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0luUmVnaW9uU2Nyb2xsYWJsZUFyZWEuY3Bw
CkBAIC0yMCw3ICsyMCw2IEBACiAjaW5jbHVkZSAiSW5SZWdpb25TY3JvbGxhYmxlQXJlYS5oIgog
CiAjaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1
ZGUgIlJlbmRlckJveC5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyT2JqZWN0LmgiCkBAIC0xMDQsNiArMTAzLDYgQEAgUmVuZGVyTGF5ZXIqIEluUmVnaW9uU2Ny
b2xsYWJsZUFyZWE6OmxheWVyKCkgY29uc3QKICAgICBBU1NFUlQoIW1faXNOdWxsKTsKICAgICBy
ZXR1cm4gbV9sYXllcjsKIH0KLX0KIAogfQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9i
bGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5SZWdpb25TY3JvbGxlci5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JblJlZ2lvblNjcm9sbGVyLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjU0ZDk3Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5SZWdpb25TY3JvbGxlci5j
cHAKQEAgLTAsMCArMSwzNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgUmVz
ZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAg
VVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluUmVnaW9uU2Nyb2xs
ZXIuaCIKKworI2luY2x1ZGUgIkJhY2tpbmdTdG9yZUNsaWVudC5oIgorI2luY2x1ZGUgIkZyYW1l
LmgiCisjaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCisjaW5jbHVkZSAiSGl0VGVz
dFJlc3VsdC5oIgorI2luY2x1ZGUgIkluUmVnaW9uU2Nyb2xsYWJsZUFyZWEuaCIKKyNpbmNsdWRl
ICJSZW5kZXJCb3guaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRl
ck9iamVjdC5oIgorI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKKyNpbmNsdWRlICJXZWJQYWdlX3Au
aCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBCbGFja0JlcnJ5IHsK
K25hbWVzcGFjZSBXZWJLaXQgeworCitzdGF0aWMgYm9vbCBjYW5TY3JvbGxJbm5lckZyYW1lKEZy
YW1lKiBmcmFtZSkKK3sKKyAgICBpZiAoIWZyYW1lIHx8ICFmcmFtZS0+dmlldygpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBOb3QgaGF2aW5nIGFuIG93bmVyIGVsZW1lbnQgbWVh
bnMgdGhhdCB3ZSBhcmUgb24gdGhlIG1haW5mcmFtZS4KKyAgICBpZiAoIWZyYW1lLT5vd25lckVs
ZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQVNTRVJUKGZyYW1lICE9IGZy
YW1lLT5wYWdlKCktPm1haW5GcmFtZSgpKTsKKworICAgIEludFNpemUgdmlzaWJsZVNpemUgPSBm
cmFtZS0+dmlldygpLT52aXNpYmxlQ29udGVudFJlY3QoKS5zaXplKCk7CisgICAgSW50U2l6ZSBj
b250ZW50c1NpemUgPSBmcmFtZS0+dmlldygpLT5jb250ZW50c1NpemUoKTsKKworICAgIGJvb2wg
Y2FuQmVTY3JvbGxlZCA9IGNvbnRlbnRzU2l6ZS5oZWlnaHQoKSA+IHZpc2libGVTaXplLmhlaWdo
dCgpIHx8IGNvbnRlbnRzU2l6ZS53aWR0aCgpID4gdmlzaWJsZVNpemUud2lkdGgoKTsKKworICAg
IC8vIExldHMgYWxzbyBjb25zaWRlciB0aGUgJ292ZXJmbG93LXt4LHl9IHByb3BlcnR5IHNldCBk
aXJlY3RseSB0byB0aGUge2l9ZnJhbWUgdGFnLgorICAgIHJldHVybiBjYW5CZVNjcm9sbGVkICYm
IChmcmFtZS0+b3duZXJFbGVtZW50KCktPnNjcm9sbGluZ01vZGUoKSAhPSBTY3JvbGxiYXJBbHdh
eXNPZmYpOworfQorCisvLyBUaGUgUmVuZGVyQm94OjpjYW5iZVNjcm9sbGVkQW5kSGFzU2Nyb2xs
YWJsZUFyZWEgbWV0aG9kIHJldHVybnMgdHJ1ZSBmb3IgdGhlCisvLyBmb2xsb3dpbmcgc2NlbmFy
aW8sIGZvciBleGFtcGxlOgorLy8gKDEpIGEgZGl2IHRoYXQgaGFzIGEgdmVydGljYWwgb3ZlcmZs
b3cgYnV0IG5vIGhvcml6b250YWwgb3ZlcmZsb3cKKy8vICAgICB3aXRoIG92ZXJmbG93LXk6IGhp
ZGRlbiBhbmQgb3ZlcmZsb3cteDogYXV0byBzZXQuCisvLyBUaGUgdmVyc2lvbiBiZWxvdyBmaXhl
cyBpdC4KKy8vIEZJWE1FOiBGaXggUmVuZGVyQm94OjpjYW5CZVNjcm9sbGVkQW5kSGFzU2Nyb2xs
YWJsZUFyZWEgbWV0aG9kIGluc3RlYWQuCitzdGF0aWMgYm9vbCBjYW5TY3JvbGxSZW5kZXJCb3go
UmVuZGVyQm94KiBib3gpCit7CisgICAgaWYgKCFib3ggfHwgIWJveC0+aGFzT3ZlcmZsb3dDbGlw
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChib3gtPnNjcm9sbHNPdmVyZmxv
d1goKSAmJiAoYm94LT5zY3JvbGxXaWR0aCgpICE9IGJveC0+Y2xpZW50V2lkdGgoKSkKKyAgICAg
ICAgfHwgYm94LT5zY3JvbGxzT3ZlcmZsb3dZKCkgJiYgKGJveC0+c2Nyb2xsSGVpZ2h0KCkgIT0g
Ym94LT5jbGllbnRIZWlnaHQoKSkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgTm9kZSog
bm9kZSA9IGJveC0+bm9kZSgpOworICAgIHJldHVybiBub2RlICYmIChub2RlLT5yZW5kZXJlcklz
RWRpdGFibGUoKSB8fCBub2RlLT5pc0RvY3VtZW50Tm9kZSgpKTsKK30KKworc3RhdGljIFJlbmRl
ckxheWVyKiBwYXJlbnRMYXllcihSZW5kZXJMYXllciogbGF5ZXIpCit7CisgICAgQVNTRVJUKGxh
eWVyKTsKKyAgICBpZiAobGF5ZXItPnBhcmVudCgpKQorICAgICAgICByZXR1cm4gbGF5ZXItPnBh
cmVudCgpOworCisgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGxheWVyLT5yZW5kZXJlcigp
OworICAgIGlmIChyZW5kZXJlci0+ZG9jdW1lbnQoKSAmJiByZW5kZXJlci0+ZG9jdW1lbnQoKS0+
b3duZXJFbGVtZW50KCkgJiYgcmVuZGVyZXItPmRvY3VtZW50KCktPm93bmVyRWxlbWVudCgpLT5y
ZW5kZXJlcigpKQorICAgICAgICByZXR1cm4gcmVuZGVyZXItPmRvY3VtZW50KCktPm93bmVyRWxl
bWVudCgpLT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpOworCisgICAgcmV0dXJuIDA7Cit9
CisKKy8vIEZJWE1FOiBNYWtlIFJlbmRlckxheWVyOjplbmNsb3NpbmdFbGVtZW50IHB1YmxpYyBz
byB0aGlzIG9uZSBjYW4gYmUgcmVtb3ZlZC4KK3N0YXRpYyBOb2RlKiBlbmNsb3NpbmdMYXllck5v
ZGUoUmVuZGVyTGF5ZXIqIGxheWVyKQoreworICAgIGZvciAoUmVuZGVyT2JqZWN0KiByID0gbGF5
ZXItPnJlbmRlcmVyKCk7IHI7IHIgPSByLT5wYXJlbnQoKSkgeworICAgICAgICBpZiAoTm9kZSog
ZSA9IHItPm5vZGUoKSkKKyAgICAgICAgICAgIHJldHVybiBlOworICAgIH0KKyAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGJvb2wgaXNOb25SZW5k
ZXJWaWV3Rml4ZWRQb3NpdGlvbmVkQ29udGFpbmVyKFJlbmRlckxheWVyKiBsYXllcikKK3sKKyAg
ICBSZW5kZXJPYmplY3QqIG8gPSBsYXllci0+cmVuZGVyZXIoKTsKKyAgICBpZiAoby0+aXNSZW5k
ZXJWaWV3KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBvLT5pc1Bvc2l0
aW9uZWQoKSAmJiBvLT5zdHlsZSgpLT5wb3NpdGlvbigpID09IEZpeGVkUG9zaXRpb247Cit9CisK
K3N0YXRpYyB2b2lkIHB1c2hCYWNrSW5SZWdpb25TY3JvbGxhYmxlKHN0ZDo6dmVjdG9yPFBsYXRm
b3JtOjpTY3JvbGxWaWV3QmFzZSo+JiB2ZWN0b3IsIEluUmVnaW9uU2Nyb2xsYWJsZUFyZWEqIHNj
cm9sbGFibGVBcmVhLCBJblJlZ2lvblNjcm9sbGVyKiBzY3JvbGxlcikKK3sKKyAgICBBU1NFUlQo
d2ViUGFnZSk7CisgICAgQVNTRVJUKCFzY3JvbGxhYmxlQXJlYS0+aXNOdWxsKCkpOworCisgICAg
c2Nyb2xsYWJsZUFyZWEtPnNldENhblByb3BhZ2F0ZVNjcm9sbGluZ1RvRW5jbG9zaW5nU2Nyb2xs
YWJsZSghaXNOb25SZW5kZXJWaWV3Rml4ZWRQb3NpdGlvbmVkQ29udGFpbmVyKHNjcm9sbGFibGVB
cmVhLT5sYXllcigpKSk7CisgICAgdmVjdG9yLnB1c2hfYmFjayhzY3JvbGxhYmxlQXJlYSk7Cisg
ICAgaWYgKHZlY3Rvci5zaXplKCkgPT0gMSkgeworICAgICAgICAvLyBGSVhNRTogVXNlIFJlbmRl
ckxheWVyOjpyZW5kZXJCb3goKS0+bm9kZSgpIGluc3RlYWQ/CisgICAgICAgIHNjcm9sbGVyLT5z
ZXROb2RlKGVuY2xvc2luZ0xheWVyTm9kZShzY3JvbGxhYmxlQXJlYS0+bGF5ZXIoKSkpOworICAg
IH0KK30KKworSW5SZWdpb25TY3JvbGxlcjo6SW5SZWdpb25TY3JvbGxlcihXZWJQYWdlUHJpdmF0
ZSogd2ViUGFnZVByaXZhdGUpCisgICAgOiBtX3dlYlBhZ2Uod2ViUGFnZVByaXZhdGUpCit7Cit9
CisKK3ZvaWQgSW5SZWdpb25TY3JvbGxlcjo6c2V0Tm9kZShXZWJDb3JlOjpOb2RlKiBub2RlKQor
eworICAgIG1faW5SZWdpb25TY3JvbGxTdGFydGluZ05vZGUgPSBub2RlOworfQorCitXZWJDb3Jl
OjpOb2RlKiBJblJlZ2lvblNjcm9sbGVyOjpub2RlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9p
blJlZ2lvblNjcm9sbFN0YXJ0aW5nTm9kZS5nZXQoKTsKK30KKwordm9pZCBJblJlZ2lvblNjcm9s
bGVyOjpyZXNldCgpCit7CisgICAgc2V0Tm9kZSgwKTsKK30KKworYm9vbCBJblJlZ2lvblNjcm9s
bGVyOjpoYXNOb2RlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gISFtX2luUmVnaW9uU2Nyb2xsU3Rh
cnRpbmdOb2RlOworfQorCitib29sIEluUmVnaW9uU2Nyb2xsZXI6OmNhblNjcm9sbCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGhhc05vZGUoKTsKK30KKworYm9vbCBJblJlZ2lvblNjcm9sbGVyOjpz
Y3JvbGxCeShjb25zdCBQbGF0Zm9ybTo6SW50U2l6ZSYgZGVsdGEpCit7CisgICAgaWYgKCFjYW5T
Y3JvbGwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHNjcm9sbE5vZGVS
ZWN1cnNpdmVseShub2RlKCksIGRlbHRhKTsKK30KKworc3RkOjp2ZWN0b3I8UGxhdGZvcm06OlNj
cm9sbFZpZXdCYXNlKj4gSW5SZWdpb25TY3JvbGxlcjo6aW5SZWdpb25TY3JvbGxhYmxlQXJlYXNG
b3JQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQpCit7CisgICAgc3RkOjp2ZWN0
b3I8UGxhdGZvcm06OlNjcm9sbFZpZXdCYXNlKj4gdmFsaWRSZXR1cm47CisgICAgc3RkOjp2ZWN0
b3I8UGxhdGZvcm06OlNjcm9sbFZpZXdCYXNlKj4gZW1wdHlSZXR1cm47CisKKyAgICBIaXRUZXN0
UmVzdWx0IHJlc3VsdCA9IG1fd2ViUGFnZS0+bV9tYWluRnJhbWUtPmV2ZW50SGFuZGxlcigpLT5o
aXRUZXN0UmVzdWx0QXRQb2ludChtX3dlYlBhZ2UtPm1hcEZyb21WaWV3cG9ydFRvQ29udGVudHMo
cG9pbnQpLCBmYWxzZSAvKmFsbG93U2hhZG93Q29udGVudCovKTsKKyAgICBOb2RlKiBub2RlID0g
cmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpOworICAgIGlmICghbm9kZSB8fCAhbm9kZS0+cmVu
ZGVyZXIoKSkKKyAgICAgICAgcmV0dXJuIGVtcHR5UmV0dXJuOworCisgICAgUmVuZGVyTGF5ZXIq
IGxheWVyID0gbm9kZS0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKTsKKyAgICBkbyB7Cisg
ICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBsYXllci0+cmVuZGVyZXIoKTsKKworICAg
ICAgICBpZiAocmVuZGVyZXItPmlzUmVuZGVyVmlldygpKSB7CisgICAgICAgICAgICBpZiAoUmVu
ZGVyVmlldyogcmVuZGVyVmlldyA9IHRvUmVuZGVyVmlldyhyZW5kZXJlcikpIHsKKyAgICAgICAg
ICAgICAgICBGcmFtZVZpZXcqIHZpZXcgPSByZW5kZXJWaWV3LT5mcmFtZVZpZXcoKTsKKyAgICAg
ICAgICAgICAgICBpZiAoIXZpZXcpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbXB0eVJl
dHVybjsKKworICAgICAgICAgICAgICAgIGlmIChjYW5TY3JvbGxJbm5lckZyYW1lKHZpZXctPmZy
YW1lKCkpKSB7CisgICAgICAgICAgICAgICAgICAgIHB1c2hCYWNrSW5SZWdpb25TY3JvbGxhYmxl
KHZhbGlkUmV0dXJuLCBuZXcgSW5SZWdpb25TY3JvbGxhYmxlQXJlYShtX3dlYlBhZ2UsIGxheWVy
KSwgdGhpcyk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChjYW5TY3JvbGxSZW5kZXJCb3go
bGF5ZXItPnJlbmRlckJveCgpKSkgeworICAgICAgICAgICAgcHVzaEJhY2tJblJlZ2lvblNjcm9s
bGFibGUodmFsaWRSZXR1cm4sIG5ldyBJblJlZ2lvblNjcm9sbGFibGVBcmVhKG1fd2ViUGFnZSwg
bGF5ZXIpLCB0aGlzKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAg
ICAgLy8gSWYgd2UgcnVuIGludG8gYSBmaXggcG9zaXRpb25lZCBsYXllciwgc2V0IHRoZSBsYXN0
IHNjcm9sbGFibGUgaW4tcmVnaW9uIG9iamVjdAorICAgICAgICAvLyBhcyBub3QgYWJsZSB0byBw
cm9wYWdhdGUgc2Nyb2xsIHRvIGl0cyBwYXJlbnQgc2Nyb2xsYWJsZS4KKyAgICAgICAgaWYgKGlz
Tm9uUmVuZGVyVmlld0ZpeGVkUG9zaXRpb25lZENvbnRhaW5lcihsYXllcikgJiYgdmFsaWRSZXR1
cm4uc2l6ZSgpKSB7CisgICAgICAgICAgICBQbGF0Zm9ybTo6U2Nyb2xsVmlld0Jhc2UqIGVuZCA9
IHZhbGlkUmV0dXJuLmJhY2soKTsKKyAgICAgICAgICAgIGVuZC0+c2V0Q2FuUHJvcGFnYXRlU2Ny
b2xsaW5nVG9FbmNsb3NpbmdTY3JvbGxhYmxlKGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgfSB3
aGlsZSAobGF5ZXIgPSBwYXJlbnRMYXllcihsYXllcikpOworCisgICAgaWYgKHZhbGlkUmV0dXJu
LmVtcHR5KCkpCisgICAgICAgIHJldHVybiBlbXB0eVJldHVybjsKKworICAgIC8vIFBvc3QtY2Fs
Y3VsYXRlIHRoZSB2aXNpYmxlIHdpbmRvdyByZWN0cyBpbiByZXZlcnNlIGhpdCB0ZXN0IG9yZGVy
IHNvCisgICAgLy8gd2UgYWNjb3VudCBmb3IgYWxsIGFuZCBhbnkgY2xpcHBpbmcgcmVjdHMuCisg
ICAgV2ViQ29yZTo6SW50UmVjdCByZWN1cnNpdmVDbGlwcGluZ1JlY3QoV2ViQ29yZTo6SW50UG9p
bnQ6Onplcm8oKSwgbV93ZWJQYWdlLT50cmFuc2Zvcm1lZFZpZXdwb3J0U2l6ZSgpKTsKKworICAg
IHN0ZDo6dmVjdG9yPFBsYXRmb3JtOjpTY3JvbGxWaWV3QmFzZSo+OjpyZXZlcnNlX2l0ZXJhdG9y
IHJlbmQgPSB2YWxpZFJldHVybi5yZW5kKCk7CisgICAgZm9yIChzdGQ6OnZlY3RvcjxQbGF0Zm9y
bTo6U2Nyb2xsVmlld0Jhc2UqPjo6cmV2ZXJzZV9pdGVyYXRvciByaXQgPSB2YWxpZFJldHVybi5y
YmVnaW4oKTsgcml0ICE9IHJlbmQ7ICsrcml0KSB7CisKKyAgICAgICAgSW5SZWdpb25TY3JvbGxh
YmxlQXJlYSogY3VyciA9IHN0YXRpY19jYXN0PEluUmVnaW9uU2Nyb2xsYWJsZUFyZWEqPigqcml0
KTsKKyAgICAgICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gY3Vyci0+bGF5ZXIoKTsKKworICAgICAg
ICBpZiAobGF5ZXIgJiYgbGF5ZXItPnJlbmRlcmVyKCktPmlzUmVuZGVyVmlldygpKSB7IC8vICNk
b2N1bWVudCBjYXNlCisgICAgICAgICAgICBGcmFtZVZpZXcqIHZpZXcgPSB0b1JlbmRlclZpZXco
bGF5ZXItPnJlbmRlcmVyKCkpLT5mcmFtZVZpZXcoKTsKKyAgICAgICAgICAgIEFTU0VSVCh2aWV3
KTsKKyAgICAgICAgICAgIEFTU0VSVChjYW5TY3JvbGxJbm5lckZyYW1lKHZpZXctPmZyYW1lKCkp
KTsKKworICAgICAgICAgICAgV2ViQ29yZTo6SW50UmVjdCBmcmFtZVdpbmRvd1JlY3QgPSBtX3dl
YlBhZ2UtPm1hcFRvVHJhbnNmb3JtZWQobV93ZWJQYWdlLT5nZXRSZWN1cnNpdmVWaXNpYmxlV2lu
ZG93UmVjdCh2aWV3KSk7CisgICAgICAgICAgICBmcmFtZVdpbmRvd1JlY3QuaW50ZXJzZWN0KHJl
Y3Vyc2l2ZUNsaXBwaW5nUmVjdCk7CisgICAgICAgICAgICBjdXJyLT5zZXRWaXNpYmxlV2luZG93
UmVjdChmcmFtZVdpbmRvd1JlY3QpOworICAgICAgICAgICAgcmVjdXJzaXZlQ2xpcHBpbmdSZWN0
ID0gZnJhbWVXaW5kb3dSZWN0OworCisgICAgICAgIH0gZWxzZSB7IC8vIFJlbmRlckJveC1iYXNl
ZCBlbGVtZW50cyBjYXNlIChzY3JvbGxhYmxlIGJveGVzIChkaXYncywgcCdzLCB0ZXh0YXJlYSdz
LCBldGMpKS4KKworICAgICAgICAgICAgUmVuZGVyQm94KiBib3ggPSBsYXllci0+cmVuZGVyQm94
KCk7CisgICAgICAgICAgICBBU1NFUlQoYm94KTsKKyAgICAgICAgICAgIEFTU0VSVChjYW5TY3Jv
bGxSZW5kZXJCb3goYm94KSk7CisKKyAgICAgICAgICAgIFdlYkNvcmU6OkludFJlY3QgdmlzaWJs
ZVdpbmRvd1JlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGJveC0+YWJzb2x1dGVDbGlwcGVkT3ZlcmZs
b3dSZWN0KCkpOworICAgICAgICAgICAgdmlzaWJsZVdpbmRvd1JlY3QgPSBib3gtPmZyYW1lKCkt
PnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyh2aXNpYmxlV2luZG93UmVjdCk7CisgICAgICAgICAg
ICB2aXNpYmxlV2luZG93UmVjdCA9IG1fd2ViUGFnZS0+bWFwVG9UcmFuc2Zvcm1lZCh2aXNpYmxl
V2luZG93UmVjdCk7CisgICAgICAgICAgICB2aXNpYmxlV2luZG93UmVjdC5pbnRlcnNlY3QocmVj
dXJzaXZlQ2xpcHBpbmdSZWN0KTsKKworICAgICAgICAgICAgY3Vyci0+c2V0VmlzaWJsZVdpbmRv
d1JlY3QodmlzaWJsZVdpbmRvd1JlY3QpOworICAgICAgICAgICAgcmVjdXJzaXZlQ2xpcHBpbmdS
ZWN0ID0gdmlzaWJsZVdpbmRvd1JlY3Q7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4g
dmFsaWRSZXR1cm47Cit9CisKK2Jvb2wgSW5SZWdpb25TY3JvbGxlcjo6c2Nyb2xsTm9kZVJlY3Vy
c2l2ZWx5KFdlYkNvcmU6Ok5vZGUqIG5vZGUsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGRlbHRh
KQoreworICAgIGlmIChkZWx0YS5pc1plcm8oKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFJlbmRlck9iamVjdCog
cmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOworICAgIGlmICghcmVuZGVyZXIpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIEZyYW1lVmlldyogdmlldyA9IHJlbmRlcmVyLT52aWV3KCkt
PmZyYW1lVmlldygpOworICAgIGlmICghdmlldykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgLy8gVHJ5IHNjcm9sbGluZyB0aGUgcmVuZGVyZXIuCisgICAgaWYgKHNjcm9sbFJlbmRlcmVy
KHJlbmRlcmVyLCBkZWx0YSkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gV2UndmUg
aGl0IHRoZSBwYWdlLCBkb24ndCBzY3JvbGwgaXQgYW5kIHJldHVybiBmYWxzZS4KKyAgICBpZiAo
dmlldyA9PSBtX3dlYlBhZ2UtPm1fbWFpbkZyYW1lLT52aWV3KCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIC8vIFRyeSBzY3JvbGxpbmcgdGhlIEZyYW1lVmlldy4KKyAgICBpZiAoY2Fu
U2Nyb2xsSW5uZXJGcmFtZSh2aWV3LT5mcmFtZSgpKSkgeworICAgICAgICBJbnRTaXplIHZpZXdE
ZWx0YSA9IGRlbHRhOworICAgICAgICBJbnRQb2ludCBuZXdWaWV3T2Zmc2V0ID0gdmlldy0+c2Ny
b2xsUG9zaXRpb24oKTsKKyAgICAgICAgSW50UG9pbnQgbWF4Vmlld09mZnNldCA9IHZpZXctPm1h
eGltdW1TY3JvbGxQb3NpdGlvbigpOworICAgICAgICBhZGp1c3RTY3JvbGxEZWx0YShtYXhWaWV3
T2Zmc2V0LCBuZXdWaWV3T2Zmc2V0LCB2aWV3RGVsdGEpOworCisgICAgICAgIGlmICghdmlld0Rl
bHRhLmlzWmVybygpKSB7CisgICAgICAgICAgICB2aWV3LT5zZXRDYW5CbGl0T25TY3JvbGwoZmFs
c2UpOworCisgICAgICAgICAgICBCYWNraW5nU3RvcmVDbGllbnQqIGJhY2tpbmdTdG9yZUNsaWVu
dCA9IG1fd2ViUGFnZS0+YmFja2luZ1N0b3JlQ2xpZW50Rm9yRnJhbWUodmlldy0+ZnJhbWUoKSk7
CisgICAgICAgICAgICBpZiAoYmFja2luZ1N0b3JlQ2xpZW50KSB7CisgICAgICAgICAgICAgICAg
YmFja2luZ1N0b3JlQ2xpZW50LT5zZXRJc0NsaWVudEdlbmVyYXRlZFNjcm9sbCh0cnVlKTsKKyAg
ICAgICAgICAgICAgICBiYWNraW5nU3RvcmVDbGllbnQtPnNldElzU2Nyb2xsTm90aWZpY2F0aW9u
U3VwcHJlc3NlZCh0cnVlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2V0Tm9kZSh2
aWV3LT5mcmFtZSgpLT5kb2N1bWVudCgpKTsKKworICAgICAgICAgICAgdmlldy0+c2Nyb2xsQnko
dmlld0RlbHRhKTsKKworICAgICAgICAgICAgaWYgKGJhY2tpbmdTdG9yZUNsaWVudCkgeworICAg
ICAgICAgICAgICAgIGJhY2tpbmdTdG9yZUNsaWVudC0+c2V0SXNDbGllbnRHZW5lcmF0ZWRTY3Jv
bGwoZmFsc2UpOworICAgICAgICAgICAgICAgIGJhY2tpbmdTdG9yZUNsaWVudC0+c2V0SXNTY3Jv
bGxOb3RpZmljYXRpb25TdXBwcmVzc2VkKGZhbHNlKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBUcnkgc2Nyb2xs
aW5nIHRoZSBub2RlIG9mIHRoZSBlbmNsb3NpbmcgZnJhbWUuCisgICAgRnJhbWUqIGZyYW1lID0g
bm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKKyAgICBpZiAoZnJhbWUpIHsKKyAgICAgICAgTm9k
ZSogb3duZXJOb2RlID0gZnJhbWUtPm93bmVyRWxlbWVudCgpOworICAgICAgICBpZiAoc2Nyb2xs
Tm9kZVJlY3Vyc2l2ZWx5KG93bmVyTm9kZSwgZGVsdGEpKQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEluUmVnaW9uU2Nyb2xs
ZXI6OnNjcm9sbFJlbmRlcmVyKFdlYkNvcmU6OlJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0
IFdlYkNvcmU6OkludFNpemUmIGRlbHRhKQoreworICAgIFJlbmRlckxheWVyKiBsYXllciA9IHJl
bmRlcmVyLT5lbmNsb3NpbmdMYXllcigpOworICAgIGlmICghbGF5ZXIpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIC8vIFRyeSB0byBzY3JvbGwgbGF5ZXIuCisgICAgYm9vbCByZXN0cmlj
dGVkQnlMaW5lQ2xhbXAgPSBmYWxzZTsKKyAgICBpZiAocmVuZGVyZXItPnBhcmVudCgpKQorICAg
ICAgICByZXN0cmljdGVkQnlMaW5lQ2xhbXAgPSAhcmVuZGVyZXItPnBhcmVudCgpLT5zdHlsZSgp
LT5saW5lQ2xhbXAoKS5pc05vbmUoKTsKKworICAgIGlmIChyZW5kZXJlci0+aGFzT3ZlcmZsb3dD
bGlwKCkgJiYgIXJlc3RyaWN0ZWRCeUxpbmVDbGFtcCkgeworICAgICAgICBJbnRTaXplIGxheWVy
RGVsdGEgPSBkZWx0YTsKKyAgICAgICAgSW50UG9pbnQgbWF4T2Zmc2V0KGxheWVyLT5zY3JvbGxX
aWR0aCgpIC0gbGF5ZXItPnJlbmRlckJveCgpLT5jbGllbnRXaWR0aCgpLCBsYXllci0+c2Nyb2xs
SGVpZ2h0KCkgLSBsYXllci0+cmVuZGVyQm94KCktPmNsaWVudEhlaWdodCgpKTsKKyAgICAgICAg
SW50UG9pbnQgY3VycmVudE9mZnNldChsYXllci0+c2Nyb2xsWE9mZnNldCgpLCBsYXllci0+c2Ny
b2xsWU9mZnNldCgpKTsKKyAgICAgICAgYWRqdXN0U2Nyb2xsRGVsdGEobWF4T2Zmc2V0LCBjdXJy
ZW50T2Zmc2V0LCBsYXllckRlbHRhKTsKKyAgICAgICAgaWYgKCFsYXllckRlbHRhLmlzWmVybygp
KSB7CisgICAgICAgICAgICBzZXROb2RlKGVuY2xvc2luZ0xheWVyTm9kZShsYXllcikpOworICAg
ICAgICAgICAgSW50UG9pbnQgbmV3T2Zmc2V0ID0gY3VycmVudE9mZnNldCArIGxheWVyRGVsdGE7
CisgICAgICAgICAgICBsYXllci0+c2Nyb2xsVG9PZmZzZXQobmV3T2Zmc2V0LngoKSwgbmV3T2Zm
c2V0LnkoKSk7CisgICAgICAgICAgICByZW5kZXJlci0+cmVwYWludCh0cnVlKTsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgd2hpbGUgKGxheWVyID0g
bGF5ZXItPnBhcmVudCgpKSB7CisgICAgICAgIGlmIChjYW5TY3JvbGxSZW5kZXJCb3gobGF5ZXIt
PnJlbmRlckJveCgpKSkKKyAgICAgICAgICAgIHJldHVybiBzY3JvbGxSZW5kZXJlcihsYXllci0+
cmVuZGVyQm94KCksIGRlbHRhKTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Zv
aWQgSW5SZWdpb25TY3JvbGxlcjo6YWRqdXN0U2Nyb2xsRGVsdGEoY29uc3QgV2ViQ29yZTo6SW50
UG9pbnQmIG1heE9mZnNldCwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGN1cnJlbnRPZmZzZXQs
IFdlYkNvcmU6OkludFNpemUmIGRlbHRhKSBjb25zdAoreworICAgIGlmIChjdXJyZW50T2Zmc2V0
LngoKSArIGRlbHRhLndpZHRoKCkgPiBtYXhPZmZzZXQueCgpKQorICAgICAgICBkZWx0YS5zZXRX
aWR0aChzdGQ6Om1pbihtYXhPZmZzZXQueCgpIC0gY3VycmVudE9mZnNldC54KCksIGRlbHRhLndp
ZHRoKCkpKTsKKworICAgIGlmIChjdXJyZW50T2Zmc2V0LngoKSArIGRlbHRhLndpZHRoKCkgPCAw
KQorICAgICAgICBkZWx0YS5zZXRXaWR0aChzdGQ6Om1heCgtY3VycmVudE9mZnNldC54KCksIGRl
bHRhLndpZHRoKCkpKTsKKworICAgIGlmIChjdXJyZW50T2Zmc2V0LnkoKSArIGRlbHRhLmhlaWdo
dCgpID4gbWF4T2Zmc2V0LnkoKSkKKyAgICAgICAgZGVsdGEuc2V0SGVpZ2h0KHN0ZDo6bWluKG1h
eE9mZnNldC55KCkgLSBjdXJyZW50T2Zmc2V0LnkoKSwgZGVsdGEuaGVpZ2h0KCkpKTsKKworICAg
IGlmIChjdXJyZW50T2Zmc2V0LnkoKSArIGRlbHRhLmhlaWdodCgpIDwgMCkKKyAgICAgICAgZGVs
dGEuc2V0SGVpZ2h0KHN0ZDo6bWF4KC1jdXJyZW50T2Zmc2V0LnkoKSwgZGVsdGEuaGVpZ2h0KCkp
KTsKK30KKworfQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktp
dFN1cHBvcnQvSW5SZWdpb25TY3JvbGxlci5oIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dl
YktpdFN1cHBvcnQvSW5SZWdpb25TY3JvbGxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmU5YjE5MTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNr
YmVycnkvV2ViS2l0U3VwcG9ydC9JblJlZ2lvblNjcm9sbGVyLmgKQEAgLTAsMCArMSw2NyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRl
ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBG
cmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaWZuZGVmIElu
UmVnaW9uU2Nyb2xsZXJfaAorI2RlZmluZSBJblJlZ2lvblNjcm9sbGVyX2gKKworI2luY2x1ZGUg
IkludFJlY3QuaCIKKworI2luY2x1ZGUgPGludGVyYWN0aW9uL1Njcm9sbFZpZXdCYXNlLmg+Cisj
aW5jbHVkZSA8dmVjdG9yPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBGcmFtZTsKK2Ns
YXNzIE5vZGU7CitjbGFzcyBSZW5kZXJPYmplY3Q7Cit9CisKK25hbWVzcGFjZSBCbGFja0JlcnJ5
IHsKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJQYWdlUHJpdmF0ZTsKKworY2xhc3Mg
SW5SZWdpb25TY3JvbGxlciB7CisKK3B1YmxpYzoKKyAgICBJblJlZ2lvblNjcm9sbGVyKFdlYlBh
Z2VQcml2YXRlKik7CisKKyAgICB2b2lkIHNldE5vZGUoV2ViQ29yZTo6Tm9kZSopOworICAgIFdl
YkNvcmU6Ok5vZGUqIG5vZGUoKSBjb25zdDsKKyAgICB2b2lkIHJlc2V0KCk7CisKKyAgICBib29s
IGNhblNjcm9sbCgpIGNvbnN0OworICAgIGJvb2wgaGFzTm9kZSgpIGNvbnN0OworCisgICAgYm9v
bCBzY3JvbGxCeShjb25zdCBQbGF0Zm9ybTo6SW50U2l6ZSYgZGVsdGEpOworCisgICAgc3RkOjp2
ZWN0b3I8UGxhdGZvcm06OlNjcm9sbFZpZXdCYXNlKj4gaW5SZWdpb25TY3JvbGxhYmxlQXJlYXNG
b3JQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOworcHJpdmF0ZToKKworICAgIGJvb2wg
c2Nyb2xsTm9kZVJlY3Vyc2l2ZWx5KFdlYkNvcmU6Ok5vZGUqLCBjb25zdCBXZWJDb3JlOjpJbnRT
aXplJiBkZWx0YSk7CisgICAgYm9vbCBzY3JvbGxSZW5kZXJlcihXZWJDb3JlOjpSZW5kZXJPYmpl
Y3QqLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBkZWx0YSk7CisKKyAgICB2b2lkIGFkanVzdFNj
cm9sbERlbHRhKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBtYXhPZmZzZXQsIGNvbnN0IFdlYkNv
cmU6OkludFBvaW50JiBjdXJyZW50T2Zmc2V0LCBXZWJDb3JlOjpJbnRTaXplJiBkZWx0YSkgY29u
c3Q7CisKKyAgICBSZWZQdHI8V2ViQ29yZTo6Tm9kZT4gbV9pblJlZ2lvblNjcm9sbFN0YXJ0aW5n
Tm9kZTsKKyAgICBXZWJQYWdlUHJpdmF0ZSogbV93ZWJQYWdlOworfTsKKworfQorfQorCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L1Rv
dWNoRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBw
b3J0L1RvdWNoRXZlbnRIYW5kbGVyLmNwcAppbmRleCBjODY2OGJlLi5iNDExM2JhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9Ub3VjaEV2ZW50SGFu
ZGxlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvVG91
Y2hFdmVudEhhbmRsZXIuY3BwCkBAIC0zNjMsNyArMzYzLDcgQEAgdm9pZCBUb3VjaEV2ZW50SGFu
ZGxlcjo6ZHJhd1RhcEhpZ2hsaWdodCgpCiAgICAgLy8gT24gdGhlIGNsaWVudCBzaWRlLCB0aGlz
IGluZm8gaXMgYmVpbmcgdXNlZCB0byBoaWRlIHRoZSB0YXAgaGlnaGxpZ2h0IHdpbmRvdyBvbiBz
Y3JvbGwuCiAgICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gbV93ZWJQYWdlLT5lbmNsb3NpbmdGaXhl
ZFBvc2l0aW9uZWRBbmNlc3Rvck9yU2VsZklmRml4ZWRQb3NpdGlvbmVkKHJlbmRlcmVyLT5lbmNs
b3NpbmdMYXllcigpKTsKICAgICBib29sIHNob3VsZEhpZGVUYXBIaWdobGlnaHRSaWdodEFmdGVy
U2Nyb2xsaW5nID0gIWxheWVyLT5yZW5kZXJlcigpLT5pc1JlbmRlclZpZXcoKTsKLSAgICBzaG91
bGRIaWRlVGFwSGlnaGxpZ2h0UmlnaHRBZnRlclNjcm9sbGluZyB8PSAhIW1fd2ViUGFnZS0+bV9p
blJlZ2lvblNjcm9sbFN0YXJ0aW5nTm9kZS5nZXQoKTsKKyAgICBzaG91bGRIaWRlVGFwSGlnaGxp
Z2h0UmlnaHRBZnRlclNjcm9sbGluZyB8PSAhIW1fd2ViUGFnZS0+bV9pblJlZ2lvblNjcm9sbGVy
LT5ub2RlKCk7CiAKICAgICBJbnRQb2ludCBmcmFtZVBvcyhtX3dlYlBhZ2UtPmZyYW1lT2Zmc2V0
KGVsZW1lbnRGcmFtZSkpOwogCi0tIAoxLjcuNS40Cgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>156140</attachid>
            <date>2012-08-02 12:30:32 -0700</date>
            <delta_ts>2012-08-02 13:23:31 -0700</delta_ts>
            <desc>debug build fix</desc>
            <filename>0001-Unreviewed-debug-build-fix-bug-92889.patch</filename>
            <type>text/plain</type>
            <size>2029</size>
            <attacher name="Antonio Gomes">tonikitoo</attacher>
            
              <data encoding="base64">RnJvbSA4NDYxZDE5NGEzZGI0MmI2YjhiNjVhOThlOTFiNDZmYjQ5ZWRiOGQ2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbnRvbmlvIEdvbWVzIDxhZ29tZXNAcmltLmNvbT4KRGF0ZTog
VGh1LCAyIEF1ZyAyMDEyIDE1OjI4OjUyIC0wNDAwClN1YmplY3Q6IFtQQVRDSF0gVW5yZXZpZXdl
ZCBkZWJ1ZyBidWlsZCBmaXggKGJ1ZyA5Mjg4OSkKCiogV2ViS2l0U3VwcG9ydC9JblJlZ2lvblNj
cm9sbGVyLmNwcDoKKEJsYWNrQmVycnk6OldlYktpdDo6cHVzaEJhY2tJblJlZ2lvblNjcm9sbGFi
bGUpOgotLS0KIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9DaGFuZ2VMb2cgICAgICAgICAgICAg
ICAgIHwgICAgNyArKysrKysrCiAuLi4vYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0luUmVnaW9u
U2Nyb2xsZXIuY3BwICB8ICAgIDMgKystCiAyIGZpbGVzIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygr
KSwgMSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkv
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5nZUxvZwppbmRleCBkMmRh
YmI3Li4xZGM2YzVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
MCBAQAorMjAxMi0wOC0wMiAgQW50b25pbyBHb21lcyAgPGFnb21lc0ByaW0uY29tPgorCisgICAg
ICAgIFVucmV2aWV3ZWQgZGVidWcgYnVpbGQgZml4IChidWcgOTI4ODkpCisKKyAgICAgICAgKiBX
ZWJLaXRTdXBwb3J0L0luUmVnaW9uU2Nyb2xsZXIuY3BwOgorICAgICAgICAoQmxhY2tCZXJyeTo6
V2ViS2l0OjpwdXNoQmFja0luUmVnaW9uU2Nyb2xsYWJsZSk6CisKIDIwMTItMDgtMDEgIEFudG9u
aW8gR29tZXMgIDxhZ29tZXNAcmltLmNvbT4KIAogICAgICAgICBbQmxhY2tCZXJyeV0gSW1wbGVt
ZW50IEluUmVnaW9uU2Nyb2xsZXIgY2xhc3MgYXMgYSBpbi1yZWdpb24gc2Nyb2xsIGNvbnRyb2xs
ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0lu
UmVnaW9uU2Nyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBv
cnQvSW5SZWdpb25TY3JvbGxlci5jcHAKaW5kZXggOWY1NGQ5Ny4uM2Q5ODM3NSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5SZWdpb25TY3JvbGxl
ci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5SZWdp
b25TY3JvbGxlci5jcHAKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlICJIVE1MRnJhbWVPd25l
ckVsZW1lbnQuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiSW5SZWdp
b25TY3JvbGxhYmxlQXJlYS5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJC
b3guaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5o
IgpAQCAtMTA5LDcgKzExMCw3IEBAIHN0YXRpYyBib29sIGlzTm9uUmVuZGVyVmlld0ZpeGVkUG9z
aXRpb25lZENvbnRhaW5lcihSZW5kZXJMYXllciogbGF5ZXIpCiAKIHN0YXRpYyB2b2lkIHB1c2hC
YWNrSW5SZWdpb25TY3JvbGxhYmxlKHN0ZDo6dmVjdG9yPFBsYXRmb3JtOjpTY3JvbGxWaWV3QmFz
ZSo+JiB2ZWN0b3IsIEluUmVnaW9uU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhLCBJblJl
Z2lvblNjcm9sbGVyKiBzY3JvbGxlcikKIHsKLSAgICBBU1NFUlQod2ViUGFnZSk7CisgICAgQVNT
RVJUKHNjcm9sbGVyKTsKICAgICBBU1NFUlQoIXNjcm9sbGFibGVBcmVhLT5pc051bGwoKSk7CiAK
ICAgICBzY3JvbGxhYmxlQXJlYS0+c2V0Q2FuUHJvcGFnYXRlU2Nyb2xsaW5nVG9FbmNsb3NpbmdT
Y3JvbGxhYmxlKCFpc05vblJlbmRlclZpZXdGaXhlZFBvc2l0aW9uZWRDb250YWluZXIoc2Nyb2xs
YWJsZUFyZWEtPmxheWVyKCkpKTsKLS0gCjEuNy41LjQKCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>