<?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>184770</bug_id>
          
          <creation_ts>2018-04-18 21:43:42 -0700</creation_ts>
          <short_desc>[Win] MiniBrowser should support both WebKitLegacy and modern WebKit</short_desc>
          <delta_ts>2018-06-11 18:17:06 -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>Tools / Tests</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>174003</dependson>
    
    <dependson>185418</dependson>
    
    <dependson>185597</dependson>
    
    <dependson>185814</dependson>
    
    <dependson>186029</dependson>
    
    <dependson>186079</dependson>
    
    <dependson>186134</dependson>
    
    <dependson>186263</dependson>
    
    <dependson>186378</dependson>
    
    <dependson>186387</dependson>
    
    <dependson>186421</dependson>
    
    <dependson>186427</dependson>
    
    <dependson>186478</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Fujii Hironori">fujii</reporter>
          <assigned_to name="Fujii Hironori">fujii</assigned_to>
          <cc>achristensen</cc>
    
    <cc>basuke</cc>
    
    <cc>bfulgham</cc>
    
    <cc>don.olmstead</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>lforschler</cc>
    
    <cc>pvollan</cc>
    
    <cc>rniwa</cc>
    
    <cc>ross.kirsling</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1415859</commentid>
    <comment_count>0</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2018-04-18 21:43:42 -0700</bug_when>
    <thetext>[Win] MiniBrowser should support both WebKitLegacy WebView and modern WebKit WKView</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1416205</commentid>
    <comment_count>1</comment_count>
      <attachid>338406</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2018-04-20 04:01:32 -0700</bug_when>
    <thetext>Created attachment 338406
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1416206</commentid>
    <comment_count>2</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-04-20 04:04:12 -0700</bug_when>
    <thetext>Attachment 338406 did not pass style-queue:


ERROR: Tools/MiniBrowser/win/WK2ContentWindow.cpp:25:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Tools/MiniBrowser/win/Common.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Tools/MiniBrowser/win/WinMain.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Tools/MiniBrowser/win/MiniBrowser.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Tools/MiniBrowser/win/BrowserWindow.cpp:29:  Found other header before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Tools/MiniBrowser/win/BrowserWindow.cpp:31:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 6 in 13 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>1416438</commentid>
    <comment_count>3</comment_count>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2018-04-20 15:06:33 -0700</bug_when>
    <thetext>Only thing I wanted to make sure of is that we don&apos;t have a requirement on CoreFoundation on WinCairo with Modern WebKit. Ideally we want to jettison CFLite once we have Modern WebKit working.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1416840</commentid>
    <comment_count>4</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2018-04-23 03:17:34 -0700</bug_when>
    <thetext>Could anyone review this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1416935</commentid>
    <comment_count>5</comment_count>
      <attachid>338406</attachid>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2018-04-23 11:42:41 -0700</bug_when>
    <thetext>Comment on attachment 338406
Patch

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

Just noting some CF code included.

&gt; Tools/MiniBrowser/win/MiniBrowser.cpp:575
&gt; +static void setWindowText(HWND dialog, UINT field, CFDictionaryRef dictionary, CFStringRef key, UINT&amp; total)

CF code without any USE(CF) guards

&gt; Tools/MiniBrowser/win/WinMain.cpp:32
&gt; +#include &lt;CoreFoundation/CFRunLoop.h&gt;

This should have a USE(CF) guard</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1416979</commentid>
    <comment_count>6</comment_count>
      <attachid>338406</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2018-04-23 14:50:08 -0700</bug_when>
    <thetext>Comment on attachment 338406
Patch

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

&gt;&gt; Tools/MiniBrowser/win/MiniBrowser.cpp:575
&gt;&gt; +static void setWindowText(HWND dialog, UINT field, CFDictionaryRef dictionary, CFStringRef key, UINT&amp; total)
&gt; 
&gt; CF code without any USE(CF) guards

MiniBrowser.cpp is only for WK1. I will rename this file WK1ContentWindow.cpp.

&gt;&gt; Tools/MiniBrowser/win/WinMain.cpp:32
&gt;&gt; +#include &lt;CoreFoundation/CFRunLoop.h&gt;
&gt; 
&gt; This should have a USE(CF) guard

Will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1417086</commentid>
    <comment_count>7</comment_count>
      <attachid>338636</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2018-04-23 21:06:01 -0700</bug_when>
    <thetext>Created attachment 338636
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1417087</commentid>
    <comment_count>8</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-04-23 21:07:38 -0700</bug_when>
    <thetext>Attachment 338636 did not pass style-queue:


ERROR: Tools/MiniBrowser/win/WK2ContentWindow.cpp:25:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Tools/MiniBrowser/win/Common.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Tools/MiniBrowser/win/WinMain.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Tools/MiniBrowser/win/MiniBrowser.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Tools/MiniBrowser/win/BrowserWindow.cpp:29:  Found other header before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Tools/MiniBrowser/win/BrowserWindow.cpp:31:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 6 in 13 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>1419236</commentid>
    <comment_count>9</comment_count>
      <attachid>338636</attachid>
    <who name="Per Arne Vollan">pvollan</who>
    <bug_when>2018-04-30 20:11:15 -0700</bug_when>
    <thetext>Comment on attachment 338636
Patch

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

Perhaps you could consider splitting this up in several patches if possible? This will make it easier to reason about the changes.

&gt; Tools/MiniBrowser/win/MiniBrowser.h:49
&gt; +class MiniBrowser : public ContentWindow {

Would it make sense for MiniBrowser to have a ContentWindow, instead of being a ContentWindow?

&gt; Tools/MiniBrowser/win/WK2ContentWindow.cpp:162
&gt; +void WK2ContentWindow::setAVFoundationEnabled(bool)
&gt; +{
&gt; +}
&gt; +
&gt; +void WK2ContentWindow::setAcceleratedCompositingEnabled(bool)
&gt; +{
&gt; +}
&gt; +
&gt; +void WK2ContentWindow::setAuthorAndUserStylesEnabled(bool)
&gt; +{
&gt; +}
&gt; +
&gt; +void WK2ContentWindow::setFullScreenEnabled(bool)
&gt; +{
&gt; +}
&gt; +
&gt; +void WK2ContentWindow::setJavaScriptEnabled(bool)
&gt; +{
&gt; +}

Isn&apos;t an implementation needed in the modern WebKit case?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1421194</commentid>
    <comment_count>10</comment_count>
      <attachid>338636</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2018-05-06 19:32:16 -0700</bug_when>
    <thetext>Comment on attachment 338636
Patch

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

Thank you for the review, Per. I&apos;ll split this patch.

&gt;&gt; Tools/MiniBrowser/win/MiniBrowser.h:49
&gt;&gt; +class MiniBrowser : public ContentWindow {
&gt; 
&gt; Would it make sense for MiniBrowser to have a ContentWindow, instead of being a ContentWindow?

No, I can&apos;t. I need a abstract class to switch WK1 and WK2. So, I added a abstract class ContentWindow.
WK2ContentWinodow and MiniBrowser need to inherit the ContentWindow.
I will rename MiniBrowser to WK1ContentWinodow.

&gt;&gt; Tools/MiniBrowser/win/WK2ContentWindow.cpp:162
&gt;&gt; +}
&gt; 
&gt; Isn&apos;t an implementation needed in the modern WebKit case?

Yes. Not implemented yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1423022</commentid>
    <comment_count>11</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2018-05-10 21:03:26 -0700</bug_when>
    <thetext>Per, 

We had a discussion this morning, and agreed to rename MiniBrowser class to WK1BrowserWindowController not WK1ContentWinodow because Mac MiniBrowser has WK1BrowserWindowController.

But, after that discussion, I remembered the reason why I named it WK1ContentWinodow.

Mac MiniBrowser has BrowserWindowController. This is a controller of BrowserWindow as the sense of MVC model.

On the other hand, WK1BrowserWindowController of Windows port MinBrowser represents a browser content window, not a simple controller of M or V.

Should I named it WK1BrowserWindowController for the sake of consistency with Mac port?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1423132</commentid>
    <comment_count>12</comment_count>
    <who name="Per Arne Vollan">pvollan</who>
    <bug_when>2018-05-11 06:56:18 -0700</bug_when>
    <thetext>(In reply to Fujii Hironori from comment #11)
&gt; Per, 
&gt; 
&gt; We had a discussion this morning, and agreed to rename MiniBrowser class to
&gt; WK1BrowserWindowController not WK1ContentWinodow because Mac MiniBrowser has
&gt; WK1BrowserWindowController.
&gt; 
&gt; But, after that discussion, I remembered the reason why I named it
&gt; WK1ContentWinodow.
&gt; 
&gt; Mac MiniBrowser has BrowserWindowController. This is a controller of
&gt; BrowserWindow as the sense of MVC model.
&gt; 
&gt; On the other hand, WK1BrowserWindowController of Windows port MinBrowser
&gt; represents a browser content window, not a simple controller of M or V.
&gt; 
&gt; Should I named it WK1BrowserWindowController for the sake of consistency
&gt; with Mac port?

What do you think about using WK1BrowserWindow/WK2BrowserWindow?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1423480</commentid>
    <comment_count>13</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2018-05-13 18:35:39 -0700</bug_when>
    <thetext>(In reply to Per Arne Vollan from comment #12)
&gt; What do you think about using WK1BrowserWindow/WK2BrowserWindow?

Sounds good. I will add a new class MainWindow as the parent window of WK1BrowserWindow/WK2BrowserWindow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1432152</commentid>
    <comment_count>14</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2018-06-11 18:16:58 -0700</bug_when>
    <thetext>All patches have been landed. Closed this bug. Thank you very much for supporting.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>338406</attachid>
            <date>2018-04-20 04:01:32 -0700</date>
            <delta_ts>2018-04-23 21:05:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-184770-20180420200130.patch</filename>
            <type>text/plain</type>
            <size>98819</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMwODM3CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNTk3N2Y2YTczZWU5ZWYxMGEzZTY3ZTcxMDAzMTJjODc2
YjEyYjhmYy4uYzMxNTgwZGYyZGRiOTZkMjAwYjFkZTJiMjhhNzNlOGJiYzEyM2ExNCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0
OCBAQAorMjAxOC0wNC0yMCAgRnVqaWkgSGlyb25vcmkgIDxIaXJvbm9yaS5GdWppaUBzb255LmNv
bT4KKworICAgICAgICBbV2luXSBNaW5pQnJvd3NlciBzaG91bGQgc3VwcG9ydCBib3RoIFdlYktp
dExlZ2FjeSBhbmQgbW9kZXJuIFdlYktpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTg0NzcwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkZWQgYW4gYWJzdHJhY3QgY2xhc3MgQ29udGVudFdpbmRvdyB0
byBzd2l0Y2ggV2ViS2l0TGVnYWN5IGFuZAorICAgICAgICBtb2Rlcm4gV2ViS2l0IFdlYlZpZXcu
CisKKyAgICAgICAgQWRkZWQgYSBjbGFzcyBCcm93c2VyV2luZG93IHRvIG1hbmFnZSB0aGUgbWFp
biB3aW5kb3cuCisKKyAgICAgICAgRXhpc3RpbmcgTWluaUJyb3dzZXIgY2xhc3MgaW1wbGVtZW50
cyBDb250ZW50V2luZG93IGludGVyZmFjZSBieQorICAgICAgICB1c2luZyBXZWJLaXRMZWdhY3kg
V2ViVmlldy4gQSBuZXcgY2xhc3MgV0syQ29udGVudFdpbmRvdworICAgICAgICBpbXBsZW1lbnRz
IGl0IGJ5IHVzaW5nIG1vZGVybiBXZWJLaXQgV2ViVmlldy4KKworICAgICAgICBBZGRlZCAtLXdr
MiBvcHRpb24gdG8gdXNlIHRoZSBtb2Rlcm4gV2ViS2l0LgorCisgICAgICAgIFRoaXMgY2hhbmdl
IHNpbXBsaWZpZWQgdGhlIGxheWVyZWQgd2luZG93IGltcGxlbWVudGF0aW9uLiBUaGUgbWFpbgor
ICAgICAgICB3aW5kb3cgaXMgY3JlYXRlZCBldmVuIGZvciB0aGUgbGF5ZXJlZCB3aW5kb3cgbW9k
ZSB0byBjb250cm9sIHRoZQorICAgICAgICBsYXllcmVkIHdpbmRvdy4gUmVwbGFjaW5nIFduZFBy
b2Mgd2FzIGNoYW5nZWQgdG8gYW5vdGhlciBXbmRQcm9jCisgICAgICAgIGluc3RlYWQgb2Ygc2hh
cmluZyBXbmRQcm9jIHdpdGggdGhlIG1haW4gd2luZG93LgorCisgICAgICAgICogTWluaUJyb3dz
ZXIvd2luL0Jyb3dzZXJXaW5kb3cuY3BwOiBBZGRlZC4KKyAgICAgICAgKE15UmVnaXN0ZXJDbGFz
cyk6CisgICAgICAgIChCcm93c2VyV2luZG93OjpCcm93c2VyV2luZG93KToKKyAgICAgICAgKEJy
b3dzZXJXaW5kb3c6OnVwZGF0ZURldmljZVNjYWxlRmFjdG9yKToKKyAgICAgICAgKEJyb3dzZXJX
aW5kb3c6OnJlc2l6ZVN1YlZpZXdzKToKKyAgICAgICAgKGF1dGhEaWFsb2dQcm9jKToKKyAgICAg
ICAgKEJyb3dzZXJXaW5kb3c6OmRpc3BsYXlBdXRoRGlhbG9nKToKKyAgICAgICAgKiBNaW5pQnJv
d3Nlci93aW4vQnJvd3NlcldpbmRvdy5oOiBBZGRlZC4KKyAgICAgICAgKEJyb3dzZXJXaW5kb3c6
OnVybEJhckZvbnQpOgorICAgICAgICAoQnJvd3NlcldpbmRvdzo6Y29udGVudFdpbmRvdyk6Cisg
ICAgICAgICogTWluaUJyb3dzZXIvd2luL0NNYWtlTGlzdHMudHh0OgorICAgICAgICAqIE1pbmlC
cm93c2VyL3dpbi9Db21tb24uY3BwOgorICAgICAgICAoZ2V0QXBwRGF0YUZvbGRlcik6CisgICAg
ICAgIChwcm9jZXNzQ3Jhc2hSZXBvcnQpOgorICAgICAgICAoc2V0VXNlckFnZW50KToKKyAgICAg
ICAgKFRvZ2dsZU1lbnVJdGVtKToKKyAgICAgICAgKEJyb3dzZXJXaW5kb3c6OlduZFByb2MpOgor
ICAgICAgICAoQ2FjaGVzKToKKyAgICAgICAgKEN1c3RvbVVzZXJBZ2VudCk6CisgICAgICAgIChs
b2FkVVJMKToKKyAgICAgICAgKHBhcnNlQ29tbWFuZExpbmUpOgorICAgICAgICAoc3ViY2xhc3NG
b3JMYXllcmVkV2luZG93KTogRGVsZXRlZC4KKyAgICAgICAgKGNvbXB1dGVGdWxsRGVza3RvcEZy
YW1lKTogRGVsZXRlZC4KKyAgICAgICAgKHNldENhY2hlRm9sZGVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKEFib3J0UHJvYyk6IERlbGV0ZWQuCisgICAgICAgIChnZXRQcmludGVyREMpOiBEZWxldGVk
LgorICAgICAgICAoaW5pdERvY1N0cnVjdCk6IERlbGV0ZWQuCisgICAgICAgIChQcmludFZpZXcp
OiBEZWxldGVkLgorICAgICAgICAoV25kUHJvYyk6IERlbGV0ZWQuCisgICAgICAgIChEaXNwbGF5
QXV0aERpYWxvZyk6IERlbGV0ZWQuCisgICAgICAgIChBdXRoRGlhbG9nUHJvYyk6IERlbGV0ZWQu
CisgICAgICAgIChzZXRXaW5kb3dUZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKHVwZGF0ZVN0YXRp
c3RpY3MpOiBEZWxldGVkLgorICAgICAgICAoZGxsTGF1bmNoZXJFbnRyeVBvaW50KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBNaW5pQnJvd3Nlci93aW4vQ29udGVudFdpbmRvdy5oOiBBZGRlZC4KKyAg
ICAgICAgKENvbnRlbnRXaW5kb3c6On5Db250ZW50V2luZG93KToKKyAgICAgICAgKiBNaW5pQnJv
d3Nlci93aW4vTWluaUJyb3dzZXIuY3BwOgorICAgICAgICAoTWluaUJyb3dzZXI6OnNldENhY2hl
Rm9sZGVyKToKKyAgICAgICAgKE1pbmlCcm93c2VyOjpNaW5pQnJvd3Nlcik6CisgICAgICAgIChN
aW5pQnJvd3Nlcjo6aW5pdCk6CisgICAgICAgIChNaW5pQnJvd3Nlcjo6cHJlcGFyZVZpZXdzKToK
KyAgICAgICAgKE1pbmlCcm93c2VyOjpsb2FkSFRNTFN0cmluZyk6CisgICAgICAgIChNaW5pQnJv
d3Nlcjo6bmF2aWdhdGVGb3J3YXJkT3JCYWNrd2FyZCk6CisgICAgICAgIChNaW5pQnJvd3Nlcjo6
bmF2aWdhdGVUb0hpc3RvcnkpOgorICAgICAgICAoTWluaUJyb3dzZXI6OmxvYWRVUkwpOgorICAg
ICAgICAoTWluaUJyb3dzZXI6OnNldFVzZXJBZ2VudCk6CisgICAgICAgIChNaW5pQnJvd3Nlcjo6
dXNlckFnZW50KToKKyAgICAgICAgKHNldFdpbmRvd1RleHQpOgorICAgICAgICAoTWluaUJyb3dz
ZXI6OnVwZGF0ZVN0YXRpc3RpY3MpOgorICAgICAgICAoQWJvcnRQcm9jKToKKyAgICAgICAgKGdl
dFByaW50ZXJEQyk6CisgICAgICAgIChpbml0RG9jU3RydWN0KToKKyAgICAgICAgKE1pbmlCcm93
c2VyOjpwcmludCk6CisgICAgICAgIChNaW5pQnJvd3Nlcjo6c2V0QVZGb3VuZGF0aW9uRW5hYmxl
ZCk6CisgICAgICAgIChNaW5pQnJvd3Nlcjo6c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJs
ZWQpOgorICAgICAgICAoTWluaUJyb3dzZXI6OnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVk
KToKKyAgICAgICAgKE1pbmlCcm93c2VyOjpzZXRGdWxsU2NyZWVuRW5hYmxlZCk6CisgICAgICAg
IChNaW5pQnJvd3Nlcjo6c2V0SmF2YVNjcmlwdEVuYWJsZWQpOgorICAgICAgICAoTWluaUJyb3dz
ZXI6OnNldExvYWRzSW1hZ2VzQXV0b21hdGljYWxseSk6CisgICAgICAgIChNaW5pQnJvd3Nlcjo6
c2V0TG9jYWxGaWxlUmVzdHJpY3Rpb25zRW5hYmxlZCk6CisgICAgICAgIChNaW5pQnJvd3Nlcjo6
c2V0U2hvdWxkSW52ZXJ0Q29sb3JzKToKKyAgICAgICAgKE1pbmlCcm93c2VyOjpzZXRTaG93Q29t
cG9zaXRpbmdCb3JkZXJzKToKKyAgICAgICAgKE1pbmlCcm93c2VyOjpzZXRTaG93VGlsZWRTY3Jv
bGxpbmdJbmRpY2F0b3IpOgorICAgICAgICAodmlld1duZFByb2MpOgorICAgICAgICAoTWluaUJy
b3dzZXI6OnN1YmNsYXNzRm9yTGF5ZXJlZFdpbmRvdyk6CisgICAgICAgIChNaW5pQnJvd3Nlcjo6
Z2VuZXJhdGVGb250Rm9yU2NhbGVGYWN0b3IpOiBEZWxldGVkLgorICAgICAgICAoTWluaUJyb3dz
ZXI6OnVwZGF0ZURldmljZVNjYWxlRmFjdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBNaW5pQnJv
d3Nlci93aW4vTWluaUJyb3dzZXIuaDoKKyAgICAgICAgKE1pbmlCcm93c2VyOjpoYXNXZWJWaWV3
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKE1pbmlCcm93c2VyOjpkZXZpY2VTY2FsZUZhY3Rv
cik6IERlbGV0ZWQuCisgICAgICAgIChNaW5pQnJvd3Nlcjo6dXJsQmFyRm9udCk6IERlbGV0ZWQu
CisgICAgICAgICogTWluaUJyb3dzZXIvd2luL01pbmlCcm93c2VyUmVwbGFjZS5oOgorICAgICAg
ICAocHJvY2Vzc0NyYXNoUmVwb3J0KTogRGVsZXRlZC4KKyAgICAgICAgKiBNaW5pQnJvd3Nlci93
aW4vUGFnZUxvYWRUZXN0Q2xpZW50LmNwcDoKKyAgICAgICAgKFBhZ2VMb2FkVGVzdENsaWVudDo6
cGFnZUxvYWRFbmRlZEF0VGltZSk6CisgICAgICAgICogTWluaUJyb3dzZXIvd2luL1Jlc291cmNl
TG9hZERlbGVnYXRlLmNwcDoKKyAgICAgICAgKFJlc291cmNlTG9hZERlbGVnYXRlOjpkaWRSZWNl
aXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UpOgorICAgICAgICAqIE1pbmlCcm93c2VyL3dpbi9X
SzJDb250ZW50V2luZG93LmNwcDogQWRkZWQuCisgICAgICAgIChjcmVhdGVTdHJpbmcpOgorICAg
ICAgICAodG9VdGY4KToKKyAgICAgICAgKGZyb21VdGY4KToKKyAgICAgICAgKGNyZWF0ZVdLU3Ry
aW5nKToKKyAgICAgICAgKGNyZWF0ZVdLVVJMKToKKyAgICAgICAgKFdLMkNvbnRlbnRXaW5kb3c6
OldLMkNvbnRlbnRXaW5kb3cpOgorICAgICAgICAoV0syQ29udGVudFdpbmRvdzo6bG9hZFVSTCk6
CisgICAgICAgIChXSzJDb250ZW50V2luZG93Ojpsb2FkSFRNTFN0cmluZyk6CisgICAgICAgIChX
SzJDb250ZW50V2luZG93OjpwcmludCk6CisgICAgICAgIChXSzJDb250ZW50V2luZG93OjpsYXVu
Y2hJbnNwZWN0b3IpOgorICAgICAgICAoV0syQ29udGVudFdpbmRvdzo6bmF2aWdhdGVGb3J3YXJk
T3JCYWNrd2FyZCk6CisgICAgICAgIChXSzJDb250ZW50V2luZG93OjpuYXZpZ2F0ZVRvSGlzdG9y
eSk6CisgICAgICAgIChXSzJDb250ZW50V2luZG93OjpzZXRBVkZvdW5kYXRpb25FbmFibGVkKToK
KyAgICAgICAgKFdLMkNvbnRlbnRXaW5kb3c6OnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFi
bGVkKToKKyAgICAgICAgKFdLMkNvbnRlbnRXaW5kb3c6OnNldEF1dGhvckFuZFVzZXJTdHlsZXNF
bmFibGVkKToKKyAgICAgICAgKFdLMkNvbnRlbnRXaW5kb3c6OnNldEZ1bGxTY3JlZW5FbmFibGVk
KToKKyAgICAgICAgKFdLMkNvbnRlbnRXaW5kb3c6OnNldEphdmFTY3JpcHRFbmFibGVkKToKKyAg
ICAgICAgKFdLMkNvbnRlbnRXaW5kb3c6OnNldExvYWRzSW1hZ2VzQXV0b21hdGljYWxseSk6Cisg
ICAgICAgIChXSzJDb250ZW50V2luZG93OjpzZXRMb2NhbEZpbGVSZXN0cmljdGlvbnNFbmFibGVk
KToKKyAgICAgICAgKFdLMkNvbnRlbnRXaW5kb3c6OnNldFNob3VsZEludmVydENvbG9ycyk6Cisg
ICAgICAgIChXSzJDb250ZW50V2luZG93OjpzZXRTaG93Q29tcG9zaXRpbmdCb3JkZXJzKToKKyAg
ICAgICAgKFdLMkNvbnRlbnRXaW5kb3c6OnNldFNob3dUaWxlZFNjcm9sbGluZ0luZGljYXRvcik6
CisgICAgICAgIChXSzJDb250ZW50V2luZG93Ojpnb0JhY2spOgorICAgICAgICAoV0syQ29udGVu
dFdpbmRvdzo6Z29Gb3J3YXJkKToKKyAgICAgICAgKFdLMkNvbnRlbnRXaW5kb3c6OnNldFVzZXJB
Z2VudCk6CisgICAgICAgIChXSzJDb250ZW50V2luZG93Ojp1c2VyQWdlbnQpOgorICAgICAgICAo
V0syQ29udGVudFdpbmRvdzo6cmVzZXRab29tKToKKyAgICAgICAgKFdLMkNvbnRlbnRXaW5kb3c6
Onpvb21Jbik6CisgICAgICAgIChXSzJDb250ZW50V2luZG93Ojp6b29tT3V0KToKKyAgICAgICAg
KFdLMkNvbnRlbnRXaW5kb3c6OnNob3dMYXllclRyZWUpOgorICAgICAgICAoV0syQ29udGVudFdp
bmRvdzo6dXBkYXRlU3RhdGlzdGljcyk6CisgICAgICAgIChXSzJDb250ZW50V2luZG93Ojpod25k
KToKKyAgICAgICAgKHRvQ29udGVudFdpbmRvdyk6CisgICAgICAgIChXSzJDb250ZW50V2luZG93
OjpkaWRSZWNlaXZlVGl0bGVGb3JGcmFtZSk6CisgICAgICAgIChXSzJDb250ZW50V2luZG93Ojpk
aWRGYWlsUHJvdmlzaW9uYWxMb2FkV2l0aEVycm9yRm9yRnJhbWUpOgorICAgICAgICAoV0syQ29u
dGVudFdpbmRvdzo6ZGlkQ29tbWl0TG9hZEZvckZyYW1lKToKKyAgICAgICAgKFdLMkNvbnRlbnRX
aW5kb3c6OmRpZENoYW5nZVByb2dyZXNzKToKKyAgICAgICAgKFdLMkNvbnRlbnRXaW5kb3c6OmRp
ZFNhbWVEb2N1bWVudE5hdmlnYXRpb25Gb3JGcmFtZSk6CisgICAgICAgICogTWluaUJyb3dzZXIv
d2luL1dLMkNvbnRlbnRXaW5kb3cuaDogQWRkZWQuCisgICAgICAgICogTWluaUJyb3dzZXIvd2lu
L1dpbk1haW4uY3BwOgorICAgICAgICAod1dpbk1haW4pOgorICAgICAgICAoZGxsTGF1bmNoZXJF
bnRyeVBvaW50KToKKyAgICAgICAgKE15UmVnaXN0ZXJDbGFzcyk6IERlbGV0ZWQuCisKIDIwMTgt
MDQtMjAgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAg
ICAgIFtHVEtdIExvY2FsIGNyb3NzIHJlZmVyZW5jZXMgYXJlIGJyb2tlbiBpbiBBUEkgZG9jdW1l
bnRhdGlvbgpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvd2luL0Jyb3dzZXJXaW5kb3cu
Y3BwIGIvVG9vbHMvTWluaUJyb3dzZXIvd2luL0Jyb3dzZXJXaW5kb3cuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjczMjU2NjNiZGE4MzAwYWU0NTMwMzU3MjFiZGUzZWUyNWU2YTkxODYKLS0tIC9kZXYvbnVsbAor
KysgYi9Ub29scy9NaW5pQnJvd3Nlci93aW4vQnJvd3NlcldpbmRvdy5jcHAKQEAgLTAsMCArMSwy
MTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDgsIDIwMTMtMjAxNSBBcHBsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDExIEJy
ZW50IEZ1bGdoYW0uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5
LCAyMDEwLCAyMDExIEFwcGNlbGVyYXRvciwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEFsZXggQ2hyaXN0ZW5zZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTggU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IElu
Yy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisjaW5jbHVkZSAi
c3RkYWZ4LmgiCisKKyNpbmNsdWRlICJCcm93c2VyV2luZG93LmgiCisjaW5jbHVkZSAiTWluaUJy
b3dzZXIuaCIKKyNpbmNsdWRlICJNaW5pQnJvd3NlckxpYlJlc291cmNlLmgiCisjaW5jbHVkZSAi
TWluaUJyb3dzZXJSZXBsYWNlLmgiCisKKyNpZiBFTkFCTEUoV0VCS0lUKQorI2luY2x1ZGUgIldL
MkNvbnRlbnRXaW5kb3cuaCIKKyNlbmRpZgorCisjZGVmaW5lIFVSTEJBUl9IRUlHSFQgIDI0Cisj
ZGVmaW5lIENPTlRST0xCVVRUT05fV0lEVEggMjQKKyNkZWZpbmUgTUFYX0xPQURTVFJJTkcgMTAw
CitUQ0hBUiBzelRpdGxlW01BWF9MT0FEU1RSSU5HXTsgLy8gVGhlIHRpdGxlIGJhciB0ZXh0CitU
Q0hBUiBzeldpbmRvd0NsYXNzW01BWF9MT0FEU1RSSU5HXTsgLy8gdGhlIG1haW4gd2luZG93IGNs
YXNzIG5hbWUKKworZXh0ZXJuIEhJTlNUQU5DRSBoSW5zdDsKK2V4dGVybiBXTkRQUk9DIERlZkVk
aXRQcm9jOworZXh0ZXJuIFdORFBST0MgRGVmQnV0dG9uUHJvYzsKK2V4dGVybiBCcm93c2VyV2lu
ZG93KiBnQnJvd3NlcldpbmRvdzsKK2V4dGVybiBDb250ZW50V2luZG93KiBnTWluaUJyb3dzZXI7
CisKK3ZvaWQgbG9hZFVSTChCU1RSIHBhc3NlZFVSTCk7CitMUkVTVUxUIENBTExCQUNLIEVkaXRQ
cm9jKEhXTkQsIFVJTlQsIFdQQVJBTSwgTFBBUkFNKTsKK0xSRVNVTFQgQ0FMTEJBQ0sgQmFja0J1
dHRvblByb2MoSFdORCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0pOworTFJFU1VMVCBDQUxMQkFDSyBG
b3J3YXJkQnV0dG9uUHJvYyhIV05ELCBVSU5ULCBXUEFSQU0sIExQQVJBTSk7CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKK2Zsb2F0IGRldmljZVNjYWxlRmFjdG9yRm9yV2luZG93KEhXTkQpOworfQor
CitzdGF0aWMgQVRPTSBNeVJlZ2lzdGVyQ2xhc3MoSElOU1RBTkNFIGhJbnN0YW5jZSkKK3sKKyAg
ICBXTkRDTEFTU0VYIHdjZXg7CisKKyAgICB3Y2V4LmNiU2l6ZSA9IHNpemVvZihXTkRDTEFTU0VY
KTsKKworICAgIHdjZXguc3R5bGUgICAgICAgICAgPSBDU19IUkVEUkFXIHwgQ1NfVlJFRFJBVzsK
KyAgICB3Y2V4LmxwZm5XbmRQcm9jICAgID0gQnJvd3NlcldpbmRvdzo6V25kUHJvYzsKKyAgICB3
Y2V4LmNiQ2xzRXh0cmEgICAgID0gMDsKKyAgICB3Y2V4LmNiV25kRXh0cmEgICAgID0gMDsKKyAg
ICB3Y2V4LmhJbnN0YW5jZSAgICAgID0gaEluc3RhbmNlOworICAgIHdjZXguaEljb24gICAgICAg
ICAgPSBMb2FkSWNvbihoSW5zdGFuY2UsIE1BS0VJTlRSRVNPVVJDRShJRElfTUlOSUJST1dTRVIp
KTsKKyAgICB3Y2V4LmhDdXJzb3IgICAgICAgID0gTG9hZEN1cnNvcigwLCBJRENfQVJST1cpOwor
ICAgIHdjZXguaGJyQmFja2dyb3VuZCAgPSAwOworICAgIHdjZXgubHBzek1lbnVOYW1lICAgPSBN
QUtFSU5UUkVTT1VSQ0UoSURDX01JTklCUk9XU0VSKTsKKyAgICB3Y2V4Lmxwc3pDbGFzc05hbWUg
ID0gc3pXaW5kb3dDbGFzczsKKyAgICB3Y2V4LmhJY29uU20gICAgICAgID0gTG9hZEljb24od2Nl
eC5oSW5zdGFuY2UsIE1BS0VJTlRSRVNPVVJDRShJRElfU01BTEwpKTsKKworICAgIHJldHVybiBS
ZWdpc3RlckNsYXNzRXgoJndjZXgpOworfQorCitCcm93c2VyV2luZG93OjpCcm93c2VyV2luZG93
KGludCBuQ21kU2hvdywgYm9vbCB1c2VzTGF5ZXJlZFdlYlZpZXcsIGJvb2wgcGFnZUxvYWRUZXN0
aW5nLCBfYnN0cl90IHJlcXVlc3RlZFVSTCwgYm9vbCB1c2VXSzIpCisgICAgOiBtX3VzZXNMYXll
cmVkV2ViVmlldyh1c2VzTGF5ZXJlZFdlYlZpZXcpCit7CisgICAgLy8gSW5pdGlhbGl6ZSBnbG9i
YWwgc3RyaW5ncworICAgIExvYWRTdHJpbmcoaEluc3QsIElEU19BUFBfVElUTEUsIHN6VGl0bGUs
IE1BWF9MT0FEU1RSSU5HKTsKKyAgICBMb2FkU3RyaW5nKGhJbnN0LCBJRENfTUlOSUJST1dTRVIs
IHN6V2luZG93Q2xhc3MsIE1BWF9MT0FEU1RSSU5HKTsKKyAgICBNeVJlZ2lzdGVyQ2xhc3MoaElu
c3QpOworCisgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBXZWJDb3JlOjpkZXZpY2VTY2FsZUZhY3Rv
ckZvcldpbmRvdyhudWxscHRyKTsKKworICAgIG1faE1haW5XbmQgPSBDcmVhdGVXaW5kb3coc3pX
aW5kb3dDbGFzcywgc3pUaXRsZSwgV1NfT1ZFUkxBUFBFRFdJTkRPVyB8IFdTX1ZJU0lCTEUsCisg
ICAgICAgIENXX1VTRURFRkFVTFQsIDAsIENXX1VTRURFRkFVTFQsIDAsIDAsIDAsIGhJbnN0LCAw
KTsKKworICAgIG1faEJhY2tCdXR0b25XbmQgPSBDcmVhdGVXaW5kb3coTCJCVVRUT04iLCBMIjwi
LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgIHwgQlNfVEVYVCwgMCwgMCwgMCwgMCwgbV9oTWFpbldu
ZCwgMCwgaEluc3QsIDApOworICAgIG1faEZvcndhcmRCdXR0b25XbmQgPSBDcmVhdGVXaW5kb3co
TCJCVVRUT04iLCBMIj4iLCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBCU19URVhULCBzY2FsZUZh
Y3RvciAqIENPTlRST0xCVVRUT05fV0lEVEgsIDAsIDAsIDAsIG1faE1haW5XbmQsIDAsIGhJbnN0
LCAwKTsKKyAgICBtX2hVUkxCYXJXbmQgPSBDcmVhdGVXaW5kb3coTCJFRElUIiwgMCwgV1NfQ0hJ
TEQgfCBXU19WSVNJQkxFIHwgV1NfQk9SREVSIHwgRVNfTEVGVCB8IEVTX0FVVE9WU0NST0xMLCBz
Y2FsZUZhY3RvciAqIENPTlRST0xCVVRUT05fV0lEVEggKiAyLCAwLCAwLCAwLCBtX2hNYWluV25k
LCAwLCBoSW5zdCwgMCk7CisKKyAgICB1cGRhdGVEZXZpY2VTY2FsZUZhY3RvcigpOworCisgICAg
RGVmRWRpdFByb2MgPSByZWludGVycHJldF9jYXN0PFdORFBST0M+KEdldFdpbmRvd0xvbmdQdHIo
bV9oVVJMQmFyV25kLCBHV0xQX1dORFBST0MpKTsKKyAgICBEZWZCdXR0b25Qcm9jID0gcmVpbnRl
cnByZXRfY2FzdDxXTkRQUk9DPihHZXRXaW5kb3dMb25nUHRyKG1faEJhY2tCdXR0b25XbmQsIEdX
TFBfV05EUFJPQykpOworICAgIFNldFdpbmRvd0xvbmdQdHIobV9oVVJMQmFyV25kLCBHV0xQX1dO
RFBST0MsIHJlaW50ZXJwcmV0X2Nhc3Q8TE9OR19QVFI+KEVkaXRQcm9jKSk7CisgICAgU2V0V2lu
ZG93TG9uZ1B0cihtX2hCYWNrQnV0dG9uV25kLCBHV0xQX1dORFBST0MsIHJlaW50ZXJwcmV0X2Nh
c3Q8TE9OR19QVFI+KEJhY2tCdXR0b25Qcm9jKSk7CisgICAgU2V0V2luZG93TG9uZ1B0cihtX2hG
b3J3YXJkQnV0dG9uV25kLCBHV0xQX1dORFBST0MsIHJlaW50ZXJwcmV0X2Nhc3Q8TE9OR19QVFI+
KEZvcndhcmRCdXR0b25Qcm9jKSk7CisKKyAgICBTZXRGb2N1cyhtX2hVUkxCYXJXbmQpOworCisg
ICAgc3RkOjp1bmlxdWVfcHRyPENvbnRlbnRXaW5kb3c+ICgqZmFjdG9yeSkoSFdORCwgSFdORCwg
Ym9vbCwgYm9vbCk7CisgICAgZmFjdG9yeSA9IFtdKEhXTkQgbWFpblduZCwgSFdORCB1cmxCYXJX
bmQsIGJvb2wgdXNlTGF5ZXJlZFdlYlZpZXcsIGJvb2wgcGFnZUxvYWRUZXN0aW5nKSAtPiBzdGQ6
OnVuaXF1ZV9wdHI8Q29udGVudFdpbmRvdz4geworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3Vu
aXF1ZTxNaW5pQnJvd3Nlcj4obWFpblduZCwgdXJsQmFyV25kLCB1c2VMYXllcmVkV2ViVmlldywg
cGFnZUxvYWRUZXN0aW5nKTsKKyAgICB9OworI2lmIEVOQUJMRShXRUJLSVQpCisgICAgaWYgKHVz
ZVdLMikgeworICAgICAgICBmYWN0b3J5ID0gW10oSFdORCBtYWluV25kLCBIV05EIHVybEJhcldu
ZCwgYm9vbCwgYm9vbCkgLT4gc3RkOjp1bmlxdWVfcHRyPENvbnRlbnRXaW5kb3c+IHsKKyAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFdLMkNvbnRlbnRXaW5kb3c+KG1haW5XbmQs
IHVybEJhclduZCk7CisgICAgICAgIH07CisgICAgfQorI2VuZGlmCisgICAgbV9jb250ZW50V2lu
ZG93ID0gZmFjdG9yeSh1c2VzTGF5ZXJlZFdlYlZpZXcgPyBudWxscHRyIDogbV9oTWFpblduZCwg
bV9oVVJMQmFyV25kLCB1c2VzTGF5ZXJlZFdlYlZpZXcsIHBhZ2VMb2FkVGVzdGluZyk7CisgICAg
Z01pbmlCcm93c2VyID0gbV9jb250ZW50V2luZG93LmdldCgpOworCisgICAgcmVzaXplU3ViVmll
d3MoKTsKKyAgICBTaG93V2luZG93KG1faE1haW5XbmQsIG5DbWRTaG93KTsKKworICAgIGlmIChy
ZXF1ZXN0ZWRVUkwubGVuZ3RoKCkpCisgICAgICAgIGxvYWRVUkwocmVxdWVzdGVkVVJMLkdldEJT
VFIoKSk7CisgICAgZWxzZQorICAgICAgICBnTWluaUJyb3dzZXItPmxvYWRIVE1MU3RyaW5nKGRl
ZmF1bHRIVE1MKTsKKworICAgIHJldHVybjsKK30KKwordm9pZCBCcm93c2VyV2luZG93Ojp1cGRh
dGVEZXZpY2VTY2FsZUZhY3RvcigpCit7CisgICAgYXV0byBzY2FsZUZhY3RvciA9IFdlYkNvcmU6
OmRldmljZVNjYWxlRmFjdG9yRm9yV2luZG93KG1faE1haW5XbmQpOworCisgICAgaWYgKG1faFVS
TEJhckZvbnQpCisgICAgICAgIDo6RGVsZXRlT2JqZWN0KG1faFVSTEJhckZvbnQpOworCisgICAg
bV9oVVJMQmFyRm9udCA9IDo6Q3JlYXRlRm9udChzY2FsZUZhY3RvciAqIDE4LCAwLCAwLCAwLCBG
V19OT1JNQUwsIEZBTFNFLCBGQUxTRSwgRkFMU0UsIERFRkFVTFRfQ0hBUlNFVCwKKyAgICAgICAg
T1VUX1RUX09OTFlfUFJFQ0lTLCBDTElQX0RFRkFVTFRfUFJFQ0lTLCBBTlRJQUxJQVNFRF9RVUFM
SVRZLCBGRl9ET05UQ0FSRSwgTCJUaW1lcyBOZXcgUm9tYW4iKTsKK30KKwordm9pZCBCcm93c2Vy
V2luZG93OjpyZXNpemVTdWJWaWV3cygpCit7CisgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBXZWJD
b3JlOjpkZXZpY2VTY2FsZUZhY3RvckZvcldpbmRvdyhtX2hNYWluV25kKTsKKworICAgIFJFQ1Qg
cmNDbGllbnQ7CisgICAgR2V0Q2xpZW50UmVjdChtX2hNYWluV25kLCAmcmNDbGllbnQpOworCisg
ICAgaW50IGhlaWdodCA9IHNjYWxlRmFjdG9yICogVVJMQkFSX0hFSUdIVDsKKyAgICBpbnQgd2lk
dGggPSBzY2FsZUZhY3RvciAqIENPTlRST0xCVVRUT05fV0lEVEg7CisKKyAgICBNb3ZlV2luZG93
KG1faEJhY2tCdXR0b25XbmQsIDAsIDAsIHdpZHRoLCBoZWlnaHQsIFRSVUUpOworICAgIE1vdmVX
aW5kb3cobV9oRm9yd2FyZEJ1dHRvblduZCwgd2lkdGgsIDAsIHdpZHRoLCBoZWlnaHQsIFRSVUUp
OworICAgIE1vdmVXaW5kb3cobV9oVVJMQmFyV25kLCB3aWR0aCAqIDIsIDAsIHJjQ2xpZW50LnJp
Z2h0LCBoZWlnaHQsIFRSVUUpOworICAgIGlmICghbV91c2VzTGF5ZXJlZFdlYlZpZXcpCisgICAg
ICAgIE1vdmVXaW5kb3coY29udGVudFdpbmRvdygpLT5od25kKCksIDAsIGhlaWdodCwgcmNDbGll
bnQucmlnaHQsIHJjQ2xpZW50LmJvdHRvbSAtIGhlaWdodCwgVFJVRSk7CisKKyAgICA6OlNlbmRN
ZXNzYWdlKG1faFVSTEJhclduZCwgc3RhdGljX2Nhc3Q8VUlOVD4oV01fU0VURk9OVCksIHJlaW50
ZXJwcmV0X2Nhc3Q8V1BBUkFNPih1cmxCYXJGb250KCkpLCBUUlVFKTsKK30KKworc3RhdGljIElO
VF9QVFIgQ0FMTEJBQ0sgYXV0aERpYWxvZ1Byb2MoSFdORCBoRGxnLCBVSU5UIG1lc3NhZ2UsIFdQ
QVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCit7CisgICAgc3dpdGNoIChtZXNzYWdlKSB7Cisg
ICAgY2FzZSBXTV9JTklURElBTE9HOiB7CisgICAgICAgIEhXTkQgZWRpdCA9IDo6R2V0RGxnSXRl
bShoRGxnLCBJRENfQVVUSF9VU0VSKTsKKyAgICAgICAgOjpTZXRXaW5kb3dUZXh0KGVkaXQsIEwi
Iik7CisKKyAgICAgICAgZWRpdCA9IDo6R2V0RGxnSXRlbShoRGxnLCBJRENfQVVUSF9QQVNTV09S
RCk7CisgICAgICAgIDo6U2V0V2luZG93VGV4dChlZGl0LCBMIiIpOworICAgICAgICByZXR1cm4g
VFJVRTsKKyAgICB9CisKKyAgICBjYXNlIFdNX0NPTU1BTkQ6CisgICAgICAgIGlmIChMT1dPUkQo
d1BhcmFtKSA9PSBJRE9LIHx8IExPV09SRCh3UGFyYW0pID09IElEQ0FOQ0VMKSB7CisgICAgICAg
ICAgICBJTlRfUFRSIHJlc3VsdCB7IH07CisKKyAgICAgICAgICAgIGlmIChMT1dPUkQod1BhcmFt
KSA9PSBJRE9LKSB7CisgICAgICAgICAgICAgICAgVENIQVIgdXNlclsyNTZdOworICAgICAgICAg
ICAgICAgIGludCBzdHJMZW4gPSA6OkdldFdpbmRvd1RleHQoOjpHZXREbGdJdGVtKGhEbGcsIElE
Q19BVVRIX1VTRVIpLCB1c2VyLCAyNTYpOworICAgICAgICAgICAgICAgIHVzZXJbc3RyTGVuXSA9
IDA7CisKKyAgICAgICAgICAgICAgICBUQ0hBUiBwYXNzWzI1Nl07CisgICAgICAgICAgICAgICAg
c3RyTGVuID0gOjpHZXRXaW5kb3dUZXh0KDo6R2V0RGxnSXRlbShoRGxnLCBJRENfQVVUSF9QQVNT
V09SRCksIHBhc3MsIDI1Nik7CisgICAgICAgICAgICAgICAgcGFzc1tzdHJMZW5dID0gMDsKKwor
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8SU5UX1BUUj4obmV3IHN0
ZDo6cGFpcjxzdGQ6OndzdHJpbmcsIHN0ZDo6d3N0cmluZz4odXNlciwgcGFzcykpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICA6OkVuZERpYWxvZyhoRGxnLCByZXN1bHQpOworICAgICAg
ICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IHJldHVybiBGQUxTRTsKK30KKworYm9vbCBCcm93c2VyV2luZG93OjpkaXNwbGF5QXV0aERpYWxv
ZyhzdGQ6OndzdHJpbmcmIHVzZXJuYW1lLCBzdGQ6OndzdHJpbmcmIHBhc3N3b3JkKQoreworICAg
IGF1dG8gcmVzdWx0ID0gRGlhbG9nQm94KGhJbnN0LCBNQUtFSU5UUkVTT1VSQ0UoSUREX0FVVEgp
LCBtX2hNYWluV25kLCBhdXRoRGlhbG9nUHJvYyk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAg
IHJldHVybiBFX0ZBSUw7CisKKyAgICBhdXRvIHBhaXIgPSByZWludGVycHJldF9jYXN0PHN0ZDo6
cGFpcjxzdGQ6OndzdHJpbmcsIHN0ZDo6d3N0cmluZz4qPihyZXN1bHQpOworICAgIHVzZXJuYW1l
ID0gcGFpci0+Zmlyc3Q7CisgICAgcGFzc3dvcmQgPSBwYWlyLT5zZWNvbmQ7CisgICAgZGVsZXRl
IHBhaXI7CisKKyAgICByZXR1cm4gU19PSzsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93
c2VyL3dpbi9Ccm93c2VyV2luZG93LmggYi9Ub29scy9NaW5pQnJvd3Nlci93aW4vQnJvd3Nlcldp
bmRvdy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjljNDhiMjZmMTRjNWM3ZmM2YTlkYjQwYjg5Mzg5ZGE3OWQxNzU5
ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci93aW4vQnJvd3NlcldpbmRv
dy5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggU29ueSBJbnRl
cmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNvbnRlbnRXaW5kb3cuaCIK
KyNpbmNsdWRlIDxtZW1vcnk+CisKK2NsYXNzIEJyb3dzZXJXaW5kb3cgeworcHVibGljOgorICAg
IEJyb3dzZXJXaW5kb3coaW50IG5DbWRTaG93LCBib29sIHVzZXNMYXllcmVkV2ViVmlldywgYm9v
bCBwYWdlTG9hZFRlc3RpbmcsIF9ic3RyX3QgcmVxdWVzdGVkVVJMLCBib29sIHVzZVdLMik7CisK
KyAgICB2b2lkIHVwZGF0ZURldmljZVNjYWxlRmFjdG9yKCk7CisgICAgSEdESU9CSiB1cmxCYXJG
b250KCkgeyByZXR1cm4gbV9oVVJMQmFyRm9udDsgfQorICAgIENvbnRlbnRXaW5kb3cqIGNvbnRl
bnRXaW5kb3coKSB7IHJldHVybiBtX2NvbnRlbnRXaW5kb3cuZ2V0KCk7IH0KKyAgICBib29sIGRp
c3BsYXlBdXRoRGlhbG9nKHN0ZDo6d3N0cmluZyYgdXNlcm5hbWUsIHN0ZDo6d3N0cmluZyYgcGFz
c3dvcmQpOworCisgICAgc3RhdGljIExSRVNVTFQgQ0FMTEJBQ0sgV25kUHJvYyhIV05EIGhXbmQs
IFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSk7CisKK3ByaXZhdGU6
CisgICAgdm9pZCByZXNpemVTdWJWaWV3cygpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPENvbnRl
bnRXaW5kb3c+IG1fY29udGVudFdpbmRvdzsKKyAgICBIV05EIG1faE1haW5XbmQ7CisgICAgSFdO
RCBtX2hCYWNrQnV0dG9uV25kOworICAgIEhXTkQgbV9oRm9yd2FyZEJ1dHRvblduZDsKKyAgICBI
V05EIG1faFVSTEJhclduZDsKKyAgICBIR0RJT0JKIG1faFVSTEJhckZvbnQgeyBudWxscHRyIH07
CisgICAgYm9vbCBtX3VzZXNMYXllcmVkV2ViVmlldzsKK307CmRpZmYgLS1naXQgYS9Ub29scy9N
aW5pQnJvd3Nlci93aW4vQ01ha2VMaXN0cy50eHQgYi9Ub29scy9NaW5pQnJvd3Nlci93aW4vQ01h
a2VMaXN0cy50eHQKaW5kZXggYjg5NTZmODMyMGM3Yjg5NDI2ZmQzYWRiYjA1OTk4ZjM0YWY5MGMz
ZC4uMTliNDVlMDg1ZGFjZjQ2OTI2MzQ2NWQwODU5MTQ1ZTUyNmQ5MWNlOSAxMDA2NDQKLS0tIGEv
VG9vbHMvTWluaUJyb3dzZXIvd2luL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rvb2xzL01pbmlCcm93
c2VyL3dpbi9DTWFrZUxpc3RzLnR4dApAQCAtNyw2ICs3LDggQEAgc2V0KE1pbmlCcm93c2VyX0lO
Q0xVREVfRElSRUNUT1JJRVMKIAogc2V0KE1pbmlCcm93c2VyX1NPVVJDRVMKICAgICBBY2Nlc3Np
YmlsaXR5RGVsZWdhdGUuY3BwCisgICAgQnJvd3NlcldpbmRvdy5jcHAKKyAgICBDb21tb24uY3Bw
CiAgICAgRE9NRGVmYXVsdEltcGwuY3BwCiAgICAgUGFnZUxvYWRUZXN0Q2xpZW50LmNwcAogICAg
IFByaW50V2ViVUlEZWxlZ2F0ZS5jcHAKQEAgLTM2LDYgKzM4LDE0IEBAIGlmIChVU0VfQ0YpCiAg
ICAgKQogZW5kaWYgKCkKIAoraWYgKEVOQUJMRV9XRUJLSVQpCisgICAgYWRkX2RlZmluaXRpb25z
KC1ERU5BQkxFX1dFQktJVCkKKyAgICBsaXN0KEFQUEVORCBNaW5pQnJvd3Nlcl9TT1VSQ0VTCisg
ICAgICAgIFdLMkNvbnRlbnRXaW5kb3cuY3BwCisgICAgKQorICAgIGxpc3QoQVBQRU5EIE1pbmlC
cm93c2VyX0xJQlJBUklFUyBXZWJLaXQpCitlbmRpZiAoKQorCiBzZXQoQ01BS0VfU0hBUkVEX0xJ
TktFUl9GTEFHUyAiJHtDTUFLRV9TSEFSRURfTElOS0VSX0ZMQUdTfSAke01TVkNfUlVOVElNRV9M
SU5LRVJfRkxBR1N9IikKIHNldChDTUFLRV9FWEVfTElOS0VSX0ZMQUdTICIke0NNQUtFX0VYRV9M
SU5LRVJfRkxBR1N9IC9FTlRSWTp3V2luTWFpbkNSVFN0YXJ0dXAiKQogCmRpZmYgLS1naXQgYS9U
b29scy9NaW5pQnJvd3Nlci93aW4vQ29tbW9uLmNwcCBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9D
b21tb24uY3BwCmluZGV4IGJiN2EzNTRhZWNmOTg0MjIwMzQxNjlkOGYxZDgxNWU5MDIwYTEyY2Iu
LjIwYmM4N2I4N2Y4ODg4N2ZhMTNhNzI1MjU3NzI0Yjc1YjhmZmEyZWEgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL01pbmlCcm93c2VyL3dpbi9Db21tb24uY3BwCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3dp
bi9Db21tb24uY3BwCkBAIC0yNiwyNCArMjYsMTMgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAK
LSNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5RGVsZWdhdGUuaCIKKyNpbmNsdWRlICJzdGRhZnguaCIK
KworI2luY2x1ZGUgIkJyb3dzZXJXaW5kb3cuaCIKICNpbmNsdWRlICJET01EZWZhdWx0SW1wbC5o
IgotI2luY2x1ZGUgIlByaW50V2ViVUlEZWxlZ2F0ZS5oIgotI2luY2x1ZGUgIlJlc291cmNlTG9h
ZERlbGVnYXRlLmgiCi0jaW5jbHVkZSAiV2ViRG93bmxvYWREZWxlZ2F0ZS5oIgogI2luY2x1ZGUg
Ik1pbmlCcm93c2VyLmgiCi0jaW5jbHVkZSAiTWluaUJyb3dzZXJSZXBsYWNlLmgiCisjaW5jbHVk
ZSAiTWluaUJyb3dzZXJMaWJSZXNvdXJjZS5oIgogI2luY2x1ZGUgPFdlYktpdExlZ2FjeS9XZWJL
aXRDT01BUEkuaD4KLSNpbmNsdWRlIDx3dGYvRXhwb3J0TWFjcm9zLmg+Ci0jaW5jbHVkZSA8d3Rm
L1BsYXRmb3JtLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgotCi0jaWYgVVNFKENGKQotI2luY2x1ZGUgPENvcmVGb3VuZGF0
aW9uL0NGUnVuTG9vcC5oPgotI2luY2x1ZGUgPFdlYktpdExlZ2FjeS9DRkRpY3Rpb25hcnlQcm9w
ZXJ0eUJhZy5oPgotI2VuZGlmCi0KICNpbmNsdWRlIDxjYXNzZXJ0PgogI2luY2x1ZGUgPGNvbWlw
Lmg+CiAjaW5jbHVkZSA8Y29tbWN0cmwuaD4KQEAgLTU4LDEwICs0NywxNSBAQAogI2luY2x1ZGUg
PHN0cmluZz4KICNpbmNsdWRlIDx2ZWN0b3I+CiAjaW5jbHVkZSA8d2luaW5ldC5oPgorI2luY2x1
ZGUgPHd0Zi9FeHBvcnRNYWNyb3MuaD4KKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CisKKyNpZiBVU0UoQ0YpCisjaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ0ZSdW5Mb29wLmg+Cisj
ZW5kaWYKIAotI2RlZmluZSBNQVhfTE9BRFNUUklORyAxMDAKLSNkZWZpbmUgVVJMQkFSX0hFSUdI
VCAgMjQKLSNkZWZpbmUgQ09OVFJPTEJVVFRPTl9XSURUSCAyNAogCiBzdGF0aWMgY29uc3QgaW50
IG1heEhpc3RvcnlTaXplID0gMTA7CiAKQEAgLTc0LDI3ICs2OCwxNyBAQCB0eXBlZGVmIF9jb21f
cHRyX3Q8X2NvbV9JSUlEPElXZWJNdXRhYmxlVVJMUmVxdWVzdCwgJl9fdXVpZG9mKElXZWJNdXRh
YmxlVVJMUmVxdQogCiAvLyBHbG9iYWwgVmFyaWFibGVzOgogSElOU1RBTkNFIGhJbnN0OwotSFdO
RCBoTWFpblduZDsKLUhXTkQgaFVSTEJhclduZDsKLUhHRElPQkogaFVSTEZvbnQ7Ci1IV05EIGhC
YWNrQnV0dG9uV25kOwotSFdORCBoRm9yd2FyZEJ1dHRvblduZDsKIEhXTkQgaENhY2hlV25kOwog
V05EUFJPQyBEZWZFZGl0UHJvYyA9IG51bGxwdHI7CiBXTkRQUk9DIERlZkJ1dHRvblByb2MgPSBu
dWxscHRyOwotV05EUFJPQyBEZWZXZWJLaXRQcm9jID0gbnVsbHB0cjsKLUhXTkQgZ1ZpZXdXaW5k
b3cgPSAwOwotTWluaUJyb3dzZXIqIGdNaW5pQnJvd3NlciA9IG51bGxwdHI7Ci1UQ0hBUiBzelRp
dGxlW01BWF9MT0FEU1RSSU5HXTsgLy8gVGhlIHRpdGxlIGJhciB0ZXh0Ci1UQ0hBUiBzeldpbmRv
d0NsYXNzW01BWF9MT0FEU1RSSU5HXTsgLy8gdGhlIG1haW4gd2luZG93IGNsYXNzIG5hbWUKK0Jy
b3dzZXJXaW5kb3cqIGdCcm93c2VyV2luZG93ID0gbnVsbHB0cjsKK0NvbnRlbnRXaW5kb3cqIGdN
aW5pQnJvd3NlciA9IG51bGxwdHI7CiAKIC8vIFN1cHBvcnQgbW92aW5nIHRoZSB0cmFuc3BhcmVu
dCB3aW5kb3cKIFBPSU5UIHNfd2luZG93UG9zaXRpb24gPSB7IDEwMCwgMTAwIH07CiBTSVpFIHNf
d2luZG93U2l6ZSA9IHsgNTAwLCAyMDAgfTsKIAogLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMgb2Yg
ZnVuY3Rpb25zIGluY2x1ZGVkIGluIHRoaXMgY29kZSBtb2R1bGU6Ci1BVE9NIE15UmVnaXN0ZXJD
bGFzcyhISU5TVEFOQ0UgaEluc3RhbmNlKTsKLUxSRVNVTFQgQ0FMTEJBQ0sgV25kUHJvYyhIV05E
LCBVSU5ULCBXUEFSQU0sIExQQVJBTSk7CiBJTlRfUFRSIENBTExCQUNLIEFib3V0KEhXTkQsIFVJ
TlQsIFdQQVJBTSwgTFBBUkFNKTsKIElOVF9QVFIgQ0FMTEJBQ0sgQ3VzdG9tVXNlckFnZW50KEhX
TkQsIFVJTlQsIFdQQVJBTSwgTFBBUkFNKTsKIExSRVNVTFQgQ0FMTEJBQ0sgRWRpdFByb2MoSFdO
RCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0pOwpAQCAtMTAyLDQ5ICs4NiwxNCBAQCBMUkVTVUxUIENB
TExCQUNLIEJhY2tCdXR0b25Qcm9jKEhXTkQsIFVJTlQsIFdQQVJBTSwgTFBBUkFNKTsKIExSRVNV
TFQgQ0FMTEJBQ0sgRm9yd2FyZEJ1dHRvblByb2MoSFdORCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0p
OwogTFJFU1VMVCBDQUxMQkFDSyBSZWxvYWRCdXR0b25Qcm9jKEhXTkQsIFVJTlQsIFdQQVJBTSwg
TFBBUkFNKTsKIElOVF9QVFIgQ0FMTEJBQ0sgQ2FjaGVzKEhXTkQsIFVJTlQsIFdQQVJBTSwgTFBB
UkFNKTsKLUlOVF9QVFIgQ0FMTEJBQ0sgQXV0aERpYWxvZ1Byb2MoSFdORCwgVUlOVCwgV1BBUkFN
LCBMUEFSQU0pOwogCi1zdGF0aWMgdm9pZCBsb2FkVVJMKEJTVFIgdXJsQlN0cik7Ci1zdGF0aWMg
dm9pZCB1cGRhdGVTdGF0aXN0aWNzKEhXTkQgaERsZyk7Cit2b2lkIGxvYWRVUkwoQlNUUiB1cmxC
U3RyKTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3JGb3JX
aW5kb3coSFdORCk7CiB9CiAKLXN0YXRpYyB2b2lkIHJlc2l6ZVN1YlZpZXdzKCkKLXsKLSAgICBp
ZiAoZ01pbmlCcm93c2VyLT51c2VzTGF5ZXJlZFdlYlZpZXcoKSB8fCAhZ1ZpZXdXaW5kb3cpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gV2ViQ29yZTo6ZGV2aWNl
U2NhbGVGYWN0b3JGb3JXaW5kb3coZ1ZpZXdXaW5kb3cpOwotCi0gICAgUkVDVCByY0NsaWVudDsK
LSAgICBHZXRDbGllbnRSZWN0KGhNYWluV25kLCAmcmNDbGllbnQpOwotCi0gICAgaW50IGhlaWdo
dCA9IHNjYWxlRmFjdG9yICogVVJMQkFSX0hFSUdIVDsKLSAgICBpbnQgd2lkdGggPSBzY2FsZUZh
Y3RvciAqIENPTlRST0xCVVRUT05fV0lEVEg7Ci0KLSAgICBNb3ZlV2luZG93KGhCYWNrQnV0dG9u
V25kLCAwLCAwLCB3aWR0aCwgaGVpZ2h0LCBUUlVFKTsKLSAgICBNb3ZlV2luZG93KGhGb3J3YXJk
QnV0dG9uV25kLCB3aWR0aCwgMCwgd2lkdGgsIGhlaWdodCwgVFJVRSk7Ci0gICAgTW92ZVdpbmRv
dyhoVVJMQmFyV25kLCB3aWR0aCAqIDIsIDAsIHJjQ2xpZW50LnJpZ2h0LCBoZWlnaHQsIFRSVUUp
OwotICAgIE1vdmVXaW5kb3coZ1ZpZXdXaW5kb3csIDAsIGhlaWdodCwgcmNDbGllbnQucmlnaHQs
IHJjQ2xpZW50LmJvdHRvbSAtIGhlaWdodCwgVFJVRSk7Ci0KLSAgICA6OlNlbmRNZXNzYWdlKGhV
UkxCYXJXbmQsIHN0YXRpY19jYXN0PFVJTlQ+KFdNX1NFVEZPTlQpLCByZWludGVycHJldF9jYXN0
PFdQQVJBTT4oZ01pbmlCcm93c2VyLT51cmxCYXJGb250KCkpLCBUUlVFKTsKLX0KLQotc3RhdGlj
IHZvaWQgc3ViY2xhc3NGb3JMYXllcmVkV2luZG93KCkKLXsKLSAgICBoTWFpblduZCA9IGdWaWV3
V2luZG93OwotI2lmIGRlZmluZWQgX01fQU1ENjQgfHwgZGVmaW5lZCBfV0lONjQKLSAgICBEZWZX
ZWJLaXRQcm9jID0gcmVpbnRlcnByZXRfY2FzdDxXTkRQUk9DPig6OkdldFdpbmRvd0xvbmdQdHIo
aE1haW5XbmQsIEdXTFBfV05EUFJPQykpOwotICAgIDo6U2V0V2luZG93TG9uZ1B0cihoTWFpbldu
ZCwgR1dMUF9XTkRQUk9DLCByZWludGVycHJldF9jYXN0PExPTkdfUFRSPihXbmRQcm9jKSk7Ci0j
ZWxzZQotICAgIERlZldlYktpdFByb2MgPSByZWludGVycHJldF9jYXN0PFdORFBST0M+KDo6R2V0
V2luZG93TG9uZyhoTWFpblduZCwgR1dMX1dORFBST0MpKTsKLSAgICA6OlNldFdpbmRvd0xvbmco
aE1haW5XbmQsIEdXTF9XTkRQUk9DLCByZWludGVycHJldF9jYXN0PExPTkdfUFRSPihXbmRQcm9j
KSk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIHZvaWQgY29tcHV0ZUZ1bGxEZXNrdG9wRnJhbWUoKQor
dm9pZCBjb21wdXRlRnVsbERlc2t0b3BGcmFtZSgpCiB7CiAgICAgUkVDVCBkZXNrdG9wOwogICAg
IGlmICghOjpTeXN0ZW1QYXJhbWV0ZXJzSW5mbyhTUElfR0VUV09SS0FSRUEsIDAsIHN0YXRpY19j
YXN0PHZvaWQqPigmZGVza3RvcCksIDApKQpAQCAtMTY2LDcgKzExNSw3IEBAIEJPT0wgV0lOQVBJ
IERsbE1haW4oSElOU1RBTkNFIGRsbEluc3RhbmNlLCBEV09SRCByZWFzb24sIExQVk9JRCkKICAg
ICByZXR1cm4gVFJVRTsKIH0KIAotc3RhdGljIGJvb2wgZ2V0QXBwRGF0YUZvbGRlcihfYnN0cl90
JiBkaXJlY3RvcnkpCitib29sIGdldEFwcERhdGFGb2xkZXIoX2JzdHJfdCYgZGlyZWN0b3J5KQog
ewogICAgIHdjaGFyX3QgYXBwRGF0YURpcmVjdG9yeVtNQVhfUEFUSF07CiAgICAgaWYgKEZBSUxF
RChTSEdldEZvbGRlclBhdGhXKDAsIENTSURMX0xPQ0FMX0FQUERBVEEgfCBDU0lETF9GTEFHX0NS
RUFURSwgMCwgMCwgYXBwRGF0YURpcmVjdG9yeSkpKQpAQCAtMTgzLDIxICsxMzIsNyBAQCBzdGF0
aWMgYm9vbCBnZXRBcHBEYXRhRm9sZGVyKF9ic3RyX3QmIGRpcmVjdG9yeSkKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgc2V0Q2FjaGVGb2xkZXIoKQotewotICAgIElXZWJDYWNo
ZVB0ciB3ZWJDYWNoZSA9IGdNaW5pQnJvd3Nlci0+d2ViQ2FjaGUoKTsKLSAgICBpZiAoIXdlYkNh
Y2hlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBfYnN0cl90IGFwcERhdGFGb2xkZXI7
Ci0gICAgaWYgKCFnZXRBcHBEYXRhRm9sZGVyKGFwcERhdGFGb2xkZXIpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBhcHBEYXRhRm9sZGVyICs9IEwiXFxjYWNoZSI7Ci0gICAgd2ViQ2Fj
aGUtPnNldENhY2hlRm9sZGVyKGFwcERhdGFGb2xkZXIpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19
CitzdGF0aWMgdm9pZCBwcm9jZXNzQ3Jhc2hSZXBvcnQoY29uc3Qgd2NoYXJfdCogZmlsZU5hbWUp
IHsgOjpNZXNzYWdlQm94KDAsIGZpbGVOYW1lLCBMIkNyYXNoIFJlcG9ydCIsIE1CX09LKTsgfQog
CiB2b2lkIGNyZWF0ZUNyYXNoUmVwb3J0KEVYQ0VQVElPTl9QT0lOVEVSUyogZXhjZXB0aW9uUG9p
bnRlcnMpCiB7CkBAIC0yMzMsODIgKzE2OCw2IEBAIHZvaWQgY3JlYXRlQ3Jhc2hSZXBvcnQoRVhD
RVBUSU9OX1BPSU5URVJTKiBleGNlcHRpb25Qb2ludGVycykKICAgICB9CiB9CiAKLXN0YXRpYyBC
T09MIENBTExCQUNLIEFib3J0UHJvYyhIREMgaERDLCBpbnQgRXJyb3IpCi17Ci0gICAgTVNHIG1z
ZzsKLSAgICB3aGlsZSAoOjpQZWVrTWVzc2FnZSgmbXNnLCAwLCAwLCAwLCBQTV9SRU1PVkUpKSB7
Ci0gICAgICAgIDo6VHJhbnNsYXRlTWVzc2FnZSgmbXNnKTsKLSAgICAgICAgOjpEaXNwYXRjaE1l
c3NhZ2UoJm1zZyk7Ci0gICAgfQotCi0gICAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBIREMg
Z2V0UHJpbnRlckRDKCkKLXsKLSAgICBQUklOVERMRyBwZGxnOwotICAgIG1lbXNldCgmcGRsZywg
MCwgc2l6ZW9mKFBSSU5URExHKSk7Ci0gICAgcGRsZy5sU3RydWN0U2l6ZSA9IHNpemVvZihQUklO
VERMRyk7Ci0gICAgcGRsZy5GbGFncyA9IFBEX1BSSU5UU0VUVVAgfCBQRF9SRVRVUk5EQzsKLQot
ICAgIDo6UHJpbnREbGcoJnBkbGcpOwotCi0gICAgcmV0dXJuIHBkbGcuaERDOwotfQotCi1zdGF0
aWMgdm9pZCBpbml0RG9jU3RydWN0KERPQ0lORk8qIGRpLCBUQ0hBUiogZG9jbmFtZSkKLXsKLSAg
ICBtZW1zZXQoZGksIDAsIHNpemVvZihET0NJTkZPKSk7Ci0gICAgZGktPmNiU2l6ZSA9IHNpemVv
ZihET0NJTkZPKTsKLSAgICBkaS0+bHBzekRvY05hbWUgPSBkb2NuYW1lOwotfQotCi10eXBlZGVm
IF9jb21fcHRyX3Q8X2NvbV9JSUlEPElXZWJGcmFtZVByaXZhdGUsICZfX3V1aWRvZihJV2ViRnJh
bWVQcml2YXRlKT4+IElXZWJGcmFtZVByaXZhdGVQdHI7Ci0KLXZvaWQgUHJpbnRWaWV3KEhXTkQg
aFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQotewotICAg
IEhEQyBwcmludERDID0gZ2V0UHJpbnRlckRDKCk7Ci0gICAgaWYgKCFwcmludERDKSB7Ci0gICAg
ICAgIDo6TWVzc2FnZUJveFcoMCwgTCJFcnJvciBjcmVhdGluZyBwcmludGluZyBEQyIsIEwiRXJy
b3IiLCBNQl9BUFBMTU9EQUwgfCBNQl9PSyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBpZiAoOjpTZXRBYm9ydFByb2MocHJpbnREQywgQWJvcnRQcm9jKSA9PSBTUF9FUlJPUikgewot
ICAgICAgICA6Ok1lc3NhZ2VCb3hXKDAsIEwiRXJyb3Igc2V0dGluZyB1cCBBYm9ydFByb2MiLCBM
IkVycm9yIiwgTUJfQVBQTE1PREFMIHwgTUJfT0spOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgSVdlYkZyYW1lUHRyIGZyYW1lID0gZ01pbmlCcm93c2VyLT5tYWluRnJhbWUoKTsKLSAg
ICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBJV2ViRnJhbWVQcml2YXRlUHRy
IGZyYW1lUHJpdmF0ZTsKLSAgICBpZiAoRkFJTEVEKGZyYW1lLT5RdWVyeUludGVyZmFjZSgmZnJh
bWVQcml2YXRlLkdldEludGVyZmFjZVB0cigpKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZy
YW1lUHJpdmF0ZS0+c2V0SW5QcmludGluZ01vZGUoVFJVRSwgcHJpbnREQyk7Ci0KLSAgICBVSU5U
IHBhZ2VDb3VudCA9IDA7Ci0gICAgZnJhbWVQcml2YXRlLT5nZXRQcmludGVkUGFnZUNvdW50KHBy
aW50REMsICZwYWdlQ291bnQpOwotCi0gICAgRE9DSU5GTyBkaTsKLSAgICBpbml0RG9jU3RydWN0
KCZkaSwgTCJXZWJLaXQgRG9jIik7Ci0gICAgOjpTdGFydERvYyhwcmludERDLCAmZGkpOwotCi0g
ICAgLy8gRklYTUU6IE5lZWQgQ29yZUdyYXBoaWNzIGltcGxlbWVudGF0aW9uCi0gICAgdm9pZCog
Z3JhcGhpY3NDb250ZXh0ID0gMDsKLSAgICBmb3IgKHNpemVfdCBwYWdlID0gMTsgcGFnZSA8PSBw
YWdlQ291bnQ7ICsrcGFnZSkgewotICAgICAgICA6OlN0YXJ0UGFnZShwcmludERDKTsKLSAgICAg
ICAgZnJhbWVQcml2YXRlLT5zcG9vbFBhZ2VzKHByaW50REMsIHBhZ2UsIHBhZ2UsIGdyYXBoaWNz
Q29udGV4dCk7Ci0gICAgICAgIDo6RW5kUGFnZShwcmludERDKTsKLSAgICB9Ci0KLSAgICBmcmFt
ZVByaXZhdGUtPnNldEluUHJpbnRpbmdNb2RlKEZBTFNFLCBwcmludERDKTsKLQotICAgIDo6RW5k
RG9jKHByaW50REMpOwotICAgIDo6RGVsZXRlREMocHJpbnREQyk7Ci19Ci0KIHN0YXRpYyB2b2lk
IFRvZ2dsZU1lbnVGbGFnKEhXTkQgaFduZCwgVUlOVCBtZW51SUQpCiB7CiAgICAgSE1FTlUgbWVu
dSA9IDo6R2V0TWVudShoV25kKTsKQEAgLTM1MSw2ICsyMTAsNDQgQEAgc3RhdGljIHZvaWQgdHVy
bk9mZk90aGVyVXNlckFnZW50cyhITUVOVSBtZW51KQogICAgIH0KIH0KIAorc3RhdGljIHZvaWQg
c2V0VXNlckFnZW50KFVJTlQgbWVudUlEKQoreworICAgIHN0ZDo6d3N0cmluZyBjdXN0b21Vc2Vy
QWdlbnQ7CisgICAgc3dpdGNoIChtZW51SUQpIHsKKyAgICBjYXNlIElETV9VQV9ERUZBVUxUOgor
ICAgICAgICAvLyBTZXQgdG8gbnVsbCB1c2VyIGFnZW50CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgSURNX1VBX1NBRkFSSV84XzA6CisgICAgICAgIGN1c3RvbVVzZXJBZ2VudCA9IEwiTW96aWxs
YS81LjAgKE1hY2ludG9zaDsgSW50ZWwgTWFjIE9TIFggMTBfMTApIEFwcGxlV2ViS2l0LzYwMC4x
LjI1IChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvbi84LjAgU2FmYXJpLzYwMC4xLjI1IjsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBJRE1fVUFfU0FGQVJJX0lPU184X0lQSE9ORToKKyAgICAg
ICAgY3VzdG9tVXNlckFnZW50ID0gTCJNb3ppbGxhLzUuMCAoaVBob25lOyBDUFUgT1MgOF8xIGxp
a2UgTWFjIE9TIFgpIEFwcGxlV2ViS2l0LzYwMS4xLjQgKEtIVE1MLCBsaWtlIEdlY2tvKSBWZXJz
aW9uLzguMCBNb2JpbGUvMTJCNDAzIFNhZmFyaS82MDAuMS40IjsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBJRE1fVUFfU0FGQVJJX0lPU184X0lQQUQ6CisgICAgICAgIGN1c3RvbVVzZXJBZ2Vu
dCA9IEwiTW96aWxsYS81LjAgKGlQYWQ7IENQVSBPUyA4XzEgbGlrZSBNYWMgT1MgWCkgQXBwbGVX
ZWJLaXQvNjAwLjEuNCAoS0hUTUwsIGxpa2UgR2Vja28pIFZlcnNpb24vOC4wIE1vYmlsZS8xMkI0
MDMgU2FmYXJpLzYwMC4xLjQiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIElETV9VQV9JRV8x
MToKKyAgICAgICAgY3VzdG9tVXNlckFnZW50ID0gTCJNb3ppbGxhLzUuMCAoV2luZG93cyBOVCA2
LjM7IFdPVzY0OyBUcmlkZW50LzcuMDsgcnY6MTEuMCkgbGlrZSBHZWNrbyI7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgSURNX1VBX0NIUk9NRV9NQUM6CisgICAgICAgIGN1c3RvbVVzZXJBZ2Vu
dCA9IEwiTW96aWxsYS81LjAgKE1hY2ludG9zaDsgSW50ZWwgTWFjIE9TIFggMTBfOF8zKSBBcHBs
ZVdlYktpdC81MzcuMzEgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMjYuMC4xNDEwLjY1IFNh
ZmFyaS81MzcuMzEiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIElETV9VQV9DSFJPTUVfV0lO
OgorICAgICAgICBjdXN0b21Vc2VyQWdlbnQgPSBMIk1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDYu
MjsgV09XNjQpIEFwcGxlV2ViS2l0LzUzNy4zMSAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8y
Ni4wLjE0MTAuNjQgU2FmYXJpLzUzNy4zMSI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSURN
X1VBX0ZJUkVGT1hfTUFDOgorICAgICAgICBjdXN0b21Vc2VyQWdlbnQgPSBMIk1vemlsbGEvNS4w
IChNYWNpbnRvc2g7IEludGVsIE1hYyBPUyBYIDEwLjg7IHJ2OjIwLjApIEdlY2tvLzIwMTAwMTAx
IEZpcmVmb3gvMjAuMCI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSURNX1VBX0ZJUkVGT1hf
V0lOOgorICAgICAgICBjdXN0b21Vc2VyQWdlbnQgPSBMIk1vemlsbGEvNS4wIChXaW5kb3dzIE5U
IDYuMjsgV09XNjQ7IHJ2OjIwLjApIEdlY2tvLzIwMTAwMTAxIEZpcmVmb3gvMjAuMCI7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgSURNX1VBX09USEVSOgorICAgIGRlZmF1bHQ6CisgICAgICAg
IEFTU0VSVCgwKTsgLy8gV2Ugc2hvdWxkIG5ldmVyIGhpdCB0aGlzIGNhc2UKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBnTWluaUJyb3dzZXItPnNldFVzZXJBZ2VudChjdXN0b21Vc2VyQWdl
bnQpOworfQogc3RhdGljIGJvb2wgVG9nZ2xlTWVudUl0ZW0oSFdORCBoV25kLCBVSU5UIG1lbnVJ
RCkKIHsKICAgICBpZiAoIWdNaW5pQnJvd3NlcikKQEAgLTM2OCw0MSArMjY1LDM2IEBAIHN0YXRp
YyBib29sIFRvZ2dsZU1lbnVJdGVtKEhXTkQgaFduZCwgVUlOVCBtZW51SUQpCiAKICAgICBCT09M
IG5ld1N0YXRlID0gIW1lbnVJdGVtSXNDaGVja2VkKGluZm8pOwogCi0gICAgaWYgKCFnTWluaUJy
b3dzZXItPnN0YW5kYXJkUHJlZmVyZW5jZXMoKSB8fCAhZ01pbmlCcm93c2VyLT5wcml2YXRlUHJl
ZmVyZW5jZXMoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCiAgICAgc3dpdGNoIChtZW51SUQp
IHsKICAgICBjYXNlIElETV9BVkZPVU5EQVRJT046Ci0gICAgICAgIGdNaW5pQnJvd3Nlci0+c3Rh
bmRhcmRQcmVmZXJlbmNlcygpLT5zZXRBVkZvdW5kYXRpb25FbmFibGVkKG5ld1N0YXRlKTsKKyAg
ICAgICAgZ01pbmlCcm93c2VyLT5zZXRBVkZvdW5kYXRpb25FbmFibGVkKG5ld1N0YXRlKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBJRE1fQUNDX0NPTVBPU0lUSU5HOgotICAgICAgICBnTWlu
aUJyb3dzZXItPnByaXZhdGVQcmVmZXJlbmNlcygpLT5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5n
RW5hYmxlZChuZXdTdGF0ZSk7CisgICAgICAgIGdNaW5pQnJvd3Nlci0+c2V0QWNjZWxlcmF0ZWRD
b21wb3NpdGluZ0VuYWJsZWQobmV3U3RhdGUpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIElE
TV9XS19GVUxMU0NSRUVOOgotICAgICAgICBnTWluaUJyb3dzZXItPnByaXZhdGVQcmVmZXJlbmNl
cygpLT5zZXRGdWxsU2NyZWVuRW5hYmxlZChuZXdTdGF0ZSk7CisgICAgICAgIGdNaW5pQnJvd3Nl
ci0+c2V0RnVsbFNjcmVlbkVuYWJsZWQobmV3U3RhdGUpOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIElETV9DT01QT1NJVElOR19CT1JERVJTOgotICAgICAgICBnTWluaUJyb3dzZXItPnByaXZh
dGVQcmVmZXJlbmNlcygpLT5zZXRTaG93RGVidWdCb3JkZXJzKG5ld1N0YXRlKTsKLSAgICAgICAg
Z01pbmlCcm93c2VyLT5wcml2YXRlUHJlZmVyZW5jZXMoKS0+c2V0U2hvd1JlcGFpbnRDb3VudGVy
KG5ld1N0YXRlKTsKKyAgICAgICAgZ01pbmlCcm93c2VyLT5zZXRTaG93Q29tcG9zaXRpbmdCb3Jk
ZXJzKG5ld1N0YXRlKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJRE1fREVCVUdfSU5GT19M
QVlFUjoKLSAgICAgICAgZ01pbmlCcm93c2VyLT5wcml2YXRlUHJlZmVyZW5jZXMoKS0+c2V0U2hv
d1RpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yKG5ld1N0YXRlKTsKKyAgICAgICAgZ01pbmlCcm93c2Vy
LT5zZXRTaG93VGlsZWRTY3JvbGxpbmdJbmRpY2F0b3IobmV3U3RhdGUpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIElETV9JTlZFUlRfQ09MT1JTOgotICAgICAgICBnTWluaUJyb3dzZXItPnBy
aXZhdGVQcmVmZXJlbmNlcygpLT5zZXRTaG91bGRJbnZlcnRDb2xvcnMobmV3U3RhdGUpOworICAg
ICAgICBnTWluaUJyb3dzZXItPnNldFNob3VsZEludmVydENvbG9ycyhuZXdTdGF0ZSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgSURNX0RJU0FCTEVfSU1BR0VTOgotICAgICAgICBnTWluaUJy
b3dzZXItPnN0YW5kYXJkUHJlZmVyZW5jZXMoKS0+c2V0TG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5
KCFuZXdTdGF0ZSk7CisgICAgICAgIGdNaW5pQnJvd3Nlci0+c2V0TG9hZHNJbWFnZXNBdXRvbWF0
aWNhbGx5KCFuZXdTdGF0ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSURNX0RJU0FCTEVf
U1RZTEVTOgotICAgICAgICBnTWluaUJyb3dzZXItPnByaXZhdGVQcmVmZXJlbmNlcygpLT5zZXRB
dXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZCghbmV3U3RhdGUpOworICAgICAgICBnTWluaUJyb3dz
ZXItPnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKCFuZXdTdGF0ZSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgSURNX0RJU0FCTEVfSkFWQVNDUklQVDoKLSAgICAgICAgZ01pbmlCcm93
c2VyLT5zdGFuZGFyZFByZWZlcmVuY2VzKCktPnNldEphdmFTY3JpcHRFbmFibGVkKCFuZXdTdGF0
ZSk7CisgICAgICAgIGdNaW5pQnJvd3Nlci0+c2V0SmF2YVNjcmlwdEVuYWJsZWQoIW5ld1N0YXRl
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJRE1fRElTQUJMRV9MT0NBTF9GSUxFX1JFU1RS
SUNUSU9OUzoKLSAgICAgICAgZ01pbmlCcm93c2VyLT5wcml2YXRlUHJlZmVyZW5jZXMoKS0+c2V0
QWxsb3dVbml2ZXJzYWxBY2Nlc3NGcm9tRmlsZVVSTHMobmV3U3RhdGUpOwotICAgICAgICBnTWlu
aUJyb3dzZXItPnByaXZhdGVQcmVmZXJlbmNlcygpLT5zZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmls
ZVVSTHMobmV3U3RhdGUpOworICAgICAgICBnTWluaUJyb3dzZXItPnNldExvY2FsRmlsZVJlc3Ry
aWN0aW9uc0VuYWJsZWQoIW5ld1N0YXRlKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJRE1f
VUFfREVGQVVMVDoKICAgICBjYXNlIElETV9VQV9TQUZBUklfOF8wOgpAQCAtNDEzLDcgKzMwNSw3
IEBAIHN0YXRpYyBib29sIFRvZ2dsZU1lbnVJdGVtKEhXTkQgaFduZCwgVUlOVCBtZW51SUQpCiAg
ICAgY2FzZSBJRE1fVUFfQ0hST01FX1dJTjoKICAgICBjYXNlIElETV9VQV9GSVJFRk9YX01BQzoK
ICAgICBjYXNlIElETV9VQV9GSVJFRk9YX1dJTjoKLSAgICAgICAgZ01pbmlCcm93c2VyLT5zZXRV
c2VyQWdlbnQobWVudUlEKTsKKyAgICAgICAgc2V0VXNlckFnZW50KG1lbnVJRCk7CiAgICAgICAg
IHR1cm5PZmZPdGhlclVzZXJBZ2VudHMobWVudSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
SURNX1VBX09USEVSOgpAQCAtNDMxLDM2ICszMjMsMTcgQEAgc3RhdGljIGJvb2wgVG9nZ2xlTWVu
dUl0ZW0oSFdORCBoV25kLCBVSU5UIG1lbnVJRCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3Rh
dGljIGNvbnN0IGludCBkcmFnQmFySGVpZ2h0ID0gMzA7Ci0KLUxSRVNVTFQgQ0FMTEJBQ0sgV25k
UHJvYyhIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJh
bSkKK0xSRVNVTFQgQ0FMTEJBQ0sgQnJvd3NlcldpbmRvdzo6V25kUHJvYyhIV05EIGhXbmQsIFVJ
TlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKIHsKLSAgICBXTkRQUk9D
IHBhcmVudFByb2MgPSAoZ01pbmlCcm93c2VyKSA/IChnTWluaUJyb3dzZXItPnVzZXNMYXllcmVk
V2ViVmlldygpID8gRGVmV2ViS2l0UHJvYyA6IERlZldpbmRvd1Byb2MpIDogRGVmV2luZG93UHJv
YzsKKyAgICBXTkRQUk9DIHBhcmVudFByb2MgPSBEZWZXaW5kb3dQcm9jOwogCiAgICAgc3dpdGNo
IChtZXNzYWdlKSB7Ci0gICAgY2FzZSBXTV9OQ0hJVFRFU1Q6Ci0gICAgICAgIGlmIChnTWluaUJy
b3dzZXIgJiYgZ01pbmlCcm93c2VyLT51c2VzTGF5ZXJlZFdlYlZpZXcoKSkgewotICAgICAgICAg
ICAgUkVDVCB3aW5kb3c7Ci0gICAgICAgICAgICA6OkdldFdpbmRvd1JlY3QoaFduZCwgJndpbmRv
dyk7Ci0gICAgICAgICAgICAvLyBGb3IgdGVzdGluZyBvdXIgdHJhbnNwYXJlbnQgd2luZG93LCB3
ZSBuZWVkIGEgcmVnaW9uIHRvIHVzZSBhcyBhIGhhbmRsZSBmb3IKLSAgICAgICAgICAgIC8vIGRy
YWdnaW5nLiBUaGUgcmlnaHQgd2F5IHRvIGRvIHRoaXMgd291bGQgYmUgdG8gcXVlcnkgdGhlIHdl
YiB2aWV3IHRvIHNlZSB3aGF0J3MKLSAgICAgICAgICAgIC8vIHVuZGVyIHRoZSBtb3VzZS4gSG93
ZXZlciwgZm9yIHRlc3RpbmcgcHVycG9zZXMgd2UganVzdCB1c2UgYW4gYXJiaXRyYXJ5Ci0gICAg
ICAgICAgICAvLyAzMCBsb2dpY2FsIHBpeGVsIGJhbmQgYXQgdGhlIHRvcCBvZiB0aGUgdmlldyBh
cyBhbiBhcmJpdHJhcnkgZ3JpcHBpbmcgbG9jYXRpb24uCi0gICAgICAgICAgICAvLwotICAgICAg
ICAgICAgLy8gV2hlbiB3ZSBhcmUgd2l0aGluIHRoaXMgYmFkLCByZXR1cm4gSFRfQ0FQVElPTiB0
byB0ZWxsIFdpbmRvd3Mgd2Ugd2FudCB0bwotICAgICAgICAgICAgLy8gdHJlYXQgdGhpcyByZWdp
b24gYXMgaWYgaXQgd2VyZSB0aGUgdGl0bGUgYmFyIG9uIGEgbm9ybWFsIHdpbmRvdy4KLSAgICAg
ICAgICAgIGludCB5ID0gSElXT1JEKGxQYXJhbSk7Ci0gICAgICAgICAgICBmbG9hdCBzY2FsZWRE
cmFnQmFySGVpZ2h0RmFjdG9yID0gZHJhZ0JhckhlaWdodCAqIGdNaW5pQnJvd3Nlci0+ZGV2aWNl
U2NhbGVGYWN0b3IoKTsKLSAgICAgICAgICAgIGlmICgoeSA+IHdpbmRvdy50b3ApICYmICh5IDwg
d2luZG93LnRvcCArIHNjYWxlZERyYWdCYXJIZWlnaHRGYWN0b3IpKQotICAgICAgICAgICAgICAg
IHJldHVybiBIVENBUFRJT047Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIENhbGxXaW5kb3dQ
cm9jKHBhcmVudFByb2MsIGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtKTsKICAgICBjYXNl
IFdNX0NPTU1BTkQ6IHsKICAgICAgICAgaW50IHdtSWQgPSBMT1dPUkQod1BhcmFtKTsKICAgICAg
ICAgaW50IHdtRXZlbnQgPSBISVdPUkQod1BhcmFtKTsKICAgICAgICAgaWYgKHdtSWQgPj0gSURN
X0hJU1RPUllfTElOSzAgJiYgd21JZCA8PSBJRE1fSElTVE9SWV9MSU5LOSkgewogICAgICAgICAg
ICAgaWYgKGdNaW5pQnJvd3NlcikKLSAgICAgICAgICAgICAgICBnTWluaUJyb3dzZXItPm5hdmln
YXRlVG9IaXN0b3J5KGhXbmQsIHdtSWQpOworICAgICAgICAgICAgICAgIGdNaW5pQnJvd3Nlci0+
bmF2aWdhdGVUb0hpc3Rvcnkod21JZCAtIElETV9ISVNUT1JZX0xJTkswKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIC8vIFBhcnNlIHRoZSBtZW51IHNlbGVjdGlvbnM6
CkBAIC00NzIsNyArMzQ1LDggQEAgTFJFU1VMVCBDQUxMQkFDSyBXbmRQcm9jKEhXTkQgaFduZCwg
VUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQogICAgICAgICAgICAg
RGVzdHJveVdpbmRvdyhoV25kKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIElE
TV9QUklOVDoKLSAgICAgICAgICAgIFByaW50VmlldyhoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQ
YXJhbSk7CisgICAgICAgICAgICBpZiAoZ01pbmlCcm93c2VyKQorICAgICAgICAgICAgICAgIGdN
aW5pQnJvd3Nlci0+cHJpbnQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIElE
TV9XRUJfSU5TUEVDVE9SOgogICAgICAgICAgICAgaWYgKGdNaW5pQnJvd3NlcikKQEAgLTQ4Nyw3
ICszNjEsNyBAQCBMUkVTVUxUIENBTExCQUNLIFduZFByb2MoSFdORCBoV25kLCBVSU5UIG1lc3Nh
Z2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCiAgICAgICAgIGNhc2UgSURNX0hJU1RP
UllfQkFDS1dBUkQ6CiAgICAgICAgIGNhc2UgSURNX0hJU1RPUllfRk9SV0FSRDoKICAgICAgICAg
ICAgIGlmIChnTWluaUJyb3dzZXIpCi0gICAgICAgICAgICAgICAgZ01pbmlCcm93c2VyLT5uYXZp
Z2F0ZUZvcndhcmRPckJhY2t3YXJkKGhXbmQsIHdtSWQpOworICAgICAgICAgICAgICAgIGdNaW5p
QnJvd3Nlci0+bmF2aWdhdGVGb3J3YXJkT3JCYWNrd2FyZCh3bUlkID09IElETV9ISVNUT1JZX0JB
Q0tXQVJEKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIElETV9VQV9PVEhFUjoK
ICAgICAgICAgICAgIGlmICh3bUV2ZW50KQpAQCAtNTI0LDE0ICszOTgsMTQgQEAgTFJFU1VMVCBD
QUxMQkFDSyBXbmRQcm9jKEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBM
UEFSQU0gbFBhcmFtKQogICAgICAgICBQb3N0UXVpdE1lc3NhZ2UoMCk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgV01fU0laRToKLSAgICAgICAgaWYgKCFnTWluaUJyb3dzZXIgfHwgIWdNaW5p
QnJvd3Nlci0+aGFzV2ViVmlldygpIHx8IGdNaW5pQnJvd3Nlci0+dXNlc0xheWVyZWRXZWJWaWV3
KCkpCisgICAgICAgIGlmICghZ0Jyb3dzZXJXaW5kb3cpCiAgICAgICAgICAgICByZXR1cm4gQ2Fs
bFdpbmRvd1Byb2MocGFyZW50UHJvYywgaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0pOwog
Ci0gICAgICAgIHJlc2l6ZVN1YlZpZXdzKCk7CisgICAgICAgIGdCcm93c2VyV2luZG93LT5yZXNp
emVTdWJWaWV3cygpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFdNX0RQSUNIQU5HRUQ6Ci0g
ICAgICAgIGlmIChnTWluaUJyb3dzZXIpCi0gICAgICAgICAgICBnTWluaUJyb3dzZXItPnVwZGF0
ZURldmljZVNjYWxlRmFjdG9yKCk7CisgICAgICAgIGlmIChnQnJvd3NlcldpbmRvdykKKyAgICAg
ICAgICAgIGdCcm93c2VyV2luZG93LT51cGRhdGVEZXZpY2VTY2FsZUZhY3RvcigpOwogICAgICAg
ICByZXR1cm4gQ2FsbFdpbmRvd1Byb2MocGFyZW50UHJvYywgaFduZCwgbWVzc2FnZSwgd1BhcmFt
LCBsUGFyYW0pOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBDYWxsV2luZG93UHJvYyhw
YXJlbnRQcm9jLCBoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSk7CkBAIC02MjAsNyArNDk0
LDggQEAgSU5UX1BUUiBDQUxMQkFDSyBDYWNoZXMoSFdORCBoRGxnLCBVSU5UIG1lc3NhZ2UsIFdQ
QVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCiAgICAgICAgIHJldHVybiAoSU5UX1BUUilUUlVF
OwogCiAgICAgY2FzZSBXTV9QQUlOVDoKLSAgICAgICAgdXBkYXRlU3RhdGlzdGljcyhoRGxnKTsK
KyAgICAgICAgaWYgKGdNaW5pQnJvd3NlcikKKyAgICAgICAgICAgIGdNaW5pQnJvd3Nlci0+dXBk
YXRlU3RhdGlzdGljcyhoRGxnKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC02MzMsMTEg
KzUwOCwxMSBAQCBJTlRfUFRSIENBTExCQUNLIEN1c3RvbVVzZXJBZ2VudChIV05EIGhEbGcsIFVJ
TlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNCiAgICAgc3dpdGNoIChtZXNzYWdlKSB7
CiAgICAgY2FzZSBXTV9JTklURElBTE9HOiB7CiAgICAgICAgIEhXTkQgZWRpdCA9IDo6R2V0RGxn
SXRlbShoRGxnLCBJRENfVVNFUl9BR0VOVF9JTlBVVCk7Ci0gICAgICAgIF9ic3RyX3QgdXNlckFn
ZW50OworICAgICAgICBzdGQ6OndzdHJpbmcgdXNlckFnZW50OwogICAgICAgICBpZiAoZ01pbmlC
cm93c2VyKQogICAgICAgICAgICAgdXNlckFnZW50ID0gZ01pbmlCcm93c2VyLT51c2VyQWdlbnQo
KTsKIAotICAgICAgICA6OlNldFdpbmRvd1RleHQoZWRpdCwgc3RhdGljX2Nhc3Q8TFBDVFNUUj4o
dXNlckFnZW50KSk7CisgICAgICAgIDo6U2V0V2luZG93VGV4dChlZGl0LCB1c2VyQWdlbnQuY19z
dHIoKSk7CiAgICAgICAgIHJldHVybiAoSU5UX1BUUilUUlVFOwogICAgIH0KIApAQCAtNjQ5LDEx
ICs1MjQsOSBAQCBJTlRfUFRSIENBTExCQUNLIEN1c3RvbVVzZXJBZ2VudChIV05EIGhEbGcsIFVJ
TlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNCiAgICAgICAgICAgICBpbnQgc3RyTGVu
ID0gOjpHZXRXaW5kb3dUZXh0KGVkaXQsIGJ1ZmZlciwgMTAyNCk7CiAgICAgICAgICAgICBidWZm
ZXJbc3RyTGVuXSA9IDA7CiAKLSAgICAgICAgICAgIF9ic3RyX3QgYnN0cihidWZmZXIpOwotICAg
ICAgICAgICAgaWYgKGJzdHIubGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIHN0ZDo6d3N0cmluZyBi
c3RyKGJ1ZmZlcik7CisgICAgICAgICAgICBpZiAoYnN0ci5sZW5ndGgoKSkKICAgICAgICAgICAg
ICAgICBnTWluaUJyb3dzZXItPnNldFVzZXJBZ2VudChic3RyKTsKLSAgICAgICAgICAgICAgICA6
OlBvc3RNZXNzYWdlKGhNYWluV25kLCBzdGF0aWNfY2FzdDxVSU5UPihXTV9DT01NQU5EKSwgTUFL
RUxQQVJBTShJRE1fVUFfT1RIRVIsIDEpLCAwKTsKLSAgICAgICAgICAgIH0KICAgICAgICAgfQog
CiAgICAgICAgIGlmIChMT1dPUkQod1BhcmFtKSA9PSBJRE9LIHx8IExPV09SRCh3UGFyYW0pID09
IElEQ0FOQ0VMKSB7CkBAIC02NjUsMjI2ICs1MzgsMjAgQEAgSU5UX1BUUiBDQUxMQkFDSyBDdXN0
b21Vc2VyQWdlbnQoSFdORCBoRGxnLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJB
TQogICAgIHJldHVybiAoSU5UX1BUUilGQUxTRTsKIH0KIAotSFJFU1VMVCBEaXNwbGF5QXV0aERp
YWxvZyhzdGQ6OndzdHJpbmcmIHVzZXJuYW1lLCBzdGQ6OndzdHJpbmcmIHBhc3N3b3JkKQotewot
ICAgIGF1dG8gcmVzdWx0ID0gRGlhbG9nQm94KGhJbnN0LCBNQUtFSU5UUkVTT1VSQ0UoSUREX0FV
VEgpLCBoTWFpblduZCwgQXV0aERpYWxvZ1Byb2MpOwotICAgIGlmICghcmVzdWx0KQotICAgICAg
ICByZXR1cm4gRV9GQUlMOwotCi0gICAgYXV0byBwYWlyID0gcmVpbnRlcnByZXRfY2FzdDxzdGQ6
OnBhaXI8c3RkOjp3c3RyaW5nLCBzdGQ6OndzdHJpbmc+Kj4ocmVzdWx0KTsKLSAgICB1c2VybmFt
ZSA9IHBhaXItPmZpcnN0OwotICAgIHBhc3N3b3JkID0gcGFpci0+c2Vjb25kOwotICAgIGRlbGV0
ZSBwYWlyOwotCi0gICAgcmV0dXJuIFNfT0s7Ci19Ci0KLUlOVF9QVFIgQ0FMTEJBQ0sgQXV0aERp
YWxvZ1Byb2MoSFdORCBoRGxnLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBs
UGFyYW0pCi17Ci0gICAgc3dpdGNoIChtZXNzYWdlKSB7Ci0gICAgY2FzZSBXTV9JTklURElBTE9H
OiB7Ci0gICAgICAgIEhXTkQgZWRpdCA9IDo6R2V0RGxnSXRlbShoRGxnLCBJRENfQVVUSF9VU0VS
KTsKLSAgICAgICAgOjpTZXRXaW5kb3dUZXh0KGVkaXQsIHN0YXRpY19jYXN0PExQQ1RTVFI+KEwi
IikpOwotICAgICAgICAKLSAgICAgICAgZWRpdCA9IDo6R2V0RGxnSXRlbShoRGxnLCBJRENfQVVU
SF9QQVNTV09SRCk7Ci0gICAgICAgIDo6U2V0V2luZG93VGV4dChlZGl0LCBzdGF0aWNfY2FzdDxM
UENUU1RSPihMIiIpKTsKLSAgICAgICAgcmV0dXJuIChJTlRfUFRSKVRSVUU7Ci0gICAgfQotCi0g
ICAgY2FzZSBXTV9DT01NQU5EOgotICAgICAgICBpZiAoTE9XT1JEKHdQYXJhbSkgPT0gSURPSyB8
fCBMT1dPUkQod1BhcmFtKSA9PSBJRENBTkNFTCkgewotICAgICAgICAgICAgSU5UX1BUUiByZXN1
bHQgeyB9OwotCi0gICAgICAgICAgICBpZiAoTE9XT1JEKHdQYXJhbSkgPT0gSURPSykgewotICAg
ICAgICAgICAgICAgIFRDSEFSIHVzZXJbMjU2XTsKLSAgICAgICAgICAgICAgICBpbnQgc3RyTGVu
ID0gOjpHZXRXaW5kb3dUZXh0KDo6R2V0RGxnSXRlbShoRGxnLCBJRENfQVVUSF9VU0VSKSwgdXNl
ciwgMjU2KTsKLSAgICAgICAgICAgICAgICB1c2VyW3N0ckxlbl0gPSAwOwotCi0gICAgICAgICAg
ICAgICAgVENIQVIgcGFzc1syNTZdOwotICAgICAgICAgICAgICAgIHN0ckxlbiA9IDo6R2V0V2lu
ZG93VGV4dCg6OkdldERsZ0l0ZW0oaERsZywgSURDX0FVVEhfUEFTU1dPUkQpLCBwYXNzLCAyNTYp
OwotICAgICAgICAgICAgICAgIHBhc3Nbc3RyTGVuXSA9IDA7Ci0KLSAgICAgICAgICAgICAgICBy
ZXN1bHQgPSByZWludGVycHJldF9jYXN0PElOVF9QVFI+KG5ldyBzdGQ6OnBhaXI8c3RkOjp3c3Ry
aW5nLCBzdGQ6OndzdHJpbmc+KHVzZXIsIHBhc3MpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgOjpFbmREaWFsb2coaERsZywgcmVzdWx0KTsKLSAgICAgICAgICAgIHJldHVybiAoSU5U
X1BUUilUUlVFOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4g
KElOVF9QVFIpRkFMU0U7Ci19Ci0KLXN0YXRpYyB2b2lkIGxvYWRVUkwoQlNUUiBwYXNzZWRVUkwp
Cit2b2lkIGxvYWRVUkwoQlNUUiBwYXNzZWRVUkwpCiB7CiAgICAgaWYgKEZBSUxFRChnTWluaUJy
b3dzZXItPmxvYWRVUkwocGFzc2VkVVJMKSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFNldEZv
Y3VzKGdWaWV3V2luZG93KTsKKyAgICBTZXRGb2N1cyhnTWluaUJyb3dzZXItPmh3bmQoKSk7CiB9
CiAKLXN0YXRpYyB2b2lkIHNldFdpbmRvd1RleHQoSFdORCBkaWFsb2csIFVJTlQgZmllbGQsIF9i
c3RyX3QgdmFsdWUpCi17Ci0gICAgOjpTZXREbGdJdGVtVGV4dChkaWFsb2csIGZpZWxkLCB2YWx1
ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldFdpbmRvd1RleHQoSFdORCBkaWFsb2csIFVJTlQgZmll
bGQsIFVJTlQgdmFsdWUpCi17Ci0gICAgU3RyaW5nIHZhbHVlU3RyID0gV1RGOjpTdHJpbmc6Om51
bWJlcih2YWx1ZSk7Ci0KLSAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgZmllbGQsIF9ic3RyX3Qo
dmFsdWVTdHIudXRmOCgpLmRhdGEoKSkpOwotfQotCi10eXBlZGVmIF9jb21fcHRyX3Q8X2NvbV9J
SUlEPElQcm9wZXJ0eUJhZywgJl9fdXVpZG9mKElQcm9wZXJ0eUJhZyk+PiBJUHJvcGVydHlCYWdQ
dHI7Ci0KLXN0YXRpYyB2b2lkIHNldFdpbmRvd1RleHQoSFdORCBkaWFsb2csIFVJTlQgZmllbGQs
IElQcm9wZXJ0eUJhZ1B0ciBzdGF0aXN0aWNzLCBjb25zdCBfYnN0cl90JiBrZXkpCi17Ci0gICAg
X3ZhcmlhbnRfdCB2YXI7Ci0gICAgVl9WVCgmdmFyKSA9IFZUX1VJODsKLSAgICBpZiAoRkFJTEVE
KHN0YXRpc3RpY3MtPlJlYWQoa2V5LCAmdmFyLkdldFZBUklBTlQoKSwgbnVsbHB0cikpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICB1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWUgPSBWX1VJOCgmdmFy
KTsKLSAgICBTdHJpbmcgdmFsdWVTdHIgPSBXVEY6OlN0cmluZzo6bnVtYmVyKHZhbHVlKTsKLQot
ICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBmaWVsZCwgX2JzdHJfdCh2YWx1ZVN0ci51dGY4KCku
ZGF0YSgpKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldFdpbmRvd1RleHQoSFdORCBkaWFsb2csIFVJ
TlQgZmllbGQsIENGRGljdGlvbmFyeVJlZiBkaWN0aW9uYXJ5LCBDRlN0cmluZ1JlZiBrZXksIFVJ
TlQmIHRvdGFsKQotewotICAgIENGTnVtYmVyUmVmIGNvdW50TnVtID0gc3RhdGljX2Nhc3Q8Q0ZO
dW1iZXJSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKGRpY3Rpb25hcnksIGtleSkpOwotICAgIGlm
ICghY291bnROdW0pCi0gICAgICAgIHJldHVybjsKLQotICAgIGludCBjb3VudCA9IDA7Ci0gICAg
Q0ZOdW1iZXJHZXRWYWx1ZShjb3VudE51bSwga0NGTnVtYmVySW50VHlwZSwgJmNvdW50KTsKLQot
ICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBmaWVsZCwgc3RhdGljX2Nhc3Q8VUlOVD4oY291bnQp
KTsKLSAgICB0b3RhbCArPSBjb3VudDsKLX0KLQotc3RhdGljIHZvaWQgdXBkYXRlU3RhdGlzdGlj
cyhIV05EIGRpYWxvZykKLXsKLSAgICBpZiAoIWdNaW5pQnJvd3NlcikKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgSVdlYkNvcmVTdGF0aXN0aWNzUHRyIHdlYkNvcmVTdGF0aXN0aWNzID0gZ01pbmlC
cm93c2VyLT5zdGF0aXN0aWNzKCk7Ci0gICAgaWYgKCF3ZWJDb3JlU3RhdGlzdGljcykKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgSVByb3BlcnR5QmFnUHRyIHN0YXRpc3RpY3M7Ci0gICAgSFJFU1VM
VCBociA9IHdlYkNvcmVTdGF0aXN0aWNzLT5tZW1vcnlTdGF0aXN0aWNzKCZzdGF0aXN0aWNzLkdl
dEludGVyZmFjZVB0cigpKTsKLSAgICBpZiAoRkFJTEVEKGhyKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgLy8gRmFzdE1hbGxvYy4KLSAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX1JFU0VS
VkVEX1ZNLCBzdGF0aXN0aWNzLCAiRmFzdE1hbGxvY1Jlc2VydmVkVk1CeXRlcyIpOwotICAgIHNl
dFdpbmRvd1RleHQoZGlhbG9nLCBJRENfQ09NTUlUVEVEX1ZNLCBzdGF0aXN0aWNzLCAiRmFzdE1h
bGxvY0NvbW1pdHRlZFZNQnl0ZXMiKTsKLSAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX0ZS
RUVfTElTVF9CWVRFUywgc3RhdGlzdGljcywgIkZhc3RNYWxsb2NGcmVlTGlzdEJ5dGVzIik7Ci0K
LSAgICAvLyBXZWJDb3JlIENhY2hlLgotI2lmIFVTRShDRikKLSAgICBJV2ViQ2FjaGVQdHIgd2Vi
Q2FjaGUgPSBnTWluaUJyb3dzZXItPndlYkNhY2hlKCk7Ci0KLSAgICBpbnQgZGljdENvdW50ID0g
NjsKLSAgICBJUHJvcGVydHlCYWcqIGNhY2hlRGljdFs2XSA9IHsgMCB9OwotICAgIGlmIChGQUlM
RUQod2ViQ2FjaGUtPnN0YXRpc3RpY3MoJmRpY3RDb3VudCwgY2FjaGVEaWN0KSkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIENPTVB0cjxDRkRpY3Rpb25hcnlQcm9wZXJ0eUJhZz4gY291bnRzLCBz
aXplcywgbGl2ZVNpemVzLCBkZWNvZGVkU2l6ZXMsIHB1cmdhYmxlU2l6ZXM7Ci0gICAgY291bnRz
LmFkb3B0UmVmKHJlaW50ZXJwcmV0X2Nhc3Q8Q0ZEaWN0aW9uYXJ5UHJvcGVydHlCYWcqPihjYWNo
ZURpY3RbMF0pKTsKLSAgICBzaXplcy5hZG9wdFJlZihyZWludGVycHJldF9jYXN0PENGRGljdGlv
bmFyeVByb3BlcnR5QmFnKj4oY2FjaGVEaWN0WzFdKSk7Ci0gICAgbGl2ZVNpemVzLmFkb3B0UmVm
KHJlaW50ZXJwcmV0X2Nhc3Q8Q0ZEaWN0aW9uYXJ5UHJvcGVydHlCYWcqPihjYWNoZURpY3RbMl0p
KTsKLSAgICBkZWNvZGVkU2l6ZXMuYWRvcHRSZWYocmVpbnRlcnByZXRfY2FzdDxDRkRpY3Rpb25h
cnlQcm9wZXJ0eUJhZyo+KGNhY2hlRGljdFszXSkpOwotICAgIHB1cmdhYmxlU2l6ZXMuYWRvcHRS
ZWYocmVpbnRlcnByZXRfY2FzdDxDRkRpY3Rpb25hcnlQcm9wZXJ0eUJhZyo+KGNhY2hlRGljdFs0
XSkpOwotCi0gICAgc3RhdGljIENGU3RyaW5nUmVmIGltYWdlc0tleSA9IENGU1RSKCJpbWFnZXMi
KTsKLSAgICBzdGF0aWMgQ0ZTdHJpbmdSZWYgc3R5bGVzaGVldHNLZXkgPSBDRlNUUigic3R5bGUg
c2hlZXRzIik7Ci0gICAgc3RhdGljIENGU3RyaW5nUmVmIHhzbEtleSA9IENGU1RSKCJ4c2wiKTsK
LSAgICBzdGF0aWMgQ0ZTdHJpbmdSZWYgc2NyaXB0c0tleSA9IENGU1RSKCJzY3JpcHRzIik7Ci0K
LSAgICBpZiAoY291bnRzKSB7Ci0gICAgICAgIFVJTlQgdG90YWxPYmplY3RzID0gMDsKLSAgICAg
ICAgc2V0V2luZG93VGV4dChkaWFsb2csIElEQ19JTUFHRVNfT0JKRUNUX0NPVU5ULCBjb3VudHMt
PmRpY3Rpb25hcnkoKSwgaW1hZ2VzS2V5LCB0b3RhbE9iamVjdHMpOwotICAgICAgICBzZXRXaW5k
b3dUZXh0KGRpYWxvZywgSURDX0NTU19PQkpFQ1RfQ09VTlQsIGNvdW50cy0+ZGljdGlvbmFyeSgp
LCBzdHlsZXNoZWV0c0tleSwgdG90YWxPYmplY3RzKTsKLSAgICAgICAgc2V0V2luZG93VGV4dChk
aWFsb2csIElEQ19YU0xfT0JKRUNUX0NPVU5ULCBjb3VudHMtPmRpY3Rpb25hcnkoKSwgeHNsS2V5
LCB0b3RhbE9iamVjdHMpOwotICAgICAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX0pTQ19P
QkpFQ1RfQ09VTlQsIGNvdW50cy0+ZGljdGlvbmFyeSgpLCBzY3JpcHRzS2V5LCB0b3RhbE9iamVj
dHMpOwotICAgICAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX1RPVEFMX09CSkVDVF9DT1VO
VCwgdG90YWxPYmplY3RzKTsKLSAgICB9Ci0KLSAgICBpZiAoc2l6ZXMpIHsKLSAgICAgICAgVUlO
VCB0b3RhbEJ5dGVzID0gMDsKLSAgICAgICAgc2V0V2luZG93VGV4dChkaWFsb2csIElEQ19JTUFH
RVNfQllURVMsIHNpemVzLT5kaWN0aW9uYXJ5KCksIGltYWdlc0tleSwgdG90YWxCeXRlcyk7Ci0g
ICAgICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJRENfQ1NTX0JZVEVTLCBzaXplcy0+ZGljdGlv
bmFyeSgpLCBzdHlsZXNoZWV0c0tleSwgdG90YWxCeXRlcyk7Ci0gICAgICAgIHNldFdpbmRvd1Rl
eHQoZGlhbG9nLCBJRENfWFNMX0JZVEVTLCBzaXplcy0+ZGljdGlvbmFyeSgpLCB4c2xLZXksIHRv
dGFsQnl0ZXMpOwotICAgICAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX0pTQ19CWVRFUywg
c2l6ZXMtPmRpY3Rpb25hcnkoKSwgc2NyaXB0c0tleSwgdG90YWxCeXRlcyk7Ci0gICAgICAgIHNl
dFdpbmRvd1RleHQoZGlhbG9nLCBJRENfVE9UQUxfQllURVMsIHRvdGFsQnl0ZXMpOwotICAgIH0K
LQotICAgIGlmIChsaXZlU2l6ZXMpIHsKLSAgICAgICAgVUlOVCB0b3RhbExpdmVCeXRlcyA9IDA7
Ci0gICAgICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJRENfSU1BR0VTX0xJVkVfQ09VTlQsIGxp
dmVTaXplcy0+ZGljdGlvbmFyeSgpLCBpbWFnZXNLZXksIHRvdGFsTGl2ZUJ5dGVzKTsKLSAgICAg
ICAgc2V0V2luZG93VGV4dChkaWFsb2csIElEQ19DU1NfTElWRV9DT1VOVCwgbGl2ZVNpemVzLT5k
aWN0aW9uYXJ5KCksIHN0eWxlc2hlZXRzS2V5LCB0b3RhbExpdmVCeXRlcyk7Ci0gICAgICAgIHNl
dFdpbmRvd1RleHQoZGlhbG9nLCBJRENfWFNMX0xJVkVfQ09VTlQsIGxpdmVTaXplcy0+ZGljdGlv
bmFyeSgpLCB4c2xLZXksIHRvdGFsTGl2ZUJ5dGVzKTsKLSAgICAgICAgc2V0V2luZG93VGV4dChk
aWFsb2csIElEQ19KU0NfTElWRV9DT1VOVCwgbGl2ZVNpemVzLT5kaWN0aW9uYXJ5KCksIHNjcmlw
dHNLZXksIHRvdGFsTGl2ZUJ5dGVzKTsKLSAgICAgICAgc2V0V2luZG93VGV4dChkaWFsb2csIElE
Q19UT1RBTF9MSVZFX0NPVU5ULCB0b3RhbExpdmVCeXRlcyk7Ci0gICAgfQotCi0gICAgaWYgKGRl
Y29kZWRTaXplcykgewotICAgICAgICBVSU5UIHRvdGFsRGVjb2RlZCA9IDA7Ci0gICAgICAgIHNl
dFdpbmRvd1RleHQoZGlhbG9nLCBJRENfSU1BR0VTX0RFQ09ERURfQ09VTlQsIGRlY29kZWRTaXpl
cy0+ZGljdGlvbmFyeSgpLCBpbWFnZXNLZXksIHRvdGFsRGVjb2RlZCk7Ci0gICAgICAgIHNldFdp
bmRvd1RleHQoZGlhbG9nLCBJRENfQ1NTX0RFQ09ERURfQ09VTlQsIGRlY29kZWRTaXplcy0+ZGlj
dGlvbmFyeSgpLCBzdHlsZXNoZWV0c0tleSwgdG90YWxEZWNvZGVkKTsKLSAgICAgICAgc2V0V2lu
ZG93VGV4dChkaWFsb2csIElEQ19YU0xfREVDT0RFRF9DT1VOVCwgZGVjb2RlZFNpemVzLT5kaWN0
aW9uYXJ5KCksIHhzbEtleSwgdG90YWxEZWNvZGVkKTsKLSAgICAgICAgc2V0V2luZG93VGV4dChk
aWFsb2csIElEQ19KU0NfREVDT0RFRF9DT1VOVCwgZGVjb2RlZFNpemVzLT5kaWN0aW9uYXJ5KCks
IHNjcmlwdHNLZXksIHRvdGFsRGVjb2RlZCk7Ci0gICAgICAgIHNldFdpbmRvd1RleHQoZGlhbG9n
LCBJRENfVE9UQUxfREVDT0RFRCwgdG90YWxEZWNvZGVkKTsKLSAgICB9Ci0KLSAgICBpZiAocHVy
Z2FibGVTaXplcykgewotICAgICAgICBVSU5UIHRvdGFsUHVyZ2FibGUgPSAwOwotICAgICAgICBz
ZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX0lNQUdFU19QVVJHRUFCTEVfQ09VTlQsIHB1cmdhYmxl
U2l6ZXMtPmRpY3Rpb25hcnkoKSwgaW1hZ2VzS2V5LCB0b3RhbFB1cmdhYmxlKTsKLSAgICAgICAg
c2V0V2luZG93VGV4dChkaWFsb2csIElEQ19DU1NfUFVSR0VBQkxFX0NPVU5ULCBwdXJnYWJsZVNp
emVzLT5kaWN0aW9uYXJ5KCksIHN0eWxlc2hlZXRzS2V5LCB0b3RhbFB1cmdhYmxlKTsKLSAgICAg
ICAgc2V0V2luZG93VGV4dChkaWFsb2csIElEQ19YU0xfUFVSR0VBQkxFX0NPVU5ULCBwdXJnYWJs
ZVNpemVzLT5kaWN0aW9uYXJ5KCksIHhzbEtleSwgdG90YWxQdXJnYWJsZSk7Ci0gICAgICAgIHNl
dFdpbmRvd1RleHQoZGlhbG9nLCBJRENfSlNDX1BVUkdFQUJMRV9DT1VOVCwgcHVyZ2FibGVTaXpl
cy0+ZGljdGlvbmFyeSgpLCBzY3JpcHRzS2V5LCB0b3RhbFB1cmdhYmxlKTsKLSAgICAgICAgc2V0
V2luZG93VGV4dChkaWFsb2csIElEQ19UT1RBTF9QVVJHRUFCTEUsIHRvdGFsUHVyZ2FibGUpOwot
ICAgIH0KLSNlbmRpZgotCi0gICAgLy8gSmF2YVNjcmlwdCBIZWFwLgotICAgIHNldFdpbmRvd1Rl
eHQoZGlhbG9nLCBJRENfSlNDX0hFQVBfU0laRSwgc3RhdGlzdGljcywgIkphdmFTY3JpcHRIZWFw
U2l6ZSIpOwotICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJRENfSlNDX0hFQVBfRlJFRSwgc3Rh
dGlzdGljcywgIkphdmFTY3JpcHRGcmVlU2l6ZSIpOwotCi0gICAgVUlOVCBjb3VudDsKLSAgICBp
ZiAoU1VDQ0VFREVEKHdlYkNvcmVTdGF0aXN0aWNzLT5qYXZhU2NyaXB0T2JqZWN0c0NvdW50KCZj
b3VudCkpKQotICAgICAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX1RPVEFMX0pTQ19IRUFQ
X09CSkVDVFMsIGNvdW50KTsKLSAgICBpZiAoU1VDQ0VFREVEKHdlYkNvcmVTdGF0aXN0aWNzLT5q
YXZhU2NyaXB0R2xvYmFsT2JqZWN0c0NvdW50KCZjb3VudCkpKQotICAgICAgICBzZXRXaW5kb3dU
ZXh0KGRpYWxvZywgSURDX0dMT0JBTF9KU0NfSEVBUF9PQkpFQ1RTLCBjb3VudCk7Ci0gICAgaWYg
KFNVQ0NFRURFRCh3ZWJDb3JlU3RhdGlzdGljcy0+amF2YVNjcmlwdFByb3RlY3RlZE9iamVjdHND
b3VudCgmY291bnQpKSkKLSAgICAgICAgc2V0V2luZG93VGV4dChkaWFsb2csIElEQ19QUk9URUNU
RURfSlNDX0hFQVBfT0JKRUNUUywgY291bnQpOwotCi0gICAgLy8gRm9udCBhbmQgR2x5cGggQ2Fj
aGVzLgotICAgIGlmIChTVUNDRUVERUQod2ViQ29yZVN0YXRpc3RpY3MtPmNhY2hlZEZvbnREYXRh
Q291bnQoJmNvdW50KSkpCi0gICAgICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJRENfVE9UQUxf
Rk9OVF9PQkpFQ1RTLCBjb3VudCk7Ci0gICAgaWYgKFNVQ0NFRURFRCh3ZWJDb3JlU3RhdGlzdGlj
cy0+Y2FjaGVkRm9udERhdGFJbmFjdGl2ZUNvdW50KCZjb3VudCkpKQotICAgICAgICBzZXRXaW5k
b3dUZXh0KGRpYWxvZywgSURDX0lOQUNUSVZFX0ZPTlRfT0JKRUNUUywgY291bnQpOwotICAgIGlm
IChTVUNDRUVERUQod2ViQ29yZVN0YXRpc3RpY3MtPmdseXBoUGFnZUNvdW50KCZjb3VudCkpKQot
ICAgICAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX0dMWVBIX1BBR0VTLCBjb3VudCk7Ci0K
LSAgICAvLyBTaXRlIEljb24gRGF0YWJhc2UuCi0gICAgaWYgKFNVQ0NFRURFRCh3ZWJDb3JlU3Rh
dGlzdGljcy0+aWNvblBhZ2VVUkxNYXBwaW5nQ291bnQoJmNvdW50KSkpCi0gICAgICAgIHNldFdp
bmRvd1RleHQoZGlhbG9nLCBJRENfUEFHRV9VUkxfTUFQUElOR1MsIGNvdW50KTsKLSAgICBpZiAo
U1VDQ0VFREVEKHdlYkNvcmVTdGF0aXN0aWNzLT5pY29uUmV0YWluZWRQYWdlVVJMQ291bnQoJmNv
dW50KSkpCi0gICAgICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJRENfUkVUQUlORURfUEFHRV9V
UkxTLCBjb3VudCk7Ci0gICAgaWYgKFNVQ0NFRURFRCh3ZWJDb3JlU3RhdGlzdGljcy0+aWNvblJl
Y29yZENvdW50KCZjb3VudCkpKQotICAgICAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX1NJ
VEVfSUNPTl9SRUNPUkRTLCBjb3VudCk7Ci0gICAgaWYgKFNVQ0NFRURFRCh3ZWJDb3JlU3RhdGlz
dGljcy0+aWNvbnNXaXRoRGF0YUNvdW50KCZjb3VudCkpKQotICAgICAgICBzZXRXaW5kb3dUZXh0
KGRpYWxvZywgSURDX1NJVEVfSUNPTlNfV0lUSF9EQVRBLCBjb3VudCk7Ci19Ci0KLXN0YXRpYyB2
b2lkIHBhcnNlQ29tbWFuZExpbmUoYm9vbCYgdXNlc0xheWVyZWRXZWJWaWV3LCBib29sJiB1c2VG
dWxsRGVza3RvcCwgYm9vbCYgcGFnZUxvYWRUZXN0aW5nLCBfYnN0cl90JiByZXF1ZXN0ZWRVUkwp
Cit2b2lkIHBhcnNlQ29tbWFuZExpbmUoYm9vbCYgdXNlc0xheWVyZWRXZWJWaWV3LCBib29sJiB1
c2VGdWxsRGVza3RvcCwgYm9vbCYgcGFnZUxvYWRUZXN0aW5nLCBfYnN0cl90JiByZXF1ZXN0ZWRV
UkwsIGJvb2wmIHVzZVdLMikKIHsKICAgICB1c2VzTGF5ZXJlZFdlYlZpZXcgPSBmYWxzZTsKICAg
ICB1c2VGdWxsRGVza3RvcCA9IGZhbHNlOwogICAgIHBhZ2VMb2FkVGVzdGluZyA9IGZhbHNlOwor
ICAgIHVzZVdLMiA9IGZhbHNlOwogCiAgICAgaW50IGFyZ2MgPSAwOwogICAgIFdDSEFSKiogYXJn
diA9IENvbW1hbmRMaW5lVG9Bcmd2VyhHZXRDb21tYW5kTGluZVcoKSwgJmFyZ2MpOwpAQCAtODk3
LDEyICs1NjQsOSBAQCBzdGF0aWMgdm9pZCBwYXJzZUNvbW1hbmRMaW5lKGJvb2wmIHVzZXNMYXll
cmVkV2ViVmlldywgYm9vbCYgdXNlRnVsbERlc2t0b3AsIGJvbwogICAgICAgICAgICAgcGFnZUxv
YWRUZXN0aW5nID0gdHJ1ZTsKICAgICAgICAgZWxzZSBpZiAoIXdjc2ljbXAoYXJndltpXSwgTCIt
LWhpZ2hEUEkiKSkKICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBpZ25vcmUKKyAgICAgICAgZWxz
ZSBpZiAoIXdjc2ljbXAoYXJndltpXSwgTCItLXdrMiIpKQorICAgICAgICAgICAgdXNlV0syID0g
dHJ1ZTsKICAgICAgICAgZWxzZSBpZiAoIXJlcXVlc3RlZFVSTCkKICAgICAgICAgICAgIHJlcXVl
c3RlZFVSTCA9IGFyZ3ZbaV07CiAgICAgfQogfQotCi1leHRlcm4gIkMiIF9fZGVjbHNwZWMoZGxs
ZXhwb3J0KSBpbnQgV0lOQVBJIGRsbExhdW5jaGVyRW50cnlQb2ludChISU5TVEFOQ0UgaEluc3Rh
bmNlLCBISU5TVEFOQ0UgaFByZXZJbnN0YW5jZSwgTFBXU1RSIGxwc3RyQ21kTGluZSwgaW50IG5D
bWRTaG93KQotewotICAgIHJldHVybiB3V2luTWFpbihoSW5zdGFuY2UsIGhQcmV2SW5zdGFuY2Us
IGxwc3RyQ21kTGluZSwgbkNtZFNob3cpOwotfQpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dz
ZXIvd2luL0NvbnRlbnRXaW5kb3cuaCBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9Db250ZW50V2lu
ZG93LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNWQ1NGU0YzIyY2NlYWYwYTE0MmU1Y2ZlZGNiMzdiNzNmZWRhNDVl
NwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9Db250ZW50V2luZG93
LmgKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBTb255IEludGVy
YWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUg
PHdpbmRvd3MuaD4KKworY2xhc3MgQ29udGVudFdpbmRvdyB7CitwdWJsaWM6CisgICAgdmlydHVh
bCB+Q29udGVudFdpbmRvdygpIHsgfTsKKworICAgIHZpcnR1YWwgYm9vbCBsb2FkVVJMKGNvbnN0
IHN0ZDo6d3N0cmluZyYgdXJsKSA9IDA7CisgICAgdmlydHVhbCBib29sIGxvYWRIVE1MU3RyaW5n
KGNvbnN0IHN0ZDo6d3N0cmluZyYpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBwcmludCgpID0g
MDsKKworICAgIHZpcnR1YWwgdm9pZCBsYXVuY2hJbnNwZWN0b3IoKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIG5hdmlnYXRlRm9yd2FyZE9yQmFja3dhcmQoYm9vbCBpc0JhY2t3YXJkKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIG5hdmlnYXRlVG9IaXN0b3J5KHVuc2lnbmVkIGhpc3RvcnlFbnRyeSkg
PSAwOworCisgICAgdmlydHVhbCB2b2lkIHNldEFWRm91bmRhdGlvbkVuYWJsZWQoYm9vbCkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBzZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZChib29s
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKGJv
b2wpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RnVsbFNjcmVlbkVuYWJsZWQoYm9vbCkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBzZXRKYXZhU2NyaXB0RW5hYmxlZChib29sKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHNldExvYWRzSW1hZ2VzQXV0b21hdGljYWxseShib29sKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHNldExvY2FsRmlsZVJlc3RyaWN0aW9uc0VuYWJsZWQoYm9vbCkgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRTaG91bGRJbnZlcnRDb2xvcnMoYm9vbCkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBzZXRTaG93Q29tcG9zaXRpbmdCb3JkZXJzKGJvb2wpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0U2hvd1RpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yKGJvb2wpID0gMDsKKworICAg
IHZpcnR1YWwgYm9vbCBnb0JhY2soKSA9IDA7CisgICAgdmlydHVhbCBib29sIGdvRm9yd2FyZCgp
ID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRVc2VyQWdlbnQoY29uc3Qgc3RkOjp3c3RyaW5n
JiBjdXN0b21VQVN0cmluZykgPSAwOworICAgIHZpcnR1YWwgc3RkOjp3c3RyaW5nIHVzZXJBZ2Vu
dCgpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCByZXNldFpvb20oKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIHpvb21JbigpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgem9vbU91dCgpID0gMDsKKwor
ICAgIHZpcnR1YWwgdm9pZCBzaG93TGF5ZXJUcmVlKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGVTdGF0aXN0aWNzKEhXTkQgaERsZykgPSAwOworCisgICAgdmlydHVhbCBIV05EIGh3bmQo
KSA9IDA7Cit9OwpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvd2luL01pbmlCcm93c2Vy
LmNwcCBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9NaW5pQnJvd3Nlci5jcHAKaW5kZXggZmZiYzk4
ZjgxNDBmOWRhZjU0MTMyZTMzNjAyNjQ0NTFhMmUzMWNlNS4uMjBhYjIyZTRjODc1MzQ3MWM0Zjc1
ZTAzNmFiZjQ3OTVkNmNlNWE0NiAxMDA2NDQKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIvd2luL01p
bmlCcm93c2VyLmNwcAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci93aW4vTWluaUJyb3dzZXIuY3Bw
CkBAIC0zMSwxMyArMzEsMjAgQEAKIAogI2luY2x1ZGUgIkRPTURlZmF1bHRJbXBsLmgiCiAjaW5j
bHVkZSAiTWluaUJyb3dzZXJMaWJSZXNvdXJjZS5oIgotI2luY2x1ZGUgIk1pbmlCcm93c2VyUmVw
bGFjZS5oIgorI2luY2x1ZGUgIk1pbmlCcm93c2VyV2ViSG9zdC5oIgorI2luY2x1ZGUgIlByaW50
V2ViVUlEZWxlZ2F0ZS5oIgorI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlEZWxlZ2F0ZS5oIgorI2lu
Y2x1ZGUgIlJlc291cmNlTG9hZERlbGVnYXRlLmgiCisjaW5jbHVkZSAiV2ViRG93bmxvYWREZWxl
Z2F0ZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ09NUHRyLmg+CiAjaW5jbHVkZSA8V2ViS2l0TGVn
YWN5L1dlYktpdENPTUFQSS5oPgogI2luY2x1ZGUgPHd0Zi9FeHBvcnRNYWNyb3MuaD4KICNpbmNs
dWRlIDx3dGYvUGxhdGZvcm0uaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAog
I2lmIFVTRShDRikKICNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9DRlJ1bkxvb3AuaD4KKyNpbmNs
dWRlIDxXZWJLaXRMZWdhY3kvQ0ZEaWN0aW9uYXJ5UHJvcGVydHlCYWcuaD4KICNlbmRpZgogCiAj
aW5jbHVkZSA8YWxnb3JpdGhtPgpAQCAtNDcsMTAgKzU0LDMxIEBACiAjaW5jbHVkZSA8c3RyaW5n
PgogI2luY2x1ZGUgPHZlY3Rvcj4KIAorZXh0ZXJuIFBPSU5UIHNfd2luZG93UG9zaXRpb247Citl
eHRlcm4gU0laRSBzX3dpbmRvd1NpemU7CisKK2Jvb2wgZ2V0QXBwRGF0YUZvbGRlcihfYnN0cl90
JiBkaXJlY3RvcnkpOworCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBmbG9hdCBkZXZpY2VTY2FsZUZh
Y3RvckZvcldpbmRvdyhIV05EKTsKIH0KIAorYm9vbCBNaW5pQnJvd3Nlcjo6c2V0Q2FjaGVGb2xk
ZXIoKQoreworICAgIElXZWJDYWNoZVB0ciB3ZWJDYWNoZSA9IHRoaXMtPndlYkNhY2hlKCk7Cisg
ICAgaWYgKCF3ZWJDYWNoZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgX2JzdHJfdCBh
cHBEYXRhRm9sZGVyOworICAgIGlmICghZ2V0QXBwRGF0YUZvbGRlcihhcHBEYXRhRm9sZGVyKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXBwRGF0YUZvbGRlciArPSBMIlxcY2FjaGUi
OworICAgIHdlYkNhY2hlLT5zZXRDYWNoZUZvbGRlcihhcHBEYXRhRm9sZGVyKTsKKworICAgIHJl
dHVybiB0cnVlOworfQorCiBzdGF0aWMgY29uc3QgaW50IG1heEhpc3RvcnlTaXplID0gMTA7CiAK
IHR5cGVkZWYgX2NvbV9wdHJfdDxfY29tX0lJSUQ8SVdlYk11dGFibGVVUkxSZXF1ZXN0LCAmX191
dWlkb2YoSVdlYk11dGFibGVVUkxSZXF1ZXN0KT4+IElXZWJNdXRhYmxlVVJMUmVxdWVzdFB0cjsK
QEAgLTYxLDEyICs4OSw2NyBAQCBNaW5pQnJvd3Nlcjo6TWluaUJyb3dzZXIoSFdORCBtYWluV25k
LCBIV05EIHVybEJhclduZCwgYm9vbCB1c2VMYXllcmVkV2ViVmlldywgYgogICAgICwgbV91c2VM
YXllcmVkV2ViVmlldyh1c2VMYXllcmVkV2ViVmlldykKICAgICAsIG1fcGFnZUxvYWRUZXN0Q2xp
ZW50KHN0ZDo6bWFrZV91bmlxdWU8UGFnZUxvYWRUZXN0Q2xpZW50Pih0aGlzLCBwYWdlTG9hZFRl
c3RpbmcpKQogeworICAgIElXZWJEb3dubG9hZERlbGVnYXRlUHRyIGRvd25sb2FkRGVsZWdhdGU7
CisKKyAgICBpZiAoIXNlZWRJbml0aWFsRGVmYXVsdFByZWZlcmVuY2VzKCkpCisgICAgICAgIGdv
dG8gZXhpdDsKKworICAgIGlmICghc2V0VG9EZWZhdWx0UHJlZmVyZW5jZXMoKSkKKyAgICAgICAg
Z290byBleGl0OworCisgICAgSFJFU1VMVCBociA9IGluaXQoKTsKKyAgICBpZiAoRkFJTEVEKGhy
KSkKKyAgICAgICAgZ290byBleGl0OworCisgICAgaWYgKCFzZXRDYWNoZUZvbGRlcigpKQorICAg
ICAgICBnb3RvIGV4aXQ7CisKKyAgICBhdXRvIHdlYkhvc3QgPSBuZXcgTWluaUJyb3dzZXJXZWJI
b3N0KHRoaXMsIG1faFVSTEJhclduZCk7CisKKyAgICBociA9IHNldEZyYW1lTG9hZERlbGVnYXRl
KHdlYkhvc3QpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICBnb3RvIGV4aXQ7CisKKyAg
ICBociA9IHNldEZyYW1lTG9hZERlbGVnYXRlUHJpdmF0ZSh3ZWJIb3N0KTsKKyAgICBpZiAoRkFJ
TEVEKGhyKSkKKyAgICAgICAgZ290byBleGl0OworCisgICAgaHIgPSBzZXRVSURlbGVnYXRlKG5l
dyBQcmludFdlYlVJRGVsZWdhdGUoKSk7CisgICAgaWYgKEZBSUxFRCAoaHIpKQorICAgICAgICBn
b3RvIGV4aXQ7CisKKyAgICBociA9IHNldEFjY2Vzc2liaWxpdHlEZWxlZ2F0ZShuZXcgQWNjZXNz
aWJpbGl0eURlbGVnYXRlKCkpOworICAgIGlmIChGQUlMRUQgKGhyKSkKKyAgICAgICAgZ290byBl
eGl0OworCisgICAgaHIgPSBzZXRSZXNvdXJjZUxvYWREZWxlZ2F0ZShuZXcgUmVzb3VyY2VMb2Fk
RGVsZWdhdGUodGhpcykpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICBnb3RvIGV4aXQ7
CisKKyAgICBkb3dubG9hZERlbGVnYXRlLkF0dGFjaChuZXcgV2ViRG93bmxvYWREZWxlZ2F0ZSgp
KTsKKyAgICBociA9IHNldERvd25sb2FkRGVsZWdhdGUoZG93bmxvYWREZWxlZ2F0ZSk7CisgICAg
aWYgKEZBSUxFRChocikpCisgICAgICAgIGdvdG8gZXhpdDsKKworICAgIFJFQ1QgY2xpZW50UmVj
dDsKKyAgICA6OkdldENsaWVudFJlY3QobV9oTWFpblduZCwgJmNsaWVudFJlY3QpOworCisgICAg
aWYgKHVzZXNMYXllcmVkV2ViVmlldygpKQorICAgICAgICBjbGllbnRSZWN0ID0geyBzX3dpbmRv
d1Bvc2l0aW9uLngsIHNfd2luZG93UG9zaXRpb24ueSwgc193aW5kb3dQb3NpdGlvbi54ICsgc193
aW5kb3dTaXplLmN4LCBzX3dpbmRvd1Bvc2l0aW9uLnkgKyBzX3dpbmRvd1NpemUuY3kgfTsKKwor
ICAgIGhyID0gcHJlcGFyZVZpZXdzKG1faE1haW5XbmQsIGNsaWVudFJlY3QsIG1fdmlld1duZCk7
CisgICAgaWYgKEZBSUxFRChocikgfHwgIW1fdmlld1duZCkKKyAgICAgICAgZ290byBleGl0Owor
CisgICAgaWYgKHVzZXNMYXllcmVkV2ViVmlldygpKQorICAgICAgICBzdWJjbGFzc0ZvckxheWVy
ZWRXaW5kb3coKTsKKworZXhpdDoKKyAgICByZXR1cm47CiB9CiAKIEhSRVNVTFQgTWluaUJyb3dz
ZXI6OmluaXQoKQogewotICAgIHVwZGF0ZURldmljZVNjYWxlRmFjdG9yKCk7Ci0KICAgICBIUkVT
VUxUIGhyID0gV2ViS2l0Q3JlYXRlSW5zdGFuY2UoQ0xTSURfV2ViVmlldywgMCwgSUlEX0lXZWJW
aWV3LCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJm1fd2ViVmlldy5HZXRJbnRlcmZhY2VQdHIo
KSkpOwogICAgIGlmIChGQUlMRUQoaHIpKQogICAgICAgICByZXR1cm4gaHI7CkBAIC04OCw3ICsx
NzEsNyBAQCBIUkVTVUxUIE1pbmlCcm93c2VyOjppbml0KCkKICAgICByZXR1cm4gaHI7CiB9CiAK
LUhSRVNVTFQgTWluaUJyb3dzZXI6OnByZXBhcmVWaWV3cyhIV05EIG1haW5XbmQsIGNvbnN0IFJF
Q1QmIGNsaWVudFJlY3QsIGNvbnN0IEJTVFImIHJlcXVlc3RlZFVSTCwgSFdORCYgdmlld0h3bmQp
CitIUkVTVUxUIE1pbmlCcm93c2VyOjpwcmVwYXJlVmlld3MoSFdORCBtYWluV25kLCBjb25zdCBS
RUNUJiBjbGllbnRSZWN0LCBIV05EJiB2aWV3SHduZCkKIHsKICAgICBpZiAoIW1fd2ViVmlldykK
ICAgICAgICAgcmV0dXJuIEVfRkFJTDsKQEAgLTEwMSwxNSArMTg0LDYgQEAgSFJFU1VMVCBNaW5p
QnJvd3Nlcjo6cHJlcGFyZVZpZXdzKEhXTkQgbWFpblduZCwgY29uc3QgUkVDVCYgY2xpZW50UmVj
dCwgY29uc3QgQlMKICAgICBpZiAoRkFJTEVEKGhyKSkKICAgICAgICAgcmV0dXJuIGhyOwogCi0g
ICAgaWYgKCFyZXF1ZXN0ZWRVUkwpIHsKLSAgICAgICAgSVdlYkZyYW1lUHRyIGZyYW1lOwotICAg
ICAgICBociA9IG1fd2ViVmlldy0+bWFpbkZyYW1lKCZmcmFtZS5HZXRJbnRlcmZhY2VQdHIoKSk7
Ci0gICAgICAgIGlmIChGQUlMRUQoaHIpKQotICAgICAgICAgICAgcmV0dXJuIGhyOwotCi0gICAg
ICAgIGZyYW1lLT5sb2FkSFRNTFN0cmluZyhfYnN0cl90KGRlZmF1bHRIVE1MKS5HZXRCU1RSKCks
IDApOwotICAgIH0KLQogICAgIGhyID0gbV93ZWJWaWV3UHJpdmF0ZS0+c2V0VHJhbnNwYXJlbnQo
bV91c2VMYXllcmVkV2ViVmlldyk7CiAgICAgaWYgKEZBSUxFRChocikpCiAgICAgICAgIHJldHVy
biBocjsKQEAgLTEyMyw2ICsxOTcsMTcgQEAgSFJFU1VMVCBNaW5pQnJvd3Nlcjo6cHJlcGFyZVZp
ZXdzKEhXTkQgbWFpblduZCwgY29uc3QgUkVDVCYgY2xpZW50UmVjdCwgY29uc3QgQlMKICAgICBy
ZXR1cm4gaHI7CiB9CiAKK2Jvb2wgTWluaUJyb3dzZXI6OmxvYWRIVE1MU3RyaW5nKGNvbnN0IHN0
ZDo6d3N0cmluZyYgc3RyKQoreworICAgIElXZWJGcmFtZVB0ciBmcmFtZTsKKyAgICBIUkVTVUxU
IGhyID0gbV93ZWJWaWV3LT5tYWluRnJhbWUoJmZyYW1lLkdldEludGVyZmFjZVB0cigpKTsKKyAg
ICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZnJhbWUtPmxv
YWRIVE1MU3RyaW5nKF9ic3RyX3Qoc3RyLmNfc3RyKCkpLkdldEJTVFIoKSwgMCk7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKIEhSRVNVTFQgTWluaUJyb3dzZXI6OnNldEZyYW1lTG9hZERlbGVnYXRl
KElXZWJGcmFtZUxvYWREZWxlZ2F0ZSogZnJhbWVMb2FkRGVsZWdhdGUpCiB7CiAgICAgbV9mcmFt
ZUxvYWREZWxlZ2F0ZSA9IGZyYW1lTG9hZERlbGVnYXRlOwpAQCAtMzA5LDI0ICszOTQsMjMgQEAg
dm9pZCBNaW5pQnJvd3Nlcjo6bGF1bmNoSW5zcGVjdG9yKCkKICAgICBtX2luc3BlY3Rvci0+c2hv
dygpOwogfQogCi12b2lkIE1pbmlCcm93c2VyOjpuYXZpZ2F0ZUZvcndhcmRPckJhY2t3YXJkKEhX
TkQgaFduZCwgVUlOVCBtZW51SUQpCit2b2lkIE1pbmlCcm93c2VyOjpuYXZpZ2F0ZUZvcndhcmRP
ckJhY2t3YXJkKGJvb2wgaXNCYWNrd2FyZCkKIHsKICAgICBpZiAoIW1fd2ViVmlldykKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgQk9PTCB3ZW50QmFja09yRm9yd2FyZCA9IEZBTFNFOwotICAgIGlm
IChJRE1fSElTVE9SWV9GT1JXQVJEID09IG1lbnVJRCkKKyAgICBpZiAoIWlzQmFja3dhcmQpCiAg
ICAgICAgIG1fd2ViVmlldy0+Z29Gb3J3YXJkKCZ3ZW50QmFja09yRm9yd2FyZCk7CiAgICAgZWxz
ZQogICAgICAgICBtX3dlYlZpZXctPmdvQmFjaygmd2VudEJhY2tPckZvcndhcmQpOwogfQogCi12
b2lkIE1pbmlCcm93c2VyOjpuYXZpZ2F0ZVRvSGlzdG9yeShIV05EIGhXbmQsIFVJTlQgbWVudUlE
KQordm9pZCBNaW5pQnJvd3Nlcjo6bmF2aWdhdGVUb0hpc3RvcnkodW5zaWduZWQgaGlzdG9yeUVu
dHJ5KQogewogICAgIGlmICghbV93ZWJWaWV3KQogICAgICAgICByZXR1cm47CiAKLSAgICBpbnQg
aGlzdG9yeUVudHJ5ID0gbWVudUlEIC0gSURNX0hJU1RPUllfTElOSzA7CiAgICAgaWYgKGhpc3Rv
cnlFbnRyeSA+IG1faGlzdG9yeUl0ZW1zLnNpemUoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0z
NTcsOSArNDQxLDkgQEAgYm9vbCBNaW5pQnJvd3Nlcjo6Z29Gb3J3YXJkKCkKICAgICByZXR1cm4g
d2VudEZvcndhcmQ7CiB9CiAKLUhSRVNVTFQgTWluaUJyb3dzZXI6OmxvYWRVUkwoY29uc3QgQlNU
UiYgcGFzc2VkVVJMKQorYm9vbCBNaW5pQnJvd3Nlcjo6bG9hZFVSTChjb25zdCBzdGQ6OndzdHJp
bmcmIHVybCkKIHsKLSAgICBfYnN0cl90IHVybEJTdHIocGFzc2VkVVJMKTsKKyAgICBfYnN0cl90
IHVybEJTdHIodXJsLmNfc3RyKCkpOwogICAgIGlmICghIXVybEJTdHIgJiYgKDo6UGF0aEZpbGVF
eGlzdHModXJsQlN0cikgfHwgOjpQYXRoSXNVTkModXJsQlN0cikpKSB7CiAgICAgICAgIFRDSEFS
IGZpbGVVUkxbSU5URVJORVRfTUFYX1VSTF9MRU5HVEhdOwogICAgICAgICBEV09SRCBmaWxlVVJM
TGVuZ3RoID0gc2l6ZW9mKGZpbGVVUkwpIC8gc2l6ZW9mKGZpbGVVUkxbMF0pOwpAQCAtMzcxLDI4
ICs0NTUsMjUgQEAgSFJFU1VMVCBNaW5pQnJvd3Nlcjo6bG9hZFVSTChjb25zdCBCU1RSJiBwYXNz
ZWRVUkwpCiAgICAgSVdlYkZyYW1lUHRyIGZyYW1lOwogICAgIEhSRVNVTFQgaHIgPSBtX3dlYlZp
ZXctPm1haW5GcmFtZSgmZnJhbWUuR2V0SW50ZXJmYWNlUHRyKCkpOwogICAgIGlmIChGQUlMRUQo
aHIpKQotICAgICAgICByZXR1cm4gaHI7Ci0KLSAgICBpZiAoIXBhc3NlZFVSTCkKLSAgICAgICAg
cmV0dXJuIGZyYW1lLT5sb2FkSFRNTFN0cmluZyhfYnN0cl90KGRlZmF1bHRIVE1MKS5HZXRCU1RS
KCksIDApOworICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBJV2ViTXV0YWJsZVVSTFJlcXVl
c3RQdHIgcmVxdWVzdDsKICAgICBociA9IFdlYktpdENyZWF0ZUluc3RhbmNlKENMU0lEX1dlYk11
dGFibGVVUkxSZXF1ZXN0LCAwLCBJSURfSVdlYk11dGFibGVVUkxSZXF1ZXN0LCAodm9pZCoqKSZy
ZXF1ZXN0KTsKICAgICBpZiAoRkFJTEVEKGhyKSkKLSAgICAgICAgcmV0dXJuIGhyOworICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICBociA9IHJlcXVlc3QtPmluaXRXaXRoVVJMKHdjc3N0cihz
dGF0aWNfY2FzdDx3Y2hhcl90Kj4odXJsQlN0ciksIEwiOi8vIikgPyB1cmxCU3RyIDogX2JzdHJf
dChMImh0dHA6Ly8iKSArIHVybEJTdHIsIFdlYlVSTFJlcXVlc3RVc2VQcm90b2NvbENhY2hlUG9s
aWN5LCA2MCk7CiAgICAgaWYgKEZBSUxFRChocikpCi0gICAgICAgIHJldHVybiBocjsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgX2JzdHJfdCBtZXRob2RCU3RyKEwiR0VUIik7CiAgICAg
aHIgPSByZXF1ZXN0LT5zZXRIVFRQTWV0aG9kKG1ldGhvZEJTdHIpOwogICAgIGlmIChGQUlMRUQo
aHIpKQotICAgICAgICByZXR1cm4gaHI7CisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGhy
ID0gZnJhbWUtPmxvYWRSZXF1ZXN0KHJlcXVlc3QpOwogCi0gICAgcmV0dXJuIGhyOworICAgIHJl
dHVybiB0cnVlOwogfQogCiB2b2lkIE1pbmlCcm93c2VyOjpleGl0UHJvZ3JhbSgpCkBAIC00MDAs
NjEgKzQ4MSwyMSBAQCB2b2lkIE1pbmlCcm93c2VyOjpleGl0UHJvZ3JhbSgpCiAgICAgOjpQb3N0
TWVzc2FnZShtX2hNYWluV25kLCBzdGF0aWNfY2FzdDxVSU5UPihXTV9DT01NQU5EKSwgTUFLRUxQ
QVJBTShJRE1fRVhJVCwgMCksIDApOwogfQogCi12b2lkIE1pbmlCcm93c2VyOjpzZXRVc2VyQWdl
bnQoVUlOVCBtZW51SUQpCit2b2lkIE1pbmlCcm93c2VyOjpzZXRVc2VyQWdlbnQoY29uc3Qgc3Rk
Ojp3c3RyaW5nJiBjdXN0b21Vc2VyQWdlbnQpCiB7Ci0gICAgaWYgKCF3ZWJWaWV3KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIF9ic3RyX3QgY3VzdG9tVXNlckFnZW50OwotICAgIHN3aXRjaCAo
bWVudUlEKSB7Ci0gICAgY2FzZSBJRE1fVUFfREVGQVVMVDoKLSAgICAgICAgLy8gU2V0IHRvIG51
bGwgdXNlciBhZ2VudAotICAgICAgICBicmVhazsKLSAgICBjYXNlIElETV9VQV9TQUZBUklfOF8w
OgotICAgICAgICBjdXN0b21Vc2VyQWdlbnQgPSBMIk1vemlsbGEvNS4wIChNYWNpbnRvc2g7IElu
dGVsIE1hYyBPUyBYIDEwXzEwKSBBcHBsZVdlYktpdC82MDAuMS4yNSAoS0hUTUwsIGxpa2UgR2Vj
a28pIFZlcnNpb24vOC4wIFNhZmFyaS82MDAuMS4yNSI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSURNX1VBX1NBRkFSSV9JT1NfOF9JUEhPTkU6Ci0gICAgICAgIGN1c3RvbVVzZXJBZ2VudCA9
IEwiTW96aWxsYS81LjAgKGlQaG9uZTsgQ1BVIE9TIDhfMSBsaWtlIE1hYyBPUyBYKSBBcHBsZVdl
YktpdC82MDEuMS40IChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvbi84LjAgTW9iaWxlLzEyQjQw
MyBTYWZhcmkvNjAwLjEuNCI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSURNX1VBX1NBRkFS
SV9JT1NfOF9JUEFEOgotICAgICAgICBjdXN0b21Vc2VyQWdlbnQgPSBMIk1vemlsbGEvNS4wIChp
UGFkOyBDUFUgT1MgOF8xIGxpa2UgTWFjIE9TIFgpIEFwcGxlV2ViS2l0LzYwMC4xLjQgKEtIVE1M
LCBsaWtlIEdlY2tvKSBWZXJzaW9uLzguMCBNb2JpbGUvMTJCNDAzIFNhZmFyaS82MDAuMS40IjsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJRE1fVUFfSUVfMTE6Ci0gICAgICAgIGN1c3RvbVVz
ZXJBZ2VudCA9IEwiTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgNi4zOyBXT1c2NDsgVHJpZGVudC83
LjA7IHJ2OjExLjApIGxpa2UgR2Vja28iOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIElETV9V
QV9DSFJPTUVfTUFDOgotICAgICAgICBjdXN0b21Vc2VyQWdlbnQgPSBMIk1vemlsbGEvNS4wIChN
YWNpbnRvc2g7IEludGVsIE1hYyBPUyBYIDEwXzhfMykgQXBwbGVXZWJLaXQvNTM3LjMxIChLSFRN
TCwgbGlrZSBHZWNrbykgQ2hyb21lLzI2LjAuMTQxMC42NSBTYWZhcmkvNTM3LjMxIjsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBJRE1fVUFfQ0hST01FX1dJTjoKLSAgICAgICAgY3VzdG9tVXNl
ckFnZW50ID0gTCJNb3ppbGxhLzUuMCAoV2luZG93cyBOVCA2LjI7IFdPVzY0KSBBcHBsZVdlYktp
dC81MzcuMzEgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMjYuMC4xNDEwLjY0IFNhZmFyaS81
MzcuMzEiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIElETV9VQV9GSVJFRk9YX01BQzoKLSAg
ICAgICAgY3VzdG9tVXNlckFnZW50ID0gTCJNb3ppbGxhLzUuMCAoTWFjaW50b3NoOyBJbnRlbCBN
YWMgT1MgWCAxMC44OyBydjoyMC4wKSBHZWNrby8yMDEwMDEwMSBGaXJlZm94LzIwLjAiOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIElETV9VQV9GSVJFRk9YX1dJTjoKLSAgICAgICAgY3VzdG9t
VXNlckFnZW50ID0gTCJNb3ppbGxhLzUuMCAoV2luZG93cyBOVCA2LjI7IFdPVzY0OyBydjoyMC4w
KSBHZWNrby8yMDEwMDEwMSBGaXJlZm94LzIwLjAiOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IElETV9VQV9PVEhFUjoKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlQoMCk7IC8vIFdlIHNo
b3VsZCBuZXZlciBoaXQgdGhpcyBjYXNlCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBz
ZXRVc2VyQWdlbnQoY3VzdG9tVXNlckFnZW50KTsKKyAgICBfYnN0cl90IHM7CisgICAgaWYgKCFj
dXN0b21Vc2VyQWdlbnQuZW1wdHkoKSkKKyAgICAgICAgcyA9IGN1c3RvbVVzZXJBZ2VudC5jX3N0
cigpOworICAgIHdlYlZpZXcoKS0+c2V0Q3VzdG9tVXNlckFnZW50KHMuR2V0QlNUUigpKTsKIH0K
IAotdm9pZCBNaW5pQnJvd3Nlcjo6c2V0VXNlckFnZW50KF9ic3RyX3QmIGN1c3RvbVVzZXJBZ2Vu
dCkKLXsKLSAgICB3ZWJWaWV3KCktPnNldEN1c3RvbVVzZXJBZ2VudChjdXN0b21Vc2VyQWdlbnQu
R2V0QlNUUigpKTsKLX0KLQotX2JzdHJfdCBNaW5pQnJvd3Nlcjo6dXNlckFnZW50KCkKK3N0ZDo6
d3N0cmluZyBNaW5pQnJvd3Nlcjo6dXNlckFnZW50KCkKIHsKICAgICBfYnN0cl90IHVzZXJBZ2Vu
dDsKICAgICBpZiAoRkFJTEVEKHdlYlZpZXcoKS0+Y3VzdG9tVXNlckFnZW50KCZ1c2VyQWdlbnQu
R2V0QlNUUigpKSkpCi0gICAgICAgIHJldHVybiBfYnN0cl90KEwiLSBVbmtub3duIC06IENhbGwg
ZmFpbGVkLiIpOworICAgICAgICByZXR1cm4gTCItIFVua25vd24gLTogQ2FsbCBmYWlsZWQuIjsK
IAotICAgIHJldHVybiB1c2VyQWdlbnQ7CisgICAgcmV0dXJuIHN0ZDo6d3N0cmluZyh1c2VyQWdl
bnQpOwogfQogCiB0eXBlZGVmIF9jb21fcHRyX3Q8X2NvbV9JSUlEPElXZWJJQkFjdGlvbnMsICZf
X3V1aWRvZihJV2ViSUJBY3Rpb25zKT4+IElXZWJJQkFjdGlvbnNQdHI7CkBAIC01MDQsMTggKzU0
NSwzMTkgQEAgdm9pZCBNaW5pQnJvd3Nlcjo6c2hvd0xheWVyVHJlZSgpCiAgICAgT3V0cHV0RGVi
dWdTdHJpbmcoTCJcblxuIik7CiB9CiAKLXZvaWQgTWluaUJyb3dzZXI6OmdlbmVyYXRlRm9udEZv
clNjYWxlRmFjdG9yKGZsb2F0IHNjYWxlRmFjdG9yKQorc3RhdGljIHZvaWQgc2V0V2luZG93VGV4
dChIV05EIGRpYWxvZywgVUlOVCBmaWVsZCwgX2JzdHJfdCB2YWx1ZSkKK3sKKyAgICA6OlNldERs
Z0l0ZW1UZXh0KGRpYWxvZywgZmllbGQsIHZhbHVlKTsKK30KKworc3RhdGljIHZvaWQgc2V0V2lu
ZG93VGV4dChIV05EIGRpYWxvZywgVUlOVCBmaWVsZCwgVUlOVCB2YWx1ZSkKK3sKKyAgICBTdHJp
bmcgdmFsdWVTdHIgPSBXVEY6OlN0cmluZzo6bnVtYmVyKHZhbHVlKTsKKworICAgIHNldFdpbmRv
d1RleHQoZGlhbG9nLCBmaWVsZCwgX2JzdHJfdCh2YWx1ZVN0ci51dGY4KCkuZGF0YSgpKSk7Cit9
CisKK3R5cGVkZWYgX2NvbV9wdHJfdDxfY29tX0lJSUQ8SVByb3BlcnR5QmFnLCAmX191dWlkb2Yo
SVByb3BlcnR5QmFnKT4+IElQcm9wZXJ0eUJhZ1B0cjsKKworc3RhdGljIHZvaWQgc2V0V2luZG93
VGV4dChIV05EIGRpYWxvZywgVUlOVCBmaWVsZCwgSVByb3BlcnR5QmFnUHRyIHN0YXRpc3RpY3Ms
IGNvbnN0IF9ic3RyX3QmIGtleSkKK3sKKyAgICBfdmFyaWFudF90IHZhcjsKKyAgICBWX1ZUKCZ2
YXIpID0gVlRfVUk4OworICAgIGlmIChGQUlMRUQoc3RhdGlzdGljcy0+UmVhZChrZXksICZ2YXIu
R2V0VkFSSUFOVCgpLCBudWxscHRyKSkpCisgICAgICAgIHJldHVybjsKKworICAgIHVuc2lnbmVk
IGxvbmcgbG9uZyB2YWx1ZSA9IFZfVUk4KCZ2YXIpOworICAgIFN0cmluZyB2YWx1ZVN0ciA9IFdU
Rjo6U3RyaW5nOjpudW1iZXIodmFsdWUpOworCisgICAgc2V0V2luZG93VGV4dChkaWFsb2csIGZp
ZWxkLCBfYnN0cl90KHZhbHVlU3RyLnV0ZjgoKS5kYXRhKCkpKTsKK30KKworc3RhdGljIHZvaWQg
c2V0V2luZG93VGV4dChIV05EIGRpYWxvZywgVUlOVCBmaWVsZCwgQ0ZEaWN0aW9uYXJ5UmVmIGRp
Y3Rpb25hcnksIENGU3RyaW5nUmVmIGtleSwgVUlOVCYgdG90YWwpCit7CisgICAgQ0ZOdW1iZXJS
ZWYgY291bnROdW0gPSBzdGF0aWNfY2FzdDxDRk51bWJlclJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFs
dWUoZGljdGlvbmFyeSwga2V5KSk7CisgICAgaWYgKCFjb3VudE51bSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaW50IGNvdW50ID0gMDsKKyAgICBDRk51bWJlckdldFZhbHVlKGNvdW50TnVtLCBr
Q0ZOdW1iZXJJbnRUeXBlLCAmY291bnQpOworCisgICAgc2V0V2luZG93VGV4dChkaWFsb2csIGZp
ZWxkLCBzdGF0aWNfY2FzdDxVSU5UPihjb3VudCkpOworICAgIHRvdGFsICs9IGNvdW50OworfQor
Cit2b2lkIE1pbmlCcm93c2VyOjp1cGRhdGVTdGF0aXN0aWNzKEhXTkQgZGlhbG9nKQoreworICAg
IElXZWJDb3JlU3RhdGlzdGljc1B0ciB3ZWJDb3JlU3RhdGlzdGljcyA9IHRoaXMtPnN0YXRpc3Rp
Y3MoKTsKKyAgICBpZiAoIXdlYkNvcmVTdGF0aXN0aWNzKQorICAgICAgICByZXR1cm47CisKKyAg
ICBJUHJvcGVydHlCYWdQdHIgc3RhdGlzdGljczsKKyAgICBIUkVTVUxUIGhyID0gd2ViQ29yZVN0
YXRpc3RpY3MtPm1lbW9yeVN0YXRpc3RpY3MoJnN0YXRpc3RpY3MuR2V0SW50ZXJmYWNlUHRyKCkp
OworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBGYXN0TWFs
bG9jLgorICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJRENfUkVTRVJWRURfVk0sIHN0YXRpc3Rp
Y3MsICJGYXN0TWFsbG9jUmVzZXJ2ZWRWTUJ5dGVzIik7CisgICAgc2V0V2luZG93VGV4dChkaWFs
b2csIElEQ19DT01NSVRURURfVk0sIHN0YXRpc3RpY3MsICJGYXN0TWFsbG9jQ29tbWl0dGVkVk1C
eXRlcyIpOworICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJRENfRlJFRV9MSVNUX0JZVEVTLCBz
dGF0aXN0aWNzLCAiRmFzdE1hbGxvY0ZyZWVMaXN0Qnl0ZXMiKTsKKworICAgIC8vIFdlYkNvcmUg
Q2FjaGUuCisjaWYgVVNFKENGKQorICAgIElXZWJDYWNoZVB0ciB3ZWJDYWNoZSA9IHRoaXMtPndl
YkNhY2hlKCk7CisKKyAgICBpbnQgZGljdENvdW50ID0gNjsKKyAgICBJUHJvcGVydHlCYWcqIGNh
Y2hlRGljdFs2XSA9IHsgMCB9OworICAgIGlmIChGQUlMRUQod2ViQ2FjaGUtPnN0YXRpc3RpY3Mo
JmRpY3RDb3VudCwgY2FjaGVEaWN0KSkpCisgICAgICAgIHJldHVybjsKKworICAgIENPTVB0cjxD
RkRpY3Rpb25hcnlQcm9wZXJ0eUJhZz4gY291bnRzLCBzaXplcywgbGl2ZVNpemVzLCBkZWNvZGVk
U2l6ZXMsIHB1cmdhYmxlU2l6ZXM7CisgICAgY291bnRzLmFkb3B0UmVmKHJlaW50ZXJwcmV0X2Nh
c3Q8Q0ZEaWN0aW9uYXJ5UHJvcGVydHlCYWcqPihjYWNoZURpY3RbMF0pKTsKKyAgICBzaXplcy5h
ZG9wdFJlZihyZWludGVycHJldF9jYXN0PENGRGljdGlvbmFyeVByb3BlcnR5QmFnKj4oY2FjaGVE
aWN0WzFdKSk7CisgICAgbGl2ZVNpemVzLmFkb3B0UmVmKHJlaW50ZXJwcmV0X2Nhc3Q8Q0ZEaWN0
aW9uYXJ5UHJvcGVydHlCYWcqPihjYWNoZURpY3RbMl0pKTsKKyAgICBkZWNvZGVkU2l6ZXMuYWRv
cHRSZWYocmVpbnRlcnByZXRfY2FzdDxDRkRpY3Rpb25hcnlQcm9wZXJ0eUJhZyo+KGNhY2hlRGlj
dFszXSkpOworICAgIHB1cmdhYmxlU2l6ZXMuYWRvcHRSZWYocmVpbnRlcnByZXRfY2FzdDxDRkRp
Y3Rpb25hcnlQcm9wZXJ0eUJhZyo+KGNhY2hlRGljdFs0XSkpOworCisgICAgc3RhdGljIENGU3Ry
aW5nUmVmIGltYWdlc0tleSA9IENGU1RSKCJpbWFnZXMiKTsKKyAgICBzdGF0aWMgQ0ZTdHJpbmdS
ZWYgc3R5bGVzaGVldHNLZXkgPSBDRlNUUigic3R5bGUgc2hlZXRzIik7CisgICAgc3RhdGljIENG
U3RyaW5nUmVmIHhzbEtleSA9IENGU1RSKCJ4c2wiKTsKKyAgICBzdGF0aWMgQ0ZTdHJpbmdSZWYg
c2NyaXB0c0tleSA9IENGU1RSKCJzY3JpcHRzIik7CisKKyAgICBpZiAoY291bnRzKSB7CisgICAg
ICAgIFVJTlQgdG90YWxPYmplY3RzID0gMDsKKyAgICAgICAgc2V0V2luZG93VGV4dChkaWFsb2cs
IElEQ19JTUFHRVNfT0JKRUNUX0NPVU5ULCBjb3VudHMtPmRpY3Rpb25hcnkoKSwgaW1hZ2VzS2V5
LCB0b3RhbE9iamVjdHMpOworICAgICAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX0NTU19P
QkpFQ1RfQ09VTlQsIGNvdW50cy0+ZGljdGlvbmFyeSgpLCBzdHlsZXNoZWV0c0tleSwgdG90YWxP
YmplY3RzKTsKKyAgICAgICAgc2V0V2luZG93VGV4dChkaWFsb2csIElEQ19YU0xfT0JKRUNUX0NP
VU5ULCBjb3VudHMtPmRpY3Rpb25hcnkoKSwgeHNsS2V5LCB0b3RhbE9iamVjdHMpOworICAgICAg
ICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX0pTQ19PQkpFQ1RfQ09VTlQsIGNvdW50cy0+ZGlj
dGlvbmFyeSgpLCBzY3JpcHRzS2V5LCB0b3RhbE9iamVjdHMpOworICAgICAgICBzZXRXaW5kb3dU
ZXh0KGRpYWxvZywgSURDX1RPVEFMX09CSkVDVF9DT1VOVCwgdG90YWxPYmplY3RzKTsKKyAgICB9
CisKKyAgICBpZiAoc2l6ZXMpIHsKKyAgICAgICAgVUlOVCB0b3RhbEJ5dGVzID0gMDsKKyAgICAg
ICAgc2V0V2luZG93VGV4dChkaWFsb2csIElEQ19JTUFHRVNfQllURVMsIHNpemVzLT5kaWN0aW9u
YXJ5KCksIGltYWdlc0tleSwgdG90YWxCeXRlcyk7CisgICAgICAgIHNldFdpbmRvd1RleHQoZGlh
bG9nLCBJRENfQ1NTX0JZVEVTLCBzaXplcy0+ZGljdGlvbmFyeSgpLCBzdHlsZXNoZWV0c0tleSwg
dG90YWxCeXRlcyk7CisgICAgICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJRENfWFNMX0JZVEVT
LCBzaXplcy0+ZGljdGlvbmFyeSgpLCB4c2xLZXksIHRvdGFsQnl0ZXMpOworICAgICAgICBzZXRX
aW5kb3dUZXh0KGRpYWxvZywgSURDX0pTQ19CWVRFUywgc2l6ZXMtPmRpY3Rpb25hcnkoKSwgc2Ny
aXB0c0tleSwgdG90YWxCeXRlcyk7CisgICAgICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJRENf
VE9UQUxfQllURVMsIHRvdGFsQnl0ZXMpOworICAgIH0KKworICAgIGlmIChsaXZlU2l6ZXMpIHsK
KyAgICAgICAgVUlOVCB0b3RhbExpdmVCeXRlcyA9IDA7CisgICAgICAgIHNldFdpbmRvd1RleHQo
ZGlhbG9nLCBJRENfSU1BR0VTX0xJVkVfQ09VTlQsIGxpdmVTaXplcy0+ZGljdGlvbmFyeSgpLCBp
bWFnZXNLZXksIHRvdGFsTGl2ZUJ5dGVzKTsKKyAgICAgICAgc2V0V2luZG93VGV4dChkaWFsb2cs
IElEQ19DU1NfTElWRV9DT1VOVCwgbGl2ZVNpemVzLT5kaWN0aW9uYXJ5KCksIHN0eWxlc2hlZXRz
S2V5LCB0b3RhbExpdmVCeXRlcyk7CisgICAgICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJRENf
WFNMX0xJVkVfQ09VTlQsIGxpdmVTaXplcy0+ZGljdGlvbmFyeSgpLCB4c2xLZXksIHRvdGFsTGl2
ZUJ5dGVzKTsKKyAgICAgICAgc2V0V2luZG93VGV4dChkaWFsb2csIElEQ19KU0NfTElWRV9DT1VO
VCwgbGl2ZVNpemVzLT5kaWN0aW9uYXJ5KCksIHNjcmlwdHNLZXksIHRvdGFsTGl2ZUJ5dGVzKTsK
KyAgICAgICAgc2V0V2luZG93VGV4dChkaWFsb2csIElEQ19UT1RBTF9MSVZFX0NPVU5ULCB0b3Rh
bExpdmVCeXRlcyk7CisgICAgfQorCisgICAgaWYgKGRlY29kZWRTaXplcykgeworICAgICAgICBV
SU5UIHRvdGFsRGVjb2RlZCA9IDA7CisgICAgICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJRENf
SU1BR0VTX0RFQ09ERURfQ09VTlQsIGRlY29kZWRTaXplcy0+ZGljdGlvbmFyeSgpLCBpbWFnZXNL
ZXksIHRvdGFsRGVjb2RlZCk7CisgICAgICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJRENfQ1NT
X0RFQ09ERURfQ09VTlQsIGRlY29kZWRTaXplcy0+ZGljdGlvbmFyeSgpLCBzdHlsZXNoZWV0c0tl
eSwgdG90YWxEZWNvZGVkKTsKKyAgICAgICAgc2V0V2luZG93VGV4dChkaWFsb2csIElEQ19YU0xf
REVDT0RFRF9DT1VOVCwgZGVjb2RlZFNpemVzLT5kaWN0aW9uYXJ5KCksIHhzbEtleSwgdG90YWxE
ZWNvZGVkKTsKKyAgICAgICAgc2V0V2luZG93VGV4dChkaWFsb2csIElEQ19KU0NfREVDT0RFRF9D
T1VOVCwgZGVjb2RlZFNpemVzLT5kaWN0aW9uYXJ5KCksIHNjcmlwdHNLZXksIHRvdGFsRGVjb2Rl
ZCk7CisgICAgICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJRENfVE9UQUxfREVDT0RFRCwgdG90
YWxEZWNvZGVkKTsKKyAgICB9CisKKyAgICBpZiAocHVyZ2FibGVTaXplcykgeworICAgICAgICBV
SU5UIHRvdGFsUHVyZ2FibGUgPSAwOworICAgICAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURD
X0lNQUdFU19QVVJHRUFCTEVfQ09VTlQsIHB1cmdhYmxlU2l6ZXMtPmRpY3Rpb25hcnkoKSwgaW1h
Z2VzS2V5LCB0b3RhbFB1cmdhYmxlKTsKKyAgICAgICAgc2V0V2luZG93VGV4dChkaWFsb2csIElE
Q19DU1NfUFVSR0VBQkxFX0NPVU5ULCBwdXJnYWJsZVNpemVzLT5kaWN0aW9uYXJ5KCksIHN0eWxl
c2hlZXRzS2V5LCB0b3RhbFB1cmdhYmxlKTsKKyAgICAgICAgc2V0V2luZG93VGV4dChkaWFsb2cs
IElEQ19YU0xfUFVSR0VBQkxFX0NPVU5ULCBwdXJnYWJsZVNpemVzLT5kaWN0aW9uYXJ5KCksIHhz
bEtleSwgdG90YWxQdXJnYWJsZSk7CisgICAgICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJRENf
SlNDX1BVUkdFQUJMRV9DT1VOVCwgcHVyZ2FibGVTaXplcy0+ZGljdGlvbmFyeSgpLCBzY3JpcHRz
S2V5LCB0b3RhbFB1cmdhYmxlKTsKKyAgICAgICAgc2V0V2luZG93VGV4dChkaWFsb2csIElEQ19U
T1RBTF9QVVJHRUFCTEUsIHRvdGFsUHVyZ2FibGUpOworICAgIH0KKyNlbmRpZgorCisgICAgLy8g
SmF2YVNjcmlwdCBIZWFwLgorICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJRENfSlNDX0hFQVBf
U0laRSwgc3RhdGlzdGljcywgIkphdmFTY3JpcHRIZWFwU2l6ZSIpOworICAgIHNldFdpbmRvd1Rl
eHQoZGlhbG9nLCBJRENfSlNDX0hFQVBfRlJFRSwgc3RhdGlzdGljcywgIkphdmFTY3JpcHRGcmVl
U2l6ZSIpOworCisgICAgVUlOVCBjb3VudDsKKyAgICBpZiAoU1VDQ0VFREVEKHdlYkNvcmVTdGF0
aXN0aWNzLT5qYXZhU2NyaXB0T2JqZWN0c0NvdW50KCZjb3VudCkpKQorICAgICAgICBzZXRXaW5k
b3dUZXh0KGRpYWxvZywgSURDX1RPVEFMX0pTQ19IRUFQX09CSkVDVFMsIGNvdW50KTsKKyAgICBp
ZiAoU1VDQ0VFREVEKHdlYkNvcmVTdGF0aXN0aWNzLT5qYXZhU2NyaXB0R2xvYmFsT2JqZWN0c0Nv
dW50KCZjb3VudCkpKQorICAgICAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX0dMT0JBTF9K
U0NfSEVBUF9PQkpFQ1RTLCBjb3VudCk7CisgICAgaWYgKFNVQ0NFRURFRCh3ZWJDb3JlU3RhdGlz
dGljcy0+amF2YVNjcmlwdFByb3RlY3RlZE9iamVjdHNDb3VudCgmY291bnQpKSkKKyAgICAgICAg
c2V0V2luZG93VGV4dChkaWFsb2csIElEQ19QUk9URUNURURfSlNDX0hFQVBfT0JKRUNUUywgY291
bnQpOworCisgICAgLy8gRm9udCBhbmQgR2x5cGggQ2FjaGVzLgorICAgIGlmIChTVUNDRUVERUQo
d2ViQ29yZVN0YXRpc3RpY3MtPmNhY2hlZEZvbnREYXRhQ291bnQoJmNvdW50KSkpCisgICAgICAg
IHNldFdpbmRvd1RleHQoZGlhbG9nLCBJRENfVE9UQUxfRk9OVF9PQkpFQ1RTLCBjb3VudCk7Cisg
ICAgaWYgKFNVQ0NFRURFRCh3ZWJDb3JlU3RhdGlzdGljcy0+Y2FjaGVkRm9udERhdGFJbmFjdGl2
ZUNvdW50KCZjb3VudCkpKQorICAgICAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX0lOQUNU
SVZFX0ZPTlRfT0JKRUNUUywgY291bnQpOworICAgIGlmIChTVUNDRUVERUQod2ViQ29yZVN0YXRp
c3RpY3MtPmdseXBoUGFnZUNvdW50KCZjb3VudCkpKQorICAgICAgICBzZXRXaW5kb3dUZXh0KGRp
YWxvZywgSURDX0dMWVBIX1BBR0VTLCBjb3VudCk7CisKKyAgICAvLyBTaXRlIEljb24gRGF0YWJh
c2UuCisgICAgaWYgKFNVQ0NFRURFRCh3ZWJDb3JlU3RhdGlzdGljcy0+aWNvblBhZ2VVUkxNYXBw
aW5nQ291bnQoJmNvdW50KSkpCisgICAgICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJRENfUEFH
RV9VUkxfTUFQUElOR1MsIGNvdW50KTsKKyAgICBpZiAoU1VDQ0VFREVEKHdlYkNvcmVTdGF0aXN0
aWNzLT5pY29uUmV0YWluZWRQYWdlVVJMQ291bnQoJmNvdW50KSkpCisgICAgICAgIHNldFdpbmRv
d1RleHQoZGlhbG9nLCBJRENfUkVUQUlORURfUEFHRV9VUkxTLCBjb3VudCk7CisgICAgaWYgKFNV
Q0NFRURFRCh3ZWJDb3JlU3RhdGlzdGljcy0+aWNvblJlY29yZENvdW50KCZjb3VudCkpKQorICAg
ICAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX1NJVEVfSUNPTl9SRUNPUkRTLCBjb3VudCk7
CisgICAgaWYgKFNVQ0NFRURFRCh3ZWJDb3JlU3RhdGlzdGljcy0+aWNvbnNXaXRoRGF0YUNvdW50
KCZjb3VudCkpKQorICAgICAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX1NJVEVfSUNPTlNf
V0lUSF9EQVRBLCBjb3VudCk7Cit9CisKK3N0YXRpYyBCT09MIENBTExCQUNLIEFib3J0UHJvYyhI
REMgaERDLCBpbnQgRXJyb3IpCit7CisgICAgTVNHIG1zZzsKKyAgICB3aGlsZSAoOjpQZWVrTWVz
c2FnZSgmbXNnLCAwLCAwLCAwLCBQTV9SRU1PVkUpKSB7CisgICAgICAgIDo6VHJhbnNsYXRlTWVz
c2FnZSgmbXNnKTsKKyAgICAgICAgOjpEaXNwYXRjaE1lc3NhZ2UoJm1zZyk7CisgICAgfQorCisg
ICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBIREMgZ2V0UHJpbnRlckRDKCkKK3sKKyAgICBQ
UklOVERMRyBwZGxnOworICAgIG1lbXNldCgmcGRsZywgMCwgc2l6ZW9mKFBSSU5URExHKSk7Cisg
ICAgcGRsZy5sU3RydWN0U2l6ZSA9IHNpemVvZihQUklOVERMRyk7CisgICAgcGRsZy5GbGFncyA9
IFBEX1BSSU5UU0VUVVAgfCBQRF9SRVRVUk5EQzsKKworICAgIDo6UHJpbnREbGcoJnBkbGcpOwor
CisgICAgcmV0dXJuIHBkbGcuaERDOworfQorCitzdGF0aWMgdm9pZCBpbml0RG9jU3RydWN0KERP
Q0lORk8qIGRpLCBUQ0hBUiogZG9jbmFtZSkKK3sKKyAgICBtZW1zZXQoZGksIDAsIHNpemVvZihE
T0NJTkZPKSk7CisgICAgZGktPmNiU2l6ZSA9IHNpemVvZihET0NJTkZPKTsKKyAgICBkaS0+bHBz
ekRvY05hbWUgPSBkb2NuYW1lOworfQorCit0eXBlZGVmIF9jb21fcHRyX3Q8X2NvbV9JSUlEPElX
ZWJGcmFtZVByaXZhdGUsICZfX3V1aWRvZihJV2ViRnJhbWVQcml2YXRlKT4+IElXZWJGcmFtZVBy
aXZhdGVQdHI7CisKK3ZvaWQgTWluaUJyb3dzZXI6OnByaW50KCkKK3sKKyAgICBIREMgcHJpbnRE
QyA9IGdldFByaW50ZXJEQygpOworICAgIGlmICghcHJpbnREQykgeworICAgICAgICA6Ok1lc3Nh
Z2VCb3hXKDAsIEwiRXJyb3IgY3JlYXRpbmcgcHJpbnRpbmcgREMiLCBMIkVycm9yIiwgTUJfQVBQ
TE1PREFMIHwgTUJfT0spOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKDo6U2V0
QWJvcnRQcm9jKHByaW50REMsIEFib3J0UHJvYykgPT0gU1BfRVJST1IpIHsKKyAgICAgICAgOjpN
ZXNzYWdlQm94VygwLCBMIkVycm9yIHNldHRpbmcgdXAgQWJvcnRQcm9jIiwgTCJFcnJvciIsIE1C
X0FQUExNT0RBTCB8IE1CX09LKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIElXZWJG
cmFtZVB0ciBmcmFtZSA9IG1haW5GcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJl
dHVybjsKKworICAgIElXZWJGcmFtZVByaXZhdGVQdHIgZnJhbWVQcml2YXRlOworICAgIGlmIChG
QUlMRUQoZnJhbWUtPlF1ZXJ5SW50ZXJmYWNlKCZmcmFtZVByaXZhdGUuR2V0SW50ZXJmYWNlUHRy
KCkpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZnJhbWVQcml2YXRlLT5zZXRJblByaW50aW5n
TW9kZShUUlVFLCBwcmludERDKTsKKworICAgIFVJTlQgcGFnZUNvdW50ID0gMDsKKyAgICBmcmFt
ZVByaXZhdGUtPmdldFByaW50ZWRQYWdlQ291bnQocHJpbnREQywgJnBhZ2VDb3VudCk7CisKKyAg
ICBET0NJTkZPIGRpOworICAgIGluaXREb2NTdHJ1Y3QoJmRpLCBMIldlYktpdCBEb2MiKTsKKyAg
ICA6OlN0YXJ0RG9jKHByaW50REMsICZkaSk7CisKKyAgICAvLyBGSVhNRTogTmVlZCBDb3JlR3Jh
cGhpY3MgaW1wbGVtZW50YXRpb24KKyAgICB2b2lkKiBncmFwaGljc0NvbnRleHQgPSAwOworICAg
IGZvciAoc2l6ZV90IHBhZ2UgPSAxOyBwYWdlIDw9IHBhZ2VDb3VudDsgKytwYWdlKSB7CisgICAg
ICAgIDo6U3RhcnRQYWdlKHByaW50REMpOworICAgICAgICBmcmFtZVByaXZhdGUtPnNwb29sUGFn
ZXMocHJpbnREQywgcGFnZSwgcGFnZSwgZ3JhcGhpY3NDb250ZXh0KTsKKyAgICAgICAgOjpFbmRQ
YWdlKHByaW50REMpOworICAgIH0KKworICAgIGZyYW1lUHJpdmF0ZS0+c2V0SW5QcmludGluZ01v
ZGUoRkFMU0UsIHByaW50REMpOworCisgICAgOjpFbmREb2MocHJpbnREQyk7CisgICAgOjpEZWxl
dGVEQyhwcmludERDKTsKK30KKwordm9pZCBNaW5pQnJvd3Nlcjo6c2V0QVZGb3VuZGF0aW9uRW5h
YmxlZChib29sIGVuYWJsZWQpCit7CisgICAgc3RhbmRhcmRQcmVmZXJlbmNlcygpLT5zZXRBVkZv
dW5kYXRpb25FbmFibGVkKGVuYWJsZWQpOworfQorCit2b2lkIE1pbmlCcm93c2VyOjpzZXRBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZChib29sIGVuYWJsZWQpCiB7Ci0gICAgaWYgKG1faFVS
TEJhckZvbnQpCi0gICAgICAgIDo6RGVsZXRlT2JqZWN0KG1faFVSTEJhckZvbnQpOworICAgIHBy
aXZhdGVQcmVmZXJlbmNlcygpLT5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZChlbmFi
bGVkKTsKK30KIAotICAgIG1faFVSTEJhckZvbnQgPSA6OkNyZWF0ZUZvbnQoc2NhbGVGYWN0b3Ig
KiAxOCwgMCwgMCwgMCwgRldfTk9STUFMLCBGQUxTRSwgRkFMU0UsIEZBTFNFLCBERUZBVUxUX0NI
QVJTRVQsCi0gICAgICAgIE9VVF9UVF9PTkxZX1BSRUNJUywgQ0xJUF9ERUZBVUxUX1BSRUNJUywg
QU5USUFMSUFTRURfUVVBTElUWSwgRkZfRE9OVENBUkUsIEwiVGltZXMgTmV3IFJvbWFuIik7Cit2
b2lkIE1pbmlCcm93c2VyOjpzZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZChib29sIGVuYWJs
ZWQpCit7CisgICAgcHJpdmF0ZVByZWZlcmVuY2VzKCktPnNldEF1dGhvckFuZFVzZXJTdHlsZXNF
bmFibGVkKGVuYWJsZWQpOwogfQogCit2b2lkIE1pbmlCcm93c2VyOjpzZXRGdWxsU2NyZWVuRW5h
YmxlZChib29sIGVuYWJsZWQpCit7CisgICAgcHJpdmF0ZVByZWZlcmVuY2VzKCktPnNldEZ1bGxT
Y3JlZW5FbmFibGVkKGVuYWJsZWQpOworfQorCit2b2lkIE1pbmlCcm93c2VyOjpzZXRKYXZhU2Ny
aXB0RW5hYmxlZChib29sIGVuYWJsZWQpCit7CisgICAgc3RhbmRhcmRQcmVmZXJlbmNlcygpLT5z
ZXRKYXZhU2NyaXB0RW5hYmxlZChlbmFibGVkKTsKK30KIAotdm9pZCBNaW5pQnJvd3Nlcjo6dXBk
YXRlRGV2aWNlU2NhbGVGYWN0b3IoKQordm9pZCBNaW5pQnJvd3Nlcjo6c2V0TG9hZHNJbWFnZXNB
dXRvbWF0aWNhbGx5KGJvb2wgZW5hYmxlZCkKIHsKLSAgICBtX2RldmljZVNjYWxlRmFjdG9yID0g
V2ViQ29yZTo6ZGV2aWNlU2NhbGVGYWN0b3JGb3JXaW5kb3cobV9oTWFpblduZCk7Ci0gICAgZ2Vu
ZXJhdGVGb250Rm9yU2NhbGVGYWN0b3IobV9kZXZpY2VTY2FsZUZhY3Rvcik7CisgICAgc3RhbmRh
cmRQcmVmZXJlbmNlcygpLT5zZXRMb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkoZW5hYmxlZCk7Cit9
CisKK3ZvaWQgTWluaUJyb3dzZXI6OnNldExvY2FsRmlsZVJlc3RyaWN0aW9uc0VuYWJsZWQoYm9v
bCBlbmFibGVkKQoreworICAgIHByaXZhdGVQcmVmZXJlbmNlcygpLT5zZXRBbGxvd1VuaXZlcnNh
bEFjY2Vzc0Zyb21GaWxlVVJMcyghZW5hYmxlZCk7CisgICAgcHJpdmF0ZVByZWZlcmVuY2VzKCkt
PnNldEFsbG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyghZW5hYmxlZCk7Cit9CisKK3ZvaWQgTWlu
aUJyb3dzZXI6OnNldFNob3VsZEludmVydENvbG9ycyhib29sIGVuYWJsZWQpCit7CisgICAgcHJp
dmF0ZVByZWZlcmVuY2VzKCktPnNldFNob3VsZEludmVydENvbG9ycyhlbmFibGVkKTsKK30KKwor
dm9pZCBNaW5pQnJvd3Nlcjo6c2V0U2hvd0NvbXBvc2l0aW5nQm9yZGVycyhib29sIGVuYWJsZWQp
Cit7CisgICAgcHJpdmF0ZVByZWZlcmVuY2VzKCktPnNldFNob3dEZWJ1Z0JvcmRlcnMoZW5hYmxl
ZCk7CisgICAgcHJpdmF0ZVByZWZlcmVuY2VzKCktPnNldFNob3dSZXBhaW50Q291bnRlcihlbmFi
bGVkKTsKK30KKwordm9pZCBNaW5pQnJvd3Nlcjo6c2V0U2hvd1RpbGVkU2Nyb2xsaW5nSW5kaWNh
dG9yKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBwcml2YXRlUHJlZmVyZW5jZXMoKS0+c2V0U2hvd1Rp
bGVkU2Nyb2xsaW5nSW5kaWNhdG9yKGVuYWJsZWQpOworfQorCitzdGF0aWMgV05EUFJPQyBnRGVm
V2ViS2l0UHJvYzsKKworc3RhdGljIExSRVNVTFQgQ0FMTEJBQ0sgdmlld1duZFByb2MoSFdORCBo
V25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCit7CisgICAg
c3dpdGNoIChtZXNzYWdlKSB7CisgICAgY2FzZSBXTV9OQ0hJVFRFU1Q6CisgICAgICAgIGNvbnN0
ZXhwciBpbnQgZHJhZ0JhckhlaWdodCA9IDMwOworICAgICAgICBSRUNUIHdpbmRvdzsKKyAgICAg
ICAgOjpHZXRXaW5kb3dSZWN0KGhXbmQsICZ3aW5kb3cpOworICAgICAgICAvLyBGb3IgdGVzdGlu
ZyBvdXIgdHJhbnNwYXJlbnQgd2luZG93LCB3ZSBuZWVkIGEgcmVnaW9uIHRvIHVzZSBhcyBhIGhh
bmRsZSBmb3IKKyAgICAgICAgLy8gZHJhZ2dpbmcuIFRoZSByaWdodCB3YXkgdG8gZG8gdGhpcyB3
b3VsZCBiZSB0byBxdWVyeSB0aGUgd2ViIHZpZXcgdG8gc2VlIHdoYXQncworICAgICAgICAvLyB1
bmRlciB0aGUgbW91c2UuIEhvd2V2ZXIsIGZvciB0ZXN0aW5nIHB1cnBvc2VzIHdlIGp1c3QgdXNl
IGFuIGFyYml0cmFyeQorICAgICAgICAvLyAzMCBsb2dpY2FsIHBpeGVsIGJhbmQgYXQgdGhlIHRv
cCBvZiB0aGUgdmlldyBhcyBhbiBhcmJpdHJhcnkgZ3JpcHBpbmcgbG9jYXRpb24uCisgICAgICAg
IC8vCisgICAgICAgIC8vIFdoZW4gd2UgYXJlIHdpdGhpbiB0aGlzIGJhZCwgcmV0dXJuIEhUX0NB
UFRJT04gdG8gdGVsbCBXaW5kb3dzIHdlIHdhbnQgdG8KKyAgICAgICAgLy8gdHJlYXQgdGhpcyBy
ZWdpb24gYXMgaWYgaXQgd2VyZSB0aGUgdGl0bGUgYmFyIG9uIGEgbm9ybWFsIHdpbmRvdy4KKyAg
ICAgICAgaW50IHkgPSBISVdPUkQobFBhcmFtKTsKKyAgICAgICAgZmxvYXQgc2NhbGVkRHJhZ0Jh
ckhlaWdodEZhY3RvciA9IGRyYWdCYXJIZWlnaHQgKiBXZWJDb3JlOjpkZXZpY2VTY2FsZUZhY3Rv
ckZvcldpbmRvdyhoV25kKTsKKyAgICAgICAgaWYgKCh5ID4gd2luZG93LnRvcCkgJiYgKHkgPCB3
aW5kb3cudG9wICsgc2NhbGVkRHJhZ0JhckhlaWdodEZhY3RvcikpCisgICAgICAgICAgICByZXR1
cm4gSFRDQVBUSU9OOworICAgIH0KKyAgICByZXR1cm4gQ2FsbFdpbmRvd1Byb2MoZ0RlZldlYktp
dFByb2MsIGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtKTsKK30KKwordm9pZCBNaW5pQnJv
d3Nlcjo6c3ViY2xhc3NGb3JMYXllcmVkV2luZG93KCkKK3sKKyNpZiBkZWZpbmVkIF9NX0FNRDY0
IHx8IGRlZmluZWQgX1dJTjY0CisgICAgZ0RlZldlYktpdFByb2MgPSByZWludGVycHJldF9jYXN0
PFdORFBST0M+KDo6R2V0V2luZG93TG9uZ1B0cihtX3ZpZXdXbmQsIEdXTFBfV05EUFJPQykpOwor
ICAgIDo6U2V0V2luZG93TG9uZ1B0cihtX3ZpZXdXbmQsIEdXTFBfV05EUFJPQywgcmVpbnRlcnBy
ZXRfY2FzdDxMT05HX1BUUj4odmlld1duZFByb2MpKTsKKyNlbHNlCisgICAgZ0RlZldlYktpdFBy
b2MgPSByZWludGVycHJldF9jYXN0PFdORFBST0M+KDo6R2V0V2luZG93TG9uZyhtX3ZpZXdXbmQs
IEdXTF9XTkRQUk9DKSk7CisgICAgOjpTZXRXaW5kb3dMb25nKG1fdmlld1duZCwgR1dMX1dORFBS
T0MsIHJlaW50ZXJwcmV0X2Nhc3Q8TE9OR19QVFI+KHZpZXdXbmRQcm9jKSk7CisjZW5kaWYKIH0K
ZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9NaW5pQnJvd3Nlci5oIGIvVG9vbHMv
TWluaUJyb3dzZXIvd2luL01pbmlCcm93c2VyLmgKaW5kZXggYTcwMzJmNGY1YmM3ZDYwZTdhOTkz
ZDYyZjU2MGVhNzhlNmQ2MTQxOS4uZTI1YTA4ZTI0ODJlZDkzMWE3MjUxYWQ1NTNhMTc5Mjk0NTU5
NTM3NCAxMDA2NDQKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIvd2luL01pbmlCcm93c2VyLmgKKysr
IGIvVG9vbHMvTWluaUJyb3dzZXIvd2luL01pbmlCcm93c2VyLmgKQEAgLTIzLDYgKzIzLDcgQEAK
ICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAogICovCiAKKyNpbmNsdWRlICJDb250ZW50V2luZG93LmgiCiAjaW5j
bHVkZSAiUGFnZUxvYWRUZXN0Q2xpZW50LmgiCiAjaW5jbHVkZSA8V2ViS2l0TGVnYWN5L1dlYktp
dC5oPgogI2luY2x1ZGUgPGNvbWlwLmg+CkBAIC00NSwxOSArNDYsMjEgQEAgdHlwZWRlZiBfY29t
X3B0cl90PF9jb21fSUlJRDxJV2ViQ2FjaGUsICZfX3V1aWRvZihJV2ViQ2FjaGUpPj4gSVdlYkNh
Y2hlUHRyOwogdHlwZWRlZiBfY29tX3B0cl90PF9jb21fSUlJRDxJV2ViUmVzb3VyY2VMb2FkRGVs
ZWdhdGUsICZfX3V1aWRvZihJV2ViUmVzb3VyY2VMb2FkRGVsZWdhdGUpPj4gSVdlYlJlc291cmNl
TG9hZERlbGVnYXRlUHRyOwogdHlwZWRlZiBfY29tX3B0cl90PF9jb21fSUlJRDxJV2ViRG93bmxv
YWREZWxlZ2F0ZSwgJl9fdXVpZG9mKElXZWJEb3dubG9hZERlbGVnYXRlKT4+IElXZWJEb3dubG9h
ZERlbGVnYXRlUHRyOwogCi1jbGFzcyBNaW5pQnJvd3NlciB7CitjbGFzcyBNaW5pQnJvd3NlciA6
IHB1YmxpYyBDb250ZW50V2luZG93IHsKIHB1YmxpYzoKICAgICBNaW5pQnJvd3NlcihIV05EIG1h
aW5XbmQsIEhXTkQgdXJsQmFyV25kLCBib29sIHVzZUxheWVyZWRXZWJWaWV3ID0gZmFsc2UsIGJv
b2wgcGFnZUxvYWRUZXN0aW5nID0gZmFsc2UpOwogCiAgICAgSFJFU1VMVCBpbml0KCk7Ci0gICAg
SFJFU1VMVCBwcmVwYXJlVmlld3MoSFdORCBtYWluV25kLCBjb25zdCBSRUNUJiBjbGllbnRSZWN0
LCBjb25zdCBCU1RSJiByZXF1ZXN0ZWRVUkwsIEhXTkQmIHZpZXdXbmQpOwotCi0gICAgSFJFU1VM
VCBsb2FkVVJMKGNvbnN0IEJTVFImIHBhc3NlZFVSTCk7CisgICAgSFJFU1VMVCBwcmVwYXJlVmll
d3MoSFdORCBtYWluV25kLCBjb25zdCBSRUNUJiBjbGllbnRSZWN0LCBIV05EJiB2aWV3V25kKTsK
IAorICAgIGJvb2wgbG9hZFVSTChjb25zdCBzdGQ6OndzdHJpbmcmIHVybCk7CisgICAgYm9vbCBs
b2FkSFRNTFN0cmluZyhjb25zdCBzdGQ6OndzdHJpbmcmKTsKKyAgICB2b2lkIHByaW50KCk7Cisg
ICAgCiAgICAgdm9pZCBzaG93TGFzdFZpc2l0ZWRTaXRlcyhJV2ViVmlldyYpOwogICAgIHZvaWQg
bGF1bmNoSW5zcGVjdG9yKCk7Ci0gICAgdm9pZCBuYXZpZ2F0ZUZvcndhcmRPckJhY2t3YXJkKEhX
TkQgaFduZCwgVUlOVCBtZW51SUQpOwotICAgIHZvaWQgbmF2aWdhdGVUb0hpc3RvcnkoSFdORCBo
V25kLCBVSU5UIG1lbnVJRCk7CisgICAgdm9pZCBuYXZpZ2F0ZUZvcndhcmRPckJhY2t3YXJkKGJv
b2wgaXNCYWNrd2FyZCk7CisgICAgdm9pZCBuYXZpZ2F0ZVRvSGlzdG9yeSh1bnNpZ25lZCBoaXN0
b3J5RW50cnkpOwogICAgIHZvaWQgZXhpdFByb2dyYW0oKTsKICAgICBib29sIHNlZWRJbml0aWFs
RGVmYXVsdFByZWZlcmVuY2VzKCk7CiAgICAgYm9vbCBzZXRUb0RlZmF1bHRQcmVmZXJlbmNlcygp
OwpAQCAtNzEsMTkgKzc0LDE4IEBAIHB1YmxpYzoKIAogICAgIElXZWJQcmVmZXJlbmNlc1B0ciBz
dGFuZGFyZFByZWZlcmVuY2VzKCkgeyByZXR1cm4gbV9zdGFuZGFyZFByZWZlcmVuY2VzOyAgfQog
ICAgIElXZWJQcmVmZXJlbmNlc1ByaXZhdGVQdHIgcHJpdmF0ZVByZWZlcmVuY2VzKCkgeyByZXR1
cm4gbV9wcmVmc1ByaXZhdGU7IH0KKwogICAgIElXZWJGcmFtZVB0ciBtYWluRnJhbWUoKTsKICAg
ICBJV2ViQ29yZVN0YXRpc3RpY3NQdHIgc3RhdGlzdGljcygpIHsgcmV0dXJuIG1fc3RhdGlzdGlj
czsgfQogICAgIElXZWJDYWNoZVB0ciB3ZWJDYWNoZSgpIHsgcmV0dXJuIG1fd2ViQ2FjaGU7ICB9
CiAgICAgSVdlYlZpZXdQdHIgd2ViVmlldygpIHsgcmV0dXJuIG1fd2ViVmlldzsgfQogCi0gICAg
Ym9vbCBoYXNXZWJWaWV3KCkgY29uc3QgeyByZXR1cm4gISFtX3dlYlZpZXc7IH0KICAgICBib29s
IHVzZXNMYXllcmVkV2ViVmlldygpIGNvbnN0IHsgcmV0dXJuIG1fdXNlTGF5ZXJlZFdlYlZpZXc7
IH0KICAgICBib29sIGdvQmFjaygpOwogICAgIGJvb2wgZ29Gb3J3YXJkKCk7CiAKLSAgICB2b2lk
IHNldFVzZXJBZ2VudChVSU5UIG1lbnVJRCk7Ci0gICAgdm9pZCBzZXRVc2VyQWdlbnQoX2JzdHJf
dCYgY3VzdG9tVUFTdHJpbmcpOwotICAgIF9ic3RyX3QgdXNlckFnZW50KCk7CisgICAgdm9pZCBz
ZXRVc2VyQWdlbnQoY29uc3Qgc3RkOjp3c3RyaW5nJiBjdXN0b21VQVN0cmluZyk7CisgICAgc3Rk
Ojp3c3RyaW5nIHVzZXJBZ2VudCgpOwogCiAgICAgUGFnZUxvYWRUZXN0Q2xpZW50JiBwYWdlTG9h
ZFRlc3RDbGllbnQoKSB7IHJldHVybiAqbV9wYWdlTG9hZFRlc3RDbGllbnQ7IH0KIApAQCAtOTIs
MTQgKzk0LDI0IEBAIHB1YmxpYzoKICAgICB2b2lkIHpvb21PdXQoKTsKIAogICAgIHZvaWQgc2hv
d0xheWVyVHJlZSgpOwotCi0gICAgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IoKSB7IHJldHVybiBt
X2RldmljZVNjYWxlRmFjdG9yOyB9Ci0gICAgdm9pZCB1cGRhdGVEZXZpY2VTY2FsZUZhY3Rvcigp
OwotCi0gICAgSEdESU9CSiB1cmxCYXJGb250KCkgeyByZXR1cm4gbV9oVVJMQmFyRm9udDsgfQor
ICAgIHZvaWQgdXBkYXRlU3RhdGlzdGljcyhIV05EIGhEbGcpOwogCiBwcml2YXRlOgotICAgIHZv
aWQgZ2VuZXJhdGVGb250Rm9yU2NhbGVGYWN0b3IoZmxvYXQpOworICAgIHZvaWQgc2V0QVZGb3Vu
ZGF0aW9uRW5hYmxlZChib29sKTsKKyAgICB2b2lkIHNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdF
bmFibGVkKGJvb2wpOworICAgIHZvaWQgc2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQoYm9v
bCk7CisgICAgdm9pZCBzZXRGdWxsU2NyZWVuRW5hYmxlZChib29sKTsKKyAgICB2b2lkIHNldEph
dmFTY3JpcHRFbmFibGVkKGJvb2wpOworICAgIHZvaWQgc2V0TG9hZHNJbWFnZXNBdXRvbWF0aWNh
bGx5KGJvb2wpOworICAgIHZvaWQgc2V0TG9jYWxGaWxlUmVzdHJpY3Rpb25zRW5hYmxlZChib29s
KTsKKyAgICB2b2lkIHNldFNob3VsZEludmVydENvbG9ycyhib29sKTsKKyAgICB2b2lkIHNldFNo
b3dDb21wb3NpdGluZ0JvcmRlcnMoYm9vbCk7CisgICAgdm9pZCBzZXRTaG93VGlsZWRTY3JvbGxp
bmdJbmRpY2F0b3IoYm9vbCk7CisKKyAgICBib29sIHNldENhY2hlRm9sZGVyKCk7CisgICAgdm9p
ZCBzdWJjbGFzc0ZvckxheWVyZWRXaW5kb3coKTsKKworICAgIEhXTkQgaHduZCgpIG92ZXJyaWRl
IHsgcmV0dXJuIG1fdmlld1duZDsgfQogCiAgICAgc3RkOjp2ZWN0b3I8SVdlYkhpc3RvcnlJdGVt
UHRyPiBtX2hpc3RvcnlJdGVtczsKIApAQCAtMTI0LDggKzEzNiw2IEBAIHByaXZhdGU6CiAKICAg
ICBIV05EIG1faE1haW5XbmQgeyBudWxscHRyIH07CiAgICAgSFdORCBtX2hVUkxCYXJXbmQgeyBu
dWxscHRyIH07Ci0gICAgSEdESU9CSiBtX2hVUkxCYXJGb250IHsgbnVsbHB0ciB9OwotCi0gICAg
ZmxvYXQgbV9kZXZpY2VTY2FsZUZhY3RvciB7IDEuMGYgfTsKKyAgICBIV05EIG1fdmlld1duZCB7
IG51bGxwdHIgfTsKICAgICBib29sIG1fdXNlTGF5ZXJlZFdlYlZpZXc7CiB9OwpkaWZmIC0tZ2l0
IGEvVG9vbHMvTWluaUJyb3dzZXIvd2luL01pbmlCcm93c2VyUmVwbGFjZS5oIGIvVG9vbHMvTWlu
aUJyb3dzZXIvd2luL01pbmlCcm93c2VyUmVwbGFjZS5oCmluZGV4IGE0NjhiMWI2ODI4MGUyZTNj
N2QyMTNjMDBkNzI5YmY4MDVmOTNjN2IuLjRhN2ZhMjAwMmRlOGM2NzhkM2ZhMWI0YmE4Y2U2ZTAy
ODRmYmQ5NTcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9NaW5pQnJvd3NlclJl
cGxhY2UuaAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci93aW4vTWluaUJyb3dzZXJSZXBsYWNlLmgK
QEAgLTI5LDYgKzI5LDQgQEAKIAogc3RhdGljIGNvbnN0IHdjaGFyX3QqIGRlZmF1bHRIVE1MID0g
TCI8cCBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICMwMEZGMDBcIj5UZXN0aW5nPC9wPjxpbWcg
aWQ9XCJ3ZWJraXQgbG9nb1wiIHNyYz1cImh0dHA6Ly93ZWJraXQub3JnL2ltYWdlcy9pY29uLWdv
bGQucG5nXCIgYWx0PVwiRmFjZVwiPjxkaXYgc3R5bGU9XCJib3JkZXI6IHNvbGlkIGJsdWU7IGJh
Y2tncm91bmQ6IHdoaXRlO1wiIGNvbnRlbnRlZGl0YWJsZT1cInRydWVcIj5kaXYgd2l0aCBibHVl
IGJvcmRlcjwvZGl2Pjx1bD48bGk+Zm9vPGxpPmJhcjxsaT5iYXo8L3VsPiI7CiAKLXN0YXRpYyB2
b2lkIHByb2Nlc3NDcmFzaFJlcG9ydChjb25zdCB3Y2hhcl90KiBmaWxlTmFtZSkgeyA6Ok1lc3Nh
Z2VCb3goMCwgZmlsZU5hbWUsIEwiQ3Jhc2ggUmVwb3J0IiwgTUJfT0spOyB9Ci0KICNlbmRpZgpk
aWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvd2luL1BhZ2VMb2FkVGVzdENsaWVudC5jcHAg
Yi9Ub29scy9NaW5pQnJvd3Nlci93aW4vUGFnZUxvYWRUZXN0Q2xpZW50LmNwcAppbmRleCA5NThi
YTAyYmFkYTU2MWYxOTBmZmUzMzUwMWE2MDhmNjk0NGE3OWRmLi4xMDg1ODg2YWMyMTA1OTQ3M2Yz
MGMzNWZlZTRkY2FmNmNhOGFkM2ZhIDEwMDY0NAotLS0gYS9Ub29scy9NaW5pQnJvd3Nlci93aW4v
UGFnZUxvYWRUZXN0Q2xpZW50LmNwcAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci93aW4vUGFnZUxv
YWRUZXN0Q2xpZW50LmNwcApAQCAtMTMyLDcgKzEzMiw3IEBAIHZvaWQgUGFnZUxvYWRUZXN0Q2xp
ZW50OjpwYWdlTG9hZEVuZGVkQXRUaW1lKENGQWJzb2x1dGVUaW1lIGVuZFRpbWUpCiAgICAgaWYg
KG1fcGFnZUxvYWRUZXN0aW5nKSB7CiAgICAgICAgICsrbV9jdXJyZW50UmVwZXRpdGlvbjsKICAg
ICAgICAgaWYgKG1fY3VycmVudFJlcGV0aXRpb24gIT0gbV9yZXBldGl0aW9ucykKLSAgICAgICAg
ICAgIG1faG9zdC0+bG9hZFVSTChtX3VybCk7CisgICAgICAgICAgICBtX2hvc3QtPmxvYWRVUkwo
c3RhdGljX2Nhc3Q8d2NoYXJfdCo+KG1fdXJsKSk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAg
ICAgZHVtcFJ1blN0YXRpc3RpY3MoKTsKICAgICAgICAgICAgIG1faG9zdC0+ZXhpdFByb2dyYW0o
KTsKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9SZXNvdXJjZUxvYWREZWxlZ2F0
ZS5jcHAgYi9Ub29scy9NaW5pQnJvd3Nlci93aW4vUmVzb3VyY2VMb2FkRGVsZWdhdGUuY3BwCmlu
ZGV4IDkxNTNiYzhjZjQ0Mjk4MjIzODQwNzY1MTI4ZjczY2ZkMDljZWRkOWUuLmE3NzY4Zjc2MThl
OWVkMDU4OGY0MDVjYjFhZTM3YWJlNjQzZGFjZTAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL01pbmlCcm93
c2VyL3dpbi9SZXNvdXJjZUxvYWREZWxlZ2F0ZS5jcHAKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIv
d2luL1Jlc291cmNlTG9hZERlbGVnYXRlLmNwcApAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUg
InN0ZGFmeC5oIgogI2luY2x1ZGUgIlJlc291cmNlTG9hZERlbGVnYXRlLmgiCiAKKyNpbmNsdWRl
ICJCcm93c2VyV2luZG93LmgiCiAjaW5jbHVkZSAiTWluaUJyb3dzZXIuaCIKICNpbmNsdWRlICJQ
YWdlTG9hZFRlc3RDbGllbnQuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0NPTVB0ci5oPgpAQCAtMzcs
NyArMzgsNyBAQAogI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDx3aW5pbmV0Lmg+CiAKLWV4
dGVybiBIUkVTVUxUIERpc3BsYXlBdXRoRGlhbG9nKHN0ZDo6d3N0cmluZyYgdXNlcm5hbWUsIHN0
ZDo6d3N0cmluZyYgcGFzc3dvcmQpOworZXh0ZXJuIEJyb3dzZXJXaW5kb3cqIGdCcm93c2VyV2lu
ZG93OwogCiBIUkVTVUxUIFJlc291cmNlTG9hZERlbGVnYXRlOjpRdWVyeUludGVyZmFjZShfSW5f
IFJFRklJRCByaWlkLCBfQ09NX091dHB0cl8gdm9pZCoqIHBwdk9iamVjdCkKIHsKQEAgLTk0LDcg
Kzk1LDcgQEAgSFJFU1VMVCBSZXNvdXJjZUxvYWREZWxlZ2F0ZTo6ZGlkUmVjZWl2ZUF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlKF9Jbl9vcHRfIElXZWJWaWUKICAgICAgICAgcmV0dXJuIEVfRkFJTDsK
IAogICAgIHN0ZDo6d3N0cmluZyB1c2VybmFtZSwgcGFzc3dvcmQ7Ci0gICAgaWYgKERpc3BsYXlB
dXRoRGlhbG9nKHVzZXJuYW1lLCBwYXNzd29yZCkgIT0gU19PSykKKyAgICBpZiAoIWdCcm93c2Vy
V2luZG93LT5kaXNwbGF5QXV0aERpYWxvZyh1c2VybmFtZSwgcGFzc3dvcmQpKQogICAgICAgICBy
ZXR1cm4gRV9GQUlMOwogCiAgICAgQ09NUHRyPElXZWJVUkxDcmVkZW50aWFsPiBjcmVkZW50aWFs
OwpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvd2luL1dLMkNvbnRlbnRXaW5kb3cuY3Bw
IGIvVG9vbHMvTWluaUJyb3dzZXIvd2luL1dLMkNvbnRlbnRXaW5kb3cuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjI0ZWQ5MTE0NjQ2ZmE4NzBjNWUwZDVhYTAxZDdhYzA1NjIwNTRhNGUKLS0tIC9kZXYvbnVsbAor
KysgYi9Ub29scy9NaW5pQnJvd3Nlci93aW4vV0syQ29udGVudFdpbmRvdy5jcHAKQEAgLTAsMCAr
MSwyOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggU29ueSBJbnRlcmFjdGl2ZSBFbnRl
cnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisjaW5jbHVkZSAiV0syQ29udGVudFdpbmRvdy5oIgorCisjaW5jbHVkZSA8V2ViS2l0L1dLSW5z
cGVjdG9yLmg+CisKK3N0ZDo6d3N0cmluZworY3JlYXRlU3RyaW5nKFdLU3RyaW5nUmVmIHdrU3Ry
aW5nKQoreworICAgIHNpemVfdCBtYXhTaXplID0gV0tTdHJpbmdHZXRNYXhpbXVtVVRGOENTdHJp
bmdTaXplKHdrU3RyaW5nKTsKKyAgICBjaGFyKiBidWZmZXIgPSBuZXcgY2hhclttYXhTaXplXTsK
KyAgICBzaXplX3QgYWN0dWFsU2l6ZSA9IFdLU3RyaW5nR2V0VVRGOENTdHJpbmcod2tTdHJpbmcs
IGJ1ZmZlciwgbWF4U2l6ZSk7CisKKyAgICBzaXplX3Qgd2xlbjsKKyAgICB3Y2hhcl90KiB3Y3Mg
PSBuZXcgd2NoYXJfdFthY3R1YWxTaXplICsgMV07CisgICAgbWJzdG93Y3Nfcygmd2xlbiwgd2Nz
LCBhY3R1YWxTaXplKzEsIGJ1ZmZlciwgYWN0dWFsU2l6ZSk7CisgICAgZGVsZXRlIFtdIGJ1ZmZl
cjsKKyAgICBzdGQ6OndzdHJpbmcgcmV0KHdjcyk7CisgICAgZGVsZXRlIFtdIHdjczsKKworICAg
IHJldHVybiByZXQ7Cit9CisKK3N0ZDo6d3N0cmluZyBjcmVhdGVTdHJpbmcoV0tVUkxSZWYgd2tV
UkwpCit7CisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHVybCA9IGFkb3B0V0soV0tVUkxD
b3B5U3RyaW5nKHdrVVJMKSk7CisgICAgcmV0dXJuIGNyZWF0ZVN0cmluZyh1cmwuZ2V0KCkpOwor
fQorCitzdGQ6OnN0cmluZyB0b1V0ZjgoY29uc3Qgc3RkOjp3c3RyaW5nJiBzcmMpCit7CisgICAg
c2l6ZV90IGxlbiA9IHNyYy5sZW5ndGgoKTsKKyAgICBjaGFyKiBtYnMgPSBuZXcgY2hhcltsZW4g
KiBNQl9DVVJfTUFYICsgMV07CisgICAgd2NzdG9tYnMobWJzLCBzcmMuY19zdHIoKSwgbGVuICog
TUJfQ1VSX01BWCArIDEpOworICAgIHN0ZDo6c3RyaW5nIGRlc3QobWJzKTsKKyAgICBkZWxldGVb
XSBtYnM7CisgICAgcmV0dXJuIGRlc3Q7Cit9CisKK3N0ZDo6d3N0cmluZyBmcm9tVXRmOChjb25z
dCBzdGQ6OnN0cmluZyYgc3JjKQoreworICAgIHNpemVfdCBsZW4gPSBzcmMubGVuZ3RoKCk7Cisg
ICAgd2NoYXJfdCogd2NzID0gbmV3IHdjaGFyX3RbbGVuICsgMV07CisgICAgc2l6ZV90IHdsZW47
CisgICAgbWJzdG93Y3Nfcygmd2xlbiwgd2NzLCBsZW4rMSwgc3JjLmNfc3RyKCksIGxlbik7Cisg
ICAgc3RkOjp3c3RyaW5nIGRlc3Qod2NzKTsKKyAgICBkZWxldGVbXSB3Y3M7CisgICAgcmV0dXJu
IGRlc3Q7Cit9CisKK1dLUmV0YWluUHRyPFdLU3RyaW5nUmVmPgorY3JlYXRlV0tTdHJpbmcoc3Rk
Ojp3c3RyaW5nIHMpCit7CisgICAgYXV0byB1dGY4ID0gdG9VdGY4KHMpOworICAgIHJldHVybiBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHV0ZjguY19zdHIoKSkpOworfQor
CitXS1JldGFpblB0cjxXS1VSTFJlZj4KK2NyZWF0ZVdLVVJMKHN0ZDo6d3N0cmluZyBzKQorewor
ICAgIGF1dG8gdXRmOCA9IHRvVXRmOChzKTsKKyAgICByZXR1cm4gYWRvcHRXSyhXS1VSTENyZWF0
ZVdpdGhVVEY4Q1N0cmluZyh1dGY4LmNfc3RyKCkpKTsKK30KKworCitXSzJDb250ZW50V2luZG93
OjpXSzJDb250ZW50V2luZG93KEhXTkQgbWFpblduZCwgSFdORCB1cmxCYXJXbmQpCisgICAgOiBt
X3VybEJhclduZCh1cmxCYXJXbmQpCit7CisgICAgUkVDVCByZWN0ID0geyB9OworICAgIGF1dG8g
Y29uZiA9IGFkb3B0V0soV0tQYWdlQ29uZmlndXJhdGlvbkNyZWF0ZSgpKTsKKyAgICBhdXRvIGNv
bnRleHQgPSBhZG9wdFdLKFdLQ29udGV4dENyZWF0ZSgpKTsKKyAgICBXS1BhZ2VDb25maWd1cmF0
aW9uU2V0Q29udGV4dChjb25mLmdldCgpLCBjb250ZXh0LmdldCgpKTsKKworICAgIG1fdmlldyA9
IGFkb3B0V0soV0tWaWV3Q3JlYXRlKHJlY3QsIGNvbmYuZ2V0KCksIG1haW5XbmQpKTsKKyAgICBh
dXRvIHBhZ2UgPSBXS1ZpZXdHZXRQYWdlKG1fdmlldy5nZXQoKSk7CisKKyAgICBXS1BhZ2VMb2Fk
ZXJDbGllbnRWMCBsb2FkQ2xpZW50ID0ge3sgMCwgdGhpcyB9fTsKKyAgICBsb2FkQ2xpZW50LmRp
ZFJlY2VpdmVUaXRsZUZvckZyYW1lID0gZGlkUmVjZWl2ZVRpdGxlRm9yRnJhbWU7CisgICAgbG9h
ZENsaWVudC5kaWRGYWlsUHJvdmlzaW9uYWxMb2FkV2l0aEVycm9yRm9yRnJhbWUgPSBkaWRGYWls
UHJvdmlzaW9uYWxMb2FkV2l0aEVycm9yRm9yRnJhbWU7CisgICAgbG9hZENsaWVudC5kaWRDb21t
aXRMb2FkRm9yRnJhbWUgPSBkaWRDb21taXRMb2FkRm9yRnJhbWU7CisgICAgbG9hZENsaWVudC5k
aWRDaGFuZ2VQcm9ncmVzcyA9IGRpZENoYW5nZVByb2dyZXNzOworICAgIGxvYWRDbGllbnQuZGlk
U2FtZURvY3VtZW50TmF2aWdhdGlvbkZvckZyYW1lID0gZGlkU2FtZURvY3VtZW50TmF2aWdhdGlv
bkZvckZyYW1lOworICAgIFdLUGFnZVNldFBhZ2VMb2FkZXJDbGllbnQocGFnZSwgJmxvYWRDbGll
bnQuYmFzZSk7Cit9CisKK2Jvb2wgV0syQ29udGVudFdpbmRvdzo6bG9hZFVSTChjb25zdCBzdGQ6
OndzdHJpbmcmIHVybCkKK3sKKyAgICBhdXRvIHBhZ2UgPSBXS1ZpZXdHZXRQYWdlKG1fdmlldy5n
ZXQoKSk7CisgICAgV0tQYWdlTG9hZFVSTChwYWdlLCBjcmVhdGVXS1VSTCh1cmwpLmdldCgpKTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXSzJDb250ZW50V2luZG93Ojpsb2FkSFRNTFN0
cmluZyhjb25zdCBzdGQ6OndzdHJpbmcmIHN0cikKK3sKKyAgICBhdXRvIHBhZ2UgPSBXS1ZpZXdH
ZXRQYWdlKG1fdmlldy5nZXQoKSk7CisgICAgYXV0byB1cmwgPSBjcmVhdGVXS1VSTChMImFib3V0
OiIpOworICAgIFdLUGFnZUxvYWRIVE1MU3RyaW5nKHBhZ2UsIGNyZWF0ZVdLU3RyaW5nKHN0ciku
Z2V0KCksIHVybC5nZXQoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgV0syQ29udGVu
dFdpbmRvdzo6cHJpbnQoKQoreworfQorCisKK3ZvaWQgV0syQ29udGVudFdpbmRvdzo6bGF1bmNo
SW5zcGVjdG9yKCkKK3sKKyAgICBhdXRvIHBhZ2UgPSBXS1ZpZXdHZXRQYWdlKG1fdmlldy5nZXQo
KSk7CisgICAgYXV0byBpbnNwZWN0b3IgPSBXS1BhZ2VHZXRJbnNwZWN0b3IocGFnZSk7CisgICAg
V0tJbnNwZWN0b3JTaG93KGluc3BlY3Rvcik7Cit9CisKK3ZvaWQgV0syQ29udGVudFdpbmRvdzo6
bmF2aWdhdGVGb3J3YXJkT3JCYWNrd2FyZChib29sIGlzQmFja3dhcmQpCit7Cit9CisKK3ZvaWQg
V0syQ29udGVudFdpbmRvdzo6bmF2aWdhdGVUb0hpc3RvcnkodW5zaWduZWQgaGlzdG9yeUVudHJ5
KQoreworfQorCisKK3ZvaWQgV0syQ29udGVudFdpbmRvdzo6c2V0QVZGb3VuZGF0aW9uRW5hYmxl
ZChib29sKQoreworfQorCit2b2lkIFdLMkNvbnRlbnRXaW5kb3c6OnNldEFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdFbmFibGVkKGJvb2wpCit7Cit9CisKK3ZvaWQgV0syQ29udGVudFdpbmRvdzo6c2V0
QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQoYm9vbCkKK3sKK30KKwordm9pZCBXSzJDb250ZW50
V2luZG93OjpzZXRGdWxsU2NyZWVuRW5hYmxlZChib29sKQoreworfQorCit2b2lkIFdLMkNvbnRl
bnRXaW5kb3c6OnNldEphdmFTY3JpcHRFbmFibGVkKGJvb2wpCit7Cit9CisKK3ZvaWQgV0syQ29u
dGVudFdpbmRvdzo6c2V0TG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5KGJvb2wgZW5hYmxlZCkKK3sK
KyAgICBhdXRvIHBhZ2UgPSBXS1ZpZXdHZXRQYWdlKG1fdmlldy5nZXQoKSk7CisgICAgYXV0byBw
Z3JvdXAgPSBXS1BhZ2VHZXRQYWdlR3JvdXAocGFnZSk7CisgICAgYXV0byBwcmVmID0gV0tQYWdl
R3JvdXBHZXRQcmVmZXJlbmNlcyhwZ3JvdXApOworICAgIFdLUHJlZmVyZW5jZXNTZXRMb2Fkc0lt
YWdlc0F1dG9tYXRpY2FsbHkocHJlZiwgZW5hYmxlZCk7Cit9CisKK3ZvaWQgV0syQ29udGVudFdp
bmRvdzo6c2V0TG9jYWxGaWxlUmVzdHJpY3Rpb25zRW5hYmxlZChib29sKQoreworfQorCit2b2lk
IFdLMkNvbnRlbnRXaW5kb3c6OnNldFNob3VsZEludmVydENvbG9ycyhib29sKQoreworfQorCit2
b2lkIFdLMkNvbnRlbnRXaW5kb3c6OnNldFNob3dDb21wb3NpdGluZ0JvcmRlcnMoYm9vbCkKK3sK
K30KKwordm9pZCBXSzJDb250ZW50V2luZG93OjpzZXRTaG93VGlsZWRTY3JvbGxpbmdJbmRpY2F0
b3IoYm9vbCkKK3sKK30KKworCitib29sIFdLMkNvbnRlbnRXaW5kb3c6OmdvQmFjaygpCit7Cisg
ICAgYXV0byBwYWdlID0gV0tWaWV3R2V0UGFnZShtX3ZpZXcuZ2V0KCkpOworICAgIFdLUGFnZUdv
QmFjayhwYWdlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXSzJDb250ZW50V2luZG93
Ojpnb0ZvcndhcmQoKQoreworICAgIGF1dG8gcGFnZSA9IFdLVmlld0dldFBhZ2UobV92aWV3Lmdl
dCgpKTsKKyAgICBXS1BhZ2VHb0ZvcndhcmQocGFnZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
Kwordm9pZCBXSzJDb250ZW50V2luZG93OjpzZXRVc2VyQWdlbnQoY29uc3Qgc3RkOjp3c3RyaW5n
JiBjdXN0b21VQVN0cmluZykKK3sKKyAgICBhdXRvIHBhZ2UgPSBXS1ZpZXdHZXRQYWdlKG1fdmll
dy5nZXQoKSk7CisgICAgYXV0byB1YSA9IGNyZWF0ZVdLU3RyaW5nKGN1c3RvbVVBU3RyaW5nKTsK
KyAgICBXS1BhZ2VTZXRDdXN0b21Vc2VyQWdlbnQocGFnZSwgdWEuZ2V0KCkpOworfQorCitzdGQ6
OndzdHJpbmcgV0syQ29udGVudFdpbmRvdzo6dXNlckFnZW50KCkKK3sKKyAgICBhdXRvIHBhZ2Ug
PSBXS1ZpZXdHZXRQYWdlKG1fdmlldy5nZXQoKSk7CisgICAgYXV0byB1YSA9IGFkb3B0V0soV0tQ
YWdlQ29weVVzZXJBZ2VudChwYWdlKSk7CisgICAgcmV0dXJuIGNyZWF0ZVN0cmluZyh1YS5nZXQo
KSk7Cit9CisKKwordm9pZCBXSzJDb250ZW50V2luZG93OjpyZXNldFpvb20oKQoreworICAgIGF1
dG8gcGFnZSA9IFdLVmlld0dldFBhZ2UobV92aWV3LmdldCgpKTsKKyAgICBXS1BhZ2VTZXRQYWdl
Wm9vbUZhY3RvcihwYWdlLCAxKTsKK30KKwordm9pZCBXSzJDb250ZW50V2luZG93Ojp6b29tSW4o
KQoreworICAgIGF1dG8gcGFnZSA9IFdLVmlld0dldFBhZ2UobV92aWV3LmdldCgpKTsKKyAgICBk
b3VibGUgcyA9IFdLUGFnZUdldFBhZ2Vab29tRmFjdG9yKHBhZ2UpOworICAgIFdLUGFnZVNldFBh
Z2Vab29tRmFjdG9yKHBhZ2UsIHMgKiAxLjI1KTsKK30KKwordm9pZCBXSzJDb250ZW50V2luZG93
Ojp6b29tT3V0KCkKK3sKKyAgICBhdXRvIHBhZ2UgPSBXS1ZpZXdHZXRQYWdlKG1fdmlldy5nZXQo
KSk7CisgICAgZG91YmxlIHMgPSBXS1BhZ2VHZXRQYWdlWm9vbUZhY3RvcihwYWdlKTsKKyAgICBX
S1BhZ2VTZXRQYWdlWm9vbUZhY3RvcihwYWdlLCBzICogMC44KTsKK30KKworCit2b2lkIFdLMkNv
bnRlbnRXaW5kb3c6OnNob3dMYXllclRyZWUoKQoreworfQorCit2b2lkIFdLMkNvbnRlbnRXaW5k
b3c6OnVwZGF0ZVN0YXRpc3RpY3MoSFdORCBoRGxnKQoreworfQorCisKK0hXTkQgV0syQ29udGVu
dFdpbmRvdzo6aHduZCgpCit7CisgICAgcmV0dXJuIFdLVmlld0dldFdpbmRvdyhtX3ZpZXcuZ2V0
KCkpOworfQorCitzdGF0aWMgV0syQ29udGVudFdpbmRvdyogdG9Db250ZW50V2luZG93KGNvbnN0
IHZvaWQgKmNsaWVudEluZm8pCit7CisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8V0syQ29udGVudFdp
bmRvdyo+KHN0YXRpY19jYXN0PGNvbnN0IFdLMkNvbnRlbnRXaW5kb3cqPihjbGllbnRJbmZvKSk7
Cit9CisKK3ZvaWQgV0syQ29udGVudFdpbmRvdzo6ZGlkUmVjZWl2ZVRpdGxlRm9yRnJhbWUoV0tQ
YWdlUmVmIHBhZ2UsIFdLU3RyaW5nUmVmIHRpdGxlLCBXS0ZyYW1lUmVmIGZyYW1lLCBXS1R5cGVS
ZWYgdXNlckRhdGEsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pCit7CisgICAgaWYgKCFXS0ZyYW1l
SXNNYWluRnJhbWUoZnJhbWUpKQorICAgICAgICByZXR1cm47CisgICAgc3RkOjp3c3RyaW5nIHRp
dGxlU3RyaW5nID0gY3JlYXRlU3RyaW5nKHRpdGxlKTsKKyAgICBhdXRvIHRoaXogPSB0b0NvbnRl
bnRXaW5kb3coY2xpZW50SW5mbyk7CisgICAgcHJpbnRmKF9fRlVOQ1RJT05fXyAiOiAlUyIsIHRp
dGxlU3RyaW5nLmNfc3RyKCkpOworfQorCit2b2lkIFdLMkNvbnRlbnRXaW5kb3c6OmRpZEZhaWxQ
cm92aXNpb25hbExvYWRXaXRoRXJyb3JGb3JGcmFtZShXS1BhZ2VSZWYgcGFnZSwgV0tGcmFtZVJl
ZiBmcmFtZSwgV0tFcnJvclJlZiBlcnJvciwgV0tUeXBlUmVmIHVzZXJEYXRhLCBjb25zdCB2b2lk
ICpjbGllbnRJbmZvKQoreworICAgIGludCBlcnJvckNvZGUgPSBXS0Vycm9yR2V0RXJyb3JDb2Rl
KGVycm9yKTsKKworICAgIHByaW50ZihfX0ZVTkNUSU9OX18gIjogJWRcbiIsIGVycm9yQ29kZSk7
Cit9CisKK3ZvaWQgV0syQ29udGVudFdpbmRvdzo6ZGlkQ29tbWl0TG9hZEZvckZyYW1lKFdLUGFn
ZVJlZiBwYWdlLCBXS0ZyYW1lUmVmIGZyYW1lLCBXS1R5cGVSZWYgdXNlckRhdGEsIGNvbnN0IHZv
aWQgKmNsaWVudEluZm8pCit7CisgICAgaWYgKCFXS0ZyYW1lSXNNYWluRnJhbWUoZnJhbWUpKQor
ICAgICAgICByZXR1cm47CisgICAgYXV0byB0aGl6ID0gdG9Db250ZW50V2luZG93KGNsaWVudElu
Zm8pOworCisgICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHdrdXJsID0gYWRvcHRXSyhXS0ZyYW1l
Q29weVVSTChmcmFtZSkpOworICAgIHN0ZDo6d3N0cmluZyB1cmxTdHJpbmcgPSBjcmVhdGVTdHJp
bmcod2t1cmwuZ2V0KCkpOworICAgIFNldFdpbmRvd1RleHQodGhpei0+bV91cmxCYXJXbmQsIHVy
bFN0cmluZy5jX3N0cigpKTsKK30KKwordm9pZCBXSzJDb250ZW50V2luZG93OjpkaWRDaGFuZ2VQ
cm9ncmVzcyhXS1BhZ2VSZWYgcGFnZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBh
dXRvIHRoaXogPSB0b0NvbnRlbnRXaW5kb3coY2xpZW50SW5mbyk7CisgICAgZG91YmxlIHByb2dy
ZXNzID0gV0tQYWdlR2V0RXN0aW1hdGVkUHJvZ3Jlc3MocGFnZSk7CisgICAgcHJpbnRmKF9fRlVO
Q1RJT05fXyAiOiAlZlxuIiwgcHJvZ3Jlc3MpOworfQorCit2b2lkIFdLMkNvbnRlbnRXaW5kb3c6
OmRpZFNhbWVEb2N1bWVudE5hdmlnYXRpb25Gb3JGcmFtZShXS1BhZ2VSZWYgcGFnZSwgV0tGcmFt
ZVJlZiBmcmFtZSwgV0tTYW1lRG9jdW1lbnROYXZpZ2F0aW9uVHlwZSB0eXBlLCBXS1R5cGVSZWYg
dXNlckRhdGEsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pCit7CisgICAgaWYgKCFXS0ZyYW1lSXNN
YWluRnJhbWUoZnJhbWUpKQorICAgICAgICByZXR1cm47Cit9CmRpZmYgLS1naXQgYS9Ub29scy9N
aW5pQnJvd3Nlci93aW4vV0syQ29udGVudFdpbmRvdy5oIGIvVG9vbHMvTWluaUJyb3dzZXIvd2lu
L1dLMkNvbnRlbnRXaW5kb3cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZGZlMTQ0ZTYxNTRiM2MwZjUzNDNiYzFh
MmE4YTM5NGI4YTFlOTg0Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvd2lu
L1dLMkNvbnRlbnRXaW5kb3cuaApAQCAtMCwwICsxLDc5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE4IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJD
b250ZW50V2luZG93LmgiCisjaW5jbHVkZSA8V2ViS2l0L1dLUmV0YWluUHRyLmg+CisjaW5jbHVk
ZSA8V2ViS2l0L1dlYktpdDJfQy5oPgorCitjbGFzcyBXSzJDb250ZW50V2luZG93IDogcHVibGlj
IENvbnRlbnRXaW5kb3cgeworcHVibGljOgorICAgIFdLMkNvbnRlbnRXaW5kb3coSFdORCBtYWlu
V25kLCBIV05EIHVybEJhclduZCk7CisKK3ByaXZhdGU6CisgICAgYm9vbCBsb2FkVVJMKGNvbnN0
IHN0ZDo6d3N0cmluZyYgdXJsKSBvdmVycmlkZTsKKyAgICBib29sIGxvYWRIVE1MU3RyaW5nKGNv
bnN0IHN0ZDo6d3N0cmluZyYpIG92ZXJyaWRlOworCisgICAgdm9pZCBwcmludCgpIG92ZXJyaWRl
OworCisgICAgdm9pZCBsYXVuY2hJbnNwZWN0b3IoKSBvdmVycmlkZTsKKyAgICB2b2lkIG5hdmln
YXRlRm9yd2FyZE9yQmFja3dhcmQoYm9vbCBpc0JhY2t3YXJkKSBvdmVycmlkZTsKKyAgICB2b2lk
IG5hdmlnYXRlVG9IaXN0b3J5KHVuc2lnbmVkIGhpc3RvcnlFbnRyeSkgb3ZlcnJpZGU7CisKKyAg
ICB2b2lkIHNldEFWRm91bmRhdGlvbkVuYWJsZWQoYm9vbCkgb3ZlcnJpZGU7CisgICAgdm9pZCBz
ZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZChib29sKSBvdmVycmlkZTsKKyAgICB2b2lk
IHNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKGJvb2wpIG92ZXJyaWRlOworICAgIHZvaWQg
c2V0RnVsbFNjcmVlbkVuYWJsZWQoYm9vbCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRKYXZhU2Ny
aXB0RW5hYmxlZChib29sKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldExvYWRzSW1hZ2VzQXV0b21h
dGljYWxseShib29sKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldExvY2FsRmlsZVJlc3RyaWN0aW9u
c0VuYWJsZWQoYm9vbCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRTaG91bGRJbnZlcnRDb2xvcnMo
Ym9vbCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRTaG93Q29tcG9zaXRpbmdCb3JkZXJzKGJvb2wp
IG92ZXJyaWRlOworICAgIHZvaWQgc2V0U2hvd1RpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yKGJvb2wp
IG92ZXJyaWRlOworCisgICAgYm9vbCBnb0JhY2soKSBvdmVycmlkZTsKKyAgICBib29sIGdvRm9y
d2FyZCgpIG92ZXJyaWRlOworCisgICAgdm9pZCBzZXRVc2VyQWdlbnQoY29uc3Qgc3RkOjp3c3Ry
aW5nJiBjdXN0b21VQVN0cmluZykgb3ZlcnJpZGU7CisgICAgc3RkOjp3c3RyaW5nIHVzZXJBZ2Vu
dCgpIG92ZXJyaWRlOworCisgICAgdm9pZCByZXNldFpvb20oKSBvdmVycmlkZTsKKyAgICB2b2lk
IHpvb21JbigpIG92ZXJyaWRlOworICAgIHZvaWQgem9vbU91dCgpIG92ZXJyaWRlOworCisgICAg
dm9pZCBzaG93TGF5ZXJUcmVlKCkgb3ZlcnJpZGU7CisgICAgdm9pZCB1cGRhdGVTdGF0aXN0aWNz
KEhXTkQgaERsZykgb3ZlcnJpZGU7CisKKyAgICBIV05EIGh3bmQoKSBvdmVycmlkZTsKKworICAg
IHN0YXRpYyB2b2lkIGRpZFJlY2VpdmVUaXRsZUZvckZyYW1lKFdLUGFnZVJlZiwgV0tTdHJpbmdS
ZWYgdGl0bGUsIFdLRnJhbWVSZWYsIFdLVHlwZVJlZiB1c2VyRGF0YSwgY29uc3Qgdm9pZCAqY2xp
ZW50SW5mbyk7CisgICAgc3RhdGljIHZvaWQgZGlkRmFpbFByb3Zpc2lvbmFsTG9hZFdpdGhFcnJv
ckZvckZyYW1lKFdLUGFnZVJlZiwgV0tGcmFtZVJlZiwgV0tFcnJvclJlZiwgV0tUeXBlUmVmIHVz
ZXJEYXRhLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKTsKKyAgICBzdGF0aWMgdm9pZCBkaWRDb21t
aXRMb2FkRm9yRnJhbWUoV0tQYWdlUmVmLCBXS0ZyYW1lUmVmLCBXS1R5cGVSZWYgdXNlckRhdGEs
IGNvbnN0IHZvaWQgKmNsaWVudEluZm8pOworICAgIHN0YXRpYyB2b2lkIGRpZENoYW5nZVByb2dy
ZXNzKFdLUGFnZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CisgICAgc3RhdGljIHZvaWQg
ZGlkU2FtZURvY3VtZW50TmF2aWdhdGlvbkZvckZyYW1lKFdLUGFnZVJlZiwgV0tGcmFtZVJlZiwg
V0tTYW1lRG9jdW1lbnROYXZpZ2F0aW9uVHlwZSwgV0tUeXBlUmVmIHVzZXJEYXRhLCBjb25zdCB2
b2lkICpjbGllbnRJbmZvKTsKKworICAgIFdLUmV0YWluUHRyPFdLVmlld1JlZj4gbV92aWV3Owor
ICAgIEhXTkQgbV91cmxCYXJXbmQ7Cit9OwpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIv
d2luL1dpbk1haW4uY3BwIGIvVG9vbHMvTWluaUJyb3dzZXIvd2luL1dpbk1haW4uY3BwCmluZGV4
IDA1OTRiY2JlNTQwOGEyOTM0ZDMzMTU5Y2U2YTJmNWJkZGJjNzBmNDIuLjNhNzJhYzhjYTU1N2Jh
ZDA4NzhlZTIwOTQ1OGEzMGQyMTM2Mzg1YTYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2Vy
L3dpbi9XaW5NYWluLmNwcAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci93aW4vV2luTWFpbi5jcHAK
QEAgLTI1LDE4ICsyNSwxOSBAQAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCiAgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAq
LwotCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDA5MSkKLQogI2luY2x1ZGUgInN0ZGFmeC5o
IgorCisjaW5jbHVkZSAiQnJvd3NlcldpbmRvdy5oIgogI2luY2x1ZGUgIk1pbmlCcm93c2VyTGli
UmVzb3VyY2UuaCIKLSNpbmNsdWRlICJNaW5pQnJvd3NlcldlYkhvc3QuaCIKLSNpbmNsdWRlICJD
b21tb24uY3BwIgorI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NGUnVuTG9vcC5oPgorI2luY2x1
ZGUgPFdlYktpdExlZ2FjeS9XZWJLaXQuaD4KIAotbmFtZXNwYWNlIFdlYkNvcmUgewotZmxvYXQg
ZGV2aWNlU2NhbGVGYWN0b3JGb3JXaW5kb3coSFdORCk7Ci19CitleHRlcm4gQnJvd3NlcldpbmRv
dyogZ0Jyb3dzZXJXaW5kb3c7CiAKK3ZvaWQgY29tcHV0ZUZ1bGxEZXNrdG9wRnJhbWUoKTsKK3Zv
aWQgY3JlYXRlQ3Jhc2hSZXBvcnQoRVhDRVBUSU9OX1BPSU5URVJTKik7Cit2b2lkIHBhcnNlQ29t
bWFuZExpbmUoYm9vbCYgdXNlc0xheWVyZWRXZWJWaWV3LCBib29sJiB1c2VGdWxsRGVza3RvcCwg
Ym9vbCYgcGFnZUxvYWRUZXN0aW5nLCBfYnN0cl90JiByZXF1ZXN0ZWRVUkwsIGJvb2wmIHVzZVdL
Mik7CisgICAgCiBpbnQgV0lOQVBJIHdXaW5NYWluKF9Jbl8gSElOU1RBTkNFIGhJbnN0YW5jZSwg
X0luX29wdF8gSElOU1RBTkNFIGhQcmV2SW5zdGFuY2UsIF9Jbl8gTFBXU1RSIGxwc3RyQ21kTGlu
ZSwgX0luXyBpbnQgbkNtZFNob3cpCiB7CiAjaWZkZWYgX0NSVERCR19NQVBfQUxMT0MKQEAgLTQ0
LDkgKzQ1LDYgQEAgaW50IFdJTkFQSSB3V2luTWFpbihfSW5fIEhJTlNUQU5DRSBoSW5zdGFuY2Us
IF9Jbl9vcHRfIEhJTlNUQU5DRSBoUHJldkluc3RhbmNlLAogICAgIF9DcnRTZXRSZXBvcnRNb2Rl
KF9DUlRfV0FSTiwgX0NSVERCR19NT0RFX0ZJTEUpOwogI2VuZGlmCiAKLSAgICBNU0cgbXNnID0g
ezB9OwotICAgIEhBQ0NFTCBoQWNjZWxUYWJsZTsKLQogICAgIElOSVRDT01NT05DT05UUk9MU0VY
IEluaXRDdHJsRXg7CiAKICAgICBJbml0Q3RybEV4LmR3U2l6ZSA9IHNpemVvZihJTklUQ09NTU9O
Q09OVFJPTFNFWCk7CkBAIC01NiwxNCArNTQsMTAgQEAgaW50IFdJTkFQSSB3V2luTWFpbihfSW5f
IEhJTlNUQU5DRSBoSW5zdGFuY2UsIF9Jbl9vcHRfIEhJTlNUQU5DRSBoUHJldkluc3RhbmNlLAog
ICAgIGJvb2wgdXNlc0xheWVyZWRXZWJWaWV3ID0gZmFsc2U7CiAgICAgYm9vbCB1c2VGdWxsRGVz
a3RvcCA9IGZhbHNlOwogICAgIGJvb2wgcGFnZUxvYWRUZXN0aW5nID0gZmFsc2U7CisgICAgYm9v
bCB1c2VXSzIgPSBmYWxzZTsKICAgICBfYnN0cl90IHJlcXVlc3RlZFVSTDsKIAotICAgIHBhcnNl
Q29tbWFuZExpbmUodXNlc0xheWVyZWRXZWJWaWV3LCB1c2VGdWxsRGVza3RvcCwgcGFnZUxvYWRU
ZXN0aW5nLCByZXF1ZXN0ZWRVUkwpOwotCi0gICAgLy8gSW5pdGlhbGl6ZSBnbG9iYWwgc3RyaW5n
cwotICAgIExvYWRTdHJpbmcoaEluc3QsIElEU19BUFBfVElUTEUsIHN6VGl0bGUsIE1BWF9MT0FE
U1RSSU5HKTsKLSAgICBMb2FkU3RyaW5nKGhJbnN0LCBJRENfTUlOSUJST1dTRVIsIHN6V2luZG93
Q2xhc3MsIE1BWF9MT0FEU1RSSU5HKTsKLSAgICBNeVJlZ2lzdGVyQ2xhc3MoaEluc3QpOworICAg
IHBhcnNlQ29tbWFuZExpbmUodXNlc0xheWVyZWRXZWJWaWV3LCB1c2VGdWxsRGVza3RvcCwgcGFn
ZUxvYWRUZXN0aW5nLCByZXF1ZXN0ZWRVUkwsIHVzZVdLMik7CiAKICAgICBpZiAodXNlRnVsbERl
c2t0b3ApCiAgICAgICAgIGNvbXB1dGVGdWxsRGVza3RvcEZyYW1lKCk7CkBAIC03MywxNTIgKzY3
LDQwIEBAIGludCBXSU5BUEkgd1dpbk1haW4oX0luXyBISU5TVEFOQ0UgaEluc3RhbmNlLCBfSW5f
b3B0XyBISU5TVEFOQ0UgaFByZXZJbnN0YW5jZSwKIAogICAgIDo6U2V0UHJvY2Vzc0RQSUF3YXJl
KCk7CiAKLSAgICBmbG9hdCBzY2FsZUZhY3RvciA9IFdlYkNvcmU6OmRldmljZVNjYWxlRmFjdG9y
Rm9yV2luZG93KG51bGxwdHIpOwotCi0gICAgaWYgKHVzZXNMYXllcmVkV2ViVmlldykgewotICAg
ICAgICBoVVJMQmFyV25kID0gQ3JlYXRlV2luZG93KEwiRURJVCIsIEwiVHlwZSBVUkwgSGVyZSIs
Ci0gICAgICAgICAgICBXU19PVkVSTEFQUEVEV0lORE9XIHwgV1NfVklTSUJMRSB8IFdTX0JPUkRF
UiB8IEVTX0xFRlQgfCBFU19BVVRPVlNDUk9MTCwgCi0gICAgICAgICAgICBzY2FsZUZhY3RvciAq
IHNfd2luZG93UG9zaXRpb24ueCwgc2NhbGVGYWN0b3IgKiAoc193aW5kb3dQb3NpdGlvbi55ICsg
c193aW5kb3dTaXplLmN5KSwgc2NhbGVGYWN0b3IgKiBzX3dpbmRvd1NpemUuY3gsIHNjYWxlRmFj
dG9yICogVVJMQkFSX0hFSUdIVCwKLSAgICAgICAgICAgIDAsIDAsIGhJbnN0LCAwKTsKLSAgICB9
IGVsc2UgewotICAgICAgICBoTWFpblduZCA9IENyZWF0ZVdpbmRvdyhzeldpbmRvd0NsYXNzLCBz
elRpdGxlLCBXU19PVkVSTEFQUEVEV0lORE9XLAotICAgICAgICAgICAgQ1dfVVNFREVGQVVMVCwg
MCwgQ1dfVVNFREVGQVVMVCwgMCwgMCwgMCwgaEluc3QsIDApOwotCi0gICAgICAgIGlmICghaE1h
aW5XbmQpCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7Ci0KLSAgICAgICAgaEJhY2tCdXR0b25X
bmQgPSBDcmVhdGVXaW5kb3coTCJCVVRUT04iLCBMIjwiLCBXU19DSElMRCB8IFdTX1ZJU0lCTEUg
IHwgQlNfVEVYVCwgMCwgMCwgMCwgMCwgaE1haW5XbmQsIDAsIGhJbnN0LCAwKTsKLSAgICAgICAg
aEZvcndhcmRCdXR0b25XbmQgPSBDcmVhdGVXaW5kb3coTCJCVVRUT04iLCBMIj4iLCBXU19DSElM
RCB8IFdTX1ZJU0lCTEUgfCBCU19URVhULCBzY2FsZUZhY3RvciAqIENPTlRST0xCVVRUT05fV0lE
VEgsIDAsIDAsIDAsIGhNYWluV25kLCAwLCBoSW5zdCwgMCk7Ci0gICAgICAgIGhVUkxCYXJXbmQg
PSBDcmVhdGVXaW5kb3coTCJFRElUIiwgMCwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfQk9S
REVSIHwgRVNfTEVGVCB8IEVTX0FVVE9WU0NST0xMLCBzY2FsZUZhY3RvciAqIENPTlRST0xCVVRU
T05fV0lEVEggKiAyLCAwLCAwLCAwLCBoTWFpblduZCwgMCwgaEluc3QsIDApOwotCi0gICAgICAg
IFNob3dXaW5kb3coaE1haW5XbmQsIG5DbWRTaG93KTsKLSAgICAgICAgVXBkYXRlV2luZG93KGhN
YWluV25kKTsKLSAgICB9Ci0KLSAgICBEZWZFZGl0UHJvYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8V05E
UFJPQz4oR2V0V2luZG93TG9uZ1B0cihoVVJMQmFyV25kLCBHV0xQX1dORFBST0MpKTsKLSAgICBE
ZWZCdXR0b25Qcm9jID0gcmVpbnRlcnByZXRfY2FzdDxXTkRQUk9DPihHZXRXaW5kb3dMb25nUHRy
KGhCYWNrQnV0dG9uV25kLCBHV0xQX1dORFBST0MpKTsKLSAgICBTZXRXaW5kb3dMb25nUHRyKGhV
UkxCYXJXbmQsIEdXTFBfV05EUFJPQywgcmVpbnRlcnByZXRfY2FzdDxMT05HX1BUUj4oRWRpdFBy
b2MpKTsKLSAgICBTZXRXaW5kb3dMb25nUHRyKGhCYWNrQnV0dG9uV25kLCBHV0xQX1dORFBST0Ms
IHJlaW50ZXJwcmV0X2Nhc3Q8TE9OR19QVFI+KEJhY2tCdXR0b25Qcm9jKSk7Ci0gICAgU2V0V2lu
ZG93TG9uZ1B0cihoRm9yd2FyZEJ1dHRvblduZCwgR1dMUF9XTkRQUk9DLCByZWludGVycHJldF9j
YXN0PExPTkdfUFRSPihGb3J3YXJkQnV0dG9uUHJvYykpOwotCi0gICAgU2V0Rm9jdXMoaFVSTEJh
clduZCk7Ci0KLSAgICBSRUNUIGNsaWVudFJlY3Q7Ci0gICAgOjpHZXRDbGllbnRSZWN0KGhNYWlu
V25kLCAmY2xpZW50UmVjdCk7Ci0KLSAgICBpZiAodXNlc0xheWVyZWRXZWJWaWV3KQotICAgICAg
ICBjbGllbnRSZWN0ID0geyBzX3dpbmRvd1Bvc2l0aW9uLngsIHNfd2luZG93UG9zaXRpb24ueSwg
c193aW5kb3dQb3NpdGlvbi54ICsgc193aW5kb3dTaXplLmN4LCBzX3dpbmRvd1Bvc2l0aW9uLnkg
KyBzX3dpbmRvd1NpemUuY3kgfTsKLQotICAgIE1pbmlCcm93c2VyV2ViSG9zdCogd2ViSG9zdCA9
IG51bGxwdHI7Ci0KLSAgICBJV2ViRG93bmxvYWREZWxlZ2F0ZVB0ciBkb3dubG9hZERlbGVnYXRl
OwotICAgIGRvd25sb2FkRGVsZWdhdGUuQXR0YWNoKG5ldyBXZWJEb3dubG9hZERlbGVnYXRlKCkp
OwotCi0gICAgZ01pbmlCcm93c2VyID0gbmV3IE1pbmlCcm93c2VyKGhNYWluV25kLCBoVVJMQmFy
V25kLCB1c2VzTGF5ZXJlZFdlYlZpZXcsIHBhZ2VMb2FkVGVzdGluZyk7Ci0gICAgaWYgKCFnTWlu
aUJyb3dzZXIpCi0gICAgICAgIGdvdG8gZXhpdDsKLQotICAgIGlmICghZ01pbmlCcm93c2VyLT5z
ZWVkSW5pdGlhbERlZmF1bHRQcmVmZXJlbmNlcygpKQotICAgICAgICBnb3RvIGV4aXQ7Ci0KLSAg
ICBpZiAoIWdNaW5pQnJvd3Nlci0+c2V0VG9EZWZhdWx0UHJlZmVyZW5jZXMoKSkKLSAgICAgICAg
Z290byBleGl0OworICAgIEhBQ0NFTCBoQWNjZWxUYWJsZSA9IExvYWRBY2NlbGVyYXRvcnMoaElu
c3RhbmNlLCBNQUtFSU5UUkVTT1VSQ0UoSURDX01JTklCUk9XU0VSKSk7CiAKLSAgICBIUkVTVUxU
IGhyID0gZ01pbmlCcm93c2VyLT5pbml0KCk7Ci0gICAgaWYgKEZBSUxFRChocikpCi0gICAgICAg
IGdvdG8gZXhpdDsKLQotICAgIGlmICghc2V0Q2FjaGVGb2xkZXIoKSkKLSAgICAgICAgZ290byBl
eGl0OwotCi0gICAgd2ViSG9zdCA9IG5ldyBNaW5pQnJvd3NlcldlYkhvc3QoZ01pbmlCcm93c2Vy
LCBoVVJMQmFyV25kKTsKLQotICAgIGhyID0gZ01pbmlCcm93c2VyLT5zZXRGcmFtZUxvYWREZWxl
Z2F0ZSh3ZWJIb3N0KTsKLSAgICBpZiAoRkFJTEVEKGhyKSkKLSAgICAgICAgZ290byBleGl0Owot
Ci0gICAgaHIgPSBnTWluaUJyb3dzZXItPnNldEZyYW1lTG9hZERlbGVnYXRlUHJpdmF0ZSh3ZWJI
b3N0KTsKLSAgICBpZiAoRkFJTEVEKGhyKSkKLSAgICAgICAgZ290byBleGl0OwotCi0gICAgaHIg
PSBnTWluaUJyb3dzZXItPnNldFVJRGVsZWdhdGUobmV3IFByaW50V2ViVUlEZWxlZ2F0ZSgpKTsK
LSAgICBpZiAoRkFJTEVEIChocikpCi0gICAgICAgIGdvdG8gZXhpdDsKLQotICAgIGhyID0gZ01p
bmlCcm93c2VyLT5zZXRBY2Nlc3NpYmlsaXR5RGVsZWdhdGUobmV3IEFjY2Vzc2liaWxpdHlEZWxl
Z2F0ZSgpKTsKLSAgICBpZiAoRkFJTEVEIChocikpCi0gICAgICAgIGdvdG8gZXhpdDsKLQotICAg
IGhyID0gZ01pbmlCcm93c2VyLT5zZXRSZXNvdXJjZUxvYWREZWxlZ2F0ZShuZXcgUmVzb3VyY2VM
b2FkRGVsZWdhdGUoZ01pbmlCcm93c2VyKSk7Ci0gICAgaWYgKEZBSUxFRChocikpCi0gICAgICAg
IGdvdG8gZXhpdDsKLQotICAgIGhyID0gZ01pbmlCcm93c2VyLT5zZXREb3dubG9hZERlbGVnYXRl
KGRvd25sb2FkRGVsZWdhdGUpOwotICAgIGlmIChGQUlMRUQoaHIpKQotICAgICAgICBnb3RvIGV4
aXQ7Ci0KLSAgICBociA9IGdNaW5pQnJvd3Nlci0+cHJlcGFyZVZpZXdzKGhNYWluV25kLCBjbGll
bnRSZWN0LCByZXF1ZXN0ZWRVUkwuR2V0QlNUUigpLCBnVmlld1dpbmRvdyk7Ci0gICAgaWYgKEZB
SUxFRChocikgfHwgIWdWaWV3V2luZG93KQotICAgICAgICBnb3RvIGV4aXQ7Ci0KLSAgICBpZiAo
Z01pbmlCcm93c2VyLT51c2VzTGF5ZXJlZFdlYlZpZXcoKSkKLSAgICAgICAgc3ViY2xhc3NGb3JM
YXllcmVkV2luZG93KCk7Ci0KLSAgICByZXNpemVTdWJWaWV3cygpOwotCi0gICAgU2hvd1dpbmRv
dyhnVmlld1dpbmRvdywgbkNtZFNob3cpOwotICAgIFVwZGF0ZVdpbmRvdyhnVmlld1dpbmRvdyk7
Ci0KLSAgICBoQWNjZWxUYWJsZSA9IExvYWRBY2NlbGVyYXRvcnMoaEluc3QsIE1BS0VJTlRSRVNP
VVJDRShJRENfTUlOSUJST1dTRVIpKTsKLQotICAgIGlmIChyZXF1ZXN0ZWRVUkwubGVuZ3RoKCkp
Ci0gICAgICAgIGxvYWRVUkwocmVxdWVzdGVkVVJMLkdldEJTVFIoKSk7CisgICAgZ0Jyb3dzZXJX
aW5kb3cgPSBuZXcgQnJvd3NlcldpbmRvdyhuQ21kU2hvdywgdXNlc0xheWVyZWRXZWJWaWV3LCBw
YWdlTG9hZFRlc3RpbmcsIHJlcXVlc3RlZFVSTCwgdXNlV0syKTsKIAogI3ByYWdtYSB3YXJuaW5n
KGRpc2FibGU6NDUwOSkKIAogICAgIC8vIE1haW4gbWVzc2FnZSBsb29wOgorICAgIE1TRyBtc2cg
PSB7IH07CiAgICAgX190cnkgewotICAgICAgICBfY29tX3B0cl90PF9jb21fSUlJRDxJV2ViS2l0
TWVzc2FnZUxvb3AsICZfX3V1aWRvZihJV2ViS2l0TWVzc2FnZUxvb3ApPj4gbWVzc2FnZUxvb3A7
Ci0KLSAgICAgICAgaHIgPSBXZWJLaXRDcmVhdGVJbnN0YW5jZShDTFNJRF9XZWJLaXRNZXNzYWdl
TG9vcCwgMCwgSUlEX0lXZWJLaXRNZXNzYWdlTG9vcCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+
KCZtZXNzYWdlTG9vcC5HZXRJbnRlcmZhY2VQdHIoKSkpOwotICAgICAgICBpZiAoRkFJTEVEKGhy
KSkKLSAgICAgICAgICAgIGdvdG8gZXhpdDsKLQotICAgICAgICBtZXNzYWdlTG9vcC0+cnVuKGhB
Y2NlbFRhYmxlKTsKLQorICAgICAgICB3aGlsZSAoR2V0TWVzc2FnZSgmbXNnLCAwLCAwLCAwKSkg
eworI2lmIFVTRShDRikKKyAgICAgICAgICAgIENGUnVuTG9vcFJ1bkluTW9kZShrQ0ZSdW5Mb29w
RGVmYXVsdE1vZGUsIDAsIHRydWUpOworI2VuZGlmCisgICAgICAgICAgICBpZiAoIVRyYW5zbGF0
ZUFjY2VsZXJhdG9yKG1zZy5od25kLCBoQWNjZWxUYWJsZSwgJm1zZykpIHsKKyAgICAgICAgICAg
ICAgICBUcmFuc2xhdGVNZXNzYWdlKCZtc2cpOworICAgICAgICAgICAgICAgIERpc3BhdGNoTWVz
c2FnZSgmbXNnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0gX19leGNlcHQoY3Jl
YXRlQ3Jhc2hSZXBvcnQoR2V0RXhjZXB0aW9uSW5mb3JtYXRpb24oKSksIEVYQ0VQVElPTl9FWEVD
VVRFX0hBTkRMRVIpIHsgfQogCi1leGl0OgogICAgIHNodXREb3duV2ViS2l0KCk7CiAjaWZkZWYg
X0NSVERCR19NQVBfQUxMT0MKICAgICBfQ3J0RHVtcE1lbW9yeUxlYWtzKCk7CiAjZW5kaWYKIAor
ICAgIGRlbGV0ZSBnQnJvd3NlcldpbmRvdzsKKwogICAgIC8vIFNodXQgZG93biBDT00uCiAgICAg
T2xlVW5pbml0aWFsaXplKCk7CiAKLSAgICBkZWxldGUgZ01pbmlCcm93c2VyOwotICAgIAogICAg
IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KG1zZy53UGFyYW0pOwogfQogCi1BVE9NIE15UmVnaXN0
ZXJDbGFzcyhISU5TVEFOQ0UgaEluc3RhbmNlKQorZXh0ZXJuICJDIiBfX2RlY2xzcGVjKGRsbGV4
cG9ydCkgaW50IFdJTkFQSSBkbGxMYXVuY2hlckVudHJ5UG9pbnQoSElOU1RBTkNFIGhJbnN0YW5j
ZSwgSElOU1RBTkNFIGhQcmV2SW5zdGFuY2UsIExQV1NUUiBscHN0ckNtZExpbmUsIGludCBuQ21k
U2hvdykKIHsKLSAgICBXTkRDTEFTU0VYIHdjZXg7Ci0KLSAgICB3Y2V4LmNiU2l6ZSA9IHNpemVv
ZihXTkRDTEFTU0VYKTsKLQotICAgIHdjZXguc3R5bGUgICAgICAgICAgPSBDU19IUkVEUkFXIHwg
Q1NfVlJFRFJBVzsKLSAgICB3Y2V4LmxwZm5XbmRQcm9jICAgID0gV25kUHJvYzsKLSAgICB3Y2V4
LmNiQ2xzRXh0cmEgICAgID0gMDsKLSAgICB3Y2V4LmNiV25kRXh0cmEgICAgID0gMDsKLSAgICB3
Y2V4LmhJbnN0YW5jZSAgICAgID0gaEluc3RhbmNlOwotICAgIHdjZXguaEljb24gICAgICAgICAg
PSBMb2FkSWNvbihoSW5zdGFuY2UsIE1BS0VJTlRSRVNPVVJDRShJRElfTUlOSUJST1dTRVIpKTsK
LSAgICB3Y2V4LmhDdXJzb3IgICAgICAgID0gTG9hZEN1cnNvcigwLCBJRENfQVJST1cpOwotICAg
IHdjZXguaGJyQmFja2dyb3VuZCAgPSAwOwotICAgIHdjZXgubHBzek1lbnVOYW1lICAgPSBNQUtF
SU5UUkVTT1VSQ0UoSURDX01JTklCUk9XU0VSKTsKLSAgICB3Y2V4Lmxwc3pDbGFzc05hbWUgID0g
c3pXaW5kb3dDbGFzczsKLSAgICB3Y2V4LmhJY29uU20gICAgICAgID0gTG9hZEljb24od2NleC5o
SW5zdGFuY2UsIE1BS0VJTlRSRVNPVVJDRShJRElfU01BTEwpKTsKLQotICAgIHJldHVybiBSZWdp
c3RlckNsYXNzRXgoJndjZXgpOworICAgIHJldHVybiB3V2luTWFpbihoSW5zdGFuY2UsIGhQcmV2
SW5zdGFuY2UsIGxwc3RyQ21kTGluZSwgbkNtZFNob3cpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>338636</attachid>
            <date>2018-04-23 21:06:01 -0700</date>
            <delta_ts>2018-06-11 18:16:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-184770-20180424130559.patch</filename>
            <type>text/plain</type>
            <size>98861</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMwOTQxCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZmJkZWQ5NGU2MmEwOGU4YzM5MDJmOTYzMzUxNWIwYTlh
OWVjZWRhZi4uOGIyMzkxMzkxYjRlOGU3YmIzMjZjNWVjMmY5Mzc1ZmEzMGMwYjMzNSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0
OCBAQAorMjAxOC0wNC0yMiAgRnVqaWkgSGlyb25vcmkgIDxIaXJvbm9yaS5GdWppaUBzb255LmNv
bT4KKworICAgICAgICBbV2luXSBNaW5pQnJvd3NlciBzaG91bGQgc3VwcG9ydCBib3RoIFdlYktp
dExlZ2FjeSBhbmQgbW9kZXJuIFdlYktpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTg0NzcwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkZWQgYW4gYWJzdHJhY3QgY2xhc3MgQ29udGVudFdpbmRvdyB0
byBzd2l0Y2ggV2ViS2l0TGVnYWN5IGFuZAorICAgICAgICBtb2Rlcm4gV2ViS2l0IFdlYlZpZXcu
CisKKyAgICAgICAgQWRkZWQgYSBjbGFzcyBCcm93c2VyV2luZG93IHRvIG1hbmFnZSB0aGUgbWFp
biB3aW5kb3cuCisKKyAgICAgICAgRXhpc3RpbmcgTWluaUJyb3dzZXIgY2xhc3MgaW1wbGVtZW50
cyBDb250ZW50V2luZG93IGludGVyZmFjZSBieQorICAgICAgICB1c2luZyBXZWJLaXRMZWdhY3kg
V2ViVmlldy4gQSBuZXcgY2xhc3MgV0syQ29udGVudFdpbmRvdworICAgICAgICBpbXBsZW1lbnRz
IGl0IGJ5IHVzaW5nIG1vZGVybiBXZWJLaXQgV2ViVmlldy4KKworICAgICAgICBBZGRlZCAtLXdr
MiBvcHRpb24gdG8gdXNlIHRoZSBtb2Rlcm4gV2ViS2l0LgorCisgICAgICAgIFRoaXMgY2hhbmdl
IHNpbXBsaWZpZWQgdGhlIGxheWVyZWQgd2luZG93IGltcGxlbWVudGF0aW9uLiBUaGUgbWFpbgor
ICAgICAgICB3aW5kb3cgaXMgY3JlYXRlZCBldmVuIGZvciB0aGUgbGF5ZXJlZCB3aW5kb3cgbW9k
ZSB0byBjb250cm9sIHRoZQorICAgICAgICBsYXllcmVkIHdpbmRvdy4gUmVwbGFjaW5nIFduZFBy
b2Mgd2FzIGNoYW5nZWQgdG8gYW5vdGhlciBXbmRQcm9jCisgICAgICAgIGluc3RlYWQgb2Ygc2hh
cmluZyBXbmRQcm9jIHdpdGggdGhlIG1haW4gd2luZG93LgorCisgICAgICAgICogTWluaUJyb3dz
ZXIvd2luL0Jyb3dzZXJXaW5kb3cuY3BwOiBBZGRlZC4KKyAgICAgICAgKE15UmVnaXN0ZXJDbGFz
cyk6CisgICAgICAgIChCcm93c2VyV2luZG93OjpCcm93c2VyV2luZG93KToKKyAgICAgICAgKEJy
b3dzZXJXaW5kb3c6OnVwZGF0ZURldmljZVNjYWxlRmFjdG9yKToKKyAgICAgICAgKEJyb3dzZXJX
aW5kb3c6OnJlc2l6ZVN1YlZpZXdzKToKKyAgICAgICAgKGF1dGhEaWFsb2dQcm9jKToKKyAgICAg
ICAgKEJyb3dzZXJXaW5kb3c6OmRpc3BsYXlBdXRoRGlhbG9nKToKKyAgICAgICAgKiBNaW5pQnJv
d3Nlci93aW4vQnJvd3NlcldpbmRvdy5oOiBBZGRlZC4KKyAgICAgICAgKEJyb3dzZXJXaW5kb3c6
OnVybEJhckZvbnQpOgorICAgICAgICAoQnJvd3NlcldpbmRvdzo6Y29udGVudFdpbmRvdyk6Cisg
ICAgICAgICogTWluaUJyb3dzZXIvd2luL0NNYWtlTGlzdHMudHh0OgorICAgICAgICAqIE1pbmlC
cm93c2VyL3dpbi9Db21tb24uY3BwOgorICAgICAgICAoZ2V0QXBwRGF0YUZvbGRlcik6CisgICAg
ICAgIChwcm9jZXNzQ3Jhc2hSZXBvcnQpOgorICAgICAgICAoc2V0VXNlckFnZW50KToKKyAgICAg
ICAgKFRvZ2dsZU1lbnVJdGVtKToKKyAgICAgICAgKEJyb3dzZXJXaW5kb3c6OlduZFByb2MpOgor
ICAgICAgICAoQ2FjaGVzKToKKyAgICAgICAgKEN1c3RvbVVzZXJBZ2VudCk6CisgICAgICAgIChs
b2FkVVJMKToKKyAgICAgICAgKHBhcnNlQ29tbWFuZExpbmUpOgorICAgICAgICAoc3ViY2xhc3NG
b3JMYXllcmVkV2luZG93KTogRGVsZXRlZC4KKyAgICAgICAgKGNvbXB1dGVGdWxsRGVza3RvcEZy
YW1lKTogRGVsZXRlZC4KKyAgICAgICAgKHNldENhY2hlRm9sZGVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKEFib3J0UHJvYyk6IERlbGV0ZWQuCisgICAgICAgIChnZXRQcmludGVyREMpOiBEZWxldGVk
LgorICAgICAgICAoaW5pdERvY1N0cnVjdCk6IERlbGV0ZWQuCisgICAgICAgIChQcmludFZpZXcp
OiBEZWxldGVkLgorICAgICAgICAoV25kUHJvYyk6IERlbGV0ZWQuCisgICAgICAgIChEaXNwbGF5
QXV0aERpYWxvZyk6IERlbGV0ZWQuCisgICAgICAgIChBdXRoRGlhbG9nUHJvYyk6IERlbGV0ZWQu
CisgICAgICAgIChzZXRXaW5kb3dUZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKHVwZGF0ZVN0YXRp
c3RpY3MpOiBEZWxldGVkLgorICAgICAgICAoZGxsTGF1bmNoZXJFbnRyeVBvaW50KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBNaW5pQnJvd3Nlci93aW4vQ29udGVudFdpbmRvdy5oOiBBZGRlZC4KKyAg
ICAgICAgKENvbnRlbnRXaW5kb3c6On5Db250ZW50V2luZG93KToKKyAgICAgICAgKiBNaW5pQnJv
d3Nlci93aW4vTWluaUJyb3dzZXIuY3BwOgorICAgICAgICAoTWluaUJyb3dzZXI6OnNldENhY2hl
Rm9sZGVyKToKKyAgICAgICAgKE1pbmlCcm93c2VyOjpNaW5pQnJvd3Nlcik6CisgICAgICAgIChN
aW5pQnJvd3Nlcjo6aW5pdCk6CisgICAgICAgIChNaW5pQnJvd3Nlcjo6cHJlcGFyZVZpZXdzKToK
KyAgICAgICAgKE1pbmlCcm93c2VyOjpsb2FkSFRNTFN0cmluZyk6CisgICAgICAgIChNaW5pQnJv
d3Nlcjo6bmF2aWdhdGVGb3J3YXJkT3JCYWNrd2FyZCk6CisgICAgICAgIChNaW5pQnJvd3Nlcjo6
bmF2aWdhdGVUb0hpc3RvcnkpOgorICAgICAgICAoTWluaUJyb3dzZXI6OmxvYWRVUkwpOgorICAg
ICAgICAoTWluaUJyb3dzZXI6OnNldFVzZXJBZ2VudCk6CisgICAgICAgIChNaW5pQnJvd3Nlcjo6
dXNlckFnZW50KToKKyAgICAgICAgKHNldFdpbmRvd1RleHQpOgorICAgICAgICAoTWluaUJyb3dz
ZXI6OnVwZGF0ZVN0YXRpc3RpY3MpOgorICAgICAgICAoQWJvcnRQcm9jKToKKyAgICAgICAgKGdl
dFByaW50ZXJEQyk6CisgICAgICAgIChpbml0RG9jU3RydWN0KToKKyAgICAgICAgKE1pbmlCcm93
c2VyOjpwcmludCk6CisgICAgICAgIChNaW5pQnJvd3Nlcjo6c2V0QVZGb3VuZGF0aW9uRW5hYmxl
ZCk6CisgICAgICAgIChNaW5pQnJvd3Nlcjo6c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJs
ZWQpOgorICAgICAgICAoTWluaUJyb3dzZXI6OnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVk
KToKKyAgICAgICAgKE1pbmlCcm93c2VyOjpzZXRGdWxsU2NyZWVuRW5hYmxlZCk6CisgICAgICAg
IChNaW5pQnJvd3Nlcjo6c2V0SmF2YVNjcmlwdEVuYWJsZWQpOgorICAgICAgICAoTWluaUJyb3dz
ZXI6OnNldExvYWRzSW1hZ2VzQXV0b21hdGljYWxseSk6CisgICAgICAgIChNaW5pQnJvd3Nlcjo6
c2V0TG9jYWxGaWxlUmVzdHJpY3Rpb25zRW5hYmxlZCk6CisgICAgICAgIChNaW5pQnJvd3Nlcjo6
c2V0U2hvdWxkSW52ZXJ0Q29sb3JzKToKKyAgICAgICAgKE1pbmlCcm93c2VyOjpzZXRTaG93Q29t
cG9zaXRpbmdCb3JkZXJzKToKKyAgICAgICAgKE1pbmlCcm93c2VyOjpzZXRTaG93VGlsZWRTY3Jv
bGxpbmdJbmRpY2F0b3IpOgorICAgICAgICAodmlld1duZFByb2MpOgorICAgICAgICAoTWluaUJy
b3dzZXI6OnN1YmNsYXNzRm9yTGF5ZXJlZFdpbmRvdyk6CisgICAgICAgIChNaW5pQnJvd3Nlcjo6
Z2VuZXJhdGVGb250Rm9yU2NhbGVGYWN0b3IpOiBEZWxldGVkLgorICAgICAgICAoTWluaUJyb3dz
ZXI6OnVwZGF0ZURldmljZVNjYWxlRmFjdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBNaW5pQnJv
d3Nlci93aW4vTWluaUJyb3dzZXIuaDoKKyAgICAgICAgKE1pbmlCcm93c2VyOjpoYXNXZWJWaWV3
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKE1pbmlCcm93c2VyOjpkZXZpY2VTY2FsZUZhY3Rv
cik6IERlbGV0ZWQuCisgICAgICAgIChNaW5pQnJvd3Nlcjo6dXJsQmFyRm9udCk6IERlbGV0ZWQu
CisgICAgICAgICogTWluaUJyb3dzZXIvd2luL01pbmlCcm93c2VyUmVwbGFjZS5oOgorICAgICAg
ICAocHJvY2Vzc0NyYXNoUmVwb3J0KTogRGVsZXRlZC4KKyAgICAgICAgKiBNaW5pQnJvd3Nlci93
aW4vUGFnZUxvYWRUZXN0Q2xpZW50LmNwcDoKKyAgICAgICAgKFBhZ2VMb2FkVGVzdENsaWVudDo6
cGFnZUxvYWRFbmRlZEF0VGltZSk6CisgICAgICAgICogTWluaUJyb3dzZXIvd2luL1Jlc291cmNl
TG9hZERlbGVnYXRlLmNwcDoKKyAgICAgICAgKFJlc291cmNlTG9hZERlbGVnYXRlOjpkaWRSZWNl
aXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UpOgorICAgICAgICAqIE1pbmlCcm93c2VyL3dpbi9X
SzJDb250ZW50V2luZG93LmNwcDogQWRkZWQuCisgICAgICAgIChjcmVhdGVTdHJpbmcpOgorICAg
ICAgICAodG9VdGY4KToKKyAgICAgICAgKGZyb21VdGY4KToKKyAgICAgICAgKGNyZWF0ZVdLU3Ry
aW5nKToKKyAgICAgICAgKGNyZWF0ZVdLVVJMKToKKyAgICAgICAgKFdLMkNvbnRlbnRXaW5kb3c6
OldLMkNvbnRlbnRXaW5kb3cpOgorICAgICAgICAoV0syQ29udGVudFdpbmRvdzo6bG9hZFVSTCk6
CisgICAgICAgIChXSzJDb250ZW50V2luZG93Ojpsb2FkSFRNTFN0cmluZyk6CisgICAgICAgIChX
SzJDb250ZW50V2luZG93OjpwcmludCk6CisgICAgICAgIChXSzJDb250ZW50V2luZG93OjpsYXVu
Y2hJbnNwZWN0b3IpOgorICAgICAgICAoV0syQ29udGVudFdpbmRvdzo6bmF2aWdhdGVGb3J3YXJk
T3JCYWNrd2FyZCk6CisgICAgICAgIChXSzJDb250ZW50V2luZG93OjpuYXZpZ2F0ZVRvSGlzdG9y
eSk6CisgICAgICAgIChXSzJDb250ZW50V2luZG93OjpzZXRBVkZvdW5kYXRpb25FbmFibGVkKToK
KyAgICAgICAgKFdLMkNvbnRlbnRXaW5kb3c6OnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFi
bGVkKToKKyAgICAgICAgKFdLMkNvbnRlbnRXaW5kb3c6OnNldEF1dGhvckFuZFVzZXJTdHlsZXNF
bmFibGVkKToKKyAgICAgICAgKFdLMkNvbnRlbnRXaW5kb3c6OnNldEZ1bGxTY3JlZW5FbmFibGVk
KToKKyAgICAgICAgKFdLMkNvbnRlbnRXaW5kb3c6OnNldEphdmFTY3JpcHRFbmFibGVkKToKKyAg
ICAgICAgKFdLMkNvbnRlbnRXaW5kb3c6OnNldExvYWRzSW1hZ2VzQXV0b21hdGljYWxseSk6Cisg
ICAgICAgIChXSzJDb250ZW50V2luZG93OjpzZXRMb2NhbEZpbGVSZXN0cmljdGlvbnNFbmFibGVk
KToKKyAgICAgICAgKFdLMkNvbnRlbnRXaW5kb3c6OnNldFNob3VsZEludmVydENvbG9ycyk6Cisg
ICAgICAgIChXSzJDb250ZW50V2luZG93OjpzZXRTaG93Q29tcG9zaXRpbmdCb3JkZXJzKToKKyAg
ICAgICAgKFdLMkNvbnRlbnRXaW5kb3c6OnNldFNob3dUaWxlZFNjcm9sbGluZ0luZGljYXRvcik6
CisgICAgICAgIChXSzJDb250ZW50V2luZG93Ojpnb0JhY2spOgorICAgICAgICAoV0syQ29udGVu
dFdpbmRvdzo6Z29Gb3J3YXJkKToKKyAgICAgICAgKFdLMkNvbnRlbnRXaW5kb3c6OnNldFVzZXJB
Z2VudCk6CisgICAgICAgIChXSzJDb250ZW50V2luZG93Ojp1c2VyQWdlbnQpOgorICAgICAgICAo
V0syQ29udGVudFdpbmRvdzo6cmVzZXRab29tKToKKyAgICAgICAgKFdLMkNvbnRlbnRXaW5kb3c6
Onpvb21Jbik6CisgICAgICAgIChXSzJDb250ZW50V2luZG93Ojp6b29tT3V0KToKKyAgICAgICAg
KFdLMkNvbnRlbnRXaW5kb3c6OnNob3dMYXllclRyZWUpOgorICAgICAgICAoV0syQ29udGVudFdp
bmRvdzo6dXBkYXRlU3RhdGlzdGljcyk6CisgICAgICAgIChXSzJDb250ZW50V2luZG93Ojpod25k
KToKKyAgICAgICAgKHRvQ29udGVudFdpbmRvdyk6CisgICAgICAgIChXSzJDb250ZW50V2luZG93
OjpkaWRSZWNlaXZlVGl0bGVGb3JGcmFtZSk6CisgICAgICAgIChXSzJDb250ZW50V2luZG93Ojpk
aWRGYWlsUHJvdmlzaW9uYWxMb2FkV2l0aEVycm9yRm9yRnJhbWUpOgorICAgICAgICAoV0syQ29u
dGVudFdpbmRvdzo6ZGlkQ29tbWl0TG9hZEZvckZyYW1lKToKKyAgICAgICAgKFdLMkNvbnRlbnRX
aW5kb3c6OmRpZENoYW5nZVByb2dyZXNzKToKKyAgICAgICAgKFdLMkNvbnRlbnRXaW5kb3c6OmRp
ZFNhbWVEb2N1bWVudE5hdmlnYXRpb25Gb3JGcmFtZSk6CisgICAgICAgICogTWluaUJyb3dzZXIv
d2luL1dLMkNvbnRlbnRXaW5kb3cuaDogQWRkZWQuCisgICAgICAgICogTWluaUJyb3dzZXIvd2lu
L1dpbk1haW4uY3BwOgorICAgICAgICAod1dpbk1haW4pOgorICAgICAgICAoZGxsTGF1bmNoZXJF
bnRyeVBvaW50KToKKyAgICAgICAgKE15UmVnaXN0ZXJDbGFzcyk6IERlbGV0ZWQuCisKIDIwMTgt
MDQtMjMgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAg
W0V4dHJhIHpvb20gbW9kZV0gUkVHUkVTU0lPTigyMzA4NjApIFVuYWJsZSB0byBjaGFuZ2UgdGlt
ZSBpbnB1dCB2YWx1ZXMgdXNpbmcgVUkKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3dp
bi9Ccm93c2VyV2luZG93LmNwcCBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9Ccm93c2VyV2luZG93
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4wYmE4NzFiZWE1ZWVjOTUzMWI2MDU2M2IyYTY1YjMyZjljMDhkYTUw
Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvd2luL0Jyb3dzZXJXaW5kb3cu
Y3BwCkBAIC0wLDAgKzEsMjEyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4LCAy
MDEzLTIwMTUgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwOSwgMjAxMSBCcmVudCBGdWxnaGFtLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMSBBcHBjZWxlcmF0b3IsIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBBbGV4IENocmlzdGVuc2VuLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4IFNvbnkgSW50ZXJhY3RpdmUg
RW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworI2luY2x1ZGUgInN0ZGFmeC5oIgorCisjaW5jbHVkZSAiQnJvd3NlcldpbmRvdy5oIgor
I2luY2x1ZGUgIk1pbmlCcm93c2VyLmgiCisjaW5jbHVkZSAiTWluaUJyb3dzZXJMaWJSZXNvdXJj
ZS5oIgorI2luY2x1ZGUgIk1pbmlCcm93c2VyUmVwbGFjZS5oIgorCisjaWYgRU5BQkxFKFdFQktJ
VCkKKyNpbmNsdWRlICJXSzJDb250ZW50V2luZG93LmgiCisjZW5kaWYKKworI2RlZmluZSBVUkxC
QVJfSEVJR0hUICAyNAorI2RlZmluZSBDT05UUk9MQlVUVE9OX1dJRFRIIDI0CisjZGVmaW5lIE1B
WF9MT0FEU1RSSU5HIDEwMAorVENIQVIgc3pUaXRsZVtNQVhfTE9BRFNUUklOR107IC8vIFRoZSB0
aXRsZSBiYXIgdGV4dAorVENIQVIgc3pXaW5kb3dDbGFzc1tNQVhfTE9BRFNUUklOR107IC8vIHRo
ZSBtYWluIHdpbmRvdyBjbGFzcyBuYW1lCisKK2V4dGVybiBISU5TVEFOQ0UgaEluc3Q7CitleHRl
cm4gV05EUFJPQyBEZWZFZGl0UHJvYzsKK2V4dGVybiBXTkRQUk9DIERlZkJ1dHRvblByb2M7Citl
eHRlcm4gQnJvd3NlcldpbmRvdyogZ0Jyb3dzZXJXaW5kb3c7CitleHRlcm4gQ29udGVudFdpbmRv
dyogZ01pbmlCcm93c2VyOworCit2b2lkIGxvYWRVUkwoQlNUUiBwYXNzZWRVUkwpOworTFJFU1VM
VCBDQUxMQkFDSyBFZGl0UHJvYyhIV05ELCBVSU5ULCBXUEFSQU0sIExQQVJBTSk7CitMUkVTVUxU
IENBTExCQUNLIEJhY2tCdXR0b25Qcm9jKEhXTkQsIFVJTlQsIFdQQVJBTSwgTFBBUkFNKTsKK0xS
RVNVTFQgQ0FMTEJBQ0sgRm9yd2FyZEJ1dHRvblByb2MoSFdORCwgVUlOVCwgV1BBUkFNLCBMUEFS
QU0pOworCituYW1lc3BhY2UgV2ViQ29yZSB7CitmbG9hdCBkZXZpY2VTY2FsZUZhY3RvckZvcldp
bmRvdyhIV05EKTsKK30KKworc3RhdGljIEFUT00gTXlSZWdpc3RlckNsYXNzKEhJTlNUQU5DRSBo
SW5zdGFuY2UpCit7CisgICAgV05EQ0xBU1NFWCB3Y2V4OworCisgICAgd2NleC5jYlNpemUgPSBz
aXplb2YoV05EQ0xBU1NFWCk7CisKKyAgICB3Y2V4LnN0eWxlICAgICAgICAgID0gQ1NfSFJFRFJB
VyB8IENTX1ZSRURSQVc7CisgICAgd2NleC5scGZuV25kUHJvYyAgICA9IEJyb3dzZXJXaW5kb3c6
OlduZFByb2M7CisgICAgd2NleC5jYkNsc0V4dHJhICAgICA9IDA7CisgICAgd2NleC5jYlduZEV4
dHJhICAgICA9IDA7CisgICAgd2NleC5oSW5zdGFuY2UgICAgICA9IGhJbnN0YW5jZTsKKyAgICB3
Y2V4LmhJY29uICAgICAgICAgID0gTG9hZEljb24oaEluc3RhbmNlLCBNQUtFSU5UUkVTT1VSQ0Uo
SURJX01JTklCUk9XU0VSKSk7CisgICAgd2NleC5oQ3Vyc29yICAgICAgICA9IExvYWRDdXJzb3Io
MCwgSURDX0FSUk9XKTsKKyAgICB3Y2V4LmhickJhY2tncm91bmQgID0gMDsKKyAgICB3Y2V4Lmxw
c3pNZW51TmFtZSAgID0gTUFLRUlOVFJFU09VUkNFKElEQ19NSU5JQlJPV1NFUik7CisgICAgd2Nl
eC5scHN6Q2xhc3NOYW1lICA9IHN6V2luZG93Q2xhc3M7CisgICAgd2NleC5oSWNvblNtICAgICAg
ICA9IExvYWRJY29uKHdjZXguaEluc3RhbmNlLCBNQUtFSU5UUkVTT1VSQ0UoSURJX1NNQUxMKSk7
CisKKyAgICByZXR1cm4gUmVnaXN0ZXJDbGFzc0V4KCZ3Y2V4KTsKK30KKworQnJvd3NlcldpbmRv
dzo6QnJvd3NlcldpbmRvdyhpbnQgbkNtZFNob3csIGJvb2wgdXNlc0xheWVyZWRXZWJWaWV3LCBi
b29sIHBhZ2VMb2FkVGVzdGluZywgX2JzdHJfdCByZXF1ZXN0ZWRVUkwsIGJvb2wgdXNlV0syKQor
ICAgIDogbV91c2VzTGF5ZXJlZFdlYlZpZXcodXNlc0xheWVyZWRXZWJWaWV3KQoreworICAgIC8v
IEluaXRpYWxpemUgZ2xvYmFsIHN0cmluZ3MKKyAgICBMb2FkU3RyaW5nKGhJbnN0LCBJRFNfQVBQ
X1RJVExFLCBzelRpdGxlLCBNQVhfTE9BRFNUUklORyk7CisgICAgTG9hZFN0cmluZyhoSW5zdCwg
SURDX01JTklCUk9XU0VSLCBzeldpbmRvd0NsYXNzLCBNQVhfTE9BRFNUUklORyk7CisgICAgTXlS
ZWdpc3RlckNsYXNzKGhJbnN0KTsKKworICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gV2ViQ29yZTo6
ZGV2aWNlU2NhbGVGYWN0b3JGb3JXaW5kb3cobnVsbHB0cik7CisKKyAgICBtX2hNYWluV25kID0g
Q3JlYXRlV2luZG93KHN6V2luZG93Q2xhc3MsIHN6VGl0bGUsIFdTX09WRVJMQVBQRURXSU5ET1cg
fCBXU19WSVNJQkxFLAorICAgICAgICBDV19VU0VERUZBVUxULCAwLCBDV19VU0VERUZBVUxULCAw
LCAwLCAwLCBoSW5zdCwgMCk7CisKKyAgICBtX2hCYWNrQnV0dG9uV25kID0gQ3JlYXRlV2luZG93
KEwiQlVUVE9OIiwgTCI8IiwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFICB8IEJTX1RFWFQsIDAsIDAs
IDAsIDAsIG1faE1haW5XbmQsIDAsIGhJbnN0LCAwKTsKKyAgICBtX2hGb3J3YXJkQnV0dG9uV25k
ID0gQ3JlYXRlV2luZG93KEwiQlVUVE9OIiwgTCI+IiwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwg
QlNfVEVYVCwgc2NhbGVGYWN0b3IgKiBDT05UUk9MQlVUVE9OX1dJRFRILCAwLCAwLCAwLCBtX2hN
YWluV25kLCAwLCBoSW5zdCwgMCk7CisgICAgbV9oVVJMQmFyV25kID0gQ3JlYXRlV2luZG93KEwi
RURJVCIsIDAsIFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX0JPUkRFUiB8IEVTX0xFRlQgfCBF
U19BVVRPVlNDUk9MTCwgc2NhbGVGYWN0b3IgKiBDT05UUk9MQlVUVE9OX1dJRFRIICogMiwgMCwg
MCwgMCwgbV9oTWFpblduZCwgMCwgaEluc3QsIDApOworCisgICAgdXBkYXRlRGV2aWNlU2NhbGVG
YWN0b3IoKTsKKworICAgIERlZkVkaXRQcm9jID0gcmVpbnRlcnByZXRfY2FzdDxXTkRQUk9DPihH
ZXRXaW5kb3dMb25nUHRyKG1faFVSTEJhclduZCwgR1dMUF9XTkRQUk9DKSk7CisgICAgRGVmQnV0
dG9uUHJvYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8V05EUFJPQz4oR2V0V2luZG93TG9uZ1B0cihtX2hC
YWNrQnV0dG9uV25kLCBHV0xQX1dORFBST0MpKTsKKyAgICBTZXRXaW5kb3dMb25nUHRyKG1faFVS
TEJhclduZCwgR1dMUF9XTkRQUk9DLCByZWludGVycHJldF9jYXN0PExPTkdfUFRSPihFZGl0UHJv
YykpOworICAgIFNldFdpbmRvd0xvbmdQdHIobV9oQmFja0J1dHRvblduZCwgR1dMUF9XTkRQUk9D
LCByZWludGVycHJldF9jYXN0PExPTkdfUFRSPihCYWNrQnV0dG9uUHJvYykpOworICAgIFNldFdp
bmRvd0xvbmdQdHIobV9oRm9yd2FyZEJ1dHRvblduZCwgR1dMUF9XTkRQUk9DLCByZWludGVycHJl
dF9jYXN0PExPTkdfUFRSPihGb3J3YXJkQnV0dG9uUHJvYykpOworCisgICAgU2V0Rm9jdXMobV9o
VVJMQmFyV25kKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxDb250ZW50V2luZG93PiAoKmZhY3Rv
cnkpKEhXTkQsIEhXTkQsIGJvb2wsIGJvb2wpOworICAgIGZhY3RvcnkgPSBbXShIV05EIG1haW5X
bmQsIEhXTkQgdXJsQmFyV25kLCBib29sIHVzZUxheWVyZWRXZWJWaWV3LCBib29sIHBhZ2VMb2Fk
VGVzdGluZykgLT4gc3RkOjp1bmlxdWVfcHRyPENvbnRlbnRXaW5kb3c+IHsKKyAgICAgICAgcmV0
dXJuIHN0ZDo6bWFrZV91bmlxdWU8TWluaUJyb3dzZXI+KG1haW5XbmQsIHVybEJhclduZCwgdXNl
TGF5ZXJlZFdlYlZpZXcsIHBhZ2VMb2FkVGVzdGluZyk7CisgICAgfTsKKyNpZiBFTkFCTEUoV0VC
S0lUKQorICAgIGlmICh1c2VXSzIpIHsKKyAgICAgICAgZmFjdG9yeSA9IFtdKEhXTkQgbWFpbldu
ZCwgSFdORCB1cmxCYXJXbmQsIGJvb2wsIGJvb2wpIC0+IHN0ZDo6dW5pcXVlX3B0cjxDb250ZW50
V2luZG93PiB7CisgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxXSzJDb250ZW50
V2luZG93PihtYWluV25kLCB1cmxCYXJXbmQpOworICAgICAgICB9OworICAgIH0KKyNlbmRpZgor
ICAgIG1fY29udGVudFdpbmRvdyA9IGZhY3RvcnkodXNlc0xheWVyZWRXZWJWaWV3ID8gbnVsbHB0
ciA6IG1faE1haW5XbmQsIG1faFVSTEJhclduZCwgdXNlc0xheWVyZWRXZWJWaWV3LCBwYWdlTG9h
ZFRlc3RpbmcpOworICAgIGdNaW5pQnJvd3NlciA9IG1fY29udGVudFdpbmRvdy5nZXQoKTsKKwor
ICAgIHJlc2l6ZVN1YlZpZXdzKCk7CisgICAgU2hvd1dpbmRvdyhtX2hNYWluV25kLCBuQ21kU2hv
dyk7CisKKyAgICBpZiAocmVxdWVzdGVkVVJMLmxlbmd0aCgpKQorICAgICAgICBsb2FkVVJMKHJl
cXVlc3RlZFVSTC5HZXRCU1RSKCkpOworICAgIGVsc2UKKyAgICAgICAgbV9jb250ZW50V2luZG93
LT5sb2FkSFRNTFN0cmluZyhkZWZhdWx0SFRNTCk7CisKKyAgICByZXR1cm47Cit9CisKK3ZvaWQg
QnJvd3NlcldpbmRvdzo6dXBkYXRlRGV2aWNlU2NhbGVGYWN0b3IoKQoreworICAgIGF1dG8gc2Nh
bGVGYWN0b3IgPSBXZWJDb3JlOjpkZXZpY2VTY2FsZUZhY3RvckZvcldpbmRvdyhtX2hNYWluV25k
KTsKKworICAgIGlmIChtX2hVUkxCYXJGb250KQorICAgICAgICA6OkRlbGV0ZU9iamVjdChtX2hV
UkxCYXJGb250KTsKKworICAgIG1faFVSTEJhckZvbnQgPSA6OkNyZWF0ZUZvbnQoc2NhbGVGYWN0
b3IgKiAxOCwgMCwgMCwgMCwgRldfTk9STUFMLCBGQUxTRSwgRkFMU0UsIEZBTFNFLCBERUZBVUxU
X0NIQVJTRVQsCisgICAgICAgIE9VVF9UVF9PTkxZX1BSRUNJUywgQ0xJUF9ERUZBVUxUX1BSRUNJ
UywgQU5USUFMSUFTRURfUVVBTElUWSwgRkZfRE9OVENBUkUsIEwiVGltZXMgTmV3IFJvbWFuIik7
Cit9CisKK3ZvaWQgQnJvd3NlcldpbmRvdzo6cmVzaXplU3ViVmlld3MoKQoreworICAgIGZsb2F0
IHNjYWxlRmFjdG9yID0gV2ViQ29yZTo6ZGV2aWNlU2NhbGVGYWN0b3JGb3JXaW5kb3cobV9oTWFp
blduZCk7CisKKyAgICBSRUNUIHJjQ2xpZW50OworICAgIEdldENsaWVudFJlY3QobV9oTWFpbldu
ZCwgJnJjQ2xpZW50KTsKKworICAgIGludCBoZWlnaHQgPSBzY2FsZUZhY3RvciAqIFVSTEJBUl9I
RUlHSFQ7CisgICAgaW50IHdpZHRoID0gc2NhbGVGYWN0b3IgKiBDT05UUk9MQlVUVE9OX1dJRFRI
OworCisgICAgTW92ZVdpbmRvdyhtX2hCYWNrQnV0dG9uV25kLCAwLCAwLCB3aWR0aCwgaGVpZ2h0
LCBUUlVFKTsKKyAgICBNb3ZlV2luZG93KG1faEZvcndhcmRCdXR0b25XbmQsIHdpZHRoLCAwLCB3
aWR0aCwgaGVpZ2h0LCBUUlVFKTsKKyAgICBNb3ZlV2luZG93KG1faFVSTEJhclduZCwgd2lkdGgg
KiAyLCAwLCByY0NsaWVudC5yaWdodCwgaGVpZ2h0LCBUUlVFKTsKKyAgICBpZiAoIW1fdXNlc0xh
eWVyZWRXZWJWaWV3KQorICAgICAgICBNb3ZlV2luZG93KGNvbnRlbnRXaW5kb3coKS0+aHduZCgp
LCAwLCBoZWlnaHQsIHJjQ2xpZW50LnJpZ2h0LCByY0NsaWVudC5ib3R0b20gLSBoZWlnaHQsIFRS
VUUpOworCisgICAgOjpTZW5kTWVzc2FnZShtX2hVUkxCYXJXbmQsIHN0YXRpY19jYXN0PFVJTlQ+
KFdNX1NFVEZPTlQpLCByZWludGVycHJldF9jYXN0PFdQQVJBTT4odXJsQmFyRm9udCgpKSwgVFJV
RSk7Cit9CisKK3N0YXRpYyBJTlRfUFRSIENBTExCQUNLIGF1dGhEaWFsb2dQcm9jKEhXTkQgaERs
ZywgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQoreworICAgIHN3
aXRjaCAobWVzc2FnZSkgeworICAgIGNhc2UgV01fSU5JVERJQUxPRzogeworICAgICAgICBIV05E
IGVkaXQgPSA6OkdldERsZ0l0ZW0oaERsZywgSURDX0FVVEhfVVNFUik7CisgICAgICAgIDo6U2V0
V2luZG93VGV4dChlZGl0LCBMIiIpOworCisgICAgICAgIGVkaXQgPSA6OkdldERsZ0l0ZW0oaERs
ZywgSURDX0FVVEhfUEFTU1dPUkQpOworICAgICAgICA6OlNldFdpbmRvd1RleHQoZWRpdCwgTCIi
KTsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorCisgICAgY2FzZSBXTV9DT01NQU5EOgor
ICAgICAgICBpZiAoTE9XT1JEKHdQYXJhbSkgPT0gSURPSyB8fCBMT1dPUkQod1BhcmFtKSA9PSBJ
RENBTkNFTCkgeworICAgICAgICAgICAgSU5UX1BUUiByZXN1bHQgeyB9OworCisgICAgICAgICAg
ICBpZiAoTE9XT1JEKHdQYXJhbSkgPT0gSURPSykgeworICAgICAgICAgICAgICAgIFRDSEFSIHVz
ZXJbMjU2XTsKKyAgICAgICAgICAgICAgICBpbnQgc3RyTGVuID0gOjpHZXRXaW5kb3dUZXh0KDo6
R2V0RGxnSXRlbShoRGxnLCBJRENfQVVUSF9VU0VSKSwgdXNlciwgMjU2KTsKKyAgICAgICAgICAg
ICAgICB1c2VyW3N0ckxlbl0gPSAwOworCisgICAgICAgICAgICAgICAgVENIQVIgcGFzc1syNTZd
OworICAgICAgICAgICAgICAgIHN0ckxlbiA9IDo6R2V0V2luZG93VGV4dCg6OkdldERsZ0l0ZW0o
aERsZywgSURDX0FVVEhfUEFTU1dPUkQpLCBwYXNzLCAyNTYpOworICAgICAgICAgICAgICAgIHBh
c3Nbc3RyTGVuXSA9IDA7CisKKyAgICAgICAgICAgICAgICByZXN1bHQgPSByZWludGVycHJldF9j
YXN0PElOVF9QVFI+KG5ldyBzdGQ6OnBhaXI8c3RkOjp3c3RyaW5nLCBzdGQ6OndzdHJpbmc+KHVz
ZXIsIHBhc3MpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgOjpFbmREaWFsb2coaERs
ZywgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICB9CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK2Jvb2wgQnJvd3NlcldpbmRv
dzo6ZGlzcGxheUF1dGhEaWFsb2coc3RkOjp3c3RyaW5nJiB1c2VybmFtZSwgc3RkOjp3c3RyaW5n
JiBwYXNzd29yZCkKK3sKKyAgICBhdXRvIHJlc3VsdCA9IERpYWxvZ0JveChoSW5zdCwgTUFLRUlO
VFJFU09VUkNFKElERF9BVVRIKSwgbV9oTWFpblduZCwgYXV0aERpYWxvZ1Byb2MpOworICAgIGlm
ICghcmVzdWx0KQorICAgICAgICByZXR1cm4gRV9GQUlMOworCisgICAgYXV0byBwYWlyID0gcmVp
bnRlcnByZXRfY2FzdDxzdGQ6OnBhaXI8c3RkOjp3c3RyaW5nLCBzdGQ6OndzdHJpbmc+Kj4ocmVz
dWx0KTsKKyAgICB1c2VybmFtZSA9IHBhaXItPmZpcnN0OworICAgIHBhc3N3b3JkID0gcGFpci0+
c2Vjb25kOworICAgIGRlbGV0ZSBwYWlyOworCisgICAgcmV0dXJuIFNfT0s7Cit9CmRpZmYgLS1n
aXQgYS9Ub29scy9NaW5pQnJvd3Nlci93aW4vQnJvd3NlcldpbmRvdy5oIGIvVG9vbHMvTWluaUJy
b3dzZXIvd2luL0Jyb3dzZXJXaW5kb3cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YzQ4YjI2ZjE0YzVjN2ZjNmE5
ZGI0MGI4OTM4OWRhNzlkMTc1OWRkCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvTWluaUJyb3dz
ZXIvd2luL0Jyb3dzZXJXaW5kb3cuaApAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE4IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJDb250ZW50V2luZG93LmgiCisjaW5jbHVkZSA8bWVtb3J5PgorCitjbGFzcyBCcm93c2VyV2lu
ZG93IHsKK3B1YmxpYzoKKyAgICBCcm93c2VyV2luZG93KGludCBuQ21kU2hvdywgYm9vbCB1c2Vz
TGF5ZXJlZFdlYlZpZXcsIGJvb2wgcGFnZUxvYWRUZXN0aW5nLCBfYnN0cl90IHJlcXVlc3RlZFVS
TCwgYm9vbCB1c2VXSzIpOworCisgICAgdm9pZCB1cGRhdGVEZXZpY2VTY2FsZUZhY3RvcigpOwor
ICAgIEhHRElPQkogdXJsQmFyRm9udCgpIHsgcmV0dXJuIG1faFVSTEJhckZvbnQ7IH0KKyAgICBD
b250ZW50V2luZG93KiBjb250ZW50V2luZG93KCkgeyByZXR1cm4gbV9jb250ZW50V2luZG93Lmdl
dCgpOyB9CisgICAgYm9vbCBkaXNwbGF5QXV0aERpYWxvZyhzdGQ6OndzdHJpbmcmIHVzZXJuYW1l
LCBzdGQ6OndzdHJpbmcmIHBhc3N3b3JkKTsKKworICAgIHN0YXRpYyBMUkVTVUxUIENBTExCQUNL
IFduZFByb2MoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBs
UGFyYW0pOworCitwcml2YXRlOgorICAgIHZvaWQgcmVzaXplU3ViVmlld3MoKTsKKworICAgIHN0
ZDo6dW5pcXVlX3B0cjxDb250ZW50V2luZG93PiBtX2NvbnRlbnRXaW5kb3c7CisgICAgSFdORCBt
X2hNYWluV25kOworICAgIEhXTkQgbV9oQmFja0J1dHRvblduZDsKKyAgICBIV05EIG1faEZvcndh
cmRCdXR0b25XbmQ7CisgICAgSFdORCBtX2hVUkxCYXJXbmQ7CisgICAgSEdESU9CSiBtX2hVUkxC
YXJGb250IHsgbnVsbHB0ciB9OworICAgIGJvb2wgbV91c2VzTGF5ZXJlZFdlYlZpZXc7Cit9Owpk
aWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvd2luL0NNYWtlTGlzdHMudHh0IGIvVG9vbHMv
TWluaUJyb3dzZXIvd2luL0NNYWtlTGlzdHMudHh0CmluZGV4IGI4OTU2ZjgzMjBjN2I4OTQyNmZk
M2FkYmIwNTk5OGYzNGFmOTBjM2QuLjE5YjQ1ZTA4NWRhY2Y0NjkyNjM0NjVkMDg1OTE0NWU1MjZk
OTFjZTkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9DTWFrZUxpc3RzLnR4dAor
KysgYi9Ub29scy9NaW5pQnJvd3Nlci93aW4vQ01ha2VMaXN0cy50eHQKQEAgLTcsNiArNyw4IEBA
IHNldChNaW5pQnJvd3Nlcl9JTkNMVURFX0RJUkVDVE9SSUVTCiAKIHNldChNaW5pQnJvd3Nlcl9T
T1VSQ0VTCiAgICAgQWNjZXNzaWJpbGl0eURlbGVnYXRlLmNwcAorICAgIEJyb3dzZXJXaW5kb3cu
Y3BwCisgICAgQ29tbW9uLmNwcAogICAgIERPTURlZmF1bHRJbXBsLmNwcAogICAgIFBhZ2VMb2Fk
VGVzdENsaWVudC5jcHAKICAgICBQcmludFdlYlVJRGVsZWdhdGUuY3BwCkBAIC0zNiw2ICszOCwx
NCBAQCBpZiAoVVNFX0NGKQogICAgICkKIGVuZGlmICgpCiAKK2lmIChFTkFCTEVfV0VCS0lUKQor
ICAgIGFkZF9kZWZpbml0aW9ucygtREVOQUJMRV9XRUJLSVQpCisgICAgbGlzdChBUFBFTkQgTWlu
aUJyb3dzZXJfU09VUkNFUworICAgICAgICBXSzJDb250ZW50V2luZG93LmNwcAorICAgICkKKyAg
ICBsaXN0KEFQUEVORCBNaW5pQnJvd3Nlcl9MSUJSQVJJRVMgV2ViS2l0KQorZW5kaWYgKCkKKwog
c2V0KENNQUtFX1NIQVJFRF9MSU5LRVJfRkxBR1MgIiR7Q01BS0VfU0hBUkVEX0xJTktFUl9GTEFH
U30gJHtNU1ZDX1JVTlRJTUVfTElOS0VSX0ZMQUdTfSIpCiBzZXQoQ01BS0VfRVhFX0xJTktFUl9G
TEFHUyAiJHtDTUFLRV9FWEVfTElOS0VSX0ZMQUdTfSAvRU5UUlk6d1dpbk1haW5DUlRTdGFydHVw
IikKIApkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvd2luL0NvbW1vbi5jcHAgYi9Ub29s
cy9NaW5pQnJvd3Nlci93aW4vQ29tbW9uLmNwcAppbmRleCBiYjdhMzU0YWVjZjk4NDIyMDM0MTY5
ZDhmMWQ4MTVlOTAyMGExMmNiLi4yMGJjODdiODdmODg4ODdmYTEzYTcyNTI1NzcyNGI3NWI4ZmZh
MmVhIDEwMDY0NAotLS0gYS9Ub29scy9NaW5pQnJvd3Nlci93aW4vQ29tbW9uLmNwcAorKysgYi9U
b29scy9NaW5pQnJvd3Nlci93aW4vQ29tbW9uLmNwcApAQCAtMjYsMjQgKzI2LDEzIEBACiAgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKICAqLwogCi0jaW5jbHVkZSAiQWNjZXNzaWJpbGl0eURlbGVnYXRlLmgiCisj
aW5jbHVkZSAic3RkYWZ4LmgiCisKKyNpbmNsdWRlICJCcm93c2VyV2luZG93LmgiCiAjaW5jbHVk
ZSAiRE9NRGVmYXVsdEltcGwuaCIKLSNpbmNsdWRlICJQcmludFdlYlVJRGVsZWdhdGUuaCIKLSNp
bmNsdWRlICJSZXNvdXJjZUxvYWREZWxlZ2F0ZS5oIgotI2luY2x1ZGUgIldlYkRvd25sb2FkRGVs
ZWdhdGUuaCIKICNpbmNsdWRlICJNaW5pQnJvd3Nlci5oIgotI2luY2x1ZGUgIk1pbmlCcm93c2Vy
UmVwbGFjZS5oIgorI2luY2x1ZGUgIk1pbmlCcm93c2VyTGliUmVzb3VyY2UuaCIKICNpbmNsdWRl
IDxXZWJLaXRMZWdhY3kvV2ViS2l0Q09NQVBJLmg+Ci0jaW5jbHVkZSA8d3RmL0V4cG9ydE1hY3Jv
cy5oPgotI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotI2lmIFVTRShDRikKLSNp
bmNsdWRlIDxDb3JlRm91bmRhdGlvbi9DRlJ1bkxvb3AuaD4KLSNpbmNsdWRlIDxXZWJLaXRMZWdh
Y3kvQ0ZEaWN0aW9uYXJ5UHJvcGVydHlCYWcuaD4KLSNlbmRpZgotCiAjaW5jbHVkZSA8Y2Fzc2Vy
dD4KICNpbmNsdWRlIDxjb21pcC5oPgogI2luY2x1ZGUgPGNvbW1jdHJsLmg+CkBAIC01OCwxMCAr
NDcsMTUgQEAKICNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVkZSA8dmVjdG9yPgogI2luY2x1ZGUg
PHdpbmluZXQuaD4KKyNpbmNsdWRlIDx3dGYvRXhwb3J0TWFjcm9zLmg+CisjaW5jbHVkZSA8d3Rm
L1BsYXRmb3JtLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgorCisjaWYgVVNFKENGKQorI2luY2x1ZGUgPENvcmVGb3VuZGF0
aW9uL0NGUnVuTG9vcC5oPgorI2VuZGlmCiAKLSNkZWZpbmUgTUFYX0xPQURTVFJJTkcgMTAwCi0j
ZGVmaW5lIFVSTEJBUl9IRUlHSFQgIDI0Ci0jZGVmaW5lIENPTlRST0xCVVRUT05fV0lEVEggMjQK
IAogc3RhdGljIGNvbnN0IGludCBtYXhIaXN0b3J5U2l6ZSA9IDEwOwogCkBAIC03NCwyNyArNjgs
MTcgQEAgdHlwZWRlZiBfY29tX3B0cl90PF9jb21fSUlJRDxJV2ViTXV0YWJsZVVSTFJlcXVlc3Qs
ICZfX3V1aWRvZihJV2ViTXV0YWJsZVVSTFJlcXUKIAogLy8gR2xvYmFsIFZhcmlhYmxlczoKIEhJ
TlNUQU5DRSBoSW5zdDsKLUhXTkQgaE1haW5XbmQ7Ci1IV05EIGhVUkxCYXJXbmQ7Ci1IR0RJT0JK
IGhVUkxGb250OwotSFdORCBoQmFja0J1dHRvblduZDsKLUhXTkQgaEZvcndhcmRCdXR0b25XbmQ7
CiBIV05EIGhDYWNoZVduZDsKIFdORFBST0MgRGVmRWRpdFByb2MgPSBudWxscHRyOwogV05EUFJP
QyBEZWZCdXR0b25Qcm9jID0gbnVsbHB0cjsKLVdORFBST0MgRGVmV2ViS2l0UHJvYyA9IG51bGxw
dHI7Ci1IV05EIGdWaWV3V2luZG93ID0gMDsKLU1pbmlCcm93c2VyKiBnTWluaUJyb3dzZXIgPSBu
dWxscHRyOwotVENIQVIgc3pUaXRsZVtNQVhfTE9BRFNUUklOR107IC8vIFRoZSB0aXRsZSBiYXIg
dGV4dAotVENIQVIgc3pXaW5kb3dDbGFzc1tNQVhfTE9BRFNUUklOR107IC8vIHRoZSBtYWluIHdp
bmRvdyBjbGFzcyBuYW1lCitCcm93c2VyV2luZG93KiBnQnJvd3NlcldpbmRvdyA9IG51bGxwdHI7
CitDb250ZW50V2luZG93KiBnTWluaUJyb3dzZXIgPSBudWxscHRyOwogCiAvLyBTdXBwb3J0IG1v
dmluZyB0aGUgdHJhbnNwYXJlbnQgd2luZG93CiBQT0lOVCBzX3dpbmRvd1Bvc2l0aW9uID0geyAx
MDAsIDEwMCB9OwogU0laRSBzX3dpbmRvd1NpemUgPSB7IDUwMCwgMjAwIH07CiAKIC8vIEZvcndh
cmQgZGVjbGFyYXRpb25zIG9mIGZ1bmN0aW9ucyBpbmNsdWRlZCBpbiB0aGlzIGNvZGUgbW9kdWxl
OgotQVRPTSBNeVJlZ2lzdGVyQ2xhc3MoSElOU1RBTkNFIGhJbnN0YW5jZSk7Ci1MUkVTVUxUIENB
TExCQUNLIFduZFByb2MoSFdORCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0pOwogSU5UX1BUUiBDQUxM
QkFDSyBBYm91dChIV05ELCBVSU5ULCBXUEFSQU0sIExQQVJBTSk7CiBJTlRfUFRSIENBTExCQUNL
IEN1c3RvbVVzZXJBZ2VudChIV05ELCBVSU5ULCBXUEFSQU0sIExQQVJBTSk7CiBMUkVTVUxUIENB
TExCQUNLIEVkaXRQcm9jKEhXTkQsIFVJTlQsIFdQQVJBTSwgTFBBUkFNKTsKQEAgLTEwMiw0OSAr
ODYsMTQgQEAgTFJFU1VMVCBDQUxMQkFDSyBCYWNrQnV0dG9uUHJvYyhIV05ELCBVSU5ULCBXUEFS
QU0sIExQQVJBTSk7CiBMUkVTVUxUIENBTExCQUNLIEZvcndhcmRCdXR0b25Qcm9jKEhXTkQsIFVJ
TlQsIFdQQVJBTSwgTFBBUkFNKTsKIExSRVNVTFQgQ0FMTEJBQ0sgUmVsb2FkQnV0dG9uUHJvYyhI
V05ELCBVSU5ULCBXUEFSQU0sIExQQVJBTSk7CiBJTlRfUFRSIENBTExCQUNLIENhY2hlcyhIV05E
LCBVSU5ULCBXUEFSQU0sIExQQVJBTSk7Ci1JTlRfUFRSIENBTExCQUNLIEF1dGhEaWFsb2dQcm9j
KEhXTkQsIFVJTlQsIFdQQVJBTSwgTFBBUkFNKTsKIAotc3RhdGljIHZvaWQgbG9hZFVSTChCU1RS
IHVybEJTdHIpOwotc3RhdGljIHZvaWQgdXBkYXRlU3RhdGlzdGljcyhIV05EIGhEbGcpOwordm9p
ZCBsb2FkVVJMKEJTVFIgdXJsQlN0cik7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGZsb2F0IGRl
dmljZVNjYWxlRmFjdG9yRm9yV2luZG93KEhXTkQpOwogfQogCi1zdGF0aWMgdm9pZCByZXNpemVT
dWJWaWV3cygpCi17Ci0gICAgaWYgKGdNaW5pQnJvd3Nlci0+dXNlc0xheWVyZWRXZWJWaWV3KCkg
fHwgIWdWaWV3V2luZG93KQotICAgICAgICByZXR1cm47Ci0KLSAgICBmbG9hdCBzY2FsZUZhY3Rv
ciA9IFdlYkNvcmU6OmRldmljZVNjYWxlRmFjdG9yRm9yV2luZG93KGdWaWV3V2luZG93KTsKLQot
ICAgIFJFQ1QgcmNDbGllbnQ7Ci0gICAgR2V0Q2xpZW50UmVjdChoTWFpblduZCwgJnJjQ2xpZW50
KTsKLQotICAgIGludCBoZWlnaHQgPSBzY2FsZUZhY3RvciAqIFVSTEJBUl9IRUlHSFQ7Ci0gICAg
aW50IHdpZHRoID0gc2NhbGVGYWN0b3IgKiBDT05UUk9MQlVUVE9OX1dJRFRIOwotCi0gICAgTW92
ZVdpbmRvdyhoQmFja0J1dHRvblduZCwgMCwgMCwgd2lkdGgsIGhlaWdodCwgVFJVRSk7Ci0gICAg
TW92ZVdpbmRvdyhoRm9yd2FyZEJ1dHRvblduZCwgd2lkdGgsIDAsIHdpZHRoLCBoZWlnaHQsIFRS
VUUpOwotICAgIE1vdmVXaW5kb3coaFVSTEJhclduZCwgd2lkdGggKiAyLCAwLCByY0NsaWVudC5y
aWdodCwgaGVpZ2h0LCBUUlVFKTsKLSAgICBNb3ZlV2luZG93KGdWaWV3V2luZG93LCAwLCBoZWln
aHQsIHJjQ2xpZW50LnJpZ2h0LCByY0NsaWVudC5ib3R0b20gLSBoZWlnaHQsIFRSVUUpOwotCi0g
ICAgOjpTZW5kTWVzc2FnZShoVVJMQmFyV25kLCBzdGF0aWNfY2FzdDxVSU5UPihXTV9TRVRGT05U
KSwgcmVpbnRlcnByZXRfY2FzdDxXUEFSQU0+KGdNaW5pQnJvd3Nlci0+dXJsQmFyRm9udCgpKSwg
VFJVRSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHN1YmNsYXNzRm9yTGF5ZXJlZFdpbmRvdygpCi17Ci0g
ICAgaE1haW5XbmQgPSBnVmlld1dpbmRvdzsKLSNpZiBkZWZpbmVkIF9NX0FNRDY0IHx8IGRlZmlu
ZWQgX1dJTjY0Ci0gICAgRGVmV2ViS2l0UHJvYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8V05EUFJPQz4o
OjpHZXRXaW5kb3dMb25nUHRyKGhNYWluV25kLCBHV0xQX1dORFBST0MpKTsKLSAgICA6OlNldFdp
bmRvd0xvbmdQdHIoaE1haW5XbmQsIEdXTFBfV05EUFJPQywgcmVpbnRlcnByZXRfY2FzdDxMT05H
X1BUUj4oV25kUHJvYykpOwotI2Vsc2UKLSAgICBEZWZXZWJLaXRQcm9jID0gcmVpbnRlcnByZXRf
Y2FzdDxXTkRQUk9DPig6OkdldFdpbmRvd0xvbmcoaE1haW5XbmQsIEdXTF9XTkRQUk9DKSk7Ci0g
ICAgOjpTZXRXaW5kb3dMb25nKGhNYWluV25kLCBHV0xfV05EUFJPQywgcmVpbnRlcnByZXRfY2Fz
dDxMT05HX1BUUj4oV25kUHJvYykpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2b2lkIGNvbXB1dGVG
dWxsRGVza3RvcEZyYW1lKCkKK3ZvaWQgY29tcHV0ZUZ1bGxEZXNrdG9wRnJhbWUoKQogewogICAg
IFJFQ1QgZGVza3RvcDsKICAgICBpZiAoITo6U3lzdGVtUGFyYW1ldGVyc0luZm8oU1BJX0dFVFdP
UktBUkVBLCAwLCBzdGF0aWNfY2FzdDx2b2lkKj4oJmRlc2t0b3ApLCAwKSkKQEAgLTE2Niw3ICsx
MTUsNyBAQCBCT09MIFdJTkFQSSBEbGxNYWluKEhJTlNUQU5DRSBkbGxJbnN0YW5jZSwgRFdPUkQg
cmVhc29uLCBMUFZPSUQpCiAgICAgcmV0dXJuIFRSVUU7CiB9CiAKLXN0YXRpYyBib29sIGdldEFw
cERhdGFGb2xkZXIoX2JzdHJfdCYgZGlyZWN0b3J5KQorYm9vbCBnZXRBcHBEYXRhRm9sZGVyKF9i
c3RyX3QmIGRpcmVjdG9yeSkKIHsKICAgICB3Y2hhcl90IGFwcERhdGFEaXJlY3RvcnlbTUFYX1BB
VEhdOwogICAgIGlmIChGQUlMRUQoU0hHZXRGb2xkZXJQYXRoVygwLCBDU0lETF9MT0NBTF9BUFBE
QVRBIHwgQ1NJRExfRkxBR19DUkVBVEUsIDAsIDAsIGFwcERhdGFEaXJlY3RvcnkpKSkKQEAgLTE4
MywyMSArMTMyLDcgQEAgc3RhdGljIGJvb2wgZ2V0QXBwRGF0YUZvbGRlcihfYnN0cl90JiBkaXJl
Y3RvcnkpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBib29sIHNldENhY2hlRm9sZGVy
KCkKLXsKLSAgICBJV2ViQ2FjaGVQdHIgd2ViQ2FjaGUgPSBnTWluaUJyb3dzZXItPndlYkNhY2hl
KCk7Ci0gICAgaWYgKCF3ZWJDYWNoZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgX2Jz
dHJfdCBhcHBEYXRhRm9sZGVyOwotICAgIGlmICghZ2V0QXBwRGF0YUZvbGRlcihhcHBEYXRhRm9s
ZGVyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXBwRGF0YUZvbGRlciArPSBMIlxc
Y2FjaGUiOwotICAgIHdlYkNhY2hlLT5zZXRDYWNoZUZvbGRlcihhcHBEYXRhRm9sZGVyKTsKLQot
ICAgIHJldHVybiB0cnVlOwotfQorc3RhdGljIHZvaWQgcHJvY2Vzc0NyYXNoUmVwb3J0KGNvbnN0
IHdjaGFyX3QqIGZpbGVOYW1lKSB7IDo6TWVzc2FnZUJveCgwLCBmaWxlTmFtZSwgTCJDcmFzaCBS
ZXBvcnQiLCBNQl9PSyk7IH0KIAogdm9pZCBjcmVhdGVDcmFzaFJlcG9ydChFWENFUFRJT05fUE9J
TlRFUlMqIGV4Y2VwdGlvblBvaW50ZXJzKQogewpAQCAtMjMzLDgyICsxNjgsNiBAQCB2b2lkIGNy
ZWF0ZUNyYXNoUmVwb3J0KEVYQ0VQVElPTl9QT0lOVEVSUyogZXhjZXB0aW9uUG9pbnRlcnMpCiAg
ICAgfQogfQogCi1zdGF0aWMgQk9PTCBDQUxMQkFDSyBBYm9ydFByb2MoSERDIGhEQywgaW50IEVy
cm9yKQotewotICAgIE1TRyBtc2c7Ci0gICAgd2hpbGUgKDo6UGVla01lc3NhZ2UoJm1zZywgMCwg
MCwgMCwgUE1fUkVNT1ZFKSkgewotICAgICAgICA6OlRyYW5zbGF0ZU1lc3NhZ2UoJm1zZyk7Ci0g
ICAgICAgIDo6RGlzcGF0Y2hNZXNzYWdlKCZtc2cpOwotICAgIH0KLQotICAgIHJldHVybiBUUlVF
OwotfQotCi1zdGF0aWMgSERDIGdldFByaW50ZXJEQygpCi17Ci0gICAgUFJJTlRETEcgcGRsZzsK
LSAgICBtZW1zZXQoJnBkbGcsIDAsIHNpemVvZihQUklOVERMRykpOwotICAgIHBkbGcubFN0cnVj
dFNpemUgPSBzaXplb2YoUFJJTlRETEcpOwotICAgIHBkbGcuRmxhZ3MgPSBQRF9QUklOVFNFVFVQ
IHwgUERfUkVUVVJOREM7Ci0KLSAgICA6OlByaW50RGxnKCZwZGxnKTsKLQotICAgIHJldHVybiBw
ZGxnLmhEQzsKLX0KLQotc3RhdGljIHZvaWQgaW5pdERvY1N0cnVjdChET0NJTkZPKiBkaSwgVENI
QVIqIGRvY25hbWUpCi17Ci0gICAgbWVtc2V0KGRpLCAwLCBzaXplb2YoRE9DSU5GTykpOwotICAg
IGRpLT5jYlNpemUgPSBzaXplb2YoRE9DSU5GTyk7Ci0gICAgZGktPmxwc3pEb2NOYW1lID0gZG9j
bmFtZTsKLX0KLQotdHlwZWRlZiBfY29tX3B0cl90PF9jb21fSUlJRDxJV2ViRnJhbWVQcml2YXRl
LCAmX191dWlkb2YoSVdlYkZyYW1lUHJpdmF0ZSk+PiBJV2ViRnJhbWVQcml2YXRlUHRyOwotCi12
b2lkIFByaW50VmlldyhIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBB
UkFNIGxQYXJhbSkKLXsKLSAgICBIREMgcHJpbnREQyA9IGdldFByaW50ZXJEQygpOwotICAgIGlm
ICghcHJpbnREQykgewotICAgICAgICA6Ok1lc3NhZ2VCb3hXKDAsIEwiRXJyb3IgY3JlYXRpbmcg
cHJpbnRpbmcgREMiLCBMIkVycm9yIiwgTUJfQVBQTE1PREFMIHwgTUJfT0spOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKDo6U2V0QWJvcnRQcm9jKHByaW50REMsIEFib3J0UHJv
YykgPT0gU1BfRVJST1IpIHsKLSAgICAgICAgOjpNZXNzYWdlQm94VygwLCBMIkVycm9yIHNldHRp
bmcgdXAgQWJvcnRQcm9jIiwgTCJFcnJvciIsIE1CX0FQUExNT0RBTCB8IE1CX09LKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIElXZWJGcmFtZVB0ciBmcmFtZSA9IGdNaW5pQnJvd3Nl
ci0+bWFpbkZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
SVdlYkZyYW1lUHJpdmF0ZVB0ciBmcmFtZVByaXZhdGU7Ci0gICAgaWYgKEZBSUxFRChmcmFtZS0+
UXVlcnlJbnRlcmZhY2UoJmZyYW1lUHJpdmF0ZS5HZXRJbnRlcmZhY2VQdHIoKSkpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBmcmFtZVByaXZhdGUtPnNldEluUHJpbnRpbmdNb2RlKFRSVUUsIHBy
aW50REMpOwotCi0gICAgVUlOVCBwYWdlQ291bnQgPSAwOwotICAgIGZyYW1lUHJpdmF0ZS0+Z2V0
UHJpbnRlZFBhZ2VDb3VudChwcmludERDLCAmcGFnZUNvdW50KTsKLQotICAgIERPQ0lORk8gZGk7
Ci0gICAgaW5pdERvY1N0cnVjdCgmZGksIEwiV2ViS2l0IERvYyIpOwotICAgIDo6U3RhcnREb2Mo
cHJpbnREQywgJmRpKTsKLQotICAgIC8vIEZJWE1FOiBOZWVkIENvcmVHcmFwaGljcyBpbXBsZW1l
bnRhdGlvbgotICAgIHZvaWQqIGdyYXBoaWNzQ29udGV4dCA9IDA7Ci0gICAgZm9yIChzaXplX3Qg
cGFnZSA9IDE7IHBhZ2UgPD0gcGFnZUNvdW50OyArK3BhZ2UpIHsKLSAgICAgICAgOjpTdGFydFBh
Z2UocHJpbnREQyk7Ci0gICAgICAgIGZyYW1lUHJpdmF0ZS0+c3Bvb2xQYWdlcyhwcmludERDLCBw
YWdlLCBwYWdlLCBncmFwaGljc0NvbnRleHQpOwotICAgICAgICA6OkVuZFBhZ2UocHJpbnREQyk7
Ci0gICAgfQotCi0gICAgZnJhbWVQcml2YXRlLT5zZXRJblByaW50aW5nTW9kZShGQUxTRSwgcHJp
bnREQyk7Ci0KLSAgICA6OkVuZERvYyhwcmludERDKTsKLSAgICA6OkRlbGV0ZURDKHByaW50REMp
OwotfQotCiBzdGF0aWMgdm9pZCBUb2dnbGVNZW51RmxhZyhIV05EIGhXbmQsIFVJTlQgbWVudUlE
KQogewogICAgIEhNRU5VIG1lbnUgPSA6OkdldE1lbnUoaFduZCk7CkBAIC0zNTEsNiArMjEwLDQ0
IEBAIHN0YXRpYyB2b2lkIHR1cm5PZmZPdGhlclVzZXJBZ2VudHMoSE1FTlUgbWVudSkKICAgICB9
CiB9CiAKK3N0YXRpYyB2b2lkIHNldFVzZXJBZ2VudChVSU5UIG1lbnVJRCkKK3sKKyAgICBzdGQ6
OndzdHJpbmcgY3VzdG9tVXNlckFnZW50OworICAgIHN3aXRjaCAobWVudUlEKSB7CisgICAgY2Fz
ZSBJRE1fVUFfREVGQVVMVDoKKyAgICAgICAgLy8gU2V0IHRvIG51bGwgdXNlciBhZ2VudAorICAg
ICAgICBicmVhazsKKyAgICBjYXNlIElETV9VQV9TQUZBUklfOF8wOgorICAgICAgICBjdXN0b21V
c2VyQWdlbnQgPSBMIk1vemlsbGEvNS4wIChNYWNpbnRvc2g7IEludGVsIE1hYyBPUyBYIDEwXzEw
KSBBcHBsZVdlYktpdC82MDAuMS4yNSAoS0hUTUwsIGxpa2UgR2Vja28pIFZlcnNpb24vOC4wIFNh
ZmFyaS82MDAuMS4yNSI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSURNX1VBX1NBRkFSSV9J
T1NfOF9JUEhPTkU6CisgICAgICAgIGN1c3RvbVVzZXJBZ2VudCA9IEwiTW96aWxsYS81LjAgKGlQ
aG9uZTsgQ1BVIE9TIDhfMSBsaWtlIE1hYyBPUyBYKSBBcHBsZVdlYktpdC82MDEuMS40IChLSFRN
TCwgbGlrZSBHZWNrbykgVmVyc2lvbi84LjAgTW9iaWxlLzEyQjQwMyBTYWZhcmkvNjAwLjEuNCI7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSURNX1VBX1NBRkFSSV9JT1NfOF9JUEFEOgorICAg
ICAgICBjdXN0b21Vc2VyQWdlbnQgPSBMIk1vemlsbGEvNS4wIChpUGFkOyBDUFUgT1MgOF8xIGxp
a2UgTWFjIE9TIFgpIEFwcGxlV2ViS2l0LzYwMC4xLjQgKEtIVE1MLCBsaWtlIEdlY2tvKSBWZXJz
aW9uLzguMCBNb2JpbGUvMTJCNDAzIFNhZmFyaS82MDAuMS40IjsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBJRE1fVUFfSUVfMTE6CisgICAgICAgIGN1c3RvbVVzZXJBZ2VudCA9IEwiTW96aWxs
YS81LjAgKFdpbmRvd3MgTlQgNi4zOyBXT1c2NDsgVHJpZGVudC83LjA7IHJ2OjExLjApIGxpa2Ug
R2Vja28iOworICAgICAgICBicmVhazsKKyAgICBjYXNlIElETV9VQV9DSFJPTUVfTUFDOgorICAg
ICAgICBjdXN0b21Vc2VyQWdlbnQgPSBMIk1vemlsbGEvNS4wIChNYWNpbnRvc2g7IEludGVsIE1h
YyBPUyBYIDEwXzhfMykgQXBwbGVXZWJLaXQvNTM3LjMxIChLSFRNTCwgbGlrZSBHZWNrbykgQ2hy
b21lLzI2LjAuMTQxMC42NSBTYWZhcmkvNTM3LjMxIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBJRE1fVUFfQ0hST01FX1dJTjoKKyAgICAgICAgY3VzdG9tVXNlckFnZW50ID0gTCJNb3ppbGxh
LzUuMCAoV2luZG93cyBOVCA2LjI7IFdPVzY0KSBBcHBsZVdlYktpdC81MzcuMzEgKEtIVE1MLCBs
aWtlIEdlY2tvKSBDaHJvbWUvMjYuMC4xNDEwLjY0IFNhZmFyaS81MzcuMzEiOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIElETV9VQV9GSVJFRk9YX01BQzoKKyAgICAgICAgY3VzdG9tVXNlckFn
ZW50ID0gTCJNb3ppbGxhLzUuMCAoTWFjaW50b3NoOyBJbnRlbCBNYWMgT1MgWCAxMC44OyBydjoy
MC4wKSBHZWNrby8yMDEwMDEwMSBGaXJlZm94LzIwLjAiOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIElETV9VQV9GSVJFRk9YX1dJTjoKKyAgICAgICAgY3VzdG9tVXNlckFnZW50ID0gTCJNb3pp
bGxhLzUuMCAoV2luZG93cyBOVCA2LjI7IFdPVzY0OyBydjoyMC4wKSBHZWNrby8yMDEwMDEwMSBG
aXJlZm94LzIwLjAiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIElETV9VQV9PVEhFUjoKKyAg
ICBkZWZhdWx0OgorICAgICAgICBBU1NFUlQoMCk7IC8vIFdlIHNob3VsZCBuZXZlciBoaXQgdGhp
cyBjYXNlCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgZ01pbmlCcm93c2VyLT5zZXRVc2Vy
QWdlbnQoY3VzdG9tVXNlckFnZW50KTsKK30KIHN0YXRpYyBib29sIFRvZ2dsZU1lbnVJdGVtKEhX
TkQgaFduZCwgVUlOVCBtZW51SUQpCiB7CiAgICAgaWYgKCFnTWluaUJyb3dzZXIpCkBAIC0zNjgs
NDEgKzI2NSwzNiBAQCBzdGF0aWMgYm9vbCBUb2dnbGVNZW51SXRlbShIV05EIGhXbmQsIFVJTlQg
bWVudUlEKQogCiAgICAgQk9PTCBuZXdTdGF0ZSA9ICFtZW51SXRlbUlzQ2hlY2tlZChpbmZvKTsK
IAotICAgIGlmICghZ01pbmlCcm93c2VyLT5zdGFuZGFyZFByZWZlcmVuY2VzKCkgfHwgIWdNaW5p
QnJvd3Nlci0+cHJpdmF0ZVByZWZlcmVuY2VzKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQog
ICAgIHN3aXRjaCAobWVudUlEKSB7CiAgICAgY2FzZSBJRE1fQVZGT1VOREFUSU9OOgotICAgICAg
ICBnTWluaUJyb3dzZXItPnN0YW5kYXJkUHJlZmVyZW5jZXMoKS0+c2V0QVZGb3VuZGF0aW9uRW5h
YmxlZChuZXdTdGF0ZSk7CisgICAgICAgIGdNaW5pQnJvd3Nlci0+c2V0QVZGb3VuZGF0aW9uRW5h
YmxlZChuZXdTdGF0ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSURNX0FDQ19DT01QT1NJ
VElORzoKLSAgICAgICAgZ01pbmlCcm93c2VyLT5wcml2YXRlUHJlZmVyZW5jZXMoKS0+c2V0QWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQobmV3U3RhdGUpOworICAgICAgICBnTWluaUJyb3dz
ZXItPnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKG5ld1N0YXRlKTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBJRE1fV0tfRlVMTFNDUkVFTjoKLSAgICAgICAgZ01pbmlCcm93c2Vy
LT5wcml2YXRlUHJlZmVyZW5jZXMoKS0+c2V0RnVsbFNjcmVlbkVuYWJsZWQobmV3U3RhdGUpOwor
ICAgICAgICBnTWluaUJyb3dzZXItPnNldEZ1bGxTY3JlZW5FbmFibGVkKG5ld1N0YXRlKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBJRE1fQ09NUE9TSVRJTkdfQk9SREVSUzoKLSAgICAgICAg
Z01pbmlCcm93c2VyLT5wcml2YXRlUHJlZmVyZW5jZXMoKS0+c2V0U2hvd0RlYnVnQm9yZGVycyhu
ZXdTdGF0ZSk7Ci0gICAgICAgIGdNaW5pQnJvd3Nlci0+cHJpdmF0ZVByZWZlcmVuY2VzKCktPnNl
dFNob3dSZXBhaW50Q291bnRlcihuZXdTdGF0ZSk7CisgICAgICAgIGdNaW5pQnJvd3Nlci0+c2V0
U2hvd0NvbXBvc2l0aW5nQm9yZGVycyhuZXdTdGF0ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgSURNX0RFQlVHX0lORk9fTEFZRVI6Ci0gICAgICAgIGdNaW5pQnJvd3Nlci0+cHJpdmF0ZVBy
ZWZlcmVuY2VzKCktPnNldFNob3dUaWxlZFNjcm9sbGluZ0luZGljYXRvcihuZXdTdGF0ZSk7Cisg
ICAgICAgIGdNaW5pQnJvd3Nlci0+c2V0U2hvd1RpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yKG5ld1N0
YXRlKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJRE1fSU5WRVJUX0NPTE9SUzoKLSAgICAg
ICAgZ01pbmlCcm93c2VyLT5wcml2YXRlUHJlZmVyZW5jZXMoKS0+c2V0U2hvdWxkSW52ZXJ0Q29s
b3JzKG5ld1N0YXRlKTsKKyAgICAgICAgZ01pbmlCcm93c2VyLT5zZXRTaG91bGRJbnZlcnRDb2xv
cnMobmV3U3RhdGUpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIElETV9ESVNBQkxFX0lNQUdF
UzoKLSAgICAgICAgZ01pbmlCcm93c2VyLT5zdGFuZGFyZFByZWZlcmVuY2VzKCktPnNldExvYWRz
SW1hZ2VzQXV0b21hdGljYWxseSghbmV3U3RhdGUpOworICAgICAgICBnTWluaUJyb3dzZXItPnNl
dExvYWRzSW1hZ2VzQXV0b21hdGljYWxseSghbmV3U3RhdGUpOwogICAgICAgICBicmVhazsKICAg
ICBjYXNlIElETV9ESVNBQkxFX1NUWUxFUzoKLSAgICAgICAgZ01pbmlCcm93c2VyLT5wcml2YXRl
UHJlZmVyZW5jZXMoKS0+c2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQoIW5ld1N0YXRlKTsK
KyAgICAgICAgZ01pbmlCcm93c2VyLT5zZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZCghbmV3
U3RhdGUpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIElETV9ESVNBQkxFX0pBVkFTQ1JJUFQ6
Ci0gICAgICAgIGdNaW5pQnJvd3Nlci0+c3RhbmRhcmRQcmVmZXJlbmNlcygpLT5zZXRKYXZhU2Ny
aXB0RW5hYmxlZCghbmV3U3RhdGUpOworICAgICAgICBnTWluaUJyb3dzZXItPnNldEphdmFTY3Jp
cHRFbmFibGVkKCFuZXdTdGF0ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSURNX0RJU0FC
TEVfTE9DQUxfRklMRV9SRVNUUklDVElPTlM6Ci0gICAgICAgIGdNaW5pQnJvd3Nlci0+cHJpdmF0
ZVByZWZlcmVuY2VzKCktPnNldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzKG5ld1N0
YXRlKTsKLSAgICAgICAgZ01pbmlCcm93c2VyLT5wcml2YXRlUHJlZmVyZW5jZXMoKS0+c2V0QWxs
b3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxzKG5ld1N0YXRlKTsKKyAgICAgICAgZ01pbmlCcm93c2Vy
LT5zZXRMb2NhbEZpbGVSZXN0cmljdGlvbnNFbmFibGVkKCFuZXdTdGF0ZSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgSURNX1VBX0RFRkFVTFQ6CiAgICAgY2FzZSBJRE1fVUFfU0FGQVJJXzhf
MDoKQEAgLTQxMyw3ICszMDUsNyBAQCBzdGF0aWMgYm9vbCBUb2dnbGVNZW51SXRlbShIV05EIGhX
bmQsIFVJTlQgbWVudUlEKQogICAgIGNhc2UgSURNX1VBX0NIUk9NRV9XSU46CiAgICAgY2FzZSBJ
RE1fVUFfRklSRUZPWF9NQUM6CiAgICAgY2FzZSBJRE1fVUFfRklSRUZPWF9XSU46Ci0gICAgICAg
IGdNaW5pQnJvd3Nlci0+c2V0VXNlckFnZW50KG1lbnVJRCk7CisgICAgICAgIHNldFVzZXJBZ2Vu
dChtZW51SUQpOwogICAgICAgICB0dXJuT2ZmT3RoZXJVc2VyQWdlbnRzKG1lbnUpOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIElETV9VQV9PVEhFUjoKQEAgLTQzMSwzNiArMzIzLDE3IEBAIHN0
YXRpYyBib29sIFRvZ2dsZU1lbnVJdGVtKEhXTkQgaFduZCwgVUlOVCBtZW51SUQpCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBjb25zdCBpbnQgZHJhZ0JhckhlaWdodCA9IDMwOwotCi1M
UkVTVUxUIENBTExCQUNLIFduZFByb2MoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3
UGFyYW0sIExQQVJBTSBsUGFyYW0pCitMUkVTVUxUIENBTExCQUNLIEJyb3dzZXJXaW5kb3c6Oldu
ZFByb2MoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFy
YW0pCiB7Ci0gICAgV05EUFJPQyBwYXJlbnRQcm9jID0gKGdNaW5pQnJvd3NlcikgPyAoZ01pbmlC
cm93c2VyLT51c2VzTGF5ZXJlZFdlYlZpZXcoKSA/IERlZldlYktpdFByb2MgOiBEZWZXaW5kb3dQ
cm9jKSA6IERlZldpbmRvd1Byb2M7CisgICAgV05EUFJPQyBwYXJlbnRQcm9jID0gRGVmV2luZG93
UHJvYzsKIAogICAgIHN3aXRjaCAobWVzc2FnZSkgewotICAgIGNhc2UgV01fTkNISVRURVNUOgot
ICAgICAgICBpZiAoZ01pbmlCcm93c2VyICYmIGdNaW5pQnJvd3Nlci0+dXNlc0xheWVyZWRXZWJW
aWV3KCkpIHsKLSAgICAgICAgICAgIFJFQ1Qgd2luZG93OwotICAgICAgICAgICAgOjpHZXRXaW5k
b3dSZWN0KGhXbmQsICZ3aW5kb3cpOwotICAgICAgICAgICAgLy8gRm9yIHRlc3Rpbmcgb3VyIHRy
YW5zcGFyZW50IHdpbmRvdywgd2UgbmVlZCBhIHJlZ2lvbiB0byB1c2UgYXMgYSBoYW5kbGUgZm9y
Ci0gICAgICAgICAgICAvLyBkcmFnZ2luZy4gVGhlIHJpZ2h0IHdheSB0byBkbyB0aGlzIHdvdWxk
IGJlIHRvIHF1ZXJ5IHRoZSB3ZWIgdmlldyB0byBzZWUgd2hhdCdzCi0gICAgICAgICAgICAvLyB1
bmRlciB0aGUgbW91c2UuIEhvd2V2ZXIsIGZvciB0ZXN0aW5nIHB1cnBvc2VzIHdlIGp1c3QgdXNl
IGFuIGFyYml0cmFyeQotICAgICAgICAgICAgLy8gMzAgbG9naWNhbCBwaXhlbCBiYW5kIGF0IHRo
ZSB0b3Agb2YgdGhlIHZpZXcgYXMgYW4gYXJiaXRyYXJ5IGdyaXBwaW5nIGxvY2F0aW9uLgotICAg
ICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIHdpdGhpbiB0aGlzIGJhZCwg
cmV0dXJuIEhUX0NBUFRJT04gdG8gdGVsbCBXaW5kb3dzIHdlIHdhbnQgdG8KLSAgICAgICAgICAg
IC8vIHRyZWF0IHRoaXMgcmVnaW9uIGFzIGlmIGl0IHdlcmUgdGhlIHRpdGxlIGJhciBvbiBhIG5v
cm1hbCB3aW5kb3cuCi0gICAgICAgICAgICBpbnQgeSA9IEhJV09SRChsUGFyYW0pOwotICAgICAg
ICAgICAgZmxvYXQgc2NhbGVkRHJhZ0JhckhlaWdodEZhY3RvciA9IGRyYWdCYXJIZWlnaHQgKiBn
TWluaUJyb3dzZXItPmRldmljZVNjYWxlRmFjdG9yKCk7Ci0gICAgICAgICAgICBpZiAoKHkgPiB3
aW5kb3cudG9wKSAmJiAoeSA8IHdpbmRvdy50b3AgKyBzY2FsZWREcmFnQmFySGVpZ2h0RmFjdG9y
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gSFRDQVBUSU9OOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiBDYWxsV2luZG93UHJvYyhwYXJlbnRQcm9jLCBoV25kLCBtZXNzYWdlLCB3UGFyYW0s
IGxQYXJhbSk7CiAgICAgY2FzZSBXTV9DT01NQU5EOiB7CiAgICAgICAgIGludCB3bUlkID0gTE9X
T1JEKHdQYXJhbSk7CiAgICAgICAgIGludCB3bUV2ZW50ID0gSElXT1JEKHdQYXJhbSk7CiAgICAg
ICAgIGlmICh3bUlkID49IElETV9ISVNUT1JZX0xJTkswICYmIHdtSWQgPD0gSURNX0hJU1RPUllf
TElOSzkpIHsKICAgICAgICAgICAgIGlmIChnTWluaUJyb3dzZXIpCi0gICAgICAgICAgICAgICAg
Z01pbmlCcm93c2VyLT5uYXZpZ2F0ZVRvSGlzdG9yeShoV25kLCB3bUlkKTsKKyAgICAgICAgICAg
ICAgICBnTWluaUJyb3dzZXItPm5hdmlnYXRlVG9IaXN0b3J5KHdtSWQgLSBJRE1fSElTVE9SWV9M
SU5LMCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAvLyBQYXJzZSB0
aGUgbWVudSBzZWxlY3Rpb25zOgpAQCAtNDcyLDcgKzM0NSw4IEBAIExSRVNVTFQgQ0FMTEJBQ0sg
V25kUHJvYyhIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQ
YXJhbSkKICAgICAgICAgICAgIERlc3Ryb3lXaW5kb3coaFduZCk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBJRE1fUFJJTlQ6Ci0gICAgICAgICAgICBQcmludFZpZXcoaFduZCwg
bWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0pOworICAgICAgICAgICAgaWYgKGdNaW5pQnJvd3NlcikK
KyAgICAgICAgICAgICAgICBnTWluaUJyb3dzZXItPnByaW50KCk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBJRE1fV0VCX0lOU1BFQ1RPUjoKICAgICAgICAgICAgIGlmIChnTWlu
aUJyb3dzZXIpCkBAIC00ODcsNyArMzYxLDcgQEAgTFJFU1VMVCBDQUxMQkFDSyBXbmRQcm9jKEhX
TkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQogICAg
ICAgICBjYXNlIElETV9ISVNUT1JZX0JBQ0tXQVJEOgogICAgICAgICBjYXNlIElETV9ISVNUT1JZ
X0ZPUldBUkQ6CiAgICAgICAgICAgICBpZiAoZ01pbmlCcm93c2VyKQotICAgICAgICAgICAgICAg
IGdNaW5pQnJvd3Nlci0+bmF2aWdhdGVGb3J3YXJkT3JCYWNrd2FyZChoV25kLCB3bUlkKTsKKyAg
ICAgICAgICAgICAgICBnTWluaUJyb3dzZXItPm5hdmlnYXRlRm9yd2FyZE9yQmFja3dhcmQod21J
ZCA9PSBJRE1fSElTVE9SWV9CQUNLV0FSRCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBJRE1fVUFfT1RIRVI6CiAgICAgICAgICAgICBpZiAod21FdmVudCkKQEAgLTUyNCwxNCAr
Mzk4LDE0IEBAIExSRVNVTFQgQ0FMTEJBQ0sgV25kUHJvYyhIV05EIGhXbmQsIFVJTlQgbWVzc2Fn
ZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKICAgICAgICAgUG9zdFF1aXRNZXNzYWdl
KDApOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFdNX1NJWkU6Ci0gICAgICAgIGlmICghZ01p
bmlCcm93c2VyIHx8ICFnTWluaUJyb3dzZXItPmhhc1dlYlZpZXcoKSB8fCBnTWluaUJyb3dzZXIt
PnVzZXNMYXllcmVkV2ViVmlldygpKQorICAgICAgICBpZiAoIWdCcm93c2VyV2luZG93KQogICAg
ICAgICAgICAgcmV0dXJuIENhbGxXaW5kb3dQcm9jKHBhcmVudFByb2MsIGhXbmQsIG1lc3NhZ2Us
IHdQYXJhbSwgbFBhcmFtKTsKIAotICAgICAgICByZXNpemVTdWJWaWV3cygpOworICAgICAgICBn
QnJvd3NlcldpbmRvdy0+cmVzaXplU3ViVmlld3MoKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBXTV9EUElDSEFOR0VEOgotICAgICAgICBpZiAoZ01pbmlCcm93c2VyKQotICAgICAgICAgICAg
Z01pbmlCcm93c2VyLT51cGRhdGVEZXZpY2VTY2FsZUZhY3RvcigpOworICAgICAgICBpZiAoZ0Jy
b3dzZXJXaW5kb3cpCisgICAgICAgICAgICBnQnJvd3NlcldpbmRvdy0+dXBkYXRlRGV2aWNlU2Nh
bGVGYWN0b3IoKTsKICAgICAgICAgcmV0dXJuIENhbGxXaW5kb3dQcm9jKHBhcmVudFByb2MsIGhX
bmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtKTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1
cm4gQ2FsbFdpbmRvd1Byb2MocGFyZW50UHJvYywgaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFy
YW0pOwpAQCAtNjIwLDcgKzQ5NCw4IEBAIElOVF9QVFIgQ0FMTEJBQ0sgQ2FjaGVzKEhXTkQgaERs
ZywgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQogICAgICAgICBy
ZXR1cm4gKElOVF9QVFIpVFJVRTsKIAogICAgIGNhc2UgV01fUEFJTlQ6Ci0gICAgICAgIHVwZGF0
ZVN0YXRpc3RpY3MoaERsZyk7CisgICAgICAgIGlmIChnTWluaUJyb3dzZXIpCisgICAgICAgICAg
ICBnTWluaUJyb3dzZXItPnVwZGF0ZVN0YXRpc3RpY3MoaERsZyk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KIApAQCAtNjMzLDExICs1MDgsMTEgQEAgSU5UX1BUUiBDQUxMQkFDSyBDdXN0b21Vc2Vy
QWdlbnQoSFdORCBoRGxnLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTQogICAg
IHN3aXRjaCAobWVzc2FnZSkgewogICAgIGNhc2UgV01fSU5JVERJQUxPRzogewogICAgICAgICBI
V05EIGVkaXQgPSA6OkdldERsZ0l0ZW0oaERsZywgSURDX1VTRVJfQUdFTlRfSU5QVVQpOwotICAg
ICAgICBfYnN0cl90IHVzZXJBZ2VudDsKKyAgICAgICAgc3RkOjp3c3RyaW5nIHVzZXJBZ2VudDsK
ICAgICAgICAgaWYgKGdNaW5pQnJvd3NlcikKICAgICAgICAgICAgIHVzZXJBZ2VudCA9IGdNaW5p
QnJvd3Nlci0+dXNlckFnZW50KCk7CiAKLSAgICAgICAgOjpTZXRXaW5kb3dUZXh0KGVkaXQsIHN0
YXRpY19jYXN0PExQQ1RTVFI+KHVzZXJBZ2VudCkpOworICAgICAgICA6OlNldFdpbmRvd1RleHQo
ZWRpdCwgdXNlckFnZW50LmNfc3RyKCkpOwogICAgICAgICByZXR1cm4gKElOVF9QVFIpVFJVRTsK
ICAgICB9CiAKQEAgLTY0OSwxMSArNTI0LDkgQEAgSU5UX1BUUiBDQUxMQkFDSyBDdXN0b21Vc2Vy
QWdlbnQoSFdORCBoRGxnLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTQogICAg
ICAgICAgICAgaW50IHN0ckxlbiA9IDo6R2V0V2luZG93VGV4dChlZGl0LCBidWZmZXIsIDEwMjQp
OwogICAgICAgICAgICAgYnVmZmVyW3N0ckxlbl0gPSAwOwogCi0gICAgICAgICAgICBfYnN0cl90
IGJzdHIoYnVmZmVyKTsKLSAgICAgICAgICAgIGlmIChic3RyLmxlbmd0aCgpKSB7CisgICAgICAg
ICAgICBzdGQ6OndzdHJpbmcgYnN0cihidWZmZXIpOworICAgICAgICAgICAgaWYgKGJzdHIubGVu
Z3RoKCkpCiAgICAgICAgICAgICAgICAgZ01pbmlCcm93c2VyLT5zZXRVc2VyQWdlbnQoYnN0cik7
Ci0gICAgICAgICAgICAgICAgOjpQb3N0TWVzc2FnZShoTWFpblduZCwgc3RhdGljX2Nhc3Q8VUlO
VD4oV01fQ09NTUFORCksIE1BS0VMUEFSQU0oSURNX1VBX09USEVSLCAxKSwgMCk7Ci0gICAgICAg
ICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoTE9XT1JEKHdQYXJhbSkgPT0gSURPSyB8
fCBMT1dPUkQod1BhcmFtKSA9PSBJRENBTkNFTCkgewpAQCAtNjY1LDIyNiArNTM4LDIwIEBAIElO
VF9QVFIgQ0FMTEJBQ0sgQ3VzdG9tVXNlckFnZW50KEhXTkQgaERsZywgVUlOVCBtZXNzYWdlLCBX
UEFSQU0gd1BhcmFtLCBMUEFSQU0KICAgICByZXR1cm4gKElOVF9QVFIpRkFMU0U7CiB9CiAKLUhS
RVNVTFQgRGlzcGxheUF1dGhEaWFsb2coc3RkOjp3c3RyaW5nJiB1c2VybmFtZSwgc3RkOjp3c3Ry
aW5nJiBwYXNzd29yZCkKLXsKLSAgICBhdXRvIHJlc3VsdCA9IERpYWxvZ0JveChoSW5zdCwgTUFL
RUlOVFJFU09VUkNFKElERF9BVVRIKSwgaE1haW5XbmQsIEF1dGhEaWFsb2dQcm9jKTsKLSAgICBp
ZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJuIEVfRkFJTDsKLQotICAgIGF1dG8gcGFpciA9IHJl
aW50ZXJwcmV0X2Nhc3Q8c3RkOjpwYWlyPHN0ZDo6d3N0cmluZywgc3RkOjp3c3RyaW5nPio+KHJl
c3VsdCk7Ci0gICAgdXNlcm5hbWUgPSBwYWlyLT5maXJzdDsKLSAgICBwYXNzd29yZCA9IHBhaXIt
PnNlY29uZDsKLSAgICBkZWxldGUgcGFpcjsKLQotICAgIHJldHVybiBTX09LOwotfQotCi1JTlRf
UFRSIENBTExCQUNLIEF1dGhEaWFsb2dQcm9jKEhXTkQgaERsZywgVUlOVCBtZXNzYWdlLCBXUEFS
QU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQotewotICAgIHN3aXRjaCAobWVzc2FnZSkgewotICAg
IGNhc2UgV01fSU5JVERJQUxPRzogewotICAgICAgICBIV05EIGVkaXQgPSA6OkdldERsZ0l0ZW0o
aERsZywgSURDX0FVVEhfVVNFUik7Ci0gICAgICAgIDo6U2V0V2luZG93VGV4dChlZGl0LCBzdGF0
aWNfY2FzdDxMUENUU1RSPihMIiIpKTsKLSAgICAgICAgCi0gICAgICAgIGVkaXQgPSA6OkdldERs
Z0l0ZW0oaERsZywgSURDX0FVVEhfUEFTU1dPUkQpOwotICAgICAgICA6OlNldFdpbmRvd1RleHQo
ZWRpdCwgc3RhdGljX2Nhc3Q8TFBDVFNUUj4oTCIiKSk7Ci0gICAgICAgIHJldHVybiAoSU5UX1BU
UilUUlVFOwotICAgIH0KLQotICAgIGNhc2UgV01fQ09NTUFORDoKLSAgICAgICAgaWYgKExPV09S
RCh3UGFyYW0pID09IElET0sgfHwgTE9XT1JEKHdQYXJhbSkgPT0gSURDQU5DRUwpIHsKLSAgICAg
ICAgICAgIElOVF9QVFIgcmVzdWx0IHsgfTsKLQotICAgICAgICAgICAgaWYgKExPV09SRCh3UGFy
YW0pID09IElET0spIHsKLSAgICAgICAgICAgICAgICBUQ0hBUiB1c2VyWzI1Nl07Ci0gICAgICAg
ICAgICAgICAgaW50IHN0ckxlbiA9IDo6R2V0V2luZG93VGV4dCg6OkdldERsZ0l0ZW0oaERsZywg
SURDX0FVVEhfVVNFUiksIHVzZXIsIDI1Nik7Ci0gICAgICAgICAgICAgICAgdXNlcltzdHJMZW5d
ID0gMDsKLQotICAgICAgICAgICAgICAgIFRDSEFSIHBhc3NbMjU2XTsKLSAgICAgICAgICAgICAg
ICBzdHJMZW4gPSA6OkdldFdpbmRvd1RleHQoOjpHZXREbGdJdGVtKGhEbGcsIElEQ19BVVRIX1BB
U1NXT1JEKSwgcGFzcywgMjU2KTsKLSAgICAgICAgICAgICAgICBwYXNzW3N0ckxlbl0gPSAwOwot
Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdDxJTlRfUFRSPihuZXcg
c3RkOjpwYWlyPHN0ZDo6d3N0cmluZywgc3RkOjp3c3RyaW5nPih1c2VyLCBwYXNzKSk7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIDo6RW5kRGlhbG9nKGhEbGcsIHJlc3VsdCk7Ci0gICAg
ICAgICAgICByZXR1cm4gKElOVF9QVFIpVFJVRTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgcmV0dXJuIChJTlRfUFRSKUZBTFNFOwotfQotCi1zdGF0aWMgdm9pZCBsb2Fk
VVJMKEJTVFIgcGFzc2VkVVJMKQordm9pZCBsb2FkVVJMKEJTVFIgcGFzc2VkVVJMKQogewogICAg
IGlmIChGQUlMRUQoZ01pbmlCcm93c2VyLT5sb2FkVVJMKHBhc3NlZFVSTCkpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBTZXRGb2N1cyhnVmlld1dpbmRvdyk7CisgICAgU2V0Rm9jdXMoZ01pbmlC
cm93c2VyLT5od25kKCkpOwogfQogCi1zdGF0aWMgdm9pZCBzZXRXaW5kb3dUZXh0KEhXTkQgZGlh
bG9nLCBVSU5UIGZpZWxkLCBfYnN0cl90IHZhbHVlKQotewotICAgIDo6U2V0RGxnSXRlbVRleHQo
ZGlhbG9nLCBmaWVsZCwgdmFsdWUpOwotfQotCi1zdGF0aWMgdm9pZCBzZXRXaW5kb3dUZXh0KEhX
TkQgZGlhbG9nLCBVSU5UIGZpZWxkLCBVSU5UIHZhbHVlKQotewotICAgIFN0cmluZyB2YWx1ZVN0
ciA9IFdURjo6U3RyaW5nOjpudW1iZXIodmFsdWUpOwotCi0gICAgc2V0V2luZG93VGV4dChkaWFs
b2csIGZpZWxkLCBfYnN0cl90KHZhbHVlU3RyLnV0ZjgoKS5kYXRhKCkpKTsKLX0KLQotdHlwZWRl
ZiBfY29tX3B0cl90PF9jb21fSUlJRDxJUHJvcGVydHlCYWcsICZfX3V1aWRvZihJUHJvcGVydHlC
YWcpPj4gSVByb3BlcnR5QmFnUHRyOwotCi1zdGF0aWMgdm9pZCBzZXRXaW5kb3dUZXh0KEhXTkQg
ZGlhbG9nLCBVSU5UIGZpZWxkLCBJUHJvcGVydHlCYWdQdHIgc3RhdGlzdGljcywgY29uc3QgX2Jz
dHJfdCYga2V5KQotewotICAgIF92YXJpYW50X3QgdmFyOwotICAgIFZfVlQoJnZhcikgPSBWVF9V
STg7Ci0gICAgaWYgKEZBSUxFRChzdGF0aXN0aWNzLT5SZWFkKGtleSwgJnZhci5HZXRWQVJJQU5U
KCksIG51bGxwdHIpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdW5zaWduZWQgbG9uZyBsb25n
IHZhbHVlID0gVl9VSTgoJnZhcik7Ci0gICAgU3RyaW5nIHZhbHVlU3RyID0gV1RGOjpTdHJpbmc6
Om51bWJlcih2YWx1ZSk7Ci0KLSAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgZmllbGQsIF9ic3Ry
X3QodmFsdWVTdHIudXRmOCgpLmRhdGEoKSkpOwotfQotCi1zdGF0aWMgdm9pZCBzZXRXaW5kb3dU
ZXh0KEhXTkQgZGlhbG9nLCBVSU5UIGZpZWxkLCBDRkRpY3Rpb25hcnlSZWYgZGljdGlvbmFyeSwg
Q0ZTdHJpbmdSZWYga2V5LCBVSU5UJiB0b3RhbCkKLXsKLSAgICBDRk51bWJlclJlZiBjb3VudE51
bSA9IHN0YXRpY19jYXN0PENGTnVtYmVyUmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShkaWN0aW9u
YXJ5LCBrZXkpKTsKLSAgICBpZiAoIWNvdW50TnVtKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
bnQgY291bnQgPSAwOwotICAgIENGTnVtYmVyR2V0VmFsdWUoY291bnROdW0sIGtDRk51bWJlcklu
dFR5cGUsICZjb3VudCk7Ci0KLSAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgZmllbGQsIHN0YXRp
Y19jYXN0PFVJTlQ+KGNvdW50KSk7Ci0gICAgdG90YWwgKz0gY291bnQ7Ci19Ci0KLXN0YXRpYyB2
b2lkIHVwZGF0ZVN0YXRpc3RpY3MoSFdORCBkaWFsb2cpCi17Ci0gICAgaWYgKCFnTWluaUJyb3dz
ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIElXZWJDb3JlU3RhdGlzdGljc1B0ciB3ZWJDb3Jl
U3RhdGlzdGljcyA9IGdNaW5pQnJvd3Nlci0+c3RhdGlzdGljcygpOwotICAgIGlmICghd2ViQ29y
ZVN0YXRpc3RpY3MpCi0gICAgICAgIHJldHVybjsKLQotICAgIElQcm9wZXJ0eUJhZ1B0ciBzdGF0
aXN0aWNzOwotICAgIEhSRVNVTFQgaHIgPSB3ZWJDb3JlU3RhdGlzdGljcy0+bWVtb3J5U3RhdGlz
dGljcygmc3RhdGlzdGljcy5HZXRJbnRlcmZhY2VQdHIoKSk7Ci0gICAgaWYgKEZBSUxFRChocikp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEZhc3RNYWxsb2MuCi0gICAgc2V0V2luZG93VGV4
dChkaWFsb2csIElEQ19SRVNFUlZFRF9WTSwgc3RhdGlzdGljcywgIkZhc3RNYWxsb2NSZXNlcnZl
ZFZNQnl0ZXMiKTsKLSAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX0NPTU1JVFRFRF9WTSwg
c3RhdGlzdGljcywgIkZhc3RNYWxsb2NDb21taXR0ZWRWTUJ5dGVzIik7Ci0gICAgc2V0V2luZG93
VGV4dChkaWFsb2csIElEQ19GUkVFX0xJU1RfQllURVMsIHN0YXRpc3RpY3MsICJGYXN0TWFsbG9j
RnJlZUxpc3RCeXRlcyIpOwotCi0gICAgLy8gV2ViQ29yZSBDYWNoZS4KLSNpZiBVU0UoQ0YpCi0g
ICAgSVdlYkNhY2hlUHRyIHdlYkNhY2hlID0gZ01pbmlCcm93c2VyLT53ZWJDYWNoZSgpOwotCi0g
ICAgaW50IGRpY3RDb3VudCA9IDY7Ci0gICAgSVByb3BlcnR5QmFnKiBjYWNoZURpY3RbNl0gPSB7
IDAgfTsKLSAgICBpZiAoRkFJTEVEKHdlYkNhY2hlLT5zdGF0aXN0aWNzKCZkaWN0Q291bnQsIGNh
Y2hlRGljdCkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDT01QdHI8Q0ZEaWN0aW9uYXJ5UHJv
cGVydHlCYWc+IGNvdW50cywgc2l6ZXMsIGxpdmVTaXplcywgZGVjb2RlZFNpemVzLCBwdXJnYWJs
ZVNpemVzOwotICAgIGNvdW50cy5hZG9wdFJlZihyZWludGVycHJldF9jYXN0PENGRGljdGlvbmFy
eVByb3BlcnR5QmFnKj4oY2FjaGVEaWN0WzBdKSk7Ci0gICAgc2l6ZXMuYWRvcHRSZWYocmVpbnRl
cnByZXRfY2FzdDxDRkRpY3Rpb25hcnlQcm9wZXJ0eUJhZyo+KGNhY2hlRGljdFsxXSkpOwotICAg
IGxpdmVTaXplcy5hZG9wdFJlZihyZWludGVycHJldF9jYXN0PENGRGljdGlvbmFyeVByb3BlcnR5
QmFnKj4oY2FjaGVEaWN0WzJdKSk7Ci0gICAgZGVjb2RlZFNpemVzLmFkb3B0UmVmKHJlaW50ZXJw
cmV0X2Nhc3Q8Q0ZEaWN0aW9uYXJ5UHJvcGVydHlCYWcqPihjYWNoZURpY3RbM10pKTsKLSAgICBw
dXJnYWJsZVNpemVzLmFkb3B0UmVmKHJlaW50ZXJwcmV0X2Nhc3Q8Q0ZEaWN0aW9uYXJ5UHJvcGVy
dHlCYWcqPihjYWNoZURpY3RbNF0pKTsKLQotICAgIHN0YXRpYyBDRlN0cmluZ1JlZiBpbWFnZXNL
ZXkgPSBDRlNUUigiaW1hZ2VzIik7Ci0gICAgc3RhdGljIENGU3RyaW5nUmVmIHN0eWxlc2hlZXRz
S2V5ID0gQ0ZTVFIoInN0eWxlIHNoZWV0cyIpOwotICAgIHN0YXRpYyBDRlN0cmluZ1JlZiB4c2xL
ZXkgPSBDRlNUUigieHNsIik7Ci0gICAgc3RhdGljIENGU3RyaW5nUmVmIHNjcmlwdHNLZXkgPSBD
RlNUUigic2NyaXB0cyIpOwotCi0gICAgaWYgKGNvdW50cykgewotICAgICAgICBVSU5UIHRvdGFs
T2JqZWN0cyA9IDA7Ci0gICAgICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJRENfSU1BR0VTX09C
SkVDVF9DT1VOVCwgY291bnRzLT5kaWN0aW9uYXJ5KCksIGltYWdlc0tleSwgdG90YWxPYmplY3Rz
KTsKLSAgICAgICAgc2V0V2luZG93VGV4dChkaWFsb2csIElEQ19DU1NfT0JKRUNUX0NPVU5ULCBj
b3VudHMtPmRpY3Rpb25hcnkoKSwgc3R5bGVzaGVldHNLZXksIHRvdGFsT2JqZWN0cyk7Ci0gICAg
ICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJRENfWFNMX09CSkVDVF9DT1VOVCwgY291bnRzLT5k
aWN0aW9uYXJ5KCksIHhzbEtleSwgdG90YWxPYmplY3RzKTsKLSAgICAgICAgc2V0V2luZG93VGV4
dChkaWFsb2csIElEQ19KU0NfT0JKRUNUX0NPVU5ULCBjb3VudHMtPmRpY3Rpb25hcnkoKSwgc2Ny
aXB0c0tleSwgdG90YWxPYmplY3RzKTsKLSAgICAgICAgc2V0V2luZG93VGV4dChkaWFsb2csIElE
Q19UT1RBTF9PQkpFQ1RfQ09VTlQsIHRvdGFsT2JqZWN0cyk7Ci0gICAgfQotCi0gICAgaWYgKHNp
emVzKSB7Ci0gICAgICAgIFVJTlQgdG90YWxCeXRlcyA9IDA7Ci0gICAgICAgIHNldFdpbmRvd1Rl
eHQoZGlhbG9nLCBJRENfSU1BR0VTX0JZVEVTLCBzaXplcy0+ZGljdGlvbmFyeSgpLCBpbWFnZXNL
ZXksIHRvdGFsQnl0ZXMpOwotICAgICAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX0NTU19C
WVRFUywgc2l6ZXMtPmRpY3Rpb25hcnkoKSwgc3R5bGVzaGVldHNLZXksIHRvdGFsQnl0ZXMpOwot
ICAgICAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX1hTTF9CWVRFUywgc2l6ZXMtPmRpY3Rp
b25hcnkoKSwgeHNsS2V5LCB0b3RhbEJ5dGVzKTsKLSAgICAgICAgc2V0V2luZG93VGV4dChkaWFs
b2csIElEQ19KU0NfQllURVMsIHNpemVzLT5kaWN0aW9uYXJ5KCksIHNjcmlwdHNLZXksIHRvdGFs
Qnl0ZXMpOwotICAgICAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX1RPVEFMX0JZVEVTLCB0
b3RhbEJ5dGVzKTsKLSAgICB9Ci0KLSAgICBpZiAobGl2ZVNpemVzKSB7Ci0gICAgICAgIFVJTlQg
dG90YWxMaXZlQnl0ZXMgPSAwOwotICAgICAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX0lN
QUdFU19MSVZFX0NPVU5ULCBsaXZlU2l6ZXMtPmRpY3Rpb25hcnkoKSwgaW1hZ2VzS2V5LCB0b3Rh
bExpdmVCeXRlcyk7Ci0gICAgICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJRENfQ1NTX0xJVkVf
Q09VTlQsIGxpdmVTaXplcy0+ZGljdGlvbmFyeSgpLCBzdHlsZXNoZWV0c0tleSwgdG90YWxMaXZl
Qnl0ZXMpOwotICAgICAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX1hTTF9MSVZFX0NPVU5U
LCBsaXZlU2l6ZXMtPmRpY3Rpb25hcnkoKSwgeHNsS2V5LCB0b3RhbExpdmVCeXRlcyk7Ci0gICAg
ICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJRENfSlNDX0xJVkVfQ09VTlQsIGxpdmVTaXplcy0+
ZGljdGlvbmFyeSgpLCBzY3JpcHRzS2V5LCB0b3RhbExpdmVCeXRlcyk7Ci0gICAgICAgIHNldFdp
bmRvd1RleHQoZGlhbG9nLCBJRENfVE9UQUxfTElWRV9DT1VOVCwgdG90YWxMaXZlQnl0ZXMpOwot
ICAgIH0KLQotICAgIGlmIChkZWNvZGVkU2l6ZXMpIHsKLSAgICAgICAgVUlOVCB0b3RhbERlY29k
ZWQgPSAwOwotICAgICAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX0lNQUdFU19ERUNPREVE
X0NPVU5ULCBkZWNvZGVkU2l6ZXMtPmRpY3Rpb25hcnkoKSwgaW1hZ2VzS2V5LCB0b3RhbERlY29k
ZWQpOwotICAgICAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX0NTU19ERUNPREVEX0NPVU5U
LCBkZWNvZGVkU2l6ZXMtPmRpY3Rpb25hcnkoKSwgc3R5bGVzaGVldHNLZXksIHRvdGFsRGVjb2Rl
ZCk7Ci0gICAgICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJRENfWFNMX0RFQ09ERURfQ09VTlQs
IGRlY29kZWRTaXplcy0+ZGljdGlvbmFyeSgpLCB4c2xLZXksIHRvdGFsRGVjb2RlZCk7Ci0gICAg
ICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJRENfSlNDX0RFQ09ERURfQ09VTlQsIGRlY29kZWRT
aXplcy0+ZGljdGlvbmFyeSgpLCBzY3JpcHRzS2V5LCB0b3RhbERlY29kZWQpOwotICAgICAgICBz
ZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX1RPVEFMX0RFQ09ERUQsIHRvdGFsRGVjb2RlZCk7Ci0g
ICAgfQotCi0gICAgaWYgKHB1cmdhYmxlU2l6ZXMpIHsKLSAgICAgICAgVUlOVCB0b3RhbFB1cmdh
YmxlID0gMDsKLSAgICAgICAgc2V0V2luZG93VGV4dChkaWFsb2csIElEQ19JTUFHRVNfUFVSR0VB
QkxFX0NPVU5ULCBwdXJnYWJsZVNpemVzLT5kaWN0aW9uYXJ5KCksIGltYWdlc0tleSwgdG90YWxQ
dXJnYWJsZSk7Ci0gICAgICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJRENfQ1NTX1BVUkdFQUJM
RV9DT1VOVCwgcHVyZ2FibGVTaXplcy0+ZGljdGlvbmFyeSgpLCBzdHlsZXNoZWV0c0tleSwgdG90
YWxQdXJnYWJsZSk7Ci0gICAgICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJRENfWFNMX1BVUkdF
QUJMRV9DT1VOVCwgcHVyZ2FibGVTaXplcy0+ZGljdGlvbmFyeSgpLCB4c2xLZXksIHRvdGFsUHVy
Z2FibGUpOwotICAgICAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX0pTQ19QVVJHRUFCTEVf
Q09VTlQsIHB1cmdhYmxlU2l6ZXMtPmRpY3Rpb25hcnkoKSwgc2NyaXB0c0tleSwgdG90YWxQdXJn
YWJsZSk7Ci0gICAgICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJRENfVE9UQUxfUFVSR0VBQkxF
LCB0b3RhbFB1cmdhYmxlKTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIC8vIEphdmFTY3JpcHQgSGVh
cC4KLSAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX0pTQ19IRUFQX1NJWkUsIHN0YXRpc3Rp
Y3MsICJKYXZhU2NyaXB0SGVhcFNpemUiKTsKLSAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURD
X0pTQ19IRUFQX0ZSRUUsIHN0YXRpc3RpY3MsICJKYXZhU2NyaXB0RnJlZVNpemUiKTsKLQotICAg
IFVJTlQgY291bnQ7Ci0gICAgaWYgKFNVQ0NFRURFRCh3ZWJDb3JlU3RhdGlzdGljcy0+amF2YVNj
cmlwdE9iamVjdHNDb3VudCgmY291bnQpKSkKLSAgICAgICAgc2V0V2luZG93VGV4dChkaWFsb2cs
IElEQ19UT1RBTF9KU0NfSEVBUF9PQkpFQ1RTLCBjb3VudCk7Ci0gICAgaWYgKFNVQ0NFRURFRCh3
ZWJDb3JlU3RhdGlzdGljcy0+amF2YVNjcmlwdEdsb2JhbE9iamVjdHNDb3VudCgmY291bnQpKSkK
LSAgICAgICAgc2V0V2luZG93VGV4dChkaWFsb2csIElEQ19HTE9CQUxfSlNDX0hFQVBfT0JKRUNU
UywgY291bnQpOwotICAgIGlmIChTVUNDRUVERUQod2ViQ29yZVN0YXRpc3RpY3MtPmphdmFTY3Jp
cHRQcm90ZWN0ZWRPYmplY3RzQ291bnQoJmNvdW50KSkpCi0gICAgICAgIHNldFdpbmRvd1RleHQo
ZGlhbG9nLCBJRENfUFJPVEVDVEVEX0pTQ19IRUFQX09CSkVDVFMsIGNvdW50KTsKLQotICAgIC8v
IEZvbnQgYW5kIEdseXBoIENhY2hlcy4KLSAgICBpZiAoU1VDQ0VFREVEKHdlYkNvcmVTdGF0aXN0
aWNzLT5jYWNoZWRGb250RGF0YUNvdW50KCZjb3VudCkpKQotICAgICAgICBzZXRXaW5kb3dUZXh0
KGRpYWxvZywgSURDX1RPVEFMX0ZPTlRfT0JKRUNUUywgY291bnQpOwotICAgIGlmIChTVUNDRUVE
RUQod2ViQ29yZVN0YXRpc3RpY3MtPmNhY2hlZEZvbnREYXRhSW5hY3RpdmVDb3VudCgmY291bnQp
KSkKLSAgICAgICAgc2V0V2luZG93VGV4dChkaWFsb2csIElEQ19JTkFDVElWRV9GT05UX09CSkVD
VFMsIGNvdW50KTsKLSAgICBpZiAoU1VDQ0VFREVEKHdlYkNvcmVTdGF0aXN0aWNzLT5nbHlwaFBh
Z2VDb3VudCgmY291bnQpKSkKLSAgICAgICAgc2V0V2luZG93VGV4dChkaWFsb2csIElEQ19HTFlQ
SF9QQUdFUywgY291bnQpOwotCi0gICAgLy8gU2l0ZSBJY29uIERhdGFiYXNlLgotICAgIGlmIChT
VUNDRUVERUQod2ViQ29yZVN0YXRpc3RpY3MtPmljb25QYWdlVVJMTWFwcGluZ0NvdW50KCZjb3Vu
dCkpKQotICAgICAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX1BBR0VfVVJMX01BUFBJTkdT
LCBjb3VudCk7Ci0gICAgaWYgKFNVQ0NFRURFRCh3ZWJDb3JlU3RhdGlzdGljcy0+aWNvblJldGFp
bmVkUGFnZVVSTENvdW50KCZjb3VudCkpKQotICAgICAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywg
SURDX1JFVEFJTkVEX1BBR0VfVVJMUywgY291bnQpOwotICAgIGlmIChTVUNDRUVERUQod2ViQ29y
ZVN0YXRpc3RpY3MtPmljb25SZWNvcmRDb3VudCgmY291bnQpKSkKLSAgICAgICAgc2V0V2luZG93
VGV4dChkaWFsb2csIElEQ19TSVRFX0lDT05fUkVDT1JEUywgY291bnQpOwotICAgIGlmIChTVUND
RUVERUQod2ViQ29yZVN0YXRpc3RpY3MtPmljb25zV2l0aERhdGFDb3VudCgmY291bnQpKSkKLSAg
ICAgICAgc2V0V2luZG93VGV4dChkaWFsb2csIElEQ19TSVRFX0lDT05TX1dJVEhfREFUQSwgY291
bnQpOwotfQotCi1zdGF0aWMgdm9pZCBwYXJzZUNvbW1hbmRMaW5lKGJvb2wmIHVzZXNMYXllcmVk
V2ViVmlldywgYm9vbCYgdXNlRnVsbERlc2t0b3AsIGJvb2wmIHBhZ2VMb2FkVGVzdGluZywgX2Jz
dHJfdCYgcmVxdWVzdGVkVVJMKQordm9pZCBwYXJzZUNvbW1hbmRMaW5lKGJvb2wmIHVzZXNMYXll
cmVkV2ViVmlldywgYm9vbCYgdXNlRnVsbERlc2t0b3AsIGJvb2wmIHBhZ2VMb2FkVGVzdGluZywg
X2JzdHJfdCYgcmVxdWVzdGVkVVJMLCBib29sJiB1c2VXSzIpCiB7CiAgICAgdXNlc0xheWVyZWRX
ZWJWaWV3ID0gZmFsc2U7CiAgICAgdXNlRnVsbERlc2t0b3AgPSBmYWxzZTsKICAgICBwYWdlTG9h
ZFRlc3RpbmcgPSBmYWxzZTsKKyAgICB1c2VXSzIgPSBmYWxzZTsKIAogICAgIGludCBhcmdjID0g
MDsKICAgICBXQ0hBUioqIGFyZ3YgPSBDb21tYW5kTGluZVRvQXJndlcoR2V0Q29tbWFuZExpbmVX
KCksICZhcmdjKTsKQEAgLTg5NywxMiArNTY0LDkgQEAgc3RhdGljIHZvaWQgcGFyc2VDb21tYW5k
TGluZShib29sJiB1c2VzTGF5ZXJlZFdlYlZpZXcsIGJvb2wmIHVzZUZ1bGxEZXNrdG9wLCBib28K
ICAgICAgICAgICAgIHBhZ2VMb2FkVGVzdGluZyA9IHRydWU7CiAgICAgICAgIGVsc2UgaWYgKCF3
Y3NpY21wKGFyZ3ZbaV0sIEwiLS1oaWdoRFBJIikpCiAgICAgICAgICAgICBjb250aW51ZTsgLy8g
aWdub3JlCisgICAgICAgIGVsc2UgaWYgKCF3Y3NpY21wKGFyZ3ZbaV0sIEwiLS13azIiKSkKKyAg
ICAgICAgICAgIHVzZVdLMiA9IHRydWU7CiAgICAgICAgIGVsc2UgaWYgKCFyZXF1ZXN0ZWRVUkwp
CiAgICAgICAgICAgICByZXF1ZXN0ZWRVUkwgPSBhcmd2W2ldOwogICAgIH0KIH0KLQotZXh0ZXJu
ICJDIiBfX2RlY2xzcGVjKGRsbGV4cG9ydCkgaW50IFdJTkFQSSBkbGxMYXVuY2hlckVudHJ5UG9p
bnQoSElOU1RBTkNFIGhJbnN0YW5jZSwgSElOU1RBTkNFIGhQcmV2SW5zdGFuY2UsIExQV1NUUiBs
cHN0ckNtZExpbmUsIGludCBuQ21kU2hvdykKLXsKLSAgICByZXR1cm4gd1dpbk1haW4oaEluc3Rh
bmNlLCBoUHJldkluc3RhbmNlLCBscHN0ckNtZExpbmUsIG5DbWRTaG93KTsKLX0KZGlmZiAtLWdp
dCBhL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9Db250ZW50V2luZG93LmggYi9Ub29scy9NaW5pQnJv
d3Nlci93aW4vQ29udGVudFdpbmRvdy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVkNTRlNGMyMmNjZWFmMGExNDJl
NWNmZWRjYjM3YjczZmVkYTQ1ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9NaW5pQnJvd3Nl
ci93aW4vQ29udGVudFdpbmRvdy5oCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTggU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
PHN0cmluZz4KKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKK2NsYXNzIENvbnRlbnRXaW5kb3cgewor
cHVibGljOgorICAgIHZpcnR1YWwgfkNvbnRlbnRXaW5kb3coKSB7IH07CisKKyAgICB2aXJ0dWFs
IGJvb2wgbG9hZFVSTChjb25zdCBzdGQ6OndzdHJpbmcmIHVybCkgPSAwOworICAgIHZpcnR1YWwg
Ym9vbCBsb2FkSFRNTFN0cmluZyhjb25zdCBzdGQ6OndzdHJpbmcmKSA9IDA7CisKKyAgICB2aXJ0
dWFsIHZvaWQgcHJpbnQoKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgbGF1bmNoSW5zcGVjdG9y
KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBuYXZpZ2F0ZUZvcndhcmRPckJhY2t3YXJkKGJvb2wg
aXNCYWNrd2FyZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBuYXZpZ2F0ZVRvSGlzdG9yeSh1bnNp
Z25lZCBoaXN0b3J5RW50cnkpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRBVkZvdW5kYXRp
b25FbmFibGVkKGJvb2wpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QWNjZWxlcmF0ZWRDb21w
b3NpdGluZ0VuYWJsZWQoYm9vbCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRBdXRob3JBbmRV
c2VyU3R5bGVzRW5hYmxlZChib29sKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldEZ1bGxTY3Jl
ZW5FbmFibGVkKGJvb2wpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0SmF2YVNjcmlwdEVuYWJs
ZWQoYm9vbCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRMb2Fkc0ltYWdlc0F1dG9tYXRpY2Fs
bHkoYm9vbCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRMb2NhbEZpbGVSZXN0cmljdGlvbnNF
bmFibGVkKGJvb2wpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2hvdWxkSW52ZXJ0Q29sb3Jz
KGJvb2wpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2hvd0NvbXBvc2l0aW5nQm9yZGVycyhi
b29sKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldFNob3dUaWxlZFNjcm9sbGluZ0luZGljYXRv
cihib29sKSA9IDA7CisKKyAgICB2aXJ0dWFsIGJvb2wgZ29CYWNrKCkgPSAwOworICAgIHZpcnR1
YWwgYm9vbCBnb0ZvcndhcmQoKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VXNlckFnZW50
KGNvbnN0IHN0ZDo6d3N0cmluZyYgY3VzdG9tVUFTdHJpbmcpID0gMDsKKyAgICB2aXJ0dWFsIHN0
ZDo6d3N0cmluZyB1c2VyQWdlbnQoKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVzZXRab29t
KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB6b29tSW4oKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IHpvb21PdXQoKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2hvd0xheWVyVHJlZSgpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3RhdGlzdGljcyhIV05EIGhEbGcpID0gMDsKKworICAg
IHZpcnR1YWwgSFdORCBod25kKCkgPSAwOworfTsKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93
c2VyL3dpbi9NaW5pQnJvd3Nlci5jcHAgYi9Ub29scy9NaW5pQnJvd3Nlci93aW4vTWluaUJyb3dz
ZXIuY3BwCmluZGV4IGZmYmM5OGY4MTQwZjlkYWY1NDEzMmUzMzYwMjY0NDUxYTJlMzFjZTUuLjIw
YWIyMmU0Yzg3NTM0NzFjNGY3NWUwMzZhYmY0Nzk1ZDZjZTVhNDYgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L01pbmlCcm93c2VyL3dpbi9NaW5pQnJvd3Nlci5jcHAKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIv
d2luL01pbmlCcm93c2VyLmNwcApAQCAtMzEsMTMgKzMxLDIwIEBACiAKICNpbmNsdWRlICJET01E
ZWZhdWx0SW1wbC5oIgogI2luY2x1ZGUgIk1pbmlCcm93c2VyTGliUmVzb3VyY2UuaCIKLSNpbmNs
dWRlICJNaW5pQnJvd3NlclJlcGxhY2UuaCIKKyNpbmNsdWRlICJNaW5pQnJvd3NlcldlYkhvc3Qu
aCIKKyNpbmNsdWRlICJQcmludFdlYlVJRGVsZWdhdGUuaCIKKyNpbmNsdWRlICJBY2Nlc3NpYmls
aXR5RGVsZWdhdGUuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWREZWxlZ2F0ZS5oIgorI2luY2x1
ZGUgIldlYkRvd25sb2FkRGVsZWdhdGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0NPTVB0ci5oPgog
I2luY2x1ZGUgPFdlYktpdExlZ2FjeS9XZWJLaXRDT01BUEkuaD4KICNpbmNsdWRlIDx3dGYvRXhw
b3J0TWFjcm9zLmg+CiAjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAKICNpZiBVU0UoQ0YpCiAjaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24v
Q0ZSdW5Mb29wLmg+CisjaW5jbHVkZSA8V2ViS2l0TGVnYWN5L0NGRGljdGlvbmFyeVByb3BlcnR5
QmFnLmg+CiAjZW5kaWYKIAogI2luY2x1ZGUgPGFsZ29yaXRobT4KQEAgLTQ3LDEwICs1NCwzMSBA
QAogI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKK2V4dGVybiBQT0lOVCBz
X3dpbmRvd1Bvc2l0aW9uOworZXh0ZXJuIFNJWkUgc193aW5kb3dTaXplOworCitib29sIGdldEFw
cERhdGFGb2xkZXIoX2JzdHJfdCYgZGlyZWN0b3J5KTsKKwogbmFtZXNwYWNlIFdlYkNvcmUgewog
ZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3JGb3JXaW5kb3coSFdORCk7CiB9CiAKK2Jvb2wgTWluaUJy
b3dzZXI6OnNldENhY2hlRm9sZGVyKCkKK3sKKyAgICBJV2ViQ2FjaGVQdHIgd2ViQ2FjaGUgPSB0
aGlzLT53ZWJDYWNoZSgpOworICAgIGlmICghd2ViQ2FjaGUpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIF9ic3RyX3QgYXBwRGF0YUZvbGRlcjsKKyAgICBpZiAoIWdldEFwcERhdGFGb2xk
ZXIoYXBwRGF0YUZvbGRlcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGFwcERhdGFG
b2xkZXIgKz0gTCJcXGNhY2hlIjsKKyAgICB3ZWJDYWNoZS0+c2V0Q2FjaGVGb2xkZXIoYXBwRGF0
YUZvbGRlcik7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogc3RhdGljIGNvbnN0IGludCBtYXhI
aXN0b3J5U2l6ZSA9IDEwOwogCiB0eXBlZGVmIF9jb21fcHRyX3Q8X2NvbV9JSUlEPElXZWJNdXRh
YmxlVVJMUmVxdWVzdCwgJl9fdXVpZG9mKElXZWJNdXRhYmxlVVJMUmVxdWVzdCk+PiBJV2ViTXV0
YWJsZVVSTFJlcXVlc3RQdHI7CkBAIC02MSwxMiArODksNjcgQEAgTWluaUJyb3dzZXI6Ok1pbmlC
cm93c2VyKEhXTkQgbWFpblduZCwgSFdORCB1cmxCYXJXbmQsIGJvb2wgdXNlTGF5ZXJlZFdlYlZp
ZXcsIGIKICAgICAsIG1fdXNlTGF5ZXJlZFdlYlZpZXcodXNlTGF5ZXJlZFdlYlZpZXcpCiAgICAg
LCBtX3BhZ2VMb2FkVGVzdENsaWVudChzdGQ6Om1ha2VfdW5pcXVlPFBhZ2VMb2FkVGVzdENsaWVu
dD4odGhpcywgcGFnZUxvYWRUZXN0aW5nKSkKIHsKKyAgICBJV2ViRG93bmxvYWREZWxlZ2F0ZVB0
ciBkb3dubG9hZERlbGVnYXRlOworCisgICAgaWYgKCFzZWVkSW5pdGlhbERlZmF1bHRQcmVmZXJl
bmNlcygpKQorICAgICAgICBnb3RvIGV4aXQ7CisKKyAgICBpZiAoIXNldFRvRGVmYXVsdFByZWZl
cmVuY2VzKCkpCisgICAgICAgIGdvdG8gZXhpdDsKKworICAgIEhSRVNVTFQgaHIgPSBpbml0KCk7
CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIGdvdG8gZXhpdDsKKworICAgIGlmICghc2V0
Q2FjaGVGb2xkZXIoKSkKKyAgICAgICAgZ290byBleGl0OworCisgICAgYXV0byB3ZWJIb3N0ID0g
bmV3IE1pbmlCcm93c2VyV2ViSG9zdCh0aGlzLCBtX2hVUkxCYXJXbmQpOworCisgICAgaHIgPSBz
ZXRGcmFtZUxvYWREZWxlZ2F0ZSh3ZWJIb3N0KTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAg
ICAgZ290byBleGl0OworCisgICAgaHIgPSBzZXRGcmFtZUxvYWREZWxlZ2F0ZVByaXZhdGUod2Vi
SG9zdCk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIGdvdG8gZXhpdDsKKworICAgIGhy
ID0gc2V0VUlEZWxlZ2F0ZShuZXcgUHJpbnRXZWJVSURlbGVnYXRlKCkpOworICAgIGlmIChGQUlM
RUQgKGhyKSkKKyAgICAgICAgZ290byBleGl0OworCisgICAgaHIgPSBzZXRBY2Nlc3NpYmlsaXR5
RGVsZWdhdGUobmV3IEFjY2Vzc2liaWxpdHlEZWxlZ2F0ZSgpKTsKKyAgICBpZiAoRkFJTEVEICho
cikpCisgICAgICAgIGdvdG8gZXhpdDsKKworICAgIGhyID0gc2V0UmVzb3VyY2VMb2FkRGVsZWdh
dGUobmV3IFJlc291cmNlTG9hZERlbGVnYXRlKHRoaXMpKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkK
KyAgICAgICAgZ290byBleGl0OworCisgICAgZG93bmxvYWREZWxlZ2F0ZS5BdHRhY2gobmV3IFdl
YkRvd25sb2FkRGVsZWdhdGUoKSk7CisgICAgaHIgPSBzZXREb3dubG9hZERlbGVnYXRlKGRvd25s
b2FkRGVsZWdhdGUpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICBnb3RvIGV4aXQ7CisK
KyAgICBSRUNUIGNsaWVudFJlY3Q7CisgICAgOjpHZXRDbGllbnRSZWN0KG1faE1haW5XbmQsICZj
bGllbnRSZWN0KTsKKworICAgIGlmICh1c2VzTGF5ZXJlZFdlYlZpZXcoKSkKKyAgICAgICAgY2xp
ZW50UmVjdCA9IHsgc193aW5kb3dQb3NpdGlvbi54LCBzX3dpbmRvd1Bvc2l0aW9uLnksIHNfd2lu
ZG93UG9zaXRpb24ueCArIHNfd2luZG93U2l6ZS5jeCwgc193aW5kb3dQb3NpdGlvbi55ICsgc193
aW5kb3dTaXplLmN5IH07CisKKyAgICBociA9IHByZXBhcmVWaWV3cyhtX2hNYWluV25kLCBjbGll
bnRSZWN0LCBtX3ZpZXdXbmQpOworICAgIGlmIChGQUlMRUQoaHIpIHx8ICFtX3ZpZXdXbmQpCisg
ICAgICAgIGdvdG8gZXhpdDsKKworICAgIGlmICh1c2VzTGF5ZXJlZFdlYlZpZXcoKSkKKyAgICAg
ICAgc3ViY2xhc3NGb3JMYXllcmVkV2luZG93KCk7CisKK2V4aXQ6CisgICAgcmV0dXJuOwogfQog
CiBIUkVTVUxUIE1pbmlCcm93c2VyOjppbml0KCkKIHsKLSAgICB1cGRhdGVEZXZpY2VTY2FsZUZh
Y3RvcigpOwotCiAgICAgSFJFU1VMVCBociA9IFdlYktpdENyZWF0ZUluc3RhbmNlKENMU0lEX1dl
YlZpZXcsIDAsIElJRF9JV2ViVmlldywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZtX3dlYlZp
ZXcuR2V0SW50ZXJmYWNlUHRyKCkpKTsKICAgICBpZiAoRkFJTEVEKGhyKSkKICAgICAgICAgcmV0
dXJuIGhyOwpAQCAtODgsNyArMTcxLDcgQEAgSFJFU1VMVCBNaW5pQnJvd3Nlcjo6aW5pdCgpCiAg
ICAgcmV0dXJuIGhyOwogfQogCi1IUkVTVUxUIE1pbmlCcm93c2VyOjpwcmVwYXJlVmlld3MoSFdO
RCBtYWluV25kLCBjb25zdCBSRUNUJiBjbGllbnRSZWN0LCBjb25zdCBCU1RSJiByZXF1ZXN0ZWRV
UkwsIEhXTkQmIHZpZXdId25kKQorSFJFU1VMVCBNaW5pQnJvd3Nlcjo6cHJlcGFyZVZpZXdzKEhX
TkQgbWFpblduZCwgY29uc3QgUkVDVCYgY2xpZW50UmVjdCwgSFdORCYgdmlld0h3bmQpCiB7CiAg
ICAgaWYgKCFtX3dlYlZpZXcpCiAgICAgICAgIHJldHVybiBFX0ZBSUw7CkBAIC0xMDEsMTUgKzE4
NCw2IEBAIEhSRVNVTFQgTWluaUJyb3dzZXI6OnByZXBhcmVWaWV3cyhIV05EIG1haW5XbmQsIGNv
bnN0IFJFQ1QmIGNsaWVudFJlY3QsIGNvbnN0IEJTCiAgICAgaWYgKEZBSUxFRChocikpCiAgICAg
ICAgIHJldHVybiBocjsKIAotICAgIGlmICghcmVxdWVzdGVkVVJMKSB7Ci0gICAgICAgIElXZWJG
cmFtZVB0ciBmcmFtZTsKLSAgICAgICAgaHIgPSBtX3dlYlZpZXctPm1haW5GcmFtZSgmZnJhbWUu
R2V0SW50ZXJmYWNlUHRyKCkpOwotICAgICAgICBpZiAoRkFJTEVEKGhyKSkKLSAgICAgICAgICAg
IHJldHVybiBocjsKLQotICAgICAgICBmcmFtZS0+bG9hZEhUTUxTdHJpbmcoX2JzdHJfdChkZWZh
dWx0SFRNTCkuR2V0QlNUUigpLCAwKTsKLSAgICB9Ci0KICAgICBociA9IG1fd2ViVmlld1ByaXZh
dGUtPnNldFRyYW5zcGFyZW50KG1fdXNlTGF5ZXJlZFdlYlZpZXcpOwogICAgIGlmIChGQUlMRUQo
aHIpKQogICAgICAgICByZXR1cm4gaHI7CkBAIC0xMjMsNiArMTk3LDE3IEBAIEhSRVNVTFQgTWlu
aUJyb3dzZXI6OnByZXBhcmVWaWV3cyhIV05EIG1haW5XbmQsIGNvbnN0IFJFQ1QmIGNsaWVudFJl
Y3QsIGNvbnN0IEJTCiAgICAgcmV0dXJuIGhyOwogfQogCitib29sIE1pbmlCcm93c2VyOjpsb2Fk
SFRNTFN0cmluZyhjb25zdCBzdGQ6OndzdHJpbmcmIHN0cikKK3sKKyAgICBJV2ViRnJhbWVQdHIg
ZnJhbWU7CisgICAgSFJFU1VMVCBociA9IG1fd2ViVmlldy0+bWFpbkZyYW1lKCZmcmFtZS5HZXRJ
bnRlcmZhY2VQdHIoKSk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGZyYW1lLT5sb2FkSFRNTFN0cmluZyhfYnN0cl90KHN0ci5jX3N0cigpKS5HZXRC
U1RSKCksIDApOworICAgIHJldHVybiB0cnVlOworfQorCiBIUkVTVUxUIE1pbmlCcm93c2VyOjpz
ZXRGcmFtZUxvYWREZWxlZ2F0ZShJV2ViRnJhbWVMb2FkRGVsZWdhdGUqIGZyYW1lTG9hZERlbGVn
YXRlKQogewogICAgIG1fZnJhbWVMb2FkRGVsZWdhdGUgPSBmcmFtZUxvYWREZWxlZ2F0ZTsKQEAg
LTMwOSwyNCArMzk0LDIzIEBAIHZvaWQgTWluaUJyb3dzZXI6OmxhdW5jaEluc3BlY3RvcigpCiAg
ICAgbV9pbnNwZWN0b3ItPnNob3coKTsKIH0KIAotdm9pZCBNaW5pQnJvd3Nlcjo6bmF2aWdhdGVG
b3J3YXJkT3JCYWNrd2FyZChIV05EIGhXbmQsIFVJTlQgbWVudUlEKQordm9pZCBNaW5pQnJvd3Nl
cjo6bmF2aWdhdGVGb3J3YXJkT3JCYWNrd2FyZChib29sIGlzQmFja3dhcmQpCiB7CiAgICAgaWYg
KCFtX3dlYlZpZXcpCiAgICAgICAgIHJldHVybjsKIAogICAgIEJPT0wgd2VudEJhY2tPckZvcndh
cmQgPSBGQUxTRTsKLSAgICBpZiAoSURNX0hJU1RPUllfRk9SV0FSRCA9PSBtZW51SUQpCisgICAg
aWYgKCFpc0JhY2t3YXJkKQogICAgICAgICBtX3dlYlZpZXctPmdvRm9yd2FyZCgmd2VudEJhY2tP
ckZvcndhcmQpOwogICAgIGVsc2UKICAgICAgICAgbV93ZWJWaWV3LT5nb0JhY2soJndlbnRCYWNr
T3JGb3J3YXJkKTsKIH0KIAotdm9pZCBNaW5pQnJvd3Nlcjo6bmF2aWdhdGVUb0hpc3RvcnkoSFdO
RCBoV25kLCBVSU5UIG1lbnVJRCkKK3ZvaWQgTWluaUJyb3dzZXI6Om5hdmlnYXRlVG9IaXN0b3J5
KHVuc2lnbmVkIGhpc3RvcnlFbnRyeSkKIHsKICAgICBpZiAoIW1fd2ViVmlldykKICAgICAgICAg
cmV0dXJuOwogCi0gICAgaW50IGhpc3RvcnlFbnRyeSA9IG1lbnVJRCAtIElETV9ISVNUT1JZX0xJ
TkswOwogICAgIGlmIChoaXN0b3J5RW50cnkgPiBtX2hpc3RvcnlJdGVtcy5zaXplKCkpCiAgICAg
ICAgIHJldHVybjsKIApAQCAtMzU3LDkgKzQ0MSw5IEBAIGJvb2wgTWluaUJyb3dzZXI6OmdvRm9y
d2FyZCgpCiAgICAgcmV0dXJuIHdlbnRGb3J3YXJkOwogfQogCi1IUkVTVUxUIE1pbmlCcm93c2Vy
Ojpsb2FkVVJMKGNvbnN0IEJTVFImIHBhc3NlZFVSTCkKK2Jvb2wgTWluaUJyb3dzZXI6OmxvYWRV
UkwoY29uc3Qgc3RkOjp3c3RyaW5nJiB1cmwpCiB7Ci0gICAgX2JzdHJfdCB1cmxCU3RyKHBhc3Nl
ZFVSTCk7CisgICAgX2JzdHJfdCB1cmxCU3RyKHVybC5jX3N0cigpKTsKICAgICBpZiAoISF1cmxC
U3RyICYmICg6OlBhdGhGaWxlRXhpc3RzKHVybEJTdHIpIHx8IDo6UGF0aElzVU5DKHVybEJTdHIp
KSkgewogICAgICAgICBUQ0hBUiBmaWxlVVJMW0lOVEVSTkVUX01BWF9VUkxfTEVOR1RIXTsKICAg
ICAgICAgRFdPUkQgZmlsZVVSTExlbmd0aCA9IHNpemVvZihmaWxlVVJMKSAvIHNpemVvZihmaWxl
VVJMWzBdKTsKQEAgLTM3MSwyOCArNDU1LDI1IEBAIEhSRVNVTFQgTWluaUJyb3dzZXI6OmxvYWRV
UkwoY29uc3QgQlNUUiYgcGFzc2VkVVJMKQogICAgIElXZWJGcmFtZVB0ciBmcmFtZTsKICAgICBI
UkVTVUxUIGhyID0gbV93ZWJWaWV3LT5tYWluRnJhbWUoJmZyYW1lLkdldEludGVyZmFjZVB0cigp
KTsKICAgICBpZiAoRkFJTEVEKGhyKSkKLSAgICAgICAgcmV0dXJuIGhyOwotCi0gICAgaWYgKCFw
YXNzZWRVUkwpCi0gICAgICAgIHJldHVybiBmcmFtZS0+bG9hZEhUTUxTdHJpbmcoX2JzdHJfdChk
ZWZhdWx0SFRNTCkuR2V0QlNUUigpLCAwKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
SVdlYk11dGFibGVVUkxSZXF1ZXN0UHRyIHJlcXVlc3Q7CiAgICAgaHIgPSBXZWJLaXRDcmVhdGVJ
bnN0YW5jZShDTFNJRF9XZWJNdXRhYmxlVVJMUmVxdWVzdCwgMCwgSUlEX0lXZWJNdXRhYmxlVVJM
UmVxdWVzdCwgKHZvaWQqKikmcmVxdWVzdCk7CiAgICAgaWYgKEZBSUxFRChocikpCi0gICAgICAg
IHJldHVybiBocjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaHIgPSByZXF1ZXN0LT5p
bml0V2l0aFVSTCh3Y3NzdHIoc3RhdGljX2Nhc3Q8d2NoYXJfdCo+KHVybEJTdHIpLCBMIjovLyIp
ID8gdXJsQlN0ciA6IF9ic3RyX3QoTCJodHRwOi8vIikgKyB1cmxCU3RyLCBXZWJVUkxSZXF1ZXN0
VXNlUHJvdG9jb2xDYWNoZVBvbGljeSwgNjApOwogICAgIGlmIChGQUlMRUQoaHIpKQotICAgICAg
ICByZXR1cm4gaHI7CisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIF9ic3RyX3QgbWV0aG9k
QlN0cihMIkdFVCIpOwogICAgIGhyID0gcmVxdWVzdC0+c2V0SFRUUE1ldGhvZChtZXRob2RCU3Ry
KTsKICAgICBpZiAoRkFJTEVEKGhyKSkKLSAgICAgICAgcmV0dXJuIGhyOworICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICBociA9IGZyYW1lLT5sb2FkUmVxdWVzdChyZXF1ZXN0KTsKIAotICAg
IHJldHVybiBocjsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBNaW5pQnJvd3Nlcjo6ZXhp
dFByb2dyYW0oKQpAQCAtNDAwLDYxICs0ODEsMjEgQEAgdm9pZCBNaW5pQnJvd3Nlcjo6ZXhpdFBy
b2dyYW0oKQogICAgIDo6UG9zdE1lc3NhZ2UobV9oTWFpblduZCwgc3RhdGljX2Nhc3Q8VUlOVD4o
V01fQ09NTUFORCksIE1BS0VMUEFSQU0oSURNX0VYSVQsIDApLCAwKTsKIH0KIAotdm9pZCBNaW5p
QnJvd3Nlcjo6c2V0VXNlckFnZW50KFVJTlQgbWVudUlEKQordm9pZCBNaW5pQnJvd3Nlcjo6c2V0
VXNlckFnZW50KGNvbnN0IHN0ZDo6d3N0cmluZyYgY3VzdG9tVXNlckFnZW50KQogewotICAgIGlm
ICghd2ViVmlldygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBfYnN0cl90IGN1c3RvbVVzZXJB
Z2VudDsKLSAgICBzd2l0Y2ggKG1lbnVJRCkgewotICAgIGNhc2UgSURNX1VBX0RFRkFVTFQ6Ci0g
ICAgICAgIC8vIFNldCB0byBudWxsIHVzZXIgYWdlbnQKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBJRE1fVUFfU0FGQVJJXzhfMDoKLSAgICAgICAgY3VzdG9tVXNlckFnZW50ID0gTCJNb3ppbGxh
LzUuMCAoTWFjaW50b3NoOyBJbnRlbCBNYWMgT1MgWCAxMF8xMCkgQXBwbGVXZWJLaXQvNjAwLjEu
MjUgKEtIVE1MLCBsaWtlIEdlY2tvKSBWZXJzaW9uLzguMCBTYWZhcmkvNjAwLjEuMjUiOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIElETV9VQV9TQUZBUklfSU9TXzhfSVBIT05FOgotICAgICAg
ICBjdXN0b21Vc2VyQWdlbnQgPSBMIk1vemlsbGEvNS4wIChpUGhvbmU7IENQVSBPUyA4XzEgbGlr
ZSBNYWMgT1MgWCkgQXBwbGVXZWJLaXQvNjAxLjEuNCAoS0hUTUwsIGxpa2UgR2Vja28pIFZlcnNp
b24vOC4wIE1vYmlsZS8xMkI0MDMgU2FmYXJpLzYwMC4xLjQiOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIElETV9VQV9TQUZBUklfSU9TXzhfSVBBRDoKLSAgICAgICAgY3VzdG9tVXNlckFnZW50
ID0gTCJNb3ppbGxhLzUuMCAoaVBhZDsgQ1BVIE9TIDhfMSBsaWtlIE1hYyBPUyBYKSBBcHBsZVdl
YktpdC82MDAuMS40IChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvbi84LjAgTW9iaWxlLzEyQjQw
MyBTYWZhcmkvNjAwLjEuNCI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSURNX1VBX0lFXzEx
OgotICAgICAgICBjdXN0b21Vc2VyQWdlbnQgPSBMIk1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDYu
MzsgV09XNjQ7IFRyaWRlbnQvNy4wOyBydjoxMS4wKSBsaWtlIEdlY2tvIjsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBJRE1fVUFfQ0hST01FX01BQzoKLSAgICAgICAgY3VzdG9tVXNlckFnZW50
ID0gTCJNb3ppbGxhLzUuMCAoTWFjaW50b3NoOyBJbnRlbCBNYWMgT1MgWCAxMF84XzMpIEFwcGxl
V2ViS2l0LzUzNy4zMSAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8yNi4wLjE0MTAuNjUgU2Fm
YXJpLzUzNy4zMSI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSURNX1VBX0NIUk9NRV9XSU46
Ci0gICAgICAgIGN1c3RvbVVzZXJBZ2VudCA9IEwiTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgNi4y
OyBXT1c2NCkgQXBwbGVXZWJLaXQvNTM3LjMxIChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzI2
LjAuMTQxMC42NCBTYWZhcmkvNTM3LjMxIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJRE1f
VUFfRklSRUZPWF9NQUM6Ci0gICAgICAgIGN1c3RvbVVzZXJBZ2VudCA9IEwiTW96aWxsYS81LjAg
KE1hY2ludG9zaDsgSW50ZWwgTWFjIE9TIFggMTAuODsgcnY6MjAuMCkgR2Vja28vMjAxMDAxMDEg
RmlyZWZveC8yMC4wIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJRE1fVUFfRklSRUZPWF9X
SU46Ci0gICAgICAgIGN1c3RvbVVzZXJBZ2VudCA9IEwiTW96aWxsYS81LjAgKFdpbmRvd3MgTlQg
Ni4yOyBXT1c2NDsgcnY6MjAuMCkgR2Vja28vMjAxMDAxMDEgRmlyZWZveC8yMC4wIjsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBJRE1fVUFfT1RIRVI6Ci0gICAgZGVmYXVsdDoKLSAgICAgICAg
QVNTRVJUKDApOyAvLyBXZSBzaG91bGQgbmV2ZXIgaGl0IHRoaXMgY2FzZQotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgc2V0VXNlckFnZW50KGN1c3RvbVVzZXJBZ2VudCk7CisgICAgX2Jz
dHJfdCBzOworICAgIGlmICghY3VzdG9tVXNlckFnZW50LmVtcHR5KCkpCisgICAgICAgIHMgPSBj
dXN0b21Vc2VyQWdlbnQuY19zdHIoKTsKKyAgICB3ZWJWaWV3KCktPnNldEN1c3RvbVVzZXJBZ2Vu
dChzLkdldEJTVFIoKSk7CiB9CiAKLXZvaWQgTWluaUJyb3dzZXI6OnNldFVzZXJBZ2VudChfYnN0
cl90JiBjdXN0b21Vc2VyQWdlbnQpCi17Ci0gICAgd2ViVmlldygpLT5zZXRDdXN0b21Vc2VyQWdl
bnQoY3VzdG9tVXNlckFnZW50LkdldEJTVFIoKSk7Ci19Ci0KLV9ic3RyX3QgTWluaUJyb3dzZXI6
OnVzZXJBZ2VudCgpCitzdGQ6OndzdHJpbmcgTWluaUJyb3dzZXI6OnVzZXJBZ2VudCgpCiB7CiAg
ICAgX2JzdHJfdCB1c2VyQWdlbnQ7CiAgICAgaWYgKEZBSUxFRCh3ZWJWaWV3KCktPmN1c3RvbVVz
ZXJBZ2VudCgmdXNlckFnZW50LkdldEJTVFIoKSkpKQotICAgICAgICByZXR1cm4gX2JzdHJfdChM
Ii0gVW5rbm93biAtOiBDYWxsIGZhaWxlZC4iKTsKKyAgICAgICAgcmV0dXJuIEwiLSBVbmtub3du
IC06IENhbGwgZmFpbGVkLiI7CiAKLSAgICByZXR1cm4gdXNlckFnZW50OworICAgIHJldHVybiBz
dGQ6OndzdHJpbmcodXNlckFnZW50KTsKIH0KIAogdHlwZWRlZiBfY29tX3B0cl90PF9jb21fSUlJ
RDxJV2ViSUJBY3Rpb25zLCAmX191dWlkb2YoSVdlYklCQWN0aW9ucyk+PiBJV2ViSUJBY3Rpb25z
UHRyOwpAQCAtNTA0LDE4ICs1NDUsMzE5IEBAIHZvaWQgTWluaUJyb3dzZXI6OnNob3dMYXllclRy
ZWUoKQogICAgIE91dHB1dERlYnVnU3RyaW5nKEwiXG5cbiIpOwogfQogCi12b2lkIE1pbmlCcm93
c2VyOjpnZW5lcmF0ZUZvbnRGb3JTY2FsZUZhY3RvcihmbG9hdCBzY2FsZUZhY3RvcikKK3N0YXRp
YyB2b2lkIHNldFdpbmRvd1RleHQoSFdORCBkaWFsb2csIFVJTlQgZmllbGQsIF9ic3RyX3QgdmFs
dWUpCit7CisgICAgOjpTZXREbGdJdGVtVGV4dChkaWFsb2csIGZpZWxkLCB2YWx1ZSk7Cit9CisK
K3N0YXRpYyB2b2lkIHNldFdpbmRvd1RleHQoSFdORCBkaWFsb2csIFVJTlQgZmllbGQsIFVJTlQg
dmFsdWUpCit7CisgICAgU3RyaW5nIHZhbHVlU3RyID0gV1RGOjpTdHJpbmc6Om51bWJlcih2YWx1
ZSk7CisKKyAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgZmllbGQsIF9ic3RyX3QodmFsdWVTdHIu
dXRmOCgpLmRhdGEoKSkpOworfQorCit0eXBlZGVmIF9jb21fcHRyX3Q8X2NvbV9JSUlEPElQcm9w
ZXJ0eUJhZywgJl9fdXVpZG9mKElQcm9wZXJ0eUJhZyk+PiBJUHJvcGVydHlCYWdQdHI7CisKK3N0
YXRpYyB2b2lkIHNldFdpbmRvd1RleHQoSFdORCBkaWFsb2csIFVJTlQgZmllbGQsIElQcm9wZXJ0
eUJhZ1B0ciBzdGF0aXN0aWNzLCBjb25zdCBfYnN0cl90JiBrZXkpCit7CisgICAgX3ZhcmlhbnRf
dCB2YXI7CisgICAgVl9WVCgmdmFyKSA9IFZUX1VJODsKKyAgICBpZiAoRkFJTEVEKHN0YXRpc3Rp
Y3MtPlJlYWQoa2V5LCAmdmFyLkdldFZBUklBTlQoKSwgbnVsbHB0cikpKQorICAgICAgICByZXR1
cm47CisKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWUgPSBWX1VJOCgmdmFyKTsKKyAgICBT
dHJpbmcgdmFsdWVTdHIgPSBXVEY6OlN0cmluZzo6bnVtYmVyKHZhbHVlKTsKKworICAgIHNldFdp
bmRvd1RleHQoZGlhbG9nLCBmaWVsZCwgX2JzdHJfdCh2YWx1ZVN0ci51dGY4KCkuZGF0YSgpKSk7
Cit9CisKK3N0YXRpYyB2b2lkIHNldFdpbmRvd1RleHQoSFdORCBkaWFsb2csIFVJTlQgZmllbGQs
IENGRGljdGlvbmFyeVJlZiBkaWN0aW9uYXJ5LCBDRlN0cmluZ1JlZiBrZXksIFVJTlQmIHRvdGFs
KQoreworICAgIENGTnVtYmVyUmVmIGNvdW50TnVtID0gc3RhdGljX2Nhc3Q8Q0ZOdW1iZXJSZWY+
KENGRGljdGlvbmFyeUdldFZhbHVlKGRpY3Rpb25hcnksIGtleSkpOworICAgIGlmICghY291bnRO
dW0pCisgICAgICAgIHJldHVybjsKKworICAgIGludCBjb3VudCA9IDA7CisgICAgQ0ZOdW1iZXJH
ZXRWYWx1ZShjb3VudE51bSwga0NGTnVtYmVySW50VHlwZSwgJmNvdW50KTsKKworICAgIHNldFdp
bmRvd1RleHQoZGlhbG9nLCBmaWVsZCwgc3RhdGljX2Nhc3Q8VUlOVD4oY291bnQpKTsKKyAgICB0
b3RhbCArPSBjb3VudDsKK30KKwordm9pZCBNaW5pQnJvd3Nlcjo6dXBkYXRlU3RhdGlzdGljcyhI
V05EIGRpYWxvZykKK3sKKyAgICBJV2ViQ29yZVN0YXRpc3RpY3NQdHIgd2ViQ29yZVN0YXRpc3Rp
Y3MgPSB0aGlzLT5zdGF0aXN0aWNzKCk7CisgICAgaWYgKCF3ZWJDb3JlU3RhdGlzdGljcykKKyAg
ICAgICAgcmV0dXJuOworCisgICAgSVByb3BlcnR5QmFnUHRyIHN0YXRpc3RpY3M7CisgICAgSFJF
U1VMVCBociA9IHdlYkNvcmVTdGF0aXN0aWNzLT5tZW1vcnlTdGF0aXN0aWNzKCZzdGF0aXN0aWNz
LkdldEludGVyZmFjZVB0cigpKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgLy8gRmFzdE1hbGxvYy4KKyAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX1JF
U0VSVkVEX1ZNLCBzdGF0aXN0aWNzLCAiRmFzdE1hbGxvY1Jlc2VydmVkVk1CeXRlcyIpOworICAg
IHNldFdpbmRvd1RleHQoZGlhbG9nLCBJRENfQ09NTUlUVEVEX1ZNLCBzdGF0aXN0aWNzLCAiRmFz
dE1hbGxvY0NvbW1pdHRlZFZNQnl0ZXMiKTsKKyAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURD
X0ZSRUVfTElTVF9CWVRFUywgc3RhdGlzdGljcywgIkZhc3RNYWxsb2NGcmVlTGlzdEJ5dGVzIik7
CisKKyAgICAvLyBXZWJDb3JlIENhY2hlLgorI2lmIFVTRShDRikKKyAgICBJV2ViQ2FjaGVQdHIg
d2ViQ2FjaGUgPSB0aGlzLT53ZWJDYWNoZSgpOworCisgICAgaW50IGRpY3RDb3VudCA9IDY7Cisg
ICAgSVByb3BlcnR5QmFnKiBjYWNoZURpY3RbNl0gPSB7IDAgfTsKKyAgICBpZiAoRkFJTEVEKHdl
YkNhY2hlLT5zdGF0aXN0aWNzKCZkaWN0Q291bnQsIGNhY2hlRGljdCkpKQorICAgICAgICByZXR1
cm47CisKKyAgICBDT01QdHI8Q0ZEaWN0aW9uYXJ5UHJvcGVydHlCYWc+IGNvdW50cywgc2l6ZXMs
IGxpdmVTaXplcywgZGVjb2RlZFNpemVzLCBwdXJnYWJsZVNpemVzOworICAgIGNvdW50cy5hZG9w
dFJlZihyZWludGVycHJldF9jYXN0PENGRGljdGlvbmFyeVByb3BlcnR5QmFnKj4oY2FjaGVEaWN0
WzBdKSk7CisgICAgc2l6ZXMuYWRvcHRSZWYocmVpbnRlcnByZXRfY2FzdDxDRkRpY3Rpb25hcnlQ
cm9wZXJ0eUJhZyo+KGNhY2hlRGljdFsxXSkpOworICAgIGxpdmVTaXplcy5hZG9wdFJlZihyZWlu
dGVycHJldF9jYXN0PENGRGljdGlvbmFyeVByb3BlcnR5QmFnKj4oY2FjaGVEaWN0WzJdKSk7Cisg
ICAgZGVjb2RlZFNpemVzLmFkb3B0UmVmKHJlaW50ZXJwcmV0X2Nhc3Q8Q0ZEaWN0aW9uYXJ5UHJv
cGVydHlCYWcqPihjYWNoZURpY3RbM10pKTsKKyAgICBwdXJnYWJsZVNpemVzLmFkb3B0UmVmKHJl
aW50ZXJwcmV0X2Nhc3Q8Q0ZEaWN0aW9uYXJ5UHJvcGVydHlCYWcqPihjYWNoZURpY3RbNF0pKTsK
KworICAgIHN0YXRpYyBDRlN0cmluZ1JlZiBpbWFnZXNLZXkgPSBDRlNUUigiaW1hZ2VzIik7Cisg
ICAgc3RhdGljIENGU3RyaW5nUmVmIHN0eWxlc2hlZXRzS2V5ID0gQ0ZTVFIoInN0eWxlIHNoZWV0
cyIpOworICAgIHN0YXRpYyBDRlN0cmluZ1JlZiB4c2xLZXkgPSBDRlNUUigieHNsIik7CisgICAg
c3RhdGljIENGU3RyaW5nUmVmIHNjcmlwdHNLZXkgPSBDRlNUUigic2NyaXB0cyIpOworCisgICAg
aWYgKGNvdW50cykgeworICAgICAgICBVSU5UIHRvdGFsT2JqZWN0cyA9IDA7CisgICAgICAgIHNl
dFdpbmRvd1RleHQoZGlhbG9nLCBJRENfSU1BR0VTX09CSkVDVF9DT1VOVCwgY291bnRzLT5kaWN0
aW9uYXJ5KCksIGltYWdlc0tleSwgdG90YWxPYmplY3RzKTsKKyAgICAgICAgc2V0V2luZG93VGV4
dChkaWFsb2csIElEQ19DU1NfT0JKRUNUX0NPVU5ULCBjb3VudHMtPmRpY3Rpb25hcnkoKSwgc3R5
bGVzaGVldHNLZXksIHRvdGFsT2JqZWN0cyk7CisgICAgICAgIHNldFdpbmRvd1RleHQoZGlhbG9n
LCBJRENfWFNMX09CSkVDVF9DT1VOVCwgY291bnRzLT5kaWN0aW9uYXJ5KCksIHhzbEtleSwgdG90
YWxPYmplY3RzKTsKKyAgICAgICAgc2V0V2luZG93VGV4dChkaWFsb2csIElEQ19KU0NfT0JKRUNU
X0NPVU5ULCBjb3VudHMtPmRpY3Rpb25hcnkoKSwgc2NyaXB0c0tleSwgdG90YWxPYmplY3RzKTsK
KyAgICAgICAgc2V0V2luZG93VGV4dChkaWFsb2csIElEQ19UT1RBTF9PQkpFQ1RfQ09VTlQsIHRv
dGFsT2JqZWN0cyk7CisgICAgfQorCisgICAgaWYgKHNpemVzKSB7CisgICAgICAgIFVJTlQgdG90
YWxCeXRlcyA9IDA7CisgICAgICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJRENfSU1BR0VTX0JZ
VEVTLCBzaXplcy0+ZGljdGlvbmFyeSgpLCBpbWFnZXNLZXksIHRvdGFsQnl0ZXMpOworICAgICAg
ICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX0NTU19CWVRFUywgc2l6ZXMtPmRpY3Rpb25hcnko
KSwgc3R5bGVzaGVldHNLZXksIHRvdGFsQnl0ZXMpOworICAgICAgICBzZXRXaW5kb3dUZXh0KGRp
YWxvZywgSURDX1hTTF9CWVRFUywgc2l6ZXMtPmRpY3Rpb25hcnkoKSwgeHNsS2V5LCB0b3RhbEJ5
dGVzKTsKKyAgICAgICAgc2V0V2luZG93VGV4dChkaWFsb2csIElEQ19KU0NfQllURVMsIHNpemVz
LT5kaWN0aW9uYXJ5KCksIHNjcmlwdHNLZXksIHRvdGFsQnl0ZXMpOworICAgICAgICBzZXRXaW5k
b3dUZXh0KGRpYWxvZywgSURDX1RPVEFMX0JZVEVTLCB0b3RhbEJ5dGVzKTsKKyAgICB9CisKKyAg
ICBpZiAobGl2ZVNpemVzKSB7CisgICAgICAgIFVJTlQgdG90YWxMaXZlQnl0ZXMgPSAwOworICAg
ICAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX0lNQUdFU19MSVZFX0NPVU5ULCBsaXZlU2l6
ZXMtPmRpY3Rpb25hcnkoKSwgaW1hZ2VzS2V5LCB0b3RhbExpdmVCeXRlcyk7CisgICAgICAgIHNl
dFdpbmRvd1RleHQoZGlhbG9nLCBJRENfQ1NTX0xJVkVfQ09VTlQsIGxpdmVTaXplcy0+ZGljdGlv
bmFyeSgpLCBzdHlsZXNoZWV0c0tleSwgdG90YWxMaXZlQnl0ZXMpOworICAgICAgICBzZXRXaW5k
b3dUZXh0KGRpYWxvZywgSURDX1hTTF9MSVZFX0NPVU5ULCBsaXZlU2l6ZXMtPmRpY3Rpb25hcnko
KSwgeHNsS2V5LCB0b3RhbExpdmVCeXRlcyk7CisgICAgICAgIHNldFdpbmRvd1RleHQoZGlhbG9n
LCBJRENfSlNDX0xJVkVfQ09VTlQsIGxpdmVTaXplcy0+ZGljdGlvbmFyeSgpLCBzY3JpcHRzS2V5
LCB0b3RhbExpdmVCeXRlcyk7CisgICAgICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJRENfVE9U
QUxfTElWRV9DT1VOVCwgdG90YWxMaXZlQnl0ZXMpOworICAgIH0KKworICAgIGlmIChkZWNvZGVk
U2l6ZXMpIHsKKyAgICAgICAgVUlOVCB0b3RhbERlY29kZWQgPSAwOworICAgICAgICBzZXRXaW5k
b3dUZXh0KGRpYWxvZywgSURDX0lNQUdFU19ERUNPREVEX0NPVU5ULCBkZWNvZGVkU2l6ZXMtPmRp
Y3Rpb25hcnkoKSwgaW1hZ2VzS2V5LCB0b3RhbERlY29kZWQpOworICAgICAgICBzZXRXaW5kb3dU
ZXh0KGRpYWxvZywgSURDX0NTU19ERUNPREVEX0NPVU5ULCBkZWNvZGVkU2l6ZXMtPmRpY3Rpb25h
cnkoKSwgc3R5bGVzaGVldHNLZXksIHRvdGFsRGVjb2RlZCk7CisgICAgICAgIHNldFdpbmRvd1Rl
eHQoZGlhbG9nLCBJRENfWFNMX0RFQ09ERURfQ09VTlQsIGRlY29kZWRTaXplcy0+ZGljdGlvbmFy
eSgpLCB4c2xLZXksIHRvdGFsRGVjb2RlZCk7CisgICAgICAgIHNldFdpbmRvd1RleHQoZGlhbG9n
LCBJRENfSlNDX0RFQ09ERURfQ09VTlQsIGRlY29kZWRTaXplcy0+ZGljdGlvbmFyeSgpLCBzY3Jp
cHRzS2V5LCB0b3RhbERlY29kZWQpOworICAgICAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURD
X1RPVEFMX0RFQ09ERUQsIHRvdGFsRGVjb2RlZCk7CisgICAgfQorCisgICAgaWYgKHB1cmdhYmxl
U2l6ZXMpIHsKKyAgICAgICAgVUlOVCB0b3RhbFB1cmdhYmxlID0gMDsKKyAgICAgICAgc2V0V2lu
ZG93VGV4dChkaWFsb2csIElEQ19JTUFHRVNfUFVSR0VBQkxFX0NPVU5ULCBwdXJnYWJsZVNpemVz
LT5kaWN0aW9uYXJ5KCksIGltYWdlc0tleSwgdG90YWxQdXJnYWJsZSk7CisgICAgICAgIHNldFdp
bmRvd1RleHQoZGlhbG9nLCBJRENfQ1NTX1BVUkdFQUJMRV9DT1VOVCwgcHVyZ2FibGVTaXplcy0+
ZGljdGlvbmFyeSgpLCBzdHlsZXNoZWV0c0tleSwgdG90YWxQdXJnYWJsZSk7CisgICAgICAgIHNl
dFdpbmRvd1RleHQoZGlhbG9nLCBJRENfWFNMX1BVUkdFQUJMRV9DT1VOVCwgcHVyZ2FibGVTaXpl
cy0+ZGljdGlvbmFyeSgpLCB4c2xLZXksIHRvdGFsUHVyZ2FibGUpOworICAgICAgICBzZXRXaW5k
b3dUZXh0KGRpYWxvZywgSURDX0pTQ19QVVJHRUFCTEVfQ09VTlQsIHB1cmdhYmxlU2l6ZXMtPmRp
Y3Rpb25hcnkoKSwgc2NyaXB0c0tleSwgdG90YWxQdXJnYWJsZSk7CisgICAgICAgIHNldFdpbmRv
d1RleHQoZGlhbG9nLCBJRENfVE9UQUxfUFVSR0VBQkxFLCB0b3RhbFB1cmdhYmxlKTsKKyAgICB9
CisjZW5kaWYKKworICAgIC8vIEphdmFTY3JpcHQgSGVhcC4KKyAgICBzZXRXaW5kb3dUZXh0KGRp
YWxvZywgSURDX0pTQ19IRUFQX1NJWkUsIHN0YXRpc3RpY3MsICJKYXZhU2NyaXB0SGVhcFNpemUi
KTsKKyAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX0pTQ19IRUFQX0ZSRUUsIHN0YXRpc3Rp
Y3MsICJKYXZhU2NyaXB0RnJlZVNpemUiKTsKKworICAgIFVJTlQgY291bnQ7CisgICAgaWYgKFNV
Q0NFRURFRCh3ZWJDb3JlU3RhdGlzdGljcy0+amF2YVNjcmlwdE9iamVjdHNDb3VudCgmY291bnQp
KSkKKyAgICAgICAgc2V0V2luZG93VGV4dChkaWFsb2csIElEQ19UT1RBTF9KU0NfSEVBUF9PQkpF
Q1RTLCBjb3VudCk7CisgICAgaWYgKFNVQ0NFRURFRCh3ZWJDb3JlU3RhdGlzdGljcy0+amF2YVNj
cmlwdEdsb2JhbE9iamVjdHNDb3VudCgmY291bnQpKSkKKyAgICAgICAgc2V0V2luZG93VGV4dChk
aWFsb2csIElEQ19HTE9CQUxfSlNDX0hFQVBfT0JKRUNUUywgY291bnQpOworICAgIGlmIChTVUND
RUVERUQod2ViQ29yZVN0YXRpc3RpY3MtPmphdmFTY3JpcHRQcm90ZWN0ZWRPYmplY3RzQ291bnQo
JmNvdW50KSkpCisgICAgICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJRENfUFJPVEVDVEVEX0pT
Q19IRUFQX09CSkVDVFMsIGNvdW50KTsKKworICAgIC8vIEZvbnQgYW5kIEdseXBoIENhY2hlcy4K
KyAgICBpZiAoU1VDQ0VFREVEKHdlYkNvcmVTdGF0aXN0aWNzLT5jYWNoZWRGb250RGF0YUNvdW50
KCZjb3VudCkpKQorICAgICAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX1RPVEFMX0ZPTlRf
T0JKRUNUUywgY291bnQpOworICAgIGlmIChTVUNDRUVERUQod2ViQ29yZVN0YXRpc3RpY3MtPmNh
Y2hlZEZvbnREYXRhSW5hY3RpdmVDb3VudCgmY291bnQpKSkKKyAgICAgICAgc2V0V2luZG93VGV4
dChkaWFsb2csIElEQ19JTkFDVElWRV9GT05UX09CSkVDVFMsIGNvdW50KTsKKyAgICBpZiAoU1VD
Q0VFREVEKHdlYkNvcmVTdGF0aXN0aWNzLT5nbHlwaFBhZ2VDb3VudCgmY291bnQpKSkKKyAgICAg
ICAgc2V0V2luZG93VGV4dChkaWFsb2csIElEQ19HTFlQSF9QQUdFUywgY291bnQpOworCisgICAg
Ly8gU2l0ZSBJY29uIERhdGFiYXNlLgorICAgIGlmIChTVUNDRUVERUQod2ViQ29yZVN0YXRpc3Rp
Y3MtPmljb25QYWdlVVJMTWFwcGluZ0NvdW50KCZjb3VudCkpKQorICAgICAgICBzZXRXaW5kb3dU
ZXh0KGRpYWxvZywgSURDX1BBR0VfVVJMX01BUFBJTkdTLCBjb3VudCk7CisgICAgaWYgKFNVQ0NF
RURFRCh3ZWJDb3JlU3RhdGlzdGljcy0+aWNvblJldGFpbmVkUGFnZVVSTENvdW50KCZjb3VudCkp
KQorICAgICAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX1JFVEFJTkVEX1BBR0VfVVJMUywg
Y291bnQpOworICAgIGlmIChTVUNDRUVERUQod2ViQ29yZVN0YXRpc3RpY3MtPmljb25SZWNvcmRD
b3VudCgmY291bnQpKSkKKyAgICAgICAgc2V0V2luZG93VGV4dChkaWFsb2csIElEQ19TSVRFX0lD
T05fUkVDT1JEUywgY291bnQpOworICAgIGlmIChTVUNDRUVERUQod2ViQ29yZVN0YXRpc3RpY3Mt
Pmljb25zV2l0aERhdGFDb3VudCgmY291bnQpKSkKKyAgICAgICAgc2V0V2luZG93VGV4dChkaWFs
b2csIElEQ19TSVRFX0lDT05TX1dJVEhfREFUQSwgY291bnQpOworfQorCitzdGF0aWMgQk9PTCBD
QUxMQkFDSyBBYm9ydFByb2MoSERDIGhEQywgaW50IEVycm9yKQoreworICAgIE1TRyBtc2c7Cisg
ICAgd2hpbGUgKDo6UGVla01lc3NhZ2UoJm1zZywgMCwgMCwgMCwgUE1fUkVNT1ZFKSkgeworICAg
ICAgICA6OlRyYW5zbGF0ZU1lc3NhZ2UoJm1zZyk7CisgICAgICAgIDo6RGlzcGF0Y2hNZXNzYWdl
KCZtc2cpOworICAgIH0KKworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgSERDIGdldFBy
aW50ZXJEQygpCit7CisgICAgUFJJTlRETEcgcGRsZzsKKyAgICBtZW1zZXQoJnBkbGcsIDAsIHNp
emVvZihQUklOVERMRykpOworICAgIHBkbGcubFN0cnVjdFNpemUgPSBzaXplb2YoUFJJTlRETEcp
OworICAgIHBkbGcuRmxhZ3MgPSBQRF9QUklOVFNFVFVQIHwgUERfUkVUVVJOREM7CisKKyAgICA6
OlByaW50RGxnKCZwZGxnKTsKKworICAgIHJldHVybiBwZGxnLmhEQzsKK30KKworc3RhdGljIHZv
aWQgaW5pdERvY1N0cnVjdChET0NJTkZPKiBkaSwgVENIQVIqIGRvY25hbWUpCit7CisgICAgbWVt
c2V0KGRpLCAwLCBzaXplb2YoRE9DSU5GTykpOworICAgIGRpLT5jYlNpemUgPSBzaXplb2YoRE9D
SU5GTyk7CisgICAgZGktPmxwc3pEb2NOYW1lID0gZG9jbmFtZTsKK30KKwordHlwZWRlZiBfY29t
X3B0cl90PF9jb21fSUlJRDxJV2ViRnJhbWVQcml2YXRlLCAmX191dWlkb2YoSVdlYkZyYW1lUHJp
dmF0ZSk+PiBJV2ViRnJhbWVQcml2YXRlUHRyOworCit2b2lkIE1pbmlCcm93c2VyOjpwcmludCgp
Cit7CisgICAgSERDIHByaW50REMgPSBnZXRQcmludGVyREMoKTsKKyAgICBpZiAoIXByaW50REMp
IHsKKyAgICAgICAgOjpNZXNzYWdlQm94VygwLCBMIkVycm9yIGNyZWF0aW5nIHByaW50aW5nIERD
IiwgTCJFcnJvciIsIE1CX0FQUExNT0RBTCB8IE1CX09LKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmICg6OlNldEFib3J0UHJvYyhwcmludERDLCBBYm9ydFByb2MpID09IFNQX0VS
Uk9SKSB7CisgICAgICAgIDo6TWVzc2FnZUJveFcoMCwgTCJFcnJvciBzZXR0aW5nIHVwIEFib3J0
UHJvYyIsIEwiRXJyb3IiLCBNQl9BUFBMTU9EQUwgfCBNQl9PSyk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBJV2ViRnJhbWVQdHIgZnJhbWUgPSBtYWluRnJhbWUoKTsKKyAgICBpZiAo
IWZyYW1lKQorICAgICAgICByZXR1cm47CisKKyAgICBJV2ViRnJhbWVQcml2YXRlUHRyIGZyYW1l
UHJpdmF0ZTsKKyAgICBpZiAoRkFJTEVEKGZyYW1lLT5RdWVyeUludGVyZmFjZSgmZnJhbWVQcml2
YXRlLkdldEludGVyZmFjZVB0cigpKSkpCisgICAgICAgIHJldHVybjsKKworICAgIGZyYW1lUHJp
dmF0ZS0+c2V0SW5QcmludGluZ01vZGUoVFJVRSwgcHJpbnREQyk7CisKKyAgICBVSU5UIHBhZ2VD
b3VudCA9IDA7CisgICAgZnJhbWVQcml2YXRlLT5nZXRQcmludGVkUGFnZUNvdW50KHByaW50REMs
ICZwYWdlQ291bnQpOworCisgICAgRE9DSU5GTyBkaTsKKyAgICBpbml0RG9jU3RydWN0KCZkaSwg
TCJXZWJLaXQgRG9jIik7CisgICAgOjpTdGFydERvYyhwcmludERDLCAmZGkpOworCisgICAgLy8g
RklYTUU6IE5lZWQgQ29yZUdyYXBoaWNzIGltcGxlbWVudGF0aW9uCisgICAgdm9pZCogZ3JhcGhp
Y3NDb250ZXh0ID0gMDsKKyAgICBmb3IgKHNpemVfdCBwYWdlID0gMTsgcGFnZSA8PSBwYWdlQ291
bnQ7ICsrcGFnZSkgeworICAgICAgICA6OlN0YXJ0UGFnZShwcmludERDKTsKKyAgICAgICAgZnJh
bWVQcml2YXRlLT5zcG9vbFBhZ2VzKHByaW50REMsIHBhZ2UsIHBhZ2UsIGdyYXBoaWNzQ29udGV4
dCk7CisgICAgICAgIDo6RW5kUGFnZShwcmludERDKTsKKyAgICB9CisKKyAgICBmcmFtZVByaXZh
dGUtPnNldEluUHJpbnRpbmdNb2RlKEZBTFNFLCBwcmludERDKTsKKworICAgIDo6RW5kRG9jKHBy
aW50REMpOworICAgIDo6RGVsZXRlREMocHJpbnREQyk7Cit9CisKK3ZvaWQgTWluaUJyb3dzZXI6
OnNldEFWRm91bmRhdGlvbkVuYWJsZWQoYm9vbCBlbmFibGVkKQoreworICAgIHN0YW5kYXJkUHJl
ZmVyZW5jZXMoKS0+c2V0QVZGb3VuZGF0aW9uRW5hYmxlZChlbmFibGVkKTsKK30KKwordm9pZCBN
aW5pQnJvd3Nlcjo6c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQoYm9vbCBlbmFibGVk
KQogewotICAgIGlmIChtX2hVUkxCYXJGb250KQotICAgICAgICA6OkRlbGV0ZU9iamVjdChtX2hV
UkxCYXJGb250KTsKKyAgICBwcml2YXRlUHJlZmVyZW5jZXMoKS0+c2V0QWNjZWxlcmF0ZWRDb21w
b3NpdGluZ0VuYWJsZWQoZW5hYmxlZCk7Cit9CiAKLSAgICBtX2hVUkxCYXJGb250ID0gOjpDcmVh
dGVGb250KHNjYWxlRmFjdG9yICogMTgsIDAsIDAsIDAsIEZXX05PUk1BTCwgRkFMU0UsIEZBTFNF
LCBGQUxTRSwgREVGQVVMVF9DSEFSU0VULAotICAgICAgICBPVVRfVFRfT05MWV9QUkVDSVMsIENM
SVBfREVGQVVMVF9QUkVDSVMsIEFOVElBTElBU0VEX1FVQUxJVFksIEZGX0RPTlRDQVJFLCBMIlRp
bWVzIE5ldyBSb21hbiIpOwordm9pZCBNaW5pQnJvd3Nlcjo6c2V0QXV0aG9yQW5kVXNlclN0eWxl
c0VuYWJsZWQoYm9vbCBlbmFibGVkKQoreworICAgIHByaXZhdGVQcmVmZXJlbmNlcygpLT5zZXRB
dXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZChlbmFibGVkKTsKIH0KIAordm9pZCBNaW5pQnJvd3Nl
cjo6c2V0RnVsbFNjcmVlbkVuYWJsZWQoYm9vbCBlbmFibGVkKQoreworICAgIHByaXZhdGVQcmVm
ZXJlbmNlcygpLT5zZXRGdWxsU2NyZWVuRW5hYmxlZChlbmFibGVkKTsKK30KKwordm9pZCBNaW5p
QnJvd3Nlcjo6c2V0SmF2YVNjcmlwdEVuYWJsZWQoYm9vbCBlbmFibGVkKQoreworICAgIHN0YW5k
YXJkUHJlZmVyZW5jZXMoKS0+c2V0SmF2YVNjcmlwdEVuYWJsZWQoZW5hYmxlZCk7Cit9CiAKLXZv
aWQgTWluaUJyb3dzZXI6OnVwZGF0ZURldmljZVNjYWxlRmFjdG9yKCkKK3ZvaWQgTWluaUJyb3dz
ZXI6OnNldExvYWRzSW1hZ2VzQXV0b21hdGljYWxseShib29sIGVuYWJsZWQpCiB7Ci0gICAgbV9k
ZXZpY2VTY2FsZUZhY3RvciA9IFdlYkNvcmU6OmRldmljZVNjYWxlRmFjdG9yRm9yV2luZG93KG1f
aE1haW5XbmQpOwotICAgIGdlbmVyYXRlRm9udEZvclNjYWxlRmFjdG9yKG1fZGV2aWNlU2NhbGVG
YWN0b3IpOworICAgIHN0YW5kYXJkUHJlZmVyZW5jZXMoKS0+c2V0TG9hZHNJbWFnZXNBdXRvbWF0
aWNhbGx5KGVuYWJsZWQpOworfQorCit2b2lkIE1pbmlCcm93c2VyOjpzZXRMb2NhbEZpbGVSZXN0
cmljdGlvbnNFbmFibGVkKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBwcml2YXRlUHJlZmVyZW5jZXMo
KS0+c2V0QWxsb3dVbml2ZXJzYWxBY2Nlc3NGcm9tRmlsZVVSTHMoIWVuYWJsZWQpOworICAgIHBy
aXZhdGVQcmVmZXJlbmNlcygpLT5zZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHMoIWVuYWJs
ZWQpOworfQorCit2b2lkIE1pbmlCcm93c2VyOjpzZXRTaG91bGRJbnZlcnRDb2xvcnMoYm9vbCBl
bmFibGVkKQoreworICAgIHByaXZhdGVQcmVmZXJlbmNlcygpLT5zZXRTaG91bGRJbnZlcnRDb2xv
cnMoZW5hYmxlZCk7Cit9CisKK3ZvaWQgTWluaUJyb3dzZXI6OnNldFNob3dDb21wb3NpdGluZ0Jv
cmRlcnMoYm9vbCBlbmFibGVkKQoreworICAgIHByaXZhdGVQcmVmZXJlbmNlcygpLT5zZXRTaG93
RGVidWdCb3JkZXJzKGVuYWJsZWQpOworICAgIHByaXZhdGVQcmVmZXJlbmNlcygpLT5zZXRTaG93
UmVwYWludENvdW50ZXIoZW5hYmxlZCk7Cit9CisKK3ZvaWQgTWluaUJyb3dzZXI6OnNldFNob3dU
aWxlZFNjcm9sbGluZ0luZGljYXRvcihib29sIGVuYWJsZWQpCit7CisgICAgcHJpdmF0ZVByZWZl
cmVuY2VzKCktPnNldFNob3dUaWxlZFNjcm9sbGluZ0luZGljYXRvcihlbmFibGVkKTsKK30KKwor
c3RhdGljIFdORFBST0MgZ0RlZldlYktpdFByb2M7CisKK3N0YXRpYyBMUkVTVUxUIENBTExCQUNL
IHZpZXdXbmRQcm9jKEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFS
QU0gbFBhcmFtKQoreworICAgIHN3aXRjaCAobWVzc2FnZSkgeworICAgIGNhc2UgV01fTkNISVRU
RVNUOgorICAgICAgICBjb25zdGV4cHIgaW50IGRyYWdCYXJIZWlnaHQgPSAzMDsKKyAgICAgICAg
UkVDVCB3aW5kb3c7CisgICAgICAgIDo6R2V0V2luZG93UmVjdChoV25kLCAmd2luZG93KTsKKyAg
ICAgICAgLy8gRm9yIHRlc3Rpbmcgb3VyIHRyYW5zcGFyZW50IHdpbmRvdywgd2UgbmVlZCBhIHJl
Z2lvbiB0byB1c2UgYXMgYSBoYW5kbGUgZm9yCisgICAgICAgIC8vIGRyYWdnaW5nLiBUaGUgcmln
aHQgd2F5IHRvIGRvIHRoaXMgd291bGQgYmUgdG8gcXVlcnkgdGhlIHdlYiB2aWV3IHRvIHNlZSB3
aGF0J3MKKyAgICAgICAgLy8gdW5kZXIgdGhlIG1vdXNlLiBIb3dldmVyLCBmb3IgdGVzdGluZyBw
dXJwb3NlcyB3ZSBqdXN0IHVzZSBhbiBhcmJpdHJhcnkKKyAgICAgICAgLy8gMzAgbG9naWNhbCBw
aXhlbCBiYW5kIGF0IHRoZSB0b3Agb2YgdGhlIHZpZXcgYXMgYW4gYXJiaXRyYXJ5IGdyaXBwaW5n
IGxvY2F0aW9uLgorICAgICAgICAvLworICAgICAgICAvLyBXaGVuIHdlIGFyZSB3aXRoaW4gdGhp
cyBiYWQsIHJldHVybiBIVF9DQVBUSU9OIHRvIHRlbGwgV2luZG93cyB3ZSB3YW50IHRvCisgICAg
ICAgIC8vIHRyZWF0IHRoaXMgcmVnaW9uIGFzIGlmIGl0IHdlcmUgdGhlIHRpdGxlIGJhciBvbiBh
IG5vcm1hbCB3aW5kb3cuCisgICAgICAgIGludCB5ID0gSElXT1JEKGxQYXJhbSk7CisgICAgICAg
IGZsb2F0IHNjYWxlZERyYWdCYXJIZWlnaHRGYWN0b3IgPSBkcmFnQmFySGVpZ2h0ICogV2ViQ29y
ZTo6ZGV2aWNlU2NhbGVGYWN0b3JGb3JXaW5kb3coaFduZCk7CisgICAgICAgIGlmICgoeSA+IHdp
bmRvdy50b3ApICYmICh5IDwgd2luZG93LnRvcCArIHNjYWxlZERyYWdCYXJIZWlnaHRGYWN0b3Ip
KQorICAgICAgICAgICAgcmV0dXJuIEhUQ0FQVElPTjsKKyAgICB9CisgICAgcmV0dXJuIENhbGxX
aW5kb3dQcm9jKGdEZWZXZWJLaXRQcm9jLCBoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSk7
Cit9CisKK3ZvaWQgTWluaUJyb3dzZXI6OnN1YmNsYXNzRm9yTGF5ZXJlZFdpbmRvdygpCit7Cisj
aWYgZGVmaW5lZCBfTV9BTUQ2NCB8fCBkZWZpbmVkIF9XSU42NAorICAgIGdEZWZXZWJLaXRQcm9j
ID0gcmVpbnRlcnByZXRfY2FzdDxXTkRQUk9DPig6OkdldFdpbmRvd0xvbmdQdHIobV92aWV3V25k
LCBHV0xQX1dORFBST0MpKTsKKyAgICA6OlNldFdpbmRvd0xvbmdQdHIobV92aWV3V25kLCBHV0xQ
X1dORFBST0MsIHJlaW50ZXJwcmV0X2Nhc3Q8TE9OR19QVFI+KHZpZXdXbmRQcm9jKSk7CisjZWxz
ZQorICAgIGdEZWZXZWJLaXRQcm9jID0gcmVpbnRlcnByZXRfY2FzdDxXTkRQUk9DPig6OkdldFdp
bmRvd0xvbmcobV92aWV3V25kLCBHV0xfV05EUFJPQykpOworICAgIDo6U2V0V2luZG93TG9uZyht
X3ZpZXdXbmQsIEdXTF9XTkRQUk9DLCByZWludGVycHJldF9jYXN0PExPTkdfUFRSPih2aWV3V25k
UHJvYykpOworI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci93aW4vTWlu
aUJyb3dzZXIuaCBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9NaW5pQnJvd3Nlci5oCmluZGV4IGE3
MDMyZjRmNWJjN2Q2MGU3YTk5M2Q2MmY1NjBlYTc4ZTZkNjE0MTkuLmUyNWEwOGUyNDgyZWQ5MzFh
NzI1MWFkNTUzYTE3OTI5NDU1OTUzNzQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL3dp
bi9NaW5pQnJvd3Nlci5oCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9NaW5pQnJvd3Nlci5o
CkBAIC0yMyw2ICsyMyw3IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCisjaW5jbHVkZSAiQ29u
dGVudFdpbmRvdy5oIgogI2luY2x1ZGUgIlBhZ2VMb2FkVGVzdENsaWVudC5oIgogI2luY2x1ZGUg
PFdlYktpdExlZ2FjeS9XZWJLaXQuaD4KICNpbmNsdWRlIDxjb21pcC5oPgpAQCAtNDUsMTkgKzQ2
LDIxIEBAIHR5cGVkZWYgX2NvbV9wdHJfdDxfY29tX0lJSUQ8SVdlYkNhY2hlLCAmX191dWlkb2Yo
SVdlYkNhY2hlKT4+IElXZWJDYWNoZVB0cjsKIHR5cGVkZWYgX2NvbV9wdHJfdDxfY29tX0lJSUQ8
SVdlYlJlc291cmNlTG9hZERlbGVnYXRlLCAmX191dWlkb2YoSVdlYlJlc291cmNlTG9hZERlbGVn
YXRlKT4+IElXZWJSZXNvdXJjZUxvYWREZWxlZ2F0ZVB0cjsKIHR5cGVkZWYgX2NvbV9wdHJfdDxf
Y29tX0lJSUQ8SVdlYkRvd25sb2FkRGVsZWdhdGUsICZfX3V1aWRvZihJV2ViRG93bmxvYWREZWxl
Z2F0ZSk+PiBJV2ViRG93bmxvYWREZWxlZ2F0ZVB0cjsKIAotY2xhc3MgTWluaUJyb3dzZXIgewor
Y2xhc3MgTWluaUJyb3dzZXIgOiBwdWJsaWMgQ29udGVudFdpbmRvdyB7CiBwdWJsaWM6CiAgICAg
TWluaUJyb3dzZXIoSFdORCBtYWluV25kLCBIV05EIHVybEJhclduZCwgYm9vbCB1c2VMYXllcmVk
V2ViVmlldyA9IGZhbHNlLCBib29sIHBhZ2VMb2FkVGVzdGluZyA9IGZhbHNlKTsKIAogICAgIEhS
RVNVTFQgaW5pdCgpOwotICAgIEhSRVNVTFQgcHJlcGFyZVZpZXdzKEhXTkQgbWFpblduZCwgY29u
c3QgUkVDVCYgY2xpZW50UmVjdCwgY29uc3QgQlNUUiYgcmVxdWVzdGVkVVJMLCBIV05EJiB2aWV3
V25kKTsKLQotICAgIEhSRVNVTFQgbG9hZFVSTChjb25zdCBCU1RSJiBwYXNzZWRVUkwpOworICAg
IEhSRVNVTFQgcHJlcGFyZVZpZXdzKEhXTkQgbWFpblduZCwgY29uc3QgUkVDVCYgY2xpZW50UmVj
dCwgSFdORCYgdmlld1duZCk7CiAKKyAgICBib29sIGxvYWRVUkwoY29uc3Qgc3RkOjp3c3RyaW5n
JiB1cmwpOworICAgIGJvb2wgbG9hZEhUTUxTdHJpbmcoY29uc3Qgc3RkOjp3c3RyaW5nJik7Cisg
ICAgdm9pZCBwcmludCgpOworICAgIAogICAgIHZvaWQgc2hvd0xhc3RWaXNpdGVkU2l0ZXMoSVdl
YlZpZXcmKTsKICAgICB2b2lkIGxhdW5jaEluc3BlY3RvcigpOwotICAgIHZvaWQgbmF2aWdhdGVG
b3J3YXJkT3JCYWNrd2FyZChIV05EIGhXbmQsIFVJTlQgbWVudUlEKTsKLSAgICB2b2lkIG5hdmln
YXRlVG9IaXN0b3J5KEhXTkQgaFduZCwgVUlOVCBtZW51SUQpOworICAgIHZvaWQgbmF2aWdhdGVG
b3J3YXJkT3JCYWNrd2FyZChib29sIGlzQmFja3dhcmQpOworICAgIHZvaWQgbmF2aWdhdGVUb0hp
c3RvcnkodW5zaWduZWQgaGlzdG9yeUVudHJ5KTsKICAgICB2b2lkIGV4aXRQcm9ncmFtKCk7CiAg
ICAgYm9vbCBzZWVkSW5pdGlhbERlZmF1bHRQcmVmZXJlbmNlcygpOwogICAgIGJvb2wgc2V0VG9E
ZWZhdWx0UHJlZmVyZW5jZXMoKTsKQEAgLTcxLDE5ICs3NCwxOCBAQCBwdWJsaWM6CiAKICAgICBJ
V2ViUHJlZmVyZW5jZXNQdHIgc3RhbmRhcmRQcmVmZXJlbmNlcygpIHsgcmV0dXJuIG1fc3RhbmRh
cmRQcmVmZXJlbmNlczsgIH0KICAgICBJV2ViUHJlZmVyZW5jZXNQcml2YXRlUHRyIHByaXZhdGVQ
cmVmZXJlbmNlcygpIHsgcmV0dXJuIG1fcHJlZnNQcml2YXRlOyB9CisKICAgICBJV2ViRnJhbWVQ
dHIgbWFpbkZyYW1lKCk7CiAgICAgSVdlYkNvcmVTdGF0aXN0aWNzUHRyIHN0YXRpc3RpY3MoKSB7
IHJldHVybiBtX3N0YXRpc3RpY3M7IH0KICAgICBJV2ViQ2FjaGVQdHIgd2ViQ2FjaGUoKSB7IHJl
dHVybiBtX3dlYkNhY2hlOyAgfQogICAgIElXZWJWaWV3UHRyIHdlYlZpZXcoKSB7IHJldHVybiBt
X3dlYlZpZXc7IH0KIAotICAgIGJvb2wgaGFzV2ViVmlldygpIGNvbnN0IHsgcmV0dXJuICEhbV93
ZWJWaWV3OyB9CiAgICAgYm9vbCB1c2VzTGF5ZXJlZFdlYlZpZXcoKSBjb25zdCB7IHJldHVybiBt
X3VzZUxheWVyZWRXZWJWaWV3OyB9CiAgICAgYm9vbCBnb0JhY2soKTsKICAgICBib29sIGdvRm9y
d2FyZCgpOwogCi0gICAgdm9pZCBzZXRVc2VyQWdlbnQoVUlOVCBtZW51SUQpOwotICAgIHZvaWQg
c2V0VXNlckFnZW50KF9ic3RyX3QmIGN1c3RvbVVBU3RyaW5nKTsKLSAgICBfYnN0cl90IHVzZXJB
Z2VudCgpOworICAgIHZvaWQgc2V0VXNlckFnZW50KGNvbnN0IHN0ZDo6d3N0cmluZyYgY3VzdG9t
VUFTdHJpbmcpOworICAgIHN0ZDo6d3N0cmluZyB1c2VyQWdlbnQoKTsKIAogICAgIFBhZ2VMb2Fk
VGVzdENsaWVudCYgcGFnZUxvYWRUZXN0Q2xpZW50KCkgeyByZXR1cm4gKm1fcGFnZUxvYWRUZXN0
Q2xpZW50OyB9CiAKQEAgLTkyLDE0ICs5NCwyNCBAQCBwdWJsaWM6CiAgICAgdm9pZCB6b29tT3V0
KCk7CiAKICAgICB2b2lkIHNob3dMYXllclRyZWUoKTsKLQotICAgIGZsb2F0IGRldmljZVNjYWxl
RmFjdG9yKCkgeyByZXR1cm4gbV9kZXZpY2VTY2FsZUZhY3RvcjsgfQotICAgIHZvaWQgdXBkYXRl
RGV2aWNlU2NhbGVGYWN0b3IoKTsKLQotICAgIEhHRElPQkogdXJsQmFyRm9udCgpIHsgcmV0dXJu
IG1faFVSTEJhckZvbnQ7IH0KKyAgICB2b2lkIHVwZGF0ZVN0YXRpc3RpY3MoSFdORCBoRGxnKTsK
IAogcHJpdmF0ZToKLSAgICB2b2lkIGdlbmVyYXRlRm9udEZvclNjYWxlRmFjdG9yKGZsb2F0KTsK
KyAgICB2b2lkIHNldEFWRm91bmRhdGlvbkVuYWJsZWQoYm9vbCk7CisgICAgdm9pZCBzZXRBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZChib29sKTsKKyAgICB2b2lkIHNldEF1dGhvckFuZFVz
ZXJTdHlsZXNFbmFibGVkKGJvb2wpOworICAgIHZvaWQgc2V0RnVsbFNjcmVlbkVuYWJsZWQoYm9v
bCk7CisgICAgdm9pZCBzZXRKYXZhU2NyaXB0RW5hYmxlZChib29sKTsKKyAgICB2b2lkIHNldExv
YWRzSW1hZ2VzQXV0b21hdGljYWxseShib29sKTsKKyAgICB2b2lkIHNldExvY2FsRmlsZVJlc3Ry
aWN0aW9uc0VuYWJsZWQoYm9vbCk7CisgICAgdm9pZCBzZXRTaG91bGRJbnZlcnRDb2xvcnMoYm9v
bCk7CisgICAgdm9pZCBzZXRTaG93Q29tcG9zaXRpbmdCb3JkZXJzKGJvb2wpOworICAgIHZvaWQg
c2V0U2hvd1RpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yKGJvb2wpOworCisgICAgYm9vbCBzZXRDYWNo
ZUZvbGRlcigpOworICAgIHZvaWQgc3ViY2xhc3NGb3JMYXllcmVkV2luZG93KCk7CisKKyAgICBI
V05EIGh3bmQoKSBvdmVycmlkZSB7IHJldHVybiBtX3ZpZXdXbmQ7IH0KIAogICAgIHN0ZDo6dmVj
dG9yPElXZWJIaXN0b3J5SXRlbVB0cj4gbV9oaXN0b3J5SXRlbXM7CiAKQEAgLTEyNCw4ICsxMzYs
NiBAQCBwcml2YXRlOgogCiAgICAgSFdORCBtX2hNYWluV25kIHsgbnVsbHB0ciB9OwogICAgIEhX
TkQgbV9oVVJMQmFyV25kIHsgbnVsbHB0ciB9OwotICAgIEhHRElPQkogbV9oVVJMQmFyRm9udCB7
IG51bGxwdHIgfTsKLQotICAgIGZsb2F0IG1fZGV2aWNlU2NhbGVGYWN0b3IgeyAxLjBmIH07Cisg
ICAgSFdORCBtX3ZpZXdXbmQgeyBudWxscHRyIH07CiAgICAgYm9vbCBtX3VzZUxheWVyZWRXZWJW
aWV3OwogfTsKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9NaW5pQnJvd3NlclJl
cGxhY2UuaCBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9NaW5pQnJvd3NlclJlcGxhY2UuaAppbmRl
eCBhNDY4YjFiNjgyODBlMmUzYzdkMjEzYzAwZDcyOWJmODA1ZjkzYzdiLi40YTdmYTIwMDJkZThj
Njc4ZDNmYTFiNGJhOGNlNmUwMjg0ZmJkOTU3IDEwMDY0NAotLS0gYS9Ub29scy9NaW5pQnJvd3Nl
ci93aW4vTWluaUJyb3dzZXJSZXBsYWNlLmgKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvd2luL01p
bmlCcm93c2VyUmVwbGFjZS5oCkBAIC0yOSw2ICsyOSw0IEBACiAKIHN0YXRpYyBjb25zdCB3Y2hh
cl90KiBkZWZhdWx0SFRNTCA9IEwiPHAgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAjMDBGRjAw
XCI+VGVzdGluZzwvcD48aW1nIGlkPVwid2Via2l0IGxvZ29cIiBzcmM9XCJodHRwOi8vd2Via2l0
Lm9yZy9pbWFnZXMvaWNvbi1nb2xkLnBuZ1wiIGFsdD1cIkZhY2VcIj48ZGl2IHN0eWxlPVwiYm9y
ZGVyOiBzb2xpZCBibHVlOyBiYWNrZ3JvdW5kOiB3aGl0ZTtcIiBjb250ZW50ZWRpdGFibGU9XCJ0
cnVlXCI+ZGl2IHdpdGggYmx1ZSBib3JkZXI8L2Rpdj48dWw+PGxpPmZvbzxsaT5iYXI8bGk+YmF6
PC91bD4iOwogCi1zdGF0aWMgdm9pZCBwcm9jZXNzQ3Jhc2hSZXBvcnQoY29uc3Qgd2NoYXJfdCog
ZmlsZU5hbWUpIHsgOjpNZXNzYWdlQm94KDAsIGZpbGVOYW1lLCBMIkNyYXNoIFJlcG9ydCIsIE1C
X09LKTsgfQotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9QYWdl
TG9hZFRlc3RDbGllbnQuY3BwIGIvVG9vbHMvTWluaUJyb3dzZXIvd2luL1BhZ2VMb2FkVGVzdENs
aWVudC5jcHAKaW5kZXggOTU4YmEwMmJhZGE1NjFmMTkwZmZlMzM1MDFhNjA4ZjY5NDRhNzlkZi4u
MTA4NTg4NmFjMjEwNTk0NzNmMzBjMzVmZWU0ZGNhZjZjYThhZDNmYSAxMDA2NDQKLS0tIGEvVG9v
bHMvTWluaUJyb3dzZXIvd2luL1BhZ2VMb2FkVGVzdENsaWVudC5jcHAKKysrIGIvVG9vbHMvTWlu
aUJyb3dzZXIvd2luL1BhZ2VMb2FkVGVzdENsaWVudC5jcHAKQEAgLTEzMiw3ICsxMzIsNyBAQCB2
b2lkIFBhZ2VMb2FkVGVzdENsaWVudDo6cGFnZUxvYWRFbmRlZEF0VGltZShDRkFic29sdXRlVGlt
ZSBlbmRUaW1lKQogICAgIGlmIChtX3BhZ2VMb2FkVGVzdGluZykgewogICAgICAgICArK21fY3Vy
cmVudFJlcGV0aXRpb247CiAgICAgICAgIGlmIChtX2N1cnJlbnRSZXBldGl0aW9uICE9IG1fcmVw
ZXRpdGlvbnMpCi0gICAgICAgICAgICBtX2hvc3QtPmxvYWRVUkwobV91cmwpOworICAgICAgICAg
ICAgbV9ob3N0LT5sb2FkVVJMKHN0YXRpY19jYXN0PHdjaGFyX3QqPihtX3VybCkpOwogICAgICAg
ICBlbHNlIHsKICAgICAgICAgICAgIGR1bXBSdW5TdGF0aXN0aWNzKCk7CiAgICAgICAgICAgICBt
X2hvc3QtPmV4aXRQcm9ncmFtKCk7CmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci93aW4v
UmVzb3VyY2VMb2FkRGVsZWdhdGUuY3BwIGIvVG9vbHMvTWluaUJyb3dzZXIvd2luL1Jlc291cmNl
TG9hZERlbGVnYXRlLmNwcAppbmRleCA5MTUzYmM4Y2Y0NDI5ODIyMzg0MDc2NTEyOGY3M2NmZDA5
Y2VkZDllLi5hNzc2OGY3NjE4ZTllZDA1ODhmNDA1Y2IxYWUzN2FiZTY0M2RhY2UwIDEwMDY0NAot
LS0gYS9Ub29scy9NaW5pQnJvd3Nlci93aW4vUmVzb3VyY2VMb2FkRGVsZWdhdGUuY3BwCisrKyBi
L1Rvb2xzL01pbmlCcm93c2VyL3dpbi9SZXNvdXJjZUxvYWREZWxlZ2F0ZS5jcHAKQEAgLTI1LDYg
KzI1LDcgQEAKICNpbmNsdWRlICJzdGRhZnguaCIKICNpbmNsdWRlICJSZXNvdXJjZUxvYWREZWxl
Z2F0ZS5oIgogCisjaW5jbHVkZSAiQnJvd3NlcldpbmRvdy5oIgogI2luY2x1ZGUgIk1pbmlCcm93
c2VyLmgiCiAjaW5jbHVkZSAiUGFnZUxvYWRUZXN0Q2xpZW50LmgiCiAjaW5jbHVkZSA8V2ViQ29y
ZS9DT01QdHIuaD4KQEAgLTM3LDcgKzM4LDcgQEAKICNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVk
ZSA8d2luaW5ldC5oPgogCi1leHRlcm4gSFJFU1VMVCBEaXNwbGF5QXV0aERpYWxvZyhzdGQ6Ondz
dHJpbmcmIHVzZXJuYW1lLCBzdGQ6OndzdHJpbmcmIHBhc3N3b3JkKTsKK2V4dGVybiBCcm93c2Vy
V2luZG93KiBnQnJvd3NlcldpbmRvdzsKIAogSFJFU1VMVCBSZXNvdXJjZUxvYWREZWxlZ2F0ZTo6
UXVlcnlJbnRlcmZhY2UoX0luXyBSRUZJSUQgcmlpZCwgX0NPTV9PdXRwdHJfIHZvaWQqKiBwcHZP
YmplY3QpCiB7CkBAIC05NCw3ICs5NSw3IEBAIEhSRVNVTFQgUmVzb3VyY2VMb2FkRGVsZWdhdGU6
OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShfSW5fb3B0XyBJV2ViVmllCiAgICAg
ICAgIHJldHVybiBFX0ZBSUw7CiAKICAgICBzdGQ6OndzdHJpbmcgdXNlcm5hbWUsIHBhc3N3b3Jk
OwotICAgIGlmIChEaXNwbGF5QXV0aERpYWxvZyh1c2VybmFtZSwgcGFzc3dvcmQpICE9IFNfT0sp
CisgICAgaWYgKCFnQnJvd3NlcldpbmRvdy0+ZGlzcGxheUF1dGhEaWFsb2codXNlcm5hbWUsIHBh
c3N3b3JkKSkKICAgICAgICAgcmV0dXJuIEVfRkFJTDsKIAogICAgIENPTVB0cjxJV2ViVVJMQ3Jl
ZGVudGlhbD4gY3JlZGVudGlhbDsKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9X
SzJDb250ZW50V2luZG93LmNwcCBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9XSzJDb250ZW50V2lu
ZG93LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4yNGVkOTExNDY0NmZhODcwYzVlMGQ1YWEwMWQ3YWMwNTYyMDU0
YTRlCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvd2luL1dLMkNvbnRlbnRX
aW5kb3cuY3BwCkBAIC0wLDAgKzEsMjk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFNv
bnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworI2luY2x1ZGUgIldLMkNvbnRlbnRXaW5kb3cuaCIKKworI2lu
Y2x1ZGUgPFdlYktpdC9XS0luc3BlY3Rvci5oPgorCitzdGQ6OndzdHJpbmcKK2NyZWF0ZVN0cmlu
ZyhXS1N0cmluZ1JlZiB3a1N0cmluZykKK3sKKyAgICBzaXplX3QgbWF4U2l6ZSA9IFdLU3RyaW5n
R2V0TWF4aW11bVVURjhDU3RyaW5nU2l6ZSh3a1N0cmluZyk7CisgICAgY2hhciogYnVmZmVyID0g
bmV3IGNoYXJbbWF4U2l6ZV07CisgICAgc2l6ZV90IGFjdHVhbFNpemUgPSBXS1N0cmluZ0dldFVU
RjhDU3RyaW5nKHdrU3RyaW5nLCBidWZmZXIsIG1heFNpemUpOworCisgICAgc2l6ZV90IHdsZW47
CisgICAgd2NoYXJfdCogd2NzID0gbmV3IHdjaGFyX3RbYWN0dWFsU2l6ZSArIDFdOworICAgIG1i
c3Rvd2NzX3MoJndsZW4sIHdjcywgYWN0dWFsU2l6ZSsxLCBidWZmZXIsIGFjdHVhbFNpemUpOwor
ICAgIGRlbGV0ZSBbXSBidWZmZXI7CisgICAgc3RkOjp3c3RyaW5nIHJldCh3Y3MpOworICAgIGRl
bGV0ZSBbXSB3Y3M7CisKKyAgICByZXR1cm4gcmV0OworfQorCitzdGQ6OndzdHJpbmcgY3JlYXRl
U3RyaW5nKFdLVVJMUmVmIHdrVVJMKQoreworICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB1
cmwgPSBhZG9wdFdLKFdLVVJMQ29weVN0cmluZyh3a1VSTCkpOworICAgIHJldHVybiBjcmVhdGVT
dHJpbmcodXJsLmdldCgpKTsKK30KKworc3RkOjpzdHJpbmcgdG9VdGY4KGNvbnN0IHN0ZDo6d3N0
cmluZyYgc3JjKQoreworICAgIHNpemVfdCBsZW4gPSBzcmMubGVuZ3RoKCk7CisgICAgY2hhciog
bWJzID0gbmV3IGNoYXJbbGVuICogTUJfQ1VSX01BWCArIDFdOworICAgIHdjc3RvbWJzKG1icywg
c3JjLmNfc3RyKCksIGxlbiAqIE1CX0NVUl9NQVggKyAxKTsKKyAgICBzdGQ6OnN0cmluZyBkZXN0
KG1icyk7CisgICAgZGVsZXRlW10gbWJzOworICAgIHJldHVybiBkZXN0OworfQorCitzdGQ6Ondz
dHJpbmcgZnJvbVV0ZjgoY29uc3Qgc3RkOjpzdHJpbmcmIHNyYykKK3sKKyAgICBzaXplX3QgbGVu
ID0gc3JjLmxlbmd0aCgpOworICAgIHdjaGFyX3QqIHdjcyA9IG5ldyB3Y2hhcl90W2xlbiArIDFd
OworICAgIHNpemVfdCB3bGVuOworICAgIG1ic3Rvd2NzX3MoJndsZW4sIHdjcywgbGVuKzEsIHNy
Yy5jX3N0cigpLCBsZW4pOworICAgIHN0ZDo6d3N0cmluZyBkZXN0KHdjcyk7CisgICAgZGVsZXRl
W10gd2NzOworICAgIHJldHVybiBkZXN0OworfQorCitXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4K
K2NyZWF0ZVdLU3RyaW5nKHN0ZDo6d3N0cmluZyBzKQoreworICAgIGF1dG8gdXRmOCA9IHRvVXRm
OChzKTsKKyAgICByZXR1cm4gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyh1
dGY4LmNfc3RyKCkpKTsKK30KKworV0tSZXRhaW5QdHI8V0tVUkxSZWY+CitjcmVhdGVXS1VSTChz
dGQ6OndzdHJpbmcgcykKK3sKKyAgICBhdXRvIHV0ZjggPSB0b1V0Zjgocyk7CisgICAgcmV0dXJu
IGFkb3B0V0soV0tVUkxDcmVhdGVXaXRoVVRGOENTdHJpbmcodXRmOC5jX3N0cigpKSk7Cit9CisK
KworV0syQ29udGVudFdpbmRvdzo6V0syQ29udGVudFdpbmRvdyhIV05EIG1haW5XbmQsIEhXTkQg
dXJsQmFyV25kKQorICAgIDogbV91cmxCYXJXbmQodXJsQmFyV25kKQoreworICAgIFJFQ1QgcmVj
dCA9IHsgfTsKKyAgICBhdXRvIGNvbmYgPSBhZG9wdFdLKFdLUGFnZUNvbmZpZ3VyYXRpb25DcmVh
dGUoKSk7CisgICAgYXV0byBjb250ZXh0ID0gYWRvcHRXSyhXS0NvbnRleHRDcmVhdGUoKSk7Cisg
ICAgV0tQYWdlQ29uZmlndXJhdGlvblNldENvbnRleHQoY29uZi5nZXQoKSwgY29udGV4dC5nZXQo
KSk7CisKKyAgICBtX3ZpZXcgPSBhZG9wdFdLKFdLVmlld0NyZWF0ZShyZWN0LCBjb25mLmdldCgp
LCBtYWluV25kKSk7CisgICAgYXV0byBwYWdlID0gV0tWaWV3R2V0UGFnZShtX3ZpZXcuZ2V0KCkp
OworCisgICAgV0tQYWdlTG9hZGVyQ2xpZW50VjAgbG9hZENsaWVudCA9IHt7IDAsIHRoaXMgfX07
CisgICAgbG9hZENsaWVudC5kaWRSZWNlaXZlVGl0bGVGb3JGcmFtZSA9IGRpZFJlY2VpdmVUaXRs
ZUZvckZyYW1lOworICAgIGxvYWRDbGllbnQuZGlkRmFpbFByb3Zpc2lvbmFsTG9hZFdpdGhFcnJv
ckZvckZyYW1lID0gZGlkRmFpbFByb3Zpc2lvbmFsTG9hZFdpdGhFcnJvckZvckZyYW1lOworICAg
IGxvYWRDbGllbnQuZGlkQ29tbWl0TG9hZEZvckZyYW1lID0gZGlkQ29tbWl0TG9hZEZvckZyYW1l
OworICAgIGxvYWRDbGllbnQuZGlkQ2hhbmdlUHJvZ3Jlc3MgPSBkaWRDaGFuZ2VQcm9ncmVzczsK
KyAgICBsb2FkQ2xpZW50LmRpZFNhbWVEb2N1bWVudE5hdmlnYXRpb25Gb3JGcmFtZSA9IGRpZFNh
bWVEb2N1bWVudE5hdmlnYXRpb25Gb3JGcmFtZTsKKyAgICBXS1BhZ2VTZXRQYWdlTG9hZGVyQ2xp
ZW50KHBhZ2UsICZsb2FkQ2xpZW50LmJhc2UpOworfQorCitib29sIFdLMkNvbnRlbnRXaW5kb3c6
OmxvYWRVUkwoY29uc3Qgc3RkOjp3c3RyaW5nJiB1cmwpCit7CisgICAgYXV0byBwYWdlID0gV0tW
aWV3R2V0UGFnZShtX3ZpZXcuZ2V0KCkpOworICAgIFdLUGFnZUxvYWRVUkwocGFnZSwgY3JlYXRl
V0tVUkwodXJsKS5nZXQoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV0syQ29udGVu
dFdpbmRvdzo6bG9hZEhUTUxTdHJpbmcoY29uc3Qgc3RkOjp3c3RyaW5nJiBzdHIpCit7CisgICAg
YXV0byBwYWdlID0gV0tWaWV3R2V0UGFnZShtX3ZpZXcuZ2V0KCkpOworICAgIGF1dG8gdXJsID0g
Y3JlYXRlV0tVUkwoTCJhYm91dDoiKTsKKyAgICBXS1BhZ2VMb2FkSFRNTFN0cmluZyhwYWdlLCBj
cmVhdGVXS1N0cmluZyhzdHIpLmdldCgpLCB1cmwuZ2V0KCkpOworICAgIHJldHVybiB0cnVlOwor
fQorCit2b2lkIFdLMkNvbnRlbnRXaW5kb3c6OnByaW50KCkKK3sKK30KKworCit2b2lkIFdLMkNv
bnRlbnRXaW5kb3c6OmxhdW5jaEluc3BlY3RvcigpCit7CisgICAgYXV0byBwYWdlID0gV0tWaWV3
R2V0UGFnZShtX3ZpZXcuZ2V0KCkpOworICAgIGF1dG8gaW5zcGVjdG9yID0gV0tQYWdlR2V0SW5z
cGVjdG9yKHBhZ2UpOworICAgIFdLSW5zcGVjdG9yU2hvdyhpbnNwZWN0b3IpOworfQorCit2b2lk
IFdLMkNvbnRlbnRXaW5kb3c6Om5hdmlnYXRlRm9yd2FyZE9yQmFja3dhcmQoYm9vbCBpc0JhY2t3
YXJkKQoreworfQorCit2b2lkIFdLMkNvbnRlbnRXaW5kb3c6Om5hdmlnYXRlVG9IaXN0b3J5KHVu
c2lnbmVkIGhpc3RvcnlFbnRyeSkKK3sKK30KKworCit2b2lkIFdLMkNvbnRlbnRXaW5kb3c6OnNl
dEFWRm91bmRhdGlvbkVuYWJsZWQoYm9vbCkKK3sKK30KKwordm9pZCBXSzJDb250ZW50V2luZG93
OjpzZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZChib29sKQoreworfQorCit2b2lkIFdL
MkNvbnRlbnRXaW5kb3c6OnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKGJvb2wpCit7Cit9
CisKK3ZvaWQgV0syQ29udGVudFdpbmRvdzo6c2V0RnVsbFNjcmVlbkVuYWJsZWQoYm9vbCkKK3sK
K30KKwordm9pZCBXSzJDb250ZW50V2luZG93OjpzZXRKYXZhU2NyaXB0RW5hYmxlZChib29sKQor
eworfQorCit2b2lkIFdLMkNvbnRlbnRXaW5kb3c6OnNldExvYWRzSW1hZ2VzQXV0b21hdGljYWxs
eShib29sIGVuYWJsZWQpCit7CisgICAgYXV0byBwYWdlID0gV0tWaWV3R2V0UGFnZShtX3ZpZXcu
Z2V0KCkpOworICAgIGF1dG8gcGdyb3VwID0gV0tQYWdlR2V0UGFnZUdyb3VwKHBhZ2UpOworICAg
IGF1dG8gcHJlZiA9IFdLUGFnZUdyb3VwR2V0UHJlZmVyZW5jZXMocGdyb3VwKTsKKyAgICBXS1By
ZWZlcmVuY2VzU2V0TG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5KHByZWYsIGVuYWJsZWQpOworfQor
Cit2b2lkIFdLMkNvbnRlbnRXaW5kb3c6OnNldExvY2FsRmlsZVJlc3RyaWN0aW9uc0VuYWJsZWQo
Ym9vbCkKK3sKK30KKwordm9pZCBXSzJDb250ZW50V2luZG93OjpzZXRTaG91bGRJbnZlcnRDb2xv
cnMoYm9vbCkKK3sKK30KKwordm9pZCBXSzJDb250ZW50V2luZG93OjpzZXRTaG93Q29tcG9zaXRp
bmdCb3JkZXJzKGJvb2wpCit7Cit9CisKK3ZvaWQgV0syQ29udGVudFdpbmRvdzo6c2V0U2hvd1Rp
bGVkU2Nyb2xsaW5nSW5kaWNhdG9yKGJvb2wpCit7Cit9CisKKworYm9vbCBXSzJDb250ZW50V2lu
ZG93Ojpnb0JhY2soKQoreworICAgIGF1dG8gcGFnZSA9IFdLVmlld0dldFBhZ2UobV92aWV3Lmdl
dCgpKTsKKyAgICBXS1BhZ2VHb0JhY2socGFnZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgV0syQ29udGVudFdpbmRvdzo6Z29Gb3J3YXJkKCkKK3sKKyAgICBhdXRvIHBhZ2UgPSBXS1Zp
ZXdHZXRQYWdlKG1fdmlldy5nZXQoKSk7CisgICAgV0tQYWdlR29Gb3J3YXJkKHBhZ2UpOworICAg
IHJldHVybiB0cnVlOworfQorCisKK3ZvaWQgV0syQ29udGVudFdpbmRvdzo6c2V0VXNlckFnZW50
KGNvbnN0IHN0ZDo6d3N0cmluZyYgY3VzdG9tVUFTdHJpbmcpCit7CisgICAgYXV0byBwYWdlID0g
V0tWaWV3R2V0UGFnZShtX3ZpZXcuZ2V0KCkpOworICAgIGF1dG8gdWEgPSBjcmVhdGVXS1N0cmlu
ZyhjdXN0b21VQVN0cmluZyk7CisgICAgV0tQYWdlU2V0Q3VzdG9tVXNlckFnZW50KHBhZ2UsIHVh
LmdldCgpKTsKK30KKworc3RkOjp3c3RyaW5nIFdLMkNvbnRlbnRXaW5kb3c6OnVzZXJBZ2VudCgp
Cit7CisgICAgYXV0byBwYWdlID0gV0tWaWV3R2V0UGFnZShtX3ZpZXcuZ2V0KCkpOworICAgIGF1
dG8gdWEgPSBhZG9wdFdLKFdLUGFnZUNvcHlVc2VyQWdlbnQocGFnZSkpOworICAgIHJldHVybiBj
cmVhdGVTdHJpbmcodWEuZ2V0KCkpOworfQorCisKK3ZvaWQgV0syQ29udGVudFdpbmRvdzo6cmVz
ZXRab29tKCkKK3sKKyAgICBhdXRvIHBhZ2UgPSBXS1ZpZXdHZXRQYWdlKG1fdmlldy5nZXQoKSk7
CisgICAgV0tQYWdlU2V0UGFnZVpvb21GYWN0b3IocGFnZSwgMSk7Cit9CisKK3ZvaWQgV0syQ29u
dGVudFdpbmRvdzo6em9vbUluKCkKK3sKKyAgICBhdXRvIHBhZ2UgPSBXS1ZpZXdHZXRQYWdlKG1f
dmlldy5nZXQoKSk7CisgICAgZG91YmxlIHMgPSBXS1BhZ2VHZXRQYWdlWm9vbUZhY3RvcihwYWdl
KTsKKyAgICBXS1BhZ2VTZXRQYWdlWm9vbUZhY3RvcihwYWdlLCBzICogMS4yNSk7Cit9CisKK3Zv
aWQgV0syQ29udGVudFdpbmRvdzo6em9vbU91dCgpCit7CisgICAgYXV0byBwYWdlID0gV0tWaWV3
R2V0UGFnZShtX3ZpZXcuZ2V0KCkpOworICAgIGRvdWJsZSBzID0gV0tQYWdlR2V0UGFnZVpvb21G
YWN0b3IocGFnZSk7CisgICAgV0tQYWdlU2V0UGFnZVpvb21GYWN0b3IocGFnZSwgcyAqIDAuOCk7
Cit9CisKKwordm9pZCBXSzJDb250ZW50V2luZG93OjpzaG93TGF5ZXJUcmVlKCkKK3sKK30KKwor
dm9pZCBXSzJDb250ZW50V2luZG93Ojp1cGRhdGVTdGF0aXN0aWNzKEhXTkQgaERsZykKK3sKK30K
KworCitIV05EIFdLMkNvbnRlbnRXaW5kb3c6Omh3bmQoKQoreworICAgIHJldHVybiBXS1ZpZXdH
ZXRXaW5kb3cobV92aWV3LmdldCgpKTsKK30KKworc3RhdGljIFdLMkNvbnRlbnRXaW5kb3cqIHRv
Q29udGVudFdpbmRvdyhjb25zdCB2b2lkICpjbGllbnRJbmZvKQoreworICAgIHJldHVybiBjb25z
dF9jYXN0PFdLMkNvbnRlbnRXaW5kb3cqPihzdGF0aWNfY2FzdDxjb25zdCBXSzJDb250ZW50V2lu
ZG93Kj4oY2xpZW50SW5mbykpOworfQorCit2b2lkIFdLMkNvbnRlbnRXaW5kb3c6OmRpZFJlY2Vp
dmVUaXRsZUZvckZyYW1lKFdLUGFnZVJlZiBwYWdlLCBXS1N0cmluZ1JlZiB0aXRsZSwgV0tGcmFt
ZVJlZiBmcmFtZSwgV0tUeXBlUmVmIHVzZXJEYXRhLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKQor
eworICAgIGlmICghV0tGcmFtZUlzTWFpbkZyYW1lKGZyYW1lKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIHN0ZDo6d3N0cmluZyB0aXRsZVN0cmluZyA9IGNyZWF0ZVN0cmluZyh0aXRsZSk7CisgICAg
YXV0byB0aGl6ID0gdG9Db250ZW50V2luZG93KGNsaWVudEluZm8pOworICAgIHByaW50ZihfX0ZV
TkNUSU9OX18gIjogJVMiLCB0aXRsZVN0cmluZy5jX3N0cigpKTsKK30KKwordm9pZCBXSzJDb250
ZW50V2luZG93OjpkaWRGYWlsUHJvdmlzaW9uYWxMb2FkV2l0aEVycm9yRm9yRnJhbWUoV0tQYWdl
UmVmIHBhZ2UsIFdLRnJhbWVSZWYgZnJhbWUsIFdLRXJyb3JSZWYgZXJyb3IsIFdLVHlwZVJlZiB1
c2VyRGF0YSwgY29uc3Qgdm9pZCAqY2xpZW50SW5mbykKK3sKKyAgICBpbnQgZXJyb3JDb2RlID0g
V0tFcnJvckdldEVycm9yQ29kZShlcnJvcik7CisKKyAgICBwcmludGYoX19GVU5DVElPTl9fICI6
ICVkXG4iLCBlcnJvckNvZGUpOworfQorCit2b2lkIFdLMkNvbnRlbnRXaW5kb3c6OmRpZENvbW1p
dExvYWRGb3JGcmFtZShXS1BhZ2VSZWYgcGFnZSwgV0tGcmFtZVJlZiBmcmFtZSwgV0tUeXBlUmVm
IHVzZXJEYXRhLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKQoreworICAgIGlmICghV0tGcmFtZUlz
TWFpbkZyYW1lKGZyYW1lKSkKKyAgICAgICAgcmV0dXJuOworICAgIGF1dG8gdGhpeiA9IHRvQ29u
dGVudFdpbmRvdyhjbGllbnRJbmZvKTsKKworICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB3a3Vy
bCA9IGFkb3B0V0soV0tGcmFtZUNvcHlVUkwoZnJhbWUpKTsKKyAgICBzdGQ6OndzdHJpbmcgdXJs
U3RyaW5nID0gY3JlYXRlU3RyaW5nKHdrdXJsLmdldCgpKTsKKyAgICBTZXRXaW5kb3dUZXh0KHRo
aXotPm1fdXJsQmFyV25kLCB1cmxTdHJpbmcuY19zdHIoKSk7Cit9CisKK3ZvaWQgV0syQ29udGVu
dFdpbmRvdzo6ZGlkQ2hhbmdlUHJvZ3Jlc3MoV0tQYWdlUmVmIHBhZ2UsIGNvbnN0IHZvaWQqIGNs
aWVudEluZm8pCit7CisgICAgYXV0byB0aGl6ID0gdG9Db250ZW50V2luZG93KGNsaWVudEluZm8p
OworICAgIGRvdWJsZSBwcm9ncmVzcyA9IFdLUGFnZUdldEVzdGltYXRlZFByb2dyZXNzKHBhZ2Up
OworICAgIHByaW50ZihfX0ZVTkNUSU9OX18gIjogJWZcbiIsIHByb2dyZXNzKTsKK30KKwordm9p
ZCBXSzJDb250ZW50V2luZG93OjpkaWRTYW1lRG9jdW1lbnROYXZpZ2F0aW9uRm9yRnJhbWUoV0tQ
YWdlUmVmIHBhZ2UsIFdLRnJhbWVSZWYgZnJhbWUsIFdLU2FtZURvY3VtZW50TmF2aWdhdGlvblR5
cGUgdHlwZSwgV0tUeXBlUmVmIHVzZXJEYXRhLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKQorewor
ICAgIGlmICghV0tGcmFtZUlzTWFpbkZyYW1lKGZyYW1lKSkKKyAgICAgICAgcmV0dXJuOworfQpk
aWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvd2luL1dLMkNvbnRlbnRXaW5kb3cuaCBiL1Rv
b2xzL01pbmlCcm93c2VyL3dpbi9XSzJDb250ZW50V2luZG93LmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGRmZTE0
NGU2MTU0YjNjMGY1MzQzYmMxYTJhOGEzOTRiOGExZTk4NAotLS0gL2Rldi9udWxsCisrKyBiL1Rv
b2xzL01pbmlCcm93c2VyL3dpbi9XSzJDb250ZW50V2luZG93LmgKQEAgLTAsMCArMSw3OSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQg
SW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSAiQ29udGVudFdpbmRvdy5oIgorI2luY2x1ZGUgPFdlYktpdC9XS1Jl
dGFpblB0ci5oPgorI2luY2x1ZGUgPFdlYktpdC9XZWJLaXQyX0MuaD4KKworY2xhc3MgV0syQ29u
dGVudFdpbmRvdyA6IHB1YmxpYyBDb250ZW50V2luZG93IHsKK3B1YmxpYzoKKyAgICBXSzJDb250
ZW50V2luZG93KEhXTkQgbWFpblduZCwgSFdORCB1cmxCYXJXbmQpOworCitwcml2YXRlOgorICAg
IGJvb2wgbG9hZFVSTChjb25zdCBzdGQ6OndzdHJpbmcmIHVybCkgb3ZlcnJpZGU7CisgICAgYm9v
bCBsb2FkSFRNTFN0cmluZyhjb25zdCBzdGQ6OndzdHJpbmcmKSBvdmVycmlkZTsKKworICAgIHZv
aWQgcHJpbnQoKSBvdmVycmlkZTsKKworICAgIHZvaWQgbGF1bmNoSW5zcGVjdG9yKCkgb3ZlcnJp
ZGU7CisgICAgdm9pZCBuYXZpZ2F0ZUZvcndhcmRPckJhY2t3YXJkKGJvb2wgaXNCYWNrd2FyZCkg
b3ZlcnJpZGU7CisgICAgdm9pZCBuYXZpZ2F0ZVRvSGlzdG9yeSh1bnNpZ25lZCBoaXN0b3J5RW50
cnkpIG92ZXJyaWRlOworCisgICAgdm9pZCBzZXRBVkZvdW5kYXRpb25FbmFibGVkKGJvb2wpIG92
ZXJyaWRlOworICAgIHZvaWQgc2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQoYm9vbCkg
b3ZlcnJpZGU7CisgICAgdm9pZCBzZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZChib29sKSBv
dmVycmlkZTsKKyAgICB2b2lkIHNldEZ1bGxTY3JlZW5FbmFibGVkKGJvb2wpIG92ZXJyaWRlOwor
ICAgIHZvaWQgc2V0SmF2YVNjcmlwdEVuYWJsZWQoYm9vbCkgb3ZlcnJpZGU7CisgICAgdm9pZCBz
ZXRMb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkoYm9vbCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRM
b2NhbEZpbGVSZXN0cmljdGlvbnNFbmFibGVkKGJvb2wpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0
U2hvdWxkSW52ZXJ0Q29sb3JzKGJvb2wpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0U2hvd0NvbXBv
c2l0aW5nQm9yZGVycyhib29sKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldFNob3dUaWxlZFNjcm9s
bGluZ0luZGljYXRvcihib29sKSBvdmVycmlkZTsKKworICAgIGJvb2wgZ29CYWNrKCkgb3ZlcnJp
ZGU7CisgICAgYm9vbCBnb0ZvcndhcmQoKSBvdmVycmlkZTsKKworICAgIHZvaWQgc2V0VXNlckFn
ZW50KGNvbnN0IHN0ZDo6d3N0cmluZyYgY3VzdG9tVUFTdHJpbmcpIG92ZXJyaWRlOworICAgIHN0
ZDo6d3N0cmluZyB1c2VyQWdlbnQoKSBvdmVycmlkZTsKKworICAgIHZvaWQgcmVzZXRab29tKCkg
b3ZlcnJpZGU7CisgICAgdm9pZCB6b29tSW4oKSBvdmVycmlkZTsKKyAgICB2b2lkIHpvb21PdXQo
KSBvdmVycmlkZTsKKworICAgIHZvaWQgc2hvd0xheWVyVHJlZSgpIG92ZXJyaWRlOworICAgIHZv
aWQgdXBkYXRlU3RhdGlzdGljcyhIV05EIGhEbGcpIG92ZXJyaWRlOworCisgICAgSFdORCBod25k
KCkgb3ZlcnJpZGU7CisKKyAgICBzdGF0aWMgdm9pZCBkaWRSZWNlaXZlVGl0bGVGb3JGcmFtZShX
S1BhZ2VSZWYsIFdLU3RyaW5nUmVmIHRpdGxlLCBXS0ZyYW1lUmVmLCBXS1R5cGVSZWYgdXNlckRh
dGEsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pOworICAgIHN0YXRpYyB2b2lkIGRpZEZhaWxQcm92
aXNpb25hbExvYWRXaXRoRXJyb3JGb3JGcmFtZShXS1BhZ2VSZWYsIFdLRnJhbWVSZWYsIFdLRXJy
b3JSZWYsIFdLVHlwZVJlZiB1c2VyRGF0YSwgY29uc3Qgdm9pZCAqY2xpZW50SW5mbyk7CisgICAg
c3RhdGljIHZvaWQgZGlkQ29tbWl0TG9hZEZvckZyYW1lKFdLUGFnZVJlZiwgV0tGcmFtZVJlZiwg
V0tUeXBlUmVmIHVzZXJEYXRhLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKTsKKyAgICBzdGF0aWMg
dm9pZCBkaWRDaGFuZ2VQcm9ncmVzcyhXS1BhZ2VSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8p
OworICAgIHN0YXRpYyB2b2lkIGRpZFNhbWVEb2N1bWVudE5hdmlnYXRpb25Gb3JGcmFtZShXS1Bh
Z2VSZWYsIFdLRnJhbWVSZWYsIFdLU2FtZURvY3VtZW50TmF2aWdhdGlvblR5cGUsIFdLVHlwZVJl
ZiB1c2VyRGF0YSwgY29uc3Qgdm9pZCAqY2xpZW50SW5mbyk7CisKKyAgICBXS1JldGFpblB0cjxX
S1ZpZXdSZWY+IG1fdmlldzsKKyAgICBIV05EIG1fdXJsQmFyV25kOworfTsKZGlmZiAtLWdpdCBh
L1Rvb2xzL01pbmlCcm93c2VyL3dpbi9XaW5NYWluLmNwcCBiL1Rvb2xzL01pbmlCcm93c2VyL3dp
bi9XaW5NYWluLmNwcAppbmRleCAwNTk0YmNiZTU0MDhhMjkzNGQzMzE1OWNlNmEyZjViZGRiYzcw
ZjQyLi40MTEwMDcwZjViZmRkMjAwNmYzZWQyY2M4ZjQ2YmIyYjZkYzU1MGUyIDEwMDY0NAotLS0g
YS9Ub29scy9NaW5pQnJvd3Nlci93aW4vV2luTWFpbi5jcHAKKysrIGIvVG9vbHMvTWluaUJyb3dz
ZXIvd2luL1dpbk1haW4uY3BwCkBAIC0yNSwxOCArMjUsMjIgQEAKICAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQog
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCiAgKi8KLQotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQwOTEpCi0K
ICNpbmNsdWRlICJzdGRhZnguaCIKKworI2luY2x1ZGUgIkJyb3dzZXJXaW5kb3cuaCIKICNpbmNs
dWRlICJNaW5pQnJvd3NlckxpYlJlc291cmNlLmgiCi0jaW5jbHVkZSAiTWluaUJyb3dzZXJXZWJI
b3N0LmgiCi0jaW5jbHVkZSAiQ29tbW9uLmNwcCIKKyNpbmNsdWRlIDxXZWJLaXRMZWdhY3kvV2Vi
S2l0Lmg+CiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWZsb2F0IGRldmljZVNjYWxlRmFjdG9yRm9y
V2luZG93KEhXTkQpOwotfQorI2lmIFVTRShDRikKKyNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9D
RlJ1bkxvb3AuaD4KKyNlbmRpZgorCitleHRlcm4gQnJvd3NlcldpbmRvdyogZ0Jyb3dzZXJXaW5k
b3c7CiAKK3ZvaWQgY29tcHV0ZUZ1bGxEZXNrdG9wRnJhbWUoKTsKK3ZvaWQgY3JlYXRlQ3Jhc2hS
ZXBvcnQoRVhDRVBUSU9OX1BPSU5URVJTKik7Cit2b2lkIHBhcnNlQ29tbWFuZExpbmUoYm9vbCYg
dXNlc0xheWVyZWRXZWJWaWV3LCBib29sJiB1c2VGdWxsRGVza3RvcCwgYm9vbCYgcGFnZUxvYWRU
ZXN0aW5nLCBfYnN0cl90JiByZXF1ZXN0ZWRVUkwsIGJvb2wmIHVzZVdLMik7CisgICAgCiBpbnQg
V0lOQVBJIHdXaW5NYWluKF9Jbl8gSElOU1RBTkNFIGhJbnN0YW5jZSwgX0luX29wdF8gSElOU1RB
TkNFIGhQcmV2SW5zdGFuY2UsIF9Jbl8gTFBXU1RSIGxwc3RyQ21kTGluZSwgX0luXyBpbnQgbkNt
ZFNob3cpCiB7CiAjaWZkZWYgX0NSVERCR19NQVBfQUxMT0MKQEAgLTQ0LDkgKzQ4LDYgQEAgaW50
IFdJTkFQSSB3V2luTWFpbihfSW5fIEhJTlNUQU5DRSBoSW5zdGFuY2UsIF9Jbl9vcHRfIEhJTlNU
QU5DRSBoUHJldkluc3RhbmNlLAogICAgIF9DcnRTZXRSZXBvcnRNb2RlKF9DUlRfV0FSTiwgX0NS
VERCR19NT0RFX0ZJTEUpOwogI2VuZGlmCiAKLSAgICBNU0cgbXNnID0gezB9OwotICAgIEhBQ0NF
TCBoQWNjZWxUYWJsZTsKLQogICAgIElOSVRDT01NT05DT05UUk9MU0VYIEluaXRDdHJsRXg7CiAK
ICAgICBJbml0Q3RybEV4LmR3U2l6ZSA9IHNpemVvZihJTklUQ09NTU9OQ09OVFJPTFNFWCk7CkBA
IC01NiwxNCArNTcsMTAgQEAgaW50IFdJTkFQSSB3V2luTWFpbihfSW5fIEhJTlNUQU5DRSBoSW5z
dGFuY2UsIF9Jbl9vcHRfIEhJTlNUQU5DRSBoUHJldkluc3RhbmNlLAogICAgIGJvb2wgdXNlc0xh
eWVyZWRXZWJWaWV3ID0gZmFsc2U7CiAgICAgYm9vbCB1c2VGdWxsRGVza3RvcCA9IGZhbHNlOwog
ICAgIGJvb2wgcGFnZUxvYWRUZXN0aW5nID0gZmFsc2U7CisgICAgYm9vbCB1c2VXSzIgPSBmYWxz
ZTsKICAgICBfYnN0cl90IHJlcXVlc3RlZFVSTDsKIAotICAgIHBhcnNlQ29tbWFuZExpbmUodXNl
c0xheWVyZWRXZWJWaWV3LCB1c2VGdWxsRGVza3RvcCwgcGFnZUxvYWRUZXN0aW5nLCByZXF1ZXN0
ZWRVUkwpOwotCi0gICAgLy8gSW5pdGlhbGl6ZSBnbG9iYWwgc3RyaW5ncwotICAgIExvYWRTdHJp
bmcoaEluc3QsIElEU19BUFBfVElUTEUsIHN6VGl0bGUsIE1BWF9MT0FEU1RSSU5HKTsKLSAgICBM
b2FkU3RyaW5nKGhJbnN0LCBJRENfTUlOSUJST1dTRVIsIHN6V2luZG93Q2xhc3MsIE1BWF9MT0FE
U1RSSU5HKTsKLSAgICBNeVJlZ2lzdGVyQ2xhc3MoaEluc3QpOworICAgIHBhcnNlQ29tbWFuZExp
bmUodXNlc0xheWVyZWRXZWJWaWV3LCB1c2VGdWxsRGVza3RvcCwgcGFnZUxvYWRUZXN0aW5nLCBy
ZXF1ZXN0ZWRVUkwsIHVzZVdLMik7CiAKICAgICBpZiAodXNlRnVsbERlc2t0b3ApCiAgICAgICAg
IGNvbXB1dGVGdWxsRGVza3RvcEZyYW1lKCk7CkBAIC03MywxNTIgKzcwLDQwIEBAIGludCBXSU5B
UEkgd1dpbk1haW4oX0luXyBISU5TVEFOQ0UgaEluc3RhbmNlLCBfSW5fb3B0XyBISU5TVEFOQ0Ug
aFByZXZJbnN0YW5jZSwKIAogICAgIDo6U2V0UHJvY2Vzc0RQSUF3YXJlKCk7CiAKLSAgICBmbG9h
dCBzY2FsZUZhY3RvciA9IFdlYkNvcmU6OmRldmljZVNjYWxlRmFjdG9yRm9yV2luZG93KG51bGxw
dHIpOwotCi0gICAgaWYgKHVzZXNMYXllcmVkV2ViVmlldykgewotICAgICAgICBoVVJMQmFyV25k
ID0gQ3JlYXRlV2luZG93KEwiRURJVCIsIEwiVHlwZSBVUkwgSGVyZSIsCi0gICAgICAgICAgICBX
U19PVkVSTEFQUEVEV0lORE9XIHwgV1NfVklTSUJMRSB8IFdTX0JPUkRFUiB8IEVTX0xFRlQgfCBF
U19BVVRPVlNDUk9MTCwgCi0gICAgICAgICAgICBzY2FsZUZhY3RvciAqIHNfd2luZG93UG9zaXRp
b24ueCwgc2NhbGVGYWN0b3IgKiAoc193aW5kb3dQb3NpdGlvbi55ICsgc193aW5kb3dTaXplLmN5
KSwgc2NhbGVGYWN0b3IgKiBzX3dpbmRvd1NpemUuY3gsIHNjYWxlRmFjdG9yICogVVJMQkFSX0hF
SUdIVCwKLSAgICAgICAgICAgIDAsIDAsIGhJbnN0LCAwKTsKLSAgICB9IGVsc2UgewotICAgICAg
ICBoTWFpblduZCA9IENyZWF0ZVdpbmRvdyhzeldpbmRvd0NsYXNzLCBzelRpdGxlLCBXU19PVkVS
TEFQUEVEV0lORE9XLAotICAgICAgICAgICAgQ1dfVVNFREVGQVVMVCwgMCwgQ1dfVVNFREVGQVVM
VCwgMCwgMCwgMCwgaEluc3QsIDApOwotCi0gICAgICAgIGlmICghaE1haW5XbmQpCi0gICAgICAg
ICAgICByZXR1cm4gRkFMU0U7Ci0KLSAgICAgICAgaEJhY2tCdXR0b25XbmQgPSBDcmVhdGVXaW5k
b3coTCJCVVRUT04iLCBMIjwiLCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgIHwgQlNfVEVYVCwgMCwg
MCwgMCwgMCwgaE1haW5XbmQsIDAsIGhJbnN0LCAwKTsKLSAgICAgICAgaEZvcndhcmRCdXR0b25X
bmQgPSBDcmVhdGVXaW5kb3coTCJCVVRUT04iLCBMIj4iLCBXU19DSElMRCB8IFdTX1ZJU0lCTEUg
fCBCU19URVhULCBzY2FsZUZhY3RvciAqIENPTlRST0xCVVRUT05fV0lEVEgsIDAsIDAsIDAsIGhN
YWluV25kLCAwLCBoSW5zdCwgMCk7Ci0gICAgICAgIGhVUkxCYXJXbmQgPSBDcmVhdGVXaW5kb3co
TCJFRElUIiwgMCwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfQk9SREVSIHwgRVNfTEVGVCB8
IEVTX0FVVE9WU0NST0xMLCBzY2FsZUZhY3RvciAqIENPTlRST0xCVVRUT05fV0lEVEggKiAyLCAw
LCAwLCAwLCBoTWFpblduZCwgMCwgaEluc3QsIDApOwotCi0gICAgICAgIFNob3dXaW5kb3coaE1h
aW5XbmQsIG5DbWRTaG93KTsKLSAgICAgICAgVXBkYXRlV2luZG93KGhNYWluV25kKTsKLSAgICB9
Ci0KLSAgICBEZWZFZGl0UHJvYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8V05EUFJPQz4oR2V0V2luZG93
TG9uZ1B0cihoVVJMQmFyV25kLCBHV0xQX1dORFBST0MpKTsKLSAgICBEZWZCdXR0b25Qcm9jID0g
cmVpbnRlcnByZXRfY2FzdDxXTkRQUk9DPihHZXRXaW5kb3dMb25nUHRyKGhCYWNrQnV0dG9uV25k
LCBHV0xQX1dORFBST0MpKTsKLSAgICBTZXRXaW5kb3dMb25nUHRyKGhVUkxCYXJXbmQsIEdXTFBf
V05EUFJPQywgcmVpbnRlcnByZXRfY2FzdDxMT05HX1BUUj4oRWRpdFByb2MpKTsKLSAgICBTZXRX
aW5kb3dMb25nUHRyKGhCYWNrQnV0dG9uV25kLCBHV0xQX1dORFBST0MsIHJlaW50ZXJwcmV0X2Nh
c3Q8TE9OR19QVFI+KEJhY2tCdXR0b25Qcm9jKSk7Ci0gICAgU2V0V2luZG93TG9uZ1B0cihoRm9y
d2FyZEJ1dHRvblduZCwgR1dMUF9XTkRQUk9DLCByZWludGVycHJldF9jYXN0PExPTkdfUFRSPihG
b3J3YXJkQnV0dG9uUHJvYykpOwotCi0gICAgU2V0Rm9jdXMoaFVSTEJhclduZCk7Ci0KLSAgICBS
RUNUIGNsaWVudFJlY3Q7Ci0gICAgOjpHZXRDbGllbnRSZWN0KGhNYWluV25kLCAmY2xpZW50UmVj
dCk7Ci0KLSAgICBpZiAodXNlc0xheWVyZWRXZWJWaWV3KQotICAgICAgICBjbGllbnRSZWN0ID0g
eyBzX3dpbmRvd1Bvc2l0aW9uLngsIHNfd2luZG93UG9zaXRpb24ueSwgc193aW5kb3dQb3NpdGlv
bi54ICsgc193aW5kb3dTaXplLmN4LCBzX3dpbmRvd1Bvc2l0aW9uLnkgKyBzX3dpbmRvd1NpemUu
Y3kgfTsKLQotICAgIE1pbmlCcm93c2VyV2ViSG9zdCogd2ViSG9zdCA9IG51bGxwdHI7Ci0KLSAg
ICBJV2ViRG93bmxvYWREZWxlZ2F0ZVB0ciBkb3dubG9hZERlbGVnYXRlOwotICAgIGRvd25sb2Fk
RGVsZWdhdGUuQXR0YWNoKG5ldyBXZWJEb3dubG9hZERlbGVnYXRlKCkpOwotCi0gICAgZ01pbmlC
cm93c2VyID0gbmV3IE1pbmlCcm93c2VyKGhNYWluV25kLCBoVVJMQmFyV25kLCB1c2VzTGF5ZXJl
ZFdlYlZpZXcsIHBhZ2VMb2FkVGVzdGluZyk7Ci0gICAgaWYgKCFnTWluaUJyb3dzZXIpCi0gICAg
ICAgIGdvdG8gZXhpdDsKLQotICAgIGlmICghZ01pbmlCcm93c2VyLT5zZWVkSW5pdGlhbERlZmF1
bHRQcmVmZXJlbmNlcygpKQotICAgICAgICBnb3RvIGV4aXQ7CisgICAgSEFDQ0VMIGhBY2NlbFRh
YmxlID0gTG9hZEFjY2VsZXJhdG9ycyhoSW5zdGFuY2UsIE1BS0VJTlRSRVNPVVJDRShJRENfTUlO
SUJST1dTRVIpKTsKIAotICAgIGlmICghZ01pbmlCcm93c2VyLT5zZXRUb0RlZmF1bHRQcmVmZXJl
bmNlcygpKQotICAgICAgICBnb3RvIGV4aXQ7Ci0KLSAgICBIUkVTVUxUIGhyID0gZ01pbmlCcm93
c2VyLT5pbml0KCk7Ci0gICAgaWYgKEZBSUxFRChocikpCi0gICAgICAgIGdvdG8gZXhpdDsKLQot
ICAgIGlmICghc2V0Q2FjaGVGb2xkZXIoKSkKLSAgICAgICAgZ290byBleGl0OwotCi0gICAgd2Vi
SG9zdCA9IG5ldyBNaW5pQnJvd3NlcldlYkhvc3QoZ01pbmlCcm93c2VyLCBoVVJMQmFyV25kKTsK
LQotICAgIGhyID0gZ01pbmlCcm93c2VyLT5zZXRGcmFtZUxvYWREZWxlZ2F0ZSh3ZWJIb3N0KTsK
LSAgICBpZiAoRkFJTEVEKGhyKSkKLSAgICAgICAgZ290byBleGl0OwotCi0gICAgaHIgPSBnTWlu
aUJyb3dzZXItPnNldEZyYW1lTG9hZERlbGVnYXRlUHJpdmF0ZSh3ZWJIb3N0KTsKLSAgICBpZiAo
RkFJTEVEKGhyKSkKLSAgICAgICAgZ290byBleGl0OwotCi0gICAgaHIgPSBnTWluaUJyb3dzZXIt
PnNldFVJRGVsZWdhdGUobmV3IFByaW50V2ViVUlEZWxlZ2F0ZSgpKTsKLSAgICBpZiAoRkFJTEVE
IChocikpCi0gICAgICAgIGdvdG8gZXhpdDsKLQotICAgIGhyID0gZ01pbmlCcm93c2VyLT5zZXRB
Y2Nlc3NpYmlsaXR5RGVsZWdhdGUobmV3IEFjY2Vzc2liaWxpdHlEZWxlZ2F0ZSgpKTsKLSAgICBp
ZiAoRkFJTEVEIChocikpCi0gICAgICAgIGdvdG8gZXhpdDsKLQotICAgIGhyID0gZ01pbmlCcm93
c2VyLT5zZXRSZXNvdXJjZUxvYWREZWxlZ2F0ZShuZXcgUmVzb3VyY2VMb2FkRGVsZWdhdGUoZ01p
bmlCcm93c2VyKSk7Ci0gICAgaWYgKEZBSUxFRChocikpCi0gICAgICAgIGdvdG8gZXhpdDsKLQot
ICAgIGhyID0gZ01pbmlCcm93c2VyLT5zZXREb3dubG9hZERlbGVnYXRlKGRvd25sb2FkRGVsZWdh
dGUpOwotICAgIGlmIChGQUlMRUQoaHIpKQotICAgICAgICBnb3RvIGV4aXQ7Ci0KLSAgICBociA9
IGdNaW5pQnJvd3Nlci0+cHJlcGFyZVZpZXdzKGhNYWluV25kLCBjbGllbnRSZWN0LCByZXF1ZXN0
ZWRVUkwuR2V0QlNUUigpLCBnVmlld1dpbmRvdyk7Ci0gICAgaWYgKEZBSUxFRChocikgfHwgIWdW
aWV3V2luZG93KQotICAgICAgICBnb3RvIGV4aXQ7Ci0KLSAgICBpZiAoZ01pbmlCcm93c2VyLT51
c2VzTGF5ZXJlZFdlYlZpZXcoKSkKLSAgICAgICAgc3ViY2xhc3NGb3JMYXllcmVkV2luZG93KCk7
Ci0KLSAgICByZXNpemVTdWJWaWV3cygpOwotCi0gICAgU2hvd1dpbmRvdyhnVmlld1dpbmRvdywg
bkNtZFNob3cpOwotICAgIFVwZGF0ZVdpbmRvdyhnVmlld1dpbmRvdyk7Ci0KLSAgICBoQWNjZWxU
YWJsZSA9IExvYWRBY2NlbGVyYXRvcnMoaEluc3QsIE1BS0VJTlRSRVNPVVJDRShJRENfTUlOSUJS
T1dTRVIpKTsKLQotICAgIGlmIChyZXF1ZXN0ZWRVUkwubGVuZ3RoKCkpCi0gICAgICAgIGxvYWRV
UkwocmVxdWVzdGVkVVJMLkdldEJTVFIoKSk7CisgICAgZ0Jyb3dzZXJXaW5kb3cgPSBuZXcgQnJv
d3NlcldpbmRvdyhuQ21kU2hvdywgdXNlc0xheWVyZWRXZWJWaWV3LCBwYWdlTG9hZFRlc3Rpbmcs
IHJlcXVlc3RlZFVSTCwgdXNlV0syKTsKIAogI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6NDUwOSkK
IAogICAgIC8vIE1haW4gbWVzc2FnZSBsb29wOgorICAgIE1TRyBtc2cgPSB7IH07CiAgICAgX190
cnkgewotICAgICAgICBfY29tX3B0cl90PF9jb21fSUlJRDxJV2ViS2l0TWVzc2FnZUxvb3AsICZf
X3V1aWRvZihJV2ViS2l0TWVzc2FnZUxvb3ApPj4gbWVzc2FnZUxvb3A7Ci0KLSAgICAgICAgaHIg
PSBXZWJLaXRDcmVhdGVJbnN0YW5jZShDTFNJRF9XZWJLaXRNZXNzYWdlTG9vcCwgMCwgSUlEX0lX
ZWJLaXRNZXNzYWdlTG9vcCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZtZXNzYWdlTG9vcC5H
ZXRJbnRlcmZhY2VQdHIoKSkpOwotICAgICAgICBpZiAoRkFJTEVEKGhyKSkKLSAgICAgICAgICAg
IGdvdG8gZXhpdDsKLQotICAgICAgICBtZXNzYWdlTG9vcC0+cnVuKGhBY2NlbFRhYmxlKTsKLQor
ICAgICAgICB3aGlsZSAoR2V0TWVzc2FnZSgmbXNnLCAwLCAwLCAwKSkgeworI2lmIFVTRShDRikK
KyAgICAgICAgICAgIENGUnVuTG9vcFJ1bkluTW9kZShrQ0ZSdW5Mb29wRGVmYXVsdE1vZGUsIDAs
IHRydWUpOworI2VuZGlmCisgICAgICAgICAgICBpZiAoIVRyYW5zbGF0ZUFjY2VsZXJhdG9yKG1z
Zy5od25kLCBoQWNjZWxUYWJsZSwgJm1zZykpIHsKKyAgICAgICAgICAgICAgICBUcmFuc2xhdGVN
ZXNzYWdlKCZtc2cpOworICAgICAgICAgICAgICAgIERpc3BhdGNoTWVzc2FnZSgmbXNnKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0gX19leGNlcHQoY3JlYXRlQ3Jhc2hSZXBvcnQo
R2V0RXhjZXB0aW9uSW5mb3JtYXRpb24oKSksIEVYQ0VQVElPTl9FWEVDVVRFX0hBTkRMRVIpIHsg
fQogCi1leGl0OgogICAgIHNodXREb3duV2ViS2l0KCk7CiAjaWZkZWYgX0NSVERCR19NQVBfQUxM
T0MKICAgICBfQ3J0RHVtcE1lbW9yeUxlYWtzKCk7CiAjZW5kaWYKIAorICAgIGRlbGV0ZSBnQnJv
d3NlcldpbmRvdzsKKwogICAgIC8vIFNodXQgZG93biBDT00uCiAgICAgT2xlVW5pbml0aWFsaXpl
KCk7CiAKLSAgICBkZWxldGUgZ01pbmlCcm93c2VyOwotICAgIAogICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxpbnQ+KG1zZy53UGFyYW0pOwogfQogCi1BVE9NIE15UmVnaXN0ZXJDbGFzcyhISU5TVEFO
Q0UgaEluc3RhbmNlKQorZXh0ZXJuICJDIiBfX2RlY2xzcGVjKGRsbGV4cG9ydCkgaW50IFdJTkFQ
SSBkbGxMYXVuY2hlckVudHJ5UG9pbnQoSElOU1RBTkNFIGhJbnN0YW5jZSwgSElOU1RBTkNFIGhQ
cmV2SW5zdGFuY2UsIExQV1NUUiBscHN0ckNtZExpbmUsIGludCBuQ21kU2hvdykKIHsKLSAgICBX
TkRDTEFTU0VYIHdjZXg7Ci0KLSAgICB3Y2V4LmNiU2l6ZSA9IHNpemVvZihXTkRDTEFTU0VYKTsK
LQotICAgIHdjZXguc3R5bGUgICAgICAgICAgPSBDU19IUkVEUkFXIHwgQ1NfVlJFRFJBVzsKLSAg
ICB3Y2V4LmxwZm5XbmRQcm9jICAgID0gV25kUHJvYzsKLSAgICB3Y2V4LmNiQ2xzRXh0cmEgICAg
ID0gMDsKLSAgICB3Y2V4LmNiV25kRXh0cmEgICAgID0gMDsKLSAgICB3Y2V4LmhJbnN0YW5jZSAg
ICAgID0gaEluc3RhbmNlOwotICAgIHdjZXguaEljb24gICAgICAgICAgPSBMb2FkSWNvbihoSW5z
dGFuY2UsIE1BS0VJTlRSRVNPVVJDRShJRElfTUlOSUJST1dTRVIpKTsKLSAgICB3Y2V4LmhDdXJz
b3IgICAgICAgID0gTG9hZEN1cnNvcigwLCBJRENfQVJST1cpOwotICAgIHdjZXguaGJyQmFja2dy
b3VuZCAgPSAwOwotICAgIHdjZXgubHBzek1lbnVOYW1lICAgPSBNQUtFSU5UUkVTT1VSQ0UoSURD
X01JTklCUk9XU0VSKTsKLSAgICB3Y2V4Lmxwc3pDbGFzc05hbWUgID0gc3pXaW5kb3dDbGFzczsK
LSAgICB3Y2V4LmhJY29uU20gICAgICAgID0gTG9hZEljb24od2NleC5oSW5zdGFuY2UsIE1BS0VJ
TlRSRVNPVVJDRShJRElfU01BTEwpKTsKLQotICAgIHJldHVybiBSZWdpc3RlckNsYXNzRXgoJndj
ZXgpOworICAgIHJldHVybiB3V2luTWFpbihoSW5zdGFuY2UsIGhQcmV2SW5zdGFuY2UsIGxwc3Ry
Q21kTGluZSwgbkNtZFNob3cpOwogfQo=
</data>
<flag name="review"
          id="356906"
          type_id="1"
          status="-"
          setter="fujii"
    />
          </attachment>
      

    </bug>

</bugzilla>