<?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>123470</bug_id>
          
          <creation_ts>2013-10-29 14:33:38 -0700</creation_ts>
          <short_desc>[iOS] Upstream Source/WebKit/ios/</short_desc>
          <delta_ts>2013-10-30 16:51:08 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Andy Estes">aestes</reporter>
          <assigned_to name="Andy Estes">aestes</assigned_to>
          <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>japhet</cc>
    
    <cc>mkwst</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>944612</commentid>
    <comment_count>0</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2013-10-29 14:33:38 -0700</bug_when>
    <thetext>[iOS] Upstream Source/WebKit/ios/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>945137</commentid>
    <comment_count>1</comment_count>
      <attachid>215556</attachid>
    <who name="Andy Estes">aestes</who>
    <bug_when>2013-10-30 13:02:10 -0700</bug_when>
    <thetext>Created attachment 215556
[iOS] Upstream Source/WebKit/ios/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>945140</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-10-30 13:04:14 -0700</bug_when>
    <thetext>Attachment 215556 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit/ChangeLog&apos;, u&apos;Source/WebKit/WebKit.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebKit/ios/ChangeLog&apos;, u&apos;Source/WebKit/ios/DefaultDelegates/WebDefaultFormDelegate.h&apos;, u&apos;Source/WebKit/ios/DefaultDelegates/WebDefaultFormDelegate.m&apos;, u&apos;Source/WebKit/ios/DefaultDelegates/WebDefaultFrameLoadDelegate.h&apos;, u&apos;Source/WebKit/ios/DefaultDelegates/WebDefaultFrameLoadDelegate.m&apos;, u&apos;Source/WebKit/ios/DefaultDelegates/WebDefaultResourceLoadDelegate.h&apos;, u&apos;Source/WebKit/ios/DefaultDelegates/WebDefaultResourceLoadDelegate.m&apos;, u&apos;Source/WebKit/ios/DefaultDelegates/WebDefaultUIKitDelegate.h&apos;, u&apos;Source/WebKit/ios/DefaultDelegates/WebDefaultUIKitDelegate.m&apos;, u&apos;Source/WebKit/ios/Misc/EmojiFallbackFontSelector.cpp&apos;, u&apos;Source/WebKit/ios/Misc/EmojiFallbackFontSelector.h&apos;, u&apos;Source/WebKit/ios/Misc/MemoryMeasure.h&apos;, u&apos;Source/WebKit/ios/Misc/MemoryMeasure.mm&apos;, u&apos;Source/WebKit/ios/Misc/WebGeolocationCoreLocationProvider.h&apos;, u&apos;Source/WebKit/ios/Misc/WebGeolocationCoreLocationProvider.mm&apos;, u&apos;Source/WebKit/ios/Misc/WebGeolocationProviderIOS.h&apos;, u&apos;Source/WebKit/ios/Misc/WebGeolocationProviderIOS.mm&apos;, u&apos;Source/WebKit/ios/Misc/WebNSStringDrawing.h&apos;, u&apos;Source/WebKit/ios/Misc/WebNSStringDrawing.mm&apos;, u&apos;Source/WebKit/ios/Misc/WebNSStringExtrasIOS.h&apos;, u&apos;Source/WebKit/ios/Misc/WebNSStringExtrasIOS.m&apos;, u&apos;Source/WebKit/ios/Misc/WebNSStringExtrasIPhone.h&apos;, u&apos;Source/WebKit/ios/Misc/WebUIKitSupport.h&apos;, u&apos;Source/WebKit/ios/Misc/WebUIKitSupport.mm&apos;, u&apos;Source/WebKit/ios/Storage/WebSQLiteDatabaseTrackerClient.h&apos;, u&apos;Source/WebKit/ios/Storage/WebSQLiteDatabaseTrackerClient.mm&apos;, u&apos;Source/WebKit/ios/WebCoreSupport/PopupMenuIOS.h&apos;, u&apos;Source/WebKit/ios/WebCoreSupport/PopupMenuIOS.mm&apos;, u&apos;Source/WebKit/ios/WebCoreSupport/SearchPopupMenuIOS.cpp&apos;, u&apos;Source/WebKit/ios/WebCoreSupport/SearchPopupMenuIOS.h&apos;, u&apos;Source/WebKit/ios/WebCoreSupport/WebCaretChangeListener.h&apos;, u&apos;Source/WebKit/ios/WebCoreSupport/WebChromeClientIOS.h&apos;, u&apos;Source/WebKit/ios/WebCoreSupport/WebChromeClientIOS.mm&apos;, u&apos;Source/WebKit/ios/WebCoreSupport/WebFixedPositionContent.h&apos;, u&apos;Source/WebKit/ios/WebCoreSupport/WebFixedPositionContent.mm&apos;, u&apos;Source/WebKit/ios/WebCoreSupport/WebFixedPositionContentInternal.h&apos;, u&apos;Source/WebKit/ios/WebCoreSupport/WebFrameIOS.h&apos;, u&apos;Source/WebKit/ios/WebCoreSupport/WebFrameIOS.mm&apos;, u&apos;Source/WebKit/ios/WebCoreSupport/WebFrameIPhone.h&apos;, u&apos;Source/WebKit/ios/WebCoreSupport/WebGeolocation.mm&apos;, u&apos;Source/WebKit/ios/WebCoreSupport/WebGeolocationInternal.h&apos;, u&apos;Source/WebKit/ios/WebCoreSupport/WebGeolocationPrivate.h&apos;, u&apos;Source/WebKit/ios/WebCoreSupport/WebMIMETypeRegistry.h&apos;, u&apos;Source/WebKit/ios/WebCoreSupport/WebMIMETypeRegistry.mm&apos;, u&apos;Source/WebKit/ios/WebCoreSupport/WebSelectionRect.h&apos;, u&apos;Source/WebKit/ios/WebCoreSupport/WebSelectionRect.m&apos;, u&apos;Source/WebKit/ios/WebCoreSupport/WebVisiblePosition.h&apos;, u&apos;Source/WebKit/ios/WebCoreSupport/WebVisiblePosition.mm&apos;, u&apos;Source/WebKit/ios/WebCoreSupport/WebVisiblePositionInternal.h&apos;, u&apos;Source/WebKit/ios/WebKit.iOS.exp&apos;, u&apos;Source/WebKit/ios/WebView/WebFrameViewWAKCompatibility.m&apos;, u&apos;Source/WebKit/ios/WebView/WebMailDelegate.h&apos;, u&apos;Source/WebKit/ios/WebView/WebPDFViewIOS.h&apos;, u&apos;Source/WebKit/ios/WebView/WebPDFViewIOS.mm&apos;, u&apos;Source/WebKit/ios/WebView/WebPDFViewIPhone.h&apos;, u&apos;Source/WebKit/ios/WebView/WebPDFViewPlaceholder.h&apos;, u&apos;Source/WebKit/ios/WebView/WebPDFViewPlaceholder.mm&apos;, u&apos;Source/WebKit/ios/WebView/WebPlainWhiteView.h&apos;, u&apos;Source/WebKit/ios/WebView/WebPlainWhiteView.mm&apos;, u&apos;Source/WebKit/ios/WebView/WebUIKitDelegate.h&apos;, u&apos;Source/WebKit/mac/ChangeLog&apos;, u&apos;Source/WebKit/mac/Configurations/WebKit.xcconfig&apos;]&quot; exit_code: 1
Source/WebKit/ios/Misc/EmojiFallbackFontSelector.cpp:26:  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]
Source/WebKit/ios/WebCoreSupport/SearchPopupMenuIOS.cpp:20:  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]
Total errors found: 2 in 64 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>945146</commentid>
    <comment_count>3</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2013-10-30 13:19:46 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Attachment 215556 [details] did not pass style-queue:
&gt; Source/WebKit/ios/Misc/EmojiFallbackFontSelector.cpp:26:  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]
&gt; Source/WebKit/ios/WebCoreSupport/SearchPopupMenuIOS.cpp:20:  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]
&gt; Total errors found: 2 in 64 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against check-webkit-style.

Pretty sure this is &lt;https://bugs.webkit.org/show_bug.cgi?id=48639&gt;. WebKit doesn&apos;t have config.h.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>945148</commentid>
    <comment_count>4</comment_count>
      <attachid>215556</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-10-30 13:22:42 -0700</bug_when>
    <thetext>Comment on attachment 215556
[iOS] Upstream Source/WebKit/ios/

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>945157</commentid>
    <comment_count>5</comment_count>
      <attachid>215556</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-10-30 13:33:23 -0700</bug_when>
    <thetext>Comment on attachment 215556
[iOS] Upstream Source/WebKit/ios/

Attachment 215556 did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-queues.appspot.com/results/17058276</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>945205</commentid>
    <comment_count>6</comment_count>
      <attachid>215556</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-10-30 15:26:15 -0700</bug_when>
    <thetext>Comment on attachment 215556
[iOS] Upstream Source/WebKit/ios/

Attachment 215556 did not pass mac-ews (mac):
Output: http://webkit-queues.appspot.com/results/17108319</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>945221</commentid>
    <comment_count>7</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2013-10-30 16:30:44 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 215556 [details])
&gt; Attachment 215556 [details] did not pass mac-ews (mac):
&gt; Output: http://webkit-queues.appspot.com/results/17108319

Oops, I missed a few #if PLATFORM(IOS) guards around the new files. I&apos;ll add them before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>945236</commentid>
    <comment_count>8</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2013-10-30 16:51:08 -0700</bug_when>
    <thetext>Committed r158327: &lt;http://trac.webkit.org/changeset/158327&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>215556</attachid>
            <date>2013-10-30 13:02:10 -0700</date>
            <delta_ts>2013-10-30 15:26:15 -0700</delta_ts>
            <desc>[iOS] Upstream Source/WebKit/ios/</desc>
            <filename>bug-123470-20131030130209.patch</filename>
            <type>text/plain</type>
            <size>412828</size>
            <attacher name="Andy Estes">aestes</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU4MzAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGNhMTE4MmJlYjg2N2Y0NTI0
Y2E0MzdjZmI0YjIxMDkyNTFjZmVhMmMuLjc3MmU2ZTRlMTYzMzNmOTE4ZmNmNzZiNjdhYTEzOGEw
ZTRmYmJkOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTMtMTAtMjkgIEFuZHkgRXN0
ZXMgIDxhZXN0ZXNAYXBwbGUuY29tPgorCisgICAgICAgIFtpT1NdIFVwc3RyZWFtIFNvdXJjZS9X
ZWJLaXQvaW9zLworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTIzNDcwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKwogMjAxMy0xMC0zMCAgQWxl
eCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIFtXaW5k
b3dzXSBVbnJldmlld2VkIGJ1aWxkIGZpeC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvaW9z
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvaW9zL0NoYW5nZUxvZwppbmRleCA3YjY3NDIxMTY4
Y2EzODJmYjBjZDQ1MGM4MTUwNjZkMzc2ZGJiNDkxLi44ZDUwM2Y5NzlkNzJmZDBkMDhkMWE1NmFi
ZDFkYzFiMzIxMmMxYzg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2lvcy9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdC9pb3MvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzAgQEAKKzIwMTMt
MTAtMjkgIEFuZHkgRXN0ZXMgIDxhZXN0ZXNAYXBwbGUuY29tPgorCisgICAgICAgIFtpT1NdIFVw
c3RyZWFtIFNvdXJjZS9XZWJLaXQvaW9zLworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTIzNDcwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBEZWZhdWx0RGVsZWdhdGVzL1dlYkRlZmF1bHRGb3JtRGVsZWdh
dGUuaDogQWRkZWQuCisgICAgICAgICogRGVmYXVsdERlbGVnYXRlcy9XZWJEZWZhdWx0Rm9ybURl
bGVnYXRlLm06IEFkZGVkLgorICAgICAgICAqIERlZmF1bHREZWxlZ2F0ZXMvV2ViRGVmYXVsdEZy
YW1lTG9hZERlbGVnYXRlLmg6IEFkZGVkLgorICAgICAgICAqIERlZmF1bHREZWxlZ2F0ZXMvV2Vi
RGVmYXVsdEZyYW1lTG9hZERlbGVnYXRlLm06IEFkZGVkLgorICAgICAgICAqIERlZmF1bHREZWxl
Z2F0ZXMvV2ViRGVmYXVsdFJlc291cmNlTG9hZERlbGVnYXRlLmg6IEFkZGVkLgorICAgICAgICAq
IERlZmF1bHREZWxlZ2F0ZXMvV2ViRGVmYXVsdFJlc291cmNlTG9hZERlbGVnYXRlLm06IEFkZGVk
LgorICAgICAgICAqIERlZmF1bHREZWxlZ2F0ZXMvV2ViRGVmYXVsdFVJS2l0RGVsZWdhdGUuaDog
QWRkZWQuCisgICAgICAgICogRGVmYXVsdERlbGVnYXRlcy9XZWJEZWZhdWx0VUlLaXREZWxlZ2F0
ZS5tOiBBZGRlZC4KKyAgICAgICAgKiBNaXNjL0Vtb2ppRmFsbGJhY2tGb250U2VsZWN0b3IuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKiBNaXNjL0Vtb2ppRmFsbGJhY2tGb250U2VsZWN0b3IuaDogQWRk
ZWQuCisgICAgICAgICogTWlzYy9NZW1vcnlNZWFzdXJlLmg6IEFkZGVkLgorICAgICAgICAqIE1p
c2MvTWVtb3J5TWVhc3VyZS5tbTogQWRkZWQuCisgICAgICAgICogTWlzYy9XZWJHZW9sb2NhdGlv
bkNvcmVMb2NhdGlvblByb3ZpZGVyLmg6IEFkZGVkLgorICAgICAgICAqIE1pc2MvV2ViR2VvbG9j
YXRpb25Db3JlTG9jYXRpb25Qcm92aWRlci5tbTogQWRkZWQuCisgICAgICAgICogTWlzYy9XZWJH
ZW9sb2NhdGlvblByb3ZpZGVySU9TLmg6IEFkZGVkLgorICAgICAgICAqIE1pc2MvV2ViR2VvbG9j
YXRpb25Qcm92aWRlcklPUy5tbTogQWRkZWQuCisgICAgICAgICogTWlzYy9XZWJOU1N0cmluZ0Ry
YXdpbmcuaDogQWRkZWQuCisgICAgICAgICogTWlzYy9XZWJOU1N0cmluZ0RyYXdpbmcubW06IEFk
ZGVkLgorICAgICAgICAqIE1pc2MvV2ViTlNTdHJpbmdFeHRyYXNJT1MuaDogQWRkZWQuCisgICAg
ICAgICogTWlzYy9XZWJOU1N0cmluZ0V4dHJhc0lPUy5tOiBBZGRlZC4KKyAgICAgICAgKiBNaXNj
L1dlYk5TU3RyaW5nRXh0cmFzSVBob25lLmg6IEFkZGVkLgorICAgICAgICAqIE1pc2MvV2ViVUlL
aXRTdXBwb3J0Lmg6IEFkZGVkLgorICAgICAgICAqIE1pc2MvV2ViVUlLaXRTdXBwb3J0Lm1tOiBB
ZGRlZC4KKyAgICAgICAgKiBTdG9yYWdlL1dlYlNRTGl0ZURhdGFiYXNlVHJhY2tlckNsaWVudC5o
OiBBZGRlZC4KKyAgICAgICAgKiBTdG9yYWdlL1dlYlNRTGl0ZURhdGFiYXNlVHJhY2tlckNsaWVu
dC5tbTogQWRkZWQuCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvUG9wdXBNZW51SU9TLmg6IEFk
ZGVkLgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BvcHVwTWVudUlPUy5tbTogQWRkZWQuCisg
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvU2VhcmNoUG9wdXBNZW51SU9TLmNwcDogQWRkZWQuCisg
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvU2VhcmNoUG9wdXBNZW51SU9TLmg6IEFkZGVkLgorICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkNhcmV0Q2hhbmdlTGlzdGVuZXIuaDogQWRkZWQuCisg
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50SU9TLmg6IEFkZGVkLgorICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudElPUy5tbTogQWRkZWQuCisgICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRml4ZWRQb3NpdGlvbkNvbnRlbnQuaDogQWRkZWQuCisg
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRml4ZWRQb3NpdGlvbkNvbnRlbnQubW06IEFkZGVk
LgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkZpeGVkUG9zaXRpb25Db250ZW50SW50ZXJu
YWwuaDogQWRkZWQuCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVJT1MuaDogQWRk
ZWQuCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVJT1MubW06IEFkZGVkLgorICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkZyYW1lSVBob25lLmg6IEFkZGVkLgorICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L1dlYkdlb2xvY2F0aW9uLm1tOiBBZGRlZC4KKyAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9XZWJHZW9sb2NhdGlvbkludGVybmFsLmg6IEFkZGVkLgorICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L1dlYkdlb2xvY2F0aW9uUHJpdmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9XZWJNSU1FVHlwZVJlZ2lzdHJ5Lmg6IEFkZGVkLgorICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L1dlYk1JTUVUeXBlUmVnaXN0cnkubW06IEFkZGVkLgorICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L1dlYlNlbGVjdGlvblJlY3QuaDogQWRkZWQuCisgICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvV2ViU2VsZWN0aW9uUmVjdC5tOiBBZGRlZC4KKyAgICAgICAgKiBXZWJDb3JlU3Vw
cG9ydC9XZWJWaXNpYmxlUG9zaXRpb24uaDogQWRkZWQuCisgICAgICAgICogV2ViQ29yZVN1cHBv
cnQvV2ViVmlzaWJsZVBvc2l0aW9uLm1tOiBBZGRlZC4KKyAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9XZWJWaXNpYmxlUG9zaXRpb25JbnRlcm5hbC5oOiBBZGRlZC4KKyAgICAgICAgKiBXZWJLaXQu
aU9TLmV4cDogQWRkZWQuCisgICAgICAgICogV2ViVmlldy9XZWJGcmFtZVZpZXdXQUtDb21wYXRp
YmlsaXR5Lm06IEFkZGVkLgorICAgICAgICAqIFdlYlZpZXcvV2ViTWFpbERlbGVnYXRlLmg6IEFk
ZGVkLgorICAgICAgICAqIFdlYlZpZXcvV2ViUERGVmlld0lPUy5oOiBBZGRlZC4KKyAgICAgICAg
KiBXZWJWaWV3L1dlYlBERlZpZXdJT1MubW06IEFkZGVkLgorICAgICAgICAqIFdlYlZpZXcvV2Vi
UERGVmlld0lQaG9uZS5oOiBBZGRlZC4KKyAgICAgICAgKiBXZWJWaWV3L1dlYlBERlZpZXdQbGFj
ZWhvbGRlci5oOiBBZGRlZC4KKyAgICAgICAgKiBXZWJWaWV3L1dlYlBERlZpZXdQbGFjZWhvbGRl
ci5tbTogQWRkZWQuCisgICAgICAgICogV2ViVmlldy9XZWJQbGFpbldoaXRlVmlldy5oOiBBZGRl
ZC4KKyAgICAgICAgKiBXZWJWaWV3L1dlYlBsYWluV2hpdGVWaWV3Lm1tOiBBZGRlZC4KKyAgICAg
ICAgKiBXZWJWaWV3L1dlYlVJS2l0RGVsZWdhdGUuaDogQWRkZWQuCisKIDIwMTMtMTAtMjUgIEpv
c2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBVcHN0cmVhbSBF
TkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikgYW5kIGVuYWJsZSBvbiBpT1MgYW5kIE1hYwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9tYWMvQ2hh
bmdlTG9nCmluZGV4IDRhNTQ5YzA4MDVlMzdjOGNlMDFjZWJlYTkyZDMyMTU3YmRjZDI0YTMuLmRk
YzRmNGZjYzA5MmVhZjBlYzQzN2Y4Yzg2ODkxN2UwYzgwMmRiMzQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxMiBAQAorMjAxMy0xMC0yOSAgQW5keSBFc3RlcyAgPGFlc3Rlc0BhcHBsZS5j
b20+CisKKyAgICAgICAgW2lPU10gVXBzdHJlYW0gU291cmNlL1dlYktpdC9pb3MvCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjM0NzAKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIENvbmZpZ3VyYXRpb25z
L1dlYktpdC54Y2NvbmZpZzogRXhjbHVkZWQgc29tZSBpT1MgZmlsZXMgZnJvbSB0aGUgTWFjIGJ1
aWxkLgorCiAyMDEzLTEwLTI5ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgog
CiAgICAgICAgIFJlc3VsdCBvZiBmb2N1cy1vcHRpb24tY29udHJvbC1vbi1wYWdlLmh0bWwgZGVw
ZW5kcyBvbiBzeXN0ZW0gcHJlZmVyZW5jZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
S2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDBiOWNlNzU1YTM4YWUyYzBkMGU5OWIyMmM0OWZk
ODIxYzEwOGUzNDYuLmUxZDc1MWI0NGFiNDY2MTMzYzQ3ODQ0NWEyN2FlMDNhMzRhMWU2MzggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
KysrIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAt
MzE1LDE0ICszMTUsNzYgQEAKIAkJOTNFQjE3OEQwOUY4OEQ0NjAwOTFGOEZGIC8qIFdlYlN5c3Rl
bUludGVyZmFjZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDkzRUIxNzhDMDlGODhENDYwMDkxRjhGRiAvKiBXZWJTeXN0ZW1JbnRlcmZhY2UubW0gKi87
IH07CiAJCTkzRUIxNzhGMDlGODhENTEwMDkxRjhGRiAvKiBXZWJTeXN0ZW1JbnRlcmZhY2UuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRUIxNzhFMDlG
ODhENTEwMDkxRjhGRiAvKiBXZWJTeXN0ZW1JbnRlcmZhY2UuaCAqLzsgfTsKIAkJOTNGREU5MzMw
RDc5Q0FGMzAwNzRGMDI5IC8qIFdlYkhpc3RvcnlJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNGREU5MzIwRDc5Q0FGMzAwNzRGMDI5IC8q
IFdlYkhpc3RvcnlJbnRlcm5hbC5oICovOyB9OworCQlBMTBDMUQxODE4MjAyRjlDMDAzNjg4M0Eg
LyogV2ViRGVmYXVsdEZvcm1EZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTEwQzFEMTAxODIwMkY5QzAwMzY4ODNBIC8qIFdlYkRlZmF1bHRG
b3JtRGVsZWdhdGUuaCAqLzsgfTsKKwkJQTEwQzFEMTkxODIwMkY5QzAwMzY4ODNBIC8qIFdlYkRl
ZmF1bHRGb3JtRGVsZWdhdGUubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEExMEMxRDExMTgyMDJGOUMwMDM2ODgzQSAvKiBXZWJEZWZhdWx0Rm9ybURlbGVn
YXRlLm0gKi87IH07CisJCUExMEMxRDFBMTgyMDJGOUMwMDM2ODgzQSAvKiBXZWJEZWZhdWx0RnJh
bWVMb2FkRGVsZWdhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEExMEMxRDEyMTgyMDJGOUMwMDM2ODgzQSAvKiBXZWJEZWZhdWx0RnJhbWVMb2FkRGVs
ZWdhdGUuaCAqLzsgfTsKKwkJQTEwQzFEMUIxODIwMkY5QzAwMzY4ODNBIC8qIFdlYkRlZmF1bHRG
cmFtZUxvYWREZWxlZ2F0ZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTEwQzFEMTMxODIwMkY5QzAwMzY4ODNBIC8qIFdlYkRlZmF1bHRGcmFtZUxvYWRE
ZWxlZ2F0ZS5tICovOyB9OworCQlBMTBDMUQxQzE4MjAyRjlDMDAzNjg4M0EgLyogV2ViRGVmYXVs
dFJlc291cmNlTG9hZERlbGVnYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBMTBDMUQxNDE4MjAyRjlDMDAzNjg4M0EgLyogV2ViRGVmYXVsdFJlc291
cmNlTG9hZERlbGVnYXRlLmggKi87IH07CisJCUExMEMxRDFEMTgyMDJGOUMwMDM2ODgzQSAvKiBX
ZWJEZWZhdWx0UmVzb3VyY2VMb2FkRGVsZWdhdGUubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExMEMxRDE1MTgyMDJGOUMwMDM2ODgzQSAvKiBXZWJEZWZh
dWx0UmVzb3VyY2VMb2FkRGVsZWdhdGUubSAqLzsgfTsKKwkJQTEwQzFEMUUxODIwMkY5QzAwMzY4
ODNBIC8qIFdlYkRlZmF1bHRVSUtpdERlbGVnYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTBDMUQxNjE4MjAyRjlDMDAzNjg4M0EgLyogV2ViRGVm
YXVsdFVJS2l0RGVsZWdhdGUuaCAqLzsgfTsKKwkJQTEwQzFEMUYxODIwMkY5QzAwMzY4ODNBIC8q
IFdlYkRlZmF1bHRVSUtpdERlbGVnYXRlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBMTBDMUQxNzE4MjAyRjlDMDAzNjg4M0EgLyogV2ViRGVmYXVsdFVJ
S2l0RGVsZWdhdGUubSAqLzsgfTsKKwkJQTEwQzFEMzAxODIwMkZDNTAwMzY4ODNBIC8qIEVtb2pp
RmFsbGJhY2tGb250U2VsZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTEwQzFEMjExODIwMkZDNTAwMzY4ODNBIC8qIEVtb2ppRmFsbGJhY2tG
b250U2VsZWN0b3IuY3BwICovOyB9OworCQlBMTBDMUQzMTE4MjAyRkM1MDAzNjg4M0EgLyogRW1v
amlGYWxsYmFja0ZvbnRTZWxlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTEwQzFEMjIxODIwMkZDNTAwMzY4ODNBIC8qIEVtb2ppRmFsbGJhY2tG
b250U2VsZWN0b3IuaCAqLzsgfTsKKwkJQTEwQzFEMzIxODIwMkZDNTAwMzY4ODNBIC8qIE1lbW9y
eU1lYXN1cmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEExMEMxRDIzMTgyMDJGQzUwMDM2ODgzQSAvKiBNZW1vcnlNZWFzdXJlLmggKi87IH07CisJCUEx
MEMxRDMzMTgyMDJGQzUwMDM2ODgzQSAvKiBNZW1vcnlNZWFzdXJlLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTEwQzFEMjQxODIwMkZDNTAwMzY4ODNB
IC8qIE1lbW9yeU1lYXN1cmUubW0gKi87IH07CisJCUExMEMxRDM0MTgyMDJGQzUwMDM2ODgzQSAv
KiBXZWJHZW9sb2NhdGlvbkNvcmVMb2NhdGlvblByb3ZpZGVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTBDMUQyNTE4MjAyRkM1MDAzNjg4M0EgLyog
V2ViR2VvbG9jYXRpb25Db3JlTG9jYXRpb25Qcm92aWRlci5oICovOyB9OworCQlBMTBDMUQzNTE4
MjAyRkM1MDAzNjg4M0EgLyogV2ViR2VvbG9jYXRpb25Db3JlTG9jYXRpb25Qcm92aWRlci5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExMEMxRDI2MTgy
MDJGQzUwMDM2ODgzQSAvKiBXZWJHZW9sb2NhdGlvbkNvcmVMb2NhdGlvblByb3ZpZGVyLm1tICov
OyB9OworCQlBMTBDMUQzNjE4MjAyRkM1MDAzNjg4M0EgLyogV2ViR2VvbG9jYXRpb25Qcm92aWRl
cklPUy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTEw
QzFEMjcxODIwMkZDNTAwMzY4ODNBIC8qIFdlYkdlb2xvY2F0aW9uUHJvdmlkZXJJT1MuaCAqLzsg
fTsKKwkJQTEwQzFEMzcxODIwMkZDNTAwMzY4ODNBIC8qIFdlYkdlb2xvY2F0aW9uUHJvdmlkZXJJ
T1MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTBD
MUQyODE4MjAyRkM1MDAzNjg4M0EgLyogV2ViR2VvbG9jYXRpb25Qcm92aWRlcklPUy5tbSAqLzsg
fTsKKwkJQTEwQzFEMzgxODIwMkZDNTAwMzY4ODNBIC8qIFdlYk5TU3RyaW5nRHJhd2luZy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTEwQzFEMjkxODIw
MkZDNTAwMzY4ODNBIC8qIFdlYk5TU3RyaW5nRHJhd2luZy5oICovOyB9OworCQlBMTBDMUQzOTE4
MjAyRkM1MDAzNjg4M0EgLyogV2ViTlNTdHJpbmdEcmF3aW5nLm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTEwQzFEMkExODIwMkZDNTAwMzY4ODNBIC8q
IFdlYk5TU3RyaW5nRHJhd2luZy5tbSAqLzsgfTsKKwkJQTEwQzFEM0ExODIwMkZDNTAwMzY4ODNB
IC8qIFdlYk5TU3RyaW5nRXh0cmFzSU9TLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBMTBDMUQyQjE4MjAyRkM1MDAzNjg4M0EgLyogV2ViTlNTdHJpbmdF
eHRyYXNJT1MuaCAqLzsgfTsKKwkJQTEwQzFEM0IxODIwMkZDNTAwMzY4ODNBIC8qIFdlYk5TU3Ry
aW5nRXh0cmFzSU9TLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBMTBDMUQyQzE4MjAyRkM1MDAzNjg4M0EgLyogV2ViTlNTdHJpbmdFeHRyYXNJT1MubSAq
LzsgfTsKKwkJQTEwQzFEM0MxODIwMkZDNTAwMzY4ODNBIC8qIFdlYk5TU3RyaW5nRXh0cmFzSVBo
b25lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTBD
MUQyRDE4MjAyRkM1MDAzNjg4M0EgLyogV2ViTlNTdHJpbmdFeHRyYXNJUGhvbmUuaCAqLzsgfTsK
KwkJQTEwQzFEM0QxODIwMkZDNTAwMzY4ODNBIC8qIFdlYlVJS2l0U3VwcG9ydC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTEwQzFEMkUxODIwMkZDNTAw
MzY4ODNBIC8qIFdlYlVJS2l0U3VwcG9ydC5oICovOyB9OworCQlBMTBDMUQzRTE4MjAyRkM1MDAz
Njg4M0EgLyogV2ViVUlLaXRTdXBwb3J0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTEwQzFEMkYxODIwMkZDNTAwMzY4ODNBIC8qIFdlYlVJS2l0U3Vw
cG9ydC5tbSAqLzsgfTsKKwkJQTEwQzFENDIxODIwMkZFRjAwMzY4ODNBIC8qIFdlYlNRTGl0ZURh
dGFiYXNlVHJhY2tlckNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTEwQzFENDAxODIwMkZFRjAwMzY4ODNBIC8qIFdlYlNRTGl0ZURhdGFiYXNl
VHJhY2tlckNsaWVudC5oICovOyB9OworCQlBMTBDMUQ0MzE4MjAyRkVGMDAzNjg4M0EgLyogV2Vi
U1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTEwQzFENDExODIwMkZFRjAwMzY4ODNBIC8qIFdlYlNRTGl0
ZURhdGFiYXNlVHJhY2tlckNsaWVudC5tbSAqLzsgfTsKKwkJQTEwQzFENUYxODIwMzAwRTAwMzY4
ODNBIC8qIFBvcHVwTWVudUlPUy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTEwQzFENDUxODIwMzAwRTAwMzY4ODNBIC8qIFBvcHVwTWVudUlPUy5oICov
OyB9OworCQlBMTBDMUQ2MDE4MjAzMDBFMDAzNjg4M0EgLyogUG9wdXBNZW51SU9TLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTEwQzFENDYxODIwMzAw
RTAwMzY4ODNBIC8qIFBvcHVwTWVudUlPUy5tbSAqLzsgfTsKKwkJQTEwQzFENjExODIwMzAwRTAw
MzY4ODNBIC8qIFNlYXJjaFBvcHVwTWVudUlPUy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTBDMUQ0NzE4MjAzMDBFMDAzNjg4M0EgLyogU2VhcmNo
UG9wdXBNZW51SU9TLmNwcCAqLzsgfTsKKwkJQTEwQzFENjIxODIwMzAwRTAwMzY4ODNBIC8qIFNl
YXJjaFBvcHVwTWVudUlPUy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTEwQzFENDgxODIwMzAwRTAwMzY4ODNBIC8qIFNlYXJjaFBvcHVwTWVudUlPUy5o
ICovOyB9OworCQlBMTBDMUQ2MzE4MjAzMDBFMDAzNjg4M0EgLyogV2ViQ2FyZXRDaGFuZ2VMaXN0
ZW5lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTEw
QzFENDkxODIwMzAwRTAwMzY4ODNBIC8qIFdlYkNhcmV0Q2hhbmdlTGlzdGVuZXIuaCAqLzsgfTsK
KwkJQTEwQzFENjQxODIwMzAwRTAwMzY4ODNBIC8qIFdlYkNocm9tZUNsaWVudElPUy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTEwQzFENEExODIwMzAw
RTAwMzY4ODNBIC8qIFdlYkNocm9tZUNsaWVudElPUy5oICovOyB9OworCQlBMTBDMUQ2NTE4MjAz
MDBFMDAzNjg4M0EgLyogV2ViQ2hyb21lQ2xpZW50SU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTEwQzFENEIxODIwMzAwRTAwMzY4ODNBIC8qIFdl
YkNocm9tZUNsaWVudElPUy5tbSAqLzsgfTsKKwkJQTEwQzFENjYxODIwMzAwRTAwMzY4ODNBIC8q
IFdlYkRpc2tJbWFnZUNhY2hlQ2xpZW50SU9TLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBMTBDMUQ0QzE4MjAzMDBFMDAzNjg4M0EgLyogV2ViRGlza0lt
YWdlQ2FjaGVDbGllbnRJT1MuaCAqLzsgfTsKKwkJQTEwQzFENjcxODIwMzAwRTAwMzY4ODNBIC8q
IFdlYkRpc2tJbWFnZUNhY2hlQ2xpZW50SU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTEwQzFENEQxODIwMzAwRTAwMzY4ODNBIC8qIFdlYkRpc2tJ
bWFnZUNhY2hlQ2xpZW50SU9TLm1tICovOyB9OworCQlBMTBDMUQ2ODE4MjAzMDBFMDAzNjg4M0Eg
LyogV2ViRml4ZWRQb3NpdGlvbkNvbnRlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEExMEMxRDRFMTgyMDMwMEUwMDM2ODgzQSAvKiBXZWJGaXhlZFBv
c2l0aW9uQ29udGVudC5oICovOyB9OworCQlBMTBDMUQ2OTE4MjAzMDBFMDAzNjg4M0EgLyogV2Vi
Rml4ZWRQb3NpdGlvbkNvbnRlbnQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBMTBDMUQ0RjE4MjAzMDBFMDAzNjg4M0EgLyogV2ViRml4ZWRQb3NpdGlv
bkNvbnRlbnQubW0gKi87IH07CisJCUExMEMxRDZBMTgyMDMwMEUwMDM2ODgzQSAvKiBXZWJGaXhl
ZFBvc2l0aW9uQ29udGVudEludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBMTBDMUQ1MDE4MjAzMDBFMDAzNjg4M0EgLyogV2ViRml4ZWRQb3Np
dGlvbkNvbnRlbnRJbnRlcm5hbC5oICovOyB9OworCQlBMTBDMUQ2QjE4MjAzMDBFMDAzNjg4M0Eg
LyogV2ViRnJhbWVJT1MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEExMEMxRDUxMTgyMDMwMEUwMDM2ODgzQSAvKiBXZWJGcmFtZUlPUy5oICovOyB9Owor
CQlBMTBDMUQ2QzE4MjAzMDBFMDAzNjg4M0EgLyogV2ViRnJhbWVJT1MubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTBDMUQ1MjE4MjAzMDBFMDAzNjg4
M0EgLyogV2ViRnJhbWVJT1MubW0gKi87IH07CisJCUExMEMxRDZEMTgyMDMwMEUwMDM2ODgzQSAv
KiBXZWJGcmFtZUlQaG9uZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTEwQzFENTMxODIwMzAwRTAwMzY4ODNBIC8qIFdlYkZyYW1lSVBob25lLmggKi87
IH07CisJCUExMEMxRDZFMTgyMDMwMEUwMDM2ODgzQSAvKiBXZWJHZW9sb2NhdGlvbi5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExMEMxRDU0MTgyMDMw
MEUwMDM2ODgzQSAvKiBXZWJHZW9sb2NhdGlvbi5tbSAqLzsgfTsKKwkJQTEwQzFENkYxODIwMzAw
RTAwMzY4ODNBIC8qIFdlYkdlb2xvY2F0aW9uSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExMEMxRDU1MTgyMDMwMEUwMDM2ODgzQSAvKiBX
ZWJHZW9sb2NhdGlvbkludGVybmFsLmggKi87IH07CisJCUExMEMxRDcwMTgyMDMwMEUwMDM2ODgz
QSAvKiBXZWJHZW9sb2NhdGlvblByaXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEExMEMxRDU2MTgyMDMwMEUwMDM2ODgzQSAvKiBXZWJHZW9sb2Nh
dGlvblByaXZhdGUuaCAqLzsgfTsKKwkJQTEwQzFENzExODIwMzAwRTAwMzY4ODNBIC8qIFdlYklu
c3BlY3RvckNsaWVudElPUy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEExMEMxRDU3MTgyMDMwMEUwMDM2ODgzQSAvKiBXZWJJbnNwZWN0b3JDbGllbnRJ
T1MubW0gKi87IH07CisJCUExMEMxRDcyMTgyMDMwMEUwMDM2ODgzQSAvKiBXZWJNSU1FVHlwZVJl
Z2lzdHJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
MTBDMUQ1ODE4MjAzMDBFMDAzNjg4M0EgLyogV2ViTUlNRVR5cGVSZWdpc3RyeS5oICovOyB9Owor
CQlBMTBDMUQ3MzE4MjAzMDBFMDAzNjg4M0EgLyogV2ViTUlNRVR5cGVSZWdpc3RyeS5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExMEMxRDU5MTgyMDMw
MEUwMDM2ODgzQSAvKiBXZWJNSU1FVHlwZVJlZ2lzdHJ5Lm1tICovOyB9OworCQlBMTBDMUQ3NDE4
MjAzMDBFMDAzNjg4M0EgLyogV2ViU2VsZWN0aW9uUmVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTEwQzFENUExODIwMzAwRTAwMzY4ODNBIC8qIFdl
YlNlbGVjdGlvblJlY3QuaCAqLzsgfTsKKwkJQTEwQzFENzUxODIwMzAwRTAwMzY4ODNBIC8qIFdl
YlNlbGVjdGlvblJlY3QubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEExMEMxRDVCMTgyMDMwMEUwMDM2ODgzQSAvKiBXZWJTZWxlY3Rpb25SZWN0Lm0gKi87
IH07CisJCUExMEMxRDc2MTgyMDMwMEUwMDM2ODgzQSAvKiBXZWJWaXNpYmxlUG9zaXRpb24uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExMEMxRDVDMTgy
MDMwMEUwMDM2ODgzQSAvKiBXZWJWaXNpYmxlUG9zaXRpb24uaCAqLzsgfTsKKwkJQTEwQzFENzcx
ODIwMzAwRTAwMzY4ODNBIC8qIFdlYlZpc2libGVQb3NpdGlvbi5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExMEMxRDVEMTgyMDMwMEUwMDM2ODgzQSAv
KiBXZWJWaXNpYmxlUG9zaXRpb24ubW0gKi87IH07CisJCUExMEMxRDc4MTgyMDMwMEUwMDM2ODgz
QSAvKiBXZWJWaXNpYmxlUG9zaXRpb25JbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTEwQzFENUUxODIwMzAwRTAwMzY4ODNBIC8qIFdlYlZp
c2libGVQb3NpdGlvbkludGVybmFsLmggKi87IH07CisJCUExMEMxRDdGMTgyMDMwM0QwMDM2ODgz
QSAvKiBXZWJGcmFtZVZpZXdXQUtDb21wYXRpYmlsaXR5Lm0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTBDMUQ3QTE4MjAzMDNEMDAzNjg4M0EgLyogV2Vi
RnJhbWVWaWV3V0FLQ29tcGF0aWJpbGl0eS5tICovOyB9OworCQlBMTBDMUQ4MDE4MjAzMDNEMDAz
Njg4M0EgLyogV2ViTWFpbERlbGVnYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBMTBDMUQ3QjE4MjAzMDNEMDAzNjg4M0EgLyogV2ViTWFpbERlbGVn
YXRlLmggKi87IH07CisJCUExMEMxRDgxMTgyMDMwM0QwMDM2ODgzQSAvKiBXZWJQbGFpbldoaXRl
Vmlldy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTEw
QzFEN0MxODIwMzAzRDAwMzY4ODNBIC8qIFdlYlBsYWluV2hpdGVWaWV3LmggKi87IH07CisJCUEx
MEMxRDgyMTgyMDMwM0QwMDM2ODgzQSAvKiBXZWJQbGFpbldoaXRlVmlldy5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExMEMxRDdEMTgyMDMwM0QwMDM2
ODgzQSAvKiBXZWJQbGFpbldoaXRlVmlldy5tbSAqLzsgfTsKKwkJQTEwQzFEODMxODIwMzAzRDAw
MzY4ODNBIC8qIFdlYlVJS2l0RGVsZWdhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEExMEMxRDdFMTgyMDMwM0QwMDM2ODgzQSAvKiBXZWJVSUtpdERl
bGVnYXRlLmggKi87IH07CisJCUExMEMxRDhBMTgyMDMwNUUwMDM2ODgzQSAvKiBXZWJQREZWaWV3
SU9TLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTBD
MUQ4NTE4MjAzMDVFMDAzNjg4M0EgLyogV2ViUERGVmlld0lPUy5oICovOyB9OworCQlBMTBDMUQ4
QjE4MjAzMDVFMDAzNjg4M0EgLyogV2ViUERGVmlld0lPUy5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExMEMxRDg2MTgyMDMwNUUwMDM2ODgzQSAvKiBX
ZWJQREZWaWV3SU9TLm1tICovOyB9OworCQlBMTBDMUQ4QzE4MjAzMDVFMDAzNjg4M0EgLyogV2Vi
UERGVmlld0lQaG9uZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTEwQzFEODcxODIwMzA1RTAwMzY4ODNBIC8qIFdlYlBERlZpZXdJUGhvbmUuaCAqLzsg
fTsKKwkJQTEwQzFEOEQxODIwMzA1RTAwMzY4ODNBIC8qIFdlYlBERlZpZXdQbGFjZWhvbGRlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTEwQzFEODgx
ODIwMzA1RTAwMzY4ODNBIC8qIFdlYlBERlZpZXdQbGFjZWhvbGRlci5oICovOyB9OworCQlBMTBD
MUQ4RTE4MjAzMDVFMDAzNjg4M0EgLyogV2ViUERGVmlld1BsYWNlaG9sZGVyLm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTEwQzFEODkxODIwMzA1RTAw
MzY4ODNBIC8qIFdlYlBERlZpZXdQbGFjZWhvbGRlci5tbSAqLzsgfTsKKwkJQTEwQzFEOTAxODIw
MzA3RDAwMzY4ODNBIC8qIFdlYktpdC5pT1MuZXhwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTEwQzFEOEYxODIwMzA3RDAwMzY4ODNBIC8qIFdlYktpdC5p
T1MuZXhwICovOyB9OwogCQlBMTdBMTFCMTE4MERDODQ4MDBFNTQ5OEMgLyogV2ViUGx1Z2luUGFj
a2FnZVByaXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEExN0ExMUIwMTgwREM4NDgwMEU1NDk4QyAvKiBXZWJQbHVnaW5QYWNrYWdlUHJpdmF0ZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE1MjE0
RkM3MTNCOTc1QzgwMDAwMTVFRiAvKiBXZWJJbnNwZWN0b3JSZW1vdGVDaGFubmVsLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNTIxNEZDMTEzQjk3NUM4
MDAwMDE1RUYgLyogV2ViSW5zcGVjdG9yUmVtb3RlQ2hhbm5lbC5oICovOyB9OwogCQlBNTIxNEZD
ODEzQjk3NUM4MDAwMDE1RUYgLyogV2ViSW5zcGVjdG9yUmVtb3RlQ2hhbm5lbC5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1MjE0RkMyMTNCOTc1Qzgw
MDAwMTVFRiAvKiBXZWJJbnNwZWN0b3JSZW1vdGVDaGFubmVsLm1tICovOyB9OwogCQlBNTIyMDlG
ODEzQzUzRTc1MDA0QkE3QjEgLyogV2ViSW5zcGVjdG9yUmVsYXlEZWZpbml0aW9ucy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTUyMjA5RjcxM0M1M0U3
NTAwNEJBN0IxIC8qIFdlYkluc3BlY3RvclJlbGF5RGVmaW5pdGlvbnMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlBNTYwOTQ2NjE0RDhBRDI2MDA3
OTlBOEEgLyogV2ViSW5kaWNhdGVMYXllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTU2MDk0NjQxNEQ4QUQyNjAwNzk5QThBIC8qIFdlYkluZGljYXRl
TGF5ZXIuaCAqLzsgfTsKLQkJQTU2MDk0NjcxNEQ4QUQyNjAwNzk5QThBIC8qIFdlYkluZGljYXRl
TGF5ZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
NTYwOTQ2NTE0RDhBRDI2MDA3OTlBOEEgLyogV2ViSW5kaWNhdGVMYXllci5tbSAqLzsgfTsKIAkJ
QTU1RTIwRkYxNEQ3MjY0QzAwMzE1NDlFIC8qIFdlYkluc3BlY3RvclNlcnZlcldlYlZpZXdDb25u
ZWN0aW9uQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTU1RTIwRkQxNEQ3MjY0QzAwMzE1NDlFIC8qIFdlYkluc3BlY3RvclNlcnZlcldl
YlZpZXdDb25uZWN0aW9uQ29udHJvbGxlci5oICovOyB9OwogCQlBNTVFMjEwMDE0RDcyNjRDMDAz
MTU0OUUgLyogV2ViSW5zcGVjdG9yU2VydmVyV2ViVmlld0Nvbm5lY3Rpb25Db250cm9sbGVyLm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTU1RTIwRkUx
NEQ3MjY0QzAwMzE1NDlFIC8qIFdlYkluc3BlY3RvclNlcnZlcldlYlZpZXdDb25uZWN0aW9uQ29u
dHJvbGxlci5tbSAqLzsgfTsKKwkJQTU2MDk0NjYxNEQ4QUQyNjAwNzk5QThBIC8qIFdlYkluZGlj
YXRlTGF5ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE1NjA5NDY0MTREOEFEMjYwMDc5OUE4QSAvKiBXZWJJbmRpY2F0ZUxheWVyLmggKi87IH07CisJ
CUE1NjA5NDY3MTREOEFEMjYwMDc5OUE4QSAvKiBXZWJJbmRpY2F0ZUxheWVyLm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTU2MDk0NjUxNEQ4QUQyNjAw
Nzk5QThBIC8qIFdlYkluZGljYXRlTGF5ZXIubW0gKi87IH07CiAJCUE1Njg3QkRBMTM1Qjc5MUEw
MDc0Q0JDQiAvKiBXZWJOb2RlSGlnaGxpZ2h0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1Njg3QkQ4MTM1Qjc5MUEwMDc0Q0JDQiAvKiBXZWJOb2Rl
SGlnaGxpZ2h0ZXIuaCAqLzsgfTsKIAkJQTU2ODdCREIxMzVCNzkxQTAwNzRDQkNCIC8qIFdlYk5v
ZGVIaWdobGlnaHRlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE1Njg3QkQ5MTM1Qjc5MUEwMDc0Q0JDQiAvKiBXZWJOb2RlSGlnaGxpZ2h0ZXIubW0g
Ki87IH07CiAJCUE1N0MyOEE3MTNCQUE1QUQwMDcwQUNBQiAvKiBXZWJJbnNwZWN0b3JTZXJ2ZXJX
ZWJWaWV3Q29ubmVjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTU3QzI4QTExM0JBQTVBRDAwNzBBQ0FCIC8qIFdlYkluc3BlY3RvclNlcnZlcldl
YlZpZXdDb25uZWN0aW9uLmggKi87IH07CkBAIC0zMzYsOCArMzk4LDYgQEAKIAkJQTU3RUI3OTAx
M0I5N0E0RTAwOEQ2OTFEIC8qIFdlYkluc3BlY3RvckNsaWVudFJlZ2lzdHJ5Lm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTU3RUI3OEUxM0I5N0E0RTAw
OEQ2OTFEIC8qIFdlYkluc3BlY3RvckNsaWVudFJlZ2lzdHJ5Lm1tICovOyB9OwogCQlBNThBNTc5
OTE0M0U3MjcwMDAxMjVGNTAgLyogV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1OEE1Nzk3MTQzRTcyNzAw
MDEyNUY1MCAvKiBXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lci5oICovOyB9OwogCQlBNThBNTc5
QTE0M0U3MjcwMDAxMjVGNTAgLyogV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXIubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNThBNTc5ODE0M0U3Mjcw
MDAxMjVGNTAgLyogV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXIubW0gKi87IH07Ci0JCUE1QzU2
NkJEMTI3QTNBRTUwMEU4QTNGRiAvKiBXZWJEaXNrSW1hZ2VDYWNoZUNsaWVudElPUy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTVDNTY2QkIxMjdBM0FF
NTAwRThBM0ZGIC8qIFdlYkRpc2tJbWFnZUNhY2hlQ2xpZW50SU9TLmggKi87IH07Ci0JCUE1QzU2
NkJFMTI3QTNBRTUwMEU4QTNGRiAvKiBXZWJEaXNrSW1hZ2VDYWNoZUNsaWVudElPUy5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1QzU2NkJDMTI3QTNB
RTUwMEU4QTNGRiAvKiBXZWJEaXNrSW1hZ2VDYWNoZUNsaWVudElPUy5tbSAqLzsgfTsKIAkJQTVE
RUZDMEExMUQ1MzMxQzAwODg1MjczIC8qIFdlYlNlY3VyaXR5T3JpZ2luLm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTVERUZDMDcxMUQ1MzMxQzAwODg1
MjczIC8qIFdlYlNlY3VyaXR5T3JpZ2luLm1tICovOyB9OwogCQlBNURFRkMwQjExRDUzMzFDMDA4
ODUyNzMgLyogV2ViU2VjdXJpdHlPcmlnaW5JbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTVERUZDMDgxMUQ1MzMxQzAwODg1MjczIC8qIFdl
YlNlY3VyaXR5T3JpZ2luSW50ZXJuYWwuaCAqLzsgfTsKIAkJQTVERUZDMEMxMUQ1MzMxQzAwODg1
MjczIC8qIFdlYlNlY3VyaXR5T3JpZ2luUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTVERUZDMDkxMUQ1MzMxQzAwODg1MjczIC8qIFdlYlNl
Y3VyaXR5T3JpZ2luUHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CkBAIC02NTQsMTQgKzcxNCw3NiBAQAogCQk5M0ZERTkzMjBENzlDQUYzMDA3
NEYwMjkgLyogV2ViSGlzdG9yeUludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdlYkhpc3RvcnlJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5Q0FFOUQwNzAyNTJBNDEzMEVDQTE2RUEgLyogV2ViUHJlZmVyZW5jZXNQcml2YXRlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGgg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUHJlZmVy
ZW5jZXNQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNl
c1RhYnMgPSAwOyB9OwogCQk5Q0YwRTI0OTAyMTM2MUIwMEVDQTE2RUEgLyogV2ViRnJhbWVQcml2
YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5k
ZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V2ViRnJhbWVQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsg
dXNlc1RhYnMgPSAwOyB9OworCQlBMTBDMUQxMDE4MjAyRjlDMDAzNjg4M0EgLyogV2ViRGVmYXVs
dEZvcm1EZWxlZ2F0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJEZWZh
dWx0Rm9ybURlbGVnYXRlLmg7IHBhdGggPSBpb3MvRGVmYXVsdERlbGVnYXRlcy9XZWJEZWZhdWx0
Rm9ybURlbGVnYXRlLmg7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJQTEwQzFEMTEx
ODIwMkY5QzAwMzY4ODNBIC8qIFdlYkRlZmF1bHRGb3JtRGVsZWdhdGUubSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5vYmpjOyBuYW1lID0gV2ViRGVmYXVsdEZvcm1EZWxlZ2F0ZS5tOyBwYXRoID0g
aW9zL0RlZmF1bHREZWxlZ2F0ZXMvV2ViRGVmYXVsdEZvcm1EZWxlZ2F0ZS5tOyBzb3VyY2VUcmVl
ID0gU09VUkNFX1JPT1Q7IH07CisJCUExMEMxRDEyMTgyMDJGOUMwMDM2ODgzQSAvKiBXZWJEZWZh
dWx0RnJhbWVMb2FkRGVsZWdhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
V2ViRGVmYXVsdEZyYW1lTG9hZERlbGVnYXRlLmg7IHBhdGggPSBpb3MvRGVmYXVsdERlbGVnYXRl
cy9XZWJEZWZhdWx0RnJhbWVMb2FkRGVsZWdhdGUuaDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09U
OyB9OworCQlBMTBDMUQxMzE4MjAyRjlDMDAzNjg4M0EgLyogV2ViRGVmYXVsdEZyYW1lTG9hZERl
bGVnYXRlLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgbmFtZSA9IFdlYkRlZmF1bHRG
cmFtZUxvYWREZWxlZ2F0ZS5tOyBwYXRoID0gaW9zL0RlZmF1bHREZWxlZ2F0ZXMvV2ViRGVmYXVs
dEZyYW1lTG9hZERlbGVnYXRlLm07IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJQTEw
QzFEMTQxODIwMkY5QzAwMzY4ODNBIC8qIFdlYkRlZmF1bHRSZXNvdXJjZUxvYWREZWxlZ2F0ZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJEZWZhdWx0UmVzb3VyY2VMb2Fk
RGVsZWdhdGUuaDsgcGF0aCA9IGlvcy9EZWZhdWx0RGVsZWdhdGVzL1dlYkRlZmF1bHRSZXNvdXJj
ZUxvYWREZWxlZ2F0ZS5oOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCUExMEMxRDE1
MTgyMDJGOUMwMDM2ODgzQSAvKiBXZWJEZWZhdWx0UmVzb3VyY2VMb2FkRGVsZWdhdGUubSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBuYW1lID0gV2ViRGVmYXVsdFJlc291cmNlTG9hZERl
bGVnYXRlLm07IHBhdGggPSBpb3MvRGVmYXVsdERlbGVnYXRlcy9XZWJEZWZhdWx0UmVzb3VyY2VM
b2FkRGVsZWdhdGUubTsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQlBMTBDMUQxNjE4
MjAyRjlDMDAzNjg4M0EgLyogV2ViRGVmYXVsdFVJS2l0RGVsZWdhdGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViRGVmYXVsdFVJS2l0RGVsZWdhdGUuaDsgcGF0aCA9IGlv
cy9EZWZhdWx0RGVsZWdhdGVzL1dlYkRlZmF1bHRVSUtpdERlbGVnYXRlLmg7IHNvdXJjZVRyZWUg
PSBTT1VSQ0VfUk9PVDsgfTsKKwkJQTEwQzFEMTcxODIwMkY5QzAwMzY4ODNBIC8qIFdlYkRlZmF1
bHRVSUtpdERlbGVnYXRlLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgbmFtZSA9IFdl
YkRlZmF1bHRVSUtpdERlbGVnYXRlLm07IHBhdGggPSBpb3MvRGVmYXVsdERlbGVnYXRlcy9XZWJE
ZWZhdWx0VUlLaXREZWxlZ2F0ZS5tOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCUEx
MEMxRDIxMTgyMDJGQzUwMDM2ODgzQSAvKiBFbW9qaUZhbGxiYWNrRm9udFNlbGVjdG9yLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEVtb2ppRmFsbGJhY2tGb250U2Vs
ZWN0b3IuY3BwOyBwYXRoID0gaW9zL01pc2MvRW1vamlGYWxsYmFja0ZvbnRTZWxlY3Rvci5jcHA7
IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJQTEwQzFEMjIxODIwMkZDNTAwMzY4ODNB
IC8qIEVtb2ppRmFsbGJhY2tGb250U2VsZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gRW1vamlGYWxsYmFja0ZvbnRTZWxlY3Rvci5oOyBwYXRoID0gaW9zL01pc2MvRW1v
amlGYWxsYmFja0ZvbnRTZWxlY3Rvci5oOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJ
CUExMEMxRDIzMTgyMDJGQzUwMDM2ODgzQSAvKiBNZW1vcnlNZWFzdXJlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE1lbW9yeU1lYXN1cmUuaDsgcGF0aCA9IGlvcy9NaXNjL01l
bW9yeU1lYXN1cmUuaDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQlBMTBDMUQyNDE4
MjAyRkM1MDAzNjg4M0EgLyogTWVtb3J5TWVhc3VyZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgbmFtZSA9IE1lbW9yeU1lYXN1cmUubW07IHBhdGggPSBpb3MvTWlzYy9NZW1v
cnlNZWFzdXJlLm1tOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCUExMEMxRDI1MTgy
MDJGQzUwMDM2ODgzQSAvKiBXZWJHZW9sb2NhdGlvbkNvcmVMb2NhdGlvblByb3ZpZGVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkdlb2xvY2F0aW9uQ29yZUxvY2F0aW9u
UHJvdmlkZXIuaDsgcGF0aCA9IGlvcy9NaXNjL1dlYkdlb2xvY2F0aW9uQ29yZUxvY2F0aW9uUHJv
dmlkZXIuaDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQlBMTBDMUQyNjE4MjAyRkM1
MDAzNjg4M0EgLyogV2ViR2VvbG9jYXRpb25Db3JlTG9jYXRpb25Qcm92aWRlci5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdlYkdlb2xvY2F0aW9uQ29yZUxvY2F0
aW9uUHJvdmlkZXIubW07IHBhdGggPSBpb3MvTWlzYy9XZWJHZW9sb2NhdGlvbkNvcmVMb2NhdGlv
blByb3ZpZGVyLm1tOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCUExMEMxRDI3MTgy
MDJGQzUwMDM2ODgzQSAvKiBXZWJHZW9sb2NhdGlvblByb3ZpZGVySU9TLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkdlb2xvY2F0aW9uUHJvdmlkZXJJT1MuaDsgcGF0aCA9
IGlvcy9NaXNjL1dlYkdlb2xvY2F0aW9uUHJvdmlkZXJJT1MuaDsgc291cmNlVHJlZSA9IFNPVVJD
RV9ST09UOyB9OworCQlBMTBDMUQyODE4MjAyRkM1MDAzNjg4M0EgLyogV2ViR2VvbG9jYXRpb25Q
cm92aWRlcklPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdl
Ykdlb2xvY2F0aW9uUHJvdmlkZXJJT1MubW07IHBhdGggPSBpb3MvTWlzYy9XZWJHZW9sb2NhdGlv
blByb3ZpZGVySU9TLm1tOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCUExMEMxRDI5
MTgyMDJGQzUwMDM2ODgzQSAvKiBXZWJOU1N0cmluZ0RyYXdpbmcuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gV2ViTlNTdHJpbmdEcmF3aW5nLmg7IHBhdGggPSBpb3MvTWlzYy9X
ZWJOU1N0cmluZ0RyYXdpbmcuaDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQlBMTBD
MUQyQTE4MjAyRkM1MDAzNjg4M0EgLyogV2ViTlNTdHJpbmdEcmF3aW5nLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV2ViTlNTdHJpbmdEcmF3aW5nLm1tOyBwYXRo
ID0gaW9zL01pc2MvV2ViTlNTdHJpbmdEcmF3aW5nLm1tOyBzb3VyY2VUcmVlID0gU09VUkNFX1JP
T1Q7IH07CisJCUExMEMxRDJCMTgyMDJGQzUwMDM2ODgzQSAvKiBXZWJOU1N0cmluZ0V4dHJhc0lP
Uy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJOU1N0cmluZ0V4dHJhc0lP
Uy5oOyBwYXRoID0gaW9zL01pc2MvV2ViTlNTdHJpbmdFeHRyYXNJT1MuaDsgc291cmNlVHJlZSA9
IFNPVVJDRV9ST09UOyB9OworCQlBMTBDMUQyQzE4MjAyRkM1MDAzNjg4M0EgLyogV2ViTlNTdHJp
bmdFeHRyYXNJT1MubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBuYW1lID0gV2ViTlNT
dHJpbmdFeHRyYXNJT1MubTsgcGF0aCA9IGlvcy9NaXNjL1dlYk5TU3RyaW5nRXh0cmFzSU9TLm07
IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJQTEwQzFEMkQxODIwMkZDNTAwMzY4ODNB
IC8qIFdlYk5TU3RyaW5nRXh0cmFzSVBob25lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IFdlYk5TU3RyaW5nRXh0cmFzSVBob25lLmg7IHBhdGggPSBpb3MvTWlzYy9XZWJOU1N0
cmluZ0V4dHJhc0lQaG9uZS5oOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCUExMEMx
RDJFMTgyMDJGQzUwMDM2ODgzQSAvKiBXZWJVSUtpdFN1cHBvcnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gV2ViVUlLaXRTdXBwb3J0Lmg7IHBhdGggPSBpb3MvTWlzYy9XZWJV
SUtpdFN1cHBvcnQuaDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQlBMTBDMUQyRjE4
MjAyRkM1MDAzNjg4M0EgLyogV2ViVUlLaXRTdXBwb3J0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBuYW1lID0gV2ViVUlLaXRTdXBwb3J0Lm1tOyBwYXRoID0gaW9zL01pc2Mv
V2ViVUlLaXRTdXBwb3J0Lm1tOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCUExMEMx
RDQwMTgyMDJGRUYwMDM2ODgzQSAvKiBXZWJTUUxpdGVEYXRhYmFzZVRyYWNrZXJDbGllbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViU1FMaXRlRGF0YWJhc2VUcmFja2Vy
Q2xpZW50Lmg7IHBhdGggPSBpb3MvU3RvcmFnZS9XZWJTUUxpdGVEYXRhYmFzZVRyYWNrZXJDbGll
bnQuaDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQlBMTBDMUQ0MTE4MjAyRkVGMDAz
Njg4M0EgLyogV2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50Lm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50
Lm1tOyBwYXRoID0gaW9zL1N0b3JhZ2UvV2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50Lm1t
OyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCUExMEMxRDQ1MTgyMDMwMEUwMDM2ODgz
QSAvKiBQb3B1cE1lbnVJT1MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUG9w
dXBNZW51SU9TLmg7IHBhdGggPSBpb3MvV2ViQ29yZVN1cHBvcnQvUG9wdXBNZW51SU9TLmg7IHNv
dXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJQTEwQzFENDYxODIwMzAwRTAwMzY4ODNBIC8q
IFBvcHVwTWVudUlPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9
IFBvcHVwTWVudUlPUy5tbTsgcGF0aCA9IGlvcy9XZWJDb3JlU3VwcG9ydC9Qb3B1cE1lbnVJT1Mu
bW07IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJQTEwQzFENDcxODIwMzAwRTAwMzY4
ODNBIC8qIFNlYXJjaFBvcHVwTWVudUlPUy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBTZWFyY2hQb3B1cE1lbnVJT1MuY3BwOyBwYXRoID0gaW9zL1dlYkNvcmVTdXBw
b3J0L1NlYXJjaFBvcHVwTWVudUlPUy5jcHA7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsK
KwkJQTEwQzFENDgxODIwMzAwRTAwMzY4ODNBIC8qIFNlYXJjaFBvcHVwTWVudUlPUy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTZWFyY2hQb3B1cE1lbnVJT1MuaDsgcGF0aCA9
IGlvcy9XZWJDb3JlU3VwcG9ydC9TZWFyY2hQb3B1cE1lbnVJT1MuaDsgc291cmNlVHJlZSA9IFNP
VVJDRV9ST09UOyB9OworCQlBMTBDMUQ0OTE4MjAzMDBFMDAzNjg4M0EgLyogV2ViQ2FyZXRDaGFu
Z2VMaXN0ZW5lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJDYXJldENo
YW5nZUxpc3RlbmVyLmg7IHBhdGggPSBpb3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2FyZXRDaGFuZ2VM
aXN0ZW5lci5oOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCUExMEMxRDRBMTgyMDMw
MEUwMDM2ODgzQSAvKiBXZWJDaHJvbWVDbGllbnRJT1MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gV2ViQ2hyb21lQ2xpZW50SU9TLmg7IHBhdGggPSBpb3MvV2ViQ29yZVN1cHBv
cnQvV2ViQ2hyb21lQ2xpZW50SU9TLmg7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJ
QTEwQzFENEIxODIwMzAwRTAwMzY4ODNBIC8qIFdlYkNocm9tZUNsaWVudElPUy5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdlYkNocm9tZUNsaWVudElPUy5tbTsg
cGF0aCA9IGlvcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnRJT1MubW07IHNvdXJjZVRy
ZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJQTEwQzFENEMxODIwMzAwRTAwMzY4ODNBIC8qIFdlYkRp
c2tJbWFnZUNhY2hlQ2xpZW50SU9TLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IFdlYkRpc2tJbWFnZUNhY2hlQ2xpZW50SU9TLmg7IHBhdGggPSBpb3MvV2ViQ29yZVN1cHBvcnQv
V2ViRGlza0ltYWdlQ2FjaGVDbGllbnRJT1MuaDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9
OworCQlBMTBDMUQ0RDE4MjAzMDBFMDAzNjg4M0EgLyogV2ViRGlza0ltYWdlQ2FjaGVDbGllbnRJ
T1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBXZWJEaXNrSW1h
Z2VDYWNoZUNsaWVudElPUy5tbTsgcGF0aCA9IGlvcy9XZWJDb3JlU3VwcG9ydC9XZWJEaXNrSW1h
Z2VDYWNoZUNsaWVudElPUy5tbTsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQlBMTBD
MUQ0RTE4MjAzMDBFMDAzNjg4M0EgLyogV2ViRml4ZWRQb3NpdGlvbkNvbnRlbnQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViRml4ZWRQb3NpdGlvbkNvbnRlbnQuaDsgcGF0
aCA9IGlvcy9XZWJDb3JlU3VwcG9ydC9XZWJGaXhlZFBvc2l0aW9uQ29udGVudC5oOyBzb3VyY2VU
cmVlID0gU09VUkNFX1JPT1Q7IH07CisJCUExMEMxRDRGMTgyMDMwMEUwMDM2ODgzQSAvKiBXZWJG
aXhlZFBvc2l0aW9uQ29udGVudC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
bmFtZSA9IFdlYkZpeGVkUG9zaXRpb25Db250ZW50Lm1tOyBwYXRoID0gaW9zL1dlYkNvcmVTdXBw
b3J0L1dlYkZpeGVkUG9zaXRpb25Db250ZW50Lm1tOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7
IH07CisJCUExMEMxRDUwMTgyMDMwMEUwMDM2ODgzQSAvKiBXZWJGaXhlZFBvc2l0aW9uQ29udGVu
dEludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkZpeGVkUG9z
aXRpb25Db250ZW50SW50ZXJuYWwuaDsgcGF0aCA9IGlvcy9XZWJDb3JlU3VwcG9ydC9XZWJGaXhl
ZFBvc2l0aW9uQ29udGVudEludGVybmFsLmg7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsK
KwkJQTEwQzFENTExODIwMzAwRTAwMzY4ODNBIC8qIFdlYkZyYW1lSU9TLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkZyYW1lSU9TLmg7IHBhdGggPSBpb3MvV2ViQ29yZVN1
cHBvcnQvV2ViRnJhbWVJT1MuaDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQlBMTBD
MUQ1MjE4MjAzMDBFMDAzNjg4M0EgLyogV2ViRnJhbWVJT1MubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBXZWJGcmFtZUlPUy5tbTsgcGF0aCA9IGlvcy9XZWJDb3Jl
U3VwcG9ydC9XZWJGcmFtZUlPUy5tbTsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQlB
MTBDMUQ1MzE4MjAzMDBFMDAzNjg4M0EgLyogV2ViRnJhbWVJUGhvbmUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViRnJhbWVJUGhvbmUuaDsgcGF0aCA9IGlvcy9XZWJDb3Jl
U3VwcG9ydC9XZWJGcmFtZUlQaG9uZS5oOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJ
CUExMEMxRDU0MTgyMDMwMEUwMDM2ODgzQSAvKiBXZWJHZW9sb2NhdGlvbi5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdlYkdlb2xvY2F0aW9uLm1tOyBwYXRoID0g
aW9zL1dlYkNvcmVTdXBwb3J0L1dlYkdlb2xvY2F0aW9uLm1tOyBzb3VyY2VUcmVlID0gU09VUkNF
X1JPT1Q7IH07CisJCUExMEMxRDU1MTgyMDMwMEUwMDM2ODgzQSAvKiBXZWJHZW9sb2NhdGlvbklu
dGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkdlb2xvY2F0aW9u
SW50ZXJuYWwuaDsgcGF0aCA9IGlvcy9XZWJDb3JlU3VwcG9ydC9XZWJHZW9sb2NhdGlvbkludGVy
bmFsLmg7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJQTEwQzFENTYxODIwMzAwRTAw
MzY4ODNBIC8qIFdlYkdlb2xvY2F0aW9uUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBXZWJHZW9sb2NhdGlvblByaXZhdGUuaDsgcGF0aCA9IGlvcy9XZWJDb3JlU3Vw
cG9ydC9XZWJHZW9sb2NhdGlvblByaXZhdGUuaDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9
OworCQlBMTBDMUQ1NzE4MjAzMDBFMDAzNjg4M0EgLyogV2ViSW5zcGVjdG9yQ2xpZW50SU9TLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV2ViSW5zcGVjdG9yQ2xp
ZW50SU9TLm1tOyBwYXRoID0gaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudElP
Uy5tbTsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQlBMTBDMUQ1ODE4MjAzMDBFMDAz
Njg4M0EgLyogV2ViTUlNRVR5cGVSZWdpc3RyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBXZWJNSU1FVHlwZVJlZ2lzdHJ5Lmg7IHBhdGggPSBpb3MvV2ViQ29yZVN1cHBvcnQv
V2ViTUlNRVR5cGVSZWdpc3RyeS5oOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCUEx
MEMxRDU5MTgyMDMwMEUwMDM2ODgzQSAvKiBXZWJNSU1FVHlwZVJlZ2lzdHJ5Lm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV2ViTUlNRVR5cGVSZWdpc3RyeS5tbTsg
cGF0aCA9IGlvcy9XZWJDb3JlU3VwcG9ydC9XZWJNSU1FVHlwZVJlZ2lzdHJ5Lm1tOyBzb3VyY2VU
cmVlID0gU09VUkNFX1JPT1Q7IH07CisJCUExMEMxRDVBMTgyMDMwMEUwMDM2ODgzQSAvKiBXZWJT
ZWxlY3Rpb25SZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYlNlbGVj
dGlvblJlY3QuaDsgcGF0aCA9IGlvcy9XZWJDb3JlU3VwcG9ydC9XZWJTZWxlY3Rpb25SZWN0Lmg7
IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJQTEwQzFENUIxODIwMzAwRTAwMzY4ODNB
IC8qIFdlYlNlbGVjdGlvblJlY3QubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBuYW1l
ID0gV2ViU2VsZWN0aW9uUmVjdC5tOyBwYXRoID0gaW9zL1dlYkNvcmVTdXBwb3J0L1dlYlNlbGVj
dGlvblJlY3QubTsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQlBMTBDMUQ1QzE4MjAz
MDBFMDAzNjg4M0EgLyogV2ViVmlzaWJsZVBvc2l0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IFdlYlZpc2libGVQb3NpdGlvbi5oOyBwYXRoID0gaW9zL1dlYkNvcmVTdXBw
b3J0L1dlYlZpc2libGVQb3NpdGlvbi5oOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJ
CUExMEMxRDVEMTgyMDMwMEUwMDM2ODgzQSAvKiBXZWJWaXNpYmxlUG9zaXRpb24ubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBXZWJWaXNpYmxlUG9zaXRpb24ubW07
IHBhdGggPSBpb3MvV2ViQ29yZVN1cHBvcnQvV2ViVmlzaWJsZVBvc2l0aW9uLm1tOyBzb3VyY2VU
cmVlID0gU09VUkNFX1JPT1Q7IH07CisJCUExMEMxRDVFMTgyMDMwMEUwMDM2ODgzQSAvKiBXZWJW
aXNpYmxlUG9zaXRpb25JbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBXZWJWaXNpYmxlUG9zaXRpb25JbnRlcm5hbC5oOyBwYXRoID0gaW9zL1dlYkNvcmVTdXBwb3J0
L1dlYlZpc2libGVQb3NpdGlvbkludGVybmFsLmg7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsg
fTsKKwkJQTEwQzFEN0ExODIwMzAzRDAwMzY4ODNBIC8qIFdlYkZyYW1lVmlld1dBS0NvbXBhdGli
aWxpdHkubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBuYW1lID0gV2ViRnJhbWVWaWV3
V0FLQ29tcGF0aWJpbGl0eS5tOyBwYXRoID0gaW9zL1dlYlZpZXcvV2ViRnJhbWVWaWV3V0FLQ29t
cGF0aWJpbGl0eS5tOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCUExMEMxRDdCMTgy
MDMwM0QwMDM2ODgzQSAvKiBXZWJNYWlsRGVsZWdhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gV2ViTWFpbERlbGVnYXRlLmg7IHBhdGggPSBpb3MvV2ViVmlldy9XZWJNYWls
RGVsZWdhdGUuaDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQlBMTBDMUQ3QzE4MjAz
MDNEMDAzNjg4M0EgLyogV2ViUGxhaW5XaGl0ZVZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gV2ViUGxhaW5XaGl0ZVZpZXcuaDsgcGF0aCA9IGlvcy9XZWJWaWV3L1dlYlBs
YWluV2hpdGVWaWV3Lmg7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJQTEwQzFEN0Qx
ODIwMzAzRDAwMzY4ODNBIC8qIFdlYlBsYWluV2hpdGVWaWV3Lm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBuYW1lID0gV2ViUGxhaW5XaGl0ZVZpZXcubW07IHBhdGggPSBpb3Mv
V2ViVmlldy9XZWJQbGFpbldoaXRlVmlldy5tbTsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9
OworCQlBMTBDMUQ3RTE4MjAzMDNEMDAzNjg4M0EgLyogV2ViVUlLaXREZWxlZ2F0ZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJVSUtpdERlbGVnYXRlLmg7IHBhdGggPSBp
b3MvV2ViVmlldy9XZWJVSUtpdERlbGVnYXRlLmg7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsg
fTsKKwkJQTEwQzFEODUxODIwMzA1RTAwMzY4ODNBIC8qIFdlYlBERlZpZXdJT1MuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViUERGVmlld0lPUy5oOyBwYXRoID0gaW9zL1dl
YlZpZXcvV2ViUERGVmlld0lPUy5oOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCUEx
MEMxRDg2MTgyMDMwNUUwMDM2ODgzQSAvKiBXZWJQREZWaWV3SU9TLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV2ViUERGVmlld0lPUy5tbTsgcGF0aCA9IGlvcy9X
ZWJWaWV3L1dlYlBERlZpZXdJT1MubW07IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJ
QTEwQzFEODcxODIwMzA1RTAwMzY4ODNBIC8qIFdlYlBERlZpZXdJUGhvbmUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViUERGVmlld0lQaG9uZS5oOyBwYXRoID0gaW9zL1dl
YlZpZXcvV2ViUERGVmlld0lQaG9uZS5oOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJ
CUExMEMxRDg4MTgyMDMwNUUwMDM2ODgzQSAvKiBXZWJQREZWaWV3UGxhY2Vob2xkZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViUERGVmlld1BsYWNlaG9sZGVyLmg7IHBh
dGggPSBpb3MvV2ViVmlldy9XZWJQREZWaWV3UGxhY2Vob2xkZXIuaDsgc291cmNlVHJlZSA9IFNP
VVJDRV9ST09UOyB9OworCQlBMTBDMUQ4OTE4MjAzMDVFMDAzNjg4M0EgLyogV2ViUERGVmlld1Bs
YWNlaG9sZGVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV2Vi
UERGVmlld1BsYWNlaG9sZGVyLm1tOyBwYXRoID0gaW9zL1dlYlZpZXcvV2ViUERGVmlld1BsYWNl
aG9sZGVyLm1tOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCUExMEMxRDhGMTgyMDMw
N0QwMDM2ODgzQSAvKiBXZWJLaXQuaU9TLmV4cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuZXhwb3J0
czsgbmFtZSA9IFdlYktpdC5pT1MuZXhwOyBwYXRoID0gaW9zL1dlYktpdC5pT1MuZXhwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMTdBMTFCMDE4MERDODQ4MDBFNTQ5OEMgLyogV2Vi
UGx1Z2luUGFja2FnZVByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V2ViUGx1Z2luUGFja2FnZVByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QTUyMTRGQzExM0I5NzVDODAwMDAxNUVGIC8qIFdlYkluc3BlY3RvclJlbW90ZUNoYW5uZWwuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViSW5zcGVjdG9yUmVtb3RlQ2hhbm5l
bC5oOyBwYXRoID0gcmVtb3RlL1dlYkluc3BlY3RvclJlbW90ZUNoYW5uZWwuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTUyMTRGQzIxM0I5NzVDODAwMDAxNUVGIC8qIFdlYkluc3Bl
Y3RvclJlbW90ZUNoYW5uZWwubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5h
bWUgPSBXZWJJbnNwZWN0b3JSZW1vdGVDaGFubmVsLm1tOyBwYXRoID0gcmVtb3RlL1dlYkluc3Bl
Y3RvclJlbW90ZUNoYW5uZWwubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1MjIw
OUY3MTNDNTNFNzUwMDRCQTdCMSAvKiBXZWJJbnNwZWN0b3JSZWxheURlZmluaXRpb25zLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkluc3BlY3RvclJlbGF5RGVmaW5pdGlv
bnMuaDsgcGF0aCA9IHJlbW90ZS9XZWJJbnNwZWN0b3JSZWxheURlZmluaXRpb25zLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE1NjA5NDY0MTREOEFEMjYwMDc5OUE4QSAvKiBXZWJJ
bmRpY2F0ZUxheWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkluZGlj
YXRlTGF5ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTU2MDk0NjUxNEQ4QUQy
NjAwNzk5QThBIC8qIFdlYkluZGljYXRlTGF5ZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBXZWJJbmRpY2F0ZUxheWVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBNTVFMjBGRDE0RDcyNjRDMDAzMTU0OUUgLyogV2ViSW5zcGVjdG9yU2VydmVy
V2ViVmlld0Nvbm5lY3Rpb25Db250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IFdlYkluc3BlY3RvclNlcnZlcldlYlZpZXdDb25uZWN0aW9uQ29udHJvbGxlci5oOyBw
YXRoID0gcmVtb3RlL1dlYkluc3BlY3RvclNlcnZlcldlYlZpZXdDb25uZWN0aW9uQ29udHJvbGxl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNTVFMjBGRTE0RDcyNjRDMDAzMTU0
OUUgLyogV2ViSW5zcGVjdG9yU2VydmVyV2ViVmlld0Nvbm5lY3Rpb25Db250cm9sbGVyLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV2ViSW5zcGVjdG9yU2VydmVy
V2ViVmlld0Nvbm5lY3Rpb25Db250cm9sbGVyLm1tOyBwYXRoID0gcmVtb3RlL1dlYkluc3BlY3Rv
clNlcnZlcldlYlZpZXdDb25uZWN0aW9uQ29udHJvbGxlci5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQTU2MDk0NjQxNEQ4QUQyNjAwNzk5QThBIC8qIFdlYkluZGljYXRlTGF5ZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViSW5kaWNhdGVMYXllci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNTYwOTQ2NTE0RDhBRDI2MDA3OTlBOEEgLyog
V2ViSW5kaWNhdGVMYXllci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IFdlYkluZGljYXRlTGF5ZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1
Njg3QkQ4MTM1Qjc5MUEwMDc0Q0JDQiAvKiBXZWJOb2RlSGlnaGxpZ2h0ZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViTm9kZUhpZ2hsaWdodGVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUE1Njg3QkQ5MTM1Qjc5MUEwMDc0Q0JDQiAvKiBXZWJOb2RlSGln
aGxpZ2h0ZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJO
b2RlSGlnaGxpZ2h0ZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1N0MyOEEx
MTNCQUE1QUQwMDcwQUNBQiAvKiBXZWJJbnNwZWN0b3JTZXJ2ZXJXZWJWaWV3Q29ubmVjdGlvbi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJJbnNwZWN0b3JTZXJ2ZXJXZWJW
aWV3Q29ubmVjdGlvbi5oOyBwYXRoID0gcmVtb3RlL1dlYkluc3BlY3RvclNlcnZlcldlYlZpZXdD
b25uZWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02NzUsOSArNzk3LDYg
QEAKIAkJQTU3RUI3OEUxM0I5N0E0RTAwOEQ2OTFEIC8qIFdlYkluc3BlY3RvckNsaWVudFJlZ2lz
dHJ5Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV2ViSW5zcGVj
dG9yQ2xpZW50UmVnaXN0cnkubW07IHBhdGggPSByZW1vdGUvV2ViSW5zcGVjdG9yQ2xpZW50UmVn
aXN0cnkubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1OEE1Nzk3MTQzRTcyNzAw
MDEyNUY1MCAvKiBXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlBNThBNTc5ODE0M0U3MjcwMDAxMjVGNTAgLyogV2ViT3BlblBh
bmVsUmVzdWx0TGlzdGVuZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJQTVDNTY2QkIxMjdBM0FFNTAwRThBM0ZGIC8qIFdlYkRpc2tJbWFnZUNhY2hlQ2xp
ZW50SU9TLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkRpc2tJbWFnZUNh
Y2hlQ2xpZW50SU9TLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE1QzU2NkJDMTI3
QTNBRTUwMEU4QTNGRiAvKiBXZWJEaXNrSW1hZ2VDYWNoZUNsaWVudElPUy5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkRpc2tJbWFnZUNhY2hlQ2xpZW50SU9T
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBNUQ2ODcwRTExRTYzRkQ3MDA0RTdF
NUQgLyogV2ViSW5zcGVjdG9yQ2xpZW50SU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gV2ViSW5zcGVjdG9yQ2xpZW50SU9TLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBNURFRkMwNzExRDUzMzFDMDA4ODUyNzMgLyogV2ViU2VjdXJpdHlPcmln
aW4ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJTZWN1cml0
eU9yaWdpbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTVERUZDMDgxMUQ1MzMx
QzAwODg1MjczIC8qIFdlYlNlY3VyaXR5T3JpZ2luSW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV2ViU2VjdXJpdHlPcmlnaW5JbnRlcm5hbC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlBNURFRkMwOTExRDUzMzFDMDA4ODUyNzMgLyogV2ViU2VjdXJp
dHlPcmlnaW5Qcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlNl
Y3VyaXR5T3JpZ2luUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODMz
LDggKzk1Miw4IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQkxQzZDQjAzRTBBQTYzOTFEMDBEMjNC
RkQgLyogTWlncmF0ZUhlYWRlcnMubWFrZSAqLywKIAkJCQlGNUY3MzJEMjAyRkY0RDRGMDFBODAx
ODAgLyogV2ViS2l0LmV4cCAqLywKKwkJCQlBMTBDMUQ4RjE4MjAzMDdEMDAzNjg4M0EgLyogV2Vi
S2l0LmlPUy5leHAgKi8sCiAJCQkJRjVDMjgzNzMwMjg0Njc2RDAxODYzNUNBIC8qIFdlYktpdFBy
ZWZpeC5oICovLAotCQkJCUZFRDE0MDBBMENFQ0NENjgwMEQ4OTQ2NiAvKiBpb3MgKi8sCiAJCQkJ
NjUwOEE0QTcwOTlCMzc1RjAwQkNCRjQ1IC8qIERlZmF1bHQgRGVsZWdhdGVzICovLAogCQkJCUY1
N0QxOTRBMDM0RTczMkMwMUE4MDE4MCAvKiBET00gKi8sCiAJCQkJMjVBODE3NjgwMUI1NDc0QjBF
Q0ExNDlFIC8qIEhpc3RvcnkgKi8sCkBAIC05NjksNiArMTA4OCw3IEBACiAJCTI1NERDMzM0MDE2
RTFEM0YwRUNBMTQ5RSAvKiBNaXNjICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGls
ZHJlbiA9ICgKKwkJCQlBMTBDMUQyMDE4MjAyRkFGMDAzNjg4M0EgLyogaW9zICovLAogCQkJCUE4
NjRCM0U1MTIzRUQ4M0QwMEMyQTYxMiAvKiBNYWlsUXVpcmtzVXNlclNjcmlwdC5qcyAqLywKIAkJ
CQkxQ0NGRkQxMjBCMUY4MUYyMDAyRUU5MjYgLyogT2xkV2ViQXNzZXJ0aW9ucy5jICovLAogCQkJ
CTI5QUVGOTVEMTM0Qzc1NTQwMEZFNTA5NiAvKiBPdXRsb29rUXVpcmtzVXNlclNjcmlwdC5qcyAq
LywKQEAgLTEwNzcsMTkgKzExOTcsMTAgQEAKIAkJCXRhYldpZHRoID0gNDsKIAkJCXVzZXNUYWJz
ID0gMDsKIAkJfTsKLQkJNDRBMTFGQkUwRUJBOTNCMjAwOUY2OUVEIC8qIFdlYkNvcmVTdXBwb3J0
ICovID0gewotCQkJaXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQlBNUM1NjZC
QjEyN0EzQUU1MDBFOEEzRkYgLyogV2ViRGlza0ltYWdlQ2FjaGVDbGllbnRJT1MuaCAqLywKLQkJ
CQlBNUM1NjZCQzEyN0EzQUU1MDBFOEEzRkYgLyogV2ViRGlza0ltYWdlQ2FjaGVDbGllbnRJT1Mu
bW0gKi8sCi0JCQkJQTVENjg3MEUxMUU2M0ZENzAwNEU3RTVEIC8qIFdlYkluc3BlY3RvckNsaWVu
dElPUy5tbSAqLywKLQkJCSk7Ci0JCQlwYXRoID0gV2ViQ29yZVN1cHBvcnQ7Ci0JCQlzb3VyY2VU
cmVlID0gIjxncm91cD4iOwotCQl9OwogCQk1MTFGM0ZDMzBDRUNDN0UyMDA4NTI1NjUgLyogU3Rv
cmFnZSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJQTEw
QzFEM0YxODIwMkZEQzAwMzY4ODNBIC8qIGlvcyAqLywKIAkJCQk1MTFGM0ZEMTBDRUNDODhGMDA4
NTI1NjUgLyogV2ViRGF0YWJhc2VNYW5hZ2VyLm1tICovLAogCQkJCTUxMUYzRkQzMENFQ0M4OEYw
MDg1MjU2NSAvKiBXZWJEYXRhYmFzZU1hbmFnZXJDbGllbnQuaCAqLywKIAkJCQk1MTFGM0ZENDBD
RUNDODhGMDA4NTI1NjUgLyogV2ViRGF0YWJhc2VNYW5hZ2VyQ2xpZW50Lm1tICovLApAQCAtMTEw
OSw2ICsxMjIwLDcgQEAKIAkJNTFFOTRDMDcwNkMwMkNBMzAwQTlCMDlFIC8qIFBERiAqLyA9IHsK
IAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJQTEwQzFEODQxODIwMzA0
NTAwMzY4ODNBIC8qIGlvcyAqLywKIAkJCQkzN0QxRENBNjEwNjU5MjhDMDA2OEY3RUYgLyogV2Vi
SlNQREZEb2MuaCAqLywKIAkJCQkzN0QxRENBNzEwNjU5MjhDMDA2OEY3RUYgLyogV2ViSlNQREZE
b2MubW0gKi8sCiAJCQkJMzdCNkZCNEMxMDYzNTMwQzAwMEZEQjNCIC8qIFdlYlBERkRvY3VtZW50
RXh0cmFzLmggKi8sCkBAIC0xMTI0LDYgKzEyMzYsNyBAQAogCQk2NTA4QTRBNzA5OUIzNzVGMDBC
Q0JGNDUgLyogRGVmYXVsdCBEZWxlZ2F0ZXMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJ
CWNoaWxkcmVuID0gKAorCQkJCUExMEMxRDBGMTgyMDJGN0EwMDM2ODgzQSAvKiBpb3MgKi8sCiAJ
CQkJNTE1MkZBREQwMzNGQzUwNDAwQ0EyQUNEIC8qIFdlYkRlZmF1bHRDb250ZXh0TWVudURlbGVn
YXRlLmggKi8sCiAJCQkJNTE1MkZBREUwMzNGQzUwNDAwQ0EyQUNEIC8qIFdlYkRlZmF1bHRDb250
ZXh0TWVudURlbGVnYXRlLm1tICovLAogCQkJCUJFOTVCRUU2MDVGRDA4MDUwMDZFMTUxMyAvKiBX
ZWJEZWZhdWx0RWRpdGluZ0RlbGVnYXRlLmggKi8sCkBAIC0xMTg4LDYgKzEzMDEsNyBAQAogCQkJ
Y2hpbGRyZW4gPSAoCiAJCQkJRjUyQ0E2QkQwMkRGOUQwRjAxODYzNUNBIC8qIEhUTUwgKi8sCiAJ
CQkJNTFFOTRDMDcwNkMwMkNBMzAwQTlCMDlFIC8qIFBERiAqLywKKwkJCQlBMTBDMUQ3OTE4MjAz
MDE5MDAzNjg4M0EgLyogaW9zICovLAogCQkJCTgzNzM0MzVBMDYyNEVFMEQwMEYzQjI4OSAvKiBX
ZWJBcmNoaXZlLmggKi8sCiAJCQkJODM3MzQzNUIwNjI0RUUwRDAwRjNCMjg5IC8qIFdlYkFyY2hp
dmUubW0gKi8sCiAJCQkJNDRCQjhCMTMxMjQxQTAyMjAwMUUzQTIyIC8qIFdlYkFyY2hpdmVJbnRl
cm5hbC5oICovLApAQCAtMTI5MCw2ICsxNDA0LDEwOSBAQAogCQkJdGFiV2lkdGggPSA0OwogCQkJ
dXNlc1RhYnMgPSAwOwogCQl9OworCQlBMTBDMUQwRjE4MjAyRjdBMDAzNjg4M0EgLyogaW9zICov
ID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlBMTBDMUQxMDE4
MjAyRjlDMDAzNjg4M0EgLyogV2ViRGVmYXVsdEZvcm1EZWxlZ2F0ZS5oICovLAorCQkJCUExMEMx
RDExMTgyMDJGOUMwMDM2ODgzQSAvKiBXZWJEZWZhdWx0Rm9ybURlbGVnYXRlLm0gKi8sCisJCQkJ
QTEwQzFEMTIxODIwMkY5QzAwMzY4ODNBIC8qIFdlYkRlZmF1bHRGcmFtZUxvYWREZWxlZ2F0ZS5o
ICovLAorCQkJCUExMEMxRDEzMTgyMDJGOUMwMDM2ODgzQSAvKiBXZWJEZWZhdWx0RnJhbWVMb2Fk
RGVsZWdhdGUubSAqLywKKwkJCQlBMTBDMUQxNDE4MjAyRjlDMDAzNjg4M0EgLyogV2ViRGVmYXVs
dFJlc291cmNlTG9hZERlbGVnYXRlLmggKi8sCisJCQkJQTEwQzFEMTUxODIwMkY5QzAwMzY4ODNB
IC8qIFdlYkRlZmF1bHRSZXNvdXJjZUxvYWREZWxlZ2F0ZS5tICovLAorCQkJCUExMEMxRDE2MTgy
MDJGOUMwMDM2ODgzQSAvKiBXZWJEZWZhdWx0VUlLaXREZWxlZ2F0ZS5oICovLAorCQkJCUExMEMx
RDE3MTgyMDJGOUMwMDM2ODgzQSAvKiBXZWJEZWZhdWx0VUlLaXREZWxlZ2F0ZS5tICovLAorCQkJ
KTsKKwkJCW5hbWUgPSBpb3M7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQlB
MTBDMUQyMDE4MjAyRkFGMDAzNjg4M0EgLyogaW9zICovID0geworCQkJaXNhID0gUEJYR3JvdXA7
CisJCQljaGlsZHJlbiA9ICgKKwkJCQlBMTBDMUQyMTE4MjAyRkM1MDAzNjg4M0EgLyogRW1vamlG
YWxsYmFja0ZvbnRTZWxlY3Rvci5jcHAgKi8sCisJCQkJQTEwQzFEMjIxODIwMkZDNTAwMzY4ODNB
IC8qIEVtb2ppRmFsbGJhY2tGb250U2VsZWN0b3IuaCAqLywKKwkJCQlBMTBDMUQyMzE4MjAyRkM1
MDAzNjg4M0EgLyogTWVtb3J5TWVhc3VyZS5oICovLAorCQkJCUExMEMxRDI0MTgyMDJGQzUwMDM2
ODgzQSAvKiBNZW1vcnlNZWFzdXJlLm1tICovLAorCQkJCUExMEMxRDI1MTgyMDJGQzUwMDM2ODgz
QSAvKiBXZWJHZW9sb2NhdGlvbkNvcmVMb2NhdGlvblByb3ZpZGVyLmggKi8sCisJCQkJQTEwQzFE
MjYxODIwMkZDNTAwMzY4ODNBIC8qIFdlYkdlb2xvY2F0aW9uQ29yZUxvY2F0aW9uUHJvdmlkZXIu
bW0gKi8sCisJCQkJQTEwQzFEMjcxODIwMkZDNTAwMzY4ODNBIC8qIFdlYkdlb2xvY2F0aW9uUHJv
dmlkZXJJT1MuaCAqLywKKwkJCQlBMTBDMUQyODE4MjAyRkM1MDAzNjg4M0EgLyogV2ViR2VvbG9j
YXRpb25Qcm92aWRlcklPUy5tbSAqLywKKwkJCQlBMTBDMUQyOTE4MjAyRkM1MDAzNjg4M0EgLyog
V2ViTlNTdHJpbmdEcmF3aW5nLmggKi8sCisJCQkJQTEwQzFEMkExODIwMkZDNTAwMzY4ODNBIC8q
IFdlYk5TU3RyaW5nRHJhd2luZy5tbSAqLywKKwkJCQlBMTBDMUQyQjE4MjAyRkM1MDAzNjg4M0Eg
LyogV2ViTlNTdHJpbmdFeHRyYXNJT1MuaCAqLywKKwkJCQlBMTBDMUQyQzE4MjAyRkM1MDAzNjg4
M0EgLyogV2ViTlNTdHJpbmdFeHRyYXNJT1MubSAqLywKKwkJCQlBMTBDMUQyRDE4MjAyRkM1MDAz
Njg4M0EgLyogV2ViTlNTdHJpbmdFeHRyYXNJUGhvbmUuaCAqLywKKwkJCQlBMTBDMUQyRTE4MjAy
RkM1MDAzNjg4M0EgLyogV2ViVUlLaXRTdXBwb3J0LmggKi8sCisJCQkJQTEwQzFEMkYxODIwMkZD
NTAwMzY4ODNBIC8qIFdlYlVJS2l0U3VwcG9ydC5tbSAqLywKKwkJCSk7CisJCQluYW1lID0gaW9z
OworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJQTEwQzFEM0YxODIwMkZEQzAw
MzY4ODNBIC8qIGlvcyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAo
CisJCQkJQTEwQzFENDAxODIwMkZFRjAwMzY4ODNBIC8qIFdlYlNRTGl0ZURhdGFiYXNlVHJhY2tl
ckNsaWVudC5oICovLAorCQkJCUExMEMxRDQxMTgyMDJGRUYwMDM2ODgzQSAvKiBXZWJTUUxpdGVE
YXRhYmFzZVRyYWNrZXJDbGllbnQubW0gKi8sCisJCQkpOworCQkJbmFtZSA9IGlvczsKKwkJCXNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCUExMEMxRDQ0MTgyMDJGRkIwMDM2ODgzQSAv
KiBpb3MgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCUEx
MEMxRDQ1MTgyMDMwMEUwMDM2ODgzQSAvKiBQb3B1cE1lbnVJT1MuaCAqLywKKwkJCQlBMTBDMUQ0
NjE4MjAzMDBFMDAzNjg4M0EgLyogUG9wdXBNZW51SU9TLm1tICovLAorCQkJCUExMEMxRDQ3MTgy
MDMwMEUwMDM2ODgzQSAvKiBTZWFyY2hQb3B1cE1lbnVJT1MuY3BwICovLAorCQkJCUExMEMxRDQ4
MTgyMDMwMEUwMDM2ODgzQSAvKiBTZWFyY2hQb3B1cE1lbnVJT1MuaCAqLywKKwkJCQlBMTBDMUQ0
OTE4MjAzMDBFMDAzNjg4M0EgLyogV2ViQ2FyZXRDaGFuZ2VMaXN0ZW5lci5oICovLAorCQkJCUEx
MEMxRDRBMTgyMDMwMEUwMDM2ODgzQSAvKiBXZWJDaHJvbWVDbGllbnRJT1MuaCAqLywKKwkJCQlB
MTBDMUQ0QjE4MjAzMDBFMDAzNjg4M0EgLyogV2ViQ2hyb21lQ2xpZW50SU9TLm1tICovLAorCQkJ
CUExMEMxRDRDMTgyMDMwMEUwMDM2ODgzQSAvKiBXZWJEaXNrSW1hZ2VDYWNoZUNsaWVudElPUy5o
ICovLAorCQkJCUExMEMxRDREMTgyMDMwMEUwMDM2ODgzQSAvKiBXZWJEaXNrSW1hZ2VDYWNoZUNs
aWVudElPUy5tbSAqLywKKwkJCQlBMTBDMUQ0RTE4MjAzMDBFMDAzNjg4M0EgLyogV2ViRml4ZWRQ
b3NpdGlvbkNvbnRlbnQuaCAqLywKKwkJCQlBMTBDMUQ0RjE4MjAzMDBFMDAzNjg4M0EgLyogV2Vi
Rml4ZWRQb3NpdGlvbkNvbnRlbnQubW0gKi8sCisJCQkJQTEwQzFENTAxODIwMzAwRTAwMzY4ODNB
IC8qIFdlYkZpeGVkUG9zaXRpb25Db250ZW50SW50ZXJuYWwuaCAqLywKKwkJCQlBMTBDMUQ1MTE4
MjAzMDBFMDAzNjg4M0EgLyogV2ViRnJhbWVJT1MuaCAqLywKKwkJCQlBMTBDMUQ1MjE4MjAzMDBF
MDAzNjg4M0EgLyogV2ViRnJhbWVJT1MubW0gKi8sCisJCQkJQTEwQzFENTMxODIwMzAwRTAwMzY4
ODNBIC8qIFdlYkZyYW1lSVBob25lLmggKi8sCisJCQkJQTEwQzFENTQxODIwMzAwRTAwMzY4ODNB
IC8qIFdlYkdlb2xvY2F0aW9uLm1tICovLAorCQkJCUExMEMxRDU1MTgyMDMwMEUwMDM2ODgzQSAv
KiBXZWJHZW9sb2NhdGlvbkludGVybmFsLmggKi8sCisJCQkJQTEwQzFENTYxODIwMzAwRTAwMzY4
ODNBIC8qIFdlYkdlb2xvY2F0aW9uUHJpdmF0ZS5oICovLAorCQkJCUExMEMxRDU3MTgyMDMwMEUw
MDM2ODgzQSAvKiBXZWJJbnNwZWN0b3JDbGllbnRJT1MubW0gKi8sCisJCQkJQTEwQzFENTgxODIw
MzAwRTAwMzY4ODNBIC8qIFdlYk1JTUVUeXBlUmVnaXN0cnkuaCAqLywKKwkJCQlBMTBDMUQ1OTE4
MjAzMDBFMDAzNjg4M0EgLyogV2ViTUlNRVR5cGVSZWdpc3RyeS5tbSAqLywKKwkJCQlBMTBDMUQ1
QTE4MjAzMDBFMDAzNjg4M0EgLyogV2ViU2VsZWN0aW9uUmVjdC5oICovLAorCQkJCUExMEMxRDVC
MTgyMDMwMEUwMDM2ODgzQSAvKiBXZWJTZWxlY3Rpb25SZWN0Lm0gKi8sCisJCQkJQTEwQzFENUMx
ODIwMzAwRTAwMzY4ODNBIC8qIFdlYlZpc2libGVQb3NpdGlvbi5oICovLAorCQkJCUExMEMxRDVE
MTgyMDMwMEUwMDM2ODgzQSAvKiBXZWJWaXNpYmxlUG9zaXRpb24ubW0gKi8sCisJCQkJQTEwQzFE
NUUxODIwMzAwRTAwMzY4ODNBIC8qIFdlYlZpc2libGVQb3NpdGlvbkludGVybmFsLmggKi8sCisJ
CQkpOworCQkJbmFtZSA9IGlvczsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJ
CUExMEMxRDc5MTgyMDMwMTkwMDM2ODgzQSAvKiBpb3MgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91
cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCUExMEMxRDdBMTgyMDMwM0QwMDM2ODgzQSAvKiBXZWJG
cmFtZVZpZXdXQUtDb21wYXRpYmlsaXR5Lm0gKi8sCisJCQkJQTEwQzFEN0IxODIwMzAzRDAwMzY4
ODNBIC8qIFdlYk1haWxEZWxlZ2F0ZS5oICovLAorCQkJCUExMEMxRDdDMTgyMDMwM0QwMDM2ODgz
QSAvKiBXZWJQbGFpbldoaXRlVmlldy5oICovLAorCQkJCUExMEMxRDdEMTgyMDMwM0QwMDM2ODgz
QSAvKiBXZWJQbGFpbldoaXRlVmlldy5tbSAqLywKKwkJCQlBMTBDMUQ3RTE4MjAzMDNEMDAzNjg4
M0EgLyogV2ViVUlLaXREZWxlZ2F0ZS5oICovLAorCQkJKTsKKwkJCW5hbWUgPSBpb3M7CisJCQlz
b3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQlBMTBDMUQ4NDE4MjAzMDQ1MDAzNjg4M0Eg
LyogaW9zICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlB
MTBDMUQ4NTE4MjAzMDVFMDAzNjg4M0EgLyogV2ViUERGVmlld0lPUy5oICovLAorCQkJCUExMEMx
RDg2MTgyMDMwNUUwMDM2ODgzQSAvKiBXZWJQREZWaWV3SU9TLm1tICovLAorCQkJCUExMEMxRDg3
MTgyMDMwNUUwMDM2ODgzQSAvKiBXZWJQREZWaWV3SVBob25lLmggKi8sCisJCQkJQTEwQzFEODgx
ODIwMzA1RTAwMzY4ODNBIC8qIFdlYlBERlZpZXdQbGFjZWhvbGRlci5oICovLAorCQkJCUExMEMx
RDg5MTgyMDMwNUUwMDM2ODgzQSAvKiBXZWJQREZWaWV3UGxhY2Vob2xkZXIubW0gKi8sCisJCQkp
OworCQkJbmFtZSA9IGlvczsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCUE1
MjE0RkJGMTNCOTc1OTYwMDAwMTVFRiAvKiByZW1vdGUgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91
cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtMTM0MSw2ICsxNTU4LDcgQEAKIAkJRjVCMzZCNDAwMjgx
REU4NzAxODYzNUNCIC8qIFdlYkNvcmVTdXBwb3J0ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7
CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlBMTBDMUQ0NDE4MjAyRkZCMDAzNjg4M0EgLyogaW9zICov
LAogCQkJCTA3MEY1NDk5MTdGMUU0MkIwMDE2OUUwNCAvKiBXZWJVc2VyTWVkaWFDbGllbnQuaCAq
LywKIAkJCQkwNzBGNTQ5QTE3RjFFNDJCMDAxNjlFMDQgLyogV2ViVXNlck1lZGlhQ2xpZW50Lm1t
ICovLAogCQkJCUI4Mjk1OEQxMTMyNzA3RDAwMDBEMEU3OSAvKiBDb3JyZWN0aW9uUGFuZWwuaCAq
LywKQEAgLTE0ODAsMTQgKzE2OTgsNiBAQAogCQkJdGFiV2lkdGggPSA0OwogCQkJdXNlc1RhYnMg
PSAwOwogCQl9OwotCQlGRUQxNDAwQTBDRUNDRDY4MDBEODk0NjYgLyogaW9zICovID0gewotCQkJ
aXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQk0NEExMUZCRTBFQkE5M0IyMDA5
RjY5RUQgLyogV2ViQ29yZVN1cHBvcnQgKi8sCi0JCQkpOwotCQkJcGF0aCA9IGlvczsKLQkJCXNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07CiAvKiBFbmQgUEJYR3JvdXAgc2VjdGlvbiAqLwog
CiAvKiBCZWdpbiBQQlhIZWFkZXJzQnVpbGRQaGFzZSBzZWN0aW9uICovCkBAIC0xNDk4LDEyICsx
NzA4LDEyIEBACiAJCQkJMUE2MDUxOTIxNzUwMkE1RDAwQkM2MkY1IC8qIEJpbmFyeVByb3BlcnR5
TGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM5ODEwNkEwODI0QkYwMTAwOERGMDM4IC8qIENh
cmJvblV0aWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5Mzk4MTA2NTA4MjRCRjAxMDA4REYwMzgg
LyogQ2FyYm9uV2luZG93QWRhcHRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTEwQzFEM0MxODIw
MkZDNTAwMzY4ODNBIC8qIFdlYk5TU3RyaW5nRXh0cmFzSVBob25lLmggaW4gSGVhZGVycyAqLywK
IAkJCQk5Mzk4MTA2NjA4MjRCRjAxMDA4REYwMzggLyogQ2FyYm9uV2luZG93Q29udGVudFZpZXcu
aCBpbiBIZWFkZXJzICovLAogCQkJCTkzOTgxMDY3MDgyNEJGMDEwMDhERjAzOCAvKiBDYXJib25X
aW5kb3dGcmFtZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjgyOTU4RDMxMzI3MDdEMDAwMEQwRTc5
IC8qIENvcnJlY3Rpb25QYW5lbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE2MDUxOTQxNzUwMkE1
RDAwQkM2MkY1IC8qIEhpc3RvcnlQcm9wZXJ0eUxpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTkz
OTgxMDY4MDgyNEJGMDEwMDhERjAzOCAvKiBISVZpZXdBZGFwdGVyLmggaW4gSGVhZGVycyAqLywK
LQkJCQlBNUM1NjZCRDEyN0EzQUU1MDBFOEEzRkYgLyogV2ViRGlza0ltYWdlQ2FjaGVDbGllbnRJ
T1MuaCBpbiBIZWFkZXJzICovLAogCQkJCTA3MEY1NDlCMTdGMUU0MkIwMDE2OUUwNCAvKiBXZWJV
c2VyTWVkaWFDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzOTgxMDY5MDgyNEJGMDEwMDhE
RjAzOCAvKiBISVdlYlZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBOERFRDUwMEVFODhCOEEw
MEYyNTAyMiAvKiBIb3N0ZWROZXRzY2FwZVBsdWdpblN0cmVhbS5oIGluIEhlYWRlcnMgKi8sCkBA
IC0xNTExLDEzICsxNzIxLDE4IEBACiAJCQkJMUFBRjVDRUMwRURERTFGRTAwOEQ4ODNEIC8qIE5l
dHNjYXBlUGx1Z2luSG9zdFByb3h5LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUFGNUNFRTBFRERF
MUZFMDA4RDg4M0QgLyogTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5LmggaW4gSGVhZGVycyAq
LywKIAkJCQk3QzAxQ0I4NTE3MzQzNUM5MDBDNUQ4MDcgLyogUG9wdXBNZW51TWFjLmggaW4gSGVh
ZGVycyAqLywKKwkJCQlBMTBDMUQxRTE4MjAyRjlDMDAzNjg4M0EgLyogV2ViRGVmYXVsdFVJS2l0
RGVsZWdhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMkRCRTlGMEYyNTFFM0EwMDM2RjhBNiAv
KiBQcm94eUluc3RhbmNlLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMTBDMUQ2NjE4MjAzMDBFMDAz
Njg4M0EgLyogV2ViRGlza0ltYWdlQ2FjaGVDbGllbnRJT1MuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUUxNjk4MzYyMTEzNDZEMUIwMDg5NDExNSAvKiBQcm94eVJ1bnRpbWVPYmplY3QuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTdDMDFDQjg3MTczNDM1QzkwMEM1RDgwNyAvKiBTZWFyY2hQb3B1cE1lbnVN
YWMuaCBpbiBIZWFkZXJzICovLAorCQkJCUExMEMxRDZGMTgyMDMwMEUwMDM2ODgzQSAvKiBXZWJH
ZW9sb2NhdGlvbkludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRURBMTJEQzE1MkNCRTY4
MDBEOUUwOEQgLyogV2ViQWx0ZXJuYXRpdmVUZXh0Q2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCNkNFNUMyNTEwMEJDNUY1MDAyMTk5MzYgLyogV2ViQXBwbGljYXRpb25DYWNoZS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJQTEwQzFENzIxODIwMzAwRTAwMzY4ODNBIC8qIFdlYk1JTUVUeXBlUmVn
aXN0cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1REVGQzEzMTFENTM0NEIwMDg4NTI3MyAvKiBX
ZWJBcHBsaWNhdGlvbkNhY2hlUXVvdGFNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5Mzk4
MTA5QTA4MjRCRjAxMDA4REYwMzggLyogV2ViQXJjaGl2ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
QTEwQzFENzYxODIwMzAwRTAwMzY4ODNBIC8qIFdlYlZpc2libGVQb3NpdGlvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNDRCQjhCMTQxMjQxQTAyMjAwMUUzQTIyIC8qIFdlYkFyY2hpdmVJbnRlcm5h
bC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM5ODEwMjkwODI0QkYwMTAwOERGMDM4IC8qIFdlYkF1
dGhlbnRpY2F0aW9uUGFuZWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzOTgxMDExMDgyNEJGMDEw
MDhERjAzOCAvKiBXZWJCYWNrRm9yd2FyZExpc3QuaCBpbiBIZWFkZXJzICovLApAQCAtMTUyNSw2
ICsxNzQwLDcgQEAKIAkJCQkyMkYyMTlDQzA4RDIzNjczMDAzMEUwNzggLyogV2ViQmFja0Zvcndh
cmRMaXN0UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE0REY1RTQwRUM4RDEwNDAwNkJE
NEI0IC8qIFdlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCTkz
OTgxMDJFMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJCYXNlUGx1Z2luUGFja2FnZS5oIGluIEhlYWRl
cnMgKi8sCisJCQkJQTEwQzFEOEExODIwMzA1RTAwMzY4ODNBIC8qIFdlYlBERlZpZXdJT1MuaCBp
biBIZWFkZXJzICovLAogCQkJCTUyNDFBREY1MEIxQkM0OEEwMDQwMTJCRCAvKiBXZWJDYWNoZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNTFDQkZDQUQwRDEwRTZDNTAwMkRCRjUxIC8qIFdlYkNhY2hl
ZEZyYW1lUGxhdGZvcm1EYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEQ4MjUyRjBBRjk1NTA5
MDAwNEYwNTcgLyogV2ViQ2hyb21lQ2xpZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTE1NjQsMTcg
KzE3ODAsMjEgQEAKIAkJCQk5MzRDMTE2NzBEODcxMEJCMDBDMzJBQkQgLyogV2ViRHluYW1pY1Nj
cm9sbEJhcnNWaWV3SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzOTgxMDlFMDgyNEJG
MDEwMDhERjAzOCAvKiBXZWJFZGl0aW5nRGVsZWdhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFD
OENCMDdBMEFFOTgzMEMwMEIxRjZFOSAvKiBXZWJFZGl0aW5nRGVsZWdhdGVQcml2YXRlLmggaW4g
SGVhZGVycyAqLywKKwkJCQlBMTBDMUQxODE4MjAyRjlDMDAzNjg4M0EgLyogV2ViRGVmYXVsdEZv
cm1EZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNEJGOTlGOTAwQUUwNTBCQzAwODE1QzJC
IC8qIFdlYkVkaXRvckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJREQ4OTY4MjAwOUFBODcy
NDAwOTdFN0YwIC8qIFdlYkVsZW1lbnREaWN0aW9uYXJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQk5
Mzk4MTA1MjA4MjRCRjAxMDA4REYwMzggLyogV2ViRm9ybURlbGVnYXRlLmggaW4gSGVhZGVycyAq
LywKIAkJCQk5Mzk4MTA2NDA4MjRCRjAxMDA4REYwMzggLyogV2ViRm9ybURlbGVnYXRlUHJpdmF0
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM5ODEwNTMwODI0QkYwMTAwOERGMDM4IC8qIFdlYkZy
YW1lLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMTBDMUQxQTE4MjAyRjlDMDAzNjg4M0EgLyogV2Vi
RGVmYXVsdEZyYW1lTG9hZERlbGVnYXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5Mzk4MTA5QzA4
MjRCRjAxMDA4REYwMzggLyogV2ViRnJhbWVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OTM5ODEwNUIwODI0QkYwMTAwOERGMDM4IC8qIFdlYkZyYW1lTG9hZERlbGVnYXRlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlDMEI4OEU4QjEwQTA4RjNEMDBGQkIzRjUgLyogV2ViRnJhbWVMb2FkRGVs
ZWdhdGVQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzE2MzNFQjBBRURGRjkzMDA2MkI5
MkQgLyogV2ViRnJhbWVMb2FkZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzOTFGMjc1
MTIxQjM4QkQwMEVCRjdFOCAvKiBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmggaW4gSGVhZGVy
cyAqLywKKwkJCQlBMTBDMUQ0MjE4MjAyRkVGMDAzNjg4M0EgLyogV2ViU1FMaXRlRGF0YWJhc2VU
cmFja2VyQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5Mzk4MTA1NDA4MjRCRjAxMDA4REYw
MzggLyogV2ViRnJhbWVQcml2YXRlLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMTBDMUQ2MjE4MjAz
MDBFMDAzNjg4M0EgLyogU2VhcmNoUG9wdXBNZW51SU9TLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
Mzk4MTA2RTA4MjRCRjAxMDA4REYwMzggLyogV2ViRnJhbWVWaWV3LmggaW4gSGVhZGVycyAqLywK
IAkJCQk5Mzk4MTA2RjA4MjRCRjAxMDA4REYwMzggLyogV2ViRnJhbWVWaWV3SW50ZXJuYWwuaCBp
biBIZWFkZXJzICovLAogCQkJCTkzOTgxMEFGMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJGcmFtZVZp
ZXdQcml2YXRlLmggaW4gSGVhZGVycyAqLywKQEAgLTE2MDAsNiArMTgyMCw3IEBACiAJCQkJNTFC
MkExMDAwQURCMTVEMDAwMkE5QkVFIC8qIFdlYkljb25EYXRhYmFzZURlbGVnYXRlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5MzA0QjMwMDBCMDIzNDE1MDBGNzg1MEQgLyogV2ViSWNvbkRhdGFiYXNl
SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzOTgxMDE5MDgyNEJGMDEwMDhERjAzOCAv
KiBXZWJJY29uRGF0YWJhc2VQcml2YXRlLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMTBDMUQ2NDE4
MjAzMDBFMDAzNjg4M0EgLyogV2ViQ2hyb21lQ2xpZW50SU9TLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk1RDdCRjgxNDBDMkExRDkwMDA4Q0UwNkQgLyogV2ViSW5zcGVjdG9yLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwNjY5M0REQzBCRkJBODUyMDAyMTYwNzIgLyogV2ViSW5zcGVjdG9yQ2xpZW50Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBNTdFQjc4RjEzQjk3QTRFMDA4RDY5MUQgLyogV2ViSW5zcGVj
dG9yQ2xpZW50UmVnaXN0cnkuaCBpbiBIZWFkZXJzICovLApAQCAtMTYxNiw5ICsxODM3LDExIEBA
CiAJCQkJOTM5ODEwODUwODI0QkYwMTAwOERGMDM4IC8qIFdlYktleUdlbmVyYXRvci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOTM5ODEwMUIwODI0QkYwMTAwOERGMDM4IC8qIFdlYktpdC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOTM5ODEwMUMwODI0QkYwMTAwOERGMDM4IC8qIFdlYktpdEVycm9ycy5o
IGluIEhlYWRlcnMgKi8sCisJCQkJQTEwQzFEOEMxODIwMzA1RTAwMzY4ODNBIC8qIFdlYlBERlZp
ZXdJUGhvbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzOTgxMDZEMDgyNEJGMDEwMDhERjAzOCAv
KiBXZWJLaXRFcnJvcnNQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRDhCRkNFODE1NTMx
MjI0MDA1QUZCMjUgLyogV2ViS2l0RnVsbFNjcmVlbkxpc3RlbmVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQk5Mzk4MTAxRDA4MjRCRjAxMDA4REYwMzggLyogV2ViS2l0TG9nZ2luZy5oIGluIEhlYWRl
cnMgKi8sCisJCQkJQTEwQzFEMzgxODIwMkZDNTAwMzY4ODNBIC8qIFdlYk5TU3RyaW5nRHJhd2lu
Zy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM5ODEwMUUwODI0QkYwMTAwOERGMDM4IC8qIFdlYktp
dE5TU3RyaW5nRXh0cmFzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUFGNTg5NDBFRENDRjE1MDA4
RDg4M0QgLyogV2ViS2l0UGx1Z2luQWdlbnQuZGVmcyBpbiBIZWFkZXJzICovLAogCQkJCTFBQUY1
ODk1MEVEQ0NGMTUwMDhEODgzRCAvKiBXZWJLaXRQbHVnaW5BZ2VudFJlcGx5LmRlZnMgaW4gSGVh
ZGVycyAqLywKQEAgLTE2MjYsOSArMTg0OSwxMiBAQAogCQkJCTFBQUY1ODk3MEVEQ0NGMTUwMDhE
ODgzRCAvKiBXZWJLaXRQbHVnaW5Ib3N0LmRlZnMgaW4gSGVhZGVycyAqLywKIAkJCQkxQUFGNTg5
ODBFRENDRjE1MDA4RDg4M0QgLyogV2ViS2l0UGx1Z2luSG9zdFR5cGVzLmRlZnMgaW4gSGVhZGVy
cyAqLywKIAkJCQkxQUFGNUQwOTBFRERFNzFEMDA4RDg4M0QgLyogV2ViS2l0UGx1Z2luSG9zdFR5
cGVzLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMTBDMUQzMTE4MjAyRkM1MDAzNjg4M0EgLyogRW1v
amlGYWxsYmFja0ZvbnRTZWxlY3Rvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTEwQzFEMUMxODIw
MkY5QzAwMzY4ODNBIC8qIFdlYkRlZmF1bHRSZXNvdXJjZUxvYWREZWxlZ2F0ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJOTM5ODEwNDcwODI0QkYwMTAwOERGMDM4IC8qIFdlYktpdFByZWZpeC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJOTM5ODEwMUYwODI0QkYwMTAwOERGMDM4IC8qIFdlYktpdFN0YXRp
c3RpY3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzOTgxMDIwMDgyNEJGMDEwMDhERjAzOCAvKiBX
ZWJLaXRTdGF0aXN0aWNzUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTEwQzFEM0QxODIw
MkZDNTAwMzY4ODNBIC8qIFdlYlVJS2l0U3VwcG9ydC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM5
ODEwN0EwODI0QkYwMTAwOERGMDM4IC8qIFdlYktpdFN5c3RlbUJpdHMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTFDMEQ0MDg3MEFDMUM4RjQwMDA5QzExMyAvKiBXZWJLaXRWZXJzaW9uQ2hlY2tzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5Mzk4MTA3OTA4MjRCRjAxMDA4REYwMzggLyogV2ViTG9jYWxp
emFibGVTdHJpbmdzLmggaW4gSGVhZGVycyAqLywKQEAgLTE2MzcsMTggKzE4NjMsMjMgQEAKIAkJ
CQkwQUI3NTIzNzBGQTJFNERCMDBEN0NCQjEgLyogV2ViTmV0c2NhcGVDb250YWluZXJDaGVja0Nv
bnRleHRJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQkwQUVCRkY2MzBGOUZBOEJFMDAwRDQ4NkIg
LyogV2ViTmV0c2NhcGVDb250YWluZXJDaGVja1ByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTFBRUE2NkQ0MERDNkIxRkYwMDNEMTJCRiAvKiBXZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxl
ci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTEwQzFEMzYxODIwMkZDNTAwMzY4ODNBIC8qIFdlYkdl
b2xvY2F0aW9uUHJvdmlkZXJJT1MuaCBpbiBIZWFkZXJzICovLAorCQkJCUExMEMxRDYzMTgyMDMw
MEUwMDM2ODgzQSAvKiBXZWJDYXJldENoYW5nZUxpc3RlbmVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxQUVBNjZEODBEQzZCMjA5MDAzRDEyQkYgLyogV2ViTmV0c2NhcGVQbHVnaW5FdmVudEhhbmRs
ZXJDYXJib24uaCBpbiBIZWFkZXJzICovLAogCQkJCTFBRUE2QTUwMERDOENFMkYwMDNEMTJCRiAv
KiBXZWJOZXRzY2FwZVBsdWdpbkV2ZW50SGFuZGxlckNvY29hLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlBMTBDMUQ1RjE4MjAzMDBFMDAzNjg4M0EgLyogUG9wdXBNZW51SU9TLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBNTYwOTQ2NjE0RDhBRDI2MDA3OTlBOEEgLyogV2ViSW5kaWNhdGVMYXllci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJOTM5ODEwMzEwODI0QkYwMTAwOERGMDM4IC8qIFdlYk5ldHNjYXBl
UGx1Z2luUGFja2FnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM5ODEwMkIwODI0QkYwMTAwOERG
MDM4IC8qIFdlYk5ldHNjYXBlUGx1Z2luU3RyZWFtLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTRE
RjUyMjBFQzhDNzREMDA2QkQ0QjQgLyogV2ViTmV0c2NhcGVQbHVnaW5WaWV3LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxQzY4RjY2RjA5NUI1RkMxMDBDMjk4NEUgLyogV2ViTm9kZUhpZ2hsaWdodC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTU2ODdCREExMzVCNzkxQTAwNzRDQkNCIC8qIFdlYk5vZGVI
aWdobGlnaHRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTEwQzFEODMxODIwMzAzRDAwMzY4ODNB
IC8qIFdlYlVJS2l0RGVsZWdhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFDNjhGNjcxMDk1QjVG
QzEwMEMyOTg0RSAvKiBXZWJOb2RlSGlnaGxpZ2h0Vmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MzEyRTJGRTUxNEU0ODE4MjAwN0NDQTE4IC8qIFdlYk5vdGlmaWNhdGlvbi5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMzFDMTFBNkUxNDc2NTUyRTAwNDlBNENDIC8qIFdlYk5vdGlmaWNhdGlvbkNsaWVu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEyRTJGRTkxNEU0ODIxNTAwN0NDQTE4IC8qIFdlYk5v
dGlmaWNhdGlvbkludGVybmFsLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMTBDMUQ3ODE4MjAzMDBF
MDAzNjg4M0EgLyogV2ViVmlzaWJsZVBvc2l0aW9uSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAog
CQkJCUVERTk4MzgwMEJDREY1RkUwMEZEQUUyOCAvKiBXZWJOU0FycmF5RXh0cmFzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5Mzk4MTAyMTA4MjRCRjAxMDA4REYwMzggLyogV2ViTlNDb250cm9sRXh0
cmFzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5Mzk4MTA4MjA4MjRCRjAxMDA4REYwMzggLyogV2Vi
TlNEYXRhRXh0cmFzLmggaW4gSGVhZGVycyAqLywKQEAgLTE2NjEsNiArMTg5Miw4IEBACiAJCQkJ
OTM5ODEwMjMwODI0QkYwMTAwOERGMDM4IC8qIFdlYk5TUGFzdGVib2FyZEV4dHJhcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOTM5ODEwODcwODI0QkYwMTAwOERGMDM4IC8qIFdlYk5TUHJpbnRPcGVy
YXRpb25FeHRyYXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzOTgxMDdFMDgyNEJGMDEwMDhERjAz
OCAvKiBXZWJOU1VSTEV4dHJhcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTEwQzFEOEQxODIwMzA1
RTAwMzY4ODNBIC8qIFdlYlBERlZpZXdQbGFjZWhvbGRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
QTEwQzFENkExODIwMzAwRTAwMzY4ODNBIC8qIFdlYkZpeGVkUG9zaXRpb25Db250ZW50SW50ZXJu
YWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1RTBGODg0MDg1MDA5MTcwMDdFNUNCOSAvKiBXZWJO
U1VSTFJlcXVlc3RFeHRyYXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1RTBGOUU2MDg1MDBGMjMw
MDdFNUNCOSAvKiBXZWJOU1VzZXJEZWZhdWx0c0V4dHJhcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OTM5ODEwMjQwODI0QkYwMTAwOERGMDM4IC8qIFdlYk5TVmlld0V4dHJhcy5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0xNjczLDYgKzE5MDYsNyBAQAogCQkJCTFBQTg3OUI2MTFDQkU5QkYwMDNDNjY0RiAv
KiBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzOTgxMDM1MDgy
NEJGMDEwMDhERjAzOCAvKiBXZWJQbHVnaW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTkzOTgxMDM2
MDgyNEJGMDEwMDhERjAzOCAvKiBXZWJQbHVnaW5Db250YWluZXIuaCBpbiBIZWFkZXJzICovLAor
CQkJCUExMEMxRDgwMTgyMDMwM0QwMDM2ODgzQSAvKiBXZWJNYWlsRGVsZWdhdGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTkzOTgxMEIxMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJQbHVnaW5Db250YWlu
ZXJDaGVjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM5ODEwQjAwODI0QkYwMTAwOERGMDM4IC8q
IFdlYlBsdWdpbkNvbnRhaW5lclByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzOTgxMDM3
MDgyNEJGMDEwMDhERjAzOCAvKiBXZWJQbHVnaW5Db250cm9sbGVyLmggaW4gSGVhZGVycyAqLywK
QEAgLTE2ODIsNyArMTkxNiw5IEBACiAJCQkJMUE3N0IwMkUwRUU3NzMwNTAwQzhBMUY5IC8qIFdl
YlBsdWdpblJlcXVlc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTIyNDEwMEYzMDkxODE4RDkwMEQy
RDI2NiAvKiBXZWJQbHVnaW5zUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM5ODEwM0Ew
ODI0QkYwMTAwOERGMDM4IC8qIFdlYlBsdWdpblZpZXdGYWN0b3J5LmggaW4gSGVhZGVycyAqLywK
KwkJCQlBMTBDMUQ3MDE4MjAzMDBFMDAzNjg4M0EgLyogV2ViR2VvbG9jYXRpb25Qcml2YXRlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5Mzk4MTBBQzA4MjRCRjAxMDA4REYwMzggLyogV2ViUGx1Z2lu
Vmlld0ZhY3RvcnlQcml2YXRlLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMTBDMUQ2RDE4MjAzMDBF
MDAzNjg4M0EgLyogV2ViRnJhbWVJUGhvbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzOTgxMDcy
MDgyNEJGMDEwMDhERjAzOCAvKiBXZWJQb2xpY3lEZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTM5ODEwNzMwODI0QkYwMTAwOERGMDM4IC8qIFdlYlBvbGljeURlbGVnYXRlUHJpdmF0ZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTM5ODEwQTgwODI0QkYwMTAwOERGMDM4IC8qIFdlYlByZWZl
cmVuY2VLZXlzUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xNjk2LDYgKzE5MzIsNyBAQAog
CQkJCTkzOTgxMDYwMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJSZXNvdXJjZUxvYWREZWxlZ2F0ZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNjU2RDMzM0UwQUYyMUFFOTAwMjEyMTY5IC8qIFdlYlJlc291
cmNlTG9hZERlbGVnYXRlUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM5ODEwODkwODI0
QkYwMTAwOERGMDM4IC8qIFdlYlJlc291cmNlUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
QTEwQzFEM0ExODIwMkZDNTAwMzY4ODNBIC8qIFdlYk5TU3RyaW5nRXh0cmFzSU9TLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk3RTZGRUYwODA4OTg1QTcyMDBDNDRDM0YgLyogV2ViU2NyaXB0RGVidWdE
ZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzAxNjdCRjgwRDdGNUREMDAwMjg2OTZFIC8q
IFdlYlNjcmlwdERlYnVnZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMEIxRjdFODEwQUM4RTMx
MDBDOTI1RDkgLyogV2ViU2NyaXB0V29ybGQuaCBpbiBIZWFkZXJzICovLApAQCAtMTcwNSwxOSAr
MTk0MiwyNSBAQAogCQkJCUJDMjZDNjlFMTBCNzQzRjQwMEI2ODdFRCAvKiBXZWJTZXJpYWxpemVk
SlNWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjY3REQ3RTYxMjVFNDUyNzAwN0JEQ0I4IC8q
IFdlYlNlcmlhbGl6ZWRKU1ZhbHVlUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJM0FFMTVE
NTAxMkRCREVENDAwOTMyM0M4IC8qIFdlYlN0b3JhZ2VNYW5hZ2VySW50ZXJuYWwuaCBpbiBIZWFk
ZXJzICovLAorCQkJCUExMEMxRDY4MTgyMDMwMEUwMDM2ODgzQSAvKiBXZWJGaXhlZFBvc2l0aW9u
Q29udGVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJM0FCMDJCMDAxMkMxMzJCMjAwRkJCNjk0IC8q
IFdlYlN0b3JhZ2VNYW5hZ2VyUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTEwQzFEODEx
ODIwMzAzRDAwMzY4ODNBIC8qIFdlYlBsYWluV2hpdGVWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkzQUJCM0M3QTEzMDlDM0I1MDBFOTNEOTQgLyogV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQuaCBp
biBIZWFkZXJzICovLAogCQkJCTkzOTgxMDI3MDgyNEJGMDEwMDhERjAzOCAvKiBXZWJTdHJpbmdU
cnVuY2F0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRUIxNzhGMDlGODhENTEwMDkxRjhGRiAv
KiBXZWJTeXN0ZW1JbnRlcmZhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzNkEyREVBMEZEMkQw
ODQwMEQzMTJEQiAvKiBXZWJUZXh0Q29tcGxldGlvbkNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTFBNzRBMjhFMEY0Rjc1NDAwMDgyRTIyOCAvKiBXZWJUZXh0SW5wdXRXaW5kb3dDb250
cm9sbGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMTBDMUQzMjE4MjAyRkM1MDAzNjg4M0EgLyog
TWVtb3J5TWVhc3VyZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjgzNEFBRDcwRTY0QjFDNzAwRTI3
MzdDIC8qIFdlYlRleHRJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJREQ3Q0RFRTcwQTIz
QkE5RTAwMDY5OTI4IC8qIFdlYlR5cGVzSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTkz
OTgxMDc1MDgyNEJGMDEwMDhERjAzOCAvKiBXZWJVSURlbGVnYXRlLmggaW4gSGVhZGVycyAqLywK
KwkJCQlBMTBDMUQ2QjE4MjAzMDBFMDAzNjg4M0EgLyogV2ViRnJhbWVJT1MuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTkzOTgxMDgzMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJVSURlbGVnYXRlUHJpdmF0
ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTEwQzFEMzQxODIwMkZDNTAwMzY4ODNBIC8qIFdlYkdl
b2xvY2F0aW9uQ29yZUxvY2F0aW9uUHJvdmlkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzOTgx
MDE1MDgyNEJGMDEwMDhERjAzOCAvKiBXZWJVUkxzV2l0aFRpdGxlcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQzBDNUIzRUUxMTc3QTRBMDAwMkIwQUVGIC8qIFdlYlVzZXJDb250ZW50VVJMUGF0dGVy
bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM5ODEwNzAwODI0QkYwMTAwOERGMDM4IC8qIFdlYlZp
ZXcuaCBpbiBIZWFkZXJzICovLAorCQkJCUExMEMxRDc0MTgyMDMwMEUwMDM2ODgzQSAvKiBXZWJT
ZWxlY3Rpb25SZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzJFNDY0RDBGRDhBOTY4MDBBOUQ5
REUgLyogV2ViVmlld0RhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzOTgxMDlCMDgyNEJGMDEw
MDhERjAzOCAvKiBXZWJWaWV3SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzOTgxMDcx
MDgyNEJGMDEwMDhERjAzOCAvKiBXZWJWaWV3UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0x
OTYzLDE0ICsyMjA2LDE4IEBACiAJCQkJMUFBRjVDRUYwRURERTFGRTAwOEQ4ODNEIC8qIE5ldHNj
YXBlUGx1Z2luSW5zdGFuY2VQcm94eS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzOTgxMEREMDgy
NEJGMDEwMDhERjAzOCAvKiBucGFwaS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFDQ0ZGRDEzMEIx
RjgxRjIwMDJFRTkyNiAvKiBPbGRXZWJBc3NlcnRpb25zLmMgaW4gU291cmNlcyAqLywKKwkJCQlB
MTBDMUQ4RTE4MjAzMDVFMDAzNjg4M0EgLyogV2ViUERGVmlld1BsYWNlaG9sZGVyLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJN0MwMUNCODYxNzM0MzVDOTAwQzVEODA3IC8qIFBvcHVwTWVudU1hYy5t
bSBpbiBTb3VyY2VzICovLAorCQkJCUExMEMxRDc3MTgyMDMwMEUwMDM2ODgzQSAvKiBXZWJWaXNp
YmxlUG9zaXRpb24ubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQTJEQkVBMDBGMjUxRTNBMDAzNkY4
QTYgLyogUHJveHlJbnN0YW5jZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTA3MEY1NDlDMTdGMUU0
MkIwMDE2OUUwNCAvKiBXZWJVc2VyTWVkaWFDbGllbnQubW0gaW4gU291cmNlcyAqLywKIAkJCQlF
MTY5ODM2QzExMzQ2RDU2MDA4OTQxMTUgLyogUHJveHlSdW50aW1lT2JqZWN0Lm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJN0MwMUNCODgxNzM0MzVDOTAwQzVEODA3IC8qIFNlYXJjaFBvcHVwTWVudU1h
Yy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUNFREExMkRCMTUyQ0JFNjgwMEQ5RTA4RCAvKiBXZWJB
bHRlcm5hdGl2ZVRleHRDbGllbnQubW0gaW4gU291cmNlcyAqLywKKwkJCQlBMTBDMUQ2MDE4MjAz
MDBFMDAzNjg4M0EgLyogUG9wdXBNZW51SU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQjZDRTVD
MjQxMDBCQzVDRTAwMjE5OTM2IC8qIFdlYkFwcGxpY2F0aW9uQ2FjaGUubW0gaW4gU291cmNlcyAq
LywKIAkJCQlBNURFRkMxNDExRDUzNDRCMDA4ODUyNzMgLyogV2ViQXBwbGljYXRpb25DYWNoZVF1
b3RhTWFuYWdlci5tbSBpbiBTb3VyY2VzICovLAorCQkJCUExMEMxRDczMTgyMDMwMEUwMDM2ODgz
QSAvKiBXZWJNSU1FVHlwZVJlZ2lzdHJ5Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5ODExMUQw
ODI0QkYwMTAwOERGMDM4IC8qIFdlYkFyY2hpdmUubW0gaW4gU291cmNlcyAqLywKIAkJCQk5Mzk4
MTBDRjA4MjRCRjAxMDA4REYwMzggLyogV2ViQXV0aGVudGljYXRpb25QYW5lbC5tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJOTM5ODEwQkMwODI0QkYwMTAwOERGMDM4IC8qIFdlYkJhY2tGb3J3YXJkTGlz
dC5tbSBpbiBTb3VyY2VzICovLApAQCAtMTk3OCw2ICsyMjI1LDcgQEAKIAkJCQk5Mzk4MTBEMzA4
MjRCRjAxMDA4REYwMzggLyogV2ViQmFzZVBsdWdpblBhY2thZ2UubW0gaW4gU291cmNlcyAqLywK
IAkJCQk1MjQxQURGNjBCMUJDNDhBMDA0MDEyQkQgLyogV2ViQ2FjaGUubW0gaW4gU291cmNlcyAq
LywKIAkJCQkxNEQ4MjUzMDBBRjk1NTA5MDAwNEYwNTcgLyogV2ViQ2hyb21lQ2xpZW50Lm1tIGlu
IFNvdXJjZXMgKi8sCisJCQkJQTEwQzFENzExODIwMzAwRTAwMzY4ODNBIC8qIFdlYkluc3BlY3Rv
ckNsaWVudElPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzOTgxMEVCMDgyNEJGMDEwMDhERjAz
OCAvKiBXZWJDbGlwVmlldy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTA2NUFENUE0MEIwQzMyQzcw
MDVBMkIxRCAvKiBXZWJDb250ZXh0TWVudUNsaWVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkz
OTgxMEJGMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJDb3JlU3RhdGlzdGljcy5tbSBpbiBTb3VyY2Vz
ICovLApAQCAtMTk5NCw3ICsyMjQyLDkgQEAKIAkJCQk1OThBRDkyMjEyMDFDRjEwMDBBQkFFNEUg
LyogV2ViRGV2aWNlT3JpZW50YXRpb24ubW0gaW4gU291cmNlcyAqLywKIAkJCQk1OThBRDkxRTEy
MDFDRUNGMDBBQkFFNEUgLyogV2ViRGV2aWNlT3JpZW50YXRpb25DbGllbnQubW0gaW4gU291cmNl
cyAqLywKIAkJCQk1OThBRDkyODEyMDFDRjMyMDBBQkFFNEUgLyogV2ViRGV2aWNlT3JpZW50YXRp
b25Qcm92aWRlck1vY2subW0gaW4gU291cmNlcyAqLywKKwkJCQlBMTBDMUQ3NTE4MjAzMDBFMDAz
Njg4M0EgLyogV2ViU2VsZWN0aW9uUmVjdC5tIGluIFNvdXJjZXMgKi8sCiAJCQkJNjVGRkI3RkQw
QUQwQjdEMzAwNDhDRDA1IC8qIFdlYkRvY3VtZW50TG9hZGVyTWFjLm1tIGluIFNvdXJjZXMgKi8s
CisJCQkJQTEwQzFEMUIxODIwMkY5QzAwMzY4ODNBIC8qIFdlYkRlZmF1bHRGcmFtZUxvYWREZWxl
Z2F0ZS5tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5ODExMUMwODI0QkYwMTAwOERGMDM4IC8qIFdl
YkRPTU9wZXJhdGlvbnMubW0gaW4gU291cmNlcyAqLywKIAkJCQlFMTU2NjMxOTBGQjYxQzFGMDBD
MTk5Q0EgLyogV2ViRG93bmxvYWQubW0gaW4gU291cmNlcyAqLywKIAkJCQlBNzA5MzZCMDBCNTYw
OERDMDBDREI0OEUgLyogV2ViRHJhZ0NsaWVudC5tbSBpbiBTb3VyY2VzICovLApAQCAtMjAwNiwx
NyArMjI1NiwyMiBAQAogCQkJCTkzMTYzM0VGMEFFREZGQUUwMDYyQjkyRCAvKiBXZWJGcmFtZUxv
YWRlckNsaWVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzOTFGMjc2MTIxQjM4QkQwMEVCRjdF
OCAvKiBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5
ODExMDYwODI0QkYwMTAwOERGMDM4IC8qIFdlYkZyYW1lVmlldy5tbSBpbiBTb3VyY2VzICovLAor
CQkJCUExMEMxRDMwMTgyMDJGQzUwMDM2ODgzQSAvKiBFbW9qaUZhbGxiYWNrRm9udFNlbGVjdG9y
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNEQTYyQUUzMTI1Rjg3QzIwMDdGRDExOCAvKiBXZWJG
dWxsU2NyZWVuQ29udHJvbGxlci5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDN0Y4ODRDMTBDODc3
NUEwMEQ2MTMzRCAvKiBXZWJHZW9sb2NhdGlvbkNsaWVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CUJDN0Y4ODlGMTBDOUQzMEMwMEQ2MTMzRCAvKiBXZWJHZW9sb2NhdGlvblBvc2l0aW9uLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJOTM5ODExMTMwODI0QkYwMTAwOERGMDM4IC8qIFdlYkhpc3Rvcnku
bW0gaW4gU291cmNlcyAqLywKIAkJCQk5Mzk4MTBCRDA4MjRCRjAxMDA4REYwMzggLyogV2ViSGlz
dG9yeUl0ZW0ubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQUFGNUZDMDBFREUzQTkyMDA4RDg4M0Qg
LyogV2ViSG9zdGVkTmV0c2NhcGVQbHVnaW5WaWV3Lm1tIGluIFNvdXJjZXMgKi8sCisJCQkJQTEw
QzFENjcxODIwMzAwRTAwMzY4ODNBIC8qIFdlYkRpc2tJbWFnZUNhY2hlQ2xpZW50SU9TLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJOTM5ODEwRjMwODI0QkYwMTAwOERGMDM4IC8qIFdlYkhUTUxSZXBy
ZXNlbnRhdGlvbi5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzOTgxMEY0MDgyNEJGMDEwMDhERjAz
OCAvKiBXZWJIVE1MVmlldy5tbSBpbiBTb3VyY2VzICovLAorCQkJCUExMEMxRDdGMTgyMDMwM0Qw
MDM2ODgzQSAvKiBXZWJGcmFtZVZpZXdXQUtDb21wYXRpYmlsaXR5Lm0gaW4gU291cmNlcyAqLywK
KwkJCQlBMTBDMUQzNzE4MjAyRkM1MDAzNjg4M0EgLyogV2ViR2VvbG9jYXRpb25Qcm92aWRlcklP
Uy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzOTgxMEMxMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJJ
Y29uRGF0YWJhc2UubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MTQ5NENENzBDN0VCREUwMDA0MTc4
QzUgLyogV2ViSWNvbkRhdGFiYXNlQ2xpZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNUQ3QkY4
MTUwQzJBMUQ5MDAwOENFMDZEIC8qIFdlYkluc3BlY3Rvci5tbSBpbiBTb3VyY2VzICovLAorCQkJ
CUExMEMxRDkwMTgyMDMwN0QwMDM2ODgzQSAvKiBXZWJLaXQuaU9TLmV4cCBpbiBTb3VyY2VzICov
LAogCQkJCTA2NjkzREREMEJGQkE4NTIwMDIxNjA3MiAvKiBXZWJJbnNwZWN0b3JDbGllbnQubW0g
aW4gU291cmNlcyAqLywKIAkJCQkxQzdCMEM2NjBFQjI0NjREMDBBMjg1MDIgLyogV2ViSW5zcGVj
dG9yQ2xpZW50Q0YuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU3RUI3OTAxM0I5N0E0RTAwOEQ2
OTFEIC8qIFdlYkluc3BlY3RvckNsaWVudFJlZ2lzdHJ5Lm1tIGluIFNvdXJjZXMgKi8sCkBAIC0y
MDI2LDE0ICsyMjgxLDE4IEBACiAJCQkJQTU3QzI4QTgxM0JBQTVBRDAwNzBBQ0FCIC8qIFdlYklu
c3BlY3RvclNlcnZlcldlYlZpZXdDb25uZWN0aW9uLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU1
RTIxMDAxNEQ3MjY0QzAwMzE1NDlFIC8qIFdlYkluc3BlY3RvclNlcnZlcldlYlZpZXdDb25uZWN0
aW9uQ29udHJvbGxlci5tbSBpbiBTb3VyY2VzICovLAogCQkJCUE1N0MyOEFDMTNCQUE1QUQwMDcw
QUNBQiAvKiBXZWJJbnNwZWN0b3JYUENXcmFwcGVyLm0gaW4gU291cmNlcyAqLywKKwkJCQlBMTBD
MUQxOTE4MjAyRjlDMDAzNjg4M0EgLyogV2ViRGVmYXVsdEZvcm1EZWxlZ2F0ZS5tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJOTM5ODEwRTQwODI0QkYwMTAwOERGMDM4IC8qIFdlYkphdmFTY3JpcHRUZXh0
SW5wdXRQYW5lbC5tIGluIFNvdXJjZXMgKi8sCisJCQkJQTEwQzFEOEIxODIwMzA1RTAwMzY4ODNB
IC8qIFdlYlBERlZpZXdJT1MubW0gaW4gU291cmNlcyAqLywKIAkJCQkzN0QxRENBOTEwNjU5MjhD
MDA2OEY3RUYgLyogV2ViSlNQREZEb2MubW0gaW4gU291cmNlcyAqLywKIAkJCQk5Mzk4MTExNzA4
MjRCRjAxMDA4REYwMzggLyogV2ViS2V5R2VuZXJhdG9yLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
OTM5ODExMDMwODI0QkYwMTAwOERGMDM4IC8qIFdlYktpdEVycm9ycy5tIGluIFNvdXJjZXMgKi8s
CiAJCQkJQ0Q4QkZDRTcxNTUzMTIyNDAwNUFGQjI1IC8qIFdlYktpdEZ1bGxTY3JlZW5MaXN0ZW5l
ci5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzOTgxMEMzMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJL
aXRMb2dnaW5nLm0gaW4gU291cmNlcyAqLywKKwkJCQlBMTBDMUQzMzE4MjAyRkM1MDAzNjg4M0Eg
LyogTWVtb3J5TWVhc3VyZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzOTgxMEM0MDgyNEJGMDEw
MDhERjAzOCAvKiBXZWJLaXROU1N0cmluZ0V4dHJhcy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFB
QUY1RDBGMEVEREU3QTcwMDhEODgzRCAvKiBXZWJLaXRQbHVnaW5BZ2VudC5kZWZzIGluIFNvdXJj
ZXMgKi8sCisJCQkJQTEwQzFEMUYxODIwMkY5QzAwMzY4ODNBIC8qIFdlYkRlZmF1bHRVSUtpdERl
bGVnYXRlLm0gaW4gU291cmNlcyAqLywKIAkJCQkxQUFGNUQwMDBFRERFNjA0MDA4RDg4M0QgLyog
V2ViS2l0UGx1Z2luQ2xpZW50LmRlZnMgaW4gU291cmNlcyAqLywKIAkJCQkxQUFGNUNGMTBFRERF
NTg2MDA4RDg4M0QgLyogV2ViS2l0UGx1Z2luSG9zdC5kZWZzIGluIFNvdXJjZXMgKi8sCiAJCQkJ
OTM5ODEwQzUwODI0QkYwMTAwOERGMDM4IC8qIFdlYktpdFN0YXRpc3RpY3MubSBpbiBTb3VyY2Vz
ICovLApAQCAtMjA0NSw2ICsyMzA0LDggQEAKIAkJCQkwQUI3NTIzODBGQTJFNERCMDBEN0NCQjEg
LyogV2ViTmV0c2NhcGVDb250YWluZXJDaGVja0NvbnRleHRJbmZvLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEFFQkZGNjQwRjlGQThCRTAwMEQ0ODZCIC8qIFdlYk5ldHNjYXBlQ29udGFpbmVyQ2hl
Y2tQcml2YXRlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFFQTY2RDUwREM2QjFGRjAwM0QxMkJG
IC8qIFdlYk5ldHNjYXBlUGx1Z2luRXZlbnRIYW5kbGVyLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJ
QTEwQzFENjUxODIwMzAwRTAwMzY4ODNBIC8qIFdlYkNocm9tZUNsaWVudElPUy5tbSBpbiBTb3Vy
Y2VzICovLAorCQkJCUExMEMxRDM1MTgyMDJGQzUwMDM2ODgzQSAvKiBXZWJHZW9sb2NhdGlvbkNv
cmVMb2NhdGlvblByb3ZpZGVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFFQTY2RDkwREM2QjIw
OTAwM0QxMkJGIC8qIFdlYk5ldHNjYXBlUGx1Z2luRXZlbnRIYW5kbGVyQ2FyYm9uLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJMUFFQTZBNTEwREM4Q0UyRjAwM0QxMkJGIC8qIFdlYk5ldHNjYXBlUGx1
Z2luRXZlbnRIYW5kbGVyQ29jb2EubW0gaW4gU291cmNlcyAqLywKIAkJCQk5Mzk4MTBENjA4MjRC
RjAxMDA4REYwMzggLyogV2ViTmV0c2NhcGVQbHVnaW5QYWNrYWdlLm1tIGluIFNvdXJjZXMgKi8s
CkBAIC0yMDUyLDggKzIzMTMsOSBAQAogCQkJCTFBNERGNTIzMEVDOEM3NEQwMDZCRDRCNCAvKiBX
ZWJOZXRzY2FwZVBsdWdpblZpZXcubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQzY4RjY3MDA5NUI1
RkMxMDBDMjk4NEUgLyogV2ViTm9kZUhpZ2hsaWdodC5tbSBpbiBTb3VyY2VzICovLAogCQkJCUE1
Njg3QkRCMTM1Qjc5MUEwMDc0Q0JDQiAvKiBXZWJOb2RlSGlnaGxpZ2h0ZXIubW0gaW4gU291cmNl
cyAqLywKLQkJCQlBNUM1NjZCRTEyN0EzQUU1MDBFOEEzRkYgLyogV2ViRGlza0ltYWdlQ2FjaGVD
bGllbnRJT1MubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQzY4RjY3MjA5NUI1RkMxMDBDMjk4NEUg
LyogV2ViTm9kZUhpZ2hsaWdodFZpZXcubW0gaW4gU291cmNlcyAqLywKKwkJCQlBMTBDMUQ2MTE4
MjAzMDBFMDAzNjg4M0EgLyogU2VhcmNoUG9wdXBNZW51SU9TLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCUExMEMxRDZDMTgyMDMwMEUwMDM2ODgzQSAvKiBXZWJGcmFtZUlPUy5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCTMxMkUyRkU2MTRFNDgxODIwMDdDQ0ExOCAvKiBXZWJOb3RpZmljYXRpb24ubW0g
aW4gU291cmNlcyAqLywKIAkJCQkzMUMxMUE2RjE0NzY1NTJFMDA0OUE0Q0MgLyogV2ViTm90aWZp
Y2F0aW9uQ2xpZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRURFOTgzODEwQkNERjVGRTAwRkRB
RTI4IC8qIFdlYk5TQXJyYXlFeHRyYXMubSBpbiBTb3VyY2VzICovLApAQCAtMjA2Miw4ICsyMzI0
LDEwIEBACiAJCQkJOTM5ODExMTUwODI0QkYwMTAwOERGMDM4IC8qIFdlYk5TRGF0YUV4dHJhcy5t
IGluIFNvdXJjZXMgKi8sCiAJCQkJNjU0ODhEQTIwODRGQkNDQjAwODMxQUQwIC8qIFdlYk5TRGlj
dGlvbmFyeUV4dHJhcy5tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5ODExMTYwODI0QkYwMTAwOERG
MDM4IC8qIFdlYk5TRXZlbnRFeHRyYXMubSBpbiBTb3VyY2VzICovLAorCQkJCUExMEMxRDM5MTgy
MDJGQzUwMDM2ODgzQSAvKiBXZWJOU1N0cmluZ0RyYXdpbmcubW0gaW4gU291cmNlcyAqLywKIAkJ
CQk2NUVFREU1ODA4NEZGQzlFMDAwMkRCMjUgLyogV2ViTlNGaWxlTWFuYWdlckV4dHJhcy5tbSBp
biBTb3VyY2VzICovLAogCQkJCTkzOTgxMEM3MDgyNEJGMDEwMDhERjAzOCAvKiBXZWJOU0ltYWdl
RXh0cmFzLm0gaW4gU291cmNlcyAqLywKKwkJCQlBMTBDMUQ0MzE4MjAyRkVGMDAzNjg4M0EgLyog
V2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM0
QzRBOTEwRjAxNDA2QzAwOTM3MkMwIC8qIFdlYk5TT2JqZWN0RXh0cmFzLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJOTM5ODEwQzgwODI0QkYwMTAwOERGMDM4IC8qIFdlYk5TUGFzdGVib2FyZEV4dHJh
cy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzOTgxMTE5MDgyNEJGMDEwMDhERjAzOCAvKiBXZWJO
U1ByaW50T3BlcmF0aW9uRXh0cmFzLm0gaW4gU291cmNlcyAqLywKQEAgLTIwNzQsNiArMjMzOCw3
IEBACiAJCQkJOTM5ODEwQ0EwODI0QkYwMTAwOERGMDM4IC8qIFdlYk5TV2luZG93RXh0cmFzLm0g
aW4gU291cmNlcyAqLywKIAkJCQlBNThBNTc5QTE0M0U3MjcwMDAxMjVGNTAgLyogV2ViT3BlblBh
bmVsUmVzdWx0TGlzdGVuZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQk5Mzk4MTBEMDA4MjRCRjAx
MDA4REYwMzggLyogV2ViUGFuZWxBdXRoZW50aWNhdGlvbkhhbmRsZXIubSBpbiBTb3VyY2VzICov
LAorCQkJCUExMEMxRDgyMTgyMDMwM0QwMDM2ODgzQSAvKiBXZWJQbGFpbldoaXRlVmlldy5tbSBp
biBTb3VyY2VzICovLAogCQkJCTM3QjZGQjRGMTA2MzUzMEMwMDBGREIzQiAvKiBXZWJQREZEb2N1
bWVudEV4dHJhcy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzOTgxMTFGMDgyNEJGMDEwMDhERjAz
OCAvKiBXZWJQREZSZXByZXNlbnRhdGlvbi5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzOTgxMTFF
MDgyNEJGMDEwMDhERjAzOCAvKiBXZWJQREZWaWV3Lm1tIGluIFNvdXJjZXMgKi8sCkBAIC0yMDkw
LDE3ICsyMzU1LDIyIEBACiAJCQkJOTM5ODEwRjkwODI0QkYwMTAwOERGMDM4IC8qIFdlYlJlbmRl
ck5vZGUubW0gaW4gU291cmNlcyAqLywKIAkJCQk5Mzk4MTExQTA4MjRCRjAxMDA4REYwMzggLyog
V2ViUmVzb3VyY2UubW0gaW4gU291cmNlcyAqLywKIAkJCQk3RTZGRUYwOTA4OTg1QTcyMDBDNDRD
M0YgLyogV2ViU2NyaXB0RGVidWdEZWxlZ2F0ZS5tbSBpbiBTb3VyY2VzICovLAorCQkJCUExMEMx
RDNCMTgyMDJGQzUwMDM2ODgzQSAvKiBXZWJOU1N0cmluZ0V4dHJhc0lPUy5tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQzAxNjdCRjkwRDdGNUREMDAwMjg2OTZFIC8qIFdlYlNjcmlwdERlYnVnZ2VyLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJQzBCMUY3RTkxMEFDOEUzMTAwQzkyNUQ5IC8qIFdlYlNjcmlw
dFdvcmxkLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVERUZDMEExMUQ1MzMxQzAwODg1MjczIC8q
IFdlYlNlY3VyaXR5T3JpZ2luLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMyNkM2QTUxMEI3NDQ3
QTAwQjY4N0VEIC8qIFdlYlNlcmlhbGl6ZWRKU1ZhbHVlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
M0FCMDJBRjYxMkMxMzE5QjAwRkJCNjk0IC8qIFdlYlN0b3JhZ2VNYW5hZ2VyLm1tIGluIFNvdXJj
ZXMgKi8sCisJCQkJQTEwQzFENjkxODIwMzAwRTAwMzY4ODNBIC8qIFdlYkZpeGVkUG9zaXRpb25D
b250ZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJM0FCQjNDN0IxMzA5QzNCNTAwRTkzRDk0IC8q
IFdlYlN0b3JhZ2VUcmFja2VyQ2xpZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5ODEwQ0Mw
ODI0QkYwMTAwOERGMDM4IC8qIFdlYlN0cmluZ1RydW5jYXRvci5tbSBpbiBTb3VyY2VzICovLAor
CQkJCUExMEMxRDZFMTgyMDMwMEUwMDM2ODgzQSAvKiBXZWJHZW9sb2NhdGlvbi5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCTkzRUIxNzhEMDlGODhENDYwMDkxRjhGRiAvKiBXZWJTeXN0ZW1JbnRlcmZh
Y2UubW0gaW4gU291cmNlcyAqLywKIAkJCQk5MzZBMkRFODBGRDJEMDgwMDBEMzEyREIgLyogV2Vi
VGV4dENvbXBsZXRpb25Db250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJQTEwQzFEM0Ux
ODIwMkZDNTAwMzY4ODNBIC8qIFdlYlVJS2l0U3VwcG9ydC5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CTFBNzRBMjhGMEY0Rjc1NDAwMDgyRTIyOCAvKiBXZWJUZXh0SW5wdXRXaW5kb3dDb250cm9sbGVy
Lm0gaW4gU291cmNlcyAqLywKIAkJCQlGODM0QUFEODBFNjRCMUM3MDBFMjczN0MgLyogV2ViVGV4
dEl0ZXJhdG9yLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJQTEwQzFEMUQxODIwMkY5QzAwMzY4ODNB
IC8qIFdlYkRlZmF1bHRSZXNvdXJjZUxvYWREZWxlZ2F0ZS5tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
OTM5ODEwQkUwODI0QkYwMTAwOERGMDM4IC8qIFdlYlVSTHNXaXRoVGl0bGVzLm0gaW4gU291cmNl
cyAqLywKIAkJCQlDMEM1QjNFRjExNzdBNEEwMDAyQjBBRUYgLyogV2ViVXNlckNvbnRlbnRVUkxQ
YXR0ZXJuLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5ODExMDcwODI0QkYwMTAwOERGMDM4IC8q
IFdlYlZpZXcubW0gaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvaW9z
L0RlZmF1bHREZWxlZ2F0ZXMvV2ViRGVmYXVsdEZvcm1EZWxlZ2F0ZS5oIGIvU291cmNlL1dlYktp
dC9pb3MvRGVmYXVsdERlbGVnYXRlcy9XZWJEZWZhdWx0Rm9ybURlbGVnYXRlLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYzdkMmVkOGY3NmE0ZGU1ZTZlOWRiOWM5NGJlMDhhYmE4OWZlYmY0YQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvaW9zL0RlZmF1bHREZWxlZ2F0ZXMvV2ViRGVmYXVsdEZvcm1E
ZWxlZ2F0ZS5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0IDxXZWJLaXQv
V2ViRm9ybURlbGVnYXRlLmg+CisKK0BpbnRlcmZhY2UgV2ViRGVmYXVsdEZvcm1EZWxlZ2F0ZSA6
IE5TT2JqZWN0IDxXZWJGb3JtRGVsZWdhdGU+IHsKK30KKysgKFdlYkRlZmF1bHRGb3JtRGVsZWdh
dGUgKilzaGFyZWRGb3JtRGVsZWdhdGU7CitAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2lvcy9EZWZhdWx0RGVsZWdhdGVzL1dlYkRlZmF1bHRGb3JtRGVsZWdhdGUubSBiL1NvdXJjZS9X
ZWJLaXQvaW9zL0RlZmF1bHREZWxlZ2F0ZXMvV2ViRGVmYXVsdEZvcm1EZWxlZ2F0ZS5tCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmU3OWM5NDczMDc3OWJhYzdkOTRkZTAyMzBkYTlkNTRlOTNkZDVjY2QKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2lvcy9EZWZhdWx0RGVsZWdhdGVzL1dlYkRlZmF1bHRG
b3JtRGVsZWdhdGUubQpAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiV2Vi
RGVmYXVsdEZvcm1EZWxlZ2F0ZS5oIgorCisKK0BpbXBsZW1lbnRhdGlvbiBXZWJEZWZhdWx0Rm9y
bURlbGVnYXRlCisKKysgKFdlYkRlZmF1bHRGb3JtRGVsZWdhdGUgKilzaGFyZWRGb3JtRGVsZWdh
dGUKK3sKKyAgICBzdGF0aWMgV2ViRGVmYXVsdEZvcm1EZWxlZ2F0ZSAqIFdlYlNoYXJlZERlZmF1
bHRGb3JtRGVsZWdhdGUgPSBuaWw7CisgICAgCisgICAgaWYgKCFXZWJTaGFyZWREZWZhdWx0Rm9y
bURlbGVnYXRlKSBXZWJTaGFyZWREZWZhdWx0Rm9ybURlbGVnYXRlID0gW1tXZWJEZWZhdWx0Rm9y
bURlbGVnYXRlIGFsbG9jXSBpbml0XTsKKyAgICByZXR1cm4gV2ViU2hhcmVkRGVmYXVsdEZvcm1E
ZWxlZ2F0ZTsKK30KKworLSAodm9pZCl0ZXh0RmllbGREaWRCZWdpbkVkaXRpbmc6KERPTUhUTUxJ
bnB1dEVsZW1lbnQgKillbGVtZW50IGluRnJhbWU6KFdlYkZyYW1lICopZnJhbWUKK3sKK30KKwor
LSAodm9pZCl0ZXh0RmllbGREaWRFbmRFZGl0aW5nOihET01IVE1MSW5wdXRFbGVtZW50ICopZWxl
bWVudCBpbkZyYW1lOihXZWJGcmFtZSAqKWZyYW1lCit7Cit9CisKKy0gKHZvaWQpdGV4dERpZENo
YW5nZUluVGV4dEZpZWxkOihET01IVE1MSW5wdXRFbGVtZW50ICopZWxlbWVudCBpbkZyYW1lOihX
ZWJGcmFtZSAqKWZyYW1lCit7Cit9CisKKy0gKHZvaWQpdGV4dERpZENoYW5nZUluVGV4dEFyZWE6
KERPTUhUTUxUZXh0QXJlYUVsZW1lbnQgKillbGVtZW50IGluRnJhbWU6KFdlYkZyYW1lICopZnJh
bWUKK3sKK30KKworLSAodm9pZClkaWRGb2N1c1RleHRGaWVsZDooRE9NSFRNTElucHV0RWxlbWVu
dCAqKWVsZW1lbnQgaW5GcmFtZTooV2ViRnJhbWUgKilmcmFtZQoreworfQorCistIChCT09MKXRl
eHRGaWVsZDooRE9NSFRNTElucHV0RWxlbWVudCAqKWVsZW1lbnQgZG9Db21tYW5kQnlTZWxlY3Rv
cjooU0VMKWNvbW1hbmRTZWxlY3RvciBpbkZyYW1lOihXZWJGcmFtZSAqKWZyYW1lCit7CisgICAg
cmV0dXJuIFlFUzsKK30KKworI2lmICFQTEFURk9STShJT1MpCistIChCT09MKXRleHRGaWVsZDoo
RE9NSFRNTElucHV0RWxlbWVudCAqKWVsZW1lbnQgc2hvdWxkSGFuZGxlRXZlbnQ6KE5TRXZlbnQg
KilldmVudCBpbkZyYW1lOihXZWJGcmFtZSAqKWZyYW1lCit7CisgICAgcmV0dXJuIFlFUzsKK30K
KyNlbmRpZgorCistICh2b2lkKWZyYW1lOihXZWJGcmFtZSAqKWZyYW1lIHNvdXJjZUZyYW1lOihX
ZWJGcmFtZSAqKXNvdXJjZUZyYW1lIHdpbGxTdWJtaXRGb3JtOihET01FbGVtZW50ICopZm9ybSB3
aXRoVmFsdWVzOihOU0RpY3Rpb25hcnkgKil2YWx1ZXMgc3VibWlzc2lvbkxpc3RlbmVyOihpZCA8
V2ViRm9ybVN1Ym1pc3Npb25MaXN0ZW5lcj4pbGlzdGVuZXIKK3sKKyAgICBbbGlzdGVuZXIgY29u
dGludWVdOworfQorCistICh2b2lkKXdpbGxTZW5kU3VibWl0RXZlbnRUb0Zvcm06KERPTUhUTUxG
b3JtRWxlbWVudCAqKWVsZW1lbnQgaW5GcmFtZTooV2ViRnJhbWUgKilzb3VyY2VGcmFtZSB3aXRo
VmFsdWVzOihOU0RpY3Rpb25hcnkgKil2YWx1ZXMKK3sKK30KKworQGVuZApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9pb3MvRGVmYXVsdERlbGVnYXRlcy9XZWJEZWZhdWx0RnJhbWVMb2FkRGVs
ZWdhdGUuaCBiL1NvdXJjZS9XZWJLaXQvaW9zL0RlZmF1bHREZWxlZ2F0ZXMvV2ViRGVmYXVsdEZy
YW1lTG9hZERlbGVnYXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDE2ZTE4OGNjYzY3ZWExMmQ1NDM3OWNjYTk2
ZmI2MTU2Y2EwNTlkZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvaW9zL0RlZmF1
bHREZWxlZ2F0ZXMvV2ViRGVmYXVsdEZyYW1lTG9hZERlbGVnYXRlLmgKQEAgLTAsMCArMSwyOSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKK0BpbnRlcmZhY2UgV2ViRGVmYXVsdEZyYW1lTG9hZERlbGVnYXRlIDog
TlNPYmplY3QgeworfQorKyAoV2ViRGVmYXVsdEZyYW1lTG9hZERlbGVnYXRlICopc2hhcmVkRnJh
bWVMb2FkRGVsZWdhdGU7CitAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2lvcy9EZWZh
dWx0RGVsZWdhdGVzL1dlYkRlZmF1bHRGcmFtZUxvYWREZWxlZ2F0ZS5tIGIvU291cmNlL1dlYktp
dC9pb3MvRGVmYXVsdERlbGVnYXRlcy9XZWJEZWZhdWx0RnJhbWVMb2FkRGVsZWdhdGUubQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi40NTA1ZjQ5NjE2MTc5MGI3MDJjODQ1YjhmNDM5ZGMyNjk5NTRlYTcwCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9pb3MvRGVmYXVsdERlbGVnYXRlcy9XZWJEZWZhdWx0
RnJhbWVMb2FkRGVsZWdhdGUubQpAQCAtMCwwICsxLDE1NiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBv
cnQgIldlYkRlZmF1bHRGcmFtZUxvYWREZWxlZ2F0ZS5oIgorCisjaW1wb3J0IDxXZWJLaXQvV2Vi
RnJhbWVMb2FkRGVsZWdhdGVQcml2YXRlLmg+CisjaW1wb3J0ICJXZWJWaWV3UHJpdmF0ZS5oIgor
CitAaW1wbGVtZW50YXRpb24gV2ViRGVmYXVsdEZyYW1lTG9hZERlbGVnYXRlCisKKysgKFdlYkRl
ZmF1bHRGcmFtZUxvYWREZWxlZ2F0ZSAqKXNoYXJlZEZyYW1lTG9hZERlbGVnYXRlCit7CisgICAg
c3RhdGljIFdlYkRlZmF1bHRGcmFtZUxvYWREZWxlZ2F0ZSAqc2hhcmVkRGVsZWdhdGUgPSBuaWw7
CisgICAgaWYgKCFzaGFyZWREZWxlZ2F0ZSkKKyAgICAgICAgc2hhcmVkRGVsZWdhdGUgPSBbW1dl
YkRlZmF1bHRGcmFtZUxvYWREZWxlZ2F0ZSBhbGxvY10gaW5pdF07CisgICAgcmV0dXJuIHNoYXJl
ZERlbGVnYXRlOworfQorCistICh2b2lkKXdlYlZpZXc6KFdlYlZpZXcgKilzZW5kZXIgZGlkU3Rh
cnRQcm92aXNpb25hbExvYWRGb3JGcmFtZTooV2ViRnJhbWUgKilmcmFtZQoreworfQorCistICh2
b2lkKXdlYlZpZXc6KFdlYlZpZXcgKilzZW5kZXIgZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9y
UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWU6KFdlYkZyYW1lICopZnJhbWUKK3sKK30KKworLSAodm9p
ZCl3ZWJWaWV3OihXZWJWaWV3ICopc2VuZGVyIGRpZEZhaWxQcm92aXNpb25hbExvYWRXaXRoRXJy
b3I6KE5TRXJyb3IgKillcnJvciBmb3JGcmFtZTooV2ViRnJhbWUgKilmcmFtZQoreworfQorCist
ICh2b2lkKXdlYlZpZXc6KFdlYlZpZXcgKilzZW5kZXIgZGlkQ29tbWl0TG9hZEZvckZyYW1lOihX
ZWJGcmFtZSAqKWZyYW1lCit7Cit9CisKKy0gKHZvaWQpd2ViVmlldzooV2ViVmlldyAqKXNlbmRl
ciBkaWRSZWNlaXZlVGl0bGU6KE5TU3RyaW5nICopdGl0bGUgZm9yRnJhbWU6KFdlYkZyYW1lICop
ZnJhbWUKK3sKK30KKworLSAodm9pZCl3ZWJWaWV3OihXZWJWaWV3ICopc2VuZGVyIGRpZEZpbmlz
aExvYWRGb3JGcmFtZTooV2ViRnJhbWUgKilmcmFtZQoreworfQorCistICh2b2lkKXdlYlZpZXc6
KFdlYlZpZXcgKilzZW5kZXIgZGlkRmFpbExvYWRXaXRoRXJyb3I6KE5TRXJyb3IgKillcnJvciBm
b3JGcmFtZTooV2ViRnJhbWUgKilmcmFtZQoreworfQorCistICh2b2lkKXdlYlZpZXc6KFdlYlZp
ZXcgKilzZW5kZXIgZGlkQ2hhbmdlTG9jYXRpb25XaXRoaW5QYWdlRm9yRnJhbWU6KFdlYkZyYW1l
ICopZnJhbWUKK3sKK30KKworLSAodm9pZCl3ZWJWaWV3OihXZWJWaWV3ICopc2VuZGVyIHdpbGxQ
ZXJmb3JtQ2xpZW50UmVkaXJlY3RUb1VSTDooTlNVUkwgKilVUkwgZGVsYXk6KE5TVGltZUludGVy
dmFsKXNlY29uZHMgZmlyZURhdGU6KE5TRGF0ZSAqKWRhdGUgZm9yRnJhbWU6KFdlYkZyYW1lICop
ZnJhbWUKK3sKK30KKworLSAodm9pZCl3ZWJWaWV3OihXZWJWaWV3ICopc2VuZGVyIGRpZENhbmNl
bENsaWVudFJlZGlyZWN0Rm9yRnJhbWU6KFdlYkZyYW1lICopZnJhbWUKK3sKK30KKworLSAodm9p
ZCl3ZWJWaWV3OihXZWJWaWV3ICopc2VuZGVyIHdpbGxDbG9zZUZyYW1lOihXZWJGcmFtZSAqKWZy
YW1lCit7Cit9CisKKy0gKHZvaWQpd2ViVmlldzooV2ViVmlldyAqKXdlYlZpZXcgZGlkQ2xlYXJX
aW5kb3dPYmplY3Q6KFdlYlNjcmlwdE9iamVjdCAqKXdpbmRvd09iamVjdCBmb3JGcmFtZTooV2Vi
RnJhbWUgKilmcmFtZQoreworfQorCistICh2b2lkKXdlYlZpZXc6KFdlYlZpZXcgKil3ZWJWaWV3
IHdpbmRvd1NjcmlwdE9iamVjdEF2YWlsYWJsZTooV2ViU2NyaXB0T2JqZWN0ICopd2luZG93U2Ny
aXB0T2JqZWN0Cit7Cit9CisKKy0gKHZvaWQpd2ViVmlldzooV2ViVmlldyAqKXdlYlZpZXcgZGlk
Q3JlYXRlSmF2YVNjcmlwdENvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQgZm9yRnJhbWU6KFdl
YkZyYW1lICopZnJhbWUKK3sKK30KKworLSAodm9pZCl3ZWJWaWV3RGlkRGlzcGxheUluc2VjdXJl
Q29udGVudDooV2ViVmlldyAqKXdlYlZpZXcKK3sKK30KKworLSAodm9pZCl3ZWJWaWV3OihXZWJW
aWV3ICopd2ViVmlldyBkaWRSdW5JbnNlY3VyZUNvbnRlbnQ6KFdlYlNlY3VyaXR5T3JpZ2luICop
b3JpZ2luCit7Cit9CisKKy0gKHZvaWQpd2ViVmlldzooV2ViVmlldyAqKXdlYlZpZXcgZGlkRGV0
ZWN0WFNTOihOU1VSTCAqKWluc2VjdXJlVVJMCit7Cit9CisKKy0gKHZvaWQpd2ViVmlldzooV2Vi
VmlldyAqKXdlYlZpZXcgZGlkQ2xlYXJXaW5kb3dPYmplY3RGb3JGcmFtZTooV2ViRnJhbWUgKilm
cmFtZSBpblNjcmlwdFdvcmxkOihXZWJTY3JpcHRXb3JsZCAqKXdvcmxkCit7Cit9CisKKy0gKHZv
aWQpd2ViVmlldzooV2ViVmlldyAqKXdlYlZpZXcgZGlkUHVzaFN0YXRlV2l0aGluUGFnZUZvckZy
YW1lOihXZWJGcmFtZSAqKWZyYW1lCit7Cit9CisKKy0gKHZvaWQpd2ViVmlldzooV2ViVmlldyAq
KXdlYlZpZXcgZGlkUmVwbGFjZVN0YXRlV2l0aGluUGFnZUZvckZyYW1lOihXZWJGcmFtZSAqKWZy
YW1lCit7Cit9CisKKy0gKHZvaWQpd2ViVmlldzooV2ViVmlldyAqKXdlYlZpZXcgZGlkUG9wU3Rh
dGVXaXRoaW5QYWdlRm9yRnJhbWU6KFdlYkZyYW1lICopZnJhbWUKK3sKK30KKworI3ByYWdtYSBt
YXJrIC0KKyNwcmFnbWEgbWFyayBTUEkgZGVmaW5lZCBpbiBhIGNhdGVnb3J5IGluIFdlYlZpZXdQ
cml2YXRlLmgKKworLSAodm9pZCl3ZWJWaWV3OihXZWJWaWV3ICopc2VuZGVyIGRpZEZpcnN0TGF5
b3V0SW5GcmFtZTooV2ViRnJhbWUgKilmcmFtZQoreworfQorCistICh2b2lkKXdlYlZpZXc6KFdl
YlZpZXcgKilzZW5kZXIgZGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yRnJhbWU6KFdlYkZyYW1lICop
ZnJhbWUKK3sKK30KKworLSAodm9pZCl3ZWJWaWV3OihXZWJWaWV3ICopc2VuZGVyIGRpZEhhbmRs
ZU9ubG9hZEV2ZW50c0ZvckZyYW1lOihXZWJGcmFtZSAqKWZyYW1lCit7Cit9CisKKy0gKHZvaWQp
d2ViVmlldzooV2ViVmlldyAqKXNlbmRlciBkaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRJ
bkZyYW1lOihXZWJGcmFtZSAqKWZyYW1lCit7Cit9CisKKy0gKHZvaWQpd2ViVmlldzooV2ViVmll
dyAqKXdlYlZpZXcgZGlkQ2xlYXJJbnNwZWN0b3JXaW5kb3dPYmplY3Q6KFdlYlNjcmlwdE9iamVj
dCAqKXdpbmRvd09iamVjdCBmb3JGcmFtZTooV2ViRnJhbWUgKilmcmFtZQoreworfQorCistICh2
b2lkKXdlYlZpZXc6KFdlYlZpZXcgKil3ZWJWaWV3IGRpZFJlbW92ZUZyYW1lRnJvbUhpZXJhcmNo
eTooV2ViRnJhbWUgKilmcmFtZQoreworfQorCistICh2b2lkKXdlYlZpZXc6KFdlYlZpZXcgKilz
ZW5kZXIgZGlkTGF5b3V0OihXZWJMYXlvdXRNaWxlc3RvbmVzKW1pbGVzdG9uZXMKK3sKK30KKwor
QGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9pb3MvRGVmYXVsdERlbGVnYXRlcy9XZWJE
ZWZhdWx0UmVzb3VyY2VMb2FkRGVsZWdhdGUuaCBiL1NvdXJjZS9XZWJLaXQvaW9zL0RlZmF1bHRE
ZWxlZ2F0ZXMvV2ViRGVmYXVsdFJlc291cmNlTG9hZERlbGVnYXRlLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2Jm
YTBiMDc3MmEyOTg5MTk4MWViYmVkZjJiYWJiMzRhNDhkNWNlZQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvaW9zL0RlZmF1bHREZWxlZ2F0ZXMvV2ViRGVmYXVsdFJlc291cmNlTG9h
ZERlbGVnYXRlLmgKQEAgLTAsMCArMSwyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK0BpbnRlcmZhY2UgV2Vi
RGVmYXVsdFJlc291cmNlTG9hZERlbGVnYXRlIDogTlNPYmplY3QgeworfQorKyAoV2ViRGVmYXVs
dFJlc291cmNlTG9hZERlbGVnYXRlICopc2hhcmVkUmVzb3VyY2VMb2FkRGVsZWdhdGU7CitAZW5k
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2lvcy9EZWZhdWx0RGVsZWdhdGVzL1dlYkRlZmF1
bHRSZXNvdXJjZUxvYWREZWxlZ2F0ZS5tIGIvU291cmNlL1dlYktpdC9pb3MvRGVmYXVsdERlbGVn
YXRlcy9XZWJEZWZhdWx0UmVzb3VyY2VMb2FkRGVsZWdhdGUubQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMDNiMTRl
MGI1ODRhMmMxYjMzNzM0YTQ2OTE3MjJmYTA2YmJlOTMyCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC9pb3MvRGVmYXVsdERlbGVnYXRlcy9XZWJEZWZhdWx0UmVzb3VyY2VMb2FkRGVs
ZWdhdGUubQpAQCAtMCwwICsxLDEwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgIldlYkRlZmF1
bHRSZXNvdXJjZUxvYWREZWxlZ2F0ZS5oIgorCisjaW1wb3J0IDxXZWJLaXQvV2ViUmVzb3VyY2VM
b2FkRGVsZWdhdGUuaD4KKworQGltcGxlbWVudGF0aW9uIFdlYkRlZmF1bHRSZXNvdXJjZUxvYWRE
ZWxlZ2F0ZQorCisrIChXZWJEZWZhdWx0UmVzb3VyY2VMb2FkRGVsZWdhdGUgKilzaGFyZWRSZXNv
dXJjZUxvYWREZWxlZ2F0ZQoreworICAgIHN0YXRpYyBXZWJEZWZhdWx0UmVzb3VyY2VMb2FkRGVs
ZWdhdGUgKnNoYXJlZERlbGVnYXRlID0gbmlsOworICAgIGlmICghc2hhcmVkRGVsZWdhdGUpCisg
ICAgICAgIHNoYXJlZERlbGVnYXRlID0gW1tXZWJEZWZhdWx0UmVzb3VyY2VMb2FkRGVsZWdhdGUg
YWxsb2NdIGluaXRdOworICAgIHJldHVybiBzaGFyZWREZWxlZ2F0ZTsKK30KKworLSAoaWQpd2Vi
VmlldzooV2ViVmlldyAqKXNlbmRlciBpZGVudGlmaWVyRm9ySW5pdGlhbFJlcXVlc3Q6KE5TVVJM
UmVxdWVzdCAqKXJlcXVlc3QgZnJvbURhdGFTb3VyY2U6KFdlYkRhdGFTb3VyY2UgKilkYXRhU291
cmNlCit7CisgICAgcmV0dXJuIG5pbDsKK30KKworLSAoTlNVUkxSZXF1ZXN0ICopd2ViVmlldzoo
V2ViVmlldyAqKXNlbmRlciByZXNvdXJjZTooaWQpaWRlbnRpZmllciB3aWxsU2VuZFJlcXVlc3Q6
KE5TVVJMUmVxdWVzdCAqKXJlcXVlc3QgcmVkaXJlY3RSZXNwb25zZTooTlNVUkxSZXNwb25zZSAq
KXJlZGlyZWN0UmVzcG9uc2UgZnJvbURhdGFTb3VyY2U6KFdlYkRhdGFTb3VyY2UgKilkYXRhU291
cmNlCit7CisgICAgcmV0dXJuIHJlcXVlc3Q7Cit9CisKKy0gKHZvaWQpd2ViVmlldzooV2ViVmll
dyAqKXNlbmRlciByZXNvdXJjZTooaWQpaWRlbnRpZmllciBkaWRSZWNlaXZlQXV0aGVudGljYXRp
b25DaGFsbGVuZ2U6KE5TVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgKiljaGFsbGVuZ2UgZnJv
bURhdGFTb3VyY2U6KFdlYkRhdGFTb3VyY2UgKilkYXRhU291cmNlCit7Cit9CisKKy0gKHZvaWQp
d2ViVmlldzooV2ViVmlldyAqKXNlbmRlciByZXNvdXJjZTooaWQpaWRlbnRpZmllciBkaWRDYW5j
ZWxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTooTlNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSAq
KWNoYWxsZW5nZSBmcm9tRGF0YVNvdXJjZTooV2ViRGF0YVNvdXJjZSAqKWRhdGFTb3VyY2UKK3sK
K30KKworLSAoQk9PTCl3ZWJWaWV3OihXZWJWaWV3ICopc2VuZGVyIHJlc291cmNlOihpZClpZGVu
dGlmaWVyIGNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2U6KE5TVVJMUHJvdGVj
dGlvblNwYWNlICopcHJvdGVjdGlvblNwYWNlIGZvckRhdGFTb3VyY2U6KFdlYkRhdGFTb3VyY2Ug
KilkYXRhU291cmNlCit7CisgICAgcmV0dXJuIE5POworfQorCistIChOU0RpY3Rpb25hcnkgKil3
ZWJWaWV3OihXZWJWaWV3ICopc2VuZGVyIGNvbm5lY3Rpb25Qcm9wZXJ0aWVzRm9yUmVzb3VyY2U6
KGlkKWlkZW50aWZpZXIgZGF0YVNvdXJjZTooV2ViRGF0YVNvdXJjZSAqKWRhdGFTb3VyY2UKK3sK
KyAgICByZXR1cm4gbmlsOworfQorCistICh2b2lkKXdlYlZpZXc6KFdlYlZpZXcgKilzZW5kZXIg
cmVzb3VyY2U6KGlkKWlkZW50aWZpZXIgZGlkUmVjZWl2ZVJlc3BvbnNlOihOU1VSTFJlc3BvbnNl
ICopcmVzcG9uc2UgZnJvbURhdGFTb3VyY2U6KFdlYkRhdGFTb3VyY2UgKilkYXRhU291cmNlCit7
Cit9CisKKy0gKHZvaWQpd2ViVmlldzooV2ViVmlldyAqKXNlbmRlciByZXNvdXJjZTooaWQpaWRl
bnRpZmllciBkaWRSZWNlaXZlQ29udGVudExlbmd0aDooTlNJbnRlZ2VyKWxlbmd0aCBmcm9tRGF0
YVNvdXJjZTooV2ViRGF0YVNvdXJjZSAqKWRhdGFTb3VyY2UKK3sKK30KKworLSAodm9pZCl3ZWJW
aWV3OihXZWJWaWV3ICopc2VuZGVyIHJlc291cmNlOihpZClpZGVudGlmaWVyIGRpZEZpbmlzaExv
YWRpbmdGcm9tRGF0YVNvdXJjZTooV2ViRGF0YVNvdXJjZSAqKWRhdGFTb3VyY2UKK3sKK30KKwor
LSAodm9pZCl3ZWJWaWV3OihXZWJWaWV3ICopc2VuZGVyIHJlc291cmNlOihpZClpZGVudGlmaWVy
IGRpZEZhaWxMb2FkaW5nV2l0aEVycm9yOihOU0Vycm9yICopZXJyb3IgZnJvbURhdGFTb3VyY2U6
KFdlYkRhdGFTb3VyY2UgKilkYXRhU291cmNlCit7Cit9CisKKy0gKHZvaWQpd2ViVmlldzooV2Vi
VmlldyAqKXNlbmRlciBwbHVnSW5GYWlsZWRXaXRoRXJyb3I6KE5TRXJyb3IgKillcnJvciBkYXRh
U291cmNlOihXZWJEYXRhU291cmNlICopZGF0YVNvdXJjZQoreworfQorCistICh2b2lkKXdlYlZp
ZXc6KFdlYlZpZXcgKil3ZWJWaWV3IGRpZExvYWRSZXNvdXJjZUZyb21NZW1vcnlDYWNoZTooTlNV
UkxSZXF1ZXN0ICopcmVxdWVzdCByZXNwb25zZTooTlNVUkxSZXNwb25zZSAqKXJlc3BvbnNlIGxl
bmd0aDooTlNJbnRlZ2VyKWxlbmd0aCBmcm9tRGF0YVNvdXJjZTooV2ViRGF0YVNvdXJjZSAqKWRh
dGFTb3VyY2UKK3sKK30KKworLSAoQk9PTCl3ZWJWaWV3OihXZWJWaWV3ICopd2ViVmlldyByZXNv
dXJjZTooaWQpaWRlbnRpZmllciBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZUZvckRhdGFTb3Vy
Y2U6KFdlYkRhdGFTb3VyY2UgKilkYXRhU291cmNlCit7CisgICAgcmV0dXJuIFlFUzsKK30KKwor
I3ByYWdtYSBtYXJrIC0KKyNwcmFnbWEgbWFyayBTUEkgZGVmaW5lZCBpbiBhIGNhdGVnb3J5IGlu
IFdlYlZpZXdQcml2YXRlLmgKKworLSAoTlNDYWNoZWRVUkxSZXNwb25zZSAqKXdlYlZpZXc6KFdl
YlZpZXcgKilzZW5kZXIgcmVzb3VyY2U6KGlkKWlkZW50aWZpZXIgd2lsbENhY2hlUmVzcG9uc2U6
KE5TQ2FjaGVkVVJMUmVzcG9uc2UgKilyZXNwb25zZSBmcm9tRGF0YVNvdXJjZTooV2ViRGF0YVNv
dXJjZSAqKWRhdGFTb3VyY2UKK3sKKyAgICByZXR1cm4gcmVzcG9uc2U7Cit9CisKK0BlbmQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvaW9zL0RlZmF1bHREZWxlZ2F0ZXMvV2ViRGVmYXVsdFVJ
S2l0RGVsZWdhdGUuaCBiL1NvdXJjZS9XZWJLaXQvaW9zL0RlZmF1bHREZWxlZ2F0ZXMvV2ViRGVm
YXVsdFVJS2l0RGVsZWdhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MjM2Yzc0NGExMGM1Mjk2Nzk4NDVjZWZk
YmU5ZTZiYjUwZDA4N2M3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9pb3MvRGVm
YXVsdERlbGVnYXRlcy9XZWJEZWZhdWx0VUlLaXREZWxlZ2F0ZS5oCkBAIC0wLDAgKzEsMzEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW1wb3J0IDxXZWJLaXQvV2ViVUlLaXREZWxlZ2F0ZS5oPgorCitAaW50
ZXJmYWNlIFdlYkRlZmF1bHRVSUtpdERlbGVnYXRlIDogTlNPYmplY3QgeworfQorKyAoV2ViRGVm
YXVsdFVJS2l0RGVsZWdhdGUgKilzaGFyZWRVSUtpdERlbGVnYXRlOworQGVuZApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9pb3MvRGVmYXVsdERlbGVnYXRlcy9XZWJEZWZhdWx0VUlLaXREZWxl
Z2F0ZS5tIGIvU291cmNlL1dlYktpdC9pb3MvRGVmYXVsdERlbGVnYXRlcy9XZWJEZWZhdWx0VUlL
aXREZWxlZ2F0ZS5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNkNGNhYmMxODdhMWJkZTJmMjc3ZWI1Yjc4ZTZhMDQx
NmZiOWYxMWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2lvcy9EZWZhdWx0RGVs
ZWdhdGVzL1dlYkRlZmF1bHRVSUtpdERlbGVnYXRlLm0KQEAgLTAsMCArMSwyNzIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWYgUExBVEZPUk0oSU9TKQorCisjaW1wb3J0ICJXZWJEZWZhdWx0VUlLaXREZWxl
Z2F0ZS5oIgorCisjaW1wb3J0ICJXZWJVSURlbGVnYXRlLmgiCisKK3N0YXRpYyBXZWJEZWZhdWx0
VUlLaXREZWxlZ2F0ZSAqc2hhcmVkRGVsZWdhdGUgPSBuaWw7CisKK0BpbXBsZW1lbnRhdGlvbiBX
ZWJEZWZhdWx0VUlLaXREZWxlZ2F0ZQorCisrIChXZWJEZWZhdWx0VUlLaXREZWxlZ2F0ZSAqKXNo
YXJlZFVJS2l0RGVsZWdhdGUKK3sKKyAgICBpZiAoIXNoYXJlZERlbGVnYXRlKSB7CisgICAgICAg
IHNoYXJlZERlbGVnYXRlID0gW1tXZWJEZWZhdWx0VUlLaXREZWxlZ2F0ZSBhbGxvY10gaW5pdF07
CisgICAgfQorICAgIHJldHVybiBzaGFyZWREZWxlZ2F0ZTsKK30KKworLSAoQ0dQb2ludCljb250
ZW50c1BvaW50Rm9yV2ViVmlldzooV2ViVmlldyAqKWFXZWJWaWV3Cit7CisgICAgcmV0dXJuIENH
UG9pbnRaZXJvOworfQorCistIChDR1JlY3QpZG9jdW1lbnRWaXNpYmxlUmVjdEZvcldlYlZpZXc6
KFdlYlZpZXcgKilhV2ViVmlldworeworICAgIHJldHVybiBDR1JlY3RaZXJvOworfQorCistICh2
b2lkKXdlYlZpZXc6KFdlYlZpZXcgKilzZW5kZXIgZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JG
cmFtZTooV2ViRnJhbWUgKilmcmFtZQoreworCit9CisKKy0gKHZvaWQpd2ViVmlldzooV2ViVmll
dyAqKXNlbmRlciBkaWRDb21taXRMb2FkRm9yRnJhbWU6KFdlYkZyYW1lICopZnJhbWUKK3sKKyAg
ICAKK30KKworLSAodm9pZCl3ZWJWaWV3OihXZWJWaWV3ICopc2VuZGVyIGRpZEZpbmlzaExvYWRG
b3JGcmFtZTooV2ViRnJhbWUgKilmcmFtZQoreworCit9CisKKy0gKHZvaWQpd2ViVmlldzooV2Vi
VmlldyAqKXdlYlZpZXcgc2F2ZVN0YXRlVG9IaXN0b3J5SXRlbTooV2ViSGlzdG9yeUl0ZW0gKilp
dGVtIGZvckZyYW1lOihXZWJGcmFtZSAqKWZyYW1lCit7CisgICAgCit9CisKKy0gKHZvaWQpd2Vi
VmlldzooV2ViVmlldyAqKXdlYlZpZXcgcmVzdG9yZVN0YXRlRnJvbUhpc3RvcnlJdGVtOihXZWJI
aXN0b3J5SXRlbSAqKWl0ZW0gZm9yRnJhbWU6KFdlYkZyYW1lICopZnJhbWUgZm9yY2U6KEJPT0wp
Zm9yY2UKK3sKKyAgICAKK30KKworLSAodm9pZCl3ZWJWaWV3OihXZWJWaWV3ICopYVdlYlZpZXcg
ZGlkUmVjZWl2ZVZpZXdwb3J0QXJndW1lbnRzOihOU0RpY3Rpb25hcnkgKilhcmd1bWVudHMKK3sK
KworfQorCistICh2b2lkKXdlYlZpZXc6KFdlYlZpZXcgKilhV2ViVmlldyBuZWVkc1Njcm9sbE5v
dGlmaWNhdGlvbnM6KE5TTnVtYmVyICopYU51bWJlciBmb3JGcmFtZTooV2ViRnJhbWUgKilhRnJh
bWUKK3sKKyAgICAKK30KKworLSAodm9pZCl3ZWJWaWV3OihXZWJWaWV3ICopYVdlYlZpZXcgZGlk
T2JzZXJ2ZURlZmVycmVkQ29udGVudENoYW5nZTooV0tDb250ZW50Q2hhbmdlKWFDaGFuZ2UgZm9y
RnJhbWU6KFdlYkZyYW1lICopZnJhbWUKK3sKKyAgICAKK30KKworLSAodm9pZCl3ZWJWaWV3RGlk
UHJldmVudERlZmF1bHRGb3JFdmVudDooV2ViVmlldyAqKXdlYlZpZXcKK3sKK30KKworLSAoQk9P
TCl3ZWJWaWV3OihXZWJWaWV3ICopd2ViVmlldyBzaG91bGRTY3JvbGxUb1BvaW50OihDR1BvaW50
KXBvaW50IGZvckZyYW1lOihXZWJGcmFtZSAqKWZyYW1lCit7CisgICAgcmV0dXJuIFlFUzsKK30K
KworLSAodm9pZCl3ZWJWaWV3OihXZWJWaWV3ICopd2ViVmlldyB3aWxsQ2xvc2VGcmFtZTooV2Vi
RnJhbWUgKilmcmFtZQoreworICAgIAorfQorCistICh2b2lkKXdlYlZpZXc6KFdlYlZpZXcgKil3
ZWJWaWV3IGRpZEZpbmlzaERvY3VtZW50TG9hZEZvckZyYW1lOihXZWJGcmFtZSAqKWZyYW1lCit7
CisgICAgCit9CisKKy0gKHZvaWQpd2ViVmlldzooV2ViVmlldyAqKXNlbmRlciBkaWRGYWlsTG9h
ZFdpdGhFcnJvcjooTlNFcnJvciAqKWVycm9yIGZvckZyYW1lOihXZWJGcmFtZSAqKWZyYW1lCit7
Cit9CisKKy0gKHZvaWQpd2ViVmlldzooV2ViVmlldyAqKXNlbmRlciBkaWRDaGFuZ2VMb2NhdGlv
bldpdGhpblBhZ2VGb3JGcmFtZTooV2ViRnJhbWUgKilmcmFtZQoreworfQorCistICh2b2lkKXdl
YlZpZXc6KFdlYlZpZXcgKil3ZWJWaWV3IGRpZEZpcnN0TGF5b3V0SW5GcmFtZTooV2ViRnJhbWUg
KilmcmFtZQoreworICAgIAorfQorCistICh2b2lkKXdlYlZpZXc6KFdlYlZpZXcgKil3ZWJWaWV3
IGRpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEluRnJhbWU6KFdlYkZyYW1lICopZnJhbWUK
K3sKK30KKworLSAodm9pZCl3ZWJWaWV3OihXZWJWaWV3ICopd2ViVmlldyBlbGVtZW50RGlkRm9j
dXNOb2RlOihET01Ob2RlICopbm9kZQoreworfQorCistICh2b2lkKXdlYlZpZXc6KFdlYlZpZXcg
Kil3ZWJWaWV3IGVsZW1lbnREaWRCbHVyTm9kZTooRE9NTm9kZSAqKW5vZGUKK3sKK30KKworLSAo
dm9pZCl3ZWJWaWV3RGlkUmVzdG9yZUZyb21QYWdlQ2FjaGU6KFdlYlZpZXcgKil3ZWJWaWV3Cit7
Cit9CisKKy0gKHZvaWQpd2ViVmlldzooV2ViVmlldyAqKXdlYlZpZXcgZGlkUmVjZWl2ZURvY1R5
cGVGb3JGcmFtZTooV2ViRnJhbWUgKilmcmFtZQoreworICAgIAorfQorCistIChOU1ZpZXcgKil3
ZWJWaWV3OihXZWJWaWV3ICopd2ViVmlldyBwbHVnSW5WaWV3V2l0aEFyZ3VtZW50czooTlNEaWN0
aW9uYXJ5ICopYXJndW1lbnRzIGZyb21QbHVnSW5QYWNrYWdlOihXZWJQbHVnaW5QYWNrYWdlICop
cGFja2FnZQoreworICAgIHJldHVybiBuaWw7Cit9CisKKy0gKHZvaWQpd2ViVmlldzooV2ViVmll
dyAqKXdlYlZpZXcgd2lsbFNob3dGdWxsU2NyZWVuRm9yUGx1Z0luVmlldzooaWQpcGx1Z0luVmll
dworeworfQorCistICh2b2lkKXdlYlZpZXc6KFdlYlZpZXcgKil3ZWJWaWV3IGRpZEhpZGVGdWxs
U2NyZWVuRm9yUGx1Z0luVmlldzooaWQpcGx1Z0luVmlldworeworfQorCistICh2b2lkKXdlYlZp
ZXc6KFdlYlZpZXcgKilhV2ViVmlldyBkaWRSZWNlaXZlTWVzc2FnZTooTlNEaWN0aW9uYXJ5ICop
YU1lc3NhZ2UKK3sKK30KKworLy8gRklYTUU6IHRvIGJlIHJlbW92ZWQgd2hlbiBVSUtpdCBpbXBs
ZW1lbnRzIHRoZSBuZXcgb25lIGJlbG93LgorLSAodm9pZClhZGRJbnB1dFN0cmluZzooTlNTdHJp
bmcgKilzdHIgZnJvbVZhcmlhbnRLZXk6KEJPT0wpaXNQb3B1cFZhcmlhbnQKK3sKK30KKworLSAo
dm9pZClhZGRJbnB1dFN0cmluZzooTlNTdHJpbmcgKilzdHIgd2l0aEZsYWdzOihOU1VJbnRlZ2Vy
KWZsYWdzCit7Cit9CisKKy0gKHZvaWQpZGVsZXRlRnJvbUlucHV0Cit7Cit9CisKKy0gKHZvaWQp
X3dlYnRocmVhZF93ZWJWaWV3OihXZWJWaWV3ICopc2VuZGVyIGF0dGFjaFJvb3RMYXllcjooaWQp
bGF5ZXIKK3sKK30KKworLSAodm9pZCl3ZWJWaWV3RGlkQ29tbWl0Q29tcG9zaXRpbmdMYXllckNo
YW5nZXM6KFdlYlZpZXcqKXdlYlZpZXcKK3sKK30KKworLSAodm9pZCl3ZWJWaWV3OihXZWJWaWV3
Kil3ZWJWaWV3IGRpZENyZWF0ZU9yVXBkYXRlU2Nyb2xsaW5nTGF5ZXI6KGlkKWxheWVyIHdpdGhD
b250ZW50c0xheWVyOihpZCljb250ZW50c0xheWVyIHNjcm9sbFNpemU6KE5TVmFsdWUqKXNpemVW
YWx1ZSBmb3JOb2RlOihET01Ob2RlICopbm9kZQorICAgIGFsbG93SG9yaXpvbnRhbFNjcm9sbGJh
cjooQk9PTClhbGxvd0hvcml6b250YWxTY3JvbGxiYXIgYWxsb3dWZXJ0aWNhbFNjcm9sbGJhcjoo
Qk9PTClhbGxvd1ZlcnRpY2FsU2Nyb2xsYmFyCit7Cit9CisKKy0gKHZvaWQpd2ViVmlldzooV2Vi
Vmlldyopd2ViVmlldyB3aWxsUmVtb3ZlU2Nyb2xsaW5nTGF5ZXI6KGlkKWxheWVyIHdpdGhDb250
ZW50c0xheWVyOihpZCljb250ZW50c0xheWVyIGZvck5vZGU6KERPTU5vZGUgKilub2RlCit7Cit9
CisKKy0gKHZvaWQpcmV2ZWFsZWRTZWxlY3Rpb25CeVNjcm9sbGluZ1dlYkZyYW1lOihXZWJGcmFt
ZSAqKXdlYkZyYW1lCit7Cit9CisKKy0gKHZvaWQpd2ViVmlld0RpZExheW91dDooV2ViVmlldyAq
KXdlYlZpZXcKK3sKK30KKworLSAodm9pZCl3ZWJWaWV3RGlkU3RhcnRPdmVyZmxvd1Njcm9sbDoo
V2ViVmlldyAqKXdlYlZpZXcKK3sKK30KKworLSAodm9pZCl3ZWJWaWV3RGlkRW5kT3ZlcmZsb3dT
Y3JvbGw6KFdlYlZpZXcgKil3ZWJWaWV3Cit7Cit9CisKKy0gKHZvaWQpd2ViVmlldzooV2ViVmll
dyAqKXdlYlZpZXcgcnVuT3BlblBhbmVsRm9yRmlsZUJ1dHRvbldpdGhSZXN1bHRMaXN0ZW5lcjoo
aWQ8V2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXI+KXJlc3VsdExpc3RlbmVyIGFsbG93TXVsdGlw
bGVGaWxlczooQk9PTClhbGxvd011bHRpcGxlRmlsZXMgYWNjZXB0TUlNRVR5cGVzOihOU0FycmF5
ICopbWltZVR5cGVzCit7CisgICAgW3Jlc3VsdExpc3RlbmVyIGNhbmNlbF07Cit9CisKKy0gKE5T
QXJyYXkgKiljaGVja1NwZWxsaW5nT2ZTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nVG9DaGVjawor
eworICAgIHJldHVybiBuaWw7Cit9CisKKy0gKHZvaWQpd3JpdGVEYXRhVG9QYXN0ZWJvYXJkOihO
U0RpY3Rpb25hcnkgKilyZXByZXNlbnRhdGlvbnMKK3sKK30KKworLSAoTlNBcnJheSopcmVhZERh
dGFGcm9tUGFzdGVib2FyZDooTlNTdHJpbmcqKXR5cGUgd2l0aEluZGV4OihOU0ludGVnZXIpaW5k
ZXgKK3sKKyAgICByZXR1cm4gbmlsOworfQorCistIChOU0ludGVnZXIpZ2V0UGFzdGVib2FyZEl0
ZW1zQ291bnQKK3sKKyAgICByZXR1cm4gMDsKK30KKworLSAoTlNBcnJheSopc3VwcG9ydGVkUGFz
dGVib2FyZFR5cGVzRm9yQ3VycmVudFNlbGVjdGlvbiAKK3sgCisgICAgcmV0dXJuIG5pbDsgCit9
IAorCistIChCT09MKWhhc1JpY2hseUVkaXRhYmxlU2VsZWN0aW9uCit7CisgICAgcmV0dXJuIE5P
OworfQorCistIChCT09MKXBlcmZvcm1zVHdvU3RlcFBhc3RlOihET01Eb2N1bWVudEZyYWdtZW50
KilmcmFnbWVudAoreworICAgIHJldHVybiBOTzsKK30KKworLSAoTlNJbnRlZ2VyKWdldFBhc3Rl
Ym9hcmRDaGFuZ2VDb3VudAoreworICAgIHJldHVybiAwOworfQorCistIChCT09MKWlzVW5wZXJ0
dXJiZWREaWN0YXRpb25SZXN1bHRNYXJrZXI6KGlkKW1ldGFkYXRhRm9yTWFya2VyCit7CisgICAg
cmV0dXJuIE5POworfQorCistICh2b2lkKXdlYlZpZXc6KFdlYlZpZXcgKil3ZWJWaWV3IHdpbGxB
ZGRQbHVnSW5WaWV3OihpZClwbHVnSW5WaWV3Cit7Cit9CisKKy0gKHZvaWQpd2ViVmlld0RpZERy
YXdUaWxlczooV2ViVmlldyAqKXdlYlZpZXcKK3sKK30KKworLSAodm9pZCl3ZWJWaWV3OihXZWJW
aWV3ICopd2ViVmlldyBhZGRNZXNzYWdlVG9Db25zb2xlOihOU0RpY3Rpb25hcnkgKiltZXNzYWdl
IHdpdGhTb3VyY2U6KE5TU3RyaW5nICopc291cmNlCit7Cit9CitAZW5kCisKKyNlbmRpZiAvLyBQ
TEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2lvcy9NaXNjL0Vtb2ppRmFs
bGJhY2tGb250U2VsZWN0b3IuY3BwIGIvU291cmNlL1dlYktpdC9pb3MvTWlzYy9FbW9qaUZhbGxi
YWNrRm9udFNlbGVjdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNjQxNTU4MzcyMWJmYjQwYjcxNjg3NGVl
NTgwYTIwOTViNWM2M2Y2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9pb3MvTWlz
Yy9FbW9qaUZhbGxiYWNrRm9udFNlbGVjdG9yLmNwcApAQCAtMCwwICsxLDQ1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgIkVtb2ppRmFsbGJhY2tGb250U2VsZWN0b3IuaCIKKworI2luY2x1ZGUg
PFdlYkNvcmUvRm9udENhY2hlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TaW1wbGVGb250RGF0YS5o
PgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWlj
U3RyaW5nLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitQYXNzUmVmUHRyPEZvbnRE
YXRhPiBFbW9qaUZhbGxiYWNrRm9udFNlbGVjdG9yOjpnZXRGYWxsYmFja0ZvbnREYXRhKGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBzaXplX3QpCit7CisgICAgREVGSU5F
X1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIGFwcGxlQ29sb3JFbW9qaSwgKCJBcHBsZSBDb2xv
ciBFbW9qaSIpKTsKKyAgICBSZWZQdHI8Rm9udERhdGE+IGZvbnREYXRhID0gZm9udENhY2hlKCkt
PmdldENhY2hlZEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbiwgYXBwbGVDb2xvckVtb2ppKTsKKyAg
ICBpZiAoIWZvbnREYXRhKSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGdldCBcIkFw
cGxlIENvbG9yIEVtb2ppXCIgZnJvbSB0aGUgZm9udCBjYWNoZS4gVXNpbmcgdGhlIGxhc3QgcmVz
b3J0IGZhbGxiYWNrIGZvbnQgaW5zdGVhZC4iKTsKKyAgICAgICAgZm9udERhdGEgPSBmb250Q2Fj
aGUoKS0+Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChmb250RGVzY3JpcHRpb24pOworICAgIH0K
KworICAgIHJldHVybiBmb250RGF0YS5yZWxlYXNlKCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2lvcy9NaXNjL0Vtb2ppRmFsbGJhY2tGb250U2VsZWN0b3IuaCBiL1NvdXJjZS9XZWJL
aXQvaW9zL01pc2MvRW1vamlGYWxsYmFja0ZvbnRTZWxlY3Rvci5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI4NWNj
Njk3ZWVlMmRmNWJjZWU4MzY1MzU3YTI1M2Q0NTNkZTY0YjUKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L2lvcy9NaXNjL0Vtb2ppRmFsbGJhY2tGb250U2VsZWN0b3IuaApAQCAtMCww
ICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBFbW9qaUZhbGxiYWNrRm9udFNlbGVjdG9y
X2gKKyNkZWZpbmUgRW1vamlGYWxsYmFja0ZvbnRTZWxlY3Rvcl9oCisKKyNpbmNsdWRlIDxXZWJD
b3JlL0ZvbnRTZWxlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK2NsYXNz
IEVtb2ppRmFsbGJhY2tGb250U2VsZWN0b3IgOiBwdWJsaWMgV2ViQ29yZTo6Rm9udFNlbGVjdG9y
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxFbW9qaUZhbGxiYWNrRm9udFNlbGVj
dG9yPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgRW1vamlGYWxsYmFja0ZvbnRTZWxl
Y3RvcigpKTsgfQorICAgIHZpcnR1YWwgfkVtb2ppRmFsbGJhY2tGb250U2VsZWN0b3IoKSBPVkVS
UklERSB7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6Rm9udERhdGE+IGdldEZv
bnREYXRhKGNvbnN0IFdlYkNvcmU6OkZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgZmFtaWx5TmFtZSkgT1ZFUlJJREUgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIDA7
IH0KKyAgICB2aXJ0dWFsIGJvb2wgcmVzb2x2ZXNGYW1pbHlGb3IoY29uc3QgV2ViQ29yZTo6Rm9u
dERlc2NyaXB0aW9uJikgY29uc3QgT1ZFUlJJREUgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0
dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBzaXplX3QgZmFsbGJhY2tGb250RGF0YUNvdW50KCkg
T1ZFUlJJREUgeyByZXR1cm4gMTsgfTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6
Rm9udERhdGE+IGdldEZhbGxiYWNrRm9udERhdGEoY29uc3QgV2ViQ29yZTo6Rm9udERlc2NyaXB0
aW9uJiwgc2l6ZV90KSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckZvcklu
dmFsaWRhdGlvbkNhbGxiYWNrcyhXZWJDb3JlOjpGb250U2VsZWN0b3JDbGllbnQqKSBPVkVSUklE
RSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdW5yZWdpc3RlckZvckludmFsaWRhdGlvbkNhbGxiYWNr
cyhXZWJDb3JlOjpGb250U2VsZWN0b3JDbGllbnQqKSBPVkVSUklERSB7IH0KKworICAgIHZpcnR1
YWwgdW5zaWduZWQgdmVyc2lvbigpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIDA7IH0KKyAgICB2
aXJ0dWFsIHVuc2lnbmVkIHVuaXF1ZUlkKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gMDsgfQor
Citwcml2YXRlOgorICAgIEVtb2ppRmFsbGJhY2tGb250U2VsZWN0b3IoKSB7IH0KK307CisKKyNl
bmRpZiAvLyBFbW9qaUZhbGxiYWNrRm9udFNlbGVjdG9yX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvaW9zL01pc2MvTWVtb3J5TWVhc3VyZS5oIGIvU291cmNlL1dlYktpdC9pb3MvTWlzYy9N
ZW1vcnlNZWFzdXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGM2ZDUwOTZiYTI2NTgyMjY0YzA5NzcxNjU4Yzk0
YTk2MmU5NzJmZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvaW9zL01pc2MvTWVt
b3J5TWVhc3VyZS5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE1lbW9y
eU1lYXN1cmVfaAorI2RlZmluZSBNZW1vcnlNZWFzdXJlX2gKKworbmFtZXNwYWNlIFdlYktpdCB7
CisKKy8qIQorICogQSBzaW1wbGUgY2xhc3MgdGhhdCBtZWFzdXJlcyB0aGUgZGlmZmVyZW5jZSBp
biB0aGUgcmVzaWRlbnQgbWVtb3J5IG9mIHRoZQorICogcHJvY2VzcyBiZXR3ZWVuIGl0cyBjb250
cnVjdGlvbiBhbmQgZGVzdHJ1Y3Rpb24uIEl0IHVzZXMgdGhlIG1hY2ggQVBJIC0KKyAqIHRhc2tf
aW5mbyAtIHRvIGZpZ3VyZSB0aGlzIG91dC4KKyAqLworY2xhc3MgTWVtb3J5TWVhc3VyZSB7Citw
dWJsaWM6CisgICAgTWVtb3J5TWVhc3VyZSgpCisgICAgICAgIDogbV9sb2dTdHJpbmcoIiIpCisg
ICAgICAgICwgbV9pbml0aWFsTWVtb3J5KHRhc2tNZW1vcnkoKSkKKyAgICB7CisgICAgfQorCisg
ICAgTWVtb3J5TWVhc3VyZShjb25zdCBjaGFyICpsb2cpCisgICAgICAgIDogbV9sb2dTdHJpbmco
bG9nKQorICAgICAgICAsIG1faW5pdGlhbE1lbW9yeSh0YXNrTWVtb3J5KCkpCisgICAgeworICAg
IH0KKworICAgIH5NZW1vcnlNZWFzdXJlKCk7CisKKyAgICBzdGF0aWMgdm9pZCBlbmFibGVMb2dn
aW5nKGJvb2wgZW5hYmxlZCk7CisgICAgc3RhdGljIGJvb2wgaXNMb2dnaW5nRW5hYmxlZCgpOwor
Citwcml2YXRlOgorICAgIGNvbnN0IGNoYXIgKm1fbG9nU3RyaW5nOworICAgIGxvbmcgbV9pbml0
aWFsTWVtb3J5OworICAgIHN0YXRpYyBib29sIG1faXNMb2dnaW5nRW5hYmxlZDsKKworICAgIC8q
IQorICAgICAqIEByZXR1cm4gVGhlIHJlc2lkZW50IG1lbW9yeSAoaW4gYnl0ZXMpIGNvbnN1bWVk
IGJ5IHRoZSBwcm9jZXNzLiBJdCB1c2VzCisgICAgICogICAgICAgICB0YXNrX2luZm8oKSB0byBn
ZXQgdGhpcyBpbmZvcm1hdGlvbi4gSWYgdGhlcmUgaXMgYW4gZXJyb3IsIGl0CisgICAgICogICAg
ICAgICByZXR1cm5zIC0xLgorICAgICAqLworICAgIGxvbmcgdGFza01lbW9yeSgpOworfTsKKwor
fQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2lvcy9NaXNjL01lbW9yeU1lYXN1
cmUubW0gYi9Tb3VyY2UvV2ViS2l0L2lvcy9NaXNjL01lbW9yeU1lYXN1cmUubW0KbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYWNkMTRmNTM3NDFhYzlhMzI4NWJlMzNiMjE3NzdmNGVjMzEwOWY1ZAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvaW9zL01pc2MvTWVtb3J5TWVhc3VyZS5tbQpAQCAtMCwwICsx
LDgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIk1lbW9yeU1lYXN1cmUuaCIKKworI2luY2x1
ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8bWFjaC9tYWNoLmg+CisKK3N0YXRpYyBjb25zdCBpbnQg
bWVhc3VyZU1lbW9yeUZhaWxlZCA9IC0xOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworYm9vbCBN
ZW1vcnlNZWFzdXJlOjptX2lzTG9nZ2luZ0VuYWJsZWQ7CisKK3ZvaWQgTWVtb3J5TWVhc3VyZTo6
ZW5hYmxlTG9nZ2luZyhib29sIGVuYWJsZWQpCit7CisgICAgbV9pc0xvZ2dpbmdFbmFibGVkID0g
ZW5hYmxlZDsKK30KKworYm9vbCBNZW1vcnlNZWFzdXJlOjppc0xvZ2dpbmdFbmFibGVkKCkKK3sK
KyAgICByZXR1cm4gbV9pc0xvZ2dpbmdFbmFibGVkOworfQorCitsb25nIE1lbW9yeU1lYXN1cmU6
OnRhc2tNZW1vcnkoKQoreworICAgIGlmICghTWVtb3J5TWVhc3VyZTo6aXNMb2dnaW5nRW5hYmxl
ZCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHRhc2tfdm1faW5mb19kYXRhX3Qgdm1JbmZv
OworICAgIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QgY291bnQgPSBUQVNLX1ZNX0lORk9fQ09VTlQ7
CisgICAga2Vybl9yZXR1cm5fdCBlcnIgPSB0YXNrX2luZm8obWFjaF90YXNrX3NlbGYoKSwgVEFT
S19WTV9JTkZPLCAodGFza19pbmZvX3QpICZ2bUluZm8sICZjb3VudCk7CisgICAgaWYgKGVyciAh
PSBLRVJOX1NVQ0NFU1MpCisgICAgICAgIHJldHVybiBtZWFzdXJlTWVtb3J5RmFpbGVkOworCisg
ICAgcmV0dXJuIChsb25nKSB2bUluZm8uaW50ZXJuYWw7Cit9CisKK01lbW9yeU1lYXN1cmU6On5N
ZW1vcnlNZWFzdXJlKCkKK3sKKyAgICBpZiAoIU1lbW9yeU1lYXN1cmU6OmlzTG9nZ2luZ0VuYWJs
ZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbG9uZyBjdXJyZW50TWVtb3J5ID0gdGFza01l
bW9yeSgpOworICAgIGlmIChjdXJyZW50TWVtb3J5ID09IG1lYXN1cmVNZW1vcnlGYWlsZWQgfHwg
bV9pbml0aWFsTWVtb3J5ID09IG1lYXN1cmVNZW1vcnlGYWlsZWQpIHsKKyAgICAgICAgTlNMb2co
QCIlcyAoVW5hYmxlIHRvIGdldCBkaXJ0eSBtZW1vcnkgaW5mb3JtYXRpb24gZm9yIHByb2Nlc3Mp
XG4iLCBtX2xvZ1N0cmluZyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBsb25nIG1l
bW9yeURpZmYgPSBjdXJyZW50TWVtb3J5IC0gbV9pbml0aWFsTWVtb3J5OworICAgIGlmIChtZW1v
cnlEaWZmIDwgMCkKKyAgICAgICAgTlNMb2coQCIlcyBEaXJ0eSBtZW1vcnkgcmVkdWNlZCBieSAl
bGQgYnl0ZXMgKGZyb20gJWxkIHRvICVsZClcbiIsIG1fbG9nU3RyaW5nLCAobWVtb3J5RGlmZiAq
IC0xKSwgbV9pbml0aWFsTWVtb3J5LCBjdXJyZW50TWVtb3J5KTsKKyAgICBlbHNlIGlmIChtZW1v
cnlEaWZmID4gMCkKKyAgICAgICAgTlNMb2coQCIlcyBEaXJ0eSBtZW1vcnkgaW5jcmVhc2VkIGJ5
ICVsZCBieXRlcyAoZnJvbSAlbGQgdG8gJWxkKVxuIiwgbV9sb2dTdHJpbmcsIG1lbW9yeURpZmYs
IG1faW5pdGlhbE1lbW9yeSwgY3VycmVudE1lbW9yeSk7CisgICAgZWxzZQorICAgICAgICBOU0xv
ZyhAIiVzIE5vIGNoYW5nZSBpbiBkaXJ0eSBtZW1vcnkgdXNlZCBieSBwcm9jZXNzIChhdCAlbGQg
Ynl0ZXMpXG4iLCBtX2xvZ1N0cmluZywgY3VycmVudE1lbW9yeSk7Cit9CisKK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvaW9zL01pc2MvV2ViR2VvbG9jYXRpb25Db3JlTG9jYXRpb25Qcm92
aWRlci5oIGIvU291cmNlL1dlYktpdC9pb3MvTWlzYy9XZWJHZW9sb2NhdGlvbkNvcmVMb2NhdGlv
blByb3ZpZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmJjM2RhM2I5MTZmZTBiNzk3YjExZTc0NWRkY2NkMTJj
MTE5MGEwNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvaW9zL01pc2MvV2ViR2Vv
bG9jYXRpb25Db3JlTG9jYXRpb25Qcm92aWRlci5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTAsIDIwMTIgQXBwbGUgSW5jLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW1wb3J0IDxGb3VuZGF0aW9uL05TT2JqZWN0Lmg+CisjaW1wb3J0IDx3dGYvUGFzc1JlZlB0ci5o
PgorCitAY2xhc3MgQ0xMb2NhdGlvbk1hbmFnZXI7CitAY2xhc3MgTlNTdHJpbmc7CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKK2NsYXNzIEdlb2xvY2F0aW9uUG9zaXRpb247Cit9CisKKy8vIFdlYkdl
b2xvY2F0aW9uQ29yZUxvY2F0aW9uRGVsZWdhdGUgYWJzdHJhY3RzIHRoZSBsb2NhdGlvbiBzZXJ2
aWNlcyBvZiBDb3JlTG9jYXRpb24uCisvLyBBbGwgdGhlIHJlc3VsdHMgY29tZSBiYWNrIHRocm91
Z2ggdGhlIHByb3RvY29sIEdlb2xvY2F0aW9uVXBkYXRlTGlzdGVuZXIuIFRob3NlIGNhbGxiYWNr
IGNhbgorLy8gYmUgZG9uZSBzeW5jaHJvbm91c2x5IGFuZCBhc3luY2hyb25vdXNseSBpbiByZXNw
b25zZXMgdG8gY2FsbHMgbWFkZSBvbiBXZWJHZW9sb2NhdGlvbkNvcmVMb2NhdGlvbkRlbGVnYXRl
LgorCisvLyBBbGwgY2FsbHMgdG8gV2ViR2VvbG9jYXRpb25Db3JlTG9jYXRpb25EZWxlZ2F0ZSBt
dXN0IGJlIG9uIHRoZSBtYWluIHRocmVhZCwgYWxsIGNhbGxiYWNrcyBhcmUgZG9uZSBvbiB0aGUK
Ky8vIG1haW4gdGhyZWFkLgorCitAcHJvdG9jb2wgV2ViR2VvbG9jYXRpb25Db3JlTG9jYXRpb25V
cGRhdGVMaXN0ZW5lcgorLSAodm9pZClnZW9sb2NhdGlvbkRlbGVnYXRlU3RhcnRlZDsKKy0gKHZv
aWQpZ2VvbG9jYXRpb25EZWxlZ2F0ZVVuYWJsZVRvU3RhcnQ7CisKKy0gKHZvaWQpcG9zaXRpb25D
aGFuZ2VkOihXZWJDb3JlOjpHZW9sb2NhdGlvblBvc2l0aW9uKilwb3NpdGlvbjsKKy0gKHZvaWQp
ZXJyb3JPY2N1cnJlZDooTlNTdHJpbmcgKillcnJvck1lc3NhZ2U7CistICh2b2lkKXJlc2V0R2Vv
bG9jYXRpb247CitAZW5kCisKKworQGludGVyZmFjZSBXZWJHZW9sb2NhdGlvbkNvcmVMb2NhdGlv
blByb3ZpZGVyIDogTlNPYmplY3QKKy0gKGlkKWluaXRXaXRoTGlzdGVuZXI6KGlkPFdlYkdlb2xv
Y2F0aW9uQ29yZUxvY2F0aW9uVXBkYXRlTGlzdGVuZXI+KWxpc3RlbmVyOworCistICh2b2lkKXN0
YXJ0OworLSAodm9pZClzdG9wOworLSAodm9pZClzZXRFbmFibGVIaWdoQWNjdXJhY3k6KEJPT0wp
ZmxhZzsKK0BlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvaW9zL01pc2MvV2ViR2VvbG9j
YXRpb25Db3JlTG9jYXRpb25Qcm92aWRlci5tbSBiL1NvdXJjZS9XZWJLaXQvaW9zL01pc2MvV2Vi
R2VvbG9jYXRpb25Db3JlTG9jYXRpb25Qcm92aWRlci5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNmNlZWE0OTA0
MzI3ZDY5ZWFjZTZlNTVlYTVlNWM0YjU2MTg4Y2ZhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9pb3MvTWlzYy9XZWJHZW9sb2NhdGlvbkNvcmVMb2NhdGlvblByb3ZpZGVyLm1tCkBA
IC0wLDAgKzEsMjIyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDEwLCAy
MDEyIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiV2ViR2VvbG9jYXRpb25Db3JlTG9jYXRp
b25Qcm92aWRlci5oIgorCisjaW1wb3J0IDxDb3JlTG9jYXRpb24vQ0xMb2NhdGlvbi5oPgorI2lt
cG9ydCA8Q29yZUxvY2F0aW9uL0NMTG9jYXRpb25NYW5hZ2VyRGVsZWdhdGUuaD4KKyNpbXBvcnQg
PENvcmVMb2NhdGlvbi9Db3JlTG9jYXRpb24uaD4KKyNpbXBvcnQgPENvcmVMb2NhdGlvbi9Db3Jl
TG9jYXRpb25Qcml2Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0dlb2xvY2F0aW9uUG9zaXRpb24uaD4K
KyNpbXBvcnQgPFdlYkNvcmUvU29mdExpbmtpbmcuaD4KKyNpbXBvcnQgPFdlYktpdExvZ2dpbmcu
aD4KKyNpbXBvcnQgPG9iamMvb2JqYy1ydW50aW1lLmg+CisjaW1wb3J0IDx3dGYvUmVmUHRyLmg+
CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisKK1NPRlRfTElOS19GUkFNRVdPUksoQ29yZUxv
Y2F0aW9uKQorCitTT0ZUX0xJTktfQ0xBU1MoQ29yZUxvY2F0aW9uLCBDTExvY2F0aW9uTWFuYWdl
cikKK1NPRlRfTElOS19DTEFTUyhDb3JlTG9jYXRpb24sIENMTG9jYXRpb24pCisKK1NPRlRfTElO
S19DT05TVEFOVChDb3JlTG9jYXRpb24sIGtDTExvY2F0aW9uQWNjdXJhY3lCZXN0LCBkb3VibGUp
CitTT0ZUX0xJTktfQ09OU1RBTlQoQ29yZUxvY2F0aW9uLCBrQ0xMb2NhdGlvbkFjY3VyYWN5SHVu
ZHJlZE1ldGVycywgZG91YmxlKQorCisjZGVmaW5lIGtDTExvY2F0aW9uQWNjdXJhY3lCZXN0IGdl
dGtDTExvY2F0aW9uQWNjdXJhY3lCZXN0KCkKKyNkZWZpbmUga0NMTG9jYXRpb25BY2N1cmFjeUh1
bmRyZWRNZXRlcnMgZ2V0a0NMTG9jYXRpb25BY2N1cmFjeUh1bmRyZWRNZXRlcnMoKQorCit1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworQGludGVyZmFjZSBXZWJHZW9sb2NhdGlvbkNvcmVMb2Nh
dGlvblByb3ZpZGVyICgpIDxDTExvY2F0aW9uTWFuYWdlckRlbGVnYXRlPgorQGVuZAorCitAaW1w
bGVtZW50YXRpb24gV2ViR2VvbG9jYXRpb25Db3JlTG9jYXRpb25Qcm92aWRlcgoreworICAgIGlk
PFdlYkdlb2xvY2F0aW9uQ29yZUxvY2F0aW9uVXBkYXRlTGlzdGVuZXI+IF9wb3NpdGlvbkxpc3Rl
bmVyOworICAgIFJldGFpblB0cjxDTExvY2F0aW9uTWFuYWdlcj4gX2xvY2F0aW9uTWFuYWdlcjsK
KyAgICBCT09MIF9pc1dhaXRpbmdGb3JBdXRob3JpemF0aW9uOworICAgIENMQXV0aG9yaXphdGlv
blN0YXR1cyBfbGFzdEF1dGhvcml6YXRpb25TdGF0dXM7Cit9CisKKy0gKHZvaWQpY3JlYXRlTG9j
YXRpb25NYW5hZ2VyCit7CisgICAgQVNTRVJUKCFfbG9jYXRpb25NYW5hZ2VyKTsKKworI2RlZmlu
ZSBDTExvY2F0aW9uTWFuYWdlciBnZXRDTExvY2F0aW9uTWFuYWdlckNsYXNzKCkKKyAgICBfbG9j
YXRpb25NYW5hZ2VyID0gYWRvcHROUyhbW0NMTG9jYXRpb25NYW5hZ2VyIGFsbG9jXSBpbml0XSk7
CisgICAgX2xhc3RBdXRob3JpemF0aW9uU3RhdHVzID0gW0NMTG9jYXRpb25NYW5hZ2VyIGF1dGhv
cml6YXRpb25TdGF0dXNdOworI3VuZGVmIENMTG9jYXRpb25NYW5hZ2VyCisKKyAgICBbIF9sb2Nh
dGlvbk1hbmFnZXIuZ2V0KCkgc2V0RGVsZWdhdGU6c2VsZl07Cit9CisKKy0gKGlkKWluaXRXaXRo
TGlzdGVuZXI6KGlkPFdlYkdlb2xvY2F0aW9uQ29yZUxvY2F0aW9uVXBkYXRlTGlzdGVuZXI+KWxp
c3RlbmVyCit7CisgICAgQVNTRVJUX01BSU5fVEhSRUFEKCk7CisgICAgc2VsZiA9IFtzdXBlciBp
bml0XTsKKyAgICBpZiAoc2VsZikgeworICAgICAgICBfcG9zaXRpb25MaXN0ZW5lciA9IGxpc3Rl
bmVyOworICAgICAgICBbc2VsZiBjcmVhdGVMb2NhdGlvbk1hbmFnZXJdOworICAgIH0KKyAgICBy
ZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgQVNTRVJUX01BSU5fVEhS
RUFEKCk7CisgICAgX2xvY2F0aW9uTWFuYWdlci5nZXQoKS5kZWxlZ2F0ZSA9IG5pbDsKKyAgICBb
c3VwZXIgZGVhbGxvY107Cit9CisKKy0gKEJPT0wpaGFuZGxlRXh0ZXJuYWxBdXRob3JpemF0aW9u
U3RhdHVzQ2hhbmdlOihDTEF1dGhvcml6YXRpb25TdGF0dXMpbmV3U3RhdHVzCit7CisgICAgQ0xB
dXRob3JpemF0aW9uU3RhdHVzIHByZXZpb3VzU3RhdHVzID0gX2xhc3RBdXRob3JpemF0aW9uU3Rh
dHVzOworICAgIF9sYXN0QXV0aG9yaXphdGlvblN0YXR1cyA9IG5ld1N0YXR1czsKKyAgICBpZiAo
IV9pc1dhaXRpbmdGb3JBdXRob3JpemF0aW9uICYmIHByZXZpb3VzU3RhdHVzICE9IG5ld1N0YXR1
cykgeworICAgICAgICBbX2xvY2F0aW9uTWFuYWdlci5nZXQoKSBzdG9wVXBkYXRpbmdMb2NhdGlv
bl07CisgICAgICAgIFtfcG9zaXRpb25MaXN0ZW5lciByZXNldEdlb2xvY2F0aW9uXTsKKyAgICAg
ICAgcmV0dXJuIFlFUzsKKyAgICB9CisgICAgcmV0dXJuIE5POworfQorCistICh2b2lkKXN0YXJ0
Cit7CisgICAgQVNTRVJUX01BSU5fVEhSRUFEKCk7CisKKyNkZWZpbmUgQ0xMb2NhdGlvbk1hbmFn
ZXIgZ2V0Q0xMb2NhdGlvbk1hbmFnZXJDbGFzcygpCisgICAgQ0xBdXRob3JpemF0aW9uU3RhdHVz
IGF1dGhvcml6YXRpb25TdGF0dXMgPSBbQ0xMb2NhdGlvbk1hbmFnZXIgYXV0aG9yaXphdGlvblN0
YXR1c107CisgICAgaWYgKFtzZWxmIGhhbmRsZUV4dGVybmFsQXV0aG9yaXphdGlvblN0YXR1c0No
YW5nZTphdXRob3JpemF0aW9uU3RhdHVzXSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFb
Q0xMb2NhdGlvbk1hbmFnZXIgbG9jYXRpb25TZXJ2aWNlc0VuYWJsZWRdKSB7CisgICAgICAgIFtf
cG9zaXRpb25MaXN0ZW5lciBnZW9sb2NhdGlvbkRlbGVnYXRlVW5hYmxlVG9TdGFydF07CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzd2l0Y2ggKGF1dGhvcml6YXRpb25TdGF0dXMpIHsK
KyAgICBjYXNlIGtDTEF1dGhvcml6YXRpb25TdGF0dXNOb3REZXRlcm1pbmVkOgorICAgICAgICBf
aXNXYWl0aW5nRm9yQXV0aG9yaXphdGlvbiA9IFlFUzsKKyAgICAgICAgW19sb2NhdGlvbk1hbmFn
ZXIuZ2V0KCkgc3RhcnRVcGRhdGluZ0xvY2F0aW9uXTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2Uga0NMQXV0aG9yaXphdGlvblN0YXR1c0RlbmllZDoKKyAgICBjYXNlIGtDTEF1dGhvcml6YXRp
b25TdGF0dXNSZXN0cmljdGVkOgorICAgICAgICBbX3Bvc2l0aW9uTGlzdGVuZXIgZ2VvbG9jYXRp
b25EZWxlZ2F0ZVVuYWJsZVRvU3RhcnRdOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBrQ0xB
dXRob3JpemF0aW9uU3RhdHVzQXV0aG9yaXplZDoKKyAgICAgICAgW19sb2NhdGlvbk1hbmFnZXIu
Z2V0KCkgc3RhcnRVcGRhdGluZ0xvY2F0aW9uXTsKKyAgICAgICAgW19wb3NpdGlvbkxpc3RlbmVy
IGdlb2xvY2F0aW9uRGVsZWdhdGVTdGFydGVkXTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyN1
bmRlZiBDTExvY2F0aW9uTWFuYWdlcgorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIFtf
cG9zaXRpb25MaXN0ZW5lciBnZW9sb2NhdGlvbkRlbGVnYXRlVW5hYmxlVG9TdGFydF07Cit9CisK
Ky0gKHZvaWQpc3RvcAoreworICAgIEFTU0VSVF9NQUlOX1RIUkVBRCgpOworICAgIFtfbG9jYXRp
b25NYW5hZ2VyLmdldCgpIHN0b3BVcGRhdGluZ0xvY2F0aW9uXTsKK30KKworLSAodm9pZClsb2Nh
dGlvbk1hbmFnZXI6KENMTG9jYXRpb25NYW5hZ2VyICopbWFuYWdlciBkaWRDaGFuZ2VBdXRob3Jp
emF0aW9uU3RhdHVzOihDTEF1dGhvcml6YXRpb25TdGF0dXMpc3RhdHVzCit7CisgICAgaWYgKFtz
ZWxmIGhhbmRsZUV4dGVybmFsQXV0aG9yaXphdGlvblN0YXR1c0NoYW5nZTpzdGF0dXNdKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAoX2lzV2FpdGluZ0ZvckF1dGhvcml6YXRpb24pIHsKKyAg
ICAgICAgc3dpdGNoIChzdGF0dXMpIHsKKyAgICAgICAgY2FzZSBrQ0xBdXRob3JpemF0aW9uU3Rh
dHVzTm90RGV0ZXJtaW5lZDoKKyAgICAgICAgICAgIC8vIFRoaXMgY2FuIGhhcHBlbiBhZnRlciBy
ZXN1bWUgaWYgdGhlIHVzZXIgaGFzIHN0aWxsIG5vdCBhbnN3ZXJlZCB0aGUgZGlhbG9nLiBXZSBq
dXN0IGhhdmUgdG8gd2FpdCBmb3IgdGhlIHBlcm1pc3Npb24uCisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBrQ0xBdXRob3JpemF0aW9uU3RhdHVzRGVuaWVkOgorICAgICAgICBjYXNl
IGtDTEF1dGhvcml6YXRpb25TdGF0dXNSZXN0cmljdGVkOgorICAgICAgICAgICAgX2lzV2FpdGlu
Z0ZvckF1dGhvcml6YXRpb24gPSBOTzsKKyAgICAgICAgICAgIFtfcG9zaXRpb25MaXN0ZW5lciBn
ZW9sb2NhdGlvbkRlbGVnYXRlVW5hYmxlVG9TdGFydF07CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBrQ0xBdXRob3JpemF0aW9uU3RhdHVzQXV0aG9yaXplZDoKKyAgICAgICAgICAg
IF9pc1dhaXRpbmdGb3JBdXRob3JpemF0aW9uID0gTk87CisgICAgICAgICAgICBbX3Bvc2l0aW9u
TGlzdGVuZXIgZ2VvbG9jYXRpb25EZWxlZ2F0ZVN0YXJ0ZWRdOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICB9Cit9CisKKy0gKHZvaWQpc2VuZExvY2F0aW9uOihDTExvY2F0aW9u
ICopbmV3TG9jYXRpb24KK3sKKyAgICAvLyBOb3JtYWxpemUuCisgICAgYm9vbCBjYW5Qcm92aWRl
QWx0aXR1ZGUgPSB0cnVlOworICAgIGJvb2wgY2FuUHJvdmlkZUFsdGl0dWRlQWNjdXJhY3kgPSB0
cnVlOworICAgIGRvdWJsZSBhbHRpdHVkZSA9IG5ld0xvY2F0aW9uLmFsdGl0dWRlOworICAgIGRv
dWJsZSBhbHRpdHVkZUFjY3VyYWN5ID0gbmV3TG9jYXRpb24udmVydGljYWxBY2N1cmFjeTsKKyAg
ICBpZiAoYWx0aXR1ZGVBY2N1cmFjeSA8IDAuMCkgeworICAgICAgICBjYW5Qcm92aWRlQWx0aXR1
ZGUgPSBmYWxzZTsKKyAgICAgICAgY2FuUHJvdmlkZUFsdGl0dWRlQWNjdXJhY3kgPSBmYWxzZTsK
KyAgICB9CisKKyAgICBib29sIGNhblByb3ZpZGVTcGVlZCA9IHRydWU7CisgICAgZG91YmxlIHNw
ZWVkID0gbmV3TG9jYXRpb24uc3BlZWQ7CisgICAgaWYgKHNwZWVkIDwgMC4wKQorICAgICAgICBj
YW5Qcm92aWRlU3BlZWQgPSBmYWxzZTsKKworICAgIGJvb2wgY2FuUHJvdmlkZUhlYWRpbmcgPSB0
cnVlOworICAgIGRvdWJsZSBoZWFkaW5nID0gbmV3TG9jYXRpb24uY291cnNlOworICAgIGlmICho
ZWFkaW5nIDwgMC4wKQorICAgICAgICBjYW5Qcm92aWRlSGVhZGluZyA9IGZhbHNlOworCisgICAg
ZG91YmxlIHRpbWVzdGFtcCA9IFtuZXdMb2NhdGlvbi50aW1lc3RhbXAgdGltZUludGVydmFsU2lu
Y2UxOTcwXTsKKyAgICBSZWZQdHI8R2VvbG9jYXRpb25Qb3NpdGlvbj4gZ2VvbG9jYXRpb25Qb3Np
dGlvbiA9IEdlb2xvY2F0aW9uUG9zaXRpb246OmNyZWF0ZSh0aW1lc3RhbXAsIG5ld0xvY2F0aW9u
LmNvb3JkaW5hdGUubGF0aXR1ZGUsIG5ld0xvY2F0aW9uLmNvb3JkaW5hdGUubG9uZ2l0dWRlLCBu
ZXdMb2NhdGlvbi5ob3Jpem9udGFsQWNjdXJhY3ksIGNhblByb3ZpZGVBbHRpdHVkZSwgYWx0aXR1
ZGUsIGNhblByb3ZpZGVBbHRpdHVkZUFjY3VyYWN5LCBhbHRpdHVkZUFjY3VyYWN5LCBjYW5Qcm92
aWRlSGVhZGluZywgaGVhZGluZywgY2FuUHJvdmlkZVNwZWVkLCBzcGVlZCk7CisgICAgW19wb3Np
dGlvbkxpc3RlbmVyIHBvc2l0aW9uQ2hhbmdlZDpnZW9sb2NhdGlvblBvc2l0aW9uLmdldCgpXTsK
K30KKworLSAodm9pZClsb2NhdGlvbk1hbmFnZXI6KENMTG9jYXRpb25NYW5hZ2VyICopbWFuYWdl
ciBkaWRVcGRhdGVMb2NhdGlvbnM6KE5TQXJyYXkgKilsb2NhdGlvbnMKK3sKKyAgICBVTlVTRURf
UEFSQU0obWFuYWdlcik7CisgICAgZm9yIChDTExvY2F0aW9uICpsb2NhdGlvbiBpbiBsb2NhdGlv
bnMpCisgICAgICAgIFtzZWxmIHNlbmRMb2NhdGlvbjpsb2NhdGlvbl07Cit9CisKKy0gKHZvaWQp
bG9jYXRpb25NYW5hZ2VyOihDTExvY2F0aW9uTWFuYWdlciAqKW1hbmFnZXIgZGlkRmFpbFdpdGhF
cnJvcjooTlNFcnJvciAqKWVycm9yCit7CisgICAgQVNTRVJUKF9wb3NpdGlvbkxpc3RlbmVyKTsK
KyAgICBBU1NFUlQoZXJyb3IpOworICAgIFVOVVNFRF9QQVJBTShtYW5hZ2VyKTsKKworICAgIGlm
IChbZXJyb3IgY29kZV0gPT0ga0NMRXJyb3JEZW5pZWQpIHsKKyAgICAgICAgLy8gSWdub3JlIHRo
ZSBlcnJvciBoZXJlIGFuZCBsZXQgbG9jYXRpb25NYW5hZ2VyOmRpZENoYW5nZUF1dGhvcml6YXRp
b25TdGF0dXM6IGhhbmRsZSB0aGUgcGVybWlzc2lvbi4KKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIE5TU3RyaW5nICplcnJvck1lc3NhZ2UgPSBbZXJyb3IgbG9jYWxpemVkRGVzY3JpcHRp
b25dOworICAgIFtfcG9zaXRpb25MaXN0ZW5lciBlcnJvck9jY3VycmVkOmVycm9yTWVzc2FnZV07
Cit9CisKKy0gKHZvaWQpc2V0RW5hYmxlSGlnaEFjY3VyYWN5OihCT09MKWZsYWcKK3sKKyAgICBB
U1NFUlRfTUFJTl9USFJFQUQoKTsKKyAgICBbX2xvY2F0aW9uTWFuYWdlci5nZXQoKSBzZXREZXNp
cmVkQWNjdXJhY3k6ZmxhZyA/IGtDTExvY2F0aW9uQWNjdXJhY3lCZXN0IDoga0NMTG9jYXRpb25B
Y2N1cmFjeUh1bmRyZWRNZXRlcnNdOworfQorCitAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2lvcy9NaXNjL1dlYkdlb2xvY2F0aW9uUHJvdmlkZXJJT1MuaCBiL1NvdXJjZS9XZWJLaXQv
aW9zL01pc2MvV2ViR2VvbG9jYXRpb25Qcm92aWRlcklPUy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE2MTA0ZTNk
YjlkYWMwNzE0ZDZiZDI3NjBkNmViNzJhMDBlYzgwM2EKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2lvcy9NaXNjL1dlYkdlb2xvY2F0aW9uUHJvdmlkZXJJT1MuaApAQCAtMCwwICsx
LDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDEwLCAyMDEyIEFwcGxl
IEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2ltcG9ydCA8Rm91bmRhdGlvbi9OU09iamVjdC5oPgorI2ltcG9ydCA8
V2ViS2l0L1dlYlZpZXdQcml2YXRlLmg+CisKK0BpbnRlcmZhY2UgV2ViR2VvbG9jYXRpb25Qcm92
aWRlcklPUyA6IE5TT2JqZWN0PFdlYkdlb2xvY2F0aW9uUHJvdmlkZXI+CisKKysgKFdlYkdlb2xv
Y2F0aW9uUHJvdmlkZXJJT1MgKilzaGFyZWRHZW9sb2NhdGlvblByb3ZpZGVyOworCisvLyBzdXNw
ZW5kIHR1cm5zIG9mZiBsb2NhdGlvbiBzZXJ2aWNlcyBjb21wbGV0ZWx5IGFuZCByZWxlYXNlcyB0
aGUgQ0xMb2NhdGlvbk1hbmFnZXIuCistICh2b2lkKXN1c3BlbmQ7CistICh2b2lkKXJlc3VtZTsK
KworQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9pb3MvTWlzYy9XZWJHZW9sb2NhdGlv
blByb3ZpZGVySU9TLm1tIGIvU291cmNlL1dlYktpdC9pb3MvTWlzYy9XZWJHZW9sb2NhdGlvblBy
b3ZpZGVySU9TLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM3ZTA1M2QzN2FjMDU4ZmYyZTFlZDNkODJmMzIwNjBh
NTgzNzMyZmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2lvcy9NaXNjL1dlYkdl
b2xvY2F0aW9uUHJvdmlkZXJJT1MubW0KQEAgLTAsMCArMSw0MTkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDgsIDIwMDksIDIwMTAsIDIwMTIgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2ltcG9ydCAi
V2ViR2VvbG9jYXRpb25Qcm92aWRlcklPUy5oIgorCisjaW1wb3J0ICJXZWJHZW9sb2NhdGlvbkNv
cmVMb2NhdGlvblByb3ZpZGVyLmgiCisjaW1wb3J0IDxXZWJHZW9sb2NhdGlvblBvc2l0aW9uLmg+
CisjaW1wb3J0IDxXZWJDb3JlL0dlb2xvY2F0aW9uUG9zaXRpb24uaD4KKyNpbXBvcnQgPFdlYkNv
cmUvV2ViQ29yZVRocmVhZC5oPgorI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlVGhyZWFkUnVuLmg+
CisjaW1wb3J0IDx3dGYvSGFzaFNldC5oPgorI2ltcG9ydCA8d3RmL0hhc2hNYXAuaD4KKyNpbXBv
cnQgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbXBvcnQgPHd0Zi9WZWN0b3IuaD4KKworI2lmIFBMQVRG
T1JNKElPUykKKyNpbXBvcnQgIldlYkRlbGVnYXRlSW1wbGVtZW50YXRpb25DYWNoaW5nLmgiCisj
ZW5kaWYKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK0BpbnRlcmZhY2UgV2ViR2VvbG9j
YXRpb25Qb3NpdGlvbiAoSW50ZXJuYWwpCistIChpZClpbml0V2l0aEdlb2xvY2F0aW9uUG9zaXRp
b246KFBhc3NSZWZQdHI8R2VvbG9jYXRpb25Qb3NpdGlvbj4pY29yZUdlb2xvY2F0aW9uUG9zaXRp
b247CitAZW5kCisKKy8vIENvcmVMb2NhdGlvbiBydW5zIGluIHRoZSBtYWluIHRocmVhZC4gV2Vi
R2VvbG9jYXRpb25Qcm92aWRlcklPUyBsaXZlcyBvbiB0aGUgV2ViVGhyZWFkLgorLy8gX1dlYkNv
cmVMb2NhdGlvblVwZGF0ZVRocmVhZGluZ1Byb3h5IGZvcndhcmQgdXBkYXRlcyBmcm9tIENvcmVM
b2NhdGlvbiB0byBXZWJHZW9sb2NhdGlvblByb3ZpZGVySU9TLgorQGludGVyZmFjZSBfV2ViQ29y
ZUxvY2F0aW9uVXBkYXRlVGhyZWFkaW5nUHJveHkgOiBOU09iamVjdDxXZWJHZW9sb2NhdGlvbkNv
cmVMb2NhdGlvblVwZGF0ZUxpc3RlbmVyPgorLSAoaWQpaW5pdFdpdGhQcm92aWRlcjooV2ViR2Vv
bG9jYXRpb25Qcm92aWRlcklPUyopcHJvdmlkZXI7CitAZW5kCisKK3R5cGVkZWYgSGFzaE1hcDxS
ZXRhaW5QdHI8V2ViVmlldz4sIFJldGFpblB0cjxpZDxXZWJHZW9sb2NhdGlvblByb3ZpZGVySW5p
dGlhbGl6YXRpb25MaXN0ZW5lcj4gPiA+IEdlb2xvY2F0aW9uSW5pdGlhbGl6YXRpb25DYWxsYmFj
a01hcDsKKworQGltcGxlbWVudGF0aW9uIFdlYkdlb2xvY2F0aW9uUHJvdmlkZXJJT1MgeworQHBy
aXZhdGUKKyAgICBSZXRhaW5QdHI8V2ViR2VvbG9jYXRpb25Db3JlTG9jYXRpb25Qcm92aWRlcj4g
X2NvcmVMb2NhdGlvblByb3ZpZGVyOworICAgIFJldGFpblB0cjxfV2ViQ29yZUxvY2F0aW9uVXBk
YXRlVGhyZWFkaW5nUHJveHk+IF9jb3JlTG9jYXRpb25VcGRhdGVMaXN0ZW5lclByb3h5OworCisg
ICAgQk9PTCBfZW5hYmxlSGlnaEFjY3VyYWN5OworICAgIEJPT0wgX2lzU3VzcGVuZGVkOworICAg
IEJPT0wgX3Nob3VsZFJlc2V0T25SZXN1bWU7CisKKyAgICAvLyBXZWJWaWV3cyB3YWl0aW5nIGZv
ciBDb3JlTG9jYXRpb24gdG8gYmUgcmVhZHkuIElmIHRoZSBBcHBsaWNhdGlvbiBkb2VzIG5vdCB5
ZXQgaGF2ZSB0aGUgcGVybWlzc2lvbiB0byB1c2UgR2VvbG9jYXRpb24KKyAgICAvLyB3ZSBhbHNv
IGhhdmUgdG8gd2FpdCBmb3IgdGhhdCB0byBiZSBncmFudGVkLgorICAgIEdlb2xvY2F0aW9uSW5p
dGlhbGl6YXRpb25DYWxsYmFja01hcCBfd2ViVmlld3NXYWl0aW5nRm9yQ29yZUxvY2F0aW9uU3Rh
cnQ7CisKKyAgICAvLyBXZWJWaWV3cyB0aGF0IGhhdmUgcmVxdWlyZWQgbG9jYXRpb24gc2Vydmlj
ZXMgYW5kIGFyZSBpbiAiV2FybSBVcCIgd2hpbGUgd2FpdGluZyB0byBiZSByZWdpc3RlcmVkIG9y
IGRlbmllZCBmb3IgdGhlIFNlY3VyaXR5T3JpZ2luLgorICAgIC8vIFRoZSB3YXJtIHVwIGV4cGly
ZSBhZnRlciBzb21lIHRpbWUgdG8gYXZvaWQga2VlcGluZyBDb3JlTG9jYXRpb24gYWxpdmUgd2hp
bGUgd2FpdGluZyBmb3IgdGhlIHVzZXIgcmVzcG9uc2UgZm9yIHRoZSBTZWN1cml0eSBPcmlnaW4u
CisgICAgSGFzaFNldDxXZWJWaWV3Kj4gX3dhcm1VcFdlYlZpZXdzOworCisgICAgLy8gTGlzdCBv
ZiBXZWJWaWV3IG5lZWRpbmcgdGhlIGluaXRpYWwgcG9zaXRpb24gYWZ0ZXIgcmVnaXN0ZXJXZWJW
aWV3Oi4gVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSBXZWJLaXQgZG9lcyBub3QKKyAgICAvLyBoYW5k
bGUgc2VuZGluZyB0aGUgcG9zaXRpb24gc3luY2hyb25vdXNseSBpbiByZXNwb25zZSB0byByZWdp
c3RlcldlYlZpZXc6LCBzbyB3ZSBxdWV1ZSBzZW5kaW5nIGxhc3RQb3NpdGlvbiBiZWhpbmQgYSB0
aW1lci4KKyAgICBIYXNoU2V0PFdlYlZpZXcqPiBfcGVuZGluZ0luaXRpYWxQb3NpdGlvbldlYlZp
ZXc7CisKKyAgICAvLyBMaXN0IG9mIFdlYlZpZXdzIHJlZ2lzdGVyZWQgdG8gV2ViR2VvbG9jYXRp
b25Qcm92aWRlciBmb3IgR2VvbG9jYXRpb24gdXBkYXRlLgorICAgIEhhc2hTZXQ8V2ViVmlldyo+
IF9yZWdpc3RlcmVkV2ViVmlld3M7CisKKyAgICAvLyBBbGwgdGhlIHZpZXdzIHRoYXQgbWlnaHQg
bmVlZCBhIHJlc2V0IGlmIHRoZSBwZXJtaXNzaW9uIGNoYW5nZSBleHRlcm5hbGx5LgorICAgIEhh
c2hTZXQ8V2ViVmlldyo+IF90cmFja2VkV2ViVmlld3M7CisKKyAgICBSZXRhaW5QdHI8TlNUaW1l
cj4gX3NlbmRMYXN0UG9zaXRpb25Bc3luY2hyb25vdXNseVRpbWVyOworICAgIFJldGFpblB0cjxX
ZWJHZW9sb2NhdGlvblBvc2l0aW9uPiBfbGFzdFBvc2l0aW9uOworfQorCitzdGF0aWMgaW5saW5l
IHZvaWQgYWJvcnRTZW5kTGFzdFBvc2l0aW9uKFdlYkdlb2xvY2F0aW9uUHJvdmlkZXJJT1MqIHBy
b3ZpZGVyKQoreworICAgIHByb3ZpZGVyLT5fcGVuZGluZ0luaXRpYWxQb3NpdGlvbldlYlZpZXcu
Y2xlYXIoKTsKKyAgICBbcHJvdmlkZXItPl9zZW5kTGFzdFBvc2l0aW9uQXN5bmNocm9ub3VzbHlU
aW1lci5nZXQoKSBpbnZhbGlkYXRlXTsKKyAgICBwcm92aWRlci0+X3NlbmRMYXN0UG9zaXRpb25B
c3luY2hyb25vdXNseVRpbWVyLmNsZWFyKCk7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAg
IGFib3J0U2VuZExhc3RQb3NpdGlvbihzZWxmKTsKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisK
KyNwcmFnbWEgbWFyayAtIFB1YmxpYyBBUEkgb2YgV2ViR2VvbG9jYXRpb25Qcm92aWRlcklPUy4K
KysgKFdlYkdlb2xvY2F0aW9uUHJvdmlkZXJJT1MgKilzaGFyZWRHZW9sb2NhdGlvblByb3ZpZGVy
Cit7CisgICAgc3RhdGljIGRpc3BhdGNoX29uY2VfdCBvbmNlOworICAgIHN0YXRpYyBXZWJHZW9s
b2NhdGlvblByb3ZpZGVySU9TICpzaGFyZWRHZW9sb2NhdGlvblByb3ZpZGVyOworICAgIGRpc3Bh
dGNoX29uY2UoJm9uY2UsIF57CisgICAgICAgIHNoYXJlZEdlb2xvY2F0aW9uUHJvdmlkZXIgPSBb
W1dlYkdlb2xvY2F0aW9uUHJvdmlkZXJJT1MgYWxsb2NdIGluaXRdOworICAgIH0pOworICAgIHJl
dHVybiBzaGFyZWRHZW9sb2NhdGlvblByb3ZpZGVyOworfQorCistICh2b2lkKXN1c3BlbmQKK3sK
KyAgICBBU1NFUlQoV2ViVGhyZWFkSXNMb2NrZWRPckRpc2FibGVkKCkpOworICAgIEFTU0VSVChw
dGhyZWFkX21haW5fbnAoKSk7CisKKyAgICBBU1NFUlQoIV9pc1N1c3BlbmRlZCk7CisgICAgX2lz
U3VzcGVuZGVkID0gWUVTOworCisgICAgLy8gQSBuZXcgcG9zaXRpb24gaXMgYWNxdWlyZWQgYW5k
IHNlbnQgdG8gYWxsIHJlZ2lzdGVyZWQgdmlld3Mgb24gcmVzdW1lLgorICAgIF9sYXN0UG9zaXRp
b24uY2xlYXIoKTsKKyAgICBhYm9ydFNlbmRMYXN0UG9zaXRpb24oc2VsZik7CisgICAgW19jb3Jl
TG9jYXRpb25Qcm92aWRlci5nZXQoKSBzdG9wXTsKK30KKworLSAodm9pZClyZXN1bWUKK3sKKyAg
ICBBU1NFUlQoV2ViVGhyZWFkSXNMb2NrZWRPckRpc2FibGVkKCkpOworICAgIEFTU0VSVChwdGhy
ZWFkX21haW5fbnAoKSk7CisKKyAgICBBU1NFUlQoX2lzU3VzcGVuZGVkKTsKKyAgICBfaXNTdXNw
ZW5kZWQgPSBOTzsKKworICAgIGlmIChfc2hvdWxkUmVzZXRPblJlc3VtZSkgeworICAgICAgICBb
c2VsZiByZXNldEdlb2xvY2F0aW9uXTsKKyAgICAgICAgX3Nob3VsZFJlc2V0T25SZXN1bWUgPSBO
TzsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChfcmVnaXN0ZXJlZFdlYlZpZXdz
LmlzRW1wdHkoKSAmJiBfd2ViVmlld3NXYWl0aW5nRm9yQ29yZUxvY2F0aW9uU3RhcnQuaXNFbXB0
eSgpICYmIF93YXJtVXBXZWJWaWV3cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmICghX2NvcmVMb2NhdGlvblByb3ZpZGVyKSB7CisgICAgICAgIEFTU0VSVCghX2NvcmVMb2Nh
dGlvblVwZGF0ZUxpc3RlbmVyUHJveHkpOworICAgICAgICBfY29yZUxvY2F0aW9uVXBkYXRlTGlz
dGVuZXJQcm94eSA9IGFkb3B0TlMoW1tfV2ViQ29yZUxvY2F0aW9uVXBkYXRlVGhyZWFkaW5nUHJv
eHkgYWxsb2NdIGluaXRXaXRoUHJvdmlkZXI6c2VsZl0pOworICAgICAgICBfY29yZUxvY2F0aW9u
UHJvdmlkZXIgPSBhZG9wdE5TKFtbV2ViR2VvbG9jYXRpb25Db3JlTG9jYXRpb25Qcm92aWRlciBh
bGxvY10gaW5pdFdpdGhMaXN0ZW5lcjpfY29yZUxvY2F0aW9uVXBkYXRlTGlzdGVuZXJQcm94eS5n
ZXQoKV0pOworICAgIH0KKyAgICBbX2NvcmVMb2NhdGlvblByb3ZpZGVyLmdldCgpIHNldEVuYWJs
ZUhpZ2hBY2N1cmFjeTpfZW5hYmxlSGlnaEFjY3VyYWN5XTsKKyAgICBbX2NvcmVMb2NhdGlvblBy
b3ZpZGVyLmdldCgpIHN0YXJ0XTsKK30KKworI3ByYWdtYSBtYXJrIC0gSW50ZXJuYWwgdXRpbGl0
eSBtZXRob2RzCistICh2b2lkKV9zdGFydENvcmVMb2NhdGlvbkRlbGVnYXRlCit7CisgICAgQVNT
RVJUKCEoX3JlZ2lzdGVyZWRXZWJWaWV3cy5pc0VtcHR5KCkgJiYgX3dlYlZpZXdzV2FpdGluZ0Zv
ckNvcmVMb2NhdGlvblN0YXJ0LmlzRW1wdHkoKSkpOworCisgICAgaWYgKF9pc1N1c3BlbmRlZCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5f
cXVldWUoKSwgXnsKKyAgICAgICAgaWYgKCFfY29yZUxvY2F0aW9uUHJvdmlkZXIuZ2V0KCkpIHsK
KyAgICAgICAgICAgIEFTU0VSVCghX2NvcmVMb2NhdGlvblVwZGF0ZUxpc3RlbmVyUHJveHkpOwor
ICAgICAgICAgICAgX2NvcmVMb2NhdGlvblVwZGF0ZUxpc3RlbmVyUHJveHkgPSBhZG9wdE5TKFtb
X1dlYkNvcmVMb2NhdGlvblVwZGF0ZVRocmVhZGluZ1Byb3h5IGFsbG9jXSBpbml0V2l0aFByb3Zp
ZGVyOnNlbGZdKTsKKyAgICAgICAgICAgIF9jb3JlTG9jYXRpb25Qcm92aWRlciA9IGFkb3B0TlMo
W1tXZWJHZW9sb2NhdGlvbkNvcmVMb2NhdGlvblByb3ZpZGVyIGFsbG9jXSBpbml0V2l0aExpc3Rl
bmVyOl9jb3JlTG9jYXRpb25VcGRhdGVMaXN0ZW5lclByb3h5LmdldCgpXSk7CisgICAgICAgIH0K
KyAgICAgICAgW19jb3JlTG9jYXRpb25Qcm92aWRlci5nZXQoKSBzdGFydF07CisgICAgfSk7Cit9
CisKKy0gKHZvaWQpX3N0b3BDb3JlTG9jYXRpb25EZWxlZ2F0ZUlmTmVlZGVkCit7CisgICAgaWYg
KF9yZWdpc3RlcmVkV2ViVmlld3MuaXNFbXB0eSgpICYmIF93ZWJWaWV3c1dhaXRpbmdGb3JDb3Jl
TG9jYXRpb25TdGFydC5pc0VtcHR5KCkgJiYgX3dhcm1VcFdlYlZpZXdzLmlzRW1wdHkoKSkgewor
ICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeeworICAg
ICAgICAgICAgW19jb3JlTG9jYXRpb25Qcm92aWRlci5nZXQoKSBzdG9wXTsKKyAgICAgICAgfSk7
CisgICAgICAgIF9lbmFibGVIaWdoQWNjdXJhY3kgPSBOTzsKKyAgICAgICAgX2xhc3RQb3NpdGlv
bi5jbGVhcigpOworICAgIH0KK30KKworLSAodm9pZClfaGFuZGxlUGVuZGluZ0luaXRpYWxQb3Np
dGlvbjooTlNUaW1lciopdGltZXIKK3sKKyAgICBBU1NFUlRfVU5VU0VEKHRpbWVyLCB0aW1lciA9
PSBfc2VuZExhc3RQb3NpdGlvbkFzeW5jaHJvbm91c2x5VGltZXIpOworCisgICAgaWYgKF9sYXN0
UG9zaXRpb24pIHsKKyAgICAgICAgVmVjdG9yPFdlYlZpZXcqPiB3ZWJWaWV3c0NvcHk7CisgICAg
ICAgIGNvcHlUb1ZlY3RvcihfcGVuZGluZ0luaXRpYWxQb3NpdGlvbldlYlZpZXcsIHdlYlZpZXdz
Q29weSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd2ViVmlld3NDb3B5LnNpemUo
KTsgKytpKQorICAgICAgICAgICAgW3dlYlZpZXdzQ29weVtpXSBfZ2VvbG9jYXRpb25EaWRDaGFu
Z2VQb3NpdGlvbjpfbGFzdFBvc2l0aW9uLmdldCgpXTsKKyAgICB9CisgICAgYWJvcnRTZW5kTGFz
dFBvc2l0aW9uKHNlbGYpOworfQorCisjcHJhZ21hIG1hcmsgLSBJbXBsZW1lbnRhdGlvbiBvZiBX
ZWJHZW9sb2NhdGlvblByb3ZpZGVyCisKKy0gKHZvaWQpcmVnaXN0ZXJXZWJWaWV3OihXZWJWaWV3
ICopd2ViVmlldworeworICAgIEFTU0VSVChXZWJUaHJlYWRJc0xvY2tlZE9yRGlzYWJsZWQoKSk7
CisKKyAgICBpZiAoX3JlZ2lzdGVyZWRXZWJWaWV3cy5jb250YWlucyh3ZWJWaWV3KSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgX3JlZ2lzdGVyZWRXZWJWaWV3cy5hZGQod2ViVmlldyk7CisgICAg
X3dhcm1VcFdlYlZpZXdzLnJlbW92ZSh3ZWJWaWV3KTsKKyNpZiBQTEFURk9STShJT1MpCisgICAg
aWYgKCFDYWxsVUlEZWxlZ2F0ZVJldHVybmluZ0Jvb2xlYW4oWUVTLCB3ZWJWaWV3LCBAc2VsZWN0
b3Iod2ViVmlld0NhbkNoZWNrR2VvbG9jYXRpb25BdXRob3JpemF0aW9uU3RhdHVzOikpKQorICAg
ICAgICByZXR1cm47CisjZW5kaWYKKworICAgIFtzZWxmIF9zdGFydENvcmVMb2NhdGlvbkRlbGVn
YXRlXTsKKworICAgIC8vIFdlIHNlbmQgdGhlIGxhc3RQb3NpdGlvbiBhc3luY2hyb25vdXNseSBi
ZWNhdXNlIFdlYktpdCBkb2VzIG5vdCBoYW5kbGUgdXBkYXRpbmcgdGhlIHBvc2l0aW9uIHN5bmNo
cm9ub3VzbHkuCisgICAgLy8gT24gV2ViS2l0Miwgd2UgY291bGQgc2tpcCB0aGF0IGFuZCBzZW5k
IHRoZSBwb3NpdGlvbiBkaXJlY3RseSBmcm9tIHRoZSBVSVByb2Nlc3MuCisgICAgX3BlbmRpbmdJ
bml0aWFsUG9zaXRpb25XZWJWaWV3LmFkZCh3ZWJWaWV3KTsKKyAgICBpZiAoIV9zZW5kTGFzdFBv
c2l0aW9uQXN5bmNocm9ub3VzbHlUaW1lcikKKyAgICAgICAgX3NlbmRMYXN0UG9zaXRpb25Bc3lu
Y2hyb25vdXNseVRpbWVyID0gW05TVGltZXIgc2NoZWR1bGVkVGltZXJXaXRoVGltZUludGVydmFs
OjAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OnNlbGYKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNlbGVjdG9yOkBzZWxlY3RvcihfaGFuZGxlUGVuZGluZ0luaXRpYWxQb3NpdGlvbjopCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1c2VySW5mbzpuaWwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXBlYXRzOk5PXTsKK30KKworLSAodm9pZCl1bnJlZ2lzdGVyV2ViVmlldzooV2ViVmlldyAqKXdl
YlZpZXcKK3sKKyAgICBBU1NFUlQoV2ViVGhyZWFkSXNMb2NrZWRPckRpc2FibGVkKCkpOworCisg
ICAgaWYgKCFfcmVnaXN0ZXJlZFdlYlZpZXdzLmNvbnRhaW5zKHdlYlZpZXcpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBfcmVnaXN0ZXJlZFdlYlZpZXdzLnJlbW92ZSh3ZWJWaWV3KTsKKyAgICBf
cGVuZGluZ0luaXRpYWxQb3NpdGlvbldlYlZpZXcucmVtb3ZlKHdlYlZpZXcpOworICAgIFtzZWxm
IF9zdG9wQ29yZUxvY2F0aW9uRGVsZWdhdGVJZk5lZWRlZF07Cit9CisKKy0gKFdlYkdlb2xvY2F0
aW9uUG9zaXRpb24gKilsYXN0UG9zaXRpb24KK3sKKyAgICBBU1NFUlQoV2ViVGhyZWFkSXNMb2Nr
ZWRPckRpc2FibGVkKCkpOworICAgIHJldHVybiBfbGFzdFBvc2l0aW9uLmdldCgpOworfQorCist
ICh2b2lkKXNldEVuYWJsZUhpZ2hBY2N1cmFjeTooQk9PTCllbmFibGVIaWdoQWNjdXJhY3kKK3sK
KyAgICBBU1NFUlQoV2ViVGhyZWFkSXNMb2NrZWRPckRpc2FibGVkKCkpOworICAgIF9lbmFibGVI
aWdoQWNjdXJhY3kgPSBfZW5hYmxlSGlnaEFjY3VyYWN5IHx8IGVuYWJsZUhpZ2hBY2N1cmFjeTsK
KyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeeworICAgICAg
ICBbX2NvcmVMb2NhdGlvblByb3ZpZGVyLmdldCgpIHNldEVuYWJsZUhpZ2hBY2N1cmFjeTpfZW5h
YmxlSGlnaEFjY3VyYWN5XTsKKyAgICB9KTsKK30KKworLSAodm9pZClpbml0aWFsaXplR2VvbG9j
YXRpb25Gb3JXZWJWaWV3OihXZWJWaWV3ICopd2ViVmlldyBsaXN0ZW5lcjooaWQ8V2ViR2VvbG9j
YXRpb25Qcm92aWRlckluaXRpYWxpemF0aW9uTGlzdGVuZXI+KWxpc3RlbmVyCit7CisgICAgQVNT
RVJUKFdlYlRocmVhZElzTG9ja2VkT3JEaXNhYmxlZCgpKTsKKworI2lmIFBMQVRGT1JNKElPUykK
KyAgICBpZiAoIUNhbGxVSURlbGVnYXRlUmV0dXJuaW5nQm9vbGVhbihZRVMsIHdlYlZpZXcsIEBz
ZWxlY3Rvcih3ZWJWaWV3Q2FuQ2hlY2tHZW9sb2NhdGlvbkF1dGhvcml6YXRpb25TdGF0dXM6KSkp
CisgICAgICAgIHJldHVybjsKKyNlbmRpZgorICAgIF93ZWJWaWV3c1dhaXRpbmdGb3JDb3JlTG9j
YXRpb25TdGFydC5hZGQod2ViVmlldywgbGlzdGVuZXIpOworICAgIF90cmFja2VkV2ViVmlld3Mu
YWRkKHdlYlZpZXcpOworCisgICAgW3NlbGYgX3N0YXJ0Q29yZUxvY2F0aW9uRGVsZWdhdGVdOwor
fQorCistICh2b2lkKWNhbmNlbFdhcm1VcEZvcldlYlZpZXc6KFdlYlZpZXcgKil3ZWJWaWV3Cit7
CisgICAgQVNTRVJUKFdlYlRocmVhZElzTG9ja2VkT3JEaXNhYmxlZCgpKTsKKworICAgIF93YXJt
VXBXZWJWaWV3cy5yZW1vdmUod2ViVmlldyk7CisgICAgW3NlbGYgX3N0b3BDb3JlTG9jYXRpb25E
ZWxlZ2F0ZUlmTmVlZGVkXTsKK30KKworLSAodm9pZClzdG9wVHJhY2tpbmdXZWJWaWV3OihXZWJW
aWV3Kil3ZWJWaWV3Cit7CisgICAgQVNTRVJUKFdlYlRocmVhZElzTG9ja2VkT3JEaXNhYmxlZCgp
KTsKKyAgICBfdHJhY2tlZFdlYlZpZXdzLnJlbW92ZSh3ZWJWaWV3KTsKK30KKworI3ByYWdtYSBt
YXJrIC0gTWlycm9yIHRvIFdlYkdlb2xvY2F0aW9uQ29yZUxvY2F0aW9uVXBkYXRlTGlzdGVuZXIg
Y2FsbGVkIGJ5IHRoZSBwcm94eS4KKy0gKHZvaWQpZ2VvbG9jYXRpb25EZWxlZ2F0ZVN0YXJ0ZWQK
K3sKKyAgICBBU1NFUlQoV2ViVGhyZWFkSXNDdXJyZW50KCkpOworCisgICAgLy8gVGhpcyBjb3Vs
ZCBiZSBjYWxsZWQgcmVjdXJzaXZlbHkuIFdlIG11c3QgY2xlYW4gX3dlYlZpZXdzV2FpdGluZ0Zv
ckNvcmVMb2NhdGlvblN0YXJ0IGJlZm9yZSBpbnZva2luZyB0aGUgY2FsbGJhY2tzLgorICAgIFZl
Y3RvcjxSZXRhaW5QdHI8V2ViVmlldz4gPiB3ZWJWaWV3czsKKyAgICBjb3B5S2V5c1RvVmVjdG9y
KF93ZWJWaWV3c1dhaXRpbmdGb3JDb3JlTG9jYXRpb25TdGFydCwgd2ViVmlld3MpOworCisgICAg
VmVjdG9yPFJldGFpblB0cjxpZDxXZWJHZW9sb2NhdGlvblByb3ZpZGVySW5pdGlhbGl6YXRpb25M
aXN0ZW5lcj4gPiA+IGluaXRpYWxpemF0aW9uTGlzdGVuZXJzOworICAgIGNvcHlWYWx1ZXNUb1Zl
Y3Rvcihfd2ViVmlld3NXYWl0aW5nRm9yQ29yZUxvY2F0aW9uU3RhcnQsIGluaXRpYWxpemF0aW9u
TGlzdGVuZXJzKTsKKworICAgIF93ZWJWaWV3c1dhaXRpbmdGb3JDb3JlTG9jYXRpb25TdGFydC5j
bGVhcigpOworCisgICAgLy8gU3RhcnQgd2FybXVwIHBlcmlvZCBmb3IgZWFjaCB2aWV3IGluIGlu
dGlhbGl6YXRpb24uCisgICAgY29uc3QgaW50NjRfdCB3YXJtVXBUaW1lb3V0SW50ZXJ2YWwgPSAy
MCAqIE5TRUNfUEVSX1NFQzsKKyAgICBkaXNwYXRjaF90aW1lX3Qgd2hlbiA9IGRpc3BhdGNoX3Rp
bWUoRElTUEFUQ0hfVElNRV9OT1csIHdhcm1VcFRpbWVvdXRJbnRlcnZhbCk7CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCB3ZWJWaWV3cy5zaXplKCk7ICsraSkgeworICAgICAgICBXZWJWaWV3
ICp3ZWJWaWV3ID0gd2ViVmlld3NbaV0uZ2V0KCk7CisKKyAgICAgICAgX3dhcm1VcFdlYlZpZXdz
LmFkZCh3ZWJWaWV3KTsKKworICAgICAgICBkaXNwYXRjaF9hZnRlcih3aGVuLCBkaXNwYXRjaF9n
ZXRfbWFpbl9xdWV1ZSgpLCBeeworICAgICAgICAgICAgX3dhcm1VcFdlYlZpZXdzLnJlbW92ZSh3
ZWJWaWV3KTsKKyAgICAgICAgICAgIFtzZWxmIF9zdG9wQ29yZUxvY2F0aW9uRGVsZWdhdGVJZk5l
ZWRlZF07CisgICAgICAgIH0pOworICAgIH0KKworICAgIC8vIEluZm9ybSB0aGUgbGlzdGVuZXJz
IHRoZSBpbml0aWFsaXphdGlvbiBzdWNjZWVkZWQuCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCB3ZWJWaWV3cy5zaXplKCk7ICsraSkgeworICAgICAgICBSZXRhaW5QdHI8V2ViVmlldz4mIHdl
YlZpZXcgPSB3ZWJWaWV3c1tpXTsKKyAgICAgICAgUmV0YWluUHRyPGlkPFdlYkdlb2xvY2F0aW9u
UHJvdmlkZXJJbml0aWFsaXphdGlvbkxpc3RlbmVyPiA+JiBsaXN0ZW5lciA9IGluaXRpYWxpemF0
aW9uTGlzdGVuZXJzW2ldOworICAgICAgICBbbGlzdGVuZXIuZ2V0KCkgaW5pdGlhbGl6YXRpb25B
bGxvd2VkV2ViVmlldzp3ZWJWaWV3LmdldCgpIHByb3ZpZGVyOnNlbGZdOworICAgIH0KK30KKwor
LSAodm9pZClnZW9sb2NhdGlvbkRlbGVnYXRlVW5hYmxlVG9TdGFydAoreworICAgIEFTU0VSVChX
ZWJUaHJlYWRJc0N1cnJlbnQoKSk7CisKKyAgICAvLyBUaGlzIGNvdWxkIGJlIGNhbGxlZCByZWN1
cnNpdmVseS4gV2UgbXVzdCBjbGVhbiBfd2ViVmlld3NXYWl0aW5nRm9yQ29yZUxvY2F0aW9uU3Rh
cnQgYmVmb3JlIGludm9raW5nIHRoZSBjYWxsYmFja3MuCisgICAgVmVjdG9yPFJldGFpblB0cjxX
ZWJWaWV3PiA+IHdlYlZpZXdzOworICAgIGNvcHlLZXlzVG9WZWN0b3IoX3dlYlZpZXdzV2FpdGlu
Z0ZvckNvcmVMb2NhdGlvblN0YXJ0LCB3ZWJWaWV3cyk7CisKKyAgICBWZWN0b3I8UmV0YWluUHRy
PGlkPFdlYkdlb2xvY2F0aW9uUHJvdmlkZXJJbml0aWFsaXphdGlvbkxpc3RlbmVyPiA+ID4gaW5p
dGlhbGl6YXRpb25MaXN0ZW5lcnM7CisgICAgY29weVZhbHVlc1RvVmVjdG9yKF93ZWJWaWV3c1dh
aXRpbmdGb3JDb3JlTG9jYXRpb25TdGFydCwgaW5pdGlhbGl6YXRpb25MaXN0ZW5lcnMpOworCisg
ICAgX3dlYlZpZXdzV2FpdGluZ0ZvckNvcmVMb2NhdGlvblN0YXJ0LmNsZWFyKCk7CisKKyAgICAv
LyBJbmZvcm0gdGhlIGxpc3RlbmVycyBvZiB0aGUgZmFpbHVyZS4KKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHdlYlZpZXdzLnNpemUoKTsgKytpKSB7CisgICAgICAgIFJldGFpblB0cjxXZWJW
aWV3PiYgd2ViVmlldyA9IHdlYlZpZXdzW2ldOworICAgICAgICBSZXRhaW5QdHI8aWQ8V2ViR2Vv
bG9jYXRpb25Qcm92aWRlckluaXRpYWxpemF0aW9uTGlzdGVuZXI+ID4mIGxpc3RlbmVyID0gaW5p
dGlhbGl6YXRpb25MaXN0ZW5lcnNbaV07CisgICAgICAgIFtsaXN0ZW5lci5nZXQoKSBpbml0aWFs
aXphdGlvbkRlbmllZFdlYlZpZXc6d2ViVmlldy5nZXQoKSBwcm92aWRlcjpzZWxmXTsKKyAgICB9
Cit9CisKKy0gKHZvaWQpcG9zaXRpb25DaGFuZ2VkOihXZWJHZW9sb2NhdGlvblBvc2l0aW9uKilw
b3NpdGlvbgoreworICAgIEFTU0VSVChXZWJUaHJlYWRJc0N1cnJlbnQoKSk7CisKKyAgICBhYm9y
dFNlbmRMYXN0UG9zaXRpb24oc2VsZik7CisKKyAgICBfbGFzdFBvc2l0aW9uID0gcG9zaXRpb247
CisgICAgVmVjdG9yPFdlYlZpZXcqPiB3ZWJWaWV3c0NvcHk7CisgICAgY29weVRvVmVjdG9yKF9y
ZWdpc3RlcmVkV2ViVmlld3MsIHdlYlZpZXdzQ29weSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCB3ZWJWaWV3c0NvcHkuc2l6ZSgpOyArK2kpCisgICAgICAgIFt3ZWJWaWV3c0NvcHkuYXQo
aSkgX2dlb2xvY2F0aW9uRGlkQ2hhbmdlUG9zaXRpb246X2xhc3RQb3NpdGlvbi5nZXQoKV07Cit9
CisKKy0gKHZvaWQpZXJyb3JPY2N1cnJlZDooTlNTdHJpbmcgKillcnJvck1lc3NhZ2UKK3sKKyAg
ICBBU1NFUlQoV2ViVGhyZWFkSXNDdXJyZW50KCkpOworCisgICAgX2xhc3RQb3NpdGlvbi5jbGVh
cigpOworCisgICAgVmVjdG9yPFdlYlZpZXcqPiB3ZWJWaWV3c0NvcHk7CisgICAgY29weVRvVmVj
dG9yKF9yZWdpc3RlcmVkV2ViVmlld3MsIHdlYlZpZXdzQ29weSk7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCB3ZWJWaWV3c0NvcHkuc2l6ZSgpOyArK2kpCisgICAgICAgIFt3ZWJWaWV3c0Nv
cHkuYXQoaSkgX2dlb2xvY2F0aW9uRGlkRmFpbFdpdGhNZXNzYWdlOmVycm9yTWVzc2FnZV07Cit9
CisKKy0gKHZvaWQpcmVzZXRHZW9sb2NhdGlvbgoreworICAgIEFTU0VSVChXZWJUaHJlYWRJc0N1
cnJlbnQoKSk7CisKKyAgICBpZiAoX2lzU3VzcGVuZGVkKSB7CisgICAgICAgIF9zaG91bGRSZXNl
dE9uUmVzdW1lID0gWUVTOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIC8vIDEpIFN0b3Ag
YWxsIG9uZ29pbmcgR2VvbG9jYXRpb24gaW5pdGlhbGl6YXRpb24gYW5kIHRyYWNraW5nLgorICAg
IF93ZWJWaWV3c1dhaXRpbmdGb3JDb3JlTG9jYXRpb25TdGFydC5jbGVhcigpOworICAgIF93YXJt
VXBXZWJWaWV3cy5jbGVhcigpOworICAgIF9yZWdpc3RlcmVkV2ViVmlld3MuY2xlYXIoKTsKKyAg
ICBhYm9ydFNlbmRMYXN0UG9zaXRpb24oc2VsZik7CisgICAgW3NlbGYgX3N0b3BDb3JlTG9jYXRp
b25EZWxlZ2F0ZUlmTmVlZGVkXTsKKworICAgIC8vIDIpIFJlc2V0IHRoZSB2aWV3cywgZWFjaCBm
cmFtZSB3aWxsIHJlZ2lzdGVyIGJhY2sgaWYgbmVlZGVkLgorICAgIFZlY3RvcjxXZWJWaWV3Kj4g
d2ViVmlld3NDb3B5OworICAgIGNvcHlUb1ZlY3RvcihfdHJhY2tlZFdlYlZpZXdzLCB3ZWJWaWV3
c0NvcHkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd2ViVmlld3NDb3B5LnNpemUoKTsg
KytpKQorICAgICAgICBbd2ViVmlld3NDb3B5LmF0KGkpIF9yZXNldEFsbEdlb2xvY2F0aW9uUGVy
bWlzc2lvbl07Cit9CitAZW5kCisKKyNwcmFnbWEgbWFyayAtIF9XZWJDb3JlTG9jYXRpb25VcGRh
dGVUaHJlYWRpbmdQcm94eSBpbXBsZW1lbnRhdGlvbi4KK0BpbXBsZW1lbnRhdGlvbiBfV2ViQ29y
ZUxvY2F0aW9uVXBkYXRlVGhyZWFkaW5nUHJveHkgeworICAgIFdlYkdlb2xvY2F0aW9uUHJvdmlk
ZXJJT1MqIF9wcm92aWRlcjsKK30KKworLSAoaWQpaW5pdFdpdGhQcm92aWRlcjooV2ViR2VvbG9j
YXRpb25Qcm92aWRlcklPUyopcHJvdmlkZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOwor
ICAgIGlmIChzZWxmKQorICAgICAgICBfcHJvdmlkZXIgPSBwcm92aWRlcjsKKyAgICByZXR1cm4g
c2VsZjsKK30KKworLSAodm9pZClnZW9sb2NhdGlvbkRlbGVnYXRlU3RhcnRlZAoreworICAgIFdl
YlRocmVhZFJ1biheeyBbX3Byb3ZpZGVyIGdlb2xvY2F0aW9uRGVsZWdhdGVTdGFydGVkXTsgfSk7
Cit9CisKKy0gKHZvaWQpZ2VvbG9jYXRpb25EZWxlZ2F0ZVVuYWJsZVRvU3RhcnQKK3sKKyAgICBX
ZWJUaHJlYWRSdW4oXnsgW19wcm92aWRlciBnZW9sb2NhdGlvbkRlbGVnYXRlVW5hYmxlVG9TdGFy
dF07IH0pOworfQorCistICh2b2lkKXBvc2l0aW9uQ2hhbmdlZDooV2ViQ29yZTo6R2VvbG9jYXRp
b25Qb3NpdGlvbiopcG9zaXRpb24KK3sKKyAgICBSZXRhaW5QdHI8V2ViR2VvbG9jYXRpb25Qb3Np
dGlvbj4gd2ViUG9zaXRpb24gPSBhZG9wdE5TKFtbV2ViR2VvbG9jYXRpb25Qb3NpdGlvbiBhbGxv
Y10gaW5pdFdpdGhHZW9sb2NhdGlvblBvc2l0aW9uOnBvc2l0aW9uXSk7CisgICAgV2ViVGhyZWFk
UnVuKF57IFtfcHJvdmlkZXIgcG9zaXRpb25DaGFuZ2VkOndlYlBvc2l0aW9uLmdldCgpXTsgfSk7
Cit9CisKKy0gKHZvaWQpZXJyb3JPY2N1cnJlZDooTlNTdHJpbmcgKillcnJvck1lc3NhZ2UKK3sK
KyAgICBXZWJUaHJlYWRSdW4oXnsgW19wcm92aWRlciBlcnJvck9jY3VycmVkOmVycm9yTWVzc2Fn
ZV07IH0pOworfQorCistICh2b2lkKXJlc2V0R2VvbG9jYXRpb24KK3sKKyAgICBXZWJUaHJlYWRS
dW4oXnsgW19wcm92aWRlciByZXNldEdlb2xvY2F0aW9uXTsgfSk7Cit9CitAZW5kCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2lvcy9NaXNjL1dlYk5TU3RyaW5nRHJhd2luZy5oIGIvU291cmNl
L1dlYktpdC9pb3MvTWlzYy9XZWJOU1N0cmluZ0RyYXdpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wMzYzNTUw
ZmY5MGFmNzhkZDkxZWY1NGU0ZmM4YmJlMzFiZmEyNWMzCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC9pb3MvTWlzYy9XZWJOU1N0cmluZ0RyYXdpbmcuaApAQCAtMCwwICsxLDExNyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViTlNTdHJp
bmdEcmF3aW5nX2gKKyNkZWZpbmUgV2ViTlNTdHJpbmdEcmF3aW5nX2gKKworI2lmIFBMQVRGT1JN
KElPUykKKworI2ltcG9ydCA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgorI2ltcG9ydCA8
Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisjaW1wb3J0IDxHcmFwaGljc1NlcnZpY2VzL0dyYXBo
aWNzU2VydmljZXMuaD4KKwordHlwZWRlZiBlbnVtIHsKKyAgICAvLyBUaGUgb3JkZXIgb2YgdGhl
IGVudW0gaXRlbXMgaXMgaW1wb3J0YW50LCBhbmQgaXQgaXMgdXNlZCBmb3IgPj0gY29tcGFyaXNp
b25zCisgICAgV2ViRWxsaXBzaXNTdHlsZU5vbmUgPSAwLCAvLyBPbGQgc3R5bGUsIG5vIHRydW5j
YXRpb24uIERvZXNuJ3QgcmVzcGVjdCB0aGUgIndpZHRoIiBwYXNzZWQgdG8gaXQuIExlZnQgaW4g
Zm9yIGNvbXBhdGFiaWxpdHkuCisgICAgV2ViRWxsaXBzaXNTdHlsZUhlYWQgPSAxLAorICAgIFdl
YkVsbGlwc2lzU3R5bGVUYWlsID0gMiwKKyAgICBXZWJFbGxpcHNpc1N0eWxlQ2VudGVyID0gMywK
KyAgICBXZWJFbGxpcHNpc1N0eWxlQ2xpcCA9IDQsIC8vIERvZXNuJ3QgcmVhbGx5IGNsaXAsIGJ1
dCBpbnN0YWQgdHJ1bmNhdGVzIGF0IHRoZSBsYXN0IGNoYXJhY3Rlci4KKyAgICBXZWJFbGxpcHNp
c1N0eWxlV29yZFdyYXAgPSA1LCAvLyBUcnVuY2F0ZXMgYmFzZWQgb24gdGhlIHdpZHRoL2hlaWdo
dCBwYXNzZWQgdG8gaXQuCisgICAgV2ViRWxsaXBzaXNTdHlsZUNoYXJhY3RlcldyYXAgPSA2LCAv
LyBGb3IgImRyYXdBdFBvaW50IiwgaXQgaXMganVzdCBsaWtlIFdlYkVsbGlwc2lzU3R5bGVDbGlw
LCBzaW5jZSBpdCBkb2Vzbid0IHJlYWxseSBjbGlwLCBidXQgdHJ1bmNhdGVzIGF0IHRoZSBsYXN0
IGNoYXJhY3RlcgorfSBXZWJFbGxpcHNpc1N0eWxlOworCit0eXBlZGVmIGVudW0geworICAgIFdl
YlRleHRBbGlnbm1lbnRMZWZ0ID0gMCwKKyAgICBXZWJUZXh0QWxpZ25tZW50Q2VudGVyID0gMSwK
KyAgICBXZWJUZXh0QWxpZ25tZW50UmlnaHQgPSAyLAorfSBXZWJUZXh0QWxpZ25tZW50OworCitA
cHJvdG9jb2wgV2ViVGV4dFJlbmRlcmluZ0F0dHJpYnV0ZXMKKworQHByb3BlcnR5KG5vbmF0b21p
YywgcmVhZG9ubHkpICAgICAgICAgIEdTRm9udFJlZiBmb250OyAvLyBmb250IHRoZSB0ZXh0IHNo
b3VsZCBiZSByZW5kZXJlZCB3aXRoIChkZWZhdWx0cyB0byBuaWwpCitAcHJvcGVydHkobm9uYXRv
bWljLCByZWFkb25seSkgICAgICAgICAgQ0dGbG9hdCBsaW5lU3BhY2luZzsgLy8gc2V0IHRvIHNw
ZWNpZnkgdGhlIGxpbmUgc3BhY2luZyAoZGVmYXVsdHMgdG8gMC4wIHdoaWNoIGluZGljYXRlcyB0
aGUgZGVmYXVsdCBsaW5lIHNwYWNpbmcpCisKK0Bwcm9wZXJ0eShub25hdG9taWMsIHJlYWRvbmx5
KSAgICAgICAgICBXZWJFbGxpcHNpc1N0eWxlIGVsbGlwc2lzU3R5bGU7IC8vIHRleHQgd2lsbCBi
ZSB3cmFwcGVkIGFuZCB0cnVuY2F0ZWQgYWNjb3JkaW5nIHRvIHRoZSBsaW5lIGJyZWFrIG1vZGUg
KGRlZmF1bHRzIHRvIFVJTGluZUJyZWFrTW9kZVdvcmRXcmFwKQorQHByb3BlcnR5KG5vbmF0b21p
YywgcmVhZG9ubHkpICAgICAgICAgIENHRmxvYXQgbGV0dGVyU3BhY2luZzsgLy8gbnVtYmVyIG9m
IGV4dHJhIHBpeGVscyB0byBiZSBhZGRlZCBvciBzdWJ0cmFjdGVkIGJldHdlZW4gZWFjaCBwYWly
IG9mIGNoYXJhY3RlcnMgIChkZWZhbHRzIHRvIDApCitAcHJvcGVydHkobm9uYXRvbWljLCByZWFk
b25seSkgICAgICAgICAgV2ViVGV4dEFsaWdubWVudCBhbGlnbm1lbnQ7IC8vIHNwZWNpZmllcyB0
aGUgaG9yaXpvbnRhbCBhbGlnbm1lbnQgdGhhdCBzaG91bGQgYmUgdXNlZCB3aGVuIHJlbmRlcmlu
ZyB0aGUgdGV4dCAoZGVmYXVsdHMgdG8gVUlUZXh0QWxpZ25tZW50TGVmdCkKK0Bwcm9wZXJ0eShu
b25hdG9taWMsIHJlYWRvbmx5KSAgICAgICAgICBCT09MIGluY2x1ZGVFbW9qaTsgLy8gaWYgeWVz
LCB0aGUgdGV4dCBjYW4gaW5jbHVkZSBFbW9qaSBjaGFyYWN0ZXJzLgorQHByb3BlcnR5KG5vbmF0
b21pYywgcmVhZHdyaXRlKSAgICAgICAgIENHUmVjdCB0cnVuY2F0aW9uUmVjdDsgLy8gdGhlIHRy
dW5jYXRpb24gcmVjdCBhcmd1bWVudCwgaWYgbm9uLW5pbCwgd2lsbCBiZSB1c2VkIGluc3RlYWQg
b2YgYW4gZWxsaXBzaXMgY2hhcmFjdGVyIGZvciB0cnVuY2F0aW9uIHNpemluZy4gaWYgbm8gdHJ1
bmNhdGlvbiBvY2N1cnMsIHRoZSB0cnVuY2F0aW9uUmVjdCB3aWxsIGJlIGNoYW5nZWQgdG8gQ0dS
ZWN0TnVsbC4gSWYgdHJ1bmNhdGlvbiBvY2N1cnMsIHRoZSByZWN0IHdpbGwgYmUgdXBkYXRlZCB3
aXRoIGl0cyBwbGFjZW1lbnQuCisKK0Bwcm9wZXJ0eShub25hdG9taWMsIHJlYWRvbmx5KSAgICAg
ICAgICBOU1N0cmluZyAqKnJlbmRlclN0cmluZzsgLy8gQW4gb3V0LXBhcmFtZXRlciBmb3IgdGhl
IGFjdHVhbCByZW5kZXJlZCBzdHJpbmcuIERlZmF1bHRzIHRvIG5pbC4KK0Bwcm9wZXJ0eShub25h
dG9taWMsIHJlYWRvbmx5KSAgICAgICAgICBCT09MIGRyYXdVbmRlcmxpbmU7IC8vIGlmIHllcywg
dGhlIHRleHQgd2lsbCBiZSBwYWludGVkIHdpdGggdW5kZXJsaW5lLgorCitAZW5kCisKK0BpbnRl
cmZhY2UgTlNTdHJpbmcgKFdlYlN0cmluZ0RyYXdpbmcpCisKKysgKHZvaWQpX3dlYl9zZXRXb3Jk
Um91bmRpbmdFbmFibGVkOihCT09MKWZsYWc7CisrIChCT09MKV93ZWJfd29yZFJvdW5kaW5nRW5h
YmxlZDsKKworKyAodm9pZClfd2ViX3NldFdvcmRSb3VuZGluZ0FsbG93ZWQ6KEJPT0wpZmxhZzsK
KysgKEJPT0wpX3dlYl93b3JkUm91bmRpbmdBbGxvd2VkOworCisrICh2b2lkKV93ZWJfc2V0QXNj
ZW50Um91bmRpbmdFbmFibGVkOihCT09MKWZsYWc7CisrIChCT09MKV93ZWJfYXNjZW50Um91bmRp
bmdFbmFibGVkOworCistIChDR1NpemUpX3dlYl9kcmF3QXRQb2ludDooQ0dQb2ludClwb2ludCB3
aXRoRm9udDooR1NGb250UmVmKWZvbnQ7CisKKy0gKENHU2l6ZSlfd2ViX3NpemVXaXRoRm9udDoo
R1NGb250UmVmKWZvbnQ7CisKKy8vIFNpemUgYWZ0ZXIgYXBwbHlpbmcgZWxsaXBzaXMgc3R5bGUg
YW5kIGNsaXBwaW5nIHRvIHdpZHRoLgorLSAoQ0dTaXplKV93ZWJfc2l6ZVdpdGhGb250OihHU0Zv
bnRSZWYpZm9udCBmb3JXaWR0aDooZmxvYXQpd2lkdGggZWxsaXBzaXM6KFdlYkVsbGlwc2lzU3R5
bGUpZWxsaXBzaXNTdHlsZTsKKy0gKENHU2l6ZSlfd2ViX3NpemVXaXRoRm9udDooR1NGb250UmVm
KWZvbnQgZm9yV2lkdGg6KGZsb2F0KXdpZHRoIGVsbGlwc2lzOihXZWJFbGxpcHNpc1N0eWxlKWVs
bGlwc2lzU3R5bGUgbGV0dGVyU3BhY2luZzooZmxvYXQpbGV0dGVyU3BhY2luZzsKKy0gKENHU2l6
ZSlfd2ViX3NpemVXaXRoRm9udDooR1NGb250UmVmKWZvbnQgZm9yV2lkdGg6KGZsb2F0KXdpZHRo
IGVsbGlwc2lzOihXZWJFbGxpcHNpc1N0eWxlKWVsbGlwc2lzU3R5bGUgbGV0dGVyU3BhY2luZzoo
ZmxvYXQpbGV0dGVyU3BhY2luZyByZXN1bHRSYW5nZTooTlNSYW5nZSAqKXJlc3VsdFJhbmdlT3V0
OworCisvLyBEcmF3IHRleHQgdG8gZml0IHdpZHRoLiBDbGlwIG9yIGFwcGx5IGVsbGlwc2lzIGFj
Y29yZGluZyB0byBzdHlsZS4KKy0gKENHU2l6ZSlfd2ViX2RyYXdBdFBvaW50OihDR1BvaW50KXBv
aW50IGZvcldpZHRoOihmbG9hdCl3aWR0aCB3aXRoRm9udDooR1NGb250UmVmKWZvbnQgZWxsaXBz
aXM6KFdlYkVsbGlwc2lzU3R5bGUpZWxsaXBzaXNTdHlsZTsKKy0gKENHU2l6ZSlfd2ViX2RyYXdB
dFBvaW50OihDR1BvaW50KXBvaW50IGZvcldpZHRoOihmbG9hdCl3aWR0aCB3aXRoRm9udDooR1NG
b250UmVmKWZvbnQgZWxsaXBzaXM6KFdlYkVsbGlwc2lzU3R5bGUpZWxsaXBzaXNTdHlsZSBsZXR0
ZXJTcGFjaW5nOihmbG9hdClsZXR0ZXJTcGFjaW5nOworLSAoQ0dTaXplKV93ZWJfZHJhd0F0UG9p
bnQ6KENHUG9pbnQpcG9pbnQgZm9yV2lkdGg6KGZsb2F0KXdpZHRoIHdpdGhGb250OihHU0ZvbnRS
ZWYpZm9udCBlbGxpcHNpczooV2ViRWxsaXBzaXNTdHlsZSllbGxpcHNpc1N0eWxlIGxldHRlclNw
YWNpbmc6KGZsb2F0KWxldHRlclNwYWNpbmcgaW5jbHVkZUVtb2ppOihCT09MKWluY2x1ZGVFbW9q
aTsKKworLy8gV3JhcCBhbmQgY2xpcCB0byByZWN0LgorLSAoQ0dTaXplKV93ZWJfZHJhd0luUmVj
dDooQ0dSZWN0KXJlY3Qgd2l0aEZvbnQ6KEdTRm9udFJlZilmb250IGVsbGlwc2lzOihXZWJFbGxp
cHNpc1N0eWxlKWVsbGlwc2lzU3R5bGUgYWxpZ25tZW50OihXZWJUZXh0QWxpZ25tZW50KWFsaWdu
bWVudDsKKy0gKENHU2l6ZSlfd2ViX2RyYXdJblJlY3Q6KENHUmVjdClyZWN0IHdpdGhGb250OihH
U0ZvbnRSZWYpZm9udCBlbGxpcHNpczooV2ViRWxsaXBzaXNTdHlsZSllbGxpcHNpc1N0eWxlIGFs
aWdubWVudDooV2ViVGV4dEFsaWdubWVudClhbGlnbm1lbnQgbGluZVNwYWNpbmc6KGludClsaW5l
U3BhY2luZzsKKy0gKENHU2l6ZSlfd2ViX2RyYXdJblJlY3Q6KENHUmVjdClyZWN0IHdpdGhGb250
OihHU0ZvbnRSZWYpZm9udCBlbGxpcHNpczooV2ViRWxsaXBzaXNTdHlsZSllbGxpcHNpc1N0eWxl
IGFsaWdubWVudDooV2ViVGV4dEFsaWdubWVudClhbGlnbm1lbnQgbGluZVNwYWNpbmc6KGludCls
aW5lU3BhY2luZyBpbmNsdWRlRW1vamk6KEJPT0wpaW5jbHVkZUVtb2ogdHJ1bmNhdGlvblJlY3Q6
KENHUmVjdCAqKXRydW5jYXRpb25SZWN0OworLSAoQ0dTaXplKV93ZWJfc2l6ZUluUmVjdDooQ0dS
ZWN0KXJlY3Qgd2l0aEZvbnQ6KEdTRm9udFJlZilmb250IGVsbGlwc2lzOihXZWJFbGxpcHNpc1N0
eWxlKWVsbGlwc2lzU3R5bGU7CistIChDR1NpemUpX3dlYl9zaXplSW5SZWN0OihDR1JlY3QpcmVj
dCB3aXRoRm9udDooR1NGb250UmVmKWZvbnQgZWxsaXBzaXM6KFdlYkVsbGlwc2lzU3R5bGUpZWxs
aXBzaXNTdHlsZSBsaW5lU3BhY2luZzooaW50KWxpbmVTcGFjaW5nOworCisvLyBDbGlwIG9yIGFw
cGx5IGVsbGlwc2lzIGFjY29yZGluZyB0byBzdHlsZS4gUmV0dXJuIHRoZSBzdHJpbmcgd2hpY2gg
cmVzdWx0cy4KKy0gKE5TU3RyaW5nICopX3dlYl9zdHJpbmdGb3JXaWR0aDooZmxvYXQpd2lkdGgg
d2l0aEZvbnQ6KEdTRm9udFJlZilmb250IGVsbGlwc2lzOihXZWJFbGxpcHNpc1N0eWxlKWVsbGlw
c2lzU3R5bGUgbGV0dGVyU3BhY2luZzooZmxvYXQpbGV0dGVyU3BhY2luZyBpbmNsdWRlRW1vamk6
KEJPT0wpaW5jbHVkZUVtb2ppOworCisvLyBUaGVzZSBtZXRob2RzIHNob3VsZCBldmVudHVhbGx5
IHJlcGxhY2UgYWxsIHN0cmluZyBkcmF3aW5nL3NpemluZyBtZXRob2RzIGFib3ZlCisKKy8vIFNp
emluZy9kcmF3aW5nIGEgc2luZ2xlIGxpbmUgb2YgdGV4dAorLSAoQ0dTaXplKV93ZWJfc2l6ZUZv
cldpZHRoOihDR0Zsb2F0KXdpZHRoIHdpdGhBdHRyaWJ1dGVzOihpZCA8V2ViVGV4dFJlbmRlcmlu
Z0F0dHJpYnV0ZXM+KWF0dHJpYnV0ZXM7CistIChDR1NpemUpX3dlYl9kcmF3QXRQb2ludDooQ0dQ
b2ludClwb2ludCBmb3JXaWR0aDooQ0dGbG9hdCl3aWR0aCB3aXRoQXR0cmlidXRlczooaWQgPFdl
YlRleHRSZW5kZXJpbmdBdHRyaWJ1dGVzPilhdHRyaWJ1dGVzOworCisvLyBTaXppbmcvZHJhd2lu
ZyBtdWx0aWxpbmUgdGV4dAorLSAoQ0dTaXplKV93ZWJfc2l6ZUluUmVjdDooQ0dSZWN0KXJlY3Qg
d2l0aEF0dHJpYnV0ZXM6KGlkIDxXZWJUZXh0UmVuZGVyaW5nQXR0cmlidXRlcz4pYXR0cmlidXRl
czsKKy0gKENHU2l6ZSlfd2ViX2RyYXdJblJlY3Q6KENHUmVjdClyZWN0IHdpdGhBdHRyaWJ1dGVz
OihpZCA8V2ViVGV4dFJlbmRlcmluZ0F0dHJpYnV0ZXM+KWF0dHJpYnV0ZXM7CisKK0BlbmQKKwor
I2VuZGlmIC8vIFBMQVRGT1JNKElPUykKKworI2VuZGlmIC8vIFdlYk5TU3RyaW5nRHJhd2luZ19o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2lvcy9NaXNjL1dlYk5TU3RyaW5nRHJhd2luZy5t
bSBiL1NvdXJjZS9XZWJLaXQvaW9zL01pc2MvV2ViTlNTdHJpbmdEcmF3aW5nLm1tCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmEyNzgzZmVjMWNiYWZhYjIxOWE5YThkMzUxNzk4MjcwY2NmNjA5NWEKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L2lvcy9NaXNjL1dlYk5TU3RyaW5nRHJhd2luZy5tbQpAQCAt
MCwwICsxLDkzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAw
OCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBv
cnQgIldlYk5TU3RyaW5nRHJhd2luZy5oIgorCisjaWYgUExBVEZPUk0oSU9TKQorCisjaW1wb3J0
ICJFbW9qaUZhbGxiYWNrRm9udFNlbGVjdG9yLmgiCisjaW1wb3J0IDxDb3JlRm91bmRhdGlvbi9D
RlByaXYuaD4KKyNpbXBvcnQgPENvcmVHcmFwaGljcy9DR0NvbG9yLmg+CisjaW1wb3J0IDxmbG9h
dC5oPgorI2ltcG9ydCA8c3lzL3R5cGVzLmg+CisjaW1wb3J0IDx1bmljb2RlL3VicmsuaD4KKyNp
bXBvcnQgPHVuaWNvZGUvdWNoYXIuaD4KKyNpbXBvcnQgPHVuaWNvZGUvdXRmLmg+CisjaW1wb3J0
IDxXZWJDb3JlL0JpZGlSZXNvbHZlci5oPgorI2ltcG9ydCA8V2ViQ29yZS9icmVha19saW5lcy5o
PgorI2ltcG9ydCA8V2ViQ29yZS9Gb250Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0ZvbnRDYWNoZS5o
PgorI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KKyNpbXBvcnQgPFdlYkNvcmUv
U3RyaW5nVHJ1bmNhdG9yLmg+CisjaW1wb3J0IDxXZWJDb3JlL1RleHRCcmVha0l0ZXJhdG9yLmg+
CisjaW1wb3J0IDxXZWJDb3JlL1RleHRSdW4uaD4KKyNpbXBvcnQgPFdlYkNvcmUvV0tHcmFwaGlj
cy5oPgorI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmg+CisjaW1wb3J0
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKyNpbXBvcnQgPHd0Zi91bmljb2RlL0NoYXJhY3Rlck5h
bWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIHN0ZDsK
Kworc3RhdGljIEJPT0wgYXNjZW50Um91bmRpbmdFbmFibGVkID0gTk87CisKK3N0YXRpYyBCT09M
IHdvcmRSb3VuZGluZ0VuYWJsZWQ7CisKK3N0YXRpYyBCT09MIHdvcmRSb3VuZGluZ0FsbG93ZWQg
PSBZRVM7CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBsaW5rZWRPbk9yQWZ0ZXJJUGhvbmVPUzMoKQor
eworICAgIHN0YXRpYyBib29sIHNfbGlua2VkT25PckFmdGVySU9TMyA9IGlvc0V4ZWN1dGFibGVX
YXNMaW5rZWRPbk9yQWZ0ZXJWZXJzaW9uKHdrSU9TU3lzdGVtVmVyc2lvbl8zXzApOworICAgIHJl
dHVybiBzX2xpbmtlZE9uT3JBZnRlcklPUzM7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzaG91
bGREaXNhYmxlV29yZFJvdW5kaW5nKCkKK3sKKyAgICAvLyBOb3RlIHRoYXQgZXZlbiB3aGVuIHJv
dW5kaW5nIGhhY2tzIGFyZSBub3QgZGlzYWJsZWQgYXQgdGhpcyBsZXZlbCwgdGhleSB3aWxsIG9u
bHkgYmUgYXBwbGllZAorICAgIC8vIGlmICtbV2ViVmlldyBfc2V0QWxsb3dzUm91bmRpbmdIYWNr
czpZRVNdIGlzIGNhbGxlZC4gVGh1cywgaW4gaU9TIDUgYW5kIGxhdGVyLCByb3VuZGluZyBoYWNr
cyBhcmUgbmV2ZXIKKyAgICAvLyBhcHBsaWVkIChzZWUgV2ViS2l0SW5pdGlhbGl6ZSgpIGluIFdl
YlVJS2l0U3VwcG9ydC5tbSkuCisKKyAgICBpZiAoIXdvcmRSb3VuZGluZ0FsbG93ZWQpCisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGxpbmtlZE9uT3JBZnRlcklQaG9uZU9TMygpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gIXdvcmRSb3VuZGluZ0VuYWJsZWQ7
Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGJvdW5kZWRUZXh0QnJlYWtGb2xsb3dpbmcoVGV4dEJy
ZWFrSXRlcmF0b3IqIGl0LCBpbnQgb2Zmc2V0LCBpbnQgbGVuZ3RoKQoreworICAgIGludCByZXN1
bHQgPSB0ZXh0QnJlYWtGb2xsb3dpbmcoaXQsIG9mZnNldCk7CisgICAgcmV0dXJuIHJlc3VsdCA9
PSBUZXh0QnJlYWtEb25lID8gbGVuZ3RoIDogcmVzdWx0OworfQorCitzdGF0aWMgaW5saW5lIEZv
bnQgcmVuZGVyZXJGb3JGb250KCBHU0ZvbnRSZWYgZm9udCApCit7CisgICAgR1NGb250VHJhaXRN
YXNrIHRyYWl0cyA9IEdTRm9udEdldFN5bnRoZXNpemVkVHJhaXRzKGZvbnQpOworICAgIGZsb2F0
IHNpemUgPSBHU0ZvbnRHZXRTaXplKGZvbnQpOworCisgICAgc3RhdGljIEVtb2ppRmFsbGJhY2tG
b250U2VsZWN0b3IqIGZvbnRTZWxlY3RvciA9IEVtb2ppRmFsbGJhY2tGb250U2VsZWN0b3I6OmNy
ZWF0ZSgpLmxlYWtSZWYoKTsKKworICAgIEZvbnRQbGF0Zm9ybURhdGEgcGxhdGZvcm1EYXRhKGZv
bnQsIHNpemUsIHRydWUsIHRyYWl0cyAmIEdTQm9sZEZvbnRNYXNrLCB0cmFpdHMgJiBHU0l0YWxp
Y0ZvbnRNYXNrKTsKKyAgICBGb250IHJlbmRlcmVyKHBsYXRmb3JtRGF0YSwgUGFzc1JlZlB0cjxG
b250U2VsZWN0b3I+KGZvbnRTZWxlY3RvcikpOworICAgIAorICAgIHJldHVybiByZW5kZXJlcjsK
K30KKworc3RhdGljIFN0cmluZyBhcHBseUVsbGlwc2lzU3R5bGUoY29uc3QgU3RyaW5nJiBzcmNT
dHJpbmcsIFdlYkVsbGlwc2lzU3R5bGUgc3R5bGUsIGZsb2F0IHdpZHRoLCBjb25zdCBGb250JiBm
b250LCBTdHJpbmdUcnVuY2F0b3I6OkVuYWJsZVJvdW5kaW5nSGFja3NPck5vdCBlbmFibGVSb3Vu
ZGluZ0hhY2tzLCBmbG9hdCogcmVzdWx0V2lkdGgsIGJvb2wgaW5zZXJ0RWxsaXBzaXMgPSB0cnVl
LCBmbG9hdCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoID0gMCwgYm9vbCBhbHdheXNUcnVu
Y2F0ZSA9IGZhbHNlKQoreworICAgIC8vIElmIGl0IGlzIFdlYkVsbGlwc2lzU3R5bGVDbGlwLCBX
ZWJFbGxpcHNpc1N0eWxlV29yZFdyYXAsIG9yIFdlYkVsbGlwc2lzU3R5bGVDaGFyYWN0ZXJXcmFw
LAorICAgIC8vIGFuZCB3ZSBkb24ndCBoYXZlIGFueSBjb25maW5lIG9uIHRoZSB3aWR0aCwgdGhl
biBpdCBpcyB0aGUgc2FtZSBhcyBXZWJFbGxpcHNpc1N0eWxlTm9uZS4KKyAgICBpZiAoc3R5bGUg
Pj0gV2ViRWxsaXBzaXNTdHlsZUNsaXAgJiYgd2lkdGggPj0gRkxUX01BWCkKKyAgICAgICAgc3R5
bGUgPSBXZWJFbGxpcHNpc1N0eWxlTm9uZTsKKworICAgIGZsb2F0IHRydW5jYXRlZFdpZHRoID0g
d2lkdGg7CisgICAgU3RyaW5nIHRydW5jYXRlZFN0cmluZyhzcmNTdHJpbmcpOworCisgICAgc3dp
dGNoIChzdHlsZSkgeworICAgIGNhc2UgV2ViRWxsaXBzaXNTdHlsZU5vbmU6CisgICAgICAgIHRy
dW5jYXRlZFdpZHRoID0gU3RyaW5nVHJ1bmNhdG9yOjp3aWR0aChzcmNTdHJpbmcsIGZvbnQsIGVu
YWJsZVJvdW5kaW5nSGFja3MpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdlYkVsbGlwc2lz
U3R5bGVIZWFkOgorICAgICAgICB0cnVuY2F0ZWRTdHJpbmcgPSBTdHJpbmdUcnVuY2F0b3I6Omxl
ZnRUcnVuY2F0ZShzcmNTdHJpbmcsIHdpZHRoLCBmb250LCBlbmFibGVSb3VuZGluZ0hhY2tzLCB0
cnVuY2F0ZWRXaWR0aCwgaW5zZXJ0RWxsaXBzaXMsIGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lk
dGgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdlYkVsbGlwc2lzU3R5bGVUYWlsOgorICAg
ICAgICB0cnVuY2F0ZWRTdHJpbmcgPSBTdHJpbmdUcnVuY2F0b3I6OnJpZ2h0VHJ1bmNhdGUoc3Jj
U3RyaW5nLCB3aWR0aCwgZm9udCwgZW5hYmxlUm91bmRpbmdIYWNrcywgdHJ1bmNhdGVkV2lkdGgs
IGluc2VydEVsbGlwc2lzLCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBXZWJFbGxpcHNpc1N0eWxlQ2VudGVyOgorICAgICAgICB0cnVuY2F0
ZWRTdHJpbmcgPSBTdHJpbmdUcnVuY2F0b3I6OmNlbnRlclRydW5jYXRlKHNyY1N0cmluZywgd2lk
dGgsIGZvbnQsIGVuYWJsZVJvdW5kaW5nSGFja3MsIHRydW5jYXRlZFdpZHRoLCBpbnNlcnRFbGxp
cHNpcywgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCk7CisgICAgICAgIGJyZWFrOworCisg
ICAgLy8gQ2hhcmFjdGVyIHdyYXAgaXMgdGhlIHNhbWUgYXMgY2xpcHBpbmcgZm9yIGEgc2luZ2xl
IGxpbmUsIHNpbmNlIHdlIGNhbid0IGNsaXAgbWlkLWNoYXJhY3Rlci4KKyAgICBjYXNlIFdlYkVs
bGlwc2lzU3R5bGVDaGFyYWN0ZXJXcmFwOgorICAgIGNhc2UgV2ViRWxsaXBzaXNTdHlsZUNsaXA6
CisgICAgICAgIC8vIElmIHdlIHdlcmUgZ2l2ZW4gYSBzcGVjaWZpYyB3aWR0aCB0byBkcmF3IGlu
LCB3ZSBzaG91bGRuJ3QgZHJhdyBsYXJnZXIgdGhhbiB0aGF0LgorICAgICAgICB0cnVuY2F0ZWRT
dHJpbmcgPSBTdHJpbmdUcnVuY2F0b3I6OnJpZ2h0Q2xpcFRvQ2hhcmFjdGVyKHNyY1N0cmluZywg
d2lkdGgsIGZvbnQsIGVuYWJsZVJvdW5kaW5nSGFja3MsIHRydW5jYXRlZFdpZHRoLCBpbnNlcnRF
bGxpcHNpcywgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRXaWR0aCk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgV2ViRWxsaXBzaXNTdHlsZVdvcmRXcmFwOgorICAgICAgICAvLyBJZiB3ZSB3ZXJl
IGdpdmVuIGEgc3BlY2lmaWMgd2lkdGggdG8gZHJhdyBpbiwgd2Ugc2hvdWxkbid0IGRyYXcgbGFy
Z2VyIHRoYW4gdGhhdC4KKyAgICAgICAgdHJ1bmNhdGVkU3RyaW5nID0gU3RyaW5nVHJ1bmNhdG9y
OjpyaWdodENsaXBUb1dvcmQoc3JjU3RyaW5nLCB3aWR0aCwgZm9udCwgZW5hYmxlUm91bmRpbmdI
YWNrcywgdHJ1bmNhdGVkV2lkdGgsIGluc2VydEVsbGlwc2lzLCBjdXN0b21UcnVuY2F0aW9uRWxl
bWVudFdpZHRoLCBhbHdheXNUcnVuY2F0ZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IGlmIChyZXN1bHRXaWR0aCkKKyAgICAgICAgKnJlc3VsdFdpZHRoID0gdHJ1bmNhdGVkV2lkdGg7
CisgICAgCisgICAgcmV0dXJuIHRydW5jYXRlZFN0cmluZzsKK30KKworc3RhdGljIGZsb2F0IGRy
YXdBdFBvaW50KGNvbnN0IFVDaGFyKiBzdHIsIGNvbnN0IGludCBydW5MZW5ndGgsIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBjb25zdCBGb250JiByZW5kZXJlciwgR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LCBib29sIGRyYXdVbmRlckxpbmUgPSBmYWxzZSwgQmlkaVN0YXR1cyogc3RhdHVzID0g
MCwgaW50IGxlbmd0aCA9IC0xKQoreworICAgIFRleHRSdW4gdGV4dFJ1bihzdHIsIHJ1bkxlbmd0
aCk7CisgICAgaWYgKHNob3VsZERpc2FibGVXb3JkUm91bmRpbmcoKSkKKyAgICAgICAgdGV4dFJ1
bi5kaXNhYmxlUm91bmRpbmdIYWNrcygpOworCisgICAgZmxvYXQgd2lkdGggPSAwOworICAgIGlm
ICghc3RhdHVzKQorICAgICAgICB3aWR0aCA9IHJlbmRlcmVyLmRyYXdUZXh0KGNvbnRleHQsIHRl
eHRSdW4sIHBvaW50KTsKKyAgICBlbHNlCisgICAgICAgIHdpZHRoID0gY29udGV4dC0+ZHJhd0Jp
ZGlUZXh0KHJlbmRlcmVyLCB0ZXh0UnVuLCBwb2ludCwgV2ViQ29yZTo6Rm9udDo6RG9Ob3RQYWlu
dElmRm9udE5vdFJlYWR5LCBzdGF0dXMsIGxlbmd0aCk7CisKKyAgICBpZiAoZHJhd1VuZGVyTGlu
ZSkKKyAgICAgICAgY29udGV4dC0+ZHJhd0xpbmVGb3JUZXh0KHBvaW50LCB3aWR0aCwgZmFsc2Up
OworICAgIHJldHVybiB3aWR0aDsKK30KKworc3RhdGljIGJvb2wgbmVlZHNCaWRpTGF5b3V0KGNv
bnN0IFVDaGFyICpjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIFdURjo6VW5pY29kZTo6RGly
ZWN0aW9uJiBiYXNlRGlyZWN0aW9uLCBib29sIG9uZVBhcmFncmFwaCA9IGZhbHNlKQoreworICAg
IGJvb2wgZm91bmRGaXJzdFN0cm9uZyA9IGZhbHNlOworICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7
CisgICAgYmFzZURpcmVjdGlvbiA9IFdURjo6VW5pY29kZTo6TGVmdFRvUmlnaHQ7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDspIHsKKyAgICAgICAgVUNoYXIzMiBjOworICAg
ICAgICBVMTZfTkVYVChjaGFyYWN0ZXJzLCBpLCBsZW5ndGgsIGMpOworICAgICAgICBzd2l0Y2gg
KFdURjo6VW5pY29kZTo6ZGlyZWN0aW9uKGMpKSB7CisgICAgICAgICAgICBjYXNlIFdURjo6VW5p
Y29kZTo6UmlnaHRUb0xlZnQ6CisgICAgICAgICAgICBjYXNlIFdURjo6VW5pY29kZTo6UmlnaHRU
b0xlZnRBcmFiaWM6CisgICAgICAgICAgICAgICAgaWYgKCFmb3VuZEZpcnN0U3Ryb25nKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGZvdW5kRmlyc3RTdHJvbmcgPSB0cnVlOworICAgICAgICAgICAg
ICAgICAgICBiYXNlRGlyZWN0aW9uID0gV1RGOjpVbmljb2RlOjpSaWdodFRvTGVmdDsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gRmFsbCB0aHJvdWdoIHRvIHJlc3Qgb2Yg
c3Ryb25nbHkgZGlyZWN0aW9uYWwgY2FzZXMKKyAgICAgICAgICAgIGNhc2UgV1RGOjpVbmljb2Rl
OjpMZWZ0VG9SaWdodEVtYmVkZGluZzoKKyAgICAgICAgICAgIGNhc2UgV1RGOjpVbmljb2RlOjpM
ZWZ0VG9SaWdodE92ZXJyaWRlOgorICAgICAgICAgICAgY2FzZSBXVEY6OlVuaWNvZGU6OlJpZ2h0
VG9MZWZ0RW1iZWRkaW5nOgorICAgICAgICAgICAgY2FzZSBXVEY6OlVuaWNvZGU6OlJpZ2h0VG9M
ZWZ0T3ZlcnJpZGU6CisgICAgICAgICAgICBjYXNlIFdURjo6VW5pY29kZTo6UG9wRGlyZWN0aW9u
YWxGb3JtYXQ6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICBpZiAoZm91bmRGaXJzdFN0cm9uZykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgV1RGOjpVbmljb2Rl
OjpMZWZ0VG9SaWdodDoKKyAgICAgICAgICAgICAgICBmb3VuZEZpcnN0U3Ryb25nID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBXVEY6OlVu
aWNvZGU6OkJsb2NrU2VwYXJhdG9yOgorICAgICAgICAgICAgICAgIGlmIChvbmVQYXJhZ3JhcGgp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0BpbXBsZW1lbnRhdGlvbiBOU1N0
cmluZyAoV2ViU3RyaW5nRHJhd2luZykKKworKyAodm9pZClfd2ViX3NldFdvcmRSb3VuZGluZ0Vu
YWJsZWQ6KEJPT0wpZmxhZworeworICAgIGlmICghbGlua2VkT25PckFmdGVySVBob25lT1MzKCkp
CisgICAgICAgIHdvcmRSb3VuZGluZ0VuYWJsZWQgPSBmbGFnOworfQorCisrIChCT09MKV93ZWJf
d29yZFJvdW5kaW5nRW5hYmxlZAoreworICAgIHJldHVybiB3b3JkUm91bmRpbmdFbmFibGVkOwor
fQorCisrICh2b2lkKV93ZWJfc2V0V29yZFJvdW5kaW5nQWxsb3dlZDooQk9PTClmbGFnCit7Cisg
ICAgd29yZFJvdW5kaW5nQWxsb3dlZCA9IGZsYWc7Cit9CisKKysgKEJPT0wpX3dlYl93b3JkUm91
bmRpbmdBbGxvd2VkCit7CisgICAgcmV0dXJuIHdvcmRSb3VuZGluZ0FsbG93ZWQ7Cit9CisKKysg
KHZvaWQpX3dlYl9zZXRBc2NlbnRSb3VuZGluZ0VuYWJsZWQ6KEJPT0wpZmxhZworeworICAgIGFz
Y2VudFJvdW5kaW5nRW5hYmxlZCA9IGZsYWc7Cit9CisKKysgKEJPT0wpX3dlYl9hc2NlbnRSb3Vu
ZGluZ0VuYWJsZWQKK3sKKyAgICByZXR1cm4gYXNjZW50Um91bmRpbmdFbmFibGVkOworfQorCisj
cHJhZ21hIG1hcmsgSW50ZXJuYWwgcHJpbWl0aXZlcyB1c2VkIGZvciBzdHJpbmcgZHJhd2luZy9z
aXppbmcKKworLy8gVGhlc2UgbWV0aG9kcyBzaG91bGQgbm90IGJlIGNhbGxlZCBmcm9tIG91dHNp
ZGUgb2YgdGhpcyBmaWxlCisKKy0gKENHU2l6ZSlfX3dlYl9kcmF3QXRQb2ludDooQ0dQb2ludClw
b2ludAorICAgICAgICAgICAgICAgICAgIGZvcldpZHRoOihDR0Zsb2F0KXdpZHRoCisgICAgICAg
ICAgICAgICAgICAgd2l0aEZvbnQ6KEdTRm9udFJlZilmb250CisgICAgICAgICAgICAgICAgICAg
ZWxsaXBzaXM6KFdlYkVsbGlwc2lzU3R5bGUpZWxsaXBzaXNTdHlsZQorICAgICAgICAgICAgICBs
ZXR0ZXJTcGFjaW5nOihmbG9hdClsZXR0ZXJTcGFjaW5nCisgICAgICAgICAgICAgICBpbmNsdWRl
RW1vamk6KEJPT0wpaW5jbHVkZUVtb2ppCisgICAgICAgICAgICAgICAgbWVhc3VyZU9ubHk6KEJP
T0wpbWVhc3VyZU9ubHkKKyAgICAgICAgICByZW5kZXJlZFN0cmluZ091dDooTlNTdHJpbmcgKiop
cmVuZGVyZWRTdHJpbmdPdXQKKyAgICAgICAgICAgICAgZHJhd1VuZGVybGluZTooQk9PTClkcmF3
VW5kZXJsaW5lCit7CisgICAgaWYgKHdpZHRoIDwgMCkgeworI2lmbmRlZiBOREVCVUcKKyAgICAg
ICAgZnByaW50ZihzdGRlcnIsICIlczogd2lkdGggbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyby5c
biIsIF9fRlVOQ1RJT05fXyk7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIENHU2l6ZVplcm87Cisg
ICAgfQorICAgIAorICAgIGlmIChmb250ID09IE5VTEwpIHsKKyNpZm5kZWYgTkRFQlVHCisgICAg
ICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGZvbnQgbXVzdCBiZSBub24tbnVsbC5cbiIsIF9fRlVO
Q1RJT05fXyk7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIENHU2l6ZVplcm87CisgICAgfQorICAg
IAorICAgIGlmIChbc2VsZiBpc0VxdWFsVG9TdHJpbmc6QCIiXSkgeworICAgICAgICByZXR1cm4g
Q0dTaXplWmVybzsKKyAgICB9CisKKyAgICBGb250Q2FjaGVQdXJnZVByZXZlbnRlciBmb250Q2Fj
aGVQdXJnZVByZXZlbnRlcjsKKworICAgIEZvbnQgcmVuZGVyZXIgPSByZW5kZXJlckZvckZvbnQo
Zm9udCk7CisgICAgaWYgKGxldHRlclNwYWNpbmcgIT0gMC4wKQorICAgICAgICByZW5kZXJlci5z
ZXRMZXR0ZXJTcGFjaW5nKGxldHRlclNwYWNpbmcpOworCisgICAgU3RyaW5nIGZ1bGxTdHJpbmco
c2VsZik7CisgICAgV1RGOjpVbmljb2RlOjpEaXJlY3Rpb24gYmFzZSA9IFdURjo6VW5pY29kZTo6
TGVmdFRvUmlnaHQ7CisgICAgYm9vbCBzdHJpbmdOZWVkc0JpZGkgPSBuZWVkc0JpZGlMYXlvdXQo
ZnVsbFN0cmluZy5jaGFyYWN0ZXJzKCksIGZ1bGxTdHJpbmcubGVuZ3RoKCksIGJhc2UpOworICAg
IGZsb2F0IHN0cmluZ1dpZHRoOworICAgIFN0cmluZyBzID0gKHdpZHRoID49IEZMVF9NQVggJiYg
IW1lYXN1cmVPbmx5KSA/IGZ1bGxTdHJpbmcgOiBhcHBseUVsbGlwc2lzU3R5bGUoZnVsbFN0cmlu
ZywgZWxsaXBzaXNTdHlsZSwgd2lkdGgsIHJlbmRlcmVyLCBzaG91bGREaXNhYmxlV29yZFJvdW5k
aW5nKCkgPyBTdHJpbmdUcnVuY2F0b3I6OkRpc2FibGVSb3VuZGluZ0hhY2tzIDogU3RyaW5nVHJ1
bmNhdG9yOjpFbmFibGVSb3VuZGluZ0hhY2tzLCAmc3RyaW5nV2lkdGgpOworICAgIAorICAgIGlm
ICghbWVhc3VyZU9ubHkpIHsKKyAgICAgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dD0gV0tHZXRD
dXJyZW50R3JhcGhpY3NDb250ZXh0KCk7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0
KHN0YXRpY19jYXN0PFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0Kj4oY2dDb250ZXh0KSwgZmFsc2Up
OworICAgICAgICBjb250ZXh0LnNldEVtb2ppRHJhd2luZ0VuYWJsZWQoaW5jbHVkZUVtb2ppKTsK
KworICAgICAgICBpZiAoc3RyaW5nTmVlZHNCaWRpKSB7CisgICAgICAgICAgICBCaWRpU3RhdHVz
IHN0YXR1cyhiYXNlLCBiYXNlLCBiYXNlLCBCaWRpQ29udGV4dDo6Y3JlYXRlKChiYXNlID09IFdU
Rjo6VW5pY29kZTo6TGVmdFRvUmlnaHQpID8gMCA6IDEsIGJhc2UsIGZhbHNlKSk7CisgICAgICAg
ICAgICAvLyBGSVhNRTogRm9yIHByb3BlciBiaWRpIHJlbmRlcmluZywgd2UgbmVlZCB0byBwYXNz
IHRoZSB3aG9sZSBzdHJpbmcsIHJhdGhlciB0aGFuIHRoZSB0cnVuY2F0ZWQgc3RyaW5nLgorICAg
ICAgICAgICAgLy8gT3RoZXJ3aXNlLCB3ZWFrL25ldXRyYWwgY2hhcmFjdGVycyBvbiBlaXRoZXIg
c2lkZSBvZiB0aGUgZWxsaXBzaXMgbWF5IHBpY2sgdXAgdGhlIHdyb25nIGRpcmVjdGlvbgorICAg
ICAgICAgICAgLy8gaWYgdGhlcmUgYXJlIHN0cm9uZyBjaGFyYWN0ZXJzIGVsbGlkZWQuCisgICAg
ICAgICAgICBzdHJpbmdXaWR0aCA9IGRyYXdBdFBvaW50KHMuY2hhcmFjdGVycygpLCBzLmxlbmd0
aCgpLCBwb2ludCwgcmVuZGVyZXIsICZjb250ZXh0LCBkcmF3VW5kZXJsaW5lLCAmc3RhdHVzKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN0cmluZ1dpZHRoID0gZHJhd0F0UG9pbnQo
cy5jaGFyYWN0ZXJzKCksIHMubGVuZ3RoKCksIHBvaW50LCByZW5kZXJlciwgJmNvbnRleHQsIGRy
YXdVbmRlcmxpbmUpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGlmIChyZW5kZXJlZFN0
cmluZ091dCkKKyAgICAgICAgKnJlbmRlcmVkU3RyaW5nT3V0ID0gKE5TU3RyaW5nICopczsKKwor
ICAgIHJldHVybiBDR1NpemVNYWtlKHN0cmluZ1dpZHRoLCBHU0ZvbnRHZXRMaW5lU3BhY2luZyhm
b250KSk7Cit9CisKKy0gKENHU2l6ZSlfX3dlYl9kcmF3QXRQb2ludDooQ0dQb2ludClwb2ludAor
ICAgICAgICAgICAgICAgICAgIGZvcldpZHRoOihDR0Zsb2F0KXdpZHRoCisgICAgICAgICAgICAg
ICAgICAgd2l0aEZvbnQ6KEdTRm9udFJlZilmb250CisgICAgICAgICAgICAgICAgICAgZWxsaXBz
aXM6KFdlYkVsbGlwc2lzU3R5bGUpZWxsaXBzaXNTdHlsZQorICAgICAgICAgICAgICBsZXR0ZXJT
cGFjaW5nOihmbG9hdClsZXR0ZXJTcGFjaW5nCisgICAgICAgICAgICAgICBpbmNsdWRlRW1vamk6
KEJPT0wpaW5jbHVkZUVtb2ppCisgICAgICAgICAgICAgICAgbWVhc3VyZU9ubHk6KEJPT0wpbWVh
c3VyZU9ubHkKKyAgICAgICAgICByZW5kZXJlZFN0cmluZ091dDooTlNTdHJpbmcgKiopcmVuZGVy
ZWRTdHJpbmdPdXQKK3sKKyAgICByZXR1cm4gW3NlbGYgX193ZWJfZHJhd0F0UG9pbnQ6cG9pbnQK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yV2lkdGg6d2lkdGgKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgd2l0aEZvbnQ6Zm9udAorICAgICAgICAgICAgICAgICAgICAgICAgICBlbGxp
cHNpczplbGxpcHNpc1N0eWxlCisgICAgICAgICAgICAgICAgICAgICBsZXR0ZXJTcGFjaW5nOmxl
dHRlclNwYWNpbmcKKyAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlRW1vamk6aW5jbHVkZUVt
b2ppCisgICAgICAgICAgICAgICAgICAgICAgIG1lYXN1cmVPbmx5Om1lYXN1cmVPbmx5CisgICAg
ICAgICAgICAgICAgIHJlbmRlcmVkU3RyaW5nT3V0OnJlbmRlcmVkU3RyaW5nT3V0CisgICAgICAg
ICAgICAgICAgICAgICBkcmF3VW5kZXJsaW5lOk5PXTsKK30KKworLSAoQ0dTaXplKV9fd2ViX2Ry
YXdBdFBvaW50OihDR1BvaW50KXBvaW50CisgICAgICAgICAgICAgICAgICAgZm9yV2lkdGg6KENH
RmxvYXQpd2lkdGgKKyAgICAgICAgICAgICAgICAgICB3aXRoRm9udDooR1NGb250UmVmKWZvbnQK
KyAgICAgICAgICAgICAgICAgICBlbGxpcHNpczooV2ViRWxsaXBzaXNTdHlsZSllbGxpcHNpc1N0
eWxlCisgICAgICAgICAgICAgIGxldHRlclNwYWNpbmc6KGZsb2F0KWxldHRlclNwYWNpbmcKKyAg
ICAgICAgICAgICAgIGluY2x1ZGVFbW9qaTooQk9PTClpbmNsdWRlRW1vamkKKyAgICAgICAgICAg
ICAgICBtZWFzdXJlT25seTooQk9PTCltZWFzdXJlT25seQoreworICAgIHJldHVybiBbc2VsZiBf
X3dlYl9kcmF3QXRQb2ludDpwb2ludAorICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JXaWR0
aDp3aWR0aAorICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoRm9udDpmb250CisgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVsbGlwc2lzOmVsbGlwc2lzU3R5bGUKKyAgICAgICAgICAgICAg
ICAgICAgIGxldHRlclNwYWNpbmc6bGV0dGVyU3BhY2luZworICAgICAgICAgICAgICAgICAgICAg
IGluY2x1ZGVFbW9qaTppbmNsdWRlRW1vamkKKyAgICAgICAgICAgICAgICAgICAgICAgbWVhc3Vy
ZU9ubHk6bWVhc3VyZU9ubHkKKyAgICAgICAgICAgICAgICAgcmVuZGVyZWRTdHJpbmdPdXQ6bmls
XTsKK30KKworLSAoQ0dTaXplKV9fd2ViX2RyYXdJblJlY3Q6KENHUmVjdClyZWN0CisgICAgICAg
ICAgICAgICAgICB3aXRoRm9udDooR1NGb250UmVmKWZvbnQKKyAgICAgICAgICAgICAgICAgIGVs
bGlwc2lzOihXZWJFbGxpcHNpc1N0eWxlKWVsbGlwc2lzU3R5bGUKKyAgICAgICAgICAgICAgICAg
YWxpZ25tZW50OihXZWJUZXh0QWxpZ25tZW50KWFsaWdubWVudAorICAgICAgICAgICAgIGxldHRl
clNwYWNpbmc6KENHRmxvYXQpbGV0dGVyU3BhY2luZworICAgICAgICAgICAgICAgbGluZVNwYWNp
bmc6KENHRmxvYXQpbGluZVNwYWNpbmcKKyAgICAgICAgICAgICAgaW5jbHVkZUVtb2ppOihCT09M
KWluY2x1ZGVFbW9qaQorICAgICAgICAgICAgdHJ1bmNhdGlvblJlY3Q6KENHUmVjdCAqKXRydW5j
YXRpb25SZWN0CisgICAgICAgICAgICAgICBtZWFzdXJlT25seTooQk9PTCltZWFzdXJlT25seQor
ICAgICAgICAgcmVuZGVyZWRTdHJpbmdPdXQ6KE5TU3RyaW5nICoqKXJlbmRlcmVkU3RyaW5nT3V0
CisgICAgICAgICAgICAgZHJhd1VuZGVybGluZTooQk9PTClkcmF3VW5kZXJsaW5lCit7ICAgIAor
ICAgIGlmIChyZWN0LnNpemUud2lkdGggPCAwKSB7CisjaWZuZGVmIE5ERUJVRworICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgIiVzOiB3aWR0aCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLlxuIiwg
X19GVU5DVElPTl9fKTsKKyNlbmRpZgorICAgICAgICByZXR1cm4gQ0dTaXplWmVybzsKKyAgICB9
CisgICAgCisgICAgaWYgKGZvbnQgPT0gTlVMTCkgeworI2lmbmRlZiBOREVCVUcKKyAgICAgICAg
ZnByaW50ZihzdGRlcnIsICIlczogZm9udCBtdXN0IGJlIG5vbi1udWxsLlxuIiwgX19GVU5DVElP
Tl9fKTsKKyNlbmRpZgorICAgICAgICByZXR1cm4gQ0dTaXplWmVybzsKKyAgICB9ICAgIAorCisg
ICAgU3RyaW5nIHJlbmRlcmVkU3RyaW5nID0gKHJlbmRlcmVkU3RyaW5nT3V0ID8gU3RyaW5nKCIi
KSA6IFN0cmluZygpKTsKKworICAgIEZvbnRDYWNoZVB1cmdlUHJldmVudGVyIGZvbnRDYWNoZVB1
cmdlUHJldmVudGVyOworCisgICAgRm9udCByZW5kZXJlciA9IHJlbmRlcmVyRm9yRm9udChmb250
KTsKKyAgICByZW5kZXJlci5zZXRMZXR0ZXJTcGFjaW5nKGxldHRlclNwYWNpbmcpOworICAgIFN0
cmluZyBkcmF3U3RyaW5nID0gU3RyaW5nKHNlbGYpOworICAgIGlmIChkcmF3U3RyaW5nLmNvbnRh
aW5zKCdccicpKSB7CisgICAgICAgIGRyYXdTdHJpbmcucmVwbGFjZSgiXHJcbiIsICJcbiIpOwor
ICAgICAgICBkcmF3U3RyaW5nLnJlcGxhY2UoJ1xyJywgJ1xuJyk7CisgICAgfQorICAgIGludCBs
ZW5ndGggPSBkcmF3U3RyaW5nLmxlbmd0aCgpOworICAgIAorICAgIENHUG9pbnQgdGV4dFBvaW50
OworICAgIENHUG9pbnQgY3Vyc29yID0gcmVjdC5vcmlnaW47CisgICAgQk9PTCBoYXNDdXN0b21M
aW5lc3BhY2luZyA9IFlFUzsKKyAgICBpZiAobGluZVNwYWNpbmcgPT0gMC4wKSB7CisgICAgICAg
IGxpbmVTcGFjaW5nID0gR1NGb250R2V0TGluZVNwYWNpbmcoZm9udCk7CisgICAgICAgIGhhc0N1
c3RvbUxpbmVzcGFjaW5nID0gTk87CisgICAgfQorICAgIGZsb2F0IGFzY2VudCA9IEdTRm9udEdl
dEFzY2VudChmb250KTsKKyAgICBpZiAoYXNjZW50Um91bmRpbmdFbmFibGVkKSB7CisgICAgICAg
IC8vIFRoaXMgb3B0LWluIGFzY2VudCByb3VuZGluZyBtb2RlIG1hdGNoZXMgc3RhbmRhcmQgV2Vi
S2l0IHRleHQgcmVuZGVyaW5nIGFuZCBpcyB1c2VkIGJ5IGNsaWVudHMgdGhhdCB3YW50CisgICAg
ICAgIC8vIHRvIG1hdGNoLCBsaWtlIGEgcGxhY2Vob2xkZXIgbGFiZWwgaW5zaWRlIGEgdGV4dGZp
ZWxkIHRoYXQgbmVlZHMgdG8gbGluZSB1cCBleGFjdGx5IHdpdGggdGV4dCBpbiB0aGUgCisgICAg
ICAgIC8vIFdlYlZpZXcgdGhhdCB3aWxsIGV2ZW50dWFsbHkgcmVwbGFjZSBpdC4KKyAgICAgICAg
YXNjZW50ID0gY2VpbGYoYXNjZW50KTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBGb3IgYWxs
IG90aGVyIGRyYXdpbmcsIHdlIHJvdW5kIHRvIHRoZSBuZWFyZXN0IDEvMTI4IHRvIGF2b2lkIGlu
YWNjdXJhdGUgcmVzdWx0cyBpbiB0aGUgY29tcHV0YXRpb25zIGJlbG93LCAKKyAgICAgICAgLy8g
ZHVlIHRvIGxpbWl0ZWQgZmxvYXRpbmctcG9pbnQgcHJlY2lzaW9uLiAgV2Ugcm91bmQgdG8gdGhl
IG5lYXJlc3QgMS8xMjggYmVjYXVzZSBhKSBpdCBpcyBhIHBvd2VyIG9mIHR3bywgCisgICAgICAg
IC8vIGFuZCB5b3UgY2FuIGV4YWN0bHkgbXVsdGlwbHkgaW50ZWdlcnMgYnkgYSBwb3dlciBvZiAy
LCBhbmQgYikgaXQgaXMgc21hbGwgZW5vdWdoIHRvIG5vdCBlZmZlY3QgcmVuZGVyaW5nIAorICAg
ICAgICAvLyBhdCBhbnkgcmVzb2x1dGlvbiB0aGF0IHdlIHdpbGwgY29uY2VpdmFibHkgdXNlLiAg
U2VlIDxyZGFyOi8vcHJvYmxlbS84MTAyMTAwPi4KKyAgICAgICAgYXNjZW50ID0gY2VpbGYoYXNj
ZW50ICogMTI4KSAvIDEyOC4wZjsKKyAgICB9CisgICAgZmxvYXQgbWF4TGluZVdpZHRoID0gMDsK
KyAgICBjdXJzb3IueSArPSBhc2NlbnQ7CisKKyAgICBjb25zdCBVbmlDaGFyICpidWZmZXIgPSBk
cmF3U3RyaW5nLmNoYXJhY3RlcnMoKTsKKyAgICBjb25zdCBVbmlDaGFyICpzdGFydE9mTGluZSA9
IGJ1ZmZlcjsKKworICAgIEJPT0wgbGFzdExpbmUgPSBOTzsKKyAgICBCT09MIGZpbmlzaGVkTGFz
dExpbmUgPSBOTzsKKyAgICBXVEY6OlVuaWNvZGU6OkRpcmVjdGlvbiBiYXNlOworICAgIEJPT0wg
cGFyYWdyYXBoTmVlZHNCaWRpID0gbmVlZHNCaWRpTGF5b3V0KGJ1ZmZlciwgbGVuZ3RoLCBiYXNl
LCB0cnVlKTsKKyAgICBCaWRpU3RhdHVzIHN0YXR1czsKKyAgICBpZiAocGFyYWdyYXBoTmVlZHNC
aWRpKQorICAgICAgICBzdGF0dXMgPSBCaWRpU3RhdHVzKGJhc2UsIGJhc2UsIGJhc2UsIEJpZGlD
b250ZXh0OjpjcmVhdGUoKGJhc2UgPT0gV1RGOjpVbmljb2RlOjpMZWZ0VG9SaWdodCkgPyAwIDog
MSwgYmFzZSwgZmFsc2UpKTsKKworICAgIGludCBsZW5ndGhSZW1haW5pbmcgPSBsZW5ndGg7Cisg
ICAgCisgICAgd2hpbGUgKGxlbmd0aFJlbWFpbmluZyA+IDAgJiYgIWZpbmlzaGVkTGFzdExpbmUp
IHsKKyAgICAgICAgaWYgKChjdXJzb3IueSAtIHJlY3Qub3JpZ2luLnkpICsgbGluZVNwYWNpbmcg
PiByZWN0LnNpemUuaGVpZ2h0KQorICAgICAgICAgICAgbGFzdExpbmUgPSBZRVM7CisgICAgICAg
IAorICAgICAgICBCT09MIHJlYWNoZWRFbmRPZkxpbmUgPSBOTzsKKyAgICAgICAgQk9PTCBmb3Vu
ZE5ld2xpbmUgPSBOTzsKKworICAgICAgICBVbmlDaGFyICpwb3MgPSBjb25zdF9jYXN0PFVuaUNo
YXIqPihzdGFydE9mTGluZSk7CisgICAgICAgIGZsb2F0IGxpbmVXaWR0aCA9IDAuMGY7IAorICAg
ICAgICBmbG9hdCB0cmFpbGluZ1NwYWNlV2lkdGggPSAwLjBmOyAvLyBXaWR0aCBvZiB0cmFpbGlu
ZyBzcGFjZShzKSBvbiBsaW5lLCBpZiBhbnkKKyAgICAgICAgaW50IHRyYWlsaW5nU3BhY2VDb3Vu
dCA9IDA7IC8vIENvdW50IG9mIHRyYWlsaW5nIHNwYWNlKHMpIG9uIGxpbmUsIGlmIGFueQorICAg
ICAgICAKKyAgICAgICAgQk9PTCBsYXN0TGluZUVsbGlwc2VkID0gbGFzdExpbmUgJiYgKGVsbGlw
c2lzU3R5bGUgPj0gV2ViRWxsaXBzaXNTdHlsZUhlYWQgJiYgZWxsaXBzaXNTdHlsZSA8PSBXZWJF
bGxpcHNpc1N0eWxlQ2VudGVyKTsKKyAgICAgICAgQk9PTCBsYXN0TGluZUNsaXBwZWQgPSBsYXN0
TGluZSAmJiAoZWxsaXBzaXNTdHlsZSA+PSBXZWJFbGxpcHNpc1N0eWxlQ2xpcCk7CisgICAgICAg
IGludCBza2lwcGVkV2hpdGVzcGFjZSA9IDA7CisgICAgICAgIAorICAgICAgICB3aGlsZSAoIShs
YXN0TGluZUVsbGlwc2VkIHx8IGxhc3RMaW5lQ2xpcHBlZCkgJiYgbGVuZ3RoUmVtYWluaW5nID4g
MCAmJiAhcmVhY2hlZEVuZE9mTGluZSkgeworICAgICAgICAgICAgaW50IGJyZWFrUG9zID0gMDsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGVsbGlwc2lzU3R5bGUgIT0gV2ViRWxsaXBz
aXNTdHlsZUNoYXJhY3RlcldyYXApIHsKKyAgICAgICAgICAgICAgICAvL0ZJWE1FOiA8cmRhcjov
L3Byb2JsZW0vMTI0NTc3OTA+IGludmVzdGlnYXRlIHBlcmYgaW1wYWN0IGFmdGVyIG1lcmdpbmcg
VE9UIHIxMjk2NjIuCisgICAgICAgICAgICAgICAgTGF6eUxpbmVCcmVha0l0ZXJhdG9yIGJyZWFr
SXRlcmF0b3IoU3RyaW5nKHBvcywgbGVuZ3RoUmVtYWluaW5nKSk7CisgICAgICAgICAgICAgICAg
YnJlYWtQb3MgPSBuZXh0QnJlYWthYmxlUG9zaXRpb24oYnJlYWtJdGVyYXRvciwgMCk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGNvZGUgY3VycmVudGx5IHdv
cmtzIGJlY2F1c2UgdGhlcmUgYXJlIG5vIGNoYXJhY3RlcnMgd2l0aCB0aGVzZSBicmVhayBvciB3
aGl0ZXNwYWNlCisgICAgICAgICAgICAvLyBwcm9wZXJ0aWVzIG91dHNpZGUgcGxhbmUgMC4gSWYg
dGhhdCBldmVyIGNoYW5nZXMsIHN1cnJvZ2F0ZSBwYWlyIGhhbmRsaW5nIHdpbGwgYmUgbmVlZGVk
IGV2ZXJ5d2hlcmUKKyAgICAgICAgICAgIC8vIGJlbG93IHdoZXJlIHRoZSB3aWR0aCBvciBhIGJy
ZWFrIG9yIHNwYWNlIGlzIGFzc3VtZWQgdG8gYmUgMS4KKyAgICAgICAgICAgIEJPT0wgZm91bmRT
cGFjZSA9IE5POworCisgICAgICAgICAgICBpZiAoYnJlYWtQb3MgPCBsZW5ndGhSZW1haW5pbmcp
IHsKKyAgICAgICAgICAgICAgICBVTGluZUJyZWFrIGJyZWFrUHJvcGVydHkgPSAoVUxpbmVCcmVh
aykgdV9nZXRJbnRQcm9wZXJ0eVZhbHVlKHBvc1ticmVha1Bvc10sIFVDSEFSX0xJTkVfQlJFQUsp
OworICAgICAgICAgICAgICAgIHN3aXRjaCAoYnJlYWtQcm9wZXJ0eSkgeworICAgICAgICAgICAg
ICAgICAgICBjYXNlIFVfTEJfU1BBQ0U6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgVV9MQl9a
V1NQQUNFOgorICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRTcGFjZSA9IFlFUzsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIFVfTEJf
TElORV9GRUVEOgorICAgICAgICAgICAgICAgICAgICBjYXNlIFVfTEJfTkVYVF9MSU5FOgorICAg
ICAgICAgICAgICAgICAgICBjYXNlIFVfTEJfTUFOREFUT1JZX0JSRUFLOgorICAgICAgICAgICAg
ICAgICAgICBjYXNlIFVfTEJfQ0FSUklBR0VfUkVUVVJOOgorICAgICAgICAgICAgICAgICAgICAg
ICAgZm91bmROZXdsaW5lID0gWUVTOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
ZWxsaXBzaXNTdHlsZSA9PSBXZWJFbGxpcHNpc1N0eWxlQ2hhcmFjdGVyV3JhcCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGNhbiBicmVhayBvbiBjaGFyYWN0ZXJzLiBXZSBz
aG91bGQgZG8gc29tZXRoaW5nIHNtYXJ0ZXIsIGxpa2Ugc3BsaXQgdGhlIGxlbmd0aCBvZiB0aGUg
ZW50aXJlIGxpbmUgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QsIGhvd2V2
ZXIsIGJyZWFrIGluIHRoZSBtaWRkbGUgb2YgYSBjaGFyYWN0ZXIuCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgTm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvciBpdChwb3MsIGxlbmd0
aFJlbWFpbmluZyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtQb3MgPSBib3Vu
ZGVkVGV4dEJyZWFrRm9sbG93aW5nKGl0LCAwLCBsZW5ndGhSZW1haW5pbmcpOworICAgICAgICAg
ICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgLy8gTlNMb2coQCJhcHBhcmVudGx5IHRoZSBicmVhayBp
cyAleCIsIHBvc1ticmVha1Bvc10pOworCisgICAgICAgICAgICAvLyBJQ1UgcmVwb3J0cyB0aGUg
YnJlYWsgdG8gdXMgYXMgdGhlIHBvc2l0aW9uIGp1c3QgYmVmb3JlIHRoZSBjaGFyYWN0ZXIgaXQg
Z2l2ZXMgdXMgKGJldHdlZW4gdHdvIGNoYXJhY3RlcnMpLgorICAgICAgICAgICAgLy8gbWVhc3Vy
ZSBldmVyeXRoaW5nIHVwIHRvIHRoZSBicmVhaworICAgICAgICAgICAgVGV4dFJ1biB0ZXh0UnVu
KHBvcywgYnJlYWtQb3MpOworICAgICAgICAgICAgaWYgKHNob3VsZERpc2FibGVXb3JkUm91bmRp
bmcoKSkKKyAgICAgICAgICAgICAgICB0ZXh0UnVuLmRpc2FibGVSb3VuZGluZ0hhY2tzKCk7Cisg
ICAgICAgICAgICBmbG9hdCB3b3JkV2lkdGggPSByZW5kZXJlci53aWR0aCh0ZXh0UnVuKTsKKwor
ICAgICAgICAgICAgLy8gTlNMb2coQCJtZWFzdXJpbmcgYXQgcG9zID0gJWQgbGVuID0gJWQsIHNp
emUgPSAlZiIsIHBvcyAtIHN0YXJ0T2ZMaW5lLCBicmVha1Bvcywgd29yZFdpZHRoKTsKKyAgICAg
ICAgICAgIGlmIChsaW5lV2lkdGggKyB3b3JkV2lkdGggPD0gcmVjdC5zaXplLndpZHRoKSB7ICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gYWR2YW5jZSB0byB0aGUgYnJlYWsgY2hh
cmFjdGVyLgorICAgICAgICAgICAgICAgIHBvcyArPSBicmVha1BvczsKKyAgICAgICAgICAgICAg
ICBsZW5ndGhSZW1haW5pbmcgPSBsZW5ndGggLSAocG9zIC0gYnVmZmVyKTsKKyAgICAgICAgICAg
ICAgICBsaW5lV2lkdGggKz0gd29yZFdpZHRoOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIC8vIFJlc2V0IHRyYWlsaW5nIHNwYWNlcyBpZiB0aGVyZSB3YXMgYSByZWFsIHdvcmQu
CisgICAgICAgICAgICAgICAgaWYgKGJyZWFrUG9zID4gMCkgeworICAgICAgICAgICAgICAgICAg
ICB0cmFpbGluZ1NwYWNlV2lkdGggPSAwLjBmOworICAgICAgICAgICAgICAgICAgICB0cmFpbGlu
Z1NwYWNlQ291bnQgPSAwOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJl
YWNoZWRFbmRPZkxpbmUgPSBmb3VuZE5ld2xpbmU7CisgICAgICAgICAgICAgICAgLy8gZG9uJ3Qg
YXNrIHRoZSByZW5kZXJlciB0byBkcmF3IHRoZSBsaW5lIGJyZWFrIGNoYXJhY3RlciBpdHNlbGYg
LSBza2lwIGFoZWFkLgorICAgICAgICAgICAgICAgIGlmIChmb3VuZE5ld2xpbmUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgcG9zKys7CisgICAgICAgICAgICAgICAgICAgIGxlbmd0aFJlbWFpbmlu
Zy0tOworICAgICAgICAgICAgICAgICAgICBza2lwcGVkV2hpdGVzcGFjZSsrOworICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAoZm91bmRTcGFjZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAo
bGVuZ3RoUmVtYWluaW5nID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWVhc3Vy
ZSBzcGFjZSBicmVhayB3aWR0aAorICAgICAgICAgICAgICAgICAgICAgICAgVGV4dFJ1biB0ZXh0
UnVuKHBvcywgMSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkRGlzYWJsZVdv
cmRSb3VuZGluZygpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRSdW4uZGlzYWJs
ZVJvdW5kaW5nSGFja3MoKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgc3BhY2VX
aWR0aCA9IHJlbmRlcmVyLndpZHRoKHRleHRSdW4pOworCisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAobGluZVdpZHRoICsgc3BhY2VXaWR0aCA8IHJlY3Quc2l6ZS53aWR0aCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIFNwYWNlIGZpdHMgb24gbGluZSwgYWRkIGl0Li4uCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZVdpZHRoICs9IHNwYWNlV2lkdGg7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdHJhaWxpbmdTcGFjZVdpZHRoICs9IHNwYWNlV2lkdGg7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhaWxpbmdTcGFjZUNvdW50Kys7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcG9zKys7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbGVuZ3RoUmVtYWluaW5nLS07CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNwYWNlIGRvZXMgbm90IGZpdCBvbiB0aGlz
IGxpbmUgLSBpdCBpcyBsZWdhbCB0aGVuIHRvIHNraXAgdGhyb3VnaCBhbGwgY29uc2VjdXRpdmUg
c3BhY2VzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhY2hlZEVuZE9mTGluZSA9IFlF
UzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7IC8vIExpbmUgYnJlYWtpbmcgY29k
ZSByZXBvcnRlZCB3ZSBmb3VuZCBhIHNwYWNlLCBzbyBhbHdheXMgc2tpcCBhdCBsZWFzdCBvbmUu
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aFJlbWFpbmluZy0tOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MrKzsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2tpcHBlZFdoaXRlc3BhY2UrKzsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHBvc1stMV0gPT0gJ1xuJykgeyAvLyBTdG9wIHRoZSBsb29wIGp1c3QgYWZ0
ZXIgYSBuZXdsaW5lIGNoYXJhY3RlciwgYXMgc3BhY2VzIGFmdGVyIHRoYXQgc2hvdWxkIHJlbmRl
cgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmROZXdsaW5lID0gWUVT
OyAvLyBSZWNvcmQgdGhlIGZhY3QgdGhhdCB3ZSBmb3VuZCBhIG5ldyBsaW5lCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKGxlbmd0aFJl
bWFpbmluZyA+IDAgJiYgdV9pc1doaXRlc3BhY2UocG9zWzBdKSk7IC8vIGNvbnRpbnVlIHRvIHNr
aXAgZW5kLW9mLWxpbmUgd2hpdGVzcGFjZQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICB9
IGVsc2UgaWYgKHdvcmRXaWR0aCA9PSAwICYmIGJyZWFrUG9zID09IDAgJiYgbGVuZ3RoUmVtYWlu
aW5nID4gMCkgeworICAgICAgICAgICAgICAgICAgICAvLyBTaG91bGQgbm90IGhhcHBlbiwgYnV0
IGJlIHNhZmUgYW5kIG1ha2Ugc3VyZSB3ZSBhbHdheXMgZWl0aGVyIGFkZCB3aWR0aCB0byB0aGUg
bGluZSBvciBhZHZhbmNlIGJ5IGEgY2hhcmFjdGVyLgorICAgICAgICAgICAgICAgICAgICAvLyBJ
ZiBub3QsIHNraXAgYWhlYWQuCisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQg
YWR2YW5jZSB1c2luZyBjaGFyYWN0ZXIgaXRlcmF0b3IgYW5kIGxvb2sgZm9yIHBhcmFncmFwaCBz
ZXBhcmF0b3IsIGJ1dCBkb24ndCBib3RoZXIgZm9yIG5vdworICAgICAgICAgICAgICAgICAgICAv
LyBzaW5jZSB0aGlzIGlzIGEgImNhbid0IGhhcHBlbiIgcGF0aC4KKyAgICAgICAgICAgICAgICAg
ICAgcG9zKys7CisgICAgICAgICAgICAgICAgICAgIGxlbmd0aFJlbWFpbmluZy0tOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmVhY2hl
ZEVuZE9mTGluZSA9IFlFUzsKKyAgICAgICAgICAgICAgICBmb3VuZE5ld2xpbmUgPSBOTzsgICAg
ICAvLyBXZSBhcmUgbm90IGNvbnN1bWluZyBhbnkgcGFyYWdyYXBoIGJyZWFrLCBzbyBkb24ndCBy
ZWFjdCB0byBpdCB5ZXQuCisgICAgICAgICAgICAgICAgaWYgKGxpbmVXaWR0aCA9PSAwICYmIGxl
bmd0aFJlbWFpbmluZyA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBub3Ro
aW5nIG9uIHRoZSBsaW5lIHNvIGZhciBidXQgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBsaW5lPwor
ICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIG11c3QgYmUgYSBsb25nIHdvcmQgdGhhdCBkb2Vz
bid0IGZpdCBpbnNpZGUgdGhlIGVudGlyZSB3aWR0aAorICAgICAgICAgICAgICAgICAgICAvLyBG
aXQgaXQgb24gYSBsaW5lIG9uZSBjaGFyYWN0ZXIgYXQgYSB0aW1lIGFuZCBicmVhayB3aGVuIG5v
IG1vcmUgY2hhcmFjdGVycyBmaXQKKyAgICAgICAgICAgICAgICAgICAgLy8gRm9yY2UgYXQgbGVh
c3Qgb25lIGNoYXJhY3RlciB0byBhdm9pZCB0aGUgZWRnZSBjYXNlIHdoZXJlIGEgc2luZ2xlIGds
eXBoIGRvZXNuJ3QgZml0IHdpdGhpbiB3aWR0aAorICAgICAgICAgICAgICAgICAgICBOb25TaGFy
ZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yIGl0KHBvcywgbGVuZ3RoUmVtYWluaW5nKTsKKyAgICAg
ICAgICAgICAgICAgICAgaW50IG9mZnNldCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGludCBu
ZXh0Q2hhckJyZWFrID0gYm91bmRlZFRleHRCcmVha0ZvbGxvd2luZyhpdCwgb2Zmc2V0LCBsZW5n
dGhSZW1haW5pbmcpOworICAgICAgICAgICAgICAgICAgICBUZXh0UnVuIHRleHRSdW4ocG9zLCBu
ZXh0Q2hhckJyZWFrKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZERpc2FibGVXb3Jk
Um91bmRpbmcoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHRSdW4uZGlzYWJsZVJvdW5k
aW5nSGFja3MoKTsKKyAgICAgICAgICAgICAgICAgICAgbGluZVdpZHRoICs9IHJlbmRlcmVyLndp
ZHRoKHRleHRSdW4pOworICAgICAgICAgICAgICAgICAgICBmbG9hdCBuZXdMaW5lV2lkdGggPSBs
aW5lV2lkdGg7CisgICAgICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGxpbmVXaWR0aCA9IG5ld0xpbmVXaWR0aDsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9m
ZnNldCA9IG5leHRDaGFyQnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGVuZ3Ro
UmVtYWluaW5nID4gb2Zmc2V0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dENo
YXJCcmVhayA9IGJvdW5kZWRUZXh0QnJlYWtGb2xsb3dpbmcoaXQsIG9mZnNldCwgbGVuZ3RoUmVt
YWluaW5nKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0UnVuIHRleHRSdW4ocG9z
ICsgb2Zmc2V0LCBuZXh0Q2hhckJyZWFrIC0gb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoc2hvdWxkRGlzYWJsZVdvcmRSb3VuZGluZygpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0ZXh0UnVuLmRpc2FibGVSb3VuZGluZ0hhY2tzKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbmV3TGluZVdpZHRoICs9IHJlbmRlcmVyLndpZHRoKHRleHRS
dW4pOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IHdo
aWxlIChuZXdMaW5lV2lkdGggPD0gcmVjdC5zaXplLndpZHRoICYmIGxlbmd0aFJlbWFpbmluZyA+
IG9mZnNldCk7CisgICAgICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBwb3MgYW5kIGxlbmd0aFJl
bWFpbmluZy4gRHVlIHRvIHRoZSBzZW1hbnRpY3Mgb2YgYm91bmRlZFRleHRCcmVha0ZvbGxvd2lu
ZywgdGhpcyB3aWxsCisgICAgICAgICAgICAgICAgICAgIC8vIG5ldmVyIGV4Y2VlZCB0aGUgYm91
bmRzLgorICAgICAgICAgICAgICAgICAgICBBU1NFUlQobGVuZ3RoUmVtYWluaW5nID49IG9mZnNl
dCk7CisgICAgICAgICAgICAgICAgICAgIHBvcyArPSBvZmZzZXQ7CisgICAgICAgICAgICAgICAg
ICAgIGxlbmd0aFJlbWFpbmluZyAtPSBvZmZzZXQ7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobGFzdExpbmVFbGxpcHNl
ZCB8fCBsYXN0TGluZUNsaXBwZWQpIHsKKyAgICAgICAgICAgIGludCBpOworICAgICAgICAgICAg
Zm9yIChpID0gMDsgaSA8IGxlbmd0aFJlbWFpbmluZyAmJiBwb3NbaV0gIT0gJ1xuJzsgaSsrKSB7
CisgICAgICAgICAgICAgICAgLyogRW1wdHkgYm9keSAtIHdlIGp1c3Qgd2FudCB0byBrbm93IGlm
IHRoZXJlJ3MgYSBuZXdsaW5lIGJldHdlZW4gaGVyZSBhbmQgdGhlIGVuZCBvZiB0aGUgc3RyaW5n
ICovCisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGJvb2wgZHJvcHBp
bmdMaW5lcyA9IChpICE9IGxlbmd0aFJlbWFpbmluZyk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIFN0cmluZyBsYXN0TGluZSA9IFN0cmluZyhwb3MsIGkpOworICAgICAgICAgICAgaWYgKGxh
c3RMaW5lRWxsaXBzZWQgJiYgaSA8IGxlbmd0aFJlbWFpbmluZyAmJiAhKHBvc1tpXSA9PSAnXG4n
ICYmIGkgPT0gbGVuZ3RoUmVtYWluaW5nIC0gMSkpIHsKKyAgICAgICAgICAgICAgICAvLyBsaW5l
YnJlYWsgb24gbGFzdCBsaW5lIHdpdGggZXh0cmEgY29udGVudCB0aGF0IHdvbid0IGJlIHJlbmRl
cmVkIC0gaW5zZXJ0IGFuIGVsbGlwc2UgKDUxMzMwMDUpOworICAgICAgICAgICAgICAgIC8vIHRo
ZSBleGNlcHRpb24gaXMgaWYgd2UncmUgYXQgdGhlIGxhc3QgY2hhcmFjdGVyIGFuZCBpdHMgYSBu
ZXdsaW5lIC0gbmV4dCBsaW5lIHdvbid0IHJlbmRlci9zaXplIHNvIGRvbid0IGVsbGlwc2lzZQor
ICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgT0sgZm9yIGJpZGkgc2luY2UgY2hhcmFjdGVycyBh
ZnRlciBhIG5ld2xpbmUgd2lsbCBub3QgaW5mbHVlbmNlIGRpcmVjdGlvbiBwcmVjZWRpbmcgaXQu
CisgICAgICAgICAgICAgICAgY29uc3QgVUNoYXIgZWxsaXBzaXNDaGFyYWN0ZXIgPSAweDIwMjY7
CisgICAgICAgICAgICAgICAgbGFzdExpbmUuYXBwZW5kKGVsbGlwc2lzQ2hhcmFjdGVyKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIFRoZSBsYXN0IGxpbmUgaXMgZWl0aGVyIGV2ZXJ5
dGhpbmcgdGhhdCdzIGxlZnQgb3IgZXZlcnl0aGluZyB1bnRpbCB0aGUgbmV4dCBuZXdsaW5lIGNo
YXJhY3RlcgorICAgICAgICAgICAgaWYgKCFtZWFzdXJlT25seSkgeworICAgICAgICAgICAgICAg
IGJvb2wgaW5zZXJ0RWxsaXBzaXMgPSAodHJ1bmNhdGlvblJlY3QgPT0gTlVMTCk7CisgICAgICAg
ICAgICAgICAgYm9vbCBmb3JjZVRydW5jYXRpb24gPSAoZHJvcHBpbmdMaW5lcyAmJiB0cnVuY2F0
aW9uUmVjdCk7CisgICAgICAgICAgICAgICAgZmxvYXQgY3VzdG9tVHJ1bmNhdGlvbkVsZW1lbnRX
aWR0aCA9IHRydW5jYXRpb25SZWN0ID8gdHJ1bmNhdGlvblJlY3QtPnNpemUud2lkdGggOiAwOyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICB0ZXh0UG9p
bnQgPSBjdXJzb3I7CisgICAgICAgICAgICAgICAgU3RyaW5nIGVsbGlwc2lzUmVzdWx0OworICAg
ICAgICAgICAgICAgIGZsb2F0IGxhc3RMaW5lV2lkdGg7CisgICAgICAgICAgICAgICAgaWYgKGFs
aWdubWVudCA9PSBXZWJUZXh0QWxpZ25tZW50Q2VudGVyKSB7CisgICAgICAgICAgICAgICAgICAg
IGVsbGlwc2lzUmVzdWx0ID0gYXBwbHlFbGxpcHNpc1N0eWxlKGxhc3RMaW5lLCBlbGxpcHNpc1N0
eWxlLCByZWN0LnNpemUud2lkdGgsIHJlbmRlcmVyLCBzaG91bGREaXNhYmxlV29yZFJvdW5kaW5n
KCkgPyBTdHJpbmdUcnVuY2F0b3I6OkRpc2FibGVSb3VuZGluZ0hhY2tzIDogU3RyaW5nVHJ1bmNh
dG9yOjpFbmFibGVSb3VuZGluZ0hhY2tzLCAmbGFzdExpbmVXaWR0aCwgaW5zZXJ0RWxsaXBzaXMs
IGN1c3RvbVRydW5jYXRpb25FbGVtZW50V2lkdGgpOworICAgICAgICAgICAgICAgICAgICBpZiAo
bGFzdExpbmVXaWR0aCAhPSAwKSAvLyBzcGVjaWFsIGNhc2UgZm9yIHNpbmdsZSBnbHlwaHMgd2lk
ZXIgIHRoYW4gdGhlIHJlY3QgdG8gd2hpY2ggd2UgYXJlIHJlbmRlcmluZy4uLiBhcHBseUVsbGlw
c2lzU3R5bGUgY2FuIHJldHVybiAwIGluIHRoaXMgY2FzZS4KKyAgICAgICAgICAgICAgICAgICAg
ICAgIHRleHRQb2ludC54ICs9IChyZWN0LnNpemUud2lkdGggLSBsYXN0TGluZVdpZHRoKSAvIDIu
MGY7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhbGlnbm1lbnQgPT0gV2ViVGV4dEFsaWdu
bWVudFJpZ2h0KSB7CisgICAgICAgICAgICAgICAgICAgIGVsbGlwc2lzUmVzdWx0ID0gYXBwbHlF
bGxpcHNpc1N0eWxlKGxhc3RMaW5lLCBlbGxpcHNpc1N0eWxlLCByZWN0LnNpemUud2lkdGgsIHJl
bmRlcmVyLCBzaG91bGREaXNhYmxlV29yZFJvdW5kaW5nKCkgPyBTdHJpbmdUcnVuY2F0b3I6OkRp
c2FibGVSb3VuZGluZ0hhY2tzIDogU3RyaW5nVHJ1bmNhdG9yOjpFbmFibGVSb3VuZGluZ0hhY2tz
LCAmbGFzdExpbmVXaWR0aCwgaW5zZXJ0RWxsaXBzaXMsIGN1c3RvbVRydW5jYXRpb25FbGVtZW50
V2lkdGgpOworICAgICAgICAgICAgICAgICAgICBpZiAobGFzdExpbmVXaWR0aCAhPSAwKQorICAg
ICAgICAgICAgICAgICAgICAgICAgdGV4dFBvaW50LnggKz0gcmVjdC5zaXplLndpZHRoIC0gbGFz
dExpbmVXaWR0aDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICBlbGxpcHNpc1Jlc3VsdCA9IGFwcGx5RWxsaXBzaXNTdHlsZShsYXN0TGluZSwgZWxsaXBzaXNT
dHlsZSwgcmVjdC5zaXplLndpZHRoLCByZW5kZXJlciwgc2hvdWxkRGlzYWJsZVdvcmRSb3VuZGlu
ZygpID8gU3RyaW5nVHJ1bmNhdG9yOjpEaXNhYmxlUm91bmRpbmdIYWNrcyA6IFN0cmluZ1RydW5j
YXRvcjo6RW5hYmxlUm91bmRpbmdIYWNrcywgJmxhc3RMaW5lV2lkdGgsIGluc2VydEVsbGlwc2lz
LCBjdXN0b21UcnVuY2F0aW9uRWxlbWVudFdpZHRoLCBmb3JjZVRydW5jYXRpb24pOworICAgICAg
ICAgICAgICAgICAgICBpZiAodHJ1bmNhdGlvblJlY3QgJiYgKGVsbGlwc2lzUmVzdWx0ICE9IGxh
c3RMaW5lIHx8IGRyb3BwaW5nTGluZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAmJiBsYXN0
TGluZVdpZHRoICYmIGJhc2UgPT0gV1RGOjpVbmljb2RlOjpSaWdodFRvTGVmdCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHRleHRQb2ludC54ICs9IHRydW5jYXRpb25SZWN0LT5zaXplLndpZHRo
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBDR0NvbnRleHRSZWYgY2dDb250
ZXh0ID0gV0tHZXRDdXJyZW50R3JhcGhpY3NDb250ZXh0KCk7CisgICAgICAgICAgICAgICAgR3Jh
cGhpY3NDb250ZXh0IGNvbnRleHQoc3RhdGljX2Nhc3Q8UGxhdGZvcm1HcmFwaGljc0NvbnRleHQq
PihjZ0NvbnRleHQpLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgY29udGV4dC5zZXRFbW9qaURy
YXdpbmdFbmFibGVkKGluY2x1ZGVFbW9qaSk7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IEZv
ciBwcm9wZXIgYmlkaSByZW5kZXJpbmcsIHdlIG5lZWQgdG8gcGFzcyB0aGUgd2hvbGUgc3RyaW5n
LCByYXRoZXIgdGhhbiB0aGUgdHJ1bmNhdGVkIHN0cmluZy4KKyAgICAgICAgICAgICAgICAvLyBP
dGhlcndpc2UsIHdlYWsvbmV1dHJhbCBjaGFyYWN0ZXJzIG9uIGVpdGhlciBzaWRlIG9mIHRoZSBl
bGxpcHNpcyBtYXkgcGljayB1cCB0aGUgd3JvbmcgZGlyZWN0aW9uCisgICAgICAgICAgICAgICAg
Ly8gaWYgdGhlcmUgYXJlIHN0cm9uZyBjaGFyYWN0ZXJzIGVsbGlkZWQuCisgICAgICAgICAgICAg
ICAgbGluZVdpZHRoID0gZHJhd0F0UG9pbnQoZWxsaXBzaXNSZXN1bHQuY2hhcmFjdGVycygpLCBl
bGxpcHNpc1Jlc3VsdC5sZW5ndGgoKSwgdGV4dFBvaW50LCByZW5kZXJlciwgJmNvbnRleHQsIGRy
YXdVbmRlcmxpbmUsIHBhcmFncmFwaE5lZWRzQmlkaSA/ICZzdGF0dXMgOiAwKTsKKyAgICAgICAg
ICAgICAgICBpZiAoIXJlbmRlcmVkU3RyaW5nLmlzTnVsbCgpKQorICAgICAgICAgICAgICAgICAg
ICByZW5kZXJlZFN0cmluZy5hcHBlbmQoZWxsaXBzaXNSZXN1bHQuY2hhcmFjdGVycygpLCBlbGxp
cHNpc1Jlc3VsdC5sZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
aWYgKHRydW5jYXRpb25SZWN0KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChlbGxpcHNpc1Jl
c3VsdCA9PSBsYXN0TGluZSAmJiAhZHJvcHBpbmdMaW5lcykgeworICAgICAgICAgICAgICAgICAg
ICAgICAgKnRydW5jYXRpb25SZWN0ID0gQ0dSZWN0TnVsbDsKKyAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRydW5jYXRpb25SZWN0LT5vcmlnaW4g
PSB0ZXh0UG9pbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICB0cnVuY2F0aW9uUmVjdC0+b3Jp
Z2luLnggKz0gKGJhc2UgPT0gV1RGOjpVbmljb2RlOjpSaWdodFRvTGVmdCkgPyAoLXRydW5jYXRp
b25SZWN0LT5zaXplLndpZHRoKSA6IGxpbmVXaWR0aDsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHRydW5jYXRpb25SZWN0LT5vcmlnaW4ueSAtPSBhc2NlbnQ7CisgICAgICAgICAgICAgICAgICAg
ICAgICB0cnVuY2F0aW9uUmVjdC0+c2l6ZS5oZWlnaHQgPSBhc2NlbnQgLSBHU0ZvbnRHZXREZXNj
ZW50KGZvbnQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBhcHBseUVsbGlwc2lzU3R5bGUobGFz
dExpbmUsIGVsbGlwc2lzU3R5bGUsIHJlY3Quc2l6ZS53aWR0aCwgcmVuZGVyZXIsIHNob3VsZERp
c2FibGVXb3JkUm91bmRpbmcoKSA/IFN0cmluZ1RydW5jYXRvcjo6RGlzYWJsZVJvdW5kaW5nSGFj
a3MgOiBTdHJpbmdUcnVuY2F0b3I6OkVuYWJsZVJvdW5kaW5nSGFja3MsICZsaW5lV2lkdGgpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgIHsKKyAgICAgICAgICAgIGlmICghbWVhc3Vy
ZU9ubHkpIHsKKyAgICAgICAgICAgICAgICB0ZXh0UG9pbnQgPSBjdXJzb3I7CisgICAgICAgICAg
ICAgICAgaWYgKGFsaWdubWVudCA9PSBXZWJUZXh0QWxpZ25tZW50Q2VudGVyICYmIGxpbmVXaWR0
aCA8PSByZWN0LnNpemUud2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgdGV4dFBvaW50Lngg
Kz0gKHJlY3Quc2l6ZS53aWR0aCAtIChsaW5lV2lkdGggLSB0cmFpbGluZ1NwYWNlV2lkdGgpKSAv
IDIuMGY7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhbGlnbm1lbnQgPT0gV2ViVGV4dEFs
aWdubWVudFJpZ2h0ICYmIGxpbmVXaWR0aCA8PSByZWN0LnNpemUud2lkdGgpIHsKKyAgICAgICAg
ICAgICAgICAgICAgdGV4dFBvaW50LnggKz0gcmVjdC5zaXplLndpZHRoIC0gKGxpbmVXaWR0aCAt
IHRyYWlsaW5nU3BhY2VXaWR0aCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBXS0dldEN1cnJlbnRHcmFwaGljc0NvbnRleHQoKTsK
KyAgICAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dChzdGF0aWNfY2FzdDxQbGF0
Zm9ybUdyYXBoaWNzQ29udGV4dCo+KGNnQ29udGV4dCksIGZhbHNlKTsKKyAgICAgICAgICAgICAg
ICBjb250ZXh0LnNldEVtb2ppRHJhd2luZ0VuYWJsZWQoaW5jbHVkZUVtb2ppKTsKKyAgICAgICAg
ICAgICAgICBpZiAocGFyYWdyYXBoTmVlZHNCaWRpKSB7CisgICAgICAgICAgICAgICAgICAgIGRy
YXdBdFBvaW50KHN0YXJ0T2ZMaW5lLCBwb3MgLSBzdGFydE9mTGluZSArIGxlbmd0aFJlbWFpbmlu
ZywgdGV4dFBvaW50LCByZW5kZXJlciwgJmNvbnRleHQsIGRyYXdVbmRlcmxpbmUsICZzdGF0dXMs
IHBvcyAtIHN0YXJ0T2ZMaW5lIC0gdHJhaWxpbmdTcGFjZUNvdW50IC0gc2tpcHBlZFdoaXRlc3Bh
Y2UpOworICAgICAgICAgICAgICAgICAgICBpZiAoIXJlbmRlcmVkU3RyaW5nLmlzTnVsbCgpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyZWRTdHJpbmcuYXBwZW5kKHN0YXJ0T2ZMaW5l
LCBwb3MgLSBzdGFydE9mTGluZSArIGxlbmd0aFJlbWFpbmluZyk7CisgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZHJhd0F0UG9pbnQoc3RhcnRPZkxpbmUsIHBv
cyAtIHN0YXJ0T2ZMaW5lIC0gdHJhaWxpbmdTcGFjZUNvdW50IC0gc2tpcHBlZFdoaXRlc3BhY2Us
IHRleHRQb2ludCwgcmVuZGVyZXIsICZjb250ZXh0LCBkcmF3VW5kZXJsaW5lKTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCFyZW5kZXJlZFN0cmluZy5pc051bGwoKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJlbmRlcmVkU3RyaW5nLmFwcGVuZChzdGFydE9mTGluZSwgcG9zIC0gc3RhcnRP
ZkxpbmUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0
YXJ0T2ZMaW5lID0gcG9zOworICAgICAgICB9CisgICAgICAgIGlmIChsYXN0TGluZSkKKyAgICAg
ICAgICAgIGZpbmlzaGVkTGFzdExpbmUgPSBZRVM7CisgICAgICAgIGVsc2UgaWYgKGZvdW5kTmV3
bGluZSkgeworICAgICAgICAgICAgLy8gUmVkZXRlcm1pbmUgd2hldGhlciB0aGUgc3VjY2VlZGlu
ZyBwYXJhZ3JhcGggbmVlZHMgYmlkaSBsYXlvdXQsIGFuZCBpZiBzbywgZGV0ZXJtaW5lIHRoZSBi
YXNlIGRpcmVjdGlvbgorICAgICAgICAgICAgcGFyYWdyYXBoTmVlZHNCaWRpID0gbmVlZHNCaWRp
TGF5b3V0KHN0YXJ0T2ZMaW5lLCBsZW5ndGhSZW1haW5pbmcsIGJhc2UsIHRydWUpOworICAgICAg
ICAgICAgaWYgKHBhcmFncmFwaE5lZWRzQmlkaSkKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBC
aWRpU3RhdHVzKGJhc2UsIGJhc2UsIGJhc2UsIEJpZGlDb250ZXh0OjpjcmVhdGUoKGJhc2UgPT0g
V1RGOjpVbmljb2RlOjpMZWZ0VG9SaWdodCkgPyAwIDogMSwgYmFzZSwgZmFsc2UpKTsKKyAgICAg
ICAgfQorICAgICAgICBtYXhMaW5lV2lkdGggPSBtYXgobWF4TGluZVdpZHRoLCBsaW5lV2lkdGgp
OworICAgICAgICBjdXJzb3IueSArPSBsaW5lU3BhY2luZzsKKyAgICB9CisgICAgCisgICAgQ0dT
aXplIGRyYXduU2l6ZTsKKyAgICBkcmF3blNpemUud2lkdGggPSBjZWlsZihtYXhMaW5lV2lkdGgp
OworICAgIGlmICghaGFzQ3VzdG9tTGluZXNwYWNpbmcpIHsKKyAgICAgICAgaWYgKG1lYXN1cmVP
bmx5KQorICAgICAgICAgICAgZHJhd25TaXplLmhlaWdodCA9IGNlaWxmKGN1cnNvci55IC0gcmVj
dC5vcmlnaW4ueSAtIGFzY2VudCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRyYXduU2l6
ZS5oZWlnaHQgPSBtaW48Q0dGbG9hdD4oY2VpbGYoY3Vyc29yLnkgLSByZWN0Lm9yaWdpbi55IC0g
YXNjZW50KSwgcmVjdC5zaXplLmhlaWdodCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gZm9y
IGN1c3RvbSBsaW5lc3BhY2luZywgdGhlIGZvcm11bGEgYWJvdmUgZG9lcyBub3QgaG9sZCB0cnVl
LgorICAgICAgICBmbG9hdCBkZXNjZW50ID0gR1NGb250R2V0RGVzY2VudChmb250KTsKKyAgICAg
ICAgaWYgKG1lYXN1cmVPbmx5KQorICAgICAgICAgICAgZHJhd25TaXplLmhlaWdodCA9IGNlaWxm
KGN1cnNvci55IC0gcmVjdC5vcmlnaW4ueSAtIGxpbmVTcGFjaW5nIC0gZGVzY2VudCk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIGRyYXduU2l6ZS5oZWlnaHQgPSBtaW48Q0dGbG9hdD4oY2Vp
bGYoY3Vyc29yLnkgLSByZWN0Lm9yaWdpbi55IC0gbGluZVNwYWNpbmcgLSBkZXNjZW50KSwgcmVj
dC5zaXplLmhlaWdodCk7CisgICAgfQorICAgIAorICAgIGlmIChyZW5kZXJlZFN0cmluZ091dCkK
KyAgICAgICAgKnJlbmRlcmVkU3RyaW5nT3V0ID0gKE5TU3RyaW5nICopcmVuZGVyZWRTdHJpbmc7
CisKKyAgICByZXR1cm4gZHJhd25TaXplOyAgICAgICAgCit9CisKKy0gKENHU2l6ZSlfX3dlYl9k
cmF3SW5SZWN0OihDR1JlY3QpcmVjdAorICAgICAgICAgICAgICB3aXRoRm9udDooR1NGb250UmVm
KWZvbnQKKyAgICAgICAgICAgICAgZWxsaXBzaXM6KFdlYkVsbGlwc2lzU3R5bGUpZWxsaXBzaXNT
dHlsZQorICAgICAgICAgICAgIGFsaWdubWVudDooV2ViVGV4dEFsaWdubWVudClhbGlnbm1lbnQK
KyAgICAgICAgIGxldHRlclNwYWNpbmc6KENHRmxvYXQpbGV0dGVyU3BhY2luZworICAgICAgICAg
ICBsaW5lU3BhY2luZzooQ0dGbG9hdClsaW5lU3BhY2luZworICAgICAgICAgIGluY2x1ZGVFbW9q
aTooQk9PTClpbmNsdWRlRW1vamkKKyAgICAgICAgdHJ1bmNhdGlvblJlY3Q6KENHUmVjdCAqKXRy
dW5jYXRpb25SZWN0CisgICAgICAgICAgIG1lYXN1cmVPbmx5OihCT09MKW1lYXN1cmVPbmx5Cisg
ICAgIHJlbmRlcmVkU3RyaW5nT3V0OihOU1N0cmluZyAqKilyZW5kZXJlZFN0cmluZ091dAorewor
ICAgIHJldHVybiBbc2VsZiBfX3dlYl9kcmF3SW5SZWN0OnJlY3QKKyAgICAgICAgICAgICAgICAg
ICAgICAgICB3aXRoRm9udDpmb250CisgICAgICAgICAgICAgICAgICAgICAgICAgZWxsaXBzaXM6
ZWxsaXBzaXNTdHlsZQorICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50OmFsaWdubWVu
dAorICAgICAgICAgICAgICAgICAgICBsZXR0ZXJTcGFjaW5nOmxldHRlclNwYWNpbmcKKyAgICAg
ICAgICAgICAgICAgICAgICBsaW5lU3BhY2luZzpsaW5lU3BhY2luZyBpbmNsdWRlRW1vamk6aW5j
bHVkZUVtb2ppCisgICAgICAgICAgICAgICAgICAgdHJ1bmNhdGlvblJlY3Q6dHJ1bmNhdGlvblJl
Y3QKKyAgICAgICAgICAgICAgICAgICAgICBtZWFzdXJlT25seTptZWFzdXJlT25seQorICAgICAg
ICAgICAgICAgIHJlbmRlcmVkU3RyaW5nT3V0OnJlbmRlcmVkU3RyaW5nT3V0CisgICAgICAgICAg
ICAgICAgICAgIGRyYXdVbmRlcmxpbmU6Tk9dOworfQorCistIChDR1NpemUpX193ZWJfZHJhd0lu
UmVjdDooQ0dSZWN0KXJlY3QKKyAgICAgICAgICAgICAgICAgIHdpdGhGb250OihHU0ZvbnRSZWYp
Zm9udAorICAgICAgICAgICAgICAgICAgZWxsaXBzaXM6KFdlYkVsbGlwc2lzU3R5bGUpZWxsaXBz
aXNTdHlsZQorICAgICAgICAgICAgICAgICBhbGlnbm1lbnQ6KFdlYlRleHRBbGlnbm1lbnQpYWxp
Z25tZW50CisgICAgICAgICAgICAgbGV0dGVyU3BhY2luZzooQ0dGbG9hdClsZXR0ZXJTcGFjaW5n
CisgICAgICAgICAgICAgICBsaW5lU3BhY2luZzooQ0dGbG9hdClsaW5lU3BhY2luZworICAgICAg
ICAgICAgICBpbmNsdWRlRW1vamk6KEJPT0wpaW5jbHVkZUVtb2ppCisgICAgICAgICAgICB0cnVu
Y2F0aW9uUmVjdDooQ0dSZWN0ICopdHJ1bmNhdGlvblJlY3QKKyAgICAgICAgICAgICAgIG1lYXN1
cmVPbmx5OihCT09MKW1lYXN1cmVPbmx5Cit7CisgICAgcmV0dXJuIFtzZWxmIF9fd2ViX2RyYXdJ
blJlY3Q6cmVjdAorICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhGb250OmZvbnQKKyAgICAg
ICAgICAgICAgICAgICAgICAgICBlbGxpcHNpczplbGxpcHNpc1N0eWxlCisgICAgICAgICAgICAg
ICAgICAgICAgICBhbGlnbm1lbnQ6YWxpZ25tZW50CisgICAgICAgICAgICAgICAgICAgIGxldHRl
clNwYWNpbmc6bGV0dGVyU3BhY2luZworICAgICAgICAgICAgICAgICAgICAgIGxpbmVTcGFjaW5n
OmxpbmVTcGFjaW5nIGluY2x1ZGVFbW9qaTppbmNsdWRlRW1vamkKKyAgICAgICAgICAgICAgICAg
ICB0cnVuY2F0aW9uUmVjdDp0cnVuY2F0aW9uUmVjdAorICAgICAgICAgICAgICAgICAgICAgIG1l
YXN1cmVPbmx5Om1lYXN1cmVPbmx5CisgICAgICAgICAgICAgICAgcmVuZGVyZWRTdHJpbmdPdXQ6
bmlsXTsKK30KKworCisjcHJhZ21hIG1hcmsgUHVibGljIG1ldGhvZHMKKworLSAoQ0dTaXplKV93
ZWJfZHJhd0F0UG9pbnQ6KENHUG9pbnQpcG9pbnQgd2l0aEZvbnQ6KEdTRm9udFJlZilmb250Cit7
CisgICAgcmV0dXJuIFtzZWxmIF93ZWJfZHJhd0F0UG9pbnQ6cG9pbnQgZm9yV2lkdGg6RkxUX01B
WCB3aXRoRm9udDpmb250IGVsbGlwc2lzOldlYkVsbGlwc2lzU3R5bGVOb25lIGxldHRlclNwYWNp
bmc6MC4wZiBpbmNsdWRlRW1vamk6WUVTXTsKK30KKworLSAoQ0dTaXplKV93ZWJfc2l6ZVdpdGhG
b250OihHU0ZvbnRSZWYpZm9udAoreworICAgIHJldHVybiBbc2VsZiBfd2ViX3NpemVXaXRoRm9u
dDpmb250IGZvcldpZHRoOkZMVF9NQVggZWxsaXBzaXM6V2ViRWxsaXBzaXNTdHlsZU5vbmUgbGV0
dGVyU3BhY2luZzowLjBmXTsKK30KKworLSAoQ0dTaXplKV93ZWJfc2l6ZVdpdGhGb250OihHU0Zv
bnRSZWYpZm9udCBmb3JXaWR0aDooZmxvYXQpd2lkdGggZWxsaXBzaXM6KFdlYkVsbGlwc2lzU3R5
bGUpZWxsaXBzaXNTdHlsZQoreworICAgIHJldHVybiBbc2VsZiBfd2ViX3NpemVXaXRoRm9udDpm
b250IGZvcldpZHRoOndpZHRoIGVsbGlwc2lzOmVsbGlwc2lzU3R5bGUgbGV0dGVyU3BhY2luZzow
LjBmXTsKK30KKworLSAoQ0dTaXplKV93ZWJfc2l6ZVdpdGhGb250OihHU0ZvbnRSZWYpZm9udCBm
b3JXaWR0aDooZmxvYXQpd2lkdGggZWxsaXBzaXM6KFdlYkVsbGlwc2lzU3R5bGUpZWxsaXBzaXNT
dHlsZSBsZXR0ZXJTcGFjaW5nOihmbG9hdClsZXR0ZXJTcGFjaW5nCit7CisgICAgcmV0dXJuIFtz
ZWxmIF93ZWJfc2l6ZVdpdGhGb250OmZvbnQgZm9yV2lkdGg6d2lkdGggZWxsaXBzaXM6ZWxsaXBz
aXNTdHlsZSBsZXR0ZXJTcGFjaW5nOmxldHRlclNwYWNpbmcgcmVzdWx0UmFuZ2U6TlVMTF07Cit9
CisKKy0gKENHU2l6ZSlfd2ViX3NpemVXaXRoRm9udDooR1NGb250UmVmKWZvbnQgZm9yV2lkdGg6
KGZsb2F0KXdpZHRoIGVsbGlwc2lzOihXZWJFbGxpcHNpc1N0eWxlKWVsbGlwc2lzU3R5bGUgbGV0
dGVyU3BhY2luZzooZmxvYXQpbGV0dGVyU3BhY2luZyByZXN1bHRSYW5nZTooTlNSYW5nZSAqKXJl
c3VsdFJhbmdlT3V0Cit7CisgICAgaWYgKHdpZHRoIDwgMCkgeworI2lmbmRlZiBOREVCVUcKKyAg
ICAgICAgZnByaW50ZihzdGRlcnIsICIlczogd2lkdGggbXVzdCBiZSBncmVhdGVyIHRoYW4gemVy
by5cbiIsIF9fRlVOQ1RJT05fXyk7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIENHU2l6ZVplcm87
CisgICAgfQorICAgIAorICAgIGlmIChmb250ID09IE5VTEwpIHsKKyNpZm5kZWYgTkRFQlVHCisg
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGZvbnQgbXVzdCBiZSBub24tbnVsbC5cbiIsIF9f
RlVOQ1RJT05fXyk7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIENHU2l6ZVplcm87CisgICAgfQor
ICAgIAorICAgIGlmIChbc2VsZiBpc0VxdWFsVG9TdHJpbmc6QCIiXSkgeworICAgICAgICByZXR1
cm4gQ0dTaXplWmVybzsKKyAgICB9CisKKyAgICBmbG9hdCBzdHJpbmdXaWR0aDsKKyAgICBTdHJp
bmcgcyA9IFN0cmluZyhzZWxmKTsKKyAgICAKKyAgICBGb250Q2FjaGVQdXJnZVByZXZlbnRlciBm
b250Q2FjaGVQdXJnZVByZXZlbnRlcjsKKworICAgIEZvbnQgcmVuZGVyZXIgPSByZW5kZXJlckZv
ckZvbnQoZm9udCk7CisgICAgaWYgKGxldHRlclNwYWNpbmcgIT0gMC4wKQorICAgICAgICByZW5k
ZXJlci5zZXRMZXR0ZXJTcGFjaW5nKGxldHRlclNwYWNpbmcpOworICAgIAorICAgIGlmIChyZXN1
bHRSYW5nZU91dCkgeworICAgICAgICAvLyBEb24ndCBpbnNlcnQgdGhlIGVsbGlwc2lzLgorICAg
ICAgICBTdHJpbmcgdHJ1bmNhdGVkID0gYXBwbHlFbGxpcHNpc1N0eWxlKHMsIGVsbGlwc2lzU3R5
bGUsIHdpZHRoLCByZW5kZXJlciwgc2hvdWxkRGlzYWJsZVdvcmRSb3VuZGluZygpID8gU3RyaW5n
VHJ1bmNhdG9yOjpEaXNhYmxlUm91bmRpbmdIYWNrcyA6IFN0cmluZ1RydW5jYXRvcjo6RW5hYmxl
Um91bmRpbmdIYWNrcywgJnN0cmluZ1dpZHRoLCBmYWxzZSk7CisgICAgICAgIE5TUmFuZ2UgcmVz
dWx0UmFuZ2UgPSBOU01ha2VSYW5nZSgwLCB0cnVuY2F0ZWQubGVuZ3RoKCkpOworICAgICAgICAq
cmVzdWx0UmFuZ2VPdXQgPSByZXN1bHRSYW5nZTsKKyAgICB9IGVsc2UgeworICAgICAgICBhcHBs
eUVsbGlwc2lzU3R5bGUocywgZWxsaXBzaXNTdHlsZSwgd2lkdGgsIHJlbmRlcmVyLCBzaG91bGRE
aXNhYmxlV29yZFJvdW5kaW5nKCkgPyBTdHJpbmdUcnVuY2F0b3I6OkRpc2FibGVSb3VuZGluZ0hh
Y2tzIDogU3RyaW5nVHJ1bmNhdG9yOjpFbmFibGVSb3VuZGluZ0hhY2tzLCAmc3RyaW5nV2lkdGgp
OworICAgIH0KKyAgICAKKyAgICAvLyBFbnN1cmUgaW50ZWdyYWwgc2l6ZXMuIENlaWwgdG8gYXZv
aWQgcG9zc2libGUgY2xpcHBpbmcuCisgICAgQ0dTaXplIHNpemUgPSBDR1NpemVNYWtlIChzdHJp
bmdXaWR0aCwgR1NGb250R2V0TGluZVNwYWNpbmcoZm9udCkpOworICAgIHNpemUud2lkdGggPSBj
ZWlsZihzaXplLndpZHRoKTsKKyAgICBzaXplLmhlaWdodCA9IGNlaWxmKHNpemUuaGVpZ2h0KTsK
KyAgICByZXR1cm4gc2l6ZTsKK30KKworLSAoQ0dTaXplKV93ZWJfZHJhd0F0UG9pbnQ6KENHUG9p
bnQpcG9pbnQgZm9yV2lkdGg6KGZsb2F0KXdpZHRoIHdpdGhGb250OihHU0ZvbnRSZWYpZm9udCBl
bGxpcHNpczooV2ViRWxsaXBzaXNTdHlsZSllbGxpcHNpc1N0eWxlCit7CisgICAgcmV0dXJuIFtz
ZWxmIF93ZWJfZHJhd0F0UG9pbnQ6cG9pbnQgZm9yV2lkdGg6d2lkdGggd2l0aEZvbnQ6Zm9udCBl
bGxpcHNpczplbGxpcHNpc1N0eWxlIGxldHRlclNwYWNpbmc6MC4wZiBpbmNsdWRlRW1vamk6WUVT
XTsKK30KKworLSAoQ0dTaXplKV93ZWJfZHJhd0F0UG9pbnQ6KENHUG9pbnQpcG9pbnQgZm9yV2lk
dGg6KGZsb2F0KXdpZHRoIHdpdGhGb250OihHU0ZvbnRSZWYpZm9udCBlbGxpcHNpczooV2ViRWxs
aXBzaXNTdHlsZSllbGxpcHNpc1N0eWxlIGxldHRlclNwYWNpbmc6KGZsb2F0KWxldHRlclNwYWNp
bmcKK3sKKyAgICByZXR1cm4gW3NlbGYgX3dlYl9kcmF3QXRQb2ludDooQ0dQb2ludClwb2ludCBm
b3JXaWR0aDp3aWR0aCB3aXRoRm9udDpmb250IGVsbGlwc2lzOmVsbGlwc2lzU3R5bGUgbGV0dGVy
U3BhY2luZzpsZXR0ZXJTcGFjaW5nIGluY2x1ZGVFbW9qaTpZRVNdOworfQorCistIChDR1NpemUp
X3dlYl9kcmF3QXRQb2ludDooQ0dQb2ludClwb2ludCBmb3JXaWR0aDooZmxvYXQpd2lkdGggd2l0
aEZvbnQ6KEdTRm9udFJlZilmb250IGVsbGlwc2lzOihXZWJFbGxpcHNpc1N0eWxlKWVsbGlwc2lz
U3R5bGUgbGV0dGVyU3BhY2luZzooZmxvYXQpbGV0dGVyU3BhY2luZyBpbmNsdWRlRW1vamk6KEJP
T0wpaW5jbHVkZUVtb2ppCit7CisgICAgcmV0dXJuIFtzZWxmIF9fd2ViX2RyYXdBdFBvaW50OnBv
aW50IGZvcldpZHRoOndpZHRoIHdpdGhGb250OmZvbnQgZWxsaXBzaXM6ZWxsaXBzaXNTdHlsZSBs
ZXR0ZXJTcGFjaW5nOmxldHRlclNwYWNpbmcgaW5jbHVkZUVtb2ppOmluY2x1ZGVFbW9qaSBtZWFz
dXJlT25seTpOT107Cit9CisKKy0gKENHU2l6ZSlfd2ViX2RyYXdJblJlY3Q6KENHUmVjdClyZWN0
IHdpdGhGb250OihHU0ZvbnRSZWYpZm9udCBlbGxpcHNpczooV2ViRWxsaXBzaXNTdHlsZSllbGxp
cHNpc1N0eWxlIGFsaWdubWVudDooV2ViVGV4dEFsaWdubWVudClhbGlnbm1lbnQgbGluZVNwYWNp
bmc6KGludClsaW5lU3BhY2luZyBpbmNsdWRlRW1vamk6KEJPT0wpaW5jbHVkZUVtb2ppIHRydW5j
YXRpb25SZWN0OihDR1JlY3QgKil0cnVuY2F0aW9uUmVjdCBtZWFzdXJlT25seTooQk9PTCltZWFz
dXJlT25seQoreworICAgIHJldHVybiBbc2VsZiBfX3dlYl9kcmF3SW5SZWN0OnJlY3Qgd2l0aEZv
bnQ6Zm9udCBlbGxpcHNpczplbGxpcHNpc1N0eWxlIGFsaWdubWVudDphbGlnbm1lbnQgbGV0dGVy
U3BhY2luZzooQ0dGbG9hdCkwLjAgbGluZVNwYWNpbmc6KENHRmxvYXQpbGluZVNwYWNpbmcgaW5j
bHVkZUVtb2ppOmluY2x1ZGVFbW9qaSB0cnVuY2F0aW9uUmVjdDp0cnVuY2F0aW9uUmVjdCBtZWFz
dXJlT25seTptZWFzdXJlT25seV07Cit9CisKKy0gKENHU2l6ZSlfd2ViX2RyYXdJblJlY3Q6KENH
UmVjdClyZWN0IHdpdGhGb250OihHU0ZvbnRSZWYpZm9udCBlbGxpcHNpczooV2ViRWxsaXBzaXNT
dHlsZSllbGxpcHNpc1N0eWxlIGFsaWdubWVudDooV2ViVGV4dEFsaWdubWVudClhbGlnbm1lbnQg
bGluZVNwYWNpbmc6KGludClsaW5lU3BhY2luZyBpbmNsdWRlRW1vamk6KEJPT0wpaW5jbHVkZUVt
b2ppIHRydW5jYXRpb25SZWN0OihDR1JlY3QgKil0cnVuY2F0aW9uUmVjdAoreworICAgIHJldHVy
biBbc2VsZiBfd2ViX2RyYXdJblJlY3Q6cmVjdCB3aXRoRm9udDpmb250IGVsbGlwc2lzOmVsbGlw
c2lzU3R5bGUgYWxpZ25tZW50OmFsaWdubWVudCBsaW5lU3BhY2luZzpsaW5lU3BhY2luZyBpbmNs
dWRlRW1vamk6aW5jbHVkZUVtb2ppIHRydW5jYXRpb25SZWN0OnRydW5jYXRpb25SZWN0IG1lYXN1
cmVPbmx5Ok5PXTsKK30KKworLSAoQ0dTaXplKV93ZWJfZHJhd0luUmVjdDooQ0dSZWN0KXJlY3Qg
d2l0aEZvbnQ6KEdTRm9udFJlZilmb250IGVsbGlwc2lzOihXZWJFbGxpcHNpc1N0eWxlKWVsbGlw
c2lzU3R5bGUgYWxpZ25tZW50OihXZWJUZXh0QWxpZ25tZW50KWFsaWdubWVudCBsaW5lU3BhY2lu
ZzooaW50KWxpbmVTcGFjaW5nCit7CisgICAgcmV0dXJuIFtzZWxmIF93ZWJfZHJhd0luUmVjdDpy
ZWN0IHdpdGhGb250OmZvbnQgZWxsaXBzaXM6ZWxsaXBzaXNTdHlsZSBhbGlnbm1lbnQ6YWxpZ25t
ZW50IGxpbmVTcGFjaW5nOmxpbmVTcGFjaW5nIGluY2x1ZGVFbW9qaTpZRVMgdHJ1bmNhdGlvblJl
Y3Q6bmlsIG1lYXN1cmVPbmx5Ok5PXTsKK30KKworLSAoQ0dTaXplKV93ZWJfZHJhd0luUmVjdDoo
Q0dSZWN0KXJlY3Qgd2l0aEZvbnQ6KEdTRm9udFJlZilmb250IGVsbGlwc2lzOihXZWJFbGxpcHNp
c1N0eWxlKWVsbGlwc2lzU3R5bGUgYWxpZ25tZW50OihXZWJUZXh0QWxpZ25tZW50KWFsaWdubWVu
dAoreworICAgIHJldHVybiBbc2VsZiBfd2ViX2RyYXdJblJlY3Q6cmVjdCB3aXRoRm9udDpmb250
IGVsbGlwc2lzOmVsbGlwc2lzU3R5bGUgYWxpZ25tZW50OmFsaWdubWVudCBsaW5lU3BhY2luZzow
IGluY2x1ZGVFbW9qaTpZRVMgdHJ1bmNhdGlvblJlY3Q6bmlsIG1lYXN1cmVPbmx5Ok5PXTsKK30K
KworLSAoQ0dTaXplKV93ZWJfc2l6ZUluUmVjdDooQ0dSZWN0KXJlY3Qgd2l0aEZvbnQ6KEdTRm9u
dFJlZilmb250IGVsbGlwc2lzOihXZWJFbGxpcHNpc1N0eWxlKWVsbGlwc2lzU3R5bGUgbGluZVNw
YWNpbmc6KGludClsaW5lU3BhY2luZworeworICAgIHJldHVybiBbc2VsZiBfd2ViX2RyYXdJblJl
Y3Q6cmVjdCB3aXRoRm9udDpmb250IGVsbGlwc2lzOmVsbGlwc2lzU3R5bGUgYWxpZ25tZW50Oldl
YlRleHRBbGlnbm1lbnRMZWZ0IGxpbmVTcGFjaW5nOmxpbmVTcGFjaW5nIGluY2x1ZGVFbW9qaTpZ
RVMgdHJ1bmNhdGlvblJlY3Q6bmlsIG1lYXN1cmVPbmx5OllFU107Cit9CisKKy0gKENHU2l6ZSlf
d2ViX3NpemVJblJlY3Q6KENHUmVjdClyZWN0IHdpdGhGb250OihHU0ZvbnRSZWYpZm9udCBlbGxp
cHNpczooV2ViRWxsaXBzaXNTdHlsZSllbGxpcHNpc1N0eWxlCit7CisgICAgcmV0dXJuIFtzZWxm
IF93ZWJfZHJhd0luUmVjdDpyZWN0IHdpdGhGb250OmZvbnQgZWxsaXBzaXM6ZWxsaXBzaXNTdHls
ZSBhbGlnbm1lbnQ6V2ViVGV4dEFsaWdubWVudExlZnQgbGluZVNwYWNpbmc6MCBpbmNsdWRlRW1v
amk6WUVTIHRydW5jYXRpb25SZWN0Om5pbCBtZWFzdXJlT25seTpZRVNdOworfQorCistIChOU1N0
cmluZyAqKV93ZWJfc3RyaW5nRm9yV2lkdGg6KGZsb2F0KXdpZHRoIHdpdGhGb250OihHU0ZvbnRS
ZWYpZm9udCBlbGxpcHNpczooV2ViRWxsaXBzaXNTdHlsZSllbGxpcHNpc1N0eWxlIGxldHRlclNw
YWNpbmc6KGZsb2F0KWxldHRlclNwYWNpbmcgaW5jbHVkZUVtb2ppOihCT09MKWluY2x1ZGVFbW9q
aQoreworICAgIFVOVVNFRF9QQVJBTShpbmNsdWRlRW1vamkpOworCisgICAgaWYgKHdpZHRoIDw9
IDApIHsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IHdpZHRo
IG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uXG4iLCBfX0ZVTkNUSU9OX18pOworI2VuZGlmCisg
ICAgICAgIHJldHVybiBAIiI7CisgICAgfQorICAgIAorICAgIGlmIChmb250ID09IE5VTEwpIHsK
KyNpZm5kZWYgTkRFQlVHCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGZvbnQgbXVzdCBi
ZSBub24tbnVsbC5cbiIsIF9fRlVOQ1RJT05fXyk7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIHNl
bGY7CisgICAgfSAgICAKKworICAgIEZvbnRDYWNoZVB1cmdlUHJldmVudGVyIGZvbnRDYWNoZVB1
cmdlUHJldmVudGVyOworCisgICAgRm9udCByZW5kZXJlciA9IHJlbmRlcmVyRm9yRm9udChmb250
KTsKKyAgICBpZiAobGV0dGVyU3BhY2luZyAhPSAwLjApCisgICAgICAgIHJlbmRlcmVyLnNldExl
dHRlclNwYWNpbmcobGV0dGVyU3BhY2luZyk7CisKKyAgICByZXR1cm4gYXBwbHlFbGxpcHNpc1N0
eWxlKHNlbGYsIGVsbGlwc2lzU3R5bGUsIHdpZHRoLCByZW5kZXJlciwgc2hvdWxkRGlzYWJsZVdv
cmRSb3VuZGluZygpID8gU3RyaW5nVHJ1bmNhdG9yOjpEaXNhYmxlUm91bmRpbmdIYWNrcyA6IFN0
cmluZ1RydW5jYXRvcjo6RW5hYmxlUm91bmRpbmdIYWNrcywgMCk7Cit9CisKKy0gKENHU2l6ZSlf
d2ViX3NpemVGb3JXaWR0aDooQ0dGbG9hdCl3aWR0aCB3aXRoQXR0cmlidXRlczooaWQgPFdlYlRl
eHRSZW5kZXJpbmdBdHRyaWJ1dGVzPilhdHRyaWJ1dGVzCit7CisgICAgLy8gRklYTUU6IFdlJ3Jl
IG5vdCBjb21wdXRpbmcgdGhlIGNvcnJlY3QgdHJ1bmNhdGlvbiByZWN0IGhlcmUKKyAgICBhdHRy
aWJ1dGVzLnRydW5jYXRpb25SZWN0ID0gQ0dSZWN0WmVybzsKKyAgICByZXR1cm4gW3NlbGYgX193
ZWJfZHJhd0F0UG9pbnQ6Q0dQb2ludFplcm8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgZm9y
V2lkdGg6d2lkdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aEZvbnQ6YXR0cmlidXRl
cy5mb250CisgICAgICAgICAgICAgICAgICAgICAgICAgIGVsbGlwc2lzOmF0dHJpYnV0ZXMuZWxs
aXBzaXNTdHlsZQorICAgICAgICAgICAgICAgICAgICAgbGV0dGVyU3BhY2luZzphdHRyaWJ1dGVz
LmxldHRlclNwYWNpbmcKKyAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlRW1vamk6YXR0cmli
dXRlcy5pbmNsdWRlRW1vamkKKyAgICAgICAgICAgICAgICAgICAgICAgbWVhc3VyZU9ubHk6WUVT
CisgICAgICAgICAgICAgICAgIHJlbmRlcmVkU3RyaW5nT3V0OmF0dHJpYnV0ZXMucmVuZGVyU3Ry
aW5nXTsKK30KKworLSAoQ0dTaXplKV93ZWJfZHJhd0F0UG9pbnQ6KENHUG9pbnQpcG9pbnQgZm9y
V2lkdGg6KENHRmxvYXQpd2lkdGggd2l0aEF0dHJpYnV0ZXM6KGlkIDxXZWJUZXh0UmVuZGVyaW5n
QXR0cmlidXRlcz4pYXR0cmlidXRlcworeworICAgIC8vIEZJWE1FOiBXZSdyZSBub3QgY29tcHV0
aW5nIHRoZSBjb3JyZWN0IHRydW5jYXRpb24gcmVjdCBoZXJlCisgICAgYXR0cmlidXRlcy50cnVu
Y2F0aW9uUmVjdCA9IENHUmVjdFplcm87CisgICAgcmV0dXJuIFtzZWxmIF9fd2ViX2RyYXdBdFBv
aW50OnBvaW50CisgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcldpZHRoOndpZHRoCisgICAg
ICAgICAgICAgICAgICAgICAgICAgIHdpdGhGb250OmF0dHJpYnV0ZXMuZm9udAorICAgICAgICAg
ICAgICAgICAgICAgICAgICBlbGxpcHNpczphdHRyaWJ1dGVzLmVsbGlwc2lzU3R5bGUKKyAgICAg
ICAgICAgICAgICAgICAgIGxldHRlclNwYWNpbmc6YXR0cmlidXRlcy5sZXR0ZXJTcGFjaW5nCisg
ICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZUVtb2ppOmF0dHJpYnV0ZXMuaW5jbHVkZUVtb2pp
CisgICAgICAgICAgICAgICAgICAgICAgIG1lYXN1cmVPbmx5Ok5PCisgICAgICAgICAgICAgICAg
IHJlbmRlcmVkU3RyaW5nT3V0OmF0dHJpYnV0ZXMucmVuZGVyU3RyaW5nCisgICAgICAgICAgICAg
ICAgICAgICBkcmF3VW5kZXJsaW5lOmF0dHJpYnV0ZXMuZHJhd1VuZGVybGluZV07Cit9CisKKy0g
KENHU2l6ZSlfd2ViX3NpemVJblJlY3Q6KENHUmVjdClyZWN0IHdpdGhBdHRyaWJ1dGVzOihpZCA8
V2ViVGV4dFJlbmRlcmluZ0F0dHJpYnV0ZXM+KWF0dHJpYnV0ZXMKK3sKKyAgICAvLyBGSVhNRTog
V2UncmUgbm90IGNvbXB1dGluZyB0aGUgY29ycmVjdCB0cnVuY2F0aW9uIHJlY3QgaGVyZQorICAg
IENHU2l6ZSBzaXplID0gW3NlbGYgX193ZWJfZHJhd0luUmVjdDpyZWN0CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHdpdGhGb250OmF0dHJpYnV0ZXMuZm9udAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlbGxpcHNpczphdHRyaWJ1dGVzLmVsbGlwc2lzU3R5bGUKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnQ6YXR0cmlidXRlcy5hbGlnbm1l
bnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldHRlclNwYWNpbmc6YXR0cmlidXRlcy5s
ZXR0ZXJTcGFjaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVTcGFjaW5nOmF0
dHJpYnV0ZXMubGluZVNwYWNpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRl
RW1vamk6YXR0cmlidXRlcy5pbmNsdWRlRW1vamkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
dHJ1bmNhdGlvblJlY3Q6TlVMTAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFzdXJl
T25seTpZRVMKKyAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyZWRTdHJpbmdPdXQ6YXR0cmli
dXRlcy5yZW5kZXJTdHJpbmddOworICAgIHJldHVybiBzaXplOworfQorCistIChDR1NpemUpX3dl
Yl9kcmF3SW5SZWN0OihDR1JlY3QpcmVjdCB3aXRoQXR0cmlidXRlczooaWQgPFdlYlRleHRSZW5k
ZXJpbmdBdHRyaWJ1dGVzPilhdHRyaWJ1dGVzCit7CisgICAgLy8gRklYTUU6IFdlJ3JlIG5vdCBj
b21wdXRpbmcgdGhlIGNvcnJlY3QgdHJ1bmNhdGlvbiByZWN0IGhlcmUKKyAgICBDR1NpemUgc2l6
ZSA9IFtzZWxmIF9fd2ViX2RyYXdJblJlY3Q6cmVjdAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3aXRoRm9udDphdHRyaWJ1dGVzLmZvbnQKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZWxsaXBzaXM6YXR0cmlidXRlcy5lbGxpcHNpc1N0eWxlCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYWxpZ25tZW50OmF0dHJpYnV0ZXMuYWxpZ25tZW50CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsZXR0ZXJTcGFjaW5nOmF0dHJpYnV0ZXMubGV0dGVyU3BhY2lu
ZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lU3BhY2luZzphdHRyaWJ1dGVzLmxp
bmVTcGFjaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZUVtb2ppOmF0dHJp
YnV0ZXMuaW5jbHVkZUVtb2ppCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRydW5jYXRpb25S
ZWN0Ok5VTEwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhc3VyZU9ubHk6Tk8KKyAg
ICAgICAgICAgICAgICAgICAgICAgcmVuZGVyZWRTdHJpbmdPdXQ6YXR0cmlidXRlcy5yZW5kZXJT
dHJpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyYXdVbmRlcmxpbmU6YXR0cmlidXRl
cy5kcmF3VW5kZXJsaW5lXTsKKyAgICByZXR1cm4gc2l6ZTsKK30KKworQGVuZAorCisjZW5kaWYg
Ly8gUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9pb3MvTWlzYy9XZWJO
U1N0cmluZ0V4dHJhc0lPUy5oIGIvU291cmNlL1dlYktpdC9pb3MvTWlzYy9XZWJOU1N0cmluZ0V4
dHJhc0lPUy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU5OWE0MTZiZjVmNmNlZjIxNWFhODFhODc5ZGIwODVkZWUz
NDM4NGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2lvcy9NaXNjL1dlYk5TU3Ry
aW5nRXh0cmFzSU9TLmgKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBQTEFURk9S
TShJT1MpCisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCitAaW50ZXJmYWNl
IE5TU3RyaW5nIChXZWJOU1N0cmluZ0V4dHJhc0lPUykKKworLSAoTlNBcnJheSAqKV93ZWJfcG9z
c2libGVVUkxzRm9yVXNlclR5cGVkU3RyaW5nOworLSAoTlNBcnJheSAqKV93ZWJfcG9zc2libGVV
UkxQcmVmaXhlc0ZvclVzZXJUeXBlZFN0cmluZzsKKy0gKE5TVVJMICopX3dlYl9iZXN0VVJMRm9y
VXNlclR5cGVkU3RyaW5nOworCitAZW5kCisKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2lvcy9NaXNjL1dlYk5TU3RyaW5nRXh0cmFzSU9TLm0gYi9T
b3VyY2UvV2ViS2l0L2lvcy9NaXNjL1dlYk5TU3RyaW5nRXh0cmFzSU9TLm0KbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NTRjODBjMzBkMzk4MDk3MWM3ZjI4ZTU2MDQxNThmNzcyYzVmNDFjMwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvaW9zL01pc2MvV2ViTlNTdHJpbmdFeHRyYXNJT1MubQpAQCAtMCww
ICsxLDIxNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBQTEFURk9STShJT1MpCisKKyNpbXBvcnQgPEZv
dW5kYXRpb24vTlNTdHJpbmdfTlNVUkxFeHRyYXMuaD4KKyNpbXBvcnQgIldlYk5TU3RyaW5nRXh0
cmFzSU9TLmgiCisjaW1wb3J0ICJXZWJOU1VSTEV4dHJhcy5oIgorCitAaW1wbGVtZW50YXRpb24g
TlNTdHJpbmcgKFdlYk5TU3RyaW5nRXh0cmFzSU9TKQorCistIChOU0FycmF5ICopX3dlYl9wb3Nz
aWJsZVVSTHNGb3JGb3JVc2VyVHlwZWRTdHJpbmc6KEJPT0wpaXNQcmVmaXgKK3sKKyAgICBOU011
dGFibGVBcnJheSAqcmVzdWx0ID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsKKyAgICAKKyAgICBO
U011dGFibGVTdHJpbmcgKndvcmtTdHJpbmcgPSBbTlNNdXRhYmxlU3RyaW5nIHN0cmluZ1dpdGhT
dHJpbmc6c2VsZl07CisgICAgCisgICAgLy8gVHJpbSB3aGl0ZXNwYWNlIGZyb20gZW5kcyAobGlr
ZWx5IGN1dCAmIHBhc3RlIGFydGlmYWN0KQorICAgIENGU3RyaW5nVHJpbVdoaXRlc3BhY2UoKENG
TXV0YWJsZVN0cmluZ1JlZil3b3JrU3RyaW5nKTsKKyAgICAKKyAgICAvLyBTdHJpcCBvdXQgbmV3
bGluZXMgYW5kIGNhcnJpYWdlIHJldHVybnMgKGxpa2VseSBjdXQgJiBwYXN0ZSBhcnRpZmFjdCkK
KyAgICBDRlN0cmluZ0ZpbmRBbmRSZXBsYWNlKChDRk11dGFibGVTdHJpbmdSZWYpd29ya1N0cmlu
ZywgQ0ZTVFIoIlxuIiksIENGU1RSKCIiKSwgQ0ZSYW5nZU1ha2UgKDAsIFt3b3JrU3RyaW5nIGxl
bmd0aF0pLCAwKTsKKyAgICBDRlN0cmluZ0ZpbmRBbmRSZXBsYWNlKChDRk11dGFibGVTdHJpbmdS
ZWYpd29ya1N0cmluZywgQ0ZTVFIoIlxyIiksIENGU1RSKCIiKSwgQ0ZSYW5nZU1ha2UgKDAsIFt3
b3JrU3RyaW5nIGxlbmd0aF0pLCAwKTsKKyAgICAKKyAgICBpZiAoW3dvcmtTdHJpbmcgbGVuZ3Ro
XSA+IDApIHsKKyAgICAgICAgCisgICAgICAgIC8vIExvb2tzIGxpa2UgYW4gYWJzb2x1dGUgcGF0
aCBvciBhIH4tcGF0aAorICAgICAgICBpZiAoW3dvcmtTdHJpbmcgY2hhcmFjdGVyQXRJbmRleDow
XSA9PSAnLycgfHwgCisgICAgICAgICAgICBbd29ya1N0cmluZyBjaGFyYWN0ZXJBdEluZGV4OjBd
ID09ICd+JykgeworICAgICAgICAgICAgLy8gLSB0cmVhdCBpdCBhcyBhIHBhdGhuYW1lCisgICAg
ICAgICAgICBOU1VSTCAqVVJMID0gW05TVVJMIGZpbGVVUkxXaXRoUGF0aDpbd29ya1N0cmluZyBf
d2ViX3N0cmluZ0J5RXhwYW5kaW5nVGlsZGVJblBhdGhdXTsKKyAgICAgICAgICAgIGlmIChVUkwg
IT0gbmlsKSB7CisgICAgICAgICAgICAgICAgW3Jlc3VsdCBhZGRPYmplY3Q6VVJMXTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIE5TUmFuZ2UgZmlyc3RDb2xv
blJhbmdlID0gW3dvcmtTdHJpbmcgcmFuZ2VPZlN0cmluZzpAIjoiXTsKKyAgICAgICAgICAgIE5T
UmFuZ2UgZmlyc3RTbGFzaFJhbmdlID0gW3dvcmtTdHJpbmcgcmFuZ2VPZlN0cmluZzpAIi8iXTsK
KyAgICAgICAgICAgIE5TUmFuZ2UgZmlyc3REb3RSYW5nZSA9IFt3b3JrU3RyaW5nIHJhbmdlT2ZT
dHJpbmc6QCIuIl07CisgICAgICAgICAgICBOU1JhbmdlIGZpcnN0QXRSYW5nZSA9IFt3b3JrU3Ry
aW5nIHJhbmdlT2ZTdHJpbmc6QCJAIl07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEJPT0wg
VVJMSGFzU2NoZW1lID0gTk87CisgICAgICAgICAgICBpZiAoZmlyc3RDb2xvblJhbmdlLmxvY2F0
aW9uICE9IE5TTm90Rm91bmQgJiYgKGZpcnN0U2xhc2hSYW5nZS5sb2NhdGlvbiA9PSBOU05vdEZv
dW5kIHx8IGZpcnN0U2xhc2hSYW5nZS5sb2NhdGlvbiA+PSBmaXJzdENvbG9uUmFuZ2UubG9jYXRp
b24pKSB7CisgICAgICAgICAgICAgICAgLy8gRG8gYSAic2FuaXR5IGNoZWNrIiBvbiB0aGUgc2No
ZW1lLCBpZiBpdCBpcyBub3Qgb25lIG9mIHRoZSAid2VsbC1rbm93biIKKyAgICAgICAgICAgICAg
ICAvLyBzY2hlbWVzIHdlIHN1cHBvcnQsIGRvIHNvbWUgd29yayB0byBhZGQgc29tZSBwb3NzaWJp
bGl0aWVzLgorICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgc28gdHlwZWQgc3RyaW5ncyBsaWtl
ICJsb2NhbGhvc3Q6ODA4MCIgZG8gbm90IGdldAorICAgICAgICAgICAgICAgIC8vIG1pc2ludGVy
cHJldGVkIGFzIGEgVVJMIHdpdGggdGhlIGxvY2FsaG9zdDogc2NoZW1lLgorICAgICAgICAgICAg
ICAgIC8vIFBlcmhhcHMgdGhpcyBjb3VsZCBiZSBpbXByb3ZlZCB0byBiZSBhIGR5bmFtaWMgbGlz
dCBvZiBzY2hlbWVzCisgICAgICAgICAgICAgICAgLy8gYmFzZWQgb24gbG9hZGVkIHByb3RvY29s
IGhhbmRsZXJzLCBidXQgSSBkbyBub3Qgc2VlIHRoZSBuZWVkIGZvcgorICAgICAgICAgICAgICAg
IC8vIHRoZSBleHRyYSBjb21wbGV4aXR5LgorICAgICAgICAgICAgICAgIGlmIChbd29ya1N0cmlu
ZyBfd2ViX2hhc0Nhc2VJbnNlbnNpdGl2ZVByZWZpeDpAImh0dHA6Il0gfHwKKyAgICAgICAgICAg
ICAgICAgICAgW3dvcmtTdHJpbmcgX3dlYl9oYXNDYXNlSW5zZW5zaXRpdmVQcmVmaXg6QCJodHRw
czoiXSB8fAorICAgICAgICAgICAgICAgICAgICBbd29ya1N0cmluZyBfd2ViX2hhc0Nhc2VJbnNl
bnNpdGl2ZVByZWZpeDpAImZpbGU6Il0gfHwKKyAgICAgICAgICAgICAgICAgICAgW3dvcmtTdHJp
bmcgX3dlYl9oYXNDYXNlSW5zZW5zaXRpdmVQcmVmaXg6QCJmdHA6Il0gfHwKKyAgICAgICAgICAg
ICAgICAgICAgW3dvcmtTdHJpbmcgX3dlYl9oYXNDYXNlSW5zZW5zaXRpdmVQcmVmaXg6QCJqYXZh
c2NyaXB0OiJdIHx8CisgICAgICAgICAgICAgICAgICAgIFt3b3JrU3RyaW5nIF93ZWJfaGFzQ2Fz
ZUluc2Vuc2l0aXZlUHJlZml4OkAiYWJvdXQ6Il0gfHwKKyAgICAgICAgICAgICAgICAgICAgW3dv
cmtTdHJpbmcgX3dlYl9oYXNDYXNlSW5zZW5zaXRpdmVQcmVmaXg6QCJyYWRhcjoiXSB8fAorICAg
ICAgICAgICAgICAgICAgICBbd29ya1N0cmluZyBfd2ViX2hhc0Nhc2VJbnNlbnNpdGl2ZVByZWZp
eDpAInJkYXI6Il0pIHsKKyAgICAgICAgICAgICAgICAgICAgVVJMSGFzU2NoZW1lID0gWUVTOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChbd29ya1N0cmluZyBs
ZW5ndGhdID4gZmlyc3RDb2xvblJhbmdlLmxvY2F0aW9uICsgMSkgeworICAgICAgICAgICAgICAg
ICAgICAvLyBJZiB0aGUgZmlyc3QgY2hhcmFjdGVyIGZvbGxvd2luZyB0aGUgZmlyc3QgY29sb24g
aXMgbm90IGEgbnVtYmVyCisgICAgICAgICAgICAgICAgICAgIC8vIGd1ZXNzIHRoYXQgdGhpcyBp
cyBub3QgaXMgYSBob3N0OnBvcnQgY29tYmluYXRpb24sIGFuZCB0aGF0CisgICAgICAgICAgICAg
ICAgICAgIC8vIHRoZSBzdHJpbmcgcHJlY2VkaW5nIHRoZSBjb2xvbiBpcyBhIHNjaGVtZSB3ZSBk
b24ndCBrbm93IGFib3V0LgorICAgICAgICAgICAgICAgICAgICB1bmljaGFyIGMgPSBbd29ya1N0
cmluZyBjaGFyYWN0ZXJBdEluZGV4OmZpcnN0Q29sb25SYW5nZS5sb2NhdGlvbiArIDFdOworICAg
ICAgICAgICAgICAgICAgICBpZiAoYyA8ICcwJyB8fCBjID4gJzknKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBVUkxIYXNTY2hlbWUgPSBZRVM7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSBp
cyBubyBjaGFyYWN0ZXIgZm9sbG93aW5nIHRoZSBjb2xvbiwgdGhlbiBhc3N1bWUgdGhlCisgICAg
ICAgICAgICAgICAgICAgIC8vIHN0cmluZyBwcmVjZWRpbmcgdGhlIGNvbG9uIGlzIGEgc2NoZW1l
LgorICAgICAgICAgICAgICAgICAgICBVUkxIYXNTY2hlbWUgPSBZRVM7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoVVJMSGFz
U2NoZW1lKSB7CisgICAgICAgICAgICAgICAgLy8gLSB1c2UgaXQgdW5jaGFuZ2VkCisgICAgICAg
ICAgICAgICAgTlNVUkwgKlVSTCA9IFtOU1VSTCBfd2ViX1VSTFdpdGhVc2VyVHlwZWRTdHJpbmc6
d29ya1N0cmluZ107CisgICAgICAgICAgICAgICAgaWYgKFVSTCAhPSBuaWwpIHsKKyAgICAgICAg
ICAgICAgICAgICAgW3Jlc3VsdCBhZGRPYmplY3Q6VVJMXTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIE5TVVJMICpVUkw7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gYXBwYXJlbnQgaG9zdG5hbWUgY29udGFpbnMg
YSBkb3QgYW5kIHN0YXJ0cyB3aXRoICJ3d3cuIiAKKyAgICAgICAgICAgICAgICBpZiAoW1t3b3Jr
U3RyaW5nIGxvd2VyY2FzZVN0cmluZ10gaGFzUHJlZml4OkAid3d3LiJdKSB7CisgICAgICAgICAg
ICAgICAgICAgIC8vIC0ganVzdCBwcmVwZW5kICJodHRwOi8vIgorICAgICAgICAgICAgICAgICAg
ICBbd29ya1N0cmluZyBpbnNlcnRTdHJpbmc6QCJodHRwOi8vIiBhdEluZGV4OjBdOworICAgICAg
ICAgICAgICAgICAgICBVUkwgPSBbTlNVUkwgX3dlYl9VUkxXaXRoVXNlclR5cGVkU3RyaW5nOndv
cmtTdHJpbmddOworICAgICAgICAgICAgICAgICAgICBpZiAoVVJMICE9IG5pbCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgW3Jlc3VsdCBhZGRPYmplY3Q6VVJMXTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBhcHBhcmVu
dCBob3N0bmFtZSBjb250YWlucyBhIGRvdCBhbmQgc3RhcnRzIHdpdGggImZ0cC4iCisgICAgICAg
ICAgICAgICAgfSBlbHNlIGlmIChbW3dvcmtTdHJpbmcgbG93ZXJjYXNlU3RyaW5nXSBoYXNQcmVm
aXg6QCJmdHAuIl0pIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gLSBqdXN0IHByZXBlbmQgImZ0
cDovLyIKKyAgICAgICAgICAgICAgICAgICAgW3dvcmtTdHJpbmcgaW5zZXJ0U3RyaW5nOkAiZnRw
Oi8vIiBhdEluZGV4OjBdOworICAgICAgICAgICAgICAgICAgICBVUkwgPSBbTlNVUkwgX3dlYl9V
UkxXaXRoVXNlclR5cGVkU3RyaW5nOndvcmtTdHJpbmddOworICAgICAgICAgICAgICAgICAgICBp
ZiAoVVJMICE9IG5pbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgW3Jlc3VsdCBhZGRPYmpl
Y3Q6VVJMXTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAvLyBhcHBhcmVudCBob3N0bmFtZSBjb250YWlucyAiQCIKKyAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKGZpcnN0QXRSYW5nZS5sb2NhdGlvbiAhPSBOU05vdEZvdW5kICYm
IGZpcnN0QXRSYW5nZS5sb2NhdGlvbiA8IGZpcnN0U2xhc2hSYW5nZS5sb2NhdGlvbikgeworICAg
ICAgICAgICAgICAgICAgICAvLyAtIGp1c3RwcmVwZW5kICJodHRwOi8vIgorICAgICAgICAgICAg
ICAgICAgICBbd29ya1N0cmluZyBpbnNlcnRTdHJpbmc6QCJodHRwOi8vIiBhdEluZGV4OjBdOwor
ICAgICAgICAgICAgICAgICAgICBVUkwgPSBbTlNVUkwgX3dlYl9VUkxXaXRoVXNlclR5cGVkU3Ry
aW5nOndvcmtTdHJpbmddOworICAgICAgICAgICAgICAgICAgICBpZiAoVVJMICE9IG5pbCkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgW3Jlc3VsdCBhZGRPYmplY3Q6VVJMXTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBh
cHBhcmVudCBob3N0bmFtZSBjb250YWlucyBhIGRvdCBhbmQgZG9lc24ndCBzdGFydCB3aXRoIGFu
eXRoaW5nIHNwZWNpYWwKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZpcnN0RG90UmFuZ2Uu
bG9jYXRpb24gIT0gTlNOb3RGb3VuZCAmJiBmaXJzdERvdFJhbmdlLmxvY2F0aW9uIDwgZmlyc3RT
bGFzaFJhbmdlLmxvY2F0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIC0gdHJ5IHByZXBl
bmRpbmcgImh0dHA6Ly8iCisgICAgICAgICAgICAgICAgICAgIFt3b3JrU3RyaW5nIGluc2VydFN0
cmluZzpAImh0dHA6Ly8iIGF0SW5kZXg6MF07CisgICAgICAgICAgICAgICAgICAgIFVSTCA9IFtO
U1VSTCBfd2ViX1VSTFdpdGhVc2VyVHlwZWRTdHJpbmc6d29ya1N0cmluZ107CisgICAgICAgICAg
ICAgICAgICAgIGlmIChVUkwgIT0gbmlsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBbcmVz
dWx0IGFkZE9iamVjdDpVUkxdOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICAvLyAtIHRyeSBwcmVwZW5kaW5nICJodHRwOi8v
d3d3LiIKKyAgICAgICAgICAgICAgICAgICAgW3dvcmtTdHJpbmcgaW5zZXJ0U3RyaW5nOkAid3d3
LiIgYXRJbmRleDpzdHJsZW4oImh0dHA6Ly8iKV07CisgICAgICAgICAgICAgICAgICAgIFVSTCA9
IFtOU1VSTCBfd2ViX1VSTFdpdGhVc2VyVHlwZWRTdHJpbmc6d29ya1N0cmluZ107CisgICAgICAg
ICAgICAgICAgICAgIGlmIChVUkwgIT0gbmlsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBb
cmVzdWx0IGFkZE9iamVjdDpVUkxdOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIGFwcGFyZW50IGhvc3RuYW1lIGRvZXNuJ3Qg
Y29udGFpbiBhIGRvdCBidXQgaXMgZXF1YWwgdG8gImxvY2FsaG9zdCIKKyAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKFtbd29ya1N0cmluZyBsb3dlcmNhc2VTdHJpbmddIGlzRXF1YWxUb1N0cmlu
ZzpAImxvY2FsaG9zdCJdIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICBbW3dvcmtTdHJp
bmcgbG93ZXJjYXNlU3RyaW5nXSBoYXNQcmVmaXg6QCJsb2NhbGhvc3QvIl0pIHsKKyAgICAgICAg
ICAgICAgICAgICAgLy8gLSBqdXN0IHByZXBlbmQgImh0dHA6Ly8iCisgICAgICAgICAgICAgICAg
ICAgIFt3b3JrU3RyaW5nIGluc2VydFN0cmluZzpAImh0dHA6Ly8iIGF0SW5kZXg6MF07CisgICAg
ICAgICAgICAgICAgICAgIFVSTCA9IFtOU1VSTCBfd2ViX1VSTFdpdGhVc2VyVHlwZWRTdHJpbmc6
d29ya1N0cmluZ107CisgICAgICAgICAgICAgICAgICAgIGlmIChVUkwgIT0gbmlsKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBbcmVzdWx0IGFkZE9iamVjdDpVUkxdOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIGFwcGFy
ZW50IGhvc3RuYW1lIGRvZXNuJ3QgY29udGFpbiBhIGRvdCBhbmQgaXMgbm90aGluZyBzcGVjaWFs
CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gLSB0cnkg
cHJlcGVuZGluZyAiaHR0cDovLyIKKyAgICAgICAgICAgICAgICAgICAgW3dvcmtTdHJpbmcgaW5z
ZXJ0U3RyaW5nOkAiaHR0cDovLyIgYXRJbmRleDowXTsKKyAgICAgICAgICAgICAgICAgICAgVVJM
ID0gW05TVVJMIF93ZWJfVVJMV2l0aFVzZXJUeXBlZFN0cmluZzp3b3JrU3RyaW5nXTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKFVSTCAhPSBuaWwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IFtyZXN1bHQgYWRkT2JqZWN0OlVSTF07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIC8vIC0gdHJ5IHByZXBlbmRpbmcgImh0
dHA6Ly93d3cuIiBhbmQgYXBwZW5kaW5nIC5jb20gdG8gdGhlIGhvc3RuYW1lLCAKKyAgICAgICAg
ICAgICAgICAgICAgLy8gYnV0IGFjY291bnQgZm9yIGEgcG9ydCBudW1iZXIgaWYgdGhlcmUgaXMg
b25lCisgICAgICAgICAgICAgICAgICAgIE5TUmFuZ2Ugc2Vjb25kQ29sb25SYW5nZSA9IFt3b3Jr
U3RyaW5nIHJhbmdlT2ZTdHJpbmc6QCI6IiBvcHRpb25zOk5TTGl0ZXJhbFNlYXJjaCByYW5nZTpO
U01ha2VSYW5nZSg1LCBbd29ya1N0cmluZyBsZW5ndGhdIC0gNSldOyAvLyA1IGlzIGxlbmd0aCBv
ZiBodHRwOgorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBlbmRPZkhvc3RuYW1lT3JQb3J0
ID0gKHNlY29uZENvbG9uUmFuZ2UubG9jYXRpb24gIT0gTlNOb3RGb3VuZCkgPworICAgICAgICAg
ICAgICAgICAgICAgICAgc2Vjb25kQ29sb25SYW5nZS5sb2NhdGlvbiA6CisgICAgICAgICAgICAg
ICAgICAgICAgICAoZmlyc3RTbGFzaFJhbmdlLmxvY2F0aW9uICE9IE5TTm90Rm91bmQpID8KKyAg
ICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbigiaHR0cDovLyIpICsgZmlyc3RTbGFzaFJhbmdl
LmxvY2F0aW9uIDogCisgICAgICAgICAgICAgICAgICAgICAgICBbd29ya1N0cmluZyBsZW5ndGhd
OyAgCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAoIShpc1By
ZWZpeCAmJiBlbmRPZkhvc3RuYW1lT3JQb3J0ID09IFt3b3JrU3RyaW5nIGxlbmd0aF0pKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBbd29ya1N0cmluZyBpbnNlcnRTdHJpbmc6QCIuY29tIiBh
dEluZGV4OmVuZE9mSG9zdG5hbWVPclBvcnRdOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIFt3b3JrU3RyaW5nIGluc2VydFN0cmluZzpAInd3dy4iIGF0SW5kZXg6
c3RybGVuKCJodHRwOi8vIildOworICAgICAgICAgICAgICAgICAgICBVUkwgPSBbTlNVUkwgX3dl
Yl9VUkxXaXRoVXNlclR5cGVkU3RyaW5nOndvcmtTdHJpbmddOworICAgICAgICAgICAgICAgICAg
ICBpZiAoVVJMICE9IG5pbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgW3Jlc3VsdCBhZGRP
YmplY3Q6VVJMXTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCisKKy0gKE5TQXJyYXkgKilfd2ViX3Bvc3NpYmxlVVJMUHJlZml4ZXNGb3JVc2VyVHlwZWRT
dHJpbmcKK3sKKyAgICByZXR1cm4gW3NlbGYgX3dlYl9wb3NzaWJsZVVSTHNGb3JGb3JVc2VyVHlw
ZWRTdHJpbmc6WUVTXTsKK30KKworLSAoTlNBcnJheSAqKV93ZWJfcG9zc2libGVVUkxzRm9yVXNl
clR5cGVkU3RyaW5nCit7CisgICAgcmV0dXJuIFtzZWxmIF93ZWJfcG9zc2libGVVUkxzRm9yRm9y
VXNlclR5cGVkU3RyaW5nOk5PXTsKK30KKworLSAoTlNVUkwgKilfd2ViX2Jlc3RVUkxGb3JVc2Vy
VHlwZWRTdHJpbmcKK3sKKyAgICBOU0FycmF5ICpVUkxzID0gW3NlbGYgX3dlYl9wb3NzaWJsZVVS
THNGb3JVc2VyVHlwZWRTdHJpbmddOworICAgIGlmIChbVVJMcyBjb3VudF0gPT0gMCkgeworICAg
ICAgICByZXR1cm4gbmlsOworICAgIH0KKyAgICByZXR1cm4gW1tVUkxzIG9iamVjdEF0SW5kZXg6
MF0gX3dlYmtpdF9jYW5vbmljYWxpemVdOworfQorCitAZW5kCisKKyNlbmRpZiAvLyBQTEFURk9S
TShJT1MpCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvaW9zL01pc2MvV2ViTlNTdHJpbmdF
eHRyYXNJUGhvbmUuaCBiL1NvdXJjZS9XZWJLaXQvaW9zL01pc2MvV2ViTlNTdHJpbmdFeHRyYXNJ
UGhvbmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi45MjA1MTE1ODE3YWI3ZmVmYzU2M2Y0ODQ3NTdlMmFiNjcyZjU4
M2MzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9pb3MvTWlzYy9XZWJOU1N0cmlu
Z0V4dHJhc0lQaG9uZS5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0IDxX
ZWJLaXQvV2ViTlNTdHJpbmdFeHRyYXNJT1MuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
aW9zL01pc2MvV2ViVUlLaXRTdXBwb3J0LmggYi9Tb3VyY2UvV2ViS2l0L2lvcy9NaXNjL1dlYlVJ
S2l0U3VwcG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI0MWNlZDJkNzVhOTA5ODFiNzY1OGUwMzNiZTg4Y2Zk
NjQ2NmQwYjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2lvcy9NaXNjL1dlYlVJ
S2l0U3VwcG9ydC5oCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0IDxDb3Jl
R3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+CisjaW1wb3J0IDx1bmljb2RlL3VjaGFyLmg+CisKKyNp
ZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLy8gVG8gYmUgYWJsZSB0
byB1c2UgYmFja2dyb3VuZCB0YXNrcyBmcm9tIHdpdGhpbiBXZWJLaXQsIHdlIG5lZWQgdG8gZXhw
b3NlIHRoYXQgVUlLaXQgZnVuY3Rpb25hbGl0eQorLy8gd2l0aG91dCBsaW5raW5nIHRvIFVJS2l0
LgorLy8gV2UgYWNjb21wbGlzaCB0aGlzIGJ5IGdpdmluZyBVSUtpdCAzIG1ldGhvZHMgdG8gc2V0
IHVwOgorLy8gICAtIFRoZSBpbnZhbGlkIHRhc2sgSUQgdmFsdWUKKy8vICAgLSBBIGJsb2NrIGZv
ciBzdGFydGluZyBhIGJhY2tncm91bmQgdGFzaworLy8gICAtIEEgYmxvY2sgZm9yIGVuZGluZyBh
IGJhY2tncm91bmQgdGFzay4KK3R5cGVkZWYgTlNVSW50ZWdlciBXZWJCYWNrZ3JvdW5kVGFza0lk
ZW50aWZpZXI7Cit0eXBlZGVmIHZvaWQgKF5Wb2lkQmxvY2spKHZvaWQpOwordHlwZWRlZiBXZWJC
YWNrZ3JvdW5kVGFza0lkZW50aWZpZXIgKF5TdGFydEJhY2tncm91bmRUYXNrQmxvY2spKFZvaWRC
bG9jayk7Cit0eXBlZGVmIHZvaWQgKF5FbmRCYWNrZ3JvdW5kVGFza0Jsb2NrKShXZWJCYWNrZ3Jv
dW5kVGFza0lkZW50aWZpZXIpOworCit2b2lkIFdlYktpdFNldEludmFsaWRXZWJCYWNrZ3JvdW5k
VGFza0lkZW50aWZpZXIoV2ViQmFja2dyb3VuZFRhc2tJZGVudGlmaWVyKTsKK3ZvaWQgV2ViS2l0
U2V0U3RhcnRCYWNrZ3JvdW5kVGFza0Jsb2NrKFN0YXJ0QmFja2dyb3VuZFRhc2tCbG9jayk7Cit2
b2lkIFdlYktpdFNldEVuZEJhY2tncm91bmRUYXNrQmxvY2soRW5kQmFja2dyb3VuZFRhc2tCbG9j
ayk7CisKKy8vIFRoZXNlIG1ldGhvZHMgYXJlIHdoYXQgV2ViS2l0IHVzZXMgdG8gc3RhcnQvc3Rv
cCBiYWNrZ3JvdW5kIHRhc2tzIGFmdGVyIFVJS2l0IGhhcyBzZXQgdGhpbmdzIHVwLgorV2ViQmFj
a2dyb3VuZFRhc2tJZGVudGlmaWVyIGludmFsaWRXZWJCYWNrZ3JvdW5kVGFza0lkZW50aWZpZXIo
KTsKK1dlYkJhY2tncm91bmRUYXNrSWRlbnRpZmllciBzdGFydEJhY2tncm91bmRUYXNrKFZvaWRC
bG9jayk7Cit2b2lkIGVuZEJhY2tncm91bmRUYXNrKFdlYkJhY2tncm91bmRUYXNrSWRlbnRpZmll
cik7CisKKy8vIFRoaXMgbWV0aG9kIGdpdmVzIFdlYktpdCB0aGUgbm90aWZpY2F0aW9ucyB0byBs
aXN0ZW4gdG8gc28gaXQga25vd3MgYWJvdXQgYXBwIFN1c3BlbmQvUmVzdW1lCit2b2lkIFdlYktp
dFNldEJhY2tncm91bmRBbmRGb3JlZ3JvdW5kTm90aWZpY2F0aW9uTmFtZXMoTlNTdHJpbmcgKiwg
TlNTdHJpbmcgKik7CisKKy8vIFRoaXMgbWV0aG9kIGRvZXMgdGhlIG1pbmltdW0gYW1vdW50IG9m
IHdvcmsgZm9yIFdlYk5TU3RyaW5nRHJhd2luZyB0byB3b3JrCisvLyBjb3JyZWN0bHkuCit2b2lk
IFdlYktpdEluaXRpYWxpemUodm9pZCk7Cit2b2lkIFdlYktpdFNldElzQ2xhc3NpYyhCT09MKTsK
K2Zsb2F0IFdlYktpdEdldE1pbmltdW1ab29tRm9udFNpemUodm9pZCk7CisgICAgCitpbnQgV2Vi
S2l0R2V0TGFzdExpbmVCcmVha0luQnVmZmVyKFVDaGFyICpjaGFyYWN0ZXJzLCBpbnQgcG9zaXRp
b24sIGludCBsZW5ndGgpOworCitjb25zdCBjaGFyICpXZWJLaXRQbGF0Zm9ybVN5c3RlbVJvb3RE
aXJlY3Rvcnkodm9pZCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2lvcy9NaXNjL1dlYlVJS2l0U3VwcG9ydC5tbSBiL1NvdXJjZS9X
ZWJLaXQvaW9zL01pc2MvV2ViVUlLaXRTdXBwb3J0Lm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI5MDQ4ZDVkMTc4
OWFhY2ZjNzljNzdhZWZmM2RjYjU4MDkxNDVhY2EKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2lvcy9NaXNjL1dlYlVJS2l0U3VwcG9ydC5tbQpAQCAtMCwwICsxLDE3NyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZiBQTEFURk9STShJT1MpCisKKyNpbXBvcnQgIldlYlVJS2l0U3VwcG9ydC5o
IgorCisjaW1wb3J0IDxDb3JlRm91bmRhdGlvbi9DRlByaXYuaD4KKyNpbXBvcnQgPFdlYkNvcmUv
YnJlYWtfbGluZXMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CisjaW1w
b3J0IDxXZWJDb3JlL1RleHRCcmVha0l0ZXJhdG9yLmg+CisjaW1wb3J0IDxXZWJDb3JlL1dlYkNv
cmVTeXN0ZW1JbnRlcmZhY2UuaD4KKyNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZVRocmVhZFN5c3Rl
bUludGVyZmFjZS5oPgorI2ltcG9ydCAiV2ViRGF0YWJhc2VNYW5hZ2VySW50ZXJuYWwuaCIKKyNp
bXBvcnQgIldlYktpdFN5c3RlbUludGVyZmFjZS5oIgorI2ltcG9ydCAiV2ViTG9jYWxpemFibGVT
dHJpbmdzLmgiCisjaW1wb3J0ICJXZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaCIKKyNpbXBvcnQgIldl
YlN5c3RlbUludGVyZmFjZS5oIgorI2ltcG9ydCAiV2ViVmlld1ByaXZhdGUuaCIKKworCisjaW1w
b3J0IDxydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBsaW5rZWRPbk9yQWZ0ZXJJT1M1KCkKK3sKKyAg
ICBzdGF0aWMgYm9vbCBzX2xpbmtlZE9uT3JBZnRlcklPUzUgPSBpb3NFeGVjdXRhYmxlV2FzTGlu
a2VkT25PckFmdGVyVmVyc2lvbih3a0lPU1N5c3RlbVZlcnNpb25fNV8wKTsKKyAgICByZXR1cm4g
c19saW5rZWRPbk9yQWZ0ZXJJT1M1OworfQorCit2b2lkIFdlYktpdEluaXRpYWxpemUodm9pZCkK
K3sKKyAgICBzdGF0aWMgYm9vbCB3ZWJraXRJbml0aWFsaXplZDsKKyAgICBpZiAod2Via2l0SW5p
dGlhbGl6ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChwdGhyZWFkX21haW5fbnAo
KSk7CisgICAgd2Via2l0SW5pdGlhbGl6ZWQgPSB0cnVlOworICAgIEluaXRXZWJDb3JlVGhyZWFk
U3lzdGVtSW50ZXJmYWNlKCk7CisgICAgW1dlYlZpZXcgZW5hYmxlV2ViVGhyZWFkXTsKKyAgICBJ
bml0V2ViQ29yZVN5c3RlbUludGVyZmFjZSgpOworCisgICAgLy8gSW5pdGlhbGl6ZSBvdXIgcGxh
dGZvcm0gc3RyYXRlZ2llcy4KKyAgICBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmluaXRpYWxpemVJ
Zk5lY2Vzc2FyeSgpOworCisgICAgLy8gV2UnZCByYXRoZXIgZWF0IHRoaXMgY29zdCBhdCBzdGFy
dHVwIHRoYW4gc2xvdyBkb3duIHNpdHVhdGlvbnMgdGhhdCBuZWVkIHRvIGJlIHJlc3BvbnNpdmUu
CisgICAgLy8gU2VlIDxyZGFyOi8vcHJvYmxlbS82Nzc2MzAxPi4KKyAgICBMb2FkV2ViTG9jYWxp
emVkU3RyaW5ncygpOworICAgIFtXZWJWaWV3IF9zZXRBbGxvd3NSb3VuZGluZ0hhY2tzOiFsaW5r
ZWRPbk9yQWZ0ZXJJT1M1KCldOworICAgIFtXZWJWaWV3IHJlZ2lzdGVyRm9yTWVtb3J5Tm90aWZp
Y2F0aW9uc107CisgICAgCisgICAgLy8gVGhpcyBuZWVkcyB0byBiZSBjYWxsZWQgYmVmb3JlIGFu
eSByZXF1ZXN0cyBhcmUgbWFkZSBpbiB0aGUgcHJvY2VzcywgPHJkYXI6Ly9wcm9ibGVtLzk2OTE4
NzE+CisgICAgV2ViQ29yZTo6aW5pdGlhbGl6ZUhUVFBDb25uZWN0aW9uU2V0dGluZ3NPblN0YXJ0
dXAoKTsKKyAgICBXZWJDb3JlOjplbmFibGVLVVJMU2NoZW1lQ2Fub25pY2FsaXphdGlvbihsaW5r
ZWRPbk9yQWZ0ZXJJT1M1KCkpOworfQorCit2b2lkIFdlYktpdFNldElzQ2xhc3NpYyhCT09MIGZs
YWcpCit7CisgICAgV0tTZXRJc0NsYXNzaWMoZmxhZyk7Cit9CisKK2Zsb2F0IFdlYktpdEdldE1p
bmltdW1ab29tRm9udFNpemUodm9pZCkKK3sKKyAgICByZXR1cm4gV0tHZXRNaW5pbXVtWm9vbUZv
bnRTaXplKCk7Cit9CisKK2ludCBXZWJLaXRHZXRMYXN0TGluZUJyZWFrSW5CdWZmZXIoVUNoYXIg
KmNoYXJhY3RlcnMsIGludCBwb3NpdGlvbiwgaW50IGxlbmd0aCkKK3sKKyAgICBpbnQgbGFzdEJy
ZWFrUG9zID0gcG9zaXRpb247CisgICAgaW50IGJyZWFrUG9zID0gMDsKKyAgICBMYXp5TGluZUJy
ZWFrSXRlcmF0b3IgYnJlYWtJdGVyYXRvcihTdHJpbmcoY2hhcmFjdGVycywgbGVuZ3RoKSk7Cisg
ICAgd2hpbGUgKChicmVha1BvcyA9IG5leHRCcmVha2FibGVQb3NpdGlvbihicmVha0l0ZXJhdG9y
LCBicmVha1BvcykpIDwgcG9zaXRpb24pCisgICAgICAgIGxhc3RCcmVha1BvcyA9IGJyZWFrUG9z
Kys7CisgICAgcmV0dXJuIGxhc3RCcmVha1BvcyA8IHBvc2l0aW9uID8gKE5TVUludGVnZXIpbGFz
dEJyZWFrUG9zIDogSU5UX01BWDsKK30KKworY29uc3QgY2hhciAqV2ViS2l0UGxhdGZvcm1TeXN0
ZW1Sb290RGlyZWN0b3J5KHZvaWQpCit7CisjaWYgUExBVEZPUk0oSU9TX1NJTVVMQVRPUikKKyAg
ICBzdGF0aWMgY29uc3QgY2hhciAqcGxhdGZvcm1TeXN0ZW1Sb290RGlyZWN0b3J5ID0gbmlsOwor
ICAgIGlmICghcGxhdGZvcm1TeXN0ZW1Sb290RGlyZWN0b3J5KSB7CisgICAgICAgIGNoYXIgKnNp
bXVsYXRvclJvb3QgPSBnZXRlbnYoIklQSE9ORV9TSU1VTEFUT1JfUk9PVCIpOworICAgICAgICBw
bGF0Zm9ybVN5c3RlbVJvb3REaXJlY3RvcnkgPSBzaW11bGF0b3JSb290ID8gc2ltdWxhdG9yUm9v
dCA6ICIvIjsKKyAgICB9CisgICAgcmV0dXJuIHBsYXRmb3JtU3lzdGVtUm9vdERpcmVjdG9yeTsK
KyNlbHNlCisgICAgcmV0dXJuICIvIjsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBhcHBsaWNh
dGlvbkRpZEVudGVyQmFja2dyb3VuZChDRk5vdGlmaWNhdGlvbkNlbnRlclJlZiwgdm9pZCosIENG
U3RyaW5nUmVmLCBjb25zdCB2b2lkICosIENGRGljdGlvbmFyeVJlZikKK3sKKyAgICBXZWJLaXRT
ZXRXZWJEYXRhYmFzZVBhdXNlZCh0cnVlKTsKK30KKworc3RhdGljIHZvaWQgYXBwbGljYXRpb25X
aWxsRW50ZXJGb3JlZ3JvdW5kKENGTm90aWZpY2F0aW9uQ2VudGVyUmVmLCB2b2lkKiwgQ0ZTdHJp
bmdSZWYsIGNvbnN0IHZvaWQqLCBDRkRpY3Rpb25hcnlSZWYpCit7CisgICAgV2ViS2l0U2V0V2Vi
RGF0YWJhc2VQYXVzZWQoZmFsc2UpOworfQorCit2b2lkIFdlYktpdFNldEJhY2tncm91bmRBbmRG
b3JlZ3JvdW5kTm90aWZpY2F0aW9uTmFtZXMoTlNTdHJpbmcgKmRpZEVudGVyQmFja2dyb3VuZE5h
bWUsIE5TU3RyaW5nICp3aWxsRW50ZXJGb3JlZ3JvdW5kTmFtZSkKK3sKKyAgICBzdGF0aWMgYm9v
bCBpbml0aWFsaXplZCA9IGZhbHNlOworICAgIGlmIChpbml0aWFsaXplZCkKKyAgICAgICAgcmV0
dXJuOworICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKKworICAgIENGTm90aWZpY2F0aW9uQ2VudGVy
UmVmIG5vdGlmaWNhdGlvbkNlbnRlciA9IENGTm90aWZpY2F0aW9uQ2VudGVyR2V0TG9jYWxDZW50
ZXIoKTsKKyAgICBDRk5vdGlmaWNhdGlvbkNlbnRlckFkZE9ic2VydmVyKG5vdGlmaWNhdGlvbkNl
bnRlciwgMCwgYXBwbGljYXRpb25EaWRFbnRlckJhY2tncm91bmQsIChDRlN0cmluZ1JlZilkaWRF
bnRlckJhY2tncm91bmROYW1lLCBOVUxMLCBDRk5vdGlmaWNhdGlvblN1c3BlbnNpb25CZWhhdmlv
ckNvYWxlc2NlKTsKKyAgICBDRk5vdGlmaWNhdGlvbkNlbnRlckFkZE9ic2VydmVyKG5vdGlmaWNh
dGlvbkNlbnRlciwgMCwgYXBwbGljYXRpb25XaWxsRW50ZXJGb3JlZ3JvdW5kLCAoQ0ZTdHJpbmdS
ZWYpd2lsbEVudGVyRm9yZWdyb3VuZE5hbWUsIE5VTEwsIENGTm90aWZpY2F0aW9uU3VzcGVuc2lv
bkJlaGF2aW9yQ29hbGVzY2UpOworCit9CisKK3N0YXRpYyBXZWJCYWNrZ3JvdW5kVGFza0lkZW50
aWZpZXIgaW52YWxpZFRhc2tJZGVudGlmaWVyID0gMDsKK3N0YXRpYyBTdGFydEJhY2tncm91bmRU
YXNrQmxvY2sgc3RhcnRCYWNrZ3JvdW5kVGFza0Jsb2NrID0gMDsKK3N0YXRpYyBFbmRCYWNrZ3Jv
dW5kVGFza0Jsb2NrIGVuZEJhY2tncm91bmRUYXNrQmxvY2sgPSAwOworCit2b2lkIFdlYktpdFNl
dEludmFsaWRXZWJCYWNrZ3JvdW5kVGFza0lkZW50aWZpZXIoV2ViQmFja2dyb3VuZFRhc2tJZGVu
dGlmaWVyIHRhc2tJZGVudGlmaWVyKQoreworICAgIGludmFsaWRUYXNrSWRlbnRpZmllciA9IHRh
c2tJZGVudGlmaWVyOworfQorCit2b2lkIFdlYktpdFNldFN0YXJ0QmFja2dyb3VuZFRhc2tCbG9j
ayhTdGFydEJhY2tncm91bmRUYXNrQmxvY2sgc3RhcnRCbG9jaykKK3sKKyAgICBCbG9ja19yZWxl
YXNlKHN0YXJ0QmFja2dyb3VuZFRhc2tCbG9jayk7CisgICAgc3RhcnRCYWNrZ3JvdW5kVGFza0Js
b2NrID0gQmxvY2tfY29weShzdGFydEJsb2NrKTsgICAgCit9CisKK3ZvaWQgV2ViS2l0U2V0RW5k
QmFja2dyb3VuZFRhc2tCbG9jayhFbmRCYWNrZ3JvdW5kVGFza0Jsb2NrIGVuZEJsb2NrKQorewor
ICAgIEJsb2NrX3JlbGVhc2UoZW5kQmFja2dyb3VuZFRhc2tCbG9jayk7CisgICAgZW5kQmFja2dy
b3VuZFRhc2tCbG9jayA9IEJsb2NrX2NvcHkoZW5kQmxvY2spOyAgICAKK30KKworV2ViQmFja2dy
b3VuZFRhc2tJZGVudGlmaWVyIGludmFsaWRXZWJCYWNrZ3JvdW5kVGFza0lkZW50aWZpZXIoKQor
eworICAgIHJldHVybiBpbnZhbGlkVGFza0lkZW50aWZpZXI7Cit9CisKK1dlYkJhY2tncm91bmRU
YXNrSWRlbnRpZmllciBzdGFydEJhY2tncm91bmRUYXNrKFZvaWRCbG9jayBleHBpcmF0aW9uSGFu
ZGxlcikKK3sKKyAgICBpZiAoIXN0YXJ0QmFja2dyb3VuZFRhc2tCbG9jaykKKyAgICAgICAgcmV0
dXJuIGludmFsaWRUYXNrSWRlbnRpZmllcjsKKyAgICByZXR1cm4gc3RhcnRCYWNrZ3JvdW5kVGFz
a0Jsb2NrKGV4cGlyYXRpb25IYW5kbGVyKTsKK30KKwordm9pZCBlbmRCYWNrZ3JvdW5kVGFzayhX
ZWJCYWNrZ3JvdW5kVGFza0lkZW50aWZpZXIgdGFza0lkZW50aWZpZXIpCit7CisgICAgaWYgKCFl
bmRCYWNrZ3JvdW5kVGFza0Jsb2NrKQorICAgICAgICByZXR1cm47CisgICAgZW5kQmFja2dyb3Vu
ZFRhc2tCbG9jayh0YXNrSWRlbnRpZmllcik7Cit9CisKKyNlbmRpZiAvLyBQTEFURk9STShJT1Mp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2lvcy9TdG9yYWdlL1dlYlNRTGl0ZURhdGFiYXNl
VHJhY2tlckNsaWVudC5oIGIvU291cmNlL1dlYktpdC9pb3MvU3RvcmFnZS9XZWJTUUxpdGVEYXRh
YmFzZVRyYWNrZXJDbGllbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zOWEyYWZmZGU5Zjg2NDJkMzIwZTg3OTAw
YThiOWM2NjhmYTljNTEzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9pb3MvU3Rv
cmFnZS9XZWJTUUxpdGVEYXRhYmFzZVRyYWNrZXJDbGllbnQuaApAQCAtMCwwICsxLDM5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCA8V2Vi
Q29yZS9TUUxpdGVEYXRhYmFzZVRyYWNrZXJDbGllbnQuaD4KKworY2xhc3MgV2ViU1FMaXRlRGF0
YWJhc2VUcmFja2VyQ2xpZW50IDogcHVibGljIFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlVHJhY2tl
ckNsaWVudCB7CitwdWJsaWM6CisgICAgc3RhdGljIFdlYlNRTGl0ZURhdGFiYXNlVHJhY2tlckNs
aWVudCogc2hhcmVkV2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50KCk7CisKKyAgICB2aXJ0
dWFsIH5XZWJTUUxpdGVEYXRhYmFzZVRyYWNrZXJDbGllbnQoKSBPVkVSUklERSB7IH0KKworICAg
IHZpcnR1YWwgdm9pZCB3aWxsQmVnaW5GaXJzdFRyYW5zYWN0aW9uKCkgT1ZFUlJJREU7CisgICAg
dmlydHVhbCB2b2lkIGRpZEZpbmlzaExhc3RUcmFuc2FjdGlvbigpIE9WRVJSSURFOworCitwcml2
YXRlOgorICAgIFdlYlNRTGl0ZURhdGFiYXNlVHJhY2tlckNsaWVudCgpIHsgfQorfTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvaW9zL1N0b3JhZ2UvV2ViU1FMaXRlRGF0YWJhc2VUcmFja2Vy
Q2xpZW50Lm1tIGIvU291cmNlL1dlYktpdC9pb3MvU3RvcmFnZS9XZWJTUUxpdGVEYXRhYmFzZVRy
YWNrZXJDbGllbnQubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTRmZjY0NTZjNTg2YmNjZmJhYjFiYWY1Y2Q5N2Rh
Zjk5YjI1YWI2MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvaW9zL1N0b3JhZ2Uv
V2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50Lm1tCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgUExBVEZPUk0oSU9T
KQorCisjaW1wb3J0ICJXZWJTUUxpdGVEYXRhYmFzZVRyYWNrZXJDbGllbnQuaCIKKworI2ltcG9y
dCAiV2ViRGF0YWJhc2VNYW5hZ2VySW50ZXJuYWwuaCIKKyNpbXBvcnQgIldlYkRhdGFiYXNlTWFu
YWdlclByaXZhdGUuaCIKKworI2ltcG9ydCA8V2ViQ29yZS9TUUxpdGVEYXRhYmFzZVRyYWNrZXIu
aD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1dlYlNRTGl0ZURhdGFiYXNlVHJhY2tl
ckNsaWVudCogV2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50OjpzaGFyZWRXZWJTUUxpdGVE
YXRhYmFzZVRyYWNrZXJDbGllbnQoKQoreworICAgIHN0YXRpYyBXZWJTUUxpdGVEYXRhYmFzZVRy
YWNrZXJDbGllbnQqIHNoYXJlZENsaWVudCA9IG5ldyBXZWJTUUxpdGVEYXRhYmFzZVRyYWNrZXJD
bGllbnQoKTsKKyAgICByZXR1cm4gc2hhcmVkQ2xpZW50OworfQorCit2b2lkIFdlYlNRTGl0ZURh
dGFiYXNlVHJhY2tlckNsaWVudDo6d2lsbEJlZ2luRmlyc3RUcmFuc2FjdGlvbigpCit7CisgICAg
W1dlYkRhdGFiYXNlTWFuYWdlciB3aWxsQmVnaW5GaXJzdFRyYW5zYWN0aW9uXTsKK30KKwordm9p
ZCBXZWJTUUxpdGVEYXRhYmFzZVRyYWNrZXJDbGllbnQ6OmRpZEZpbmlzaExhc3RUcmFuc2FjdGlv
bigpCit7CisgICAgW1dlYkRhdGFiYXNlTWFuYWdlciBkaWRGaW5pc2hMYXN0VHJhbnNhY3Rpb25d
OworfQorCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9pb3MvV2ViQ29yZVN1cHBvcnQvUG9wdXBNZW51SU9TLmggYi9Tb3VyY2UvV2ViS2l0L2lvcy9X
ZWJDb3JlU3VwcG9ydC9Qb3B1cE1lbnVJT1MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNTNjOTc4MDcyYmVkMTlh
NjdjNTc4ZmY3YjI1OTdmMjcxZjA3YWVkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC9pb3MvV2ViQ29yZVN1cHBvcnQvUG9wdXBNZW51SU9TLmgKQEAgLTAsMCArMSw1MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgUG9wdXBNZW51SU9TX2gKKyNkZWZpbmUgUG9wdXBNZW51SU9TX2gK
KworI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUG9wdXBN
ZW51Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFBvcHVwTWVudUNsaWVudDsKK30K
KworY2xhc3MgUG9wdXBNZW51SU9TIDogcHVibGljIFdlYkNvcmU6OlBvcHVwTWVudSB7CitwdWJs
aWM6CisgICAgUG9wdXBNZW51SU9TKFdlYkNvcmU6OlBvcHVwTWVudUNsaWVudCopOworCisgICAg
dmlydHVhbCB2b2lkIHNob3coY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIFdlYkNvcmU6OkZyYW1l
VmlldyosIGludCBpbmRleCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGhpZGUoKSBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRnJvbUVsZW1lbnQoKSBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGlzY29ubmVjdENsaWVudCgpIE9WRVJSSURFOworCitwcml2YXRlOgor
ICAgIFdlYkNvcmU6OlBvcHVwTWVudUNsaWVudCogY2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV9w
b3B1cENsaWVudDsgfQorCisgICAgV2ViQ29yZTo6UG9wdXBNZW51Q2xpZW50KiBtX3BvcHVwQ2xp
ZW50OworfTsKKworI2VuZGlmIC8vIFBvcHVwTWVudUlPU19oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2lvcy9XZWJDb3JlU3VwcG9ydC9Qb3B1cE1lbnVJT1MubW0gYi9Tb3VyY2UvV2ViS2l0
L2lvcy9XZWJDb3JlU3VwcG9ydC9Qb3B1cE1lbnVJT1MubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjdhZGVmZDhk
MDYyYzI1ZDc5YjViZjFlZjhjMTdlNWU0NGNiZDA5ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvaW9zL1dlYkNvcmVTdXBwb3J0L1BvcHVwTWVudUlPUy5tbQpAQCAtMCwwICsxLDU0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiUG9wdXBNZW51SU9TLmgiCisKKyNpZiBQ
TEFURk9STShJT1MpCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitQb3B1cE1lbnVJT1M6
OlBvcHVwTWVudUlPUyhQb3B1cE1lbnVDbGllbnQqIGNsaWVudCkKKyAgICA6IG1fcG9wdXBDbGll
bnQoY2xpZW50KQoreworfQorCit2b2lkIFBvcHVwTWVudUlPUzo6c2hvdyhjb25zdCBJbnRSZWN0
JiwgRnJhbWVWaWV3KiwgaW50IC8qaW5kZXgqLykKK3sKK30KKwordm9pZCBQb3B1cE1lbnVJT1M6
OmhpZGUoKQoreworfQorICAgIAordm9pZCBQb3B1cE1lbnVJT1M6OnVwZGF0ZUZyb21FbGVtZW50
KCkKK3sKK30KKwordm9pZCBQb3B1cE1lbnVJT1M6OmRpc2Nvbm5lY3RDbGllbnQoKQoreworICAg
IG1fcG9wdXBDbGllbnQgPSAwOworfQorCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9pb3MvV2ViQ29yZVN1cHBvcnQvU2VhcmNoUG9wdXBNZW51SU9T
LmNwcCBiL1NvdXJjZS9XZWJLaXQvaW9zL1dlYkNvcmVTdXBwb3J0L1NlYXJjaFBvcHVwTWVudUlP
Uy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNzVkYTZlZGM2MGJjNDFjZDA4YmJmYzgzODlkOGQzOTMwOGU2NGM0
ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvaW9zL1dlYkNvcmVTdXBwb3J0L1Nl
YXJjaFBvcHVwTWVudUlPUy5jcHAKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJTZWFyY2hQ
b3B1cE1lbnVJT1MuaCIKKworI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgorCisj
aWYgUExBVEZPUk0oSU9TKQorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworU2VhcmNoUG9w
dXBNZW51SU9TOjpTZWFyY2hQb3B1cE1lbnVJT1MoUG9wdXBNZW51Q2xpZW50KiBjbGllbnQpCisg
ICAgOiBtX3BvcHVwKGFkb3B0UmVmKG5ldyBQb3B1cE1lbnVJT1MoY2xpZW50KSkpCit7Cit9CisK
K1BvcHVwTWVudSogU2VhcmNoUG9wdXBNZW51SU9TOjpwb3B1cE1lbnUoKQoreworICAgIHJldHVy
biBtX3BvcHVwLmdldCgpOworfQorCit2b2lkIFNlYXJjaFBvcHVwTWVudUlPUzo6c2F2ZVJlY2Vu
dFNlYXJjaGVzKGNvbnN0IEF0b21pY1N0cmluZyYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiAvKnNl
YXJjaEl0ZW1zKi8pCit7Cit9CisKK3ZvaWQgU2VhcmNoUG9wdXBNZW51SU9TOjpsb2FkUmVjZW50
U2VhcmNoZXMoY29uc3QgQXRvbWljU3RyaW5nJiwgVmVjdG9yPFN0cmluZz4mIC8qc2VhcmNoSXRl
bXMqLykKK3sKK30KKworYm9vbCBTZWFyY2hQb3B1cE1lbnVJT1M6OmVuYWJsZWQoKQoreworICAg
IHJldHVybiBmYWxzZTsKK30KKworI2VuZGlmIC8vICFQTEFURk9STShJT1MpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2lvcy9XZWJDb3JlU3VwcG9ydC9TZWFyY2hQb3B1cE1lbnVJT1MuaCBi
L1NvdXJjZS9XZWJLaXQvaW9zL1dlYkNvcmVTdXBwb3J0L1NlYXJjaFBvcHVwTWVudUlPUy5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmFlNjRjYzBlYTMyYjUxYmJmNGI3NjlkMTk1MGYzMGVlYjQyOTIzZmMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2lvcy9XZWJDb3JlU3VwcG9ydC9TZWFyY2hQb3B1
cE1lbnVJT1MuaApAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIE5v
a2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYg
U2VhcmNoUG9wdXBNZW51SU9TX2gKKyNkZWZpbmUgU2VhcmNoUG9wdXBNZW51SU9TX2gKKworI2lu
Y2x1ZGUgIlBvcHVwTWVudUlPUy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvU2VhcmNoUG9wdXBNZW51
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFBvcHVwTWVudUNsaWVudDsKK30KKwor
Y2xhc3MgU2VhcmNoUG9wdXBNZW51SU9TIDogcHVibGljIFdlYkNvcmU6OlNlYXJjaFBvcHVwTWVu
dSB7CitwdWJsaWM6CisgICAgU2VhcmNoUG9wdXBNZW51SU9TKFdlYkNvcmU6OlBvcHVwTWVudUNs
aWVudCopOworCisgICAgdmlydHVhbCBXZWJDb3JlOjpQb3B1cE1lbnUqIHBvcHVwTWVudSgpIE9W
RVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzYXZlUmVjZW50U2VhcmNoZXMoY29uc3QgQXRvbWlj
U3RyaW5nJiBuYW1lLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgc2VhcmNoSXRlbXMpIE9WRVJSSURF
OworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVjZW50U2VhcmNoZXMoY29uc3QgQXRvbWljU3RyaW5n
JiBuYW1lLCBWZWN0b3I8U3RyaW5nPiYgc2VhcmNoSXRlbXMpIE9WRVJSSURFOworICAgIHZpcnR1
YWwgYm9vbCBlbmFibGVkKCkgT1ZFUlJJREU7CisKK3ByaXZhdGU6CisgICAgUmVmUHRyPFBvcHVw
TWVudUlPUz4gbV9wb3B1cDsKK307CisKKyNlbmRpZiAvLyBTZWFyY2hQb3B1cE1lbnVJT1NfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2FyZXRDaGFu
Z2VMaXN0ZW5lci5oIGIvU291cmNlL1dlYktpdC9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2FyZXRD
aGFuZ2VMaXN0ZW5lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIxNzk0NDYwNDUxZDdjNmM5ZTMzOTJmNjA2ZGY0
N2Q0MWEwNTMwZDAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2lvcy9XZWJDb3Jl
U3VwcG9ydC9XZWJDYXJldENoYW5nZUxpc3RlbmVyLmgKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBw
bGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCitAcHJvdG9jb2wgV2ViQ2FyZXRDaGFuZ2VMaXN0ZW5lcgorLSAodm9pZCljYXJldENo
YW5nZWQ7CitAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2lvcy9XZWJDb3JlU3VwcG9y
dC9XZWJDaHJvbWVDbGllbnRJT1MuaCBiL1NvdXJjZS9XZWJLaXQvaW9zL1dlYkNvcmVTdXBwb3J0
L1dlYkNocm9tZUNsaWVudElPUy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQwZTRjNTQ3ZWZhODc3ZTNjY2NhYmM0
ZmFlZjQzMTc1YmY0ZmYxN2EKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2lvcy9X
ZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnRJT1MuaApAQCAtMCwwICsxLDkzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmIFBMQVRGT1JNKElPUykKKyNpbXBvcnQgIldlYkNocm9tZUNsaWVu
dC5oIgorCitjbGFzcyBXZWJDaHJvbWVDbGllbnRJT1MgOiBwdWJsaWMgV2ViQ2hyb21lQ2xpZW50
IHsKK3B1YmxpYzoKKyAgICBXZWJDaHJvbWVDbGllbnRJT1MoV2ViVmlldyAqd2ViVmlldykKKyAg
ICAgICAgOiBXZWJDaHJvbWVDbGllbnQod2ViVmlldykKKyAgICAgICAgLCBtX2Zvcm1Ob3RpZmlj
YXRpb25TdXBwcmVzc2lvbnMoMCkgeyB9CisgICAgCisgICAgdmlydHVhbCB2b2lkIHNldFdpbmRv
d1JlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBX
ZWJDb3JlOjpGbG9hdFJlY3Qgd2luZG93UmVjdCgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9p
ZCBzZXRTdGF0dXNiYXJUZXh0KGNvbnN0IFdURjo6U3RyaW5nJikgT1ZFUlJJREUgeyB9CisKKyAg
ICB2aXJ0dWFsIHZvaWQgZm9jdXMoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgdGFrZUZv
Y3VzKFdlYkNvcmU6OkZvY3VzRGlyZWN0aW9uKSBPVkVSUklERSB7IH0KKworICAgIHZpcnR1YWwg
dm9pZCBydW5KYXZhU2NyaXB0QWxlcnQoV2ViQ29yZTo6RnJhbWUqLCBjb25zdCBXVEY6OlN0cmlu
ZyYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBydW5KYXZhU2NyaXB0Q29uZmlybShXZWJD
b3JlOjpGcmFtZSosIGNvbnN0IFdURjo6U3RyaW5nJikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBi
b29sIHJ1bkphdmFTY3JpcHRQcm9tcHQoV2ViQ29yZTo6RnJhbWUqLCBjb25zdCBXVEY6OlN0cmlu
ZyYgbWVzc2FnZSwgY29uc3QgV1RGOjpTdHJpbmcmIGRlZmF1bHRWYWx1ZSwgV1RGOjpTdHJpbmcm
IHJlc3VsdCkgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgcnVuT3BlblBhbmVsKFdlYkNv
cmU6OkZyYW1lKiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpGaWxlQ2hvb3Nlcj4pIE9WRVJSSURFOwor
CisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUHJldmVudERl
ZmF1bHRGb3JFdmVudCgpIE9WRVJSSURFOworI2VuZGlmCisgICAgdmlydHVhbCB2b2lkIGRpZFJl
Y2VpdmVEb2NUeXBlKFdlYkNvcmU6OkZyYW1lKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lk
IHNldE5lZWRzU2Nyb2xsTm90aWZpY2F0aW9ucyhXZWJDb3JlOjpGcmFtZSosIGJvb2wpIE9WRVJS
SURFOworICAgIHZpcnR1YWwgdm9pZCBvYnNlcnZlZENvbnRlbnRDaGFuZ2UoV2ViQ29yZTo6RnJh
bWUqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJDb250ZW50Q2hhbmdlT2JzZXJ2
ZXJzKFdlYkNvcmU6OkZyYW1lKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNo
Vmlld3BvcnRQcm9wZXJ0aWVzRGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0QXJndW1l
bnRzJikgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeVJldmVhbGVkU2Vs
ZWN0aW9uQnlTY3JvbGxpbmdGcmFtZShXZWJDb3JlOjpGcmFtZSopIE9WRVJSSURFOworICAgIHZp
cnR1YWwgYm9vbCBpc1N0b3BwaW5nKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRpZExh
eW91dChMYXlvdXRUeXBlKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkU3RhcnRPdmVy
Zmxvd1Njcm9sbCgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkaWRFbmRPdmVyZmxvd1Nj
cm9sbCgpIE9WRVJSSURFOworCisgICAgdmlydHVhbCB2b2lkIHN1cHByZXNzRm9ybU5vdGlmaWNh
dGlvbnMoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzdG9yZUZvcm1Ob3RpZmljYXRp
b25zKCkgT1ZFUlJJREU7CisgICAgCisgICAgdmlydHVhbCB2b2lkIGZvcm1TdGF0ZURpZENoYW5n
ZShjb25zdCBXZWJDb3JlOjpOb2RlKikgT1ZFUlJJREUgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQg
ZWxlbWVudERpZEZvY3VzKGNvbnN0IFdlYkNvcmU6Ok5vZGUqKSBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIHZvaWQgZWxlbWVudERpZEJsdXIoY29uc3QgV2ViQ29yZTo6Tm9kZSopIE9WRVJSSURFOwor
CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIHZpcnR1YWwgdm9pZCBhdHRh
Y2hSb290R3JhcGhpY3NMYXllcihXZWJDb3JlOjpGcmFtZSosIFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXIqKSBPVkVSUklERTsKKyNlbmRpZgorCisgICAgdmlydHVhbCB2b2lkIGRpZEZsdXNoQ29tcG9z
aXRpbmdMYXllcnMoKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVWaWV3cG9y
dENvbnN0cmFpbmVkTGF5ZXJzKEhhc2hNYXA8UGxhdGZvcm1MYXllciosIE93blB0cjxXZWJDb3Jl
OjpWaWV3cG9ydENvbnN0cmFpbnRzPiA+JiwgSGFzaE1hcDxQbGF0Zm9ybUxheWVyKiwgUGxhdGZv
cm1MYXllcio+JikgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIGJvb2wgZmV0Y2hDdXN0b21GaXhl
ZFBvc2l0aW9uTGF5b3V0UmVjdChXZWJDb3JlOjpJbnRSZWN0JikgT1ZFUlJJREU7CisgICAgdmly
dHVhbCB2b2lkIGFkZE9yVXBkYXRlU2Nyb2xsaW5nTGF5ZXIoV2ViQ29yZTo6Tm9kZSosIFBsYXRm
b3JtTGF5ZXIqLCBQbGF0Zm9ybUxheWVyKiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIGJvb2wg
YWxsb3dIb3Jpem9udGFsU2Nyb2xsYmFyLCBib29sIGFsbG93VmVydGljYWxTY3JvbGxiYXIpIE9W
RVJSSURFOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVTY3JvbGxpbmdMYXllcihXZWJDb3JlOjpO
b2RlKiwgUGxhdGZvcm1MYXllciosIFBsYXRmb3JtTGF5ZXIqKSBPVkVSUklERTsKKworICAgIHZp
cnR1YWwgYm9vbCBzZWxlY3RJdGVtV3JpdGluZ0RpcmVjdGlvbklzTmF0dXJhbCgpIE9WRVJSSURF
OworICAgIHZpcnR1YWwgYm9vbCBzZWxlY3RJdGVtQWxpZ25tZW50Rm9sbG93c01lbnVXcml0aW5n
RGlyZWN0aW9uKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OlBv
cHVwTWVudT4gY3JlYXRlUG9wdXBNZW51KFdlYkNvcmU6OlBvcHVwTWVudUNsaWVudCopIGNvbnN0
IE9WRVJSSURFOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpTZWFyY2hQb3B1cE1l
bnU+IGNyZWF0ZVNlYXJjaFBvcHVwTWVudShXZWJDb3JlOjpQb3B1cE1lbnVDbGllbnQqKSBjb25z
dCBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCB3ZWJBcHBPcmllbnRhdGlvbnNVcGRhdGVk
KCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGZvY3VzZWROb2RlQ2hhbmdlZChXZWJDb3Jl
OjpOb2RlKikgT1ZFUlJJREU7CisKK3ByaXZhdGU6CisgICAgaW50IG1fZm9ybU5vdGlmaWNhdGlv
blN1cHByZXNzaW9uczsKK307CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvaW9z
L1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudElPUy5tbSBiL1NvdXJjZS9XZWJLaXQvaW9z
L1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudElPUy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNTJhY2Jl
MmRjZjIyMDVkNTAxNzA2ZTQ5ZGIyYWE3N2M0ZDViMGY0Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50SU9TLm1tCkBAIC0w
LDAgKzEsMzA3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIFBMQVRGT1JNKElPUykKKyNpbXBv
cnQgIldlYkNocm9tZUNsaWVudElPUy5oIgorCisjaW1wb3J0ICJET01Ob2RlSW50ZXJuYWwuaCIK
KyNpbXBvcnQgIlBvcHVwTWVudUlPUy5oIgorI2ltcG9ydCAiU2VhcmNoUG9wdXBNZW51SU9TLmgi
CisjaW1wb3J0ICJXZWJEZWxlZ2F0ZUltcGxlbWVudGF0aW9uQ2FjaGluZy5oIgorI2ltcG9ydCAi
V2ViRml4ZWRQb3NpdGlvbkNvbnRlbnQuaCIKKyNpbXBvcnQgIldlYkZpeGVkUG9zaXRpb25Db250
ZW50SW50ZXJuYWwuaCIKKyNpbXBvcnQgIldlYkZvcm1EZWxlZ2F0ZS5oIgorI2ltcG9ydCAiV2Vi
RnJhbWVJbnRlcm5hbC5oIgorI2ltcG9ydCAiV2ViS2l0U3lzdGVtSW50ZXJmYWNlLmgiCisjaW1w
b3J0ICJXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lci5oIgorI2ltcG9ydCAiV2ViVUlEZWxlZ2F0
ZS5oIgorI2ltcG9ydCAiV2ViVUlEZWxlZ2F0ZVByaXZhdGUuaCIKKyNpbXBvcnQgIldlYlZpZXcu
aCIKKyNpbXBvcnQgIldlYlZpZXdJbnRlcm5hbC5oIgorI2ltcG9ydCAiV2ViVmlld1ByaXZhdGUu
aCIKKyNpbXBvcnQgIldlYlVJS2l0RGVsZWdhdGUuaCIKKworI2ltcG9ydCA8d3RmL0hhc2hNYXAu
aD4KKyNpbXBvcnQgPHd0Zi9SZWZQdHIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRmlsZUNob29zZXIu
aD4KKyNpbXBvcnQgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0ZyYW1l
Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUv
SFRNTElucHV0RWxlbWVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9IVE1MTmFtZXMuaD4KKyNpbXBv
cnQgPFdlYkNvcmUvSW50UmVjdC5oPgorI2ltcG9ydCA8V2ViQ29yZS9Ob2RlLmg+CisjaW1wb3J0
IDxXZWJDb3JlL1JlbmRlckJveC5oPgorI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJPYmplY3QuaD4K
KyNpbXBvcnQgPFdlYkNvcmUvUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzSU9TLmg+CisjaW1wb3J0
IDxXZWJDb3JlL1Njcm9sbGluZ0NvbnN0cmFpbnRzLmg+CisjaW1wb3J0IDxXZWJDb3JlL1dBS1dp
bmRvdy5oPgorI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlVGhyZWFkTWVzc2FnZS5oPgorCit1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKKwordm9pZCBXZWJDaHJvbWVDbGllbnRJT1M6OnNldFdpbmRv
d1JlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiByKQoreworICAgIFtbd2ViVmlldygpIF9V
SURlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3OndlYlZpZXcoKSBzZXRGcmFtZTpyXTsKK30KKwor
RmxvYXRSZWN0IFdlYkNocm9tZUNsaWVudElPUzo6d2luZG93UmVjdCgpCit7CisgICAgQ0dSZWN0
IHdpbmRvd1JlY3QgPSBbW3dlYlZpZXcoKSBfVUlEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlld0Zy
YW1lOndlYlZpZXcoKV07CisgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3Qod2luZG93UmVjdCk7
Cit9CisKK3ZvaWQgV2ViQ2hyb21lQ2xpZW50SU9TOjpmb2N1cygpCit7CisgICAgW1t3ZWJWaWV3
KCkgX1VJRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXdGb2N1czp3ZWJWaWV3KCldOworfQorCit2
b2lkIFdlYkNocm9tZUNsaWVudElPUzo6cnVuSmF2YVNjcmlwdEFsZXJ0KEZyYW1lKiBmcmFtZSwg
Y29uc3QgV1RGOjpTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgV2ViVGhyZWFkTG9ja1B1c2hNb2Rh
bCgpOworICAgIFtbd2ViVmlldygpIF9VSURlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3OndlYlZp
ZXcoKSBydW5KYXZhU2NyaXB0QWxlcnRQYW5lbFdpdGhNZXNzYWdlOm1lc3NhZ2UgaW5pdGlhdGVk
QnlGcmFtZTpraXQoZnJhbWUpXTsKKyAgICBXZWJUaHJlYWRMb2NrUG9wTW9kYWwoKTsKK30KKwor
Ym9vbCBXZWJDaHJvbWVDbGllbnRJT1M6OnJ1bkphdmFTY3JpcHRDb25maXJtKEZyYW1lKiBmcmFt
ZSwgY29uc3QgV1RGOjpTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgV2ViVGhyZWFkTG9ja1B1c2hN
b2RhbCgpOworICAgIGJvb2wgcmVzdWx0ID0gW1t3ZWJWaWV3KCkgX1VJRGVsZWdhdGVGb3J3YXJk
ZXJdIHdlYlZpZXc6d2ViVmlldygpIHJ1bkphdmFTY3JpcHRDb25maXJtUGFuZWxXaXRoTWVzc2Fn
ZTptZXNzYWdlIGluaXRpYXRlZEJ5RnJhbWU6a2l0KGZyYW1lKV07CisgICAgV2ViVGhyZWFkTG9j
a1BvcE1vZGFsKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBXZWJDaHJvbWVDbGll
bnRJT1M6OnJ1bkphdmFTY3JpcHRQcm9tcHQoRnJhbWUqIGZyYW1lLCBjb25zdCBXVEY6OlN0cmlu
ZyYgcHJvbXB0LCBjb25zdCBXVEY6OlN0cmluZyYgZGVmYXVsdFRleHQsIFdURjo6U3RyaW5nJiBy
ZXN1bHQpCit7CisgICAgV2ViVGhyZWFkTG9ja1B1c2hNb2RhbCgpOworICAgIHJlc3VsdCA9IFtb
d2ViVmlldygpIF9VSURlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3OndlYlZpZXcoKSBydW5KYXZh
U2NyaXB0VGV4dElucHV0UGFuZWxXaXRoUHJvbXB0OnByb21wdCBkZWZhdWx0VGV4dDpkZWZhdWx0
VGV4dCBpbml0aWF0ZWRCeUZyYW1lOmtpdChmcmFtZSldOworICAgIFdlYlRocmVhZExvY2tQb3BN
b2RhbCgpOworICAgIHJldHVybiAhcmVzdWx0LmlzTnVsbCgpOworfQorCit2b2lkIFdlYkNocm9t
ZUNsaWVudElPUzo6cnVuT3BlblBhbmVsKEZyYW1lKiwgUGFzc1JlZlB0cjxGaWxlQ2hvb3Nlcj4g
Y2hvb3NlcikKK3sKKyAgICBjb25zdCBGaWxlQ2hvb3NlclNldHRpbmdzJiBzZXR0aW5ncyA9IGNo
b29zZXItPnNldHRpbmdzKCk7CisgICAgQk9PTCBhbGxvd011bHRpcGxlRmlsZXMgPSBzZXR0aW5n
cy5hbGxvd3NNdWx0aXBsZUZpbGVzOworICAgIFZlY3RvcjxTdHJpbmc+IGFjY2VwdE1JTUVUeXBl
cyA9IHNldHRpbmdzLmFjY2VwdE1JTUVUeXBlczsKKyAgICBXZWJPcGVuUGFuZWxSZXN1bHRMaXN0
ZW5lciAqbGlzdGVuZXIgPSBbW1dlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyIGFsbG9jXSBpbml0
V2l0aENob29zZXI6Y2hvb3Nlcl07CisKKyAgICAvLyBDb252ZXJ0IHRoZSBhY2NlcHQgYXR0cmli
dXRlIHN0cmluZyBpbnRvIGEgbGlzdCBvZiBNSU1FIHR5cGVzLgorICAgIHNpemVfdCBudW1NSU1F
VHlwZXMgPSBhY2NlcHRNSU1FVHlwZXMuc2l6ZSgpOworICAgIE5TTXV0YWJsZUFycmF5ICptaW1l
VHlwZXMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6bnVtTUlNRVR5cGVzXTsK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bU1JTUVUeXBlczsgKytpKQorICAgICAgICBb
bWltZVR5cGVzIGFkZE9iamVjdDphY2NlcHRNSU1FVHlwZXNbaV1dOworCisgICAgaWYgKFdlYlRo
cmVhZElzQ3VycmVudCgpKSB7CisgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9t
YWluX3F1ZXVlKCksIF57CisgICAgICAgICAgICBbW3dlYlZpZXcoKSBfVUlLaXREZWxlZ2F0ZUZv
cndhcmRlcl0gd2ViVmlldzp3ZWJWaWV3KCkgcnVuT3BlblBhbmVsRm9yRmlsZUJ1dHRvbldpdGhS
ZXN1bHRMaXN0ZW5lcjpsaXN0ZW5lciBhbGxvd011bHRpcGxlRmlsZXM6YWxsb3dNdWx0aXBsZUZp
bGVzIGFjY2VwdE1JTUVUeXBlczptaW1lVHlwZXNdOworICAgICAgICB9KTsKKyAgICB9IGVsc2UK
KyAgICAgICAgW1t3ZWJWaWV3KCkgX1VJS2l0RGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6d2Vi
VmlldygpIHJ1bk9wZW5QYW5lbEZvckZpbGVCdXR0b25XaXRoUmVzdWx0TGlzdGVuZXI6bGlzdGVu
ZXIgYWxsb3dNdWx0aXBsZUZpbGVzOmFsbG93TXVsdGlwbGVGaWxlcyBhY2NlcHRNSU1FVHlwZXM6
bWltZVR5cGVzXTsKKworICAgIFtsaXN0ZW5lciByZWxlYXNlXTsKK30KKworI2lmIEVOQUJMRShU
T1VDSF9FVkVOVFMpCit2b2lkIFdlYkNocm9tZUNsaWVudElPUzo6ZGlkUHJldmVudERlZmF1bHRG
b3JFdmVudCgpCit7CisgICAgW1t3ZWJWaWV3KCkgX1VJS2l0RGVsZWdhdGVGb3J3YXJkZXJdIHdl
YlZpZXdEaWRQcmV2ZW50RGVmYXVsdEZvckV2ZW50OndlYlZpZXcoKV07Cit9CisjZW5kaWYKKwor
dm9pZCBXZWJDaHJvbWVDbGllbnRJT1M6OmRpZFJlY2VpdmVEb2NUeXBlKFdlYkNvcmU6OkZyYW1l
KiBmcmFtZSkKK3sKKyAgICBbW3dlYlZpZXcoKSBfVUlLaXREZWxlZ2F0ZUZvcndhcmRlcl0gd2Vi
Vmlldzp3ZWJWaWV3KCkgZGlkUmVjZWl2ZURvY1R5cGVGb3JGcmFtZTpraXQoZnJhbWUpXTsKK30K
Kwordm9pZCBXZWJDaHJvbWVDbGllbnRJT1M6OnNldE5lZWRzU2Nyb2xsTm90aWZpY2F0aW9ucyhX
ZWJDb3JlOjpGcmFtZSogZnJhbWUsIGJvb2wgZmxhZykKK3sKKyAgICBbW3dlYlZpZXcoKSBfVUlL
aXREZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzp3ZWJWaWV3KCkgbmVlZHNTY3JvbGxOb3RpZmlj
YXRpb25zOltOU051bWJlciBudW1iZXJXaXRoQm9vbDpmbGFnXSBmb3JGcmFtZTpraXQoZnJhbWUp
XTsKK30KKwordm9pZCBXZWJDaHJvbWVDbGllbnRJT1M6Om9ic2VydmVkQ29udGVudENoYW5nZShX
ZWJDb3JlOjpGcmFtZSogZnJhbWUpCit7CisgICAgW1t3ZWJWaWV3KCkgX1VJS2l0RGVsZWdhdGVG
b3J3YXJkZXJdIHdlYlZpZXc6d2ViVmlldygpIGRpZE9ic2VydmVEZWZlcnJlZENvbnRlbnRDaGFu
Z2U6V0tPYnNlcnZlZENvbnRlbnRDaGFuZ2UoKSBmb3JGcmFtZTpraXQoZnJhbWUpXTsKK30KKwor
dm9pZCBXZWJDaHJvbWVDbGllbnRJT1M6OmNsZWFyQ29udGVudENoYW5nZU9ic2VydmVycyhXZWJD
b3JlOjpGcmFtZSogZnJhbWUpCit7CisgICAgQVNTRVJUKFdlYlRocmVhZENvdW50T2ZPYnNlcnZl
ZENvbnRlbnRNb2RpZmllcnMoKSA+IDApOworICAgIGlmIChXZWJUaHJlYWRDb3VudE9mT2JzZXJ2
ZWRDb250ZW50TW9kaWZpZXJzKCkgPiAwKSB7CisgICAgICAgIFdlYlRocmVhZENsZWFyT2JzZXJ2
ZWRDb250ZW50TW9kaWZpZXJzKCk7CisgICAgICAgIG9ic2VydmVkQ29udGVudENoYW5nZShmcmFt
ZSk7CisgICAgfSAgICAgICAgCit9CisKK3N0YXRpYyBpbmxpbmUgTlNEaWN0aW9uYXJ5KiBkaWN0
aW9uYXJ5Rm9yVmlld3BvcnRBcmd1bWVudHMoY29uc3QgV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVu
dHMmIGFyZ3VtZW50cykKK3sKKyAgICByZXR1cm4gQHsgQCJpbml0aWFsLXNjYWxlIjpAKGFyZ3Vt
ZW50cy56b29tKSwKKyAgICAgICAgICAgICAgQCJtaW5pbXVtLXNjYWxlIjpAKGFyZ3VtZW50cy5t
aW5ab29tKSwKKyAgICAgICAgICAgICAgQCJtYXhpbXVtLXNjYWxlIjpAKGFyZ3VtZW50cy5tYXha
b29tKSwKKyAgICAgICAgICAgICAgQCJ1c2VyLXNjYWxhYmxlIjpAKGFyZ3VtZW50cy51c2VyWm9v
bSksCisgICAgICAgICAgICAgIEAid2lkdGgiOkAoYXJndW1lbnRzLndpZHRoKSwKKyAgICAgICAg
ICAgICAgQCJoZWlnaHQiOkAoYXJndW1lbnRzLmhlaWdodCkgfTsKK30KKwordm9pZCBXZWJDaHJv
bWVDbGllbnRJT1M6OmRpc3BhdGNoVmlld3BvcnRQcm9wZXJ0aWVzRGlkQ2hhbmdlKGNvbnN0IFdl
YkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzJiBhcmd1bWVudHMpIGNvbnN0Cit7CisgICAgW1t3ZWJW
aWV3KCkgX1VJS2l0RGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6d2ViVmlldygpIGRpZFJlY2Vp
dmVWaWV3cG9ydEFyZ3VtZW50czpkaWN0aW9uYXJ5Rm9yVmlld3BvcnRBcmd1bWVudHMoYXJndW1l
bnRzKV07Cit9CisKK3ZvaWQgV2ViQ2hyb21lQ2xpZW50SU9TOjpub3RpZnlSZXZlYWxlZFNlbGVj
dGlvbkJ5U2Nyb2xsaW5nRnJhbWUoV2ViQ29yZTo6RnJhbWUqIGZyYW1lKQoreworICAgIFtbd2Vi
VmlldygpIF9VSUtpdERlbGVnYXRlRm9yd2FyZGVyXSByZXZlYWxlZFNlbGVjdGlvbkJ5U2Nyb2xs
aW5nV2ViRnJhbWU6a2l0KGZyYW1lKV07Cit9CisKK2Jvb2wgV2ViQ2hyb21lQ2xpZW50SU9TOjpp
c1N0b3BwaW5nKCkKK3sKKyAgICByZXR1cm4gW3dlYlZpZXcoKSBfaXNTdG9wcGluZ107Cit9CisK
K3ZvaWQgV2ViQ2hyb21lQ2xpZW50SU9TOjpkaWRMYXlvdXQoTGF5b3V0VHlwZSBjaGFuZ2VUeXBl
KQoreworICAgIFtbd2ViVmlldygpIF9VSUtpdERlbGVnYXRlXSB3ZWJUaHJlYWRXZWJWaWV3RGlk
TGF5b3V0OndlYlZpZXcoKSBieVNjcm9sbGluZzooY2hhbmdlVHlwZSA9PSBDaHJvbWVDbGllbnQ6
OlNjcm9sbCldOworfQorCit2b2lkIFdlYkNocm9tZUNsaWVudElPUzo6ZGlkU3RhcnRPdmVyZmxv
d1Njcm9sbCgpCit7CisgICAgW1tbd2ViVmlldygpIF9VSUtpdERlbGVnYXRlRm9yd2FyZGVyXSBh
c3luY0ZvcndhcmRlcl0gd2ViVmlld0RpZFN0YXJ0T3ZlcmZsb3dTY3JvbGw6d2ViVmlldygpXTsK
K30KKwordm9pZCBXZWJDaHJvbWVDbGllbnRJT1M6OmRpZEVuZE92ZXJmbG93U2Nyb2xsKCkKK3sK
KyAgICBbW1t3ZWJWaWV3KCkgX1VJS2l0RGVsZWdhdGVGb3J3YXJkZXJdIGFzeW5jRm9yd2FyZGVy
XSB3ZWJWaWV3RGlkRW5kT3ZlcmZsb3dTY3JvbGw6d2ViVmlldygpXTsKK30KKwordm9pZCBXZWJD
aHJvbWVDbGllbnRJT1M6OnN1cHByZXNzRm9ybU5vdGlmaWNhdGlvbnMoKSAKK3sKKyAgICBtX2Zv
cm1Ob3RpZmljYXRpb25TdXBwcmVzc2lvbnMrKzsKK30KKwordm9pZCBXZWJDaHJvbWVDbGllbnRJ
T1M6OnJlc3RvcmVGb3JtTm90aWZpY2F0aW9ucygpIAoreworICAgIG1fZm9ybU5vdGlmaWNhdGlv
blN1cHByZXNzaW9ucy0tOworICAgIEFTU0VSVChtX2Zvcm1Ob3RpZmljYXRpb25TdXBwcmVzc2lv
bnMgPj0gMCk7CisgICAgaWYgKG1fZm9ybU5vdGlmaWNhdGlvblN1cHByZXNzaW9ucyA8IDApCisg
ICAgICAgIG1fZm9ybU5vdGlmaWNhdGlvblN1cHByZXNzaW9ucyA9IDA7Cit9CisKK3ZvaWQgV2Vi
Q2hyb21lQ2xpZW50SU9TOjplbGVtZW50RGlkRm9jdXMoY29uc3QgV2ViQ29yZTo6Tm9kZSogbm9k
ZSkKK3sKKyAgICBpZiAobV9mb3JtTm90aWZpY2F0aW9uU3VwcHJlc3Npb25zIDw9IDApCisgICAg
ICAgIFtbd2ViVmlldygpIF9VSUtpdERlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3OndlYlZpZXco
KSBlbGVtZW50RGlkRm9jdXNOb2RlOmtpdChjb25zdF9jYXN0PFdlYkNvcmU6Ok5vZGUqPihub2Rl
KSldOworfQorCit2b2lkIFdlYkNocm9tZUNsaWVudElPUzo6ZWxlbWVudERpZEJsdXIoY29uc3Qg
V2ViQ29yZTo6Tm9kZSogbm9kZSkKK3sKKyAgICBpZiAobV9mb3JtTm90aWZpY2F0aW9uU3VwcHJl
c3Npb25zIDw9IDApCisgICAgICAgIFtbd2ViVmlldygpIF9VSUtpdERlbGVnYXRlRm9yd2FyZGVy
XSB3ZWJWaWV3OndlYlZpZXcoKSBlbGVtZW50RGlkQmx1ck5vZGU6a2l0KGNvbnN0X2Nhc3Q8V2Vi
Q29yZTo6Tm9kZSo+KG5vZGUpKV07Cit9CisKK2Jvb2wgV2ViQ2hyb21lQ2xpZW50SU9TOjpzZWxl
Y3RJdGVtV3JpdGluZ0RpcmVjdGlvbklzTmF0dXJhbCgpCit7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitib29sIFdlYkNocm9tZUNsaWVudElPUzo6c2VsZWN0SXRlbUFsaWdubWVudEZvbGxvd3NN
ZW51V3JpdGluZ0RpcmVjdGlvbigpCit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK1Bhc3NSZWZQ
dHI8V2ViQ29yZTo6UG9wdXBNZW51PiBXZWJDaHJvbWVDbGllbnRJT1M6OmNyZWF0ZVBvcHVwTWVu
dShXZWJDb3JlOjpQb3B1cE1lbnVDbGllbnQqIGNsaWVudCkgY29uc3QKK3sKKyAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFBvcHVwTWVudUlPUyhjbGllbnQpKTsKK30KKworUGFzc1JlZlB0cjxXZWJD
b3JlOjpTZWFyY2hQb3B1cE1lbnU+IFdlYkNocm9tZUNsaWVudElPUzo6Y3JlYXRlU2VhcmNoUG9w
dXBNZW51KFdlYkNvcmU6OlBvcHVwTWVudUNsaWVudCogY2xpZW50KSBjb25zdAoreworICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgU2VhcmNoUG9wdXBNZW51SU9TKGNsaWVudCkpOworfQorCisjaWYg
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQordm9pZCBXZWJDaHJvbWVDbGllbnRJT1M6OmF0
dGFjaFJvb3RHcmFwaGljc0xheWVyKEZyYW1lKiwgR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXll
cikKK3sKKyAgICAvLyBGSVhNRTogZm9yIG5vbi1yb290IGZyYW1lcyB3ZSByZWx5IG9uIFJlbmRl
clZpZXcgcG9zaXRpb25pbmcgdGhlIHJvb3QgbGF5ZXIsCisgICAgLy8gd2hpY2ggaXMgYSBoYWNr
LiA8cmRhcjovL3Byb2JsZW0vNTkwNjE0Nj4KKyAgICAvLyBTZW5kIHRoZSBkZWxlZ2F0ZSBtZXNz
YWdlIG9uIHRoZSB3ZWIgdGhyZWFkIHRvIGF2b2lkIDxyZGFyOi8vcHJvYmxlbS84NTY3Njc3Pgor
ICAgIFtbd2ViVmlldygpIF9VSUtpdERlbGVnYXRlXSBfd2VidGhyZWFkX3dlYlZpZXc6d2ViVmll
dygpIGF0dGFjaFJvb3RMYXllcjpncmFwaGljc0xheWVyID8gZ3JhcGhpY3NMYXllci0+cGxhdGZv
cm1MYXllcigpIDogMF07Cit9CisjZW5kaWYKKwordm9pZCBXZWJDaHJvbWVDbGllbnRJT1M6OmRp
ZEZsdXNoQ29tcG9zaXRpbmdMYXllcnMoKQoreworICAgIFtbW3dlYlZpZXcoKSBfVUlLaXREZWxl
Z2F0ZUZvcndhcmRlcl0gYXN5bmNGb3J3YXJkZXJdIHdlYlZpZXdEaWRDb21taXRDb21wb3NpdGlu
Z0xheWVyQ2hhbmdlczp3ZWJWaWV3KCldOworfQorCitib29sIFdlYkNocm9tZUNsaWVudElPUzo6
ZmV0Y2hDdXN0b21GaXhlZFBvc2l0aW9uTGF5b3V0UmVjdChJbnRSZWN0JiByZWN0KQoreworICAg
IE5TUmVjdCB1cGRhdGVkUmVjdDsKKyAgICBpZiAoW3dlYlZpZXcoKSBfZmV0Y2hDdXN0b21GaXhl
ZFBvc2l0aW9uTGF5b3V0UmVjdDomdXBkYXRlZFJlY3RdKSB7CisgICAgICAgIHJlY3QgPSBlbmNs
b3NpbmdJbnRSZWN0KHVwZGF0ZWRSZWN0KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFdlYkNocm9tZUNsaWVudElPUzo6dXBkYXRl
Vmlld3BvcnRDb25zdHJhaW5lZExheWVycyhIYXNoTWFwPFBsYXRmb3JtTGF5ZXIqLCBPd25QdHI8
Vmlld3BvcnRDb25zdHJhaW50cz4gPiYgbGF5ZXJNYXAsIEhhc2hNYXA8UGxhdGZvcm1MYXllcios
IFBsYXRmb3JtTGF5ZXIqPiYgc3RpY2t5Q29udGFpbmVycykKK3sKKyAgICBbW3dlYlZpZXcoKSBf
Zml4ZWRQb3NpdGlvbkNvbnRlbnRdIHNldFZpZXdwb3J0Q29uc3RyYWluZWRMYXllcnM6bGF5ZXJN
YXAgc3RpY2t5Q29udGFpbmVyTWFwOnN0aWNreUNvbnRhaW5lcnNdOworfQorCit2b2lkIFdlYkNo
cm9tZUNsaWVudElPUzo6YWRkT3JVcGRhdGVTY3JvbGxpbmdMYXllcihOb2RlKiBub2RlLCBQbGF0
Zm9ybUxheWVyKiBzY3JvbGxpbmdMYXllciwgUGxhdGZvcm1MYXllciogY29udGVudHNMYXllciwg
Y29uc3QgSW50U2l6ZSYgc2Nyb2xsU2l6ZSwgYm9vbCBhbGxvd0hvcml6b250YWxTY3JvbGxiYXIs
IGJvb2wgYWxsb3dWZXJ0aWNhbFNjcm9sbGJhcikKK3sKKyAgICBET01Ob2RlICpkb21Ob2RlID0g
a2l0KG5vZGUpOworCisgICAgW1tbd2ViVmlldygpIF9VSUtpdERlbGVnYXRlRm9yd2FyZGVyXSBh
c3luY0ZvcndhcmRlcl0gd2ViVmlldzp3ZWJWaWV3KCkgZGlkQ3JlYXRlT3JVcGRhdGVTY3JvbGxp
bmdMYXllcjpzY3JvbGxpbmdMYXllciB3aXRoQ29udGVudHNMYXllcjpjb250ZW50c0xheWVyIHNj
cm9sbFNpemU6W05TVmFsdWUgdmFsdWVXaXRoU2l6ZTpzY3JvbGxTaXplXSBmb3JOb2RlOmRvbU5v
ZGUKKyAgICAgICAgYWxsb3dIb3Jpem9udGFsU2Nyb2xsYmFyOmFsbG93SG9yaXpvbnRhbFNjcm9s
bGJhciBhbGxvd1ZlcnRpY2FsU2Nyb2xsYmFyOmFsbG93VmVydGljYWxTY3JvbGxiYXJdOworfQor
Cit2b2lkIFdlYkNocm9tZUNsaWVudElPUzo6cmVtb3ZlU2Nyb2xsaW5nTGF5ZXIoTm9kZSogbm9k
ZSwgUGxhdGZvcm1MYXllciogc2Nyb2xsaW5nTGF5ZXIsIFBsYXRmb3JtTGF5ZXIqIGNvbnRlbnRz
TGF5ZXIpCit7CisgICAgRE9NTm9kZSAqZG9tTm9kZSA9IGtpdChub2RlKTsKKyAgICBbW1t3ZWJW
aWV3KCkgX1VJS2l0RGVsZWdhdGVGb3J3YXJkZXJdIGFzeW5jRm9yd2FyZGVyXSB3ZWJWaWV3Ondl
YlZpZXcoKSB3aWxsUmVtb3ZlU2Nyb2xsaW5nTGF5ZXI6c2Nyb2xsaW5nTGF5ZXIgd2l0aENvbnRl
bnRzTGF5ZXI6Y29udGVudHNMYXllciBmb3JOb2RlOmRvbU5vZGVdOworfQorCit2b2lkIFdlYkNo
cm9tZUNsaWVudElPUzo6d2ViQXBwT3JpZW50YXRpb25zVXBkYXRlZCgpCit7CisgICAgW1t3ZWJW
aWV3KCkgX1VJRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXdTdXBwb3J0ZWRPcmllbnRhdGlvbnNV
cGRhdGVkOndlYlZpZXcoKV07Cit9CisKK3ZvaWQgV2ViQ2hyb21lQ2xpZW50SU9TOjpmb2N1c2Vk
Tm9kZUNoYW5nZWQoTm9kZSogbm9kZSkKK3sKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVy
bjsKKyAgICBpZiAoIW5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbnB1dFRhZykpCisgICAg
ICAgIHJldHVybjsKKworICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IHN0YXRp
Y19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihub2RlKTsKKyAgICBpZiAoIWlucHV0RWxlbWVudC0+
aXNUZXh0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIENhbGxGb3JtRGVsZWdhdGUod2ViVmll
dygpLCBAc2VsZWN0b3IoZGlkRm9jdXNUZXh0RmllbGQ6aW5GcmFtZTopLCBraXQoaW5wdXRFbGVt
ZW50KSwga2l0KGlucHV0RWxlbWVudC0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSkpOworfQorCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkZpeGVk
UG9zaXRpb25Db250ZW50LmggYi9Tb3VyY2UvV2ViS2l0L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJG
aXhlZFBvc2l0aW9uQ29udGVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJlNWVjZTc2MWY1NDJmMzM1MDJlZDg3
NzYxYzI0MTQ3ZDdlYmEyZDQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2lvcy9X
ZWJDb3JlU3VwcG9ydC9XZWJGaXhlZFBvc2l0aW9uQ29udGVudC5oCkBAIC0wLDAgKzEsNTUgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKworQGNsYXNz
IENBTGF5ZXI7CitAY2xhc3MgV2ViVmlldzsKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwg
V2ViRml4ZWRQb3NpdGlvbkFuY2hvckVkZ2UpIHsKKyAgICBXZWJGaXhlZFBvc2l0aW9uQW5jaG9y
RWRnZUxlZnQsCisgICAgV2ViRml4ZWRQb3NpdGlvbkFuY2hvckVkZ2VSaWdodCwKKyAgICBXZWJG
aXhlZFBvc2l0aW9uQW5jaG9yRWRnZVRvcCwKKyAgICBXZWJGaXhlZFBvc2l0aW9uQW5jaG9yRWRn
ZUJvdHRvbQorfTsKKworLy8gRW5jYXBzdWxhdGVzIHBhZ2UgY29udGVudCB0aGF0IG5lZWRzIHRv
IGJlIHJlcG9zaXRpb25lZCBkdXJpbmcgc2Nyb2xsaW5nLAorLy8gbGlrZSBwb3NpdGlvbjpmaXhl
ZCBsYXllcnMuCisvLyBDYW4gYmUgY2FsbGVkIHdpdGhvdXQgdGFraW5nIHRoZSBXZWJUaHJlYWQg
bG9jay4KKworQGludGVyZmFjZSBXZWJGaXhlZFBvc2l0aW9uQ29udGVudCA6IE5TT2JqZWN0IHsK
KyAgICBzdHJ1Y3QgV2ViRml4ZWRQb3NpdGlvbkNvbnRlbnREYXRhKiBfcHJpdmF0ZTsKK30KKwor
LSAoaWQpaW5pdFdpdGhXZWJWaWV3OihXZWJWaWV3ICopd2ViVmlldzsKKworLSAodm9pZClzY3Jv
bGxPclpvb21DaGFuZ2VkOihDR1JlY3QpcG9zaXRpb25lZE9iamVjdHNSZWN0OworLSAodm9pZClv
dmVyZmxvd1Njcm9sbFBvc2l0aW9uRm9yTGF5ZXI6KENBTGF5ZXIgKilzY3JvbGxMYXllciBjaGFu
Z2VkVG86KENHUG9pbnQpc2Nyb2xsUG9zaXRpb247CistICh2b2lkKWRpZEZpbmlzaFNjcm9sbGlu
Z09yWm9vbWluZzsKKy0gKEJPT0wpaGFzRml4ZWRPclN0aWNreVBvc2l0aW9uTGF5ZXJzOworLy8g
UmV0dXJucyBDR0ZMT0FUX01BWCBpZiB0aGVyZSBhcmUgbm8gbGF5ZXJzIGFuY2hvcmVkIHRvIHRo
ZSBnaXZlbiBlZGdlLgorLSAoQ0dGbG9hdCltaW5pbXVtT2Zmc2V0RnJvbUZpeGVkUG9zaXRpb25M
YXllcnNUb0FuY2hvckVkZ2U6KFdlYkZpeGVkUG9zaXRpb25BbmNob3JFZGdlKWFuY2hvckVkZ2Ug
b2ZSZWN0OihDR1JlY3QpcmVjdCBpbkxheWVyOihDQUxheWVyICopbGF5ZXI7CisKK0BlbmQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkZpeGVkUG9zaXRp
b25Db250ZW50Lm1tIGIvU291cmNlL1dlYktpdC9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViRml4ZWRQ
b3NpdGlvbkNvbnRlbnQubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWE1ODEyOTg5OGY0ZDBiNzAyYjY0OWU5N2Zm
Y2M2ODhmYzIzY2Y2NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvaW9zL1dlYkNv
cmVTdXBwb3J0L1dlYkZpeGVkUG9zaXRpb25Db250ZW50Lm1tCkBAIC0wLDAgKzEsMjU0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmIFBMQVRGT1JNKElPUykKKworI2ltcG9ydCAiV2ViRml4ZWRQb3NpdGlv
bkNvbnRlbnQuaCIKKyNpbXBvcnQgIldlYkZpeGVkUG9zaXRpb25Db250ZW50SW50ZXJuYWwuaCIK
KworI2ltcG9ydCAiV2ViVmlld0ludGVybmFsLmgiCisjaW1wb3J0IDxXZWJDb3JlL0Nocm9tZUNs
aWVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9GcmFtZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9JbnRT
aXplLmg+CisjaW1wb3J0IDxXZWJDb3JlL1Njcm9sbGluZ0NvbnN0cmFpbnRzLmg+CisjaW1wb3J0
IDxXZWJDb3JlL1dlYkNvcmVUaHJlYWRSdW4uaD4KKworI2ltcG9ydCA8d3RmL0hhc2hNYXAuaD4K
KyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbXBvcnQgPHd0Zi9TdGRMaWJFeHRyYXMuaD4K
KyNpbXBvcnQgPHd0Zi9UaHJlYWRpbmcuaD4KKworI2ltcG9ydCA8Q29yZUdyYXBoaWNzL0NHRmxv
YXQuaD4KKyNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgorI2ltcG9ydCA8Rm91bmRh
dGlvbi9Gb3VuZGF0aW9uLmg+CisjaW1wb3J0IDxhbGdvcml0aG0+CisKK3VzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworc3RhdGljIE11dGV4JiBXZWJGaXhl
ZFBvc2l0aW9uQ29udGVudERhdGFMb2NrKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKE11
dGV4LCBtdXRleCwgKCkpOworICAgIHJldHVybiBtdXRleDsKK30KKworc3RydWN0IFZpZXdwb3J0
Q29uc3RyYWluZWRMYXllckRhdGEgeworICAgIFZpZXdwb3J0Q29uc3RyYWluZWRMYXllckRhdGEo
KQorICAgICAgICA6IG1fZW5jbG9zaW5nQWNjZWxlcmF0ZWRTY3JvbGxMYXllcihuaWwpCisgICAg
eyB9CisgICAgQ0FMYXllciogbV9lbmNsb3NpbmdBY2NlbGVyYXRlZFNjcm9sbExheWVyOyAvLyBN
YXkgYmUgbmlsLgorICAgIE93blB0cjxWaWV3cG9ydENvbnN0cmFpbnRzPiBtX3ZpZXdwb3J0Q29u
c3RyYWludHM7Cit9OworCit0eXBlZGVmIEhhc2hNYXA8UmV0YWluUHRyPENBTGF5ZXI+LCBPd25Q
dHI8Vmlld3BvcnRDb25zdHJhaW5lZExheWVyRGF0YT4gPiBMYXllckluZm9NYXA7CisKK3N0cnVj
dCBXZWJGaXhlZFBvc2l0aW9uQ29udGVudERhdGEgeworcHVibGljOgorICAgIFdlYkZpeGVkUG9z
aXRpb25Db250ZW50RGF0YShXZWJWaWV3ICopOworICAgIH5XZWJGaXhlZFBvc2l0aW9uQ29udGVu
dERhdGEoKTsKKyAgICAKKyAgICBXZWJWaWV3ICptX3dlYlZpZXc7CisgICAgTGF5ZXJJbmZvTWFw
IG1fdmlld3BvcnRDb25zdGFpbmVkTGF5ZXJzOworfTsKKworCitXZWJGaXhlZFBvc2l0aW9uQ29u
dGVudERhdGE6OldlYkZpeGVkUG9zaXRpb25Db250ZW50RGF0YShXZWJWaWV3ICp3ZWJWaWV3KQor
ICAgIDogbV93ZWJWaWV3KHdlYlZpZXcpCit7Cit9CisKK1dlYkZpeGVkUG9zaXRpb25Db250ZW50
RGF0YTo6fldlYkZpeGVkUG9zaXRpb25Db250ZW50RGF0YSgpCit7Cit9CisKK0BpbXBsZW1lbnRh
dGlvbiBXZWJGaXhlZFBvc2l0aW9uQ29udGVudAorCistIChpZClpbml0V2l0aFdlYlZpZXc6KFdl
YlZpZXcgKil3ZWJWaWV3Cit7CisgICAgaWYgKChzZWxmID0gW3N1cGVyIGluaXRdKSkgeworICAg
ICAgICBfcHJpdmF0ZSA9IG5ldyBXZWJGaXhlZFBvc2l0aW9uQ29udGVudERhdGEod2ViVmlldyk7
CisgICAgfQorICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBk
ZWxldGUgX3ByaXZhdGU7CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistICh2b2lkKXNjcm9s
bE9yWm9vbUNoYW5nZWQ6KENHUmVjdClwb3NpdGlvbmVkT2JqZWN0c1JlY3QKK3sKKyAgICBNdXRl
eExvY2tlciBsb2NrKFdlYkZpeGVkUG9zaXRpb25Db250ZW50RGF0YUxvY2soKSk7CisKKyAgICBM
YXllckluZm9NYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IF9wcml2YXRlLT5tX3ZpZXdwb3J0Q29u
c3RhaW5lZExheWVycy5lbmQoKTsKKyAgICBmb3IgKExheWVySW5mb01hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBfcHJpdmF0ZS0+bV92aWV3cG9ydENvbnN0YWluZWRMYXllcnMuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7CisgICAgICAgIENBTGF5ZXIgKmxheWVyID0gaXQtPmtleS5nZXQoKTsK
KyAgICAgICAgVmlld3BvcnRDb25zdHJhaW5lZExheWVyRGF0YSogY29uc3RyYWludERhdGEgPSBp
dC0+dmFsdWUuZ2V0KCk7CisgICAgICAgIGNvbnN0IFZpZXdwb3J0Q29uc3RyYWludHMmIGNvbnN0
cmFpbnRzID0gKihjb25zdHJhaW50RGF0YS0+bV92aWV3cG9ydENvbnN0cmFpbnRzLmdldCgpKTsK
KworICAgICAgICBzd2l0Y2ggKGNvbnN0cmFpbnRzLmNvbnN0cmFpbnRUeXBlKCkpIHsKKyAgICAg
ICAgY2FzZSBWaWV3cG9ydENvbnN0cmFpbnRzOjpGaXhlZFBvc2l0aW9uQ29uc3RhaW50OiB7Cisg
ICAgICAgICAgICAgICAgY29uc3QgRml4ZWRQb3NpdGlvblZpZXdwb3J0Q29uc3RyYWludHMmIGZp
eGVkQ29uc3RyYWludHMgPSBzdGF0aWNfY2FzdDxjb25zdCBGaXhlZFBvc2l0aW9uVmlld3BvcnRD
b25zdHJhaW50cyY+KGNvbnN0cmFpbnRzKTsKKworICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQg
bGF5ZXJQb3NpdGlvbiA9IGZpeGVkQ29uc3RyYWludHMubGF5ZXJQb3NpdGlvbkZvclZpZXdwb3J0
UmVjdChwb3NpdGlvbmVkT2JqZWN0c1JlY3QpOworICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgQ0dSZWN0IGxheWVyQm91bmRzID0gW2xheWVyIGJvdW5kc107CisgICAgICAgICAgICAgICAg
Q0dQb2ludCBhbmNob3JQb2ludCA9IFtsYXllciBhbmNob3JQb2ludF07CisgICAgICAgICAgICAg
ICAgQ0dQb2ludCBuZXdQb3NpdGlvbiA9IENHUG9pbnRNYWtlKGxheWVyUG9zaXRpb24ueCgpIC0g
Y29uc3RyYWludHMuYWxpZ25tZW50T2Zmc2V0KCkud2lkdGgoKSArIGFuY2hvclBvaW50LnggKiBs
YXllckJvdW5kcy5zaXplLndpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsYXllclBvc2l0aW9uLnkoKSAtIGNvbnN0cmFpbnRzLmFsaWdubWVu
dE9mZnNldCgpLmhlaWdodCgpICsgYW5jaG9yUG9pbnQueSAqIGxheWVyQm91bmRzLnNpemUuaGVp
Z2h0KTsKKyAgICAgICAgICAgICAgICBbbGF5ZXIgc2V0UG9zaXRpb246bmV3UG9zaXRpb25dOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICBjYXNlIFZpZXdw
b3J0Q29uc3RyYWludHM6OlN0aWNreVBvc2l0aW9uQ29uc3RyYWludDogeworICAgICAgICAgICAg
ICAgIGNvbnN0IFN0aWNreVBvc2l0aW9uVmlld3BvcnRDb25zdHJhaW50cyYgc3RpY2t5Q29uc3Ry
YWludHMgPSBzdGF0aWNfY2FzdDxjb25zdCBTdGlja3lQb3NpdGlvblZpZXdwb3J0Q29uc3RyYWlu
dHMmPihjb25zdHJhaW50cyk7CisKKyAgICAgICAgICAgICAgICBGbG9hdFBvaW50IGxheWVyUG9z
aXRpb24gPSBzdGlja3lDb25zdHJhaW50cy5sYXllclBvc2l0aW9uRm9yQ29uc3RyYWluaW5nUmVj
dChwb3NpdGlvbmVkT2JqZWN0c1JlY3QpOworCisgICAgICAgICAgICAgICAgQ0dSZWN0IGxheWVy
Qm91bmRzID0gW2xheWVyIGJvdW5kc107CisgICAgICAgICAgICAgICAgQ0dQb2ludCBhbmNob3JQ
b2ludCA9IFtsYXllciBhbmNob3JQb2ludF07CisgICAgICAgICAgICAgICAgQ0dQb2ludCBuZXdQ
b3NpdGlvbiA9IENHUG9pbnRNYWtlKGxheWVyUG9zaXRpb24ueCgpIC0gY29uc3RyYWludHMuYWxp
Z25tZW50T2Zmc2V0KCkud2lkdGgoKSArIGFuY2hvclBvaW50LnggKiBsYXllckJvdW5kcy5zaXpl
LndpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsYXllclBvc2l0aW9uLnkoKSAtIGNvbnN0cmFpbnRzLmFsaWdubWVudE9mZnNldCgpLmhlaWdo
dCgpICsgYW5jaG9yUG9pbnQueSAqIGxheWVyQm91bmRzLnNpemUuaGVpZ2h0KTsKKyAgICAgICAg
ICAgICAgICBbbGF5ZXIgc2V0UG9zaXRpb246bmV3UG9zaXRpb25dOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCistICh2b2lkKW92
ZXJmbG93U2Nyb2xsUG9zaXRpb25Gb3JMYXllcjooQ0FMYXllciAqKXNjcm9sbExheWVyIGNoYW5n
ZWRUbzooQ0dQb2ludClzY3JvbGxQb3NpdGlvbgoreworICAgIE11dGV4TG9ja2VyIGxvY2soV2Vi
Rml4ZWRQb3NpdGlvbkNvbnRlbnREYXRhTG9jaygpKTsKKworICAgIExheWVySW5mb01hcDo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gX3ByaXZhdGUtPm1fdmlld3BvcnRDb25zdGFpbmVkTGF5ZXJzLmVu
ZCgpOworICAgIGZvciAoTGF5ZXJJbmZvTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IF9wcml2YXRl
LT5tX3ZpZXdwb3J0Q29uc3RhaW5lZExheWVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
KyAgICAgICAgQ0FMYXllciAqbGF5ZXIgPSBpdC0+a2V5LmdldCgpOworICAgICAgICBWaWV3cG9y
dENvbnN0cmFpbmVkTGF5ZXJEYXRhKiBjb25zdHJhaW50RGF0YSA9IGl0LT52YWx1ZS5nZXQoKTsK
KyAgICAgICAgCisgICAgICAgIGlmIChjb25zdHJhaW50RGF0YS0+bV9lbmNsb3NpbmdBY2NlbGVy
YXRlZFNjcm9sbExheWVyID09IHNjcm9sbExheWVyKSB7CisgICAgICAgICAgICBjb25zdCBTdGlj
a3lQb3NpdGlvblZpZXdwb3J0Q29uc3RyYWludHMmIHN0aWNreUNvbnN0cmFpbnRzID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgU3RpY2t5UG9zaXRpb25WaWV3cG9ydENvbnN0cmFpbnRzJj4oKihjb25zdHJh
aW50RGF0YS0+bV92aWV3cG9ydENvbnN0cmFpbnRzLmdldCgpKSk7CisgICAgICAgICAgICBGbG9h
dFJlY3QgY29uc3RyYWluaW5nUmVjdEF0TGFzdExheW91dCA9IHN0aWNreUNvbnN0cmFpbnRzLmNv
bnN0cmFpbmluZ1JlY3RBdExhc3RMYXlvdXQoKTsKKyAgICAgICAgICAgIEZsb2F0UmVjdCBzY3Jv
bGxlZENvbnN0cmFpbmluZ1JlY3QgPSBGbG9hdFJlY3Qoc2Nyb2xsUG9zaXRpb24ueCwgc2Nyb2xs
UG9zaXRpb24ueSwgY29uc3RyYWluaW5nUmVjdEF0TGFzdExheW91dC53aWR0aCgpLCBjb25zdHJh
aW5pbmdSZWN0QXRMYXN0TGF5b3V0LmhlaWdodCgpKTsKKyAgICAgICAgICAgIEZsb2F0UG9pbnQg
bGF5ZXJQb3NpdGlvbiA9IHN0aWNreUNvbnN0cmFpbnRzLmxheWVyUG9zaXRpb25Gb3JDb25zdHJh
aW5pbmdSZWN0KHNjcm9sbGVkQ29uc3RyYWluaW5nUmVjdCk7CisKKyAgICAgICAgICAgIENHUmVj
dCBsYXllckJvdW5kcyA9IFtsYXllciBib3VuZHNdOworICAgICAgICAgICAgQ0dQb2ludCBhbmNo
b3JQb2ludCA9IFtsYXllciBhbmNob3JQb2ludF07CisgICAgICAgICAgICBDR1BvaW50IG5ld1Bv
c2l0aW9uID0gQ0dQb2ludE1ha2UobGF5ZXJQb3NpdGlvbi54KCkgLSBzdGlja3lDb25zdHJhaW50
cy5hbGlnbm1lbnRPZmZzZXQoKS53aWR0aCgpICsgYW5jaG9yUG9pbnQueCAqIGxheWVyQm91bmRz
LnNpemUud2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbGF5ZXJQb3NpdGlvbi55KCkgLSBzdGlja3lDb25zdHJhaW50cy5hbGlnbm1lbnRPZmZzZXQo
KS5oZWlnaHQoKSArIGFuY2hvclBvaW50LnkgKiBsYXllckJvdW5kcy5zaXplLmhlaWdodCk7Cisg
ICAgICAgICAgICBbbGF5ZXIgc2V0UG9zaXRpb246bmV3UG9zaXRpb25dOworICAgICAgICB9Cisg
ICAgfQorfQorCisvLyBGSVhNRTogc2hhcmUgY29kZSB3aXRoICdzZW5kU2Nyb2xsRXZlbnQnPwor
LSAodm9pZClkaWRGaW5pc2hTY3JvbGxpbmdPclpvb21pbmcKK3sKKyAgICBXZWJUaHJlYWRSdW4o
XnsKKyAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IFtfcHJpdmF0ZS0+bV93ZWJWaWV3IF9tYWlu
Q29yZUZyYW1lXSkKKyAgICAgICAgICAgIGZyYW1lLT52aWV3cG9ydE9mZnNldENoYW5nZWQoRnJh
bWU6OkNvbXBsZXRlZFNjcm9sbE9mZnNldCk7CisgICAgfSk7Cit9CisKKy0gKHZvaWQpc2V0Vmll
d3BvcnRDb25zdHJhaW5lZExheWVyczooV1RGOjpIYXNoTWFwPENBTGF5ZXIgKiwgT3duUHRyPFdl
YkNvcmU6OlZpZXdwb3J0Q29uc3RyYWludHM+ID4mKWxheWVyTWFwIHN0aWNreUNvbnRhaW5lck1h
cDooV1RGOjpIYXNoTWFwPENBTGF5ZXIqLCBDQUxheWVyKj4mKXN0aWNreUNvbnRhaW5lcnMKK3sK
KyAgICBNdXRleExvY2tlciBsb2NrKFdlYkZpeGVkUG9zaXRpb25Db250ZW50RGF0YUxvY2soKSk7
CisKKyAgICBfcHJpdmF0ZS0+bV92aWV3cG9ydENvbnN0YWluZWRMYXllcnMuY2xlYXIoKTsKKwor
ICAgIEhhc2hNYXA8Q0FMYXllciAqLCBPd25QdHI8Vmlld3BvcnRDb25zdHJhaW50cz4gPjo6aXRl
cmF0b3IgZW5kID0gbGF5ZXJNYXAuZW5kKCk7CisgICAgZm9yIChIYXNoTWFwPENBTGF5ZXIgKiwg
T3duUHRyPFZpZXdwb3J0Q29uc3RyYWludHM+ID46Oml0ZXJhdG9yIGl0ID0gbGF5ZXJNYXAuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIENBTGF5ZXIqIGxheWVyID0gaXQtPmtl
eTsKKyAgICAgICAgT3duUHRyPFZpZXdwb3J0Q29uc3RyYWluZWRMYXllckRhdGE+IGxheWVyRGF0
YSA9IGFkb3B0UHRyKG5ldyBWaWV3cG9ydENvbnN0cmFpbmVkTGF5ZXJEYXRhKTsKKworICAgICAg
ICBsYXllckRhdGEtPm1fZW5jbG9zaW5nQWNjZWxlcmF0ZWRTY3JvbGxMYXllciA9IHN0aWNreUNv
bnRhaW5lcnMuZ2V0KGxheWVyKTsKKyAgICAgICAgbGF5ZXJEYXRhLT5tX3ZpZXdwb3J0Q29uc3Ry
YWludHMgPSBpdC0+dmFsdWUucmVsZWFzZSgpOworCisgICAgICAgIF9wcml2YXRlLT5tX3ZpZXdw
b3J0Q29uc3RhaW5lZExheWVycy5zZXQobGF5ZXIsIGxheWVyRGF0YS5yZWxlYXNlKCkpOworICAg
IH0KK30KKworLSAoQk9PTCloYXNGaXhlZE9yU3RpY2t5UG9zaXRpb25MYXllcnMKK3sKKyAgICBN
dXRleExvY2tlciBsb2NrKFdlYkZpeGVkUG9zaXRpb25Db250ZW50RGF0YUxvY2soKSk7CisgICAg
cmV0dXJuICFfcHJpdmF0ZS0+bV92aWV3cG9ydENvbnN0YWluZWRMYXllcnMuaXNFbXB0eSgpOwor
fQorCitzdGF0aWMgVmlld3BvcnRDb25zdHJhaW50czo6QW5jaG9yRWRnZUZsYWdzIGFuY2hvckVk
Z2VGbGFnc0ZvckFuY2hvckVkZ2UoV2ViRml4ZWRQb3NpdGlvbkFuY2hvckVkZ2UgZWRnZSkKK3sK
KyAgICBzd2l0Y2ggKGVkZ2UpIHsKKyAgICBjYXNlIFdlYkZpeGVkUG9zaXRpb25BbmNob3JFZGdl
TGVmdDoKKyAgICAgICAgcmV0dXJuIFZpZXdwb3J0Q29uc3RyYWludHM6OkFuY2hvckVkZ2VGbGFn
czo6QW5jaG9yRWRnZUxlZnQ7CisgICAgY2FzZSBXZWJGaXhlZFBvc2l0aW9uQW5jaG9yRWRnZVJp
Z2h0OgorICAgICAgICByZXR1cm4gVmlld3BvcnRDb25zdHJhaW50czo6QW5jaG9yRWRnZUZsYWdz
OjpBbmNob3JFZGdlUmlnaHQ7CisgICAgY2FzZSBXZWJGaXhlZFBvc2l0aW9uQW5jaG9yRWRnZVRv
cDoKKyAgICAgICAgcmV0dXJuIFZpZXdwb3J0Q29uc3RyYWludHM6OkFuY2hvckVkZ2VGbGFnczo6
QW5jaG9yRWRnZVRvcDsKKyAgICBjYXNlIFdlYkZpeGVkUG9zaXRpb25BbmNob3JFZGdlQm90dG9t
OgorICAgICAgICByZXR1cm4gVmlld3BvcnRDb25zdHJhaW50czo6QW5jaG9yRWRnZUZsYWdzOjpB
bmNob3JFZGdlQm90dG9tOworICAgIH0KK30KKworLSAoQ0dGbG9hdCltaW5pbXVtT2Zmc2V0RnJv
bUZpeGVkUG9zaXRpb25MYXllcnNUb0FuY2hvckVkZ2U6KFdlYkZpeGVkUG9zaXRpb25BbmNob3JF
ZGdlKWFuY2hvckVkZ2Ugb2ZSZWN0OihDR1JlY3QpcmVjdCBpbkxheWVyOihDQUxheWVyICopbGF5
ZXIKK3sKKyAgICBNdXRleExvY2tlciBsb2NrKFdlYkZpeGVkUG9zaXRpb25Db250ZW50RGF0YUxv
Y2soKSk7CisgICAgVmlld3BvcnRDb25zdHJhaW50czo6QW5jaG9yRWRnZUZsYWdzIGFuY2hvckVk
Z2VGbGFncyA9IGFuY2hvckVkZ2VGbGFnc0ZvckFuY2hvckVkZ2UoYW5jaG9yRWRnZSk7CisgICAg
Q0dGbG9hdCBtaW5pbXVtT2Zmc2V0ID0gQ0dGTE9BVF9NQVg7CisgICAgTGF5ZXJJbmZvTWFwOjpj
b25zdF9pdGVyYXRvciBlbmQgPSBfcHJpdmF0ZS0+bV92aWV3cG9ydENvbnN0YWluZWRMYXllcnMu
ZW5kKCk7CisgICAgZm9yIChMYXllckluZm9NYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gX3ByaXZh
dGUtPm1fdmlld3BvcnRDb25zdGFpbmVkTGF5ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
eworICAgICAgICBDQUxheWVyICpmaXhlZExheWVyID0gaXQtPmtleS5nZXQoKTsKKyAgICAgICAg
Vmlld3BvcnRDb25zdHJhaW5lZExheWVyRGF0YSogY29uc3RyYWludERhdGEgPSBpdC0+dmFsdWUu
Z2V0KCk7CisgICAgICAgIGNvbnN0IFZpZXdwb3J0Q29uc3RyYWludHMmIGNvbnN0cmFpbnRzID0g
Kihjb25zdHJhaW50RGF0YS0+bV92aWV3cG9ydENvbnN0cmFpbnRzLmdldCgpKTsKKworICAgICAg
ICBpZiAoIWNvbnN0cmFpbnRzLmhhc0FuY2hvckVkZ2UoYW5jaG9yRWRnZUZsYWdzKSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAvLyBBY2NvcmRpbmcgdG8gU2ltb246IEl0J3MgcG9z
c2libGUgdGhhdCB0aGVyZSBhcmUgd2luZG93cyBvZiB0aW1lCisgICAgICAgIC8vIHdoZXJlIHRo
ZXNlIENBTGF5ZXJzIGFyZSB1bnBhcmVudGVkIChiZWNhdXNlIHdlJ3ZlIGZsdXNoZWQgb24gdGhl
IHdlYgorICAgICAgICAvLyB0aHJlYWQgYnV0IGhhdmVuJ3QgdXBkYXRlZCB0aG9zZSBsYXllcnMg
eWV0KS4KKyAgICAgICAgaWYgKCFbZml4ZWRMYXllciBzdXBlcmxheWVyXSkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworCisgICAgICAgIENHUmVjdCBmaXhlZExheWVyRXh0ZW50ID0gW2xheWVyIGNv
bnZlcnRSZWN0OltmaXhlZExheWVyIGJvdW5kc10gZnJvbUxheWVyOmZpeGVkTGF5ZXJdOworICAg
ICAgICBDR0Zsb2F0IG9mZnNldDsKKyAgICAgICAgc3dpdGNoIChhbmNob3JFZGdlKSB7CisgICAg
ICAgIGNhc2UgV2ViRml4ZWRQb3NpdGlvbkFuY2hvckVkZ2VMZWZ0OgorICAgICAgICAgICAgb2Zm
c2V0ID0gQ0dSZWN0R2V0TWluWChmaXhlZExheWVyRXh0ZW50KSAtIENHUmVjdEdldE1pblgocmVj
dCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXZWJGaXhlZFBvc2l0aW9uQW5j
aG9yRWRnZVJpZ2h0OgorICAgICAgICAgICAgb2Zmc2V0ID0gQ0dSZWN0R2V0TWF4WChyZWN0KSAt
IENHUmVjdEdldE1heFgoZml4ZWRMYXllckV4dGVudCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBXZWJGaXhlZFBvc2l0aW9uQW5jaG9yRWRnZVRvcDoKKyAgICAgICAgICAgIG9m
ZnNldCA9IENHUmVjdEdldE1pblkoZml4ZWRMYXllckV4dGVudCkgLSBDR1JlY3RHZXRNaW5ZKHJl
Y3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2ViRml4ZWRQb3NpdGlvbkFu
Y2hvckVkZ2VCb3R0b206CisgICAgICAgICAgICBvZmZzZXQgPSBDR1JlY3RHZXRNYXhZKHJlY3Qp
IC0gQ0dSZWN0R2V0TWF4WShmaXhlZExheWVyRXh0ZW50KTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIG1pbmltdW1PZmZzZXQgPSBDR0Zsb2F0TWluKG1pbmltdW1PZmZz
ZXQsIG9mZnNldCk7CisgICAgfQorICAgIHJldHVybiBtaW5pbXVtT2Zmc2V0OworfQorCitAZW5k
CisKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2lv
cy9XZWJDb3JlU3VwcG9ydC9XZWJGaXhlZFBvc2l0aW9uQ29udGVudEludGVybmFsLmggYi9Tb3Vy
Y2UvV2ViS2l0L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJGaXhlZFBvc2l0aW9uQ29udGVudEludGVy
bmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNjRlMjY2MGFhNWRkZTM3OGZmODNiODczMDYyY2M2OWI1NzczZmNk
NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvaW9zL1dlYkNvcmVTdXBwb3J0L1dl
YkZpeGVkUG9zaXRpb25Db250ZW50SW50ZXJuYWwuaApAQCAtMCwwICsxLDQxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisjaW1wb3J0IDx3dGYvSGFz
aE1hcC5oPgorI2ltcG9ydCA8d3RmL093blB0ci5oPgorCitAY2xhc3MgQ0FMYXllcjsKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgVmlld3BvcnRDb25zdHJhaW50czsKK30KKworQGludGVy
ZmFjZSBXZWJGaXhlZFBvc2l0aW9uQ29udGVudChXZWJLaXRJbnRlcm5hbCkKKy8vIENhbGxlZCBm
cm9tIGluc2lkZSBXZWJLaXQuCisKKy0gKHZvaWQpc2V0Vmlld3BvcnRDb25zdHJhaW5lZExheWVy
czooV1RGOjpIYXNoTWFwPENBTGF5ZXIgKiwgT3duUHRyPFdlYkNvcmU6OlZpZXdwb3J0Q29uc3Ry
YWludHM+ID4mKWxheWVyTWFwIHN0aWNreUNvbnRhaW5lck1hcDooV1RGOjpIYXNoTWFwPENBTGF5
ZXIqLCBDQUxheWVyKj4mKXN0aWNreUNvbnRhaW5lcnM7CisKK0BlbmQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lSU9TLmggYi9Tb3VyY2UvV2Vi
S2l0L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUlPUy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYyMTk0YjQ0
MWFiMDYxYTA4M2M3NzIwYTI2NmFkZDFhODY0ZTE1Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUlPUy5oCkBAIC0wLDAgKzEsOTgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWYgUExBVEZPUk0oSU9TKQorCisjaW1wb3J0IDxDb3JlR3JhcGhp
Y3MvQ29yZUdyYXBoaWNzLmg+CisjaW1wb3J0IDxXZWJLaXQvV2ViRnJhbWUuaD4KKyNpbXBvcnQg
PFdlYktpdC9XZWJWaXNpYmxlUG9zaXRpb24uaD4KKworQGNsYXNzIERPTVJhbmdlOworQGNsYXNz
IERPTVZpc2libGVQb3NpdGlvbjsKKwordHlwZWRlZiBlbnVtIHsKKyAgICBXZWJUZXh0U2VsZWN0
aW9uU3RhdGVOb25lLAorICAgIFdlYlRleHRTZWxlY3Rpb25TdGF0ZUNhcmV0LAorICAgIFdlYlRl
eHRTZWxlY3Rpb25TdGF0ZVJhbmdlLAorfSBXZWJUZXh0U2VsZWN0aW9uU3RhdGU7CisKK3R5cGVk
ZWYgZW51bSB7CisgICAgV2ViVGV4dFNtYXJ0RXh0ZW5kRGlyZWN0aW9uTm9uZSwKKyAgICBXZWJU
ZXh0U21hcnRFeHRlbmREaXJlY3Rpb25MZWZ0LAorICAgIFdlYlRleHRTbWFydEV4dGVuZERpcmVj
dGlvblJpZ2h0LAorfSBXZWJUZXh0U21hcnRFeHRlbmREaXJlY3Rpb247CisKK0BpbnRlcmZhY2Ug
V2ViRnJhbWUgKFdlYkZyYW1lSU9TKQorCistICh2b2lkKW1vdmVTZWxlY3Rpb25Ub1BvaW50OihD
R1BvaW50KXBvaW50OworCistICh2b2lkKWNsZWFyU2VsZWN0aW9uOworLSAoQk9PTCloYXNTZWxl
Y3Rpb247CistIChXZWJUZXh0U2VsZWN0aW9uU3RhdGUpc2VsZWN0aW9uU3RhdGU7CistIChDR1Jl
Y3QpY2FyZXRSZWN0Rm9yUG9zaXRpb246KFdlYlZpc2libGVQb3NpdGlvbiAqKXBvc2l0aW9uOwor
LSAoQ0dSZWN0KWNsb3Nlc3RDYXJldFJlY3RJbk1hcmtlZFRleHRSYW5nZUZvclBvaW50OihDR1Bv
aW50KXBvaW50OworLSAodm9pZCljb2xsYXBzZVNlbGVjdGlvbjsKKy0gKE5TQXJyYXkgKilzZWxl
Y3Rpb25SZWN0czsKKy0gKE5TQXJyYXkgKilzZWxlY3Rpb25SZWN0c0ZvclJhbmdlOihET01SYW5n
ZSAqKWRvbVJhbmdlOworLSAoRE9NUmFuZ2UgKil3b3JkQXRQb2ludDooQ0dQb2ludClwb2ludDsK
Ky0gKFdlYlZpc2libGVQb3NpdGlvbiAqKXdlYlZpc2libGVQb3NpdGlvbkZvclBvaW50OihDR1Bv
aW50KXBvaW50OworLSAodm9pZClzZXRSYW5nZWRTZWxlY3Rpb25CYXNlVG9DdXJyZW50U2VsZWN0
aW9uOworLSAodm9pZClzZXRSYW5nZWRTZWxlY3Rpb25CYXNlVG9DdXJyZW50U2VsZWN0aW9uU3Rh
cnQ7CistICh2b2lkKXNldFJhbmdlZFNlbGVjdGlvbkJhc2VUb0N1cnJlbnRTZWxlY3Rpb25FbmQ7
CistICh2b2lkKWNsZWFyUmFuZ2VkU2VsZWN0aW9uSW5pdGlhbEV4dGVudDsKKy0gKHZvaWQpc2V0
UmFuZ2VkU2VsZWN0aW9uSW5pdGlhbEV4dGVudFRvQ3VycmVudFNlbGVjdGlvblN0YXJ0OworLSAo
dm9pZClzZXRSYW5nZWRTZWxlY3Rpb25Jbml0aWFsRXh0ZW50VG9DdXJyZW50U2VsZWN0aW9uRW5k
OworLSAoQk9PTClzZXRSYW5nZWRTZWxlY3Rpb25FeHRlbnRQb2ludDooQ0dQb2ludClleHRlbnRQ
b2ludCBiYXNlSXNTdGFydDooQk9PTCliYXNlSXNTdGFydCBhbGxvd0ZsaXBwaW5nOihCT09MKWFs
bG93RmxpcHBpbmc7CistIChCT09MKXNldFNlbGVjdGlvbldpdGhCYXNlUG9pbnQ6KENHUG9pbnQp
YmFzZVBvaW50IGV4dGVudFBvaW50OihDR1BvaW50KWV4dGVudFBvaW50IGJhc2VJc1N0YXJ0OihC
T09MKWJhc2VJc1N0YXJ0OworLSAoQk9PTClzZXRTZWxlY3Rpb25XaXRoQmFzZVBvaW50OihDR1Bv
aW50KWJhc2VQb2ludCBleHRlbnRQb2ludDooQ0dQb2ludClleHRlbnRQb2ludCBiYXNlSXNTdGFy
dDooQk9PTCliYXNlSXNTdGFydCBhbGxvd0ZsaXBwaW5nOihCT09MKWFsbG93RmxpcHBpbmc7Cist
ICh2b2lkKXNldFNlbGVjdGlvbldpdGhGaXJzdFBvaW50OihDR1BvaW50KWZpcnN0UG9pbnQgc2Vj
b25kUG9pbnQ6KENHUG9pbnQpc2Vjb25kUG9pbnQ7CistICh2b2lkKWVuc3VyZVJhbmdlZFNlbGVj
dGlvbkNvbnRhaW5zSW5pdGlhbFN0YXJ0UG9pbnQ6KENHUG9pbnQpaW5pdGlhbFN0YXJ0UG9pbnQg
aW5pdGlhbEVuZFBvaW50OihDR1BvaW50KWluaXRpYWxFbmRQb2ludDsKKworLSAodm9pZClzbWFy
dEV4dGVuZFJhbmdlZFNlbGVjdGlvbjooV2ViVGV4dFNtYXJ0RXh0ZW5kRGlyZWN0aW9uKWRpcmVj
dGlvbjsKKy0gKHZvaWQpYWdncmVzc2l2ZWx5RXhwYW5kU2VsZWN0aW9uVG9Xb3JkQ29udGFpbmlu
Z0NhcmV0U2VsZWN0aW9uOyAvLyBEb2Vzbid0IGFjY2VwdCBubyBmb3IgYW4gYW5zd2VyOyBleHBh
bmRzIHBhc3Qgd2hpdGUgc3BhY2UuCisKKy0gKFdLV3JpdGluZ0RpcmVjdGlvbilzZWxlY3Rpb25C
YXNlV3JpdGluZ0RpcmVjdGlvbjsKKy0gKHZvaWQpdG9nZ2xlQmFzZVdyaXRpbmdEaXJlY3Rpb247
CistICh2b2lkKXNldEJhc2VXcml0aW5nRGlyZWN0aW9uOihXS1dyaXRpbmdEaXJlY3Rpb24pZGly
ZWN0aW9uOworCistICh2b2lkKW1vdmVTZWxlY3Rpb25Ub1N0YXJ0OworLSAodm9pZCltb3ZlU2Vs
ZWN0aW9uVG9FbmQ7CisKKy0gKHZvaWQpc2V0U2VsZWN0aW9uR3JhbnVsYXJpdHk6KFdlYlRleHRH
cmFudWxhcml0eSlncmFudWxhcml0eTsKKy0gKHZvaWQpc2V0UmFuZ2VkU2VsZWN0aW9uV2l0aEV4
dGVudFBvaW50OihDR1BvaW50KXBvaW50OworCistIChXZWJWaXNpYmxlUG9zaXRpb24gKilzdGFy
dFBvc2l0aW9uOworLSAoV2ViVmlzaWJsZVBvc2l0aW9uICopZW5kUG9zaXRpb247CisKKy0gKEJP
T0wpcmVuZGVyZWRDaGFyYWN0ZXJzRXhjZWVkOihOU1VJbnRlZ2VyKXRocmVzaG9sZDsKKworLSAo
Q0dJbWFnZVJlZilpbWFnZUZvck5vZGU6KERPTU5vZGUgKilub2RlIGFsbG93RG93bnNhbXBsaW5n
OihCT09MKWFsbG93RG93bnNhbXBsaW5nIGRyYXdDb250ZW50QmVoaW5kVHJhbnNwYXJlbnROb2Rl
czooQk9PTClkcmF3Q29udGVudEJlaGluZFRyYW5zcGFyZW50Tm9kZXM7CisKKy0gKFdlYlZpc2li
bGVQb3NpdGlvbiAqKXByZXZpb3VzVW5wZXJ0dXJiZWREaWN0YXRpb25SZXN1bHRCb3VuZGFyeUZy
b21Qb3NpdGlvbjooV2ViVmlzaWJsZVBvc2l0aW9uICopcG9zaXRpb247CistIChXZWJWaXNpYmxl
UG9zaXRpb24gKiluZXh0VW5wZXJ0dXJiZWREaWN0YXRpb25SZXN1bHRCb3VuZGFyeUZyb21Qb3Np
dGlvbjooV2ViVmlzaWJsZVBvc2l0aW9uICopcG9zaXRpb247CisKK0BlbmQKKworI2VuZGlmIC8v
IFBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvaW9zL1dlYkNvcmVTdXBw
b3J0L1dlYkZyYW1lSU9TLm1tIGIvU291cmNlL1dlYktpdC9pb3MvV2ViQ29yZVN1cHBvcnQvV2Vi
RnJhbWVJT1MubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWRmZjZmMGZlOWMxZDlmMmRlNGExZTExOTNhNWVmYjQ0
NjJkMDc5MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvaW9zL1dlYkNvcmVTdXBw
b3J0L1dlYkZyYW1lSU9TLm1tCkBAIC0wLDAgKzEsOTcxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIFBM
QVRGT1JNKElPUykKKworI2ltcG9ydCAiV2ViRnJhbWVJT1MuaCIKKworI2ltcG9ydCA8V2ViQ29y
ZS9FZGl0b3IuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRWxlbWVudC5oPgorI2ltcG9ydCA8V2ViQ29y
ZS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRmxvYXRSZWN0
Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lLmg+CisjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lU2Vs
ZWN0aW9uLmg+CisjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lU25hcHNob3R0aW5nTWFjLmg+CisjaW1w
b3J0IDxXZWJDb3JlL0ZyYW1lVmlldy5oPgorI2ltcG9ydCA8V2ViQ29yZS9IaXRUZXN0UmVzdWx0
Lmg+CisjaW1wb3J0IDxXZWJDb3JlL2h0bWxlZGl0aW5nLmg+CisjaW1wb3J0IDxXZWJDb3JlL1Bv
c2l0aW9uLmg+CisjaW1wb3J0IDxXZWJDb3JlL1JhbmdlLmg+CisjaW1wb3J0IDxXZWJDb3JlL1Jl
bmRlck9iamVjdC5oPgorI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJUZXh0Lmg+CisjaW1wb3J0IDxX
ZWJDb3JlL1NlbGVjdGlvblJlY3QuaD4KKyNpbXBvcnQgPFdlYkNvcmUvVGV4dEJvdW5kYXJpZXMu
aD4KKyNpbXBvcnQgPFdlYkNvcmUvVGV4dERpcmVjdGlvbi5oPgorI2ltcG9ydCA8V2ViQ29yZS9W
aXNpYmxlUG9zaXRpb24uaD4KKyNpbXBvcnQgPFdlYkNvcmUvVmlzaWJsZVVuaXRzLmg+CisjaW1w
b3J0IDxXZWJLaXQvRE9NLmg+CisjaW1wb3J0IDxXZWJLaXQvRE9NUmFuZ2UuaD4KKyNpbXBvcnQg
PFdlYktpdC9ET01VSUtpdEV4dGVuc2lvbnMuaD4KKyNpbXBvcnQgPFdlYktpdC9XZWJTZWxlY3Rp
b25SZWN0Lmg+CisjaW1wb3J0IDxXZWJLaXQvV2ViVmlzaWJsZVBvc2l0aW9uLmg+CisjaW1wb3J0
IDx1bmljb2RlL3VjaGFyLmg+CisKKyNpbXBvcnQgIkRPTU5vZGVJbnRlcm5hbC5oIgorI2ltcG9y
dCAiRE9NUmFuZ2VJbnRlcm5hbC5oIgorI2ltcG9ydCAiV2ViRnJhbWVJbnRlcm5hbC5oIgorI2lt
cG9ydCAiV2ViVUlLaXREZWxlZ2F0ZS5oIgorI2ltcG9ydCAiV2ViVmlld1ByaXZhdGUuaCIKKyNp
bXBvcnQgIldlYlZpc2libGVQb3NpdGlvbi5oIgorI2ltcG9ydCAiV2ViVmlzaWJsZVBvc2l0aW9u
SW50ZXJuYWwuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKKy8vLS0tLS0tLS0tLS0t
LS0tLS0tLQorCitAaW50ZXJmYWNlIFdlYkZyYW1lIChXZWJTZWNyZXRzSUtub3dBYm91dCkKKy0g
KFZpc2libGVQb3NpdGlvbilfdmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQ6KENHUG9pbnQpcG9pbnQ7
CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXZWJGcmFtZSAoV2ViRnJhbWVJT1MpCisKKy8vLS0t
LS0tLS0tLS0tLS0tLS0tLQorCistIChXZWJDb3JlOjpGcmFtZSAqKWNvcmVGcmFtZQoreworICAg
IHJldHVybiBfcHJpdmF0ZS0+Y29yZUZyYW1lOworfQorCistIChWaXNpYmxlUG9zaXRpb24pdmlz
aWJsZVBvc2l0aW9uRm9yUG9pbnQ6KENHUG9pbnQpcG9pbnQKK3sKKyAgICByZXR1cm4gW3NlbGYg
X3Zpc2libGVQb3NpdGlvbkZvclBvaW50OnBvaW50XTsKK30KKworLSAoVmlzaWJsZVBvc2l0aW9u
KWNsb3Nlc3RXb3JkQm91bmRhcnk6KFZpc2libGVQb3NpdGlvbilwb3NpdGlvbgoreworICAgIFZp
c2libGVQb3NpdGlvbiBzdGFydCA9IHN0YXJ0T2ZXb3JkKHBvc2l0aW9uKTsKKyAgICBWaXNpYmxl
UG9zaXRpb24gZW5kID0gZW5kT2ZXb3JkKHBvc2l0aW9uKTsKKyAgICBpbnQgc3RhcnREaXN0YW5j
ZSA9IHBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSAt
IHN0YXJ0LmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKKyAgICBp
bnQgZW5kRGlzdGFuY2UgPSBlbmQuZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkRWRpdGluZ09m
ZnNldCgpIC0gcG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkRWRpdGluZ09mZnNl
dCgpIDsKKyAgICByZXR1cm4gKHN0YXJ0RGlzdGFuY2UgPCBlbmREaXN0YW5jZSkgPyBzdGFydCA6
IGVuZDsgICAgCit9CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLQorCistICh2b2lkKWNsZWFyU2Vs
ZWN0aW9uCit7CisgICAgRnJhbWUgKmZyYW1lID0gW3NlbGYgY29yZUZyYW1lXTsKKyAgICBpZiAo
ZnJhbWUpCisgICAgICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+Y2xlYXJDdXJyZW50U2VsZWN0aW9u
KCk7ICAgIAorICAgIAorfQorCistIChXZWJUZXh0U2VsZWN0aW9uU3RhdGUpc2VsZWN0aW9uU3Rh
dGUKK3sKKyAgICBXZWJUZXh0U2VsZWN0aW9uU3RhdGUgc3RhdGU7CisgICAgCisgICAgRnJhbWUg
KmZyYW1lID0gW3NlbGYgY29yZUZyYW1lXTsKKyAgICBGcmFtZVNlbGVjdGlvbiogZnJhbWVTZWxl
Y3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCk7CisgICAgCisgICAgaWYgKCFmcmFtZVNlbGVjdGlv
bikgeworICAgICAgICBzdGF0ZSA9IFdlYlRleHRTZWxlY3Rpb25TdGF0ZU5vbmU7CisgICAgfSBl
bHNlIGlmIChmcmFtZVNlbGVjdGlvbi0+aXNDYXJldCgpKSB7CisgICAgICAgIHN0YXRlID0gV2Vi
VGV4dFNlbGVjdGlvblN0YXRlQ2FyZXQ7CisgICAgfSBlbHNlIGlmIChmcmFtZVNlbGVjdGlvbi0+
aXNSYW5nZSgpKSB7CisgICAgICAgIHN0YXRlID0gV2ViVGV4dFNlbGVjdGlvblN0YXRlUmFuZ2U7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdGUgPSBXZWJUZXh0U2VsZWN0aW9uU3RhdGVOb25l
OworICAgIH0KKyAgICAKKyAgICByZXR1cm4gc3RhdGU7Cit9CisKKworLSAoQk9PTCloYXNTZWxl
Y3Rpb24KK3sKKyAgICBXZWJUZXh0U2VsZWN0aW9uU3RhdGUgc3RhdGUgPSBbc2VsZiBzZWxlY3Rp
b25TdGF0ZV07CisgICAgcmV0dXJuIHN0YXRlID09IFdlYlRleHRTZWxlY3Rpb25TdGF0ZUNhcmV0
IHx8IHN0YXRlID09IFdlYlRleHRTZWxlY3Rpb25TdGF0ZVJhbmdlOworfQorCistIChDR1JlY3Qp
Y2FyZXRSZWN0Rm9yUG9zaXRpb246KFdlYlZpc2libGVQb3NpdGlvbiAqKXBvc2l0aW9uCit7Cisg
ICAgcmV0dXJuIHBvc2l0aW9uID8gW3Bvc2l0aW9uIF92aXNpYmxlUG9zaXRpb25dLmFic29sdXRl
Q2FyZXRCb3VuZHMoKSA6IENHUmVjdFplcm87Cit9CisKKy0gKENHUmVjdCljbG9zZXN0Q2FyZXRS
ZWN0SW5NYXJrZWRUZXh0UmFuZ2VGb3JQb2ludDooQ0dQb2ludClwb2ludAoreworICAgIEZyYW1l
ICpmcmFtZSA9IFtzZWxmIGNvcmVGcmFtZV07CisgICAgUmFuZ2UgKm1hcmtlZFRleHRSYW5nZSA9
IGZyYW1lLT5lZGl0b3IoKS5jb21wb3NpdGlvblJhbmdlKCkuZ2V0KCk7CisgICAgVmlzaWJsZVNl
bGVjdGlvbiBtYXJrZWRUZXh0UmFuZ2VTZWxlY3Rpb24gPSBWaXNpYmxlU2VsZWN0aW9uKG1hcmtl
ZFRleHRSYW5nZSk7CisKKyAgICBJbnRSZWN0IHJlc3VsdDsKKworICAgIGlmIChtYXJrZWRUZXh0
UmFuZ2VTZWxlY3Rpb24uaXNSYW5nZSgpKSB7CisgICAgICAgIFZpc2libGVQb3NpdGlvbiBzdGFy
dChtYXJrZWRUZXh0UmFuZ2VTZWxlY3Rpb24uc3RhcnQoKSk7CisgICAgICAgIFZpc2libGVQb3Np
dGlvbiBlbmQobWFya2VkVGV4dFJhbmdlU2VsZWN0aW9uLmVuZCgpKTsKKworICAgICAgICAvLyBB
ZGp1c3QgcG9zIGFuZCBnaXZlIGl0IGFuIGFwcHJvcHJpYXRlIGFmZmluaXR5LgorICAgICAgICBW
aXNpYmxlUG9zaXRpb24gcG9zOworICAgICAgICBWZWN0b3I8SW50UmVjdD4gaW50UmVjdHM7Cisg
ICAgICAgIG1hcmtlZFRleHRSYW5nZS0+dGV4dFJlY3RzKGludFJlY3RzLCBOTyk7CisgICAgICAg
IHVuc2lnbmVkIHNpemUgPSBpbnRSZWN0cy5zaXplKCk7CisgICAgICAgIENHUmVjdCBmaXJzdFJl
Y3QgPSBpbnRSZWN0c1swXTsKKyAgICAgICAgQ0dSZWN0IGxhc3RSZWN0ICA9IGludFJlY3RzW3Np
emUtMV07CisgICAgICAgIGlmIChwb2ludC55IDwgZmlyc3RSZWN0Lm9yaWdpbi55KSB7CisgICAg
ICAgICAgICBwb2ludC55ID0gZmlyc3RSZWN0Lm9yaWdpbi55OworICAgICAgICAgICAgcG9zID0g
W3NlbGYgdmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQ6cG9pbnRdOworICAgICAgICAgICAgcG9zLnNl
dEFmZmluaXR5KFVQU1RSRUFNKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChwb2ludC55
ID49IGxhc3RSZWN0Lm9yaWdpbi55KSB7CisgICAgICAgICAgICBwb2ludC55ID0gbGFzdFJlY3Qu
b3JpZ2luLnk7CisgICAgICAgICAgICBwb3MgPSBbc2VsZiB2aXNpYmxlUG9zaXRpb25Gb3JQb2lu
dDpwb2ludF07CisgICAgICAgICAgICBwb3Muc2V0QWZmaW5pdHkoRE9XTlNUUkVBTSk7CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBwb3MgPSBbc2VsZiB2aXNpYmxlUG9z
aXRpb25Gb3JQb2ludDpwb2ludF07CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChw
b3MgPT0gc3RhcnQgfHwgcG9zIDwgc3RhcnQpIHsKKyAgICAgICAgICAgIHN0YXJ0LnNldEFmZmlu
aXR5KFVQU1RSRUFNKTsKKyAgICAgICAgICAgIC8vcmVzdWx0ID0gc3RhcnQubmV4dCgpLmFic29s
dXRlQ2FyZXRCb3VuZHMoKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHN0YXJ0LmFic29sdXRlQ2Fy
ZXRCb3VuZHMoKTsgLy88cmRhcjovL3Byb2JsZW0vNjcxNjE4NT46IEFsbG93IHBsYWNpbmcgdGhl
IGNhYXJldCB0byB0aGUgbGVmdCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyLgorICAgICAgICB9IGVs
c2UgaWYgKHBvcyA+IGVuZCkgeworICAgICAgICAgICAgZW5kLnNldEFmZmluaXR5KERPV05TVFJF
QU0pOworICAgICAgICAgICAgcmVzdWx0ID0gZW5kLmFic29sdXRlQ2FyZXRCb3VuZHMoKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IHBvcy5hYnNvbHV0ZUNhcmV0Qm91
bmRzKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBWaXNpYmxlUG9zaXRpb24g
cG9zID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQ6cG9pbnRdOworICAgICAgICByZXN1
bHQgPSBwb3MuYWJzb2x1dGVDYXJldEJvdW5kcygpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4g
KENHUmVjdCkgcmVzdWx0OyAgICAKK30KKworCistICh2b2lkKWNvbGxhcHNlU2VsZWN0aW9uCit7
CisgICAgaWYgKFtzZWxmIHNlbGVjdGlvblN0YXRlXSA9PSBXZWJUZXh0U2VsZWN0aW9uU3RhdGVS
YW5nZSkgeworICAgICAgICBGcmFtZSAqZnJhbWUgPSBbc2VsZiBjb3JlRnJhbWVdOworICAgICAg
ICBGcmFtZVNlbGVjdGlvbiogZnJhbWVTZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCk7Cisg
ICAgICAgIFZpc2libGVQb3NpdGlvbiBlbmQoZnJhbWVTZWxlY3Rpb24tPmVuZCgpKTsKKyAgICAg
ICAgZnJhbWVTZWxlY3Rpb24tPm1vdmVUbyhlbmQpOworICAgIH0KK30KKworLSAodm9pZClleHRl
bmRTZWxlY3Rpb246KEJPT0wpc3RhcnQKK3sKKyAgICBpZiAoW3NlbGYgc2VsZWN0aW9uU3RhdGVd
ID09IFdlYlRleHRTZWxlY3Rpb25TdGF0ZVJhbmdlKSB7CisgICAgICAgIEZyYW1lICpmcmFtZSA9
IFtzZWxmIGNvcmVGcmFtZV07CisgICAgICAgIEZyYW1lU2VsZWN0aW9uKiBmcmFtZVNlbGVjdGlv
biA9IGZyYW1lLT5zZWxlY3Rpb24oKTsKKyAgICAgICAgaWYgKHN0YXJ0KSB7CisgICAgICAgICAg
ICBWaXNpYmxlUG9zaXRpb24gc3RhcnQgPSBzdGFydE9mV29yZChmcmFtZVNlbGVjdGlvbi0+c3Rh
cnQoKSk7CisgICAgICAgICAgICBmcmFtZVNlbGVjdGlvbi0+bW92ZVRvKHN0YXJ0LCBmcmFtZVNl
bGVjdGlvbi0+ZW5kKCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVmlzaWJsZVBv
c2l0aW9uIGVuZCA9IGVuZE9mV29yZChmcmFtZVNlbGVjdGlvbi0+ZW5kKCkpOworICAgICAgICAg
ICAgZnJhbWVTZWxlY3Rpb24tPm1vdmVUbyhmcmFtZVNlbGVjdGlvbi0+c3RhcnQoKSwgZW5kKTsK
KyAgICAgICAgfQorICAgIH0gICAgCit9CisKKy0gKE5TQXJyYXkgKilzZWxlY3Rpb25SZWN0c0Zv
ckNvcmVSYW5nZTooUmFuZ2UgKilyYW5nZQoreworICAgIGlmICghcmFuZ2UpCisgICAgICAgIHJl
dHVybiBuaWw7CisgICAgCisgICAgVmVjdG9yPFNlbGVjdGlvblJlY3Q+IHJlY3RzOworICAgIHJh
bmdlLT5jb2xsZWN0U2VsZWN0aW9uUmVjdHMocmVjdHMpOworICAgIHVuc2lnbmVkIHNpemUgPSBy
ZWN0cy5zaXplKCk7CisgICAgCisgICAgTlNNdXRhYmxlQXJyYXkgKnJlc3VsdCA9IFtOU011dGFi
bGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTpzaXplXTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAgIFNlbGVjdGlvblJlY3QgJmNvcmVSZWN0ID0gcmVj
dHNbaV07CisgICAgICAgIFdlYlNlbGVjdGlvblJlY3QgKndlYlJlY3QgPSBbV2ViU2VsZWN0aW9u
UmVjdCBzZWxlY3Rpb25SZWN0XTsKKyAgICAgICAgd2ViUmVjdC5yZWN0ID0gc3RhdGljX2Nhc3Q8
Q0dSZWN0Pihjb3JlUmVjdC5yZWN0KCkpOworICAgICAgICB3ZWJSZWN0LndyaXRpbmdEaXJlY3Rp
b24gPSBjb3JlUmVjdC5kaXJlY3Rpb24oKSA9PSBMVFIgPyBXS1dyaXRpbmdEaXJlY3Rpb25MZWZ0
VG9SaWdodCA6IFdLV3JpdGluZ0RpcmVjdGlvblJpZ2h0VG9MZWZ0OworICAgICAgICB3ZWJSZWN0
LmlzTGluZUJyZWFrID0gY29yZVJlY3QuaXNMaW5lQnJlYWsoKTsKKyAgICAgICAgd2ViUmVjdC5p
c0ZpcnN0T25MaW5lID0gY29yZVJlY3QuaXNGaXJzdE9uTGluZSgpOworICAgICAgICB3ZWJSZWN0
LmlzTGFzdE9uTGluZSA9IGNvcmVSZWN0LmlzTGFzdE9uTGluZSgpOworICAgICAgICB3ZWJSZWN0
LmNvbnRhaW5zU3RhcnQgPSBjb3JlUmVjdC5jb250YWluc1N0YXJ0KCk7CisgICAgICAgIHdlYlJl
Y3QuY29udGFpbnNFbmQgPSBjb3JlUmVjdC5jb250YWluc0VuZCgpOworICAgICAgICB3ZWJSZWN0
LmlzSW5GaXhlZFBvc2l0aW9uID0gY29yZVJlY3QuaXNJbkZpeGVkUG9zaXRpb24oKTsKKyAgICAg
ICAgd2ViUmVjdC5pc0hvcml6b250YWwgPSBjb3JlUmVjdC5pc0hvcml6b250YWwoKTsKKyAgICAg
ICAgW3Jlc3VsdCBhZGRPYmplY3Q6d2ViUmVjdF07CisgICAgfQorICAgIAorICAgIHJldHVybiBy
ZXN1bHQ7ICAgICAgICAKK30KKworLSAoTlNBcnJheSAqKXNlbGVjdGlvblJlY3RzRm9yUmFuZ2U6
KERPTVJhbmdlICopZG9tUmFuZ2UKK3sKKyAgICByZXR1cm4gW3NlbGYgc2VsZWN0aW9uUmVjdHNG
b3JDb3JlUmFuZ2U6Y29yZShkb21SYW5nZSldOworfQorCistIChOU0FycmF5ICopc2VsZWN0aW9u
UmVjdHMKK3sKKyAgICBpZiAoIVtzZWxmIGhhc1NlbGVjdGlvbl0pCisgICAgICAgIHJldHVybiBu
aWw7CisKKyAgICBGcmFtZSAqZnJhbWUgPSBbc2VsZiBjb3JlRnJhbWVdOworICAgIFJhbmdlICpy
YW5nZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS0+dG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKTsKKyAg
ICByZXR1cm4gW3NlbGYgc2VsZWN0aW9uUmVjdHNGb3JDb3JlUmFuZ2U6cmFuZ2VdOworfQorCist
IChET01SYW5nZSAqKXdvcmRBdFBvaW50OihDR1BvaW50KXBvaW50Cit7CisgICAgVmlzaWJsZVBv
c2l0aW9uIHBvcyA9IFtzZWxmIHZpc2libGVQb3NpdGlvbkZvclBvaW50OnBvaW50XTsKKyAgICBW
aXNpYmxlUG9zaXRpb24gc3RhcnQgPSBzdGFydE9mV29yZChwb3MpOworICAgIFZpc2libGVQb3Np
dGlvbiBlbmQgPSBlbmRPZldvcmQocG9zKTsKKyAgICBET01SYW5nZSAqd29yZFJhbmdlID0ga2l0
KG1ha2VSYW5nZShzdGFydCwgZW5kKS5nZXQoKSk7CisgICAgcmV0dXJuIHdvcmRSYW5nZTsgICAK
K30KKworLSAoV2ViVmlzaWJsZVBvc2l0aW9uICopd2ViVmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQ6
KENHUG9pbnQpcG9pbnQKK3sKKyAgICByZXR1cm4gW1dlYlZpc2libGVQb3NpdGlvbiBfd3JhcFZp
c2libGVQb3NpdGlvbjpbc2VsZiB2aXNpYmxlUG9zaXRpb25Gb3JQb2ludDpwb2ludF1dOworfQor
CistICh2b2lkKXNldFJhbmdlZFNlbGVjdGlvbkJhc2VUb0N1cnJlbnRTZWxlY3Rpb24KK3sKKyAg
ICBGcmFtZSAqZnJhbWUgPSBbc2VsZiBjb3JlRnJhbWVdOworICAgIGZyYW1lLT5zZXRSYW5nZWRT
ZWxlY3Rpb25CYXNlVG9DdXJyZW50U2VsZWN0aW9uKCk7Cit9CisKKy0gKHZvaWQpc2V0UmFuZ2Vk
U2VsZWN0aW9uQmFzZVRvQ3VycmVudFNlbGVjdGlvblN0YXJ0Cit7CisgICAgRnJhbWUgKmZyYW1l
ID0gW3NlbGYgY29yZUZyYW1lXTsKKyAgICBmcmFtZS0+c2V0UmFuZ2VkU2VsZWN0aW9uQmFzZVRv
Q3VycmVudFNlbGVjdGlvblN0YXJ0KCk7Cit9CisKKy0gKHZvaWQpc2V0UmFuZ2VkU2VsZWN0aW9u
QmFzZVRvQ3VycmVudFNlbGVjdGlvbkVuZAoreworICAgIEZyYW1lICpmcmFtZSA9IFtzZWxmIGNv
cmVGcmFtZV07CisgICAgZnJhbWUtPnNldFJhbmdlZFNlbGVjdGlvbkJhc2VUb0N1cnJlbnRTZWxl
Y3Rpb25FbmQoKTsKK30KKworLSAodm9pZCljbGVhclJhbmdlZFNlbGVjdGlvbkluaXRpYWxFeHRl
bnQKK3sKKyAgICBGcmFtZSAqZnJhbWUgPSBbc2VsZiBjb3JlRnJhbWVdOworICAgIGZyYW1lLT5j
bGVhclJhbmdlZFNlbGVjdGlvbkluaXRpYWxFeHRlbnQoKTsKK30KKworLSAodm9pZClzZXRSYW5n
ZWRTZWxlY3Rpb25Jbml0aWFsRXh0ZW50VG9DdXJyZW50U2VsZWN0aW9uU3RhcnQKK3sKKyAgICBG
cmFtZSAqZnJhbWUgPSBbc2VsZiBjb3JlRnJhbWVdOworICAgIGZyYW1lLT5zZXRSYW5nZWRTZWxl
Y3Rpb25Jbml0aWFsRXh0ZW50VG9DdXJyZW50U2VsZWN0aW9uU3RhcnQoKTsKK30KKworLSAodm9p
ZClzZXRSYW5nZWRTZWxlY3Rpb25Jbml0aWFsRXh0ZW50VG9DdXJyZW50U2VsZWN0aW9uRW5kCit7
CisgICAgRnJhbWUgKmZyYW1lID0gW3NlbGYgY29yZUZyYW1lXTsKKyAgICBmcmFtZS0+c2V0UmFu
Z2VkU2VsZWN0aW9uSW5pdGlhbEV4dGVudFRvQ3VycmVudFNlbGVjdGlvbkVuZCgpOworfQorCist
ICh2b2lkKXNldFJhbmdlZFNlbGVjdGlvbldpdGhFeHRlbnRQb2ludDooQ0dQb2ludClwb2ludAor
eyAgICAKKyAgICBGcmFtZSAqZnJhbWUgPSBbc2VsZiBjb3JlRnJhbWVdOworICAgIEZyYW1lU2Vs
ZWN0aW9uKiBmcmFtZVNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKTsKKyAgICBWaXNpYmxl
UG9zaXRpb24gcG9zID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQ6cG9pbnRdOworICAg
IFZpc2libGVTZWxlY3Rpb24gYmFzZSA9IGZyYW1lLT5yYW5nZWRTZWxlY3Rpb25CYXNlKCk7Cisg
ICAgCisgICAgaWYgKHBvcy5pc051bGwoKSB8fCAhYmFzZS5pc1JhbmdlKCkpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnQoYmFzZS5zdGFydCgpKTsKKyAg
ICBWaXNpYmxlUG9zaXRpb24gZW5kKGJhc2UuZW5kKCkpOyAgICAKKyAgICAKKyAgICBpZiAocG9z
IDwgc3RhcnQpIHsgICAgICAgIAorICAgICAgICBmcmFtZVNlbGVjdGlvbi0+bW92ZVRvKHBvcywg
ZW5kKTsKKyAgICB9IAorICAgIGVsc2UgaWYgKHBvcyA+IGVuZCkgeworICAgICAgICBmcmFtZVNl
bGVjdGlvbi0+bW92ZVRvKHN0YXJ0LCBwb3MpOworICAgIH0gCisgICAgZWxzZSB7CisgICAgICAg
IGZyYW1lU2VsZWN0aW9uLT5tb3ZlVG8oc3RhcnQsIGVuZCk7CisgICAgfQorfQorCistIChCT09M
KXNldFJhbmdlZFNlbGVjdGlvbkV4dGVudFBvaW50OihDR1BvaW50KWV4dGVudFBvaW50IGJhc2VJ
c1N0YXJ0OihCT09MKWJhc2VJc1N0YXJ0IGFsbG93RmxpcHBpbmc6KEJPT0wpYWxsb3dGbGlwcGlu
ZworeworICAgIEZyYW1lICpmcmFtZSA9IFtzZWxmIGNvcmVGcmFtZV07CisgICAgVmlzaWJsZVNl
bGVjdGlvbiByYW5nZWRTZWxlY3Rpb25CYXNlKGZyYW1lLT5yYW5nZWRTZWxlY3Rpb25CYXNlKCkp
OworICAgIFZpc2libGVQb3NpdGlvbiBiYXNlU3RhcnQocmFuZ2VkU2VsZWN0aW9uQmFzZS5zdGFy
dCgpLCByYW5nZWRTZWxlY3Rpb25CYXNlLmFmZmluaXR5KCkpOworICAgIFZpc2libGVQb3NpdGlv
biBiYXNlRW5kOworICAgIGlmIChyYW5nZWRTZWxlY3Rpb25CYXNlLmlzTm9uZSgpKSB7CisgICAg
ICAgIHJldHVybiBiYXNlSXNTdGFydDsKKyAgICB9CisgICAgZWxzZSBpZiAocmFuZ2VkU2VsZWN0
aW9uQmFzZS5pc0NhcmV0KCkpIHsKKyAgICAgICAgYmFzZUVuZCA9IGJhc2VTdGFydDsKKyAgICB9
CisgICAgZWxzZSB7CisgICAgICAgIGJhc2VFbmQgPSBWaXNpYmxlUG9zaXRpb24ocmFuZ2VkU2Vs
ZWN0aW9uQmFzZS5lbmQoKSwgcmFuZ2VkU2VsZWN0aW9uQmFzZS5hZmZpbml0eSgpKTsKKyAgICB9
CisKKyAgICBWaXNpYmxlUG9zaXRpb24gZXh0ZW50KFtzZWxmIHZpc2libGVQb3NpdGlvbkZvclBv
aW50OmV4dGVudFBvaW50XSk7CisgICAgCisgICAgaWYgKHJhbmdlZFNlbGVjdGlvbkJhc2UuaXNS
YW5nZSgpICYmIGJhc2VTdGFydCA8IGV4dGVudCAmJiBleHRlbnQgPCBiYXNlRW5kKSB7CisgICAg
ICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+bW92ZVRvKGJhc2VTdGFydCwgYmFzZUVuZCk7CisgICAg
ICAgIHJldHVybiBOTzsKKyAgICB9ICAgIAorICAgIAorICAgIENHUmVjdCBjYXJldFJlY3QgPSBi
YXNlSXNTdGFydCA/IGJhc2VTdGFydC5hYnNvbHV0ZUNhcmV0Qm91bmRzKCkgOiBiYXNlRW5kLmFi
c29sdXRlQ2FyZXRCb3VuZHMoKTsKKyAgICBDR1BvaW50IGJhc2VQb2ludCA9IENHUG9pbnRNYWtl
KGNhcmV0UmVjdC5vcmlnaW4ueCwgY2FyZXRSZWN0Lm9yaWdpbi55KTsKKworICAgIHN0YXRpYyBj
b25zdCBDR0Zsb2F0IEZsaXBNYXJnaW4gPSAzMDsKKyAgICBib29sIGRpZEZsaXBTdGFydEVuZCA9
IGZhbHNlOworICAgIGJvb2wgY2FuRmxpcFN0YXJ0RW5kID0gYWxsb3dGbGlwcGluZyAmJiAKKyAg
ICAgICAgKGZhYnMoYmFzZVBvaW50LnggLSBleHRlbnRQb2ludC54KSA+IEZsaXBNYXJnaW4gfHwg
ZmFicyhiYXNlUG9pbnQueSAtIGV4dGVudFBvaW50LnkpID4gRmxpcE1hcmdpbik7CisKKyAgICBW
aXNpYmxlUG9zaXRpb24gYmFzZTsKKyAgICBpZiAoYmFzZUlzU3RhcnQpIHsgICAgICAgICAgICAg
ICAgCisgICAgICAgIGJhc2UgPSBiYXNlU3RhcnQ7CisgICAgICAgIEJPT0wgd291bGRGbGlwID0g
KGV4dGVudCA8IGJhc2UpOworICAgICAgICBpZiAod291bGRGbGlwKSB7CisgICAgICAgICAgICBp
ZiAoIWNhbkZsaXBTdGFydEVuZCkgeworICAgICAgICAgICAgICAgIC8vIFdlJ3JlIGdvaW5nIHRv
IHByZXZlbnQgZmxpcHBpbmcuICBGaXJzdCB0cnkgZm9yIGEgcG9zaXRpb24gb24gdGhlIHNhbWUg
bGluZS4KKyAgICAgICAgICAgICAgICAvLyBJZiB0aGF0IGZhaWxzLCBqdXN0IGNob29zZSBzb21l
dGhpbmcgYWZ0ZXIgdGhlIHN0YXJ0LgorICAgICAgICAgICAgICAgIENHUmVjdCBiYXNlQ2FyZXQg
PSBiYXNlLmFic29sdXRlQ2FyZXRCb3VuZHMoKTsKKyAgICAgICAgICAgICAgICBib29sIGJhc2VJ
c0hvcml6b250YWwgPSBiYXNlQ2FyZXQuc2l6ZS5oZWlnaHQgPiBiYXNlQ2FyZXQuc2l6ZS53aWR0
aDsKKyAgICAgICAgICAgICAgICBDR1BvaW50IHBvaW50SW5MaW5lID0gYmFzZUlzSG9yaXpvbnRh
bCA/IENHUG9pbnRNYWtlKGV4dGVudFBvaW50LngsIENHUmVjdEdldE1pZFkoYmFzZUNhcmV0KSkg
OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQ0dQb2ludE1ha2UoQ0dSZWN0R2V0TWlkWChiYXNlQ2FyZXQpLCBleHRlbnRQb2ludC55KTsK
KyAgICAgICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25JbkxpbmUgPSBbc2VsZiB2
aXNpYmxlUG9zaXRpb25Gb3JQb2ludDpwb2ludEluTGluZV07CisgICAgICAgICAgICAgICAgaWYg
KHBvc2l0aW9uSW5MaW5lLmlzTm90TnVsbCgpICYmIHBvc2l0aW9uSW5MaW5lID4gYmFzZSkgewor
ICAgICAgICAgICAgICAgICAgICBleHRlbnQgPSBwb3NpdGlvbkluTGluZTsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBleHRlbnQgPSBiYXNlLm5leHQoKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IGRpZEZsaXBTdGFydEVuZCA9IFlFUzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgaWYgKGJhc2UgPT0gZXh0ZW50KQorICAgICAgICAgICAgZXh0ZW50ID0gYmFz
ZS5uZXh0KCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBiYXNlID0gYmFzZUVuZDsKKyAg
ICAgICAgQk9PTCB3b3VsZEZsaXAgPSAoZXh0ZW50ID4gYmFzZSk7CisgICAgICAgIGlmICh3b3Vs
ZEZsaXApIHsKKyAgICAgICAgICAgIGlmICghY2FuRmxpcFN0YXJ0RW5kKSB7CisgICAgICAgICAg
ICAgICAgLy8gV2UncmUgZ29pbmcgdG8gcHJldmVudCBmbGlwcGluZy4gIEZpcnN0IHRyeSBmb3Ig
YSBwb3NpdGlvbiBvbiB0aGUgc2FtZSBsaW5lLgorICAgICAgICAgICAgICAgIC8vIElmIHRoYXQg
ZmFpbHMsIGp1c3QgY2hvb3NlIHNvbWV0aGluZyBiZWZvcmUgdGhlIGVuZC4KKyAgICAgICAgICAg
ICAgICBDR1JlY3QgYmFzZUNhcmV0ID0gYmFzZS5hYnNvbHV0ZUNhcmV0Qm91bmRzKCk7CisgICAg
ICAgICAgICAgICAgYm9vbCBiYXNlSXNIb3Jpem9udGFsID0gYmFzZUNhcmV0LnNpemUuaGVpZ2h0
ID4gYmFzZUNhcmV0LnNpemUud2lkdGg7CisgICAgICAgICAgICAgICAgQ0dQb2ludCBwb2ludElu
TGluZSA9IGJhc2VJc0hvcml6b250YWwgPyBDR1BvaW50TWFrZShleHRlbnRQb2ludC54LCBDR1Jl
Y3RHZXRNaWRZKGJhc2VDYXJldCkpIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENHUG9pbnRNYWtlKENHUmVjdEdldE1pZFgoYmFzZUNh
cmV0KSwgZXh0ZW50UG9pbnQueSk7CisgICAgICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHBv
c2l0aW9uSW5MaW5lID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQ6cG9pbnRJbkxpbmVd
OworICAgICAgICAgICAgICAgIGlmIChwb3NpdGlvbkluTGluZS5pc05vdE51bGwoKSAmJiBwb3Np
dGlvbkluTGluZSA8IGJhc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgZXh0ZW50ID0gcG9zaXRp
b25JbkxpbmU7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
ZXh0ZW50ID0gYmFzZS5wcmV2aW91cygpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZGlkRmxpcFN0YXJ0RW5kID0gWUVTOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoYmFzZSA9PSBleHRlbnQp
CisgICAgICAgICAgICBleHRlbnQgPSBiYXNlLnByZXZpb3VzKCk7CisgICAgfQorICAgIAorICAg
IGZyYW1lLT5zZWxlY3Rpb24oKS0+bW92ZVRvKGJhc2UsIGV4dGVudCk7CisKKyAgICByZXR1cm4g
ZGlkRmxpcFN0YXJ0RW5kID8gIWJhc2VJc1N0YXJ0IDogYmFzZUlzU3RhcnQ7Cit9CisKKy0gKEJP
T0wpc2V0U2VsZWN0aW9uV2l0aEJhc2VQb2ludDooQ0dQb2ludCliYXNlUG9pbnQgZXh0ZW50UG9p
bnQ6KENHUG9pbnQpZXh0ZW50UG9pbnQgYmFzZUlzU3RhcnQ6KEJPT0wpYmFzZUlzU3RhcnQgYWxs
b3dGbGlwcGluZzooQk9PTClhbGxvd0ZsaXBwaW5nCit7CisgICAgLy8gVGhpcyBmdW5jdGlvbiB1
cGRhdGVzIHRoZSBzZWxlY3Rpb24gdXNpbmcgdHdvIHBvaW50cyBhbmQgYW4gZXhpc3Rpbmcgbm90
aW9uIG9mCisgICAgLy8gd2hpY2ggaXMgdGhlIGJhc2UgYW5kIHdoaWNoIGlzIHRoZSBleHRlbnQu
IEhvd2V2ZXIsIGlmIHRoZSBhbGxvd0ZsaXBwaW5nIGFyZ3VtZW50CisgICAgLy8gaXMgWUVTLCBp
dCB3aWxsIGFsbG93IHRoZSBiYXNlIGFuZCBleHRlbnQgcG9zaXRpb25zIHRvIGZsaXAgaWYgdGhl
IGV4dGVudCBtb3ZlcyBhCisgICAgLy8gY2VydGFpbiBhbW91bnQgdG8gdGhlICJvdGhlciBzaWRl
IiBvZiB0aGUgYmFzZS4gV2hlbiBhIGZsaXAgb2Ygc3RhcnQvZW5kIG9jY3VycworICAgIC8vIHJl
bGF0aXZlIHRvIGJhc2UvZXh0ZW50LCAgdGhpcyBpcyByZXBvcnRlZCBiYWNrIHRvIHRoZSBjYWxs
aW5nIGNvZGUsIHdoaWNoIGlzIHRoZW4KKyAgICAvLyBleHBlY3RlZCB0byB0YWtlIHRoZSBmbGlw
IGludG8gYWNjb3VudCBpbiBzdWJzZXF1ZW50IGNhbGxzIHRvIHRoaXMgZnVuY3Rpb24gKGZvciBh
dAorICAgIC8vIGxlYXN0IGFzIGxvbmcgYXMgYSBzaW5nbGUsIGxvZ2ljYWwgc2VsZWN0aW9uIHNl
c3Npb24gY29udGludWVzKS4KKworICAgIEZyYW1lICpmcmFtZSA9IFtzZWxmIGNvcmVGcmFtZV07
CisgICAgRnJhbWVTZWxlY3Rpb24qIGZyYW1lU2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigp
OworICAgIFZpc2libGVQb3NpdGlvbiBiYXNlKFtzZWxmIHZpc2libGVQb3NpdGlvbkZvclBvaW50
OmJhc2VQb2ludF0pOworICAgIFZpc2libGVQb3NpdGlvbiBleHRlbnQoW3NlbGYgdmlzaWJsZVBv
c2l0aW9uRm9yUG9pbnQ6ZXh0ZW50UG9pbnRdKTsKKworICAgIHN0YXRpYyBjb25zdCBDR0Zsb2F0
IEZsaXBNYXJnaW4gPSAzMDsKKyAgICBib29sIGRpZEZsaXBTdGFydEVuZCA9IGZhbHNlOworICAg
IGJvb2wgY2FuRmxpcFN0YXJ0RW5kID0gYWxsb3dGbGlwcGluZyAmJgorICAgICAgICAgICAgICAg
ICAgICAgICAgKChiYXNlSXNTdGFydCAmJiAgKGV4dGVudFBvaW50LnggPD0gYmFzZVBvaW50Lngg
LSBGbGlwTWFyZ2luIHx8IGV4dGVudFBvaW50LnkgPD0gYmFzZVBvaW50LnkgLSBGbGlwTWFyZ2lu
KSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoIWJhc2VJc1N0YXJ0ICYmIChleHRlbnRQ
b2ludC54ID49IGJhc2VQb2ludC54ICsgRmxpcE1hcmdpbiB8fCBleHRlbnRQb2ludC55ID49IGJh
c2VQb2ludC55ICsgRmxpcE1hcmdpbikpKTsKKyAgICAKKyAgICAgICAgICAgICAgICAgICAgICAg
IAorICAgIGlmIChleHRlbnQgPT0gYmFzZSkgeworICAgICAgICBleHRlbnQgPSBiYXNlSXNTdGFy
dCA/IGJhc2UubmV4dCgpIDogYmFzZS5wcmV2aW91cygpOworICAgIH0KKyAgICBlbHNlIGlmIChi
YXNlSXNTdGFydCAmJiBleHRlbnQgPCBiYXNlKSB7CisgICAgICAgIGlmIChjYW5GbGlwU3RhcnRF
bmQpCisgICAgICAgICAgICBkaWRGbGlwU3RhcnRFbmQgPSB0cnVlOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBleHRlbnQgPSBiYXNlLm5leHQoKTsKKyAgICB9CisgICAgZWxzZSBpZiAoIWJh
c2VJc1N0YXJ0ICYmIGV4dGVudCA+IGJhc2UpIHsKKyAgICAgICAgaWYgKGNhbkZsaXBTdGFydEVu
ZCkKKyAgICAgICAgICAgIGRpZEZsaXBTdGFydEVuZCA9IHRydWU7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIGV4dGVudCA9IGJhc2UucHJldmlvdXMoKTsKKyAgICB9CisKKyAgICBmcmFtZVNl
bGVjdGlvbi0+bW92ZVRvKGJhc2UsIGV4dGVudCk7CisKKyAgICByZXR1cm4gZGlkRmxpcFN0YXJ0
RW5kID8gIWJhc2VJc1N0YXJ0IDogYmFzZUlzU3RhcnQ7Cit9CisKKy0gKEJPT0wpc2V0U2VsZWN0
aW9uV2l0aEJhc2VQb2ludDooQ0dQb2ludCliYXNlUG9pbnQgZXh0ZW50UG9pbnQ6KENHUG9pbnQp
ZXh0ZW50UG9pbnQgYmFzZUlzU3RhcnQ6KEJPT0wpYmFzZUlzU3RhcnQKK3sKKyAgICByZXR1cm4g
W3NlbGYgc2V0U2VsZWN0aW9uV2l0aEJhc2VQb2ludDpiYXNlUG9pbnQgZXh0ZW50UG9pbnQ6ZXh0
ZW50UG9pbnQgYmFzZUlzU3RhcnQ6YmFzZUlzU3RhcnQgYWxsb3dGbGlwcGluZzpZRVNdOworfQor
CistICh2b2lkKXNldFNlbGVjdGlvbldpdGhGaXJzdFBvaW50OihDR1BvaW50KWZpcnN0UG9pbnQg
c2Vjb25kUG9pbnQ6KENHUG9pbnQpc2Vjb25kUG9pbnQKK3sKKyAgICAvLyBXZSBzdGlsbCBzdXBw
b3J0IHR3by1maW5nZXIgdGFwcyB0byBtYWtlIGEgc2VsZWN0aW9uLCBhbmQgdGhlc2UgdGFwcwor
ICAgIC8vIGRvbid0IGNhcmUgYWJvdXQgYmFzZS9leHRlbnQuCisgICAgVmlzaWJsZVBvc2l0aW9u
IGZpcnN0KFtzZWxmIHZpc2libGVQb3NpdGlvbkZvclBvaW50OmZpcnN0UG9pbnRdKTsKKyAgICBW
aXNpYmxlUG9zaXRpb24gc2Vjb25kKFtzZWxmIHZpc2libGVQb3NpdGlvbkZvclBvaW50OnNlY29u
ZFBvaW50XSk7CisgICAgRnJhbWUgKmZyYW1lID0gW3NlbGYgY29yZUZyYW1lXTsKKyAgICBGcmFt
ZVNlbGVjdGlvbiogZnJhbWVTZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCk7CisgICAgZnJh
bWVTZWxlY3Rpb24tPm1vdmVUbyhmaXJzdCwgc2Vjb25kKTsKK30KKworLSAodm9pZCllbnN1cmVS
YW5nZWRTZWxlY3Rpb25Db250YWluc0luaXRpYWxTdGFydFBvaW50OihDR1BvaW50KWluaXRpYWxT
dGFydFBvaW50IGluaXRpYWxFbmRQb2ludDooQ0dQb2ludClpbml0aWFsRW5kUG9pbnQKK3sKKyAg
ICAvLyBUaGlzIG1ldGhvZCBlbnN1cmVzIHRoYXQgc2VsZWN0aW9uIGVuZHMgZG9lc24ndCBjb250
cmFjdCBzdWNoIHRoYXQgaXQgbm8KKyAgICAvLyBsb25nZXIgY29udGFpbnMgdGhlc2UgcG9pbnRz
LiBUaGlzIGlzIHRoZSBkZXNpcmFibGUgYmVoYXZpb3Igd2hlbiB0aGUKKyAgICAvLyB1c2VyIGRv
ZXMgdGhlIHRhcC1hbmQtYS1oYWxmICsgZHJhZyBvcGVyYXRpb24uCisgICAgRnJhbWUgKmZyYW1l
ID0gW3NlbGYgY29yZUZyYW1lXTsKKyAgICBGcmFtZVNlbGVjdGlvbiogZnJhbWVTZWxlY3Rpb24g
PSBmcmFtZS0+c2VsZWN0aW9uKCk7CisgICAgUG9zaXRpb24gZW5zdXJlU3RhcnQoW3NlbGYgdmlz
aWJsZVBvc2l0aW9uRm9yUG9pbnQ6aW5pdGlhbFN0YXJ0UG9pbnRdLmRlZXBFcXVpdmFsZW50KCkp
OworICAgIFBvc2l0aW9uIGVuc3VyZUVuZChbc2VsZiB2aXNpYmxlUG9zaXRpb25Gb3JQb2ludDpp
bml0aWFsRW5kUG9pbnRdLmRlZXBFcXVpdmFsZW50KCkpOworICAgIGlmIChmcmFtZVNlbGVjdGlv
bi0+c3RhcnQoKSA+IGVuc3VyZVN0YXJ0KSB7CisgICAgICAgIGZyYW1lU2VsZWN0aW9uLT5tb3Zl
VG8oZW5zdXJlU3RhcnQsIGZyYW1lU2VsZWN0aW9uLT5lbmQoKSk7CisgICAgfQorICAgIGVsc2Ug
aWYgKGZyYW1lU2VsZWN0aW9uLT5lbmQoKSA8IGVuc3VyZUVuZCkgeworICAgICAgICBmcmFtZVNl
bGVjdGlvbi0+bW92ZVRvKGZyYW1lU2VsZWN0aW9uLT5zdGFydCgpLCBlbnN1cmVFbmQpOworICAg
IH0KK30KKworLSAodm9pZClhZ2dyZXNzaXZlbHlFeHBhbmRTZWxlY3Rpb25Ub1dvcmRDb250YWlu
aW5nQ2FyZXRTZWxlY3Rpb24KK3sKKyAgICBGcmFtZSAqZnJhbWUgPSBbc2VsZiBjb3JlRnJhbWVd
OworICAgIEZyYW1lU2VsZWN0aW9uKiBmcmFtZVNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24o
KTsKKyAgICBWaXNpYmxlUG9zaXRpb24gZW5kKGZyYW1lU2VsZWN0aW9uLT5lbmQoKSk7CisgICAg
aWYgKGVuZCA9PSBlbmRPZkRvY3VtZW50KGVuZCkgJiYgZW5kICE9IHN0YXJ0T2ZEb2N1bWVudChl
bmQpICYmIGVuZCA9PSBzdGFydE9mTGluZShlbmQpKSB7CisgICAgICAgIGZyYW1lU2VsZWN0aW9u
LT5tb3ZlVG8oZW5kLnByZXZpb3VzKCksIGVuZCk7CisgICAgfQorCisgICAgW3NlbGYgZXhwYW5k
U2VsZWN0aW9uVG9Xb3JkQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uXTsKKworICAgIC8vIFRoaXMg
aXMgYSB0ZW1wb3JhcnkgaGFjayB1bnRpbCB3ZSBnZXQgdGhlIGltcHJvdmVtZW50cworICAgIC8v
IEknbSB3b3JraW5nIG9uIGZvciBSVEwgc2VsZWN0aW9uLgorICAgIGlmIChmcmFtZVNlbGVjdGlv
bi0+Z3JhbnVsYXJpdHkoKSA9PSBXb3JkR3JhbnVsYXJpdHkpIHsKKyAgICAgICAgZnJhbWVTZWxl
Y3Rpb24tPm1vdmVUbyhmcmFtZVNlbGVjdGlvbi0+c3RhcnQoKSwgZnJhbWVTZWxlY3Rpb24tPmVu
ZCgpKTsKKyAgICB9CisgICAgCisgICAgaWYgKGZyYW1lU2VsZWN0aW9uLT5pc0NhcmV0KCkpIHsK
KyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHBvcyhmcmFtZVNlbGVjdGlvbi0+ZW5kKCkpOworICAg
ICAgICBpZiAoaXNTdGFydE9mTGluZShwb3MpICYmIGlzRW5kT2ZMaW5lKHBvcykpIHsKKyAgICAg
ICAgICAgIFZpc2libGVQb3NpdGlvbiBuZXh0KHBvcy5uZXh0KCkpOworICAgICAgICAgICAgaWYg
KG5leHQuaXNOb3ROdWxsKCkpIHsKKyAgICAgICAgICAgICAgICBmcmFtZVNlbGVjdGlvbi0+bW92
ZVRvKGVuZCwgbmV4dCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICB3aGlsZSAocG9zLmlzTm90TnVsbCgpKSB7CisgICAgICAgICAgICAgICAg
VmlzaWJsZVBvc2l0aW9uIHdvcmRTdGFydChzdGFydE9mV29yZChwb3MpKTsKKyAgICAgICAgICAg
ICAgICBpZiAod29yZFN0YXJ0ICE9IHBvcykgeworICAgICAgICAgICAgICAgICAgICBmcmFtZVNl
bGVjdGlvbi0+bW92ZVRvKHdvcmRTdGFydCwgZnJhbWVTZWxlY3Rpb24tPmVuZCgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IHBvcyA9IHBvcy5wcmV2aW91cygpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
fQorCistICh2b2lkKWV4cGFuZFNlbGVjdGlvblRvU2VudGVuY2UKK3sKKyAgICBGcmFtZSAqZnJh
bWUgPSBbc2VsZiBjb3JlRnJhbWVdOworICAgIEZyYW1lU2VsZWN0aW9uKiBmcmFtZVNlbGVjdGlv
biA9IGZyYW1lLT5zZWxlY3Rpb24oKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gcG9zID0gZnJhbWVT
ZWxlY3Rpb24tPnN0YXJ0KCk7CisgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0ID0gc3RhcnRPZlNl
bnRlbmNlKHBvcyk7CisgICAgVmlzaWJsZVBvc2l0aW9uIGVuZCA9IGVuZE9mU2VudGVuY2UocG9z
KTsKKyAgICBmcmFtZVNlbGVjdGlvbi0+bW92ZVRvKHN0YXJ0LCBlbmQpOyAgICAKK30KKworLSAo
V0tXcml0aW5nRGlyZWN0aW9uKXNlbGVjdGlvbkJhc2VXcml0aW5nRGlyZWN0aW9uCit7CisgICAg
RnJhbWUgKmZyYW1lID0gW3NlbGYgY29yZUZyYW1lXTsKKyAgICBzd2l0Y2ggKGZyYW1lLT5lZGl0
b3IoKS5iYXNlV3JpdGluZ0RpcmVjdGlvbkZvclNlbGVjdGlvblN0YXJ0KCkpIHsKKyAgICBjYXNl
IExlZnRUb1JpZ2h0V3JpdGluZ0RpcmVjdGlvbjoKKyAgICAgICAgcmV0dXJuIFdLV3JpdGluZ0Rp
cmVjdGlvbkxlZnRUb1JpZ2h0OworCisgICAgY2FzZSBSaWdodFRvTGVmdFdyaXRpbmdEaXJlY3Rp
b246CisgICAgICAgIHJldHVybiBXS1dyaXRpbmdEaXJlY3Rpb25SaWdodFRvTGVmdDsKKworICAg
IGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICByZXR1cm4gV0tXcml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQ7Cit9CisK
Ky0gKHZvaWQpdG9nZ2xlQmFzZVdyaXRpbmdEaXJlY3Rpb24KK3sKKyAgICBXS1dyaXRpbmdEaXJl
Y3Rpb24gdXBkYXRlZCA9IFdLV3JpdGluZ0RpcmVjdGlvblJpZ2h0VG9MZWZ0OworICAgIHN3aXRj
aCAoW3NlbGYgc2VsZWN0aW9uQmFzZVdyaXRpbmdEaXJlY3Rpb25dKSB7CisgICAgICAgIGNhc2Ug
V0tXcml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQ6CisgICAgICAgICAgICB1cGRhdGVkID0gV0tX
cml0aW5nRGlyZWN0aW9uUmlnaHRUb0xlZnQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBXS1dyaXRpbmdEaXJlY3Rpb25SaWdodFRvTGVmdDoKKyAgICAgICAgICAgIHVwZGF0ZWQg
PSBXS1dyaXRpbmdEaXJlY3Rpb25MZWZ0VG9SaWdodDsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgLy8gV2ViQ29yZSBzaG91bGQgbmV2ZXIgcmV0dXJu
IGFueXRoaW5nIGVsc2UsIGluY2x1ZGluZyBXS1dyaXRpbmdEaXJlY3Rpb25OYXR1cmFsCisgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICBbc2VsZiBzZXRCYXNlV3JpdGluZ0RpcmVjdGlvbjp1cGRhdGVkXTsKK30KKworLSAodm9p
ZClzZXRCYXNlV3JpdGluZ0RpcmVjdGlvbjooV0tXcml0aW5nRGlyZWN0aW9uKWRpcmVjdGlvbgor
eworICAgIFdLV3JpdGluZ0RpcmVjdGlvbiBvcmlnaW5hbERpcmVjdGlvbiA9IFtzZWxmIHNlbGVj
dGlvbkJhc2VXcml0aW5nRGlyZWN0aW9uXTsKKworICAgIEZyYW1lICpmcmFtZSA9IFtzZWxmIGNv
cmVGcmFtZV07CisgICAgaWYgKCFmcmFtZS0+c2VsZWN0aW9uKCktPmlzQ29udGVudEVkaXRhYmxl
KCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBXcml0aW5nRGlyZWN0aW9uIHdjRGlyZWN0
aW9uID0gTGVmdFRvUmlnaHRXcml0aW5nRGlyZWN0aW9uOworICAgIHN3aXRjaCAoZGlyZWN0aW9u
KSB7CisgICAgICAgIGNhc2UgV0tXcml0aW5nRGlyZWN0aW9uTmF0dXJhbDoKKyAgICAgICAgICAg
IHdjRGlyZWN0aW9uID0gTmF0dXJhbFdyaXRpbmdEaXJlY3Rpb247CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBXS1dyaXRpbmdEaXJlY3Rpb25MZWZ0VG9SaWdodDoKKyAgICAgICAg
ICAgIHdjRGlyZWN0aW9uID0gTGVmdFRvUmlnaHRXcml0aW5nRGlyZWN0aW9uOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0tXcml0aW5nRGlyZWN0aW9uUmlnaHRUb0xlZnQ6Cisg
ICAgICAgICAgICB3Y0RpcmVjdGlvbiA9IFJpZ2h0VG9MZWZ0V3JpdGluZ0RpcmVjdGlvbjsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgZnJhbWUtPmVkaXRv
cigpLnNldEJhc2VXcml0aW5nRGlyZWN0aW9uKHdjRGlyZWN0aW9uKTsKKyAgICAKKyAgICBpZiAo
b3JpZ2luYWxEaXJlY3Rpb24gIT0gW3NlbGYgc2VsZWN0aW9uQmFzZVdyaXRpbmdEaXJlY3Rpb25d
KQorICAgICAgICBmcmFtZS0+ZWRpdG9yKCkuc2V0VGV4dEFsaWdubWVudEZvckNoYW5nZWRCYXNl
V3JpdGluZ0RpcmVjdGlvbih3Y0RpcmVjdGlvbik7Cit9CisKKy0gKHZvaWQpbW92ZVNlbGVjdGlv
blRvU3RhcnQKK3sKKyAgICBGcmFtZSAqZnJhbWUgPSBbc2VsZiBjb3JlRnJhbWVdOworICAgIEZy
YW1lU2VsZWN0aW9uKiBmcmFtZVNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKTsKKyAgICBW
aXNpYmxlUG9zaXRpb24gc3RhcnQgPSBzdGFydE9mRG9jdW1lbnQoZnJhbWVTZWxlY3Rpb24tPnNl
bGVjdGlvbigpLnN0YXJ0KCkpOworICAgIGZyYW1lU2VsZWN0aW9uLT5tb3ZlVG8oc3RhcnQpOwor
fQorCistICh2b2lkKW1vdmVTZWxlY3Rpb25Ub0VuZAoreworICAgIEZyYW1lICpmcmFtZSA9IFtz
ZWxmIGNvcmVGcmFtZV07CisgICAgRnJhbWVTZWxlY3Rpb24qIGZyYW1lU2VsZWN0aW9uID0gZnJh
bWUtPnNlbGVjdGlvbigpOworICAgIFZpc2libGVQb3NpdGlvbiBlbmQgPSAgZW5kT2ZEb2N1bWVu
dChmcmFtZVNlbGVjdGlvbi0+c2VsZWN0aW9uKCkuZW5kKCkpOworICAgIGZyYW1lU2VsZWN0aW9u
LT5tb3ZlVG8oZW5kKTsKK30KKworLSAodm9pZCltb3ZlU2VsZWN0aW9uVG9Qb2ludDooQ0dQb2lu
dClwb2ludAoreworICAgIEZyYW1lICpmcmFtZSA9IFtzZWxmIGNvcmVGcmFtZV07CisgICAgRnJh
bWVTZWxlY3Rpb24qIGZyYW1lU2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpOworICAgIFZp
c2libGVQb3NpdGlvbiBwb3MgPSBbc2VsZiBfdmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQ6cG9pbnRd
OworICAgIGZyYW1lU2VsZWN0aW9uLT5tb3ZlVG8ocG9zKTsKK30KKworLSAodm9pZClzZXRTZWxl
Y3Rpb25HcmFudWxhcml0eTooV2ViVGV4dEdyYW51bGFyaXR5KWdyYW51bGFyaXR5Cit7CisgICAg
VGV4dEdyYW51bGFyaXR5IHdjR3JhbnVsYXJpdHkgPSBDaGFyYWN0ZXJHcmFudWxhcml0eTsKKyAg
ICBzd2l0Y2ggKGdyYW51bGFyaXR5KSB7CisgICAgICAgIGNhc2UgV2ViVGV4dEdyYW51bGFyaXR5
Q2hhcmFjdGVyOgorICAgICAgICAgICAgd2NHcmFudWxhcml0eSA9IENoYXJhY3RlckdyYW51bGFy
aXR5OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2ViVGV4dEdyYW51bGFyaXR5
V29yZDoKKyAgICAgICAgICAgIHdjR3JhbnVsYXJpdHkgPSBXb3JkR3JhbnVsYXJpdHk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXZWJUZXh0R3JhbnVsYXJpdHlTZW50ZW5jZToK
KyAgICAgICAgICAgIHdjR3JhbnVsYXJpdHkgPSBTZW50ZW5jZUdyYW51bGFyaXR5OworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2ViVGV4dEdyYW51bGFyaXR5UGFyYWdyYXBoOgor
ICAgICAgICAgICAgd2NHcmFudWxhcml0eSA9IFBhcmFncmFwaEdyYW51bGFyaXR5OworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2ViVGV4dEdyYW51bGFyaXR5QWxsOgorICAgICAg
ICAgICAgLy8gRklYTUU6IEFkZCBEb2N1bWVudEdyYW51bGFyaXR5LgorICAgICAgICAgICAgd2NH
cmFudWxhcml0eSA9IFBhcmFncmFwaEdyYW51bGFyaXR5OworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICBGcmFtZVNlbGVjdGlvbiogZnJhbWVTZWxlY3Rpb24g
PSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKTsKKyAgICBmcmFtZVNlbGVjdGlvbi0+
c2V0U2VsZWN0aW9uKGZyYW1lU2VsZWN0aW9uLT5zZWxlY3Rpb24oKSwgd2NHcmFudWxhcml0eSk7
Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0FscGhhTnVtZXJpY0NoYXJhY3RlcihVQ2hhcjMy
IGMpCit7CisgICAgc3RhdGljIENGQ2hhcmFjdGVyU2V0UmVmIHNldCA9IENGQ2hhcmFjdGVyU2V0
R2V0UHJlZGVmaW5lZChrQ0ZDaGFyYWN0ZXJTZXRBbHBoYU51bWVyaWMpOworICAgIHJldHVybiBD
RkNoYXJhY3RlclNldElzQ2hhcmFjdGVyTWVtYmVyKHNldCwgYyk7Cit9CisKK3N0YXRpYyBWaXNp
YmxlUG9zaXRpb24gU2ltcGxlU21hcnRFeHRlbmRTdGFydChjb25zdCBWaXNpYmxlUG9zaXRpb24m
IHN0YXJ0LCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIGVuZCwgY29uc3QgVmlzaWJsZVNlbGVjdGlv
biYgaW5pdGlhbEV4dGVudCkKK3sKKyAgICBWaXNpYmxlUG9zaXRpb24gcG9zKHN0YXJ0KTsKKyAg
ICBWaXNpYmxlUG9zaXRpb24gaW5pdGlhbFN0YXJ0OworICAgIGlmIChpbml0aWFsRXh0ZW50Lmlz
Q2FyZXRPclJhbmdlKCkpCisgICAgICAgIGluaXRpYWxTdGFydCA9IFZpc2libGVQb3NpdGlvbihp
bml0aWFsRXh0ZW50LnN0YXJ0KCksIGluaXRpYWxFeHRlbnQuYWZmaW5pdHkoKSk7CisKKyAgICBp
ZiAoaW5pdGlhbFN0YXJ0ID09IHN0YXJ0KSB7CisgICAgICAgIC8vIE5vIHNtYXJ0cyBuZWVkZWQu
IExlYXZlIHNlbGVjdGlvbiB3aGVyZSBpdCBpcy4KKyAgICAgICAgcmV0dXJuIHBvczsKKyAgICB9
CisKKyAgICBVQ2hhcjMyIGNoYXJCZWZvcmUgPSBwb3MuY2hhcmFjdGVyQmVmb3JlKCk7CisgICAg
VUNoYXIzMiBjaGFyQWZ0ZXIgPSBwb3MuY2hhcmFjdGVyQWZ0ZXIoKTsKKyAgICBpZiAoaXNBbHBo
YU51bWVyaWNDaGFyYWN0ZXIoY2hhckFmdGVyKSAmJiAhaXNBbHBoYU51bWVyaWNDaGFyYWN0ZXIo
Y2hhckJlZm9yZSkpIHsKKyAgICAgICAgLy8gVGhpcyBpcyBhIHdvcmQgc3RhcnQuIExlYXZlIHNl
bGVjdGlvbiB3aGVyZSBpdCBpcy4KKyAgICAgICAgcmV0dXJuIHBvczsKKyAgICB9CisgICAgCisg
ICAgaWYgKGlzQWxwaGFOdW1lcmljQ2hhcmFjdGVyKGNoYXJCZWZvcmUpICYmICFpc0FscGhhTnVt
ZXJpY0NoYXJhY3RlcihjaGFyQWZ0ZXIpKSB7CisgICAgICAgIC8vIFRoaXMgaXMgYSB3b3JkIGVu
ZC4gTnVkZ2UgdGhlIHNlbGVjdGlvbiB0byB0aGUgbmV4dCBjaGFyYWN0ZXIgYmVmb3JlIHByb2Nl
ZWRpbmcuCisgICAgICAgIHBvcyA9IHBvcy5uZXh0KCk7CisgICAgfQorCisgICAgLy8gRXh0ZW5k
IHRvIHRoZSBzdGFydCBvZiB0aGUgd29yZC4KKyAgICAvLyBJZiB0aGlzIGlzbid0IHdoZXJlIHRo
ZSBzdGFydCB3YXMgaW5pdGlhbGx5LCB1c2UgdGhpcyBwb3NpdGlvbi4KKyAgICBWaXNpYmxlUG9z
aXRpb24gd29yZFN0YXJ0KHN0YXJ0T2ZXb3JkKHBvcykpOworICAgIGlmICh3b3JkU3RhcnQgIT0g
aW5pdGlhbFN0YXJ0KSB7CisgICAgICAgIHJldHVybiB3b3JkU3RhcnQ7CisgICAgfQorICAgIC8v
IENvbnZlcnNlbHksIGlmIHRoZSBpbml0aWFsIHN0YXJ0IGVxdWFscyB0aGUgY3VycmVudCB3b3Jk
IHN0YXJ0LCB0aGVuCisgICAgLy8gcnVuIHRoZSByZXN0IG9mIHRoaXMgZnVuY3Rpb24gdG8gc2Vl
IGlmIHRoZSBzZWxlY3Rpb24gc2hvdWxkIGV4dGVuZAorICAgIC8vIGJhY2sgdG8gdGhlIG5leHQg
d29yZC4KKworICAgIC8vIFBhc3NlZC1pbiBlbmQgbXVzdCBiZSBhdCBsZWFzdCB0aHJlZSBjaGFy
YWN0ZXJzIGZyb20gaW5pdGlhbFN0YXJ0IG9yCisgICAgLy8gbXVzdCBjcm9zcyB3b3JkIGJvdW5k
YXJ5LgorICAgIC8vIElmIHRoaXMgaXMgd2hlcmUgdGhlIHN0YXJ0IHdhcyBpbml0aWFsbHksIHNr
aXAgdG8gdGhlIGVuZCBvZiB0aGUgd29yZCwKKyAgICAvLyB0aGVuIGl0ZXJhdGUgZm9yd2FyZCBp
biB0aGUgZG9jdW1lbnQgdW50aWwgd2UgaGl0IGFuIGFscGhhbnVtZXJpYy4KKyAgICBWaXNpYmxl
UG9zaXRpb24gd29yZEVuZChlbmRPZldvcmQocG9zKSk7CisgICAgcG9zID0gd29yZEVuZDsKKyAg
ICB3aGlsZSAocG9zLmlzTm90TnVsbCgpICYmICFpc1N0YXJ0T2ZMaW5lKHBvcykgJiYgIWlzRW5k
T2ZMaW5lKHBvcykgJiYgcG9zICE9IGVuZCkgeworICAgICAgICBVQ2hhcjMyIGMgPSBwb3MuY2hh
cmFjdGVyQWZ0ZXIoKTsKKyAgICAgICAgaWYgKGlzQWxwaGFOdW1lcmljQ2hhcmFjdGVyKGMpKQor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHBvcyA9IHBvcy5uZXh0KCk7CisgICAgfQorICAg
IAorICAgIC8vIERvbid0IGxldCB0aGUgc21hcnQgZXh0ZW5zaW9uIG1ha2UgdGhlIHN0YXJ0IGVx
dWFsIHRoZSBlbmQuCisgICAgLy8gRXhwYW5kIG91dCB0byB3b3JkIGJvdW5kYXJ5LgorICAgIGlm
IChwb3MgPT0gZW5kKQorICAgICAgICBwb3MgPSB3b3JkU3RhcnQ7CisgICAgcmV0dXJuIHBvczsK
K30KKworc3RhdGljIFZpc2libGVQb3NpdGlvbiBTaW1wbGVTbWFydEV4dGVuZEVuZChjb25zdCBW
aXNpYmxlUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIGVuZCwgY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYgaW5pdGlhbEV4dGVudCkKK3sKKyAgICBWaXNpYmxlUG9zaXRpb24g
cG9zKGVuZCk7CisKKyAgICBWaXNpYmxlUG9zaXRpb24gaW5pdGlhbEVuZDsKKyAgICBpZiAoaW5p
dGlhbEV4dGVudC5pc0NhcmV0T3JSYW5nZSgpKQorICAgICAgICBpbml0aWFsRW5kID0gVmlzaWJs
ZVBvc2l0aW9uKGluaXRpYWxFeHRlbnQuZW5kKCksIGluaXRpYWxFeHRlbnQuYWZmaW5pdHkoKSk7
CisgICAgCisgICAgaWYgKGluaXRpYWxFbmQgPT0gZW5kKSB7CisgICAgICAgIC8vIE5vIHNtYXJ0
cyBuZWVkZWQuIExlYXZlIHNlbGVjdGlvbiB3aGVyZSBpdCBpcy4KKyAgICAgICAgcmV0dXJuIHBv
czsKKyAgICB9CisgICAgCisgICAgVUNoYXIzMiBjaGFyQmVmb3JlID0gcG9zLmNoYXJhY3RlckJl
Zm9yZSgpOworICAgIFVDaGFyMzIgY2hhckFmdGVyID0gcG9zLmNoYXJhY3RlckFmdGVyKCk7Cisg
ICAgaWYgKGlzQWxwaGFOdW1lcmljQ2hhcmFjdGVyKGNoYXJCZWZvcmUpICYmICFpc0FscGhhTnVt
ZXJpY0NoYXJhY3RlcihjaGFyQWZ0ZXIpKSB7CisgICAgICAgIC8vIFRoaXMgaXMgYSB3b3JkIGVu
ZC4gTGVhdmUgc2VsZWN0aW9uIHdoZXJlIGl0IGlzLgorICAgICAgICByZXR1cm4gcG9zOworICAg
IH0KKworICAgIGlmICghaXNBbHBoYU51bWVyaWNDaGFyYWN0ZXIoY2hhckJlZm9yZSkgJiYgaXNB
bHBoYU51bWVyaWNDaGFyYWN0ZXIoY2hhckFmdGVyKSkgeworICAgICAgICAvLyBUaGlzIGlzIGEg
d29yZCBzdGFydC4gTnVkZ2UgdGhlIHNlbGVjdGlvbiB0byB0aGUgcHJldmlvdXMgY2hhcmFjdGVy
IGJlZm9yZSBwcm9jZWVkaW5nLgorICAgICAgICBwb3MgPSBwb3MucHJldmlvdXMoKTsKKyAgICB9
CisKKyAgICAvLyBFeHRlbmQgdG8gdGhlIGVuZCBvZiB0aGUgd29yZC4KKyAgICAvLyBJZiB0aGlz
IGlzbid0IHdoZXJlIHRoZSBlbmQgd2FzIGluaXRpYWxseSwgdXNlIHRoaXMgcG9zaXRpb24uCisg
ICAgVmlzaWJsZVBvc2l0aW9uIHdvcmRFbmQoZW5kT2ZXb3JkKHBvcykpOworICAgIGlmICh3b3Jk
RW5kICE9IGluaXRpYWxFbmQgJiYgaXNBbHBoYU51bWVyaWNDaGFyYWN0ZXIod29yZEVuZC5jaGFy
YWN0ZXJCZWZvcmUoKSkpIHsKKyAgICAgICAgcmV0dXJuIHdvcmRFbmQ7CisgICAgfQorICAgIC8v
IENvbnZlcnNlbHksIGlmIHRoZSBpbml0aWFsIGVuZCBlcXVhbHMgdGhlIGN1cnJlbnQgd29yZCBl
bmQsIHRoZW4KKyAgICAvLyBydW4gdGhlIHJlc3Qgb2YgdGhpcyBmdW5jdGlvbiB0byBzZWUgaWYg
dGhlIHNlbGVjdGlvbiBzaG91bGQgZXh0ZW5kCisgICAgLy8gYmFjayB0byB0aGUgcHJldmlvdXMg
d29yZC4KKworICAgIC8vIElmIHRoaXMgaXMgd2hlcmUgdGhlIGVuZCB3YXMgaW5pdGlhbGx5LCBz
a2lwIHRvIHRoZSBzdGFydCBvZiB0aGUgd29yZCwKKyAgICAvLyB0aGVuIGl0ZXJhdGUgYmFja3dh
cmQgaW4gdGhlIGRvY3VtZW50IHVudGlsIHdlIGhpdCBhbiBhbHBoYW51bWVyaWMuCisgICAgVmlz
aWJsZVBvc2l0aW9uIHdvcmRTdGFydChzdGFydE9mV29yZChwb3MpKTsKKyAgICBwb3MgPSB3b3Jk
U3RhcnQ7CisgICAgd2hpbGUgKHBvcy5pc05vdE51bGwoKSAmJiAhaXNTdGFydE9mTGluZShwb3Mp
ICYmICFpc0VuZE9mTGluZShwb3MpICYmIHBvcyAhPSBzdGFydCkgeworICAgICAgICBVQ2hhcjMy
IGMgPSBwb3MuY2hhcmFjdGVyQmVmb3JlKCk7CisgICAgICAgIGlmIChpc0FscGhhTnVtZXJpY0No
YXJhY3RlcihjKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBwb3MgPSBwb3MucHJldmlv
dXMoKTsKKyAgICB9CisKKyAgICAvLyBEb24ndCBsZXQgdGhlIHNtYXJ0IGV4dGVuc2lvbiBtYWtl
IHRoZSBlbmQgZXF1YWwgdGhlIHN0YXJ0LgorICAgIC8vIEV4cGFuZCBvdXQgdG8gd29yZCBib3Vu
ZGFyeS4KKyAgICBpZiAocG9zID09IHN0YXJ0KQorICAgICAgICBwb3MgPSB3b3JkRW5kOworICAg
IAorICAgIHJldHVybiBwb3M7Cit9CisKKy0gKHZvaWQpc21hcnRFeHRlbmRSYW5nZWRTZWxlY3Rp
b246KFdlYlRleHRTbWFydEV4dGVuZERpcmVjdGlvbilkaXJlY3Rpb24KK3sKKyAgICBpZiAoW3Nl
bGYgc2VsZWN0aW9uU3RhdGVdICE9IFdlYlRleHRTZWxlY3Rpb25TdGF0ZVJhbmdlKQorICAgICAg
ICByZXR1cm47CisgICAgCisgICAgRnJhbWUgKmZyYW1lID0gW3NlbGYgY29yZUZyYW1lXTsKKyAg
ICBGcmFtZVNlbGVjdGlvbiogZnJhbWVTZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCk7Cisg
ICAgRUFmZmluaXR5IGFmZmluaXR5ID0gZnJhbWVTZWxlY3Rpb24tPnNlbGVjdGlvbigpLmFmZmlu
aXR5KCk7CisgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0KGZyYW1lU2VsZWN0aW9uLT5zdGFydCgp
LCBhZmZpbml0eSk7CisgICAgVmlzaWJsZVBvc2l0aW9uIGVuZChmcmFtZVNlbGVjdGlvbi0+ZW5k
KCksIGFmZmluaXR5KTsKKyAgICBWaXNpYmxlUG9zaXRpb24gYmFzZShmcmFtZS0+cmFuZ2VkU2Vs
ZWN0aW9uQmFzZSgpLmJhc2UoKSk7ICAvLyBzaG91bGQgZXF1YWwgc3RhcnQgb3IgZW5kCisKKyAg
ICAvLyBCYXNlIG11c3QgZXF1YWwgc3RhcnQgb3IgZW5kCisgICAgaWYgKGJhc2UgIT0gc3RhcnQg
JiYgYmFzZSAhPSBlbmQpCisgICAgICAgIHJldHVybjsKKworICAgIFZpc2libGVQb3NpdGlvbiBl
eHRlbnQoZnJhbWVTZWxlY3Rpb24tPnNlbGVjdGlvbigpLmV4dGVudCgpLCBhZmZpbml0eSk7Cisg
ICAgCisgICAgLy8gV2UgZG9uJ3QgeWV0IHN1cHBvcnQgc21hcnQgZXh0ZW5zaW9uIGZvciBsYW5n
dWFnZXMgd2hpY2gKKyAgICAvLyByZXF1aXJlIGNvbnRleHQgZm9yIHdvcmQgYm91bmRhcnkuCisg
ICAgaWYgKHJlcXVpcmVzQ29udGV4dEZvcldvcmRCb3VuZGFyeShleHRlbnQuY2hhcmFjdGVyQWZ0
ZXIoKSkgfHwgCisgICAgICAgIHJlcXVpcmVzQ29udGV4dEZvcldvcmRCb3VuZGFyeShleHRlbnQu
Y2hhcmFjdGVyQmVmb3JlKCkpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBJZiB0aGUgc21h
cnQtZXh0ZW5kIGRpcmVjdGlvbiBpcyBuZWl0aGVyIGxlZnQgbm9yIHJpZ2h0LCBkbworICAgIC8v
IG5vdCBwYXNzIHJhbmdlZFNlbGVjdGlvbkluaXRpYWxFeHRlbnQgdG8gdGhlIHNtYXJ0IGV4dGVu
ZCBmdW5jdGlvbnMuCisgICAgLy8gVGhpcyB3aWxsIGhhdmUgdGhlIGVmZmVjdCBvZiBhbHdheXMg
ZXh0ZW5kaW5nIG91dCB0byBpbmNsdWRlIHRoZQorICAgIC8vIHdvcmQgd2hpY2ggY29udGFpbnMg
dGhlIGV4dGVudC4KKyAgICBWaXNpYmxlU2VsZWN0aW9uIGluaXRpYWxFeHRlbnQ7CisgICAgaWYg
KGRpcmVjdGlvbiAhPSBXZWJUZXh0U21hcnRFeHRlbmREaXJlY3Rpb25Ob25lKQorICAgICAgICBp
bml0aWFsRXh0ZW50ID0gZnJhbWUtPnJhbmdlZFNlbGVjdGlvbkluaXRpYWxFeHRlbnQoKTsKKwor
ICAgIFZpc2libGVQb3NpdGlvbiBzbWFydEV4dGVudDsKKyAgICBpZiAoYmFzZSA9PSBlbmQpIHsg
IC8vIGV4dGVuZCBzdGFydAorICAgICAgICBzbWFydEV4dGVudCA9IFNpbXBsZVNtYXJ0RXh0ZW5k
U3RhcnQoc3RhcnQsIGVuZCwgaW5pdGlhbEV4dGVudCk7CisgICAgfQorICAgIGVsc2UgeyAgLy8g
YmFzZSA9PSBzdGFydCAvIGV4dGVuZCBlbmQKKyAgICAgICAgc21hcnRFeHRlbnQgPSBTaW1wbGVT
bWFydEV4dGVuZEVuZChzdGFydCwgZW5kLCBpbml0aWFsRXh0ZW50KTsKKyAgICB9CisKKyAgICBp
ZiAoc21hcnRFeHRlbnQuaXNOb3ROdWxsKCkgJiYgc21hcnRFeHRlbnQgIT0gZXh0ZW50KQorICAg
ICAgICBmcmFtZVNlbGVjdGlvbi0+bW92ZVRvKGJhc2UsIHNtYXJ0RXh0ZW50KTsKKworfQorCist
IChXZWJWaXNpYmxlUG9zaXRpb24gKilzdGFydFBvc2l0aW9uCit7CisgICAgRnJhbWUgKmZyYW1l
ID0gW3NlbGYgY29yZUZyYW1lXTsKKyAgICBFbGVtZW50ICpyb290RWxlbWVudCA9IGZyYW1lLT5k
b2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKTsKKyAgICByZXR1cm4gW1dlYlZpc2libGVQb3Np
dGlvbiBfd3JhcFZpc2libGVQb3NpdGlvbjpzdGFydE9mRG9jdW1lbnQoc3RhdGljX2Nhc3Q8Tm9k
ZSo+KHJvb3RFbGVtZW50KSldOworfQorCistIChXZWJWaXNpYmxlUG9zaXRpb24gKillbmRQb3Np
dGlvbgoreworICAgIEZyYW1lICpmcmFtZSA9IFtzZWxmIGNvcmVGcmFtZV07CisgICAgRWxlbWVu
dCAqcm9vdEVsZW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCk7Cisg
ICAgcmV0dXJuIFtXZWJWaXNpYmxlUG9zaXRpb24gX3dyYXBWaXNpYmxlUG9zaXRpb246ZW5kT2ZE
b2N1bWVudChzdGF0aWNfY2FzdDxOb2RlKj4ocm9vdEVsZW1lbnQpKV07Cit9CisKKy0gKEJPT0wp
cmVuZGVyZWRDaGFyYWN0ZXJzRXhjZWVkOihOU1VJbnRlZ2VyKXRocmVzaG9sZAoreworICAgIEZy
YW1lICpmcmFtZSA9IFtzZWxmIGNvcmVGcmFtZV07CisgICAgcmV0dXJuIGZyYW1lLT52aWV3KCkt
PnJlbmRlcmVkQ2hhcmFjdGVyc0V4Y2VlZCh0aHJlc2hvbGQpOworfQorCistIChDR0ltYWdlUmVm
KWltYWdlRm9yTm9kZTooRE9NTm9kZSAqKW5vZGUgYWxsb3dEb3duc2FtcGxpbmc6KEJPT0wpYWxs
b3dEb3duc2FtcGxpbmcgZHJhd0NvbnRlbnRCZWhpbmRUcmFuc3BhcmVudE5vZGVzOihCT09MKWRy
YXdDb250ZW50QmVoaW5kVHJhbnNwYXJlbnROb2RlcworeworICAgIE5vZGUqIGNvcmVOb2RlID0g
Y29yZShub2RlKTsKKyAgICBGcmFtZSogZnJhbWUgPSBbc2VsZiBjb3JlRnJhbWVdOworICAgIE5v
ZGVJbWFnZUZsYWdzIGZsYWdzID0gRHJhd05vcm1hbGx5OworICAgIGlmIChhbGxvd0Rvd25zYW1w
bGluZykKKyAgICAgICAgZmxhZ3MgfD0gQWxsb3dEb3duc2FtcGxpbmc7CisgICAgaWYgKGRyYXdD
b250ZW50QmVoaW5kVHJhbnNwYXJlbnROb2RlcykKKyAgICAgICAgZmxhZ3MgfD0gRHJhd0NvbnRl
bnRCZWhpbmRUcmFuc3BhcmVudE5vZGVzOworICAgIGlmIChjb3JlTm9kZSkKKyAgICAgICAgcmV0
dXJuIG5vZGVJbWFnZShmcmFtZSwgY29yZU5vZGUsIGZsYWdzKTsKKyAgICByZXR1cm4gTlVMTDsK
K30KKworLy8gSXRlcmF0ZXMgYmFja3dhcmQgdGhyb3VnaCB0aGUgZG9jdW1lbnQgYW5kIHJldHVy
bnMgdGhlIHBvaW50IGF0IHdoaWNoIHVudG91Y2hlZCBkaWN0YXRpb24gcmVzdWx0cyBlbmQuCist
IChXZWJWaXNpYmxlUG9zaXRpb24gKilwcmV2aW91c1VucGVydHVyYmVkRGljdGF0aW9uUmVzdWx0
Qm91bmRhcnlGcm9tUG9zaXRpb246KFdlYlZpc2libGVQb3NpdGlvbiAqKXBvc2l0aW9uCit7Cisg
ICAgVmlzaWJsZVBvc2l0aW9uIGN1cnJlbnRWaXNpYmxlUG9zaXRpb24gPSBbcG9zaXRpb24gX3Zp
c2libGVQb3NpdGlvbl07CisgICAgaWYgKGN1cnJlbnRWaXNpYmxlUG9zaXRpb24uaXNOdWxsKCkp
CisgICAgICAgIHJldHVybiBwb3NpdGlvbjsKKyAgICAKKyAgICBEb2N1bWVudCogZG9jdW1lbnQg
PSBjdXJyZW50VmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkuYW5jaG9yTm9kZSgpLT5k
b2N1bWVudCgpOworICAgIGlmICghZG9jdW1lbnQpCisgICAgICAgIHJldHVybiBwb3NpdGlvbjsK
KyAgICAKKyAgICBpZCB1aWtpdERlbGVnYXRlID0gW1tzZWxmIHdlYlZpZXddIF9VSUtpdERlbGVn
YXRlXTsKKyAgICBpZiAoIVt1aWtpdERlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0
b3IoaXNVbnBlcnR1cmJlZERpY3RhdGlvblJlc3VsdE1hcmtlcjopXSkKKyAgICAgICAgcmV0dXJu
IHBvc2l0aW9uOworICAgIAorICAgIHdoaWxlIChjdXJyZW50VmlzaWJsZVBvc2l0aW9uLmlzTm90
TnVsbCgpKSB7CisgICAgICAgIFdlYlZpc2libGVQb3NpdGlvbiAqY3VycmVudFdlYlZpc2libGVQ
b3NpdGlvbiA9IFtXZWJWaXNpYmxlUG9zaXRpb24gX3dyYXBWaXNpYmxlUG9zaXRpb246Y3VycmVu
dFZpc2libGVQb3NpdGlvbl07CisgICAgICAgIAorICAgICAgICBOb2RlICpjdXJyZW50Tm9kZSA9
IGN1cnJlbnRWaXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5hbmNob3JOb2RlKCk7Cisg
ICAgICAgIGludCBsYXN0T2Zmc2V0ID0gbGFzdE9mZnNldEZvckVkaXRpbmcoY3VycmVudE5vZGUp
OworICAgICAgICBBU1NFUlQobGFzdE9mZnNldCA+PSAwKTsKKyAgICAgICAgaWYgKGxhc3RPZmZz
ZXQgPCAwKQorICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRXZWJWaXNpYmxlUG9zaXRpb247Cisg
ICAgICAgIAorICAgICAgICBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXNWaXNpYmxlUG9zaXRpb24g
PSBjdXJyZW50VmlzaWJsZVBvc2l0aW9uLnByZXZpb3VzKCk7CisgICAgICAgIGlmIChwcmV2aW91
c1Zpc2libGVQb3NpdGlvbi5pc051bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBjdXJyZW50V2Vi
VmlzaWJsZVBvc2l0aW9uOworICAgICAgICAKKyAgICAgICAgUmVmUHRyPFJhbmdlPiBncmFwaGVt
ZVJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCwgcHJldmlvdXNWaXNpYmxlUG9zaXRpb24u
ZGVlcEVxdWl2YWxlbnQoKSwgY3VycmVudFZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgp
KTsKKyAgICAgICAgCisgICAgICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcio+IG1hcmtlcnMgPSBk
b2N1bWVudC0+bWFya2VycygpLT5tYXJrZXJzSW5SYW5nZShncmFwaGVtZVJhbmdlLmdldCgpLCBE
b2N1bWVudE1hcmtlcjo6RGljdGF0aW9uUmVzdWx0KTsKKyAgICAgICAgaWYgKG1hcmtlcnMuaXNF
bXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRXZWJWaXNpYmxlUG9zaXRpb247Cisg
ICAgICAgIAorICAgICAgICAvLyBGSVhNRTogUmVzdWx0IG1hcmtlcnMgc2hvdWxkIG5vdCBvdmVy
bGFwLCBzbyB0aGVyZSBzaG91bGQgb25seSBldmVyIGJlIG9uZSBmb3IgYSBzaW5nbGUgZ3JhcGhl
bWUuCisgICAgICAgIC8vIDxyZGFyOi8vcHJvYmxlbS85ODEwNjE3PiBUb28gbXVjaCBkb2N1bWVu
dCBjb250ZXh0IGlzIG9taXR0ZWQgd2hlbiBzZW5kaW5nIGRpY3RhdGlvbiBoaW50cyBiZWNhdXNl
IG9mIHByb2JsZW1zIHdpdGggV2ViQ29yZSBEb2N1bWVudE1hcmtlcnMKKyAgICAgICAgLy8gQVNT
RVJUKG1hcmtlcnMuc2l6ZSgpID09IDEpOworICAgICAgICBpZiAobWFya2Vycy5zaXplKCkgPiAx
KQorICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRXZWJWaXNpYmxlUG9zaXRpb247CisgICAgICAg
IERvY3VtZW50TWFya2VyKiByZXN1bHRNYXJrZXIgPSBtYXJrZXJzLmF0KDApOworICAgICAgICAK
KyAgICAgICAgLy8gRklYTUU6IFdlYkNvcmUgZG9lc24ndCBhbHdheXMgdXBkYXRlIG1hcmtlcnMg
Y29ycmVjdGx5IGR1cmluZyBlZGl0aW5nLiBCYWlsIGlmIHJlc3VsdE1hcmtlciBleHRlbmRzIG9m
ZiB0aGUgZWRnZSBvZiAKKyAgICAgICAgLy8gdGhpcyBub2RlLCBiZWNhdXNlIHRoYXQgbWVhbnMg
aXQncyBpbnZhbGlkLgorICAgICAgICBpZiAocmVzdWx0TWFya2VyLT5lbmRPZmZzZXQoKSA+ICh1
bnNpZ25lZClsYXN0T2Zmc2V0KQorICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRXZWJWaXNpYmxl
UG9zaXRpb247CisgICAgICAgIAorICAgICAgICBpZiAoIVt1aWtpdERlbGVnYXRlIGlzVW5wZXJ0
dXJiZWREaWN0YXRpb25SZXN1bHRNYXJrZXI6cmVzdWx0TWFya2VyLT5tZXRhZGF0YSgpXSkKKyAg
ICAgICAgICAgIHJldHVybiBjdXJyZW50V2ViVmlzaWJsZVBvc2l0aW9uOworICAgICAgICAKKyAg
ICAgICAgaWYgKHJlc3VsdE1hcmtlci0+c3RhcnRPZmZzZXQoKSA+IDApCisgICAgICAgICAgICBy
ZXR1cm4gW1dlYlZpc2libGVQb3NpdGlvbiBfd3JhcFZpc2libGVQb3NpdGlvbjpWaXNpYmxlUG9z
aXRpb24oY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGN1cnJlbnROb2RlLCByZXN1bHRNYXJr
ZXItPnN0YXJ0T2Zmc2V0KCkpKV07CisgICAgICAgIAorICAgICAgICBjdXJyZW50VmlzaWJsZVBv
c2l0aW9uID0gVmlzaWJsZVBvc2l0aW9uKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihjdXJy
ZW50Tm9kZSwgMCkpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gcG9zaXRpb247Cit9CisKKy8v
IEl0ZXJhdGVzIGZvcndhcmQgdGhyb3VnaCB0aGUgZG9jdW1lbnQgYW5kIHJldHVybnMgdGhlIHBv
aW50IGF0IHdoaWNoIHVudG91Y2hlZCBkaWN0YXRpb24gcmVzdWx0cyBlbmQuCistIChXZWJWaXNp
YmxlUG9zaXRpb24gKiluZXh0VW5wZXJ0dXJiZWREaWN0YXRpb25SZXN1bHRCb3VuZGFyeUZyb21Q
b3NpdGlvbjooV2ViVmlzaWJsZVBvc2l0aW9uICopcG9zaXRpb24KK3sKKyAgICBWaXNpYmxlUG9z
aXRpb24gY3VycmVudFZpc2libGVQb3NpdGlvbiA9IFtwb3NpdGlvbiBfdmlzaWJsZVBvc2l0aW9u
XTsKKyAgICBpZiAoY3VycmVudFZpc2libGVQb3NpdGlvbi5pc051bGwoKSkKKyAgICAgICAgcmV0
dXJuIHBvc2l0aW9uOworICAgIAorICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGN1cnJlbnRWaXNp
YmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5hbmNob3JOb2RlKCktPmRvY3VtZW50KCk7Cisg
ICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIHBvc2l0aW9uOworICAgIAorICAgIGlk
IHVpa2l0RGVsZWdhdGUgPSBbW3NlbGYgd2ViVmlld10gX1VJS2l0RGVsZWdhdGVdOworICAgIGlm
ICghW3Vpa2l0RGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihpc1VucGVydHVy
YmVkRGljdGF0aW9uUmVzdWx0TWFya2VyOildKQorICAgICAgICByZXR1cm4gcG9zaXRpb247Cisg
ICAgCisgICAgd2hpbGUgKGN1cnJlbnRWaXNpYmxlUG9zaXRpb24uaXNOb3ROdWxsKCkpIHsKKyAg
ICAgICAgV2ViVmlzaWJsZVBvc2l0aW9uICpjdXJyZW50V2ViVmlzaWJsZVBvc2l0aW9uID0gW1dl
YlZpc2libGVQb3NpdGlvbiBfd3JhcFZpc2libGVQb3NpdGlvbjpjdXJyZW50VmlzaWJsZVBvc2l0
aW9uXTsKKyAgICAgICAgCisgICAgICAgIE5vZGUgKmN1cnJlbnROb2RlID0gY3VycmVudFZpc2li
bGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLmFuY2hvck5vZGUoKTsKKyAgICAgICAgaW50IGxh
c3RPZmZzZXQgPSBsYXN0T2Zmc2V0Rm9yRWRpdGluZyhjdXJyZW50Tm9kZSk7CisgICAgICAgIEFT
U0VSVChsYXN0T2Zmc2V0ID49IDApOworICAgICAgICBpZiAobGFzdE9mZnNldCA8IDApCisgICAg
ICAgICAgICByZXR1cm4gY3VycmVudFdlYlZpc2libGVQb3NpdGlvbjsKKyAgICAgICAgCisgICAg
ICAgIFZpc2libGVQb3NpdGlvbiBuZXh0VmlzaWJsZVBvc2l0aW9uID0gY3VycmVudFZpc2libGVQ
b3NpdGlvbi5uZXh0KCk7CisgICAgICAgIGlmIChuZXh0VmlzaWJsZVBvc2l0aW9uLmlzTnVsbCgp
KQorICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRXZWJWaXNpYmxlUG9zaXRpb247CisgICAgICAg
IAorICAgICAgICBSZWZQdHI8UmFuZ2U+IGdyYXBoZW1lUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRv
Y3VtZW50LCBjdXJyZW50VmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCksIG5leHRWaXNp
YmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKSk7CisgICAgICAgIAorICAgICAgICBWZWN0b3I8
RG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJzID0gZG9jdW1lbnQtPm1hcmtlcnMoKS0+bWFya2Vyc0lu
UmFuZ2UoZ3JhcGhlbWVSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvblJlc3Vs
dCk7CisgICAgICAgIGlmIChtYXJrZXJzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBj
dXJyZW50V2ViVmlzaWJsZVBvc2l0aW9uOworICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IFJl
c3VsdCBtYXJrZXJzIHNob3VsZCBub3Qgb3ZlcmxhcCwgc28gdGhlcmUgc2hvdWxkIG9ubHkgZXZl
ciBiZSBvbmUgZm9yIGEgc2luZ2xlIGdyYXBoZW1lLgorICAgICAgICAvLyA8cmRhcjovL3Byb2Js
ZW0vOTgxMDYxNz4gVG9vIG11Y2ggZG9jdW1lbnQgY29udGV4dCBpcyBvbWl0dGVkIHdoZW4gc2Vu
ZGluZyBkaWN0YXRpb24gaGludHMgYmVjYXVzZSBvZiBwcm9ibGVtcyB3aXRoIFdlYkNvcmUgRG9j
dW1lbnRNYXJrZXJzCisgICAgICAgIC8vQVNTRVJUKG1hcmtlcnMuc2l6ZSgpID09IDEpOworICAg
ICAgICBpZiAobWFya2Vycy5zaXplKCkgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRX
ZWJWaXNpYmxlUG9zaXRpb247CisgICAgICAgIERvY3VtZW50TWFya2VyKiByZXN1bHRNYXJrZXIg
PSBtYXJrZXJzLmF0KDApOworICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IFdlYkNvcmUgZG9l
c24ndCBhbHdheXMgdXBkYXRlIG1hcmtlcnMgY29ycmVjdGx5IGR1cmluZyBlZGl0aW5nLiBCYWls
IGlmIHJlc3VsdE1hcmtlciBleHRlbmRzIG9mZiB0aGUgZWRnZSBvZiAKKyAgICAgICAgLy8gdGhp
cyBub2RlLCBiZWNhdXNlIHRoYXQgbWVhbnMgaXQncyBpbnZhbGlkLgorICAgICAgICBpZiAocmVz
dWx0TWFya2VyLT5lbmRPZmZzZXQoKSA+IHN0YXRpY19jYXN0PHVuc2lnbmVkPihsYXN0T2Zmc2V0
KSkKKyAgICAgICAgICAgIHJldHVybiBjdXJyZW50V2ViVmlzaWJsZVBvc2l0aW9uOworICAgICAg
ICAKKyAgICAgICAgaWYgKCFbdWlraXREZWxlZ2F0ZSBpc1VucGVydHVyYmVkRGljdGF0aW9uUmVz
dWx0TWFya2VyOnJlc3VsdE1hcmtlci0+bWV0YWRhdGEoKV0pCisgICAgICAgICAgICByZXR1cm4g
Y3VycmVudFdlYlZpc2libGVQb3NpdGlvbjsKKyAgICAgICAgCisgICAgICAgIGlmIChyZXN1bHRN
YXJrZXItPmVuZE9mZnNldCgpIDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihsYXN0T2Zmc2V0KSkK
KyAgICAgICAgICAgIHJldHVybiBbV2ViVmlzaWJsZVBvc2l0aW9uIF93cmFwVmlzaWJsZVBvc2l0
aW9uOlZpc2libGVQb3NpdGlvbihjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oY3VycmVudE5v
ZGUsIHJlc3VsdE1hcmtlci0+ZW5kT2Zmc2V0KCkpKV07CisgICAgICAgIAorICAgICAgICBjdXJy
ZW50VmlzaWJsZVBvc2l0aW9uID0gVmlzaWJsZVBvc2l0aW9uKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQ
b3NpdGlvbihjdXJyZW50Tm9kZSwgbGFzdE9mZnNldCkpOworICAgIH0KKyAgICAKKyAgICByZXR1
cm4gcG9zaXRpb247Cit9CisKK0BlbmQKKworI2VuZGlmICAvLyBQTEFURk9STShJT1MpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUlQaG9uZS5o
IGIvU291cmNlL1dlYktpdC9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVJUGhvbmUuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4zNzMzYzkyMWQ2NjU0NTRiMmM1MDc0MTJmYzk1ODgzYzk5ZWE1YTMzCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVJUGhv
bmUuaApAQCAtMCwwICsxLDI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCA8V2ViS2l0L1dlYkZy
YW1lSU9TLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2lvcy9XZWJDb3JlU3VwcG9ydC9X
ZWJHZW9sb2NhdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXQvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkdl
b2xvY2F0aW9uLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM3YzdiZDIxZGE4MjUzZDBiNTkwYzY0Nzc5MTcxMDli
MDkzY2RiODkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2lvcy9XZWJDb3JlU3Vw
cG9ydC9XZWJHZW9sb2NhdGlvbi5tbQpAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgIldlYkdlb2xvY2F0aW9uSW50
ZXJuYWwuaCIKKyNpbXBvcnQgPFdlYkNvcmUvR2VvbG9jYXRpb24uaD4KKwordXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CisKK0BpbXBsZW1lbnRhdGlvbiBXZWJHZW9sb2NhdGlvbiAoV2ViSW50ZXJu
YWwpCisKKy0gKGlkKV9pbml0V2l0aFdlYkNvcmVHZW9sb2NhdGlvbjooV2ViQ29yZUdlb2xvY2F0
aW9uICopZ2VvbG9jYXRpb24KK3sKKyAgICBBU1NFUlQoZ2VvbG9jYXRpb24pOworCisgICAgc2Vs
ZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoc2VsZikgeworICAgICAgICBnZW9sb2NhdGlvbi0+
cmVmKCk7CisgICAgICAgIF9wcml2YXRlID0gcmVpbnRlcnByZXRfY2FzdDxXZWJHZW9sb2NhdGlv
blByaXZhdGUqPihnZW9sb2NhdGlvbik7CisgICAgfQorICAgIHJldHVybiBzZWxmOworfQorCitA
ZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXZWJHZW9sb2NhdGlvbgorCistICh2b2lkKXNldElzQWxs
b3dlZDooQk9PTClhbGxvd2VkCit7CisgICAgcmVpbnRlcnByZXRfY2FzdDxHZW9sb2NhdGlvbio+
KF9wcml2YXRlKS0+c2V0SXNBbGxvd2VkKGFsbG93ZWQpOworfQorCistICh2b2lkKWRlYWxsb2MK
K3sKKyAgICBpZiAoX3ByaXZhdGUpCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R2VvbG9jYXRp
b24qPihfcHJpdmF0ZSktPmRlcmVmKCk7CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCitAZW5k
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJHZW9sb2Nh
dGlvbkludGVybmFsLmggYi9Tb3VyY2UvV2ViS2l0L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJHZW9s
b2NhdGlvbkludGVybmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTA5ZGQyOTY4NWEyNjgwOWJmYmZlNjdmMTBm
MDcyYjhhOGU1YWE3MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvaW9zL1dlYkNv
cmVTdXBwb3J0L1dlYkdlb2xvY2F0aW9uSW50ZXJuYWwuaApAQCAtMCwwICsxLDM4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgIldlYkdl
b2xvY2F0aW9uUHJpdmF0ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBHZW9sb2Nh
dGlvbjsKK30KKwordHlwZWRlZiBXZWJDb3JlOjpHZW9sb2NhdGlvbiBXZWJDb3JlR2VvbG9jYXRp
b247CisKK0BpbnRlcmZhY2UgV2ViR2VvbG9jYXRpb24gKFdlYkludGVybmFsKQorCistIChpZClf
aW5pdFdpdGhXZWJDb3JlR2VvbG9jYXRpb246KFdlYkNvcmVHZW9sb2NhdGlvbiAqKWdlb2xvY2F0
aW9uOworCitAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2lvcy9XZWJDb3JlU3VwcG9y
dC9XZWJHZW9sb2NhdGlvblByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvaW9zL1dlYkNvcmVTdXBw
b3J0L1dlYkdlb2xvY2F0aW9uUHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE2NjMwNDAzMjM4ZWIxODE4
MDk2N2MzM2Y0MGQwNjdmNDlkOGVjOGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJHZW9sb2NhdGlvblByaXZhdGUuaApAQCAtMCwwICsxLDM2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBv
cnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCitAY2xhc3MgV2ViR2VvbG9jYXRpb25Qcml2
YXRlOworCitAaW50ZXJmYWNlIFdlYkdlb2xvY2F0aW9uIDogTlNPYmplY3QgeworQHByaXZhdGUK
KyAgICBXZWJHZW9sb2NhdGlvblByaXZhdGUgKl9wcml2YXRlOworfQorCistICh2b2lkKXNldElz
QWxsb3dlZDooQk9PTClhbGxvd2VkOworQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9p
b3MvV2ViQ29yZVN1cHBvcnQvV2ViTUlNRVR5cGVSZWdpc3RyeS5oIGIvU291cmNlL1dlYktpdC9p
b3MvV2ViQ29yZVN1cHBvcnQvV2ViTUlNRVR5cGVSZWdpc3RyeS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVlMmQw
Y2QwNTQ5MGI4ZmJlODA3ZWM5MjRmMDA4NDczYzMwM2U0MTMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJNSU1FVHlwZVJlZ2lzdHJ5LmgKQEAg
LTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBQTEFURk9STShJT1MpCisKKyNpbXBvcnQg
PEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCitAaW50ZXJmYWNlIFdlYk1JTUVUeXBlUmVnaXN0
cnkgOiBOU09iamVjdAorCisrIChOU1N0cmluZyAqKW1pbWVUeXBlRm9yRXh0ZW5zaW9uOihOU1N0
cmluZyAqKWV4dGVuc2lvbjsKKworKyAoTlNTdHJpbmcgKilwcmVmZXJyZWRFeHRlbnNpb25Gb3JN
SU1FVHlwZTooTlNTdHJpbmcgKiltaW1lVHlwZTsKKworLy8gQ2hlY2sgdG8gc2VlIGlmIGEgbWlt
ZSB0eXBlIGlzIHN1aXRhYmxlIGZvciBiZWluZyBsb2FkZWQgaW5saW5lIGFzIGFuCisvLyBpbWFn
ZSAoZS5nLiwgPGltZz4gdGFncykuCisrIChCT09MKWlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZToo
TlNTdHJpbmcgKiltaW1lVHlwZTsKKworLy8gQ2hlY2sgdG8gc2VlIGlmIGEgbWltZSB0eXBlIGlz
IHN1aXRhYmxlIGZvciBiZWluZyBsb2FkZWQgdXNpbmcgPHZpZGVvPiBhbmQgPGF1ZGlvPgorKyAo
Qk9PTClpc1N1cHBvcnRlZE1lZGlhTUlNRVR5cGU6KE5TU3RyaW5nICopbWltZVR5cGU7CisKK0Bl
bmQKKworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
aW9zL1dlYkNvcmVTdXBwb3J0L1dlYk1JTUVUeXBlUmVnaXN0cnkubW0gYi9Tb3VyY2UvV2ViS2l0
L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJNSU1FVHlwZVJlZ2lzdHJ5Lm1tCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRh
OTZkMGI4ODA2OTlhYmEwMjE5MTJlOTYyOGRlODhjMmQ1Njk1MDkKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJNSU1FVHlwZVJlZ2lzdHJ5Lm1t
CkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgUExBVEZPUk0oSU9TKQorCisjaW1w
b3J0ICJXZWJNSU1FVHlwZVJlZ2lzdHJ5LmgiCisKKyNpbXBvcnQgPFdlYkNvcmUvTUlNRVR5cGVS
ZWdpc3RyeS5oPgorCit1c2luZyBXZWJDb3JlOjpNSU1FVHlwZVJlZ2lzdHJ5OworCitAaW1wbGVt
ZW50YXRpb24gV2ViTUlNRVR5cGVSZWdpc3RyeQorCisrIChOU1N0cmluZyAqKW1pbWVUeXBlRm9y
RXh0ZW5zaW9uOihOU1N0cmluZyAqKWV4dGVuc2lvbgoreworICAgIHJldHVybiBNSU1FVHlwZVJl
Z2lzdHJ5OjpnZXRNSU1FVHlwZUZvckV4dGVuc2lvbihleHRlbnNpb24pOworfQorCisrIChOU1N0
cmluZyAqKXByZWZlcnJlZEV4dGVuc2lvbkZvck1JTUVUeXBlOihOU1N0cmluZyAqKW1pbWVUeXBl
Cit7CisgICAgcmV0dXJuIE1JTUVUeXBlUmVnaXN0cnk6OmdldFByZWZlcnJlZEV4dGVuc2lvbkZv
ck1JTUVUeXBlKG1pbWVUeXBlKTsKK30KKworKyAoQk9PTClpc1N1cHBvcnRlZEltYWdlTUlNRVR5
cGU6KE5TU3RyaW5nICopbWltZVR5cGUKK3sKKyAgICByZXR1cm4gTUlNRVR5cGVSZWdpc3RyeTo6
aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlKG1pbWVUeXBlKTsKK30KKworKyAoQk9PTClpc1N1cHBv
cnRlZE1lZGlhTUlNRVR5cGU6KE5TU3RyaW5nICopbWltZVR5cGUKK3sKKyAgICByZXR1cm4gTUlN
RVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRNZWRpYU1JTUVUeXBlKG1pbWVUeXBlKTsKK30KKwor
QGVuZAorCisjZW5kaWYgIC8vIFBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYlNlbGVjdGlvblJlY3QuaCBiL1NvdXJjZS9XZWJLaXQv
aW9zL1dlYkNvcmVTdXBwb3J0L1dlYlNlbGVjdGlvblJlY3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yYWYxMWRk
YTRiYzIzZmE0ZTIzOThiYWJjYWFhYWNlYmY3YWIwZGZiCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViU2VsZWN0aW9uUmVjdC5oCkBAIC0wLDAg
KzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgUExBVEZPUk0oSU9TKQorCisjaW1wb3J0IDxDb3Jl
R3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+CisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24u
aD4KKyNpbXBvcnQgPFdlYktpdC9XZWJGcmFtZUlPUy5oPgorCitAaW50ZXJmYWNlIFdlYlNlbGVj
dGlvblJlY3QgOiBOU09iamVjdCA8TlNDb3B5aW5nPiB7CisgICAgQ0dSZWN0IG1fcmVjdDsKKyAg
ICBXS1dyaXRpbmdEaXJlY3Rpb24gbV93cml0aW5nRGlyZWN0aW9uOworICAgIEJPT0wgbV9pc0xp
bmVCcmVhazsKKyAgICBCT09MIG1faXNGaXJzdE9uTGluZTsKKyAgICBCT09MIG1faXNMYXN0T25M
aW5lOworICAgIEJPT0wgbV9jb250YWluc1N0YXJ0OworICAgIEJPT0wgbV9jb250YWluc0VuZDsK
KyAgICBCT09MIG1faXNJbkZpeGVkUG9zaXRpb247CisgICAgQk9PTCBtX2lzSG9yaXpvbnRhbDsK
K30KKworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgQ0dSZWN0IHJlY3Q7CitAcHJvcGVy
dHkgKG5vbmF0b21pYywgYXNzaWduKSBXS1dyaXRpbmdEaXJlY3Rpb24gd3JpdGluZ0RpcmVjdGlv
bjsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIEJPT0wgaXNMaW5lQnJlYWs7CitAcHJv
cGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBCT09MIGlzRmlyc3RPbkxpbmU7CitAcHJvcGVydHkg
KG5vbmF0b21pYywgYXNzaWduKSBCT09MIGlzTGFzdE9uTGluZTsKK0Bwcm9wZXJ0eSAobm9uYXRv
bWljLCBhc3NpZ24pIEJPT0wgY29udGFpbnNTdGFydDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBh
c3NpZ24pIEJPT0wgY29udGFpbnNFbmQ7CitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBC
T09MIGlzSW5GaXhlZFBvc2l0aW9uOworQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgQk9P
TCBpc0hvcml6b250YWw7CisKKysgKFdlYlNlbGVjdGlvblJlY3QgKilzZWxlY3Rpb25SZWN0Owor
CisrIChDR1JlY3Qpc3RhcnRFZGdlOihOU0FycmF5ICopcmVjdHM7CisrIChDR1JlY3QpZW5kRWRn
ZTooTlNBcnJheSAqKXJlY3RzOworCitAZW5kCisKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJTZWxlY3Rpb25S
ZWN0Lm0gYi9Tb3VyY2UvV2ViS2l0L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJTZWxlY3Rpb25SZWN0
Lm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uOGEwMjFmOTE1NDUwNmU3Zjc0MmY2MTI2MGYxMjU5N2QyODI0MTUzZQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYlNl
bGVjdGlvblJlY3QubQpAQCAtMCwwICsxLDE5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBQTEFURk9S
TShJT1MpCisKKyNpbXBvcnQgIldlYlNlbGVjdGlvblJlY3QuaCIKKworQGltcGxlbWVudGF0aW9u
IFdlYlNlbGVjdGlvblJlY3QKKworQHN5bnRoZXNpemUgcmVjdCA9IG1fcmVjdDsKK0BzeW50aGVz
aXplIHdyaXRpbmdEaXJlY3Rpb24gPSBtX3dyaXRpbmdEaXJlY3Rpb247CitAc3ludGhlc2l6ZSBp
c0xpbmVCcmVhayA9IG1faXNMaW5lQnJlYWs7CitAc3ludGhlc2l6ZSBpc0ZpcnN0T25MaW5lID0g
bV9pc0ZpcnN0T25MaW5lOworQHN5bnRoZXNpemUgaXNMYXN0T25MaW5lID0gbV9pc0xhc3RPbkxp
bmU7CitAc3ludGhlc2l6ZSBjb250YWluc1N0YXJ0ID0gbV9jb250YWluc1N0YXJ0OworQHN5bnRo
ZXNpemUgY29udGFpbnNFbmQgPSBtX2NvbnRhaW5zRW5kOworQHN5bnRoZXNpemUgaXNJbkZpeGVk
UG9zaXRpb24gPSBtX2lzSW5GaXhlZFBvc2l0aW9uOworQHN5bnRoZXNpemUgaXNIb3Jpem9udGFs
ID0gbV9pc0hvcml6b250YWw7CisKKysgKFdlYlNlbGVjdGlvblJlY3QgKilzZWxlY3Rpb25SZWN0
Cit7CisgICAgcmV0dXJuIFtbW3NlbGYgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKK30KKwor
KyAoQ0dSZWN0KXN0YXJ0RWRnZTooTlNBcnJheSAqKXJlY3RzCit7CisgICAgaWYgKHJlY3RzLmNv
dW50ID09IDApCisgICAgICAgIHJldHVybiBDR1JlY3RaZXJvOworCisgICAgV2ViU2VsZWN0aW9u
UmVjdCAqc2VsZWN0aW9uUmVjdCA9IG5pbDsKKyAgICBmb3IgKFdlYlNlbGVjdGlvblJlY3QgKnNy
ZWN0IGluIHJlY3RzKSB7CisgICAgICAgIGlmIChzcmVjdC5jb250YWluc1N0YXJ0KSB7CisgICAg
ICAgICAgICBzZWxlY3Rpb25SZWN0ID0gc3JlY3Q7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgIH0KKyAgICBpZiAoIXNlbGVjdGlvblJlY3QpCisgICAgICAgIHNlbGVjdGlvblJl
Y3QgPSBbcmVjdHMgb2JqZWN0QXRJbmRleDowXTsKKyAgICAKKyAgICBDR1JlY3QgcmVjdCA9IHNl
bGVjdGlvblJlY3QucmVjdDsKKyAgICAKKyAgICBpZiAoIXNlbGVjdGlvblJlY3QuaXNIb3Jpem9u
dGFsKSB7CisgICAgICAgIHN3aXRjaCAoc2VsZWN0aW9uUmVjdC53cml0aW5nRGlyZWN0aW9uKSB7
CisgICAgICAgICAgICBjYXNlIFdLV3JpdGluZ0RpcmVjdGlvbk5hdHVyYWw6CisgICAgICAgICAg
ICBjYXNlIFdLV3JpdGluZ0RpcmVjdGlvbkxlZnRUb1JpZ2h0OgorICAgICAgICAgICAgICAgIC8v
IGNvbGxhcHNlIHRvIHRvcCBlZGdlCisgICAgICAgICAgICAgICAgcmVjdC5zaXplLmhlaWdodCA9
IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFdLV3JpdGluZ0Rp
cmVjdGlvblJpZ2h0VG9MZWZ0OgorICAgICAgICAgICAgICAgIC8vIGNvbGxhcHNlIHRvIGJvdHRv
bSBlZGdlCisgICAgICAgICAgICAgICAgcmVjdC5vcmlnaW4ueSArPSAocmVjdC5zaXplLmhlaWdo
dCAtIDEpOworICAgICAgICAgICAgICAgIHJlY3Quc2l6ZS5oZWlnaHQgPSAxOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZWN0OworICAgIH0KKyAg
ICAKKyAgICBzd2l0Y2ggKHNlbGVjdGlvblJlY3Qud3JpdGluZ0RpcmVjdGlvbikgeworICAgICAg
ICBjYXNlIFdLV3JpdGluZ0RpcmVjdGlvbk5hdHVyYWw6CisgICAgICAgIGNhc2UgV0tXcml0aW5n
RGlyZWN0aW9uTGVmdFRvUmlnaHQ6CisgICAgICAgICAgICAvLyBjb2xsYXBzZSB0byBsZWZ0IGVk
Z2UKKyAgICAgICAgICAgIHJlY3Quc2l6ZS53aWR0aCA9IDE7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBXS1dyaXRpbmdEaXJlY3Rpb25SaWdodFRvTGVmdDoKKyAgICAgICAgICAg
IC8vIGNvbGxhcHNlIHRvIHJpZ2h0IGVkZ2UKKyAgICAgICAgICAgIHJlY3Qub3JpZ2luLnggKz0g
KHJlY3Quc2l6ZS53aWR0aCAtIDEpOworICAgICAgICAgICAgcmVjdC5zaXplLndpZHRoID0gMTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gcmVjdDsKK30KKworKyAoQ0dS
ZWN0KWVuZEVkZ2U6KE5TQXJyYXkgKilyZWN0cworeworICAgIGlmIChyZWN0cy5jb3VudCA9PSAw
KQorICAgICAgICByZXR1cm4gQ0dSZWN0WmVybzsKKworICAgIFdlYlNlbGVjdGlvblJlY3QgKnNl
bGVjdGlvblJlY3QgPSBuaWw7CisgICAgZm9yIChXZWJTZWxlY3Rpb25SZWN0ICpzcmVjdCBpbiBy
ZWN0cykgeworICAgICAgICBpZiAoc3JlY3QuY29udGFpbnNFbmQpIHsKKyAgICAgICAgICAgIHNl
bGVjdGlvblJlY3QgPSBzcmVjdDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
fQorICAgIGlmICghc2VsZWN0aW9uUmVjdCkKKyAgICAgICAgc2VsZWN0aW9uUmVjdCA9IFtyZWN0
cyBsYXN0T2JqZWN0XTsKKworICAgIENHUmVjdCByZWN0ID0gc2VsZWN0aW9uUmVjdC5yZWN0Owor
ICAgIAorICAgIGlmICghc2VsZWN0aW9uUmVjdC5pc0hvcml6b250YWwpIHsKKyAgICAgICAgc3dp
dGNoIChzZWxlY3Rpb25SZWN0LndyaXRpbmdEaXJlY3Rpb24pIHsKKyAgICAgICAgICAgIGNhc2Ug
V0tXcml0aW5nRGlyZWN0aW9uTmF0dXJhbDoKKyAgICAgICAgICAgIGNhc2UgV0tXcml0aW5nRGly
ZWN0aW9uTGVmdFRvUmlnaHQ6CisgICAgICAgICAgICAgICAgLy8gY29sbGFwc2UgdG8gYm90dG9t
IGVkZ2UKKyAgICAgICAgICAgICAgICByZWN0Lm9yaWdpbi55ICs9IChyZWN0LnNpemUuaGVpZ2h0
IC0gMSk7CisgICAgICAgICAgICAgICAgcmVjdC5zaXplLmhlaWdodCA9IDE7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFdLV3JpdGluZ0RpcmVjdGlvblJpZ2h0VG9M
ZWZ0OgorICAgICAgICAgICAgICAgIC8vIGNvbGxhcHNlIHRvIHRvcCBlZGdlCisgICAgICAgICAg
ICAgICAgcmVjdC5zaXplLmhlaWdodCA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIHJlY3Q7CisgICAgfQorICAgIAorICAgIHN3aXRjaCAoc2Vs
ZWN0aW9uUmVjdC53cml0aW5nRGlyZWN0aW9uKSB7CisgICAgICAgIGNhc2UgV0tXcml0aW5nRGly
ZWN0aW9uTmF0dXJhbDoKKyAgICAgICAgY2FzZSBXS1dyaXRpbmdEaXJlY3Rpb25MZWZ0VG9SaWdo
dDoKKyAgICAgICAgICAgIC8vIGNvbGxhcHNlIHRvIHJpZ2h0IGVkZ2UKKyAgICAgICAgICAgIHJl
Y3Qub3JpZ2luLnggKz0gKHJlY3Quc2l6ZS53aWR0aCAtIDEpOworICAgICAgICAgICAgcmVjdC5z
aXplLndpZHRoID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdLV3JpdGlu
Z0RpcmVjdGlvblJpZ2h0VG9MZWZ0OgorICAgICAgICAgICAgLy8gY29sbGFwc2UgdG8gbGVmdCBl
ZGdlCisgICAgICAgICAgICByZWN0LnNpemUud2lkdGggPSAxOworICAgICAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIHJldHVybiByZWN0OworfQorCistIChpZClpbml0Cit7CisgICAgc2VsZiA9
IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAg
CisgICAgc2VsZi5yZWN0ID0gQ0dSZWN0WmVybzsKKyAgICBzZWxmLndyaXRpbmdEaXJlY3Rpb24g
PSBXS1dyaXRpbmdEaXJlY3Rpb25MZWZ0VG9SaWdodDsKKyAgICBzZWxmLmlzTGluZUJyZWFrID0g
Tk87CisgICAgc2VsZi5pc0ZpcnN0T25MaW5lID0gTk87CisgICAgc2VsZi5pc0xhc3RPbkxpbmUg
PSBOTzsKKyAgICBzZWxmLmNvbnRhaW5zU3RhcnQgPSBOTzsKKyAgICBzZWxmLmNvbnRhaW5zRW5k
ID0gTk87CisgICAgc2VsZi5pc0luRml4ZWRQb3NpdGlvbiA9IE5POworICAgIHNlbGYuaXNIb3Jp
em9udGFsID0gTk87CisgICAgCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKGlkKWNvcHlXaXRo
Wm9uZTooTlNab25lICopem9uZQoreworICAgIFdlYlNlbGVjdGlvblJlY3QgKmNvcHkgPSBbW1dl
YlNlbGVjdGlvblJlY3Qgc2VsZWN0aW9uUmVjdF0gcmV0YWluXTsKKyAgICBjb3B5LnJlY3QgPSBz
ZWxmLnJlY3Q7CisgICAgY29weS53cml0aW5nRGlyZWN0aW9uID0gc2VsZi53cml0aW5nRGlyZWN0
aW9uOworICAgIGNvcHkuaXNMaW5lQnJlYWsgPSBzZWxmLmlzTGluZUJyZWFrOworICAgIGNvcHku
aXNGaXJzdE9uTGluZSA9IHNlbGYuaXNGaXJzdE9uTGluZTsKKyAgICBjb3B5LmlzTGFzdE9uTGlu
ZSA9IHNlbGYuaXNMYXN0T25MaW5lOworICAgIGNvcHkuY29udGFpbnNTdGFydCA9IHNlbGYuY29u
dGFpbnNTdGFydDsKKyAgICBjb3B5LmNvbnRhaW5zRW5kID0gc2VsZi5jb250YWluc0VuZDsKKyAg
ICBjb3B5LmlzSW5GaXhlZFBvc2l0aW9uID0gc2VsZi5pc0luRml4ZWRQb3NpdGlvbjsKKyAgICBj
b3B5LmlzSG9yaXpvbnRhbCA9IHNlbGYuaXNIb3Jpem9udGFsOworICAgIHJldHVybiBjb3B5Owor
fQorCistIChOU1N0cmluZyAqKWRlc2NyaXB0aW9uCit7CisgICAgcmV0dXJuIFtOU1N0cmluZyBz
dHJpbmdXaXRoRm9ybWF0OkAiPFdlYlNlbGVjdGlvblJlY3Q6ICVwPiA6IHsgJS4xZiwlLjFmLCUu
MWYsJS4xZiB9ICVAJUAlQCVAJUAlQCVAJUAiLAorICAgICAgICBzZWxmLCAKKyAgICAgICAgc2Vs
Zi5yZWN0Lm9yaWdpbi54LCBzZWxmLnJlY3Qub3JpZ2luLnksIHNlbGYucmVjdC5zaXplLndpZHRo
LCBzZWxmLnJlY3Quc2l6ZS5oZWlnaHQsCisgICAgICAgIHNlbGYud3JpdGluZ0RpcmVjdGlvbiA9
PSBXS1dyaXRpbmdEaXJlY3Rpb25MZWZ0VG9SaWdodCA/IEAiW0xUUl0iIDogQCJbUlRMXSIsCisg
ICAgICAgIHNlbGYuaXNMaW5lQnJlYWsgPyBAIiBbQlJdIiA6IEAiIiwKKyAgICAgICAgc2VsZi5p
c0ZpcnN0T25MaW5lID8gQCIgW0ZJUlNUXSIgOiBAIiIsCisgICAgICAgIHNlbGYuaXNMYXN0T25M
aW5lID8gQCIgW0xBU1RdIiA6IEAiIiwKKyAgICAgICAgc2VsZi5jb250YWluc1N0YXJ0ID8gQCIg
W1NUQVJUXSIgOiBAIiIsCisgICAgICAgIHNlbGYuY29udGFpbnNFbmQgPyBAIiBbRU5EXSIgOiBA
IiIsCisgICAgICAgIHNlbGYuaXNJbkZpeGVkUG9zaXRpb24gPyBAIiBbRklYRURdIiA6IEAiIiwK
KyAgICAgICAgIXNlbGYuaXNIb3Jpem9udGFsID8gQCIgW1ZFUlRJQ0FMXSIgOiBAIiJdOworfQor
CitAZW5kCisKKyNlbmRpZiAgLy8gUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViVmlzaWJsZVBvc2l0aW9uLmggYi9Tb3VyY2UvV2Vi
S2l0L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJWaXNpYmxlUG9zaXRpb24uaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45
MWZiOWMzNTNiMzA3Yzk1NzJmNTlkYTM4YzVhMDcxZTNhM2E3NDI3Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViVmlzaWJsZVBvc2l0aW9uLmgK
QEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSAgIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3Vu
ZGF0aW9uLmg+CisjaW1wb3J0IDxXZWJLaXQvRE9NVUlLaXRFeHRlbnNpb25zLmg+CisKKyNpbXBv
cnQgPFdlYktpdC9XQUtBcHBLaXRTdHVicy5oPgorCit0eXBlZGVmIHN0cnVjdCBXZWJPYmplY3RJ
bnRlcm5hbCBXZWJPYmplY3RJbnRlcm5hbDsKKwordHlwZWRlZiBlbnVtIHsKKyAgICBXZWJUZXh0
R3JhbnVsYXJpdHlDaGFyYWN0ZXIsCisgICAgV2ViVGV4dEdyYW51bGFyaXR5V29yZCwKKyAgICBX
ZWJUZXh0R3JhbnVsYXJpdHlTZW50ZW5jZSwKKyAgICBXZWJUZXh0R3JhbnVsYXJpdHlQYXJhZ3Jh
cGgsCisgICAgV2ViVGV4dEdyYW51bGFyaXR5TGluZSwKKyAgICBXZWJUZXh0R3JhbnVsYXJpdHlB
bGwsCit9IFdlYlRleHRHcmFudWxhcml0eTsKKworQGludGVyZmFjZSBXZWJWaXNpYmxlUG9zaXRp
b24gOiBOU09iamVjdCB7CitAcHJpdmF0ZQorICAgIFdlYk9iamVjdEludGVybmFsICpfaW50ZXJu
YWw7Cit9CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBOU1NlbGVjdGlvbkFmZmluaXR5IGFmZmlu
aXR5OworCistIChOU0NvbXBhcmlzb25SZXN1bHQpY29tcGFyZTooV2ViVmlzaWJsZVBvc2l0aW9u
ICopb3RoZXI7CistIChpbnQpZGlzdGFuY2VGcm9tUG9zaXRpb246KFdlYlZpc2libGVQb3NpdGlv
biAqKW90aGVyOworLSAoV2ViVmlzaWJsZVBvc2l0aW9uICopcG9zaXRpb25CeU1vdmluZ0luRGly
ZWN0aW9uOihXZWJUZXh0QWRqdXN0bWVudERpcmVjdGlvbilkaXJlY3Rpb24gYW1vdW50OihVSW50
MzIpYW1vdW50OworLSAoV2ViVmlzaWJsZVBvc2l0aW9uICopcG9zaXRpb25CeU1vdmluZ0luRGly
ZWN0aW9uOihXZWJUZXh0QWRqdXN0bWVudERpcmVjdGlvbilkaXJlY3Rpb24gYW1vdW50OihVSW50
MzIpYW1vdW50IHdpdGhBZmZpbml0eURvd25zdHJlYW06KEJPT0wpYWZmaW5pdHlEb3duc3RyZWFt
OworCisvLyBSZXR1cm5lcyBZRVMgb25seSBpZiBhIHBvc2l0aW9uIGlzIGF0IGEgYm91bmRhcnkg
b2YgYSB0ZXh0IHVuaXQgb2YgdGhlIHNwZWNpZmllZCBncmFudWxhcml0eSBpbiB0aGUgcGFydGlj
dWxhciBkaXJlY3Rpb24uCistIChCT09MKWF0Qm91bmRhcnlPZkdyYW51bGFyaXR5OihXZWJUZXh0
R3JhbnVsYXJpdHkpZ3JhbnVsYXJpdHkgaW5EaXJlY3Rpb246KFdlYlRleHRBZGp1c3RtZW50RGly
ZWN0aW9uKWRpcmVjdGlvbjsKKworLy8gUmV0dXJucyB0aGUgbmV4dCBib3VuZGFyeSBwb3NpdGlv
biBvZiBhIHRleHQgdW5pdCBvZiB0aGUgZ2l2ZW4gZ3JhbnVsYXJpdHkgaW4gdGhlIGdpdmVuIGRp
cmVjdGlvbiwgb3IgbmlsIGlmIHRoZXJlIGlzIG5vIHN1Y2ggcG9zaXRpb24uCistIChXZWJWaXNp
YmxlUG9zaXRpb24gKilwb3NpdGlvbk9mTmV4dEJvdW5kYXJ5T2ZHcmFudWxhcml0eTooV2ViVGV4
dEdyYW51bGFyaXR5KWdyYW51bGFyaXR5IGluRGlyZWN0aW9uOihXZWJUZXh0QWRqdXN0bWVudERp
cmVjdGlvbilkaXJlY3Rpb247CisKKy8vIFJldHVybnMgWUVTIGlmIHBvc2l0aW9uIGlzIHdpdGhp
biBhIHRleHQgdW5pdCBvZiB0aGUgZ2l2ZW4gZ3JhbnVsYXJpdHkuIElmIHRoZSBwb3NpdGlvbiBp
cyBhdCBhIGJvdW5kYXJ5LCByZXR1cm5zIFlFUyBvbmx5IGlmCisvLyBpZiB0aGUgYm91bmRhcnkg
aXMgcGFydCBvZiB0aGUgdGV4dCB1bml0IGluIHRoZSBnaXZlbiBkaXJlY3Rpb24uCistIChCT09M
KXdpdGhpblRleHRVbml0T2ZHcmFudWxhcml0eTooV2ViVGV4dEdyYW51bGFyaXR5KWdyYW51bGFy
aXR5IGluRGlyZWN0aW9uSWZBdEJvdW5kYXJ5OihXZWJUZXh0QWRqdXN0bWVudERpcmVjdGlvbilk
aXJlY3Rpb247CisKKy8vIFJldHVybnMgcmFuZ2Ugb2YgdGhlIGVuY2xvc2luZyB0ZXh0IHVuaXQg
b2YgdGhlIGdpdmVuIGdyYW51bGFyaXR5LCBvciBuaWwgaWYgdGhlcmUgaXMgbm8gc3VjaCBlbmNs
b3NpbmcgdW5pdC4gV2hldGhlciBhIGJvdW5kYXJ5IHBvc2l0aW9uCisvLyBpcyBlbmNsb3NlZCBk
ZXBlbmRzIG9uIHRoZSBnaXZlbiBkaXJlY3Rpb24sIHVzaW5nIHRoZSBzYW1lIHJ1bGUgYXMgLVtX
ZWJWaXNpYmxlUG9zaXRpb24gd2l0aGluVGV4dFVuaXRPZkdyYW51bGFyaXR5OmluRGlyZWN0aW9u
QXRCb3VuZGFyeTpdLgorLSAoRE9NUmFuZ2UgKillbmNsb3NpbmdUZXh0VW5pdE9mR3JhbnVsYXJp
dHk6KFdlYlRleHRHcmFudWxhcml0eSlncmFudWxhcml0eSBpbkRpcmVjdGlvbklmQXRCb3VuZGFy
eTooV2ViVGV4dEFkanVzdG1lbnREaXJlY3Rpb24pZGlyZWN0aW9uOworCisvLyBVc2VzIGZpbmUt
dHVuZWQgbG9naWMgb3JpZ2luYWxseSBmcm9tIFdlYkNvcmU6OkZyYW1lOjptb3ZlU2VsZWN0aW9u
VG9TdGFydE9yRW5kT2ZDdXJyZW50V29yZAorLSAoV2ViVmlzaWJsZVBvc2l0aW9uICopcG9zaXRp
b25BdFN0YXJ0T3JFbmRPZldvcmQ7CisKKy0gKEJPT0wpaXNFZGl0YWJsZTsKKy0gKEJPT0wpcmVx
dWlyZXNDb250ZXh0Rm9yV29yZEJvdW5kYXJ5OworLSAoQk9PTClhdEFscGhhTnVtZXJpY0JvdW5k
YXJ5SW5EaXJlY3Rpb246KFdlYlRleHRBZGp1c3RtZW50RGlyZWN0aW9uKWRpcmVjdGlvbjsKKwor
LSAoRE9NUmFuZ2UgKillbmNsb3NpbmdSYW5nZVdpdGhEaWN0YXRpb25QaHJhc2VBbHRlcm5hdGl2
ZXM6KE5TQXJyYXkgKiopYWx0ZXJuYXRpdmVzOworLSAoRE9NUmFuZ2UgKillbmNsb3NpbmdSYW5n
ZVdpdGhDb3JyZWN0aW9uSW5kaWNhdG9yOworCitAZW5kCisKK0BpbnRlcmZhY2UgRE9NUmFuZ2Ug
KFZpc2libGVQb3NpdGlvbkV4dGVuc2lvbnMpCisKKy0gKFdlYlZpc2libGVQb3NpdGlvbiAqKXN0
YXJ0UG9zaXRpb247CistIChXZWJWaXNpYmxlUG9zaXRpb24gKillbmRQb3NpdGlvbjsKKysgKERP
TVJhbmdlICopcmFuZ2VGb3JGaXJzdFBvc2l0aW9uOihXZWJWaXNpYmxlUG9zaXRpb24gKilmaXJz
dCBzZWNvbmQ6KFdlYlZpc2libGVQb3NpdGlvbiAqKXNlY29uZDsKKworLy8gVXNlcyBmaW5lLXR1
bmVkIGxvZ2ljIGZyb20gU2VsZWN0aW9uQ29udHJvbGxlcjo6d29yZFNlbGVjdGlvbkNvbnRhaW5p
bmdDYXJldFNlbGVjdGlvbgorLSAoRE9NUmFuZ2UgKillbmNsb3NpbmdXb3JkUmFuZ2U7CisKK0Bl
bmQKKworQGludGVyZmFjZSBET01Ob2RlIChWaXNpYmxlUG9zaXRpb25FeHRlbnNpb25zKQorCist
IChXZWJWaXNpYmxlUG9zaXRpb24gKilzdGFydFBvc2l0aW9uOworLSAoV2ViVmlzaWJsZVBvc2l0
aW9uICopZW5kUG9zaXRpb247CisKK0BlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvaW9z
L1dlYkNvcmVTdXBwb3J0L1dlYlZpc2libGVQb3NpdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXQvaW9z
L1dlYkNvcmVTdXBwb3J0L1dlYlZpc2libGVQb3NpdGlvbi5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lODQ4MmRi
Nzk1ZDZjYWQzYTVkODFiMmYzMDRhYjQyOGQ5OTczMGUzCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViVmlzaWJsZVBvc2l0aW9uLm1tCkBAIC0w
LDAgKzEsNjM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIFBMQVRGT1JNKElPUykKKworI2ltcG9ydCAi
V2ViVmlzaWJsZVBvc2l0aW9uLmgiCisjaW1wb3J0ICJXZWJWaXNpYmxlUG9zaXRpb25JbnRlcm5h
bC5oIgorCisjaW1wb3J0IDxXZWJDb3JlL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5oPgorI2lt
cG9ydCA8V2ViQ29yZS9GcmFtZVNlbGVjdGlvbi5oPgorI2ltcG9ydCA8V2ViQ29yZS9IVE1MVGV4
dEZvcm1Db250cm9sRWxlbWVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9Ob2RlLmg+CisjaW1wb3J0
IDxXZWJDb3JlL1Bvc2l0aW9uLmg+CisjaW1wb3J0IDxXZWJDb3JlL1JhbmdlLmg+CisjaW1wb3J0
IDxXZWJDb3JlL1JlbmRlclRleHRDb250cm9sLmg+CisjaW1wb3J0IDxXZWJDb3JlL1RleHRCb3Vu
ZGFyaWVzLmg+CisjaW1wb3J0IDxXZWJDb3JlL1RleHREaXJlY3Rpb24uaD4KKyNpbXBvcnQgPFdl
YkNvcmUvVGV4dEdyYW51bGFyaXR5Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1RleHRJdGVyYXRvci5o
PgorI2ltcG9ydCA8V2ViQ29yZS9WaXNpYmxlUG9zaXRpb24uaD4KKyNpbXBvcnQgPFdlYkNvcmUv
VmlzaWJsZVVuaXRzLmg+CisjaW1wb3J0IDxXZWJDb3JlL2h0bWxlZGl0aW5nLmg+CisKKworI2lt
cG9ydCAiRE9NTm9kZUludGVybmFsLmgiCisjaW1wb3J0ICJET01SYW5nZUludGVybmFsLmgiCisK
K3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0KKworQGlt
cGxlbWVudGF0aW9uIFdlYlZpc2libGVQb3NpdGlvbiAoSW50ZXJuYWwpCisKKy8vIFNpbmNlIFZp
c2libGVQb3NpdGlvbiBpc24ndCByZWZjb3VudGVkLCB3ZSBoYXZlIHRvIHVzZSBuZXcgYW5kIGRl
bGV0ZSBvbiBhIGNvcHkuCisKKysgKFdlYlZpc2libGVQb3NpdGlvbiAqKV93cmFwVmlzaWJsZVBv
c2l0aW9uOihWaXNpYmxlUG9zaXRpb24pdmlzaWJsZVBvc2l0aW9uCit7CisgICAgV2ViVmlzaWJs
ZVBvc2l0aW9uICp2cCA9IFtbV2ViVmlzaWJsZVBvc2l0aW9uIGFsbG9jXSBpbml0XTsKKyAgICBW
aXNpYmxlUG9zaXRpb24gKmNvcHkgPSBuZXcgVmlzaWJsZVBvc2l0aW9uKHZpc2libGVQb3NpdGlv
bik7CisgICAgdnAtPl9pbnRlcm5hbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8V2ViT2JqZWN0SW50ZXJu
YWwgKj4oY29weSk7CisgICAgcmV0dXJuIFt2cCBhdXRvcmVsZWFzZV07Cit9CisKKy8vIFJldHVy
bnMgbmlsIGlmIHZpc2libGUgcG9zaXRpb24gaXMgbnVsbC4KKysgKFdlYlZpc2libGVQb3NpdGlv
biAqKV93cmFwVmlzaWJsZVBvc2l0aW9uSWZWYWxpZDooVmlzaWJsZVBvc2l0aW9uKXZpc2libGVQ
b3NpdGlvbgoreworICAgIHJldHVybiAodmlzaWJsZVBvc2l0aW9uLmlzTm90TnVsbCgpID8gW1dl
YlZpc2libGVQb3NpdGlvbiBfd3JhcFZpc2libGVQb3NpdGlvbjp2aXNpYmxlUG9zaXRpb25dIDog
bmlsKTsKK30KKworLSAoVmlzaWJsZVBvc2l0aW9uKV92aXNpYmxlUG9zaXRpb24KK3sKKyAgICBW
aXNpYmxlUG9zaXRpb24gKnZwID0gcmVpbnRlcnByZXRfY2FzdDxWaXNpYmxlUG9zaXRpb24gKj4o
X2ludGVybmFsKTsKKyAgICByZXR1cm4gKnZwOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlv
biBXZWJWaXNpYmxlUG9zaXRpb24KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgVmlzaWJsZVBv
c2l0aW9uICp2cCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VmlzaWJsZVBvc2l0aW9uICo+KF9pbnRlcm5h
bCk7CisgICAgZGVsZXRlIHZwOworICAgIF9pbnRlcm5hbCA9IG5pbDsKKyAgICBbc3VwZXIgZGVh
bGxvY107Cit9CisKKy0gKEJPT0wpaXNFcXVhbDooV2ViVmlzaWJsZVBvc2l0aW9uICopb3RoZXIK
K3sKKyAgICBWaXNpYmxlUG9zaXRpb24gbXlWUCA9IFtzZWxmIF92aXNpYmxlUG9zaXRpb25dOwor
ICAgIFZpc2libGVQb3NpdGlvbiBvdGhlclZQID0gW290aGVyIF92aXNpYmxlUG9zaXRpb25dOwor
ICAgIHJldHVybiAobXlWUCA9PSBvdGhlclZQKTsKK30KKworLSAoTlNDb21wYXJpc29uUmVzdWx0
KWNvbXBhcmU6KFdlYlZpc2libGVQb3NpdGlvbiAqKW90aGVyCit7CisgICAgVmlzaWJsZVBvc2l0
aW9uIG15VlAgPSBbc2VsZiBfdmlzaWJsZVBvc2l0aW9uXTsKKyAgICBWaXNpYmxlUG9zaXRpb24g
b3RoZXJWUCA9IFtvdGhlciBfdmlzaWJsZVBvc2l0aW9uXTsKKyAgICAKKyAgICBpZiAobXlWUCA9
PSBvdGhlclZQKQorICAgICAgICByZXR1cm4gTlNPcmRlcmVkU2FtZTsKKyAgICBlbHNlIGlmICht
eVZQIDwgb3RoZXJWUCkKKyAgICAgICAgcmV0dXJuIE5TT3JkZXJlZEFzY2VuZGluZzsKKyAgICBl
bHNlCisgICAgICAgIHJldHVybiBOU09yZGVyZWREZXNjZW5kaW5nOworfQorCistIChpbnQpZGlz
dGFuY2VGcm9tUG9zaXRpb246KFdlYlZpc2libGVQb3NpdGlvbiAqKW90aGVyCit7CisgICAgcmV0
dXJuIGRpc3RhbmNlQmV0d2VlblBvc2l0aW9ucyhbc2VsZiBfdmlzaWJsZVBvc2l0aW9uXSwgW290
aGVyIF92aXNpYmxlUG9zaXRpb25dKTsKK30KKworLSAoTlNTdHJpbmcgKilkZXNjcmlwdGlvbgor
eworICAgIAorICAgIE5TTXV0YWJsZVN0cmluZyAqZGVzY3JpcHRpb24gPSBbTlNNdXRhYmxlU3Ry
aW5nIHN0cmluZ1dpdGhTdHJpbmc6W3N1cGVyIGRlc2NyaXB0aW9uXV07CisgICAgVmlzaWJsZVBv
c2l0aW9uIHZwID0gW3NlbGYgX3Zpc2libGVQb3NpdGlvbl07CisgICAgaW50IG9mZnNldCA9IHZw
LmRlZXBFcXVpdmFsZW50KCkub2Zmc2V0SW5Db250YWluZXJOb2RlKCk7CisKKyAgICBbZGVzY3Jp
cHRpb24gYXBwZW5kRm9ybWF0OkAiKG9mZnNldD0lZCwgY29udGV4dD0oWyVjfCVjXSwgW3UrJTA0
eHx1KyUwNHhdKSIsIG9mZnNldCwgdnAuY2hhcmFjdGVyQmVmb3JlKCksIHZwLmNoYXJhY3RlckFm
dGVyKCksCisgICAgICAgIHZwLmNoYXJhY3RlckJlZm9yZSgpLCB2cC5jaGFyYWN0ZXJBZnRlcigp
XTsKKyAgICAKKyAgICByZXR1cm4gZGVzY3JpcHRpb247Cit9CisKKworLSAoVGV4dERpcmVjdGlv
bil0ZXh0RGlyZWN0aW9uCit7CisgICAgLy8gVE9ETzogaW1wbGVtZW50CisgICAgcmV0dXJuIExU
UjsKK30KKworLSAoQk9PTClkaXJlY3Rpb25Jc0Rvd25zdHJlYW06KFdlYlRleHRBZGp1c3RtZW50
RGlyZWN0aW9uKWRpcmVjdGlvbgoreworICAgIGlmIChkaXJlY3Rpb24gPT0gV2ViVGV4dEFkanVz
dG1lbnRCYWNrd2FyZCkKKyAgICAgICAgcmV0dXJuIE5POworICAgIAorICAgIGlmIChkaXJlY3Rp
b24gPT0gV2ViVGV4dEFkanVzdG1lbnRGb3J3YXJkKQorICAgICAgICByZXR1cm4gWUVTOworICAg
IAorICAgIAorICAgIGlmIChbc2VsZiB0ZXh0RGlyZWN0aW9uXSA9PSBMVFIpIHsKKyAgICAgICAg
cmV0dXJuIChkaXJlY3Rpb24gPT0gV2ViVGV4dEFkanVzdG1lbnRSaWdodCk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgcmV0dXJuIChkaXJlY3Rpb24gPT0gV2ViVGV4dEFkanVzdG1lbnRMZWZ0KTsK
KyAgICB9Cit9CisKKy0gKFdlYlZpc2libGVQb3NpdGlvbiAqKXBvc2l0aW9uQnlNb3ZpbmdJbkRp
cmVjdGlvbjooV2ViVGV4dEFkanVzdG1lbnREaXJlY3Rpb24pZGlyZWN0aW9uIGFtb3VudDooVUlu
dDMyKWFtb3VudCB3aXRoQWZmaW5pdHlEb3duc3RyZWFtOihCT09MKWFmZmluaXR5RG93bnN0cmVh
bQoreworICAgIFZpc2libGVQb3NpdGlvbiB2cCA9IFtzZWxmIF92aXNpYmxlUG9zaXRpb25dOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICB2cC5zZXRBZmZpbml0eShhZmZpbml0eURv
d25zdHJlYW0gPyBET1dOU1RSRUFNIDogVlBfVVBTVFJFQU1fSUZfUE9TU0lCTEUpOworCisgICAg
c3dpdGNoIChkaXJlY3Rpb24pIHsKKyAgICAgICAgY2FzZSBXZWJUZXh0QWRqdXN0bWVudEZvcndh
cmQ6IHsKKyAgICAgICAgICAgIGZvciAoVUludDMyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspCisg
ICAgICAgICAgICAgICAgdnAgPSB2cC5uZXh0KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBjYXNlIFdlYlRleHRBZGp1c3RtZW50QmFja3dhcmQ6IHsKKyAgICAgICAg
ICAgIGZvciAoVUludDMyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspCisgICAgICAgICAgICAgICAg
dnAgPSB2cC5wcmV2aW91cygpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgY2FzZSBXZWJUZXh0QWRqdXN0bWVudFJpZ2h0OiB7CisgICAgICAgICAgICBmb3IgKFVJbnQz
MiBpID0gMDsgaSA8IGFtb3VudDsgaSsrKQorICAgICAgICAgICAgICAgIHZwID0gdnAucmlnaHQo
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgV2ViVGV4dEFk
anVzdG1lbnRMZWZ0OiB7CisgICAgICAgICAgICBmb3IgKFVJbnQzMiBpID0gMDsgaSA8IGFtb3Vu
dDsgaSsrKQorICAgICAgICAgICAgICAgIHZwID0gdnAubGVmdCgpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBXZWJUZXh0QWRqdXN0bWVudFVwOiB7CisgICAg
ICAgICAgICBpbnQgeE9mZnNldCA9IHZwLmxpbmVEaXJlY3Rpb25Qb2ludEZvckJsb2NrRGlyZWN0
aW9uTmF2aWdhdGlvbigpOworICAgICAgICAgICAgZm9yIChVSW50MzIgaSA9IDA7IGkgPCBhbW91
bnQ7IGkrKykKKyAgICAgICAgICAgICAgICB2cCA9IHByZXZpb3VzTGluZVBvc2l0aW9uKHZwLCB4
T2Zmc2V0KTsgICAgICAgICAgICAKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGNhc2UgV2ViVGV4dEFkanVzdG1lbnREb3duOiB7CisgICAgICAgICAgICBpbnQgeE9mZnNl
dCA9IHZwLmxpbmVEaXJlY3Rpb25Qb2ludEZvckJsb2NrRGlyZWN0aW9uTmF2aWdhdGlvbigpOwor
ICAgICAgICAgICAgZm9yIChVSW50MzIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKykKKyAgICAgICAg
ICAgICAgICB2cCA9IG5leHRMaW5lUG9zaXRpb24odnAsIHhPZmZzZXQpOyAgICAgICAgICAgIAor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDogeworICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgIH0KKyAgICByZXR1cm4gW1dlYlZpc2libGVQb3NpdGlvbiBfd3JhcFZpc2libGVQb3Np
dGlvbklmVmFsaWQ6dnBdOworfQorCistIChXZWJWaXNpYmxlUG9zaXRpb24gKilwb3NpdGlvbkJ5
TW92aW5nSW5EaXJlY3Rpb246KFdlYlRleHRBZGp1c3RtZW50RGlyZWN0aW9uKWRpcmVjdGlvbiBh
bW91bnQ6KFVJbnQzMilhbW91bnQKKworeworICAgIHJldHVybiBbc2VsZiBwb3NpdGlvbkJ5TW92
aW5nSW5EaXJlY3Rpb246ZGlyZWN0aW9uIGFtb3VudDphbW91bnQgd2l0aEFmZmluaXR5RG93bnN0
cmVhbTpZRVNdOworfQorCitzdGF0aWMgaW5saW5lIFRleHRHcmFudWxhcml0eSB0b1RleHRHcmFu
dWxhcml0eShXZWJUZXh0R3JhbnVsYXJpdHkgd2ViR3JhbnVsYXJpdHkpCit7CisgICAgVGV4dEdy
YW51bGFyaXR5IGdyYW51bGFyaXR5OworICAgIAorICAgIHN3aXRjaCAod2ViR3JhbnVsYXJpdHkp
IHsKKyAgICAgICAgY2FzZSBXZWJUZXh0R3JhbnVsYXJpdHlDaGFyYWN0ZXI6CisgICAgICAgICAg
ICBncmFudWxhcml0eSA9IENoYXJhY3RlckdyYW51bGFyaXR5OworICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgY2FzZSBXZWJUZXh0R3JhbnVsYXJpdHlXb3JkOgorICAgICAgICAgICAgZ3Jh
bnVsYXJpdHkgPSBXb3JkR3JhbnVsYXJpdHk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICBjYXNlIFdlYlRleHRHcmFudWxhcml0eVNlbnRlbmNlOgorICAgICAgICAgICAgZ3JhbnVsYXJp
dHkgPSBTZW50ZW5jZUdyYW51bGFyaXR5OworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
Y2FzZSBXZWJUZXh0R3JhbnVsYXJpdHlMaW5lOgorICAgICAgICAgICAgZ3JhbnVsYXJpdHkgPSBM
aW5lR3JhbnVsYXJpdHk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFdlYlRl
eHRHcmFudWxhcml0eVBhcmFncmFwaDoKKyAgICAgICAgICAgIGdyYW51bGFyaXR5ID0gUGFyYWdy
YXBoR3JhbnVsYXJpdHk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFdlYlRl
eHRHcmFudWxhcml0eUFsbDoKKyAgICAgICAgICAgIGdyYW51bGFyaXR5ID0gRG9jdW1lbnRHcmFu
dWxhcml0eTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICAgICAgICAgIAorICAgIHJldHVybiBncmFudWxhcml0eTsKK30KKworc3RhdGljIGlubGluZSBT
ZWxlY3Rpb25EaXJlY3Rpb24gdG9TZWxlY3Rpb25EaXJlY3Rpb24oV2ViVGV4dEFkanVzdG1lbnRE
aXJlY3Rpb24gZGlyZWN0aW9uKQoreworICAgIFNlbGVjdGlvbkRpcmVjdGlvbiByZXN1bHQ7Cisg
ICAgCisgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKKyAgICAgICAgY2FzZSBXZWJUZXh0QWRqdXN0
bWVudEZvcndhcmQ6CisgICAgICAgICAgICByZXN1bHQgPSBEaXJlY3Rpb25Gb3J3YXJkOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBXZWJUZXh0QWRqdXN0
bWVudEJhY2t3YXJkOgorICAgICAgICAgICAgcmVzdWx0ID0gRGlyZWN0aW9uQmFja3dhcmQ7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFdlYlRleHRBZGp1
c3RtZW50UmlnaHQ6CisgICAgICAgICAgICByZXN1bHQgPSBEaXJlY3Rpb25SaWdodDsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgV2ViVGV4dEFkanVzdG1l
bnRMZWZ0OgorICAgICAgICAgICAgcmVzdWx0ID0gRGlyZWN0aW9uTGVmdDsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAKKyAgICAgICAgY2FzZSBXZWJUZXh0QWRqdXN0bWVudFVwOgorICAg
ICAgICAgICAgcmVzdWx0ID0gRGlyZWN0aW9uTGVmdDsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAKKyAgICAgICAgY2FzZSBXZWJUZXh0QWRqdXN0bWVudERvd246CisgICAgICAgICAgICBy
ZXN1bHQgPSBEaXJlY3Rpb25SaWdodDsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKKy8vIFJldHVybmVzIFlFUyBvbmx5IGlmIGEgcG9zaXRpb24g
aXMgYXQgYSBib3VuZGFyeSBvZiBhIHRleHQgdW5pdCBvZiB0aGUgc3BlY2lmaWVkIGdyYW51bGFy
aXR5IGluIHRoZSBwYXJ0aWN1bGFyIGRpcmVjdGlvbi4KKy0gKEJPT0wpYXRCb3VuZGFyeU9mR3Jh
bnVsYXJpdHk6KFdlYlRleHRHcmFudWxhcml0eSlncmFudWxhcml0eSBpbkRpcmVjdGlvbjooV2Vi
VGV4dEFkanVzdG1lbnREaXJlY3Rpb24pZGlyZWN0aW9uCit7CisgICAgcmV0dXJuIGF0Qm91bmRh
cnlPZkdyYW51bGFyaXR5KFtzZWxmIF92aXNpYmxlUG9zaXRpb25dLCB0b1RleHRHcmFudWxhcml0
eShncmFudWxhcml0eSksIHRvU2VsZWN0aW9uRGlyZWN0aW9uKGRpcmVjdGlvbikpOworfQorCisv
LyBSZXR1cm5zIHRoZSBuZXh0IGJvdW5kYXJ5IHBvc2l0aW9uIG9mIGEgdGV4dCB1bml0IG9mIHRo
ZSBnaXZlbiBncmFudWxhcml0eSBpbiB0aGUgZ2l2ZW4gZGlyZWN0aW9uLCBvciBuaWwgaWYgdGhl
cmUgaXMgbm8gc3VjaCBwb3NpdGlvbi4KKy0gKFdlYlZpc2libGVQb3NpdGlvbiAqKXBvc2l0aW9u
T2ZOZXh0Qm91bmRhcnlPZkdyYW51bGFyaXR5OihXZWJUZXh0R3JhbnVsYXJpdHkpZ3JhbnVsYXJp
dHkgaW5EaXJlY3Rpb246KFdlYlRleHRBZGp1c3RtZW50RGlyZWN0aW9uKWRpcmVjdGlvbgorewor
ICAgIHJldHVybiBbV2ViVmlzaWJsZVBvc2l0aW9uIF93cmFwVmlzaWJsZVBvc2l0aW9uSWZWYWxp
ZDpwb3NpdGlvbk9mTmV4dEJvdW5kYXJ5T2ZHcmFudWxhcml0eShbc2VsZiBfdmlzaWJsZVBvc2l0
aW9uXSwgdG9UZXh0R3JhbnVsYXJpdHkoZ3JhbnVsYXJpdHkpLCB0b1NlbGVjdGlvbkRpcmVjdGlv
bihkaXJlY3Rpb24pKV07Cit9CisKKy8vIFJldHVybnMgWUVTIGlmIHBvc2l0aW9uIGlzIHdpdGhp
biBhIHRleHQgdW5pdCBvZiB0aGUgZ2l2ZW4gZ3JhbnVsYXJpdHkuICBJZiB0aGUgcG9zaXRpb24g
aXMgYXQgYSBib3VuZGFyeSwgcmV0dXJucyBZRVMgb25seSBpZgorLy8gaWYgdGhlIGJvdW5kYXJ5
IGlzIHBhcnQgb2YgdGhlIHRleHQgdW5pdCBpbiB0aGUgZ2l2ZW4gZGlyZWN0aW9uLgorLSAoQk9P
TCl3aXRoaW5UZXh0VW5pdE9mR3JhbnVsYXJpdHk6KFdlYlRleHRHcmFudWxhcml0eSlncmFudWxh
cml0eSBpbkRpcmVjdGlvbklmQXRCb3VuZGFyeTooV2ViVGV4dEFkanVzdG1lbnREaXJlY3Rpb24p
ZGlyZWN0aW9uCit7CisgICAgcmV0dXJuIHdpdGhpblRleHRVbml0T2ZHcmFudWxhcml0eShbc2Vs
ZiBfdmlzaWJsZVBvc2l0aW9uXSwgdG9UZXh0R3JhbnVsYXJpdHkoZ3JhbnVsYXJpdHkpLCB0b1Nl
bGVjdGlvbkRpcmVjdGlvbihkaXJlY3Rpb24pKTsKK30KKworLy8gUmV0dXJucyByYW5nZSBvZiB0
aGUgZW5jbG9zaW5nIHRleHQgdW5pdCBvZiB0aGUgZ2l2ZW4gZ3JhbnVsYXJpdHksIG9yIG5pbCBp
ZiB0aGVyZSBpcyBubyBzdWNoIGVuY2xvc2luZyB1bml0LiAgV2hldGhlciBhIGJvdW5kYXJ5IHBv
c2l0aW9uCisvLyBpcyBlbmNsb3NlZCBkZXBlbmRzIG9uIHRoZSBnaXZlbiBkaXJlY3Rpb24sIHVz
aW5nIHRoZSBzYW1lIHJ1bGUgYXMgLVtXZWJWaXNpYmxlUG9zaXRpb24gd2l0aGluVGV4dFVuaXRP
ZkdyYW51bGFyaXR5OmluRGlyZWN0aW9uQXRCb3VuZGFyeTpdLgorLSAoRE9NUmFuZ2UgKillbmNs
b3NpbmdUZXh0VW5pdE9mR3JhbnVsYXJpdHk6KFdlYlRleHRHcmFudWxhcml0eSlncmFudWxhcml0
eSBpbkRpcmVjdGlvbklmQXRCb3VuZGFyeTooV2ViVGV4dEFkanVzdG1lbnREaXJlY3Rpb24pZGly
ZWN0aW9uCit7CisgICAgcmV0dXJuIGtpdChlbmNsb3NpbmdUZXh0VW5pdE9mR3JhbnVsYXJpdHko
W3NlbGYgX3Zpc2libGVQb3NpdGlvbl0sIHRvVGV4dEdyYW51bGFyaXR5KGdyYW51bGFyaXR5KSwg
dG9TZWxlY3Rpb25EaXJlY3Rpb24oZGlyZWN0aW9uKSkuZ2V0KCkpOworfQorCistIChXZWJWaXNp
YmxlUG9zaXRpb24gKilwb3NpdGlvbkF0U3RhcnRPckVuZE9mV29yZAoreworICAgIC8vIFJpcHBl
ZCBmcm9tIFdlYkNvcmU6OkZyYW1lOjptb3ZlU2VsZWN0aW9uVG9TdGFydE9yRW5kT2ZDdXJyZW50
V29yZAorICAgIAorICAgIC8vIE5vdGU6IHRoaXMgaXMgdGhlIGlQaG9uZSBub3Rpb24sIG5vdCB0
aGUgdW5pY29kZSBub3Rpb24uCisgICAgLy8gSGVyZSwgYSB3b3JkIHN0YXJ0cyB3aXRoIG5vbi13
aGl0ZXNwYWNlIG9yIGF0IHRoZSBzdGFydCBvZiBhIGxpbmUgYW5kCisgICAgLy8gZW5kcyBhdCB0
aGUgbmV4dCB3aGl0ZXNwYWNlLCBvciBhdCB0aGUgZW5kIG9mIGEgbGluZS4KKyAgICAKKyAgICAv
LyBTZWxlY3Rpb24gcnVsZTogSWYgdGhlIHNlbGVjdGlvbiBpcyBiZWZvcmUgdGhlIGZpcnN0IGNo
YXJhY3RlciBvcgorICAgIC8vIGp1c3QgYWZ0ZXIgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBhIHdv
cmQgdGhhdCBpcyBsb25nZXIgdGhhbiBvbmUKKyAgICAvLyBjaGFyYWN0ZXIsIG1vdmUgdG8gdGhl
IHN0YXJ0IG9mIHRoZSB3b3JkLiBPdGhlcndpc2UsIG1vdmUgdG8gdGhlCisgICAgLy8gZW5kIG9m
IHRoZSB3b3JkLgorICAgIAorICAgIFZpc2libGVQb3NpdGlvbiBwb3MgPSBbc2VsZiBfdmlzaWJs
ZVBvc2l0aW9uXTsKKyAgICBWaXNpYmxlUG9zaXRpb24gb3JpZ2luYWxQb3MocG9zKTsKKyAgICAK
KyAgICBVQ2hhcjMyIGNoID0gcG9zLmNoYXJhY3RlckFmdGVyKCk7CisgICAgYm9vbCBpc0NvbXBs
ZXggPSByZXF1aXJlc0NvbnRleHRGb3JXb3JkQm91bmRhcnkoY2gpOworICAgIGlmIChpc0NvbXBs
ZXgpIHsKKyAgICAgICAgLy8gZm9yIGNvbXBsZXggbGF5b3V0LCBmaW5kIHdvcmQgYXJvdW5kIGlu
c2VydGlvbiBwb2ludAorICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVdvcmRTdGFydCA9
IHN0YXJ0T2ZXb3JkKHBvcyk7CisgICAgICAgIFBvc2l0aW9uIHdvcmRTdGFydCA9IHZpc2libGVX
b3JkU3RhcnQuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICAgICAgCisgICAgICAgIC8vIHBsYWNlIGNh
cmV0IGluIGZyb250IG9mIHdvcmQgaWYgcG9zIGlzIHdpdGhpbiBmaXJzdCAyIGNoYXJhY3RlcnMg
b2Ygd29yZCAoc2VlIFNlbGVjdGlvbiBSdWxlIGFib3ZlKQorICAgICAgICBpZiAod29yZFN0YXJ0
LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgKyAxID49IHBvcy5kZWVwRXF1aXZhbGVudCgpLmRl
cHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpIHsKKyAgICAgICAgICAgIHBvcyA9IHdvcmRTdGFydDsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIGNhbGN1bGF0ZSBlbmQgb2Ygd29yZCB0
byBpbnNlcnQgY2FyZXQgYWZ0ZXIgd29yZAorICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZp
c2libGVXb3JkRW5kID0gZW5kT2ZXb3JkKHBvcyk7CisgICAgICAgICAgICBQb3NpdGlvbiB3b3Jk
RW5kID0gdmlzaWJsZVdvcmRFbmQuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICAgICAgICAgIHBvcyA9
IHdvcmRFbmQ7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBVQ2hhcjMyIGMgPSBw
b3MuY2hhcmFjdGVyQWZ0ZXIoKTsKKyAgICAgICAgQ0ZDaGFyYWN0ZXJTZXRSZWYgc2V0ID0gQ0ZD
aGFyYWN0ZXJTZXRHZXRQcmVkZWZpbmVkKGtDRkNoYXJhY3RlclNldFdoaXRlc3BhY2VBbmROZXds
aW5lKTsKKyAgICAgICAgaWYgKGMgPT0gMCB8fCBDRkNoYXJhY3RlclNldElzTG9uZ0NoYXJhY3Rl
ck1lbWJlcihzZXQsIGMpKSB7CisgICAgICAgICAgICAvLyBzZWFyY2ggYmFja3dhcmQgZm9yIGEg
bm9uLXNwYWNlCisgICAgICAgICAgICB3aGlsZSAoMSkgeworICAgICAgICAgICAgICAgIGlmIChw
b3MuaXNOdWxsKCkgfHwgaXNTdGFydE9mTGluZShwb3MpKQorICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICBjID0gcG9zLmNoYXJhY3RlckJlZm9yZSgpOworICAgICAg
ICAgICAgICAgIGlmICghQ0ZDaGFyYWN0ZXJTZXRJc0xvbmdDaGFyYWN0ZXJNZW1iZXIoc2V0LCBj
KSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgcG9zID0gcG9z
LnByZXZpb3VzKENhbm5vdENyb3NzRWRpdGluZ0JvdW5kYXJ5KTsgIC8vIHN0YXkgaW4gZWRpdGFi
bGUgY29udGVudAorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgLy8gU2VlIGhvdyBmYXIgdGhlIHNlbGVjdGlvbiBleHRlbmRzIGludG8gdGhlIGN1
cnJlbnQgd29yZC4KKyAgICAgICAgICAgIC8vIEZvbGxvdyB0aGUgcnVsZSBzdGF0ZWQgYWJvdmUu
CisgICAgICAgICAgICBpbnQgaW5kZXggPSAwOworICAgICAgICAgICAgd2hpbGUgKDEpIHsKKyAg
ICAgICAgICAgICAgICBpZiAocG9zLmlzTnVsbCgpIHx8IGlzU3RhcnRPZkxpbmUocG9zKSkKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgYyA9IHBvcy5jaGFyYWN0
ZXJCZWZvcmUoKTsKKyAgICAgICAgICAgICAgICBpZiAoQ0ZDaGFyYWN0ZXJTZXRJc0xvbmdDaGFy
YWN0ZXJNZW1iZXIoc2V0LCBjKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgcG9zID0gcG9zLnByZXZpb3VzKENhbm5vdENyb3NzRWRpdGluZ0JvdW5kYXJ5KTsg
IC8vIHN0YXkgaW4gZWRpdGFibGUgY29udGVudAorICAgICAgICAgICAgICAgIGluZGV4Kys7Cisg
ICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gMSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaW5kZXggPiAxKSB7CisgICAgICAgICAg
ICAgICAgLy8gc2VhcmNoIGZvcndhcmQgZm9yIGEgc3BhY2UKKyAgICAgICAgICAgICAgICBwb3Mg
PSBvcmlnaW5hbFBvczsKKyAgICAgICAgICAgICAgICB3aGlsZSAoMSkgeworICAgICAgICAgICAg
ICAgICAgICBpZiAocG9zLmlzTnVsbCgpIHx8IGlzRW5kT2ZMaW5lKHBvcykpCisgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgYyA9IHBvcy5jaGFyYWN0
ZXJBZnRlcigpOworICAgICAgICAgICAgICAgICAgICBpZiAoQ0ZDaGFyYWN0ZXJTZXRJc0xvbmdD
aGFyYWN0ZXJNZW1iZXIoc2V0LCBjKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICBwb3MgPSBwb3MubmV4dChDYW5ub3RDcm9zc0VkaXRpbmdCb3Vu
ZGFyeSk7ICAvLyBzdGF5IGluIGVkaXRhYmxlIGNvbnRlbnQKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcmV0dXJuIFtXZWJWaXNp
YmxlUG9zaXRpb24gX3dyYXBWaXNpYmxlUG9zaXRpb25JZlZhbGlkOnBvc107Cit9CisKKy0gKEJP
T0wpaXNFZGl0YWJsZQoreworICAgIHJldHVybiBpc0VkaXRhYmxlUG9zaXRpb24oW3NlbGYgX3Zp
c2libGVQb3NpdGlvbl0uZGVlcEVxdWl2YWxlbnQoKSk7Cit9CisKKy0gKEJPT0wpcmVxdWlyZXND
b250ZXh0Rm9yV29yZEJvdW5kYXJ5Cit7CisgICAgVmlzaWJsZVBvc2l0aW9uIHZwID0gW3NlbGYg
X3Zpc2libGVQb3NpdGlvbl07CisgICAgcmV0dXJuIHJlcXVpcmVzQ29udGV4dEZvcldvcmRCb3Vu
ZGFyeSh2cC5jaGFyYWN0ZXJBZnRlcigpKSB8fCByZXF1aXJlc0NvbnRleHRGb3JXb3JkQm91bmRh
cnkodnAuY2hhcmFjdGVyQmVmb3JlKCkpOworfSAgICAKKworLSAoQk9PTClhdEFscGhhTnVtZXJp
Y0JvdW5kYXJ5SW5EaXJlY3Rpb246KFdlYlRleHRBZGp1c3RtZW50RGlyZWN0aW9uKWRpcmVjdGlv
bgoreworICAgIHN0YXRpYyBDRkNoYXJhY3RlclNldFJlZiBzZXQgPSBDRkNoYXJhY3RlclNldEdl
dFByZWRlZmluZWQoa0NGQ2hhcmFjdGVyU2V0QWxwaGFOdW1lcmljKTsKKyAgICBWaXNpYmxlUG9z
aXRpb24gcG9zID0gW3NlbGYgX3Zpc2libGVQb3NpdGlvbl07CisgICAgVUNoYXIzMiBjaGFyQmVm
b3JlID0gcG9zLmNoYXJhY3RlckJlZm9yZSgpOworICAgIFVDaGFyMzIgY2hhckFmdGVyID0gcG9z
LmNoYXJhY3RlckFmdGVyKCk7CisgICAgYm9vbCBiZWZvcmUgPSBDRkNoYXJhY3RlclNldElzQ2hh
cmFjdGVyTWVtYmVyKHNldCwgY2hhckJlZm9yZSk7CisgICAgYm9vbCBhZnRlciA9IENGQ2hhcmFj
dGVyU2V0SXNDaGFyYWN0ZXJNZW1iZXIoc2V0LCBjaGFyQWZ0ZXIpOworICAgIHJldHVybiBbc2Vs
ZiBkaXJlY3Rpb25Jc0Rvd25zdHJlYW06ZGlyZWN0aW9uXSA/IChiZWZvcmUgJiYgIWFmdGVyKSA6
ICghYmVmb3JlICYmIGFmdGVyKTsKK30KKworLSAoRE9NUmFuZ2UgKillbmNsb3NpbmdSYW5nZVdp
dGhEaWN0YXRpb25QaHJhc2VBbHRlcm5hdGl2ZXM6KE5TQXJyYXkgKiopYWx0ZXJuYXRpdmVzCit7
CisgICAgQVNTRVJUKGFsdGVybmF0aXZlcyk7CisgICAgaWYgKCFhbHRlcm5hdGl2ZXMpCisgICAg
ICAgIHJldHVybiBuaWw7CisgICAgICAgIAorICAgIC8vICphbHRlcm5hdGl2ZXMgc2hvdWxkIG5v
dCBhbHJlYWR5IHBvaW50IHRvIGFuIGFycmF5LgorICAgIEFTU0VSVCghKCphbHRlcm5hdGl2ZXMp
KTsKKyAgICAqYWx0ZXJuYXRpdmVzID0gbmlsOworICAgICAgICAKKyAgICBWaXNpYmxlUG9zaXRp
b24gcCA9IFtzZWxmIF92aXNpYmxlUG9zaXRpb25dOworICAgIGlmIChwLmlzTnVsbCgpKQorICAg
ICAgICByZXR1cm4gbmlsOworICAgICAgICAKKyAgICBpbnQgbyA9IHAuZGVlcEVxdWl2YWxlbnQo
KS5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOworICAgIGlmIChvIDwgMCkKKyAgICAgICAgcmV0
dXJuIG5pbDsKKyAgICB1bnNpZ25lZCBvZmZzZXQgPSBvOworICAgIAorICAgIE5vZGUqIG5vZGUg
PSBwLmRlZXBFcXVpdmFsZW50KCkuYW5jaG9yTm9kZSgpOworICAgIERvY3VtZW50KiBkb2N1bWVu
dCA9IG5vZGUtPmRvY3VtZW50KCk7CisgICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAgcmV0dXJu
IG5pbDsKKyAgICAKKyAgICBjb25zdCBWZWN0b3I8RG9jdW1lbnRNYXJrZXIqPiYgbWFya2VycyA9
IGRvY3VtZW50LT5tYXJrZXJzKCktPm1hcmtlcnNGb3Iobm9kZSk7CisgICAgaWYgKG1hcmtlcnMu
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbmlsOworICAgICAgICAKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1hcmtlcnMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgY29uc3QgRG9jdW1l
bnRNYXJrZXIqIG1hcmtlciA9IG1hcmtlcnNbaV07CisgICAgICAgIGlmIChtYXJrZXItPnR5cGUo
KSAhPSBEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlcykKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgIGlmIChtYXJrZXItPnN0
YXJ0T2Zmc2V0KCkgPD0gb2Zmc2V0ICYmIG1hcmtlci0+ZW5kT2Zmc2V0KCkgPj0gb2Zmc2V0KSB7
CisgICAgICAgICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgbWFya2VyQWx0ZXJuYXRpdmVzID0g
bWFya2VyLT5hbHRlcm5hdGl2ZXMoKTsKKyAgICAgICAgICAgICphbHRlcm5hdGl2ZXMgPSBbTlNN
dXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6bWFya2VyQWx0ZXJuYXRpdmVzLnNpemUoKV07
CisgICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IG1hcmtlckFsdGVybmF0aXZlcy5z
aXplKCk7IGorKykKKyAgICAgICAgICAgICAgICBbKE5TTXV0YWJsZUFycmF5ICopKmFsdGVybmF0
aXZlcyBhZGRPYmplY3Q6KE5TU3RyaW5nICopKG1hcmtlckFsdGVybmF0aXZlc1tqXSldOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFJhbmdlOjpj
cmVhdGUoZG9jdW1lbnQsIG5vZGUsIG1hcmtlci0+c3RhcnRPZmZzZXQoKSwgbm9kZSwgbWFya2Vy
LT5lbmRPZmZzZXQoKSk7CisgICAgICAgICAgICByZXR1cm4ga2l0KHJhbmdlLmdldCgpKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICAgICAgCisgICAgcmV0dXJuIG5pbDsKK30KKworLSAoRE9NUmFu
Z2UgKillbmNsb3NpbmdSYW5nZVdpdGhDb3JyZWN0aW9uSW5kaWNhdG9yCit7CisgICAgVmlzaWJs
ZVBvc2l0aW9uIHAgPSBbc2VsZiBfdmlzaWJsZVBvc2l0aW9uXTsKKyAgICBpZiAocC5pc051bGwo
KSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBpbnQgbyA9IHAuZGVlcEVxdWl2YWxl
bnQoKS5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOworICAgIGlmIChvIDwgMCkKKyAgICAgICAg
cmV0dXJuIG5pbDsKKyAgICB1bnNpZ25lZCBvZmZzZXQgPSBvOworICAgIAorICAgIE5vZGUqIG5v
ZGUgPSBwLmRlZXBFcXVpdmFsZW50KCkuYW5jaG9yTm9kZSgpOworICAgIERvY3VtZW50KiBkb2N1
bWVudCA9IG5vZGUtPmRvY3VtZW50KCk7CisgICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAgcmV0
dXJuIG5pbDsKKyAgICAKKyAgICBjb25zdCBWZWN0b3I8RG9jdW1lbnRNYXJrZXI+JiBtYXJrZXJz
ID0gZG9jdW1lbnQtPm1hcmtlcnMoKS0+bWFya2Vyc0Zvck5vZGUobm9kZSk7CisgICAgaWYgKG1h
cmtlcnMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbWFya2Vycy5zaXplKCk7IGkrKykgeworICAgICAgICBjb25zdCBEb2N1
bWVudE1hcmtlciYgbWFya2VyID0gbWFya2Vyc1tpXTsKKyAgICAgICAgaWYgKG1hcmtlci50eXBl
KCkgIT0gRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKQorICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIAorICAgICAgICBpZiAobWFya2VyLnN0YXJ0T2Zmc2V0KCkgPD0gb2Zmc2V0ICYmIG1h
cmtlci5lbmRPZmZzZXQoKSA+PSBvZmZzZXQpIHsKKyAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4g
cmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50LCBub2RlLCBtYXJrZXIuc3RhcnRPZmZzZXQo
KSwgbm9kZSwgbWFya2VyLmVuZE9mZnNldCgpKTsKKyAgICAgICAgICAgIHJldHVybiBraXQocmFu
Z2UuZ2V0KCkpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHJldHVybiBuaWw7Cit9CisK
Ky0gKE5TU2VsZWN0aW9uQWZmaW5pdHkpYWZmaW5pdHkKK3sKKyAgICByZXR1cm4gKE5TU2VsZWN0
aW9uQWZmaW5pdHkpW3NlbGYgX3Zpc2libGVQb3NpdGlvbl0uYWZmaW5pdHkoKTsKK30KKworLSAo
dm9pZClzZXRBZmZpbml0eTooTlNTZWxlY3Rpb25BZmZpbml0eSlhZmZpbml0eQoreworICAgIHJl
aW50ZXJwcmV0X2Nhc3Q8VmlzaWJsZVBvc2l0aW9uICo+KF9pbnRlcm5hbCktPnNldEFmZmluaXR5
KChXZWJDb3JlOjpFQWZmaW5pdHkpYWZmaW5pdHkpOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRh
dGlvbiBET01SYW5nZSAoVmlzaWJsZVBvc2l0aW9uRXh0ZW5zaW9ucykKKworLSAoV2ViVmlzaWJs
ZVBvc2l0aW9uICopc3RhcnRQb3NpdGlvbgoreworICAgIFJhbmdlICpyYW5nZSA9IGNvcmUoc2Vs
Zik7CisgICAgcmV0dXJuIFtXZWJWaXNpYmxlUG9zaXRpb24gX3dyYXBWaXNpYmxlUG9zaXRpb246
VmlzaWJsZVBvc2l0aW9uKHJhbmdlLT5zdGFydFBvc2l0aW9uKCkpXTsKK30KKworLSAoV2ViVmlz
aWJsZVBvc2l0aW9uICopZW5kUG9zaXRpb24KK3sKKyAgICBSYW5nZSAqcmFuZ2UgPSBjb3JlKHNl
bGYpOworICAgIHJldHVybiBbV2ViVmlzaWJsZVBvc2l0aW9uIF93cmFwVmlzaWJsZVBvc2l0aW9u
OlZpc2libGVQb3NpdGlvbihyYW5nZS0+ZW5kUG9zaXRpb24oKSldOworfQorCistIChET01SYW5n
ZSAqKWVuY2xvc2luZ1dvcmRSYW5nZQoreworICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9u
KFtzZWxmLnN0YXJ0UG9zaXRpb24gX3Zpc2libGVQb3NpdGlvbl0sIFtzZWxmLmVuZFBvc2l0aW9u
IF92aXNpYmxlUG9zaXRpb25dKTsKKyAgICBzZWxlY3Rpb24gPSBGcmFtZVNlbGVjdGlvbjo6d29y
ZFNlbGVjdGlvbkNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbihzZWxlY3Rpb24pOworICAgIFdlYlZp
c2libGVQb3NpdGlvbiAqc3RhcnQgPSBbV2ViVmlzaWJsZVBvc2l0aW9uIF93cmFwVmlzaWJsZVBv
c2l0aW9uOnNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKV07CisgICAgV2ViVmlzaWJsZVBvc2l0aW9u
ICplbmQgPSBbV2ViVmlzaWJsZVBvc2l0aW9uIF93cmFwVmlzaWJsZVBvc2l0aW9uOnNlbGVjdGlv
bi52aXNpYmxlRW5kKCldOworICAgIHJldHVybiBbRE9NUmFuZ2UgcmFuZ2VGb3JGaXJzdFBvc2l0
aW9uOnN0YXJ0IHNlY29uZDplbmRdOworfQorCisrIChET01SYW5nZSAqKXJhbmdlRm9yRmlyc3RQ
b3NpdGlvbjooV2ViVmlzaWJsZVBvc2l0aW9uICopZmlyc3Qgc2Vjb25kOihXZWJWaXNpYmxlUG9z
aXRpb24gKilzZWNvbmQKK3sKKyAgICBWaXNpYmxlUG9zaXRpb24gZmlyc3RWUCA9IFtmaXJzdCBf
dmlzaWJsZVBvc2l0aW9uXTsKKyAgICBWaXNpYmxlUG9zaXRpb24gc2Vjb25kVlAgPSBbc2Vjb25k
IF92aXNpYmxlUG9zaXRpb25dOworICAgIAorICAgIGlmIChmaXJzdFZQLmlzTnVsbCgpIHx8IHNl
Y29uZFZQLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIFJlZlB0cjxS
YW5nZT4gcmFuZ2U7CisgICAgaWYgKGZpcnN0VlAgPCBzZWNvbmRWUCkgeworICAgICAgICByYW5n
ZSA9IFJhbmdlOjpjcmVhdGUoZmlyc3RWUC5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2Rl
KCktPmRvY3VtZW50KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmly
c3RWUCwgc2Vjb25kVlApOworICAgIH0gZWxzZSB7CisgICAgICAgIHJhbmdlID0gUmFuZ2U6OmNy
ZWF0ZShmaXJzdFZQLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKS0+ZG9jdW1lbnQo
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kVlAs
IGZpcnN0VlApOworICAgIH0KKyAgICAKKyAgICAKKyAgICByZXR1cm4ga2l0KHJhbmdlLmdldCgp
KTsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gRE9NTm9kZSAoVmlzaWJsZVBvc2l0aW9u
RXh0ZW5zaW9ucykKKworLSAoRE9NUmFuZ2UgKilyYW5nZU9mQ29udGVudHMKK3sKKyAgICBET01S
YW5nZSAqcmFuZ2UgPSBbW3NlbGYgb3duZXJEb2N1bWVudF0gY3JlYXRlUmFuZ2VdOworICAgIFty
YW5nZSBzZXRTdGFydDpzZWxmIG9mZnNldDowXTsKKyAgICBbcmFuZ2Ugc2V0RW5kOnNlbGYgb2Zm
c2V0Oltbc2VsZiBjaGlsZE5vZGVzXSBsZW5ndGhdXTsKKyAgICByZXR1cm4gcmFuZ2U7ICAgIAor
fQorCistIChXZWJWaXNpYmxlUG9zaXRpb24gKilzdGFydFBvc2l0aW9uCit7CisjaWYgVVNFKFVJ
S0lUX0VESVRJTkcpCisgICAgLy8gV2hlbiBpbiBlZGl0YWJsZSBjb250ZW50LCB3ZSBuZWVkIHRv
IGNhbGN1bGF0ZSB0aGUgc3RhcnRQb3NpdGlvbiBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlCisg
ICAgLy8gZWRpdGFibGUgYXJlYS4KKyAgICBOb2RlKiBub2RlID0gY29yZShzZWxmKTsKKyAgICBp
ZiAobm9kZS0+aXNDb250ZW50RWRpdGFibGUoKSkgeworICAgICAgICBWaXNpYmxlUG9zaXRpb24g
dnAoY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG5vZGUsIDApLCBWUF9ERUZBVUxUX0FGRklO
SVRZKTsKKyAgICAgICAgcmV0dXJuIFtXZWJWaXNpYmxlUG9zaXRpb24gX3dyYXBWaXNpYmxlUG9z
aXRpb246c3RhcnRPZkVkaXRhYmxlQ29udGVudCh2cCldOworICAgIH0KKyNlbmRpZgorICAgIHJl
dHVybiBbW3NlbGYgcmFuZ2VPZkNvbnRlbnRzXSBzdGFydFBvc2l0aW9uXTsKK30KKworLSAoV2Vi
VmlzaWJsZVBvc2l0aW9uICopZW5kUG9zaXRpb24KK3sKKyNpZiBVU0UoVUlLSVRfRURJVElORykK
KyAgICAvLyBXaGVuIGluIGVkaXRhYmxlIGNvbnRlbnQsIHdlIG5lZWQgdG8gY2FsY3VsYXRlIHRo
ZSBlbmRQb3NpdGlvbiBmcm9tIHRoZSBlbmQgb2YgdGhlCisgICAgLy8gZWRpdGFibGUgYXJlYS4K
KyAgICBOb2RlKiBub2RlID0gY29yZShzZWxmKTsKKyAgICBpZiAobm9kZS0+aXNDb250ZW50RWRp
dGFibGUoKSkgeworICAgICAgICBWaXNpYmxlUG9zaXRpb24gdnAoY3JlYXRlTGVnYWN5RWRpdGlu
Z1Bvc2l0aW9uKG5vZGUsIDApLCBWUF9ERUZBVUxUX0FGRklOSVRZKTsKKyAgICAgICAgcmV0dXJu
IFtXZWJWaXNpYmxlUG9zaXRpb24gX3dyYXBWaXNpYmxlUG9zaXRpb246ZW5kT2ZFZGl0YWJsZUNv
bnRlbnQodnApXTsKKyAgICB9CisjZW5kaWYKKyAgICByZXR1cm4gW1tzZWxmIHJhbmdlT2ZDb250
ZW50c10gZW5kUG9zaXRpb25dOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBET01IVE1M
SW5wdXRFbGVtZW50IChWaXNpYmxlUG9zaXRpb25FeHRlbnNpb25zKQorCistIChXZWJWaXNpYmxl
UG9zaXRpb24gKilzdGFydFBvc2l0aW9uCit7CisgICAgTm9kZSAqbm9kZSA9IGNvcmUoc2VsZik7
CisgICAgUmVuZGVyT2JqZWN0ICpvYmplY3QgPSBub2RlLT5yZW5kZXJlcigpOworICAgIGlmICgh
b2JqZWN0IHx8ICFvYmplY3QtPmlzVGV4dENvbnRyb2woKSkKKyAgICAgICAgcmV0dXJuIFtzdXBl
ciBzdGFydFBvc2l0aW9uXTsKKyAgICAKKyAgICBSZW5kZXJUZXh0Q29udHJvbCAqdGV4dENvbnRy
b2wgPSB0b1JlbmRlclRleHRDb250cm9sKG9iamVjdCk7CisgICAgVmlzaWJsZVBvc2l0aW9uIHZp
c2libGVQb3NpdGlvbiA9IHRleHRDb250cm9sLT52aXNpYmxlUG9zaXRpb25Gb3JJbmRleCgwKTsK
KyAgICByZXR1cm4gW1dlYlZpc2libGVQb3NpdGlvbiBfd3JhcFZpc2libGVQb3NpdGlvbjp2aXNp
YmxlUG9zaXRpb25dOworfQorCistIChXZWJWaXNpYmxlUG9zaXRpb24gKillbmRQb3NpdGlvbgor
eworICAgIE5vZGUgKm5vZGUgPSBjb3JlKHNlbGYpOworICAgIFJlbmRlck9iamVjdCAqb2JqZWN0
ID0gbm9kZS0+cmVuZGVyZXIoKTsKKyAgICBpZiAoIW9iamVjdCB8fCAhb2JqZWN0LT5pc1RleHRD
b250cm9sKCkpCisgICAgICAgIHJldHVybiBbc3VwZXIgZW5kUG9zaXRpb25dOworICAgIAorICAg
IFJlbmRlclRleHRDb250cm9sICp0ZXh0Q29udHJvbCA9IHRvUmVuZGVyVGV4dENvbnRyb2wob2Jq
ZWN0KTsKKyAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0aW9uID0gdGV4dENvbnRyb2wt
PnZpc2libGVQb3NpdGlvbkZvckluZGV4KHRleHRDb250cm9sLT50ZXh0Rm9ybUNvbnRyb2xFbGVt
ZW50KCktPnZhbHVlKCkubGVuZ3RoKCkpOworICAgIHJldHVybiBbV2ViVmlzaWJsZVBvc2l0aW9u
IF93cmFwVmlzaWJsZVBvc2l0aW9uOnZpc2libGVQb3NpdGlvbl07Cit9CisKK0BlbmQKKworQGlt
cGxlbWVudGF0aW9uIERPTUhUTUxUZXh0QXJlYUVsZW1lbnQgKFZpc2libGVQb3NpdGlvbkV4dGVu
c2lvbnMpCisKKy0gKFdlYlZpc2libGVQb3NpdGlvbiAqKXN0YXJ0UG9zaXRpb24KK3sKKyAgICBO
b2RlICpub2RlID0gY29yZShzZWxmKTsKKyAgICBSZW5kZXJPYmplY3QgKm9iamVjdCA9IG5vZGUt
PnJlbmRlcmVyKCk7CisgICAgaWYgKCFvYmplY3QpIAorICAgICAgICByZXR1cm4gW3N1cGVyIHN0
YXJ0UG9zaXRpb25dOworICAgIAorICAgIFJlbmRlclRleHRDb250cm9sICp0ZXh0Q29udHJvbCA9
IHRvUmVuZGVyVGV4dENvbnRyb2wob2JqZWN0KTsKKyAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJs
ZVBvc2l0aW9uID0gdGV4dENvbnRyb2wtPnZpc2libGVQb3NpdGlvbkZvckluZGV4KDApOworICAg
IHJldHVybiBbV2ViVmlzaWJsZVBvc2l0aW9uIF93cmFwVmlzaWJsZVBvc2l0aW9uOnZpc2libGVQ
b3NpdGlvbl07Cit9CisKKy0gKFdlYlZpc2libGVQb3NpdGlvbiAqKWVuZFBvc2l0aW9uCit7Cisg
ICAgTm9kZSAqbm9kZSA9IGNvcmUoc2VsZik7CisgICAgUmVuZGVyT2JqZWN0ICpvYmplY3QgPSBu
b2RlLT5yZW5kZXJlcigpOworICAgIGlmICghb2JqZWN0KSAKKyAgICAgICAgcmV0dXJuIFtzdXBl
ciBlbmRQb3NpdGlvbl07CisgICAgCisgICAgUmVuZGVyVGV4dENvbnRyb2wgKnRleHRDb250cm9s
ID0gdG9SZW5kZXJUZXh0Q29udHJvbChvYmplY3QpOworICAgIFZpc2libGVQb3NpdGlvbiB2aXNp
YmxlUG9zaXRpb24gPSB0ZXh0Q29udHJvbC0+dmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgodGV4dENv
bnRyb2wtPnRleHRGb3JtQ29udHJvbEVsZW1lbnQoKS0+dmFsdWUoKS5sZW5ndGgoKSk7CisgICAg
cmV0dXJuIFtXZWJWaXNpYmxlUG9zaXRpb24gX3dyYXBWaXNpYmxlUG9zaXRpb246dmlzaWJsZVBv
c2l0aW9uXTsKK30KKworQGVuZAorCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViVmlzaWJsZVBvc2l0aW9uSW50
ZXJuYWwuaCBiL1NvdXJjZS9XZWJLaXQvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYlZpc2libGVQb3Np
dGlvbkludGVybmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDI5ZjE0MTM0Mjg0OTNhNWYzNmI0YjAwMTI4N2I0
OGNmZDI2OTc2NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvaW9zL1dlYkNvcmVT
dXBwb3J0L1dlYlZpc2libGVQb3NpdGlvbkludGVybmFsLmgKQEAgLTAsMCArMSwzNSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbXBvcnQgIldlYlZpc2libGVQb3NpdGlvbi5oIgorCisjaW1wb3J0IDxXZWJD
b3JlL1Zpc2libGVQb3NpdGlvbi5oPgorCitAaW50ZXJmYWNlIFdlYlZpc2libGVQb3NpdGlvbiAo
SW50ZXJuYWwpCisKKysgKFdlYlZpc2libGVQb3NpdGlvbiAqKV93cmFwVmlzaWJsZVBvc2l0aW9u
OihXZWJDb3JlOjpWaXNpYmxlUG9zaXRpb24pdmlzaWJsZVBvc2l0aW9uOworLSAoV2ViQ29yZTo6
VmlzaWJsZVBvc2l0aW9uKV92aXNpYmxlUG9zaXRpb247CisKK0BlbmQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvaW9zL1dlYktpdC5pT1MuZXhwIGIvU291cmNlL1dlYktpdC9pb3MvV2ViS2l0
LmlPUy5leHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uOTkyNzBjNjM2MzY0MDk0NjZlNDcxMDk5ZjcwMWUzYmFiYTBm
MTQyZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvaW9zL1dlYktpdC5pT1MuZXhw
CkBAIC0wLDAgKzEsNDQgQEAKKy5vYmpjX2NsYXNzX25hbWVfV2ViR2VvbG9jYXRpb25Qcm92aWRl
cklPUworLm9iamNfY2xhc3NfbmFtZV9XZWJJbnNwZWN0b3JYUENXcmFwcGVyCisub2JqY19jbGFz
c19uYW1lX1dlYk1JTUVUeXBlUmVnaXN0cnkKKy5vYmpjX2NsYXNzX25hbWVfV2ViUERGVmlldwor
Lm9iamNfY2xhc3NfbmFtZV9XZWJQREZWaWV3UGxhY2Vob2xkZXIKKy5vYmpjX2NsYXNzX25hbWVf
V2ViUGx1Z2luQ29udHJvbGxlcgorLm9iamNfY2xhc3NfbmFtZV9XZWJTZWxlY3Rpb25SZWN0Citf
V2ViRGF0YWJhc2VPcmlnaW5zRGlkQ2hhbmdlTm90aWZpY2F0aW9uCitfV2ViS2l0R2V0TGFzdExp
bmVCcmVha0luQnVmZmVyCitfV2ViS2l0R2V0TWluaW11bVpvb21Gb250U2l6ZQorX1dlYktpdElu
aXRpYWxpemUKK19XZWJLaXRQbGF0Zm9ybVN5c3RlbVJvb3REaXJlY3RvcnkKK19XZWJLaXRTZXRC
YWNrZ3JvdW5kQW5kRm9yZWdyb3VuZE5vdGlmaWNhdGlvbk5hbWVzCitfV2ViS2l0U2V0RW5kQmFj
a2dyb3VuZFRhc2tCbG9jaworX1dlYktpdFNldEludmFsaWRXZWJCYWNrZ3JvdW5kVGFza0lkZW50
aWZpZXIKK19XZWJLaXRTZXRJc0NsYXNzaWMKK19XZWJLaXRTZXRTdGFydEJhY2tncm91bmRUYXNr
QmxvY2sKK19XZWJRdWlja0xvb2tGaWxlTmFtZUtleQorX1dlYlF1aWNrTG9va1VUSUtleQorX1dl
YlZpZXdwb3J0SGVpZ2h0S2V5CitfV2ViVmlld3BvcnRJbml0aWFsU2NhbGVLZXkKK19XZWJWaWV3
cG9ydE1heGltdW1TY2FsZUtleQorX1dlYlZpZXdwb3J0TWluaW11bVNjYWxlS2V5CitfV2ViVmll
d3BvcnRVc2VyU2NhbGFibGVLZXkKK19XZWJWaWV3cG9ydFdpZHRoS2V5CisKKyMgU28gdGhhdCB3
ZSBjYW4gdXNlIHRoZSBNZW1vcnlNZWFzdXJlIGNsYXNzIGluIE1vYmlsZVNhZmFyaQorX19aTjZX
ZWJLaXQxM01lbW9yeU1lYXN1cmUxMHRhc2tNZW1vcnlFdgorX19aTjZXZWJLaXQxM01lbW9yeU1l
YXN1cmUxM2VuYWJsZUxvZ2dpbmdFYgorX19aTjZXZWJLaXQxM01lbW9yeU1lYXN1cmUxNmlzTG9n
Z2luZ0VuYWJsZWRFdgorX19aTjZXZWJLaXQxM01lbW9yeU1lYXN1cmVEMUV2CitfX1pONldlYktp
dDEzTWVtb3J5TWVhc3VyZUQyRXYKKworIyBGb3IgZXN0aW1hdGVkIHByb2dyZXNzIG5vdGlmaWNh
dGlvbnMKK19XZWJWaWV3UHJvZ3Jlc3NCYWNrZ3JvdW5kQ29sb3JLZXkKK19XZWJWaWV3UHJvZ3Jl
c3NFc3RpbWF0ZWRQcm9ncmVzc0tleQorCisjIEZvciBXZWJJbnNwZWN0b3Igbm90aWZpY2F0aW9u
cworX1dlYkluc3BlY3RvckRpZFN0YXJ0U2VhcmNoaW5nRm9yTm9kZQorX1dlYkluc3BlY3RvckRp
ZFN0b3BTZWFyY2hpbmdGb3JOb2RlCitfX1dlYlZpZXdSZW1vdGVJbnNwZWN0b3JIYXNTZXNzaW9u
Q2hhbmdlZE5vdGlmaWNhdGlvbgorCisjIFdlYktpdDEgaW50ZXJuYWwgdHlwZXMgZXhwb3NlZCBm
b3IgV2ViS2l0Mi4KKy5vYmpjX2NsYXNzX25hbWVfV2ViR2VvbG9jYXRpb25Db3JlTG9jYXRpb25Q
cm92aWRlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9pb3MvV2ViVmlldy9XZWJGcmFtZVZp
ZXdXQUtDb21wYXRpYmlsaXR5Lm0gYi9Tb3VyY2UvV2ViS2l0L2lvcy9XZWJWaWV3L1dlYkZyYW1l
Vmlld1dBS0NvbXBhdGliaWxpdHkubQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ZTMyZDM4ZmM5M2FmZTc5OGE0NGQ0
NjFjZjgwYmEzMDE0ZjY0YWE0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9pb3Mv
V2ViVmlldy9XZWJGcmFtZVZpZXdXQUtDb21wYXRpYmlsaXR5Lm0KQEAgLTAsMCArMSw0MiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZiBQTEFURk9STShJT1MpCisKKyNpbXBvcnQgIldlYkZyYW1lVmlld0lu
dGVybmFsLmgiCisjaW1wb3J0ICJXZWJWaWV3UHJpdmF0ZS5oIgorCitAaW1wbGVtZW50YXRpb24g
V2ViRnJhbWVWaWV3IChXQUtDb21wYXRpYmlsaXR5KQorCistICh2b2lkKWZyYW1lU2l6ZUNoYW5n
ZWQKK3sKKyAgICBpZiAoIVtbc2VsZiBfd2ViVmlld10gX3VzZUZpeGVkTGF5b3V0XSkKKyAgICAg
ICAgW3NlbGYgX2ZyYW1lU2l6ZUNoYW5nZWRdOworICAgIFtzdXBlciBmcmFtZVNpemVDaGFuZ2Vk
XTsKK30KKworQGVuZAorCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9pb3MvV2ViVmlldy9XZWJNYWlsRGVsZWdhdGUuaCBiL1NvdXJjZS9XZWJLaXQv
aW9zL1dlYlZpZXcvV2ViTWFpbERlbGVnYXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTNmN2QxMGQ0MmJkZWE1
OWRlZTY1NDUyNzE0MWFhYWY4MmZmZjJkMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvaW9zL1dlYlZpZXcvV2ViTWFpbERlbGVnYXRlLmgKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKK0BjbGFzcyBXZWJGcmFtZTsKK0BjbGFzcyBXZWJWaWV3OworCitAaW50ZXJmYWNlIE5T
T2JqZWN0IChXZWJNYWlsRGVsZWdhdGUpCisvLyBKdXN0IGEgc2ltcGxlIGRlbGVnYXRlIGNhbGwg
bGlrZSBXZWJGcmFtZUxvYWREZWxlZ2F0ZSBoYXMsIGJ1dCB0aGF0IGdldHMgY2FsbGVkIG9uIHRo
ZSBXZWJUaHJlYWQgaXRzZWxmLgorLSAodm9pZClfd2VidGhyZWFkX3dlYlZpZXc6KFdlYlZpZXcg
KilzZW5kZXIgZGlkRmluaXNoTG9hZEZvckZyYW1lOihXZWJGcmFtZSAqKWZyYW1lOworLSAodm9p
ZClfd2VidGhyZWFkX3dlYlZpZXc6KFdlYlZpZXcgKilzZW5kZXIgdGlsZURpZERyYXc6KENBTGF5
ZXIgKilsYXllcjsKKy0gKHZvaWQpX3dlYnRocmVhZF93ZWJWaWV3OihXZWJWaWV3ICopc2VuZGVy
IGRpZEZpbmlzaERvY3VtZW50TG9hZEZvckZyYW1lOihXZWJGcmFtZSAqKWZyYW1lOworQGVuZApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9pb3MvV2ViVmlldy9XZWJQREZWaWV3SU9TLmggYi9T
b3VyY2UvV2ViS2l0L2lvcy9XZWJWaWV3L1dlYlBERlZpZXdJT1MuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMzU3
Y2NiZDExNmRkZGI2NjIzMTA5OWUyNjhlMzk5NTFkOTM0MTM3Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9pb3MvV2ViVmlldy9XZWJQREZWaWV3SU9TLmgKQEAgLTAsMCArMSw0MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAxMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgPFdlYktpdC9XZWJEb2N1
bWVudFByaXZhdGUuaD4KKworQGludGVyZmFjZSBXZWJQREZWaWV3IDogV0FLVmlldyA8V2ViUERG
RG9jdW1lbnRWaWV3LCBXZWJQREZEb2N1bWVudFJlcHJlc2VudGF0aW9uPiB7CisgICAgQk9PTCBk
YXRhU291cmNlSGFzQmVlblNldDsKKyAgICBDR1BERkRvY3VtZW50UmVmIF9QREZEb2N1bWVudDsK
KyAgICBOU1N0cmluZyAqX3RpdGxlOworICAgIENHUmVjdCAqX3BhZ2VSZWN0czsKK30KKworLSAo
dW5zaWduZWQpcGFnZU51bWJlckZvclJlY3Q6KENHUmVjdClyZWN0OworLSAodW5zaWduZWQpdG90
YWxQYWdlczsKKworLSAoQ0dQREZEb2N1bWVudFJlZilkb2M7CistIChDR1JlY3QpcmVjdEZvclBh
Z2VOdW1iZXI6KHVuc2lnbmVkKXBhZ2VOdW07CisKK0BlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvaW9zL1dlYlZpZXcvV2ViUERGVmlld0lPUy5tbSBiL1NvdXJjZS9XZWJLaXQvaW9zL1dl
YlZpZXcvV2ViUERGVmlld0lPUy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wYmEzZDA3YzFiMjEyY2E4NmFlZTBj
ZTBjM2U1NmU5NjMwNTg5ZTNhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9pb3Mv
V2ViVmlldy9XZWJQREZWaWV3SU9TLm1tCkBAIC0wLDAgKzEsMzkyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiV2ViUERGVmlld0lPUy5oIgor
I2ltcG9ydCAiV2ViRGF0YVNvdXJjZUludGVybmFsLmgiCisKKyNpbXBvcnQgPFdlYktpdC9XZWJG
cmFtZUxvYWREZWxlZ2F0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dlYkZyYW1lLmg+CisjaW1wb3J0
IDxXZWJLaXQvV2ViRnJhbWVQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV2ViRnJhbWVWaWV3
Lmg+CisjaW1wb3J0IDxXZWJLaXQvV2ViTlNWaWV3RXh0cmFzLmg+CisjaW1wb3J0IDxXZWJLaXQv
V2ViVmlld1ByaXZhdGUuaD4KKyNpbXBvcnQgIldlYkZyYW1lSW50ZXJuYWwuaCIKKyNpbXBvcnQg
IldlYkpTUERGRG9jLmgiCisjaW1wb3J0ICJXZWJQREZEb2N1bWVudEV4dHJhcy5oIgorI2ltcG9y
dCAiV2ViUERGVmlld1BsYWNlaG9sZGVyLmgiCisjaW1wb3J0ICJXZWJLaXRWZXJzaW9uQ2hlY2tz
LmgiCisKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTQ29udGV4dFJlZi5oPgorI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWYuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pT
U3RyaW5nUmVmQ0YuaD4KKyNpbXBvcnQgPFdlYkNvcmUvQ29sb3IuaD4KKyNpbXBvcnQgPFdlYkNv
cmUvRnJhbWUuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRnJhbWVMb2FkZXIuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvRnJhbWVMb2FkZXJDbGllbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250
ZXh0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1dLR3JhcGhpY3MuaD4KKyNpbXBvcnQgPHd0Zi9Bc3Nl
cnRpb25zLmg+CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisjaW1wb3J0IDx3dGYvU3RkTGli
RXh0cmFzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIHN0
ZDsKKworc3RhdGljIGludCBjb21wYXJlUGFnZVJlY3RzKGNvbnN0IHZvaWQgKmtleSwgY29uc3Qg
dm9pZCAqYXJyYXkpOworCitzdGF0aWMgY29uc3QgZmxvYXQgUEFHRV9XSURUSF9JTlNFVCAgICAg
PSA0LjAgKiAyLjA7CitzdGF0aWMgY29uc3QgZmxvYXQgUEFHRV9IRUlHSFRfSU5TRVQgICAgPSA0
LjAgKiAyLjA7CisKK0BpbXBsZW1lbnRhdGlvbiBXZWJQREZWaWV3CisKKysgKE5TQXJyYXkgKilz
dXBwb3J0ZWRNSU1FVHlwZXMKK3sKKyAgICByZXR1cm4gW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0
czoKKyAgICAgICAgQCJ0ZXh0L3BkZiIsCisgICAgICAgIEAiYXBwbGljYXRpb24vcGRmIiwKKyAg
ICAgICAgbmlsXTsKK30KKworKyAoQ0dDb2xvclJlZilzaGFkb3dDb2xvcgoreworICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoUmV0YWluUHRyPENHQ29sb3JSZWY+LCBzaGFkb3dDb2xvciwgKEFkb3B0
Q0YsIGNyZWF0ZUNHQ29sb3JXaXRoRGV2aWNlV2hpdGUoMC4wLCAyLjAgLyAzLjApKSk7CisgICAg
cmV0dXJuIHNoYWRvd0NvbG9yLmdldCgpOworfQorCisrIChDR0NvbG9yUmVmKWJhY2tncm91bmRD
b2xvcgoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoUmV0YWluUHRyPENHQ29sb3JSZWY+LCBi
YWNrZ3JvdW5kQ29sb3IsIChBZG9wdENGLCBjcmVhdGVDR0NvbG9yV2l0aERldmljZVdoaXRlKDIw
NC4wIC8gMjU1LjAsIDEuMCkpKTsKKyAgICByZXR1cm4gYmFja2dyb3VuZENvbG9yLmdldCgpOwor
fQorCisvLyBUaGlzIGlzIGEgc2VjcmV0IHByb3RvY29sIGZvciBXZWJEYXRhU291cmNlIGFuZCBX
ZWJGcmFtZVZpZXcgdG8gb2ZmZXIgdXMgdGhlIG9wcG9ydHVuaXR5IHRvIGRvIHNvbWV0aGluZyBk
aWZmZXJlbnQgCisvLyBkZXBlbmRpbmcgdXBvbiB3aGljaCBmcmFtZSBpcyB0cnlpbmcgdG8gaW5z
dGFudGlhdGUgYSByZXByZXNlbnRhdGlvbiBmb3IgUERGLgorKyAoQ2xhc3MpX3JlcHJlc2VudGF0
aW9uQ2xhc3NGb3JXZWJGcmFtZTooV2ViRnJhbWUgKil3ZWJGcmFtZQoreworICAgIC8vIElmIHRo
aXMgaXMgbm90IHRoZSBtYWluIGZyYW1lLCB1c2UgdGhlIG9sZCBXQUsgUERGIHZpZXcuCisgICAg
aWYgKFtbd2ViRnJhbWUgd2ViVmlld10gbWFpbkZyYW1lXSAhPSB3ZWJGcmFtZSkKKyAgICAgICAg
cmV0dXJuIFtXZWJQREZWaWV3IGNsYXNzXTsKKyAgICAKKyAgICByZXR1cm4gW1dlYlBERlZpZXdQ
bGFjZWhvbGRlciBjbGFzc107Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIGlmIChfUERG
RG9jdW1lbnQgIT0gTlVMTCkKKyAgICAgICAgQ0dQREZEb2N1bWVudFJlbGVhc2UoX1BERkRvY3Vt
ZW50KTsKKyAgICBmcmVlKF9wYWdlUmVjdHMpOworICAgIFtfdGl0bGUgcmVsZWFzZV07CisgICAg
W3N1cGVyIGRlYWxsb2NdOworfQorCistICh2b2lkKWRyYXdQYWdlOihDR1BERlBhZ2VSZWYpYVBh
Z2UKK3sKKyAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IFdLR2V0Q3VycmVudEdyYXBoaWNzQ29u
dGV4dCgpOworICAgIHNpemVfdCBwYWdlTnVtYmVyID0gQ0dQREZQYWdlR2V0UGFnZU51bWJlcihh
UGFnZSk7CisgICAgQ0dSZWN0IHBhZ2VSZWN0ID0gX3BhZ2VSZWN0c1twYWdlTnVtYmVyLTFdOwor
ICAgIAorICAgIC8vIERyYXcgcGFnZS4KKyAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHQp
OworICAgIENHRmxvYXQgaGVpZ2h0ID0gV2ViS2l0TGlua2VkT25PckFmdGVyKFdFQktJVF9GSVJT
VF9WRVJTSU9OX1dJVEhfRkxJUFBFRF9TSEFET1dTKSA/IDIuMGYgOiAtMi4wZjsKKyAgICBDR0Nv
bnRleHRTZXRTaGFkb3dXaXRoQ29sb3IoY29udGV4dCwgQ0dTaXplTWFrZSgwLjBmLCBoZWlnaHQp
LCAzLjBmLCBbW3NlbGYgY2xhc3NdIHNoYWRvd0NvbG9yXSk7CisgICAgc2V0U3Ryb2tlQW5kRmls
bENvbG9yKGNvbnRleHQsIGNhY2hlZENHQ29sb3IoQ29sb3I6OndoaXRlLCBDb2xvclNwYWNlRGV2
aWNlUkdCKSk7CisgICAgQ0dDb250ZXh0RmlsbFJlY3QoY29udGV4dCwgcGFnZVJlY3QpOworICAg
IENHQ29udGV4dFJlc3RvcmVHU3RhdGUoY29udGV4dCk7ICAgIAorICAgIAorICAgIENHQ29udGV4
dFNhdmVHU3RhdGUoY29udGV4dCk7CisKKyAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY29udGV4
dCwgQ0dSZWN0R2V0TWluWChwYWdlUmVjdCksIENHUmVjdEdldE1pblkocGFnZVJlY3QpKTsKKyAg
ICBDR0NvbnRleHRTY2FsZUNUTShjb250ZXh0LCAxLjAsIC0xLjApOworICAgIENHQ29udGV4dFRy
YW5zbGF0ZUNUTShjb250ZXh0LCAwLCAtQ0dSZWN0R2V0SGVpZ2h0KHBhZ2VSZWN0KSk7CisKKyAg
ICBDR0NvbnRleHRDb25jYXRDVE0oY29udGV4dCwgQ0dQREZQYWdlR2V0RHJhd2luZ1RyYW5zZm9y
bShhUGFnZSwga0NHUERGQ3JvcEJveCwgQ0dSZWN0TWFrZSgwLjAsIDAuMCwgQ0dSZWN0R2V0V2lk
dGgocGFnZVJlY3QpLCBDR1JlY3RHZXRIZWlnaHQocGFnZVJlY3QpKSwgMCwgdHJ1ZSkpOworICAg
IAorICAgIENHUmVjdCBjcm9wQm94ID0gQ0dQREZQYWdlR2V0Qm94UmVjdChhUGFnZSwga0NHUERG
Q3JvcEJveCk7CisgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LCBjcm9wQm94KTsKKyAg
ICAKKyAgICBDR0NvbnRleHREcmF3UERGUGFnZShjb250ZXh0LCBhUGFnZSk7CisgICAgQ0dDb250
ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsgICAgCit9CisKKy0gKE5TQXJyYXkgKilfcGFnZXNJ
blJlY3Q6KENHUmVjdClyZWN0Cit7CisgICAgTlNNdXRhYmxlQXJyYXkgKnBhZ2VzID0gW05TTXV0
YWJsZUFycmF5IGFycmF5XTsKKyAgICBzaXplX3QgcGFnZUNvdW50ID0gQ0dQREZEb2N1bWVudEdl
dE51bWJlck9mUGFnZXMoX1BERkRvY3VtZW50KTsKKyAgICBDR1JlY3QgKmZpcnN0Rm91bmRSZWN0
ID0gKENHUmVjdCAqKWJzZWFyY2goJnJlY3QsIF9wYWdlUmVjdHMsIHBhZ2VDb3VudCwgc2l6ZW9m
KENHUmVjdCksIGNvbXBhcmVQYWdlUmVjdHMpOworICAgIGlmIChmaXJzdEZvdW5kUmVjdCAhPSBO
VUxMKSB7CisgICAgICAgIHNpemVfdCBmaXJzdEZvdW5kSW5kZXggPSBmaXJzdEZvdW5kUmVjdCAt
IF9wYWdlUmVjdHM7CisgICAgICAgIGlkIHBhZ2UgPSAoaWQpQ0dQREZEb2N1bWVudEdldFBhZ2Uo
X1BERkRvY3VtZW50LCBmaXJzdEZvdW5kSW5kZXgrMSk7CisgICAgICAgIEFTU0VSVChwYWdlKTsK
KyAgICAgICAgaWYgKCFwYWdlKQorICAgICAgICAgICAgcmV0dXJuIHBhZ2VzOworICAgICAgICBb
cGFnZXMgYWRkT2JqZWN0OnBhZ2VdOworICAgICAgICBzaXplX3QgaTsKKyAgICAgICAgZm9yIChp
ID0gZmlyc3RGb3VuZEluZGV4IC0gMTsgaSA8IHBhZ2VDb3VudDsgaS0tKSB7CisgICAgICAgICAg
ICBpZiAoQ0dSZWN0SW50ZXJzZWN0c1JlY3QoQ0dSZWN0SW5zZXQoX3BhZ2VSZWN0c1tpXSwgMC4w
LCAtIFBBR0VfSEVJR0hUX0lOU0VUICogMiksIHJlY3QpKSB7CisgICAgICAgICAgICAgICAgaWQg
cGFnZSA9IChpZClDR1BERkRvY3VtZW50R2V0UGFnZShfUERGRG9jdW1lbnQsIGkgKyAxKTsKKyAg
ICAgICAgICAgICAgICBBU1NFUlQocGFnZSk7CisgICAgICAgICAgICAgICAgaWYgKHBhZ2UpCisg
ICAgICAgICAgICAgICAgICAgIFtwYWdlcyBhZGRPYmplY3Q6cGFnZV07CisgICAgICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGkg
PSBmaXJzdEZvdW5kSW5kZXggKyAxOyBpIDwgcGFnZUNvdW50OyBpKyspIHsKKyAgICAgICAgICAg
IGlmIChDR1JlY3RJbnRlcnNlY3RzUmVjdChDR1JlY3RJbnNldChfcGFnZVJlY3RzW2ldLCAwLjAs
IC0gUEFHRV9IRUlHSFRfSU5TRVQgKiAyKSwgcmVjdCkpIHsKKyAgICAgICAgICAgICAgICBpZCBw
YWdlID0gKGlkKUNHUERGRG9jdW1lbnRHZXRQYWdlKF9QREZEb2N1bWVudCwgaSArIDEpOworICAg
ICAgICAgICAgICAgIEFTU0VSVChwYWdlKTsKKyAgICAgICAgICAgICAgICBpZiAocGFnZSkKKyAg
ICAgICAgICAgICAgICAgICAgW3BhZ2VzIGFkZE9iamVjdDpwYWdlXTsKKyAgICAgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9ICAgICAgICAKKyAgICB9Cisg
ICAgcmV0dXJuIHBhZ2VzOworfQorCistICh2b2lkKWRyYXdSZWN0OihDR1JlY3QpYVJlY3QKK3sK
KyAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IFdLR2V0Q3VycmVudEdyYXBoaWNzQ29udGV4dCgp
OworCisgICAgLy8gRHJhdyBCYWNrZ3JvdW5kLgorICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29u
dGV4dCk7CisgICAgc2V0U3Ryb2tlQW5kRmlsbENvbG9yKGNvbnRleHQsIFtbc2VsZiBjbGFzc10g
YmFja2dyb3VuZENvbG9yXSk7CisgICAgQ0dDb250ZXh0RmlsbFJlY3QoY29udGV4dCwgYVJlY3Qp
OworICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUoY29udGV4dCk7CisKKyAgICBpZiAoIV9QREZE
b2N1bWVudCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIENHUERGUGFnZVJlZiBwYWdlID0g
TlVMTDsKKyAgICBOU0VudW1lcmF0b3IgKiBlbnVtZXJhdG9yID0gW1tzZWxmIF9wYWdlc0luUmVj
dDphUmVjdF0gb2JqZWN0RW51bWVyYXRvcl07CisKKyAgICB3aGlsZSAoKHBhZ2UgPSAoQ0dQREZQ
YWdlUmVmKVtlbnVtZXJhdG9yIG5leHRPYmplY3RdKSkKKyAgICAgICAgW3NlbGYgZHJhd1BhZ2U6
cGFnZV07Cit9CisKKy0gKHZvaWQpc2V0RGF0YVNvdXJjZTooV2ViRGF0YVNvdXJjZSAqKWRhdGFT
b3VyY2UKK3sKKyAgICAvLyBTaW5jZSB0aGlzIGNsYXNzIGlzIGEgV2ViRG9jdW1lbnRWaWV3IGFu
ZCBXZWJEb2N1bWVudFJlcHJlc2VudGF0aW9uLCBzZXREYXRhU291cmNlOiB3aWxsIGJlIGNhbGxl
ZCB0d2ljZS4gRG8gd29yayBvbmx5IG9uY2UuCisgICAgaWYgKGRhdGFTb3VyY2VIYXNCZWVuU2V0
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIV90aXRsZSkKKyAgICAgICAgX3RpdGxlID0g
W1tbW2RhdGFTb3VyY2UgcmVxdWVzdF0gVVJMXSBsYXN0UGF0aENvbXBvbmVudF0gY29weV07CisK
KyAgICBXQUtWaWV3ICogc3VwZXJ2aWV3ID0gW3NlbGYgc3VwZXJ2aWV3XTsKKyAgICAKKyAgICAv
LyBBcyBub3RlZCBhYm92ZSwgLXNldERhdGFTb3VyY2U6IHdpbGwgYmUgY2FsbGVkIHR3aWNlIC0t
IG9uY2UgZm9yIHRoZSBXZWJEb2N1bWVudFJlcHJlc2VudGF0aW9uLCBvbmNlIGZvciB0aGUgV2Vi
RG9jdW1lbnRWaWV3LgorICAgIGlmICghc3VwZXJ2aWV3KQorICAgICAgICByZXR1cm47CisKKyAg
ICBbc2VsZiBzZXRCb3VuZHNTaXplOltzZWxmIGNvbnZlcnRSZWN0OltzdXBlcnZpZXcgYm91bmRz
XSBmcm9tVmlldzpzdXBlcnZpZXddLnNpemVdOworICAgIAorICAgIGRhdGFTb3VyY2VIYXNCZWVu
U2V0ID0gWUVTOworfQorCistICh2b2lkKWRhdGFTb3VyY2VVcGRhdGVkOihXZWJEYXRhU291cmNl
ICopZGF0YVNvdXJjZQoreworCit9CisKKy0gKHZvaWQpc2V0TmVlZHNMYXlvdXQ6KEJPT0wpZmxh
ZworeworCit9CisKKy0gKHZvaWQpbGF5b3V0Cit7CisgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzc3
OTA5NTc+IFByb2JsZW0gd2l0aCBVSVNwbGl0Vmlld0NvbnRyb2xsZXIgb24gaVBhZCB3aGVuIGRp
c3BsYXlpbmcgUERGCisgICAgLy8gU2luY2Ugd2UgZG9uJ3QgaGF2ZSBhbnl0aGluZyB0byBsYXlv
dXQsIGp1c3QgcmVwYWludCB0aGUgdmlzaWJsZSB0aWxlcy4KKyAgICBbc2VsZiBzZXROZWVkc0Rp
c3BsYXk6WUVTXTsKK30KKworLSAodm9pZCl2aWV3V2lsbE1vdmVUb0hvc3RXaW5kb3c6KE5TV2lu
ZG93ICopaG9zdFdpbmRvdworeworCit9CisKKy0gKHZvaWQpdmlld0RpZE1vdmVUb0hvc3RXaW5k
b3cKK3sKKworfQorCistICh2b2lkKXJlY2VpdmVkRGF0YTooTlNEYXRhICopZGF0YSB3aXRoRGF0
YVNvdXJjZTooV2ViRGF0YVNvdXJjZSAqKWRhdGFTb3VyY2UKK3sKK30KKworLSAodm9pZClyZWNl
aXZlZEVycm9yOihOU0Vycm9yICopZXJyb3Igd2l0aERhdGFTb3VyY2U6KFdlYkRhdGFTb3VyY2Ug
KilkYXRhU291cmNlCit7Cit9CisKKy0gKHZvaWQpX2NvbXB1dGVQYWdlUmVjdHMKK3sKKyAgICBz
aXplX3QgcGFnZUNvdW50ID0gQ0dQREZEb2N1bWVudEdldE51bWJlck9mUGFnZXMoX1BERkRvY3Vt
ZW50KTsKKyAgICBfcGFnZVJlY3RzID0gKENHUmVjdCAqKW1hbGxvYyhzaXplb2YoQ0dSZWN0KSAq
IHBhZ2VDb3VudCk7ICAgIAorICAgIAorICAgIENHU2l6ZSBzaXplID0gQ0dTaXplTWFrZSgwLjAs
IFBBR0VfSEVJR0hUX0lOU0VUKTsKKyAgICBzaXplX3QgaTsKKyAgICBmb3IgKGkgPSAxOyBpIDw9
IHBhZ2VDb3VudDsgaSsrKSB7CisgICAgICAgIAorICAgICAgICBDR1BERlBhZ2VSZWYgcGFnZSA9
IENHUERGRG9jdW1lbnRHZXRQYWdlKF9QREZEb2N1bWVudCwgaSk7CisgICAgICAgIENHUmVjdCBi
b3hSZWN0ID0gQ0dQREZQYWdlR2V0Qm94UmVjdChwYWdlLCBrQ0dQREZDcm9wQm94KTsKKyAgICAg
ICAgQ0dGbG9hdCByb3RhdGlvbiA9IENHUERGUGFnZUdldFJvdGF0aW9uQW5nbGUocGFnZSkgKiAo
TV9QSSAvIDE4MCk7CisgICAgICAgIGlmIChyb3RhdGlvbiAhPSAwKSB7CisgICAgICAgICAgICBi
b3hSZWN0ID0gQ0dSZWN0QXBwbHlBZmZpbmVUcmFuc2Zvcm0oYm94UmVjdCwgQ0dBZmZpbmVUcmFu
c2Zvcm1NYWtlUm90YXRpb24ocm90YXRpb24pKTsKKyAgICAgICAgICAgIGJveFJlY3Quc2l6ZS53
aWR0aCA9IHJvdW5kZihib3hSZWN0LnNpemUud2lkdGgpOworICAgICAgICAgICAgYm94UmVjdC5z
aXplLmhlaWdodCA9IHJvdW5kZihib3hSZWN0LnNpemUuaGVpZ2h0KTsKKyAgICAgICAgfQorCisg
ICAgICAgIF9wYWdlUmVjdHNbaS0xXSA9IGJveFJlY3Q7CisgICAgICAgIF9wYWdlUmVjdHNbaS0x
XS5vcmlnaW4ueSA9IHNpemUuaGVpZ2h0OworCisgICAgICAgIHNpemUuaGVpZ2h0ICs9IGJveFJl
Y3Quc2l6ZS5oZWlnaHQgKyBQQUdFX0hFSUdIVF9JTlNFVDsKKyAgICAgICAgc2l6ZS53aWR0aCA9
IG1heChzaXplLndpZHRoLCBib3hSZWN0LnNpemUud2lkdGgpOworICAgIH0KKyAgICAKKyAgICBz
aXplLndpZHRoICs9IFBBR0VfV0lEVEhfSU5TRVQgKiAyLjA7CisgICAgW3NlbGYgc2V0Qm91bmRz
U2l6ZTpzaXplXTsKKyAgICAKKyAgICBmb3IgKGkgPSAwOyBpIDwgcGFnZUNvdW50OyBpKyspCisg
ICAgICAgIF9wYWdlUmVjdHNbaV0ub3JpZ2luLnggPSByb3VuZGYoKHNpemUud2lkdGggLSBfcGFn
ZVJlY3RzW2ldLnNpemUud2lkdGgpIC8gMik7Cit9CisKKy0gKHZvaWQpX2NoZWNrUERGVGl0bGUK
K3sKKyAgICBpZiAoIV9QREZEb2N1bWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgTlNTdHJp
bmcgKnRpdGxlID0gbmlsOworCisgICAgQ0dQREZEaWN0aW9uYXJ5UmVmIGluZm8gPSBDR1BERkRv
Y3VtZW50R2V0SW5mbyhfUERGRG9jdW1lbnQpOworICAgIENHUERGU3RyaW5nUmVmIHZhbHVlOwor
ICAgIGlmIChDR1BERkRpY3Rpb25hcnlHZXRTdHJpbmcoaW5mbywgIlRpdGxlIiwgJnZhbHVlKSkK
KyAgICAgICAgdGl0bGUgPSBbKE5TU3RyaW5nICopQ0dQREZTdHJpbmdDb3B5VGV4dFN0cmluZyh2
YWx1ZSkgYXV0b3JlbGVhc2VdOworCisgICAgaWYgKFt0aXRsZSBsZW5ndGhdKSB7CisgICAgICAg
IFtfdGl0bGUgcmVsZWFzZV07CisgICAgICAgIF90aXRsZSA9IFt0aXRsZSBjb3B5XTsKKyAgICAg
ICAgY29yZShbc2VsZiBfZnJhbWVdKS0+bG9hZGVyKCktPmNsaWVudCgpLT5kaXNwYXRjaERpZFJl
Y2VpdmVUaXRsZShTdHJpbmdXaXRoRGlyZWN0aW9uKHRpdGxlLCBMVFIpKTsKKyAgICB9Cit9CisK
Ky0gKHZvaWQpZmluaXNoZWRMb2FkaW5nV2l0aERhdGFTb3VyY2U6KFdlYkRhdGFTb3VyY2UgKilk
YXRhU291cmNlCit7CisgICAgQ0dEYXRhUHJvdmlkZXJSZWYgcHJvdmlkZXIgPSBDR0RhdGFQcm92
aWRlckNyZWF0ZVdpdGhDRkRhdGEoKENGRGF0YVJlZilbZGF0YVNvdXJjZSBkYXRhXSk7CisKKyAg
ICBpZiAoIXByb3ZpZGVyKSAKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIF9QREZEb2N1bWVu
dCA9IENHUERGRG9jdW1lbnRDcmVhdGVXaXRoUHJvdmlkZXIocHJvdmlkZXIpOworICAgIENHRGF0
YVByb3ZpZGVyUmVsZWFzZShwcm92aWRlcik7CisgICAgICAgIAorICAgIGlmICghX1BERkRvY3Vt
ZW50KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgW3NlbGYgX2NoZWNrUERGVGl0bGVdOwor
ICAgIFtzZWxmIF9jb21wdXRlUGFnZVJlY3RzXTsKKworICAgIE5TQXJyYXkgKnNjcmlwdHMgPSBh
bGxTY3JpcHRzSW5QREZEb2N1bWVudChfUERGRG9jdW1lbnQpOworCisgICAgTlNVSW50ZWdlciBz
Y3JpcHRDb3VudCA9IFtzY3JpcHRzIGNvdW50XTsKKyAgICBpZiAoIXNjcmlwdENvdW50KQorICAg
ICAgICByZXR1cm47CisKKyAgICBKU0dsb2JhbENvbnRleHRSZWYgY3R4ID0gSlNHbG9iYWxDb250
ZXh0Q3JlYXRlKDApOworICAgIEpTT2JqZWN0UmVmIGpzUERGRG9jID0gbWFrZUpTUERGRG9jKGN0
eCwgZGF0YVNvdXJjZSk7CisKKyAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBzY3JpcHRD
b3VudDsgKytpKSB7CisgICAgICAgIEpTU3RyaW5nUmVmIHNjcmlwdCA9IEpTU3RyaW5nQ3JlYXRl
V2l0aENGU3RyaW5nKChDRlN0cmluZ1JlZilbc2NyaXB0cyBvYmplY3RBdEluZGV4OmldKTsKKyAg
ICAgICAgSlNFdmFsdWF0ZVNjcmlwdChjdHgsIHNjcmlwdCwganNQREZEb2MsIDAsIDAsIDApOwor
ICAgICAgICBKU1N0cmluZ1JlbGVhc2Uoc2NyaXB0KTsKKyAgICB9CisKKyAgICBKU0dsb2JhbENv
bnRleHRSZWxlYXNlKGN0eCk7CisKKyAgICBbc2VsZiBzZXROZWVkc0Rpc3BsYXk6WUVTXTsKK30K
KworLSAoQk9PTCljYW5Qcm92aWRlRG9jdW1lbnRTb3VyY2UKK3sKKyAgICByZXR1cm4gTk87Cit9
CisKKy0gKE5TU3RyaW5nICopZG9jdW1lbnRTb3VyY2UKK3sKKyAgICByZXR1cm4gbmlsOworfQor
CistIChOU1N0cmluZyAqKXRpdGxlCit7CisgICAgcmV0dXJuIF90aXRsZTsKK30KKworLSAodW5z
aWduZWQpcGFnZU51bWJlckZvclJlY3Q6KENHUmVjdClyZWN0Cit7CisgICAgc2l6ZV90IGJlc3RQ
YWdlTnVtYmVyID0gMDsKKyAgICBpZiAoX1BERkRvY3VtZW50ICE9IE5VTEwgJiYgX3BhZ2VSZWN0
cyAhPSBOVUxMKSB7CisgICAgICAgIE5TQXJyYXkgKnBhZ2VzID0gW3NlbGYgX3BhZ2VzSW5SZWN0
OnJlY3RdOworICAgICAgICBmbG9hdCBiZXN0UGFnZUFyZWEgPSAwOworICAgICAgICBzaXplX3Qg
Y291bnQgPSBbcGFnZXMgY291bnRdOworICAgICAgICBzaXplX3QgaTsKKyAgICAgICAgZm9yIChp
ID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgICAgIHNpemVfdCBwYWdlTnVtYmVyID0g
Q0dQREZQYWdlR2V0UGFnZU51bWJlcigoQ0dQREZQYWdlUmVmKVtwYWdlcyBvYmplY3RBdEluZGV4
OmldKTsKKyAgICAgICAgICAgIENHUmVjdCBpbnRlcnNlY3Rpb25SZWN0ID0gQ0dSZWN0SW50ZXJz
ZWN0aW9uKF9wYWdlUmVjdHNbcGFnZU51bWJlciAtIDFdLCByZWN0KTsKKyAgICAgICAgICAgIGZs
b2F0IGludGVyc2VjdGlvbkFyZWEgPSBpbnRlcnNlY3Rpb25SZWN0LnNpemUud2lkdGggKiBpbnRl
cnNlY3Rpb25SZWN0LnNpemUuaGVpZ2h0OworICAgICAgICAgICAgaWYgKGludGVyc2VjdGlvbkFy
ZWEgPiBiZXN0UGFnZUFyZWEpIHsKKyAgICAgICAgICAgICAgICBiZXN0UGFnZUFyZWEgPSBpbnRl
cnNlY3Rpb25BcmVhOworICAgICAgICAgICAgICAgIGJlc3RQYWdlTnVtYmVyID0gcGFnZU51bWJl
cjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gYmVzdFBhZ2VO
dW1iZXI7Cit9CisKKy0gKHVuc2lnbmVkKXRvdGFsUGFnZXMKK3sKKyAgICBpZiAoX1BERkRvY3Vt
ZW50ICE9IE5VTEwpCisgICAgICAgIHJldHVybiBDR1BERkRvY3VtZW50R2V0TnVtYmVyT2ZQYWdl
cyhfUERGRG9jdW1lbnQpOworICAgIHJldHVybiAwOworfQorCistIChDR1BERkRvY3VtZW50UmVm
KWRvYworeworICAgIHJldHVybiBfUERGRG9jdW1lbnQ7Cit9CisKKy0gKENHUmVjdClyZWN0Rm9y
UGFnZU51bWJlcjoodW5zaWduZWQpcGFnZU51bQoreworICAgIHJldHVybiAoX3BhZ2VSZWN0cyAh
PSBOVUxMICYmIHBhZ2VOdW0gPiAwID8gX3BhZ2VSZWN0c1twYWdlTnVtIC0gMV0gOiBDR1JlY3RO
dWxsKTsKK30KKworQGVuZAorCitzdGF0aWMgaW50IGNvbXBhcmVQYWdlUmVjdHMoY29uc3Qgdm9p
ZCAqa2V5LCBjb25zdCB2b2lkICphcnJheSkKK3sKKyAgICBjb25zdCBDR1JlY3QgKmtleVJlY3Qg
PSAoY29uc3QgQ0dSZWN0ICopa2V5OworICAgIGNvbnN0IENHUmVjdCAqYXJyYXlSZWN0ID0gKGNv
bnN0IENHUmVjdCAqKWFycmF5OworICAgIGlmIChDR1JlY3RJbnRlcnNlY3RzUmVjdCgqYXJyYXlS
ZWN0LCAqa2V5UmVjdCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBDR1JlY3RHZXRN
aW5ZKCprZXlSZWN0KSA+IENHUmVjdEdldE1heFkoKmFycmF5UmVjdCkgPyAxIDogLTE7Cit9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2lvcy9XZWJWaWV3L1dlYlBERlZpZXdJUGhvbmUuaCBi
L1NvdXJjZS9XZWJLaXQvaW9zL1dlYlZpZXcvV2ViUERGVmlld0lQaG9uZS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmYwYjM3NjcwZmUxNzAyN2I2N2MzYzhkN2U3MmE4ZDFhY2EwYWM5ZWMKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L2lvcy9XZWJWaWV3L1dlYlBERlZpZXdJUGhvbmUuaApAQCAtMCww
ICsxLDI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCA8V2ViS2l0L1dlYlBERlZpZXdJT1MuaD4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvaW9zL1dlYlZpZXcvV2ViUERGVmlld1BsYWNlaG9s
ZGVyLmggYi9Tb3VyY2UvV2ViS2l0L2lvcy9XZWJWaWV3L1dlYlBERlZpZXdQbGFjZWhvbGRlci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjFlNzlkMjliNGI0MmQ2Y2UzMDY4OTdmMTk0OGQyMGRjZWJiYjJkZTMKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2lvcy9XZWJWaWV3L1dlYlBERlZpZXdQbGFj
ZWhvbGRlci5oCkBAIC0wLDAgKzEsMTY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAy
MDA3LCAyMDA4LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2ltcG9ydCA8V2ViS2l0L1dlYkRvY3VtZW50UHJpdmF0ZS5oPgorCisjaWYgUExB
VEZPUk0oSU9TKQorCitAY2xhc3MgVUlQREZEb2N1bWVudDsKK0Bwcm90b2NvbCBXZWJQREZWaWV3
UGxhY2Vob2xkZXJEZWxlZ2F0ZTsKKworLyohCisgICAgQGNsYXNzIFdlYlBERlZpZXdQbGFjZWhv
bGRlcgorICAgIEBkaXNjdXNzaW9uIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIHBsYWNlaG9sZGVy
IGZvciBQREZzLiBJdCBpcyBpbnRlbmRlZCB0byBhbGxvdyBtYWluIGZyYW1lIFBERnMKKyAgICBi
ZSBkcmF3biB0byB0aGUgVUkgYnkgc29tZSBvdGhlciBvYmplY3QgKGlkZWFsbHkgdGhlIGRlbGVn
YXRlIG9mIHRoaXMgY2xhc3MpIHdoaWxlIHN0aWxsIGludGVyZmFjaW5nCisgICAgd2l0aCBXQUsg
YW5kIFdlYktpdCBjb3JyZWN0bHkuCisqLworQGludGVyZmFjZSBXZWJQREZWaWV3UGxhY2Vob2xk
ZXIgOiBXQUtWaWV3IDxXZWJQREZEb2N1bWVudFZpZXcsIFdlYlBERkRvY3VtZW50UmVwcmVzZW50
YXRpb24+IHsKKyAgICBOU1N0cmluZyAqX3RpdGxlOworICAgIE5TQXJyYXkgKl9wYWdlUmVjdHM7
CisgICAgTlNBcnJheSAqX3BhZ2VZT3JpZ2luczsKKyAgICBDR1BERkRvY3VtZW50UmVmIF9kb2N1
bWVudDsKKyAgICBXZWJEYXRhU291cmNlICpfZGF0YVNvdXJjZTsgLy8gd2VhayB0byBwcmV2ZW50
IGN5Y2xlcy4KKworICAgIE5TT2JqZWN0PFdlYlBERlZpZXdQbGFjZWhvbGRlckRlbGVnYXRlPiAq
X2RlbGVnYXRlOworCisgICAgQk9PTCBfZGlkRmluaXNoTG9hZEFuZE1lbW9yeU1hcDsKKworICAg
IENHU2l6ZSBfY29udGFpbmVyU2l6ZTsKK30KKworLyohCisgICAgQG1ldGhvZCBzZXRBc1BERkRv
Y1JlcEFuZFZpZXcKKyAgICBAYWJzdHJhY3QgVGhpcyBtZXRob2RzIHNldHMgW1dlYlBERlZpZXdQ
bGFjZWhvbGRlciBjbGFzc10gYXMgdGhlIGRvY3VtZW50IGFuZCB2aWV3IHJlcHJlc2VudGF0aW9u
cworICAgIGZvciBQREYuCisqLworKyAodm9pZClzZXRBc1BERkRvY1JlcEFuZFZpZXc7CisKKwor
LyohCisgQHByb3BlcnR5IGRlbGVnYXRlCisgQGFic3RyYWN0IEEgZGVsZWdhdGUgb2JqZWN0IGNv
bmZvcm1pbmcgdG8gV2ViUERGVmlld1BsYWNlaG9sZGVyRGVsZWdhdGUgdGhhdCB3aWxsIGJlIGlu
Zm9ybWVkIGFib3V0IHZhcmlvdXMgc3RhdGUgY2hhbmdlcy4KKyAqLworQHByb3BlcnR5IChhc3Np
Z24pIE5TT2JqZWN0PFdlYlBERlZpZXdQbGFjZWhvbGRlckRlbGVnYXRlPiAqZGVsZWdhdGU7CisK
Ky8qIQorIEBwcm9wZXJ0eSBwYWdlUmVjdHMKKyBAYWJzdHJhY3QgQW4gYXJyYXkgb2YgQ0dSZWN0
cyAoYXMgTlNWYWx1ZXMpIHJlcHJlc2VudGluZyB0aGUgYm91bmRzIG9mIGVhY2ggcGFnZSBpbiBQ
REYgZG9jdW1lbnQgY29vcmRpbmF0ZSBzcGFjZS4KKyAqLworQHByb3BlcnR5IChyZWFkb25seSwg
cmV0YWluKSBOU0FycmF5ICpwYWdlUmVjdHM7CisKKy8qIQorIEBwcm9wZXJ0eSBwYWdlWU9yaWdp
bnMKKyBAYWJzdHJhY3QgQW4gYXJyYXkgb2YgQ0dGbG9hdHMgKGFzIE5TTnVtYmVycykgcmVwcmVz
ZW50aW5nIHRoZSBtaW5pbXVtIHkgZm9yIGV2ZXJ5IHBhZ2UgaW4gdGhlIGRvY3VtZW50LgorICov
CitAcHJvcGVydHkgKHJlYWRvbmx5LCByZXRhaW4pIE5TQXJyYXkgKnBhZ2VZT3JpZ2luczsKKwor
LyohCisgQHByb3BlcnR5IGRvY3VtZW50CisgQGFic3RyYWN0IFRoZSBDR1BERkRvY3VtZW50UmVm
IHRoYXQgdGhpcyBvYmplY3QgcmVwcmVzZW50cy4gVW50aWwgdGhlIGRvY3VtZW50IGhhcyBsb2Fk
ZWQsIHRoaXMgcHJvcGVydHkgd2lsbCBiZSBOVUxMLgorICovCitAcHJvcGVydHkgKHJlYWRvbmx5
KSBDR1BERkRvY3VtZW50UmVmIGRvY3VtZW50OworQHByb3BlcnR5IChyZWFkb25seSkgQ0dQREZE
b2N1bWVudFJlZiBkb2M7CisKKy8qIQorIEBwcm9wZXJ0eSB0b3RhbFBhZ2VzCisgQGFic3RyYWN0
IENvbnZlbmllbmNlIGFjY2VzcyBmb3IgdGhlIHRvdGFsIG51bWJlciBvZiBwYWdlcyBpbiB0aGUg
d3JhcHBlZCBkb2N1bWVudC4KKyAqLworQHByb3BlcnR5IChyZWFkb25seSkgTlNVSW50ZWdlciB0
b3RhbFBhZ2VzOworCisvKiEKKyBAcHJvcGVydHkgdGl0bGUKKyBAYWJzdHJhY3QgUERGcyBzdXBw
b3J0IGEgbWV0YSBkYXRhIGZpZWxkIGZvciB0aGUgZG9jdW1lbnQncyB0aXRsZS4gSWYgdGhpcyBm
aWVsZCBpcyBwcmVzZW50IGluIHRoZSBQREYsIHRpdGxlIHdpbGwgYmUgdGhhdCBzdHJpbmcuIAor
IElmIG5vdCwgdGl0bGUgd2lsbCBiZSB0aGUgZmlsZSBuYW1lLgorICovCitAcHJvcGVydHkgKHJl
YWRvbmx5LCByZXRhaW4pIE5TU3RyaW5nICp0aXRsZTsKKworLyohCisgQHByb3BlcnR5IGNvbnRh
aW5lclNpemUKKyBAYWJzdHJhY3Qgc2V0cyB0aGUgc2l6ZSBmb3IgdGhlIGNvbnRhaW5pbmcgdmll
dy4gVGhpcyBpcyB1c2VkIHRvIGRldGVybWluZSBob3cgYmlnIHRoZSBzaGFkb3dzIGJldHdlZW4g
cGFnZXMgc2hvdWxkIGJlLgorICovCitAcHJvcGVydHkgKGFzc2lnbikgQ0dTaXplIGNvbnRhaW5l
clNpemU7CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBkaWRDb21wbGV0
ZUxheW91dDsKKworLSAodm9pZCljbGVhckRvY3VtZW50OworCisvKiEKKyBAbWV0aG9kIGRpZFVu
bG9ja0RvY3VtZW50CisgQGFic3RyYWN0IEluZm9ybXMgdGhlIFBERiB2aWV3IHBsYWNlaG9sZGVy
IHRoYXQgdGhlIFBERiBkb2N1bWVudCBoYXMgYmVlbiB1bmxvY2tlZC4gVGhlIHJlc3VsdCBvZiB0
aGlzIGludm9sdmVzIGxheWluZyAKKyBvdXQgdGhlIHBhZ2VzLCByZXRhaW5pbmcgdGhlIGRvY3Vt
ZW50IHRpdGxlLCBhbmQgcmUtZXZhbHVhdGluZyB0aGUgZG9jdW1lbnQncyBqYXZhc2NyaXB0LiBU
aGlzIHNob3VsZCBiZSBjYWxsZWQgb24gdGhlIFdlYlRocmVhZC4KKyAqLworLSAodm9pZClkaWRV
bmxvY2tEb2N1bWVudDsKKworLyohCisgQG1ldGhvZCByZWN0Rm9yUGFnZU51bWJlcgorIEBhYnN0
cmFjdCBSZXR1cm5zIHRoZSBQREYgZG9jdW1lbnQgY29vcmRpbmF0ZSBzcGFjZSByZWN0IGdpdmVu
IGEgcGFnZSBudW1iZXIuIHBhZ2VOdW1iZXIgbXVzdCBiZSBpbiB0aGUgcmFuZ2UgWzEsdG90YWxQ
YWdlc10sIAorIHNpbmNlIHBhZ2UgbnVtYmVycyBhcmUgMS1iYXNlZC4KKyAqLworLSAoQ0dSZWN0
KXJlY3RGb3JQYWdlTnVtYmVyOihOU1VJbnRlZ2VyKXBhZ2VOdW1iZXI7CisKKy8qIQorIEBtZXRo
b2Qgc2ltdWxhdGVDbGlja09uTGlua1RvVVJMOgorIEBhYnN0cmFjdCBUaGlzIG1ldGhvZCBzaW11
bGF0ZXMgYSB1c2VyIGNsaWNraW5nIG9uIHRoZSBwYXNzZWQgaW4gVVJMLgorICovCistICh2b2lk
KXNpbXVsYXRlQ2xpY2tPbkxpbmtUb1VSTDooTlNVUkwgKilVUkw7CisKK0BlbmQKKworCisvKiEK
KyAgICBAcHJvdG9jb2wgV2ViUERGVmlld1BsYWNlaG9sZGVyRGVsZWdhdGUKKyAgICBAZGlzY3Vz
c2lvbiBUaGlzIHByb3RvY29sIGlzIHVzZWQgdG8gaW5mb3JtIHRoZSBvYmplY3QgdXNpbmcgdGhl
IHBsYWNlaG9sZGVyIHRoYXQgdGhlIGxheW91dCBmb3IgdGhlIAorICAgIGRvY3VtZW50IGhhcyBi
ZWVuIGNhbGN1bGF0ZWQuCisqLworQHByb3RvY29sIFdlYlBERlZpZXdQbGFjZWhvbGRlckRlbGVn
YXRlCisKK0BvcHRpb25hbAorCisvKiEKKyBAbWV0aG9kIHZpZXdXaWxsQ2xvc2UKKyBAYWJzdHJh
Y3QgVGhpcyBtZXRob2QgaXMgY2FsbGVkIHRvIGluZm9ybSB0aGUgZGVsZWdhdGUgdGhhdCB0aGUg
cGxhY2Vob2xkZXIgdmlldydzIGxpZmV0aW1lIGhhcyBlbmRlZC4gVGhpcyBtaWdodAorIGJlIGNh
bGxlZCBmcm9tIGVpdGhlciB0aGUgbWFpbiB0aHJlYWQgb3IgdGhlIFdlYlRocmVhZC4KKyAqLwor
LSAodm9pZCl2aWV3V2lsbENsb3NlOworCisvKiEKKyAgICBAbWV0aG9kIGRpZENvbXBsZXRlTGF5
b3V0CisgICAgQGFic3RyYWN0IFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB0byBpbmZvcm0gdGhlIGRl
bGVnYXRlIHRoYXQgdGhlIHBsYWNlaG9sZGVyIGhhcyBjb21wbGV0ZWQgbGF5b3V0CisgICAgYW5k
IGRldGVybWluZWQgdGhlIGRvY3VtZW50J3MgYm91bmRzLiBXaWxsIGFsd2F5cyBiZSBjYWxsZWQg
b24gdGhlIG1haW4gdGhyZWFkLgorKi8KKy0gKHZvaWQpZGlkQ29tcGxldGVMYXlvdXQ7CisKK0By
ZXF1aXJlZAorCisvKiEKKyBAbWV0aG9kIGNnUERGRG9jdW1lbnQKKyBAYWJzdHJhY3QgVGhlIFdl
YlBERlZpZXdQbGFjZWhvbGRlciBtYXkgaGF2ZSBhYmRpY2F0ZWQgcmVzcG9uc2liaWxpdHkgZm9y
IHRoZSB1bmRlcmx5aW5nIENHUERGRG9jdW1lbnQgdG8gdGhlIFdlYlBERlZpZXdQbGFjZWhvbGRl
ckRlbGVnYXRlLgorIFRoYXQgbWVhbnMgdGhhdCB0aGVyZSBtYXkgYmUgdGltZXMgd2hlbiB0aGUg
ZG9jdW1lbnQgaXMgbmVlZGVkLCBidXQgdGhlIFdlYlBERlZpZXdQbGFjZWhvbGRlciBubyBsb25n
ZXIgaGFzIGEgcmVmZXJlbmNlIHRvIGl0LiBJbiB3aGljaCBjYXNlCisgdGhlIFdlYlBERlZpZXdQ
bGFjZWhvbGRlckRlbGVnYXRlIHdpbGwgYmUgYXNrZWQgZm9yIHRoZSBkb2N1bWVudC4KKyAqLwor
LSAoQ0dQREZEb2N1bWVudFJlZiljZ1BERkRvY3VtZW50OworCitAZW5kCisKKyNlbmRpZiAvKiBQ
TEFURk9STShJT1MpICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2lvcy9XZWJWaWV3L1dl
YlBERlZpZXdQbGFjZWhvbGRlci5tbSBiL1NvdXJjZS9XZWJLaXQvaW9zL1dlYlZpZXcvV2ViUERG
Vmlld1BsYWNlaG9sZGVyLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA3NjczZmNlOTgwMGY3MjcwOWFiYmVhZmVh
NTk5ZDY5NDQ4NjU5YzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2lvcy9XZWJW
aWV3L1dlYlBERlZpZXdQbGFjZWhvbGRlci5tbQpAQCAtMCwwICsxLDQ5OSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBQTEFURk9STShJT1MpCisKKyNpbXBvcnQg
IldlYlBERlZpZXdQbGFjZWhvbGRlci5oIgorCisjaW1wb3J0ICJXZWJQREZWaWV3SU9TLmgiCisj
aW1wb3J0ICJXZWJGcmFtZUludGVybmFsLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU0Nv
bnRleHRSZWYuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmLmg+CisjaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZkNGLmg+CisjaW1wb3J0IDxXZWJDb3JlL0Ns
aXBib2FyZC5oPgorI2ltcG9ydCA8V2ViQ29yZS9FdmVudEhhbmRsZXIuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvRXZlbnROYW1lcy5oPgorI2ltcG9ydCA8V2ViQ29yZS9Gb3JtU3RhdGUuaD4KKyNpbXBv
cnQgPFdlYkNvcmUvRnJhbWUuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRnJhbWVMb2FkZXIuaD4KKyNp
bXBvcnQgPFdlYkNvcmUvRnJhbWVMb2FkUmVxdWVzdC5oPgorI2ltcG9ydCA8V2ViQ29yZS9IVE1M
Rm9ybUVsZW1lbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvTW91c2VFdmVudC5oPgorI2ltcG9ydCA8
V2ViS2l0L1dlYkRhdGFTb3VyY2VQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV2ViRnJhbWVQ
cml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV2ViSlNQREZEb2MuaD4KKyNpbXBvcnQgPFdlYktp
dC9XZWJOU1VSTEV4dHJhcy5oPgorI2ltcG9ydCA8V2ViS2l0L1dlYk5TVmlld0V4dHJhcy5oPgor
I2ltcG9ydCA8V2ViS2l0L1dlYlBERkRvY3VtZW50RXh0cmFzLmg+CisjaW1wb3J0IDxXZWJLaXQv
V2ViVmlld1ByaXZhdGUuaD4KKyNpbXBvcnQgPHd0Zi9WZWN0b3IuaD4KKwordXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CisKK0BpbnRlcmZhY2UgV2ViUERGVmlldyAoU2VjcmV0cykKKysgKENsYXNz
KV9yZXByZXNlbnRhdGlvbkNsYXNzRm9yV2ViRnJhbWU6KFdlYkZyYW1lICopd2ViRnJhbWU7CitA
ZW5kCisKKyNwcmFnbWEgbWFyayBDb25zdGFudHMKKworc3RhdGljIGNvbnN0IGZsb2F0IFBBR0Vf
V0lEVEhfSU5TRVQgPSA0LjBmICogMi4wZjsKK3N0YXRpYyBjb25zdCBmbG9hdCBQQUdFX0hFSUdI
VF9JTlNFVCA9IDQuMGYgKiAyLjBmOworCisjcHJhZ21hIG1hcmsgTlNWYWx1ZSBoZWxwZXJzCisK
K0BpbnRlcmZhY2UgTlNWYWx1ZSAoX3dlYl9FeHRlbnNpb25zKQorKyAoTlNWYWx1ZSAqKV93ZWJf
dmFsdWVXaXRoQ0dSZWN0OihDR1JlY3QpcmVjdDsKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIE5T
VmFsdWUgKF93ZWJfRXh0ZW5zaW9ucykKKworKyAoTlNWYWx1ZSAqKV93ZWJfdmFsdWVXaXRoQ0dS
ZWN0OihDR1JlY3QpcmVjdAoreworICAgIHJldHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhCeXRlczom
cmVjdCBvYmpDVHlwZTpAZW5jb2RlKENHUmVjdCldOworfQorCistIChDR1JlY3QpQ0dSZWN0VmFs
dWUKK3sKKyAgICBDR1JlY3QgcmVzdWx0OworICAgIFtzZWxmIGdldFZhbHVlOiZyZXN1bHRdOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0BlbmQKKworI3ByYWdtYSBtYXJrIC0KKworQGludGVy
ZmFjZSBXZWJQREZWaWV3UGxhY2Vob2xkZXIgKCkKKworLSAodm9pZClfZXZhbHVhdGVKU0ZvckRv
Y3VtZW50OihDR1BERkRvY3VtZW50UmVmKWRvY3VtZW50OworLSAodm9pZClfdXBkYXRlVGl0bGVG
b3JEb2N1bWVudElmQXZhaWxhYmxlOworLSAodm9pZClfdXBkYXRlVGl0bGVGb3JVUkw6KE5TVVJM
ICopVVJMOworLSAoQ0dTaXplKV9jb21wdXRlUGFnZVJlY3RzOihDR1BERkRvY3VtZW50UmVmKWRv
Y3VtZW50OworCitAcHJvcGVydHkgKHJldGFpbikgTlNBcnJheSAqcGFnZVJlY3RzOworQHByb3Bl
cnR5IChyZXRhaW4pIE5TQXJyYXkgKnBhZ2VZT3JpZ2luczsKK0Bwcm9wZXJ0eSAocmV0YWluKSBO
U1N0cmluZyAqdGl0bGU7CisKK0BlbmQKKworI3ByYWdtYSBtYXJrIFdlYlBERlZpZXdQbGFjZWhv
bGRlciBpbXBsZW1lbnRhdGlvbgorCitAaW1wbGVtZW50YXRpb24gV2ViUERGVmlld1BsYWNlaG9s
ZGVyCisKK0BzeW50aGVzaXplIGRlbGVnYXRlID0gX2RlbGVnYXRlOworQHN5bnRoZXNpemUgcGFn
ZVJlY3RzID0gX3BhZ2VSZWN0czsKK0BzeW50aGVzaXplIHBhZ2VZT3JpZ2lucyA9IF9wYWdlWU9y
aWdpbnM7CitAc3ludGhlc2l6ZSBkb2N1bWVudCA9IF9kb2N1bWVudDsKK0BzeW50aGVzaXplIHRp
dGxlID0gX3RpdGxlOworQHN5bnRoZXNpemUgY29udGFpbmVyU2l6ZSA9IF9jb250YWluZXJTaXpl
OworCistIChDR1BERkRvY3VtZW50UmVmKWRvY3VtZW50Cit7CisgICAgQHN5bmNocm9uaXplZChz
ZWxmKSB7CisgICAgICAgIGlmIChfZG9jdW1lbnQpCisgICAgICAgICAgICByZXR1cm4gX2RvY3Vt
ZW50OworICAgIH0KKworICAgIGlmIChbc2VsZi5kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6
QHNlbGVjdG9yKGNnUERGRG9jdW1lbnQpXSkKKyAgICAgICAgcmV0dXJuIFtzZWxmLmRlbGVnYXRl
IGNnUERGRG9jdW1lbnRdOworCisgICAgcmV0dXJuIG5pbDsKK30KKworLSAodm9pZClzZXREb2N1
bWVudDooQ0dQREZEb2N1bWVudFJlZilkb2N1bWVudAoreworICAgIEBzeW5jaHJvbml6ZWQoc2Vs
ZikgeworICAgICAgICBDR1BERkRvY3VtZW50UmV0YWluKGRvY3VtZW50KTsKKyAgICAgICAgQ0dQ
REZEb2N1bWVudFJlbGVhc2UoX2RvY3VtZW50KTsKKyAgICAgICAgX2RvY3VtZW50ID0gZG9jdW1l
bnQ7CisgICAgfQorfQorCistICh2b2lkKWNsZWFyRG9jdW1lbnQKK3sKKyAgICBbc2VsZiBzZXRE
b2N1bWVudDpuaWxdOworfQorCistIChDR1BERkRvY3VtZW50UmVmKWRvYworeworICAgIHJldHVy
biBbc2VsZiBkb2N1bWVudF07Cit9CisKKy0gKE5TVUludGVnZXIpdG90YWxQYWdlcworeworICAg
IHJldHVybiBDR1BERkRvY3VtZW50R2V0TnVtYmVyT2ZQYWdlcyhbc2VsZiBkb2N1bWVudF0pOwor
fQorCisrICh2b2lkKXNldEFzUERGRG9jUmVwQW5kVmlldworeworICAgIFtXZWJWaWV3IF9zZXRQ
REZSZXByZXNlbnRhdGlvbkNsYXNzOltXZWJQREZWaWV3UGxhY2Vob2xkZXIgY2xhc3NdXTsKKyAg
ICBbV2ViVmlldyBfc2V0UERGVmlld0NsYXNzOltXZWJQREZWaWV3UGxhY2Vob2xkZXIgY2xhc3Nd
XTsKK30KKworLy8gVGhpcyBpcyBhIHNlY3JldCBwcm90b2NvbCBmb3IgV2ViRGF0YVNvdXJjZSBh
bmQgV2ViRnJhbWVWaWV3IHRvIG9mZmVyIHVzIHRoZSBvcHBvcnR1bml0eSB0byBkbyBzb21ldGhp
bmcgZGlmZmVyZW50IAorLy8gZGVwZW5kaW5nIHVwb24gd2hpY2ggZnJhbWUgaXMgdHJ5aW5nIHRv
IGluc3RhbnRpYXRlIGEgcmVwcmVzZW50YXRpb24gZm9yIFBERi4KKysgKENsYXNzKV9yZXByZXNl
bnRhdGlvbkNsYXNzRm9yV2ViRnJhbWU6KFdlYkZyYW1lICopd2ViRnJhbWUKK3sKKyAgICByZXR1
cm4gW1dlYlBERlZpZXcgX3JlcHJlc2VudGF0aW9uQ2xhc3NGb3JXZWJGcmFtZTp3ZWJGcmFtZV07
Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIGlmIChbc2VsZi5kZWxlZ2F0ZSByZXNwb25k
c1RvU2VsZWN0b3I6QHNlbGVjdG9yKHZpZXdXaWxsQ2xvc2UpXSkKKyAgICAgICAgW3NlbGYuZGVs
ZWdhdGUgdmlld1dpbGxDbG9zZV07CisKKyAgICBbc2VsZiBzZXRUaXRsZTpuaWxdOworCisgICAg
W3NlbGYgc2V0UGFnZVJlY3RzOm5pbF07CisgICAgW3NlbGYgc2V0UGFnZVlPcmlnaW5zOm5pbF07
CisKKyAgICBbc2VsZiBzZXREb2N1bWVudDpuaWxdOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30K
KworI3ByYWdtYSBtYXJrIFdlYlBERkRvY3VtZW50VmlldyBhbmQgV2ViUERGRG9jdW1lbnRSZXBy
ZXNlbnRhdGlvbiBwcm90b2NvbHMKKworKyAoTlNBcnJheSAqKXN1cHBvcnRlZE1JTUVUeXBlcwor
eworICAgIHJldHVybiBbV2ViUERGVmlldyBzdXBwb3J0ZWRNSU1FVHlwZXNdOworfQorCisjcHJh
Z21hIG1hcmsgV2ViRG9jdW1lbnRWaWV3IGFuZCBXZWJEb2N1bWVudFJlcHJlc2VudGF0aW9uIHBy
b3RvY29scworCistICh2b2lkKXNldERhdGFTb3VyY2U6KFdlYkRhdGFTb3VyY2UgKilkYXRhU291
cmNlCit7CisgICAgW3NlbGYgZGF0YVNvdXJjZVVwZGF0ZWQ6ZGF0YVNvdXJjZV07CisKKyAgICBp
ZiAoW2RhdGFTb3VyY2UgcmVxdWVzdF0pCisgICAgICAgIFtzZWxmIF91cGRhdGVUaXRsZUZvclVS
TDpbW2RhdGFTb3VyY2UgcmVxdWVzdF0gVVJMXV07CisKKyAgICBXQUtWaWV3ICpzdXBlcnZpZXcg
PSBbc2VsZiBzdXBlcnZpZXddOworICAgIGlmIChzdXBlcnZpZXcpCisgICAgICAgIFtzZWxmIHNl
dEJvdW5kc1NpemU6W3NlbGYgY29udmVydFJlY3Q6W3N1cGVydmlldyBib3VuZHNdIGZyb21WaWV3
OnN1cGVydmlld10uc2l6ZV07Cit9CisKKyNwcmFnbWEgbWFyayBXZWJQREZWaWV3UGxhY2Vob2xk
ZXJEZWxlZ2F0ZSBzdHVmZgorCistICh2b2lkKV9ub3RpZnlEaWRDb21wbGV0ZUxheW91dAorewor
ICAgIGlmIChbTlNUaHJlYWQgaXNNYWluVGhyZWFkXSkgeworICAgICAgICBpZiAoW3NlbGYuZGVs
ZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihkaWRDb21wbGV0ZUxheW91dCldKQor
ICAgICAgICAgICAgW3NlbGYuZGVsZWdhdGUgZGlkQ29tcGxldGVMYXlvdXRdOworICAgIH0gZWxz
ZQorICAgICAgICBbc2VsZiBwZXJmb3JtU2VsZWN0b3JPbk1haW5UaHJlYWQ6QHNlbGVjdG9yKF9u
b3RpZnlEaWRDb21wbGV0ZUxheW91dCkgd2l0aE9iamVjdDpuaWwgd2FpdFVudGlsRG9uZTpOT107
Cit9CisKKyNwcmFnbWEgbWFyayBXZWJEb2N1bWVudFZpZXcgcHJvdG9jb2wKKworLSAodm9pZClk
YXRhU291cmNlVXBkYXRlZDooV2ViRGF0YVNvdXJjZSAqKWRhdGFTb3VyY2UKK3sKKyAgICBfZGF0
YVNvdXJjZSA9IGRhdGFTb3VyY2U7Cit9CisKKy0gKHZvaWQpbGF5b3V0Cit7CisgICAgaWYgKCFf
ZGlkRmluaXNoTG9hZEFuZE1lbW9yeU1hcCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHNl
bGYucGFnZVJlY3RzKQorICAgICAgICByZXR1cm47CisKKyAgICBDR1NpemUgYm91bmRpbmdTaXpl
ID0gW3NlbGYgX2NvbXB1dGVQYWdlUmVjdHM6X2RvY3VtZW50XTsKKworICAgIFtzZWxmIHNldEJv
dW5kc1NpemU6Ym91bmRpbmdTaXplXTsKKworICAgIF9kaWRDb21wbGV0ZUxheW91dCA9IFlFUzsK
KyAgICBbc2VsZiBfbm90aWZ5RGlkQ29tcGxldGVMYXlvdXRdOworfQorCistICh2b2lkKXZpZXdX
aWxsTW92ZVRvSG9zdFdpbmRvdzooTlNXaW5kb3cgKilob3N0V2luZG93Cit7Cit9CisKKy0gKHZv
aWQpdmlld0RpZE1vdmVUb0hvc3RXaW5kb3cKK3sKK30KKworI3ByYWdtYSBtYXJrIFdlYkRhdGFT
b3VyY2VQcml2YXRlRGVsZWdhdGUgcHJvdG9jb2wKKworI2lmIEVOQUJMRShESVNLX0lNQUdFX0NB
Q0hFKQorLSAodm9pZClkYXRhU291cmNlTWVtb3J5TWFwcGVkCit7CisgICAgX2RpZEZpbmlzaExv
YWRBbmRNZW1vcnlNYXAgPSBZRVM7CisKKyAgICBDR0RhdGFQcm92aWRlclJlZiBwcm92aWRlciA9
IENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aENGRGF0YSgoQ0ZEYXRhUmVmKVtfZGF0YVNvdXJjZSBk
YXRhXSk7CisgICAgaWYgKCFwcm92aWRlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgX2RvY3Vt
ZW50ID0gQ0dQREZEb2N1bWVudENyZWF0ZVdpdGhQcm92aWRlcihwcm92aWRlcik7CisKKyAgICAv
LyBEdW1wIHRoZSBkYXRhIHByb3ZpZGVyIGFzIHNvb24gYXMgcG9zc2libGUgc2luY2UgdGhlIENH
UERGRG9jdW1lbnQgd2lsbCBub3QgaG9sZCBvbnRvIGl0LgorICAgIENHRGF0YVByb3ZpZGVyUmVs
ZWFzZShwcm92aWRlcik7CisKKyAgICBbc2VsZiBfZG9Qb3N0TG9hZE9yVW5sb2NrVGFza3NdOwor
fQorCistICh2b2lkKWRhdGFTb3VyY2VNZW1vcnlNYXBGYWlsZWQKK3sKKyAgICAvLyBOb3RoaW5n
IHdlIGNhbiBkbyBhYm91dCB0aGlzLCBqdXN0IGRvIHdoYXQgd2Ugd291bGQgbm9ybWFsbHkgZG8g
aW4gbWVtb3J5LgorICAgIFtzZWxmIGRhdGFTb3VyY2VNZW1vcnlNYXBwZWRdOworfQorI2VuZGlm
CisKKyNwcmFnbWEgbWFyayBXZWJEb2N1bWVudFJlcHJlc2VudGF0aW9uIHByb3RvY29sCisKKy0g
KHZvaWQpcmVjZWl2ZWREYXRhOihOU0RhdGEgKilkYXRhIHdpdGhEYXRhU291cmNlOihXZWJEYXRh
U291cmNlICopZGF0YVNvdXJjZQoreworfQorCistICh2b2lkKXJlY2VpdmVkRXJyb3I6KE5TRXJy
b3IgKillcnJvciB3aXRoRGF0YVNvdXJjZTooV2ViRGF0YVNvdXJjZSAqKWRhdGFTb3VyY2UKK3sK
K30KKworLSAodm9pZClfZG9Qb3N0TG9hZE9yVW5sb2NrVGFza3MKK3sKKyAgICBpZiAoIV9kb2N1
bWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgW3NlbGYgX3VwZGF0ZVRpdGxlRm9yRG9jdW1l
bnRJZkF2YWlsYWJsZV07CisgICAgW3NlbGYgX2V2YWx1YXRlSlNGb3JEb2N1bWVudDpfZG9jdW1l
bnRdOworCisgICAgLy8gQW55IHJlbWFpbmluZyB3b3JrIG9uIHRoZSBkb2N1bWVudCBzaG91bGQg
YmUgZG9uZSBiZWZvcmUgdGhpcyBjYWxsIHRvIC1sYXlvdXQsCisgICAgLy8gd2hpY2ggd2lsbCBo
YW5kIG93bmVyc2hpcCBvZiB0aGUgZG9jdW1lbnQgdG8gdGhlIGRlbGVnYXRlIChVSVdlYlBERlZp
ZXcpIGFuZAorICAgIC8vIHJlbGVhc2UgdGhlIHBsYWNlaG9sZGVyJ3MgZG9jdW1lbnQuCisgICAg
W3NlbGYgbGF5b3V0XTsKK30KKworLSAodm9pZClmaW5pc2hlZExvYWRpbmdXaXRoRGF0YVNvdXJj
ZTooV2ViRGF0YVNvdXJjZSAqKWRhdGFTb3VyY2UKK3sKKyAgICBbc2VsZiBkYXRhU291cmNlVXBk
YXRlZDpkYXRhU291cmNlXTsKKworI2lmIEVOQUJMRShESVNLX0lNQUdFX0NBQ0hFKQorICAgIFtk
YXRhU291cmNlIHNldERhdGFTb3VyY2VEZWxlZ2F0ZTooTlNPYmplY3Q8V2ViRGF0YVNvdXJjZVBy
aXZhdGVEZWxlZ2F0ZT4gKilzZWxmXTsKKyAgICBbZGF0YVNvdXJjZSBfc2V0QWxsb3dUb0JlTWVt
b3J5TWFwcGVkXTsKKyNlbHNlCisgICAgW3NlbGYgZGF0YVNvdXJjZU1lbW9yeU1hcHBlZF07Cisj
ZW5kaWYKK30KKworLSAoQk9PTCljYW5Qcm92aWRlRG9jdW1lbnRTb3VyY2UKK3sKKyAgICByZXR1
cm4gTk87Cit9CisKKy0gKE5TU3RyaW5nICopZG9jdW1lbnRTb3VyY2UKK3sKKyAgICByZXR1cm4g
bmlsOworfQorCisjcHJhZ21hIG1hcmsgaW50ZXJuYWwgc3R1ZmYKKworLSAodm9pZClfZXZhbHVh
dGVKU0ZvckRvY3VtZW50OihDR1BERkRvY3VtZW50UmVmKXBkZkRvY3VtZW50Cit7CisgICAgaWYg
KCFwZGZEb2N1bWVudCB8fCAhQ0dQREZEb2N1bWVudElzVW5sb2NrZWQocGRmRG9jdW1lbnQpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBOU0FycmF5ICpzY3JpcHRzID0gYWxsU2NyaXB0c0luUERG
RG9jdW1lbnQocGRmRG9jdW1lbnQpOworCisgICAgTlNVSW50ZWdlciBzY3JpcHRDb3VudCA9IFtz
Y3JpcHRzIGNvdW50XTsKKyAgICBpZiAoc2NyaXB0Q291bnQpIHsKKworICAgICAgICBKU0dsb2Jh
bENvbnRleHRSZWYgY3R4ID0gSlNHbG9iYWxDb250ZXh0Q3JlYXRlKDApOworICAgICAgICBKU09i
amVjdFJlZiBqc1BERkRvYyA9IG1ha2VKU1BERkRvYyhjdHgsIF9kYXRhU291cmNlKTsKKworICAg
ICAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBzY3JpcHRDb3VudDsgKytpKSB7CisgICAg
ICAgICAgICBKU1N0cmluZ1JlZiBzY3JpcHQgPSBKU1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZygo
Q0ZTdHJpbmdSZWYpW3NjcmlwdHMgb2JqZWN0QXRJbmRleDppXSk7CisgICAgICAgICAgICBKU0V2
YWx1YXRlU2NyaXB0KGN0eCwgc2NyaXB0LCBqc1BERkRvYywgMCwgMCwgMCk7CisgICAgICAgICAg
ICBKU1N0cmluZ1JlbGVhc2Uoc2NyaXB0KTsKKyAgICAgICAgfQorCisgICAgICAgIEpTR2xvYmFs
Q29udGV4dFJlbGVhc2UoY3R4KTsKKyAgICB9Cit9CisKKy0gKHZvaWQpX3VwZGF0ZVRpdGxlRm9y
VVJMOihOU1VSTCAqKVVSTAoreworICAgIE5TU3RyaW5nICp0aXRsZUZyb21VUkwgPSBbVVJMIGxh
c3RQYXRoQ29tcG9uZW50XTsKKyAgICBpZiAoIVt0aXRsZUZyb21VUkwgbGVuZ3RoXSB8fCBbdGl0
bGVGcm9tVVJMIGlzRXF1YWxUb1N0cmluZzpAIi8iXSkKKyAgICAgICAgdGl0bGVGcm9tVVJMID0g
W1tVUkwgX3dlYl9ob3N0U3RyaW5nXSBfd2ViX2RlY29kZUhvc3ROYW1lXTsKKworICAgIFtzZWxm
IHNldFRpdGxlOnRpdGxlRnJvbVVSTF07CisgICAgW1tzZWxmIF9mcmFtZV0gX2Rpc3BhdGNoRGlk
UmVjZWl2ZVRpdGxlOnRpdGxlRnJvbVVSTF07Cit9CisKKy0gKHZvaWQpX3VwZGF0ZVRpdGxlRm9y
RG9jdW1lbnRJZkF2YWlsYWJsZQoreworICAgIGlmICghX2RvY3VtZW50IHx8ICFDR1BERkRvY3Vt
ZW50SXNVbmxvY2tlZChfZG9jdW1lbnQpKQorICAgICAgICByZXR1cm47CisKKyAgICBOU1N0cmlu
ZyAqdGl0bGUgPSBuaWw7CisKKyAgICBDR1BERkRpY3Rpb25hcnlSZWYgaW5mbyA9IENHUERGRG9j
dW1lbnRHZXRJbmZvKF9kb2N1bWVudCk7CisgICAgQ0dQREZTdHJpbmdSZWYgdmFsdWU7CisgICAg
aWYgKENHUERGRGljdGlvbmFyeUdldFN0cmluZyhpbmZvLCAiVGl0bGUiLCAmdmFsdWUpKQorICAg
ICAgICB0aXRsZSA9IChOU1N0cmluZyAqKUNHUERGU3RyaW5nQ29weVRleHRTdHJpbmcodmFsdWUp
OworCisgICAgaWYgKFt0aXRsZSBsZW5ndGhdKSB7CisgICAgICAgIFtzZWxmIHNldFRpdGxlOnRp
dGxlXTsKKyAgICAgICAgW1tzZWxmIF9mcmFtZV0gX2Rpc3BhdGNoRGlkUmVjZWl2ZVRpdGxlOnRp
dGxlXTsKKyAgICB9CisKKyAgICBbdGl0bGUgcmVsZWFzZV07Cit9CisKKy0gKENHUmVjdClfZ2V0
UERGUGFnZUJvdW5kczooQ0dQREZQYWdlUmVmKXBhZ2UKK3sgICAgCisgICAgaWYgKCFwYWdlKQor
ICAgICAgICByZXR1cm4gQ0dSZWN0WmVybzsKKworICAgIENHUmVjdCBib3VuZHMgPSBDR1BERlBh
Z2VHZXRCb3hSZWN0KHBhZ2UsIGtDR1BERkNyb3BCb3gpOworICAgIENHRmxvYXQgcm90YXRpb24g
PSBDR1BERlBhZ2VHZXRSb3RhdGlvbkFuZ2xlKHBhZ2UpICogKE1fUEkgLyAxODAuMGYpOworICAg
IGlmIChyb3RhdGlvbiAhPSAwKQorICAgICAgICBib3VuZHMgPSBDR1JlY3RBcHBseUFmZmluZVRy
YW5zZm9ybShib3VuZHMsIENHQWZmaW5lVHJhbnNmb3JtTWFrZVJvdGF0aW9uKHJvdGF0aW9uKSk7
CisKKyAgICBib3VuZHMub3JpZ2luLnggICAgID0gcm91bmRmKGJvdW5kcy5vcmlnaW4ueCk7Cisg
ICAgYm91bmRzLm9yaWdpbi55ICAgICA9IHJvdW5kZihib3VuZHMub3JpZ2luLnkpOworICAgIGJv
dW5kcy5zaXplLndpZHRoICAgPSByb3VuZGYoYm91bmRzLnNpemUud2lkdGgpOworICAgIGJvdW5k
cy5zaXplLmhlaWdodCAgPSByb3VuZGYoYm91bmRzLnNpemUuaGVpZ2h0KTsKKworICAgIHJldHVy
biBib3VuZHM7Cit9CisKKy0gKENHU2l6ZSlfY29tcHV0ZVBhZ2VSZWN0czooQ0dQREZEb2N1bWVu
dFJlZilwZGZEb2N1bWVudAoreworICAgIENHU2l6ZSBib3VuZGluZ1NpemUgPSBDR1NpemVaZXJv
OworCisgICAgLy8gRG8gd2UgZXZlbiBuZWVkIHRvIGNvbXB1dGUgdGhlIHBhZ2UgcmVjdHM/Cisg
ICAgaWYgKHNlbGYucGFnZVJlY3RzKQorICAgICAgICByZXR1cm4gW3NlbGYgYm91bmRzXS5zaXpl
OworCisgICAgaWYgKCFwZGZEb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIGJvdW5kaW5nU2l6ZTsK
KworICAgIGlmICghQ0dQREZEb2N1bWVudElzVW5sb2NrZWQocGRmRG9jdW1lbnQpKQorICAgICAg
ICByZXR1cm4gYm91bmRpbmdTaXplOworCisgICAgc2l6ZV90IHBhZ2VDb3VudCA9IENHUERGRG9j
dW1lbnRHZXROdW1iZXJPZlBhZ2VzKHBkZkRvY3VtZW50KTsKKyAgICBpZiAoIXBhZ2VDb3VudCkK
KyAgICAgICAgcmV0dXJuIGJvdW5kaW5nU2l6ZTsKKworICAgIE5TTXV0YWJsZUFycmF5ICpwYWdl
UmVjdHMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOworICAgIGlmICghcGFnZVJlY3RzKQorICAg
ICAgICByZXR1cm4gYm91bmRpbmdTaXplOworCisgICAgTlNNdXRhYmxlQXJyYXkgKnBhZ2VZT3Jp
Z2lucyA9IFtOU011dGFibGVBcnJheSBhcnJheV07CisgICAgaWYgKCFwYWdlWU9yaWdpbnMpCisg
ICAgICAgIHJldHVybiBib3VuZGluZ1NpemU7CisKKyAgICAvLyBUZW1wb3JhcnkgdmVjdG9yIHRv
IGF2b2lkIGdldHRpbmcgdGhlIHBhZ2UgcmVjdHMgdHdpY2UuCisgICAgV1RGOjpWZWN0b3I8Q0dS
ZWN0PiBwYWdlQ3JvcEJveGVzOworCisgICAgLy8gRmlyc3Qgd2UgbmVlZCB0byBkZXRlcm1pbmUg
dGhlIHdpZHRoIG9mIHRoZSB3aWRlc3QgcGFnZS4KKyAgICBDR0Zsb2F0IG1heFBhZ2VXaWR0aCA9
IDAuMGY7CisKKyAgICAvLyBDRyB1c2VzIHBhZ2UgbnVtYmVycyBpbnN0ZWFkIG9mIHBhZ2UgaW5k
aWNlcywgc28gMSBiYXNlZC4KKyAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8PSBwYWdlQ291bnQ7
IGkrKykgeworCisgICAgICAgIENHUERGUGFnZVJlZiBwYWdlID0gQ0dQREZEb2N1bWVudEdldFBh
Z2UocGRmRG9jdW1lbnQsIGkpOworICAgICAgICBpZiAoIXBhZ2UpIHsKKyAgICAgICAgICAgIC8v
IFNvIGlmIHRoZXJlIGlzIGEgbWlzc2luZyBwYWdlLCB0aGVuIGVmZmVjdGl2ZWx5IHRoZSBkb2N1
bWVudCBlbmRzIGhlcmUuCisgICAgICAgICAgICAvLyBTZWUgPHJkYXI6Ly9wcm9ibGVtLzEwNDI4
MTUyPiBpT1MgTWFpbCBjcmFzaGVzIHdoZW4gb3BlbmluZyBhIFBERgorICAgICAgICAgICAgcGFn
ZUNvdW50ID0gaSAtIDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAg
IENHUmVjdCBwYWdlUmVjdCA9IFtzZWxmIF9nZXRQREZQYWdlQm91bmRzOnBhZ2VdOworCisgICAg
ICAgIG1heFBhZ2VXaWR0aCA9IHN0ZDo6bWF4PENHRmxvYXQ+KG1heFBhZ2VXaWR0aCwgcGFnZVJl
Y3Quc2l6ZS53aWR0aCk7CisKKyAgICAgICAgcGFnZUNyb3BCb3hlcy5hcHBlbmQocGFnZVJlY3Qp
OworICAgIH0KKworICAgIENHRmxvYXQgc2NhbGluZ0ZhY3RvciA9IF9jb250YWluZXJTaXplLndp
ZHRoIC8gbWF4UGFnZVdpZHRoOworICAgIGlmIChfY29udGFpbmVyU2l6ZS53aWR0aCA8IEZMVF9F
UFNJTE9OKQorICAgICAgICBzY2FsaW5nRmFjdG9yID0gMS4wOworCisgICAgLy8gSW5jbHVkaW5n
IHRoZSBtYXJnaW5zLCB3aGF0IGlzIHRoZSBkZXNpcmVkIHdpZHRoIG9mIHRoZSBjb250ZW50Pwor
ICAgIENHRmxvYXQgZGVzaXJlZFdpZHRoID0gKG1heFBhZ2VXaWR0aCArIChQQUdFX1dJRFRIX0lO
U0VUICogMi4wZikpICogc2NhbGluZ0ZhY3RvcjsKKyAgICBDR0Zsb2F0IGRlc2lyZWRIZWlnaHQg
PSBQQUdFX0hFSUdIVF9JTlNFVDsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFnZUNv
dW50OyBpKyspIHsKKworICAgICAgICBDR1JlY3QgcGFnZVJlY3QgPSBwYWdlQ3JvcEJveGVzW2ld
OworCisgICAgICAgIC8vIEFwcGx5IG91ciBzY2FsaW5nIHRvIHRoaXMgcGFnZSdzIGJvdW5kcy4K
KyAgICAgICAgcGFnZVJlY3Quc2l6ZS53aWR0aCAgPSByb3VuZGYocGFnZVJlY3Quc2l6ZS53aWR0
aCAqIHNjYWxpbmdGYWN0b3IpOworICAgICAgICBwYWdlUmVjdC5zaXplLmhlaWdodCA9IHJvdW5k
ZihwYWdlUmVjdC5zaXplLmhlaWdodCAqIHNjYWxpbmdGYWN0b3IpOworCisgICAgICAgIC8vIENl
bnRlciB0aGlzIHBhZ2UgaG9yaXpvbnRhbGx5IGFuZCB1cGRhdGUgdGhlIHN0YXJ0aW5nIHZlcnRp
Y2FsIG9mZnNldC4KKyAgICAgICAgcGFnZVJlY3Qub3JpZ2luLnggPSByb3VuZGYoKGRlc2lyZWRX
aWR0aCAtIHBhZ2VSZWN0LnNpemUud2lkdGgpIC8gMi4wZik7CisgICAgICAgIHBhZ2VSZWN0Lm9y
aWdpbi55ID0gZGVzaXJlZEhlaWdodDsKKworICAgICAgICAvLyBTYXZlIHRoaXMgcGFnZSdzIHJl
Y3QgYW5kIG1pbmltdW0geS1vZmZzZXQuCisgICAgICAgIFtwYWdlUmVjdHMgYWRkT2JqZWN0OltO
U1ZhbHVlIF93ZWJfdmFsdWVXaXRoQ0dSZWN0OnBhZ2VSZWN0XV07CisgICAgICAgIFtwYWdlWU9y
aWdpbnMgYWRkT2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6Q0dSZWN0R2V0TWluWShw
YWdlUmVjdCldXTsKKworICAgICAgICAvLyBVcGRhdGUgdGhlIG5leHQgc3RhcnRpbmcgdmVydGlj
YWwgb2Zmc2V0LgorICAgICAgICBkZXNpcmVkSGVpZ2h0ICs9IHBhZ2VSZWN0LnNpemUuaGVpZ2h0
ICsgUEFHRV9IRUlHSFRfSU5TRVQ7CisgICAgfQorCisgICAgLy8gU2F2ZSB0aGUgcmVzdWx0aW5n
IHBhZ2UgcmVjdHMgYXJyYXkgYW5kIG1pbmltdW0geS1vZmZzZXRzIGFycmF5LgorICAgIHNlbGYu
cGFnZVJlY3RzID0gcGFnZVJlY3RzOworICAgIHNlbGYucGFnZVlPcmlnaW5zID0gcGFnZVlPcmln
aW5zOworCisgICAgLy8gRGV0ZXJtaW5lIHRoZSByZXN1bHQgZGVzaXJlZCBib3VuZHMuCisgICAg
cmV0dXJuIENHU2l6ZU1ha2Uocm91bmRmKGRlc2lyZWRXaWR0aCksIHJvdW5kZihkZXNpcmVkSGVp
Z2h0KSk7Cit9CisKKy0gKHZvaWQpZGlkVW5sb2NrRG9jdW1lbnQKK3sKKyAgICBbc2VsZiBfZG9Q
b3N0TG9hZE9yVW5sb2NrVGFza3NdOworfQorCistIChDR1JlY3QpcmVjdEZvclBhZ2VOdW1iZXI6
KE5TVUludGVnZXIpcGFnZU51bWJlcgoreworICAgIC8vIFBhZ2UgbnVtYmVyIGlzIDEtYmFzZWQs
IG5vdCAwIGJhc2VkLgorICAgIGlmICgoIXBhZ2VOdW1iZXIpIHx8IChwYWdlTnVtYmVyID4gW19w
YWdlUmVjdHMgY291bnRdKSkKKyAgICAgICAgcmV0dXJuIENHUmVjdE51bGw7CisKKyAgICByZXR1
cm4gW1tfcGFnZVJlY3RzIG9iamVjdEF0SW5kZXg6cGFnZU51bWJlciAtIDFdIENHUmVjdFZhbHVl
XTsKK30KKworLSAodm9pZClzaW11bGF0ZUNsaWNrT25MaW5rVG9VUkw6KE5TVVJMICopVVJMCit7
CisgICAgaWYgKCFVUkwpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIENvbnN0cnVjdCBhbiBl
dmVudCB0byBzaW11bGF0ZSBhIGNsaWNrLgorICAgIFJlZlB0cjxFdmVudD4gZXZlbnQgPSBNb3Vz
ZUV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmNsaWNrRXZlbnQsIHRydWUsIHRydWUsIDAsIDEs
IDAsIDAsIDAsIDAsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAwLCAwLCAwLCB0cnVlKTsK
KworICAgIC8vIENhbGwgdG8gdGhlIGZyYW1lIGxvYWRlciBiZWNhdXNlIHRoaXMgaXMgd2hlcmUg
b3VyIHNlY3VyaXR5IGNoZWNrcyBhcmUgbWFkZS4KKyAgICBGcmFtZSogZnJhbWUgPSBjb3JlKFtf
ZGF0YVNvdXJjZSB3ZWJGcmFtZV0pOworICAgIGZyYW1lLT5sb2FkZXIoKS0+bG9hZEZyYW1lUmVx
dWVzdChGcmFtZUxvYWRSZXF1ZXN0KGZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigp
LCBSZXNvdXJjZVJlcXVlc3QoVVJMKSksIGZhbHNlLCBmYWxzZSwgZXZlbnQuZ2V0KCksIDAsIE1h
eWJlU2VuZFJlZmVycmVyKTsKK30KKworQGVuZAorCisjZW5kaWYgLyogUExBVEZPUk0oSU9TKSAq
LwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9pb3MvV2ViVmlldy9XZWJQbGFpbldoaXRlVmll
dy5oIGIvU291cmNlL1dlYktpdC9pb3MvV2ViVmlldy9XZWJQbGFpbldoaXRlVmlldy5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjA1MzllMTg2OGY1OWQwOWY4ODVkNWRkYjgxMmVlNTgzZjE5OWUzZmYKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2lvcy9XZWJWaWV3L1dlYlBsYWluV2hpdGVWaWV3LmgK
QEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBDb21wdXRl
ciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4g
IE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0
aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgUExBVEZPUk0oSU9TKQorI2ltcG9y
dCA8V2ViS2l0L1dlYkRvY3VtZW50SW50ZXJuYWwuaD4KKworQGNsYXNzIFdlYkRhdGFTb3VyY2U7
CitAY2xhc3MgV2ViQ29yZVRleHREZWNvZGVyOworCitAaW50ZXJmYWNlIFdlYlBsYWluV2hpdGVW
aWV3IDogTlNWaWV3IDxXZWJEb2N1bWVudFZpZXcsIFdlYkRvY3VtZW50RWxlbWVudD4geworfQor
CitAZW5kCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvaW9zL1dlYlZpZXcvV2Vi
UGxhaW5XaGl0ZVZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0L2lvcy9XZWJWaWV3L1dlYlBsYWluV2hp
dGVWaWV3Lm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY5OTFmMGViODk2OGE3MWExYzE3OTk5YjM0NDY2ZDRkMGI4
MzE0M2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2lvcy9XZWJWaWV3L1dlYlBs
YWluV2hpdGVWaWV3Lm1tCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAg
ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0
ICJXZWJQbGFpbldoaXRlVmlldy5oIgorCisjaWYgUExBVEZPUk0oSU9TKQorCisjaW1wb3J0IDxX
ZWJDb3JlL0NvbG9yLmg+CisjaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgorI2lt
cG9ydCA8V2ViQ29yZS9XS0dyYXBoaWNzLmg+CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisK
K3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitAaW1wbGVtZW50YXRpb24gV2ViUGxhaW5XaGl0
ZVZpZXcKKworLSAodm9pZClkcmF3UmVjdDooTlNSZWN0KXJlY3QKK3sKKyAgICBDR0NvbnRleHRS
ZWYgY29udGV4dCA9IFdLR2V0Q3VycmVudEdyYXBoaWNzQ29udGV4dCgpOworICAgIHNldFN0cm9r
ZUFuZEZpbGxDb2xvcihjb250ZXh0LCBjYWNoZWRDR0NvbG9yKENvbG9yOjp3aGl0ZSwgQ29sb3JT
cGFjZURldmljZVJHQikpOworICAgIFdLUmVjdEZpbGwoY29udGV4dCwgW3NlbGYgYm91bmRzXSk7
Cit9CisKKy0gKHZvaWQpc2V0RGF0YVNvdXJjZTooV2ViRGF0YVNvdXJjZSAqKWRhdGFTb3VyY2UK
K3sKK30KKworLSAodm9pZClkYXRhU291cmNlVXBkYXRlZDooV2ViRGF0YVNvdXJjZSAqKWRhdGFT
b3VyY2UKK3sKK30KKworLSAodm9pZClzZXROZWVkc0xheW91dDooQk9PTClmbGFnCit7Cit9CisK
Ky0gKHZvaWQpbGF5b3V0Cit7Cit9CisKKy0gKHZvaWQpdmlld1dpbGxNb3ZlVG9Ib3N0V2luZG93
OihOU1dpbmRvdyAqKWhvc3RXaW5kb3cKK3sKK30KKworLSAodm9pZCl2aWV3RGlkTW92ZVRvSG9z
dFdpbmRvdworeworfQorCistIChOU0RpY3Rpb25hcnkgKillbGVtZW50QXRQb2ludDooTlNQb2lu
dClwb2ludAoreworICAgIHJldHVybiBuaWw7Cit9CisKKy0gKE5TRGljdGlvbmFyeSAqKWVsZW1l
bnRBdFBvaW50OihOU1BvaW50KXBvaW50IGFsbG93U2hhZG93Q29udGVudDooQk9PTClhbGxvdwor
eworICAgIHJldHVybiBuaWw7Cit9CisKK0BlbmQKKworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvaW9zL1dlYlZpZXcvV2ViVUlLaXREZWxlZ2F0ZS5o
IGIvU291cmNlL1dlYktpdC9pb3MvV2ViVmlldy9XZWJVSUtpdERlbGVnYXRlLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMDZhY2YzNGI1ZjAyNTllMzMyZWM3MmEzYzM2Yjk3ODZkMzljMTU2ZAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvaW9zL1dlYlZpZXcvV2ViVUlLaXREZWxlZ2F0ZS5oCkBAIC0w
LDAgKzEsMTE2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJVSUtpdERlbGVnYXRlX2gKKyNk
ZWZpbmUgV2ViVUlLaXREZWxlZ2F0ZV9oCisKKyNpbXBvcnQgPFdlYktpdC9XQUtBcHBLaXRTdHVi
cy5oPgorI2ltcG9ydCA8V2ViS2l0L1dLQ29udGVudE9ic2VydmF0aW9uLmg+CisKK0BjbGFzcyBE
T01Ob2RlOworQGNsYXNzIERPTURvY3VtZW50RnJhZ21lbnQ7CitAY2xhc3MgV0FLVmlldzsKK0Bj
bGFzcyBXZWJEYXRhU291cmNlOworQGNsYXNzIFdlYkZyYW1lOworQGNsYXNzIFdlYkhpc3RvcnlJ
dGVtOworQGNsYXNzIFdlYlZpZXc7CitAY2xhc3MgV2ViUGx1Z2luUGFja2FnZTsKK0BjbGFzcyBX
ZWJTZWN1cml0eU9yaWdpbjsKK0BjbGFzcyBVSVdlYlBsdWdJblZpZXc7CitAcHJvdG9jb2wgV2Vi
T3BlblBhbmVsUmVzdWx0TGlzdGVuZXI7CisKK0BpbnRlcmZhY2UgTlNPYmplY3QgKFdlYlVJS2l0
RGVsZWdhdGUpCistICh2b2lkKXdlYlZpZXc6KFdlYlZpZXcgKil3ZWJWaWV3IGRpZENvbW1pdExv
YWRGb3JGcmFtZTooV2ViRnJhbWUgKilmcmFtZTsKKy0gKHZvaWQpd2ViVmlldzooV2ViVmlldyAq
KXNlbmRlciBkaWRGaW5pc2hMb2FkRm9yRnJhbWU6KFdlYkZyYW1lICopZnJhbWU7CistICh2b2lk
KXdlYlZpZXc6KFdlYlZpZXcgKilzZW5kZXIgZGlkRmFpbExvYWRXaXRoRXJyb3I6KE5TRXJyb3Ig
KillcnJvciBmb3JGcmFtZTooV2ViRnJhbWUgKilmcmFtZTsKKy0gKHZvaWQpd2ViVmlldzooV2Vi
VmlldyAqKXNlbmRlciBkaWRDaGFuZ2VMb2NhdGlvbldpdGhpblBhZ2VGb3JGcmFtZTooV2ViRnJh
bWUgKilmcmFtZTsKKy0gKHZvaWQpd2ViVmlldzooV2ViVmlldyAqKXdlYlZpZXcgZGlkUmVjZWl2
ZURvY1R5cGVGb3JGcmFtZTooV2ViRnJhbWUgKilmcmFtZTsKKy0gKHZvaWQpd2ViVmlldzooV2Vi
VmlldyAqKWFXZWJWaWV3IGRpZFJlY2VpdmVWaWV3cG9ydEFyZ3VtZW50czooTlNEaWN0aW9uYXJ5
ICopYXJndW1lbnRzOworLSAodm9pZCl3ZWJWaWV3OihXZWJWaWV3ICopYVdlYlZpZXcgbmVlZHNT
Y3JvbGxOb3RpZmljYXRpb25zOihOU051bWJlciAqKWFOdW1iZXIgZm9yRnJhbWU6KFdlYkZyYW1l
ICopYUZyYW1lOworLSAodm9pZCl3ZWJWaWV3OihXZWJWaWV3ICopd2ViVmlldyBzYXZlU3RhdGVU
b0hpc3RvcnlJdGVtOihXZWJIaXN0b3J5SXRlbSAqKWl0ZW0gZm9yRnJhbWU6KFdlYkZyYW1lICop
ZnJhbWU7CistICh2b2lkKXdlYlZpZXc6KFdlYlZpZXcgKil3ZWJWaWV3IHJlc3RvcmVTdGF0ZUZy
b21IaXN0b3J5SXRlbTooV2ViSGlzdG9yeUl0ZW0gKilpdGVtIGZvckZyYW1lOihXZWJGcmFtZSAq
KWZyYW1lIGZvcmNlOihCT09MKWZvcmNlOworLSAoQk9PTCl3ZWJWaWV3OihXZWJWaWV3ICopd2Vi
VmlldyBzaG91bGRTY3JvbGxUb1BvaW50OihDR1BvaW50KXBvaW50IGZvckZyYW1lOihXZWJGcmFt
ZSAqKWZyYW1lOworLSAodm9pZCl3ZWJWaWV3OihXZWJWaWV3ICopd2ViVmlldyBkaWRPYnNlcnZl
RGVmZXJyZWRDb250ZW50Q2hhbmdlOihXS0NvbnRlbnRDaGFuZ2UpYUNoYW5nZSBmb3JGcmFtZToo
V2ViRnJhbWUgKilmcmFtZTsKKy0gKHZvaWQpd2ViVmlld0RpZFByZXZlbnREZWZhdWx0Rm9yRXZl
bnQ6KFdlYlZpZXcgKil3ZWJWaWV3OworLSAodm9pZCl3ZWJUaHJlYWRXZWJWaWV3RGlkTGF5b3V0
OihXZWJWaWV3ICopd2ViVmlldyBieVNjcm9sbGluZzooQk9PTClieVNjcm9sbGluZzsKKy0gKHZv
aWQpd2ViVmlld0RpZFN0YXJ0T3ZlcmZsb3dTY3JvbGw6KFdlYlZpZXcgKil3ZWJWaWV3OworLSAo
dm9pZCl3ZWJWaWV3RGlkRW5kT3ZlcmZsb3dTY3JvbGw6KFdlYlZpZXcgKil3ZWJWaWV3OworCisv
LyBGaWxlIFVwbG9hZCBzdXBwb3J0CistICh2b2lkKXdlYlZpZXc6KFdlYlZpZXcgKil3ZWJWaWV3
IHJ1bk9wZW5QYW5lbEZvckZpbGVCdXR0b25XaXRoUmVzdWx0TGlzdGVuZXI6KGlkPFdlYk9wZW5Q
YW5lbFJlc3VsdExpc3RlbmVyPilyZXN1bHRMaXN0ZW5lciBhbGxvd011bHRpcGxlRmlsZXM6KEJP
T0wpYWxsb3dNdWx0aXBsZUZpbGVzIGFjY2VwdE1JTUVUeXBlczooTlNBcnJheSAqKW1pbWVUeXBl
czsKKworLy8gQXV0b0ZpbGwgc3VwcG9ydAorLSAodm9pZCl3ZWJWaWV3OihXZWJWaWV3ICopd2Vi
VmlldyB3aWxsQ2xvc2VGcmFtZTooV2ViRnJhbWUgKilmcmFtZTsKKy0gKHZvaWQpd2ViVmlldzoo
V2ViVmlldyAqKXdlYlZpZXcgZGlkRmlyc3RMYXlvdXRJbkZyYW1lOihXZWJGcmFtZSAqKWZyYW1l
OworLSAodm9pZCl3ZWJWaWV3OihXZWJWaWV3ICopd2ViVmlldyBkaWRGaXJzdFZpc3VhbGx5Tm9u
RW1wdHlMYXlvdXRJbkZyYW1lOihXZWJGcmFtZSAqKWZyYW1lOworCisvLyBGb2N1cyBzdXBwb3J0
CistICh2b2lkKXdlYlZpZXc6KFdlYlZpZXcgKil3ZWJWaWV3IGVsZW1lbnREaWRGb2N1c05vZGU6
KERPTU5vZGUgKilub2RlOworLSAodm9pZCl3ZWJWaWV3OihXZWJWaWV3ICopd2ViVmlldyBlbGVt
ZW50RGlkQmx1ck5vZGU6KERPTU5vZGUgKilub2RlOworCisvLyBQYWdlQ2FjaGUgc3VwcG9ydAor
LSAodm9pZCl3ZWJWaWV3RGlkUmVzdG9yZUZyb21QYWdlQ2FjaGU6KFdlYlZpZXcgKil3ZWJWaWV3
OworCistIChOU1ZpZXcgKil3ZWJWaWV3OihXZWJWaWV3ICopd2ViVmlldyBwbHVnSW5WaWV3V2l0
aEFyZ3VtZW50czooTlNEaWN0aW9uYXJ5ICopYXJndW1lbnRzIGZyb21QbHVnSW5QYWNrYWdlOihX
ZWJQbHVnaW5QYWNrYWdlICopcGFja2FnZTsKKy0gKHZvaWQpd2ViVmlldzooV2ViVmlldyAqKXdl
YlZpZXcgd2lsbFNob3dGdWxsU2NyZWVuRm9yUGx1Z0luVmlldzooaWQpcGx1Z0luVmlldzsKKy0g
KHZvaWQpd2ViVmlldzooV2ViVmlldyAqKXdlYlZpZXcgZGlkSGlkZUZ1bGxTY3JlZW5Gb3JQbHVn
SW5WaWV3OihpZClwbHVnSW5WaWV3OworLSAodm9pZCl3ZWJWaWV3OihXZWJWaWV3ICopYVdlYlZp
ZXcgZGlkUmVjZWl2ZU1lc3NhZ2U6KE5TRGljdGlvbmFyeSAqKWFNZXNzYWdlOworLy8gRklYTUU6
IHRvIGJlIHJlbW92ZWQgd2hlbiBVSUtpdCBpbXBsZW1lbnRzIHRoZSBuZXcgb25lLgorLSAodm9p
ZClhZGRJbnB1dFN0cmluZzooTlNTdHJpbmcgKilzdHIgZnJvbVZhcmlhbnRLZXk6KEJPT0wpaXNQ
b3B1cFZhcmlhbnQ7CistICh2b2lkKWFkZElucHV0U3RyaW5nOihOU1N0cmluZyAqKXN0ciB3aXRo
RmxhZ3M6KE5TVUludGVnZXIpZmxhZ3M7CistICh2b2lkKWRlbGV0ZUZyb21JbnB1dDsKKworLy8g
QWNjZWxlcmF0ZWQgY29tcG9zaXRpbmc7IG9ubHkgY2FsbGVkIGlmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykgaXMgZGVmaW5lZAorLSAodm9pZClfd2VidGhyZWFkX3dlYlZpZXc6KFdlYlZp
ZXcqKXdlYlZpZXcgYXR0YWNoUm9vdExheWVyOihpZClyb290TGF5ZXI7CistICh2b2lkKXdlYlZp
ZXdEaWRDb21taXRDb21wb3NpdGluZ0xheWVyQ2hhbmdlczooV2ViVmlldyopd2ViVmlldzsKKwor
LSAodm9pZCl3ZWJWaWV3OihXZWJWaWV3Kil3ZWJWaWV3IGRpZENyZWF0ZU9yVXBkYXRlU2Nyb2xs
aW5nTGF5ZXI6KGlkKWxheWVyIHdpdGhDb250ZW50c0xheWVyOihpZCljb250ZW50c0xheWVyIHNj
cm9sbFNpemU6KE5TVmFsdWUqKXNpemVWYWx1ZSBmb3JOb2RlOihET01Ob2RlICopbm9kZQorICAg
IGFsbG93SG9yaXpvbnRhbFNjcm9sbGJhcjooQk9PTClhbGxvd0hvcml6b250YWxTY3JvbGxiYXIg
YWxsb3dWZXJ0aWNhbFNjcm9sbGJhcjooQk9PTClhbGxvd1ZlcnRpY2FsU2Nyb2xsYmFyOworLSAo
dm9pZCl3ZWJWaWV3OihXZWJWaWV3Kil3ZWJWaWV3IHdpbGxSZW1vdmVTY3JvbGxpbmdMYXllcjoo
aWQpbGF5ZXIgd2l0aENvbnRlbnRzTGF5ZXI6KGlkKWNvbnRlbnRzTGF5ZXIgZm9yTm9kZTooRE9N
Tm9kZSAqKW5vZGU7CisKKy0gKHZvaWQpcmV2ZWFsZWRTZWxlY3Rpb25CeVNjcm9sbGluZ1dlYkZy
YW1lOihXZWJGcmFtZSAqKXdlYkZyYW1lOworCisvLyBTcGVsbGNoZWNrIHN1cHBvcnQuCisvLyBS
ZXR1cm5zIGFuIGFycmF5IG9mIE5TVmFsdWVzIGNvbnRhaW5pbmcgTlNSYW5nZXMgd2hpY2ggaW5k
aWNhdGUgdGhlIG1pc3NwZWxsaW5ncy4KKy0gKE5TQXJyYXkgKiljaGVja1NwZWxsaW5nT2ZTdHJp
bmc6KE5TU3RyaW5nICopc3RyaW5nVG9DaGVjazsKKworLSAodm9pZCl3ZWJWaWV3OihXZWJWaWV3
ICopd2ViVmlldyB3aWxsQWRkUGx1Z0luVmlldzooaWQpcGx1Z0luVmlldzsKKworLSAodm9pZCl3
ZWJWaWV3RGlkRHJhd1RpbGVzOihXZWJWaWV3ICopc2VuZGVyOworCisvLyBQYXN0ZWJvYXJkIHN1
cHBvcnQgZGVsZWdhdGVzCistICh2b2lkKXdyaXRlRGF0YVRvUGFzdGVib2FyZDooTlNEaWN0aW9u
YXJ5KilyZXByZXNlbnRhdGlvbnM7CistIChOU0FycmF5KilyZWFkRGF0YUZyb21QYXN0ZWJvYXJk
OihOU1N0cmluZyopdHlwZSB3aXRoSW5kZXg6KE5TSW50ZWdlcilpbmRleDsKKy0gKE5TSW50ZWdl
cilnZXRQYXN0ZWJvYXJkSXRlbXNDb3VudDsKKy0gKE5TQXJyYXkqKXN1cHBvcnRlZFBhc3RlYm9h
cmRUeXBlc0ZvckN1cnJlbnRTZWxlY3Rpb247CistIChCT09MKWhhc1JpY2hseUVkaXRhYmxlU2Vs
ZWN0aW9uOworLSAoQk9PTClwZXJmb3Jtc1R3b1N0ZXBQYXN0ZTooRE9NRG9jdW1lbnRGcmFnbWVu
dCopZnJhZ21lbnQ7CistIChOU0ludGVnZXIpZ2V0UGFzdGVib2FyZENoYW5nZUNvdW50OworCist
IChCT09MKWlzVW5wZXJ0dXJiZWREaWN0YXRpb25SZXN1bHRNYXJrZXI6KGlkKW1ldGFkYXRhRm9y
TWFya2VyOworLSAodm9pZCl3ZWJWaWV3OihXZWJWaWV3ICopd2ViVmlldyBhZGRNZXNzYWdlVG9D
b25zb2xlOihOU0RpY3Rpb25hcnkgKiltZXNzYWdlIHdpdGhTb3VyY2U6KE5TU3RyaW5nICopc291
cmNlOworQGVuZAorCisjZW5kaWYgLy8gV2ViVUlLaXREZWxlZ2F0ZV9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L21hYy9Db25maWd1cmF0aW9ucy9XZWJLaXQueGNjb25maWcgYi9Tb3VyY2Uv
V2ViS2l0L21hYy9Db25maWd1cmF0aW9ucy9XZWJLaXQueGNjb25maWcKaW5kZXggZjJiNjE0Yjkw
M2Y2NzIxYjRlMzMwNzE0YWJmODk0ZWFhNjA5M2EzMi4uYzFkMmM0NTc2MDRhMjkyYTcxNzU0OTgz
Yzg4NTc3MTMwMzJmMDYyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvQ29uZmlndXJh
dGlvbnMvV2ViS2l0LnhjY29uZmlnCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL0NvbmZpZ3VyYXRp
b25zL1dlYktpdC54Y2NvbmZpZwpAQCAtMjcsNiArMjcsNyBAQAogRVhDTFVERURfU09VUkNFX0ZJ
TEVfTkFNRVMgPSAkKEVYQ0xVREVEX1NPVVJDRV9GSUxFX05BTUVTXyQoUExBVEZPUk1fTkFNRSkp
OwogRVhDTFVERURfU09VUkNFX0ZJTEVfTkFNRVNfaXBob25lb3MgPSAqLm5pYiAqLnBkZiAqLnRp
ZmY7CiBFWENMVURFRF9TT1VSQ0VfRklMRV9OQU1FU19pcGhvbmVzaW11bGF0b3IgPSAkKEVYQ0xV
REVEX1NPVVJDRV9GSUxFX05BTUVTX2lwaG9uZW9zKTsKK0VYQ0xVREVEX1NPVVJDRV9GSUxFX05B
TUVTX21hY29zeCA9ICpJT1MubW0gV2ViS2l0LmlPUy5leHA7CiAKIEVYUE9SVEVEX1NZTUJPTFNf
RklMRSA9ICQoRVhQT1JURURfU1lNQk9MU19GSUxFXyQoQ1VSUkVOVF9BUkNIKSk7CiBFWFBPUlRF
RF9TWU1CT0xTX0ZJTEVfID0gbWFjL1dlYktpdC5leHA7Cg==
</data>
<flag name="review"
          id="238308"
          type_id="1"
          status="+"
          setter="sam"
    />
    <flag name="commit-queue"
          id="238310"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
      

    </bug>

</bugzilla>