<?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>35036</bug_id>
          
          <creation_ts>2010-02-17 06:52:23 -0800</creation_ts>
          <short_desc>Introduce InspectorFrontendClient that would provide InspectorFrontend with an interface to the embedder</short_desc>
          <delta_ts>2010-03-16 04:00:49 -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>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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="Yury Semikhatsky">yurys</reporter>
          <assigned_to name="Yury Semikhatsky">yurys</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>jamey.hicks</cc>
    
    <cc>pfeldman</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>191023</commentid>
    <comment_count>0</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-02-17 06:52:23 -0800</bug_when>
    <thetext>Currently there is a bunch of methods in InspectorController that are called from InspctorFrontend to modify its window(such as moveWindowBy, showWindow, attachWindow etc.). Most of them are delegated to the InspectorClient. This design assumes that the frontend lives in the same process as the inspectorcontroller of the inspected page. To support out-of-process frontend we need to break this dependency.

Currently InspectorFrontendHost depends on InspectorClient, InspectorController and InspectorFrontend. The proposal is to introduce InspectorFrontendClient which would provide the frontend with an interface to the underlying platform. Some of its functionality is currently a part of InspectorClient and should be removed from there.

InspectorController--&gt;o--IncpetctorClient
  |
  +--&gt;o--InspectorFrontend--&gt;o--(inspector UI(*.js))--&gt;o--InspectorFrontendHost--&gt;o---InspectorFrontendClient
                        |
  InspectorBackend--o&lt;--+

All the messages from InspectorController to the frontend should go through InspectorFrontend which may be either inprocess implementation or remote frontend proxy. Frontend host should communicate with InspectorFrontendClient only and eventually all the communication with the InspectorBackend should be serialized and go through the client.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191029</commentid>
    <comment_count>1</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-02-17 07:03:59 -0800</bug_when>
    <thetext>Design image from one of the previous commits:
https://bugs.webkit.org/attachment.cgi?id=43869</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194712</commentid>
    <comment_count>2</comment_count>
      <attachid>49726</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-03-01 08:24:00 -0800</bug_when>
    <thetext>Created attachment 49726
patch for Mac platform

Please take a look at the patch. It works only on Mac but it should reflect general approach. I&apos;m working on support for other platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194753</commentid>
    <comment_count>3</comment_count>
      <attachid>49726</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-03-01 11:56:16 -0800</bug_when>
    <thetext>Comment on attachment 49726
patch for Mac platform

Putting r? for xenon to get this wip patch in his review queue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194754</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-03-01 11:57:46 -0800</bug_when>
    <thetext>Attachment 49726 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/inspector/InspectorFrontendClientLocal.cpp:39:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/inspector/InspectorFrontendClientLocal.cpp:50:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/inspector/ConsoleMessage.h:41:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 3 in 25 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>194757</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-03-01 12:08:02 -0800</bug_when>
    <thetext>Attachment 49726 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/320196</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198268</commentid>
    <comment_count>6</comment_count>
      <attachid>50424</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-03-10 12:38:36 -0800</bug_when>
    <thetext>Created attachment 50424
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198507</commentid>
    <comment_count>7</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-03-10 23:52:17 -0800</bug_when>
    <thetext>r=me.

Could you try doing rebase? (bots could not apply the patch)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198575</commentid>
    <comment_count>8</comment_count>
      <attachid>50492</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-03-11 05:58:37 -0800</bug_when>
    <thetext>Created attachment 50492
patch

Rebased previous patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198576</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-03-11 06:03:25 -0800</bug_when>
    <thetext>Attachment 50492 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/inspector/InspectorFrontendClientLocal.cpp:39:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/inspector/InspectorFrontendClientLocal.cpp:50:  Alphabetical sorting problem.  [build/include_order] [4]
WARNING: File exempt from style guide. Skipping: &quot;WebKit/qt/Api/qwebinspector.cpp&quot;
WARNING: File exempt from style guide. Skipping: &quot;WebKit/qt/Api/qwebpage.h&quot;
WARNING: File exempt from style guide. Skipping: &quot;WebKit/qt/Api/qwebinspector.h&quot;
WebCore/inspector/ConsoleMessage.h:41:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 3 in 59 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>198585</commentid>
    <comment_count>10</comment_count>
      <attachid>50493</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-03-11 06:20:16 -0800</bug_when>
    <thetext>Created attachment 50493
patch

Fixed style errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198588</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-03-11 06:24:48 -0800</bug_when>
    <thetext>Attachment 50493 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WARNING: File exempt from style guide. Skipping: &quot;WebKit/qt/Api/qwebinspector.cpp&quot;
WARNING: File exempt from style guide. Skipping: &quot;WebKit/qt/Api/qwebpage.h&quot;
WARNING: File exempt from style guide. Skipping: &quot;WebKit/qt/Api/qwebinspector.h&quot;
WebCore/inspector/ConsoleMessage.h:55:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 1 in 59 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>198590</commentid>
    <comment_count>12</comment_count>
      <attachid>50494</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-03-11 06:27:30 -0800</bug_when>
    <thetext>Created attachment 50494
patch

One more style fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198608</commentid>
    <comment_count>13</comment_count>
      <attachid>50498</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-03-11 07:23:32 -0800</bug_when>
    <thetext>Created attachment 50498
patch

Added new files to WebCore.vcproj</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>199018</commentid>
    <comment_count>14</comment_count>
      <attachid>50594</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-03-12 06:52:41 -0800</bug_when>
    <thetext>Created attachment 50594
patch

Fixed layout issue when inspector opens attached.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>200077</commentid>
    <comment_count>15</comment_count>
      <attachid>50777</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-03-16 02:42:36 -0700</bug_when>
    <thetext>Created attachment 50777
patch

Inroduced InspectorController::disconnectFrontend method and inlined couple of others.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>200079</commentid>
    <comment_count>16</comment_count>
      <attachid>50778</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-03-16 02:47:43 -0700</bug_when>
    <thetext>Created attachment 50778
patch

WebCore/ChangeLog merge conflict resolved.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>200094</commentid>
    <comment_count>17</comment_count>
      <attachid>50779</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-03-16 03:38:44 -0700</bug_when>
    <thetext>Created attachment 50779
patch that I&apos;m going to land

Added support for Efl platform.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>200100</commentid>
    <comment_count>18</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-03-16 04:00:49 -0700</bug_when>
    <thetext>Committing to http://svn.webkit.org/repository/webkit/trunk ...
	C	WebCore/inspector/InspectorFrontendHost.idl =&gt; WebCore/inspector/InspectorFrontendClient.h
	C	WebCore/inspector/front-end/InspectorFrontendHostStub.js =&gt; WebCore/inspector/InspectorFrontendClientLocal.h
	M	WebCore/ChangeLog
	M	WebCore/GNUmakefile.am
	M	WebCore/WebCore.Inspector.exp
	M	WebCore/WebCore.base.exp
	M	WebCore/WebCore.gypi
	M	WebCore/WebCore.order
	M	WebCore/WebCore.pro
	M	WebCore/WebCore.vcproj/WebCore.vcproj
	M	WebCore/WebCore.xcodeproj/project.pbxproj
	M	WebCore/inspector/ConsoleMessage.cpp
	M	WebCore/inspector/ConsoleMessage.h
	M	WebCore/inspector/InspectorClient.h
	M	WebCore/inspector/InspectorController.cpp
	M	WebCore/inspector/InspectorController.h
	M	WebCore/inspector/InspectorFrontend.cpp
	M	WebCore/inspector/InspectorFrontend.h
	A	WebCore/inspector/InspectorFrontendClientLocal.cpp
	M	WebCore/inspector/InspectorFrontendHost.cpp
	M	WebCore/inspector/InspectorFrontendHost.h
	M	WebCore/inspector/InspectorFrontendHost.idl
	M	WebCore/inspector/InspectorResource.cpp
	M	WebCore/inspector/InspectorResource.h
	M	WebCore/inspector/front-end/InspectorFrontendHostStub.js
	M	WebCore/inspector/front-end/inspector.js
	M	WebCore/loader/EmptyClients.h
	M	WebCore/loader/FrameLoader.cpp
	M	WebCore/page/Page.cpp
	M	WebCore/page/Page.h
	M	WebCore/platform/ContextMenu.cpp
	M	WebKit/ChangeLog
	M	WebKit/chromium/ChangeLog
	M	WebKit/chromium/src/InspectorClientImpl.cpp
	M	WebKit/chromium/src/InspectorClientImpl.h
	M	WebKit/chromium/src/WebDevToolsAgentImpl.cpp
	M	WebKit/chromium/src/WebDevToolsAgentImpl.h
	M	WebKit/chromium/src/WebDevToolsFrontendImpl.cpp
	M	WebKit/chromium/src/WebDevToolsFrontendImpl.h
	M	WebKit/chromium/src/js/InjectDispatch.js
	M	WebKit/efl/WebCoreSupport/InspectorClientEfl.cpp
	M	WebKit/efl/WebCoreSupport/InspectorClientEfl.h
	M	WebKit/gtk/ChangeLog
	M	WebKit/gtk/WebCoreSupport/InspectorClientGtk.cpp
	M	WebKit/gtk/WebCoreSupport/InspectorClientGtk.h
	M	WebKit/haiku/ChangeLog
	M	WebKit/haiku/WebCoreSupport/InspectorClientHaiku.cpp
	M	WebKit/haiku/WebCoreSupport/InspectorClientHaiku.h
	M	WebKit/mac/ChangeLog
	M	WebKit/mac/WebCoreSupport/WebInspectorClient.h
	M	WebKit/mac/WebCoreSupport/WebInspectorClient.mm
	M	WebKit/mac/WebInspector/WebInspector.mm
	M	WebKit/qt/Api/qwebinspector.cpp
	M	WebKit/qt/Api/qwebinspector.h
	M	WebKit/qt/Api/qwebpage.h
	M	WebKit/qt/ChangeLog
	M	WebKit/qt/WebCoreSupport/InspectorClientQt.cpp
	M	WebKit/qt/WebCoreSupport/InspectorClientQt.h
	M	WebKit/win/ChangeLog
	M	WebKit/win/WebCoreSupport/WebInspectorClient.cpp
	M	WebKit/win/WebCoreSupport/WebInspectorClient.h
	M	WebKit/win/WebInspector.cpp
	M	WebKit/wx/ChangeLog
	M	WebKit/wx/WebKitSupport/InspectorClientWx.cpp
	M	WebKit/wx/WebKitSupport/InspectorClientWx.h
Committed r56051</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49726</attachid>
            <date>2010-03-01 08:24:00 -0800</date>
            <delta_ts>2010-03-10 12:38:36 -0800</delta_ts>
            <desc>patch for Mac platform</desc>
            <filename>frontend-client.patch</filename>
            <type>text/plain</type>
            <size>81360</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5JbnNwZWN0b3IuZXhwIGIvV2ViQ29yZS9XZWJD
b3JlLkluc3BlY3Rvci5leHAKaW5kZXggMzc5YjdhMi4uZDVjMjFjMyAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9XZWJDb3JlLkluc3BlY3Rvci5leHAKKysrIGIvV2ViQ29yZS9XZWJDb3JlLkluc3BlY3Rv
ci5leHAKQEAgLTEsMTEgKzEsOSBAQAogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVy
MTBzZXRTZXR0aW5nRVJLTlNfNlN0cmluZ0VTM18KLV9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29u
dHJvbGxlcjEyYXR0YWNoV2luZG93RXYKLV9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxl
cjEyZGV0YWNoV2luZG93RXYKIF9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjE0ZW5h
YmxlRGVidWdnZXJFdgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTRlbmFibGVQ
cm9maWxlckViYgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTVkaXNhYmxlRGVi
dWdnZXJFYgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTVkaXNhYmxlUHJvZmls
ZXJFYgotX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTZzZXRXaW5kb3dWaXNpYmxl
RWJiCitfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIyNnNldEluc3BlY3RvckZyb250
ZW5kQ2xpZW50RU4zV1RGMTBQYXNzT3duUHRySU5TXzIzSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRF
RUUKIF9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjI2c3RvcFVzZXJJbml0aWF0ZWRQ
cm9maWxpbmdFdgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMjdzdGFydFVzZXJJ
bml0aWF0ZWRQcm9maWxpbmdFUE5TXzVUaW1lcklTMF9FRQogX19aTjdXZWJDb3JlMTlJbnNwZWN0
b3JDb250cm9sbGVyNHNob3dFdgpAQCAtMTgsMyArMTYsMTMgQEAgX19aTks3V2ViQ29yZTE5SW5z
cGVjdG9yQ29udHJvbGxlcjdlbmFibGVkRXYKIF9fWk5LN1dlYkNvcmUxOUluc3BlY3RvckNvbnRy
b2xsZXI3c2V0dGluZ0VSS05TXzZTdHJpbmdFCiBfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRy
b2xsZXIyMXN0YXJ0VGltZWxpbmVQcm9maWxlckV2CiBfX1pON1dlYkNvcmUxOUluc3BlY3RvckNv
bnRyb2xsZXIyMHN0b3BUaW1lbGluZVByb2ZpbGVyRXYKK19fWk43V2ViQ29yZTI4SW5zcGVjdG9y
RnJvbnRlbmRDbGllbnRMb2NhbEMyRVBOU18xOUluc3BlY3RvckNvbnRyb2xsZXJFUE5TXzRQYWdl
RQorX19aTjdXZWJDb3JlMjhJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsRDJFdgorX19aTjdX
ZWJDb3JlMjhJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsMTl3aW5kb3dPYmplY3RDbGVhcmVk
RXYKK19fWk43V2ViQ29yZTI4SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDE0ZnJvbnRlbmRM
b2FkZWRFdgorX19aTjdXZWJDb3JlMjhJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsMjdyZXN0
b3JlQXR0YWNoZWRXaW5kb3dIZWlnaHRFdgorX19aTjdXZWJDb3JlMjhJbnNwZWN0b3JGcm9udGVu
ZENsaWVudExvY2FsMTJtb3ZlV2luZG93QnlFZmYKK19fWk43V2ViQ29yZTI4SW5zcGVjdG9yRnJv
bnRlbmRDbGllbnRMb2NhbDE1Y2FuQXR0YWNoV2luZG93RXYKK19fWk43V2ViQ29yZTI4SW5zcGVj
dG9yRnJvbnRlbmRDbGllbnRMb2NhbDE1c2hvd0NvbnRleHRNZW51RVBOU181RXZlbnRFUktOM1dU
RjZWZWN0b3JJUE5TXzE1Q29udGV4dE1lbnVJdGVtRUxtMEVFRQorX19aTjdXZWJDb3JlMjhJbnNw
ZWN0b3JGcm9udGVuZENsaWVudExvY2FsMTdzZXRBdHRhY2hlZFdpbmRvd0ViCitfX1pON1dlYkNv
cmUyOEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwyNmNoYW5nZUF0dGFjaGVkV2luZG93SGVp
Z2h0RWoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cCBiL1dlYkNvcmUvV2Vi
Q29yZS5iYXNlLmV4cAppbmRleCBhMWZiNDRhLi5hMDdhZWU0IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L1dlYkNvcmUuYmFzZS5leHAKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCkBAIC03ODks
NyArNzg5LDYgQEAgX19aTks3V2ViQ29yZTExQ2FjaGVkSW1hZ2U1aW1hZ2VFdgogX19aTks3V2Vi
Q29yZTExRnJhbWVMb2FkZXIxMGlzQ29tcGxldGVFdgogX19aTks3V2ViQ29yZTExRnJhbWVMb2Fk
ZXIxNGZyYW1lSGFzTG9hZGVkRXYKIF9fWk5LN1dlYkNvcmUxMUZyYW1lTG9hZGVyMTVjb250YWlu
c1BsdWdpbnNFdgotX19aTks3V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjE1Y2FuQXR0YWNo
V2luZG93RXYKIF9fWk5LN1dlYkNvcmUxMUZyYW1lTG9hZGVyMTVmaXJzdExheW91dERvbmVFdgog
X19aTks3V2ViQ29yZTExRnJhbWVMb2FkZXIxNm91dGdvaW5nUmVmZXJyZXJFdgogX19aTks3V2Vi
Q29yZTExRnJhbWVMb2FkZXIxNnJlc3BvbnNlTUlNRVR5cGVFdgpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9XZWJDb3JlLm9yZGVyIGIvV2ViQ29yZS9XZWJDb3JlLm9yZGVyCmluZGV4IGE4ZDIwZmQuLjQ4
ZjMyMWIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5vcmRlcgorKysgYi9XZWJDb3JlL1dl
YkNvcmUub3JkZXIKQEAgLTIzNzg5LDcgKzIzNzg5LDYgQEAgX19aTjdXZWJDb3JlMThTY3JpcHRG
dW5jdGlvbkNhbGwxNGFwcGVuZEFyZ3VtZW50RWIKIF9fWk43V2ViQ29yZTE4U2NyaXB0RnVuY3Rp
b25DYWxsNGNhbGxFdgogX19aTjdXZWJDb3JlMThTY3JpcHRGdW5jdGlvbkNhbGw0Y2FsbEVSYmIK
IF9fWk43V2ViQ29yZTQ0anNJbnNwZWN0b3JDb250cm9sbGVyUHJvdG90eXBlRnVuY3Rpb25BdHRh
Y2hFUE4zSlNDOUV4ZWNTdGF0ZUVQTlMwXzhKU09iamVjdEVOUzBfN0pTVmFsdWVFUktOUzBfN0Fy
Z0xpc3RFCi1fX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIxMmF0dGFjaFdpbmRvd0V2
CiBfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIyMXBvcHVsYXRlU2NyaXB0T2JqZWN0
c0V2CiBfX1pON1dlYkNvcmVMMThjYWxsU2ltcGxlRnVuY3Rpb25FUE4zSlNDOUV4ZWNTdGF0ZUVS
S05TXzEyU2NyaXB0T2JqZWN0RVBLYwogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVy
OXNob3dQYW5lbEVOUzBfMTNTcGVjaWFsUGFuZWxzRQpAQCAtMjM4NTAsNyArMjM4NDksNiBAQCBf
X1pON1dlYkNvcmVMMTlkcmF3SGlnaGxpZ2h0Rm9yQm94RVJOU18xNUdyYXBoaWNzQ29udGV4dEVS
S05TXzlGbG9hdFF1YWRFUzRfUzRfUwogX19aTjdXZWJDb3JlTDE2ZHJhd091dGxpbmVkUXVhZEVS
TlNfMTVHcmFwaGljc0NvbnRleHRFUktOU185RmxvYXRRdWFkRVJLTlNfNUNvbG9yRQogX19aTjdX
ZWJDb3JlTDEwcXVhZFRvUGF0aEVSS05TXzlGbG9hdFF1YWRFCiBfX1pON1dlYkNvcmU0NGpzSW5z
cGVjdG9yQ29udHJvbGxlclByb3RvdHlwZUZ1bmN0aW9uRGV0YWNoRVBOM0pTQzlFeGVjU3RhdGVF
UE5TMF84SlNPYmplY3RFTlMwXzdKU1ZhbHVlRVJLTlMwXzdBcmdMaXN0RQotX19aTjdXZWJDb3Jl
MTlJbnNwZWN0b3JDb250cm9sbGVyMTJkZXRhY2hXaW5kb3dFdgogX19aTjdXZWJDb3JlNTZqc0lu
c3BlY3RvckNvbnRyb2xsZXJQcm90b3R5cGVGdW5jdGlvbk1vdmVCeVVucmVzdHJpY3RlZEVQTjNK
U0M5RXhlY1N0YXRlRVBOUzBfOEpTT2JqZWN0RU5TMF83SlNWYWx1ZUVSS05TMF83QXJnTAogX19a
Tks3V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjEybW92ZVdpbmRvd0J5RWZmCiBfX1pON1dl
YkNvcmVMMjRkcmF3T3V0bGluZWRRdWFkV2l0aENsaXBFUk5TXzE1R3JhcGhpY3NDb250ZXh0RVJL
TlNfOUZsb2F0UXVhZEVTNF9SS05TXzVDb2xvckUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKaW5kZXggZDcwZTZkNi4uMTJjZDdhMiAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTQ4MzQsNiArNDgzNCw5IEBACiAJCUVENTAx
REM2MEIyNDlGMjkwMEFFMThEOSAvKiBFZGl0b3JNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFRDUwMURDNTBCMjQ5RjI5MDBBRTE4RDkgLyogRWRp
dG9yTWFjLm1tICovOyB9OwogCQlFREUzQTUwMDBDN0E0MzA2MDA5NTZBMzcgLyogQ29sb3JNYWMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEVERTNBNEZG
MEM3QTQzMDYwMDk1NkEzNyAvKiBDb2xvck1hYy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCUVERUM5ODAzMEFFRDdFMTcwMDU5MTM3RiAvKiBXZWJD
b3JlUHJlZml4LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFREVDOTgwMjBBRUQ3RTE3MDA1OTEzN0YgLyogV2ViQ29yZVByZWZpeC5oICovOyB9OworCQlG
MzQ0QzcxNDExMjVCODJDMDBGMjZFRUUgLyogSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEYzNDRDNzEyMTEyNUI4
MkMwMEYyNkVFRSAvKiBJbnNwZWN0b3JGcm9udGVuZENsaWVudC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUYzNDRDNzUzMTEyOTREOUQwMEYyNkVF
RSAvKiBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGMzQ0Qzc1MjExMjk0RDlEMDBGMjZFRUUgLyogSW5z
cGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCUYzNDRDNzU4MTEyOTRGRjYwMEYyNkVFRSAvKiBJbnNwZWN0
b3JGcm9udGVuZENsaWVudExvY2FsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEYzNDRDNzU3MTEyOTRGRjYwMEYyNkVFRSAvKiBJbnNwZWN0b3JGcm9u
dGVuZENsaWVudExvY2FsLmNwcCAqLzsgfTsKIAkJRjM2NDRBRkYxMTE5ODA1OTAwRTBENTM3IC8q
IEluamVjdGVkU2NyaXB0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEYzNjQ0QUZEMTExOTgwNTkwMEUwRDUzNyAvKiBJbmplY3RlZFNjcmlwdC5jcHAg
Ki87IH07CiAJCUYzNjQ0QjAwMTExOTgwNTkwMEUwRDUzNyAvKiBJbmplY3RlZFNjcmlwdC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjM2NDRBRkUxMTE5
ODA1OTAwRTBENTM3IC8qIEluamVjdGVkU2NyaXB0LmggKi87IH07CiAJCUY0RUFGNEFFMTBDNzQy
QjEwMDkxMDBEMyAvKiBPcGVuVHlwZVNhbml0aXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNEVBRjRBQzEwQzc0MkIxMDA5MTAwRDMgLyogT3Bl
blR5cGVTYW5pdGl6ZXIuY3BwICovOyB9OwpAQCAtMTAxMzcsNiArMTAxNDAsOSBAQAogCQlFRDUw
MURDNTBCMjQ5RjI5MDBBRTE4RDkgLyogRWRpdG9yTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgbmFtZSA9IEVkaXRvck1hYy5tbTsgcGF0aCA9IG1hYy9FZGl0b3JNYWMu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUVERTNBNEZGMEM3QTQzMDYwMDk1NkEz
NyAvKiBDb2xvck1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2xvck1h
Yy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFREVDOTgwMjBBRUQ3RTE3MDA1OTEz
N0YgLyogV2ViQ29yZVByZWZpeC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V2ViQ29yZVByZWZpeC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDQ7IHVz
ZXNUYWJzID0gMDsgfTsKKwkJRjM0NEM3MTIxMTI1QjgyQzAwRjI2RUVFIC8qIEluc3BlY3RvckZy
b250ZW5kQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUYzNDRDNzUy
MTEyOTREOUQwMEYyNkVFRSAvKiBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRjM0NEM3NTcxMTI5NEZGNjAwRjI2RUVF
IC8qIEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUYzNjQ0QUZEMTExOTgwNTkwMEUwRDUzNyAvKiBJbmpl
Y3RlZFNjcmlwdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmpl
Y3RlZFNjcmlwdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUYzNjQ0QUZFMTEx
OTgwNTkwMEUwRDUzNyAvKiBJbmplY3RlZFNjcmlwdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBJbmplY3RlZFNjcmlwdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlGNEVBRjRBQzEwQzc0MkIxMDA5MTAwRDMgLyogT3BlblR5cGVTYW5pdGl6ZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gT3BlblR5cGVTYW5pdGl6ZXIuY3BwOyBw
YXRoID0gb3BlbnR5cGUvT3BlblR5cGVTYW5pdGl6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTA2NjMsNiArMTA2NjksOSBAQAogCQkJCTQxRjA2MTcyMEY1RjAwQUMwMEEw
N0VBQyAvKiBJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuaCAqLywKIAkJCQk3QUVEM0UwMzBG
QkIxRUFBMDBEMkIwM0MgLyogSW5zcGVjdG9yRnJvbnRlbmQuY3BwICovLAogCQkJCTdBRUQzRTA0
MEZCQjFFQUEwMEQyQjAzQyAvKiBJbnNwZWN0b3JGcm9udGVuZC5oICovLAorCQkJCUYzNDRDNzEy
MTEyNUI4MkMwMEYyNkVFRSAvKiBJbnNwZWN0b3JGcm9udGVuZENsaWVudC5oICovLAorCQkJCUYz
NDRDNzU3MTEyOTRGRjYwMEYyNkVFRSAvKiBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmNw
cCAqLywKKwkJCQlGMzQ0Qzc1MjExMjk0RDlEMDBGMjZFRUUgLyogSW5zcGVjdG9yRnJvbnRlbmRD
bGllbnRMb2NhbC5oICovLAogCQkJCTdBMEU3NzBCMTBDMDBBODgwMEEwMjc2RSAvKiBJbnNwZWN0
b3JGcm9udGVuZEhvc3QuY3BwICovLAogCQkJCTdBMEU3NzBDMTBDMDBBODgwMEEwMjc2RSAvKiBJ
bnNwZWN0b3JGcm9udGVuZEhvc3QuaCAqLywKIAkJCQk3QTBFNzcwRDEwQzAwQTg4MDBBMDI3NkUg
LyogSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmlkbCAqLywKQEAgLTE4NTgzLDYgKzE4NTkyLDggQEAK
IAkJCQk2NUUwRTk0NDExMzNDODlGMDBCNENCMTAgLyogSlNET01XcmFwcGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1OTYyMjk3QTExMzNFRkUyMDBEQzRDQkIgLyogR2VvbG9jYXRpb25Qb3NpdGlv
bkNhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwQkMyQzc3ODExMzRBOEZDMDAwQjJGNjEgLyog
Q2FudmFzU3VyZmFjZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJRjM0NEM3MTQxMTI1QjgyQzAwRjI2
RUVFIC8qIEluc3BlY3RvckZyb250ZW5kQ2xpZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQlGMzQ0
Qzc1MzExMjk0RDlEMDBGMjZFRUUgLyogSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2lu
ZyA9IDA7CiAJCX07CkBAIC0yMDc3MSw2ICsyMDc4Miw3IEBACiAJCQkJRTE2OTgyNjQxMTM0NjdG
MzAwODk0MTE1IC8qIEphdmFSdW50aW1lT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTU5
NjIyOTc4MTEzM0VGRDcwMERDNENCQiAvKiBHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEJDMkM3NzcxMTM0QThGQzAwMEIyRjYxIC8qIENhbnZhc1N1cmZh
Y2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRjM0NEM3NTgxMTI5NEZGNjAwRjI2RUVFIC8qIElu
c3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJ
cnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQg
YS9XZWJDb3JlL2luc3BlY3Rvci9Db25zb2xlTWVzc2FnZS5jcHAgYi9XZWJDb3JlL2luc3BlY3Rv
ci9Db25zb2xlTWVzc2FnZS5jcHAKaW5kZXggNTUzOWU5ZC4uNDA1NDk5NiAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9pbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVj
dG9yL0NvbnNvbGVNZXNzYWdlLmNwcApAQCAtMzEsOSArMzEsMTIgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJDb25zb2xlTWVzc2FnZS5oIgogCisjaW5jbHVkZSAiSW5qZWN0ZWRT
Y3JpcHQuaCIKKyNpbmNsdWRlICJJbmplY3RlZFNjcmlwdEhvc3QuaCIKICNpbmNsdWRlICJJbnNw
ZWN0b3JGcm9udGVuZC5oIgogI2luY2x1ZGUgIlNjcmlwdENhbGxTdGFjay5oIgogI2luY2x1ZGUg
IlNjcmlwdE9iamVjdC5oIgorI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTgwLDcgKzgzLDcgQEAgQ29uc29sZU1lc3NhZ2U6OkNv
bnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2UgcywgTWVzc2FnZVR5cGUgdCwgTWVzc2FnZUxldmVs
IGwsIFMKIH0KIAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi12b2lkIENvbnNvbGVNZXNzYWdlOjph
ZGRUb0NvbnNvbGUoSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kKQordm9pZCBDb25zb2xlTWVz
c2FnZTo6YWRkVG9Gcm9udGVuZChJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQsIEluamVjdGVk
U2NyaXB0SG9zdCogaW5qZWN0ZWRTY3JpcHRIb3N0KQogewogICAgIFNjcmlwdE9iamVjdCBqc29u
T2JqID0gZnJvbnRlbmQtPm5ld1NjcmlwdE9iamVjdCgpOwogICAgIGpzb25PYmouc2V0KCJzb3Vy
Y2UiLCBzdGF0aWNfY2FzdDxpbnQ+KG1fc291cmNlKSk7CkBAIC05MCw3ICs5MywxNSBAQCB2b2lk
IENvbnNvbGVNZXNzYWdlOjphZGRUb0NvbnNvbGUoSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5k
KQogICAgIGpzb25PYmouc2V0KCJ1cmwiLCBtX3VybCk7CiAgICAganNvbk9iai5zZXQoImdyb3Vw
TGV2ZWwiLCBzdGF0aWNfY2FzdDxpbnQ+KG1fZ3JvdXBMZXZlbCkpOwogICAgIGpzb25PYmouc2V0
KCJyZXBlYXRDb3VudCIsIHN0YXRpY19jYXN0PGludD4obV9yZXBlYXRDb3VudCkpOwotICAgIGZy
b250ZW5kLT5hZGRDb25zb2xlTWVzc2FnZShqc29uT2JqLCBtX2ZyYW1lcywgbV9zY3JpcHRTdGF0
ZSwgbV9hcmd1bWVudHMsICBtX21lc3NhZ2UpOworICAgIFZlY3RvcjxSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiA+IGFyZ3VtZW50czsKKyAgICBpZiAoIW1fYXJndW1lbnRzLmlzRW1wdHko
KSkgeworICAgICAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IGluamVjdGVkU2Ny
aXB0SG9zdC0+aW5qZWN0ZWRTY3JpcHRGb3IobV9zY3JpcHRTdGF0ZSk7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtX2FyZ3VtZW50cy5zaXplKCk7ICsraSkgeworICAgICAgICAg
ICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZFZhbHVlID0gaW5qZWN0
ZWRTY3JpcHQud3JhcEZvckNvbnNvbGUobV9hcmd1bWVudHNbaV0pOworICAgICAgICAgICAgYXJn
dW1lbnRzLmFwcGVuZChzZXJpYWxpemVkVmFsdWUpOworICAgICAgICB9CisgICAgfSAgIAorICAg
IGZyb250ZW5kLT5hZGRDb25zb2xlTWVzc2FnZShqc29uT2JqLCBtX2ZyYW1lcywgYXJndW1lbnRz
LCAgbV9tZXNzYWdlKTsKIH0KIAogdm9pZCBDb25zb2xlTWVzc2FnZTo6dXBkYXRlUmVwZWF0Q291
bnRJbkNvbnNvbGUoSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kKQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9pbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0NvbnNv
bGVNZXNzYWdlLmgKaW5kZXggZTlhZTEzMC4uNGM3N2U5NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9p
bnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9Db25zb2xl
TWVzc2FnZS5oCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3MgSW5qZWN0ZWRTY3JpcHRIb3N0OwogICAgIGNs
YXNzIEluc3BlY3RvckZyb250ZW5kOwogICAgIGNsYXNzIFNjcmlwdENhbGxTdGFjazsKICAgICBj
bGFzcyBTY3JpcHRTdHJpbmc7CkBAIC00OCw3ICs0OSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1lc3Nh
Z2VMZXZlbCwgU2NyaXB0Q2FsbFN0YWNrKiwgdW5zaWduZWQgZywgYm9vbCBzdG9yZVRyYWNlID0g
ZmFsc2UpOwogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICAgICAgdm9pZCBhZGRUb0NvbnNv
bGUoSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kKTsKKyAgICAgICAgdm9pZCBhZGRUb0Zyb250
ZW5kKEluc3BlY3RvckZyb250ZW5kKiwgSW5qZWN0ZWRTY3JpcHRIb3N0Kik7CiAgICAgICAgIHZv
aWQgdXBkYXRlUmVwZWF0Q291bnRJbkNvbnNvbGUoSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5k
KTsKICNlbmRpZgogICAgICAgICB2b2lkIGluY3JlbWVudENvdW50KCkgeyArK21fcmVwZWF0Q291
bnQ7IH07CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDbGllbnQuaCBi
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNsaWVudC5oCmluZGV4IGU0NDhjZDIuLjg0MWMx
NWUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNsaWVudC5oCisrKyBi
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNsaWVudC5oCkBAIC0zMCw2ICszMCw3IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgSW5zcGVjdG9yQ29udHJvbGxlcjsKIGNsYXNz
IE5vZGU7CiBjbGFzcyBQYWdlOwogY2xhc3MgU3RyaW5nOwpAQCAtNDAsMjkgKzQxLDEzIEBAIHB1
YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0b3JEZXN0cm95ZWQoKSA9IDA7CiAKLSAg
ICB2aXJ0dWFsIFBhZ2UqIGNyZWF0ZVBhZ2UoKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIFN0cmluZyBs
b2NhbGl6ZWRTdHJpbmdzVVJMKCkgPSAwOwotCi0gICAgdmlydHVhbCBTdHJpbmcgaGlkZGVuUGFu
ZWxzKCkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHNob3dXaW5kb3coKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIGNsb3NlV2luZG93KCkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIGF0dGFjaFdp
bmRvdygpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoV2luZG93KCkgPSAwOwotCi0gICAg
dmlydHVhbCB2b2lkIHNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBvcGVuSW5zcGVjdG9yRnJvbnRlbmQoSW5zcGVjdG9yQ29udHJv
bGxlciopID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBoaWdobGlnaHQoTm9kZSopID0gMDsKICAg
ICB2aXJ0dWFsIHZvaWQgaGlkZUhpZ2hsaWdodCgpID0gMDsKIAotICAgIHZpcnR1YWwgdm9pZCBp
bnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYgbmV3VVJMKSA9IDA7Ci0KICAgICB2aXJ0
dWFsIHZvaWQgcG9wdWxhdGVTZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5LCBTdHJpbmcqIHZhbHVl
KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHN0b3JlU2V0dGluZyhjb25zdCBTdHJpbmcmIGtleSwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIGluc3BlY3Rvcldp
bmRvd09iamVjdENsZWFyZWQoKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCBiL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IDQ0MDE3NmUuLjg5
YTBhZDggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIu
Y3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC01
NywxMSArNTcsMTEgQEAKICNpbmNsdWRlICJJbmplY3RlZFNjcmlwdEhvc3QuaCIKICNpbmNsdWRl
ICJJbnNwZWN0b3JCYWNrZW5kLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ2xpZW50LmgiCisjaW5j
bHVkZSAiSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JET01B
Z2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZS5oIgogI2luY2x1
ZGUgIkluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JGcm9u
dGVuZC5oIgotI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kSG9zdC5oIgogI2luY2x1ZGUgIklu
c3BlY3RvclJlc291cmNlLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oIgog
I2luY2x1ZGUgIlBhZ2UuaCIKQEAgLTEzMiwxMCArMTMyLDkgQEAgc3RhdGljIHVuc2lnbmVkIHNf
aW5zcGVjdG9yQ29udHJvbGxlckNvdW50OwogSW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9y
Q29udHJvbGxlcihQYWdlKiBwYWdlLCBJbnNwZWN0b3JDbGllbnQqIGNsaWVudCkKICAgICA6IG1f
aW5zcGVjdGVkUGFnZShwYWdlKQogICAgICwgbV9jbGllbnQoY2xpZW50KQotICAgICwgbV9wYWdl
KDApCisgICAgLCBtX29wZW5pbmdGcm9udGVuZChmYWxzZSkKKyAgICAsIG1fY2xvc2luZ0Zyb250
ZW5kKGZhbHNlKQogICAgICwgbV9leHBpcmVkQ29uc29sZU1lc3NhZ2VDb3VudCgwKQotICAgICwg
bV9mcm9udGVuZFNjcmlwdFN0YXRlKDApCi0gICAgLCBtX3dpbmRvd1Zpc2libGUoZmFsc2UpCiAg
ICAgLCBtX3Nob3dBZnRlclZpc2libGUoQ3VycmVudFBhbmVsKQogICAgICwgbV9ncm91cExldmVs
KDApCiAgICAgLCBtX3NlYXJjaGluZ0Zvck5vZGUoZmFsc2UpCkBAIC0xNDMsNyArMTQyLDYgQEAg
SW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcihQYWdlKiBwYWdlLCBJbnNw
ZWN0b3JDbGllbnQqIGNsaWVudCkKICAgICAsIG1fcmVzb3VyY2VUcmFja2luZ0VuYWJsZWQoZmFs
c2UpCiAgICAgLCBtX3Jlc291cmNlVHJhY2tpbmdTZXR0aW5nc0xvYWRlZChmYWxzZSkKICAgICAs
IG1faW5zcGVjdG9yQmFja2VuZChJbnNwZWN0b3JCYWNrZW5kOjpjcmVhdGUodGhpcykpCi0gICAg
LCBtX2luc3BlY3RvckZyb250ZW5kSG9zdChJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OmNyZWF0ZSh0
aGlzLCBjbGllbnQpKQogICAgICwgbV9pbmplY3RlZFNjcmlwdEhvc3QoSW5qZWN0ZWRTY3JpcHRI
b3N0OjpjcmVhdGUodGhpcykpCiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICAg
LCBtX2RlYnVnZ2VyRW5hYmxlZChmYWxzZSkKQEAgLTE2Niw5ICsxNjQsNyBAQCBJbnNwZWN0b3JD
b250cm9sbGVyOjp+SW5zcGVjdG9yQ29udHJvbGxlcigpCiB7CiAgICAgLy8gVGhlc2Ugc2hvdWxk
IGhhdmUgYmVlbiBjbGVhcmVkIGluIGluc3BlY3RlZFBhZ2VEZXN0cm95ZWQoKS4KICAgICBBU1NF
UlQoIW1fY2xpZW50KTsKLSAgICBBU1NFUlQoIW1fZnJvbnRlbmRTY3JpcHRTdGF0ZSk7CiAgICAg
QVNTRVJUKCFtX2luc3BlY3RlZFBhZ2UpOwotICAgIEFTU0VSVCghbV9wYWdlIHx8IChtX3BhZ2Ug
JiYgIW1fcGFnZS0+cGFyZW50SW5zcGVjdG9yQ29udHJvbGxlcigpKSk7CiAKICAgICBkZWxldGVB
bGxWYWx1ZXMobV9mcmFtZVJlc291cmNlcyk7CiAgICAgZGVsZXRlQWxsVmFsdWVzKG1fY29uc29s
ZU1lc3NhZ2VzKTsKQEAgLTE3OSw3ICsxNzUsNiBAQCBJbnNwZWN0b3JDb250cm9sbGVyOjp+SW5z
cGVjdG9yQ29udHJvbGxlcigpCiAgICAgcmVsZWFzZURPTUFnZW50KCk7CiAKICAgICBtX2luc3Bl
Y3RvckJhY2tlbmQtPmRpc2Nvbm5lY3RDb250cm9sbGVyKCk7Ci0gICAgbV9pbnNwZWN0b3JGcm9u
dGVuZEhvc3QtPmRpc2Nvbm5lY3RDb250cm9sbGVyKCk7CiAgICAgbV9pbmplY3RlZFNjcmlwdEhv
c3QtPmRpc2Nvbm5lY3RDb250cm9sbGVyKCk7CiB9CiAKQEAgLTE4NywxMCArMTgyLDYgQEAgdm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0ZWRQYWdlRGVzdHJveWVkKCkKIHsKICAgICBj
bG9zZSgpOwogCi0gICAgaWYgKG1fZnJvbnRlbmRTY3JpcHRTdGF0ZSkgewotICAgICAgICBTY3Jp
cHRHbG9iYWxPYmplY3Q6OnJlbW92ZShtX2Zyb250ZW5kU2NyaXB0U3RhdGUsICJJbnNwZWN0b3JC
YWNrZW5kIik7Ci0gICAgICAgIFNjcmlwdEdsb2JhbE9iamVjdDo6cmVtb3ZlKG1fZnJvbnRlbmRT
Y3JpcHRTdGF0ZSwgIkluc3BlY3RvckZyb250ZW5kSG9zdCIpOwotICAgIH0KICAgICBBU1NFUlQo
bV9pbnNwZWN0ZWRQYWdlKTsKICAgICBtX2luc3BlY3RlZFBhZ2UgPSAwOwogCkBAIC0yODUsNDcg
KzI3Niw0MiBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmhpZGVIaWdobGlnaHQoKQogCiBi
b29sIEluc3BlY3RvckNvbnRyb2xsZXI6OndpbmRvd1Zpc2libGUoKQogewotICAgIHJldHVybiBt
X3dpbmRvd1Zpc2libGU7CisgICAgcmV0dXJuIG1fZnJvbnRlbmQ7CiB9CiAKLXZvaWQgSW5zcGVj
dG9yQ29udHJvbGxlcjo6c2V0V2luZG93VmlzaWJsZShib29sIHZpc2libGUsIGJvb2wgYXR0YWNo
ZWQpCit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmZyb250ZW5kUmVhZHkoKQogewotICAgIGlm
ICh2aXNpYmxlID09IG1fd2luZG93VmlzaWJsZSB8fCAhbV9mcm9udGVuZCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbV93aW5kb3dWaXNpYmxlID0gdmlzaWJsZTsKLQotICAgIGlmIChtX3dpbmRv
d1Zpc2libGUpIHsKLSAgICAgICAgc2V0QXR0YWNoZWRXaW5kb3coYXR0YWNoZWQpOwotICAgICAg
ICBwb3B1bGF0ZVNjcmlwdE9iamVjdHMoKTsKLQotICAgICAgICBpZiAobV9zaG93QWZ0ZXJWaXNp
YmxlID09IEN1cnJlbnRQYW5lbCkgewotICAgICAgICAgIFN0cmluZyBsYXN0QWN0aXZlUGFuZWxT
ZXR0aW5nID0gc2V0dGluZyhsYXN0QWN0aXZlUGFuZWxTZXR0aW5nTmFtZSk7Ci0gICAgICAgICAg
bV9zaG93QWZ0ZXJWaXNpYmxlID0gc3BlY2lhbFBhbmVsRm9ySlNOYW1lKGxhc3RBY3RpdmVQYW5l
bFNldHRpbmcpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1fbm9kZVRvRm9jdXMpCi0gICAg
ICAgICAgICBmb2N1c05vZGUoKTsKKyAgICBwb3B1bGF0ZVNjcmlwdE9iamVjdHMoKTsKKyAgICAK
KyAgICBpZiAobV9zaG93QWZ0ZXJWaXNpYmxlID09IEN1cnJlbnRQYW5lbCkgeworICAgICAgICBT
dHJpbmcgbGFzdEFjdGl2ZVBhbmVsU2V0dGluZyA9IHNldHRpbmcobGFzdEFjdGl2ZVBhbmVsU2V0
dGluZ05hbWUpOworICAgICAgICBtX3Nob3dBZnRlclZpc2libGUgPSBzcGVjaWFsUGFuZWxGb3JK
U05hbWUobGFzdEFjdGl2ZVBhbmVsU2V0dGluZyk7CisgICAgfQorICAgIAorICAgIGlmIChtX25v
ZGVUb0ZvY3VzKQorICAgICAgICBmb2N1c05vZGUoKTsKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9E
RUJVR0dFUikKLSAgICAgICAgaWYgKG1fYXR0YWNoRGVidWdnZXJXaGVuU2hvd24pCi0gICAgICAg
ICAgICBlbmFibGVEZWJ1Z2dlcigpOworICAgIGlmIChtX2F0dGFjaERlYnVnZ2VyV2hlblNob3du
KQorICAgICAgICBlbmFibGVEZWJ1Z2dlcigpOwogI2VuZGlmCi0gICAgICAgIHNob3dQYW5lbCht
X3Nob3dBZnRlclZpc2libGUpOwotICAgIH0gZWxzZSB7CisgICAgc2hvd1BhbmVsKG1fc2hvd0Fm
dGVyVmlzaWJsZSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6d2lsbENsb3NlRnJv
bnRlbmQoKQorewogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQotICAgICAgICAvLyBJ
ZiB0aGUgd2luZG93IGlzIGJlaW5nIGNsb3NlZCB3aXRoIHRoZSBkZWJ1Z2dlciBlbmFibGVkLAot
ICAgICAgICAvLyByZW1lbWJlciB0aGlzIHN0YXRlIHRvIHJlLWVuYWJsZSBkZWJ1Z2dlciBvbiB0
aGUgbmV4dCB3aW5kb3cKLSAgICAgICAgLy8gb3BlbmluZy4KLSAgICAgICAgYm9vbCBkZWJ1Z2dl
cldhc0VuYWJsZWQgPSBtX2RlYnVnZ2VyRW5hYmxlZDsKLSAgICAgICAgZGlzYWJsZURlYnVnZ2Vy
KCk7Ci0gICAgICAgIGlmIChkZWJ1Z2dlcldhc0VuYWJsZWQpCi0gICAgICAgICAgICBtX2F0dGFj
aERlYnVnZ2VyV2hlblNob3duID0gdHJ1ZTsKKyAgICAvLyBJZiB0aGUgd2luZG93IGlzIGJlaW5n
IGNsb3NlZCB3aXRoIHRoZSBkZWJ1Z2dlciBlbmFibGVkLAorICAgIC8vIHJlbWVtYmVyIHRoaXMg
c3RhdGUgdG8gcmUtZW5hYmxlIGRlYnVnZ2VyIG9uIHRoZSBuZXh0IHdpbmRvdworICAgIC8vIG9w
ZW5pbmcuCisgICAgYm9vbCBkZWJ1Z2dlcldhc0VuYWJsZWQgPSBtX2RlYnVnZ2VyRW5hYmxlZDsK
KyAgICBkaXNhYmxlRGVidWdnZXIoKTsKKyAgICBpZiAoZGVidWdnZXJXYXNFbmFibGVkKQorICAg
ICAgICBtX2F0dGFjaERlYnVnZ2VyV2hlblNob3duID0gdHJ1ZTsKICNlbmRpZgotICAgICAgICBp
ZiAobV9zZWFyY2hpbmdGb3JOb2RlKQotICAgICAgICAgICAgdG9nZ2xlU2VhcmNoRm9yTm9kZUlu
UGFnZSgpOwotICAgICAgICByZXNldFNjcmlwdE9iamVjdHMoKTsKLSAgICAgICAgc3RvcFRpbWVs
aW5lUHJvZmlsZXIoKTsKLSAgICB9CisgICAgaWYgKG1fc2VhcmNoaW5nRm9yTm9kZSkKKyAgICAg
ICAgdG9nZ2xlU2VhcmNoRm9yTm9kZUluUGFnZSgpOworICAgIHJlc2V0U2NyaXB0T2JqZWN0cygp
OworICAgIHN0b3BUaW1lbGluZVByb2ZpbGVyKCk7CiAgICAgbV9zaG93QWZ0ZXJWaXNpYmxlID0g
Q3VycmVudFBhbmVsOwogfQogCkBAIC0zNTksNyArMzQ1LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250
cm9sbGVyOjphZGRDb25zb2xlTWVzc2FnZShTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIENvbnNv
bGVNZXMKICAgICAgICAgbV9wcmV2aW91c01lc3NhZ2UgPSBjb25zb2xlTWVzc2FnZTsKICAgICAg
ICAgbV9jb25zb2xlTWVzc2FnZXMuYXBwZW5kKGNvbnNvbGVNZXNzYWdlKTsKICAgICAgICAgaWYg
KHdpbmRvd1Zpc2libGUoKSkKLSAgICAgICAgICAgIG1fcHJldmlvdXNNZXNzYWdlLT5hZGRUb0Nv
bnNvbGUobV9mcm9udGVuZC5nZXQoKSk7CisgICAgICAgICAgICBtX3ByZXZpb3VzTWVzc2FnZS0+
YWRkVG9Gcm9udGVuZChtX2Zyb250ZW5kLmdldCgpLCBtX2luamVjdGVkU2NyaXB0SG9zdC5nZXQo
KSk7CiAgICAgfQogCiAgICAgaWYgKCF3aW5kb3dWaXNpYmxlKCkgJiYgbV9jb25zb2xlTWVzc2Fn
ZXMuc2l6ZSgpID49IG1heGltdW1Db25zb2xlTWVzc2FnZXMpIHsKQEAgLTQwNyw2OSArMzkzLDYg
QEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjptYXJrVGltZWxpbmUoY29uc3QgU3RyaW5nJiBt
ZXNzYWdlKQogICAgICAgICB0aW1lbGluZUFnZW50KCktPmRpZE1hcmtUaW1lbGluZShtZXNzYWdl
KTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGNvbnN0cmFpbmVkQXR0YWNoZWRXaW5kb3dIZWlnaHQo
dW5zaWduZWQgcHJlZmVycmVkSGVpZ2h0LCB1bnNpZ25lZCB0b3RhbFdpbmRvd0hlaWdodCkKLXsK
LSAgICByZXR1cm4gcm91bmRmKG1heChtaW5pbXVtQXR0YWNoZWRIZWlnaHQsIG1pbjxmbG9hdD4o
cHJlZmVycmVkSGVpZ2h0LCB0b3RhbFdpbmRvd0hlaWdodCAqIG1heGltdW1BdHRhY2hlZEhlaWdo
dFJhdGlvKSkpOwotfQotCi1ib29sIEluc3BlY3RvckNvbnRyb2xsZXI6OmNhbkF0dGFjaFdpbmRv
dygpIGNvbnN0Ci17Ci0gICAgaWYgKCFlbmFibGVkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgCi0gICAgdW5zaWduZWQgaW5zcGVjdGVkUGFnZUhlaWdodCA9IG1faW5zcGVjdGVk
UGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+dmlzaWJsZUhlaWdodCgpOwotCi0gICAgLy8gRG9u
J3QgYWxsb3cgdGhlIGF0dGFjaCBpZiB0aGUgd2luZG93IHdvdWxkIGJlIHRvbyBzbWFsbCB0byBh
Y2NvbW1vZGF0ZSB0aGUgbWluaW11bSBpbnNwZWN0b3IgaGVpZ2h0LgotICAgIHJldHVybiBtaW5p
bXVtQXR0YWNoZWRIZWlnaHQgPD0gaW5zcGVjdGVkUGFnZUhlaWdodCAqIG1heGltdW1BdHRhY2hl
ZEhlaWdodFJhdGlvOwotfQotCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmF0dGFjaFdpbmRv
dygpCi17Ci0gICAgaWYgKCFlbmFibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHVuc2ln
bmVkIGluc3BlY3RlZFBhZ2VIZWlnaHQgPSBtX2luc3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpLT52
aWV3KCktPnZpc2libGVIZWlnaHQoKTsKLQotICAgIFN0cmluZyBhdHRhY2hlZEhlaWdodCA9IHNl
dHRpbmcoaW5zcGVjdG9yQXR0YWNoZWRIZWlnaHROYW1lKTsKLSAgICBib29sIHN1Y2Nlc3MgPSB0
cnVlOwotICAgIGludCBoZWlnaHQgPSBhdHRhY2hlZEhlaWdodC50b0ludCgmc3VjY2Vzcyk7Ci0g
ICAgdW5zaWduZWQgcHJlZmVycmVkSGVpZ2h0ID0gc3VjY2VzcyA/IGhlaWdodCA6IGRlZmF1bHRB
dHRhY2hlZEhlaWdodDsKLQotICAgIG1fY2xpZW50LT5hdHRhY2hXaW5kb3coKTsKLQotICAgIC8v
IFdlIG5lZWQgdG8gY29uc3RyYWluIHRoZSB3aW5kb3cgaGVpZ2h0IGhlcmUgaW4gY2FzZSB0aGUg
dXNlciBoYXMgcmVzaXplZCB0aGUgaW5zcGVjdGVkIHBhZ2UncyB3aW5kb3cgc28gdGhhdAotICAg
IC8vIHRoZSB1c2VyJ3MgcHJlZmVycmVkIGhlaWdodCB3b3VsZCBiZSB0b28gYmlnIHRvIGRpc3Bs
YXkuCi0gICAgbV9jbGllbnQtPnNldEF0dGFjaGVkV2luZG93SGVpZ2h0KGNvbnN0cmFpbmVkQXR0
YWNoZWRXaW5kb3dIZWlnaHQocHJlZmVycmVkSGVpZ2h0LCBpbnNwZWN0ZWRQYWdlSGVpZ2h0KSk7
Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGV0YWNoV2luZG93KCkKLXsKLSAgICBp
ZiAoIWVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY2xpZW50LT5kZXRhY2hXaW5k
b3coKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRBdHRhY2hlZFdpbmRvdyhi
b29sIGF0dGFjaGVkKQotewotICAgIGlmICghZW5hYmxlZCgpIHx8ICFtX2Zyb250ZW5kKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX2Zyb250ZW5kLT5zZXRBdHRhY2hlZFdpbmRvdyhhdHRhY2hl
ZCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0QXR0YWNoZWRXaW5kb3dIZWln
aHQodW5zaWduZWQgaGVpZ2h0KQotewotICAgIGlmICghZW5hYmxlZCgpKQotICAgICAgICByZXR1
cm47Ci0gICAgCi0gICAgdW5zaWduZWQgdG90YWxIZWlnaHQgPSBtX3BhZ2UtPm1haW5GcmFtZSgp
LT52aWV3KCktPnZpc2libGVIZWlnaHQoKSArIG1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCkt
PnZpZXcoKS0+dmlzaWJsZUhlaWdodCgpOwotICAgIHVuc2lnbmVkIGF0dGFjaGVkSGVpZ2h0ID0g
Y29uc3RyYWluZWRBdHRhY2hlZFdpbmRvd0hlaWdodChoZWlnaHQsIHRvdGFsSGVpZ2h0KTsKLSAg
ICAKLSAgICBzZXRTZXR0aW5nKGluc3BlY3RvckF0dGFjaGVkSGVpZ2h0TmFtZSwgU3RyaW5nOjpu
dW1iZXIoYXR0YWNoZWRIZWlnaHQpKTsKLSAgICAKLSAgICBtX2NsaWVudC0+c2V0QXR0YWNoZWRX
aW5kb3dIZWlnaHQoYXR0YWNoZWRIZWlnaHQpOwotfQotCiB2b2lkIEluc3BlY3RvckNvbnRyb2xs
ZXI6OnN0b3JlTGFzdEFjdGl2ZVBhbmVsKGNvbnN0IFN0cmluZyYgcGFuZWxOYW1lKQogewogICAg
IHNldFNldHRpbmcobGFzdEFjdGl2ZVBhbmVsU2V0dGluZ05hbWUsIHBhbmVsTmFtZSk7CkBAIC01
MDksMzcgKzQzMiwzMyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmhhbmRsZU1vdXNlUHJl
c3NPbk5vZGUoTm9kZSogbm9kZSkKICAgICBpbnNwZWN0KG5vZGUpOwogfQogCi12b2lkIEluc3Bl
Y3RvckNvbnRyb2xsZXI6Omluc3BlY3RlZFdpbmRvd1NjcmlwdE9iamVjdENsZWFyZWQoRnJhbWUq
IGZyYW1lKQordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRJbnNwZWN0b3JGcm9udGVuZENs
aWVudChQYXNzT3duUHRyPEluc3BlY3RvckZyb250ZW5kQ2xpZW50PiBjbGllbnQpCiB7Ci0gICAg
aWYgKCFlbmFibGVkKCkgfHwgIW1fZnJvbnRlbmQgfHwgZnJhbWUgIT0gbV9pbnNwZWN0ZWRQYWdl
LT5tYWluRnJhbWUoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1faW5qZWN0ZWRTY3JpcHRIb3N0
LT5kaXNjYXJkSW5qZWN0ZWRTY3JpcHRzKCk7CisgICAgQVNTRVJUKCFtX2luc3BlY3RvckZyb250
ZW5kQ2xpZW50KTsKKyAgICBtX2luc3BlY3RvckZyb250ZW5kQ2xpZW50ID0gY2xpZW50OwogfQog
Ci12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OndpbmRvd1NjcmlwdE9iamVjdEF2YWlsYWJsZSgp
Cit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6Omluc3BlY3RlZFdpbmRvd1NjcmlwdE9iamVjdENs
ZWFyZWQoRnJhbWUqIGZyYW1lKQogewotICAgIGlmICghbV9wYWdlIHx8ICFlbmFibGVkKCkpCi0g
ICAgICAgIHJldHVybjsKKyAgICAvLyBJZiB0aGUgcGFnZSBpcyBzdXBwb3NlZCB0byBzZXJ2ZSBh
cyBJbnNwZWN0b3JGcm9udGVuZCBub3RpZnkgaW5zcGV0b3IgZnJvbnRlbmQKKyAgICAvLyBjbGll
bnQgdGhhdCBpdCdzIGNsZWFyZWQgc28gdGhhdCB0aGUgY2xpZW50IGNhbiBleHBvc2UgaW5zcGVj
dG9yIGJpbmRpbmdzLgorICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2xpZW50ICYmIGZyYW1l
ID09IG1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCkpCisgICAgICAgIG1faW5zcGVjdG9yRnJv
bnRlbmRDbGllbnQtPndpbmRvd09iamVjdENsZWFyZWQoKTsKIAotICAgIC8vIEdyYW50IHRoZSBp
bnNwZWN0b3IgdGhlIGFiaWxpdHkgdG8gc2NyaXB0IHRoZSBpbnNwZWN0ZWQgcGFnZS4KLSAgICBt
X3BhZ2UtPm1haW5GcmFtZSgpLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5ncmFudFVu
aXZlcnNhbEFjY2VzcygpOwotICAgIG1fZnJvbnRlbmRTY3JpcHRTdGF0ZSA9IHNjcmlwdFN0YXRl
RnJvbVBhZ2UoZGVidWdnZXJXb3JsZCgpLCBtX3BhZ2UpOwotICAgIFNjcmlwdEdsb2JhbE9iamVj
dDo6c2V0KG1fZnJvbnRlbmRTY3JpcHRTdGF0ZSwgIkluc3BlY3RvckJhY2tlbmQiLCBtX2luc3Bl
Y3RvckJhY2tlbmQuZ2V0KCkpOwotICAgIFNjcmlwdEdsb2JhbE9iamVjdDo6c2V0KG1fZnJvbnRl
bmRTY3JpcHRTdGF0ZSwgIkluc3BlY3RvckZyb250ZW5kSG9zdCIsIG1faW5zcGVjdG9yRnJvbnRl
bmRIb3N0LmdldCgpKTsKKyAgICBpZiAoIWVuYWJsZWQoKSB8fCAhbV9mcm9udGVuZCB8fCBmcmFt
ZSAhPSBtX2luc3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpKQorICAgICAgICByZXR1cm47CisgICAg
bV9pbmplY3RlZFNjcmlwdEhvc3QtPmRpc2NhcmRJbmplY3RlZFNjcmlwdHMoKTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzY3JpcHRPYmplY3RSZWFkeSgpCit2b2lkIEluc3BlY3Rv
ckNvbnRyb2xsZXI6OnNldEZyb250ZW5kKFBhc3NPd25QdHI8SW5zcGVjdG9yRnJvbnRlbmQ+IGZy
b250ZW5kKQogewotICAgIEFTU0VSVChtX2Zyb250ZW5kU2NyaXB0U3RhdGUpOwotICAgIGlmICgh
bV9mcm9udGVuZFNjcmlwdFN0YXRlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBTY3JpcHRPYmpl
Y3Qgd2ViSW5zcGVjdG9yT2JqOwotICAgIGlmICghU2NyaXB0R2xvYmFsT2JqZWN0OjpnZXQobV9m
cm9udGVuZFNjcmlwdFN0YXRlLCAiV2ViSW5zcGVjdG9yIiwgd2ViSW5zcGVjdG9yT2JqKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIHNldEZyb250ZW5kUHJveHlPYmplY3QobV9mcm9udGVuZFNjcmlw
dFN0YXRlLCB3ZWJJbnNwZWN0b3JPYmopOwotCi0jaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdH
RVIpCisgICAgbV9vcGVuaW5nRnJvbnRlbmQgPSBmYWxzZTsKKyAgICBtX2Zyb250ZW5kID0gZnJv
bnRlbmQ7CisgICAgcmVsZWFzZURPTUFnZW50KCk7CisgICAgbV9kb21BZ2VudCA9IEluc3BlY3Rv
ckRPTUFnZW50OjpjcmVhdGUobV9mcm9udGVuZC5nZXQoKSk7CisgICAgaWYgKG1fdGltZWxpbmVB
Z2VudCkKKyAgICAgICAgbV90aW1lbGluZUFnZW50LT5yZXNldEZyb250ZW5kUHJveHlPYmplY3Qo
bV9mcm9udGVuZC5nZXQoKSk7CisjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpICYmIFVT
RShKU0MpCiAgICAgU3RyaW5nIGRlYnVnZ2VyRW5hYmxlZCA9IHNldHRpbmcoZGVidWdnZXJFbmFi
bGVkU2V0dGluZ05hbWUpOwogICAgIGlmIChkZWJ1Z2dlckVuYWJsZWQgPT0gInRydWUiKQogICAg
ICAgICBlbmFibGVEZWJ1Z2dlcigpOwpAQCAtNTQ4LDQxICs0NjcsMjMgQEAgdm9pZCBJbnNwZWN0
b3JDb250cm9sbGVyOjpzY3JpcHRPYmplY3RSZWFkeSgpCiAgICAgICAgIGVuYWJsZVByb2ZpbGVy
KCk7CiAjZW5kaWYKIAotICAgIC8vIE1ha2Ugc3VyZSBvdXIgd2luZG93IGlzIHZpc2libGUgbm93
IHRoYXQgdGhlIHBhZ2UgbG9hZGVkCi0gICAgc2hvd1dpbmRvdygpOwotCi0gICAgbV9jbGllbnQt
Pmluc3BlY3RvcldpbmRvd09iamVjdENsZWFyZWQoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDb250
cm9sbGVyOjpzZXRGcm9udGVuZFByb3h5T2JqZWN0KFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwg
U2NyaXB0T2JqZWN0IHdlYkluc3BlY3Rvck9iaiwgU2NyaXB0T2JqZWN0KQotewotICAgIG1fZnJv
bnRlbmRTY3JpcHRTdGF0ZSA9IHNjcmlwdFN0YXRlOwotICAgIG1fZnJvbnRlbmQuc2V0KG5ldyBJ
bnNwZWN0b3JGcm9udGVuZCh0aGlzLCB3ZWJJbnNwZWN0b3JPYmopKTsKLSAgICByZWxlYXNlRE9N
QWdlbnQoKTsKLSAgICBtX2RvbUFnZW50ID0gSW5zcGVjdG9yRE9NQWdlbnQ6OmNyZWF0ZShtX2Zy
b250ZW5kLmdldCgpKTsKLSAgICBpZiAobV90aW1lbGluZUFnZW50KQotICAgICAgICBtX3RpbWVs
aW5lQWdlbnQtPnJlc2V0RnJvbnRlbmRQcm94eU9iamVjdChtX2Zyb250ZW5kLmdldCgpKTsKKyAg
ICBmcm9udGVuZFJlYWR5KCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2hvdygp
CiB7CiAgICAgaWYgKCFlbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAo
IW1fcGFnZSkgewotICAgICAgICBpZiAobV9mcm9udGVuZCkKLSAgICAgICAgICAgIHJldHVybjsg
Ly8gV2UgYXJlIHVzaW5nIGN1c3RvbSBmcm9udGVuZCAtIG5vIG5lZWQgdG8gY3JlYXRlIHBhZ2Uu
CiAKLSAgICAgICAgbV9wYWdlID0gbV9jbGllbnQtPmNyZWF0ZVBhZ2UoKTsKLSAgICAgICAgaWYg
KCFtX3BhZ2UpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fcGFnZS0+c2V0UGFyZW50
SW5zcGVjdG9yQ29udHJvbGxlcih0aGlzKTsKLQotICAgICAgICAvLyBzaG93V2luZG93KCkgd2ls
bCBiZSBjYWxsZWQgYWZ0ZXIgdGhlIHBhZ2UgbG9hZHMgaW4gc2NyaXB0T2JqZWN0UmVhZHkoKQor
ICAgIGlmIChtX29wZW5pbmdGcm9udGVuZCkKICAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlm
IChtX2Zyb250ZW5kKQorICAgICAgICBtX2Zyb250ZW5kLT5icmluZ1RvRnJvbnQoKTsKKyAgICBl
bHNlIHsKKyAgICAgICAgbV9vcGVuaW5nRnJvbnRlbmQgPSB0cnVlOworICAgICAgICBtX2NsaWVu
dC0+b3Blbkluc3BlY3RvckZyb250ZW5kKHRoaXMpOwogICAgIH0KLQotICAgIHNob3dXaW5kb3co
KTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzaG93UGFuZWwoU3BlY2lhbFBhbmVs
cyBwYW5lbCkKQEAgLTYwOCw0NiArNTA5LDI3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6
Y2xvc2UoKQogICAgIGlmICghZW5hYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKKyAgICBpZiAo
IW1fZnJvbnRlbmQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2Nsb3NpbmdGcm9udGVu
ZCkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY2xvc2luZ0Zyb250ZW5kID0gdHJ1ZTsKKworICAg
IHdpbGxDbG9zZUZyb250ZW5kKCk7CisKKyAgICBoaWRlSGlnaGxpZ2h0KCk7CisKICNpZiBFTkFC
TEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgICBzdG9wVXNlckluaXRpYXRlZFByb2ZpbGluZygp
OwogICAgIGRpc2FibGVEZWJ1Z2dlcigpOwogI2VuZGlmCi0gICAgY2xvc2VXaW5kb3coKTsKIAog
ICAgIHJlbGVhc2VET01BZ2VudCgpOwotICAgIG1fZnJvbnRlbmQuc2V0KDApOwotICAgIG1fdGlt
ZWxpbmVBZ2VudCA9IDA7Ci0gICAgbV9mcm9udGVuZFNjcmlwdFN0YXRlID0gMDsKLSAgICBpZiAo
bV9wYWdlKSB7Ci0gICAgICAgIGlmICghbV9wYWdlLT5tYWluRnJhbWUoKSB8fCAhbV9wYWdlLT5t
YWluRnJhbWUoKS0+bG9hZGVyKCkgfHwgIW1fcGFnZS0+bWFpbkZyYW1lKCktPmxvYWRlcigpLT5p
c0xvYWRpbmcoKSkgewotICAgICAgICAgICAgbV9wYWdlLT5zZXRQYXJlbnRJbnNwZWN0b3JDb250
cm9sbGVyKDApOwotICAgICAgICAgICAgbV9wYWdlID0gMDsKLSAgICAgICAgfQotICAgIH0KLX0K
KyAgICBtX2Zyb250ZW5kLmNsZWFyKCk7CisgICAgbV90aW1lbGluZUFnZW50LmNsZWFyKCk7CiAK
LXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2hvd1dpbmRvdygpCi17Ci0gICAgQVNTRVJUKGVu
YWJsZWQoKSk7Ci0KLSAgICB1bnNpZ25lZCBpbnNwZWN0ZWRQYWdlSGVpZ2h0ID0gbV9pbnNwZWN0
ZWRQYWdlLT5tYWluRnJhbWUoKS0+dmlldygpLT52aXNpYmxlSGVpZ2h0KCk7Ci0KLSAgICBtX2Ns
aWVudC0+c2hvd1dpbmRvdygpOwotCi0gICAgU3RyaW5nIGF0dGFjaGVkSGVpZ2h0ID0gc2V0dGlu
ZyhpbnNwZWN0b3JBdHRhY2hlZEhlaWdodE5hbWUpOwotICAgIGJvb2wgc3VjY2VzcyA9IHRydWU7
Ci0gICAgaW50IGhlaWdodCA9IGF0dGFjaGVkSGVpZ2h0LnRvSW50KCZzdWNjZXNzKTsKLSAgICB1
bnNpZ25lZCBwcmVmZXJyZWRIZWlnaHQgPSBzdWNjZXNzID8gaGVpZ2h0IDogZGVmYXVsdEF0dGFj
aGVkSGVpZ2h0OwotCi0gICAgLy8gVGhpcyBjYWxsIG1pZ2h0IG5vdCBnbyB0aHJvdWdoIChpZiB0
aGUgd2luZG93IHN0YXJ0cyBvdXQgZGV0YWNoZWQpLCBidXQgaWYgdGhlIHdpbmRvdyBpcyBpbml0
aWFsbHkgY3JlYXRlZCBhdHRhY2hlZCwKLSAgICAvLyBJbnNwZWN0b3JDb250cm9sbGVyOjphdHRh
Y2hXaW5kb3cgaXMgbmV2ZXIgY2FsbGVkLCBzbyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0byBzZXQg
dGhlIGF0dGFjaGVkV2luZG93SGVpZ2h0LgotICAgIC8vIEZJWE1FOiBDbGVhbiB1cCBjb2RlIHNv
IHdlIG9ubHkgaGF2ZSB0byBjYWxsIHNldEF0dGFjaGVkV2luZG93SGVpZ2h0IGluIEluc3BlY3Rv
ckNvbnRyb2xsZXI6OmF0dGFjaFdpbmRvdwotICAgIG1fY2xpZW50LT5zZXRBdHRhY2hlZFdpbmRv
d0hlaWdodChjb25zdHJhaW5lZEF0dGFjaGVkV2luZG93SGVpZ2h0KHByZWZlcnJlZEhlaWdodCwg
aW5zcGVjdGVkUGFnZUhlaWdodCkpOwotfQotCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmNs
b3NlV2luZG93KCkKLXsKLSAgICBtX2NsaWVudC0+Y2xvc2VXaW5kb3coKTsKKyAgICBtX2Nsb3Np
bmdGcm9udGVuZCA9IGZhbHNlOwogfQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnJlbGVh
c2VET01BZ2VudCgpCkBAIC02NTYsNyArNTM4LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVy
OjpyZWxlYXNlRE9NQWdlbnQoKQogICAgIC8vIG5vIHJlZmVyZW5jZXMgdG8gdGhlIERPTSBhZ2Vu
dCBmcm9tIHRoZSBET00gdHJlZS4KICAgICBpZiAobV9kb21BZ2VudCkKICAgICAgICAgbV9kb21B
Z2VudC0+cmVzZXQoKTsKLSAgICBtX2RvbUFnZW50ID0gMDsKKyAgICBtX2RvbUFnZW50LmNsZWFy
KCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cG9wdWxhdGVTY3JpcHRPYmplY3Rz
KCkKQEAgLTY3Nyw3ICs1NTksNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnBvcHVsYXRl
U2NyaXB0T2JqZWN0cygpCiAgICAgICAgIG1fZnJvbnRlbmQtPnVwZGF0ZUNvbnNvbGVNZXNzYWdl
RXhwaXJlZENvdW50KG1fZXhwaXJlZENvbnNvbGVNZXNzYWdlQ291bnQpOwogICAgIHVuc2lnbmVk
IG1lc3NhZ2VDb3VudCA9IG1fY29uc29sZU1lc3NhZ2VzLnNpemUoKTsKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbWVzc2FnZUNvdW50OyArK2kpCi0gICAgICAgIG1fY29uc29sZU1lc3Nh
Z2VzW2ldLT5hZGRUb0NvbnNvbGUobV9mcm9udGVuZC5nZXQoKSk7CisgICAgICAgIG1fY29uc29s
ZU1lc3NhZ2VzW2ldLT5hZGRUb0Zyb250ZW5kKG1fZnJvbnRlbmQuZ2V0KCksIG1faW5qZWN0ZWRT
Y3JpcHRIb3N0LmdldCgpKTsKIAogI2lmIEVOQUJMRShEQVRBQkFTRSkKICAgICBEYXRhYmFzZVJl
c291cmNlc01hcDo6aXRlcmF0b3IgZGF0YWJhc2VzRW5kID0gbV9kYXRhYmFzZVJlc291cmNlcy5l
bmQoKTsKQEAgLTc1Miw3ICs2MzQsOCBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZENv
bW1pdExvYWQoRG9jdW1lbnRMb2FkZXIqIGxvYWRlcikKICAgICBBU1NFUlQobV9pbnNwZWN0ZWRQ
YWdlKTsKIAogICAgIGlmIChsb2FkZXItPmZyYW1lKCkgPT0gbV9pbnNwZWN0ZWRQYWdlLT5tYWlu
RnJhbWUoKSkgewotICAgICAgICBtX2NsaWVudC0+aW5zcGVjdGVkVVJMQ2hhbmdlZChsb2FkZXIt
PnVybCgpLnN0cmluZygpKTsKKyAgICAgICAgaWYgKG1fZnJvbnRlbmQpCisgICAgICAgICAgICBt
X2Zyb250ZW5kLT5pbnNwZWN0ZWRVUkxDaGFuZ2VkKGxvYWRlci0+dXJsKCkuc3RyaW5nKCkpOwog
CiAgICAgICAgIG1faW5qZWN0ZWRTY3JpcHRIb3N0LT5kaXNjYXJkSW5qZWN0ZWRTY3JpcHRzKCk7
CiAgICAgICAgIGNsZWFyQ29uc29sZU1lc3NhZ2VzKCk7CkBAIC0xMzU5LDE2ICsxMjQyLDYgQEAg
SW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlKiBJbnNwZWN0b3JDb250cm9sbGVyOjpnZXRET01T
dG9yYWdlUmVzb3VyY2VGb3JJZChpbnQKIH0KICNlbmRpZgogCi12b2lkIEluc3BlY3RvckNvbnRy
b2xsZXI6Om1vdmVXaW5kb3dCeShmbG9hdCB4LCBmbG9hdCB5KSBjb25zdAotewotICAgIGlmICgh
bV9wYWdlIHx8ICFlbmFibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEZsb2F0UmVjdCBm
cmFtZVJlY3QgPSBtX3BhZ2UtPmNocm9tZSgpLT53aW5kb3dSZWN0KCk7Ci0gICAgZnJhbWVSZWN0
Lm1vdmUoeCwgeSk7Ci0gICAgbV9wYWdlLT5jaHJvbWUoKS0+c2V0V2luZG93UmVjdChmcmFtZVJl
Y3QpOwotfQotCiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiB2b2lkIEluc3BlY3Rv
ckNvbnRyb2xsZXI6OmFkZFByb2ZpbGUoUGFzc1JlZlB0cjxTY3JpcHRQcm9maWxlPiBwcnBQcm9m
aWxlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCkKIHsKQEAg
LTE0MjEsNyArMTI5NCw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6Z2V0UHJvZmlsZShs
b25nIGNhbGxJZCwgdW5zaWduZWQgdWlkKQogICAgIFByb2ZpbGVzTWFwOjppdGVyYXRvciBpdCA9
IG1fcHJvZmlsZXMuZmluZCh1aWQpOwogI2lmIFVTRShKU0MpCiAgICAgaWYgKGl0ICE9IG1fcHJv
ZmlsZXMuZW5kKCkpCi0gICAgICAgIG1fZnJvbnRlbmQtPmRpZEdldFByb2ZpbGUoY2FsbElkLCB0
b0pTKG1fZnJvbnRlbmRTY3JpcHRTdGF0ZSwgaXQtPnNlY29uZC5nZXQoKSkpOworICAgICAgICBt
X2Zyb250ZW5kLT5kaWRHZXRQcm9maWxlKGNhbGxJZCwgdG9KUyhtX2Zyb250ZW5kLT5zY3JpcHRT
dGF0ZSgpLCBpdC0+c2Vjb25kLmdldCgpKSk7CiAjZW5kaWYKIH0KIApAQCAtMTU1OCw3ICsxNDMx
LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjplbmFibGVEZWJ1Z2dlcigpCiAgICAgaWYg
KG1fZGVidWdnZXJFbmFibGVkKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIW1fZnJvbnRl
bmRTY3JpcHRTdGF0ZSB8fCAhbV9mcm9udGVuZCkKKyAgICBpZiAoIW1fZnJvbnRlbmQpCiAgICAg
ICAgIG1fYXR0YWNoRGVidWdnZXJXaGVuU2hvd24gPSB0cnVlOwogICAgIGVsc2UgewogICAgICAg
ICBtX2Zyb250ZW5kLT5hdHRhY2hEZWJ1Z2dlcldoZW5TaG93bigpOwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQ29udHJvbGxlci5oCmluZGV4IDUwMGIwZGYuLjFjZTRmYzMgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAorKysgYi9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKQEAgLTY2LDcgKzY2LDcgQEAgY2xhc3MgSW5q
ZWN0ZWRTY3JpcHRIb3N0OwogY2xhc3MgSW5zcGVjdG9yQmFja2VuZDsKIGNsYXNzIEluc3BlY3Rv
ckNsaWVudDsKIGNsYXNzIEluc3BlY3RvckZyb250ZW5kOwotY2xhc3MgSW5zcGVjdG9yRnJvbnRl
bmRIb3N0OworY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ7CiBjbGFzcyBJbnNwZWN0b3JU
aW1lbGluZUFnZW50OwogY2xhc3MgSmF2YVNjcmlwdENhbGxGcmFtZTsKIGNsYXNzIEtVUkw7CkBA
IC0xMTQsMTEgKzExNCw5IEBAIHB1YmxpYzoKICAgICB+SW5zcGVjdG9yQ29udHJvbGxlcigpOwog
CiAgICAgSW5zcGVjdG9yQmFja2VuZCogaW5zcGVjdG9yQmFja2VuZCgpIHsgcmV0dXJuIG1faW5z
cGVjdG9yQmFja2VuZC5nZXQoKTsgfQotICAgIEluc3BlY3RvckZyb250ZW5kSG9zdCogaW5zcGVj
dG9yRnJvbnRlbmRIb3N0KCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZEhvc3QuZ2V0KCk7
IH0KICAgICBJbmplY3RlZFNjcmlwdEhvc3QqIGluamVjdGVkU2NyaXB0SG9zdCgpIHsgcmV0dXJu
IG1faW5qZWN0ZWRTY3JpcHRIb3N0LmdldCgpOyB9CiAKICAgICB2b2lkIGluc3BlY3RlZFBhZ2VE
ZXN0cm95ZWQoKTsKLSAgICB2b2lkIHBhZ2VEZXN0cm95ZWQoKSB7IG1fcGFnZSA9IDA7IH0KIAog
ICAgIGJvb2wgZW5hYmxlZCgpIGNvbnN0OwogCkBAIC0xMzUsMjggKzEzMywyMiBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzaG93UGFuZWwoU3BlY2lhbFBhbmVscyk7CiAgICAgdm9pZCBjbG9zZSgpOwog
Ci0gICAgYm9vbCB3aW5kb3dWaXNpYmxlKCk7Ci0gICAgdm9pZCBzZXRXaW5kb3dWaXNpYmxlKGJv
b2wgdmlzaWJsZSA9IHRydWUsIGJvb2wgYXR0YWNoZWQgPSBmYWxzZSk7Ci0KICAgICB2b2lkIGFk
ZE1lc3NhZ2VUb0NvbnNvbGUoTWVzc2FnZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZl
bCwgU2NyaXB0Q2FsbFN0YWNrKik7CiAgICAgdm9pZCBhZGRNZXNzYWdlVG9Db25zb2xlKE1lc3Nh
Z2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VJRCk7CiAgICAgdm9p
ZCBjbGVhckNvbnNvbGVNZXNzYWdlcygpOwogICAgIGNvbnN0IFZlY3RvcjxDb25zb2xlTWVzc2Fn
ZSo+JiBjb25zb2xlTWVzc2FnZXMoKSBjb25zdCB7IHJldHVybiBtX2NvbnNvbGVNZXNzYWdlczsg
fQogCi0gICAgYm9vbCBjYW5BdHRhY2hXaW5kb3coKSBjb25zdDsKLSAgICB2b2lkIGF0dGFjaFdp
bmRvdygpOwotICAgIHZvaWQgZGV0YWNoV2luZG93KCk7Ci0KICAgICB2b2lkIHRvZ2dsZVNlYXJj
aEZvck5vZGVJblBhZ2UoKTsKICAgICBib29sIHNlYXJjaGluZ0Zvck5vZGVJblBhZ2UoKSBjb25z
dCB7IHJldHVybiBtX3NlYXJjaGluZ0Zvck5vZGU7IH0KICAgICB2b2lkIG1vdXNlRGlkTW92ZU92
ZXJFbGVtZW50KGNvbnN0IEhpdFRlc3RSZXN1bHQmLCB1bnNpZ25lZCBtb2RpZmllckZsYWdzKTsK
ICAgICB2b2lkIGhhbmRsZU1vdXNlUHJlc3NPbk5vZGUoTm9kZSopOwogCisgICAgdm9pZCBzZXRJ
bnNwZWN0b3JGcm9udGVuZENsaWVudChQYXNzT3duUHRyPEluc3BlY3RvckZyb250ZW5kQ2xpZW50
PiBjbGllbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAKICAgICB2b2lkIGluc3BlY3RlZFdpbmRvd1NjcmlwdE9iamVjdENsZWFyZWQo
RnJhbWUqKTsKLSAgICB2b2lkIHdpbmRvd1NjcmlwdE9iamVjdEF2YWlsYWJsZSgpOwogCi0gICAg
dm9pZCBzZXRGcm9udGVuZFByb3h5T2JqZWN0KFNjcmlwdFN0YXRlKiBzdGF0ZSwgU2NyaXB0T2Jq
ZWN0IHdlYkluc3BlY3Rvck9iaiwgU2NyaXB0T2JqZWN0IGluamVjdGVkU2NyaXB0T2JqID0gU2Ny
aXB0T2JqZWN0KCkpOwotICAgIFNjcmlwdFN0YXRlKiBmcm9udGVuZFNjcmlwdFN0YXRlKCkgY29u
c3QgeyByZXR1cm4gbV9mcm9udGVuZFNjcmlwdFN0YXRlOyB9CisgICAgYm9vbCB3aW5kb3dWaXNp
YmxlKCk7CisgICAgdm9pZCBzZXRGcm9udGVuZChQYXNzT3duUHRyPEluc3BlY3RvckZyb250ZW5k
Pik7CiAKICAgICB2b2lkIHBvcHVsYXRlU2NyaXB0T2JqZWN0cygpOwogICAgIHZvaWQgcmVzZXRT
Y3JpcHRPYmplY3RzKCk7CkBAIC0yNTYsMTUgKzI0OCwxMSBAQCBwdWJsaWM6CiBwcml2YXRlOgog
ICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBGcm9udGVuZFNldHRpbmdzU2V0dGluZ05hbWU7
CiAgICAgZnJpZW5kIGNsYXNzIEluc3BlY3RvckJhY2tlbmQ7Ci0gICAgZnJpZW5kIGNsYXNzIElu
c3BlY3RvckZyb250ZW5kSG9zdDsKICAgICBmcmllbmQgY2xhc3MgSW5qZWN0ZWRTY3JpcHRIb3N0
OworICAgIHZvaWQgZnJvbnRlbmRSZWFkeSgpOworICAgIHZvaWQgd2lsbENsb3NlRnJvbnRlbmQo
KTsKICAgICAvLyBGb2xsb3dpbmcgYXJlIHVzZWQgZnJvbSBJbnNwZWN0b3JCYWNrZW5kIGFuZCBp
bnRlcm5hbGx5LgotICAgIHZvaWQgc2NyaXB0T2JqZWN0UmVhZHkoKTsKLSAgICB2b2lkIG1vdmVX
aW5kb3dCeShmbG9hdCB4LCBmbG9hdCB5KSBjb25zdDsKLSAgICB2b2lkIHNldEF0dGFjaGVkV2lu
ZG93KGJvb2wpOwotICAgIHZvaWQgc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVp
Z2h0KTsKICAgICB2b2lkIHN0b3JlTGFzdEFjdGl2ZVBhbmVsKGNvbnN0IFN0cmluZyYgcGFuZWxO
YW1lKTsKLSAgICB2b2lkIGNsb3NlV2luZG93KCk7CiAgICAgSW5zcGVjdG9yRE9NQWdlbnQqIGRv
bUFnZW50KCkgeyByZXR1cm4gbV9kb21BZ2VudC5nZXQoKTsgfQogICAgIHZvaWQgcmVsZWFzZURP
TUFnZW50KCk7CiAKQEAgLTMwNSw4ICsyOTMsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgcHJ1bmVS
ZXNvdXJjZXMoUmVzb3VyY2VzTWFwKiwgRG9jdW1lbnRMb2FkZXIqIGxvYWRlclRvS2VlcCA9IDAp
OwogICAgIHZvaWQgcmVtb3ZlQWxsUmVzb3VyY2VzKFJlc291cmNlc01hcCogbWFwKSB7IHBydW5l
UmVzb3VyY2VzKG1hcCk7IH0KIAotICAgIHZvaWQgc2hvd1dpbmRvdygpOwotCiAgICAgYm9vbCBp
c01haW5SZXNvdXJjZUxvYWRlcihEb2N1bWVudExvYWRlciogbG9hZGVyLCBjb25zdCBLVVJMJiBy
ZXF1ZXN0VXJsKTsKIAogICAgIFNwZWNpYWxQYW5lbHMgc3BlY2lhbFBhbmVsRm9ySlNOYW1lKGNv
bnN0IFN0cmluZyYgcGFuZWxOYW1lKTsKQEAgLTMxNSwxMCArMzAxLDEyIEBAIHByaXZhdGU6CiAK
ICAgICBQYWdlKiBtX2luc3BlY3RlZFBhZ2U7CiAgICAgSW5zcGVjdG9yQ2xpZW50KiBtX2NsaWVu
dDsKKyAgICBPd25QdHI8SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ+IG1faW5zcGVjdG9yRnJvbnRl
bmRDbGllbnQ7CisgICAgYm9vbCBtX29wZW5pbmdGcm9udGVuZDsKKyAgICBib29sIG1fY2xvc2lu
Z0Zyb250ZW5kOwogICAgIE93blB0cjxJbnNwZWN0b3JGcm9udGVuZD4gbV9mcm9udGVuZDsKICAg
ICBSZWZQdHI8SW5zcGVjdG9yRE9NQWdlbnQ+IG1fZG9tQWdlbnQ7CiAgICAgT3duUHRyPEluc3Bl
Y3RvclRpbWVsaW5lQWdlbnQ+IG1fdGltZWxpbmVBZ2VudDsKLSAgICBQYWdlKiBtX3BhZ2U7CiAg
ICAgUmVmUHRyPE5vZGU+IG1fbm9kZVRvRm9jdXM7CiAgICAgUmVmUHRyPEluc3BlY3RvclJlc291
cmNlPiBtX21haW5SZXNvdXJjZTsKICAgICBSZXNvdXJjZXNNYXAgbV9yZXNvdXJjZXM7CkBAIC0z
MzQsOCArMzIyLDYgQEAgcHJpdmF0ZToKICNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCiAgICAgRE9N
U3RvcmFnZVJlc291cmNlc01hcCBtX2RvbVN0b3JhZ2VSZXNvdXJjZXM7CiAjZW5kaWYKLSAgICBT
Y3JpcHRTdGF0ZSogbV9mcm9udGVuZFNjcmlwdFN0YXRlOwotICAgIGJvb2wgbV93aW5kb3dWaXNp
YmxlOwogICAgIFNwZWNpYWxQYW5lbHMgbV9zaG93QWZ0ZXJWaXNpYmxlOwogICAgIFJlZlB0cjxO
b2RlPiBtX2hpZ2hsaWdodGVkTm9kZTsKICAgICB1bnNpZ25lZCBtX2dyb3VwTGV2ZWw7CkBAIC0z
NDQsNyArMzMwLDYgQEAgcHJpdmF0ZToKICAgICBib29sIG1fcmVzb3VyY2VUcmFja2luZ0VuYWJs
ZWQ7CiAgICAgYm9vbCBtX3Jlc291cmNlVHJhY2tpbmdTZXR0aW5nc0xvYWRlZDsKICAgICBSZWZQ
dHI8SW5zcGVjdG9yQmFja2VuZD4gbV9pbnNwZWN0b3JCYWNrZW5kOwotICAgIFJlZlB0cjxJbnNw
ZWN0b3JGcm9udGVuZEhvc3Q+IG1faW5zcGVjdG9yRnJvbnRlbmRIb3N0OwogICAgIFJlZlB0cjxJ
bmplY3RlZFNjcmlwdEhvc3Q+IG1faW5qZWN0ZWRTY3JpcHRIb3N0OwogCiAgICAgdHlwZWRlZiBI
YXNoTWFwPFN0cmluZywgU3RyaW5nPiBTZXR0aW5nczsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckZyb250ZW5kLmNwcAppbmRleCBiMzNlYTZhLi5iMzE1ZGFiIDEwMDc1NQotLS0gYS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRnJvbnRlbmQuY3BwCkBAIC00OCwxNCArNDgsMTYgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1JbnNwZWN0b3JGcm9udGVuZDo6SW5zcGVjdG9yRnJvbnRlbmQoSW5zcGVjdG9y
Q29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciwgU2NyaXB0T2JqZWN0IHdlYkluc3BlY3Rv
cikKLSAgICA6IG1faW5zcGVjdG9yQ29udHJvbGxlcihpbnNwZWN0b3JDb250cm9sbGVyKQotICAg
ICwgbV93ZWJJbnNwZWN0b3Iod2ViSW5zcGVjdG9yKQorSW5zcGVjdG9yRnJvbnRlbmQ6Okluc3Bl
Y3RvckZyb250ZW5kKFNjcmlwdE9iamVjdCB3ZWJJbnNwZWN0b3IpCisgICAgOiBtX3dlYkluc3Bl
Y3Rvcih3ZWJJbnNwZWN0b3IpCiB7CiB9CiAKIEluc3BlY3RvckZyb250ZW5kOjp+SW5zcGVjdG9y
RnJvbnRlbmQoKSAKIHsKKyAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJbnNw
ZWN0b3IsICJjbG9zZSIpOworICAgIGZ1bmN0aW9uLmNhbGwoKTsKKwogICAgIG1fd2ViSW5zcGVj
dG9yID0gU2NyaXB0T2JqZWN0KCk7CiB9CiAKQEAgLTkwLDcgKzkyLDcgQEAgdm9pZCBJbnNwZWN0
b3JGcm9udGVuZDo6dXBkYXRlQ29uc29sZU1lc3NhZ2VFeHBpcmVkQ291bnQodW5zaWduZWQgY291
bnQpCiAgICAgZnVuY3Rpb24uY2FsbCgpOwogfQogCi12b2lkIEluc3BlY3RvckZyb250ZW5kOjph
ZGRDb25zb2xlTWVzc2FnZShjb25zdCBTY3JpcHRPYmplY3QmIG1lc3NhZ2VPYmosIGNvbnN0IFZl
Y3RvcjxTY3JpcHRTdHJpbmc+JiBmcmFtZXMsIFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgY29u
c3QgVmVjdG9yPFNjcmlwdFZhbHVlPiBhcmd1bWVudHMsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkK
K3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmFkZENvbnNvbGVNZXNzYWdlKGNvbnN0IFNjcmlwdE9i
amVjdCYgbWVzc2FnZU9iaiwgY29uc3QgVmVjdG9yPFNjcmlwdFN0cmluZz4mIGZyYW1lcywgY29u
c3QgVmVjdG9yPFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+ID4mIGFyZ3VtZW50cywgY29u
c3QgU3RyaW5nJiBtZXNzYWdlKQogewogICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbiht
X3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7IAogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50
KCJhZGRDb25zb2xlTWVzc2FnZSIpOwpAQCAtOTksMTAgKzEwMSw4IEBAIHZvaWQgSW5zcGVjdG9y
RnJvbnRlbmQ6OmFkZENvbnNvbGVNZXNzYWdlKGNvbnN0IFNjcmlwdE9iamVjdCYgbWVzc2FnZU9i
aiwgY29uc3QKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZyYW1lcy5zaXplKCk7
ICsraSkKICAgICAgICAgICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGZyYW1lc1tpXSk7CiAg
ICAgfSBlbHNlIGlmICghYXJndW1lbnRzLmlzRW1wdHkoKSkgewotICAgICAgICBJbmplY3RlZFNj
cmlwdCBpbmplY3RlZFNjcmlwdCA9IG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5qZWN0ZWRTY3Jp
cHRIb3N0KCktPmluamVjdGVkU2NyaXB0Rm9yKHNjcmlwdFN0YXRlKTsKICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3VtZW50cy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAg
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZFZhbHVlID0gaW5qZWN0ZWRT
Y3JpcHQud3JhcEZvckNvbnNvbGUoYXJndW1lbnRzW2ldKTsKLSAgICAgICAgICAgIFNjcmlwdFZh
bHVlIHNjcmlwdFZhbHVlID0gU2NyaXB0VmFsdWU6OmRlc2VyaWFsaXplKHRoaXMtPnNjcmlwdFN0
YXRlKCksIHNlcmlhbGl6ZWRWYWx1ZS5nZXQoKSk7CisgICAgICAgICAgICBTY3JpcHRWYWx1ZSBz
Y3JpcHRWYWx1ZSA9IFNjcmlwdFZhbHVlOjpkZXNlcmlhbGl6ZShzY3JpcHRTdGF0ZSgpLCBhcmd1
bWVudHNbaV0uZ2V0KCkpOwogICAgICAgICAgICAgaWYgKHNjcmlwdFZhbHVlLmhhc05vVmFsdWUo
KSkgewogICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAg
ICAgIHJldHVybjsKQEAgLTIxNiw2ICsyMTYsMTkgQEAgdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6
cmVzZXQoKQogICAgIGNhbGxTaW1wbGVGdW5jdGlvbigicmVzZXQiKTsKIH0KIAordm9pZCBJbnNw
ZWN0b3JGcm9udGVuZDo6YnJpbmdUb0Zyb250KCkKK3sKKyAgICBjYWxsU2ltcGxlRnVuY3Rpb24o
ImJyaW5nVG9Gcm9udCIpOworfQorCit2b2lkIEluc3BlY3RvckZyb250ZW5kOjppbnNwZWN0ZWRV
UkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYgdXJsKQoreworICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBm
dW5jdGlvbihtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7CisgICAgZnVuY3Rpb24uYXBwZW5k
QXJndW1lbnQoImluc3BlY3RlZFVSTENoYW5nZWQiKTsKKyAgICBmdW5jdGlvbi5hcHBlbmRBcmd1
bWVudCh1cmwpOworICAgIGZ1bmN0aW9uLmNhbGwoKTsKK30KKwogdm9pZCBJbnNwZWN0b3JGcm9u
dGVuZDo6cmVzb3VyY2VUcmFja2luZ1dhc0VuYWJsZWQoKQogewogICAgIGNhbGxTaW1wbGVGdW5j
dGlvbigicmVzb3VyY2VUcmFja2luZ1dhc0VuYWJsZWQiKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JGcm9udGVuZC5oCmluZGV4IGZhMDllYmEuLjc5NTJjMWMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRnJvbnRlbmQuaApAQCAtNDgsNyArNDgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
ICAgICBjbGFzcyBJbnNwZWN0b3JGcm9udGVuZCA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiAgICAg
cHVibGljOgotICAgICAgICBJbnNwZWN0b3JGcm9udGVuZChJbnNwZWN0b3JDb250cm9sbGVyKiBp
bnNwZWN0b3JDb250cm9sbGVyLCBTY3JpcHRPYmplY3Qgd2ViSW5zcGVjdG9yKTsKKyAgICAgICAg
SW5zcGVjdG9yRnJvbnRlbmQoU2NyaXB0T2JqZWN0IHdlYkluc3BlY3Rvcik7CiAgICAgICAgIH5J
bnNwZWN0b3JGcm9udGVuZCgpOwogCiAgICAgICAgIFNjcmlwdEFycmF5IG5ld1NjcmlwdEFycmF5
KCk7CkBAIC01OSw3ICs1OSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBw
b3B1bGF0ZUZyb250ZW5kU2V0dGluZ3MoY29uc3QgU3RyaW5nJiBzZXR0aW5ncyk7CiAKICAgICAg
ICAgdm9pZCB1cGRhdGVDb25zb2xlTWVzc2FnZUV4cGlyZWRDb3VudCh1bnNpZ25lZCBjb3VudCk7
Ci0gICAgICAgIHZvaWQgYWRkQ29uc29sZU1lc3NhZ2UoY29uc3QgU2NyaXB0T2JqZWN0JiBtZXNz
YWdlT2JqLCBjb25zdCBWZWN0b3I8U2NyaXB0U3RyaW5nPiYgZnJhbWVzLCBTY3JpcHRTdGF0ZSos
IGNvbnN0IFZlY3RvcjxTY3JpcHRWYWx1ZT4gYXJndW1lbnRzLCBjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UpOworICAgICAgICB2b2lkIGFkZENvbnNvbGVNZXNzYWdlKGNvbnN0IFNjcmlwdE9iamVjdCYg
bWVzc2FnZU9iaiwgY29uc3QgVmVjdG9yPFNjcmlwdFN0cmluZz4mIGZyYW1lcywgY29uc3QgVmVj
dG9yPFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+ID4mIGFyZ3VtZW50cywgY29uc3QgU3Ry
aW5nJiBtZXNzYWdlKTsKICAgICAgICAgdm9pZCB1cGRhdGVDb25zb2xlTWVzc2FnZVJlcGVhdENv
dW50KHVuc2lnbmVkIGNvdW50KTsKICAgICAgICAgdm9pZCBjbGVhckNvbnNvbGVNZXNzYWdlcygp
OwogCkBAIC03Miw2ICs3Miw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBz
aG93UGFuZWwoaW50IHBhbmVsKTsKICAgICAgICAgdm9pZCBwb3B1bGF0ZUludGVyZmFjZSgpOwog
ICAgICAgICB2b2lkIHJlc2V0KCk7CisgICAgICAgIAorICAgICAgICB2b2lkIGJyaW5nVG9Gcm9u
dCgpOworICAgICAgICB2b2lkIGluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJik7CiAK
ICAgICAgICAgdm9pZCByZXNvdXJjZVRyYWNraW5nV2FzRW5hYmxlZCgpOwogICAgICAgICB2b2lk
IHJlc291cmNlVHJhY2tpbmdXYXNEaXNhYmxlZCgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckZyb250ZW5kQ2xpZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
MDU4MzQ2YgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZy
b250ZW5kQ2xpZW50LmgKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisg
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSW5zcGVjdG9yRnJvbnRlbmRD
bGllbnRfaAorI2RlZmluZSBJbnNwZWN0b3JGcm9udGVuZENsaWVudF9oCisKKyNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ29udGV4dE1lbnVJ
dGVtOworY2xhc3MgRXZlbnQ7CitjbGFzcyBTdHJpbmc7CisKK2NsYXNzIEluc3BlY3RvckZyb250
ZW5kQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5JbnNwZWN0b3JGcm9udGVuZENsaWVu
dCgpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIHdpbmRvd09iamVjdENsZWFyZWQoKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGZyb250ZW5kTG9hZGVkKCkgPSAwOworCisgICAgdmlydHVhbCB2b2lk
IG1vdmVXaW5kb3dCeShmbG9hdCB4LCBmbG9hdCB5KSA9IDA7CisKKyAgICB2aXJ0dWFsIFN0cmlu
ZyBsb2NhbGl6ZWRTdHJpbmdzVVJMKCkgPSAwOworICAgIHZpcnR1YWwgU3RyaW5nIGhpZGRlblBh
bmVscygpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBicmluZ1RvRnJvbnQoKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGNsb3NlV2luZG93KCkgPSAwOworCisgICAgdmlydHVhbCBib29sIGNhbkF0
dGFjaFdpbmRvdygpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoV2luZG93KCkgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hXaW5kb3coKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNo
YW5nZUF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkKSA9IDA7CisgICAgCisgICAgdmlydHVh
bCB2b2lkIGluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJikgPSAwOworCisgICAgdmly
dHVhbCB2b2lkIHNob3dDb250ZXh0TWVudShFdmVudCosIGNvbnN0IFZlY3RvcjxDb250ZXh0TWVu
dUl0ZW0qPiYpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2Fs
LmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3NGNkY2MKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmNw
cApAQCAtMCwwICsxLDIzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0
b3JGcm9udGVuZENsaWVudExvY2FsLmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5j
bHVkZSAiQ2hyb21lLmgiCisjaW5jbHVkZSAiQ29udGV4dE1lbnUuaCIKKyNpbmNsdWRlICJDb250
ZXh0TWVudUl0ZW0uaCIKKyNpbmNsdWRlICJDb250ZXh0TWVudUNvbnRyb2xsZXIuaCIKKyNpbmNs
dWRlICJDb250ZXh0TWVudVByb3ZpZGVyLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5j
bHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJJbnNwZWN0
b3JDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmQuaCIKKyNpbmNsdWRl
ICJJbnNwZWN0b3JGcm9udGVuZEhvc3QuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAi
UGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTY3JpcHRPYmplY3QuaCIKKyNpbmNsdWRlICJT
Y3JpcHRGdW5jdGlvbkNhbGwuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGcm9u
dGVuZE1lbnVQcm92aWRlciA6IHB1YmxpYyBDb250ZXh0TWVudVByb3ZpZGVyIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxGcm9udGVuZE1lbnVQcm92aWRlcj4gY3JlYXRlKEluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50TG9jYWwqIGZyb250ZW5kQ2xpZW50LCBTY3JpcHRPYmplY3Qgd2Vi
SW5zcGVjdG9yLCBjb25zdCBWZWN0b3I8Q29udGV4dE1lbnVJdGVtKj4mIGl0ZW1zKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGcm9udGVuZE1lbnVQcm92aWRlcihmcm9udGVu
ZENsaWVudCwgd2ViSW5zcGVjdG9yLCBpdGVtcykpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGRp
c2Nvbm5lY3QoKQorICAgIHsKKyAgICAgICAgbV93ZWJJbnNwZWN0b3IgPSBTY3JpcHRPYmplY3Qo
KTsKKyAgICAgICAgbV9mcm9udGVuZENsaWVudCA9IDA7CisgICAgfQorICAgIAorcHJpdmF0ZToK
KyAgICBGcm9udGVuZE1lbnVQcm92aWRlcihJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsKiBm
cm9udGVuZENsaWVudCwgU2NyaXB0T2JqZWN0IHdlYkluc3BlY3RvciwgIGNvbnN0IFZlY3RvcjxD
b250ZXh0TWVudUl0ZW0qPiYgaXRlbXMpCisgICAgICAgIDogbV9mcm9udGVuZENsaWVudChmcm9u
dGVuZENsaWVudCkKKyAgICAgICAgLCBtX3dlYkluc3BlY3Rvcih3ZWJJbnNwZWN0b3IpCisgICAg
ICAgICwgbV9pdGVtcyhpdGVtcykKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB+RnJvbnRl
bmRNZW51UHJvdmlkZXIoKQorICAgIHsKKyAgICAgICAgY29udGV4dE1lbnVDbGVhcmVkKCk7Cisg
ICAgfQorICAgIAorICAgIHZpcnR1YWwgdm9pZCBwb3B1bGF0ZUNvbnRleHRNZW51KENvbnRleHRN
ZW51KiBtZW51KQorICAgIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2l0ZW1z
LnNpemUoKTsgKytpKQorICAgICAgICAgICAgbWVudS0+YXBwZW5kSXRlbSgqbV9pdGVtc1tpXSk7
CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgdm9pZCBjb250ZXh0TWVudUl0ZW1TZWxlY3RlZChD
b250ZXh0TWVudUl0ZW0qIGl0ZW0pCisgICAgeworICAgICAgICBpbnQgaXRlbU51bWJlciA9IGl0
ZW0tPmFjdGlvbigpIC0gQ29udGV4dE1lbnVJdGVtQmFzZUN1c3RvbVRhZzsKKworICAgICAgICBT
Y3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIpOwor
ICAgICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudCgiY29udGV4dE1lbnVJdGVtU2VsZWN0ZWQi
KTsKKyAgICAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoaXRlbU51bWJlcik7CisgICAgICAg
IGZ1bmN0aW9uLmNhbGwoKTsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCB2b2lkIGNvbnRleHRN
ZW51Q2xlYXJlZCgpCisgICAgeworCisgICAgICAgIGlmIChtX2Zyb250ZW5kQ2xpZW50KSB7Cisg
ICAgICAgICAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJbnNwZWN0b3IsICJk
aXNwYXRjaCIpOworICAgICAgICAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoImNvbnRleHRN
ZW51Q2xlYXJlZCIpOworICAgICAgICAgICAgZnVuY3Rpb24uY2FsbCgpOworCisgICAgICAgICAg
ICBtX2Zyb250ZW5kQ2xpZW50LT5tX21lbnVQcm92aWRlciA9IDA7CisgICAgICAgIH0KKyAgICAg
ICAgZGVsZXRlQWxsVmFsdWVzKG1faXRlbXMpOworICAgICAgICBtX2l0ZW1zLmNsZWFyKCk7Cisg
ICAgfQorCisgICAgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbCogbV9mcm9udGVuZENsaWVu
dDsKKyAgICBTY3JpcHRPYmplY3QgbV93ZWJJbnNwZWN0b3I7CisgICAgVmVjdG9yPENvbnRleHRN
ZW51SXRlbSo+IG1faXRlbXM7Cit9OworCitzdGF0aWMgY29uc3QgY2hhciogY29uc3QgaW5zcGVj
dG9yQXR0YWNoZWRIZWlnaHROYW1lID0gImluc3BlY3RvckF0dGFjaGVkSGVpZ2h0IjsKK3N0YXRp
YyBjb25zdCB1bnNpZ25lZCBkZWZhdWx0QXR0YWNoZWRIZWlnaHQgPSAzMDA7CitzdGF0aWMgY29u
c3QgZmxvYXQgbWluaW11bUF0dGFjaGVkSGVpZ2h0ID0gMjUwLjBmOworc3RhdGljIGNvbnN0IGZs
b2F0IG1heGltdW1BdHRhY2hlZEhlaWdodFJhdGlvID0gMC43NWY7CisKK0luc3BlY3RvckZyb250
ZW5kQ2xpZW50TG9jYWw6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwoSW5zcGVjdG9yQ29u
dHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciwgUGFnZSogZnJvbnRlbmRQYWdlKQorICAgIDog
bV9pbnNwZWN0b3JDb250cm9sbGVyKGluc3BlY3RvckNvbnRyb2xsZXIpCisgICAgLCBtX2Zyb250
ZW5kUGFnZShmcm9udGVuZFBhZ2UpCisgICAgLCBtX2Zyb250ZW5kU2NyaXB0U3RhdGUoMCkKKyAg
ICAsIG1fbWVudVByb3ZpZGVyKDApCit7Cit9CisKK0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9j
YWw6On5JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsKCkKK3sKKyAgICBpZiAobV9tZW51UHJv
dmlkZXIpCisgICAgICAgIG1fbWVudVByb3ZpZGVyLT5kaXNjb25uZWN0KCk7CisgICAgbV9mcm9u
dGVuZFNjcmlwdFN0YXRlID0gMDsKKyAgICBtX2Zyb250ZW5kUGFnZSA9IDA7CisgICAgbV9pbnNw
ZWN0b3JDb250cm9sbGVyID0gMDsKK30KKyAgICAKK3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmRDbGll
bnRMb2NhbDo6d2luZG93T2JqZWN0Q2xlYXJlZCgpCit7CisgICAgLy8gR3JhbnQgdGhlIGluc3Bl
Y3RvciB0aGUgYWJpbGl0eSB0byBzY3JpcHQgdGhlIGluc3BlY3RlZCBwYWdlLgorICAgIG1fZnJv
bnRlbmRQYWdlLT5tYWluRnJhbWUoKS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+Z3Jh
bnRVbml2ZXJzYWxBY2Nlc3MoKTsKKyAgICAvLyBGSVhNRTogZG9uJ3Qga2VlcCByZWZlcmVuY2Ug
dG8gdGhlIHNjcmlwdCBzdGF0ZQorICAgIG1fZnJvbnRlbmRTY3JpcHRTdGF0ZSA9IHNjcmlwdFN0
YXRlRnJvbVBhZ2UoZGVidWdnZXJXb3JsZCgpLCBtX2Zyb250ZW5kUGFnZSk7CisgICAgU2NyaXB0
R2xvYmFsT2JqZWN0OjpzZXQobV9mcm9udGVuZFNjcmlwdFN0YXRlLCAiSW5zcGVjdG9yQmFja2Vu
ZCIsIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQmFja2VuZCgpKTsKKyAgICBtX2Zy
b250ZW5kSG9zdCA9IEluc3BlY3RvckZyb250ZW5kSG9zdDo6Y3JlYXRlKHRoaXMpOworICAgIFNj
cmlwdEdsb2JhbE9iamVjdDo6c2V0KG1fZnJvbnRlbmRTY3JpcHRTdGF0ZSwgIkluc3BlY3RvckZy
b250ZW5kSG9zdCIsIG1fZnJvbnRlbmRIb3N0LmdldCgpKTsKK30KKwordm9pZCBJbnNwZWN0b3JG
cm9udGVuZENsaWVudExvY2FsOjpmcm9udGVuZExvYWRlZCgpCit7CisgICAgLy8gTWFrZSBzdXJl
IG91ciB3aW5kb3cgaXMgdmlzaWJsZSBub3cgdGhhdCB0aGUgcGFnZSBsb2FkZWQKKyAgICBicmlu
Z1RvRnJvbnQoKTsKKworICAgIC8vIENyZWF0ZSBJbnNwZWN0b3JGcm9udGVuZCBhbmQgc2V0IGl0
IHRvIEluc3BlY3RvckNvbnRyb2xsZXIuCisgICAgQVNTRVJUKG1fZnJvbnRlbmRTY3JpcHRTdGF0
ZSk7CisgICAgU2NyaXB0T2JqZWN0IHdlYkluc3BlY3Rvck9iajsKKyAgICBpZiAoIVNjcmlwdEds
b2JhbE9iamVjdDo6Z2V0KG1fZnJvbnRlbmRTY3JpcHRTdGF0ZSwgIldlYkluc3BlY3RvciIsIHdl
Ykluc3BlY3Rvck9iaikpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5zZXRGcm9udGVuZChu
ZXcgSW5zcGVjdG9yRnJvbnRlbmQod2ViSW5zcGVjdG9yT2JqKSk7Cit9CisKK2Jvb2wgSW5zcGVj
dG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6Y2FuQXR0YWNoV2luZG93KCkKK3sKKyAgICB1bnNpZ25l
ZCBpbnNwZWN0ZWRQYWdlSGVpZ2h0ID0gbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0ZWRQ
YWdlKCktPm1haW5GcmFtZSgpLT52aWV3KCktPnZpc2libGVIZWlnaHQoKTsKKworICAgIC8vIERv
bid0IGFsbG93IHRoZSBhdHRhY2ggaWYgdGhlIHdpbmRvdyB3b3VsZCBiZSB0b28gc21hbGwgdG8g
YWNjb21tb2RhdGUgdGhlIG1pbmltdW0gaW5zcGVjdG9yIGhlaWdodC4KKyAgICByZXR1cm4gbWlu
aW11bUF0dGFjaGVkSGVpZ2h0IDw9IGluc3BlY3RlZFBhZ2VIZWlnaHQgKiBtYXhpbXVtQXR0YWNo
ZWRIZWlnaHRSYXRpbzsKK30KKwordm9pZCBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjpj
aGFuZ2VBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpCit7CisgICAgdW5zaWdu
ZWQgdG90YWxIZWlnaHQgPSBtX2Zyb250ZW5kUGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+dmlz
aWJsZUhlaWdodCgpICsgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0ZWRQYWdlKCktPm1h
aW5GcmFtZSgpLT52aWV3KCktPnZpc2libGVIZWlnaHQoKTsKKyAgICB1bnNpZ25lZCBhdHRhY2hl
ZEhlaWdodCA9IGNvbnN0cmFpbmVkQXR0YWNoZWRXaW5kb3dIZWlnaHQoaGVpZ2h0LCB0b3RhbEhl
aWdodCk7CisgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5zZXRTZXR0aW5nKGluc3BlY3RvckF0
dGFjaGVkSGVpZ2h0TmFtZSwgU3RyaW5nOjpudW1iZXIoYXR0YWNoZWRIZWlnaHQpKTsKKyAgICBz
ZXRBdHRhY2hlZFdpbmRvd0hlaWdodChhdHRhY2hlZEhlaWdodCk7Cit9CisKK3ZvaWQgSW5zcGVj
dG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6bW92ZVdpbmRvd0J5KGZsb2F0IHgsIGZsb2F0IHkpCit7
CisgICAgRmxvYXRSZWN0IGZyYW1lUmVjdCA9IG1fZnJvbnRlbmRQYWdlLT5jaHJvbWUoKS0+d2lu
ZG93UmVjdCgpOworICAgIGZyYW1lUmVjdC5tb3ZlKHgsIHkpOworICAgIG1fZnJvbnRlbmRQYWdl
LT5jaHJvbWUoKS0+c2V0V2luZG93UmVjdChmcmFtZVJlY3QpOworfQorCit2b2lkIEluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50TG9jYWw6OnNob3dDb250ZXh0TWVudShFdmVudCogZXZlbnQsIGNvbnN0
IFZlY3RvcjxDb250ZXh0TWVudUl0ZW0qPiYgaXRlbXMpCit7CisgICAgU2NyaXB0T2JqZWN0IHdl
Ykluc3BlY3Rvck9iajsKKyAgICBpZiAoIVNjcmlwdEdsb2JhbE9iamVjdDo6Z2V0KG1fZnJvbnRl
bmRTY3JpcHRTdGF0ZSwgIldlYkluc3BlY3RvciIsIHdlYkluc3BlY3Rvck9iaikpIHsKKyAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisg
ICAgUmVmUHRyPEZyb250ZW5kTWVudVByb3ZpZGVyPiBtZW51UHJvdmlkZXIgPSBGcm9udGVuZE1l
bnVQcm92aWRlcjo6Y3JlYXRlKHRoaXMsIHdlYkluc3BlY3Rvck9iaiwgaXRlbXMpOworICAgIENv
bnRleHRNZW51Q29udHJvbGxlciogbWVudUNvbnRyb2xsZXIgPSBtX2Zyb250ZW5kUGFnZS0+Y29u
dGV4dE1lbnVDb250cm9sbGVyKCk7CisgICAgbWVudUNvbnRyb2xsZXItPnNob3dDb250ZXh0TWVu
dShldmVudCwgbWVudVByb3ZpZGVyKTsKKyAgICBtX21lbnVQcm92aWRlciA9IG1lbnVQcm92aWRl
ci5nZXQoKTsKK30KKwordm9pZCBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjpzZXRBdHRh
Y2hlZFdpbmRvdyhib29sIGF0dGFjaGVkKQoreworICAgIFNjcmlwdE9iamVjdCB3ZWJJbnNwZWN0
b3JPYmo7CisgICAgaWYgKCFTY3JpcHRHbG9iYWxPYmplY3Q6OmdldChtX2Zyb250ZW5kU2NyaXB0
U3RhdGUsICJXZWJJbnNwZWN0b3IiLCB3ZWJJbnNwZWN0b3JPYmopKSB7CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFNjcmlwdEZ1bmN0
aW9uQ2FsbCBmdW5jdGlvbih3ZWJJbnNwZWN0b3JPYmosICJkaXNwYXRjaCIpOyAKKyAgICBmdW5j
dGlvbi5hcHBlbmRBcmd1bWVudCgic2V0QXR0YWNoZWRXaW5kb3ciKTsKKyAgICBmdW5jdGlvbi5h
cHBlbmRBcmd1bWVudChhdHRhY2hlZCk7CisgICAgZnVuY3Rpb24uY2FsbCgpOworfQorCit2b2lk
IEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OnJlc3RvcmVBdHRhY2hlZFdpbmRvd0hlaWdo
dCgpCit7CisgICAgdW5zaWduZWQgaW5zcGVjdGVkUGFnZUhlaWdodCA9IG1faW5zcGVjdG9yQ29u
dHJvbGxlci0+aW5zcGVjdGVkUGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpLT52aXNpYmxlSGVp
Z2h0KCk7CisgICAgU3RyaW5nIGF0dGFjaGVkSGVpZ2h0ID0gbV9pbnNwZWN0b3JDb250cm9sbGVy
LT5zZXR0aW5nKGluc3BlY3RvckF0dGFjaGVkSGVpZ2h0TmFtZSk7CisgICAgYm9vbCBzdWNjZXNz
ID0gdHJ1ZTsKKyAgICBpbnQgaGVpZ2h0ID0gYXR0YWNoZWRIZWlnaHQudG9JbnQoJnN1Y2Nlc3Mp
OworICAgIHVuc2lnbmVkIHByZWZlcnJlZEhlaWdodCA9IHN1Y2Nlc3MgPyBoZWlnaHQgOiBkZWZh
dWx0QXR0YWNoZWRIZWlnaHQ7CisgICAgCisgICAgLy8gVGhpcyBjYWxsIG1pZ2h0IG5vdCBnbyB0
aHJvdWdoIChpZiB0aGUgd2luZG93IHN0YXJ0cyBvdXQgZGV0YWNoZWQpLCBidXQgaWYgdGhlIHdp
bmRvdyBpcyBpbml0aWFsbHkgY3JlYXRlZCBhdHRhY2hlZCwKKyAgICAvLyBJbnNwZWN0b3JDb250
cm9sbGVyOjphdHRhY2hXaW5kb3cgaXMgbmV2ZXIgY2FsbGVkLCBzbyB3ZSBuZWVkIHRvIG1ha2Ug
c3VyZSB0byBzZXQgdGhlIGF0dGFjaGVkV2luZG93SGVpZ2h0LgorICAgIC8vIEZJWE1FOiBDbGVh
biB1cCBjb2RlIHNvIHdlIG9ubHkgaGF2ZSB0byBjYWxsIHNldEF0dGFjaGVkV2luZG93SGVpZ2h0
IGluIEluc3BlY3RvckNvbnRyb2xsZXI6OmF0dGFjaFdpbmRvdworICAgIHNldEF0dGFjaGVkV2lu
ZG93SGVpZ2h0KGNvbnN0cmFpbmVkQXR0YWNoZWRXaW5kb3dIZWlnaHQocHJlZmVycmVkSGVpZ2h0
LCBpbnNwZWN0ZWRQYWdlSGVpZ2h0KSk7Cit9CisKK3Vuc2lnbmVkIEluc3BlY3RvckZyb250ZW5k
Q2xpZW50TG9jYWw6OmNvbnN0cmFpbmVkQXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgcHJl
ZmVycmVkSGVpZ2h0LCB1bnNpZ25lZCB0b3RhbFdpbmRvd0hlaWdodCkKK3sKKyAgICB1c2luZyBu
YW1lc3BhY2Ugc3RkOworICAgIHJldHVybiByb3VuZGYobWF4KG1pbmltdW1BdHRhY2hlZEhlaWdo
dCwgbWluPGZsb2F0PihwcmVmZXJyZWRIZWlnaHQsIHRvdGFsV2luZG93SGVpZ2h0ICogbWF4aW11
bUF0dGFjaGVkSGVpZ2h0UmF0aW8pKSk7Cit9CisgICAgCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRl
bmRDbGllbnRMb2NhbC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGll
bnRMb2NhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxOGM0NzkKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVu
dExvY2FsLmgKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRM
b2NhbF9oCisjZGVmaW5lIEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWxfaAorCisjaW5jbHVk
ZSAiSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaCIKKyNpbmNsdWRlICJTY3JpcHRTdGF0ZS5oIgor
I2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIEZyb250ZW5kTWVudVByb3ZpZGVyOworY2xhc3MgSW5zcGVjdG9yQ29udHJvbGxlcjsKK2Ns
YXNzIEluc3BlY3RvckZyb250ZW5kSG9zdDsKK2NsYXNzIFBhZ2U7CisKK2NsYXNzIEluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50TG9jYWwgOiBwdWJsaWMgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQsIHB1
YmxpYyBOb25jb3B5YWJsZSB7CitwdWJsaWM6CisgICAgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRM
b2NhbChJbnNwZWN0b3JDb250cm9sbGVyKiwgUGFnZSopOworICAgIHZpcnR1YWwgfkluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50TG9jYWwoKTsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgd2luZG93T2Jq
ZWN0Q2xlYXJlZCgpOworICAgIHZpcnR1YWwgdm9pZCBmcm9udGVuZExvYWRlZCgpOworCisgICAg
dmlydHVhbCB2b2lkIG1vdmVXaW5kb3dCeShmbG9hdCB4LCBmbG9hdCB5KTsKKworICAgIHZpcnR1
YWwgYm9vbCBjYW5BdHRhY2hXaW5kb3coKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2hhbmdlQXR0YWNo
ZWRXaW5kb3dIZWlnaHQodW5zaWduZWQpOworCisgICAgdmlydHVhbCB2b2lkIHNob3dDb250ZXh0
TWVudShFdmVudCosIGNvbnN0IFZlY3RvcjxDb250ZXh0TWVudUl0ZW0qPiYpOworICAgIAorcHJv
dGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBzZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25l
ZCkgPSAwOworCisgICAgdm9pZCBzZXRBdHRhY2hlZFdpbmRvdyhib29sKTsKKyAgICB2b2lkIHJl
c3RvcmVBdHRhY2hlZFdpbmRvd0hlaWdodCgpOworCitwcml2YXRlOgorICAgIHN0YXRpYyB1bnNp
Z25lZCBjb25zdHJhaW5lZEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIHByZWZlcnJlZEhl
aWdodCwgdW5zaWduZWQgdG90YWxXaW5kb3dIZWlnaHQpOworCisgICAgZnJpZW5kIGNsYXNzIEZy
b250ZW5kTWVudVByb3ZpZGVyOworICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIG1faW5zcGVjdG9y
Q29udHJvbGxlcjsKKyAgICBQYWdlKiBtX2Zyb250ZW5kUGFnZTsKKyAgICBTY3JpcHRTdGF0ZSog
bV9mcm9udGVuZFNjcmlwdFN0YXRlOworICAgIC8vIFRPRE8oeXVyeXMpOiB0aGlzIHJlZiBzaG91
bGRuJ3QgYmUgbmVlZGVkLgorICAgIFJlZlB0cjxJbnNwZWN0b3JGcm9udGVuZEhvc3Q+IG1fZnJv
bnRlbmRIb3N0OworICAgIEZyb250ZW5kTWVudVByb3ZpZGVyKiBtX21lbnVQcm92aWRlcjsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcAppbmRleCBjMWExNzYxLi42ZDRjMjE1IDEwMDY0NAot
LS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCisrKyBiL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAKQEAgLTQxLDggKzQxLDcg
QEAKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIK
ICNpbmNsdWRlICJIVE1MRnJhbWVPd25lckVsZW1lbnQuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JD
bGllbnQuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZC5oIgorI2luY2x1ZGUgIkluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yUmVzb3VyY2UuaCIKICNp
bmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFzdGVib2FyZC5oIgpAQCAtNTQsNjUgKzUzLDY5
IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSW5zcGVj
dG9yRnJvbnRlbmRIb3N0OjpJbnNwZWN0b3JGcm9udGVuZEhvc3QoSW5zcGVjdG9yQ29udHJvbGxl
ciogaW5zcGVjdG9yQ29udHJvbGxlciwgSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQpCi0gICAgOiBt
X2luc3BlY3RvckNvbnRyb2xsZXIoaW5zcGVjdG9yQ29udHJvbGxlcikKLSAgICAsIG1fY2xpZW50
KGNsaWVudCkKK0luc3BlY3RvckZyb250ZW5kSG9zdDo6SW5zcGVjdG9yRnJvbnRlbmRIb3N0KElu
c3BlY3RvckZyb250ZW5kQ2xpZW50KiBjbGllbnQpCisgICAgOiBtX2NsaWVudChjbGllbnQpCiB7
CiB9CiAKIEluc3BlY3RvckZyb250ZW5kSG9zdDo6fkluc3BlY3RvckZyb250ZW5kSG9zdCgpCiB7
Ci0gICAgaWYgKG1fbWVudVByb3ZpZGVyKQotICAgICAgICBtX21lbnVQcm92aWRlci0+ZGlzY29u
bmVjdCgpOworICAgIEFTU0VSVCghbV9jbGllbnQpOwogfQogCiB2b2lkIEluc3BlY3RvckZyb250
ZW5kSG9zdDo6bG9hZGVkKCkKIHsKLSAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyKQotICAg
ICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPnNjcmlwdE9iamVjdFJlYWR5KCk7CisgICAgaWYg
KG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+ZnJvbnRlbmRMb2FkZWQoKTsKIH0KIAogdm9p
ZCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OmF0dGFjaCgpCiB7Ci0gICAgaWYgKG1faW5zcGVjdG9y
Q29udHJvbGxlcikKLSAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5hdHRhY2hXaW5kb3co
KTsKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5hdHRhY2hXaW5kb3coKTsK
IH0KIAogdm9pZCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OmRldGFjaCgpCiB7Ci0gICAgaWYgKG1f
aW5zcGVjdG9yQ29udHJvbGxlcikKLSAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kZXRh
Y2hXaW5kb3coKTsKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5kZXRhY2hX
aW5kb3coKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OmNsb3NlV2luZG93KCkK
IHsKLSAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyKQotICAgICAgICBtX2luc3BlY3RvckNv
bnRyb2xsZXItPmNsb3NlV2luZG93KCk7CisgICAgaWYgKG1fY2xpZW50KSB7CisgICAgICAgIG1f
Y2xpZW50LT5jbG9zZVdpbmRvdygpOworICAgICAgICBtX2NsaWVudCA9IDA7IC8vIERpc2Nvbm5l
Y3QgZnJvbSBjbGllbnQuCisgICAgfQorfQorCit2b2lkIEluc3BlY3RvckZyb250ZW5kSG9zdDo6
YnJpbmdUb0Zyb250KCkKK3sKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5i
cmluZ1RvRnJvbnQoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OndpbmRvd1Vu
bG9hZGluZygpCit2b2lkIEluc3BlY3RvckZyb250ZW5kSG9zdDo6aW5zcGVjdGVkVVJMQ2hhbmdl
ZChjb25zdCBTdHJpbmcmIG5ld1VSTCkKIHsKLSAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVy
KQotICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmNsb3NlKCk7CisgICAgaWYgKG1fY2xp
ZW50KQorICAgICAgICBtX2NsaWVudC0+aW5zcGVjdGVkVVJMQ2hhbmdlZChuZXdVUkwpOwogfQog
CiBib29sIEluc3BlY3RvckZyb250ZW5kSG9zdDo6Y2FuQXR0YWNoV2luZG93KCkgY29uc3QKIHsK
LSAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyKQotICAgICAgICByZXR1cm4gbV9pbnNwZWN0
b3JDb250cm9sbGVyLT5jYW5BdHRhY2hXaW5kb3coKTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAg
cmV0dXJuIG1fY2xpZW50ICYmIG1fY2xpZW50LT5jYW5BdHRhY2hXaW5kb3coKTsKIH0KIAogdm9p
ZCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OnNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVk
IGhlaWdodCkKIHsKLSAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyKQotICAgICAgICBtX2lu
c3BlY3RvckNvbnRyb2xsZXItPnNldEF0dGFjaGVkV2luZG93SGVpZ2h0KGhlaWdodCk7CisgICAg
aWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+Y2hhbmdlQXR0YWNoZWRXaW5kb3dIZWln
aHQoaGVpZ2h0KTsKIH0KIAogdm9pZCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6Om1vdmVXaW5kb3dC
eShmbG9hdCB4LCBmbG9hdCB5KSBjb25zdAogewotICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xs
ZXIpCi0gICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+bW92ZVdpbmRvd0J5KHgsIHkpOwor
ICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPm1vdmVXaW5kb3dCeSh4LCB5KTsK
IH0KIAogU3RyaW5nIEluc3BlY3RvckZyb250ZW5kSG9zdDo6bG9jYWxpemVkU3RyaW5nc1VSTCgp
CkBAIC0xNjEsMzAgKzE2NCw4IEBAIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmRIb3N0Ojpjb3B5VGV4
dChjb25zdCBTdHJpbmcmIHRleHQpCiAKIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmRIb3N0OjpzaG93
Q29udGV4dE1lbnUoRXZlbnQqIGV2ZW50LCBjb25zdCBWZWN0b3I8Q29udGV4dE1lbnVJdGVtKj4m
IGl0ZW1zKQogewotICAgIGlmICghbV9pbnNwZWN0b3JDb250cm9sbGVyKQotICAgICAgICByZXR1
cm47Ci0gICAgaWYgKCFtX2luc3BlY3RvckNvbnRyb2xsZXItPndpbmRvd1Zpc2libGUoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0KLSAgICBtX21lbnVQcm92aWRlciA9IE1lbnVQcm92aWRlcjo6Y3Jl
YXRlKHRoaXMsIGl0ZW1zKTsKLSAgICBDb250ZXh0TWVudUNvbnRyb2xsZXIqIG1lbnVDb250cm9s
bGVyID0gbV9pbnNwZWN0b3JDb250cm9sbGVyLT5tX3BhZ2UtPmNvbnRleHRNZW51Q29udHJvbGxl
cigpOwotICAgIG1lbnVDb250cm9sbGVyLT5zaG93Q29udGV4dE1lbnUoZXZlbnQsIG1fbWVudVBy
b3ZpZGVyKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OmNvbnRleHRNZW51SXRl
bVNlbGVjdGVkKENvbnRleHRNZW51SXRlbSogaXRlbSkKLXsKLSAgICBpZiAobV9pbnNwZWN0b3JD
b250cm9sbGVyICYmIG1faW5zcGVjdG9yQ29udHJvbGxlci0+d2luZG93VmlzaWJsZSgpKSB7Ci0g
ICAgICAgIGludCBpdGVtTnVtYmVyID0gaXRlbS0+YWN0aW9uKCkgLSBDb250ZXh0TWVudUl0ZW1C
YXNlQ3VzdG9tVGFnOwotICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPm1fZnJvbnRlbmQt
PmNvbnRleHRNZW51SXRlbVNlbGVjdGVkKGl0ZW1OdW1iZXIpOwotICAgIH0KLX0KLQotdm9pZCBJ
bnNwZWN0b3JGcm9udGVuZEhvc3Q6OmNvbnRleHRNZW51Q2xlYXJlZCgpCi17Ci0gICAgbV9tZW51
UHJvdmlkZXIgPSAwOwotICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIgJiYgbV9pbnNwZWN0
b3JDb250cm9sbGVyLT53aW5kb3dWaXNpYmxlKCkpCi0gICAgICAgIG1faW5zcGVjdG9yQ29udHJv
bGxlci0+bV9mcm9udGVuZC0+Y29udGV4dE1lbnVDbGVhcmVkKCk7CisgICAgaWYgKG1fY2xpZW50
KQorICAgICAgICBtX2NsaWVudC0+c2hvd0NvbnRleHRNZW51KGV2ZW50LCBpdGVtcyk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckZyb250ZW5kSG9zdC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRl
bmRIb3N0LmgKaW5kZXggY2JlNmE5Yi4uNmUxNjI5NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRnJvbnRlbmRIb3N0LmgKQEAgLTQzLDI3ICs0MywyNSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiBjbGFzcyBDb250ZXh0TWVudUl0ZW07CiBjbGFzcyBFdmVudDsKIGNsYXNzIEluc3BlY3Rv
ckNsaWVudDsKK2NsYXNzIEluc3BlY3RvckZyb250ZW5kQ2xpZW50OwogY2xhc3MgTm9kZTsKIAog
Y2xhc3MgSW5zcGVjdG9yRnJvbnRlbmRIb3N0IDogcHVibGljIFJlZkNvdW50ZWQ8SW5zcGVjdG9y
RnJvbnRlbmRIb3N0PgogewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rv
ckZyb250ZW5kSG9zdD4gY3JlYXRlKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRy
b2xsZXIsIEluc3BlY3RvckNsaWVudCogY2xpZW50KQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElu
c3BlY3RvckZyb250ZW5kSG9zdD4gY3JlYXRlKEluc3BlY3RvckZyb250ZW5kQ2xpZW50KiBjbGll
bnQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvckZyb250ZW5k
SG9zdChpbnNwZWN0b3JDb250cm9sbGVyLCBjbGllbnQpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBJbnNwZWN0b3JGcm9udGVuZEhvc3QoY2xpZW50KSk7CiAgICAgfQogCiAgICAgfklu
c3BlY3RvckZyb250ZW5kSG9zdCgpOwogCi0gICAgSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVj
dG9yQ29udHJvbGxlcigpIHsgcmV0dXJuIG1faW5zcGVjdG9yQ29udHJvbGxlcjsgfQotCi0gICAg
dm9pZCBkaXNjb25uZWN0Q29udHJvbGxlcigpIHsgbV9pbnNwZWN0b3JDb250cm9sbGVyID0gMDsg
fQotCiAgICAgdm9pZCBsb2FkZWQoKTsKICAgICB2b2lkIGF0dGFjaCgpOwogICAgIHZvaWQgZGV0
YWNoKCk7CiAgICAgdm9pZCBjbG9zZVdpbmRvdygpOwotICAgIHZvaWQgd2luZG93VW5sb2FkaW5n
KCk7CisgICAgdm9pZCBicmluZ1RvRnJvbnQoKTsKKyAgICB2b2lkIGluc3BlY3RlZFVSTENoYW5n
ZWQoY29uc3QgU3RyaW5nJik7CiAKICAgICBib29sIGNhbkF0dGFjaFdpbmRvdygpIGNvbnN0Owog
ICAgIHZvaWQgc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KTsKQEAgLTgw
LDU5ICs3OCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNob3dDb250ZXh0TWVudShFdmVudCosIGNv
bnN0IFZlY3RvcjxDb250ZXh0TWVudUl0ZW0qPiYgaXRlbXMpOwogCiBwcml2YXRlOgotICAgIGNs
YXNzIE1lbnVQcm92aWRlciA6IHB1YmxpYyBDb250ZXh0TWVudVByb3ZpZGVyIHsKLSAgICBwdWJs
aWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lbnVQcm92aWRlcj4gY3JlYXRlKEluc3Bl
Y3RvckZyb250ZW5kSG9zdCogZnJvbnRlbmRIb3N0LCBjb25zdCBWZWN0b3I8Q29udGV4dE1lbnVJ
dGVtKj4mIGl0ZW1zKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IE1lbnVQcm92aWRlcihmcm9udGVuZEhvc3QsIGl0ZW1zKSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICB2aXJ0dWFsIH5NZW51UHJvdmlkZXIoKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0
TWVudUNsZWFyZWQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgZGlzY29ubmVjdCgpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIG1fZnJvbnRlbmRIb3N0ID0gMDsKLSAgICAgICAgfQotCi0g
ICAgICAgIHZpcnR1YWwgdm9pZCBwb3B1bGF0ZUNvbnRleHRNZW51KENvbnRleHRNZW51KiBtZW51
KQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1faXRlbXMu
c2l6ZSgpOyArK2kpCi0gICAgICAgICAgICAgICAgbWVudS0+YXBwZW5kSXRlbSgqbV9pdGVtc1tp
XSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2aXJ0dWFsIHZvaWQgY29udGV4dE1lbnVJdGVtU2Vs
ZWN0ZWQoQ29udGV4dE1lbnVJdGVtKiBpdGVtKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAo
bV9mcm9udGVuZEhvc3QpCi0gICAgICAgICAgICAgICAgbV9mcm9udGVuZEhvc3QtPmNvbnRleHRN
ZW51SXRlbVNlbGVjdGVkKGl0ZW0pOwotICAgICAgICB9Ci0KLSAgICAgICAgdmlydHVhbCB2b2lk
IGNvbnRleHRNZW51Q2xlYXJlZCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtX2Zyb250
ZW5kSG9zdCkKLSAgICAgICAgICAgICAgICBtX2Zyb250ZW5kSG9zdC0+Y29udGV4dE1lbnVDbGVh
cmVkKCk7Ci0gICAgICAgICAgICBkZWxldGVBbGxWYWx1ZXMobV9pdGVtcyk7Ci0gICAgICAgICAg
ICBtX2l0ZW1zLmNsZWFyKCk7Ci0gICAgICAgIH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIE1l
bnVQcm92aWRlcihJbnNwZWN0b3JGcm9udGVuZEhvc3QqIGZyb250ZW5kSG9zdCwgIGNvbnN0IFZl
Y3RvcjxDb250ZXh0TWVudUl0ZW0qPiYgaXRlbXMpCi0gICAgICAgICAgICA6IG1fZnJvbnRlbmRI
b3N0KGZyb250ZW5kSG9zdCkKLSAgICAgICAgICAgICwgbV9pdGVtcyhpdGVtcykgeyB9Ci0gICAg
ICAgIEluc3BlY3RvckZyb250ZW5kSG9zdCogbV9mcm9udGVuZEhvc3Q7Ci0gICAgICAgIFZlY3Rv
cjxDb250ZXh0TWVudUl0ZW0qPiBtX2l0ZW1zOwotICAgIH07Ci0KLSAgICBJbnNwZWN0b3JGcm9u
dGVuZEhvc3QoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciwgSW5zcGVj
dG9yQ2xpZW50KiBjbGllbnQpOwotCi0gICAgdm9pZCBjb250ZXh0TWVudUl0ZW1TZWxlY3RlZChD
b250ZXh0TWVudUl0ZW0qKTsKLSAgICB2b2lkIGNvbnRleHRNZW51Q2xlYXJlZCgpOwotCi0gICAg
SW5zcGVjdG9yQ29udHJvbGxlciogbV9pbnNwZWN0b3JDb250cm9sbGVyOwotICAgIEluc3BlY3Rv
ckNsaWVudCogbV9jbGllbnQ7Ci0gICAgUmVmUHRyPE1lbnVQcm92aWRlcj4gbV9tZW51UHJvdmlk
ZXI7CisgICAgSW5zcGVjdG9yRnJvbnRlbmRIb3N0KEluc3BlY3RvckZyb250ZW5kQ2xpZW50KiBj
bGllbnQpOworCisgICAgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQqIG1fY2xpZW50OwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRnJvbnRlbmRIb3N0LmlkbCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250
ZW5kSG9zdC5pZGwKaW5kZXggMTUwZTlmYy4uMGFlZjVjNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmlkbAorKysgYi9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuaWRsCkBAIC0zNiw3ICszNiw4IEBAIG1vZHVsZSBjb3Jl
IHsKICAgICAgICAgdm9pZCBhdHRhY2goKTsKICAgICAgICAgdm9pZCBkZXRhY2goKTsKICAgICAg
ICAgdm9pZCBjbG9zZVdpbmRvdygpOwotICAgICAgICB2b2lkIHdpbmRvd1VubG9hZGluZygpOwor
ICAgICAgICB2b2lkIGJyaW5nVG9Gcm9udCgpOworICAgICAgICB2b2lkIGluc3BlY3RlZFVSTENo
YW5nZWQoaW4gRE9NU3RyaW5nIG5ld1VSTCk7CiAKICAgICAgICAgYm9vbGVhbiBjYW5BdHRhY2hX
aW5kb3coKTsKICAgICAgICAgdm9pZCBzZXRBdHRhY2hlZFdpbmRvd0hlaWdodChpbiB1bnNpZ25l
ZCBsb25nIGhlaWdodCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
aW5zcGVjdG9yLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcwpp
bmRleCBmZDZkMjcwLi5jMGI2NDYxIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvaW5zcGVjdG9yLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNw
ZWN0b3IuanMKQEAgLTQ4MSw3ICs0ODEsNiBAQCBXZWJJbnNwZWN0b3IubG9hZGVkID0gZnVuY3Rp
b24oKQogCiAgICAgdGhpcy5hZGRNYWluRXZlbnRMaXN0ZW5lcnMoZG9jdW1lbnQpOwogCi0gICAg
d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInVubG9hZCIsIHRoaXMud2luZG93VW5sb2FkLmJpbmQo
dGhpcyksIHRydWUpOwogICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLCB0aGlz
LndpbmRvd1Jlc2l6ZS5iaW5kKHRoaXMpLCB0cnVlKTsKIAogICAgIGRvY3VtZW50LmFkZEV2ZW50
TGlzdGVuZXIoImZvY3VzIiwgdGhpcy5mb2N1c0NoYW5nZWQuYmluZCh0aGlzKSwgdHJ1ZSk7CkBA
IC01NjUsMTEgKzU2NCw2IEBAIFdlYkluc3BlY3Rvci5kaXNwYXRjaCA9IGZ1bmN0aW9uKCkgewog
ICAgIHNldFRpbWVvdXQoZGVsYXlEaXNwYXRjaCwgMCk7CiB9CiAKLVdlYkluc3BlY3Rvci53aW5k
b3dVbmxvYWQgPSBmdW5jdGlvbihldmVudCkKLXsKLSAgICBJbnNwZWN0b3JGcm9udGVuZEhvc3Qu
d2luZG93VW5sb2FkaW5nKCk7Ci19Ci0KIFdlYkluc3BlY3Rvci53aW5kb3dSZXNpemUgPSBmdW5j
dGlvbihldmVudCkKIHsKICAgICBpZiAodGhpcy5jdXJyZW50UGFuZWwpCkBAIC02MDcsNiArNjAx
LDkgQEAgV2ViSW5zcGVjdG9yLnNldEF0dGFjaGVkV2luZG93ID0gZnVuY3Rpb24oYXR0YWNoZWQp
CiAKIFdlYkluc3BlY3Rvci5jbG9zZSA9IGZ1bmN0aW9uKGV2ZW50KQogeworICAgIGlmICh0aGlz
Ll9pc0Nsb3NpbmcpCisgICAgICAgIHJldHVybjsKKyAgICB0aGlzLl9pc0Nsb3NpbmcgPSB0cnVl
OwogICAgIEluc3BlY3RvckZyb250ZW5kSG9zdC5jbG9zZVdpbmRvdygpOwogfQogCkBAIC0xMjgx
LDYgKzEyNzgsMTYgQEAgV2ViSW5zcGVjdG9yLnJlc2V0ID0gZnVuY3Rpb24oKQogICAgIHRoaXMu
Y29uc29sZS5jbGVhck1lc3NhZ2VzKCk7CiB9CiAKK1dlYkluc3BlY3Rvci5icmluZ1RvRnJvbnQg
PSBmdW5jdGlvbigpCit7CisgICAgSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmJyaW5nVG9Gcm9udCgp
OworfQorCitXZWJJbnNwZWN0b3IuaW5zcGVjdGVkVVJMQ2hhbmdlZCA9IGZ1bmN0aW9uKHVybCkK
K3sKKyAgICBJbnNwZWN0b3JGcm9udGVuZEhvc3QuaW5zcGVjdGVkVVJMQ2hhbmdlZCh1cmwpOwor
fQorCiBXZWJJbnNwZWN0b3IucmVzb3VyY2VVUkxDaGFuZ2VkID0gZnVuY3Rpb24ocmVzb3VyY2Us
IG9sZFVSTCkKIHsKICAgICBkZWxldGUgdGhpcy5yZXNvdXJjZVVSTE1hcFtvbGRVUkxdOwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmggYi9XZWJDb3JlL2xvYWRlci9F
bXB0eUNsaWVudHMuaAppbmRleCAyZjlhMjY3Li44YjhhOWNmIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2xvYWRlci9FbXB0eUNsaWVudHMuaAorKysgYi9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMu
aApAQCAtNDczLDI5ICs0NzMsMTQgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfkVtcHR5SW5zcGVj
dG9yQ2xpZW50KCkgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgaW5zcGVjdG9yRGVzdHJveWVkKCkg
eyB9Ci0KLSAgICB2aXJ0dWFsIFBhZ2UqIGNyZWF0ZVBhZ2UoKSB7IHJldHVybiAwOyB9OwotCi0g
ICAgdmlydHVhbCBTdHJpbmcgbG9jYWxpemVkU3RyaW5nc1VSTCgpIHsgcmV0dXJuIFN0cmluZygp
OyB9Ci0KLSAgICB2aXJ0dWFsIFN0cmluZyBoaWRkZW5QYW5lbHMoKSB7IHJldHVybiBTdHJpbmco
KTsgfQotCi0gICAgdmlydHVhbCB2b2lkIHNob3dXaW5kb3coKSB7IH0KLSAgICB2aXJ0dWFsIHZv
aWQgY2xvc2VXaW5kb3coKSB7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hXaW5kb3coKSB7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoV2luZG93KCkgeyB9Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQpIHsgfQorICAgIAorICAgIHZpcnR1
YWwgdm9pZCBvcGVuSW5zcGVjdG9yRnJvbnRlbmQoSW5zcGVjdG9yQ29udHJvbGxlciopIHsgfQog
CiAgICAgdmlydHVhbCB2b2lkIGhpZ2hsaWdodChOb2RlKikgeyB9CiAgICAgdmlydHVhbCB2b2lk
IGhpZGVIaWdobGlnaHQoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgaW5zcGVjdGVkVVJMQ2hhbmdl
ZChjb25zdCBTdHJpbmcmKSB7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBwb3B1bGF0ZVNldHRpbmco
Y29uc3QgU3RyaW5nJiwgU3RyaW5nKikgeyB9CiAgICAgdmlydHVhbCB2b2lkIHN0b3JlU2V0dGlu
Zyhjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKSB7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBp
bnNwZWN0b3JXaW5kb3dPYmplY3RDbGVhcmVkKCkgeyB9CiB9OwogCiB9CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAgYi9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRl
ci5jcHAKaW5kZXggMTMzOTZlYy4uY2E3YzlhZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9sb2FkZXIv
RnJhbWVMb2FkZXIuY3BwCisrKyBiL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcApAQCAt
MzkzMyw4ICszOTMzLDYgQEAgdm9pZCBGcmFtZUxvYWRlcjo6ZGlzcGF0Y2hEaWRDbGVhcldpbmRv
d09iamVjdEluV29ybGQoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCkKICAgICBpZiAoUGFnZSogcGFn
ZSA9IG1fZnJhbWUtPnBhZ2UoKSkgewogICAgICAgICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciog
aW5zcGVjdG9yID0gcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpKQogICAgICAgICAgICAgaW5z
cGVjdG9yLT5pbnNwZWN0ZWRXaW5kb3dTY3JpcHRPYmplY3RDbGVhcmVkKG1fZnJhbWUpOwotICAg
ICAgICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yID0gcGFnZS0+cGFyZW50SW5z
cGVjdG9yQ29udHJvbGxlcigpKQotICAgICAgICAgICAgaW5zcGVjdG9yLT53aW5kb3dTY3JpcHRP
YmplY3RBdmFpbGFibGUoKTsKICAgICB9CiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGFnZS9QYWdlLmNwcCBiL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAppbmRleCBhMTFiNWRlLi4wZjkz
NmZhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKKysrIGIvV2ViQ29yZS9wYWdl
L1BhZ2UuY3BwCkBAIC0xMzYsOSArMTM2LDYgQEAgUGFnZTo6UGFnZShDaHJvbWVDbGllbnQqIGNo
cm9tZUNsaWVudCwgQ29udGV4dE1lbnVDbGllbnQqIGNvbnRleHRNZW51Q2xpZW50LCBFZGkKICAg
ICAsIG1fYXJlTWVtb3J5Q2FjaGVDbGllbnRDYWxsc0VuYWJsZWQodHJ1ZSkKICAgICAsIG1fbWVk
aWFWb2x1bWUoMSkKICAgICAsIG1famF2YVNjcmlwdFVSTHNBcmVBbGxvd2VkKHRydWUpCi0jaWYg
RU5BQkxFKElOU1BFQ1RPUikKLSAgICAsIG1fcGFyZW50SW5zcGVjdG9yQ29udHJvbGxlcigwKQot
I2VuZGlmCiAgICAgLCBtX2RpZExvYWRVc2VyU3R5bGVTaGVldChmYWxzZSkKICAgICAsIG1fdXNl
clN0eWxlU2hlZXRNb2RpZmljYXRpb25UaW1lKDApCiAgICAgLCBtX2dyb3VwKDApCkBAIC0xOTQs
OCArMTkxLDYgQEAgUGFnZTo6flBhZ2UoKQogCiAgICAgbV9lZGl0b3JDbGllbnQtPnBhZ2VEZXN0
cm95ZWQoKTsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIGlmIChtX3BhcmVudEluc3BlY3Rv
ckNvbnRyb2xsZXIpCi0gICAgICAgIG1fcGFyZW50SW5zcGVjdG9yQ29udHJvbGxlci0+cGFnZURl
c3Ryb3llZCgpOwogICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdGVkUGFnZURlc3Ry
b3llZCgpOwogI2VuZGlmCiAKQEAgLTQzNSw3ICs0MzAsNyBAQCBzdGF0aWMgRnJhbWUqIGluY3Jl
bWVudEZyYW1lKEZyYW1lKiBjdXJyLCBib29sIGZvcndhcmQsIGJvb2wgd3JhcEZsYWcpCiAgICAg
ICAgID8gY3Vyci0+dHJlZSgpLT50cmF2ZXJzZU5leHRXaXRoV3JhcCh3cmFwRmxhZykKICAgICAg
ICAgOiBjdXJyLT50cmVlKCktPnRyYXZlcnNlUHJldmlvdXNXaXRoV3JhcCh3cmFwRmxhZyk7CiB9
Ci0KKyAgICAKIGJvb2wgUGFnZTo6ZmluZFN0cmluZyhjb25zdCBTdHJpbmcmIHRhcmdldCwgVGV4
dENhc2VTZW5zaXRpdml0eSBjYXNlU2Vuc2l0aXZpdHksIEZpbmREaXJlY3Rpb24gZGlyZWN0aW9u
LCBib29sIHNob3VsZFdyYXApCiB7CiAgICAgaWYgKHRhcmdldC5pc0VtcHR5KCkgfHwgIW1haW5G
cmFtZSgpKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL1BhZ2UuaCBiL1dlYkNvcmUvcGFnZS9Q
YWdlLmgKaW5kZXggMDRhNTQ1Yy4uMGFlMjVhYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL1Bh
Z2UuaAorKysgYi9XZWJDb3JlL3BhZ2UvUGFnZS5oCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVk
ZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0
Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAKICNpZiBQTEFU
Rk9STShNQUMpCiAjaW5jbHVkZSAiU2NoZWR1bGVQYWlyLmgiCkBAIC0xNTMsMTEgKzE1NCw2IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICNlbmRpZgogICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3Mo
KSBjb25zdCB7IHJldHVybiBtX3NldHRpbmdzLmdldCgpOyB9CiAgICAgICAgIFByb2dyZXNzVHJh
Y2tlciogcHJvZ3Jlc3MoKSBjb25zdCB7IHJldHVybiBtX3Byb2dyZXNzLmdldCgpOyB9Ci0KLSNp
ZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgICAgICB2b2lkIHNldFBhcmVudEluc3BlY3RvckNvbnRy
b2xsZXIoSW5zcGVjdG9yQ29udHJvbGxlciogY29udHJvbGxlcikgeyBtX3BhcmVudEluc3BlY3Rv
ckNvbnRyb2xsZXIgPSBjb250cm9sbGVyOyB9Ci0gICAgICAgIEluc3BlY3RvckNvbnRyb2xsZXIq
IHBhcmVudEluc3BlY3RvckNvbnRyb2xsZXIoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudEluc3Bl
Y3RvckNvbnRyb2xsZXI7IH0KLSNlbmRpZgogICAgICAgICAKICAgICAgICAgdm9pZCBzZXRUYWJL
ZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMoYm9vbCBiKSB7IG1fdGFiS2V5Q3ljbGVzVGhyb3VnaEVs
ZW1lbnRzID0gYjsgfQogICAgICAgICBib29sIHRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cygp
IGNvbnN0IHsgcmV0dXJuIG1fdGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzOyB9CkBAIC0yOTQs
MTAgKzI5MCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBib29sIG1famF2YVNj
cmlwdFVSTHNBcmVBbGxvd2VkOwogCi0jaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICAgICAgSW5z
cGVjdG9yQ29udHJvbGxlciogbV9wYXJlbnRJbnNwZWN0b3JDb250cm9sbGVyOwotI2VuZGlmCi0K
ICAgICAgICAgU3RyaW5nIG1fdXNlclN0eWxlU2hlZXRQYXRoOwogICAgICAgICBtdXRhYmxlIFN0
cmluZyBtX3VzZXJTdHlsZVNoZWV0OwogICAgICAgICBtdXRhYmxlIGJvb2wgbV9kaWRMb2FkVXNl
clN0eWxlU2hlZXQ7CmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYklu
c3BlY3RvckNsaWVudC5oIGIvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JD
bGllbnQuaAppbmRleCA2NDYyMWY4Li5lZTgxYjI1IDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL1dl
YkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5oCisrKyBiL1dlYktpdC9tYWMvV2ViQ29y
ZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmgKQEAgLTI3LDE1ICsyNywxOCBAQAogICovCiAK
ICNpbXBvcnQgPFdlYkNvcmUvSW5zcGVjdG9yQ2xpZW50Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0lu
c3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1T
dHJpbmcuaD4KIAogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogCiAjaWZkZWYgX19PQkpDX18K
IEBjbGFzcyBXZWJJbnNwZWN0b3JXaW5kb3dDb250cm9sbGVyOworQGNsYXNzIFdlYk5vZGVIaWdo
bGlnaHRlcjsKIEBjbGFzcyBXZWJWaWV3OwogI2Vsc2UKIGNsYXNzIFdlYkluc3BlY3RvcldpbmRv
d0NvbnRyb2xsZXI7CitjbGFzcyBXZWJOb2RlSGlnaGxpZ2h0ZXI7CiBjbGFzcyBXZWJWaWV3Owog
I2VuZGlmCiAKQEAgLTQ1LDMyICs0OCw0MSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQg
aW5zcGVjdG9yRGVzdHJveWVkKCk7CiAKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlBhZ2UqIGNyZWF0
ZVBhZ2UoKTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlN0cmluZyBsb2NhbGl6ZWRTdHJpbmdzVVJM
KCk7Ci0KLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlN0cmluZyBoaWRkZW5QYW5lbHMoKTsKLQotICAg
IHZpcnR1YWwgdm9pZCBzaG93V2luZG93KCk7Ci0gICAgdmlydHVhbCB2b2lkIGNsb3NlV2luZG93
KCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoV2luZG93KCk7Ci0gICAgdmlydHVhbCB2b2lk
IGRldGFjaFdpbmRvdygpOwotCi0gICAgdmlydHVhbCB2b2lkIHNldEF0dGFjaGVkV2luZG93SGVp
Z2h0KHVuc2lnbmVkIGhlaWdodCk7CisgICAgdmlydHVhbCB2b2lkIG9wZW5JbnNwZWN0b3JGcm9u
dGVuZChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyKik7CiAKICAgICB2aXJ0dWFsIHZvaWQg
aGlnaGxpZ2h0KFdlYkNvcmU6Ok5vZGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgaGlkZUhpZ2hsaWdo
dCgpOwotICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6
OlN0cmluZyYgbmV3VVJMKTsKIAogICAgIHZpcnR1YWwgdm9pZCBwb3B1bGF0ZVNldHRpbmcoY29u
c3QgV2ViQ29yZTo6U3RyaW5nJiBrZXksIFdlYkNvcmU6OlN0cmluZyogdmFsdWUpOwogICAgIHZp
cnR1YWwgdm9pZCBzdG9yZVNldHRpbmcoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBrZXksIGNvbnN0
IFdlYkNvcmU6OlN0cmluZyYgdmFsdWUpOwogCi0gICAgdmlydHVhbCB2b2lkIGluc3BlY3Rvcldp
bmRvd09iamVjdENsZWFyZWQoKTsKK3ByaXZhdGU6CisgICAgV2ViVmlldyAqbV93ZWJWaWV3Owor
ICAgIFJldGFpblB0cjxXZWJOb2RlSGlnaGxpZ2h0ZXI+IG1faGlnaGxpZ2h0ZXI7Cit9OworCitj
bGFzcyBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudCA6IHB1YmxpYyBXZWJDb3JlOjpJbnNwZWN0
b3JGcm9udGVuZENsaWVudExvY2FsIHsKK3B1YmxpYzoKKyAgICBXZWJJbnNwZWN0b3JGcm9udGVu
ZENsaWVudChXZWJWaWV3KiwgV2ViSW5zcGVjdG9yV2luZG93Q29udHJvbGxlciosIFdlYkNvcmU6
Okluc3BlY3RvckNvbnRyb2xsZXIqLCBXZWJDb3JlOjpQYWdlKik7CisKKyAgICB2aXJ0dWFsIHZv
aWQgZnJvbnRlbmRMb2FkZWQoKTsKKyAgICAKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OlN0cmluZyBs
b2NhbGl6ZWRTdHJpbmdzVVJMKCk7CisgICAgdmlydHVhbCBXZWJDb3JlOjpTdHJpbmcgaGlkZGVu
UGFuZWxzKCk7CisgICAgCisgICAgdmlydHVhbCB2b2lkIGJyaW5nVG9Gcm9udCgpOworICAgIHZp
cnR1YWwgdm9pZCBjbG9zZVdpbmRvdygpOworICAgIAorICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hX
aW5kb3coKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoV2luZG93KCk7CisgICAgCisgICAgdmly
dHVhbCB2b2lkIHNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCk7CisgICAg
dmlydHVhbCB2b2lkIGluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBu
ZXdVUkwpOwogCiBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRlV2luZG93VGl0bGUoKSBjb25zdDsK
IAotICAgIFdlYlZpZXcgKm1fd2ViVmlldzsKKyAgICBXZWJWaWV3KiBtX2luc3BlY3RlZFdlYlZp
ZXc7CiAgICAgUmV0YWluUHRyPFdlYkluc3BlY3RvcldpbmRvd0NvbnRyb2xsZXI+IG1fd2luZG93
Q29udHJvbGxlcjsKICAgICBXZWJDb3JlOjpTdHJpbmcgbV9pbnNwZWN0ZWRVUkw7CiB9OwpkaWZm
IC0tZ2l0IGEvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQubW0g
Yi9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5tbQppbmRleCA4
YjUxNTY2Li44YTg3YWIwIDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dl
Ykluc3BlY3RvckNsaWVudC5tbQorKysgYi9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYklu
c3BlY3RvckNsaWVudC5tbQpAQCAtNDEsNiArNDEsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9QYWdl
Lmg+CiAjaW1wb3J0IDxXZWJLaXQvRE9NRXh0ZW5zaW9ucy5oPgogI2ltcG9ydCA8V2ViS2l0U3lz
dGVtSW50ZXJmYWNlLmg+CisjaW1wb3J0IDx3dGYvUGFzc093blB0ci5oPgogCiB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKIApAQCAtNTAsNDUgKzUxLDkwIEBAIHN0YXRpYyBjb25zdCBjaGFyKiBj
b25zdCBpbnNwZWN0b3JTdGFydHNBdHRhY2hlZE5hbWUgPSAiaW5zcGVjdG9yU3RhcnRzQXR0YWNo
ZWQiCiBAcHJpdmF0ZQogICAgIFdlYlZpZXcgKl9pbnNwZWN0ZWRXZWJWaWV3OwogICAgIFdlYlZp
ZXcgKl93ZWJWaWV3OwotICAgIFdlYk5vZGVIaWdobGlnaHQgKl9jdXJyZW50SGlnaGxpZ2h0Owor
ICAgIFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50KiBfZnJvbnRlbmRDbGllbnQ7CiAgICAgQk9P
TCBfYXR0YWNoZWRUb0luc3BlY3RlZFdlYlZpZXc7CiAgICAgQk9PTCBfc2hvdWxkQXR0YWNoOwog
ICAgIEJPT0wgX3Zpc2libGU7Ci0gICAgQk9PTCBfbW92aW5nV2luZG93czsKKyAgICBCT09MIF9k
ZXN0cm95aW5nSW5zcGVjdG9yVmlldzsKIH0KIC0gKGlkKWluaXRXaXRoSW5zcGVjdGVkV2ViVmll
dzooV2ViVmlldyAqKXdlYlZpZXc7Ci0tIChCT09MKWluc3BlY3RvclZpc2libGU7CiAtIChXZWJW
aWV3ICopd2ViVmlldzsKIC0gKHZvaWQpYXR0YWNoOwogLSAodm9pZClkZXRhY2g7CistIChCT09M
KWF0dGFjaGVkOworLSAodm9pZClzZXRGcm9udGVuZENsaWVudDooV2ViSW5zcGVjdG9yRnJvbnRl
bmRDbGllbnQqKWZyb250ZW5kQ2xpZW50OwogLSAodm9pZClzZXRBdHRhY2hlZFdpbmRvd0hlaWdo
dDoodW5zaWduZWQpaGVpZ2h0OworLSAodm9pZClkZXN0cm95SW5zcGVjdG9yVmlldzsKK0BlbmQK
KworI3ByYWdtYSBtYXJrIC0KKworQGludGVyZmFjZSBXZWJOb2RlSGlnaGxpZ2h0ZXIgOiBOU09i
amVjdCB7CitAcHJpdmF0ZQorICAgIFdlYlZpZXcgKl9pbnNwZWN0ZWRXZWJWaWV3OworICAgIFdl
Yk5vZGVIaWdobGlnaHQgKl9jdXJyZW50SGlnaGxpZ2h0OworfQorLSAoaWQpaW5pdFdpdGhJbnNw
ZWN0ZWRXZWJWaWV3OihXZWJWaWV3ICopd2ViVmlldzsKIC0gKHZvaWQpaGlnaGxpZ2h0Tm9kZToo
RE9NTm9kZSAqKW5vZGU7CiAtICh2b2lkKWhpZGVIaWdobGlnaHQ7CiBAZW5kCiAKICNwcmFnbWEg
bWFyayAtCiAKKwogV2ViSW5zcGVjdG9yQ2xpZW50OjpXZWJJbnNwZWN0b3JDbGllbnQoV2ViVmll
dyAqd2ViVmlldykKIDogbV93ZWJWaWV3KHdlYlZpZXcpCissIG1faGlnaGxpZ2h0ZXIoQWRvcHRO
UywgW1tXZWJOb2RlSGlnaGxpZ2h0ZXIgYWxsb2NdIGluaXRXaXRoSW5zcGVjdGVkV2ViVmlldzp3
ZWJWaWV3XSkKIHsKIH0KIAogdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6Omluc3BlY3RvckRlc3Ry
b3llZCgpCiB7Ci0gICAgW1ttX3dpbmRvd0NvbnRyb2xsZXIuZ2V0KCkgd2ViVmlld10gY2xvc2Vd
OwogICAgIGRlbGV0ZSB0aGlzOwogfQogCi1QYWdlKiBXZWJJbnNwZWN0b3JDbGllbnQ6OmNyZWF0
ZVBhZ2UoKQordm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6Om9wZW5JbnNwZWN0b3JGcm9udGVuZChJ
bnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyKQoreworICAgIFJldGFpblB0
cjxXZWJJbnNwZWN0b3JXaW5kb3dDb250cm9sbGVyPiB3aW5kb3dDb250cm9sbGVyKEFkb3B0TlMs
IFtbV2ViSW5zcGVjdG9yV2luZG93Q29udHJvbGxlciBhbGxvY10gaW5pdFdpdGhJbnNwZWN0ZWRX
ZWJWaWV3Om1fd2ViVmlld10pOworICAgIFBhZ2UqIGZyb250ZW5kUGFnZSA9IGNvcmUoW3dpbmRv
d0NvbnRyb2xsZXIuZ2V0KCkgd2ViVmlld10pOworCisgICAgZnJvbnRlbmRQYWdlLT5pbnNwZWN0
b3JDb250cm9sbGVyKCktPnNldEluc3BlY3RvckZyb250ZW5kQ2xpZW50KG5ldyBXZWJJbnNwZWN0
b3JGcm9udGVuZENsaWVudChtX3dlYlZpZXcsIHdpbmRvd0NvbnRyb2xsZXIuZ2V0KCksIGluc3Bl
Y3RvckNvbnRyb2xsZXIsIGZyb250ZW5kUGFnZSkpOworfQorCit2b2lkIFdlYkluc3BlY3RvckNs
aWVudDo6aGlnaGxpZ2h0KE5vZGUqIG5vZGUpCit7CisgICAgW21faGlnaGxpZ2h0ZXIuZ2V0KCkg
aGlnaGxpZ2h0Tm9kZTpraXQobm9kZSldOworfQorCit2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6
aGlkZUhpZ2hsaWdodCgpCiB7Ci0gICAgaWYgKG1fd2luZG93Q29udHJvbGxlcikKLSAgICAgICAg
W1ttX3dpbmRvd0NvbnRyb2xsZXIuZ2V0KCkgd2ViVmlld10gY2xvc2VdOwotICAgIG1fd2luZG93
Q29udHJvbGxlci5hZG9wdE5TKFtbV2ViSW5zcGVjdG9yV2luZG93Q29udHJvbGxlciBhbGxvY10g
aW5pdFdpdGhJbnNwZWN0ZWRXZWJWaWV3Om1fd2ViVmlld10pOworICAgIFttX2hpZ2hsaWdodGVy
LmdldCgpIGhpZGVIaWdobGlnaHRdOworfQogCi0gICAgcmV0dXJuIGNvcmUoW21fd2luZG93Q29u
dHJvbGxlci5nZXQoKSB3ZWJWaWV3XSk7CitXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6V2Vi
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQoV2ViVmlldyogaW5zcGVjdGVkV2ViVmlldywgV2ViSW5z
cGVjdG9yV2luZG93Q29udHJvbGxlciogd2luZG93Q29udHJvbGxlciwgSW5zcGVjdG9yQ29udHJv
bGxlciogaW5zcGVjdG9yQ29udHJvbGxlciwgUGFnZSogZnJvbnRlbmRQYWdlKQorICAgIDogSW5z
cGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbChpbnNwZWN0b3JDb250cm9sbGVyLCAgZnJvbnRlbmRQ
YWdlKQorICAgICwgbV9pbnNwZWN0ZWRXZWJWaWV3KGluc3BlY3RlZFdlYlZpZXcpCisgICAgLCBt
X3dpbmRvd0NvbnRyb2xsZXIod2luZG93Q29udHJvbGxlcikKK3sKKyAgICBbd2luZG93Q29udHJv
bGxlciBzZXRGcm9udGVuZENsaWVudDp0aGlzXTsKIH0KIAotU3RyaW5nIFdlYkluc3BlY3RvckNs
aWVudDo6bG9jYWxpemVkU3RyaW5nc1VSTCgpCit2b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQ2xp
ZW50Ojpmcm9udGVuZExvYWRlZCgpCit7CisgICAgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2Nh
bDo6ZnJvbnRlbmRMb2FkZWQoKTsKKworICAgIFdlYkZyYW1lICpmcmFtZSA9IFttX2luc3BlY3Rl
ZFdlYlZpZXcgbWFpbkZyYW1lXTsKKyAgICAKKyAgICBXZWJGcmFtZUxvYWREZWxlZ2F0ZUltcGxl
bWVudGF0aW9uQ2FjaGUqIGltcGxlbWVudGF0aW9ucyA9IFdlYlZpZXdHZXRGcmFtZUxvYWREZWxl
Z2F0ZUltcGxlbWVudGF0aW9ucyhtX2luc3BlY3RlZFdlYlZpZXcpOworICAgIGlmIChpbXBsZW1l
bnRhdGlvbnMtPmRpZENsZWFySW5zcGVjdG9yV2luZG93T2JqZWN0Rm9yRnJhbWVGdW5jKQorICAg
ICAgICBDYWxsRnJhbWVMb2FkRGVsZWdhdGUoaW1wbGVtZW50YXRpb25zLT5kaWRDbGVhckluc3Bl
Y3RvcldpbmRvd09iamVjdEZvckZyYW1lRnVuYywgbV9pbnNwZWN0ZWRXZWJWaWV3LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQHNlbGVjdG9yKHdlYlZpZXc6ZGlkQ2xlYXJJbnNwZWN0
b3JXaW5kb3dPYmplY3Q6Zm9yRnJhbWU6KSwgW2ZyYW1lIHdpbmRvd09iamVjdF0sIGZyYW1lKTsK
KworICAgIGJvb2wgYXR0YWNoZWQgPSBbbV93aW5kb3dDb250cm9sbGVyLmdldCgpIGF0dGFjaGVk
XTsKKyAgICBzZXRBdHRhY2hlZFdpbmRvdyhhdHRhY2hlZCk7Cit9CisKK1N0cmluZyBXZWJJbnNw
ZWN0b3JGcm9udGVuZENsaWVudDo6bG9jYWxpemVkU3RyaW5nc1VSTCgpCiB7CiAgICAgTlNTdHJp
bmcgKnBhdGggPSBbW05TQnVuZGxlIGJ1bmRsZVdpdGhJZGVudGlmaWVyOkAiY29tLmFwcGxlLldl
YkNvcmUiXSBwYXRoRm9yUmVzb3VyY2U6QCJsb2NhbGl6ZWRTdHJpbmdzIiBvZlR5cGU6QCJqcyJd
OwogICAgIGlmIChwYXRoKQpAQCAtOTYsNyArMTQyLDcgQEAgU3RyaW5nIFdlYkluc3BlY3RvckNs
aWVudDo6bG9jYWxpemVkU3RyaW5nc1VSTCgpCiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCi1T
dHJpbmcgV2ViSW5zcGVjdG9yQ2xpZW50OjpoaWRkZW5QYW5lbHMoKQorU3RyaW5nIFdlYkluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50OjpoaWRkZW5QYW5lbHMoKQogewogICAgIE5TU3RyaW5nICpoaWRk
ZW5QYW5lbHMgPSBbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBzdHJpbmdG
b3JLZXk6QCJXZWJLaXRJbnNwZWN0b3JIaWRkZW5QYW5lbHMiXTsKICAgICBpZiAoaGlkZGVuUGFu
ZWxzKQpAQCAtMTA0LDYzICsxNTAsNDUgQEAgU3RyaW5nIFdlYkluc3BlY3RvckNsaWVudDo6aGlk
ZGVuUGFuZWxzKCkKICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKLXZvaWQgV2ViSW5zcGVjdG9y
Q2xpZW50OjpzaG93V2luZG93KCkKK3ZvaWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmJy
aW5nVG9Gcm9udCgpCiB7CiAgICAgdXBkYXRlV2luZG93VGl0bGUoKTsKICAgICBbbV93aW5kb3dD
b250cm9sbGVyLmdldCgpIHNob3dXaW5kb3c6bmlsXTsKIH0KIAotdm9pZCBXZWJJbnNwZWN0b3JD
bGllbnQ6OmNsb3NlV2luZG93KCkKK3ZvaWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmNs
b3NlV2luZG93KCkKIHsKLSAgICBbbV93aW5kb3dDb250cm9sbGVyLmdldCgpIGNsb3NlXTsKKyAg
ICBbbV93aW5kb3dDb250cm9sbGVyLmdldCgpIGRlc3Ryb3lJbnNwZWN0b3JWaWV3XTsKIH0KIAot
dm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmF0dGFjaFdpbmRvdygpCit2b2lkIFdlYkluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50OjphdHRhY2hXaW5kb3coKQogewogICAgIFttX3dpbmRvd0NvbnRyb2xs
ZXIuZ2V0KCkgYXR0YWNoXTsKKyAgICByZXN0b3JlQXR0YWNoZWRXaW5kb3dIZWlnaHQoKTsKIH0K
IAotdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmRldGFjaFdpbmRvdygpCit2b2lkIFdlYkluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50OjpkZXRhY2hXaW5kb3coKQogewogICAgIFttX3dpbmRvd0NvbnRy
b2xsZXIuZ2V0KCkgZGV0YWNoXTsKIH0KIAotdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OnNldEF0
dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkKK3ZvaWQgV2ViSW5zcGVjdG9yRnJv
bnRlbmRDbGllbnQ6OnNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkKIHsK
ICAgICBbbV93aW5kb3dDb250cm9sbGVyLmdldCgpIHNldEF0dGFjaGVkV2luZG93SGVpZ2h0Omhl
aWdodF07CiB9CiAKLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpoaWdobGlnaHQoTm9kZSogbm9k
ZSkKLXsKLSAgICBbbV93aW5kb3dDb250cm9sbGVyLmdldCgpIGhpZ2hsaWdodE5vZGU6a2l0KG5v
ZGUpXTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmhpZGVIaWdobGlnaHQoKQotewot
ICAgIFttX3dpbmRvd0NvbnRyb2xsZXIuZ2V0KCkgaGlkZUhpZ2hsaWdodF07Ci19Ci0KLXZvaWQg
V2ViSW5zcGVjdG9yQ2xpZW50OjppbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYgbmV3
VVJMKQordm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6aW5zcGVjdGVkVVJMQ2hhbmdl
ZChjb25zdCBTdHJpbmcmIG5ld1VSTCkKIHsKICAgICBtX2luc3BlY3RlZFVSTCA9IG5ld1VSTDsK
ICAgICB1cGRhdGVXaW5kb3dUaXRsZSgpOwogfQogCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6
dXBkYXRlV2luZG93VGl0bGUoKSBjb25zdAordm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVu
dDo6dXBkYXRlV2luZG93VGl0bGUoKSBjb25zdAogewogICAgIE5TU3RyaW5nICp0aXRsZSA9IFtO
U1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OlVJX1NUUklORygiV2ViIEluc3BlY3RvciDigJQgJUAi
LCAiV2ViIEluc3BlY3RvciB3aW5kb3cgdGl0bGUiKSwgKE5TU3RyaW5nICopbV9pbnNwZWN0ZWRV
UkxdOwogICAgIFtbbV93aW5kb3dDb250cm9sbGVyLmdldCgpIHdpbmRvd10gc2V0VGl0bGU6dGl0
bGVdOwogfQogCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6aW5zcGVjdG9yV2luZG93T2JqZWN0
Q2xlYXJlZCgpCi17Ci0gICAgV2ViRnJhbWUgKmZyYW1lID0gW21fd2ViVmlldyBtYWluRnJhbWVd
OwotICAgIAotICAgIFdlYkZyYW1lTG9hZERlbGVnYXRlSW1wbGVtZW50YXRpb25DYWNoZSogaW1w
bGVtZW50YXRpb25zID0gV2ViVmlld0dldEZyYW1lTG9hZERlbGVnYXRlSW1wbGVtZW50YXRpb25z
KG1fd2ViVmlldyk7Ci0gICAgaWYgKGltcGxlbWVudGF0aW9ucy0+ZGlkQ2xlYXJJbnNwZWN0b3JX
aW5kb3dPYmplY3RGb3JGcmFtZUZ1bmMpCi0gICAgICAgIENhbGxGcmFtZUxvYWREZWxlZ2F0ZShp
bXBsZW1lbnRhdGlvbnMtPmRpZENsZWFySW5zcGVjdG9yV2luZG93T2JqZWN0Rm9yRnJhbWVGdW5j
LCBtX3dlYlZpZXcsCi0gICAgICAgICAgQHNlbGVjdG9yKHdlYlZpZXc6ZGlkQ2xlYXJJbnNwZWN0
b3JXaW5kb3dPYmplY3Q6Zm9yRnJhbWU6KSwgW2ZyYW1lIHdpbmRvd09iamVjdF0sIGZyYW1lKTsK
LX0KIAogI3ByYWdtYSBtYXJrIC0KIApAQCAtMjIzLDE4ICsyNTEsMTIgQEAgdm9pZCBXZWJJbnNw
ZWN0b3JDbGllbnQ6Omluc3BlY3RvcldpbmRvd09iamVjdENsZWFyZWQoKQogCiAtICh2b2lkKWRl
YWxsb2MKIHsKLSAgICBBU1NFUlQoIV9jdXJyZW50SGlnaGxpZ2h0KTsKICAgICBbX3dlYlZpZXcg
cmVsZWFzZV07CiAgICAgW3N1cGVyIGRlYWxsb2NdOwogfQogCiAjcHJhZ21hIG1hcmsgLQogCi0t
IChCT09MKWluc3BlY3RvclZpc2libGUKLXsKLSAgICByZXR1cm4gX3Zpc2libGU7Ci19Ci0KIC0g
KFdlYlZpZXcgKil3ZWJWaWV3CiB7CiAgICAgcmV0dXJuIF93ZWJWaWV3OwpAQCAtMjczLDExICsy
OTUsNyBAQCB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6aW5zcGVjdG9yV2luZG93T2JqZWN0Q2xl
YXJlZCgpCiAKIC0gKEJPT0wpd2luZG93U2hvdWxkQ2xvc2U6KGlkKXNlbmRlcgogewotICAgIF92
aXNpYmxlID0gTk87Ci0KLSAgICBbX2luc3BlY3RlZFdlYlZpZXcgcGFnZV0tPmluc3BlY3RvckNv
bnRyb2xsZXIoKS0+c2V0V2luZG93VmlzaWJsZShmYWxzZSk7Ci0KLSAgICBbc2VsZiBoaWRlSGln
aGxpZ2h0XTsKKyAgICBbc2VsZiBkZXN0cm95SW5zcGVjdG9yVmlld107CiAKICAgICByZXR1cm4g
WUVTOwogfQpAQCAtMjg5LDExICszMDcsNiBAQCB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6aW5z
cGVjdG9yV2luZG93T2JqZWN0Q2xlYXJlZCgpCiAKICAgICBfdmlzaWJsZSA9IE5POwogCi0gICAg
aWYgKCFfbW92aW5nV2luZG93cykKLSAgICAgICAgW19pbnNwZWN0ZWRXZWJWaWV3IHBhZ2VdLT5p
bnNwZWN0b3JDb250cm9sbGVyKCktPnNldFdpbmRvd1Zpc2libGUoZmFsc2UpOwotCi0gICAgW3Nl
bGYgaGlkZUhpZ2hsaWdodF07Ci0KICAgICBpZiAoX2F0dGFjaGVkVG9JbnNwZWN0ZWRXZWJWaWV3
KSB7CiAgICAgICAgIGlmIChbX2luc3BlY3RlZFdlYlZpZXcgX2lzQ2xvc2VkXSkKICAgICAgICAg
ICAgIHJldHVybjsKQEAgLTMzMCw3ICszNDMsNyBAQCB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6
aW5zcGVjdG9yV2luZG93T2JqZWN0Q2xlYXJlZCgpCiAgICAgU3RyaW5nIHNob3VsZEF0dGFjaCA9
IFtfaW5zcGVjdGVkV2ViVmlldyBwYWdlXS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5zZXR0aW5n
KGluc3BlY3RvclN0YXJ0c0F0dGFjaGVkTmFtZSk7CiAgICAgX3Nob3VsZEF0dGFjaCA9IHNob3Vs
ZEF0dGFjaCAhPSAiZmFsc2UiOwogICAgIAotICAgIGlmIChfc2hvdWxkQXR0YWNoICYmICFbX2lu
c3BlY3RlZFdlYlZpZXcgcGFnZV0tPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+Y2FuQXR0YWNoV2lu
ZG93KCkpCisgICAgaWYgKF9zaG91bGRBdHRhY2ggJiYgIV9mcm9udGVuZENsaWVudC0+Y2FuQXR0
YWNoV2luZG93KCkpCiAgICAgICAgIF9zaG91bGRBdHRhY2ggPSBOTzsKIAogICAgIGlmIChfc2hv
dWxkQXR0YWNoKSB7CkBAIC0zNTQsOCArMzY3LDYgQEAgdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6
Omluc3BlY3RvcldpbmRvd09iamVjdENsZWFyZWQoKQogCiAgICAgICAgIFtzdXBlciBzaG93V2lu
ZG93Om5pbF07CiAgICAgfQotCi0gICAgW19pbnNwZWN0ZWRXZWJWaWV3IHBhZ2VdLT5pbnNwZWN0
b3JDb250cm9sbGVyKCktPnNldFdpbmRvd1Zpc2libGUodHJ1ZSwgX3Nob3VsZEF0dGFjaCk7CiB9
CiAKICNwcmFnbWEgbWFyayAtCkBAIC0zNjYsMTIgKzM3Nyw5IEBAIHZvaWQgV2ViSW5zcGVjdG9y
Q2xpZW50OjppbnNwZWN0b3JXaW5kb3dPYmplY3RDbGVhcmVkKCkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgW19pbnNwZWN0ZWRXZWJWaWV3IHBhZ2VdLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnNl
dFNldHRpbmcoaW5zcGVjdG9yU3RhcnRzQXR0YWNoZWROYW1lLCAidHJ1ZSIpOwotICAgIF9tb3Zp
bmdXaW5kb3dzID0gWUVTOwogCiAgICAgW3NlbGYgY2xvc2VdOwogICAgIFtzZWxmIHNob3dXaW5k
b3c6bmlsXTsKLQotICAgIF9tb3ZpbmdXaW5kb3dzID0gTk87CiB9CiAKIC0gKHZvaWQpZGV0YWNo
CkBAIC0zODAsMTMgKzM4OCwxOSBAQCB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6aW5zcGVjdG9y
V2luZG93T2JqZWN0Q2xlYXJlZCgpCiAgICAgICAgIHJldHVybjsKIAogICAgIFtfaW5zcGVjdGVk
V2ViVmlldyBwYWdlXS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5zZXRTZXR0aW5nKGluc3BlY3Rv
clN0YXJ0c0F0dGFjaGVkTmFtZSwgImZhbHNlIik7Ci0gICAgX21vdmluZ1dpbmRvd3MgPSBZRVM7
CiAKICAgICBbc2VsZiBjbG9zZV07CiAgICAgW3NlbGYgc2hvd1dpbmRvdzpuaWxdOworfQogCi0g
ICAgX21vdmluZ1dpbmRvd3MgPSBOTzsKKy0gKEJPT0wpYXR0YWNoZWQKK3sKKyAgICByZXR1cm4g
X2F0dGFjaGVkVG9JbnNwZWN0ZWRXZWJWaWV3OworfQogCistICh2b2lkKXNldEZyb250ZW5kQ2xp
ZW50OihXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudCopZnJvbnRlbmRDbGllbnQKK3sKKyAgICBf
ZnJvbnRlbmRDbGllbnQgPSBmcm9udGVuZENsaWVudDsKIH0KIAogLSAodm9pZClzZXRBdHRhY2hl
ZFdpbmRvd0hlaWdodDoodW5zaWduZWQpaGVpZ2h0CkBAIC00MDcsMjkgKzQyMSwxNyBAQCB2b2lk
IFdlYkluc3BlY3RvckNsaWVudDo6aW5zcGVjdG9yV2luZG93T2JqZWN0Q2xlYXJlZCgpCiAgICAg
W2ZyYW1lVmlldyBzZXRGcmFtZTpmcmFtZVZpZXdSZWN0XTsKIH0KIAotI3ByYWdtYSBtYXJrIC0K
LQotLSAodm9pZCloaWdobGlnaHROb2RlOihET01Ob2RlICopbm9kZQorLSAodm9pZClkZXN0cm95
SW5zcGVjdG9yVmlldwogewotICAgIC8vIFRoZSBzY3JvbGx2aWV3J3MgY29udGVudCB2aWV3IHN0
YXlzIGFyb3VuZCBiZXR3ZWVuIHBhZ2UgbmF2aWdhdGlvbnMsIHNvIHRhcmdldCBpdAotICAgIE5T
VmlldyAqdmlldyA9IFtbW1tbX2luc3BlY3RlZFdlYlZpZXcgbWFpbkZyYW1lXSBmcmFtZVZpZXdd
IGRvY3VtZW50Vmlld10gZW5jbG9zaW5nU2Nyb2xsVmlld10gY29udGVudFZpZXddOwotICAgIGlm
ICghW3ZpZXcgd2luZG93XSkKLSAgICAgICAgcmV0dXJuOyAvLyBza2lwIHRoZSBoaWdobGlnaHQg
aWYgd2UgaGF2ZSBubyB3aW5kb3cgKGUuZy4gaGlkZGVuIHRhYikKLQotICAgIGlmICghX2N1cnJl
bnRIaWdobGlnaHQpIHsKLSAgICAgICAgX2N1cnJlbnRIaWdobGlnaHQgPSBbW1dlYk5vZGVIaWdo
bGlnaHQgYWxsb2NdIGluaXRXaXRoVGFyZ2V0Vmlldzp2aWV3IGluc3BlY3RvckNvbnRyb2xsZXI6
W19pbnNwZWN0ZWRXZWJWaWV3IHBhZ2VdLT5pbnNwZWN0b3JDb250cm9sbGVyKCldOwotICAgICAg
ICBbX2N1cnJlbnRIaWdobGlnaHQgc2V0RGVsZWdhdGU6c2VsZl07Ci0gICAgICAgIFtfY3VycmVu
dEhpZ2hsaWdodCBhdHRhY2hdOwotICAgIH0gZWxzZQotICAgICAgICBbW19jdXJyZW50SGlnaGxp
Z2h0IGhpZ2hsaWdodFZpZXddIHNldE5lZWRzRGlzcGxheTpZRVNdOwotfQorICAgIGlmIChfZGVz
dHJveWluZ0luc3BlY3RvclZpZXcpCisgICAgICAgIHJldHVybjsKKyAgICBfZGVzdHJveWluZ0lu
c3BlY3RvclZpZXcgPSBZRVM7CiAKLS0gKHZvaWQpaGlkZUhpZ2hsaWdodAotewotICAgIFtfY3Vy
cmVudEhpZ2hsaWdodCBkZXRhY2hdOwotICAgIFtfY3VycmVudEhpZ2hsaWdodCBzZXREZWxlZ2F0
ZTpuaWxdOwotICAgIFtfY3VycmVudEhpZ2hsaWdodCByZWxlYXNlXTsKLSAgICBfY3VycmVudEhp
Z2hsaWdodCA9IG5pbDsKKyAgICBpZiAoX2F0dGFjaGVkVG9JbnNwZWN0ZWRXZWJWaWV3KQorICAg
ICAgICBbc2VsZiBjbG9zZV07CisgICAgX3Zpc2libGUgPSBOTzsKKyAgICBbX2luc3BlY3RlZFdl
YlZpZXcgcGFnZV0tPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+Y2xvc2UoKTsKKyAgICBbX3dlYlZp
ZXcgY2xvc2VdOwogfQogCiAjcHJhZ21hIG1hcmsgLQpAQCAtNDk5LDMgKzUwMSw2MCBAQCB2b2lk
IFdlYkluc3BlY3RvckNsaWVudDo6aW5zcGVjdG9yV2luZG93T2JqZWN0Q2xlYXJlZCgpCiB9CiAK
IEBlbmQKKworCisjcHJhZ21hIG1hcmsgLQorCitAaW1wbGVtZW50YXRpb24gV2ViTm9kZUhpZ2hs
aWdodGVyCistIChpZClpbml0V2l0aEluc3BlY3RlZFdlYlZpZXc6KFdlYlZpZXcgKil3ZWJWaWV3
Cit7CisgICAgLy8gRG9uJ3QgcmV0YWluIHRvIGF2b2lkIGEgY2lyY3VsYXIgcmVmZXJlbmNlCisg
ICAgX2luc3BlY3RlZFdlYlZpZXcgPSB3ZWJWaWV3OworICAgIHJldHVybiBzZWxmOworfQorCist
ICh2b2lkKWRlYWxsb2MKK3sKKyAgICBBU1NFUlQoIV9jdXJyZW50SGlnaGxpZ2h0KTsKKyAgICBb
c3VwZXIgZGVhbGxvY107Cit9CisKKyNwcmFnbWEgbWFyayAtCisKKy0gKHZvaWQpaGlnaGxpZ2h0
Tm9kZTooRE9NTm9kZSAqKW5vZGUKK3sKKyAgICAvLyBUaGUgc2Nyb2xsdmlldydzIGNvbnRlbnQg
dmlldyBzdGF5cyBhcm91bmQgYmV0d2VlbiBwYWdlIG5hdmlnYXRpb25zLCBzbyB0YXJnZXQgaXQK
KyAgICBOU1ZpZXcgKnZpZXcgPSBbW1tbW19pbnNwZWN0ZWRXZWJWaWV3IG1haW5GcmFtZV0gZnJh
bWVWaWV3XSBkb2N1bWVudFZpZXddIGVuY2xvc2luZ1Njcm9sbFZpZXddIGNvbnRlbnRWaWV3XTsK
KyAgICBpZiAoIVt2aWV3IHdpbmRvd10pCisgICAgICAgIHJldHVybjsgLy8gc2tpcCB0aGUgaGln
aGxpZ2h0IGlmIHdlIGhhdmUgbm8gd2luZG93IChlLmcuIGhpZGRlbiB0YWIpCisgICAgCisgICAg
aWYgKCFfY3VycmVudEhpZ2hsaWdodCkgeworICAgICAgICBfY3VycmVudEhpZ2hsaWdodCA9IFtb
V2ViTm9kZUhpZ2hsaWdodCBhbGxvY10gaW5pdFdpdGhUYXJnZXRWaWV3OnZpZXcgaW5zcGVjdG9y
Q29udHJvbGxlcjpbX2luc3BlY3RlZFdlYlZpZXcgcGFnZV0tPmluc3BlY3RvckNvbnRyb2xsZXIo
KV07CisgICAgICAgIFtfY3VycmVudEhpZ2hsaWdodCBzZXREZWxlZ2F0ZTpzZWxmXTsKKyAgICAg
ICAgW19jdXJyZW50SGlnaGxpZ2h0IGF0dGFjaF07CisgICAgfSBlbHNlCisgICAgICAgIFtbX2N1
cnJlbnRIaWdobGlnaHQgaGlnaGxpZ2h0Vmlld10gc2V0TmVlZHNEaXNwbGF5OllFU107Cit9CisK
Ky0gKHZvaWQpaGlkZUhpZ2hsaWdodAoreworICAgIFtfY3VycmVudEhpZ2hsaWdodCBkZXRhY2hd
OworICAgIFtfY3VycmVudEhpZ2hsaWdodCBzZXREZWxlZ2F0ZTpuaWxdOworICAgIFtfY3VycmVu
dEhpZ2hsaWdodCByZWxlYXNlXTsKKyAgICBfY3VycmVudEhpZ2hsaWdodCA9IG5pbDsKK30KKwor
I3ByYWdtYSBtYXJrIC0KKyNwcmFnbWEgbWFyayBXZWJOb2RlSGlnaGxpZ2h0IGRlbGVnYXRlCisK
Ky0gKHZvaWQpZGlkQXR0YWNoV2ViTm9kZUhpZ2hsaWdodDooV2ViTm9kZUhpZ2hsaWdodCAqKWhp
Z2hsaWdodAoreworICAgIFtfaW5zcGVjdGVkV2ViVmlldyBzZXRDdXJyZW50Tm9kZUhpZ2hsaWdo
dDpoaWdobGlnaHRdOworfQorCistICh2b2lkKXdpbGxEZXRhY2hXZWJOb2RlSGlnaGxpZ2h0OihX
ZWJOb2RlSGlnaGxpZ2h0ICopaGlnaGxpZ2h0Cit7CisgICAgW19pbnNwZWN0ZWRXZWJWaWV3IHNl
dEN1cnJlbnROb2RlSGlnaGxpZ2h0Om5pbF07Cit9CisgICAgCitAZW5kCmRpZmYgLS1naXQgYS9X
ZWJLaXQvbWFjL1dlYkluc3BlY3Rvci9XZWJJbnNwZWN0b3IubW0gYi9XZWJLaXQvbWFjL1dlYklu
c3BlY3Rvci9XZWJJbnNwZWN0b3IubW0KaW5kZXggMjU4ZGQwMS4uOWIxNzQ1OSAxMDA2NDQKLS0t
IGEvV2ViS2l0L21hYy9XZWJJbnNwZWN0b3IvV2ViSW5zcGVjdG9yLm1tCisrKyBiL1dlYktpdC9t
YWMvV2ViSW5zcGVjdG9yL1dlYkluc3BlY3Rvci5tbQpAQCAtMTc1LDE0ICsxNzUsMTAgQEAgdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIC0gKHZvaWQpYXR0YWNoOihpZClzZW5kZXIKIHsKLSAg
ICBpZiAoUGFnZSogcGFnZSA9IGNvcmUoX3dlYlZpZXcpKQotICAgICAgICBwYWdlLT5pbnNwZWN0
b3JDb250cm9sbGVyKCktPmF0dGFjaFdpbmRvdygpOwogfQogCiAtICh2b2lkKWRldGFjaDooaWQp
c2VuZGVyCiB7Ci0gICAgaWYgKFBhZ2UqIHBhZ2UgPSBjb3JlKF93ZWJWaWV3KSkKLSAgICAgICAg
cGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5kZXRhY2hXaW5kb3coKTsKIH0KIAogLSAodm9p
ZClldmFsdWF0ZUluRnJvbnRlbmQ6KGlkKXNlbmRlciBjYWxsSWQ6KGxvbmcpY2FsbElkIHNjcmlw
dDooTlNTdHJpbmcgKilzY3JpcHQK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50424</attachid>
            <date>2010-03-10 12:38:36 -0800</date>
            <delta_ts>2010-03-11 05:58:37 -0800</delta_ts>
            <desc>patch</desc>
            <filename>frontend-client.patch</filename>
            <type>text/plain</type>
            <size>161249</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OTgwOTQ3NS4uODg5OTE4MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMTAgQEAKKzIwMTAtMDMtMTAgIFl1cnkgU2VtaWto
YXRza3kgPHl1cnlzQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBJbnRyb2R1Y2UgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQgdGhh
dCBwcm92aWRlcyBJbnNwZWN0b3JGcm9udGVuZCB3aXRoIGFuIGludGVyZmFjZSB0byB0aGUgZW1i
ZWRkZXIuIEluc3BlY3RvckNsaWVudCBub3cgc2VydmVzIGFzIGEgZGVsZWdhdGUgZm9yIEluc3Bl
Y3RvckNvbnRyb2xsZXIgYW5kIGRvZXMgbm90IGNvbnRhaW4gbWV0aG9kcyBmb3IgbWFuYWdpbmcg
aW5zcGVjdG9yIGZyb250ZW5kIHdpbmRvdy4gVGhhdCBhbGxvd3MgdG8gY3JlYXRlIHJlbW90ZSBJ
bnNwZWN0b3JGcm9udGVuZEhvc3QuCisKKyAgICAgICAgSW50cm9kdWNlIEluc3BlY3RvckZyb250
ZW5kQ2xpZW50IHRoYXQgd291bGQgcHJvdmlkZSBJbnNwZWN0b3JGcm9udGVuZCB3aXRoIGFuIGlu
dGVyZmFjZSB0byB0aGUgZW1iZWRkZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTM1MDM2CisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiAoT09QUyEpCisK
KyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLkluc3BlY3Rvci5l
eHA6CisgICAgICAgICogV2ViQ29yZS5iYXNlLmV4cDoKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6
CisgICAgICAgICogV2ViQ29yZS5vcmRlcjoKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAg
ICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaW5zcGVj
dG9yL0NvbnNvbGVNZXNzYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnNvbGVNZXNzYWdl
OjphZGRUb0Zyb250ZW5kKToKKyAgICAgICAgKiBpbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuaDoK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ2xpZW50Lmg6CisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
Q29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JDb250cm9sbGVyOjp+SW5zcGVjdG9yQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0ZWRQYWdlRGVzdHJveWVkKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OndpbmRvd1Zpc2libGUpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZnJvbnRlbmRSZWFkeSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjp3aWxsQ2xvc2VGcm9udGVuZCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjphZGRDb25zb2xlTWVzc2FnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRJbnNwZWN0b3JGcm9udGVuZENs
aWVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0ZWRX
aW5kb3dTY3JpcHRPYmplY3RDbGVhcmVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNv
bnRyb2xsZXI6OnNldEZyb250ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRy
b2xsZXI6OnNob3cpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6Y2xv
c2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6cmVsZWFzZURPTUFn
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnBvcHVsYXRlU2Ny
aXB0T2JqZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRD
b21taXRMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmdldFBy
b2ZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZW5hYmxlRGVi
dWdnZXIpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpoYXNJbnNwZWN0b3JGcm9udGVuZENs
aWVudCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kOjpJbnNwZWN0b3JGcm9udGVuZCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZDo6fkluc3BlY3RvckZyb250ZW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kOjphZGRDb25zb2xlTWVzc2FnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZDo6YnJpbmdUb0Zyb250KToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kOjppbnNwZWN0ZWRVUkxDaGFuZ2VkKToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuaDoKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JGcm9udGVuZENsaWVudDo6fkluc3BlY3RvckZyb250ZW5kQ2xpZW50KToKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RnJvbnRlbmRNZW51UHJvdmlkZXI6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpGcm9udGVuZE1lbnVQcm92aWRlcjo6ZGlzY29ubmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGcm9udGVuZE1lbnVQcm92aWRlcjo6RnJvbnRlbmRNZW51UHJvdmlkZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6RnJvbnRlbmRNZW51UHJvdmlkZXI6On5Gcm9udGVuZE1lbnVQcm92aWRl
cik6CisgICAgICAgIChXZWJDb3JlOjpGcm9udGVuZE1lbnVQcm92aWRlcjo6cG9wdWxhdGVDb250
ZXh0TWVudSk6CisgICAgICAgIChXZWJDb3JlOjpGcm9udGVuZE1lbnVQcm92aWRlcjo6Y29udGV4
dE1lbnVJdGVtU2VsZWN0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJvbnRlbmRNZW51UHJvdmlk
ZXI6OmNvbnRleHRNZW51Q2xlYXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9u
dGVuZENsaWVudExvY2FsOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6On5JbnNwZWN0b3JGcm9udGVu
ZENsaWVudExvY2FsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50
TG9jYWw6OndpbmRvd09iamVjdENsZWFyZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RnJvbnRlbmRDbGllbnRMb2NhbDo6ZnJvbnRlbmRMb2FkZWQpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6Y2FuQXR0YWNoV2luZG93KToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OmNoYW5nZUF0dGFjaGVkV2lu
ZG93SGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9j
YWw6Om1vdmVXaW5kb3dCeSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENs
aWVudExvY2FsOjpzaG93Q29udGV4dE1lbnUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RnJvbnRlbmRDbGllbnRMb2NhbDo6c2V0QXR0YWNoZWRXaW5kb3cpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6cmVzdG9yZUF0dGFjaGVkV2luZG93SGVp
Z2h0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OmNv
bnN0cmFpbmVkQXR0YWNoZWRXaW5kb3dIZWlnaHQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmg6IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9J
bnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJv
bnRlbmRIb3N0OjpJbnNwZWN0b3JGcm9udGVuZEhvc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yRnJvbnRlbmRIb3N0Ojp+SW5zcGVjdG9yRnJvbnRlbmRIb3N0KToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckZyb250ZW5kSG9zdDo6bG9hZGVkKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckZyb250ZW5kSG9zdDo6YXR0YWNoKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckZyb250ZW5kSG9zdDo6ZGV0YWNoKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZy
b250ZW5kSG9zdDo6Y2xvc2VXaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJv
bnRlbmRIb3N0OjpicmluZ1RvRnJvbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJv
bnRlbmRIb3N0OjppbnNwZWN0ZWRVUkxDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckZyb250ZW5kSG9zdDo6Y2FuQXR0YWNoV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckZyb250ZW5kSG9zdDo6c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRIb3N0Ojptb3ZlV2luZG93QnkpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRIb3N0OjpzaG93Q29udGV4dE1lbnUpOgorICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckZyb250ZW5kSG9zdDo6Y3JlYXRlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yRnJvbnRlbmRIb3N0LmlkbDoKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0lu
c3BlY3RvckZyb250ZW5kSG9zdFN0dWIuanM6CisgICAgICAgICguV2ViSW5zcGVjdG9yLkluc3Bl
Y3RvckZyb250ZW5kSG9zdFN0dWIucHJvdG90eXBlLmJyaW5nVG9Gcm9udCk6CisgICAgICAgICgu
V2ViSW5zcGVjdG9yLkluc3BlY3RvckZyb250ZW5kSG9zdFN0dWIucHJvdG90eXBlLmluc3BlY3Rl
ZFVSTENoYW5nZWQpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpz
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLmxvYWRlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
Y2xvc2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLmJyaW5nVG9Gcm9udCk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuaW5zcGVjdGVkVVJMQ2hhbmdlZCk6CisgICAgICAgICogbG9hZGVyL0VtcHR5
Q2xpZW50cy5oOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlJbnNwZWN0b3JDbGllbnQ6Om9wZW5J
bnNwZWN0b3JGcm9udGVuZCk6CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpkaXNwYXRjaERpZENsZWFyV2luZG93T2JqZWN0
SW5Xb3JsZCk6CisgICAgICAgICogcGFnZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBh
Z2U6OlBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6flBhZ2UpOgorICAgICAgICAqIHBh
Z2UvUGFnZS5oOgorICAgICAgICAqIHBsYXRmb3JtL0NvbnRleHRNZW51LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRleHRNZW51Ojpwb3B1bGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250
ZXh0TWVudTo6YWRkSW5zcGVjdEVsZW1lbnRJdGVtKToKKwogMjAxMC0wMy0xMCAgTGVhbmRybyBQ
ZXJlaXJhICA8bGVhbmRyb0Bwcm9mdXNpb24ubW9iaT4KIAogICAgICAgICBSZXZpZXdlZCBieSBL
ZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvR05VbWFrZWZp
bGUuYW0gYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IDdhYzYyZTguLmQ4MTc3NmQgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvV2ViQ29yZS9HTlVtYWtlZmls
ZS5hbQpAQCAtMTIzMiw2ICsxMjMyLDkgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmggXAogCVdlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckZyb250ZW5kLmNwcCBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRl
bmQuaCBcCisJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaCBcCisJ
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5jcHAgXAorCVdl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuaCBcCiAJV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcCBcCiAJV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmggXAogCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
clJlc291cmNlLmNwcCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuSW5zcGVjdG9yLmV4
cCBiL1dlYkNvcmUvV2ViQ29yZS5JbnNwZWN0b3IuZXhwCmluZGV4IDM3OWI3YTIuLmQ1YzIxYzMg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5JbnNwZWN0b3IuZXhwCisrKyBiL1dlYkNvcmUv
V2ViQ29yZS5JbnNwZWN0b3IuZXhwCkBAIC0xLDExICsxLDkgQEAKIF9fWk43V2ViQ29yZTE5SW5z
cGVjdG9yQ29udHJvbGxlcjEwc2V0U2V0dGluZ0VSS05TXzZTdHJpbmdFUzNfCi1fX1pON1dlYkNv
cmUxOUluc3BlY3RvckNvbnRyb2xsZXIxMmF0dGFjaFdpbmRvd0V2Ci1fX1pON1dlYkNvcmUxOUlu
c3BlY3RvckNvbnRyb2xsZXIxMmRldGFjaFdpbmRvd0V2CiBfX1pON1dlYkNvcmUxOUluc3BlY3Rv
ckNvbnRyb2xsZXIxNGVuYWJsZURlYnVnZ2VyRXYKIF9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29u
dHJvbGxlcjE0ZW5hYmxlUHJvZmlsZXJFYmIKIF9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJv
bGxlcjE1ZGlzYWJsZURlYnVnZ2VyRWIKIF9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxl
cjE1ZGlzYWJsZVByb2ZpbGVyRWIKLV9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjE2
c2V0V2luZG93VmlzaWJsZUViYgorX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMjZz
ZXRJbnNwZWN0b3JGcm9udGVuZENsaWVudEVOM1dURjEwUGFzc093blB0cklOU18yM0luc3BlY3Rv
ckZyb250ZW5kQ2xpZW50RUVFCiBfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIyNnN0
b3BVc2VySW5pdGlhdGVkUHJvZmlsaW5nRXYKIF9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJv
bGxlcjI3c3RhcnRVc2VySW5pdGlhdGVkUHJvZmlsaW5nRVBOU181VGltZXJJUzBfRUUKIF9fWk43
V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjRzaG93RXYKQEAgLTE4LDMgKzE2LDEzIEBAIF9f
Wk5LN1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXI3ZW5hYmxlZEV2CiBfX1pOSzdXZWJDb3Jl
MTlJbnNwZWN0b3JDb250cm9sbGVyN3NldHRpbmdFUktOU182U3RyaW5nRQogX19aTjdXZWJDb3Jl
MTlJbnNwZWN0b3JDb250cm9sbGVyMjFzdGFydFRpbWVsaW5lUHJvZmlsZXJFdgogX19aTjdXZWJD
b3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMjBzdG9wVGltZWxpbmVQcm9maWxlckV2CitfX1pON1dl
YkNvcmUyOEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWxDMkVQTlNfMTlJbnNwZWN0b3JDb250
cm9sbGVyRVBOU180UGFnZUUKK19fWk43V2ViQ29yZTI4SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRM
b2NhbEQyRXYKK19fWk43V2ViQ29yZTI4SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDE5d2lu
ZG93T2JqZWN0Q2xlYXJlZEV2CitfX1pON1dlYkNvcmUyOEluc3BlY3RvckZyb250ZW5kQ2xpZW50
TG9jYWwxNGZyb250ZW5kTG9hZGVkRXYKK19fWk43V2ViQ29yZTI4SW5zcGVjdG9yRnJvbnRlbmRD
bGllbnRMb2NhbDI3cmVzdG9yZUF0dGFjaGVkV2luZG93SGVpZ2h0RXYKK19fWk43V2ViQ29yZTI4
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDEybW92ZVdpbmRvd0J5RWZmCitfX1pON1dlYkNv
cmUyOEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwxNWNhbkF0dGFjaFdpbmRvd0V2CitfX1pO
N1dlYkNvcmUyOEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwxNXNob3dDb250ZXh0TWVudUVQ
TlNfNUV2ZW50RVJLTjNXVEY2VmVjdG9ySVBOU18xNUNvbnRleHRNZW51SXRlbUVMbTBFRUUKK19f
Wk43V2ViQ29yZTI4SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDE3c2V0QXR0YWNoZWRXaW5k
b3dFYgorX19aTjdXZWJDb3JlMjhJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsMjZjaGFuZ2VB
dHRhY2hlZFdpbmRvd0hlaWdodEVqCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuYmFzZS5l
eHAgYi9XZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAKaW5kZXggNDM2NGFlYS4uOWJhZmFkNyAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5i
YXNlLmV4cApAQCAtODc0LDcgKzg3NCw2IEBAIF9fWk5LN1dlYkNvcmUxNlZpc2libGVTZWxlY3Rp
b24yM2lzQ29udGVudFJpY2hseUVkaXRhYmxlRXYKIF9fWk5LN1dlYkNvcmUxNlZpc2libGVTZWxl
Y3Rpb241aXNBbGxFTlNfMjFTdGF5SW5FZGl0YWJsZUNvbnRlbnRFCiBfX1pOSzdXZWJDb3JlMTdS
ZXNvdXJjZUVycm9yQmFzZThsYXp5SW5pdEV2CiBfX1pOSzdXZWJDb3JlMTlBbmltYXRpb25Db250
cm9sbGVyMjRudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnNFdgotX19aTks3V2ViQ29yZTE5SW5zcGVj
dG9yQ29udHJvbGxlcjE1Y2FuQXR0YWNoV2luZG93RXYKIF9fWk5LN1dlYkNvcmUxOVJlc291cmNl
UmVxdWVzdEJhc2UxMGh0dHBNZXRob2RFdgogX19aTks3V2ViQ29yZTE5UmVzb3VyY2VSZXF1ZXN0
QmFzZTN1cmxFdgogX19aTks3V2ViQ29yZTE5UmVzb3VyY2VSZXF1ZXN0QmFzZTdpc0VtcHR5RXYK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
aW5kZXggZWRlZDYyMi4uYjM4OTZkZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
KysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTE2MTgsNiArMTYxOCw5IEBACiAgICAgICAg
ICAgICAnaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZS5oJywKICAgICAgICAg
ICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuY3BwJywKICAgICAgICAgICAgICdpbnNw
ZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuaCcsCisgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3Bl
Y3RvckZyb250ZW5kQ2xpZW50LmgnLAorICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JG
cm9udGVuZENsaWVudExvY2FsLmNwcCcsCisgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3Rv
ckZyb250ZW5kQ2xpZW50TG9jYWwuaCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3Rv
ckZyb250ZW5kSG9zdC5jcHAnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JGcm9u
dGVuZEhvc3QuaCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlLmNw
cCcsCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUub3JkZXIgYi9XZWJDb3JlL1dlYkNvcmUu
b3JkZXIKaW5kZXggYThkMjBmZC4uNDhmMzIxYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3Jl
Lm9yZGVyCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5vcmRlcgpAQCAtMjM3ODksNyArMjM3ODksNiBA
QCBfX1pON1dlYkNvcmUxOFNjcmlwdEZ1bmN0aW9uQ2FsbDE0YXBwZW5kQXJndW1lbnRFYgogX19a
TjdXZWJDb3JlMThTY3JpcHRGdW5jdGlvbkNhbGw0Y2FsbEV2CiBfX1pON1dlYkNvcmUxOFNjcmlw
dEZ1bmN0aW9uQ2FsbDRjYWxsRVJiYgogX19aTjdXZWJDb3JlNDRqc0luc3BlY3RvckNvbnRyb2xs
ZXJQcm90b3R5cGVGdW5jdGlvbkF0dGFjaEVQTjNKU0M5RXhlY1N0YXRlRVBOUzBfOEpTT2JqZWN0
RU5TMF83SlNWYWx1ZUVSS05TMF83QXJnTGlzdEUKLV9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29u
dHJvbGxlcjEyYXR0YWNoV2luZG93RXYKIF9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxl
cjIxcG9wdWxhdGVTY3JpcHRPYmplY3RzRXYKIF9fWk43V2ViQ29yZUwxOGNhbGxTaW1wbGVGdW5j
dGlvbkVQTjNKU0M5RXhlY1N0YXRlRVJLTlNfMTJTY3JpcHRPYmplY3RFUEtjCiBfX1pON1dlYkNv
cmUxOUluc3BlY3RvckNvbnRyb2xsZXI5c2hvd1BhbmVsRU5TMF8xM1NwZWNpYWxQYW5lbHNFCkBA
IC0yMzg1MCw3ICsyMzg0OSw2IEBAIF9fWk43V2ViQ29yZUwxOWRyYXdIaWdobGlnaHRGb3JCb3hF
Uk5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfOUZsb2F0UXVhZEVTNF9TNF9TCiBfX1pON1dlYkNv
cmVMMTZkcmF3T3V0bGluZWRRdWFkRVJOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzlGbG9hdFF1
YWRFUktOU181Q29sb3JFCiBfX1pON1dlYkNvcmVMMTBxdWFkVG9QYXRoRVJLTlNfOUZsb2F0UXVh
ZEUKIF9fWk43V2ViQ29yZTQ0anNJbnNwZWN0b3JDb250cm9sbGVyUHJvdG90eXBlRnVuY3Rpb25E
ZXRhY2hFUE4zSlNDOUV4ZWNTdGF0ZUVQTlMwXzhKU09iamVjdEVOUzBfN0pTVmFsdWVFUktOUzBf
N0FyZ0xpc3RFCi1fX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIxMmRldGFjaFdpbmRv
d0V2CiBfX1pON1dlYkNvcmU1NmpzSW5zcGVjdG9yQ29udHJvbGxlclByb3RvdHlwZUZ1bmN0aW9u
TW92ZUJ5VW5yZXN0cmljdGVkRVBOM0pTQzlFeGVjU3RhdGVFUE5TMF84SlNPYmplY3RFTlMwXzdK
U1ZhbHVlRVJLTlMwXzdBcmdMCiBfX1pOSzdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTJt
b3ZlV2luZG93QnlFZmYKIF9fWk43V2ViQ29yZUwyNGRyYXdPdXRsaW5lZFF1YWRXaXRoQ2xpcEVS
TlNfMTVHcmFwaGljc0NvbnRleHRFUktOU185RmxvYXRRdWFkRVM0X1JLTlNfNUNvbG9yRQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXgg
ZGUwYmYwMS4uZTllOTViMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9X
ZWJDb3JlL1dlYkNvcmUucHJvCkBAIC02OTQsNiArNjk0LDcgQEAgU09VUkNFUyArPSBcCiAgICAg
aW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3Rv
ckRPTVN0b3JhZ2VSZXNvdXJjZS5jcHAgXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVu
ZC5jcHAgXAorICAgIGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmNwcCBc
CiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAgXAogICAgIGluc3BlY3Rv
ci9JbnNwZWN0b3JSZXNvdXJjZS5jcHAgXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGlu
ZUFnZW50LmNwcCBcCkBAIC0xMzk1LDYgKzEzOTYsOCBAQCBIRUFERVJTICs9IFwKICAgICBpbnNw
ZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5oIFwKICAgICBpbnNwZWN0b3IvSW5zcGVj
dG9yRE9NU3RvcmFnZVJlc291cmNlLmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVu
ZC5oIFwKKyAgICBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaCBcCisgICAgaW5z
cGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuaCBcCiAgICAgaW5zcGVjdG9yL0lu
c3BlY3RvckZyb250ZW5kSG9zdC5oIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2Uu
aCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuaCBcCmRpZmYgLS1naXQg
YS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGFmNjIyNzQuLmE3YzNiZTIgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBi
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC00ODUxLDYgKzQ4
NTEsOSBAQAogCQlFRDUwMURDNjBCMjQ5RjI5MDBBRTE4RDkgLyogRWRpdG9yTWFjLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRUQ1MDFEQzUwQjI0OUYy
OTAwQUUxOEQ5IC8qIEVkaXRvck1hYy5tbSAqLzsgfTsKIAkJRURFM0E1MDAwQzdBNDMwNjAwOTU2
QTM3IC8qIENvbG9yTWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFREUzQTRGRjBDN0E0MzA2MDA5NTZBMzcgLyogQ29sb3JNYWMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFREVDOTgwMzBBRUQ3RTE3
MDA1OTEzN0YgLyogV2ViQ29yZVByZWZpeC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRURFQzk4MDIwQUVEN0UxNzAwNTkxMzdGIC8qIFdlYkNvcmVQcmVm
aXguaCAqLzsgfTsKKwkJRjM0NEM3MTQxMTI1QjgyQzAwRjI2RUVFIC8qIEluc3BlY3RvckZyb250
ZW5kQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGMzQ0QzcxMjExMjVCODJDMDBGMjZFRUUgLyogSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlGMzQ0Qzc1
MzExMjk0RDlEMDBGMjZFRUUgLyogSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjM0NEM3NTIxMTI5NEQ5
RDAwRjI2RUVFIC8qIEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlGMzQ0Qzc1ODExMjk0RkY2MDBG
MjZFRUUgLyogSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGMzQ0Qzc1NzExMjk0RkY2MDBGMjZFRUUg
LyogSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5jcHAgKi87IH07CiAJCUYzNjQ0QUZGMTEx
OTgwNTkwMEUwRDUzNyAvKiBJbmplY3RlZFNjcmlwdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGMzY0NEFGRDExMTk4MDU5MDBFMEQ1MzcgLyogSW5q
ZWN0ZWRTY3JpcHQuY3BwICovOyB9OwogCQlGMzY0NEIwMDExMTk4MDU5MDBFMEQ1MzcgLyogSW5q
ZWN0ZWRTY3JpcHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEYzNjQ0QUZFMTExOTgwNTkwMEUwRDUzNyAvKiBJbmplY3RlZFNjcmlwdC5oICovOyB9Owog
CQlGNEVBRjRBRTEwQzc0MkIxMDA5MTAwRDMgLyogT3BlblR5cGVTYW5pdGl6ZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjRFQUY0QUMxMEM3NDJC
MTAwOTEwMEQzIC8qIE9wZW5UeXBlU2FuaXRpemVyLmNwcCAqLzsgfTsKQEAgLTEwMTc5LDYgKzEw
MTgyLDkgQEAKIAkJRUQ1MDFEQzUwQjI0OUYyOTAwQUUxOEQ5IC8qIEVkaXRvck1hYy5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBFZGl0b3JNYWMubW07IHBhdGgg
PSBtYWMvRWRpdG9yTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFREUzQTRG
RjBDN0E0MzA2MDA5NTZBMzcgLyogQ29sb3JNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQ29sb3JNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRURFQzk4
MDIwQUVEN0UxNzAwNTkxMzdGIC8qIFdlYkNvcmVQcmVmaXguaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdlYkNvcmVQcmVmaXguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
dGFiV2lkdGggPSA0OyB1c2VzVGFicyA9IDA7IH07CisJCUYzNDRDNzEyMTEyNUI4MkMwMEYyNkVF
RSAvKiBJbnNwZWN0b3JGcm9udGVuZENsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBJbnNwZWN0b3JGcm9udGVuZENsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlGMzQ0Qzc1MjExMjk0RDlEMDBGMjZFRUUgLyogSW5zcGVjdG9yRnJvbnRlbmRDbGll
bnRMb2NhbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JGcm9u
dGVuZENsaWVudExvY2FsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUYzNDRDNzU3
MTEyOTRGRjYwMEYyNkVFRSAvKiBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3BlY3RvckZyb250ZW5kQ2xpZW50
TG9jYWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGMzY0NEFGRDExMTk4MDU5
MDBFMEQ1MzcgLyogSW5qZWN0ZWRTY3JpcHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSW5qZWN0ZWRTY3JpcHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlGMzY0NEFGRTExMTk4MDU5MDBFMEQ1MzcgLyogSW5qZWN0ZWRTY3JpcHQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5qZWN0ZWRTY3JpcHQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRjRFQUY0QUMxMEM3NDJCMTAwOTEwMEQzIC8qIE9wZW5UeXBlU2Fu
aXRpemVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IE9wZW5UeXBl
U2FuaXRpemVyLmNwcDsgcGF0aCA9IG9wZW50eXBlL09wZW5UeXBlU2FuaXRpemVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwNzEzLDYgKzEwNzE5LDkgQEAKIAkJCQk0MUYw
NjE3MjBGNUYwMEFDMDBBMDdFQUMgLyogSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlLmggKi8s
CiAJCQkJN0FFRDNFMDMwRkJCMUVBQTAwRDJCMDNDIC8qIEluc3BlY3RvckZyb250ZW5kLmNwcCAq
LywKIAkJCQk3QUVEM0UwNDBGQkIxRUFBMDBEMkIwM0MgLyogSW5zcGVjdG9yRnJvbnRlbmQuaCAq
LywKKwkJCQlGMzQ0QzcxMjExMjVCODJDMDBGMjZFRUUgLyogSW5zcGVjdG9yRnJvbnRlbmRDbGll
bnQuaCAqLywKKwkJCQlGMzQ0Qzc1NzExMjk0RkY2MDBGMjZFRUUgLyogSW5zcGVjdG9yRnJvbnRl
bmRDbGllbnRMb2NhbC5jcHAgKi8sCisJCQkJRjM0NEM3NTIxMTI5NEQ5RDAwRjI2RUVFIC8qIElu
c3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuaCAqLywKIAkJCQk3QTBFNzcwQjEwQzAwQTg4MDBB
MDI3NkUgLyogSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcCAqLywKIAkJCQk3QTBFNzcwQzEwQzAw
QTg4MDBBMDI3NkUgLyogSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmggKi8sCiAJCQkJN0EwRTc3MEQx
MEMwMEE4ODAwQTAyNzZFIC8qIEluc3BlY3RvckZyb250ZW5kSG9zdC5pZGwgKi8sCkBAIC0xNzQw
OCw2ICsxNzQxNyw4IEBACiAJCQkJN0EyNDU4N0MxMDIxRUFGNDAwMEEwMEFBIC8qIEluc3BlY3Rv
ckRPTUFnZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk0MUYwNjE3NDBGNUYwMEFDMDBBMDdFQUMg
LyogSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QUVE
M0UwNjBGQkIxRUFBMDBEMkIwM0MgLyogSW5zcGVjdG9yRnJvbnRlbmQuaCBpbiBIZWFkZXJzICov
LAorCQkJCUYzNDRDNzE0MTEyNUI4MkMwMEYyNkVFRSAvKiBJbnNwZWN0b3JGcm9udGVuZENsaWVu
dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRjM0NEM3NTMxMTI5NEQ5RDAwRjI2RUVFIC8qIEluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50TG9jYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTdBMEU3NzBGMTBD
MDBBODgwMEEwMjc2RSAvKiBJbnNwZWN0b3JGcm9udGVuZEhvc3QuaCBpbiBIZWFkZXJzICovLAog
CQkJCTQxRjA2MjAxMEY1RjBCNjYwMEEwN0VBQyAvKiBJbnNwZWN0b3JSZXNvdXJjZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNzU0MTMzQTgxMDJFMDBFODAwMDc1RDAwIC8qIEluc3BlY3RvclRpbWVs
aW5lQWdlbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMTk2MTksNiArMTk2MzAsNyBAQAogCQkJCTdB
MjQ1ODdCMTAyMUVBRjQwMDBBMDBBQSAvKiBJbnNwZWN0b3JET01BZ2VudC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk0MUYwNjE3NTBGNUYwMEFDMDBBMDdFQUMgLyogSW5zcGVjdG9yRE9NU3RvcmFn
ZVJlc291cmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdBRUQzRTA1MEZCQjFFQUEwMEQyQjAz
QyAvKiBJbnNwZWN0b3JGcm9udGVuZC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGMzQ0Qzc1ODEx
Mjk0RkY2MDBGMjZFRUUgLyogSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk3QTBFNzcwRTEwQzAwQTg4MDBBMDI3NkUgLyogSW5zcGVjdG9yRnJvbnRl
bmRIb3N0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQxRjA2MjAyMEY1RjBCNjYwMEEwN0VBQyAv
KiBJbnNwZWN0b3JSZXNvdXJjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3NTQxMzNBQTEwMkUw
MEY0MDAwNzVEMDAgLyogSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5jcHAgaW4gU291cmNlcyAqLywK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmNwcCBiL1dlYkNv
cmUvaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmNwcAppbmRleCA1NTM5ZTlkLi40MDU0OTk2IDEw
MDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9Db25zb2xlTWVzc2FnZS5jcHAKKysrIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuY3BwCkBAIC0zMSw5ICszMSwxMiBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNvbnNvbGVNZXNzYWdlLmgiCiAKKyNpbmNsdWRl
ICJJbmplY3RlZFNjcmlwdC5oIgorI2luY2x1ZGUgIkluamVjdGVkU2NyaXB0SG9zdC5oIgogI2lu
Y2x1ZGUgIkluc3BlY3RvckZyb250ZW5kLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q2FsbFN0YWNrLmgi
CiAjaW5jbHVkZSAiU2NyaXB0T2JqZWN0LmgiCisjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZh
bHVlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtODAsNyArODMsNyBAQCBDb25zb2xl
TWVzc2FnZTo6Q29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZSBzLCBNZXNzYWdlVHlwZSB0LCBN
ZXNzYWdlTGV2ZWwgbCwgUwogfQogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLXZvaWQgQ29uc29s
ZU1lc3NhZ2U6OmFkZFRvQ29uc29sZShJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQpCit2b2lk
IENvbnNvbGVNZXNzYWdlOjphZGRUb0Zyb250ZW5kKEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVu
ZCwgSW5qZWN0ZWRTY3JpcHRIb3N0KiBpbmplY3RlZFNjcmlwdEhvc3QpCiB7CiAgICAgU2NyaXB0
T2JqZWN0IGpzb25PYmogPSBmcm9udGVuZC0+bmV3U2NyaXB0T2JqZWN0KCk7CiAgICAganNvbk9i
ai5zZXQoInNvdXJjZSIsIHN0YXRpY19jYXN0PGludD4obV9zb3VyY2UpKTsKQEAgLTkwLDcgKzkz
LDE1IEBAIHZvaWQgQ29uc29sZU1lc3NhZ2U6OmFkZFRvQ29uc29sZShJbnNwZWN0b3JGcm9udGVu
ZCogZnJvbnRlbmQpCiAgICAganNvbk9iai5zZXQoInVybCIsIG1fdXJsKTsKICAgICBqc29uT2Jq
LnNldCgiZ3JvdXBMZXZlbCIsIHN0YXRpY19jYXN0PGludD4obV9ncm91cExldmVsKSk7CiAgICAg
anNvbk9iai5zZXQoInJlcGVhdENvdW50Iiwgc3RhdGljX2Nhc3Q8aW50PihtX3JlcGVhdENvdW50
KSk7Ci0gICAgZnJvbnRlbmQtPmFkZENvbnNvbGVNZXNzYWdlKGpzb25PYmosIG1fZnJhbWVzLCBt
X3NjcmlwdFN0YXRlLCBtX2FyZ3VtZW50cywgIG1fbWVzc2FnZSk7CisgICAgVmVjdG9yPFJlZlB0
cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+ID4gYXJndW1lbnRzOworICAgIGlmICghbV9hcmd1bWVu
dHMuaXNFbXB0eSgpKSB7CisgICAgICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0g
aW5qZWN0ZWRTY3JpcHRIb3N0LT5pbmplY3RlZFNjcmlwdEZvcihtX3NjcmlwdFN0YXRlKTsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYXJndW1lbnRzLnNpemUoKTsgKytpKSB7
CisgICAgICAgICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkVmFs
dWUgPSBpbmplY3RlZFNjcmlwdC53cmFwRm9yQ29uc29sZShtX2FyZ3VtZW50c1tpXSk7CisgICAg
ICAgICAgICBhcmd1bWVudHMuYXBwZW5kKHNlcmlhbGl6ZWRWYWx1ZSk7CisgICAgICAgIH0KKyAg
ICB9ICAgCisgICAgZnJvbnRlbmQtPmFkZENvbnNvbGVNZXNzYWdlKGpzb25PYmosIG1fZnJhbWVz
LCBhcmd1bWVudHMsICBtX21lc3NhZ2UpOwogfQogCiB2b2lkIENvbnNvbGVNZXNzYWdlOjp1cGRh
dGVSZXBlYXRDb3VudEluQ29uc29sZShJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQpCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9Db25zb2xlTWVzc2FnZS5oIGIvV2ViQ29yZS9pbnNw
ZWN0b3IvQ29uc29sZU1lc3NhZ2UuaAppbmRleCBlOWFlMTMwLi40Yzc3ZTk1IDEwMDY0NAotLS0g
YS9XZWJDb3JlL2luc3BlY3Rvci9Db25zb2xlTWVzc2FnZS5oCisrKyBiL1dlYkNvcmUvaW5zcGVj
dG9yL0NvbnNvbGVNZXNzYWdlLmgKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICBjbGFzcyBJbmplY3RlZFNjcmlwdEhv
c3Q7CiAgICAgY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmQ7CiAgICAgY2xhc3MgU2NyaXB0Q2FsbFN0
YWNrOwogICAgIGNsYXNzIFNjcmlwdFN0cmluZzsKQEAgLTQ4LDcgKzQ5LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICBDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlLCBNZXNzYWdl
VHlwZSwgTWVzc2FnZUxldmVsLCBTY3JpcHRDYWxsU3RhY2sqLCB1bnNpZ25lZCBnLCBib29sIHN0
b3JlVHJhY2UgPSBmYWxzZSk7CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgICAgICB2b2lk
IGFkZFRvQ29uc29sZShJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQpOworICAgICAgICB2b2lk
IGFkZFRvRnJvbnRlbmQoSW5zcGVjdG9yRnJvbnRlbmQqLCBJbmplY3RlZFNjcmlwdEhvc3QqKTsK
ICAgICAgICAgdm9pZCB1cGRhdGVSZXBlYXRDb3VudEluQ29uc29sZShJbnNwZWN0b3JGcm9udGVu
ZCogZnJvbnRlbmQpOwogI2VuZGlmCiAgICAgICAgIHZvaWQgaW5jcmVtZW50Q291bnQoKSB7ICsr
bV9yZXBlYXRDb3VudDsgfTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNsaWVudC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2xpZW50LmgKaW5kZXggZTQ0
OGNkMi4uODQxYzE1ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2xp
ZW50LmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2xpZW50LmgKQEAgLTMwLDYg
KzMwLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBJbnNwZWN0b3JDb250cm9s
bGVyOwogY2xhc3MgTm9kZTsKIGNsYXNzIFBhZ2U7CiBjbGFzcyBTdHJpbmc7CkBAIC00MCwyOSAr
NDEsMTMgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGluc3BlY3RvckRlc3Ryb3llZCgp
ID0gMDsKIAotICAgIHZpcnR1YWwgUGFnZSogY3JlYXRlUGFnZSgpID0gMDsKLQotICAgIHZpcnR1
YWwgU3RyaW5nIGxvY2FsaXplZFN0cmluZ3NVUkwoKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIFN0cmlu
ZyBoaWRkZW5QYW5lbHMoKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2hvd1dpbmRvdygpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xvc2VXaW5kb3coKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgYXR0YWNoV2luZG93KCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hXaW5kb3coKSA9
IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQg
aGVpZ2h0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIG9wZW5JbnNwZWN0b3JGcm9udGVuZChJbnNw
ZWN0b3JDb250cm9sbGVyKikgPSAwOwogCiAgICAgdmlydHVhbCB2b2lkIGhpZ2hsaWdodChOb2Rl
KikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBoaWRlSGlnaGxpZ2h0KCkgPSAwOwogCi0gICAgdmly
dHVhbCB2b2lkIGluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJiBuZXdVUkwpID0gMDsK
LQogICAgIHZpcnR1YWwgdm9pZCBwb3B1bGF0ZVNldHRpbmcoY29uc3QgU3RyaW5nJiBrZXksIFN0
cmluZyogdmFsdWUpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc3RvcmVTZXR0aW5nKGNvbnN0IFN0
cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
aW5zcGVjdG9yV2luZG93T2JqZWN0Q2xlYXJlZCgpID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xs
ZXIuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXgg
ZTM2OWFiNS4uYzBhOTE0ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Q29udHJvbGxlci5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxl
ci5jcHAKQEAgLTU3LDExICs1NywxMSBAQAogI2luY2x1ZGUgIkluamVjdGVkU2NyaXB0SG9zdC5o
IgogI2luY2x1ZGUgIkluc3BlY3RvckJhY2tlbmQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDbGll
bnQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZENsaWVudC5oIgogI2luY2x1ZGUgIklu
c3BlY3RvckRPTUFnZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNl
LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5oIgogI2luY2x1ZGUgIklu
c3BlY3RvckZyb250ZW5kLmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmgiCiAj
aW5jbHVkZSAiSW5zcGVjdG9yUmVzb3VyY2UuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JXb3JrZXJS
ZXNvdXJjZS5oIgogI2luY2x1ZGUgIkluc3BlY3RvclRpbWVsaW5lQWdlbnQuaCIKQEAgLTE0NCwx
MCArMTQ0LDkgQEAgc3RhdGljIHVuc2lnbmVkIHNfaW5zcGVjdG9yQ29udHJvbGxlckNvdW50Owog
SW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcihQYWdlKiBwYWdlLCBJbnNw
ZWN0b3JDbGllbnQqIGNsaWVudCkKICAgICA6IG1faW5zcGVjdGVkUGFnZShwYWdlKQogICAgICwg
bV9jbGllbnQoY2xpZW50KQotICAgICwgbV9wYWdlKDApCisgICAgLCBtX29wZW5pbmdGcm9udGVu
ZChmYWxzZSkKKyAgICAsIG1fY2xvc2luZ0Zyb250ZW5kKGZhbHNlKQogICAgICwgbV9leHBpcmVk
Q29uc29sZU1lc3NhZ2VDb3VudCgwKQotICAgICwgbV9mcm9udGVuZFNjcmlwdFN0YXRlKDApCi0g
ICAgLCBtX3dpbmRvd1Zpc2libGUoZmFsc2UpCiAgICAgLCBtX3Nob3dBZnRlclZpc2libGUoQ3Vy
cmVudFBhbmVsKQogICAgICwgbV9ncm91cExldmVsKDApCiAgICAgLCBtX3NlYXJjaGluZ0Zvck5v
ZGUoZmFsc2UpCkBAIC0xNTUsNyArMTU0LDYgQEAgSW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVj
dG9yQ29udHJvbGxlcihQYWdlKiBwYWdlLCBJbnNwZWN0b3JDbGllbnQqIGNsaWVudCkKICAgICAs
IG1fcmVzb3VyY2VUcmFja2luZ0VuYWJsZWQoZmFsc2UpCiAgICAgLCBtX3Jlc291cmNlVHJhY2tp
bmdTZXR0aW5nc0xvYWRlZChmYWxzZSkKICAgICAsIG1faW5zcGVjdG9yQmFja2VuZChJbnNwZWN0
b3JCYWNrZW5kOjpjcmVhdGUodGhpcykpCi0gICAgLCBtX2luc3BlY3RvckZyb250ZW5kSG9zdChJ
bnNwZWN0b3JGcm9udGVuZEhvc3Q6OmNyZWF0ZSh0aGlzLCBjbGllbnQpKQogICAgICwgbV9pbmpl
Y3RlZFNjcmlwdEhvc3QoSW5qZWN0ZWRTY3JpcHRIb3N0OjpjcmVhdGUodGhpcykpCiAjaWYgRU5B
QkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICAgLCBtX2RlYnVnZ2VyRW5hYmxlZChmYWxzZSkK
QEAgLTE3OCw5ICsxNzYsNyBAQCBJbnNwZWN0b3JDb250cm9sbGVyOjp+SW5zcGVjdG9yQ29udHJv
bGxlcigpCiB7CiAgICAgLy8gVGhlc2Ugc2hvdWxkIGhhdmUgYmVlbiBjbGVhcmVkIGluIGluc3Bl
Y3RlZFBhZ2VEZXN0cm95ZWQoKS4KICAgICBBU1NFUlQoIW1fY2xpZW50KTsKLSAgICBBU1NFUlQo
IW1fZnJvbnRlbmRTY3JpcHRTdGF0ZSk7CiAgICAgQVNTRVJUKCFtX2luc3BlY3RlZFBhZ2UpOwot
ICAgIEFTU0VSVCghbV9wYWdlIHx8IChtX3BhZ2UgJiYgIW1fcGFnZS0+cGFyZW50SW5zcGVjdG9y
Q29udHJvbGxlcigpKSk7CiAKICAgICBkZWxldGVBbGxWYWx1ZXMobV9mcmFtZVJlc291cmNlcyk7
CiAgICAgZGVsZXRlQWxsVmFsdWVzKG1fY29uc29sZU1lc3NhZ2VzKTsKQEAgLTE5MSw3ICsxODcs
NiBAQCBJbnNwZWN0b3JDb250cm9sbGVyOjp+SW5zcGVjdG9yQ29udHJvbGxlcigpCiAgICAgcmVs
ZWFzZURPTUFnZW50KCk7CiAKICAgICBtX2luc3BlY3RvckJhY2tlbmQtPmRpc2Nvbm5lY3RDb250
cm9sbGVyKCk7Ci0gICAgbV9pbnNwZWN0b3JGcm9udGVuZEhvc3QtPmRpc2Nvbm5lY3RDb250cm9s
bGVyKCk7CiAgICAgbV9pbmplY3RlZFNjcmlwdEhvc3QtPmRpc2Nvbm5lY3RDb250cm9sbGVyKCk7
CiB9CiAKQEAgLTE5OSwxMCArMTk0LDYgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjppbnNw
ZWN0ZWRQYWdlRGVzdHJveWVkKCkKIHsKICAgICBjbG9zZSgpOwogCi0gICAgaWYgKG1fZnJvbnRl
bmRTY3JpcHRTdGF0ZSkgewotICAgICAgICBTY3JpcHRHbG9iYWxPYmplY3Q6OnJlbW92ZShtX2Zy
b250ZW5kU2NyaXB0U3RhdGUsICJJbnNwZWN0b3JCYWNrZW5kIik7Ci0gICAgICAgIFNjcmlwdEds
b2JhbE9iamVjdDo6cmVtb3ZlKG1fZnJvbnRlbmRTY3JpcHRTdGF0ZSwgIkluc3BlY3RvckZyb250
ZW5kSG9zdCIpOwotICAgIH0KICAgICBBU1NFUlQobV9pbnNwZWN0ZWRQYWdlKTsKICAgICBtX2lu
c3BlY3RlZFBhZ2UgPSAwOwogCkBAIC0yOTcsNDYgKzI4OCw0MiBAQCB2b2lkIEluc3BlY3RvckNv
bnRyb2xsZXI6OmhpZGVIaWdobGlnaHQoKQogCiBib29sIEluc3BlY3RvckNvbnRyb2xsZXI6Ondp
bmRvd1Zpc2libGUoKQogewotICAgIHJldHVybiBtX3dpbmRvd1Zpc2libGU7CisgICAgcmV0dXJu
IG1fZnJvbnRlbmQ7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0V2luZG93Vmlz
aWJsZShib29sIHZpc2libGUsIGJvb2wgYXR0YWNoZWQpCit2b2lkIEluc3BlY3RvckNvbnRyb2xs
ZXI6OmZyb250ZW5kUmVhZHkoKQogewotICAgIGlmICh2aXNpYmxlID09IG1fd2luZG93VmlzaWJs
ZSB8fCAhbV9mcm9udGVuZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV93aW5kb3dWaXNpYmxl
ID0gdmlzaWJsZTsKLQotICAgIGlmIChtX3dpbmRvd1Zpc2libGUpIHsKLSAgICAgICAgc2V0QXR0
YWNoZWRXaW5kb3coYXR0YWNoZWQpOwotICAgICAgICBwb3B1bGF0ZVNjcmlwdE9iamVjdHMoKTsK
LQotICAgICAgICBpZiAobV9zaG93QWZ0ZXJWaXNpYmxlID09IEN1cnJlbnRQYW5lbCkgewotICAg
ICAgICAgIFN0cmluZyBsYXN0QWN0aXZlUGFuZWxTZXR0aW5nID0gc2V0dGluZyhsYXN0QWN0aXZl
UGFuZWxTZXR0aW5nTmFtZSk7Ci0gICAgICAgICAgbV9zaG93QWZ0ZXJWaXNpYmxlID0gc3BlY2lh
bFBhbmVsRm9ySlNOYW1lKGxhc3RBY3RpdmVQYW5lbFNldHRpbmcpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKG1fbm9kZVRvRm9jdXMpCi0gICAgICAgICAgICBmb2N1c05vZGUoKTsKKyAgICBw
b3B1bGF0ZVNjcmlwdE9iamVjdHMoKTsKKyAgICAKKyAgICBpZiAobV9zaG93QWZ0ZXJWaXNpYmxl
ID09IEN1cnJlbnRQYW5lbCkgeworICAgICAgICBTdHJpbmcgbGFzdEFjdGl2ZVBhbmVsU2V0dGlu
ZyA9IHNldHRpbmcobGFzdEFjdGl2ZVBhbmVsU2V0dGluZ05hbWUpOworICAgICAgICBtX3Nob3dB
ZnRlclZpc2libGUgPSBzcGVjaWFsUGFuZWxGb3JKU05hbWUobGFzdEFjdGl2ZVBhbmVsU2V0dGlu
Zyk7CisgICAgfQorICAgIAorICAgIGlmIChtX25vZGVUb0ZvY3VzKQorICAgICAgICBmb2N1c05v
ZGUoKTsKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKLSAgICAgICAgaWYgKG1fYXR0
YWNoRGVidWdnZXJXaGVuU2hvd24pCi0gICAgICAgICAgICBlbmFibGVEZWJ1Z2dlcigpOworICAg
IGlmIChtX2F0dGFjaERlYnVnZ2VyV2hlblNob3duKQorICAgICAgICBlbmFibGVEZWJ1Z2dlcigp
OwogI2VuZGlmCi0gICAgICAgIHNob3dQYW5lbChtX3Nob3dBZnRlclZpc2libGUpOwotICAgIH0g
ZWxzZSB7CisgICAgc2hvd1BhbmVsKG1fc2hvd0FmdGVyVmlzaWJsZSk7Cit9CisKK3ZvaWQgSW5z
cGVjdG9yQ29udHJvbGxlcjo6d2lsbENsb3NlRnJvbnRlbmQoKQorewogI2lmIEVOQUJMRShKQVZB
U0NSSVBUX0RFQlVHR0VSKQotICAgICAgICAvLyBJZiB0aGUgd2luZG93IGlzIGJlaW5nIGNsb3Nl
ZCB3aXRoIHRoZSBkZWJ1Z2dlciBlbmFibGVkLAotICAgICAgICAvLyByZW1lbWJlciB0aGlzIHN0
YXRlIHRvIHJlLWVuYWJsZSBkZWJ1Z2dlciBvbiB0aGUgbmV4dCB3aW5kb3cKLSAgICAgICAgLy8g
b3BlbmluZy4KLSAgICAgICAgYm9vbCBkZWJ1Z2dlcldhc0VuYWJsZWQgPSBtX2RlYnVnZ2VyRW5h
YmxlZDsKLSAgICAgICAgZGlzYWJsZURlYnVnZ2VyKCk7Ci0gICAgICAgIGlmIChkZWJ1Z2dlcldh
c0VuYWJsZWQpCi0gICAgICAgICAgICBtX2F0dGFjaERlYnVnZ2VyV2hlblNob3duID0gdHJ1ZTsK
KyAgICAvLyBJZiB0aGUgd2luZG93IGlzIGJlaW5nIGNsb3NlZCB3aXRoIHRoZSBkZWJ1Z2dlciBl
bmFibGVkLAorICAgIC8vIHJlbWVtYmVyIHRoaXMgc3RhdGUgdG8gcmUtZW5hYmxlIGRlYnVnZ2Vy
IG9uIHRoZSBuZXh0IHdpbmRvdworICAgIC8vIG9wZW5pbmcuCisgICAgYm9vbCBkZWJ1Z2dlcldh
c0VuYWJsZWQgPSBtX2RlYnVnZ2VyRW5hYmxlZDsKKyAgICBkaXNhYmxlRGVidWdnZXIoKTsKKyAg
ICBpZiAoZGVidWdnZXJXYXNFbmFibGVkKQorICAgICAgICBtX2F0dGFjaERlYnVnZ2VyV2hlblNo
b3duID0gdHJ1ZTsKICNlbmRpZgotICAgICAgICBzZXRTZWFyY2hpbmdGb3JOb2RlKGZhbHNlKTsK
LSAgICAgICAgcmVzZXRTY3JpcHRPYmplY3RzKCk7Ci0gICAgICAgIHN0b3BUaW1lbGluZVByb2Zp
bGVyKCk7Ci0gICAgfQorICAgIHNldFNlYXJjaGluZ0Zvck5vZGUoZmFsc2UpOworICAgIHJlc2V0
U2NyaXB0T2JqZWN0cygpOworICAgIHN0b3BUaW1lbGluZVByb2ZpbGVyKCk7CisKICAgICBtX3No
b3dBZnRlclZpc2libGUgPSBDdXJyZW50UGFuZWw7CiB9CiAKQEAgLTM3MCw3ICszNTcsNyBAQCB2
b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmFkZENvbnNvbGVNZXNzYWdlKFNjcmlwdFN0YXRlKiBz
Y3JpcHRTdGF0ZSwgQ29uc29sZU1lcwogICAgICAgICBtX3ByZXZpb3VzTWVzc2FnZSA9IGNvbnNv
bGVNZXNzYWdlOwogICAgICAgICBtX2NvbnNvbGVNZXNzYWdlcy5hcHBlbmQoY29uc29sZU1lc3Nh
Z2UpOwogICAgICAgICBpZiAod2luZG93VmlzaWJsZSgpKQotICAgICAgICAgICAgbV9wcmV2aW91
c01lc3NhZ2UtPmFkZFRvQ29uc29sZShtX2Zyb250ZW5kLmdldCgpKTsKKyAgICAgICAgICAgIG1f
cHJldmlvdXNNZXNzYWdlLT5hZGRUb0Zyb250ZW5kKG1fZnJvbnRlbmQuZ2V0KCksIG1faW5qZWN0
ZWRTY3JpcHRIb3N0LmdldCgpKTsKICAgICB9CiAKICAgICBpZiAoIXdpbmRvd1Zpc2libGUoKSAm
JiBtX2NvbnNvbGVNZXNzYWdlcy5zaXplKCkgPj0gbWF4aW11bUNvbnNvbGVNZXNzYWdlcykgewpA
QCAtNDE4LDY5ICs0MDUsNiBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6Om1hcmtUaW1lbGlu
ZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiAgICAgICAgIHRpbWVsaW5lQWdlbnQoKS0+ZGlkTWFy
a1RpbWVsaW5lKG1lc3NhZ2UpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgY29uc3RyYWluZWRBdHRh
Y2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBwcmVmZXJyZWRIZWlnaHQsIHVuc2lnbmVkIHRvdGFs
V2luZG93SGVpZ2h0KQotewotICAgIHJldHVybiByb3VuZGYobWF4KG1pbmltdW1BdHRhY2hlZEhl
aWdodCwgbWluPGZsb2F0PihwcmVmZXJyZWRIZWlnaHQsIHRvdGFsV2luZG93SGVpZ2h0ICogbWF4
aW11bUF0dGFjaGVkSGVpZ2h0UmF0aW8pKSk7Ci19Ci0KLWJvb2wgSW5zcGVjdG9yQ29udHJvbGxl
cjo6Y2FuQXR0YWNoV2luZG93KCkgY29uc3QKLXsKLSAgICBpZiAoIWVuYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICB1bnNpZ25lZCBpbnNwZWN0ZWRQYWdlSGVp
Z2h0ID0gbV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKS0+dmlldygpLT52aXNpYmxlSGVpZ2h0
KCk7Ci0KLSAgICAvLyBEb24ndCBhbGxvdyB0aGUgYXR0YWNoIGlmIHRoZSB3aW5kb3cgd291bGQg
YmUgdG9vIHNtYWxsIHRvIGFjY29tbW9kYXRlIHRoZSBtaW5pbXVtIGluc3BlY3RvciBoZWlnaHQu
Ci0gICAgcmV0dXJuIG1pbmltdW1BdHRhY2hlZEhlaWdodCA8PSBpbnNwZWN0ZWRQYWdlSGVpZ2h0
ICogbWF4aW11bUF0dGFjaGVkSGVpZ2h0UmF0aW87Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJv
bGxlcjo6YXR0YWNoV2luZG93KCkKLXsKLSAgICBpZiAoIWVuYWJsZWQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgdW5zaWduZWQgaW5zcGVjdGVkUGFnZUhlaWdodCA9IG1faW5zcGVjdGVkUGFn
ZS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+dmlzaWJsZUhlaWdodCgpOwotCi0gICAgU3RyaW5nIGF0
dGFjaGVkSGVpZ2h0ID0gc2V0dGluZyhpbnNwZWN0b3JBdHRhY2hlZEhlaWdodE5hbWUpOwotICAg
IGJvb2wgc3VjY2VzcyA9IHRydWU7Ci0gICAgaW50IGhlaWdodCA9IGF0dGFjaGVkSGVpZ2h0LnRv
SW50KCZzdWNjZXNzKTsKLSAgICB1bnNpZ25lZCBwcmVmZXJyZWRIZWlnaHQgPSBzdWNjZXNzID8g
aGVpZ2h0IDogZGVmYXVsdEF0dGFjaGVkSGVpZ2h0OwotCi0gICAgbV9jbGllbnQtPmF0dGFjaFdp
bmRvdygpOwotCi0gICAgLy8gV2UgbmVlZCB0byBjb25zdHJhaW4gdGhlIHdpbmRvdyBoZWlnaHQg
aGVyZSBpbiBjYXNlIHRoZSB1c2VyIGhhcyByZXNpemVkIHRoZSBpbnNwZWN0ZWQgcGFnZSdzIHdp
bmRvdyBzbyB0aGF0Ci0gICAgLy8gdGhlIHVzZXIncyBwcmVmZXJyZWQgaGVpZ2h0IHdvdWxkIGJl
IHRvbyBiaWcgdG8gZGlzcGxheS4KLSAgICBtX2NsaWVudC0+c2V0QXR0YWNoZWRXaW5kb3dIZWln
aHQoY29uc3RyYWluZWRBdHRhY2hlZFdpbmRvd0hlaWdodChwcmVmZXJyZWRIZWlnaHQsIGluc3Bl
Y3RlZFBhZ2VIZWlnaHQpKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkZXRhY2hX
aW5kb3coKQotewotICAgIGlmICghZW5hYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9j
bGllbnQtPmRldGFjaFdpbmRvdygpOwotfQotCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNl
dEF0dGFjaGVkV2luZG93KGJvb2wgYXR0YWNoZWQpCi17Ci0gICAgaWYgKCFlbmFibGVkKCkgfHwg
IW1fZnJvbnRlbmQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZnJvbnRlbmQtPnNldEF0dGFj
aGVkV2luZG93KGF0dGFjaGVkKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRB
dHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpCi17Ci0gICAgaWYgKCFlbmFibGVk
KCkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICB1bnNpZ25lZCB0b3RhbEhlaWdodCA9IG1f
cGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+dmlzaWJsZUhlaWdodCgpICsgbV9pbnNwZWN0ZWRQ
YWdlLT5tYWluRnJhbWUoKS0+dmlldygpLT52aXNpYmxlSGVpZ2h0KCk7Ci0gICAgdW5zaWduZWQg
YXR0YWNoZWRIZWlnaHQgPSBjb25zdHJhaW5lZEF0dGFjaGVkV2luZG93SGVpZ2h0KGhlaWdodCwg
dG90YWxIZWlnaHQpOwotICAgIAotICAgIHNldFNldHRpbmcoaW5zcGVjdG9yQXR0YWNoZWRIZWln
aHROYW1lLCBTdHJpbmc6Om51bWJlcihhdHRhY2hlZEhlaWdodCkpOwotICAgIAotICAgIG1fY2xp
ZW50LT5zZXRBdHRhY2hlZFdpbmRvd0hlaWdodChhdHRhY2hlZEhlaWdodCk7Ci19Ci0KIHZvaWQg
SW5zcGVjdG9yQ29udHJvbGxlcjo6c3RvcmVMYXN0QWN0aXZlUGFuZWwoY29uc3QgU3RyaW5nJiBw
YW5lbE5hbWUpCiB7CiAgICAgc2V0U2V0dGluZyhsYXN0QWN0aXZlUGFuZWxTZXR0aW5nTmFtZSwg
cGFuZWxOYW1lKTsKQEAgLTUxMiwyMyArNDM2LDIyIEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxl
cjo6aGFuZGxlTW91c2VQcmVzc09uTm9kZShOb2RlKiBub2RlKQogICAgIGluc3BlY3Qobm9kZSk7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zcGVjdGVkV2luZG93U2NyaXB0T2Jq
ZWN0Q2xlYXJlZChGcmFtZSogZnJhbWUpCit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldElu
c3BlY3RvckZyb250ZW5kQ2xpZW50KFBhc3NPd25QdHI8SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ+
IGNsaWVudCkKIHsKLSAgICBpZiAoIWVuYWJsZWQoKSB8fCAhbV9mcm9udGVuZCB8fCBmcmFtZSAh
PSBtX2luc3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9p
bmplY3RlZFNjcmlwdEhvc3QtPmRpc2NhcmRJbmplY3RlZFNjcmlwdHMoKTsKKyAgICBBU1NFUlQo
IW1faW5zcGVjdG9yRnJvbnRlbmRDbGllbnQpOworICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDbGll
bnQgPSBjbGllbnQ7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6d2luZG93U2NyaXB0
T2JqZWN0QXZhaWxhYmxlKCkKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zcGVjdGVkV2lu
ZG93U2NyaXB0T2JqZWN0Q2xlYXJlZChGcmFtZSogZnJhbWUpCiB7Ci0gICAgaWYgKCFtX3BhZ2Ug
fHwgIWVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOworICAgIC8vIElmIHRoZSBwYWdlIGlzIHN1
cHBvc2VkIHRvIHNlcnZlIGFzIEluc3BlY3RvckZyb250ZW5kIG5vdGlmeSBpbnNwZXRvciBmcm9u
dGVuZAorICAgIC8vIGNsaWVudCB0aGF0IGl0J3MgY2xlYXJlZCBzbyB0aGF0IHRoZSBjbGllbnQg
Y2FuIGV4cG9zZSBpbnNwZWN0b3IgYmluZGluZ3MuCisgICAgaWYgKG1faW5zcGVjdG9yRnJvbnRl
bmRDbGllbnQgJiYgZnJhbWUgPT0gbV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKSkKKyAgICAg
ICAgbV9pbnNwZWN0b3JGcm9udGVuZENsaWVudC0+d2luZG93T2JqZWN0Q2xlYXJlZCgpOwogCi0g
ICAgLy8gR3JhbnQgdGhlIGluc3BlY3RvciB0aGUgYWJpbGl0eSB0byBzY3JpcHQgdGhlIGluc3Bl
Y3RlZCBwYWdlLgotICAgIG1fcGFnZS0+bWFpbkZyYW1lKCktPmRvY3VtZW50KCktPnNlY3VyaXR5
T3JpZ2luKCktPmdyYW50VW5pdmVyc2FsQWNjZXNzKCk7Ci0gICAgbV9mcm9udGVuZFNjcmlwdFN0
YXRlID0gc2NyaXB0U3RhdGVGcm9tUGFnZShkZWJ1Z2dlcldvcmxkKCksIG1fcGFnZSk7Ci0gICAg
U2NyaXB0R2xvYmFsT2JqZWN0OjpzZXQobV9mcm9udGVuZFNjcmlwdFN0YXRlLCAiSW5zcGVjdG9y
QmFja2VuZCIsIG1faW5zcGVjdG9yQmFja2VuZC5nZXQoKSk7Ci0gICAgU2NyaXB0R2xvYmFsT2Jq
ZWN0OjpzZXQobV9mcm9udGVuZFNjcmlwdFN0YXRlLCAiSW5zcGVjdG9yRnJvbnRlbmRIb3N0Iiwg
bV9pbnNwZWN0b3JGcm9udGVuZEhvc3QuZ2V0KCkpOworICAgIGlmICghZW5hYmxlZCgpIHx8ICFt
X2Zyb250ZW5kIHx8IGZyYW1lICE9IG1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCkpCisgICAg
ICAgIHJldHVybjsKKyAgICBtX2luamVjdGVkU2NyaXB0SG9zdC0+ZGlzY2FyZEluamVjdGVkU2Ny
aXB0cygpOwogfQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldFNlYXJjaGluZ0Zvck5v
ZGUoYm9vbCBlbmFibGVkKQpAQCAtNTQ2LDE4ICs0NjksMTUgQEAgdm9pZCBJbnNwZWN0b3JDb250
cm9sbGVyOjpzZXRTZWFyY2hpbmdGb3JOb2RlKGJvb2wgZW5hYmxlZCkKICAgICB9CiB9CiAKLXZv
aWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2NyaXB0T2JqZWN0UmVhZHkoKQordm9pZCBJbnNwZWN0
b3JDb250cm9sbGVyOjpzZXRGcm9udGVuZChQYXNzT3duUHRyPEluc3BlY3RvckZyb250ZW5kPiBm
cm9udGVuZCkKIHsKLSAgICBBU1NFUlQobV9mcm9udGVuZFNjcmlwdFN0YXRlKTsKLSAgICBpZiAo
IW1fZnJvbnRlbmRTY3JpcHRTdGF0ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU2NyaXB0T2Jq
ZWN0IHdlYkluc3BlY3Rvck9iajsKLSAgICBpZiAoIVNjcmlwdEdsb2JhbE9iamVjdDo6Z2V0KG1f
ZnJvbnRlbmRTY3JpcHRTdGF0ZSwgIldlYkluc3BlY3RvciIsIHdlYkluc3BlY3Rvck9iaikpCi0g
ICAgICAgIHJldHVybjsKLSAgICBzZXRGcm9udGVuZFByb3h5T2JqZWN0KG1fZnJvbnRlbmRTY3Jp
cHRTdGF0ZSwgd2ViSW5zcGVjdG9yT2JqKTsKLQotI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVH
R0VSKQorICAgIG1fb3BlbmluZ0Zyb250ZW5kID0gZmFsc2U7CisgICAgbV9mcm9udGVuZCA9IGZy
b250ZW5kOworICAgIHJlbGVhc2VET01BZ2VudCgpOworICAgIG1fZG9tQWdlbnQgPSBJbnNwZWN0
b3JET01BZ2VudDo6Y3JlYXRlKG1fZnJvbnRlbmQuZ2V0KCkpOworICAgIGlmIChtX3RpbWVsaW5l
QWdlbnQpCisgICAgICAgIG1fdGltZWxpbmVBZ2VudC0+cmVzZXRGcm9udGVuZFByb3h5T2JqZWN0
KG1fZnJvbnRlbmQuZ2V0KCkpOworI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKSAmJiBV
U0UoSlNDKQogICAgIFN0cmluZyBkZWJ1Z2dlckVuYWJsZWQgPSBzZXR0aW5nKGRlYnVnZ2VyRW5h
YmxlZFNldHRpbmdOYW1lKTsKICAgICBpZiAoZGVidWdnZXJFbmFibGVkID09ICJ0cnVlIikKICAg
ICAgICAgZW5hYmxlRGVidWdnZXIoKTsKQEAgLTU2Niw0OCArNDg2LDIzIEBAIHZvaWQgSW5zcGVj
dG9yQ29udHJvbGxlcjo6c2NyaXB0T2JqZWN0UmVhZHkoKQogICAgICAgICBlbmFibGVQcm9maWxl
cigpOwogI2VuZGlmCiAKLSAgICAvLyBJZiBubyBwcmVmZXJlbmNlIGlzIHNldCAtIGRlZmF1bHQg
dG8gYW4gYXR0YWNoZWQgd2luZG93LiBUaGlzIGlzIGltcG9ydGFudCBmb3IgaW5zcGVjdG9yIExh
eW91dFRlc3RzLgotICAgIFN0cmluZyBzaG91bGRBdHRhY2hWYWx1ZSA9IHNldHRpbmcoaW5zcGVj
dG9yU3RhcnRzQXR0YWNoZWRTZXR0aW5nTmFtZSgpKTsKLSAgICBib29sIHNob3VsZEF0dGFjaCA9
IHNob3VsZEF0dGFjaFZhbHVlICE9ICJmYWxzZSI7Ci0gICAgCi0gICAgaWYgKHNob3VsZEF0dGFj
aCAmJiAhY2FuQXR0YWNoV2luZG93KCkpCi0gICAgICAgIHNob3VsZEF0dGFjaCA9IGZhbHNlOwot
Ci0gICAgLy8gTWFrZSBzdXJlIG91ciB3aW5kb3cgaXMgdmlzaWJsZSBub3cgdGhhdCB0aGUgcGFn
ZSBsb2FkZWQKLSAgICBzZXRXaW5kb3dWaXNpYmxlKHRydWUsIHNob3VsZEF0dGFjaCk7Ci0KLSAg
ICBtX2NsaWVudC0+aW5zcGVjdG9yV2luZG93T2JqZWN0Q2xlYXJlZCgpOwotfQotCi12b2lkIElu
c3BlY3RvckNvbnRyb2xsZXI6OnNldEZyb250ZW5kUHJveHlPYmplY3QoU2NyaXB0U3RhdGUqIHNj
cmlwdFN0YXRlLCBTY3JpcHRPYmplY3Qgd2ViSW5zcGVjdG9yT2JqLCBTY3JpcHRPYmplY3QpCi17
Ci0gICAgbV9mcm9udGVuZFNjcmlwdFN0YXRlID0gc2NyaXB0U3RhdGU7Ci0gICAgbV9mcm9udGVu
ZC5zZXQobmV3IEluc3BlY3RvckZyb250ZW5kKHRoaXMsIHdlYkluc3BlY3Rvck9iaikpOwotICAg
IHJlbGVhc2VET01BZ2VudCgpOwotICAgIG1fZG9tQWdlbnQgPSBJbnNwZWN0b3JET01BZ2VudDo6
Y3JlYXRlKG1fZnJvbnRlbmQuZ2V0KCkpOwotICAgIGlmIChtX3RpbWVsaW5lQWdlbnQpCi0gICAg
ICAgIG1fdGltZWxpbmVBZ2VudC0+cmVzZXRGcm9udGVuZFByb3h5T2JqZWN0KG1fZnJvbnRlbmQu
Z2V0KCkpOworICAgIGZyb250ZW5kUmVhZHkoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9s
bGVyOjpzaG93KCkKIHsKICAgICBpZiAoIWVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwotICAg
IAotICAgIGlmICghbV9wYWdlKSB7Ci0gICAgICAgIGlmIChtX2Zyb250ZW5kKQotICAgICAgICAg
ICAgcmV0dXJuOyAvLyBXZSBhcmUgdXNpbmcgY3VzdG9tIGZyb250ZW5kIC0gbm8gbmVlZCB0byBj
cmVhdGUgcGFnZS4KIAotICAgICAgICBtX3BhZ2UgPSBtX2NsaWVudC0+Y3JlYXRlUGFnZSgpOwot
ICAgICAgICBpZiAoIW1fcGFnZSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9wYWdl
LT5zZXRQYXJlbnRJbnNwZWN0b3JDb250cm9sbGVyKHRoaXMpOwotCi0gICAgICAgIC8vIHNob3dX
aW5kb3coKSB3aWxsIGJlIGNhbGxlZCBhZnRlciB0aGUgcGFnZSBsb2FkcyBpbiBzY3JpcHRPYmpl
Y3RSZWFkeSgpCisgICAgaWYgKG1fb3BlbmluZ0Zyb250ZW5kKQogICAgICAgICByZXR1cm47Cisg
ICAgCisgICAgaWYgKG1fZnJvbnRlbmQpCisgICAgICAgIG1fZnJvbnRlbmQtPmJyaW5nVG9Gcm9u
dCgpOworICAgIGVsc2UgeworICAgICAgICBtX29wZW5pbmdGcm9udGVuZCA9IHRydWU7CisgICAg
ICAgIG1fY2xpZW50LT5vcGVuSW5zcGVjdG9yRnJvbnRlbmQodGhpcyk7CiAgICAgfQotCi0gICAg
c2hvd1dpbmRvdygpOwogfQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNob3dQYW5lbChT
cGVjaWFsUGFuZWxzIHBhbmVsKQpAQCAtNjMzLDQ2ICs1MjgsMjcgQEAgdm9pZCBJbnNwZWN0b3JD
b250cm9sbGVyOjpjbG9zZSgpCiAgICAgaWYgKCFlbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsK
IAorICAgIGlmICghbV9mcm9udGVuZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fY2xv
c2luZ0Zyb250ZW5kKQorICAgICAgICByZXR1cm47CisgICAgbV9jbG9zaW5nRnJvbnRlbmQgPSB0
cnVlOworCisgICAgd2lsbENsb3NlRnJvbnRlbmQoKTsKKworICAgIGhpZGVIaWdobGlnaHQoKTsK
KwogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAgIHN0b3BVc2VySW5pdGlhdGVk
UHJvZmlsaW5nKCk7CiAgICAgZGlzYWJsZURlYnVnZ2VyKCk7CiAjZW5kaWYKLSAgICBjbG9zZVdp
bmRvdygpOwogCiAgICAgcmVsZWFzZURPTUFnZW50KCk7Ci0gICAgbV9mcm9udGVuZC5zZXQoMCk7
Ci0gICAgbV90aW1lbGluZUFnZW50ID0gMDsKLSAgICBtX2Zyb250ZW5kU2NyaXB0U3RhdGUgPSAw
OwotICAgIGlmIChtX3BhZ2UpIHsKLSAgICAgICAgaWYgKCFtX3BhZ2UtPm1haW5GcmFtZSgpIHx8
ICFtX3BhZ2UtPm1haW5GcmFtZSgpLT5sb2FkZXIoKSB8fCAhbV9wYWdlLT5tYWluRnJhbWUoKS0+
bG9hZGVyKCktPmlzTG9hZGluZygpKSB7Ci0gICAgICAgICAgICBtX3BhZ2UtPnNldFBhcmVudElu
c3BlY3RvckNvbnRyb2xsZXIoMCk7Ci0gICAgICAgICAgICBtX3BhZ2UgPSAwOwotICAgICAgICB9
Ci0gICAgfQotfQotCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNob3dXaW5kb3coKQotewot
ICAgIEFTU0VSVChlbmFibGVkKCkpOwotCi0gICAgdW5zaWduZWQgaW5zcGVjdGVkUGFnZUhlaWdo
dCA9IG1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+dmlzaWJsZUhlaWdodCgp
OwotCi0gICAgbV9jbGllbnQtPnNob3dXaW5kb3coKTsKKyAgICBtX2Zyb250ZW5kLmNsZWFyKCk7
CisgICAgbV90aW1lbGluZUFnZW50LmNsZWFyKCk7CiAKLSAgICBTdHJpbmcgYXR0YWNoZWRIZWln
aHQgPSBzZXR0aW5nKGluc3BlY3RvckF0dGFjaGVkSGVpZ2h0TmFtZSk7Ci0gICAgYm9vbCBzdWNj
ZXNzID0gdHJ1ZTsKLSAgICBpbnQgaGVpZ2h0ID0gYXR0YWNoZWRIZWlnaHQudG9JbnQoJnN1Y2Nl
c3MpOwotICAgIHVuc2lnbmVkIHByZWZlcnJlZEhlaWdodCA9IHN1Y2Nlc3MgPyBoZWlnaHQgOiBk
ZWZhdWx0QXR0YWNoZWRIZWlnaHQ7Ci0KLSAgICAvLyBUaGlzIGNhbGwgbWlnaHQgbm90IGdvIHRo
cm91Z2ggKGlmIHRoZSB3aW5kb3cgc3RhcnRzIG91dCBkZXRhY2hlZCksIGJ1dCBpZiB0aGUgd2lu
ZG93IGlzIGluaXRpYWxseSBjcmVhdGVkIGF0dGFjaGVkLAotICAgIC8vIEluc3BlY3RvckNvbnRy
b2xsZXI6OmF0dGFjaFdpbmRvdyBpcyBuZXZlciBjYWxsZWQsIHNvIHdlIG5lZWQgdG8gbWFrZSBz
dXJlIHRvIHNldCB0aGUgYXR0YWNoZWRXaW5kb3dIZWlnaHQuCi0gICAgLy8gRklYTUU6IENsZWFu
IHVwIGNvZGUgc28gd2Ugb25seSBoYXZlIHRvIGNhbGwgc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQg
aW4gSW5zcGVjdG9yQ29udHJvbGxlcjo6YXR0YWNoV2luZG93Ci0gICAgbV9jbGllbnQtPnNldEF0
dGFjaGVkV2luZG93SGVpZ2h0KGNvbnN0cmFpbmVkQXR0YWNoZWRXaW5kb3dIZWlnaHQocHJlZmVy
cmVkSGVpZ2h0LCBpbnNwZWN0ZWRQYWdlSGVpZ2h0KSk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ29u
dHJvbGxlcjo6Y2xvc2VXaW5kb3coKQotewotICAgIG1fY2xpZW50LT5jbG9zZVdpbmRvdygpOwor
ICAgIG1fY2xvc2luZ0Zyb250ZW5kID0gZmFsc2U7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJv
bGxlcjo6cmVsZWFzZURPTUFnZW50KCkKQEAgLTY4MSw3ICs1NTcsNyBAQCB2b2lkIEluc3BlY3Rv
ckNvbnRyb2xsZXI6OnJlbGVhc2VET01BZ2VudCgpCiAgICAgLy8gbm8gcmVmZXJlbmNlcyB0byB0
aGUgRE9NIGFnZW50IGZyb20gdGhlIERPTSB0cmVlLgogICAgIGlmIChtX2RvbUFnZW50KQogICAg
ICAgICBtX2RvbUFnZW50LT5yZXNldCgpOwotICAgIG1fZG9tQWdlbnQgPSAwOworICAgIG1fZG9t
QWdlbnQuY2xlYXIoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpwb3B1bGF0ZVNj
cmlwdE9iamVjdHMoKQpAQCAtNzE1LDcgKzU5MSw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxl
cjo6cG9wdWxhdGVTY3JpcHRPYmplY3RzKCkKICAgICAgICAgbV9mcm9udGVuZC0+dXBkYXRlQ29u
c29sZU1lc3NhZ2VFeHBpcmVkQ291bnQobV9leHBpcmVkQ29uc29sZU1lc3NhZ2VDb3VudCk7CiAg
ICAgdW5zaWduZWQgbWVzc2FnZUNvdW50ID0gbV9jb25zb2xlTWVzc2FnZXMuc2l6ZSgpOwogICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtZXNzYWdlQ291bnQ7ICsraSkKLSAgICAgICAgbV9j
b25zb2xlTWVzc2FnZXNbaV0tPmFkZFRvQ29uc29sZShtX2Zyb250ZW5kLmdldCgpKTsKKyAgICAg
ICAgbV9jb25zb2xlTWVzc2FnZXNbaV0tPmFkZFRvRnJvbnRlbmQobV9mcm9udGVuZC5nZXQoKSwg
bV9pbmplY3RlZFNjcmlwdEhvc3QuZ2V0KCkpOwogCiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVC
VUdHRVIpCiAgICAgaWYgKG1fZGVidWdnZXJFbmFibGVkKQpAQCAtODAxLDcgKzY3Nyw4IEBAIHZv
aWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkQ29tbWl0TG9hZChEb2N1bWVudExvYWRlciogbG9h
ZGVyKQogICAgIEFTU0VSVChtX2luc3BlY3RlZFBhZ2UpOwogCiAgICAgaWYgKGxvYWRlci0+ZnJh
bWUoKSA9PSBtX2luc3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpKSB7Ci0gICAgICAgIG1fY2xpZW50
LT5pbnNwZWN0ZWRVUkxDaGFuZ2VkKGxvYWRlci0+dXJsKCkuc3RyaW5nKCkpOworICAgICAgICBp
ZiAobV9mcm9udGVuZCkKKyAgICAgICAgICAgIG1fZnJvbnRlbmQtPmluc3BlY3RlZFVSTENoYW5n
ZWQobG9hZGVyLT51cmwoKS5zdHJpbmcoKSk7CiAKICAgICAgICAgbV9pbmplY3RlZFNjcmlwdEhv
c3QtPmRpc2NhcmRJbmplY3RlZFNjcmlwdHMoKTsKICAgICAgICAgY2xlYXJDb25zb2xlTWVzc2Fn
ZXMoKTsKQEAgLTE0MzYsMTYgKzEzMTMsNiBAQCBJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2Uq
IEluc3BlY3RvckNvbnRyb2xsZXI6OmdldERPTVN0b3JhZ2VSZXNvdXJjZUZvcklkKGludAogfQog
I2VuZGlmCiAKLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6bW92ZVdpbmRvd0J5KGZsb2F0IHgs
IGZsb2F0IHkpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3BhZ2UgfHwgIWVuYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgRmxvYXRSZWN0IGZyYW1lUmVjdCA9IG1fcGFnZS0+Y2hyb21lKCkt
PndpbmRvd1JlY3QoKTsKLSAgICBmcmFtZVJlY3QubW92ZSh4LCB5KTsKLSAgICBtX3BhZ2UtPmNo
cm9tZSgpLT5zZXRXaW5kb3dSZWN0KGZyYW1lUmVjdCk7Ci19Ci0KICNpZiBFTkFCTEUoSkFWQVND
UklQVF9ERUJVR0dFUikKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6YWRkUHJvZmlsZShQYXNz
UmVmUHRyPFNjcmlwdFByb2ZpbGU+IHBycFByb2ZpbGUsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGNv
bnN0IFN0cmluZyYgc291cmNlVVJMKQogewpAQCAtMTQ5OCw3ICsxMzY1LDcgQEAgdm9pZCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpnZXRQcm9maWxlKGxvbmcgY2FsbElkLCB1bnNpZ25lZCB1aWQpCiAg
ICAgUHJvZmlsZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wcm9maWxlcy5maW5kKHVpZCk7CiAjaWYg
VVNFKEpTQykKICAgICBpZiAoaXQgIT0gbV9wcm9maWxlcy5lbmQoKSkKLSAgICAgICAgbV9mcm9u
dGVuZC0+ZGlkR2V0UHJvZmlsZShjYWxsSWQsIHRvSlMobV9mcm9udGVuZFNjcmlwdFN0YXRlLCBp
dC0+c2Vjb25kLmdldCgpKSk7CisgICAgICAgIG1fZnJvbnRlbmQtPmRpZEdldFByb2ZpbGUoY2Fs
bElkLCB0b0pTKG1fZnJvbnRlbmQtPnNjcmlwdFN0YXRlKCksIGl0LT5zZWNvbmQuZ2V0KCkpKTsK
ICNlbmRpZgogfQogCkBAIC0xNjM1LDcgKzE1MDIsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xs
ZXI6OmVuYWJsZURlYnVnZ2VyKCkKICAgICBpZiAobV9kZWJ1Z2dlckVuYWJsZWQpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGlmICghbV9mcm9udGVuZFNjcmlwdFN0YXRlIHx8ICFtX2Zyb250ZW5k
KQorICAgIGlmICghbV9mcm9udGVuZCkKICAgICAgICAgbV9hdHRhY2hEZWJ1Z2dlcldoZW5TaG93
biA9IHRydWU7CiAgICAgZWxzZSB7CiAgICAgICAgIG1fZnJvbnRlbmQtPmF0dGFjaERlYnVnZ2Vy
V2hlblNob3duKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250
cm9sbGVyLmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKaW5kZXgg
YTZhMmFkYS4uOTg4OTZlMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Q29udHJvbGxlci5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIu
aApAQCAtNjYsNyArNjYsNyBAQCBjbGFzcyBJbmplY3RlZFNjcmlwdEhvc3Q7CiBjbGFzcyBJbnNw
ZWN0b3JCYWNrZW5kOwogY2xhc3MgSW5zcGVjdG9yQ2xpZW50OwogY2xhc3MgSW5zcGVjdG9yRnJv
bnRlbmQ7Ci1jbGFzcyBJbnNwZWN0b3JGcm9udGVuZEhvc3Q7CitjbGFzcyBJbnNwZWN0b3JGcm9u
dGVuZENsaWVudDsKIGNsYXNzIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ7CiBjbGFzcyBKYXZhU2Ny
aXB0Q2FsbEZyYW1lOwogY2xhc3MgS1VSTDsKQEAgLTExNSwxMSArMTE1LDkgQEAgcHVibGljOgog
ICAgIH5JbnNwZWN0b3JDb250cm9sbGVyKCk7CiAKICAgICBJbnNwZWN0b3JCYWNrZW5kKiBpbnNw
ZWN0b3JCYWNrZW5kKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JCYWNrZW5kLmdldCgpOyB9Ci0gICAg
SW5zcGVjdG9yRnJvbnRlbmRIb3N0KiBpbnNwZWN0b3JGcm9udGVuZEhvc3QoKSB7IHJldHVybiBt
X2luc3BlY3RvckZyb250ZW5kSG9zdC5nZXQoKTsgfQogICAgIEluamVjdGVkU2NyaXB0SG9zdCog
aW5qZWN0ZWRTY3JpcHRIb3N0KCkgeyByZXR1cm4gbV9pbmplY3RlZFNjcmlwdEhvc3QuZ2V0KCk7
IH0KIAogICAgIHZvaWQgaW5zcGVjdGVkUGFnZURlc3Ryb3llZCgpOwotICAgIHZvaWQgcGFnZURl
c3Ryb3llZCgpIHsgbV9wYWdlID0gMDsgfQogCiAgICAgYm9vbCBlbmFibGVkKCkgY29uc3Q7CiAK
QEAgLTEzNiwyNyArMTM0LDIyIEBAIHB1YmxpYzoKICAgICB2b2lkIHNob3dQYW5lbChTcGVjaWFs
UGFuZWxzKTsKICAgICB2b2lkIGNsb3NlKCk7CiAKLSAgICBib29sIHdpbmRvd1Zpc2libGUoKTsK
LSAgICB2b2lkIHNldFdpbmRvd1Zpc2libGUoYm9vbCB2aXNpYmxlID0gdHJ1ZSwgYm9vbCBhdHRh
Y2hlZCA9IGZhbHNlKTsKLQogICAgIHZvaWQgYWRkTWVzc2FnZVRvQ29uc29sZShNZXNzYWdlU291
cmNlLCBNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBTY3JpcHRDYWxsU3RhY2sqKTsKICAgICB2
b2lkIGFkZE1lc3NhZ2VUb0NvbnNvbGUoTWVzc2FnZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1lc3Nh
Z2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25z
dCBTdHJpbmcmIHNvdXJjZUlEKTsKICAgICB2b2lkIGNsZWFyQ29uc29sZU1lc3NhZ2VzKCk7CiAg
ICAgY29uc3QgVmVjdG9yPENvbnNvbGVNZXNzYWdlKj4mIGNvbnNvbGVNZXNzYWdlcygpIGNvbnN0
IHsgcmV0dXJuIG1fY29uc29sZU1lc3NhZ2VzOyB9CiAKLSAgICBib29sIGNhbkF0dGFjaFdpbmRv
dygpIGNvbnN0OwotICAgIHZvaWQgYXR0YWNoV2luZG93KCk7Ci0gICAgdm9pZCBkZXRhY2hXaW5k
b3coKTsKLQogICAgIGJvb2wgc2VhcmNoaW5nRm9yTm9kZUluUGFnZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc2VhcmNoaW5nRm9yTm9kZTsgfQogICAgIHZvaWQgbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQo
Y29uc3QgSGl0VGVzdFJlc3VsdCYsIHVuc2lnbmVkIG1vZGlmaWVyRmxhZ3MpOwogICAgIHZvaWQg
aGFuZGxlTW91c2VQcmVzc09uTm9kZShOb2RlKik7CiAKKyAgICB2b2lkIHNldEluc3BlY3RvckZy
b250ZW5kQ2xpZW50KFBhc3NPd25QdHI8SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ+IGNsaWVudCk7
CisgICAgYm9vbCBoYXNJbnNwZWN0b3JGcm9udGVuZENsaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1f
aW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ7IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgdm9pZCBpbnNwZWN0ZWRXaW5kb3dTY3Jp
cHRPYmplY3RDbGVhcmVkKEZyYW1lKik7Ci0gICAgdm9pZCB3aW5kb3dTY3JpcHRPYmplY3RBdmFp
bGFibGUoKTsKIAotICAgIHZvaWQgc2V0RnJvbnRlbmRQcm94eU9iamVjdChTY3JpcHRTdGF0ZSog
c3RhdGUsIFNjcmlwdE9iamVjdCB3ZWJJbnNwZWN0b3JPYmosIFNjcmlwdE9iamVjdCBpbmplY3Rl
ZFNjcmlwdE9iaiA9IFNjcmlwdE9iamVjdCgpKTsKLSAgICBTY3JpcHRTdGF0ZSogZnJvbnRlbmRT
Y3JpcHRTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJvbnRlbmRTY3JpcHRTdGF0ZTsgfQorICAg
IGJvb2wgd2luZG93VmlzaWJsZSgpOworICAgIHZvaWQgc2V0RnJvbnRlbmQoUGFzc093blB0cjxJ
bnNwZWN0b3JGcm9udGVuZD4pOwogCiAgICAgdm9pZCBwb3B1bGF0ZVNjcmlwdE9iamVjdHMoKTsK
ICAgICB2b2lkIHJlc2V0U2NyaXB0T2JqZWN0cygpOwpAQCAtMjYyLDE5ICsyNTUsMTYgQEAgcHJp
dmF0ZToKICAgICBzdGF0aWMgY29uc3QgU3RyaW5nJiBmcm9udGVuZFNldHRpbmdzU2V0dGluZ05h
bWUoKTsKIAogICAgIGZyaWVuZCBjbGFzcyBJbnNwZWN0b3JCYWNrZW5kOwotICAgIGZyaWVuZCBj
bGFzcyBJbnNwZWN0b3JGcm9udGVuZEhvc3Q7CiAgICAgZnJpZW5kIGNsYXNzIEluamVjdGVkU2Ny
aXB0SG9zdDsKIAogICAgIC8vIEZvbGxvd2luZyBhcmUgdXNlZCBmcm9tIEluc3BlY3RvckJhY2tl
bmQgYW5kIGludGVybmFsbHkuCi0KICAgICB2b2lkIHNldFNlYXJjaGluZ0Zvck5vZGUoYm9vbCBl
bmFibGVkKTsKIAotICAgIHZvaWQgc2NyaXB0T2JqZWN0UmVhZHkoKTsKLSAgICB2b2lkIG1vdmVX
aW5kb3dCeShmbG9hdCB4LCBmbG9hdCB5KSBjb25zdDsKLSAgICB2b2lkIHNldEF0dGFjaGVkV2lu
ZG93KGJvb2wpOwotICAgIHZvaWQgc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVp
Z2h0KTsKKyAgICB2b2lkIGZyb250ZW5kUmVhZHkoKTsKKyAgICB2b2lkIHdpbGxDbG9zZUZyb250
ZW5kKCk7CisKKyAgICAvLyBGb2xsb3dpbmcgYXJlIHVzZWQgZnJvbSBJbnNwZWN0b3JCYWNrZW5k
IGFuZCBpbnRlcm5hbGx5LgogICAgIHZvaWQgc3RvcmVMYXN0QWN0aXZlUGFuZWwoY29uc3QgU3Ry
aW5nJiBwYW5lbE5hbWUpOwotICAgIHZvaWQgY2xvc2VXaW5kb3coKTsKICAgICBJbnNwZWN0b3JE
T01BZ2VudCogZG9tQWdlbnQoKSB7IHJldHVybiBtX2RvbUFnZW50LmdldCgpOyB9CiAgICAgdm9p
ZCByZWxlYXNlRE9NQWdlbnQoKTsKIApAQCAtMzE1LDggKzMwNSw2IEBAIHByaXZhdGU6CiAgICAg
dm9pZCBwcnVuZVJlc291cmNlcyhSZXNvdXJjZXNNYXAqLCBEb2N1bWVudExvYWRlciogbG9hZGVy
VG9LZWVwID0gMCk7CiAgICAgdm9pZCByZW1vdmVBbGxSZXNvdXJjZXMoUmVzb3VyY2VzTWFwKiBt
YXApIHsgcHJ1bmVSZXNvdXJjZXMobWFwKTsgfQogCi0gICAgdm9pZCBzaG93V2luZG93KCk7Ci0K
ICAgICBib29sIGlzTWFpblJlc291cmNlTG9hZGVyKERvY3VtZW50TG9hZGVyKiBsb2FkZXIsIGNv
bnN0IEtVUkwmIHJlcXVlc3RVcmwpOwogCiAgICAgU3BlY2lhbFBhbmVscyBzcGVjaWFsUGFuZWxG
b3JKU05hbWUoY29uc3QgU3RyaW5nJiBwYW5lbE5hbWUpOwpAQCAtMzI1LDEwICszMTMsMTIgQEAg
cHJpdmF0ZToKIAogICAgIFBhZ2UqIG1faW5zcGVjdGVkUGFnZTsKICAgICBJbnNwZWN0b3JDbGll
bnQqIG1fY2xpZW50OworICAgIE93blB0cjxJbnNwZWN0b3JGcm9udGVuZENsaWVudD4gbV9pbnNw
ZWN0b3JGcm9udGVuZENsaWVudDsKKyAgICBib29sIG1fb3BlbmluZ0Zyb250ZW5kOworICAgIGJv
b2wgbV9jbG9zaW5nRnJvbnRlbmQ7CiAgICAgT3duUHRyPEluc3BlY3RvckZyb250ZW5kPiBtX2Zy
b250ZW5kOwogICAgIFJlZlB0cjxJbnNwZWN0b3JET01BZ2VudD4gbV9kb21BZ2VudDsKICAgICBP
d25QdHI8SW5zcGVjdG9yVGltZWxpbmVBZ2VudD4gbV90aW1lbGluZUFnZW50OwotICAgIFBhZ2Uq
IG1fcGFnZTsKICAgICBSZWZQdHI8Tm9kZT4gbV9ub2RlVG9Gb2N1czsKICAgICBSZWZQdHI8SW5z
cGVjdG9yUmVzb3VyY2U+IG1fbWFpblJlc291cmNlOwogICAgIFJlc291cmNlc01hcCBtX3Jlc291
cmNlczsKQEAgLTM0NCw4ICszMzQsNiBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShET01fU1RPUkFH
RSkKICAgICBET01TdG9yYWdlUmVzb3VyY2VzTWFwIG1fZG9tU3RvcmFnZVJlc291cmNlczsKICNl
bmRpZgotICAgIFNjcmlwdFN0YXRlKiBtX2Zyb250ZW5kU2NyaXB0U3RhdGU7Ci0gICAgYm9vbCBt
X3dpbmRvd1Zpc2libGU7CiAgICAgU3BlY2lhbFBhbmVscyBtX3Nob3dBZnRlclZpc2libGU7CiAg
ICAgUmVmUHRyPE5vZGU+IG1faGlnaGxpZ2h0ZWROb2RlOwogICAgIHVuc2lnbmVkIG1fZ3JvdXBM
ZXZlbDsKQEAgLTM1NCw3ICszNDIsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9yZXNvdXJjZVRy
YWNraW5nRW5hYmxlZDsKICAgICBib29sIG1fcmVzb3VyY2VUcmFja2luZ1NldHRpbmdzTG9hZGVk
OwogICAgIFJlZlB0cjxJbnNwZWN0b3JCYWNrZW5kPiBtX2luc3BlY3RvckJhY2tlbmQ7Ci0gICAg
UmVmUHRyPEluc3BlY3RvckZyb250ZW5kSG9zdD4gbV9pbnNwZWN0b3JGcm9udGVuZEhvc3Q7CiAg
ICAgUmVmUHRyPEluamVjdGVkU2NyaXB0SG9zdD4gbV9pbmplY3RlZFNjcmlwdEhvc3Q7CiAKICAg
ICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IFNldHRpbmdzOwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRnJvbnRlbmQuY3BwCmluZGV4IDc4MWEwOTUuLmIxZWQ4ODAgMTAwNzU1Ci0t
LSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmNwcAorKysgYi9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5jcHAKQEAgLTQ5LDE0ICs0OSwxNiBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLUluc3BlY3RvckZyb250ZW5kOjpJbnNwZWN0b3JGcm9udGVu
ZChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyLCBTY3JpcHRPYmplY3Qg
d2ViSW5zcGVjdG9yKQotICAgIDogbV9pbnNwZWN0b3JDb250cm9sbGVyKGluc3BlY3RvckNvbnRy
b2xsZXIpCi0gICAgLCBtX3dlYkluc3BlY3Rvcih3ZWJJbnNwZWN0b3IpCitJbnNwZWN0b3JGcm9u
dGVuZDo6SW5zcGVjdG9yRnJvbnRlbmQoU2NyaXB0T2JqZWN0IHdlYkluc3BlY3RvcikKKyAgICA6
IG1fd2ViSW5zcGVjdG9yKHdlYkluc3BlY3RvcikKIHsKIH0KIAogSW5zcGVjdG9yRnJvbnRlbmQ6
On5JbnNwZWN0b3JGcm9udGVuZCgpIAogeworICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlv
bihtX3dlYkluc3BlY3RvciwgImNsb3NlIik7CisgICAgZnVuY3Rpb24uY2FsbCgpOworCiAgICAg
bV93ZWJJbnNwZWN0b3IgPSBTY3JpcHRPYmplY3QoKTsKIH0KIApAQCAtOTEsNyArOTMsNyBAQCB2
b2lkIEluc3BlY3RvckZyb250ZW5kOjp1cGRhdGVDb25zb2xlTWVzc2FnZUV4cGlyZWRDb3VudCh1
bnNpZ25lZCBjb3VudCkKICAgICBmdW5jdGlvbi5jYWxsKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
RnJvbnRlbmQ6OmFkZENvbnNvbGVNZXNzYWdlKGNvbnN0IFNjcmlwdE9iamVjdCYgbWVzc2FnZU9i
aiwgY29uc3QgVmVjdG9yPFNjcmlwdFN0cmluZz4mIGZyYW1lcywgU2NyaXB0U3RhdGUqIHNjcmlw
dFN0YXRlLCBjb25zdCBWZWN0b3I8U2NyaXB0VmFsdWU+IGFyZ3VtZW50cywgY29uc3QgU3RyaW5n
JiBtZXNzYWdlKQordm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6YWRkQ29uc29sZU1lc3NhZ2UoY29u
c3QgU2NyaXB0T2JqZWN0JiBtZXNzYWdlT2JqLCBjb25zdCBWZWN0b3I8U2NyaXB0U3RyaW5nPiYg
ZnJhbWVzLCBjb25zdCBWZWN0b3I8UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gPiYgYXJn
dW1lbnRzLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiB7CiAgICAgU2NyaXB0RnVuY3Rpb25DYWxs
IGZ1bmN0aW9uKG1fd2ViSW5zcGVjdG9yLCAiZGlzcGF0Y2giKTsgCiAgICAgZnVuY3Rpb24uYXBw
ZW5kQXJndW1lbnQoImFkZENvbnNvbGVNZXNzYWdlIik7CkBAIC0xMDAsMTAgKzEwMiw4IEBAIHZv
aWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmFkZENvbnNvbGVNZXNzYWdlKGNvbnN0IFNjcmlwdE9iamVj
dCYgbWVzc2FnZU9iaiwgY29uc3QKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZy
YW1lcy5zaXplKCk7ICsraSkKICAgICAgICAgICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGZy
YW1lc1tpXSk7CiAgICAgfSBlbHNlIGlmICghYXJndW1lbnRzLmlzRW1wdHkoKSkgewotICAgICAg
ICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IG1faW5zcGVjdG9yQ29udHJvbGxlci0+
aW5qZWN0ZWRTY3JpcHRIb3N0KCktPmluamVjdGVkU2NyaXB0Rm9yKHNjcmlwdFN0YXRlKTsKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3VtZW50cy5zaXplKCk7ICsraSkgewot
ICAgICAgICAgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZFZhbHVl
ID0gaW5qZWN0ZWRTY3JpcHQud3JhcEZvckNvbnNvbGUoYXJndW1lbnRzW2ldKTsKLSAgICAgICAg
ICAgIFNjcmlwdFZhbHVlIHNjcmlwdFZhbHVlID0gU2NyaXB0VmFsdWU6OmRlc2VyaWFsaXplKHRo
aXMtPnNjcmlwdFN0YXRlKCksIHNlcmlhbGl6ZWRWYWx1ZS5nZXQoKSk7CisgICAgICAgICAgICBT
Y3JpcHRWYWx1ZSBzY3JpcHRWYWx1ZSA9IFNjcmlwdFZhbHVlOjpkZXNlcmlhbGl6ZShzY3JpcHRT
dGF0ZSgpLCBhcmd1bWVudHNbaV0uZ2V0KCkpOwogICAgICAgICAgICAgaWYgKHNjcmlwdFZhbHVl
Lmhhc05vVmFsdWUoKSkgewogICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTIxNyw2ICsyMTcsMTkgQEAgdm9pZCBJbnNwZWN0
b3JGcm9udGVuZDo6cmVzZXQoKQogICAgIGNhbGxTaW1wbGVGdW5jdGlvbigicmVzZXQiKTsKIH0K
IAordm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6YnJpbmdUb0Zyb250KCkKK3sKKyAgICBjYWxsU2lt
cGxlRnVuY3Rpb24oImJyaW5nVG9Gcm9udCIpOworfQorCit2b2lkIEluc3BlY3RvckZyb250ZW5k
OjppbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYgdXJsKQoreworICAgIFNjcmlwdEZ1
bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7CisgICAgZnVu
Y3Rpb24uYXBwZW5kQXJndW1lbnQoImluc3BlY3RlZFVSTENoYW5nZWQiKTsKKyAgICBmdW5jdGlv
bi5hcHBlbmRBcmd1bWVudCh1cmwpOworICAgIGZ1bmN0aW9uLmNhbGwoKTsKK30KKwogdm9pZCBJ
bnNwZWN0b3JGcm9udGVuZDo6cmVzb3VyY2VUcmFja2luZ1dhc0VuYWJsZWQoKQogewogICAgIGNh
bGxTaW1wbGVGdW5jdGlvbigicmVzb3VyY2VUcmFja2luZ1dhc0VuYWJsZWQiKTsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmggYi9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JGcm9udGVuZC5oCmluZGV4IDg2MWE2ZjcuLjI1YTAzNTEgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmgKKysrIGIvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuaApAQCAtNDksNyArNDksNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKICAgICBjbGFzcyBJbnNwZWN0b3JGcm9udGVuZCA6IHB1YmxpYyBOb25jb3B5
YWJsZSB7CiAgICAgcHVibGljOgotICAgICAgICBJbnNwZWN0b3JGcm9udGVuZChJbnNwZWN0b3JD
b250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyLCBTY3JpcHRPYmplY3Qgd2ViSW5zcGVjdG9y
KTsKKyAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmQoU2NyaXB0T2JqZWN0IHdlYkluc3BlY3Rvcik7
CiAgICAgICAgIH5JbnNwZWN0b3JGcm9udGVuZCgpOwogCiAgICAgICAgIFNjcmlwdEFycmF5IG5l
d1NjcmlwdEFycmF5KCk7CkBAIC02MCw3ICs2MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgdm9pZCBwb3B1bGF0ZUZyb250ZW5kU2V0dGluZ3MoY29uc3QgU3RyaW5nJiBzZXR0aW5n
cyk7CiAKICAgICAgICAgdm9pZCB1cGRhdGVDb25zb2xlTWVzc2FnZUV4cGlyZWRDb3VudCh1bnNp
Z25lZCBjb3VudCk7Ci0gICAgICAgIHZvaWQgYWRkQ29uc29sZU1lc3NhZ2UoY29uc3QgU2NyaXB0
T2JqZWN0JiBtZXNzYWdlT2JqLCBjb25zdCBWZWN0b3I8U2NyaXB0U3RyaW5nPiYgZnJhbWVzLCBT
Y3JpcHRTdGF0ZSosIGNvbnN0IFZlY3RvcjxTY3JpcHRWYWx1ZT4gYXJndW1lbnRzLCBjb25zdCBT
dHJpbmcmIG1lc3NhZ2UpOworICAgICAgICB2b2lkIGFkZENvbnNvbGVNZXNzYWdlKGNvbnN0IFNj
cmlwdE9iamVjdCYgbWVzc2FnZU9iaiwgY29uc3QgVmVjdG9yPFNjcmlwdFN0cmluZz4mIGZyYW1l
cywgY29uc3QgVmVjdG9yPFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+ID4mIGFyZ3VtZW50
cywgY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKICAgICAgICAgdm9pZCB1cGRhdGVDb25zb2xlTWVz
c2FnZVJlcGVhdENvdW50KHVuc2lnbmVkIGNvdW50KTsKICAgICAgICAgdm9pZCBjbGVhckNvbnNv
bGVNZXNzYWdlcygpOwogCkBAIC03Myw2ICs3Myw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgdm9pZCBzaG93UGFuZWwoaW50IHBhbmVsKTsKICAgICAgICAgdm9pZCBwb3B1bGF0ZUlu
dGVyZmFjZSgpOwogICAgICAgICB2b2lkIHJlc2V0KCk7CisgICAgICAgIAorICAgICAgICB2b2lk
IGJyaW5nVG9Gcm9udCgpOworICAgICAgICB2b2lkIGluc3BlY3RlZFVSTENoYW5nZWQoY29uc3Qg
U3RyaW5nJik7CiAKICAgICAgICAgdm9pZCByZXNvdXJjZVRyYWNraW5nV2FzRW5hYmxlZCgpOwog
ICAgICAgICB2b2lkIHJlc291cmNlVHJhY2tpbmdXYXNEaXNhYmxlZCgpOwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaCBiL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uMDU4MzQ2YgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckZyb250ZW5kQ2xpZW50LmgKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRp
b24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSW5zcGVj
dG9yRnJvbnRlbmRDbGllbnRfaAorI2RlZmluZSBJbnNwZWN0b3JGcm9udGVuZENsaWVudF9oCisK
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
Q29udGV4dE1lbnVJdGVtOworY2xhc3MgRXZlbnQ7CitjbGFzcyBTdHJpbmc7CisKK2NsYXNzIElu
c3BlY3RvckZyb250ZW5kQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5JbnNwZWN0b3JG
cm9udGVuZENsaWVudCgpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIHdpbmRvd09iamVjdENsZWFy
ZWQoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZyb250ZW5kTG9hZGVkKCkgPSAwOworCisgICAg
dmlydHVhbCB2b2lkIG1vdmVXaW5kb3dCeShmbG9hdCB4LCBmbG9hdCB5KSA9IDA7CisKKyAgICB2
aXJ0dWFsIFN0cmluZyBsb2NhbGl6ZWRTdHJpbmdzVVJMKCkgPSAwOworICAgIHZpcnR1YWwgU3Ry
aW5nIGhpZGRlblBhbmVscygpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBicmluZ1RvRnJvbnQo
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNsb3NlV2luZG93KCkgPSAwOworCisgICAgdmlydHVh
bCBib29sIGNhbkF0dGFjaFdpbmRvdygpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoV2lu
ZG93KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hXaW5kb3coKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGNoYW5nZUF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkKSA9IDA7CisgICAg
CisgICAgdmlydHVhbCB2b2lkIGluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJikgPSAw
OworCisgICAgdmlydHVhbCB2b2lkIHNob3dDb250ZXh0TWVudShFdmVudCosIGNvbnN0IFZlY3Rv
cjxDb250ZXh0TWVudUl0ZW0qPiYpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVu
ZENsaWVudExvY2FsLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xp
ZW50TG9jYWwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3NGNkY2MK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENs
aWVudExvY2FsLmNwcApAQCAtMCwwICsxLDIzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisg
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmgiCisKKyNpZiBFTkFCTEUoSU5TUEVD
VE9SKQorCisjaW5jbHVkZSAiQ2hyb21lLmgiCisjaW5jbHVkZSAiQ29udGV4dE1lbnUuaCIKKyNp
bmNsdWRlICJDb250ZXh0TWVudUl0ZW0uaCIKKyNpbmNsdWRlICJDb250ZXh0TWVudUNvbnRyb2xs
ZXIuaCIKKyNpbmNsdWRlICJDb250ZXh0TWVudVByb3ZpZGVyLmgiCisjaW5jbHVkZSAiRmxvYXRS
ZWN0LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNs
dWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmQu
aCIKKyNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZEhvc3QuaCIKKyNpbmNsdWRlICJQYWdlLmgi
CisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTY3JpcHRPYmplY3QuaCIK
KyNpbmNsdWRlICJTY3JpcHRGdW5jdGlvbkNhbGwuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBGcm9udGVuZE1lbnVQcm92aWRlciA6IHB1YmxpYyBDb250ZXh0TWVudVByb3ZpZGVy
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxGcm9udGVuZE1lbnVQcm92aWRlcj4g
Y3JlYXRlKEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwqIGZyb250ZW5kQ2xpZW50LCBTY3Jp
cHRPYmplY3Qgd2ViSW5zcGVjdG9yLCBjb25zdCBWZWN0b3I8Q29udGV4dE1lbnVJdGVtKj4mIGl0
ZW1zKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGcm9udGVuZE1lbnVQcm92
aWRlcihmcm9udGVuZENsaWVudCwgd2ViSW5zcGVjdG9yLCBpdGVtcykpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGRpc2Nvbm5lY3QoKQorICAgIHsKKyAgICAgICAgbV93ZWJJbnNwZWN0b3IgPSBT
Y3JpcHRPYmplY3QoKTsKKyAgICAgICAgbV9mcm9udGVuZENsaWVudCA9IDA7CisgICAgfQorICAg
IAorcHJpdmF0ZToKKyAgICBGcm9udGVuZE1lbnVQcm92aWRlcihJbnNwZWN0b3JGcm9udGVuZENs
aWVudExvY2FsKiBmcm9udGVuZENsaWVudCwgU2NyaXB0T2JqZWN0IHdlYkluc3BlY3RvciwgIGNv
bnN0IFZlY3RvcjxDb250ZXh0TWVudUl0ZW0qPiYgaXRlbXMpCisgICAgICAgIDogbV9mcm9udGVu
ZENsaWVudChmcm9udGVuZENsaWVudCkKKyAgICAgICAgLCBtX3dlYkluc3BlY3Rvcih3ZWJJbnNw
ZWN0b3IpCisgICAgICAgICwgbV9pdGVtcyhpdGVtcykKKyAgICB7CisgICAgfQorCisgICAgdmly
dHVhbCB+RnJvbnRlbmRNZW51UHJvdmlkZXIoKQorICAgIHsKKyAgICAgICAgY29udGV4dE1lbnVD
bGVhcmVkKCk7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgdm9pZCBwb3B1bGF0ZUNvbnRleHRN
ZW51KENvbnRleHRNZW51KiBtZW51KQorICAgIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX2l0ZW1zLnNpemUoKTsgKytpKQorICAgICAgICAgICAgbWVudS0+YXBwZW5kSXRlbSgq
bV9pdGVtc1tpXSk7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgdm9pZCBjb250ZXh0TWVudUl0
ZW1TZWxlY3RlZChDb250ZXh0TWVudUl0ZW0qIGl0ZW0pCisgICAgeworICAgICAgICBpbnQgaXRl
bU51bWJlciA9IGl0ZW0tPmFjdGlvbigpIC0gQ29udGV4dE1lbnVJdGVtQmFzZUN1c3RvbVRhZzsK
KworICAgICAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJbnNwZWN0b3IsICJk
aXNwYXRjaCIpOworICAgICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudCgiY29udGV4dE1lbnVJ
dGVtU2VsZWN0ZWQiKTsKKyAgICAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoaXRlbU51bWJl
cik7CisgICAgICAgIGZ1bmN0aW9uLmNhbGwoKTsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCB2
b2lkIGNvbnRleHRNZW51Q2xlYXJlZCgpCisgICAgeworCisgICAgICAgIGlmIChtX2Zyb250ZW5k
Q2xpZW50KSB7CisgICAgICAgICAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJ
bnNwZWN0b3IsICJkaXNwYXRjaCIpOworICAgICAgICAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1l
bnQoImNvbnRleHRNZW51Q2xlYXJlZCIpOworICAgICAgICAgICAgZnVuY3Rpb24uY2FsbCgpOwor
CisgICAgICAgICAgICBtX2Zyb250ZW5kQ2xpZW50LT5tX21lbnVQcm92aWRlciA9IDA7CisgICAg
ICAgIH0KKyAgICAgICAgZGVsZXRlQWxsVmFsdWVzKG1faXRlbXMpOworICAgICAgICBtX2l0ZW1z
LmNsZWFyKCk7CisgICAgfQorCisgICAgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbCogbV9m
cm9udGVuZENsaWVudDsKKyAgICBTY3JpcHRPYmplY3QgbV93ZWJJbnNwZWN0b3I7CisgICAgVmVj
dG9yPENvbnRleHRNZW51SXRlbSo+IG1faXRlbXM7Cit9OworCitzdGF0aWMgY29uc3QgY2hhciog
Y29uc3QgaW5zcGVjdG9yQXR0YWNoZWRIZWlnaHROYW1lID0gImluc3BlY3RvckF0dGFjaGVkSGVp
Z2h0IjsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBkZWZhdWx0QXR0YWNoZWRIZWlnaHQgPSAzMDA7
CitzdGF0aWMgY29uc3QgZmxvYXQgbWluaW11bUF0dGFjaGVkSGVpZ2h0ID0gMjUwLjBmOworc3Rh
dGljIGNvbnN0IGZsb2F0IG1heGltdW1BdHRhY2hlZEhlaWdodFJhdGlvID0gMC43NWY7CisKK0lu
c3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwo
SW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciwgUGFnZSogZnJvbnRlbmRQ
YWdlKQorICAgIDogbV9pbnNwZWN0b3JDb250cm9sbGVyKGluc3BlY3RvckNvbnRyb2xsZXIpCisg
ICAgLCBtX2Zyb250ZW5kUGFnZShmcm9udGVuZFBhZ2UpCisgICAgLCBtX2Zyb250ZW5kU2NyaXB0
U3RhdGUoMCkKKyAgICAsIG1fbWVudVByb3ZpZGVyKDApCit7Cit9CisKK0luc3BlY3RvckZyb250
ZW5kQ2xpZW50TG9jYWw6On5JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsKCkKK3sKKyAgICBp
ZiAobV9tZW51UHJvdmlkZXIpCisgICAgICAgIG1fbWVudVByb3ZpZGVyLT5kaXNjb25uZWN0KCk7
CisgICAgbV9mcm9udGVuZFNjcmlwdFN0YXRlID0gMDsKKyAgICBtX2Zyb250ZW5kUGFnZSA9IDA7
CisgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyID0gMDsKK30KKyAgICAKK3ZvaWQgSW5zcGVjdG9y
RnJvbnRlbmRDbGllbnRMb2NhbDo6d2luZG93T2JqZWN0Q2xlYXJlZCgpCit7CisgICAgLy8gR3Jh
bnQgdGhlIGluc3BlY3RvciB0aGUgYWJpbGl0eSB0byBzY3JpcHQgdGhlIGluc3BlY3RlZCBwYWdl
LgorICAgIG1fZnJvbnRlbmRQYWdlLT5tYWluRnJhbWUoKS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlP
cmlnaW4oKS0+Z3JhbnRVbml2ZXJzYWxBY2Nlc3MoKTsKKyAgICAvLyBGSVhNRTogZG9uJ3Qga2Vl
cCByZWZlcmVuY2UgdG8gdGhlIHNjcmlwdCBzdGF0ZQorICAgIG1fZnJvbnRlbmRTY3JpcHRTdGF0
ZSA9IHNjcmlwdFN0YXRlRnJvbVBhZ2UoZGVidWdnZXJXb3JsZCgpLCBtX2Zyb250ZW5kUGFnZSk7
CisgICAgU2NyaXB0R2xvYmFsT2JqZWN0OjpzZXQobV9mcm9udGVuZFNjcmlwdFN0YXRlLCAiSW5z
cGVjdG9yQmFja2VuZCIsIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQmFja2VuZCgp
KTsKKyAgICBtX2Zyb250ZW5kSG9zdCA9IEluc3BlY3RvckZyb250ZW5kSG9zdDo6Y3JlYXRlKHRo
aXMpOworICAgIFNjcmlwdEdsb2JhbE9iamVjdDo6c2V0KG1fZnJvbnRlbmRTY3JpcHRTdGF0ZSwg
Ikluc3BlY3RvckZyb250ZW5kSG9zdCIsIG1fZnJvbnRlbmRIb3N0LmdldCgpKTsKK30KKwordm9p
ZCBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjpmcm9udGVuZExvYWRlZCgpCit7CisgICAg
Ly8gTWFrZSBzdXJlIG91ciB3aW5kb3cgaXMgdmlzaWJsZSBub3cgdGhhdCB0aGUgcGFnZSBsb2Fk
ZWQKKyAgICBicmluZ1RvRnJvbnQoKTsKKworICAgIC8vIENyZWF0ZSBJbnNwZWN0b3JGcm9udGVu
ZCBhbmQgc2V0IGl0IHRvIEluc3BlY3RvckNvbnRyb2xsZXIuCisgICAgQVNTRVJUKG1fZnJvbnRl
bmRTY3JpcHRTdGF0ZSk7CisgICAgU2NyaXB0T2JqZWN0IHdlYkluc3BlY3Rvck9iajsKKyAgICBp
ZiAoIVNjcmlwdEdsb2JhbE9iamVjdDo6Z2V0KG1fZnJvbnRlbmRTY3JpcHRTdGF0ZSwgIldlYklu
c3BlY3RvciIsIHdlYkluc3BlY3Rvck9iaikpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5z
ZXRGcm9udGVuZChuZXcgSW5zcGVjdG9yRnJvbnRlbmQod2ViSW5zcGVjdG9yT2JqKSk7Cit9CisK
K2Jvb2wgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6Y2FuQXR0YWNoV2luZG93KCkKK3sK
KyAgICB1bnNpZ25lZCBpbnNwZWN0ZWRQYWdlSGVpZ2h0ID0gbV9pbnNwZWN0b3JDb250cm9sbGVy
LT5pbnNwZWN0ZWRQYWdlKCktPm1haW5GcmFtZSgpLT52aWV3KCktPnZpc2libGVIZWlnaHQoKTsK
KworICAgIC8vIERvbid0IGFsbG93IHRoZSBhdHRhY2ggaWYgdGhlIHdpbmRvdyB3b3VsZCBiZSB0
b28gc21hbGwgdG8gYWNjb21tb2RhdGUgdGhlIG1pbmltdW0gaW5zcGVjdG9yIGhlaWdodC4KKyAg
ICByZXR1cm4gbWluaW11bUF0dGFjaGVkSGVpZ2h0IDw9IGluc3BlY3RlZFBhZ2VIZWlnaHQgKiBt
YXhpbXVtQXR0YWNoZWRIZWlnaHRSYXRpbzsKK30KKwordm9pZCBJbnNwZWN0b3JGcm9udGVuZENs
aWVudExvY2FsOjpjaGFuZ2VBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpCit7
CisgICAgdW5zaWduZWQgdG90YWxIZWlnaHQgPSBtX2Zyb250ZW5kUGFnZS0+bWFpbkZyYW1lKCkt
PnZpZXcoKS0+dmlzaWJsZUhlaWdodCgpICsgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0
ZWRQYWdlKCktPm1haW5GcmFtZSgpLT52aWV3KCktPnZpc2libGVIZWlnaHQoKTsKKyAgICB1bnNp
Z25lZCBhdHRhY2hlZEhlaWdodCA9IGNvbnN0cmFpbmVkQXR0YWNoZWRXaW5kb3dIZWlnaHQoaGVp
Z2h0LCB0b3RhbEhlaWdodCk7CisgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5zZXRTZXR0aW5n
KGluc3BlY3RvckF0dGFjaGVkSGVpZ2h0TmFtZSwgU3RyaW5nOjpudW1iZXIoYXR0YWNoZWRIZWln
aHQpKTsKKyAgICBzZXRBdHRhY2hlZFdpbmRvd0hlaWdodChhdHRhY2hlZEhlaWdodCk7Cit9CisK
K3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6bW92ZVdpbmRvd0J5KGZsb2F0IHgs
IGZsb2F0IHkpCit7CisgICAgRmxvYXRSZWN0IGZyYW1lUmVjdCA9IG1fZnJvbnRlbmRQYWdlLT5j
aHJvbWUoKS0+d2luZG93UmVjdCgpOworICAgIGZyYW1lUmVjdC5tb3ZlKHgsIHkpOworICAgIG1f
ZnJvbnRlbmRQYWdlLT5jaHJvbWUoKS0+c2V0V2luZG93UmVjdChmcmFtZVJlY3QpOworfQorCit2
b2lkIEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OnNob3dDb250ZXh0TWVudShFdmVudCog
ZXZlbnQsIGNvbnN0IFZlY3RvcjxDb250ZXh0TWVudUl0ZW0qPiYgaXRlbXMpCit7CisgICAgU2Ny
aXB0T2JqZWN0IHdlYkluc3BlY3Rvck9iajsKKyAgICBpZiAoIVNjcmlwdEdsb2JhbE9iamVjdDo6
Z2V0KG1fZnJvbnRlbmRTY3JpcHRTdGF0ZSwgIldlYkluc3BlY3RvciIsIHdlYkluc3BlY3Rvck9i
aikpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgCisgICAgUmVmUHRyPEZyb250ZW5kTWVudVByb3ZpZGVyPiBtZW51UHJvdmlkZXIg
PSBGcm9udGVuZE1lbnVQcm92aWRlcjo6Y3JlYXRlKHRoaXMsIHdlYkluc3BlY3Rvck9iaiwgaXRl
bXMpOworICAgIENvbnRleHRNZW51Q29udHJvbGxlciogbWVudUNvbnRyb2xsZXIgPSBtX2Zyb250
ZW5kUGFnZS0+Y29udGV4dE1lbnVDb250cm9sbGVyKCk7CisgICAgbWVudUNvbnRyb2xsZXItPnNo
b3dDb250ZXh0TWVudShldmVudCwgbWVudVByb3ZpZGVyKTsKKyAgICBtX21lbnVQcm92aWRlciA9
IG1lbnVQcm92aWRlci5nZXQoKTsKK30KKwordm9pZCBJbnNwZWN0b3JGcm9udGVuZENsaWVudExv
Y2FsOjpzZXRBdHRhY2hlZFdpbmRvdyhib29sIGF0dGFjaGVkKQoreworICAgIFNjcmlwdE9iamVj
dCB3ZWJJbnNwZWN0b3JPYmo7CisgICAgaWYgKCFTY3JpcHRHbG9iYWxPYmplY3Q6OmdldChtX2Zy
b250ZW5kU2NyaXB0U3RhdGUsICJXZWJJbnNwZWN0b3IiLCB3ZWJJbnNwZWN0b3JPYmopKSB7Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbih3ZWJJbnNwZWN0b3JPYmosICJkaXNwYXRjaCIp
OyAKKyAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudCgic2V0QXR0YWNoZWRXaW5kb3ciKTsKKyAg
ICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChhdHRhY2hlZCk7CisgICAgZnVuY3Rpb24uY2FsbCgp
OworfQorCit2b2lkIEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OnJlc3RvcmVBdHRhY2hl
ZFdpbmRvd0hlaWdodCgpCit7CisgICAgdW5zaWduZWQgaW5zcGVjdGVkUGFnZUhlaWdodCA9IG1f
aW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdGVkUGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygp
LT52aXNpYmxlSGVpZ2h0KCk7CisgICAgU3RyaW5nIGF0dGFjaGVkSGVpZ2h0ID0gbV9pbnNwZWN0
b3JDb250cm9sbGVyLT5zZXR0aW5nKGluc3BlY3RvckF0dGFjaGVkSGVpZ2h0TmFtZSk7CisgICAg
Ym9vbCBzdWNjZXNzID0gdHJ1ZTsKKyAgICBpbnQgaGVpZ2h0ID0gYXR0YWNoZWRIZWlnaHQudG9J
bnQoJnN1Y2Nlc3MpOworICAgIHVuc2lnbmVkIHByZWZlcnJlZEhlaWdodCA9IHN1Y2Nlc3MgPyBo
ZWlnaHQgOiBkZWZhdWx0QXR0YWNoZWRIZWlnaHQ7CisgICAgCisgICAgLy8gVGhpcyBjYWxsIG1p
Z2h0IG5vdCBnbyB0aHJvdWdoIChpZiB0aGUgd2luZG93IHN0YXJ0cyBvdXQgZGV0YWNoZWQpLCBi
dXQgaWYgdGhlIHdpbmRvdyBpcyBpbml0aWFsbHkgY3JlYXRlZCBhdHRhY2hlZCwKKyAgICAvLyBJ
bnNwZWN0b3JDb250cm9sbGVyOjphdHRhY2hXaW5kb3cgaXMgbmV2ZXIgY2FsbGVkLCBzbyB3ZSBu
ZWVkIHRvIG1ha2Ugc3VyZSB0byBzZXQgdGhlIGF0dGFjaGVkV2luZG93SGVpZ2h0LgorICAgIC8v
IEZJWE1FOiBDbGVhbiB1cCBjb2RlIHNvIHdlIG9ubHkgaGF2ZSB0byBjYWxsIHNldEF0dGFjaGVk
V2luZG93SGVpZ2h0IGluIEluc3BlY3RvckNvbnRyb2xsZXI6OmF0dGFjaFdpbmRvdworICAgIHNl
dEF0dGFjaGVkV2luZG93SGVpZ2h0KGNvbnN0cmFpbmVkQXR0YWNoZWRXaW5kb3dIZWlnaHQocHJl
ZmVycmVkSGVpZ2h0LCBpbnNwZWN0ZWRQYWdlSGVpZ2h0KSk7Cit9CisKK3Vuc2lnbmVkIEluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OmNvbnN0cmFpbmVkQXR0YWNoZWRXaW5kb3dIZWlnaHQo
dW5zaWduZWQgcHJlZmVycmVkSGVpZ2h0LCB1bnNpZ25lZCB0b3RhbFdpbmRvd0hlaWdodCkKK3sK
KyAgICB1c2luZyBuYW1lc3BhY2Ugc3RkOworICAgIHJldHVybiByb3VuZGYobWF4KG1pbmltdW1B
dHRhY2hlZEhlaWdodCwgbWluPGZsb2F0PihwcmVmZXJyZWRIZWlnaHQsIHRvdGFsV2luZG93SGVp
Z2h0ICogbWF4aW11bUF0dGFjaGVkSGVpZ2h0UmF0aW8pKSk7Cit9CisgICAgCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RnJvbnRlbmRDbGllbnRMb2NhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjkxOGM0NzkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JG
cm9udGVuZENsaWVudExvY2FsLmgKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSW5zcGVjdG9yRnJv
bnRlbmRDbGllbnRMb2NhbF9oCisjZGVmaW5lIEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWxf
aAorCisjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaCIKKyNpbmNsdWRlICJTY3Jp
cHRTdGF0ZS5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIEZyb250ZW5kTWVudVByb3ZpZGVyOworY2xhc3MgSW5zcGVjdG9yQ29u
dHJvbGxlcjsKK2NsYXNzIEluc3BlY3RvckZyb250ZW5kSG9zdDsKK2NsYXNzIFBhZ2U7CisKK2Ns
YXNzIEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwgOiBwdWJsaWMgSW5zcGVjdG9yRnJvbnRl
bmRDbGllbnQsIHB1YmxpYyBOb25jb3B5YWJsZSB7CitwdWJsaWM6CisgICAgSW5zcGVjdG9yRnJv
bnRlbmRDbGllbnRMb2NhbChJbnNwZWN0b3JDb250cm9sbGVyKiwgUGFnZSopOworICAgIHZpcnR1
YWwgfkluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwoKTsKKyAgICAKKyAgICB2aXJ0dWFsIHZv
aWQgd2luZG93T2JqZWN0Q2xlYXJlZCgpOworICAgIHZpcnR1YWwgdm9pZCBmcm9udGVuZExvYWRl
ZCgpOworCisgICAgdmlydHVhbCB2b2lkIG1vdmVXaW5kb3dCeShmbG9hdCB4LCBmbG9hdCB5KTsK
KworICAgIHZpcnR1YWwgYm9vbCBjYW5BdHRhY2hXaW5kb3coKTsKKyAgICB2aXJ0dWFsIHZvaWQg
Y2hhbmdlQXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQpOworCisgICAgdmlydHVhbCB2b2lk
IHNob3dDb250ZXh0TWVudShFdmVudCosIGNvbnN0IFZlY3RvcjxDb250ZXh0TWVudUl0ZW0qPiYp
OworICAgIAorcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBzZXRBdHRhY2hlZFdpbmRvd0hl
aWdodCh1bnNpZ25lZCkgPSAwOworCisgICAgdm9pZCBzZXRBdHRhY2hlZFdpbmRvdyhib29sKTsK
KyAgICB2b2lkIHJlc3RvcmVBdHRhY2hlZFdpbmRvd0hlaWdodCgpOworCitwcml2YXRlOgorICAg
IHN0YXRpYyB1bnNpZ25lZCBjb25zdHJhaW5lZEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVk
IHByZWZlcnJlZEhlaWdodCwgdW5zaWduZWQgdG90YWxXaW5kb3dIZWlnaHQpOworCisgICAgZnJp
ZW5kIGNsYXNzIEZyb250ZW5kTWVudVByb3ZpZGVyOworICAgIEluc3BlY3RvckNvbnRyb2xsZXIq
IG1faW5zcGVjdG9yQ29udHJvbGxlcjsKKyAgICBQYWdlKiBtX2Zyb250ZW5kUGFnZTsKKyAgICBT
Y3JpcHRTdGF0ZSogbV9mcm9udGVuZFNjcmlwdFN0YXRlOworICAgIC8vIFRPRE8oeXVyeXMpOiB0
aGlzIHJlZiBzaG91bGRuJ3QgYmUgbmVlZGVkLgorICAgIFJlZlB0cjxJbnNwZWN0b3JGcm9udGVu
ZEhvc3Q+IG1fZnJvbnRlbmRIb3N0OworICAgIEZyb250ZW5kTWVudVByb3ZpZGVyKiBtX21lbnVQ
cm92aWRlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcAppbmRleCBjMWExNzYxLi42ZDRj
MjE1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3Qu
Y3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAKQEAg
LTQxLDggKzQxLDcgQEAKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIkhpdFRl
c3RSZXN1bHQuaCIKICNpbmNsdWRlICJIVE1MRnJhbWVPd25lckVsZW1lbnQuaCIKLSNpbmNsdWRl
ICJJbnNwZWN0b3JDbGllbnQuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZC5oIgorI2lu
Y2x1ZGUgIkluc3BlY3RvckZyb250ZW5kQ2xpZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yUmVz
b3VyY2UuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFzdGVib2FyZC5oIgpAQCAt
NTQsNjUgKzUzLDY5IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotSW5zcGVjdG9yRnJvbnRlbmRIb3N0OjpJbnNwZWN0b3JGcm9udGVuZEhvc3QoSW5zcGVj
dG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciwgSW5zcGVjdG9yQ2xpZW50KiBjbGll
bnQpCi0gICAgOiBtX2luc3BlY3RvckNvbnRyb2xsZXIoaW5zcGVjdG9yQ29udHJvbGxlcikKLSAg
ICAsIG1fY2xpZW50KGNsaWVudCkKK0luc3BlY3RvckZyb250ZW5kSG9zdDo6SW5zcGVjdG9yRnJv
bnRlbmRIb3N0KEluc3BlY3RvckZyb250ZW5kQ2xpZW50KiBjbGllbnQpCisgICAgOiBtX2NsaWVu
dChjbGllbnQpCiB7CiB9CiAKIEluc3BlY3RvckZyb250ZW5kSG9zdDo6fkluc3BlY3RvckZyb250
ZW5kSG9zdCgpCiB7Ci0gICAgaWYgKG1fbWVudVByb3ZpZGVyKQotICAgICAgICBtX21lbnVQcm92
aWRlci0+ZGlzY29ubmVjdCgpOworICAgIEFTU0VSVCghbV9jbGllbnQpOwogfQogCiB2b2lkIElu
c3BlY3RvckZyb250ZW5kSG9zdDo6bG9hZGVkKCkKIHsKLSAgICBpZiAobV9pbnNwZWN0b3JDb250
cm9sbGVyKQotICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPnNjcmlwdE9iamVjdFJlYWR5
KCk7CisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+ZnJvbnRlbmRMb2FkZWQo
KTsKIH0KIAogdm9pZCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OmF0dGFjaCgpCiB7Ci0gICAgaWYg
KG1faW5zcGVjdG9yQ29udHJvbGxlcikKLSAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5h
dHRhY2hXaW5kb3coKTsKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5hdHRh
Y2hXaW5kb3coKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OmRldGFjaCgpCiB7
Ci0gICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlcikKLSAgICAgICAgbV9pbnNwZWN0b3JDb250
cm9sbGVyLT5kZXRhY2hXaW5kb3coKTsKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xp
ZW50LT5kZXRhY2hXaW5kb3coKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OmNs
b3NlV2luZG93KCkKIHsKLSAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyKQotICAgICAgICBt
X2luc3BlY3RvckNvbnRyb2xsZXItPmNsb3NlV2luZG93KCk7CisgICAgaWYgKG1fY2xpZW50KSB7
CisgICAgICAgIG1fY2xpZW50LT5jbG9zZVdpbmRvdygpOworICAgICAgICBtX2NsaWVudCA9IDA7
IC8vIERpc2Nvbm5lY3QgZnJvbSBjbGllbnQuCisgICAgfQorfQorCit2b2lkIEluc3BlY3RvckZy
b250ZW5kSG9zdDo6YnJpbmdUb0Zyb250KCkKK3sKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAg
IG1fY2xpZW50LT5icmluZ1RvRnJvbnQoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JGcm9udGVuZEhv
c3Q6OndpbmRvd1VubG9hZGluZygpCit2b2lkIEluc3BlY3RvckZyb250ZW5kSG9zdDo6aW5zcGVj
dGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIG5ld1VSTCkKIHsKLSAgICBpZiAobV9pbnNwZWN0
b3JDb250cm9sbGVyKQotICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmNsb3NlKCk7Cisg
ICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+aW5zcGVjdGVkVVJMQ2hhbmdlZChu
ZXdVUkwpOwogfQogCiBib29sIEluc3BlY3RvckZyb250ZW5kSG9zdDo6Y2FuQXR0YWNoV2luZG93
KCkgY29uc3QKIHsKLSAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyKQotICAgICAgICByZXR1
cm4gbV9pbnNwZWN0b3JDb250cm9sbGVyLT5jYW5BdHRhY2hXaW5kb3coKTsKLSAgICByZXR1cm4g
ZmFsc2U7CisgICAgcmV0dXJuIG1fY2xpZW50ICYmIG1fY2xpZW50LT5jYW5BdHRhY2hXaW5kb3co
KTsKIH0KIAogdm9pZCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OnNldEF0dGFjaGVkV2luZG93SGVp
Z2h0KHVuc2lnbmVkIGhlaWdodCkKIHsKLSAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyKQot
ICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPnNldEF0dGFjaGVkV2luZG93SGVpZ2h0KGhl
aWdodCk7CisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+Y2hhbmdlQXR0YWNo
ZWRXaW5kb3dIZWlnaHQoaGVpZ2h0KTsKIH0KIAogdm9pZCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6
Om1vdmVXaW5kb3dCeShmbG9hdCB4LCBmbG9hdCB5KSBjb25zdAogewotICAgIGlmIChtX2luc3Bl
Y3RvckNvbnRyb2xsZXIpCi0gICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+bW92ZVdpbmRv
d0J5KHgsIHkpOworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPm1vdmVXaW5k
b3dCeSh4LCB5KTsKIH0KIAogU3RyaW5nIEluc3BlY3RvckZyb250ZW5kSG9zdDo6bG9jYWxpemVk
U3RyaW5nc1VSTCgpCkBAIC0xNjEsMzAgKzE2NCw4IEBAIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmRI
b3N0Ojpjb3B5VGV4dChjb25zdCBTdHJpbmcmIHRleHQpCiAKIHZvaWQgSW5zcGVjdG9yRnJvbnRl
bmRIb3N0OjpzaG93Q29udGV4dE1lbnUoRXZlbnQqIGV2ZW50LCBjb25zdCBWZWN0b3I8Q29udGV4
dE1lbnVJdGVtKj4mIGl0ZW1zKQogewotICAgIGlmICghbV9pbnNwZWN0b3JDb250cm9sbGVyKQot
ICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFtX2luc3BlY3RvckNvbnRyb2xsZXItPndpbmRvd1Zp
c2libGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0KLSAgICBtX21lbnVQcm92aWRlciA9IE1lbnVQ
cm92aWRlcjo6Y3JlYXRlKHRoaXMsIGl0ZW1zKTsKLSAgICBDb250ZXh0TWVudUNvbnRyb2xsZXIq
IG1lbnVDb250cm9sbGVyID0gbV9pbnNwZWN0b3JDb250cm9sbGVyLT5tX3BhZ2UtPmNvbnRleHRN
ZW51Q29udHJvbGxlcigpOwotICAgIG1lbnVDb250cm9sbGVyLT5zaG93Q29udGV4dE1lbnUoZXZl
bnQsIG1fbWVudVByb3ZpZGVyKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OmNv
bnRleHRNZW51SXRlbVNlbGVjdGVkKENvbnRleHRNZW51SXRlbSogaXRlbSkKLXsKLSAgICBpZiAo
bV9pbnNwZWN0b3JDb250cm9sbGVyICYmIG1faW5zcGVjdG9yQ29udHJvbGxlci0+d2luZG93Vmlz
aWJsZSgpKSB7Ci0gICAgICAgIGludCBpdGVtTnVtYmVyID0gaXRlbS0+YWN0aW9uKCkgLSBDb250
ZXh0TWVudUl0ZW1CYXNlQ3VzdG9tVGFnOwotICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXIt
Pm1fZnJvbnRlbmQtPmNvbnRleHRNZW51SXRlbVNlbGVjdGVkKGl0ZW1OdW1iZXIpOwotICAgIH0K
LX0KLQotdm9pZCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OmNvbnRleHRNZW51Q2xlYXJlZCgpCi17
Ci0gICAgbV9tZW51UHJvdmlkZXIgPSAwOwotICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIg
JiYgbV9pbnNwZWN0b3JDb250cm9sbGVyLT53aW5kb3dWaXNpYmxlKCkpCi0gICAgICAgIG1faW5z
cGVjdG9yQ29udHJvbGxlci0+bV9mcm9udGVuZC0+Y29udGV4dE1lbnVDbGVhcmVkKCk7CisgICAg
aWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+c2hvd0NvbnRleHRNZW51KGV2ZW50LCBp
dGVtcyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRnJvbnRlbmRIb3N0LmgKaW5kZXggY2JlNmE5Yi4uNmUxNjI5NyAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmgKKysrIGIvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmgKQEAgLTQzLDI3ICs0MywyNSBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDb250ZXh0TWVudUl0ZW07CiBjbGFzcyBFdmVudDsKIGNs
YXNzIEluc3BlY3RvckNsaWVudDsKK2NsYXNzIEluc3BlY3RvckZyb250ZW5kQ2xpZW50OwogY2xh
c3MgTm9kZTsKIAogY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmRIb3N0IDogcHVibGljIFJlZkNvdW50
ZWQ8SW5zcGVjdG9yRnJvbnRlbmRIb3N0PgogewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEluc3BlY3RvckZyb250ZW5kSG9zdD4gY3JlYXRlKEluc3BlY3RvckNvbnRyb2xsZXIqIGlu
c3BlY3RvckNvbnRyb2xsZXIsIEluc3BlY3RvckNsaWVudCogY2xpZW50KQorICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEluc3BlY3RvckZyb250ZW5kSG9zdD4gY3JlYXRlKEluc3BlY3RvckZyb250ZW5k
Q2xpZW50KiBjbGllbnQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3Bl
Y3RvckZyb250ZW5kSG9zdChpbnNwZWN0b3JDb250cm9sbGVyLCBjbGllbnQpKTsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JGcm9udGVuZEhvc3QoY2xpZW50KSk7CiAgICAg
fQogCiAgICAgfkluc3BlY3RvckZyb250ZW5kSG9zdCgpOwogCi0gICAgSW5zcGVjdG9yQ29udHJv
bGxlciogaW5zcGVjdG9yQ29udHJvbGxlcigpIHsgcmV0dXJuIG1faW5zcGVjdG9yQ29udHJvbGxl
cjsgfQotCi0gICAgdm9pZCBkaXNjb25uZWN0Q29udHJvbGxlcigpIHsgbV9pbnNwZWN0b3JDb250
cm9sbGVyID0gMDsgfQotCiAgICAgdm9pZCBsb2FkZWQoKTsKICAgICB2b2lkIGF0dGFjaCgpOwog
ICAgIHZvaWQgZGV0YWNoKCk7CiAgICAgdm9pZCBjbG9zZVdpbmRvdygpOwotICAgIHZvaWQgd2lu
ZG93VW5sb2FkaW5nKCk7CisgICAgdm9pZCBicmluZ1RvRnJvbnQoKTsKKyAgICB2b2lkIGluc3Bl
Y3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJik7CiAKICAgICBib29sIGNhbkF0dGFjaFdpbmRv
dygpIGNvbnN0OwogICAgIHZvaWQgc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVp
Z2h0KTsKQEAgLTgwLDU5ICs3OCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNob3dDb250ZXh0TWVu
dShFdmVudCosIGNvbnN0IFZlY3RvcjxDb250ZXh0TWVudUl0ZW0qPiYgaXRlbXMpOwogCiBwcml2
YXRlOgotICAgIGNsYXNzIE1lbnVQcm92aWRlciA6IHB1YmxpYyBDb250ZXh0TWVudVByb3ZpZGVy
IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lbnVQcm92aWRlcj4g
Y3JlYXRlKEluc3BlY3RvckZyb250ZW5kSG9zdCogZnJvbnRlbmRIb3N0LCBjb25zdCBWZWN0b3I8
Q29udGV4dE1lbnVJdGVtKj4mIGl0ZW1zKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IE1lbnVQcm92aWRlcihmcm9udGVuZEhvc3QsIGl0ZW1zKSk7Ci0gICAgICAg
IH0KLQotICAgICAgICB2aXJ0dWFsIH5NZW51UHJvdmlkZXIoKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBjb250ZXh0TWVudUNsZWFyZWQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgZGlz
Y29ubmVjdCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fZnJvbnRlbmRIb3N0ID0gMDsKLSAg
ICAgICAgfQotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBwb3B1bGF0ZUNvbnRleHRNZW51KENvbnRl
eHRNZW51KiBtZW51KQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG1faXRlbXMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICAgICAgbWVudS0+YXBwZW5kSXRl
bSgqbV9pdGVtc1tpXSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2aXJ0dWFsIHZvaWQgY29udGV4
dE1lbnVJdGVtU2VsZWN0ZWQoQ29udGV4dE1lbnVJdGVtKiBpdGVtKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBpZiAobV9mcm9udGVuZEhvc3QpCi0gICAgICAgICAgICAgICAgbV9mcm9udGVuZEhv
c3QtPmNvbnRleHRNZW51SXRlbVNlbGVjdGVkKGl0ZW0pOwotICAgICAgICB9Ci0KLSAgICAgICAg
dmlydHVhbCB2b2lkIGNvbnRleHRNZW51Q2xlYXJlZCgpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGlmIChtX2Zyb250ZW5kSG9zdCkKLSAgICAgICAgICAgICAgICBtX2Zyb250ZW5kSG9zdC0+Y29u
dGV4dE1lbnVDbGVhcmVkKCk7Ci0gICAgICAgICAgICBkZWxldGVBbGxWYWx1ZXMobV9pdGVtcyk7
Ci0gICAgICAgICAgICBtX2l0ZW1zLmNsZWFyKCk7Ci0gICAgICAgIH0KLQotICAgIHByaXZhdGU6
Ci0gICAgICAgIE1lbnVQcm92aWRlcihJbnNwZWN0b3JGcm9udGVuZEhvc3QqIGZyb250ZW5kSG9z
dCwgIGNvbnN0IFZlY3RvcjxDb250ZXh0TWVudUl0ZW0qPiYgaXRlbXMpCi0gICAgICAgICAgICA6
IG1fZnJvbnRlbmRIb3N0KGZyb250ZW5kSG9zdCkKLSAgICAgICAgICAgICwgbV9pdGVtcyhpdGVt
cykgeyB9Ci0gICAgICAgIEluc3BlY3RvckZyb250ZW5kSG9zdCogbV9mcm9udGVuZEhvc3Q7Ci0g
ICAgICAgIFZlY3RvcjxDb250ZXh0TWVudUl0ZW0qPiBtX2l0ZW1zOwotICAgIH07Ci0KLSAgICBJ
bnNwZWN0b3JGcm9udGVuZEhvc3QoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJv
bGxlciwgSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQpOwotCi0gICAgdm9pZCBjb250ZXh0TWVudUl0
ZW1TZWxlY3RlZChDb250ZXh0TWVudUl0ZW0qKTsKLSAgICB2b2lkIGNvbnRleHRNZW51Q2xlYXJl
ZCgpOwotCi0gICAgSW5zcGVjdG9yQ29udHJvbGxlciogbV9pbnNwZWN0b3JDb250cm9sbGVyOwot
ICAgIEluc3BlY3RvckNsaWVudCogbV9jbGllbnQ7Ci0gICAgUmVmUHRyPE1lbnVQcm92aWRlcj4g
bV9tZW51UHJvdmlkZXI7CisgICAgSW5zcGVjdG9yRnJvbnRlbmRIb3N0KEluc3BlY3RvckZyb250
ZW5kQ2xpZW50KiBjbGllbnQpOworCisgICAgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQqIG1fY2xp
ZW50OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmlkbCBiL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckZyb250ZW5kSG9zdC5pZGwKaW5kZXggMTUwZTlmYy4uMGFlZjVjNCAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmlkbAorKysgYi9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuaWRsCkBAIC0zNiw3ICszNiw4IEBA
IG1vZHVsZSBjb3JlIHsKICAgICAgICAgdm9pZCBhdHRhY2goKTsKICAgICAgICAgdm9pZCBkZXRh
Y2goKTsKICAgICAgICAgdm9pZCBjbG9zZVdpbmRvdygpOwotICAgICAgICB2b2lkIHdpbmRvd1Vu
bG9hZGluZygpOworICAgICAgICB2b2lkIGJyaW5nVG9Gcm9udCgpOworICAgICAgICB2b2lkIGlu
c3BlY3RlZFVSTENoYW5nZWQoaW4gRE9NU3RyaW5nIG5ld1VSTCk7CiAKICAgICAgICAgYm9vbGVh
biBjYW5BdHRhY2hXaW5kb3coKTsKICAgICAgICAgdm9pZCBzZXRBdHRhY2hlZFdpbmRvd0hlaWdo
dChpbiB1bnNpZ25lZCBsb25nIGhlaWdodCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvSW5zcGVjdG9yRnJvbnRlbmRIb3N0U3R1Yi5qcyBiL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9JbnNwZWN0b3JGcm9udGVuZEhvc3RTdHViLmpzCmluZGV4IGVmZjI1MTgu
LjU0NTYwNjkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0
b3JGcm9udGVuZEhvc3RTdHViLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9J
bnNwZWN0b3JGcm9udGVuZEhvc3RTdHViLmpzCkBAIC00OCw2ICs0OCwxMSBAQCBXZWJJbnNwZWN0
b3IuSW5zcGVjdG9yRnJvbnRlbmRIb3N0U3R1Yi5wcm90b3R5cGUgPSB7CiAgICAgICAgIHJldHVy
biAidW5rbm93biI7CiAgICAgfSwKIAorICAgIGJyaW5nVG9Gcm9udDogZnVuY3Rpb24oKQorICAg
IHsKKyAgICAgICAgdGhpcy5fd2luZG93VmlzaWJsZSA9IHRydWU7CisgICAgfSwKKwogICAgIGNs
b3NlV2luZG93OiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICB0aGlzLl93aW5kb3dWaXNpYmxl
ID0gZmFsc2U7CkBAIC04Nyw3ICs5Miw3IEBAIFdlYkluc3BlY3Rvci5JbnNwZWN0b3JGcm9udGVu
ZEhvc3RTdHViLnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJuICIiOwogICAgIH0sCiAKLSAg
ICB3aW5kb3dVbmxvYWRpbmc6IGZ1bmN0aW9uKCkKKyAgICBpbnNwZWN0ZWRVUkxDaGFuZ2VkOiBm
dW5jdGlvbih1cmwpCiAgICAgewogICAgIH0sCiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
aW5zcGVjdG9yLmpzCmluZGV4IDY4NTk4NjEuLjE3YWJiYzMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL2luc3BlY3Rvci5qcwpAQCAtNDc4LDcgKzQ3OCw2IEBAIFdlYkluc3BlY3Rvci5s
b2FkZWQgPSBmdW5jdGlvbigpCiAKICAgICB0aGlzLmFkZE1haW5FdmVudExpc3RlbmVycyhkb2N1
bWVudCk7CiAKLSAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigidW5sb2FkIiwgdGhpcy53aW5k
b3dVbmxvYWQuYmluZCh0aGlzKSwgdHJ1ZSk7CiAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIo
InJlc2l6ZSIsIHRoaXMud2luZG93UmVzaXplLmJpbmQodGhpcyksIHRydWUpOwogCiAgICAgZG9j
dW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLCB0aGlzLmZvY3VzQ2hhbmdlZC5iaW5kKHRo
aXMpLCB0cnVlKTsKQEAgLTU2MiwxMSArNTYxLDYgQEAgV2ViSW5zcGVjdG9yLmRpc3BhdGNoID0g
ZnVuY3Rpb24oKSB7CiAgICAgc2V0VGltZW91dChkZWxheURpc3BhdGNoLCAwKTsKIH0KIAotV2Vi
SW5zcGVjdG9yLndpbmRvd1VubG9hZCA9IGZ1bmN0aW9uKGV2ZW50KQotewotICAgIEluc3BlY3Rv
ckZyb250ZW5kSG9zdC53aW5kb3dVbmxvYWRpbmcoKTsKLX0KLQogV2ViSW5zcGVjdG9yLndpbmRv
d1Jlc2l6ZSA9IGZ1bmN0aW9uKGV2ZW50KQogewogICAgIGlmICh0aGlzLmN1cnJlbnRQYW5lbCkK
QEAgLTYwNCw2ICs1OTgsOSBAQCBXZWJJbnNwZWN0b3Iuc2V0QXR0YWNoZWRXaW5kb3cgPSBmdW5j
dGlvbihhdHRhY2hlZCkKIAogV2ViSW5zcGVjdG9yLmNsb3NlID0gZnVuY3Rpb24oZXZlbnQpCiB7
CisgICAgaWYgKHRoaXMuX2lzQ2xvc2luZykKKyAgICAgICAgcmV0dXJuOworICAgIHRoaXMuX2lz
Q2xvc2luZyA9IHRydWU7CiAgICAgSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNsb3NlV2luZG93KCk7
CiB9CiAKQEAgLTEzMTAsNiArMTMwNywxNiBAQCBXZWJJbnNwZWN0b3IucmVzZXQgPSBmdW5jdGlv
bigpCiAgICAgdGhpcy5jb25zb2xlLmNsZWFyTWVzc2FnZXMoKTsKIH0KIAorV2ViSW5zcGVjdG9y
LmJyaW5nVG9Gcm9udCA9IGZ1bmN0aW9uKCkKK3sKKyAgICBJbnNwZWN0b3JGcm9udGVuZEhvc3Qu
YnJpbmdUb0Zyb250KCk7Cit9CisKK1dlYkluc3BlY3Rvci5pbnNwZWN0ZWRVUkxDaGFuZ2VkID0g
ZnVuY3Rpb24odXJsKQoreworICAgIEluc3BlY3RvckZyb250ZW5kSG9zdC5pbnNwZWN0ZWRVUkxD
aGFuZ2VkKHVybCk7Cit9CisKIFdlYkluc3BlY3Rvci5yZXNvdXJjZVVSTENoYW5nZWQgPSBmdW5j
dGlvbihyZXNvdXJjZSwgb2xkVVJMKQogewogICAgIGRlbGV0ZSB0aGlzLnJlc291cmNlVVJMTWFw
W29sZFVSTF07CmRpZmYgLS1naXQgYS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaCBiL1dl
YkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCmluZGV4IDZhMmVjZDUuLmQwMjU4OTEgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCisrKyBiL1dlYkNvcmUvbG9hZGVy
L0VtcHR5Q2xpZW50cy5oCkBAIC00NzIsMjkgKzQ3MiwxNCBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB+RW1wdHlJbnNwZWN0b3JDbGllbnQoKSB7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0
b3JEZXN0cm95ZWQoKSB7IH0KLQotICAgIHZpcnR1YWwgUGFnZSogY3JlYXRlUGFnZSgpIHsgcmV0
dXJuIDA7IH07Ci0KLSAgICB2aXJ0dWFsIFN0cmluZyBsb2NhbGl6ZWRTdHJpbmdzVVJMKCkgeyBy
ZXR1cm4gU3RyaW5nKCk7IH0KLQotICAgIHZpcnR1YWwgU3RyaW5nIGhpZGRlblBhbmVscygpIHsg
cmV0dXJuIFN0cmluZygpOyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2hvd1dpbmRvdygpIHsgfQot
ICAgIHZpcnR1YWwgdm9pZCBjbG9zZVdpbmRvdygpIHsgfQotCi0gICAgdmlydHVhbCB2b2lkIGF0
dGFjaFdpbmRvdygpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hXaW5kb3coKSB7IH0KLQot
ICAgIHZpcnR1YWwgdm9pZCBzZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCkgeyB9Cisg
ICAgCisgICAgdmlydHVhbCB2b2lkIG9wZW5JbnNwZWN0b3JGcm9udGVuZChJbnNwZWN0b3JDb250
cm9sbGVyKikgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgaGlnaGxpZ2h0KE5vZGUqKSB7IH0KICAg
ICB2aXJ0dWFsIHZvaWQgaGlkZUhpZ2hsaWdodCgpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBpbnNw
ZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYpIHsgfQogCiAgICAgdmlydHVhbCB2b2lkIHBv
cHVsYXRlU2V0dGluZyhjb25zdCBTdHJpbmcmLCBTdHJpbmcqKSB7IH0KICAgICB2aXJ0dWFsIHZv
aWQgc3RvcmVTZXR0aW5nKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpIHsgfQotCi0gICAg
dmlydHVhbCB2b2lkIGluc3BlY3RvcldpbmRvd09iamVjdENsZWFyZWQoKSB7IH0KIH07CiAKIH0K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcCBiL1dlYkNvcmUvbG9h
ZGVyL0ZyYW1lTG9hZGVyLmNwcAppbmRleCA1NGM3OTcyLi5lMTBiNThmIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKKysrIGIvV2ViQ29yZS9sb2FkZXIvRnJhbWVM
b2FkZXIuY3BwCkBAIC0zOTQ0LDggKzM5NDQsNiBAQCB2b2lkIEZyYW1lTG9hZGVyOjpkaXNwYXRj
aERpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZChET01XcmFwcGVyV29ybGQqIHdvcmxkKQogICAg
IGlmIChQYWdlKiBwYWdlID0gbV9mcmFtZS0+cGFnZSgpKSB7CiAgICAgICAgIGlmIChJbnNwZWN0
b3JDb250cm9sbGVyKiBpbnNwZWN0b3IgPSBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCkpCiAg
ICAgICAgICAgICBpbnNwZWN0b3ItPmluc3BlY3RlZFdpbmRvd1NjcmlwdE9iamVjdENsZWFyZWQo
bV9mcmFtZSk7Ci0gICAgICAgIGlmIChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3IgPSBw
YWdlLT5wYXJlbnRJbnNwZWN0b3JDb250cm9sbGVyKCkpCi0gICAgICAgICAgICBpbnNwZWN0b3It
PndpbmRvd1NjcmlwdE9iamVjdEF2YWlsYWJsZSgpOwogICAgIH0KICNlbmRpZgogfQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwIGIvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCmluZGV4
IDdkMWU2MjQuLmQ2NmU0OTcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAorKysg
Yi9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKQEAgLTEzOCw5ICsxMzgsNiBAQCBQYWdlOjpQYWdlKENo
cm9tZUNsaWVudCogY2hyb21lQ2xpZW50LCBDb250ZXh0TWVudUNsaWVudCogY29udGV4dE1lbnVD
bGllbnQsIEVkaQogICAgICwgbV9hcmVNZW1vcnlDYWNoZUNsaWVudENhbGxzRW5hYmxlZCh0cnVl
KQogICAgICwgbV9tZWRpYVZvbHVtZSgxKQogICAgICwgbV9qYXZhU2NyaXB0VVJMc0FyZUFsbG93
ZWQodHJ1ZSkKLSNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgICwgbV9wYXJlbnRJbnNwZWN0b3JD
b250cm9sbGVyKDApCi0jZW5kaWYKICAgICAsIG1fZGlkTG9hZFVzZXJTdHlsZVNoZWV0KGZhbHNl
KQogICAgICwgbV91c2VyU3R5bGVTaGVldE1vZGlmaWNhdGlvblRpbWUoMCkKICAgICAsIG1fZ3Jv
dXAoMCkKQEAgLTE5Niw4ICsxOTMsNiBAQCBQYWdlOjp+UGFnZSgpCiAKICAgICBtX2VkaXRvckNs
aWVudC0+cGFnZURlc3Ryb3llZCgpOwogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKG1f
cGFyZW50SW5zcGVjdG9yQ29udHJvbGxlcikKLSAgICAgICAgbV9wYXJlbnRJbnNwZWN0b3JDb250
cm9sbGVyLT5wYWdlRGVzdHJveWVkKCk7CiAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNw
ZWN0ZWRQYWdlRGVzdHJveWVkKCk7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdl
L1BhZ2UuaCBiL1dlYkNvcmUvcGFnZS9QYWdlLmgKaW5kZXggZjY5ODI4Ny4uOTRlNmRkNSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9wYWdlL1BhZ2UuaAorKysgYi9XZWJDb3JlL3BhZ2UvUGFnZS5oCkBA
IC0xNDksMTEgKzE0OSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNlbmRpZgogICAgICAgICBT
ZXR0aW5ncyogc2V0dGluZ3MoKSBjb25zdCB7IHJldHVybiBtX3NldHRpbmdzLmdldCgpOyB9CiAg
ICAgICAgIFByb2dyZXNzVHJhY2tlciogcHJvZ3Jlc3MoKSBjb25zdCB7IHJldHVybiBtX3Byb2dy
ZXNzLmdldCgpOyB9Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgICAgICB2b2lkIHNldFBh
cmVudEluc3BlY3RvckNvbnRyb2xsZXIoSW5zcGVjdG9yQ29udHJvbGxlciogY29udHJvbGxlcikg
eyBtX3BhcmVudEluc3BlY3RvckNvbnRyb2xsZXIgPSBjb250cm9sbGVyOyB9Ci0gICAgICAgIElu
c3BlY3RvckNvbnRyb2xsZXIqIHBhcmVudEluc3BlY3RvckNvbnRyb2xsZXIoKSBjb25zdCB7IHJl
dHVybiBtX3BhcmVudEluc3BlY3RvckNvbnRyb2xsZXI7IH0KLSNlbmRpZgogICAgICAgICAKICAg
ICAgICAgdm9pZCBzZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMoYm9vbCBiKSB7IG1fdGFi
S2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzID0gYjsgfQogICAgICAgICBib29sIHRhYktleUN5Y2xl
c1Rocm91Z2hFbGVtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fdGFiS2V5Q3ljbGVzVGhyb3VnaEVs
ZW1lbnRzOyB9CkBAIC0yODYsMTAgKzI4MSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAg
ICAgICBib29sIG1famF2YVNjcmlwdFVSTHNBcmVBbGxvd2VkOwogCi0jaWYgRU5BQkxFKElOU1BF
Q1RPUikKLSAgICAgICAgSW5zcGVjdG9yQ29udHJvbGxlciogbV9wYXJlbnRJbnNwZWN0b3JDb250
cm9sbGVyOwotI2VuZGlmCi0KICAgICAgICAgU3RyaW5nIG1fdXNlclN0eWxlU2hlZXRQYXRoOwog
ICAgICAgICBtdXRhYmxlIFN0cmluZyBtX3VzZXJTdHlsZVNoZWV0OwogICAgICAgICBtdXRhYmxl
IGJvb2wgbV9kaWRMb2FkVXNlclN0eWxlU2hlZXQ7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRm
b3JtL0NvbnRleHRNZW51LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1lbnUuY3BwCmlu
ZGV4IDI4M2FhNTYuLjAwMjJhNDcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vQ29udGV4
dE1lbnUuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1lbnUuY3BwCkBAIC0zNTks
NiArMzU5LDkgQEAgdm9pZCBDb250ZXh0TWVudTo6cG9wdWxhdGUoKQogICAgICAgICAgICAgICAg
IGFwcGVuZEl0ZW0oU3BlZWNoTWVudUl0ZW0pOwogI2VuZGlmICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgfSBlbHNlIHsKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorICAgICAgICAgICAgICAg
IGlmICghKGZyYW1lLT5wYWdlKCkgJiYgZnJhbWUtPnBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxl
cigpLT5oYXNJbnNwZWN0b3JGcm9udGVuZENsaWVudCgpKSkgeworI2VuZGlmCiAjaWYgUExBVEZP
Uk0oR1RLKQogICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oQmFja0l0ZW0pOwogICAgICAgICAg
ICAgICAgIGFwcGVuZEl0ZW0oRm9yd2FyZEl0ZW0pOwpAQCAtMzc4LDYgKzM4MSw5IEBAIHZvaWQg
Q29udGV4dE1lbnU6OnBvcHVsYXRlKCkKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAg
ICAgICAgICAgIGFwcGVuZEl0ZW0oUmVsb2FkSXRlbSk7CiAjZW5kaWYKKyNpZiBFTkFCTEUoSU5T
UEVDVE9SKQorICAgICAgICAgICAgICAgIH0KKyNlbmRpZgogCiAgICAgICAgICAgICAgICAgaWYg
KGZyYW1lLT5wYWdlKCkgJiYgZnJhbWUgIT0gZnJhbWUtPnBhZ2UoKS0+bWFpbkZyYW1lKCkpCiAg
ICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oT3BlbkZyYW1lSXRlbSk7CkBAIC01NTAsNyAr
NTU2LDYgQEAgdm9pZCBDb250ZXh0TWVudTo6YWRkSW5zcGVjdEVsZW1lbnRJdGVtKCkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgQ29udGV4dE1lbnVJdGVtIEluc3BlY3RFbGVtZW50SXRlbShBY3Rp
b25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdJbnNwZWN0RWxlbWVudCwgY29udGV4dE1lbnVJdGVt
VGFnSW5zcGVjdEVsZW1lbnQoKSk7Ci0gICAgYXBwZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgpKTsK
ICAgICBhcHBlbmRJdGVtKEluc3BlY3RFbGVtZW50SXRlbSk7CiB9CiAjZW5kaWYgLy8gRU5BQkxF
KElOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDdjNWVkYWEuLjJlOWM4ZjcgMTAwNjQ0Ci0tLSBh
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDI5IEBACisyMDEwLTAzLTEwICBZdXJ5IFNlbWlraGF0c2t5IDx5dXJ5c0Bj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgSW50cm9kdWNlIEluc3BlY3RvckZyb250ZW5kQ2xpZW50IHRoYXQgcHJvdmlkZXMgSW5z
cGVjdG9yRnJvbnRlbmQgd2l0aCBhbiBpbnRlcmZhY2UgdG8gdGhlIGVtYmVkZGVyLiBJbnNwZWN0
b3JDbGllbnQgbm93IHNlcnZlcyBhcyBhIGRlbGVnYXRlIGZvciBJbnNwZWN0b3JDb250cm9sbGVy
IGFuZCBkb2VzIG5vdCBjb250YWluIG1ldGhvZHMgZm9yIG1hbmFnaW5nIGluc3BlY3RvciBmcm9u
dGVuZCB3aW5kb3cuIFRoYXQgYWxsb3dzIHRvIGNyZWF0ZSByZW1vdGUgSW5zcGVjdG9yRnJvbnRl
bmRIb3N0LgorCisgICAgICAgIEludHJvZHVjZSBJbnNwZWN0b3JGcm9udGVuZENsaWVudCB0aGF0
IHdvdWxkIHByb3ZpZGUgSW5zcGVjdG9yRnJvbnRlbmQgd2l0aCBhbiBpbnRlcmZhY2UgdG8gdGhl
IGVtYmVkZGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0zNTAzNgorCisgICAgICAgICogc3JjL0luc3BlY3RvckNsaWVudEltcGwuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpJbnNwZWN0b3JDbGllbnRJbXBsOjpvcGVuSW5zcGVjdG9yRnJvbnRlbmQpOgor
ICAgICAgICAqIHNyYy9JbnNwZWN0b3JDbGllbnRJbXBsLmg6CisgICAgICAgICogc3JjL1dlYkRl
dlRvb2xzQWdlbnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudElt
cGw6OmF0dGFjaCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjpkaWRD
b21taXRQcm92aXNpb25hbExvYWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50
SW1wbDo6Y3JlYXRlSW5zcGVjdG9yRnJvbnRlbmRQcm94eSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkRldlRvb2xzQWdlbnRJbXBsOjpzZXRJbnNwZWN0b3JGcm9udGVuZFByb3h5VG9JbnNwZWN0b3JD
b250cm9sbGVyKToKKyAgICAgICAgKiBzcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuaDoKKyAgICAg
ICAgKiBzcmMvV2ViRGV2VG9vbHNGcm9udGVuZEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6V2ViRGV2VG9vbHNGcm9udGVuZEltcGwpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6anNCcmluZ1RvRnJvbnQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6anNJbnNwZWN0ZWRVUkxDaGFu
Z2VkKToKKyAgICAgICAgKiBzcmMvV2ViRGV2VG9vbHNGcm9udGVuZEltcGwuaDoKKyAgICAgICAg
KiBzcmMvanMvSW5qZWN0RGlzcGF0Y2guanM6CisgICAgICAgIChjbG9zZSk6CisKIDIwMTAtMDMt
MTAgIEdhcnJldCBLZWxseSAgPGdka0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgRGFyaW4gRmlzaGVyLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9JbnNwZWN0
b3JDbGllbnRJbXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvSW5zcGVjdG9yQ2xpZW50SW1w
bC5jcHAKaW5kZXggNTQ1NTBkMS4uZjY5ZWY3MiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVt
L3NyYy9JbnNwZWN0b3JDbGllbnRJbXBsLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0lu
c3BlY3RvckNsaWVudEltcGwuY3BwCkBAIC02Myw0NiArNjMsOCBAQCB2b2lkIEluc3BlY3RvckNs
aWVudEltcGw6Omluc3BlY3RvckRlc3Ryb3llZCgpCiAgICAgLy8gT3VyIGxpZmV0aW1lIGlzIGJv
dW5kIHRvIHRoZSBXZWJWaWV3SW1wbC4KIH0KIAotUGFnZSogSW5zcGVjdG9yQ2xpZW50SW1wbDo6
Y3JlYXRlUGFnZSgpCit2b2lkIEluc3BlY3RvckNsaWVudEltcGw6Om9wZW5JbnNwZWN0b3JGcm9u
dGVuZChJbnNwZWN0b3JDb250cm9sbGVyKikKIHsKLSAgICAvLyBUaGlzIG1ldGhvZCBzaG91bGQg
bmV2ZXIgYmUgY2FsbGVkIGluIENocm9tZSBhcyBpbnNwZWN0b3IgZnJvbnQtZW5kIGxpdmVzCi0g
ICAgLy8gaW4gYSBzZXBhcmF0ZSBwcm9jZXNzLgotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgIHJldHVybiAwOwotfQotCi12b2lkIEluc3BlY3RvckNsaWVudEltcGw6OnNob3dXaW5kb3co
KQotewotICAgIEFTU0VSVChtX2luc3BlY3RlZFdlYlZpZXctPmRldlRvb2xzQWdlbnRQcml2YXRl
KCkpOwotICAgIG1faW5zcGVjdGVkV2ViVmlldy0+cGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVy
KCktPnNldFdpbmRvd1Zpc2libGUodHJ1ZSk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ2xpZW50SW1w
bDo6Y2xvc2VXaW5kb3coKQotewotICAgIGlmIChtX2luc3BlY3RlZFdlYlZpZXctPnBhZ2UoKSkK
LSAgICAgICAgbV9pbnNwZWN0ZWRXZWJWaWV3LT5wYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIo
KS0+c2V0V2luZG93VmlzaWJsZShmYWxzZSk7Ci19Ci0KLWJvb2wgSW5zcGVjdG9yQ2xpZW50SW1w
bDo6d2luZG93VmlzaWJsZSgpCi17Ci0gICAgQVNTRVJUKG1faW5zcGVjdGVkV2ViVmlldy0+ZGV2
VG9vbHNBZ2VudFByaXZhdGUoKSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEluc3Bl
Y3RvckNsaWVudEltcGw6OmF0dGFjaFdpbmRvdygpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVu
dCB0aGlzCi19Ci0KLXZvaWQgSW5zcGVjdG9yQ2xpZW50SW1wbDo6ZGV0YWNoV2luZG93KCkKLXsK
LSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMKLX0KLQotdm9pZCBJbnNwZWN0b3JDbGllbnRJ
bXBsOjpzZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBpbnQgaGVpZ2h0KQotewotICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcwotICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKIHN0
YXRpYyB2b2lkIGludmFsaWRhdGVOb2RlQm91bmRpbmdSZWN0KFdlYlZpZXdJbXBsKiB3ZWJWaWV3
KQpAQCAtMTMwLDIzICs5Miw2IEBAIHZvaWQgSW5zcGVjdG9yQ2xpZW50SW1wbDo6aGlkZUhpZ2hs
aWdodCgpCiAgICAgaW52YWxpZGF0ZU5vZGVCb3VuZGluZ1JlY3QobV9pbnNwZWN0ZWRXZWJWaWV3
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDbGllbnRJbXBsOjppbnNwZWN0ZWRVUkxDaGFuZ2VkKGNv
bnN0IFN0cmluZyYgbmV3VVJMKQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcwotfQot
Ci1TdHJpbmcgSW5zcGVjdG9yQ2xpZW50SW1wbDo6bG9jYWxpemVkU3RyaW5nc1VSTCgpCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBJ
bnNwZWN0b3JDbGllbnRJbXBsOjpoaWRkZW5QYW5lbHMoKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgcmV0dXJuICIiOwotfQotCiB2b2lkIEluc3BlY3RvckNsaWVudEltcGw6OnBvcHVs
YXRlU2V0dGluZyhjb25zdCBTdHJpbmcmIGtleSwgU3RyaW5nKiB2YWx1ZSkKIHsKICAgICBsb2Fk
U2V0dGluZ3MoKTsKQEAgLTE2MSwxMSArMTA2LDYgQEAgdm9pZCBJbnNwZWN0b3JDbGllbnRJbXBs
OjpzdG9yZVNldHRpbmcoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpCiAg
ICAgc2F2ZVNldHRpbmdzKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ2xpZW50SW1wbDo6aW5zcGVj
dG9yV2luZG93T2JqZWN0Q2xlYXJlZCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQog
dm9pZCBJbnNwZWN0b3JDbGllbnRJbXBsOjpsb2FkU2V0dGluZ3MoKQogewogICAgIGlmIChtX3Nl
dHRpbmdzKQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9JbnNwZWN0b3JDbGllbnRJ
bXBsLmggYi9XZWJLaXQvY2hyb21pdW0vc3JjL0luc3BlY3RvckNsaWVudEltcGwuaAppbmRleCA2
ZjdmOGIxLi5jY2JjZWY3IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL0luc3BlY3Rv
ckNsaWVudEltcGwuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0luc3BlY3RvckNsaWVudElt
cGwuaApAQCAtNDUsMjUgKzQ1LDE1IEBAIHB1YmxpYzoKIAogICAgIC8vIEluc3BlY3RvckNsaWVu
dCBtZXRob2RzOgogICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0b3JEZXN0cm95ZWQoKTsKLSAgICB2
aXJ0dWFsIFdlYkNvcmU6OlBhZ2UqIGNyZWF0ZVBhZ2UoKTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6
OlN0cmluZyBsb2NhbGl6ZWRTdHJpbmdzVVJMKCk7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpTdHJp
bmcgaGlkZGVuUGFuZWxzKCk7Ci0gICAgdmlydHVhbCB2b2lkIHNob3dXaW5kb3coKTsKLSAgICB2
aXJ0dWFsIHZvaWQgY2xvc2VXaW5kb3coKTsKLSAgICB2aXJ0dWFsIGJvb2wgd2luZG93VmlzaWJs
ZSgpOwotICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hXaW5kb3coKTsKLSAgICB2aXJ0dWFsIHZvaWQg
ZGV0YWNoV2luZG93KCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldEF0dGFjaGVkV2luZG93SGVpZ2h0
KHVuc2lnbmVkIGhlaWdodCk7CisgICAgdmlydHVhbCB2b2lkIG9wZW5JbnNwZWN0b3JGcm9udGVu
ZChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyKik7CiAgICAgdmlydHVhbCB2b2lkIGhpZ2hs
aWdodChXZWJDb3JlOjpOb2RlKik7CiAgICAgdmlydHVhbCB2b2lkIGhpZGVIaWdobGlnaHQoKTsK
LSAgICB2aXJ0dWFsIHZvaWQgaW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpTdHJp
bmcmIG5ld1VSTCk7CiAgICAgdmlydHVhbCB2b2lkIHBvcHVsYXRlU2V0dGluZygKICAgICAgICAg
Y29uc3QgV2ViQ29yZTo6U3RyaW5nJiBrZXksCiAgICAgICAgIFdlYkNvcmU6OlN0cmluZyogdmFs
dWUpOwogICAgIHZpcnR1YWwgdm9pZCBzdG9yZVNldHRpbmcoCiAgICAgICAgIGNvbnN0IFdlYkNv
cmU6OlN0cmluZyYga2V5LAogICAgICAgICBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIHZhbHVlKTsK
LSAgICB2aXJ0dWFsIHZvaWQgaW5zcGVjdG9yV2luZG93T2JqZWN0Q2xlYXJlZCgpOwogCiBwcml2
YXRlOgogICAgIHZvaWQgbG9hZFNldHRpbmdzKCk7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkRldlRvb2xzQWdlbnRJbXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
RGV2VG9vbHNBZ2VudEltcGwuY3BwCmluZGV4IDIwYzNjNzUuLmE3YWI3YTQgMTAwNjQ0Ci0tLSBh
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuY3BwCisrKyBiL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuY3BwCkBAIC0xNjksNyArMTY5LDcg
QEAgdm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6YXR0YWNoKCkKICAgICAgICAgbmV3IERlYnVn
Z2VyQWdlbnRJbXBsKG1fd2ViVmlld0ltcGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2RlYnVnZ2VyQWdlbnREZWxlZ2F0ZVN0dWIuZ2V0KCksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0aGlzKSk7Ci0gICAgcmVzZXRJbnNwZWN0b3JGcm9udGVuZFByb3h5KCk7Cisg
ICAgY3JlYXRlSW5zcGVjdG9yRnJvbnRlbmRQcm94eSgpOwogCiAgICAgLy8gQWxsb3cgY29udHJv
bGxlciB0byBzZW5kIG1lc3NhZ2VzIHRvIHRoZSBmcm9udGVuZC4KICAgICBJbnNwZWN0b3JDb250
cm9sbGVyKiBpYyA9IGluc3BlY3RvckNvbnRyb2xsZXIoKTsKQEAgLTE4NSw3ICsxODUsNyBAQCB2
b2lkIFdlYkRldlRvb2xzQWdlbnRJbXBsOjphdHRhY2goKQogICAgICAgICB9CiAgICAgfQogCi0g
ICAgaWMtPnNldFdpbmRvd1Zpc2libGUodHJ1ZSwgZmFsc2UpOworICAgIHNldEluc3BlY3RvckZy
b250ZW5kUHJveHlUb0luc3BlY3RvckNvbnRyb2xsZXIoKTsKICAgICBtX2F0dGFjaGVkID0gdHJ1
ZTsKIH0KIApAQCAtMjE2LDcgKzIxNiw2IEBAIHZvaWQgV2ViRGV2VG9vbHNBZ2VudEltcGw6OmRp
ZENvbW1pdFByb3Zpc2lvbmFsTG9hZChXZWJGcmFtZUltcGwqIHdlYmZyYW1lLCBib29sCiAgICAg
ICAgIGRzLT51bnJlYWNoYWJsZVVSTCgpIDoKICAgICAgICAgcmVxdWVzdC51cmwoKTsKICAgICBp
ZiAoIXdlYmZyYW1lLT5wYXJlbnQoKSkgewotICAgICAgICByZXNldEluc3BlY3RvckZyb250ZW5k
UHJveHkoKTsKICAgICAgICAgbV90b29sc0FnZW50RGVsZWdhdGVTdHViLT5mcmFtZU5hdmlnYXRl
KFdlYkNvcmU6OktVUkwodXJsKS5zdHJpbmcoKSk7CiAgICAgICAgIFNldEFwdUFnZW50RW5hYmxl
ZEluVXRpbGl0eUNvbnRleHQobV91dGlsaXR5Q29udGV4dCwgbV9hcHVBZ2VudEVuYWJsZWQpOwog
ICAgIH0KQEAgLTM1OCw3ICszNTcsNyBAQCB2ODo6TG9jYWw8djg6Ok9iamVjdD4gV2ViRGV2VG9v
bHNBZ2VudEltcGw6OmNyZWF0ZUluc3BlY3RvckJhY2tlbmRWOFdyYXBwZXIoKQogICAgIHJldHVy
biBpbnN0YW5jZTsKIH0KIAotdm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6cmVzZXRJbnNwZWN0
b3JGcm9udGVuZFByb3h5KCkKK3ZvaWQgV2ViRGV2VG9vbHNBZ2VudEltcGw6OmNyZWF0ZUluc3Bl
Y3RvckZyb250ZW5kUHJveHkoKQogewogICAgIGRpc3Bvc2VVdGlsaXR5Q29udGV4dCgpOwogICAg
IG1fdXRpbGl0eUNvbnRleHQgPSB2ODo6Q29udGV4dDo6TmV3KCk7CkBAIC0zNjksOCArMzY4LDE2
IEBAIHZvaWQgV2ViRGV2VG9vbHNBZ2VudEltcGw6OnJlc2V0SW5zcGVjdG9yRnJvbnRlbmRQcm94
eSgpCiAgICAgdjg6OkNvbnRleHQ6OlNjb3BlIGNvbnRleHRTY29wZShtX3V0aWxpdHlDb250ZXh0
KTsKICAgICBTY3JpcHRTdGF0ZSogc3RhdGUgPSBTY3JpcHRTdGF0ZTo6Zm9yQ29udGV4dCgKICAg
ICAgICAgdjg6OkxvY2FsPHY4OjpDb250ZXh0Pjo6TmV3KG1fdXRpbGl0eUNvbnRleHQpKTsKK30K
Kwordm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6c2V0SW5zcGVjdG9yRnJvbnRlbmRQcm94eVRv
SW5zcGVjdG9yQ29udHJvbGxlcigpCit7CisgICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOworICAg
IFNjcmlwdFN0YXRlKiBzdGF0ZSA9IFNjcmlwdFN0YXRlOjpmb3JDb250ZXh0KAorICAgICAgICB2
ODo6TG9jYWw8djg6OkNvbnRleHQ+OjpOZXcobV91dGlsaXR5Q29udGV4dCkpOwogICAgIEluc3Bl
Y3RvckNvbnRyb2xsZXIqIGljID0gaW5zcGVjdG9yQ29udHJvbGxlcigpOwotICAgIGljLT5zZXRG
cm9udGVuZFByb3h5T2JqZWN0KHN0YXRlLCBTY3JpcHRPYmplY3Qoc3RhdGUsIG1fdXRpbGl0eUNv
bnRleHQtPkdsb2JhbCgpKSk7CisgICAgaWMtPnNldEZyb250ZW5kKG5ldyBJbnNwZWN0b3JGcm9u
dGVuZCgKKyAgICAgICAgU2NyaXB0T2JqZWN0KHN0YXRlLCBtX3V0aWxpdHlDb250ZXh0LT5HbG9i
YWwoKSkpKTsKIH0KIAogdm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6c2V0QXB1QWdlbnRFbmFi
bGVkKGJvb2wgZW5hYmxlZCkKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2
VG9vbHNBZ2VudEltcGwuaCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudElt
cGwuaAppbmRleCAyMDdiYWRhLi40NTVkY2VmIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkRldlRvb2xzQWdlbnRJbXBsLmgKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJE
ZXZUb29sc0FnZW50SW1wbC5oCkBAIC0xMDksNyArMTA5LDggQEAgcHJpdmF0ZToKIAogICAgIHZv
aWQgY29tcGlsZVV0aWxpdHlTY3JpcHRzKCk7CiAgICAgdm9pZCBpbml0RGV2VG9vbHNBZ2VudEhv
c3QoKTsKLSAgICB2b2lkIHJlc2V0SW5zcGVjdG9yRnJvbnRlbmRQcm94eSgpOworICAgIHZvaWQg
Y3JlYXRlSW5zcGVjdG9yRnJvbnRlbmRQcm94eSgpOworICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJv
bnRlbmRQcm94eVRvSW5zcGVjdG9yQ29udHJvbGxlcigpOwogICAgIHZvaWQgc2V0QXB1QWdlbnRF
bmFibGVkKGJvb2wgZW5hYmxlZCk7CiAKICAgICBXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVy
KiBpbnNwZWN0b3JDb250cm9sbGVyKCk7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkRldlRvb2xzRnJvbnRlbmRJbXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2
VG9vbHNGcm9udGVuZEltcGwuY3BwCmluZGV4IDY1NjY3ZjQuLjIwNjQ4YmIgMTAwNjQ0Ci0tLSBh
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNGcm9udGVuZEltcGwuY3BwCisrKyBiL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNGcm9udGVuZEltcGwuY3BwCkBAIC0xNTYsOCAr
MTU2LDExIEBAIFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjpXZWJEZXZUb29sc0Zyb250ZW5kSW1w
bCgKICAgICAgICAgInNldFNldHRpbmciLAogICAgICAgICBXZWJEZXZUb29sc0Zyb250ZW5kSW1w
bDo6anNTZXRTZXR0aW5nKTsKICAgICBkZXZUb29sc0hvc3QuYWRkUHJvdG9GdW5jdGlvbigKLSAg
ICAgICAgIndpbmRvd1VubG9hZGluZyIsCi0gICAgICAgIFdlYkRldlRvb2xzRnJvbnRlbmRJbXBs
Ojpqc1dpbmRvd1VubG9hZGluZyk7CisgICAgICAgICJicmluZ1RvRnJvbnQiLAorICAgICAgICBX
ZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6anNCcmluZ1RvRnJvbnQpOworICAgIGRldlRvb2xzSG9z
dC5hZGRQcm90b0Z1bmN0aW9uKAorICAgICAgICAiaW5zcGVjdGVkVVJMQ2hhbmdlZCIsCisgICAg
ICAgIFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjpqc0luc3BlY3RlZFVSTENoYW5nZWQpOwogICAg
IGRldlRvb2xzSG9zdC5hZGRQcm90b0Z1bmN0aW9uKAogICAgICAgICAic2hvd0NvbnRleHRNZW51
IiwKICAgICAgICAgV2ViRGV2VG9vbHNGcm9udGVuZEltcGw6OmpzU2hvd0NvbnRleHRNZW51KTsK
QEAgLTM0Niw5ICszNDksMTMgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFdlYkRldlRvb2xzRnJv
bnRlbmRJbXBsOjpqc0RlYnVnZ2VyUGF1c2VTY3JpcHQoY29uc3Qgdjg6OkEKICAgICByZXR1cm4g
djg6OlVuZGVmaW5lZCgpOwogfQogCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gV2ViRGV2VG9vbHNG
cm9udGVuZEltcGw6OmpzV2luZG93VW5sb2FkaW5nKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3Mp
Cit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gV2ViRGV2VG9vbHNGcm9udGVuZEltcGw6OmpzQnJpbmdU
b0Zyb250KGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgcmV0dXJuIHY4OjpVbmRl
ZmluZWQoKTsKK30KKwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFdlYkRldlRvb2xzRnJvbnRlbmRJ
bXBsOjpqc0luc3BlY3RlZFVSTENoYW5nZWQoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsK
LSAgICAvLyBUT0RPKHBmZWxkbWFuKTogSW1wbGVtZW50IHRoaXMuCiAgICAgcmV0dXJuIHY4OjpV
bmRlZmluZWQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZU
b29sc0Zyb250ZW5kSW1wbC5oIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0Zyb250
ZW5kSW1wbC5oCmluZGV4IGJhMDAxM2IuLjY1OTE2OTMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViRGV2VG9vbHNGcm9udGVuZEltcGwuaAorKysgYi9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkRldlRvb2xzRnJvbnRlbmRJbXBsLmgKQEAgLTE0Miw3ICsxNDIsOCBAQCBwcml2YXRl
OgogICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4ganNTZXR0aW5nKGNvbnN0IHY4OjpB
cmd1bWVudHMmIGFyZ3MpOwogICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4ganNTZXRT
ZXR0aW5nKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpOwogICAgIHN0YXRpYyB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4ganNEZWJ1Z2dlclBhdXNlU2NyaXB0KGNvbnN0IHY4OjpBcmd1bWVudHMmIGFy
Z3MpOwotICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4ganNXaW5kb3dVbmxvYWRpbmco
Y29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncyk7CisgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBqc0JyaW5nVG9Gcm9udChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKTsKKyAgICBzdGF0
aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGpzSW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCB2ODo6
QXJndW1lbnRzJiBhcmdzKTsKICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGpzU2hv
d0NvbnRleHRNZW51KGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpOwogICAgIHN0YXRpYyB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4ganNDYW5BdHRhY2hXaW5kb3coY29uc3Qgdjg6OkFyZ3VtZW50cyYg
YXJncyk7CiAKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvSW5qZWN0RGlzcGF0
Y2guanMgYi9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0luamVjdERpc3BhdGNoLmpzCmluZGV4IGUw
NzBjNDIuLjY4YmNkYmQgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvSW5qZWN0
RGlzcGF0Y2guanMKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9JbmplY3REaXNwYXRjaC5q
cwpAQCAtMTA0LDMgKzEwNCw3IEBAIGZ1bmN0aW9uIGRpc3BhdGNoKG1ldGhvZCwgdmFyX2FyZ3Mp
IHsKICAgICB2YXIgY2FsbCA9IEpTT04uc3RyaW5naWZ5KGFyZ3MpOwogICAgIERldlRvb2xzQWdl
bnRIb3N0LmRpc3BhdGNoKGNhbGwpOwogfTsKKworZnVuY3Rpb24gY2xvc2UoKSB7CisgICAgLy8g
VGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gSW5zcGVjdG9yRnJvbnRlbmQgY2xvc2VzIGluIGxh
eW91dCB0ZXN0cy4KK30KZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvQ2hhbmdlTG9nIGIvV2ViS2l0
L2d0ay9DaGFuZ2VMb2cKaW5kZXggOWFkZDZlMi4uZGI3NDllZSAxMDA2NDQKLS0tIGEvV2ViS2l0
L2d0ay9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNCBA
QAorMjAxMC0wMy0xMCAgWXVyeSBTZW1pa2hhdHNreSA8eXVyeXNAY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEludHJvZHVjZSBJ
bnNwZWN0b3JGcm9udGVuZENsaWVudCB0aGF0IHByb3ZpZGVzIEluc3BlY3RvckZyb250ZW5kIHdp
dGggYW4gaW50ZXJmYWNlIHRvIHRoZSBlbWJlZGRlci4gSW5zcGVjdG9yQ2xpZW50IG5vdyBzZXJ2
ZXMgYXMgYSBkZWxlZ2F0ZSBmb3IgSW5zcGVjdG9yQ29udHJvbGxlciBhbmQgZG9lcyBub3QgY29u
dGFpbiBtZXRob2RzIGZvciBtYW5hZ2luZyBpbnNwZWN0b3IgZnJvbnRlbmQgd2luZG93LiBUaGF0
IGFsbG93cyB0byBjcmVhdGUgcmVtb3RlIEluc3BlY3RvckZyb250ZW5kSG9zdC4KKworICAgICAg
ICBJbnRyb2R1Y2UgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQgdGhhdCB3b3VsZCBwcm92aWRlIElu
c3BlY3RvckZyb250ZW5kIHdpdGggYW4gaW50ZXJmYWNlIHRvIHRoZSBlbWJlZGRlcgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzUwMzYKKworICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudEd0ay5jcHA6CisgICAgICAgIChXZWJL
aXQ6Om5vdGlmeVdlYlZpZXdEZXN0cm95ZWQpOgorICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JD
bGllbnQ6Okluc3BlY3RvckNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6Okluc3BlY3RvckNsaWVu
dDo6aW5zcGVjdG9yRGVzdHJveWVkKToKKyAgICAgICAgKFdlYktpdDo6SW5zcGVjdG9yQ2xpZW50
OjpvcGVuSW5zcGVjdG9yRnJvbnRlbmQpOgorICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JDbGll
bnQ6OmhpZ2hsaWdodCk6CisgICAgICAgIChXZWJLaXQ6Okluc3BlY3RvckNsaWVudDo6aGlkZUhp
Z2hsaWdodCk6CisgICAgICAgIChXZWJLaXQ6Okluc3BlY3RvckNsaWVudDo6cG9wdWxhdGVTZXR0
aW5nKToKKyAgICAgICAgKFdlYktpdDo6SW5zcGVjdG9yQ2xpZW50OjpzdG9yZVNldHRpbmcpOgor
ICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6SW5zcGVjdG9yRnJvbnRl
bmRDbGllbnQpOgorICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6fklu
c3BlY3RvckZyb250ZW5kQ2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6SW5zcGVjdG9yRnJvbnRl
bmRDbGllbnQ6OmRlc3Ryb3lJbnNwZWN0b3JXaW5kb3cpOgorICAgICAgICAoV2ViS2l0OjpJbnNw
ZWN0b3JGcm9udGVuZENsaWVudDo6bG9jYWxpemVkU3RyaW5nc1VSTCk6CisgICAgICAgIChXZWJL
aXQ6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpoaWRkZW5QYW5lbHMpOgorICAgICAgICAoV2Vi
S2l0OjpJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6YnJpbmdUb0Zyb250KToKKyAgICAgICAgKFdl
YktpdDo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmNsb3NlV2luZG93KToKKyAgICAgICAgKFdl
YktpdDo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmF0dGFjaFdpbmRvdyk6CisgICAgICAgIChX
ZWJLaXQ6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpkZXRhY2hXaW5kb3cpOgorICAgICAgICAo
V2ViS2l0OjpJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQp
OgorICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6aW5zcGVjdGVkVVJM
Q2hhbmdlZCk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50R3RrLmg6
CisKIDIwMTAtMDMtMDkgIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IEd1c3Rhdm8gTm9yb25oYSBTaWx2YS4KZGlmZiAtLWdpdCBh
L1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50R3RrLmNwcCBiL1dlYktp
dC9ndGsvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50R3RrLmNwcAppbmRleCA5OWJjNjI3
Li5lNzJhYzA1IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0luc3BlY3Rv
ckNsaWVudEd0ay5jcHAKKysrIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JD
bGllbnRHdGsuY3BwCkBAIC0zMSw2NyArMzEsNDAgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1zdGF0aWMgdm9pZCBub3RpZnlXZWJWaWV3RGVzdHJv
eWVkKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIEluc3BlY3RvckNsaWVudCogaW5zcGVjdG9yQ2xp
ZW50KQorc3RhdGljIHZvaWQgbm90aWZ5V2ViVmlld0Rlc3Ryb3llZChXZWJLaXRXZWJWaWV3KiB3
ZWJWaWV3LCBJbnNwZWN0b3JGcm9udGVuZENsaWVudCogaW5zcGVjdG9yRnJvbnRlbmRDbGllbnQp
CiB7Ci0gICAgaW5zcGVjdG9yQ2xpZW50LT53ZWJWaWV3RGVzdHJveWVkKCk7CisgICAgaW5zcGVj
dG9yRnJvbnRlbmRDbGllbnQtPmRlc3Ryb3lJbnNwZWN0b3JXaW5kb3coKTsKIH0KIAogSW5zcGVj
dG9yQ2xpZW50OjpJbnNwZWN0b3JDbGllbnQoV2ViS2l0V2ViVmlldyogd2ViVmlldykKLSAgICA6
IG1fd2ViVmlldygwKQotICAgICwgbV9pbnNwZWN0ZWRXZWJWaWV3KHdlYlZpZXcpCi0gICAgLCBt
X3dlYkluc3BlY3RvcigwKQorICAgIDogbV9pbnNwZWN0ZWRXZWJWaWV3KHdlYlZpZXcpCiB7fQog
CiB2b2lkIEluc3BlY3RvckNsaWVudDo6aW5zcGVjdG9yRGVzdHJveWVkKCkKIHsKLSAgICBpZiAo
bV93ZWJJbnNwZWN0b3IpCi0gICAgICAgIGdfb2JqZWN0X3VucmVmKG1fd2ViSW5zcGVjdG9yKTsK
LQogICAgIGRlbGV0ZSB0aGlzOwogfQogCi12b2lkIEluc3BlY3RvckNsaWVudDo6d2ViVmlld0Rl
c3Ryb3llZCgpCi17Ci0gICAgbV93ZWJWaWV3ID0gMDsKLSAgICBjb3JlKG1faW5zcGVjdGVkV2Vi
VmlldyktPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+cGFnZURlc3Ryb3llZCgpOwotCi0gICAgLy8g
Y3JlYXRlUGFnZSB3aWxsIGJlIGNhbGxlZCBhZ2FpbiwgaWYgdGhlIHVzZXIgY2hvb3NlcyB0byBp
bnNwZWN0Ci0gICAgLy8gc29tZXRoaW5nIGVsc2UsIGFuZCB0aGUgaW5zcGVjdG9yIHdpbGwgYmUg
cmVmZXJlbmNlZCBhZ2FpbiwKLSAgICAvLyB0aGVyZS4KLSAgICBnX29iamVjdF91bnJlZihtX3dl
Ykluc3BlY3Rvcik7Ci0gICAgbV93ZWJJbnNwZWN0b3IgPSAwOwotfQotCi1QYWdlKiBJbnNwZWN0
b3JDbGllbnQ6OmNyZWF0ZVBhZ2UoKQordm9pZCBJbnNwZWN0b3JDbGllbnQ6Om9wZW5JbnNwZWN0
b3JGcm9udGVuZChJbnNwZWN0b3JDb250cm9sbGVyKiBjb250cm9sbGVyKQogewotICAgIGlmICht
X3dlYlZpZXcpIHsKLSAgICAgICAgZ2Jvb2xlYW4gaGFuZGxlZCA9IEZBTFNFOwotICAgICAgICBn
X3NpZ25hbF9lbWl0X2J5X25hbWUobV93ZWJJbnNwZWN0b3IsICJkZXN0cm95IiwgJmhhbmRsZWQp
OwotCi0gICAgICAgIC8qIHdlIGNhbiBub3cgZGlzcG9zZSBvdXIgb3duIHJlZmVyZW5jZSAqLwot
ICAgICAgICBnX29iamVjdF91bnJlZihtX3dlYkluc3BlY3Rvcik7Ci0gICAgfQotCiAgICAgLy8g
VGhpcyBnX29iamVjdF9nZXQgd2lsbCByZWYgdGhlIGluc3BlY3Rvci4gV2UncmUgbm90IGRvaW5n
IGFuCiAgICAgLy8gdW5yZWYgaWYgdGhpcyBtZXRob2Qgc3VjY2VlZHMgYmVjYXVzZSB0aGUgaW5z
cGVjdG9yIG9iamVjdCBtdXN0CiAgICAgLy8gYmUgYWxpdmUgZXZlbiBhZnRlciB0aGUgaW5zcGVj
dGVkIFdlYlZpZXcgaXMgZGVzdHJveWVkIC0gdGhlCiAgICAgLy8gY2xvc2Utd2luZG93IGFuZCBk
ZXN0cm95IHNpZ25hbHMgc3RpbGwgbmVlZCB0byBiZQogICAgIC8vIGVtaXR0ZWQuCi0gICAgV2Vi
S2l0V2ViSW5zcGVjdG9yKiB3ZWJJbnNwZWN0b3I7CisgICAgV2ViS2l0V2ViSW5zcGVjdG9yKiB3
ZWJJbnNwZWN0b3IgPSAwOwogICAgIGdfb2JqZWN0X2dldChtX2luc3BlY3RlZFdlYlZpZXcsICJ3
ZWItaW5zcGVjdG9yIiwgJndlYkluc3BlY3RvciwgTlVMTCk7Ci0gICAgbV93ZWJJbnNwZWN0b3Ig
PSB3ZWJJbnNwZWN0b3I7CisgICAgQVNTRVJUKHdlYkluc3BlY3Rvcik7CiAKLSAgICBnX3NpZ25h
bF9lbWl0X2J5X25hbWUobV93ZWJJbnNwZWN0b3IsICJpbnNwZWN0LXdlYi12aWV3IiwgbV9pbnNw
ZWN0ZWRXZWJWaWV3LCAmbV93ZWJWaWV3KTsKKyAgICBXZWJLaXRXZWJWaWV3KiBpbnNwZWN0b3JX
ZWJWaWV3ID0gMDsKKyAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUod2ViSW5zcGVjdG9yLCAiaW5z
cGVjdC13ZWItdmlldyIsIG1faW5zcGVjdGVkV2ViVmlldywgJmluc3BlY3RvcldlYlZpZXcpOwog
Ci0gICAgaWYgKCFtX3dlYlZpZXcpIHsKLSAgICAgICAgZ19vYmplY3RfdW5yZWYobV93ZWJJbnNw
ZWN0b3IpOwotICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoIWluc3BlY3RvcldlYlZpZXcpIHsK
KyAgICAgICAgZ19vYmplY3RfdW5yZWYod2ViSW5zcGVjdG9yKTsKKyAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIHdlYmtpdF93ZWJfaW5zcGVjdG9yX3NldF93ZWJfdmlldyhtX3dlYkluc3Bl
Y3RvciwgbV93ZWJWaWV3KTsKLQotICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAiZGVz
dHJveSIsCi0gICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNLKG5vdGlmeVdlYlZpZXdEZXN0
cm95ZWQpLCAoZ3BvaW50ZXIpdGhpcyk7CisgICAgd2Via2l0X3dlYl9pbnNwZWN0b3Jfc2V0X3dl
Yl92aWV3KHdlYkluc3BlY3RvciwgaW5zcGVjdG9yV2ViVmlldyk7CiAKICAgICBHT3duUHRyPGdj
aGFyPiBpbnNwZWN0b3JVUkk7CiAKQEAgLTEwMywxNCArNzYsNzMgQEAgUGFnZSogSW5zcGVjdG9y
Q2xpZW50OjpjcmVhdGVQYWdlKCkKICAgICB9IGVsc2UKICAgICAgICAgaW5zcGVjdG9yVVJJLnNl
dChnX2ZpbGVuYW1lX3RvX3VyaShEQVRBX0RJUiIvd2Via2l0LTEuMC93ZWJpbnNwZWN0b3IvaW5z
cGVjdG9yLmh0bWwiLCBOVUxMLCBOVUxMKSk7CiAKLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91
cmkobV93ZWJWaWV3LCBpbnNwZWN0b3JVUkkuZ2V0KCkpOworICAgIHdlYmtpdF93ZWJfdmlld19s
b2FkX3VyaShpbnNwZWN0b3JXZWJWaWV3LCBpbnNwZWN0b3JVUkkuZ2V0KCkpOworCisgICAgZ3Rr
X3dpZGdldF9zaG93KEdUS19XSURHRVQoaW5zcGVjdG9yV2ViVmlldykpOworCisgICAgUGFnZSog
aW5zcGVjdG9yUGFnZSA9IGNvcmUoaW5zcGVjdG9yV2ViVmlldyk7CisgICAgaW5zcGVjdG9yUGFn
ZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5zZXRJbnNwZWN0b3JGcm9udGVuZENsaWVudChuZXcg
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQobV9pbnNwZWN0ZWRXZWJWaWV3LCBpbnNwZWN0b3JXZWJW
aWV3LCB3ZWJJbnNwZWN0b3IsIGluc3BlY3RvclBhZ2UpKTsKK30KKwordm9pZCBJbnNwZWN0b3JD
bGllbnQ6OmhpZ2hsaWdodChOb2RlKiBub2RlKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK3ZvaWQgSW5zcGVjdG9yQ2xpZW50OjpoaWRlSGlnaGxpZ2h0KCkKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCit2b2lkIEluc3BlY3RvckNsaWVudDo6cG9wdWxhdGVTZXR0aW5nKGNv
bnN0IFN0cmluZyYga2V5LCBTdHJpbmcqIHZhbHVlKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ2xpZW50OjpzdG9yZVNldHRpbmcoY29uc3QgU3RyaW5nJiBr
ZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
Citib29sIGRlc3Ryb3llZCA9IFRSVUU7CisKK0luc3BlY3RvckZyb250ZW5kQ2xpZW50OjpJbnNw
ZWN0b3JGcm9udGVuZENsaWVudChXZWJLaXRXZWJWaWV3KiBpbnNwZWN0ZWRXZWJWaWV3LCBXZWJL
aXRXZWJWaWV3KiBpbnNwZWN0b3JXZWJWaWV3LCBXZWJLaXRXZWJJbnNwZWN0b3IqIHdlYkluc3Bl
Y3RvciwgUGFnZSogaW5zcGVjdG9yUGFnZSkKKyAgICA6IEluc3BlY3RvckZyb250ZW5kQ2xpZW50
TG9jYWwoY29yZShpbnNwZWN0ZWRXZWJWaWV3KS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLCBpbnNw
ZWN0b3JQYWdlKQorICAgICwgbV9pbnNwZWN0b3JXZWJWaWV3KGluc3BlY3RvcldlYlZpZXcpCisg
ICAgLCBtX2luc3BlY3RlZFdlYlZpZXcoaW5zcGVjdGVkV2ViVmlldykKKyAgICAsIG1fd2ViSW5z
cGVjdG9yKHdlYkluc3BlY3RvcikKK3sKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1faW5zcGVjdG9y
V2ViVmlldywgImRlc3Ryb3kiLAorICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyhub3Rp
ZnlXZWJWaWV3RGVzdHJveWVkKSwgKGdwb2ludGVyKXRoaXMpOworfQorCitJbnNwZWN0b3JGcm9u
dGVuZENsaWVudDo6fkluc3BlY3RvckZyb250ZW5kQ2xpZW50KCkKK3sKKyAgICBBU1NFUlQoIW1f
d2ViSW5zcGVjdG9yKTsKK30KKwordm9pZCBJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6ZGVzdHJv
eUluc3BlY3RvcldpbmRvdygpCit7CisgICAgaWYgKCFtX3dlYkluc3BlY3RvcikKKyAgICAgICAg
cmV0dXJuOworICAgIFdlYktpdFdlYkluc3BlY3Rvciogd2ViSW5zcGVjdG9yID0gbV93ZWJJbnNw
ZWN0b3I7CisgICAgbV93ZWJJbnNwZWN0b3IgPSAwOworCisgICAgZ19zaWduYWxfaGFuZGxlcnNf
ZGlzY29ubmVjdF9ieV9mdW5jKG1faW5zcGVjdG9yV2ViVmlldywgKGdwb2ludGVyKW5vdGlmeVdl
YlZpZXdEZXN0cm95ZWQsIChncG9pbnRlcil0aGlzKTsKKyAgICBtX2luc3BlY3RvcldlYlZpZXcg
PSAwOworCisgICAgY29yZShtX2luc3BlY3RlZFdlYlZpZXcpLT5pbnNwZWN0b3JDb250cm9sbGVy
KCktPmNsb3NlKCk7CiAKLSAgICBndGtfd2lkZ2V0X3Nob3coR1RLX1dJREdFVChtX3dlYlZpZXcp
KTsKKyAgICBnYm9vbGVhbiBoYW5kbGVkID0gRkFMU0U7CisgICAgZ19zaWduYWxfZW1pdF9ieV9u
YW1lKHdlYkluc3BlY3RvciwgImNsb3NlLXdpbmRvdyIsICZoYW5kbGVkKTsKKyAgICBBU1NFUlQo
aGFuZGxlZCk7CiAKLSAgICByZXR1cm4gY29yZShtX3dlYlZpZXcpOworICAgIC8qIHdlIHNob3Vs
ZCBub3cgZGlzcG9zZSBvdXIgb3duIHJlZmVyZW5jZSAqLworICAgIGdfb2JqZWN0X3VucmVmKHdl
Ykluc3BlY3Rvcik7CiB9CiAKLVN0cmluZyBJbnNwZWN0b3JDbGllbnQ6OmxvY2FsaXplZFN0cmlu
Z3NVUkwoKQorU3RyaW5nIEluc3BlY3RvckZyb250ZW5kQ2xpZW50Ojpsb2NhbGl6ZWRTdHJpbmdz
VVJMKCkKIHsKICAgICBHT3duUHRyPGdjaGFyPiBVUkw7CiAKQEAgLTEyNiw4OSArMTU4LDU2IEBA
IFN0cmluZyBJbnNwZWN0b3JDbGllbnQ6OmxvY2FsaXplZFN0cmluZ3NVUkwoKQogICAgIHJldHVy
biBTdHJpbmc6OmZyb21VVEY4KFVSTC5nZXQoKSk7CiB9CiAKLVN0cmluZyBJbnNwZWN0b3JDbGll
bnQ6OmhpZGRlblBhbmVscygpCitTdHJpbmcgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmhpZGRl
blBhbmVscygpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4gU3RyaW5nKCk7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ2xpZW50OjpzaG93V2luZG93KCkKK3ZvaWQgSW5zcGVjdG9y
RnJvbnRlbmRDbGllbnQ6OmJyaW5nVG9Gcm9udCgpCiB7Ci0gICAgaWYgKCFtX3dlYlZpZXcpCisg
ICAgaWYgKCFtX2luc3BlY3RvcldlYlZpZXcpCiAgICAgICAgIHJldHVybjsKIAogICAgIGdib29s
ZWFuIGhhbmRsZWQgPSBGQUxTRTsKICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV93ZWJJbnNw
ZWN0b3IsICJzaG93LXdpbmRvdyIsICZoYW5kbGVkKTsKLQotICAgIGNvcmUobV9pbnNwZWN0ZWRX
ZWJWaWV3KS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5zZXRXaW5kb3dWaXNpYmxlKHRydWUpOwog
fQogCi12b2lkIEluc3BlY3RvckNsaWVudDo6Y2xvc2VXaW5kb3coKQordm9pZCBJbnNwZWN0b3JG
cm9udGVuZENsaWVudDo6Y2xvc2VXaW5kb3coKQogewotICAgIGlmICghbV93ZWJWaWV3KQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBnYm9vbGVhbiBoYW5kbGVkID0gRkFMU0U7Ci0gICAgZ19zaWdu
YWxfZW1pdF9ieV9uYW1lKG1fd2ViSW5zcGVjdG9yLCAiY2xvc2Utd2luZG93IiwgJmhhbmRsZWQp
OwotCi0gICAgY29yZShtX2luc3BlY3RlZFdlYlZpZXcpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkt
PnNldFdpbmRvd1Zpc2libGUoZmFsc2UpOworICAgIGRlc3Ryb3lJbnNwZWN0b3JXaW5kb3coKTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JDbGllbnQ6OmF0dGFjaFdpbmRvdygpCit2b2lkIEluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50OjphdHRhY2hXaW5kb3coKQogewotICAgIGlmICghbV93ZWJWaWV3KQor
ICAgIGlmICghbV9pbnNwZWN0b3JXZWJWaWV3KQogICAgICAgICByZXR1cm47CiAKICAgICBnYm9v
bGVhbiBoYW5kbGVkID0gRkFMU0U7CiAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fd2ViSW5z
cGVjdG9yLCAiYXR0YWNoLXdpbmRvdyIsICZoYW5kbGVkKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JD
bGllbnQ6OmRldGFjaFdpbmRvdygpCit2b2lkIEluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpkZXRh
Y2hXaW5kb3coKQogewotICAgIGlmICghbV93ZWJWaWV3KQorICAgIGlmICghbV9pbnNwZWN0b3JX
ZWJWaWV3KQogICAgICAgICByZXR1cm47CiAKICAgICBnYm9vbGVhbiBoYW5kbGVkID0gRkFMU0U7
CiAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fd2ViSW5zcGVjdG9yLCAiZGV0YWNoLXdpbmRv
dyIsICZoYW5kbGVkKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDbGllbnQ6OnNldEF0dGFjaGVkV2lu
ZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQot
Ci12b2lkIEluc3BlY3RvckNsaWVudDo6aGlnaGxpZ2h0KE5vZGUqIG5vZGUpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDbGllbnQ6OmhpZGVIaWdobGlnaHQo
KQordm9pZCBJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQo
dW5zaWduZWQgaGVpZ2h0KQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgSW5z
cGVjdG9yQ2xpZW50OjppbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYgbmV3VVJMKQor
dm9pZCBJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6aW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBT
dHJpbmcmIG5ld1VSTCkKIHsKLSAgICBpZiAoIW1fd2ViVmlldykKKyAgICBpZiAoIW1faW5zcGVj
dG9yV2ViVmlldykKICAgICAgICAgcmV0dXJuOwogCiAgICAgd2Via2l0X3dlYl9pbnNwZWN0b3Jf
c2V0X2luc3BlY3RlZF91cmkobV93ZWJJbnNwZWN0b3IsIG5ld1VSTC51dGY4KCkuZGF0YSgpKTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JDbGllbnQ6Omluc3BlY3RvcldpbmRvd09iamVjdENsZWFyZWQo
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ2xpZW50Ojpw
b3B1bGF0ZVNldHRpbmcoY29uc3QgU3RyaW5nJiBrZXksIFN0cmluZyogdmFsdWUpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDbGllbnQ6OnN0b3JlU2V0dGlu
Zyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotfQotCiB9CiAKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBv
cnQvSW5zcGVjdG9yQ2xpZW50R3RrLmggYi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0luc3Bl
Y3RvckNsaWVudEd0ay5oCmluZGV4IDI5N2ZkOGYuLmNkYjUzNzUgMTAwNjQ0Ci0tLSBhL1dlYktp
dC9ndGsvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50R3RrLmgKKysrIGIvV2ViS2l0L2d0
ay9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRHdGsuaApAQCAtMzAsNiArMzAsNyBAQAog
I2RlZmluZSBJbnNwZWN0b3JDbGllbnRHdGtfaAogCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ2xpZW50
LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5oIgogI2luY2x1ZGUg
IndlYmtpdHdlYnZpZXcuaCIKICNpbmNsdWRlICJ3ZWJraXR3ZWJpbnNwZWN0b3IuaCIKIApAQCAt
NDYsMTUgKzQ3LDMwIEBAIG5hbWVzcGFjZSBXZWJLaXQgewogICAgICAgICBJbnNwZWN0b3JDbGll
bnQoV2ViS2l0V2ViVmlldyogd2ViVmlldyk7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIGluc3Bl
Y3RvckRlc3Ryb3llZCgpOwotICAgICAgICB2b2lkIHdlYlZpZXdEZXN0cm95ZWQoKTsKIAotICAg
ICAgICB2aXJ0dWFsIFdlYkNvcmU6OlBhZ2UqIGNyZWF0ZVBhZ2UoKTsKKyAgICAgICAgdmlydHVh
bCB2b2lkIG9wZW5JbnNwZWN0b3JGcm9udGVuZChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVy
Kik7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGhpZ2hsaWdodChXZWJDb3JlOjpOb2RlKik7Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCBoaWRlSGlnaGxpZ2h0KCk7CisKKyAgICAgICAgdmlydHVhbCB2
b2lkIHBvcHVsYXRlU2V0dGluZyhjb25zdCBXZWJDb3JlOjpTdHJpbmcmIGtleSwgV2ViQ29yZTo6
U3RyaW5nKiB2YWx1ZSk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzdG9yZVNldHRpbmcoY29uc3Qg
V2ViQ29yZTo6U3RyaW5nJiBrZXksIGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgdmFsdWUpOworCisg
ICAgcHJpdmF0ZToKKyAgICAgICAgV2ViS2l0V2ViVmlldyogbV9pbnNwZWN0ZWRXZWJWaWV3Owor
ICAgIH07CisKKyAgICBjbGFzcyBJbnNwZWN0b3JGcm9udGVuZENsaWVudCA6IHB1YmxpYyBXZWJD
b3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsIHsKKyAgICBwdWJsaWM6CisgICAgICAg
IEluc3BlY3RvckZyb250ZW5kQ2xpZW50KFdlYktpdFdlYlZpZXcqIGluc3BlY3RlZFdlYlZpZXcs
IFdlYktpdFdlYlZpZXcqIGluc3BlY3RvcldlYlZpZXcsIFdlYktpdFdlYkluc3BlY3Rvciogd2Vi
SW5zcGVjdG9yLCBXZWJDb3JlOjpQYWdlKiBpbnNwZWN0b3JQYWdlKTsKKworICAgICAgICB2b2lk
IGRlc3Ryb3lJbnNwZWN0b3JXaW5kb3coKTsKIAogICAgICAgICB2aXJ0dWFsIFdlYkNvcmU6OlN0
cmluZyBsb2NhbGl6ZWRTdHJpbmdzVVJMKCk7CiAKICAgICAgICAgdmlydHVhbCBXZWJDb3JlOjpT
dHJpbmcgaGlkZGVuUGFuZWxzKCk7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIHNob3dXaW5kb3co
KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGJyaW5nVG9Gcm9udCgpOwogICAgICAgICB2aXJ0dWFs
IHZvaWQgY2xvc2VXaW5kb3coKTsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoV2luZG93
KCk7CkBAIC02MiwxNyArNzgsMTIgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKICAgICAgICAgdmly
dHVhbCB2b2lkIHNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCk7CiAKLSAg
ICAgICAgdmlydHVhbCB2b2lkIGhpZ2hsaWdodChXZWJDb3JlOjpOb2RlKik7Ci0gICAgICAgIHZp
cnR1YWwgdm9pZCBoaWRlSGlnaGxpZ2h0KCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0
ZWRVUkxDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgbmV3VVJMKTsKIAotICAgICAgICB2
aXJ0dWFsIHZvaWQgcG9wdWxhdGVTZXR0aW5nKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYga2V5LCBX
ZWJDb3JlOjpTdHJpbmcqIHZhbHVlKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHN0b3JlU2V0dGlu
Zyhjb25zdCBXZWJDb3JlOjpTdHJpbmcmIGtleSwgY29uc3QgV2ViQ29yZTo6U3RyaW5nJiB2YWx1
ZSk7Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIGluc3BlY3RvcldpbmRvd09iamVjdENsZWFyZWQo
KTsKLQogICAgIHByaXZhdGU6Ci0gICAgICAgIFdlYktpdFdlYlZpZXcqIG1fd2ViVmlldzsKKyAg
ICAgICAgdmlydHVhbCB+SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQoKTsKKworICAgICAgICBXZWJL
aXRXZWJWaWV3KiBtX2luc3BlY3RvcldlYlZpZXc7CiAgICAgICAgIFdlYktpdFdlYlZpZXcqIG1f
aW5zcGVjdGVkV2ViVmlldzsKICAgICAgICAgV2ViS2l0V2ViSW5zcGVjdG9yKiBtX3dlYkluc3Bl
Y3RvcjsKICAgICB9OwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2hhaWt1L0NoYW5nZUxvZyBiL1dlYktp
dC9oYWlrdS9DaGFuZ2VMb2cKaW5kZXggMGI1N2E1OS4uYzhhOWZkMCAxMDA2NDQKLS0tIGEvV2Vi
S2l0L2hhaWt1L0NoYW5nZUxvZworKysgYi9XZWJLaXQvaGFpa3UvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTYgQEAKKzIwMTAtMDMtMTAgIFl1cnkgU2VtaWtoYXRza3kgPHl1cnlzQGNocm9taXVtLm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbnRy
b2R1Y2UgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQgdGhhdCBwcm92aWRlcyBJbnNwZWN0b3JGcm9u
dGVuZCB3aXRoIGFuIGludGVyZmFjZSB0byB0aGUgZW1iZWRkZXIuIEluc3BlY3RvckNsaWVudCBu
b3cgc2VydmVzIGFzIGEgZGVsZWdhdGUgZm9yIEluc3BlY3RvckNvbnRyb2xsZXIgYW5kIGRvZXMg
bm90IGNvbnRhaW4gbWV0aG9kcyBmb3IgbWFuYWdpbmcgaW5zcGVjdG9yIGZyb250ZW5kIHdpbmRv
dy4gVGhhdCBhbGxvd3MgdG8gY3JlYXRlIHJlbW90ZSBJbnNwZWN0b3JGcm9udGVuZEhvc3QuCisK
KyAgICAgICAgSW50cm9kdWNlIEluc3BlY3RvckZyb250ZW5kQ2xpZW50IHRoYXQgd291bGQgcHJv
dmlkZSBJbnNwZWN0b3JGcm9udGVuZCB3aXRoIGFuIGludGVyZmFjZSB0byB0aGUgZW1iZWRkZXIK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM1MDM2CisK
KyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRIYWlrdS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDbGllbnRIYWlrdTo6b3Blbkluc3BlY3RvckZyb250ZW5k
KToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRIYWlrdS5oOgorCiAy
MDEwLTAzLTAyICBBZGFtIFRyZWF0ICA8YXRyZWF0QHJpbS5jb20+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgRGF2ZSBIeWF0dC4KZGlmZiAtLWdpdCBhL1dlYktpdC9oYWlrdS9XZWJDb3JlU3VwcG9y
dC9JbnNwZWN0b3JDbGllbnRIYWlrdS5jcHAgYi9XZWJLaXQvaGFpa3UvV2ViQ29yZVN1cHBvcnQv
SW5zcGVjdG9yQ2xpZW50SGFpa3UuY3BwCmluZGV4IGYwNmU5NmIuLjU5MjMyZTkgMTAwNjQ0Ci0t
LSBhL1dlYktpdC9oYWlrdS9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRIYWlrdS5jcHAK
KysrIGIvV2ViS2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudEhhaWt1LmNw
cApAQCAtNDIsNDUgKzQyLDcgQEAgdm9pZCBJbnNwZWN0b3JDbGllbnRIYWlrdTo6aW5zcGVjdG9y
RGVzdHJveWVkKCkKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1QYWdlKiBJbnNwZWN0b3JD
bGllbnRIYWlrdTo6Y3JlYXRlUGFnZSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBy
ZXR1cm4gMDsKLX0KLQotU3RyaW5nIEluc3BlY3RvckNsaWVudEhhaWt1Ojpsb2NhbGl6ZWRTdHJp
bmdzVVJMKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsK
LX0KLQotU3RyaW5nIEluc3BlY3RvckNsaWVudEhhaWt1OjpoaWRkZW5QYW5lbHMoKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi12b2lkIEluc3Bl
Y3RvckNsaWVudEhhaWt1OjpzaG93V2luZG93KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
fQotCi12b2lkIEluc3BlY3RvckNsaWVudEhhaWt1OjpjbG9zZVdpbmRvdygpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDbGllbnRIYWlrdTo6YXR0YWNoV2lu
ZG93KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEluc3BlY3RvckNsaWVu
dEhhaWt1OjpkZXRhY2hXaW5kb3coKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZv
aWQgSW5zcGVjdG9yQ2xpZW50SGFpa3U6OnNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVk
IGhlaWdodCkKK3ZvaWQgSW5zcGVjdG9yQ2xpZW50SGFpa3U6Om9wZW5JbnNwZWN0b3JGcm9udGVu
ZChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyKikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgp
OwogfQpAQCAtOTUsMTYgKzU3LDYgQEAgdm9pZCBJbnNwZWN0b3JDbGllbnRIYWlrdTo6aGlkZUhp
Z2hsaWdodCgpCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDbGll
bnRIYWlrdTo6aW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ2xpZW50SGFpa3U6Omluc3BlY3Rvcldp
bmRvd09iamVjdENsZWFyZWQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KIHZvaWQg
SW5zcGVjdG9yQ2xpZW50SGFpa3U6OnBvcHVsYXRlU2V0dGluZyhjb25zdCBTdHJpbmcmIGtleSwg
U3RyaW5nKiB2YWx1ZSkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwpkaWZmIC0tZ2l0IGEvV2Vi
S2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudEhhaWt1LmggYi9XZWJLaXQv
aGFpa3UvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50SGFpa3UuaAppbmRleCA4Nzg4YTVm
Li5kNDI3NjcwIDEwMDY0NAotLS0gYS9XZWJLaXQvaGFpa3UvV2ViQ29yZVN1cHBvcnQvSW5zcGVj
dG9yQ2xpZW50SGFpa3UuaAorKysgYi9XZWJLaXQvaGFpa3UvV2ViQ29yZVN1cHBvcnQvSW5zcGVj
dG9yQ2xpZW50SGFpa3UuaApAQCAtNDIsMjkgKzQyLDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0b3JEZXN0cm95ZWQoKTsK
IAotICAgICAgICB2aXJ0dWFsIFBhZ2UqIGNyZWF0ZVBhZ2UoKTsKLQotICAgICAgICB2aXJ0dWFs
IFN0cmluZyBsb2NhbGl6ZWRTdHJpbmdzVVJMKCk7Ci0KLSAgICAgICAgdmlydHVhbCBTdHJpbmcg
aGlkZGVuUGFuZWxzKCk7Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIHNob3dXaW5kb3coKTsKLSAg
ICAgICAgdmlydHVhbCB2b2lkIGNsb3NlV2luZG93KCk7Ci0KLSAgICAgICAgdmlydHVhbCB2b2lk
IGF0dGFjaFdpbmRvdygpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoV2luZG93KCk7Ci0K
LSAgICAgICAgdmlydHVhbCB2b2lkIHNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhl
aWdodCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBvcGVuSW5zcGVjdG9yRnJvbnRlbmQoV2ViQ29y
ZTo6SW5zcGVjdG9yQ29udHJvbGxlciopOwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBoaWdobGln
aHQoTm9kZSopOwogICAgICAgICB2aXJ0dWFsIHZvaWQgaGlkZUhpZ2hsaWdodCgpOwogCi0gICAg
ICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYgbmV3VVJM
KTsKLQogICAgICAgICB2aXJ0dWFsIHZvaWQgcG9wdWxhdGVTZXR0aW5nKGNvbnN0IFdlYkNvcmU6
OlN0cmluZyYga2V5LCBXZWJDb3JlOjpTdHJpbmcqIHZhbHVlKTsKICAgICAgICAgdmlydHVhbCB2
b2lkIHN0b3JlU2V0dGluZyhjb25zdCBXZWJDb3JlOjpTdHJpbmcmIGtleSwgY29uc3QgV2ViQ29y
ZTo6U3RyaW5nJiB2YWx1ZSk7Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIGluc3BlY3RvcldpbmRv
d09iamVjdENsZWFyZWQoKTsKICAgICB9OwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYg
LS1naXQgYS9XZWJLaXQvbWFjL0NoYW5nZUxvZyBiL1dlYktpdC9tYWMvQ2hhbmdlTG9nCmluZGV4
IDQ3Njc4NmIuLmM1MjUyYWUgMTAwNjQ0Ci0tLSBhL1dlYktpdC9tYWMvQ2hhbmdlTG9nCisrKyBi
L1dlYktpdC9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDkgQEAKKzIwMTAtMDMtMTAgIFl1cnkg
U2VtaWtoYXRza3kgPHl1cnlzQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbnRyb2R1Y2UgSW5zcGVjdG9yRnJvbnRlbmRDbGll
bnQgdGhhdCBwcm92aWRlcyBJbnNwZWN0b3JGcm9udGVuZCB3aXRoIGFuIGludGVyZmFjZSB0byB0
aGUgZW1iZWRkZXIuIEluc3BlY3RvckNsaWVudCBub3cgc2VydmVzIGFzIGEgZGVsZWdhdGUgZm9y
IEluc3BlY3RvckNvbnRyb2xsZXIgYW5kIGRvZXMgbm90IGNvbnRhaW4gbWV0aG9kcyBmb3IgbWFu
YWdpbmcgaW5zcGVjdG9yIGZyb250ZW5kIHdpbmRvdy4gVGhhdCBhbGxvd3MgdG8gY3JlYXRlIHJl
bW90ZSBJbnNwZWN0b3JGcm9udGVuZEhvc3QuCisKKyAgICAgICAgSW50cm9kdWNlIEluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50IHRoYXQgd291bGQgcHJvdmlkZSBJbnNwZWN0b3JGcm9udGVuZCB3aXRo
IGFuIGludGVyZmFjZSB0byB0aGUgZW1iZWRkZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTM1MDM2CisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9X
ZWJJbnNwZWN0b3JDbGllbnQuaDoKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0
b3JDbGllbnQubW06CisgICAgICAgIChXZWJJbnNwZWN0b3JDbGllbnQ6OldlYkluc3BlY3RvckNs
aWVudCk6CisgICAgICAgIChXZWJJbnNwZWN0b3JDbGllbnQ6Omluc3BlY3RvckRlc3Ryb3llZCk6
CisgICAgICAgIChXZWJJbnNwZWN0b3JDbGllbnQ6Om9wZW5JbnNwZWN0b3JGcm9udGVuZCk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3JDbGllbnQ6OmhpZ2hsaWdodCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3JDbGllbnQ6OmhpZGVIaWdobGlnaHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRl
bmRDbGllbnQ6OldlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50KToKKyAgICAgICAgKFdlYkluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50Ojpmcm9udGVuZExvYWRlZCk6CisgICAgICAgIChXZWJJbnNwZWN0
b3JGcm9udGVuZENsaWVudDo6bG9jYWxpemVkU3RyaW5nc1VSTCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3JGcm9udGVuZENsaWVudDo6aGlkZGVuUGFuZWxzKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50OjpicmluZ1RvRnJvbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJv
bnRlbmRDbGllbnQ6OmNsb3NlV2luZG93KToKKyAgICAgICAgKFdlYkluc3BlY3RvckZyb250ZW5k
Q2xpZW50OjphdHRhY2hXaW5kb3cpOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGll
bnQ6OmRldGFjaFdpbmRvdyk6CisgICAgICAgIChXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6
c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRD
bGllbnQ6Omluc3BlY3RlZFVSTENoYW5nZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRl
bmRDbGllbnQ6OnVwZGF0ZVdpbmRvd1RpdGxlKToKKyAgICAgICAgKC1bV2ViSW5zcGVjdG9yV2lu
ZG93Q29udHJvbGxlciBkZWFsbG9jXSk6CisgICAgICAgICgtW1dlYkluc3BlY3RvcldpbmRvd0Nv
bnRyb2xsZXIgd2luZG93U2hvdWxkQ2xvc2U6XSk6CisgICAgICAgICgtW1dlYkluc3BlY3Rvcldp
bmRvd0NvbnRyb2xsZXIgY2xvc2VdKToKKyAgICAgICAgKC1bV2ViSW5zcGVjdG9yV2luZG93Q29u
dHJvbGxlciBzaG93V2luZG93Ol0pOgorICAgICAgICAoLVtXZWJJbnNwZWN0b3JXaW5kb3dDb250
cm9sbGVyIGF0dGFjaF0pOgorICAgICAgICAoLVtXZWJJbnNwZWN0b3JXaW5kb3dDb250cm9sbGVy
IGRldGFjaF0pOgorICAgICAgICAoLVtXZWJJbnNwZWN0b3JXaW5kb3dDb250cm9sbGVyIGF0dGFj
aGVkXSk6CisgICAgICAgICgtW1dlYkluc3BlY3RvcldpbmRvd0NvbnRyb2xsZXIgc2V0RnJvbnRl
bmRDbGllbnQ6XSk6CisgICAgICAgICgtW1dlYkluc3BlY3RvcldpbmRvd0NvbnRyb2xsZXIgZGVz
dHJveUluc3BlY3RvclZpZXddKToKKyAgICAgICAgKC1bV2ViTm9kZUhpZ2hsaWdodGVyIGluaXRX
aXRoSW5zcGVjdGVkV2ViVmlldzpdKToKKyAgICAgICAgKC1bV2ViTm9kZUhpZ2hsaWdodGVyIGRl
YWxsb2NdKToKKyAgICAgICAgKC1bV2ViTm9kZUhpZ2hsaWdodGVyIGhpZ2hsaWdodE5vZGU6XSk6
CisgICAgICAgICgtW1dlYk5vZGVIaWdobGlnaHRlciBoaWRlSGlnaGxpZ2h0XSk6CisgICAgICAg
ICgtW1dlYk5vZGVIaWdobGlnaHRlciBkaWRBdHRhY2hXZWJOb2RlSGlnaGxpZ2h0Ol0pOgorICAg
ICAgICAoLVtXZWJOb2RlSGlnaGxpZ2h0ZXIgd2lsbERldGFjaFdlYk5vZGVIaWdobGlnaHQ6XSk6
CisgICAgICAgICogV2ViSW5zcGVjdG9yL1dlYkluc3BlY3Rvci5tbToKKyAgICAgICAgKC1bV2Vi
SW5zcGVjdG9yIGF0dGFjaDpdKToKKyAgICAgICAgKC1bV2ViSW5zcGVjdG9yIGRldGFjaDpdKToK
KwogMjAxMC0wMy0xMCAgSm9obiBTdWxsaXZhbiAgPHN1bGxpdmFuQGFwcGxlLmNvbT4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBUaW0gSGF0Y2hlci4KZGlmZiAtLWdpdCBhL1dlYktpdC9tYWMvV2Vi
Q29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmggYi9XZWJLaXQvbWFjL1dlYkNvcmVTdXBw
b3J0L1dlYkluc3BlY3RvckNsaWVudC5oCmluZGV4IDY0NjIxZjguLmVlODFiMjUgMTAwNjQ0Ci0t
LSBhL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmgKKysrIGIv
V2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuaApAQCAtMjcsMTUg
KzI3LDE4IEBACiAgKi8KIAogI2ltcG9ydCA8V2ViQ29yZS9JbnNwZWN0b3JDbGllbnQuaD4KKyNp
bXBvcnQgPFdlYkNvcmUvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5oPgogI2ltcG9ydCA8
V2ViQ29yZS9QbGF0Zm9ybVN0cmluZy5oPgogCiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAK
ICNpZmRlZiBfX09CSkNfXwogQGNsYXNzIFdlYkluc3BlY3RvcldpbmRvd0NvbnRyb2xsZXI7CitA
Y2xhc3MgV2ViTm9kZUhpZ2hsaWdodGVyOwogQGNsYXNzIFdlYlZpZXc7CiAjZWxzZQogY2xhc3Mg
V2ViSW5zcGVjdG9yV2luZG93Q29udHJvbGxlcjsKK2NsYXNzIFdlYk5vZGVIaWdobGlnaHRlcjsK
IGNsYXNzIFdlYlZpZXc7CiAjZW5kaWYKIApAQCAtNDUsMzIgKzQ4LDQxIEBAIHB1YmxpYzoKIAog
ICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0b3JEZXN0cm95ZWQoKTsKIAotICAgIHZpcnR1YWwgV2Vi
Q29yZTo6UGFnZSogY3JlYXRlUGFnZSgpOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6U3RyaW5nIGxv
Y2FsaXplZFN0cmluZ3NVUkwoKTsKLQotICAgIHZpcnR1YWwgV2ViQ29yZTo6U3RyaW5nIGhpZGRl
blBhbmVscygpOwotCi0gICAgdmlydHVhbCB2b2lkIHNob3dXaW5kb3coKTsKLSAgICB2aXJ0dWFs
IHZvaWQgY2xvc2VXaW5kb3coKTsKLQotICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hXaW5kb3coKTsK
LSAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoV2luZG93KCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0
QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KTsKKyAgICB2aXJ0dWFsIHZvaWQg
b3Blbkluc3BlY3RvckZyb250ZW5kKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXIqKTsKIAog
ICAgIHZpcnR1YWwgdm9pZCBoaWdobGlnaHQoV2ViQ29yZTo6Tm9kZSopOwogICAgIHZpcnR1YWwg
dm9pZCBoaWRlSGlnaGxpZ2h0KCk7Ci0gICAgdmlydHVhbCB2b2lkIGluc3BlY3RlZFVSTENoYW5n
ZWQoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBuZXdVUkwpOwogCiAgICAgdmlydHVhbCB2b2lkIHBv
cHVsYXRlU2V0dGluZyhjb25zdCBXZWJDb3JlOjpTdHJpbmcmIGtleSwgV2ViQ29yZTo6U3RyaW5n
KiB2YWx1ZSk7CiAgICAgdmlydHVhbCB2b2lkIHN0b3JlU2V0dGluZyhjb25zdCBXZWJDb3JlOjpT
dHJpbmcmIGtleSwgY29uc3QgV2ViQ29yZTo6U3RyaW5nJiB2YWx1ZSk7CiAKLSAgICB2aXJ0dWFs
IHZvaWQgaW5zcGVjdG9yV2luZG93T2JqZWN0Q2xlYXJlZCgpOworcHJpdmF0ZToKKyAgICBXZWJW
aWV3ICptX3dlYlZpZXc7CisgICAgUmV0YWluUHRyPFdlYk5vZGVIaWdobGlnaHRlcj4gbV9oaWdo
bGlnaHRlcjsKK307CisKK2NsYXNzIFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50IDogcHVibGlj
IFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwgeworcHVibGljOgorICAgIFdl
Ykluc3BlY3RvckZyb250ZW5kQ2xpZW50KFdlYlZpZXcqLCBXZWJJbnNwZWN0b3JXaW5kb3dDb250
cm9sbGVyKiwgV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlciosIFdlYkNvcmU6OlBhZ2UqKTsK
KworICAgIHZpcnR1YWwgdm9pZCBmcm9udGVuZExvYWRlZCgpOworICAgIAorICAgIHZpcnR1YWwg
V2ViQ29yZTo6U3RyaW5nIGxvY2FsaXplZFN0cmluZ3NVUkwoKTsKKyAgICB2aXJ0dWFsIFdlYkNv
cmU6OlN0cmluZyBoaWRkZW5QYW5lbHMoKTsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgYnJpbmdU
b0Zyb250KCk7CisgICAgdmlydHVhbCB2b2lkIGNsb3NlV2luZG93KCk7CisgICAgCisgICAgdmly
dHVhbCB2b2lkIGF0dGFjaFdpbmRvdygpOworICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hXaW5kb3co
KTsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWdu
ZWQgaGVpZ2h0KTsKKyAgICB2aXJ0dWFsIHZvaWQgaW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBX
ZWJDb3JlOjpTdHJpbmcmIG5ld1VSTCk7CiAKIHByaXZhdGU6CiAgICAgdm9pZCB1cGRhdGVXaW5k
b3dUaXRsZSgpIGNvbnN0OwogCi0gICAgV2ViVmlldyAqbV93ZWJWaWV3OworICAgIFdlYlZpZXcq
IG1faW5zcGVjdGVkV2ViVmlldzsKICAgICBSZXRhaW5QdHI8V2ViSW5zcGVjdG9yV2luZG93Q29u
dHJvbGxlcj4gbV93aW5kb3dDb250cm9sbGVyOwogICAgIFdlYkNvcmU6OlN0cmluZyBtX2luc3Bl
Y3RlZFVSTDsKIH07CmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYklu
c3BlY3RvckNsaWVudC5tbSBiL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9y
Q2xpZW50Lm1tCmluZGV4IGM1ZjE3MjkuLmFiYzZlNjAgMTAwNjQ0Ci0tLSBhL1dlYktpdC9tYWMv
V2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50Lm1tCisrKyBiL1dlYktpdC9tYWMvV2Vi
Q29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50Lm1tCkBAIC00MSw2ICs0MSw3IEBACiAjaW1w
b3J0IDxXZWJDb3JlL1BhZ2UuaD4KICNpbXBvcnQgPFdlYktpdC9ET01FeHRlbnNpb25zLmg+CiAj
aW1wb3J0IDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KKyNpbXBvcnQgPHd0Zi9QYXNzT3duUHRy
Lmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC00OCw0NSArNDksOTAgQEAgdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CiBAcHJpdmF0ZQogICAgIFdlYlZpZXcgKl9pbnNwZWN0ZWRX
ZWJWaWV3OwogICAgIFdlYlZpZXcgKl93ZWJWaWV3OwotICAgIFdlYk5vZGVIaWdobGlnaHQgKl9j
dXJyZW50SGlnaGxpZ2h0OworICAgIFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50KiBfZnJvbnRl
bmRDbGllbnQ7CiAgICAgQk9PTCBfYXR0YWNoZWRUb0luc3BlY3RlZFdlYlZpZXc7CiAgICAgQk9P
TCBfc2hvdWxkQXR0YWNoOwogICAgIEJPT0wgX3Zpc2libGU7Ci0gICAgQk9PTCBfbW92aW5nV2lu
ZG93czsKKyAgICBCT09MIF9kZXN0cm95aW5nSW5zcGVjdG9yVmlldzsKIH0KIC0gKGlkKWluaXRX
aXRoSW5zcGVjdGVkV2ViVmlldzooV2ViVmlldyAqKXdlYlZpZXc7Ci0tIChCT09MKWluc3BlY3Rv
clZpc2libGU7CiAtIChXZWJWaWV3ICopd2ViVmlldzsKIC0gKHZvaWQpYXR0YWNoOwogLSAodm9p
ZClkZXRhY2g7CistIChCT09MKWF0dGFjaGVkOworLSAodm9pZClzZXRGcm9udGVuZENsaWVudDoo
V2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQqKWZyb250ZW5kQ2xpZW50OwogLSAodm9pZClzZXRB
dHRhY2hlZFdpbmRvd0hlaWdodDoodW5zaWduZWQpaGVpZ2h0OworLSAodm9pZClkZXN0cm95SW5z
cGVjdG9yVmlldzsKK0BlbmQKKworI3ByYWdtYSBtYXJrIC0KKworQGludGVyZmFjZSBXZWJOb2Rl
SGlnaGxpZ2h0ZXIgOiBOU09iamVjdCB7CitAcHJpdmF0ZQorICAgIFdlYlZpZXcgKl9pbnNwZWN0
ZWRXZWJWaWV3OworICAgIFdlYk5vZGVIaWdobGlnaHQgKl9jdXJyZW50SGlnaGxpZ2h0OworfQor
LSAoaWQpaW5pdFdpdGhJbnNwZWN0ZWRXZWJWaWV3OihXZWJWaWV3ICopd2ViVmlldzsKIC0gKHZv
aWQpaGlnaGxpZ2h0Tm9kZTooRE9NTm9kZSAqKW5vZGU7CiAtICh2b2lkKWhpZGVIaWdobGlnaHQ7
CiBAZW5kCiAKICNwcmFnbWEgbWFyayAtCiAKKwogV2ViSW5zcGVjdG9yQ2xpZW50OjpXZWJJbnNw
ZWN0b3JDbGllbnQoV2ViVmlldyAqd2ViVmlldykKIDogbV93ZWJWaWV3KHdlYlZpZXcpCissIG1f
aGlnaGxpZ2h0ZXIoQWRvcHROUywgW1tXZWJOb2RlSGlnaGxpZ2h0ZXIgYWxsb2NdIGluaXRXaXRo
SW5zcGVjdGVkV2ViVmlldzp3ZWJWaWV3XSkKIHsKIH0KIAogdm9pZCBXZWJJbnNwZWN0b3JDbGll
bnQ6Omluc3BlY3RvckRlc3Ryb3llZCgpCiB7Ci0gICAgW1ttX3dpbmRvd0NvbnRyb2xsZXIuZ2V0
KCkgd2ViVmlld10gY2xvc2VdOwogICAgIGRlbGV0ZSB0aGlzOwogfQogCi1QYWdlKiBXZWJJbnNw
ZWN0b3JDbGllbnQ6OmNyZWF0ZVBhZ2UoKQordm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6Om9wZW5J
bnNwZWN0b3JGcm9udGVuZChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVy
KQoreworICAgIFJldGFpblB0cjxXZWJJbnNwZWN0b3JXaW5kb3dDb250cm9sbGVyPiB3aW5kb3dD
b250cm9sbGVyKEFkb3B0TlMsIFtbV2ViSW5zcGVjdG9yV2luZG93Q29udHJvbGxlciBhbGxvY10g
aW5pdFdpdGhJbnNwZWN0ZWRXZWJWaWV3Om1fd2ViVmlld10pOworICAgIFBhZ2UqIGZyb250ZW5k
UGFnZSA9IGNvcmUoW3dpbmRvd0NvbnRyb2xsZXIuZ2V0KCkgd2ViVmlld10pOworCisgICAgZnJv
bnRlbmRQYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnNldEluc3BlY3RvckZyb250ZW5kQ2xp
ZW50KG5ldyBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudChtX3dlYlZpZXcsIHdpbmRvd0NvbnRy
b2xsZXIuZ2V0KCksIGluc3BlY3RvckNvbnRyb2xsZXIsIGZyb250ZW5kUGFnZSkpOworfQorCit2
b2lkIFdlYkluc3BlY3RvckNsaWVudDo6aGlnaGxpZ2h0KE5vZGUqIG5vZGUpCit7CisgICAgW21f
aGlnaGxpZ2h0ZXIuZ2V0KCkgaGlnaGxpZ2h0Tm9kZTpraXQobm9kZSldOworfQorCit2b2lkIFdl
Ykluc3BlY3RvckNsaWVudDo6aGlkZUhpZ2hsaWdodCgpCiB7Ci0gICAgaWYgKG1fd2luZG93Q29u
dHJvbGxlcikKLSAgICAgICAgW1ttX3dpbmRvd0NvbnRyb2xsZXIuZ2V0KCkgd2ViVmlld10gY2xv
c2VdOwotICAgIG1fd2luZG93Q29udHJvbGxlci5hZG9wdE5TKFtbV2ViSW5zcGVjdG9yV2luZG93
Q29udHJvbGxlciBhbGxvY10gaW5pdFdpdGhJbnNwZWN0ZWRXZWJWaWV3Om1fd2ViVmlld10pOwor
ICAgIFttX2hpZ2hsaWdodGVyLmdldCgpIGhpZGVIaWdobGlnaHRdOworfQogCi0gICAgcmV0dXJu
IGNvcmUoW21fd2luZG93Q29udHJvbGxlci5nZXQoKSB3ZWJWaWV3XSk7CitXZWJJbnNwZWN0b3JG
cm9udGVuZENsaWVudDo6V2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQoV2ViVmlldyogaW5zcGVj
dGVkV2ViVmlldywgV2ViSW5zcGVjdG9yV2luZG93Q29udHJvbGxlciogd2luZG93Q29udHJvbGxl
ciwgSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciwgUGFnZSogZnJvbnRl
bmRQYWdlKQorICAgIDogSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbChpbnNwZWN0b3JDb250
cm9sbGVyLCAgZnJvbnRlbmRQYWdlKQorICAgICwgbV9pbnNwZWN0ZWRXZWJWaWV3KGluc3BlY3Rl
ZFdlYlZpZXcpCisgICAgLCBtX3dpbmRvd0NvbnRyb2xsZXIod2luZG93Q29udHJvbGxlcikKK3sK
KyAgICBbd2luZG93Q29udHJvbGxlciBzZXRGcm9udGVuZENsaWVudDp0aGlzXTsKIH0KIAotU3Ry
aW5nIFdlYkluc3BlY3RvckNsaWVudDo6bG9jYWxpemVkU3RyaW5nc1VSTCgpCit2b2lkIFdlYklu
c3BlY3RvckZyb250ZW5kQ2xpZW50Ojpmcm9udGVuZExvYWRlZCgpCit7CisgICAgSW5zcGVjdG9y
RnJvbnRlbmRDbGllbnRMb2NhbDo6ZnJvbnRlbmRMb2FkZWQoKTsKKworICAgIFdlYkZyYW1lICpm
cmFtZSA9IFttX2luc3BlY3RlZFdlYlZpZXcgbWFpbkZyYW1lXTsKKyAgICAKKyAgICBXZWJGcmFt
ZUxvYWREZWxlZ2F0ZUltcGxlbWVudGF0aW9uQ2FjaGUqIGltcGxlbWVudGF0aW9ucyA9IFdlYlZp
ZXdHZXRGcmFtZUxvYWREZWxlZ2F0ZUltcGxlbWVudGF0aW9ucyhtX2luc3BlY3RlZFdlYlZpZXcp
OworICAgIGlmIChpbXBsZW1lbnRhdGlvbnMtPmRpZENsZWFySW5zcGVjdG9yV2luZG93T2JqZWN0
Rm9yRnJhbWVGdW5jKQorICAgICAgICBDYWxsRnJhbWVMb2FkRGVsZWdhdGUoaW1wbGVtZW50YXRp
b25zLT5kaWRDbGVhckluc3BlY3RvcldpbmRvd09iamVjdEZvckZyYW1lRnVuYywgbV9pbnNwZWN0
ZWRXZWJWaWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQHNlbGVjdG9yKHdlYlZp
ZXc6ZGlkQ2xlYXJJbnNwZWN0b3JXaW5kb3dPYmplY3Q6Zm9yRnJhbWU6KSwgW2ZyYW1lIHdpbmRv
d09iamVjdF0sIGZyYW1lKTsKKworICAgIGJvb2wgYXR0YWNoZWQgPSBbbV93aW5kb3dDb250cm9s
bGVyLmdldCgpIGF0dGFjaGVkXTsKKyAgICBzZXRBdHRhY2hlZFdpbmRvdyhhdHRhY2hlZCk7Cit9
CisKK1N0cmluZyBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6bG9jYWxpemVkU3RyaW5nc1VS
TCgpCiB7CiAgICAgTlNTdHJpbmcgKnBhdGggPSBbW05TQnVuZGxlIGJ1bmRsZVdpdGhJZGVudGlm
aWVyOkAiY29tLmFwcGxlLldlYkNvcmUiXSBwYXRoRm9yUmVzb3VyY2U6QCJsb2NhbGl6ZWRTdHJp
bmdzIiBvZlR5cGU6QCJqcyJdOwogICAgIGlmIChwYXRoKQpAQCAtOTQsNyArMTQwLDcgQEAgU3Ry
aW5nIFdlYkluc3BlY3RvckNsaWVudDo6bG9jYWxpemVkU3RyaW5nc1VSTCgpCiAgICAgcmV0dXJu
IFN0cmluZygpOwogfQogCi1TdHJpbmcgV2ViSW5zcGVjdG9yQ2xpZW50OjpoaWRkZW5QYW5lbHMo
KQorU3RyaW5nIFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpoaWRkZW5QYW5lbHMoKQogewog
ICAgIE5TU3RyaW5nICpoaWRkZW5QYW5lbHMgPSBbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNl
ckRlZmF1bHRzXSBzdHJpbmdGb3JLZXk6QCJXZWJLaXRJbnNwZWN0b3JIaWRkZW5QYW5lbHMiXTsK
ICAgICBpZiAoaGlkZGVuUGFuZWxzKQpAQCAtMTAyLDYzICsxNDgsNDUgQEAgU3RyaW5nIFdlYklu
c3BlY3RvckNsaWVudDo6aGlkZGVuUGFuZWxzKCkKICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAK
LXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpzaG93V2luZG93KCkKK3ZvaWQgV2ViSW5zcGVjdG9y
RnJvbnRlbmRDbGllbnQ6OmJyaW5nVG9Gcm9udCgpCiB7CiAgICAgdXBkYXRlV2luZG93VGl0bGUo
KTsKICAgICBbbV93aW5kb3dDb250cm9sbGVyLmdldCgpIHNob3dXaW5kb3c6bmlsXTsKIH0KIAot
dm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmNsb3NlV2luZG93KCkKK3ZvaWQgV2ViSW5zcGVjdG9y
RnJvbnRlbmRDbGllbnQ6OmNsb3NlV2luZG93KCkKIHsKLSAgICBbbV93aW5kb3dDb250cm9sbGVy
LmdldCgpIGNsb3NlXTsKKyAgICBbbV93aW5kb3dDb250cm9sbGVyLmdldCgpIGRlc3Ryb3lJbnNw
ZWN0b3JWaWV3XTsKIH0KIAotdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmF0dGFjaFdpbmRvdygp
Cit2b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjphdHRhY2hXaW5kb3coKQogewogICAg
IFttX3dpbmRvd0NvbnRyb2xsZXIuZ2V0KCkgYXR0YWNoXTsKKyAgICByZXN0b3JlQXR0YWNoZWRX
aW5kb3dIZWlnaHQoKTsKIH0KIAotdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmRldGFjaFdpbmRv
dygpCit2b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpkZXRhY2hXaW5kb3coKQogewog
ICAgIFttX3dpbmRvd0NvbnRyb2xsZXIuZ2V0KCkgZGV0YWNoXTsKIH0KIAotdm9pZCBXZWJJbnNw
ZWN0b3JDbGllbnQ6OnNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkKK3Zv
aWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OnNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVu
c2lnbmVkIGhlaWdodCkKIHsKICAgICBbbV93aW5kb3dDb250cm9sbGVyLmdldCgpIHNldEF0dGFj
aGVkV2luZG93SGVpZ2h0OmhlaWdodF07CiB9CiAKLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50Ojpo
aWdobGlnaHQoTm9kZSogbm9kZSkKLXsKLSAgICBbbV93aW5kb3dDb250cm9sbGVyLmdldCgpIGhp
Z2hsaWdodE5vZGU6a2l0KG5vZGUpXTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6Omhp
ZGVIaWdobGlnaHQoKQotewotICAgIFttX3dpbmRvd0NvbnRyb2xsZXIuZ2V0KCkgaGlkZUhpZ2hs
aWdodF07Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjppbnNwZWN0ZWRVUkxDaGFuZ2Vk
KGNvbnN0IFN0cmluZyYgbmV3VVJMKQordm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6
aW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIG5ld1VSTCkKIHsKICAgICBtX2luc3Bl
Y3RlZFVSTCA9IG5ld1VSTDsKICAgICB1cGRhdGVXaW5kb3dUaXRsZSgpOwogfQogCi12b2lkIFdl
Ykluc3BlY3RvckNsaWVudDo6dXBkYXRlV2luZG93VGl0bGUoKSBjb25zdAordm9pZCBXZWJJbnNw
ZWN0b3JGcm9udGVuZENsaWVudDo6dXBkYXRlV2luZG93VGl0bGUoKSBjb25zdAogewogICAgIE5T
U3RyaW5nICp0aXRsZSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OlVJX1NUUklORygiV2Vi
IEluc3BlY3RvciDigJQgJUAiLCAiV2ViIEluc3BlY3RvciB3aW5kb3cgdGl0bGUiKSwgKE5TU3Ry
aW5nICopbV9pbnNwZWN0ZWRVUkxdOwogICAgIFtbbV93aW5kb3dDb250cm9sbGVyLmdldCgpIHdp
bmRvd10gc2V0VGl0bGU6dGl0bGVdOwogfQogCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6aW5z
cGVjdG9yV2luZG93T2JqZWN0Q2xlYXJlZCgpCi17Ci0gICAgV2ViRnJhbWUgKmZyYW1lID0gW21f
d2ViVmlldyBtYWluRnJhbWVdOwotICAgIAotICAgIFdlYkZyYW1lTG9hZERlbGVnYXRlSW1wbGVt
ZW50YXRpb25DYWNoZSogaW1wbGVtZW50YXRpb25zID0gV2ViVmlld0dldEZyYW1lTG9hZERlbGVn
YXRlSW1wbGVtZW50YXRpb25zKG1fd2ViVmlldyk7Ci0gICAgaWYgKGltcGxlbWVudGF0aW9ucy0+
ZGlkQ2xlYXJJbnNwZWN0b3JXaW5kb3dPYmplY3RGb3JGcmFtZUZ1bmMpCi0gICAgICAgIENhbGxG
cmFtZUxvYWREZWxlZ2F0ZShpbXBsZW1lbnRhdGlvbnMtPmRpZENsZWFySW5zcGVjdG9yV2luZG93
T2JqZWN0Rm9yRnJhbWVGdW5jLCBtX3dlYlZpZXcsCi0gICAgICAgICAgQHNlbGVjdG9yKHdlYlZp
ZXc6ZGlkQ2xlYXJJbnNwZWN0b3JXaW5kb3dPYmplY3Q6Zm9yRnJhbWU6KSwgW2ZyYW1lIHdpbmRv
d09iamVjdF0sIGZyYW1lKTsKLX0KIAogI3ByYWdtYSBtYXJrIC0KIApAQCAtMjIxLDE4ICsyNDks
MTIgQEAgdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6Omluc3BlY3RvcldpbmRvd09iamVjdENsZWFy
ZWQoKQogCiAtICh2b2lkKWRlYWxsb2MKIHsKLSAgICBBU1NFUlQoIV9jdXJyZW50SGlnaGxpZ2h0
KTsKICAgICBbX3dlYlZpZXcgcmVsZWFzZV07CiAgICAgW3N1cGVyIGRlYWxsb2NdOwogfQogCiAj
cHJhZ21hIG1hcmsgLQogCi0tIChCT09MKWluc3BlY3RvclZpc2libGUKLXsKLSAgICByZXR1cm4g
X3Zpc2libGU7Ci19Ci0KIC0gKFdlYlZpZXcgKil3ZWJWaWV3CiB7CiAgICAgcmV0dXJuIF93ZWJW
aWV3OwpAQCAtMjcxLDExICsyOTMsNyBAQCB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6aW5zcGVj
dG9yV2luZG93T2JqZWN0Q2xlYXJlZCgpCiAKIC0gKEJPT0wpd2luZG93U2hvdWxkQ2xvc2U6KGlk
KXNlbmRlcgogewotICAgIF92aXNpYmxlID0gTk87Ci0KLSAgICBbX2luc3BlY3RlZFdlYlZpZXcg
cGFnZV0tPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0V2luZG93VmlzaWJsZShmYWxzZSk7Ci0K
LSAgICBbc2VsZiBoaWRlSGlnaGxpZ2h0XTsKKyAgICBbc2VsZiBkZXN0cm95SW5zcGVjdG9yVmll
d107CiAKICAgICByZXR1cm4gWUVTOwogfQpAQCAtMjg3LDExICszMDUsNiBAQCB2b2lkIFdlYklu
c3BlY3RvckNsaWVudDo6aW5zcGVjdG9yV2luZG93T2JqZWN0Q2xlYXJlZCgpCiAKICAgICBfdmlz
aWJsZSA9IE5POwogCi0gICAgaWYgKCFfbW92aW5nV2luZG93cykKLSAgICAgICAgW19pbnNwZWN0
ZWRXZWJWaWV3IHBhZ2VdLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnNldFdpbmRvd1Zpc2libGUo
ZmFsc2UpOwotCi0gICAgW3NlbGYgaGlkZUhpZ2hsaWdodF07Ci0KICAgICBpZiAoX2F0dGFjaGVk
VG9JbnNwZWN0ZWRXZWJWaWV3KSB7CiAgICAgICAgIGlmIChbX2luc3BlY3RlZFdlYlZpZXcgX2lz
Q2xvc2VkXSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTMyOCw3ICszNDEsNyBAQCB2b2lkIFdl
Ykluc3BlY3RvckNsaWVudDo6aW5zcGVjdG9yV2luZG93T2JqZWN0Q2xlYXJlZCgpCiAgICAgU3Ry
aW5nIHNob3VsZEF0dGFjaCA9IFtfaW5zcGVjdGVkV2ViVmlldyBwYWdlXS0+aW5zcGVjdG9yQ29u
dHJvbGxlcigpLT5zZXR0aW5nKEluc3BlY3RvckNvbnRyb2xsZXI6Omluc3BlY3RvclN0YXJ0c0F0
dGFjaGVkU2V0dGluZ05hbWUoKSk7CiAgICAgX3Nob3VsZEF0dGFjaCA9IHNob3VsZEF0dGFjaCAh
PSAiZmFsc2UiOwogICAgIAotICAgIGlmIChfc2hvdWxkQXR0YWNoICYmICFbX2luc3BlY3RlZFdl
YlZpZXcgcGFnZV0tPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+Y2FuQXR0YWNoV2luZG93KCkpCisg
ICAgaWYgKF9zaG91bGRBdHRhY2ggJiYgIV9mcm9udGVuZENsaWVudC0+Y2FuQXR0YWNoV2luZG93
KCkpCiAgICAgICAgIF9zaG91bGRBdHRhY2ggPSBOTzsKIAogICAgIGlmIChfc2hvdWxkQXR0YWNo
KSB7CkBAIC0zNTIsOCArMzY1LDYgQEAgdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6Omluc3BlY3Rv
cldpbmRvd09iamVjdENsZWFyZWQoKQogCiAgICAgICAgIFtzdXBlciBzaG93V2luZG93Om5pbF07
CiAgICAgfQotCi0gICAgW19pbnNwZWN0ZWRXZWJWaWV3IHBhZ2VdLT5pbnNwZWN0b3JDb250cm9s
bGVyKCktPnNldFdpbmRvd1Zpc2libGUodHJ1ZSwgX3Nob3VsZEF0dGFjaCk7CiB9CiAKICNwcmFn
bWEgbWFyayAtCkBAIC0zNjQsMTIgKzM3NSw5IEBAIHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50Ojpp
bnNwZWN0b3JXaW5kb3dPYmplY3RDbGVhcmVkKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgW19p
bnNwZWN0ZWRXZWJWaWV3IHBhZ2VdLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnNldFNldHRpbmco
SW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zcGVjdG9yU3RhcnRzQXR0YWNoZWRTZXR0aW5nTmFtZSgp
LCAidHJ1ZSIpOwotICAgIF9tb3ZpbmdXaW5kb3dzID0gWUVTOwogCiAgICAgW3NlbGYgY2xvc2Vd
OwogICAgIFtzZWxmIHNob3dXaW5kb3c6bmlsXTsKLQotICAgIF9tb3ZpbmdXaW5kb3dzID0gTk87
CiB9CiAKIC0gKHZvaWQpZGV0YWNoCkBAIC0zNzgsMTMgKzM4NiwxOSBAQCB2b2lkIFdlYkluc3Bl
Y3RvckNsaWVudDo6aW5zcGVjdG9yV2luZG93T2JqZWN0Q2xlYXJlZCgpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIFtfaW5zcGVjdGVkV2ViVmlldyBwYWdlXS0+aW5zcGVjdG9yQ29udHJvbGxlcigp
LT5zZXRTZXR0aW5nKEluc3BlY3RvckNvbnRyb2xsZXI6Omluc3BlY3RvclN0YXJ0c0F0dGFjaGVk
U2V0dGluZ05hbWUoKSwgImZhbHNlIik7Ci0gICAgX21vdmluZ1dpbmRvd3MgPSBZRVM7CiAKICAg
ICBbc2VsZiBjbG9zZV07CiAgICAgW3NlbGYgc2hvd1dpbmRvdzpuaWxdOworfQogCi0gICAgX21v
dmluZ1dpbmRvd3MgPSBOTzsKKy0gKEJPT0wpYXR0YWNoZWQKK3sKKyAgICByZXR1cm4gX2F0dGFj
aGVkVG9JbnNwZWN0ZWRXZWJWaWV3OworfQogCistICh2b2lkKXNldEZyb250ZW5kQ2xpZW50OihX
ZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudCopZnJvbnRlbmRDbGllbnQKK3sKKyAgICBfZnJvbnRl
bmRDbGllbnQgPSBmcm9udGVuZENsaWVudDsKIH0KIAogLSAodm9pZClzZXRBdHRhY2hlZFdpbmRv
d0hlaWdodDoodW5zaWduZWQpaGVpZ2h0CkBAIC00MDUsMjkgKzQxOSwxNyBAQCB2b2lkIFdlYklu
c3BlY3RvckNsaWVudDo6aW5zcGVjdG9yV2luZG93T2JqZWN0Q2xlYXJlZCgpCiAgICAgW2ZyYW1l
VmlldyBzZXRGcmFtZTpmcmFtZVZpZXdSZWN0XTsKIH0KIAotI3ByYWdtYSBtYXJrIC0KLQotLSAo
dm9pZCloaWdobGlnaHROb2RlOihET01Ob2RlICopbm9kZQorLSAodm9pZClkZXN0cm95SW5zcGVj
dG9yVmlldwogewotICAgIC8vIFRoZSBzY3JvbGx2aWV3J3MgY29udGVudCB2aWV3IHN0YXlzIGFy
b3VuZCBiZXR3ZWVuIHBhZ2UgbmF2aWdhdGlvbnMsIHNvIHRhcmdldCBpdAotICAgIE5TVmlldyAq
dmlldyA9IFtbW1tbX2luc3BlY3RlZFdlYlZpZXcgbWFpbkZyYW1lXSBmcmFtZVZpZXddIGRvY3Vt
ZW50Vmlld10gZW5jbG9zaW5nU2Nyb2xsVmlld10gY29udGVudFZpZXddOwotICAgIGlmICghW3Zp
ZXcgd2luZG93XSkKLSAgICAgICAgcmV0dXJuOyAvLyBza2lwIHRoZSBoaWdobGlnaHQgaWYgd2Ug
aGF2ZSBubyB3aW5kb3cgKGUuZy4gaGlkZGVuIHRhYikKLQotICAgIGlmICghX2N1cnJlbnRIaWdo
bGlnaHQpIHsKLSAgICAgICAgX2N1cnJlbnRIaWdobGlnaHQgPSBbW1dlYk5vZGVIaWdobGlnaHQg
YWxsb2NdIGluaXRXaXRoVGFyZ2V0Vmlldzp2aWV3IGluc3BlY3RvckNvbnRyb2xsZXI6W19pbnNw
ZWN0ZWRXZWJWaWV3IHBhZ2VdLT5pbnNwZWN0b3JDb250cm9sbGVyKCldOwotICAgICAgICBbX2N1
cnJlbnRIaWdobGlnaHQgc2V0RGVsZWdhdGU6c2VsZl07Ci0gICAgICAgIFtfY3VycmVudEhpZ2hs
aWdodCBhdHRhY2hdOwotICAgIH0gZWxzZQotICAgICAgICBbW19jdXJyZW50SGlnaGxpZ2h0IGhp
Z2hsaWdodFZpZXddIHNldE5lZWRzRGlzcGxheTpZRVNdOwotfQorICAgIGlmIChfZGVzdHJveWlu
Z0luc3BlY3RvclZpZXcpCisgICAgICAgIHJldHVybjsKKyAgICBfZGVzdHJveWluZ0luc3BlY3Rv
clZpZXcgPSBZRVM7CiAKLS0gKHZvaWQpaGlkZUhpZ2hsaWdodAotewotICAgIFtfY3VycmVudEhp
Z2hsaWdodCBkZXRhY2hdOwotICAgIFtfY3VycmVudEhpZ2hsaWdodCBzZXREZWxlZ2F0ZTpuaWxd
OwotICAgIFtfY3VycmVudEhpZ2hsaWdodCByZWxlYXNlXTsKLSAgICBfY3VycmVudEhpZ2hsaWdo
dCA9IG5pbDsKKyAgICBpZiAoX2F0dGFjaGVkVG9JbnNwZWN0ZWRXZWJWaWV3KQorICAgICAgICBb
c2VsZiBjbG9zZV07CisgICAgX3Zpc2libGUgPSBOTzsKKyAgICBbX2luc3BlY3RlZFdlYlZpZXcg
cGFnZV0tPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+Y2xvc2UoKTsKKyAgICBbX3dlYlZpZXcgY2xv
c2VdOwogfQogCiAjcHJhZ21hIG1hcmsgLQpAQCAtNDk3LDMgKzQ5OSw2MCBAQCB2b2lkIFdlYklu
c3BlY3RvckNsaWVudDo6aW5zcGVjdG9yV2luZG93T2JqZWN0Q2xlYXJlZCgpCiB9CiAKIEBlbmQK
KworCisjcHJhZ21hIG1hcmsgLQorCitAaW1wbGVtZW50YXRpb24gV2ViTm9kZUhpZ2hsaWdodGVy
CistIChpZClpbml0V2l0aEluc3BlY3RlZFdlYlZpZXc6KFdlYlZpZXcgKil3ZWJWaWV3Cit7Cisg
ICAgLy8gRG9uJ3QgcmV0YWluIHRvIGF2b2lkIGEgY2lyY3VsYXIgcmVmZXJlbmNlCisgICAgX2lu
c3BlY3RlZFdlYlZpZXcgPSB3ZWJWaWV3OworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lk
KWRlYWxsb2MKK3sKKyAgICBBU1NFUlQoIV9jdXJyZW50SGlnaGxpZ2h0KTsKKyAgICBbc3VwZXIg
ZGVhbGxvY107Cit9CisKKyNwcmFnbWEgbWFyayAtCisKKy0gKHZvaWQpaGlnaGxpZ2h0Tm9kZToo
RE9NTm9kZSAqKW5vZGUKK3sKKyAgICAvLyBUaGUgc2Nyb2xsdmlldydzIGNvbnRlbnQgdmlldyBz
dGF5cyBhcm91bmQgYmV0d2VlbiBwYWdlIG5hdmlnYXRpb25zLCBzbyB0YXJnZXQgaXQKKyAgICBO
U1ZpZXcgKnZpZXcgPSBbW1tbW19pbnNwZWN0ZWRXZWJWaWV3IG1haW5GcmFtZV0gZnJhbWVWaWV3
XSBkb2N1bWVudFZpZXddIGVuY2xvc2luZ1Njcm9sbFZpZXddIGNvbnRlbnRWaWV3XTsKKyAgICBp
ZiAoIVt2aWV3IHdpbmRvd10pCisgICAgICAgIHJldHVybjsgLy8gc2tpcCB0aGUgaGlnaGxpZ2h0
IGlmIHdlIGhhdmUgbm8gd2luZG93IChlLmcuIGhpZGRlbiB0YWIpCisgICAgCisgICAgaWYgKCFf
Y3VycmVudEhpZ2hsaWdodCkgeworICAgICAgICBfY3VycmVudEhpZ2hsaWdodCA9IFtbV2ViTm9k
ZUhpZ2hsaWdodCBhbGxvY10gaW5pdFdpdGhUYXJnZXRWaWV3OnZpZXcgaW5zcGVjdG9yQ29udHJv
bGxlcjpbX2luc3BlY3RlZFdlYlZpZXcgcGFnZV0tPmluc3BlY3RvckNvbnRyb2xsZXIoKV07Cisg
ICAgICAgIFtfY3VycmVudEhpZ2hsaWdodCBzZXREZWxlZ2F0ZTpzZWxmXTsKKyAgICAgICAgW19j
dXJyZW50SGlnaGxpZ2h0IGF0dGFjaF07CisgICAgfSBlbHNlCisgICAgICAgIFtbX2N1cnJlbnRI
aWdobGlnaHQgaGlnaGxpZ2h0Vmlld10gc2V0TmVlZHNEaXNwbGF5OllFU107Cit9CisKKy0gKHZv
aWQpaGlkZUhpZ2hsaWdodAoreworICAgIFtfY3VycmVudEhpZ2hsaWdodCBkZXRhY2hdOworICAg
IFtfY3VycmVudEhpZ2hsaWdodCBzZXREZWxlZ2F0ZTpuaWxdOworICAgIFtfY3VycmVudEhpZ2hs
aWdodCByZWxlYXNlXTsKKyAgICBfY3VycmVudEhpZ2hsaWdodCA9IG5pbDsKK30KKworI3ByYWdt
YSBtYXJrIC0KKyNwcmFnbWEgbWFyayBXZWJOb2RlSGlnaGxpZ2h0IGRlbGVnYXRlCisKKy0gKHZv
aWQpZGlkQXR0YWNoV2ViTm9kZUhpZ2hsaWdodDooV2ViTm9kZUhpZ2hsaWdodCAqKWhpZ2hsaWdo
dAoreworICAgIFtfaW5zcGVjdGVkV2ViVmlldyBzZXRDdXJyZW50Tm9kZUhpZ2hsaWdodDpoaWdo
bGlnaHRdOworfQorCistICh2b2lkKXdpbGxEZXRhY2hXZWJOb2RlSGlnaGxpZ2h0OihXZWJOb2Rl
SGlnaGxpZ2h0ICopaGlnaGxpZ2h0Cit7CisgICAgW19pbnNwZWN0ZWRXZWJWaWV3IHNldEN1cnJl
bnROb2RlSGlnaGxpZ2h0Om5pbF07Cit9CisgICAgCitAZW5kCmRpZmYgLS1naXQgYS9XZWJLaXQv
bWFjL1dlYkluc3BlY3Rvci9XZWJJbnNwZWN0b3IubW0gYi9XZWJLaXQvbWFjL1dlYkluc3BlY3Rv
ci9XZWJJbnNwZWN0b3IubW0KaW5kZXggMjU4ZGQwMS4uOWIxNzQ1OSAxMDA2NDQKLS0tIGEvV2Vi
S2l0L21hYy9XZWJJbnNwZWN0b3IvV2ViSW5zcGVjdG9yLm1tCisrKyBiL1dlYktpdC9tYWMvV2Vi
SW5zcGVjdG9yL1dlYkluc3BlY3Rvci5tbQpAQCAtMTc1LDE0ICsxNzUsMTAgQEAgdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CiAKIC0gKHZvaWQpYXR0YWNoOihpZClzZW5kZXIKIHsKLSAgICBpZiAo
UGFnZSogcGFnZSA9IGNvcmUoX3dlYlZpZXcpKQotICAgICAgICBwYWdlLT5pbnNwZWN0b3JDb250
cm9sbGVyKCktPmF0dGFjaFdpbmRvdygpOwogfQogCiAtICh2b2lkKWRldGFjaDooaWQpc2VuZGVy
CiB7Ci0gICAgaWYgKFBhZ2UqIHBhZ2UgPSBjb3JlKF93ZWJWaWV3KSkKLSAgICAgICAgcGFnZS0+
aW5zcGVjdG9yQ29udHJvbGxlcigpLT5kZXRhY2hXaW5kb3coKTsKIH0KIAogLSAodm9pZClldmFs
dWF0ZUluRnJvbnRlbmQ6KGlkKXNlbmRlciBjYWxsSWQ6KGxvbmcpY2FsbElkIHNjcmlwdDooTlNT
dHJpbmcgKilzY3JpcHQKZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9BcGkvcXdlYmluc3BlY3Rvci5j
cHAgYi9XZWJLaXQvcXQvQXBpL3F3ZWJpbnNwZWN0b3IuY3BwCmluZGV4IGMzZWY1MzAuLmMwZTUy
NzcgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9BcGkvcXdlYmluc3BlY3Rvci5jcHAKKysrIGIvV2Vi
S2l0L3F0L0FwaS9xd2ViaW5zcGVjdG9yLmNwcApAQCAtMTYxLDYgKzE2MSwxMCBAQCB2b2lkIFFX
ZWJJbnNwZWN0b3I6OnNob3dFdmVudChRU2hvd0V2ZW50KiBldmVudCkKIC8qISBccmVpbXAgKi8K
IHZvaWQgUVdlYkluc3BlY3Rvcjo6aGlkZUV2ZW50KFFIaWRlRXZlbnQqIGV2ZW50KQogeworI2lm
IEVOQUJMRShJTlNQRUNUT1IpCisgICAgaWYgKGQtPnBhZ2UpCisgICAgICAgIGQtPnBhZ2UtPmQt
Pmluc3BlY3RvckNvbnRyb2xsZXIoKS0+Y2xvc2UoKTsKKyNlbmRpZgogfQogCiAvKiEgXHJlaW1w
ICovCkBAIC0xNjgsNyArMTcyLDcgQEAgdm9pZCBRV2ViSW5zcGVjdG9yOjpjbG9zZUV2ZW50KFFD
bG9zZUV2ZW50KiBldmVudCkKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAgIGlmIChkLT5w
YWdlKQotICAgICAgICBkLT5wYWdlLT5kLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnNldFdpbmRv
d1Zpc2libGUoZmFsc2UpOworICAgICAgICBkLT5wYWdlLT5kLT5pbnNwZWN0b3JDb250cm9sbGVy
KCktPmNsb3NlKCk7CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L0FwaS9xd2Vi
aW5zcGVjdG9yLmggYi9XZWJLaXQvcXQvQXBpL3F3ZWJpbnNwZWN0b3IuaAppbmRleCA2Y2RhNDc5
Li5mMTkyZTkyIDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvQXBpL3F3ZWJpbnNwZWN0b3IuaAorKysg
Yi9XZWJLaXQvcXQvQXBpL3F3ZWJpbnNwZWN0b3IuaApAQCAtNTIsNSArNTIsNiBAQCBwcml2YXRl
OgogICAgIGZyaWVuZCBjbGFzcyBRV2ViUGFnZTsKICAgICBmcmllbmQgY2xhc3MgUVdlYlBhZ2VQ
cml2YXRlOwogICAgIGZyaWVuZCBjbGFzcyBXZWJDb3JlOjpJbnNwZWN0b3JDbGllbnRRdDsKKyAg
ICBmcmllbmQgY2xhc3MgV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdDsKIH07CiAj
ZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuaCBiL1dlYktpdC9xdC9B
cGkvcXdlYnBhZ2UuaAppbmRleCA0NzY2Y2JkLi4wNzZmYjdjIDEwMDY0NAotLS0gYS9XZWJLaXQv
cXQvQXBpL3F3ZWJwYWdlLmgKKysrIGIvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5oCkBAIC01NCw2
ICs1NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBFZGl0b3JDbGllbnRRdDsK
ICAgICBjbGFzcyBGcmFtZUxvYWRlckNsaWVudFF0OwogICAgIGNsYXNzIEluc3BlY3RvckNsaWVu
dFF0OworICAgIGNsYXNzIEluc3BlY3RvckZyb250ZW5kQ2xpZW50UXQ7CiAgICAgY2xhc3MgUmVz
b3VyY2VIYW5kbGU7CiAgICAgY2xhc3MgSGl0VGVzdFJlc3VsdDsKICAgICBjbGFzcyBRTmV0d29y
a1JlcGx5SGFuZGxlcjsKQEAgLTM2MSw2ICszNjIsNyBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBj
bGFzcyBXZWJDb3JlOjpFZGl0b3JDbGllbnRRdDsKICAgICBmcmllbmQgY2xhc3MgV2ViQ29yZTo6
RnJhbWVMb2FkZXJDbGllbnRRdDsKICAgICBmcmllbmQgY2xhc3MgV2ViQ29yZTo6SW5zcGVjdG9y
Q2xpZW50UXQ7CisgICAgZnJpZW5kIGNsYXNzIFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xp
ZW50UXQ7CiAgICAgZnJpZW5kIGNsYXNzIFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOwogICAgIGZy
aWVuZCBjbGFzcyBXZWJDb3JlOjpRTmV0d29ya1JlcGx5SGFuZGxlcjsKIH07CmRpZmYgLS1naXQg
YS9XZWJLaXQvcXQvQ2hhbmdlTG9nIGIvV2ViS2l0L3F0L0NoYW5nZUxvZwppbmRleCBiNGNjZjQ5
Li43MjUwZjI5IDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9x
dC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMiBAQAorMjAxMC0wMy0xMCAgWXVyeSBTZW1pa2hhdHNr
eSA8eXVyeXNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEludHJvZHVjZSBJbnNwZWN0b3JGcm9udGVuZENsaWVudCB0aGF0IHBy
b3ZpZGVzIEluc3BlY3RvckZyb250ZW5kIHdpdGggYW4gaW50ZXJmYWNlIHRvIHRoZSBlbWJlZGRl
ci4gSW5zcGVjdG9yQ2xpZW50IG5vdyBzZXJ2ZXMgYXMgYSBkZWxlZ2F0ZSBmb3IgSW5zcGVjdG9y
Q29udHJvbGxlciBhbmQgZG9lcyBub3QgY29udGFpbiBtZXRob2RzIGZvciBtYW5hZ2luZyBpbnNw
ZWN0b3IgZnJvbnRlbmQgd2luZG93LiBUaGF0IGFsbG93cyB0byBjcmVhdGUgcmVtb3RlIEluc3Bl
Y3RvckZyb250ZW5kSG9zdC4KKworICAgICAgICBJbnRyb2R1Y2UgSW5zcGVjdG9yRnJvbnRlbmRD
bGllbnQgdGhhdCB3b3VsZCBwcm92aWRlIEluc3BlY3RvckZyb250ZW5kIHdpdGggYW4gaW50ZXJm
YWNlIHRvIHRoZSBlbWJlZGRlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MzUwMzYKKworICAgICAgICAqIEFwaS9xd2ViaW5zcGVjdG9yLmNwcDoKKyAg
ICAgICAgKFFXZWJJbnNwZWN0b3I6OmhpZGVFdmVudCk6CisgICAgICAgIChRV2ViSW5zcGVjdG9y
OjpjbG9zZUV2ZW50KToKKyAgICAgICAgKiBBcGkvcXdlYmluc3BlY3Rvci5oOgorICAgICAgICAq
IEFwaS9xd2VicGFnZS5oOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVu
dFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNsaWVudFF0OjpvcGVuSW5zcGVj
dG9yRnJvbnRlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRR
dDo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JGcm9udGVuZENsaWVudFF0Ojpmcm9udGVuZExvYWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JGcm9udGVuZENsaWVudFF0Ojpsb2NhbGl6ZWRTdHJpbmdzVVJMKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50UXQ6OmhpZGRlblBhbmVscyk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0OjpicmluZ1RvRnJvbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdDo6Y2xvc2VXaW5kb3cp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdDo6YXR0YWNoV2lu
ZG93KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50UXQ6OmRldGFj
aFdpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0Ojpz
ZXRBdHRhY2hlZFdpbmRvd0hlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9u
dGVuZENsaWVudFF0OjppbnNwZWN0ZWRVUkxDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckZyb250ZW5kQ2xpZW50UXQ6OnVwZGF0ZVdpbmRvd1RpdGxlKToKKyAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRRdC5oOgorCiAyMDEwLTAzLTAyICBBZGFtIFRy
ZWF0ICA8YXRyZWF0QHJpbS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2ZSBIeWF0dC4K
ZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRRdC5j
cHAgYi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50UXQuY3BwCmluZGV4
IGNkZTY0YzguLmNhOWYxNzEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9J
bnNwZWN0b3JDbGllbnRRdC5jcHAKKysrIGIvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0luc3Bl
Y3RvckNsaWVudFF0LmNwcApAQCAtODEsMTUgKzgxLDEyIEBAIHZvaWQgSW5zcGVjdG9yQ2xpZW50
UXQ6Omluc3BlY3RvckRlc3Ryb3llZCgpCiAgICAgZGVsZXRlIHRoaXM7CiB9CiAKLVBhZ2UqIElu
c3BlY3RvckNsaWVudFF0OjpjcmVhdGVQYWdlKCkKLXsKLSAgICBRV2ViVmlldyogaW5zcGVjdG9y
VmlldyA9IG1faW5zcGVjdG9yVmlldy5nZXQoKTsKLSAgICBpZiAoIWluc3BlY3RvclZpZXcpIHsK
LSAgICAgICAgaW5zcGVjdG9yVmlldyA9IG5ldyBRV2ViVmlldzsKLSAgICAgICAgSW5zcGVjdG9y
Q2xpZW50V2ViUGFnZSogaW5zcGVjdG9yUGFnZSA9IG5ldyBJbnNwZWN0b3JDbGllbnRXZWJQYWdl
KGluc3BlY3RvclZpZXcpOwotICAgICAgICBpbnNwZWN0b3JWaWV3LT5zZXRQYWdlKGluc3BlY3Rv
clBhZ2UpOwotICAgICAgICBtX2luc3BlY3RvclZpZXcuc2V0KGluc3BlY3RvclZpZXcpOwotICAg
IH0KKyAgICAKK3ZvaWQgSW5zcGVjdG9yQ2xpZW50UXQ6Om9wZW5JbnNwZWN0b3JGcm9udGVuZChX
ZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyKikKK3sKKyAgICBRV2ViVmlldyogaW5zcGVjdG9y
VmlldyA9IG5ldyBRV2ViVmlldzsKKyAgICBJbnNwZWN0b3JDbGllbnRXZWJQYWdlKiBpbnNwZWN0
b3JQYWdlID0gbmV3IEluc3BlY3RvckNsaWVudFdlYlBhZ2UoaW5zcGVjdG9yVmlldyk7CisgICAg
aW5zcGVjdG9yVmlldy0+c2V0UGFnZShpbnNwZWN0b3JQYWdlKTsKIAogICAgIFFVcmwgaW5zcGVj
dG9yVXJsID0gbV9pbnNwZWN0ZWRXZWJQYWdlLT5zZXR0aW5ncygpLT5pbnNwZWN0b3JVcmwoKTsK
ICAgICBpZiAoIWluc3BlY3RvclVybC5pc1ZhbGlkKCkpCkBAIC05OCw1MCArOTUsNyBAQCBQYWdl
KiBJbnNwZWN0b3JDbGllbnRRdDo6Y3JlYXRlUGFnZSgpCiAgICAgbV9pbnNwZWN0ZWRXZWJQYWdl
LT5kLT5pbnNwZWN0b3JGcm9udGVuZCA9IGluc3BlY3RvclZpZXc7CiAgICAgbV9pbnNwZWN0ZWRX
ZWJQYWdlLT5kLT5nZXRPckNyZWF0ZUluc3BlY3RvcigpLT5kLT5zZXRGcm9udGVuZChpbnNwZWN0
b3JWaWV3KTsKIAotICAgIHJldHVybiBpbnNwZWN0b3JWaWV3LT5wYWdlKCktPmQtPnBhZ2U7Ci19
Ci0KLVN0cmluZyBJbnNwZWN0b3JDbGllbnRRdDo6bG9jYWxpemVkU3RyaW5nc1VSTCgpCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBJ
bnNwZWN0b3JDbGllbnRRdDo6aGlkZGVuUGFuZWxzKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDbGllbnRRdDo6c2hv
d1dpbmRvdygpCi17Ci0gICAgdXBkYXRlV2luZG93VGl0bGUoKTsKLQotI2lmIEVOQUJMRShJTlNQ
RUNUT1IpCi0gICAgbV9pbnNwZWN0ZWRXZWJQYWdlLT5kLT5pbnNwZWN0b3JDb250cm9sbGVyKCkt
PnNldFdpbmRvd1Zpc2libGUodHJ1ZSwgdHJ1ZSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBJbnNwZWN0
b3JDbGllbnRRdDo6Y2xvc2VXaW5kb3coKQotewotI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAg
bV9pbnNwZWN0ZWRXZWJQYWdlLT5kLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnNldFdpbmRvd1Zp
c2libGUoZmFsc2UpOwotI2VuZGlmCi19Ci0KLXZvaWQgSW5zcGVjdG9yQ2xpZW50UXQ6OmF0dGFj
aFdpbmRvdygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JD
bGllbnRRdDo6ZGV0YWNoV2luZG93KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12
b2lkIEluc3BlY3RvckNsaWVudFF0OjpzZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCkK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGluc3BlY3RvclZpZXctPnBhZ2UoKS0+ZC0+
cGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5zZXRJbnNwZWN0b3JGcm9udGVuZENsaWVudChu
ZXcgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdChtX2luc3BlY3RlZFdlYlBhZ2UsIGluc3BlY3Rv
clZpZXcpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDbGllbnRRdDo6aGlnaGxpZ2h0KE5vZGUqKQpA
QCAtMTU0LDI1ICsxMDgsNiBAQCB2b2lkIEluc3BlY3RvckNsaWVudFF0OjpoaWRlSGlnaGxpZ2h0
KCkKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIEluc3BlY3RvckNsaWVudFF0Ojpp
bnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYgbmV3VVJMKQotewotICAgIG1faW5zcGVj
dGVkVVJMID0gbmV3VVJMOwotICAgIHVwZGF0ZVdpbmRvd1RpdGxlKCk7Ci19Ci0KLXZvaWQgSW5z
cGVjdG9yQ2xpZW50UXQ6Omluc3BlY3RvcldpbmRvd09iamVjdENsZWFyZWQoKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ2xpZW50UXQ6OnVwZGF0ZVdpbmRv
d1RpdGxlKCkKLXsKLSAgICBpZiAobV9pbnNwZWN0ZWRXZWJQYWdlLT5kLT5pbnNwZWN0b3IpIHsK
LSAgICAgICAgUVN0cmluZyBjYXB0aW9uID0gUUNvcmVBcHBsaWNhdGlvbjo6dHJhbnNsYXRlKCJR
V2ViUGFnZSIsICJXZWIgSW5zcGVjdG9yIC0gJTIiKS5hcmcobV9pbnNwZWN0ZWRVUkwpOwotICAg
ICAgICBtX2luc3BlY3RlZFdlYlBhZ2UtPmQtPmluc3BlY3Rvci0+c2V0V2luZG93VGl0bGUoY2Fw
dGlvbik7Ci0gICAgfQotfQotCiB2b2lkIEluc3BlY3RvckNsaWVudFF0Ojpwb3B1bGF0ZVNldHRp
bmcoY29uc3QgU3RyaW5nJiBrZXksIFN0cmluZyogc2V0dGluZykKIHsKICAgICBRU2V0dGluZ3Mg
cXNldHRpbmdzOwpAQCAtMjI2LDYgKzE2MSw4MSBAQCBzdGF0aWMgUVZhcmlhbnQgc2V0dGluZ1Rv
VmFyaWFudChjb25zdCBTdHJpbmcmIHNldHRpbmcpCiAgICAgcmV0dXJuIHJldFZhbDsKIH0KIAor
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdDo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdChRV2Vi
UGFnZSogaW5zcGVjdGVkV2ViUGFnZSwgUGFzc093blB0cjxRV2ViVmlldz4gaW5zcGVjdG9yVmll
dykKKyAgICA6IEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwoaW5zcGVjdGVkV2ViUGFnZS0+
ZC0+cGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLCBpbnNwZWN0b3JWaWV3LT5wYWdlKCktPmQt
PnBhZ2UpIAorICAgICwgbV9pbnNwZWN0ZWRXZWJQYWdlKGluc3BlY3RlZFdlYlBhZ2UpCisgICAg
LCBtX2luc3BlY3RvclZpZXcoaW5zcGVjdG9yVmlldykKKyAgICAsIG1fZGVzdHJveWluZ0luc3Bl
Y3RvclZpZXcoZmFsc2UpCit7Cit9CisKK3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdDo6
ZnJvbnRlbmRMb2FkZWQoKQoreworICAgIEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OmZy
b250ZW5kTG9hZGVkKCk7CisgICAgc2V0QXR0YWNoZWRXaW5kb3codHJ1ZSk7Cit9CisKK1N0cmlu
ZyBJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0Ojpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworU3RyaW5nIElu
c3BlY3RvckZyb250ZW5kQ2xpZW50UXQ6OmhpZGRlblBhbmVscygpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yRnJvbnRl
bmRDbGllbnRRdDo6YnJpbmdUb0Zyb250KCkKK3sKKyAgICB1cGRhdGVXaW5kb3dUaXRsZSgpOwor
fQorCit2b2lkIEluc3BlY3RvckZyb250ZW5kQ2xpZW50UXQ6OmNsb3NlV2luZG93KCkKK3sKKyAg
ICBpZiAobV9kZXN0cm95aW5nSW5zcGVjdG9yVmlldykKKyAgICAgICAgcmV0dXJuOworICAgIG1f
ZGVzdHJveWluZ0luc3BlY3RvclZpZXcgPSB0cnVlOworCisgICAgLy8gQ2xlYXIgcmVmZXJlbmNl
IGZyb20gUVdlYkluc3BlY3RvciB0byB0aGUgZnJvbnRlbmQgdmlldy4KKyAgICBtX2luc3BlY3Rl
ZFdlYlBhZ2UtPmQtPmdldE9yQ3JlYXRlSW5zcGVjdG9yKCktPmQtPnNldEZyb250ZW5kKDApOwor
I2lmIEVOQUJMRShJTlNQRUNUT1IpCisgICAgbV9pbnNwZWN0ZWRXZWJQYWdlLT5kLT5pbnNwZWN0
b3JDb250cm9sbGVyKCktPmNsb3NlKCk7CisjZW5kaWYKKyAgICAvLyBDbGVhciBwb2ludGVyIGJl
Zm9yZSBkZWxldGluZyBXZWJWaWV3IHRvIGF2b2lkIHJlY3Vyc2l2ZSBjYWxscyB0byBpdHMgZGVz
dHJ1Y3Rvci4KKyAgICBkZWxldGUgbV9pbnNwZWN0b3JWaWV3LnJlbGVhc2UoKTsKK30KKwordm9p
ZCBJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0OjphdHRhY2hXaW5kb3coKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdDo6ZGV0YWNo
V2luZG93KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEluc3BlY3RvckZy
b250ZW5kQ2xpZW50UXQ6OnNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdDo6
aW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIG5ld1VSTCkKK3sKKyAgICBtX2luc3Bl
Y3RlZFVSTCA9IG5ld1VSTDsKKyAgICB1cGRhdGVXaW5kb3dUaXRsZSgpOworfQorCit2b2lkIElu
c3BlY3RvckZyb250ZW5kQ2xpZW50UXQ6OnVwZGF0ZVdpbmRvd1RpdGxlKCkKK3sKKyAgICBpZiAo
bV9pbnNwZWN0ZWRXZWJQYWdlLT5kLT5pbnNwZWN0b3IpIHsKKyAgICAgICAgUVN0cmluZyBjYXB0
aW9uID0gUUNvcmVBcHBsaWNhdGlvbjo6dHJhbnNsYXRlKCJRV2ViUGFnZSIsICJXZWIgSW5zcGVj
dG9yIC0gJTIiKS5hcmcobV9pbnNwZWN0ZWRVUkwpOworICAgICAgICBtX2luc3BlY3RlZFdlYlBh
Z2UtPmQtPmluc3BlY3Rvci0+c2V0V2luZG93VGl0bGUoY2FwdGlvbik7CisgICAgfQorfQorCiB9
CiAKICNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnRRdC5tb2MiCmRpZmYgLS1naXQgYS9XZWJLaXQv
cXQvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50UXQuaCBiL1dlYktpdC9xdC9XZWJDb3Jl
U3VwcG9ydC9JbnNwZWN0b3JDbGllbnRRdC5oCmluZGV4IGM5NTQ4YjAuLjRiZWFkYWIgMTAwNjQ0
Ci0tLSBhL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRRdC5oCisrKyBi
L1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRRdC5oCkBAIC0zMSw3ICsz
MSw5IEBACiAjZGVmaW5lIEluc3BlY3RvckNsaWVudFF0X2gKIAogI2luY2x1ZGUgIkluc3BlY3Rv
ckNsaWVudC5oIgorI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuaCIKICNp
bmNsdWRlICJPd25QdHIuaCIKKyNpbmNsdWRlICJQYXNzT3duUHRyLmgiCiAjaW5jbHVkZSA8UXRD
b3JlL1FTdHJpbmc+CiAKIGNsYXNzIFFXZWJQYWdlOwpAQCAtNDgsMTMgKzUwLDI5IEBAIHB1Ymxp
YzoKIAogICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0b3JEZXN0cm95ZWQoKTsKIAotICAgIHZpcnR1
YWwgUGFnZSogY3JlYXRlUGFnZSgpOworICAgIHZpcnR1YWwgdm9pZCBvcGVuSW5zcGVjdG9yRnJv
bnRlbmQoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlciopOworCisgICAgdmlydHVhbCB2b2lk
IGhpZ2hsaWdodChOb2RlKik7CisgICAgdmlydHVhbCB2b2lkIGhpZGVIaWdobGlnaHQoKTsKKwor
ICAgIHZpcnR1YWwgdm9pZCBwb3B1bGF0ZVNldHRpbmcoY29uc3QgU3RyaW5nJiBrZXksIFN0cmlu
ZyogdmFsdWUpOworICAgIHZpcnR1YWwgdm9pZCBzdG9yZVNldHRpbmcoY29uc3QgU3RyaW5nJiBr
ZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpOworCitwcml2YXRlOgorICAgIFFXZWJQYWdlKiBtX2lu
c3BlY3RlZFdlYlBhZ2U7Cit9OworCitjbGFzcyBJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0IDog
cHVibGljIEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwgeworcHVibGljOgorICAgIEluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50UXQoUVdlYlBhZ2UqIGluc3BlY3RlZFdlYlBhZ2UsIFBhc3NPd25Q
dHI8UVdlYlZpZXc+IGluc3BlY3RvclZpZXcpOworCisgICAgdmlydHVhbCB2b2lkIGZyb250ZW5k
TG9hZGVkKCk7CiAKICAgICB2aXJ0dWFsIFN0cmluZyBsb2NhbGl6ZWRTdHJpbmdzVVJMKCk7CiAK
ICAgICB2aXJ0dWFsIFN0cmluZyBoaWRkZW5QYW5lbHMoKTsKIAotICAgIHZpcnR1YWwgdm9pZCBz
aG93V2luZG93KCk7CisgICAgdmlydHVhbCB2b2lkIGJyaW5nVG9Gcm9udCgpOwogICAgIHZpcnR1
YWwgdm9pZCBjbG9zZVdpbmRvdygpOwogCiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaFdpbmRvdygp
OwpAQCAtNjIsMjAgKzgwLDE0IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRBdHRh
Y2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpOwogCi0gICAgdmlydHVhbCB2b2lkIGhp
Z2hsaWdodChOb2RlKik7Ci0gICAgdmlydHVhbCB2b2lkIGhpZGVIaWdobGlnaHQoKTsKICAgICB2
aXJ0dWFsIHZvaWQgaW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIG5ld1VSTCk7CiAK
LSAgICB2aXJ0dWFsIHZvaWQgcG9wdWxhdGVTZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5LCBTdHJp
bmcqIHZhbHVlKTsKLSAgICB2aXJ0dWFsIHZvaWQgc3RvcmVTZXR0aW5nKGNvbnN0IFN0cmluZyYg
a2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKLQotICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0b3JX
aW5kb3dPYmplY3RDbGVhcmVkKCk7Ci0KIHByaXZhdGU6CiAgICAgdm9pZCB1cGRhdGVXaW5kb3dU
aXRsZSgpOwogICAgIFFXZWJQYWdlKiBtX2luc3BlY3RlZFdlYlBhZ2U7CiAgICAgT3duUHRyPFFX
ZWJWaWV3PiBtX2luc3BlY3RvclZpZXc7CiAgICAgUVN0cmluZyBtX2luc3BlY3RlZFVSTDsKKyAg
ICBib29sIG1fZGVzdHJveWluZ0luc3BlY3RvclZpZXc7CiB9OwogfQogCmRpZmYgLS1naXQgYS9X
ZWJLaXQvd2luL0NoYW5nZUxvZyBiL1dlYktpdC93aW4vQ2hhbmdlTG9nCmluZGV4IDg4MTlmNzgu
LjYzMzZiMTIgMTAwNjQ0Ci0tLSBhL1dlYktpdC93aW4vQ2hhbmdlTG9nCisrKyBiL1dlYktpdC93
aW4vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDcgQEAKKzIwMTAtMDMtMTAgIFl1cnkgU2VtaWtoYXRz
a3kgPHl1cnlzQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBJbnRyb2R1Y2UgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQgdGhhdCBw
cm92aWRlcyBJbnNwZWN0b3JGcm9udGVuZCB3aXRoIGFuIGludGVyZmFjZSB0byB0aGUgZW1iZWRk
ZXIuIEluc3BlY3RvckNsaWVudCBub3cgc2VydmVzIGFzIGEgZGVsZWdhdGUgZm9yIEluc3BlY3Rv
ckNvbnRyb2xsZXIgYW5kIGRvZXMgbm90IGNvbnRhaW4gbWV0aG9kcyBmb3IgbWFuYWdpbmcgaW5z
cGVjdG9yIGZyb250ZW5kIHdpbmRvdy4gVGhhdCBhbGxvd3MgdG8gY3JlYXRlIHJlbW90ZSBJbnNw
ZWN0b3JGcm9udGVuZEhvc3QuCisKKyAgICAgICAgSW50cm9kdWNlIEluc3BlY3RvckZyb250ZW5k
Q2xpZW50IHRoYXQgd291bGQgcHJvdmlkZSBJbnNwZWN0b3JGcm9udGVuZCB3aXRoIGFuIGludGVy
ZmFjZSB0byB0aGUgZW1iZWRkZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTM1MDM2CisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0
b3JDbGllbnQuY3BwOgorICAgICAgICAoV2ViSW5zcGVjdG9yQ2xpZW50OjpXZWJJbnNwZWN0b3JD
bGllbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yQ2xpZW50Ojp+V2ViSW5zcGVjdG9yQ2xpZW50
KToKKyAgICAgICAgKFdlYkluc3BlY3RvckNsaWVudDo6b3Blbkluc3BlY3RvckZyb250ZW5kKToK
KyAgICAgICAgKFdlYkluc3BlY3RvckNsaWVudDo6aGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYklu
c3BlY3RvckNsaWVudDo6aGlkZUhpZ2hsaWdodCk6CisgICAgICAgIChXZWJJbnNwZWN0b3JDbGll
bnQ6OnVwZGF0ZUhpZ2hsaWdodCk6CisgICAgICAgIChXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVu
dDo6V2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJv
bnRlbmRDbGllbnQ6On5XZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudCk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3JGcm9udGVuZENsaWVudDo6ZnJvbnRlbmRMb2FkZWQpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yRnJvbnRlbmRDbGllbnQ6OmxvY2FsaXplZFN0cmluZ3NVUkwpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmhpZGRlblBhbmVscyk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3JGcm9udGVuZENsaWVudDo6YnJpbmdUb0Zyb250KToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50OjpjbG9zZVdpbmRvdyk6CisgICAgICAgIChXZWJJbnNwZWN0b3JGcm9u
dGVuZENsaWVudDo6YXR0YWNoV2luZG93KToKKyAgICAgICAgKFdlYkluc3BlY3RvckZyb250ZW5k
Q2xpZW50OjpkZXRhY2hXaW5kb3cpOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGll
bnQ6OnNldEF0dGFjaGVkV2luZG93SGVpZ2h0KToKKyAgICAgICAgKFdlYkluc3BlY3RvckZyb250
ZW5kQ2xpZW50OjppbnNwZWN0ZWRVUkxDaGFuZ2VkKToKKyAgICAgICAgKFdlYkluc3BlY3RvckZy
b250ZW5kQ2xpZW50OjpjbG9zZVdpbmRvd1dpdGhvdXROb3RpZmljYXRpb25zKToKKyAgICAgICAg
KFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpzaG93V2luZG93V2l0aG91dE5vdGlmaWNhdGlv
bnMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmRlc3Ryb3lJbnNwZWN0
b3JWaWV3KToKKyAgICAgICAgKFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50Ojp1cGRhdGVXaW5k
b3dUaXRsZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6b25HZXRNaW5N
YXhJbmZvKToKKyAgICAgICAgKFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpvblNpemUpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6Om9uQ2xvc2UpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6Om9uU2V0Rm9jdXMpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yRnJvbnRlbmRDbGllbnQ6Om9uV2ViVmlld1dpbmRvd1Bvc0NoYW5naW5nKToKKyAgICAg
ICAgKFdlYkluc3BlY3RvclduZFByb2MpOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRD
bGllbnQ6OndpbmRvd1JlY2VpdmVkTWVzc2FnZSk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQv
V2ViSW5zcGVjdG9yQ2xpZW50Lmg6CisgICAgICAgIChXZWJJbnNwZWN0b3JDbGllbnQ6OmZyb250
ZW5kQ2xvc2luZyk6CisgICAgICAgICogV2ViSW5zcGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYklu
c3BlY3Rvcjo6YXR0YWNoKToKKyAgICAgICAgKFdlYkluc3BlY3Rvcjo6ZGV0YWNoKToKKwogMjAx
MC0wMy0xMCAgSm9obiBTdWxsaXZhbiAgPHN1bGxpdmFuQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBUaW0gSGF0Y2hlci4KZGlmZiAtLWdpdCBhL1dlYktpdC93aW4vV2ViQ29yZVN1
cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcCBiL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQv
V2ViSW5zcGVjdG9yQ2xpZW50LmNwcAppbmRleCA2YTEwYzBkLi41YWRiZmRmIDEwMDY0NAotLS0g
YS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5jcHAKKysrIGIv
V2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuY3BwCkBAIC02OSwy
NSArNjksMTMgQEAgc3RhdGljIENGQnVuZGxlUmVmIGdldFdlYktpdEJ1bmRsZSgpCiAKIFdlYklu
c3BlY3RvckNsaWVudDo6V2ViSW5zcGVjdG9yQ2xpZW50KFdlYlZpZXcqIHdlYlZpZXcpCiAgICAg
OiBtX2luc3BlY3RlZFdlYlZpZXcod2ViVmlldykKLSAgICAsIG1faHduZCgwKQotICAgICwgbV93
ZWJWaWV3SHduZCgwKQotICAgICwgbV9zaG91bGRBdHRhY2hXaGVuU2hvd24oZmFsc2UpCi0gICAg
LCBtX2F0dGFjaGVkKGZhbHNlKQogewogICAgIEFTU0VSVChtX2luc3BlY3RlZFdlYlZpZXcpOwot
CiAgICAgbV9pbnNwZWN0ZWRXZWJWaWV3LT52aWV3V2luZG93KChPTEVfSEFORExFKikmbV9pbnNw
ZWN0ZWRXZWJWaWV3SHduZCk7Ci0KLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHdpbmRvdyBzaXpl
L3Bvc2l0aW9uIHNhdmUvcmVzdG9yZQotI2lmIDAKLSAgICBbc2VsZiBzZXRXaW5kb3dGcmFtZUF1
dG9zYXZlTmFtZTpAIldlYiBJbnNwZWN0b3IiXTsKLSNlbmRpZgogfQogCiBXZWJJbnNwZWN0b3JD
bGllbnQ6On5XZWJJbnNwZWN0b3JDbGllbnQoKQogewotICAgIGlmIChtX2h3bmQpCi0gICAgICAg
IDo6RGVzdHJveVdpbmRvdyhtX2h3bmQpOwogfQogCiB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6
aW5zcGVjdG9yRGVzdHJveWVkKCkKQEAgLTk1LDM1ICs4MywzMCBAQCB2b2lkIFdlYkluc3BlY3Rv
ckNsaWVudDo6aW5zcGVjdG9yRGVzdHJveWVkKCkKICAgICBkZWxldGUgdGhpczsKIH0KIAotUGFn
ZSogV2ViSW5zcGVjdG9yQ2xpZW50OjpjcmVhdGVQYWdlKCkKK3ZvaWQgV2ViSW5zcGVjdG9yQ2xp
ZW50OjpvcGVuSW5zcGVjdG9yRnJvbnRlbmQoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9y
Q29udHJvbGxlcikKIHsKICAgICByZWdpc3RlcldpbmRvd0NsYXNzKCk7CiAKLSAgICBpZiAobV9o
d25kKQotICAgICAgICA6OkRlc3Ryb3lXaW5kb3cobV9od25kKTsKLQotICAgIG1faHduZCA9IDo6
Q3JlYXRlV2luZG93RXgoMCwga1dlYkluc3BlY3RvcldpbmRvd0NsYXNzTmFtZSwgMCwgV1NfT1ZF
UkxBUFBFRFdJTkRPVywKKyAgICBIV05EIGZyb250ZW5kSHduZCA9IDo6Q3JlYXRlV2luZG93RXgo
MCwga1dlYkluc3BlY3RvcldpbmRvd0NsYXNzTmFtZSwgMCwgV1NfT1ZFUkxBUFBFRFdJTkRPVywK
ICAgICAgICAgZGVmYXVsdFdpbmRvd1JlY3QoKS54KCksIGRlZmF1bHRXaW5kb3dSZWN0KCkueSgp
LCBkZWZhdWx0V2luZG93UmVjdCgpLndpZHRoKCksIGRlZmF1bHRXaW5kb3dSZWN0KCkuaGVpZ2h0
KCksCiAgICAgICAgIDAsIDAsIDAsIDApOwogCi0gICAgaWYgKCFtX2h3bmQpCi0gICAgICAgIHJl
dHVybiAwOwotCi0gICAgOjpTZXRQcm9wKG1faHduZCwga1dlYkluc3BlY3RvclBvaW50ZXJQcm9w
LCByZWludGVycHJldF9jYXN0PEhBTkRMRT4odGhpcykpOworICAgIGlmICghZnJvbnRlbmRId25k
KQorICAgICAgICByZXR1cm47CiAKLSAgICBtX3dlYlZpZXcuYWRvcHRSZWYoV2ViVmlldzo6Y3Jl
YXRlSW5zdGFuY2UoKSk7CisgICAgQ09NUHRyPFdlYlZpZXc+IGZyb250ZW5kV2ViVmlldyhBZG9w
dENPTSwgV2ViVmlldzo6Y3JlYXRlSW5zdGFuY2UoKSk7CiAKLSAgICBpZiAoRkFJTEVEKG1fd2Vi
Vmlldy0+c2V0SG9zdFdpbmRvdygoT0xFX0hBTkRMRSkoVUxPTkc2NCltX2h3bmQpKSkKLSAgICAg
ICAgcmV0dXJuIDA7CisgICAgaWYgKEZBSUxFRChmcm9udGVuZFdlYlZpZXctPnNldEhvc3RXaW5k
b3coKE9MRV9IQU5ETEUpKFVMT05HNjQpZnJvbnRlbmRId25kKSkpCisgICAgICAgIHJldHVybjsK
IAogICAgIFJFQ1QgcmVjdDsKLSAgICBHZXRDbGllbnRSZWN0KG1faHduZCwgJnJlY3QpOwotICAg
IGlmIChGQUlMRUQobV93ZWJWaWV3LT5pbml0V2l0aEZyYW1lKHJlY3QsIDAsIDApKSkKLSAgICAg
ICAgcmV0dXJuIDA7CisgICAgR2V0Q2xpZW50UmVjdChmcm9udGVuZEh3bmQsICZyZWN0KTsKKyAg
ICBpZiAoRkFJTEVEKGZyb250ZW5kV2ViVmlldy0+aW5pdFdpdGhGcmFtZShyZWN0LCAwLCAwKSkp
CisgICAgICAgIHJldHVybjsKIAogICAgIENPTVB0cjxXZWJJbnNwZWN0b3JEZWxlZ2F0ZT4gZGVs
ZWdhdGUoQWRvcHRDT00sIFdlYkluc3BlY3RvckRlbGVnYXRlOjpjcmVhdGVJbnN0YW5jZSgpKTsK
LSAgICBpZiAoRkFJTEVEKG1fd2ViVmlldy0+c2V0VUlEZWxlZ2F0ZShkZWxlZ2F0ZS5nZXQoKSkp
KQotICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoRkFJTEVEKGZyb250ZW5kV2ViVmlldy0+c2V0
VUlEZWxlZ2F0ZShkZWxlZ2F0ZS5nZXQoKSkpKQorICAgICAgICByZXR1cm47CiAKICAgICAvLyBL
ZWVwIHByZWZlcmVuY2VzIHNlcGFyYXRlIGZyb20gdGhlIHJlc3Qgb2YgdGhlIGNsaWVudCwgbWFr
aW5nIHN1cmUgd2UgYXJlIHVzaW5nIGV4cGVjdGVkIHByZWZlcmVuY2UgdmFsdWVzLgogICAgIC8v
IE9uZSByZWFzb24gdGhpcyBpcyBnb29kIGlzIHRoYXQgaXQga2VlcHMgdGhlIGluc3BlY3RvciBv
dXQgb2YgaGlzdG9yeSB2aWEgInByaXZhdGUgYnJvd3NpbmciLgpAQCAtMTM0LDY2ICsxMTcsMTI2
IEBAIFBhZ2UqIFdlYkluc3BlY3RvckNsaWVudDo6Y3JlYXRlUGFnZSgpCiAgICAgQ09NUHRyPFdl
YlByZWZlcmVuY2VzPiB0ZW1wUHJlZmVyZW5jZXMoQWRvcHRDT00sIFdlYlByZWZlcmVuY2VzOjpj
cmVhdGVJbnN0YW5jZSgpKTsKICAgICBDT01QdHI8SVdlYlByZWZlcmVuY2VzPiBpUHJlZmVyZW5j
ZXM7CiAgICAgaWYgKEZBSUxFRCh0ZW1wUHJlZmVyZW5jZXMtPmluaXRXaXRoSWRlbnRpZmllcihC
U3RyaW5nKEwiV2ViSW5zcGVjdG9yUHJlZmVyZW5jZXMiKSwgJmlQcmVmZXJlbmNlcykpKQotICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuOwogICAgIENPTVB0cjxXZWJQcmVmZXJlbmNl
cz4gcHJlZmVyZW5jZXMoUXVlcnksIGlQcmVmZXJlbmNlcyk7CiAgICAgaWYgKCFwcmVmZXJlbmNl
cykKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybjsKICAgICBpZiAoRkFJTEVEKHBy
ZWZlcmVuY2VzLT5zZXRBdXRvc2F2ZXMoRkFMU0UpKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgIHJldHVybjsKICAgICBpZiAoRkFJTEVEKHByZWZlcmVuY2VzLT5zZXRQcml2YXRlQnJvd3Np
bmdFbmFibGVkKFRSVUUpKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybjsKICAg
ICBpZiAoRkFJTEVEKHByZWZlcmVuY2VzLT5zZXRMb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkoVFJV
RSkpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuOwogICAgIGlmIChGQUlMRUQo
cHJlZmVyZW5jZXMtPnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKFRSVUUpKSkKLSAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybjsKICAgICBpZiAoRkFJTEVEKHByZWZlcmVuY2Vz
LT5zZXRBbGxvd3NBbmltYXRlZEltYWdlcyhUUlVFKSkpCi0gICAgICAgIHJldHVybiAwOworICAg
ICAgICByZXR1cm47CiAgICAgaWYgKEZBSUxFRChwcmVmZXJlbmNlcy0+c2V0TG9hZHNJbWFnZXNB
dXRvbWF0aWNhbGx5KFRSVUUpKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybjsK
ICAgICBpZiAoRkFJTEVEKHByZWZlcmVuY2VzLT5zZXRQbHVnSW5zRW5hYmxlZChGQUxTRSkpKQot
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuOwogICAgIGlmIChGQUlMRUQocHJlZmVy
ZW5jZXMtPnNldEphdmFFbmFibGVkKEZBTFNFKSkpCi0gICAgICAgIHJldHVybiAwOworICAgICAg
ICByZXR1cm47CiAgICAgaWYgKEZBSUxFRChwcmVmZXJlbmNlcy0+c2V0VXNlclN0eWxlU2hlZXRF
bmFibGVkKEZBTFNFKSkpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm47CiAgICAg
aWYgKEZBSUxFRChwcmVmZXJlbmNlcy0+c2V0VGFic1RvTGlua3MoRkFMU0UpKSkKLSAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgIHJldHVybjsKICAgICBpZiAoRkFJTEVEKHByZWZlcmVuY2VzLT5z
ZXRNaW5pbXVtRm9udFNpemUoMCkpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJu
OwogICAgIGlmIChGQUlMRUQocHJlZmVyZW5jZXMtPnNldE1pbmltdW1Mb2dpY2FsRm9udFNpemUo
OSkpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuOwogICAgIGlmIChGQUlMRUQo
cHJlZmVyZW5jZXMtPnNldEZpeGVkRm9udEZhbWlseShCU3RyaW5nKEwiQ291cmllciBOZXciKSkp
KQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuOwogICAgIGlmIChGQUlMRUQocHJl
ZmVyZW5jZXMtPnNldERlZmF1bHRGaXhlZEZvbnRTaXplKDEzKSkpCi0gICAgICAgIHJldHVybiAw
OworICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoRkFJTEVEKG1fd2ViVmlldy0+c2V0UHJlZmVy
ZW5jZXMocHJlZmVyZW5jZXMuZ2V0KCkpKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKEZB
SUxFRChmcm9udGVuZFdlYlZpZXctPnNldFByZWZlcmVuY2VzKHByZWZlcmVuY2VzLmdldCgpKSkp
CisgICAgICAgIHJldHVybjsKIAotICAgIG1fd2ViVmlldy0+c2V0UHJvaGliaXRzTWFpbkZyYW1l
U2Nyb2xsaW5nKFRSVUUpOworICAgIGZyb250ZW5kV2ViVmlldy0+c2V0UHJvaGliaXRzTWFpbkZy
YW1lU2Nyb2xsaW5nKFRSVUUpOwogCi0gICAgaWYgKEZBSUxFRChtX3dlYlZpZXctPnZpZXdXaW5k
b3cocmVpbnRlcnByZXRfY2FzdDxPTEVfSEFORExFKj4oJm1fd2ViVmlld0h3bmQpKSkpCi0gICAg
ICAgIHJldHVybiAwOworICAgIEhXTkQgZnJvbnRlbmRXZWJWaWV3SHduZDsKKyAgICBpZiAoRkFJ
TEVEKGZyb250ZW5kV2ViVmlldy0+dmlld1dpbmRvdyhyZWludGVycHJldF9jYXN0PE9MRV9IQU5E
TEUqPigmZnJvbnRlbmRXZWJWaWV3SHduZCkpKSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgQ09N
UHRyPFdlYk11dGFibGVVUkxSZXF1ZXN0PiByZXF1ZXN0OwotICAgIHJlcXVlc3QuYWRvcHRSZWYo
V2ViTXV0YWJsZVVSTFJlcXVlc3Q6OmNyZWF0ZUluc3RhbmNlKCkpOworICAgIENPTVB0cjxXZWJN
dXRhYmxlVVJMUmVxdWVzdD4gcmVxdWVzdChBZG9wdENPTSwgV2ViTXV0YWJsZVVSTFJlcXVlc3Q6
OmNyZWF0ZUluc3RhbmNlKCkpOwogCiAgICAgUmV0YWluUHRyPENGVVJMUmVmPiBodG1sVVJMUmVm
KEFkb3B0Q0YsIENGQnVuZGxlQ29weVJlc291cmNlVVJMKGdldFdlYktpdEJ1bmRsZSgpLCBDRlNU
UigiaW5zcGVjdG9yIiksIENGU1RSKCJodG1sIiksIENGU1RSKCJpbnNwZWN0b3IiKSkpOwogICAg
IGlmICghaHRtbFVSTFJlZikKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybjsKIAog
ICAgIENGU3RyaW5nUmVmIHVybFN0cmluZ1JlZiA9IDo6Q0ZVUkxHZXRTdHJpbmcoaHRtbFVSTFJl
Zi5nZXQoKSk7CiAgICAgaWYgKEZBSUxFRChyZXF1ZXN0LT5pbml0V2l0aFVSTChCU3RyaW5nKHVy
bFN0cmluZ1JlZiksIFdlYlVSTFJlcXVlc3RVc2VQcm90b2NvbENhY2hlUG9saWN5LCA2MCkpKQot
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKEZBSUxFRChtX3dl
YlZpZXctPnRvcExldmVsRnJhbWUoKS0+bG9hZFJlcXVlc3QocmVxdWVzdC5nZXQoKSkpKQotICAg
ICAgICByZXR1cm4gMDsKKyAgICBpZiAoRkFJTEVEKGZyb250ZW5kV2ViVmlldy0+dG9wTGV2ZWxG
cmFtZSgpLT5sb2FkUmVxdWVzdChyZXF1ZXN0LmdldCgpKSkpCisgICAgICAgIHJldHVybjsKIAot
ICAgIHJldHVybiBjb3JlKG1fd2ViVmlldy5nZXQoKSk7CisgICAgUGFnZSogcGFnZSA9IGNvcmUo
ZnJvbnRlbmRXZWJWaWV3LmdldCgpKTsKKyAgICBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCkt
PnNldEluc3BlY3RvckZyb250ZW5kQ2xpZW50KG5ldyBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVu
dChtX2luc3BlY3RlZFdlYlZpZXcsIG1faW5zcGVjdGVkV2ViVmlld0h3bmQsIGZyb250ZW5kSHdu
ZCwgZnJvbnRlbmRXZWJWaWV3LCBmcm9udGVuZFdlYlZpZXdId25kLCB0aGlzKSk7CisgICAgbV9m
cm9udGVuZEh3bmQgPSBmcm9udGVuZEh3bmQ7CiB9CiAKK3ZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50
OjpoaWdobGlnaHQoTm9kZSopCit7CisgICAgYm9vbCBjcmVhdGluZ0hpZ2hsaWdodCA9ICFtX2hp
Z2hsaWdodDsKKworICAgIGlmIChjcmVhdGluZ0hpZ2hsaWdodCkKKyAgICAgICAgbV9oaWdobGln
aHQuc2V0KG5ldyBXZWJOb2RlSGlnaGxpZ2h0KG1faW5zcGVjdGVkV2ViVmlldykpOwogCi1TdHJp
bmcgV2ViSW5zcGVjdG9yQ2xpZW50Ojpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkKKyAgICBpZiAobV9o
aWdobGlnaHQtPmlzU2hvd2luZygpKQorICAgICAgICBtX2hpZ2hsaWdodC0+dXBkYXRlKCk7Cisg
ICAgZWxzZQorICAgICAgICBtX2hpZ2hsaWdodC0+c2V0U2hvd3NXaGlsZVdlYlZpZXdJc1Zpc2li
bGUodHJ1ZSk7CisKKyAgICBpZiAoY3JlYXRpbmdIaWdobGlnaHQgJiYgSXNXaW5kb3dWaXNpYmxl
KG1fZnJvbnRlbmRId25kKSkKKyAgICAgICAgbV9oaWdobGlnaHQtPnBsYWNlQmVoaW5kV2luZG93
KG1fZnJvbnRlbmRId25kKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmhpZGVIaWdo
bGlnaHQoKQoreworICAgIGlmIChtX2hpZ2hsaWdodCkKKyAgICAgICAgbV9oaWdobGlnaHQtPnNl
dFNob3dzV2hpbGVXZWJWaWV3SXNWaXNpYmxlKGZhbHNlKTsKK30KKwordm9pZCBXZWJJbnNwZWN0
b3JDbGllbnQ6OnVwZGF0ZUhpZ2hsaWdodCgpCit7CisgICAgaWYgKG1faGlnaGxpZ2h0ICYmIG1f
aGlnaGxpZ2h0LT5pc1Nob3dpbmcoKSkKKyAgICAgICAgbV9oaWdobGlnaHQtPnVwZGF0ZSgpOwor
fQorCitXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6V2ViSW5zcGVjdG9yRnJvbnRlbmRDbGll
bnQoV2ViVmlldyogaW5zcGVjdGVkV2ViVmlldywgSFdORCBpbnNwZWN0ZWRXZWJWaWV3SHduZCwg
SFdORCBmcm9udGVuZEh3bmQsIGNvbnN0IENPTVB0cjxXZWJWaWV3PiYgZnJvbnRlbmRXZWJWaWV3
LCBIV05EIGZyb250ZW5kV2ViVmlld0h3bmQsIFdlYkluc3BlY3RvckNsaWVudCogaW5zcGVjdG9y
Q2xpZW50KQorICAgIDogSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbChpbnNwZWN0ZWRXZWJW
aWV3LT5wYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKSwgIGNvcmUoZnJvbnRlbmRXZWJWaWV3
LmdldCgpKSkKKyAgICAsIG1faW5zcGVjdGVkV2ViVmlldyhpbnNwZWN0ZWRXZWJWaWV3KQorICAg
ICwgbV9pbnNwZWN0ZWRXZWJWaWV3SHduZChpbnNwZWN0ZWRXZWJWaWV3SHduZCkKKyAgICAsIG1f
aW5zcGVjdG9yQ2xpZW50KGluc3BlY3RvckNsaWVudCkKKyAgICAsIG1fZnJvbnRlbmRId25kKGZy
b250ZW5kSHduZCkKKyAgICAsIG1fZnJvbnRlbmRXZWJWaWV3KGZyb250ZW5kV2ViVmlldykKKyAg
ICAsIG1fZnJvbnRlbmRXZWJWaWV3SHduZChmcm9udGVuZFdlYlZpZXdId25kKQorICAgICwgbV9z
aG91bGRBdHRhY2hXaGVuU2hvd24oZmFsc2UpCisgICAgLCBtX2F0dGFjaGVkKGZhbHNlKQorICAg
ICwgbV9kZXN0cm95aW5nSW5zcGVjdG9yVmlldyhmYWxzZSkKK3sKKyAgICA6OlNldFByb3AoZnJv
bnRlbmRId25kLCBrV2ViSW5zcGVjdG9yUG9pbnRlclByb3AsIHJlaW50ZXJwcmV0X2Nhc3Q8SEFO
RExFPih0aGlzKSk7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB3aW5kb3cgc2l6ZS9wb3NpdGlv
biBzYXZlL3Jlc3RvcmUKKyNpZiAwCisgICAgW3NlbGYgc2V0V2luZG93RnJhbWVBdXRvc2F2ZU5h
bWU6QCJXZWIgSW5zcGVjdG9yIl07CisjZW5kaWYKK30KKworV2ViSW5zcGVjdG9yRnJvbnRlbmRD
bGllbnQ6On5XZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudCgpCit7CisgICAgQVNTRVJUKG1fZGVz
dHJveWluZ0luc3BlY3RvclZpZXcpOworfQorCit2b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQ2xp
ZW50Ojpmcm9udGVuZExvYWRlZCgpCit7CisgICAgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2Nh
bDo6ZnJvbnRlbmRMb2FkZWQoKTsKKworICAgIHNldEF0dGFjaGVkV2luZG93KG1fYXR0YWNoZWQp
OworfQorCitTdHJpbmcgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmxvY2FsaXplZFN0cmlu
Z3NVUkwoKQogewogICAgIFJldGFpblB0cjxDRlVSTFJlZj4gdXJsKEFkb3B0Q0YsIENGQnVuZGxl
Q29weVJlc291cmNlVVJMKGdldFdlYktpdEJ1bmRsZSgpLCBDRlNUUigibG9jYWxpemVkU3RyaW5n
cyIpLCBDRlNUUigianMiKSwgMCkpOwogICAgIGlmICghdXJsKQpAQCAtMjAyLDMxICsyNDUsMjMg
QEAgU3RyaW5nIFdlYkluc3BlY3RvckNsaWVudDo6bG9jYWxpemVkU3RyaW5nc1VSTCgpCiAgICAg
cmV0dXJuIENGVVJMR2V0U3RyaW5nKHVybC5nZXQoKSk7CiB9CiAKLQotU3RyaW5nIFdlYkluc3Bl
Y3RvckNsaWVudDo6aGlkZGVuUGFuZWxzKCkKK1N0cmluZyBXZWJJbnNwZWN0b3JGcm9udGVuZENs
aWVudDo6aGlkZGVuUGFuZWxzKCkKIHsKICAgICAvLyBGSVhNRTogaW1wbGVtZW50IHRoaXMKICAg
ICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpzaG93V2lu
ZG93KCkKK3ZvaWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmJyaW5nVG9Gcm9udCgpCiB7
CiAgICAgc2hvd1dpbmRvd1dpdGhvdXROb3RpZmljYXRpb25zKCk7Ci0gICAgbV9pbnNwZWN0ZWRX
ZWJWaWV3LT5wYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0V2luZG93VmlzaWJsZSh0
cnVlLCBtX3Nob3VsZEF0dGFjaFdoZW5TaG93bik7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yQ2xp
ZW50OjpjbG9zZVdpbmRvdygpCi17Ci0gICAgY2xvc2VXaW5kb3dXaXRob3V0Tm90aWZpY2F0aW9u
cygpOwotICAgIG1faW5zcGVjdGVkV2ViVmlldy0+cGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVy
KCktPnNldFdpbmRvd1Zpc2libGUoZmFsc2UsIG1fc2hvdWxkQXR0YWNoV2hlblNob3duKTsKIH0K
IAotYm9vbCBXZWJJbnNwZWN0b3JDbGllbnQ6OndpbmRvd1Zpc2libGUoKQordm9pZCBXZWJJbnNw
ZWN0b3JGcm9udGVuZENsaWVudDo6Y2xvc2VXaW5kb3coKQogewotICAgIHJldHVybiAhITo6SXNX
aW5kb3dWaXNpYmxlKG1faHduZCk7CisgICAgZGVzdHJveUluc3BlY3RvclZpZXcoKTsKIH0KIAot
dm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmF0dGFjaFdpbmRvdygpCit2b2lkIFdlYkluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50OjphdHRhY2hXaW5kb3coKQogewogICAgIGlmIChtX2F0dGFjaGVkKQog
ICAgICAgICByZXR1cm47CkBAIC0yMzcsNyArMjcyLDcgQEAgdm9pZCBXZWJJbnNwZWN0b3JDbGll
bnQ6OmF0dGFjaFdpbmRvdygpCiAgICAgc2hvd1dpbmRvd1dpdGhvdXROb3RpZmljYXRpb25zKCk7
CiB9CiAKLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpkZXRhY2hXaW5kb3coKQordm9pZCBXZWJJ
bnNwZWN0b3JGcm9udGVuZENsaWVudDo6ZGV0YWNoV2luZG93KCkKIHsKICAgICBpZiAoIW1fYXR0
YWNoZWQpCiAgICAgICAgIHJldHVybjsKQEAgLTI0OCw3ICsyODMsNyBAQCB2b2lkIFdlYkluc3Bl
Y3RvckNsaWVudDo6ZGV0YWNoV2luZG93KCkKICAgICBzaG93V2luZG93V2l0aG91dE5vdGlmaWNh
dGlvbnMoKTsKIH0KIAotdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OnNldEF0dGFjaGVkV2luZG93
SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkKK3ZvaWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6
OnNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkKIHsKICAgICBpZiAoIW1f
YXR0YWNoZWQpCiAgICAgICAgIHJldHVybjsKQEAgLTI2NiwxMDEgKzMwMSw3MyBAQCB2b2lkIFdl
Ykluc3BlY3RvckNsaWVudDo6c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0
KQogICAgIGludCB0b3RhbEhlaWdodCA9IGhvc3RXaW5kb3dSZWN0LmJvdHRvbSAtIGhvc3RXaW5k
b3dSZWN0LnRvcDsKICAgICBpbnQgd2ViVmlld1dpZHRoID0gaW5zcGVjdGVkUmVjdC5yaWdodCAt
IGluc3BlY3RlZFJlY3QubGVmdDsKIAotICAgIFNldFdpbmRvd1BvcyhtX3dlYlZpZXdId25kLCAw
LCAwLCB0b3RhbEhlaWdodCAtIGhlaWdodCwgd2ViVmlld1dpZHRoLCBoZWlnaHQsIFNXUF9OT1pP
UkRFUik7CisgICAgU2V0V2luZG93UG9zKG1fZnJvbnRlbmRXZWJWaWV3SHduZCwgMCwgMCwgdG90
YWxIZWlnaHQgLSBoZWlnaHQsIHdlYlZpZXdXaWR0aCwgaGVpZ2h0LCBTV1BfTk9aT1JERVIpOwog
CiAgICAgLy8gV2Ugd2FudCB0byBzZXQgdGhlIGluc3BlY3RlZCB3ZWIgdmlldyBoZWlnaHQgdG8g
dGhlIHRvdGFsSGVpZ2h0LCBiZWNhdXNlIHRoZSBoZWlnaHQgYWRqdXN0bWVudAogICAgIC8vIG9m
IHRoZSBpbnNwZWN0ZWQgd2ViIHZpZXcgaGFwcGVucyBpbiBvbldlYlZpZXdXaW5kb3dQb3NDaGFu
Z2luZywgbm90IGhlcmUuCiAgICAgU2V0V2luZG93UG9zKG1faW5zcGVjdGVkV2ViVmlld0h3bmQs
IDAsIDAsIDAsIHdlYlZpZXdXaWR0aCwgdG90YWxIZWlnaHQsIFNXUF9OT1pPUkRFUik7CiAKLSAg
ICBSZWRyYXdXaW5kb3cobV93ZWJWaWV3SHduZCwgMCwgMCwgUkRXX0lOVkFMSURBVEUgfCBSRFdf
QUxMQ0hJTERSRU4gfCBSRFdfVVBEQVRFTk9XKTsgCisgICAgUmVkcmF3V2luZG93KG1fZnJvbnRl
bmRXZWJWaWV3SHduZCwgMCwgMCwgUkRXX0lOVkFMSURBVEUgfCBSRFdfQUxMQ0hJTERSRU4gfCBS
RFdfVVBEQVRFTk9XKTsgCiAgICAgUmVkcmF3V2luZG93KG1faW5zcGVjdGVkV2ViVmlld0h3bmQs
IDAsIDAsIFJEV19JTlZBTElEQVRFIHwgUkRXX0FMTENISUxEUkVOIHwgUkRXX1VQREFURU5PVyk7
CiB9CiAKLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpoaWdobGlnaHQoTm9kZSopCi17Ci0gICAg
Ym9vbCBjcmVhdGluZ0hpZ2hsaWdodCA9ICFtX2hpZ2hsaWdodDsKLQotICAgIGlmIChjcmVhdGlu
Z0hpZ2hsaWdodCkKLSAgICAgICAgbV9oaWdobGlnaHQuc2V0KG5ldyBXZWJOb2RlSGlnaGxpZ2h0
KG1faW5zcGVjdGVkV2ViVmlldykpOwotCi0gICAgaWYgKG1faGlnaGxpZ2h0LT5pc1Nob3dpbmco
KSkKLSAgICAgICAgbV9oaWdobGlnaHQtPnVwZGF0ZSgpOwotICAgIGVsc2UKLSAgICAgICAgbV9o
aWdobGlnaHQtPnNldFNob3dzV2hpbGVXZWJWaWV3SXNWaXNpYmxlKHRydWUpOwotCi0gICAgaWYg
KGNyZWF0aW5nSGlnaGxpZ2h0ICYmIElzV2luZG93VmlzaWJsZShtX2h3bmQpKQotICAgICAgICBt
X2hpZ2hsaWdodC0+cGxhY2VCZWhpbmRXaW5kb3cobV9od25kKTsKLX0KLQotdm9pZCBXZWJJbnNw
ZWN0b3JDbGllbnQ6OmhpZGVIaWdobGlnaHQoKQotewotICAgIGlmIChtX2hpZ2hsaWdodCkKLSAg
ICAgICAgbV9oaWdobGlnaHQtPnNldFNob3dzV2hpbGVXZWJWaWV3SXNWaXNpYmxlKGZhbHNlKTsK
LX0KLQotdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6Omluc3BlY3RlZFVSTENoYW5nZWQoY29uc3Qg
U3RyaW5nJiBuZXdVUkwpCit2b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjppbnNwZWN0
ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYgbmV3VVJMKQogewogICAgIG1faW5zcGVjdGVkVVJM
ID0gbmV3VVJMOwogICAgIHVwZGF0ZVdpbmRvd1RpdGxlKCk7CiB9CiAKLXZvaWQgV2ViSW5zcGVj
dG9yQ2xpZW50OjppbnNwZWN0b3JXaW5kb3dPYmplY3RDbGVhcmVkKCkKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6Y2xvc2VXaW5kb3dXaXRo
b3V0Tm90aWZpY2F0aW9ucygpCit2b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpjbG9z
ZVdpbmRvd1dpdGhvdXROb3RpZmljYXRpb25zKCkKIHsKLSAgICBpZiAoIW1faHduZCkKKyAgICBp
ZiAoIW1fZnJvbnRlbmRId25kKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIW1fYXR0YWNo
ZWQpIHsKLSAgICAgICAgU2hvd1dpbmRvdyhtX2h3bmQsIFNXX0hJREUpOworICAgICAgICBTaG93
V2luZG93KG1fZnJvbnRlbmRId25kLCBTV19ISURFKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIEFTU0VSVChtX3dlYlZpZXcpOworICAgIEFTU0VSVChtX2Zyb250ZW5kV2ViVmlldyk7
CiAgICAgQVNTRVJUKG1faW5zcGVjdGVkV2ViVmlld0h3bmQpOwotICAgIEFTU0VSVCghSXNXaW5k
b3dWaXNpYmxlKG1faHduZCkpOworICAgIEFTU0VSVCghSXNXaW5kb3dWaXNpYmxlKG1fZnJvbnRl
bmRId25kKSk7CiAKICAgICAvLyBSZW1vdmUgdGhlIEluc3BlY3RvcidzIFdlYlZpZXcgZnJvbSB0
aGUgaW5zcGVjdGVkIFdlYlZpZXcncyBwYXJlbnQgd2luZG93LgogICAgIFdpbmRvd01lc3NhZ2VC
cm9hZGNhc3Rlcjo6cmVtb3ZlTGlzdGVuZXIobV9pbnNwZWN0ZWRXZWJWaWV3SHduZCwgdGhpcyk7
CiAKICAgICBtX2F0dGFjaGVkID0gZmFsc2U7CiAKLSAgICBtX3dlYlZpZXctPnNldEhvc3RXaW5k
b3cocmVpbnRlcnByZXRfY2FzdDxPTEVfSEFORExFPihtX2h3bmQpKTsKKyAgICBtX2Zyb250ZW5k
V2ViVmlldy0+c2V0SG9zdFdpbmRvdyhyZWludGVycHJldF9jYXN0PE9MRV9IQU5ETEU+KG1fZnJv
bnRlbmRId25kKSk7CiAKICAgICAvLyBNYWtlIHN1cmUgZXZlcnl0aGluZyBoYXMgdGhlIHJpZ2h0
IHNpemUvcG9zaXRpb24uCiAgICAgSFdORCBob3N0V2luZG93OwogICAgIGlmIChTVUNDRUVERUQo
bV9pbnNwZWN0ZWRXZWJWaWV3LT5ob3N0V2luZG93KChPTEVfSEFORExFKikmaG9zdFdpbmRvdykp
KQogICAgICAgICBTZW5kTWVzc2FnZShob3N0V2luZG93LCBXTV9TSVpFLCAwLCAwKTsKIAotICAg
IGlmIChtX2hpZ2hsaWdodCAmJiBtX2hpZ2hsaWdodC0+aXNTaG93aW5nKCkpCi0gICAgICAgIG1f
aGlnaGxpZ2h0LT51cGRhdGUoKTsKKyAgICBtX2luc3BlY3RvckNsaWVudC0+dXBkYXRlSGlnaGxp
Z2h0KCk7CiB9CiAKLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpzaG93V2luZG93V2l0aG91dE5v
dGlmaWNhdGlvbnMoKQordm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6c2hvd1dpbmRv
d1dpdGhvdXROb3RpZmljYXRpb25zKCkKIHsKLSAgICBpZiAoIW1faHduZCkKKyAgICBpZiAoIW1f
ZnJvbnRlbmRId25kKQogICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQobV93ZWJWaWV3KTsK
KyAgICBBU1NFUlQobV9mcm9udGVuZFdlYlZpZXcpOwogICAgIEFTU0VSVChtX2luc3BlY3RlZFdl
YlZpZXdId25kKTsKIAogICAgIC8vIElmIG5vIHByZWZlcmVuY2UgaXMgc2V0IC0gZGVmYXVsdCB0
byBhbiBhdHRhY2hlZCB3aW5kb3cuIFRoaXMgaXMgaW1wb3J0YW50IGZvciBpbnNwZWN0b3IgTGF5
b3V0VGVzdHMuCiAgICAgU3RyaW5nIHNob3VsZEF0dGFjaCA9IG1faW5zcGVjdGVkV2ViVmlldy0+
cGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnNldHRpbmcoSW5zcGVjdG9yQ29udHJvbGxl
cjo6aW5zcGVjdG9yU3RhcnRzQXR0YWNoZWRTZXR0aW5nTmFtZSgpKTsKICAgICBtX3Nob3VsZEF0
dGFjaFdoZW5TaG93biA9IHNob3VsZEF0dGFjaCAhPSAiZmFsc2UiOwogICAgICAgICAKLSAgICBp
ZiAobV9zaG91bGRBdHRhY2hXaGVuU2hvd24gJiYgIW1faW5zcGVjdGVkV2ViVmlldy0+cGFnZSgp
LT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmNhbkF0dGFjaFdpbmRvdygpKQorICAgIGlmIChtX3No
b3VsZEF0dGFjaFdoZW5TaG93biAmJiAhY2FuQXR0YWNoV2luZG93KCkpCiAgICAgICAgIG1fc2hv
dWxkQXR0YWNoV2hlblNob3duID0gZmFsc2U7CiAgICAgCiAgICAgaWYgKCFtX3Nob3VsZEF0dGFj
aFdoZW5TaG93bikgewogICAgICAgICAvLyBQdXQgdGhlIEluc3BlY3RvcidzIFdlYlZpZXcgaW5z
aWRlIG91ciB3aW5kb3cgYW5kIHNob3cgaXQuCi0gICAgICAgIG1fd2ViVmlldy0+c2V0SG9zdFdp
bmRvdyhyZWludGVycHJldF9jYXN0PE9MRV9IQU5ETEU+KG1faHduZCkpOwotICAgICAgICBTZW5k
TWVzc2FnZShtX2h3bmQsIFdNX1NJWkUsIDAsIDApOworICAgICAgICBtX2Zyb250ZW5kV2ViVmll
dy0+c2V0SG9zdFdpbmRvdyhyZWludGVycHJldF9jYXN0PE9MRV9IQU5ETEU+KG1fZnJvbnRlbmRI
d25kKSk7CisgICAgICAgIFNlbmRNZXNzYWdlKG1fZnJvbnRlbmRId25kLCBXTV9TSVpFLCAwLCAw
KTsKICAgICAgICAgdXBkYXRlV2luZG93VGl0bGUoKTsKIAotICAgICAgICBTZXRXaW5kb3dQb3Mo
bV9od25kLCBIV05EX1RPUCwgMCwgMCwgMCwgMCwgU1dQX1NIT1dXSU5ET1cgfCBTV1BfTk9NT1ZF
IHwgU1dQX05PU0laRSk7CisgICAgICAgIFNldFdpbmRvd1BvcyhtX2Zyb250ZW5kSHduZCwgSFdO
RF9UT1AsIDAsIDAsIDAsIDAsIFNXUF9TSE9XV0lORE9XIHwgU1dQX05PTU9WRSB8IFNXUF9OT1NJ
WkUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0zNzEsMjAgKzM3OCwzMiBAQCB2b2lk
IFdlYkluc3BlY3RvckNsaWVudDo6c2hvd1dpbmRvd1dpdGhvdXROb3RpZmljYXRpb25zKCkKICAg
ICBpZiAoRkFJTEVEKG1faW5zcGVjdGVkV2ViVmlldy0+aG9zdFdpbmRvdyhyZWludGVycHJldF9j
YXN0PE9MRV9IQU5ETEUqPigmaG9zdFdpbmRvdykpKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
bV93ZWJWaWV3LT5zZXRIb3N0V2luZG93KHJlaW50ZXJwcmV0X2Nhc3Q8T0xFX0hBTkRMRT4oaG9z
dFdpbmRvdykpOworICAgIG1fZnJvbnRlbmRXZWJWaWV3LT5zZXRIb3N0V2luZG93KHJlaW50ZXJw
cmV0X2Nhc3Q8T0xFX0hBTkRMRT4oaG9zdFdpbmRvdykpOwogCiAgICAgLy8gVGhlbiBoaWRlIG91
ciBvd24gd2luZG93LgotICAgIFNob3dXaW5kb3cobV9od25kLCBTV19ISURFKTsKKyAgICBTaG93
V2luZG93KG1fZnJvbnRlbmRId25kLCBTV19ISURFKTsKIAogICAgIG1fYXR0YWNoZWQgPSB0cnVl
OwogCiAgICAgLy8gTWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaGFzIHRoZSByaWdodCBzaXplL3Bvc2l0
aW9uLgogICAgIFNlbmRNZXNzYWdlKGhvc3RXaW5kb3csIFdNX1NJWkUsIDAsIDApOwotICAgIGlm
IChtX2hpZ2hsaWdodCAmJiBtX2hpZ2hsaWdodC0+aXNTaG93aW5nKCkpCi0gICAgICAgIG1faGln
aGxpZ2h0LT51cGRhdGUoKTsKKyAgICBtX2luc3BlY3RvckNsaWVudC0+dXBkYXRlSGlnaGxpZ2h0
KCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmRlc3Ryb3lJbnNwZWN0
b3JWaWV3KCkKK3sKKyAgICBpZiAobV9kZXN0cm95aW5nSW5zcGVjdG9yVmlldykKKyAgICAgICAg
cmV0dXJuOworICAgIG1fZGVzdHJveWluZ0luc3BlY3RvclZpZXcgPSB0cnVlOworCisgICAgbV9p
bnNwZWN0ZWRXZWJWaWV3LT5wYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+Y2xvc2UoKTsK
KworICAgIGNsb3NlV2luZG93V2l0aG91dE5vdGlmaWNhdGlvbnMoKTsKKyAgICBtX2luc3BlY3Rv
ckNsaWVudC0+ZnJvbnRlbmRDbG9zaW5nKCk7CisgICAgOjpEZXN0cm95V2luZG93KG1fZnJvbnRl
bmRId25kKTsKIH0KIAotdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OnVwZGF0ZVdpbmRvd1RpdGxl
KCkKK3ZvaWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OnVwZGF0ZVdpbmRvd1RpdGxlKCkK
IHsKICAgICAvLyBGSVhNRTogVGhlIHNlcmllcyBvZiBhcHBlbmRzIHNob3VsZCBiZSByZXBsYWNl
ZCB3aXRoIGEgY2FsbCB0byBTdHJpbmc6OmZvcm1hdCgpCiAgICAgLy8gd2hlbiBpdCBjYW4gYmUg
ZmlndXJlZCBvdXQgaG93IHRvIGdldCB0aGUgdW5pY29kZSBlbS1kYXNoIHRvIHNob3cgdXAuCkBA
IC0zOTIsMTAgKzQxMSwxMCBAQCB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6dXBkYXRlV2luZG93
VGl0bGUoKQogICAgIHRpdGxlLmFwcGVuZCgoVUNoYXIpMHgyMDE0KTsgLy8gZW0tZGFzaAogICAg
IHRpdGxlLmFwcGVuZCgnICcpOwogICAgIHRpdGxlLmFwcGVuZChtX2luc3BlY3RlZFVSTCk7Ci0g
ICAgOjpTZXRXaW5kb3dUZXh0KG1faHduZCwgdGl0bGUuY2hhcmFjdGVyc1dpdGhOdWxsVGVybWlu
YXRpb24oKSk7CisgICAgOjpTZXRXaW5kb3dUZXh0KG1fZnJvbnRlbmRId25kLCB0aXRsZS5jaGFy
YWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpKTsKIH0KIAotTFJFU1VMVCBXZWJJbnNwZWN0b3JD
bGllbnQ6Om9uR2V0TWluTWF4SW5mbyhXUEFSQU0sIExQQVJBTSBsUGFyYW0pCitMUkVTVUxUIFdl
Ykluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpvbkdldE1pbk1heEluZm8oV1BBUkFNLCBMUEFSQU0g
bFBhcmFtKQogewogICAgIE1JTk1BWElORk8qIGluZm8gPSByZWludGVycHJldF9jYXN0PE1JTk1B
WElORk8qPihsUGFyYW0pOwogICAgIFBPSU5UIHNpemUgPSB7NDAwLCA0MDB9OwpAQCAtNDA0LDMz
ICs0MjMsMzEgQEAgTFJFU1VMVCBXZWJJbnNwZWN0b3JDbGllbnQ6Om9uR2V0TWluTWF4SW5mbyhX
UEFSQU0sIExQQVJBTSBsUGFyYW0pCiAgICAgcmV0dXJuIDA7CiB9CiAKLUxSRVNVTFQgV2ViSW5z
cGVjdG9yQ2xpZW50OjpvblNpemUoV1BBUkFNLCBMUEFSQU0pCitMUkVTVUxUIFdlYkluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50OjpvblNpemUoV1BBUkFNLCBMUEFSQU0pCiB7CiAgICAgUkVDVCByZWN0
OwotICAgIDo6R2V0Q2xpZW50UmVjdChtX2h3bmQsICZyZWN0KTsKKyAgICA6OkdldENsaWVudFJl
Y3QobV9mcm9udGVuZEh3bmQsICZyZWN0KTsKIAotICAgIDo6U2V0V2luZG93UG9zKG1fd2ViVmll
d0h3bmQsIDAsIHJlY3QubGVmdCwgcmVjdC50b3AsIHJlY3QucmlnaHQgLSByZWN0LmxlZnQsIHJl
Y3QuYm90dG9tIC0gcmVjdC50b3AsIFNXUF9OT1pPUkRFUik7CisgICAgOjpTZXRXaW5kb3dQb3Mo
bV9mcm9udGVuZFdlYlZpZXdId25kLCAwLCByZWN0LmxlZnQsIHJlY3QudG9wLCByZWN0LnJpZ2h0
IC0gcmVjdC5sZWZ0LCByZWN0LmJvdHRvbSAtIHJlY3QudG9wLCBTV1BfTk9aT1JERVIpOwogCiAg
ICAgcmV0dXJuIDA7CiB9CiAKLUxSRVNVTFQgV2ViSW5zcGVjdG9yQ2xpZW50OjpvbkNsb3NlKFdQ
QVJBTSwgTFBBUkFNKQorTFJFU1VMVCBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6b25DbG9z
ZShXUEFSQU0sIExQQVJBTSkKIHsKLSAgICA6OlNob3dXaW5kb3cobV9od25kLCBTV19ISURFKTsK
LSAgICBtX2luc3BlY3RlZFdlYlZpZXctPnBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5z
ZXRXaW5kb3dWaXNpYmxlKGZhbHNlLCBtX3Nob3VsZEF0dGFjaFdoZW5TaG93bik7Ci0KLSAgICBo
aWRlSGlnaGxpZ2h0KCk7CisgICAgOjpTaG93V2luZG93KG1fZnJvbnRlbmRId25kLCBTV19ISURF
KTsKKyAgICBtX2luc3BlY3RlZFdlYlZpZXctPnBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigp
LT5jbG9zZSgpOwogCiAgICAgcmV0dXJuIDA7CiB9CiAKLUxSRVNVTFQgV2ViSW5zcGVjdG9yQ2xp
ZW50OjpvblNldEZvY3VzKCkKK0xSRVNVTFQgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6Om9u
U2V0Rm9jdXMoKQogewotICAgIFNldEZvY3VzKG1fd2ViVmlld0h3bmQpOworICAgIFNldEZvY3Vz
KG1fZnJvbnRlbmRXZWJWaWV3SHduZCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgV2ViSW5z
cGVjdG9yQ2xpZW50OjpvbldlYlZpZXdXaW5kb3dQb3NDaGFuZ2luZyhXUEFSQU0sIExQQVJBTSBs
UGFyYW0pCit2b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpvbldlYlZpZXdXaW5kb3dQ
b3NDaGFuZ2luZyhXUEFSQU0sIExQQVJBTSBsUGFyYW0pCiB7CiAgICAgQVNTRVJUKG1fYXR0YWNo
ZWQpOwogCkBAIC00NDEsMTcgKzQ1OCwxNyBAQCB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6b25X
ZWJWaWV3V2luZG93UG9zQ2hhbmdpbmcoV1BBUkFNLCBMUEFSQU0gbFBhcmFtKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBSRUNUIGluc3BlY3RvclJlY3Q7Ci0gICAgR2V0Q2xpZW50UmVjdChtX3dl
YlZpZXdId25kLCAmaW5zcGVjdG9yUmVjdCk7CisgICAgR2V0Q2xpZW50UmVjdChtX2Zyb250ZW5k
V2ViVmlld0h3bmQsICZpbnNwZWN0b3JSZWN0KTsKICAgICB1bnNpZ25lZCBpbnNwZWN0b3JIZWln
aHQgPSBpbnNwZWN0b3JSZWN0LmJvdHRvbSAtIGluc3BlY3RvclJlY3QudG9wOwogCiAgICAgd2lu
ZG93UG9zLT5jeSAtPSBpbnNwZWN0b3JIZWlnaHQ7CiAKLSAgICBTZXRXaW5kb3dQb3MobV93ZWJW
aWV3SHduZCwgMCwgd2luZG93UG9zLT54LCB3aW5kb3dQb3MtPnkgKyB3aW5kb3dQb3MtPmN5LCB3
aW5kb3dQb3MtPmN4LCBpbnNwZWN0b3JIZWlnaHQsIFNXUF9OT1pPUkRFUik7CisgICAgU2V0V2lu
ZG93UG9zKG1fZnJvbnRlbmRXZWJWaWV3SHduZCwgMCwgd2luZG93UG9zLT54LCB3aW5kb3dQb3Mt
PnkgKyB3aW5kb3dQb3MtPmN5LCB3aW5kb3dQb3MtPmN4LCBpbnNwZWN0b3JIZWlnaHQsIFNXUF9O
T1pPUkRFUik7CiB9CiAKIHN0YXRpYyBMUkVTVUxUIENBTExCQUNLIFdlYkluc3BlY3RvclduZFBy
b2MoSFdORCBod25kLCBVSU5UIG1zZywgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKIHsK
LSAgICBXZWJJbnNwZWN0b3JDbGllbnQqIGNsaWVudCA9IHJlaW50ZXJwcmV0X2Nhc3Q8V2ViSW5z
cGVjdG9yQ2xpZW50Kj4oOjpHZXRQcm9wKGh3bmQsIGtXZWJJbnNwZWN0b3JQb2ludGVyUHJvcCkp
OworICAgIFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50KiBjbGllbnQgPSByZWludGVycHJldF9j
YXN0PFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50Kj4oOjpHZXRQcm9wKGh3bmQsIGtXZWJJbnNw
ZWN0b3JQb2ludGVyUHJvcCkpOwogICAgIGlmICghY2xpZW50KQogICAgICAgICByZXR1cm4gOjpE
ZWZXaW5kb3dQcm9jKGh3bmQsIG1zZywgd1BhcmFtLCBsUGFyYW0pOwogCkBAIC00NzEsNyArNDg4
LDcgQEAgc3RhdGljIExSRVNVTFQgQ0FMTEJBQ0sgV2ViSW5zcGVjdG9yV25kUHJvYyhIV05EIGh3
bmQsIFVJTlQgbXNnLCBXUEFSQU0gd1BhcmFtLAogICAgIHJldHVybiA6OkRlZldpbmRvd1Byb2Mo
aHduZCwgbXNnLCB3UGFyYW0sIGxQYXJhbSk7CiB9CiAKLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50
Ojp3aW5kb3dSZWNlaXZlZE1lc3NhZ2UoSFdORCwgVUlOVCBtc2csIFdQQVJBTSB3UGFyYW0sIExQ
QVJBTSBsUGFyYW0pCit2b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50Ojp3aW5kb3dSZWNl
aXZlZE1lc3NhZ2UoSFdORCwgVUlOVCBtc2csIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0p
CiB7CiAgICAgc3dpdGNoIChtc2cpIHsKICAgICAgICAgY2FzZSBXTV9XSU5ET1dQT1NDSEFOR0lO
RzoKZGlmZiAtLWdpdCBhL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xp
ZW50LmggYi9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5oCmlu
ZGV4IDNmNjViMGEuLjQ1NWUzYTEgMTAwNjQ0Ci0tLSBhL1dlYktpdC93aW4vV2ViQ29yZVN1cHBv
cnQvV2ViSW5zcGVjdG9yQ2xpZW50LmgKKysrIGIvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9X
ZWJJbnNwZWN0b3JDbGllbnQuaApAQCAtMzEsNiArMzEsNyBAQAogCiAjaW5jbHVkZSA8V2ViQ29y
ZS9DT01QdHIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckNsaWVudC5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvUGxhdGZvcm1TdHJpbmcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1dpbmRvd01lc3NhZ2VM
aXN0ZW5lci5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KQEAgLTM5LDQ0ICs0MCw2MCBAQAog
Y2xhc3MgV2ViTm9kZUhpZ2hsaWdodDsKIGNsYXNzIFdlYlZpZXc7CiAKLWNsYXNzIFdlYkluc3Bl
Y3RvckNsaWVudCA6IHB1YmxpYyBXZWJDb3JlOjpJbnNwZWN0b3JDbGllbnQsIFdlYkNvcmU6Oldp
bmRvd01lc3NhZ2VMaXN0ZW5lciB7CitjbGFzcyBXZWJJbnNwZWN0b3JDbGllbnQgOiBwdWJsaWMg
V2ViQ29yZTo6SW5zcGVjdG9yQ2xpZW50IHsKIHB1YmxpYzoKICAgICBXZWJJbnNwZWN0b3JDbGll
bnQoV2ViVmlldyopOwogCiAgICAgLy8gSW5zcGVjdG9yQ2xpZW50CiAgICAgdmlydHVhbCB2b2lk
IGluc3BlY3RvckRlc3Ryb3llZCgpOwogCi0gICAgdmlydHVhbCBXZWJDb3JlOjpQYWdlKiBjcmVh
dGVQYWdlKCk7Ci0KLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlN0cmluZyBsb2NhbGl6ZWRTdHJpbmdz
VVJMKCk7Ci0KLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlN0cmluZyBoaWRkZW5QYW5lbHMoKTsKLQot
ICAgIHZpcnR1YWwgdm9pZCBzaG93V2luZG93KCk7Ci0gICAgdmlydHVhbCB2b2lkIGNsb3NlV2lu
ZG93KCk7Ci0gICAgdmlydHVhbCBib29sIHdpbmRvd1Zpc2libGUoKTsKLQotICAgIHZpcnR1YWwg
dm9pZCBhdHRhY2hXaW5kb3coKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoV2luZG93KCk7Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0
KTsKKyAgICB2aXJ0dWFsIHZvaWQgb3Blbkluc3BlY3RvckZyb250ZW5kKFdlYkNvcmU6Okluc3Bl
Y3RvckNvbnRyb2xsZXIqKTsKIAogICAgIHZpcnR1YWwgdm9pZCBoaWdobGlnaHQoV2ViQ29yZTo6
Tm9kZSopOwogICAgIHZpcnR1YWwgdm9pZCBoaWRlSGlnaGxpZ2h0KCk7CiAKLSAgICB2aXJ0dWFs
IHZvaWQgaW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpTdHJpbmcmIG5ld1VSTCk7
Ci0KICAgICB2aXJ0dWFsIHZvaWQgcG9wdWxhdGVTZXR0aW5nKGNvbnN0IFdlYkNvcmU6OlN0cmlu
ZyYga2V5LCBXZWJDb3JlOjpTdHJpbmcqIHZhbHVlKTsKICAgICB2aXJ0dWFsIHZvaWQgc3RvcmVT
ZXR0aW5nKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYga2V5LCBjb25zdCBXZWJDb3JlOjpTdHJpbmcm
IHZhbHVlKTsKIAotICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0b3JXaW5kb3dPYmplY3RDbGVhcmVk
KCk7CisgICAgdm9pZCB1cGRhdGVIaWdobGlnaHQoKTsKKyAgICB2b2lkIGZyb250ZW5kQ2xvc2lu
ZygpIHsgbV9mcm9udGVuZEh3bmQgPSAwOyB9CiAKIHByaXZhdGU6CiAgICAgfldlYkluc3BlY3Rv
ckNsaWVudCgpOwogCisgICAgV2ViVmlldyogbV9pbnNwZWN0ZWRXZWJWaWV3OworICAgIEhXTkQg
bV9pbnNwZWN0ZWRXZWJWaWV3SHduZDsKKyAgICBIV05EIG1fZnJvbnRlbmRId25kOworCisgICAg
T3duUHRyPFdlYk5vZGVIaWdobGlnaHQ+IG1faGlnaGxpZ2h0OworfTsKKworY2xhc3MgV2ViSW5z
cGVjdG9yRnJvbnRlbmRDbGllbnQgOiBwdWJsaWMgV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRD
bGllbnRMb2NhbCwgV2ViQ29yZTo6V2luZG93TWVzc2FnZUxpc3RlbmVyIHsKK3B1YmxpYzoKKyAg
ICBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudChXZWJWaWV3KiBpbnNwZWN0ZWRXZWJWaWV3LCBI
V05EIGluc3BlY3RlZFdlYlZpZXdId25kLCBIV05EIGZyb250ZW5kSHduZCwgY29uc3QgQ09NUHRy
PFdlYlZpZXc+JiBmcm90bmVuZFdlYlZpZXcsIEhXTkQgZnJvbnRlbmRXZWJWaWV3SHduZCwgV2Vi
SW5zcGVjdG9yQ2xpZW50KiBpbnNwZWN0b3JDbGllbnQpOworCisgICAgdmlydHVhbCB2b2lkIGZy
b250ZW5kTG9hZGVkKCk7CisgICAgCisgICAgdmlydHVhbCBXZWJDb3JlOjpTdHJpbmcgbG9jYWxp
emVkU3RyaW5nc1VSTCgpOworICAgIHZpcnR1YWwgV2ViQ29yZTo6U3RyaW5nIGhpZGRlblBhbmVs
cygpOworICAgIAorICAgIHZpcnR1YWwgdm9pZCBicmluZ1RvRnJvbnQoKTsKKyAgICB2aXJ0dWFs
IHZvaWQgY2xvc2VXaW5kb3coKTsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoV2luZG93
KCk7CisgICAgdmlydHVhbCB2b2lkIGRldGFjaFdpbmRvdygpOworICAgIAorICAgIHZpcnR1YWwg
dm9pZCBzZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpOworICAgIHZpcnR1
YWwgdm9pZCBpbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgbmV3VVJM
KTsKKworcHJpdmF0ZToKKyAgICB+V2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQoKTsKKwogICAg
IHZvaWQgY2xvc2VXaW5kb3dXaXRob3V0Tm90aWZpY2F0aW9ucygpOwogICAgIHZvaWQgc2hvd1dp
bmRvd1dpdGhvdXROb3RpZmljYXRpb25zKCk7CiAKKyAgICB2b2lkIGRlc3Ryb3lJbnNwZWN0b3JW
aWV3KCk7CisKICAgICB2b2lkIHVwZGF0ZVdpbmRvd1RpdGxlKCk7CiAKICAgICBMUkVTVUxUIG9u
R2V0TWluTWF4SW5mbyhXUEFSQU0sIExQQVJBTSk7CkBAIC05MCwxNiArMTA3LDE2IEBAIHByaXZh
dGU6CiAKICAgICBXZWJWaWV3KiBtX2luc3BlY3RlZFdlYlZpZXc7CiAgICAgSFdORCBtX2luc3Bl
Y3RlZFdlYlZpZXdId25kOwotICAgIEhXTkQgbV9od25kOwotICAgIENPTVB0cjxXZWJWaWV3PiBt
X3dlYlZpZXc7Ci0gICAgSFdORCBtX3dlYlZpZXdId25kOworICAgIEhXTkQgbV9mcm9udGVuZEh3
bmQ7CisgICAgV2ViSW5zcGVjdG9yQ2xpZW50KiBtX2luc3BlY3RvckNsaWVudDsKKyAgICBDT01Q
dHI8V2ViVmlldz4gbV9mcm9udGVuZFdlYlZpZXc7CisgICAgSFdORCBtX2Zyb250ZW5kV2ViVmll
d0h3bmQ7CiAKICAgICBib29sIG1fc2hvdWxkQXR0YWNoV2hlblNob3duOwogICAgIGJvb2wgbV9h
dHRhY2hlZDsKIAotICAgIE93blB0cjxXZWJOb2RlSGlnaGxpZ2h0PiBtX2hpZ2hsaWdodDsKLQog
ICAgIFdlYkNvcmU6OlN0cmluZyBtX2luc3BlY3RlZFVSTDsKKyAgICBib29sIG1fZGVzdHJveWlu
Z0luc3BlY3RvclZpZXc7CiAKICAgICBzdGF0aWMgZnJpZW5kIExSRVNVTFQgQ0FMTEJBQ0sgV2Vi
SW5zcGVjdG9yV25kUHJvYyhIV05ELCBVSU5ULCBXUEFSQU0sIExQQVJBTSk7CiB9OwpkaWZmIC0t
Z2l0IGEvV2ViS2l0L3dpbi9XZWJJbnNwZWN0b3IuY3BwIGIvV2ViS2l0L3dpbi9XZWJJbnNwZWN0
b3IuY3BwCmluZGV4IGU0YWMzMmIuLjAzMzc3MTEgMTAwNjQ0Ci0tLSBhL1dlYktpdC93aW4vV2Vi
SW5zcGVjdG9yLmNwcAorKysgYi9XZWJLaXQvd2luL1dlYkluc3BlY3Rvci5jcHAKQEAgLTEzMSwx
OSArMTMxLDExIEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViSW5zcGVjdG9yOjpjbG9z
ZSgpCiAKIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViSW5zcGVjdG9yOjphdHRhY2goKQog
ewotICAgIGlmIChtX3dlYlZpZXcpCi0gICAgICAgIGlmIChQYWdlKiBwYWdlID0gbV93ZWJWaWV3
LT5wYWdlKCkpCi0gICAgICAgICAgICBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmF0dGFj
aFdpbmRvdygpOwotCiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKIEhSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgV2ViSW5zcGVjdG9yOjpkZXRhY2goKQogewotICAgIGlmIChtX3dlYlZpZXcpCi0gICAg
ICAgIGlmIChQYWdlKiBwYWdlID0gbV93ZWJWaWV3LT5wYWdlKCkpCi0gICAgICAgICAgICBwYWdl
LT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmRldGFjaFdpbmRvdygpOwotCiAgICAgcmV0dXJuIFNf
T0s7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYktpdC93eC9DaGFuZ2VMb2cgYi9XZWJLaXQvd3gvQ2hh
bmdlTG9nCmluZGV4IDRhYzc2MDkuLmRmNzJjZDUgMTAwNjQ0Ci0tLSBhL1dlYktpdC93eC9DaGFu
Z2VMb2cKKysrIGIvV2ViS2l0L3d4L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEwLTAz
LTEwICBZdXJ5IFNlbWlraGF0c2t5IDx5dXJ5c0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW50cm9kdWNlIEluc3BlY3RvckZy
b250ZW5kQ2xpZW50IHRoYXQgcHJvdmlkZXMgSW5zcGVjdG9yRnJvbnRlbmQgd2l0aCBhbiBpbnRl
cmZhY2UgdG8gdGhlIGVtYmVkZGVyLiBJbnNwZWN0b3JDbGllbnQgbm93IHNlcnZlcyBhcyBhIGRl
bGVnYXRlIGZvciBJbnNwZWN0b3JDb250cm9sbGVyIGFuZCBkb2VzIG5vdCBjb250YWluIG1ldGhv
ZHMgZm9yIG1hbmFnaW5nIGluc3BlY3RvciBmcm9udGVuZCB3aW5kb3cuIFRoYXQgYWxsb3dzIHRv
IGNyZWF0ZSByZW1vdGUgSW5zcGVjdG9yRnJvbnRlbmRIb3N0LgorCisgICAgICAgIEludHJvZHVj
ZSBJbnNwZWN0b3JGcm9udGVuZENsaWVudCB0aGF0IHdvdWxkIHByb3ZpZGUgSW5zcGVjdG9yRnJv
bnRlbmQgd2l0aCBhbiBpbnRlcmZhY2UgdG8gdGhlIGVtYmVkZGVyCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNTAzNgorCisgICAgICAgICogV2ViS2l0
U3VwcG9ydC9JbnNwZWN0b3JDbGllbnRXeC5jcHA6CisgICAgICAgICogV2ViS2l0U3VwcG9ydC9J
bnNwZWN0b3JDbGllbnRXeC5oOgorCiAyMDEwLTAzLTAyICBBZGFtIFRyZWF0ICA8YXRyZWF0QHJp
bS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2ZSBIeWF0dC4KZGlmZiAtLWdpdCBhL1dl
YktpdC93eC9XZWJLaXRTdXBwb3J0L0luc3BlY3RvckNsaWVudFd4LmNwcCBiL1dlYktpdC93eC9X
ZWJLaXRTdXBwb3J0L0luc3BlY3RvckNsaWVudFd4LmNwcAppbmRleCBmZjIxYWUwLi40M2ZiYjJi
IDEwMDY0NAotLS0gYS9XZWJLaXQvd3gvV2ViS2l0U3VwcG9ydC9JbnNwZWN0b3JDbGllbnRXeC5j
cHAKKysrIGIvV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50V3guY3BwCkBA
IC00Nyw0NSArNDcsOCBAQCB2b2lkIEluc3BlY3RvckNsaWVudFd4OjppbnNwZWN0b3JEZXN0cm95
ZWQoKQogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLVBhZ2UqIEluc3BlY3RvckNsaWVudFd4
OjpjcmVhdGVQYWdlKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwot
fQotCi1TdHJpbmcgSW5zcGVjdG9yQ2xpZW50V3g6OmxvY2FsaXplZFN0cmluZ3NVUkwoKQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1TdHJpbmcg
SW5zcGVjdG9yQ2xpZW50V3g6OmhpZGRlblBhbmVscygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ2xpZW50V3g6OnNo
b3dXaW5kb3coKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0gICAgCi12b2lkIEluc3Bl
Y3RvckNsaWVudFd4OjpjbG9zZVdpbmRvdygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotdm9pZCBJbnNwZWN0b3JDbGllbnRXeDo6YXR0YWNoV2luZG93KCkKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotfQotCi12b2lkIEluc3BlY3RvckNsaWVudFd4OjpkZXRhY2hXaW5kb3coKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19CiAKLXZvaWQgSW5zcGVjdG9yQ2xpZW50V3g6OnNl
dEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkKK3ZvaWQgSW5zcGVjdG9yQ2xp
ZW50V3g6Om9wZW5JbnNwZWN0b3JGcm9udGVuZChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVy
Kik7CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KQEAgLTEwMCwxMSArNjMsNiBAQCB2b2lk
IEluc3BlY3RvckNsaWVudFd4OjpoaWRlSGlnaGxpZ2h0KCkKICAgICBub3RJbXBsZW1lbnRlZCgp
OwogfQogCi12b2lkIEluc3BlY3RvckNsaWVudFd4OjppbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0
IFN0cmluZyYgbmV3VVJMKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KIHZvaWQgSW5z
cGVjdG9yQ2xpZW50V3g6OnBvcHVsYXRlU2V0dGluZyhjb25zdCBTdHJpbmcmIGtleSwgU3RyaW5n
KiBzZXR0aW5nKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CkBAIC0xMTUsOSArNzMsNCBAQCB2
b2lkIEluc3BlY3RvckNsaWVudFd4OjpzdG9yZVNldHRpbmcoY29uc3QgU3RyaW5nJiBrZXksIGNv
bnN0IFN0cmluZyYgc2V0dGluZykKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIElu
c3BlY3RvckNsaWVudFd4OjppbnNwZWN0b3JXaW5kb3dPYmplY3RDbGVhcmVkKCkKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotfQotCiB9OwpkaWZmIC0tZ2l0IGEvV2ViS2l0L3d4L1dlYktpdFN1
cHBvcnQvSW5zcGVjdG9yQ2xpZW50V3guaCBiL1dlYktpdC93eC9XZWJLaXRTdXBwb3J0L0luc3Bl
Y3RvckNsaWVudFd4LmgKaW5kZXggZjkwNTgxNy4uNzY3NWRjMSAxMDA2NDQKLS0tIGEvV2ViS2l0
L3d4L1dlYktpdFN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50V3guaAorKysgYi9XZWJLaXQvd3gvV2Vi
S2l0U3VwcG9ydC9JbnNwZWN0b3JDbGllbnRXeC5oCkBAIC00MSwyOSArNDEsMTMgQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCB2b2lkIGluc3BlY3RvckRlc3Ryb3llZCgpOwogCi0gICAgdmlydHVh
bCBQYWdlKiBjcmVhdGVQYWdlKCk7Ci0KLSAgICB2aXJ0dWFsIFN0cmluZyBsb2NhbGl6ZWRTdHJp
bmdzVVJMKCk7Ci0KLSAgICB2aXJ0dWFsIFN0cmluZyBoaWRkZW5QYW5lbHMoKTsKLQotICAgIHZp
cnR1YWwgdm9pZCBzaG93V2luZG93KCk7Ci0gICAgdmlydHVhbCB2b2lkIGNsb3NlV2luZG93KCk7
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoV2luZG93KCk7Ci0gICAgdmlydHVhbCB2b2lkIGRl
dGFjaFdpbmRvdygpOwotCi0gICAgdmlydHVhbCB2b2lkIHNldEF0dGFjaGVkV2luZG93SGVpZ2h0
KHVuc2lnbmVkIGhlaWdodCk7CisgICAgdmlydHVhbCB2b2lkIG9wZW5JbnNwZWN0b3JGcm9udGVu
ZChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyKik7CiAKICAgICB2aXJ0dWFsIHZvaWQgaGln
aGxpZ2h0KE5vZGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgaGlkZUhpZ2hsaWdodCgpOwogCi0gICAg
dmlydHVhbCB2b2lkIGluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJiBuZXdVUkwpOwot
CiAgICAgdmlydHVhbCB2b2lkIHBvcHVsYXRlU2V0dGluZyhjb25zdCBTdHJpbmcmIGtleSwgU3Ry
aW5nKiB2YWx1ZSk7CiAgICAgdmlydHVhbCB2b2lkIHN0b3JlU2V0dGluZyhjb25zdCBTdHJpbmcm
IGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgaW5zcGVjdG9y
V2luZG93T2JqZWN0Q2xlYXJlZCgpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50492</attachid>
            <date>2010-03-11 05:58:37 -0800</date>
            <delta_ts>2010-03-11 06:20:16 -0800</delta_ts>
            <desc>patch</desc>
            <filename>frontend-client3.patch</filename>
            <type>text/plain</type>
            <size>161247</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MzUyZGJkYy4uZjQxMTM0NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMTAgQEAKKzIwMTAtMDMtMTEgIFl1cnkgU2VtaWto
YXRza3kgPHl1cnlzQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBJbnRyb2R1Y2UgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQgdGhh
dCBwcm92aWRlcyBJbnNwZWN0b3JGcm9udGVuZCB3aXRoIGFuIGludGVyZmFjZSB0byB0aGUgZW1i
ZWRkZXIuIEluc3BlY3RvckNsaWVudCBub3cgc2VydmVzIGFzIGEgZGVsZWdhdGUgZm9yIEluc3Bl
Y3RvckNvbnRyb2xsZXIgYW5kIGRvZXMgbm90IGNvbnRhaW4gbWV0aG9kcyBmb3IgbWFuYWdpbmcg
aW5zcGVjdG9yIGZyb250ZW5kIHdpbmRvdy4gVGhhdCBhbGxvd3MgdG8gY3JlYXRlIHJlbW90ZSBJ
bnNwZWN0b3JGcm9udGVuZEhvc3QuCisKKyAgICAgICAgSW50cm9kdWNlIEluc3BlY3RvckZyb250
ZW5kQ2xpZW50IHRoYXQgd291bGQgcHJvdmlkZSBJbnNwZWN0b3JGcm9udGVuZCB3aXRoIGFuIGlu
dGVyZmFjZSB0byB0aGUgZW1iZWRkZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTM1MDM2CisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiAoT09QUyEpCisK
KyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLkluc3BlY3Rvci5l
eHA6CisgICAgICAgICogV2ViQ29yZS5iYXNlLmV4cDoKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6
CisgICAgICAgICogV2ViQ29yZS5vcmRlcjoKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAg
ICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaW5zcGVj
dG9yL0NvbnNvbGVNZXNzYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnNvbGVNZXNzYWdl
OjphZGRUb0Zyb250ZW5kKToKKyAgICAgICAgKiBpbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuaDoK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ2xpZW50Lmg6CisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
Q29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JDb250cm9sbGVyOjp+SW5zcGVjdG9yQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0ZWRQYWdlRGVzdHJveWVkKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OndpbmRvd1Zpc2libGUpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZnJvbnRlbmRSZWFkeSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjp3aWxsQ2xvc2VGcm9udGVuZCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjphZGRDb25zb2xlTWVzc2FnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRJbnNwZWN0b3JGcm9udGVuZENs
aWVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0ZWRX
aW5kb3dTY3JpcHRPYmplY3RDbGVhcmVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNv
bnRyb2xsZXI6OnNldEZyb250ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRy
b2xsZXI6OnNob3cpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6Y2xv
c2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6cmVsZWFzZURPTUFn
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnBvcHVsYXRlU2Ny
aXB0T2JqZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRD
b21taXRMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmdldFBy
b2ZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZW5hYmxlRGVi
dWdnZXIpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpoYXNJbnNwZWN0b3JGcm9udGVuZENs
aWVudCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kOjpJbnNwZWN0b3JGcm9udGVuZCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZDo6fkluc3BlY3RvckZyb250ZW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kOjphZGRDb25zb2xlTWVzc2FnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZDo6YnJpbmdUb0Zyb250KToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kOjppbnNwZWN0ZWRVUkxDaGFuZ2VkKToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuaDoKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JGcm9udGVuZENsaWVudDo6fkluc3BlY3RvckZyb250ZW5kQ2xpZW50KToKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RnJvbnRlbmRNZW51UHJvdmlkZXI6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpGcm9udGVuZE1lbnVQcm92aWRlcjo6ZGlzY29ubmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGcm9udGVuZE1lbnVQcm92aWRlcjo6RnJvbnRlbmRNZW51UHJvdmlkZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6RnJvbnRlbmRNZW51UHJvdmlkZXI6On5Gcm9udGVuZE1lbnVQcm92aWRl
cik6CisgICAgICAgIChXZWJDb3JlOjpGcm9udGVuZE1lbnVQcm92aWRlcjo6cG9wdWxhdGVDb250
ZXh0TWVudSk6CisgICAgICAgIChXZWJDb3JlOjpGcm9udGVuZE1lbnVQcm92aWRlcjo6Y29udGV4
dE1lbnVJdGVtU2VsZWN0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJvbnRlbmRNZW51UHJvdmlk
ZXI6OmNvbnRleHRNZW51Q2xlYXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9u
dGVuZENsaWVudExvY2FsOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6On5JbnNwZWN0b3JGcm9udGVu
ZENsaWVudExvY2FsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50
TG9jYWw6OndpbmRvd09iamVjdENsZWFyZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RnJvbnRlbmRDbGllbnRMb2NhbDo6ZnJvbnRlbmRMb2FkZWQpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6Y2FuQXR0YWNoV2luZG93KToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OmNoYW5nZUF0dGFjaGVkV2lu
ZG93SGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9j
YWw6Om1vdmVXaW5kb3dCeSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENs
aWVudExvY2FsOjpzaG93Q29udGV4dE1lbnUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RnJvbnRlbmRDbGllbnRMb2NhbDo6c2V0QXR0YWNoZWRXaW5kb3cpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6cmVzdG9yZUF0dGFjaGVkV2luZG93SGVp
Z2h0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OmNv
bnN0cmFpbmVkQXR0YWNoZWRXaW5kb3dIZWlnaHQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmg6IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9J
bnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJv
bnRlbmRIb3N0OjpJbnNwZWN0b3JGcm9udGVuZEhvc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yRnJvbnRlbmRIb3N0Ojp+SW5zcGVjdG9yRnJvbnRlbmRIb3N0KToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckZyb250ZW5kSG9zdDo6bG9hZGVkKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckZyb250ZW5kSG9zdDo6YXR0YWNoKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckZyb250ZW5kSG9zdDo6ZGV0YWNoKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZy
b250ZW5kSG9zdDo6Y2xvc2VXaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJv
bnRlbmRIb3N0OjpicmluZ1RvRnJvbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJv
bnRlbmRIb3N0OjppbnNwZWN0ZWRVUkxDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckZyb250ZW5kSG9zdDo6Y2FuQXR0YWNoV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckZyb250ZW5kSG9zdDo6c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRIb3N0Ojptb3ZlV2luZG93QnkpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRIb3N0OjpzaG93Q29udGV4dE1lbnUpOgorICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckZyb250ZW5kSG9zdDo6Y3JlYXRlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yRnJvbnRlbmRIb3N0LmlkbDoKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0lu
c3BlY3RvckZyb250ZW5kSG9zdFN0dWIuanM6CisgICAgICAgICguV2ViSW5zcGVjdG9yLkluc3Bl
Y3RvckZyb250ZW5kSG9zdFN0dWIucHJvdG90eXBlLmJyaW5nVG9Gcm9udCk6CisgICAgICAgICgu
V2ViSW5zcGVjdG9yLkluc3BlY3RvckZyb250ZW5kSG9zdFN0dWIucHJvdG90eXBlLmluc3BlY3Rl
ZFVSTENoYW5nZWQpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpz
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLmxvYWRlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
Y2xvc2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLmJyaW5nVG9Gcm9udCk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuaW5zcGVjdGVkVVJMQ2hhbmdlZCk6CisgICAgICAgICogbG9hZGVyL0VtcHR5
Q2xpZW50cy5oOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlJbnNwZWN0b3JDbGllbnQ6Om9wZW5J
bnNwZWN0b3JGcm9udGVuZCk6CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpkaXNwYXRjaERpZENsZWFyV2luZG93T2JqZWN0
SW5Xb3JsZCk6CisgICAgICAgICogcGFnZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBh
Z2U6OlBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6flBhZ2UpOgorICAgICAgICAqIHBh
Z2UvUGFnZS5oOgorICAgICAgICAqIHBsYXRmb3JtL0NvbnRleHRNZW51LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRleHRNZW51Ojpwb3B1bGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250
ZXh0TWVudTo6YWRkSW5zcGVjdEVsZW1lbnRJdGVtKToKKwogMjAxMC0wMy0xMCAgU3RldmUgQmxv
Y2sgIDxzdGV2ZWJsb2NrQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSmVyZW15
IE9ybG93LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1dlYkNvcmUvR05V
bWFrZWZpbGUuYW0KaW5kZXggMWI0ZmRiYy4uOTcyM2RkOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9H
TlVtYWtlZmlsZS5hbQorKysgYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC0xMjM0LDYgKzEy
MzQsOSBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNvbnRyb2xsZXIuaCBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuY3Bw
IFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5oIFwKKwlXZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudC5oIFwKKwlXZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmNwcCBcCisJV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5oIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JGcm9udGVuZEhvc3QuY3BwIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVu
ZEhvc3QuaCBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2UuY3BwIFwKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5JbnNwZWN0b3IuZXhwIGIvV2ViQ29yZS9XZWJDb3Jl
Lkluc3BlY3Rvci5leHAKaW5kZXggMzc5YjdhMi4uZDVjMjFjMyAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9XZWJDb3JlLkluc3BlY3Rvci5leHAKKysrIGIvV2ViQ29yZS9XZWJDb3JlLkluc3BlY3Rvci5l
eHAKQEAgLTEsMTEgKzEsOSBAQAogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTBz
ZXRTZXR0aW5nRVJLTlNfNlN0cmluZ0VTM18KLV9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJv
bGxlcjEyYXR0YWNoV2luZG93RXYKLV9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjEy
ZGV0YWNoV2luZG93RXYKIF9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjE0ZW5hYmxl
RGVidWdnZXJFdgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTRlbmFibGVQcm9m
aWxlckViYgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTVkaXNhYmxlRGVidWdn
ZXJFYgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTVkaXNhYmxlUHJvZmlsZXJF
YgotX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTZzZXRXaW5kb3dWaXNpYmxlRWJi
CitfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIyNnNldEluc3BlY3RvckZyb250ZW5k
Q2xpZW50RU4zV1RGMTBQYXNzT3duUHRySU5TXzIzSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRFRUUK
IF9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjI2c3RvcFVzZXJJbml0aWF0ZWRQcm9m
aWxpbmdFdgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMjdzdGFydFVzZXJJbml0
aWF0ZWRQcm9maWxpbmdFUE5TXzVUaW1lcklTMF9FRQogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JD
b250cm9sbGVyNHNob3dFdgpAQCAtMTgsMyArMTYsMTMgQEAgX19aTks3V2ViQ29yZTE5SW5zcGVj
dG9yQ29udHJvbGxlcjdlbmFibGVkRXYKIF9fWk5LN1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xs
ZXI3c2V0dGluZ0VSS05TXzZTdHJpbmdFCiBfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xs
ZXIyMXN0YXJ0VGltZWxpbmVQcm9maWxlckV2CiBfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRy
b2xsZXIyMHN0b3BUaW1lbGluZVByb2ZpbGVyRXYKK19fWk43V2ViQ29yZTI4SW5zcGVjdG9yRnJv
bnRlbmRDbGllbnRMb2NhbEMyRVBOU18xOUluc3BlY3RvckNvbnRyb2xsZXJFUE5TXzRQYWdlRQor
X19aTjdXZWJDb3JlMjhJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsRDJFdgorX19aTjdXZWJD
b3JlMjhJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsMTl3aW5kb3dPYmplY3RDbGVhcmVkRXYK
K19fWk43V2ViQ29yZTI4SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDE0ZnJvbnRlbmRMb2Fk
ZWRFdgorX19aTjdXZWJDb3JlMjhJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsMjdyZXN0b3Jl
QXR0YWNoZWRXaW5kb3dIZWlnaHRFdgorX19aTjdXZWJDb3JlMjhJbnNwZWN0b3JGcm9udGVuZENs
aWVudExvY2FsMTJtb3ZlV2luZG93QnlFZmYKK19fWk43V2ViQ29yZTI4SW5zcGVjdG9yRnJvbnRl
bmRDbGllbnRMb2NhbDE1Y2FuQXR0YWNoV2luZG93RXYKK19fWk43V2ViQ29yZTI4SW5zcGVjdG9y
RnJvbnRlbmRDbGllbnRMb2NhbDE1c2hvd0NvbnRleHRNZW51RVBOU181RXZlbnRFUktOM1dURjZW
ZWN0b3JJUE5TXzE1Q29udGV4dE1lbnVJdGVtRUxtMEVFRQorX19aTjdXZWJDb3JlMjhJbnNwZWN0
b3JGcm9udGVuZENsaWVudExvY2FsMTdzZXRBdHRhY2hlZFdpbmRvd0ViCitfX1pON1dlYkNvcmUy
OEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwyNmNoYW5nZUF0dGFjaGVkV2luZG93SGVpZ2h0
RWoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cCBiL1dlYkNvcmUvV2ViQ29y
ZS5iYXNlLmV4cAppbmRleCA0MzY0YWVhLi45YmFmYWQ3IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dl
YkNvcmUuYmFzZS5leHAKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCkBAIC04NzQsNyAr
ODc0LDYgQEAgX19aTks3V2ViQ29yZTE2VmlzaWJsZVNlbGVjdGlvbjIzaXNDb250ZW50UmljaGx5
RWRpdGFibGVFdgogX19aTks3V2ViQ29yZTE2VmlzaWJsZVNlbGVjdGlvbjVpc0FsbEVOU18yMVN0
YXlJbkVkaXRhYmxlQ29udGVudEUKIF9fWk5LN1dlYkNvcmUxN1Jlc291cmNlRXJyb3JCYXNlOGxh
enlJbml0RXYKIF9fWk5LN1dlYkNvcmUxOUFuaW1hdGlvbkNvbnRyb2xsZXIyNG51bWJlck9mQWN0
aXZlQW5pbWF0aW9uc0V2Ci1fX1pOSzdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTVjYW5B
dHRhY2hXaW5kb3dFdgogX19aTks3V2ViQ29yZTE5UmVzb3VyY2VSZXF1ZXN0QmFzZTEwaHR0cE1l
dGhvZEV2CiBfX1pOSzdXZWJDb3JlMTlSZXNvdXJjZVJlcXVlc3RCYXNlM3VybEV2CiBfX1pOSzdX
ZWJDb3JlMTlSZXNvdXJjZVJlcXVlc3RCYXNlN2lzRW1wdHlFdgpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA3MWZhNjlkLi4zNzI2
MWEyIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9XZWJDb3JlL1dlYkNv
cmUuZ3lwaQpAQCAtMTYyNiw2ICsxNjI2LDkgQEAKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5z
cGVjdG9yRE9NU3RvcmFnZVJlc291cmNlLmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNw
ZWN0b3JGcm9udGVuZC5jcHAnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JGcm9u
dGVuZC5oJywKKyAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQu
aCcsCisgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwu
Y3BwJywKKyAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2Nh
bC5oJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcCcs
CiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5oJywKICAgICAg
ICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2UuY3BwJywKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvV2ViQ29yZS5vcmRlciBiL1dlYkNvcmUvV2ViQ29yZS5vcmRlcgppbmRleCBhOGQyMGZk
Li40OGYzMjFiIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUub3JkZXIKKysrIGIvV2ViQ29y
ZS9XZWJDb3JlLm9yZGVyCkBAIC0yMzc4OSw3ICsyMzc4OSw2IEBAIF9fWk43V2ViQ29yZTE4U2Ny
aXB0RnVuY3Rpb25DYWxsMTRhcHBlbmRBcmd1bWVudEViCiBfX1pON1dlYkNvcmUxOFNjcmlwdEZ1
bmN0aW9uQ2FsbDRjYWxsRXYKIF9fWk43V2ViQ29yZTE4U2NyaXB0RnVuY3Rpb25DYWxsNGNhbGxF
UmJiCiBfX1pON1dlYkNvcmU0NGpzSW5zcGVjdG9yQ29udHJvbGxlclByb3RvdHlwZUZ1bmN0aW9u
QXR0YWNoRVBOM0pTQzlFeGVjU3RhdGVFUE5TMF84SlNPYmplY3RFTlMwXzdKU1ZhbHVlRVJLTlMw
XzdBcmdMaXN0RQotX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTJhdHRhY2hXaW5k
b3dFdgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMjFwb3B1bGF0ZVNjcmlwdE9i
amVjdHNFdgogX19aTjdXZWJDb3JlTDE4Y2FsbFNpbXBsZUZ1bmN0aW9uRVBOM0pTQzlFeGVjU3Rh
dGVFUktOU18xMlNjcmlwdE9iamVjdEVQS2MKIF9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJv
bGxlcjlzaG93UGFuZWxFTlMwXzEzU3BlY2lhbFBhbmVsc0UKQEAgLTIzODUwLDcgKzIzODQ5LDYg
QEAgX19aTjdXZWJDb3JlTDE5ZHJhd0hpZ2hsaWdodEZvckJveEVSTlNfMTVHcmFwaGljc0NvbnRl
eHRFUktOU185RmxvYXRRdWFkRVM0X1M0X1MKIF9fWk43V2ViQ29yZUwxNmRyYXdPdXRsaW5lZFF1
YWRFUk5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfOUZsb2F0UXVhZEVSS05TXzVDb2xvckUKIF9f
Wk43V2ViQ29yZUwxMHF1YWRUb1BhdGhFUktOU185RmxvYXRRdWFkRQogX19aTjdXZWJDb3JlNDRq
c0luc3BlY3RvckNvbnRyb2xsZXJQcm90b3R5cGVGdW5jdGlvbkRldGFjaEVQTjNKU0M5RXhlY1N0
YXRlRVBOUzBfOEpTT2JqZWN0RU5TMF83SlNWYWx1ZUVSS05TMF83QXJnTGlzdEUKLV9fWk43V2Vi
Q29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjEyZGV0YWNoV2luZG93RXYKIF9fWk43V2ViQ29yZTU2
anNJbnNwZWN0b3JDb250cm9sbGVyUHJvdG90eXBlRnVuY3Rpb25Nb3ZlQnlVbnJlc3RyaWN0ZWRF
UE4zSlNDOUV4ZWNTdGF0ZUVQTlMwXzhKU09iamVjdEVOUzBfN0pTVmFsdWVFUktOUzBfN0FyZ0wK
IF9fWk5LN1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIxMm1vdmVXaW5kb3dCeUVmZgogX19a
TjdXZWJDb3JlTDI0ZHJhd091dGxpbmVkUXVhZFdpdGhDbGlwRVJOU18xNUdyYXBoaWNzQ29udGV4
dEVSS05TXzlGbG9hdFF1YWRFUzRfUktOU181Q29sb3JFCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dl
YkNvcmUucHJvIGIvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCAwMmRlMTk4Li5kMDM1ZDk4IDEw
MDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUucHJvCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8K
QEAgLTY5NSw2ICs2OTUsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9y
RE9NQWdlbnQuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNl
LmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmNwcCBcCisgICAgaW5zcGVj
dG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5z
cGVjdG9yRnJvbnRlbmRIb3N0LmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNl
LmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuY3BwIFwKQEAgLTEz
OTgsNiArMTM5OSw4IEBAIEhFQURFUlMgKz0gXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JEYXRh
YmFzZVJlc291cmNlLmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlUmVzb3Vy
Y2UuaCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmggXAorICAgIGluc3BlY3Rv
ci9JbnNwZWN0b3JGcm9udGVuZENsaWVudC5oIFwKKyAgICBpbnNwZWN0b3IvSW5zcGVjdG9yRnJv
bnRlbmRDbGllbnRMb2NhbC5oIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0
LmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZS5oIFwKICAgICBpbnNwZWN0b3Iv
SW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKaW5kZXggMTBmN2UwZS4uZTM2OGYyMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTQ4NTYsNiArNDg1Niw5IEBACiAJCUVENTAxREM2
MEIyNDlGMjkwMEFFMThEOSAvKiBFZGl0b3JNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFRDUwMURDNTBCMjQ5RjI5MDBBRTE4RDkgLyogRWRpdG9y
TWFjLm1tICovOyB9OwogCQlFREUzQTUwMDBDN0E0MzA2MDA5NTZBMzcgLyogQ29sb3JNYWMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEVERTNBNEZGMEM3
QTQzMDYwMDk1NkEzNyAvKiBDb2xvck1hYy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCUVERUM5ODAzMEFFRDdFMTcwMDU5MTM3RiAvKiBXZWJDb3Jl
UHJlZml4LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
REVDOTgwMjBBRUQ3RTE3MDA1OTEzN0YgLyogV2ViQ29yZVByZWZpeC5oICovOyB9OworCQlGMzQ0
QzcxNDExMjVCODJDMDBGMjZFRUUgLyogSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEYzNDRDNzEyMTEyNUI4MkMw
MEYyNkVFRSAvKiBJbnNwZWN0b3JGcm9udGVuZENsaWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUYzNDRDNzUzMTEyOTREOUQwMEYyNkVFRSAv
KiBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGMzQ0Qzc1MjExMjk0RDlEMDBGMjZFRUUgLyogSW5zcGVj
dG9yRnJvbnRlbmRDbGllbnRMb2NhbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCUYzNDRDNzU4MTEyOTRGRjYwMEYyNkVFRSAvKiBJbnNwZWN0b3JG
cm9udGVuZENsaWVudExvY2FsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEYzNDRDNzU3MTEyOTRGRjYwMEYyNkVFRSAvKiBJbnNwZWN0b3JGcm9udGVu
ZENsaWVudExvY2FsLmNwcCAqLzsgfTsKIAkJRjM2NDRBRkYxMTE5ODA1OTAwRTBENTM3IC8qIElu
amVjdGVkU2NyaXB0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEYzNjQ0QUZEMTExOTgwNTkwMEUwRDUzNyAvKiBJbmplY3RlZFNjcmlwdC5jcHAgKi87
IH07CiAJCUYzNjQ0QjAwMTExOTgwNTkwMEUwRDUzNyAvKiBJbmplY3RlZFNjcmlwdC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjM2NDRBRkUxMTE5ODA1
OTAwRTBENTM3IC8qIEluamVjdGVkU2NyaXB0LmggKi87IH07CiAJCUY0RUFGNEFFMTBDNzQyQjEw
MDkxMDBEMyAvKiBPcGVuVHlwZVNhbml0aXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNEVBRjRBQzEwQzc0MkIxMDA5MTAwRDMgLyogT3BlblR5
cGVTYW5pdGl6ZXIuY3BwICovOyB9OwpAQCAtMTAxODksNiArMTAxOTIsOSBAQAogCQlFRDUwMURD
NTBCMjQ5RjI5MDBBRTE4RDkgLyogRWRpdG9yTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgbmFtZSA9IEVkaXRvck1hYy5tbTsgcGF0aCA9IG1hYy9FZGl0b3JNYWMubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUVERTNBNEZGMEM3QTQzMDYwMDk1NkEzNyAv
KiBDb2xvck1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2xvck1hYy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFREVDOTgwMjBBRUQ3RTE3MDA1OTEzN0Yg
LyogV2ViQ29yZVByZWZpeC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vi
Q29yZVByZWZpeC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDQ7IHVzZXNU
YWJzID0gMDsgfTsKKwkJRjM0NEM3MTIxMTI1QjgyQzAwRjI2RUVFIC8qIEluc3BlY3RvckZyb250
ZW5kQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvckZy
b250ZW5kQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUYzNDRDNzUyMTEy
OTREOUQwMEYyNkVFRSAvKiBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRjM0NEM3NTcxMTI5NEZGNjAwRjI2RUVFIC8q
IEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUYzNjQ0QUZEMTExOTgwNTkwMEUwRDUzNyAvKiBJbmplY3Rl
ZFNjcmlwdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmplY3Rl
ZFNjcmlwdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUYzNjQ0QUZFMTExOTgw
NTkwMEUwRDUzNyAvKiBJbmplY3RlZFNjcmlwdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBJbmplY3RlZFNjcmlwdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlG
NEVBRjRBQzEwQzc0MkIxMDA5MTAwRDMgLyogT3BlblR5cGVTYW5pdGl6ZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gT3BlblR5cGVTYW5pdGl6ZXIuY3BwOyBwYXRo
ID0gb3BlbnR5cGUvT3BlblR5cGVTYW5pdGl6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMTA3MjQsNiArMTA3MzAsOSBAQAogCQkJCTQxRjA2MTcyMEY1RjAwQUMwMEEwN0VB
QyAvKiBJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuaCAqLywKIAkJCQk3QUVEM0UwMzBGQkIx
RUFBMDBEMkIwM0MgLyogSW5zcGVjdG9yRnJvbnRlbmQuY3BwICovLAogCQkJCTdBRUQzRTA0MEZC
QjFFQUEwMEQyQjAzQyAvKiBJbnNwZWN0b3JGcm9udGVuZC5oICovLAorCQkJCUYzNDRDNzEyMTEy
NUI4MkMwMEYyNkVFRSAvKiBJbnNwZWN0b3JGcm9udGVuZENsaWVudC5oICovLAorCQkJCUYzNDRD
NzU3MTEyOTRGRjYwMEYyNkVFRSAvKiBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmNwcCAq
LywKKwkJCQlGMzQ0Qzc1MjExMjk0RDlEMDBGMjZFRUUgLyogSW5zcGVjdG9yRnJvbnRlbmRDbGll
bnRMb2NhbC5oICovLAogCQkJCTdBMEU3NzBCMTBDMDBBODgwMEEwMjc2RSAvKiBJbnNwZWN0b3JG
cm9udGVuZEhvc3QuY3BwICovLAogCQkJCTdBMEU3NzBDMTBDMDBBODgwMEEwMjc2RSAvKiBJbnNw
ZWN0b3JGcm9udGVuZEhvc3QuaCAqLywKIAkJCQk3QTBFNzcwRDEwQzAwQTg4MDBBMDI3NkUgLyog
SW5zcGVjdG9yRnJvbnRlbmRIb3N0LmlkbCAqLywKQEAgLTE3NDIzLDYgKzE3NDMyLDggQEAKIAkJ
CQk3QTI0NTg3QzEwMjFFQUY0MDAwQTAwQUEgLyogSW5zcGVjdG9yRE9NQWdlbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTQxRjA2MTc0MEY1RjAwQUMwMEEwN0VBQyAvKiBJbnNwZWN0b3JET01TdG9y
YWdlUmVzb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTdBRUQzRTA2MEZCQjFFQUEwMEQyQjAz
QyAvKiBJbnNwZWN0b3JGcm9udGVuZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRjM0NEM3MTQxMTI1
QjgyQzAwRjI2RUVFIC8qIEluc3BlY3RvckZyb250ZW5kQ2xpZW50LmggaW4gSGVhZGVycyAqLywK
KwkJCQlGMzQ0Qzc1MzExMjk0RDlEMDBGMjZFRUUgLyogSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRM
b2NhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0EwRTc3MEYxMEMwMEE4ODAwQTAyNzZFIC8qIElu
c3BlY3RvckZyb250ZW5kSG9zdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDFGMDYyMDEwRjVGMEI2
NjAwQTA3RUFDIC8qIEluc3BlY3RvclJlc291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3NTQx
MzNBODEwMkUwMEU4MDAwNzVEMDAgLyogSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oIGluIEhlYWRl
cnMgKi8sCkBAIC0xOTYzNyw2ICsxOTY0OCw3IEBACiAJCQkJN0EyNDU4N0IxMDIxRUFGNDAwMEEw
MEFBIC8qIEluc3BlY3RvckRPTUFnZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQxRjA2MTc1
MEY1RjAwQUMwMEEwN0VBQyAvKiBJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJN0FFRDNFMDUwRkJCMUVBQTAwRDJCMDNDIC8qIEluc3BlY3RvckZyb250
ZW5kLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUYzNDRDNzU4MTEyOTRGRjYwMEYyNkVFRSAvKiBJ
bnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdBMEU3
NzBFMTBDMDBBODgwMEEwMjc2RSAvKiBJbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNDFGMDYyMDIwRjVGMEI2NjAwQTA3RUFDIC8qIEluc3BlY3RvclJlc291cmNl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTc1NDEzM0FBMTAyRTAwRjQwMDA3NUQwMCAvKiBJbnNw
ZWN0b3JUaW1lbGluZUFnZW50LmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9pbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvQ29uc29s
ZU1lc3NhZ2UuY3BwCmluZGV4IDU1MzllOWQuLjQwNTQ5OTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
aW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9Db25z
b2xlTWVzc2FnZS5jcHAKQEAgLTMxLDkgKzMxLDEyIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiQ29uc29sZU1lc3NhZ2UuaCIKIAorI2luY2x1ZGUgIkluamVjdGVkU2NyaXB0Lmgi
CisjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHRIb3N0LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRnJv
bnRlbmQuaCIKICNpbmNsdWRlICJTY3JpcHRDYWxsU3RhY2suaCIKICNpbmNsdWRlICJTY3JpcHRP
YmplY3QuaCIKKyNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCkBAIC04MCw3ICs4Myw3IEBAIENvbnNvbGVNZXNzYWdlOjpDb25zb2xlTWVz
c2FnZShNZXNzYWdlU291cmNlIHMsIE1lc3NhZ2VUeXBlIHQsIE1lc3NhZ2VMZXZlbCBsLCBTCiB9
CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotdm9pZCBDb25zb2xlTWVzc2FnZTo6YWRkVG9Db25z
b2xlKEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCkKK3ZvaWQgQ29uc29sZU1lc3NhZ2U6OmFk
ZFRvRnJvbnRlbmQoSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kLCBJbmplY3RlZFNjcmlwdEhv
c3QqIGluamVjdGVkU2NyaXB0SG9zdCkKIHsKICAgICBTY3JpcHRPYmplY3QganNvbk9iaiA9IGZy
b250ZW5kLT5uZXdTY3JpcHRPYmplY3QoKTsKICAgICBqc29uT2JqLnNldCgic291cmNlIiwgc3Rh
dGljX2Nhc3Q8aW50PihtX3NvdXJjZSkpOwpAQCAtOTAsNyArOTMsMTUgQEAgdm9pZCBDb25zb2xl
TWVzc2FnZTo6YWRkVG9Db25zb2xlKEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCkKICAgICBq
c29uT2JqLnNldCgidXJsIiwgbV91cmwpOwogICAgIGpzb25PYmouc2V0KCJncm91cExldmVsIiwg
c3RhdGljX2Nhc3Q8aW50PihtX2dyb3VwTGV2ZWwpKTsKICAgICBqc29uT2JqLnNldCgicmVwZWF0
Q291bnQiLCBzdGF0aWNfY2FzdDxpbnQ+KG1fcmVwZWF0Q291bnQpKTsKLSAgICBmcm9udGVuZC0+
YWRkQ29uc29sZU1lc3NhZ2UoanNvbk9iaiwgbV9mcmFtZXMsIG1fc2NyaXB0U3RhdGUsIG1fYXJn
dW1lbnRzLCAgbV9tZXNzYWdlKTsKKyAgICBWZWN0b3I8UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4gPiBhcmd1bWVudHM7CisgICAgaWYgKCFtX2FyZ3VtZW50cy5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBpbmplY3RlZFNjcmlwdEhvc3Qt
PmluamVjdGVkU2NyaXB0Rm9yKG1fc2NyaXB0U3RhdGUpOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIFJlZlB0
cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWRWYWx1ZSA9IGluamVjdGVkU2NyaXB0
LndyYXBGb3JDb25zb2xlKG1fYXJndW1lbnRzW2ldKTsKKyAgICAgICAgICAgIGFyZ3VtZW50cy5h
cHBlbmQoc2VyaWFsaXplZFZhbHVlKTsKKyAgICAgICAgfQorICAgIH0gICAKKyAgICBmcm9udGVu
ZC0+YWRkQ29uc29sZU1lc3NhZ2UoanNvbk9iaiwgbV9mcmFtZXMsIGFyZ3VtZW50cywgIG1fbWVz
c2FnZSk7CiB9CiAKIHZvaWQgQ29uc29sZU1lc3NhZ2U6OnVwZGF0ZVJlcGVhdENvdW50SW5Db25z
b2xlKEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5z
cGVjdG9yL0NvbnNvbGVNZXNzYWdlLmggYi9XZWJDb3JlL2luc3BlY3Rvci9Db25zb2xlTWVzc2Fn
ZS5oCmluZGV4IGU5YWUxMzAuLjRjNzdlOTUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9y
L0NvbnNvbGVNZXNzYWdlLmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2Uu
aApAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgeworICAgIGNsYXNzIEluamVjdGVkU2NyaXB0SG9zdDsKICAgICBjbGFzcyBJbnNw
ZWN0b3JGcm9udGVuZDsKICAgICBjbGFzcyBTY3JpcHRDYWxsU3RhY2s7CiAgICAgY2xhc3MgU2Ny
aXB0U3RyaW5nOwpAQCAtNDgsNyArNDksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWws
IFNjcmlwdENhbGxTdGFjayosIHVuc2lnbmVkIGcsIGJvb2wgc3RvcmVUcmFjZSA9IGZhbHNlKTsK
IAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgICAgIHZvaWQgYWRkVG9Db25zb2xlKEluc3Bl
Y3RvckZyb250ZW5kKiBmcm9udGVuZCk7CisgICAgICAgIHZvaWQgYWRkVG9Gcm9udGVuZChJbnNw
ZWN0b3JGcm9udGVuZCosIEluamVjdGVkU2NyaXB0SG9zdCopOwogICAgICAgICB2b2lkIHVwZGF0
ZVJlcGVhdENvdW50SW5Db25zb2xlKEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCk7CiAjZW5k
aWYKICAgICAgICAgdm9pZCBpbmNyZW1lbnRDb3VudCgpIHsgKyttX3JlcGVhdENvdW50OyB9Owpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2xpZW50LmggYi9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDbGllbnQuaAppbmRleCBlNDQ4Y2QyLi44NDFjMTVlIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDbGllbnQuaAorKysgYi9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDbGllbnQuaApAQCAtMzAsNiArMzAsNyBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKK2NsYXNzIEluc3BlY3RvckNvbnRyb2xsZXI7CiBjbGFzcyBOb2RlOwog
Y2xhc3MgUGFnZTsKIGNsYXNzIFN0cmluZzsKQEAgLTQwLDI5ICs0MSwxMyBAQCBwdWJsaWM6CiAK
ICAgICB2aXJ0dWFsIHZvaWQgaW5zcGVjdG9yRGVzdHJveWVkKCkgPSAwOwogCi0gICAgdmlydHVh
bCBQYWdlKiBjcmVhdGVQYWdlKCkgPSAwOwotCi0gICAgdmlydHVhbCBTdHJpbmcgbG9jYWxpemVk
U3RyaW5nc1VSTCgpID0gMDsKLQotICAgIHZpcnR1YWwgU3RyaW5nIGhpZGRlblBhbmVscygpID0g
MDsKLQotICAgIHZpcnR1YWwgdm9pZCBzaG93V2luZG93KCkgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBjbG9zZVdpbmRvdygpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hXaW5kb3coKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRldGFjaFdpbmRvdygpID0gMDsKLQotICAgIHZpcnR1YWwg
dm9pZCBzZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgb3Blbkluc3BlY3RvckZyb250ZW5kKEluc3BlY3RvckNvbnRyb2xsZXIqKSA9
IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgaGlnaGxpZ2h0KE5vZGUqKSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIGhpZGVIaWdobGlnaHQoKSA9IDA7CiAKLSAgICB2aXJ0dWFsIHZvaWQgaW5zcGVjdGVk
VVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIG5ld1VSTCkgPSAwOwotCiAgICAgdmlydHVhbCB2b2lk
IHBvcHVsYXRlU2V0dGluZyhjb25zdCBTdHJpbmcmIGtleSwgU3RyaW5nKiB2YWx1ZSkgPSAwOwog
ICAgIHZpcnR1YWwgdm9pZCBzdG9yZVNldHRpbmcoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0
cmluZyYgdmFsdWUpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0b3JXaW5kb3dPYmpl
Y3RDbGVhcmVkKCkgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAppbmRleCAzMzE0NDNkLi45MjRmMDExIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAorKysg
Yi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcApAQCAtNTcsMTEgKzU3
LDExIEBACiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHRIb3N0LmgiCiAjaW5jbHVkZSAiSW5zcGVj
dG9yQmFja2VuZC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNsaWVudC5oIgorI2luY2x1ZGUgIklu
c3BlY3RvckZyb250ZW5kQ2xpZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRE9NQWdlbnQuaCIK
ICNpbmNsdWRlICJJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuaCIKICNpbmNsdWRlICJJbnNw
ZWN0b3JEYXRhYmFzZVJlc291cmNlLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmQuaCIK
LSNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZEhvc3QuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JS
ZXNvdXJjZS5oIgogI2luY2x1ZGUgIkluc3BlY3RvcldvcmtlclJlc291cmNlLmgiCiAjaW5jbHVk
ZSAiSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oIgpAQCAtMTQ0LDEwICsxNDQsOSBAQCBzdGF0aWMg
dW5zaWduZWQgc19pbnNwZWN0b3JDb250cm9sbGVyQ291bnQ7CiBJbnNwZWN0b3JDb250cm9sbGVy
OjpJbnNwZWN0b3JDb250cm9sbGVyKFBhZ2UqIHBhZ2UsIEluc3BlY3RvckNsaWVudCogY2xpZW50
KQogICAgIDogbV9pbnNwZWN0ZWRQYWdlKHBhZ2UpCiAgICAgLCBtX2NsaWVudChjbGllbnQpCi0g
ICAgLCBtX3BhZ2UoMCkKKyAgICAsIG1fb3BlbmluZ0Zyb250ZW5kKGZhbHNlKQorICAgICwgbV9j
bG9zaW5nRnJvbnRlbmQoZmFsc2UpCiAgICAgLCBtX2V4cGlyZWRDb25zb2xlTWVzc2FnZUNvdW50
KDApCi0gICAgLCBtX2Zyb250ZW5kU2NyaXB0U3RhdGUoMCkKLSAgICAsIG1fd2luZG93VmlzaWJs
ZShmYWxzZSkKICAgICAsIG1fc2hvd0FmdGVyVmlzaWJsZShDdXJyZW50UGFuZWwpCiAgICAgLCBt
X2dyb3VwTGV2ZWwoMCkKICAgICAsIG1fc2VhcmNoaW5nRm9yTm9kZShmYWxzZSkKQEAgLTE1NSw3
ICsxNTQsNiBAQCBJbnNwZWN0b3JDb250cm9sbGVyOjpJbnNwZWN0b3JDb250cm9sbGVyKFBhZ2Uq
IHBhZ2UsIEluc3BlY3RvckNsaWVudCogY2xpZW50KQogICAgICwgbV9yZXNvdXJjZVRyYWNraW5n
RW5hYmxlZChmYWxzZSkKICAgICAsIG1fcmVzb3VyY2VUcmFja2luZ1NldHRpbmdzTG9hZGVkKGZh
bHNlKQogICAgICwgbV9pbnNwZWN0b3JCYWNrZW5kKEluc3BlY3RvckJhY2tlbmQ6OmNyZWF0ZSh0
aGlzKSkKLSAgICAsIG1faW5zcGVjdG9yRnJvbnRlbmRIb3N0KEluc3BlY3RvckZyb250ZW5kSG9z
dDo6Y3JlYXRlKHRoaXMsIGNsaWVudCkpCiAgICAgLCBtX2luamVjdGVkU2NyaXB0SG9zdChJbmpl
Y3RlZFNjcmlwdEhvc3Q6OmNyZWF0ZSh0aGlzKSkKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJV
R0dFUikKICAgICAsIG1fZGVidWdnZXJFbmFibGVkKGZhbHNlKQpAQCAtMTc4LDkgKzE3Niw3IEBA
IEluc3BlY3RvckNvbnRyb2xsZXI6On5JbnNwZWN0b3JDb250cm9sbGVyKCkKIHsKICAgICAvLyBU
aGVzZSBzaG91bGQgaGF2ZSBiZWVuIGNsZWFyZWQgaW4gaW5zcGVjdGVkUGFnZURlc3Ryb3llZCgp
LgogICAgIEFTU0VSVCghbV9jbGllbnQpOwotICAgIEFTU0VSVCghbV9mcm9udGVuZFNjcmlwdFN0
YXRlKTsKICAgICBBU1NFUlQoIW1faW5zcGVjdGVkUGFnZSk7Ci0gICAgQVNTRVJUKCFtX3BhZ2Ug
fHwgKG1fcGFnZSAmJiAhbV9wYWdlLT5wYXJlbnRJbnNwZWN0b3JDb250cm9sbGVyKCkpKTsKIAog
ICAgIGRlbGV0ZUFsbFZhbHVlcyhtX2ZyYW1lUmVzb3VyY2VzKTsKICAgICBkZWxldGVBbGxWYWx1
ZXMobV9jb25zb2xlTWVzc2FnZXMpOwpAQCAtMTkxLDcgKzE4Nyw2IEBAIEluc3BlY3RvckNvbnRy
b2xsZXI6On5JbnNwZWN0b3JDb250cm9sbGVyKCkKICAgICByZWxlYXNlRE9NQWdlbnQoKTsKIAog
ICAgIG1faW5zcGVjdG9yQmFja2VuZC0+ZGlzY29ubmVjdENvbnRyb2xsZXIoKTsKLSAgICBtX2lu
c3BlY3RvckZyb250ZW5kSG9zdC0+ZGlzY29ubmVjdENvbnRyb2xsZXIoKTsKICAgICBtX2luamVj
dGVkU2NyaXB0SG9zdC0+ZGlzY29ubmVjdENvbnRyb2xsZXIoKTsKIH0KIApAQCAtMTk5LDEwICsx
OTQsNiBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6Omluc3BlY3RlZFBhZ2VEZXN0cm95ZWQo
KQogewogICAgIGNsb3NlKCk7CiAKLSAgICBpZiAobV9mcm9udGVuZFNjcmlwdFN0YXRlKSB7Ci0g
ICAgICAgIFNjcmlwdEdsb2JhbE9iamVjdDo6cmVtb3ZlKG1fZnJvbnRlbmRTY3JpcHRTdGF0ZSwg
Ikluc3BlY3RvckJhY2tlbmQiKTsKLSAgICAgICAgU2NyaXB0R2xvYmFsT2JqZWN0OjpyZW1vdmUo
bV9mcm9udGVuZFNjcmlwdFN0YXRlLCAiSW5zcGVjdG9yRnJvbnRlbmRIb3N0Iik7Ci0gICAgfQog
ICAgIEFTU0VSVChtX2luc3BlY3RlZFBhZ2UpOwogICAgIG1faW5zcGVjdGVkUGFnZSA9IDA7CiAK
QEAgLTI5Nyw0NiArMjg4LDQyIEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6aGlkZUhpZ2hs
aWdodCgpCiAKIGJvb2wgSW5zcGVjdG9yQ29udHJvbGxlcjo6d2luZG93VmlzaWJsZSgpCiB7Ci0g
ICAgcmV0dXJuIG1fd2luZG93VmlzaWJsZTsKKyAgICByZXR1cm4gbV9mcm9udGVuZDsKIH0KIAot
dm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRXaW5kb3dWaXNpYmxlKGJvb2wgdmlzaWJsZSwg
Ym9vbCBhdHRhY2hlZCkKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZnJvbnRlbmRSZWFkeSgp
CiB7Ci0gICAgaWYgKHZpc2libGUgPT0gbV93aW5kb3dWaXNpYmxlIHx8ICFtX2Zyb250ZW5kKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBtX3dpbmRvd1Zpc2libGUgPSB2aXNpYmxlOwotCi0gICAg
aWYgKG1fd2luZG93VmlzaWJsZSkgewotICAgICAgICBzZXRBdHRhY2hlZFdpbmRvdyhhdHRhY2hl
ZCk7Ci0gICAgICAgIHBvcHVsYXRlU2NyaXB0T2JqZWN0cygpOwotCi0gICAgICAgIGlmIChtX3No
b3dBZnRlclZpc2libGUgPT0gQ3VycmVudFBhbmVsKSB7Ci0gICAgICAgICAgICBTdHJpbmcgbGFz
dEFjdGl2ZVBhbmVsU2V0dGluZyA9IHNldHRpbmcobGFzdEFjdGl2ZVBhbmVsU2V0dGluZ05hbWUp
OwotICAgICAgICAgICAgbV9zaG93QWZ0ZXJWaXNpYmxlID0gc3BlY2lhbFBhbmVsRm9ySlNOYW1l
KGxhc3RBY3RpdmVQYW5lbFNldHRpbmcpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1fbm9k
ZVRvRm9jdXMpCi0gICAgICAgICAgICBmb2N1c05vZGUoKTsKKyAgICBwb3B1bGF0ZVNjcmlwdE9i
amVjdHMoKTsKKyAgICAKKyAgICBpZiAobV9zaG93QWZ0ZXJWaXNpYmxlID09IEN1cnJlbnRQYW5l
bCkgeworICAgICAgICBTdHJpbmcgbGFzdEFjdGl2ZVBhbmVsU2V0dGluZyA9IHNldHRpbmcobGFz
dEFjdGl2ZVBhbmVsU2V0dGluZ05hbWUpOworICAgICAgICBtX3Nob3dBZnRlclZpc2libGUgPSBz
cGVjaWFsUGFuZWxGb3JKU05hbWUobGFzdEFjdGl2ZVBhbmVsU2V0dGluZyk7CisgICAgfQorICAg
IAorICAgIGlmIChtX25vZGVUb0ZvY3VzKQorICAgICAgICBmb2N1c05vZGUoKTsKICNpZiBFTkFC
TEUoSkFWQVNDUklQVF9ERUJVR0dFUikKLSAgICAgICAgaWYgKG1fYXR0YWNoRGVidWdnZXJXaGVu
U2hvd24pCi0gICAgICAgICAgICBlbmFibGVEZWJ1Z2dlcigpOworICAgIGlmIChtX2F0dGFjaERl
YnVnZ2VyV2hlblNob3duKQorICAgICAgICBlbmFibGVEZWJ1Z2dlcigpOwogI2VuZGlmCi0gICAg
ICAgIHNob3dQYW5lbChtX3Nob3dBZnRlclZpc2libGUpOwotICAgIH0gZWxzZSB7CisgICAgc2hv
d1BhbmVsKG1fc2hvd0FmdGVyVmlzaWJsZSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxl
cjo6d2lsbENsb3NlRnJvbnRlbmQoKQorewogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VS
KQotICAgICAgICAvLyBJZiB0aGUgd2luZG93IGlzIGJlaW5nIGNsb3NlZCB3aXRoIHRoZSBkZWJ1
Z2dlciBlbmFibGVkLAotICAgICAgICAvLyByZW1lbWJlciB0aGlzIHN0YXRlIHRvIHJlLWVuYWJs
ZSBkZWJ1Z2dlciBvbiB0aGUgbmV4dCB3aW5kb3cKLSAgICAgICAgLy8gb3BlbmluZy4KLSAgICAg
ICAgYm9vbCBkZWJ1Z2dlcldhc0VuYWJsZWQgPSBtX2RlYnVnZ2VyRW5hYmxlZDsKLSAgICAgICAg
ZGlzYWJsZURlYnVnZ2VyKCk7Ci0gICAgICAgIGlmIChkZWJ1Z2dlcldhc0VuYWJsZWQpCi0gICAg
ICAgICAgICBtX2F0dGFjaERlYnVnZ2VyV2hlblNob3duID0gdHJ1ZTsKKyAgICAvLyBJZiB0aGUg
d2luZG93IGlzIGJlaW5nIGNsb3NlZCB3aXRoIHRoZSBkZWJ1Z2dlciBlbmFibGVkLAorICAgIC8v
IHJlbWVtYmVyIHRoaXMgc3RhdGUgdG8gcmUtZW5hYmxlIGRlYnVnZ2VyIG9uIHRoZSBuZXh0IHdp
bmRvdworICAgIC8vIG9wZW5pbmcuCisgICAgYm9vbCBkZWJ1Z2dlcldhc0VuYWJsZWQgPSBtX2Rl
YnVnZ2VyRW5hYmxlZDsKKyAgICBkaXNhYmxlRGVidWdnZXIoKTsKKyAgICBpZiAoZGVidWdnZXJX
YXNFbmFibGVkKQorICAgICAgICBtX2F0dGFjaERlYnVnZ2VyV2hlblNob3duID0gdHJ1ZTsKICNl
bmRpZgotICAgICAgICBzZXRTZWFyY2hpbmdGb3JOb2RlKGZhbHNlKTsKLSAgICAgICAgcmVzZXRT
Y3JpcHRPYmplY3RzKCk7Ci0gICAgICAgIHN0b3BUaW1lbGluZVByb2ZpbGVyKCk7Ci0gICAgfQor
ICAgIHNldFNlYXJjaGluZ0Zvck5vZGUoZmFsc2UpOworICAgIHJlc2V0U2NyaXB0T2JqZWN0cygp
OworICAgIHN0b3BUaW1lbGluZVByb2ZpbGVyKCk7CisKICAgICBtX3Nob3dBZnRlclZpc2libGUg
PSBDdXJyZW50UGFuZWw7CiB9CiAKQEAgLTM3MCw3ICszNTcsNyBAQCB2b2lkIEluc3BlY3RvckNv
bnRyb2xsZXI6OmFkZENvbnNvbGVNZXNzYWdlKFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgQ29u
c29sZU1lcwogICAgICAgICBtX3ByZXZpb3VzTWVzc2FnZSA9IGNvbnNvbGVNZXNzYWdlOwogICAg
ICAgICBtX2NvbnNvbGVNZXNzYWdlcy5hcHBlbmQoY29uc29sZU1lc3NhZ2UpOwogICAgICAgICBp
ZiAod2luZG93VmlzaWJsZSgpKQotICAgICAgICAgICAgbV9wcmV2aW91c01lc3NhZ2UtPmFkZFRv
Q29uc29sZShtX2Zyb250ZW5kLmdldCgpKTsKKyAgICAgICAgICAgIG1fcHJldmlvdXNNZXNzYWdl
LT5hZGRUb0Zyb250ZW5kKG1fZnJvbnRlbmQuZ2V0KCksIG1faW5qZWN0ZWRTY3JpcHRIb3N0Lmdl
dCgpKTsKICAgICB9CiAKICAgICBpZiAoIXdpbmRvd1Zpc2libGUoKSAmJiBtX2NvbnNvbGVNZXNz
YWdlcy5zaXplKCkgPj0gbWF4aW11bUNvbnNvbGVNZXNzYWdlcykgewpAQCAtNDE4LDY5ICs0MDUs
NiBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6Om1hcmtUaW1lbGluZShjb25zdCBTdHJpbmcm
IG1lc3NhZ2UpCiAgICAgICAgIHRpbWVsaW5lQWdlbnQoKS0+ZGlkTWFya1RpbWVsaW5lKG1lc3Nh
Z2UpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgY29uc3RyYWluZWRBdHRhY2hlZFdpbmRvd0hlaWdo
dCh1bnNpZ25lZCBwcmVmZXJyZWRIZWlnaHQsIHVuc2lnbmVkIHRvdGFsV2luZG93SGVpZ2h0KQot
ewotICAgIHJldHVybiByb3VuZGYobWF4KG1pbmltdW1BdHRhY2hlZEhlaWdodCwgbWluPGZsb2F0
PihwcmVmZXJyZWRIZWlnaHQsIHRvdGFsV2luZG93SGVpZ2h0ICogbWF4aW11bUF0dGFjaGVkSGVp
Z2h0UmF0aW8pKSk7Ci19Ci0KLWJvb2wgSW5zcGVjdG9yQ29udHJvbGxlcjo6Y2FuQXR0YWNoV2lu
ZG93KCkgY29uc3QKLXsKLSAgICBpZiAoIWVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAKLSAgICB1bnNpZ25lZCBpbnNwZWN0ZWRQYWdlSGVpZ2h0ID0gbV9pbnNwZWN0
ZWRQYWdlLT5tYWluRnJhbWUoKS0+dmlldygpLT52aXNpYmxlSGVpZ2h0KCk7Ci0KLSAgICAvLyBE
b24ndCBhbGxvdyB0aGUgYXR0YWNoIGlmIHRoZSB3aW5kb3cgd291bGQgYmUgdG9vIHNtYWxsIHRv
IGFjY29tbW9kYXRlIHRoZSBtaW5pbXVtIGluc3BlY3RvciBoZWlnaHQuCi0gICAgcmV0dXJuIG1p
bmltdW1BdHRhY2hlZEhlaWdodCA8PSBpbnNwZWN0ZWRQYWdlSGVpZ2h0ICogbWF4aW11bUF0dGFj
aGVkSGVpZ2h0UmF0aW87Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6YXR0YWNoV2lu
ZG93KCkKLXsKLSAgICBpZiAoIWVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdW5z
aWduZWQgaW5zcGVjdGVkUGFnZUhlaWdodCA9IG1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCkt
PnZpZXcoKS0+dmlzaWJsZUhlaWdodCgpOwotCi0gICAgU3RyaW5nIGF0dGFjaGVkSGVpZ2h0ID0g
c2V0dGluZyhpbnNwZWN0b3JBdHRhY2hlZEhlaWdodE5hbWUpOwotICAgIGJvb2wgc3VjY2VzcyA9
IHRydWU7Ci0gICAgaW50IGhlaWdodCA9IGF0dGFjaGVkSGVpZ2h0LnRvSW50KCZzdWNjZXNzKTsK
LSAgICB1bnNpZ25lZCBwcmVmZXJyZWRIZWlnaHQgPSBzdWNjZXNzID8gaGVpZ2h0IDogZGVmYXVs
dEF0dGFjaGVkSGVpZ2h0OwotCi0gICAgbV9jbGllbnQtPmF0dGFjaFdpbmRvdygpOwotCi0gICAg
Ly8gV2UgbmVlZCB0byBjb25zdHJhaW4gdGhlIHdpbmRvdyBoZWlnaHQgaGVyZSBpbiBjYXNlIHRo
ZSB1c2VyIGhhcyByZXNpemVkIHRoZSBpbnNwZWN0ZWQgcGFnZSdzIHdpbmRvdyBzbyB0aGF0Ci0g
ICAgLy8gdGhlIHVzZXIncyBwcmVmZXJyZWQgaGVpZ2h0IHdvdWxkIGJlIHRvbyBiaWcgdG8gZGlz
cGxheS4KLSAgICBtX2NsaWVudC0+c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQoY29uc3RyYWluZWRB
dHRhY2hlZFdpbmRvd0hlaWdodChwcmVmZXJyZWRIZWlnaHQsIGluc3BlY3RlZFBhZ2VIZWlnaHQp
KTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkZXRhY2hXaW5kb3coKQotewotICAg
IGlmICghZW5hYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jbGllbnQtPmRldGFjaFdp
bmRvdygpOwotfQotCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldEF0dGFjaGVkV2luZG93
KGJvb2wgYXR0YWNoZWQpCi17Ci0gICAgaWYgKCFlbmFibGVkKCkgfHwgIW1fZnJvbnRlbmQpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIG1fZnJvbnRlbmQtPnNldEF0dGFjaGVkV2luZG93KGF0dGFj
aGVkKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRBdHRhY2hlZFdpbmRvd0hl
aWdodCh1bnNpZ25lZCBoZWlnaHQpCi17Ci0gICAgaWYgKCFlbmFibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKLSAgICAKLSAgICB1bnNpZ25lZCB0b3RhbEhlaWdodCA9IG1fcGFnZS0+bWFpbkZyYW1l
KCktPnZpZXcoKS0+dmlzaWJsZUhlaWdodCgpICsgbV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUo
KS0+dmlldygpLT52aXNpYmxlSGVpZ2h0KCk7Ci0gICAgdW5zaWduZWQgYXR0YWNoZWRIZWlnaHQg
PSBjb25zdHJhaW5lZEF0dGFjaGVkV2luZG93SGVpZ2h0KGhlaWdodCwgdG90YWxIZWlnaHQpOwot
ICAgIAotICAgIHNldFNldHRpbmcoaW5zcGVjdG9yQXR0YWNoZWRIZWlnaHROYW1lLCBTdHJpbmc6
Om51bWJlcihhdHRhY2hlZEhlaWdodCkpOwotICAgIAotICAgIG1fY2xpZW50LT5zZXRBdHRhY2hl
ZFdpbmRvd0hlaWdodChhdHRhY2hlZEhlaWdodCk7Ci19Ci0KIHZvaWQgSW5zcGVjdG9yQ29udHJv
bGxlcjo6c3RvcmVMYXN0QWN0aXZlUGFuZWwoY29uc3QgU3RyaW5nJiBwYW5lbE5hbWUpCiB7CiAg
ICAgc2V0U2V0dGluZyhsYXN0QWN0aXZlUGFuZWxTZXR0aW5nTmFtZSwgcGFuZWxOYW1lKTsKQEAg
LTUxMiwyMyArNDM2LDIyIEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6aGFuZGxlTW91c2VQ
cmVzc09uTm9kZShOb2RlKiBub2RlKQogICAgIGluc3BlY3Qobm9kZSk7CiB9CiAKLXZvaWQgSW5z
cGVjdG9yQ29udHJvbGxlcjo6aW5zcGVjdGVkV2luZG93U2NyaXB0T2JqZWN0Q2xlYXJlZChGcmFt
ZSogZnJhbWUpCit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldEluc3BlY3RvckZyb250ZW5k
Q2xpZW50KFBhc3NPd25QdHI8SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ+IGNsaWVudCkKIHsKLSAg
ICBpZiAoIWVuYWJsZWQoKSB8fCAhbV9mcm9udGVuZCB8fCBmcmFtZSAhPSBtX2luc3BlY3RlZFBh
Z2UtPm1haW5GcmFtZSgpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9pbmplY3RlZFNjcmlwdEhv
c3QtPmRpc2NhcmRJbmplY3RlZFNjcmlwdHMoKTsKKyAgICBBU1NFUlQoIW1faW5zcGVjdG9yRnJv
bnRlbmRDbGllbnQpOworICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDbGllbnQgPSBjbGllbnQ7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6d2luZG93U2NyaXB0T2JqZWN0QXZhaWxhYmxl
KCkKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zcGVjdGVkV2luZG93U2NyaXB0T2JqZWN0
Q2xlYXJlZChGcmFtZSogZnJhbWUpCiB7Ci0gICAgaWYgKCFtX3BhZ2UgfHwgIWVuYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuOworICAgIC8vIElmIHRoZSBwYWdlIGlzIHN1cHBvc2VkIHRvIHNlcnZl
IGFzIEluc3BlY3RvckZyb250ZW5kIG5vdGlmeSBpbnNwZXRvciBmcm9udGVuZAorICAgIC8vIGNs
aWVudCB0aGF0IGl0J3MgY2xlYXJlZCBzbyB0aGF0IHRoZSBjbGllbnQgY2FuIGV4cG9zZSBpbnNw
ZWN0b3IgYmluZGluZ3MuCisgICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDbGllbnQgJiYgZnJh
bWUgPT0gbV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKSkKKyAgICAgICAgbV9pbnNwZWN0b3JG
cm9udGVuZENsaWVudC0+d2luZG93T2JqZWN0Q2xlYXJlZCgpOwogCi0gICAgLy8gR3JhbnQgdGhl
IGluc3BlY3RvciB0aGUgYWJpbGl0eSB0byBzY3JpcHQgdGhlIGluc3BlY3RlZCBwYWdlLgotICAg
IG1fcGFnZS0+bWFpbkZyYW1lKCktPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmdyYW50
VW5pdmVyc2FsQWNjZXNzKCk7Ci0gICAgbV9mcm9udGVuZFNjcmlwdFN0YXRlID0gc2NyaXB0U3Rh
dGVGcm9tUGFnZShkZWJ1Z2dlcldvcmxkKCksIG1fcGFnZSk7Ci0gICAgU2NyaXB0R2xvYmFsT2Jq
ZWN0OjpzZXQobV9mcm9udGVuZFNjcmlwdFN0YXRlLCAiSW5zcGVjdG9yQmFja2VuZCIsIG1faW5z
cGVjdG9yQmFja2VuZC5nZXQoKSk7Ci0gICAgU2NyaXB0R2xvYmFsT2JqZWN0OjpzZXQobV9mcm9u
dGVuZFNjcmlwdFN0YXRlLCAiSW5zcGVjdG9yRnJvbnRlbmRIb3N0IiwgbV9pbnNwZWN0b3JGcm9u
dGVuZEhvc3QuZ2V0KCkpOworICAgIGlmICghZW5hYmxlZCgpIHx8ICFtX2Zyb250ZW5kIHx8IGZy
YW1lICE9IG1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCkpCisgICAgICAgIHJldHVybjsKKyAg
ICBtX2luamVjdGVkU2NyaXB0SG9zdC0+ZGlzY2FyZEluamVjdGVkU2NyaXB0cygpOwogfQogCiB2
b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldFNlYXJjaGluZ0Zvck5vZGUoYm9vbCBlbmFibGVk
KQpAQCAtNTQ2LDE4ICs0NjksMTUgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRTZWFy
Y2hpbmdGb3JOb2RlKGJvb2wgZW5hYmxlZCkKICAgICB9CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ29u
dHJvbGxlcjo6c2NyaXB0T2JqZWN0UmVhZHkoKQordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpz
ZXRGcm9udGVuZChQYXNzT3duUHRyPEluc3BlY3RvckZyb250ZW5kPiBmcm9udGVuZCkKIHsKLSAg
ICBBU1NFUlQobV9mcm9udGVuZFNjcmlwdFN0YXRlKTsKLSAgICBpZiAoIW1fZnJvbnRlbmRTY3Jp
cHRTdGF0ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU2NyaXB0T2JqZWN0IHdlYkluc3BlY3Rv
ck9iajsKLSAgICBpZiAoIVNjcmlwdEdsb2JhbE9iamVjdDo6Z2V0KG1fZnJvbnRlbmRTY3JpcHRT
dGF0ZSwgIldlYkluc3BlY3RvciIsIHdlYkluc3BlY3Rvck9iaikpCi0gICAgICAgIHJldHVybjsK
LSAgICBzZXRGcm9udGVuZFByb3h5T2JqZWN0KG1fZnJvbnRlbmRTY3JpcHRTdGF0ZSwgd2ViSW5z
cGVjdG9yT2JqKTsKLQotI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQorICAgIG1fb3Bl
bmluZ0Zyb250ZW5kID0gZmFsc2U7CisgICAgbV9mcm9udGVuZCA9IGZyb250ZW5kOworICAgIHJl
bGVhc2VET01BZ2VudCgpOworICAgIG1fZG9tQWdlbnQgPSBJbnNwZWN0b3JET01BZ2VudDo6Y3Jl
YXRlKG1fZnJvbnRlbmQuZ2V0KCkpOworICAgIGlmIChtX3RpbWVsaW5lQWdlbnQpCisgICAgICAg
IG1fdGltZWxpbmVBZ2VudC0+cmVzZXRGcm9udGVuZFByb3h5T2JqZWN0KG1fZnJvbnRlbmQuZ2V0
KCkpOworI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKSAmJiBVU0UoSlNDKQogICAgIFN0
cmluZyBkZWJ1Z2dlckVuYWJsZWQgPSBzZXR0aW5nKGRlYnVnZ2VyRW5hYmxlZFNldHRpbmdOYW1l
KTsKICAgICBpZiAoZGVidWdnZXJFbmFibGVkID09ICJ0cnVlIikKICAgICAgICAgZW5hYmxlRGVi
dWdnZXIoKTsKQEAgLTU2Niw0OCArNDg2LDIzIEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6
c2NyaXB0T2JqZWN0UmVhZHkoKQogICAgICAgICBlbmFibGVQcm9maWxlcigpOwogI2VuZGlmCiAK
LSAgICAvLyBJZiBubyBwcmVmZXJlbmNlIGlzIHNldCAtIGRlZmF1bHQgdG8gYW4gYXR0YWNoZWQg
d2luZG93LiBUaGlzIGlzIGltcG9ydGFudCBmb3IgaW5zcGVjdG9yIExheW91dFRlc3RzLgotICAg
IFN0cmluZyBzaG91bGRBdHRhY2hWYWx1ZSA9IHNldHRpbmcoaW5zcGVjdG9yU3RhcnRzQXR0YWNo
ZWRTZXR0aW5nTmFtZSgpKTsKLSAgICBib29sIHNob3VsZEF0dGFjaCA9IHNob3VsZEF0dGFjaFZh
bHVlICE9ICJmYWxzZSI7Ci0gICAgCi0gICAgaWYgKHNob3VsZEF0dGFjaCAmJiAhY2FuQXR0YWNo
V2luZG93KCkpCi0gICAgICAgIHNob3VsZEF0dGFjaCA9IGZhbHNlOwotCi0gICAgLy8gTWFrZSBz
dXJlIG91ciB3aW5kb3cgaXMgdmlzaWJsZSBub3cgdGhhdCB0aGUgcGFnZSBsb2FkZWQKLSAgICBz
ZXRXaW5kb3dWaXNpYmxlKHRydWUsIHNob3VsZEF0dGFjaCk7Ci0KLSAgICBtX2NsaWVudC0+aW5z
cGVjdG9yV2luZG93T2JqZWN0Q2xlYXJlZCgpOwotfQotCi12b2lkIEluc3BlY3RvckNvbnRyb2xs
ZXI6OnNldEZyb250ZW5kUHJveHlPYmplY3QoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBTY3Jp
cHRPYmplY3Qgd2ViSW5zcGVjdG9yT2JqLCBTY3JpcHRPYmplY3QpCi17Ci0gICAgbV9mcm9udGVu
ZFNjcmlwdFN0YXRlID0gc2NyaXB0U3RhdGU7Ci0gICAgbV9mcm9udGVuZC5zZXQobmV3IEluc3Bl
Y3RvckZyb250ZW5kKHRoaXMsIHdlYkluc3BlY3Rvck9iaikpOwotICAgIHJlbGVhc2VET01BZ2Vu
dCgpOwotICAgIG1fZG9tQWdlbnQgPSBJbnNwZWN0b3JET01BZ2VudDo6Y3JlYXRlKG1fZnJvbnRl
bmQuZ2V0KCkpOwotICAgIGlmIChtX3RpbWVsaW5lQWdlbnQpCi0gICAgICAgIG1fdGltZWxpbmVB
Z2VudC0+cmVzZXRGcm9udGVuZFByb3h5T2JqZWN0KG1fZnJvbnRlbmQuZ2V0KCkpOworICAgIGZy
b250ZW5kUmVhZHkoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzaG93KCkKIHsK
ICAgICBpZiAoIWVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGlmICghbV9w
YWdlKSB7Ci0gICAgICAgIGlmIChtX2Zyb250ZW5kKQotICAgICAgICAgICAgcmV0dXJuOyAvLyBX
ZSBhcmUgdXNpbmcgY3VzdG9tIGZyb250ZW5kIC0gbm8gbmVlZCB0byBjcmVhdGUgcGFnZS4KIAot
ICAgICAgICBtX3BhZ2UgPSBtX2NsaWVudC0+Y3JlYXRlUGFnZSgpOwotICAgICAgICBpZiAoIW1f
cGFnZSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9wYWdlLT5zZXRQYXJlbnRJbnNw
ZWN0b3JDb250cm9sbGVyKHRoaXMpOwotCi0gICAgICAgIC8vIHNob3dXaW5kb3coKSB3aWxsIGJl
IGNhbGxlZCBhZnRlciB0aGUgcGFnZSBsb2FkcyBpbiBzY3JpcHRPYmplY3RSZWFkeSgpCisgICAg
aWYgKG1fb3BlbmluZ0Zyb250ZW5kKQogICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKG1f
ZnJvbnRlbmQpCisgICAgICAgIG1fZnJvbnRlbmQtPmJyaW5nVG9Gcm9udCgpOworICAgIGVsc2Ug
eworICAgICAgICBtX29wZW5pbmdGcm9udGVuZCA9IHRydWU7CisgICAgICAgIG1fY2xpZW50LT5v
cGVuSW5zcGVjdG9yRnJvbnRlbmQodGhpcyk7CiAgICAgfQotCi0gICAgc2hvd1dpbmRvdygpOwog
fQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNob3dQYW5lbChTcGVjaWFsUGFuZWxzIHBh
bmVsKQpAQCAtNjMzLDQ2ICs1MjgsMjcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpjbG9z
ZSgpCiAgICAgaWYgKCFlbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGlmICghbV9m
cm9udGVuZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fY2xvc2luZ0Zyb250ZW5kKQor
ICAgICAgICByZXR1cm47CisgICAgbV9jbG9zaW5nRnJvbnRlbmQgPSB0cnVlOworCisgICAgd2ls
bENsb3NlRnJvbnRlbmQoKTsKKworICAgIGhpZGVIaWdobGlnaHQoKTsKKwogI2lmIEVOQUJMRShK
QVZBU0NSSVBUX0RFQlVHR0VSKQogICAgIHN0b3BVc2VySW5pdGlhdGVkUHJvZmlsaW5nKCk7CiAg
ICAgZGlzYWJsZURlYnVnZ2VyKCk7CiAjZW5kaWYKLSAgICBjbG9zZVdpbmRvdygpOwogCiAgICAg
cmVsZWFzZURPTUFnZW50KCk7Ci0gICAgbV9mcm9udGVuZC5zZXQoMCk7Ci0gICAgbV90aW1lbGlu
ZUFnZW50ID0gMDsKLSAgICBtX2Zyb250ZW5kU2NyaXB0U3RhdGUgPSAwOwotICAgIGlmIChtX3Bh
Z2UpIHsKLSAgICAgICAgaWYgKCFtX3BhZ2UtPm1haW5GcmFtZSgpIHx8ICFtX3BhZ2UtPm1haW5G
cmFtZSgpLT5sb2FkZXIoKSB8fCAhbV9wYWdlLT5tYWluRnJhbWUoKS0+bG9hZGVyKCktPmlzTG9h
ZGluZygpKSB7Ci0gICAgICAgICAgICBtX3BhZ2UtPnNldFBhcmVudEluc3BlY3RvckNvbnRyb2xs
ZXIoMCk7Ci0gICAgICAgICAgICBtX3BhZ2UgPSAwOwotICAgICAgICB9Ci0gICAgfQotfQotCi12
b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNob3dXaW5kb3coKQotewotICAgIEFTU0VSVChlbmFi
bGVkKCkpOwotCi0gICAgdW5zaWduZWQgaW5zcGVjdGVkUGFnZUhlaWdodCA9IG1faW5zcGVjdGVk
UGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+dmlzaWJsZUhlaWdodCgpOwotCi0gICAgbV9jbGll
bnQtPnNob3dXaW5kb3coKTsKKyAgICBtX2Zyb250ZW5kLmNsZWFyKCk7CisgICAgbV90aW1lbGlu
ZUFnZW50LmNsZWFyKCk7CiAKLSAgICBTdHJpbmcgYXR0YWNoZWRIZWlnaHQgPSBzZXR0aW5nKGlu
c3BlY3RvckF0dGFjaGVkSGVpZ2h0TmFtZSk7Ci0gICAgYm9vbCBzdWNjZXNzID0gdHJ1ZTsKLSAg
ICBpbnQgaGVpZ2h0ID0gYXR0YWNoZWRIZWlnaHQudG9JbnQoJnN1Y2Nlc3MpOwotICAgIHVuc2ln
bmVkIHByZWZlcnJlZEhlaWdodCA9IHN1Y2Nlc3MgPyBoZWlnaHQgOiBkZWZhdWx0QXR0YWNoZWRI
ZWlnaHQ7Ci0KLSAgICAvLyBUaGlzIGNhbGwgbWlnaHQgbm90IGdvIHRocm91Z2ggKGlmIHRoZSB3
aW5kb3cgc3RhcnRzIG91dCBkZXRhY2hlZCksIGJ1dCBpZiB0aGUgd2luZG93IGlzIGluaXRpYWxs
eSBjcmVhdGVkIGF0dGFjaGVkLAotICAgIC8vIEluc3BlY3RvckNvbnRyb2xsZXI6OmF0dGFjaFdp
bmRvdyBpcyBuZXZlciBjYWxsZWQsIHNvIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRvIHNldCB0aGUg
YXR0YWNoZWRXaW5kb3dIZWlnaHQuCi0gICAgLy8gRklYTUU6IENsZWFuIHVwIGNvZGUgc28gd2Ug
b25seSBoYXZlIHRvIGNhbGwgc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQgaW4gSW5zcGVjdG9yQ29u
dHJvbGxlcjo6YXR0YWNoV2luZG93Ci0gICAgbV9jbGllbnQtPnNldEF0dGFjaGVkV2luZG93SGVp
Z2h0KGNvbnN0cmFpbmVkQXR0YWNoZWRXaW5kb3dIZWlnaHQocHJlZmVycmVkSGVpZ2h0LCBpbnNw
ZWN0ZWRQYWdlSGVpZ2h0KSk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6Y2xvc2VX
aW5kb3coKQotewotICAgIG1fY2xpZW50LT5jbG9zZVdpbmRvdygpOworICAgIG1fY2xvc2luZ0Zy
b250ZW5kID0gZmFsc2U7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cmVsZWFzZURP
TUFnZW50KCkKQEAgLTY4MSw3ICs1NTcsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnJl
bGVhc2VET01BZ2VudCgpCiAgICAgLy8gbm8gcmVmZXJlbmNlcyB0byB0aGUgRE9NIGFnZW50IGZy
b20gdGhlIERPTSB0cmVlLgogICAgIGlmIChtX2RvbUFnZW50KQogICAgICAgICBtX2RvbUFnZW50
LT5yZXNldCgpOwotICAgIG1fZG9tQWdlbnQgPSAwOworICAgIG1fZG9tQWdlbnQuY2xlYXIoKTsK
IH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpwb3B1bGF0ZVNjcmlwdE9iamVjdHMoKQpA
QCAtNzE1LDcgKzU5MSw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cG9wdWxhdGVTY3Jp
cHRPYmplY3RzKCkKICAgICAgICAgbV9mcm9udGVuZC0+dXBkYXRlQ29uc29sZU1lc3NhZ2VFeHBp
cmVkQ291bnQobV9leHBpcmVkQ29uc29sZU1lc3NhZ2VDb3VudCk7CiAgICAgdW5zaWduZWQgbWVz
c2FnZUNvdW50ID0gbV9jb25zb2xlTWVzc2FnZXMuc2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtZXNzYWdlQ291bnQ7ICsraSkKLSAgICAgICAgbV9jb25zb2xlTWVzc2FnZXNb
aV0tPmFkZFRvQ29uc29sZShtX2Zyb250ZW5kLmdldCgpKTsKKyAgICAgICAgbV9jb25zb2xlTWVz
c2FnZXNbaV0tPmFkZFRvRnJvbnRlbmQobV9mcm9udGVuZC5nZXQoKSwgbV9pbmplY3RlZFNjcmlw
dEhvc3QuZ2V0KCkpOwogCiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICAgaWYg
KG1fZGVidWdnZXJFbmFibGVkKQpAQCAtODAxLDcgKzY3Nyw4IEBAIHZvaWQgSW5zcGVjdG9yQ29u
dHJvbGxlcjo6ZGlkQ29tbWl0TG9hZChEb2N1bWVudExvYWRlciogbG9hZGVyKQogICAgIEFTU0VS
VChtX2luc3BlY3RlZFBhZ2UpOwogCiAgICAgaWYgKGxvYWRlci0+ZnJhbWUoKSA9PSBtX2luc3Bl
Y3RlZFBhZ2UtPm1haW5GcmFtZSgpKSB7Ci0gICAgICAgIG1fY2xpZW50LT5pbnNwZWN0ZWRVUkxD
aGFuZ2VkKGxvYWRlci0+dXJsKCkuc3RyaW5nKCkpOworICAgICAgICBpZiAobV9mcm9udGVuZCkK
KyAgICAgICAgICAgIG1fZnJvbnRlbmQtPmluc3BlY3RlZFVSTENoYW5nZWQobG9hZGVyLT51cmwo
KS5zdHJpbmcoKSk7CiAKICAgICAgICAgbV9pbmplY3RlZFNjcmlwdEhvc3QtPmRpc2NhcmRJbmpl
Y3RlZFNjcmlwdHMoKTsKICAgICAgICAgY2xlYXJDb25zb2xlTWVzc2FnZXMoKTsKQEAgLTE0MzYs
MTYgKzEzMTMsNiBAQCBJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UqIEluc3BlY3RvckNvbnRy
b2xsZXI6OmdldERPTVN0b3JhZ2VSZXNvdXJjZUZvcklkKGludAogfQogI2VuZGlmCiAKLXZvaWQg
SW5zcGVjdG9yQ29udHJvbGxlcjo6bW92ZVdpbmRvd0J5KGZsb2F0IHgsIGZsb2F0IHkpIGNvbnN0
Ci17Ci0gICAgaWYgKCFtX3BhZ2UgfHwgIWVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgRmxvYXRSZWN0IGZyYW1lUmVjdCA9IG1fcGFnZS0+Y2hyb21lKCktPndpbmRvd1JlY3QoKTsK
LSAgICBmcmFtZVJlY3QubW92ZSh4LCB5KTsKLSAgICBtX3BhZ2UtPmNocm9tZSgpLT5zZXRXaW5k
b3dSZWN0KGZyYW1lUmVjdCk7Ci19Ci0KICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikK
IHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6YWRkUHJvZmlsZShQYXNzUmVmUHRyPFNjcmlwdFBy
b2ZpbGU+IHBycFByb2ZpbGUsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291
cmNlVVJMKQogewpAQCAtMTQ5OCw3ICsxMzY1LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVy
OjpnZXRQcm9maWxlKGxvbmcgY2FsbElkLCB1bnNpZ25lZCB1aWQpCiAgICAgUHJvZmlsZXNNYXA6
Oml0ZXJhdG9yIGl0ID0gbV9wcm9maWxlcy5maW5kKHVpZCk7CiAjaWYgVVNFKEpTQykKICAgICBp
ZiAoaXQgIT0gbV9wcm9maWxlcy5lbmQoKSkKLSAgICAgICAgbV9mcm9udGVuZC0+ZGlkR2V0UHJv
ZmlsZShjYWxsSWQsIHRvSlMobV9mcm9udGVuZFNjcmlwdFN0YXRlLCBpdC0+c2Vjb25kLmdldCgp
KSk7CisgICAgICAgIG1fZnJvbnRlbmQtPmRpZEdldFByb2ZpbGUoY2FsbElkLCB0b0pTKG1fZnJv
bnRlbmQtPnNjcmlwdFN0YXRlKCksIGl0LT5zZWNvbmQuZ2V0KCkpKTsKICNlbmRpZgogfQogCkBA
IC0xNjM1LDcgKzE1MDIsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmVuYWJsZURlYnVn
Z2VyKCkKICAgICBpZiAobV9kZWJ1Z2dlckVuYWJsZWQpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGlmICghbV9mcm9udGVuZFNjcmlwdFN0YXRlIHx8ICFtX2Zyb250ZW5kKQorICAgIGlmICghbV9m
cm9udGVuZCkKICAgICAgICAgbV9hdHRhY2hEZWJ1Z2dlcldoZW5TaG93biA9IHRydWU7CiAgICAg
ZWxzZSB7CiAgICAgICAgIG1fZnJvbnRlbmQtPmF0dGFjaERlYnVnZ2VyV2hlblNob3duKCk7CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmggYi9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKaW5kZXggZWFkNGQ1ZS4uNTg4NTNh
YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCisr
KyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaApAQCAtNjYsNyArNjYs
NyBAQCBjbGFzcyBJbmplY3RlZFNjcmlwdEhvc3Q7CiBjbGFzcyBJbnNwZWN0b3JCYWNrZW5kOwog
Y2xhc3MgSW5zcGVjdG9yQ2xpZW50OwogY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmQ7Ci1jbGFzcyBJ
bnNwZWN0b3JGcm9udGVuZEhvc3Q7CitjbGFzcyBJbnNwZWN0b3JGcm9udGVuZENsaWVudDsKIGNs
YXNzIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ7CiBjbGFzcyBKYXZhU2NyaXB0Q2FsbEZyYW1lOwog
Y2xhc3MgS1VSTDsKQEAgLTExNiwxMSArMTE2LDkgQEAgcHVibGljOgogICAgIH5JbnNwZWN0b3JD
b250cm9sbGVyKCk7CiAKICAgICBJbnNwZWN0b3JCYWNrZW5kKiBpbnNwZWN0b3JCYWNrZW5kKCkg
eyByZXR1cm4gbV9pbnNwZWN0b3JCYWNrZW5kLmdldCgpOyB9Ci0gICAgSW5zcGVjdG9yRnJvbnRl
bmRIb3N0KiBpbnNwZWN0b3JGcm9udGVuZEhvc3QoKSB7IHJldHVybiBtX2luc3BlY3RvckZyb250
ZW5kSG9zdC5nZXQoKTsgfQogICAgIEluamVjdGVkU2NyaXB0SG9zdCogaW5qZWN0ZWRTY3JpcHRI
b3N0KCkgeyByZXR1cm4gbV9pbmplY3RlZFNjcmlwdEhvc3QuZ2V0KCk7IH0KIAogICAgIHZvaWQg
aW5zcGVjdGVkUGFnZURlc3Ryb3llZCgpOwotICAgIHZvaWQgcGFnZURlc3Ryb3llZCgpIHsgbV9w
YWdlID0gMDsgfQogCiAgICAgYm9vbCBlbmFibGVkKCkgY29uc3Q7CiAKQEAgLTEzNywyNyArMTM1
LDIyIEBAIHB1YmxpYzoKICAgICB2b2lkIHNob3dQYW5lbChTcGVjaWFsUGFuZWxzKTsKICAgICB2
b2lkIGNsb3NlKCk7CiAKLSAgICBib29sIHdpbmRvd1Zpc2libGUoKTsKLSAgICB2b2lkIHNldFdp
bmRvd1Zpc2libGUoYm9vbCB2aXNpYmxlID0gdHJ1ZSwgYm9vbCBhdHRhY2hlZCA9IGZhbHNlKTsK
LQogICAgIHZvaWQgYWRkTWVzc2FnZVRvQ29uc29sZShNZXNzYWdlU291cmNlLCBNZXNzYWdlVHlw
ZSwgTWVzc2FnZUxldmVsLCBTY3JpcHRDYWxsU3RhY2sqKTsKICAgICB2b2lkIGFkZE1lc3NhZ2VU
b0NvbnNvbGUoTWVzc2FnZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwgY29uc3Qg
U3RyaW5nJiBtZXNzYWdlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJj
ZUlEKTsKICAgICB2b2lkIGNsZWFyQ29uc29sZU1lc3NhZ2VzKCk7CiAgICAgY29uc3QgVmVjdG9y
PENvbnNvbGVNZXNzYWdlKj4mIGNvbnNvbGVNZXNzYWdlcygpIGNvbnN0IHsgcmV0dXJuIG1fY29u
c29sZU1lc3NhZ2VzOyB9CiAKLSAgICBib29sIGNhbkF0dGFjaFdpbmRvdygpIGNvbnN0OwotICAg
IHZvaWQgYXR0YWNoV2luZG93KCk7Ci0gICAgdm9pZCBkZXRhY2hXaW5kb3coKTsKLQogICAgIGJv
b2wgc2VhcmNoaW5nRm9yTm9kZUluUGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2VhcmNoaW5nRm9y
Tm9kZTsgfQogICAgIHZvaWQgbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoY29uc3QgSGl0VGVzdFJl
c3VsdCYsIHVuc2lnbmVkIG1vZGlmaWVyRmxhZ3MpOwogICAgIHZvaWQgaGFuZGxlTW91c2VQcmVz
c09uTm9kZShOb2RlKik7CiAKKyAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2xpZW50KFBh
c3NPd25QdHI8SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ+IGNsaWVudCk7CisgICAgYm9vbCBoYXNJ
bnNwZWN0b3JGcm9udGVuZENsaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRl
bmRDbGllbnQ7IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgCiAgICAgdm9pZCBpbnNwZWN0ZWRXaW5kb3dTY3JpcHRPYmplY3RDbGVhcmVk
KEZyYW1lKik7Ci0gICAgdm9pZCB3aW5kb3dTY3JpcHRPYmplY3RBdmFpbGFibGUoKTsKIAotICAg
IHZvaWQgc2V0RnJvbnRlbmRQcm94eU9iamVjdChTY3JpcHRTdGF0ZSogc3RhdGUsIFNjcmlwdE9i
amVjdCB3ZWJJbnNwZWN0b3JPYmosIFNjcmlwdE9iamVjdCBpbmplY3RlZFNjcmlwdE9iaiA9IFNj
cmlwdE9iamVjdCgpKTsKLSAgICBTY3JpcHRTdGF0ZSogZnJvbnRlbmRTY3JpcHRTdGF0ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fZnJvbnRlbmRTY3JpcHRTdGF0ZTsgfQorICAgIGJvb2wgd2luZG93Vmlz
aWJsZSgpOworICAgIHZvaWQgc2V0RnJvbnRlbmQoUGFzc093blB0cjxJbnNwZWN0b3JGcm9udGVu
ZD4pOwogCiAgICAgdm9pZCBwb3B1bGF0ZVNjcmlwdE9iamVjdHMoKTsKICAgICB2b2lkIHJlc2V0
U2NyaXB0T2JqZWN0cygpOwpAQCAtMjYzLDE5ICsyNTYsMTYgQEAgcHJpdmF0ZToKICAgICBzdGF0
aWMgY29uc3QgU3RyaW5nJiBmcm9udGVuZFNldHRpbmdzU2V0dGluZ05hbWUoKTsKIAogICAgIGZy
aWVuZCBjbGFzcyBJbnNwZWN0b3JCYWNrZW5kOwotICAgIGZyaWVuZCBjbGFzcyBJbnNwZWN0b3JG
cm9udGVuZEhvc3Q7CiAgICAgZnJpZW5kIGNsYXNzIEluamVjdGVkU2NyaXB0SG9zdDsKIAogICAg
IC8vIEZvbGxvd2luZyBhcmUgdXNlZCBmcm9tIEluc3BlY3RvckJhY2tlbmQgYW5kIGludGVybmFs
bHkuCi0KICAgICB2b2lkIHNldFNlYXJjaGluZ0Zvck5vZGUoYm9vbCBlbmFibGVkKTsKIAotICAg
IHZvaWQgc2NyaXB0T2JqZWN0UmVhZHkoKTsKLSAgICB2b2lkIG1vdmVXaW5kb3dCeShmbG9hdCB4
LCBmbG9hdCB5KSBjb25zdDsKLSAgICB2b2lkIHNldEF0dGFjaGVkV2luZG93KGJvb2wpOwotICAg
IHZvaWQgc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KTsKKyAgICB2b2lk
IGZyb250ZW5kUmVhZHkoKTsKKyAgICB2b2lkIHdpbGxDbG9zZUZyb250ZW5kKCk7CisKKyAgICAv
LyBGb2xsb3dpbmcgYXJlIHVzZWQgZnJvbSBJbnNwZWN0b3JCYWNrZW5kIGFuZCBpbnRlcm5hbGx5
LgogICAgIHZvaWQgc3RvcmVMYXN0QWN0aXZlUGFuZWwoY29uc3QgU3RyaW5nJiBwYW5lbE5hbWUp
OwotICAgIHZvaWQgY2xvc2VXaW5kb3coKTsKICAgICBJbnNwZWN0b3JET01BZ2VudCogZG9tQWdl
bnQoKSB7IHJldHVybiBtX2RvbUFnZW50LmdldCgpOyB9CiAgICAgdm9pZCByZWxlYXNlRE9NQWdl
bnQoKTsKIApAQCAtMzE2LDggKzMwNiw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwcnVuZVJlc291
cmNlcyhSZXNvdXJjZXNNYXAqLCBEb2N1bWVudExvYWRlciogbG9hZGVyVG9LZWVwID0gMCk7CiAg
ICAgdm9pZCByZW1vdmVBbGxSZXNvdXJjZXMoUmVzb3VyY2VzTWFwKiBtYXApIHsgcHJ1bmVSZXNv
dXJjZXMobWFwKTsgfQogCi0gICAgdm9pZCBzaG93V2luZG93KCk7Ci0KICAgICBib29sIGlzTWFp
blJlc291cmNlTG9hZGVyKERvY3VtZW50TG9hZGVyKiBsb2FkZXIsIGNvbnN0IEtVUkwmIHJlcXVl
c3RVcmwpOwogCiAgICAgU3BlY2lhbFBhbmVscyBzcGVjaWFsUGFuZWxGb3JKU05hbWUoY29uc3Qg
U3RyaW5nJiBwYW5lbE5hbWUpOwpAQCAtMzI2LDEwICszMTQsMTIgQEAgcHJpdmF0ZToKIAogICAg
IFBhZ2UqIG1faW5zcGVjdGVkUGFnZTsKICAgICBJbnNwZWN0b3JDbGllbnQqIG1fY2xpZW50Owor
ICAgIE93blB0cjxJbnNwZWN0b3JGcm9udGVuZENsaWVudD4gbV9pbnNwZWN0b3JGcm9udGVuZENs
aWVudDsKKyAgICBib29sIG1fb3BlbmluZ0Zyb250ZW5kOworICAgIGJvb2wgbV9jbG9zaW5nRnJv
bnRlbmQ7CiAgICAgT3duUHRyPEluc3BlY3RvckZyb250ZW5kPiBtX2Zyb250ZW5kOwogICAgIFJl
ZlB0cjxJbnNwZWN0b3JET01BZ2VudD4gbV9kb21BZ2VudDsKICAgICBPd25QdHI8SW5zcGVjdG9y
VGltZWxpbmVBZ2VudD4gbV90aW1lbGluZUFnZW50OwotICAgIFBhZ2UqIG1fcGFnZTsKICAgICBS
ZWZQdHI8Tm9kZT4gbV9ub2RlVG9Gb2N1czsKICAgICBSZWZQdHI8SW5zcGVjdG9yUmVzb3VyY2U+
IG1fbWFpblJlc291cmNlOwogICAgIFJlc291cmNlc01hcCBtX3Jlc291cmNlczsKQEAgLTM0NSw4
ICszMzUsNiBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShET01fU1RPUkFHRSkKICAgICBET01TdG9y
YWdlUmVzb3VyY2VzTWFwIG1fZG9tU3RvcmFnZVJlc291cmNlczsKICNlbmRpZgotICAgIFNjcmlw
dFN0YXRlKiBtX2Zyb250ZW5kU2NyaXB0U3RhdGU7Ci0gICAgYm9vbCBtX3dpbmRvd1Zpc2libGU7
CiAgICAgU3BlY2lhbFBhbmVscyBtX3Nob3dBZnRlclZpc2libGU7CiAgICAgUmVmUHRyPE5vZGU+
IG1faGlnaGxpZ2h0ZWROb2RlOwogICAgIHVuc2lnbmVkIG1fZ3JvdXBMZXZlbDsKQEAgLTM1NSw3
ICszNDMsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9yZXNvdXJjZVRyYWNraW5nRW5hYmxlZDsK
ICAgICBib29sIG1fcmVzb3VyY2VUcmFja2luZ1NldHRpbmdzTG9hZGVkOwogICAgIFJlZlB0cjxJ
bnNwZWN0b3JCYWNrZW5kPiBtX2luc3BlY3RvckJhY2tlbmQ7Ci0gICAgUmVmUHRyPEluc3BlY3Rv
ckZyb250ZW5kSG9zdD4gbV9pbnNwZWN0b3JGcm9udGVuZEhvc3Q7CiAgICAgUmVmUHRyPEluamVj
dGVkU2NyaXB0SG9zdD4gbV9pbmplY3RlZFNjcmlwdEhvc3Q7CiAKICAgICB0eXBlZGVmIEhhc2hN
YXA8U3RyaW5nLCBTdHJpbmc+IFNldHRpbmdzOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRnJvbnRlbmQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJv
bnRlbmQuY3BwCmluZGV4IGFmNTYyMGYuLmNjNWNkNzUgMTAwNzU1Ci0tLSBhL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JGcm9udGVuZC5jcHAKQEAgLTQ5LDE0ICs0OSwxNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLUluc3BlY3RvckZyb250ZW5kOjpJbnNwZWN0b3JGcm9udGVuZChJbnNwZWN0b3JDb250
cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyLCBTY3JpcHRPYmplY3Qgd2ViSW5zcGVjdG9yKQot
ICAgIDogbV9pbnNwZWN0b3JDb250cm9sbGVyKGluc3BlY3RvckNvbnRyb2xsZXIpCi0gICAgLCBt
X3dlYkluc3BlY3Rvcih3ZWJJbnNwZWN0b3IpCitJbnNwZWN0b3JGcm9udGVuZDo6SW5zcGVjdG9y
RnJvbnRlbmQoU2NyaXB0T2JqZWN0IHdlYkluc3BlY3RvcikKKyAgICA6IG1fd2ViSW5zcGVjdG9y
KHdlYkluc3BlY3RvcikKIHsKIH0KIAogSW5zcGVjdG9yRnJvbnRlbmQ6On5JbnNwZWN0b3JGcm9u
dGVuZCgpIAogeworICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3dlYkluc3BlY3Rv
ciwgImNsb3NlIik7CisgICAgZnVuY3Rpb24uY2FsbCgpOworCiAgICAgbV93ZWJJbnNwZWN0b3Ig
PSBTY3JpcHRPYmplY3QoKTsKIH0KIApAQCAtOTEsNyArOTMsNyBAQCB2b2lkIEluc3BlY3RvckZy
b250ZW5kOjp1cGRhdGVDb25zb2xlTWVzc2FnZUV4cGlyZWRDb3VudCh1bnNpZ25lZCBjb3VudCkK
ICAgICBmdW5jdGlvbi5jYWxsKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmFkZENv
bnNvbGVNZXNzYWdlKGNvbnN0IFNjcmlwdE9iamVjdCYgbWVzc2FnZU9iaiwgY29uc3QgVmVjdG9y
PFNjcmlwdFN0cmluZz4mIGZyYW1lcywgU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBjb25zdCBW
ZWN0b3I8U2NyaXB0VmFsdWU+IGFyZ3VtZW50cywgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQordm9p
ZCBJbnNwZWN0b3JGcm9udGVuZDo6YWRkQ29uc29sZU1lc3NhZ2UoY29uc3QgU2NyaXB0T2JqZWN0
JiBtZXNzYWdlT2JqLCBjb25zdCBWZWN0b3I8U2NyaXB0U3RyaW5nPiYgZnJhbWVzLCBjb25zdCBW
ZWN0b3I8UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gPiYgYXJndW1lbnRzLCBjb25zdCBT
dHJpbmcmIG1lc3NhZ2UpCiB7CiAgICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fd2Vi
SW5zcGVjdG9yLCAiZGlzcGF0Y2giKTsgCiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoImFk
ZENvbnNvbGVNZXNzYWdlIik7CkBAIC0xMDAsMTAgKzEwMiw4IEBAIHZvaWQgSW5zcGVjdG9yRnJv
bnRlbmQ6OmFkZENvbnNvbGVNZXNzYWdlKGNvbnN0IFNjcmlwdE9iamVjdCYgbWVzc2FnZU9iaiwg
Y29uc3QKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZyYW1lcy5zaXplKCk7ICsr
aSkKICAgICAgICAgICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGZyYW1lc1tpXSk7CiAgICAg
fSBlbHNlIGlmICghYXJndW1lbnRzLmlzRW1wdHkoKSkgewotICAgICAgICBJbmplY3RlZFNjcmlw
dCBpbmplY3RlZFNjcmlwdCA9IG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5qZWN0ZWRTY3JpcHRI
b3N0KCktPmluamVjdGVkU2NyaXB0Rm9yKHNjcmlwdFN0YXRlKTsKICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGFyZ3VtZW50cy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZFZhbHVlID0gaW5qZWN0ZWRTY3Jp
cHQud3JhcEZvckNvbnNvbGUoYXJndW1lbnRzW2ldKTsKLSAgICAgICAgICAgIFNjcmlwdFZhbHVl
IHNjcmlwdFZhbHVlID0gU2NyaXB0VmFsdWU6OmRlc2VyaWFsaXplKHRoaXMtPnNjcmlwdFN0YXRl
KCksIHNlcmlhbGl6ZWRWYWx1ZS5nZXQoKSk7CisgICAgICAgICAgICBTY3JpcHRWYWx1ZSBzY3Jp
cHRWYWx1ZSA9IFNjcmlwdFZhbHVlOjpkZXNlcmlhbGl6ZShzY3JpcHRTdGF0ZSgpLCBhcmd1bWVu
dHNbaV0uZ2V0KCkpOwogICAgICAgICAgICAgaWYgKHNjcmlwdFZhbHVlLmhhc05vVmFsdWUoKSkg
ewogICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgICAg
IHJldHVybjsKQEAgLTIyMCw2ICsyMjAsMTkgQEAgdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6cmVz
ZXQoKQogICAgIGNhbGxTaW1wbGVGdW5jdGlvbigicmVzZXQiKTsKIH0KIAordm9pZCBJbnNwZWN0
b3JGcm9udGVuZDo6YnJpbmdUb0Zyb250KCkKK3sKKyAgICBjYWxsU2ltcGxlRnVuY3Rpb24oImJy
aW5nVG9Gcm9udCIpOworfQorCit2b2lkIEluc3BlY3RvckZyb250ZW5kOjppbnNwZWN0ZWRVUkxD
aGFuZ2VkKGNvbnN0IFN0cmluZyYgdXJsKQoreworICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5j
dGlvbihtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7CisgICAgZnVuY3Rpb24uYXBwZW5kQXJn
dW1lbnQoImluc3BlY3RlZFVSTENoYW5nZWQiKTsKKyAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVu
dCh1cmwpOworICAgIGZ1bmN0aW9uLmNhbGwoKTsKK30KKwogdm9pZCBJbnNwZWN0b3JGcm9udGVu
ZDo6cmVzb3VyY2VUcmFja2luZ1dhc0VuYWJsZWQoKQogewogICAgIGNhbGxTaW1wbGVGdW5jdGlv
bigicmVzb3VyY2VUcmFja2luZ1dhc0VuYWJsZWQiKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JG
cm9udGVuZC5oCmluZGV4IDg2MWE2ZjcuLjI1YTAzNTEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRnJvbnRlbmQuaApAQCAtNDksNyArNDksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAg
ICBjbGFzcyBJbnNwZWN0b3JGcm9udGVuZCA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiAgICAgcHVi
bGljOgotICAgICAgICBJbnNwZWN0b3JGcm9udGVuZChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNw
ZWN0b3JDb250cm9sbGVyLCBTY3JpcHRPYmplY3Qgd2ViSW5zcGVjdG9yKTsKKyAgICAgICAgSW5z
cGVjdG9yRnJvbnRlbmQoU2NyaXB0T2JqZWN0IHdlYkluc3BlY3Rvcik7CiAgICAgICAgIH5JbnNw
ZWN0b3JGcm9udGVuZCgpOwogCiAgICAgICAgIFNjcmlwdEFycmF5IG5ld1NjcmlwdEFycmF5KCk7
CkBAIC02MCw3ICs2MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBwb3B1
bGF0ZUZyb250ZW5kU2V0dGluZ3MoY29uc3QgU3RyaW5nJiBzZXR0aW5ncyk7CiAKICAgICAgICAg
dm9pZCB1cGRhdGVDb25zb2xlTWVzc2FnZUV4cGlyZWRDb3VudCh1bnNpZ25lZCBjb3VudCk7Ci0g
ICAgICAgIHZvaWQgYWRkQ29uc29sZU1lc3NhZ2UoY29uc3QgU2NyaXB0T2JqZWN0JiBtZXNzYWdl
T2JqLCBjb25zdCBWZWN0b3I8U2NyaXB0U3RyaW5nPiYgZnJhbWVzLCBTY3JpcHRTdGF0ZSosIGNv
bnN0IFZlY3RvcjxTY3JpcHRWYWx1ZT4gYXJndW1lbnRzLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2Up
OworICAgICAgICB2b2lkIGFkZENvbnNvbGVNZXNzYWdlKGNvbnN0IFNjcmlwdE9iamVjdCYgbWVz
c2FnZU9iaiwgY29uc3QgVmVjdG9yPFNjcmlwdFN0cmluZz4mIGZyYW1lcywgY29uc3QgVmVjdG9y
PFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+ID4mIGFyZ3VtZW50cywgY29uc3QgU3RyaW5n
JiBtZXNzYWdlKTsKICAgICAgICAgdm9pZCB1cGRhdGVDb25zb2xlTWVzc2FnZVJlcGVhdENvdW50
KHVuc2lnbmVkIGNvdW50KTsKICAgICAgICAgdm9pZCBjbGVhckNvbnNvbGVNZXNzYWdlcygpOwog
CkBAIC03Myw2ICs3Myw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBzaG93
UGFuZWwoaW50IHBhbmVsKTsKICAgICAgICAgdm9pZCBwb3B1bGF0ZUludGVyZmFjZSgpOwogICAg
ICAgICB2b2lkIHJlc2V0KCk7CisgICAgICAgIAorICAgICAgICB2b2lkIGJyaW5nVG9Gcm9udCgp
OworICAgICAgICB2b2lkIGluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJik7CiAKICAg
ICAgICAgdm9pZCByZXNvdXJjZVRyYWNraW5nV2FzRW5hYmxlZCgpOwogICAgICAgICB2b2lkIHJl
c291cmNlVHJhY2tpbmdXYXNEaXNhYmxlZCgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckZyb250ZW5kQ2xpZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU4
MzQ2YgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250
ZW5kQ2xpZW50LmgKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSW5zcGVjdG9yRnJvbnRlbmRDbGll
bnRfaAorI2RlZmluZSBJbnNwZWN0b3JGcm9udGVuZENsaWVudF9oCisKKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ29udGV4dE1lbnVJdGVt
OworY2xhc3MgRXZlbnQ7CitjbGFzcyBTdHJpbmc7CisKK2NsYXNzIEluc3BlY3RvckZyb250ZW5k
Q2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5JbnNwZWN0b3JGcm9udGVuZENsaWVudCgp
IHsgfQorCisgICAgdmlydHVhbCB2b2lkIHdpbmRvd09iamVjdENsZWFyZWQoKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGZyb250ZW5kTG9hZGVkKCkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIG1v
dmVXaW5kb3dCeShmbG9hdCB4LCBmbG9hdCB5KSA9IDA7CisKKyAgICB2aXJ0dWFsIFN0cmluZyBs
b2NhbGl6ZWRTdHJpbmdzVVJMKCkgPSAwOworICAgIHZpcnR1YWwgU3RyaW5nIGhpZGRlblBhbmVs
cygpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBicmluZ1RvRnJvbnQoKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGNsb3NlV2luZG93KCkgPSAwOworCisgICAgdmlydHVhbCBib29sIGNhbkF0dGFj
aFdpbmRvdygpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoV2luZG93KCkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBkZXRhY2hXaW5kb3coKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNoYW5n
ZUF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkKSA9IDA7CisgICAgCisgICAgdmlydHVhbCB2
b2lkIGluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJikgPSAwOworCisgICAgdmlydHVh
bCB2b2lkIHNob3dDb250ZXh0TWVudShFdmVudCosIGNvbnN0IFZlY3RvcjxDb250ZXh0TWVudUl0
ZW0qPiYpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmNw
cCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3NGNkY2MKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmNwcApA
QCAtMCwwICsxLDIzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
ICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JG
cm9udGVuZENsaWVudExvY2FsLmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVk
ZSAiQ2hyb21lLmgiCisjaW5jbHVkZSAiQ29udGV4dE1lbnUuaCIKKyNpbmNsdWRlICJDb250ZXh0
TWVudUl0ZW0uaCIKKyNpbmNsdWRlICJDb250ZXh0TWVudUNvbnRyb2xsZXIuaCIKKyNpbmNsdWRl
ICJDb250ZXh0TWVudVByb3ZpZGVyLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVk
ZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JD
b250cm9sbGVyLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmQuaCIKKyNpbmNsdWRlICJJ
bnNwZWN0b3JGcm9udGVuZEhvc3QuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGxh
dGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTY3JpcHRPYmplY3QuaCIKKyNpbmNsdWRlICJTY3Jp
cHRGdW5jdGlvbkNhbGwuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGcm9udGVu
ZE1lbnVQcm92aWRlciA6IHB1YmxpYyBDb250ZXh0TWVudVByb3ZpZGVyIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxGcm9udGVuZE1lbnVQcm92aWRlcj4gY3JlYXRlKEluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50TG9jYWwqIGZyb250ZW5kQ2xpZW50LCBTY3JpcHRPYmplY3Qgd2ViSW5z
cGVjdG9yLCBjb25zdCBWZWN0b3I8Q29udGV4dE1lbnVJdGVtKj4mIGl0ZW1zKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGcm9udGVuZE1lbnVQcm92aWRlcihmcm9udGVuZENs
aWVudCwgd2ViSW5zcGVjdG9yLCBpdGVtcykpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGRpc2Nv
bm5lY3QoKQorICAgIHsKKyAgICAgICAgbV93ZWJJbnNwZWN0b3IgPSBTY3JpcHRPYmplY3QoKTsK
KyAgICAgICAgbV9mcm9udGVuZENsaWVudCA9IDA7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAg
ICBGcm9udGVuZE1lbnVQcm92aWRlcihJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsKiBmcm9u
dGVuZENsaWVudCwgU2NyaXB0T2JqZWN0IHdlYkluc3BlY3RvciwgIGNvbnN0IFZlY3RvcjxDb250
ZXh0TWVudUl0ZW0qPiYgaXRlbXMpCisgICAgICAgIDogbV9mcm9udGVuZENsaWVudChmcm9udGVu
ZENsaWVudCkKKyAgICAgICAgLCBtX3dlYkluc3BlY3Rvcih3ZWJJbnNwZWN0b3IpCisgICAgICAg
ICwgbV9pdGVtcyhpdGVtcykKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB+RnJvbnRlbmRN
ZW51UHJvdmlkZXIoKQorICAgIHsKKyAgICAgICAgY29udGV4dE1lbnVDbGVhcmVkKCk7CisgICAg
fQorICAgIAorICAgIHZpcnR1YWwgdm9pZCBwb3B1bGF0ZUNvbnRleHRNZW51KENvbnRleHRNZW51
KiBtZW51KQorICAgIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2l0ZW1zLnNp
emUoKTsgKytpKQorICAgICAgICAgICAgbWVudS0+YXBwZW5kSXRlbSgqbV9pdGVtc1tpXSk7Cisg
ICAgfQorICAgIAorICAgIHZpcnR1YWwgdm9pZCBjb250ZXh0TWVudUl0ZW1TZWxlY3RlZChDb250
ZXh0TWVudUl0ZW0qIGl0ZW0pCisgICAgeworICAgICAgICBpbnQgaXRlbU51bWJlciA9IGl0ZW0t
PmFjdGlvbigpIC0gQ29udGV4dE1lbnVJdGVtQmFzZUN1c3RvbVRhZzsKKworICAgICAgICBTY3Jp
cHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIpOworICAg
ICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudCgiY29udGV4dE1lbnVJdGVtU2VsZWN0ZWQiKTsK
KyAgICAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoaXRlbU51bWJlcik7CisgICAgICAgIGZ1
bmN0aW9uLmNhbGwoKTsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCB2b2lkIGNvbnRleHRNZW51
Q2xlYXJlZCgpCisgICAgeworCisgICAgICAgIGlmIChtX2Zyb250ZW5kQ2xpZW50KSB7CisgICAg
ICAgICAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJbnNwZWN0b3IsICJkaXNw
YXRjaCIpOworICAgICAgICAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoImNvbnRleHRNZW51
Q2xlYXJlZCIpOworICAgICAgICAgICAgZnVuY3Rpb24uY2FsbCgpOworCisgICAgICAgICAgICBt
X2Zyb250ZW5kQ2xpZW50LT5tX21lbnVQcm92aWRlciA9IDA7CisgICAgICAgIH0KKyAgICAgICAg
ZGVsZXRlQWxsVmFsdWVzKG1faXRlbXMpOworICAgICAgICBtX2l0ZW1zLmNsZWFyKCk7CisgICAg
fQorCisgICAgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbCogbV9mcm9udGVuZENsaWVudDsK
KyAgICBTY3JpcHRPYmplY3QgbV93ZWJJbnNwZWN0b3I7CisgICAgVmVjdG9yPENvbnRleHRNZW51
SXRlbSo+IG1faXRlbXM7Cit9OworCitzdGF0aWMgY29uc3QgY2hhciogY29uc3QgaW5zcGVjdG9y
QXR0YWNoZWRIZWlnaHROYW1lID0gImluc3BlY3RvckF0dGFjaGVkSGVpZ2h0IjsKK3N0YXRpYyBj
b25zdCB1bnNpZ25lZCBkZWZhdWx0QXR0YWNoZWRIZWlnaHQgPSAzMDA7CitzdGF0aWMgY29uc3Qg
ZmxvYXQgbWluaW11bUF0dGFjaGVkSGVpZ2h0ID0gMjUwLjBmOworc3RhdGljIGNvbnN0IGZsb2F0
IG1heGltdW1BdHRhY2hlZEhlaWdodFJhdGlvID0gMC43NWY7CisKK0luc3BlY3RvckZyb250ZW5k
Q2xpZW50TG9jYWw6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwoSW5zcGVjdG9yQ29udHJv
bGxlciogaW5zcGVjdG9yQ29udHJvbGxlciwgUGFnZSogZnJvbnRlbmRQYWdlKQorICAgIDogbV9p
bnNwZWN0b3JDb250cm9sbGVyKGluc3BlY3RvckNvbnRyb2xsZXIpCisgICAgLCBtX2Zyb250ZW5k
UGFnZShmcm9udGVuZFBhZ2UpCisgICAgLCBtX2Zyb250ZW5kU2NyaXB0U3RhdGUoMCkKKyAgICAs
IG1fbWVudVByb3ZpZGVyKDApCit7Cit9CisKK0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6
On5JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsKCkKK3sKKyAgICBpZiAobV9tZW51UHJvdmlk
ZXIpCisgICAgICAgIG1fbWVudVByb3ZpZGVyLT5kaXNjb25uZWN0KCk7CisgICAgbV9mcm9udGVu
ZFNjcmlwdFN0YXRlID0gMDsKKyAgICBtX2Zyb250ZW5kUGFnZSA9IDA7CisgICAgbV9pbnNwZWN0
b3JDb250cm9sbGVyID0gMDsKK30KKyAgICAKK3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRM
b2NhbDo6d2luZG93T2JqZWN0Q2xlYXJlZCgpCit7CisgICAgLy8gR3JhbnQgdGhlIGluc3BlY3Rv
ciB0aGUgYWJpbGl0eSB0byBzY3JpcHQgdGhlIGluc3BlY3RlZCBwYWdlLgorICAgIG1fZnJvbnRl
bmRQYWdlLT5tYWluRnJhbWUoKS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+Z3JhbnRV
bml2ZXJzYWxBY2Nlc3MoKTsKKyAgICAvLyBGSVhNRTogZG9uJ3Qga2VlcCByZWZlcmVuY2UgdG8g
dGhlIHNjcmlwdCBzdGF0ZQorICAgIG1fZnJvbnRlbmRTY3JpcHRTdGF0ZSA9IHNjcmlwdFN0YXRl
RnJvbVBhZ2UoZGVidWdnZXJXb3JsZCgpLCBtX2Zyb250ZW5kUGFnZSk7CisgICAgU2NyaXB0R2xv
YmFsT2JqZWN0OjpzZXQobV9mcm9udGVuZFNjcmlwdFN0YXRlLCAiSW5zcGVjdG9yQmFja2VuZCIs
IG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQmFja2VuZCgpKTsKKyAgICBtX2Zyb250
ZW5kSG9zdCA9IEluc3BlY3RvckZyb250ZW5kSG9zdDo6Y3JlYXRlKHRoaXMpOworICAgIFNjcmlw
dEdsb2JhbE9iamVjdDo6c2V0KG1fZnJvbnRlbmRTY3JpcHRTdGF0ZSwgIkluc3BlY3RvckZyb250
ZW5kSG9zdCIsIG1fZnJvbnRlbmRIb3N0LmdldCgpKTsKK30KKwordm9pZCBJbnNwZWN0b3JGcm9u
dGVuZENsaWVudExvY2FsOjpmcm9udGVuZExvYWRlZCgpCit7CisgICAgLy8gTWFrZSBzdXJlIG91
ciB3aW5kb3cgaXMgdmlzaWJsZSBub3cgdGhhdCB0aGUgcGFnZSBsb2FkZWQKKyAgICBicmluZ1Rv
RnJvbnQoKTsKKworICAgIC8vIENyZWF0ZSBJbnNwZWN0b3JGcm9udGVuZCBhbmQgc2V0IGl0IHRv
IEluc3BlY3RvckNvbnRyb2xsZXIuCisgICAgQVNTRVJUKG1fZnJvbnRlbmRTY3JpcHRTdGF0ZSk7
CisgICAgU2NyaXB0T2JqZWN0IHdlYkluc3BlY3Rvck9iajsKKyAgICBpZiAoIVNjcmlwdEdsb2Jh
bE9iamVjdDo6Z2V0KG1fZnJvbnRlbmRTY3JpcHRTdGF0ZSwgIldlYkluc3BlY3RvciIsIHdlYklu
c3BlY3Rvck9iaikpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5zZXRGcm9udGVuZChuZXcg
SW5zcGVjdG9yRnJvbnRlbmQod2ViSW5zcGVjdG9yT2JqKSk7Cit9CisKK2Jvb2wgSW5zcGVjdG9y
RnJvbnRlbmRDbGllbnRMb2NhbDo6Y2FuQXR0YWNoV2luZG93KCkKK3sKKyAgICB1bnNpZ25lZCBp
bnNwZWN0ZWRQYWdlSGVpZ2h0ID0gbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0ZWRQYWdl
KCktPm1haW5GcmFtZSgpLT52aWV3KCktPnZpc2libGVIZWlnaHQoKTsKKworICAgIC8vIERvbid0
IGFsbG93IHRoZSBhdHRhY2ggaWYgdGhlIHdpbmRvdyB3b3VsZCBiZSB0b28gc21hbGwgdG8gYWNj
b21tb2RhdGUgdGhlIG1pbmltdW0gaW5zcGVjdG9yIGhlaWdodC4KKyAgICByZXR1cm4gbWluaW11
bUF0dGFjaGVkSGVpZ2h0IDw9IGluc3BlY3RlZFBhZ2VIZWlnaHQgKiBtYXhpbXVtQXR0YWNoZWRI
ZWlnaHRSYXRpbzsKK30KKwordm9pZCBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjpjaGFu
Z2VBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpCit7CisgICAgdW5zaWduZWQg
dG90YWxIZWlnaHQgPSBtX2Zyb250ZW5kUGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+dmlzaWJs
ZUhlaWdodCgpICsgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0ZWRQYWdlKCktPm1haW5G
cmFtZSgpLT52aWV3KCktPnZpc2libGVIZWlnaHQoKTsKKyAgICB1bnNpZ25lZCBhdHRhY2hlZEhl
aWdodCA9IGNvbnN0cmFpbmVkQXR0YWNoZWRXaW5kb3dIZWlnaHQoaGVpZ2h0LCB0b3RhbEhlaWdo
dCk7CisgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5zZXRTZXR0aW5nKGluc3BlY3RvckF0dGFj
aGVkSGVpZ2h0TmFtZSwgU3RyaW5nOjpudW1iZXIoYXR0YWNoZWRIZWlnaHQpKTsKKyAgICBzZXRB
dHRhY2hlZFdpbmRvd0hlaWdodChhdHRhY2hlZEhlaWdodCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9y
RnJvbnRlbmRDbGllbnRMb2NhbDo6bW92ZVdpbmRvd0J5KGZsb2F0IHgsIGZsb2F0IHkpCit7Cisg
ICAgRmxvYXRSZWN0IGZyYW1lUmVjdCA9IG1fZnJvbnRlbmRQYWdlLT5jaHJvbWUoKS0+d2luZG93
UmVjdCgpOworICAgIGZyYW1lUmVjdC5tb3ZlKHgsIHkpOworICAgIG1fZnJvbnRlbmRQYWdlLT5j
aHJvbWUoKS0+c2V0V2luZG93UmVjdChmcmFtZVJlY3QpOworfQorCit2b2lkIEluc3BlY3RvckZy
b250ZW5kQ2xpZW50TG9jYWw6OnNob3dDb250ZXh0TWVudShFdmVudCogZXZlbnQsIGNvbnN0IFZl
Y3RvcjxDb250ZXh0TWVudUl0ZW0qPiYgaXRlbXMpCit7CisgICAgU2NyaXB0T2JqZWN0IHdlYklu
c3BlY3Rvck9iajsKKyAgICBpZiAoIVNjcmlwdEdsb2JhbE9iamVjdDo6Z2V0KG1fZnJvbnRlbmRT
Y3JpcHRTdGF0ZSwgIldlYkluc3BlY3RvciIsIHdlYkluc3BlY3Rvck9iaikpIHsKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAg
UmVmUHRyPEZyb250ZW5kTWVudVByb3ZpZGVyPiBtZW51UHJvdmlkZXIgPSBGcm9udGVuZE1lbnVQ
cm92aWRlcjo6Y3JlYXRlKHRoaXMsIHdlYkluc3BlY3Rvck9iaiwgaXRlbXMpOworICAgIENvbnRl
eHRNZW51Q29udHJvbGxlciogbWVudUNvbnRyb2xsZXIgPSBtX2Zyb250ZW5kUGFnZS0+Y29udGV4
dE1lbnVDb250cm9sbGVyKCk7CisgICAgbWVudUNvbnRyb2xsZXItPnNob3dDb250ZXh0TWVudShl
dmVudCwgbWVudVByb3ZpZGVyKTsKKyAgICBtX21lbnVQcm92aWRlciA9IG1lbnVQcm92aWRlci5n
ZXQoKTsKK30KKwordm9pZCBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjpzZXRBdHRhY2hl
ZFdpbmRvdyhib29sIGF0dGFjaGVkKQoreworICAgIFNjcmlwdE9iamVjdCB3ZWJJbnNwZWN0b3JP
Ymo7CisgICAgaWYgKCFTY3JpcHRHbG9iYWxPYmplY3Q6OmdldChtX2Zyb250ZW5kU2NyaXB0U3Rh
dGUsICJXZWJJbnNwZWN0b3IiLCB3ZWJJbnNwZWN0b3JPYmopKSB7CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFNjcmlwdEZ1bmN0aW9u
Q2FsbCBmdW5jdGlvbih3ZWJJbnNwZWN0b3JPYmosICJkaXNwYXRjaCIpOyAKKyAgICBmdW5jdGlv
bi5hcHBlbmRBcmd1bWVudCgic2V0QXR0YWNoZWRXaW5kb3ciKTsKKyAgICBmdW5jdGlvbi5hcHBl
bmRBcmd1bWVudChhdHRhY2hlZCk7CisgICAgZnVuY3Rpb24uY2FsbCgpOworfQorCit2b2lkIElu
c3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OnJlc3RvcmVBdHRhY2hlZFdpbmRvd0hlaWdodCgp
Cit7CisgICAgdW5zaWduZWQgaW5zcGVjdGVkUGFnZUhlaWdodCA9IG1faW5zcGVjdG9yQ29udHJv
bGxlci0+aW5zcGVjdGVkUGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpLT52aXNpYmxlSGVpZ2h0
KCk7CisgICAgU3RyaW5nIGF0dGFjaGVkSGVpZ2h0ID0gbV9pbnNwZWN0b3JDb250cm9sbGVyLT5z
ZXR0aW5nKGluc3BlY3RvckF0dGFjaGVkSGVpZ2h0TmFtZSk7CisgICAgYm9vbCBzdWNjZXNzID0g
dHJ1ZTsKKyAgICBpbnQgaGVpZ2h0ID0gYXR0YWNoZWRIZWlnaHQudG9JbnQoJnN1Y2Nlc3MpOwor
ICAgIHVuc2lnbmVkIHByZWZlcnJlZEhlaWdodCA9IHN1Y2Nlc3MgPyBoZWlnaHQgOiBkZWZhdWx0
QXR0YWNoZWRIZWlnaHQ7CisgICAgCisgICAgLy8gVGhpcyBjYWxsIG1pZ2h0IG5vdCBnbyB0aHJv
dWdoIChpZiB0aGUgd2luZG93IHN0YXJ0cyBvdXQgZGV0YWNoZWQpLCBidXQgaWYgdGhlIHdpbmRv
dyBpcyBpbml0aWFsbHkgY3JlYXRlZCBhdHRhY2hlZCwKKyAgICAvLyBJbnNwZWN0b3JDb250cm9s
bGVyOjphdHRhY2hXaW5kb3cgaXMgbmV2ZXIgY2FsbGVkLCBzbyB3ZSBuZWVkIHRvIG1ha2Ugc3Vy
ZSB0byBzZXQgdGhlIGF0dGFjaGVkV2luZG93SGVpZ2h0LgorICAgIC8vIEZJWE1FOiBDbGVhbiB1
cCBjb2RlIHNvIHdlIG9ubHkgaGF2ZSB0byBjYWxsIHNldEF0dGFjaGVkV2luZG93SGVpZ2h0IGlu
IEluc3BlY3RvckNvbnRyb2xsZXI6OmF0dGFjaFdpbmRvdworICAgIHNldEF0dGFjaGVkV2luZG93
SGVpZ2h0KGNvbnN0cmFpbmVkQXR0YWNoZWRXaW5kb3dIZWlnaHQocHJlZmVycmVkSGVpZ2h0LCBp
bnNwZWN0ZWRQYWdlSGVpZ2h0KSk7Cit9CisKK3Vuc2lnbmVkIEluc3BlY3RvckZyb250ZW5kQ2xp
ZW50TG9jYWw6OmNvbnN0cmFpbmVkQXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgcHJlZmVy
cmVkSGVpZ2h0LCB1bnNpZ25lZCB0b3RhbFdpbmRvd0hlaWdodCkKK3sKKyAgICB1c2luZyBuYW1l
c3BhY2Ugc3RkOworICAgIHJldHVybiByb3VuZGYobWF4KG1pbmltdW1BdHRhY2hlZEhlaWdodCwg
bWluPGZsb2F0PihwcmVmZXJyZWRIZWlnaHQsIHRvdGFsV2luZG93SGVpZ2h0ICogbWF4aW11bUF0
dGFjaGVkSGVpZ2h0UmF0aW8pKSk7Cit9CisgICAgCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRD
bGllbnRMb2NhbC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRM
b2NhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxOGM0NzkKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExv
Y2FsLmgKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2Nh
bF9oCisjZGVmaW5lIEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWxfaAorCisjaW5jbHVkZSAi
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaCIKKyNpbmNsdWRlICJTY3JpcHRTdGF0ZS5oIgorI2lu
Y2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IEZyb250ZW5kTWVudVByb3ZpZGVyOworY2xhc3MgSW5zcGVjdG9yQ29udHJvbGxlcjsKK2NsYXNz
IEluc3BlY3RvckZyb250ZW5kSG9zdDsKK2NsYXNzIFBhZ2U7CisKK2NsYXNzIEluc3BlY3RvckZy
b250ZW5kQ2xpZW50TG9jYWwgOiBwdWJsaWMgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQsIHB1Ymxp
YyBOb25jb3B5YWJsZSB7CitwdWJsaWM6CisgICAgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2Nh
bChJbnNwZWN0b3JDb250cm9sbGVyKiwgUGFnZSopOworICAgIHZpcnR1YWwgfkluc3BlY3RvckZy
b250ZW5kQ2xpZW50TG9jYWwoKTsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgd2luZG93T2JqZWN0
Q2xlYXJlZCgpOworICAgIHZpcnR1YWwgdm9pZCBmcm9udGVuZExvYWRlZCgpOworCisgICAgdmly
dHVhbCB2b2lkIG1vdmVXaW5kb3dCeShmbG9hdCB4LCBmbG9hdCB5KTsKKworICAgIHZpcnR1YWwg
Ym9vbCBjYW5BdHRhY2hXaW5kb3coKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2hhbmdlQXR0YWNoZWRX
aW5kb3dIZWlnaHQodW5zaWduZWQpOworCisgICAgdmlydHVhbCB2b2lkIHNob3dDb250ZXh0TWVu
dShFdmVudCosIGNvbnN0IFZlY3RvcjxDb250ZXh0TWVudUl0ZW0qPiYpOworICAgIAorcHJvdGVj
dGVkOgorICAgIHZpcnR1YWwgdm9pZCBzZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCkg
PSAwOworCisgICAgdm9pZCBzZXRBdHRhY2hlZFdpbmRvdyhib29sKTsKKyAgICB2b2lkIHJlc3Rv
cmVBdHRhY2hlZFdpbmRvd0hlaWdodCgpOworCitwcml2YXRlOgorICAgIHN0YXRpYyB1bnNpZ25l
ZCBjb25zdHJhaW5lZEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIHByZWZlcnJlZEhlaWdo
dCwgdW5zaWduZWQgdG90YWxXaW5kb3dIZWlnaHQpOworCisgICAgZnJpZW5kIGNsYXNzIEZyb250
ZW5kTWVudVByb3ZpZGVyOworICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIG1faW5zcGVjdG9yQ29u
dHJvbGxlcjsKKyAgICBQYWdlKiBtX2Zyb250ZW5kUGFnZTsKKyAgICBTY3JpcHRTdGF0ZSogbV9m
cm9udGVuZFNjcmlwdFN0YXRlOworICAgIC8vIFRPRE8oeXVyeXMpOiB0aGlzIHJlZiBzaG91bGRu
J3QgYmUgbmVlZGVkLgorICAgIFJlZlB0cjxJbnNwZWN0b3JGcm9udGVuZEhvc3Q+IG1fZnJvbnRl
bmRIb3N0OworICAgIEZyb250ZW5kTWVudVByb3ZpZGVyKiBtX21lbnVQcm92aWRlcjsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRnJvbnRlbmRIb3N0LmNwcAppbmRleCBjMWExNzYxLi42ZDRjMjE1IDEwMDY0NAotLS0g
YS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCisrKyBiL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAKQEAgLTQxLDggKzQxLDcgQEAK
ICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNp
bmNsdWRlICJIVE1MRnJhbWVPd25lckVsZW1lbnQuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JDbGll
bnQuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZC5oIgorI2luY2x1ZGUgIkluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yUmVzb3VyY2UuaCIKICNpbmNs
dWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFzdGVib2FyZC5oIgpAQCAtNTQsNjUgKzUzLDY5IEBA
IHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSW5zcGVjdG9y
RnJvbnRlbmRIb3N0OjpJbnNwZWN0b3JGcm9udGVuZEhvc3QoSW5zcGVjdG9yQ29udHJvbGxlciog
aW5zcGVjdG9yQ29udHJvbGxlciwgSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQpCi0gICAgOiBtX2lu
c3BlY3RvckNvbnRyb2xsZXIoaW5zcGVjdG9yQ29udHJvbGxlcikKLSAgICAsIG1fY2xpZW50KGNs
aWVudCkKK0luc3BlY3RvckZyb250ZW5kSG9zdDo6SW5zcGVjdG9yRnJvbnRlbmRIb3N0KEluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50KiBjbGllbnQpCisgICAgOiBtX2NsaWVudChjbGllbnQpCiB7CiB9
CiAKIEluc3BlY3RvckZyb250ZW5kSG9zdDo6fkluc3BlY3RvckZyb250ZW5kSG9zdCgpCiB7Ci0g
ICAgaWYgKG1fbWVudVByb3ZpZGVyKQotICAgICAgICBtX21lbnVQcm92aWRlci0+ZGlzY29ubmVj
dCgpOworICAgIEFTU0VSVCghbV9jbGllbnQpOwogfQogCiB2b2lkIEluc3BlY3RvckZyb250ZW5k
SG9zdDo6bG9hZGVkKCkKIHsKLSAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyKQotICAgICAg
ICBtX2luc3BlY3RvckNvbnRyb2xsZXItPnNjcmlwdE9iamVjdFJlYWR5KCk7CisgICAgaWYgKG1f
Y2xpZW50KQorICAgICAgICBtX2NsaWVudC0+ZnJvbnRlbmRMb2FkZWQoKTsKIH0KIAogdm9pZCBJ
bnNwZWN0b3JGcm9udGVuZEhvc3Q6OmF0dGFjaCgpCiB7Ci0gICAgaWYgKG1faW5zcGVjdG9yQ29u
dHJvbGxlcikKLSAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5hdHRhY2hXaW5kb3coKTsK
KyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5hdHRhY2hXaW5kb3coKTsKIH0K
IAogdm9pZCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OmRldGFjaCgpCiB7Ci0gICAgaWYgKG1faW5z
cGVjdG9yQ29udHJvbGxlcikKLSAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kZXRhY2hX
aW5kb3coKTsKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5kZXRhY2hXaW5k
b3coKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OmNsb3NlV2luZG93KCkKIHsK
LSAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyKQotICAgICAgICBtX2luc3BlY3RvckNvbnRy
b2xsZXItPmNsb3NlV2luZG93KCk7CisgICAgaWYgKG1fY2xpZW50KSB7CisgICAgICAgIG1fY2xp
ZW50LT5jbG9zZVdpbmRvdygpOworICAgICAgICBtX2NsaWVudCA9IDA7IC8vIERpc2Nvbm5lY3Qg
ZnJvbSBjbGllbnQuCisgICAgfQorfQorCit2b2lkIEluc3BlY3RvckZyb250ZW5kSG9zdDo6YnJp
bmdUb0Zyb250KCkKK3sKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5icmlu
Z1RvRnJvbnQoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OndpbmRvd1VubG9h
ZGluZygpCit2b2lkIEluc3BlY3RvckZyb250ZW5kSG9zdDo6aW5zcGVjdGVkVVJMQ2hhbmdlZChj
b25zdCBTdHJpbmcmIG5ld1VSTCkKIHsKLSAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyKQot
ICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmNsb3NlKCk7CisgICAgaWYgKG1fY2xpZW50
KQorICAgICAgICBtX2NsaWVudC0+aW5zcGVjdGVkVVJMQ2hhbmdlZChuZXdVUkwpOwogfQogCiBi
b29sIEluc3BlY3RvckZyb250ZW5kSG9zdDo6Y2FuQXR0YWNoV2luZG93KCkgY29uc3QKIHsKLSAg
ICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyKQotICAgICAgICByZXR1cm4gbV9pbnNwZWN0b3JD
b250cm9sbGVyLT5jYW5BdHRhY2hXaW5kb3coKTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0
dXJuIG1fY2xpZW50ICYmIG1fY2xpZW50LT5jYW5BdHRhY2hXaW5kb3coKTsKIH0KIAogdm9pZCBJ
bnNwZWN0b3JGcm9udGVuZEhvc3Q6OnNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhl
aWdodCkKIHsKLSAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyKQotICAgICAgICBtX2luc3Bl
Y3RvckNvbnRyb2xsZXItPnNldEF0dGFjaGVkV2luZG93SGVpZ2h0KGhlaWdodCk7CisgICAgaWYg
KG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+Y2hhbmdlQXR0YWNoZWRXaW5kb3dIZWlnaHQo
aGVpZ2h0KTsKIH0KIAogdm9pZCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6Om1vdmVXaW5kb3dCeShm
bG9hdCB4LCBmbG9hdCB5KSBjb25zdAogewotICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIp
Ci0gICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+bW92ZVdpbmRvd0J5KHgsIHkpOworICAg
IGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPm1vdmVXaW5kb3dCeSh4LCB5KTsKIH0K
IAogU3RyaW5nIEluc3BlY3RvckZyb250ZW5kSG9zdDo6bG9jYWxpemVkU3RyaW5nc1VSTCgpCkBA
IC0xNjEsMzAgKzE2NCw4IEBAIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmRIb3N0Ojpjb3B5VGV4dChj
b25zdCBTdHJpbmcmIHRleHQpCiAKIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmRIb3N0OjpzaG93Q29u
dGV4dE1lbnUoRXZlbnQqIGV2ZW50LCBjb25zdCBWZWN0b3I8Q29udGV4dE1lbnVJdGVtKj4mIGl0
ZW1zKQogewotICAgIGlmICghbV9pbnNwZWN0b3JDb250cm9sbGVyKQotICAgICAgICByZXR1cm47
Ci0gICAgaWYgKCFtX2luc3BlY3RvckNvbnRyb2xsZXItPndpbmRvd1Zpc2libGUoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0KLSAgICBtX21lbnVQcm92aWRlciA9IE1lbnVQcm92aWRlcjo6Y3JlYXRl
KHRoaXMsIGl0ZW1zKTsKLSAgICBDb250ZXh0TWVudUNvbnRyb2xsZXIqIG1lbnVDb250cm9sbGVy
ID0gbV9pbnNwZWN0b3JDb250cm9sbGVyLT5tX3BhZ2UtPmNvbnRleHRNZW51Q29udHJvbGxlcigp
OwotICAgIG1lbnVDb250cm9sbGVyLT5zaG93Q29udGV4dE1lbnUoZXZlbnQsIG1fbWVudVByb3Zp
ZGVyKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OmNvbnRleHRNZW51SXRlbVNl
bGVjdGVkKENvbnRleHRNZW51SXRlbSogaXRlbSkKLXsKLSAgICBpZiAobV9pbnNwZWN0b3JDb250
cm9sbGVyICYmIG1faW5zcGVjdG9yQ29udHJvbGxlci0+d2luZG93VmlzaWJsZSgpKSB7Ci0gICAg
ICAgIGludCBpdGVtTnVtYmVyID0gaXRlbS0+YWN0aW9uKCkgLSBDb250ZXh0TWVudUl0ZW1CYXNl
Q3VzdG9tVGFnOwotICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPm1fZnJvbnRlbmQtPmNv
bnRleHRNZW51SXRlbVNlbGVjdGVkKGl0ZW1OdW1iZXIpOwotICAgIH0KLX0KLQotdm9pZCBJbnNw
ZWN0b3JGcm9udGVuZEhvc3Q6OmNvbnRleHRNZW51Q2xlYXJlZCgpCi17Ci0gICAgbV9tZW51UHJv
dmlkZXIgPSAwOwotICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIgJiYgbV9pbnNwZWN0b3JD
b250cm9sbGVyLT53aW5kb3dWaXNpYmxlKCkpCi0gICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxl
ci0+bV9mcm9udGVuZC0+Y29udGV4dE1lbnVDbGVhcmVkKCk7CisgICAgaWYgKG1fY2xpZW50KQor
ICAgICAgICBtX2NsaWVudC0+c2hvd0NvbnRleHRNZW51KGV2ZW50LCBpdGVtcyk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckZyb250ZW5kSG9zdC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRI
b3N0LmgKaW5kZXggY2JlNmE5Yi4uNmUxNjI5NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRnJvbnRlbmRIb3N0LmgKQEAgLTQzLDI3ICs0MywyNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiBjbGFzcyBDb250ZXh0TWVudUl0ZW07CiBjbGFzcyBFdmVudDsKIGNsYXNzIEluc3BlY3RvckNs
aWVudDsKK2NsYXNzIEluc3BlY3RvckZyb250ZW5kQ2xpZW50OwogY2xhc3MgTm9kZTsKIAogY2xh
c3MgSW5zcGVjdG9yRnJvbnRlbmRIb3N0IDogcHVibGljIFJlZkNvdW50ZWQ8SW5zcGVjdG9yRnJv
bnRlbmRIb3N0PgogewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvckZy
b250ZW5kSG9zdD4gY3JlYXRlKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xs
ZXIsIEluc3BlY3RvckNsaWVudCogY2xpZW50KQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3Bl
Y3RvckZyb250ZW5kSG9zdD4gY3JlYXRlKEluc3BlY3RvckZyb250ZW5kQ2xpZW50KiBjbGllbnQp
CiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvckZyb250ZW5kSG9z
dChpbnNwZWN0b3JDb250cm9sbGVyLCBjbGllbnQpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBJbnNwZWN0b3JGcm9udGVuZEhvc3QoY2xpZW50KSk7CiAgICAgfQogCiAgICAgfkluc3Bl
Y3RvckZyb250ZW5kSG9zdCgpOwogCi0gICAgSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9y
Q29udHJvbGxlcigpIHsgcmV0dXJuIG1faW5zcGVjdG9yQ29udHJvbGxlcjsgfQotCi0gICAgdm9p
ZCBkaXNjb25uZWN0Q29udHJvbGxlcigpIHsgbV9pbnNwZWN0b3JDb250cm9sbGVyID0gMDsgfQot
CiAgICAgdm9pZCBsb2FkZWQoKTsKICAgICB2b2lkIGF0dGFjaCgpOwogICAgIHZvaWQgZGV0YWNo
KCk7CiAgICAgdm9pZCBjbG9zZVdpbmRvdygpOwotICAgIHZvaWQgd2luZG93VW5sb2FkaW5nKCk7
CisgICAgdm9pZCBicmluZ1RvRnJvbnQoKTsKKyAgICB2b2lkIGluc3BlY3RlZFVSTENoYW5nZWQo
Y29uc3QgU3RyaW5nJik7CiAKICAgICBib29sIGNhbkF0dGFjaFdpbmRvdygpIGNvbnN0OwogICAg
IHZvaWQgc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KTsKQEAgLTgwLDU5
ICs3OCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNob3dDb250ZXh0TWVudShFdmVudCosIGNvbnN0
IFZlY3RvcjxDb250ZXh0TWVudUl0ZW0qPiYgaXRlbXMpOwogCiBwcml2YXRlOgotICAgIGNsYXNz
IE1lbnVQcm92aWRlciA6IHB1YmxpYyBDb250ZXh0TWVudVByb3ZpZGVyIHsKLSAgICBwdWJsaWM6
Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lbnVQcm92aWRlcj4gY3JlYXRlKEluc3BlY3Rv
ckZyb250ZW5kSG9zdCogZnJvbnRlbmRIb3N0LCBjb25zdCBWZWN0b3I8Q29udGV4dE1lbnVJdGVt
Kj4mIGl0ZW1zKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1l
bnVQcm92aWRlcihmcm9udGVuZEhvc3QsIGl0ZW1zKSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2
aXJ0dWFsIH5NZW51UHJvdmlkZXIoKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0TWVu
dUNsZWFyZWQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgZGlzY29ubmVjdCgpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIG1fZnJvbnRlbmRIb3N0ID0gMDsKLSAgICAgICAgfQotCi0gICAg
ICAgIHZpcnR1YWwgdm9pZCBwb3B1bGF0ZUNvbnRleHRNZW51KENvbnRleHRNZW51KiBtZW51KQot
ICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1faXRlbXMuc2l6
ZSgpOyArK2kpCi0gICAgICAgICAgICAgICAgbWVudS0+YXBwZW5kSXRlbSgqbV9pdGVtc1tpXSk7
Ci0gICAgICAgIH0KLQotICAgICAgICB2aXJ0dWFsIHZvaWQgY29udGV4dE1lbnVJdGVtU2VsZWN0
ZWQoQ29udGV4dE1lbnVJdGVtKiBpdGVtKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobV9m
cm9udGVuZEhvc3QpCi0gICAgICAgICAgICAgICAgbV9mcm9udGVuZEhvc3QtPmNvbnRleHRNZW51
SXRlbVNlbGVjdGVkKGl0ZW0pOwotICAgICAgICB9Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIGNv
bnRleHRNZW51Q2xlYXJlZCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtX2Zyb250ZW5k
SG9zdCkKLSAgICAgICAgICAgICAgICBtX2Zyb250ZW5kSG9zdC0+Y29udGV4dE1lbnVDbGVhcmVk
KCk7Ci0gICAgICAgICAgICBkZWxldGVBbGxWYWx1ZXMobV9pdGVtcyk7Ci0gICAgICAgICAgICBt
X2l0ZW1zLmNsZWFyKCk7Ci0gICAgICAgIH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIE1lbnVQ
cm92aWRlcihJbnNwZWN0b3JGcm9udGVuZEhvc3QqIGZyb250ZW5kSG9zdCwgIGNvbnN0IFZlY3Rv
cjxDb250ZXh0TWVudUl0ZW0qPiYgaXRlbXMpCi0gICAgICAgICAgICA6IG1fZnJvbnRlbmRIb3N0
KGZyb250ZW5kSG9zdCkKLSAgICAgICAgICAgICwgbV9pdGVtcyhpdGVtcykgeyB9Ci0gICAgICAg
IEluc3BlY3RvckZyb250ZW5kSG9zdCogbV9mcm9udGVuZEhvc3Q7Ci0gICAgICAgIFZlY3RvcjxD
b250ZXh0TWVudUl0ZW0qPiBtX2l0ZW1zOwotICAgIH07Ci0KLSAgICBJbnNwZWN0b3JGcm9udGVu
ZEhvc3QoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciwgSW5zcGVjdG9y
Q2xpZW50KiBjbGllbnQpOwotCi0gICAgdm9pZCBjb250ZXh0TWVudUl0ZW1TZWxlY3RlZChDb250
ZXh0TWVudUl0ZW0qKTsKLSAgICB2b2lkIGNvbnRleHRNZW51Q2xlYXJlZCgpOwotCi0gICAgSW5z
cGVjdG9yQ29udHJvbGxlciogbV9pbnNwZWN0b3JDb250cm9sbGVyOwotICAgIEluc3BlY3RvckNs
aWVudCogbV9jbGllbnQ7Ci0gICAgUmVmUHRyPE1lbnVQcm92aWRlcj4gbV9tZW51UHJvdmlkZXI7
CisgICAgSW5zcGVjdG9yRnJvbnRlbmRIb3N0KEluc3BlY3RvckZyb250ZW5kQ2xpZW50KiBjbGll
bnQpOworCisgICAgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQqIG1fY2xpZW50OwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRnJvbnRlbmRIb3N0LmlkbCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5k
SG9zdC5pZGwKaW5kZXggMTUwZTlmYy4uMGFlZjVjNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmlkbAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JGcm9udGVuZEhvc3QuaWRsCkBAIC0zNiw3ICszNiw4IEBAIG1vZHVsZSBjb3JlIHsK
ICAgICAgICAgdm9pZCBhdHRhY2goKTsKICAgICAgICAgdm9pZCBkZXRhY2goKTsKICAgICAgICAg
dm9pZCBjbG9zZVdpbmRvdygpOwotICAgICAgICB2b2lkIHdpbmRvd1VubG9hZGluZygpOworICAg
ICAgICB2b2lkIGJyaW5nVG9Gcm9udCgpOworICAgICAgICB2b2lkIGluc3BlY3RlZFVSTENoYW5n
ZWQoaW4gRE9NU3RyaW5nIG5ld1VSTCk7CiAKICAgICAgICAgYm9vbGVhbiBjYW5BdHRhY2hXaW5k
b3coKTsKICAgICAgICAgdm9pZCBzZXRBdHRhY2hlZFdpbmRvd0hlaWdodChpbiB1bnNpZ25lZCBs
b25nIGhlaWdodCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5z
cGVjdG9yRnJvbnRlbmRIb3N0U3R1Yi5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9J
bnNwZWN0b3JGcm9udGVuZEhvc3RTdHViLmpzCmluZGV4IGVmZjI1MTguLjU0NTYwNjkgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0b3JGcm9udGVuZEhvc3RT
dHViLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0b3JGcm9udGVu
ZEhvc3RTdHViLmpzCkBAIC00OCw2ICs0OCwxMSBAQCBXZWJJbnNwZWN0b3IuSW5zcGVjdG9yRnJv
bnRlbmRIb3N0U3R1Yi5wcm90b3R5cGUgPSB7CiAgICAgICAgIHJldHVybiAidW5rbm93biI7CiAg
ICAgfSwKIAorICAgIGJyaW5nVG9Gcm9udDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhp
cy5fd2luZG93VmlzaWJsZSA9IHRydWU7CisgICAgfSwKKwogICAgIGNsb3NlV2luZG93OiBmdW5j
dGlvbigpCiAgICAgewogICAgICAgICB0aGlzLl93aW5kb3dWaXNpYmxlID0gZmFsc2U7CkBAIC04
Nyw3ICs5Miw3IEBAIFdlYkluc3BlY3Rvci5JbnNwZWN0b3JGcm9udGVuZEhvc3RTdHViLnByb3Rv
dHlwZSA9IHsKICAgICAgICAgcmV0dXJuICIiOwogICAgIH0sCiAKLSAgICB3aW5kb3dVbmxvYWRp
bmc6IGZ1bmN0aW9uKCkKKyAgICBpbnNwZWN0ZWRVUkxDaGFuZ2VkOiBmdW5jdGlvbih1cmwpCiAg
ICAgewogICAgIH0sCiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9p
bnNwZWN0b3IuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCmlu
ZGV4IDU5MTIwY2QuLjZjZDI2MTQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9pbnNwZWN0b3IuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3Bl
Y3Rvci5qcwpAQCAtNDc4LDcgKzQ3OCw2IEBAIFdlYkluc3BlY3Rvci5sb2FkZWQgPSBmdW5jdGlv
bigpCiAKICAgICB0aGlzLmFkZE1haW5FdmVudExpc3RlbmVycyhkb2N1bWVudCk7CiAKLSAgICB3
aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigidW5sb2FkIiwgdGhpcy53aW5kb3dVbmxvYWQuYmluZCh0
aGlzKSwgdHJ1ZSk7CiAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsIHRoaXMu
d2luZG93UmVzaXplLmJpbmQodGhpcyksIHRydWUpOwogCiAgICAgZG9jdW1lbnQuYWRkRXZlbnRM
aXN0ZW5lcigiZm9jdXMiLCB0aGlzLmZvY3VzQ2hhbmdlZC5iaW5kKHRoaXMpLCB0cnVlKTsKQEAg
LTU2MiwxMSArNTYxLDYgQEAgV2ViSW5zcGVjdG9yLmRpc3BhdGNoID0gZnVuY3Rpb24oKSB7CiAg
ICAgc2V0VGltZW91dChkZWxheURpc3BhdGNoLCAwKTsKIH0KIAotV2ViSW5zcGVjdG9yLndpbmRv
d1VubG9hZCA9IGZ1bmN0aW9uKGV2ZW50KQotewotICAgIEluc3BlY3RvckZyb250ZW5kSG9zdC53
aW5kb3dVbmxvYWRpbmcoKTsKLX0KLQogV2ViSW5zcGVjdG9yLndpbmRvd1Jlc2l6ZSA9IGZ1bmN0
aW9uKGV2ZW50KQogewogICAgIGlmICh0aGlzLmN1cnJlbnRQYW5lbCkKQEAgLTYwNCw2ICs1OTgs
OSBAQCBXZWJJbnNwZWN0b3Iuc2V0QXR0YWNoZWRXaW5kb3cgPSBmdW5jdGlvbihhdHRhY2hlZCkK
IAogV2ViSW5zcGVjdG9yLmNsb3NlID0gZnVuY3Rpb24oZXZlbnQpCiB7CisgICAgaWYgKHRoaXMu
X2lzQ2xvc2luZykKKyAgICAgICAgcmV0dXJuOworICAgIHRoaXMuX2lzQ2xvc2luZyA9IHRydWU7
CiAgICAgSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNsb3NlV2luZG93KCk7CiB9CiAKQEAgLTEzMTUs
NiArMTMxMiwxNiBAQCBXZWJJbnNwZWN0b3IucmVzZXQgPSBmdW5jdGlvbigpCiAgICAgdGhpcy5j
b25zb2xlLmNsZWFyTWVzc2FnZXMoKTsKIH0KIAorV2ViSW5zcGVjdG9yLmJyaW5nVG9Gcm9udCA9
IGZ1bmN0aW9uKCkKK3sKKyAgICBJbnNwZWN0b3JGcm9udGVuZEhvc3QuYnJpbmdUb0Zyb250KCk7
Cit9CisKK1dlYkluc3BlY3Rvci5pbnNwZWN0ZWRVUkxDaGFuZ2VkID0gZnVuY3Rpb24odXJsKQor
eworICAgIEluc3BlY3RvckZyb250ZW5kSG9zdC5pbnNwZWN0ZWRVUkxDaGFuZ2VkKHVybCk7Cit9
CisKIFdlYkluc3BlY3Rvci5yZXNvdXJjZVVSTENoYW5nZWQgPSBmdW5jdGlvbihyZXNvdXJjZSwg
b2xkVVJMKQogewogICAgIGRlbGV0ZSB0aGlzLnJlc291cmNlVVJMTWFwW29sZFVSTF07CmRpZmYg
LS1naXQgYS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaCBiL1dlYkNvcmUvbG9hZGVyL0Vt
cHR5Q2xpZW50cy5oCmluZGV4IDZhMmVjZDUuLmQwMjU4OTEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
bG9hZGVyL0VtcHR5Q2xpZW50cy5oCisrKyBiL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5o
CkBAIC00NzIsMjkgKzQ3MiwxNCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+RW1wdHlJbnNwZWN0
b3JDbGllbnQoKSB7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0b3JEZXN0cm95ZWQoKSB7
IH0KLQotICAgIHZpcnR1YWwgUGFnZSogY3JlYXRlUGFnZSgpIHsgcmV0dXJuIDA7IH07Ci0KLSAg
ICB2aXJ0dWFsIFN0cmluZyBsb2NhbGl6ZWRTdHJpbmdzVVJMKCkgeyByZXR1cm4gU3RyaW5nKCk7
IH0KLQotICAgIHZpcnR1YWwgU3RyaW5nIGhpZGRlblBhbmVscygpIHsgcmV0dXJuIFN0cmluZygp
OyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2hvd1dpbmRvdygpIHsgfQotICAgIHZpcnR1YWwgdm9p
ZCBjbG9zZVdpbmRvdygpIHsgfQotCi0gICAgdmlydHVhbCB2b2lkIGF0dGFjaFdpbmRvdygpIHsg
fQotICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hXaW5kb3coKSB7IH0KLQotICAgIHZpcnR1YWwgdm9p
ZCBzZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCkgeyB9CisgICAgCisgICAgdmlydHVh
bCB2b2lkIG9wZW5JbnNwZWN0b3JGcm9udGVuZChJbnNwZWN0b3JDb250cm9sbGVyKikgeyB9CiAK
ICAgICB2aXJ0dWFsIHZvaWQgaGlnaGxpZ2h0KE5vZGUqKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQg
aGlkZUhpZ2hsaWdodCgpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0ZWRVUkxDaGFuZ2Vk
KGNvbnN0IFN0cmluZyYpIHsgfQogCiAgICAgdmlydHVhbCB2b2lkIHBvcHVsYXRlU2V0dGluZyhj
b25zdCBTdHJpbmcmLCBTdHJpbmcqKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc3RvcmVTZXR0aW5n
KGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpIHsgfQotCi0gICAgdmlydHVhbCB2b2lkIGlu
c3BlY3RvcldpbmRvd09iamVjdENsZWFyZWQoKSB7IH0KIH07CiAKIH0KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcCBiL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVy
LmNwcAppbmRleCA1NGM3OTcyLi5lMTBiNThmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2xvYWRlci9G
cmFtZUxvYWRlci5jcHAKKysrIGIvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCkBAIC0z
OTQ0LDggKzM5NDQsNiBAQCB2b2lkIEZyYW1lTG9hZGVyOjpkaXNwYXRjaERpZENsZWFyV2luZG93
T2JqZWN0SW5Xb3JsZChET01XcmFwcGVyV29ybGQqIHdvcmxkKQogICAgIGlmIChQYWdlKiBwYWdl
ID0gbV9mcmFtZS0+cGFnZSgpKSB7CiAgICAgICAgIGlmIChJbnNwZWN0b3JDb250cm9sbGVyKiBp
bnNwZWN0b3IgPSBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCkpCiAgICAgICAgICAgICBpbnNw
ZWN0b3ItPmluc3BlY3RlZFdpbmRvd1NjcmlwdE9iamVjdENsZWFyZWQobV9mcmFtZSk7Ci0gICAg
ICAgIGlmIChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3IgPSBwYWdlLT5wYXJlbnRJbnNw
ZWN0b3JDb250cm9sbGVyKCkpCi0gICAgICAgICAgICBpbnNwZWN0b3ItPndpbmRvd1NjcmlwdE9i
amVjdEF2YWlsYWJsZSgpOwogICAgIH0KICNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
YWdlL1BhZ2UuY3BwIGIvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCmluZGV4IDdkMWU2MjQuLmQ2NmU0
OTcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAorKysgYi9XZWJDb3JlL3BhZ2Uv
UGFnZS5jcHAKQEAgLTEzOCw5ICsxMzgsNiBAQCBQYWdlOjpQYWdlKENocm9tZUNsaWVudCogY2hy
b21lQ2xpZW50LCBDb250ZXh0TWVudUNsaWVudCogY29udGV4dE1lbnVDbGllbnQsIEVkaQogICAg
ICwgbV9hcmVNZW1vcnlDYWNoZUNsaWVudENhbGxzRW5hYmxlZCh0cnVlKQogICAgICwgbV9tZWRp
YVZvbHVtZSgxKQogICAgICwgbV9qYXZhU2NyaXB0VVJMc0FyZUFsbG93ZWQodHJ1ZSkKLSNpZiBF
TkFCTEUoSU5TUEVDVE9SKQotICAgICwgbV9wYXJlbnRJbnNwZWN0b3JDb250cm9sbGVyKDApCi0j
ZW5kaWYKICAgICAsIG1fZGlkTG9hZFVzZXJTdHlsZVNoZWV0KGZhbHNlKQogICAgICwgbV91c2Vy
U3R5bGVTaGVldE1vZGlmaWNhdGlvblRpbWUoMCkKICAgICAsIG1fZ3JvdXAoMCkKQEAgLTE5Niw4
ICsxOTMsNiBAQCBQYWdlOjp+UGFnZSgpCiAKICAgICBtX2VkaXRvckNsaWVudC0+cGFnZURlc3Ry
b3llZCgpOwogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKG1fcGFyZW50SW5zcGVjdG9y
Q29udHJvbGxlcikKLSAgICAgICAgbV9wYXJlbnRJbnNwZWN0b3JDb250cm9sbGVyLT5wYWdlRGVz
dHJveWVkKCk7CiAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0ZWRQYWdlRGVzdHJv
eWVkKCk7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL1BhZ2UuaCBiL1dlYkNv
cmUvcGFnZS9QYWdlLmgKaW5kZXggZjY5ODI4Ny4uOTRlNmRkNSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9wYWdlL1BhZ2UuaAorKysgYi9XZWJDb3JlL3BhZ2UvUGFnZS5oCkBAIC0xNDksMTEgKzE0OSw2
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNlbmRpZgogICAgICAgICBTZXR0aW5ncyogc2V0dGlu
Z3MoKSBjb25zdCB7IHJldHVybiBtX3NldHRpbmdzLmdldCgpOyB9CiAgICAgICAgIFByb2dyZXNz
VHJhY2tlciogcHJvZ3Jlc3MoKSBjb25zdCB7IHJldHVybiBtX3Byb2dyZXNzLmdldCgpOyB9Ci0K
LSNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgICAgICB2b2lkIHNldFBhcmVudEluc3BlY3RvckNv
bnRyb2xsZXIoSW5zcGVjdG9yQ29udHJvbGxlciogY29udHJvbGxlcikgeyBtX3BhcmVudEluc3Bl
Y3RvckNvbnRyb2xsZXIgPSBjb250cm9sbGVyOyB9Ci0gICAgICAgIEluc3BlY3RvckNvbnRyb2xs
ZXIqIHBhcmVudEluc3BlY3RvckNvbnRyb2xsZXIoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudElu
c3BlY3RvckNvbnRyb2xsZXI7IH0KLSNlbmRpZgogICAgICAgICAKICAgICAgICAgdm9pZCBzZXRU
YWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMoYm9vbCBiKSB7IG1fdGFiS2V5Q3ljbGVzVGhyb3Vn
aEVsZW1lbnRzID0gYjsgfQogICAgICAgICBib29sIHRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50
cygpIGNvbnN0IHsgcmV0dXJuIG1fdGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzOyB9CkBAIC0y
ODYsMTAgKzI4MSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBib29sIG1famF2
YVNjcmlwdFVSTHNBcmVBbGxvd2VkOwogCi0jaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICAgICAg
SW5zcGVjdG9yQ29udHJvbGxlciogbV9wYXJlbnRJbnNwZWN0b3JDb250cm9sbGVyOwotI2VuZGlm
Ci0KICAgICAgICAgU3RyaW5nIG1fdXNlclN0eWxlU2hlZXRQYXRoOwogICAgICAgICBtdXRhYmxl
IFN0cmluZyBtX3VzZXJTdHlsZVNoZWV0OwogICAgICAgICBtdXRhYmxlIGJvb2wgbV9kaWRMb2Fk
VXNlclN0eWxlU2hlZXQ7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL0NvbnRleHRNZW51
LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1lbnUuY3BwCmluZGV4IDI4M2FhNTYuLjAw
MjJhNDcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1lbnUuY3BwCisrKyBi
L1dlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1lbnUuY3BwCkBAIC0zNTksNiArMzU5LDkgQEAgdm9p
ZCBDb250ZXh0TWVudTo6cG9wdWxhdGUoKQogICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oU3Bl
ZWNoTWVudUl0ZW0pOwogI2VuZGlmICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgfSBlbHNl
IHsKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorICAgICAgICAgICAgICAgIGlmICghKGZyYW1lLT5w
YWdlKCkgJiYgZnJhbWUtPnBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5oYXNJbnNwZWN0
b3JGcm9udGVuZENsaWVudCgpKSkgeworI2VuZGlmCiAjaWYgUExBVEZPUk0oR1RLKQogICAgICAg
ICAgICAgICAgIGFwcGVuZEl0ZW0oQmFja0l0ZW0pOwogICAgICAgICAgICAgICAgIGFwcGVuZEl0
ZW0oRm9yd2FyZEl0ZW0pOwpAQCAtMzc4LDYgKzM4MSw5IEBAIHZvaWQgQ29udGV4dE1lbnU6OnBv
cHVsYXRlKCkKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGFwcGVu
ZEl0ZW0oUmVsb2FkSXRlbSk7CiAjZW5kaWYKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorICAgICAg
ICAgICAgICAgIH0KKyNlbmRpZgogCiAgICAgICAgICAgICAgICAgaWYgKGZyYW1lLT5wYWdlKCkg
JiYgZnJhbWUgIT0gZnJhbWUtPnBhZ2UoKS0+bWFpbkZyYW1lKCkpCiAgICAgICAgICAgICAgICAg
ICAgIGFwcGVuZEl0ZW0oT3BlbkZyYW1lSXRlbSk7CkBAIC01NTAsNyArNTU2LDYgQEAgdm9pZCBD
b250ZXh0TWVudTo6YWRkSW5zcGVjdEVsZW1lbnRJdGVtKCkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgQ29udGV4dE1lbnVJdGVtIEluc3BlY3RFbGVtZW50SXRlbShBY3Rpb25UeXBlLCBDb250ZXh0
TWVudUl0ZW1UYWdJbnNwZWN0RWxlbWVudCwgY29udGV4dE1lbnVJdGVtVGFnSW5zcGVjdEVsZW1l
bnQoKSk7Ci0gICAgYXBwZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgpKTsKICAgICBhcHBlbmRJdGVt
KEluc3BlY3RFbGVtZW50SXRlbSk7CiB9CiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKZGlm
ZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCmluZGV4IDQ0YTkzZWUuLmYxNjc0OWYgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5
IEBACisyMDEwLTAzLTExICBZdXJ5IFNlbWlraGF0c2t5IDx5dXJ5c0BjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW50cm9kdWNl
IEluc3BlY3RvckZyb250ZW5kQ2xpZW50IHRoYXQgcHJvdmlkZXMgSW5zcGVjdG9yRnJvbnRlbmQg
d2l0aCBhbiBpbnRlcmZhY2UgdG8gdGhlIGVtYmVkZGVyLiBJbnNwZWN0b3JDbGllbnQgbm93IHNl
cnZlcyBhcyBhIGRlbGVnYXRlIGZvciBJbnNwZWN0b3JDb250cm9sbGVyIGFuZCBkb2VzIG5vdCBj
b250YWluIG1ldGhvZHMgZm9yIG1hbmFnaW5nIGluc3BlY3RvciBmcm9udGVuZCB3aW5kb3cuIFRo
YXQgYWxsb3dzIHRvIGNyZWF0ZSByZW1vdGUgSW5zcGVjdG9yRnJvbnRlbmRIb3N0LgorCisgICAg
ICAgIEludHJvZHVjZSBJbnNwZWN0b3JGcm9udGVuZENsaWVudCB0aGF0IHdvdWxkIHByb3ZpZGUg
SW5zcGVjdG9yRnJvbnRlbmQgd2l0aCBhbiBpbnRlcmZhY2UgdG8gdGhlIGVtYmVkZGVyCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNTAzNgorCisgICAg
ICAgICogc3JjL0luc3BlY3RvckNsaWVudEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpJbnNw
ZWN0b3JDbGllbnRJbXBsOjpvcGVuSW5zcGVjdG9yRnJvbnRlbmQpOgorICAgICAgICAqIHNyYy9J
bnNwZWN0b3JDbGllbnRJbXBsLmg6CisgICAgICAgICogc3JjL1dlYkRldlRvb2xzQWdlbnRJbXBs
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudEltcGw6OmF0dGFjaCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjpkaWRDb21taXRQcm92aXNpb25h
bExvYWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6Y3JlYXRlSW5z
cGVjdG9yRnJvbnRlbmRQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJ
bXBsOjpzZXRJbnNwZWN0b3JGcm9udGVuZFByb3h5VG9JbnNwZWN0b3JDb250cm9sbGVyKToKKyAg
ICAgICAgKiBzcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuaDoKKyAgICAgICAgKiBzcmMvV2ViRGV2
VG9vbHNGcm9udGVuZEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0Zyb250
ZW5kSW1wbDo6V2ViRGV2VG9vbHNGcm9udGVuZEltcGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJE
ZXZUb29sc0Zyb250ZW5kSW1wbDo6anNCcmluZ1RvRnJvbnQpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6anNJbnNwZWN0ZWRVUkxDaGFuZ2VkKToKKyAgICAgICAg
KiBzcmMvV2ViRGV2VG9vbHNGcm9udGVuZEltcGwuaDoKKyAgICAgICAgKiBzcmMvanMvSW5qZWN0
RGlzcGF0Y2guanM6CisgICAgICAgIChjbG9zZSk6CisKIDIwMTAtMDMtMTAgIERhcmluIEZpc2hl
ciAgPGRhcmluQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBKZXJlbXkgT3Js
b3cuCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL0luc3BlY3RvckNsaWVudEltcGwu
Y3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9JbnNwZWN0b3JDbGllbnRJbXBsLmNwcAppbmRleCA1
NDU1MGQxLi5mNjllZjcyIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL0luc3BlY3Rv
ckNsaWVudEltcGwuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvSW5zcGVjdG9yQ2xpZW50
SW1wbC5jcHAKQEAgLTYzLDQ2ICs2Myw4IEBAIHZvaWQgSW5zcGVjdG9yQ2xpZW50SW1wbDo6aW5z
cGVjdG9yRGVzdHJveWVkKCkKICAgICAvLyBPdXIgbGlmZXRpbWUgaXMgYm91bmQgdG8gdGhlIFdl
YlZpZXdJbXBsLgogfQogCi1QYWdlKiBJbnNwZWN0b3JDbGllbnRJbXBsOjpjcmVhdGVQYWdlKCkK
K3ZvaWQgSW5zcGVjdG9yQ2xpZW50SW1wbDo6b3Blbkluc3BlY3RvckZyb250ZW5kKEluc3BlY3Rv
ckNvbnRyb2xsZXIqKQogewotICAgIC8vIFRoaXMgbWV0aG9kIHNob3VsZCBuZXZlciBiZSBjYWxs
ZWQgaW4gQ2hyb21lIGFzIGluc3BlY3RvciBmcm9udC1lbmQgbGl2ZXMKLSAgICAvLyBpbiBhIHNl
cGFyYXRlIHByb2Nlc3MuCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIDA7
Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ2xpZW50SW1wbDo6c2hvd1dpbmRvdygpCi17Ci0gICAgQVNT
RVJUKG1faW5zcGVjdGVkV2ViVmlldy0+ZGV2VG9vbHNBZ2VudFByaXZhdGUoKSk7Ci0gICAgbV9p
bnNwZWN0ZWRXZWJWaWV3LT5wYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0V2luZG93
VmlzaWJsZSh0cnVlKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDbGllbnRJbXBsOjpjbG9zZVdpbmRv
dygpCi17Ci0gICAgaWYgKG1faW5zcGVjdGVkV2ViVmlldy0+cGFnZSgpKQotICAgICAgICBtX2lu
c3BlY3RlZFdlYlZpZXctPnBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5zZXRXaW5kb3dW
aXNpYmxlKGZhbHNlKTsKLX0KLQotYm9vbCBJbnNwZWN0b3JDbGllbnRJbXBsOjp3aW5kb3dWaXNp
YmxlKCkKLXsKLSAgICBBU1NFUlQobV9pbnNwZWN0ZWRXZWJWaWV3LT5kZXZUb29sc0FnZW50UHJp
dmF0ZSgpKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ2xpZW50SW1w
bDo6YXR0YWNoV2luZG93KCkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMKLX0KLQot
dm9pZCBJbnNwZWN0b3JDbGllbnRJbXBsOjpkZXRhY2hXaW5kb3coKQotewotICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQgdGhpcwotfQotCi12b2lkIEluc3BlY3RvckNsaWVudEltcGw6OnNldEF0dGFj
aGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGludCBoZWlnaHQpCi17Ci0gICAgLy8gRklYTUU6IElt
cGxlbWVudCB0aGlzCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAogc3RhdGljIHZvaWQgaW52
YWxpZGF0ZU5vZGVCb3VuZGluZ1JlY3QoV2ViVmlld0ltcGwqIHdlYlZpZXcpCkBAIC0xMzAsMjMg
KzkyLDYgQEAgdm9pZCBJbnNwZWN0b3JDbGllbnRJbXBsOjpoaWRlSGlnaGxpZ2h0KCkKICAgICBp
bnZhbGlkYXRlTm9kZUJvdW5kaW5nUmVjdChtX2luc3BlY3RlZFdlYlZpZXcpOwogfQogCi12b2lk
IEluc3BlY3RvckNsaWVudEltcGw6Omluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJiBu
ZXdVUkwpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzCi19Ci0KLVN0cmluZyBJbnNw
ZWN0b3JDbGllbnRJbXBsOjpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotU3RyaW5nIEluc3BlY3RvckNsaWVu
dEltcGw6OmhpZGRlblBhbmVscygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1
cm4gIiI7Ci19Ci0KIHZvaWQgSW5zcGVjdG9yQ2xpZW50SW1wbDo6cG9wdWxhdGVTZXR0aW5nKGNv
bnN0IFN0cmluZyYga2V5LCBTdHJpbmcqIHZhbHVlKQogewogICAgIGxvYWRTZXR0aW5ncygpOwpA
QCAtMTYxLDExICsxMDYsNiBAQCB2b2lkIEluc3BlY3RvckNsaWVudEltcGw6OnN0b3JlU2V0dGlu
Zyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICBzYXZlU2V0dGlu
Z3MoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDbGllbnRJbXBsOjppbnNwZWN0b3JXaW5kb3dPYmpl
Y3RDbGVhcmVkKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCiB2b2lkIEluc3BlY3Rv
ckNsaWVudEltcGw6OmxvYWRTZXR0aW5ncygpCiB7CiAgICAgaWYgKG1fc2V0dGluZ3MpCmRpZmYg
LS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL0luc3BlY3RvckNsaWVudEltcGwuaCBiL1dlYktp
dC9jaHJvbWl1bS9zcmMvSW5zcGVjdG9yQ2xpZW50SW1wbC5oCmluZGV4IDZmN2Y4YjEuLmNjYmNl
ZjcgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvSW5zcGVjdG9yQ2xpZW50SW1wbC5o
CisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvSW5zcGVjdG9yQ2xpZW50SW1wbC5oCkBAIC00NSwy
NSArNDUsMTUgQEAgcHVibGljOgogCiAgICAgLy8gSW5zcGVjdG9yQ2xpZW50IG1ldGhvZHM6CiAg
ICAgdmlydHVhbCB2b2lkIGluc3BlY3RvckRlc3Ryb3llZCgpOwotICAgIHZpcnR1YWwgV2ViQ29y
ZTo6UGFnZSogY3JlYXRlUGFnZSgpOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6U3RyaW5nIGxvY2Fs
aXplZFN0cmluZ3NVUkwoKTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlN0cmluZyBoaWRkZW5QYW5l
bHMoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2hvd1dpbmRvdygpOwotICAgIHZpcnR1YWwgdm9pZCBj
bG9zZVdpbmRvdygpOwotICAgIHZpcnR1YWwgYm9vbCB3aW5kb3dWaXNpYmxlKCk7Ci0gICAgdmly
dHVhbCB2b2lkIGF0dGFjaFdpbmRvdygpOwotICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hXaW5kb3co
KTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVp
Z2h0KTsKKyAgICB2aXJ0dWFsIHZvaWQgb3Blbkluc3BlY3RvckZyb250ZW5kKFdlYkNvcmU6Oklu
c3BlY3RvckNvbnRyb2xsZXIqKTsKICAgICB2aXJ0dWFsIHZvaWQgaGlnaGxpZ2h0KFdlYkNvcmU6
Ok5vZGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgaGlkZUhpZ2hsaWdodCgpOwotICAgIHZpcnR1YWwg
dm9pZCBpbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgbmV3VVJMKTsK
ICAgICB2aXJ0dWFsIHZvaWQgcG9wdWxhdGVTZXR0aW5nKAogICAgICAgICBjb25zdCBXZWJDb3Jl
OjpTdHJpbmcmIGtleSwKICAgICAgICAgV2ViQ29yZTo6U3RyaW5nKiB2YWx1ZSk7CiAgICAgdmly
dHVhbCB2b2lkIHN0b3JlU2V0dGluZygKICAgICAgICAgY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBr
ZXksCiAgICAgICAgIGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgdmFsdWUpOwotICAgIHZpcnR1YWwg
dm9pZCBpbnNwZWN0b3JXaW5kb3dPYmplY3RDbGVhcmVkKCk7CiAKIHByaXZhdGU6CiAgICAgdm9p
ZCBsb2FkU2V0dGluZ3MoKTsKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2
VG9vbHNBZ2VudEltcGwuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50
SW1wbC5jcHAKaW5kZXggYWY1MDYyYS4uMjFmMzFmNCAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJEZXZUb29sc0FnZW50SW1wbC5jcHAKQEAgLTE2OSw3ICsxNjksNyBAQCB2b2lkIFdlYkRl
dlRvb2xzQWdlbnRJbXBsOjphdHRhY2goKQogICAgICAgICBuZXcgRGVidWdnZXJBZ2VudEltcGwo
bV93ZWJWaWV3SW1wbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGVidWdnZXJB
Z2VudERlbGVnYXRlU3R1Yi5nZXQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMpKTsKLSAgICByZXNldEluc3BlY3RvckZyb250ZW5kUHJveHkoKTsKKyAgICBjcmVhdGVJbnNw
ZWN0b3JGcm9udGVuZFByb3h5KCk7CiAKICAgICAvLyBBbGxvdyBjb250cm9sbGVyIHRvIHNlbmQg
bWVzc2FnZXMgdG8gdGhlIGZyb250ZW5kLgogICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIGljID0g
aW5zcGVjdG9yQ29udHJvbGxlcigpOwpAQCAtMTg1LDcgKzE4NSw3IEBAIHZvaWQgV2ViRGV2VG9v
bHNBZ2VudEltcGw6OmF0dGFjaCgpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpYy0+c2V0V2lu
ZG93VmlzaWJsZSh0cnVlLCBmYWxzZSk7CisgICAgc2V0SW5zcGVjdG9yRnJvbnRlbmRQcm94eVRv
SW5zcGVjdG9yQ29udHJvbGxlcigpOwogICAgIG1fYXR0YWNoZWQgPSB0cnVlOwogfQogCkBAIC0y
MTYsNyArMjE2LDYgQEAgdm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6ZGlkQ29tbWl0UHJvdmlz
aW9uYWxMb2FkKFdlYkZyYW1lSW1wbCogd2ViZnJhbWUsIGJvb2wKICAgICAgICAgZHMtPnVucmVh
Y2hhYmxlVVJMKCkgOgogICAgICAgICByZXF1ZXN0LnVybCgpOwogICAgIGlmICghd2ViZnJhbWUt
PnBhcmVudCgpKSB7Ci0gICAgICAgIHJlc2V0SW5zcGVjdG9yRnJvbnRlbmRQcm94eSgpOwogICAg
ICAgICBtX3Rvb2xzQWdlbnREZWxlZ2F0ZVN0dWItPmZyYW1lTmF2aWdhdGUoV2ViQ29yZTo6S1VS
TCh1cmwpLnN0cmluZygpKTsKICAgICAgICAgU2V0QXB1QWdlbnRFbmFibGVkSW5VdGlsaXR5Q29u
dGV4dChtX3V0aWxpdHlDb250ZXh0LCBtX2FwdUFnZW50RW5hYmxlZCk7CiAgICAgfQpAQCAtMzU3
LDcgKzM1Niw3IEBAIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBXZWJEZXZUb29sc0FnZW50SW1wbDo6
Y3JlYXRlSW5zcGVjdG9yQmFja2VuZFY4V3JhcHBlcigpCiAgICAgcmV0dXJuIGluc3RhbmNlOwog
fQogCi12b2lkIFdlYkRldlRvb2xzQWdlbnRJbXBsOjpyZXNldEluc3BlY3RvckZyb250ZW5kUHJv
eHkoKQordm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6Y3JlYXRlSW5zcGVjdG9yRnJvbnRlbmRQ
cm94eSgpCiB7CiAgICAgZGlzcG9zZVV0aWxpdHlDb250ZXh0KCk7CiAgICAgbV91dGlsaXR5Q29u
dGV4dCA9IHY4OjpDb250ZXh0OjpOZXcoKTsKQEAgLTM2OCw4ICszNjcsMTYgQEAgdm9pZCBXZWJE
ZXZUb29sc0FnZW50SW1wbDo6cmVzZXRJbnNwZWN0b3JGcm9udGVuZFByb3h5KCkKICAgICB2ODo6
Q29udGV4dDo6U2NvcGUgY29udGV4dFNjb3BlKG1fdXRpbGl0eUNvbnRleHQpOwogICAgIFNjcmlw
dFN0YXRlKiBzdGF0ZSA9IFNjcmlwdFN0YXRlOjpmb3JDb250ZXh0KAogICAgICAgICB2ODo6TG9j
YWw8djg6OkNvbnRleHQ+OjpOZXcobV91dGlsaXR5Q29udGV4dCkpOworfQorCit2b2lkIFdlYkRl
dlRvb2xzQWdlbnRJbXBsOjpzZXRJbnNwZWN0b3JGcm9udGVuZFByb3h5VG9JbnNwZWN0b3JDb250
cm9sbGVyKCkKK3sKKyAgICB2ODo6SGFuZGxlU2NvcGUgc2NvcGU7CisgICAgU2NyaXB0U3RhdGUq
IHN0YXRlID0gU2NyaXB0U3RhdGU6OmZvckNvbnRleHQoCisgICAgICAgIHY4OjpMb2NhbDx2ODo6
Q29udGV4dD46Ok5ldyhtX3V0aWxpdHlDb250ZXh0KSk7CiAgICAgSW5zcGVjdG9yQ29udHJvbGxl
ciogaWMgPSBpbnNwZWN0b3JDb250cm9sbGVyKCk7Ci0gICAgaWMtPnNldEZyb250ZW5kUHJveHlP
YmplY3Qoc3RhdGUsIFNjcmlwdE9iamVjdChzdGF0ZSwgbV91dGlsaXR5Q29udGV4dC0+R2xvYmFs
KCkpKTsKKyAgICBpYy0+c2V0RnJvbnRlbmQobmV3IEluc3BlY3RvckZyb250ZW5kKAorICAgICAg
ICBTY3JpcHRPYmplY3Qoc3RhdGUsIG1fdXRpbGl0eUNvbnRleHQtPkdsb2JhbCgpKSkpOwogfQog
CiB2b2lkIFdlYkRldlRvb2xzQWdlbnRJbXBsOjpzZXRBcHVBZ2VudEVuYWJsZWQoYm9vbCBlbmFi
bGVkKQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50SW1w
bC5oIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5oCmluZGV4IDIw
N2JhZGEuLjQ1NWRjZWYgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9v
bHNBZ2VudEltcGwuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzQWdlbnRJ
bXBsLmgKQEAgLTEwOSw3ICsxMDksOCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBjb21waWxlVXRp
bGl0eVNjcmlwdHMoKTsKICAgICB2b2lkIGluaXREZXZUb29sc0FnZW50SG9zdCgpOwotICAgIHZv
aWQgcmVzZXRJbnNwZWN0b3JGcm9udGVuZFByb3h5KCk7CisgICAgdm9pZCBjcmVhdGVJbnNwZWN0
b3JGcm9udGVuZFByb3h5KCk7CisgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZFByb3h5VG9J
bnNwZWN0b3JDb250cm9sbGVyKCk7CiAgICAgdm9pZCBzZXRBcHVBZ2VudEVuYWJsZWQoYm9vbCBl
bmFibGVkKTsKIAogICAgIFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNv
bnRyb2xsZXIoKTsKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNG
cm9udGVuZEltcGwuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0Zyb250ZW5k
SW1wbC5jcHAKaW5kZXggZDViOGViYy4uOGEyZjgxYyAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJEZXZUb29sc0Zyb250ZW5kSW1wbC5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJEZXZUb29sc0Zyb250ZW5kSW1wbC5jcHAKQEAgLTE1Niw4ICsxNTYsMTEgQEAgV2Vi
RGV2VG9vbHNGcm9udGVuZEltcGw6OldlYkRldlRvb2xzRnJvbnRlbmRJbXBsKAogICAgICAgICAi
c2V0U2V0dGluZyIsCiAgICAgICAgIFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjpqc1NldFNldHRp
bmcpOwogICAgIGRldlRvb2xzSG9zdC5hZGRQcm90b0Z1bmN0aW9uKAotICAgICAgICAid2luZG93
VW5sb2FkaW5nIiwKLSAgICAgICAgV2ViRGV2VG9vbHNGcm9udGVuZEltcGw6OmpzV2luZG93VW5s
b2FkaW5nKTsKKyAgICAgICAgImJyaW5nVG9Gcm9udCIsCisgICAgICAgIFdlYkRldlRvb2xzRnJv
bnRlbmRJbXBsOjpqc0JyaW5nVG9Gcm9udCk7CisgICAgZGV2VG9vbHNIb3N0LmFkZFByb3RvRnVu
Y3Rpb24oCisgICAgICAgICJpbnNwZWN0ZWRVUkxDaGFuZ2VkIiwKKyAgICAgICAgV2ViRGV2VG9v
bHNGcm9udGVuZEltcGw6OmpzSW5zcGVjdGVkVVJMQ2hhbmdlZCk7CiAgICAgZGV2VG9vbHNIb3N0
LmFkZFByb3RvRnVuY3Rpb24oCiAgICAgICAgICJzaG93Q29udGV4dE1lbnUiLAogICAgICAgICBX
ZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6anNTaG93Q29udGV4dE1lbnUpOwpAQCAtMzQ2LDkgKzM0
OSwxMyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gV2ViRGV2VG9vbHNGcm9udGVuZEltcGw6Ompz
RGVidWdnZXJQYXVzZVNjcmlwdChjb25zdCB2ODo6QQogICAgIHJldHVybiB2ODo6VW5kZWZpbmVk
KCk7CiB9CiAKLXY4OjpIYW5kbGU8djg6OlZhbHVlPiBXZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6
anNXaW5kb3dVbmxvYWRpbmcoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKK3Y4OjpIYW5kbGU8
djg6OlZhbHVlPiBXZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6anNCcmluZ1RvRnJvbnQoY29uc3Qg
djg6OkFyZ3VtZW50cyYgYXJncykKK3sKKyAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworfQor
Cit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gV2ViRGV2VG9vbHNGcm9udGVuZEltcGw6OmpzSW5zcGVj
dGVkVVJMQ2hhbmdlZChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewotICAgIC8vIFRPRE8o
cGZlbGRtYW4pOiBJbXBsZW1lbnQgdGhpcy4KICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwog
fQogCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzRnJvbnRlbmRJ
bXBsLmggYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzRnJvbnRlbmRJbXBsLmgKaW5k
ZXggYmEwMDEzYi4uNjU5MTY5MyAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJE
ZXZUb29sc0Zyb250ZW5kSW1wbC5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9v
bHNGcm9udGVuZEltcGwuaApAQCAtMTQyLDcgKzE0Miw4IEBAIHByaXZhdGU6CiAgICAgc3RhdGlj
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBqc1NldHRpbmcoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJn
cyk7CiAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBqc1NldFNldHRpbmcoY29uc3Qg
djg6OkFyZ3VtZW50cyYgYXJncyk7CiAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBq
c0RlYnVnZ2VyUGF1c2VTY3JpcHQoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncyk7Ci0gICAgc3Rh
dGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBqc1dpbmRvd1VubG9hZGluZyhjb25zdCB2ODo6QXJn
dW1lbnRzJiBhcmdzKTsKKyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGpzQnJpbmdU
b0Zyb250KGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpOworICAgIHN0YXRpYyB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4ganNJbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFy
Z3MpOwogICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4ganNTaG93Q29udGV4dE1lbnUo
Y29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncyk7CiAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBqc0NhbkF0dGFjaFdpbmRvdyhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKTsKIApkaWZm
IC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9JbmplY3REaXNwYXRjaC5qcyBiL1dlYktp
dC9jaHJvbWl1bS9zcmMvanMvSW5qZWN0RGlzcGF0Y2guanMKaW5kZXggZTA3MGM0Mi4uNjhiY2Ri
ZCAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9JbmplY3REaXNwYXRjaC5qcwor
KysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0luamVjdERpc3BhdGNoLmpzCkBAIC0xMDQsMyAr
MTA0LDcgQEAgZnVuY3Rpb24gZGlzcGF0Y2gobWV0aG9kLCB2YXJfYXJncykgewogICAgIHZhciBj
YWxsID0gSlNPTi5zdHJpbmdpZnkoYXJncyk7CiAgICAgRGV2VG9vbHNBZ2VudEhvc3QuZGlzcGF0
Y2goY2FsbCk7CiB9OworCitmdW5jdGlvbiBjbG9zZSgpIHsKKyAgICAvLyBUaGlzIG1ldGhvZCBp
cyBjYWxsZWQgd2hlbiBJbnNwZWN0b3JGcm9udGVuZCBjbG9zZXMgaW4gbGF5b3V0IHRlc3RzLgor
fQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay9DaGFuZ2VMb2cgYi9XZWJLaXQvZ3RrL0NoYW5nZUxv
ZwppbmRleCA5YWRkNmUyLi5kYjc0OWVlIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL0NoYW5nZUxv
ZworKysgYi9XZWJLaXQvZ3RrL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDEwLTAzLTEw
ICBZdXJ5IFNlbWlraGF0c2t5IDx5dXJ5c0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW50cm9kdWNlIEluc3BlY3RvckZyb250
ZW5kQ2xpZW50IHRoYXQgcHJvdmlkZXMgSW5zcGVjdG9yRnJvbnRlbmQgd2l0aCBhbiBpbnRlcmZh
Y2UgdG8gdGhlIGVtYmVkZGVyLiBJbnNwZWN0b3JDbGllbnQgbm93IHNlcnZlcyBhcyBhIGRlbGVn
YXRlIGZvciBJbnNwZWN0b3JDb250cm9sbGVyIGFuZCBkb2VzIG5vdCBjb250YWluIG1ldGhvZHMg
Zm9yIG1hbmFnaW5nIGluc3BlY3RvciBmcm9udGVuZCB3aW5kb3cuIFRoYXQgYWxsb3dzIHRvIGNy
ZWF0ZSByZW1vdGUgSW5zcGVjdG9yRnJvbnRlbmRIb3N0LgorCisgICAgICAgIEludHJvZHVjZSBJ
bnNwZWN0b3JGcm9udGVuZENsaWVudCB0aGF0IHdvdWxkIHByb3ZpZGUgSW5zcGVjdG9yRnJvbnRl
bmQgd2l0aCBhbiBpbnRlcmZhY2UgdG8gdGhlIGVtYmVkZGVyCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNTAzNgorCisgICAgICAgICogV2ViQ29yZVN1
cHBvcnQvSW5zcGVjdG9yQ2xpZW50R3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6bm90aWZ5V2Vi
Vmlld0Rlc3Ryb3llZCk6CisgICAgICAgIChXZWJLaXQ6Okluc3BlY3RvckNsaWVudDo6SW5zcGVj
dG9yQ2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6SW5zcGVjdG9yQ2xpZW50OjppbnNwZWN0b3JE
ZXN0cm95ZWQpOgorICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JDbGllbnQ6Om9wZW5JbnNwZWN0
b3JGcm9udGVuZCk6CisgICAgICAgIChXZWJLaXQ6Okluc3BlY3RvckNsaWVudDo6aGlnaGxpZ2h0
KToKKyAgICAgICAgKFdlYktpdDo6SW5zcGVjdG9yQ2xpZW50OjpoaWRlSGlnaGxpZ2h0KToKKyAg
ICAgICAgKFdlYktpdDo6SW5zcGVjdG9yQ2xpZW50Ojpwb3B1bGF0ZVNldHRpbmcpOgorICAgICAg
ICAoV2ViS2l0OjpJbnNwZWN0b3JDbGllbnQ6OnN0b3JlU2V0dGluZyk6CisgICAgICAgIChXZWJL
aXQ6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpJbnNwZWN0b3JGcm9udGVuZENsaWVudCk6Cisg
ICAgICAgIChXZWJLaXQ6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50Ojp+SW5zcGVjdG9yRnJvbnRl
bmRDbGllbnQpOgorICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6ZGVz
dHJveUluc3BlY3RvcldpbmRvdyk6CisgICAgICAgIChXZWJLaXQ6Okluc3BlY3RvckZyb250ZW5k
Q2xpZW50Ojpsb2NhbGl6ZWRTdHJpbmdzVVJMKToKKyAgICAgICAgKFdlYktpdDo6SW5zcGVjdG9y
RnJvbnRlbmRDbGllbnQ6OmhpZGRlblBhbmVscyk6CisgICAgICAgIChXZWJLaXQ6Okluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50OjpicmluZ1RvRnJvbnQpOgorICAgICAgICAoV2ViS2l0OjpJbnNwZWN0
b3JGcm9udGVuZENsaWVudDo6Y2xvc2VXaW5kb3cpOgorICAgICAgICAoV2ViS2l0OjpJbnNwZWN0
b3JGcm9udGVuZENsaWVudDo6YXR0YWNoV2luZG93KToKKyAgICAgICAgKFdlYktpdDo6SW5zcGVj
dG9yRnJvbnRlbmRDbGllbnQ6OmRldGFjaFdpbmRvdyk6CisgICAgICAgIChXZWJLaXQ6Okluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50OjpzZXRBdHRhY2hlZFdpbmRvd0hlaWdodCk6CisgICAgICAgIChX
ZWJLaXQ6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50OjppbnNwZWN0ZWRVUkxDaGFuZ2VkKToKKyAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRHdGsuaDoKKwogMjAxMC0wMy0w
OSAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgR3VzdGF2byBOb3JvbmhhIFNpbHZhLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay9X
ZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRHdGsuY3BwIGIvV2ViS2l0L2d0ay9XZWJDb3Jl
U3VwcG9ydC9JbnNwZWN0b3JDbGllbnRHdGsuY3BwCmluZGV4IDk5YmM2MjcuLmU3MmFjMDUgMTAw
NjQ0Ci0tLSBhL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50R3RrLmNw
cAorKysgYi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudEd0ay5jcHAK
QEAgLTMxLDY3ICszMSw0MCBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNl
IFdlYktpdCB7CiAKLXN0YXRpYyB2b2lkIG5vdGlmeVdlYlZpZXdEZXN0cm95ZWQoV2ViS2l0V2Vi
Vmlldyogd2ViVmlldywgSW5zcGVjdG9yQ2xpZW50KiBpbnNwZWN0b3JDbGllbnQpCitzdGF0aWMg
dm9pZCBub3RpZnlXZWJWaWV3RGVzdHJveWVkKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIEluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50KiBpbnNwZWN0b3JGcm9udGVuZENsaWVudCkKIHsKLSAgICBpbnNw
ZWN0b3JDbGllbnQtPndlYlZpZXdEZXN0cm95ZWQoKTsKKyAgICBpbnNwZWN0b3JGcm9udGVuZENs
aWVudC0+ZGVzdHJveUluc3BlY3RvcldpbmRvdygpOwogfQogCiBJbnNwZWN0b3JDbGllbnQ6Oklu
c3BlY3RvckNsaWVudChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQotICAgIDogbV93ZWJWaWV3KDAp
Ci0gICAgLCBtX2luc3BlY3RlZFdlYlZpZXcod2ViVmlldykKLSAgICAsIG1fd2ViSW5zcGVjdG9y
KDApCisgICAgOiBtX2luc3BlY3RlZFdlYlZpZXcod2ViVmlldykKIHt9CiAKIHZvaWQgSW5zcGVj
dG9yQ2xpZW50OjppbnNwZWN0b3JEZXN0cm95ZWQoKQogewotICAgIGlmIChtX3dlYkluc3BlY3Rv
cikKLSAgICAgICAgZ19vYmplY3RfdW5yZWYobV93ZWJJbnNwZWN0b3IpOwotCiAgICAgZGVsZXRl
IHRoaXM7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ2xpZW50Ojp3ZWJWaWV3RGVzdHJveWVkKCkKLXsK
LSAgICBtX3dlYlZpZXcgPSAwOwotICAgIGNvcmUobV9pbnNwZWN0ZWRXZWJWaWV3KS0+aW5zcGVj
dG9yQ29udHJvbGxlcigpLT5wYWdlRGVzdHJveWVkKCk7Ci0KLSAgICAvLyBjcmVhdGVQYWdlIHdp
bGwgYmUgY2FsbGVkIGFnYWluLCBpZiB0aGUgdXNlciBjaG9vc2VzIHRvIGluc3BlY3QKLSAgICAv
LyBzb21ldGhpbmcgZWxzZSwgYW5kIHRoZSBpbnNwZWN0b3Igd2lsbCBiZSByZWZlcmVuY2VkIGFn
YWluLAotICAgIC8vIHRoZXJlLgotICAgIGdfb2JqZWN0X3VucmVmKG1fd2ViSW5zcGVjdG9yKTsK
LSAgICBtX3dlYkluc3BlY3RvciA9IDA7Ci19Ci0KLVBhZ2UqIEluc3BlY3RvckNsaWVudDo6Y3Jl
YXRlUGFnZSgpCit2b2lkIEluc3BlY3RvckNsaWVudDo6b3Blbkluc3BlY3RvckZyb250ZW5kKElu
c3BlY3RvckNvbnRyb2xsZXIqIGNvbnRyb2xsZXIpCiB7Ci0gICAgaWYgKG1fd2ViVmlldykgewot
ICAgICAgICBnYm9vbGVhbiBoYW5kbGVkID0gRkFMU0U7Ci0gICAgICAgIGdfc2lnbmFsX2VtaXRf
YnlfbmFtZShtX3dlYkluc3BlY3RvciwgImRlc3Ryb3kiLCAmaGFuZGxlZCk7Ci0KLSAgICAgICAg
Lyogd2UgY2FuIG5vdyBkaXNwb3NlIG91ciBvd24gcmVmZXJlbmNlICovCi0gICAgICAgIGdfb2Jq
ZWN0X3VucmVmKG1fd2ViSW5zcGVjdG9yKTsKLSAgICB9Ci0KICAgICAvLyBUaGlzIGdfb2JqZWN0
X2dldCB3aWxsIHJlZiB0aGUgaW5zcGVjdG9yLiBXZSdyZSBub3QgZG9pbmcgYW4KICAgICAvLyB1
bnJlZiBpZiB0aGlzIG1ldGhvZCBzdWNjZWVkcyBiZWNhdXNlIHRoZSBpbnNwZWN0b3Igb2JqZWN0
IG11c3QKICAgICAvLyBiZSBhbGl2ZSBldmVuIGFmdGVyIHRoZSBpbnNwZWN0ZWQgV2ViVmlldyBp
cyBkZXN0cm95ZWQgLSB0aGUKICAgICAvLyBjbG9zZS13aW5kb3cgYW5kIGRlc3Ryb3kgc2lnbmFs
cyBzdGlsbCBuZWVkIHRvIGJlCiAgICAgLy8gZW1pdHRlZC4KLSAgICBXZWJLaXRXZWJJbnNwZWN0
b3IqIHdlYkluc3BlY3RvcjsKKyAgICBXZWJLaXRXZWJJbnNwZWN0b3IqIHdlYkluc3BlY3RvciA9
IDA7CiAgICAgZ19vYmplY3RfZ2V0KG1faW5zcGVjdGVkV2ViVmlldywgIndlYi1pbnNwZWN0b3Ii
LCAmd2ViSW5zcGVjdG9yLCBOVUxMKTsKLSAgICBtX3dlYkluc3BlY3RvciA9IHdlYkluc3BlY3Rv
cjsKKyAgICBBU1NFUlQod2ViSW5zcGVjdG9yKTsKIAotICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFt
ZShtX3dlYkluc3BlY3RvciwgImluc3BlY3Qtd2ViLXZpZXciLCBtX2luc3BlY3RlZFdlYlZpZXcs
ICZtX3dlYlZpZXcpOworICAgIFdlYktpdFdlYlZpZXcqIGluc3BlY3RvcldlYlZpZXcgPSAwOwor
ICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZSh3ZWJJbnNwZWN0b3IsICJpbnNwZWN0LXdlYi12aWV3
IiwgbV9pbnNwZWN0ZWRXZWJWaWV3LCAmaW5zcGVjdG9yV2ViVmlldyk7CiAKLSAgICBpZiAoIW1f
d2ViVmlldykgewotICAgICAgICBnX29iamVjdF91bnJlZihtX3dlYkluc3BlY3Rvcik7Ci0gICAg
ICAgIHJldHVybiAwOworICAgIGlmICghaW5zcGVjdG9yV2ViVmlldykgeworICAgICAgICBnX29i
amVjdF91bnJlZih3ZWJJbnNwZWN0b3IpOworICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
d2Via2l0X3dlYl9pbnNwZWN0b3Jfc2V0X3dlYl92aWV3KG1fd2ViSW5zcGVjdG9yLCBtX3dlYlZp
ZXcpOwotCi0gICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJkZXN0cm95IiwKLSAgICAg
ICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0sobm90aWZ5V2ViVmlld0Rlc3Ryb3llZCksIChncG9p
bnRlcil0aGlzKTsKKyAgICB3ZWJraXRfd2ViX2luc3BlY3Rvcl9zZXRfd2ViX3ZpZXcod2ViSW5z
cGVjdG9yLCBpbnNwZWN0b3JXZWJWaWV3KTsKIAogICAgIEdPd25QdHI8Z2NoYXI+IGluc3BlY3Rv
clVSSTsKIApAQCAtMTAzLDE0ICs3Niw3MyBAQCBQYWdlKiBJbnNwZWN0b3JDbGllbnQ6OmNyZWF0
ZVBhZ2UoKQogICAgIH0gZWxzZQogICAgICAgICBpbnNwZWN0b3JVUkkuc2V0KGdfZmlsZW5hbWVf
dG9fdXJpKERBVEFfRElSIi93ZWJraXQtMS4wL3dlYmluc3BlY3Rvci9pbnNwZWN0b3IuaHRtbCIs
IE5VTEwsIE5VTEwpKTsKIAotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaShtX3dlYlZpZXcs
IGluc3BlY3RvclVSSS5nZXQoKSk7CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKGluc3Bl
Y3RvcldlYlZpZXcsIGluc3BlY3RvclVSSS5nZXQoKSk7CisKKyAgICBndGtfd2lkZ2V0X3Nob3co
R1RLX1dJREdFVChpbnNwZWN0b3JXZWJWaWV3KSk7CisKKyAgICBQYWdlKiBpbnNwZWN0b3JQYWdl
ID0gY29yZShpbnNwZWN0b3JXZWJWaWV3KTsKKyAgICBpbnNwZWN0b3JQYWdlLT5pbnNwZWN0b3JD
b250cm9sbGVyKCktPnNldEluc3BlY3RvckZyb250ZW5kQ2xpZW50KG5ldyBJbnNwZWN0b3JGcm9u
dGVuZENsaWVudChtX2luc3BlY3RlZFdlYlZpZXcsIGluc3BlY3RvcldlYlZpZXcsIHdlYkluc3Bl
Y3RvciwgaW5zcGVjdG9yUGFnZSkpOworfQorCit2b2lkIEluc3BlY3RvckNsaWVudDo6aGlnaGxp
Z2h0KE5vZGUqIG5vZGUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBJbnNw
ZWN0b3JDbGllbnQ6OmhpZGVIaWdobGlnaHQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK3ZvaWQgSW5zcGVjdG9yQ2xpZW50Ojpwb3B1bGF0ZVNldHRpbmcoY29uc3QgU3RyaW5nJiBr
ZXksIFN0cmluZyogdmFsdWUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBJ
bnNwZWN0b3JDbGllbnQ6OnN0b3JlU2V0dGluZyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCisKK2Jvb2wgZGVzdHJv
eWVkID0gVFJVRTsKKworSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6Okluc3BlY3RvckZyb250ZW5k
Q2xpZW50KFdlYktpdFdlYlZpZXcqIGluc3BlY3RlZFdlYlZpZXcsIFdlYktpdFdlYlZpZXcqIGlu
c3BlY3RvcldlYlZpZXcsIFdlYktpdFdlYkluc3BlY3Rvciogd2ViSW5zcGVjdG9yLCBQYWdlKiBp
bnNwZWN0b3JQYWdlKQorICAgIDogSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbChjb3JlKGlu
c3BlY3RlZFdlYlZpZXcpLT5pbnNwZWN0b3JDb250cm9sbGVyKCksIGluc3BlY3RvclBhZ2UpCisg
ICAgLCBtX2luc3BlY3RvcldlYlZpZXcoaW5zcGVjdG9yV2ViVmlldykKKyAgICAsIG1faW5zcGVj
dGVkV2ViVmlldyhpbnNwZWN0ZWRXZWJWaWV3KQorICAgICwgbV93ZWJJbnNwZWN0b3Iod2ViSW5z
cGVjdG9yKQoreworICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9pbnNwZWN0b3JXZWJWaWV3LCAiZGVz
dHJveSIsCisgICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNLKG5vdGlmeVdlYlZpZXdEZXN0
cm95ZWQpLCAoZ3BvaW50ZXIpdGhpcyk7Cit9CisKK0luc3BlY3RvckZyb250ZW5kQ2xpZW50Ojp+
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQoKQoreworICAgIEFTU0VSVCghbV93ZWJJbnNwZWN0b3Ip
OworfQorCit2b2lkIEluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpkZXN0cm95SW5zcGVjdG9yV2lu
ZG93KCkKK3sKKyAgICBpZiAoIW1fd2ViSW5zcGVjdG9yKQorICAgICAgICByZXR1cm47CisgICAg
V2ViS2l0V2ViSW5zcGVjdG9yKiB3ZWJJbnNwZWN0b3IgPSBtX3dlYkluc3BlY3RvcjsKKyAgICBt
X3dlYkluc3BlY3RvciA9IDA7CisKKyAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5
X2Z1bmMobV9pbnNwZWN0b3JXZWJWaWV3LCAoZ3BvaW50ZXIpbm90aWZ5V2ViVmlld0Rlc3Ryb3ll
ZCwgKGdwb2ludGVyKXRoaXMpOworICAgIG1faW5zcGVjdG9yV2ViVmlldyA9IDA7CisKKyAgICBj
b3JlKG1faW5zcGVjdGVkV2ViVmlldyktPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+Y2xvc2UoKTsK
IAotICAgIGd0a193aWRnZXRfc2hvdyhHVEtfV0lER0VUKG1fd2ViVmlldykpOworICAgIGdib29s
ZWFuIGhhbmRsZWQgPSBGQUxTRTsKKyAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUod2ViSW5zcGVj
dG9yLCAiY2xvc2Utd2luZG93IiwgJmhhbmRsZWQpOworICAgIEFTU0VSVChoYW5kbGVkKTsKIAot
ICAgIHJldHVybiBjb3JlKG1fd2ViVmlldyk7CisgICAgLyogd2Ugc2hvdWxkIG5vdyBkaXNwb3Nl
IG91ciBvd24gcmVmZXJlbmNlICovCisgICAgZ19vYmplY3RfdW5yZWYod2ViSW5zcGVjdG9yKTsK
IH0KIAotU3RyaW5nIEluc3BlY3RvckNsaWVudDo6bG9jYWxpemVkU3RyaW5nc1VSTCgpCitTdHJp
bmcgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmxvY2FsaXplZFN0cmluZ3NVUkwoKQogewogICAg
IEdPd25QdHI8Z2NoYXI+IFVSTDsKIApAQCAtMTI2LDg5ICsxNTgsNTYgQEAgU3RyaW5nIEluc3Bl
Y3RvckNsaWVudDo6bG9jYWxpemVkU3RyaW5nc1VSTCgpCiAgICAgcmV0dXJuIFN0cmluZzo6ZnJv
bVVURjgoVVJMLmdldCgpKTsKIH0KIAotU3RyaW5nIEluc3BlY3RvckNsaWVudDo6aGlkZGVuUGFu
ZWxzKCkKK1N0cmluZyBJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6aGlkZGVuUGFuZWxzKCkKIHsK
ICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JDbGllbnQ6OnNob3dXaW5kb3coKQordm9pZCBJbnNwZWN0b3JGcm9udGVuZENsaWVu
dDo6YnJpbmdUb0Zyb250KCkKIHsKLSAgICBpZiAoIW1fd2ViVmlldykKKyAgICBpZiAoIW1faW5z
cGVjdG9yV2ViVmlldykKICAgICAgICAgcmV0dXJuOwogCiAgICAgZ2Jvb2xlYW4gaGFuZGxlZCA9
IEZBTFNFOwogICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX3dlYkluc3BlY3RvciwgInNob3ct
d2luZG93IiwgJmhhbmRsZWQpOwotCi0gICAgY29yZShtX2luc3BlY3RlZFdlYlZpZXcpLT5pbnNw
ZWN0b3JDb250cm9sbGVyKCktPnNldFdpbmRvd1Zpc2libGUodHJ1ZSk7CiB9CiAKLXZvaWQgSW5z
cGVjdG9yQ2xpZW50OjpjbG9zZVdpbmRvdygpCit2b2lkIEluc3BlY3RvckZyb250ZW5kQ2xpZW50
OjpjbG9zZVdpbmRvdygpCiB7Ci0gICAgaWYgKCFtX3dlYlZpZXcpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGdib29sZWFuIGhhbmRsZWQgPSBGQUxTRTsKLSAgICBnX3NpZ25hbF9lbWl0X2J5X25h
bWUobV93ZWJJbnNwZWN0b3IsICJjbG9zZS13aW5kb3ciLCAmaGFuZGxlZCk7Ci0KLSAgICBjb3Jl
KG1faW5zcGVjdGVkV2ViVmlldyktPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0V2luZG93Vmlz
aWJsZShmYWxzZSk7CisgICAgZGVzdHJveUluc3BlY3RvcldpbmRvdygpOwogfQogCi12b2lkIElu
c3BlY3RvckNsaWVudDo6YXR0YWNoV2luZG93KCkKK3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmRDbGll
bnQ6OmF0dGFjaFdpbmRvdygpCiB7Ci0gICAgaWYgKCFtX3dlYlZpZXcpCisgICAgaWYgKCFtX2lu
c3BlY3RvcldlYlZpZXcpCiAgICAgICAgIHJldHVybjsKIAogICAgIGdib29sZWFuIGhhbmRsZWQg
PSBGQUxTRTsKICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV93ZWJJbnNwZWN0b3IsICJhdHRh
Y2gtd2luZG93IiwgJmhhbmRsZWQpOwogfQogCi12b2lkIEluc3BlY3RvckNsaWVudDo6ZGV0YWNo
V2luZG93KCkKK3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmRldGFjaFdpbmRvdygpCiB7
Ci0gICAgaWYgKCFtX3dlYlZpZXcpCisgICAgaWYgKCFtX2luc3BlY3RvcldlYlZpZXcpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIGdib29sZWFuIGhhbmRsZWQgPSBGQUxTRTsKICAgICBnX3NpZ25h
bF9lbWl0X2J5X25hbWUobV93ZWJJbnNwZWN0b3IsICJkZXRhY2gtd2luZG93IiwgJmhhbmRsZWQp
OwogfQogCi12b2lkIEluc3BlY3RvckNsaWVudDo6c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5z
aWduZWQgaGVpZ2h0KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgSW5zcGVj
dG9yQ2xpZW50OjpoaWdobGlnaHQoTm9kZSogbm9kZSkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCi12b2lkIEluc3BlY3RvckNsaWVudDo6aGlkZUhpZ2hsaWdodCgpCit2b2lkIEluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50OjpzZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWln
aHQpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDbGllbnQ6
Omluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJiBuZXdVUkwpCit2b2lkIEluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50OjppbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYgbmV3VVJM
KQogewotICAgIGlmICghbV93ZWJWaWV3KQorICAgIGlmICghbV9pbnNwZWN0b3JXZWJWaWV3KQog
ICAgICAgICByZXR1cm47CiAKICAgICB3ZWJraXRfd2ViX2luc3BlY3Rvcl9zZXRfaW5zcGVjdGVk
X3VyaShtX3dlYkluc3BlY3RvciwgbmV3VVJMLnV0ZjgoKS5kYXRhKCkpOwogfQogCi12b2lkIElu
c3BlY3RvckNsaWVudDo6aW5zcGVjdG9yV2luZG93T2JqZWN0Q2xlYXJlZCgpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDbGllbnQ6OnBvcHVsYXRlU2V0dGlu
Zyhjb25zdCBTdHJpbmcmIGtleSwgU3RyaW5nKiB2YWx1ZSkKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotfQotCi12b2lkIEluc3BlY3RvckNsaWVudDo6c3RvcmVTZXR0aW5nKGNvbnN0IFN0cmlu
ZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KIH0KIApkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JD
bGllbnRHdGsuaCBiL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50R3Rr
LmgKaW5kZXggMjk3ZmQ4Zi4uY2RiNTM3NSAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9XZWJDb3Jl
U3VwcG9ydC9JbnNwZWN0b3JDbGllbnRHdGsuaAorKysgYi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBw
b3J0L0luc3BlY3RvckNsaWVudEd0ay5oCkBAIC0zMCw2ICszMCw3IEBACiAjZGVmaW5lIEluc3Bl
Y3RvckNsaWVudEd0a19oCiAKICNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnQuaCIKKyNpbmNsdWRl
ICJJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmgiCiAjaW5jbHVkZSAid2Via2l0d2Vidmll
dy5oIgogI2luY2x1ZGUgIndlYmtpdHdlYmluc3BlY3Rvci5oIgogCkBAIC00NiwxNSArNDcsMzAg
QEAgbmFtZXNwYWNlIFdlYktpdCB7CiAgICAgICAgIEluc3BlY3RvckNsaWVudChXZWJLaXRXZWJW
aWV3KiB3ZWJWaWV3KTsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgaW5zcGVjdG9yRGVzdHJveWVk
KCk7Ci0gICAgICAgIHZvaWQgd2ViVmlld0Rlc3Ryb3llZCgpOwogCi0gICAgICAgIHZpcnR1YWwg
V2ViQ29yZTo6UGFnZSogY3JlYXRlUGFnZSgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgb3Blbklu
c3BlY3RvckZyb250ZW5kKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXIqKTsKKworICAgICAg
ICB2aXJ0dWFsIHZvaWQgaGlnaGxpZ2h0KFdlYkNvcmU6Ok5vZGUqKTsKKyAgICAgICAgdmlydHVh
bCB2b2lkIGhpZGVIaWdobGlnaHQoKTsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgcG9wdWxhdGVT
ZXR0aW5nKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYga2V5LCBXZWJDb3JlOjpTdHJpbmcqIHZhbHVl
KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHN0b3JlU2V0dGluZyhjb25zdCBXZWJDb3JlOjpTdHJp
bmcmIGtleSwgY29uc3QgV2ViQ29yZTo6U3RyaW5nJiB2YWx1ZSk7CisKKyAgICBwcml2YXRlOgor
ICAgICAgICBXZWJLaXRXZWJWaWV3KiBtX2luc3BlY3RlZFdlYlZpZXc7CisgICAgfTsKKworICAg
IGNsYXNzIEluc3BlY3RvckZyb250ZW5kQ2xpZW50IDogcHVibGljIFdlYkNvcmU6Okluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50TG9jYWwgeworICAgIHB1YmxpYzoKKyAgICAgICAgSW5zcGVjdG9yRnJv
bnRlbmRDbGllbnQoV2ViS2l0V2ViVmlldyogaW5zcGVjdGVkV2ViVmlldywgV2ViS2l0V2ViVmll
dyogaW5zcGVjdG9yV2ViVmlldywgV2ViS2l0V2ViSW5zcGVjdG9yKiB3ZWJJbnNwZWN0b3IsIFdl
YkNvcmU6OlBhZ2UqIGluc3BlY3RvclBhZ2UpOworCisgICAgICAgIHZvaWQgZGVzdHJveUluc3Bl
Y3RvcldpbmRvdygpOwogCiAgICAgICAgIHZpcnR1YWwgV2ViQ29yZTo6U3RyaW5nIGxvY2FsaXpl
ZFN0cmluZ3NVUkwoKTsKIAogICAgICAgICB2aXJ0dWFsIFdlYkNvcmU6OlN0cmluZyBoaWRkZW5Q
YW5lbHMoKTsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgc2hvd1dpbmRvdygpOworICAgICAgICB2
aXJ0dWFsIHZvaWQgYnJpbmdUb0Zyb250KCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBjbG9zZVdp
bmRvdygpOwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hXaW5kb3coKTsKQEAgLTYyLDE3
ICs3OCwxMiBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0
QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KTsKIAotICAgICAgICB2aXJ0dWFs
IHZvaWQgaGlnaGxpZ2h0KFdlYkNvcmU6Ok5vZGUqKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGhp
ZGVIaWdobGlnaHQoKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGluc3BlY3RlZFVSTENoYW5nZWQo
Y29uc3QgV2ViQ29yZTo6U3RyaW5nJiBuZXdVUkwpOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBw
b3B1bGF0ZVNldHRpbmcoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBrZXksIFdlYkNvcmU6OlN0cmlu
ZyogdmFsdWUpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgc3RvcmVTZXR0aW5nKGNvbnN0IFdlYkNv
cmU6OlN0cmluZyYga2V5LCBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIHZhbHVlKTsKLQotICAgICAg
ICB2aXJ0dWFsIHZvaWQgaW5zcGVjdG9yV2luZG93T2JqZWN0Q2xlYXJlZCgpOwotCiAgICAgcHJp
dmF0ZToKLSAgICAgICAgV2ViS2l0V2ViVmlldyogbV93ZWJWaWV3OworICAgICAgICB2aXJ0dWFs
IH5JbnNwZWN0b3JGcm9udGVuZENsaWVudCgpOworCisgICAgICAgIFdlYktpdFdlYlZpZXcqIG1f
aW5zcGVjdG9yV2ViVmlldzsKICAgICAgICAgV2ViS2l0V2ViVmlldyogbV9pbnNwZWN0ZWRXZWJW
aWV3OwogICAgICAgICBXZWJLaXRXZWJJbnNwZWN0b3IqIG1fd2ViSW5zcGVjdG9yOwogICAgIH07
CmRpZmYgLS1naXQgYS9XZWJLaXQvaGFpa3UvQ2hhbmdlTG9nIGIvV2ViS2l0L2hhaWt1L0NoYW5n
ZUxvZwppbmRleCAwYjU3YTU5Li5jOGE5ZmQwIDEwMDY0NAotLS0gYS9XZWJLaXQvaGFpa3UvQ2hh
bmdlTG9nCisrKyBiL1dlYktpdC9oYWlrdS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAx
MC0wMy0xMCAgWXVyeSBTZW1pa2hhdHNreSA8eXVyeXNAY2hyb21pdW0ub3JnPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEludHJvZHVjZSBJbnNwZWN0
b3JGcm9udGVuZENsaWVudCB0aGF0IHByb3ZpZGVzIEluc3BlY3RvckZyb250ZW5kIHdpdGggYW4g
aW50ZXJmYWNlIHRvIHRoZSBlbWJlZGRlci4gSW5zcGVjdG9yQ2xpZW50IG5vdyBzZXJ2ZXMgYXMg
YSBkZWxlZ2F0ZSBmb3IgSW5zcGVjdG9yQ29udHJvbGxlciBhbmQgZG9lcyBub3QgY29udGFpbiBt
ZXRob2RzIGZvciBtYW5hZ2luZyBpbnNwZWN0b3IgZnJvbnRlbmQgd2luZG93LiBUaGF0IGFsbG93
cyB0byBjcmVhdGUgcmVtb3RlIEluc3BlY3RvckZyb250ZW5kSG9zdC4KKworICAgICAgICBJbnRy
b2R1Y2UgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQgdGhhdCB3b3VsZCBwcm92aWRlIEluc3BlY3Rv
ckZyb250ZW5kIHdpdGggYW4gaW50ZXJmYWNlIHRvIHRoZSBlbWJlZGRlcgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzUwMzYKKworICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudEhhaWt1LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckNsaWVudEhhaWt1OjpvcGVuSW5zcGVjdG9yRnJvbnRlbmQpOgorICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudEhhaWt1Lmg6CisKIDIwMTAtMDMtMDIgIEFk
YW0gVHJlYXQgIDxhdHJlYXRAcmltLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXZlIEh5
YXR0LgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNs
aWVudEhhaWt1LmNwcCBiL1dlYktpdC9oYWlrdS9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGll
bnRIYWlrdS5jcHAKaW5kZXggZjA2ZTk2Yi4uNTkyMzJlOSAxMDA2NDQKLS0tIGEvV2ViS2l0L2hh
aWt1L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudEhhaWt1LmNwcAorKysgYi9XZWJLaXQv
aGFpa3UvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50SGFpa3UuY3BwCkBAIC00Miw0NSAr
NDIsNyBAQCB2b2lkIEluc3BlY3RvckNsaWVudEhhaWt1OjppbnNwZWN0b3JEZXN0cm95ZWQoKQog
ICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLVBhZ2UqIEluc3BlY3RvckNsaWVudEhhaWt1Ojpj
cmVhdGVQYWdlKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQot
Ci1TdHJpbmcgSW5zcGVjdG9yQ2xpZW50SGFpa3U6OmxvY2FsaXplZFN0cmluZ3NVUkwoKQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1TdHJpbmcg
SW5zcGVjdG9yQ2xpZW50SGFpa3U6OmhpZGRlblBhbmVscygpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ2xpZW50SGFp
a3U6OnNob3dXaW5kb3coKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgSW5z
cGVjdG9yQ2xpZW50SGFpa3U6OmNsb3NlV2luZG93KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCi12b2lkIEluc3BlY3RvckNsaWVudEhhaWt1OjphdHRhY2hXaW5kb3coKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ2xpZW50SGFpa3U6OmRldGFj
aFdpbmRvdygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JD
bGllbnRIYWlrdTo6c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KQordm9p
ZCBJbnNwZWN0b3JDbGllbnRIYWlrdTo6b3Blbkluc3BlY3RvckZyb250ZW5kKFdlYkNvcmU6Oklu
c3BlY3RvckNvbnRyb2xsZXIqKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CkBAIC05NSwx
NiArNTcsNiBAQCB2b2lkIEluc3BlY3RvckNsaWVudEhhaWt1OjpoaWRlSGlnaGxpZ2h0KCkKICAg
ICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIEluc3BlY3RvckNsaWVudEhhaWt1OjppbnNw
ZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LX0KLQotdm9pZCBJbnNwZWN0b3JDbGllbnRIYWlrdTo6aW5zcGVjdG9yV2luZG93T2JqZWN0Q2xl
YXJlZCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQogdm9pZCBJbnNwZWN0b3JDbGll
bnRIYWlrdTo6cG9wdWxhdGVTZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5LCBTdHJpbmcqIHZhbHVl
KQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CmRpZmYgLS1naXQgYS9XZWJLaXQvaGFpa3UvV2Vi
Q29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50SGFpa3UuaCBiL1dlYktpdC9oYWlrdS9XZWJDb3Jl
U3VwcG9ydC9JbnNwZWN0b3JDbGllbnRIYWlrdS5oCmluZGV4IDg3ODhhNWYuLmQ0Mjc2NzAgMTAw
NjQ0Ci0tLSBhL1dlYktpdC9oYWlrdS9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRIYWlr
dS5oCisrKyBiL1dlYktpdC9oYWlrdS9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRIYWlr
dS5oCkBAIC00MiwyOSArNDIsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHB1YmxpYzoK
ICAgICAgICAgdmlydHVhbCB2b2lkIGluc3BlY3RvckRlc3Ryb3llZCgpOwogCi0gICAgICAgIHZp
cnR1YWwgUGFnZSogY3JlYXRlUGFnZSgpOwotCi0gICAgICAgIHZpcnR1YWwgU3RyaW5nIGxvY2Fs
aXplZFN0cmluZ3NVUkwoKTsKLQotICAgICAgICB2aXJ0dWFsIFN0cmluZyBoaWRkZW5QYW5lbHMo
KTsKLQotICAgICAgICB2aXJ0dWFsIHZvaWQgc2hvd1dpbmRvdygpOwotICAgICAgICB2aXJ0dWFs
IHZvaWQgY2xvc2VXaW5kb3coKTsKLQotICAgICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoV2luZG93
KCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hXaW5kb3coKTsKLQotICAgICAgICB2aXJ0
dWFsIHZvaWQgc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KTsKKyAgICAg
ICAgdmlydHVhbCB2b2lkIG9wZW5JbnNwZWN0b3JGcm9udGVuZChXZWJDb3JlOjpJbnNwZWN0b3JD
b250cm9sbGVyKik7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIGhpZ2hsaWdodChOb2RlKik7CiAg
ICAgICAgIHZpcnR1YWwgdm9pZCBoaWRlSGlnaGxpZ2h0KCk7CiAKLSAgICAgICAgdmlydHVhbCB2
b2lkIGluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJiBuZXdVUkwpOwotCiAgICAgICAg
IHZpcnR1YWwgdm9pZCBwb3B1bGF0ZVNldHRpbmcoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBrZXks
IFdlYkNvcmU6OlN0cmluZyogdmFsdWUpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3RvcmVTZXR0
aW5nKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYga2V5LCBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIHZh
bHVlKTsKLQotICAgICAgICB2aXJ0dWFsIHZvaWQgaW5zcGVjdG9yV2luZG93T2JqZWN0Q2xlYXJl
ZCgpOwogICAgIH07CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1dlYktp
dC9tYWMvQ2hhbmdlTG9nIGIvV2ViS2l0L21hYy9DaGFuZ2VMb2cKaW5kZXggMDY4ODA4OC4uMWE1
MTBlYiAxMDA2NDQKLS0tIGEvV2ViS2l0L21hYy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L21hYy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSw0OSBAQAorMjAxMC0wMy0xMSAgWXVyeSBTZW1pa2hhdHNreSA8
eXVyeXNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEludHJvZHVjZSBJbnNwZWN0b3JGcm9udGVuZENsaWVudCB0aGF0IHByb3Zp
ZGVzIEluc3BlY3RvckZyb250ZW5kIHdpdGggYW4gaW50ZXJmYWNlIHRvIHRoZSBlbWJlZGRlci4g
SW5zcGVjdG9yQ2xpZW50IG5vdyBzZXJ2ZXMgYXMgYSBkZWxlZ2F0ZSBmb3IgSW5zcGVjdG9yQ29u
dHJvbGxlciBhbmQgZG9lcyBub3QgY29udGFpbiBtZXRob2RzIGZvciBtYW5hZ2luZyBpbnNwZWN0
b3IgZnJvbnRlbmQgd2luZG93LiBUaGF0IGFsbG93cyB0byBjcmVhdGUgcmVtb3RlIEluc3BlY3Rv
ckZyb250ZW5kSG9zdC4KKworICAgICAgICBJbnRyb2R1Y2UgSW5zcGVjdG9yRnJvbnRlbmRDbGll
bnQgdGhhdCB3b3VsZCBwcm92aWRlIEluc3BlY3RvckZyb250ZW5kIHdpdGggYW4gaW50ZXJmYWNl
IHRvIHRoZSBlbWJlZGRlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MzUwMzYKKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNs
aWVudC5oOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5tbToK
KyAgICAgICAgKFdlYkluc3BlY3RvckNsaWVudDo6V2ViSW5zcGVjdG9yQ2xpZW50KToKKyAgICAg
ICAgKFdlYkluc3BlY3RvckNsaWVudDo6aW5zcGVjdG9yRGVzdHJveWVkKToKKyAgICAgICAgKFdl
Ykluc3BlY3RvckNsaWVudDo6b3Blbkluc3BlY3RvckZyb250ZW5kKToKKyAgICAgICAgKFdlYklu
c3BlY3RvckNsaWVudDo6aGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYkluc3BlY3RvckNsaWVudDo6
aGlkZUhpZ2hsaWdodCk6CisgICAgICAgIChXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6V2Vi
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRD
bGllbnQ6OmZyb250ZW5kTG9hZGVkKToKKyAgICAgICAgKFdlYkluc3BlY3RvckZyb250ZW5kQ2xp
ZW50Ojpsb2NhbGl6ZWRTdHJpbmdzVVJMKToKKyAgICAgICAgKFdlYkluc3BlY3RvckZyb250ZW5k
Q2xpZW50OjpoaWRkZW5QYW5lbHMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGll
bnQ6OmJyaW5nVG9Gcm9udCk6CisgICAgICAgIChXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6
Y2xvc2VXaW5kb3cpOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmF0dGFj
aFdpbmRvdyk6CisgICAgICAgIChXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6ZGV0YWNoV2lu
ZG93KToKKyAgICAgICAgKFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpzZXRBdHRhY2hlZFdp
bmRvd0hlaWdodCk6CisgICAgICAgIChXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6aW5zcGVj
dGVkVVJMQ2hhbmdlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6dXBk
YXRlV2luZG93VGl0bGUpOgorICAgICAgICAoLVtXZWJJbnNwZWN0b3JXaW5kb3dDb250cm9sbGVy
IGRlYWxsb2NdKToKKyAgICAgICAgKC1bV2ViSW5zcGVjdG9yV2luZG93Q29udHJvbGxlciB3aW5k
b3dTaG91bGRDbG9zZTpdKToKKyAgICAgICAgKC1bV2ViSW5zcGVjdG9yV2luZG93Q29udHJvbGxl
ciBjbG9zZV0pOgorICAgICAgICAoLVtXZWJJbnNwZWN0b3JXaW5kb3dDb250cm9sbGVyIHNob3dX
aW5kb3c6XSk6CisgICAgICAgICgtW1dlYkluc3BlY3RvcldpbmRvd0NvbnRyb2xsZXIgYXR0YWNo
XSk6CisgICAgICAgICgtW1dlYkluc3BlY3RvcldpbmRvd0NvbnRyb2xsZXIgZGV0YWNoXSk6Cisg
ICAgICAgICgtW1dlYkluc3BlY3RvcldpbmRvd0NvbnRyb2xsZXIgYXR0YWNoZWRdKToKKyAgICAg
ICAgKC1bV2ViSW5zcGVjdG9yV2luZG93Q29udHJvbGxlciBzZXRGcm9udGVuZENsaWVudDpdKToK
KyAgICAgICAgKC1bV2ViSW5zcGVjdG9yV2luZG93Q29udHJvbGxlciBkZXN0cm95SW5zcGVjdG9y
Vmlld10pOgorICAgICAgICAoLVtXZWJOb2RlSGlnaGxpZ2h0ZXIgaW5pdFdpdGhJbnNwZWN0ZWRX
ZWJWaWV3Ol0pOgorICAgICAgICAoLVtXZWJOb2RlSGlnaGxpZ2h0ZXIgZGVhbGxvY10pOgorICAg
ICAgICAoLVtXZWJOb2RlSGlnaGxpZ2h0ZXIgaGlnaGxpZ2h0Tm9kZTpdKToKKyAgICAgICAgKC1b
V2ViTm9kZUhpZ2hsaWdodGVyIGhpZGVIaWdobGlnaHRdKToKKyAgICAgICAgKC1bV2ViTm9kZUhp
Z2hsaWdodGVyIGRpZEF0dGFjaFdlYk5vZGVIaWdobGlnaHQ6XSk6CisgICAgICAgICgtW1dlYk5v
ZGVIaWdobGlnaHRlciB3aWxsRGV0YWNoV2ViTm9kZUhpZ2hsaWdodDpdKToKKyAgICAgICAgKiBX
ZWJJbnNwZWN0b3IvV2ViSW5zcGVjdG9yLm1tOgorICAgICAgICAoLVtXZWJJbnNwZWN0b3IgYXR0
YWNoOl0pOgorICAgICAgICAoLVtXZWJJbnNwZWN0b3IgZGV0YWNoOl0pOgorCiAyMDEwLTAzLTEw
ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IERhcmluIEFkbGVyLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9y
dC9XZWJJbnNwZWN0b3JDbGllbnQuaCBiL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViSW5z
cGVjdG9yQ2xpZW50LmgKaW5kZXggNjQ2MjFmOC4uZWU4MWIyNSAxMDA2NDQKLS0tIGEvV2ViS2l0
L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuaAorKysgYi9XZWJLaXQvbWFj
L1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5oCkBAIC0yNywxNSArMjcsMTggQEAK
ICAqLwogCiAjaW1wb3J0IDxXZWJDb3JlL0luc3BlY3RvckNsaWVudC5oPgorI2ltcG9ydCA8V2Vi
Q29yZS9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Bs
YXRmb3JtU3RyaW5nLmg+CiAKICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KIAogI2lmZGVmIF9f
T0JKQ19fCiBAY2xhc3MgV2ViSW5zcGVjdG9yV2luZG93Q29udHJvbGxlcjsKK0BjbGFzcyBXZWJO
b2RlSGlnaGxpZ2h0ZXI7CiBAY2xhc3MgV2ViVmlldzsKICNlbHNlCiBjbGFzcyBXZWJJbnNwZWN0
b3JXaW5kb3dDb250cm9sbGVyOworY2xhc3MgV2ViTm9kZUhpZ2hsaWdodGVyOwogY2xhc3MgV2Vi
VmlldzsKICNlbmRpZgogCkBAIC00NSwzMiArNDgsNDEgQEAgcHVibGljOgogCiAgICAgdmlydHVh
bCB2b2lkIGluc3BlY3RvckRlc3Ryb3llZCgpOwogCi0gICAgdmlydHVhbCBXZWJDb3JlOjpQYWdl
KiBjcmVhdGVQYWdlKCk7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpTdHJpbmcgbG9jYWxpemVkU3Ry
aW5nc1VSTCgpOwotCi0gICAgdmlydHVhbCBXZWJDb3JlOjpTdHJpbmcgaGlkZGVuUGFuZWxzKCk7
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2hvd1dpbmRvdygpOwotICAgIHZpcnR1YWwgdm9pZCBjbG9z
ZVdpbmRvdygpOwotCi0gICAgdmlydHVhbCB2b2lkIGF0dGFjaFdpbmRvdygpOwotICAgIHZpcnR1
YWwgdm9pZCBkZXRhY2hXaW5kb3coKTsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRBdHRhY2hlZFdp
bmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpOworICAgIHZpcnR1YWwgdm9pZCBvcGVuSW5zcGVj
dG9yRnJvbnRlbmQoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlciopOwogCiAgICAgdmlydHVh
bCB2b2lkIGhpZ2hsaWdodChXZWJDb3JlOjpOb2RlKik7CiAgICAgdmlydHVhbCB2b2lkIGhpZGVI
aWdobGlnaHQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgaW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBX
ZWJDb3JlOjpTdHJpbmcmIG5ld1VSTCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgcG9wdWxhdGVTZXR0
aW5nKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYga2V5LCBXZWJDb3JlOjpTdHJpbmcqIHZhbHVlKTsK
ICAgICB2aXJ0dWFsIHZvaWQgc3RvcmVTZXR0aW5nKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYga2V5
LCBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIHZhbHVlKTsKIAotICAgIHZpcnR1YWwgdm9pZCBpbnNw
ZWN0b3JXaW5kb3dPYmplY3RDbGVhcmVkKCk7Citwcml2YXRlOgorICAgIFdlYlZpZXcgKm1fd2Vi
VmlldzsKKyAgICBSZXRhaW5QdHI8V2ViTm9kZUhpZ2hsaWdodGVyPiBtX2hpZ2hsaWdodGVyOwor
fTsKKworY2xhc3MgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQgOiBwdWJsaWMgV2ViQ29yZTo6
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbCB7CitwdWJsaWM6CisgICAgV2ViSW5zcGVjdG9y
RnJvbnRlbmRDbGllbnQoV2ViVmlldyosIFdlYkluc3BlY3RvcldpbmRvd0NvbnRyb2xsZXIqLCBX
ZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyKiwgV2ViQ29yZTo6UGFnZSopOworCisgICAgdmly
dHVhbCB2b2lkIGZyb250ZW5kTG9hZGVkKCk7CisgICAgCisgICAgdmlydHVhbCBXZWJDb3JlOjpT
dHJpbmcgbG9jYWxpemVkU3RyaW5nc1VSTCgpOworICAgIHZpcnR1YWwgV2ViQ29yZTo6U3RyaW5n
IGhpZGRlblBhbmVscygpOworICAgIAorICAgIHZpcnR1YWwgdm9pZCBicmluZ1RvRnJvbnQoKTsK
KyAgICB2aXJ0dWFsIHZvaWQgY2xvc2VXaW5kb3coKTsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQg
YXR0YWNoV2luZG93KCk7CisgICAgdmlydHVhbCB2b2lkIGRldGFjaFdpbmRvdygpOworICAgIAor
ICAgIHZpcnR1YWwgdm9pZCBzZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQp
OworICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6OlN0
cmluZyYgbmV3VVJMKTsKIAogcHJpdmF0ZToKICAgICB2b2lkIHVwZGF0ZVdpbmRvd1RpdGxlKCkg
Y29uc3Q7CiAKLSAgICBXZWJWaWV3ICptX3dlYlZpZXc7CisgICAgV2ViVmlldyogbV9pbnNwZWN0
ZWRXZWJWaWV3OwogICAgIFJldGFpblB0cjxXZWJJbnNwZWN0b3JXaW5kb3dDb250cm9sbGVyPiBt
X3dpbmRvd0NvbnRyb2xsZXI7CiAgICAgV2ViQ29yZTo6U3RyaW5nIG1faW5zcGVjdGVkVVJMOwog
fTsKZGlmZiAtLWdpdCBhL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xp
ZW50Lm1tIGIvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQubW0K
aW5kZXggYzVmMTcyOS4uYWJjNmU2MCAxMDA2NDQKLS0tIGEvV2ViS2l0L21hYy9XZWJDb3JlU3Vw
cG9ydC9XZWJJbnNwZWN0b3JDbGllbnQubW0KKysrIGIvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9y
dC9XZWJJbnNwZWN0b3JDbGllbnQubW0KQEAgLTQxLDYgKzQxLDcgQEAKICNpbXBvcnQgPFdlYkNv
cmUvUGFnZS5oPgogI2ltcG9ydCA8V2ViS2l0L0RPTUV4dGVuc2lvbnMuaD4KICNpbXBvcnQgPFdl
YktpdFN5c3RlbUludGVyZmFjZS5oPgorI2ltcG9ydCA8d3RmL1Bhc3NPd25QdHIuaD4KIAogdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTQ4LDQ1ICs0OSw5MCBAQCB1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKIEBwcml2YXRlCiAgICAgV2ViVmlldyAqX2luc3BlY3RlZFdlYlZpZXc7CiAg
ICAgV2ViVmlldyAqX3dlYlZpZXc7Ci0gICAgV2ViTm9kZUhpZ2hsaWdodCAqX2N1cnJlbnRIaWdo
bGlnaHQ7CisgICAgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQqIF9mcm9udGVuZENsaWVudDsK
ICAgICBCT09MIF9hdHRhY2hlZFRvSW5zcGVjdGVkV2ViVmlldzsKICAgICBCT09MIF9zaG91bGRB
dHRhY2g7CiAgICAgQk9PTCBfdmlzaWJsZTsKLSAgICBCT09MIF9tb3ZpbmdXaW5kb3dzOworICAg
IEJPT0wgX2Rlc3Ryb3lpbmdJbnNwZWN0b3JWaWV3OwogfQogLSAoaWQpaW5pdFdpdGhJbnNwZWN0
ZWRXZWJWaWV3OihXZWJWaWV3ICopd2ViVmlldzsKLS0gKEJPT0wpaW5zcGVjdG9yVmlzaWJsZTsK
IC0gKFdlYlZpZXcgKil3ZWJWaWV3OwogLSAodm9pZClhdHRhY2g7CiAtICh2b2lkKWRldGFjaDsK
Ky0gKEJPT0wpYXR0YWNoZWQ7CistICh2b2lkKXNldEZyb250ZW5kQ2xpZW50OihXZWJJbnNwZWN0
b3JGcm9udGVuZENsaWVudCopZnJvbnRlbmRDbGllbnQ7CiAtICh2b2lkKXNldEF0dGFjaGVkV2lu
ZG93SGVpZ2h0Oih1bnNpZ25lZCloZWlnaHQ7CistICh2b2lkKWRlc3Ryb3lJbnNwZWN0b3JWaWV3
OworQGVuZAorCisjcHJhZ21hIG1hcmsgLQorCitAaW50ZXJmYWNlIFdlYk5vZGVIaWdobGlnaHRl
ciA6IE5TT2JqZWN0IHsKK0Bwcml2YXRlCisgICAgV2ViVmlldyAqX2luc3BlY3RlZFdlYlZpZXc7
CisgICAgV2ViTm9kZUhpZ2hsaWdodCAqX2N1cnJlbnRIaWdobGlnaHQ7Cit9CistIChpZClpbml0
V2l0aEluc3BlY3RlZFdlYlZpZXc6KFdlYlZpZXcgKil3ZWJWaWV3OwogLSAodm9pZCloaWdobGln
aHROb2RlOihET01Ob2RlICopbm9kZTsKIC0gKHZvaWQpaGlkZUhpZ2hsaWdodDsKIEBlbmQKIAog
I3ByYWdtYSBtYXJrIC0KIAorCiBXZWJJbnNwZWN0b3JDbGllbnQ6OldlYkluc3BlY3RvckNsaWVu
dChXZWJWaWV3ICp3ZWJWaWV3KQogOiBtX3dlYlZpZXcod2ViVmlldykKKywgbV9oaWdobGlnaHRl
cihBZG9wdE5TLCBbW1dlYk5vZGVIaWdobGlnaHRlciBhbGxvY10gaW5pdFdpdGhJbnNwZWN0ZWRX
ZWJWaWV3OndlYlZpZXddKQogewogfQogCiB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6aW5zcGVj
dG9yRGVzdHJveWVkKCkKIHsKLSAgICBbW21fd2luZG93Q29udHJvbGxlci5nZXQoKSB3ZWJWaWV3
XSBjbG9zZV07CiAgICAgZGVsZXRlIHRoaXM7CiB9CiAKLVBhZ2UqIFdlYkluc3BlY3RvckNsaWVu
dDo6Y3JlYXRlUGFnZSgpCit2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6b3Blbkluc3BlY3RvckZy
b250ZW5kKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIpCit7CisgICAg
UmV0YWluUHRyPFdlYkluc3BlY3RvcldpbmRvd0NvbnRyb2xsZXI+IHdpbmRvd0NvbnRyb2xsZXIo
QWRvcHROUywgW1tXZWJJbnNwZWN0b3JXaW5kb3dDb250cm9sbGVyIGFsbG9jXSBpbml0V2l0aElu
c3BlY3RlZFdlYlZpZXc6bV93ZWJWaWV3XSk7CisgICAgUGFnZSogZnJvbnRlbmRQYWdlID0gY29y
ZShbd2luZG93Q29udHJvbGxlci5nZXQoKSB3ZWJWaWV3XSk7CisKKyAgICBmcm9udGVuZFBhZ2Ut
Pmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQobmV3IFdl
Ykluc3BlY3RvckZyb250ZW5kQ2xpZW50KG1fd2ViVmlldywgd2luZG93Q29udHJvbGxlci5nZXQo
KSwgaW5zcGVjdG9yQ29udHJvbGxlciwgZnJvbnRlbmRQYWdlKSk7Cit9CisKK3ZvaWQgV2ViSW5z
cGVjdG9yQ2xpZW50OjpoaWdobGlnaHQoTm9kZSogbm9kZSkKK3sKKyAgICBbbV9oaWdobGlnaHRl
ci5nZXQoKSBoaWdobGlnaHROb2RlOmtpdChub2RlKV07Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9y
Q2xpZW50OjpoaWRlSGlnaGxpZ2h0KCkKIHsKLSAgICBpZiAobV93aW5kb3dDb250cm9sbGVyKQot
ICAgICAgICBbW21fd2luZG93Q29udHJvbGxlci5nZXQoKSB3ZWJWaWV3XSBjbG9zZV07Ci0gICAg
bV93aW5kb3dDb250cm9sbGVyLmFkb3B0TlMoW1tXZWJJbnNwZWN0b3JXaW5kb3dDb250cm9sbGVy
IGFsbG9jXSBpbml0V2l0aEluc3BlY3RlZFdlYlZpZXc6bV93ZWJWaWV3XSk7CisgICAgW21faGln
aGxpZ2h0ZXIuZ2V0KCkgaGlkZUhpZ2hsaWdodF07Cit9CiAKLSAgICByZXR1cm4gY29yZShbbV93
aW5kb3dDb250cm9sbGVyLmdldCgpIHdlYlZpZXddKTsKK1dlYkluc3BlY3RvckZyb250ZW5kQ2xp
ZW50OjpXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudChXZWJWaWV3KiBpbnNwZWN0ZWRXZWJWaWV3
LCBXZWJJbnNwZWN0b3JXaW5kb3dDb250cm9sbGVyKiB3aW5kb3dDb250cm9sbGVyLCBJbnNwZWN0
b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyLCBQYWdlKiBmcm9udGVuZFBhZ2UpCisg
ICAgOiBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsKGluc3BlY3RvckNvbnRyb2xsZXIsICBm
cm9udGVuZFBhZ2UpCisgICAgLCBtX2luc3BlY3RlZFdlYlZpZXcoaW5zcGVjdGVkV2ViVmlldykK
KyAgICAsIG1fd2luZG93Q29udHJvbGxlcih3aW5kb3dDb250cm9sbGVyKQoreworICAgIFt3aW5k
b3dDb250cm9sbGVyIHNldEZyb250ZW5kQ2xpZW50OnRoaXNdOwogfQogCi1TdHJpbmcgV2ViSW5z
cGVjdG9yQ2xpZW50Ojpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkKK3ZvaWQgV2ViSW5zcGVjdG9yRnJv
bnRlbmRDbGllbnQ6OmZyb250ZW5kTG9hZGVkKCkKK3sKKyAgICBJbnNwZWN0b3JGcm9udGVuZENs
aWVudExvY2FsOjpmcm9udGVuZExvYWRlZCgpOworCisgICAgV2ViRnJhbWUgKmZyYW1lID0gW21f
aW5zcGVjdGVkV2ViVmlldyBtYWluRnJhbWVdOworICAgIAorICAgIFdlYkZyYW1lTG9hZERlbGVn
YXRlSW1wbGVtZW50YXRpb25DYWNoZSogaW1wbGVtZW50YXRpb25zID0gV2ViVmlld0dldEZyYW1l
TG9hZERlbGVnYXRlSW1wbGVtZW50YXRpb25zKG1faW5zcGVjdGVkV2ViVmlldyk7CisgICAgaWYg
KGltcGxlbWVudGF0aW9ucy0+ZGlkQ2xlYXJJbnNwZWN0b3JXaW5kb3dPYmplY3RGb3JGcmFtZUZ1
bmMpCisgICAgICAgIENhbGxGcmFtZUxvYWREZWxlZ2F0ZShpbXBsZW1lbnRhdGlvbnMtPmRpZENs
ZWFySW5zcGVjdG9yV2luZG93T2JqZWN0Rm9yRnJhbWVGdW5jLCBtX2luc3BlY3RlZFdlYlZpZXcs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAc2VsZWN0b3Iod2ViVmlldzpkaWRDbGVh
ckluc3BlY3RvcldpbmRvd09iamVjdDpmb3JGcmFtZTopLCBbZnJhbWUgd2luZG93T2JqZWN0XSwg
ZnJhbWUpOworCisgICAgYm9vbCBhdHRhY2hlZCA9IFttX3dpbmRvd0NvbnRyb2xsZXIuZ2V0KCkg
YXR0YWNoZWRdOworICAgIHNldEF0dGFjaGVkV2luZG93KGF0dGFjaGVkKTsKK30KKworU3RyaW5n
IFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50Ojpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkKIHsKICAg
ICBOU1N0cmluZyAqcGF0aCA9IFtbTlNCdW5kbGUgYnVuZGxlV2l0aElkZW50aWZpZXI6QCJjb20u
YXBwbGUuV2ViQ29yZSJdIHBhdGhGb3JSZXNvdXJjZTpAImxvY2FsaXplZFN0cmluZ3MiIG9mVHlw
ZTpAImpzIl07CiAgICAgaWYgKHBhdGgpCkBAIC05NCw3ICsxNDAsNyBAQCBTdHJpbmcgV2ViSW5z
cGVjdG9yQ2xpZW50Ojpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkKICAgICByZXR1cm4gU3RyaW5nKCk7
CiB9CiAKLVN0cmluZyBXZWJJbnNwZWN0b3JDbGllbnQ6OmhpZGRlblBhbmVscygpCitTdHJpbmcg
V2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmhpZGRlblBhbmVscygpCiB7CiAgICAgTlNTdHJp
bmcgKmhpZGRlblBhbmVscyA9IFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNd
IHN0cmluZ0ZvcktleTpAIldlYktpdEluc3BlY3RvckhpZGRlblBhbmVscyJdOwogICAgIGlmICho
aWRkZW5QYW5lbHMpCkBAIC0xMDIsNjMgKzE0OCw0NSBAQCBTdHJpbmcgV2ViSW5zcGVjdG9yQ2xp
ZW50OjpoaWRkZW5QYW5lbHMoKQogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAotdm9pZCBXZWJJ
bnNwZWN0b3JDbGllbnQ6OnNob3dXaW5kb3coKQordm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZENs
aWVudDo6YnJpbmdUb0Zyb250KCkKIHsKICAgICB1cGRhdGVXaW5kb3dUaXRsZSgpOwogICAgIFtt
X3dpbmRvd0NvbnRyb2xsZXIuZ2V0KCkgc2hvd1dpbmRvdzpuaWxdOwogfQogCi12b2lkIFdlYklu
c3BlY3RvckNsaWVudDo6Y2xvc2VXaW5kb3coKQordm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZENs
aWVudDo6Y2xvc2VXaW5kb3coKQogewotICAgIFttX3dpbmRvd0NvbnRyb2xsZXIuZ2V0KCkgY2xv
c2VdOworICAgIFttX3dpbmRvd0NvbnRyb2xsZXIuZ2V0KCkgZGVzdHJveUluc3BlY3RvclZpZXdd
OwogfQogCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6YXR0YWNoV2luZG93KCkKK3ZvaWQgV2Vi
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmF0dGFjaFdpbmRvdygpCiB7CiAgICAgW21fd2luZG93
Q29udHJvbGxlci5nZXQoKSBhdHRhY2hdOworICAgIHJlc3RvcmVBdHRhY2hlZFdpbmRvd0hlaWdo
dCgpOwogfQogCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6ZGV0YWNoV2luZG93KCkKK3ZvaWQg
V2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmRldGFjaFdpbmRvdygpCiB7CiAgICAgW21fd2lu
ZG93Q29udHJvbGxlci5nZXQoKSBkZXRhY2hdOwogfQogCi12b2lkIFdlYkluc3BlY3RvckNsaWVu
dDo6c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KQordm9pZCBXZWJJbnNw
ZWN0b3JGcm9udGVuZENsaWVudDo6c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVp
Z2h0KQogewogICAgIFttX3dpbmRvd0NvbnRyb2xsZXIuZ2V0KCkgc2V0QXR0YWNoZWRXaW5kb3dI
ZWlnaHQ6aGVpZ2h0XTsKIH0KIAotdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmhpZ2hsaWdodChO
b2RlKiBub2RlKQotewotICAgIFttX3dpbmRvd0NvbnRyb2xsZXIuZ2V0KCkgaGlnaGxpZ2h0Tm9k
ZTpraXQobm9kZSldOwotfQotCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6aGlkZUhpZ2hsaWdo
dCgpCi17Ci0gICAgW21fd2luZG93Q29udHJvbGxlci5nZXQoKSBoaWRlSGlnaGxpZ2h0XTsKLX0K
LQotdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6Omluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3Ry
aW5nJiBuZXdVUkwpCit2b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjppbnNwZWN0ZWRV
UkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYgbmV3VVJMKQogewogICAgIG1faW5zcGVjdGVkVVJMID0g
bmV3VVJMOwogICAgIHVwZGF0ZVdpbmRvd1RpdGxlKCk7CiB9CiAKLXZvaWQgV2ViSW5zcGVjdG9y
Q2xpZW50Ojp1cGRhdGVXaW5kb3dUaXRsZSgpIGNvbnN0Cit2b2lkIFdlYkluc3BlY3RvckZyb250
ZW5kQ2xpZW50Ojp1cGRhdGVXaW5kb3dUaXRsZSgpIGNvbnN0CiB7CiAgICAgTlNTdHJpbmcgKnRp
dGxlID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6VUlfU1RSSU5HKCJXZWIgSW5zcGVjdG9y
IOKAlCAlQCIsICJXZWIgSW5zcGVjdG9yIHdpbmRvdyB0aXRsZSIpLCAoTlNTdHJpbmcgKiltX2lu
c3BlY3RlZFVSTF07CiAgICAgW1ttX3dpbmRvd0NvbnRyb2xsZXIuZ2V0KCkgd2luZG93XSBzZXRU
aXRsZTp0aXRsZV07CiB9CiAKLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjppbnNwZWN0b3JXaW5k
b3dPYmplY3RDbGVhcmVkKCkKLXsKLSAgICBXZWJGcmFtZSAqZnJhbWUgPSBbbV93ZWJWaWV3IG1h
aW5GcmFtZV07Ci0gICAgCi0gICAgV2ViRnJhbWVMb2FkRGVsZWdhdGVJbXBsZW1lbnRhdGlvbkNh
Y2hlKiBpbXBsZW1lbnRhdGlvbnMgPSBXZWJWaWV3R2V0RnJhbWVMb2FkRGVsZWdhdGVJbXBsZW1l
bnRhdGlvbnMobV93ZWJWaWV3KTsKLSAgICBpZiAoaW1wbGVtZW50YXRpb25zLT5kaWRDbGVhcklu
c3BlY3RvcldpbmRvd09iamVjdEZvckZyYW1lRnVuYykKLSAgICAgICAgQ2FsbEZyYW1lTG9hZERl
bGVnYXRlKGltcGxlbWVudGF0aW9ucy0+ZGlkQ2xlYXJJbnNwZWN0b3JXaW5kb3dPYmplY3RGb3JG
cmFtZUZ1bmMsIG1fd2ViVmlldywKLSAgICAgICAgICBAc2VsZWN0b3Iod2ViVmlldzpkaWRDbGVh
ckluc3BlY3RvcldpbmRvd09iamVjdDpmb3JGcmFtZTopLCBbZnJhbWUgd2luZG93T2JqZWN0XSwg
ZnJhbWUpOwotfQogCiAjcHJhZ21hIG1hcmsgLQogCkBAIC0yMjEsMTggKzI0OSwxMiBAQCB2b2lk
IFdlYkluc3BlY3RvckNsaWVudDo6aW5zcGVjdG9yV2luZG93T2JqZWN0Q2xlYXJlZCgpCiAKIC0g
KHZvaWQpZGVhbGxvYwogewotICAgIEFTU0VSVCghX2N1cnJlbnRIaWdobGlnaHQpOwogICAgIFtf
d2ViVmlldyByZWxlYXNlXTsKICAgICBbc3VwZXIgZGVhbGxvY107CiB9CiAKICNwcmFnbWEgbWFy
ayAtCiAKLS0gKEJPT0wpaW5zcGVjdG9yVmlzaWJsZQotewotICAgIHJldHVybiBfdmlzaWJsZTsK
LX0KLQogLSAoV2ViVmlldyAqKXdlYlZpZXcKIHsKICAgICByZXR1cm4gX3dlYlZpZXc7CkBAIC0y
NzEsMTEgKzI5Myw3IEBAIHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjppbnNwZWN0b3JXaW5kb3dP
YmplY3RDbGVhcmVkKCkKIAogLSAoQk9PTCl3aW5kb3dTaG91bGRDbG9zZTooaWQpc2VuZGVyCiB7
Ci0gICAgX3Zpc2libGUgPSBOTzsKLQotICAgIFtfaW5zcGVjdGVkV2ViVmlldyBwYWdlXS0+aW5z
cGVjdG9yQ29udHJvbGxlcigpLT5zZXRXaW5kb3dWaXNpYmxlKGZhbHNlKTsKLQotICAgIFtzZWxm
IGhpZGVIaWdobGlnaHRdOworICAgIFtzZWxmIGRlc3Ryb3lJbnNwZWN0b3JWaWV3XTsKIAogICAg
IHJldHVybiBZRVM7CiB9CkBAIC0yODcsMTEgKzMwNSw2IEBAIHZvaWQgV2ViSW5zcGVjdG9yQ2xp
ZW50OjppbnNwZWN0b3JXaW5kb3dPYmplY3RDbGVhcmVkKCkKIAogICAgIF92aXNpYmxlID0gTk87
CiAKLSAgICBpZiAoIV9tb3ZpbmdXaW5kb3dzKQotICAgICAgICBbX2luc3BlY3RlZFdlYlZpZXcg
cGFnZV0tPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0V2luZG93VmlzaWJsZShmYWxzZSk7Ci0K
LSAgICBbc2VsZiBoaWRlSGlnaGxpZ2h0XTsKLQogICAgIGlmIChfYXR0YWNoZWRUb0luc3BlY3Rl
ZFdlYlZpZXcpIHsKICAgICAgICAgaWYgKFtfaW5zcGVjdGVkV2ViVmlldyBfaXNDbG9zZWRdKQog
ICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzI4LDcgKzM0MSw3IEBAIHZvaWQgV2ViSW5zcGVjdG9y
Q2xpZW50OjppbnNwZWN0b3JXaW5kb3dPYmplY3RDbGVhcmVkKCkKICAgICBTdHJpbmcgc2hvdWxk
QXR0YWNoID0gW19pbnNwZWN0ZWRXZWJWaWV3IHBhZ2VdLT5pbnNwZWN0b3JDb250cm9sbGVyKCkt
PnNldHRpbmcoSW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zcGVjdG9yU3RhcnRzQXR0YWNoZWRTZXR0
aW5nTmFtZSgpKTsKICAgICBfc2hvdWxkQXR0YWNoID0gc2hvdWxkQXR0YWNoICE9ICJmYWxzZSI7
CiAgICAgCi0gICAgaWYgKF9zaG91bGRBdHRhY2ggJiYgIVtfaW5zcGVjdGVkV2ViVmlldyBwYWdl
XS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5jYW5BdHRhY2hXaW5kb3coKSkKKyAgICBpZiAoX3No
b3VsZEF0dGFjaCAmJiAhX2Zyb250ZW5kQ2xpZW50LT5jYW5BdHRhY2hXaW5kb3coKSkKICAgICAg
ICAgX3Nob3VsZEF0dGFjaCA9IE5POwogCiAgICAgaWYgKF9zaG91bGRBdHRhY2gpIHsKQEAgLTM1
Miw4ICszNjUsNiBAQCB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6aW5zcGVjdG9yV2luZG93T2Jq
ZWN0Q2xlYXJlZCgpCiAKICAgICAgICAgW3N1cGVyIHNob3dXaW5kb3c6bmlsXTsKICAgICB9Ci0K
LSAgICBbX2luc3BlY3RlZFdlYlZpZXcgcGFnZV0tPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0
V2luZG93VmlzaWJsZSh0cnVlLCBfc2hvdWxkQXR0YWNoKTsKIH0KIAogI3ByYWdtYSBtYXJrIC0K
QEAgLTM2NCwxMiArMzc1LDkgQEAgdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6Omluc3BlY3Rvcldp
bmRvd09iamVjdENsZWFyZWQoKQogICAgICAgICByZXR1cm47CiAKICAgICBbX2luc3BlY3RlZFdl
YlZpZXcgcGFnZV0tPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0U2V0dGluZyhJbnNwZWN0b3JD
b250cm9sbGVyOjppbnNwZWN0b3JTdGFydHNBdHRhY2hlZFNldHRpbmdOYW1lKCksICJ0cnVlIik7
Ci0gICAgX21vdmluZ1dpbmRvd3MgPSBZRVM7CiAKICAgICBbc2VsZiBjbG9zZV07CiAgICAgW3Nl
bGYgc2hvd1dpbmRvdzpuaWxdOwotCi0gICAgX21vdmluZ1dpbmRvd3MgPSBOTzsKIH0KIAogLSAo
dm9pZClkZXRhY2gKQEAgLTM3OCwxMyArMzg2LDE5IEBAIHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50
OjppbnNwZWN0b3JXaW5kb3dPYmplY3RDbGVhcmVkKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
W19pbnNwZWN0ZWRXZWJWaWV3IHBhZ2VdLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnNldFNldHRp
bmcoSW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zcGVjdG9yU3RhcnRzQXR0YWNoZWRTZXR0aW5nTmFt
ZSgpLCAiZmFsc2UiKTsKLSAgICBfbW92aW5nV2luZG93cyA9IFlFUzsKIAogICAgIFtzZWxmIGNs
b3NlXTsKICAgICBbc2VsZiBzaG93V2luZG93Om5pbF07Cit9CiAKLSAgICBfbW92aW5nV2luZG93
cyA9IE5POworLSAoQk9PTClhdHRhY2hlZAoreworICAgIHJldHVybiBfYXR0YWNoZWRUb0luc3Bl
Y3RlZFdlYlZpZXc7Cit9CiAKKy0gKHZvaWQpc2V0RnJvbnRlbmRDbGllbnQ6KFdlYkluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50Kilmcm9udGVuZENsaWVudAoreworICAgIF9mcm9udGVuZENsaWVudCA9
IGZyb250ZW5kQ2xpZW50OwogfQogCiAtICh2b2lkKXNldEF0dGFjaGVkV2luZG93SGVpZ2h0Oih1
bnNpZ25lZCloZWlnaHQKQEAgLTQwNSwyOSArNDE5LDE3IEBAIHZvaWQgV2ViSW5zcGVjdG9yQ2xp
ZW50OjppbnNwZWN0b3JXaW5kb3dPYmplY3RDbGVhcmVkKCkKICAgICBbZnJhbWVWaWV3IHNldEZy
YW1lOmZyYW1lVmlld1JlY3RdOwogfQogCi0jcHJhZ21hIG1hcmsgLQotCi0tICh2b2lkKWhpZ2hs
aWdodE5vZGU6KERPTU5vZGUgKilub2RlCistICh2b2lkKWRlc3Ryb3lJbnNwZWN0b3JWaWV3CiB7
Ci0gICAgLy8gVGhlIHNjcm9sbHZpZXcncyBjb250ZW50IHZpZXcgc3RheXMgYXJvdW5kIGJldHdl
ZW4gcGFnZSBuYXZpZ2F0aW9ucywgc28gdGFyZ2V0IGl0Ci0gICAgTlNWaWV3ICp2aWV3ID0gW1tb
W1tfaW5zcGVjdGVkV2ViVmlldyBtYWluRnJhbWVdIGZyYW1lVmlld10gZG9jdW1lbnRWaWV3XSBl
bmNsb3NpbmdTY3JvbGxWaWV3XSBjb250ZW50Vmlld107Ci0gICAgaWYgKCFbdmlldyB3aW5kb3dd
KQotICAgICAgICByZXR1cm47IC8vIHNraXAgdGhlIGhpZ2hsaWdodCBpZiB3ZSBoYXZlIG5vIHdp
bmRvdyAoZS5nLiBoaWRkZW4gdGFiKQotCi0gICAgaWYgKCFfY3VycmVudEhpZ2hsaWdodCkgewot
ICAgICAgICBfY3VycmVudEhpZ2hsaWdodCA9IFtbV2ViTm9kZUhpZ2hsaWdodCBhbGxvY10gaW5p
dFdpdGhUYXJnZXRWaWV3OnZpZXcgaW5zcGVjdG9yQ29udHJvbGxlcjpbX2luc3BlY3RlZFdlYlZp
ZXcgcGFnZV0tPmluc3BlY3RvckNvbnRyb2xsZXIoKV07Ci0gICAgICAgIFtfY3VycmVudEhpZ2hs
aWdodCBzZXREZWxlZ2F0ZTpzZWxmXTsKLSAgICAgICAgW19jdXJyZW50SGlnaGxpZ2h0IGF0dGFj
aF07Ci0gICAgfSBlbHNlCi0gICAgICAgIFtbX2N1cnJlbnRIaWdobGlnaHQgaGlnaGxpZ2h0Vmll
d10gc2V0TmVlZHNEaXNwbGF5OllFU107Ci19CisgICAgaWYgKF9kZXN0cm95aW5nSW5zcGVjdG9y
VmlldykKKyAgICAgICAgcmV0dXJuOworICAgIF9kZXN0cm95aW5nSW5zcGVjdG9yVmlldyA9IFlF
UzsKIAotLSAodm9pZCloaWRlSGlnaGxpZ2h0Ci17Ci0gICAgW19jdXJyZW50SGlnaGxpZ2h0IGRl
dGFjaF07Ci0gICAgW19jdXJyZW50SGlnaGxpZ2h0IHNldERlbGVnYXRlOm5pbF07Ci0gICAgW19j
dXJyZW50SGlnaGxpZ2h0IHJlbGVhc2VdOwotICAgIF9jdXJyZW50SGlnaGxpZ2h0ID0gbmlsOwor
ICAgIGlmIChfYXR0YWNoZWRUb0luc3BlY3RlZFdlYlZpZXcpCisgICAgICAgIFtzZWxmIGNsb3Nl
XTsKKyAgICBfdmlzaWJsZSA9IE5POworICAgIFtfaW5zcGVjdGVkV2ViVmlldyBwYWdlXS0+aW5z
cGVjdG9yQ29udHJvbGxlcigpLT5jbG9zZSgpOworICAgIFtfd2ViVmlldyBjbG9zZV07CiB9CiAK
ICNwcmFnbWEgbWFyayAtCkBAIC00OTcsMyArNDk5LDYwIEBAIHZvaWQgV2ViSW5zcGVjdG9yQ2xp
ZW50OjppbnNwZWN0b3JXaW5kb3dPYmplY3RDbGVhcmVkKCkKIH0KIAogQGVuZAorCisKKyNwcmFn
bWEgbWFyayAtCisKK0BpbXBsZW1lbnRhdGlvbiBXZWJOb2RlSGlnaGxpZ2h0ZXIKKy0gKGlkKWlu
aXRXaXRoSW5zcGVjdGVkV2ViVmlldzooV2ViVmlldyAqKXdlYlZpZXcKK3sKKyAgICAvLyBEb24n
dCByZXRhaW4gdG8gYXZvaWQgYSBjaXJjdWxhciByZWZlcmVuY2UKKyAgICBfaW5zcGVjdGVkV2Vi
VmlldyA9IHdlYlZpZXc7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYwor
eworICAgIEFTU0VSVCghX2N1cnJlbnRIaWdobGlnaHQpOworICAgIFtzdXBlciBkZWFsbG9jXTsK
K30KKworI3ByYWdtYSBtYXJrIC0KKworLSAodm9pZCloaWdobGlnaHROb2RlOihET01Ob2RlICop
bm9kZQoreworICAgIC8vIFRoZSBzY3JvbGx2aWV3J3MgY29udGVudCB2aWV3IHN0YXlzIGFyb3Vu
ZCBiZXR3ZWVuIHBhZ2UgbmF2aWdhdGlvbnMsIHNvIHRhcmdldCBpdAorICAgIE5TVmlldyAqdmll
dyA9IFtbW1tbX2luc3BlY3RlZFdlYlZpZXcgbWFpbkZyYW1lXSBmcmFtZVZpZXddIGRvY3VtZW50
Vmlld10gZW5jbG9zaW5nU2Nyb2xsVmlld10gY29udGVudFZpZXddOworICAgIGlmICghW3ZpZXcg
d2luZG93XSkKKyAgICAgICAgcmV0dXJuOyAvLyBza2lwIHRoZSBoaWdobGlnaHQgaWYgd2UgaGF2
ZSBubyB3aW5kb3cgKGUuZy4gaGlkZGVuIHRhYikKKyAgICAKKyAgICBpZiAoIV9jdXJyZW50SGln
aGxpZ2h0KSB7CisgICAgICAgIF9jdXJyZW50SGlnaGxpZ2h0ID0gW1tXZWJOb2RlSGlnaGxpZ2h0
IGFsbG9jXSBpbml0V2l0aFRhcmdldFZpZXc6dmlldyBpbnNwZWN0b3JDb250cm9sbGVyOltfaW5z
cGVjdGVkV2ViVmlldyBwYWdlXS0+aW5zcGVjdG9yQ29udHJvbGxlcigpXTsKKyAgICAgICAgW19j
dXJyZW50SGlnaGxpZ2h0IHNldERlbGVnYXRlOnNlbGZdOworICAgICAgICBbX2N1cnJlbnRIaWdo
bGlnaHQgYXR0YWNoXTsKKyAgICB9IGVsc2UKKyAgICAgICAgW1tfY3VycmVudEhpZ2hsaWdodCBo
aWdobGlnaHRWaWV3XSBzZXROZWVkc0Rpc3BsYXk6WUVTXTsKK30KKworLSAodm9pZCloaWRlSGln
aGxpZ2h0Cit7CisgICAgW19jdXJyZW50SGlnaGxpZ2h0IGRldGFjaF07CisgICAgW19jdXJyZW50
SGlnaGxpZ2h0IHNldERlbGVnYXRlOm5pbF07CisgICAgW19jdXJyZW50SGlnaGxpZ2h0IHJlbGVh
c2VdOworICAgIF9jdXJyZW50SGlnaGxpZ2h0ID0gbmlsOworfQorCisjcHJhZ21hIG1hcmsgLQor
I3ByYWdtYSBtYXJrIFdlYk5vZGVIaWdobGlnaHQgZGVsZWdhdGUKKworLSAodm9pZClkaWRBdHRh
Y2hXZWJOb2RlSGlnaGxpZ2h0OihXZWJOb2RlSGlnaGxpZ2h0ICopaGlnaGxpZ2h0Cit7CisgICAg
W19pbnNwZWN0ZWRXZWJWaWV3IHNldEN1cnJlbnROb2RlSGlnaGxpZ2h0OmhpZ2hsaWdodF07Cit9
CisKKy0gKHZvaWQpd2lsbERldGFjaFdlYk5vZGVIaWdobGlnaHQ6KFdlYk5vZGVIaWdobGlnaHQg
KiloaWdobGlnaHQKK3sKKyAgICBbX2luc3BlY3RlZFdlYlZpZXcgc2V0Q3VycmVudE5vZGVIaWdo
bGlnaHQ6bmlsXTsKK30KKyAgICAKK0BlbmQKZGlmZiAtLWdpdCBhL1dlYktpdC9tYWMvV2ViSW5z
cGVjdG9yL1dlYkluc3BlY3Rvci5tbSBiL1dlYktpdC9tYWMvV2ViSW5zcGVjdG9yL1dlYkluc3Bl
Y3Rvci5tbQppbmRleCAyNThkZDAxLi45YjE3NDU5IDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL1dl
Ykluc3BlY3Rvci9XZWJJbnNwZWN0b3IubW0KKysrIGIvV2ViS2l0L21hYy9XZWJJbnNwZWN0b3Iv
V2ViSW5zcGVjdG9yLm1tCkBAIC0xNzUsMTQgKzE3NSwxMCBAQCB1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKIAogLSAodm9pZClhdHRhY2g6KGlkKXNlbmRlcgogewotICAgIGlmIChQYWdlKiBwYWdl
ID0gY29yZShfd2ViVmlldykpCi0gICAgICAgIHBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+
YXR0YWNoV2luZG93KCk7CiB9CiAKIC0gKHZvaWQpZGV0YWNoOihpZClzZW5kZXIKIHsKLSAgICBp
ZiAoUGFnZSogcGFnZSA9IGNvcmUoX3dlYlZpZXcpKQotICAgICAgICBwYWdlLT5pbnNwZWN0b3JD
b250cm9sbGVyKCktPmRldGFjaFdpbmRvdygpOwogfQogCiAtICh2b2lkKWV2YWx1YXRlSW5Gcm9u
dGVuZDooaWQpc2VuZGVyIGNhbGxJZDoobG9uZyljYWxsSWQgc2NyaXB0OihOU1N0cmluZyAqKXNj
cmlwdApkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L0FwaS9xd2ViaW5zcGVjdG9yLmNwcCBiL1dlYktp
dC9xdC9BcGkvcXdlYmluc3BlY3Rvci5jcHAKaW5kZXggYzNlZjUzMC4uYzBlNTI3NyAxMDA2NDQK
LS0tIGEvV2ViS2l0L3F0L0FwaS9xd2ViaW5zcGVjdG9yLmNwcAorKysgYi9XZWJLaXQvcXQvQXBp
L3F3ZWJpbnNwZWN0b3IuY3BwCkBAIC0xNjEsNiArMTYxLDEwIEBAIHZvaWQgUVdlYkluc3BlY3Rv
cjo6c2hvd0V2ZW50KFFTaG93RXZlbnQqIGV2ZW50KQogLyohIFxyZWltcCAqLwogdm9pZCBRV2Vi
SW5zcGVjdG9yOjpoaWRlRXZlbnQoUUhpZGVFdmVudCogZXZlbnQpCiB7CisjaWYgRU5BQkxFKElO
U1BFQ1RPUikKKyAgICBpZiAoZC0+cGFnZSkKKyAgICAgICAgZC0+cGFnZS0+ZC0+aW5zcGVjdG9y
Q29udHJvbGxlcigpLT5jbG9zZSgpOworI2VuZGlmCiB9CiAKIC8qISBccmVpbXAgKi8KQEAgLTE2
OCw3ICsxNzIsNyBAQCB2b2lkIFFXZWJJbnNwZWN0b3I6OmNsb3NlRXZlbnQoUUNsb3NlRXZlbnQq
IGV2ZW50KQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAgICAgaWYgKGQtPnBhZ2UpCi0gICAg
ICAgIGQtPnBhZ2UtPmQtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0V2luZG93VmlzaWJsZShm
YWxzZSk7CisgICAgICAgIGQtPnBhZ2UtPmQtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+Y2xvc2Uo
KTsKICNlbmRpZgogfQogCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQXBpL3F3ZWJpbnNwZWN0b3Iu
aCBiL1dlYktpdC9xdC9BcGkvcXdlYmluc3BlY3Rvci5oCmluZGV4IDZjZGE0NzkuLmYxOTJlOTIg
MTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9BcGkvcXdlYmluc3BlY3Rvci5oCisrKyBiL1dlYktpdC9x
dC9BcGkvcXdlYmluc3BlY3Rvci5oCkBAIC01Miw1ICs1Miw2IEBAIHByaXZhdGU6CiAgICAgZnJp
ZW5kIGNsYXNzIFFXZWJQYWdlOwogICAgIGZyaWVuZCBjbGFzcyBRV2ViUGFnZVByaXZhdGU7CiAg
ICAgZnJpZW5kIGNsYXNzIFdlYkNvcmU6Okluc3BlY3RvckNsaWVudFF0OworICAgIGZyaWVuZCBj
bGFzcyBXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0OwogfTsKICNlbmRpZgpkaWZm
IC0tZ2l0IGEvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5oIGIvV2ViS2l0L3F0L0FwaS9xd2VicGFn
ZS5oCmluZGV4IDQ3NjZjYmQuLjA3NmZiN2MgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9BcGkvcXdl
YnBhZ2UuaAorKysgYi9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmgKQEAgLTU0LDYgKzU0LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEVkaXRvckNsaWVudFF0OwogICAgIGNsYXNz
IEZyYW1lTG9hZGVyQ2xpZW50UXQ7CiAgICAgY2xhc3MgSW5zcGVjdG9yQ2xpZW50UXQ7CisgICAg
Y2xhc3MgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdDsKICAgICBjbGFzcyBSZXNvdXJjZUhhbmRs
ZTsKICAgICBjbGFzcyBIaXRUZXN0UmVzdWx0OwogICAgIGNsYXNzIFFOZXR3b3JrUmVwbHlIYW5k
bGVyOwpAQCAtMzYxLDYgKzM2Miw3IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFdlYkNv
cmU6OkVkaXRvckNsaWVudFF0OwogICAgIGZyaWVuZCBjbGFzcyBXZWJDb3JlOjpGcmFtZUxvYWRl
ckNsaWVudFF0OwogICAgIGZyaWVuZCBjbGFzcyBXZWJDb3JlOjpJbnNwZWN0b3JDbGllbnRRdDsK
KyAgICBmcmllbmQgY2xhc3MgV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdDsKICAg
ICBmcmllbmQgY2xhc3MgV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU7CiAgICAgZnJpZW5kIGNsYXNz
IFdlYkNvcmU6OlFOZXR3b3JrUmVwbHlIYW5kbGVyOwogfTsKZGlmZiAtLWdpdCBhL1dlYktpdC9x
dC9DaGFuZ2VMb2cgYi9XZWJLaXQvcXQvQ2hhbmdlTG9nCmluZGV4IDRjMmY0ZTEuLjNkMDdhMWYg
MTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L3F0L0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDMyIEBACisyMDEwLTAzLTExICBZdXJ5IFNlbWlraGF0c2t5IDx5dXJ5c0Bj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgSW50cm9kdWNlIEluc3BlY3RvckZyb250ZW5kQ2xpZW50IHRoYXQgcHJvdmlkZXMgSW5z
cGVjdG9yRnJvbnRlbmQgd2l0aCBhbiBpbnRlcmZhY2UgdG8gdGhlIGVtYmVkZGVyLiBJbnNwZWN0
b3JDbGllbnQgbm93IHNlcnZlcyBhcyBhIGRlbGVnYXRlIGZvciBJbnNwZWN0b3JDb250cm9sbGVy
IGFuZCBkb2VzIG5vdCBjb250YWluIG1ldGhvZHMgZm9yIG1hbmFnaW5nIGluc3BlY3RvciBmcm9u
dGVuZCB3aW5kb3cuIFRoYXQgYWxsb3dzIHRvIGNyZWF0ZSByZW1vdGUgSW5zcGVjdG9yRnJvbnRl
bmRIb3N0LgorCisgICAgICAgIEludHJvZHVjZSBJbnNwZWN0b3JGcm9udGVuZENsaWVudCB0aGF0
IHdvdWxkIHByb3ZpZGUgSW5zcGVjdG9yRnJvbnRlbmQgd2l0aCBhbiBpbnRlcmZhY2UgdG8gdGhl
IGVtYmVkZGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0zNTAzNgorCisgICAgICAgICogQXBpL3F3ZWJpbnNwZWN0b3IuY3BwOgorICAgICAgICAoUVdl
Ykluc3BlY3Rvcjo6aGlkZUV2ZW50KToKKyAgICAgICAgKFFXZWJJbnNwZWN0b3I6OmNsb3NlRXZl
bnQpOgorICAgICAgICAqIEFwaS9xd2ViaW5zcGVjdG9yLmg6CisgICAgICAgICogQXBpL3F3ZWJw
YWdlLmg6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50UXQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2xpZW50UXQ6Om9wZW5JbnNwZWN0b3JGcm9udGVu
ZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0OjpJbnNwZWN0
b3JGcm9udGVuZENsaWVudFF0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5k
Q2xpZW50UXQ6OmZyb250ZW5kTG9hZGVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZy
b250ZW5kQ2xpZW50UXQ6OmxvY2FsaXplZFN0cmluZ3NVUkwpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdDo6aGlkZGVuUGFuZWxzKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50UXQ6OmJyaW5nVG9Gcm9udCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0OjpjbG9zZVdpbmRvdyk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0OjphdHRhY2hXaW5kb3cpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdDo6ZGV0YWNoV2luZG93KToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50UXQ6OnNldEF0dGFjaGVk
V2luZG93SGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50
UXQ6Omluc3BlY3RlZFVSTENoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJv
bnRlbmRDbGllbnRRdDo6dXBkYXRlV2luZG93VGl0bGUpOgorICAgICAgICAqIFdlYkNvcmVTdXBw
b3J0L0luc3BlY3RvckNsaWVudFF0Lmg6CisKIDIwMTAtMDMtMTAgIFJvYmVydCBIb2dhbiAgPHJv
YmVydEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEhhdXNtYW5uLgpk
aWZmIC0tZ2l0IGEvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudFF0LmNw
cCBiL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRRdC5jcHAKaW5kZXgg
Y2RlNjRjOC4uY2E5ZjE3MSAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0lu
c3BlY3RvckNsaWVudFF0LmNwcAorKysgYi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5zcGVj
dG9yQ2xpZW50UXQuY3BwCkBAIC04MSwxNSArODEsMTIgQEAgdm9pZCBJbnNwZWN0b3JDbGllbnRR
dDo6aW5zcGVjdG9yRGVzdHJveWVkKCkKICAgICBkZWxldGUgdGhpczsKIH0KIAotUGFnZSogSW5z
cGVjdG9yQ2xpZW50UXQ6OmNyZWF0ZVBhZ2UoKQotewotICAgIFFXZWJWaWV3KiBpbnNwZWN0b3JW
aWV3ID0gbV9pbnNwZWN0b3JWaWV3LmdldCgpOwotICAgIGlmICghaW5zcGVjdG9yVmlldykgewot
ICAgICAgICBpbnNwZWN0b3JWaWV3ID0gbmV3IFFXZWJWaWV3OwotICAgICAgICBJbnNwZWN0b3JD
bGllbnRXZWJQYWdlKiBpbnNwZWN0b3JQYWdlID0gbmV3IEluc3BlY3RvckNsaWVudFdlYlBhZ2Uo
aW5zcGVjdG9yVmlldyk7Ci0gICAgICAgIGluc3BlY3RvclZpZXctPnNldFBhZ2UoaW5zcGVjdG9y
UGFnZSk7Ci0gICAgICAgIG1faW5zcGVjdG9yVmlldy5zZXQoaW5zcGVjdG9yVmlldyk7Ci0gICAg
fQorICAgIAordm9pZCBJbnNwZWN0b3JDbGllbnRRdDo6b3Blbkluc3BlY3RvckZyb250ZW5kKFdl
YkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXIqKQoreworICAgIFFXZWJWaWV3KiBpbnNwZWN0b3JW
aWV3ID0gbmV3IFFXZWJWaWV3OworICAgIEluc3BlY3RvckNsaWVudFdlYlBhZ2UqIGluc3BlY3Rv
clBhZ2UgPSBuZXcgSW5zcGVjdG9yQ2xpZW50V2ViUGFnZShpbnNwZWN0b3JWaWV3KTsKKyAgICBp
bnNwZWN0b3JWaWV3LT5zZXRQYWdlKGluc3BlY3RvclBhZ2UpOwogCiAgICAgUVVybCBpbnNwZWN0
b3JVcmwgPSBtX2luc3BlY3RlZFdlYlBhZ2UtPnNldHRpbmdzKCktPmluc3BlY3RvclVybCgpOwog
ICAgIGlmICghaW5zcGVjdG9yVXJsLmlzVmFsaWQoKSkKQEAgLTk4LDUwICs5NSw3IEBAIFBhZ2Uq
IEluc3BlY3RvckNsaWVudFF0OjpjcmVhdGVQYWdlKCkKICAgICBtX2luc3BlY3RlZFdlYlBhZ2Ut
PmQtPmluc3BlY3RvckZyb250ZW5kID0gaW5zcGVjdG9yVmlldzsKICAgICBtX2luc3BlY3RlZFdl
YlBhZ2UtPmQtPmdldE9yQ3JlYXRlSW5zcGVjdG9yKCktPmQtPnNldEZyb250ZW5kKGluc3BlY3Rv
clZpZXcpOwogCi0gICAgcmV0dXJuIGluc3BlY3RvclZpZXctPnBhZ2UoKS0+ZC0+cGFnZTsKLX0K
LQotU3RyaW5nIEluc3BlY3RvckNsaWVudFF0Ojpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotU3RyaW5nIElu
c3BlY3RvckNsaWVudFF0OjpoaWRkZW5QYW5lbHMoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi12b2lkIEluc3BlY3RvckNsaWVudFF0OjpzaG93
V2luZG93KCkKLXsKLSAgICB1cGRhdGVXaW5kb3dUaXRsZSgpOwotCi0jaWYgRU5BQkxFKElOU1BF
Q1RPUikKLSAgICBtX2luc3BlY3RlZFdlYlBhZ2UtPmQtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+
c2V0V2luZG93VmlzaWJsZSh0cnVlLCB0cnVlKTsKLSNlbmRpZgotfQotCi12b2lkIEluc3BlY3Rv
ckNsaWVudFF0OjpjbG9zZVdpbmRvdygpCi17Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBt
X2luc3BlY3RlZFdlYlBhZ2UtPmQtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0V2luZG93Vmlz
aWJsZShmYWxzZSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBJbnNwZWN0b3JDbGllbnRRdDo6YXR0YWNo
V2luZG93KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEluc3BlY3RvckNs
aWVudFF0OjpkZXRhY2hXaW5kb3coKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZv
aWQgSW5zcGVjdG9yQ2xpZW50UXQ6OnNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgaW5zcGVjdG9yVmlldy0+cGFnZSgpLT5kLT5w
YWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnNldEluc3BlY3RvckZyb250ZW5kQ2xpZW50KG5l
dyBJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0KG1faW5zcGVjdGVkV2ViUGFnZSwgaW5zcGVjdG9y
VmlldykpOwogfQogCiB2b2lkIEluc3BlY3RvckNsaWVudFF0OjpoaWdobGlnaHQoTm9kZSopCkBA
IC0xNTQsMjUgKzEwOCw2IEBAIHZvaWQgSW5zcGVjdG9yQ2xpZW50UXQ6OmhpZGVIaWdobGlnaHQo
KQogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ2xpZW50UXQ6Omlu
c3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJiBuZXdVUkwpCi17Ci0gICAgbV9pbnNwZWN0
ZWRVUkwgPSBuZXdVUkw7Ci0gICAgdXBkYXRlV2luZG93VGl0bGUoKTsKLX0KLQotdm9pZCBJbnNw
ZWN0b3JDbGllbnRRdDo6aW5zcGVjdG9yV2luZG93T2JqZWN0Q2xlYXJlZCgpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDbGllbnRRdDo6dXBkYXRlV2luZG93
VGl0bGUoKQotewotICAgIGlmIChtX2luc3BlY3RlZFdlYlBhZ2UtPmQtPmluc3BlY3Rvcikgewot
ICAgICAgICBRU3RyaW5nIGNhcHRpb24gPSBRQ29yZUFwcGxpY2F0aW9uOjp0cmFuc2xhdGUoIlFX
ZWJQYWdlIiwgIldlYiBJbnNwZWN0b3IgLSAlMiIpLmFyZyhtX2luc3BlY3RlZFVSTCk7Ci0gICAg
ICAgIG1faW5zcGVjdGVkV2ViUGFnZS0+ZC0+aW5zcGVjdG9yLT5zZXRXaW5kb3dUaXRsZShjYXB0
aW9uKTsKLSAgICB9Ci19Ci0KIHZvaWQgSW5zcGVjdG9yQ2xpZW50UXQ6OnBvcHVsYXRlU2V0dGlu
Zyhjb25zdCBTdHJpbmcmIGtleSwgU3RyaW5nKiBzZXR0aW5nKQogewogICAgIFFTZXR0aW5ncyBx
c2V0dGluZ3M7CkBAIC0yMjYsNiArMTYxLDgxIEBAIHN0YXRpYyBRVmFyaWFudCBzZXR0aW5nVG9W
YXJpYW50KGNvbnN0IFN0cmluZyYgc2V0dGluZykKICAgICByZXR1cm4gcmV0VmFsOwogfQogCitJ
bnNwZWN0b3JGcm9udGVuZENsaWVudFF0OjpJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0KFFXZWJQ
YWdlKiBpbnNwZWN0ZWRXZWJQYWdlLCBQYXNzT3duUHRyPFFXZWJWaWV3PiBpbnNwZWN0b3JWaWV3
KQorICAgIDogSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbChpbnNwZWN0ZWRXZWJQYWdlLT5k
LT5wYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCksIGluc3BlY3RvclZpZXctPnBhZ2UoKS0+ZC0+
cGFnZSkgCisgICAgLCBtX2luc3BlY3RlZFdlYlBhZ2UoaW5zcGVjdGVkV2ViUGFnZSkKKyAgICAs
IG1faW5zcGVjdG9yVmlldyhpbnNwZWN0b3JWaWV3KQorICAgICwgbV9kZXN0cm95aW5nSW5zcGVj
dG9yVmlldyhmYWxzZSkKK3sKK30KKwordm9pZCBJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0Ojpm
cm9udGVuZExvYWRlZCgpCit7CisgICAgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6ZnJv
bnRlbmRMb2FkZWQoKTsKKyAgICBzZXRBdHRhY2hlZFdpbmRvdyh0cnVlKTsKK30KKworU3RyaW5n
IEluc3BlY3RvckZyb250ZW5kQ2xpZW50UXQ6OmxvY2FsaXplZFN0cmluZ3NVUkwoKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitTdHJpbmcgSW5z
cGVjdG9yRnJvbnRlbmRDbGllbnRRdDo6aGlkZGVuUGFuZWxzKCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKwordm9pZCBJbnNwZWN0b3JGcm9udGVu
ZENsaWVudFF0OjpicmluZ1RvRnJvbnQoKQoreworICAgIHVwZGF0ZVdpbmRvd1RpdGxlKCk7Cit9
CisKK3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdDo6Y2xvc2VXaW5kb3coKQoreworICAg
IGlmIChtX2Rlc3Ryb3lpbmdJbnNwZWN0b3JWaWV3KQorICAgICAgICByZXR1cm47CisgICAgbV9k
ZXN0cm95aW5nSW5zcGVjdG9yVmlldyA9IHRydWU7CisKKyAgICAvLyBDbGVhciByZWZlcmVuY2Ug
ZnJvbSBRV2ViSW5zcGVjdG9yIHRvIHRoZSBmcm9udGVuZCB2aWV3LgorICAgIG1faW5zcGVjdGVk
V2ViUGFnZS0+ZC0+Z2V0T3JDcmVhdGVJbnNwZWN0b3IoKS0+ZC0+c2V0RnJvbnRlbmQoMCk7Cisj
aWYgRU5BQkxFKElOU1BFQ1RPUikKKyAgICBtX2luc3BlY3RlZFdlYlBhZ2UtPmQtPmluc3BlY3Rv
ckNvbnRyb2xsZXIoKS0+Y2xvc2UoKTsKKyNlbmRpZgorICAgIC8vIENsZWFyIHBvaW50ZXIgYmVm
b3JlIGRlbGV0aW5nIFdlYlZpZXcgdG8gYXZvaWQgcmVjdXJzaXZlIGNhbGxzIHRvIGl0cyBkZXN0
cnVjdG9yLgorICAgIGRlbGV0ZSBtX2luc3BlY3RvclZpZXcucmVsZWFzZSgpOworfQorCit2b2lk
IEluc3BlY3RvckZyb250ZW5kQ2xpZW50UXQ6OmF0dGFjaFdpbmRvdygpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKwordm9pZCBJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0OjpkZXRhY2hX
aW5kb3coKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yRnJv
bnRlbmRDbGllbnRRdDo6c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0Ojpp
bnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYgbmV3VVJMKQoreworICAgIG1faW5zcGVj
dGVkVVJMID0gbmV3VVJMOworICAgIHVwZGF0ZVdpbmRvd1RpdGxlKCk7Cit9CisKK3ZvaWQgSW5z
cGVjdG9yRnJvbnRlbmRDbGllbnRRdDo6dXBkYXRlV2luZG93VGl0bGUoKQoreworICAgIGlmICht
X2luc3BlY3RlZFdlYlBhZ2UtPmQtPmluc3BlY3RvcikgeworICAgICAgICBRU3RyaW5nIGNhcHRp
b24gPSBRQ29yZUFwcGxpY2F0aW9uOjp0cmFuc2xhdGUoIlFXZWJQYWdlIiwgIldlYiBJbnNwZWN0
b3IgLSAlMiIpLmFyZyhtX2luc3BlY3RlZFVSTCk7CisgICAgICAgIG1faW5zcGVjdGVkV2ViUGFn
ZS0+ZC0+aW5zcGVjdG9yLT5zZXRXaW5kb3dUaXRsZShjYXB0aW9uKTsKKyAgICB9Cit9CisKIH0K
IAogI2luY2x1ZGUgIkluc3BlY3RvckNsaWVudFF0Lm1vYyIKZGlmZiAtLWdpdCBhL1dlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRRdC5oIGIvV2ViS2l0L3F0L1dlYkNvcmVT
dXBwb3J0L0luc3BlY3RvckNsaWVudFF0LmgKaW5kZXggYzk1NDhiMC4uNGJlYWRhYiAxMDA2NDQK
LS0tIGEvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudFF0LmgKKysrIGIv
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudFF0LmgKQEAgLTMxLDcgKzMx
LDkgQEAKICNkZWZpbmUgSW5zcGVjdG9yQ2xpZW50UXRfaAogCiAjaW5jbHVkZSAiSW5zcGVjdG9y
Q2xpZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5oIgogI2lu
Y2x1ZGUgIk93blB0ci5oIgorI2luY2x1ZGUgIlBhc3NPd25QdHIuaCIKICNpbmNsdWRlIDxRdENv
cmUvUVN0cmluZz4KIAogY2xhc3MgUVdlYlBhZ2U7CkBAIC00OCwxMyArNTAsMjkgQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCB2b2lkIGluc3BlY3RvckRlc3Ryb3llZCgpOwogCi0gICAgdmlydHVh
bCBQYWdlKiBjcmVhdGVQYWdlKCk7CisgICAgdmlydHVhbCB2b2lkIG9wZW5JbnNwZWN0b3JGcm9u
dGVuZChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyKik7CisKKyAgICB2aXJ0dWFsIHZvaWQg
aGlnaGxpZ2h0KE5vZGUqKTsKKyAgICB2aXJ0dWFsIHZvaWQgaGlkZUhpZ2hsaWdodCgpOworCisg
ICAgdmlydHVhbCB2b2lkIHBvcHVsYXRlU2V0dGluZyhjb25zdCBTdHJpbmcmIGtleSwgU3RyaW5n
KiB2YWx1ZSk7CisgICAgdmlydHVhbCB2b2lkIHN0b3JlU2V0dGluZyhjb25zdCBTdHJpbmcmIGtl
eSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisKK3ByaXZhdGU6CisgICAgUVdlYlBhZ2UqIG1faW5z
cGVjdGVkV2ViUGFnZTsKK307CisKK2NsYXNzIEluc3BlY3RvckZyb250ZW5kQ2xpZW50UXQgOiBw
dWJsaWMgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbCB7CitwdWJsaWM6CisgICAgSW5zcGVj
dG9yRnJvbnRlbmRDbGllbnRRdChRV2ViUGFnZSogaW5zcGVjdGVkV2ViUGFnZSwgUGFzc093blB0
cjxRV2ViVmlldz4gaW5zcGVjdG9yVmlldyk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZnJvbnRlbmRM
b2FkZWQoKTsKIAogICAgIHZpcnR1YWwgU3RyaW5nIGxvY2FsaXplZFN0cmluZ3NVUkwoKTsKIAog
ICAgIHZpcnR1YWwgU3RyaW5nIGhpZGRlblBhbmVscygpOwogCi0gICAgdmlydHVhbCB2b2lkIHNo
b3dXaW5kb3coKTsKKyAgICB2aXJ0dWFsIHZvaWQgYnJpbmdUb0Zyb250KCk7CiAgICAgdmlydHVh
bCB2b2lkIGNsb3NlV2luZG93KCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoV2luZG93KCk7
CkBAIC02MiwyMCArODAsMTQgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHNldEF0dGFj
aGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgaGln
aGxpZ2h0KE5vZGUqKTsKLSAgICB2aXJ0dWFsIHZvaWQgaGlkZUhpZ2hsaWdodCgpOwogICAgIHZp
cnR1YWwgdm9pZCBpbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYgbmV3VVJMKTsKIAot
ICAgIHZpcnR1YWwgdm9pZCBwb3B1bGF0ZVNldHRpbmcoY29uc3QgU3RyaW5nJiBrZXksIFN0cmlu
ZyogdmFsdWUpOwotICAgIHZpcnR1YWwgdm9pZCBzdG9yZVNldHRpbmcoY29uc3QgU3RyaW5nJiBr
ZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpOwotCi0gICAgdmlydHVhbCB2b2lkIGluc3BlY3Rvcldp
bmRvd09iamVjdENsZWFyZWQoKTsKLQogcHJpdmF0ZToKICAgICB2b2lkIHVwZGF0ZVdpbmRvd1Rp
dGxlKCk7CiAgICAgUVdlYlBhZ2UqIG1faW5zcGVjdGVkV2ViUGFnZTsKICAgICBPd25QdHI8UVdl
YlZpZXc+IG1faW5zcGVjdG9yVmlldzsKICAgICBRU3RyaW5nIG1faW5zcGVjdGVkVVJMOworICAg
IGJvb2wgbV9kZXN0cm95aW5nSW5zcGVjdG9yVmlldzsKIH07CiB9CiAKZGlmZiAtLWdpdCBhL1dl
YktpdC93aW4vQ2hhbmdlTG9nIGIvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKaW5kZXggYzkyN2QyYS4u
NmJlNDUxYSAxMDA2NDQKLS0tIGEvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L3dp
bi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NyBAQAorMjAxMC0wMy0xMSAgWXVyeSBTZW1pa2hhdHNr
eSA8eXVyeXNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEludHJvZHVjZSBJbnNwZWN0b3JGcm9udGVuZENsaWVudCB0aGF0IHBy
b3ZpZGVzIEluc3BlY3RvckZyb250ZW5kIHdpdGggYW4gaW50ZXJmYWNlIHRvIHRoZSBlbWJlZGRl
ci4gSW5zcGVjdG9yQ2xpZW50IG5vdyBzZXJ2ZXMgYXMgYSBkZWxlZ2F0ZSBmb3IgSW5zcGVjdG9y
Q29udHJvbGxlciBhbmQgZG9lcyBub3QgY29udGFpbiBtZXRob2RzIGZvciBtYW5hZ2luZyBpbnNw
ZWN0b3IgZnJvbnRlbmQgd2luZG93LiBUaGF0IGFsbG93cyB0byBjcmVhdGUgcmVtb3RlIEluc3Bl
Y3RvckZyb250ZW5kSG9zdC4KKworICAgICAgICBJbnRyb2R1Y2UgSW5zcGVjdG9yRnJvbnRlbmRD
bGllbnQgdGhhdCB3b3VsZCBwcm92aWRlIEluc3BlY3RvckZyb250ZW5kIHdpdGggYW4gaW50ZXJm
YWNlIHRvIHRoZSBlbWJlZGRlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MzUwMzYKKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3Rv
ckNsaWVudC5jcHA6CisgICAgICAgIChXZWJJbnNwZWN0b3JDbGllbnQ6OldlYkluc3BlY3RvckNs
aWVudCk6CisgICAgICAgIChXZWJJbnNwZWN0b3JDbGllbnQ6On5XZWJJbnNwZWN0b3JDbGllbnQp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yQ2xpZW50OjpvcGVuSW5zcGVjdG9yRnJvbnRlbmQpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yQ2xpZW50OjpoaWdobGlnaHQpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yQ2xpZW50OjpoaWRlSGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYkluc3BlY3RvckNsaWVu
dDo6dXBkYXRlSGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50
OjpXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudCk6CisgICAgICAgIChXZWJJbnNwZWN0b3JGcm9u
dGVuZENsaWVudDo6fldlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50KToKKyAgICAgICAgKFdlYklu
c3BlY3RvckZyb250ZW5kQ2xpZW50Ojpmcm9udGVuZExvYWRlZCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3JGcm9udGVuZENsaWVudDo6bG9jYWxpemVkU3RyaW5nc1VSTCk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3JGcm9udGVuZENsaWVudDo6aGlkZGVuUGFuZWxzKToKKyAgICAgICAgKFdlYkluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50OjpicmluZ1RvRnJvbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
RnJvbnRlbmRDbGllbnQ6OmNsb3NlV2luZG93KToKKyAgICAgICAgKFdlYkluc3BlY3RvckZyb250
ZW5kQ2xpZW50OjphdHRhY2hXaW5kb3cpOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRD
bGllbnQ6OmRldGFjaFdpbmRvdyk6CisgICAgICAgIChXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVu
dDo6c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRl
bmRDbGllbnQ6Omluc3BlY3RlZFVSTENoYW5nZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJv
bnRlbmRDbGllbnQ6OmNsb3NlV2luZG93V2l0aG91dE5vdGlmaWNhdGlvbnMpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OnNob3dXaW5kb3dXaXRob3V0Tm90aWZpY2F0aW9u
cyk6CisgICAgICAgIChXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6ZGVzdHJveUluc3BlY3Rv
clZpZXcpOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OnVwZGF0ZVdpbmRv
d1RpdGxlKToKKyAgICAgICAgKFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpvbkdldE1pbk1h
eEluZm8pOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6Om9uU2l6ZSk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6b25DbG9zZSk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6b25TZXRGb2N1cyk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3JGcm9udGVuZENsaWVudDo6b25XZWJWaWV3V2luZG93UG9zQ2hhbmdpbmcpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yV25kUHJvYyk6CisgICAgICAgIChXZWJJbnNwZWN0b3JGcm9udGVuZENs
aWVudDo6d2luZG93UmVjZWl2ZWRNZXNzYWdlKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9X
ZWJJbnNwZWN0b3JDbGllbnQuaDoKKyAgICAgICAgKFdlYkluc3BlY3RvckNsaWVudDo6ZnJvbnRl
bmRDbG9zaW5nKToKKyAgICAgICAgKiBXZWJJbnNwZWN0b3IuY3BwOgorICAgICAgICAoV2ViSW5z
cGVjdG9yOjphdHRhY2gpOgorICAgICAgICAoV2ViSW5zcGVjdG9yOjpkZXRhY2gpOgorCiAyMDEw
LTAzLTEwICBFcmljIFVocmhhbmUgIDxlcmljdUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgRGF2aWQgTGV2aW4uCmRpZmYgLS1naXQgYS9XZWJLaXQvd2luL1dlYkNvcmVTdXBw
b3J0L1dlYkluc3BlY3RvckNsaWVudC5jcHAgYi9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dl
Ykluc3BlY3RvckNsaWVudC5jcHAKaW5kZXggNmExMGMwZC4uNWFkYmZkZiAxMDA2NDQKLS0tIGEv
V2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuY3BwCisrKyBiL1dl
YktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcApAQCAtNjksMjUg
KzY5LDEzIEBAIHN0YXRpYyBDRkJ1bmRsZVJlZiBnZXRXZWJLaXRCdW5kbGUoKQogCiBXZWJJbnNw
ZWN0b3JDbGllbnQ6OldlYkluc3BlY3RvckNsaWVudChXZWJWaWV3KiB3ZWJWaWV3KQogICAgIDog
bV9pbnNwZWN0ZWRXZWJWaWV3KHdlYlZpZXcpCi0gICAgLCBtX2h3bmQoMCkKLSAgICAsIG1fd2Vi
Vmlld0h3bmQoMCkKLSAgICAsIG1fc2hvdWxkQXR0YWNoV2hlblNob3duKGZhbHNlKQotICAgICwg
bV9hdHRhY2hlZChmYWxzZSkKIHsKICAgICBBU1NFUlQobV9pbnNwZWN0ZWRXZWJWaWV3KTsKLQog
ICAgIG1faW5zcGVjdGVkV2ViVmlldy0+dmlld1dpbmRvdygoT0xFX0hBTkRMRSopJm1faW5zcGVj
dGVkV2ViVmlld0h3bmQpOwotCi0gICAgLy8gRklYTUU6IEltcGxlbWVudCB3aW5kb3cgc2l6ZS9w
b3NpdGlvbiBzYXZlL3Jlc3RvcmUKLSNpZiAwCi0gICAgW3NlbGYgc2V0V2luZG93RnJhbWVBdXRv
c2F2ZU5hbWU6QCJXZWIgSW5zcGVjdG9yIl07Ci0jZW5kaWYKIH0KIAogV2ViSW5zcGVjdG9yQ2xp
ZW50Ojp+V2ViSW5zcGVjdG9yQ2xpZW50KCkKIHsKLSAgICBpZiAobV9od25kKQotICAgICAgICA6
OkRlc3Ryb3lXaW5kb3cobV9od25kKTsKIH0KIAogdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6Omlu
c3BlY3RvckRlc3Ryb3llZCgpCkBAIC05NSwzNSArODMsMzAgQEAgdm9pZCBXZWJJbnNwZWN0b3JD
bGllbnQ6Omluc3BlY3RvckRlc3Ryb3llZCgpCiAgICAgZGVsZXRlIHRoaXM7CiB9CiAKLVBhZ2Uq
IFdlYkluc3BlY3RvckNsaWVudDo6Y3JlYXRlUGFnZSgpCit2b2lkIFdlYkluc3BlY3RvckNsaWVu
dDo6b3Blbkluc3BlY3RvckZyb250ZW5kKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNv
bnRyb2xsZXIpCiB7CiAgICAgcmVnaXN0ZXJXaW5kb3dDbGFzcygpOwogCi0gICAgaWYgKG1faHdu
ZCkKLSAgICAgICAgOjpEZXN0cm95V2luZG93KG1faHduZCk7Ci0KLSAgICBtX2h3bmQgPSA6OkNy
ZWF0ZVdpbmRvd0V4KDAsIGtXZWJJbnNwZWN0b3JXaW5kb3dDbGFzc05hbWUsIDAsIFdTX09WRVJM
QVBQRURXSU5ET1csCisgICAgSFdORCBmcm9udGVuZEh3bmQgPSA6OkNyZWF0ZVdpbmRvd0V4KDAs
IGtXZWJJbnNwZWN0b3JXaW5kb3dDbGFzc05hbWUsIDAsIFdTX09WRVJMQVBQRURXSU5ET1csCiAg
ICAgICAgIGRlZmF1bHRXaW5kb3dSZWN0KCkueCgpLCBkZWZhdWx0V2luZG93UmVjdCgpLnkoKSwg
ZGVmYXVsdFdpbmRvd1JlY3QoKS53aWR0aCgpLCBkZWZhdWx0V2luZG93UmVjdCgpLmhlaWdodCgp
LAogICAgICAgICAwLCAwLCAwLCAwKTsKIAotICAgIGlmICghbV9od25kKQotICAgICAgICByZXR1
cm4gMDsKLQotICAgIDo6U2V0UHJvcChtX2h3bmQsIGtXZWJJbnNwZWN0b3JQb2ludGVyUHJvcCwg
cmVpbnRlcnByZXRfY2FzdDxIQU5ETEU+KHRoaXMpKTsKKyAgICBpZiAoIWZyb250ZW5kSHduZCkK
KyAgICAgICAgcmV0dXJuOwogCi0gICAgbV93ZWJWaWV3LmFkb3B0UmVmKFdlYlZpZXc6OmNyZWF0
ZUluc3RhbmNlKCkpOworICAgIENPTVB0cjxXZWJWaWV3PiBmcm9udGVuZFdlYlZpZXcoQWRvcHRD
T00sIFdlYlZpZXc6OmNyZWF0ZUluc3RhbmNlKCkpOwogCi0gICAgaWYgKEZBSUxFRChtX3dlYlZp
ZXctPnNldEhvc3RXaW5kb3coKE9MRV9IQU5ETEUpKFVMT05HNjQpbV9od25kKSkpCi0gICAgICAg
IHJldHVybiAwOworICAgIGlmIChGQUlMRUQoZnJvbnRlbmRXZWJWaWV3LT5zZXRIb3N0V2luZG93
KChPTEVfSEFORExFKShVTE9ORzY0KWZyb250ZW5kSHduZCkpKQorICAgICAgICByZXR1cm47CiAK
ICAgICBSRUNUIHJlY3Q7Ci0gICAgR2V0Q2xpZW50UmVjdChtX2h3bmQsICZyZWN0KTsKLSAgICBp
ZiAoRkFJTEVEKG1fd2ViVmlldy0+aW5pdFdpdGhGcmFtZShyZWN0LCAwLCAwKSkpCi0gICAgICAg
IHJldHVybiAwOworICAgIEdldENsaWVudFJlY3QoZnJvbnRlbmRId25kLCAmcmVjdCk7CisgICAg
aWYgKEZBSUxFRChmcm9udGVuZFdlYlZpZXctPmluaXRXaXRoRnJhbWUocmVjdCwgMCwgMCkpKQor
ICAgICAgICByZXR1cm47CiAKICAgICBDT01QdHI8V2ViSW5zcGVjdG9yRGVsZWdhdGU+IGRlbGVn
YXRlKEFkb3B0Q09NLCBXZWJJbnNwZWN0b3JEZWxlZ2F0ZTo6Y3JlYXRlSW5zdGFuY2UoKSk7Ci0g
ICAgaWYgKEZBSUxFRChtX3dlYlZpZXctPnNldFVJRGVsZWdhdGUoZGVsZWdhdGUuZ2V0KCkpKSkK
LSAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKEZBSUxFRChmcm9udGVuZFdlYlZpZXctPnNldFVJ
RGVsZWdhdGUoZGVsZWdhdGUuZ2V0KCkpKSkKKyAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gS2Vl
cCBwcmVmZXJlbmNlcyBzZXBhcmF0ZSBmcm9tIHRoZSByZXN0IG9mIHRoZSBjbGllbnQsIG1ha2lu
ZyBzdXJlIHdlIGFyZSB1c2luZyBleHBlY3RlZCBwcmVmZXJlbmNlIHZhbHVlcy4KICAgICAvLyBP
bmUgcmVhc29uIHRoaXMgaXMgZ29vZCBpcyB0aGF0IGl0IGtlZXBzIHRoZSBpbnNwZWN0b3Igb3V0
IG9mIGhpc3RvcnkgdmlhICJwcml2YXRlIGJyb3dzaW5nIi4KQEAgLTEzNCw2NiArMTE3LDEyNiBA
QCBQYWdlKiBXZWJJbnNwZWN0b3JDbGllbnQ6OmNyZWF0ZVBhZ2UoKQogICAgIENPTVB0cjxXZWJQ
cmVmZXJlbmNlcz4gdGVtcFByZWZlcmVuY2VzKEFkb3B0Q09NLCBXZWJQcmVmZXJlbmNlczo6Y3Jl
YXRlSW5zdGFuY2UoKSk7CiAgICAgQ09NUHRyPElXZWJQcmVmZXJlbmNlcz4gaVByZWZlcmVuY2Vz
OwogICAgIGlmIChGQUlMRUQodGVtcFByZWZlcmVuY2VzLT5pbml0V2l0aElkZW50aWZpZXIoQlN0
cmluZyhMIldlYkluc3BlY3RvclByZWZlcmVuY2VzIiksICZpUHJlZmVyZW5jZXMpKSkKLSAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybjsKICAgICBDT01QdHI8V2ViUHJlZmVyZW5jZXM+
IHByZWZlcmVuY2VzKFF1ZXJ5LCBpUHJlZmVyZW5jZXMpOwogICAgIGlmICghcHJlZmVyZW5jZXMp
Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm47CiAgICAgaWYgKEZBSUxFRChwcmVm
ZXJlbmNlcy0+c2V0QXV0b3NhdmVzKEZBTFNFKSkpCi0gICAgICAgIHJldHVybiAwOworICAgICAg
ICByZXR1cm47CiAgICAgaWYgKEZBSUxFRChwcmVmZXJlbmNlcy0+c2V0UHJpdmF0ZUJyb3dzaW5n
RW5hYmxlZChUUlVFKSkpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm47CiAgICAg
aWYgKEZBSUxFRChwcmVmZXJlbmNlcy0+c2V0TG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5KFRSVUUp
KSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybjsKICAgICBpZiAoRkFJTEVEKHBy
ZWZlcmVuY2VzLT5zZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZChUUlVFKSkpCi0gICAgICAg
IHJldHVybiAwOworICAgICAgICByZXR1cm47CiAgICAgaWYgKEZBSUxFRChwcmVmZXJlbmNlcy0+
c2V0QWxsb3dzQW5pbWF0ZWRJbWFnZXMoVFJVRSkpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgcmV0dXJuOwogICAgIGlmIChGQUlMRUQocHJlZmVyZW5jZXMtPnNldExvYWRzSW1hZ2VzQXV0
b21hdGljYWxseShUUlVFKSkpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm47CiAg
ICAgaWYgKEZBSUxFRChwcmVmZXJlbmNlcy0+c2V0UGx1Z0luc0VuYWJsZWQoRkFMU0UpKSkKLSAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybjsKICAgICBpZiAoRkFJTEVEKHByZWZlcmVu
Y2VzLT5zZXRKYXZhRW5hYmxlZChGQUxTRSkpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
cmV0dXJuOwogICAgIGlmIChGQUlMRUQocHJlZmVyZW5jZXMtPnNldFVzZXJTdHlsZVNoZWV0RW5h
YmxlZChGQUxTRSkpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuOwogICAgIGlm
IChGQUlMRUQocHJlZmVyZW5jZXMtPnNldFRhYnNUb0xpbmtzKEZBTFNFKSkpCi0gICAgICAgIHJl
dHVybiAwOworICAgICAgICByZXR1cm47CiAgICAgaWYgKEZBSUxFRChwcmVmZXJlbmNlcy0+c2V0
TWluaW11bUZvbnRTaXplKDApKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybjsK
ICAgICBpZiAoRkFJTEVEKHByZWZlcmVuY2VzLT5zZXRNaW5pbXVtTG9naWNhbEZvbnRTaXplKDkp
KSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybjsKICAgICBpZiAoRkFJTEVEKHBy
ZWZlcmVuY2VzLT5zZXRGaXhlZEZvbnRGYW1pbHkoQlN0cmluZyhMIkNvdXJpZXIgTmV3IikpKSkK
LSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybjsKICAgICBpZiAoRkFJTEVEKHByZWZl
cmVuY2VzLT5zZXREZWZhdWx0Rml4ZWRGb250U2l6ZSgxMykpKQotICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKEZBSUxFRChtX3dlYlZpZXctPnNldFByZWZlcmVu
Y2VzKHByZWZlcmVuY2VzLmdldCgpKSkpCi0gICAgICAgIHJldHVybiAwOworICAgIGlmIChGQUlM
RUQoZnJvbnRlbmRXZWJWaWV3LT5zZXRQcmVmZXJlbmNlcyhwcmVmZXJlbmNlcy5nZXQoKSkpKQor
ICAgICAgICByZXR1cm47CiAKLSAgICBtX3dlYlZpZXctPnNldFByb2hpYml0c01haW5GcmFtZVNj
cm9sbGluZyhUUlVFKTsKKyAgICBmcm9udGVuZFdlYlZpZXctPnNldFByb2hpYml0c01haW5GcmFt
ZVNjcm9sbGluZyhUUlVFKTsKIAotICAgIGlmIChGQUlMRUQobV93ZWJWaWV3LT52aWV3V2luZG93
KHJlaW50ZXJwcmV0X2Nhc3Q8T0xFX0hBTkRMRSo+KCZtX3dlYlZpZXdId25kKSkpKQotICAgICAg
ICByZXR1cm4gMDsKKyAgICBIV05EIGZyb250ZW5kV2ViVmlld0h3bmQ7CisgICAgaWYgKEZBSUxF
RChmcm9udGVuZFdlYlZpZXctPnZpZXdXaW5kb3cocmVpbnRlcnByZXRfY2FzdDxPTEVfSEFORExF
Kj4oJmZyb250ZW5kV2ViVmlld0h3bmQpKSkpCisgICAgICAgIHJldHVybjsKIAotICAgIENPTVB0
cjxXZWJNdXRhYmxlVVJMUmVxdWVzdD4gcmVxdWVzdDsKLSAgICByZXF1ZXN0LmFkb3B0UmVmKFdl
Yk11dGFibGVVUkxSZXF1ZXN0OjpjcmVhdGVJbnN0YW5jZSgpKTsKKyAgICBDT01QdHI8V2ViTXV0
YWJsZVVSTFJlcXVlc3Q+IHJlcXVlc3QoQWRvcHRDT00sIFdlYk11dGFibGVVUkxSZXF1ZXN0Ojpj
cmVhdGVJbnN0YW5jZSgpKTsKIAogICAgIFJldGFpblB0cjxDRlVSTFJlZj4gaHRtbFVSTFJlZihB
ZG9wdENGLCBDRkJ1bmRsZUNvcHlSZXNvdXJjZVVSTChnZXRXZWJLaXRCdW5kbGUoKSwgQ0ZTVFIo
Imluc3BlY3RvciIpLCBDRlNUUigiaHRtbCIpLCBDRlNUUigiaW5zcGVjdG9yIikpKTsKICAgICBp
ZiAoIWh0bWxVUkxSZWYpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm47CiAKICAg
ICBDRlN0cmluZ1JlZiB1cmxTdHJpbmdSZWYgPSA6OkNGVVJMR2V0U3RyaW5nKGh0bWxVUkxSZWYu
Z2V0KCkpOwogICAgIGlmIChGQUlMRUQocmVxdWVzdC0+aW5pdFdpdGhVUkwoQlN0cmluZyh1cmxT
dHJpbmdSZWYpLCBXZWJVUkxSZXF1ZXN0VXNlUHJvdG9jb2xDYWNoZVBvbGljeSwgNjApKSkKLSAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybjsKIAotICAgIGlmIChGQUlMRUQobV93ZWJW
aWV3LT50b3BMZXZlbEZyYW1lKCktPmxvYWRSZXF1ZXN0KHJlcXVlc3QuZ2V0KCkpKSkKLSAgICAg
ICAgcmV0dXJuIDA7CisgICAgaWYgKEZBSUxFRChmcm9udGVuZFdlYlZpZXctPnRvcExldmVsRnJh
bWUoKS0+bG9hZFJlcXVlc3QocmVxdWVzdC5nZXQoKSkpKQorICAgICAgICByZXR1cm47CiAKLSAg
ICByZXR1cm4gY29yZShtX3dlYlZpZXcuZ2V0KCkpOworICAgIFBhZ2UqIHBhZ2UgPSBjb3JlKGZy
b250ZW5kV2ViVmlldy5nZXQoKSk7CisgICAgcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5z
ZXRJbnNwZWN0b3JGcm9udGVuZENsaWVudChuZXcgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQo
bV9pbnNwZWN0ZWRXZWJWaWV3LCBtX2luc3BlY3RlZFdlYlZpZXdId25kLCBmcm9udGVuZEh3bmQs
IGZyb250ZW5kV2ViVmlldywgZnJvbnRlbmRXZWJWaWV3SHduZCwgdGhpcykpOworICAgIG1fZnJv
bnRlbmRId25kID0gZnJvbnRlbmRId25kOwogfQogCit2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6
aGlnaGxpZ2h0KE5vZGUqKQoreworICAgIGJvb2wgY3JlYXRpbmdIaWdobGlnaHQgPSAhbV9oaWdo
bGlnaHQ7CisKKyAgICBpZiAoY3JlYXRpbmdIaWdobGlnaHQpCisgICAgICAgIG1faGlnaGxpZ2h0
LnNldChuZXcgV2ViTm9kZUhpZ2hsaWdodChtX2luc3BlY3RlZFdlYlZpZXcpKTsKIAotU3RyaW5n
IFdlYkluc3BlY3RvckNsaWVudDo6bG9jYWxpemVkU3RyaW5nc1VSTCgpCisgICAgaWYgKG1faGln
aGxpZ2h0LT5pc1Nob3dpbmcoKSkKKyAgICAgICAgbV9oaWdobGlnaHQtPnVwZGF0ZSgpOworICAg
IGVsc2UKKyAgICAgICAgbV9oaWdobGlnaHQtPnNldFNob3dzV2hpbGVXZWJWaWV3SXNWaXNpYmxl
KHRydWUpOworCisgICAgaWYgKGNyZWF0aW5nSGlnaGxpZ2h0ICYmIElzV2luZG93VmlzaWJsZSht
X2Zyb250ZW5kSHduZCkpCisgICAgICAgIG1faGlnaGxpZ2h0LT5wbGFjZUJlaGluZFdpbmRvdyht
X2Zyb250ZW5kSHduZCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpoaWRlSGlnaGxp
Z2h0KCkKK3sKKyAgICBpZiAobV9oaWdobGlnaHQpCisgICAgICAgIG1faGlnaGxpZ2h0LT5zZXRT
aG93c1doaWxlV2ViVmlld0lzVmlzaWJsZShmYWxzZSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9y
Q2xpZW50Ojp1cGRhdGVIaWdobGlnaHQoKQoreworICAgIGlmIChtX2hpZ2hsaWdodCAmJiBtX2hp
Z2hsaWdodC0+aXNTaG93aW5nKCkpCisgICAgICAgIG1faGlnaGxpZ2h0LT51cGRhdGUoKTsKK30K
KworV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OldlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50
KFdlYlZpZXcqIGluc3BlY3RlZFdlYlZpZXcsIEhXTkQgaW5zcGVjdGVkV2ViVmlld0h3bmQsIEhX
TkQgZnJvbnRlbmRId25kLCBjb25zdCBDT01QdHI8V2ViVmlldz4mIGZyb250ZW5kV2ViVmlldywg
SFdORCBmcm9udGVuZFdlYlZpZXdId25kLCBXZWJJbnNwZWN0b3JDbGllbnQqIGluc3BlY3RvckNs
aWVudCkKKyAgICA6IEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwoaW5zcGVjdGVkV2ViVmll
dy0+cGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCksICBjb3JlKGZyb250ZW5kV2ViVmlldy5n
ZXQoKSkpCisgICAgLCBtX2luc3BlY3RlZFdlYlZpZXcoaW5zcGVjdGVkV2ViVmlldykKKyAgICAs
IG1faW5zcGVjdGVkV2ViVmlld0h3bmQoaW5zcGVjdGVkV2ViVmlld0h3bmQpCisgICAgLCBtX2lu
c3BlY3RvckNsaWVudChpbnNwZWN0b3JDbGllbnQpCisgICAgLCBtX2Zyb250ZW5kSHduZChmcm9u
dGVuZEh3bmQpCisgICAgLCBtX2Zyb250ZW5kV2ViVmlldyhmcm9udGVuZFdlYlZpZXcpCisgICAg
LCBtX2Zyb250ZW5kV2ViVmlld0h3bmQoZnJvbnRlbmRXZWJWaWV3SHduZCkKKyAgICAsIG1fc2hv
dWxkQXR0YWNoV2hlblNob3duKGZhbHNlKQorICAgICwgbV9hdHRhY2hlZChmYWxzZSkKKyAgICAs
IG1fZGVzdHJveWluZ0luc3BlY3RvclZpZXcoZmFsc2UpCit7CisgICAgOjpTZXRQcm9wKGZyb250
ZW5kSHduZCwga1dlYkluc3BlY3RvclBvaW50ZXJQcm9wLCByZWludGVycHJldF9jYXN0PEhBTkRM
RT4odGhpcykpOworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgd2luZG93IHNpemUvcG9zaXRpb24g
c2F2ZS9yZXN0b3JlCisjaWYgMAorICAgIFtzZWxmIHNldFdpbmRvd0ZyYW1lQXV0b3NhdmVOYW1l
OkAiV2ViIEluc3BlY3RvciJdOworI2VuZGlmCit9CisKK1dlYkluc3BlY3RvckZyb250ZW5kQ2xp
ZW50Ojp+V2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQoKQoreworICAgIEFTU0VSVChtX2Rlc3Ry
b3lpbmdJbnNwZWN0b3JWaWV3KTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVu
dDo6ZnJvbnRlbmRMb2FkZWQoKQoreworICAgIEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6
OmZyb250ZW5kTG9hZGVkKCk7CisKKyAgICBzZXRBdHRhY2hlZFdpbmRvdyhtX2F0dGFjaGVkKTsK
K30KKworU3RyaW5nIFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50Ojpsb2NhbGl6ZWRTdHJpbmdz
VVJMKCkKIHsKICAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IHVybChBZG9wdENGLCBDRkJ1bmRsZUNv
cHlSZXNvdXJjZVVSTChnZXRXZWJLaXRCdW5kbGUoKSwgQ0ZTVFIoImxvY2FsaXplZFN0cmluZ3Mi
KSwgQ0ZTVFIoImpzIiksIDApKTsKICAgICBpZiAoIXVybCkKQEAgLTIwMiwzMSArMjQ1LDIzIEBA
IFN0cmluZyBXZWJJbnNwZWN0b3JDbGllbnQ6OmxvY2FsaXplZFN0cmluZ3NVUkwoKQogICAgIHJl
dHVybiBDRlVSTEdldFN0cmluZyh1cmwuZ2V0KCkpOwogfQogCi0KLVN0cmluZyBXZWJJbnNwZWN0
b3JDbGllbnQ6OmhpZGRlblBhbmVscygpCitTdHJpbmcgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGll
bnQ6OmhpZGRlblBhbmVscygpCiB7CiAgICAgLy8gRklYTUU6IGltcGxlbWVudCB0aGlzCiAgICAg
cmV0dXJuIFN0cmluZygpOwogfQogCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6c2hvd1dpbmRv
dygpCit2b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpicmluZ1RvRnJvbnQoKQogewog
ICAgIHNob3dXaW5kb3dXaXRob3V0Tm90aWZpY2F0aW9ucygpOwotICAgIG1faW5zcGVjdGVkV2Vi
Vmlldy0+cGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnNldFdpbmRvd1Zpc2libGUodHJ1
ZSwgbV9zaG91bGRBdHRhY2hXaGVuU2hvd24pOwotfQotCi12b2lkIFdlYkluc3BlY3RvckNsaWVu
dDo6Y2xvc2VXaW5kb3coKQotewotICAgIGNsb3NlV2luZG93V2l0aG91dE5vdGlmaWNhdGlvbnMo
KTsKLSAgICBtX2luc3BlY3RlZFdlYlZpZXctPnBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigp
LT5zZXRXaW5kb3dWaXNpYmxlKGZhbHNlLCBtX3Nob3VsZEF0dGFjaFdoZW5TaG93bik7CiB9CiAK
LWJvb2wgV2ViSW5zcGVjdG9yQ2xpZW50Ojp3aW5kb3dWaXNpYmxlKCkKK3ZvaWQgV2ViSW5zcGVj
dG9yRnJvbnRlbmRDbGllbnQ6OmNsb3NlV2luZG93KCkKIHsKLSAgICByZXR1cm4gISE6OklzV2lu
ZG93VmlzaWJsZShtX2h3bmQpOworICAgIGRlc3Ryb3lJbnNwZWN0b3JWaWV3KCk7CiB9CiAKLXZv
aWQgV2ViSW5zcGVjdG9yQ2xpZW50OjphdHRhY2hXaW5kb3coKQordm9pZCBXZWJJbnNwZWN0b3JG
cm9udGVuZENsaWVudDo6YXR0YWNoV2luZG93KCkKIHsKICAgICBpZiAobV9hdHRhY2hlZCkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMjM3LDcgKzI3Miw3IEBAIHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50
OjphdHRhY2hXaW5kb3coKQogICAgIHNob3dXaW5kb3dXaXRob3V0Tm90aWZpY2F0aW9ucygpOwog
fQogCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6ZGV0YWNoV2luZG93KCkKK3ZvaWQgV2ViSW5z
cGVjdG9yRnJvbnRlbmRDbGllbnQ6OmRldGFjaFdpbmRvdygpCiB7CiAgICAgaWYgKCFtX2F0dGFj
aGVkKQogICAgICAgICByZXR1cm47CkBAIC0yNDgsNyArMjgzLDcgQEAgdm9pZCBXZWJJbnNwZWN0
b3JDbGllbnQ6OmRldGFjaFdpbmRvdygpCiAgICAgc2hvd1dpbmRvd1dpdGhvdXROb3RpZmljYXRp
b25zKCk7CiB9CiAKLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpzZXRBdHRhY2hlZFdpbmRvd0hl
aWdodCh1bnNpZ25lZCBoZWlnaHQpCit2b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50Ojpz
ZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpCiB7CiAgICAgaWYgKCFtX2F0
dGFjaGVkKQogICAgICAgICByZXR1cm47CkBAIC0yNjYsMTAxICszMDEsNzMgQEAgdm9pZCBXZWJJ
bnNwZWN0b3JDbGllbnQ6OnNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkK
ICAgICBpbnQgdG90YWxIZWlnaHQgPSBob3N0V2luZG93UmVjdC5ib3R0b20gLSBob3N0V2luZG93
UmVjdC50b3A7CiAgICAgaW50IHdlYlZpZXdXaWR0aCA9IGluc3BlY3RlZFJlY3QucmlnaHQgLSBp
bnNwZWN0ZWRSZWN0LmxlZnQ7CiAKLSAgICBTZXRXaW5kb3dQb3MobV93ZWJWaWV3SHduZCwgMCwg
MCwgdG90YWxIZWlnaHQgLSBoZWlnaHQsIHdlYlZpZXdXaWR0aCwgaGVpZ2h0LCBTV1BfTk9aT1JE
RVIpOworICAgIFNldFdpbmRvd1BvcyhtX2Zyb250ZW5kV2ViVmlld0h3bmQsIDAsIDAsIHRvdGFs
SGVpZ2h0IC0gaGVpZ2h0LCB3ZWJWaWV3V2lkdGgsIGhlaWdodCwgU1dQX05PWk9SREVSKTsKIAog
ICAgIC8vIFdlIHdhbnQgdG8gc2V0IHRoZSBpbnNwZWN0ZWQgd2ViIHZpZXcgaGVpZ2h0IHRvIHRo
ZSB0b3RhbEhlaWdodCwgYmVjYXVzZSB0aGUgaGVpZ2h0IGFkanVzdG1lbnQKICAgICAvLyBvZiB0
aGUgaW5zcGVjdGVkIHdlYiB2aWV3IGhhcHBlbnMgaW4gb25XZWJWaWV3V2luZG93UG9zQ2hhbmdp
bmcsIG5vdCBoZXJlLgogICAgIFNldFdpbmRvd1BvcyhtX2luc3BlY3RlZFdlYlZpZXdId25kLCAw
LCAwLCAwLCB3ZWJWaWV3V2lkdGgsIHRvdGFsSGVpZ2h0LCBTV1BfTk9aT1JERVIpOwogCi0gICAg
UmVkcmF3V2luZG93KG1fd2ViVmlld0h3bmQsIDAsIDAsIFJEV19JTlZBTElEQVRFIHwgUkRXX0FM
TENISUxEUkVOIHwgUkRXX1VQREFURU5PVyk7IAorICAgIFJlZHJhd1dpbmRvdyhtX2Zyb250ZW5k
V2ViVmlld0h3bmQsIDAsIDAsIFJEV19JTlZBTElEQVRFIHwgUkRXX0FMTENISUxEUkVOIHwgUkRX
X1VQREFURU5PVyk7IAogICAgIFJlZHJhd1dpbmRvdyhtX2luc3BlY3RlZFdlYlZpZXdId25kLCAw
LCAwLCBSRFdfSU5WQUxJREFURSB8IFJEV19BTExDSElMRFJFTiB8IFJEV19VUERBVEVOT1cpOwog
fQogCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6aGlnaGxpZ2h0KE5vZGUqKQotewotICAgIGJv
b2wgY3JlYXRpbmdIaWdobGlnaHQgPSAhbV9oaWdobGlnaHQ7Ci0KLSAgICBpZiAoY3JlYXRpbmdI
aWdobGlnaHQpCi0gICAgICAgIG1faGlnaGxpZ2h0LnNldChuZXcgV2ViTm9kZUhpZ2hsaWdodCht
X2luc3BlY3RlZFdlYlZpZXcpKTsKLQotICAgIGlmIChtX2hpZ2hsaWdodC0+aXNTaG93aW5nKCkp
Ci0gICAgICAgIG1faGlnaGxpZ2h0LT51cGRhdGUoKTsKLSAgICBlbHNlCi0gICAgICAgIG1faGln
aGxpZ2h0LT5zZXRTaG93c1doaWxlV2ViVmlld0lzVmlzaWJsZSh0cnVlKTsKLQotICAgIGlmIChj
cmVhdGluZ0hpZ2hsaWdodCAmJiBJc1dpbmRvd1Zpc2libGUobV9od25kKSkKLSAgICAgICAgbV9o
aWdobGlnaHQtPnBsYWNlQmVoaW5kV2luZG93KG1faHduZCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVj
dG9yQ2xpZW50OjpoaWRlSGlnaGxpZ2h0KCkKLXsKLSAgICBpZiAobV9oaWdobGlnaHQpCi0gICAg
ICAgIG1faGlnaGxpZ2h0LT5zZXRTaG93c1doaWxlV2ViVmlld0lzVmlzaWJsZShmYWxzZSk7Ci19
Ci0KLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjppbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0
cmluZyYgbmV3VVJMKQordm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6aW5zcGVjdGVk
VVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIG5ld1VSTCkKIHsKICAgICBtX2luc3BlY3RlZFVSTCA9
IG5ld1VSTDsKICAgICB1cGRhdGVXaW5kb3dUaXRsZSgpOwogfQogCi12b2lkIFdlYkluc3BlY3Rv
ckNsaWVudDo6aW5zcGVjdG9yV2luZG93T2JqZWN0Q2xlYXJlZCgpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmNsb3NlV2luZG93V2l0aG91
dE5vdGlmaWNhdGlvbnMoKQordm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6Y2xvc2VX
aW5kb3dXaXRob3V0Tm90aWZpY2F0aW9ucygpCiB7Ci0gICAgaWYgKCFtX2h3bmQpCisgICAgaWYg
KCFtX2Zyb250ZW5kSHduZCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFtX2F0dGFjaGVk
KSB7Ci0gICAgICAgIFNob3dXaW5kb3cobV9od25kLCBTV19ISURFKTsKKyAgICAgICAgU2hvd1dp
bmRvdyhtX2Zyb250ZW5kSHduZCwgU1dfSElERSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBBU1NFUlQobV93ZWJWaWV3KTsKKyAgICBBU1NFUlQobV9mcm9udGVuZFdlYlZpZXcpOwog
ICAgIEFTU0VSVChtX2luc3BlY3RlZFdlYlZpZXdId25kKTsKLSAgICBBU1NFUlQoIUlzV2luZG93
VmlzaWJsZShtX2h3bmQpKTsKKyAgICBBU1NFUlQoIUlzV2luZG93VmlzaWJsZShtX2Zyb250ZW5k
SHduZCkpOwogCiAgICAgLy8gUmVtb3ZlIHRoZSBJbnNwZWN0b3IncyBXZWJWaWV3IGZyb20gdGhl
IGluc3BlY3RlZCBXZWJWaWV3J3MgcGFyZW50IHdpbmRvdy4KICAgICBXaW5kb3dNZXNzYWdlQnJv
YWRjYXN0ZXI6OnJlbW92ZUxpc3RlbmVyKG1faW5zcGVjdGVkV2ViVmlld0h3bmQsIHRoaXMpOwog
CiAgICAgbV9hdHRhY2hlZCA9IGZhbHNlOwogCi0gICAgbV93ZWJWaWV3LT5zZXRIb3N0V2luZG93
KHJlaW50ZXJwcmV0X2Nhc3Q8T0xFX0hBTkRMRT4obV9od25kKSk7CisgICAgbV9mcm9udGVuZFdl
YlZpZXctPnNldEhvc3RXaW5kb3cocmVpbnRlcnByZXRfY2FzdDxPTEVfSEFORExFPihtX2Zyb250
ZW5kSHduZCkpOwogCiAgICAgLy8gTWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaGFzIHRoZSByaWdodCBz
aXplL3Bvc2l0aW9uLgogICAgIEhXTkQgaG9zdFdpbmRvdzsKICAgICBpZiAoU1VDQ0VFREVEKG1f
aW5zcGVjdGVkV2ViVmlldy0+aG9zdFdpbmRvdygoT0xFX0hBTkRMRSopJmhvc3RXaW5kb3cpKSkK
ICAgICAgICAgU2VuZE1lc3NhZ2UoaG9zdFdpbmRvdywgV01fU0laRSwgMCwgMCk7CiAKLSAgICBp
ZiAobV9oaWdobGlnaHQgJiYgbV9oaWdobGlnaHQtPmlzU2hvd2luZygpKQotICAgICAgICBtX2hp
Z2hsaWdodC0+dXBkYXRlKCk7CisgICAgbV9pbnNwZWN0b3JDbGllbnQtPnVwZGF0ZUhpZ2hsaWdo
dCgpOwogfQogCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6c2hvd1dpbmRvd1dpdGhvdXROb3Rp
ZmljYXRpb25zKCkKK3ZvaWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OnNob3dXaW5kb3dX
aXRob3V0Tm90aWZpY2F0aW9ucygpCiB7Ci0gICAgaWYgKCFtX2h3bmQpCisgICAgaWYgKCFtX2Zy
b250ZW5kSHduZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQVNTRVJUKG1fd2ViVmlldyk7Cisg
ICAgQVNTRVJUKG1fZnJvbnRlbmRXZWJWaWV3KTsKICAgICBBU1NFUlQobV9pbnNwZWN0ZWRXZWJW
aWV3SHduZCk7CiAKICAgICAvLyBJZiBubyBwcmVmZXJlbmNlIGlzIHNldCAtIGRlZmF1bHQgdG8g
YW4gYXR0YWNoZWQgd2luZG93LiBUaGlzIGlzIGltcG9ydGFudCBmb3IgaW5zcGVjdG9yIExheW91
dFRlc3RzLgogICAgIFN0cmluZyBzaG91bGRBdHRhY2ggPSBtX2luc3BlY3RlZFdlYlZpZXctPnBh
Z2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5zZXR0aW5nKEluc3BlY3RvckNvbnRyb2xsZXI6
Omluc3BlY3RvclN0YXJ0c0F0dGFjaGVkU2V0dGluZ05hbWUoKSk7CiAgICAgbV9zaG91bGRBdHRh
Y2hXaGVuU2hvd24gPSBzaG91bGRBdHRhY2ggIT0gImZhbHNlIjsKICAgICAgICAgCi0gICAgaWYg
KG1fc2hvdWxkQXR0YWNoV2hlblNob3duICYmICFtX2luc3BlY3RlZFdlYlZpZXctPnBhZ2UoKS0+
aW5zcGVjdG9yQ29udHJvbGxlcigpLT5jYW5BdHRhY2hXaW5kb3coKSkKKyAgICBpZiAobV9zaG91
bGRBdHRhY2hXaGVuU2hvd24gJiYgIWNhbkF0dGFjaFdpbmRvdygpKQogICAgICAgICBtX3Nob3Vs
ZEF0dGFjaFdoZW5TaG93biA9IGZhbHNlOwogICAgIAogICAgIGlmICghbV9zaG91bGRBdHRhY2hX
aGVuU2hvd24pIHsKICAgICAgICAgLy8gUHV0IHRoZSBJbnNwZWN0b3IncyBXZWJWaWV3IGluc2lk
ZSBvdXIgd2luZG93IGFuZCBzaG93IGl0LgotICAgICAgICBtX3dlYlZpZXctPnNldEhvc3RXaW5k
b3cocmVpbnRlcnByZXRfY2FzdDxPTEVfSEFORExFPihtX2h3bmQpKTsKLSAgICAgICAgU2VuZE1l
c3NhZ2UobV9od25kLCBXTV9TSVpFLCAwLCAwKTsKKyAgICAgICAgbV9mcm9udGVuZFdlYlZpZXct
PnNldEhvc3RXaW5kb3cocmVpbnRlcnByZXRfY2FzdDxPTEVfSEFORExFPihtX2Zyb250ZW5kSHdu
ZCkpOworICAgICAgICBTZW5kTWVzc2FnZShtX2Zyb250ZW5kSHduZCwgV01fU0laRSwgMCwgMCk7
CiAgICAgICAgIHVwZGF0ZVdpbmRvd1RpdGxlKCk7CiAKLSAgICAgICAgU2V0V2luZG93UG9zKG1f
aHduZCwgSFdORF9UT1AsIDAsIDAsIDAsIDAsIFNXUF9TSE9XV0lORE9XIHwgU1dQX05PTU9WRSB8
IFNXUF9OT1NJWkUpOworICAgICAgICBTZXRXaW5kb3dQb3MobV9mcm9udGVuZEh3bmQsIEhXTkRf
VE9QLCAwLCAwLCAwLCAwLCBTV1BfU0hPV1dJTkRPVyB8IFNXUF9OT01PVkUgfCBTV1BfTk9TSVpF
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMzcxLDIwICszNzgsMzIgQEAgdm9pZCBX
ZWJJbnNwZWN0b3JDbGllbnQ6OnNob3dXaW5kb3dXaXRob3V0Tm90aWZpY2F0aW9ucygpCiAgICAg
aWYgKEZBSUxFRChtX2luc3BlY3RlZFdlYlZpZXctPmhvc3RXaW5kb3cocmVpbnRlcnByZXRfY2Fz
dDxPTEVfSEFORExFKj4oJmhvc3RXaW5kb3cpKSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1f
d2ViVmlldy0+c2V0SG9zdFdpbmRvdyhyZWludGVycHJldF9jYXN0PE9MRV9IQU5ETEU+KGhvc3RX
aW5kb3cpKTsKKyAgICBtX2Zyb250ZW5kV2ViVmlldy0+c2V0SG9zdFdpbmRvdyhyZWludGVycHJl
dF9jYXN0PE9MRV9IQU5ETEU+KGhvc3RXaW5kb3cpKTsKIAogICAgIC8vIFRoZW4gaGlkZSBvdXIg
b3duIHdpbmRvdy4KLSAgICBTaG93V2luZG93KG1faHduZCwgU1dfSElERSk7CisgICAgU2hvd1dp
bmRvdyhtX2Zyb250ZW5kSHduZCwgU1dfSElERSk7CiAKICAgICBtX2F0dGFjaGVkID0gdHJ1ZTsK
IAogICAgIC8vIE1ha2Ugc3VyZSBldmVyeXRoaW5nIGhhcyB0aGUgcmlnaHQgc2l6ZS9wb3NpdGlv
bi4KICAgICBTZW5kTWVzc2FnZShob3N0V2luZG93LCBXTV9TSVpFLCAwLCAwKTsKLSAgICBpZiAo
bV9oaWdobGlnaHQgJiYgbV9oaWdobGlnaHQtPmlzU2hvd2luZygpKQotICAgICAgICBtX2hpZ2hs
aWdodC0+dXBkYXRlKCk7CisgICAgbV9pbnNwZWN0b3JDbGllbnQtPnVwZGF0ZUhpZ2hsaWdodCgp
OworfQorCit2b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpkZXN0cm95SW5zcGVjdG9y
VmlldygpCit7CisgICAgaWYgKG1fZGVzdHJveWluZ0luc3BlY3RvclZpZXcpCisgICAgICAgIHJl
dHVybjsKKyAgICBtX2Rlc3Ryb3lpbmdJbnNwZWN0b3JWaWV3ID0gdHJ1ZTsKKworICAgIG1faW5z
cGVjdGVkV2ViVmlldy0+cGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmNsb3NlKCk7CisK
KyAgICBjbG9zZVdpbmRvd1dpdGhvdXROb3RpZmljYXRpb25zKCk7CisgICAgbV9pbnNwZWN0b3JD
bGllbnQtPmZyb250ZW5kQ2xvc2luZygpOworICAgIDo6RGVzdHJveVdpbmRvdyhtX2Zyb250ZW5k
SHduZCk7CiB9CiAKLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50Ojp1cGRhdGVXaW5kb3dUaXRsZSgp
Cit2b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50Ojp1cGRhdGVXaW5kb3dUaXRsZSgpCiB7
CiAgICAgLy8gRklYTUU6IFRoZSBzZXJpZXMgb2YgYXBwZW5kcyBzaG91bGQgYmUgcmVwbGFjZWQg
d2l0aCBhIGNhbGwgdG8gU3RyaW5nOjpmb3JtYXQoKQogICAgIC8vIHdoZW4gaXQgY2FuIGJlIGZp
Z3VyZWQgb3V0IGhvdyB0byBnZXQgdGhlIHVuaWNvZGUgZW0tZGFzaCB0byBzaG93IHVwLgpAQCAt
MzkyLDEwICs0MTEsMTAgQEAgdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OnVwZGF0ZVdpbmRvd1Rp
dGxlKCkKICAgICB0aXRsZS5hcHBlbmQoKFVDaGFyKTB4MjAxNCk7IC8vIGVtLWRhc2gKICAgICB0
aXRsZS5hcHBlbmQoJyAnKTsKICAgICB0aXRsZS5hcHBlbmQobV9pbnNwZWN0ZWRVUkwpOwotICAg
IDo6U2V0V2luZG93VGV4dChtX2h3bmQsIHRpdGxlLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0
aW9uKCkpOworICAgIDo6U2V0V2luZG93VGV4dChtX2Zyb250ZW5kSHduZCwgdGl0bGUuY2hhcmFj
dGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSk7CiB9CiAKLUxSRVNVTFQgV2ViSW5zcGVjdG9yQ2xp
ZW50OjpvbkdldE1pbk1heEluZm8oV1BBUkFNLCBMUEFSQU0gbFBhcmFtKQorTFJFU1VMVCBXZWJJ
bnNwZWN0b3JGcm9udGVuZENsaWVudDo6b25HZXRNaW5NYXhJbmZvKFdQQVJBTSwgTFBBUkFNIGxQ
YXJhbSkKIHsKICAgICBNSU5NQVhJTkZPKiBpbmZvID0gcmVpbnRlcnByZXRfY2FzdDxNSU5NQVhJ
TkZPKj4obFBhcmFtKTsKICAgICBQT0lOVCBzaXplID0gezQwMCwgNDAwfTsKQEAgLTQwNCwzMyAr
NDIzLDMxIEBAIExSRVNVTFQgV2ViSW5zcGVjdG9yQ2xpZW50OjpvbkdldE1pbk1heEluZm8oV1BB
UkFNLCBMUEFSQU0gbFBhcmFtKQogICAgIHJldHVybiAwOwogfQogCi1MUkVTVUxUIFdlYkluc3Bl
Y3RvckNsaWVudDo6b25TaXplKFdQQVJBTSwgTFBBUkFNKQorTFJFU1VMVCBXZWJJbnNwZWN0b3JG
cm9udGVuZENsaWVudDo6b25TaXplKFdQQVJBTSwgTFBBUkFNKQogewogICAgIFJFQ1QgcmVjdDsK
LSAgICA6OkdldENsaWVudFJlY3QobV9od25kLCAmcmVjdCk7CisgICAgOjpHZXRDbGllbnRSZWN0
KG1fZnJvbnRlbmRId25kLCAmcmVjdCk7CiAKLSAgICA6OlNldFdpbmRvd1BvcyhtX3dlYlZpZXdI
d25kLCAwLCByZWN0LmxlZnQsIHJlY3QudG9wLCByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0LCByZWN0
LmJvdHRvbSAtIHJlY3QudG9wLCBTV1BfTk9aT1JERVIpOworICAgIDo6U2V0V2luZG93UG9zKG1f
ZnJvbnRlbmRXZWJWaWV3SHduZCwgMCwgcmVjdC5sZWZ0LCByZWN0LnRvcCwgcmVjdC5yaWdodCAt
IHJlY3QubGVmdCwgcmVjdC5ib3R0b20gLSByZWN0LnRvcCwgU1dQX05PWk9SREVSKTsKIAogICAg
IHJldHVybiAwOwogfQogCi1MUkVTVUxUIFdlYkluc3BlY3RvckNsaWVudDo6b25DbG9zZShXUEFS
QU0sIExQQVJBTSkKK0xSRVNVTFQgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6Om9uQ2xvc2Uo
V1BBUkFNLCBMUEFSQU0pCiB7Ci0gICAgOjpTaG93V2luZG93KG1faHduZCwgU1dfSElERSk7Ci0g
ICAgbV9pbnNwZWN0ZWRXZWJWaWV3LT5wYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0
V2luZG93VmlzaWJsZShmYWxzZSwgbV9zaG91bGRBdHRhY2hXaGVuU2hvd24pOwotCi0gICAgaGlk
ZUhpZ2hsaWdodCgpOworICAgIDo6U2hvd1dpbmRvdyhtX2Zyb250ZW5kSHduZCwgU1dfSElERSk7
CisgICAgbV9pbnNwZWN0ZWRXZWJWaWV3LT5wYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+
Y2xvc2UoKTsKIAogICAgIHJldHVybiAwOwogfQogCi1MUkVTVUxUIFdlYkluc3BlY3RvckNsaWVu
dDo6b25TZXRGb2N1cygpCitMUkVTVUxUIFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpvblNl
dEZvY3VzKCkKIHsKLSAgICBTZXRGb2N1cyhtX3dlYlZpZXdId25kKTsKKyAgICBTZXRGb2N1cyht
X2Zyb250ZW5kV2ViVmlld0h3bmQpOwogICAgIHJldHVybiAwOwogfQogCi12b2lkIFdlYkluc3Bl
Y3RvckNsaWVudDo6b25XZWJWaWV3V2luZG93UG9zQ2hhbmdpbmcoV1BBUkFNLCBMUEFSQU0gbFBh
cmFtKQordm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6b25XZWJWaWV3V2luZG93UG9z
Q2hhbmdpbmcoV1BBUkFNLCBMUEFSQU0gbFBhcmFtKQogewogICAgIEFTU0VSVChtX2F0dGFjaGVk
KTsKIApAQCAtNDQxLDE3ICs0NTgsMTcgQEAgdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6Om9uV2Vi
Vmlld1dpbmRvd1Bvc0NoYW5naW5nKFdQQVJBTSwgTFBBUkFNIGxQYXJhbSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgUkVDVCBpbnNwZWN0b3JSZWN0OwotICAgIEdldENsaWVudFJlY3QobV93ZWJW
aWV3SHduZCwgJmluc3BlY3RvclJlY3QpOworICAgIEdldENsaWVudFJlY3QobV9mcm9udGVuZFdl
YlZpZXdId25kLCAmaW5zcGVjdG9yUmVjdCk7CiAgICAgdW5zaWduZWQgaW5zcGVjdG9ySGVpZ2h0
ID0gaW5zcGVjdG9yUmVjdC5ib3R0b20gLSBpbnNwZWN0b3JSZWN0LnRvcDsKIAogICAgIHdpbmRv
d1Bvcy0+Y3kgLT0gaW5zcGVjdG9ySGVpZ2h0OwogCi0gICAgU2V0V2luZG93UG9zKG1fd2ViVmll
d0h3bmQsIDAsIHdpbmRvd1Bvcy0+eCwgd2luZG93UG9zLT55ICsgd2luZG93UG9zLT5jeSwgd2lu
ZG93UG9zLT5jeCwgaW5zcGVjdG9ySGVpZ2h0LCBTV1BfTk9aT1JERVIpOworICAgIFNldFdpbmRv
d1BvcyhtX2Zyb250ZW5kV2ViVmlld0h3bmQsIDAsIHdpbmRvd1Bvcy0+eCwgd2luZG93UG9zLT55
ICsgd2luZG93UG9zLT5jeSwgd2luZG93UG9zLT5jeCwgaW5zcGVjdG9ySGVpZ2h0LCBTV1BfTk9a
T1JERVIpOwogfQogCiBzdGF0aWMgTFJFU1VMVCBDQUxMQkFDSyBXZWJJbnNwZWN0b3JXbmRQcm9j
KEhXTkQgaHduZCwgVUlOVCBtc2csIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCiB7Ci0g
ICAgV2ViSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQgPSByZWludGVycHJldF9jYXN0PFdlYkluc3Bl
Y3RvckNsaWVudCo+KDo6R2V0UHJvcChod25kLCBrV2ViSW5zcGVjdG9yUG9pbnRlclByb3ApKTsK
KyAgICBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudCogY2xpZW50ID0gcmVpbnRlcnByZXRfY2Fz
dDxXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudCo+KDo6R2V0UHJvcChod25kLCBrV2ViSW5zcGVj
dG9yUG9pbnRlclByb3ApKTsKICAgICBpZiAoIWNsaWVudCkKICAgICAgICAgcmV0dXJuIDo6RGVm
V2luZG93UHJvYyhod25kLCBtc2csIHdQYXJhbSwgbFBhcmFtKTsKIApAQCAtNDcxLDcgKzQ4OCw3
IEBAIHN0YXRpYyBMUkVTVUxUIENBTExCQUNLIFdlYkluc3BlY3RvclduZFByb2MoSFdORCBod25k
LCBVSU5UIG1zZywgV1BBUkFNIHdQYXJhbSwKICAgICByZXR1cm4gOjpEZWZXaW5kb3dQcm9jKGh3
bmQsIG1zZywgd1BhcmFtLCBsUGFyYW0pOwogfQogCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6
d2luZG93UmVjZWl2ZWRNZXNzYWdlKEhXTkQsIFVJTlQgbXNnLCBXUEFSQU0gd1BhcmFtLCBMUEFS
QU0gbFBhcmFtKQordm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6d2luZG93UmVjZWl2
ZWRNZXNzYWdlKEhXTkQsIFVJTlQgbXNnLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQog
ewogICAgIHN3aXRjaCAobXNnKSB7CiAgICAgICAgIGNhc2UgV01fV0lORE9XUE9TQ0hBTkdJTkc6
CmRpZmYgLS1naXQgYS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVu
dC5oIGIvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuaAppbmRl
eCAzZjY1YjBhLi40NTVlM2ExIDEwMDY0NAotLS0gYS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0
L1dlYkluc3BlY3RvckNsaWVudC5oCisrKyBiL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2Vi
SW5zcGVjdG9yQ2xpZW50LmgKQEAgLTMxLDYgKzMxLDcgQEAKIAogI2luY2x1ZGUgPFdlYkNvcmUv
Q09NUHRyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JDbGllbnQuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL1BsYXRmb3JtU3RyaW5nLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9XaW5kb3dNZXNzYWdlTGlz
dGVuZXIuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CkBAIC0zOSw0NCArNDAsNjAgQEAKIGNs
YXNzIFdlYk5vZGVIaWdobGlnaHQ7CiBjbGFzcyBXZWJWaWV3OwogCi1jbGFzcyBXZWJJbnNwZWN0
b3JDbGllbnQgOiBwdWJsaWMgV2ViQ29yZTo6SW5zcGVjdG9yQ2xpZW50LCBXZWJDb3JlOjpXaW5k
b3dNZXNzYWdlTGlzdGVuZXIgeworY2xhc3MgV2ViSW5zcGVjdG9yQ2xpZW50IDogcHVibGljIFdl
YkNvcmU6Okluc3BlY3RvckNsaWVudCB7CiBwdWJsaWM6CiAgICAgV2ViSW5zcGVjdG9yQ2xpZW50
KFdlYlZpZXcqKTsKIAogICAgIC8vIEluc3BlY3RvckNsaWVudAogICAgIHZpcnR1YWwgdm9pZCBp
bnNwZWN0b3JEZXN0cm95ZWQoKTsKIAotICAgIHZpcnR1YWwgV2ViQ29yZTo6UGFnZSogY3JlYXRl
UGFnZSgpOwotCi0gICAgdmlydHVhbCBXZWJDb3JlOjpTdHJpbmcgbG9jYWxpemVkU3RyaW5nc1VS
TCgpOwotCi0gICAgdmlydHVhbCBXZWJDb3JlOjpTdHJpbmcgaGlkZGVuUGFuZWxzKCk7Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgc2hvd1dpbmRvdygpOwotICAgIHZpcnR1YWwgdm9pZCBjbG9zZVdpbmRv
dygpOwotICAgIHZpcnR1YWwgYm9vbCB3aW5kb3dWaXNpYmxlKCk7Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgYXR0YWNoV2luZG93KCk7Ci0gICAgdmlydHVhbCB2b2lkIGRldGFjaFdpbmRvdygpOwotCi0g
ICAgdmlydHVhbCB2b2lkIHNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCk7
CisgICAgdmlydHVhbCB2b2lkIG9wZW5JbnNwZWN0b3JGcm9udGVuZChXZWJDb3JlOjpJbnNwZWN0
b3JDb250cm9sbGVyKik7CiAKICAgICB2aXJ0dWFsIHZvaWQgaGlnaGxpZ2h0KFdlYkNvcmU6Ok5v
ZGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgaGlkZUhpZ2hsaWdodCgpOwogCi0gICAgdmlydHVhbCB2
b2lkIGluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBuZXdVUkwpOwot
CiAgICAgdmlydHVhbCB2b2lkIHBvcHVsYXRlU2V0dGluZyhjb25zdCBXZWJDb3JlOjpTdHJpbmcm
IGtleSwgV2ViQ29yZTo6U3RyaW5nKiB2YWx1ZSk7CiAgICAgdmlydHVhbCB2b2lkIHN0b3JlU2V0
dGluZyhjb25zdCBXZWJDb3JlOjpTdHJpbmcmIGtleSwgY29uc3QgV2ViQ29yZTo6U3RyaW5nJiB2
YWx1ZSk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgaW5zcGVjdG9yV2luZG93T2JqZWN0Q2xlYXJlZCgp
OworICAgIHZvaWQgdXBkYXRlSGlnaGxpZ2h0KCk7CisgICAgdm9pZCBmcm9udGVuZENsb3Npbmco
KSB7IG1fZnJvbnRlbmRId25kID0gMDsgfQogCiBwcml2YXRlOgogICAgIH5XZWJJbnNwZWN0b3JD
bGllbnQoKTsKIAorICAgIFdlYlZpZXcqIG1faW5zcGVjdGVkV2ViVmlldzsKKyAgICBIV05EIG1f
aW5zcGVjdGVkV2ViVmlld0h3bmQ7CisgICAgSFdORCBtX2Zyb250ZW5kSHduZDsKKworICAgIE93
blB0cjxXZWJOb2RlSGlnaGxpZ2h0PiBtX2hpZ2hsaWdodDsKK307CisKK2NsYXNzIFdlYkluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50IDogcHVibGljIFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xp
ZW50TG9jYWwsIFdlYkNvcmU6OldpbmRvd01lc3NhZ2VMaXN0ZW5lciB7CitwdWJsaWM6CisgICAg
V2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQoV2ViVmlldyogaW5zcGVjdGVkV2ViVmlldywgSFdO
RCBpbnNwZWN0ZWRXZWJWaWV3SHduZCwgSFdORCBmcm9udGVuZEh3bmQsIGNvbnN0IENPTVB0cjxX
ZWJWaWV3PiYgZnJvdG5lbmRXZWJWaWV3LCBIV05EIGZyb250ZW5kV2ViVmlld0h3bmQsIFdlYklu
c3BlY3RvckNsaWVudCogaW5zcGVjdG9yQ2xpZW50KTsKKworICAgIHZpcnR1YWwgdm9pZCBmcm9u
dGVuZExvYWRlZCgpOworICAgIAorICAgIHZpcnR1YWwgV2ViQ29yZTo6U3RyaW5nIGxvY2FsaXpl
ZFN0cmluZ3NVUkwoKTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OlN0cmluZyBoaWRkZW5QYW5lbHMo
KTsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgYnJpbmdUb0Zyb250KCk7CisgICAgdmlydHVhbCB2
b2lkIGNsb3NlV2luZG93KCk7CisgICAgCisgICAgdmlydHVhbCB2b2lkIGF0dGFjaFdpbmRvdygp
OworICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hXaW5kb3coKTsKKyAgICAKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KTsKKyAgICB2aXJ0dWFs
IHZvaWQgaW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpTdHJpbmcmIG5ld1VSTCk7
CisKK3ByaXZhdGU6CisgICAgfldlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50KCk7CisKICAgICB2
b2lkIGNsb3NlV2luZG93V2l0aG91dE5vdGlmaWNhdGlvbnMoKTsKICAgICB2b2lkIHNob3dXaW5k
b3dXaXRob3V0Tm90aWZpY2F0aW9ucygpOwogCisgICAgdm9pZCBkZXN0cm95SW5zcGVjdG9yVmll
dygpOworCiAgICAgdm9pZCB1cGRhdGVXaW5kb3dUaXRsZSgpOwogCiAgICAgTFJFU1VMVCBvbkdl
dE1pbk1heEluZm8oV1BBUkFNLCBMUEFSQU0pOwpAQCAtOTAsMTYgKzEwNywxNiBAQCBwcml2YXRl
OgogCiAgICAgV2ViVmlldyogbV9pbnNwZWN0ZWRXZWJWaWV3OwogICAgIEhXTkQgbV9pbnNwZWN0
ZWRXZWJWaWV3SHduZDsKLSAgICBIV05EIG1faHduZDsKLSAgICBDT01QdHI8V2ViVmlldz4gbV93
ZWJWaWV3OwotICAgIEhXTkQgbV93ZWJWaWV3SHduZDsKKyAgICBIV05EIG1fZnJvbnRlbmRId25k
OworICAgIFdlYkluc3BlY3RvckNsaWVudCogbV9pbnNwZWN0b3JDbGllbnQ7CisgICAgQ09NUHRy
PFdlYlZpZXc+IG1fZnJvbnRlbmRXZWJWaWV3OworICAgIEhXTkQgbV9mcm9udGVuZFdlYlZpZXdI
d25kOwogCiAgICAgYm9vbCBtX3Nob3VsZEF0dGFjaFdoZW5TaG93bjsKICAgICBib29sIG1fYXR0
YWNoZWQ7CiAKLSAgICBPd25QdHI8V2ViTm9kZUhpZ2hsaWdodD4gbV9oaWdobGlnaHQ7Ci0KICAg
ICBXZWJDb3JlOjpTdHJpbmcgbV9pbnNwZWN0ZWRVUkw7CisgICAgYm9vbCBtX2Rlc3Ryb3lpbmdJ
bnNwZWN0b3JWaWV3OwogCiAgICAgc3RhdGljIGZyaWVuZCBMUkVTVUxUIENBTExCQUNLIFdlYklu
c3BlY3RvclduZFByb2MoSFdORCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0pOwogfTsKZGlmZiAtLWdp
dCBhL1dlYktpdC93aW4vV2ViSW5zcGVjdG9yLmNwcCBiL1dlYktpdC93aW4vV2ViSW5zcGVjdG9y
LmNwcAppbmRleCBlNGFjMzJiLi4wMzM3NzExIDEwMDY0NAotLS0gYS9XZWJLaXQvd2luL1dlYklu
c3BlY3Rvci5jcHAKKysrIGIvV2ViS2l0L3dpbi9XZWJJbnNwZWN0b3IuY3BwCkBAIC0xMzEsMTkg
KzEzMSwxMSBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkluc3BlY3Rvcjo6Y2xvc2Uo
KQogCiBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkluc3BlY3Rvcjo6YXR0YWNoKCkKIHsK
LSAgICBpZiAobV93ZWJWaWV3KQotICAgICAgICBpZiAoUGFnZSogcGFnZSA9IG1fd2ViVmlldy0+
cGFnZSgpKQotICAgICAgICAgICAgcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5hdHRhY2hX
aW5kb3coKTsKLQogICAgIHJldHVybiBTX09LOwogfQogCiBIUkVTVUxUIFNURE1FVEhPRENBTExU
WVBFIFdlYkluc3BlY3Rvcjo6ZGV0YWNoKCkKIHsKLSAgICBpZiAobV93ZWJWaWV3KQotICAgICAg
ICBpZiAoUGFnZSogcGFnZSA9IG1fd2ViVmlldy0+cGFnZSgpKQotICAgICAgICAgICAgcGFnZS0+
aW5zcGVjdG9yQ29udHJvbGxlcigpLT5kZXRhY2hXaW5kb3coKTsKLQogICAgIHJldHVybiBTX09L
OwogfQogCmRpZmYgLS1naXQgYS9XZWJLaXQvd3gvQ2hhbmdlTG9nIGIvV2ViS2l0L3d4L0NoYW5n
ZUxvZwppbmRleCA0YWM3NjA5Li5kZjcyY2Q1IDEwMDY0NAotLS0gYS9XZWJLaXQvd3gvQ2hhbmdl
TG9nCisrKyBiL1dlYktpdC93eC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMC0wMy0x
MCAgWXVyeSBTZW1pa2hhdHNreSA8eXVyeXNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEludHJvZHVjZSBJbnNwZWN0b3JGcm9u
dGVuZENsaWVudCB0aGF0IHByb3ZpZGVzIEluc3BlY3RvckZyb250ZW5kIHdpdGggYW4gaW50ZXJm
YWNlIHRvIHRoZSBlbWJlZGRlci4gSW5zcGVjdG9yQ2xpZW50IG5vdyBzZXJ2ZXMgYXMgYSBkZWxl
Z2F0ZSBmb3IgSW5zcGVjdG9yQ29udHJvbGxlciBhbmQgZG9lcyBub3QgY29udGFpbiBtZXRob2Rz
IGZvciBtYW5hZ2luZyBpbnNwZWN0b3IgZnJvbnRlbmQgd2luZG93LiBUaGF0IGFsbG93cyB0byBj
cmVhdGUgcmVtb3RlIEluc3BlY3RvckZyb250ZW5kSG9zdC4KKworICAgICAgICBJbnRyb2R1Y2Ug
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQgdGhhdCB3b3VsZCBwcm92aWRlIEluc3BlY3RvckZyb250
ZW5kIHdpdGggYW4gaW50ZXJmYWNlIHRvIHRoZSBlbWJlZGRlcgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzUwMzYKKworICAgICAgICAqIFdlYktpdFN1
cHBvcnQvSW5zcGVjdG9yQ2xpZW50V3guY3BwOgorICAgICAgICAqIFdlYktpdFN1cHBvcnQvSW5z
cGVjdG9yQ2xpZW50V3guaDoKKwogMjAxMC0wMy0wMiAgQWRhbSBUcmVhdCAgPGF0cmVhdEByaW0u
Y29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmUgSHlhdHQuCmRpZmYgLS1naXQgYS9XZWJL
aXQvd3gvV2ViS2l0U3VwcG9ydC9JbnNwZWN0b3JDbGllbnRXeC5jcHAgYi9XZWJLaXQvd3gvV2Vi
S2l0U3VwcG9ydC9JbnNwZWN0b3JDbGllbnRXeC5jcHAKaW5kZXggZmYyMWFlMC4uNDNmYmIyYiAx
MDA2NDQKLS0tIGEvV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50V3guY3Bw
CisrKyBiL1dlYktpdC93eC9XZWJLaXRTdXBwb3J0L0luc3BlY3RvckNsaWVudFd4LmNwcApAQCAt
NDcsNDUgKzQ3LDggQEAgdm9pZCBJbnNwZWN0b3JDbGllbnRXeDo6aW5zcGVjdG9yRGVzdHJveWVk
KCkKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1QYWdlKiBJbnNwZWN0b3JDbGllbnRXeDo6
Y3JlYXRlUGFnZSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0K
LQotU3RyaW5nIEluc3BlY3RvckNsaWVudFd4Ojpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotU3RyaW5nIElu
c3BlY3RvckNsaWVudFd4OjpoaWRkZW5QYW5lbHMoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi12b2lkIEluc3BlY3RvckNsaWVudFd4OjpzaG93
V2luZG93KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotICAgIAotdm9pZCBJbnNwZWN0
b3JDbGllbnRXeDo6Y2xvc2VXaW5kb3coKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0K
LXZvaWQgSW5zcGVjdG9yQ2xpZW50V3g6OmF0dGFjaFdpbmRvdygpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDbGllbnRXeDo6ZGV0YWNoV2luZG93KCkKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQogCi12b2lkIEluc3BlY3RvckNsaWVudFd4OjpzZXRB
dHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpCit2b2lkIEluc3BlY3RvckNsaWVu
dFd4OjpvcGVuSW5zcGVjdG9yRnJvbnRlbmQoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlciop
OwogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CkBAIC0xMDAsMTEgKzYzLDYgQEAgdm9pZCBJ
bnNwZWN0b3JDbGllbnRXeDo6aGlkZUhpZ2hsaWdodCgpCiAgICAgbm90SW1wbGVtZW50ZWQoKTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JDbGllbnRXeDo6aW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBT
dHJpbmcmIG5ld1VSTCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCiB2b2lkIEluc3Bl
Y3RvckNsaWVudFd4Ojpwb3B1bGF0ZVNldHRpbmcoY29uc3QgU3RyaW5nJiBrZXksIFN0cmluZyog
c2V0dGluZykKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwpAQCAtMTE1LDkgKzczLDQgQEAgdm9p
ZCBJbnNwZWN0b3JDbGllbnRXeDo6c3RvcmVTZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5LCBjb25z
dCBTdHJpbmcmIHNldHRpbmcpCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JDbGllbnRXeDo6aW5zcGVjdG9yV2luZG93T2JqZWN0Q2xlYXJlZCgpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQogfTsKZGlmZiAtLWdpdCBhL1dlYktpdC93eC9XZWJLaXRTdXBw
b3J0L0luc3BlY3RvckNsaWVudFd4LmggYi9XZWJLaXQvd3gvV2ViS2l0U3VwcG9ydC9JbnNwZWN0
b3JDbGllbnRXeC5oCmluZGV4IGY5MDU4MTcuLjc2NzVkYzEgMTAwNjQ0Ci0tLSBhL1dlYktpdC93
eC9XZWJLaXRTdXBwb3J0L0luc3BlY3RvckNsaWVudFd4LmgKKysrIGIvV2ViS2l0L3d4L1dlYktp
dFN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50V3guaApAQCAtNDEsMjkgKzQxLDEzIEBAIHB1YmxpYzoK
IAogICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0b3JEZXN0cm95ZWQoKTsKIAotICAgIHZpcnR1YWwg
UGFnZSogY3JlYXRlUGFnZSgpOwotCi0gICAgdmlydHVhbCBTdHJpbmcgbG9jYWxpemVkU3RyaW5n
c1VSTCgpOwotCi0gICAgdmlydHVhbCBTdHJpbmcgaGlkZGVuUGFuZWxzKCk7Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgc2hvd1dpbmRvdygpOwotICAgIHZpcnR1YWwgdm9pZCBjbG9zZVdpbmRvdygpOwot
Ci0gICAgdmlydHVhbCB2b2lkIGF0dGFjaFdpbmRvdygpOwotICAgIHZpcnR1YWwgdm9pZCBkZXRh
Y2hXaW5kb3coKTsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1
bnNpZ25lZCBoZWlnaHQpOworICAgIHZpcnR1YWwgdm9pZCBvcGVuSW5zcGVjdG9yRnJvbnRlbmQo
V2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlciopOwogCiAgICAgdmlydHVhbCB2b2lkIGhpZ2hs
aWdodChOb2RlKik7CiAgICAgdmlydHVhbCB2b2lkIGhpZGVIaWdobGlnaHQoKTsKIAotICAgIHZp
cnR1YWwgdm9pZCBpbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYgbmV3VVJMKTsKLQog
ICAgIHZpcnR1YWwgdm9pZCBwb3B1bGF0ZVNldHRpbmcoY29uc3QgU3RyaW5nJiBrZXksIFN0cmlu
ZyogdmFsdWUpOwogICAgIHZpcnR1YWwgdm9pZCBzdG9yZVNldHRpbmcoY29uc3QgU3RyaW5nJiBr
ZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpOwotCi0gICAgdmlydHVhbCB2b2lkIGluc3BlY3Rvcldp
bmRvd09iamVjdENsZWFyZWQoKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50493</attachid>
            <date>2010-03-11 06:20:16 -0800</date>
            <delta_ts>2010-03-11 06:27:30 -0800</delta_ts>
            <desc>patch</desc>
            <filename>frontend-client4.patch</filename>
            <type>text/plain</type>
            <size>163007</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MzUyZGJkYy4uZjQxMTM0NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMTAgQEAKKzIwMTAtMDMtMTEgIFl1cnkgU2VtaWto
YXRza3kgPHl1cnlzQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBJbnRyb2R1Y2UgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQgdGhh
dCBwcm92aWRlcyBJbnNwZWN0b3JGcm9udGVuZCB3aXRoIGFuIGludGVyZmFjZSB0byB0aGUgZW1i
ZWRkZXIuIEluc3BlY3RvckNsaWVudCBub3cgc2VydmVzIGFzIGEgZGVsZWdhdGUgZm9yIEluc3Bl
Y3RvckNvbnRyb2xsZXIgYW5kIGRvZXMgbm90IGNvbnRhaW4gbWV0aG9kcyBmb3IgbWFuYWdpbmcg
aW5zcGVjdG9yIGZyb250ZW5kIHdpbmRvdy4gVGhhdCBhbGxvd3MgdG8gY3JlYXRlIHJlbW90ZSBJ
bnNwZWN0b3JGcm9udGVuZEhvc3QuCisKKyAgICAgICAgSW50cm9kdWNlIEluc3BlY3RvckZyb250
ZW5kQ2xpZW50IHRoYXQgd291bGQgcHJvdmlkZSBJbnNwZWN0b3JGcm9udGVuZCB3aXRoIGFuIGlu
dGVyZmFjZSB0byB0aGUgZW1iZWRkZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTM1MDM2CisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiAoT09QUyEpCisK
KyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLkluc3BlY3Rvci5l
eHA6CisgICAgICAgICogV2ViQ29yZS5iYXNlLmV4cDoKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6
CisgICAgICAgICogV2ViQ29yZS5vcmRlcjoKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAg
ICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaW5zcGVj
dG9yL0NvbnNvbGVNZXNzYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnNvbGVNZXNzYWdl
OjphZGRUb0Zyb250ZW5kKToKKyAgICAgICAgKiBpbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuaDoK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ2xpZW50Lmg6CisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
Q29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JDb250cm9sbGVyOjp+SW5zcGVjdG9yQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0ZWRQYWdlRGVzdHJveWVkKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OndpbmRvd1Zpc2libGUpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZnJvbnRlbmRSZWFkeSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjp3aWxsQ2xvc2VGcm9udGVuZCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjphZGRDb25zb2xlTWVzc2FnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRJbnNwZWN0b3JGcm9udGVuZENs
aWVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0ZWRX
aW5kb3dTY3JpcHRPYmplY3RDbGVhcmVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNv
bnRyb2xsZXI6OnNldEZyb250ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRy
b2xsZXI6OnNob3cpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6Y2xv
c2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6cmVsZWFzZURPTUFn
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnBvcHVsYXRlU2Ny
aXB0T2JqZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRD
b21taXRMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmdldFBy
b2ZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZW5hYmxlRGVi
dWdnZXIpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpoYXNJbnNwZWN0b3JGcm9udGVuZENs
aWVudCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kOjpJbnNwZWN0b3JGcm9udGVuZCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZDo6fkluc3BlY3RvckZyb250ZW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kOjphZGRDb25zb2xlTWVzc2FnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZDo6YnJpbmdUb0Zyb250KToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kOjppbnNwZWN0ZWRVUkxDaGFuZ2VkKToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuaDoKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JGcm9udGVuZENsaWVudDo6fkluc3BlY3RvckZyb250ZW5kQ2xpZW50KToKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RnJvbnRlbmRNZW51UHJvdmlkZXI6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpGcm9udGVuZE1lbnVQcm92aWRlcjo6ZGlzY29ubmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGcm9udGVuZE1lbnVQcm92aWRlcjo6RnJvbnRlbmRNZW51UHJvdmlkZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6RnJvbnRlbmRNZW51UHJvdmlkZXI6On5Gcm9udGVuZE1lbnVQcm92aWRl
cik6CisgICAgICAgIChXZWJDb3JlOjpGcm9udGVuZE1lbnVQcm92aWRlcjo6cG9wdWxhdGVDb250
ZXh0TWVudSk6CisgICAgICAgIChXZWJDb3JlOjpGcm9udGVuZE1lbnVQcm92aWRlcjo6Y29udGV4
dE1lbnVJdGVtU2VsZWN0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJvbnRlbmRNZW51UHJvdmlk
ZXI6OmNvbnRleHRNZW51Q2xlYXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9u
dGVuZENsaWVudExvY2FsOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6On5JbnNwZWN0b3JGcm9udGVu
ZENsaWVudExvY2FsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50
TG9jYWw6OndpbmRvd09iamVjdENsZWFyZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RnJvbnRlbmRDbGllbnRMb2NhbDo6ZnJvbnRlbmRMb2FkZWQpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6Y2FuQXR0YWNoV2luZG93KToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OmNoYW5nZUF0dGFjaGVkV2lu
ZG93SGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9j
YWw6Om1vdmVXaW5kb3dCeSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENs
aWVudExvY2FsOjpzaG93Q29udGV4dE1lbnUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RnJvbnRlbmRDbGllbnRMb2NhbDo6c2V0QXR0YWNoZWRXaW5kb3cpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6cmVzdG9yZUF0dGFjaGVkV2luZG93SGVp
Z2h0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OmNv
bnN0cmFpbmVkQXR0YWNoZWRXaW5kb3dIZWlnaHQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmg6IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9J
bnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJv
bnRlbmRIb3N0OjpJbnNwZWN0b3JGcm9udGVuZEhvc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yRnJvbnRlbmRIb3N0Ojp+SW5zcGVjdG9yRnJvbnRlbmRIb3N0KToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckZyb250ZW5kSG9zdDo6bG9hZGVkKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckZyb250ZW5kSG9zdDo6YXR0YWNoKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckZyb250ZW5kSG9zdDo6ZGV0YWNoKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZy
b250ZW5kSG9zdDo6Y2xvc2VXaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJv
bnRlbmRIb3N0OjpicmluZ1RvRnJvbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJv
bnRlbmRIb3N0OjppbnNwZWN0ZWRVUkxDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckZyb250ZW5kSG9zdDo6Y2FuQXR0YWNoV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckZyb250ZW5kSG9zdDo6c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRIb3N0Ojptb3ZlV2luZG93QnkpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRIb3N0OjpzaG93Q29udGV4dE1lbnUpOgorICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckZyb250ZW5kSG9zdDo6Y3JlYXRlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yRnJvbnRlbmRIb3N0LmlkbDoKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0lu
c3BlY3RvckZyb250ZW5kSG9zdFN0dWIuanM6CisgICAgICAgICguV2ViSW5zcGVjdG9yLkluc3Bl
Y3RvckZyb250ZW5kSG9zdFN0dWIucHJvdG90eXBlLmJyaW5nVG9Gcm9udCk6CisgICAgICAgICgu
V2ViSW5zcGVjdG9yLkluc3BlY3RvckZyb250ZW5kSG9zdFN0dWIucHJvdG90eXBlLmluc3BlY3Rl
ZFVSTENoYW5nZWQpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpz
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLmxvYWRlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
Y2xvc2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLmJyaW5nVG9Gcm9udCk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuaW5zcGVjdGVkVVJMQ2hhbmdlZCk6CisgICAgICAgICogbG9hZGVyL0VtcHR5
Q2xpZW50cy5oOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlJbnNwZWN0b3JDbGllbnQ6Om9wZW5J
bnNwZWN0b3JGcm9udGVuZCk6CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpkaXNwYXRjaERpZENsZWFyV2luZG93T2JqZWN0
SW5Xb3JsZCk6CisgICAgICAgICogcGFnZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBh
Z2U6OlBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6flBhZ2UpOgorICAgICAgICAqIHBh
Z2UvUGFnZS5oOgorICAgICAgICAqIHBsYXRmb3JtL0NvbnRleHRNZW51LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRleHRNZW51Ojpwb3B1bGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250
ZXh0TWVudTo6YWRkSW5zcGVjdEVsZW1lbnRJdGVtKToKKwogMjAxMC0wMy0xMCAgU3RldmUgQmxv
Y2sgIDxzdGV2ZWJsb2NrQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSmVyZW15
IE9ybG93LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1dlYkNvcmUvR05V
bWFrZWZpbGUuYW0KaW5kZXggMWI0ZmRiYy4uOTcyM2RkOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9H
TlVtYWtlZmlsZS5hbQorKysgYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC0xMjM0LDYgKzEy
MzQsOSBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNvbnRyb2xsZXIuaCBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuY3Bw
IFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5oIFwKKwlXZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudC5oIFwKKwlXZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmNwcCBcCisJV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5oIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JGcm9udGVuZEhvc3QuY3BwIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVu
ZEhvc3QuaCBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2UuY3BwIFwKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5JbnNwZWN0b3IuZXhwIGIvV2ViQ29yZS9XZWJDb3Jl
Lkluc3BlY3Rvci5leHAKaW5kZXggMzc5YjdhMi4uZDVjMjFjMyAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9XZWJDb3JlLkluc3BlY3Rvci5leHAKKysrIGIvV2ViQ29yZS9XZWJDb3JlLkluc3BlY3Rvci5l
eHAKQEAgLTEsMTEgKzEsOSBAQAogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTBz
ZXRTZXR0aW5nRVJLTlNfNlN0cmluZ0VTM18KLV9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJv
bGxlcjEyYXR0YWNoV2luZG93RXYKLV9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjEy
ZGV0YWNoV2luZG93RXYKIF9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjE0ZW5hYmxl
RGVidWdnZXJFdgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTRlbmFibGVQcm9m
aWxlckViYgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTVkaXNhYmxlRGVidWdn
ZXJFYgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTVkaXNhYmxlUHJvZmlsZXJF
YgotX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTZzZXRXaW5kb3dWaXNpYmxlRWJi
CitfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIyNnNldEluc3BlY3RvckZyb250ZW5k
Q2xpZW50RU4zV1RGMTBQYXNzT3duUHRySU5TXzIzSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRFRUUK
IF9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjI2c3RvcFVzZXJJbml0aWF0ZWRQcm9m
aWxpbmdFdgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMjdzdGFydFVzZXJJbml0
aWF0ZWRQcm9maWxpbmdFUE5TXzVUaW1lcklTMF9FRQogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JD
b250cm9sbGVyNHNob3dFdgpAQCAtMTgsMyArMTYsMTMgQEAgX19aTks3V2ViQ29yZTE5SW5zcGVj
dG9yQ29udHJvbGxlcjdlbmFibGVkRXYKIF9fWk5LN1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xs
ZXI3c2V0dGluZ0VSS05TXzZTdHJpbmdFCiBfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xs
ZXIyMXN0YXJ0VGltZWxpbmVQcm9maWxlckV2CiBfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRy
b2xsZXIyMHN0b3BUaW1lbGluZVByb2ZpbGVyRXYKK19fWk43V2ViQ29yZTI4SW5zcGVjdG9yRnJv
bnRlbmRDbGllbnRMb2NhbEMyRVBOU18xOUluc3BlY3RvckNvbnRyb2xsZXJFUE5TXzRQYWdlRQor
X19aTjdXZWJDb3JlMjhJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsRDJFdgorX19aTjdXZWJD
b3JlMjhJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsMTl3aW5kb3dPYmplY3RDbGVhcmVkRXYK
K19fWk43V2ViQ29yZTI4SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDE0ZnJvbnRlbmRMb2Fk
ZWRFdgorX19aTjdXZWJDb3JlMjhJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsMjdyZXN0b3Jl
QXR0YWNoZWRXaW5kb3dIZWlnaHRFdgorX19aTjdXZWJDb3JlMjhJbnNwZWN0b3JGcm9udGVuZENs
aWVudExvY2FsMTJtb3ZlV2luZG93QnlFZmYKK19fWk43V2ViQ29yZTI4SW5zcGVjdG9yRnJvbnRl
bmRDbGllbnRMb2NhbDE1Y2FuQXR0YWNoV2luZG93RXYKK19fWk43V2ViQ29yZTI4SW5zcGVjdG9y
RnJvbnRlbmRDbGllbnRMb2NhbDE1c2hvd0NvbnRleHRNZW51RVBOU181RXZlbnRFUktOM1dURjZW
ZWN0b3JJUE5TXzE1Q29udGV4dE1lbnVJdGVtRUxtMEVFRQorX19aTjdXZWJDb3JlMjhJbnNwZWN0
b3JGcm9udGVuZENsaWVudExvY2FsMTdzZXRBdHRhY2hlZFdpbmRvd0ViCitfX1pON1dlYkNvcmUy
OEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwyNmNoYW5nZUF0dGFjaGVkV2luZG93SGVpZ2h0
RWoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cCBiL1dlYkNvcmUvV2ViQ29y
ZS5iYXNlLmV4cAppbmRleCA0MzY0YWVhLi45YmFmYWQ3IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dl
YkNvcmUuYmFzZS5leHAKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCkBAIC04NzQsNyAr
ODc0LDYgQEAgX19aTks3V2ViQ29yZTE2VmlzaWJsZVNlbGVjdGlvbjIzaXNDb250ZW50UmljaGx5
RWRpdGFibGVFdgogX19aTks3V2ViQ29yZTE2VmlzaWJsZVNlbGVjdGlvbjVpc0FsbEVOU18yMVN0
YXlJbkVkaXRhYmxlQ29udGVudEUKIF9fWk5LN1dlYkNvcmUxN1Jlc291cmNlRXJyb3JCYXNlOGxh
enlJbml0RXYKIF9fWk5LN1dlYkNvcmUxOUFuaW1hdGlvbkNvbnRyb2xsZXIyNG51bWJlck9mQWN0
aXZlQW5pbWF0aW9uc0V2Ci1fX1pOSzdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTVjYW5B
dHRhY2hXaW5kb3dFdgogX19aTks3V2ViQ29yZTE5UmVzb3VyY2VSZXF1ZXN0QmFzZTEwaHR0cE1l
dGhvZEV2CiBfX1pOSzdXZWJDb3JlMTlSZXNvdXJjZVJlcXVlc3RCYXNlM3VybEV2CiBfX1pOSzdX
ZWJDb3JlMTlSZXNvdXJjZVJlcXVlc3RCYXNlN2lzRW1wdHlFdgpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA3MWZhNjlkLi4zNzI2
MWEyIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9XZWJDb3JlL1dlYkNv
cmUuZ3lwaQpAQCAtMTYyNiw2ICsxNjI2LDkgQEAKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5z
cGVjdG9yRE9NU3RvcmFnZVJlc291cmNlLmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNw
ZWN0b3JGcm9udGVuZC5jcHAnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JGcm9u
dGVuZC5oJywKKyAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQu
aCcsCisgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwu
Y3BwJywKKyAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2Nh
bC5oJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcCcs
CiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5oJywKICAgICAg
ICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2UuY3BwJywKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvV2ViQ29yZS5vcmRlciBiL1dlYkNvcmUvV2ViQ29yZS5vcmRlcgppbmRleCBhOGQyMGZk
Li40OGYzMjFiIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUub3JkZXIKKysrIGIvV2ViQ29y
ZS9XZWJDb3JlLm9yZGVyCkBAIC0yMzc4OSw3ICsyMzc4OSw2IEBAIF9fWk43V2ViQ29yZTE4U2Ny
aXB0RnVuY3Rpb25DYWxsMTRhcHBlbmRBcmd1bWVudEViCiBfX1pON1dlYkNvcmUxOFNjcmlwdEZ1
bmN0aW9uQ2FsbDRjYWxsRXYKIF9fWk43V2ViQ29yZTE4U2NyaXB0RnVuY3Rpb25DYWxsNGNhbGxF
UmJiCiBfX1pON1dlYkNvcmU0NGpzSW5zcGVjdG9yQ29udHJvbGxlclByb3RvdHlwZUZ1bmN0aW9u
QXR0YWNoRVBOM0pTQzlFeGVjU3RhdGVFUE5TMF84SlNPYmplY3RFTlMwXzdKU1ZhbHVlRVJLTlMw
XzdBcmdMaXN0RQotX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTJhdHRhY2hXaW5k
b3dFdgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMjFwb3B1bGF0ZVNjcmlwdE9i
amVjdHNFdgogX19aTjdXZWJDb3JlTDE4Y2FsbFNpbXBsZUZ1bmN0aW9uRVBOM0pTQzlFeGVjU3Rh
dGVFUktOU18xMlNjcmlwdE9iamVjdEVQS2MKIF9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJv
bGxlcjlzaG93UGFuZWxFTlMwXzEzU3BlY2lhbFBhbmVsc0UKQEAgLTIzODUwLDcgKzIzODQ5LDYg
QEAgX19aTjdXZWJDb3JlTDE5ZHJhd0hpZ2hsaWdodEZvckJveEVSTlNfMTVHcmFwaGljc0NvbnRl
eHRFUktOU185RmxvYXRRdWFkRVM0X1M0X1MKIF9fWk43V2ViQ29yZUwxNmRyYXdPdXRsaW5lZFF1
YWRFUk5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfOUZsb2F0UXVhZEVSS05TXzVDb2xvckUKIF9f
Wk43V2ViQ29yZUwxMHF1YWRUb1BhdGhFUktOU185RmxvYXRRdWFkRQogX19aTjdXZWJDb3JlNDRq
c0luc3BlY3RvckNvbnRyb2xsZXJQcm90b3R5cGVGdW5jdGlvbkRldGFjaEVQTjNKU0M5RXhlY1N0
YXRlRVBOUzBfOEpTT2JqZWN0RU5TMF83SlNWYWx1ZUVSS05TMF83QXJnTGlzdEUKLV9fWk43V2Vi
Q29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjEyZGV0YWNoV2luZG93RXYKIF9fWk43V2ViQ29yZTU2
anNJbnNwZWN0b3JDb250cm9sbGVyUHJvdG90eXBlRnVuY3Rpb25Nb3ZlQnlVbnJlc3RyaWN0ZWRF
UE4zSlNDOUV4ZWNTdGF0ZUVQTlMwXzhKU09iamVjdEVOUzBfN0pTVmFsdWVFUktOUzBfN0FyZ0wK
IF9fWk5LN1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIxMm1vdmVXaW5kb3dCeUVmZgogX19a
TjdXZWJDb3JlTDI0ZHJhd091dGxpbmVkUXVhZFdpdGhDbGlwRVJOU18xNUdyYXBoaWNzQ29udGV4
dEVSS05TXzlGbG9hdFF1YWRFUzRfUktOU181Q29sb3JFCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dl
YkNvcmUucHJvIGIvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCAwMmRlMTk4Li5kMDM1ZDk4IDEw
MDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUucHJvCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8K
QEAgLTY5NSw2ICs2OTUsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9y
RE9NQWdlbnQuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNl
LmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmNwcCBcCisgICAgaW5zcGVj
dG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5z
cGVjdG9yRnJvbnRlbmRIb3N0LmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNl
LmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuY3BwIFwKQEAgLTEz
OTgsNiArMTM5OSw4IEBAIEhFQURFUlMgKz0gXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JEYXRh
YmFzZVJlc291cmNlLmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlUmVzb3Vy
Y2UuaCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmggXAorICAgIGluc3BlY3Rv
ci9JbnNwZWN0b3JGcm9udGVuZENsaWVudC5oIFwKKyAgICBpbnNwZWN0b3IvSW5zcGVjdG9yRnJv
bnRlbmRDbGllbnRMb2NhbC5oIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0
LmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZS5oIFwKICAgICBpbnNwZWN0b3Iv
SW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKaW5kZXggMTBmN2UwZS4uZTM2OGYyMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTQ4NTYsNiArNDg1Niw5IEBACiAJCUVENTAxREM2
MEIyNDlGMjkwMEFFMThEOSAvKiBFZGl0b3JNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFRDUwMURDNTBCMjQ5RjI5MDBBRTE4RDkgLyogRWRpdG9y
TWFjLm1tICovOyB9OwogCQlFREUzQTUwMDBDN0E0MzA2MDA5NTZBMzcgLyogQ29sb3JNYWMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEVERTNBNEZGMEM3
QTQzMDYwMDk1NkEzNyAvKiBDb2xvck1hYy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCUVERUM5ODAzMEFFRDdFMTcwMDU5MTM3RiAvKiBXZWJDb3Jl
UHJlZml4LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
REVDOTgwMjBBRUQ3RTE3MDA1OTEzN0YgLyogV2ViQ29yZVByZWZpeC5oICovOyB9OworCQlGMzQ0
QzcxNDExMjVCODJDMDBGMjZFRUUgLyogSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEYzNDRDNzEyMTEyNUI4MkMw
MEYyNkVFRSAvKiBJbnNwZWN0b3JGcm9udGVuZENsaWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUYzNDRDNzUzMTEyOTREOUQwMEYyNkVFRSAv
KiBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGMzQ0Qzc1MjExMjk0RDlEMDBGMjZFRUUgLyogSW5zcGVj
dG9yRnJvbnRlbmRDbGllbnRMb2NhbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCUYzNDRDNzU4MTEyOTRGRjYwMEYyNkVFRSAvKiBJbnNwZWN0b3JG
cm9udGVuZENsaWVudExvY2FsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEYzNDRDNzU3MTEyOTRGRjYwMEYyNkVFRSAvKiBJbnNwZWN0b3JGcm9udGVu
ZENsaWVudExvY2FsLmNwcCAqLzsgfTsKIAkJRjM2NDRBRkYxMTE5ODA1OTAwRTBENTM3IC8qIElu
amVjdGVkU2NyaXB0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEYzNjQ0QUZEMTExOTgwNTkwMEUwRDUzNyAvKiBJbmplY3RlZFNjcmlwdC5jcHAgKi87
IH07CiAJCUYzNjQ0QjAwMTExOTgwNTkwMEUwRDUzNyAvKiBJbmplY3RlZFNjcmlwdC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjM2NDRBRkUxMTE5ODA1
OTAwRTBENTM3IC8qIEluamVjdGVkU2NyaXB0LmggKi87IH07CiAJCUY0RUFGNEFFMTBDNzQyQjEw
MDkxMDBEMyAvKiBPcGVuVHlwZVNhbml0aXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNEVBRjRBQzEwQzc0MkIxMDA5MTAwRDMgLyogT3BlblR5
cGVTYW5pdGl6ZXIuY3BwICovOyB9OwpAQCAtMTAxODksNiArMTAxOTIsOSBAQAogCQlFRDUwMURD
NTBCMjQ5RjI5MDBBRTE4RDkgLyogRWRpdG9yTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgbmFtZSA9IEVkaXRvck1hYy5tbTsgcGF0aCA9IG1hYy9FZGl0b3JNYWMubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUVERTNBNEZGMEM3QTQzMDYwMDk1NkEzNyAv
KiBDb2xvck1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2xvck1hYy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFREVDOTgwMjBBRUQ3RTE3MDA1OTEzN0Yg
LyogV2ViQ29yZVByZWZpeC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vi
Q29yZVByZWZpeC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDQ7IHVzZXNU
YWJzID0gMDsgfTsKKwkJRjM0NEM3MTIxMTI1QjgyQzAwRjI2RUVFIC8qIEluc3BlY3RvckZyb250
ZW5kQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvckZy
b250ZW5kQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUYzNDRDNzUyMTEy
OTREOUQwMEYyNkVFRSAvKiBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRjM0NEM3NTcxMTI5NEZGNjAwRjI2RUVFIC8q
IEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUYzNjQ0QUZEMTExOTgwNTkwMEUwRDUzNyAvKiBJbmplY3Rl
ZFNjcmlwdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmplY3Rl
ZFNjcmlwdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUYzNjQ0QUZFMTExOTgw
NTkwMEUwRDUzNyAvKiBJbmplY3RlZFNjcmlwdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBJbmplY3RlZFNjcmlwdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlG
NEVBRjRBQzEwQzc0MkIxMDA5MTAwRDMgLyogT3BlblR5cGVTYW5pdGl6ZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gT3BlblR5cGVTYW5pdGl6ZXIuY3BwOyBwYXRo
ID0gb3BlbnR5cGUvT3BlblR5cGVTYW5pdGl6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMTA3MjQsNiArMTA3MzAsOSBAQAogCQkJCTQxRjA2MTcyMEY1RjAwQUMwMEEwN0VB
QyAvKiBJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuaCAqLywKIAkJCQk3QUVEM0UwMzBGQkIx
RUFBMDBEMkIwM0MgLyogSW5zcGVjdG9yRnJvbnRlbmQuY3BwICovLAogCQkJCTdBRUQzRTA0MEZC
QjFFQUEwMEQyQjAzQyAvKiBJbnNwZWN0b3JGcm9udGVuZC5oICovLAorCQkJCUYzNDRDNzEyMTEy
NUI4MkMwMEYyNkVFRSAvKiBJbnNwZWN0b3JGcm9udGVuZENsaWVudC5oICovLAorCQkJCUYzNDRD
NzU3MTEyOTRGRjYwMEYyNkVFRSAvKiBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmNwcCAq
LywKKwkJCQlGMzQ0Qzc1MjExMjk0RDlEMDBGMjZFRUUgLyogSW5zcGVjdG9yRnJvbnRlbmRDbGll
bnRMb2NhbC5oICovLAogCQkJCTdBMEU3NzBCMTBDMDBBODgwMEEwMjc2RSAvKiBJbnNwZWN0b3JG
cm9udGVuZEhvc3QuY3BwICovLAogCQkJCTdBMEU3NzBDMTBDMDBBODgwMEEwMjc2RSAvKiBJbnNw
ZWN0b3JGcm9udGVuZEhvc3QuaCAqLywKIAkJCQk3QTBFNzcwRDEwQzAwQTg4MDBBMDI3NkUgLyog
SW5zcGVjdG9yRnJvbnRlbmRIb3N0LmlkbCAqLywKQEAgLTE3NDIzLDYgKzE3NDMyLDggQEAKIAkJ
CQk3QTI0NTg3QzEwMjFFQUY0MDAwQTAwQUEgLyogSW5zcGVjdG9yRE9NQWdlbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTQxRjA2MTc0MEY1RjAwQUMwMEEwN0VBQyAvKiBJbnNwZWN0b3JET01TdG9y
YWdlUmVzb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTdBRUQzRTA2MEZCQjFFQUEwMEQyQjAz
QyAvKiBJbnNwZWN0b3JGcm9udGVuZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRjM0NEM3MTQxMTI1
QjgyQzAwRjI2RUVFIC8qIEluc3BlY3RvckZyb250ZW5kQ2xpZW50LmggaW4gSGVhZGVycyAqLywK
KwkJCQlGMzQ0Qzc1MzExMjk0RDlEMDBGMjZFRUUgLyogSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRM
b2NhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0EwRTc3MEYxMEMwMEE4ODAwQTAyNzZFIC8qIElu
c3BlY3RvckZyb250ZW5kSG9zdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDFGMDYyMDEwRjVGMEI2
NjAwQTA3RUFDIC8qIEluc3BlY3RvclJlc291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3NTQx
MzNBODEwMkUwMEU4MDAwNzVEMDAgLyogSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oIGluIEhlYWRl
cnMgKi8sCkBAIC0xOTYzNyw2ICsxOTY0OCw3IEBACiAJCQkJN0EyNDU4N0IxMDIxRUFGNDAwMEEw
MEFBIC8qIEluc3BlY3RvckRPTUFnZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQxRjA2MTc1
MEY1RjAwQUMwMEEwN0VBQyAvKiBJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJN0FFRDNFMDUwRkJCMUVBQTAwRDJCMDNDIC8qIEluc3BlY3RvckZyb250
ZW5kLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUYzNDRDNzU4MTEyOTRGRjYwMEYyNkVFRSAvKiBJ
bnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdBMEU3
NzBFMTBDMDBBODgwMEEwMjc2RSAvKiBJbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNDFGMDYyMDIwRjVGMEI2NjAwQTA3RUFDIC8qIEluc3BlY3RvclJlc291cmNl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTc1NDEzM0FBMTAyRTAwRjQwMDA3NUQwMCAvKiBJbnNw
ZWN0b3JUaW1lbGluZUFnZW50LmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9pbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvQ29uc29s
ZU1lc3NhZ2UuY3BwCmluZGV4IDU1MzllOWQuLjQwNTQ5OTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
aW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9Db25z
b2xlTWVzc2FnZS5jcHAKQEAgLTMxLDkgKzMxLDEyIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiQ29uc29sZU1lc3NhZ2UuaCIKIAorI2luY2x1ZGUgIkluamVjdGVkU2NyaXB0Lmgi
CisjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHRIb3N0LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRnJv
bnRlbmQuaCIKICNpbmNsdWRlICJTY3JpcHRDYWxsU3RhY2suaCIKICNpbmNsdWRlICJTY3JpcHRP
YmplY3QuaCIKKyNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCkBAIC04MCw3ICs4Myw3IEBAIENvbnNvbGVNZXNzYWdlOjpDb25zb2xlTWVz
c2FnZShNZXNzYWdlU291cmNlIHMsIE1lc3NhZ2VUeXBlIHQsIE1lc3NhZ2VMZXZlbCBsLCBTCiB9
CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotdm9pZCBDb25zb2xlTWVzc2FnZTo6YWRkVG9Db25z
b2xlKEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCkKK3ZvaWQgQ29uc29sZU1lc3NhZ2U6OmFk
ZFRvRnJvbnRlbmQoSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kLCBJbmplY3RlZFNjcmlwdEhv
c3QqIGluamVjdGVkU2NyaXB0SG9zdCkKIHsKICAgICBTY3JpcHRPYmplY3QganNvbk9iaiA9IGZy
b250ZW5kLT5uZXdTY3JpcHRPYmplY3QoKTsKICAgICBqc29uT2JqLnNldCgic291cmNlIiwgc3Rh
dGljX2Nhc3Q8aW50PihtX3NvdXJjZSkpOwpAQCAtOTAsNyArOTMsMTUgQEAgdm9pZCBDb25zb2xl
TWVzc2FnZTo6YWRkVG9Db25zb2xlKEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCkKICAgICBq
c29uT2JqLnNldCgidXJsIiwgbV91cmwpOwogICAgIGpzb25PYmouc2V0KCJncm91cExldmVsIiwg
c3RhdGljX2Nhc3Q8aW50PihtX2dyb3VwTGV2ZWwpKTsKICAgICBqc29uT2JqLnNldCgicmVwZWF0
Q291bnQiLCBzdGF0aWNfY2FzdDxpbnQ+KG1fcmVwZWF0Q291bnQpKTsKLSAgICBmcm9udGVuZC0+
YWRkQ29uc29sZU1lc3NhZ2UoanNvbk9iaiwgbV9mcmFtZXMsIG1fc2NyaXB0U3RhdGUsIG1fYXJn
dW1lbnRzLCAgbV9tZXNzYWdlKTsKKyAgICBWZWN0b3I8UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4gPiBhcmd1bWVudHM7CisgICAgaWYgKCFtX2FyZ3VtZW50cy5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBpbmplY3RlZFNjcmlwdEhvc3Qt
PmluamVjdGVkU2NyaXB0Rm9yKG1fc2NyaXB0U3RhdGUpOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIFJlZlB0
cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWRWYWx1ZSA9IGluamVjdGVkU2NyaXB0
LndyYXBGb3JDb25zb2xlKG1fYXJndW1lbnRzW2ldKTsKKyAgICAgICAgICAgIGFyZ3VtZW50cy5h
cHBlbmQoc2VyaWFsaXplZFZhbHVlKTsKKyAgICAgICAgfQorICAgIH0gICAKKyAgICBmcm9udGVu
ZC0+YWRkQ29uc29sZU1lc3NhZ2UoanNvbk9iaiwgbV9mcmFtZXMsIGFyZ3VtZW50cywgIG1fbWVz
c2FnZSk7CiB9CiAKIHZvaWQgQ29uc29sZU1lc3NhZ2U6OnVwZGF0ZVJlcGVhdENvdW50SW5Db25z
b2xlKEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5z
cGVjdG9yL0NvbnNvbGVNZXNzYWdlLmggYi9XZWJDb3JlL2luc3BlY3Rvci9Db25zb2xlTWVzc2Fn
ZS5oCmluZGV4IGU5YWUxMzAuLmViNjM3OTIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9y
L0NvbnNvbGVNZXNzYWdlLmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2Uu
aApAQCAtMzgsNDAgKzM4LDQxIEBACiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0gICAgY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmQ7Ci0gICAgY2xhc3MgU2Ny
aXB0Q2FsbFN0YWNrOwotICAgIGNsYXNzIFNjcmlwdFN0cmluZzsKK2NsYXNzIEluamVjdGVkU2Ny
aXB0SG9zdDsKK2NsYXNzIEluc3BlY3RvckZyb250ZW5kOworY2xhc3MgU2NyaXB0Q2FsbFN0YWNr
OworY2xhc3MgU2NyaXB0U3RyaW5nOwogCi0gICAgY2xhc3MgQ29uc29sZU1lc3NhZ2UgOiBwdWJs
aWMgTm9uY29weWFibGUgewotICAgIHB1YmxpYzoKLSAgICAgICAgQ29uc29sZU1lc3NhZ2UoTWVz
c2FnZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtLCB1
bnNpZ25lZCBsaSwgY29uc3QgU3RyaW5nJiB1LCB1bnNpZ25lZCBnKTsgICAgICAgIAotICAgICAg
ICBDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlLCBNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVs
LCBTY3JpcHRDYWxsU3RhY2sqLCB1bnNpZ25lZCBnLCBib29sIHN0b3JlVHJhY2UgPSBmYWxzZSk7
CitjbGFzcyBDb25zb2xlTWVzc2FnZSA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CitwdWJsaWM6Cisg
ICAgQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZl
bCwgY29uc3QgU3RyaW5nJiBtLCB1bnNpZ25lZCBsaSwgY29uc3QgU3RyaW5nJiB1LCB1bnNpZ25l
ZCBnKTsgICAgICAgIAorICAgIENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VU
eXBlLCBNZXNzYWdlTGV2ZWwsIFNjcmlwdENhbGxTdGFjayosIHVuc2lnbmVkIGcsIGJvb2wgc3Rv
cmVUcmFjZSA9IGZhbHNlKTsKIAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgICAgIHZvaWQg
YWRkVG9Db25zb2xlKEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCk7Ci0gICAgICAgIHZvaWQg
dXBkYXRlUmVwZWF0Q291bnRJbkNvbnNvbGUoSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kKTsK
KyAgICB2b2lkIGFkZFRvRnJvbnRlbmQoSW5zcGVjdG9yRnJvbnRlbmQqLCBJbmplY3RlZFNjcmlw
dEhvc3QqKTsKKyAgICB2b2lkIHVwZGF0ZVJlcGVhdENvdW50SW5Db25zb2xlKEluc3BlY3RvckZy
b250ZW5kKiBmcm9udGVuZCk7CiAjZW5kaWYKLSAgICAgICAgdm9pZCBpbmNyZW1lbnRDb3VudCgp
IHsgKyttX3JlcGVhdENvdW50OyB9OwotICAgICAgICBib29sIGlzRXF1YWwoU2NyaXB0U3RhdGUq
LCBDb25zb2xlTWVzc2FnZSogbXNnKSBjb25zdDsKKyAgICB2b2lkIGluY3JlbWVudENvdW50KCkg
eyArK21fcmVwZWF0Q291bnQ7IH07CisgICAgYm9vbCBpc0VxdWFsKFNjcmlwdFN0YXRlKiwgQ29u
c29sZU1lc3NhZ2UqIG1zZykgY29uc3Q7CiAKLSAgICAgICAgTWVzc2FnZVNvdXJjZSBzb3VyY2Uo
KSBjb25zdCB7IHJldHVybiBtX3NvdXJjZTsgfQotICAgICAgICBjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UoKSBjb25zdCB7IHJldHVybiBtX21lc3NhZ2U7IH0KKyAgICBNZXNzYWdlU291cmNlIHNvdXJj
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlOyB9CisgICAgY29uc3QgU3RyaW5nJiBtZXNzYWdl
KCkgY29uc3QgeyByZXR1cm4gbV9tZXNzYWdlOyB9CiAKLSAgICBwcml2YXRlOgotICAgICAgICBN
ZXNzYWdlU291cmNlIG1fc291cmNlOwotICAgICAgICBNZXNzYWdlVHlwZSBtX3R5cGU7Ci0gICAg
ICAgIE1lc3NhZ2VMZXZlbCBtX2xldmVsOwotICAgICAgICBTdHJpbmcgbV9tZXNzYWdlOworcHJp
dmF0ZToKKyAgICBNZXNzYWdlU291cmNlIG1fc291cmNlOworICAgIE1lc3NhZ2VUeXBlIG1fdHlw
ZTsKKyAgICBNZXNzYWdlTGV2ZWwgbV9sZXZlbDsKKyAgICBTdHJpbmcgbV9tZXNzYWdlOwogI2lm
IEVOQUJMRShJTlNQRUNUT1IpCi0gICAgICAgIFZlY3RvcjxTY3JpcHRWYWx1ZT4gbV9hcmd1bWVu
dHM7Ci0gICAgICAgIFNjcmlwdFN0YXRlKiBtX3NjcmlwdFN0YXRlOworICAgIFZlY3RvcjxTY3Jp
cHRWYWx1ZT4gbV9hcmd1bWVudHM7CisgICAgU2NyaXB0U3RhdGUqIG1fc2NyaXB0U3RhdGU7CiAj
ZW5kaWYKLSAgICAgICAgVmVjdG9yPFNjcmlwdFN0cmluZz4gbV9mcmFtZXM7Ci0gICAgICAgIHVu
c2lnbmVkIG1fbGluZTsKLSAgICAgICAgU3RyaW5nIG1fdXJsOwotICAgICAgICB1bnNpZ25lZCBt
X2dyb3VwTGV2ZWw7Ci0gICAgICAgIHVuc2lnbmVkIG1fcmVwZWF0Q291bnQ7Ci0gICAgfTsKKyAg
ICBWZWN0b3I8U2NyaXB0U3RyaW5nPiBtX2ZyYW1lczsKKyAgICB1bnNpZ25lZCBtX2xpbmU7Cisg
ICAgU3RyaW5nIG1fdXJsOworICAgIHVuc2lnbmVkIG1fZ3JvdXBMZXZlbDsKKyAgICB1bnNpZ25l
ZCBtX3JlcGVhdENvdW50OworfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDbGllbnQuaCBiL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNsaWVudC5oCmluZGV4IGU0NDhjZDIuLjg0MWMxNWUgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNsaWVudC5oCisrKyBiL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNsaWVudC5oCkBAIC0zMCw2ICszMCw3IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAorY2xhc3MgSW5zcGVjdG9yQ29udHJvbGxlcjsKIGNsYXNzIE5vZGU7CiBjbGFzcyBQ
YWdlOwogY2xhc3MgU3RyaW5nOwpAQCAtNDAsMjkgKzQxLDEzIEBAIHB1YmxpYzoKIAogICAgIHZp
cnR1YWwgdm9pZCBpbnNwZWN0b3JEZXN0cm95ZWQoKSA9IDA7CiAKLSAgICB2aXJ0dWFsIFBhZ2Uq
IGNyZWF0ZVBhZ2UoKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIFN0cmluZyBsb2NhbGl6ZWRTdHJpbmdz
VVJMKCkgPSAwOwotCi0gICAgdmlydHVhbCBTdHJpbmcgaGlkZGVuUGFuZWxzKCkgPSAwOwotCi0g
ICAgdmlydHVhbCB2b2lkIHNob3dXaW5kb3coKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNsb3Nl
V2luZG93KCkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIGF0dGFjaFdpbmRvdygpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgZGV0YWNoV2luZG93KCkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHNl
dEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBvcGVuSW5zcGVjdG9yRnJvbnRlbmQoSW5zcGVjdG9yQ29udHJvbGxlciopID0gMDsKIAog
ICAgIHZpcnR1YWwgdm9pZCBoaWdobGlnaHQoTm9kZSopID0gMDsKICAgICB2aXJ0dWFsIHZvaWQg
aGlkZUhpZ2hsaWdodCgpID0gMDsKIAotICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0ZWRVUkxDaGFu
Z2VkKGNvbnN0IFN0cmluZyYgbmV3VVJMKSA9IDA7Ci0KICAgICB2aXJ0dWFsIHZvaWQgcG9wdWxh
dGVTZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5LCBTdHJpbmcqIHZhbHVlKSA9IDA7CiAgICAgdmly
dHVhbCB2b2lkIHN0b3JlU2V0dGluZyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2
YWx1ZSkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIGluc3BlY3RvcldpbmRvd09iamVjdENsZWFy
ZWQoKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IDMzMTQ0M2QuLjkyNGYwMTEgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyBiL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC01NywxMSArNTcsMTEgQEAK
ICNpbmNsdWRlICJJbmplY3RlZFNjcmlwdEhvc3QuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JCYWNr
ZW5kLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ2xpZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9y
RnJvbnRlbmRDbGllbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JET01BZ2VudC5oIgogI2luY2x1
ZGUgIkluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZS5oIgogI2luY2x1ZGUgIkluc3BlY3RvckRh
dGFiYXNlUmVzb3VyY2UuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZC5oIgotI2luY2x1
ZGUgIkluc3BlY3RvckZyb250ZW5kSG9zdC5oIgogI2luY2x1ZGUgIkluc3BlY3RvclJlc291cmNl
LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yV29ya2VyUmVzb3VyY2UuaCIKICNpbmNsdWRlICJJbnNw
ZWN0b3JUaW1lbGluZUFnZW50LmgiCkBAIC0xNDQsMTAgKzE0NCw5IEBAIHN0YXRpYyB1bnNpZ25l
ZCBzX2luc3BlY3RvckNvbnRyb2xsZXJDb3VudDsKIEluc3BlY3RvckNvbnRyb2xsZXI6Okluc3Bl
Y3RvckNvbnRyb2xsZXIoUGFnZSogcGFnZSwgSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQpCiAgICAg
OiBtX2luc3BlY3RlZFBhZ2UocGFnZSkKICAgICAsIG1fY2xpZW50KGNsaWVudCkKLSAgICAsIG1f
cGFnZSgwKQorICAgICwgbV9vcGVuaW5nRnJvbnRlbmQoZmFsc2UpCisgICAgLCBtX2Nsb3NpbmdG
cm9udGVuZChmYWxzZSkKICAgICAsIG1fZXhwaXJlZENvbnNvbGVNZXNzYWdlQ291bnQoMCkKLSAg
ICAsIG1fZnJvbnRlbmRTY3JpcHRTdGF0ZSgwKQotICAgICwgbV93aW5kb3dWaXNpYmxlKGZhbHNl
KQogICAgICwgbV9zaG93QWZ0ZXJWaXNpYmxlKEN1cnJlbnRQYW5lbCkKICAgICAsIG1fZ3JvdXBM
ZXZlbCgwKQogICAgICwgbV9zZWFyY2hpbmdGb3JOb2RlKGZhbHNlKQpAQCAtMTU1LDcgKzE1NCw2
IEBAIEluc3BlY3RvckNvbnRyb2xsZXI6Okluc3BlY3RvckNvbnRyb2xsZXIoUGFnZSogcGFnZSwg
SW5zcGVjdG9yQ2xpZW50KiBjbGllbnQpCiAgICAgLCBtX3Jlc291cmNlVHJhY2tpbmdFbmFibGVk
KGZhbHNlKQogICAgICwgbV9yZXNvdXJjZVRyYWNraW5nU2V0dGluZ3NMb2FkZWQoZmFsc2UpCiAg
ICAgLCBtX2luc3BlY3RvckJhY2tlbmQoSW5zcGVjdG9yQmFja2VuZDo6Y3JlYXRlKHRoaXMpKQot
ICAgICwgbV9pbnNwZWN0b3JGcm9udGVuZEhvc3QoSW5zcGVjdG9yRnJvbnRlbmRIb3N0OjpjcmVh
dGUodGhpcywgY2xpZW50KSkKICAgICAsIG1faW5qZWN0ZWRTY3JpcHRIb3N0KEluamVjdGVkU2Ny
aXB0SG9zdDo6Y3JlYXRlKHRoaXMpKQogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQog
ICAgICwgbV9kZWJ1Z2dlckVuYWJsZWQoZmFsc2UpCkBAIC0xNzgsOSArMTc2LDcgQEAgSW5zcGVj
dG9yQ29udHJvbGxlcjo6fkluc3BlY3RvckNvbnRyb2xsZXIoKQogewogICAgIC8vIFRoZXNlIHNo
b3VsZCBoYXZlIGJlZW4gY2xlYXJlZCBpbiBpbnNwZWN0ZWRQYWdlRGVzdHJveWVkKCkuCiAgICAg
QVNTRVJUKCFtX2NsaWVudCk7Ci0gICAgQVNTRVJUKCFtX2Zyb250ZW5kU2NyaXB0U3RhdGUpOwog
ICAgIEFTU0VSVCghbV9pbnNwZWN0ZWRQYWdlKTsKLSAgICBBU1NFUlQoIW1fcGFnZSB8fCAobV9w
YWdlICYmICFtX3BhZ2UtPnBhcmVudEluc3BlY3RvckNvbnRyb2xsZXIoKSkpOwogCiAgICAgZGVs
ZXRlQWxsVmFsdWVzKG1fZnJhbWVSZXNvdXJjZXMpOwogICAgIGRlbGV0ZUFsbFZhbHVlcyhtX2Nv
bnNvbGVNZXNzYWdlcyk7CkBAIC0xOTEsNyArMTg3LDYgQEAgSW5zcGVjdG9yQ29udHJvbGxlcjo6
fkluc3BlY3RvckNvbnRyb2xsZXIoKQogICAgIHJlbGVhc2VET01BZ2VudCgpOwogCiAgICAgbV9p
bnNwZWN0b3JCYWNrZW5kLT5kaXNjb25uZWN0Q29udHJvbGxlcigpOwotICAgIG1faW5zcGVjdG9y
RnJvbnRlbmRIb3N0LT5kaXNjb25uZWN0Q29udHJvbGxlcigpOwogICAgIG1faW5qZWN0ZWRTY3Jp
cHRIb3N0LT5kaXNjb25uZWN0Q29udHJvbGxlcigpOwogfQogCkBAIC0xOTksMTAgKzE5NCw2IEBA
IHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zcGVjdGVkUGFnZURlc3Ryb3llZCgpCiB7CiAg
ICAgY2xvc2UoKTsKIAotICAgIGlmIChtX2Zyb250ZW5kU2NyaXB0U3RhdGUpIHsKLSAgICAgICAg
U2NyaXB0R2xvYmFsT2JqZWN0OjpyZW1vdmUobV9mcm9udGVuZFNjcmlwdFN0YXRlLCAiSW5zcGVj
dG9yQmFja2VuZCIpOwotICAgICAgICBTY3JpcHRHbG9iYWxPYmplY3Q6OnJlbW92ZShtX2Zyb250
ZW5kU2NyaXB0U3RhdGUsICJJbnNwZWN0b3JGcm9udGVuZEhvc3QiKTsKLSAgICB9CiAgICAgQVNT
RVJUKG1faW5zcGVjdGVkUGFnZSk7CiAgICAgbV9pbnNwZWN0ZWRQYWdlID0gMDsKIApAQCAtMjk3
LDQ2ICsyODgsNDIgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpoaWRlSGlnaGxpZ2h0KCkK
IAogYm9vbCBJbnNwZWN0b3JDb250cm9sbGVyOjp3aW5kb3dWaXNpYmxlKCkKIHsKLSAgICByZXR1
cm4gbV93aW5kb3dWaXNpYmxlOworICAgIHJldHVybiBtX2Zyb250ZW5kOwogfQogCi12b2lkIElu
c3BlY3RvckNvbnRyb2xsZXI6OnNldFdpbmRvd1Zpc2libGUoYm9vbCB2aXNpYmxlLCBib29sIGF0
dGFjaGVkKQordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpmcm9udGVuZFJlYWR5KCkKIHsKLSAg
ICBpZiAodmlzaWJsZSA9PSBtX3dpbmRvd1Zpc2libGUgfHwgIW1fZnJvbnRlbmQpCi0gICAgICAg
IHJldHVybjsKLQotICAgIG1fd2luZG93VmlzaWJsZSA9IHZpc2libGU7Ci0KLSAgICBpZiAobV93
aW5kb3dWaXNpYmxlKSB7Ci0gICAgICAgIHNldEF0dGFjaGVkV2luZG93KGF0dGFjaGVkKTsKLSAg
ICAgICAgcG9wdWxhdGVTY3JpcHRPYmplY3RzKCk7Ci0KLSAgICAgICAgaWYgKG1fc2hvd0FmdGVy
VmlzaWJsZSA9PSBDdXJyZW50UGFuZWwpIHsKLSAgICAgICAgICAgIFN0cmluZyBsYXN0QWN0aXZl
UGFuZWxTZXR0aW5nID0gc2V0dGluZyhsYXN0QWN0aXZlUGFuZWxTZXR0aW5nTmFtZSk7Ci0gICAg
ICAgICAgICBtX3Nob3dBZnRlclZpc2libGUgPSBzcGVjaWFsUGFuZWxGb3JKU05hbWUobGFzdEFj
dGl2ZVBhbmVsU2V0dGluZyk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobV9ub2RlVG9Gb2N1
cykKLSAgICAgICAgICAgIGZvY3VzTm9kZSgpOworICAgIHBvcHVsYXRlU2NyaXB0T2JqZWN0cygp
OworICAgIAorICAgIGlmIChtX3Nob3dBZnRlclZpc2libGUgPT0gQ3VycmVudFBhbmVsKSB7Cisg
ICAgICAgIFN0cmluZyBsYXN0QWN0aXZlUGFuZWxTZXR0aW5nID0gc2V0dGluZyhsYXN0QWN0aXZl
UGFuZWxTZXR0aW5nTmFtZSk7CisgICAgICAgIG1fc2hvd0FmdGVyVmlzaWJsZSA9IHNwZWNpYWxQ
YW5lbEZvckpTTmFtZShsYXN0QWN0aXZlUGFuZWxTZXR0aW5nKTsKKyAgICB9CisgICAgCisgICAg
aWYgKG1fbm9kZVRvRm9jdXMpCisgICAgICAgIGZvY3VzTm9kZSgpOwogI2lmIEVOQUJMRShKQVZB
U0NSSVBUX0RFQlVHR0VSKQotICAgICAgICBpZiAobV9hdHRhY2hEZWJ1Z2dlcldoZW5TaG93bikK
LSAgICAgICAgICAgIGVuYWJsZURlYnVnZ2VyKCk7CisgICAgaWYgKG1fYXR0YWNoRGVidWdnZXJX
aGVuU2hvd24pCisgICAgICAgIGVuYWJsZURlYnVnZ2VyKCk7CiAjZW5kaWYKLSAgICAgICAgc2hv
d1BhbmVsKG1fc2hvd0FmdGVyVmlzaWJsZSk7Ci0gICAgfSBlbHNlIHsKKyAgICBzaG93UGFuZWwo
bV9zaG93QWZ0ZXJWaXNpYmxlKTsKK30KKwordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjp3aWxs
Q2xvc2VGcm9udGVuZCgpCit7CiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCi0gICAg
ICAgIC8vIElmIHRoZSB3aW5kb3cgaXMgYmVpbmcgY2xvc2VkIHdpdGggdGhlIGRlYnVnZ2VyIGVu
YWJsZWQsCi0gICAgICAgIC8vIHJlbWVtYmVyIHRoaXMgc3RhdGUgdG8gcmUtZW5hYmxlIGRlYnVn
Z2VyIG9uIHRoZSBuZXh0IHdpbmRvdwotICAgICAgICAvLyBvcGVuaW5nLgotICAgICAgICBib29s
IGRlYnVnZ2VyV2FzRW5hYmxlZCA9IG1fZGVidWdnZXJFbmFibGVkOwotICAgICAgICBkaXNhYmxl
RGVidWdnZXIoKTsKLSAgICAgICAgaWYgKGRlYnVnZ2VyV2FzRW5hYmxlZCkKLSAgICAgICAgICAg
IG1fYXR0YWNoRGVidWdnZXJXaGVuU2hvd24gPSB0cnVlOworICAgIC8vIElmIHRoZSB3aW5kb3cg
aXMgYmVpbmcgY2xvc2VkIHdpdGggdGhlIGRlYnVnZ2VyIGVuYWJsZWQsCisgICAgLy8gcmVtZW1i
ZXIgdGhpcyBzdGF0ZSB0byByZS1lbmFibGUgZGVidWdnZXIgb24gdGhlIG5leHQgd2luZG93Cisg
ICAgLy8gb3BlbmluZy4KKyAgICBib29sIGRlYnVnZ2VyV2FzRW5hYmxlZCA9IG1fZGVidWdnZXJF
bmFibGVkOworICAgIGRpc2FibGVEZWJ1Z2dlcigpOworICAgIGlmIChkZWJ1Z2dlcldhc0VuYWJs
ZWQpCisgICAgICAgIG1fYXR0YWNoRGVidWdnZXJXaGVuU2hvd24gPSB0cnVlOwogI2VuZGlmCi0g
ICAgICAgIHNldFNlYXJjaGluZ0Zvck5vZGUoZmFsc2UpOwotICAgICAgICByZXNldFNjcmlwdE9i
amVjdHMoKTsKLSAgICAgICAgc3RvcFRpbWVsaW5lUHJvZmlsZXIoKTsKLSAgICB9CisgICAgc2V0
U2VhcmNoaW5nRm9yTm9kZShmYWxzZSk7CisgICAgcmVzZXRTY3JpcHRPYmplY3RzKCk7CisgICAg
c3RvcFRpbWVsaW5lUHJvZmlsZXIoKTsKKwogICAgIG1fc2hvd0FmdGVyVmlzaWJsZSA9IEN1cnJl
bnRQYW5lbDsKIH0KIApAQCAtMzcwLDcgKzM1Nyw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxl
cjo6YWRkQ29uc29sZU1lc3NhZ2UoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBDb25zb2xlTWVz
CiAgICAgICAgIG1fcHJldmlvdXNNZXNzYWdlID0gY29uc29sZU1lc3NhZ2U7CiAgICAgICAgIG1f
Y29uc29sZU1lc3NhZ2VzLmFwcGVuZChjb25zb2xlTWVzc2FnZSk7CiAgICAgICAgIGlmICh3aW5k
b3dWaXNpYmxlKCkpCi0gICAgICAgICAgICBtX3ByZXZpb3VzTWVzc2FnZS0+YWRkVG9Db25zb2xl
KG1fZnJvbnRlbmQuZ2V0KCkpOworICAgICAgICAgICAgbV9wcmV2aW91c01lc3NhZ2UtPmFkZFRv
RnJvbnRlbmQobV9mcm9udGVuZC5nZXQoKSwgbV9pbmplY3RlZFNjcmlwdEhvc3QuZ2V0KCkpOwog
ICAgIH0KIAogICAgIGlmICghd2luZG93VmlzaWJsZSgpICYmIG1fY29uc29sZU1lc3NhZ2VzLnNp
emUoKSA+PSBtYXhpbXVtQ29uc29sZU1lc3NhZ2VzKSB7CkBAIC00MTgsNjkgKzQwNSw2IEBAIHZv
aWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6bWFya1RpbWVsaW5lKGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSkKICAgICAgICAgdGltZWxpbmVBZ2VudCgpLT5kaWRNYXJrVGltZWxpbmUobWVzc2FnZSk7CiB9
CiAKLXN0YXRpYyB1bnNpZ25lZCBjb25zdHJhaW5lZEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2ln
bmVkIHByZWZlcnJlZEhlaWdodCwgdW5zaWduZWQgdG90YWxXaW5kb3dIZWlnaHQpCi17Ci0gICAg
cmV0dXJuIHJvdW5kZihtYXgobWluaW11bUF0dGFjaGVkSGVpZ2h0LCBtaW48ZmxvYXQ+KHByZWZl
cnJlZEhlaWdodCwgdG90YWxXaW5kb3dIZWlnaHQgKiBtYXhpbXVtQXR0YWNoZWRIZWlnaHRSYXRp
bykpKTsKLX0KLQotYm9vbCBJbnNwZWN0b3JDb250cm9sbGVyOjpjYW5BdHRhY2hXaW5kb3coKSBj
b25zdAotewotICAgIGlmICghZW5hYmxlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIAotICAgIHVuc2lnbmVkIGluc3BlY3RlZFBhZ2VIZWlnaHQgPSBtX2luc3BlY3RlZFBhZ2Ut
Pm1haW5GcmFtZSgpLT52aWV3KCktPnZpc2libGVIZWlnaHQoKTsKLQotICAgIC8vIERvbid0IGFs
bG93IHRoZSBhdHRhY2ggaWYgdGhlIHdpbmRvdyB3b3VsZCBiZSB0b28gc21hbGwgdG8gYWNjb21t
b2RhdGUgdGhlIG1pbmltdW0gaW5zcGVjdG9yIGhlaWdodC4KLSAgICByZXR1cm4gbWluaW11bUF0
dGFjaGVkSGVpZ2h0IDw9IGluc3BlY3RlZFBhZ2VIZWlnaHQgKiBtYXhpbXVtQXR0YWNoZWRIZWln
aHRSYXRpbzsKLX0KLQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjphdHRhY2hXaW5kb3coKQot
ewotICAgIGlmICghZW5hYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICB1bnNpZ25lZCBp
bnNwZWN0ZWRQYWdlSGVpZ2h0ID0gbV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKS0+dmlldygp
LT52aXNpYmxlSGVpZ2h0KCk7Ci0KLSAgICBTdHJpbmcgYXR0YWNoZWRIZWlnaHQgPSBzZXR0aW5n
KGluc3BlY3RvckF0dGFjaGVkSGVpZ2h0TmFtZSk7Ci0gICAgYm9vbCBzdWNjZXNzID0gdHJ1ZTsK
LSAgICBpbnQgaGVpZ2h0ID0gYXR0YWNoZWRIZWlnaHQudG9JbnQoJnN1Y2Nlc3MpOwotICAgIHVu
c2lnbmVkIHByZWZlcnJlZEhlaWdodCA9IHN1Y2Nlc3MgPyBoZWlnaHQgOiBkZWZhdWx0QXR0YWNo
ZWRIZWlnaHQ7Ci0KLSAgICBtX2NsaWVudC0+YXR0YWNoV2luZG93KCk7Ci0KLSAgICAvLyBXZSBu
ZWVkIHRvIGNvbnN0cmFpbiB0aGUgd2luZG93IGhlaWdodCBoZXJlIGluIGNhc2UgdGhlIHVzZXIg
aGFzIHJlc2l6ZWQgdGhlIGluc3BlY3RlZCBwYWdlJ3Mgd2luZG93IHNvIHRoYXQKLSAgICAvLyB0
aGUgdXNlcidzIHByZWZlcnJlZCBoZWlnaHQgd291bGQgYmUgdG9vIGJpZyB0byBkaXNwbGF5Lgot
ICAgIG1fY2xpZW50LT5zZXRBdHRhY2hlZFdpbmRvd0hlaWdodChjb25zdHJhaW5lZEF0dGFjaGVk
V2luZG93SGVpZ2h0KHByZWZlcnJlZEhlaWdodCwgaW5zcGVjdGVkUGFnZUhlaWdodCkpOwotfQot
Ci12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRldGFjaFdpbmRvdygpCi17Ci0gICAgaWYgKCFl
bmFibGVkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NsaWVudC0+ZGV0YWNoV2luZG93KCk7
Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0QXR0YWNoZWRXaW5kb3coYm9vbCBh
dHRhY2hlZCkKLXsKLSAgICBpZiAoIWVuYWJsZWQoKSB8fCAhbV9mcm9udGVuZCkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgbV9mcm9udGVuZC0+c2V0QXR0YWNoZWRXaW5kb3coYXR0YWNoZWQpOwot
fQotCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVu
c2lnbmVkIGhlaWdodCkKLXsKLSAgICBpZiAoIWVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIAotICAgIHVuc2lnbmVkIHRvdGFsSGVpZ2h0ID0gbV9wYWdlLT5tYWluRnJhbWUoKS0+dmll
dygpLT52aXNpYmxlSGVpZ2h0KCkgKyBtX2luc3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpLT52aWV3
KCktPnZpc2libGVIZWlnaHQoKTsKLSAgICB1bnNpZ25lZCBhdHRhY2hlZEhlaWdodCA9IGNvbnN0
cmFpbmVkQXR0YWNoZWRXaW5kb3dIZWlnaHQoaGVpZ2h0LCB0b3RhbEhlaWdodCk7Ci0gICAgCi0g
ICAgc2V0U2V0dGluZyhpbnNwZWN0b3JBdHRhY2hlZEhlaWdodE5hbWUsIFN0cmluZzo6bnVtYmVy
KGF0dGFjaGVkSGVpZ2h0KSk7Ci0gICAgCi0gICAgbV9jbGllbnQtPnNldEF0dGFjaGVkV2luZG93
SGVpZ2h0KGF0dGFjaGVkSGVpZ2h0KTsKLX0KLQogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpz
dG9yZUxhc3RBY3RpdmVQYW5lbChjb25zdCBTdHJpbmcmIHBhbmVsTmFtZSkKIHsKICAgICBzZXRT
ZXR0aW5nKGxhc3RBY3RpdmVQYW5lbFNldHRpbmdOYW1lLCBwYW5lbE5hbWUpOwpAQCAtNTEyLDIz
ICs0MzYsMjIgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpoYW5kbGVNb3VzZVByZXNzT25O
b2RlKE5vZGUqIG5vZGUpCiAgICAgaW5zcGVjdChub2RlKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JD
b250cm9sbGVyOjppbnNwZWN0ZWRXaW5kb3dTY3JpcHRPYmplY3RDbGVhcmVkKEZyYW1lKiBmcmFt
ZSkKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQo
UGFzc093blB0cjxJbnNwZWN0b3JGcm9udGVuZENsaWVudD4gY2xpZW50KQogewotICAgIGlmICgh
ZW5hYmxlZCgpIHx8ICFtX2Zyb250ZW5kIHx8IGZyYW1lICE9IG1faW5zcGVjdGVkUGFnZS0+bWFp
bkZyYW1lKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2luamVjdGVkU2NyaXB0SG9zdC0+ZGlz
Y2FyZEluamVjdGVkU2NyaXB0cygpOworICAgIEFTU0VSVCghbV9pbnNwZWN0b3JGcm9udGVuZENs
aWVudCk7CisgICAgbV9pbnNwZWN0b3JGcm9udGVuZENsaWVudCA9IGNsaWVudDsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjp3aW5kb3dTY3JpcHRPYmplY3RBdmFpbGFibGUoKQordm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0ZWRXaW5kb3dTY3JpcHRPYmplY3RDbGVhcmVk
KEZyYW1lKiBmcmFtZSkKIHsKLSAgICBpZiAoIW1fcGFnZSB8fCAhZW5hYmxlZCgpKQotICAgICAg
ICByZXR1cm47CisgICAgLy8gSWYgdGhlIHBhZ2UgaXMgc3VwcG9zZWQgdG8gc2VydmUgYXMgSW5z
cGVjdG9yRnJvbnRlbmQgbm90aWZ5IGluc3BldG9yIGZyb250ZW5kCisgICAgLy8gY2xpZW50IHRo
YXQgaXQncyBjbGVhcmVkIHNvIHRoYXQgdGhlIGNsaWVudCBjYW4gZXhwb3NlIGluc3BlY3RvciBi
aW5kaW5ncy4KKyAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENsaWVudCAmJiBmcmFtZSA9PSBt
X2luc3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpKQorICAgICAgICBtX2luc3BlY3RvckZyb250ZW5k
Q2xpZW50LT53aW5kb3dPYmplY3RDbGVhcmVkKCk7CiAKLSAgICAvLyBHcmFudCB0aGUgaW5zcGVj
dG9yIHRoZSBhYmlsaXR5IHRvIHNjcmlwdCB0aGUgaW5zcGVjdGVkIHBhZ2UuCi0gICAgbV9wYWdl
LT5tYWluRnJhbWUoKS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+Z3JhbnRVbml2ZXJz
YWxBY2Nlc3MoKTsKLSAgICBtX2Zyb250ZW5kU2NyaXB0U3RhdGUgPSBzY3JpcHRTdGF0ZUZyb21Q
YWdlKGRlYnVnZ2VyV29ybGQoKSwgbV9wYWdlKTsKLSAgICBTY3JpcHRHbG9iYWxPYmplY3Q6OnNl
dChtX2Zyb250ZW5kU2NyaXB0U3RhdGUsICJJbnNwZWN0b3JCYWNrZW5kIiwgbV9pbnNwZWN0b3JC
YWNrZW5kLmdldCgpKTsKLSAgICBTY3JpcHRHbG9iYWxPYmplY3Q6OnNldChtX2Zyb250ZW5kU2Ny
aXB0U3RhdGUsICJJbnNwZWN0b3JGcm9udGVuZEhvc3QiLCBtX2luc3BlY3RvckZyb250ZW5kSG9z
dC5nZXQoKSk7CisgICAgaWYgKCFlbmFibGVkKCkgfHwgIW1fZnJvbnRlbmQgfHwgZnJhbWUgIT0g
bV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1faW5q
ZWN0ZWRTY3JpcHRIb3N0LT5kaXNjYXJkSW5qZWN0ZWRTY3JpcHRzKCk7CiB9CiAKIHZvaWQgSW5z
cGVjdG9yQ29udHJvbGxlcjo6c2V0U2VhcmNoaW5nRm9yTm9kZShib29sIGVuYWJsZWQpCkBAIC01
NDYsMTggKzQ2OSwxNSBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldFNlYXJjaGluZ0Zv
ck5vZGUoYm9vbCBlbmFibGVkKQogICAgIH0KIH0KIAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVy
OjpzY3JpcHRPYmplY3RSZWFkeSgpCit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldEZyb250
ZW5kKFBhc3NPd25QdHI8SW5zcGVjdG9yRnJvbnRlbmQ+IGZyb250ZW5kKQogewotICAgIEFTU0VS
VChtX2Zyb250ZW5kU2NyaXB0U3RhdGUpOwotICAgIGlmICghbV9mcm9udGVuZFNjcmlwdFN0YXRl
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBTY3JpcHRPYmplY3Qgd2ViSW5zcGVjdG9yT2JqOwot
ICAgIGlmICghU2NyaXB0R2xvYmFsT2JqZWN0OjpnZXQobV9mcm9udGVuZFNjcmlwdFN0YXRlLCAi
V2ViSW5zcGVjdG9yIiwgd2ViSW5zcGVjdG9yT2JqKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHNl
dEZyb250ZW5kUHJveHlPYmplY3QobV9mcm9udGVuZFNjcmlwdFN0YXRlLCB3ZWJJbnNwZWN0b3JP
YmopOwotCi0jaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCisgICAgbV9vcGVuaW5nRnJv
bnRlbmQgPSBmYWxzZTsKKyAgICBtX2Zyb250ZW5kID0gZnJvbnRlbmQ7CisgICAgcmVsZWFzZURP
TUFnZW50KCk7CisgICAgbV9kb21BZ2VudCA9IEluc3BlY3RvckRPTUFnZW50OjpjcmVhdGUobV9m
cm9udGVuZC5nZXQoKSk7CisgICAgaWYgKG1fdGltZWxpbmVBZ2VudCkKKyAgICAgICAgbV90aW1l
bGluZUFnZW50LT5yZXNldEZyb250ZW5kUHJveHlPYmplY3QobV9mcm9udGVuZC5nZXQoKSk7Cisj
aWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpICYmIFVTRShKU0MpCiAgICAgU3RyaW5nIGRl
YnVnZ2VyRW5hYmxlZCA9IHNldHRpbmcoZGVidWdnZXJFbmFibGVkU2V0dGluZ05hbWUpOwogICAg
IGlmIChkZWJ1Z2dlckVuYWJsZWQgPT0gInRydWUiKQogICAgICAgICBlbmFibGVEZWJ1Z2dlcigp
OwpAQCAtNTY2LDQ4ICs0ODYsMjMgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzY3JpcHRP
YmplY3RSZWFkeSgpCiAgICAgICAgIGVuYWJsZVByb2ZpbGVyKCk7CiAjZW5kaWYKIAotICAgIC8v
IElmIG5vIHByZWZlcmVuY2UgaXMgc2V0IC0gZGVmYXVsdCB0byBhbiBhdHRhY2hlZCB3aW5kb3cu
IFRoaXMgaXMgaW1wb3J0YW50IGZvciBpbnNwZWN0b3IgTGF5b3V0VGVzdHMuCi0gICAgU3RyaW5n
IHNob3VsZEF0dGFjaFZhbHVlID0gc2V0dGluZyhpbnNwZWN0b3JTdGFydHNBdHRhY2hlZFNldHRp
bmdOYW1lKCkpOwotICAgIGJvb2wgc2hvdWxkQXR0YWNoID0gc2hvdWxkQXR0YWNoVmFsdWUgIT0g
ImZhbHNlIjsKLSAgICAKLSAgICBpZiAoc2hvdWxkQXR0YWNoICYmICFjYW5BdHRhY2hXaW5kb3co
KSkKLSAgICAgICAgc2hvdWxkQXR0YWNoID0gZmFsc2U7Ci0KLSAgICAvLyBNYWtlIHN1cmUgb3Vy
IHdpbmRvdyBpcyB2aXNpYmxlIG5vdyB0aGF0IHRoZSBwYWdlIGxvYWRlZAotICAgIHNldFdpbmRv
d1Zpc2libGUodHJ1ZSwgc2hvdWxkQXR0YWNoKTsKLQotICAgIG1fY2xpZW50LT5pbnNwZWN0b3JX
aW5kb3dPYmplY3RDbGVhcmVkKCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0
RnJvbnRlbmRQcm94eU9iamVjdChTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIFNjcmlwdE9iamVj
dCB3ZWJJbnNwZWN0b3JPYmosIFNjcmlwdE9iamVjdCkKLXsKLSAgICBtX2Zyb250ZW5kU2NyaXB0
U3RhdGUgPSBzY3JpcHRTdGF0ZTsKLSAgICBtX2Zyb250ZW5kLnNldChuZXcgSW5zcGVjdG9yRnJv
bnRlbmQodGhpcywgd2ViSW5zcGVjdG9yT2JqKSk7Ci0gICAgcmVsZWFzZURPTUFnZW50KCk7Ci0g
ICAgbV9kb21BZ2VudCA9IEluc3BlY3RvckRPTUFnZW50OjpjcmVhdGUobV9mcm9udGVuZC5nZXQo
KSk7Ci0gICAgaWYgKG1fdGltZWxpbmVBZ2VudCkKLSAgICAgICAgbV90aW1lbGluZUFnZW50LT5y
ZXNldEZyb250ZW5kUHJveHlPYmplY3QobV9mcm9udGVuZC5nZXQoKSk7CisgICAgZnJvbnRlbmRS
ZWFkeSgpOwogfQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNob3coKQogewogICAgIGlm
ICghZW5hYmxlZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgaWYgKCFtX3BhZ2UpIHsK
LSAgICAgICAgaWYgKG1fZnJvbnRlbmQpCi0gICAgICAgICAgICByZXR1cm47IC8vIFdlIGFyZSB1
c2luZyBjdXN0b20gZnJvbnRlbmQgLSBubyBuZWVkIHRvIGNyZWF0ZSBwYWdlLgogCi0gICAgICAg
IG1fcGFnZSA9IG1fY2xpZW50LT5jcmVhdGVQYWdlKCk7Ci0gICAgICAgIGlmICghbV9wYWdlKQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX3BhZ2UtPnNldFBhcmVudEluc3BlY3RvckNv
bnRyb2xsZXIodGhpcyk7Ci0KLSAgICAgICAgLy8gc2hvd1dpbmRvdygpIHdpbGwgYmUgY2FsbGVk
IGFmdGVyIHRoZSBwYWdlIGxvYWRzIGluIHNjcmlwdE9iamVjdFJlYWR5KCkKKyAgICBpZiAobV9v
cGVuaW5nRnJvbnRlbmQpCiAgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAobV9mcm9udGVu
ZCkKKyAgICAgICAgbV9mcm9udGVuZC0+YnJpbmdUb0Zyb250KCk7CisgICAgZWxzZSB7CisgICAg
ICAgIG1fb3BlbmluZ0Zyb250ZW5kID0gdHJ1ZTsKKyAgICAgICAgbV9jbGllbnQtPm9wZW5JbnNw
ZWN0b3JGcm9udGVuZCh0aGlzKTsKICAgICB9Ci0KLSAgICBzaG93V2luZG93KCk7CiB9CiAKIHZv
aWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2hvd1BhbmVsKFNwZWNpYWxQYW5lbHMgcGFuZWwpCkBA
IC02MzMsNDYgKzUyOCwyNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmNsb3NlKCkKICAg
ICBpZiAoIWVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgaWYgKCFtX2Zyb250ZW5k
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9jbG9zaW5nRnJvbnRlbmQpCisgICAgICAg
IHJldHVybjsKKyAgICBtX2Nsb3NpbmdGcm9udGVuZCA9IHRydWU7CisKKyAgICB3aWxsQ2xvc2VG
cm9udGVuZCgpOworCisgICAgaGlkZUhpZ2hsaWdodCgpOworCiAjaWYgRU5BQkxFKEpBVkFTQ1JJ
UFRfREVCVUdHRVIpCiAgICAgc3RvcFVzZXJJbml0aWF0ZWRQcm9maWxpbmcoKTsKICAgICBkaXNh
YmxlRGVidWdnZXIoKTsKICNlbmRpZgotICAgIGNsb3NlV2luZG93KCk7CiAKICAgICByZWxlYXNl
RE9NQWdlbnQoKTsKLSAgICBtX2Zyb250ZW5kLnNldCgwKTsKLSAgICBtX3RpbWVsaW5lQWdlbnQg
PSAwOwotICAgIG1fZnJvbnRlbmRTY3JpcHRTdGF0ZSA9IDA7Ci0gICAgaWYgKG1fcGFnZSkgewot
ICAgICAgICBpZiAoIW1fcGFnZS0+bWFpbkZyYW1lKCkgfHwgIW1fcGFnZS0+bWFpbkZyYW1lKCkt
PmxvYWRlcigpIHx8ICFtX3BhZ2UtPm1haW5GcmFtZSgpLT5sb2FkZXIoKS0+aXNMb2FkaW5nKCkp
IHsKLSAgICAgICAgICAgIG1fcGFnZS0+c2V0UGFyZW50SW5zcGVjdG9yQ29udHJvbGxlcigwKTsK
LSAgICAgICAgICAgIG1fcGFnZSA9IDA7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW5z
cGVjdG9yQ29udHJvbGxlcjo6c2hvd1dpbmRvdygpCi17Ci0gICAgQVNTRVJUKGVuYWJsZWQoKSk7
Ci0KLSAgICB1bnNpZ25lZCBpbnNwZWN0ZWRQYWdlSGVpZ2h0ID0gbV9pbnNwZWN0ZWRQYWdlLT5t
YWluRnJhbWUoKS0+dmlldygpLT52aXNpYmxlSGVpZ2h0KCk7Ci0KLSAgICBtX2NsaWVudC0+c2hv
d1dpbmRvdygpOworICAgIG1fZnJvbnRlbmQuY2xlYXIoKTsKKyAgICBtX3RpbWVsaW5lQWdlbnQu
Y2xlYXIoKTsKIAotICAgIFN0cmluZyBhdHRhY2hlZEhlaWdodCA9IHNldHRpbmcoaW5zcGVjdG9y
QXR0YWNoZWRIZWlnaHROYW1lKTsKLSAgICBib29sIHN1Y2Nlc3MgPSB0cnVlOwotICAgIGludCBo
ZWlnaHQgPSBhdHRhY2hlZEhlaWdodC50b0ludCgmc3VjY2Vzcyk7Ci0gICAgdW5zaWduZWQgcHJl
ZmVycmVkSGVpZ2h0ID0gc3VjY2VzcyA/IGhlaWdodCA6IGRlZmF1bHRBdHRhY2hlZEhlaWdodDsK
LQotICAgIC8vIFRoaXMgY2FsbCBtaWdodCBub3QgZ28gdGhyb3VnaCAoaWYgdGhlIHdpbmRvdyBz
dGFydHMgb3V0IGRldGFjaGVkKSwgYnV0IGlmIHRoZSB3aW5kb3cgaXMgaW5pdGlhbGx5IGNyZWF0
ZWQgYXR0YWNoZWQsCi0gICAgLy8gSW5zcGVjdG9yQ29udHJvbGxlcjo6YXR0YWNoV2luZG93IGlz
IG5ldmVyIGNhbGxlZCwgc28gd2UgbmVlZCB0byBtYWtlIHN1cmUgdG8gc2V0IHRoZSBhdHRhY2hl
ZFdpbmRvd0hlaWdodC4KLSAgICAvLyBGSVhNRTogQ2xlYW4gdXAgY29kZSBzbyB3ZSBvbmx5IGhh
dmUgdG8gY2FsbCBzZXRBdHRhY2hlZFdpbmRvd0hlaWdodCBpbiBJbnNwZWN0b3JDb250cm9sbGVy
OjphdHRhY2hXaW5kb3cKLSAgICBtX2NsaWVudC0+c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQoY29u
c3RyYWluZWRBdHRhY2hlZFdpbmRvd0hlaWdodChwcmVmZXJyZWRIZWlnaHQsIGluc3BlY3RlZFBh
Z2VIZWlnaHQpKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpjbG9zZVdpbmRvdygp
Ci17Ci0gICAgbV9jbGllbnQtPmNsb3NlV2luZG93KCk7CisgICAgbV9jbG9zaW5nRnJvbnRlbmQg
PSBmYWxzZTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZWxlYXNlRE9NQWdlbnQo
KQpAQCAtNjgxLDcgKzU1Nyw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cmVsZWFzZURP
TUFnZW50KCkKICAgICAvLyBubyByZWZlcmVuY2VzIHRvIHRoZSBET00gYWdlbnQgZnJvbSB0aGUg
RE9NIHRyZWUuCiAgICAgaWYgKG1fZG9tQWdlbnQpCiAgICAgICAgIG1fZG9tQWdlbnQtPnJlc2V0
KCk7Ci0gICAgbV9kb21BZ2VudCA9IDA7CisgICAgbV9kb21BZ2VudC5jbGVhcigpOwogfQogCiB2
b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnBvcHVsYXRlU2NyaXB0T2JqZWN0cygpCkBAIC03MTUs
NyArNTkxLDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpwb3B1bGF0ZVNjcmlwdE9iamVj
dHMoKQogICAgICAgICBtX2Zyb250ZW5kLT51cGRhdGVDb25zb2xlTWVzc2FnZUV4cGlyZWRDb3Vu
dChtX2V4cGlyZWRDb25zb2xlTWVzc2FnZUNvdW50KTsKICAgICB1bnNpZ25lZCBtZXNzYWdlQ291
bnQgPSBtX2NvbnNvbGVNZXNzYWdlcy5zaXplKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1lc3NhZ2VDb3VudDsgKytpKQotICAgICAgICBtX2NvbnNvbGVNZXNzYWdlc1tpXS0+YWRk
VG9Db25zb2xlKG1fZnJvbnRlbmQuZ2V0KCkpOworICAgICAgICBtX2NvbnNvbGVNZXNzYWdlc1tp
XS0+YWRkVG9Gcm9udGVuZChtX2Zyb250ZW5kLmdldCgpLCBtX2luamVjdGVkU2NyaXB0SG9zdC5n
ZXQoKSk7CiAKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgICBpZiAobV9kZWJ1
Z2dlckVuYWJsZWQpCkBAIC04MDEsNyArNjc3LDggQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVy
OjpkaWRDb21taXRMb2FkKERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCiAgICAgQVNTRVJUKG1faW5z
cGVjdGVkUGFnZSk7CiAKICAgICBpZiAobG9hZGVyLT5mcmFtZSgpID09IG1faW5zcGVjdGVkUGFn
ZS0+bWFpbkZyYW1lKCkpIHsKLSAgICAgICAgbV9jbGllbnQtPmluc3BlY3RlZFVSTENoYW5nZWQo
bG9hZGVyLT51cmwoKS5zdHJpbmcoKSk7CisgICAgICAgIGlmIChtX2Zyb250ZW5kKQorICAgICAg
ICAgICAgbV9mcm9udGVuZC0+aW5zcGVjdGVkVVJMQ2hhbmdlZChsb2FkZXItPnVybCgpLnN0cmlu
ZygpKTsKIAogICAgICAgICBtX2luamVjdGVkU2NyaXB0SG9zdC0+ZGlzY2FyZEluamVjdGVkU2Ny
aXB0cygpOwogICAgICAgICBjbGVhckNvbnNvbGVNZXNzYWdlcygpOwpAQCAtMTQzNiwxNiArMTMx
Myw2IEBAIEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZSogSW5zcGVjdG9yQ29udHJvbGxlcjo6
Z2V0RE9NU3RvcmFnZVJlc291cmNlRm9ySWQoaW50CiB9CiAjZW5kaWYKIAotdm9pZCBJbnNwZWN0
b3JDb250cm9sbGVyOjptb3ZlV2luZG93QnkoZmxvYXQgeCwgZmxvYXQgeSkgY29uc3QKLXsKLSAg
ICBpZiAoIW1fcGFnZSB8fCAhZW5hYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBGbG9h
dFJlY3QgZnJhbWVSZWN0ID0gbV9wYWdlLT5jaHJvbWUoKS0+d2luZG93UmVjdCgpOwotICAgIGZy
YW1lUmVjdC5tb3ZlKHgsIHkpOwotICAgIG1fcGFnZS0+Y2hyb21lKCktPnNldFdpbmRvd1JlY3Qo
ZnJhbWVSZWN0KTsKLX0KLQogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogdm9pZCBJ
bnNwZWN0b3JDb250cm9sbGVyOjphZGRQcm9maWxlKFBhc3NSZWZQdHI8U2NyaXB0UHJvZmlsZT4g
cHJwUHJvZmlsZSwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwp
CiB7CkBAIC0xNDk4LDcgKzEzNjUsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmdldFBy
b2ZpbGUobG9uZyBjYWxsSWQsIHVuc2lnbmVkIHVpZCkKICAgICBQcm9maWxlc01hcDo6aXRlcmF0
b3IgaXQgPSBtX3Byb2ZpbGVzLmZpbmQodWlkKTsKICNpZiBVU0UoSlNDKQogICAgIGlmIChpdCAh
PSBtX3Byb2ZpbGVzLmVuZCgpKQotICAgICAgICBtX2Zyb250ZW5kLT5kaWRHZXRQcm9maWxlKGNh
bGxJZCwgdG9KUyhtX2Zyb250ZW5kU2NyaXB0U3RhdGUsIGl0LT5zZWNvbmQuZ2V0KCkpKTsKKyAg
ICAgICAgbV9mcm9udGVuZC0+ZGlkR2V0UHJvZmlsZShjYWxsSWQsIHRvSlMobV9mcm9udGVuZC0+
c2NyaXB0U3RhdGUoKSwgaXQtPnNlY29uZC5nZXQoKSkpOwogI2VuZGlmCiB9CiAKQEAgLTE2MzUs
NyArMTUwMiw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZW5hYmxlRGVidWdnZXIoKQog
ICAgIGlmIChtX2RlYnVnZ2VyRW5hYmxlZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFt
X2Zyb250ZW5kU2NyaXB0U3RhdGUgfHwgIW1fZnJvbnRlbmQpCisgICAgaWYgKCFtX2Zyb250ZW5k
KQogICAgICAgICBtX2F0dGFjaERlYnVnZ2VyV2hlblNob3duID0gdHJ1ZTsKICAgICBlbHNlIHsK
ICAgICAgICAgbV9mcm9udGVuZC0+YXR0YWNoRGVidWdnZXJXaGVuU2hvd24oKTsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaCBiL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAppbmRleCBlYWQ0ZDVlLi41ODg1M2FiIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKKysrIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCkBAIC02Niw3ICs2Niw3IEBAIGNs
YXNzIEluamVjdGVkU2NyaXB0SG9zdDsKIGNsYXNzIEluc3BlY3RvckJhY2tlbmQ7CiBjbGFzcyBJ
bnNwZWN0b3JDbGllbnQ7CiBjbGFzcyBJbnNwZWN0b3JGcm9udGVuZDsKLWNsYXNzIEluc3BlY3Rv
ckZyb250ZW5kSG9zdDsKK2NsYXNzIEluc3BlY3RvckZyb250ZW5kQ2xpZW50OwogY2xhc3MgSW5z
cGVjdG9yVGltZWxpbmVBZ2VudDsKIGNsYXNzIEphdmFTY3JpcHRDYWxsRnJhbWU7CiBjbGFzcyBL
VVJMOwpAQCAtMTE2LDExICsxMTYsOSBAQCBwdWJsaWM6CiAgICAgfkluc3BlY3RvckNvbnRyb2xs
ZXIoKTsKIAogICAgIEluc3BlY3RvckJhY2tlbmQqIGluc3BlY3RvckJhY2tlbmQoKSB7IHJldHVy
biBtX2luc3BlY3RvckJhY2tlbmQuZ2V0KCk7IH0KLSAgICBJbnNwZWN0b3JGcm9udGVuZEhvc3Qq
IGluc3BlY3RvckZyb250ZW5kSG9zdCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRIb3N0
LmdldCgpOyB9CiAgICAgSW5qZWN0ZWRTY3JpcHRIb3N0KiBpbmplY3RlZFNjcmlwdEhvc3QoKSB7
IHJldHVybiBtX2luamVjdGVkU2NyaXB0SG9zdC5nZXQoKTsgfQogCiAgICAgdm9pZCBpbnNwZWN0
ZWRQYWdlRGVzdHJveWVkKCk7Ci0gICAgdm9pZCBwYWdlRGVzdHJveWVkKCkgeyBtX3BhZ2UgPSAw
OyB9CiAKICAgICBib29sIGVuYWJsZWQoKSBjb25zdDsKIApAQCAtMTM3LDI3ICsxMzUsMjIgQEAg
cHVibGljOgogICAgIHZvaWQgc2hvd1BhbmVsKFNwZWNpYWxQYW5lbHMpOwogICAgIHZvaWQgY2xv
c2UoKTsKIAotICAgIGJvb2wgd2luZG93VmlzaWJsZSgpOwotICAgIHZvaWQgc2V0V2luZG93Vmlz
aWJsZShib29sIHZpc2libGUgPSB0cnVlLCBib29sIGF0dGFjaGVkID0gZmFsc2UpOwotCiAgICAg
dm9pZCBhZGRNZXNzYWdlVG9Db25zb2xlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNz
YWdlTGV2ZWwsIFNjcmlwdENhbGxTdGFjayopOwogICAgIHZvaWQgYWRkTWVzc2FnZVRvQ29uc29s
ZShNZXNzYWdlU291cmNlLCBNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcm
IG1lc3NhZ2UsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlSUQpOwog
ICAgIHZvaWQgY2xlYXJDb25zb2xlTWVzc2FnZXMoKTsKICAgICBjb25zdCBWZWN0b3I8Q29uc29s
ZU1lc3NhZ2UqPiYgY29uc29sZU1lc3NhZ2VzKCkgY29uc3QgeyByZXR1cm4gbV9jb25zb2xlTWVz
c2FnZXM7IH0KIAotICAgIGJvb2wgY2FuQXR0YWNoV2luZG93KCkgY29uc3Q7Ci0gICAgdm9pZCBh
dHRhY2hXaW5kb3coKTsKLSAgICB2b2lkIGRldGFjaFdpbmRvdygpOwotCiAgICAgYm9vbCBzZWFy
Y2hpbmdGb3JOb2RlSW5QYWdlKCkgY29uc3QgeyByZXR1cm4gbV9zZWFyY2hpbmdGb3JOb2RlOyB9
CiAgICAgdm9pZCBtb3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBIaXRUZXN0UmVzdWx0Jiwg
dW5zaWduZWQgbW9kaWZpZXJGbGFncyk7CiAgICAgdm9pZCBoYW5kbGVNb3VzZVByZXNzT25Ob2Rl
KE5vZGUqKTsKIAorICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQoUGFzc093blB0
cjxJbnNwZWN0b3JGcm9udGVuZENsaWVudD4gY2xpZW50KTsKKyAgICBib29sIGhhc0luc3BlY3Rv
ckZyb250ZW5kQ2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENsaWVu
dDsgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAKICAgICB2b2lkIGluc3BlY3RlZFdpbmRvd1NjcmlwdE9iamVjdENsZWFyZWQoRnJhbWUq
KTsKLSAgICB2b2lkIHdpbmRvd1NjcmlwdE9iamVjdEF2YWlsYWJsZSgpOwogCi0gICAgdm9pZCBz
ZXRGcm9udGVuZFByb3h5T2JqZWN0KFNjcmlwdFN0YXRlKiBzdGF0ZSwgU2NyaXB0T2JqZWN0IHdl
Ykluc3BlY3Rvck9iaiwgU2NyaXB0T2JqZWN0IGluamVjdGVkU2NyaXB0T2JqID0gU2NyaXB0T2Jq
ZWN0KCkpOwotICAgIFNjcmlwdFN0YXRlKiBmcm9udGVuZFNjcmlwdFN0YXRlKCkgY29uc3QgeyBy
ZXR1cm4gbV9mcm9udGVuZFNjcmlwdFN0YXRlOyB9CisgICAgYm9vbCB3aW5kb3dWaXNpYmxlKCk7
CisgICAgdm9pZCBzZXRGcm9udGVuZChQYXNzT3duUHRyPEluc3BlY3RvckZyb250ZW5kPik7CiAK
ICAgICB2b2lkIHBvcHVsYXRlU2NyaXB0T2JqZWN0cygpOwogICAgIHZvaWQgcmVzZXRTY3JpcHRP
YmplY3RzKCk7CkBAIC0yNjMsMTkgKzI1NiwxNiBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBjb25z
dCBTdHJpbmcmIGZyb250ZW5kU2V0dGluZ3NTZXR0aW5nTmFtZSgpOwogCiAgICAgZnJpZW5kIGNs
YXNzIEluc3BlY3RvckJhY2tlbmQ7Ci0gICAgZnJpZW5kIGNsYXNzIEluc3BlY3RvckZyb250ZW5k
SG9zdDsKICAgICBmcmllbmQgY2xhc3MgSW5qZWN0ZWRTY3JpcHRIb3N0OwogCiAgICAgLy8gRm9s
bG93aW5nIGFyZSB1c2VkIGZyb20gSW5zcGVjdG9yQmFja2VuZCBhbmQgaW50ZXJuYWxseS4KLQog
ICAgIHZvaWQgc2V0U2VhcmNoaW5nRm9yTm9kZShib29sIGVuYWJsZWQpOwogCi0gICAgdm9pZCBz
Y3JpcHRPYmplY3RSZWFkeSgpOwotICAgIHZvaWQgbW92ZVdpbmRvd0J5KGZsb2F0IHgsIGZsb2F0
IHkpIGNvbnN0OwotICAgIHZvaWQgc2V0QXR0YWNoZWRXaW5kb3coYm9vbCk7Ci0gICAgdm9pZCBz
ZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpOworICAgIHZvaWQgZnJvbnRl
bmRSZWFkeSgpOworICAgIHZvaWQgd2lsbENsb3NlRnJvbnRlbmQoKTsKKworICAgIC8vIEZvbGxv
d2luZyBhcmUgdXNlZCBmcm9tIEluc3BlY3RvckJhY2tlbmQgYW5kIGludGVybmFsbHkuCiAgICAg
dm9pZCBzdG9yZUxhc3RBY3RpdmVQYW5lbChjb25zdCBTdHJpbmcmIHBhbmVsTmFtZSk7Ci0gICAg
dm9pZCBjbG9zZVdpbmRvdygpOwogICAgIEluc3BlY3RvckRPTUFnZW50KiBkb21BZ2VudCgpIHsg
cmV0dXJuIG1fZG9tQWdlbnQuZ2V0KCk7IH0KICAgICB2b2lkIHJlbGVhc2VET01BZ2VudCgpOwog
CkBAIC0zMTYsOCArMzA2LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBydW5lUmVzb3VyY2VzKFJl
c291cmNlc01hcCosIERvY3VtZW50TG9hZGVyKiBsb2FkZXJUb0tlZXAgPSAwKTsKICAgICB2b2lk
IHJlbW92ZUFsbFJlc291cmNlcyhSZXNvdXJjZXNNYXAqIG1hcCkgeyBwcnVuZVJlc291cmNlcyht
YXApOyB9CiAKLSAgICB2b2lkIHNob3dXaW5kb3coKTsKLQogICAgIGJvb2wgaXNNYWluUmVzb3Vy
Y2VMb2FkZXIoRG9jdW1lbnRMb2FkZXIqIGxvYWRlciwgY29uc3QgS1VSTCYgcmVxdWVzdFVybCk7
CiAKICAgICBTcGVjaWFsUGFuZWxzIHNwZWNpYWxQYW5lbEZvckpTTmFtZShjb25zdCBTdHJpbmcm
IHBhbmVsTmFtZSk7CkBAIC0zMjYsMTAgKzMxNCwxMiBAQCBwcml2YXRlOgogCiAgICAgUGFnZSog
bV9pbnNwZWN0ZWRQYWdlOwogICAgIEluc3BlY3RvckNsaWVudCogbV9jbGllbnQ7CisgICAgT3du
UHRyPEluc3BlY3RvckZyb250ZW5kQ2xpZW50PiBtX2luc3BlY3RvckZyb250ZW5kQ2xpZW50Owor
ICAgIGJvb2wgbV9vcGVuaW5nRnJvbnRlbmQ7CisgICAgYm9vbCBtX2Nsb3NpbmdGcm9udGVuZDsK
ICAgICBPd25QdHI8SW5zcGVjdG9yRnJvbnRlbmQ+IG1fZnJvbnRlbmQ7CiAgICAgUmVmUHRyPElu
c3BlY3RvckRPTUFnZW50PiBtX2RvbUFnZW50OwogICAgIE93blB0cjxJbnNwZWN0b3JUaW1lbGlu
ZUFnZW50PiBtX3RpbWVsaW5lQWdlbnQ7Ci0gICAgUGFnZSogbV9wYWdlOwogICAgIFJlZlB0cjxO
b2RlPiBtX25vZGVUb0ZvY3VzOwogICAgIFJlZlB0cjxJbnNwZWN0b3JSZXNvdXJjZT4gbV9tYWlu
UmVzb3VyY2U7CiAgICAgUmVzb3VyY2VzTWFwIG1fcmVzb3VyY2VzOwpAQCAtMzQ1LDggKzMzNSw2
IEBAIHByaXZhdGU6CiAjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQogICAgIERPTVN0b3JhZ2VSZXNv
dXJjZXNNYXAgbV9kb21TdG9yYWdlUmVzb3VyY2VzOwogI2VuZGlmCi0gICAgU2NyaXB0U3RhdGUq
IG1fZnJvbnRlbmRTY3JpcHRTdGF0ZTsKLSAgICBib29sIG1fd2luZG93VmlzaWJsZTsKICAgICBT
cGVjaWFsUGFuZWxzIG1fc2hvd0FmdGVyVmlzaWJsZTsKICAgICBSZWZQdHI8Tm9kZT4gbV9oaWdo
bGlnaHRlZE5vZGU7CiAgICAgdW5zaWduZWQgbV9ncm91cExldmVsOwpAQCAtMzU1LDcgKzM0Myw2
IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3Jlc291cmNlVHJhY2tpbmdFbmFibGVkOwogICAgIGJv
b2wgbV9yZXNvdXJjZVRyYWNraW5nU2V0dGluZ3NMb2FkZWQ7CiAgICAgUmVmUHRyPEluc3BlY3Rv
ckJhY2tlbmQ+IG1faW5zcGVjdG9yQmFja2VuZDsKLSAgICBSZWZQdHI8SW5zcGVjdG9yRnJvbnRl
bmRIb3N0PiBtX2luc3BlY3RvckZyb250ZW5kSG9zdDsKICAgICBSZWZQdHI8SW5qZWN0ZWRTY3Jp
cHRIb3N0PiBtX2luamVjdGVkU2NyaXB0SG9zdDsKIAogICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJp
bmcsIFN0cmluZz4gU2V0dGluZ3M7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JGcm9udGVuZC5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5j
cHAKaW5kZXggYWY1NjIwZi4uY2M1Y2Q3NSAxMDA3NTUKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRnJvbnRlbmQuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZy
b250ZW5kLmNwcApAQCAtNDksMTQgKzQ5LDE2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
SW5zcGVjdG9yRnJvbnRlbmQ6Okluc3BlY3RvckZyb250ZW5kKEluc3BlY3RvckNvbnRyb2xsZXIq
IGluc3BlY3RvckNvbnRyb2xsZXIsIFNjcmlwdE9iamVjdCB3ZWJJbnNwZWN0b3IpCi0gICAgOiBt
X2luc3BlY3RvckNvbnRyb2xsZXIoaW5zcGVjdG9yQ29udHJvbGxlcikKLSAgICAsIG1fd2ViSW5z
cGVjdG9yKHdlYkluc3BlY3RvcikKK0luc3BlY3RvckZyb250ZW5kOjpJbnNwZWN0b3JGcm9udGVu
ZChTY3JpcHRPYmplY3Qgd2ViSW5zcGVjdG9yKQorICAgIDogbV93ZWJJbnNwZWN0b3Iod2ViSW5z
cGVjdG9yKQogewogfQogCiBJbnNwZWN0b3JGcm9udGVuZDo6fkluc3BlY3RvckZyb250ZW5kKCkg
CiB7CisgICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fd2ViSW5zcGVjdG9yLCAiY2xv
c2UiKTsKKyAgICBmdW5jdGlvbi5jYWxsKCk7CisKICAgICBtX3dlYkluc3BlY3RvciA9IFNjcmlw
dE9iamVjdCgpOwogfQogCkBAIC05MSw3ICs5Myw3IEBAIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6
OnVwZGF0ZUNvbnNvbGVNZXNzYWdlRXhwaXJlZENvdW50KHVuc2lnbmVkIGNvdW50KQogICAgIGZ1
bmN0aW9uLmNhbGwoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6YWRkQ29uc29sZU1l
c3NhZ2UoY29uc3QgU2NyaXB0T2JqZWN0JiBtZXNzYWdlT2JqLCBjb25zdCBWZWN0b3I8U2NyaXB0
U3RyaW5nPiYgZnJhbWVzLCBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIGNvbnN0IFZlY3RvcjxT
Y3JpcHRWYWx1ZT4gYXJndW1lbnRzLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit2b2lkIEluc3Bl
Y3RvckZyb250ZW5kOjphZGRDb25zb2xlTWVzc2FnZShjb25zdCBTY3JpcHRPYmplY3QmIG1lc3Nh
Z2VPYmosIGNvbnN0IFZlY3RvcjxTY3JpcHRTdHJpbmc+JiBmcmFtZXMsIGNvbnN0IFZlY3RvcjxS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiA+JiBhcmd1bWVudHMsIGNvbnN0IFN0cmluZyYg
bWVzc2FnZSkKIHsKICAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJbnNwZWN0
b3IsICJkaXNwYXRjaCIpOyAKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudCgiYWRkQ29uc29s
ZU1lc3NhZ2UiKTsKQEAgLTEwMCwxMCArMTAyLDggQEAgdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6
YWRkQ29uc29sZU1lc3NhZ2UoY29uc3QgU2NyaXB0T2JqZWN0JiBtZXNzYWdlT2JqLCBjb25zdAog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZnJhbWVzLnNpemUoKTsgKytpKQogICAg
ICAgICAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoZnJhbWVzW2ldKTsKICAgICB9IGVsc2Ug
aWYgKCFhcmd1bWVudHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIEluamVjdGVkU2NyaXB0IGluamVj
dGVkU2NyaXB0ID0gbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbmplY3RlZFNjcmlwdEhvc3QoKS0+
aW5qZWN0ZWRTY3JpcHRGb3Ioc2NyaXB0U3RhdGUpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgYXJndW1lbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkVmFsdWUgPSBpbmplY3RlZFNjcmlwdC53cmFw
Rm9yQ29uc29sZShhcmd1bWVudHNbaV0pOwotICAgICAgICAgICAgU2NyaXB0VmFsdWUgc2NyaXB0
VmFsdWUgPSBTY3JpcHRWYWx1ZTo6ZGVzZXJpYWxpemUodGhpcy0+c2NyaXB0U3RhdGUoKSwgc2Vy
aWFsaXplZFZhbHVlLmdldCgpKTsKKyAgICAgICAgICAgIFNjcmlwdFZhbHVlIHNjcmlwdFZhbHVl
ID0gU2NyaXB0VmFsdWU6OmRlc2VyaWFsaXplKHNjcmlwdFN0YXRlKCksIGFyZ3VtZW50c1tpXS5n
ZXQoKSk7CiAgICAgICAgICAgICBpZiAoc2NyaXB0VmFsdWUuaGFzTm9WYWx1ZSgpKSB7CiAgICAg
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJu
OwpAQCAtMjIwLDYgKzIyMCwxOSBAQCB2b2lkIEluc3BlY3RvckZyb250ZW5kOjpyZXNldCgpCiAg
ICAgY2FsbFNpbXBsZUZ1bmN0aW9uKCJyZXNldCIpOwogfQogCit2b2lkIEluc3BlY3RvckZyb250
ZW5kOjpicmluZ1RvRnJvbnQoKQoreworICAgIGNhbGxTaW1wbGVGdW5jdGlvbigiYnJpbmdUb0Zy
b250Iik7Cit9CisKK3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6Omluc3BlY3RlZFVSTENoYW5nZWQo
Y29uc3QgU3RyaW5nJiB1cmwpCit7CisgICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1f
d2ViSW5zcGVjdG9yLCAiZGlzcGF0Y2giKTsKKyAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudCgi
aW5zcGVjdGVkVVJMQ2hhbmdlZCIpOworICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHVybCk7
CisgICAgZnVuY3Rpb24uY2FsbCgpOworfQorCiB2b2lkIEluc3BlY3RvckZyb250ZW5kOjpyZXNv
dXJjZVRyYWNraW5nV2FzRW5hYmxlZCgpCiB7CiAgICAgY2FsbFNpbXBsZUZ1bmN0aW9uKCJyZXNv
dXJjZVRyYWNraW5nV2FzRW5hYmxlZCIpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRnJvbnRlbmQuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5k
LmgKaW5kZXggODYxYTZmNy4uMjVhMDM1MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRnJvbnRlbmQuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9u
dGVuZC5oCkBAIC00OSw3ICs0OSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNz
IEluc3BlY3RvckZyb250ZW5kIDogcHVibGljIE5vbmNvcHlhYmxlIHsKICAgICBwdWJsaWM6Ci0g
ICAgICAgIEluc3BlY3RvckZyb250ZW5kKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNv
bnRyb2xsZXIsIFNjcmlwdE9iamVjdCB3ZWJJbnNwZWN0b3IpOworICAgICAgICBJbnNwZWN0b3JG
cm9udGVuZChTY3JpcHRPYmplY3Qgd2ViSW5zcGVjdG9yKTsKICAgICAgICAgfkluc3BlY3RvckZy
b250ZW5kKCk7CiAKICAgICAgICAgU2NyaXB0QXJyYXkgbmV3U2NyaXB0QXJyYXkoKTsKQEAgLTYw
LDcgKzYwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHBvcHVsYXRlRnJv
bnRlbmRTZXR0aW5ncyhjb25zdCBTdHJpbmcmIHNldHRpbmdzKTsKIAogICAgICAgICB2b2lkIHVw
ZGF0ZUNvbnNvbGVNZXNzYWdlRXhwaXJlZENvdW50KHVuc2lnbmVkIGNvdW50KTsKLSAgICAgICAg
dm9pZCBhZGRDb25zb2xlTWVzc2FnZShjb25zdCBTY3JpcHRPYmplY3QmIG1lc3NhZ2VPYmosIGNv
bnN0IFZlY3RvcjxTY3JpcHRTdHJpbmc+JiBmcmFtZXMsIFNjcmlwdFN0YXRlKiwgY29uc3QgVmVj
dG9yPFNjcmlwdFZhbHVlPiBhcmd1bWVudHMsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CisgICAg
ICAgIHZvaWQgYWRkQ29uc29sZU1lc3NhZ2UoY29uc3QgU2NyaXB0T2JqZWN0JiBtZXNzYWdlT2Jq
LCBjb25zdCBWZWN0b3I8U2NyaXB0U3RyaW5nPiYgZnJhbWVzLCBjb25zdCBWZWN0b3I8UmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gPiYgYXJndW1lbnRzLCBjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UpOwogICAgICAgICB2b2lkIHVwZGF0ZUNvbnNvbGVNZXNzYWdlUmVwZWF0Q291bnQodW5zaWdu
ZWQgY291bnQpOwogICAgICAgICB2b2lkIGNsZWFyQ29uc29sZU1lc3NhZ2VzKCk7CiAKQEAgLTcz
LDYgKzczLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHNob3dQYW5lbChp
bnQgcGFuZWwpOwogICAgICAgICB2b2lkIHBvcHVsYXRlSW50ZXJmYWNlKCk7CiAgICAgICAgIHZv
aWQgcmVzZXQoKTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgYnJpbmdUb0Zyb250KCk7CisgICAg
ICAgIHZvaWQgaW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmKTsKIAogICAgICAgICB2
b2lkIHJlc291cmNlVHJhY2tpbmdXYXNFbmFibGVkKCk7CiAgICAgICAgIHZvaWQgcmVzb3VyY2VU
cmFja2luZ1dhc0Rpc2FibGVkKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JGcm9udGVuZENsaWVudC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRl
bmRDbGllbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTgzNDZiCi0t
LSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGll
bnQuaApAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJbnNwZWN0b3JGcm9udGVuZENsaWVudF9oCisj
ZGVmaW5lIEluc3BlY3RvckZyb250ZW5kQ2xpZW50X2gKKworI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDb250ZXh0TWVudUl0ZW07CitjbGFz
cyBFdmVudDsKK2NsYXNzIFN0cmluZzsKKworY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQg
eworcHVibGljOgorICAgIHZpcnR1YWwgfkluc3BlY3RvckZyb250ZW5kQ2xpZW50KCkgeyB9CisK
KyAgICB2aXJ0dWFsIHZvaWQgd2luZG93T2JqZWN0Q2xlYXJlZCgpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgZnJvbnRlbmRMb2FkZWQoKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgbW92ZVdpbmRv
d0J5KGZsb2F0IHgsIGZsb2F0IHkpID0gMDsKKworICAgIHZpcnR1YWwgU3RyaW5nIGxvY2FsaXpl
ZFN0cmluZ3NVUkwoKSA9IDA7CisgICAgdmlydHVhbCBTdHJpbmcgaGlkZGVuUGFuZWxzKCkgPSAw
OworCisgICAgdmlydHVhbCB2b2lkIGJyaW5nVG9Gcm9udCgpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgY2xvc2VXaW5kb3coKSA9IDA7CisKKyAgICB2aXJ0dWFsIGJvb2wgY2FuQXR0YWNoV2luZG93
KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hXaW5kb3coKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGRldGFjaFdpbmRvdygpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2hhbmdlQXR0YWNo
ZWRXaW5kb3dIZWlnaHQodW5zaWduZWQpID0gMDsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgaW5z
cGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQg
c2hvd0NvbnRleHRNZW51KEV2ZW50KiwgY29uc3QgVmVjdG9yPENvbnRleHRNZW51SXRlbSo+Jikg
PSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuY3BwIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ5Zjc5NQotLS0gL2Rldi9udWxsCisrKyBiL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuY3BwCkBAIC0wLDAg
KzEsMjM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6
CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5k
Q2xpZW50TG9jYWwuaCIKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlICJDaHJv
bWUuaCIKKyNpbmNsdWRlICJDb250ZXh0TWVudS5oIgorI2luY2x1ZGUgIkNvbnRleHRNZW51Q29u
dHJvbGxlci5oIgorI2luY2x1ZGUgIkNvbnRleHRNZW51SXRlbS5oIgorI2luY2x1ZGUgIkNvbnRl
eHRNZW51UHJvdmlkZXIuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJGcmFt
ZS5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xs
ZXIuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZC5oIgorI2luY2x1ZGUgIkluc3BlY3Rv
ckZyb250ZW5kSG9zdC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0
cmluZy5oIgorI2luY2x1ZGUgIlNjcmlwdEZ1bmN0aW9uQ2FsbC5oIgorI2luY2x1ZGUgIlNjcmlw
dE9iamVjdC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZyb250ZW5kTWVudVBy
b3ZpZGVyIDogcHVibGljIENvbnRleHRNZW51UHJvdmlkZXIgeworcHVibGljOgorICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEZyb250ZW5kTWVudVByb3ZpZGVyPiBjcmVhdGUoSW5zcGVjdG9yRnJvbnRl
bmRDbGllbnRMb2NhbCogZnJvbnRlbmRDbGllbnQsIFNjcmlwdE9iamVjdCB3ZWJJbnNwZWN0b3Is
IGNvbnN0IFZlY3RvcjxDb250ZXh0TWVudUl0ZW0qPiYgaXRlbXMpCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEZyb250ZW5kTWVudVByb3ZpZGVyKGZyb250ZW5kQ2xpZW50LCB3
ZWJJbnNwZWN0b3IsIGl0ZW1zKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgZGlzY29ubmVjdCgp
CisgICAgeworICAgICAgICBtX3dlYkluc3BlY3RvciA9IFNjcmlwdE9iamVjdCgpOworICAgICAg
ICBtX2Zyb250ZW5kQ2xpZW50ID0gMDsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIEZyb250
ZW5kTWVudVByb3ZpZGVyKEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwqIGZyb250ZW5kQ2xp
ZW50LCBTY3JpcHRPYmplY3Qgd2ViSW5zcGVjdG9yLCAgY29uc3QgVmVjdG9yPENvbnRleHRNZW51
SXRlbSo+JiBpdGVtcykKKyAgICAgICAgOiBtX2Zyb250ZW5kQ2xpZW50KGZyb250ZW5kQ2xpZW50
KQorICAgICAgICAsIG1fd2ViSW5zcGVjdG9yKHdlYkluc3BlY3RvcikKKyAgICAgICAgLCBtX2l0
ZW1zKGl0ZW1zKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5Gcm9udGVuZE1lbnVQcm92
aWRlcigpCisgICAgeworICAgICAgICBjb250ZXh0TWVudUNsZWFyZWQoKTsKKyAgICB9CisgICAg
CisgICAgdmlydHVhbCB2b2lkIHBvcHVsYXRlQ29udGV4dE1lbnUoQ29udGV4dE1lbnUqIG1lbnUp
CisgICAgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1faXRlbXMuc2l6ZSgpOyAr
K2kpCisgICAgICAgICAgICBtZW51LT5hcHBlbmRJdGVtKCptX2l0ZW1zW2ldKTsKKyAgICB9Cisg
ICAgCisgICAgdmlydHVhbCB2b2lkIGNvbnRleHRNZW51SXRlbVNlbGVjdGVkKENvbnRleHRNZW51
SXRlbSogaXRlbSkKKyAgICB7CisgICAgICAgIGludCBpdGVtTnVtYmVyID0gaXRlbS0+YWN0aW9u
KCkgLSBDb250ZXh0TWVudUl0ZW1CYXNlQ3VzdG9tVGFnOworCisgICAgICAgIFNjcmlwdEZ1bmN0
aW9uQ2FsbCBmdW5jdGlvbihtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7CisgICAgICAgIGZ1
bmN0aW9uLmFwcGVuZEFyZ3VtZW50KCJjb250ZXh0TWVudUl0ZW1TZWxlY3RlZCIpOworICAgICAg
ICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChpdGVtTnVtYmVyKTsKKyAgICAgICAgZnVuY3Rpb24u
Y2FsbCgpOworICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgY29udGV4dE1lbnVDbGVhcmVk
KCkKKyAgICB7CisKKyAgICAgICAgaWYgKG1fZnJvbnRlbmRDbGllbnQpIHsKKyAgICAgICAgICAg
IFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7
CisgICAgICAgICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudCgiY29udGV4dE1lbnVDbGVhcmVk
Iik7CisgICAgICAgICAgICBmdW5jdGlvbi5jYWxsKCk7CisKKyAgICAgICAgICAgIG1fZnJvbnRl
bmRDbGllbnQtPm1fbWVudVByb3ZpZGVyID0gMDsKKyAgICAgICAgfQorICAgICAgICBkZWxldGVB
bGxWYWx1ZXMobV9pdGVtcyk7CisgICAgICAgIG1faXRlbXMuY2xlYXIoKTsKKyAgICB9CisKKyAg
ICBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsKiBtX2Zyb250ZW5kQ2xpZW50OworICAgIFNj
cmlwdE9iamVjdCBtX3dlYkluc3BlY3RvcjsKKyAgICBWZWN0b3I8Q29udGV4dE1lbnVJdGVtKj4g
bV9pdGVtczsKK307CisKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBpbnNwZWN0b3JBdHRhY2hl
ZEhlaWdodE5hbWUgPSAiaW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQiOworc3RhdGljIGNvbnN0IHVu
c2lnbmVkIGRlZmF1bHRBdHRhY2hlZEhlaWdodCA9IDMwMDsKK3N0YXRpYyBjb25zdCBmbG9hdCBt
aW5pbXVtQXR0YWNoZWRIZWlnaHQgPSAyNTAuMGY7CitzdGF0aWMgY29uc3QgZmxvYXQgbWF4aW11
bUF0dGFjaGVkSGVpZ2h0UmF0aW8gPSAwLjc1ZjsKKworSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRM
b2NhbDo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbChJbnNwZWN0b3JDb250cm9sbGVyKiBp
bnNwZWN0b3JDb250cm9sbGVyLCBQYWdlKiBmcm9udGVuZFBhZ2UpCisgICAgOiBtX2luc3BlY3Rv
ckNvbnRyb2xsZXIoaW5zcGVjdG9yQ29udHJvbGxlcikKKyAgICAsIG1fZnJvbnRlbmRQYWdlKGZy
b250ZW5kUGFnZSkKKyAgICAsIG1fZnJvbnRlbmRTY3JpcHRTdGF0ZSgwKQorICAgICwgbV9tZW51
UHJvdmlkZXIoMCkKK3sKK30KKworSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6fkluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50TG9jYWwoKQoreworICAgIGlmIChtX21lbnVQcm92aWRlcikKKyAg
ICAgICAgbV9tZW51UHJvdmlkZXItPmRpc2Nvbm5lY3QoKTsKKyAgICBtX2Zyb250ZW5kU2NyaXB0
U3RhdGUgPSAwOworICAgIG1fZnJvbnRlbmRQYWdlID0gMDsKKyAgICBtX2luc3BlY3RvckNvbnRy
b2xsZXIgPSAwOworfQorICAgIAordm9pZCBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjp3
aW5kb3dPYmplY3RDbGVhcmVkKCkKK3sKKyAgICAvLyBHcmFudCB0aGUgaW5zcGVjdG9yIHRoZSBh
YmlsaXR5IHRvIHNjcmlwdCB0aGUgaW5zcGVjdGVkIHBhZ2UuCisgICAgbV9mcm9udGVuZFBhZ2Ut
Pm1haW5GcmFtZSgpLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5ncmFudFVuaXZlcnNh
bEFjY2VzcygpOworICAgIC8vIEZJWE1FOiBkb24ndCBrZWVwIHJlZmVyZW5jZSB0byB0aGUgc2Ny
aXB0IHN0YXRlCisgICAgbV9mcm9udGVuZFNjcmlwdFN0YXRlID0gc2NyaXB0U3RhdGVGcm9tUGFn
ZShkZWJ1Z2dlcldvcmxkKCksIG1fZnJvbnRlbmRQYWdlKTsKKyAgICBTY3JpcHRHbG9iYWxPYmpl
Y3Q6OnNldChtX2Zyb250ZW5kU2NyaXB0U3RhdGUsICJJbnNwZWN0b3JCYWNrZW5kIiwgbV9pbnNw
ZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JCYWNrZW5kKCkpOworICAgIG1fZnJvbnRlbmRIb3N0
ID0gSW5zcGVjdG9yRnJvbnRlbmRIb3N0OjpjcmVhdGUodGhpcyk7CisgICAgU2NyaXB0R2xvYmFs
T2JqZWN0OjpzZXQobV9mcm9udGVuZFNjcmlwdFN0YXRlLCAiSW5zcGVjdG9yRnJvbnRlbmRIb3N0
IiwgbV9mcm9udGVuZEhvc3QuZ2V0KCkpOworfQorCit2b2lkIEluc3BlY3RvckZyb250ZW5kQ2xp
ZW50TG9jYWw6OmZyb250ZW5kTG9hZGVkKCkKK3sKKyAgICAvLyBNYWtlIHN1cmUgb3VyIHdpbmRv
dyBpcyB2aXNpYmxlIG5vdyB0aGF0IHRoZSBwYWdlIGxvYWRlZAorICAgIGJyaW5nVG9Gcm9udCgp
OworCisgICAgLy8gQ3JlYXRlIEluc3BlY3RvckZyb250ZW5kIGFuZCBzZXQgaXQgdG8gSW5zcGVj
dG9yQ29udHJvbGxlci4KKyAgICBBU1NFUlQobV9mcm9udGVuZFNjcmlwdFN0YXRlKTsKKyAgICBT
Y3JpcHRPYmplY3Qgd2ViSW5zcGVjdG9yT2JqOworICAgIGlmICghU2NyaXB0R2xvYmFsT2JqZWN0
OjpnZXQobV9mcm9udGVuZFNjcmlwdFN0YXRlLCAiV2ViSW5zcGVjdG9yIiwgd2ViSW5zcGVjdG9y
T2JqKSkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPnNldEZyb250ZW5kKG5ldyBJbnNwZWN0
b3JGcm9udGVuZCh3ZWJJbnNwZWN0b3JPYmopKTsKK30KKworYm9vbCBJbnNwZWN0b3JGcm9udGVu
ZENsaWVudExvY2FsOjpjYW5BdHRhY2hXaW5kb3coKQoreworICAgIHVuc2lnbmVkIGluc3BlY3Rl
ZFBhZ2VIZWlnaHQgPSBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RlZFBhZ2UoKS0+bWFp
bkZyYW1lKCktPnZpZXcoKS0+dmlzaWJsZUhlaWdodCgpOworCisgICAgLy8gRG9uJ3QgYWxsb3cg
dGhlIGF0dGFjaCBpZiB0aGUgd2luZG93IHdvdWxkIGJlIHRvbyBzbWFsbCB0byBhY2NvbW1vZGF0
ZSB0aGUgbWluaW11bSBpbnNwZWN0b3IgaGVpZ2h0LgorICAgIHJldHVybiBtaW5pbXVtQXR0YWNo
ZWRIZWlnaHQgPD0gaW5zcGVjdGVkUGFnZUhlaWdodCAqIG1heGltdW1BdHRhY2hlZEhlaWdodFJh
dGlvOworfQorCit2b2lkIEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OmNoYW5nZUF0dGFj
aGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkKK3sKKyAgICB1bnNpZ25lZCB0b3RhbEhl
aWdodCA9IG1fZnJvbnRlbmRQYWdlLT5tYWluRnJhbWUoKS0+dmlldygpLT52aXNpYmxlSGVpZ2h0
KCkgKyBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RlZFBhZ2UoKS0+bWFpbkZyYW1lKCkt
PnZpZXcoKS0+dmlzaWJsZUhlaWdodCgpOworICAgIHVuc2lnbmVkIGF0dGFjaGVkSGVpZ2h0ID0g
Y29uc3RyYWluZWRBdHRhY2hlZFdpbmRvd0hlaWdodChoZWlnaHQsIHRvdGFsSGVpZ2h0KTsKKyAg
ICBtX2luc3BlY3RvckNvbnRyb2xsZXItPnNldFNldHRpbmcoaW5zcGVjdG9yQXR0YWNoZWRIZWln
aHROYW1lLCBTdHJpbmc6Om51bWJlcihhdHRhY2hlZEhlaWdodCkpOworICAgIHNldEF0dGFjaGVk
V2luZG93SGVpZ2h0KGF0dGFjaGVkSGVpZ2h0KTsKK30KKwordm9pZCBJbnNwZWN0b3JGcm9udGVu
ZENsaWVudExvY2FsOjptb3ZlV2luZG93QnkoZmxvYXQgeCwgZmxvYXQgeSkKK3sKKyAgICBGbG9h
dFJlY3QgZnJhbWVSZWN0ID0gbV9mcm9udGVuZFBhZ2UtPmNocm9tZSgpLT53aW5kb3dSZWN0KCk7
CisgICAgZnJhbWVSZWN0Lm1vdmUoeCwgeSk7CisgICAgbV9mcm9udGVuZFBhZ2UtPmNocm9tZSgp
LT5zZXRXaW5kb3dSZWN0KGZyYW1lUmVjdCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmRD
bGllbnRMb2NhbDo6c2hvd0NvbnRleHRNZW51KEV2ZW50KiBldmVudCwgY29uc3QgVmVjdG9yPENv
bnRleHRNZW51SXRlbSo+JiBpdGVtcykKK3sKKyAgICBTY3JpcHRPYmplY3Qgd2ViSW5zcGVjdG9y
T2JqOworICAgIGlmICghU2NyaXB0R2xvYmFsT2JqZWN0OjpnZXQobV9mcm9udGVuZFNjcmlwdFN0
YXRlLCAiV2ViSW5zcGVjdG9yIiwgd2ViSW5zcGVjdG9yT2JqKSkgeworICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBSZWZQdHI8
RnJvbnRlbmRNZW51UHJvdmlkZXI+IG1lbnVQcm92aWRlciA9IEZyb250ZW5kTWVudVByb3ZpZGVy
OjpjcmVhdGUodGhpcywgd2ViSW5zcGVjdG9yT2JqLCBpdGVtcyk7CisgICAgQ29udGV4dE1lbnVD
b250cm9sbGVyKiBtZW51Q29udHJvbGxlciA9IG1fZnJvbnRlbmRQYWdlLT5jb250ZXh0TWVudUNv
bnRyb2xsZXIoKTsKKyAgICBtZW51Q29udHJvbGxlci0+c2hvd0NvbnRleHRNZW51KGV2ZW50LCBt
ZW51UHJvdmlkZXIpOworICAgIG1fbWVudVByb3ZpZGVyID0gbWVudVByb3ZpZGVyLmdldCgpOwor
fQorCit2b2lkIEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OnNldEF0dGFjaGVkV2luZG93
KGJvb2wgYXR0YWNoZWQpCit7CisgICAgU2NyaXB0T2JqZWN0IHdlYkluc3BlY3Rvck9iajsKKyAg
ICBpZiAoIVNjcmlwdEdsb2JhbE9iamVjdDo6Z2V0KG1fZnJvbnRlbmRTY3JpcHRTdGF0ZSwgIldl
Ykluc3BlY3RvciIsIHdlYkluc3BlY3Rvck9iaikpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1
bmN0aW9uKHdlYkluc3BlY3Rvck9iaiwgImRpc3BhdGNoIik7IAorICAgIGZ1bmN0aW9uLmFwcGVu
ZEFyZ3VtZW50KCJzZXRBdHRhY2hlZFdpbmRvdyIpOworICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3Vt
ZW50KGF0dGFjaGVkKTsKKyAgICBmdW5jdGlvbi5jYWxsKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9y
RnJvbnRlbmRDbGllbnRMb2NhbDo6cmVzdG9yZUF0dGFjaGVkV2luZG93SGVpZ2h0KCkKK3sKKyAg
ICB1bnNpZ25lZCBpbnNwZWN0ZWRQYWdlSGVpZ2h0ID0gbV9pbnNwZWN0b3JDb250cm9sbGVyLT5p
bnNwZWN0ZWRQYWdlKCktPm1haW5GcmFtZSgpLT52aWV3KCktPnZpc2libGVIZWlnaHQoKTsKKyAg
ICBTdHJpbmcgYXR0YWNoZWRIZWlnaHQgPSBtX2luc3BlY3RvckNvbnRyb2xsZXItPnNldHRpbmco
aW5zcGVjdG9yQXR0YWNoZWRIZWlnaHROYW1lKTsKKyAgICBib29sIHN1Y2Nlc3MgPSB0cnVlOwor
ICAgIGludCBoZWlnaHQgPSBhdHRhY2hlZEhlaWdodC50b0ludCgmc3VjY2Vzcyk7CisgICAgdW5z
aWduZWQgcHJlZmVycmVkSGVpZ2h0ID0gc3VjY2VzcyA/IGhlaWdodCA6IGRlZmF1bHRBdHRhY2hl
ZEhlaWdodDsKKyAgICAKKyAgICAvLyBUaGlzIGNhbGwgbWlnaHQgbm90IGdvIHRocm91Z2ggKGlm
IHRoZSB3aW5kb3cgc3RhcnRzIG91dCBkZXRhY2hlZCksIGJ1dCBpZiB0aGUgd2luZG93IGlzIGlu
aXRpYWxseSBjcmVhdGVkIGF0dGFjaGVkLAorICAgIC8vIEluc3BlY3RvckNvbnRyb2xsZXI6OmF0
dGFjaFdpbmRvdyBpcyBuZXZlciBjYWxsZWQsIHNvIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRvIHNl
dCB0aGUgYXR0YWNoZWRXaW5kb3dIZWlnaHQuCisgICAgLy8gRklYTUU6IENsZWFuIHVwIGNvZGUg
c28gd2Ugb25seSBoYXZlIHRvIGNhbGwgc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQgaW4gSW5zcGVj
dG9yQ29udHJvbGxlcjo6YXR0YWNoV2luZG93CisgICAgc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQo
Y29uc3RyYWluZWRBdHRhY2hlZFdpbmRvd0hlaWdodChwcmVmZXJyZWRIZWlnaHQsIGluc3BlY3Rl
ZFBhZ2VIZWlnaHQpKTsKK30KKwordW5zaWduZWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2Nh
bDo6Y29uc3RyYWluZWRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBwcmVmZXJyZWRIZWln
aHQsIHVuc2lnbmVkIHRvdGFsV2luZG93SGVpZ2h0KQoreworICAgIHVzaW5nIG5hbWVzcGFjZSBz
dGQ7CisgICAgcmV0dXJuIHJvdW5kZihtYXgobWluaW11bUF0dGFjaGVkSGVpZ2h0LCBtaW48Zmxv
YXQ+KHByZWZlcnJlZEhlaWdodCwgdG90YWxXaW5kb3dIZWlnaHQgKiBtYXhpbXVtQXR0YWNoZWRI
ZWlnaHRSYXRpbykpKTsKK30KKyAgICAKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExv
Y2FsLmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE4YzQ3OQotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuaApA
QCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsX2gKKyNk
ZWZpbmUgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbF9oCisKKyNpbmNsdWRlICJJbnNwZWN0
b3JGcm9udGVuZENsaWVudC5oIgorI2luY2x1ZGUgIlNjcmlwdFN0YXRlLmgiCisjaW5jbHVkZSA8
d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRnJvbnRl
bmRNZW51UHJvdmlkZXI7CitjbGFzcyBJbnNwZWN0b3JDb250cm9sbGVyOworY2xhc3MgSW5zcGVj
dG9yRnJvbnRlbmRIb3N0OworY2xhc3MgUGFnZTsKKworY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmRD
bGllbnRMb2NhbCA6IHB1YmxpYyBJbnNwZWN0b3JGcm9udGVuZENsaWVudCwgcHVibGljIE5vbmNv
cHlhYmxlIHsKK3B1YmxpYzoKKyAgICBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsKEluc3Bl
Y3RvckNvbnRyb2xsZXIqLCBQYWdlKik7CisgICAgdmlydHVhbCB+SW5zcGVjdG9yRnJvbnRlbmRD
bGllbnRMb2NhbCgpOworICAgIAorICAgIHZpcnR1YWwgdm9pZCB3aW5kb3dPYmplY3RDbGVhcmVk
KCk7CisgICAgdmlydHVhbCB2b2lkIGZyb250ZW5kTG9hZGVkKCk7CisKKyAgICB2aXJ0dWFsIHZv
aWQgbW92ZVdpbmRvd0J5KGZsb2F0IHgsIGZsb2F0IHkpOworCisgICAgdmlydHVhbCBib29sIGNh
bkF0dGFjaFdpbmRvdygpOworICAgIHZpcnR1YWwgdm9pZCBjaGFuZ2VBdHRhY2hlZFdpbmRvd0hl
aWdodCh1bnNpZ25lZCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2hvd0NvbnRleHRNZW51KEV2ZW50
KiwgY29uc3QgVmVjdG9yPENvbnRleHRNZW51SXRlbSo+Jik7CisgICAgCitwcm90ZWN0ZWQ6Cisg
ICAgdmlydHVhbCB2b2lkIHNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkKSA9IDA7CisK
KyAgICB2b2lkIHNldEF0dGFjaGVkV2luZG93KGJvb2wpOworICAgIHZvaWQgcmVzdG9yZUF0dGFj
aGVkV2luZG93SGVpZ2h0KCk7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIHVuc2lnbmVkIGNvbnN0
cmFpbmVkQXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgcHJlZmVycmVkSGVpZ2h0LCB1bnNp
Z25lZCB0b3RhbFdpbmRvd0hlaWdodCk7CisKKyAgICBmcmllbmQgY2xhc3MgRnJvbnRlbmRNZW51
UHJvdmlkZXI7CisgICAgSW5zcGVjdG9yQ29udHJvbGxlciogbV9pbnNwZWN0b3JDb250cm9sbGVy
OworICAgIFBhZ2UqIG1fZnJvbnRlbmRQYWdlOworICAgIFNjcmlwdFN0YXRlKiBtX2Zyb250ZW5k
U2NyaXB0U3RhdGU7CisgICAgLy8gVE9ETyh5dXJ5cyk6IHRoaXMgcmVmIHNob3VsZG4ndCBiZSBu
ZWVkZWQuCisgICAgUmVmUHRyPEluc3BlY3RvckZyb250ZW5kSG9zdD4gbV9mcm9udGVuZEhvc3Q7
CisgICAgRnJvbnRlbmRNZW51UHJvdmlkZXIqIG1fbWVudVByb3ZpZGVyOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JG
cm9udGVuZEhvc3QuY3BwCmluZGV4IGMxYTE3NjEuLjZkNGMyMTUgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAKKysrIGIvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcApAQCAtNDEsOCArNDEsNyBAQAogI2luY2x1
ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUg
IkhUTUxGcmFtZU93bmVyRWxlbWVudC5oIgotI2luY2x1ZGUgIkluc3BlY3RvckNsaWVudC5oIgot
I2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRl
bmRDbGllbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JSZXNvdXJjZS5oIgogI2luY2x1ZGUgIlBh
Z2UuaCIKICNpbmNsdWRlICJQYXN0ZWJvYXJkLmgiCkBAIC01NCw2NSArNTMsNjkgQEAgdXNpbmcg
bmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1JbnNwZWN0b3JGcm9udGVu
ZEhvc3Q6Okluc3BlY3RvckZyb250ZW5kSG9zdChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0
b3JDb250cm9sbGVyLCBJbnNwZWN0b3JDbGllbnQqIGNsaWVudCkKLSAgICA6IG1faW5zcGVjdG9y
Q29udHJvbGxlcihpbnNwZWN0b3JDb250cm9sbGVyKQotICAgICwgbV9jbGllbnQoY2xpZW50KQor
SW5zcGVjdG9yRnJvbnRlbmRIb3N0OjpJbnNwZWN0b3JGcm9udGVuZEhvc3QoSW5zcGVjdG9yRnJv
bnRlbmRDbGllbnQqIGNsaWVudCkKKyAgICA6IG1fY2xpZW50KGNsaWVudCkKIHsKIH0KIAogSW5z
cGVjdG9yRnJvbnRlbmRIb3N0Ojp+SW5zcGVjdG9yRnJvbnRlbmRIb3N0KCkKIHsKLSAgICBpZiAo
bV9tZW51UHJvdmlkZXIpCi0gICAgICAgIG1fbWVudVByb3ZpZGVyLT5kaXNjb25uZWN0KCk7Cisg
ICAgQVNTRVJUKCFtX2NsaWVudCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmRIb3N0Ojps
b2FkZWQoKQogewotICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIpCi0gICAgICAgIG1faW5z
cGVjdG9yQ29udHJvbGxlci0+c2NyaXB0T2JqZWN0UmVhZHkoKTsKKyAgICBpZiAobV9jbGllbnQp
CisgICAgICAgIG1fY2xpZW50LT5mcm9udGVuZExvYWRlZCgpOwogfQogCiB2b2lkIEluc3BlY3Rv
ckZyb250ZW5kSG9zdDo6YXR0YWNoKCkKIHsKLSAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVy
KQotICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmF0dGFjaFdpbmRvdygpOworICAgIGlm
IChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPmF0dGFjaFdpbmRvdygpOwogfQogCiB2b2lk
IEluc3BlY3RvckZyb250ZW5kSG9zdDo6ZGV0YWNoKCkKIHsKLSAgICBpZiAobV9pbnNwZWN0b3JD
b250cm9sbGVyKQotICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmRldGFjaFdpbmRvdygp
OworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPmRldGFjaFdpbmRvdygpOwog
fQogCiB2b2lkIEluc3BlY3RvckZyb250ZW5kSG9zdDo6Y2xvc2VXaW5kb3coKQogewotICAgIGlm
IChtX2luc3BlY3RvckNvbnRyb2xsZXIpCi0gICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+
Y2xvc2VXaW5kb3coKTsKKyAgICBpZiAobV9jbGllbnQpIHsKKyAgICAgICAgbV9jbGllbnQtPmNs
b3NlV2luZG93KCk7CisgICAgICAgIG1fY2xpZW50ID0gMDsgLy8gRGlzY29ubmVjdCBmcm9tIGNs
aWVudC4KKyAgICB9Cit9CisKK3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmRIb3N0OjpicmluZ1RvRnJv
bnQoKQoreworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPmJyaW5nVG9Gcm9u
dCgpOwogfQogCi12b2lkIEluc3BlY3RvckZyb250ZW5kSG9zdDo6d2luZG93VW5sb2FkaW5nKCkK
K3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmRIb3N0OjppbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0
cmluZyYgbmV3VVJMKQogewotICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIpCi0gICAgICAg
IG1faW5zcGVjdG9yQ29udHJvbGxlci0+Y2xvc2UoKTsKKyAgICBpZiAobV9jbGllbnQpCisgICAg
ICAgIG1fY2xpZW50LT5pbnNwZWN0ZWRVUkxDaGFuZ2VkKG5ld1VSTCk7CiB9CiAKIGJvb2wgSW5z
cGVjdG9yRnJvbnRlbmRIb3N0OjpjYW5BdHRhY2hXaW5kb3coKSBjb25zdAogewotICAgIGlmICht
X2luc3BlY3RvckNvbnRyb2xsZXIpCi0gICAgICAgIHJldHVybiBtX2luc3BlY3RvckNvbnRyb2xs
ZXItPmNhbkF0dGFjaFdpbmRvdygpOwotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gbV9j
bGllbnQgJiYgbV9jbGllbnQtPmNhbkF0dGFjaFdpbmRvdygpOwogfQogCiB2b2lkIEluc3BlY3Rv
ckZyb250ZW5kSG9zdDo6c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KQog
ewotICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIpCi0gICAgICAgIG1faW5zcGVjdG9yQ29u
dHJvbGxlci0+c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQoaGVpZ2h0KTsKKyAgICBpZiAobV9jbGll
bnQpCisgICAgICAgIG1fY2xpZW50LT5jaGFuZ2VBdHRhY2hlZFdpbmRvd0hlaWdodChoZWlnaHQp
OwogfQogCiB2b2lkIEluc3BlY3RvckZyb250ZW5kSG9zdDo6bW92ZVdpbmRvd0J5KGZsb2F0IHgs
IGZsb2F0IHkpIGNvbnN0CiB7Ci0gICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlcikKLSAgICAg
ICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5tb3ZlV2luZG93QnkoeCwgeSk7CisgICAgaWYgKG1f
Y2xpZW50KQorICAgICAgICBtX2NsaWVudC0+bW92ZVdpbmRvd0J5KHgsIHkpOwogfQogCiBTdHJp
bmcgSW5zcGVjdG9yRnJvbnRlbmRIb3N0Ojpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkKQEAgLTE2MSwz
MCArMTY0LDggQEAgdm9pZCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OmNvcHlUZXh0KGNvbnN0IFN0
cmluZyYgdGV4dCkKIAogdm9pZCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OnNob3dDb250ZXh0TWVu
dShFdmVudCogZXZlbnQsIGNvbnN0IFZlY3RvcjxDb250ZXh0TWVudUl0ZW0qPiYgaXRlbXMpCiB7
Ci0gICAgaWYgKCFtX2luc3BlY3RvckNvbnRyb2xsZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBp
ZiAoIW1faW5zcGVjdG9yQ29udHJvbGxlci0+d2luZG93VmlzaWJsZSgpKQotICAgICAgICByZXR1
cm47Ci0KLQotICAgIG1fbWVudVByb3ZpZGVyID0gTWVudVByb3ZpZGVyOjpjcmVhdGUodGhpcywg
aXRlbXMpOwotICAgIENvbnRleHRNZW51Q29udHJvbGxlciogbWVudUNvbnRyb2xsZXIgPSBtX2lu
c3BlY3RvckNvbnRyb2xsZXItPm1fcGFnZS0+Y29udGV4dE1lbnVDb250cm9sbGVyKCk7Ci0gICAg
bWVudUNvbnRyb2xsZXItPnNob3dDb250ZXh0TWVudShldmVudCwgbV9tZW51UHJvdmlkZXIpOwot
fQotCi12b2lkIEluc3BlY3RvckZyb250ZW5kSG9zdDo6Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQo
Q29udGV4dE1lbnVJdGVtKiBpdGVtKQotewotICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIg
JiYgbV9pbnNwZWN0b3JDb250cm9sbGVyLT53aW5kb3dWaXNpYmxlKCkpIHsKLSAgICAgICAgaW50
IGl0ZW1OdW1iZXIgPSBpdGVtLT5hY3Rpb24oKSAtIENvbnRleHRNZW51SXRlbUJhc2VDdXN0b21U
YWc7Ci0gICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+bV9mcm9udGVuZC0+Y29udGV4dE1l
bnVJdGVtU2VsZWN0ZWQoaXRlbU51bWJlcik7Ci0gICAgfQotfQotCi12b2lkIEluc3BlY3RvckZy
b250ZW5kSG9zdDo6Y29udGV4dE1lbnVDbGVhcmVkKCkKLXsKLSAgICBtX21lbnVQcm92aWRlciA9
IDA7Ci0gICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlciAmJiBtX2luc3BlY3RvckNvbnRyb2xs
ZXItPndpbmRvd1Zpc2libGUoKSkKLSAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5tX2Zy
b250ZW5kLT5jb250ZXh0TWVudUNsZWFyZWQoKTsKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAg
IG1fY2xpZW50LT5zaG93Q29udGV4dE1lbnUoZXZlbnQsIGl0ZW1zKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJv
bnRlbmRIb3N0LmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuaApp
bmRleCBjYmU2YTliLi42ZTE2Mjk3IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JGcm9udGVuZEhvc3QuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9u
dGVuZEhvc3QuaApAQCAtNDMsMjcgKzQzLDI1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNz
IENvbnRleHRNZW51SXRlbTsKIGNsYXNzIEV2ZW50OwogY2xhc3MgSW5zcGVjdG9yQ2xpZW50Owor
Y2xhc3MgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ7CiBjbGFzcyBOb2RlOwogCiBjbGFzcyBJbnNw
ZWN0b3JGcm9udGVuZEhvc3QgOiBwdWJsaWMgUmVmQ291bnRlZDxJbnNwZWN0b3JGcm9udGVuZEhv
c3Q+CiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yRnJvbnRlbmRI
b3N0PiBjcmVhdGUoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciwgSW5z
cGVjdG9yQ2xpZW50KiBjbGllbnQpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yRnJv
bnRlbmRIb3N0PiBjcmVhdGUoSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQqIGNsaWVudCkKICAgICB7
Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9yRnJvbnRlbmRIb3N0KGluc3Bl
Y3RvckNvbnRyb2xsZXIsIGNsaWVudCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElu
c3BlY3RvckZyb250ZW5kSG9zdChjbGllbnQpKTsKICAgICB9CiAKICAgICB+SW5zcGVjdG9yRnJv
bnRlbmRIb3N0KCk7CiAKLSAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9s
bGVyKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JDb250cm9sbGVyOyB9Ci0KLSAgICB2b2lkIGRpc2Nv
bm5lY3RDb250cm9sbGVyKCkgeyBtX2luc3BlY3RvckNvbnRyb2xsZXIgPSAwOyB9Ci0KICAgICB2
b2lkIGxvYWRlZCgpOwogICAgIHZvaWQgYXR0YWNoKCk7CiAgICAgdm9pZCBkZXRhY2goKTsKICAg
ICB2b2lkIGNsb3NlV2luZG93KCk7Ci0gICAgdm9pZCB3aW5kb3dVbmxvYWRpbmcoKTsKKyAgICB2
b2lkIGJyaW5nVG9Gcm9udCgpOworICAgIHZvaWQgaW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBT
dHJpbmcmKTsKIAogICAgIGJvb2wgY2FuQXR0YWNoV2luZG93KCkgY29uc3Q7CiAgICAgdm9pZCBz
ZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpOwpAQCAtODAsNTkgKzc4LDkg
QEAgcHVibGljOgogICAgIHZvaWQgc2hvd0NvbnRleHRNZW51KEV2ZW50KiwgY29uc3QgVmVjdG9y
PENvbnRleHRNZW51SXRlbSo+JiBpdGVtcyk7CiAKIHByaXZhdGU6Ci0gICAgY2xhc3MgTWVudVBy
b3ZpZGVyIDogcHVibGljIENvbnRleHRNZW51UHJvdmlkZXIgewotICAgIHB1YmxpYzoKLSAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8TWVudVByb3ZpZGVyPiBjcmVhdGUoSW5zcGVjdG9yRnJvbnRl
bmRIb3N0KiBmcm9udGVuZEhvc3QsIGNvbnN0IFZlY3RvcjxDb250ZXh0TWVudUl0ZW0qPiYgaXRl
bXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVudVByb3Zp
ZGVyKGZyb250ZW5kSG9zdCwgaXRlbXMpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZpcnR1YWwg
fk1lbnVQcm92aWRlcigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHRNZW51Q2xlYXJl
ZCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBkaXNjb25uZWN0KCkKLSAgICAgICAgewot
ICAgICAgICAgICAgbV9mcm9udGVuZEhvc3QgPSAwOwotICAgICAgICB9Ci0KLSAgICAgICAgdmly
dHVhbCB2b2lkIHBvcHVsYXRlQ29udGV4dE1lbnUoQ29udGV4dE1lbnUqIG1lbnUpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9pdGVtcy5zaXplKCk7ICsr
aSkKLSAgICAgICAgICAgICAgICBtZW51LT5hcHBlbmRJdGVtKCptX2l0ZW1zW2ldKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBjb250ZXh0TWVudUl0ZW1TZWxlY3RlZChDb250
ZXh0TWVudUl0ZW0qIGl0ZW0pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtX2Zyb250ZW5k
SG9zdCkKLSAgICAgICAgICAgICAgICBtX2Zyb250ZW5kSG9zdC0+Y29udGV4dE1lbnVJdGVtU2Vs
ZWN0ZWQoaXRlbSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2aXJ0dWFsIHZvaWQgY29udGV4dE1l
bnVDbGVhcmVkKCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1fZnJvbnRlbmRIb3N0KQot
ICAgICAgICAgICAgICAgIG1fZnJvbnRlbmRIb3N0LT5jb250ZXh0TWVudUNsZWFyZWQoKTsKLSAg
ICAgICAgICAgIGRlbGV0ZUFsbFZhbHVlcyhtX2l0ZW1zKTsKLSAgICAgICAgICAgIG1faXRlbXMu
Y2xlYXIoKTsKLSAgICAgICAgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgTWVudVByb3ZpZGVy
KEluc3BlY3RvckZyb250ZW5kSG9zdCogZnJvbnRlbmRIb3N0LCAgY29uc3QgVmVjdG9yPENvbnRl
eHRNZW51SXRlbSo+JiBpdGVtcykKLSAgICAgICAgICAgIDogbV9mcm9udGVuZEhvc3QoZnJvbnRl
bmRIb3N0KQotICAgICAgICAgICAgLCBtX2l0ZW1zKGl0ZW1zKSB7IH0KLSAgICAgICAgSW5zcGVj
dG9yRnJvbnRlbmRIb3N0KiBtX2Zyb250ZW5kSG9zdDsKLSAgICAgICAgVmVjdG9yPENvbnRleHRN
ZW51SXRlbSo+IG1faXRlbXM7Ci0gICAgfTsKLQotICAgIEluc3BlY3RvckZyb250ZW5kSG9zdChJ
bnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyLCBJbnNwZWN0b3JDbGllbnQq
IGNsaWVudCk7Ci0KLSAgICB2b2lkIGNvbnRleHRNZW51SXRlbVNlbGVjdGVkKENvbnRleHRNZW51
SXRlbSopOwotICAgIHZvaWQgY29udGV4dE1lbnVDbGVhcmVkKCk7Ci0KLSAgICBJbnNwZWN0b3JD
b250cm9sbGVyKiBtX2luc3BlY3RvckNvbnRyb2xsZXI7Ci0gICAgSW5zcGVjdG9yQ2xpZW50KiBt
X2NsaWVudDsKLSAgICBSZWZQdHI8TWVudVByb3ZpZGVyPiBtX21lbnVQcm92aWRlcjsKKyAgICBJ
bnNwZWN0b3JGcm9udGVuZEhvc3QoSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQqIGNsaWVudCk7CisK
KyAgICBJbnNwZWN0b3JGcm9udGVuZENsaWVudCogbV9jbGllbnQ7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9u
dGVuZEhvc3QuaWRsIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0Lmlk
bAppbmRleCAxNTBlOWZjLi4wYWVmNWM0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JGcm9udGVuZEhvc3QuaWRsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckZyb250ZW5kSG9zdC5pZGwKQEAgLTM2LDcgKzM2LDggQEAgbW9kdWxlIGNvcmUgewogICAgICAg
ICB2b2lkIGF0dGFjaCgpOwogICAgICAgICB2b2lkIGRldGFjaCgpOwogICAgICAgICB2b2lkIGNs
b3NlV2luZG93KCk7Ci0gICAgICAgIHZvaWQgd2luZG93VW5sb2FkaW5nKCk7CisgICAgICAgIHZv
aWQgYnJpbmdUb0Zyb250KCk7CisgICAgICAgIHZvaWQgaW5zcGVjdGVkVVJMQ2hhbmdlZChpbiBE
T01TdHJpbmcgbmV3VVJMKTsKIAogICAgICAgICBib29sZWFuIGNhbkF0dGFjaFdpbmRvdygpOwog
ICAgICAgICB2b2lkIHNldEF0dGFjaGVkV2luZG93SGVpZ2h0KGluIHVuc2lnbmVkIGxvbmcgaGVp
Z2h0KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0b3JG
cm9udGVuZEhvc3RTdHViLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3Rv
ckZyb250ZW5kSG9zdFN0dWIuanMKaW5kZXggZWZmMjUxOC4uNTQ1NjA2OSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckZyb250ZW5kSG9zdFN0dWIuanMK
KysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckZyb250ZW5kSG9zdFN0
dWIuanMKQEAgLTQ4LDYgKzQ4LDExIEBAIFdlYkluc3BlY3Rvci5JbnNwZWN0b3JGcm9udGVuZEhv
c3RTdHViLnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJuICJ1bmtub3duIjsKICAgICB9LAog
CisgICAgYnJpbmdUb0Zyb250OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLl93aW5k
b3dWaXNpYmxlID0gdHJ1ZTsKKyAgICB9LAorCiAgICAgY2xvc2VXaW5kb3c6IGZ1bmN0aW9uKCkK
ICAgICB7CiAgICAgICAgIHRoaXMuX3dpbmRvd1Zpc2libGUgPSBmYWxzZTsKQEAgLTg3LDcgKzky
LDcgQEAgV2ViSW5zcGVjdG9yLkluc3BlY3RvckZyb250ZW5kSG9zdFN0dWIucHJvdG90eXBlID0g
ewogICAgICAgICByZXR1cm4gIiI7CiAgICAgfSwKIAotICAgIHdpbmRvd1VubG9hZGluZzogZnVu
Y3Rpb24oKQorICAgIGluc3BlY3RlZFVSTENoYW5nZWQ6IGZ1bmN0aW9uKHVybCkKICAgICB7CiAg
ICAgfSwKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rv
ci5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKaW5kZXggNTkx
MjBjZC4uNmNkMjYxNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2lu
c3BlY3Rvci5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpz
CkBAIC00NzgsNyArNDc4LDYgQEAgV2ViSW5zcGVjdG9yLmxvYWRlZCA9IGZ1bmN0aW9uKCkKIAog
ICAgIHRoaXMuYWRkTWFpbkV2ZW50TGlzdGVuZXJzKGRvY3VtZW50KTsKIAotICAgIHdpbmRvdy5h
ZGRFdmVudExpc3RlbmVyKCJ1bmxvYWQiLCB0aGlzLndpbmRvd1VubG9hZC5iaW5kKHRoaXMpLCB0
cnVlKTsKICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIiwgdGhpcy53aW5kb3dS
ZXNpemUuYmluZCh0aGlzKSwgdHJ1ZSk7CiAKICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVy
KCJmb2N1cyIsIHRoaXMuZm9jdXNDaGFuZ2VkLmJpbmQodGhpcyksIHRydWUpOwpAQCAtNTYyLDEx
ICs1NjEsNiBAQCBXZWJJbnNwZWN0b3IuZGlzcGF0Y2ggPSBmdW5jdGlvbigpIHsKICAgICBzZXRU
aW1lb3V0KGRlbGF5RGlzcGF0Y2gsIDApOwogfQogCi1XZWJJbnNwZWN0b3Iud2luZG93VW5sb2Fk
ID0gZnVuY3Rpb24oZXZlbnQpCi17Ci0gICAgSW5zcGVjdG9yRnJvbnRlbmRIb3N0LndpbmRvd1Vu
bG9hZGluZygpOwotfQotCiBXZWJJbnNwZWN0b3Iud2luZG93UmVzaXplID0gZnVuY3Rpb24oZXZl
bnQpCiB7CiAgICAgaWYgKHRoaXMuY3VycmVudFBhbmVsKQpAQCAtNjA0LDYgKzU5OCw5IEBAIFdl
Ykluc3BlY3Rvci5zZXRBdHRhY2hlZFdpbmRvdyA9IGZ1bmN0aW9uKGF0dGFjaGVkKQogCiBXZWJJ
bnNwZWN0b3IuY2xvc2UgPSBmdW5jdGlvbihldmVudCkKIHsKKyAgICBpZiAodGhpcy5faXNDbG9z
aW5nKQorICAgICAgICByZXR1cm47CisgICAgdGhpcy5faXNDbG9zaW5nID0gdHJ1ZTsKICAgICBJ
bnNwZWN0b3JGcm9udGVuZEhvc3QuY2xvc2VXaW5kb3coKTsKIH0KIApAQCAtMTMxNSw2ICsxMzEy
LDE2IEBAIFdlYkluc3BlY3Rvci5yZXNldCA9IGZ1bmN0aW9uKCkKICAgICB0aGlzLmNvbnNvbGUu
Y2xlYXJNZXNzYWdlcygpOwogfQogCitXZWJJbnNwZWN0b3IuYnJpbmdUb0Zyb250ID0gZnVuY3Rp
b24oKQoreworICAgIEluc3BlY3RvckZyb250ZW5kSG9zdC5icmluZ1RvRnJvbnQoKTsKK30KKwor
V2ViSW5zcGVjdG9yLmluc3BlY3RlZFVSTENoYW5nZWQgPSBmdW5jdGlvbih1cmwpCit7CisgICAg
SW5zcGVjdG9yRnJvbnRlbmRIb3N0Lmluc3BlY3RlZFVSTENoYW5nZWQodXJsKTsKK30KKwogV2Vi
SW5zcGVjdG9yLnJlc291cmNlVVJMQ2hhbmdlZCA9IGZ1bmN0aW9uKHJlc291cmNlLCBvbGRVUkwp
CiB7CiAgICAgZGVsZXRlIHRoaXMucmVzb3VyY2VVUkxNYXBbb2xkVVJMXTsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oIGIvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGll
bnRzLmgKaW5kZXggNmEyZWNkNS4uZDAyNTg5MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9sb2FkZXIv
RW1wdHlDbGllbnRzLmgKKysrIGIvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgKQEAgLTQ3
MiwyOSArNDcyLDE0IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5FbXB0eUluc3BlY3RvckNsaWVu
dCgpIHsgfQogCiAgICAgdmlydHVhbCB2b2lkIGluc3BlY3RvckRlc3Ryb3llZCgpIHsgfQotCi0g
ICAgdmlydHVhbCBQYWdlKiBjcmVhdGVQYWdlKCkgeyByZXR1cm4gMDsgfTsKLQotICAgIHZpcnR1
YWwgU3RyaW5nIGxvY2FsaXplZFN0cmluZ3NVUkwoKSB7IHJldHVybiBTdHJpbmcoKTsgfQotCi0g
ICAgdmlydHVhbCBTdHJpbmcgaGlkZGVuUGFuZWxzKCkgeyByZXR1cm4gU3RyaW5nKCk7IH0KLQot
ICAgIHZpcnR1YWwgdm9pZCBzaG93V2luZG93KCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGNsb3Nl
V2luZG93KCkgeyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoV2luZG93KCkgeyB9Ci0gICAg
dmlydHVhbCB2b2lkIGRldGFjaFdpbmRvdygpIHsgfQotCi0gICAgdmlydHVhbCB2b2lkIHNldEF0
dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkKSB7IH0KKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQg
b3Blbkluc3BlY3RvckZyb250ZW5kKEluc3BlY3RvckNvbnRyb2xsZXIqKSB7IH0KIAogICAgIHZp
cnR1YWwgdm9pZCBoaWdobGlnaHQoTm9kZSopIHsgfQogICAgIHZpcnR1YWwgdm9pZCBoaWRlSGln
aGxpZ2h0KCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGluc3BlY3RlZFVSTENoYW5nZWQoY29uc3Qg
U3RyaW5nJikgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgcG9wdWxhdGVTZXR0aW5nKGNvbnN0IFN0
cmluZyYsIFN0cmluZyopIHsgfQogICAgIHZpcnR1YWwgdm9pZCBzdG9yZVNldHRpbmcoY29uc3Qg
U3RyaW5nJiwgY29uc3QgU3RyaW5nJikgeyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgaW5zcGVjdG9y
V2luZG93T2JqZWN0Q2xlYXJlZCgpIHsgfQogfTsKIAogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9s
b2FkZXIvRnJhbWVMb2FkZXIuY3BwIGIvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCmlu
ZGV4IDU0Yzc5NzIuLmUxMGI1OGYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9h
ZGVyLmNwcAorKysgYi9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKQEAgLTM5NDQsOCAr
Mzk0NCw2IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmRpc3BhdGNoRGlkQ2xlYXJXaW5kb3dPYmplY3RJ
bldvcmxkKERPTVdyYXBwZXJXb3JsZCogd29ybGQpCiAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX2Zy
YW1lLT5wYWdlKCkpIHsKICAgICAgICAgaWYgKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3Rv
ciA9IHBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKSkKICAgICAgICAgICAgIGluc3BlY3Rvci0+
aW5zcGVjdGVkV2luZG93U2NyaXB0T2JqZWN0Q2xlYXJlZChtX2ZyYW1lKTsKLSAgICAgICAgaWYg
KEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvciA9IHBhZ2UtPnBhcmVudEluc3BlY3RvckNv
bnRyb2xsZXIoKSkKLSAgICAgICAgICAgIGluc3BlY3Rvci0+d2luZG93U2NyaXB0T2JqZWN0QXZh
aWxhYmxlKCk7CiAgICAgfQogI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvUGFn
ZS5jcHAgYi9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKaW5kZXggN2QxZTYyNC4uZDY2ZTQ5NyAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCisrKyBiL1dlYkNvcmUvcGFnZS9QYWdlLmNw
cApAQCAtMTM4LDkgKzEzOCw2IEBAIFBhZ2U6OlBhZ2UoQ2hyb21lQ2xpZW50KiBjaHJvbWVDbGll
bnQsIENvbnRleHRNZW51Q2xpZW50KiBjb250ZXh0TWVudUNsaWVudCwgRWRpCiAgICAgLCBtX2Fy
ZU1lbW9yeUNhY2hlQ2xpZW50Q2FsbHNFbmFibGVkKHRydWUpCiAgICAgLCBtX21lZGlhVm9sdW1l
KDEpCiAgICAgLCBtX2phdmFTY3JpcHRVUkxzQXJlQWxsb3dlZCh0cnVlKQotI2lmIEVOQUJMRShJ
TlNQRUNUT1IpCi0gICAgLCBtX3BhcmVudEluc3BlY3RvckNvbnRyb2xsZXIoMCkKLSNlbmRpZgog
ICAgICwgbV9kaWRMb2FkVXNlclN0eWxlU2hlZXQoZmFsc2UpCiAgICAgLCBtX3VzZXJTdHlsZVNo
ZWV0TW9kaWZpY2F0aW9uVGltZSgwKQogICAgICwgbV9ncm91cCgwKQpAQCAtMTk2LDggKzE5Myw2
IEBAIFBhZ2U6On5QYWdlKCkKIAogICAgIG1fZWRpdG9yQ2xpZW50LT5wYWdlRGVzdHJveWVkKCk7
CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBpZiAobV9wYXJlbnRJbnNwZWN0b3JDb250cm9s
bGVyKQotICAgICAgICBtX3BhcmVudEluc3BlY3RvckNvbnRyb2xsZXItPnBhZ2VEZXN0cm95ZWQo
KTsKICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RlZFBhZ2VEZXN0cm95ZWQoKTsK
ICNlbmRpZgogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvUGFnZS5oIGIvV2ViQ29yZS9wYWdl
L1BhZ2UuaAppbmRleCBmNjk4Mjg3Li45NGU2ZGQ1IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2Uv
UGFnZS5oCisrKyBiL1dlYkNvcmUvcGFnZS9QYWdlLmgKQEAgLTE0OSwxMSArMTQ5LDYgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogI2VuZGlmCiAgICAgICAgIFNldHRpbmdzKiBzZXR0aW5ncygpIGNv
bnN0IHsgcmV0dXJuIG1fc2V0dGluZ3MuZ2V0KCk7IH0KICAgICAgICAgUHJvZ3Jlc3NUcmFja2Vy
KiBwcm9ncmVzcygpIGNvbnN0IHsgcmV0dXJuIG1fcHJvZ3Jlc3MuZ2V0KCk7IH0KLQotI2lmIEVO
QUJMRShJTlNQRUNUT1IpCi0gICAgICAgIHZvaWQgc2V0UGFyZW50SW5zcGVjdG9yQ29udHJvbGxl
cihJbnNwZWN0b3JDb250cm9sbGVyKiBjb250cm9sbGVyKSB7IG1fcGFyZW50SW5zcGVjdG9yQ29u
dHJvbGxlciA9IGNvbnRyb2xsZXI7IH0KLSAgICAgICAgSW5zcGVjdG9yQ29udHJvbGxlciogcGFy
ZW50SW5zcGVjdG9yQ29udHJvbGxlcigpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50SW5zcGVjdG9y
Q29udHJvbGxlcjsgfQotI2VuZGlmCiAgICAgICAgIAogICAgICAgICB2b2lkIHNldFRhYktleUN5
Y2xlc1Rocm91Z2hFbGVtZW50cyhib29sIGIpIHsgbV90YWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVu
dHMgPSBiOyB9CiAgICAgICAgIGJvb2wgdGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKCkgY29u
c3QgeyByZXR1cm4gbV90YWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHM7IH0KQEAgLTI4NiwxMCAr
MjgxLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIGJvb2wgbV9qYXZhU2NyaXB0
VVJMc0FyZUFsbG93ZWQ7CiAKLSNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgICAgICBJbnNwZWN0
b3JDb250cm9sbGVyKiBtX3BhcmVudEluc3BlY3RvckNvbnRyb2xsZXI7Ci0jZW5kaWYKLQogICAg
ICAgICBTdHJpbmcgbV91c2VyU3R5bGVTaGVldFBhdGg7CiAgICAgICAgIG11dGFibGUgU3RyaW5n
IG1fdXNlclN0eWxlU2hlZXQ7CiAgICAgICAgIG11dGFibGUgYm9vbCBtX2RpZExvYWRVc2VyU3R5
bGVTaGVldDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1lbnUuY3BwIGIv
V2ViQ29yZS9wbGF0Zm9ybS9Db250ZXh0TWVudS5jcHAKaW5kZXggMjgzYWE1Ni4uMDAyMmE0NyAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9Db250ZXh0TWVudS5jcHAKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9Db250ZXh0TWVudS5jcHAKQEAgLTM1OSw2ICszNTksOSBAQCB2b2lkIENvbnRl
eHRNZW51Ojpwb3B1bGF0ZSgpCiAgICAgICAgICAgICAgICAgYXBwZW5kSXRlbShTcGVlY2hNZW51
SXRlbSk7CiAjZW5kaWYgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICB9IGVsc2UgeworI2lm
IEVOQUJMRShJTlNQRUNUT1IpCisgICAgICAgICAgICAgICAgaWYgKCEoZnJhbWUtPnBhZ2UoKSAm
JiBmcmFtZS0+cGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmhhc0luc3BlY3RvckZyb250
ZW5kQ2xpZW50KCkpKSB7CisjZW5kaWYKICNpZiBQTEFURk9STShHVEspCiAgICAgICAgICAgICAg
ICAgYXBwZW5kSXRlbShCYWNrSXRlbSk7CiAgICAgICAgICAgICAgICAgYXBwZW5kSXRlbShGb3J3
YXJkSXRlbSk7CkBAIC0zNzgsNiArMzgxLDkgQEAgdm9pZCBDb250ZXh0TWVudTo6cG9wdWxhdGUo
KQogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgYXBwZW5kSXRlbShS
ZWxvYWRJdGVtKTsKICNlbmRpZgorI2lmIEVOQUJMRShJTlNQRUNUT1IpCisgICAgICAgICAgICAg
ICAgfQorI2VuZGlmCiAKICAgICAgICAgICAgICAgICBpZiAoZnJhbWUtPnBhZ2UoKSAmJiBmcmFt
ZSAhPSBmcmFtZS0+cGFnZSgpLT5tYWluRnJhbWUoKSkKICAgICAgICAgICAgICAgICAgICAgYXBw
ZW5kSXRlbShPcGVuRnJhbWVJdGVtKTsKQEAgLTU1MCw3ICs1NTYsNiBAQCB2b2lkIENvbnRleHRN
ZW51OjphZGRJbnNwZWN0RWxlbWVudEl0ZW0oKQogICAgICAgICByZXR1cm47CiAKICAgICBDb250
ZXh0TWVudUl0ZW0gSW5zcGVjdEVsZW1lbnRJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRl
bVRhZ0luc3BlY3RFbGVtZW50LCBjb250ZXh0TWVudUl0ZW1UYWdJbnNwZWN0RWxlbWVudCgpKTsK
LSAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCkpOwogICAgIGFwcGVuZEl0ZW0oSW5zcGVj
dEVsZW1lbnRJdGVtKTsKIH0KICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQpkaWZmIC0tZ2l0
IGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cK
aW5kZXggNDRhOTNlZS4uZjE2NzQ5ZiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZworKysgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkgQEAKKzIw
MTAtMDMtMTEgIFl1cnkgU2VtaWtoYXRza3kgPHl1cnlzQGNocm9taXVtLm9yZz4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbnRyb2R1Y2UgSW5zcGVj
dG9yRnJvbnRlbmRDbGllbnQgdGhhdCBwcm92aWRlcyBJbnNwZWN0b3JGcm9udGVuZCB3aXRoIGFu
IGludGVyZmFjZSB0byB0aGUgZW1iZWRkZXIuIEluc3BlY3RvckNsaWVudCBub3cgc2VydmVzIGFz
IGEgZGVsZWdhdGUgZm9yIEluc3BlY3RvckNvbnRyb2xsZXIgYW5kIGRvZXMgbm90IGNvbnRhaW4g
bWV0aG9kcyBmb3IgbWFuYWdpbmcgaW5zcGVjdG9yIGZyb250ZW5kIHdpbmRvdy4gVGhhdCBhbGxv
d3MgdG8gY3JlYXRlIHJlbW90ZSBJbnNwZWN0b3JGcm9udGVuZEhvc3QuCisKKyAgICAgICAgSW50
cm9kdWNlIEluc3BlY3RvckZyb250ZW5kQ2xpZW50IHRoYXQgd291bGQgcHJvdmlkZSBJbnNwZWN0
b3JGcm9udGVuZCB3aXRoIGFuIGludGVyZmFjZSB0byB0aGUgZW1iZWRkZXIKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM1MDM2CisKKyAgICAgICAgKiBz
cmMvSW5zcGVjdG9yQ2xpZW50SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6Okluc3BlY3RvckNs
aWVudEltcGw6Om9wZW5JbnNwZWN0b3JGcm9udGVuZCk6CisgICAgICAgICogc3JjL0luc3BlY3Rv
ckNsaWVudEltcGwuaDoKKyAgICAgICAgKiBzcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6YXR0YWNoKToKKyAgICAgICAg
KFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudEltcGw6OmRpZENvbW1pdFByb3Zpc2lvbmFsTG9hZCk6
CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjpjcmVhdGVJbnNwZWN0b3JG
cm9udGVuZFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudEltcGw6OnNl
dEluc3BlY3RvckZyb250ZW5kUHJveHlUb0luc3BlY3RvckNvbnRyb2xsZXIpOgorICAgICAgICAq
IHNyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5oOgorICAgICAgICAqIHNyYy9XZWJEZXZUb29sc0Zy
b250ZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzRnJvbnRlbmRJbXBs
OjpXZWJEZXZUb29sc0Zyb250ZW5kSW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xz
RnJvbnRlbmRJbXBsOjpqc0JyaW5nVG9Gcm9udCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRv
b2xzRnJvbnRlbmRJbXBsOjpqc0luc3BlY3RlZFVSTENoYW5nZWQpOgorICAgICAgICAqIHNyYy9X
ZWJEZXZUb29sc0Zyb250ZW5kSW1wbC5oOgorICAgICAgICAqIHNyYy9qcy9JbmplY3REaXNwYXRj
aC5qczoKKyAgICAgICAgKGNsb3NlKToKKwogMjAxMC0wMy0xMCAgRGFyaW4gRmlzaGVyICA8ZGFy
aW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEplcmVteSBPcmxvdy4KZGlm
ZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvSW5zcGVjdG9yQ2xpZW50SW1wbC5jcHAgYi9X
ZWJLaXQvY2hyb21pdW0vc3JjL0luc3BlY3RvckNsaWVudEltcGwuY3BwCmluZGV4IDU0NTUwZDEu
LmY2OWVmNzIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvSW5zcGVjdG9yQ2xpZW50
SW1wbC5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9JbnNwZWN0b3JDbGllbnRJbXBsLmNw
cApAQCAtNjMsNDYgKzYzLDggQEAgdm9pZCBJbnNwZWN0b3JDbGllbnRJbXBsOjppbnNwZWN0b3JE
ZXN0cm95ZWQoKQogICAgIC8vIE91ciBsaWZldGltZSBpcyBib3VuZCB0byB0aGUgV2ViVmlld0lt
cGwuCiB9CiAKLVBhZ2UqIEluc3BlY3RvckNsaWVudEltcGw6OmNyZWF0ZVBhZ2UoKQordm9pZCBJ
bnNwZWN0b3JDbGllbnRJbXBsOjpvcGVuSW5zcGVjdG9yRnJvbnRlbmQoSW5zcGVjdG9yQ29udHJv
bGxlciopCiB7Ci0gICAgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCBpbiBD
aHJvbWUgYXMgaW5zcGVjdG9yIGZyb250LWVuZCBsaXZlcwotICAgIC8vIGluIGEgc2VwYXJhdGUg
cHJvY2Vzcy4KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQot
dm9pZCBJbnNwZWN0b3JDbGllbnRJbXBsOjpzaG93V2luZG93KCkKLXsKLSAgICBBU1NFUlQobV9p
bnNwZWN0ZWRXZWJWaWV3LT5kZXZUb29sc0FnZW50UHJpdmF0ZSgpKTsKLSAgICBtX2luc3BlY3Rl
ZFdlYlZpZXctPnBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5zZXRXaW5kb3dWaXNpYmxl
KHRydWUpOwotfQotCi12b2lkIEluc3BlY3RvckNsaWVudEltcGw6OmNsb3NlV2luZG93KCkKLXsK
LSAgICBpZiAobV9pbnNwZWN0ZWRXZWJWaWV3LT5wYWdlKCkpCi0gICAgICAgIG1faW5zcGVjdGVk
V2ViVmlldy0+cGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnNldFdpbmRvd1Zpc2libGUo
ZmFsc2UpOwotfQotCi1ib29sIEluc3BlY3RvckNsaWVudEltcGw6OndpbmRvd1Zpc2libGUoKQot
ewotICAgIEFTU0VSVChtX2luc3BlY3RlZFdlYlZpZXctPmRldlRvb2xzQWdlbnRQcml2YXRlKCkp
OwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDbGllbnRJbXBsOjphdHRh
Y2hXaW5kb3coKQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcwotfQotCi12b2lkIElu
c3BlY3RvckNsaWVudEltcGw6OmRldGFjaFdpbmRvdygpCi17Ci0gICAgLy8gRklYTUU6IEltcGxl
bWVudCB0aGlzCi19Ci0KLXZvaWQgSW5zcGVjdG9yQ2xpZW50SW1wbDo6c2V0QXR0YWNoZWRXaW5k
b3dIZWlnaHQodW5zaWduZWQgaW50IGhlaWdodCkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50
IHRoaXMKLSAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCiBzdGF0aWMgdm9pZCBpbnZhbGlkYXRl
Tm9kZUJvdW5kaW5nUmVjdChXZWJWaWV3SW1wbCogd2ViVmlldykKQEAgLTEzMCwyMyArOTIsNiBA
QCB2b2lkIEluc3BlY3RvckNsaWVudEltcGw6OmhpZGVIaWdobGlnaHQoKQogICAgIGludmFsaWRh
dGVOb2RlQm91bmRpbmdSZWN0KG1faW5zcGVjdGVkV2ViVmlldyk7CiB9CiAKLXZvaWQgSW5zcGVj
dG9yQ2xpZW50SW1wbDo6aW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIG5ld1VSTCkK
LXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMKLX0KLQotU3RyaW5nIEluc3BlY3RvckNs
aWVudEltcGw6OmxvY2FsaXplZFN0cmluZ3NVUkwoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1TdHJpbmcgSW5zcGVjdG9yQ2xpZW50SW1wbDo6
aGlkZGVuUGFuZWxzKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAiIjsK
LX0KLQogdm9pZCBJbnNwZWN0b3JDbGllbnRJbXBsOjpwb3B1bGF0ZVNldHRpbmcoY29uc3QgU3Ry
aW5nJiBrZXksIFN0cmluZyogdmFsdWUpCiB7CiAgICAgbG9hZFNldHRpbmdzKCk7CkBAIC0xNjEs
MTEgKzEwNiw2IEBAIHZvaWQgSW5zcGVjdG9yQ2xpZW50SW1wbDo6c3RvcmVTZXR0aW5nKGNvbnN0
IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgIHNhdmVTZXR0aW5ncygpOwog
fQogCi12b2lkIEluc3BlY3RvckNsaWVudEltcGw6Omluc3BlY3RvcldpbmRvd09iamVjdENsZWFy
ZWQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KIHZvaWQgSW5zcGVjdG9yQ2xpZW50
SW1wbDo6bG9hZFNldHRpbmdzKCkKIHsKICAgICBpZiAobV9zZXR0aW5ncykKZGlmZiAtLWdpdCBh
L1dlYktpdC9jaHJvbWl1bS9zcmMvSW5zcGVjdG9yQ2xpZW50SW1wbC5oIGIvV2ViS2l0L2Nocm9t
aXVtL3NyYy9JbnNwZWN0b3JDbGllbnRJbXBsLmgKaW5kZXggNmY3ZjhiMS4uY2NiY2VmNyAxMDA2
NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9JbnNwZWN0b3JDbGllbnRJbXBsLmgKKysrIGIv
V2ViS2l0L2Nocm9taXVtL3NyYy9JbnNwZWN0b3JDbGllbnRJbXBsLmgKQEAgLTQ1LDI1ICs0NSwx
NSBAQCBwdWJsaWM6CiAKICAgICAvLyBJbnNwZWN0b3JDbGllbnQgbWV0aG9kczoKICAgICB2aXJ0
dWFsIHZvaWQgaW5zcGVjdG9yRGVzdHJveWVkKCk7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpQYWdl
KiBjcmVhdGVQYWdlKCk7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpTdHJpbmcgbG9jYWxpemVkU3Ry
aW5nc1VSTCgpOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6U3RyaW5nIGhpZGRlblBhbmVscygpOwot
ICAgIHZpcnR1YWwgdm9pZCBzaG93V2luZG93KCk7Ci0gICAgdmlydHVhbCB2b2lkIGNsb3NlV2lu
ZG93KCk7Ci0gICAgdmlydHVhbCBib29sIHdpbmRvd1Zpc2libGUoKTsKLSAgICB2aXJ0dWFsIHZv
aWQgYXR0YWNoV2luZG93KCk7Ci0gICAgdmlydHVhbCB2b2lkIGRldGFjaFdpbmRvdygpOwotICAg
IHZpcnR1YWwgdm9pZCBzZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpOwor
ICAgIHZpcnR1YWwgdm9pZCBvcGVuSW5zcGVjdG9yRnJvbnRlbmQoV2ViQ29yZTo6SW5zcGVjdG9y
Q29udHJvbGxlciopOwogICAgIHZpcnR1YWwgdm9pZCBoaWdobGlnaHQoV2ViQ29yZTo6Tm9kZSop
OwogICAgIHZpcnR1YWwgdm9pZCBoaWRlSGlnaGxpZ2h0KCk7Ci0gICAgdmlydHVhbCB2b2lkIGlu
c3BlY3RlZFVSTENoYW5nZWQoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBuZXdVUkwpOwogICAgIHZp
cnR1YWwgdm9pZCBwb3B1bGF0ZVNldHRpbmcoCiAgICAgICAgIGNvbnN0IFdlYkNvcmU6OlN0cmlu
ZyYga2V5LAogICAgICAgICBXZWJDb3JlOjpTdHJpbmcqIHZhbHVlKTsKICAgICB2aXJ0dWFsIHZv
aWQgc3RvcmVTZXR0aW5nKAogICAgICAgICBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIGtleSwKICAg
ICAgICAgY29uc3QgV2ViQ29yZTo6U3RyaW5nJiB2YWx1ZSk7Ci0gICAgdmlydHVhbCB2b2lkIGlu
c3BlY3RvcldpbmRvd09iamVjdENsZWFyZWQoKTsKIAogcHJpdmF0ZToKICAgICB2b2lkIGxvYWRT
ZXR0aW5ncygpOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0Fn
ZW50SW1wbC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzQWdlbnRJbXBsLmNw
cAppbmRleCBhZjUwNjJhLi4yMWYzMWY0IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkRldlRvb2xzQWdlbnRJbXBsLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRl
dlRvb2xzQWdlbnRJbXBsLmNwcApAQCAtMTY5LDcgKzE2OSw3IEBAIHZvaWQgV2ViRGV2VG9vbHNB
Z2VudEltcGw6OmF0dGFjaCgpCiAgICAgICAgIG5ldyBEZWJ1Z2dlckFnZW50SW1wbChtX3dlYlZp
ZXdJbXBsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9kZWJ1Z2dlckFnZW50RGVs
ZWdhdGVTdHViLmdldCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcykpOwot
ICAgIHJlc2V0SW5zcGVjdG9yRnJvbnRlbmRQcm94eSgpOworICAgIGNyZWF0ZUluc3BlY3RvckZy
b250ZW5kUHJveHkoKTsKIAogICAgIC8vIEFsbG93IGNvbnRyb2xsZXIgdG8gc2VuZCBtZXNzYWdl
cyB0byB0aGUgZnJvbnRlbmQuCiAgICAgSW5zcGVjdG9yQ29udHJvbGxlciogaWMgPSBpbnNwZWN0
b3JDb250cm9sbGVyKCk7CkBAIC0xODUsNyArMTg1LDcgQEAgdm9pZCBXZWJEZXZUb29sc0FnZW50
SW1wbDo6YXR0YWNoKCkKICAgICAgICAgfQogICAgIH0KIAotICAgIGljLT5zZXRXaW5kb3dWaXNp
YmxlKHRydWUsIGZhbHNlKTsKKyAgICBzZXRJbnNwZWN0b3JGcm9udGVuZFByb3h5VG9JbnNwZWN0
b3JDb250cm9sbGVyKCk7CiAgICAgbV9hdHRhY2hlZCA9IHRydWU7CiB9CiAKQEAgLTIxNiw3ICsy
MTYsNiBAQCB2b2lkIFdlYkRldlRvb2xzQWdlbnRJbXBsOjpkaWRDb21taXRQcm92aXNpb25hbExv
YWQoV2ViRnJhbWVJbXBsKiB3ZWJmcmFtZSwgYm9vbAogICAgICAgICBkcy0+dW5yZWFjaGFibGVV
UkwoKSA6CiAgICAgICAgIHJlcXVlc3QudXJsKCk7CiAgICAgaWYgKCF3ZWJmcmFtZS0+cGFyZW50
KCkpIHsKLSAgICAgICAgcmVzZXRJbnNwZWN0b3JGcm9udGVuZFByb3h5KCk7CiAgICAgICAgIG1f
dG9vbHNBZ2VudERlbGVnYXRlU3R1Yi0+ZnJhbWVOYXZpZ2F0ZShXZWJDb3JlOjpLVVJMKHVybCku
c3RyaW5nKCkpOwogICAgICAgICBTZXRBcHVBZ2VudEVuYWJsZWRJblV0aWxpdHlDb250ZXh0KG1f
dXRpbGl0eUNvbnRleHQsIG1fYXB1QWdlbnRFbmFibGVkKTsKICAgICB9CkBAIC0zNTcsNyArMzU2
LDcgQEAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IFdlYkRldlRvb2xzQWdlbnRJbXBsOjpjcmVhdGVJ
bnNwZWN0b3JCYWNrZW5kVjhXcmFwcGVyKCkKICAgICByZXR1cm4gaW5zdGFuY2U7CiB9CiAKLXZv
aWQgV2ViRGV2VG9vbHNBZ2VudEltcGw6OnJlc2V0SW5zcGVjdG9yRnJvbnRlbmRQcm94eSgpCit2
b2lkIFdlYkRldlRvb2xzQWdlbnRJbXBsOjpjcmVhdGVJbnNwZWN0b3JGcm9udGVuZFByb3h5KCkK
IHsKICAgICBkaXNwb3NlVXRpbGl0eUNvbnRleHQoKTsKICAgICBtX3V0aWxpdHlDb250ZXh0ID0g
djg6OkNvbnRleHQ6Ok5ldygpOwpAQCAtMzY4LDggKzM2NywxNiBAQCB2b2lkIFdlYkRldlRvb2xz
QWdlbnRJbXBsOjpyZXNldEluc3BlY3RvckZyb250ZW5kUHJveHkoKQogICAgIHY4OjpDb250ZXh0
OjpTY29wZSBjb250ZXh0U2NvcGUobV91dGlsaXR5Q29udGV4dCk7CiAgICAgU2NyaXB0U3RhdGUq
IHN0YXRlID0gU2NyaXB0U3RhdGU6OmZvckNvbnRleHQoCiAgICAgICAgIHY4OjpMb2NhbDx2ODo6
Q29udGV4dD46Ok5ldyhtX3V0aWxpdHlDb250ZXh0KSk7Cit9CisKK3ZvaWQgV2ViRGV2VG9vbHNB
Z2VudEltcGw6OnNldEluc3BlY3RvckZyb250ZW5kUHJveHlUb0luc3BlY3RvckNvbnRyb2xsZXIo
KQoreworICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsKKyAgICBTY3JpcHRTdGF0ZSogc3RhdGUg
PSBTY3JpcHRTdGF0ZTo6Zm9yQ29udGV4dCgKKyAgICAgICAgdjg6OkxvY2FsPHY4OjpDb250ZXh0
Pjo6TmV3KG1fdXRpbGl0eUNvbnRleHQpKTsKICAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBpYyA9
IGluc3BlY3RvckNvbnRyb2xsZXIoKTsKLSAgICBpYy0+c2V0RnJvbnRlbmRQcm94eU9iamVjdChz
dGF0ZSwgU2NyaXB0T2JqZWN0KHN0YXRlLCBtX3V0aWxpdHlDb250ZXh0LT5HbG9iYWwoKSkpOwor
ICAgIGljLT5zZXRGcm9udGVuZChuZXcgSW5zcGVjdG9yRnJvbnRlbmQoCisgICAgICAgIFNjcmlw
dE9iamVjdChzdGF0ZSwgbV91dGlsaXR5Q29udGV4dC0+R2xvYmFsKCkpKSk7CiB9CiAKIHZvaWQg
V2ViRGV2VG9vbHNBZ2VudEltcGw6OnNldEFwdUFnZW50RW5hYmxlZChib29sIGVuYWJsZWQpCmRp
ZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzQWdlbnRJbXBsLmggYi9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzQWdlbnRJbXBsLmgKaW5kZXggMjA3YmFkYS4u
NDU1ZGNlZiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50
SW1wbC5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuaApA
QCAtMTA5LDcgKzEwOSw4IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGNvbXBpbGVVdGlsaXR5U2Ny
aXB0cygpOwogICAgIHZvaWQgaW5pdERldlRvb2xzQWdlbnRIb3N0KCk7Ci0gICAgdm9pZCByZXNl
dEluc3BlY3RvckZyb250ZW5kUHJveHkoKTsKKyAgICB2b2lkIGNyZWF0ZUluc3BlY3RvckZyb250
ZW5kUHJveHkoKTsKKyAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kUHJveHlUb0luc3BlY3Rv
ckNvbnRyb2xsZXIoKTsKICAgICB2b2lkIHNldEFwdUFnZW50RW5hYmxlZChib29sIGVuYWJsZWQp
OwogCiAgICAgV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxl
cigpOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0Zyb250ZW5k
SW1wbC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzRnJvbnRlbmRJbXBsLmNw
cAppbmRleCBkNWI4ZWJjLi44YTJmODFjIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkRldlRvb2xzRnJvbnRlbmRJbXBsLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YkRldlRvb2xzRnJvbnRlbmRJbXBsLmNwcApAQCAtMTU2LDggKzE1NiwxMSBAQCBXZWJEZXZUb29s
c0Zyb250ZW5kSW1wbDo6V2ViRGV2VG9vbHNGcm9udGVuZEltcGwoCiAgICAgICAgICJzZXRTZXR0
aW5nIiwKICAgICAgICAgV2ViRGV2VG9vbHNGcm9udGVuZEltcGw6OmpzU2V0U2V0dGluZyk7CiAg
ICAgZGV2VG9vbHNIb3N0LmFkZFByb3RvRnVuY3Rpb24oCi0gICAgICAgICJ3aW5kb3dVbmxvYWRp
bmciLAotICAgICAgICBXZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6anNXaW5kb3dVbmxvYWRpbmcp
OworICAgICAgICAiYnJpbmdUb0Zyb250IiwKKyAgICAgICAgV2ViRGV2VG9vbHNGcm9udGVuZElt
cGw6OmpzQnJpbmdUb0Zyb250KTsKKyAgICBkZXZUb29sc0hvc3QuYWRkUHJvdG9GdW5jdGlvbigK
KyAgICAgICAgImluc3BlY3RlZFVSTENoYW5nZWQiLAorICAgICAgICBXZWJEZXZUb29sc0Zyb250
ZW5kSW1wbDo6anNJbnNwZWN0ZWRVUkxDaGFuZ2VkKTsKICAgICBkZXZUb29sc0hvc3QuYWRkUHJv
dG9GdW5jdGlvbigKICAgICAgICAgInNob3dDb250ZXh0TWVudSIsCiAgICAgICAgIFdlYkRldlRv
b2xzRnJvbnRlbmRJbXBsOjpqc1Nob3dDb250ZXh0TWVudSk7CkBAIC0zNDYsOSArMzQ5LDEzIEBA
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBXZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6anNEZWJ1Z2dl
clBhdXNlU2NyaXB0KGNvbnN0IHY4OjpBCiAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKIH0K
IAotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjpqc1dpbmRv
d1VubG9hZGluZyhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQordjg6OkhhbmRsZTx2ODo6VmFs
dWU+IFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjpqc0JyaW5nVG9Gcm9udChjb25zdCB2ODo6QXJn
dW1lbnRzJiBhcmdzKQoreworICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Cit9CisKK3Y4OjpI
YW5kbGU8djg6OlZhbHVlPiBXZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6anNJbnNwZWN0ZWRVUkxD
aGFuZ2VkKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7Ci0gICAgLy8gVE9ETyhwZmVsZG1h
bik6IEltcGxlbWVudCB0aGlzLgogICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiB9CiAKZGlm
ZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNGcm9udGVuZEltcGwuaCBi
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNGcm9udGVuZEltcGwuaAppbmRleCBiYTAw
MTNiLi42NTkxNjkzIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xz
RnJvbnRlbmRJbXBsLmgKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0Zyb250
ZW5kSW1wbC5oCkBAIC0xNDIsNyArMTQyLDggQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IGpzU2V0dGluZyhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKTsKICAg
ICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGpzU2V0U2V0dGluZyhjb25zdCB2ODo6QXJn
dW1lbnRzJiBhcmdzKTsKICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGpzRGVidWdn
ZXJQYXVzZVNjcmlwdChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKTsKLSAgICBzdGF0aWMgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IGpzV2luZG93VW5sb2FkaW5nKGNvbnN0IHY4OjpBcmd1bWVudHMm
IGFyZ3MpOworICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4ganNCcmluZ1RvRnJvbnQo
Y29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncyk7CisgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBqc0luc3BlY3RlZFVSTENoYW5nZWQoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncyk7CiAg
ICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBqc1Nob3dDb250ZXh0TWVudShjb25zdCB2
ODo6QXJndW1lbnRzJiBhcmdzKTsKICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGpz
Q2FuQXR0YWNoV2luZG93KGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpOwogCmRpZmYgLS1naXQg
YS9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0luamVjdERpc3BhdGNoLmpzIGIvV2ViS2l0L2Nocm9t
aXVtL3NyYy9qcy9JbmplY3REaXNwYXRjaC5qcwppbmRleCBlMDcwYzQyLi42OGJjZGJkIDEwMDY0
NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0luamVjdERpc3BhdGNoLmpzCisrKyBiL1dl
YktpdC9jaHJvbWl1bS9zcmMvanMvSW5qZWN0RGlzcGF0Y2guanMKQEAgLTEwNCwzICsxMDQsNyBA
QCBmdW5jdGlvbiBkaXNwYXRjaChtZXRob2QsIHZhcl9hcmdzKSB7CiAgICAgdmFyIGNhbGwgPSBK
U09OLnN0cmluZ2lmeShhcmdzKTsKICAgICBEZXZUb29sc0FnZW50SG9zdC5kaXNwYXRjaChjYWxs
KTsKIH07CisKK2Z1bmN0aW9uIGNsb3NlKCkgeworICAgIC8vIFRoaXMgbWV0aG9kIGlzIGNhbGxl
ZCB3aGVuIEluc3BlY3RvckZyb250ZW5kIGNsb3NlcyBpbiBsYXlvdXQgdGVzdHMuCit9CmRpZmYg
LS1naXQgYS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyBiL1dlYktpdC9ndGsvQ2hhbmdlTG9nCmluZGV4
IDlhZGQ2ZTIuLmRiNzQ5ZWUgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvQ2hhbmdlTG9nCisrKyBi
L1dlYktpdC9ndGsvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzQgQEAKKzIwMTAtMDMtMTAgIFl1cnkg
U2VtaWtoYXRza3kgPHl1cnlzQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbnRyb2R1Y2UgSW5zcGVjdG9yRnJvbnRlbmRDbGll
bnQgdGhhdCBwcm92aWRlcyBJbnNwZWN0b3JGcm9udGVuZCB3aXRoIGFuIGludGVyZmFjZSB0byB0
aGUgZW1iZWRkZXIuIEluc3BlY3RvckNsaWVudCBub3cgc2VydmVzIGFzIGEgZGVsZWdhdGUgZm9y
IEluc3BlY3RvckNvbnRyb2xsZXIgYW5kIGRvZXMgbm90IGNvbnRhaW4gbWV0aG9kcyBmb3IgbWFu
YWdpbmcgaW5zcGVjdG9yIGZyb250ZW5kIHdpbmRvdy4gVGhhdCBhbGxvd3MgdG8gY3JlYXRlIHJl
bW90ZSBJbnNwZWN0b3JGcm9udGVuZEhvc3QuCisKKyAgICAgICAgSW50cm9kdWNlIEluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50IHRoYXQgd291bGQgcHJvdmlkZSBJbnNwZWN0b3JGcm9udGVuZCB3aXRo
IGFuIGludGVyZmFjZSB0byB0aGUgZW1iZWRkZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTM1MDM2CisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9J
bnNwZWN0b3JDbGllbnRHdGsuY3BwOgorICAgICAgICAoV2ViS2l0Ojpub3RpZnlXZWJWaWV3RGVz
dHJveWVkKToKKyAgICAgICAgKFdlYktpdDo6SW5zcGVjdG9yQ2xpZW50OjpJbnNwZWN0b3JDbGll
bnQpOgorICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JDbGllbnQ6Omluc3BlY3RvckRlc3Ryb3ll
ZCk6CisgICAgICAgIChXZWJLaXQ6Okluc3BlY3RvckNsaWVudDo6b3Blbkluc3BlY3RvckZyb250
ZW5kKToKKyAgICAgICAgKFdlYktpdDo6SW5zcGVjdG9yQ2xpZW50OjpoaWdobGlnaHQpOgorICAg
ICAgICAoV2ViS2l0OjpJbnNwZWN0b3JDbGllbnQ6OmhpZGVIaWdobGlnaHQpOgorICAgICAgICAo
V2ViS2l0OjpJbnNwZWN0b3JDbGllbnQ6OnBvcHVsYXRlU2V0dGluZyk6CisgICAgICAgIChXZWJL
aXQ6Okluc3BlY3RvckNsaWVudDo6c3RvcmVTZXR0aW5nKToKKyAgICAgICAgKFdlYktpdDo6SW5z
cGVjdG9yRnJvbnRlbmRDbGllbnQ6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50KToKKyAgICAgICAg
KFdlYktpdDo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6On5JbnNwZWN0b3JGcm9udGVuZENsaWVu
dCk6CisgICAgICAgIChXZWJLaXQ6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpkZXN0cm95SW5z
cGVjdG9yV2luZG93KToKKyAgICAgICAgKFdlYktpdDo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6
OmxvY2FsaXplZFN0cmluZ3NVUkwpOgorICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JGcm9udGVu
ZENsaWVudDo6aGlkZGVuUGFuZWxzKToKKyAgICAgICAgKFdlYktpdDo6SW5zcGVjdG9yRnJvbnRl
bmRDbGllbnQ6OmJyaW5nVG9Gcm9udCk6CisgICAgICAgIChXZWJLaXQ6Okluc3BlY3RvckZyb250
ZW5kQ2xpZW50OjpjbG9zZVdpbmRvdyk6CisgICAgICAgIChXZWJLaXQ6Okluc3BlY3RvckZyb250
ZW5kQ2xpZW50OjphdHRhY2hXaW5kb3cpOgorICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JGcm9u
dGVuZENsaWVudDo6ZGV0YWNoV2luZG93KToKKyAgICAgICAgKFdlYktpdDo6SW5zcGVjdG9yRnJv
bnRlbmRDbGllbnQ6OnNldEF0dGFjaGVkV2luZG93SGVpZ2h0KToKKyAgICAgICAgKFdlYktpdDo6
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6Omluc3BlY3RlZFVSTENoYW5nZWQpOgorICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudEd0ay5oOgorCiAyMDEwLTAzLTA5ICBQaGls
aXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBHdXN0YXZvIE5vcm9uaGEgU2lsdmEuCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL1dlYkNvcmVT
dXBwb3J0L0luc3BlY3RvckNsaWVudEd0ay5jcHAgYi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0
L0luc3BlY3RvckNsaWVudEd0ay5jcHAKaW5kZXggOTliYzYyNy4uZTcyYWMwNSAxMDA2NDQKLS0t
IGEvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRHdGsuY3BwCisrKyBi
L1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50R3RrLmNwcApAQCAtMzEs
NjcgKzMxLDQwIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0
IHsKIAotc3RhdGljIHZvaWQgbm90aWZ5V2ViVmlld0Rlc3Ryb3llZChXZWJLaXRXZWJWaWV3KiB3
ZWJWaWV3LCBJbnNwZWN0b3JDbGllbnQqIGluc3BlY3RvckNsaWVudCkKK3N0YXRpYyB2b2lkIG5v
dGlmeVdlYlZpZXdEZXN0cm95ZWQoV2ViS2l0V2ViVmlldyogd2ViVmlldywgSW5zcGVjdG9yRnJv
bnRlbmRDbGllbnQqIGluc3BlY3RvckZyb250ZW5kQ2xpZW50KQogewotICAgIGluc3BlY3RvckNs
aWVudC0+d2ViVmlld0Rlc3Ryb3llZCgpOworICAgIGluc3BlY3RvckZyb250ZW5kQ2xpZW50LT5k
ZXN0cm95SW5zcGVjdG9yV2luZG93KCk7CiB9CiAKIEluc3BlY3RvckNsaWVudDo6SW5zcGVjdG9y
Q2xpZW50KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCi0gICAgOiBtX3dlYlZpZXcoMCkKLSAgICAs
IG1faW5zcGVjdGVkV2ViVmlldyh3ZWJWaWV3KQotICAgICwgbV93ZWJJbnNwZWN0b3IoMCkKKyAg
ICA6IG1faW5zcGVjdGVkV2ViVmlldyh3ZWJWaWV3KQoge30KIAogdm9pZCBJbnNwZWN0b3JDbGll
bnQ6Omluc3BlY3RvckRlc3Ryb3llZCgpCiB7Ci0gICAgaWYgKG1fd2ViSW5zcGVjdG9yKQotICAg
ICAgICBnX29iamVjdF91bnJlZihtX3dlYkluc3BlY3Rvcik7Ci0KICAgICBkZWxldGUgdGhpczsK
IH0KIAotdm9pZCBJbnNwZWN0b3JDbGllbnQ6OndlYlZpZXdEZXN0cm95ZWQoKQotewotICAgIG1f
d2ViVmlldyA9IDA7Ci0gICAgY29yZShtX2luc3BlY3RlZFdlYlZpZXcpLT5pbnNwZWN0b3JDb250
cm9sbGVyKCktPnBhZ2VEZXN0cm95ZWQoKTsKLQotICAgIC8vIGNyZWF0ZVBhZ2Ugd2lsbCBiZSBj
YWxsZWQgYWdhaW4sIGlmIHRoZSB1c2VyIGNob29zZXMgdG8gaW5zcGVjdAotICAgIC8vIHNvbWV0
aGluZyBlbHNlLCBhbmQgdGhlIGluc3BlY3RvciB3aWxsIGJlIHJlZmVyZW5jZWQgYWdhaW4sCi0g
ICAgLy8gdGhlcmUuCi0gICAgZ19vYmplY3RfdW5yZWYobV93ZWJJbnNwZWN0b3IpOwotICAgIG1f
d2ViSW5zcGVjdG9yID0gMDsKLX0KLQotUGFnZSogSW5zcGVjdG9yQ2xpZW50OjpjcmVhdGVQYWdl
KCkKK3ZvaWQgSW5zcGVjdG9yQ2xpZW50OjpvcGVuSW5zcGVjdG9yRnJvbnRlbmQoSW5zcGVjdG9y
Q29udHJvbGxlciogY29udHJvbGxlcikKIHsKLSAgICBpZiAobV93ZWJWaWV3KSB7Ci0gICAgICAg
IGdib29sZWFuIGhhbmRsZWQgPSBGQUxTRTsKLSAgICAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1l
KG1fd2ViSW5zcGVjdG9yLCAiZGVzdHJveSIsICZoYW5kbGVkKTsKLQotICAgICAgICAvKiB3ZSBj
YW4gbm93IGRpc3Bvc2Ugb3VyIG93biByZWZlcmVuY2UgKi8KLSAgICAgICAgZ19vYmplY3RfdW5y
ZWYobV93ZWJJbnNwZWN0b3IpOwotICAgIH0KLQogICAgIC8vIFRoaXMgZ19vYmplY3RfZ2V0IHdp
bGwgcmVmIHRoZSBpbnNwZWN0b3IuIFdlJ3JlIG5vdCBkb2luZyBhbgogICAgIC8vIHVucmVmIGlm
IHRoaXMgbWV0aG9kIHN1Y2NlZWRzIGJlY2F1c2UgdGhlIGluc3BlY3RvciBvYmplY3QgbXVzdAog
ICAgIC8vIGJlIGFsaXZlIGV2ZW4gYWZ0ZXIgdGhlIGluc3BlY3RlZCBXZWJWaWV3IGlzIGRlc3Ry
b3llZCAtIHRoZQogICAgIC8vIGNsb3NlLXdpbmRvdyBhbmQgZGVzdHJveSBzaWduYWxzIHN0aWxs
IG5lZWQgdG8gYmUKICAgICAvLyBlbWl0dGVkLgotICAgIFdlYktpdFdlYkluc3BlY3Rvciogd2Vi
SW5zcGVjdG9yOworICAgIFdlYktpdFdlYkluc3BlY3Rvciogd2ViSW5zcGVjdG9yID0gMDsKICAg
ICBnX29iamVjdF9nZXQobV9pbnNwZWN0ZWRXZWJWaWV3LCAid2ViLWluc3BlY3RvciIsICZ3ZWJJ
bnNwZWN0b3IsIE5VTEwpOwotICAgIG1fd2ViSW5zcGVjdG9yID0gd2ViSW5zcGVjdG9yOworICAg
IEFTU0VSVCh3ZWJJbnNwZWN0b3IpOwogCi0gICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fd2Vi
SW5zcGVjdG9yLCAiaW5zcGVjdC13ZWItdmlldyIsIG1faW5zcGVjdGVkV2ViVmlldywgJm1fd2Vi
Vmlldyk7CisgICAgV2ViS2l0V2ViVmlldyogaW5zcGVjdG9yV2ViVmlldyA9IDA7CisgICAgZ19z
aWduYWxfZW1pdF9ieV9uYW1lKHdlYkluc3BlY3RvciwgImluc3BlY3Qtd2ViLXZpZXciLCBtX2lu
c3BlY3RlZFdlYlZpZXcsICZpbnNwZWN0b3JXZWJWaWV3KTsKIAotICAgIGlmICghbV93ZWJWaWV3
KSB7Ci0gICAgICAgIGdfb2JqZWN0X3VucmVmKG1fd2ViSW5zcGVjdG9yKTsKLSAgICAgICAgcmV0
dXJuIDA7CisgICAgaWYgKCFpbnNwZWN0b3JXZWJWaWV3KSB7CisgICAgICAgIGdfb2JqZWN0X3Vu
cmVmKHdlYkluc3BlY3Rvcik7CisgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICB3ZWJraXRf
d2ViX2luc3BlY3Rvcl9zZXRfd2ViX3ZpZXcobV93ZWJJbnNwZWN0b3IsIG1fd2ViVmlldyk7Ci0K
LSAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgImRlc3Ryb3kiLAotICAgICAgICAgICAg
ICAgICAgICAgR19DQUxMQkFDSyhub3RpZnlXZWJWaWV3RGVzdHJveWVkKSwgKGdwb2ludGVyKXRo
aXMpOworICAgIHdlYmtpdF93ZWJfaW5zcGVjdG9yX3NldF93ZWJfdmlldyh3ZWJJbnNwZWN0b3Is
IGluc3BlY3RvcldlYlZpZXcpOwogCiAgICAgR093blB0cjxnY2hhcj4gaW5zcGVjdG9yVVJJOwog
CkBAIC0xMDMsMTQgKzc2LDczIEBAIFBhZ2UqIEluc3BlY3RvckNsaWVudDo6Y3JlYXRlUGFnZSgp
CiAgICAgfSBlbHNlCiAgICAgICAgIGluc3BlY3RvclVSSS5zZXQoZ19maWxlbmFtZV90b191cmko
REFUQV9ESVIiL3dlYmtpdC0xLjAvd2ViaW5zcGVjdG9yL2luc3BlY3Rvci5odG1sIiwgTlVMTCwg
TlVMTCkpOwogCi0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKG1fd2ViVmlldywgaW5zcGVj
dG9yVVJJLmdldCgpKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkoaW5zcGVjdG9yV2Vi
VmlldywgaW5zcGVjdG9yVVJJLmdldCgpKTsKKworICAgIGd0a193aWRnZXRfc2hvdyhHVEtfV0lE
R0VUKGluc3BlY3RvcldlYlZpZXcpKTsKKworICAgIFBhZ2UqIGluc3BlY3RvclBhZ2UgPSBjb3Jl
KGluc3BlY3RvcldlYlZpZXcpOworICAgIGluc3BlY3RvclBhZ2UtPmluc3BlY3RvckNvbnRyb2xs
ZXIoKS0+c2V0SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQobmV3IEluc3BlY3RvckZyb250ZW5kQ2xp
ZW50KG1faW5zcGVjdGVkV2ViVmlldywgaW5zcGVjdG9yV2ViVmlldywgd2ViSW5zcGVjdG9yLCBp
bnNwZWN0b3JQYWdlKSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ2xpZW50OjpoaWdobGlnaHQoTm9k
ZSogbm9kZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEluc3BlY3RvckNs
aWVudDo6aGlkZUhpZ2hsaWdodCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9p
ZCBJbnNwZWN0b3JDbGllbnQ6OnBvcHVsYXRlU2V0dGluZyhjb25zdCBTdHJpbmcmIGtleSwgU3Ry
aW5nKiB2YWx1ZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEluc3BlY3Rv
ckNsaWVudDo6c3RvcmVTZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZh
bHVlKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKKworYm9vbCBkZXN0cm95ZWQgPSBU
UlVFOworCitJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQo
V2ViS2l0V2ViVmlldyogaW5zcGVjdGVkV2ViVmlldywgV2ViS2l0V2ViVmlldyogaW5zcGVjdG9y
V2ViVmlldywgV2ViS2l0V2ViSW5zcGVjdG9yKiB3ZWJJbnNwZWN0b3IsIFBhZ2UqIGluc3BlY3Rv
clBhZ2UpCisgICAgOiBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsKGNvcmUoaW5zcGVjdGVk
V2ViVmlldyktPmluc3BlY3RvckNvbnRyb2xsZXIoKSwgaW5zcGVjdG9yUGFnZSkKKyAgICAsIG1f
aW5zcGVjdG9yV2ViVmlldyhpbnNwZWN0b3JXZWJWaWV3KQorICAgICwgbV9pbnNwZWN0ZWRXZWJW
aWV3KGluc3BlY3RlZFdlYlZpZXcpCisgICAgLCBtX3dlYkluc3BlY3Rvcih3ZWJJbnNwZWN0b3Ip
Cit7CisgICAgZ19zaWduYWxfY29ubmVjdChtX2luc3BlY3RvcldlYlZpZXcsICJkZXN0cm95IiwK
KyAgICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0sobm90aWZ5V2ViVmlld0Rlc3Ryb3llZCks
IChncG9pbnRlcil0aGlzKTsKK30KKworSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6On5JbnNwZWN0
b3JGcm9udGVuZENsaWVudCgpCit7CisgICAgQVNTRVJUKCFtX3dlYkluc3BlY3Rvcik7Cit9CisK
K3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmRlc3Ryb3lJbnNwZWN0b3JXaW5kb3coKQor
eworICAgIGlmICghbV93ZWJJbnNwZWN0b3IpCisgICAgICAgIHJldHVybjsKKyAgICBXZWJLaXRX
ZWJJbnNwZWN0b3IqIHdlYkluc3BlY3RvciA9IG1fd2ViSW5zcGVjdG9yOworICAgIG1fd2ViSW5z
cGVjdG9yID0gMDsKKworICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyht
X2luc3BlY3RvcldlYlZpZXcsIChncG9pbnRlcilub3RpZnlXZWJWaWV3RGVzdHJveWVkLCAoZ3Bv
aW50ZXIpdGhpcyk7CisgICAgbV9pbnNwZWN0b3JXZWJWaWV3ID0gMDsKKworICAgIGNvcmUobV9p
bnNwZWN0ZWRXZWJWaWV3KS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5jbG9zZSgpOwogCi0gICAg
Z3RrX3dpZGdldF9zaG93KEdUS19XSURHRVQobV93ZWJWaWV3KSk7CisgICAgZ2Jvb2xlYW4gaGFu
ZGxlZCA9IEZBTFNFOworICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZSh3ZWJJbnNwZWN0b3IsICJj
bG9zZS13aW5kb3ciLCAmaGFuZGxlZCk7CisgICAgQVNTRVJUKGhhbmRsZWQpOwogCi0gICAgcmV0
dXJuIGNvcmUobV93ZWJWaWV3KTsKKyAgICAvKiB3ZSBzaG91bGQgbm93IGRpc3Bvc2Ugb3VyIG93
biByZWZlcmVuY2UgKi8KKyAgICBnX29iamVjdF91bnJlZih3ZWJJbnNwZWN0b3IpOwogfQogCi1T
dHJpbmcgSW5zcGVjdG9yQ2xpZW50Ojpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkKK1N0cmluZyBJbnNw
ZWN0b3JGcm9udGVuZENsaWVudDo6bG9jYWxpemVkU3RyaW5nc1VSTCgpCiB7CiAgICAgR093blB0
cjxnY2hhcj4gVVJMOwogCkBAIC0xMjYsODkgKzE1OCw1NiBAQCBTdHJpbmcgSW5zcGVjdG9yQ2xp
ZW50Ojpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkKICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChV
UkwuZ2V0KCkpOwogfQogCi1TdHJpbmcgSW5zcGVjdG9yQ2xpZW50OjpoaWRkZW5QYW5lbHMoKQor
U3RyaW5nIEluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpoaWRkZW5QYW5lbHMoKQogewogICAgIG5v
dEltcGxlbWVudGVkKCk7CiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCi12b2lkIEluc3BlY3Rv
ckNsaWVudDo6c2hvd1dpbmRvdygpCit2b2lkIEluc3BlY3RvckZyb250ZW5kQ2xpZW50Ojpicmlu
Z1RvRnJvbnQoKQogewotICAgIGlmICghbV93ZWJWaWV3KQorICAgIGlmICghbV9pbnNwZWN0b3JX
ZWJWaWV3KQogICAgICAgICByZXR1cm47CiAKICAgICBnYm9vbGVhbiBoYW5kbGVkID0gRkFMU0U7
CiAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fd2ViSW5zcGVjdG9yLCAic2hvdy13aW5kb3ci
LCAmaGFuZGxlZCk7Ci0KLSAgICBjb3JlKG1faW5zcGVjdGVkV2ViVmlldyktPmluc3BlY3RvckNv
bnRyb2xsZXIoKS0+c2V0V2luZG93VmlzaWJsZSh0cnVlKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JD
bGllbnQ6OmNsb3NlV2luZG93KCkKK3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmNsb3Nl
V2luZG93KCkKIHsKLSAgICBpZiAoIW1fd2ViVmlldykKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Z2Jvb2xlYW4gaGFuZGxlZCA9IEZBTFNFOwotICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX3dl
Ykluc3BlY3RvciwgImNsb3NlLXdpbmRvdyIsICZoYW5kbGVkKTsKLQotICAgIGNvcmUobV9pbnNw
ZWN0ZWRXZWJWaWV3KS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5zZXRXaW5kb3dWaXNpYmxlKGZh
bHNlKTsKKyAgICBkZXN0cm95SW5zcGVjdG9yV2luZG93KCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
Q2xpZW50OjphdHRhY2hXaW5kb3coKQordm9pZCBJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6YXR0
YWNoV2luZG93KCkKIHsKLSAgICBpZiAoIW1fd2ViVmlldykKKyAgICBpZiAoIW1faW5zcGVjdG9y
V2ViVmlldykKICAgICAgICAgcmV0dXJuOwogCiAgICAgZ2Jvb2xlYW4gaGFuZGxlZCA9IEZBTFNF
OwogICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX3dlYkluc3BlY3RvciwgImF0dGFjaC13aW5k
b3ciLCAmaGFuZGxlZCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ2xpZW50OjpkZXRhY2hXaW5kb3co
KQordm9pZCBJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6ZGV0YWNoV2luZG93KCkKIHsKLSAgICBp
ZiAoIW1fd2ViVmlldykKKyAgICBpZiAoIW1faW5zcGVjdG9yV2ViVmlldykKICAgICAgICAgcmV0
dXJuOwogCiAgICAgZ2Jvb2xlYW4gaGFuZGxlZCA9IEZBTFNFOwogICAgIGdfc2lnbmFsX2VtaXRf
YnlfbmFtZShtX3dlYkluc3BlY3RvciwgImRldGFjaC13aW5kb3ciLCAmaGFuZGxlZCk7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yQ2xpZW50OjpzZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBo
ZWlnaHQpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDbGll
bnQ6OmhpZ2hsaWdodChOb2RlKiBub2RlKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0K
LXZvaWQgSW5zcGVjdG9yQ2xpZW50OjpoaWRlSGlnaGxpZ2h0KCkKK3ZvaWQgSW5zcGVjdG9yRnJv
bnRlbmRDbGllbnQ6OnNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkKIHsK
ICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIEluc3BlY3RvckNsaWVudDo6aW5zcGVj
dGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIG5ld1VSTCkKK3ZvaWQgSW5zcGVjdG9yRnJvbnRl
bmRDbGllbnQ6Omluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJiBuZXdVUkwpCiB7Ci0g
ICAgaWYgKCFtX3dlYlZpZXcpCisgICAgaWYgKCFtX2luc3BlY3RvcldlYlZpZXcpCiAgICAgICAg
IHJldHVybjsKIAogICAgIHdlYmtpdF93ZWJfaW5zcGVjdG9yX3NldF9pbnNwZWN0ZWRfdXJpKG1f
d2ViSW5zcGVjdG9yLCBuZXdVUkwudXRmOCgpLmRhdGEoKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
Q2xpZW50OjppbnNwZWN0b3JXaW5kb3dPYmplY3RDbGVhcmVkKCkKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotfQotCi12b2lkIEluc3BlY3RvckNsaWVudDo6cG9wdWxhdGVTZXR0aW5nKGNvbnN0
IFN0cmluZyYga2V5LCBTdHJpbmcqIHZhbHVlKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLXZvaWQgSW5zcGVjdG9yQ2xpZW50OjpzdG9yZVNldHRpbmcoY29uc3QgU3RyaW5nJiBrZXks
IGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQogfQog
CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudEd0
ay5oIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRHdGsuaAppbmRl
eCAyOTdmZDhmLi5jZGI1Mzc1IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0
L0luc3BlY3RvckNsaWVudEd0ay5oCisrKyBiL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvSW5z
cGVjdG9yQ2xpZW50R3RrLmgKQEAgLTMwLDYgKzMwLDcgQEAKICNkZWZpbmUgSW5zcGVjdG9yQ2xp
ZW50R3RrX2gKIAogI2luY2x1ZGUgIkluc3BlY3RvckNsaWVudC5oIgorI2luY2x1ZGUgIkluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50TG9jYWwuaCIKICNpbmNsdWRlICJ3ZWJraXR3ZWJ2aWV3LmgiCiAj
aW5jbHVkZSAid2Via2l0d2ViaW5zcGVjdG9yLmgiCiAKQEAgLTQ2LDE1ICs0NywzMCBAQCBuYW1l
c3BhY2UgV2ViS2l0IHsKICAgICAgICAgSW5zcGVjdG9yQ2xpZW50KFdlYktpdFdlYlZpZXcqIHdl
YlZpZXcpOwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0b3JEZXN0cm95ZWQoKTsKLSAg
ICAgICAgdm9pZCB3ZWJWaWV3RGVzdHJveWVkKCk7CiAKLSAgICAgICAgdmlydHVhbCBXZWJDb3Jl
OjpQYWdlKiBjcmVhdGVQYWdlKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBvcGVuSW5zcGVjdG9y
RnJvbnRlbmQoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlciopOworCisgICAgICAgIHZpcnR1
YWwgdm9pZCBoaWdobGlnaHQoV2ViQ29yZTo6Tm9kZSopOworICAgICAgICB2aXJ0dWFsIHZvaWQg
aGlkZUhpZ2hsaWdodCgpOworCisgICAgICAgIHZpcnR1YWwgdm9pZCBwb3B1bGF0ZVNldHRpbmco
Y29uc3QgV2ViQ29yZTo6U3RyaW5nJiBrZXksIFdlYkNvcmU6OlN0cmluZyogdmFsdWUpOworICAg
ICAgICB2aXJ0dWFsIHZvaWQgc3RvcmVTZXR0aW5nKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYga2V5
LCBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIHZhbHVlKTsKKworICAgIHByaXZhdGU6CisgICAgICAg
IFdlYktpdFdlYlZpZXcqIG1faW5zcGVjdGVkV2ViVmlldzsKKyAgICB9OworCisgICAgY2xhc3Mg
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQgOiBwdWJsaWMgV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRl
bmRDbGllbnRMb2NhbCB7CisgICAgcHVibGljOgorICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENs
aWVudChXZWJLaXRXZWJWaWV3KiBpbnNwZWN0ZWRXZWJWaWV3LCBXZWJLaXRXZWJWaWV3KiBpbnNw
ZWN0b3JXZWJWaWV3LCBXZWJLaXRXZWJJbnNwZWN0b3IqIHdlYkluc3BlY3RvciwgV2ViQ29yZTo6
UGFnZSogaW5zcGVjdG9yUGFnZSk7CisKKyAgICAgICAgdm9pZCBkZXN0cm95SW5zcGVjdG9yV2lu
ZG93KCk7CiAKICAgICAgICAgdmlydHVhbCBXZWJDb3JlOjpTdHJpbmcgbG9jYWxpemVkU3RyaW5n
c1VSTCgpOwogCiAgICAgICAgIHZpcnR1YWwgV2ViQ29yZTo6U3RyaW5nIGhpZGRlblBhbmVscygp
OwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBzaG93V2luZG93KCk7CisgICAgICAgIHZpcnR1YWwg
dm9pZCBicmluZ1RvRnJvbnQoKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGNsb3NlV2luZG93KCk7
CiAKICAgICAgICAgdmlydHVhbCB2b2lkIGF0dGFjaFdpbmRvdygpOwpAQCAtNjIsMTcgKzc4LDEy
IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRBdHRhY2hl
ZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBo
aWdobGlnaHQoV2ViQ29yZTo6Tm9kZSopOwotICAgICAgICB2aXJ0dWFsIHZvaWQgaGlkZUhpZ2hs
aWdodCgpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgaW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBX
ZWJDb3JlOjpTdHJpbmcmIG5ld1VSTCk7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIHBvcHVsYXRl
U2V0dGluZyhjb25zdCBXZWJDb3JlOjpTdHJpbmcmIGtleSwgV2ViQ29yZTo6U3RyaW5nKiB2YWx1
ZSk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzdG9yZVNldHRpbmcoY29uc3QgV2ViQ29yZTo6U3Ry
aW5nJiBrZXksIGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgdmFsdWUpOwotCi0gICAgICAgIHZpcnR1
YWwgdm9pZCBpbnNwZWN0b3JXaW5kb3dPYmplY3RDbGVhcmVkKCk7Ci0KICAgICBwcml2YXRlOgot
ICAgICAgICBXZWJLaXRXZWJWaWV3KiBtX3dlYlZpZXc7CisgICAgICAgIHZpcnR1YWwgfkluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50KCk7CisKKyAgICAgICAgV2ViS2l0V2ViVmlldyogbV9pbnNwZWN0
b3JXZWJWaWV3OwogICAgICAgICBXZWJLaXRXZWJWaWV3KiBtX2luc3BlY3RlZFdlYlZpZXc7CiAg
ICAgICAgIFdlYktpdFdlYkluc3BlY3RvciogbV93ZWJJbnNwZWN0b3I7CiAgICAgfTsKZGlmZiAt
LWdpdCBhL1dlYktpdC9oYWlrdS9DaGFuZ2VMb2cgYi9XZWJLaXQvaGFpa3UvQ2hhbmdlTG9nCmlu
ZGV4IDBiNTdhNTkuLmM4YTlmZDAgMTAwNjQ0Ci0tLSBhL1dlYktpdC9oYWlrdS9DaGFuZ2VMb2cK
KysrIGIvV2ViS2l0L2hhaWt1L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDEwLTAzLTEw
ICBZdXJ5IFNlbWlraGF0c2t5IDx5dXJ5c0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW50cm9kdWNlIEluc3BlY3RvckZyb250
ZW5kQ2xpZW50IHRoYXQgcHJvdmlkZXMgSW5zcGVjdG9yRnJvbnRlbmQgd2l0aCBhbiBpbnRlcmZh
Y2UgdG8gdGhlIGVtYmVkZGVyLiBJbnNwZWN0b3JDbGllbnQgbm93IHNlcnZlcyBhcyBhIGRlbGVn
YXRlIGZvciBJbnNwZWN0b3JDb250cm9sbGVyIGFuZCBkb2VzIG5vdCBjb250YWluIG1ldGhvZHMg
Zm9yIG1hbmFnaW5nIGluc3BlY3RvciBmcm9udGVuZCB3aW5kb3cuIFRoYXQgYWxsb3dzIHRvIGNy
ZWF0ZSByZW1vdGUgSW5zcGVjdG9yRnJvbnRlbmRIb3N0LgorCisgICAgICAgIEludHJvZHVjZSBJ
bnNwZWN0b3JGcm9udGVuZENsaWVudCB0aGF0IHdvdWxkIHByb3ZpZGUgSW5zcGVjdG9yRnJvbnRl
bmQgd2l0aCBhbiBpbnRlcmZhY2UgdG8gdGhlIGVtYmVkZGVyCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNTAzNgorCisgICAgICAgICogV2ViQ29yZVN1
cHBvcnQvSW5zcGVjdG9yQ2xpZW50SGFpa3UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yQ2xpZW50SGFpa3U6Om9wZW5JbnNwZWN0b3JGcm9udGVuZCk6CisgICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50SGFpa3UuaDoKKwogMjAxMC0wMy0wMiAgQWRhbSBUcmVh
dCAgPGF0cmVhdEByaW0uY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmUgSHlhdHQuCmRp
ZmYgLS1naXQgYS9XZWJLaXQvaGFpa3UvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50SGFp
a3UuY3BwIGIvV2ViS2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudEhhaWt1
LmNwcAppbmRleCBmMDZlOTZiLi41OTIzMmU5IDEwMDY0NAotLS0gYS9XZWJLaXQvaGFpa3UvV2Vi
Q29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50SGFpa3UuY3BwCisrKyBiL1dlYktpdC9oYWlrdS9X
ZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRIYWlrdS5jcHAKQEAgLTQyLDQ1ICs0Miw3IEBA
IHZvaWQgSW5zcGVjdG9yQ2xpZW50SGFpa3U6Omluc3BlY3RvckRlc3Ryb3llZCgpCiAgICAgbm90
SW1wbGVtZW50ZWQoKTsKIH0KIAotUGFnZSogSW5zcGVjdG9yQ2xpZW50SGFpa3U6OmNyZWF0ZVBh
Z2UoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLVN0cmlu
ZyBJbnNwZWN0b3JDbGllbnRIYWlrdTo6bG9jYWxpemVkU3RyaW5nc1VSTCgpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBJbnNwZWN0
b3JDbGllbnRIYWlrdTo6aGlkZGVuUGFuZWxzKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
ICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDbGllbnRIYWlrdTo6c2hv
d1dpbmRvdygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JD
bGllbnRIYWlrdTo6Y2xvc2VXaW5kb3coKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0K
LXZvaWQgSW5zcGVjdG9yQ2xpZW50SGFpa3U6OmF0dGFjaFdpbmRvdygpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDbGllbnRIYWlrdTo6ZGV0YWNoV2luZG93
KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEluc3BlY3RvckNsaWVudEhh
aWt1OjpzZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpCit2b2lkIEluc3Bl
Y3RvckNsaWVudEhhaWt1OjpvcGVuSW5zcGVjdG9yRnJvbnRlbmQoV2ViQ29yZTo6SW5zcGVjdG9y
Q29udHJvbGxlciopCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KQEAgLTk1LDE2ICs1Nyw2
IEBAIHZvaWQgSW5zcGVjdG9yQ2xpZW50SGFpa3U6OmhpZGVIaWdobGlnaHQoKQogICAgIG5vdElt
cGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ2xpZW50SGFpa3U6Omluc3BlY3RlZFVS
TENoYW5nZWQoY29uc3QgU3RyaW5nJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12
b2lkIEluc3BlY3RvckNsaWVudEhhaWt1OjppbnNwZWN0b3JXaW5kb3dPYmplY3RDbGVhcmVkKCkK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCiB2b2lkIEluc3BlY3RvckNsaWVudEhhaWt1
Ojpwb3B1bGF0ZVNldHRpbmcoY29uc3QgU3RyaW5nJiBrZXksIFN0cmluZyogdmFsdWUpCiB7CiAg
ICAgbm90SW1wbGVtZW50ZWQoKTsKZGlmZiAtLWdpdCBhL1dlYktpdC9oYWlrdS9XZWJDb3JlU3Vw
cG9ydC9JbnNwZWN0b3JDbGllbnRIYWlrdS5oIGIvV2ViS2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0
L0luc3BlY3RvckNsaWVudEhhaWt1LmgKaW5kZXggODc4OGE1Zi4uZDQyNzY3MCAxMDA2NDQKLS0t
IGEvV2ViS2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudEhhaWt1LmgKKysr
IGIvV2ViS2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudEhhaWt1LmgKQEAg
LTQyLDI5ICs0MiwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgcHVibGljOgogICAgICAg
ICB2aXJ0dWFsIHZvaWQgaW5zcGVjdG9yRGVzdHJveWVkKCk7CiAKLSAgICAgICAgdmlydHVhbCBQ
YWdlKiBjcmVhdGVQYWdlKCk7Ci0KLSAgICAgICAgdmlydHVhbCBTdHJpbmcgbG9jYWxpemVkU3Ry
aW5nc1VSTCgpOwotCi0gICAgICAgIHZpcnR1YWwgU3RyaW5nIGhpZGRlblBhbmVscygpOwotCi0g
ICAgICAgIHZpcnR1YWwgdm9pZCBzaG93V2luZG93KCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBj
bG9zZVdpbmRvdygpOwotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hXaW5kb3coKTsKLSAg
ICAgICAgdmlydHVhbCB2b2lkIGRldGFjaFdpbmRvdygpOwotCi0gICAgICAgIHZpcnR1YWwgdm9p
ZCBzZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpOworICAgICAgICB2aXJ0
dWFsIHZvaWQgb3Blbkluc3BlY3RvckZyb250ZW5kKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xs
ZXIqKTsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgaGlnaGxpZ2h0KE5vZGUqKTsKICAgICAgICAg
dmlydHVhbCB2b2lkIGhpZGVIaWdobGlnaHQoKTsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgaW5z
cGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIG5ld1VSTCk7Ci0KICAgICAgICAgdmlydHVh
bCB2b2lkIHBvcHVsYXRlU2V0dGluZyhjb25zdCBXZWJDb3JlOjpTdHJpbmcmIGtleSwgV2ViQ29y
ZTo6U3RyaW5nKiB2YWx1ZSk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdG9yZVNldHRpbmcoY29u
c3QgV2ViQ29yZTo6U3RyaW5nJiBrZXksIGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgdmFsdWUpOwot
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0b3JXaW5kb3dPYmplY3RDbGVhcmVkKCk7CiAg
ICAgfTsKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvV2ViS2l0L21hYy9D
aGFuZ2VMb2cgYi9XZWJLaXQvbWFjL0NoYW5nZUxvZwppbmRleCAwNjg4MDg4Li4xYTUxMGViIDEw
MDY0NAotLS0gYS9XZWJLaXQvbWFjL0NoYW5nZUxvZworKysgYi9XZWJLaXQvbWFjL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDQ5IEBACisyMDEwLTAzLTExICBZdXJ5IFNlbWlraGF0c2t5IDx5dXJ5c0Bj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgSW50cm9kdWNlIEluc3BlY3RvckZyb250ZW5kQ2xpZW50IHRoYXQgcHJvdmlkZXMgSW5z
cGVjdG9yRnJvbnRlbmQgd2l0aCBhbiBpbnRlcmZhY2UgdG8gdGhlIGVtYmVkZGVyLiBJbnNwZWN0
b3JDbGllbnQgbm93IHNlcnZlcyBhcyBhIGRlbGVnYXRlIGZvciBJbnNwZWN0b3JDb250cm9sbGVy
IGFuZCBkb2VzIG5vdCBjb250YWluIG1ldGhvZHMgZm9yIG1hbmFnaW5nIGluc3BlY3RvciBmcm9u
dGVuZCB3aW5kb3cuIFRoYXQgYWxsb3dzIHRvIGNyZWF0ZSByZW1vdGUgSW5zcGVjdG9yRnJvbnRl
bmRIb3N0LgorCisgICAgICAgIEludHJvZHVjZSBJbnNwZWN0b3JGcm9udGVuZENsaWVudCB0aGF0
IHdvdWxkIHByb3ZpZGUgSW5zcGVjdG9yRnJvbnRlbmQgd2l0aCBhbiBpbnRlcmZhY2UgdG8gdGhl
IGVtYmVkZGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0zNTAzNgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50Lmg6
CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50Lm1tOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yQ2xpZW50OjpXZWJJbnNwZWN0b3JDbGllbnQpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yQ2xpZW50OjppbnNwZWN0b3JEZXN0cm95ZWQpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yQ2xpZW50OjpvcGVuSW5zcGVjdG9yRnJvbnRlbmQpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
Q2xpZW50OjpoaWdobGlnaHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yQ2xpZW50OjpoaWRlSGln
aGxpZ2h0KToKKyAgICAgICAgKFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpXZWJJbnNwZWN0
b3JGcm9udGVuZENsaWVudCk6CisgICAgICAgIChXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6
ZnJvbnRlbmRMb2FkZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6Omxv
Y2FsaXplZFN0cmluZ3NVUkwpOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6
OmhpZGRlblBhbmVscyk6CisgICAgICAgIChXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6YnJp
bmdUb0Zyb250KToKKyAgICAgICAgKFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpjbG9zZVdp
bmRvdyk6CisgICAgICAgIChXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6YXR0YWNoV2luZG93
KToKKyAgICAgICAgKFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpkZXRhY2hXaW5kb3cpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OnNldEF0dGFjaGVkV2luZG93SGVp
Z2h0KToKKyAgICAgICAgKFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjppbnNwZWN0ZWRVUkxD
aGFuZ2VkKToKKyAgICAgICAgKFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50Ojp1cGRhdGVXaW5k
b3dUaXRsZSk6CisgICAgICAgICgtW1dlYkluc3BlY3RvcldpbmRvd0NvbnRyb2xsZXIgZGVhbGxv
Y10pOgorICAgICAgICAoLVtXZWJJbnNwZWN0b3JXaW5kb3dDb250cm9sbGVyIHdpbmRvd1Nob3Vs
ZENsb3NlOl0pOgorICAgICAgICAoLVtXZWJJbnNwZWN0b3JXaW5kb3dDb250cm9sbGVyIGNsb3Nl
XSk6CisgICAgICAgICgtW1dlYkluc3BlY3RvcldpbmRvd0NvbnRyb2xsZXIgc2hvd1dpbmRvdzpd
KToKKyAgICAgICAgKC1bV2ViSW5zcGVjdG9yV2luZG93Q29udHJvbGxlciBhdHRhY2hdKToKKyAg
ICAgICAgKC1bV2ViSW5zcGVjdG9yV2luZG93Q29udHJvbGxlciBkZXRhY2hdKToKKyAgICAgICAg
KC1bV2ViSW5zcGVjdG9yV2luZG93Q29udHJvbGxlciBhdHRhY2hlZF0pOgorICAgICAgICAoLVtX
ZWJJbnNwZWN0b3JXaW5kb3dDb250cm9sbGVyIHNldEZyb250ZW5kQ2xpZW50Ol0pOgorICAgICAg
ICAoLVtXZWJJbnNwZWN0b3JXaW5kb3dDb250cm9sbGVyIGRlc3Ryb3lJbnNwZWN0b3JWaWV3XSk6
CisgICAgICAgICgtW1dlYk5vZGVIaWdobGlnaHRlciBpbml0V2l0aEluc3BlY3RlZFdlYlZpZXc6
XSk6CisgICAgICAgICgtW1dlYk5vZGVIaWdobGlnaHRlciBkZWFsbG9jXSk6CisgICAgICAgICgt
W1dlYk5vZGVIaWdobGlnaHRlciBoaWdobGlnaHROb2RlOl0pOgorICAgICAgICAoLVtXZWJOb2Rl
SGlnaGxpZ2h0ZXIgaGlkZUhpZ2hsaWdodF0pOgorICAgICAgICAoLVtXZWJOb2RlSGlnaGxpZ2h0
ZXIgZGlkQXR0YWNoV2ViTm9kZUhpZ2hsaWdodDpdKToKKyAgICAgICAgKC1bV2ViTm9kZUhpZ2hs
aWdodGVyIHdpbGxEZXRhY2hXZWJOb2RlSGlnaGxpZ2h0Ol0pOgorICAgICAgICAqIFdlYkluc3Bl
Y3Rvci9XZWJJbnNwZWN0b3IubW06CisgICAgICAgICgtW1dlYkluc3BlY3RvciBhdHRhY2g6XSk6
CisgICAgICAgICgtW1dlYkluc3BlY3RvciBkZXRhY2g6XSk6CisKIDIwMTAtMDMtMTAgIFNpbW9u
IEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
RGFyaW4gQWRsZXIuCmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYklu
c3BlY3RvckNsaWVudC5oIGIvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JD
bGllbnQuaAppbmRleCA2NDYyMWY4Li5lZTgxYjI1IDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL1dl
YkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5oCisrKyBiL1dlYktpdC9tYWMvV2ViQ29y
ZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmgKQEAgLTI3LDE1ICsyNywxOCBAQAogICovCiAK
ICNpbXBvcnQgPFdlYkNvcmUvSW5zcGVjdG9yQ2xpZW50Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0lu
c3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1T
dHJpbmcuaD4KIAogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogCiAjaWZkZWYgX19PQkpDX18K
IEBjbGFzcyBXZWJJbnNwZWN0b3JXaW5kb3dDb250cm9sbGVyOworQGNsYXNzIFdlYk5vZGVIaWdo
bGlnaHRlcjsKIEBjbGFzcyBXZWJWaWV3OwogI2Vsc2UKIGNsYXNzIFdlYkluc3BlY3RvcldpbmRv
d0NvbnRyb2xsZXI7CitjbGFzcyBXZWJOb2RlSGlnaGxpZ2h0ZXI7CiBjbGFzcyBXZWJWaWV3Owog
I2VuZGlmCiAKQEAgLTQ1LDMyICs0OCw0MSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQg
aW5zcGVjdG9yRGVzdHJveWVkKCk7CiAKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlBhZ2UqIGNyZWF0
ZVBhZ2UoKTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlN0cmluZyBsb2NhbGl6ZWRTdHJpbmdzVVJM
KCk7Ci0KLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlN0cmluZyBoaWRkZW5QYW5lbHMoKTsKLQotICAg
IHZpcnR1YWwgdm9pZCBzaG93V2luZG93KCk7Ci0gICAgdmlydHVhbCB2b2lkIGNsb3NlV2luZG93
KCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoV2luZG93KCk7Ci0gICAgdmlydHVhbCB2b2lk
IGRldGFjaFdpbmRvdygpOwotCi0gICAgdmlydHVhbCB2b2lkIHNldEF0dGFjaGVkV2luZG93SGVp
Z2h0KHVuc2lnbmVkIGhlaWdodCk7CisgICAgdmlydHVhbCB2b2lkIG9wZW5JbnNwZWN0b3JGcm9u
dGVuZChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyKik7CiAKICAgICB2aXJ0dWFsIHZvaWQg
aGlnaGxpZ2h0KFdlYkNvcmU6Ok5vZGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgaGlkZUhpZ2hsaWdo
dCgpOwotICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6
OlN0cmluZyYgbmV3VVJMKTsKIAogICAgIHZpcnR1YWwgdm9pZCBwb3B1bGF0ZVNldHRpbmcoY29u
c3QgV2ViQ29yZTo6U3RyaW5nJiBrZXksIFdlYkNvcmU6OlN0cmluZyogdmFsdWUpOwogICAgIHZp
cnR1YWwgdm9pZCBzdG9yZVNldHRpbmcoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBrZXksIGNvbnN0
IFdlYkNvcmU6OlN0cmluZyYgdmFsdWUpOwogCi0gICAgdmlydHVhbCB2b2lkIGluc3BlY3Rvcldp
bmRvd09iamVjdENsZWFyZWQoKTsKK3ByaXZhdGU6CisgICAgV2ViVmlldyAqbV93ZWJWaWV3Owor
ICAgIFJldGFpblB0cjxXZWJOb2RlSGlnaGxpZ2h0ZXI+IG1faGlnaGxpZ2h0ZXI7Cit9OworCitj
bGFzcyBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudCA6IHB1YmxpYyBXZWJDb3JlOjpJbnNwZWN0
b3JGcm9udGVuZENsaWVudExvY2FsIHsKK3B1YmxpYzoKKyAgICBXZWJJbnNwZWN0b3JGcm9udGVu
ZENsaWVudChXZWJWaWV3KiwgV2ViSW5zcGVjdG9yV2luZG93Q29udHJvbGxlciosIFdlYkNvcmU6
Okluc3BlY3RvckNvbnRyb2xsZXIqLCBXZWJDb3JlOjpQYWdlKik7CisKKyAgICB2aXJ0dWFsIHZv
aWQgZnJvbnRlbmRMb2FkZWQoKTsKKyAgICAKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OlN0cmluZyBs
b2NhbGl6ZWRTdHJpbmdzVVJMKCk7CisgICAgdmlydHVhbCBXZWJDb3JlOjpTdHJpbmcgaGlkZGVu
UGFuZWxzKCk7CisgICAgCisgICAgdmlydHVhbCB2b2lkIGJyaW5nVG9Gcm9udCgpOworICAgIHZp
cnR1YWwgdm9pZCBjbG9zZVdpbmRvdygpOworICAgIAorICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hX
aW5kb3coKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoV2luZG93KCk7CisgICAgCisgICAgdmly
dHVhbCB2b2lkIHNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCk7CisgICAg
dmlydHVhbCB2b2lkIGluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBu
ZXdVUkwpOwogCiBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRlV2luZG93VGl0bGUoKSBjb25zdDsK
IAotICAgIFdlYlZpZXcgKm1fd2ViVmlldzsKKyAgICBXZWJWaWV3KiBtX2luc3BlY3RlZFdlYlZp
ZXc7CiAgICAgUmV0YWluUHRyPFdlYkluc3BlY3RvcldpbmRvd0NvbnRyb2xsZXI+IG1fd2luZG93
Q29udHJvbGxlcjsKICAgICBXZWJDb3JlOjpTdHJpbmcgbV9pbnNwZWN0ZWRVUkw7CiB9OwpkaWZm
IC0tZ2l0IGEvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQubW0g
Yi9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5tbQppbmRleCBj
NWYxNzI5Li5hYmM2ZTYwIDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dl
Ykluc3BlY3RvckNsaWVudC5tbQorKysgYi9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYklu
c3BlY3RvckNsaWVudC5tbQpAQCAtNDEsNiArNDEsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9QYWdl
Lmg+CiAjaW1wb3J0IDxXZWJLaXQvRE9NRXh0ZW5zaW9ucy5oPgogI2ltcG9ydCA8V2ViS2l0U3lz
dGVtSW50ZXJmYWNlLmg+CisjaW1wb3J0IDx3dGYvUGFzc093blB0ci5oPgogCiB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKIApAQCAtNDgsNDUgKzQ5LDkwIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwogQHByaXZhdGUKICAgICBXZWJWaWV3ICpfaW5zcGVjdGVkV2ViVmlldzsKICAgICBXZWJW
aWV3ICpfd2ViVmlldzsKLSAgICBXZWJOb2RlSGlnaGxpZ2h0ICpfY3VycmVudEhpZ2hsaWdodDsK
KyAgICBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudCogX2Zyb250ZW5kQ2xpZW50OwogICAgIEJP
T0wgX2F0dGFjaGVkVG9JbnNwZWN0ZWRXZWJWaWV3OwogICAgIEJPT0wgX3Nob3VsZEF0dGFjaDsK
ICAgICBCT09MIF92aXNpYmxlOwotICAgIEJPT0wgX21vdmluZ1dpbmRvd3M7CisgICAgQk9PTCBf
ZGVzdHJveWluZ0luc3BlY3RvclZpZXc7CiB9CiAtIChpZClpbml0V2l0aEluc3BlY3RlZFdlYlZp
ZXc6KFdlYlZpZXcgKil3ZWJWaWV3OwotLSAoQk9PTClpbnNwZWN0b3JWaXNpYmxlOwogLSAoV2Vi
VmlldyAqKXdlYlZpZXc7CiAtICh2b2lkKWF0dGFjaDsKIC0gKHZvaWQpZGV0YWNoOworLSAoQk9P
TClhdHRhY2hlZDsKKy0gKHZvaWQpc2V0RnJvbnRlbmRDbGllbnQ6KFdlYkluc3BlY3RvckZyb250
ZW5kQ2xpZW50Kilmcm9udGVuZENsaWVudDsKIC0gKHZvaWQpc2V0QXR0YWNoZWRXaW5kb3dIZWln
aHQ6KHVuc2lnbmVkKWhlaWdodDsKKy0gKHZvaWQpZGVzdHJveUluc3BlY3RvclZpZXc7CitAZW5k
CisKKyNwcmFnbWEgbWFyayAtCisKK0BpbnRlcmZhY2UgV2ViTm9kZUhpZ2hsaWdodGVyIDogTlNP
YmplY3QgeworQHByaXZhdGUKKyAgICBXZWJWaWV3ICpfaW5zcGVjdGVkV2ViVmlldzsKKyAgICBX
ZWJOb2RlSGlnaGxpZ2h0ICpfY3VycmVudEhpZ2hsaWdodDsKK30KKy0gKGlkKWluaXRXaXRoSW5z
cGVjdGVkV2ViVmlldzooV2ViVmlldyAqKXdlYlZpZXc7CiAtICh2b2lkKWhpZ2hsaWdodE5vZGU6
KERPTU5vZGUgKilub2RlOwogLSAodm9pZCloaWRlSGlnaGxpZ2h0OwogQGVuZAogCiAjcHJhZ21h
IG1hcmsgLQogCisKIFdlYkluc3BlY3RvckNsaWVudDo6V2ViSW5zcGVjdG9yQ2xpZW50KFdlYlZp
ZXcgKndlYlZpZXcpCiA6IG1fd2ViVmlldyh3ZWJWaWV3KQorLCBtX2hpZ2hsaWdodGVyKEFkb3B0
TlMsIFtbV2ViTm9kZUhpZ2hsaWdodGVyIGFsbG9jXSBpbml0V2l0aEluc3BlY3RlZFdlYlZpZXc6
d2ViVmlld10pCiB7CiB9CiAKIHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjppbnNwZWN0b3JEZXN0
cm95ZWQoKQogewotICAgIFtbbV93aW5kb3dDb250cm9sbGVyLmdldCgpIHdlYlZpZXddIGNsb3Nl
XTsKICAgICBkZWxldGUgdGhpczsKIH0KIAotUGFnZSogV2ViSW5zcGVjdG9yQ2xpZW50OjpjcmVh
dGVQYWdlKCkKK3ZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpvcGVuSW5zcGVjdG9yRnJvbnRlbmQo
SW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlcikKK3sKKyAgICBSZXRhaW5Q
dHI8V2ViSW5zcGVjdG9yV2luZG93Q29udHJvbGxlcj4gd2luZG93Q29udHJvbGxlcihBZG9wdE5T
LCBbW1dlYkluc3BlY3RvcldpbmRvd0NvbnRyb2xsZXIgYWxsb2NdIGluaXRXaXRoSW5zcGVjdGVk
V2ViVmlldzptX3dlYlZpZXddKTsKKyAgICBQYWdlKiBmcm9udGVuZFBhZ2UgPSBjb3JlKFt3aW5k
b3dDb250cm9sbGVyLmdldCgpIHdlYlZpZXddKTsKKworICAgIGZyb250ZW5kUGFnZS0+aW5zcGVj
dG9yQ29udHJvbGxlcigpLT5zZXRJbnNwZWN0b3JGcm9udGVuZENsaWVudChuZXcgV2ViSW5zcGVj
dG9yRnJvbnRlbmRDbGllbnQobV93ZWJWaWV3LCB3aW5kb3dDb250cm9sbGVyLmdldCgpLCBpbnNw
ZWN0b3JDb250cm9sbGVyLCBmcm9udGVuZFBhZ2UpKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JD
bGllbnQ6OmhpZ2hsaWdodChOb2RlKiBub2RlKQoreworICAgIFttX2hpZ2hsaWdodGVyLmdldCgp
IGhpZ2hsaWdodE5vZGU6a2l0KG5vZGUpXTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6
OmhpZGVIaWdobGlnaHQoKQogewotICAgIGlmIChtX3dpbmRvd0NvbnRyb2xsZXIpCi0gICAgICAg
IFtbbV93aW5kb3dDb250cm9sbGVyLmdldCgpIHdlYlZpZXddIGNsb3NlXTsKLSAgICBtX3dpbmRv
d0NvbnRyb2xsZXIuYWRvcHROUyhbW1dlYkluc3BlY3RvcldpbmRvd0NvbnRyb2xsZXIgYWxsb2Nd
IGluaXRXaXRoSW5zcGVjdGVkV2ViVmlldzptX3dlYlZpZXddKTsKKyAgICBbbV9oaWdobGlnaHRl
ci5nZXQoKSBoaWRlSGlnaGxpZ2h0XTsKK30KIAotICAgIHJldHVybiBjb3JlKFttX3dpbmRvd0Nv
bnRyb2xsZXIuZ2V0KCkgd2ViVmlld10pOworV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6Oldl
Ykluc3BlY3RvckZyb250ZW5kQ2xpZW50KFdlYlZpZXcqIGluc3BlY3RlZFdlYlZpZXcsIFdlYklu
c3BlY3RvcldpbmRvd0NvbnRyb2xsZXIqIHdpbmRvd0NvbnRyb2xsZXIsIEluc3BlY3RvckNvbnRy
b2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIsIFBhZ2UqIGZyb250ZW5kUGFnZSkKKyAgICA6IElu
c3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwoaW5zcGVjdG9yQ29udHJvbGxlciwgIGZyb250ZW5k
UGFnZSkKKyAgICAsIG1faW5zcGVjdGVkV2ViVmlldyhpbnNwZWN0ZWRXZWJWaWV3KQorICAgICwg
bV93aW5kb3dDb250cm9sbGVyKHdpbmRvd0NvbnRyb2xsZXIpCit7CisgICAgW3dpbmRvd0NvbnRy
b2xsZXIgc2V0RnJvbnRlbmRDbGllbnQ6dGhpc107CiB9CiAKLVN0cmluZyBXZWJJbnNwZWN0b3JD
bGllbnQ6OmxvY2FsaXplZFN0cmluZ3NVUkwoKQordm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZENs
aWVudDo6ZnJvbnRlbmRMb2FkZWQoKQoreworICAgIEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9j
YWw6OmZyb250ZW5kTG9hZGVkKCk7CisKKyAgICBXZWJGcmFtZSAqZnJhbWUgPSBbbV9pbnNwZWN0
ZWRXZWJWaWV3IG1haW5GcmFtZV07CisgICAgCisgICAgV2ViRnJhbWVMb2FkRGVsZWdhdGVJbXBs
ZW1lbnRhdGlvbkNhY2hlKiBpbXBsZW1lbnRhdGlvbnMgPSBXZWJWaWV3R2V0RnJhbWVMb2FkRGVs
ZWdhdGVJbXBsZW1lbnRhdGlvbnMobV9pbnNwZWN0ZWRXZWJWaWV3KTsKKyAgICBpZiAoaW1wbGVt
ZW50YXRpb25zLT5kaWRDbGVhckluc3BlY3RvcldpbmRvd09iamVjdEZvckZyYW1lRnVuYykKKyAg
ICAgICAgQ2FsbEZyYW1lTG9hZERlbGVnYXRlKGltcGxlbWVudGF0aW9ucy0+ZGlkQ2xlYXJJbnNw
ZWN0b3JXaW5kb3dPYmplY3RGb3JGcmFtZUZ1bmMsIG1faW5zcGVjdGVkV2ViVmlldywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEBzZWxlY3Rvcih3ZWJWaWV3OmRpZENsZWFySW5zcGVj
dG9yV2luZG93T2JqZWN0OmZvckZyYW1lOiksIFtmcmFtZSB3aW5kb3dPYmplY3RdLCBmcmFtZSk7
CisKKyAgICBib29sIGF0dGFjaGVkID0gW21fd2luZG93Q29udHJvbGxlci5nZXQoKSBhdHRhY2hl
ZF07CisgICAgc2V0QXR0YWNoZWRXaW5kb3coYXR0YWNoZWQpOworfQorCitTdHJpbmcgV2ViSW5z
cGVjdG9yRnJvbnRlbmRDbGllbnQ6OmxvY2FsaXplZFN0cmluZ3NVUkwoKQogewogICAgIE5TU3Ry
aW5nICpwYXRoID0gW1tOU0J1bmRsZSBidW5kbGVXaXRoSWRlbnRpZmllcjpAImNvbS5hcHBsZS5X
ZWJDb3JlIl0gcGF0aEZvclJlc291cmNlOkAibG9jYWxpemVkU3RyaW5ncyIgb2ZUeXBlOkAianMi
XTsKICAgICBpZiAocGF0aCkKQEAgLTk0LDcgKzE0MCw3IEBAIFN0cmluZyBXZWJJbnNwZWN0b3JD
bGllbnQ6OmxvY2FsaXplZFN0cmluZ3NVUkwoKQogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAot
U3RyaW5nIFdlYkluc3BlY3RvckNsaWVudDo6aGlkZGVuUGFuZWxzKCkKK1N0cmluZyBXZWJJbnNw
ZWN0b3JGcm9udGVuZENsaWVudDo6aGlkZGVuUGFuZWxzKCkKIHsKICAgICBOU1N0cmluZyAqaGlk
ZGVuUGFuZWxzID0gW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gc3RyaW5n
Rm9yS2V5OkAiV2ViS2l0SW5zcGVjdG9ySGlkZGVuUGFuZWxzIl07CiAgICAgaWYgKGhpZGRlblBh
bmVscykKQEAgLTEwMiw2MyArMTQ4LDQ1IEBAIFN0cmluZyBXZWJJbnNwZWN0b3JDbGllbnQ6Omhp
ZGRlblBhbmVscygpCiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCi12b2lkIFdlYkluc3BlY3Rv
ckNsaWVudDo6c2hvd1dpbmRvdygpCit2b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50Ojpi
cmluZ1RvRnJvbnQoKQogewogICAgIHVwZGF0ZVdpbmRvd1RpdGxlKCk7CiAgICAgW21fd2luZG93
Q29udHJvbGxlci5nZXQoKSBzaG93V2luZG93Om5pbF07CiB9CiAKLXZvaWQgV2ViSW5zcGVjdG9y
Q2xpZW50OjpjbG9zZVdpbmRvdygpCit2b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50Ojpj
bG9zZVdpbmRvdygpCiB7Ci0gICAgW21fd2luZG93Q29udHJvbGxlci5nZXQoKSBjbG9zZV07Cisg
ICAgW21fd2luZG93Q29udHJvbGxlci5nZXQoKSBkZXN0cm95SW5zcGVjdG9yVmlld107CiB9CiAK
LXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjphdHRhY2hXaW5kb3coKQordm9pZCBXZWJJbnNwZWN0
b3JGcm9udGVuZENsaWVudDo6YXR0YWNoV2luZG93KCkKIHsKICAgICBbbV93aW5kb3dDb250cm9s
bGVyLmdldCgpIGF0dGFjaF07CisgICAgcmVzdG9yZUF0dGFjaGVkV2luZG93SGVpZ2h0KCk7CiB9
CiAKLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpkZXRhY2hXaW5kb3coKQordm9pZCBXZWJJbnNw
ZWN0b3JGcm9udGVuZENsaWVudDo6ZGV0YWNoV2luZG93KCkKIHsKICAgICBbbV93aW5kb3dDb250
cm9sbGVyLmdldCgpIGRldGFjaF07CiB9CiAKLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpzZXRB
dHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpCit2b2lkIFdlYkluc3BlY3RvckZy
b250ZW5kQ2xpZW50OjpzZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpCiB7
CiAgICAgW21fd2luZG93Q29udHJvbGxlci5nZXQoKSBzZXRBdHRhY2hlZFdpbmRvd0hlaWdodDpo
ZWlnaHRdOwogfQogCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6aGlnaGxpZ2h0KE5vZGUqIG5v
ZGUpCi17Ci0gICAgW21fd2luZG93Q29udHJvbGxlci5nZXQoKSBoaWdobGlnaHROb2RlOmtpdChu
b2RlKV07Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpoaWRlSGlnaGxpZ2h0KCkKLXsK
LSAgICBbbV93aW5kb3dDb250cm9sbGVyLmdldCgpIGhpZGVIaWdobGlnaHRdOwotfQotCi12b2lk
IFdlYkluc3BlY3RvckNsaWVudDo6aW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIG5l
d1VSTCkKK3ZvaWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6Omluc3BlY3RlZFVSTENoYW5n
ZWQoY29uc3QgU3RyaW5nJiBuZXdVUkwpCiB7CiAgICAgbV9pbnNwZWN0ZWRVUkwgPSBuZXdVUkw7
CiAgICAgdXBkYXRlV2luZG93VGl0bGUoKTsKIH0KIAotdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6
OnVwZGF0ZVdpbmRvd1RpdGxlKCkgY29uc3QKK3ZvaWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGll
bnQ6OnVwZGF0ZVdpbmRvd1RpdGxlKCkgY29uc3QKIHsKICAgICBOU1N0cmluZyAqdGl0bGUgPSBb
TlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpVSV9TVFJJTkcoIldlYiBJbnNwZWN0b3Ig4oCUICVA
IiwgIldlYiBJbnNwZWN0b3Igd2luZG93IHRpdGxlIiksIChOU1N0cmluZyAqKW1faW5zcGVjdGVk
VVJMXTsKICAgICBbW21fd2luZG93Q29udHJvbGxlci5nZXQoKSB3aW5kb3ddIHNldFRpdGxlOnRp
dGxlXTsKIH0KIAotdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6Omluc3BlY3RvcldpbmRvd09iamVj
dENsZWFyZWQoKQotewotICAgIFdlYkZyYW1lICpmcmFtZSA9IFttX3dlYlZpZXcgbWFpbkZyYW1l
XTsKLSAgICAKLSAgICBXZWJGcmFtZUxvYWREZWxlZ2F0ZUltcGxlbWVudGF0aW9uQ2FjaGUqIGlt
cGxlbWVudGF0aW9ucyA9IFdlYlZpZXdHZXRGcmFtZUxvYWREZWxlZ2F0ZUltcGxlbWVudGF0aW9u
cyhtX3dlYlZpZXcpOwotICAgIGlmIChpbXBsZW1lbnRhdGlvbnMtPmRpZENsZWFySW5zcGVjdG9y
V2luZG93T2JqZWN0Rm9yRnJhbWVGdW5jKQotICAgICAgICBDYWxsRnJhbWVMb2FkRGVsZWdhdGUo
aW1wbGVtZW50YXRpb25zLT5kaWRDbGVhckluc3BlY3RvcldpbmRvd09iamVjdEZvckZyYW1lRnVu
YywgbV93ZWJWaWV3LAotICAgICAgICAgIEBzZWxlY3Rvcih3ZWJWaWV3OmRpZENsZWFySW5zcGVj
dG9yV2luZG93T2JqZWN0OmZvckZyYW1lOiksIFtmcmFtZSB3aW5kb3dPYmplY3RdLCBmcmFtZSk7
Ci19CiAKICNwcmFnbWEgbWFyayAtCiAKQEAgLTIyMSwxOCArMjQ5LDEyIEBAIHZvaWQgV2ViSW5z
cGVjdG9yQ2xpZW50OjppbnNwZWN0b3JXaW5kb3dPYmplY3RDbGVhcmVkKCkKIAogLSAodm9pZClk
ZWFsbG9jCiB7Ci0gICAgQVNTRVJUKCFfY3VycmVudEhpZ2hsaWdodCk7CiAgICAgW193ZWJWaWV3
IHJlbGVhc2VdOwogICAgIFtzdXBlciBkZWFsbG9jXTsKIH0KIAogI3ByYWdtYSBtYXJrIC0KIAot
LSAoQk9PTClpbnNwZWN0b3JWaXNpYmxlCi17Ci0gICAgcmV0dXJuIF92aXNpYmxlOwotfQotCiAt
IChXZWJWaWV3ICopd2ViVmlldwogewogICAgIHJldHVybiBfd2ViVmlldzsKQEAgLTI3MSwxMSAr
MjkzLDcgQEAgdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6Omluc3BlY3RvcldpbmRvd09iamVjdENs
ZWFyZWQoKQogCiAtIChCT09MKXdpbmRvd1Nob3VsZENsb3NlOihpZClzZW5kZXIKIHsKLSAgICBf
dmlzaWJsZSA9IE5POwotCi0gICAgW19pbnNwZWN0ZWRXZWJWaWV3IHBhZ2VdLT5pbnNwZWN0b3JD
b250cm9sbGVyKCktPnNldFdpbmRvd1Zpc2libGUoZmFsc2UpOwotCi0gICAgW3NlbGYgaGlkZUhp
Z2hsaWdodF07CisgICAgW3NlbGYgZGVzdHJveUluc3BlY3RvclZpZXddOwogCiAgICAgcmV0dXJu
IFlFUzsKIH0KQEAgLTI4NywxMSArMzA1LDYgQEAgdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6Omlu
c3BlY3RvcldpbmRvd09iamVjdENsZWFyZWQoKQogCiAgICAgX3Zpc2libGUgPSBOTzsKIAotICAg
IGlmICghX21vdmluZ1dpbmRvd3MpCi0gICAgICAgIFtfaW5zcGVjdGVkV2ViVmlldyBwYWdlXS0+
aW5zcGVjdG9yQ29udHJvbGxlcigpLT5zZXRXaW5kb3dWaXNpYmxlKGZhbHNlKTsKLQotICAgIFtz
ZWxmIGhpZGVIaWdobGlnaHRdOwotCiAgICAgaWYgKF9hdHRhY2hlZFRvSW5zcGVjdGVkV2ViVmll
dykgewogICAgICAgICBpZiAoW19pbnNwZWN0ZWRXZWJWaWV3IF9pc0Nsb3NlZF0pCiAgICAgICAg
ICAgICByZXR1cm47CkBAIC0zMjgsNyArMzQxLDcgQEAgdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6
Omluc3BlY3RvcldpbmRvd09iamVjdENsZWFyZWQoKQogICAgIFN0cmluZyBzaG91bGRBdHRhY2gg
PSBbX2luc3BlY3RlZFdlYlZpZXcgcGFnZV0tPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0dGlu
ZyhJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0b3JTdGFydHNBdHRhY2hlZFNldHRpbmdOYW1l
KCkpOwogICAgIF9zaG91bGRBdHRhY2ggPSBzaG91bGRBdHRhY2ggIT0gImZhbHNlIjsKICAgICAK
LSAgICBpZiAoX3Nob3VsZEF0dGFjaCAmJiAhW19pbnNwZWN0ZWRXZWJWaWV3IHBhZ2VdLT5pbnNw
ZWN0b3JDb250cm9sbGVyKCktPmNhbkF0dGFjaFdpbmRvdygpKQorICAgIGlmIChfc2hvdWxkQXR0
YWNoICYmICFfZnJvbnRlbmRDbGllbnQtPmNhbkF0dGFjaFdpbmRvdygpKQogICAgICAgICBfc2hv
dWxkQXR0YWNoID0gTk87CiAKICAgICBpZiAoX3Nob3VsZEF0dGFjaCkgewpAQCAtMzUyLDggKzM2
NSw2IEBAIHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjppbnNwZWN0b3JXaW5kb3dPYmplY3RDbGVh
cmVkKCkKIAogICAgICAgICBbc3VwZXIgc2hvd1dpbmRvdzpuaWxdOwogICAgIH0KLQotICAgIFtf
aW5zcGVjdGVkV2ViVmlldyBwYWdlXS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5zZXRXaW5kb3dW
aXNpYmxlKHRydWUsIF9zaG91bGRBdHRhY2gpOwogfQogCiAjcHJhZ21hIG1hcmsgLQpAQCAtMzY0
LDEyICszNzUsOSBAQCB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6aW5zcGVjdG9yV2luZG93T2Jq
ZWN0Q2xlYXJlZCgpCiAgICAgICAgIHJldHVybjsKIAogICAgIFtfaW5zcGVjdGVkV2ViVmlldyBw
YWdlXS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5zZXRTZXR0aW5nKEluc3BlY3RvckNvbnRyb2xs
ZXI6Omluc3BlY3RvclN0YXJ0c0F0dGFjaGVkU2V0dGluZ05hbWUoKSwgInRydWUiKTsKLSAgICBf
bW92aW5nV2luZG93cyA9IFlFUzsKIAogICAgIFtzZWxmIGNsb3NlXTsKICAgICBbc2VsZiBzaG93
V2luZG93Om5pbF07Ci0KLSAgICBfbW92aW5nV2luZG93cyA9IE5POwogfQogCiAtICh2b2lkKWRl
dGFjaApAQCAtMzc4LDEzICszODYsMTkgQEAgdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6Omluc3Bl
Y3RvcldpbmRvd09iamVjdENsZWFyZWQoKQogICAgICAgICByZXR1cm47CiAKICAgICBbX2luc3Bl
Y3RlZFdlYlZpZXcgcGFnZV0tPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0U2V0dGluZyhJbnNw
ZWN0b3JDb250cm9sbGVyOjppbnNwZWN0b3JTdGFydHNBdHRhY2hlZFNldHRpbmdOYW1lKCksICJm
YWxzZSIpOwotICAgIF9tb3ZpbmdXaW5kb3dzID0gWUVTOwogCiAgICAgW3NlbGYgY2xvc2VdOwog
ICAgIFtzZWxmIHNob3dXaW5kb3c6bmlsXTsKK30KIAotICAgIF9tb3ZpbmdXaW5kb3dzID0gTk87
CistIChCT09MKWF0dGFjaGVkCit7CisgICAgcmV0dXJuIF9hdHRhY2hlZFRvSW5zcGVjdGVkV2Vi
VmlldzsKK30KIAorLSAodm9pZClzZXRGcm9udGVuZENsaWVudDooV2ViSW5zcGVjdG9yRnJvbnRl
bmRDbGllbnQqKWZyb250ZW5kQ2xpZW50Cit7CisgICAgX2Zyb250ZW5kQ2xpZW50ID0gZnJvbnRl
bmRDbGllbnQ7CiB9CiAKIC0gKHZvaWQpc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQ6KHVuc2lnbmVk
KWhlaWdodApAQCAtNDA1LDI5ICs0MTksMTcgQEAgdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6Omlu
c3BlY3RvcldpbmRvd09iamVjdENsZWFyZWQoKQogICAgIFtmcmFtZVZpZXcgc2V0RnJhbWU6ZnJh
bWVWaWV3UmVjdF07CiB9CiAKLSNwcmFnbWEgbWFyayAtCi0KLS0gKHZvaWQpaGlnaGxpZ2h0Tm9k
ZTooRE9NTm9kZSAqKW5vZGUKKy0gKHZvaWQpZGVzdHJveUluc3BlY3RvclZpZXcKIHsKLSAgICAv
LyBUaGUgc2Nyb2xsdmlldydzIGNvbnRlbnQgdmlldyBzdGF5cyBhcm91bmQgYmV0d2VlbiBwYWdl
IG5hdmlnYXRpb25zLCBzbyB0YXJnZXQgaXQKLSAgICBOU1ZpZXcgKnZpZXcgPSBbW1tbW19pbnNw
ZWN0ZWRXZWJWaWV3IG1haW5GcmFtZV0gZnJhbWVWaWV3XSBkb2N1bWVudFZpZXddIGVuY2xvc2lu
Z1Njcm9sbFZpZXddIGNvbnRlbnRWaWV3XTsKLSAgICBpZiAoIVt2aWV3IHdpbmRvd10pCi0gICAg
ICAgIHJldHVybjsgLy8gc2tpcCB0aGUgaGlnaGxpZ2h0IGlmIHdlIGhhdmUgbm8gd2luZG93IChl
LmcuIGhpZGRlbiB0YWIpCi0KLSAgICBpZiAoIV9jdXJyZW50SGlnaGxpZ2h0KSB7Ci0gICAgICAg
IF9jdXJyZW50SGlnaGxpZ2h0ID0gW1tXZWJOb2RlSGlnaGxpZ2h0IGFsbG9jXSBpbml0V2l0aFRh
cmdldFZpZXc6dmlldyBpbnNwZWN0b3JDb250cm9sbGVyOltfaW5zcGVjdGVkV2ViVmlldyBwYWdl
XS0+aW5zcGVjdG9yQ29udHJvbGxlcigpXTsKLSAgICAgICAgW19jdXJyZW50SGlnaGxpZ2h0IHNl
dERlbGVnYXRlOnNlbGZdOwotICAgICAgICBbX2N1cnJlbnRIaWdobGlnaHQgYXR0YWNoXTsKLSAg
ICB9IGVsc2UKLSAgICAgICAgW1tfY3VycmVudEhpZ2hsaWdodCBoaWdobGlnaHRWaWV3XSBzZXRO
ZWVkc0Rpc3BsYXk6WUVTXTsKLX0KKyAgICBpZiAoX2Rlc3Ryb3lpbmdJbnNwZWN0b3JWaWV3KQor
ICAgICAgICByZXR1cm47CisgICAgX2Rlc3Ryb3lpbmdJbnNwZWN0b3JWaWV3ID0gWUVTOwogCi0t
ICh2b2lkKWhpZGVIaWdobGlnaHQKLXsKLSAgICBbX2N1cnJlbnRIaWdobGlnaHQgZGV0YWNoXTsK
LSAgICBbX2N1cnJlbnRIaWdobGlnaHQgc2V0RGVsZWdhdGU6bmlsXTsKLSAgICBbX2N1cnJlbnRI
aWdobGlnaHQgcmVsZWFzZV07Ci0gICAgX2N1cnJlbnRIaWdobGlnaHQgPSBuaWw7CisgICAgaWYg
KF9hdHRhY2hlZFRvSW5zcGVjdGVkV2ViVmlldykKKyAgICAgICAgW3NlbGYgY2xvc2VdOworICAg
IF92aXNpYmxlID0gTk87CisgICAgW19pbnNwZWN0ZWRXZWJWaWV3IHBhZ2VdLT5pbnNwZWN0b3JD
b250cm9sbGVyKCktPmNsb3NlKCk7CisgICAgW193ZWJWaWV3IGNsb3NlXTsKIH0KIAogI3ByYWdt
YSBtYXJrIC0KQEAgLTQ5NywzICs0OTksNjAgQEAgdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6Omlu
c3BlY3RvcldpbmRvd09iamVjdENsZWFyZWQoKQogfQogCiBAZW5kCisKKworI3ByYWdtYSBtYXJr
IC0KKworQGltcGxlbWVudGF0aW9uIFdlYk5vZGVIaWdobGlnaHRlcgorLSAoaWQpaW5pdFdpdGhJ
bnNwZWN0ZWRXZWJWaWV3OihXZWJWaWV3ICopd2ViVmlldworeworICAgIC8vIERvbid0IHJldGFp
biB0byBhdm9pZCBhIGNpcmN1bGFyIHJlZmVyZW5jZQorICAgIF9pbnNwZWN0ZWRXZWJWaWV3ID0g
d2ViVmlldzsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAg
QVNTRVJUKCFfY3VycmVudEhpZ2hsaWdodCk7CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCisj
cHJhZ21hIG1hcmsgLQorCistICh2b2lkKWhpZ2hsaWdodE5vZGU6KERPTU5vZGUgKilub2RlCit7
CisgICAgLy8gVGhlIHNjcm9sbHZpZXcncyBjb250ZW50IHZpZXcgc3RheXMgYXJvdW5kIGJldHdl
ZW4gcGFnZSBuYXZpZ2F0aW9ucywgc28gdGFyZ2V0IGl0CisgICAgTlNWaWV3ICp2aWV3ID0gW1tb
W1tfaW5zcGVjdGVkV2ViVmlldyBtYWluRnJhbWVdIGZyYW1lVmlld10gZG9jdW1lbnRWaWV3XSBl
bmNsb3NpbmdTY3JvbGxWaWV3XSBjb250ZW50Vmlld107CisgICAgaWYgKCFbdmlldyB3aW5kb3dd
KQorICAgICAgICByZXR1cm47IC8vIHNraXAgdGhlIGhpZ2hsaWdodCBpZiB3ZSBoYXZlIG5vIHdp
bmRvdyAoZS5nLiBoaWRkZW4gdGFiKQorICAgIAorICAgIGlmICghX2N1cnJlbnRIaWdobGlnaHQp
IHsKKyAgICAgICAgX2N1cnJlbnRIaWdobGlnaHQgPSBbW1dlYk5vZGVIaWdobGlnaHQgYWxsb2Nd
IGluaXRXaXRoVGFyZ2V0Vmlldzp2aWV3IGluc3BlY3RvckNvbnRyb2xsZXI6W19pbnNwZWN0ZWRX
ZWJWaWV3IHBhZ2VdLT5pbnNwZWN0b3JDb250cm9sbGVyKCldOworICAgICAgICBbX2N1cnJlbnRI
aWdobGlnaHQgc2V0RGVsZWdhdGU6c2VsZl07CisgICAgICAgIFtfY3VycmVudEhpZ2hsaWdodCBh
dHRhY2hdOworICAgIH0gZWxzZQorICAgICAgICBbW19jdXJyZW50SGlnaGxpZ2h0IGhpZ2hsaWdo
dFZpZXddIHNldE5lZWRzRGlzcGxheTpZRVNdOworfQorCistICh2b2lkKWhpZGVIaWdobGlnaHQK
K3sKKyAgICBbX2N1cnJlbnRIaWdobGlnaHQgZGV0YWNoXTsKKyAgICBbX2N1cnJlbnRIaWdobGln
aHQgc2V0RGVsZWdhdGU6bmlsXTsKKyAgICBbX2N1cnJlbnRIaWdobGlnaHQgcmVsZWFzZV07Cisg
ICAgX2N1cnJlbnRIaWdobGlnaHQgPSBuaWw7Cit9CisKKyNwcmFnbWEgbWFyayAtCisjcHJhZ21h
IG1hcmsgV2ViTm9kZUhpZ2hsaWdodCBkZWxlZ2F0ZQorCistICh2b2lkKWRpZEF0dGFjaFdlYk5v
ZGVIaWdobGlnaHQ6KFdlYk5vZGVIaWdobGlnaHQgKiloaWdobGlnaHQKK3sKKyAgICBbX2luc3Bl
Y3RlZFdlYlZpZXcgc2V0Q3VycmVudE5vZGVIaWdobGlnaHQ6aGlnaGxpZ2h0XTsKK30KKworLSAo
dm9pZCl3aWxsRGV0YWNoV2ViTm9kZUhpZ2hsaWdodDooV2ViTm9kZUhpZ2hsaWdodCAqKWhpZ2hs
aWdodAoreworICAgIFtfaW5zcGVjdGVkV2ViVmlldyBzZXRDdXJyZW50Tm9kZUhpZ2hsaWdodDpu
aWxdOworfQorICAgIAorQGVuZApkaWZmIC0tZ2l0IGEvV2ViS2l0L21hYy9XZWJJbnNwZWN0b3Iv
V2ViSW5zcGVjdG9yLm1tIGIvV2ViS2l0L21hYy9XZWJJbnNwZWN0b3IvV2ViSW5zcGVjdG9yLm1t
CmluZGV4IDI1OGRkMDEuLjliMTc0NTkgMTAwNjQ0Ci0tLSBhL1dlYktpdC9tYWMvV2ViSW5zcGVj
dG9yL1dlYkluc3BlY3Rvci5tbQorKysgYi9XZWJLaXQvbWFjL1dlYkluc3BlY3Rvci9XZWJJbnNw
ZWN0b3IubW0KQEAgLTE3NSwxNCArMTc1LDEwIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwog
CiAtICh2b2lkKWF0dGFjaDooaWQpc2VuZGVyCiB7Ci0gICAgaWYgKFBhZ2UqIHBhZ2UgPSBjb3Jl
KF93ZWJWaWV3KSkKLSAgICAgICAgcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5hdHRhY2hX
aW5kb3coKTsKIH0KIAogLSAodm9pZClkZXRhY2g6KGlkKXNlbmRlcgogewotICAgIGlmIChQYWdl
KiBwYWdlID0gY29yZShfd2ViVmlldykpCi0gICAgICAgIHBhZ2UtPmluc3BlY3RvckNvbnRyb2xs
ZXIoKS0+ZGV0YWNoV2luZG93KCk7CiB9CiAKIC0gKHZvaWQpZXZhbHVhdGVJbkZyb250ZW5kOihp
ZClzZW5kZXIgY2FsbElkOihsb25nKWNhbGxJZCBzY3JpcHQ6KE5TU3RyaW5nICopc2NyaXB0CmRp
ZmYgLS1naXQgYS9XZWJLaXQvcXQvQXBpL3F3ZWJpbnNwZWN0b3IuY3BwIGIvV2ViS2l0L3F0L0Fw
aS9xd2ViaW5zcGVjdG9yLmNwcAppbmRleCBjM2VmNTMwLi5jMGU1Mjc3IDEwMDY0NAotLS0gYS9X
ZWJLaXQvcXQvQXBpL3F3ZWJpbnNwZWN0b3IuY3BwCisrKyBiL1dlYktpdC9xdC9BcGkvcXdlYmlu
c3BlY3Rvci5jcHAKQEAgLTE2MSw2ICsxNjEsMTAgQEAgdm9pZCBRV2ViSW5zcGVjdG9yOjpzaG93
RXZlbnQoUVNob3dFdmVudCogZXZlbnQpCiAvKiEgXHJlaW1wICovCiB2b2lkIFFXZWJJbnNwZWN0
b3I6OmhpZGVFdmVudChRSGlkZUV2ZW50KiBldmVudCkKIHsKKyNpZiBFTkFCTEUoSU5TUEVDVE9S
KQorICAgIGlmIChkLT5wYWdlKQorICAgICAgICBkLT5wYWdlLT5kLT5pbnNwZWN0b3JDb250cm9s
bGVyKCktPmNsb3NlKCk7CisjZW5kaWYKIH0KIAogLyohIFxyZWltcCAqLwpAQCAtMTY4LDcgKzE3
Miw3IEBAIHZvaWQgUVdlYkluc3BlY3Rvcjo6Y2xvc2VFdmVudChRQ2xvc2VFdmVudCogZXZlbnQp
CiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKICAgICBpZiAoZC0+cGFnZSkKLSAgICAgICAgZC0+
cGFnZS0+ZC0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5zZXRXaW5kb3dWaXNpYmxlKGZhbHNlKTsK
KyAgICAgICAgZC0+cGFnZS0+ZC0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5jbG9zZSgpOwogI2Vu
ZGlmCiB9CiAKZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9BcGkvcXdlYmluc3BlY3Rvci5oIGIvV2Vi
S2l0L3F0L0FwaS9xd2ViaW5zcGVjdG9yLmgKaW5kZXggNmNkYTQ3OS4uZjE5MmU5MiAxMDA2NDQK
LS0tIGEvV2ViS2l0L3F0L0FwaS9xd2ViaW5zcGVjdG9yLmgKKysrIGIvV2ViS2l0L3F0L0FwaS9x
d2ViaW5zcGVjdG9yLmgKQEAgLTUyLDUgKzUyLDYgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xh
c3MgUVdlYlBhZ2U7CiAgICAgZnJpZW5kIGNsYXNzIFFXZWJQYWdlUHJpdmF0ZTsKICAgICBmcmll
bmQgY2xhc3MgV2ViQ29yZTo6SW5zcGVjdG9yQ2xpZW50UXQ7CisgICAgZnJpZW5kIGNsYXNzIFdl
YkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50UXQ7CiB9OwogI2VuZGlmCmRpZmYgLS1naXQg
YS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmggYi9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmgKaW5k
ZXggNDc2NmNiZC4uMDc2ZmI3YyAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5o
CisrKyBiL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuaApAQCAtNTQsNiArNTQsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgRWRpdG9yQ2xpZW50UXQ7CiAgICAgY2xhc3MgRnJhbWVM
b2FkZXJDbGllbnRRdDsKICAgICBjbGFzcyBJbnNwZWN0b3JDbGllbnRRdDsKKyAgICBjbGFzcyBJ
bnNwZWN0b3JGcm9udGVuZENsaWVudFF0OwogICAgIGNsYXNzIFJlc291cmNlSGFuZGxlOwogICAg
IGNsYXNzIEhpdFRlc3RSZXN1bHQ7CiAgICAgY2xhc3MgUU5ldHdvcmtSZXBseUhhbmRsZXI7CkBA
IC0zNjEsNiArMzYyLDcgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgV2ViQ29yZTo6RWRp
dG9yQ2xpZW50UXQ7CiAgICAgZnJpZW5kIGNsYXNzIFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50
UXQ7CiAgICAgZnJpZW5kIGNsYXNzIFdlYkNvcmU6Okluc3BlY3RvckNsaWVudFF0OworICAgIGZy
aWVuZCBjbGFzcyBXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0OwogICAgIGZyaWVu
ZCBjbGFzcyBXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTsKICAgICBmcmllbmQgY2xhc3MgV2ViQ29y
ZTo6UU5ldHdvcmtSZXBseUhhbmRsZXI7CiB9OwpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L0NoYW5n
ZUxvZyBiL1dlYktpdC9xdC9DaGFuZ2VMb2cKaW5kZXggNGMyZjRlMS4uM2QwN2ExZiAxMDA2NDQK
LS0tIGEvV2ViS2l0L3F0L0NoYW5nZUxvZworKysgYi9XZWJLaXQvcXQvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMzIgQEAKKzIwMTAtMDMtMTEgIFl1cnkgU2VtaWtoYXRza3kgPHl1cnlzQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJ
bnRyb2R1Y2UgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQgdGhhdCBwcm92aWRlcyBJbnNwZWN0b3JG
cm9udGVuZCB3aXRoIGFuIGludGVyZmFjZSB0byB0aGUgZW1iZWRkZXIuIEluc3BlY3RvckNsaWVu
dCBub3cgc2VydmVzIGFzIGEgZGVsZWdhdGUgZm9yIEluc3BlY3RvckNvbnRyb2xsZXIgYW5kIGRv
ZXMgbm90IGNvbnRhaW4gbWV0aG9kcyBmb3IgbWFuYWdpbmcgaW5zcGVjdG9yIGZyb250ZW5kIHdp
bmRvdy4gVGhhdCBhbGxvd3MgdG8gY3JlYXRlIHJlbW90ZSBJbnNwZWN0b3JGcm9udGVuZEhvc3Qu
CisKKyAgICAgICAgSW50cm9kdWNlIEluc3BlY3RvckZyb250ZW5kQ2xpZW50IHRoYXQgd291bGQg
cHJvdmlkZSBJbnNwZWN0b3JGcm9udGVuZCB3aXRoIGFuIGludGVyZmFjZSB0byB0aGUgZW1iZWRk
ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM1MDM2
CisKKyAgICAgICAgKiBBcGkvcXdlYmluc3BlY3Rvci5jcHA6CisgICAgICAgIChRV2ViSW5zcGVj
dG9yOjpoaWRlRXZlbnQpOgorICAgICAgICAoUVdlYkluc3BlY3Rvcjo6Y2xvc2VFdmVudCk6Cisg
ICAgICAgICogQXBpL3F3ZWJpbnNwZWN0b3IuaDoKKyAgICAgICAgKiBBcGkvcXdlYnBhZ2UuaDoK
KyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRRdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JDbGllbnRRdDo6b3Blbkluc3BlY3RvckZyb250ZW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50UXQ6Okluc3BlY3RvckZyb250
ZW5kQ2xpZW50UXQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRR
dDo6ZnJvbnRlbmRMb2FkZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRD
bGllbnRRdDo6bG9jYWxpemVkU3RyaW5nc1VSTCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JGcm9udGVuZENsaWVudFF0OjpoaWRkZW5QYW5lbHMpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yRnJvbnRlbmRDbGllbnRRdDo6YnJpbmdUb0Zyb250KToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckZyb250ZW5kQ2xpZW50UXQ6OmNsb3NlV2luZG93KToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50UXQ6OmF0dGFjaFdpbmRvdyk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0OjpkZXRhY2hXaW5kb3cpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdDo6c2V0QXR0YWNoZWRXaW5kb3dI
ZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdDo6aW5z
cGVjdGVkVVJMQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENs
aWVudFF0Ojp1cGRhdGVXaW5kb3dUaXRsZSk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvSW5z
cGVjdG9yQ2xpZW50UXQuaDoKKwogMjAxMC0wMy0xMCAgUm9iZXJ0IEhvZ2FuICA8cm9iZXJ0QHdl
YmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gSGF1c21hbm4uCmRpZmYgLS1n
aXQgYS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50UXQuY3BwIGIvV2Vi
S2l0L3F0L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudFF0LmNwcAppbmRleCBjZGU2NGM4
Li5jYTlmMTcxIDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9y
Q2xpZW50UXQuY3BwCisrKyBiL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGll
bnRRdC5jcHAKQEAgLTgxLDE1ICs4MSwxMiBAQCB2b2lkIEluc3BlY3RvckNsaWVudFF0OjppbnNw
ZWN0b3JEZXN0cm95ZWQoKQogICAgIGRlbGV0ZSB0aGlzOwogfQogCi1QYWdlKiBJbnNwZWN0b3JD
bGllbnRRdDo6Y3JlYXRlUGFnZSgpCi17Ci0gICAgUVdlYlZpZXcqIGluc3BlY3RvclZpZXcgPSBt
X2luc3BlY3RvclZpZXcuZ2V0KCk7Ci0gICAgaWYgKCFpbnNwZWN0b3JWaWV3KSB7Ci0gICAgICAg
IGluc3BlY3RvclZpZXcgPSBuZXcgUVdlYlZpZXc7Ci0gICAgICAgIEluc3BlY3RvckNsaWVudFdl
YlBhZ2UqIGluc3BlY3RvclBhZ2UgPSBuZXcgSW5zcGVjdG9yQ2xpZW50V2ViUGFnZShpbnNwZWN0
b3JWaWV3KTsKLSAgICAgICAgaW5zcGVjdG9yVmlldy0+c2V0UGFnZShpbnNwZWN0b3JQYWdlKTsK
LSAgICAgICAgbV9pbnNwZWN0b3JWaWV3LnNldChpbnNwZWN0b3JWaWV3KTsKLSAgICB9CisgICAg
Cit2b2lkIEluc3BlY3RvckNsaWVudFF0OjpvcGVuSW5zcGVjdG9yRnJvbnRlbmQoV2ViQ29yZTo6
SW5zcGVjdG9yQ29udHJvbGxlciopCit7CisgICAgUVdlYlZpZXcqIGluc3BlY3RvclZpZXcgPSBu
ZXcgUVdlYlZpZXc7CisgICAgSW5zcGVjdG9yQ2xpZW50V2ViUGFnZSogaW5zcGVjdG9yUGFnZSA9
IG5ldyBJbnNwZWN0b3JDbGllbnRXZWJQYWdlKGluc3BlY3RvclZpZXcpOworICAgIGluc3BlY3Rv
clZpZXctPnNldFBhZ2UoaW5zcGVjdG9yUGFnZSk7CiAKICAgICBRVXJsIGluc3BlY3RvclVybCA9
IG1faW5zcGVjdGVkV2ViUGFnZS0+c2V0dGluZ3MoKS0+aW5zcGVjdG9yVXJsKCk7CiAgICAgaWYg
KCFpbnNwZWN0b3JVcmwuaXNWYWxpZCgpKQpAQCAtOTgsNTAgKzk1LDcgQEAgUGFnZSogSW5zcGVj
dG9yQ2xpZW50UXQ6OmNyZWF0ZVBhZ2UoKQogICAgIG1faW5zcGVjdGVkV2ViUGFnZS0+ZC0+aW5z
cGVjdG9yRnJvbnRlbmQgPSBpbnNwZWN0b3JWaWV3OwogICAgIG1faW5zcGVjdGVkV2ViUGFnZS0+
ZC0+Z2V0T3JDcmVhdGVJbnNwZWN0b3IoKS0+ZC0+c2V0RnJvbnRlbmQoaW5zcGVjdG9yVmlldyk7
CiAKLSAgICByZXR1cm4gaW5zcGVjdG9yVmlldy0+cGFnZSgpLT5kLT5wYWdlOwotfQotCi1TdHJp
bmcgSW5zcGVjdG9yQ2xpZW50UXQ6OmxvY2FsaXplZFN0cmluZ3NVUkwoKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1TdHJpbmcgSW5zcGVjdG9y
Q2xpZW50UXQ6OmhpZGRlblBhbmVscygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBy
ZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ2xpZW50UXQ6OnNob3dXaW5kb3co
KQotewotICAgIHVwZGF0ZVdpbmRvd1RpdGxlKCk7Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SKQot
ICAgIG1faW5zcGVjdGVkV2ViUGFnZS0+ZC0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5zZXRXaW5k
b3dWaXNpYmxlKHRydWUsIHRydWUpOwotI2VuZGlmCi19Ci0KLXZvaWQgSW5zcGVjdG9yQ2xpZW50
UXQ6OmNsb3NlV2luZG93KCkKLXsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIG1faW5zcGVj
dGVkV2ViUGFnZS0+ZC0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5zZXRXaW5kb3dWaXNpYmxlKGZh
bHNlKTsKLSNlbmRpZgotfQotCi12b2lkIEluc3BlY3RvckNsaWVudFF0OjphdHRhY2hXaW5kb3co
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ2xpZW50UXQ6
OmRldGFjaFdpbmRvdygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBJbnNw
ZWN0b3JDbGllbnRRdDo6c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICBpbnNwZWN0b3JWaWV3LT5wYWdlKCktPmQtPnBhZ2UtPmlu
c3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQobmV3IEluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50UXQobV9pbnNwZWN0ZWRXZWJQYWdlLCBpbnNwZWN0b3JWaWV3KSk7
CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ2xpZW50UXQ6OmhpZ2hsaWdodChOb2RlKikKQEAgLTE1NCwy
NSArMTA4LDYgQEAgdm9pZCBJbnNwZWN0b3JDbGllbnRRdDo6aGlkZUhpZ2hsaWdodCgpCiAgICAg
bm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDbGllbnRRdDo6aW5zcGVjdGVk
VVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIG5ld1VSTCkKLXsKLSAgICBtX2luc3BlY3RlZFVSTCA9
IG5ld1VSTDsKLSAgICB1cGRhdGVXaW5kb3dUaXRsZSgpOwotfQotCi12b2lkIEluc3BlY3RvckNs
aWVudFF0OjppbnNwZWN0b3JXaW5kb3dPYmplY3RDbGVhcmVkKCkKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotfQotCi12b2lkIEluc3BlY3RvckNsaWVudFF0Ojp1cGRhdGVXaW5kb3dUaXRsZSgp
Ci17Ci0gICAgaWYgKG1faW5zcGVjdGVkV2ViUGFnZS0+ZC0+aW5zcGVjdG9yKSB7Ci0gICAgICAg
IFFTdHJpbmcgY2FwdGlvbiA9IFFDb3JlQXBwbGljYXRpb246OnRyYW5zbGF0ZSgiUVdlYlBhZ2Ui
LCAiV2ViIEluc3BlY3RvciAtICUyIikuYXJnKG1faW5zcGVjdGVkVVJMKTsKLSAgICAgICAgbV9p
bnNwZWN0ZWRXZWJQYWdlLT5kLT5pbnNwZWN0b3ItPnNldFdpbmRvd1RpdGxlKGNhcHRpb24pOwot
ICAgIH0KLX0KLQogdm9pZCBJbnNwZWN0b3JDbGllbnRRdDo6cG9wdWxhdGVTZXR0aW5nKGNvbnN0
IFN0cmluZyYga2V5LCBTdHJpbmcqIHNldHRpbmcpCiB7CiAgICAgUVNldHRpbmdzIHFzZXR0aW5n
czsKQEAgLTIyNiw2ICsxNjEsODEgQEAgc3RhdGljIFFWYXJpYW50IHNldHRpbmdUb1ZhcmlhbnQo
Y29uc3QgU3RyaW5nJiBzZXR0aW5nKQogICAgIHJldHVybiByZXRWYWw7CiB9CiAKK0luc3BlY3Rv
ckZyb250ZW5kQ2xpZW50UXQ6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50UXQoUVdlYlBhZ2UqIGlu
c3BlY3RlZFdlYlBhZ2UsIFBhc3NPd25QdHI8UVdlYlZpZXc+IGluc3BlY3RvclZpZXcpCisgICAg
OiBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsKGluc3BlY3RlZFdlYlBhZ2UtPmQtPnBhZ2Ut
Pmluc3BlY3RvckNvbnRyb2xsZXIoKSwgaW5zcGVjdG9yVmlldy0+cGFnZSgpLT5kLT5wYWdlKSAK
KyAgICAsIG1faW5zcGVjdGVkV2ViUGFnZShpbnNwZWN0ZWRXZWJQYWdlKQorICAgICwgbV9pbnNw
ZWN0b3JWaWV3KGluc3BlY3RvclZpZXcpCisgICAgLCBtX2Rlc3Ryb3lpbmdJbnNwZWN0b3JWaWV3
KGZhbHNlKQoreworfQorCit2b2lkIEluc3BlY3RvckZyb250ZW5kQ2xpZW50UXQ6OmZyb250ZW5k
TG9hZGVkKCkKK3sKKyAgICBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjpmcm9udGVuZExv
YWRlZCgpOworICAgIHNldEF0dGFjaGVkV2luZG93KHRydWUpOworfQorCitTdHJpbmcgSW5zcGVj
dG9yRnJvbnRlbmRDbGllbnRRdDo6bG9jYWxpemVkU3RyaW5nc1VSTCgpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK1N0cmluZyBJbnNwZWN0b3JG
cm9udGVuZENsaWVudFF0OjpoaWRkZW5QYW5lbHMoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCit2b2lkIEluc3BlY3RvckZyb250ZW5kQ2xpZW50
UXQ6OmJyaW5nVG9Gcm9udCgpCit7CisgICAgdXBkYXRlV2luZG93VGl0bGUoKTsKK30KKwordm9p
ZCBJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0OjpjbG9zZVdpbmRvdygpCit7CisgICAgaWYgKG1f
ZGVzdHJveWluZ0luc3BlY3RvclZpZXcpCisgICAgICAgIHJldHVybjsKKyAgICBtX2Rlc3Ryb3lp
bmdJbnNwZWN0b3JWaWV3ID0gdHJ1ZTsKKworICAgIC8vIENsZWFyIHJlZmVyZW5jZSBmcm9tIFFX
ZWJJbnNwZWN0b3IgdG8gdGhlIGZyb250ZW5kIHZpZXcuCisgICAgbV9pbnNwZWN0ZWRXZWJQYWdl
LT5kLT5nZXRPckNyZWF0ZUluc3BlY3RvcigpLT5kLT5zZXRGcm9udGVuZCgwKTsKKyNpZiBFTkFC
TEUoSU5TUEVDVE9SKQorICAgIG1faW5zcGVjdGVkV2ViUGFnZS0+ZC0+aW5zcGVjdG9yQ29udHJv
bGxlcigpLT5jbG9zZSgpOworI2VuZGlmCisgICAgLy8gQ2xlYXIgcG9pbnRlciBiZWZvcmUgZGVs
ZXRpbmcgV2ViVmlldyB0byBhdm9pZCByZWN1cnNpdmUgY2FsbHMgdG8gaXRzIGRlc3RydWN0b3Iu
CisgICAgZGVsZXRlIG1faW5zcGVjdG9yVmlldy5yZWxlYXNlKCk7Cit9CisKK3ZvaWQgSW5zcGVj
dG9yRnJvbnRlbmRDbGllbnRRdDo6YXR0YWNoV2luZG93KCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCit2b2lkIEluc3BlY3RvckZyb250ZW5kQ2xpZW50UXQ6OmRldGFjaFdpbmRvdygp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBJbnNwZWN0b3JGcm9udGVuZENs
aWVudFF0OjpzZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCkKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCit2b2lkIEluc3BlY3RvckZyb250ZW5kQ2xpZW50UXQ6Omluc3BlY3Rl
ZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJiBuZXdVUkwpCit7CisgICAgbV9pbnNwZWN0ZWRVUkwg
PSBuZXdVUkw7CisgICAgdXBkYXRlV2luZG93VGl0bGUoKTsKK30KKwordm9pZCBJbnNwZWN0b3JG
cm9udGVuZENsaWVudFF0Ojp1cGRhdGVXaW5kb3dUaXRsZSgpCit7CisgICAgaWYgKG1faW5zcGVj
dGVkV2ViUGFnZS0+ZC0+aW5zcGVjdG9yKSB7CisgICAgICAgIFFTdHJpbmcgY2FwdGlvbiA9IFFD
b3JlQXBwbGljYXRpb246OnRyYW5zbGF0ZSgiUVdlYlBhZ2UiLCAiV2ViIEluc3BlY3RvciAtICUy
IikuYXJnKG1faW5zcGVjdGVkVVJMKTsKKyAgICAgICAgbV9pbnNwZWN0ZWRXZWJQYWdlLT5kLT5p
bnNwZWN0b3ItPnNldFdpbmRvd1RpdGxlKGNhcHRpb24pOworICAgIH0KK30KKwogfQogCiAjaW5j
bHVkZSAiSW5zcGVjdG9yQ2xpZW50UXQubW9jIgpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L1dlYkNv
cmVTdXBwb3J0L0luc3BlY3RvckNsaWVudFF0LmggYi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
SW5zcGVjdG9yQ2xpZW50UXQuaAppbmRleCBjOTU0OGIwLi40YmVhZGFiIDEwMDY0NAotLS0gYS9X
ZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50UXQuaAorKysgYi9XZWJLaXQv
cXQvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50UXQuaApAQCAtMzEsNyArMzEsOSBAQAog
I2RlZmluZSBJbnNwZWN0b3JDbGllbnRRdF9oCiAKICNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnQu
aCIKKyNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmgiCiAjaW5jbHVkZSAi
T3duUHRyLmgiCisjaW5jbHVkZSAiUGFzc093blB0ci5oIgogI2luY2x1ZGUgPFF0Q29yZS9RU3Ry
aW5nPgogCiBjbGFzcyBRV2ViUGFnZTsKQEAgLTQ4LDEzICs1MCwyOSBAQCBwdWJsaWM6CiAKICAg
ICB2aXJ0dWFsIHZvaWQgaW5zcGVjdG9yRGVzdHJveWVkKCk7CiAKLSAgICB2aXJ0dWFsIFBhZ2Uq
IGNyZWF0ZVBhZ2UoKTsKKyAgICB2aXJ0dWFsIHZvaWQgb3Blbkluc3BlY3RvckZyb250ZW5kKFdl
YkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXIqKTsKKworICAgIHZpcnR1YWwgdm9pZCBoaWdobGln
aHQoTm9kZSopOworICAgIHZpcnR1YWwgdm9pZCBoaWRlSGlnaGxpZ2h0KCk7CisKKyAgICB2aXJ0
dWFsIHZvaWQgcG9wdWxhdGVTZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5LCBTdHJpbmcqIHZhbHVl
KTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RvcmVTZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5LCBjb25z
dCBTdHJpbmcmIHZhbHVlKTsKKworcHJpdmF0ZToKKyAgICBRV2ViUGFnZSogbV9pbnNwZWN0ZWRX
ZWJQYWdlOworfTsKKworY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdCA6IHB1YmxpYyBJ
bnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsIHsKK3B1YmxpYzoKKyAgICBJbnNwZWN0b3JGcm9u
dGVuZENsaWVudFF0KFFXZWJQYWdlKiBpbnNwZWN0ZWRXZWJQYWdlLCBQYXNzT3duUHRyPFFXZWJW
aWV3PiBpbnNwZWN0b3JWaWV3KTsKKworICAgIHZpcnR1YWwgdm9pZCBmcm9udGVuZExvYWRlZCgp
OwogCiAgICAgdmlydHVhbCBTdHJpbmcgbG9jYWxpemVkU3RyaW5nc1VSTCgpOwogCiAgICAgdmly
dHVhbCBTdHJpbmcgaGlkZGVuUGFuZWxzKCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgc2hvd1dpbmRv
dygpOworICAgIHZpcnR1YWwgdm9pZCBicmluZ1RvRnJvbnQoKTsKICAgICB2aXJ0dWFsIHZvaWQg
Y2xvc2VXaW5kb3coKTsKIAogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hXaW5kb3coKTsKQEAgLTYy
LDIwICs4MCwxNCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0QXR0YWNoZWRXaW5k
b3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KTsKIAotICAgIHZpcnR1YWwgdm9pZCBoaWdobGlnaHQo
Tm9kZSopOwotICAgIHZpcnR1YWwgdm9pZCBoaWRlSGlnaGxpZ2h0KCk7CiAgICAgdmlydHVhbCB2
b2lkIGluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJiBuZXdVUkwpOwogCi0gICAgdmly
dHVhbCB2b2lkIHBvcHVsYXRlU2V0dGluZyhjb25zdCBTdHJpbmcmIGtleSwgU3RyaW5nKiB2YWx1
ZSk7Ci0gICAgdmlydHVhbCB2b2lkIHN0b3JlU2V0dGluZyhjb25zdCBTdHJpbmcmIGtleSwgY29u
c3QgU3RyaW5nJiB2YWx1ZSk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgaW5zcGVjdG9yV2luZG93T2Jq
ZWN0Q2xlYXJlZCgpOwotCiBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRlV2luZG93VGl0bGUoKTsK
ICAgICBRV2ViUGFnZSogbV9pbnNwZWN0ZWRXZWJQYWdlOwogICAgIE93blB0cjxRV2ViVmlldz4g
bV9pbnNwZWN0b3JWaWV3OwogICAgIFFTdHJpbmcgbV9pbnNwZWN0ZWRVUkw7CisgICAgYm9vbCBt
X2Rlc3Ryb3lpbmdJbnNwZWN0b3JWaWV3OwogfTsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViS2l0L3dp
bi9DaGFuZ2VMb2cgYi9XZWJLaXQvd2luL0NoYW5nZUxvZwppbmRleCBjOTI3ZDJhLi42YmU0NTFh
IDEwMDY0NAotLS0gYS9XZWJLaXQvd2luL0NoYW5nZUxvZworKysgYi9XZWJLaXQvd2luL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDEwLTAzLTExICBZdXJ5IFNlbWlraGF0c2t5IDx5dXJ5
c0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgSW50cm9kdWNlIEluc3BlY3RvckZyb250ZW5kQ2xpZW50IHRoYXQgcHJvdmlkZXMg
SW5zcGVjdG9yRnJvbnRlbmQgd2l0aCBhbiBpbnRlcmZhY2UgdG8gdGhlIGVtYmVkZGVyLiBJbnNw
ZWN0b3JDbGllbnQgbm93IHNlcnZlcyBhcyBhIGRlbGVnYXRlIGZvciBJbnNwZWN0b3JDb250cm9s
bGVyIGFuZCBkb2VzIG5vdCBjb250YWluIG1ldGhvZHMgZm9yIG1hbmFnaW5nIGluc3BlY3RvciBm
cm9udGVuZCB3aW5kb3cuIFRoYXQgYWxsb3dzIHRvIGNyZWF0ZSByZW1vdGUgSW5zcGVjdG9yRnJv
bnRlbmRIb3N0LgorCisgICAgICAgIEludHJvZHVjZSBJbnNwZWN0b3JGcm9udGVuZENsaWVudCB0
aGF0IHdvdWxkIHByb3ZpZGUgSW5zcGVjdG9yRnJvbnRlbmQgd2l0aCBhbiBpbnRlcmZhY2UgdG8g
dGhlIGVtYmVkZGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0zNTAzNgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50
LmNwcDoKKyAgICAgICAgKFdlYkluc3BlY3RvckNsaWVudDo6V2ViSW5zcGVjdG9yQ2xpZW50KToK
KyAgICAgICAgKFdlYkluc3BlY3RvckNsaWVudDo6fldlYkluc3BlY3RvckNsaWVudCk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3JDbGllbnQ6Om9wZW5JbnNwZWN0b3JGcm9udGVuZCk6CisgICAgICAg
IChXZWJJbnNwZWN0b3JDbGllbnQ6OmhpZ2hsaWdodCk6CisgICAgICAgIChXZWJJbnNwZWN0b3JD
bGllbnQ6OmhpZGVIaWdobGlnaHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yQ2xpZW50Ojp1cGRh
dGVIaWdobGlnaHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OldlYklu
c3BlY3RvckZyb250ZW5kQ2xpZW50KToKKyAgICAgICAgKFdlYkluc3BlY3RvckZyb250ZW5kQ2xp
ZW50Ojp+V2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
RnJvbnRlbmRDbGllbnQ6OmZyb250ZW5kTG9hZGVkKToKKyAgICAgICAgKFdlYkluc3BlY3RvckZy
b250ZW5kQ2xpZW50Ojpsb2NhbGl6ZWRTdHJpbmdzVVJMKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50OjpoaWRkZW5QYW5lbHMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJv
bnRlbmRDbGllbnQ6OmJyaW5nVG9Gcm9udCk6CisgICAgICAgIChXZWJJbnNwZWN0b3JGcm9udGVu
ZENsaWVudDo6Y2xvc2VXaW5kb3cpOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGll
bnQ6OmF0dGFjaFdpbmRvdyk6CisgICAgICAgIChXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6
ZGV0YWNoV2luZG93KToKKyAgICAgICAgKFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpzZXRB
dHRhY2hlZFdpbmRvd0hlaWdodCk6CisgICAgICAgIChXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVu
dDo6aW5zcGVjdGVkVVJMQ2hhbmdlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3JGcm9udGVuZENs
aWVudDo6Y2xvc2VXaW5kb3dXaXRob3V0Tm90aWZpY2F0aW9ucyk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3JGcm9udGVuZENsaWVudDo6c2hvd1dpbmRvd1dpdGhvdXROb3RpZmljYXRpb25zKToKKyAg
ICAgICAgKFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpkZXN0cm95SW5zcGVjdG9yVmlldyk6
CisgICAgICAgIChXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6dXBkYXRlV2luZG93VGl0bGUp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6Om9uR2V0TWluTWF4SW5mbyk6
CisgICAgICAgIChXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6b25TaXplKToKKyAgICAgICAg
KFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpvbkNsb3NlKToKKyAgICAgICAgKFdlYkluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50OjpvblNldEZvY3VzKToKKyAgICAgICAgKFdlYkluc3BlY3RvckZy
b250ZW5kQ2xpZW50OjpvbldlYlZpZXdXaW5kb3dQb3NDaGFuZ2luZyk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3JXbmRQcm9jKToKKyAgICAgICAgKFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50Ojp3
aW5kb3dSZWNlaXZlZE1lc3NhZ2UpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkluc3Bl
Y3RvckNsaWVudC5oOgorICAgICAgICAoV2ViSW5zcGVjdG9yQ2xpZW50Ojpmcm9udGVuZENsb3Np
bmcpOgorICAgICAgICAqIFdlYkluc3BlY3Rvci5jcHA6CisgICAgICAgIChXZWJJbnNwZWN0b3I6
OmF0dGFjaCk6CisgICAgICAgIChXZWJJbnNwZWN0b3I6OmRldGFjaCk6CisKIDIwMTAtMDMtMTAg
IEVyaWMgVWhyaGFuZSAgPGVyaWN1QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBEYXZpZCBMZXZpbi4KZGlmZiAtLWdpdCBhL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2Vi
SW5zcGVjdG9yQ2xpZW50LmNwcCBiL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVj
dG9yQ2xpZW50LmNwcAppbmRleCA2YTEwYzBkLi41YWRiZmRmIDEwMDY0NAotLS0gYS9XZWJLaXQv
d2luL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5jcHAKKysrIGIvV2ViS2l0L3dp
bi9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuY3BwCkBAIC02OSwyNSArNjksMTMg
QEAgc3RhdGljIENGQnVuZGxlUmVmIGdldFdlYktpdEJ1bmRsZSgpCiAKIFdlYkluc3BlY3RvckNs
aWVudDo6V2ViSW5zcGVjdG9yQ2xpZW50KFdlYlZpZXcqIHdlYlZpZXcpCiAgICAgOiBtX2luc3Bl
Y3RlZFdlYlZpZXcod2ViVmlldykKLSAgICAsIG1faHduZCgwKQotICAgICwgbV93ZWJWaWV3SHdu
ZCgwKQotICAgICwgbV9zaG91bGRBdHRhY2hXaGVuU2hvd24oZmFsc2UpCi0gICAgLCBtX2F0dGFj
aGVkKGZhbHNlKQogewogICAgIEFTU0VSVChtX2luc3BlY3RlZFdlYlZpZXcpOwotCiAgICAgbV9p
bnNwZWN0ZWRXZWJWaWV3LT52aWV3V2luZG93KChPTEVfSEFORExFKikmbV9pbnNwZWN0ZWRXZWJW
aWV3SHduZCk7Ci0KLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHdpbmRvdyBzaXplL3Bvc2l0aW9u
IHNhdmUvcmVzdG9yZQotI2lmIDAKLSAgICBbc2VsZiBzZXRXaW5kb3dGcmFtZUF1dG9zYXZlTmFt
ZTpAIldlYiBJbnNwZWN0b3IiXTsKLSNlbmRpZgogfQogCiBXZWJJbnNwZWN0b3JDbGllbnQ6On5X
ZWJJbnNwZWN0b3JDbGllbnQoKQogewotICAgIGlmIChtX2h3bmQpCi0gICAgICAgIDo6RGVzdHJv
eVdpbmRvdyhtX2h3bmQpOwogfQogCiB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6aW5zcGVjdG9y
RGVzdHJveWVkKCkKQEAgLTk1LDM1ICs4MywzMCBAQCB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6
aW5zcGVjdG9yRGVzdHJveWVkKCkKICAgICBkZWxldGUgdGhpczsKIH0KIAotUGFnZSogV2ViSW5z
cGVjdG9yQ2xpZW50OjpjcmVhdGVQYWdlKCkKK3ZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpvcGVu
SW5zcGVjdG9yRnJvbnRlbmQoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxl
cikKIHsKICAgICByZWdpc3RlcldpbmRvd0NsYXNzKCk7CiAKLSAgICBpZiAobV9od25kKQotICAg
ICAgICA6OkRlc3Ryb3lXaW5kb3cobV9od25kKTsKLQotICAgIG1faHduZCA9IDo6Q3JlYXRlV2lu
ZG93RXgoMCwga1dlYkluc3BlY3RvcldpbmRvd0NsYXNzTmFtZSwgMCwgV1NfT1ZFUkxBUFBFRFdJ
TkRPVywKKyAgICBIV05EIGZyb250ZW5kSHduZCA9IDo6Q3JlYXRlV2luZG93RXgoMCwga1dlYklu
c3BlY3RvcldpbmRvd0NsYXNzTmFtZSwgMCwgV1NfT1ZFUkxBUFBFRFdJTkRPVywKICAgICAgICAg
ZGVmYXVsdFdpbmRvd1JlY3QoKS54KCksIGRlZmF1bHRXaW5kb3dSZWN0KCkueSgpLCBkZWZhdWx0
V2luZG93UmVjdCgpLndpZHRoKCksIGRlZmF1bHRXaW5kb3dSZWN0KCkuaGVpZ2h0KCksCiAgICAg
ICAgIDAsIDAsIDAsIDApOwogCi0gICAgaWYgKCFtX2h3bmQpCi0gICAgICAgIHJldHVybiAwOwot
Ci0gICAgOjpTZXRQcm9wKG1faHduZCwga1dlYkluc3BlY3RvclBvaW50ZXJQcm9wLCByZWludGVy
cHJldF9jYXN0PEhBTkRMRT4odGhpcykpOworICAgIGlmICghZnJvbnRlbmRId25kKQorICAgICAg
ICByZXR1cm47CiAKLSAgICBtX3dlYlZpZXcuYWRvcHRSZWYoV2ViVmlldzo6Y3JlYXRlSW5zdGFu
Y2UoKSk7CisgICAgQ09NUHRyPFdlYlZpZXc+IGZyb250ZW5kV2ViVmlldyhBZG9wdENPTSwgV2Vi
Vmlldzo6Y3JlYXRlSW5zdGFuY2UoKSk7CiAKLSAgICBpZiAoRkFJTEVEKG1fd2ViVmlldy0+c2V0
SG9zdFdpbmRvdygoT0xFX0hBTkRMRSkoVUxPTkc2NCltX2h3bmQpKSkKLSAgICAgICAgcmV0dXJu
IDA7CisgICAgaWYgKEZBSUxFRChmcm9udGVuZFdlYlZpZXctPnNldEhvc3RXaW5kb3coKE9MRV9I
QU5ETEUpKFVMT05HNjQpZnJvbnRlbmRId25kKSkpCisgICAgICAgIHJldHVybjsKIAogICAgIFJF
Q1QgcmVjdDsKLSAgICBHZXRDbGllbnRSZWN0KG1faHduZCwgJnJlY3QpOwotICAgIGlmIChGQUlM
RUQobV93ZWJWaWV3LT5pbml0V2l0aEZyYW1lKHJlY3QsIDAsIDApKSkKLSAgICAgICAgcmV0dXJu
IDA7CisgICAgR2V0Q2xpZW50UmVjdChmcm9udGVuZEh3bmQsICZyZWN0KTsKKyAgICBpZiAoRkFJ
TEVEKGZyb250ZW5kV2ViVmlldy0+aW5pdFdpdGhGcmFtZShyZWN0LCAwLCAwKSkpCisgICAgICAg
IHJldHVybjsKIAogICAgIENPTVB0cjxXZWJJbnNwZWN0b3JEZWxlZ2F0ZT4gZGVsZWdhdGUoQWRv
cHRDT00sIFdlYkluc3BlY3RvckRlbGVnYXRlOjpjcmVhdGVJbnN0YW5jZSgpKTsKLSAgICBpZiAo
RkFJTEVEKG1fd2ViVmlldy0+c2V0VUlEZWxlZ2F0ZShkZWxlZ2F0ZS5nZXQoKSkpKQotICAgICAg
ICByZXR1cm4gMDsKKyAgICBpZiAoRkFJTEVEKGZyb250ZW5kV2ViVmlldy0+c2V0VUlEZWxlZ2F0
ZShkZWxlZ2F0ZS5nZXQoKSkpKQorICAgICAgICByZXR1cm47CiAKICAgICAvLyBLZWVwIHByZWZl
cmVuY2VzIHNlcGFyYXRlIGZyb20gdGhlIHJlc3Qgb2YgdGhlIGNsaWVudCwgbWFraW5nIHN1cmUg
d2UgYXJlIHVzaW5nIGV4cGVjdGVkIHByZWZlcmVuY2UgdmFsdWVzLgogICAgIC8vIE9uZSByZWFz
b24gdGhpcyBpcyBnb29kIGlzIHRoYXQgaXQga2VlcHMgdGhlIGluc3BlY3RvciBvdXQgb2YgaGlz
dG9yeSB2aWEgInByaXZhdGUgYnJvd3NpbmciLgpAQCAtMTM0LDY2ICsxMTcsMTI2IEBAIFBhZ2Uq
IFdlYkluc3BlY3RvckNsaWVudDo6Y3JlYXRlUGFnZSgpCiAgICAgQ09NUHRyPFdlYlByZWZlcmVu
Y2VzPiB0ZW1wUHJlZmVyZW5jZXMoQWRvcHRDT00sIFdlYlByZWZlcmVuY2VzOjpjcmVhdGVJbnN0
YW5jZSgpKTsKICAgICBDT01QdHI8SVdlYlByZWZlcmVuY2VzPiBpUHJlZmVyZW5jZXM7CiAgICAg
aWYgKEZBSUxFRCh0ZW1wUHJlZmVyZW5jZXMtPmluaXRXaXRoSWRlbnRpZmllcihCU3RyaW5nKEwi
V2ViSW5zcGVjdG9yUHJlZmVyZW5jZXMiKSwgJmlQcmVmZXJlbmNlcykpKQotICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgcmV0dXJuOwogICAgIENPTVB0cjxXZWJQcmVmZXJlbmNlcz4gcHJlZmVy
ZW5jZXMoUXVlcnksIGlQcmVmZXJlbmNlcyk7CiAgICAgaWYgKCFwcmVmZXJlbmNlcykKLSAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybjsKICAgICBpZiAoRkFJTEVEKHByZWZlcmVuY2Vz
LT5zZXRBdXRvc2F2ZXMoRkFMU0UpKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVy
bjsKICAgICBpZiAoRkFJTEVEKHByZWZlcmVuY2VzLT5zZXRQcml2YXRlQnJvd3NpbmdFbmFibGVk
KFRSVUUpKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybjsKICAgICBpZiAoRkFJ
TEVEKHByZWZlcmVuY2VzLT5zZXRMb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkoVFJVRSkpKQotICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuOwogICAgIGlmIChGQUlMRUQocHJlZmVyZW5j
ZXMtPnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKFRSVUUpKSkKLSAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgIHJldHVybjsKICAgICBpZiAoRkFJTEVEKHByZWZlcmVuY2VzLT5zZXRBbGxv
d3NBbmltYXRlZEltYWdlcyhUUlVFKSkpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1
cm47CiAgICAgaWYgKEZBSUxFRChwcmVmZXJlbmNlcy0+c2V0TG9hZHNJbWFnZXNBdXRvbWF0aWNh
bGx5KFRSVUUpKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybjsKICAgICBpZiAo
RkFJTEVEKHByZWZlcmVuY2VzLT5zZXRQbHVnSW5zRW5hYmxlZChGQUxTRSkpKQotICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuOwogICAgIGlmIChGQUlMRUQocHJlZmVyZW5jZXMtPnNl
dEphdmFFbmFibGVkKEZBTFNFKSkpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm47
CiAgICAgaWYgKEZBSUxFRChwcmVmZXJlbmNlcy0+c2V0VXNlclN0eWxlU2hlZXRFbmFibGVkKEZB
TFNFKSkpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm47CiAgICAgaWYgKEZBSUxF
RChwcmVmZXJlbmNlcy0+c2V0VGFic1RvTGlua3MoRkFMU0UpKSkKLSAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgIHJldHVybjsKICAgICBpZiAoRkFJTEVEKHByZWZlcmVuY2VzLT5zZXRNaW5pbXVt
Rm9udFNpemUoMCkpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuOwogICAgIGlm
IChGQUlMRUQocHJlZmVyZW5jZXMtPnNldE1pbmltdW1Mb2dpY2FsRm9udFNpemUoOSkpKQotICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuOwogICAgIGlmIChGQUlMRUQocHJlZmVyZW5j
ZXMtPnNldEZpeGVkRm9udEZhbWlseShCU3RyaW5nKEwiQ291cmllciBOZXciKSkpKQotICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuOwogICAgIGlmIChGQUlMRUQocHJlZmVyZW5jZXMt
PnNldERlZmF1bHRGaXhlZEZvbnRTaXplKDEzKSkpCi0gICAgICAgIHJldHVybiAwOworICAgICAg
ICByZXR1cm47CiAKLSAgICBpZiAoRkFJTEVEKG1fd2ViVmlldy0+c2V0UHJlZmVyZW5jZXMocHJl
ZmVyZW5jZXMuZ2V0KCkpKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKEZBSUxFRChmcm9u
dGVuZFdlYlZpZXctPnNldFByZWZlcmVuY2VzKHByZWZlcmVuY2VzLmdldCgpKSkpCisgICAgICAg
IHJldHVybjsKIAotICAgIG1fd2ViVmlldy0+c2V0UHJvaGliaXRzTWFpbkZyYW1lU2Nyb2xsaW5n
KFRSVUUpOworICAgIGZyb250ZW5kV2ViVmlldy0+c2V0UHJvaGliaXRzTWFpbkZyYW1lU2Nyb2xs
aW5nKFRSVUUpOwogCi0gICAgaWYgKEZBSUxFRChtX3dlYlZpZXctPnZpZXdXaW5kb3cocmVpbnRl
cnByZXRfY2FzdDxPTEVfSEFORExFKj4oJm1fd2ViVmlld0h3bmQpKSkpCi0gICAgICAgIHJldHVy
biAwOworICAgIEhXTkQgZnJvbnRlbmRXZWJWaWV3SHduZDsKKyAgICBpZiAoRkFJTEVEKGZyb250
ZW5kV2ViVmlldy0+dmlld1dpbmRvdyhyZWludGVycHJldF9jYXN0PE9MRV9IQU5ETEUqPigmZnJv
bnRlbmRXZWJWaWV3SHduZCkpKSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgQ09NUHRyPFdlYk11
dGFibGVVUkxSZXF1ZXN0PiByZXF1ZXN0OwotICAgIHJlcXVlc3QuYWRvcHRSZWYoV2ViTXV0YWJs
ZVVSTFJlcXVlc3Q6OmNyZWF0ZUluc3RhbmNlKCkpOworICAgIENPTVB0cjxXZWJNdXRhYmxlVVJM
UmVxdWVzdD4gcmVxdWVzdChBZG9wdENPTSwgV2ViTXV0YWJsZVVSTFJlcXVlc3Q6OmNyZWF0ZUlu
c3RhbmNlKCkpOwogCiAgICAgUmV0YWluUHRyPENGVVJMUmVmPiBodG1sVVJMUmVmKEFkb3B0Q0Ys
IENGQnVuZGxlQ29weVJlc291cmNlVVJMKGdldFdlYktpdEJ1bmRsZSgpLCBDRlNUUigiaW5zcGVj
dG9yIiksIENGU1RSKCJodG1sIiksIENGU1RSKCJpbnNwZWN0b3IiKSkpOwogICAgIGlmICghaHRt
bFVSTFJlZikKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybjsKIAogICAgIENGU3Ry
aW5nUmVmIHVybFN0cmluZ1JlZiA9IDo6Q0ZVUkxHZXRTdHJpbmcoaHRtbFVSTFJlZi5nZXQoKSk7
CiAgICAgaWYgKEZBSUxFRChyZXF1ZXN0LT5pbml0V2l0aFVSTChCU3RyaW5nKHVybFN0cmluZ1Jl
ZiksIFdlYlVSTFJlcXVlc3RVc2VQcm90b2NvbENhY2hlUG9saWN5LCA2MCkpKQotICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKEZBSUxFRChtX3dlYlZpZXctPnRv
cExldmVsRnJhbWUoKS0+bG9hZFJlcXVlc3QocmVxdWVzdC5nZXQoKSkpKQotICAgICAgICByZXR1
cm4gMDsKKyAgICBpZiAoRkFJTEVEKGZyb250ZW5kV2ViVmlldy0+dG9wTGV2ZWxGcmFtZSgpLT5s
b2FkUmVxdWVzdChyZXF1ZXN0LmdldCgpKSkpCisgICAgICAgIHJldHVybjsKIAotICAgIHJldHVy
biBjb3JlKG1fd2ViVmlldy5nZXQoKSk7CisgICAgUGFnZSogcGFnZSA9IGNvcmUoZnJvbnRlbmRX
ZWJWaWV3LmdldCgpKTsKKyAgICBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnNldEluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50KG5ldyBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudChtX2luc3Bl
Y3RlZFdlYlZpZXcsIG1faW5zcGVjdGVkV2ViVmlld0h3bmQsIGZyb250ZW5kSHduZCwgZnJvbnRl
bmRXZWJWaWV3LCBmcm9udGVuZFdlYlZpZXdId25kLCB0aGlzKSk7CisgICAgbV9mcm9udGVuZEh3
bmQgPSBmcm9udGVuZEh3bmQ7CiB9CiAKK3ZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpoaWdobGln
aHQoTm9kZSopCit7CisgICAgYm9vbCBjcmVhdGluZ0hpZ2hsaWdodCA9ICFtX2hpZ2hsaWdodDsK
KworICAgIGlmIChjcmVhdGluZ0hpZ2hsaWdodCkKKyAgICAgICAgbV9oaWdobGlnaHQuc2V0KG5l
dyBXZWJOb2RlSGlnaGxpZ2h0KG1faW5zcGVjdGVkV2ViVmlldykpOwogCi1TdHJpbmcgV2ViSW5z
cGVjdG9yQ2xpZW50Ojpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkKKyAgICBpZiAobV9oaWdobGlnaHQt
PmlzU2hvd2luZygpKQorICAgICAgICBtX2hpZ2hsaWdodC0+dXBkYXRlKCk7CisgICAgZWxzZQor
ICAgICAgICBtX2hpZ2hsaWdodC0+c2V0U2hvd3NXaGlsZVdlYlZpZXdJc1Zpc2libGUodHJ1ZSk7
CisKKyAgICBpZiAoY3JlYXRpbmdIaWdobGlnaHQgJiYgSXNXaW5kb3dWaXNpYmxlKG1fZnJvbnRl
bmRId25kKSkKKyAgICAgICAgbV9oaWdobGlnaHQtPnBsYWNlQmVoaW5kV2luZG93KG1fZnJvbnRl
bmRId25kKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmhpZGVIaWdobGlnaHQoKQor
eworICAgIGlmIChtX2hpZ2hsaWdodCkKKyAgICAgICAgbV9oaWdobGlnaHQtPnNldFNob3dzV2hp
bGVXZWJWaWV3SXNWaXNpYmxlKGZhbHNlKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6
OnVwZGF0ZUhpZ2hsaWdodCgpCit7CisgICAgaWYgKG1faGlnaGxpZ2h0ICYmIG1faGlnaGxpZ2h0
LT5pc1Nob3dpbmcoKSkKKyAgICAgICAgbV9oaWdobGlnaHQtPnVwZGF0ZSgpOworfQorCitXZWJJ
bnNwZWN0b3JGcm9udGVuZENsaWVudDo6V2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQoV2ViVmll
dyogaW5zcGVjdGVkV2ViVmlldywgSFdORCBpbnNwZWN0ZWRXZWJWaWV3SHduZCwgSFdORCBmcm9u
dGVuZEh3bmQsIGNvbnN0IENPTVB0cjxXZWJWaWV3PiYgZnJvbnRlbmRXZWJWaWV3LCBIV05EIGZy
b250ZW5kV2ViVmlld0h3bmQsIFdlYkluc3BlY3RvckNsaWVudCogaW5zcGVjdG9yQ2xpZW50KQor
ICAgIDogSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbChpbnNwZWN0ZWRXZWJWaWV3LT5wYWdl
KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKSwgIGNvcmUoZnJvbnRlbmRXZWJWaWV3LmdldCgpKSkK
KyAgICAsIG1faW5zcGVjdGVkV2ViVmlldyhpbnNwZWN0ZWRXZWJWaWV3KQorICAgICwgbV9pbnNw
ZWN0ZWRXZWJWaWV3SHduZChpbnNwZWN0ZWRXZWJWaWV3SHduZCkKKyAgICAsIG1faW5zcGVjdG9y
Q2xpZW50KGluc3BlY3RvckNsaWVudCkKKyAgICAsIG1fZnJvbnRlbmRId25kKGZyb250ZW5kSHdu
ZCkKKyAgICAsIG1fZnJvbnRlbmRXZWJWaWV3KGZyb250ZW5kV2ViVmlldykKKyAgICAsIG1fZnJv
bnRlbmRXZWJWaWV3SHduZChmcm9udGVuZFdlYlZpZXdId25kKQorICAgICwgbV9zaG91bGRBdHRh
Y2hXaGVuU2hvd24oZmFsc2UpCisgICAgLCBtX2F0dGFjaGVkKGZhbHNlKQorICAgICwgbV9kZXN0
cm95aW5nSW5zcGVjdG9yVmlldyhmYWxzZSkKK3sKKyAgICA6OlNldFByb3AoZnJvbnRlbmRId25k
LCBrV2ViSW5zcGVjdG9yUG9pbnRlclByb3AsIHJlaW50ZXJwcmV0X2Nhc3Q8SEFORExFPih0aGlz
KSk7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB3aW5kb3cgc2l6ZS9wb3NpdGlvbiBzYXZlL3Jl
c3RvcmUKKyNpZiAwCisgICAgW3NlbGYgc2V0V2luZG93RnJhbWVBdXRvc2F2ZU5hbWU6QCJXZWIg
SW5zcGVjdG9yIl07CisjZW5kaWYKK30KKworV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6On5X
ZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudCgpCit7CisgICAgQVNTRVJUKG1fZGVzdHJveWluZ0lu
c3BlY3RvclZpZXcpOworfQorCit2b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50Ojpmcm9u
dGVuZExvYWRlZCgpCit7CisgICAgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6ZnJvbnRl
bmRMb2FkZWQoKTsKKworICAgIHNldEF0dGFjaGVkV2luZG93KG1fYXR0YWNoZWQpOworfQorCitT
dHJpbmcgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmxvY2FsaXplZFN0cmluZ3NVUkwoKQog
ewogICAgIFJldGFpblB0cjxDRlVSTFJlZj4gdXJsKEFkb3B0Q0YsIENGQnVuZGxlQ29weVJlc291
cmNlVVJMKGdldFdlYktpdEJ1bmRsZSgpLCBDRlNUUigibG9jYWxpemVkU3RyaW5ncyIpLCBDRlNU
UigianMiKSwgMCkpOwogICAgIGlmICghdXJsKQpAQCAtMjAyLDMxICsyNDUsMjMgQEAgU3RyaW5n
IFdlYkluc3BlY3RvckNsaWVudDo6bG9jYWxpemVkU3RyaW5nc1VSTCgpCiAgICAgcmV0dXJuIENG
VVJMR2V0U3RyaW5nKHVybC5nZXQoKSk7CiB9CiAKLQotU3RyaW5nIFdlYkluc3BlY3RvckNsaWVu
dDo6aGlkZGVuUGFuZWxzKCkKK1N0cmluZyBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6aGlk
ZGVuUGFuZWxzKCkKIHsKICAgICAvLyBGSVhNRTogaW1wbGVtZW50IHRoaXMKICAgICByZXR1cm4g
U3RyaW5nKCk7CiB9CiAKLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpzaG93V2luZG93KCkKK3Zv
aWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmJyaW5nVG9Gcm9udCgpCiB7CiAgICAgc2hv
d1dpbmRvd1dpdGhvdXROb3RpZmljYXRpb25zKCk7Ci0gICAgbV9pbnNwZWN0ZWRXZWJWaWV3LT5w
YWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0V2luZG93VmlzaWJsZSh0cnVlLCBtX3No
b3VsZEF0dGFjaFdoZW5TaG93bik7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpjbG9z
ZVdpbmRvdygpCi17Ci0gICAgY2xvc2VXaW5kb3dXaXRob3V0Tm90aWZpY2F0aW9ucygpOwotICAg
IG1faW5zcGVjdGVkV2ViVmlldy0+cGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnNldFdp
bmRvd1Zpc2libGUoZmFsc2UsIG1fc2hvdWxkQXR0YWNoV2hlblNob3duKTsKIH0KIAotYm9vbCBX
ZWJJbnNwZWN0b3JDbGllbnQ6OndpbmRvd1Zpc2libGUoKQordm9pZCBXZWJJbnNwZWN0b3JGcm9u
dGVuZENsaWVudDo6Y2xvc2VXaW5kb3coKQogewotICAgIHJldHVybiAhITo6SXNXaW5kb3dWaXNp
YmxlKG1faHduZCk7CisgICAgZGVzdHJveUluc3BlY3RvclZpZXcoKTsKIH0KIAotdm9pZCBXZWJJ
bnNwZWN0b3JDbGllbnQ6OmF0dGFjaFdpbmRvdygpCit2b2lkIFdlYkluc3BlY3RvckZyb250ZW5k
Q2xpZW50OjphdHRhY2hXaW5kb3coKQogewogICAgIGlmIChtX2F0dGFjaGVkKQogICAgICAgICBy
ZXR1cm47CkBAIC0yMzcsNyArMjcyLDcgQEAgdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmF0dGFj
aFdpbmRvdygpCiAgICAgc2hvd1dpbmRvd1dpdGhvdXROb3RpZmljYXRpb25zKCk7CiB9CiAKLXZv
aWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpkZXRhY2hXaW5kb3coKQordm9pZCBXZWJJbnNwZWN0b3JG
cm9udGVuZENsaWVudDo6ZGV0YWNoV2luZG93KCkKIHsKICAgICBpZiAoIW1fYXR0YWNoZWQpCiAg
ICAgICAgIHJldHVybjsKQEAgLTI0OCw3ICsyODMsNyBAQCB2b2lkIFdlYkluc3BlY3RvckNsaWVu
dDo6ZGV0YWNoV2luZG93KCkKICAgICBzaG93V2luZG93V2l0aG91dE5vdGlmaWNhdGlvbnMoKTsK
IH0KIAotdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OnNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVu
c2lnbmVkIGhlaWdodCkKK3ZvaWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OnNldEF0dGFj
aGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkKIHsKICAgICBpZiAoIW1fYXR0YWNoZWQp
CiAgICAgICAgIHJldHVybjsKQEAgLTI2NiwxMDEgKzMwMSw3MyBAQCB2b2lkIFdlYkluc3BlY3Rv
ckNsaWVudDo6c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KQogICAgIGlu
dCB0b3RhbEhlaWdodCA9IGhvc3RXaW5kb3dSZWN0LmJvdHRvbSAtIGhvc3RXaW5kb3dSZWN0LnRv
cDsKICAgICBpbnQgd2ViVmlld1dpZHRoID0gaW5zcGVjdGVkUmVjdC5yaWdodCAtIGluc3BlY3Rl
ZFJlY3QubGVmdDsKIAotICAgIFNldFdpbmRvd1BvcyhtX3dlYlZpZXdId25kLCAwLCAwLCB0b3Rh
bEhlaWdodCAtIGhlaWdodCwgd2ViVmlld1dpZHRoLCBoZWlnaHQsIFNXUF9OT1pPUkRFUik7Cisg
ICAgU2V0V2luZG93UG9zKG1fZnJvbnRlbmRXZWJWaWV3SHduZCwgMCwgMCwgdG90YWxIZWlnaHQg
LSBoZWlnaHQsIHdlYlZpZXdXaWR0aCwgaGVpZ2h0LCBTV1BfTk9aT1JERVIpOwogCiAgICAgLy8g
V2Ugd2FudCB0byBzZXQgdGhlIGluc3BlY3RlZCB3ZWIgdmlldyBoZWlnaHQgdG8gdGhlIHRvdGFs
SGVpZ2h0LCBiZWNhdXNlIHRoZSBoZWlnaHQgYWRqdXN0bWVudAogICAgIC8vIG9mIHRoZSBpbnNw
ZWN0ZWQgd2ViIHZpZXcgaGFwcGVucyBpbiBvbldlYlZpZXdXaW5kb3dQb3NDaGFuZ2luZywgbm90
IGhlcmUuCiAgICAgU2V0V2luZG93UG9zKG1faW5zcGVjdGVkV2ViVmlld0h3bmQsIDAsIDAsIDAs
IHdlYlZpZXdXaWR0aCwgdG90YWxIZWlnaHQsIFNXUF9OT1pPUkRFUik7CiAKLSAgICBSZWRyYXdX
aW5kb3cobV93ZWJWaWV3SHduZCwgMCwgMCwgUkRXX0lOVkFMSURBVEUgfCBSRFdfQUxMQ0hJTERS
RU4gfCBSRFdfVVBEQVRFTk9XKTsgCisgICAgUmVkcmF3V2luZG93KG1fZnJvbnRlbmRXZWJWaWV3
SHduZCwgMCwgMCwgUkRXX0lOVkFMSURBVEUgfCBSRFdfQUxMQ0hJTERSRU4gfCBSRFdfVVBEQVRF
Tk9XKTsgCiAgICAgUmVkcmF3V2luZG93KG1faW5zcGVjdGVkV2ViVmlld0h3bmQsIDAsIDAsIFJE
V19JTlZBTElEQVRFIHwgUkRXX0FMTENISUxEUkVOIHwgUkRXX1VQREFURU5PVyk7CiB9CiAKLXZv
aWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpoaWdobGlnaHQoTm9kZSopCi17Ci0gICAgYm9vbCBjcmVh
dGluZ0hpZ2hsaWdodCA9ICFtX2hpZ2hsaWdodDsKLQotICAgIGlmIChjcmVhdGluZ0hpZ2hsaWdo
dCkKLSAgICAgICAgbV9oaWdobGlnaHQuc2V0KG5ldyBXZWJOb2RlSGlnaGxpZ2h0KG1faW5zcGVj
dGVkV2ViVmlldykpOwotCi0gICAgaWYgKG1faGlnaGxpZ2h0LT5pc1Nob3dpbmcoKSkKLSAgICAg
ICAgbV9oaWdobGlnaHQtPnVwZGF0ZSgpOwotICAgIGVsc2UKLSAgICAgICAgbV9oaWdobGlnaHQt
PnNldFNob3dzV2hpbGVXZWJWaWV3SXNWaXNpYmxlKHRydWUpOwotCi0gICAgaWYgKGNyZWF0aW5n
SGlnaGxpZ2h0ICYmIElzV2luZG93VmlzaWJsZShtX2h3bmQpKQotICAgICAgICBtX2hpZ2hsaWdo
dC0+cGxhY2VCZWhpbmRXaW5kb3cobV9od25kKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JDbGll
bnQ6OmhpZGVIaWdobGlnaHQoKQotewotICAgIGlmIChtX2hpZ2hsaWdodCkKLSAgICAgICAgbV9o
aWdobGlnaHQtPnNldFNob3dzV2hpbGVXZWJWaWV3SXNWaXNpYmxlKGZhbHNlKTsKLX0KLQotdm9p
ZCBXZWJJbnNwZWN0b3JDbGllbnQ6Omluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJiBu
ZXdVUkwpCit2b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjppbnNwZWN0ZWRVUkxDaGFu
Z2VkKGNvbnN0IFN0cmluZyYgbmV3VVJMKQogewogICAgIG1faW5zcGVjdGVkVVJMID0gbmV3VVJM
OwogICAgIHVwZGF0ZVdpbmRvd1RpdGxlKCk7CiB9CiAKLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50
OjppbnNwZWN0b3JXaW5kb3dPYmplY3RDbGVhcmVkKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6Y2xvc2VXaW5kb3dXaXRob3V0Tm90aWZp
Y2F0aW9ucygpCit2b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpjbG9zZVdpbmRvd1dp
dGhvdXROb3RpZmljYXRpb25zKCkKIHsKLSAgICBpZiAoIW1faHduZCkKKyAgICBpZiAoIW1fZnJv
bnRlbmRId25kKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIW1fYXR0YWNoZWQpIHsKLSAg
ICAgICAgU2hvd1dpbmRvdyhtX2h3bmQsIFNXX0hJREUpOworICAgICAgICBTaG93V2luZG93KG1f
ZnJvbnRlbmRId25kLCBTV19ISURFKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEFT
U0VSVChtX3dlYlZpZXcpOworICAgIEFTU0VSVChtX2Zyb250ZW5kV2ViVmlldyk7CiAgICAgQVNT
RVJUKG1faW5zcGVjdGVkV2ViVmlld0h3bmQpOwotICAgIEFTU0VSVCghSXNXaW5kb3dWaXNpYmxl
KG1faHduZCkpOworICAgIEFTU0VSVCghSXNXaW5kb3dWaXNpYmxlKG1fZnJvbnRlbmRId25kKSk7
CiAKICAgICAvLyBSZW1vdmUgdGhlIEluc3BlY3RvcidzIFdlYlZpZXcgZnJvbSB0aGUgaW5zcGVj
dGVkIFdlYlZpZXcncyBwYXJlbnQgd2luZG93LgogICAgIFdpbmRvd01lc3NhZ2VCcm9hZGNhc3Rl
cjo6cmVtb3ZlTGlzdGVuZXIobV9pbnNwZWN0ZWRXZWJWaWV3SHduZCwgdGhpcyk7CiAKICAgICBt
X2F0dGFjaGVkID0gZmFsc2U7CiAKLSAgICBtX3dlYlZpZXctPnNldEhvc3RXaW5kb3cocmVpbnRl
cnByZXRfY2FzdDxPTEVfSEFORExFPihtX2h3bmQpKTsKKyAgICBtX2Zyb250ZW5kV2ViVmlldy0+
c2V0SG9zdFdpbmRvdyhyZWludGVycHJldF9jYXN0PE9MRV9IQU5ETEU+KG1fZnJvbnRlbmRId25k
KSk7CiAKICAgICAvLyBNYWtlIHN1cmUgZXZlcnl0aGluZyBoYXMgdGhlIHJpZ2h0IHNpemUvcG9z
aXRpb24uCiAgICAgSFdORCBob3N0V2luZG93OwogICAgIGlmIChTVUNDRUVERUQobV9pbnNwZWN0
ZWRXZWJWaWV3LT5ob3N0V2luZG93KChPTEVfSEFORExFKikmaG9zdFdpbmRvdykpKQogICAgICAg
ICBTZW5kTWVzc2FnZShob3N0V2luZG93LCBXTV9TSVpFLCAwLCAwKTsKIAotICAgIGlmIChtX2hp
Z2hsaWdodCAmJiBtX2hpZ2hsaWdodC0+aXNTaG93aW5nKCkpCi0gICAgICAgIG1faGlnaGxpZ2h0
LT51cGRhdGUoKTsKKyAgICBtX2luc3BlY3RvckNsaWVudC0+dXBkYXRlSGlnaGxpZ2h0KCk7CiB9
CiAKLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpzaG93V2luZG93V2l0aG91dE5vdGlmaWNhdGlv
bnMoKQordm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6c2hvd1dpbmRvd1dpdGhvdXRO
b3RpZmljYXRpb25zKCkKIHsKLSAgICBpZiAoIW1faHduZCkKKyAgICBpZiAoIW1fZnJvbnRlbmRI
d25kKQogICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQobV93ZWJWaWV3KTsKKyAgICBBU1NF
UlQobV9mcm9udGVuZFdlYlZpZXcpOwogICAgIEFTU0VSVChtX2luc3BlY3RlZFdlYlZpZXdId25k
KTsKIAogICAgIC8vIElmIG5vIHByZWZlcmVuY2UgaXMgc2V0IC0gZGVmYXVsdCB0byBhbiBhdHRh
Y2hlZCB3aW5kb3cuIFRoaXMgaXMgaW1wb3J0YW50IGZvciBpbnNwZWN0b3IgTGF5b3V0VGVzdHMu
CiAgICAgU3RyaW5nIHNob3VsZEF0dGFjaCA9IG1faW5zcGVjdGVkV2ViVmlldy0+cGFnZSgpLT5p
bnNwZWN0b3JDb250cm9sbGVyKCktPnNldHRpbmcoSW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zcGVj
dG9yU3RhcnRzQXR0YWNoZWRTZXR0aW5nTmFtZSgpKTsKICAgICBtX3Nob3VsZEF0dGFjaFdoZW5T
aG93biA9IHNob3VsZEF0dGFjaCAhPSAiZmFsc2UiOwogICAgICAgICAKLSAgICBpZiAobV9zaG91
bGRBdHRhY2hXaGVuU2hvd24gJiYgIW1faW5zcGVjdGVkV2ViVmlldy0+cGFnZSgpLT5pbnNwZWN0
b3JDb250cm9sbGVyKCktPmNhbkF0dGFjaFdpbmRvdygpKQorICAgIGlmIChtX3Nob3VsZEF0dGFj
aFdoZW5TaG93biAmJiAhY2FuQXR0YWNoV2luZG93KCkpCiAgICAgICAgIG1fc2hvdWxkQXR0YWNo
V2hlblNob3duID0gZmFsc2U7CiAgICAgCiAgICAgaWYgKCFtX3Nob3VsZEF0dGFjaFdoZW5TaG93
bikgewogICAgICAgICAvLyBQdXQgdGhlIEluc3BlY3RvcidzIFdlYlZpZXcgaW5zaWRlIG91ciB3
aW5kb3cgYW5kIHNob3cgaXQuCi0gICAgICAgIG1fd2ViVmlldy0+c2V0SG9zdFdpbmRvdyhyZWlu
dGVycHJldF9jYXN0PE9MRV9IQU5ETEU+KG1faHduZCkpOwotICAgICAgICBTZW5kTWVzc2FnZSht
X2h3bmQsIFdNX1NJWkUsIDAsIDApOworICAgICAgICBtX2Zyb250ZW5kV2ViVmlldy0+c2V0SG9z
dFdpbmRvdyhyZWludGVycHJldF9jYXN0PE9MRV9IQU5ETEU+KG1fZnJvbnRlbmRId25kKSk7Cisg
ICAgICAgIFNlbmRNZXNzYWdlKG1fZnJvbnRlbmRId25kLCBXTV9TSVpFLCAwLCAwKTsKICAgICAg
ICAgdXBkYXRlV2luZG93VGl0bGUoKTsKIAotICAgICAgICBTZXRXaW5kb3dQb3MobV9od25kLCBI
V05EX1RPUCwgMCwgMCwgMCwgMCwgU1dQX1NIT1dXSU5ET1cgfCBTV1BfTk9NT1ZFIHwgU1dQX05P
U0laRSk7CisgICAgICAgIFNldFdpbmRvd1BvcyhtX2Zyb250ZW5kSHduZCwgSFdORF9UT1AsIDAs
IDAsIDAsIDAsIFNXUF9TSE9XV0lORE9XIHwgU1dQX05PTU9WRSB8IFNXUF9OT1NJWkUpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCkBAIC0zNzEsMjAgKzM3OCwzMiBAQCB2b2lkIFdlYkluc3Bl
Y3RvckNsaWVudDo6c2hvd1dpbmRvd1dpdGhvdXROb3RpZmljYXRpb25zKCkKICAgICBpZiAoRkFJ
TEVEKG1faW5zcGVjdGVkV2ViVmlldy0+aG9zdFdpbmRvdyhyZWludGVycHJldF9jYXN0PE9MRV9I
QU5ETEUqPigmaG9zdFdpbmRvdykpKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV93ZWJWaWV3
LT5zZXRIb3N0V2luZG93KHJlaW50ZXJwcmV0X2Nhc3Q8T0xFX0hBTkRMRT4oaG9zdFdpbmRvdykp
OworICAgIG1fZnJvbnRlbmRXZWJWaWV3LT5zZXRIb3N0V2luZG93KHJlaW50ZXJwcmV0X2Nhc3Q8
T0xFX0hBTkRMRT4oaG9zdFdpbmRvdykpOwogCiAgICAgLy8gVGhlbiBoaWRlIG91ciBvd24gd2lu
ZG93LgotICAgIFNob3dXaW5kb3cobV9od25kLCBTV19ISURFKTsKKyAgICBTaG93V2luZG93KG1f
ZnJvbnRlbmRId25kLCBTV19ISURFKTsKIAogICAgIG1fYXR0YWNoZWQgPSB0cnVlOwogCiAgICAg
Ly8gTWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaGFzIHRoZSByaWdodCBzaXplL3Bvc2l0aW9uLgogICAg
IFNlbmRNZXNzYWdlKGhvc3RXaW5kb3csIFdNX1NJWkUsIDAsIDApOwotICAgIGlmIChtX2hpZ2hs
aWdodCAmJiBtX2hpZ2hsaWdodC0+aXNTaG93aW5nKCkpCi0gICAgICAgIG1faGlnaGxpZ2h0LT51
cGRhdGUoKTsKKyAgICBtX2luc3BlY3RvckNsaWVudC0+dXBkYXRlSGlnaGxpZ2h0KCk7Cit9CisK
K3ZvaWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmRlc3Ryb3lJbnNwZWN0b3JWaWV3KCkK
K3sKKyAgICBpZiAobV9kZXN0cm95aW5nSW5zcGVjdG9yVmlldykKKyAgICAgICAgcmV0dXJuOwor
ICAgIG1fZGVzdHJveWluZ0luc3BlY3RvclZpZXcgPSB0cnVlOworCisgICAgbV9pbnNwZWN0ZWRX
ZWJWaWV3LT5wYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+Y2xvc2UoKTsKKworICAgIGNs
b3NlV2luZG93V2l0aG91dE5vdGlmaWNhdGlvbnMoKTsKKyAgICBtX2luc3BlY3RvckNsaWVudC0+
ZnJvbnRlbmRDbG9zaW5nKCk7CisgICAgOjpEZXN0cm95V2luZG93KG1fZnJvbnRlbmRId25kKTsK
IH0KIAotdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OnVwZGF0ZVdpbmRvd1RpdGxlKCkKK3ZvaWQg
V2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OnVwZGF0ZVdpbmRvd1RpdGxlKCkKIHsKICAgICAv
LyBGSVhNRTogVGhlIHNlcmllcyBvZiBhcHBlbmRzIHNob3VsZCBiZSByZXBsYWNlZCB3aXRoIGEg
Y2FsbCB0byBTdHJpbmc6OmZvcm1hdCgpCiAgICAgLy8gd2hlbiBpdCBjYW4gYmUgZmlndXJlZCBv
dXQgaG93IHRvIGdldCB0aGUgdW5pY29kZSBlbS1kYXNoIHRvIHNob3cgdXAuCkBAIC0zOTIsMTAg
KzQxMSwxMCBAQCB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6dXBkYXRlV2luZG93VGl0bGUoKQog
ICAgIHRpdGxlLmFwcGVuZCgoVUNoYXIpMHgyMDE0KTsgLy8gZW0tZGFzaAogICAgIHRpdGxlLmFw
cGVuZCgnICcpOwogICAgIHRpdGxlLmFwcGVuZChtX2luc3BlY3RlZFVSTCk7Ci0gICAgOjpTZXRX
aW5kb3dUZXh0KG1faHduZCwgdGl0bGUuY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSk7
CisgICAgOjpTZXRXaW5kb3dUZXh0KG1fZnJvbnRlbmRId25kLCB0aXRsZS5jaGFyYWN0ZXJzV2l0
aE51bGxUZXJtaW5hdGlvbigpKTsKIH0KIAotTFJFU1VMVCBXZWJJbnNwZWN0b3JDbGllbnQ6Om9u
R2V0TWluTWF4SW5mbyhXUEFSQU0sIExQQVJBTSBsUGFyYW0pCitMUkVTVUxUIFdlYkluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50OjpvbkdldE1pbk1heEluZm8oV1BBUkFNLCBMUEFSQU0gbFBhcmFtKQog
ewogICAgIE1JTk1BWElORk8qIGluZm8gPSByZWludGVycHJldF9jYXN0PE1JTk1BWElORk8qPihs
UGFyYW0pOwogICAgIFBPSU5UIHNpemUgPSB7NDAwLCA0MDB9OwpAQCAtNDA0LDMzICs0MjMsMzEg
QEAgTFJFU1VMVCBXZWJJbnNwZWN0b3JDbGllbnQ6Om9uR2V0TWluTWF4SW5mbyhXUEFSQU0sIExQ
QVJBTSBsUGFyYW0pCiAgICAgcmV0dXJuIDA7CiB9CiAKLUxSRVNVTFQgV2ViSW5zcGVjdG9yQ2xp
ZW50OjpvblNpemUoV1BBUkFNLCBMUEFSQU0pCitMUkVTVUxUIFdlYkluc3BlY3RvckZyb250ZW5k
Q2xpZW50OjpvblNpemUoV1BBUkFNLCBMUEFSQU0pCiB7CiAgICAgUkVDVCByZWN0OwotICAgIDo6
R2V0Q2xpZW50UmVjdChtX2h3bmQsICZyZWN0KTsKKyAgICA6OkdldENsaWVudFJlY3QobV9mcm9u
dGVuZEh3bmQsICZyZWN0KTsKIAotICAgIDo6U2V0V2luZG93UG9zKG1fd2ViVmlld0h3bmQsIDAs
IHJlY3QubGVmdCwgcmVjdC50b3AsIHJlY3QucmlnaHQgLSByZWN0LmxlZnQsIHJlY3QuYm90dG9t
IC0gcmVjdC50b3AsIFNXUF9OT1pPUkRFUik7CisgICAgOjpTZXRXaW5kb3dQb3MobV9mcm9udGVu
ZFdlYlZpZXdId25kLCAwLCByZWN0LmxlZnQsIHJlY3QudG9wLCByZWN0LnJpZ2h0IC0gcmVjdC5s
ZWZ0LCByZWN0LmJvdHRvbSAtIHJlY3QudG9wLCBTV1BfTk9aT1JERVIpOwogCiAgICAgcmV0dXJu
IDA7CiB9CiAKLUxSRVNVTFQgV2ViSW5zcGVjdG9yQ2xpZW50OjpvbkNsb3NlKFdQQVJBTSwgTFBB
UkFNKQorTFJFU1VMVCBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6b25DbG9zZShXUEFSQU0s
IExQQVJBTSkKIHsKLSAgICA6OlNob3dXaW5kb3cobV9od25kLCBTV19ISURFKTsKLSAgICBtX2lu
c3BlY3RlZFdlYlZpZXctPnBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5zZXRXaW5kb3dW
aXNpYmxlKGZhbHNlLCBtX3Nob3VsZEF0dGFjaFdoZW5TaG93bik7Ci0KLSAgICBoaWRlSGlnaGxp
Z2h0KCk7CisgICAgOjpTaG93V2luZG93KG1fZnJvbnRlbmRId25kLCBTV19ISURFKTsKKyAgICBt
X2luc3BlY3RlZFdlYlZpZXctPnBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5jbG9zZSgp
OwogCiAgICAgcmV0dXJuIDA7CiB9CiAKLUxSRVNVTFQgV2ViSW5zcGVjdG9yQ2xpZW50OjpvblNl
dEZvY3VzKCkKK0xSRVNVTFQgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6Om9uU2V0Rm9jdXMo
KQogewotICAgIFNldEZvY3VzKG1fd2ViVmlld0h3bmQpOworICAgIFNldEZvY3VzKG1fZnJvbnRl
bmRXZWJWaWV3SHduZCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgV2ViSW5zcGVjdG9yQ2xp
ZW50OjpvbldlYlZpZXdXaW5kb3dQb3NDaGFuZ2luZyhXUEFSQU0sIExQQVJBTSBsUGFyYW0pCit2
b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpvbldlYlZpZXdXaW5kb3dQb3NDaGFuZ2lu
ZyhXUEFSQU0sIExQQVJBTSBsUGFyYW0pCiB7CiAgICAgQVNTRVJUKG1fYXR0YWNoZWQpOwogCkBA
IC00NDEsMTcgKzQ1OCwxNyBAQCB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6b25XZWJWaWV3V2lu
ZG93UG9zQ2hhbmdpbmcoV1BBUkFNLCBMUEFSQU0gbFBhcmFtKQogICAgICAgICByZXR1cm47CiAK
ICAgICBSRUNUIGluc3BlY3RvclJlY3Q7Ci0gICAgR2V0Q2xpZW50UmVjdChtX3dlYlZpZXdId25k
LCAmaW5zcGVjdG9yUmVjdCk7CisgICAgR2V0Q2xpZW50UmVjdChtX2Zyb250ZW5kV2ViVmlld0h3
bmQsICZpbnNwZWN0b3JSZWN0KTsKICAgICB1bnNpZ25lZCBpbnNwZWN0b3JIZWlnaHQgPSBpbnNw
ZWN0b3JSZWN0LmJvdHRvbSAtIGluc3BlY3RvclJlY3QudG9wOwogCiAgICAgd2luZG93UG9zLT5j
eSAtPSBpbnNwZWN0b3JIZWlnaHQ7CiAKLSAgICBTZXRXaW5kb3dQb3MobV93ZWJWaWV3SHduZCwg
MCwgd2luZG93UG9zLT54LCB3aW5kb3dQb3MtPnkgKyB3aW5kb3dQb3MtPmN5LCB3aW5kb3dQb3Mt
PmN4LCBpbnNwZWN0b3JIZWlnaHQsIFNXUF9OT1pPUkRFUik7CisgICAgU2V0V2luZG93UG9zKG1f
ZnJvbnRlbmRXZWJWaWV3SHduZCwgMCwgd2luZG93UG9zLT54LCB3aW5kb3dQb3MtPnkgKyB3aW5k
b3dQb3MtPmN5LCB3aW5kb3dQb3MtPmN4LCBpbnNwZWN0b3JIZWlnaHQsIFNXUF9OT1pPUkRFUik7
CiB9CiAKIHN0YXRpYyBMUkVTVUxUIENBTExCQUNLIFdlYkluc3BlY3RvclduZFByb2MoSFdORCBo
d25kLCBVSU5UIG1zZywgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKIHsKLSAgICBXZWJJ
bnNwZWN0b3JDbGllbnQqIGNsaWVudCA9IHJlaW50ZXJwcmV0X2Nhc3Q8V2ViSW5zcGVjdG9yQ2xp
ZW50Kj4oOjpHZXRQcm9wKGh3bmQsIGtXZWJJbnNwZWN0b3JQb2ludGVyUHJvcCkpOworICAgIFdl
Ykluc3BlY3RvckZyb250ZW5kQ2xpZW50KiBjbGllbnQgPSByZWludGVycHJldF9jYXN0PFdlYklu
c3BlY3RvckZyb250ZW5kQ2xpZW50Kj4oOjpHZXRQcm9wKGh3bmQsIGtXZWJJbnNwZWN0b3JQb2lu
dGVyUHJvcCkpOwogICAgIGlmICghY2xpZW50KQogICAgICAgICByZXR1cm4gOjpEZWZXaW5kb3dQ
cm9jKGh3bmQsIG1zZywgd1BhcmFtLCBsUGFyYW0pOwogCkBAIC00NzEsNyArNDg4LDcgQEAgc3Rh
dGljIExSRVNVTFQgQ0FMTEJBQ0sgV2ViSW5zcGVjdG9yV25kUHJvYyhIV05EIGh3bmQsIFVJTlQg
bXNnLCBXUEFSQU0gd1BhcmFtLAogICAgIHJldHVybiA6OkRlZldpbmRvd1Byb2MoaHduZCwgbXNn
LCB3UGFyYW0sIGxQYXJhbSk7CiB9CiAKLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50Ojp3aW5kb3dS
ZWNlaXZlZE1lc3NhZ2UoSFdORCwgVUlOVCBtc2csIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFy
YW0pCit2b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50Ojp3aW5kb3dSZWNlaXZlZE1lc3Nh
Z2UoSFdORCwgVUlOVCBtc2csIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCiB7CiAgICAg
c3dpdGNoIChtc2cpIHsKICAgICAgICAgY2FzZSBXTV9XSU5ET1dQT1NDSEFOR0lORzoKZGlmZiAt
LWdpdCBhL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmggYi9X
ZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5oCmluZGV4IDNmNjVi
MGEuLjQ1NWUzYTEgMTAwNjQ0Ci0tLSBhL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViSW5z
cGVjdG9yQ2xpZW50LmgKKysrIGIvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0
b3JDbGllbnQuaApAQCAtMzEsNiArMzEsNyBAQAogCiAjaW5jbHVkZSA8V2ViQ29yZS9DT01QdHIu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckNsaWVudC5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGxh
dGZvcm1TdHJpbmcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1dpbmRvd01lc3NhZ2VMaXN0ZW5lci5o
PgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KQEAgLTM5LDQ0ICs0MCw2MCBAQAogY2xhc3MgV2Vi
Tm9kZUhpZ2hsaWdodDsKIGNsYXNzIFdlYlZpZXc7CiAKLWNsYXNzIFdlYkluc3BlY3RvckNsaWVu
dCA6IHB1YmxpYyBXZWJDb3JlOjpJbnNwZWN0b3JDbGllbnQsIFdlYkNvcmU6OldpbmRvd01lc3Nh
Z2VMaXN0ZW5lciB7CitjbGFzcyBXZWJJbnNwZWN0b3JDbGllbnQgOiBwdWJsaWMgV2ViQ29yZTo6
SW5zcGVjdG9yQ2xpZW50IHsKIHB1YmxpYzoKICAgICBXZWJJbnNwZWN0b3JDbGllbnQoV2ViVmll
dyopOwogCiAgICAgLy8gSW5zcGVjdG9yQ2xpZW50CiAgICAgdmlydHVhbCB2b2lkIGluc3BlY3Rv
ckRlc3Ryb3llZCgpOwogCi0gICAgdmlydHVhbCBXZWJDb3JlOjpQYWdlKiBjcmVhdGVQYWdlKCk7
Ci0KLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlN0cmluZyBsb2NhbGl6ZWRTdHJpbmdzVVJMKCk7Ci0K
LSAgICB2aXJ0dWFsIFdlYkNvcmU6OlN0cmluZyBoaWRkZW5QYW5lbHMoKTsKLQotICAgIHZpcnR1
YWwgdm9pZCBzaG93V2luZG93KCk7Ci0gICAgdmlydHVhbCB2b2lkIGNsb3NlV2luZG93KCk7Ci0g
ICAgdmlydHVhbCBib29sIHdpbmRvd1Zpc2libGUoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBhdHRh
Y2hXaW5kb3coKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoV2luZG93KCk7Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KTsKKyAgICB2
aXJ0dWFsIHZvaWQgb3Blbkluc3BlY3RvckZyb250ZW5kKFdlYkNvcmU6Okluc3BlY3RvckNvbnRy
b2xsZXIqKTsKIAogICAgIHZpcnR1YWwgdm9pZCBoaWdobGlnaHQoV2ViQ29yZTo6Tm9kZSopOwog
ICAgIHZpcnR1YWwgdm9pZCBoaWRlSGlnaGxpZ2h0KCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgaW5z
cGVjdGVkVVJMQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpTdHJpbmcmIG5ld1VSTCk7Ci0KICAgICB2
aXJ0dWFsIHZvaWQgcG9wdWxhdGVTZXR0aW5nKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYga2V5LCBX
ZWJDb3JlOjpTdHJpbmcqIHZhbHVlKTsKICAgICB2aXJ0dWFsIHZvaWQgc3RvcmVTZXR0aW5nKGNv
bnN0IFdlYkNvcmU6OlN0cmluZyYga2V5LCBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIHZhbHVlKTsK
IAotICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0b3JXaW5kb3dPYmplY3RDbGVhcmVkKCk7CisgICAg
dm9pZCB1cGRhdGVIaWdobGlnaHQoKTsKKyAgICB2b2lkIGZyb250ZW5kQ2xvc2luZygpIHsgbV9m
cm9udGVuZEh3bmQgPSAwOyB9CiAKIHByaXZhdGU6CiAgICAgfldlYkluc3BlY3RvckNsaWVudCgp
OwogCisgICAgV2ViVmlldyogbV9pbnNwZWN0ZWRXZWJWaWV3OworICAgIEhXTkQgbV9pbnNwZWN0
ZWRXZWJWaWV3SHduZDsKKyAgICBIV05EIG1fZnJvbnRlbmRId25kOworCisgICAgT3duUHRyPFdl
Yk5vZGVIaWdobGlnaHQ+IG1faGlnaGxpZ2h0OworfTsKKworY2xhc3MgV2ViSW5zcGVjdG9yRnJv
bnRlbmRDbGllbnQgOiBwdWJsaWMgV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2Nh
bCwgV2ViQ29yZTo6V2luZG93TWVzc2FnZUxpc3RlbmVyIHsKK3B1YmxpYzoKKyAgICBXZWJJbnNw
ZWN0b3JGcm9udGVuZENsaWVudChXZWJWaWV3KiBpbnNwZWN0ZWRXZWJWaWV3LCBIV05EIGluc3Bl
Y3RlZFdlYlZpZXdId25kLCBIV05EIGZyb250ZW5kSHduZCwgY29uc3QgQ09NUHRyPFdlYlZpZXc+
JiBmcm90bmVuZFdlYlZpZXcsIEhXTkQgZnJvbnRlbmRXZWJWaWV3SHduZCwgV2ViSW5zcGVjdG9y
Q2xpZW50KiBpbnNwZWN0b3JDbGllbnQpOworCisgICAgdmlydHVhbCB2b2lkIGZyb250ZW5kTG9h
ZGVkKCk7CisgICAgCisgICAgdmlydHVhbCBXZWJDb3JlOjpTdHJpbmcgbG9jYWxpemVkU3RyaW5n
c1VSTCgpOworICAgIHZpcnR1YWwgV2ViQ29yZTo6U3RyaW5nIGhpZGRlblBhbmVscygpOworICAg
IAorICAgIHZpcnR1YWwgdm9pZCBicmluZ1RvRnJvbnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xv
c2VXaW5kb3coKTsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoV2luZG93KCk7CisgICAg
dmlydHVhbCB2b2lkIGRldGFjaFdpbmRvdygpOworICAgIAorICAgIHZpcnR1YWwgdm9pZCBzZXRB
dHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpOworICAgIHZpcnR1YWwgdm9pZCBp
bnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgbmV3VVJMKTsKKworcHJp
dmF0ZToKKyAgICB+V2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQoKTsKKwogICAgIHZvaWQgY2xv
c2VXaW5kb3dXaXRob3V0Tm90aWZpY2F0aW9ucygpOwogICAgIHZvaWQgc2hvd1dpbmRvd1dpdGhv
dXROb3RpZmljYXRpb25zKCk7CiAKKyAgICB2b2lkIGRlc3Ryb3lJbnNwZWN0b3JWaWV3KCk7CisK
ICAgICB2b2lkIHVwZGF0ZVdpbmRvd1RpdGxlKCk7CiAKICAgICBMUkVTVUxUIG9uR2V0TWluTWF4
SW5mbyhXUEFSQU0sIExQQVJBTSk7CkBAIC05MCwxNiArMTA3LDE2IEBAIHByaXZhdGU6CiAKICAg
ICBXZWJWaWV3KiBtX2luc3BlY3RlZFdlYlZpZXc7CiAgICAgSFdORCBtX2luc3BlY3RlZFdlYlZp
ZXdId25kOwotICAgIEhXTkQgbV9od25kOwotICAgIENPTVB0cjxXZWJWaWV3PiBtX3dlYlZpZXc7
Ci0gICAgSFdORCBtX3dlYlZpZXdId25kOworICAgIEhXTkQgbV9mcm9udGVuZEh3bmQ7CisgICAg
V2ViSW5zcGVjdG9yQ2xpZW50KiBtX2luc3BlY3RvckNsaWVudDsKKyAgICBDT01QdHI8V2ViVmll
dz4gbV9mcm9udGVuZFdlYlZpZXc7CisgICAgSFdORCBtX2Zyb250ZW5kV2ViVmlld0h3bmQ7CiAK
ICAgICBib29sIG1fc2hvdWxkQXR0YWNoV2hlblNob3duOwogICAgIGJvb2wgbV9hdHRhY2hlZDsK
IAotICAgIE93blB0cjxXZWJOb2RlSGlnaGxpZ2h0PiBtX2hpZ2hsaWdodDsKLQogICAgIFdlYkNv
cmU6OlN0cmluZyBtX2luc3BlY3RlZFVSTDsKKyAgICBib29sIG1fZGVzdHJveWluZ0luc3BlY3Rv
clZpZXc7CiAKICAgICBzdGF0aWMgZnJpZW5kIExSRVNVTFQgQ0FMTEJBQ0sgV2ViSW5zcGVjdG9y
V25kUHJvYyhIV05ELCBVSU5ULCBXUEFSQU0sIExQQVJBTSk7CiB9OwpkaWZmIC0tZ2l0IGEvV2Vi
S2l0L3dpbi9XZWJJbnNwZWN0b3IuY3BwIGIvV2ViS2l0L3dpbi9XZWJJbnNwZWN0b3IuY3BwCmlu
ZGV4IGU0YWMzMmIuLjAzMzc3MTEgMTAwNjQ0Ci0tLSBhL1dlYktpdC93aW4vV2ViSW5zcGVjdG9y
LmNwcAorKysgYi9XZWJLaXQvd2luL1dlYkluc3BlY3Rvci5jcHAKQEAgLTEzMSwxOSArMTMxLDEx
IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViSW5zcGVjdG9yOjpjbG9zZSgpCiAKIEhS
RVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViSW5zcGVjdG9yOjphdHRhY2goKQogewotICAgIGlm
IChtX3dlYlZpZXcpCi0gICAgICAgIGlmIChQYWdlKiBwYWdlID0gbV93ZWJWaWV3LT5wYWdlKCkp
Ci0gICAgICAgICAgICBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmF0dGFjaFdpbmRvdygp
OwotCiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2Vi
SW5zcGVjdG9yOjpkZXRhY2goKQogewotICAgIGlmIChtX3dlYlZpZXcpCi0gICAgICAgIGlmIChQ
YWdlKiBwYWdlID0gbV93ZWJWaWV3LT5wYWdlKCkpCi0gICAgICAgICAgICBwYWdlLT5pbnNwZWN0
b3JDb250cm9sbGVyKCktPmRldGFjaFdpbmRvdygpOwotCiAgICAgcmV0dXJuIFNfT0s7CiB9CiAK
ZGlmZiAtLWdpdCBhL1dlYktpdC93eC9DaGFuZ2VMb2cgYi9XZWJLaXQvd3gvQ2hhbmdlTG9nCmlu
ZGV4IDRhYzc2MDkuLmRmNzJjZDUgMTAwNjQ0Ci0tLSBhL1dlYktpdC93eC9DaGFuZ2VMb2cKKysr
IGIvV2ViS2l0L3d4L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEwLTAzLTEwICBZdXJ5
IFNlbWlraGF0c2t5IDx5dXJ5c0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW50cm9kdWNlIEluc3BlY3RvckZyb250ZW5kQ2xp
ZW50IHRoYXQgcHJvdmlkZXMgSW5zcGVjdG9yRnJvbnRlbmQgd2l0aCBhbiBpbnRlcmZhY2UgdG8g
dGhlIGVtYmVkZGVyLiBJbnNwZWN0b3JDbGllbnQgbm93IHNlcnZlcyBhcyBhIGRlbGVnYXRlIGZv
ciBJbnNwZWN0b3JDb250cm9sbGVyIGFuZCBkb2VzIG5vdCBjb250YWluIG1ldGhvZHMgZm9yIG1h
bmFnaW5nIGluc3BlY3RvciBmcm9udGVuZCB3aW5kb3cuIFRoYXQgYWxsb3dzIHRvIGNyZWF0ZSBy
ZW1vdGUgSW5zcGVjdG9yRnJvbnRlbmRIb3N0LgorCisgICAgICAgIEludHJvZHVjZSBJbnNwZWN0
b3JGcm9udGVuZENsaWVudCB0aGF0IHdvdWxkIHByb3ZpZGUgSW5zcGVjdG9yRnJvbnRlbmQgd2l0
aCBhbiBpbnRlcmZhY2UgdG8gdGhlIGVtYmVkZGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNTAzNgorCisgICAgICAgICogV2ViS2l0U3VwcG9ydC9J
bnNwZWN0b3JDbGllbnRXeC5jcHA6CisgICAgICAgICogV2ViS2l0U3VwcG9ydC9JbnNwZWN0b3JD
bGllbnRXeC5oOgorCiAyMDEwLTAzLTAyICBBZGFtIFRyZWF0ICA8YXRyZWF0QHJpbS5jb20+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2ZSBIeWF0dC4KZGlmZiAtLWdpdCBhL1dlYktpdC93eC9X
ZWJLaXRTdXBwb3J0L0luc3BlY3RvckNsaWVudFd4LmNwcCBiL1dlYktpdC93eC9XZWJLaXRTdXBw
b3J0L0luc3BlY3RvckNsaWVudFd4LmNwcAppbmRleCBmZjIxYWUwLi40M2ZiYjJiIDEwMDY0NAot
LS0gYS9XZWJLaXQvd3gvV2ViS2l0U3VwcG9ydC9JbnNwZWN0b3JDbGllbnRXeC5jcHAKKysrIGIv
V2ViS2l0L3d4L1dlYktpdFN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50V3guY3BwCkBAIC00Nyw0NSAr
NDcsOCBAQCB2b2lkIEluc3BlY3RvckNsaWVudFd4OjppbnNwZWN0b3JEZXN0cm95ZWQoKQogICAg
IG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLVBhZ2UqIEluc3BlY3RvckNsaWVudFd4OjpjcmVhdGVQ
YWdlKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi1TdHJp
bmcgSW5zcGVjdG9yQ2xpZW50V3g6OmxvY2FsaXplZFN0cmluZ3NVUkwoKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1TdHJpbmcgSW5zcGVjdG9y
Q2xpZW50V3g6OmhpZGRlblBhbmVscygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBy
ZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ2xpZW50V3g6OnNob3dXaW5kb3co
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0gICAgCi12b2lkIEluc3BlY3RvckNsaWVu
dFd4OjpjbG9zZVdpbmRvdygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBJ
bnNwZWN0b3JDbGllbnRXeDo6YXR0YWNoV2luZG93KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCi12b2lkIEluc3BlY3RvckNsaWVudFd4OjpkZXRhY2hXaW5kb3coKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci19CiAKLXZvaWQgSW5zcGVjdG9yQ2xpZW50V3g6OnNldEF0dGFjaGVk
V2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkKK3ZvaWQgSW5zcGVjdG9yQ2xpZW50V3g6Om9w
ZW5JbnNwZWN0b3JGcm9udGVuZChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyKik7CiB7CiAg
ICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KQEAgLTEwMCwxMSArNjMsNiBAQCB2b2lkIEluc3BlY3Rv
ckNsaWVudFd4OjpoaWRlSGlnaGxpZ2h0KCkKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12
b2lkIEluc3BlY3RvckNsaWVudFd4OjppbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYg
bmV3VVJMKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KIHZvaWQgSW5zcGVjdG9yQ2xp
ZW50V3g6OnBvcHVsYXRlU2V0dGluZyhjb25zdCBTdHJpbmcmIGtleSwgU3RyaW5nKiBzZXR0aW5n
KQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CkBAIC0xMTUsOSArNzMsNCBAQCB2b2lkIEluc3Bl
Y3RvckNsaWVudFd4OjpzdG9yZVNldHRpbmcoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmlu
ZyYgc2V0dGluZykKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIEluc3BlY3RvckNs
aWVudFd4OjppbnNwZWN0b3JXaW5kb3dPYmplY3RDbGVhcmVkKCkKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotfQotCiB9OwpkaWZmIC0tZ2l0IGEvV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQvSW5z
cGVjdG9yQ2xpZW50V3guaCBiL1dlYktpdC93eC9XZWJLaXRTdXBwb3J0L0luc3BlY3RvckNsaWVu
dFd4LmgKaW5kZXggZjkwNTgxNy4uNzY3NWRjMSAxMDA2NDQKLS0tIGEvV2ViS2l0L3d4L1dlYktp
dFN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50V3guaAorKysgYi9XZWJLaXQvd3gvV2ViS2l0U3VwcG9y
dC9JbnNwZWN0b3JDbGllbnRXeC5oCkBAIC00MSwyOSArNDEsMTMgQEAgcHVibGljOgogCiAgICAg
dmlydHVhbCB2b2lkIGluc3BlY3RvckRlc3Ryb3llZCgpOwogCi0gICAgdmlydHVhbCBQYWdlKiBj
cmVhdGVQYWdlKCk7Ci0KLSAgICB2aXJ0dWFsIFN0cmluZyBsb2NhbGl6ZWRTdHJpbmdzVVJMKCk7
Ci0KLSAgICB2aXJ0dWFsIFN0cmluZyBoaWRkZW5QYW5lbHMoKTsKLQotICAgIHZpcnR1YWwgdm9p
ZCBzaG93V2luZG93KCk7Ci0gICAgdmlydHVhbCB2b2lkIGNsb3NlV2luZG93KCk7Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgYXR0YWNoV2luZG93KCk7Ci0gICAgdmlydHVhbCB2b2lkIGRldGFjaFdpbmRv
dygpOwotCi0gICAgdmlydHVhbCB2b2lkIHNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVk
IGhlaWdodCk7CisgICAgdmlydHVhbCB2b2lkIG9wZW5JbnNwZWN0b3JGcm9udGVuZChXZWJDb3Jl
OjpJbnNwZWN0b3JDb250cm9sbGVyKik7CiAKICAgICB2aXJ0dWFsIHZvaWQgaGlnaGxpZ2h0KE5v
ZGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgaGlkZUhpZ2hsaWdodCgpOwogCi0gICAgdmlydHVhbCB2
b2lkIGluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJiBuZXdVUkwpOwotCiAgICAgdmly
dHVhbCB2b2lkIHBvcHVsYXRlU2V0dGluZyhjb25zdCBTdHJpbmcmIGtleSwgU3RyaW5nKiB2YWx1
ZSk7CiAgICAgdmlydHVhbCB2b2lkIHN0b3JlU2V0dGluZyhjb25zdCBTdHJpbmcmIGtleSwgY29u
c3QgU3RyaW5nJiB2YWx1ZSk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgaW5zcGVjdG9yV2luZG93T2Jq
ZWN0Q2xlYXJlZCgpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50494</attachid>
            <date>2010-03-11 06:27:30 -0800</date>
            <delta_ts>2010-03-11 07:23:32 -0800</delta_ts>
            <desc>patch</desc>
            <filename>frontend-client5.patch</filename>
            <type>text/plain</type>
            <size>163006</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MzUyZGJkYy4uZjQxMTM0NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMTAgQEAKKzIwMTAtMDMtMTEgIFl1cnkgU2VtaWto
YXRza3kgPHl1cnlzQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBJbnRyb2R1Y2UgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQgdGhh
dCBwcm92aWRlcyBJbnNwZWN0b3JGcm9udGVuZCB3aXRoIGFuIGludGVyZmFjZSB0byB0aGUgZW1i
ZWRkZXIuIEluc3BlY3RvckNsaWVudCBub3cgc2VydmVzIGFzIGEgZGVsZWdhdGUgZm9yIEluc3Bl
Y3RvckNvbnRyb2xsZXIgYW5kIGRvZXMgbm90IGNvbnRhaW4gbWV0aG9kcyBmb3IgbWFuYWdpbmcg
aW5zcGVjdG9yIGZyb250ZW5kIHdpbmRvdy4gVGhhdCBhbGxvd3MgdG8gY3JlYXRlIHJlbW90ZSBJ
bnNwZWN0b3JGcm9udGVuZEhvc3QuCisKKyAgICAgICAgSW50cm9kdWNlIEluc3BlY3RvckZyb250
ZW5kQ2xpZW50IHRoYXQgd291bGQgcHJvdmlkZSBJbnNwZWN0b3JGcm9udGVuZCB3aXRoIGFuIGlu
dGVyZmFjZSB0byB0aGUgZW1iZWRkZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTM1MDM2CisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiAoT09QUyEpCisK
KyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLkluc3BlY3Rvci5l
eHA6CisgICAgICAgICogV2ViQ29yZS5iYXNlLmV4cDoKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6
CisgICAgICAgICogV2ViQ29yZS5vcmRlcjoKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAg
ICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaW5zcGVj
dG9yL0NvbnNvbGVNZXNzYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnNvbGVNZXNzYWdl
OjphZGRUb0Zyb250ZW5kKToKKyAgICAgICAgKiBpbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuaDoK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ2xpZW50Lmg6CisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
Q29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JDb250cm9sbGVyOjp+SW5zcGVjdG9yQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0ZWRQYWdlRGVzdHJveWVkKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OndpbmRvd1Zpc2libGUpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZnJvbnRlbmRSZWFkeSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjp3aWxsQ2xvc2VGcm9udGVuZCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjphZGRDb25zb2xlTWVzc2FnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRJbnNwZWN0b3JGcm9udGVuZENs
aWVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0ZWRX
aW5kb3dTY3JpcHRPYmplY3RDbGVhcmVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNv
bnRyb2xsZXI6OnNldEZyb250ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRy
b2xsZXI6OnNob3cpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6Y2xv
c2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6cmVsZWFzZURPTUFn
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnBvcHVsYXRlU2Ny
aXB0T2JqZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRD
b21taXRMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmdldFBy
b2ZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZW5hYmxlRGVi
dWdnZXIpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpoYXNJbnNwZWN0b3JGcm9udGVuZENs
aWVudCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kOjpJbnNwZWN0b3JGcm9udGVuZCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZDo6fkluc3BlY3RvckZyb250ZW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kOjphZGRDb25zb2xlTWVzc2FnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZDo6YnJpbmdUb0Zyb250KToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kOjppbnNwZWN0ZWRVUkxDaGFuZ2VkKToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuaDoKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JGcm9udGVuZENsaWVudDo6fkluc3BlY3RvckZyb250ZW5kQ2xpZW50KToKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RnJvbnRlbmRNZW51UHJvdmlkZXI6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpGcm9udGVuZE1lbnVQcm92aWRlcjo6ZGlzY29ubmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGcm9udGVuZE1lbnVQcm92aWRlcjo6RnJvbnRlbmRNZW51UHJvdmlkZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6RnJvbnRlbmRNZW51UHJvdmlkZXI6On5Gcm9udGVuZE1lbnVQcm92aWRl
cik6CisgICAgICAgIChXZWJDb3JlOjpGcm9udGVuZE1lbnVQcm92aWRlcjo6cG9wdWxhdGVDb250
ZXh0TWVudSk6CisgICAgICAgIChXZWJDb3JlOjpGcm9udGVuZE1lbnVQcm92aWRlcjo6Y29udGV4
dE1lbnVJdGVtU2VsZWN0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJvbnRlbmRNZW51UHJvdmlk
ZXI6OmNvbnRleHRNZW51Q2xlYXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9u
dGVuZENsaWVudExvY2FsOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6On5JbnNwZWN0b3JGcm9udGVu
ZENsaWVudExvY2FsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50
TG9jYWw6OndpbmRvd09iamVjdENsZWFyZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RnJvbnRlbmRDbGllbnRMb2NhbDo6ZnJvbnRlbmRMb2FkZWQpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6Y2FuQXR0YWNoV2luZG93KToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OmNoYW5nZUF0dGFjaGVkV2lu
ZG93SGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9j
YWw6Om1vdmVXaW5kb3dCeSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENs
aWVudExvY2FsOjpzaG93Q29udGV4dE1lbnUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RnJvbnRlbmRDbGllbnRMb2NhbDo6c2V0QXR0YWNoZWRXaW5kb3cpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6cmVzdG9yZUF0dGFjaGVkV2luZG93SGVp
Z2h0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OmNv
bnN0cmFpbmVkQXR0YWNoZWRXaW5kb3dIZWlnaHQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmg6IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9J
bnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJv
bnRlbmRIb3N0OjpJbnNwZWN0b3JGcm9udGVuZEhvc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yRnJvbnRlbmRIb3N0Ojp+SW5zcGVjdG9yRnJvbnRlbmRIb3N0KToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckZyb250ZW5kSG9zdDo6bG9hZGVkKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckZyb250ZW5kSG9zdDo6YXR0YWNoKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckZyb250ZW5kSG9zdDo6ZGV0YWNoKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZy
b250ZW5kSG9zdDo6Y2xvc2VXaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJv
bnRlbmRIb3N0OjpicmluZ1RvRnJvbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJv
bnRlbmRIb3N0OjppbnNwZWN0ZWRVUkxDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckZyb250ZW5kSG9zdDo6Y2FuQXR0YWNoV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckZyb250ZW5kSG9zdDo6c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRIb3N0Ojptb3ZlV2luZG93QnkpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRIb3N0OjpzaG93Q29udGV4dE1lbnUpOgorICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckZyb250ZW5kSG9zdDo6Y3JlYXRlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yRnJvbnRlbmRIb3N0LmlkbDoKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0lu
c3BlY3RvckZyb250ZW5kSG9zdFN0dWIuanM6CisgICAgICAgICguV2ViSW5zcGVjdG9yLkluc3Bl
Y3RvckZyb250ZW5kSG9zdFN0dWIucHJvdG90eXBlLmJyaW5nVG9Gcm9udCk6CisgICAgICAgICgu
V2ViSW5zcGVjdG9yLkluc3BlY3RvckZyb250ZW5kSG9zdFN0dWIucHJvdG90eXBlLmluc3BlY3Rl
ZFVSTENoYW5nZWQpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpz
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLmxvYWRlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
Y2xvc2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLmJyaW5nVG9Gcm9udCk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuaW5zcGVjdGVkVVJMQ2hhbmdlZCk6CisgICAgICAgICogbG9hZGVyL0VtcHR5
Q2xpZW50cy5oOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlJbnNwZWN0b3JDbGllbnQ6Om9wZW5J
bnNwZWN0b3JGcm9udGVuZCk6CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpkaXNwYXRjaERpZENsZWFyV2luZG93T2JqZWN0
SW5Xb3JsZCk6CisgICAgICAgICogcGFnZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBh
Z2U6OlBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6flBhZ2UpOgorICAgICAgICAqIHBh
Z2UvUGFnZS5oOgorICAgICAgICAqIHBsYXRmb3JtL0NvbnRleHRNZW51LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRleHRNZW51Ojpwb3B1bGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250
ZXh0TWVudTo6YWRkSW5zcGVjdEVsZW1lbnRJdGVtKToKKwogMjAxMC0wMy0xMCAgU3RldmUgQmxv
Y2sgIDxzdGV2ZWJsb2NrQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSmVyZW15
IE9ybG93LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1dlYkNvcmUvR05V
bWFrZWZpbGUuYW0KaW5kZXggMWI0ZmRiYy4uOTcyM2RkOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9H
TlVtYWtlZmlsZS5hbQorKysgYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC0xMjM0LDYgKzEy
MzQsOSBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNvbnRyb2xsZXIuaCBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuY3Bw
IFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5oIFwKKwlXZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudC5oIFwKKwlXZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmNwcCBcCisJV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5oIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JGcm9udGVuZEhvc3QuY3BwIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVu
ZEhvc3QuaCBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2UuY3BwIFwKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5JbnNwZWN0b3IuZXhwIGIvV2ViQ29yZS9XZWJDb3Jl
Lkluc3BlY3Rvci5leHAKaW5kZXggMzc5YjdhMi4uZDVjMjFjMyAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9XZWJDb3JlLkluc3BlY3Rvci5leHAKKysrIGIvV2ViQ29yZS9XZWJDb3JlLkluc3BlY3Rvci5l
eHAKQEAgLTEsMTEgKzEsOSBAQAogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTBz
ZXRTZXR0aW5nRVJLTlNfNlN0cmluZ0VTM18KLV9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJv
bGxlcjEyYXR0YWNoV2luZG93RXYKLV9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjEy
ZGV0YWNoV2luZG93RXYKIF9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjE0ZW5hYmxl
RGVidWdnZXJFdgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTRlbmFibGVQcm9m
aWxlckViYgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTVkaXNhYmxlRGVidWdn
ZXJFYgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTVkaXNhYmxlUHJvZmlsZXJF
YgotX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTZzZXRXaW5kb3dWaXNpYmxlRWJi
CitfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIyNnNldEluc3BlY3RvckZyb250ZW5k
Q2xpZW50RU4zV1RGMTBQYXNzT3duUHRySU5TXzIzSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRFRUUK
IF9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjI2c3RvcFVzZXJJbml0aWF0ZWRQcm9m
aWxpbmdFdgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMjdzdGFydFVzZXJJbml0
aWF0ZWRQcm9maWxpbmdFUE5TXzVUaW1lcklTMF9FRQogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JD
b250cm9sbGVyNHNob3dFdgpAQCAtMTgsMyArMTYsMTMgQEAgX19aTks3V2ViQ29yZTE5SW5zcGVj
dG9yQ29udHJvbGxlcjdlbmFibGVkRXYKIF9fWk5LN1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xs
ZXI3c2V0dGluZ0VSS05TXzZTdHJpbmdFCiBfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xs
ZXIyMXN0YXJ0VGltZWxpbmVQcm9maWxlckV2CiBfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRy
b2xsZXIyMHN0b3BUaW1lbGluZVByb2ZpbGVyRXYKK19fWk43V2ViQ29yZTI4SW5zcGVjdG9yRnJv
bnRlbmRDbGllbnRMb2NhbEMyRVBOU18xOUluc3BlY3RvckNvbnRyb2xsZXJFUE5TXzRQYWdlRQor
X19aTjdXZWJDb3JlMjhJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsRDJFdgorX19aTjdXZWJD
b3JlMjhJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsMTl3aW5kb3dPYmplY3RDbGVhcmVkRXYK
K19fWk43V2ViQ29yZTI4SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDE0ZnJvbnRlbmRMb2Fk
ZWRFdgorX19aTjdXZWJDb3JlMjhJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsMjdyZXN0b3Jl
QXR0YWNoZWRXaW5kb3dIZWlnaHRFdgorX19aTjdXZWJDb3JlMjhJbnNwZWN0b3JGcm9udGVuZENs
aWVudExvY2FsMTJtb3ZlV2luZG93QnlFZmYKK19fWk43V2ViQ29yZTI4SW5zcGVjdG9yRnJvbnRl
bmRDbGllbnRMb2NhbDE1Y2FuQXR0YWNoV2luZG93RXYKK19fWk43V2ViQ29yZTI4SW5zcGVjdG9y
RnJvbnRlbmRDbGllbnRMb2NhbDE1c2hvd0NvbnRleHRNZW51RVBOU181RXZlbnRFUktOM1dURjZW
ZWN0b3JJUE5TXzE1Q29udGV4dE1lbnVJdGVtRUxtMEVFRQorX19aTjdXZWJDb3JlMjhJbnNwZWN0
b3JGcm9udGVuZENsaWVudExvY2FsMTdzZXRBdHRhY2hlZFdpbmRvd0ViCitfX1pON1dlYkNvcmUy
OEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwyNmNoYW5nZUF0dGFjaGVkV2luZG93SGVpZ2h0
RWoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cCBiL1dlYkNvcmUvV2ViQ29y
ZS5iYXNlLmV4cAppbmRleCA0MzY0YWVhLi45YmFmYWQ3IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dl
YkNvcmUuYmFzZS5leHAKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCkBAIC04NzQsNyAr
ODc0LDYgQEAgX19aTks3V2ViQ29yZTE2VmlzaWJsZVNlbGVjdGlvbjIzaXNDb250ZW50UmljaGx5
RWRpdGFibGVFdgogX19aTks3V2ViQ29yZTE2VmlzaWJsZVNlbGVjdGlvbjVpc0FsbEVOU18yMVN0
YXlJbkVkaXRhYmxlQ29udGVudEUKIF9fWk5LN1dlYkNvcmUxN1Jlc291cmNlRXJyb3JCYXNlOGxh
enlJbml0RXYKIF9fWk5LN1dlYkNvcmUxOUFuaW1hdGlvbkNvbnRyb2xsZXIyNG51bWJlck9mQWN0
aXZlQW5pbWF0aW9uc0V2Ci1fX1pOSzdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTVjYW5B
dHRhY2hXaW5kb3dFdgogX19aTks3V2ViQ29yZTE5UmVzb3VyY2VSZXF1ZXN0QmFzZTEwaHR0cE1l
dGhvZEV2CiBfX1pOSzdXZWJDb3JlMTlSZXNvdXJjZVJlcXVlc3RCYXNlM3VybEV2CiBfX1pOSzdX
ZWJDb3JlMTlSZXNvdXJjZVJlcXVlc3RCYXNlN2lzRW1wdHlFdgpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA3MWZhNjlkLi4zNzI2
MWEyIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9XZWJDb3JlL1dlYkNv
cmUuZ3lwaQpAQCAtMTYyNiw2ICsxNjI2LDkgQEAKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5z
cGVjdG9yRE9NU3RvcmFnZVJlc291cmNlLmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNw
ZWN0b3JGcm9udGVuZC5jcHAnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JGcm9u
dGVuZC5oJywKKyAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQu
aCcsCisgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwu
Y3BwJywKKyAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2Nh
bC5oJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcCcs
CiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5oJywKICAgICAg
ICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2UuY3BwJywKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvV2ViQ29yZS5vcmRlciBiL1dlYkNvcmUvV2ViQ29yZS5vcmRlcgppbmRleCBhOGQyMGZk
Li40OGYzMjFiIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUub3JkZXIKKysrIGIvV2ViQ29y
ZS9XZWJDb3JlLm9yZGVyCkBAIC0yMzc4OSw3ICsyMzc4OSw2IEBAIF9fWk43V2ViQ29yZTE4U2Ny
aXB0RnVuY3Rpb25DYWxsMTRhcHBlbmRBcmd1bWVudEViCiBfX1pON1dlYkNvcmUxOFNjcmlwdEZ1
bmN0aW9uQ2FsbDRjYWxsRXYKIF9fWk43V2ViQ29yZTE4U2NyaXB0RnVuY3Rpb25DYWxsNGNhbGxF
UmJiCiBfX1pON1dlYkNvcmU0NGpzSW5zcGVjdG9yQ29udHJvbGxlclByb3RvdHlwZUZ1bmN0aW9u
QXR0YWNoRVBOM0pTQzlFeGVjU3RhdGVFUE5TMF84SlNPYmplY3RFTlMwXzdKU1ZhbHVlRVJLTlMw
XzdBcmdMaXN0RQotX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTJhdHRhY2hXaW5k
b3dFdgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMjFwb3B1bGF0ZVNjcmlwdE9i
amVjdHNFdgogX19aTjdXZWJDb3JlTDE4Y2FsbFNpbXBsZUZ1bmN0aW9uRVBOM0pTQzlFeGVjU3Rh
dGVFUktOU18xMlNjcmlwdE9iamVjdEVQS2MKIF9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJv
bGxlcjlzaG93UGFuZWxFTlMwXzEzU3BlY2lhbFBhbmVsc0UKQEAgLTIzODUwLDcgKzIzODQ5LDYg
QEAgX19aTjdXZWJDb3JlTDE5ZHJhd0hpZ2hsaWdodEZvckJveEVSTlNfMTVHcmFwaGljc0NvbnRl
eHRFUktOU185RmxvYXRRdWFkRVM0X1M0X1MKIF9fWk43V2ViQ29yZUwxNmRyYXdPdXRsaW5lZFF1
YWRFUk5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfOUZsb2F0UXVhZEVSS05TXzVDb2xvckUKIF9f
Wk43V2ViQ29yZUwxMHF1YWRUb1BhdGhFUktOU185RmxvYXRRdWFkRQogX19aTjdXZWJDb3JlNDRq
c0luc3BlY3RvckNvbnRyb2xsZXJQcm90b3R5cGVGdW5jdGlvbkRldGFjaEVQTjNKU0M5RXhlY1N0
YXRlRVBOUzBfOEpTT2JqZWN0RU5TMF83SlNWYWx1ZUVSS05TMF83QXJnTGlzdEUKLV9fWk43V2Vi
Q29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjEyZGV0YWNoV2luZG93RXYKIF9fWk43V2ViQ29yZTU2
anNJbnNwZWN0b3JDb250cm9sbGVyUHJvdG90eXBlRnVuY3Rpb25Nb3ZlQnlVbnJlc3RyaWN0ZWRF
UE4zSlNDOUV4ZWNTdGF0ZUVQTlMwXzhKU09iamVjdEVOUzBfN0pTVmFsdWVFUktOUzBfN0FyZ0wK
IF9fWk5LN1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIxMm1vdmVXaW5kb3dCeUVmZgogX19a
TjdXZWJDb3JlTDI0ZHJhd091dGxpbmVkUXVhZFdpdGhDbGlwRVJOU18xNUdyYXBoaWNzQ29udGV4
dEVSS05TXzlGbG9hdFF1YWRFUzRfUktOU181Q29sb3JFCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dl
YkNvcmUucHJvIGIvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCAwMmRlMTk4Li5kMDM1ZDk4IDEw
MDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUucHJvCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8K
QEAgLTY5NSw2ICs2OTUsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9y
RE9NQWdlbnQuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNl
LmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmNwcCBcCisgICAgaW5zcGVj
dG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5z
cGVjdG9yRnJvbnRlbmRIb3N0LmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNl
LmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuY3BwIFwKQEAgLTEz
OTgsNiArMTM5OSw4IEBAIEhFQURFUlMgKz0gXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JEYXRh
YmFzZVJlc291cmNlLmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlUmVzb3Vy
Y2UuaCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmggXAorICAgIGluc3BlY3Rv
ci9JbnNwZWN0b3JGcm9udGVuZENsaWVudC5oIFwKKyAgICBpbnNwZWN0b3IvSW5zcGVjdG9yRnJv
bnRlbmRDbGllbnRMb2NhbC5oIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0
LmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZS5oIFwKICAgICBpbnNwZWN0b3Iv
SW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKaW5kZXggMTBmN2UwZS4uZTM2OGYyMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTQ4NTYsNiArNDg1Niw5IEBACiAJCUVENTAxREM2
MEIyNDlGMjkwMEFFMThEOSAvKiBFZGl0b3JNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFRDUwMURDNTBCMjQ5RjI5MDBBRTE4RDkgLyogRWRpdG9y
TWFjLm1tICovOyB9OwogCQlFREUzQTUwMDBDN0E0MzA2MDA5NTZBMzcgLyogQ29sb3JNYWMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEVERTNBNEZGMEM3
QTQzMDYwMDk1NkEzNyAvKiBDb2xvck1hYy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCUVERUM5ODAzMEFFRDdFMTcwMDU5MTM3RiAvKiBXZWJDb3Jl
UHJlZml4LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
REVDOTgwMjBBRUQ3RTE3MDA1OTEzN0YgLyogV2ViQ29yZVByZWZpeC5oICovOyB9OworCQlGMzQ0
QzcxNDExMjVCODJDMDBGMjZFRUUgLyogSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEYzNDRDNzEyMTEyNUI4MkMw
MEYyNkVFRSAvKiBJbnNwZWN0b3JGcm9udGVuZENsaWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUYzNDRDNzUzMTEyOTREOUQwMEYyNkVFRSAv
KiBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGMzQ0Qzc1MjExMjk0RDlEMDBGMjZFRUUgLyogSW5zcGVj
dG9yRnJvbnRlbmRDbGllbnRMb2NhbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCUYzNDRDNzU4MTEyOTRGRjYwMEYyNkVFRSAvKiBJbnNwZWN0b3JG
cm9udGVuZENsaWVudExvY2FsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEYzNDRDNzU3MTEyOTRGRjYwMEYyNkVFRSAvKiBJbnNwZWN0b3JGcm9udGVu
ZENsaWVudExvY2FsLmNwcCAqLzsgfTsKIAkJRjM2NDRBRkYxMTE5ODA1OTAwRTBENTM3IC8qIElu
amVjdGVkU2NyaXB0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEYzNjQ0QUZEMTExOTgwNTkwMEUwRDUzNyAvKiBJbmplY3RlZFNjcmlwdC5jcHAgKi87
IH07CiAJCUYzNjQ0QjAwMTExOTgwNTkwMEUwRDUzNyAvKiBJbmplY3RlZFNjcmlwdC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjM2NDRBRkUxMTE5ODA1
OTAwRTBENTM3IC8qIEluamVjdGVkU2NyaXB0LmggKi87IH07CiAJCUY0RUFGNEFFMTBDNzQyQjEw
MDkxMDBEMyAvKiBPcGVuVHlwZVNhbml0aXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNEVBRjRBQzEwQzc0MkIxMDA5MTAwRDMgLyogT3BlblR5
cGVTYW5pdGl6ZXIuY3BwICovOyB9OwpAQCAtMTAxODksNiArMTAxOTIsOSBAQAogCQlFRDUwMURD
NTBCMjQ5RjI5MDBBRTE4RDkgLyogRWRpdG9yTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgbmFtZSA9IEVkaXRvck1hYy5tbTsgcGF0aCA9IG1hYy9FZGl0b3JNYWMubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUVERTNBNEZGMEM3QTQzMDYwMDk1NkEzNyAv
KiBDb2xvck1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2xvck1hYy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFREVDOTgwMjBBRUQ3RTE3MDA1OTEzN0Yg
LyogV2ViQ29yZVByZWZpeC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vi
Q29yZVByZWZpeC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDQ7IHVzZXNU
YWJzID0gMDsgfTsKKwkJRjM0NEM3MTIxMTI1QjgyQzAwRjI2RUVFIC8qIEluc3BlY3RvckZyb250
ZW5kQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvckZy
b250ZW5kQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUYzNDRDNzUyMTEy
OTREOUQwMEYyNkVFRSAvKiBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRjM0NEM3NTcxMTI5NEZGNjAwRjI2RUVFIC8q
IEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUYzNjQ0QUZEMTExOTgwNTkwMEUwRDUzNyAvKiBJbmplY3Rl
ZFNjcmlwdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmplY3Rl
ZFNjcmlwdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUYzNjQ0QUZFMTExOTgw
NTkwMEUwRDUzNyAvKiBJbmplY3RlZFNjcmlwdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBJbmplY3RlZFNjcmlwdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlG
NEVBRjRBQzEwQzc0MkIxMDA5MTAwRDMgLyogT3BlblR5cGVTYW5pdGl6ZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gT3BlblR5cGVTYW5pdGl6ZXIuY3BwOyBwYXRo
ID0gb3BlbnR5cGUvT3BlblR5cGVTYW5pdGl6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMTA3MjQsNiArMTA3MzAsOSBAQAogCQkJCTQxRjA2MTcyMEY1RjAwQUMwMEEwN0VB
QyAvKiBJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuaCAqLywKIAkJCQk3QUVEM0UwMzBGQkIx
RUFBMDBEMkIwM0MgLyogSW5zcGVjdG9yRnJvbnRlbmQuY3BwICovLAogCQkJCTdBRUQzRTA0MEZC
QjFFQUEwMEQyQjAzQyAvKiBJbnNwZWN0b3JGcm9udGVuZC5oICovLAorCQkJCUYzNDRDNzEyMTEy
NUI4MkMwMEYyNkVFRSAvKiBJbnNwZWN0b3JGcm9udGVuZENsaWVudC5oICovLAorCQkJCUYzNDRD
NzU3MTEyOTRGRjYwMEYyNkVFRSAvKiBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmNwcCAq
LywKKwkJCQlGMzQ0Qzc1MjExMjk0RDlEMDBGMjZFRUUgLyogSW5zcGVjdG9yRnJvbnRlbmRDbGll
bnRMb2NhbC5oICovLAogCQkJCTdBMEU3NzBCMTBDMDBBODgwMEEwMjc2RSAvKiBJbnNwZWN0b3JG
cm9udGVuZEhvc3QuY3BwICovLAogCQkJCTdBMEU3NzBDMTBDMDBBODgwMEEwMjc2RSAvKiBJbnNw
ZWN0b3JGcm9udGVuZEhvc3QuaCAqLywKIAkJCQk3QTBFNzcwRDEwQzAwQTg4MDBBMDI3NkUgLyog
SW5zcGVjdG9yRnJvbnRlbmRIb3N0LmlkbCAqLywKQEAgLTE3NDIzLDYgKzE3NDMyLDggQEAKIAkJ
CQk3QTI0NTg3QzEwMjFFQUY0MDAwQTAwQUEgLyogSW5zcGVjdG9yRE9NQWdlbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTQxRjA2MTc0MEY1RjAwQUMwMEEwN0VBQyAvKiBJbnNwZWN0b3JET01TdG9y
YWdlUmVzb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTdBRUQzRTA2MEZCQjFFQUEwMEQyQjAz
QyAvKiBJbnNwZWN0b3JGcm9udGVuZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRjM0NEM3MTQxMTI1
QjgyQzAwRjI2RUVFIC8qIEluc3BlY3RvckZyb250ZW5kQ2xpZW50LmggaW4gSGVhZGVycyAqLywK
KwkJCQlGMzQ0Qzc1MzExMjk0RDlEMDBGMjZFRUUgLyogSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRM
b2NhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0EwRTc3MEYxMEMwMEE4ODAwQTAyNzZFIC8qIElu
c3BlY3RvckZyb250ZW5kSG9zdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDFGMDYyMDEwRjVGMEI2
NjAwQTA3RUFDIC8qIEluc3BlY3RvclJlc291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3NTQx
MzNBODEwMkUwMEU4MDAwNzVEMDAgLyogSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oIGluIEhlYWRl
cnMgKi8sCkBAIC0xOTYzNyw2ICsxOTY0OCw3IEBACiAJCQkJN0EyNDU4N0IxMDIxRUFGNDAwMEEw
MEFBIC8qIEluc3BlY3RvckRPTUFnZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQxRjA2MTc1
MEY1RjAwQUMwMEEwN0VBQyAvKiBJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJN0FFRDNFMDUwRkJCMUVBQTAwRDJCMDNDIC8qIEluc3BlY3RvckZyb250
ZW5kLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUYzNDRDNzU4MTEyOTRGRjYwMEYyNkVFRSAvKiBJ
bnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdBMEU3
NzBFMTBDMDBBODgwMEEwMjc2RSAvKiBJbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNDFGMDYyMDIwRjVGMEI2NjAwQTA3RUFDIC8qIEluc3BlY3RvclJlc291cmNl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTc1NDEzM0FBMTAyRTAwRjQwMDA3NUQwMCAvKiBJbnNw
ZWN0b3JUaW1lbGluZUFnZW50LmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9pbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvQ29uc29s
ZU1lc3NhZ2UuY3BwCmluZGV4IDU1MzllOWQuLjQwNTQ5OTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
aW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9Db25z
b2xlTWVzc2FnZS5jcHAKQEAgLTMxLDkgKzMxLDEyIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiQ29uc29sZU1lc3NhZ2UuaCIKIAorI2luY2x1ZGUgIkluamVjdGVkU2NyaXB0Lmgi
CisjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHRIb3N0LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRnJv
bnRlbmQuaCIKICNpbmNsdWRlICJTY3JpcHRDYWxsU3RhY2suaCIKICNpbmNsdWRlICJTY3JpcHRP
YmplY3QuaCIKKyNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCkBAIC04MCw3ICs4Myw3IEBAIENvbnNvbGVNZXNzYWdlOjpDb25zb2xlTWVz
c2FnZShNZXNzYWdlU291cmNlIHMsIE1lc3NhZ2VUeXBlIHQsIE1lc3NhZ2VMZXZlbCBsLCBTCiB9
CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotdm9pZCBDb25zb2xlTWVzc2FnZTo6YWRkVG9Db25z
b2xlKEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCkKK3ZvaWQgQ29uc29sZU1lc3NhZ2U6OmFk
ZFRvRnJvbnRlbmQoSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kLCBJbmplY3RlZFNjcmlwdEhv
c3QqIGluamVjdGVkU2NyaXB0SG9zdCkKIHsKICAgICBTY3JpcHRPYmplY3QganNvbk9iaiA9IGZy
b250ZW5kLT5uZXdTY3JpcHRPYmplY3QoKTsKICAgICBqc29uT2JqLnNldCgic291cmNlIiwgc3Rh
dGljX2Nhc3Q8aW50PihtX3NvdXJjZSkpOwpAQCAtOTAsNyArOTMsMTUgQEAgdm9pZCBDb25zb2xl
TWVzc2FnZTo6YWRkVG9Db25zb2xlKEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCkKICAgICBq
c29uT2JqLnNldCgidXJsIiwgbV91cmwpOwogICAgIGpzb25PYmouc2V0KCJncm91cExldmVsIiwg
c3RhdGljX2Nhc3Q8aW50PihtX2dyb3VwTGV2ZWwpKTsKICAgICBqc29uT2JqLnNldCgicmVwZWF0
Q291bnQiLCBzdGF0aWNfY2FzdDxpbnQ+KG1fcmVwZWF0Q291bnQpKTsKLSAgICBmcm9udGVuZC0+
YWRkQ29uc29sZU1lc3NhZ2UoanNvbk9iaiwgbV9mcmFtZXMsIG1fc2NyaXB0U3RhdGUsIG1fYXJn
dW1lbnRzLCAgbV9tZXNzYWdlKTsKKyAgICBWZWN0b3I8UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4gPiBhcmd1bWVudHM7CisgICAgaWYgKCFtX2FyZ3VtZW50cy5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBpbmplY3RlZFNjcmlwdEhvc3Qt
PmluamVjdGVkU2NyaXB0Rm9yKG1fc2NyaXB0U3RhdGUpOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIFJlZlB0
cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWRWYWx1ZSA9IGluamVjdGVkU2NyaXB0
LndyYXBGb3JDb25zb2xlKG1fYXJndW1lbnRzW2ldKTsKKyAgICAgICAgICAgIGFyZ3VtZW50cy5h
cHBlbmQoc2VyaWFsaXplZFZhbHVlKTsKKyAgICAgICAgfQorICAgIH0gICAKKyAgICBmcm9udGVu
ZC0+YWRkQ29uc29sZU1lc3NhZ2UoanNvbk9iaiwgbV9mcmFtZXMsIGFyZ3VtZW50cywgIG1fbWVz
c2FnZSk7CiB9CiAKIHZvaWQgQ29uc29sZU1lc3NhZ2U6OnVwZGF0ZVJlcGVhdENvdW50SW5Db25z
b2xlKEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5z
cGVjdG9yL0NvbnNvbGVNZXNzYWdlLmggYi9XZWJDb3JlL2luc3BlY3Rvci9Db25zb2xlTWVzc2Fn
ZS5oCmluZGV4IGU5YWUxMzAuLjUzZjQyNTUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9y
L0NvbnNvbGVNZXNzYWdlLmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2Uu
aApAQCAtMzgsNDAgKzM4LDQxIEBACiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0gICAgY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmQ7Ci0gICAgY2xhc3MgU2Ny
aXB0Q2FsbFN0YWNrOwotICAgIGNsYXNzIFNjcmlwdFN0cmluZzsKK2NsYXNzIEluamVjdGVkU2Ny
aXB0SG9zdDsKK2NsYXNzIEluc3BlY3RvckZyb250ZW5kOworY2xhc3MgU2NyaXB0Q2FsbFN0YWNr
OworY2xhc3MgU2NyaXB0U3RyaW5nOwogCi0gICAgY2xhc3MgQ29uc29sZU1lc3NhZ2UgOiBwdWJs
aWMgTm9uY29weWFibGUgewotICAgIHB1YmxpYzoKLSAgICAgICAgQ29uc29sZU1lc3NhZ2UoTWVz
c2FnZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtLCB1
bnNpZ25lZCBsaSwgY29uc3QgU3RyaW5nJiB1LCB1bnNpZ25lZCBnKTsgICAgICAgIAotICAgICAg
ICBDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlLCBNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVs
LCBTY3JpcHRDYWxsU3RhY2sqLCB1bnNpZ25lZCBnLCBib29sIHN0b3JlVHJhY2UgPSBmYWxzZSk7
CitjbGFzcyBDb25zb2xlTWVzc2FnZSA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CitwdWJsaWM6Cisg
ICAgQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZl
bCwgY29uc3QgU3RyaW5nJiBtLCB1bnNpZ25lZCBsaSwgY29uc3QgU3RyaW5nJiB1LCB1bnNpZ25l
ZCBnKTsgICAgICAgIAorICAgIENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VU
eXBlLCBNZXNzYWdlTGV2ZWwsIFNjcmlwdENhbGxTdGFjayosIHVuc2lnbmVkIGcsIGJvb2wgc3Rv
cmVUcmFjZSA9IGZhbHNlKTsKIAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgICAgIHZvaWQg
YWRkVG9Db25zb2xlKEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCk7Ci0gICAgICAgIHZvaWQg
dXBkYXRlUmVwZWF0Q291bnRJbkNvbnNvbGUoSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kKTsK
KyAgICB2b2lkIGFkZFRvRnJvbnRlbmQoSW5zcGVjdG9yRnJvbnRlbmQqLCBJbmplY3RlZFNjcmlw
dEhvc3QqKTsKKyAgICB2b2lkIHVwZGF0ZVJlcGVhdENvdW50SW5Db25zb2xlKEluc3BlY3RvckZy
b250ZW5kKiBmcm9udGVuZCk7CiAjZW5kaWYKLSAgICAgICAgdm9pZCBpbmNyZW1lbnRDb3VudCgp
IHsgKyttX3JlcGVhdENvdW50OyB9OwotICAgICAgICBib29sIGlzRXF1YWwoU2NyaXB0U3RhdGUq
LCBDb25zb2xlTWVzc2FnZSogbXNnKSBjb25zdDsKKyAgICB2b2lkIGluY3JlbWVudENvdW50KCkg
eyArK21fcmVwZWF0Q291bnQ7IH0KKyAgICBib29sIGlzRXF1YWwoU2NyaXB0U3RhdGUqLCBDb25z
b2xlTWVzc2FnZSogbXNnKSBjb25zdDsKIAotICAgICAgICBNZXNzYWdlU291cmNlIHNvdXJjZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc291cmNlOyB9Ci0gICAgICAgIGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWVzc2FnZTsgfQorICAgIE1lc3NhZ2VTb3VyY2Ugc291cmNl
KCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2U7IH0KKyAgICBjb25zdCBTdHJpbmcmIG1lc3NhZ2Uo
KSBjb25zdCB7IHJldHVybiBtX21lc3NhZ2U7IH0KIAotICAgIHByaXZhdGU6Ci0gICAgICAgIE1l
c3NhZ2VTb3VyY2UgbV9zb3VyY2U7Ci0gICAgICAgIE1lc3NhZ2VUeXBlIG1fdHlwZTsKLSAgICAg
ICAgTWVzc2FnZUxldmVsIG1fbGV2ZWw7Ci0gICAgICAgIFN0cmluZyBtX21lc3NhZ2U7Citwcml2
YXRlOgorICAgIE1lc3NhZ2VTb3VyY2UgbV9zb3VyY2U7CisgICAgTWVzc2FnZVR5cGUgbV90eXBl
OworICAgIE1lc3NhZ2VMZXZlbCBtX2xldmVsOworICAgIFN0cmluZyBtX21lc3NhZ2U7CiAjaWYg
RU5BQkxFKElOU1BFQ1RPUikKLSAgICAgICAgVmVjdG9yPFNjcmlwdFZhbHVlPiBtX2FyZ3VtZW50
czsKLSAgICAgICAgU2NyaXB0U3RhdGUqIG1fc2NyaXB0U3RhdGU7CisgICAgVmVjdG9yPFNjcmlw
dFZhbHVlPiBtX2FyZ3VtZW50czsKKyAgICBTY3JpcHRTdGF0ZSogbV9zY3JpcHRTdGF0ZTsKICNl
bmRpZgotICAgICAgICBWZWN0b3I8U2NyaXB0U3RyaW5nPiBtX2ZyYW1lczsKLSAgICAgICAgdW5z
aWduZWQgbV9saW5lOwotICAgICAgICBTdHJpbmcgbV91cmw7Ci0gICAgICAgIHVuc2lnbmVkIG1f
Z3JvdXBMZXZlbDsKLSAgICAgICAgdW5zaWduZWQgbV9yZXBlYXRDb3VudDsKLSAgICB9OworICAg
IFZlY3RvcjxTY3JpcHRTdHJpbmc+IG1fZnJhbWVzOworICAgIHVuc2lnbmVkIG1fbGluZTsKKyAg
ICBTdHJpbmcgbV91cmw7CisgICAgdW5zaWduZWQgbV9ncm91cExldmVsOworICAgIHVuc2lnbmVk
IG1fcmVwZWF0Q291bnQ7Cit9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNsaWVudC5oIGIvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ2xpZW50LmgKaW5kZXggZTQ0OGNkMi4uODQxYzE1ZSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2xpZW50LmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ2xpZW50LmgKQEAgLTMwLDYgKzMwLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCitjbGFzcyBJbnNwZWN0b3JDb250cm9sbGVyOwogY2xhc3MgTm9kZTsKIGNsYXNzIFBh
Z2U7CiBjbGFzcyBTdHJpbmc7CkBAIC00MCwyOSArNDEsMTMgQEAgcHVibGljOgogCiAgICAgdmly
dHVhbCB2b2lkIGluc3BlY3RvckRlc3Ryb3llZCgpID0gMDsKIAotICAgIHZpcnR1YWwgUGFnZSog
Y3JlYXRlUGFnZSgpID0gMDsKLQotICAgIHZpcnR1YWwgU3RyaW5nIGxvY2FsaXplZFN0cmluZ3NV
UkwoKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIFN0cmluZyBoaWRkZW5QYW5lbHMoKSA9IDA7Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgc2hvd1dpbmRvdygpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xvc2VX
aW5kb3coKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoV2luZG93KCkgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBkZXRhY2hXaW5kb3coKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0
QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIG9wZW5JbnNwZWN0b3JGcm9udGVuZChJbnNwZWN0b3JDb250cm9sbGVyKikgPSAwOwogCiAg
ICAgdmlydHVhbCB2b2lkIGhpZ2hsaWdodChOb2RlKikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBo
aWRlSGlnaGxpZ2h0KCkgPSAwOwogCi0gICAgdmlydHVhbCB2b2lkIGluc3BlY3RlZFVSTENoYW5n
ZWQoY29uc3QgU3RyaW5nJiBuZXdVUkwpID0gMDsKLQogICAgIHZpcnR1YWwgdm9pZCBwb3B1bGF0
ZVNldHRpbmcoY29uc3QgU3RyaW5nJiBrZXksIFN0cmluZyogdmFsdWUpID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgc3RvcmVTZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZh
bHVlKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgaW5zcGVjdG9yV2luZG93T2JqZWN0Q2xlYXJl
ZCgpID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXggMzMxNDQzZC4uOTI0ZjAxMSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKKysrIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKQEAgLTU3LDExICs1NywxMSBAQAog
I2luY2x1ZGUgIkluamVjdGVkU2NyaXB0SG9zdC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckJhY2tl
bmQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JG
cm9udGVuZENsaWVudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckRPTUFnZW50LmgiCiAjaW5jbHVk
ZSAiSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRGF0
YWJhc2VSZXNvdXJjZS5oIgogI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kLmgiCi0jaW5jbHVk
ZSAiSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yUmVzb3VyY2Uu
aCIKICNpbmNsdWRlICJJbnNwZWN0b3JXb3JrZXJSZXNvdXJjZS5oIgogI2luY2x1ZGUgIkluc3Bl
Y3RvclRpbWVsaW5lQWdlbnQuaCIKQEAgLTE0NCwxMCArMTQ0LDkgQEAgc3RhdGljIHVuc2lnbmVk
IHNfaW5zcGVjdG9yQ29udHJvbGxlckNvdW50OwogSW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVj
dG9yQ29udHJvbGxlcihQYWdlKiBwYWdlLCBJbnNwZWN0b3JDbGllbnQqIGNsaWVudCkKICAgICA6
IG1faW5zcGVjdGVkUGFnZShwYWdlKQogICAgICwgbV9jbGllbnQoY2xpZW50KQotICAgICwgbV9w
YWdlKDApCisgICAgLCBtX29wZW5pbmdGcm9udGVuZChmYWxzZSkKKyAgICAsIG1fY2xvc2luZ0Zy
b250ZW5kKGZhbHNlKQogICAgICwgbV9leHBpcmVkQ29uc29sZU1lc3NhZ2VDb3VudCgwKQotICAg
ICwgbV9mcm9udGVuZFNjcmlwdFN0YXRlKDApCi0gICAgLCBtX3dpbmRvd1Zpc2libGUoZmFsc2Up
CiAgICAgLCBtX3Nob3dBZnRlclZpc2libGUoQ3VycmVudFBhbmVsKQogICAgICwgbV9ncm91cExl
dmVsKDApCiAgICAgLCBtX3NlYXJjaGluZ0Zvck5vZGUoZmFsc2UpCkBAIC0xNTUsNyArMTU0LDYg
QEAgSW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcihQYWdlKiBwYWdlLCBJ
bnNwZWN0b3JDbGllbnQqIGNsaWVudCkKICAgICAsIG1fcmVzb3VyY2VUcmFja2luZ0VuYWJsZWQo
ZmFsc2UpCiAgICAgLCBtX3Jlc291cmNlVHJhY2tpbmdTZXR0aW5nc0xvYWRlZChmYWxzZSkKICAg
ICAsIG1faW5zcGVjdG9yQmFja2VuZChJbnNwZWN0b3JCYWNrZW5kOjpjcmVhdGUodGhpcykpCi0g
ICAgLCBtX2luc3BlY3RvckZyb250ZW5kSG9zdChJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OmNyZWF0
ZSh0aGlzLCBjbGllbnQpKQogICAgICwgbV9pbmplY3RlZFNjcmlwdEhvc3QoSW5qZWN0ZWRTY3Jp
cHRIb3N0OjpjcmVhdGUodGhpcykpCiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAg
ICAgLCBtX2RlYnVnZ2VyRW5hYmxlZChmYWxzZSkKQEAgLTE3OCw5ICsxNzYsNyBAQCBJbnNwZWN0
b3JDb250cm9sbGVyOjp+SW5zcGVjdG9yQ29udHJvbGxlcigpCiB7CiAgICAgLy8gVGhlc2Ugc2hv
dWxkIGhhdmUgYmVlbiBjbGVhcmVkIGluIGluc3BlY3RlZFBhZ2VEZXN0cm95ZWQoKS4KICAgICBB
U1NFUlQoIW1fY2xpZW50KTsKLSAgICBBU1NFUlQoIW1fZnJvbnRlbmRTY3JpcHRTdGF0ZSk7CiAg
ICAgQVNTRVJUKCFtX2luc3BlY3RlZFBhZ2UpOwotICAgIEFTU0VSVCghbV9wYWdlIHx8IChtX3Bh
Z2UgJiYgIW1fcGFnZS0+cGFyZW50SW5zcGVjdG9yQ29udHJvbGxlcigpKSk7CiAKICAgICBkZWxl
dGVBbGxWYWx1ZXMobV9mcmFtZVJlc291cmNlcyk7CiAgICAgZGVsZXRlQWxsVmFsdWVzKG1fY29u
c29sZU1lc3NhZ2VzKTsKQEAgLTE5MSw3ICsxODcsNiBAQCBJbnNwZWN0b3JDb250cm9sbGVyOjp+
SW5zcGVjdG9yQ29udHJvbGxlcigpCiAgICAgcmVsZWFzZURPTUFnZW50KCk7CiAKICAgICBtX2lu
c3BlY3RvckJhY2tlbmQtPmRpc2Nvbm5lY3RDb250cm9sbGVyKCk7Ci0gICAgbV9pbnNwZWN0b3JG
cm9udGVuZEhvc3QtPmRpc2Nvbm5lY3RDb250cm9sbGVyKCk7CiAgICAgbV9pbmplY3RlZFNjcmlw
dEhvc3QtPmRpc2Nvbm5lY3RDb250cm9sbGVyKCk7CiB9CiAKQEAgLTE5OSwxMCArMTk0LDYgQEAg
dm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0ZWRQYWdlRGVzdHJveWVkKCkKIHsKICAg
ICBjbG9zZSgpOwogCi0gICAgaWYgKG1fZnJvbnRlbmRTY3JpcHRTdGF0ZSkgewotICAgICAgICBT
Y3JpcHRHbG9iYWxPYmplY3Q6OnJlbW92ZShtX2Zyb250ZW5kU2NyaXB0U3RhdGUsICJJbnNwZWN0
b3JCYWNrZW5kIik7Ci0gICAgICAgIFNjcmlwdEdsb2JhbE9iamVjdDo6cmVtb3ZlKG1fZnJvbnRl
bmRTY3JpcHRTdGF0ZSwgIkluc3BlY3RvckZyb250ZW5kSG9zdCIpOwotICAgIH0KICAgICBBU1NF
UlQobV9pbnNwZWN0ZWRQYWdlKTsKICAgICBtX2luc3BlY3RlZFBhZ2UgPSAwOwogCkBAIC0yOTcs
NDYgKzI4OCw0MiBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmhpZGVIaWdobGlnaHQoKQog
CiBib29sIEluc3BlY3RvckNvbnRyb2xsZXI6OndpbmRvd1Zpc2libGUoKQogewotICAgIHJldHVy
biBtX3dpbmRvd1Zpc2libGU7CisgICAgcmV0dXJuIG1fZnJvbnRlbmQ7CiB9CiAKLXZvaWQgSW5z
cGVjdG9yQ29udHJvbGxlcjo6c2V0V2luZG93VmlzaWJsZShib29sIHZpc2libGUsIGJvb2wgYXR0
YWNoZWQpCit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmZyb250ZW5kUmVhZHkoKQogewotICAg
IGlmICh2aXNpYmxlID09IG1fd2luZG93VmlzaWJsZSB8fCAhbV9mcm9udGVuZCkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgbV93aW5kb3dWaXNpYmxlID0gdmlzaWJsZTsKLQotICAgIGlmIChtX3dp
bmRvd1Zpc2libGUpIHsKLSAgICAgICAgc2V0QXR0YWNoZWRXaW5kb3coYXR0YWNoZWQpOwotICAg
ICAgICBwb3B1bGF0ZVNjcmlwdE9iamVjdHMoKTsKLQotICAgICAgICBpZiAobV9zaG93QWZ0ZXJW
aXNpYmxlID09IEN1cnJlbnRQYW5lbCkgewotICAgICAgICAgICAgU3RyaW5nIGxhc3RBY3RpdmVQ
YW5lbFNldHRpbmcgPSBzZXR0aW5nKGxhc3RBY3RpdmVQYW5lbFNldHRpbmdOYW1lKTsKLSAgICAg
ICAgICAgIG1fc2hvd0FmdGVyVmlzaWJsZSA9IHNwZWNpYWxQYW5lbEZvckpTTmFtZShsYXN0QWN0
aXZlUGFuZWxTZXR0aW5nKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtX25vZGVUb0ZvY3Vz
KQotICAgICAgICAgICAgZm9jdXNOb2RlKCk7CisgICAgcG9wdWxhdGVTY3JpcHRPYmplY3RzKCk7
CisgICAgCisgICAgaWYgKG1fc2hvd0FmdGVyVmlzaWJsZSA9PSBDdXJyZW50UGFuZWwpIHsKKyAg
ICAgICAgU3RyaW5nIGxhc3RBY3RpdmVQYW5lbFNldHRpbmcgPSBzZXR0aW5nKGxhc3RBY3RpdmVQ
YW5lbFNldHRpbmdOYW1lKTsKKyAgICAgICAgbV9zaG93QWZ0ZXJWaXNpYmxlID0gc3BlY2lhbFBh
bmVsRm9ySlNOYW1lKGxhc3RBY3RpdmVQYW5lbFNldHRpbmcpOworICAgIH0KKyAgICAKKyAgICBp
ZiAobV9ub2RlVG9Gb2N1cykKKyAgICAgICAgZm9jdXNOb2RlKCk7CiAjaWYgRU5BQkxFKEpBVkFT
Q1JJUFRfREVCVUdHRVIpCi0gICAgICAgIGlmIChtX2F0dGFjaERlYnVnZ2VyV2hlblNob3duKQot
ICAgICAgICAgICAgZW5hYmxlRGVidWdnZXIoKTsKKyAgICBpZiAobV9hdHRhY2hEZWJ1Z2dlcldo
ZW5TaG93bikKKyAgICAgICAgZW5hYmxlRGVidWdnZXIoKTsKICNlbmRpZgotICAgICAgICBzaG93
UGFuZWwobV9zaG93QWZ0ZXJWaXNpYmxlKTsKLSAgICB9IGVsc2UgeworICAgIHNob3dQYW5lbCht
X3Nob3dBZnRlclZpc2libGUpOworfQorCit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OndpbGxD
bG9zZUZyb250ZW5kKCkKK3sKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKLSAgICAg
ICAgLy8gSWYgdGhlIHdpbmRvdyBpcyBiZWluZyBjbG9zZWQgd2l0aCB0aGUgZGVidWdnZXIgZW5h
YmxlZCwKLSAgICAgICAgLy8gcmVtZW1iZXIgdGhpcyBzdGF0ZSB0byByZS1lbmFibGUgZGVidWdn
ZXIgb24gdGhlIG5leHQgd2luZG93Ci0gICAgICAgIC8vIG9wZW5pbmcuCi0gICAgICAgIGJvb2wg
ZGVidWdnZXJXYXNFbmFibGVkID0gbV9kZWJ1Z2dlckVuYWJsZWQ7Ci0gICAgICAgIGRpc2FibGVE
ZWJ1Z2dlcigpOwotICAgICAgICBpZiAoZGVidWdnZXJXYXNFbmFibGVkKQotICAgICAgICAgICAg
bV9hdHRhY2hEZWJ1Z2dlcldoZW5TaG93biA9IHRydWU7CisgICAgLy8gSWYgdGhlIHdpbmRvdyBp
cyBiZWluZyBjbG9zZWQgd2l0aCB0aGUgZGVidWdnZXIgZW5hYmxlZCwKKyAgICAvLyByZW1lbWJl
ciB0aGlzIHN0YXRlIHRvIHJlLWVuYWJsZSBkZWJ1Z2dlciBvbiB0aGUgbmV4dCB3aW5kb3cKKyAg
ICAvLyBvcGVuaW5nLgorICAgIGJvb2wgZGVidWdnZXJXYXNFbmFibGVkID0gbV9kZWJ1Z2dlckVu
YWJsZWQ7CisgICAgZGlzYWJsZURlYnVnZ2VyKCk7CisgICAgaWYgKGRlYnVnZ2VyV2FzRW5hYmxl
ZCkKKyAgICAgICAgbV9hdHRhY2hEZWJ1Z2dlcldoZW5TaG93biA9IHRydWU7CiAjZW5kaWYKLSAg
ICAgICAgc2V0U2VhcmNoaW5nRm9yTm9kZShmYWxzZSk7Ci0gICAgICAgIHJlc2V0U2NyaXB0T2Jq
ZWN0cygpOwotICAgICAgICBzdG9wVGltZWxpbmVQcm9maWxlcigpOwotICAgIH0KKyAgICBzZXRT
ZWFyY2hpbmdGb3JOb2RlKGZhbHNlKTsKKyAgICByZXNldFNjcmlwdE9iamVjdHMoKTsKKyAgICBz
dG9wVGltZWxpbmVQcm9maWxlcigpOworCiAgICAgbV9zaG93QWZ0ZXJWaXNpYmxlID0gQ3VycmVu
dFBhbmVsOwogfQogCkBAIC0zNzAsNyArMzU3LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVy
OjphZGRDb25zb2xlTWVzc2FnZShTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIENvbnNvbGVNZXMK
ICAgICAgICAgbV9wcmV2aW91c01lc3NhZ2UgPSBjb25zb2xlTWVzc2FnZTsKICAgICAgICAgbV9j
b25zb2xlTWVzc2FnZXMuYXBwZW5kKGNvbnNvbGVNZXNzYWdlKTsKICAgICAgICAgaWYgKHdpbmRv
d1Zpc2libGUoKSkKLSAgICAgICAgICAgIG1fcHJldmlvdXNNZXNzYWdlLT5hZGRUb0NvbnNvbGUo
bV9mcm9udGVuZC5nZXQoKSk7CisgICAgICAgICAgICBtX3ByZXZpb3VzTWVzc2FnZS0+YWRkVG9G
cm9udGVuZChtX2Zyb250ZW5kLmdldCgpLCBtX2luamVjdGVkU2NyaXB0SG9zdC5nZXQoKSk7CiAg
ICAgfQogCiAgICAgaWYgKCF3aW5kb3dWaXNpYmxlKCkgJiYgbV9jb25zb2xlTWVzc2FnZXMuc2l6
ZSgpID49IG1heGltdW1Db25zb2xlTWVzc2FnZXMpIHsKQEAgLTQxOCw2OSArNDA1LDYgQEAgdm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjptYXJrVGltZWxpbmUoY29uc3QgU3RyaW5nJiBtZXNzYWdl
KQogICAgICAgICB0aW1lbGluZUFnZW50KCktPmRpZE1hcmtUaW1lbGluZShtZXNzYWdlKTsKIH0K
IAotc3RhdGljIHVuc2lnbmVkIGNvbnN0cmFpbmVkQXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWdu
ZWQgcHJlZmVycmVkSGVpZ2h0LCB1bnNpZ25lZCB0b3RhbFdpbmRvd0hlaWdodCkKLXsKLSAgICBy
ZXR1cm4gcm91bmRmKG1heChtaW5pbXVtQXR0YWNoZWRIZWlnaHQsIG1pbjxmbG9hdD4ocHJlZmVy
cmVkSGVpZ2h0LCB0b3RhbFdpbmRvd0hlaWdodCAqIG1heGltdW1BdHRhY2hlZEhlaWdodFJhdGlv
KSkpOwotfQotCi1ib29sIEluc3BlY3RvckNvbnRyb2xsZXI6OmNhbkF0dGFjaFdpbmRvdygpIGNv
bnN0Ci17Ci0gICAgaWYgKCFlbmFibGVkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgCi0gICAgdW5zaWduZWQgaW5zcGVjdGVkUGFnZUhlaWdodCA9IG1faW5zcGVjdGVkUGFnZS0+
bWFpbkZyYW1lKCktPnZpZXcoKS0+dmlzaWJsZUhlaWdodCgpOwotCi0gICAgLy8gRG9uJ3QgYWxs
b3cgdGhlIGF0dGFjaCBpZiB0aGUgd2luZG93IHdvdWxkIGJlIHRvbyBzbWFsbCB0byBhY2NvbW1v
ZGF0ZSB0aGUgbWluaW11bSBpbnNwZWN0b3IgaGVpZ2h0LgotICAgIHJldHVybiBtaW5pbXVtQXR0
YWNoZWRIZWlnaHQgPD0gaW5zcGVjdGVkUGFnZUhlaWdodCAqIG1heGltdW1BdHRhY2hlZEhlaWdo
dFJhdGlvOwotfQotCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmF0dGFjaFdpbmRvdygpCi17
Ci0gICAgaWYgKCFlbmFibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHVuc2lnbmVkIGlu
c3BlY3RlZFBhZ2VIZWlnaHQgPSBtX2luc3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCkt
PnZpc2libGVIZWlnaHQoKTsKLQotICAgIFN0cmluZyBhdHRhY2hlZEhlaWdodCA9IHNldHRpbmco
aW5zcGVjdG9yQXR0YWNoZWRIZWlnaHROYW1lKTsKLSAgICBib29sIHN1Y2Nlc3MgPSB0cnVlOwot
ICAgIGludCBoZWlnaHQgPSBhdHRhY2hlZEhlaWdodC50b0ludCgmc3VjY2Vzcyk7Ci0gICAgdW5z
aWduZWQgcHJlZmVycmVkSGVpZ2h0ID0gc3VjY2VzcyA/IGhlaWdodCA6IGRlZmF1bHRBdHRhY2hl
ZEhlaWdodDsKLQotICAgIG1fY2xpZW50LT5hdHRhY2hXaW5kb3coKTsKLQotICAgIC8vIFdlIG5l
ZWQgdG8gY29uc3RyYWluIHRoZSB3aW5kb3cgaGVpZ2h0IGhlcmUgaW4gY2FzZSB0aGUgdXNlciBo
YXMgcmVzaXplZCB0aGUgaW5zcGVjdGVkIHBhZ2UncyB3aW5kb3cgc28gdGhhdAotICAgIC8vIHRo
ZSB1c2VyJ3MgcHJlZmVycmVkIGhlaWdodCB3b3VsZCBiZSB0b28gYmlnIHRvIGRpc3BsYXkuCi0g
ICAgbV9jbGllbnQtPnNldEF0dGFjaGVkV2luZG93SGVpZ2h0KGNvbnN0cmFpbmVkQXR0YWNoZWRX
aW5kb3dIZWlnaHQocHJlZmVycmVkSGVpZ2h0LCBpbnNwZWN0ZWRQYWdlSGVpZ2h0KSk7Ci19Ci0K
LXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGV0YWNoV2luZG93KCkKLXsKLSAgICBpZiAoIWVu
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY2xpZW50LT5kZXRhY2hXaW5kb3coKTsK
LX0KLQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRBdHRhY2hlZFdpbmRvdyhib29sIGF0
dGFjaGVkKQotewotICAgIGlmICghZW5hYmxlZCgpIHx8ICFtX2Zyb250ZW5kKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX2Zyb250ZW5kLT5zZXRBdHRhY2hlZFdpbmRvdyhhdHRhY2hlZCk7Ci19
Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5z
aWduZWQgaGVpZ2h0KQotewotICAgIGlmICghZW5hYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0g
ICAgCi0gICAgdW5zaWduZWQgdG90YWxIZWlnaHQgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLT52aWV3
KCktPnZpc2libGVIZWlnaHQoKSArIG1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCktPnZpZXco
KS0+dmlzaWJsZUhlaWdodCgpOwotICAgIHVuc2lnbmVkIGF0dGFjaGVkSGVpZ2h0ID0gY29uc3Ry
YWluZWRBdHRhY2hlZFdpbmRvd0hlaWdodChoZWlnaHQsIHRvdGFsSGVpZ2h0KTsKLSAgICAKLSAg
ICBzZXRTZXR0aW5nKGluc3BlY3RvckF0dGFjaGVkSGVpZ2h0TmFtZSwgU3RyaW5nOjpudW1iZXIo
YXR0YWNoZWRIZWlnaHQpKTsKLSAgICAKLSAgICBtX2NsaWVudC0+c2V0QXR0YWNoZWRXaW5kb3dI
ZWlnaHQoYXR0YWNoZWRIZWlnaHQpOwotfQotCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnN0
b3JlTGFzdEFjdGl2ZVBhbmVsKGNvbnN0IFN0cmluZyYgcGFuZWxOYW1lKQogewogICAgIHNldFNl
dHRpbmcobGFzdEFjdGl2ZVBhbmVsU2V0dGluZ05hbWUsIHBhbmVsTmFtZSk7CkBAIC01MTIsMjMg
KzQzNiwyMiBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmhhbmRsZU1vdXNlUHJlc3NPbk5v
ZGUoTm9kZSogbm9kZSkKICAgICBpbnNwZWN0KG5vZGUpOwogfQogCi12b2lkIEluc3BlY3RvckNv
bnRyb2xsZXI6Omluc3BlY3RlZFdpbmRvd1NjcmlwdE9iamVjdENsZWFyZWQoRnJhbWUqIGZyYW1l
KQordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRJbnNwZWN0b3JGcm9udGVuZENsaWVudChQ
YXNzT3duUHRyPEluc3BlY3RvckZyb250ZW5kQ2xpZW50PiBjbGllbnQpCiB7Ci0gICAgaWYgKCFl
bmFibGVkKCkgfHwgIW1fZnJvbnRlbmQgfHwgZnJhbWUgIT0gbV9pbnNwZWN0ZWRQYWdlLT5tYWlu
RnJhbWUoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1faW5qZWN0ZWRTY3JpcHRIb3N0LT5kaXNj
YXJkSW5qZWN0ZWRTY3JpcHRzKCk7CisgICAgQVNTRVJUKCFtX2luc3BlY3RvckZyb250ZW5kQ2xp
ZW50KTsKKyAgICBtX2luc3BlY3RvckZyb250ZW5kQ2xpZW50ID0gY2xpZW50OwogfQogCi12b2lk
IEluc3BlY3RvckNvbnRyb2xsZXI6OndpbmRvd1NjcmlwdE9iamVjdEF2YWlsYWJsZSgpCit2b2lk
IEluc3BlY3RvckNvbnRyb2xsZXI6Omluc3BlY3RlZFdpbmRvd1NjcmlwdE9iamVjdENsZWFyZWQo
RnJhbWUqIGZyYW1lKQogewotICAgIGlmICghbV9wYWdlIHx8ICFlbmFibGVkKCkpCi0gICAgICAg
IHJldHVybjsKKyAgICAvLyBJZiB0aGUgcGFnZSBpcyBzdXBwb3NlZCB0byBzZXJ2ZSBhcyBJbnNw
ZWN0b3JGcm9udGVuZCBub3RpZnkgaW5zcGV0b3IgZnJvbnRlbmQKKyAgICAvLyBjbGllbnQgdGhh
dCBpdCdzIGNsZWFyZWQgc28gdGhhdCB0aGUgY2xpZW50IGNhbiBleHBvc2UgaW5zcGVjdG9yIGJp
bmRpbmdzLgorICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2xpZW50ICYmIGZyYW1lID09IG1f
aW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCkpCisgICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRD
bGllbnQtPndpbmRvd09iamVjdENsZWFyZWQoKTsKIAotICAgIC8vIEdyYW50IHRoZSBpbnNwZWN0
b3IgdGhlIGFiaWxpdHkgdG8gc2NyaXB0IHRoZSBpbnNwZWN0ZWQgcGFnZS4KLSAgICBtX3BhZ2Ut
Pm1haW5GcmFtZSgpLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5ncmFudFVuaXZlcnNh
bEFjY2VzcygpOwotICAgIG1fZnJvbnRlbmRTY3JpcHRTdGF0ZSA9IHNjcmlwdFN0YXRlRnJvbVBh
Z2UoZGVidWdnZXJXb3JsZCgpLCBtX3BhZ2UpOwotICAgIFNjcmlwdEdsb2JhbE9iamVjdDo6c2V0
KG1fZnJvbnRlbmRTY3JpcHRTdGF0ZSwgIkluc3BlY3RvckJhY2tlbmQiLCBtX2luc3BlY3RvckJh
Y2tlbmQuZ2V0KCkpOwotICAgIFNjcmlwdEdsb2JhbE9iamVjdDo6c2V0KG1fZnJvbnRlbmRTY3Jp
cHRTdGF0ZSwgIkluc3BlY3RvckZyb250ZW5kSG9zdCIsIG1faW5zcGVjdG9yRnJvbnRlbmRIb3N0
LmdldCgpKTsKKyAgICBpZiAoIWVuYWJsZWQoKSB8fCAhbV9mcm9udGVuZCB8fCBmcmFtZSAhPSBt
X2luc3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpKQorICAgICAgICByZXR1cm47CisgICAgbV9pbmpl
Y3RlZFNjcmlwdEhvc3QtPmRpc2NhcmRJbmplY3RlZFNjcmlwdHMoKTsKIH0KIAogdm9pZCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpzZXRTZWFyY2hpbmdGb3JOb2RlKGJvb2wgZW5hYmxlZCkKQEAgLTU0
NiwxOCArNDY5LDE1IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0U2VhcmNoaW5nRm9y
Tm9kZShib29sIGVuYWJsZWQpCiAgICAgfQogfQogCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6
OnNjcmlwdE9iamVjdFJlYWR5KCkKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0RnJvbnRl
bmQoUGFzc093blB0cjxJbnNwZWN0b3JGcm9udGVuZD4gZnJvbnRlbmQpCiB7Ci0gICAgQVNTRVJU
KG1fZnJvbnRlbmRTY3JpcHRTdGF0ZSk7Ci0gICAgaWYgKCFtX2Zyb250ZW5kU2NyaXB0U3RhdGUp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIFNjcmlwdE9iamVjdCB3ZWJJbnNwZWN0b3JPYmo7Ci0g
ICAgaWYgKCFTY3JpcHRHbG9iYWxPYmplY3Q6OmdldChtX2Zyb250ZW5kU2NyaXB0U3RhdGUsICJX
ZWJJbnNwZWN0b3IiLCB3ZWJJbnNwZWN0b3JPYmopKQotICAgICAgICByZXR1cm47Ci0gICAgc2V0
RnJvbnRlbmRQcm94eU9iamVjdChtX2Zyb250ZW5kU2NyaXB0U3RhdGUsIHdlYkluc3BlY3Rvck9i
aik7Ci0KLSNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKKyAgICBtX29wZW5pbmdGcm9u
dGVuZCA9IGZhbHNlOworICAgIG1fZnJvbnRlbmQgPSBmcm9udGVuZDsKKyAgICByZWxlYXNlRE9N
QWdlbnQoKTsKKyAgICBtX2RvbUFnZW50ID0gSW5zcGVjdG9yRE9NQWdlbnQ6OmNyZWF0ZShtX2Zy
b250ZW5kLmdldCgpKTsKKyAgICBpZiAobV90aW1lbGluZUFnZW50KQorICAgICAgICBtX3RpbWVs
aW5lQWdlbnQtPnJlc2V0RnJvbnRlbmRQcm94eU9iamVjdChtX2Zyb250ZW5kLmdldCgpKTsKKyNp
ZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikgJiYgVVNFKEpTQykKICAgICBTdHJpbmcgZGVi
dWdnZXJFbmFibGVkID0gc2V0dGluZyhkZWJ1Z2dlckVuYWJsZWRTZXR0aW5nTmFtZSk7CiAgICAg
aWYgKGRlYnVnZ2VyRW5hYmxlZCA9PSAidHJ1ZSIpCiAgICAgICAgIGVuYWJsZURlYnVnZ2VyKCk7
CkBAIC01NjYsNDggKzQ4NiwyMyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNjcmlwdE9i
amVjdFJlYWR5KCkKICAgICAgICAgZW5hYmxlUHJvZmlsZXIoKTsKICNlbmRpZgogCi0gICAgLy8g
SWYgbm8gcHJlZmVyZW5jZSBpcyBzZXQgLSBkZWZhdWx0IHRvIGFuIGF0dGFjaGVkIHdpbmRvdy4g
VGhpcyBpcyBpbXBvcnRhbnQgZm9yIGluc3BlY3RvciBMYXlvdXRUZXN0cy4KLSAgICBTdHJpbmcg
c2hvdWxkQXR0YWNoVmFsdWUgPSBzZXR0aW5nKGluc3BlY3RvclN0YXJ0c0F0dGFjaGVkU2V0dGlu
Z05hbWUoKSk7Ci0gICAgYm9vbCBzaG91bGRBdHRhY2ggPSBzaG91bGRBdHRhY2hWYWx1ZSAhPSAi
ZmFsc2UiOwotICAgIAotICAgIGlmIChzaG91bGRBdHRhY2ggJiYgIWNhbkF0dGFjaFdpbmRvdygp
KQotICAgICAgICBzaG91bGRBdHRhY2ggPSBmYWxzZTsKLQotICAgIC8vIE1ha2Ugc3VyZSBvdXIg
d2luZG93IGlzIHZpc2libGUgbm93IHRoYXQgdGhlIHBhZ2UgbG9hZGVkCi0gICAgc2V0V2luZG93
VmlzaWJsZSh0cnVlLCBzaG91bGRBdHRhY2gpOwotCi0gICAgbV9jbGllbnQtPmluc3BlY3Rvcldp
bmRvd09iamVjdENsZWFyZWQoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRG
cm9udGVuZFByb3h5T2JqZWN0KFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgU2NyaXB0T2JqZWN0
IHdlYkluc3BlY3Rvck9iaiwgU2NyaXB0T2JqZWN0KQotewotICAgIG1fZnJvbnRlbmRTY3JpcHRT
dGF0ZSA9IHNjcmlwdFN0YXRlOwotICAgIG1fZnJvbnRlbmQuc2V0KG5ldyBJbnNwZWN0b3JGcm9u
dGVuZCh0aGlzLCB3ZWJJbnNwZWN0b3JPYmopKTsKLSAgICByZWxlYXNlRE9NQWdlbnQoKTsKLSAg
ICBtX2RvbUFnZW50ID0gSW5zcGVjdG9yRE9NQWdlbnQ6OmNyZWF0ZShtX2Zyb250ZW5kLmdldCgp
KTsKLSAgICBpZiAobV90aW1lbGluZUFnZW50KQotICAgICAgICBtX3RpbWVsaW5lQWdlbnQtPnJl
c2V0RnJvbnRlbmRQcm94eU9iamVjdChtX2Zyb250ZW5kLmdldCgpKTsKKyAgICBmcm9udGVuZFJl
YWR5KCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2hvdygpCiB7CiAgICAgaWYg
KCFlbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAoIW1fcGFnZSkgewot
ICAgICAgICBpZiAobV9mcm9udGVuZCkKLSAgICAgICAgICAgIHJldHVybjsgLy8gV2UgYXJlIHVz
aW5nIGN1c3RvbSBmcm9udGVuZCAtIG5vIG5lZWQgdG8gY3JlYXRlIHBhZ2UuCiAKLSAgICAgICAg
bV9wYWdlID0gbV9jbGllbnQtPmNyZWF0ZVBhZ2UoKTsKLSAgICAgICAgaWYgKCFtX3BhZ2UpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fcGFnZS0+c2V0UGFyZW50SW5zcGVjdG9yQ29u
dHJvbGxlcih0aGlzKTsKLQotICAgICAgICAvLyBzaG93V2luZG93KCkgd2lsbCBiZSBjYWxsZWQg
YWZ0ZXIgdGhlIHBhZ2UgbG9hZHMgaW4gc2NyaXB0T2JqZWN0UmVhZHkoKQorICAgIGlmIChtX29w
ZW5pbmdGcm9udGVuZCkKICAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChtX2Zyb250ZW5k
KQorICAgICAgICBtX2Zyb250ZW5kLT5icmluZ1RvRnJvbnQoKTsKKyAgICBlbHNlIHsKKyAgICAg
ICAgbV9vcGVuaW5nRnJvbnRlbmQgPSB0cnVlOworICAgICAgICBtX2NsaWVudC0+b3Blbkluc3Bl
Y3RvckZyb250ZW5kKHRoaXMpOwogICAgIH0KLQotICAgIHNob3dXaW5kb3coKTsKIH0KIAogdm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzaG93UGFuZWwoU3BlY2lhbFBhbmVscyBwYW5lbCkKQEAg
LTYzMyw0NiArNTI4LDI3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6Y2xvc2UoKQogICAg
IGlmICghZW5hYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKKyAgICBpZiAoIW1fZnJvbnRlbmQp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2Nsb3NpbmdGcm9udGVuZCkKKyAgICAgICAg
cmV0dXJuOworICAgIG1fY2xvc2luZ0Zyb250ZW5kID0gdHJ1ZTsKKworICAgIHdpbGxDbG9zZUZy
b250ZW5kKCk7CisKKyAgICBoaWRlSGlnaGxpZ2h0KCk7CisKICNpZiBFTkFCTEUoSkFWQVNDUklQ
VF9ERUJVR0dFUikKICAgICBzdG9wVXNlckluaXRpYXRlZFByb2ZpbGluZygpOwogICAgIGRpc2Fi
bGVEZWJ1Z2dlcigpOwogI2VuZGlmCi0gICAgY2xvc2VXaW5kb3coKTsKIAogICAgIHJlbGVhc2VE
T01BZ2VudCgpOwotICAgIG1fZnJvbnRlbmQuc2V0KDApOwotICAgIG1fdGltZWxpbmVBZ2VudCA9
IDA7Ci0gICAgbV9mcm9udGVuZFNjcmlwdFN0YXRlID0gMDsKLSAgICBpZiAobV9wYWdlKSB7Ci0g
ICAgICAgIGlmICghbV9wYWdlLT5tYWluRnJhbWUoKSB8fCAhbV9wYWdlLT5tYWluRnJhbWUoKS0+
bG9hZGVyKCkgfHwgIW1fcGFnZS0+bWFpbkZyYW1lKCktPmxvYWRlcigpLT5pc0xvYWRpbmcoKSkg
ewotICAgICAgICAgICAgbV9wYWdlLT5zZXRQYXJlbnRJbnNwZWN0b3JDb250cm9sbGVyKDApOwot
ICAgICAgICAgICAgbV9wYWdlID0gMDsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpzaG93V2luZG93KCkKLXsKLSAgICBBU1NFUlQoZW5hYmxlZCgpKTsK
LQotICAgIHVuc2lnbmVkIGluc3BlY3RlZFBhZ2VIZWlnaHQgPSBtX2luc3BlY3RlZFBhZ2UtPm1h
aW5GcmFtZSgpLT52aWV3KCktPnZpc2libGVIZWlnaHQoKTsKLQotICAgIG1fY2xpZW50LT5zaG93
V2luZG93KCk7CisgICAgbV9mcm9udGVuZC5jbGVhcigpOworICAgIG1fdGltZWxpbmVBZ2VudC5j
bGVhcigpOwogCi0gICAgU3RyaW5nIGF0dGFjaGVkSGVpZ2h0ID0gc2V0dGluZyhpbnNwZWN0b3JB
dHRhY2hlZEhlaWdodE5hbWUpOwotICAgIGJvb2wgc3VjY2VzcyA9IHRydWU7Ci0gICAgaW50IGhl
aWdodCA9IGF0dGFjaGVkSGVpZ2h0LnRvSW50KCZzdWNjZXNzKTsKLSAgICB1bnNpZ25lZCBwcmVm
ZXJyZWRIZWlnaHQgPSBzdWNjZXNzID8gaGVpZ2h0IDogZGVmYXVsdEF0dGFjaGVkSGVpZ2h0Owot
Ci0gICAgLy8gVGhpcyBjYWxsIG1pZ2h0IG5vdCBnbyB0aHJvdWdoIChpZiB0aGUgd2luZG93IHN0
YXJ0cyBvdXQgZGV0YWNoZWQpLCBidXQgaWYgdGhlIHdpbmRvdyBpcyBpbml0aWFsbHkgY3JlYXRl
ZCBhdHRhY2hlZCwKLSAgICAvLyBJbnNwZWN0b3JDb250cm9sbGVyOjphdHRhY2hXaW5kb3cgaXMg
bmV2ZXIgY2FsbGVkLCBzbyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0byBzZXQgdGhlIGF0dGFjaGVk
V2luZG93SGVpZ2h0LgotICAgIC8vIEZJWE1FOiBDbGVhbiB1cCBjb2RlIHNvIHdlIG9ubHkgaGF2
ZSB0byBjYWxsIHNldEF0dGFjaGVkV2luZG93SGVpZ2h0IGluIEluc3BlY3RvckNvbnRyb2xsZXI6
OmF0dGFjaFdpbmRvdwotICAgIG1fY2xpZW50LT5zZXRBdHRhY2hlZFdpbmRvd0hlaWdodChjb25z
dHJhaW5lZEF0dGFjaGVkV2luZG93SGVpZ2h0KHByZWZlcnJlZEhlaWdodCwgaW5zcGVjdGVkUGFn
ZUhlaWdodCkpOwotfQotCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmNsb3NlV2luZG93KCkK
LXsKLSAgICBtX2NsaWVudC0+Y2xvc2VXaW5kb3coKTsKKyAgICBtX2Nsb3NpbmdGcm9udGVuZCA9
IGZhbHNlOwogfQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnJlbGVhc2VET01BZ2VudCgp
CkBAIC02ODEsNyArNTU3LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZWxlYXNlRE9N
QWdlbnQoKQogICAgIC8vIG5vIHJlZmVyZW5jZXMgdG8gdGhlIERPTSBhZ2VudCBmcm9tIHRoZSBE
T00gdHJlZS4KICAgICBpZiAobV9kb21BZ2VudCkKICAgICAgICAgbV9kb21BZ2VudC0+cmVzZXQo
KTsKLSAgICBtX2RvbUFnZW50ID0gMDsKKyAgICBtX2RvbUFnZW50LmNsZWFyKCk7CiB9CiAKIHZv
aWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cG9wdWxhdGVTY3JpcHRPYmplY3RzKCkKQEAgLTcxNSw3
ICs1OTEsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnBvcHVsYXRlU2NyaXB0T2JqZWN0
cygpCiAgICAgICAgIG1fZnJvbnRlbmQtPnVwZGF0ZUNvbnNvbGVNZXNzYWdlRXhwaXJlZENvdW50
KG1fZXhwaXJlZENvbnNvbGVNZXNzYWdlQ291bnQpOwogICAgIHVuc2lnbmVkIG1lc3NhZ2VDb3Vu
dCA9IG1fY29uc29sZU1lc3NhZ2VzLnNpemUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbWVzc2FnZUNvdW50OyArK2kpCi0gICAgICAgIG1fY29uc29sZU1lc3NhZ2VzW2ldLT5hZGRU
b0NvbnNvbGUobV9mcm9udGVuZC5nZXQoKSk7CisgICAgICAgIG1fY29uc29sZU1lc3NhZ2VzW2ld
LT5hZGRUb0Zyb250ZW5kKG1fZnJvbnRlbmQuZ2V0KCksIG1faW5qZWN0ZWRTY3JpcHRIb3N0Lmdl
dCgpKTsKIAogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAgIGlmIChtX2RlYnVn
Z2VyRW5hYmxlZCkKQEAgLTgwMSw3ICs2NzcsOCBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6
OmRpZENvbW1pdExvYWQoRG9jdW1lbnRMb2FkZXIqIGxvYWRlcikKICAgICBBU1NFUlQobV9pbnNw
ZWN0ZWRQYWdlKTsKIAogICAgIGlmIChsb2FkZXItPmZyYW1lKCkgPT0gbV9pbnNwZWN0ZWRQYWdl
LT5tYWluRnJhbWUoKSkgewotICAgICAgICBtX2NsaWVudC0+aW5zcGVjdGVkVVJMQ2hhbmdlZChs
b2FkZXItPnVybCgpLnN0cmluZygpKTsKKyAgICAgICAgaWYgKG1fZnJvbnRlbmQpCisgICAgICAg
ICAgICBtX2Zyb250ZW5kLT5pbnNwZWN0ZWRVUkxDaGFuZ2VkKGxvYWRlci0+dXJsKCkuc3RyaW5n
KCkpOwogCiAgICAgICAgIG1faW5qZWN0ZWRTY3JpcHRIb3N0LT5kaXNjYXJkSW5qZWN0ZWRTY3Jp
cHRzKCk7CiAgICAgICAgIGNsZWFyQ29uc29sZU1lc3NhZ2VzKCk7CkBAIC0xNDM2LDE2ICsxMzEz
LDYgQEAgSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlKiBJbnNwZWN0b3JDb250cm9sbGVyOjpn
ZXRET01TdG9yYWdlUmVzb3VyY2VGb3JJZChpbnQKIH0KICNlbmRpZgogCi12b2lkIEluc3BlY3Rv
ckNvbnRyb2xsZXI6Om1vdmVXaW5kb3dCeShmbG9hdCB4LCBmbG9hdCB5KSBjb25zdAotewotICAg
IGlmICghbV9wYWdlIHx8ICFlbmFibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEZsb2F0
UmVjdCBmcmFtZVJlY3QgPSBtX3BhZ2UtPmNocm9tZSgpLT53aW5kb3dSZWN0KCk7Ci0gICAgZnJh
bWVSZWN0Lm1vdmUoeCwgeSk7Ci0gICAgbV9wYWdlLT5jaHJvbWUoKS0+c2V0V2luZG93UmVjdChm
cmFtZVJlY3QpOwotfQotCiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiB2b2lkIElu
c3BlY3RvckNvbnRyb2xsZXI6OmFkZFByb2ZpbGUoUGFzc1JlZlB0cjxTY3JpcHRQcm9maWxlPiBw
cnBQcm9maWxlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCkK
IHsKQEAgLTE0OTgsNyArMTM2NSw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6Z2V0UHJv
ZmlsZShsb25nIGNhbGxJZCwgdW5zaWduZWQgdWlkKQogICAgIFByb2ZpbGVzTWFwOjppdGVyYXRv
ciBpdCA9IG1fcHJvZmlsZXMuZmluZCh1aWQpOwogI2lmIFVTRShKU0MpCiAgICAgaWYgKGl0ICE9
IG1fcHJvZmlsZXMuZW5kKCkpCi0gICAgICAgIG1fZnJvbnRlbmQtPmRpZEdldFByb2ZpbGUoY2Fs
bElkLCB0b0pTKG1fZnJvbnRlbmRTY3JpcHRTdGF0ZSwgaXQtPnNlY29uZC5nZXQoKSkpOworICAg
ICAgICBtX2Zyb250ZW5kLT5kaWRHZXRQcm9maWxlKGNhbGxJZCwgdG9KUyhtX2Zyb250ZW5kLT5z
Y3JpcHRTdGF0ZSgpLCBpdC0+c2Vjb25kLmdldCgpKSk7CiAjZW5kaWYKIH0KIApAQCAtMTYzNSw3
ICsxNTAyLDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjplbmFibGVEZWJ1Z2dlcigpCiAg
ICAgaWYgKG1fZGVidWdnZXJFbmFibGVkKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIW1f
ZnJvbnRlbmRTY3JpcHRTdGF0ZSB8fCAhbV9mcm9udGVuZCkKKyAgICBpZiAoIW1fZnJvbnRlbmQp
CiAgICAgICAgIG1fYXR0YWNoRGVidWdnZXJXaGVuU2hvd24gPSB0cnVlOwogICAgIGVsc2Ugewog
ICAgICAgICBtX2Zyb250ZW5kLT5hdHRhY2hEZWJ1Z2dlcldoZW5TaG93bigpOwpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oIGIvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCmluZGV4IGVhZDRkNWUuLjU4ODUzYWIgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAorKysgYi9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKQEAgLTY2LDcgKzY2LDcgQEAgY2xh
c3MgSW5qZWN0ZWRTY3JpcHRIb3N0OwogY2xhc3MgSW5zcGVjdG9yQmFja2VuZDsKIGNsYXNzIElu
c3BlY3RvckNsaWVudDsKIGNsYXNzIEluc3BlY3RvckZyb250ZW5kOwotY2xhc3MgSW5zcGVjdG9y
RnJvbnRlbmRIb3N0OworY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ7CiBjbGFzcyBJbnNw
ZWN0b3JUaW1lbGluZUFnZW50OwogY2xhc3MgSmF2YVNjcmlwdENhbGxGcmFtZTsKIGNsYXNzIEtV
Ukw7CkBAIC0xMTYsMTEgKzExNiw5IEBAIHB1YmxpYzoKICAgICB+SW5zcGVjdG9yQ29udHJvbGxl
cigpOwogCiAgICAgSW5zcGVjdG9yQmFja2VuZCogaW5zcGVjdG9yQmFja2VuZCgpIHsgcmV0dXJu
IG1faW5zcGVjdG9yQmFja2VuZC5nZXQoKTsgfQotICAgIEluc3BlY3RvckZyb250ZW5kSG9zdCog
aW5zcGVjdG9yRnJvbnRlbmRIb3N0KCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZEhvc3Qu
Z2V0KCk7IH0KICAgICBJbmplY3RlZFNjcmlwdEhvc3QqIGluamVjdGVkU2NyaXB0SG9zdCgpIHsg
cmV0dXJuIG1faW5qZWN0ZWRTY3JpcHRIb3N0LmdldCgpOyB9CiAKICAgICB2b2lkIGluc3BlY3Rl
ZFBhZ2VEZXN0cm95ZWQoKTsKLSAgICB2b2lkIHBhZ2VEZXN0cm95ZWQoKSB7IG1fcGFnZSA9IDA7
IH0KIAogICAgIGJvb2wgZW5hYmxlZCgpIGNvbnN0OwogCkBAIC0xMzcsMjcgKzEzNSwyMiBAQCBw
dWJsaWM6CiAgICAgdm9pZCBzaG93UGFuZWwoU3BlY2lhbFBhbmVscyk7CiAgICAgdm9pZCBjbG9z
ZSgpOwogCi0gICAgYm9vbCB3aW5kb3dWaXNpYmxlKCk7Ci0gICAgdm9pZCBzZXRXaW5kb3dWaXNp
YmxlKGJvb2wgdmlzaWJsZSA9IHRydWUsIGJvb2wgYXR0YWNoZWQgPSBmYWxzZSk7Ci0KICAgICB2
b2lkIGFkZE1lc3NhZ2VUb0NvbnNvbGUoTWVzc2FnZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1lc3Nh
Z2VMZXZlbCwgU2NyaXB0Q2FsbFN0YWNrKik7CiAgICAgdm9pZCBhZGRNZXNzYWdlVG9Db25zb2xl
KE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYg
bWVzc2FnZSwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VJRCk7CiAg
ICAgdm9pZCBjbGVhckNvbnNvbGVNZXNzYWdlcygpOwogICAgIGNvbnN0IFZlY3RvcjxDb25zb2xl
TWVzc2FnZSo+JiBjb25zb2xlTWVzc2FnZXMoKSBjb25zdCB7IHJldHVybiBtX2NvbnNvbGVNZXNz
YWdlczsgfQogCi0gICAgYm9vbCBjYW5BdHRhY2hXaW5kb3coKSBjb25zdDsKLSAgICB2b2lkIGF0
dGFjaFdpbmRvdygpOwotICAgIHZvaWQgZGV0YWNoV2luZG93KCk7Ci0KICAgICBib29sIHNlYXJj
aGluZ0Zvck5vZGVJblBhZ2UoKSBjb25zdCB7IHJldHVybiBtX3NlYXJjaGluZ0Zvck5vZGU7IH0K
ICAgICB2b2lkIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KGNvbnN0IEhpdFRlc3RSZXN1bHQmLCB1
bnNpZ25lZCBtb2RpZmllckZsYWdzKTsKICAgICB2b2lkIGhhbmRsZU1vdXNlUHJlc3NPbk5vZGUo
Tm9kZSopOwogCisgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENsaWVudChQYXNzT3duUHRy
PEluc3BlY3RvckZyb250ZW5kQ2xpZW50PiBjbGllbnQpOworICAgIGJvb2wgaGFzSW5zcGVjdG9y
RnJvbnRlbmRDbGllbnQoKSBjb25zdCB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2xpZW50
OyB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIAogICAgIHZvaWQgaW5zcGVjdGVkV2luZG93U2NyaXB0T2JqZWN0Q2xlYXJlZChGcmFtZSop
OwotICAgIHZvaWQgd2luZG93U2NyaXB0T2JqZWN0QXZhaWxhYmxlKCk7CiAKLSAgICB2b2lkIHNl
dEZyb250ZW5kUHJveHlPYmplY3QoU2NyaXB0U3RhdGUqIHN0YXRlLCBTY3JpcHRPYmplY3Qgd2Vi
SW5zcGVjdG9yT2JqLCBTY3JpcHRPYmplY3QgaW5qZWN0ZWRTY3JpcHRPYmogPSBTY3JpcHRPYmpl
Y3QoKSk7Ci0gICAgU2NyaXB0U3RhdGUqIGZyb250ZW5kU2NyaXB0U3RhdGUoKSBjb25zdCB7IHJl
dHVybiBtX2Zyb250ZW5kU2NyaXB0U3RhdGU7IH0KKyAgICBib29sIHdpbmRvd1Zpc2libGUoKTsK
KyAgICB2b2lkIHNldEZyb250ZW5kKFBhc3NPd25QdHI8SW5zcGVjdG9yRnJvbnRlbmQ+KTsKIAog
ICAgIHZvaWQgcG9wdWxhdGVTY3JpcHRPYmplY3RzKCk7CiAgICAgdm9pZCByZXNldFNjcmlwdE9i
amVjdHMoKTsKQEAgLTI2MywxOSArMjU2LDE2IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGNvbnN0
IFN0cmluZyYgZnJvbnRlbmRTZXR0aW5nc1NldHRpbmdOYW1lKCk7CiAKICAgICBmcmllbmQgY2xh
c3MgSW5zcGVjdG9yQmFja2VuZDsKLSAgICBmcmllbmQgY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmRI
b3N0OwogICAgIGZyaWVuZCBjbGFzcyBJbmplY3RlZFNjcmlwdEhvc3Q7CiAKICAgICAvLyBGb2xs
b3dpbmcgYXJlIHVzZWQgZnJvbSBJbnNwZWN0b3JCYWNrZW5kIGFuZCBpbnRlcm5hbGx5LgotCiAg
ICAgdm9pZCBzZXRTZWFyY2hpbmdGb3JOb2RlKGJvb2wgZW5hYmxlZCk7CiAKLSAgICB2b2lkIHNj
cmlwdE9iamVjdFJlYWR5KCk7Ci0gICAgdm9pZCBtb3ZlV2luZG93QnkoZmxvYXQgeCwgZmxvYXQg
eSkgY29uc3Q7Ci0gICAgdm9pZCBzZXRBdHRhY2hlZFdpbmRvdyhib29sKTsKLSAgICB2b2lkIHNl
dEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCk7CisgICAgdm9pZCBmcm9udGVu
ZFJlYWR5KCk7CisgICAgdm9pZCB3aWxsQ2xvc2VGcm9udGVuZCgpOworCisgICAgLy8gRm9sbG93
aW5nIGFyZSB1c2VkIGZyb20gSW5zcGVjdG9yQmFja2VuZCBhbmQgaW50ZXJuYWxseS4KICAgICB2
b2lkIHN0b3JlTGFzdEFjdGl2ZVBhbmVsKGNvbnN0IFN0cmluZyYgcGFuZWxOYW1lKTsKLSAgICB2
b2lkIGNsb3NlV2luZG93KCk7CiAgICAgSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50KCkgeyBy
ZXR1cm4gbV9kb21BZ2VudC5nZXQoKTsgfQogICAgIHZvaWQgcmVsZWFzZURPTUFnZW50KCk7CiAK
QEAgLTMxNiw4ICszMDYsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgcHJ1bmVSZXNvdXJjZXMoUmVz
b3VyY2VzTWFwKiwgRG9jdW1lbnRMb2FkZXIqIGxvYWRlclRvS2VlcCA9IDApOwogICAgIHZvaWQg
cmVtb3ZlQWxsUmVzb3VyY2VzKFJlc291cmNlc01hcCogbWFwKSB7IHBydW5lUmVzb3VyY2VzKG1h
cCk7IH0KIAotICAgIHZvaWQgc2hvd1dpbmRvdygpOwotCiAgICAgYm9vbCBpc01haW5SZXNvdXJj
ZUxvYWRlcihEb2N1bWVudExvYWRlciogbG9hZGVyLCBjb25zdCBLVVJMJiByZXF1ZXN0VXJsKTsK
IAogICAgIFNwZWNpYWxQYW5lbHMgc3BlY2lhbFBhbmVsRm9ySlNOYW1lKGNvbnN0IFN0cmluZyYg
cGFuZWxOYW1lKTsKQEAgLTMyNiwxMCArMzE0LDEyIEBAIHByaXZhdGU6CiAKICAgICBQYWdlKiBt
X2luc3BlY3RlZFBhZ2U7CiAgICAgSW5zcGVjdG9yQ2xpZW50KiBtX2NsaWVudDsKKyAgICBPd25Q
dHI8SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ+IG1faW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ7Cisg
ICAgYm9vbCBtX29wZW5pbmdGcm9udGVuZDsKKyAgICBib29sIG1fY2xvc2luZ0Zyb250ZW5kOwog
ICAgIE93blB0cjxJbnNwZWN0b3JGcm9udGVuZD4gbV9mcm9udGVuZDsKICAgICBSZWZQdHI8SW5z
cGVjdG9yRE9NQWdlbnQ+IG1fZG9tQWdlbnQ7CiAgICAgT3duUHRyPEluc3BlY3RvclRpbWVsaW5l
QWdlbnQ+IG1fdGltZWxpbmVBZ2VudDsKLSAgICBQYWdlKiBtX3BhZ2U7CiAgICAgUmVmUHRyPE5v
ZGU+IG1fbm9kZVRvRm9jdXM7CiAgICAgUmVmUHRyPEluc3BlY3RvclJlc291cmNlPiBtX21haW5S
ZXNvdXJjZTsKICAgICBSZXNvdXJjZXNNYXAgbV9yZXNvdXJjZXM7CkBAIC0zNDUsOCArMzM1LDYg
QEAgcHJpdmF0ZToKICNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCiAgICAgRE9NU3RvcmFnZVJlc291
cmNlc01hcCBtX2RvbVN0b3JhZ2VSZXNvdXJjZXM7CiAjZW5kaWYKLSAgICBTY3JpcHRTdGF0ZSog
bV9mcm9udGVuZFNjcmlwdFN0YXRlOwotICAgIGJvb2wgbV93aW5kb3dWaXNpYmxlOwogICAgIFNw
ZWNpYWxQYW5lbHMgbV9zaG93QWZ0ZXJWaXNpYmxlOwogICAgIFJlZlB0cjxOb2RlPiBtX2hpZ2hs
aWdodGVkTm9kZTsKICAgICB1bnNpZ25lZCBtX2dyb3VwTGV2ZWw7CkBAIC0zNTUsNyArMzQzLDYg
QEAgcHJpdmF0ZToKICAgICBib29sIG1fcmVzb3VyY2VUcmFja2luZ0VuYWJsZWQ7CiAgICAgYm9v
bCBtX3Jlc291cmNlVHJhY2tpbmdTZXR0aW5nc0xvYWRlZDsKICAgICBSZWZQdHI8SW5zcGVjdG9y
QmFja2VuZD4gbV9pbnNwZWN0b3JCYWNrZW5kOwotICAgIFJlZlB0cjxJbnNwZWN0b3JGcm9udGVu
ZEhvc3Q+IG1faW5zcGVjdG9yRnJvbnRlbmRIb3N0OwogICAgIFJlZlB0cjxJbmplY3RlZFNjcmlw
dEhvc3Q+IG1faW5qZWN0ZWRTY3JpcHRIb3N0OwogCiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmlu
ZywgU3RyaW5nPiBTZXR0aW5nczsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckZyb250ZW5kLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmNw
cAppbmRleCBhZjU2MjBmLi5jYzVjZDc1IDEwMDc1NQotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JGcm9udGVuZC5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJv
bnRlbmQuY3BwCkBAIC00OSwxNCArNDksMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1J
bnNwZWN0b3JGcm9udGVuZDo6SW5zcGVjdG9yRnJvbnRlbmQoSW5zcGVjdG9yQ29udHJvbGxlciog
aW5zcGVjdG9yQ29udHJvbGxlciwgU2NyaXB0T2JqZWN0IHdlYkluc3BlY3RvcikKLSAgICA6IG1f
aW5zcGVjdG9yQ29udHJvbGxlcihpbnNwZWN0b3JDb250cm9sbGVyKQotICAgICwgbV93ZWJJbnNw
ZWN0b3Iod2ViSW5zcGVjdG9yKQorSW5zcGVjdG9yRnJvbnRlbmQ6Okluc3BlY3RvckZyb250ZW5k
KFNjcmlwdE9iamVjdCB3ZWJJbnNwZWN0b3IpCisgICAgOiBtX3dlYkluc3BlY3Rvcih3ZWJJbnNw
ZWN0b3IpCiB7CiB9CiAKIEluc3BlY3RvckZyb250ZW5kOjp+SW5zcGVjdG9yRnJvbnRlbmQoKSAK
IHsKKyAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJbnNwZWN0b3IsICJjbG9z
ZSIpOworICAgIGZ1bmN0aW9uLmNhbGwoKTsKKwogICAgIG1fd2ViSW5zcGVjdG9yID0gU2NyaXB0
T2JqZWN0KCk7CiB9CiAKQEAgLTkxLDcgKzkzLDcgQEAgdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6
dXBkYXRlQ29uc29sZU1lc3NhZ2VFeHBpcmVkQ291bnQodW5zaWduZWQgY291bnQpCiAgICAgZnVu
Y3Rpb24uY2FsbCgpOwogfQogCi12b2lkIEluc3BlY3RvckZyb250ZW5kOjphZGRDb25zb2xlTWVz
c2FnZShjb25zdCBTY3JpcHRPYmplY3QmIG1lc3NhZ2VPYmosIGNvbnN0IFZlY3RvcjxTY3JpcHRT
dHJpbmc+JiBmcmFtZXMsIFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgY29uc3QgVmVjdG9yPFNj
cmlwdFZhbHVlPiBhcmd1bWVudHMsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3ZvaWQgSW5zcGVj
dG9yRnJvbnRlbmQ6OmFkZENvbnNvbGVNZXNzYWdlKGNvbnN0IFNjcmlwdE9iamVjdCYgbWVzc2Fn
ZU9iaiwgY29uc3QgVmVjdG9yPFNjcmlwdFN0cmluZz4mIGZyYW1lcywgY29uc3QgVmVjdG9yPFJl
ZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+ID4mIGFyZ3VtZW50cywgY29uc3QgU3RyaW5nJiBt
ZXNzYWdlKQogewogICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3dlYkluc3BlY3Rv
ciwgImRpc3BhdGNoIik7IAogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KCJhZGRDb25zb2xl
TWVzc2FnZSIpOwpAQCAtMTAwLDEwICsxMDIsOCBAQCB2b2lkIEluc3BlY3RvckZyb250ZW5kOjph
ZGRDb25zb2xlTWVzc2FnZShjb25zdCBTY3JpcHRPYmplY3QmIG1lc3NhZ2VPYmosIGNvbnN0CiAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmcmFtZXMuc2l6ZSgpOyArK2kpCiAgICAg
ICAgICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChmcmFtZXNbaV0pOwogICAgIH0gZWxzZSBp
ZiAoIWFyZ3VtZW50cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0
ZWRTY3JpcHQgPSBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluamVjdGVkU2NyaXB0SG9zdCgpLT5p
bmplY3RlZFNjcmlwdEZvcihzY3JpcHRTdGF0ZSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBhcmd1bWVudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIFJlZlB0cjxTZXJp
YWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWRWYWx1ZSA9IGluamVjdGVkU2NyaXB0LndyYXBG
b3JDb25zb2xlKGFyZ3VtZW50c1tpXSk7Ci0gICAgICAgICAgICBTY3JpcHRWYWx1ZSBzY3JpcHRW
YWx1ZSA9IFNjcmlwdFZhbHVlOjpkZXNlcmlhbGl6ZSh0aGlzLT5zY3JpcHRTdGF0ZSgpLCBzZXJp
YWxpemVkVmFsdWUuZ2V0KCkpOworICAgICAgICAgICAgU2NyaXB0VmFsdWUgc2NyaXB0VmFsdWUg
PSBTY3JpcHRWYWx1ZTo6ZGVzZXJpYWxpemUoc2NyaXB0U3RhdGUoKSwgYXJndW1lbnRzW2ldLmdl
dCgpKTsKICAgICAgICAgICAgIGlmIChzY3JpcHRWYWx1ZS5oYXNOb1ZhbHVlKCkpIHsKICAgICAg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgICAgICByZXR1cm47
CkBAIC0yMjAsNiArMjIwLDE5IEBAIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OnJlc2V0KCkKICAg
ICBjYWxsU2ltcGxlRnVuY3Rpb24oInJlc2V0Iik7CiB9CiAKK3ZvaWQgSW5zcGVjdG9yRnJvbnRl
bmQ6OmJyaW5nVG9Gcm9udCgpCit7CisgICAgY2FsbFNpbXBsZUZ1bmN0aW9uKCJicmluZ1RvRnJv
bnQiKTsKK30KKwordm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6aW5zcGVjdGVkVVJMQ2hhbmdlZChj
b25zdCBTdHJpbmcmIHVybCkKK3sKKyAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV93
ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIpOworICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KCJp
bnNwZWN0ZWRVUkxDaGFuZ2VkIik7CisgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQodXJsKTsK
KyAgICBmdW5jdGlvbi5jYWxsKCk7Cit9CisKIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OnJlc291
cmNlVHJhY2tpbmdXYXNFbmFibGVkKCkKIHsKICAgICBjYWxsU2ltcGxlRnVuY3Rpb24oInJlc291
cmNlVHJhY2tpbmdXYXNFbmFibGVkIik7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JGcm9udGVuZC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQu
aAppbmRleCA4NjFhNmY3Li4yNWEwMzUxIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JGcm9udGVuZC5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250
ZW5kLmgKQEAgLTQ5LDcgKzQ5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3Mg
SW5zcGVjdG9yRnJvbnRlbmQgOiBwdWJsaWMgTm9uY29weWFibGUgewogICAgIHB1YmxpYzoKLSAg
ICAgICAgSW5zcGVjdG9yRnJvbnRlbmQoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29u
dHJvbGxlciwgU2NyaXB0T2JqZWN0IHdlYkluc3BlY3Rvcik7CisgICAgICAgIEluc3BlY3RvckZy
b250ZW5kKFNjcmlwdE9iamVjdCB3ZWJJbnNwZWN0b3IpOwogICAgICAgICB+SW5zcGVjdG9yRnJv
bnRlbmQoKTsKIAogICAgICAgICBTY3JpcHRBcnJheSBuZXdTY3JpcHRBcnJheSgpOwpAQCAtNjAs
NyArNjAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgcG9wdWxhdGVGcm9u
dGVuZFNldHRpbmdzKGNvbnN0IFN0cmluZyYgc2V0dGluZ3MpOwogCiAgICAgICAgIHZvaWQgdXBk
YXRlQ29uc29sZU1lc3NhZ2VFeHBpcmVkQ291bnQodW5zaWduZWQgY291bnQpOwotICAgICAgICB2
b2lkIGFkZENvbnNvbGVNZXNzYWdlKGNvbnN0IFNjcmlwdE9iamVjdCYgbWVzc2FnZU9iaiwgY29u
c3QgVmVjdG9yPFNjcmlwdFN0cmluZz4mIGZyYW1lcywgU2NyaXB0U3RhdGUqLCBjb25zdCBWZWN0
b3I8U2NyaXB0VmFsdWU+IGFyZ3VtZW50cywgY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKKyAgICAg
ICAgdm9pZCBhZGRDb25zb2xlTWVzc2FnZShjb25zdCBTY3JpcHRPYmplY3QmIG1lc3NhZ2VPYmos
IGNvbnN0IFZlY3RvcjxTY3JpcHRTdHJpbmc+JiBmcmFtZXMsIGNvbnN0IFZlY3RvcjxSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiA+JiBhcmd1bWVudHMsIGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSk7CiAgICAgICAgIHZvaWQgdXBkYXRlQ29uc29sZU1lc3NhZ2VSZXBlYXRDb3VudCh1bnNpZ25l
ZCBjb3VudCk7CiAgICAgICAgIHZvaWQgY2xlYXJDb25zb2xlTWVzc2FnZXMoKTsKIApAQCAtNzMs
NiArNzMsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgc2hvd1BhbmVsKGlu
dCBwYW5lbCk7CiAgICAgICAgIHZvaWQgcG9wdWxhdGVJbnRlcmZhY2UoKTsKICAgICAgICAgdm9p
ZCByZXNldCgpOworICAgICAgICAKKyAgICAgICAgdm9pZCBicmluZ1RvRnJvbnQoKTsKKyAgICAg
ICAgdm9pZCBpbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYpOwogCiAgICAgICAgIHZv
aWQgcmVzb3VyY2VUcmFja2luZ1dhc0VuYWJsZWQoKTsKICAgICAgICAgdm9pZCByZXNvdXJjZVRy
YWNraW5nV2FzRGlzYWJsZWQoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckZyb250ZW5kQ2xpZW50LmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVu
ZENsaWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1ODM0NmIKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVu
dC5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEluc3BlY3RvckZyb250ZW5kQ2xpZW50X2gKKyNk
ZWZpbmUgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRfaAorCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENvbnRleHRNZW51SXRlbTsKK2NsYXNz
IEV2ZW50OworY2xhc3MgU3RyaW5nOworCitjbGFzcyBJbnNwZWN0b3JGcm9udGVuZENsaWVudCB7
CitwdWJsaWM6CisgICAgdmlydHVhbCB+SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQoKSB7IH0KKwor
ICAgIHZpcnR1YWwgdm9pZCB3aW5kb3dPYmplY3RDbGVhcmVkKCkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBmcm9udGVuZExvYWRlZCgpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBtb3ZlV2luZG93
QnkoZmxvYXQgeCwgZmxvYXQgeSkgPSAwOworCisgICAgdmlydHVhbCBTdHJpbmcgbG9jYWxpemVk
U3RyaW5nc1VSTCgpID0gMDsKKyAgICB2aXJ0dWFsIFN0cmluZyBoaWRkZW5QYW5lbHMoKSA9IDA7
CisKKyAgICB2aXJ0dWFsIHZvaWQgYnJpbmdUb0Zyb250KCkgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBjbG9zZVdpbmRvdygpID0gMDsKKworICAgIHZpcnR1YWwgYm9vbCBjYW5BdHRhY2hXaW5kb3co
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGF0dGFjaFdpbmRvdygpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgZGV0YWNoV2luZG93KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjaGFuZ2VBdHRhY2hl
ZFdpbmRvd0hlaWdodCh1bnNpZ25lZCkgPSAwOworICAgIAorICAgIHZpcnR1YWwgdm9pZCBpbnNw
ZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBz
aG93Q29udGV4dE1lbnUoRXZlbnQqLCBjb25zdCBWZWN0b3I8Q29udGV4dE1lbnVJdGVtKj4mKSA9
IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5jcHAgYi9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDlmNzk1Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5jcHAKQEAgLTAsMCAr
MSwyMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoK
KyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmRD
bGllbnRMb2NhbC5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgIkNocm9t
ZS5oIgorI2luY2x1ZGUgIkNvbnRleHRNZW51LmgiCisjaW5jbHVkZSAiQ29udGV4dE1lbnVDb250
cm9sbGVyLmgiCisjaW5jbHVkZSAiQ29udGV4dE1lbnVJdGVtLmgiCisjaW5jbHVkZSAiQ29udGV4
dE1lbnVQcm92aWRlci5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkZyYW1l
LmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxl
ci5oIgorI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9y
RnJvbnRlbmRIb3N0LmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3Ry
aW5nLmgiCisjaW5jbHVkZSAiU2NyaXB0RnVuY3Rpb25DYWxsLmgiCisjaW5jbHVkZSAiU2NyaXB0
T2JqZWN0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRnJvbnRlbmRNZW51UHJv
dmlkZXIgOiBwdWJsaWMgQ29udGV4dE1lbnVQcm92aWRlciB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8RnJvbnRlbmRNZW51UHJvdmlkZXI+IGNyZWF0ZShJbnNwZWN0b3JGcm9udGVu
ZENsaWVudExvY2FsKiBmcm9udGVuZENsaWVudCwgU2NyaXB0T2JqZWN0IHdlYkluc3BlY3Rvciwg
Y29uc3QgVmVjdG9yPENvbnRleHRNZW51SXRlbSo+JiBpdGVtcykKKyAgICB7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgRnJvbnRlbmRNZW51UHJvdmlkZXIoZnJvbnRlbmRDbGllbnQsIHdl
Ykluc3BlY3RvciwgaXRlbXMpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkaXNjb25uZWN0KCkK
KyAgICB7CisgICAgICAgIG1fd2ViSW5zcGVjdG9yID0gU2NyaXB0T2JqZWN0KCk7CisgICAgICAg
IG1fZnJvbnRlbmRDbGllbnQgPSAwOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgRnJvbnRl
bmRNZW51UHJvdmlkZXIoSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbCogZnJvbnRlbmRDbGll
bnQsIFNjcmlwdE9iamVjdCB3ZWJJbnNwZWN0b3IsICBjb25zdCBWZWN0b3I8Q29udGV4dE1lbnVJ
dGVtKj4mIGl0ZW1zKQorICAgICAgICA6IG1fZnJvbnRlbmRDbGllbnQoZnJvbnRlbmRDbGllbnQp
CisgICAgICAgICwgbV93ZWJJbnNwZWN0b3Iod2ViSW5zcGVjdG9yKQorICAgICAgICAsIG1faXRl
bXMoaXRlbXMpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgfkZyb250ZW5kTWVudVByb3Zp
ZGVyKCkKKyAgICB7CisgICAgICAgIGNvbnRleHRNZW51Q2xlYXJlZCgpOworICAgIH0KKyAgICAK
KyAgICB2aXJ0dWFsIHZvaWQgcG9wdWxhdGVDb250ZXh0TWVudShDb250ZXh0TWVudSogbWVudSkK
KyAgICB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9pdGVtcy5zaXplKCk7ICsr
aSkKKyAgICAgICAgICAgIG1lbnUtPmFwcGVuZEl0ZW0oKm1faXRlbXNbaV0pOworICAgIH0KKyAg
ICAKKyAgICB2aXJ0dWFsIHZvaWQgY29udGV4dE1lbnVJdGVtU2VsZWN0ZWQoQ29udGV4dE1lbnVJ
dGVtKiBpdGVtKQorICAgIHsKKyAgICAgICAgaW50IGl0ZW1OdW1iZXIgPSBpdGVtLT5hY3Rpb24o
KSAtIENvbnRleHRNZW51SXRlbUJhc2VDdXN0b21UYWc7CisKKyAgICAgICAgU2NyaXB0RnVuY3Rp
b25DYWxsIGZ1bmN0aW9uKG1fd2ViSW5zcGVjdG9yLCAiZGlzcGF0Y2giKTsKKyAgICAgICAgZnVu
Y3Rpb24uYXBwZW5kQXJndW1lbnQoImNvbnRleHRNZW51SXRlbVNlbGVjdGVkIik7CisgICAgICAg
IGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGl0ZW1OdW1iZXIpOworICAgICAgICBmdW5jdGlvbi5j
YWxsKCk7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgdm9pZCBjb250ZXh0TWVudUNsZWFyZWQo
KQorICAgIHsKKworICAgICAgICBpZiAobV9mcm9udGVuZENsaWVudCkgeworICAgICAgICAgICAg
U2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fd2ViSW5zcGVjdG9yLCAiZGlzcGF0Y2giKTsK
KyAgICAgICAgICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KCJjb250ZXh0TWVudUNsZWFyZWQi
KTsKKyAgICAgICAgICAgIGZ1bmN0aW9uLmNhbGwoKTsKKworICAgICAgICAgICAgbV9mcm9udGVu
ZENsaWVudC0+bV9tZW51UHJvdmlkZXIgPSAwOworICAgICAgICB9CisgICAgICAgIGRlbGV0ZUFs
bFZhbHVlcyhtX2l0ZW1zKTsKKyAgICAgICAgbV9pdGVtcy5jbGVhcigpOworICAgIH0KKworICAg
IEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwqIG1fZnJvbnRlbmRDbGllbnQ7CisgICAgU2Ny
aXB0T2JqZWN0IG1fd2ViSW5zcGVjdG9yOworICAgIFZlY3RvcjxDb250ZXh0TWVudUl0ZW0qPiBt
X2l0ZW1zOworfTsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGluc3BlY3RvckF0dGFjaGVk
SGVpZ2h0TmFtZSA9ICJpbnNwZWN0b3JBdHRhY2hlZEhlaWdodCI7CitzdGF0aWMgY29uc3QgdW5z
aWduZWQgZGVmYXVsdEF0dGFjaGVkSGVpZ2h0ID0gMzAwOworc3RhdGljIGNvbnN0IGZsb2F0IG1p
bmltdW1BdHRhY2hlZEhlaWdodCA9IDI1MC4wZjsKK3N0YXRpYyBjb25zdCBmbG9hdCBtYXhpbXVt
QXR0YWNoZWRIZWlnaHRSYXRpbyA9IDAuNzVmOworCitJbnNwZWN0b3JGcm9udGVuZENsaWVudExv
Y2FsOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsKEluc3BlY3RvckNvbnRyb2xsZXIqIGlu
c3BlY3RvckNvbnRyb2xsZXIsIFBhZ2UqIGZyb250ZW5kUGFnZSkKKyAgICA6IG1faW5zcGVjdG9y
Q29udHJvbGxlcihpbnNwZWN0b3JDb250cm9sbGVyKQorICAgICwgbV9mcm9udGVuZFBhZ2UoZnJv
bnRlbmRQYWdlKQorICAgICwgbV9mcm9udGVuZFNjcmlwdFN0YXRlKDApCisgICAgLCBtX21lbnVQ
cm92aWRlcigwKQoreworfQorCitJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjp+SW5zcGVj
dG9yRnJvbnRlbmRDbGllbnRMb2NhbCgpCit7CisgICAgaWYgKG1fbWVudVByb3ZpZGVyKQorICAg
ICAgICBtX21lbnVQcm92aWRlci0+ZGlzY29ubmVjdCgpOworICAgIG1fZnJvbnRlbmRTY3JpcHRT
dGF0ZSA9IDA7CisgICAgbV9mcm9udGVuZFBhZ2UgPSAwOworICAgIG1faW5zcGVjdG9yQ29udHJv
bGxlciA9IDA7Cit9CisgICAgCit2b2lkIEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6Ondp
bmRvd09iamVjdENsZWFyZWQoKQoreworICAgIC8vIEdyYW50IHRoZSBpbnNwZWN0b3IgdGhlIGFi
aWxpdHkgdG8gc2NyaXB0IHRoZSBpbnNwZWN0ZWQgcGFnZS4KKyAgICBtX2Zyb250ZW5kUGFnZS0+
bWFpbkZyYW1lKCktPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmdyYW50VW5pdmVyc2Fs
QWNjZXNzKCk7CisgICAgLy8gRklYTUU6IGRvbid0IGtlZXAgcmVmZXJlbmNlIHRvIHRoZSBzY3Jp
cHQgc3RhdGUKKyAgICBtX2Zyb250ZW5kU2NyaXB0U3RhdGUgPSBzY3JpcHRTdGF0ZUZyb21QYWdl
KGRlYnVnZ2VyV29ybGQoKSwgbV9mcm9udGVuZFBhZ2UpOworICAgIFNjcmlwdEdsb2JhbE9iamVj
dDo6c2V0KG1fZnJvbnRlbmRTY3JpcHRTdGF0ZSwgIkluc3BlY3RvckJhY2tlbmQiLCBtX2luc3Bl
Y3RvckNvbnRyb2xsZXItPmluc3BlY3RvckJhY2tlbmQoKSk7CisgICAgbV9mcm9udGVuZEhvc3Qg
PSBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OmNyZWF0ZSh0aGlzKTsKKyAgICBTY3JpcHRHbG9iYWxP
YmplY3Q6OnNldChtX2Zyb250ZW5kU2NyaXB0U3RhdGUsICJJbnNwZWN0b3JGcm9udGVuZEhvc3Qi
LCBtX2Zyb250ZW5kSG9zdC5nZXQoKSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmRDbGll
bnRMb2NhbDo6ZnJvbnRlbmRMb2FkZWQoKQoreworICAgIC8vIE1ha2Ugc3VyZSBvdXIgd2luZG93
IGlzIHZpc2libGUgbm93IHRoYXQgdGhlIHBhZ2UgbG9hZGVkCisgICAgYnJpbmdUb0Zyb250KCk7
CisKKyAgICAvLyBDcmVhdGUgSW5zcGVjdG9yRnJvbnRlbmQgYW5kIHNldCBpdCB0byBJbnNwZWN0
b3JDb250cm9sbGVyLgorICAgIEFTU0VSVChtX2Zyb250ZW5kU2NyaXB0U3RhdGUpOworICAgIFNj
cmlwdE9iamVjdCB3ZWJJbnNwZWN0b3JPYmo7CisgICAgaWYgKCFTY3JpcHRHbG9iYWxPYmplY3Q6
OmdldChtX2Zyb250ZW5kU2NyaXB0U3RhdGUsICJXZWJJbnNwZWN0b3IiLCB3ZWJJbnNwZWN0b3JP
YmopKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+c2V0RnJvbnRlbmQobmV3IEluc3BlY3Rv
ckZyb250ZW5kKHdlYkluc3BlY3Rvck9iaikpOworfQorCitib29sIEluc3BlY3RvckZyb250ZW5k
Q2xpZW50TG9jYWw6OmNhbkF0dGFjaFdpbmRvdygpCit7CisgICAgdW5zaWduZWQgaW5zcGVjdGVk
UGFnZUhlaWdodCA9IG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdGVkUGFnZSgpLT5tYWlu
RnJhbWUoKS0+dmlldygpLT52aXNpYmxlSGVpZ2h0KCk7CisKKyAgICAvLyBEb24ndCBhbGxvdyB0
aGUgYXR0YWNoIGlmIHRoZSB3aW5kb3cgd291bGQgYmUgdG9vIHNtYWxsIHRvIGFjY29tbW9kYXRl
IHRoZSBtaW5pbXVtIGluc3BlY3RvciBoZWlnaHQuCisgICAgcmV0dXJuIG1pbmltdW1BdHRhY2hl
ZEhlaWdodCA8PSBpbnNwZWN0ZWRQYWdlSGVpZ2h0ICogbWF4aW11bUF0dGFjaGVkSGVpZ2h0UmF0
aW87Cit9CisKK3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6Y2hhbmdlQXR0YWNo
ZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KQoreworICAgIHVuc2lnbmVkIHRvdGFsSGVp
Z2h0ID0gbV9mcm9udGVuZFBhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCktPnZpc2libGVIZWlnaHQo
KSArIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdGVkUGFnZSgpLT5tYWluRnJhbWUoKS0+
dmlldygpLT52aXNpYmxlSGVpZ2h0KCk7CisgICAgdW5zaWduZWQgYXR0YWNoZWRIZWlnaHQgPSBj
b25zdHJhaW5lZEF0dGFjaGVkV2luZG93SGVpZ2h0KGhlaWdodCwgdG90YWxIZWlnaHQpOworICAg
IG1faW5zcGVjdG9yQ29udHJvbGxlci0+c2V0U2V0dGluZyhpbnNwZWN0b3JBdHRhY2hlZEhlaWdo
dE5hbWUsIFN0cmluZzo6bnVtYmVyKGF0dGFjaGVkSGVpZ2h0KSk7CisgICAgc2V0QXR0YWNoZWRX
aW5kb3dIZWlnaHQoYXR0YWNoZWRIZWlnaHQpOworfQorCit2b2lkIEluc3BlY3RvckZyb250ZW5k
Q2xpZW50TG9jYWw6Om1vdmVXaW5kb3dCeShmbG9hdCB4LCBmbG9hdCB5KQoreworICAgIEZsb2F0
UmVjdCBmcmFtZVJlY3QgPSBtX2Zyb250ZW5kUGFnZS0+Y2hyb21lKCktPndpbmRvd1JlY3QoKTsK
KyAgICBmcmFtZVJlY3QubW92ZSh4LCB5KTsKKyAgICBtX2Zyb250ZW5kUGFnZS0+Y2hyb21lKCkt
PnNldFdpbmRvd1JlY3QoZnJhbWVSZWN0KTsKK30KKwordm9pZCBJbnNwZWN0b3JGcm9udGVuZENs
aWVudExvY2FsOjpzaG93Q29udGV4dE1lbnUoRXZlbnQqIGV2ZW50LCBjb25zdCBWZWN0b3I8Q29u
dGV4dE1lbnVJdGVtKj4mIGl0ZW1zKQoreworICAgIFNjcmlwdE9iamVjdCB3ZWJJbnNwZWN0b3JP
Ymo7CisgICAgaWYgKCFTY3JpcHRHbG9iYWxPYmplY3Q6OmdldChtX2Zyb250ZW5kU2NyaXB0U3Rh
dGUsICJXZWJJbnNwZWN0b3IiLCB3ZWJJbnNwZWN0b3JPYmopKSB7CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIFJlZlB0cjxG
cm9udGVuZE1lbnVQcm92aWRlcj4gbWVudVByb3ZpZGVyID0gRnJvbnRlbmRNZW51UHJvdmlkZXI6
OmNyZWF0ZSh0aGlzLCB3ZWJJbnNwZWN0b3JPYmosIGl0ZW1zKTsKKyAgICBDb250ZXh0TWVudUNv
bnRyb2xsZXIqIG1lbnVDb250cm9sbGVyID0gbV9mcm9udGVuZFBhZ2UtPmNvbnRleHRNZW51Q29u
dHJvbGxlcigpOworICAgIG1lbnVDb250cm9sbGVyLT5zaG93Q29udGV4dE1lbnUoZXZlbnQsIG1l
bnVQcm92aWRlcik7CisgICAgbV9tZW51UHJvdmlkZXIgPSBtZW51UHJvdmlkZXIuZ2V0KCk7Cit9
CisKK3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6c2V0QXR0YWNoZWRXaW5kb3co
Ym9vbCBhdHRhY2hlZCkKK3sKKyAgICBTY3JpcHRPYmplY3Qgd2ViSW5zcGVjdG9yT2JqOworICAg
IGlmICghU2NyaXB0R2xvYmFsT2JqZWN0OjpnZXQobV9mcm9udGVuZFNjcmlwdFN0YXRlLCAiV2Vi
SW5zcGVjdG9yIiwgd2ViSW5zcGVjdG9yT2JqKSkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVu
Y3Rpb24od2ViSW5zcGVjdG9yT2JqLCAiZGlzcGF0Y2giKTsgCisgICAgZnVuY3Rpb24uYXBwZW5k
QXJndW1lbnQoInNldEF0dGFjaGVkV2luZG93Iik7CisgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1l
bnQoYXR0YWNoZWQpOworICAgIGZ1bmN0aW9uLmNhbGwoKTsKK30KKwordm9pZCBJbnNwZWN0b3JG
cm9udGVuZENsaWVudExvY2FsOjpyZXN0b3JlQXR0YWNoZWRXaW5kb3dIZWlnaHQoKQoreworICAg
IHVuc2lnbmVkIGluc3BlY3RlZFBhZ2VIZWlnaHQgPSBtX2luc3BlY3RvckNvbnRyb2xsZXItPmlu
c3BlY3RlZFBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+dmlzaWJsZUhlaWdodCgpOworICAg
IFN0cmluZyBhdHRhY2hlZEhlaWdodCA9IG1faW5zcGVjdG9yQ29udHJvbGxlci0+c2V0dGluZyhp
bnNwZWN0b3JBdHRhY2hlZEhlaWdodE5hbWUpOworICAgIGJvb2wgc3VjY2VzcyA9IHRydWU7Cisg
ICAgaW50IGhlaWdodCA9IGF0dGFjaGVkSGVpZ2h0LnRvSW50KCZzdWNjZXNzKTsKKyAgICB1bnNp
Z25lZCBwcmVmZXJyZWRIZWlnaHQgPSBzdWNjZXNzID8gaGVpZ2h0IDogZGVmYXVsdEF0dGFjaGVk
SGVpZ2h0OworICAgIAorICAgIC8vIFRoaXMgY2FsbCBtaWdodCBub3QgZ28gdGhyb3VnaCAoaWYg
dGhlIHdpbmRvdyBzdGFydHMgb3V0IGRldGFjaGVkKSwgYnV0IGlmIHRoZSB3aW5kb3cgaXMgaW5p
dGlhbGx5IGNyZWF0ZWQgYXR0YWNoZWQsCisgICAgLy8gSW5zcGVjdG9yQ29udHJvbGxlcjo6YXR0
YWNoV2luZG93IGlzIG5ldmVyIGNhbGxlZCwgc28gd2UgbmVlZCB0byBtYWtlIHN1cmUgdG8gc2V0
IHRoZSBhdHRhY2hlZFdpbmRvd0hlaWdodC4KKyAgICAvLyBGSVhNRTogQ2xlYW4gdXAgY29kZSBz
byB3ZSBvbmx5IGhhdmUgdG8gY2FsbCBzZXRBdHRhY2hlZFdpbmRvd0hlaWdodCBpbiBJbnNwZWN0
b3JDb250cm9sbGVyOjphdHRhY2hXaW5kb3cKKyAgICBzZXRBdHRhY2hlZFdpbmRvd0hlaWdodChj
b25zdHJhaW5lZEF0dGFjaGVkV2luZG93SGVpZ2h0KHByZWZlcnJlZEhlaWdodCwgaW5zcGVjdGVk
UGFnZUhlaWdodCkpOworfQorCit1bnNpZ25lZCBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2Fs
Ojpjb25zdHJhaW5lZEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIHByZWZlcnJlZEhlaWdo
dCwgdW5zaWduZWQgdG90YWxXaW5kb3dIZWlnaHQpCit7CisgICAgdXNpbmcgbmFtZXNwYWNlIHN0
ZDsKKyAgICByZXR1cm4gcm91bmRmKG1heChtaW5pbXVtQXR0YWNoZWRIZWlnaHQsIG1pbjxmbG9h
dD4ocHJlZmVycmVkSGVpZ2h0LCB0b3RhbFdpbmRvd0hlaWdodCAqIG1heGltdW1BdHRhY2hlZEhl
aWdodFJhdGlvKSkpOworfQorICAgIAorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9j
YWwuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MThjNDc5Ci0tLSAvZGV2L251bGwK
KysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5oCkBA
IC0wLDAgKzEsODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWxfaAorI2Rl
ZmluZSBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsX2gKKworI2luY2x1ZGUgIkluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50LmgiCisjaW5jbHVkZSAiU2NyaXB0U3RhdGUuaCIKKyNpbmNsdWRlIDx3
dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGcm9udGVu
ZE1lbnVQcm92aWRlcjsKK2NsYXNzIEluc3BlY3RvckNvbnRyb2xsZXI7CitjbGFzcyBJbnNwZWN0
b3JGcm9udGVuZEhvc3Q7CitjbGFzcyBQYWdlOworCitjbGFzcyBJbnNwZWN0b3JGcm9udGVuZENs
aWVudExvY2FsIDogcHVibGljIEluc3BlY3RvckZyb250ZW5kQ2xpZW50LCBwdWJsaWMgTm9uY29w
eWFibGUgeworcHVibGljOgorICAgIEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwoSW5zcGVj
dG9yQ29udHJvbGxlciosIFBhZ2UqKTsKKyAgICB2aXJ0dWFsIH5JbnNwZWN0b3JGcm9udGVuZENs
aWVudExvY2FsKCk7CisgICAgCisgICAgdmlydHVhbCB2b2lkIHdpbmRvd09iamVjdENsZWFyZWQo
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZnJvbnRlbmRMb2FkZWQoKTsKKworICAgIHZpcnR1YWwgdm9p
ZCBtb3ZlV2luZG93QnkoZmxvYXQgeCwgZmxvYXQgeSk7CisKKyAgICB2aXJ0dWFsIGJvb2wgY2Fu
QXR0YWNoV2luZG93KCk7CisgICAgdmlydHVhbCB2b2lkIGNoYW5nZUF0dGFjaGVkV2luZG93SGVp
Z2h0KHVuc2lnbmVkKTsKKworICAgIHZpcnR1YWwgdm9pZCBzaG93Q29udGV4dE1lbnUoRXZlbnQq
LCBjb25zdCBWZWN0b3I8Q29udGV4dE1lbnVJdGVtKj4mKTsKKyAgICAKK3Byb3RlY3RlZDoKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQpID0gMDsKKwor
ICAgIHZvaWQgc2V0QXR0YWNoZWRXaW5kb3coYm9vbCk7CisgICAgdm9pZCByZXN0b3JlQXR0YWNo
ZWRXaW5kb3dIZWlnaHQoKTsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgdW5zaWduZWQgY29uc3Ry
YWluZWRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBwcmVmZXJyZWRIZWlnaHQsIHVuc2ln
bmVkIHRvdGFsV2luZG93SGVpZ2h0KTsKKworICAgIGZyaWVuZCBjbGFzcyBGcm9udGVuZE1lbnVQ
cm92aWRlcjsKKyAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBtX2luc3BlY3RvckNvbnRyb2xsZXI7
CisgICAgUGFnZSogbV9mcm9udGVuZFBhZ2U7CisgICAgU2NyaXB0U3RhdGUqIG1fZnJvbnRlbmRT
Y3JpcHRTdGF0ZTsKKyAgICAvLyBUT0RPKHl1cnlzKTogdGhpcyByZWYgc2hvdWxkbid0IGJlIG5l
ZWRlZC4KKyAgICBSZWZQdHI8SW5zcGVjdG9yRnJvbnRlbmRIb3N0PiBtX2Zyb250ZW5kSG9zdDsK
KyAgICBGcm9udGVuZE1lbnVQcm92aWRlciogbV9tZW51UHJvdmlkZXI7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZy
b250ZW5kSG9zdC5jcHAKaW5kZXggYzFhMTc2MS4uNmQ0YzIxNSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcAorKysgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCkBAIC00MSw4ICs0MSw3IEBACiAjaW5jbHVk
ZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAi
SFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yQ2xpZW50LmgiCi0j
aW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVu
ZENsaWVudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvclJlc291cmNlLmgiCiAjaW5jbHVkZSAiUGFn
ZS5oIgogI2luY2x1ZGUgIlBhc3RlYm9hcmQuaCIKQEAgLTU0LDY1ICs1Myw2OSBAQCB1c2luZyBu
YW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUluc3BlY3RvckZyb250ZW5k
SG9zdDo6SW5zcGVjdG9yRnJvbnRlbmRIb3N0KEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3Rv
ckNvbnRyb2xsZXIsIEluc3BlY3RvckNsaWVudCogY2xpZW50KQotICAgIDogbV9pbnNwZWN0b3JD
b250cm9sbGVyKGluc3BlY3RvckNvbnRyb2xsZXIpCi0gICAgLCBtX2NsaWVudChjbGllbnQpCitJ
bnNwZWN0b3JGcm9udGVuZEhvc3Q6Okluc3BlY3RvckZyb250ZW5kSG9zdChJbnNwZWN0b3JGcm9u
dGVuZENsaWVudCogY2xpZW50KQorICAgIDogbV9jbGllbnQoY2xpZW50KQogewogfQogCiBJbnNw
ZWN0b3JGcm9udGVuZEhvc3Q6On5JbnNwZWN0b3JGcm9udGVuZEhvc3QoKQogewotICAgIGlmICht
X21lbnVQcm92aWRlcikKLSAgICAgICAgbV9tZW51UHJvdmlkZXItPmRpc2Nvbm5lY3QoKTsKKyAg
ICBBU1NFUlQoIW1fY2xpZW50KTsKIH0KIAogdm9pZCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6Omxv
YWRlZCgpCiB7Ci0gICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlcikKLSAgICAgICAgbV9pbnNw
ZWN0b3JDb250cm9sbGVyLT5zY3JpcHRPYmplY3RSZWFkeSgpOworICAgIGlmIChtX2NsaWVudCkK
KyAgICAgICAgbV9jbGllbnQtPmZyb250ZW5kTG9hZGVkKCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9y
RnJvbnRlbmRIb3N0OjphdHRhY2goKQogewotICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIp
Ci0gICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+YXR0YWNoV2luZG93KCk7CisgICAgaWYg
KG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+YXR0YWNoV2luZG93KCk7CiB9CiAKIHZvaWQg
SW5zcGVjdG9yRnJvbnRlbmRIb3N0OjpkZXRhY2goKQogewotICAgIGlmIChtX2luc3BlY3RvckNv
bnRyb2xsZXIpCi0gICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZGV0YWNoV2luZG93KCk7
CisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+ZGV0YWNoV2luZG93KCk7CiB9
CiAKIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmRIb3N0OjpjbG9zZVdpbmRvdygpCiB7Ci0gICAgaWYg
KG1faW5zcGVjdG9yQ29udHJvbGxlcikKLSAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5j
bG9zZVdpbmRvdygpOworICAgIGlmIChtX2NsaWVudCkgeworICAgICAgICBtX2NsaWVudC0+Y2xv
c2VXaW5kb3coKTsKKyAgICAgICAgbV9jbGllbnQgPSAwOyAvLyBEaXNjb25uZWN0IGZyb20gY2xp
ZW50LgorICAgIH0KK30KKwordm9pZCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OmJyaW5nVG9Gcm9u
dCgpCit7CisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+YnJpbmdUb0Zyb250
KCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRnJvbnRlbmRIb3N0Ojp3aW5kb3dVbmxvYWRpbmcoKQor
dm9pZCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6Omluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3Ry
aW5nJiBuZXdVUkwpCiB7Ci0gICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlcikKLSAgICAgICAg
bV9pbnNwZWN0b3JDb250cm9sbGVyLT5jbG9zZSgpOworICAgIGlmIChtX2NsaWVudCkKKyAgICAg
ICAgbV9jbGllbnQtPmluc3BlY3RlZFVSTENoYW5nZWQobmV3VVJMKTsKIH0KIAogYm9vbCBJbnNw
ZWN0b3JGcm9udGVuZEhvc3Q6OmNhbkF0dGFjaFdpbmRvdygpIGNvbnN0CiB7Ci0gICAgaWYgKG1f
aW5zcGVjdG9yQ29udHJvbGxlcikKLSAgICAgICAgcmV0dXJuIG1faW5zcGVjdG9yQ29udHJvbGxl
ci0+Y2FuQXR0YWNoV2luZG93KCk7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBtX2Ns
aWVudCAmJiBtX2NsaWVudC0+Y2FuQXR0YWNoV2luZG93KCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9y
RnJvbnRlbmRIb3N0OjpzZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpCiB7
Ci0gICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlcikKLSAgICAgICAgbV9pbnNwZWN0b3JDb250
cm9sbGVyLT5zZXRBdHRhY2hlZFdpbmRvd0hlaWdodChoZWlnaHQpOworICAgIGlmIChtX2NsaWVu
dCkKKyAgICAgICAgbV9jbGllbnQtPmNoYW5nZUF0dGFjaGVkV2luZG93SGVpZ2h0KGhlaWdodCk7
CiB9CiAKIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmRIb3N0Ojptb3ZlV2luZG93QnkoZmxvYXQgeCwg
ZmxvYXQgeSkgY29uc3QKIHsKLSAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyKQotICAgICAg
ICBtX2luc3BlY3RvckNvbnRyb2xsZXItPm1vdmVXaW5kb3dCeSh4LCB5KTsKKyAgICBpZiAobV9j
bGllbnQpCisgICAgICAgIG1fY2xpZW50LT5tb3ZlV2luZG93QnkoeCwgeSk7CiB9CiAKIFN0cmlu
ZyBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OmxvY2FsaXplZFN0cmluZ3NVUkwoKQpAQCAtMTYxLDMw
ICsxNjQsOCBAQCB2b2lkIEluc3BlY3RvckZyb250ZW5kSG9zdDo6Y29weVRleHQoY29uc3QgU3Ry
aW5nJiB0ZXh0KQogCiB2b2lkIEluc3BlY3RvckZyb250ZW5kSG9zdDo6c2hvd0NvbnRleHRNZW51
KEV2ZW50KiBldmVudCwgY29uc3QgVmVjdG9yPENvbnRleHRNZW51SXRlbSo+JiBpdGVtcykKIHsK
LSAgICBpZiAoIW1faW5zcGVjdG9yQ29udHJvbGxlcikKLSAgICAgICAgcmV0dXJuOwotICAgIGlm
ICghbV9pbnNwZWN0b3JDb250cm9sbGVyLT53aW5kb3dWaXNpYmxlKCkpCi0gICAgICAgIHJldHVy
bjsKLQotCi0gICAgbV9tZW51UHJvdmlkZXIgPSBNZW51UHJvdmlkZXI6OmNyZWF0ZSh0aGlzLCBp
dGVtcyk7Ci0gICAgQ29udGV4dE1lbnVDb250cm9sbGVyKiBtZW51Q29udHJvbGxlciA9IG1faW5z
cGVjdG9yQ29udHJvbGxlci0+bV9wYWdlLT5jb250ZXh0TWVudUNvbnRyb2xsZXIoKTsKLSAgICBt
ZW51Q29udHJvbGxlci0+c2hvd0NvbnRleHRNZW51KGV2ZW50LCBtX21lbnVQcm92aWRlcik7Ci19
Ci0KLXZvaWQgSW5zcGVjdG9yRnJvbnRlbmRIb3N0Ojpjb250ZXh0TWVudUl0ZW1TZWxlY3RlZChD
b250ZXh0TWVudUl0ZW0qIGl0ZW0pCi17Ci0gICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlciAm
JiBtX2luc3BlY3RvckNvbnRyb2xsZXItPndpbmRvd1Zpc2libGUoKSkgewotICAgICAgICBpbnQg
aXRlbU51bWJlciA9IGl0ZW0tPmFjdGlvbigpIC0gQ29udGV4dE1lbnVJdGVtQmFzZUN1c3RvbVRh
ZzsKLSAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5tX2Zyb250ZW5kLT5jb250ZXh0TWVu
dUl0ZW1TZWxlY3RlZChpdGVtTnVtYmVyKTsKLSAgICB9Ci19Ci0KLXZvaWQgSW5zcGVjdG9yRnJv
bnRlbmRIb3N0Ojpjb250ZXh0TWVudUNsZWFyZWQoKQotewotICAgIG1fbWVudVByb3ZpZGVyID0g
MDsKLSAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyICYmIG1faW5zcGVjdG9yQ29udHJvbGxl
ci0+d2luZG93VmlzaWJsZSgpKQotICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPm1fZnJv
bnRlbmQtPmNvbnRleHRNZW51Q2xlYXJlZCgpOworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAg
bV9jbGllbnQtPnNob3dDb250ZXh0TWVudShldmVudCwgaXRlbXMpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9u
dGVuZEhvc3QuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5oCmlu
ZGV4IGNiZTZhOWIuLjZlMTYyOTcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckZyb250ZW5kSG9zdC5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250
ZW5kSG9zdC5oCkBAIC00MywyNyArNDMsMjUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3Mg
Q29udGV4dE1lbnVJdGVtOwogY2xhc3MgRXZlbnQ7CiBjbGFzcyBJbnNwZWN0b3JDbGllbnQ7Citj
bGFzcyBJbnNwZWN0b3JGcm9udGVuZENsaWVudDsKIGNsYXNzIE5vZGU7CiAKIGNsYXNzIEluc3Bl
Y3RvckZyb250ZW5kSG9zdCA6IHB1YmxpYyBSZWZDb3VudGVkPEluc3BlY3RvckZyb250ZW5kSG9z
dD4KIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JGcm9udGVuZEhv
c3Q+IGNyZWF0ZShJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyLCBJbnNw
ZWN0b3JDbGllbnQqIGNsaWVudCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JGcm9u
dGVuZEhvc3Q+IGNyZWF0ZShJbnNwZWN0b3JGcm9udGVuZENsaWVudCogY2xpZW50KQogICAgIHsK
LSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JGcm9udGVuZEhvc3QoaW5zcGVj
dG9yQ29udHJvbGxlciwgY2xpZW50KSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5z
cGVjdG9yRnJvbnRlbmRIb3N0KGNsaWVudCkpOwogICAgIH0KIAogICAgIH5JbnNwZWN0b3JGcm9u
dGVuZEhvc3QoKTsKIAotICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xs
ZXIoKSB7IHJldHVybiBtX2luc3BlY3RvckNvbnRyb2xsZXI7IH0KLQotICAgIHZvaWQgZGlzY29u
bmVjdENvbnRyb2xsZXIoKSB7IG1faW5zcGVjdG9yQ29udHJvbGxlciA9IDA7IH0KLQogICAgIHZv
aWQgbG9hZGVkKCk7CiAgICAgdm9pZCBhdHRhY2goKTsKICAgICB2b2lkIGRldGFjaCgpOwogICAg
IHZvaWQgY2xvc2VXaW5kb3coKTsKLSAgICB2b2lkIHdpbmRvd1VubG9hZGluZygpOworICAgIHZv
aWQgYnJpbmdUb0Zyb250KCk7CisgICAgdm9pZCBpbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0
cmluZyYpOwogCiAgICAgYm9vbCBjYW5BdHRhY2hXaW5kb3coKSBjb25zdDsKICAgICB2b2lkIHNl
dEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCk7CkBAIC04MCw1OSArNzgsOSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBzaG93Q29udGV4dE1lbnUoRXZlbnQqLCBjb25zdCBWZWN0b3I8
Q29udGV4dE1lbnVJdGVtKj4mIGl0ZW1zKTsKIAogcHJpdmF0ZToKLSAgICBjbGFzcyBNZW51UHJv
dmlkZXIgOiBwdWJsaWMgQ29udGV4dE1lbnVQcm92aWRlciB7Ci0gICAgcHVibGljOgotICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxNZW51UHJvdmlkZXI+IGNyZWF0ZShJbnNwZWN0b3JGcm9udGVu
ZEhvc3QqIGZyb250ZW5kSG9zdCwgY29uc3QgVmVjdG9yPENvbnRleHRNZW51SXRlbSo+JiBpdGVt
cykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZW51UHJvdmlk
ZXIoZnJvbnRlbmRIb3N0LCBpdGVtcykpOwotICAgICAgICB9Ci0KLSAgICAgICAgdmlydHVhbCB+
TWVudVByb3ZpZGVyKCkKLSAgICAgICAgewotICAgICAgICAgICAgY29udGV4dE1lbnVDbGVhcmVk
KCk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGRpc2Nvbm5lY3QoKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBtX2Zyb250ZW5kSG9zdCA9IDA7Ci0gICAgICAgIH0KLQotICAgICAgICB2aXJ0
dWFsIHZvaWQgcG9wdWxhdGVDb250ZXh0TWVudShDb250ZXh0TWVudSogbWVudSkKLSAgICAgICAg
ewotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2l0ZW1zLnNpemUoKTsgKytp
KQotICAgICAgICAgICAgICAgIG1lbnUtPmFwcGVuZEl0ZW0oKm1faXRlbXNbaV0pOwotICAgICAg
ICB9Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIGNvbnRleHRNZW51SXRlbVNlbGVjdGVkKENvbnRl
eHRNZW51SXRlbSogaXRlbSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1fZnJvbnRlbmRI
b3N0KQotICAgICAgICAgICAgICAgIG1fZnJvbnRlbmRIb3N0LT5jb250ZXh0TWVudUl0ZW1TZWxl
Y3RlZChpdGVtKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBjb250ZXh0TWVu
dUNsZWFyZWQoKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobV9mcm9udGVuZEhvc3QpCi0g
ICAgICAgICAgICAgICAgbV9mcm9udGVuZEhvc3QtPmNvbnRleHRNZW51Q2xlYXJlZCgpOwotICAg
ICAgICAgICAgZGVsZXRlQWxsVmFsdWVzKG1faXRlbXMpOwotICAgICAgICAgICAgbV9pdGVtcy5j
bGVhcigpOwotICAgICAgICB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBNZW51UHJvdmlkZXIo
SW5zcGVjdG9yRnJvbnRlbmRIb3N0KiBmcm9udGVuZEhvc3QsICBjb25zdCBWZWN0b3I8Q29udGV4
dE1lbnVJdGVtKj4mIGl0ZW1zKQotICAgICAgICAgICAgOiBtX2Zyb250ZW5kSG9zdChmcm9udGVu
ZEhvc3QpCi0gICAgICAgICAgICAsIG1faXRlbXMoaXRlbXMpIHsgfQotICAgICAgICBJbnNwZWN0
b3JGcm9udGVuZEhvc3QqIG1fZnJvbnRlbmRIb3N0OwotICAgICAgICBWZWN0b3I8Q29udGV4dE1l
bnVJdGVtKj4gbV9pdGVtczsKLSAgICB9OwotCi0gICAgSW5zcGVjdG9yRnJvbnRlbmRIb3N0KElu
c3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIsIEluc3BlY3RvckNsaWVudCog
Y2xpZW50KTsKLQotICAgIHZvaWQgY29udGV4dE1lbnVJdGVtU2VsZWN0ZWQoQ29udGV4dE1lbnVJ
dGVtKik7Ci0gICAgdm9pZCBjb250ZXh0TWVudUNsZWFyZWQoKTsKLQotICAgIEluc3BlY3RvckNv
bnRyb2xsZXIqIG1faW5zcGVjdG9yQ29udHJvbGxlcjsKLSAgICBJbnNwZWN0b3JDbGllbnQqIG1f
Y2xpZW50OwotICAgIFJlZlB0cjxNZW51UHJvdmlkZXI+IG1fbWVudVByb3ZpZGVyOworICAgIElu
c3BlY3RvckZyb250ZW5kSG9zdChJbnNwZWN0b3JGcm9udGVuZENsaWVudCogY2xpZW50KTsKKwor
ICAgIEluc3BlY3RvckZyb250ZW5kQ2xpZW50KiBtX2NsaWVudDsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250
ZW5kSG9zdC5pZGwgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuaWRs
CmluZGV4IDE1MGU5ZmMuLjBhZWY1YzQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckZyb250ZW5kSG9zdC5pZGwKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RnJvbnRlbmRIb3N0LmlkbApAQCAtMzYsNyArMzYsOCBAQCBtb2R1bGUgY29yZSB7CiAgICAgICAg
IHZvaWQgYXR0YWNoKCk7CiAgICAgICAgIHZvaWQgZGV0YWNoKCk7CiAgICAgICAgIHZvaWQgY2xv
c2VXaW5kb3coKTsKLSAgICAgICAgdm9pZCB3aW5kb3dVbmxvYWRpbmcoKTsKKyAgICAgICAgdm9p
ZCBicmluZ1RvRnJvbnQoKTsKKyAgICAgICAgdm9pZCBpbnNwZWN0ZWRVUkxDaGFuZ2VkKGluIERP
TVN0cmluZyBuZXdVUkwpOwogCiAgICAgICAgIGJvb2xlYW4gY2FuQXR0YWNoV2luZG93KCk7CiAg
ICAgICAgIHZvaWQgc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQoaW4gdW5zaWduZWQgbG9uZyBoZWln
aHQpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckZy
b250ZW5kSG9zdFN0dWIuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9y
RnJvbnRlbmRIb3N0U3R1Yi5qcwppbmRleCBlZmYyNTE4Li41NDU2MDY5IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yRnJvbnRlbmRIb3N0U3R1Yi5qcwor
KysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yRnJvbnRlbmRIb3N0U3R1
Yi5qcwpAQCAtNDgsNiArNDgsMTEgQEAgV2ViSW5zcGVjdG9yLkluc3BlY3RvckZyb250ZW5kSG9z
dFN0dWIucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4gInVua25vd24iOwogICAgIH0sCiAK
KyAgICBicmluZ1RvRnJvbnQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuX3dpbmRv
d1Zpc2libGUgPSB0cnVlOworICAgIH0sCisKICAgICBjbG9zZVdpbmRvdzogZnVuY3Rpb24oKQog
ICAgIHsKICAgICAgICAgdGhpcy5fd2luZG93VmlzaWJsZSA9IGZhbHNlOwpAQCAtODcsNyArOTIs
NyBAQCBXZWJJbnNwZWN0b3IuSW5zcGVjdG9yRnJvbnRlbmRIb3N0U3R1Yi5wcm90b3R5cGUgPSB7
CiAgICAgICAgIHJldHVybiAiIjsKICAgICB9LAogCi0gICAgd2luZG93VW5sb2FkaW5nOiBmdW5j
dGlvbigpCisgICAgaW5zcGVjdGVkVVJMQ2hhbmdlZDogZnVuY3Rpb24odXJsKQogICAgIHsKICAg
ICB9LAogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9y
LmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcwppbmRleCA1OTEy
MGNkLi42Y2QyNjE0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5z
cGVjdG9yLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMK
QEAgLTQ3OCw3ICs0NzgsNiBAQCBXZWJJbnNwZWN0b3IubG9hZGVkID0gZnVuY3Rpb24oKQogCiAg
ICAgdGhpcy5hZGRNYWluRXZlbnRMaXN0ZW5lcnMoZG9jdW1lbnQpOwogCi0gICAgd2luZG93LmFk
ZEV2ZW50TGlzdGVuZXIoInVubG9hZCIsIHRoaXMud2luZG93VW5sb2FkLmJpbmQodGhpcyksIHRy
dWUpOwogICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLCB0aGlzLndpbmRvd1Jl
c2l6ZS5iaW5kKHRoaXMpLCB0cnVlKTsKIAogICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIo
ImZvY3VzIiwgdGhpcy5mb2N1c0NoYW5nZWQuYmluZCh0aGlzKSwgdHJ1ZSk7CkBAIC01NjIsMTEg
KzU2MSw2IEBAIFdlYkluc3BlY3Rvci5kaXNwYXRjaCA9IGZ1bmN0aW9uKCkgewogICAgIHNldFRp
bWVvdXQoZGVsYXlEaXNwYXRjaCwgMCk7CiB9CiAKLVdlYkluc3BlY3Rvci53aW5kb3dVbmxvYWQg
PSBmdW5jdGlvbihldmVudCkKLXsKLSAgICBJbnNwZWN0b3JGcm9udGVuZEhvc3Qud2luZG93VW5s
b2FkaW5nKCk7Ci19Ci0KIFdlYkluc3BlY3Rvci53aW5kb3dSZXNpemUgPSBmdW5jdGlvbihldmVu
dCkKIHsKICAgICBpZiAodGhpcy5jdXJyZW50UGFuZWwpCkBAIC02MDQsNiArNTk4LDkgQEAgV2Vi
SW5zcGVjdG9yLnNldEF0dGFjaGVkV2luZG93ID0gZnVuY3Rpb24oYXR0YWNoZWQpCiAKIFdlYklu
c3BlY3Rvci5jbG9zZSA9IGZ1bmN0aW9uKGV2ZW50KQogeworICAgIGlmICh0aGlzLl9pc0Nsb3Np
bmcpCisgICAgICAgIHJldHVybjsKKyAgICB0aGlzLl9pc0Nsb3NpbmcgPSB0cnVlOwogICAgIElu
c3BlY3RvckZyb250ZW5kSG9zdC5jbG9zZVdpbmRvdygpOwogfQogCkBAIC0xMzE1LDYgKzEzMTIs
MTYgQEAgV2ViSW5zcGVjdG9yLnJlc2V0ID0gZnVuY3Rpb24oKQogICAgIHRoaXMuY29uc29sZS5j
bGVhck1lc3NhZ2VzKCk7CiB9CiAKK1dlYkluc3BlY3Rvci5icmluZ1RvRnJvbnQgPSBmdW5jdGlv
bigpCit7CisgICAgSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmJyaW5nVG9Gcm9udCgpOworfQorCitX
ZWJJbnNwZWN0b3IuaW5zcGVjdGVkVVJMQ2hhbmdlZCA9IGZ1bmN0aW9uKHVybCkKK3sKKyAgICBJ
bnNwZWN0b3JGcm9udGVuZEhvc3QuaW5zcGVjdGVkVVJMQ2hhbmdlZCh1cmwpOworfQorCiBXZWJJ
bnNwZWN0b3IucmVzb3VyY2VVUkxDaGFuZ2VkID0gZnVuY3Rpb24ocmVzb3VyY2UsIG9sZFVSTCkK
IHsKICAgICBkZWxldGUgdGhpcy5yZXNvdXJjZVVSTE1hcFtvbGRVUkxdOwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmggYi9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVu
dHMuaAppbmRleCA2YTJlY2Q1Li5kMDI1ODkxIDEwMDY0NAotLS0gYS9XZWJDb3JlL2xvYWRlci9F
bXB0eUNsaWVudHMuaAorKysgYi9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaApAQCAtNDcy
LDI5ICs0NzIsMTQgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfkVtcHR5SW5zcGVjdG9yQ2xpZW50
KCkgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgaW5zcGVjdG9yRGVzdHJveWVkKCkgeyB9Ci0KLSAg
ICB2aXJ0dWFsIFBhZ2UqIGNyZWF0ZVBhZ2UoKSB7IHJldHVybiAwOyB9OwotCi0gICAgdmlydHVh
bCBTdHJpbmcgbG9jYWxpemVkU3RyaW5nc1VSTCgpIHsgcmV0dXJuIFN0cmluZygpOyB9Ci0KLSAg
ICB2aXJ0dWFsIFN0cmluZyBoaWRkZW5QYW5lbHMoKSB7IHJldHVybiBTdHJpbmcoKTsgfQotCi0g
ICAgdmlydHVhbCB2b2lkIHNob3dXaW5kb3coKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgY2xvc2VX
aW5kb3coKSB7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hXaW5kb3coKSB7IH0KLSAgICB2
aXJ0dWFsIHZvaWQgZGV0YWNoV2luZG93KCkgeyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0QXR0
YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQpIHsgfQorICAgIAorICAgIHZpcnR1YWwgdm9pZCBv
cGVuSW5zcGVjdG9yRnJvbnRlbmQoSW5zcGVjdG9yQ29udHJvbGxlciopIHsgfQogCiAgICAgdmly
dHVhbCB2b2lkIGhpZ2hsaWdodChOb2RlKikgeyB9CiAgICAgdmlydHVhbCB2b2lkIGhpZGVIaWdo
bGlnaHQoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgaW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBT
dHJpbmcmKSB7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBwb3B1bGF0ZVNldHRpbmcoY29uc3QgU3Ry
aW5nJiwgU3RyaW5nKikgeyB9CiAgICAgdmlydHVhbCB2b2lkIHN0b3JlU2V0dGluZyhjb25zdCBT
dHJpbmcmLCBjb25zdCBTdHJpbmcmKSB7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0b3JX
aW5kb3dPYmplY3RDbGVhcmVkKCkgeyB9CiB9OwogCiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2xv
YWRlci9GcmFtZUxvYWRlci5jcHAgYi9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKaW5k
ZXggNTRjNzk3Mi4uZTEwYjU4ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2Fk
ZXIuY3BwCisrKyBiL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcApAQCAtMzk0NCw4ICsz
OTQ0LDYgQEAgdm9pZCBGcmFtZUxvYWRlcjo6ZGlzcGF0Y2hEaWRDbGVhcldpbmRvd09iamVjdElu
V29ybGQoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCkKICAgICBpZiAoUGFnZSogcGFnZSA9IG1fZnJh
bWUtPnBhZ2UoKSkgewogICAgICAgICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9y
ID0gcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpKQogICAgICAgICAgICAgaW5zcGVjdG9yLT5p
bnNwZWN0ZWRXaW5kb3dTY3JpcHRPYmplY3RDbGVhcmVkKG1fZnJhbWUpOwotICAgICAgICBpZiAo
SW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yID0gcGFnZS0+cGFyZW50SW5zcGVjdG9yQ29u
dHJvbGxlcigpKQotICAgICAgICAgICAgaW5zcGVjdG9yLT53aW5kb3dTY3JpcHRPYmplY3RBdmFp
bGFibGUoKTsKICAgICB9CiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9QYWdl
LmNwcCBiL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAppbmRleCA3ZDFlNjI0Li5kNjZlNDk3IDEwMDY0
NAotLS0gYS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKKysrIGIvV2ViQ29yZS9wYWdlL1BhZ2UuY3Bw
CkBAIC0xMzgsOSArMTM4LDYgQEAgUGFnZTo6UGFnZShDaHJvbWVDbGllbnQqIGNocm9tZUNsaWVu
dCwgQ29udGV4dE1lbnVDbGllbnQqIGNvbnRleHRNZW51Q2xpZW50LCBFZGkKICAgICAsIG1fYXJl
TWVtb3J5Q2FjaGVDbGllbnRDYWxsc0VuYWJsZWQodHJ1ZSkKICAgICAsIG1fbWVkaWFWb2x1bWUo
MSkKICAgICAsIG1famF2YVNjcmlwdFVSTHNBcmVBbGxvd2VkKHRydWUpCi0jaWYgRU5BQkxFKElO
U1BFQ1RPUikKLSAgICAsIG1fcGFyZW50SW5zcGVjdG9yQ29udHJvbGxlcigwKQotI2VuZGlmCiAg
ICAgLCBtX2RpZExvYWRVc2VyU3R5bGVTaGVldChmYWxzZSkKICAgICAsIG1fdXNlclN0eWxlU2hl
ZXRNb2RpZmljYXRpb25UaW1lKDApCiAgICAgLCBtX2dyb3VwKDApCkBAIC0xOTYsOCArMTkzLDYg
QEAgUGFnZTo6flBhZ2UoKQogCiAgICAgbV9lZGl0b3JDbGllbnQtPnBhZ2VEZXN0cm95ZWQoKTsK
ICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgIGlmIChtX3BhcmVudEluc3BlY3RvckNvbnRyb2xs
ZXIpCi0gICAgICAgIG1fcGFyZW50SW5zcGVjdG9yQ29udHJvbGxlci0+cGFnZURlc3Ryb3llZCgp
OwogICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdGVkUGFnZURlc3Ryb3llZCgpOwog
I2VuZGlmCiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9QYWdlLmggYi9XZWJDb3JlL3BhZ2Uv
UGFnZS5oCmluZGV4IGY2OTgyODcuLjk0ZTZkZDUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9Q
YWdlLmgKKysrIGIvV2ViQ29yZS9wYWdlL1BhZ2UuaApAQCAtMTQ5LDExICsxNDksNiBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAjZW5kaWYKICAgICAgICAgU2V0dGluZ3MqIHNldHRpbmdzKCkgY29u
c3QgeyByZXR1cm4gbV9zZXR0aW5ncy5nZXQoKTsgfQogICAgICAgICBQcm9ncmVzc1RyYWNrZXIq
IHByb2dyZXNzKCkgY29uc3QgeyByZXR1cm4gbV9wcm9ncmVzcy5nZXQoKTsgfQotCi0jaWYgRU5B
QkxFKElOU1BFQ1RPUikKLSAgICAgICAgdm9pZCBzZXRQYXJlbnRJbnNwZWN0b3JDb250cm9sbGVy
KEluc3BlY3RvckNvbnRyb2xsZXIqIGNvbnRyb2xsZXIpIHsgbV9wYXJlbnRJbnNwZWN0b3JDb250
cm9sbGVyID0gY29udHJvbGxlcjsgfQotICAgICAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBwYXJl
bnRJbnNwZWN0b3JDb250cm9sbGVyKCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnRJbnNwZWN0b3JD
b250cm9sbGVyOyB9Ci0jZW5kaWYKICAgICAgICAgCiAgICAgICAgIHZvaWQgc2V0VGFiS2V5Q3lj
bGVzVGhyb3VnaEVsZW1lbnRzKGJvb2wgYikgeyBtX3RhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50
cyA9IGI7IH0KICAgICAgICAgYm9vbCB0YWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMoKSBjb25z
dCB7IHJldHVybiBtX3RhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50czsgfQpAQCAtMjg2LDEwICsy
ODEsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgYm9vbCBtX2phdmFTY3JpcHRV
UkxzQXJlQWxsb3dlZDsKIAotI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgICAgIEluc3BlY3Rv
ckNvbnRyb2xsZXIqIG1fcGFyZW50SW5zcGVjdG9yQ29udHJvbGxlcjsKLSNlbmRpZgotCiAgICAg
ICAgIFN0cmluZyBtX3VzZXJTdHlsZVNoZWV0UGF0aDsKICAgICAgICAgbXV0YWJsZSBTdHJpbmcg
bV91c2VyU3R5bGVTaGVldDsKICAgICAgICAgbXV0YWJsZSBib29sIG1fZGlkTG9hZFVzZXJTdHls
ZVNoZWV0OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9Db250ZXh0TWVudS5jcHAgYi9X
ZWJDb3JlL3BsYXRmb3JtL0NvbnRleHRNZW51LmNwcAppbmRleCAyODNhYTU2Li4wMDIyYTQ3IDEw
MDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL0NvbnRleHRNZW51LmNwcAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL0NvbnRleHRNZW51LmNwcApAQCAtMzU5LDYgKzM1OSw5IEBAIHZvaWQgQ29udGV4
dE1lbnU6OnBvcHVsYXRlKCkKICAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKFNwZWVjaE1lbnVJ
dGVtKTsKICNlbmRpZiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIH0gZWxzZSB7CisjaWYg
RU5BQkxFKElOU1BFQ1RPUikKKyAgICAgICAgICAgICAgICBpZiAoIShmcmFtZS0+cGFnZSgpICYm
IGZyYW1lLT5wYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+aGFzSW5zcGVjdG9yRnJvbnRl
bmRDbGllbnQoKSkpIHsKKyNlbmRpZgogI2lmIFBMQVRGT1JNKEdUSykKICAgICAgICAgICAgICAg
ICBhcHBlbmRJdGVtKEJhY2tJdGVtKTsKICAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKEZvcndh
cmRJdGVtKTsKQEAgLTM3OCw2ICszODEsOSBAQCB2b2lkIENvbnRleHRNZW51Ojpwb3B1bGF0ZSgp
CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKFJl
bG9hZEl0ZW0pOwogI2VuZGlmCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKyAgICAgICAgICAgICAg
ICB9CisjZW5kaWYKIAogICAgICAgICAgICAgICAgIGlmIChmcmFtZS0+cGFnZSgpICYmIGZyYW1l
ICE9IGZyYW1lLT5wYWdlKCktPm1haW5GcmFtZSgpKQogICAgICAgICAgICAgICAgICAgICBhcHBl
bmRJdGVtKE9wZW5GcmFtZUl0ZW0pOwpAQCAtNTUwLDcgKzU1Niw2IEBAIHZvaWQgQ29udGV4dE1l
bnU6OmFkZEluc3BlY3RFbGVtZW50SXRlbSgpCiAgICAgICAgIHJldHVybjsKIAogICAgIENvbnRl
eHRNZW51SXRlbSBJbnNwZWN0RWxlbWVudEl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVt
VGFnSW5zcGVjdEVsZW1lbnQsIGNvbnRleHRNZW51SXRlbVRhZ0luc3BlY3RFbGVtZW50KCkpOwot
ICAgIGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSk7CiAgICAgYXBwZW5kSXRlbShJbnNwZWN0
RWxlbWVudEl0ZW0pOwogfQogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCmRpZmYgLS1naXQg
YS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpp
bmRleCA0NGE5M2VlLi5mMTY3NDlmIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCisrKyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOSBAQAorMjAx
MC0wMy0xMSAgWXVyeSBTZW1pa2hhdHNreSA8eXVyeXNAY2hyb21pdW0ub3JnPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEludHJvZHVjZSBJbnNwZWN0
b3JGcm9udGVuZENsaWVudCB0aGF0IHByb3ZpZGVzIEluc3BlY3RvckZyb250ZW5kIHdpdGggYW4g
aW50ZXJmYWNlIHRvIHRoZSBlbWJlZGRlci4gSW5zcGVjdG9yQ2xpZW50IG5vdyBzZXJ2ZXMgYXMg
YSBkZWxlZ2F0ZSBmb3IgSW5zcGVjdG9yQ29udHJvbGxlciBhbmQgZG9lcyBub3QgY29udGFpbiBt
ZXRob2RzIGZvciBtYW5hZ2luZyBpbnNwZWN0b3IgZnJvbnRlbmQgd2luZG93LiBUaGF0IGFsbG93
cyB0byBjcmVhdGUgcmVtb3RlIEluc3BlY3RvckZyb250ZW5kSG9zdC4KKworICAgICAgICBJbnRy
b2R1Y2UgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQgdGhhdCB3b3VsZCBwcm92aWRlIEluc3BlY3Rv
ckZyb250ZW5kIHdpdGggYW4gaW50ZXJmYWNlIHRvIHRoZSBlbWJlZGRlcgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzUwMzYKKworICAgICAgICAqIHNy
Yy9JbnNwZWN0b3JDbGllbnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6SW5zcGVjdG9yQ2xp
ZW50SW1wbDo6b3Blbkluc3BlY3RvckZyb250ZW5kKToKKyAgICAgICAgKiBzcmMvSW5zcGVjdG9y
Q2xpZW50SW1wbC5oOgorICAgICAgICAqIHNyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjphdHRhY2gpOgorICAgICAgICAo
V2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6ZGlkQ29tbWl0UHJvdmlzaW9uYWxMb2FkKToK
KyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudEltcGw6OmNyZWF0ZUluc3BlY3RvckZy
b250ZW5kUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6c2V0
SW5zcGVjdG9yRnJvbnRlbmRQcm94eVRvSW5zcGVjdG9yQ29udHJvbGxlcik6CisgICAgICAgICog
c3JjL1dlYkRldlRvb2xzQWdlbnRJbXBsLmg6CisgICAgICAgICogc3JjL1dlYkRldlRvb2xzRnJv
bnRlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNGcm9udGVuZEltcGw6
OldlYkRldlRvb2xzRnJvbnRlbmRJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNG
cm9udGVuZEltcGw6OmpzQnJpbmdUb0Zyb250KToKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9v
bHNGcm9udGVuZEltcGw6OmpzSW5zcGVjdGVkVVJMQ2hhbmdlZCk6CisgICAgICAgICogc3JjL1dl
YkRldlRvb2xzRnJvbnRlbmRJbXBsLmg6CisgICAgICAgICogc3JjL2pzL0luamVjdERpc3BhdGNo
LmpzOgorICAgICAgICAoY2xvc2UpOgorCiAyMDEwLTAzLTEwICBEYXJpbiBGaXNoZXIgIDxkYXJp
bkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSmVyZW15IE9ybG93LgpkaWZm
IC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9JbnNwZWN0b3JDbGllbnRJbXBsLmNwcCBiL1dl
YktpdC9jaHJvbWl1bS9zcmMvSW5zcGVjdG9yQ2xpZW50SW1wbC5jcHAKaW5kZXggNTQ1NTBkMS4u
ZjY5ZWY3MiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9JbnNwZWN0b3JDbGllbnRJ
bXBsLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0luc3BlY3RvckNsaWVudEltcGwuY3Bw
CkBAIC02Myw0NiArNjMsOCBAQCB2b2lkIEluc3BlY3RvckNsaWVudEltcGw6Omluc3BlY3RvckRl
c3Ryb3llZCgpCiAgICAgLy8gT3VyIGxpZmV0aW1lIGlzIGJvdW5kIHRvIHRoZSBXZWJWaWV3SW1w
bC4KIH0KIAotUGFnZSogSW5zcGVjdG9yQ2xpZW50SW1wbDo6Y3JlYXRlUGFnZSgpCit2b2lkIElu
c3BlY3RvckNsaWVudEltcGw6Om9wZW5JbnNwZWN0b3JGcm9udGVuZChJbnNwZWN0b3JDb250cm9s
bGVyKikKIHsKLSAgICAvLyBUaGlzIG1ldGhvZCBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIGluIENo
cm9tZSBhcyBpbnNwZWN0b3IgZnJvbnQtZW5kIGxpdmVzCi0gICAgLy8gaW4gYSBzZXBhcmF0ZSBw
cm9jZXNzLgotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAwOwotfQotCi12
b2lkIEluc3BlY3RvckNsaWVudEltcGw6OnNob3dXaW5kb3coKQotewotICAgIEFTU0VSVChtX2lu
c3BlY3RlZFdlYlZpZXctPmRldlRvb2xzQWdlbnRQcml2YXRlKCkpOwotICAgIG1faW5zcGVjdGVk
V2ViVmlldy0+cGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnNldFdpbmRvd1Zpc2libGUo
dHJ1ZSk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ2xpZW50SW1wbDo6Y2xvc2VXaW5kb3coKQotewot
ICAgIGlmIChtX2luc3BlY3RlZFdlYlZpZXctPnBhZ2UoKSkKLSAgICAgICAgbV9pbnNwZWN0ZWRX
ZWJWaWV3LT5wYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0V2luZG93VmlzaWJsZShm
YWxzZSk7Ci19Ci0KLWJvb2wgSW5zcGVjdG9yQ2xpZW50SW1wbDo6d2luZG93VmlzaWJsZSgpCi17
Ci0gICAgQVNTRVJUKG1faW5zcGVjdGVkV2ViVmlldy0+ZGV2VG9vbHNBZ2VudFByaXZhdGUoKSk7
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEluc3BlY3RvckNsaWVudEltcGw6OmF0dGFj
aFdpbmRvdygpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzCi19Ci0KLXZvaWQgSW5z
cGVjdG9yQ2xpZW50SW1wbDo6ZGV0YWNoV2luZG93KCkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVt
ZW50IHRoaXMKLX0KLQotdm9pZCBJbnNwZWN0b3JDbGllbnRJbXBsOjpzZXRBdHRhY2hlZFdpbmRv
d0hlaWdodCh1bnNpZ25lZCBpbnQgaGVpZ2h0KQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQg
dGhpcwotICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKIHN0YXRpYyB2b2lkIGludmFsaWRhdGVO
b2RlQm91bmRpbmdSZWN0KFdlYlZpZXdJbXBsKiB3ZWJWaWV3KQpAQCAtMTMwLDIzICs5Miw2IEBA
IHZvaWQgSW5zcGVjdG9yQ2xpZW50SW1wbDo6aGlkZUhpZ2hsaWdodCgpCiAgICAgaW52YWxpZGF0
ZU5vZGVCb3VuZGluZ1JlY3QobV9pbnNwZWN0ZWRXZWJWaWV3KTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JDbGllbnRJbXBsOjppbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYgbmV3VVJMKQot
ewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcwotfQotCi1TdHJpbmcgSW5zcGVjdG9yQ2xp
ZW50SW1wbDo6bG9jYWxpemVkU3RyaW5nc1VSTCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBJbnNwZWN0b3JDbGllbnRJbXBsOjpo
aWRkZW5QYW5lbHMoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuICIiOwot
fQotCiB2b2lkIEluc3BlY3RvckNsaWVudEltcGw6OnBvcHVsYXRlU2V0dGluZyhjb25zdCBTdHJp
bmcmIGtleSwgU3RyaW5nKiB2YWx1ZSkKIHsKICAgICBsb2FkU2V0dGluZ3MoKTsKQEAgLTE2MSwx
MSArMTA2LDYgQEAgdm9pZCBJbnNwZWN0b3JDbGllbnRJbXBsOjpzdG9yZVNldHRpbmcoY29uc3Qg
U3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgc2F2ZVNldHRpbmdzKCk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yQ2xpZW50SW1wbDo6aW5zcGVjdG9yV2luZG93T2JqZWN0Q2xlYXJl
ZCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQogdm9pZCBJbnNwZWN0b3JDbGllbnRJ
bXBsOjpsb2FkU2V0dGluZ3MoKQogewogICAgIGlmIChtX3NldHRpbmdzKQpkaWZmIC0tZ2l0IGEv
V2ViS2l0L2Nocm9taXVtL3NyYy9JbnNwZWN0b3JDbGllbnRJbXBsLmggYi9XZWJLaXQvY2hyb21p
dW0vc3JjL0luc3BlY3RvckNsaWVudEltcGwuaAppbmRleCA2ZjdmOGIxLi5jY2JjZWY3IDEwMDY0
NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL0luc3BlY3RvckNsaWVudEltcGwuaAorKysgYi9X
ZWJLaXQvY2hyb21pdW0vc3JjL0luc3BlY3RvckNsaWVudEltcGwuaApAQCAtNDUsMjUgKzQ1LDE1
IEBAIHB1YmxpYzoKIAogICAgIC8vIEluc3BlY3RvckNsaWVudCBtZXRob2RzOgogICAgIHZpcnR1
YWwgdm9pZCBpbnNwZWN0b3JEZXN0cm95ZWQoKTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlBhZ2Uq
IGNyZWF0ZVBhZ2UoKTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlN0cmluZyBsb2NhbGl6ZWRTdHJp
bmdzVVJMKCk7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpTdHJpbmcgaGlkZGVuUGFuZWxzKCk7Ci0g
ICAgdmlydHVhbCB2b2lkIHNob3dXaW5kb3coKTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xvc2VXaW5k
b3coKTsKLSAgICB2aXJ0dWFsIGJvb2wgd2luZG93VmlzaWJsZSgpOwotICAgIHZpcnR1YWwgdm9p
ZCBhdHRhY2hXaW5kb3coKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoV2luZG93KCk7Ci0gICAg
dmlydHVhbCB2b2lkIHNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCk7Cisg
ICAgdmlydHVhbCB2b2lkIG9wZW5JbnNwZWN0b3JGcm9udGVuZChXZWJDb3JlOjpJbnNwZWN0b3JD
b250cm9sbGVyKik7CiAgICAgdmlydHVhbCB2b2lkIGhpZ2hsaWdodChXZWJDb3JlOjpOb2RlKik7
CiAgICAgdmlydHVhbCB2b2lkIGhpZGVIaWdobGlnaHQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgaW5z
cGVjdGVkVVJMQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpTdHJpbmcmIG5ld1VSTCk7CiAgICAgdmly
dHVhbCB2b2lkIHBvcHVsYXRlU2V0dGluZygKICAgICAgICAgY29uc3QgV2ViQ29yZTo6U3RyaW5n
JiBrZXksCiAgICAgICAgIFdlYkNvcmU6OlN0cmluZyogdmFsdWUpOwogICAgIHZpcnR1YWwgdm9p
ZCBzdG9yZVNldHRpbmcoCiAgICAgICAgIGNvbnN0IFdlYkNvcmU6OlN0cmluZyYga2V5LAogICAg
ICAgICBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIHZhbHVlKTsKLSAgICB2aXJ0dWFsIHZvaWQgaW5z
cGVjdG9yV2luZG93T2JqZWN0Q2xlYXJlZCgpOwogCiBwcml2YXRlOgogICAgIHZvaWQgbG9hZFNl
dHRpbmdzKCk7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzQWdl
bnRJbXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuY3Bw
CmluZGV4IGFmNTA2MmEuLjIxZjMxZjQgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViRGV2VG9vbHNBZ2VudEltcGwuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2
VG9vbHNBZ2VudEltcGwuY3BwCkBAIC0xNjksNyArMTY5LDcgQEAgdm9pZCBXZWJEZXZUb29sc0Fn
ZW50SW1wbDo6YXR0YWNoKCkKICAgICAgICAgbmV3IERlYnVnZ2VyQWdlbnRJbXBsKG1fd2ViVmll
d0ltcGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2RlYnVnZ2VyQWdlbnREZWxl
Z2F0ZVN0dWIuZ2V0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzKSk7Ci0g
ICAgcmVzZXRJbnNwZWN0b3JGcm9udGVuZFByb3h5KCk7CisgICAgY3JlYXRlSW5zcGVjdG9yRnJv
bnRlbmRQcm94eSgpOwogCiAgICAgLy8gQWxsb3cgY29udHJvbGxlciB0byBzZW5kIG1lc3NhZ2Vz
IHRvIHRoZSBmcm9udGVuZC4KICAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBpYyA9IGluc3BlY3Rv
ckNvbnRyb2xsZXIoKTsKQEAgLTE4NSw3ICsxODUsNyBAQCB2b2lkIFdlYkRldlRvb2xzQWdlbnRJ
bXBsOjphdHRhY2goKQogICAgICAgICB9CiAgICAgfQogCi0gICAgaWMtPnNldFdpbmRvd1Zpc2li
bGUodHJ1ZSwgZmFsc2UpOworICAgIHNldEluc3BlY3RvckZyb250ZW5kUHJveHlUb0luc3BlY3Rv
ckNvbnRyb2xsZXIoKTsKICAgICBtX2F0dGFjaGVkID0gdHJ1ZTsKIH0KIApAQCAtMjE2LDcgKzIx
Niw2IEBAIHZvaWQgV2ViRGV2VG9vbHNBZ2VudEltcGw6OmRpZENvbW1pdFByb3Zpc2lvbmFsTG9h
ZChXZWJGcmFtZUltcGwqIHdlYmZyYW1lLCBib29sCiAgICAgICAgIGRzLT51bnJlYWNoYWJsZVVS
TCgpIDoKICAgICAgICAgcmVxdWVzdC51cmwoKTsKICAgICBpZiAoIXdlYmZyYW1lLT5wYXJlbnQo
KSkgewotICAgICAgICByZXNldEluc3BlY3RvckZyb250ZW5kUHJveHkoKTsKICAgICAgICAgbV90
b29sc0FnZW50RGVsZWdhdGVTdHViLT5mcmFtZU5hdmlnYXRlKFdlYkNvcmU6OktVUkwodXJsKS5z
dHJpbmcoKSk7CiAgICAgICAgIFNldEFwdUFnZW50RW5hYmxlZEluVXRpbGl0eUNvbnRleHQobV91
dGlsaXR5Q29udGV4dCwgbV9hcHVBZ2VudEVuYWJsZWQpOwogICAgIH0KQEAgLTM1Nyw3ICszNTYs
NyBAQCB2ODo6TG9jYWw8djg6Ok9iamVjdD4gV2ViRGV2VG9vbHNBZ2VudEltcGw6OmNyZWF0ZUlu
c3BlY3RvckJhY2tlbmRWOFdyYXBwZXIoKQogICAgIHJldHVybiBpbnN0YW5jZTsKIH0KIAotdm9p
ZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6cmVzZXRJbnNwZWN0b3JGcm9udGVuZFByb3h5KCkKK3Zv
aWQgV2ViRGV2VG9vbHNBZ2VudEltcGw6OmNyZWF0ZUluc3BlY3RvckZyb250ZW5kUHJveHkoKQog
ewogICAgIGRpc3Bvc2VVdGlsaXR5Q29udGV4dCgpOwogICAgIG1fdXRpbGl0eUNvbnRleHQgPSB2
ODo6Q29udGV4dDo6TmV3KCk7CkBAIC0zNjgsOCArMzY3LDE2IEBAIHZvaWQgV2ViRGV2VG9vbHNB
Z2VudEltcGw6OnJlc2V0SW5zcGVjdG9yRnJvbnRlbmRQcm94eSgpCiAgICAgdjg6OkNvbnRleHQ6
OlNjb3BlIGNvbnRleHRTY29wZShtX3V0aWxpdHlDb250ZXh0KTsKICAgICBTY3JpcHRTdGF0ZSog
c3RhdGUgPSBTY3JpcHRTdGF0ZTo6Zm9yQ29udGV4dCgKICAgICAgICAgdjg6OkxvY2FsPHY4OjpD
b250ZXh0Pjo6TmV3KG1fdXRpbGl0eUNvbnRleHQpKTsKK30KKwordm9pZCBXZWJEZXZUb29sc0Fn
ZW50SW1wbDo6c2V0SW5zcGVjdG9yRnJvbnRlbmRQcm94eVRvSW5zcGVjdG9yQ29udHJvbGxlcigp
Cit7CisgICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOworICAgIFNjcmlwdFN0YXRlKiBzdGF0ZSA9
IFNjcmlwdFN0YXRlOjpmb3JDb250ZXh0KAorICAgICAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+
OjpOZXcobV91dGlsaXR5Q29udGV4dCkpOwogICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIGljID0g
aW5zcGVjdG9yQ29udHJvbGxlcigpOwotICAgIGljLT5zZXRGcm9udGVuZFByb3h5T2JqZWN0KHN0
YXRlLCBTY3JpcHRPYmplY3Qoc3RhdGUsIG1fdXRpbGl0eUNvbnRleHQtPkdsb2JhbCgpKSk7Cisg
ICAgaWMtPnNldEZyb250ZW5kKG5ldyBJbnNwZWN0b3JGcm9udGVuZCgKKyAgICAgICAgU2NyaXB0
T2JqZWN0KHN0YXRlLCBtX3V0aWxpdHlDb250ZXh0LT5HbG9iYWwoKSkpKTsKIH0KIAogdm9pZCBX
ZWJEZXZUb29sc0FnZW50SW1wbDo6c2V0QXB1QWdlbnRFbmFibGVkKGJvb2wgZW5hYmxlZCkKZGlm
ZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuaCBiL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuaAppbmRleCAyMDdiYWRhLi40
NTVkY2VmIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzQWdlbnRJ
bXBsLmgKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5oCkBA
IC0xMDksNyArMTA5LDggQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgY29tcGlsZVV0aWxpdHlTY3Jp
cHRzKCk7CiAgICAgdm9pZCBpbml0RGV2VG9vbHNBZ2VudEhvc3QoKTsKLSAgICB2b2lkIHJlc2V0
SW5zcGVjdG9yRnJvbnRlbmRQcm94eSgpOworICAgIHZvaWQgY3JlYXRlSW5zcGVjdG9yRnJvbnRl
bmRQcm94eSgpOworICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRQcm94eVRvSW5zcGVjdG9y
Q29udHJvbGxlcigpOwogICAgIHZvaWQgc2V0QXB1QWdlbnRFbmFibGVkKGJvb2wgZW5hYmxlZCk7
CiAKICAgICBXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVy
KCk7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzRnJvbnRlbmRJ
bXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNGcm9udGVuZEltcGwuY3Bw
CmluZGV4IGQ1YjhlYmMuLjhhMmY4MWMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViRGV2VG9vbHNGcm9udGVuZEltcGwuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
RGV2VG9vbHNGcm9udGVuZEltcGwuY3BwCkBAIC0xNTYsOCArMTU2LDExIEBAIFdlYkRldlRvb2xz
RnJvbnRlbmRJbXBsOjpXZWJEZXZUb29sc0Zyb250ZW5kSW1wbCgKICAgICAgICAgInNldFNldHRp
bmciLAogICAgICAgICBXZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6anNTZXRTZXR0aW5nKTsKICAg
ICBkZXZUb29sc0hvc3QuYWRkUHJvdG9GdW5jdGlvbigKLSAgICAgICAgIndpbmRvd1VubG9hZGlu
ZyIsCi0gICAgICAgIFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjpqc1dpbmRvd1VubG9hZGluZyk7
CisgICAgICAgICJicmluZ1RvRnJvbnQiLAorICAgICAgICBXZWJEZXZUb29sc0Zyb250ZW5kSW1w
bDo6anNCcmluZ1RvRnJvbnQpOworICAgIGRldlRvb2xzSG9zdC5hZGRQcm90b0Z1bmN0aW9uKAor
ICAgICAgICAiaW5zcGVjdGVkVVJMQ2hhbmdlZCIsCisgICAgICAgIFdlYkRldlRvb2xzRnJvbnRl
bmRJbXBsOjpqc0luc3BlY3RlZFVSTENoYW5nZWQpOwogICAgIGRldlRvb2xzSG9zdC5hZGRQcm90
b0Z1bmN0aW9uKAogICAgICAgICAic2hvd0NvbnRleHRNZW51IiwKICAgICAgICAgV2ViRGV2VG9v
bHNGcm9udGVuZEltcGw6OmpzU2hvd0NvbnRleHRNZW51KTsKQEAgLTM0Niw5ICszNDksMTMgQEAg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjpqc0RlYnVnZ2Vy
UGF1c2VTY3JpcHQoY29uc3Qgdjg6OkEKICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogfQog
Ci12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gV2ViRGV2VG9vbHNGcm9udGVuZEltcGw6OmpzV2luZG93
VW5sb2FkaW5nKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gV2ViRGV2VG9vbHNGcm9udGVuZEltcGw6OmpzQnJpbmdUb0Zyb250KGNvbnN0IHY4OjpBcmd1
bWVudHMmIGFyZ3MpCit7CisgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKK30KKwordjg6Okhh
bmRsZTx2ODo6VmFsdWU+IFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjpqc0luc3BlY3RlZFVSTENo
YW5nZWQoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsKLSAgICAvLyBUT0RPKHBmZWxkbWFu
KTogSW1wbGVtZW50IHRoaXMuCiAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKIH0KIApkaWZm
IC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0Zyb250ZW5kSW1wbC5oIGIv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0Zyb250ZW5kSW1wbC5oCmluZGV4IGJhMDAx
M2IuLjY1OTE2OTMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNG
cm9udGVuZEltcGwuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzRnJvbnRl
bmRJbXBsLmgKQEAgLTE0Miw3ICsxNDIsOCBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4ganNTZXR0aW5nKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpOwogICAg
IHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4ganNTZXRTZXR0aW5nKGNvbnN0IHY4OjpBcmd1
bWVudHMmIGFyZ3MpOwogICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4ganNEZWJ1Z2dl
clBhdXNlU2NyaXB0KGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpOwotICAgIHN0YXRpYyB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4ganNXaW5kb3dVbmxvYWRpbmcoY29uc3Qgdjg6OkFyZ3VtZW50cyYg
YXJncyk7CisgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBqc0JyaW5nVG9Gcm9udChj
b25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKTsKKyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IGpzSW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKTsKICAg
ICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGpzU2hvd0NvbnRleHRNZW51KGNvbnN0IHY4
OjpBcmd1bWVudHMmIGFyZ3MpOwogICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4ganND
YW5BdHRhY2hXaW5kb3coY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncyk7CiAKZGlmZiAtLWdpdCBh
L1dlYktpdC9jaHJvbWl1bS9zcmMvanMvSW5qZWN0RGlzcGF0Y2guanMgYi9XZWJLaXQvY2hyb21p
dW0vc3JjL2pzL0luamVjdERpc3BhdGNoLmpzCmluZGV4IGUwNzBjNDIuLjY4YmNkYmQgMTAwNjQ0
Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvSW5qZWN0RGlzcGF0Y2guanMKKysrIGIvV2Vi
S2l0L2Nocm9taXVtL3NyYy9qcy9JbmplY3REaXNwYXRjaC5qcwpAQCAtMTA0LDMgKzEwNCw3IEBA
IGZ1bmN0aW9uIGRpc3BhdGNoKG1ldGhvZCwgdmFyX2FyZ3MpIHsKICAgICB2YXIgY2FsbCA9IEpT
T04uc3RyaW5naWZ5KGFyZ3MpOwogICAgIERldlRvb2xzQWdlbnRIb3N0LmRpc3BhdGNoKGNhbGwp
OwogfTsKKworZnVuY3Rpb24gY2xvc2UoKSB7CisgICAgLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVk
IHdoZW4gSW5zcGVjdG9yRnJvbnRlbmQgY2xvc2VzIGluIGxheW91dCB0ZXN0cy4KK30KZGlmZiAt
LWdpdCBhL1dlYktpdC9ndGsvQ2hhbmdlTG9nIGIvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKaW5kZXgg
OWFkZDZlMi4uZGI3NDllZSAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKKysrIGIv
V2ViS2l0L2d0ay9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNCBAQAorMjAxMC0wMy0xMCAgWXVyeSBT
ZW1pa2hhdHNreSA8eXVyeXNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEludHJvZHVjZSBJbnNwZWN0b3JGcm9udGVuZENsaWVu
dCB0aGF0IHByb3ZpZGVzIEluc3BlY3RvckZyb250ZW5kIHdpdGggYW4gaW50ZXJmYWNlIHRvIHRo
ZSBlbWJlZGRlci4gSW5zcGVjdG9yQ2xpZW50IG5vdyBzZXJ2ZXMgYXMgYSBkZWxlZ2F0ZSBmb3Ig
SW5zcGVjdG9yQ29udHJvbGxlciBhbmQgZG9lcyBub3QgY29udGFpbiBtZXRob2RzIGZvciBtYW5h
Z2luZyBpbnNwZWN0b3IgZnJvbnRlbmQgd2luZG93LiBUaGF0IGFsbG93cyB0byBjcmVhdGUgcmVt
b3RlIEluc3BlY3RvckZyb250ZW5kSG9zdC4KKworICAgICAgICBJbnRyb2R1Y2UgSW5zcGVjdG9y
RnJvbnRlbmRDbGllbnQgdGhhdCB3b3VsZCBwcm92aWRlIEluc3BlY3RvckZyb250ZW5kIHdpdGgg
YW4gaW50ZXJmYWNlIHRvIHRoZSBlbWJlZGRlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzUwMzYKKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0lu
c3BlY3RvckNsaWVudEd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6Om5vdGlmeVdlYlZpZXdEZXN0
cm95ZWQpOgorICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JDbGllbnQ6Okluc3BlY3RvckNsaWVu
dCk6CisgICAgICAgIChXZWJLaXQ6Okluc3BlY3RvckNsaWVudDo6aW5zcGVjdG9yRGVzdHJveWVk
KToKKyAgICAgICAgKFdlYktpdDo6SW5zcGVjdG9yQ2xpZW50OjpvcGVuSW5zcGVjdG9yRnJvbnRl
bmQpOgorICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JDbGllbnQ6OmhpZ2hsaWdodCk6CisgICAg
ICAgIChXZWJLaXQ6Okluc3BlY3RvckNsaWVudDo6aGlkZUhpZ2hsaWdodCk6CisgICAgICAgIChX
ZWJLaXQ6Okluc3BlY3RvckNsaWVudDo6cG9wdWxhdGVTZXR0aW5nKToKKyAgICAgICAgKFdlYktp
dDo6SW5zcGVjdG9yQ2xpZW50OjpzdG9yZVNldHRpbmcpOgorICAgICAgICAoV2ViS2l0OjpJbnNw
ZWN0b3JGcm9udGVuZENsaWVudDo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQpOgorICAgICAgICAo
V2ViS2l0OjpJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6fkluc3BlY3RvckZyb250ZW5kQ2xpZW50
KToKKyAgICAgICAgKFdlYktpdDo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmRlc3Ryb3lJbnNw
ZWN0b3JXaW5kb3cpOgorICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6
bG9jYWxpemVkU3RyaW5nc1VSTCk6CisgICAgICAgIChXZWJLaXQ6Okluc3BlY3RvckZyb250ZW5k
Q2xpZW50OjpoaWRkZW5QYW5lbHMpOgorICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JGcm9udGVu
ZENsaWVudDo6YnJpbmdUb0Zyb250KToKKyAgICAgICAgKFdlYktpdDo6SW5zcGVjdG9yRnJvbnRl
bmRDbGllbnQ6OmNsb3NlV2luZG93KToKKyAgICAgICAgKFdlYktpdDo6SW5zcGVjdG9yRnJvbnRl
bmRDbGllbnQ6OmF0dGFjaFdpbmRvdyk6CisgICAgICAgIChXZWJLaXQ6Okluc3BlY3RvckZyb250
ZW5kQ2xpZW50OjpkZXRhY2hXaW5kb3cpOgorICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JGcm9u
dGVuZENsaWVudDo6c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQpOgorICAgICAgICAoV2ViS2l0OjpJ
bnNwZWN0b3JGcm9udGVuZENsaWVudDo6aW5zcGVjdGVkVVJMQ2hhbmdlZCk6CisgICAgICAgICog
V2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50R3RrLmg6CisKIDIwMTAtMDMtMDkgIFBoaWxp
cHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IEd1c3Rhdm8gTm9yb25oYSBTaWx2YS4KZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvV2ViQ29yZVN1
cHBvcnQvSW5zcGVjdG9yQ2xpZW50R3RrLmNwcCBiL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQv
SW5zcGVjdG9yQ2xpZW50R3RrLmNwcAppbmRleCA5OWJjNjI3Li5lNzJhYzA1IDEwMDY0NAotLS0g
YS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudEd0ay5jcHAKKysrIGIv
V2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRHdGsuY3BwCkBAIC0zMSw2
NyArMzEsNDAgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQg
ewogCi1zdGF0aWMgdm9pZCBub3RpZnlXZWJWaWV3RGVzdHJveWVkKFdlYktpdFdlYlZpZXcqIHdl
YlZpZXcsIEluc3BlY3RvckNsaWVudCogaW5zcGVjdG9yQ2xpZW50KQorc3RhdGljIHZvaWQgbm90
aWZ5V2ViVmlld0Rlc3Ryb3llZChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBJbnNwZWN0b3JGcm9u
dGVuZENsaWVudCogaW5zcGVjdG9yRnJvbnRlbmRDbGllbnQpCiB7Ci0gICAgaW5zcGVjdG9yQ2xp
ZW50LT53ZWJWaWV3RGVzdHJveWVkKCk7CisgICAgaW5zcGVjdG9yRnJvbnRlbmRDbGllbnQtPmRl
c3Ryb3lJbnNwZWN0b3JXaW5kb3coKTsKIH0KIAogSW5zcGVjdG9yQ2xpZW50OjpJbnNwZWN0b3JD
bGllbnQoV2ViS2l0V2ViVmlldyogd2ViVmlldykKLSAgICA6IG1fd2ViVmlldygwKQotICAgICwg
bV9pbnNwZWN0ZWRXZWJWaWV3KHdlYlZpZXcpCi0gICAgLCBtX3dlYkluc3BlY3RvcigwKQorICAg
IDogbV9pbnNwZWN0ZWRXZWJWaWV3KHdlYlZpZXcpCiB7fQogCiB2b2lkIEluc3BlY3RvckNsaWVu
dDo6aW5zcGVjdG9yRGVzdHJveWVkKCkKIHsKLSAgICBpZiAobV93ZWJJbnNwZWN0b3IpCi0gICAg
ICAgIGdfb2JqZWN0X3VucmVmKG1fd2ViSW5zcGVjdG9yKTsKLQogICAgIGRlbGV0ZSB0aGlzOwog
fQogCi12b2lkIEluc3BlY3RvckNsaWVudDo6d2ViVmlld0Rlc3Ryb3llZCgpCi17Ci0gICAgbV93
ZWJWaWV3ID0gMDsKLSAgICBjb3JlKG1faW5zcGVjdGVkV2ViVmlldyktPmluc3BlY3RvckNvbnRy
b2xsZXIoKS0+cGFnZURlc3Ryb3llZCgpOwotCi0gICAgLy8gY3JlYXRlUGFnZSB3aWxsIGJlIGNh
bGxlZCBhZ2FpbiwgaWYgdGhlIHVzZXIgY2hvb3NlcyB0byBpbnNwZWN0Ci0gICAgLy8gc29tZXRo
aW5nIGVsc2UsIGFuZCB0aGUgaW5zcGVjdG9yIHdpbGwgYmUgcmVmZXJlbmNlZCBhZ2FpbiwKLSAg
ICAvLyB0aGVyZS4KLSAgICBnX29iamVjdF91bnJlZihtX3dlYkluc3BlY3Rvcik7Ci0gICAgbV93
ZWJJbnNwZWN0b3IgPSAwOwotfQotCi1QYWdlKiBJbnNwZWN0b3JDbGllbnQ6OmNyZWF0ZVBhZ2Uo
KQordm9pZCBJbnNwZWN0b3JDbGllbnQ6Om9wZW5JbnNwZWN0b3JGcm9udGVuZChJbnNwZWN0b3JD
b250cm9sbGVyKiBjb250cm9sbGVyKQogewotICAgIGlmIChtX3dlYlZpZXcpIHsKLSAgICAgICAg
Z2Jvb2xlYW4gaGFuZGxlZCA9IEZBTFNFOwotICAgICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUo
bV93ZWJJbnNwZWN0b3IsICJkZXN0cm95IiwgJmhhbmRsZWQpOwotCi0gICAgICAgIC8qIHdlIGNh
biBub3cgZGlzcG9zZSBvdXIgb3duIHJlZmVyZW5jZSAqLwotICAgICAgICBnX29iamVjdF91bnJl
ZihtX3dlYkluc3BlY3Rvcik7Ci0gICAgfQotCiAgICAgLy8gVGhpcyBnX29iamVjdF9nZXQgd2ls
bCByZWYgdGhlIGluc3BlY3Rvci4gV2UncmUgbm90IGRvaW5nIGFuCiAgICAgLy8gdW5yZWYgaWYg
dGhpcyBtZXRob2Qgc3VjY2VlZHMgYmVjYXVzZSB0aGUgaW5zcGVjdG9yIG9iamVjdCBtdXN0CiAg
ICAgLy8gYmUgYWxpdmUgZXZlbiBhZnRlciB0aGUgaW5zcGVjdGVkIFdlYlZpZXcgaXMgZGVzdHJv
eWVkIC0gdGhlCiAgICAgLy8gY2xvc2Utd2luZG93IGFuZCBkZXN0cm95IHNpZ25hbHMgc3RpbGwg
bmVlZCB0byBiZQogICAgIC8vIGVtaXR0ZWQuCi0gICAgV2ViS2l0V2ViSW5zcGVjdG9yKiB3ZWJJ
bnNwZWN0b3I7CisgICAgV2ViS2l0V2ViSW5zcGVjdG9yKiB3ZWJJbnNwZWN0b3IgPSAwOwogICAg
IGdfb2JqZWN0X2dldChtX2luc3BlY3RlZFdlYlZpZXcsICJ3ZWItaW5zcGVjdG9yIiwgJndlYklu
c3BlY3RvciwgTlVMTCk7Ci0gICAgbV93ZWJJbnNwZWN0b3IgPSB3ZWJJbnNwZWN0b3I7CisgICAg
QVNTRVJUKHdlYkluc3BlY3Rvcik7CiAKLSAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV93ZWJJ
bnNwZWN0b3IsICJpbnNwZWN0LXdlYi12aWV3IiwgbV9pbnNwZWN0ZWRXZWJWaWV3LCAmbV93ZWJW
aWV3KTsKKyAgICBXZWJLaXRXZWJWaWV3KiBpbnNwZWN0b3JXZWJWaWV3ID0gMDsKKyAgICBnX3Np
Z25hbF9lbWl0X2J5X25hbWUod2ViSW5zcGVjdG9yLCAiaW5zcGVjdC13ZWItdmlldyIsIG1faW5z
cGVjdGVkV2ViVmlldywgJmluc3BlY3RvcldlYlZpZXcpOwogCi0gICAgaWYgKCFtX3dlYlZpZXcp
IHsKLSAgICAgICAgZ19vYmplY3RfdW5yZWYobV93ZWJJbnNwZWN0b3IpOwotICAgICAgICByZXR1
cm4gMDsKKyAgICBpZiAoIWluc3BlY3RvcldlYlZpZXcpIHsKKyAgICAgICAgZ19vYmplY3RfdW5y
ZWYod2ViSW5zcGVjdG9yKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHdlYmtpdF93
ZWJfaW5zcGVjdG9yX3NldF93ZWJfdmlldyhtX3dlYkluc3BlY3RvciwgbV93ZWJWaWV3KTsKLQot
ICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAiZGVzdHJveSIsCi0gICAgICAgICAgICAg
ICAgICAgICBHX0NBTExCQUNLKG5vdGlmeVdlYlZpZXdEZXN0cm95ZWQpLCAoZ3BvaW50ZXIpdGhp
cyk7CisgICAgd2Via2l0X3dlYl9pbnNwZWN0b3Jfc2V0X3dlYl92aWV3KHdlYkluc3BlY3Rvciwg
aW5zcGVjdG9yV2ViVmlldyk7CiAKICAgICBHT3duUHRyPGdjaGFyPiBpbnNwZWN0b3JVUkk7CiAK
QEAgLTEwMywxNCArNzYsNzMgQEAgUGFnZSogSW5zcGVjdG9yQ2xpZW50OjpjcmVhdGVQYWdlKCkK
ICAgICB9IGVsc2UKICAgICAgICAgaW5zcGVjdG9yVVJJLnNldChnX2ZpbGVuYW1lX3RvX3VyaShE
QVRBX0RJUiIvd2Via2l0LTEuMC93ZWJpbnNwZWN0b3IvaW5zcGVjdG9yLmh0bWwiLCBOVUxMLCBO
VUxMKSk7CiAKLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkobV93ZWJWaWV3LCBpbnNwZWN0
b3JVUkkuZ2V0KCkpOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaShpbnNwZWN0b3JXZWJW
aWV3LCBpbnNwZWN0b3JVUkkuZ2V0KCkpOworCisgICAgZ3RrX3dpZGdldF9zaG93KEdUS19XSURH
RVQoaW5zcGVjdG9yV2ViVmlldykpOworCisgICAgUGFnZSogaW5zcGVjdG9yUGFnZSA9IGNvcmUo
aW5zcGVjdG9yV2ViVmlldyk7CisgICAgaW5zcGVjdG9yUGFnZS0+aW5zcGVjdG9yQ29udHJvbGxl
cigpLT5zZXRJbnNwZWN0b3JGcm9udGVuZENsaWVudChuZXcgSW5zcGVjdG9yRnJvbnRlbmRDbGll
bnQobV9pbnNwZWN0ZWRXZWJWaWV3LCBpbnNwZWN0b3JXZWJWaWV3LCB3ZWJJbnNwZWN0b3IsIGlu
c3BlY3RvclBhZ2UpKTsKK30KKwordm9pZCBJbnNwZWN0b3JDbGllbnQ6OmhpZ2hsaWdodChOb2Rl
KiBub2RlKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ2xp
ZW50OjpoaWRlSGlnaGxpZ2h0KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lk
IEluc3BlY3RvckNsaWVudDo6cG9wdWxhdGVTZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5LCBTdHJp
bmcqIHZhbHVlKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9y
Q2xpZW50OjpzdG9yZVNldHRpbmcoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFs
dWUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworCitib29sIGRlc3Ryb3llZCA9IFRS
VUU7CisKK0luc3BlY3RvckZyb250ZW5kQ2xpZW50OjpJbnNwZWN0b3JGcm9udGVuZENsaWVudChX
ZWJLaXRXZWJWaWV3KiBpbnNwZWN0ZWRXZWJWaWV3LCBXZWJLaXRXZWJWaWV3KiBpbnNwZWN0b3JX
ZWJWaWV3LCBXZWJLaXRXZWJJbnNwZWN0b3IqIHdlYkluc3BlY3RvciwgUGFnZSogaW5zcGVjdG9y
UGFnZSkKKyAgICA6IEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwoY29yZShpbnNwZWN0ZWRX
ZWJWaWV3KS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLCBpbnNwZWN0b3JQYWdlKQorICAgICwgbV9p
bnNwZWN0b3JXZWJWaWV3KGluc3BlY3RvcldlYlZpZXcpCisgICAgLCBtX2luc3BlY3RlZFdlYlZp
ZXcoaW5zcGVjdGVkV2ViVmlldykKKyAgICAsIG1fd2ViSW5zcGVjdG9yKHdlYkluc3BlY3RvcikK
K3sKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1faW5zcGVjdG9yV2ViVmlldywgImRlc3Ryb3kiLAor
ICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyhub3RpZnlXZWJWaWV3RGVzdHJveWVkKSwg
KGdwb2ludGVyKXRoaXMpOworfQorCitJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6fkluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50KCkKK3sKKyAgICBBU1NFUlQoIW1fd2ViSW5zcGVjdG9yKTsKK30KKwor
dm9pZCBJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6ZGVzdHJveUluc3BlY3RvcldpbmRvdygpCit7
CisgICAgaWYgKCFtX3dlYkluc3BlY3RvcikKKyAgICAgICAgcmV0dXJuOworICAgIFdlYktpdFdl
Ykluc3BlY3Rvciogd2ViSW5zcGVjdG9yID0gbV93ZWJJbnNwZWN0b3I7CisgICAgbV93ZWJJbnNw
ZWN0b3IgPSAwOworCisgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKG1f
aW5zcGVjdG9yV2ViVmlldywgKGdwb2ludGVyKW5vdGlmeVdlYlZpZXdEZXN0cm95ZWQsIChncG9p
bnRlcil0aGlzKTsKKyAgICBtX2luc3BlY3RvcldlYlZpZXcgPSAwOworCisgICAgY29yZShtX2lu
c3BlY3RlZFdlYlZpZXcpLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmNsb3NlKCk7CiAKLSAgICBn
dGtfd2lkZ2V0X3Nob3coR1RLX1dJREdFVChtX3dlYlZpZXcpKTsKKyAgICBnYm9vbGVhbiBoYW5k
bGVkID0gRkFMU0U7CisgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKHdlYkluc3BlY3RvciwgImNs
b3NlLXdpbmRvdyIsICZoYW5kbGVkKTsKKyAgICBBU1NFUlQoaGFuZGxlZCk7CiAKLSAgICByZXR1
cm4gY29yZShtX3dlYlZpZXcpOworICAgIC8qIHdlIHNob3VsZCBub3cgZGlzcG9zZSBvdXIgb3du
IHJlZmVyZW5jZSAqLworICAgIGdfb2JqZWN0X3VucmVmKHdlYkluc3BlY3Rvcik7CiB9CiAKLVN0
cmluZyBJbnNwZWN0b3JDbGllbnQ6OmxvY2FsaXplZFN0cmluZ3NVUkwoKQorU3RyaW5nIEluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50Ojpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkKIHsKICAgICBHT3duUHRy
PGdjaGFyPiBVUkw7CiAKQEAgLTEyNiw4OSArMTU4LDU2IEBAIFN0cmluZyBJbnNwZWN0b3JDbGll
bnQ6OmxvY2FsaXplZFN0cmluZ3NVUkwoKQogICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KFVS
TC5nZXQoKSk7CiB9CiAKLVN0cmluZyBJbnNwZWN0b3JDbGllbnQ6OmhpZGRlblBhbmVscygpCitT
dHJpbmcgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmhpZGRlblBhbmVscygpCiB7CiAgICAgbm90
SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
Q2xpZW50OjpzaG93V2luZG93KCkKK3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmJyaW5n
VG9Gcm9udCgpCiB7Ci0gICAgaWYgKCFtX3dlYlZpZXcpCisgICAgaWYgKCFtX2luc3BlY3Rvcldl
YlZpZXcpCiAgICAgICAgIHJldHVybjsKIAogICAgIGdib29sZWFuIGhhbmRsZWQgPSBGQUxTRTsK
ICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV93ZWJJbnNwZWN0b3IsICJzaG93LXdpbmRvdyIs
ICZoYW5kbGVkKTsKLQotICAgIGNvcmUobV9pbnNwZWN0ZWRXZWJWaWV3KS0+aW5zcGVjdG9yQ29u
dHJvbGxlcigpLT5zZXRXaW5kb3dWaXNpYmxlKHRydWUpOwogfQogCi12b2lkIEluc3BlY3RvckNs
aWVudDo6Y2xvc2VXaW5kb3coKQordm9pZCBJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6Y2xvc2VX
aW5kb3coKQogewotICAgIGlmICghbV93ZWJWaWV3KQotICAgICAgICByZXR1cm47Ci0KLSAgICBn
Ym9vbGVhbiBoYW5kbGVkID0gRkFMU0U7Ci0gICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fd2Vi
SW5zcGVjdG9yLCAiY2xvc2Utd2luZG93IiwgJmhhbmRsZWQpOwotCi0gICAgY29yZShtX2luc3Bl
Y3RlZFdlYlZpZXcpLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnNldFdpbmRvd1Zpc2libGUoZmFs
c2UpOworICAgIGRlc3Ryb3lJbnNwZWN0b3JXaW5kb3coKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JD
bGllbnQ6OmF0dGFjaFdpbmRvdygpCit2b2lkIEluc3BlY3RvckZyb250ZW5kQ2xpZW50OjphdHRh
Y2hXaW5kb3coKQogewotICAgIGlmICghbV93ZWJWaWV3KQorICAgIGlmICghbV9pbnNwZWN0b3JX
ZWJWaWV3KQogICAgICAgICByZXR1cm47CiAKICAgICBnYm9vbGVhbiBoYW5kbGVkID0gRkFMU0U7
CiAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fd2ViSW5zcGVjdG9yLCAiYXR0YWNoLXdpbmRv
dyIsICZoYW5kbGVkKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDbGllbnQ6OmRldGFjaFdpbmRvdygp
Cit2b2lkIEluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpkZXRhY2hXaW5kb3coKQogewotICAgIGlm
ICghbV93ZWJWaWV3KQorICAgIGlmICghbV9pbnNwZWN0b3JXZWJWaWV3KQogICAgICAgICByZXR1
cm47CiAKICAgICBnYm9vbGVhbiBoYW5kbGVkID0gRkFMU0U7CiAgICAgZ19zaWduYWxfZW1pdF9i
eV9uYW1lKG1fd2ViSW5zcGVjdG9yLCAiZGV0YWNoLXdpbmRvdyIsICZoYW5kbGVkKTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JDbGllbnQ6OnNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhl
aWdodCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEluc3BlY3RvckNsaWVu
dDo6aGlnaGxpZ2h0KE5vZGUqIG5vZGUpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
dm9pZCBJbnNwZWN0b3JDbGllbnQ6OmhpZGVIaWdobGlnaHQoKQordm9pZCBJbnNwZWN0b3JGcm9u
dGVuZENsaWVudDo6c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KQogewog
ICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ2xpZW50OjppbnNwZWN0
ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYgbmV3VVJMKQordm9pZCBJbnNwZWN0b3JGcm9udGVu
ZENsaWVudDo6aW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIG5ld1VSTCkKIHsKLSAg
ICBpZiAoIW1fd2ViVmlldykKKyAgICBpZiAoIW1faW5zcGVjdG9yV2ViVmlldykKICAgICAgICAg
cmV0dXJuOwogCiAgICAgd2Via2l0X3dlYl9pbnNwZWN0b3Jfc2V0X2luc3BlY3RlZF91cmkobV93
ZWJJbnNwZWN0b3IsIG5ld1VSTC51dGY4KCkuZGF0YSgpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JD
bGllbnQ6Omluc3BlY3RvcldpbmRvd09iamVjdENsZWFyZWQoKQotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ2xpZW50Ojpwb3B1bGF0ZVNldHRpbmcoY29uc3Qg
U3RyaW5nJiBrZXksIFN0cmluZyogdmFsdWUpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotdm9pZCBJbnNwZWN0b3JDbGllbnQ6OnN0b3JlU2V0dGluZyhjb25zdCBTdHJpbmcmIGtleSwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCiB9CiAK
ZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50R3Rr
LmggYi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudEd0ay5oCmluZGV4
IDI5N2ZkOGYuLmNkYjUzNzUgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQv
SW5zcGVjdG9yQ2xpZW50R3RrLmgKKysrIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9JbnNw
ZWN0b3JDbGllbnRHdGsuaApAQCAtMzAsNiArMzAsNyBAQAogI2RlZmluZSBJbnNwZWN0b3JDbGll
bnRHdGtfaAogCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ2xpZW50LmgiCisjaW5jbHVkZSAiSW5zcGVj
dG9yRnJvbnRlbmRDbGllbnRMb2NhbC5oIgogI2luY2x1ZGUgIndlYmtpdHdlYnZpZXcuaCIKICNp
bmNsdWRlICJ3ZWJraXR3ZWJpbnNwZWN0b3IuaCIKIApAQCAtNDYsMTUgKzQ3LDMwIEBAIG5hbWVz
cGFjZSBXZWJLaXQgewogICAgICAgICBJbnNwZWN0b3JDbGllbnQoV2ViS2l0V2ViVmlldyogd2Vi
Vmlldyk7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIGluc3BlY3RvckRlc3Ryb3llZCgpOwotICAg
ICAgICB2b2lkIHdlYlZpZXdEZXN0cm95ZWQoKTsKIAotICAgICAgICB2aXJ0dWFsIFdlYkNvcmU6
OlBhZ2UqIGNyZWF0ZVBhZ2UoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIG9wZW5JbnNwZWN0b3JG
cm9udGVuZChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyKik7CisKKyAgICAgICAgdmlydHVh
bCB2b2lkIGhpZ2hsaWdodChXZWJDb3JlOjpOb2RlKik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBo
aWRlSGlnaGxpZ2h0KCk7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIHBvcHVsYXRlU2V0dGluZyhj
b25zdCBXZWJDb3JlOjpTdHJpbmcmIGtleSwgV2ViQ29yZTo6U3RyaW5nKiB2YWx1ZSk7CisgICAg
ICAgIHZpcnR1YWwgdm9pZCBzdG9yZVNldHRpbmcoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBrZXks
IGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgdmFsdWUpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAg
V2ViS2l0V2ViVmlldyogbV9pbnNwZWN0ZWRXZWJWaWV3OworICAgIH07CisKKyAgICBjbGFzcyBJ
bnNwZWN0b3JGcm9udGVuZENsaWVudCA6IHB1YmxpYyBXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVu
ZENsaWVudExvY2FsIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2xp
ZW50KFdlYktpdFdlYlZpZXcqIGluc3BlY3RlZFdlYlZpZXcsIFdlYktpdFdlYlZpZXcqIGluc3Bl
Y3RvcldlYlZpZXcsIFdlYktpdFdlYkluc3BlY3Rvciogd2ViSW5zcGVjdG9yLCBXZWJDb3JlOjpQ
YWdlKiBpbnNwZWN0b3JQYWdlKTsKKworICAgICAgICB2b2lkIGRlc3Ryb3lJbnNwZWN0b3JXaW5k
b3coKTsKIAogICAgICAgICB2aXJ0dWFsIFdlYkNvcmU6OlN0cmluZyBsb2NhbGl6ZWRTdHJpbmdz
VVJMKCk7CiAKICAgICAgICAgdmlydHVhbCBXZWJDb3JlOjpTdHJpbmcgaGlkZGVuUGFuZWxzKCk7
CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIHNob3dXaW5kb3coKTsKKyAgICAgICAgdmlydHVhbCB2
b2lkIGJyaW5nVG9Gcm9udCgpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgY2xvc2VXaW5kb3coKTsK
IAogICAgICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoV2luZG93KCk7CkBAIC02MiwxNyArNzgsMTIg
QEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHNldEF0dGFjaGVk
V2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCk7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIGhp
Z2hsaWdodChXZWJDb3JlOjpOb2RlKik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBoaWRlSGlnaGxp
Z2h0KCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFdl
YkNvcmU6OlN0cmluZyYgbmV3VVJMKTsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgcG9wdWxhdGVT
ZXR0aW5nKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYga2V5LCBXZWJDb3JlOjpTdHJpbmcqIHZhbHVl
KTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHN0b3JlU2V0dGluZyhjb25zdCBXZWJDb3JlOjpTdHJp
bmcmIGtleSwgY29uc3QgV2ViQ29yZTo6U3RyaW5nJiB2YWx1ZSk7Ci0KLSAgICAgICAgdmlydHVh
bCB2b2lkIGluc3BlY3RvcldpbmRvd09iamVjdENsZWFyZWQoKTsKLQogICAgIHByaXZhdGU6Ci0g
ICAgICAgIFdlYktpdFdlYlZpZXcqIG1fd2ViVmlldzsKKyAgICAgICAgdmlydHVhbCB+SW5zcGVj
dG9yRnJvbnRlbmRDbGllbnQoKTsKKworICAgICAgICBXZWJLaXRXZWJWaWV3KiBtX2luc3BlY3Rv
cldlYlZpZXc7CiAgICAgICAgIFdlYktpdFdlYlZpZXcqIG1faW5zcGVjdGVkV2ViVmlldzsKICAg
ICAgICAgV2ViS2l0V2ViSW5zcGVjdG9yKiBtX3dlYkluc3BlY3RvcjsKICAgICB9OwpkaWZmIC0t
Z2l0IGEvV2ViS2l0L2hhaWt1L0NoYW5nZUxvZyBiL1dlYktpdC9oYWlrdS9DaGFuZ2VMb2cKaW5k
ZXggMGI1N2E1OS4uYzhhOWZkMCAxMDA2NDQKLS0tIGEvV2ViS2l0L2hhaWt1L0NoYW5nZUxvZwor
KysgYi9XZWJLaXQvaGFpa3UvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTAtMDMtMTAg
IFl1cnkgU2VtaWtoYXRza3kgPHl1cnlzQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbnRyb2R1Y2UgSW5zcGVjdG9yRnJvbnRl
bmRDbGllbnQgdGhhdCBwcm92aWRlcyBJbnNwZWN0b3JGcm9udGVuZCB3aXRoIGFuIGludGVyZmFj
ZSB0byB0aGUgZW1iZWRkZXIuIEluc3BlY3RvckNsaWVudCBub3cgc2VydmVzIGFzIGEgZGVsZWdh
dGUgZm9yIEluc3BlY3RvckNvbnRyb2xsZXIgYW5kIGRvZXMgbm90IGNvbnRhaW4gbWV0aG9kcyBm
b3IgbWFuYWdpbmcgaW5zcGVjdG9yIGZyb250ZW5kIHdpbmRvdy4gVGhhdCBhbGxvd3MgdG8gY3Jl
YXRlIHJlbW90ZSBJbnNwZWN0b3JGcm9udGVuZEhvc3QuCisKKyAgICAgICAgSW50cm9kdWNlIElu
c3BlY3RvckZyb250ZW5kQ2xpZW50IHRoYXQgd291bGQgcHJvdmlkZSBJbnNwZWN0b3JGcm9udGVu
ZCB3aXRoIGFuIGludGVyZmFjZSB0byB0aGUgZW1iZWRkZXIKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM1MDM2CisKKyAgICAgICAgKiBXZWJDb3JlU3Vw
cG9ydC9JbnNwZWN0b3JDbGllbnRIYWlrdS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JDbGllbnRIYWlrdTo6b3Blbkluc3BlY3RvckZyb250ZW5kKToKKyAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9JbnNwZWN0b3JDbGllbnRIYWlrdS5oOgorCiAyMDEwLTAzLTAyICBBZGFtIFRyZWF0
ICA8YXRyZWF0QHJpbS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2ZSBIeWF0dC4KZGlm
ZiAtLWdpdCBhL1dlYktpdC9oYWlrdS9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRIYWlr
dS5jcHAgYi9XZWJLaXQvaGFpa3UvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50SGFpa3Uu
Y3BwCmluZGV4IGYwNmU5NmIuLjU5MjMyZTkgMTAwNjQ0Ci0tLSBhL1dlYktpdC9oYWlrdS9XZWJD
b3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRIYWlrdS5jcHAKKysrIGIvV2ViS2l0L2hhaWt1L1dl
YkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudEhhaWt1LmNwcApAQCAtNDIsNDUgKzQyLDcgQEAg
dm9pZCBJbnNwZWN0b3JDbGllbnRIYWlrdTo6aW5zcGVjdG9yRGVzdHJveWVkKCkKICAgICBub3RJ
bXBsZW1lbnRlZCgpOwogfQogCi1QYWdlKiBJbnNwZWN0b3JDbGllbnRIYWlrdTo6Y3JlYXRlUGFn
ZSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotU3RyaW5n
IEluc3BlY3RvckNsaWVudEhhaWt1Ojpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotU3RyaW5nIEluc3BlY3Rv
ckNsaWVudEhhaWt1OjpoaWRkZW5QYW5lbHMoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0g
ICAgcmV0dXJuIFN0cmluZygpOwotfQotCi12b2lkIEluc3BlY3RvckNsaWVudEhhaWt1OjpzaG93
V2luZG93KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEluc3BlY3RvckNs
aWVudEhhaWt1OjpjbG9zZVdpbmRvdygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
dm9pZCBJbnNwZWN0b3JDbGllbnRIYWlrdTo6YXR0YWNoV2luZG93KCkKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotfQotCi12b2lkIEluc3BlY3RvckNsaWVudEhhaWt1OjpkZXRhY2hXaW5kb3co
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ2xpZW50SGFp
a3U6OnNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkKK3ZvaWQgSW5zcGVj
dG9yQ2xpZW50SGFpa3U6Om9wZW5JbnNwZWN0b3JGcm9udGVuZChXZWJDb3JlOjpJbnNwZWN0b3JD
b250cm9sbGVyKikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQpAQCAtOTUsMTYgKzU3LDYg
QEAgdm9pZCBJbnNwZWN0b3JDbGllbnRIYWlrdTo6aGlkZUhpZ2hsaWdodCgpCiAgICAgbm90SW1w
bGVtZW50ZWQoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDbGllbnRIYWlrdTo6aW5zcGVjdGVkVVJM
Q2hhbmdlZChjb25zdCBTdHJpbmcmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZv
aWQgSW5zcGVjdG9yQ2xpZW50SGFpa3U6Omluc3BlY3RvcldpbmRvd09iamVjdENsZWFyZWQoKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KIHZvaWQgSW5zcGVjdG9yQ2xpZW50SGFpa3U6
OnBvcHVsYXRlU2V0dGluZyhjb25zdCBTdHJpbmcmIGtleSwgU3RyaW5nKiB2YWx1ZSkKIHsKICAg
ICBub3RJbXBsZW1lbnRlZCgpOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2hhaWt1L1dlYkNvcmVTdXBw
b3J0L0luc3BlY3RvckNsaWVudEhhaWt1LmggYi9XZWJLaXQvaGFpa3UvV2ViQ29yZVN1cHBvcnQv
SW5zcGVjdG9yQ2xpZW50SGFpa3UuaAppbmRleCA4Nzg4YTVmLi5kNDI3NjcwIDEwMDY0NAotLS0g
YS9XZWJLaXQvaGFpa3UvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50SGFpa3UuaAorKysg
Yi9XZWJLaXQvaGFpa3UvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50SGFpa3UuaApAQCAt
NDIsMjkgKzQyLDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBwdWJsaWM6CiAgICAgICAg
IHZpcnR1YWwgdm9pZCBpbnNwZWN0b3JEZXN0cm95ZWQoKTsKIAotICAgICAgICB2aXJ0dWFsIFBh
Z2UqIGNyZWF0ZVBhZ2UoKTsKLQotICAgICAgICB2aXJ0dWFsIFN0cmluZyBsb2NhbGl6ZWRTdHJp
bmdzVVJMKCk7Ci0KLSAgICAgICAgdmlydHVhbCBTdHJpbmcgaGlkZGVuUGFuZWxzKCk7Ci0KLSAg
ICAgICAgdmlydHVhbCB2b2lkIHNob3dXaW5kb3coKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGNs
b3NlV2luZG93KCk7Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIGF0dGFjaFdpbmRvdygpOwotICAg
ICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoV2luZG93KCk7Ci0KLSAgICAgICAgdmlydHVhbCB2b2lk
IHNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCk7CisgICAgICAgIHZpcnR1
YWwgdm9pZCBvcGVuSW5zcGVjdG9yRnJvbnRlbmQoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxl
ciopOwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBoaWdobGlnaHQoTm9kZSopOwogICAgICAgICB2
aXJ0dWFsIHZvaWQgaGlkZUhpZ2hsaWdodCgpOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBpbnNw
ZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYgbmV3VVJMKTsKLQogICAgICAgICB2aXJ0dWFs
IHZvaWQgcG9wdWxhdGVTZXR0aW5nKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYga2V5LCBXZWJDb3Jl
OjpTdHJpbmcqIHZhbHVlKTsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0b3JlU2V0dGluZyhjb25z
dCBXZWJDb3JlOjpTdHJpbmcmIGtleSwgY29uc3QgV2ViQ29yZTo6U3RyaW5nJiB2YWx1ZSk7Ci0K
LSAgICAgICAgdmlydHVhbCB2b2lkIGluc3BlY3RvcldpbmRvd09iamVjdENsZWFyZWQoKTsKICAg
ICB9OwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL0No
YW5nZUxvZyBiL1dlYktpdC9tYWMvQ2hhbmdlTG9nCmluZGV4IDA2ODgwODguLjFhNTEwZWIgMTAw
NjQ0Ci0tLSBhL1dlYktpdC9tYWMvQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9tYWMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsNDkgQEAKKzIwMTAtMDMtMTEgIFl1cnkgU2VtaWtoYXRza3kgPHl1cnlzQGNo
cm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBJbnRyb2R1Y2UgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQgdGhhdCBwcm92aWRlcyBJbnNw
ZWN0b3JGcm9udGVuZCB3aXRoIGFuIGludGVyZmFjZSB0byB0aGUgZW1iZWRkZXIuIEluc3BlY3Rv
ckNsaWVudCBub3cgc2VydmVzIGFzIGEgZGVsZWdhdGUgZm9yIEluc3BlY3RvckNvbnRyb2xsZXIg
YW5kIGRvZXMgbm90IGNvbnRhaW4gbWV0aG9kcyBmb3IgbWFuYWdpbmcgaW5zcGVjdG9yIGZyb250
ZW5kIHdpbmRvdy4gVGhhdCBhbGxvd3MgdG8gY3JlYXRlIHJlbW90ZSBJbnNwZWN0b3JGcm9udGVu
ZEhvc3QuCisKKyAgICAgICAgSW50cm9kdWNlIEluc3BlY3RvckZyb250ZW5kQ2xpZW50IHRoYXQg
d291bGQgcHJvdmlkZSBJbnNwZWN0b3JGcm9udGVuZCB3aXRoIGFuIGludGVyZmFjZSB0byB0aGUg
ZW1iZWRkZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTM1MDM2CisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuaDoK
KyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQubW06CisgICAgICAg
IChXZWJJbnNwZWN0b3JDbGllbnQ6OldlYkluc3BlY3RvckNsaWVudCk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3JDbGllbnQ6Omluc3BlY3RvckRlc3Ryb3llZCk6CisgICAgICAgIChXZWJJbnNwZWN0
b3JDbGllbnQ6Om9wZW5JbnNwZWN0b3JGcm9udGVuZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3JD
bGllbnQ6OmhpZ2hsaWdodCk6CisgICAgICAgIChXZWJJbnNwZWN0b3JDbGllbnQ6OmhpZGVIaWdo
bGlnaHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OldlYkluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50KToKKyAgICAgICAgKFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50Ojpm
cm9udGVuZExvYWRlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6bG9j
YWxpemVkU3RyaW5nc1VSTCk6CisgICAgICAgIChXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6
aGlkZGVuUGFuZWxzKToKKyAgICAgICAgKFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50Ojpicmlu
Z1RvRnJvbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmNsb3NlV2lu
ZG93KToKKyAgICAgICAgKFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjphdHRhY2hXaW5kb3cp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmRldGFjaFdpbmRvdyk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6c2V0QXR0YWNoZWRXaW5kb3dIZWln
aHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6Omluc3BlY3RlZFVSTENo
YW5nZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OnVwZGF0ZVdpbmRv
d1RpdGxlKToKKyAgICAgICAgKC1bV2ViSW5zcGVjdG9yV2luZG93Q29udHJvbGxlciBkZWFsbG9j
XSk6CisgICAgICAgICgtW1dlYkluc3BlY3RvcldpbmRvd0NvbnRyb2xsZXIgd2luZG93U2hvdWxk
Q2xvc2U6XSk6CisgICAgICAgICgtW1dlYkluc3BlY3RvcldpbmRvd0NvbnRyb2xsZXIgY2xvc2Vd
KToKKyAgICAgICAgKC1bV2ViSW5zcGVjdG9yV2luZG93Q29udHJvbGxlciBzaG93V2luZG93Ol0p
OgorICAgICAgICAoLVtXZWJJbnNwZWN0b3JXaW5kb3dDb250cm9sbGVyIGF0dGFjaF0pOgorICAg
ICAgICAoLVtXZWJJbnNwZWN0b3JXaW5kb3dDb250cm9sbGVyIGRldGFjaF0pOgorICAgICAgICAo
LVtXZWJJbnNwZWN0b3JXaW5kb3dDb250cm9sbGVyIGF0dGFjaGVkXSk6CisgICAgICAgICgtW1dl
Ykluc3BlY3RvcldpbmRvd0NvbnRyb2xsZXIgc2V0RnJvbnRlbmRDbGllbnQ6XSk6CisgICAgICAg
ICgtW1dlYkluc3BlY3RvcldpbmRvd0NvbnRyb2xsZXIgZGVzdHJveUluc3BlY3RvclZpZXddKToK
KyAgICAgICAgKC1bV2ViTm9kZUhpZ2hsaWdodGVyIGluaXRXaXRoSW5zcGVjdGVkV2ViVmlldzpd
KToKKyAgICAgICAgKC1bV2ViTm9kZUhpZ2hsaWdodGVyIGRlYWxsb2NdKToKKyAgICAgICAgKC1b
V2ViTm9kZUhpZ2hsaWdodGVyIGhpZ2hsaWdodE5vZGU6XSk6CisgICAgICAgICgtW1dlYk5vZGVI
aWdobGlnaHRlciBoaWRlSGlnaGxpZ2h0XSk6CisgICAgICAgICgtW1dlYk5vZGVIaWdobGlnaHRl
ciBkaWRBdHRhY2hXZWJOb2RlSGlnaGxpZ2h0Ol0pOgorICAgICAgICAoLVtXZWJOb2RlSGlnaGxp
Z2h0ZXIgd2lsbERldGFjaFdlYk5vZGVIaWdobGlnaHQ6XSk6CisgICAgICAgICogV2ViSW5zcGVj
dG9yL1dlYkluc3BlY3Rvci5tbToKKyAgICAgICAgKC1bV2ViSW5zcGVjdG9yIGF0dGFjaDpdKToK
KyAgICAgICAgKC1bV2ViSW5zcGVjdG9yIGRldGFjaDpdKToKKwogMjAxMC0wMy0xMCAgU2ltb24g
RnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBE
YXJpbiBBZGxlci4KZGlmZiAtLWdpdCBhL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViSW5z
cGVjdG9yQ2xpZW50LmggYi9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNs
aWVudC5oCmluZGV4IDY0NjIxZjguLmVlODFiMjUgMTAwNjQ0Ci0tLSBhL1dlYktpdC9tYWMvV2Vi
Q29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmgKKysrIGIvV2ViS2l0L21hYy9XZWJDb3Jl
U3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuaApAQCAtMjcsMTUgKzI3LDE4IEBACiAgKi8KIAog
I2ltcG9ydCA8V2ViQ29yZS9JbnNwZWN0b3JDbGllbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvSW5z
cGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5oPgogI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybVN0
cmluZy5oPgogCiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKICNpZmRlZiBfX09CSkNfXwog
QGNsYXNzIFdlYkluc3BlY3RvcldpbmRvd0NvbnRyb2xsZXI7CitAY2xhc3MgV2ViTm9kZUhpZ2hs
aWdodGVyOwogQGNsYXNzIFdlYlZpZXc7CiAjZWxzZQogY2xhc3MgV2ViSW5zcGVjdG9yV2luZG93
Q29udHJvbGxlcjsKK2NsYXNzIFdlYk5vZGVIaWdobGlnaHRlcjsKIGNsYXNzIFdlYlZpZXc7CiAj
ZW5kaWYKIApAQCAtNDUsMzIgKzQ4LDQxIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBp
bnNwZWN0b3JEZXN0cm95ZWQoKTsKIAotICAgIHZpcnR1YWwgV2ViQ29yZTo6UGFnZSogY3JlYXRl
UGFnZSgpOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6U3RyaW5nIGxvY2FsaXplZFN0cmluZ3NVUkwo
KTsKLQotICAgIHZpcnR1YWwgV2ViQ29yZTo6U3RyaW5nIGhpZGRlblBhbmVscygpOwotCi0gICAg
dmlydHVhbCB2b2lkIHNob3dXaW5kb3coKTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xvc2VXaW5kb3co
KTsKLQotICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hXaW5kb3coKTsKLSAgICB2aXJ0dWFsIHZvaWQg
ZGV0YWNoV2luZG93KCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0QXR0YWNoZWRXaW5kb3dIZWln
aHQodW5zaWduZWQgaGVpZ2h0KTsKKyAgICB2aXJ0dWFsIHZvaWQgb3Blbkluc3BlY3RvckZyb250
ZW5kKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXIqKTsKIAogICAgIHZpcnR1YWwgdm9pZCBo
aWdobGlnaHQoV2ViQ29yZTo6Tm9kZSopOwogICAgIHZpcnR1YWwgdm9pZCBoaWRlSGlnaGxpZ2h0
KCk7Ci0gICAgdmlydHVhbCB2b2lkIGluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgV2ViQ29yZTo6
U3RyaW5nJiBuZXdVUkwpOwogCiAgICAgdmlydHVhbCB2b2lkIHBvcHVsYXRlU2V0dGluZyhjb25z
dCBXZWJDb3JlOjpTdHJpbmcmIGtleSwgV2ViQ29yZTo6U3RyaW5nKiB2YWx1ZSk7CiAgICAgdmly
dHVhbCB2b2lkIHN0b3JlU2V0dGluZyhjb25zdCBXZWJDb3JlOjpTdHJpbmcmIGtleSwgY29uc3Qg
V2ViQ29yZTo6U3RyaW5nJiB2YWx1ZSk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgaW5zcGVjdG9yV2lu
ZG93T2JqZWN0Q2xlYXJlZCgpOworcHJpdmF0ZToKKyAgICBXZWJWaWV3ICptX3dlYlZpZXc7Cisg
ICAgUmV0YWluUHRyPFdlYk5vZGVIaWdobGlnaHRlcj4gbV9oaWdobGlnaHRlcjsKK307CisKK2Ns
YXNzIFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50IDogcHVibGljIFdlYkNvcmU6Okluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50TG9jYWwgeworcHVibGljOgorICAgIFdlYkluc3BlY3RvckZyb250ZW5k
Q2xpZW50KFdlYlZpZXcqLCBXZWJJbnNwZWN0b3JXaW5kb3dDb250cm9sbGVyKiwgV2ViQ29yZTo6
SW5zcGVjdG9yQ29udHJvbGxlciosIFdlYkNvcmU6OlBhZ2UqKTsKKworICAgIHZpcnR1YWwgdm9p
ZCBmcm9udGVuZExvYWRlZCgpOworICAgIAorICAgIHZpcnR1YWwgV2ViQ29yZTo6U3RyaW5nIGxv
Y2FsaXplZFN0cmluZ3NVUkwoKTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OlN0cmluZyBoaWRkZW5Q
YW5lbHMoKTsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgYnJpbmdUb0Zyb250KCk7CisgICAgdmly
dHVhbCB2b2lkIGNsb3NlV2luZG93KCk7CisgICAgCisgICAgdmlydHVhbCB2b2lkIGF0dGFjaFdp
bmRvdygpOworICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hXaW5kb3coKTsKKyAgICAKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KTsKKyAgICB2
aXJ0dWFsIHZvaWQgaW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpTdHJpbmcmIG5l
d1VSTCk7CiAKIHByaXZhdGU6CiAgICAgdm9pZCB1cGRhdGVXaW5kb3dUaXRsZSgpIGNvbnN0Owog
Ci0gICAgV2ViVmlldyAqbV93ZWJWaWV3OworICAgIFdlYlZpZXcqIG1faW5zcGVjdGVkV2ViVmll
dzsKICAgICBSZXRhaW5QdHI8V2ViSW5zcGVjdG9yV2luZG93Q29udHJvbGxlcj4gbV93aW5kb3dD
b250cm9sbGVyOwogICAgIFdlYkNvcmU6OlN0cmluZyBtX2luc3BlY3RlZFVSTDsKIH07CmRpZmYg
LS1naXQgYS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5tbSBi
L1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50Lm1tCmluZGV4IGM1
ZjE3MjkuLmFiYzZlNjAgMTAwNjQ0Ci0tLSBhL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2Vi
SW5zcGVjdG9yQ2xpZW50Lm1tCisrKyBiL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViSW5z
cGVjdG9yQ2xpZW50Lm1tCkBAIC00MSw2ICs0MSw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL1BhZ2Uu
aD4KICNpbXBvcnQgPFdlYktpdC9ET01FeHRlbnNpb25zLmg+CiAjaW1wb3J0IDxXZWJLaXRTeXN0
ZW1JbnRlcmZhY2UuaD4KKyNpbXBvcnQgPHd0Zi9QYXNzT3duUHRyLmg+CiAKIHVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwogCkBAIC00OCw0NSArNDksOTAgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CiBAcHJpdmF0ZQogICAgIFdlYlZpZXcgKl9pbnNwZWN0ZWRXZWJWaWV3OwogICAgIFdlYlZp
ZXcgKl93ZWJWaWV3OwotICAgIFdlYk5vZGVIaWdobGlnaHQgKl9jdXJyZW50SGlnaGxpZ2h0Owor
ICAgIFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50KiBfZnJvbnRlbmRDbGllbnQ7CiAgICAgQk9P
TCBfYXR0YWNoZWRUb0luc3BlY3RlZFdlYlZpZXc7CiAgICAgQk9PTCBfc2hvdWxkQXR0YWNoOwog
ICAgIEJPT0wgX3Zpc2libGU7Ci0gICAgQk9PTCBfbW92aW5nV2luZG93czsKKyAgICBCT09MIF9k
ZXN0cm95aW5nSW5zcGVjdG9yVmlldzsKIH0KIC0gKGlkKWluaXRXaXRoSW5zcGVjdGVkV2ViVmll
dzooV2ViVmlldyAqKXdlYlZpZXc7Ci0tIChCT09MKWluc3BlY3RvclZpc2libGU7CiAtIChXZWJW
aWV3ICopd2ViVmlldzsKIC0gKHZvaWQpYXR0YWNoOwogLSAodm9pZClkZXRhY2g7CistIChCT09M
KWF0dGFjaGVkOworLSAodm9pZClzZXRGcm9udGVuZENsaWVudDooV2ViSW5zcGVjdG9yRnJvbnRl
bmRDbGllbnQqKWZyb250ZW5kQ2xpZW50OwogLSAodm9pZClzZXRBdHRhY2hlZFdpbmRvd0hlaWdo
dDoodW5zaWduZWQpaGVpZ2h0OworLSAodm9pZClkZXN0cm95SW5zcGVjdG9yVmlldzsKK0BlbmQK
KworI3ByYWdtYSBtYXJrIC0KKworQGludGVyZmFjZSBXZWJOb2RlSGlnaGxpZ2h0ZXIgOiBOU09i
amVjdCB7CitAcHJpdmF0ZQorICAgIFdlYlZpZXcgKl9pbnNwZWN0ZWRXZWJWaWV3OworICAgIFdl
Yk5vZGVIaWdobGlnaHQgKl9jdXJyZW50SGlnaGxpZ2h0OworfQorLSAoaWQpaW5pdFdpdGhJbnNw
ZWN0ZWRXZWJWaWV3OihXZWJWaWV3ICopd2ViVmlldzsKIC0gKHZvaWQpaGlnaGxpZ2h0Tm9kZToo
RE9NTm9kZSAqKW5vZGU7CiAtICh2b2lkKWhpZGVIaWdobGlnaHQ7CiBAZW5kCiAKICNwcmFnbWEg
bWFyayAtCiAKKwogV2ViSW5zcGVjdG9yQ2xpZW50OjpXZWJJbnNwZWN0b3JDbGllbnQoV2ViVmll
dyAqd2ViVmlldykKIDogbV93ZWJWaWV3KHdlYlZpZXcpCissIG1faGlnaGxpZ2h0ZXIoQWRvcHRO
UywgW1tXZWJOb2RlSGlnaGxpZ2h0ZXIgYWxsb2NdIGluaXRXaXRoSW5zcGVjdGVkV2ViVmlldzp3
ZWJWaWV3XSkKIHsKIH0KIAogdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6Omluc3BlY3RvckRlc3Ry
b3llZCgpCiB7Ci0gICAgW1ttX3dpbmRvd0NvbnRyb2xsZXIuZ2V0KCkgd2ViVmlld10gY2xvc2Vd
OwogICAgIGRlbGV0ZSB0aGlzOwogfQogCi1QYWdlKiBXZWJJbnNwZWN0b3JDbGllbnQ6OmNyZWF0
ZVBhZ2UoKQordm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6Om9wZW5JbnNwZWN0b3JGcm9udGVuZChJ
bnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyKQoreworICAgIFJldGFpblB0
cjxXZWJJbnNwZWN0b3JXaW5kb3dDb250cm9sbGVyPiB3aW5kb3dDb250cm9sbGVyKEFkb3B0TlMs
IFtbV2ViSW5zcGVjdG9yV2luZG93Q29udHJvbGxlciBhbGxvY10gaW5pdFdpdGhJbnNwZWN0ZWRX
ZWJWaWV3Om1fd2ViVmlld10pOworICAgIFBhZ2UqIGZyb250ZW5kUGFnZSA9IGNvcmUoW3dpbmRv
d0NvbnRyb2xsZXIuZ2V0KCkgd2ViVmlld10pOworCisgICAgZnJvbnRlbmRQYWdlLT5pbnNwZWN0
b3JDb250cm9sbGVyKCktPnNldEluc3BlY3RvckZyb250ZW5kQ2xpZW50KG5ldyBXZWJJbnNwZWN0
b3JGcm9udGVuZENsaWVudChtX3dlYlZpZXcsIHdpbmRvd0NvbnRyb2xsZXIuZ2V0KCksIGluc3Bl
Y3RvckNvbnRyb2xsZXIsIGZyb250ZW5kUGFnZSkpOworfQorCit2b2lkIFdlYkluc3BlY3RvckNs
aWVudDo6aGlnaGxpZ2h0KE5vZGUqIG5vZGUpCit7CisgICAgW21faGlnaGxpZ2h0ZXIuZ2V0KCkg
aGlnaGxpZ2h0Tm9kZTpraXQobm9kZSldOworfQorCit2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6
aGlkZUhpZ2hsaWdodCgpCiB7Ci0gICAgaWYgKG1fd2luZG93Q29udHJvbGxlcikKLSAgICAgICAg
W1ttX3dpbmRvd0NvbnRyb2xsZXIuZ2V0KCkgd2ViVmlld10gY2xvc2VdOwotICAgIG1fd2luZG93
Q29udHJvbGxlci5hZG9wdE5TKFtbV2ViSW5zcGVjdG9yV2luZG93Q29udHJvbGxlciBhbGxvY10g
aW5pdFdpdGhJbnNwZWN0ZWRXZWJWaWV3Om1fd2ViVmlld10pOworICAgIFttX2hpZ2hsaWdodGVy
LmdldCgpIGhpZGVIaWdobGlnaHRdOworfQogCi0gICAgcmV0dXJuIGNvcmUoW21fd2luZG93Q29u
dHJvbGxlci5nZXQoKSB3ZWJWaWV3XSk7CitXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6V2Vi
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQoV2ViVmlldyogaW5zcGVjdGVkV2ViVmlldywgV2ViSW5z
cGVjdG9yV2luZG93Q29udHJvbGxlciogd2luZG93Q29udHJvbGxlciwgSW5zcGVjdG9yQ29udHJv
bGxlciogaW5zcGVjdG9yQ29udHJvbGxlciwgUGFnZSogZnJvbnRlbmRQYWdlKQorICAgIDogSW5z
cGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbChpbnNwZWN0b3JDb250cm9sbGVyLCAgZnJvbnRlbmRQ
YWdlKQorICAgICwgbV9pbnNwZWN0ZWRXZWJWaWV3KGluc3BlY3RlZFdlYlZpZXcpCisgICAgLCBt
X3dpbmRvd0NvbnRyb2xsZXIod2luZG93Q29udHJvbGxlcikKK3sKKyAgICBbd2luZG93Q29udHJv
bGxlciBzZXRGcm9udGVuZENsaWVudDp0aGlzXTsKIH0KIAotU3RyaW5nIFdlYkluc3BlY3RvckNs
aWVudDo6bG9jYWxpemVkU3RyaW5nc1VSTCgpCit2b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQ2xp
ZW50Ojpmcm9udGVuZExvYWRlZCgpCit7CisgICAgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2Nh
bDo6ZnJvbnRlbmRMb2FkZWQoKTsKKworICAgIFdlYkZyYW1lICpmcmFtZSA9IFttX2luc3BlY3Rl
ZFdlYlZpZXcgbWFpbkZyYW1lXTsKKyAgICAKKyAgICBXZWJGcmFtZUxvYWREZWxlZ2F0ZUltcGxl
bWVudGF0aW9uQ2FjaGUqIGltcGxlbWVudGF0aW9ucyA9IFdlYlZpZXdHZXRGcmFtZUxvYWREZWxl
Z2F0ZUltcGxlbWVudGF0aW9ucyhtX2luc3BlY3RlZFdlYlZpZXcpOworICAgIGlmIChpbXBsZW1l
bnRhdGlvbnMtPmRpZENsZWFySW5zcGVjdG9yV2luZG93T2JqZWN0Rm9yRnJhbWVGdW5jKQorICAg
ICAgICBDYWxsRnJhbWVMb2FkRGVsZWdhdGUoaW1wbGVtZW50YXRpb25zLT5kaWRDbGVhckluc3Bl
Y3RvcldpbmRvd09iamVjdEZvckZyYW1lRnVuYywgbV9pbnNwZWN0ZWRXZWJWaWV3LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQHNlbGVjdG9yKHdlYlZpZXc6ZGlkQ2xlYXJJbnNwZWN0
b3JXaW5kb3dPYmplY3Q6Zm9yRnJhbWU6KSwgW2ZyYW1lIHdpbmRvd09iamVjdF0sIGZyYW1lKTsK
KworICAgIGJvb2wgYXR0YWNoZWQgPSBbbV93aW5kb3dDb250cm9sbGVyLmdldCgpIGF0dGFjaGVk
XTsKKyAgICBzZXRBdHRhY2hlZFdpbmRvdyhhdHRhY2hlZCk7Cit9CisKK1N0cmluZyBXZWJJbnNw
ZWN0b3JGcm9udGVuZENsaWVudDo6bG9jYWxpemVkU3RyaW5nc1VSTCgpCiB7CiAgICAgTlNTdHJp
bmcgKnBhdGggPSBbW05TQnVuZGxlIGJ1bmRsZVdpdGhJZGVudGlmaWVyOkAiY29tLmFwcGxlLldl
YkNvcmUiXSBwYXRoRm9yUmVzb3VyY2U6QCJsb2NhbGl6ZWRTdHJpbmdzIiBvZlR5cGU6QCJqcyJd
OwogICAgIGlmIChwYXRoKQpAQCAtOTQsNyArMTQwLDcgQEAgU3RyaW5nIFdlYkluc3BlY3RvckNs
aWVudDo6bG9jYWxpemVkU3RyaW5nc1VSTCgpCiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCi1T
dHJpbmcgV2ViSW5zcGVjdG9yQ2xpZW50OjpoaWRkZW5QYW5lbHMoKQorU3RyaW5nIFdlYkluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50OjpoaWRkZW5QYW5lbHMoKQogewogICAgIE5TU3RyaW5nICpoaWRk
ZW5QYW5lbHMgPSBbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBzdHJpbmdG
b3JLZXk6QCJXZWJLaXRJbnNwZWN0b3JIaWRkZW5QYW5lbHMiXTsKICAgICBpZiAoaGlkZGVuUGFu
ZWxzKQpAQCAtMTAyLDYzICsxNDgsNDUgQEAgU3RyaW5nIFdlYkluc3BlY3RvckNsaWVudDo6aGlk
ZGVuUGFuZWxzKCkKICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKLXZvaWQgV2ViSW5zcGVjdG9y
Q2xpZW50OjpzaG93V2luZG93KCkKK3ZvaWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmJy
aW5nVG9Gcm9udCgpCiB7CiAgICAgdXBkYXRlV2luZG93VGl0bGUoKTsKICAgICBbbV93aW5kb3dD
b250cm9sbGVyLmdldCgpIHNob3dXaW5kb3c6bmlsXTsKIH0KIAotdm9pZCBXZWJJbnNwZWN0b3JD
bGllbnQ6OmNsb3NlV2luZG93KCkKK3ZvaWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmNs
b3NlV2luZG93KCkKIHsKLSAgICBbbV93aW5kb3dDb250cm9sbGVyLmdldCgpIGNsb3NlXTsKKyAg
ICBbbV93aW5kb3dDb250cm9sbGVyLmdldCgpIGRlc3Ryb3lJbnNwZWN0b3JWaWV3XTsKIH0KIAot
dm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmF0dGFjaFdpbmRvdygpCit2b2lkIFdlYkluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50OjphdHRhY2hXaW5kb3coKQogewogICAgIFttX3dpbmRvd0NvbnRyb2xs
ZXIuZ2V0KCkgYXR0YWNoXTsKKyAgICByZXN0b3JlQXR0YWNoZWRXaW5kb3dIZWlnaHQoKTsKIH0K
IAotdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmRldGFjaFdpbmRvdygpCit2b2lkIFdlYkluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50OjpkZXRhY2hXaW5kb3coKQogewogICAgIFttX3dpbmRvd0NvbnRy
b2xsZXIuZ2V0KCkgZGV0YWNoXTsKIH0KIAotdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OnNldEF0
dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkKK3ZvaWQgV2ViSW5zcGVjdG9yRnJv
bnRlbmRDbGllbnQ6OnNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkKIHsK
ICAgICBbbV93aW5kb3dDb250cm9sbGVyLmdldCgpIHNldEF0dGFjaGVkV2luZG93SGVpZ2h0Omhl
aWdodF07CiB9CiAKLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpoaWdobGlnaHQoTm9kZSogbm9k
ZSkKLXsKLSAgICBbbV93aW5kb3dDb250cm9sbGVyLmdldCgpIGhpZ2hsaWdodE5vZGU6a2l0KG5v
ZGUpXTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmhpZGVIaWdobGlnaHQoKQotewot
ICAgIFttX3dpbmRvd0NvbnRyb2xsZXIuZ2V0KCkgaGlkZUhpZ2hsaWdodF07Ci19Ci0KLXZvaWQg
V2ViSW5zcGVjdG9yQ2xpZW50OjppbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYgbmV3
VVJMKQordm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6aW5zcGVjdGVkVVJMQ2hhbmdl
ZChjb25zdCBTdHJpbmcmIG5ld1VSTCkKIHsKICAgICBtX2luc3BlY3RlZFVSTCA9IG5ld1VSTDsK
ICAgICB1cGRhdGVXaW5kb3dUaXRsZSgpOwogfQogCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6
dXBkYXRlV2luZG93VGl0bGUoKSBjb25zdAordm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVu
dDo6dXBkYXRlV2luZG93VGl0bGUoKSBjb25zdAogewogICAgIE5TU3RyaW5nICp0aXRsZSA9IFtO
U1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OlVJX1NUUklORygiV2ViIEluc3BlY3RvciDigJQgJUAi
LCAiV2ViIEluc3BlY3RvciB3aW5kb3cgdGl0bGUiKSwgKE5TU3RyaW5nICopbV9pbnNwZWN0ZWRV
UkxdOwogICAgIFtbbV93aW5kb3dDb250cm9sbGVyLmdldCgpIHdpbmRvd10gc2V0VGl0bGU6dGl0
bGVdOwogfQogCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6aW5zcGVjdG9yV2luZG93T2JqZWN0
Q2xlYXJlZCgpCi17Ci0gICAgV2ViRnJhbWUgKmZyYW1lID0gW21fd2ViVmlldyBtYWluRnJhbWVd
OwotICAgIAotICAgIFdlYkZyYW1lTG9hZERlbGVnYXRlSW1wbGVtZW50YXRpb25DYWNoZSogaW1w
bGVtZW50YXRpb25zID0gV2ViVmlld0dldEZyYW1lTG9hZERlbGVnYXRlSW1wbGVtZW50YXRpb25z
KG1fd2ViVmlldyk7Ci0gICAgaWYgKGltcGxlbWVudGF0aW9ucy0+ZGlkQ2xlYXJJbnNwZWN0b3JX
aW5kb3dPYmplY3RGb3JGcmFtZUZ1bmMpCi0gICAgICAgIENhbGxGcmFtZUxvYWREZWxlZ2F0ZShp
bXBsZW1lbnRhdGlvbnMtPmRpZENsZWFySW5zcGVjdG9yV2luZG93T2JqZWN0Rm9yRnJhbWVGdW5j
LCBtX3dlYlZpZXcsCi0gICAgICAgICAgQHNlbGVjdG9yKHdlYlZpZXc6ZGlkQ2xlYXJJbnNwZWN0
b3JXaW5kb3dPYmplY3Q6Zm9yRnJhbWU6KSwgW2ZyYW1lIHdpbmRvd09iamVjdF0sIGZyYW1lKTsK
LX0KIAogI3ByYWdtYSBtYXJrIC0KIApAQCAtMjIxLDE4ICsyNDksMTIgQEAgdm9pZCBXZWJJbnNw
ZWN0b3JDbGllbnQ6Omluc3BlY3RvcldpbmRvd09iamVjdENsZWFyZWQoKQogCiAtICh2b2lkKWRl
YWxsb2MKIHsKLSAgICBBU1NFUlQoIV9jdXJyZW50SGlnaGxpZ2h0KTsKICAgICBbX3dlYlZpZXcg
cmVsZWFzZV07CiAgICAgW3N1cGVyIGRlYWxsb2NdOwogfQogCiAjcHJhZ21hIG1hcmsgLQogCi0t
IChCT09MKWluc3BlY3RvclZpc2libGUKLXsKLSAgICByZXR1cm4gX3Zpc2libGU7Ci19Ci0KIC0g
KFdlYlZpZXcgKil3ZWJWaWV3CiB7CiAgICAgcmV0dXJuIF93ZWJWaWV3OwpAQCAtMjcxLDExICsy
OTMsNyBAQCB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6aW5zcGVjdG9yV2luZG93T2JqZWN0Q2xl
YXJlZCgpCiAKIC0gKEJPT0wpd2luZG93U2hvdWxkQ2xvc2U6KGlkKXNlbmRlcgogewotICAgIF92
aXNpYmxlID0gTk87Ci0KLSAgICBbX2luc3BlY3RlZFdlYlZpZXcgcGFnZV0tPmluc3BlY3RvckNv
bnRyb2xsZXIoKS0+c2V0V2luZG93VmlzaWJsZShmYWxzZSk7Ci0KLSAgICBbc2VsZiBoaWRlSGln
aGxpZ2h0XTsKKyAgICBbc2VsZiBkZXN0cm95SW5zcGVjdG9yVmlld107CiAKICAgICByZXR1cm4g
WUVTOwogfQpAQCAtMjg3LDExICszMDUsNiBAQCB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6aW5z
cGVjdG9yV2luZG93T2JqZWN0Q2xlYXJlZCgpCiAKICAgICBfdmlzaWJsZSA9IE5POwogCi0gICAg
aWYgKCFfbW92aW5nV2luZG93cykKLSAgICAgICAgW19pbnNwZWN0ZWRXZWJWaWV3IHBhZ2VdLT5p
bnNwZWN0b3JDb250cm9sbGVyKCktPnNldFdpbmRvd1Zpc2libGUoZmFsc2UpOwotCi0gICAgW3Nl
bGYgaGlkZUhpZ2hsaWdodF07Ci0KICAgICBpZiAoX2F0dGFjaGVkVG9JbnNwZWN0ZWRXZWJWaWV3
KSB7CiAgICAgICAgIGlmIChbX2luc3BlY3RlZFdlYlZpZXcgX2lzQ2xvc2VkXSkKICAgICAgICAg
ICAgIHJldHVybjsKQEAgLTMyOCw3ICszNDEsNyBAQCB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6
aW5zcGVjdG9yV2luZG93T2JqZWN0Q2xlYXJlZCgpCiAgICAgU3RyaW5nIHNob3VsZEF0dGFjaCA9
IFtfaW5zcGVjdGVkV2ViVmlldyBwYWdlXS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5zZXR0aW5n
KEluc3BlY3RvckNvbnRyb2xsZXI6Omluc3BlY3RvclN0YXJ0c0F0dGFjaGVkU2V0dGluZ05hbWUo
KSk7CiAgICAgX3Nob3VsZEF0dGFjaCA9IHNob3VsZEF0dGFjaCAhPSAiZmFsc2UiOwogICAgIAot
ICAgIGlmIChfc2hvdWxkQXR0YWNoICYmICFbX2luc3BlY3RlZFdlYlZpZXcgcGFnZV0tPmluc3Bl
Y3RvckNvbnRyb2xsZXIoKS0+Y2FuQXR0YWNoV2luZG93KCkpCisgICAgaWYgKF9zaG91bGRBdHRh
Y2ggJiYgIV9mcm9udGVuZENsaWVudC0+Y2FuQXR0YWNoV2luZG93KCkpCiAgICAgICAgIF9zaG91
bGRBdHRhY2ggPSBOTzsKIAogICAgIGlmIChfc2hvdWxkQXR0YWNoKSB7CkBAIC0zNTIsOCArMzY1
LDYgQEAgdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6Omluc3BlY3RvcldpbmRvd09iamVjdENsZWFy
ZWQoKQogCiAgICAgICAgIFtzdXBlciBzaG93V2luZG93Om5pbF07CiAgICAgfQotCi0gICAgW19p
bnNwZWN0ZWRXZWJWaWV3IHBhZ2VdLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnNldFdpbmRvd1Zp
c2libGUodHJ1ZSwgX3Nob3VsZEF0dGFjaCk7CiB9CiAKICNwcmFnbWEgbWFyayAtCkBAIC0zNjQs
MTIgKzM3NSw5IEBAIHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjppbnNwZWN0b3JXaW5kb3dPYmpl
Y3RDbGVhcmVkKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgW19pbnNwZWN0ZWRXZWJWaWV3IHBh
Z2VdLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnNldFNldHRpbmcoSW5zcGVjdG9yQ29udHJvbGxl
cjo6aW5zcGVjdG9yU3RhcnRzQXR0YWNoZWRTZXR0aW5nTmFtZSgpLCAidHJ1ZSIpOwotICAgIF9t
b3ZpbmdXaW5kb3dzID0gWUVTOwogCiAgICAgW3NlbGYgY2xvc2VdOwogICAgIFtzZWxmIHNob3dX
aW5kb3c6bmlsXTsKLQotICAgIF9tb3ZpbmdXaW5kb3dzID0gTk87CiB9CiAKIC0gKHZvaWQpZGV0
YWNoCkBAIC0zNzgsMTMgKzM4NiwxOSBAQCB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6aW5zcGVj
dG9yV2luZG93T2JqZWN0Q2xlYXJlZCgpCiAgICAgICAgIHJldHVybjsKIAogICAgIFtfaW5zcGVj
dGVkV2ViVmlldyBwYWdlXS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5zZXRTZXR0aW5nKEluc3Bl
Y3RvckNvbnRyb2xsZXI6Omluc3BlY3RvclN0YXJ0c0F0dGFjaGVkU2V0dGluZ05hbWUoKSwgImZh
bHNlIik7Ci0gICAgX21vdmluZ1dpbmRvd3MgPSBZRVM7CiAKICAgICBbc2VsZiBjbG9zZV07CiAg
ICAgW3NlbGYgc2hvd1dpbmRvdzpuaWxdOworfQogCi0gICAgX21vdmluZ1dpbmRvd3MgPSBOTzsK
Ky0gKEJPT0wpYXR0YWNoZWQKK3sKKyAgICByZXR1cm4gX2F0dGFjaGVkVG9JbnNwZWN0ZWRXZWJW
aWV3OworfQogCistICh2b2lkKXNldEZyb250ZW5kQ2xpZW50OihXZWJJbnNwZWN0b3JGcm9udGVu
ZENsaWVudCopZnJvbnRlbmRDbGllbnQKK3sKKyAgICBfZnJvbnRlbmRDbGllbnQgPSBmcm9udGVu
ZENsaWVudDsKIH0KIAogLSAodm9pZClzZXRBdHRhY2hlZFdpbmRvd0hlaWdodDoodW5zaWduZWQp
aGVpZ2h0CkBAIC00MDUsMjkgKzQxOSwxNyBAQCB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6aW5z
cGVjdG9yV2luZG93T2JqZWN0Q2xlYXJlZCgpCiAgICAgW2ZyYW1lVmlldyBzZXRGcmFtZTpmcmFt
ZVZpZXdSZWN0XTsKIH0KIAotI3ByYWdtYSBtYXJrIC0KLQotLSAodm9pZCloaWdobGlnaHROb2Rl
OihET01Ob2RlICopbm9kZQorLSAodm9pZClkZXN0cm95SW5zcGVjdG9yVmlldwogewotICAgIC8v
IFRoZSBzY3JvbGx2aWV3J3MgY29udGVudCB2aWV3IHN0YXlzIGFyb3VuZCBiZXR3ZWVuIHBhZ2Ug
bmF2aWdhdGlvbnMsIHNvIHRhcmdldCBpdAotICAgIE5TVmlldyAqdmlldyA9IFtbW1tbX2luc3Bl
Y3RlZFdlYlZpZXcgbWFpbkZyYW1lXSBmcmFtZVZpZXddIGRvY3VtZW50Vmlld10gZW5jbG9zaW5n
U2Nyb2xsVmlld10gY29udGVudFZpZXddOwotICAgIGlmICghW3ZpZXcgd2luZG93XSkKLSAgICAg
ICAgcmV0dXJuOyAvLyBza2lwIHRoZSBoaWdobGlnaHQgaWYgd2UgaGF2ZSBubyB3aW5kb3cgKGUu
Zy4gaGlkZGVuIHRhYikKLQotICAgIGlmICghX2N1cnJlbnRIaWdobGlnaHQpIHsKLSAgICAgICAg
X2N1cnJlbnRIaWdobGlnaHQgPSBbW1dlYk5vZGVIaWdobGlnaHQgYWxsb2NdIGluaXRXaXRoVGFy
Z2V0Vmlldzp2aWV3IGluc3BlY3RvckNvbnRyb2xsZXI6W19pbnNwZWN0ZWRXZWJWaWV3IHBhZ2Vd
LT5pbnNwZWN0b3JDb250cm9sbGVyKCldOwotICAgICAgICBbX2N1cnJlbnRIaWdobGlnaHQgc2V0
RGVsZWdhdGU6c2VsZl07Ci0gICAgICAgIFtfY3VycmVudEhpZ2hsaWdodCBhdHRhY2hdOwotICAg
IH0gZWxzZQotICAgICAgICBbW19jdXJyZW50SGlnaGxpZ2h0IGhpZ2hsaWdodFZpZXddIHNldE5l
ZWRzRGlzcGxheTpZRVNdOwotfQorICAgIGlmIChfZGVzdHJveWluZ0luc3BlY3RvclZpZXcpCisg
ICAgICAgIHJldHVybjsKKyAgICBfZGVzdHJveWluZ0luc3BlY3RvclZpZXcgPSBZRVM7CiAKLS0g
KHZvaWQpaGlkZUhpZ2hsaWdodAotewotICAgIFtfY3VycmVudEhpZ2hsaWdodCBkZXRhY2hdOwot
ICAgIFtfY3VycmVudEhpZ2hsaWdodCBzZXREZWxlZ2F0ZTpuaWxdOwotICAgIFtfY3VycmVudEhp
Z2hsaWdodCByZWxlYXNlXTsKLSAgICBfY3VycmVudEhpZ2hsaWdodCA9IG5pbDsKKyAgICBpZiAo
X2F0dGFjaGVkVG9JbnNwZWN0ZWRXZWJWaWV3KQorICAgICAgICBbc2VsZiBjbG9zZV07CisgICAg
X3Zpc2libGUgPSBOTzsKKyAgICBbX2luc3BlY3RlZFdlYlZpZXcgcGFnZV0tPmluc3BlY3RvckNv
bnRyb2xsZXIoKS0+Y2xvc2UoKTsKKyAgICBbX3dlYlZpZXcgY2xvc2VdOwogfQogCiAjcHJhZ21h
IG1hcmsgLQpAQCAtNDk3LDMgKzQ5OSw2MCBAQCB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6aW5z
cGVjdG9yV2luZG93T2JqZWN0Q2xlYXJlZCgpCiB9CiAKIEBlbmQKKworCisjcHJhZ21hIG1hcmsg
LQorCitAaW1wbGVtZW50YXRpb24gV2ViTm9kZUhpZ2hsaWdodGVyCistIChpZClpbml0V2l0aElu
c3BlY3RlZFdlYlZpZXc6KFdlYlZpZXcgKil3ZWJWaWV3Cit7CisgICAgLy8gRG9uJ3QgcmV0YWlu
IHRvIGF2b2lkIGEgY2lyY3VsYXIgcmVmZXJlbmNlCisgICAgX2luc3BlY3RlZFdlYlZpZXcgPSB3
ZWJWaWV3OworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBB
U1NFUlQoIV9jdXJyZW50SGlnaGxpZ2h0KTsKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKyNw
cmFnbWEgbWFyayAtCisKKy0gKHZvaWQpaGlnaGxpZ2h0Tm9kZTooRE9NTm9kZSAqKW5vZGUKK3sK
KyAgICAvLyBUaGUgc2Nyb2xsdmlldydzIGNvbnRlbnQgdmlldyBzdGF5cyBhcm91bmQgYmV0d2Vl
biBwYWdlIG5hdmlnYXRpb25zLCBzbyB0YXJnZXQgaXQKKyAgICBOU1ZpZXcgKnZpZXcgPSBbW1tb
W19pbnNwZWN0ZWRXZWJWaWV3IG1haW5GcmFtZV0gZnJhbWVWaWV3XSBkb2N1bWVudFZpZXddIGVu
Y2xvc2luZ1Njcm9sbFZpZXddIGNvbnRlbnRWaWV3XTsKKyAgICBpZiAoIVt2aWV3IHdpbmRvd10p
CisgICAgICAgIHJldHVybjsgLy8gc2tpcCB0aGUgaGlnaGxpZ2h0IGlmIHdlIGhhdmUgbm8gd2lu
ZG93IChlLmcuIGhpZGRlbiB0YWIpCisgICAgCisgICAgaWYgKCFfY3VycmVudEhpZ2hsaWdodCkg
eworICAgICAgICBfY3VycmVudEhpZ2hsaWdodCA9IFtbV2ViTm9kZUhpZ2hsaWdodCBhbGxvY10g
aW5pdFdpdGhUYXJnZXRWaWV3OnZpZXcgaW5zcGVjdG9yQ29udHJvbGxlcjpbX2luc3BlY3RlZFdl
YlZpZXcgcGFnZV0tPmluc3BlY3RvckNvbnRyb2xsZXIoKV07CisgICAgICAgIFtfY3VycmVudEhp
Z2hsaWdodCBzZXREZWxlZ2F0ZTpzZWxmXTsKKyAgICAgICAgW19jdXJyZW50SGlnaGxpZ2h0IGF0
dGFjaF07CisgICAgfSBlbHNlCisgICAgICAgIFtbX2N1cnJlbnRIaWdobGlnaHQgaGlnaGxpZ2h0
Vmlld10gc2V0TmVlZHNEaXNwbGF5OllFU107Cit9CisKKy0gKHZvaWQpaGlkZUhpZ2hsaWdodAor
eworICAgIFtfY3VycmVudEhpZ2hsaWdodCBkZXRhY2hdOworICAgIFtfY3VycmVudEhpZ2hsaWdo
dCBzZXREZWxlZ2F0ZTpuaWxdOworICAgIFtfY3VycmVudEhpZ2hsaWdodCByZWxlYXNlXTsKKyAg
ICBfY3VycmVudEhpZ2hsaWdodCA9IG5pbDsKK30KKworI3ByYWdtYSBtYXJrIC0KKyNwcmFnbWEg
bWFyayBXZWJOb2RlSGlnaGxpZ2h0IGRlbGVnYXRlCisKKy0gKHZvaWQpZGlkQXR0YWNoV2ViTm9k
ZUhpZ2hsaWdodDooV2ViTm9kZUhpZ2hsaWdodCAqKWhpZ2hsaWdodAoreworICAgIFtfaW5zcGVj
dGVkV2ViVmlldyBzZXRDdXJyZW50Tm9kZUhpZ2hsaWdodDpoaWdobGlnaHRdOworfQorCistICh2
b2lkKXdpbGxEZXRhY2hXZWJOb2RlSGlnaGxpZ2h0OihXZWJOb2RlSGlnaGxpZ2h0ICopaGlnaGxp
Z2h0Cit7CisgICAgW19pbnNwZWN0ZWRXZWJWaWV3IHNldEN1cnJlbnROb2RlSGlnaGxpZ2h0Om5p
bF07Cit9CisgICAgCitAZW5kCmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL1dlYkluc3BlY3Rvci9X
ZWJJbnNwZWN0b3IubW0gYi9XZWJLaXQvbWFjL1dlYkluc3BlY3Rvci9XZWJJbnNwZWN0b3IubW0K
aW5kZXggMjU4ZGQwMS4uOWIxNzQ1OSAxMDA2NDQKLS0tIGEvV2ViS2l0L21hYy9XZWJJbnNwZWN0
b3IvV2ViSW5zcGVjdG9yLm1tCisrKyBiL1dlYktpdC9tYWMvV2ViSW5zcGVjdG9yL1dlYkluc3Bl
Y3Rvci5tbQpAQCAtMTc1LDE0ICsxNzUsMTAgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAK
IC0gKHZvaWQpYXR0YWNoOihpZClzZW5kZXIKIHsKLSAgICBpZiAoUGFnZSogcGFnZSA9IGNvcmUo
X3dlYlZpZXcpKQotICAgICAgICBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmF0dGFjaFdp
bmRvdygpOwogfQogCiAtICh2b2lkKWRldGFjaDooaWQpc2VuZGVyCiB7Ci0gICAgaWYgKFBhZ2Uq
IHBhZ2UgPSBjb3JlKF93ZWJWaWV3KSkKLSAgICAgICAgcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxl
cigpLT5kZXRhY2hXaW5kb3coKTsKIH0KIAogLSAodm9pZClldmFsdWF0ZUluRnJvbnRlbmQ6KGlk
KXNlbmRlciBjYWxsSWQ6KGxvbmcpY2FsbElkIHNjcmlwdDooTlNTdHJpbmcgKilzY3JpcHQKZGlm
ZiAtLWdpdCBhL1dlYktpdC9xdC9BcGkvcXdlYmluc3BlY3Rvci5jcHAgYi9XZWJLaXQvcXQvQXBp
L3F3ZWJpbnNwZWN0b3IuY3BwCmluZGV4IGMzZWY1MzAuLmMwZTUyNzcgMTAwNjQ0Ci0tLSBhL1dl
YktpdC9xdC9BcGkvcXdlYmluc3BlY3Rvci5jcHAKKysrIGIvV2ViS2l0L3F0L0FwaS9xd2ViaW5z
cGVjdG9yLmNwcApAQCAtMTYxLDYgKzE2MSwxMCBAQCB2b2lkIFFXZWJJbnNwZWN0b3I6OnNob3dF
dmVudChRU2hvd0V2ZW50KiBldmVudCkKIC8qISBccmVpbXAgKi8KIHZvaWQgUVdlYkluc3BlY3Rv
cjo6aGlkZUV2ZW50KFFIaWRlRXZlbnQqIGV2ZW50KQogeworI2lmIEVOQUJMRShJTlNQRUNUT1Ip
CisgICAgaWYgKGQtPnBhZ2UpCisgICAgICAgIGQtPnBhZ2UtPmQtPmluc3BlY3RvckNvbnRyb2xs
ZXIoKS0+Y2xvc2UoKTsKKyNlbmRpZgogfQogCiAvKiEgXHJlaW1wICovCkBAIC0xNjgsNyArMTcy
LDcgQEAgdm9pZCBRV2ViSW5zcGVjdG9yOjpjbG9zZUV2ZW50KFFDbG9zZUV2ZW50KiBldmVudCkK
IHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAgIGlmIChkLT5wYWdlKQotICAgICAgICBkLT5w
YWdlLT5kLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnNldFdpbmRvd1Zpc2libGUoZmFsc2UpOwor
ICAgICAgICBkLT5wYWdlLT5kLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmNsb3NlKCk7CiAjZW5k
aWYKIH0KIApkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L0FwaS9xd2ViaW5zcGVjdG9yLmggYi9XZWJL
aXQvcXQvQXBpL3F3ZWJpbnNwZWN0b3IuaAppbmRleCA2Y2RhNDc5Li5mMTkyZTkyIDEwMDY0NAot
LS0gYS9XZWJLaXQvcXQvQXBpL3F3ZWJpbnNwZWN0b3IuaAorKysgYi9XZWJLaXQvcXQvQXBpL3F3
ZWJpbnNwZWN0b3IuaApAQCAtNTIsNSArNTIsNiBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFz
cyBRV2ViUGFnZTsKICAgICBmcmllbmQgY2xhc3MgUVdlYlBhZ2VQcml2YXRlOwogICAgIGZyaWVu
ZCBjbGFzcyBXZWJDb3JlOjpJbnNwZWN0b3JDbGllbnRRdDsKKyAgICBmcmllbmQgY2xhc3MgV2Vi
Q29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdDsKIH07CiAjZW5kaWYKZGlmZiAtLWdpdCBh
L1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuaCBiL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuaAppbmRl
eCA0NzY2Y2JkLi4wNzZmYjdjIDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmgK
KysrIGIvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5oCkBAIC01NCw2ICs1NCw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICBjbGFzcyBFZGl0b3JDbGllbnRRdDsKICAgICBjbGFzcyBGcmFtZUxv
YWRlckNsaWVudFF0OwogICAgIGNsYXNzIEluc3BlY3RvckNsaWVudFF0OworICAgIGNsYXNzIElu
c3BlY3RvckZyb250ZW5kQ2xpZW50UXQ7CiAgICAgY2xhc3MgUmVzb3VyY2VIYW5kbGU7CiAgICAg
Y2xhc3MgSGl0VGVzdFJlc3VsdDsKICAgICBjbGFzcyBRTmV0d29ya1JlcGx5SGFuZGxlcjsKQEAg
LTM2MSw2ICszNjIsNyBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBXZWJDb3JlOjpFZGl0
b3JDbGllbnRRdDsKICAgICBmcmllbmQgY2xhc3MgV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRR
dDsKICAgICBmcmllbmQgY2xhc3MgV2ViQ29yZTo6SW5zcGVjdG9yQ2xpZW50UXQ7CisgICAgZnJp
ZW5kIGNsYXNzIFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50UXQ7CiAgICAgZnJpZW5k
IGNsYXNzIFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOwogICAgIGZyaWVuZCBjbGFzcyBXZWJDb3Jl
OjpRTmV0d29ya1JlcGx5SGFuZGxlcjsKIH07CmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQ2hhbmdl
TG9nIGIvV2ViS2l0L3F0L0NoYW5nZUxvZwppbmRleCA0YzJmNGUxLi4zZDA3YTFmIDEwMDY0NAot
LS0gYS9XZWJLaXQvcXQvQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9xdC9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzMiBAQAorMjAxMC0wMy0xMSAgWXVyeSBTZW1pa2hhdHNreSA8eXVyeXNAY2hyb21pdW0u
b3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIElu
dHJvZHVjZSBJbnNwZWN0b3JGcm9udGVuZENsaWVudCB0aGF0IHByb3ZpZGVzIEluc3BlY3RvckZy
b250ZW5kIHdpdGggYW4gaW50ZXJmYWNlIHRvIHRoZSBlbWJlZGRlci4gSW5zcGVjdG9yQ2xpZW50
IG5vdyBzZXJ2ZXMgYXMgYSBkZWxlZ2F0ZSBmb3IgSW5zcGVjdG9yQ29udHJvbGxlciBhbmQgZG9l
cyBub3QgY29udGFpbiBtZXRob2RzIGZvciBtYW5hZ2luZyBpbnNwZWN0b3IgZnJvbnRlbmQgd2lu
ZG93LiBUaGF0IGFsbG93cyB0byBjcmVhdGUgcmVtb3RlIEluc3BlY3RvckZyb250ZW5kSG9zdC4K
KworICAgICAgICBJbnRyb2R1Y2UgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQgdGhhdCB3b3VsZCBw
cm92aWRlIEluc3BlY3RvckZyb250ZW5kIHdpdGggYW4gaW50ZXJmYWNlIHRvIHRoZSBlbWJlZGRl
cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzUwMzYK
KworICAgICAgICAqIEFwaS9xd2ViaW5zcGVjdG9yLmNwcDoKKyAgICAgICAgKFFXZWJJbnNwZWN0
b3I6OmhpZGVFdmVudCk6CisgICAgICAgIChRV2ViSW5zcGVjdG9yOjpjbG9zZUV2ZW50KToKKyAg
ICAgICAgKiBBcGkvcXdlYmluc3BlY3Rvci5oOgorICAgICAgICAqIEFwaS9xd2VicGFnZS5oOgor
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudFF0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckNsaWVudFF0OjpvcGVuSW5zcGVjdG9yRnJvbnRlbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdDo6SW5zcGVjdG9yRnJvbnRl
bmRDbGllbnRRdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0
Ojpmcm9udGVuZExvYWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENs
aWVudFF0Ojpsb2NhbGl6ZWRTdHJpbmdzVVJMKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50UXQ6OmhpZGRlblBhbmVscyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JGcm9udGVuZENsaWVudFF0OjpicmluZ1RvRnJvbnQpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdDo6Y2xvc2VXaW5kb3cpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdDo6YXR0YWNoV2luZG93KToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50UXQ6OmRldGFjaFdpbmRvdyk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0OjpzZXRBdHRhY2hlZFdpbmRvd0hl
aWdodCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0OjppbnNw
ZWN0ZWRVUkxDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xp
ZW50UXQ6OnVwZGF0ZVdpbmRvd1RpdGxlKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9JbnNw
ZWN0b3JDbGllbnRRdC5oOgorCiAyMDEwLTAzLTEwICBSb2JlcnQgSG9nYW4gIDxyb2JlcnRAd2Vi
a2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBIYXVzbWFubi4KZGlmZiAtLWdp
dCBhL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRRdC5jcHAgYi9XZWJL
aXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50UXQuY3BwCmluZGV4IGNkZTY0Yzgu
LmNhOWYxNzEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JD
bGllbnRRdC5jcHAKKysrIGIvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVu
dFF0LmNwcApAQCAtODEsMTUgKzgxLDEyIEBAIHZvaWQgSW5zcGVjdG9yQ2xpZW50UXQ6Omluc3Bl
Y3RvckRlc3Ryb3llZCgpCiAgICAgZGVsZXRlIHRoaXM7CiB9CiAKLVBhZ2UqIEluc3BlY3RvckNs
aWVudFF0OjpjcmVhdGVQYWdlKCkKLXsKLSAgICBRV2ViVmlldyogaW5zcGVjdG9yVmlldyA9IG1f
aW5zcGVjdG9yVmlldy5nZXQoKTsKLSAgICBpZiAoIWluc3BlY3RvclZpZXcpIHsKLSAgICAgICAg
aW5zcGVjdG9yVmlldyA9IG5ldyBRV2ViVmlldzsKLSAgICAgICAgSW5zcGVjdG9yQ2xpZW50V2Vi
UGFnZSogaW5zcGVjdG9yUGFnZSA9IG5ldyBJbnNwZWN0b3JDbGllbnRXZWJQYWdlKGluc3BlY3Rv
clZpZXcpOwotICAgICAgICBpbnNwZWN0b3JWaWV3LT5zZXRQYWdlKGluc3BlY3RvclBhZ2UpOwot
ICAgICAgICBtX2luc3BlY3RvclZpZXcuc2V0KGluc3BlY3RvclZpZXcpOwotICAgIH0KKyAgICAK
K3ZvaWQgSW5zcGVjdG9yQ2xpZW50UXQ6Om9wZW5JbnNwZWN0b3JGcm9udGVuZChXZWJDb3JlOjpJ
bnNwZWN0b3JDb250cm9sbGVyKikKK3sKKyAgICBRV2ViVmlldyogaW5zcGVjdG9yVmlldyA9IG5l
dyBRV2ViVmlldzsKKyAgICBJbnNwZWN0b3JDbGllbnRXZWJQYWdlKiBpbnNwZWN0b3JQYWdlID0g
bmV3IEluc3BlY3RvckNsaWVudFdlYlBhZ2UoaW5zcGVjdG9yVmlldyk7CisgICAgaW5zcGVjdG9y
Vmlldy0+c2V0UGFnZShpbnNwZWN0b3JQYWdlKTsKIAogICAgIFFVcmwgaW5zcGVjdG9yVXJsID0g
bV9pbnNwZWN0ZWRXZWJQYWdlLT5zZXR0aW5ncygpLT5pbnNwZWN0b3JVcmwoKTsKICAgICBpZiAo
IWluc3BlY3RvclVybC5pc1ZhbGlkKCkpCkBAIC05OCw1MCArOTUsNyBAQCBQYWdlKiBJbnNwZWN0
b3JDbGllbnRRdDo6Y3JlYXRlUGFnZSgpCiAgICAgbV9pbnNwZWN0ZWRXZWJQYWdlLT5kLT5pbnNw
ZWN0b3JGcm9udGVuZCA9IGluc3BlY3RvclZpZXc7CiAgICAgbV9pbnNwZWN0ZWRXZWJQYWdlLT5k
LT5nZXRPckNyZWF0ZUluc3BlY3RvcigpLT5kLT5zZXRGcm9udGVuZChpbnNwZWN0b3JWaWV3KTsK
IAotICAgIHJldHVybiBpbnNwZWN0b3JWaWV3LT5wYWdlKCktPmQtPnBhZ2U7Ci19Ci0KLVN0cmlu
ZyBJbnNwZWN0b3JDbGllbnRRdDo6bG9jYWxpemVkU3RyaW5nc1VSTCgpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBJbnNwZWN0b3JD
bGllbnRRdDo6aGlkZGVuUGFuZWxzKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJl
dHVybiBTdHJpbmcoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDbGllbnRRdDo6c2hvd1dpbmRvdygp
Ci17Ci0gICAgdXBkYXRlV2luZG93VGl0bGUoKTsKLQotI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0g
ICAgbV9pbnNwZWN0ZWRXZWJQYWdlLT5kLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnNldFdpbmRv
d1Zpc2libGUodHJ1ZSwgdHJ1ZSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBJbnNwZWN0b3JDbGllbnRR
dDo6Y2xvc2VXaW5kb3coKQotewotI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgbV9pbnNwZWN0
ZWRXZWJQYWdlLT5kLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnNldFdpbmRvd1Zpc2libGUoZmFs
c2UpOwotI2VuZGlmCi19Ci0KLXZvaWQgSW5zcGVjdG9yQ2xpZW50UXQ6OmF0dGFjaFdpbmRvdygp
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDbGllbnRRdDo6
ZGV0YWNoV2luZG93KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEluc3Bl
Y3RvckNsaWVudFF0OjpzZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCkKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIGluc3BlY3RvclZpZXctPnBhZ2UoKS0+ZC0+cGFnZS0+aW5z
cGVjdG9yQ29udHJvbGxlcigpLT5zZXRJbnNwZWN0b3JGcm9udGVuZENsaWVudChuZXcgSW5zcGVj
dG9yRnJvbnRlbmRDbGllbnRRdChtX2luc3BlY3RlZFdlYlBhZ2UsIGluc3BlY3RvclZpZXcpKTsK
IH0KIAogdm9pZCBJbnNwZWN0b3JDbGllbnRRdDo6aGlnaGxpZ2h0KE5vZGUqKQpAQCAtMTU0LDI1
ICsxMDgsNiBAQCB2b2lkIEluc3BlY3RvckNsaWVudFF0OjpoaWRlSGlnaGxpZ2h0KCkKICAgICBu
b3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIEluc3BlY3RvckNsaWVudFF0OjppbnNwZWN0ZWRV
UkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYgbmV3VVJMKQotewotICAgIG1faW5zcGVjdGVkVVJMID0g
bmV3VVJMOwotICAgIHVwZGF0ZVdpbmRvd1RpdGxlKCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ2xp
ZW50UXQ6Omluc3BlY3RvcldpbmRvd09iamVjdENsZWFyZWQoKQotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ2xpZW50UXQ6OnVwZGF0ZVdpbmRvd1RpdGxlKCkK
LXsKLSAgICBpZiAobV9pbnNwZWN0ZWRXZWJQYWdlLT5kLT5pbnNwZWN0b3IpIHsKLSAgICAgICAg
UVN0cmluZyBjYXB0aW9uID0gUUNvcmVBcHBsaWNhdGlvbjo6dHJhbnNsYXRlKCJRV2ViUGFnZSIs
ICJXZWIgSW5zcGVjdG9yIC0gJTIiKS5hcmcobV9pbnNwZWN0ZWRVUkwpOwotICAgICAgICBtX2lu
c3BlY3RlZFdlYlBhZ2UtPmQtPmluc3BlY3Rvci0+c2V0V2luZG93VGl0bGUoY2FwdGlvbik7Ci0g
ICAgfQotfQotCiB2b2lkIEluc3BlY3RvckNsaWVudFF0Ojpwb3B1bGF0ZVNldHRpbmcoY29uc3Qg
U3RyaW5nJiBrZXksIFN0cmluZyogc2V0dGluZykKIHsKICAgICBRU2V0dGluZ3MgcXNldHRpbmdz
OwpAQCAtMjI2LDYgKzE2MSw4MSBAQCBzdGF0aWMgUVZhcmlhbnQgc2V0dGluZ1RvVmFyaWFudChj
b25zdCBTdHJpbmcmIHNldHRpbmcpCiAgICAgcmV0dXJuIHJldFZhbDsKIH0KIAorSW5zcGVjdG9y
RnJvbnRlbmRDbGllbnRRdDo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdChRV2ViUGFnZSogaW5z
cGVjdGVkV2ViUGFnZSwgUGFzc093blB0cjxRV2ViVmlldz4gaW5zcGVjdG9yVmlldykKKyAgICA6
IEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwoaW5zcGVjdGVkV2ViUGFnZS0+ZC0+cGFnZS0+
aW5zcGVjdG9yQ29udHJvbGxlcigpLCBpbnNwZWN0b3JWaWV3LT5wYWdlKCktPmQtPnBhZ2UpIAor
ICAgICwgbV9pbnNwZWN0ZWRXZWJQYWdlKGluc3BlY3RlZFdlYlBhZ2UpCisgICAgLCBtX2luc3Bl
Y3RvclZpZXcoaW5zcGVjdG9yVmlldykKKyAgICAsIG1fZGVzdHJveWluZ0luc3BlY3RvclZpZXco
ZmFsc2UpCit7Cit9CisKK3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdDo6ZnJvbnRlbmRM
b2FkZWQoKQoreworICAgIEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OmZyb250ZW5kTG9h
ZGVkKCk7CisgICAgc2V0QXR0YWNoZWRXaW5kb3codHJ1ZSk7Cit9CisKK1N0cmluZyBJbnNwZWN0
b3JGcm9udGVuZENsaWVudFF0Ojpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworU3RyaW5nIEluc3BlY3RvckZy
b250ZW5kQ2xpZW50UXQ6OmhpZGRlblBhbmVscygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRR
dDo6YnJpbmdUb0Zyb250KCkKK3sKKyAgICB1cGRhdGVXaW5kb3dUaXRsZSgpOworfQorCit2b2lk
IEluc3BlY3RvckZyb250ZW5kQ2xpZW50UXQ6OmNsb3NlV2luZG93KCkKK3sKKyAgICBpZiAobV9k
ZXN0cm95aW5nSW5zcGVjdG9yVmlldykKKyAgICAgICAgcmV0dXJuOworICAgIG1fZGVzdHJveWlu
Z0luc3BlY3RvclZpZXcgPSB0cnVlOworCisgICAgLy8gQ2xlYXIgcmVmZXJlbmNlIGZyb20gUVdl
Ykluc3BlY3RvciB0byB0aGUgZnJvbnRlbmQgdmlldy4KKyAgICBtX2luc3BlY3RlZFdlYlBhZ2Ut
PmQtPmdldE9yQ3JlYXRlSW5zcGVjdG9yKCktPmQtPnNldEZyb250ZW5kKDApOworI2lmIEVOQUJM
RShJTlNQRUNUT1IpCisgICAgbV9pbnNwZWN0ZWRXZWJQYWdlLT5kLT5pbnNwZWN0b3JDb250cm9s
bGVyKCktPmNsb3NlKCk7CisjZW5kaWYKKyAgICAvLyBDbGVhciBwb2ludGVyIGJlZm9yZSBkZWxl
dGluZyBXZWJWaWV3IHRvIGF2b2lkIHJlY3Vyc2l2ZSBjYWxscyB0byBpdHMgZGVzdHJ1Y3Rvci4K
KyAgICBkZWxldGUgbV9pbnNwZWN0b3JWaWV3LnJlbGVhc2UoKTsKK30KKwordm9pZCBJbnNwZWN0
b3JGcm9udGVuZENsaWVudFF0OjphdHRhY2hXaW5kb3coKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdDo6ZGV0YWNoV2luZG93KCkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEluc3BlY3RvckZyb250ZW5kQ2xp
ZW50UXQ6OnNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdDo6aW5zcGVjdGVk
VVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIG5ld1VSTCkKK3sKKyAgICBtX2luc3BlY3RlZFVSTCA9
IG5ld1VSTDsKKyAgICB1cGRhdGVXaW5kb3dUaXRsZSgpOworfQorCit2b2lkIEluc3BlY3RvckZy
b250ZW5kQ2xpZW50UXQ6OnVwZGF0ZVdpbmRvd1RpdGxlKCkKK3sKKyAgICBpZiAobV9pbnNwZWN0
ZWRXZWJQYWdlLT5kLT5pbnNwZWN0b3IpIHsKKyAgICAgICAgUVN0cmluZyBjYXB0aW9uID0gUUNv
cmVBcHBsaWNhdGlvbjo6dHJhbnNsYXRlKCJRV2ViUGFnZSIsICJXZWIgSW5zcGVjdG9yIC0gJTIi
KS5hcmcobV9pbnNwZWN0ZWRVUkwpOworICAgICAgICBtX2luc3BlY3RlZFdlYlBhZ2UtPmQtPmlu
c3BlY3Rvci0+c2V0V2luZG93VGl0bGUoY2FwdGlvbik7CisgICAgfQorfQorCiB9CiAKICNpbmNs
dWRlICJJbnNwZWN0b3JDbGllbnRRdC5tb2MiCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvV2ViQ29y
ZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50UXQuaCBiL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9J
bnNwZWN0b3JDbGllbnRRdC5oCmluZGV4IGM5NTQ4YjAuLjRiZWFkYWIgMTAwNjQ0Ci0tLSBhL1dl
YktpdC9xdC9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRRdC5oCisrKyBiL1dlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRRdC5oCkBAIC0zMSw3ICszMSw5IEBACiAj
ZGVmaW5lIEluc3BlY3RvckNsaWVudFF0X2gKIAogI2luY2x1ZGUgIkluc3BlY3RvckNsaWVudC5o
IgorI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuaCIKICNpbmNsdWRlICJP
d25QdHIuaCIKKyNpbmNsdWRlICJQYXNzT3duUHRyLmgiCiAjaW5jbHVkZSA8UXRDb3JlL1FTdHJp
bmc+CiAKIGNsYXNzIFFXZWJQYWdlOwpAQCAtNDgsMTMgKzUwLDI5IEBAIHB1YmxpYzoKIAogICAg
IHZpcnR1YWwgdm9pZCBpbnNwZWN0b3JEZXN0cm95ZWQoKTsKIAotICAgIHZpcnR1YWwgUGFnZSog
Y3JlYXRlUGFnZSgpOworICAgIHZpcnR1YWwgdm9pZCBvcGVuSW5zcGVjdG9yRnJvbnRlbmQoV2Vi
Q29yZTo6SW5zcGVjdG9yQ29udHJvbGxlciopOworCisgICAgdmlydHVhbCB2b2lkIGhpZ2hsaWdo
dChOb2RlKik7CisgICAgdmlydHVhbCB2b2lkIGhpZGVIaWdobGlnaHQoKTsKKworICAgIHZpcnR1
YWwgdm9pZCBwb3B1bGF0ZVNldHRpbmcoY29uc3QgU3RyaW5nJiBrZXksIFN0cmluZyogdmFsdWUp
OworICAgIHZpcnR1YWwgdm9pZCBzdG9yZVNldHRpbmcoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0
IFN0cmluZyYgdmFsdWUpOworCitwcml2YXRlOgorICAgIFFXZWJQYWdlKiBtX2luc3BlY3RlZFdl
YlBhZ2U7Cit9OworCitjbGFzcyBJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0IDogcHVibGljIElu
c3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwgeworcHVibGljOgorICAgIEluc3BlY3RvckZyb250
ZW5kQ2xpZW50UXQoUVdlYlBhZ2UqIGluc3BlY3RlZFdlYlBhZ2UsIFBhc3NPd25QdHI8UVdlYlZp
ZXc+IGluc3BlY3RvclZpZXcpOworCisgICAgdmlydHVhbCB2b2lkIGZyb250ZW5kTG9hZGVkKCk7
CiAKICAgICB2aXJ0dWFsIFN0cmluZyBsb2NhbGl6ZWRTdHJpbmdzVVJMKCk7CiAKICAgICB2aXJ0
dWFsIFN0cmluZyBoaWRkZW5QYW5lbHMoKTsKIAotICAgIHZpcnR1YWwgdm9pZCBzaG93V2luZG93
KCk7CisgICAgdmlydHVhbCB2b2lkIGJyaW5nVG9Gcm9udCgpOwogICAgIHZpcnR1YWwgdm9pZCBj
bG9zZVdpbmRvdygpOwogCiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaFdpbmRvdygpOwpAQCAtNjIs
MjAgKzgwLDE0IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRBdHRhY2hlZFdpbmRv
d0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpOwogCi0gICAgdmlydHVhbCB2b2lkIGhpZ2hsaWdodChO
b2RlKik7Ci0gICAgdmlydHVhbCB2b2lkIGhpZGVIaWdobGlnaHQoKTsKICAgICB2aXJ0dWFsIHZv
aWQgaW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIG5ld1VSTCk7CiAKLSAgICB2aXJ0
dWFsIHZvaWQgcG9wdWxhdGVTZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5LCBTdHJpbmcqIHZhbHVl
KTsKLSAgICB2aXJ0dWFsIHZvaWQgc3RvcmVTZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5LCBjb25z
dCBTdHJpbmcmIHZhbHVlKTsKLQotICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0b3JXaW5kb3dPYmpl
Y3RDbGVhcmVkKCk7Ci0KIHByaXZhdGU6CiAgICAgdm9pZCB1cGRhdGVXaW5kb3dUaXRsZSgpOwog
ICAgIFFXZWJQYWdlKiBtX2luc3BlY3RlZFdlYlBhZ2U7CiAgICAgT3duUHRyPFFXZWJWaWV3PiBt
X2luc3BlY3RvclZpZXc7CiAgICAgUVN0cmluZyBtX2luc3BlY3RlZFVSTDsKKyAgICBib29sIG1f
ZGVzdHJveWluZ0luc3BlY3RvclZpZXc7CiB9OwogfQogCmRpZmYgLS1naXQgYS9XZWJLaXQvd2lu
L0NoYW5nZUxvZyBiL1dlYktpdC93aW4vQ2hhbmdlTG9nCmluZGV4IGM5MjdkMmEuLjZiZTQ1MWEg
MTAwNjQ0Ci0tLSBhL1dlYktpdC93aW4vQ2hhbmdlTG9nCisrKyBiL1dlYktpdC93aW4vQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsNDcgQEAKKzIwMTAtMDMtMTEgIFl1cnkgU2VtaWtoYXRza3kgPHl1cnlz
QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBJbnRyb2R1Y2UgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQgdGhhdCBwcm92aWRlcyBJ
bnNwZWN0b3JGcm9udGVuZCB3aXRoIGFuIGludGVyZmFjZSB0byB0aGUgZW1iZWRkZXIuIEluc3Bl
Y3RvckNsaWVudCBub3cgc2VydmVzIGFzIGEgZGVsZWdhdGUgZm9yIEluc3BlY3RvckNvbnRyb2xs
ZXIgYW5kIGRvZXMgbm90IGNvbnRhaW4gbWV0aG9kcyBmb3IgbWFuYWdpbmcgaW5zcGVjdG9yIGZy
b250ZW5kIHdpbmRvdy4gVGhhdCBhbGxvd3MgdG8gY3JlYXRlIHJlbW90ZSBJbnNwZWN0b3JGcm9u
dGVuZEhvc3QuCisKKyAgICAgICAgSW50cm9kdWNlIEluc3BlY3RvckZyb250ZW5kQ2xpZW50IHRo
YXQgd291bGQgcHJvdmlkZSBJbnNwZWN0b3JGcm9udGVuZCB3aXRoIGFuIGludGVyZmFjZSB0byB0
aGUgZW1iZWRkZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTM1MDM2CisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQu
Y3BwOgorICAgICAgICAoV2ViSW5zcGVjdG9yQ2xpZW50OjpXZWJJbnNwZWN0b3JDbGllbnQpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yQ2xpZW50Ojp+V2ViSW5zcGVjdG9yQ2xpZW50KToKKyAgICAg
ICAgKFdlYkluc3BlY3RvckNsaWVudDo6b3Blbkluc3BlY3RvckZyb250ZW5kKToKKyAgICAgICAg
KFdlYkluc3BlY3RvckNsaWVudDo6aGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYkluc3BlY3RvckNs
aWVudDo6aGlkZUhpZ2hsaWdodCk6CisgICAgICAgIChXZWJJbnNwZWN0b3JDbGllbnQ6OnVwZGF0
ZUhpZ2hsaWdodCk6CisgICAgICAgIChXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6V2ViSW5z
cGVjdG9yRnJvbnRlbmRDbGllbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGll
bnQ6On5XZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudCk6CisgICAgICAgIChXZWJJbnNwZWN0b3JG
cm9udGVuZENsaWVudDo6ZnJvbnRlbmRMb2FkZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJv
bnRlbmRDbGllbnQ6OmxvY2FsaXplZFN0cmluZ3NVUkwpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
RnJvbnRlbmRDbGllbnQ6OmhpZGRlblBhbmVscyk6CisgICAgICAgIChXZWJJbnNwZWN0b3JGcm9u
dGVuZENsaWVudDo6YnJpbmdUb0Zyb250KToKKyAgICAgICAgKFdlYkluc3BlY3RvckZyb250ZW5k
Q2xpZW50OjpjbG9zZVdpbmRvdyk6CisgICAgICAgIChXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVu
dDo6YXR0YWNoV2luZG93KToKKyAgICAgICAgKFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50Ojpk
ZXRhY2hXaW5kb3cpOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OnNldEF0
dGFjaGVkV2luZG93SGVpZ2h0KToKKyAgICAgICAgKFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50
OjppbnNwZWN0ZWRVUkxDaGFuZ2VkKToKKyAgICAgICAgKFdlYkluc3BlY3RvckZyb250ZW5kQ2xp
ZW50OjpjbG9zZVdpbmRvd1dpdGhvdXROb3RpZmljYXRpb25zKToKKyAgICAgICAgKFdlYkluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50OjpzaG93V2luZG93V2l0aG91dE5vdGlmaWNhdGlvbnMpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmRlc3Ryb3lJbnNwZWN0b3JWaWV3KToK
KyAgICAgICAgKFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50Ojp1cGRhdGVXaW5kb3dUaXRsZSk6
CisgICAgICAgIChXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6b25HZXRNaW5NYXhJbmZvKToK
KyAgICAgICAgKFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpvblNpemUpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6Om9uQ2xvc2UpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yRnJvbnRlbmRDbGllbnQ6Om9uU2V0Rm9jdXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJv
bnRlbmRDbGllbnQ6Om9uV2ViVmlld1dpbmRvd1Bvc0NoYW5naW5nKToKKyAgICAgICAgKFdlYklu
c3BlY3RvclduZFByb2MpOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6Ondp
bmRvd1JlY2VpdmVkTWVzc2FnZSk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVj
dG9yQ2xpZW50Lmg6CisgICAgICAgIChXZWJJbnNwZWN0b3JDbGllbnQ6OmZyb250ZW5kQ2xvc2lu
Zyk6CisgICAgICAgICogV2ViSW5zcGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkluc3BlY3Rvcjo6
YXR0YWNoKToKKyAgICAgICAgKFdlYkluc3BlY3Rvcjo6ZGV0YWNoKToKKwogMjAxMC0wMy0xMCAg
RXJpYyBVaHJoYW5lICA8ZXJpY3VAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IERhdmlkIExldmluLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJJ
bnNwZWN0b3JDbGllbnQuY3BwIGIvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0
b3JDbGllbnQuY3BwCmluZGV4IDZhMTBjMGQuLjVhZGJmZGYgMTAwNjQ0Ci0tLSBhL1dlYktpdC93
aW4vV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcAorKysgYi9XZWJLaXQvd2lu
L1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5jcHAKQEAgLTY5LDI1ICs2OSwxMyBA
QCBzdGF0aWMgQ0ZCdW5kbGVSZWYgZ2V0V2ViS2l0QnVuZGxlKCkKIAogV2ViSW5zcGVjdG9yQ2xp
ZW50OjpXZWJJbnNwZWN0b3JDbGllbnQoV2ViVmlldyogd2ViVmlldykKICAgICA6IG1faW5zcGVj
dGVkV2ViVmlldyh3ZWJWaWV3KQotICAgICwgbV9od25kKDApCi0gICAgLCBtX3dlYlZpZXdId25k
KDApCi0gICAgLCBtX3Nob3VsZEF0dGFjaFdoZW5TaG93bihmYWxzZSkKLSAgICAsIG1fYXR0YWNo
ZWQoZmFsc2UpCiB7CiAgICAgQVNTRVJUKG1faW5zcGVjdGVkV2ViVmlldyk7Ci0KICAgICBtX2lu
c3BlY3RlZFdlYlZpZXctPnZpZXdXaW5kb3coKE9MRV9IQU5ETEUqKSZtX2luc3BlY3RlZFdlYlZp
ZXdId25kKTsKLQotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgd2luZG93IHNpemUvcG9zaXRpb24g
c2F2ZS9yZXN0b3JlCi0jaWYgMAotICAgIFtzZWxmIHNldFdpbmRvd0ZyYW1lQXV0b3NhdmVOYW1l
OkAiV2ViIEluc3BlY3RvciJdOwotI2VuZGlmCiB9CiAKIFdlYkluc3BlY3RvckNsaWVudDo6fldl
Ykluc3BlY3RvckNsaWVudCgpCiB7Ci0gICAgaWYgKG1faHduZCkKLSAgICAgICAgOjpEZXN0cm95
V2luZG93KG1faHduZCk7CiB9CiAKIHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjppbnNwZWN0b3JE
ZXN0cm95ZWQoKQpAQCAtOTUsMzUgKzgzLDMwIEBAIHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50Ojpp
bnNwZWN0b3JEZXN0cm95ZWQoKQogICAgIGRlbGV0ZSB0aGlzOwogfQogCi1QYWdlKiBXZWJJbnNw
ZWN0b3JDbGllbnQ6OmNyZWF0ZVBhZ2UoKQordm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6Om9wZW5J
bnNwZWN0b3JGcm9udGVuZChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVy
KQogewogICAgIHJlZ2lzdGVyV2luZG93Q2xhc3MoKTsKIAotICAgIGlmIChtX2h3bmQpCi0gICAg
ICAgIDo6RGVzdHJveVdpbmRvdyhtX2h3bmQpOwotCi0gICAgbV9od25kID0gOjpDcmVhdGVXaW5k
b3dFeCgwLCBrV2ViSW5zcGVjdG9yV2luZG93Q2xhc3NOYW1lLCAwLCBXU19PVkVSTEFQUEVEV0lO
RE9XLAorICAgIEhXTkQgZnJvbnRlbmRId25kID0gOjpDcmVhdGVXaW5kb3dFeCgwLCBrV2ViSW5z
cGVjdG9yV2luZG93Q2xhc3NOYW1lLCAwLCBXU19PVkVSTEFQUEVEV0lORE9XLAogICAgICAgICBk
ZWZhdWx0V2luZG93UmVjdCgpLngoKSwgZGVmYXVsdFdpbmRvd1JlY3QoKS55KCksIGRlZmF1bHRX
aW5kb3dSZWN0KCkud2lkdGgoKSwgZGVmYXVsdFdpbmRvd1JlY3QoKS5oZWlnaHQoKSwKICAgICAg
ICAgMCwgMCwgMCwgMCk7CiAKLSAgICBpZiAoIW1faHduZCkKLSAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICA6OlNldFByb3AobV9od25kLCBrV2ViSW5zcGVjdG9yUG9pbnRlclByb3AsIHJlaW50ZXJw
cmV0X2Nhc3Q8SEFORExFPih0aGlzKSk7CisgICAgaWYgKCFmcm9udGVuZEh3bmQpCisgICAgICAg
IHJldHVybjsKIAotICAgIG1fd2ViVmlldy5hZG9wdFJlZihXZWJWaWV3OjpjcmVhdGVJbnN0YW5j
ZSgpKTsKKyAgICBDT01QdHI8V2ViVmlldz4gZnJvbnRlbmRXZWJWaWV3KEFkb3B0Q09NLCBXZWJW
aWV3OjpjcmVhdGVJbnN0YW5jZSgpKTsKIAotICAgIGlmIChGQUlMRUQobV93ZWJWaWV3LT5zZXRI
b3N0V2luZG93KChPTEVfSEFORExFKShVTE9ORzY0KW1faHduZCkpKQotICAgICAgICByZXR1cm4g
MDsKKyAgICBpZiAoRkFJTEVEKGZyb250ZW5kV2ViVmlldy0+c2V0SG9zdFdpbmRvdygoT0xFX0hB
TkRMRSkoVUxPTkc2NClmcm9udGVuZEh3bmQpKSkKKyAgICAgICAgcmV0dXJuOwogCiAgICAgUkVD
VCByZWN0OwotICAgIEdldENsaWVudFJlY3QobV9od25kLCAmcmVjdCk7Ci0gICAgaWYgKEZBSUxF
RChtX3dlYlZpZXctPmluaXRXaXRoRnJhbWUocmVjdCwgMCwgMCkpKQotICAgICAgICByZXR1cm4g
MDsKKyAgICBHZXRDbGllbnRSZWN0KGZyb250ZW5kSHduZCwgJnJlY3QpOworICAgIGlmIChGQUlM
RUQoZnJvbnRlbmRXZWJWaWV3LT5pbml0V2l0aEZyYW1lKHJlY3QsIDAsIDApKSkKKyAgICAgICAg
cmV0dXJuOwogCiAgICAgQ09NUHRyPFdlYkluc3BlY3RvckRlbGVnYXRlPiBkZWxlZ2F0ZShBZG9w
dENPTSwgV2ViSW5zcGVjdG9yRGVsZWdhdGU6OmNyZWF0ZUluc3RhbmNlKCkpOwotICAgIGlmIChG
QUlMRUQobV93ZWJWaWV3LT5zZXRVSURlbGVnYXRlKGRlbGVnYXRlLmdldCgpKSkpCi0gICAgICAg
IHJldHVybiAwOworICAgIGlmIChGQUlMRUQoZnJvbnRlbmRXZWJWaWV3LT5zZXRVSURlbGVnYXRl
KGRlbGVnYXRlLmdldCgpKSkpCisgICAgICAgIHJldHVybjsKIAogICAgIC8vIEtlZXAgcHJlZmVy
ZW5jZXMgc2VwYXJhdGUgZnJvbSB0aGUgcmVzdCBvZiB0aGUgY2xpZW50LCBtYWtpbmcgc3VyZSB3
ZSBhcmUgdXNpbmcgZXhwZWN0ZWQgcHJlZmVyZW5jZSB2YWx1ZXMuCiAgICAgLy8gT25lIHJlYXNv
biB0aGlzIGlzIGdvb2QgaXMgdGhhdCBpdCBrZWVwcyB0aGUgaW5zcGVjdG9yIG91dCBvZiBoaXN0
b3J5IHZpYSAicHJpdmF0ZSBicm93c2luZyIuCkBAIC0xMzQsNjYgKzExNywxMjYgQEAgUGFnZSog
V2ViSW5zcGVjdG9yQ2xpZW50OjpjcmVhdGVQYWdlKCkKICAgICBDT01QdHI8V2ViUHJlZmVyZW5j
ZXM+IHRlbXBQcmVmZXJlbmNlcyhBZG9wdENPTSwgV2ViUHJlZmVyZW5jZXM6OmNyZWF0ZUluc3Rh
bmNlKCkpOwogICAgIENPTVB0cjxJV2ViUHJlZmVyZW5jZXM+IGlQcmVmZXJlbmNlczsKICAgICBp
ZiAoRkFJTEVEKHRlbXBQcmVmZXJlbmNlcy0+aW5pdFdpdGhJZGVudGlmaWVyKEJTdHJpbmcoTCJX
ZWJJbnNwZWN0b3JQcmVmZXJlbmNlcyIpLCAmaVByZWZlcmVuY2VzKSkpCi0gICAgICAgIHJldHVy
biAwOworICAgICAgICByZXR1cm47CiAgICAgQ09NUHRyPFdlYlByZWZlcmVuY2VzPiBwcmVmZXJl
bmNlcyhRdWVyeSwgaVByZWZlcmVuY2VzKTsKICAgICBpZiAoIXByZWZlcmVuY2VzKQotICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuOwogICAgIGlmIChGQUlMRUQocHJlZmVyZW5jZXMt
PnNldEF1dG9zYXZlcyhGQUxTRSkpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJu
OwogICAgIGlmIChGQUlMRUQocHJlZmVyZW5jZXMtPnNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQo
VFJVRSkpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuOwogICAgIGlmIChGQUlM
RUQocHJlZmVyZW5jZXMtPnNldExvYWRzSW1hZ2VzQXV0b21hdGljYWxseShUUlVFKSkpCi0gICAg
ICAgIHJldHVybiAwOworICAgICAgICByZXR1cm47CiAgICAgaWYgKEZBSUxFRChwcmVmZXJlbmNl
cy0+c2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQoVFJVRSkpKQotICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgcmV0dXJuOwogICAgIGlmIChGQUlMRUQocHJlZmVyZW5jZXMtPnNldEFsbG93
c0FuaW1hdGVkSW1hZ2VzKFRSVUUpKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVy
bjsKICAgICBpZiAoRkFJTEVEKHByZWZlcmVuY2VzLT5zZXRMb2Fkc0ltYWdlc0F1dG9tYXRpY2Fs
bHkoVFJVRSkpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuOwogICAgIGlmIChG
QUlMRUQocHJlZmVyZW5jZXMtPnNldFBsdWdJbnNFbmFibGVkKEZBTFNFKSkpCi0gICAgICAgIHJl
dHVybiAwOworICAgICAgICByZXR1cm47CiAgICAgaWYgKEZBSUxFRChwcmVmZXJlbmNlcy0+c2V0
SmF2YUVuYWJsZWQoRkFMU0UpKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybjsK
ICAgICBpZiAoRkFJTEVEKHByZWZlcmVuY2VzLT5zZXRVc2VyU3R5bGVTaGVldEVuYWJsZWQoRkFM
U0UpKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybjsKICAgICBpZiAoRkFJTEVE
KHByZWZlcmVuY2VzLT5zZXRUYWJzVG9MaW5rcyhGQUxTRSkpKQotICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgcmV0dXJuOwogICAgIGlmIChGQUlMRUQocHJlZmVyZW5jZXMtPnNldE1pbmltdW1G
b250U2l6ZSgwKSkpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm47CiAgICAgaWYg
KEZBSUxFRChwcmVmZXJlbmNlcy0+c2V0TWluaW11bUxvZ2ljYWxGb250U2l6ZSg5KSkpCi0gICAg
ICAgIHJldHVybiAwOworICAgICAgICByZXR1cm47CiAgICAgaWYgKEZBSUxFRChwcmVmZXJlbmNl
cy0+c2V0Rml4ZWRGb250RmFtaWx5KEJTdHJpbmcoTCJDb3VyaWVyIE5ldyIpKSkpCi0gICAgICAg
IHJldHVybiAwOworICAgICAgICByZXR1cm47CiAgICAgaWYgKEZBSUxFRChwcmVmZXJlbmNlcy0+
c2V0RGVmYXVsdEZpeGVkRm9udFNpemUoMTMpKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
IHJldHVybjsKIAotICAgIGlmIChGQUlMRUQobV93ZWJWaWV3LT5zZXRQcmVmZXJlbmNlcyhwcmVm
ZXJlbmNlcy5nZXQoKSkpKQotICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoRkFJTEVEKGZyb250
ZW5kV2ViVmlldy0+c2V0UHJlZmVyZW5jZXMocHJlZmVyZW5jZXMuZ2V0KCkpKSkKKyAgICAgICAg
cmV0dXJuOwogCi0gICAgbV93ZWJWaWV3LT5zZXRQcm9oaWJpdHNNYWluRnJhbWVTY3JvbGxpbmco
VFJVRSk7CisgICAgZnJvbnRlbmRXZWJWaWV3LT5zZXRQcm9oaWJpdHNNYWluRnJhbWVTY3JvbGxp
bmcoVFJVRSk7CiAKLSAgICBpZiAoRkFJTEVEKG1fd2ViVmlldy0+dmlld1dpbmRvdyhyZWludGVy
cHJldF9jYXN0PE9MRV9IQU5ETEUqPigmbV93ZWJWaWV3SHduZCkpKSkKLSAgICAgICAgcmV0dXJu
IDA7CisgICAgSFdORCBmcm9udGVuZFdlYlZpZXdId25kOworICAgIGlmIChGQUlMRUQoZnJvbnRl
bmRXZWJWaWV3LT52aWV3V2luZG93KHJlaW50ZXJwcmV0X2Nhc3Q8T0xFX0hBTkRMRSo+KCZmcm9u
dGVuZFdlYlZpZXdId25kKSkpKQorICAgICAgICByZXR1cm47CiAKLSAgICBDT01QdHI8V2ViTXV0
YWJsZVVSTFJlcXVlc3Q+IHJlcXVlc3Q7Ci0gICAgcmVxdWVzdC5hZG9wdFJlZihXZWJNdXRhYmxl
VVJMUmVxdWVzdDo6Y3JlYXRlSW5zdGFuY2UoKSk7CisgICAgQ09NUHRyPFdlYk11dGFibGVVUkxS
ZXF1ZXN0PiByZXF1ZXN0KEFkb3B0Q09NLCBXZWJNdXRhYmxlVVJMUmVxdWVzdDo6Y3JlYXRlSW5z
dGFuY2UoKSk7CiAKICAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IGh0bWxVUkxSZWYoQWRvcHRDRiwg
Q0ZCdW5kbGVDb3B5UmVzb3VyY2VVUkwoZ2V0V2ViS2l0QnVuZGxlKCksIENGU1RSKCJpbnNwZWN0
b3IiKSwgQ0ZTVFIoImh0bWwiKSwgQ0ZTVFIoImluc3BlY3RvciIpKSk7CiAgICAgaWYgKCFodG1s
VVJMUmVmKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuOwogCiAgICAgQ0ZTdHJp
bmdSZWYgdXJsU3RyaW5nUmVmID0gOjpDRlVSTEdldFN0cmluZyhodG1sVVJMUmVmLmdldCgpKTsK
ICAgICBpZiAoRkFJTEVEKHJlcXVlc3QtPmluaXRXaXRoVVJMKEJTdHJpbmcodXJsU3RyaW5nUmVm
KSwgV2ViVVJMUmVxdWVzdFVzZVByb3RvY29sQ2FjaGVQb2xpY3ksIDYwKSkpCi0gICAgICAgIHJl
dHVybiAwOworICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoRkFJTEVEKG1fd2ViVmlldy0+dG9w
TGV2ZWxGcmFtZSgpLT5sb2FkUmVxdWVzdChyZXF1ZXN0LmdldCgpKSkpCi0gICAgICAgIHJldHVy
biAwOworICAgIGlmIChGQUlMRUQoZnJvbnRlbmRXZWJWaWV3LT50b3BMZXZlbEZyYW1lKCktPmxv
YWRSZXF1ZXN0KHJlcXVlc3QuZ2V0KCkpKSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgcmV0dXJu
IGNvcmUobV93ZWJWaWV3LmdldCgpKTsKKyAgICBQYWdlKiBwYWdlID0gY29yZShmcm9udGVuZFdl
YlZpZXcuZ2V0KCkpOworICAgIHBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0SW5zcGVj
dG9yRnJvbnRlbmRDbGllbnQobmV3IFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50KG1faW5zcGVj
dGVkV2ViVmlldywgbV9pbnNwZWN0ZWRXZWJWaWV3SHduZCwgZnJvbnRlbmRId25kLCBmcm9udGVu
ZFdlYlZpZXcsIGZyb250ZW5kV2ViVmlld0h3bmQsIHRoaXMpKTsKKyAgICBtX2Zyb250ZW5kSHdu
ZCA9IGZyb250ZW5kSHduZDsKIH0KIAordm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmhpZ2hsaWdo
dChOb2RlKikKK3sKKyAgICBib29sIGNyZWF0aW5nSGlnaGxpZ2h0ID0gIW1faGlnaGxpZ2h0Owor
CisgICAgaWYgKGNyZWF0aW5nSGlnaGxpZ2h0KQorICAgICAgICBtX2hpZ2hsaWdodC5zZXQobmV3
IFdlYk5vZGVIaWdobGlnaHQobV9pbnNwZWN0ZWRXZWJWaWV3KSk7CiAKLVN0cmluZyBXZWJJbnNw
ZWN0b3JDbGllbnQ6OmxvY2FsaXplZFN0cmluZ3NVUkwoKQorICAgIGlmIChtX2hpZ2hsaWdodC0+
aXNTaG93aW5nKCkpCisgICAgICAgIG1faGlnaGxpZ2h0LT51cGRhdGUoKTsKKyAgICBlbHNlCisg
ICAgICAgIG1faGlnaGxpZ2h0LT5zZXRTaG93c1doaWxlV2ViVmlld0lzVmlzaWJsZSh0cnVlKTsK
KworICAgIGlmIChjcmVhdGluZ0hpZ2hsaWdodCAmJiBJc1dpbmRvd1Zpc2libGUobV9mcm9udGVu
ZEh3bmQpKQorICAgICAgICBtX2hpZ2hsaWdodC0+cGxhY2VCZWhpbmRXaW5kb3cobV9mcm9udGVu
ZEh3bmQpOworfQorCit2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6aGlkZUhpZ2hsaWdodCgpCit7
CisgICAgaWYgKG1faGlnaGxpZ2h0KQorICAgICAgICBtX2hpZ2hsaWdodC0+c2V0U2hvd3NXaGls
ZVdlYlZpZXdJc1Zpc2libGUoZmFsc2UpOworfQorCit2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6
dXBkYXRlSGlnaGxpZ2h0KCkKK3sKKyAgICBpZiAobV9oaWdobGlnaHQgJiYgbV9oaWdobGlnaHQt
PmlzU2hvd2luZygpKQorICAgICAgICBtX2hpZ2hsaWdodC0+dXBkYXRlKCk7Cit9CisKK1dlYklu
c3BlY3RvckZyb250ZW5kQ2xpZW50OjpXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudChXZWJWaWV3
KiBpbnNwZWN0ZWRXZWJWaWV3LCBIV05EIGluc3BlY3RlZFdlYlZpZXdId25kLCBIV05EIGZyb250
ZW5kSHduZCwgY29uc3QgQ09NUHRyPFdlYlZpZXc+JiBmcm9udGVuZFdlYlZpZXcsIEhXTkQgZnJv
bnRlbmRXZWJWaWV3SHduZCwgV2ViSW5zcGVjdG9yQ2xpZW50KiBpbnNwZWN0b3JDbGllbnQpCisg
ICAgOiBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsKGluc3BlY3RlZFdlYlZpZXctPnBhZ2Uo
KS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLCAgY29yZShmcm9udGVuZFdlYlZpZXcuZ2V0KCkpKQor
ICAgICwgbV9pbnNwZWN0ZWRXZWJWaWV3KGluc3BlY3RlZFdlYlZpZXcpCisgICAgLCBtX2luc3Bl
Y3RlZFdlYlZpZXdId25kKGluc3BlY3RlZFdlYlZpZXdId25kKQorICAgICwgbV9pbnNwZWN0b3JD
bGllbnQoaW5zcGVjdG9yQ2xpZW50KQorICAgICwgbV9mcm9udGVuZEh3bmQoZnJvbnRlbmRId25k
KQorICAgICwgbV9mcm9udGVuZFdlYlZpZXcoZnJvbnRlbmRXZWJWaWV3KQorICAgICwgbV9mcm9u
dGVuZFdlYlZpZXdId25kKGZyb250ZW5kV2ViVmlld0h3bmQpCisgICAgLCBtX3Nob3VsZEF0dGFj
aFdoZW5TaG93bihmYWxzZSkKKyAgICAsIG1fYXR0YWNoZWQoZmFsc2UpCisgICAgLCBtX2Rlc3Ry
b3lpbmdJbnNwZWN0b3JWaWV3KGZhbHNlKQoreworICAgIDo6U2V0UHJvcChmcm9udGVuZEh3bmQs
IGtXZWJJbnNwZWN0b3JQb2ludGVyUHJvcCwgcmVpbnRlcnByZXRfY2FzdDxIQU5ETEU+KHRoaXMp
KTsKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHdpbmRvdyBzaXplL3Bvc2l0aW9uIHNhdmUvcmVz
dG9yZQorI2lmIDAKKyAgICBbc2VsZiBzZXRXaW5kb3dGcmFtZUF1dG9zYXZlTmFtZTpAIldlYiBJ
bnNwZWN0b3IiXTsKKyNlbmRpZgorfQorCitXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6fldl
Ykluc3BlY3RvckZyb250ZW5kQ2xpZW50KCkKK3sKKyAgICBBU1NFUlQobV9kZXN0cm95aW5nSW5z
cGVjdG9yVmlldyk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmZyb250
ZW5kTG9hZGVkKCkKK3sKKyAgICBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjpmcm9udGVu
ZExvYWRlZCgpOworCisgICAgc2V0QXR0YWNoZWRXaW5kb3cobV9hdHRhY2hlZCk7Cit9CisKK1N0
cmluZyBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6bG9jYWxpemVkU3RyaW5nc1VSTCgpCiB7
CiAgICAgUmV0YWluUHRyPENGVVJMUmVmPiB1cmwoQWRvcHRDRiwgQ0ZCdW5kbGVDb3B5UmVzb3Vy
Y2VVUkwoZ2V0V2ViS2l0QnVuZGxlKCksIENGU1RSKCJsb2NhbGl6ZWRTdHJpbmdzIiksIENGU1RS
KCJqcyIpLCAwKSk7CiAgICAgaWYgKCF1cmwpCkBAIC0yMDIsMzEgKzI0NSwyMyBAQCBTdHJpbmcg
V2ViSW5zcGVjdG9yQ2xpZW50Ojpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkKICAgICByZXR1cm4gQ0ZV
UkxHZXRTdHJpbmcodXJsLmdldCgpKTsKIH0KIAotCi1TdHJpbmcgV2ViSW5zcGVjdG9yQ2xpZW50
OjpoaWRkZW5QYW5lbHMoKQorU3RyaW5nIFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpoaWRk
ZW5QYW5lbHMoKQogewogICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgdGhpcwogICAgIHJldHVybiBT
dHJpbmcoKTsKIH0KIAotdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OnNob3dXaW5kb3coKQordm9p
ZCBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6YnJpbmdUb0Zyb250KCkKIHsKICAgICBzaG93
V2luZG93V2l0aG91dE5vdGlmaWNhdGlvbnMoKTsKLSAgICBtX2luc3BlY3RlZFdlYlZpZXctPnBh
Z2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5zZXRXaW5kb3dWaXNpYmxlKHRydWUsIG1fc2hv
dWxkQXR0YWNoV2hlblNob3duKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmNsb3Nl
V2luZG93KCkKLXsKLSAgICBjbG9zZVdpbmRvd1dpdGhvdXROb3RpZmljYXRpb25zKCk7Ci0gICAg
bV9pbnNwZWN0ZWRXZWJWaWV3LT5wYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0V2lu
ZG93VmlzaWJsZShmYWxzZSwgbV9zaG91bGRBdHRhY2hXaGVuU2hvd24pOwogfQogCi1ib29sIFdl
Ykluc3BlY3RvckNsaWVudDo6d2luZG93VmlzaWJsZSgpCit2b2lkIFdlYkluc3BlY3RvckZyb250
ZW5kQ2xpZW50OjpjbG9zZVdpbmRvdygpCiB7Ci0gICAgcmV0dXJuICEhOjpJc1dpbmRvd1Zpc2li
bGUobV9od25kKTsKKyAgICBkZXN0cm95SW5zcGVjdG9yVmlldygpOwogfQogCi12b2lkIFdlYklu
c3BlY3RvckNsaWVudDo6YXR0YWNoV2luZG93KCkKK3ZvaWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRD
bGllbnQ6OmF0dGFjaFdpbmRvdygpCiB7CiAgICAgaWYgKG1fYXR0YWNoZWQpCiAgICAgICAgIHJl
dHVybjsKQEAgLTIzNyw3ICsyNzIsNyBAQCB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6YXR0YWNo
V2luZG93KCkKICAgICBzaG93V2luZG93V2l0aG91dE5vdGlmaWNhdGlvbnMoKTsKIH0KIAotdm9p
ZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmRldGFjaFdpbmRvdygpCit2b2lkIFdlYkluc3BlY3RvckZy
b250ZW5kQ2xpZW50OjpkZXRhY2hXaW5kb3coKQogewogICAgIGlmICghbV9hdHRhY2hlZCkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMjQ4LDcgKzI4Myw3IEBAIHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50
OjpkZXRhY2hXaW5kb3coKQogICAgIHNob3dXaW5kb3dXaXRob3V0Tm90aWZpY2F0aW9ucygpOwog
fQogCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5z
aWduZWQgaGVpZ2h0KQordm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6c2V0QXR0YWNo
ZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KQogewogICAgIGlmICghbV9hdHRhY2hlZCkK
ICAgICAgICAgcmV0dXJuOwpAQCAtMjY2LDEwMSArMzAxLDczIEBAIHZvaWQgV2ViSW5zcGVjdG9y
Q2xpZW50OjpzZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpCiAgICAgaW50
IHRvdGFsSGVpZ2h0ID0gaG9zdFdpbmRvd1JlY3QuYm90dG9tIC0gaG9zdFdpbmRvd1JlY3QudG9w
OwogICAgIGludCB3ZWJWaWV3V2lkdGggPSBpbnNwZWN0ZWRSZWN0LnJpZ2h0IC0gaW5zcGVjdGVk
UmVjdC5sZWZ0OwogCi0gICAgU2V0V2luZG93UG9zKG1fd2ViVmlld0h3bmQsIDAsIDAsIHRvdGFs
SGVpZ2h0IC0gaGVpZ2h0LCB3ZWJWaWV3V2lkdGgsIGhlaWdodCwgU1dQX05PWk9SREVSKTsKKyAg
ICBTZXRXaW5kb3dQb3MobV9mcm9udGVuZFdlYlZpZXdId25kLCAwLCAwLCB0b3RhbEhlaWdodCAt
IGhlaWdodCwgd2ViVmlld1dpZHRoLCBoZWlnaHQsIFNXUF9OT1pPUkRFUik7CiAKICAgICAvLyBX
ZSB3YW50IHRvIHNldCB0aGUgaW5zcGVjdGVkIHdlYiB2aWV3IGhlaWdodCB0byB0aGUgdG90YWxI
ZWlnaHQsIGJlY2F1c2UgdGhlIGhlaWdodCBhZGp1c3RtZW50CiAgICAgLy8gb2YgdGhlIGluc3Bl
Y3RlZCB3ZWIgdmlldyBoYXBwZW5zIGluIG9uV2ViVmlld1dpbmRvd1Bvc0NoYW5naW5nLCBub3Qg
aGVyZS4KICAgICBTZXRXaW5kb3dQb3MobV9pbnNwZWN0ZWRXZWJWaWV3SHduZCwgMCwgMCwgMCwg
d2ViVmlld1dpZHRoLCB0b3RhbEhlaWdodCwgU1dQX05PWk9SREVSKTsKIAotICAgIFJlZHJhd1dp
bmRvdyhtX3dlYlZpZXdId25kLCAwLCAwLCBSRFdfSU5WQUxJREFURSB8IFJEV19BTExDSElMRFJF
TiB8IFJEV19VUERBVEVOT1cpOyAKKyAgICBSZWRyYXdXaW5kb3cobV9mcm9udGVuZFdlYlZpZXdI
d25kLCAwLCAwLCBSRFdfSU5WQUxJREFURSB8IFJEV19BTExDSElMRFJFTiB8IFJEV19VUERBVEVO
T1cpOyAKICAgICBSZWRyYXdXaW5kb3cobV9pbnNwZWN0ZWRXZWJWaWV3SHduZCwgMCwgMCwgUkRX
X0lOVkFMSURBVEUgfCBSRFdfQUxMQ0hJTERSRU4gfCBSRFdfVVBEQVRFTk9XKTsKIH0KIAotdm9p
ZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmhpZ2hsaWdodChOb2RlKikKLXsKLSAgICBib29sIGNyZWF0
aW5nSGlnaGxpZ2h0ID0gIW1faGlnaGxpZ2h0OwotCi0gICAgaWYgKGNyZWF0aW5nSGlnaGxpZ2h0
KQotICAgICAgICBtX2hpZ2hsaWdodC5zZXQobmV3IFdlYk5vZGVIaWdobGlnaHQobV9pbnNwZWN0
ZWRXZWJWaWV3KSk7Ci0KLSAgICBpZiAobV9oaWdobGlnaHQtPmlzU2hvd2luZygpKQotICAgICAg
ICBtX2hpZ2hsaWdodC0+dXBkYXRlKCk7Ci0gICAgZWxzZQotICAgICAgICBtX2hpZ2hsaWdodC0+
c2V0U2hvd3NXaGlsZVdlYlZpZXdJc1Zpc2libGUodHJ1ZSk7Ci0KLSAgICBpZiAoY3JlYXRpbmdI
aWdobGlnaHQgJiYgSXNXaW5kb3dWaXNpYmxlKG1faHduZCkpCi0gICAgICAgIG1faGlnaGxpZ2h0
LT5wbGFjZUJlaGluZFdpbmRvdyhtX2h3bmQpOwotfQotCi12b2lkIFdlYkluc3BlY3RvckNsaWVu
dDo6aGlkZUhpZ2hsaWdodCgpCi17Ci0gICAgaWYgKG1faGlnaGxpZ2h0KQotICAgICAgICBtX2hp
Z2hsaWdodC0+c2V0U2hvd3NXaGlsZVdlYlZpZXdJc1Zpc2libGUoZmFsc2UpOwotfQotCi12b2lk
IFdlYkluc3BlY3RvckNsaWVudDo6aW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIG5l
d1VSTCkKK3ZvaWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6Omluc3BlY3RlZFVSTENoYW5n
ZWQoY29uc3QgU3RyaW5nJiBuZXdVUkwpCiB7CiAgICAgbV9pbnNwZWN0ZWRVUkwgPSBuZXdVUkw7
CiAgICAgdXBkYXRlV2luZG93VGl0bGUoKTsKIH0KIAotdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6
Omluc3BlY3RvcldpbmRvd09iamVjdENsZWFyZWQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpjbG9zZVdpbmRvd1dpdGhvdXROb3RpZmlj
YXRpb25zKCkKK3ZvaWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmNsb3NlV2luZG93V2l0
aG91dE5vdGlmaWNhdGlvbnMoKQogewotICAgIGlmICghbV9od25kKQorICAgIGlmICghbV9mcm9u
dGVuZEh3bmQpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICghbV9hdHRhY2hlZCkgewotICAg
ICAgICBTaG93V2luZG93KG1faHduZCwgU1dfSElERSk7CisgICAgICAgIFNob3dXaW5kb3cobV9m
cm9udGVuZEh3bmQsIFNXX0hJREUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgQVNT
RVJUKG1fd2ViVmlldyk7CisgICAgQVNTRVJUKG1fZnJvbnRlbmRXZWJWaWV3KTsKICAgICBBU1NF
UlQobV9pbnNwZWN0ZWRXZWJWaWV3SHduZCk7Ci0gICAgQVNTRVJUKCFJc1dpbmRvd1Zpc2libGUo
bV9od25kKSk7CisgICAgQVNTRVJUKCFJc1dpbmRvd1Zpc2libGUobV9mcm9udGVuZEh3bmQpKTsK
IAogICAgIC8vIFJlbW92ZSB0aGUgSW5zcGVjdG9yJ3MgV2ViVmlldyBmcm9tIHRoZSBpbnNwZWN0
ZWQgV2ViVmlldydzIHBhcmVudCB3aW5kb3cuCiAgICAgV2luZG93TWVzc2FnZUJyb2FkY2FzdGVy
OjpyZW1vdmVMaXN0ZW5lcihtX2luc3BlY3RlZFdlYlZpZXdId25kLCB0aGlzKTsKIAogICAgIG1f
YXR0YWNoZWQgPSBmYWxzZTsKIAotICAgIG1fd2ViVmlldy0+c2V0SG9zdFdpbmRvdyhyZWludGVy
cHJldF9jYXN0PE9MRV9IQU5ETEU+KG1faHduZCkpOworICAgIG1fZnJvbnRlbmRXZWJWaWV3LT5z
ZXRIb3N0V2luZG93KHJlaW50ZXJwcmV0X2Nhc3Q8T0xFX0hBTkRMRT4obV9mcm9udGVuZEh3bmQp
KTsKIAogICAgIC8vIE1ha2Ugc3VyZSBldmVyeXRoaW5nIGhhcyB0aGUgcmlnaHQgc2l6ZS9wb3Np
dGlvbi4KICAgICBIV05EIGhvc3RXaW5kb3c7CiAgICAgaWYgKFNVQ0NFRURFRChtX2luc3BlY3Rl
ZFdlYlZpZXctPmhvc3RXaW5kb3coKE9MRV9IQU5ETEUqKSZob3N0V2luZG93KSkpCiAgICAgICAg
IFNlbmRNZXNzYWdlKGhvc3RXaW5kb3csIFdNX1NJWkUsIDAsIDApOwogCi0gICAgaWYgKG1faGln
aGxpZ2h0ICYmIG1faGlnaGxpZ2h0LT5pc1Nob3dpbmcoKSkKLSAgICAgICAgbV9oaWdobGlnaHQt
PnVwZGF0ZSgpOworICAgIG1faW5zcGVjdG9yQ2xpZW50LT51cGRhdGVIaWdobGlnaHQoKTsKIH0K
IAotdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OnNob3dXaW5kb3dXaXRob3V0Tm90aWZpY2F0aW9u
cygpCit2b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpzaG93V2luZG93V2l0aG91dE5v
dGlmaWNhdGlvbnMoKQogewotICAgIGlmICghbV9od25kKQorICAgIGlmICghbV9mcm9udGVuZEh3
bmQpCiAgICAgICAgIHJldHVybjsKIAotICAgIEFTU0VSVChtX3dlYlZpZXcpOworICAgIEFTU0VS
VChtX2Zyb250ZW5kV2ViVmlldyk7CiAgICAgQVNTRVJUKG1faW5zcGVjdGVkV2ViVmlld0h3bmQp
OwogCiAgICAgLy8gSWYgbm8gcHJlZmVyZW5jZSBpcyBzZXQgLSBkZWZhdWx0IHRvIGFuIGF0dGFj
aGVkIHdpbmRvdy4gVGhpcyBpcyBpbXBvcnRhbnQgZm9yIGluc3BlY3RvciBMYXlvdXRUZXN0cy4K
ICAgICBTdHJpbmcgc2hvdWxkQXR0YWNoID0gbV9pbnNwZWN0ZWRXZWJWaWV3LT5wYWdlKCktPmlu
c3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0dGluZyhJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0
b3JTdGFydHNBdHRhY2hlZFNldHRpbmdOYW1lKCkpOwogICAgIG1fc2hvdWxkQXR0YWNoV2hlblNo
b3duID0gc2hvdWxkQXR0YWNoICE9ICJmYWxzZSI7CiAgICAgICAgIAotICAgIGlmIChtX3Nob3Vs
ZEF0dGFjaFdoZW5TaG93biAmJiAhbV9pbnNwZWN0ZWRXZWJWaWV3LT5wYWdlKCktPmluc3BlY3Rv
ckNvbnRyb2xsZXIoKS0+Y2FuQXR0YWNoV2luZG93KCkpCisgICAgaWYgKG1fc2hvdWxkQXR0YWNo
V2hlblNob3duICYmICFjYW5BdHRhY2hXaW5kb3coKSkKICAgICAgICAgbV9zaG91bGRBdHRhY2hX
aGVuU2hvd24gPSBmYWxzZTsKICAgICAKICAgICBpZiAoIW1fc2hvdWxkQXR0YWNoV2hlblNob3du
KSB7CiAgICAgICAgIC8vIFB1dCB0aGUgSW5zcGVjdG9yJ3MgV2ViVmlldyBpbnNpZGUgb3VyIHdp
bmRvdyBhbmQgc2hvdyBpdC4KLSAgICAgICAgbV93ZWJWaWV3LT5zZXRIb3N0V2luZG93KHJlaW50
ZXJwcmV0X2Nhc3Q8T0xFX0hBTkRMRT4obV9od25kKSk7Ci0gICAgICAgIFNlbmRNZXNzYWdlKG1f
aHduZCwgV01fU0laRSwgMCwgMCk7CisgICAgICAgIG1fZnJvbnRlbmRXZWJWaWV3LT5zZXRIb3N0
V2luZG93KHJlaW50ZXJwcmV0X2Nhc3Q8T0xFX0hBTkRMRT4obV9mcm9udGVuZEh3bmQpKTsKKyAg
ICAgICAgU2VuZE1lc3NhZ2UobV9mcm9udGVuZEh3bmQsIFdNX1NJWkUsIDAsIDApOwogICAgICAg
ICB1cGRhdGVXaW5kb3dUaXRsZSgpOwogCi0gICAgICAgIFNldFdpbmRvd1BvcyhtX2h3bmQsIEhX
TkRfVE9QLCAwLCAwLCAwLCAwLCBTV1BfU0hPV1dJTkRPVyB8IFNXUF9OT01PVkUgfCBTV1BfTk9T
SVpFKTsKKyAgICAgICAgU2V0V2luZG93UG9zKG1fZnJvbnRlbmRId25kLCBIV05EX1RPUCwgMCwg
MCwgMCwgMCwgU1dQX1NIT1dXSU5ET1cgfCBTV1BfTk9NT1ZFIHwgU1dQX05PU0laRSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKQEAgLTM3MSwyMCArMzc4LDMyIEBAIHZvaWQgV2ViSW5zcGVj
dG9yQ2xpZW50OjpzaG93V2luZG93V2l0aG91dE5vdGlmaWNhdGlvbnMoKQogICAgIGlmIChGQUlM
RUQobV9pbnNwZWN0ZWRXZWJWaWV3LT5ob3N0V2luZG93KHJlaW50ZXJwcmV0X2Nhc3Q8T0xFX0hB
TkRMRSo+KCZob3N0V2luZG93KSkpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3dlYlZpZXct
PnNldEhvc3RXaW5kb3cocmVpbnRlcnByZXRfY2FzdDxPTEVfSEFORExFPihob3N0V2luZG93KSk7
CisgICAgbV9mcm9udGVuZFdlYlZpZXctPnNldEhvc3RXaW5kb3cocmVpbnRlcnByZXRfY2FzdDxP
TEVfSEFORExFPihob3N0V2luZG93KSk7CiAKICAgICAvLyBUaGVuIGhpZGUgb3VyIG93biB3aW5k
b3cuCi0gICAgU2hvd1dpbmRvdyhtX2h3bmQsIFNXX0hJREUpOworICAgIFNob3dXaW5kb3cobV9m
cm9udGVuZEh3bmQsIFNXX0hJREUpOwogCiAgICAgbV9hdHRhY2hlZCA9IHRydWU7CiAKICAgICAv
LyBNYWtlIHN1cmUgZXZlcnl0aGluZyBoYXMgdGhlIHJpZ2h0IHNpemUvcG9zaXRpb24uCiAgICAg
U2VuZE1lc3NhZ2UoaG9zdFdpbmRvdywgV01fU0laRSwgMCwgMCk7Ci0gICAgaWYgKG1faGlnaGxp
Z2h0ICYmIG1faGlnaGxpZ2h0LT5pc1Nob3dpbmcoKSkKLSAgICAgICAgbV9oaWdobGlnaHQtPnVw
ZGF0ZSgpOworICAgIG1faW5zcGVjdG9yQ2xpZW50LT51cGRhdGVIaWdobGlnaHQoKTsKK30KKwor
dm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6ZGVzdHJveUluc3BlY3RvclZpZXcoKQor
eworICAgIGlmIChtX2Rlc3Ryb3lpbmdJbnNwZWN0b3JWaWV3KQorICAgICAgICByZXR1cm47Cisg
ICAgbV9kZXN0cm95aW5nSW5zcGVjdG9yVmlldyA9IHRydWU7CisKKyAgICBtX2luc3BlY3RlZFdl
YlZpZXctPnBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5jbG9zZSgpOworCisgICAgY2xv
c2VXaW5kb3dXaXRob3V0Tm90aWZpY2F0aW9ucygpOworICAgIG1faW5zcGVjdG9yQ2xpZW50LT5m
cm9udGVuZENsb3NpbmcoKTsKKyAgICA6OkRlc3Ryb3lXaW5kb3cobV9mcm9udGVuZEh3bmQpOwog
fQogCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6dXBkYXRlV2luZG93VGl0bGUoKQordm9pZCBX
ZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6dXBkYXRlV2luZG93VGl0bGUoKQogewogICAgIC8v
IEZJWE1FOiBUaGUgc2VyaWVzIG9mIGFwcGVuZHMgc2hvdWxkIGJlIHJlcGxhY2VkIHdpdGggYSBj
YWxsIHRvIFN0cmluZzo6Zm9ybWF0KCkKICAgICAvLyB3aGVuIGl0IGNhbiBiZSBmaWd1cmVkIG91
dCBob3cgdG8gZ2V0IHRoZSB1bmljb2RlIGVtLWRhc2ggdG8gc2hvdyB1cC4KQEAgLTM5MiwxMCAr
NDExLDEwIEBAIHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50Ojp1cGRhdGVXaW5kb3dUaXRsZSgpCiAg
ICAgdGl0bGUuYXBwZW5kKChVQ2hhcikweDIwMTQpOyAvLyBlbS1kYXNoCiAgICAgdGl0bGUuYXBw
ZW5kKCcgJyk7CiAgICAgdGl0bGUuYXBwZW5kKG1faW5zcGVjdGVkVVJMKTsKLSAgICA6OlNldFdp
bmRvd1RleHQobV9od25kLCB0aXRsZS5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpKTsK
KyAgICA6OlNldFdpbmRvd1RleHQobV9mcm9udGVuZEh3bmQsIHRpdGxlLmNoYXJhY3RlcnNXaXRo
TnVsbFRlcm1pbmF0aW9uKCkpOwogfQogCi1MUkVTVUxUIFdlYkluc3BlY3RvckNsaWVudDo6b25H
ZXRNaW5NYXhJbmZvKFdQQVJBTSwgTFBBUkFNIGxQYXJhbSkKK0xSRVNVTFQgV2ViSW5zcGVjdG9y
RnJvbnRlbmRDbGllbnQ6Om9uR2V0TWluTWF4SW5mbyhXUEFSQU0sIExQQVJBTSBsUGFyYW0pCiB7
CiAgICAgTUlOTUFYSU5GTyogaW5mbyA9IHJlaW50ZXJwcmV0X2Nhc3Q8TUlOTUFYSU5GTyo+KGxQ
YXJhbSk7CiAgICAgUE9JTlQgc2l6ZSA9IHs0MDAsIDQwMH07CkBAIC00MDQsMzMgKzQyMywzMSBA
QCBMUkVTVUxUIFdlYkluc3BlY3RvckNsaWVudDo6b25HZXRNaW5NYXhJbmZvKFdQQVJBTSwgTFBB
UkFNIGxQYXJhbSkKICAgICByZXR1cm4gMDsKIH0KIAotTFJFU1VMVCBXZWJJbnNwZWN0b3JDbGll
bnQ6Om9uU2l6ZShXUEFSQU0sIExQQVJBTSkKK0xSRVNVTFQgV2ViSW5zcGVjdG9yRnJvbnRlbmRD
bGllbnQ6Om9uU2l6ZShXUEFSQU0sIExQQVJBTSkKIHsKICAgICBSRUNUIHJlY3Q7Ci0gICAgOjpH
ZXRDbGllbnRSZWN0KG1faHduZCwgJnJlY3QpOworICAgIDo6R2V0Q2xpZW50UmVjdChtX2Zyb250
ZW5kSHduZCwgJnJlY3QpOwogCi0gICAgOjpTZXRXaW5kb3dQb3MobV93ZWJWaWV3SHduZCwgMCwg
cmVjdC5sZWZ0LCByZWN0LnRvcCwgcmVjdC5yaWdodCAtIHJlY3QubGVmdCwgcmVjdC5ib3R0b20g
LSByZWN0LnRvcCwgU1dQX05PWk9SREVSKTsKKyAgICA6OlNldFdpbmRvd1BvcyhtX2Zyb250ZW5k
V2ViVmlld0h3bmQsIDAsIHJlY3QubGVmdCwgcmVjdC50b3AsIHJlY3QucmlnaHQgLSByZWN0Lmxl
ZnQsIHJlY3QuYm90dG9tIC0gcmVjdC50b3AsIFNXUF9OT1pPUkRFUik7CiAKICAgICByZXR1cm4g
MDsKIH0KIAotTFJFU1VMVCBXZWJJbnNwZWN0b3JDbGllbnQ6Om9uQ2xvc2UoV1BBUkFNLCBMUEFS
QU0pCitMUkVTVUxUIFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpvbkNsb3NlKFdQQVJBTSwg
TFBBUkFNKQogewotICAgIDo6U2hvd1dpbmRvdyhtX2h3bmQsIFNXX0hJREUpOwotICAgIG1faW5z
cGVjdGVkV2ViVmlldy0+cGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnNldFdpbmRvd1Zp
c2libGUoZmFsc2UsIG1fc2hvdWxkQXR0YWNoV2hlblNob3duKTsKLQotICAgIGhpZGVIaWdobGln
aHQoKTsKKyAgICA6OlNob3dXaW5kb3cobV9mcm9udGVuZEh3bmQsIFNXX0hJREUpOworICAgIG1f
aW5zcGVjdGVkV2ViVmlldy0+cGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmNsb3NlKCk7
CiAKICAgICByZXR1cm4gMDsKIH0KIAotTFJFU1VMVCBXZWJJbnNwZWN0b3JDbGllbnQ6Om9uU2V0
Rm9jdXMoKQorTFJFU1VMVCBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6b25TZXRGb2N1cygp
CiB7Ci0gICAgU2V0Rm9jdXMobV93ZWJWaWV3SHduZCk7CisgICAgU2V0Rm9jdXMobV9mcm9udGVu
ZFdlYlZpZXdId25kKTsKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBXZWJJbnNwZWN0b3JDbGll
bnQ6Om9uV2ViVmlld1dpbmRvd1Bvc0NoYW5naW5nKFdQQVJBTSwgTFBBUkFNIGxQYXJhbSkKK3Zv
aWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6Om9uV2ViVmlld1dpbmRvd1Bvc0NoYW5naW5n
KFdQQVJBTSwgTFBBUkFNIGxQYXJhbSkKIHsKICAgICBBU1NFUlQobV9hdHRhY2hlZCk7CiAKQEAg
LTQ0MSwxNyArNDU4LDE3IEBAIHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpvbldlYlZpZXdXaW5k
b3dQb3NDaGFuZ2luZyhXUEFSQU0sIExQQVJBTSBsUGFyYW0pCiAgICAgICAgIHJldHVybjsKIAog
ICAgIFJFQ1QgaW5zcGVjdG9yUmVjdDsKLSAgICBHZXRDbGllbnRSZWN0KG1fd2ViVmlld0h3bmQs
ICZpbnNwZWN0b3JSZWN0KTsKKyAgICBHZXRDbGllbnRSZWN0KG1fZnJvbnRlbmRXZWJWaWV3SHdu
ZCwgJmluc3BlY3RvclJlY3QpOwogICAgIHVuc2lnbmVkIGluc3BlY3RvckhlaWdodCA9IGluc3Bl
Y3RvclJlY3QuYm90dG9tIC0gaW5zcGVjdG9yUmVjdC50b3A7CiAKICAgICB3aW5kb3dQb3MtPmN5
IC09IGluc3BlY3RvckhlaWdodDsKIAotICAgIFNldFdpbmRvd1BvcyhtX3dlYlZpZXdId25kLCAw
LCB3aW5kb3dQb3MtPngsIHdpbmRvd1Bvcy0+eSArIHdpbmRvd1Bvcy0+Y3ksIHdpbmRvd1Bvcy0+
Y3gsIGluc3BlY3RvckhlaWdodCwgU1dQX05PWk9SREVSKTsKKyAgICBTZXRXaW5kb3dQb3MobV9m
cm9udGVuZFdlYlZpZXdId25kLCAwLCB3aW5kb3dQb3MtPngsIHdpbmRvd1Bvcy0+eSArIHdpbmRv
d1Bvcy0+Y3ksIHdpbmRvd1Bvcy0+Y3gsIGluc3BlY3RvckhlaWdodCwgU1dQX05PWk9SREVSKTsK
IH0KIAogc3RhdGljIExSRVNVTFQgQ0FMTEJBQ0sgV2ViSW5zcGVjdG9yV25kUHJvYyhIV05EIGh3
bmQsIFVJTlQgbXNnLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQogewotICAgIFdlYklu
c3BlY3RvckNsaWVudCogY2xpZW50ID0gcmVpbnRlcnByZXRfY2FzdDxXZWJJbnNwZWN0b3JDbGll
bnQqPig6OkdldFByb3AoaHduZCwga1dlYkluc3BlY3RvclBvaW50ZXJQcm9wKSk7CisgICAgV2Vi
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQqIGNsaWVudCA9IHJlaW50ZXJwcmV0X2Nhc3Q8V2ViSW5z
cGVjdG9yRnJvbnRlbmRDbGllbnQqPig6OkdldFByb3AoaHduZCwga1dlYkluc3BlY3RvclBvaW50
ZXJQcm9wKSk7CiAgICAgaWYgKCFjbGllbnQpCiAgICAgICAgIHJldHVybiA6OkRlZldpbmRvd1By
b2MoaHduZCwgbXNnLCB3UGFyYW0sIGxQYXJhbSk7CiAKQEAgLTQ3MSw3ICs0ODgsNyBAQCBzdGF0
aWMgTFJFU1VMVCBDQUxMQkFDSyBXZWJJbnNwZWN0b3JXbmRQcm9jKEhXTkQgaHduZCwgVUlOVCBt
c2csIFdQQVJBTSB3UGFyYW0sCiAgICAgcmV0dXJuIDo6RGVmV2luZG93UHJvYyhod25kLCBtc2cs
IHdQYXJhbSwgbFBhcmFtKTsKIH0KIAotdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OndpbmRvd1Jl
Y2VpdmVkTWVzc2FnZShIV05ELCBVSU5UIG1zZywgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJh
bSkKK3ZvaWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OndpbmRvd1JlY2VpdmVkTWVzc2Fn
ZShIV05ELCBVSU5UIG1zZywgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKIHsKICAgICBz
d2l0Y2ggKG1zZykgewogICAgICAgICBjYXNlIFdNX1dJTkRPV1BPU0NIQU5HSU5HOgpkaWZmIC0t
Z2l0IGEvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuaCBiL1dl
YktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmgKaW5kZXggM2Y2NWIw
YS4uNDU1ZTNhMSAxMDA2NDQKLS0tIGEvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJJbnNw
ZWN0b3JDbGllbnQuaAorKysgYi9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3Rv
ckNsaWVudC5oCkBAIC0zMSw2ICszMSw3IEBACiAKICNpbmNsdWRlIDxXZWJDb3JlL0NPTVB0ci5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yQ2xpZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbGF0
Zm9ybVN0cmluZy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvV2luZG93TWVzc2FnZUxpc3RlbmVyLmg+
CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgpAQCAtMzksNDQgKzQwLDYwIEBACiBjbGFzcyBXZWJO
b2RlSGlnaGxpZ2h0OwogY2xhc3MgV2ViVmlldzsKIAotY2xhc3MgV2ViSW5zcGVjdG9yQ2xpZW50
IDogcHVibGljIFdlYkNvcmU6Okluc3BlY3RvckNsaWVudCwgV2ViQ29yZTo6V2luZG93TWVzc2Fn
ZUxpc3RlbmVyIHsKK2NsYXNzIFdlYkluc3BlY3RvckNsaWVudCA6IHB1YmxpYyBXZWJDb3JlOjpJ
bnNwZWN0b3JDbGllbnQgewogcHVibGljOgogICAgIFdlYkluc3BlY3RvckNsaWVudChXZWJWaWV3
Kik7CiAKICAgICAvLyBJbnNwZWN0b3JDbGllbnQKICAgICB2aXJ0dWFsIHZvaWQgaW5zcGVjdG9y
RGVzdHJveWVkKCk7CiAKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlBhZ2UqIGNyZWF0ZVBhZ2UoKTsK
LQotICAgIHZpcnR1YWwgV2ViQ29yZTo6U3RyaW5nIGxvY2FsaXplZFN0cmluZ3NVUkwoKTsKLQot
ICAgIHZpcnR1YWwgV2ViQ29yZTo6U3RyaW5nIGhpZGRlblBhbmVscygpOwotCi0gICAgdmlydHVh
bCB2b2lkIHNob3dXaW5kb3coKTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xvc2VXaW5kb3coKTsKLSAg
ICB2aXJ0dWFsIGJvb2wgd2luZG93VmlzaWJsZSgpOwotCi0gICAgdmlydHVhbCB2b2lkIGF0dGFj
aFdpbmRvdygpOwotICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hXaW5kb3coKTsKLQotICAgIHZpcnR1
YWwgdm9pZCBzZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpOworICAgIHZp
cnR1YWwgdm9pZCBvcGVuSW5zcGVjdG9yRnJvbnRlbmQoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJv
bGxlciopOwogCiAgICAgdmlydHVhbCB2b2lkIGhpZ2hsaWdodChXZWJDb3JlOjpOb2RlKik7CiAg
ICAgdmlydHVhbCB2b2lkIGhpZGVIaWdobGlnaHQoKTsKIAotICAgIHZpcnR1YWwgdm9pZCBpbnNw
ZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgbmV3VVJMKTsKLQogICAgIHZp
cnR1YWwgdm9pZCBwb3B1bGF0ZVNldHRpbmcoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBrZXksIFdl
YkNvcmU6OlN0cmluZyogdmFsdWUpOwogICAgIHZpcnR1YWwgdm9pZCBzdG9yZVNldHRpbmcoY29u
c3QgV2ViQ29yZTo6U3RyaW5nJiBrZXksIGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgdmFsdWUpOwog
Ci0gICAgdmlydHVhbCB2b2lkIGluc3BlY3RvcldpbmRvd09iamVjdENsZWFyZWQoKTsKKyAgICB2
b2lkIHVwZGF0ZUhpZ2hsaWdodCgpOworICAgIHZvaWQgZnJvbnRlbmRDbG9zaW5nKCkgeyBtX2Zy
b250ZW5kSHduZCA9IDA7IH0KIAogcHJpdmF0ZToKICAgICB+V2ViSW5zcGVjdG9yQ2xpZW50KCk7
CiAKKyAgICBXZWJWaWV3KiBtX2luc3BlY3RlZFdlYlZpZXc7CisgICAgSFdORCBtX2luc3BlY3Rl
ZFdlYlZpZXdId25kOworICAgIEhXTkQgbV9mcm9udGVuZEh3bmQ7CisKKyAgICBPd25QdHI8V2Vi
Tm9kZUhpZ2hsaWdodD4gbV9oaWdobGlnaHQ7Cit9OworCitjbGFzcyBXZWJJbnNwZWN0b3JGcm9u
dGVuZENsaWVudCA6IHB1YmxpYyBXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2Fs
LCBXZWJDb3JlOjpXaW5kb3dNZXNzYWdlTGlzdGVuZXIgeworcHVibGljOgorICAgIFdlYkluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50KFdlYlZpZXcqIGluc3BlY3RlZFdlYlZpZXcsIEhXTkQgaW5zcGVj
dGVkV2ViVmlld0h3bmQsIEhXTkQgZnJvbnRlbmRId25kLCBjb25zdCBDT01QdHI8V2ViVmlldz4m
IGZyb3RuZW5kV2ViVmlldywgSFdORCBmcm9udGVuZFdlYlZpZXdId25kLCBXZWJJbnNwZWN0b3JD
bGllbnQqIGluc3BlY3RvckNsaWVudCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZnJvbnRlbmRMb2Fk
ZWQoKTsKKyAgICAKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OlN0cmluZyBsb2NhbGl6ZWRTdHJpbmdz
VVJMKCk7CisgICAgdmlydHVhbCBXZWJDb3JlOjpTdHJpbmcgaGlkZGVuUGFuZWxzKCk7CisgICAg
CisgICAgdmlydHVhbCB2b2lkIGJyaW5nVG9Gcm9udCgpOworICAgIHZpcnR1YWwgdm9pZCBjbG9z
ZVdpbmRvdygpOworICAgIAorICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hXaW5kb3coKTsKKyAgICB2
aXJ0dWFsIHZvaWQgZGV0YWNoV2luZG93KCk7CisgICAgCisgICAgdmlydHVhbCB2b2lkIHNldEF0
dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCk7CisgICAgdmlydHVhbCB2b2lkIGlu
c3BlY3RlZFVSTENoYW5nZWQoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBuZXdVUkwpOworCitwcml2
YXRlOgorICAgIH5XZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudCgpOworCiAgICAgdm9pZCBjbG9z
ZVdpbmRvd1dpdGhvdXROb3RpZmljYXRpb25zKCk7CiAgICAgdm9pZCBzaG93V2luZG93V2l0aG91
dE5vdGlmaWNhdGlvbnMoKTsKIAorICAgIHZvaWQgZGVzdHJveUluc3BlY3RvclZpZXcoKTsKKwog
ICAgIHZvaWQgdXBkYXRlV2luZG93VGl0bGUoKTsKIAogICAgIExSRVNVTFQgb25HZXRNaW5NYXhJ
bmZvKFdQQVJBTSwgTFBBUkFNKTsKQEAgLTkwLDE2ICsxMDcsMTYgQEAgcHJpdmF0ZToKIAogICAg
IFdlYlZpZXcqIG1faW5zcGVjdGVkV2ViVmlldzsKICAgICBIV05EIG1faW5zcGVjdGVkV2ViVmll
d0h3bmQ7Ci0gICAgSFdORCBtX2h3bmQ7Ci0gICAgQ09NUHRyPFdlYlZpZXc+IG1fd2ViVmlldzsK
LSAgICBIV05EIG1fd2ViVmlld0h3bmQ7CisgICAgSFdORCBtX2Zyb250ZW5kSHduZDsKKyAgICBX
ZWJJbnNwZWN0b3JDbGllbnQqIG1faW5zcGVjdG9yQ2xpZW50OworICAgIENPTVB0cjxXZWJWaWV3
PiBtX2Zyb250ZW5kV2ViVmlldzsKKyAgICBIV05EIG1fZnJvbnRlbmRXZWJWaWV3SHduZDsKIAog
ICAgIGJvb2wgbV9zaG91bGRBdHRhY2hXaGVuU2hvd247CiAgICAgYm9vbCBtX2F0dGFjaGVkOwog
Ci0gICAgT3duUHRyPFdlYk5vZGVIaWdobGlnaHQ+IG1faGlnaGxpZ2h0OwotCiAgICAgV2ViQ29y
ZTo6U3RyaW5nIG1faW5zcGVjdGVkVVJMOworICAgIGJvb2wgbV9kZXN0cm95aW5nSW5zcGVjdG9y
VmlldzsKIAogICAgIHN0YXRpYyBmcmllbmQgTFJFU1VMVCBDQUxMQkFDSyBXZWJJbnNwZWN0b3JX
bmRQcm9jKEhXTkQsIFVJTlQsIFdQQVJBTSwgTFBBUkFNKTsKIH07CmRpZmYgLS1naXQgYS9XZWJL
aXQvd2luL1dlYkluc3BlY3Rvci5jcHAgYi9XZWJLaXQvd2luL1dlYkluc3BlY3Rvci5jcHAKaW5k
ZXggZTRhYzMyYi4uMDMzNzcxMSAxMDA2NDQKLS0tIGEvV2ViS2l0L3dpbi9XZWJJbnNwZWN0b3Iu
Y3BwCisrKyBiL1dlYktpdC93aW4vV2ViSW5zcGVjdG9yLmNwcApAQCAtMTMxLDE5ICsxMzEsMTEg
QEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJJbnNwZWN0b3I6OmNsb3NlKCkKIAogSFJF
U1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJJbnNwZWN0b3I6OmF0dGFjaCgpCiB7Ci0gICAgaWYg
KG1fd2ViVmlldykKLSAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX3dlYlZpZXctPnBhZ2UoKSkK
LSAgICAgICAgICAgIHBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+YXR0YWNoV2luZG93KCk7
Ci0KICAgICByZXR1cm4gU19PSzsKIH0KIAogSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJJ
bnNwZWN0b3I6OmRldGFjaCgpCiB7Ci0gICAgaWYgKG1fd2ViVmlldykKLSAgICAgICAgaWYgKFBh
Z2UqIHBhZ2UgPSBtX3dlYlZpZXctPnBhZ2UoKSkKLSAgICAgICAgICAgIHBhZ2UtPmluc3BlY3Rv
ckNvbnRyb2xsZXIoKS0+ZGV0YWNoV2luZG93KCk7Ci0KICAgICByZXR1cm4gU19PSzsKIH0KIApk
aWZmIC0tZ2l0IGEvV2ViS2l0L3d4L0NoYW5nZUxvZyBiL1dlYktpdC93eC9DaGFuZ2VMb2cKaW5k
ZXggNGFjNzYwOS4uZGY3MmNkNSAxMDA2NDQKLS0tIGEvV2ViS2l0L3d4L0NoYW5nZUxvZworKysg
Yi9XZWJLaXQvd3gvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTAtMDMtMTAgIFl1cnkg
U2VtaWtoYXRza3kgPHl1cnlzQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbnRyb2R1Y2UgSW5zcGVjdG9yRnJvbnRlbmRDbGll
bnQgdGhhdCBwcm92aWRlcyBJbnNwZWN0b3JGcm9udGVuZCB3aXRoIGFuIGludGVyZmFjZSB0byB0
aGUgZW1iZWRkZXIuIEluc3BlY3RvckNsaWVudCBub3cgc2VydmVzIGFzIGEgZGVsZWdhdGUgZm9y
IEluc3BlY3RvckNvbnRyb2xsZXIgYW5kIGRvZXMgbm90IGNvbnRhaW4gbWV0aG9kcyBmb3IgbWFu
YWdpbmcgaW5zcGVjdG9yIGZyb250ZW5kIHdpbmRvdy4gVGhhdCBhbGxvd3MgdG8gY3JlYXRlIHJl
bW90ZSBJbnNwZWN0b3JGcm9udGVuZEhvc3QuCisKKyAgICAgICAgSW50cm9kdWNlIEluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50IHRoYXQgd291bGQgcHJvdmlkZSBJbnNwZWN0b3JGcm9udGVuZCB3aXRo
IGFuIGludGVyZmFjZSB0byB0aGUgZW1iZWRkZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTM1MDM2CisKKyAgICAgICAgKiBXZWJLaXRTdXBwb3J0L0lu
c3BlY3RvckNsaWVudFd4LmNwcDoKKyAgICAgICAgKiBXZWJLaXRTdXBwb3J0L0luc3BlY3RvckNs
aWVudFd4Lmg6CisKIDIwMTAtMDMtMDIgIEFkYW0gVHJlYXQgIDxhdHJlYXRAcmltLmNvbT4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBEYXZlIEh5YXR0LgpkaWZmIC0tZ2l0IGEvV2ViS2l0L3d4L1dl
YktpdFN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50V3guY3BwIGIvV2ViS2l0L3d4L1dlYktpdFN1cHBv
cnQvSW5zcGVjdG9yQ2xpZW50V3guY3BwCmluZGV4IGZmMjFhZTAuLjQzZmJiMmIgMTAwNjQ0Ci0t
LSBhL1dlYktpdC93eC9XZWJLaXRTdXBwb3J0L0luc3BlY3RvckNsaWVudFd4LmNwcAorKysgYi9X
ZWJLaXQvd3gvV2ViS2l0U3VwcG9ydC9JbnNwZWN0b3JDbGllbnRXeC5jcHAKQEAgLTQ3LDQ1ICs0
Nyw4IEBAIHZvaWQgSW5zcGVjdG9yQ2xpZW50V3g6Omluc3BlY3RvckRlc3Ryb3llZCgpCiAgICAg
bm90SW1wbGVtZW50ZWQoKTsKIH0KIAotUGFnZSogSW5zcGVjdG9yQ2xpZW50V3g6OmNyZWF0ZVBh
Z2UoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLVN0cmlu
ZyBJbnNwZWN0b3JDbGllbnRXeDo6bG9jYWxpemVkU3RyaW5nc1VSTCgpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBJbnNwZWN0b3JD
bGllbnRXeDo6aGlkZGVuUGFuZWxzKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJl
dHVybiBTdHJpbmcoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDbGllbnRXeDo6c2hvd1dpbmRvdygp
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLSAgICAKLXZvaWQgSW5zcGVjdG9yQ2xpZW50
V3g6OmNsb3NlV2luZG93KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIElu
c3BlY3RvckNsaWVudFd4OjphdHRhY2hXaW5kb3coKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ2xpZW50V3g6OmRldGFjaFdpbmRvdygpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KIAotdm9pZCBJbnNwZWN0b3JDbGllbnRXeDo6c2V0QXR0YWNoZWRX
aW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KQordm9pZCBJbnNwZWN0b3JDbGllbnRXeDo6b3Bl
bkluc3BlY3RvckZyb250ZW5kKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXIqKTsKIHsKICAg
ICBub3RJbXBsZW1lbnRlZCgpOwogfQpAQCAtMTAwLDExICs2Myw2IEBAIHZvaWQgSW5zcGVjdG9y
Q2xpZW50V3g6OmhpZGVIaWdobGlnaHQoKQogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yQ2xpZW50V3g6Omluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJiBu
ZXdVUkwpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQogdm9pZCBJbnNwZWN0b3JDbGll
bnRXeDo6cG9wdWxhdGVTZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5LCBTdHJpbmcqIHNldHRpbmcp
CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKQEAgLTExNSw5ICs3Myw0IEBAIHZvaWQgSW5zcGVj
dG9yQ2xpZW50V3g6OnN0b3JlU2V0dGluZyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5n
JiBzZXR0aW5nKQogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ2xp
ZW50V3g6Omluc3BlY3RvcldpbmRvd09iamVjdENsZWFyZWQoKQotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci19Ci0KIH07CmRpZmYgLS1naXQgYS9XZWJLaXQvd3gvV2ViS2l0U3VwcG9ydC9JbnNw
ZWN0b3JDbGllbnRXeC5oIGIvV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50
V3guaAppbmRleCBmOTA1ODE3Li43Njc1ZGMxIDEwMDY0NAotLS0gYS9XZWJLaXQvd3gvV2ViS2l0
U3VwcG9ydC9JbnNwZWN0b3JDbGllbnRXeC5oCisrKyBiL1dlYktpdC93eC9XZWJLaXRTdXBwb3J0
L0luc3BlY3RvckNsaWVudFd4LmgKQEAgLTQxLDI5ICs0MSwxMyBAQCBwdWJsaWM6CiAKICAgICB2
aXJ0dWFsIHZvaWQgaW5zcGVjdG9yRGVzdHJveWVkKCk7CiAKLSAgICB2aXJ0dWFsIFBhZ2UqIGNy
ZWF0ZVBhZ2UoKTsKLQotICAgIHZpcnR1YWwgU3RyaW5nIGxvY2FsaXplZFN0cmluZ3NVUkwoKTsK
LQotICAgIHZpcnR1YWwgU3RyaW5nIGhpZGRlblBhbmVscygpOwotCi0gICAgdmlydHVhbCB2b2lk
IHNob3dXaW5kb3coKTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xvc2VXaW5kb3coKTsKLQotICAgIHZp
cnR1YWwgdm9pZCBhdHRhY2hXaW5kb3coKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoV2luZG93
KCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQg
aGVpZ2h0KTsKKyAgICB2aXJ0dWFsIHZvaWQgb3Blbkluc3BlY3RvckZyb250ZW5kKFdlYkNvcmU6
Okluc3BlY3RvckNvbnRyb2xsZXIqKTsKIAogICAgIHZpcnR1YWwgdm9pZCBoaWdobGlnaHQoTm9k
ZSopOwogICAgIHZpcnR1YWwgdm9pZCBoaWRlSGlnaGxpZ2h0KCk7CiAKLSAgICB2aXJ0dWFsIHZv
aWQgaW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIG5ld1VSTCk7Ci0KICAgICB2aXJ0
dWFsIHZvaWQgcG9wdWxhdGVTZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5LCBTdHJpbmcqIHZhbHVl
KTsKICAgICB2aXJ0dWFsIHZvaWQgc3RvcmVTZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5LCBjb25z
dCBTdHJpbmcmIHZhbHVlKTsKLQotICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0b3JXaW5kb3dPYmpl
Y3RDbGVhcmVkKCk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50498</attachid>
            <date>2010-03-11 07:23:32 -0800</date>
            <delta_ts>2010-03-12 06:52:41 -0800</delta_ts>
            <desc>patch</desc>
            <filename>frontend-client6.patch</filename>
            <type>text/plain</type>
            <size>163641</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MzUyZGJkYy4uZjQxMTM0NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMTAgQEAKKzIwMTAtMDMtMTEgIFl1cnkgU2VtaWto
YXRza3kgPHl1cnlzQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBJbnRyb2R1Y2UgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQgdGhh
dCBwcm92aWRlcyBJbnNwZWN0b3JGcm9udGVuZCB3aXRoIGFuIGludGVyZmFjZSB0byB0aGUgZW1i
ZWRkZXIuIEluc3BlY3RvckNsaWVudCBub3cgc2VydmVzIGFzIGEgZGVsZWdhdGUgZm9yIEluc3Bl
Y3RvckNvbnRyb2xsZXIgYW5kIGRvZXMgbm90IGNvbnRhaW4gbWV0aG9kcyBmb3IgbWFuYWdpbmcg
aW5zcGVjdG9yIGZyb250ZW5kIHdpbmRvdy4gVGhhdCBhbGxvd3MgdG8gY3JlYXRlIHJlbW90ZSBJ
bnNwZWN0b3JGcm9udGVuZEhvc3QuCisKKyAgICAgICAgSW50cm9kdWNlIEluc3BlY3RvckZyb250
ZW5kQ2xpZW50IHRoYXQgd291bGQgcHJvdmlkZSBJbnNwZWN0b3JGcm9udGVuZCB3aXRoIGFuIGlu
dGVyZmFjZSB0byB0aGUgZW1iZWRkZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTM1MDM2CisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiAoT09QUyEpCisK
KyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLkluc3BlY3Rvci5l
eHA6CisgICAgICAgICogV2ViQ29yZS5iYXNlLmV4cDoKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6
CisgICAgICAgICogV2ViQ29yZS5vcmRlcjoKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAg
ICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaW5zcGVj
dG9yL0NvbnNvbGVNZXNzYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnNvbGVNZXNzYWdl
OjphZGRUb0Zyb250ZW5kKToKKyAgICAgICAgKiBpbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuaDoK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ2xpZW50Lmg6CisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
Q29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JDb250cm9sbGVyOjp+SW5zcGVjdG9yQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0ZWRQYWdlRGVzdHJveWVkKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OndpbmRvd1Zpc2libGUpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZnJvbnRlbmRSZWFkeSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjp3aWxsQ2xvc2VGcm9udGVuZCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjphZGRDb25zb2xlTWVzc2FnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRJbnNwZWN0b3JGcm9udGVuZENs
aWVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0ZWRX
aW5kb3dTY3JpcHRPYmplY3RDbGVhcmVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNv
bnRyb2xsZXI6OnNldEZyb250ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRy
b2xsZXI6OnNob3cpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6Y2xv
c2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6cmVsZWFzZURPTUFn
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnBvcHVsYXRlU2Ny
aXB0T2JqZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRD
b21taXRMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmdldFBy
b2ZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZW5hYmxlRGVi
dWdnZXIpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpoYXNJbnNwZWN0b3JGcm9udGVuZENs
aWVudCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kOjpJbnNwZWN0b3JGcm9udGVuZCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZDo6fkluc3BlY3RvckZyb250ZW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kOjphZGRDb25zb2xlTWVzc2FnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZDo6YnJpbmdUb0Zyb250KToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kOjppbnNwZWN0ZWRVUkxDaGFuZ2VkKToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuaDoKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JGcm9udGVuZENsaWVudDo6fkluc3BlY3RvckZyb250ZW5kQ2xpZW50KToKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RnJvbnRlbmRNZW51UHJvdmlkZXI6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpGcm9udGVuZE1lbnVQcm92aWRlcjo6ZGlzY29ubmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGcm9udGVuZE1lbnVQcm92aWRlcjo6RnJvbnRlbmRNZW51UHJvdmlkZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6RnJvbnRlbmRNZW51UHJvdmlkZXI6On5Gcm9udGVuZE1lbnVQcm92aWRl
cik6CisgICAgICAgIChXZWJDb3JlOjpGcm9udGVuZE1lbnVQcm92aWRlcjo6cG9wdWxhdGVDb250
ZXh0TWVudSk6CisgICAgICAgIChXZWJDb3JlOjpGcm9udGVuZE1lbnVQcm92aWRlcjo6Y29udGV4
dE1lbnVJdGVtU2VsZWN0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJvbnRlbmRNZW51UHJvdmlk
ZXI6OmNvbnRleHRNZW51Q2xlYXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9u
dGVuZENsaWVudExvY2FsOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6On5JbnNwZWN0b3JGcm9udGVu
ZENsaWVudExvY2FsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50
TG9jYWw6OndpbmRvd09iamVjdENsZWFyZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RnJvbnRlbmRDbGllbnRMb2NhbDo6ZnJvbnRlbmRMb2FkZWQpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6Y2FuQXR0YWNoV2luZG93KToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OmNoYW5nZUF0dGFjaGVkV2lu
ZG93SGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9j
YWw6Om1vdmVXaW5kb3dCeSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENs
aWVudExvY2FsOjpzaG93Q29udGV4dE1lbnUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RnJvbnRlbmRDbGllbnRMb2NhbDo6c2V0QXR0YWNoZWRXaW5kb3cpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6cmVzdG9yZUF0dGFjaGVkV2luZG93SGVp
Z2h0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OmNv
bnN0cmFpbmVkQXR0YWNoZWRXaW5kb3dIZWlnaHQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmg6IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9J
bnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJv
bnRlbmRIb3N0OjpJbnNwZWN0b3JGcm9udGVuZEhvc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yRnJvbnRlbmRIb3N0Ojp+SW5zcGVjdG9yRnJvbnRlbmRIb3N0KToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckZyb250ZW5kSG9zdDo6bG9hZGVkKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckZyb250ZW5kSG9zdDo6YXR0YWNoKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckZyb250ZW5kSG9zdDo6ZGV0YWNoKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZy
b250ZW5kSG9zdDo6Y2xvc2VXaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJv
bnRlbmRIb3N0OjpicmluZ1RvRnJvbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJv
bnRlbmRIb3N0OjppbnNwZWN0ZWRVUkxDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckZyb250ZW5kSG9zdDo6Y2FuQXR0YWNoV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckZyb250ZW5kSG9zdDo6c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRIb3N0Ojptb3ZlV2luZG93QnkpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRIb3N0OjpzaG93Q29udGV4dE1lbnUpOgorICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckZyb250ZW5kSG9zdDo6Y3JlYXRlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yRnJvbnRlbmRIb3N0LmlkbDoKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0lu
c3BlY3RvckZyb250ZW5kSG9zdFN0dWIuanM6CisgICAgICAgICguV2ViSW5zcGVjdG9yLkluc3Bl
Y3RvckZyb250ZW5kSG9zdFN0dWIucHJvdG90eXBlLmJyaW5nVG9Gcm9udCk6CisgICAgICAgICgu
V2ViSW5zcGVjdG9yLkluc3BlY3RvckZyb250ZW5kSG9zdFN0dWIucHJvdG90eXBlLmluc3BlY3Rl
ZFVSTENoYW5nZWQpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpz
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLmxvYWRlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
Y2xvc2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLmJyaW5nVG9Gcm9udCk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuaW5zcGVjdGVkVVJMQ2hhbmdlZCk6CisgICAgICAgICogbG9hZGVyL0VtcHR5
Q2xpZW50cy5oOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlJbnNwZWN0b3JDbGllbnQ6Om9wZW5J
bnNwZWN0b3JGcm9udGVuZCk6CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpkaXNwYXRjaERpZENsZWFyV2luZG93T2JqZWN0
SW5Xb3JsZCk6CisgICAgICAgICogcGFnZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBh
Z2U6OlBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6flBhZ2UpOgorICAgICAgICAqIHBh
Z2UvUGFnZS5oOgorICAgICAgICAqIHBsYXRmb3JtL0NvbnRleHRNZW51LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRleHRNZW51Ojpwb3B1bGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250
ZXh0TWVudTo6YWRkSW5zcGVjdEVsZW1lbnRJdGVtKToKKwogMjAxMC0wMy0xMCAgU3RldmUgQmxv
Y2sgIDxzdGV2ZWJsb2NrQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSmVyZW15
IE9ybG93LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1dlYkNvcmUvR05V
bWFrZWZpbGUuYW0KaW5kZXggMWI0ZmRiYy4uOTcyM2RkOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9H
TlVtYWtlZmlsZS5hbQorKysgYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC0xMjM0LDYgKzEy
MzQsOSBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNvbnRyb2xsZXIuaCBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuY3Bw
IFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5oIFwKKwlXZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudC5oIFwKKwlXZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmNwcCBcCisJV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5oIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JGcm9udGVuZEhvc3QuY3BwIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVu
ZEhvc3QuaCBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2UuY3BwIFwKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5JbnNwZWN0b3IuZXhwIGIvV2ViQ29yZS9XZWJDb3Jl
Lkluc3BlY3Rvci5leHAKaW5kZXggMzc5YjdhMi4uZDVjMjFjMyAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9XZWJDb3JlLkluc3BlY3Rvci5leHAKKysrIGIvV2ViQ29yZS9XZWJDb3JlLkluc3BlY3Rvci5l
eHAKQEAgLTEsMTEgKzEsOSBAQAogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTBz
ZXRTZXR0aW5nRVJLTlNfNlN0cmluZ0VTM18KLV9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJv
bGxlcjEyYXR0YWNoV2luZG93RXYKLV9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjEy
ZGV0YWNoV2luZG93RXYKIF9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjE0ZW5hYmxl
RGVidWdnZXJFdgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTRlbmFibGVQcm9m
aWxlckViYgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTVkaXNhYmxlRGVidWdn
ZXJFYgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTVkaXNhYmxlUHJvZmlsZXJF
YgotX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTZzZXRXaW5kb3dWaXNpYmxlRWJi
CitfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIyNnNldEluc3BlY3RvckZyb250ZW5k
Q2xpZW50RU4zV1RGMTBQYXNzT3duUHRySU5TXzIzSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRFRUUK
IF9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjI2c3RvcFVzZXJJbml0aWF0ZWRQcm9m
aWxpbmdFdgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMjdzdGFydFVzZXJJbml0
aWF0ZWRQcm9maWxpbmdFUE5TXzVUaW1lcklTMF9FRQogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JD
b250cm9sbGVyNHNob3dFdgpAQCAtMTgsMyArMTYsMTMgQEAgX19aTks3V2ViQ29yZTE5SW5zcGVj
dG9yQ29udHJvbGxlcjdlbmFibGVkRXYKIF9fWk5LN1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xs
ZXI3c2V0dGluZ0VSS05TXzZTdHJpbmdFCiBfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xs
ZXIyMXN0YXJ0VGltZWxpbmVQcm9maWxlckV2CiBfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRy
b2xsZXIyMHN0b3BUaW1lbGluZVByb2ZpbGVyRXYKK19fWk43V2ViQ29yZTI4SW5zcGVjdG9yRnJv
bnRlbmRDbGllbnRMb2NhbEMyRVBOU18xOUluc3BlY3RvckNvbnRyb2xsZXJFUE5TXzRQYWdlRQor
X19aTjdXZWJDb3JlMjhJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsRDJFdgorX19aTjdXZWJD
b3JlMjhJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsMTl3aW5kb3dPYmplY3RDbGVhcmVkRXYK
K19fWk43V2ViQ29yZTI4SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDE0ZnJvbnRlbmRMb2Fk
ZWRFdgorX19aTjdXZWJDb3JlMjhJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsMjdyZXN0b3Jl
QXR0YWNoZWRXaW5kb3dIZWlnaHRFdgorX19aTjdXZWJDb3JlMjhJbnNwZWN0b3JGcm9udGVuZENs
aWVudExvY2FsMTJtb3ZlV2luZG93QnlFZmYKK19fWk43V2ViQ29yZTI4SW5zcGVjdG9yRnJvbnRl
bmRDbGllbnRMb2NhbDE1Y2FuQXR0YWNoV2luZG93RXYKK19fWk43V2ViQ29yZTI4SW5zcGVjdG9y
RnJvbnRlbmRDbGllbnRMb2NhbDE1c2hvd0NvbnRleHRNZW51RVBOU181RXZlbnRFUktOM1dURjZW
ZWN0b3JJUE5TXzE1Q29udGV4dE1lbnVJdGVtRUxtMEVFRQorX19aTjdXZWJDb3JlMjhJbnNwZWN0
b3JGcm9udGVuZENsaWVudExvY2FsMTdzZXRBdHRhY2hlZFdpbmRvd0ViCitfX1pON1dlYkNvcmUy
OEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwyNmNoYW5nZUF0dGFjaGVkV2luZG93SGVpZ2h0
RWoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cCBiL1dlYkNvcmUvV2ViQ29y
ZS5iYXNlLmV4cAppbmRleCA0MzY0YWVhLi45YmFmYWQ3IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dl
YkNvcmUuYmFzZS5leHAKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCkBAIC04NzQsNyAr
ODc0LDYgQEAgX19aTks3V2ViQ29yZTE2VmlzaWJsZVNlbGVjdGlvbjIzaXNDb250ZW50UmljaGx5
RWRpdGFibGVFdgogX19aTks3V2ViQ29yZTE2VmlzaWJsZVNlbGVjdGlvbjVpc0FsbEVOU18yMVN0
YXlJbkVkaXRhYmxlQ29udGVudEUKIF9fWk5LN1dlYkNvcmUxN1Jlc291cmNlRXJyb3JCYXNlOGxh
enlJbml0RXYKIF9fWk5LN1dlYkNvcmUxOUFuaW1hdGlvbkNvbnRyb2xsZXIyNG51bWJlck9mQWN0
aXZlQW5pbWF0aW9uc0V2Ci1fX1pOSzdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTVjYW5B
dHRhY2hXaW5kb3dFdgogX19aTks3V2ViQ29yZTE5UmVzb3VyY2VSZXF1ZXN0QmFzZTEwaHR0cE1l
dGhvZEV2CiBfX1pOSzdXZWJDb3JlMTlSZXNvdXJjZVJlcXVlc3RCYXNlM3VybEV2CiBfX1pOSzdX
ZWJDb3JlMTlSZXNvdXJjZVJlcXVlc3RCYXNlN2lzRW1wdHlFdgpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA3MWZhNjlkLi4zNzI2
MWEyIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9XZWJDb3JlL1dlYkNv
cmUuZ3lwaQpAQCAtMTYyNiw2ICsxNjI2LDkgQEAKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5z
cGVjdG9yRE9NU3RvcmFnZVJlc291cmNlLmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNw
ZWN0b3JGcm9udGVuZC5jcHAnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JGcm9u
dGVuZC5oJywKKyAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQu
aCcsCisgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwu
Y3BwJywKKyAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2Nh
bC5oJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcCcs
CiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5oJywKICAgICAg
ICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2UuY3BwJywKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvV2ViQ29yZS5vcmRlciBiL1dlYkNvcmUvV2ViQ29yZS5vcmRlcgppbmRleCBhOGQyMGZk
Li40OGYzMjFiIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUub3JkZXIKKysrIGIvV2ViQ29y
ZS9XZWJDb3JlLm9yZGVyCkBAIC0yMzc4OSw3ICsyMzc4OSw2IEBAIF9fWk43V2ViQ29yZTE4U2Ny
aXB0RnVuY3Rpb25DYWxsMTRhcHBlbmRBcmd1bWVudEViCiBfX1pON1dlYkNvcmUxOFNjcmlwdEZ1
bmN0aW9uQ2FsbDRjYWxsRXYKIF9fWk43V2ViQ29yZTE4U2NyaXB0RnVuY3Rpb25DYWxsNGNhbGxF
UmJiCiBfX1pON1dlYkNvcmU0NGpzSW5zcGVjdG9yQ29udHJvbGxlclByb3RvdHlwZUZ1bmN0aW9u
QXR0YWNoRVBOM0pTQzlFeGVjU3RhdGVFUE5TMF84SlNPYmplY3RFTlMwXzdKU1ZhbHVlRVJLTlMw
XzdBcmdMaXN0RQotX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTJhdHRhY2hXaW5k
b3dFdgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMjFwb3B1bGF0ZVNjcmlwdE9i
amVjdHNFdgogX19aTjdXZWJDb3JlTDE4Y2FsbFNpbXBsZUZ1bmN0aW9uRVBOM0pTQzlFeGVjU3Rh
dGVFUktOU18xMlNjcmlwdE9iamVjdEVQS2MKIF9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJv
bGxlcjlzaG93UGFuZWxFTlMwXzEzU3BlY2lhbFBhbmVsc0UKQEAgLTIzODUwLDcgKzIzODQ5LDYg
QEAgX19aTjdXZWJDb3JlTDE5ZHJhd0hpZ2hsaWdodEZvckJveEVSTlNfMTVHcmFwaGljc0NvbnRl
eHRFUktOU185RmxvYXRRdWFkRVM0X1M0X1MKIF9fWk43V2ViQ29yZUwxNmRyYXdPdXRsaW5lZFF1
YWRFUk5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfOUZsb2F0UXVhZEVSS05TXzVDb2xvckUKIF9f
Wk43V2ViQ29yZUwxMHF1YWRUb1BhdGhFUktOU185RmxvYXRRdWFkRQogX19aTjdXZWJDb3JlNDRq
c0luc3BlY3RvckNvbnRyb2xsZXJQcm90b3R5cGVGdW5jdGlvbkRldGFjaEVQTjNKU0M5RXhlY1N0
YXRlRVBOUzBfOEpTT2JqZWN0RU5TMF83SlNWYWx1ZUVSS05TMF83QXJnTGlzdEUKLV9fWk43V2Vi
Q29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjEyZGV0YWNoV2luZG93RXYKIF9fWk43V2ViQ29yZTU2
anNJbnNwZWN0b3JDb250cm9sbGVyUHJvdG90eXBlRnVuY3Rpb25Nb3ZlQnlVbnJlc3RyaWN0ZWRF
UE4zSlNDOUV4ZWNTdGF0ZUVQTlMwXzhKU09iamVjdEVOUzBfN0pTVmFsdWVFUktOUzBfN0FyZ0wK
IF9fWk5LN1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIxMm1vdmVXaW5kb3dCeUVmZgogX19a
TjdXZWJDb3JlTDI0ZHJhd091dGxpbmVkUXVhZFdpdGhDbGlwRVJOU18xNUdyYXBoaWNzQ29udGV4
dEVSS05TXzlGbG9hdFF1YWRFUzRfUktOU181Q29sb3JFCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dl
YkNvcmUucHJvIGIvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCAwMmRlMTk4Li5kMDM1ZDk4IDEw
MDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUucHJvCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8K
QEAgLTY5NSw2ICs2OTUsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9y
RE9NQWdlbnQuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNl
LmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmNwcCBcCisgICAgaW5zcGVj
dG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5z
cGVjdG9yRnJvbnRlbmRIb3N0LmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNl
LmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuY3BwIFwKQEAgLTEz
OTgsNiArMTM5OSw4IEBAIEhFQURFUlMgKz0gXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JEYXRh
YmFzZVJlc291cmNlLmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlUmVzb3Vy
Y2UuaCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmggXAorICAgIGluc3BlY3Rv
ci9JbnNwZWN0b3JGcm9udGVuZENsaWVudC5oIFwKKyAgICBpbnNwZWN0b3IvSW5zcGVjdG9yRnJv
bnRlbmRDbGllbnRMb2NhbC5oIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0
LmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZS5oIFwKICAgICBpbnNwZWN0b3Iv
SW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS52
Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qCmluZGV4IDQxM2FkNTguLmQ0ZjZhMTUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS52
Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3Jl
LnZjcHJvagpAQCAtNDI3NTcsNiArNDI3NTcsMTggQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJ
CTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3RvckZyb250ZW5k
Q2xpZW50LmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5jcHAiDQorCQkJ
CT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0
b3JcSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0K
KwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3RvckZyb250
ZW5kSG9zdC5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAxMGY3ZTBlLi5lMzY4ZjIzIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDg1Niw2ICs0ODU2LDkgQEAKIAkJ
RUQ1MDFEQzYwQjI0OUYyOTAwQUUxOEQ5IC8qIEVkaXRvck1hYy5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEVENTAxREM1MEIyNDlGMjkwMEFFMThEOSAv
KiBFZGl0b3JNYWMubW0gKi87IH07CiAJCUVERTNBNTAwMEM3QTQzMDYwMDk1NkEzNyAvKiBDb2xv
ck1hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRURF
M0E0RkYwQzdBNDMwNjAwOTU2QTM3IC8qIENvbG9yTWFjLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRURFQzk4MDMwQUVEN0UxNzAwNTkxMzdGIC8q
IFdlYkNvcmVQcmVmaXguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEVERUM5ODAyMEFFRDdFMTcwMDU5MTM3RiAvKiBXZWJDb3JlUHJlZml4LmggKi87IH07
CisJCUYzNDRDNzE0MTEyNUI4MkMwMEYyNkVFRSAvKiBJbnNwZWN0b3JGcm9udGVuZENsaWVudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjM0NEM3MTIx
MTI1QjgyQzAwRjI2RUVFIC8qIEluc3BlY3RvckZyb250ZW5kQ2xpZW50LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRjM0NEM3NTMxMTI5NEQ5RDAw
RjI2RUVFIC8qIEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEYzNDRDNzUyMTEyOTREOUQwMEYyNkVFRSAv
KiBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRjM0NEM3NTgxMTI5NEZGNjAwRjI2RUVFIC8qIElu
c3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRjM0NEM3NTcxMTI5NEZGNjAwRjI2RUVFIC8qIEluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50TG9jYWwuY3BwICovOyB9OwogCQlGMzY0NEFGRjExMTk4MDU5MDBFMEQ1
MzcgLyogSW5qZWN0ZWRTY3JpcHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRjM2NDRBRkQxMTE5ODA1OTAwRTBENTM3IC8qIEluamVjdGVkU2NyaXB0
LmNwcCAqLzsgfTsKIAkJRjM2NDRCMDAxMTE5ODA1OTAwRTBENTM3IC8qIEluamVjdGVkU2NyaXB0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGMzY0NEFG
RTExMTk4MDU5MDBFMEQ1MzcgLyogSW5qZWN0ZWRTY3JpcHQuaCAqLzsgfTsKIAkJRjRFQUY0QUUx
MEM3NDJCMTAwOTEwMEQzIC8qIE9wZW5UeXBlU2FuaXRpemVyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0RUFGNEFDMTBDNzQyQjEwMDkxMDBEMyAv
KiBPcGVuVHlwZVNhbml0aXplci5jcHAgKi87IH07CkBAIC0xMDE4OSw2ICsxMDE5Miw5IEBACiAJ
CUVENTAxREM1MEIyNDlGMjkwMEFFMThEOSAvKiBFZGl0b3JNYWMubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gRWRpdG9yTWFjLm1tOyBwYXRoID0gbWFjL0VkaXRv
ck1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRURFM0E0RkYwQzdBNDMwNjAw
OTU2QTM3IC8qIENvbG9yTWFjLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENv
bG9yTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUVERUM5ODAyMEFFRDdFMTcw
MDU5MTM3RiAvKiBXZWJDb3JlUHJlZml4LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXZWJDb3JlUHJlZml4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0g
NDsgdXNlc1RhYnMgPSAwOyB9OworCQlGMzQ0QzcxMjExMjVCODJDMDBGMjZFRUUgLyogSW5zcGVj
dG9yRnJvbnRlbmRDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5z
cGVjdG9yRnJvbnRlbmRDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRjM0
NEM3NTIxMTI5NEQ5RDAwRjI2RUVFIC8qIEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRM
b2NhbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGMzQ0Qzc1NzExMjk0RkY2MDBG
MjZFRUUgLyogSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjM2NDRBRkQxMTE5ODA1OTAwRTBENTM3IC8q
IEluamVjdGVkU2NyaXB0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEluamVjdGVkU2NyaXB0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjM2NDRB
RkUxMTE5ODA1OTAwRTBENTM3IC8qIEluamVjdGVkU2NyaXB0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEluamVjdGVkU2NyaXB0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUY0RUFGNEFDMTBDNzQyQjEwMDkxMDBEMyAvKiBPcGVuVHlwZVNhbml0aXplci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBPcGVuVHlwZVNhbml0aXplci5j
cHA7IHBhdGggPSBvcGVudHlwZS9PcGVuVHlwZVNhbml0aXplci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xMDcyNCw2ICsxMDczMCw5IEBACiAJCQkJNDFGMDYxNzIwRjVGMDBB
QzAwQTA3RUFDIC8qIEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZS5oICovLAogCQkJCTdBRUQz
RTAzMEZCQjFFQUEwMEQyQjAzQyAvKiBJbnNwZWN0b3JGcm9udGVuZC5jcHAgKi8sCiAJCQkJN0FF
RDNFMDQwRkJCMUVBQTAwRDJCMDNDIC8qIEluc3BlY3RvckZyb250ZW5kLmggKi8sCisJCQkJRjM0
NEM3MTIxMTI1QjgyQzAwRjI2RUVFIC8qIEluc3BlY3RvckZyb250ZW5kQ2xpZW50LmggKi8sCisJ
CQkJRjM0NEM3NTcxMTI5NEZGNjAwRjI2RUVFIC8qIEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9j
YWwuY3BwICovLAorCQkJCUYzNDRDNzUyMTEyOTREOUQwMEYyNkVFRSAvKiBJbnNwZWN0b3JGcm9u
dGVuZENsaWVudExvY2FsLmggKi8sCiAJCQkJN0EwRTc3MEIxMEMwMEE4ODAwQTAyNzZFIC8qIElu
c3BlY3RvckZyb250ZW5kSG9zdC5jcHAgKi8sCiAJCQkJN0EwRTc3MEMxMEMwMEE4ODAwQTAyNzZF
IC8qIEluc3BlY3RvckZyb250ZW5kSG9zdC5oICovLAogCQkJCTdBMEU3NzBEMTBDMDBBODgwMEEw
Mjc2RSAvKiBJbnNwZWN0b3JGcm9udGVuZEhvc3QuaWRsICovLApAQCAtMTc0MjMsNiArMTc0MzIs
OCBAQAogCQkJCTdBMjQ1ODdDMTAyMUVBRjQwMDBBMDBBQSAvKiBJbnNwZWN0b3JET01BZ2VudC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNDFGMDYxNzQwRjVGMDBBQzAwQTA3RUFDIC8qIEluc3BlY3Rv
ckRPTVN0b3JhZ2VSZXNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0FFRDNFMDYwRkJCMUVB
QTAwRDJCMDNDIC8qIEluc3BlY3RvckZyb250ZW5kLmggaW4gSGVhZGVycyAqLywKKwkJCQlGMzQ0
QzcxNDExMjVCODJDMDBGMjZFRUUgLyogSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaCBpbiBIZWFk
ZXJzICovLAorCQkJCUYzNDRDNzUzMTEyOTREOUQwMEYyNkVFRSAvKiBJbnNwZWN0b3JGcm9udGVu
ZENsaWVudExvY2FsLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QTBFNzcwRjEwQzAwQTg4MDBBMDI3
NkUgLyogSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmggaW4gSGVhZGVycyAqLywKIAkJCQk0MUYwNjIw
MTBGNUYwQjY2MDBBMDdFQUMgLyogSW5zcGVjdG9yUmVzb3VyY2UuaCBpbiBIZWFkZXJzICovLAog
CQkJCTc1NDEzM0E4MTAyRTAwRTgwMDA3NUQwMCAvKiBJbnNwZWN0b3JUaW1lbGluZUFnZW50Lmgg
aW4gSGVhZGVycyAqLywKQEAgLTE5NjM3LDYgKzE5NjQ4LDcgQEAKIAkJCQk3QTI0NTg3QjEwMjFF
QUY0MDAwQTAwQUEgLyogSW5zcGVjdG9yRE9NQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NDFGMDYxNzUwRjVGMDBBQzAwQTA3RUFDIC8qIEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk3QUVEM0UwNTBGQkIxRUFBMDBEMkIwM0MgLyogSW5zcGVj
dG9yRnJvbnRlbmQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRjM0NEM3NTgxMTI5NEZGNjAwRjI2
RUVFIC8qIEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJN0EwRTc3MEUxMEMwMEE4ODAwQTAyNzZFIC8qIEluc3BlY3RvckZyb250ZW5kSG9zdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk0MUYwNjIwMjBGNUYwQjY2MDBBMDdFQUMgLyogSW5zcGVjdG9y
UmVzb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzU0MTMzQUExMDJFMDBGNDAwMDc1RDAw
IC8qIEluc3BlY3RvclRpbWVsaW5lQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQg
YS9XZWJDb3JlL2luc3BlY3Rvci9Db25zb2xlTWVzc2FnZS5jcHAgYi9XZWJDb3JlL2luc3BlY3Rv
ci9Db25zb2xlTWVzc2FnZS5jcHAKaW5kZXggNTUzOWU5ZC4uNDA1NDk5NiAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9pbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVj
dG9yL0NvbnNvbGVNZXNzYWdlLmNwcApAQCAtMzEsOSArMzEsMTIgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJDb25zb2xlTWVzc2FnZS5oIgogCisjaW5jbHVkZSAiSW5qZWN0ZWRT
Y3JpcHQuaCIKKyNpbmNsdWRlICJJbmplY3RlZFNjcmlwdEhvc3QuaCIKICNpbmNsdWRlICJJbnNw
ZWN0b3JGcm9udGVuZC5oIgogI2luY2x1ZGUgIlNjcmlwdENhbGxTdGFjay5oIgogI2luY2x1ZGUg
IlNjcmlwdE9iamVjdC5oIgorI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTgwLDcgKzgzLDcgQEAgQ29uc29sZU1lc3NhZ2U6OkNv
bnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2UgcywgTWVzc2FnZVR5cGUgdCwgTWVzc2FnZUxldmVs
IGwsIFMKIH0KIAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi12b2lkIENvbnNvbGVNZXNzYWdlOjph
ZGRUb0NvbnNvbGUoSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kKQordm9pZCBDb25zb2xlTWVz
c2FnZTo6YWRkVG9Gcm9udGVuZChJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQsIEluamVjdGVk
U2NyaXB0SG9zdCogaW5qZWN0ZWRTY3JpcHRIb3N0KQogewogICAgIFNjcmlwdE9iamVjdCBqc29u
T2JqID0gZnJvbnRlbmQtPm5ld1NjcmlwdE9iamVjdCgpOwogICAgIGpzb25PYmouc2V0KCJzb3Vy
Y2UiLCBzdGF0aWNfY2FzdDxpbnQ+KG1fc291cmNlKSk7CkBAIC05MCw3ICs5MywxNSBAQCB2b2lk
IENvbnNvbGVNZXNzYWdlOjphZGRUb0NvbnNvbGUoSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5k
KQogICAgIGpzb25PYmouc2V0KCJ1cmwiLCBtX3VybCk7CiAgICAganNvbk9iai5zZXQoImdyb3Vw
TGV2ZWwiLCBzdGF0aWNfY2FzdDxpbnQ+KG1fZ3JvdXBMZXZlbCkpOwogICAgIGpzb25PYmouc2V0
KCJyZXBlYXRDb3VudCIsIHN0YXRpY19jYXN0PGludD4obV9yZXBlYXRDb3VudCkpOwotICAgIGZy
b250ZW5kLT5hZGRDb25zb2xlTWVzc2FnZShqc29uT2JqLCBtX2ZyYW1lcywgbV9zY3JpcHRTdGF0
ZSwgbV9hcmd1bWVudHMsICBtX21lc3NhZ2UpOworICAgIFZlY3RvcjxSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiA+IGFyZ3VtZW50czsKKyAgICBpZiAoIW1fYXJndW1lbnRzLmlzRW1wdHko
KSkgeworICAgICAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IGluamVjdGVkU2Ny
aXB0SG9zdC0+aW5qZWN0ZWRTY3JpcHRGb3IobV9zY3JpcHRTdGF0ZSk7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtX2FyZ3VtZW50cy5zaXplKCk7ICsraSkgeworICAgICAgICAg
ICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZFZhbHVlID0gaW5qZWN0
ZWRTY3JpcHQud3JhcEZvckNvbnNvbGUobV9hcmd1bWVudHNbaV0pOworICAgICAgICAgICAgYXJn
dW1lbnRzLmFwcGVuZChzZXJpYWxpemVkVmFsdWUpOworICAgICAgICB9CisgICAgfSAgIAorICAg
IGZyb250ZW5kLT5hZGRDb25zb2xlTWVzc2FnZShqc29uT2JqLCBtX2ZyYW1lcywgYXJndW1lbnRz
LCAgbV9tZXNzYWdlKTsKIH0KIAogdm9pZCBDb25zb2xlTWVzc2FnZTo6dXBkYXRlUmVwZWF0Q291
bnRJbkNvbnNvbGUoSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kKQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9pbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0NvbnNv
bGVNZXNzYWdlLmgKaW5kZXggZTlhZTEzMC4uNTNmNDI1NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9p
bnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9Db25zb2xl
TWVzc2FnZS5oCkBAIC0zOCw0MCArMzgsNDEgQEAKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICBjbGFzcyBJbnNwZWN0b3JGcm9udGVuZDsKLSAgICBj
bGFzcyBTY3JpcHRDYWxsU3RhY2s7Ci0gICAgY2xhc3MgU2NyaXB0U3RyaW5nOworY2xhc3MgSW5q
ZWN0ZWRTY3JpcHRIb3N0OworY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmQ7CitjbGFzcyBTY3JpcHRD
YWxsU3RhY2s7CitjbGFzcyBTY3JpcHRTdHJpbmc7CiAKLSAgICBjbGFzcyBDb25zb2xlTWVzc2Fn
ZSA6IHB1YmxpYyBOb25jb3B5YWJsZSB7Ci0gICAgcHVibGljOgotICAgICAgICBDb25zb2xlTWVz
c2FnZShNZXNzYWdlU291cmNlLCBNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJp
bmcmIG0sIHVuc2lnbmVkIGxpLCBjb25zdCBTdHJpbmcmIHUsIHVuc2lnbmVkIGcpOyAgICAgICAg
Ci0gICAgICAgIENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNz
YWdlTGV2ZWwsIFNjcmlwdENhbGxTdGFjayosIHVuc2lnbmVkIGcsIGJvb2wgc3RvcmVUcmFjZSA9
IGZhbHNlKTsKK2NsYXNzIENvbnNvbGVNZXNzYWdlIDogcHVibGljIE5vbmNvcHlhYmxlIHsKK3B1
YmxpYzoKKyAgICBDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlLCBNZXNzYWdlVHlwZSwgTWVz
c2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG0sIHVuc2lnbmVkIGxpLCBjb25zdCBTdHJpbmcmIHUs
IHVuc2lnbmVkIGcpOyAgICAgICAgCisgICAgQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZSwg
TWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwgU2NyaXB0Q2FsbFN0YWNrKiwgdW5zaWduZWQgZywg
Ym9vbCBzdG9yZVRyYWNlID0gZmFsc2UpOwogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICAg
ICAgdm9pZCBhZGRUb0NvbnNvbGUoSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kKTsKLSAgICAg
ICAgdm9pZCB1cGRhdGVSZXBlYXRDb3VudEluQ29uc29sZShJbnNwZWN0b3JGcm9udGVuZCogZnJv
bnRlbmQpOworICAgIHZvaWQgYWRkVG9Gcm9udGVuZChJbnNwZWN0b3JGcm9udGVuZCosIEluamVj
dGVkU2NyaXB0SG9zdCopOworICAgIHZvaWQgdXBkYXRlUmVwZWF0Q291bnRJbkNvbnNvbGUoSW5z
cGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kKTsKICNlbmRpZgotICAgICAgICB2b2lkIGluY3JlbWVu
dENvdW50KCkgeyArK21fcmVwZWF0Q291bnQ7IH07Ci0gICAgICAgIGJvb2wgaXNFcXVhbChTY3Jp
cHRTdGF0ZSosIENvbnNvbGVNZXNzYWdlKiBtc2cpIGNvbnN0OworICAgIHZvaWQgaW5jcmVtZW50
Q291bnQoKSB7ICsrbV9yZXBlYXRDb3VudDsgfQorICAgIGJvb2wgaXNFcXVhbChTY3JpcHRTdGF0
ZSosIENvbnNvbGVNZXNzYWdlKiBtc2cpIGNvbnN0OwogCi0gICAgICAgIE1lc3NhZ2VTb3VyY2Ug
c291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2U7IH0KLSAgICAgICAgY29uc3QgU3RyaW5n
JiBtZXNzYWdlKCkgY29uc3QgeyByZXR1cm4gbV9tZXNzYWdlOyB9CisgICAgTWVzc2FnZVNvdXJj
ZSBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZTsgfQorICAgIGNvbnN0IFN0cmluZyYg
bWVzc2FnZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWVzc2FnZTsgfQogCi0gICAgcHJpdmF0ZToKLSAg
ICAgICAgTWVzc2FnZVNvdXJjZSBtX3NvdXJjZTsKLSAgICAgICAgTWVzc2FnZVR5cGUgbV90eXBl
OwotICAgICAgICBNZXNzYWdlTGV2ZWwgbV9sZXZlbDsKLSAgICAgICAgU3RyaW5nIG1fbWVzc2Fn
ZTsKK3ByaXZhdGU6CisgICAgTWVzc2FnZVNvdXJjZSBtX3NvdXJjZTsKKyAgICBNZXNzYWdlVHlw
ZSBtX3R5cGU7CisgICAgTWVzc2FnZUxldmVsIG1fbGV2ZWw7CisgICAgU3RyaW5nIG1fbWVzc2Fn
ZTsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgICAgICBWZWN0b3I8U2NyaXB0VmFsdWU+IG1f
YXJndW1lbnRzOwotICAgICAgICBTY3JpcHRTdGF0ZSogbV9zY3JpcHRTdGF0ZTsKKyAgICBWZWN0
b3I8U2NyaXB0VmFsdWU+IG1fYXJndW1lbnRzOworICAgIFNjcmlwdFN0YXRlKiBtX3NjcmlwdFN0
YXRlOwogI2VuZGlmCi0gICAgICAgIFZlY3RvcjxTY3JpcHRTdHJpbmc+IG1fZnJhbWVzOwotICAg
ICAgICB1bnNpZ25lZCBtX2xpbmU7Ci0gICAgICAgIFN0cmluZyBtX3VybDsKLSAgICAgICAgdW5z
aWduZWQgbV9ncm91cExldmVsOwotICAgICAgICB1bnNpZ25lZCBtX3JlcGVhdENvdW50OwotICAg
IH07CisgICAgVmVjdG9yPFNjcmlwdFN0cmluZz4gbV9mcmFtZXM7CisgICAgdW5zaWduZWQgbV9s
aW5lOworICAgIFN0cmluZyBtX3VybDsKKyAgICB1bnNpZ25lZCBtX2dyb3VwTGV2ZWw7CisgICAg
dW5zaWduZWQgbV9yZXBlYXRDb3VudDsKK307CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2xpZW50LmggYi9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDbGllbnQuaAppbmRleCBlNDQ4Y2QyLi44NDFjMTVlIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDbGllbnQuaAorKysgYi9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDbGllbnQuaApAQCAtMzAsNiArMzAsNyBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKK2NsYXNzIEluc3BlY3RvckNvbnRyb2xsZXI7CiBjbGFzcyBOb2RlOwog
Y2xhc3MgUGFnZTsKIGNsYXNzIFN0cmluZzsKQEAgLTQwLDI5ICs0MSwxMyBAQCBwdWJsaWM6CiAK
ICAgICB2aXJ0dWFsIHZvaWQgaW5zcGVjdG9yRGVzdHJveWVkKCkgPSAwOwogCi0gICAgdmlydHVh
bCBQYWdlKiBjcmVhdGVQYWdlKCkgPSAwOwotCi0gICAgdmlydHVhbCBTdHJpbmcgbG9jYWxpemVk
U3RyaW5nc1VSTCgpID0gMDsKLQotICAgIHZpcnR1YWwgU3RyaW5nIGhpZGRlblBhbmVscygpID0g
MDsKLQotICAgIHZpcnR1YWwgdm9pZCBzaG93V2luZG93KCkgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBjbG9zZVdpbmRvdygpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hXaW5kb3coKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRldGFjaFdpbmRvdygpID0gMDsKLQotICAgIHZpcnR1YWwg
dm9pZCBzZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgb3Blbkluc3BlY3RvckZyb250ZW5kKEluc3BlY3RvckNvbnRyb2xsZXIqKSA9
IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgaGlnaGxpZ2h0KE5vZGUqKSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIGhpZGVIaWdobGlnaHQoKSA9IDA7CiAKLSAgICB2aXJ0dWFsIHZvaWQgaW5zcGVjdGVk
VVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIG5ld1VSTCkgPSAwOwotCiAgICAgdmlydHVhbCB2b2lk
IHBvcHVsYXRlU2V0dGluZyhjb25zdCBTdHJpbmcmIGtleSwgU3RyaW5nKiB2YWx1ZSkgPSAwOwog
ICAgIHZpcnR1YWwgdm9pZCBzdG9yZVNldHRpbmcoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0
cmluZyYgdmFsdWUpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0b3JXaW5kb3dPYmpl
Y3RDbGVhcmVkKCkgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAppbmRleCAzMzE0NDNkLi45MjRmMDExIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAorKysg
Yi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcApAQCAtNTcsMTEgKzU3
LDExIEBACiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHRIb3N0LmgiCiAjaW5jbHVkZSAiSW5zcGVj
dG9yQmFja2VuZC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNsaWVudC5oIgorI2luY2x1ZGUgIklu
c3BlY3RvckZyb250ZW5kQ2xpZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRE9NQWdlbnQuaCIK
ICNpbmNsdWRlICJJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuaCIKICNpbmNsdWRlICJJbnNw
ZWN0b3JEYXRhYmFzZVJlc291cmNlLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmQuaCIK
LSNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZEhvc3QuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JS
ZXNvdXJjZS5oIgogI2luY2x1ZGUgIkluc3BlY3RvcldvcmtlclJlc291cmNlLmgiCiAjaW5jbHVk
ZSAiSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oIgpAQCAtMTQ0LDEwICsxNDQsOSBAQCBzdGF0aWMg
dW5zaWduZWQgc19pbnNwZWN0b3JDb250cm9sbGVyQ291bnQ7CiBJbnNwZWN0b3JDb250cm9sbGVy
OjpJbnNwZWN0b3JDb250cm9sbGVyKFBhZ2UqIHBhZ2UsIEluc3BlY3RvckNsaWVudCogY2xpZW50
KQogICAgIDogbV9pbnNwZWN0ZWRQYWdlKHBhZ2UpCiAgICAgLCBtX2NsaWVudChjbGllbnQpCi0g
ICAgLCBtX3BhZ2UoMCkKKyAgICAsIG1fb3BlbmluZ0Zyb250ZW5kKGZhbHNlKQorICAgICwgbV9j
bG9zaW5nRnJvbnRlbmQoZmFsc2UpCiAgICAgLCBtX2V4cGlyZWRDb25zb2xlTWVzc2FnZUNvdW50
KDApCi0gICAgLCBtX2Zyb250ZW5kU2NyaXB0U3RhdGUoMCkKLSAgICAsIG1fd2luZG93VmlzaWJs
ZShmYWxzZSkKICAgICAsIG1fc2hvd0FmdGVyVmlzaWJsZShDdXJyZW50UGFuZWwpCiAgICAgLCBt
X2dyb3VwTGV2ZWwoMCkKICAgICAsIG1fc2VhcmNoaW5nRm9yTm9kZShmYWxzZSkKQEAgLTE1NSw3
ICsxNTQsNiBAQCBJbnNwZWN0b3JDb250cm9sbGVyOjpJbnNwZWN0b3JDb250cm9sbGVyKFBhZ2Uq
IHBhZ2UsIEluc3BlY3RvckNsaWVudCogY2xpZW50KQogICAgICwgbV9yZXNvdXJjZVRyYWNraW5n
RW5hYmxlZChmYWxzZSkKICAgICAsIG1fcmVzb3VyY2VUcmFja2luZ1NldHRpbmdzTG9hZGVkKGZh
bHNlKQogICAgICwgbV9pbnNwZWN0b3JCYWNrZW5kKEluc3BlY3RvckJhY2tlbmQ6OmNyZWF0ZSh0
aGlzKSkKLSAgICAsIG1faW5zcGVjdG9yRnJvbnRlbmRIb3N0KEluc3BlY3RvckZyb250ZW5kSG9z
dDo6Y3JlYXRlKHRoaXMsIGNsaWVudCkpCiAgICAgLCBtX2luamVjdGVkU2NyaXB0SG9zdChJbmpl
Y3RlZFNjcmlwdEhvc3Q6OmNyZWF0ZSh0aGlzKSkKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJV
R0dFUikKICAgICAsIG1fZGVidWdnZXJFbmFibGVkKGZhbHNlKQpAQCAtMTc4LDkgKzE3Niw3IEBA
IEluc3BlY3RvckNvbnRyb2xsZXI6On5JbnNwZWN0b3JDb250cm9sbGVyKCkKIHsKICAgICAvLyBU
aGVzZSBzaG91bGQgaGF2ZSBiZWVuIGNsZWFyZWQgaW4gaW5zcGVjdGVkUGFnZURlc3Ryb3llZCgp
LgogICAgIEFTU0VSVCghbV9jbGllbnQpOwotICAgIEFTU0VSVCghbV9mcm9udGVuZFNjcmlwdFN0
YXRlKTsKICAgICBBU1NFUlQoIW1faW5zcGVjdGVkUGFnZSk7Ci0gICAgQVNTRVJUKCFtX3BhZ2Ug
fHwgKG1fcGFnZSAmJiAhbV9wYWdlLT5wYXJlbnRJbnNwZWN0b3JDb250cm9sbGVyKCkpKTsKIAog
ICAgIGRlbGV0ZUFsbFZhbHVlcyhtX2ZyYW1lUmVzb3VyY2VzKTsKICAgICBkZWxldGVBbGxWYWx1
ZXMobV9jb25zb2xlTWVzc2FnZXMpOwpAQCAtMTkxLDcgKzE4Nyw2IEBAIEluc3BlY3RvckNvbnRy
b2xsZXI6On5JbnNwZWN0b3JDb250cm9sbGVyKCkKICAgICByZWxlYXNlRE9NQWdlbnQoKTsKIAog
ICAgIG1faW5zcGVjdG9yQmFja2VuZC0+ZGlzY29ubmVjdENvbnRyb2xsZXIoKTsKLSAgICBtX2lu
c3BlY3RvckZyb250ZW5kSG9zdC0+ZGlzY29ubmVjdENvbnRyb2xsZXIoKTsKICAgICBtX2luamVj
dGVkU2NyaXB0SG9zdC0+ZGlzY29ubmVjdENvbnRyb2xsZXIoKTsKIH0KIApAQCAtMTk5LDEwICsx
OTQsNiBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6Omluc3BlY3RlZFBhZ2VEZXN0cm95ZWQo
KQogewogICAgIGNsb3NlKCk7CiAKLSAgICBpZiAobV9mcm9udGVuZFNjcmlwdFN0YXRlKSB7Ci0g
ICAgICAgIFNjcmlwdEdsb2JhbE9iamVjdDo6cmVtb3ZlKG1fZnJvbnRlbmRTY3JpcHRTdGF0ZSwg
Ikluc3BlY3RvckJhY2tlbmQiKTsKLSAgICAgICAgU2NyaXB0R2xvYmFsT2JqZWN0OjpyZW1vdmUo
bV9mcm9udGVuZFNjcmlwdFN0YXRlLCAiSW5zcGVjdG9yRnJvbnRlbmRIb3N0Iik7Ci0gICAgfQog
ICAgIEFTU0VSVChtX2luc3BlY3RlZFBhZ2UpOwogICAgIG1faW5zcGVjdGVkUGFnZSA9IDA7CiAK
QEAgLTI5Nyw0NiArMjg4LDQyIEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6aGlkZUhpZ2hs
aWdodCgpCiAKIGJvb2wgSW5zcGVjdG9yQ29udHJvbGxlcjo6d2luZG93VmlzaWJsZSgpCiB7Ci0g
ICAgcmV0dXJuIG1fd2luZG93VmlzaWJsZTsKKyAgICByZXR1cm4gbV9mcm9udGVuZDsKIH0KIAot
dm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRXaW5kb3dWaXNpYmxlKGJvb2wgdmlzaWJsZSwg
Ym9vbCBhdHRhY2hlZCkKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZnJvbnRlbmRSZWFkeSgp
CiB7Ci0gICAgaWYgKHZpc2libGUgPT0gbV93aW5kb3dWaXNpYmxlIHx8ICFtX2Zyb250ZW5kKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBtX3dpbmRvd1Zpc2libGUgPSB2aXNpYmxlOwotCi0gICAg
aWYgKG1fd2luZG93VmlzaWJsZSkgewotICAgICAgICBzZXRBdHRhY2hlZFdpbmRvdyhhdHRhY2hl
ZCk7Ci0gICAgICAgIHBvcHVsYXRlU2NyaXB0T2JqZWN0cygpOwotCi0gICAgICAgIGlmIChtX3No
b3dBZnRlclZpc2libGUgPT0gQ3VycmVudFBhbmVsKSB7Ci0gICAgICAgICAgICBTdHJpbmcgbGFz
dEFjdGl2ZVBhbmVsU2V0dGluZyA9IHNldHRpbmcobGFzdEFjdGl2ZVBhbmVsU2V0dGluZ05hbWUp
OwotICAgICAgICAgICAgbV9zaG93QWZ0ZXJWaXNpYmxlID0gc3BlY2lhbFBhbmVsRm9ySlNOYW1l
KGxhc3RBY3RpdmVQYW5lbFNldHRpbmcpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1fbm9k
ZVRvRm9jdXMpCi0gICAgICAgICAgICBmb2N1c05vZGUoKTsKKyAgICBwb3B1bGF0ZVNjcmlwdE9i
amVjdHMoKTsKKyAgICAKKyAgICBpZiAobV9zaG93QWZ0ZXJWaXNpYmxlID09IEN1cnJlbnRQYW5l
bCkgeworICAgICAgICBTdHJpbmcgbGFzdEFjdGl2ZVBhbmVsU2V0dGluZyA9IHNldHRpbmcobGFz
dEFjdGl2ZVBhbmVsU2V0dGluZ05hbWUpOworICAgICAgICBtX3Nob3dBZnRlclZpc2libGUgPSBz
cGVjaWFsUGFuZWxGb3JKU05hbWUobGFzdEFjdGl2ZVBhbmVsU2V0dGluZyk7CisgICAgfQorICAg
IAorICAgIGlmIChtX25vZGVUb0ZvY3VzKQorICAgICAgICBmb2N1c05vZGUoKTsKICNpZiBFTkFC
TEUoSkFWQVNDUklQVF9ERUJVR0dFUikKLSAgICAgICAgaWYgKG1fYXR0YWNoRGVidWdnZXJXaGVu
U2hvd24pCi0gICAgICAgICAgICBlbmFibGVEZWJ1Z2dlcigpOworICAgIGlmIChtX2F0dGFjaERl
YnVnZ2VyV2hlblNob3duKQorICAgICAgICBlbmFibGVEZWJ1Z2dlcigpOwogI2VuZGlmCi0gICAg
ICAgIHNob3dQYW5lbChtX3Nob3dBZnRlclZpc2libGUpOwotICAgIH0gZWxzZSB7CisgICAgc2hv
d1BhbmVsKG1fc2hvd0FmdGVyVmlzaWJsZSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxl
cjo6d2lsbENsb3NlRnJvbnRlbmQoKQorewogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VS
KQotICAgICAgICAvLyBJZiB0aGUgd2luZG93IGlzIGJlaW5nIGNsb3NlZCB3aXRoIHRoZSBkZWJ1
Z2dlciBlbmFibGVkLAotICAgICAgICAvLyByZW1lbWJlciB0aGlzIHN0YXRlIHRvIHJlLWVuYWJs
ZSBkZWJ1Z2dlciBvbiB0aGUgbmV4dCB3aW5kb3cKLSAgICAgICAgLy8gb3BlbmluZy4KLSAgICAg
ICAgYm9vbCBkZWJ1Z2dlcldhc0VuYWJsZWQgPSBtX2RlYnVnZ2VyRW5hYmxlZDsKLSAgICAgICAg
ZGlzYWJsZURlYnVnZ2VyKCk7Ci0gICAgICAgIGlmIChkZWJ1Z2dlcldhc0VuYWJsZWQpCi0gICAg
ICAgICAgICBtX2F0dGFjaERlYnVnZ2VyV2hlblNob3duID0gdHJ1ZTsKKyAgICAvLyBJZiB0aGUg
d2luZG93IGlzIGJlaW5nIGNsb3NlZCB3aXRoIHRoZSBkZWJ1Z2dlciBlbmFibGVkLAorICAgIC8v
IHJlbWVtYmVyIHRoaXMgc3RhdGUgdG8gcmUtZW5hYmxlIGRlYnVnZ2VyIG9uIHRoZSBuZXh0IHdp
bmRvdworICAgIC8vIG9wZW5pbmcuCisgICAgYm9vbCBkZWJ1Z2dlcldhc0VuYWJsZWQgPSBtX2Rl
YnVnZ2VyRW5hYmxlZDsKKyAgICBkaXNhYmxlRGVidWdnZXIoKTsKKyAgICBpZiAoZGVidWdnZXJX
YXNFbmFibGVkKQorICAgICAgICBtX2F0dGFjaERlYnVnZ2VyV2hlblNob3duID0gdHJ1ZTsKICNl
bmRpZgotICAgICAgICBzZXRTZWFyY2hpbmdGb3JOb2RlKGZhbHNlKTsKLSAgICAgICAgcmVzZXRT
Y3JpcHRPYmplY3RzKCk7Ci0gICAgICAgIHN0b3BUaW1lbGluZVByb2ZpbGVyKCk7Ci0gICAgfQor
ICAgIHNldFNlYXJjaGluZ0Zvck5vZGUoZmFsc2UpOworICAgIHJlc2V0U2NyaXB0T2JqZWN0cygp
OworICAgIHN0b3BUaW1lbGluZVByb2ZpbGVyKCk7CisKICAgICBtX3Nob3dBZnRlclZpc2libGUg
PSBDdXJyZW50UGFuZWw7CiB9CiAKQEAgLTM3MCw3ICszNTcsNyBAQCB2b2lkIEluc3BlY3RvckNv
bnRyb2xsZXI6OmFkZENvbnNvbGVNZXNzYWdlKFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgQ29u
c29sZU1lcwogICAgICAgICBtX3ByZXZpb3VzTWVzc2FnZSA9IGNvbnNvbGVNZXNzYWdlOwogICAg
ICAgICBtX2NvbnNvbGVNZXNzYWdlcy5hcHBlbmQoY29uc29sZU1lc3NhZ2UpOwogICAgICAgICBp
ZiAod2luZG93VmlzaWJsZSgpKQotICAgICAgICAgICAgbV9wcmV2aW91c01lc3NhZ2UtPmFkZFRv
Q29uc29sZShtX2Zyb250ZW5kLmdldCgpKTsKKyAgICAgICAgICAgIG1fcHJldmlvdXNNZXNzYWdl
LT5hZGRUb0Zyb250ZW5kKG1fZnJvbnRlbmQuZ2V0KCksIG1faW5qZWN0ZWRTY3JpcHRIb3N0Lmdl
dCgpKTsKICAgICB9CiAKICAgICBpZiAoIXdpbmRvd1Zpc2libGUoKSAmJiBtX2NvbnNvbGVNZXNz
YWdlcy5zaXplKCkgPj0gbWF4aW11bUNvbnNvbGVNZXNzYWdlcykgewpAQCAtNDE4LDY5ICs0MDUs
NiBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6Om1hcmtUaW1lbGluZShjb25zdCBTdHJpbmcm
IG1lc3NhZ2UpCiAgICAgICAgIHRpbWVsaW5lQWdlbnQoKS0+ZGlkTWFya1RpbWVsaW5lKG1lc3Nh
Z2UpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgY29uc3RyYWluZWRBdHRhY2hlZFdpbmRvd0hlaWdo
dCh1bnNpZ25lZCBwcmVmZXJyZWRIZWlnaHQsIHVuc2lnbmVkIHRvdGFsV2luZG93SGVpZ2h0KQot
ewotICAgIHJldHVybiByb3VuZGYobWF4KG1pbmltdW1BdHRhY2hlZEhlaWdodCwgbWluPGZsb2F0
PihwcmVmZXJyZWRIZWlnaHQsIHRvdGFsV2luZG93SGVpZ2h0ICogbWF4aW11bUF0dGFjaGVkSGVp
Z2h0UmF0aW8pKSk7Ci19Ci0KLWJvb2wgSW5zcGVjdG9yQ29udHJvbGxlcjo6Y2FuQXR0YWNoV2lu
ZG93KCkgY29uc3QKLXsKLSAgICBpZiAoIWVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAKLSAgICB1bnNpZ25lZCBpbnNwZWN0ZWRQYWdlSGVpZ2h0ID0gbV9pbnNwZWN0
ZWRQYWdlLT5tYWluRnJhbWUoKS0+dmlldygpLT52aXNpYmxlSGVpZ2h0KCk7Ci0KLSAgICAvLyBE
b24ndCBhbGxvdyB0aGUgYXR0YWNoIGlmIHRoZSB3aW5kb3cgd291bGQgYmUgdG9vIHNtYWxsIHRv
IGFjY29tbW9kYXRlIHRoZSBtaW5pbXVtIGluc3BlY3RvciBoZWlnaHQuCi0gICAgcmV0dXJuIG1p
bmltdW1BdHRhY2hlZEhlaWdodCA8PSBpbnNwZWN0ZWRQYWdlSGVpZ2h0ICogbWF4aW11bUF0dGFj
aGVkSGVpZ2h0UmF0aW87Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6YXR0YWNoV2lu
ZG93KCkKLXsKLSAgICBpZiAoIWVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdW5z
aWduZWQgaW5zcGVjdGVkUGFnZUhlaWdodCA9IG1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCkt
PnZpZXcoKS0+dmlzaWJsZUhlaWdodCgpOwotCi0gICAgU3RyaW5nIGF0dGFjaGVkSGVpZ2h0ID0g
c2V0dGluZyhpbnNwZWN0b3JBdHRhY2hlZEhlaWdodE5hbWUpOwotICAgIGJvb2wgc3VjY2VzcyA9
IHRydWU7Ci0gICAgaW50IGhlaWdodCA9IGF0dGFjaGVkSGVpZ2h0LnRvSW50KCZzdWNjZXNzKTsK
LSAgICB1bnNpZ25lZCBwcmVmZXJyZWRIZWlnaHQgPSBzdWNjZXNzID8gaGVpZ2h0IDogZGVmYXVs
dEF0dGFjaGVkSGVpZ2h0OwotCi0gICAgbV9jbGllbnQtPmF0dGFjaFdpbmRvdygpOwotCi0gICAg
Ly8gV2UgbmVlZCB0byBjb25zdHJhaW4gdGhlIHdpbmRvdyBoZWlnaHQgaGVyZSBpbiBjYXNlIHRo
ZSB1c2VyIGhhcyByZXNpemVkIHRoZSBpbnNwZWN0ZWQgcGFnZSdzIHdpbmRvdyBzbyB0aGF0Ci0g
ICAgLy8gdGhlIHVzZXIncyBwcmVmZXJyZWQgaGVpZ2h0IHdvdWxkIGJlIHRvbyBiaWcgdG8gZGlz
cGxheS4KLSAgICBtX2NsaWVudC0+c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQoY29uc3RyYWluZWRB
dHRhY2hlZFdpbmRvd0hlaWdodChwcmVmZXJyZWRIZWlnaHQsIGluc3BlY3RlZFBhZ2VIZWlnaHQp
KTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkZXRhY2hXaW5kb3coKQotewotICAg
IGlmICghZW5hYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jbGllbnQtPmRldGFjaFdp
bmRvdygpOwotfQotCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldEF0dGFjaGVkV2luZG93
KGJvb2wgYXR0YWNoZWQpCi17Ci0gICAgaWYgKCFlbmFibGVkKCkgfHwgIW1fZnJvbnRlbmQpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIG1fZnJvbnRlbmQtPnNldEF0dGFjaGVkV2luZG93KGF0dGFj
aGVkKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRBdHRhY2hlZFdpbmRvd0hl
aWdodCh1bnNpZ25lZCBoZWlnaHQpCi17Ci0gICAgaWYgKCFlbmFibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKLSAgICAKLSAgICB1bnNpZ25lZCB0b3RhbEhlaWdodCA9IG1fcGFnZS0+bWFpbkZyYW1l
KCktPnZpZXcoKS0+dmlzaWJsZUhlaWdodCgpICsgbV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUo
KS0+dmlldygpLT52aXNpYmxlSGVpZ2h0KCk7Ci0gICAgdW5zaWduZWQgYXR0YWNoZWRIZWlnaHQg
PSBjb25zdHJhaW5lZEF0dGFjaGVkV2luZG93SGVpZ2h0KGhlaWdodCwgdG90YWxIZWlnaHQpOwot
ICAgIAotICAgIHNldFNldHRpbmcoaW5zcGVjdG9yQXR0YWNoZWRIZWlnaHROYW1lLCBTdHJpbmc6
Om51bWJlcihhdHRhY2hlZEhlaWdodCkpOwotICAgIAotICAgIG1fY2xpZW50LT5zZXRBdHRhY2hl
ZFdpbmRvd0hlaWdodChhdHRhY2hlZEhlaWdodCk7Ci19Ci0KIHZvaWQgSW5zcGVjdG9yQ29udHJv
bGxlcjo6c3RvcmVMYXN0QWN0aXZlUGFuZWwoY29uc3QgU3RyaW5nJiBwYW5lbE5hbWUpCiB7CiAg
ICAgc2V0U2V0dGluZyhsYXN0QWN0aXZlUGFuZWxTZXR0aW5nTmFtZSwgcGFuZWxOYW1lKTsKQEAg
LTUxMiwyMyArNDM2LDIyIEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6aGFuZGxlTW91c2VQ
cmVzc09uTm9kZShOb2RlKiBub2RlKQogICAgIGluc3BlY3Qobm9kZSk7CiB9CiAKLXZvaWQgSW5z
cGVjdG9yQ29udHJvbGxlcjo6aW5zcGVjdGVkV2luZG93U2NyaXB0T2JqZWN0Q2xlYXJlZChGcmFt
ZSogZnJhbWUpCit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldEluc3BlY3RvckZyb250ZW5k
Q2xpZW50KFBhc3NPd25QdHI8SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ+IGNsaWVudCkKIHsKLSAg
ICBpZiAoIWVuYWJsZWQoKSB8fCAhbV9mcm9udGVuZCB8fCBmcmFtZSAhPSBtX2luc3BlY3RlZFBh
Z2UtPm1haW5GcmFtZSgpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9pbmplY3RlZFNjcmlwdEhv
c3QtPmRpc2NhcmRJbmplY3RlZFNjcmlwdHMoKTsKKyAgICBBU1NFUlQoIW1faW5zcGVjdG9yRnJv
bnRlbmRDbGllbnQpOworICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDbGllbnQgPSBjbGllbnQ7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6d2luZG93U2NyaXB0T2JqZWN0QXZhaWxhYmxl
KCkKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zcGVjdGVkV2luZG93U2NyaXB0T2JqZWN0
Q2xlYXJlZChGcmFtZSogZnJhbWUpCiB7Ci0gICAgaWYgKCFtX3BhZ2UgfHwgIWVuYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuOworICAgIC8vIElmIHRoZSBwYWdlIGlzIHN1cHBvc2VkIHRvIHNlcnZl
IGFzIEluc3BlY3RvckZyb250ZW5kIG5vdGlmeSBpbnNwZXRvciBmcm9udGVuZAorICAgIC8vIGNs
aWVudCB0aGF0IGl0J3MgY2xlYXJlZCBzbyB0aGF0IHRoZSBjbGllbnQgY2FuIGV4cG9zZSBpbnNw
ZWN0b3IgYmluZGluZ3MuCisgICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDbGllbnQgJiYgZnJh
bWUgPT0gbV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKSkKKyAgICAgICAgbV9pbnNwZWN0b3JG
cm9udGVuZENsaWVudC0+d2luZG93T2JqZWN0Q2xlYXJlZCgpOwogCi0gICAgLy8gR3JhbnQgdGhl
IGluc3BlY3RvciB0aGUgYWJpbGl0eSB0byBzY3JpcHQgdGhlIGluc3BlY3RlZCBwYWdlLgotICAg
IG1fcGFnZS0+bWFpbkZyYW1lKCktPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmdyYW50
VW5pdmVyc2FsQWNjZXNzKCk7Ci0gICAgbV9mcm9udGVuZFNjcmlwdFN0YXRlID0gc2NyaXB0U3Rh
dGVGcm9tUGFnZShkZWJ1Z2dlcldvcmxkKCksIG1fcGFnZSk7Ci0gICAgU2NyaXB0R2xvYmFsT2Jq
ZWN0OjpzZXQobV9mcm9udGVuZFNjcmlwdFN0YXRlLCAiSW5zcGVjdG9yQmFja2VuZCIsIG1faW5z
cGVjdG9yQmFja2VuZC5nZXQoKSk7Ci0gICAgU2NyaXB0R2xvYmFsT2JqZWN0OjpzZXQobV9mcm9u
dGVuZFNjcmlwdFN0YXRlLCAiSW5zcGVjdG9yRnJvbnRlbmRIb3N0IiwgbV9pbnNwZWN0b3JGcm9u
dGVuZEhvc3QuZ2V0KCkpOworICAgIGlmICghZW5hYmxlZCgpIHx8ICFtX2Zyb250ZW5kIHx8IGZy
YW1lICE9IG1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCkpCisgICAgICAgIHJldHVybjsKKyAg
ICBtX2luamVjdGVkU2NyaXB0SG9zdC0+ZGlzY2FyZEluamVjdGVkU2NyaXB0cygpOwogfQogCiB2
b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldFNlYXJjaGluZ0Zvck5vZGUoYm9vbCBlbmFibGVk
KQpAQCAtNTQ2LDE4ICs0NjksMTUgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRTZWFy
Y2hpbmdGb3JOb2RlKGJvb2wgZW5hYmxlZCkKICAgICB9CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ29u
dHJvbGxlcjo6c2NyaXB0T2JqZWN0UmVhZHkoKQordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpz
ZXRGcm9udGVuZChQYXNzT3duUHRyPEluc3BlY3RvckZyb250ZW5kPiBmcm9udGVuZCkKIHsKLSAg
ICBBU1NFUlQobV9mcm9udGVuZFNjcmlwdFN0YXRlKTsKLSAgICBpZiAoIW1fZnJvbnRlbmRTY3Jp
cHRTdGF0ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU2NyaXB0T2JqZWN0IHdlYkluc3BlY3Rv
ck9iajsKLSAgICBpZiAoIVNjcmlwdEdsb2JhbE9iamVjdDo6Z2V0KG1fZnJvbnRlbmRTY3JpcHRT
dGF0ZSwgIldlYkluc3BlY3RvciIsIHdlYkluc3BlY3Rvck9iaikpCi0gICAgICAgIHJldHVybjsK
LSAgICBzZXRGcm9udGVuZFByb3h5T2JqZWN0KG1fZnJvbnRlbmRTY3JpcHRTdGF0ZSwgd2ViSW5z
cGVjdG9yT2JqKTsKLQotI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQorICAgIG1fb3Bl
bmluZ0Zyb250ZW5kID0gZmFsc2U7CisgICAgbV9mcm9udGVuZCA9IGZyb250ZW5kOworICAgIHJl
bGVhc2VET01BZ2VudCgpOworICAgIG1fZG9tQWdlbnQgPSBJbnNwZWN0b3JET01BZ2VudDo6Y3Jl
YXRlKG1fZnJvbnRlbmQuZ2V0KCkpOworICAgIGlmIChtX3RpbWVsaW5lQWdlbnQpCisgICAgICAg
IG1fdGltZWxpbmVBZ2VudC0+cmVzZXRGcm9udGVuZFByb3h5T2JqZWN0KG1fZnJvbnRlbmQuZ2V0
KCkpOworI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKSAmJiBVU0UoSlNDKQogICAgIFN0
cmluZyBkZWJ1Z2dlckVuYWJsZWQgPSBzZXR0aW5nKGRlYnVnZ2VyRW5hYmxlZFNldHRpbmdOYW1l
KTsKICAgICBpZiAoZGVidWdnZXJFbmFibGVkID09ICJ0cnVlIikKICAgICAgICAgZW5hYmxlRGVi
dWdnZXIoKTsKQEAgLTU2Niw0OCArNDg2LDIzIEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6
c2NyaXB0T2JqZWN0UmVhZHkoKQogICAgICAgICBlbmFibGVQcm9maWxlcigpOwogI2VuZGlmCiAK
LSAgICAvLyBJZiBubyBwcmVmZXJlbmNlIGlzIHNldCAtIGRlZmF1bHQgdG8gYW4gYXR0YWNoZWQg
d2luZG93LiBUaGlzIGlzIGltcG9ydGFudCBmb3IgaW5zcGVjdG9yIExheW91dFRlc3RzLgotICAg
IFN0cmluZyBzaG91bGRBdHRhY2hWYWx1ZSA9IHNldHRpbmcoaW5zcGVjdG9yU3RhcnRzQXR0YWNo
ZWRTZXR0aW5nTmFtZSgpKTsKLSAgICBib29sIHNob3VsZEF0dGFjaCA9IHNob3VsZEF0dGFjaFZh
bHVlICE9ICJmYWxzZSI7Ci0gICAgCi0gICAgaWYgKHNob3VsZEF0dGFjaCAmJiAhY2FuQXR0YWNo
V2luZG93KCkpCi0gICAgICAgIHNob3VsZEF0dGFjaCA9IGZhbHNlOwotCi0gICAgLy8gTWFrZSBz
dXJlIG91ciB3aW5kb3cgaXMgdmlzaWJsZSBub3cgdGhhdCB0aGUgcGFnZSBsb2FkZWQKLSAgICBz
ZXRXaW5kb3dWaXNpYmxlKHRydWUsIHNob3VsZEF0dGFjaCk7Ci0KLSAgICBtX2NsaWVudC0+aW5z
cGVjdG9yV2luZG93T2JqZWN0Q2xlYXJlZCgpOwotfQotCi12b2lkIEluc3BlY3RvckNvbnRyb2xs
ZXI6OnNldEZyb250ZW5kUHJveHlPYmplY3QoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBTY3Jp
cHRPYmplY3Qgd2ViSW5zcGVjdG9yT2JqLCBTY3JpcHRPYmplY3QpCi17Ci0gICAgbV9mcm9udGVu
ZFNjcmlwdFN0YXRlID0gc2NyaXB0U3RhdGU7Ci0gICAgbV9mcm9udGVuZC5zZXQobmV3IEluc3Bl
Y3RvckZyb250ZW5kKHRoaXMsIHdlYkluc3BlY3Rvck9iaikpOwotICAgIHJlbGVhc2VET01BZ2Vu
dCgpOwotICAgIG1fZG9tQWdlbnQgPSBJbnNwZWN0b3JET01BZ2VudDo6Y3JlYXRlKG1fZnJvbnRl
bmQuZ2V0KCkpOwotICAgIGlmIChtX3RpbWVsaW5lQWdlbnQpCi0gICAgICAgIG1fdGltZWxpbmVB
Z2VudC0+cmVzZXRGcm9udGVuZFByb3h5T2JqZWN0KG1fZnJvbnRlbmQuZ2V0KCkpOworICAgIGZy
b250ZW5kUmVhZHkoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzaG93KCkKIHsK
ICAgICBpZiAoIWVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGlmICghbV9w
YWdlKSB7Ci0gICAgICAgIGlmIChtX2Zyb250ZW5kKQotICAgICAgICAgICAgcmV0dXJuOyAvLyBX
ZSBhcmUgdXNpbmcgY3VzdG9tIGZyb250ZW5kIC0gbm8gbmVlZCB0byBjcmVhdGUgcGFnZS4KIAot
ICAgICAgICBtX3BhZ2UgPSBtX2NsaWVudC0+Y3JlYXRlUGFnZSgpOwotICAgICAgICBpZiAoIW1f
cGFnZSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9wYWdlLT5zZXRQYXJlbnRJbnNw
ZWN0b3JDb250cm9sbGVyKHRoaXMpOwotCi0gICAgICAgIC8vIHNob3dXaW5kb3coKSB3aWxsIGJl
IGNhbGxlZCBhZnRlciB0aGUgcGFnZSBsb2FkcyBpbiBzY3JpcHRPYmplY3RSZWFkeSgpCisgICAg
aWYgKG1fb3BlbmluZ0Zyb250ZW5kKQogICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKG1f
ZnJvbnRlbmQpCisgICAgICAgIG1fZnJvbnRlbmQtPmJyaW5nVG9Gcm9udCgpOworICAgIGVsc2Ug
eworICAgICAgICBtX29wZW5pbmdGcm9udGVuZCA9IHRydWU7CisgICAgICAgIG1fY2xpZW50LT5v
cGVuSW5zcGVjdG9yRnJvbnRlbmQodGhpcyk7CiAgICAgfQotCi0gICAgc2hvd1dpbmRvdygpOwog
fQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNob3dQYW5lbChTcGVjaWFsUGFuZWxzIHBh
bmVsKQpAQCAtNjMzLDQ2ICs1MjgsMjcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpjbG9z
ZSgpCiAgICAgaWYgKCFlbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGlmICghbV9m
cm9udGVuZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fY2xvc2luZ0Zyb250ZW5kKQor
ICAgICAgICByZXR1cm47CisgICAgbV9jbG9zaW5nRnJvbnRlbmQgPSB0cnVlOworCisgICAgd2ls
bENsb3NlRnJvbnRlbmQoKTsKKworICAgIGhpZGVIaWdobGlnaHQoKTsKKwogI2lmIEVOQUJMRShK
QVZBU0NSSVBUX0RFQlVHR0VSKQogICAgIHN0b3BVc2VySW5pdGlhdGVkUHJvZmlsaW5nKCk7CiAg
ICAgZGlzYWJsZURlYnVnZ2VyKCk7CiAjZW5kaWYKLSAgICBjbG9zZVdpbmRvdygpOwogCiAgICAg
cmVsZWFzZURPTUFnZW50KCk7Ci0gICAgbV9mcm9udGVuZC5zZXQoMCk7Ci0gICAgbV90aW1lbGlu
ZUFnZW50ID0gMDsKLSAgICBtX2Zyb250ZW5kU2NyaXB0U3RhdGUgPSAwOwotICAgIGlmIChtX3Bh
Z2UpIHsKLSAgICAgICAgaWYgKCFtX3BhZ2UtPm1haW5GcmFtZSgpIHx8ICFtX3BhZ2UtPm1haW5G
cmFtZSgpLT5sb2FkZXIoKSB8fCAhbV9wYWdlLT5tYWluRnJhbWUoKS0+bG9hZGVyKCktPmlzTG9h
ZGluZygpKSB7Ci0gICAgICAgICAgICBtX3BhZ2UtPnNldFBhcmVudEluc3BlY3RvckNvbnRyb2xs
ZXIoMCk7Ci0gICAgICAgICAgICBtX3BhZ2UgPSAwOwotICAgICAgICB9Ci0gICAgfQotfQotCi12
b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNob3dXaW5kb3coKQotewotICAgIEFTU0VSVChlbmFi
bGVkKCkpOwotCi0gICAgdW5zaWduZWQgaW5zcGVjdGVkUGFnZUhlaWdodCA9IG1faW5zcGVjdGVk
UGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+dmlzaWJsZUhlaWdodCgpOwotCi0gICAgbV9jbGll
bnQtPnNob3dXaW5kb3coKTsKKyAgICBtX2Zyb250ZW5kLmNsZWFyKCk7CisgICAgbV90aW1lbGlu
ZUFnZW50LmNsZWFyKCk7CiAKLSAgICBTdHJpbmcgYXR0YWNoZWRIZWlnaHQgPSBzZXR0aW5nKGlu
c3BlY3RvckF0dGFjaGVkSGVpZ2h0TmFtZSk7Ci0gICAgYm9vbCBzdWNjZXNzID0gdHJ1ZTsKLSAg
ICBpbnQgaGVpZ2h0ID0gYXR0YWNoZWRIZWlnaHQudG9JbnQoJnN1Y2Nlc3MpOwotICAgIHVuc2ln
bmVkIHByZWZlcnJlZEhlaWdodCA9IHN1Y2Nlc3MgPyBoZWlnaHQgOiBkZWZhdWx0QXR0YWNoZWRI
ZWlnaHQ7Ci0KLSAgICAvLyBUaGlzIGNhbGwgbWlnaHQgbm90IGdvIHRocm91Z2ggKGlmIHRoZSB3
aW5kb3cgc3RhcnRzIG91dCBkZXRhY2hlZCksIGJ1dCBpZiB0aGUgd2luZG93IGlzIGluaXRpYWxs
eSBjcmVhdGVkIGF0dGFjaGVkLAotICAgIC8vIEluc3BlY3RvckNvbnRyb2xsZXI6OmF0dGFjaFdp
bmRvdyBpcyBuZXZlciBjYWxsZWQsIHNvIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRvIHNldCB0aGUg
YXR0YWNoZWRXaW5kb3dIZWlnaHQuCi0gICAgLy8gRklYTUU6IENsZWFuIHVwIGNvZGUgc28gd2Ug
b25seSBoYXZlIHRvIGNhbGwgc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQgaW4gSW5zcGVjdG9yQ29u
dHJvbGxlcjo6YXR0YWNoV2luZG93Ci0gICAgbV9jbGllbnQtPnNldEF0dGFjaGVkV2luZG93SGVp
Z2h0KGNvbnN0cmFpbmVkQXR0YWNoZWRXaW5kb3dIZWlnaHQocHJlZmVycmVkSGVpZ2h0LCBpbnNw
ZWN0ZWRQYWdlSGVpZ2h0KSk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6Y2xvc2VX
aW5kb3coKQotewotICAgIG1fY2xpZW50LT5jbG9zZVdpbmRvdygpOworICAgIG1fY2xvc2luZ0Zy
b250ZW5kID0gZmFsc2U7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cmVsZWFzZURP
TUFnZW50KCkKQEAgLTY4MSw3ICs1NTcsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnJl
bGVhc2VET01BZ2VudCgpCiAgICAgLy8gbm8gcmVmZXJlbmNlcyB0byB0aGUgRE9NIGFnZW50IGZy
b20gdGhlIERPTSB0cmVlLgogICAgIGlmIChtX2RvbUFnZW50KQogICAgICAgICBtX2RvbUFnZW50
LT5yZXNldCgpOwotICAgIG1fZG9tQWdlbnQgPSAwOworICAgIG1fZG9tQWdlbnQuY2xlYXIoKTsK
IH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpwb3B1bGF0ZVNjcmlwdE9iamVjdHMoKQpA
QCAtNzE1LDcgKzU5MSw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cG9wdWxhdGVTY3Jp
cHRPYmplY3RzKCkKICAgICAgICAgbV9mcm9udGVuZC0+dXBkYXRlQ29uc29sZU1lc3NhZ2VFeHBp
cmVkQ291bnQobV9leHBpcmVkQ29uc29sZU1lc3NhZ2VDb3VudCk7CiAgICAgdW5zaWduZWQgbWVz
c2FnZUNvdW50ID0gbV9jb25zb2xlTWVzc2FnZXMuc2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtZXNzYWdlQ291bnQ7ICsraSkKLSAgICAgICAgbV9jb25zb2xlTWVzc2FnZXNb
aV0tPmFkZFRvQ29uc29sZShtX2Zyb250ZW5kLmdldCgpKTsKKyAgICAgICAgbV9jb25zb2xlTWVz
c2FnZXNbaV0tPmFkZFRvRnJvbnRlbmQobV9mcm9udGVuZC5nZXQoKSwgbV9pbmplY3RlZFNjcmlw
dEhvc3QuZ2V0KCkpOwogCiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICAgaWYg
KG1fZGVidWdnZXJFbmFibGVkKQpAQCAtODAxLDcgKzY3Nyw4IEBAIHZvaWQgSW5zcGVjdG9yQ29u
dHJvbGxlcjo6ZGlkQ29tbWl0TG9hZChEb2N1bWVudExvYWRlciogbG9hZGVyKQogICAgIEFTU0VS
VChtX2luc3BlY3RlZFBhZ2UpOwogCiAgICAgaWYgKGxvYWRlci0+ZnJhbWUoKSA9PSBtX2luc3Bl
Y3RlZFBhZ2UtPm1haW5GcmFtZSgpKSB7Ci0gICAgICAgIG1fY2xpZW50LT5pbnNwZWN0ZWRVUkxD
aGFuZ2VkKGxvYWRlci0+dXJsKCkuc3RyaW5nKCkpOworICAgICAgICBpZiAobV9mcm9udGVuZCkK
KyAgICAgICAgICAgIG1fZnJvbnRlbmQtPmluc3BlY3RlZFVSTENoYW5nZWQobG9hZGVyLT51cmwo
KS5zdHJpbmcoKSk7CiAKICAgICAgICAgbV9pbmplY3RlZFNjcmlwdEhvc3QtPmRpc2NhcmRJbmpl
Y3RlZFNjcmlwdHMoKTsKICAgICAgICAgY2xlYXJDb25zb2xlTWVzc2FnZXMoKTsKQEAgLTE0MzYs
MTYgKzEzMTMsNiBAQCBJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UqIEluc3BlY3RvckNvbnRy
b2xsZXI6OmdldERPTVN0b3JhZ2VSZXNvdXJjZUZvcklkKGludAogfQogI2VuZGlmCiAKLXZvaWQg
SW5zcGVjdG9yQ29udHJvbGxlcjo6bW92ZVdpbmRvd0J5KGZsb2F0IHgsIGZsb2F0IHkpIGNvbnN0
Ci17Ci0gICAgaWYgKCFtX3BhZ2UgfHwgIWVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgRmxvYXRSZWN0IGZyYW1lUmVjdCA9IG1fcGFnZS0+Y2hyb21lKCktPndpbmRvd1JlY3QoKTsK
LSAgICBmcmFtZVJlY3QubW92ZSh4LCB5KTsKLSAgICBtX3BhZ2UtPmNocm9tZSgpLT5zZXRXaW5k
b3dSZWN0KGZyYW1lUmVjdCk7Ci19Ci0KICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikK
IHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6YWRkUHJvZmlsZShQYXNzUmVmUHRyPFNjcmlwdFBy
b2ZpbGU+IHBycFByb2ZpbGUsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291
cmNlVVJMKQogewpAQCAtMTQ5OCw3ICsxMzY1LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVy
OjpnZXRQcm9maWxlKGxvbmcgY2FsbElkLCB1bnNpZ25lZCB1aWQpCiAgICAgUHJvZmlsZXNNYXA6
Oml0ZXJhdG9yIGl0ID0gbV9wcm9maWxlcy5maW5kKHVpZCk7CiAjaWYgVVNFKEpTQykKICAgICBp
ZiAoaXQgIT0gbV9wcm9maWxlcy5lbmQoKSkKLSAgICAgICAgbV9mcm9udGVuZC0+ZGlkR2V0UHJv
ZmlsZShjYWxsSWQsIHRvSlMobV9mcm9udGVuZFNjcmlwdFN0YXRlLCBpdC0+c2Vjb25kLmdldCgp
KSk7CisgICAgICAgIG1fZnJvbnRlbmQtPmRpZEdldFByb2ZpbGUoY2FsbElkLCB0b0pTKG1fZnJv
bnRlbmQtPnNjcmlwdFN0YXRlKCksIGl0LT5zZWNvbmQuZ2V0KCkpKTsKICNlbmRpZgogfQogCkBA
IC0xNjM1LDcgKzE1MDIsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmVuYWJsZURlYnVn
Z2VyKCkKICAgICBpZiAobV9kZWJ1Z2dlckVuYWJsZWQpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGlmICghbV9mcm9udGVuZFNjcmlwdFN0YXRlIHx8ICFtX2Zyb250ZW5kKQorICAgIGlmICghbV9m
cm9udGVuZCkKICAgICAgICAgbV9hdHRhY2hEZWJ1Z2dlcldoZW5TaG93biA9IHRydWU7CiAgICAg
ZWxzZSB7CiAgICAgICAgIG1fZnJvbnRlbmQtPmF0dGFjaERlYnVnZ2VyV2hlblNob3duKCk7CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmggYi9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKaW5kZXggZWFkNGQ1ZS4uNTg4NTNh
YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCisr
KyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaApAQCAtNjYsNyArNjYs
NyBAQCBjbGFzcyBJbmplY3RlZFNjcmlwdEhvc3Q7CiBjbGFzcyBJbnNwZWN0b3JCYWNrZW5kOwog
Y2xhc3MgSW5zcGVjdG9yQ2xpZW50OwogY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmQ7Ci1jbGFzcyBJ
bnNwZWN0b3JGcm9udGVuZEhvc3Q7CitjbGFzcyBJbnNwZWN0b3JGcm9udGVuZENsaWVudDsKIGNs
YXNzIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ7CiBjbGFzcyBKYXZhU2NyaXB0Q2FsbEZyYW1lOwog
Y2xhc3MgS1VSTDsKQEAgLTExNiwxMSArMTE2LDkgQEAgcHVibGljOgogICAgIH5JbnNwZWN0b3JD
b250cm9sbGVyKCk7CiAKICAgICBJbnNwZWN0b3JCYWNrZW5kKiBpbnNwZWN0b3JCYWNrZW5kKCkg
eyByZXR1cm4gbV9pbnNwZWN0b3JCYWNrZW5kLmdldCgpOyB9Ci0gICAgSW5zcGVjdG9yRnJvbnRl
bmRIb3N0KiBpbnNwZWN0b3JGcm9udGVuZEhvc3QoKSB7IHJldHVybiBtX2luc3BlY3RvckZyb250
ZW5kSG9zdC5nZXQoKTsgfQogICAgIEluamVjdGVkU2NyaXB0SG9zdCogaW5qZWN0ZWRTY3JpcHRI
b3N0KCkgeyByZXR1cm4gbV9pbmplY3RlZFNjcmlwdEhvc3QuZ2V0KCk7IH0KIAogICAgIHZvaWQg
aW5zcGVjdGVkUGFnZURlc3Ryb3llZCgpOwotICAgIHZvaWQgcGFnZURlc3Ryb3llZCgpIHsgbV9w
YWdlID0gMDsgfQogCiAgICAgYm9vbCBlbmFibGVkKCkgY29uc3Q7CiAKQEAgLTEzNywyNyArMTM1
LDIyIEBAIHB1YmxpYzoKICAgICB2b2lkIHNob3dQYW5lbChTcGVjaWFsUGFuZWxzKTsKICAgICB2
b2lkIGNsb3NlKCk7CiAKLSAgICBib29sIHdpbmRvd1Zpc2libGUoKTsKLSAgICB2b2lkIHNldFdp
bmRvd1Zpc2libGUoYm9vbCB2aXNpYmxlID0gdHJ1ZSwgYm9vbCBhdHRhY2hlZCA9IGZhbHNlKTsK
LQogICAgIHZvaWQgYWRkTWVzc2FnZVRvQ29uc29sZShNZXNzYWdlU291cmNlLCBNZXNzYWdlVHlw
ZSwgTWVzc2FnZUxldmVsLCBTY3JpcHRDYWxsU3RhY2sqKTsKICAgICB2b2lkIGFkZE1lc3NhZ2VU
b0NvbnNvbGUoTWVzc2FnZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwgY29uc3Qg
U3RyaW5nJiBtZXNzYWdlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJj
ZUlEKTsKICAgICB2b2lkIGNsZWFyQ29uc29sZU1lc3NhZ2VzKCk7CiAgICAgY29uc3QgVmVjdG9y
PENvbnNvbGVNZXNzYWdlKj4mIGNvbnNvbGVNZXNzYWdlcygpIGNvbnN0IHsgcmV0dXJuIG1fY29u
c29sZU1lc3NhZ2VzOyB9CiAKLSAgICBib29sIGNhbkF0dGFjaFdpbmRvdygpIGNvbnN0OwotICAg
IHZvaWQgYXR0YWNoV2luZG93KCk7Ci0gICAgdm9pZCBkZXRhY2hXaW5kb3coKTsKLQogICAgIGJv
b2wgc2VhcmNoaW5nRm9yTm9kZUluUGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2VhcmNoaW5nRm9y
Tm9kZTsgfQogICAgIHZvaWQgbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoY29uc3QgSGl0VGVzdFJl
c3VsdCYsIHVuc2lnbmVkIG1vZGlmaWVyRmxhZ3MpOwogICAgIHZvaWQgaGFuZGxlTW91c2VQcmVz
c09uTm9kZShOb2RlKik7CiAKKyAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2xpZW50KFBh
c3NPd25QdHI8SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ+IGNsaWVudCk7CisgICAgYm9vbCBoYXNJ
bnNwZWN0b3JGcm9udGVuZENsaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRl
bmRDbGllbnQ7IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgCiAgICAgdm9pZCBpbnNwZWN0ZWRXaW5kb3dTY3JpcHRPYmplY3RDbGVhcmVk
KEZyYW1lKik7Ci0gICAgdm9pZCB3aW5kb3dTY3JpcHRPYmplY3RBdmFpbGFibGUoKTsKIAotICAg
IHZvaWQgc2V0RnJvbnRlbmRQcm94eU9iamVjdChTY3JpcHRTdGF0ZSogc3RhdGUsIFNjcmlwdE9i
amVjdCB3ZWJJbnNwZWN0b3JPYmosIFNjcmlwdE9iamVjdCBpbmplY3RlZFNjcmlwdE9iaiA9IFNj
cmlwdE9iamVjdCgpKTsKLSAgICBTY3JpcHRTdGF0ZSogZnJvbnRlbmRTY3JpcHRTdGF0ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fZnJvbnRlbmRTY3JpcHRTdGF0ZTsgfQorICAgIGJvb2wgd2luZG93Vmlz
aWJsZSgpOworICAgIHZvaWQgc2V0RnJvbnRlbmQoUGFzc093blB0cjxJbnNwZWN0b3JGcm9udGVu
ZD4pOwogCiAgICAgdm9pZCBwb3B1bGF0ZVNjcmlwdE9iamVjdHMoKTsKICAgICB2b2lkIHJlc2V0
U2NyaXB0T2JqZWN0cygpOwpAQCAtMjYzLDE5ICsyNTYsMTYgQEAgcHJpdmF0ZToKICAgICBzdGF0
aWMgY29uc3QgU3RyaW5nJiBmcm9udGVuZFNldHRpbmdzU2V0dGluZ05hbWUoKTsKIAogICAgIGZy
aWVuZCBjbGFzcyBJbnNwZWN0b3JCYWNrZW5kOwotICAgIGZyaWVuZCBjbGFzcyBJbnNwZWN0b3JG
cm9udGVuZEhvc3Q7CiAgICAgZnJpZW5kIGNsYXNzIEluamVjdGVkU2NyaXB0SG9zdDsKIAogICAg
IC8vIEZvbGxvd2luZyBhcmUgdXNlZCBmcm9tIEluc3BlY3RvckJhY2tlbmQgYW5kIGludGVybmFs
bHkuCi0KICAgICB2b2lkIHNldFNlYXJjaGluZ0Zvck5vZGUoYm9vbCBlbmFibGVkKTsKIAotICAg
IHZvaWQgc2NyaXB0T2JqZWN0UmVhZHkoKTsKLSAgICB2b2lkIG1vdmVXaW5kb3dCeShmbG9hdCB4
LCBmbG9hdCB5KSBjb25zdDsKLSAgICB2b2lkIHNldEF0dGFjaGVkV2luZG93KGJvb2wpOwotICAg
IHZvaWQgc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KTsKKyAgICB2b2lk
IGZyb250ZW5kUmVhZHkoKTsKKyAgICB2b2lkIHdpbGxDbG9zZUZyb250ZW5kKCk7CisKKyAgICAv
LyBGb2xsb3dpbmcgYXJlIHVzZWQgZnJvbSBJbnNwZWN0b3JCYWNrZW5kIGFuZCBpbnRlcm5hbGx5
LgogICAgIHZvaWQgc3RvcmVMYXN0QWN0aXZlUGFuZWwoY29uc3QgU3RyaW5nJiBwYW5lbE5hbWUp
OwotICAgIHZvaWQgY2xvc2VXaW5kb3coKTsKICAgICBJbnNwZWN0b3JET01BZ2VudCogZG9tQWdl
bnQoKSB7IHJldHVybiBtX2RvbUFnZW50LmdldCgpOyB9CiAgICAgdm9pZCByZWxlYXNlRE9NQWdl
bnQoKTsKIApAQCAtMzE2LDggKzMwNiw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwcnVuZVJlc291
cmNlcyhSZXNvdXJjZXNNYXAqLCBEb2N1bWVudExvYWRlciogbG9hZGVyVG9LZWVwID0gMCk7CiAg
ICAgdm9pZCByZW1vdmVBbGxSZXNvdXJjZXMoUmVzb3VyY2VzTWFwKiBtYXApIHsgcHJ1bmVSZXNv
dXJjZXMobWFwKTsgfQogCi0gICAgdm9pZCBzaG93V2luZG93KCk7Ci0KICAgICBib29sIGlzTWFp
blJlc291cmNlTG9hZGVyKERvY3VtZW50TG9hZGVyKiBsb2FkZXIsIGNvbnN0IEtVUkwmIHJlcXVl
c3RVcmwpOwogCiAgICAgU3BlY2lhbFBhbmVscyBzcGVjaWFsUGFuZWxGb3JKU05hbWUoY29uc3Qg
U3RyaW5nJiBwYW5lbE5hbWUpOwpAQCAtMzI2LDEwICszMTQsMTIgQEAgcHJpdmF0ZToKIAogICAg
IFBhZ2UqIG1faW5zcGVjdGVkUGFnZTsKICAgICBJbnNwZWN0b3JDbGllbnQqIG1fY2xpZW50Owor
ICAgIE93blB0cjxJbnNwZWN0b3JGcm9udGVuZENsaWVudD4gbV9pbnNwZWN0b3JGcm9udGVuZENs
aWVudDsKKyAgICBib29sIG1fb3BlbmluZ0Zyb250ZW5kOworICAgIGJvb2wgbV9jbG9zaW5nRnJv
bnRlbmQ7CiAgICAgT3duUHRyPEluc3BlY3RvckZyb250ZW5kPiBtX2Zyb250ZW5kOwogICAgIFJl
ZlB0cjxJbnNwZWN0b3JET01BZ2VudD4gbV9kb21BZ2VudDsKICAgICBPd25QdHI8SW5zcGVjdG9y
VGltZWxpbmVBZ2VudD4gbV90aW1lbGluZUFnZW50OwotICAgIFBhZ2UqIG1fcGFnZTsKICAgICBS
ZWZQdHI8Tm9kZT4gbV9ub2RlVG9Gb2N1czsKICAgICBSZWZQdHI8SW5zcGVjdG9yUmVzb3VyY2U+
IG1fbWFpblJlc291cmNlOwogICAgIFJlc291cmNlc01hcCBtX3Jlc291cmNlczsKQEAgLTM0NSw4
ICszMzUsNiBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShET01fU1RPUkFHRSkKICAgICBET01TdG9y
YWdlUmVzb3VyY2VzTWFwIG1fZG9tU3RvcmFnZVJlc291cmNlczsKICNlbmRpZgotICAgIFNjcmlw
dFN0YXRlKiBtX2Zyb250ZW5kU2NyaXB0U3RhdGU7Ci0gICAgYm9vbCBtX3dpbmRvd1Zpc2libGU7
CiAgICAgU3BlY2lhbFBhbmVscyBtX3Nob3dBZnRlclZpc2libGU7CiAgICAgUmVmUHRyPE5vZGU+
IG1faGlnaGxpZ2h0ZWROb2RlOwogICAgIHVuc2lnbmVkIG1fZ3JvdXBMZXZlbDsKQEAgLTM1NSw3
ICszNDMsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9yZXNvdXJjZVRyYWNraW5nRW5hYmxlZDsK
ICAgICBib29sIG1fcmVzb3VyY2VUcmFja2luZ1NldHRpbmdzTG9hZGVkOwogICAgIFJlZlB0cjxJ
bnNwZWN0b3JCYWNrZW5kPiBtX2luc3BlY3RvckJhY2tlbmQ7Ci0gICAgUmVmUHRyPEluc3BlY3Rv
ckZyb250ZW5kSG9zdD4gbV9pbnNwZWN0b3JGcm9udGVuZEhvc3Q7CiAgICAgUmVmUHRyPEluamVj
dGVkU2NyaXB0SG9zdD4gbV9pbmplY3RlZFNjcmlwdEhvc3Q7CiAKICAgICB0eXBlZGVmIEhhc2hN
YXA8U3RyaW5nLCBTdHJpbmc+IFNldHRpbmdzOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRnJvbnRlbmQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJv
bnRlbmQuY3BwCmluZGV4IGFmNTYyMGYuLmNjNWNkNzUgMTAwNzU1Ci0tLSBhL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JGcm9udGVuZC5jcHAKQEAgLTQ5LDE0ICs0OSwxNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLUluc3BlY3RvckZyb250ZW5kOjpJbnNwZWN0b3JGcm9udGVuZChJbnNwZWN0b3JDb250
cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyLCBTY3JpcHRPYmplY3Qgd2ViSW5zcGVjdG9yKQot
ICAgIDogbV9pbnNwZWN0b3JDb250cm9sbGVyKGluc3BlY3RvckNvbnRyb2xsZXIpCi0gICAgLCBt
X3dlYkluc3BlY3Rvcih3ZWJJbnNwZWN0b3IpCitJbnNwZWN0b3JGcm9udGVuZDo6SW5zcGVjdG9y
RnJvbnRlbmQoU2NyaXB0T2JqZWN0IHdlYkluc3BlY3RvcikKKyAgICA6IG1fd2ViSW5zcGVjdG9y
KHdlYkluc3BlY3RvcikKIHsKIH0KIAogSW5zcGVjdG9yRnJvbnRlbmQ6On5JbnNwZWN0b3JGcm9u
dGVuZCgpIAogeworICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3dlYkluc3BlY3Rv
ciwgImNsb3NlIik7CisgICAgZnVuY3Rpb24uY2FsbCgpOworCiAgICAgbV93ZWJJbnNwZWN0b3Ig
PSBTY3JpcHRPYmplY3QoKTsKIH0KIApAQCAtOTEsNyArOTMsNyBAQCB2b2lkIEluc3BlY3RvckZy
b250ZW5kOjp1cGRhdGVDb25zb2xlTWVzc2FnZUV4cGlyZWRDb3VudCh1bnNpZ25lZCBjb3VudCkK
ICAgICBmdW5jdGlvbi5jYWxsKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmFkZENv
bnNvbGVNZXNzYWdlKGNvbnN0IFNjcmlwdE9iamVjdCYgbWVzc2FnZU9iaiwgY29uc3QgVmVjdG9y
PFNjcmlwdFN0cmluZz4mIGZyYW1lcywgU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBjb25zdCBW
ZWN0b3I8U2NyaXB0VmFsdWU+IGFyZ3VtZW50cywgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQordm9p
ZCBJbnNwZWN0b3JGcm9udGVuZDo6YWRkQ29uc29sZU1lc3NhZ2UoY29uc3QgU2NyaXB0T2JqZWN0
JiBtZXNzYWdlT2JqLCBjb25zdCBWZWN0b3I8U2NyaXB0U3RyaW5nPiYgZnJhbWVzLCBjb25zdCBW
ZWN0b3I8UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gPiYgYXJndW1lbnRzLCBjb25zdCBT
dHJpbmcmIG1lc3NhZ2UpCiB7CiAgICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fd2Vi
SW5zcGVjdG9yLCAiZGlzcGF0Y2giKTsgCiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoImFk
ZENvbnNvbGVNZXNzYWdlIik7CkBAIC0xMDAsMTAgKzEwMiw4IEBAIHZvaWQgSW5zcGVjdG9yRnJv
bnRlbmQ6OmFkZENvbnNvbGVNZXNzYWdlKGNvbnN0IFNjcmlwdE9iamVjdCYgbWVzc2FnZU9iaiwg
Y29uc3QKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZyYW1lcy5zaXplKCk7ICsr
aSkKICAgICAgICAgICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGZyYW1lc1tpXSk7CiAgICAg
fSBlbHNlIGlmICghYXJndW1lbnRzLmlzRW1wdHkoKSkgewotICAgICAgICBJbmplY3RlZFNjcmlw
dCBpbmplY3RlZFNjcmlwdCA9IG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5qZWN0ZWRTY3JpcHRI
b3N0KCktPmluamVjdGVkU2NyaXB0Rm9yKHNjcmlwdFN0YXRlKTsKICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGFyZ3VtZW50cy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZFZhbHVlID0gaW5qZWN0ZWRTY3Jp
cHQud3JhcEZvckNvbnNvbGUoYXJndW1lbnRzW2ldKTsKLSAgICAgICAgICAgIFNjcmlwdFZhbHVl
IHNjcmlwdFZhbHVlID0gU2NyaXB0VmFsdWU6OmRlc2VyaWFsaXplKHRoaXMtPnNjcmlwdFN0YXRl
KCksIHNlcmlhbGl6ZWRWYWx1ZS5nZXQoKSk7CisgICAgICAgICAgICBTY3JpcHRWYWx1ZSBzY3Jp
cHRWYWx1ZSA9IFNjcmlwdFZhbHVlOjpkZXNlcmlhbGl6ZShzY3JpcHRTdGF0ZSgpLCBhcmd1bWVu
dHNbaV0uZ2V0KCkpOwogICAgICAgICAgICAgaWYgKHNjcmlwdFZhbHVlLmhhc05vVmFsdWUoKSkg
ewogICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgICAg
IHJldHVybjsKQEAgLTIyMCw2ICsyMjAsMTkgQEAgdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6cmVz
ZXQoKQogICAgIGNhbGxTaW1wbGVGdW5jdGlvbigicmVzZXQiKTsKIH0KIAordm9pZCBJbnNwZWN0
b3JGcm9udGVuZDo6YnJpbmdUb0Zyb250KCkKK3sKKyAgICBjYWxsU2ltcGxlRnVuY3Rpb24oImJy
aW5nVG9Gcm9udCIpOworfQorCit2b2lkIEluc3BlY3RvckZyb250ZW5kOjppbnNwZWN0ZWRVUkxD
aGFuZ2VkKGNvbnN0IFN0cmluZyYgdXJsKQoreworICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5j
dGlvbihtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7CisgICAgZnVuY3Rpb24uYXBwZW5kQXJn
dW1lbnQoImluc3BlY3RlZFVSTENoYW5nZWQiKTsKKyAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVu
dCh1cmwpOworICAgIGZ1bmN0aW9uLmNhbGwoKTsKK30KKwogdm9pZCBJbnNwZWN0b3JGcm9udGVu
ZDo6cmVzb3VyY2VUcmFja2luZ1dhc0VuYWJsZWQoKQogewogICAgIGNhbGxTaW1wbGVGdW5jdGlv
bigicmVzb3VyY2VUcmFja2luZ1dhc0VuYWJsZWQiKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JG
cm9udGVuZC5oCmluZGV4IDg2MWE2ZjcuLjI1YTAzNTEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRnJvbnRlbmQuaApAQCAtNDksNyArNDksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAg
ICBjbGFzcyBJbnNwZWN0b3JGcm9udGVuZCA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiAgICAgcHVi
bGljOgotICAgICAgICBJbnNwZWN0b3JGcm9udGVuZChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNw
ZWN0b3JDb250cm9sbGVyLCBTY3JpcHRPYmplY3Qgd2ViSW5zcGVjdG9yKTsKKyAgICAgICAgSW5z
cGVjdG9yRnJvbnRlbmQoU2NyaXB0T2JqZWN0IHdlYkluc3BlY3Rvcik7CiAgICAgICAgIH5JbnNw
ZWN0b3JGcm9udGVuZCgpOwogCiAgICAgICAgIFNjcmlwdEFycmF5IG5ld1NjcmlwdEFycmF5KCk7
CkBAIC02MCw3ICs2MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBwb3B1
bGF0ZUZyb250ZW5kU2V0dGluZ3MoY29uc3QgU3RyaW5nJiBzZXR0aW5ncyk7CiAKICAgICAgICAg
dm9pZCB1cGRhdGVDb25zb2xlTWVzc2FnZUV4cGlyZWRDb3VudCh1bnNpZ25lZCBjb3VudCk7Ci0g
ICAgICAgIHZvaWQgYWRkQ29uc29sZU1lc3NhZ2UoY29uc3QgU2NyaXB0T2JqZWN0JiBtZXNzYWdl
T2JqLCBjb25zdCBWZWN0b3I8U2NyaXB0U3RyaW5nPiYgZnJhbWVzLCBTY3JpcHRTdGF0ZSosIGNv
bnN0IFZlY3RvcjxTY3JpcHRWYWx1ZT4gYXJndW1lbnRzLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2Up
OworICAgICAgICB2b2lkIGFkZENvbnNvbGVNZXNzYWdlKGNvbnN0IFNjcmlwdE9iamVjdCYgbWVz
c2FnZU9iaiwgY29uc3QgVmVjdG9yPFNjcmlwdFN0cmluZz4mIGZyYW1lcywgY29uc3QgVmVjdG9y
PFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+ID4mIGFyZ3VtZW50cywgY29uc3QgU3RyaW5n
JiBtZXNzYWdlKTsKICAgICAgICAgdm9pZCB1cGRhdGVDb25zb2xlTWVzc2FnZVJlcGVhdENvdW50
KHVuc2lnbmVkIGNvdW50KTsKICAgICAgICAgdm9pZCBjbGVhckNvbnNvbGVNZXNzYWdlcygpOwog
CkBAIC03Myw2ICs3Myw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBzaG93
UGFuZWwoaW50IHBhbmVsKTsKICAgICAgICAgdm9pZCBwb3B1bGF0ZUludGVyZmFjZSgpOwogICAg
ICAgICB2b2lkIHJlc2V0KCk7CisgICAgICAgIAorICAgICAgICB2b2lkIGJyaW5nVG9Gcm9udCgp
OworICAgICAgICB2b2lkIGluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJik7CiAKICAg
ICAgICAgdm9pZCByZXNvdXJjZVRyYWNraW5nV2FzRW5hYmxlZCgpOwogICAgICAgICB2b2lkIHJl
c291cmNlVHJhY2tpbmdXYXNEaXNhYmxlZCgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckZyb250ZW5kQ2xpZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU4
MzQ2YgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250
ZW5kQ2xpZW50LmgKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSW5zcGVjdG9yRnJvbnRlbmRDbGll
bnRfaAorI2RlZmluZSBJbnNwZWN0b3JGcm9udGVuZENsaWVudF9oCisKKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ29udGV4dE1lbnVJdGVt
OworY2xhc3MgRXZlbnQ7CitjbGFzcyBTdHJpbmc7CisKK2NsYXNzIEluc3BlY3RvckZyb250ZW5k
Q2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5JbnNwZWN0b3JGcm9udGVuZENsaWVudCgp
IHsgfQorCisgICAgdmlydHVhbCB2b2lkIHdpbmRvd09iamVjdENsZWFyZWQoKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGZyb250ZW5kTG9hZGVkKCkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIG1v
dmVXaW5kb3dCeShmbG9hdCB4LCBmbG9hdCB5KSA9IDA7CisKKyAgICB2aXJ0dWFsIFN0cmluZyBs
b2NhbGl6ZWRTdHJpbmdzVVJMKCkgPSAwOworICAgIHZpcnR1YWwgU3RyaW5nIGhpZGRlblBhbmVs
cygpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBicmluZ1RvRnJvbnQoKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGNsb3NlV2luZG93KCkgPSAwOworCisgICAgdmlydHVhbCBib29sIGNhbkF0dGFj
aFdpbmRvdygpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoV2luZG93KCkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBkZXRhY2hXaW5kb3coKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNoYW5n
ZUF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkKSA9IDA7CisgICAgCisgICAgdmlydHVhbCB2
b2lkIGluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJikgPSAwOworCisgICAgdmlydHVh
bCB2b2lkIHNob3dDb250ZXh0TWVudShFdmVudCosIGNvbnN0IFZlY3RvcjxDb250ZXh0TWVudUl0
ZW0qPiYpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmNw
cCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0OWY3OTUKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmNwcApA
QCAtMCwwICsxLDIzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
ICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JG
cm9udGVuZENsaWVudExvY2FsLmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVk
ZSAiQ2hyb21lLmgiCisjaW5jbHVkZSAiQ29udGV4dE1lbnUuaCIKKyNpbmNsdWRlICJDb250ZXh0
TWVudUNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJDb250ZXh0TWVudUl0ZW0uaCIKKyNpbmNsdWRl
ICJDb250ZXh0TWVudVByb3ZpZGVyLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVk
ZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JD
b250cm9sbGVyLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmQuaCIKKyNpbmNsdWRlICJJ
bnNwZWN0b3JGcm9udGVuZEhvc3QuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGxh
dGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTY3JpcHRGdW5jdGlvbkNhbGwuaCIKKyNpbmNsdWRl
ICJTY3JpcHRPYmplY3QuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGcm9udGVu
ZE1lbnVQcm92aWRlciA6IHB1YmxpYyBDb250ZXh0TWVudVByb3ZpZGVyIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxGcm9udGVuZE1lbnVQcm92aWRlcj4gY3JlYXRlKEluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50TG9jYWwqIGZyb250ZW5kQ2xpZW50LCBTY3JpcHRPYmplY3Qgd2ViSW5z
cGVjdG9yLCBjb25zdCBWZWN0b3I8Q29udGV4dE1lbnVJdGVtKj4mIGl0ZW1zKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGcm9udGVuZE1lbnVQcm92aWRlcihmcm9udGVuZENs
aWVudCwgd2ViSW5zcGVjdG9yLCBpdGVtcykpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGRpc2Nv
bm5lY3QoKQorICAgIHsKKyAgICAgICAgbV93ZWJJbnNwZWN0b3IgPSBTY3JpcHRPYmplY3QoKTsK
KyAgICAgICAgbV9mcm9udGVuZENsaWVudCA9IDA7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAg
ICBGcm9udGVuZE1lbnVQcm92aWRlcihJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsKiBmcm9u
dGVuZENsaWVudCwgU2NyaXB0T2JqZWN0IHdlYkluc3BlY3RvciwgIGNvbnN0IFZlY3RvcjxDb250
ZXh0TWVudUl0ZW0qPiYgaXRlbXMpCisgICAgICAgIDogbV9mcm9udGVuZENsaWVudChmcm9udGVu
ZENsaWVudCkKKyAgICAgICAgLCBtX3dlYkluc3BlY3Rvcih3ZWJJbnNwZWN0b3IpCisgICAgICAg
ICwgbV9pdGVtcyhpdGVtcykKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB+RnJvbnRlbmRN
ZW51UHJvdmlkZXIoKQorICAgIHsKKyAgICAgICAgY29udGV4dE1lbnVDbGVhcmVkKCk7CisgICAg
fQorICAgIAorICAgIHZpcnR1YWwgdm9pZCBwb3B1bGF0ZUNvbnRleHRNZW51KENvbnRleHRNZW51
KiBtZW51KQorICAgIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2l0ZW1zLnNp
emUoKTsgKytpKQorICAgICAgICAgICAgbWVudS0+YXBwZW5kSXRlbSgqbV9pdGVtc1tpXSk7Cisg
ICAgfQorICAgIAorICAgIHZpcnR1YWwgdm9pZCBjb250ZXh0TWVudUl0ZW1TZWxlY3RlZChDb250
ZXh0TWVudUl0ZW0qIGl0ZW0pCisgICAgeworICAgICAgICBpbnQgaXRlbU51bWJlciA9IGl0ZW0t
PmFjdGlvbigpIC0gQ29udGV4dE1lbnVJdGVtQmFzZUN1c3RvbVRhZzsKKworICAgICAgICBTY3Jp
cHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIpOworICAg
ICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudCgiY29udGV4dE1lbnVJdGVtU2VsZWN0ZWQiKTsK
KyAgICAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoaXRlbU51bWJlcik7CisgICAgICAgIGZ1
bmN0aW9uLmNhbGwoKTsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCB2b2lkIGNvbnRleHRNZW51
Q2xlYXJlZCgpCisgICAgeworCisgICAgICAgIGlmIChtX2Zyb250ZW5kQ2xpZW50KSB7CisgICAg
ICAgICAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJbnNwZWN0b3IsICJkaXNw
YXRjaCIpOworICAgICAgICAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoImNvbnRleHRNZW51
Q2xlYXJlZCIpOworICAgICAgICAgICAgZnVuY3Rpb24uY2FsbCgpOworCisgICAgICAgICAgICBt
X2Zyb250ZW5kQ2xpZW50LT5tX21lbnVQcm92aWRlciA9IDA7CisgICAgICAgIH0KKyAgICAgICAg
ZGVsZXRlQWxsVmFsdWVzKG1faXRlbXMpOworICAgICAgICBtX2l0ZW1zLmNsZWFyKCk7CisgICAg
fQorCisgICAgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbCogbV9mcm9udGVuZENsaWVudDsK
KyAgICBTY3JpcHRPYmplY3QgbV93ZWJJbnNwZWN0b3I7CisgICAgVmVjdG9yPENvbnRleHRNZW51
SXRlbSo+IG1faXRlbXM7Cit9OworCitzdGF0aWMgY29uc3QgY2hhciogY29uc3QgaW5zcGVjdG9y
QXR0YWNoZWRIZWlnaHROYW1lID0gImluc3BlY3RvckF0dGFjaGVkSGVpZ2h0IjsKK3N0YXRpYyBj
b25zdCB1bnNpZ25lZCBkZWZhdWx0QXR0YWNoZWRIZWlnaHQgPSAzMDA7CitzdGF0aWMgY29uc3Qg
ZmxvYXQgbWluaW11bUF0dGFjaGVkSGVpZ2h0ID0gMjUwLjBmOworc3RhdGljIGNvbnN0IGZsb2F0
IG1heGltdW1BdHRhY2hlZEhlaWdodFJhdGlvID0gMC43NWY7CisKK0luc3BlY3RvckZyb250ZW5k
Q2xpZW50TG9jYWw6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwoSW5zcGVjdG9yQ29udHJv
bGxlciogaW5zcGVjdG9yQ29udHJvbGxlciwgUGFnZSogZnJvbnRlbmRQYWdlKQorICAgIDogbV9p
bnNwZWN0b3JDb250cm9sbGVyKGluc3BlY3RvckNvbnRyb2xsZXIpCisgICAgLCBtX2Zyb250ZW5k
UGFnZShmcm9udGVuZFBhZ2UpCisgICAgLCBtX2Zyb250ZW5kU2NyaXB0U3RhdGUoMCkKKyAgICAs
IG1fbWVudVByb3ZpZGVyKDApCit7Cit9CisKK0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6
On5JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsKCkKK3sKKyAgICBpZiAobV9tZW51UHJvdmlk
ZXIpCisgICAgICAgIG1fbWVudVByb3ZpZGVyLT5kaXNjb25uZWN0KCk7CisgICAgbV9mcm9udGVu
ZFNjcmlwdFN0YXRlID0gMDsKKyAgICBtX2Zyb250ZW5kUGFnZSA9IDA7CisgICAgbV9pbnNwZWN0
b3JDb250cm9sbGVyID0gMDsKK30KKyAgICAKK3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRM
b2NhbDo6d2luZG93T2JqZWN0Q2xlYXJlZCgpCit7CisgICAgLy8gR3JhbnQgdGhlIGluc3BlY3Rv
ciB0aGUgYWJpbGl0eSB0byBzY3JpcHQgdGhlIGluc3BlY3RlZCBwYWdlLgorICAgIG1fZnJvbnRl
bmRQYWdlLT5tYWluRnJhbWUoKS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+Z3JhbnRV
bml2ZXJzYWxBY2Nlc3MoKTsKKyAgICAvLyBGSVhNRTogZG9uJ3Qga2VlcCByZWZlcmVuY2UgdG8g
dGhlIHNjcmlwdCBzdGF0ZQorICAgIG1fZnJvbnRlbmRTY3JpcHRTdGF0ZSA9IHNjcmlwdFN0YXRl
RnJvbVBhZ2UoZGVidWdnZXJXb3JsZCgpLCBtX2Zyb250ZW5kUGFnZSk7CisgICAgU2NyaXB0R2xv
YmFsT2JqZWN0OjpzZXQobV9mcm9udGVuZFNjcmlwdFN0YXRlLCAiSW5zcGVjdG9yQmFja2VuZCIs
IG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQmFja2VuZCgpKTsKKyAgICBtX2Zyb250
ZW5kSG9zdCA9IEluc3BlY3RvckZyb250ZW5kSG9zdDo6Y3JlYXRlKHRoaXMpOworICAgIFNjcmlw
dEdsb2JhbE9iamVjdDo6c2V0KG1fZnJvbnRlbmRTY3JpcHRTdGF0ZSwgIkluc3BlY3RvckZyb250
ZW5kSG9zdCIsIG1fZnJvbnRlbmRIb3N0LmdldCgpKTsKK30KKwordm9pZCBJbnNwZWN0b3JGcm9u
dGVuZENsaWVudExvY2FsOjpmcm9udGVuZExvYWRlZCgpCit7CisgICAgLy8gTWFrZSBzdXJlIG91
ciB3aW5kb3cgaXMgdmlzaWJsZSBub3cgdGhhdCB0aGUgcGFnZSBsb2FkZWQKKyAgICBicmluZ1Rv
RnJvbnQoKTsKKworICAgIC8vIENyZWF0ZSBJbnNwZWN0b3JGcm9udGVuZCBhbmQgc2V0IGl0IHRv
IEluc3BlY3RvckNvbnRyb2xsZXIuCisgICAgQVNTRVJUKG1fZnJvbnRlbmRTY3JpcHRTdGF0ZSk7
CisgICAgU2NyaXB0T2JqZWN0IHdlYkluc3BlY3Rvck9iajsKKyAgICBpZiAoIVNjcmlwdEdsb2Jh
bE9iamVjdDo6Z2V0KG1fZnJvbnRlbmRTY3JpcHRTdGF0ZSwgIldlYkluc3BlY3RvciIsIHdlYklu
c3BlY3Rvck9iaikpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5zZXRGcm9udGVuZChuZXcg
SW5zcGVjdG9yRnJvbnRlbmQod2ViSW5zcGVjdG9yT2JqKSk7Cit9CisKK2Jvb2wgSW5zcGVjdG9y
RnJvbnRlbmRDbGllbnRMb2NhbDo6Y2FuQXR0YWNoV2luZG93KCkKK3sKKyAgICB1bnNpZ25lZCBp
bnNwZWN0ZWRQYWdlSGVpZ2h0ID0gbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0ZWRQYWdl
KCktPm1haW5GcmFtZSgpLT52aWV3KCktPnZpc2libGVIZWlnaHQoKTsKKworICAgIC8vIERvbid0
IGFsbG93IHRoZSBhdHRhY2ggaWYgdGhlIHdpbmRvdyB3b3VsZCBiZSB0b28gc21hbGwgdG8gYWNj
b21tb2RhdGUgdGhlIG1pbmltdW0gaW5zcGVjdG9yIGhlaWdodC4KKyAgICByZXR1cm4gbWluaW11
bUF0dGFjaGVkSGVpZ2h0IDw9IGluc3BlY3RlZFBhZ2VIZWlnaHQgKiBtYXhpbXVtQXR0YWNoZWRI
ZWlnaHRSYXRpbzsKK30KKwordm9pZCBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjpjaGFu
Z2VBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpCit7CisgICAgdW5zaWduZWQg
dG90YWxIZWlnaHQgPSBtX2Zyb250ZW5kUGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+dmlzaWJs
ZUhlaWdodCgpICsgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0ZWRQYWdlKCktPm1haW5G
cmFtZSgpLT52aWV3KCktPnZpc2libGVIZWlnaHQoKTsKKyAgICB1bnNpZ25lZCBhdHRhY2hlZEhl
aWdodCA9IGNvbnN0cmFpbmVkQXR0YWNoZWRXaW5kb3dIZWlnaHQoaGVpZ2h0LCB0b3RhbEhlaWdo
dCk7CisgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5zZXRTZXR0aW5nKGluc3BlY3RvckF0dGFj
aGVkSGVpZ2h0TmFtZSwgU3RyaW5nOjpudW1iZXIoYXR0YWNoZWRIZWlnaHQpKTsKKyAgICBzZXRB
dHRhY2hlZFdpbmRvd0hlaWdodChhdHRhY2hlZEhlaWdodCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9y
RnJvbnRlbmRDbGllbnRMb2NhbDo6bW92ZVdpbmRvd0J5KGZsb2F0IHgsIGZsb2F0IHkpCit7Cisg
ICAgRmxvYXRSZWN0IGZyYW1lUmVjdCA9IG1fZnJvbnRlbmRQYWdlLT5jaHJvbWUoKS0+d2luZG93
UmVjdCgpOworICAgIGZyYW1lUmVjdC5tb3ZlKHgsIHkpOworICAgIG1fZnJvbnRlbmRQYWdlLT5j
aHJvbWUoKS0+c2V0V2luZG93UmVjdChmcmFtZVJlY3QpOworfQorCit2b2lkIEluc3BlY3RvckZy
b250ZW5kQ2xpZW50TG9jYWw6OnNob3dDb250ZXh0TWVudShFdmVudCogZXZlbnQsIGNvbnN0IFZl
Y3RvcjxDb250ZXh0TWVudUl0ZW0qPiYgaXRlbXMpCit7CisgICAgU2NyaXB0T2JqZWN0IHdlYklu
c3BlY3Rvck9iajsKKyAgICBpZiAoIVNjcmlwdEdsb2JhbE9iamVjdDo6Z2V0KG1fZnJvbnRlbmRT
Y3JpcHRTdGF0ZSwgIldlYkluc3BlY3RvciIsIHdlYkluc3BlY3Rvck9iaikpIHsKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAg
UmVmUHRyPEZyb250ZW5kTWVudVByb3ZpZGVyPiBtZW51UHJvdmlkZXIgPSBGcm9udGVuZE1lbnVQ
cm92aWRlcjo6Y3JlYXRlKHRoaXMsIHdlYkluc3BlY3Rvck9iaiwgaXRlbXMpOworICAgIENvbnRl
eHRNZW51Q29udHJvbGxlciogbWVudUNvbnRyb2xsZXIgPSBtX2Zyb250ZW5kUGFnZS0+Y29udGV4
dE1lbnVDb250cm9sbGVyKCk7CisgICAgbWVudUNvbnRyb2xsZXItPnNob3dDb250ZXh0TWVudShl
dmVudCwgbWVudVByb3ZpZGVyKTsKKyAgICBtX21lbnVQcm92aWRlciA9IG1lbnVQcm92aWRlci5n
ZXQoKTsKK30KKwordm9pZCBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjpzZXRBdHRhY2hl
ZFdpbmRvdyhib29sIGF0dGFjaGVkKQoreworICAgIFNjcmlwdE9iamVjdCB3ZWJJbnNwZWN0b3JP
Ymo7CisgICAgaWYgKCFTY3JpcHRHbG9iYWxPYmplY3Q6OmdldChtX2Zyb250ZW5kU2NyaXB0U3Rh
dGUsICJXZWJJbnNwZWN0b3IiLCB3ZWJJbnNwZWN0b3JPYmopKSB7CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFNjcmlwdEZ1bmN0aW9u
Q2FsbCBmdW5jdGlvbih3ZWJJbnNwZWN0b3JPYmosICJkaXNwYXRjaCIpOyAKKyAgICBmdW5jdGlv
bi5hcHBlbmRBcmd1bWVudCgic2V0QXR0YWNoZWRXaW5kb3ciKTsKKyAgICBmdW5jdGlvbi5hcHBl
bmRBcmd1bWVudChhdHRhY2hlZCk7CisgICAgZnVuY3Rpb24uY2FsbCgpOworfQorCit2b2lkIElu
c3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OnJlc3RvcmVBdHRhY2hlZFdpbmRvd0hlaWdodCgp
Cit7CisgICAgdW5zaWduZWQgaW5zcGVjdGVkUGFnZUhlaWdodCA9IG1faW5zcGVjdG9yQ29udHJv
bGxlci0+aW5zcGVjdGVkUGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpLT52aXNpYmxlSGVpZ2h0
KCk7CisgICAgU3RyaW5nIGF0dGFjaGVkSGVpZ2h0ID0gbV9pbnNwZWN0b3JDb250cm9sbGVyLT5z
ZXR0aW5nKGluc3BlY3RvckF0dGFjaGVkSGVpZ2h0TmFtZSk7CisgICAgYm9vbCBzdWNjZXNzID0g
dHJ1ZTsKKyAgICBpbnQgaGVpZ2h0ID0gYXR0YWNoZWRIZWlnaHQudG9JbnQoJnN1Y2Nlc3MpOwor
ICAgIHVuc2lnbmVkIHByZWZlcnJlZEhlaWdodCA9IHN1Y2Nlc3MgPyBoZWlnaHQgOiBkZWZhdWx0
QXR0YWNoZWRIZWlnaHQ7CisgICAgCisgICAgLy8gVGhpcyBjYWxsIG1pZ2h0IG5vdCBnbyB0aHJv
dWdoIChpZiB0aGUgd2luZG93IHN0YXJ0cyBvdXQgZGV0YWNoZWQpLCBidXQgaWYgdGhlIHdpbmRv
dyBpcyBpbml0aWFsbHkgY3JlYXRlZCBhdHRhY2hlZCwKKyAgICAvLyBJbnNwZWN0b3JDb250cm9s
bGVyOjphdHRhY2hXaW5kb3cgaXMgbmV2ZXIgY2FsbGVkLCBzbyB3ZSBuZWVkIHRvIG1ha2Ugc3Vy
ZSB0byBzZXQgdGhlIGF0dGFjaGVkV2luZG93SGVpZ2h0LgorICAgIC8vIEZJWE1FOiBDbGVhbiB1
cCBjb2RlIHNvIHdlIG9ubHkgaGF2ZSB0byBjYWxsIHNldEF0dGFjaGVkV2luZG93SGVpZ2h0IGlu
IEluc3BlY3RvckNvbnRyb2xsZXI6OmF0dGFjaFdpbmRvdworICAgIHNldEF0dGFjaGVkV2luZG93
SGVpZ2h0KGNvbnN0cmFpbmVkQXR0YWNoZWRXaW5kb3dIZWlnaHQocHJlZmVycmVkSGVpZ2h0LCBp
bnNwZWN0ZWRQYWdlSGVpZ2h0KSk7Cit9CisKK3Vuc2lnbmVkIEluc3BlY3RvckZyb250ZW5kQ2xp
ZW50TG9jYWw6OmNvbnN0cmFpbmVkQXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgcHJlZmVy
cmVkSGVpZ2h0LCB1bnNpZ25lZCB0b3RhbFdpbmRvd0hlaWdodCkKK3sKKyAgICB1c2luZyBuYW1l
c3BhY2Ugc3RkOworICAgIHJldHVybiByb3VuZGYobWF4KG1pbmltdW1BdHRhY2hlZEhlaWdodCwg
bWluPGZsb2F0PihwcmVmZXJyZWRIZWlnaHQsIHRvdGFsV2luZG93SGVpZ2h0ICogbWF4aW11bUF0
dGFjaGVkSGVpZ2h0UmF0aW8pKSk7Cit9CisgICAgCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRD
bGllbnRMb2NhbC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRM
b2NhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxOGM0NzkKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExv
Y2FsLmgKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2Nh
bF9oCisjZGVmaW5lIEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWxfaAorCisjaW5jbHVkZSAi
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaCIKKyNpbmNsdWRlICJTY3JpcHRTdGF0ZS5oIgorI2lu
Y2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IEZyb250ZW5kTWVudVByb3ZpZGVyOworY2xhc3MgSW5zcGVjdG9yQ29udHJvbGxlcjsKK2NsYXNz
IEluc3BlY3RvckZyb250ZW5kSG9zdDsKK2NsYXNzIFBhZ2U7CisKK2NsYXNzIEluc3BlY3RvckZy
b250ZW5kQ2xpZW50TG9jYWwgOiBwdWJsaWMgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQsIHB1Ymxp
YyBOb25jb3B5YWJsZSB7CitwdWJsaWM6CisgICAgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2Nh
bChJbnNwZWN0b3JDb250cm9sbGVyKiwgUGFnZSopOworICAgIHZpcnR1YWwgfkluc3BlY3RvckZy
b250ZW5kQ2xpZW50TG9jYWwoKTsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgd2luZG93T2JqZWN0
Q2xlYXJlZCgpOworICAgIHZpcnR1YWwgdm9pZCBmcm9udGVuZExvYWRlZCgpOworCisgICAgdmly
dHVhbCB2b2lkIG1vdmVXaW5kb3dCeShmbG9hdCB4LCBmbG9hdCB5KTsKKworICAgIHZpcnR1YWwg
Ym9vbCBjYW5BdHRhY2hXaW5kb3coKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2hhbmdlQXR0YWNoZWRX
aW5kb3dIZWlnaHQodW5zaWduZWQpOworCisgICAgdmlydHVhbCB2b2lkIHNob3dDb250ZXh0TWVu
dShFdmVudCosIGNvbnN0IFZlY3RvcjxDb250ZXh0TWVudUl0ZW0qPiYpOworICAgIAorcHJvdGVj
dGVkOgorICAgIHZpcnR1YWwgdm9pZCBzZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCkg
PSAwOworCisgICAgdm9pZCBzZXRBdHRhY2hlZFdpbmRvdyhib29sKTsKKyAgICB2b2lkIHJlc3Rv
cmVBdHRhY2hlZFdpbmRvd0hlaWdodCgpOworCitwcml2YXRlOgorICAgIHN0YXRpYyB1bnNpZ25l
ZCBjb25zdHJhaW5lZEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIHByZWZlcnJlZEhlaWdo
dCwgdW5zaWduZWQgdG90YWxXaW5kb3dIZWlnaHQpOworCisgICAgZnJpZW5kIGNsYXNzIEZyb250
ZW5kTWVudVByb3ZpZGVyOworICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIG1faW5zcGVjdG9yQ29u
dHJvbGxlcjsKKyAgICBQYWdlKiBtX2Zyb250ZW5kUGFnZTsKKyAgICBTY3JpcHRTdGF0ZSogbV9m
cm9udGVuZFNjcmlwdFN0YXRlOworICAgIC8vIFRPRE8oeXVyeXMpOiB0aGlzIHJlZiBzaG91bGRu
J3QgYmUgbmVlZGVkLgorICAgIFJlZlB0cjxJbnNwZWN0b3JGcm9udGVuZEhvc3Q+IG1fZnJvbnRl
bmRIb3N0OworICAgIEZyb250ZW5kTWVudVByb3ZpZGVyKiBtX21lbnVQcm92aWRlcjsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRnJvbnRlbmRIb3N0LmNwcAppbmRleCBjMWExNzYxLi42ZDRjMjE1IDEwMDY0NAotLS0g
YS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCisrKyBiL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAKQEAgLTQxLDggKzQxLDcgQEAK
ICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNp
bmNsdWRlICJIVE1MRnJhbWVPd25lckVsZW1lbnQuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JDbGll
bnQuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZC5oIgorI2luY2x1ZGUgIkluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yUmVzb3VyY2UuaCIKICNpbmNs
dWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFzdGVib2FyZC5oIgpAQCAtNTQsNjUgKzUzLDY5IEBA
IHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSW5zcGVjdG9y
RnJvbnRlbmRIb3N0OjpJbnNwZWN0b3JGcm9udGVuZEhvc3QoSW5zcGVjdG9yQ29udHJvbGxlciog
aW5zcGVjdG9yQ29udHJvbGxlciwgSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQpCi0gICAgOiBtX2lu
c3BlY3RvckNvbnRyb2xsZXIoaW5zcGVjdG9yQ29udHJvbGxlcikKLSAgICAsIG1fY2xpZW50KGNs
aWVudCkKK0luc3BlY3RvckZyb250ZW5kSG9zdDo6SW5zcGVjdG9yRnJvbnRlbmRIb3N0KEluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50KiBjbGllbnQpCisgICAgOiBtX2NsaWVudChjbGllbnQpCiB7CiB9
CiAKIEluc3BlY3RvckZyb250ZW5kSG9zdDo6fkluc3BlY3RvckZyb250ZW5kSG9zdCgpCiB7Ci0g
ICAgaWYgKG1fbWVudVByb3ZpZGVyKQotICAgICAgICBtX21lbnVQcm92aWRlci0+ZGlzY29ubmVj
dCgpOworICAgIEFTU0VSVCghbV9jbGllbnQpOwogfQogCiB2b2lkIEluc3BlY3RvckZyb250ZW5k
SG9zdDo6bG9hZGVkKCkKIHsKLSAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyKQotICAgICAg
ICBtX2luc3BlY3RvckNvbnRyb2xsZXItPnNjcmlwdE9iamVjdFJlYWR5KCk7CisgICAgaWYgKG1f
Y2xpZW50KQorICAgICAgICBtX2NsaWVudC0+ZnJvbnRlbmRMb2FkZWQoKTsKIH0KIAogdm9pZCBJ
bnNwZWN0b3JGcm9udGVuZEhvc3Q6OmF0dGFjaCgpCiB7Ci0gICAgaWYgKG1faW5zcGVjdG9yQ29u
dHJvbGxlcikKLSAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5hdHRhY2hXaW5kb3coKTsK
KyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5hdHRhY2hXaW5kb3coKTsKIH0K
IAogdm9pZCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OmRldGFjaCgpCiB7Ci0gICAgaWYgKG1faW5z
cGVjdG9yQ29udHJvbGxlcikKLSAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kZXRhY2hX
aW5kb3coKTsKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5kZXRhY2hXaW5k
b3coKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OmNsb3NlV2luZG93KCkKIHsK
LSAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyKQotICAgICAgICBtX2luc3BlY3RvckNvbnRy
b2xsZXItPmNsb3NlV2luZG93KCk7CisgICAgaWYgKG1fY2xpZW50KSB7CisgICAgICAgIG1fY2xp
ZW50LT5jbG9zZVdpbmRvdygpOworICAgICAgICBtX2NsaWVudCA9IDA7IC8vIERpc2Nvbm5lY3Qg
ZnJvbSBjbGllbnQuCisgICAgfQorfQorCit2b2lkIEluc3BlY3RvckZyb250ZW5kSG9zdDo6YnJp
bmdUb0Zyb250KCkKK3sKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5icmlu
Z1RvRnJvbnQoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OndpbmRvd1VubG9h
ZGluZygpCit2b2lkIEluc3BlY3RvckZyb250ZW5kSG9zdDo6aW5zcGVjdGVkVVJMQ2hhbmdlZChj
b25zdCBTdHJpbmcmIG5ld1VSTCkKIHsKLSAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyKQot
ICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmNsb3NlKCk7CisgICAgaWYgKG1fY2xpZW50
KQorICAgICAgICBtX2NsaWVudC0+aW5zcGVjdGVkVVJMQ2hhbmdlZChuZXdVUkwpOwogfQogCiBi
b29sIEluc3BlY3RvckZyb250ZW5kSG9zdDo6Y2FuQXR0YWNoV2luZG93KCkgY29uc3QKIHsKLSAg
ICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyKQotICAgICAgICByZXR1cm4gbV9pbnNwZWN0b3JD
b250cm9sbGVyLT5jYW5BdHRhY2hXaW5kb3coKTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0
dXJuIG1fY2xpZW50ICYmIG1fY2xpZW50LT5jYW5BdHRhY2hXaW5kb3coKTsKIH0KIAogdm9pZCBJ
bnNwZWN0b3JGcm9udGVuZEhvc3Q6OnNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhl
aWdodCkKIHsKLSAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyKQotICAgICAgICBtX2luc3Bl
Y3RvckNvbnRyb2xsZXItPnNldEF0dGFjaGVkV2luZG93SGVpZ2h0KGhlaWdodCk7CisgICAgaWYg
KG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+Y2hhbmdlQXR0YWNoZWRXaW5kb3dIZWlnaHQo
aGVpZ2h0KTsKIH0KIAogdm9pZCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6Om1vdmVXaW5kb3dCeShm
bG9hdCB4LCBmbG9hdCB5KSBjb25zdAogewotICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIp
Ci0gICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+bW92ZVdpbmRvd0J5KHgsIHkpOworICAg
IGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPm1vdmVXaW5kb3dCeSh4LCB5KTsKIH0K
IAogU3RyaW5nIEluc3BlY3RvckZyb250ZW5kSG9zdDo6bG9jYWxpemVkU3RyaW5nc1VSTCgpCkBA
IC0xNjEsMzAgKzE2NCw4IEBAIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmRIb3N0Ojpjb3B5VGV4dChj
b25zdCBTdHJpbmcmIHRleHQpCiAKIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmRIb3N0OjpzaG93Q29u
dGV4dE1lbnUoRXZlbnQqIGV2ZW50LCBjb25zdCBWZWN0b3I8Q29udGV4dE1lbnVJdGVtKj4mIGl0
ZW1zKQogewotICAgIGlmICghbV9pbnNwZWN0b3JDb250cm9sbGVyKQotICAgICAgICByZXR1cm47
Ci0gICAgaWYgKCFtX2luc3BlY3RvckNvbnRyb2xsZXItPndpbmRvd1Zpc2libGUoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0KLSAgICBtX21lbnVQcm92aWRlciA9IE1lbnVQcm92aWRlcjo6Y3JlYXRl
KHRoaXMsIGl0ZW1zKTsKLSAgICBDb250ZXh0TWVudUNvbnRyb2xsZXIqIG1lbnVDb250cm9sbGVy
ID0gbV9pbnNwZWN0b3JDb250cm9sbGVyLT5tX3BhZ2UtPmNvbnRleHRNZW51Q29udHJvbGxlcigp
OwotICAgIG1lbnVDb250cm9sbGVyLT5zaG93Q29udGV4dE1lbnUoZXZlbnQsIG1fbWVudVByb3Zp
ZGVyKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OmNvbnRleHRNZW51SXRlbVNl
bGVjdGVkKENvbnRleHRNZW51SXRlbSogaXRlbSkKLXsKLSAgICBpZiAobV9pbnNwZWN0b3JDb250
cm9sbGVyICYmIG1faW5zcGVjdG9yQ29udHJvbGxlci0+d2luZG93VmlzaWJsZSgpKSB7Ci0gICAg
ICAgIGludCBpdGVtTnVtYmVyID0gaXRlbS0+YWN0aW9uKCkgLSBDb250ZXh0TWVudUl0ZW1CYXNl
Q3VzdG9tVGFnOwotICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPm1fZnJvbnRlbmQtPmNv
bnRleHRNZW51SXRlbVNlbGVjdGVkKGl0ZW1OdW1iZXIpOwotICAgIH0KLX0KLQotdm9pZCBJbnNw
ZWN0b3JGcm9udGVuZEhvc3Q6OmNvbnRleHRNZW51Q2xlYXJlZCgpCi17Ci0gICAgbV9tZW51UHJv
dmlkZXIgPSAwOwotICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIgJiYgbV9pbnNwZWN0b3JD
b250cm9sbGVyLT53aW5kb3dWaXNpYmxlKCkpCi0gICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxl
ci0+bV9mcm9udGVuZC0+Y29udGV4dE1lbnVDbGVhcmVkKCk7CisgICAgaWYgKG1fY2xpZW50KQor
ICAgICAgICBtX2NsaWVudC0+c2hvd0NvbnRleHRNZW51KGV2ZW50LCBpdGVtcyk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckZyb250ZW5kSG9zdC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRI
b3N0LmgKaW5kZXggY2JlNmE5Yi4uNmUxNjI5NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRnJvbnRlbmRIb3N0LmgKQEAgLTQzLDI3ICs0MywyNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiBjbGFzcyBDb250ZXh0TWVudUl0ZW07CiBjbGFzcyBFdmVudDsKIGNsYXNzIEluc3BlY3RvckNs
aWVudDsKK2NsYXNzIEluc3BlY3RvckZyb250ZW5kQ2xpZW50OwogY2xhc3MgTm9kZTsKIAogY2xh
c3MgSW5zcGVjdG9yRnJvbnRlbmRIb3N0IDogcHVibGljIFJlZkNvdW50ZWQ8SW5zcGVjdG9yRnJv
bnRlbmRIb3N0PgogewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvckZy
b250ZW5kSG9zdD4gY3JlYXRlKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xs
ZXIsIEluc3BlY3RvckNsaWVudCogY2xpZW50KQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3Bl
Y3RvckZyb250ZW5kSG9zdD4gY3JlYXRlKEluc3BlY3RvckZyb250ZW5kQ2xpZW50KiBjbGllbnQp
CiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvckZyb250ZW5kSG9z
dChpbnNwZWN0b3JDb250cm9sbGVyLCBjbGllbnQpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBJbnNwZWN0b3JGcm9udGVuZEhvc3QoY2xpZW50KSk7CiAgICAgfQogCiAgICAgfkluc3Bl
Y3RvckZyb250ZW5kSG9zdCgpOwogCi0gICAgSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9y
Q29udHJvbGxlcigpIHsgcmV0dXJuIG1faW5zcGVjdG9yQ29udHJvbGxlcjsgfQotCi0gICAgdm9p
ZCBkaXNjb25uZWN0Q29udHJvbGxlcigpIHsgbV9pbnNwZWN0b3JDb250cm9sbGVyID0gMDsgfQot
CiAgICAgdm9pZCBsb2FkZWQoKTsKICAgICB2b2lkIGF0dGFjaCgpOwogICAgIHZvaWQgZGV0YWNo
KCk7CiAgICAgdm9pZCBjbG9zZVdpbmRvdygpOwotICAgIHZvaWQgd2luZG93VW5sb2FkaW5nKCk7
CisgICAgdm9pZCBicmluZ1RvRnJvbnQoKTsKKyAgICB2b2lkIGluc3BlY3RlZFVSTENoYW5nZWQo
Y29uc3QgU3RyaW5nJik7CiAKICAgICBib29sIGNhbkF0dGFjaFdpbmRvdygpIGNvbnN0OwogICAg
IHZvaWQgc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KTsKQEAgLTgwLDU5
ICs3OCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNob3dDb250ZXh0TWVudShFdmVudCosIGNvbnN0
IFZlY3RvcjxDb250ZXh0TWVudUl0ZW0qPiYgaXRlbXMpOwogCiBwcml2YXRlOgotICAgIGNsYXNz
IE1lbnVQcm92aWRlciA6IHB1YmxpYyBDb250ZXh0TWVudVByb3ZpZGVyIHsKLSAgICBwdWJsaWM6
Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lbnVQcm92aWRlcj4gY3JlYXRlKEluc3BlY3Rv
ckZyb250ZW5kSG9zdCogZnJvbnRlbmRIb3N0LCBjb25zdCBWZWN0b3I8Q29udGV4dE1lbnVJdGVt
Kj4mIGl0ZW1zKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1l
bnVQcm92aWRlcihmcm9udGVuZEhvc3QsIGl0ZW1zKSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2
aXJ0dWFsIH5NZW51UHJvdmlkZXIoKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0TWVu
dUNsZWFyZWQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgZGlzY29ubmVjdCgpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIG1fZnJvbnRlbmRIb3N0ID0gMDsKLSAgICAgICAgfQotCi0gICAg
ICAgIHZpcnR1YWwgdm9pZCBwb3B1bGF0ZUNvbnRleHRNZW51KENvbnRleHRNZW51KiBtZW51KQot
ICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1faXRlbXMuc2l6
ZSgpOyArK2kpCi0gICAgICAgICAgICAgICAgbWVudS0+YXBwZW5kSXRlbSgqbV9pdGVtc1tpXSk7
Ci0gICAgICAgIH0KLQotICAgICAgICB2aXJ0dWFsIHZvaWQgY29udGV4dE1lbnVJdGVtU2VsZWN0
ZWQoQ29udGV4dE1lbnVJdGVtKiBpdGVtKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobV9m
cm9udGVuZEhvc3QpCi0gICAgICAgICAgICAgICAgbV9mcm9udGVuZEhvc3QtPmNvbnRleHRNZW51
SXRlbVNlbGVjdGVkKGl0ZW0pOwotICAgICAgICB9Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIGNv
bnRleHRNZW51Q2xlYXJlZCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtX2Zyb250ZW5k
SG9zdCkKLSAgICAgICAgICAgICAgICBtX2Zyb250ZW5kSG9zdC0+Y29udGV4dE1lbnVDbGVhcmVk
KCk7Ci0gICAgICAgICAgICBkZWxldGVBbGxWYWx1ZXMobV9pdGVtcyk7Ci0gICAgICAgICAgICBt
X2l0ZW1zLmNsZWFyKCk7Ci0gICAgICAgIH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIE1lbnVQ
cm92aWRlcihJbnNwZWN0b3JGcm9udGVuZEhvc3QqIGZyb250ZW5kSG9zdCwgIGNvbnN0IFZlY3Rv
cjxDb250ZXh0TWVudUl0ZW0qPiYgaXRlbXMpCi0gICAgICAgICAgICA6IG1fZnJvbnRlbmRIb3N0
KGZyb250ZW5kSG9zdCkKLSAgICAgICAgICAgICwgbV9pdGVtcyhpdGVtcykgeyB9Ci0gICAgICAg
IEluc3BlY3RvckZyb250ZW5kSG9zdCogbV9mcm9udGVuZEhvc3Q7Ci0gICAgICAgIFZlY3RvcjxD
b250ZXh0TWVudUl0ZW0qPiBtX2l0ZW1zOwotICAgIH07Ci0KLSAgICBJbnNwZWN0b3JGcm9udGVu
ZEhvc3QoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciwgSW5zcGVjdG9y
Q2xpZW50KiBjbGllbnQpOwotCi0gICAgdm9pZCBjb250ZXh0TWVudUl0ZW1TZWxlY3RlZChDb250
ZXh0TWVudUl0ZW0qKTsKLSAgICB2b2lkIGNvbnRleHRNZW51Q2xlYXJlZCgpOwotCi0gICAgSW5z
cGVjdG9yQ29udHJvbGxlciogbV9pbnNwZWN0b3JDb250cm9sbGVyOwotICAgIEluc3BlY3RvckNs
aWVudCogbV9jbGllbnQ7Ci0gICAgUmVmUHRyPE1lbnVQcm92aWRlcj4gbV9tZW51UHJvdmlkZXI7
CisgICAgSW5zcGVjdG9yRnJvbnRlbmRIb3N0KEluc3BlY3RvckZyb250ZW5kQ2xpZW50KiBjbGll
bnQpOworCisgICAgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQqIG1fY2xpZW50OwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRnJvbnRlbmRIb3N0LmlkbCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5k
SG9zdC5pZGwKaW5kZXggMTUwZTlmYy4uMGFlZjVjNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmlkbAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JGcm9udGVuZEhvc3QuaWRsCkBAIC0zNiw3ICszNiw4IEBAIG1vZHVsZSBjb3JlIHsK
ICAgICAgICAgdm9pZCBhdHRhY2goKTsKICAgICAgICAgdm9pZCBkZXRhY2goKTsKICAgICAgICAg
dm9pZCBjbG9zZVdpbmRvdygpOwotICAgICAgICB2b2lkIHdpbmRvd1VubG9hZGluZygpOworICAg
ICAgICB2b2lkIGJyaW5nVG9Gcm9udCgpOworICAgICAgICB2b2lkIGluc3BlY3RlZFVSTENoYW5n
ZWQoaW4gRE9NU3RyaW5nIG5ld1VSTCk7CiAKICAgICAgICAgYm9vbGVhbiBjYW5BdHRhY2hXaW5k
b3coKTsKICAgICAgICAgdm9pZCBzZXRBdHRhY2hlZFdpbmRvd0hlaWdodChpbiB1bnNpZ25lZCBs
b25nIGhlaWdodCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5z
cGVjdG9yRnJvbnRlbmRIb3N0U3R1Yi5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9J
bnNwZWN0b3JGcm9udGVuZEhvc3RTdHViLmpzCmluZGV4IGVmZjI1MTguLjU0NTYwNjkgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0b3JGcm9udGVuZEhvc3RT
dHViLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0b3JGcm9udGVu
ZEhvc3RTdHViLmpzCkBAIC00OCw2ICs0OCwxMSBAQCBXZWJJbnNwZWN0b3IuSW5zcGVjdG9yRnJv
bnRlbmRIb3N0U3R1Yi5wcm90b3R5cGUgPSB7CiAgICAgICAgIHJldHVybiAidW5rbm93biI7CiAg
ICAgfSwKIAorICAgIGJyaW5nVG9Gcm9udDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhp
cy5fd2luZG93VmlzaWJsZSA9IHRydWU7CisgICAgfSwKKwogICAgIGNsb3NlV2luZG93OiBmdW5j
dGlvbigpCiAgICAgewogICAgICAgICB0aGlzLl93aW5kb3dWaXNpYmxlID0gZmFsc2U7CkBAIC04
Nyw3ICs5Miw3IEBAIFdlYkluc3BlY3Rvci5JbnNwZWN0b3JGcm9udGVuZEhvc3RTdHViLnByb3Rv
dHlwZSA9IHsKICAgICAgICAgcmV0dXJuICIiOwogICAgIH0sCiAKLSAgICB3aW5kb3dVbmxvYWRp
bmc6IGZ1bmN0aW9uKCkKKyAgICBpbnNwZWN0ZWRVUkxDaGFuZ2VkOiBmdW5jdGlvbih1cmwpCiAg
ICAgewogICAgIH0sCiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9p
bnNwZWN0b3IuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCmlu
ZGV4IDU5MTIwY2QuLjZjZDI2MTQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9pbnNwZWN0b3IuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3Bl
Y3Rvci5qcwpAQCAtNDc4LDcgKzQ3OCw2IEBAIFdlYkluc3BlY3Rvci5sb2FkZWQgPSBmdW5jdGlv
bigpCiAKICAgICB0aGlzLmFkZE1haW5FdmVudExpc3RlbmVycyhkb2N1bWVudCk7CiAKLSAgICB3
aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigidW5sb2FkIiwgdGhpcy53aW5kb3dVbmxvYWQuYmluZCh0
aGlzKSwgdHJ1ZSk7CiAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsIHRoaXMu
d2luZG93UmVzaXplLmJpbmQodGhpcyksIHRydWUpOwogCiAgICAgZG9jdW1lbnQuYWRkRXZlbnRM
aXN0ZW5lcigiZm9jdXMiLCB0aGlzLmZvY3VzQ2hhbmdlZC5iaW5kKHRoaXMpLCB0cnVlKTsKQEAg
LTU2MiwxMSArNTYxLDYgQEAgV2ViSW5zcGVjdG9yLmRpc3BhdGNoID0gZnVuY3Rpb24oKSB7CiAg
ICAgc2V0VGltZW91dChkZWxheURpc3BhdGNoLCAwKTsKIH0KIAotV2ViSW5zcGVjdG9yLndpbmRv
d1VubG9hZCA9IGZ1bmN0aW9uKGV2ZW50KQotewotICAgIEluc3BlY3RvckZyb250ZW5kSG9zdC53
aW5kb3dVbmxvYWRpbmcoKTsKLX0KLQogV2ViSW5zcGVjdG9yLndpbmRvd1Jlc2l6ZSA9IGZ1bmN0
aW9uKGV2ZW50KQogewogICAgIGlmICh0aGlzLmN1cnJlbnRQYW5lbCkKQEAgLTYwNCw2ICs1OTgs
OSBAQCBXZWJJbnNwZWN0b3Iuc2V0QXR0YWNoZWRXaW5kb3cgPSBmdW5jdGlvbihhdHRhY2hlZCkK
IAogV2ViSW5zcGVjdG9yLmNsb3NlID0gZnVuY3Rpb24oZXZlbnQpCiB7CisgICAgaWYgKHRoaXMu
X2lzQ2xvc2luZykKKyAgICAgICAgcmV0dXJuOworICAgIHRoaXMuX2lzQ2xvc2luZyA9IHRydWU7
CiAgICAgSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNsb3NlV2luZG93KCk7CiB9CiAKQEAgLTEzMTUs
NiArMTMxMiwxNiBAQCBXZWJJbnNwZWN0b3IucmVzZXQgPSBmdW5jdGlvbigpCiAgICAgdGhpcy5j
b25zb2xlLmNsZWFyTWVzc2FnZXMoKTsKIH0KIAorV2ViSW5zcGVjdG9yLmJyaW5nVG9Gcm9udCA9
IGZ1bmN0aW9uKCkKK3sKKyAgICBJbnNwZWN0b3JGcm9udGVuZEhvc3QuYnJpbmdUb0Zyb250KCk7
Cit9CisKK1dlYkluc3BlY3Rvci5pbnNwZWN0ZWRVUkxDaGFuZ2VkID0gZnVuY3Rpb24odXJsKQor
eworICAgIEluc3BlY3RvckZyb250ZW5kSG9zdC5pbnNwZWN0ZWRVUkxDaGFuZ2VkKHVybCk7Cit9
CisKIFdlYkluc3BlY3Rvci5yZXNvdXJjZVVSTENoYW5nZWQgPSBmdW5jdGlvbihyZXNvdXJjZSwg
b2xkVVJMKQogewogICAgIGRlbGV0ZSB0aGlzLnJlc291cmNlVVJMTWFwW29sZFVSTF07CmRpZmYg
LS1naXQgYS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaCBiL1dlYkNvcmUvbG9hZGVyL0Vt
cHR5Q2xpZW50cy5oCmluZGV4IDZhMmVjZDUuLmQwMjU4OTEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
bG9hZGVyL0VtcHR5Q2xpZW50cy5oCisrKyBiL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5o
CkBAIC00NzIsMjkgKzQ3MiwxNCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+RW1wdHlJbnNwZWN0
b3JDbGllbnQoKSB7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0b3JEZXN0cm95ZWQoKSB7
IH0KLQotICAgIHZpcnR1YWwgUGFnZSogY3JlYXRlUGFnZSgpIHsgcmV0dXJuIDA7IH07Ci0KLSAg
ICB2aXJ0dWFsIFN0cmluZyBsb2NhbGl6ZWRTdHJpbmdzVVJMKCkgeyByZXR1cm4gU3RyaW5nKCk7
IH0KLQotICAgIHZpcnR1YWwgU3RyaW5nIGhpZGRlblBhbmVscygpIHsgcmV0dXJuIFN0cmluZygp
OyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2hvd1dpbmRvdygpIHsgfQotICAgIHZpcnR1YWwgdm9p
ZCBjbG9zZVdpbmRvdygpIHsgfQotCi0gICAgdmlydHVhbCB2b2lkIGF0dGFjaFdpbmRvdygpIHsg
fQotICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hXaW5kb3coKSB7IH0KLQotICAgIHZpcnR1YWwgdm9p
ZCBzZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCkgeyB9CisgICAgCisgICAgdmlydHVh
bCB2b2lkIG9wZW5JbnNwZWN0b3JGcm9udGVuZChJbnNwZWN0b3JDb250cm9sbGVyKikgeyB9CiAK
ICAgICB2aXJ0dWFsIHZvaWQgaGlnaGxpZ2h0KE5vZGUqKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQg
aGlkZUhpZ2hsaWdodCgpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0ZWRVUkxDaGFuZ2Vk
KGNvbnN0IFN0cmluZyYpIHsgfQogCiAgICAgdmlydHVhbCB2b2lkIHBvcHVsYXRlU2V0dGluZyhj
b25zdCBTdHJpbmcmLCBTdHJpbmcqKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc3RvcmVTZXR0aW5n
KGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpIHsgfQotCi0gICAgdmlydHVhbCB2b2lkIGlu
c3BlY3RvcldpbmRvd09iamVjdENsZWFyZWQoKSB7IH0KIH07CiAKIH0KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcCBiL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVy
LmNwcAppbmRleCA1NGM3OTcyLi5lMTBiNThmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2xvYWRlci9G
cmFtZUxvYWRlci5jcHAKKysrIGIvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCkBAIC0z
OTQ0LDggKzM5NDQsNiBAQCB2b2lkIEZyYW1lTG9hZGVyOjpkaXNwYXRjaERpZENsZWFyV2luZG93
T2JqZWN0SW5Xb3JsZChET01XcmFwcGVyV29ybGQqIHdvcmxkKQogICAgIGlmIChQYWdlKiBwYWdl
ID0gbV9mcmFtZS0+cGFnZSgpKSB7CiAgICAgICAgIGlmIChJbnNwZWN0b3JDb250cm9sbGVyKiBp
bnNwZWN0b3IgPSBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCkpCiAgICAgICAgICAgICBpbnNw
ZWN0b3ItPmluc3BlY3RlZFdpbmRvd1NjcmlwdE9iamVjdENsZWFyZWQobV9mcmFtZSk7Ci0gICAg
ICAgIGlmIChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3IgPSBwYWdlLT5wYXJlbnRJbnNw
ZWN0b3JDb250cm9sbGVyKCkpCi0gICAgICAgICAgICBpbnNwZWN0b3ItPndpbmRvd1NjcmlwdE9i
amVjdEF2YWlsYWJsZSgpOwogICAgIH0KICNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
YWdlL1BhZ2UuY3BwIGIvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCmluZGV4IDdkMWU2MjQuLmQ2NmU0
OTcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAorKysgYi9XZWJDb3JlL3BhZ2Uv
UGFnZS5jcHAKQEAgLTEzOCw5ICsxMzgsNiBAQCBQYWdlOjpQYWdlKENocm9tZUNsaWVudCogY2hy
b21lQ2xpZW50LCBDb250ZXh0TWVudUNsaWVudCogY29udGV4dE1lbnVDbGllbnQsIEVkaQogICAg
ICwgbV9hcmVNZW1vcnlDYWNoZUNsaWVudENhbGxzRW5hYmxlZCh0cnVlKQogICAgICwgbV9tZWRp
YVZvbHVtZSgxKQogICAgICwgbV9qYXZhU2NyaXB0VVJMc0FyZUFsbG93ZWQodHJ1ZSkKLSNpZiBF
TkFCTEUoSU5TUEVDVE9SKQotICAgICwgbV9wYXJlbnRJbnNwZWN0b3JDb250cm9sbGVyKDApCi0j
ZW5kaWYKICAgICAsIG1fZGlkTG9hZFVzZXJTdHlsZVNoZWV0KGZhbHNlKQogICAgICwgbV91c2Vy
U3R5bGVTaGVldE1vZGlmaWNhdGlvblRpbWUoMCkKICAgICAsIG1fZ3JvdXAoMCkKQEAgLTE5Niw4
ICsxOTMsNiBAQCBQYWdlOjp+UGFnZSgpCiAKICAgICBtX2VkaXRvckNsaWVudC0+cGFnZURlc3Ry
b3llZCgpOwogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKG1fcGFyZW50SW5zcGVjdG9y
Q29udHJvbGxlcikKLSAgICAgICAgbV9wYXJlbnRJbnNwZWN0b3JDb250cm9sbGVyLT5wYWdlRGVz
dHJveWVkKCk7CiAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0ZWRQYWdlRGVzdHJv
eWVkKCk7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL1BhZ2UuaCBiL1dlYkNv
cmUvcGFnZS9QYWdlLmgKaW5kZXggZjY5ODI4Ny4uOTRlNmRkNSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9wYWdlL1BhZ2UuaAorKysgYi9XZWJDb3JlL3BhZ2UvUGFnZS5oCkBAIC0xNDksMTEgKzE0OSw2
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNlbmRpZgogICAgICAgICBTZXR0aW5ncyogc2V0dGlu
Z3MoKSBjb25zdCB7IHJldHVybiBtX3NldHRpbmdzLmdldCgpOyB9CiAgICAgICAgIFByb2dyZXNz
VHJhY2tlciogcHJvZ3Jlc3MoKSBjb25zdCB7IHJldHVybiBtX3Byb2dyZXNzLmdldCgpOyB9Ci0K
LSNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgICAgICB2b2lkIHNldFBhcmVudEluc3BlY3RvckNv
bnRyb2xsZXIoSW5zcGVjdG9yQ29udHJvbGxlciogY29udHJvbGxlcikgeyBtX3BhcmVudEluc3Bl
Y3RvckNvbnRyb2xsZXIgPSBjb250cm9sbGVyOyB9Ci0gICAgICAgIEluc3BlY3RvckNvbnRyb2xs
ZXIqIHBhcmVudEluc3BlY3RvckNvbnRyb2xsZXIoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudElu
c3BlY3RvckNvbnRyb2xsZXI7IH0KLSNlbmRpZgogICAgICAgICAKICAgICAgICAgdm9pZCBzZXRU
YWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMoYm9vbCBiKSB7IG1fdGFiS2V5Q3ljbGVzVGhyb3Vn
aEVsZW1lbnRzID0gYjsgfQogICAgICAgICBib29sIHRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50
cygpIGNvbnN0IHsgcmV0dXJuIG1fdGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzOyB9CkBAIC0y
ODYsMTAgKzI4MSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBib29sIG1famF2
YVNjcmlwdFVSTHNBcmVBbGxvd2VkOwogCi0jaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICAgICAg
SW5zcGVjdG9yQ29udHJvbGxlciogbV9wYXJlbnRJbnNwZWN0b3JDb250cm9sbGVyOwotI2VuZGlm
Ci0KICAgICAgICAgU3RyaW5nIG1fdXNlclN0eWxlU2hlZXRQYXRoOwogICAgICAgICBtdXRhYmxl
IFN0cmluZyBtX3VzZXJTdHlsZVNoZWV0OwogICAgICAgICBtdXRhYmxlIGJvb2wgbV9kaWRMb2Fk
VXNlclN0eWxlU2hlZXQ7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL0NvbnRleHRNZW51
LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1lbnUuY3BwCmluZGV4IDI4M2FhNTYuLjAw
MjJhNDcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1lbnUuY3BwCisrKyBi
L1dlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1lbnUuY3BwCkBAIC0zNTksNiArMzU5LDkgQEAgdm9p
ZCBDb250ZXh0TWVudTo6cG9wdWxhdGUoKQogICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oU3Bl
ZWNoTWVudUl0ZW0pOwogI2VuZGlmICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgfSBlbHNl
IHsKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorICAgICAgICAgICAgICAgIGlmICghKGZyYW1lLT5w
YWdlKCkgJiYgZnJhbWUtPnBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5oYXNJbnNwZWN0
b3JGcm9udGVuZENsaWVudCgpKSkgeworI2VuZGlmCiAjaWYgUExBVEZPUk0oR1RLKQogICAgICAg
ICAgICAgICAgIGFwcGVuZEl0ZW0oQmFja0l0ZW0pOwogICAgICAgICAgICAgICAgIGFwcGVuZEl0
ZW0oRm9yd2FyZEl0ZW0pOwpAQCAtMzc4LDYgKzM4MSw5IEBAIHZvaWQgQ29udGV4dE1lbnU6OnBv
cHVsYXRlKCkKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGFwcGVu
ZEl0ZW0oUmVsb2FkSXRlbSk7CiAjZW5kaWYKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorICAgICAg
ICAgICAgICAgIH0KKyNlbmRpZgogCiAgICAgICAgICAgICAgICAgaWYgKGZyYW1lLT5wYWdlKCkg
JiYgZnJhbWUgIT0gZnJhbWUtPnBhZ2UoKS0+bWFpbkZyYW1lKCkpCiAgICAgICAgICAgICAgICAg
ICAgIGFwcGVuZEl0ZW0oT3BlbkZyYW1lSXRlbSk7CkBAIC01NTAsNyArNTU2LDYgQEAgdm9pZCBD
b250ZXh0TWVudTo6YWRkSW5zcGVjdEVsZW1lbnRJdGVtKCkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgQ29udGV4dE1lbnVJdGVtIEluc3BlY3RFbGVtZW50SXRlbShBY3Rpb25UeXBlLCBDb250ZXh0
TWVudUl0ZW1UYWdJbnNwZWN0RWxlbWVudCwgY29udGV4dE1lbnVJdGVtVGFnSW5zcGVjdEVsZW1l
bnQoKSk7Ci0gICAgYXBwZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgpKTsKICAgICBhcHBlbmRJdGVt
KEluc3BlY3RFbGVtZW50SXRlbSk7CiB9CiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKZGlm
ZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCmluZGV4IDQ0YTkzZWUuLmYxNjc0OWYgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5
IEBACisyMDEwLTAzLTExICBZdXJ5IFNlbWlraGF0c2t5IDx5dXJ5c0BjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW50cm9kdWNl
IEluc3BlY3RvckZyb250ZW5kQ2xpZW50IHRoYXQgcHJvdmlkZXMgSW5zcGVjdG9yRnJvbnRlbmQg
d2l0aCBhbiBpbnRlcmZhY2UgdG8gdGhlIGVtYmVkZGVyLiBJbnNwZWN0b3JDbGllbnQgbm93IHNl
cnZlcyBhcyBhIGRlbGVnYXRlIGZvciBJbnNwZWN0b3JDb250cm9sbGVyIGFuZCBkb2VzIG5vdCBj
b250YWluIG1ldGhvZHMgZm9yIG1hbmFnaW5nIGluc3BlY3RvciBmcm9udGVuZCB3aW5kb3cuIFRo
YXQgYWxsb3dzIHRvIGNyZWF0ZSByZW1vdGUgSW5zcGVjdG9yRnJvbnRlbmRIb3N0LgorCisgICAg
ICAgIEludHJvZHVjZSBJbnNwZWN0b3JGcm9udGVuZENsaWVudCB0aGF0IHdvdWxkIHByb3ZpZGUg
SW5zcGVjdG9yRnJvbnRlbmQgd2l0aCBhbiBpbnRlcmZhY2UgdG8gdGhlIGVtYmVkZGVyCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNTAzNgorCisgICAg
ICAgICogc3JjL0luc3BlY3RvckNsaWVudEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpJbnNw
ZWN0b3JDbGllbnRJbXBsOjpvcGVuSW5zcGVjdG9yRnJvbnRlbmQpOgorICAgICAgICAqIHNyYy9J
bnNwZWN0b3JDbGllbnRJbXBsLmg6CisgICAgICAgICogc3JjL1dlYkRldlRvb2xzQWdlbnRJbXBs
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudEltcGw6OmF0dGFjaCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjpkaWRDb21taXRQcm92aXNpb25h
bExvYWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6Y3JlYXRlSW5z
cGVjdG9yRnJvbnRlbmRQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJ
bXBsOjpzZXRJbnNwZWN0b3JGcm9udGVuZFByb3h5VG9JbnNwZWN0b3JDb250cm9sbGVyKToKKyAg
ICAgICAgKiBzcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuaDoKKyAgICAgICAgKiBzcmMvV2ViRGV2
VG9vbHNGcm9udGVuZEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0Zyb250
ZW5kSW1wbDo6V2ViRGV2VG9vbHNGcm9udGVuZEltcGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJE
ZXZUb29sc0Zyb250ZW5kSW1wbDo6anNCcmluZ1RvRnJvbnQpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6anNJbnNwZWN0ZWRVUkxDaGFuZ2VkKToKKyAgICAgICAg
KiBzcmMvV2ViRGV2VG9vbHNGcm9udGVuZEltcGwuaDoKKyAgICAgICAgKiBzcmMvanMvSW5qZWN0
RGlzcGF0Y2guanM6CisgICAgICAgIChjbG9zZSk6CisKIDIwMTAtMDMtMTAgIERhcmluIEZpc2hl
ciAgPGRhcmluQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBKZXJlbXkgT3Js
b3cuCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL0luc3BlY3RvckNsaWVudEltcGwu
Y3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9JbnNwZWN0b3JDbGllbnRJbXBsLmNwcAppbmRleCA1
NDU1MGQxLi5mNjllZjcyIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL0luc3BlY3Rv
ckNsaWVudEltcGwuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvSW5zcGVjdG9yQ2xpZW50
SW1wbC5jcHAKQEAgLTYzLDQ2ICs2Myw4IEBAIHZvaWQgSW5zcGVjdG9yQ2xpZW50SW1wbDo6aW5z
cGVjdG9yRGVzdHJveWVkKCkKICAgICAvLyBPdXIgbGlmZXRpbWUgaXMgYm91bmQgdG8gdGhlIFdl
YlZpZXdJbXBsLgogfQogCi1QYWdlKiBJbnNwZWN0b3JDbGllbnRJbXBsOjpjcmVhdGVQYWdlKCkK
K3ZvaWQgSW5zcGVjdG9yQ2xpZW50SW1wbDo6b3Blbkluc3BlY3RvckZyb250ZW5kKEluc3BlY3Rv
ckNvbnRyb2xsZXIqKQogewotICAgIC8vIFRoaXMgbWV0aG9kIHNob3VsZCBuZXZlciBiZSBjYWxs
ZWQgaW4gQ2hyb21lIGFzIGluc3BlY3RvciBmcm9udC1lbmQgbGl2ZXMKLSAgICAvLyBpbiBhIHNl
cGFyYXRlIHByb2Nlc3MuCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIDA7
Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ2xpZW50SW1wbDo6c2hvd1dpbmRvdygpCi17Ci0gICAgQVNT
RVJUKG1faW5zcGVjdGVkV2ViVmlldy0+ZGV2VG9vbHNBZ2VudFByaXZhdGUoKSk7Ci0gICAgbV9p
bnNwZWN0ZWRXZWJWaWV3LT5wYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0V2luZG93
VmlzaWJsZSh0cnVlKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDbGllbnRJbXBsOjpjbG9zZVdpbmRv
dygpCi17Ci0gICAgaWYgKG1faW5zcGVjdGVkV2ViVmlldy0+cGFnZSgpKQotICAgICAgICBtX2lu
c3BlY3RlZFdlYlZpZXctPnBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5zZXRXaW5kb3dW
aXNpYmxlKGZhbHNlKTsKLX0KLQotYm9vbCBJbnNwZWN0b3JDbGllbnRJbXBsOjp3aW5kb3dWaXNp
YmxlKCkKLXsKLSAgICBBU1NFUlQobV9pbnNwZWN0ZWRXZWJWaWV3LT5kZXZUb29sc0FnZW50UHJp
dmF0ZSgpKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ2xpZW50SW1w
bDo6YXR0YWNoV2luZG93KCkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMKLX0KLQot
dm9pZCBJbnNwZWN0b3JDbGllbnRJbXBsOjpkZXRhY2hXaW5kb3coKQotewotICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQgdGhpcwotfQotCi12b2lkIEluc3BlY3RvckNsaWVudEltcGw6OnNldEF0dGFj
aGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGludCBoZWlnaHQpCi17Ci0gICAgLy8gRklYTUU6IElt
cGxlbWVudCB0aGlzCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAogc3RhdGljIHZvaWQgaW52
YWxpZGF0ZU5vZGVCb3VuZGluZ1JlY3QoV2ViVmlld0ltcGwqIHdlYlZpZXcpCkBAIC0xMzAsMjMg
KzkyLDYgQEAgdm9pZCBJbnNwZWN0b3JDbGllbnRJbXBsOjpoaWRlSGlnaGxpZ2h0KCkKICAgICBp
bnZhbGlkYXRlTm9kZUJvdW5kaW5nUmVjdChtX2luc3BlY3RlZFdlYlZpZXcpOwogfQogCi12b2lk
IEluc3BlY3RvckNsaWVudEltcGw6Omluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJiBu
ZXdVUkwpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzCi19Ci0KLVN0cmluZyBJbnNw
ZWN0b3JDbGllbnRJbXBsOjpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotU3RyaW5nIEluc3BlY3RvckNsaWVu
dEltcGw6OmhpZGRlblBhbmVscygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1
cm4gIiI7Ci19Ci0KIHZvaWQgSW5zcGVjdG9yQ2xpZW50SW1wbDo6cG9wdWxhdGVTZXR0aW5nKGNv
bnN0IFN0cmluZyYga2V5LCBTdHJpbmcqIHZhbHVlKQogewogICAgIGxvYWRTZXR0aW5ncygpOwpA
QCAtMTYxLDExICsxMDYsNiBAQCB2b2lkIEluc3BlY3RvckNsaWVudEltcGw6OnN0b3JlU2V0dGlu
Zyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICBzYXZlU2V0dGlu
Z3MoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDbGllbnRJbXBsOjppbnNwZWN0b3JXaW5kb3dPYmpl
Y3RDbGVhcmVkKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCiB2b2lkIEluc3BlY3Rv
ckNsaWVudEltcGw6OmxvYWRTZXR0aW5ncygpCiB7CiAgICAgaWYgKG1fc2V0dGluZ3MpCmRpZmYg
LS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL0luc3BlY3RvckNsaWVudEltcGwuaCBiL1dlYktp
dC9jaHJvbWl1bS9zcmMvSW5zcGVjdG9yQ2xpZW50SW1wbC5oCmluZGV4IDZmN2Y4YjEuLmNjYmNl
ZjcgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvSW5zcGVjdG9yQ2xpZW50SW1wbC5o
CisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvSW5zcGVjdG9yQ2xpZW50SW1wbC5oCkBAIC00NSwy
NSArNDUsMTUgQEAgcHVibGljOgogCiAgICAgLy8gSW5zcGVjdG9yQ2xpZW50IG1ldGhvZHM6CiAg
ICAgdmlydHVhbCB2b2lkIGluc3BlY3RvckRlc3Ryb3llZCgpOwotICAgIHZpcnR1YWwgV2ViQ29y
ZTo6UGFnZSogY3JlYXRlUGFnZSgpOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6U3RyaW5nIGxvY2Fs
aXplZFN0cmluZ3NVUkwoKTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlN0cmluZyBoaWRkZW5QYW5l
bHMoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2hvd1dpbmRvdygpOwotICAgIHZpcnR1YWwgdm9pZCBj
bG9zZVdpbmRvdygpOwotICAgIHZpcnR1YWwgYm9vbCB3aW5kb3dWaXNpYmxlKCk7Ci0gICAgdmly
dHVhbCB2b2lkIGF0dGFjaFdpbmRvdygpOwotICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hXaW5kb3co
KTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVp
Z2h0KTsKKyAgICB2aXJ0dWFsIHZvaWQgb3Blbkluc3BlY3RvckZyb250ZW5kKFdlYkNvcmU6Oklu
c3BlY3RvckNvbnRyb2xsZXIqKTsKICAgICB2aXJ0dWFsIHZvaWQgaGlnaGxpZ2h0KFdlYkNvcmU6
Ok5vZGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgaGlkZUhpZ2hsaWdodCgpOwotICAgIHZpcnR1YWwg
dm9pZCBpbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgbmV3VVJMKTsK
ICAgICB2aXJ0dWFsIHZvaWQgcG9wdWxhdGVTZXR0aW5nKAogICAgICAgICBjb25zdCBXZWJDb3Jl
OjpTdHJpbmcmIGtleSwKICAgICAgICAgV2ViQ29yZTo6U3RyaW5nKiB2YWx1ZSk7CiAgICAgdmly
dHVhbCB2b2lkIHN0b3JlU2V0dGluZygKICAgICAgICAgY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBr
ZXksCiAgICAgICAgIGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgdmFsdWUpOwotICAgIHZpcnR1YWwg
dm9pZCBpbnNwZWN0b3JXaW5kb3dPYmplY3RDbGVhcmVkKCk7CiAKIHByaXZhdGU6CiAgICAgdm9p
ZCBsb2FkU2V0dGluZ3MoKTsKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2
VG9vbHNBZ2VudEltcGwuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50
SW1wbC5jcHAKaW5kZXggYWY1MDYyYS4uMjFmMzFmNCAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJEZXZUb29sc0FnZW50SW1wbC5jcHAKQEAgLTE2OSw3ICsxNjksNyBAQCB2b2lkIFdlYkRl
dlRvb2xzQWdlbnRJbXBsOjphdHRhY2goKQogICAgICAgICBuZXcgRGVidWdnZXJBZ2VudEltcGwo
bV93ZWJWaWV3SW1wbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGVidWdnZXJB
Z2VudERlbGVnYXRlU3R1Yi5nZXQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMpKTsKLSAgICByZXNldEluc3BlY3RvckZyb250ZW5kUHJveHkoKTsKKyAgICBjcmVhdGVJbnNw
ZWN0b3JGcm9udGVuZFByb3h5KCk7CiAKICAgICAvLyBBbGxvdyBjb250cm9sbGVyIHRvIHNlbmQg
bWVzc2FnZXMgdG8gdGhlIGZyb250ZW5kLgogICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIGljID0g
aW5zcGVjdG9yQ29udHJvbGxlcigpOwpAQCAtMTg1LDcgKzE4NSw3IEBAIHZvaWQgV2ViRGV2VG9v
bHNBZ2VudEltcGw6OmF0dGFjaCgpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpYy0+c2V0V2lu
ZG93VmlzaWJsZSh0cnVlLCBmYWxzZSk7CisgICAgc2V0SW5zcGVjdG9yRnJvbnRlbmRQcm94eVRv
SW5zcGVjdG9yQ29udHJvbGxlcigpOwogICAgIG1fYXR0YWNoZWQgPSB0cnVlOwogfQogCkBAIC0y
MTYsNyArMjE2LDYgQEAgdm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6ZGlkQ29tbWl0UHJvdmlz
aW9uYWxMb2FkKFdlYkZyYW1lSW1wbCogd2ViZnJhbWUsIGJvb2wKICAgICAgICAgZHMtPnVucmVh
Y2hhYmxlVVJMKCkgOgogICAgICAgICByZXF1ZXN0LnVybCgpOwogICAgIGlmICghd2ViZnJhbWUt
PnBhcmVudCgpKSB7Ci0gICAgICAgIHJlc2V0SW5zcGVjdG9yRnJvbnRlbmRQcm94eSgpOwogICAg
ICAgICBtX3Rvb2xzQWdlbnREZWxlZ2F0ZVN0dWItPmZyYW1lTmF2aWdhdGUoV2ViQ29yZTo6S1VS
TCh1cmwpLnN0cmluZygpKTsKICAgICAgICAgU2V0QXB1QWdlbnRFbmFibGVkSW5VdGlsaXR5Q29u
dGV4dChtX3V0aWxpdHlDb250ZXh0LCBtX2FwdUFnZW50RW5hYmxlZCk7CiAgICAgfQpAQCAtMzU3
LDcgKzM1Niw3IEBAIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBXZWJEZXZUb29sc0FnZW50SW1wbDo6
Y3JlYXRlSW5zcGVjdG9yQmFja2VuZFY4V3JhcHBlcigpCiAgICAgcmV0dXJuIGluc3RhbmNlOwog
fQogCi12b2lkIFdlYkRldlRvb2xzQWdlbnRJbXBsOjpyZXNldEluc3BlY3RvckZyb250ZW5kUHJv
eHkoKQordm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6Y3JlYXRlSW5zcGVjdG9yRnJvbnRlbmRQ
cm94eSgpCiB7CiAgICAgZGlzcG9zZVV0aWxpdHlDb250ZXh0KCk7CiAgICAgbV91dGlsaXR5Q29u
dGV4dCA9IHY4OjpDb250ZXh0OjpOZXcoKTsKQEAgLTM2OCw4ICszNjcsMTYgQEAgdm9pZCBXZWJE
ZXZUb29sc0FnZW50SW1wbDo6cmVzZXRJbnNwZWN0b3JGcm9udGVuZFByb3h5KCkKICAgICB2ODo6
Q29udGV4dDo6U2NvcGUgY29udGV4dFNjb3BlKG1fdXRpbGl0eUNvbnRleHQpOwogICAgIFNjcmlw
dFN0YXRlKiBzdGF0ZSA9IFNjcmlwdFN0YXRlOjpmb3JDb250ZXh0KAogICAgICAgICB2ODo6TG9j
YWw8djg6OkNvbnRleHQ+OjpOZXcobV91dGlsaXR5Q29udGV4dCkpOworfQorCit2b2lkIFdlYkRl
dlRvb2xzQWdlbnRJbXBsOjpzZXRJbnNwZWN0b3JGcm9udGVuZFByb3h5VG9JbnNwZWN0b3JDb250
cm9sbGVyKCkKK3sKKyAgICB2ODo6SGFuZGxlU2NvcGUgc2NvcGU7CisgICAgU2NyaXB0U3RhdGUq
IHN0YXRlID0gU2NyaXB0U3RhdGU6OmZvckNvbnRleHQoCisgICAgICAgIHY4OjpMb2NhbDx2ODo6
Q29udGV4dD46Ok5ldyhtX3V0aWxpdHlDb250ZXh0KSk7CiAgICAgSW5zcGVjdG9yQ29udHJvbGxl
ciogaWMgPSBpbnNwZWN0b3JDb250cm9sbGVyKCk7Ci0gICAgaWMtPnNldEZyb250ZW5kUHJveHlP
YmplY3Qoc3RhdGUsIFNjcmlwdE9iamVjdChzdGF0ZSwgbV91dGlsaXR5Q29udGV4dC0+R2xvYmFs
KCkpKTsKKyAgICBpYy0+c2V0RnJvbnRlbmQobmV3IEluc3BlY3RvckZyb250ZW5kKAorICAgICAg
ICBTY3JpcHRPYmplY3Qoc3RhdGUsIG1fdXRpbGl0eUNvbnRleHQtPkdsb2JhbCgpKSkpOwogfQog
CiB2b2lkIFdlYkRldlRvb2xzQWdlbnRJbXBsOjpzZXRBcHVBZ2VudEVuYWJsZWQoYm9vbCBlbmFi
bGVkKQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50SW1w
bC5oIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5oCmluZGV4IDIw
N2JhZGEuLjQ1NWRjZWYgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9v
bHNBZ2VudEltcGwuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzQWdlbnRJ
bXBsLmgKQEAgLTEwOSw3ICsxMDksOCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBjb21waWxlVXRp
bGl0eVNjcmlwdHMoKTsKICAgICB2b2lkIGluaXREZXZUb29sc0FnZW50SG9zdCgpOwotICAgIHZv
aWQgcmVzZXRJbnNwZWN0b3JGcm9udGVuZFByb3h5KCk7CisgICAgdm9pZCBjcmVhdGVJbnNwZWN0
b3JGcm9udGVuZFByb3h5KCk7CisgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZFByb3h5VG9J
bnNwZWN0b3JDb250cm9sbGVyKCk7CiAgICAgdm9pZCBzZXRBcHVBZ2VudEVuYWJsZWQoYm9vbCBl
bmFibGVkKTsKIAogICAgIFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNv
bnRyb2xsZXIoKTsKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNG
cm9udGVuZEltcGwuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0Zyb250ZW5k
SW1wbC5jcHAKaW5kZXggZDViOGViYy4uOGEyZjgxYyAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJEZXZUb29sc0Zyb250ZW5kSW1wbC5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJEZXZUb29sc0Zyb250ZW5kSW1wbC5jcHAKQEAgLTE1Niw4ICsxNTYsMTEgQEAgV2Vi
RGV2VG9vbHNGcm9udGVuZEltcGw6OldlYkRldlRvb2xzRnJvbnRlbmRJbXBsKAogICAgICAgICAi
c2V0U2V0dGluZyIsCiAgICAgICAgIFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjpqc1NldFNldHRp
bmcpOwogICAgIGRldlRvb2xzSG9zdC5hZGRQcm90b0Z1bmN0aW9uKAotICAgICAgICAid2luZG93
VW5sb2FkaW5nIiwKLSAgICAgICAgV2ViRGV2VG9vbHNGcm9udGVuZEltcGw6OmpzV2luZG93VW5s
b2FkaW5nKTsKKyAgICAgICAgImJyaW5nVG9Gcm9udCIsCisgICAgICAgIFdlYkRldlRvb2xzRnJv
bnRlbmRJbXBsOjpqc0JyaW5nVG9Gcm9udCk7CisgICAgZGV2VG9vbHNIb3N0LmFkZFByb3RvRnVu
Y3Rpb24oCisgICAgICAgICJpbnNwZWN0ZWRVUkxDaGFuZ2VkIiwKKyAgICAgICAgV2ViRGV2VG9v
bHNGcm9udGVuZEltcGw6OmpzSW5zcGVjdGVkVVJMQ2hhbmdlZCk7CiAgICAgZGV2VG9vbHNIb3N0
LmFkZFByb3RvRnVuY3Rpb24oCiAgICAgICAgICJzaG93Q29udGV4dE1lbnUiLAogICAgICAgICBX
ZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6anNTaG93Q29udGV4dE1lbnUpOwpAQCAtMzQ2LDkgKzM0
OSwxMyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gV2ViRGV2VG9vbHNGcm9udGVuZEltcGw6Ompz
RGVidWdnZXJQYXVzZVNjcmlwdChjb25zdCB2ODo6QQogICAgIHJldHVybiB2ODo6VW5kZWZpbmVk
KCk7CiB9CiAKLXY4OjpIYW5kbGU8djg6OlZhbHVlPiBXZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6
anNXaW5kb3dVbmxvYWRpbmcoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKK3Y4OjpIYW5kbGU8
djg6OlZhbHVlPiBXZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6anNCcmluZ1RvRnJvbnQoY29uc3Qg
djg6OkFyZ3VtZW50cyYgYXJncykKK3sKKyAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworfQor
Cit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gV2ViRGV2VG9vbHNGcm9udGVuZEltcGw6OmpzSW5zcGVj
dGVkVVJMQ2hhbmdlZChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewotICAgIC8vIFRPRE8o
cGZlbGRtYW4pOiBJbXBsZW1lbnQgdGhpcy4KICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwog
fQogCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzRnJvbnRlbmRJ
bXBsLmggYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzRnJvbnRlbmRJbXBsLmgKaW5k
ZXggYmEwMDEzYi4uNjU5MTY5MyAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJE
ZXZUb29sc0Zyb250ZW5kSW1wbC5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9v
bHNGcm9udGVuZEltcGwuaApAQCAtMTQyLDcgKzE0Miw4IEBAIHByaXZhdGU6CiAgICAgc3RhdGlj
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBqc1NldHRpbmcoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJn
cyk7CiAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBqc1NldFNldHRpbmcoY29uc3Qg
djg6OkFyZ3VtZW50cyYgYXJncyk7CiAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBq
c0RlYnVnZ2VyUGF1c2VTY3JpcHQoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncyk7Ci0gICAgc3Rh
dGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBqc1dpbmRvd1VubG9hZGluZyhjb25zdCB2ODo6QXJn
dW1lbnRzJiBhcmdzKTsKKyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGpzQnJpbmdU
b0Zyb250KGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpOworICAgIHN0YXRpYyB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4ganNJbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFy
Z3MpOwogICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4ganNTaG93Q29udGV4dE1lbnUo
Y29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncyk7CiAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBqc0NhbkF0dGFjaFdpbmRvdyhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKTsKIApkaWZm
IC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9JbmplY3REaXNwYXRjaC5qcyBiL1dlYktp
dC9jaHJvbWl1bS9zcmMvanMvSW5qZWN0RGlzcGF0Y2guanMKaW5kZXggZTA3MGM0Mi4uNjhiY2Ri
ZCAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9JbmplY3REaXNwYXRjaC5qcwor
KysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0luamVjdERpc3BhdGNoLmpzCkBAIC0xMDQsMyAr
MTA0LDcgQEAgZnVuY3Rpb24gZGlzcGF0Y2gobWV0aG9kLCB2YXJfYXJncykgewogICAgIHZhciBj
YWxsID0gSlNPTi5zdHJpbmdpZnkoYXJncyk7CiAgICAgRGV2VG9vbHNBZ2VudEhvc3QuZGlzcGF0
Y2goY2FsbCk7CiB9OworCitmdW5jdGlvbiBjbG9zZSgpIHsKKyAgICAvLyBUaGlzIG1ldGhvZCBp
cyBjYWxsZWQgd2hlbiBJbnNwZWN0b3JGcm9udGVuZCBjbG9zZXMgaW4gbGF5b3V0IHRlc3RzLgor
fQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay9DaGFuZ2VMb2cgYi9XZWJLaXQvZ3RrL0NoYW5nZUxv
ZwppbmRleCA5YWRkNmUyLi5kYjc0OWVlIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL0NoYW5nZUxv
ZworKysgYi9XZWJLaXQvZ3RrL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDEwLTAzLTEw
ICBZdXJ5IFNlbWlraGF0c2t5IDx5dXJ5c0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW50cm9kdWNlIEluc3BlY3RvckZyb250
ZW5kQ2xpZW50IHRoYXQgcHJvdmlkZXMgSW5zcGVjdG9yRnJvbnRlbmQgd2l0aCBhbiBpbnRlcmZh
Y2UgdG8gdGhlIGVtYmVkZGVyLiBJbnNwZWN0b3JDbGllbnQgbm93IHNlcnZlcyBhcyBhIGRlbGVn
YXRlIGZvciBJbnNwZWN0b3JDb250cm9sbGVyIGFuZCBkb2VzIG5vdCBjb250YWluIG1ldGhvZHMg
Zm9yIG1hbmFnaW5nIGluc3BlY3RvciBmcm9udGVuZCB3aW5kb3cuIFRoYXQgYWxsb3dzIHRvIGNy
ZWF0ZSByZW1vdGUgSW5zcGVjdG9yRnJvbnRlbmRIb3N0LgorCisgICAgICAgIEludHJvZHVjZSBJ
bnNwZWN0b3JGcm9udGVuZENsaWVudCB0aGF0IHdvdWxkIHByb3ZpZGUgSW5zcGVjdG9yRnJvbnRl
bmQgd2l0aCBhbiBpbnRlcmZhY2UgdG8gdGhlIGVtYmVkZGVyCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNTAzNgorCisgICAgICAgICogV2ViQ29yZVN1
cHBvcnQvSW5zcGVjdG9yQ2xpZW50R3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6bm90aWZ5V2Vi
Vmlld0Rlc3Ryb3llZCk6CisgICAgICAgIChXZWJLaXQ6Okluc3BlY3RvckNsaWVudDo6SW5zcGVj
dG9yQ2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6SW5zcGVjdG9yQ2xpZW50OjppbnNwZWN0b3JE
ZXN0cm95ZWQpOgorICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JDbGllbnQ6Om9wZW5JbnNwZWN0
b3JGcm9udGVuZCk6CisgICAgICAgIChXZWJLaXQ6Okluc3BlY3RvckNsaWVudDo6aGlnaGxpZ2h0
KToKKyAgICAgICAgKFdlYktpdDo6SW5zcGVjdG9yQ2xpZW50OjpoaWRlSGlnaGxpZ2h0KToKKyAg
ICAgICAgKFdlYktpdDo6SW5zcGVjdG9yQ2xpZW50Ojpwb3B1bGF0ZVNldHRpbmcpOgorICAgICAg
ICAoV2ViS2l0OjpJbnNwZWN0b3JDbGllbnQ6OnN0b3JlU2V0dGluZyk6CisgICAgICAgIChXZWJL
aXQ6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpJbnNwZWN0b3JGcm9udGVuZENsaWVudCk6Cisg
ICAgICAgIChXZWJLaXQ6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50Ojp+SW5zcGVjdG9yRnJvbnRl
bmRDbGllbnQpOgorICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6ZGVz
dHJveUluc3BlY3RvcldpbmRvdyk6CisgICAgICAgIChXZWJLaXQ6Okluc3BlY3RvckZyb250ZW5k
Q2xpZW50Ojpsb2NhbGl6ZWRTdHJpbmdzVVJMKToKKyAgICAgICAgKFdlYktpdDo6SW5zcGVjdG9y
RnJvbnRlbmRDbGllbnQ6OmhpZGRlblBhbmVscyk6CisgICAgICAgIChXZWJLaXQ6Okluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50OjpicmluZ1RvRnJvbnQpOgorICAgICAgICAoV2ViS2l0OjpJbnNwZWN0
b3JGcm9udGVuZENsaWVudDo6Y2xvc2VXaW5kb3cpOgorICAgICAgICAoV2ViS2l0OjpJbnNwZWN0
b3JGcm9udGVuZENsaWVudDo6YXR0YWNoV2luZG93KToKKyAgICAgICAgKFdlYktpdDo6SW5zcGVj
dG9yRnJvbnRlbmRDbGllbnQ6OmRldGFjaFdpbmRvdyk6CisgICAgICAgIChXZWJLaXQ6Okluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50OjpzZXRBdHRhY2hlZFdpbmRvd0hlaWdodCk6CisgICAgICAgIChX
ZWJLaXQ6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50OjppbnNwZWN0ZWRVUkxDaGFuZ2VkKToKKyAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRHdGsuaDoKKwogMjAxMC0wMy0w
OSAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgR3VzdGF2byBOb3JvbmhhIFNpbHZhLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay9X
ZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRHdGsuY3BwIGIvV2ViS2l0L2d0ay9XZWJDb3Jl
U3VwcG9ydC9JbnNwZWN0b3JDbGllbnRHdGsuY3BwCmluZGV4IDk5YmM2MjcuLmU3MmFjMDUgMTAw
NjQ0Ci0tLSBhL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50R3RrLmNw
cAorKysgYi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudEd0ay5jcHAK
QEAgLTMxLDY3ICszMSw0MCBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNl
IFdlYktpdCB7CiAKLXN0YXRpYyB2b2lkIG5vdGlmeVdlYlZpZXdEZXN0cm95ZWQoV2ViS2l0V2Vi
Vmlldyogd2ViVmlldywgSW5zcGVjdG9yQ2xpZW50KiBpbnNwZWN0b3JDbGllbnQpCitzdGF0aWMg
dm9pZCBub3RpZnlXZWJWaWV3RGVzdHJveWVkKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIEluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50KiBpbnNwZWN0b3JGcm9udGVuZENsaWVudCkKIHsKLSAgICBpbnNw
ZWN0b3JDbGllbnQtPndlYlZpZXdEZXN0cm95ZWQoKTsKKyAgICBpbnNwZWN0b3JGcm9udGVuZENs
aWVudC0+ZGVzdHJveUluc3BlY3RvcldpbmRvdygpOwogfQogCiBJbnNwZWN0b3JDbGllbnQ6Oklu
c3BlY3RvckNsaWVudChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQotICAgIDogbV93ZWJWaWV3KDAp
Ci0gICAgLCBtX2luc3BlY3RlZFdlYlZpZXcod2ViVmlldykKLSAgICAsIG1fd2ViSW5zcGVjdG9y
KDApCisgICAgOiBtX2luc3BlY3RlZFdlYlZpZXcod2ViVmlldykKIHt9CiAKIHZvaWQgSW5zcGVj
dG9yQ2xpZW50OjppbnNwZWN0b3JEZXN0cm95ZWQoKQogewotICAgIGlmIChtX3dlYkluc3BlY3Rv
cikKLSAgICAgICAgZ19vYmplY3RfdW5yZWYobV93ZWJJbnNwZWN0b3IpOwotCiAgICAgZGVsZXRl
IHRoaXM7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ2xpZW50Ojp3ZWJWaWV3RGVzdHJveWVkKCkKLXsK
LSAgICBtX3dlYlZpZXcgPSAwOwotICAgIGNvcmUobV9pbnNwZWN0ZWRXZWJWaWV3KS0+aW5zcGVj
dG9yQ29udHJvbGxlcigpLT5wYWdlRGVzdHJveWVkKCk7Ci0KLSAgICAvLyBjcmVhdGVQYWdlIHdp
bGwgYmUgY2FsbGVkIGFnYWluLCBpZiB0aGUgdXNlciBjaG9vc2VzIHRvIGluc3BlY3QKLSAgICAv
LyBzb21ldGhpbmcgZWxzZSwgYW5kIHRoZSBpbnNwZWN0b3Igd2lsbCBiZSByZWZlcmVuY2VkIGFn
YWluLAotICAgIC8vIHRoZXJlLgotICAgIGdfb2JqZWN0X3VucmVmKG1fd2ViSW5zcGVjdG9yKTsK
LSAgICBtX3dlYkluc3BlY3RvciA9IDA7Ci19Ci0KLVBhZ2UqIEluc3BlY3RvckNsaWVudDo6Y3Jl
YXRlUGFnZSgpCit2b2lkIEluc3BlY3RvckNsaWVudDo6b3Blbkluc3BlY3RvckZyb250ZW5kKElu
c3BlY3RvckNvbnRyb2xsZXIqIGNvbnRyb2xsZXIpCiB7Ci0gICAgaWYgKG1fd2ViVmlldykgewot
ICAgICAgICBnYm9vbGVhbiBoYW5kbGVkID0gRkFMU0U7Ci0gICAgICAgIGdfc2lnbmFsX2VtaXRf
YnlfbmFtZShtX3dlYkluc3BlY3RvciwgImRlc3Ryb3kiLCAmaGFuZGxlZCk7Ci0KLSAgICAgICAg
Lyogd2UgY2FuIG5vdyBkaXNwb3NlIG91ciBvd24gcmVmZXJlbmNlICovCi0gICAgICAgIGdfb2Jq
ZWN0X3VucmVmKG1fd2ViSW5zcGVjdG9yKTsKLSAgICB9Ci0KICAgICAvLyBUaGlzIGdfb2JqZWN0
X2dldCB3aWxsIHJlZiB0aGUgaW5zcGVjdG9yLiBXZSdyZSBub3QgZG9pbmcgYW4KICAgICAvLyB1
bnJlZiBpZiB0aGlzIG1ldGhvZCBzdWNjZWVkcyBiZWNhdXNlIHRoZSBpbnNwZWN0b3Igb2JqZWN0
IG11c3QKICAgICAvLyBiZSBhbGl2ZSBldmVuIGFmdGVyIHRoZSBpbnNwZWN0ZWQgV2ViVmlldyBp
cyBkZXN0cm95ZWQgLSB0aGUKICAgICAvLyBjbG9zZS13aW5kb3cgYW5kIGRlc3Ryb3kgc2lnbmFs
cyBzdGlsbCBuZWVkIHRvIGJlCiAgICAgLy8gZW1pdHRlZC4KLSAgICBXZWJLaXRXZWJJbnNwZWN0
b3IqIHdlYkluc3BlY3RvcjsKKyAgICBXZWJLaXRXZWJJbnNwZWN0b3IqIHdlYkluc3BlY3RvciA9
IDA7CiAgICAgZ19vYmplY3RfZ2V0KG1faW5zcGVjdGVkV2ViVmlldywgIndlYi1pbnNwZWN0b3Ii
LCAmd2ViSW5zcGVjdG9yLCBOVUxMKTsKLSAgICBtX3dlYkluc3BlY3RvciA9IHdlYkluc3BlY3Rv
cjsKKyAgICBBU1NFUlQod2ViSW5zcGVjdG9yKTsKIAotICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFt
ZShtX3dlYkluc3BlY3RvciwgImluc3BlY3Qtd2ViLXZpZXciLCBtX2luc3BlY3RlZFdlYlZpZXcs
ICZtX3dlYlZpZXcpOworICAgIFdlYktpdFdlYlZpZXcqIGluc3BlY3RvcldlYlZpZXcgPSAwOwor
ICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZSh3ZWJJbnNwZWN0b3IsICJpbnNwZWN0LXdlYi12aWV3
IiwgbV9pbnNwZWN0ZWRXZWJWaWV3LCAmaW5zcGVjdG9yV2ViVmlldyk7CiAKLSAgICBpZiAoIW1f
d2ViVmlldykgewotICAgICAgICBnX29iamVjdF91bnJlZihtX3dlYkluc3BlY3Rvcik7Ci0gICAg
ICAgIHJldHVybiAwOworICAgIGlmICghaW5zcGVjdG9yV2ViVmlldykgeworICAgICAgICBnX29i
amVjdF91bnJlZih3ZWJJbnNwZWN0b3IpOworICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
d2Via2l0X3dlYl9pbnNwZWN0b3Jfc2V0X3dlYl92aWV3KG1fd2ViSW5zcGVjdG9yLCBtX3dlYlZp
ZXcpOwotCi0gICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJkZXN0cm95IiwKLSAgICAg
ICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0sobm90aWZ5V2ViVmlld0Rlc3Ryb3llZCksIChncG9p
bnRlcil0aGlzKTsKKyAgICB3ZWJraXRfd2ViX2luc3BlY3Rvcl9zZXRfd2ViX3ZpZXcod2ViSW5z
cGVjdG9yLCBpbnNwZWN0b3JXZWJWaWV3KTsKIAogICAgIEdPd25QdHI8Z2NoYXI+IGluc3BlY3Rv
clVSSTsKIApAQCAtMTAzLDE0ICs3Niw3MyBAQCBQYWdlKiBJbnNwZWN0b3JDbGllbnQ6OmNyZWF0
ZVBhZ2UoKQogICAgIH0gZWxzZQogICAgICAgICBpbnNwZWN0b3JVUkkuc2V0KGdfZmlsZW5hbWVf
dG9fdXJpKERBVEFfRElSIi93ZWJraXQtMS4wL3dlYmluc3BlY3Rvci9pbnNwZWN0b3IuaHRtbCIs
IE5VTEwsIE5VTEwpKTsKIAotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaShtX3dlYlZpZXcs
IGluc3BlY3RvclVSSS5nZXQoKSk7CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKGluc3Bl
Y3RvcldlYlZpZXcsIGluc3BlY3RvclVSSS5nZXQoKSk7CisKKyAgICBndGtfd2lkZ2V0X3Nob3co
R1RLX1dJREdFVChpbnNwZWN0b3JXZWJWaWV3KSk7CisKKyAgICBQYWdlKiBpbnNwZWN0b3JQYWdl
ID0gY29yZShpbnNwZWN0b3JXZWJWaWV3KTsKKyAgICBpbnNwZWN0b3JQYWdlLT5pbnNwZWN0b3JD
b250cm9sbGVyKCktPnNldEluc3BlY3RvckZyb250ZW5kQ2xpZW50KG5ldyBJbnNwZWN0b3JGcm9u
dGVuZENsaWVudChtX2luc3BlY3RlZFdlYlZpZXcsIGluc3BlY3RvcldlYlZpZXcsIHdlYkluc3Bl
Y3RvciwgaW5zcGVjdG9yUGFnZSkpOworfQorCit2b2lkIEluc3BlY3RvckNsaWVudDo6aGlnaGxp
Z2h0KE5vZGUqIG5vZGUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBJbnNw
ZWN0b3JDbGllbnQ6OmhpZGVIaWdobGlnaHQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK3ZvaWQgSW5zcGVjdG9yQ2xpZW50Ojpwb3B1bGF0ZVNldHRpbmcoY29uc3QgU3RyaW5nJiBr
ZXksIFN0cmluZyogdmFsdWUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBJ
bnNwZWN0b3JDbGllbnQ6OnN0b3JlU2V0dGluZyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCisKK2Jvb2wgZGVzdHJv
eWVkID0gVFJVRTsKKworSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6Okluc3BlY3RvckZyb250ZW5k
Q2xpZW50KFdlYktpdFdlYlZpZXcqIGluc3BlY3RlZFdlYlZpZXcsIFdlYktpdFdlYlZpZXcqIGlu
c3BlY3RvcldlYlZpZXcsIFdlYktpdFdlYkluc3BlY3Rvciogd2ViSW5zcGVjdG9yLCBQYWdlKiBp
bnNwZWN0b3JQYWdlKQorICAgIDogSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbChjb3JlKGlu
c3BlY3RlZFdlYlZpZXcpLT5pbnNwZWN0b3JDb250cm9sbGVyKCksIGluc3BlY3RvclBhZ2UpCisg
ICAgLCBtX2luc3BlY3RvcldlYlZpZXcoaW5zcGVjdG9yV2ViVmlldykKKyAgICAsIG1faW5zcGVj
dGVkV2ViVmlldyhpbnNwZWN0ZWRXZWJWaWV3KQorICAgICwgbV93ZWJJbnNwZWN0b3Iod2ViSW5z
cGVjdG9yKQoreworICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9pbnNwZWN0b3JXZWJWaWV3LCAiZGVz
dHJveSIsCisgICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNLKG5vdGlmeVdlYlZpZXdEZXN0
cm95ZWQpLCAoZ3BvaW50ZXIpdGhpcyk7Cit9CisKK0luc3BlY3RvckZyb250ZW5kQ2xpZW50Ojp+
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQoKQoreworICAgIEFTU0VSVCghbV93ZWJJbnNwZWN0b3Ip
OworfQorCit2b2lkIEluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpkZXN0cm95SW5zcGVjdG9yV2lu
ZG93KCkKK3sKKyAgICBpZiAoIW1fd2ViSW5zcGVjdG9yKQorICAgICAgICByZXR1cm47CisgICAg
V2ViS2l0V2ViSW5zcGVjdG9yKiB3ZWJJbnNwZWN0b3IgPSBtX3dlYkluc3BlY3RvcjsKKyAgICBt
X3dlYkluc3BlY3RvciA9IDA7CisKKyAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5
X2Z1bmMobV9pbnNwZWN0b3JXZWJWaWV3LCAoZ3BvaW50ZXIpbm90aWZ5V2ViVmlld0Rlc3Ryb3ll
ZCwgKGdwb2ludGVyKXRoaXMpOworICAgIG1faW5zcGVjdG9yV2ViVmlldyA9IDA7CisKKyAgICBj
b3JlKG1faW5zcGVjdGVkV2ViVmlldyktPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+Y2xvc2UoKTsK
IAotICAgIGd0a193aWRnZXRfc2hvdyhHVEtfV0lER0VUKG1fd2ViVmlldykpOworICAgIGdib29s
ZWFuIGhhbmRsZWQgPSBGQUxTRTsKKyAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUod2ViSW5zcGVj
dG9yLCAiY2xvc2Utd2luZG93IiwgJmhhbmRsZWQpOworICAgIEFTU0VSVChoYW5kbGVkKTsKIAot
ICAgIHJldHVybiBjb3JlKG1fd2ViVmlldyk7CisgICAgLyogd2Ugc2hvdWxkIG5vdyBkaXNwb3Nl
IG91ciBvd24gcmVmZXJlbmNlICovCisgICAgZ19vYmplY3RfdW5yZWYod2ViSW5zcGVjdG9yKTsK
IH0KIAotU3RyaW5nIEluc3BlY3RvckNsaWVudDo6bG9jYWxpemVkU3RyaW5nc1VSTCgpCitTdHJp
bmcgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmxvY2FsaXplZFN0cmluZ3NVUkwoKQogewogICAg
IEdPd25QdHI8Z2NoYXI+IFVSTDsKIApAQCAtMTI2LDg5ICsxNTgsNTYgQEAgU3RyaW5nIEluc3Bl
Y3RvckNsaWVudDo6bG9jYWxpemVkU3RyaW5nc1VSTCgpCiAgICAgcmV0dXJuIFN0cmluZzo6ZnJv
bVVURjgoVVJMLmdldCgpKTsKIH0KIAotU3RyaW5nIEluc3BlY3RvckNsaWVudDo6aGlkZGVuUGFu
ZWxzKCkKK1N0cmluZyBJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6aGlkZGVuUGFuZWxzKCkKIHsK
ICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JDbGllbnQ6OnNob3dXaW5kb3coKQordm9pZCBJbnNwZWN0b3JGcm9udGVuZENsaWVu
dDo6YnJpbmdUb0Zyb250KCkKIHsKLSAgICBpZiAoIW1fd2ViVmlldykKKyAgICBpZiAoIW1faW5z
cGVjdG9yV2ViVmlldykKICAgICAgICAgcmV0dXJuOwogCiAgICAgZ2Jvb2xlYW4gaGFuZGxlZCA9
IEZBTFNFOwogICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX3dlYkluc3BlY3RvciwgInNob3ct
d2luZG93IiwgJmhhbmRsZWQpOwotCi0gICAgY29yZShtX2luc3BlY3RlZFdlYlZpZXcpLT5pbnNw
ZWN0b3JDb250cm9sbGVyKCktPnNldFdpbmRvd1Zpc2libGUodHJ1ZSk7CiB9CiAKLXZvaWQgSW5z
cGVjdG9yQ2xpZW50OjpjbG9zZVdpbmRvdygpCit2b2lkIEluc3BlY3RvckZyb250ZW5kQ2xpZW50
OjpjbG9zZVdpbmRvdygpCiB7Ci0gICAgaWYgKCFtX3dlYlZpZXcpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGdib29sZWFuIGhhbmRsZWQgPSBGQUxTRTsKLSAgICBnX3NpZ25hbF9lbWl0X2J5X25h
bWUobV93ZWJJbnNwZWN0b3IsICJjbG9zZS13aW5kb3ciLCAmaGFuZGxlZCk7Ci0KLSAgICBjb3Jl
KG1faW5zcGVjdGVkV2ViVmlldyktPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0V2luZG93Vmlz
aWJsZShmYWxzZSk7CisgICAgZGVzdHJveUluc3BlY3RvcldpbmRvdygpOwogfQogCi12b2lkIElu
c3BlY3RvckNsaWVudDo6YXR0YWNoV2luZG93KCkKK3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmRDbGll
bnQ6OmF0dGFjaFdpbmRvdygpCiB7Ci0gICAgaWYgKCFtX3dlYlZpZXcpCisgICAgaWYgKCFtX2lu
c3BlY3RvcldlYlZpZXcpCiAgICAgICAgIHJldHVybjsKIAogICAgIGdib29sZWFuIGhhbmRsZWQg
PSBGQUxTRTsKICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV93ZWJJbnNwZWN0b3IsICJhdHRh
Y2gtd2luZG93IiwgJmhhbmRsZWQpOwogfQogCi12b2lkIEluc3BlY3RvckNsaWVudDo6ZGV0YWNo
V2luZG93KCkKK3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmRldGFjaFdpbmRvdygpCiB7
Ci0gICAgaWYgKCFtX3dlYlZpZXcpCisgICAgaWYgKCFtX2luc3BlY3RvcldlYlZpZXcpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIGdib29sZWFuIGhhbmRsZWQgPSBGQUxTRTsKICAgICBnX3NpZ25h
bF9lbWl0X2J5X25hbWUobV93ZWJJbnNwZWN0b3IsICJkZXRhY2gtd2luZG93IiwgJmhhbmRsZWQp
OwogfQogCi12b2lkIEluc3BlY3RvckNsaWVudDo6c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5z
aWduZWQgaGVpZ2h0KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgSW5zcGVj
dG9yQ2xpZW50OjpoaWdobGlnaHQoTm9kZSogbm9kZSkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCi12b2lkIEluc3BlY3RvckNsaWVudDo6aGlkZUhpZ2hsaWdodCgpCit2b2lkIEluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50OjpzZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWln
aHQpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDbGllbnQ6
Omluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJiBuZXdVUkwpCit2b2lkIEluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50OjppbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYgbmV3VVJM
KQogewotICAgIGlmICghbV93ZWJWaWV3KQorICAgIGlmICghbV9pbnNwZWN0b3JXZWJWaWV3KQog
ICAgICAgICByZXR1cm47CiAKICAgICB3ZWJraXRfd2ViX2luc3BlY3Rvcl9zZXRfaW5zcGVjdGVk
X3VyaShtX3dlYkluc3BlY3RvciwgbmV3VVJMLnV0ZjgoKS5kYXRhKCkpOwogfQogCi12b2lkIElu
c3BlY3RvckNsaWVudDo6aW5zcGVjdG9yV2luZG93T2JqZWN0Q2xlYXJlZCgpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDbGllbnQ6OnBvcHVsYXRlU2V0dGlu
Zyhjb25zdCBTdHJpbmcmIGtleSwgU3RyaW5nKiB2YWx1ZSkKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotfQotCi12b2lkIEluc3BlY3RvckNsaWVudDo6c3RvcmVTZXR0aW5nKGNvbnN0IFN0cmlu
ZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KIH0KIApkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JD
bGllbnRHdGsuaCBiL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50R3Rr
LmgKaW5kZXggMjk3ZmQ4Zi4uY2RiNTM3NSAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9XZWJDb3Jl
U3VwcG9ydC9JbnNwZWN0b3JDbGllbnRHdGsuaAorKysgYi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBw
b3J0L0luc3BlY3RvckNsaWVudEd0ay5oCkBAIC0zMCw2ICszMCw3IEBACiAjZGVmaW5lIEluc3Bl
Y3RvckNsaWVudEd0a19oCiAKICNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnQuaCIKKyNpbmNsdWRl
ICJJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmgiCiAjaW5jbHVkZSAid2Via2l0d2Vidmll
dy5oIgogI2luY2x1ZGUgIndlYmtpdHdlYmluc3BlY3Rvci5oIgogCkBAIC00NiwxNSArNDcsMzAg
QEAgbmFtZXNwYWNlIFdlYktpdCB7CiAgICAgICAgIEluc3BlY3RvckNsaWVudChXZWJLaXRXZWJW
aWV3KiB3ZWJWaWV3KTsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgaW5zcGVjdG9yRGVzdHJveWVk
KCk7Ci0gICAgICAgIHZvaWQgd2ViVmlld0Rlc3Ryb3llZCgpOwogCi0gICAgICAgIHZpcnR1YWwg
V2ViQ29yZTo6UGFnZSogY3JlYXRlUGFnZSgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgb3Blbklu
c3BlY3RvckZyb250ZW5kKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXIqKTsKKworICAgICAg
ICB2aXJ0dWFsIHZvaWQgaGlnaGxpZ2h0KFdlYkNvcmU6Ok5vZGUqKTsKKyAgICAgICAgdmlydHVh
bCB2b2lkIGhpZGVIaWdobGlnaHQoKTsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgcG9wdWxhdGVT
ZXR0aW5nKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYga2V5LCBXZWJDb3JlOjpTdHJpbmcqIHZhbHVl
KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHN0b3JlU2V0dGluZyhjb25zdCBXZWJDb3JlOjpTdHJp
bmcmIGtleSwgY29uc3QgV2ViQ29yZTo6U3RyaW5nJiB2YWx1ZSk7CisKKyAgICBwcml2YXRlOgor
ICAgICAgICBXZWJLaXRXZWJWaWV3KiBtX2luc3BlY3RlZFdlYlZpZXc7CisgICAgfTsKKworICAg
IGNsYXNzIEluc3BlY3RvckZyb250ZW5kQ2xpZW50IDogcHVibGljIFdlYkNvcmU6Okluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50TG9jYWwgeworICAgIHB1YmxpYzoKKyAgICAgICAgSW5zcGVjdG9yRnJv
bnRlbmRDbGllbnQoV2ViS2l0V2ViVmlldyogaW5zcGVjdGVkV2ViVmlldywgV2ViS2l0V2ViVmll
dyogaW5zcGVjdG9yV2ViVmlldywgV2ViS2l0V2ViSW5zcGVjdG9yKiB3ZWJJbnNwZWN0b3IsIFdl
YkNvcmU6OlBhZ2UqIGluc3BlY3RvclBhZ2UpOworCisgICAgICAgIHZvaWQgZGVzdHJveUluc3Bl
Y3RvcldpbmRvdygpOwogCiAgICAgICAgIHZpcnR1YWwgV2ViQ29yZTo6U3RyaW5nIGxvY2FsaXpl
ZFN0cmluZ3NVUkwoKTsKIAogICAgICAgICB2aXJ0dWFsIFdlYkNvcmU6OlN0cmluZyBoaWRkZW5Q
YW5lbHMoKTsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgc2hvd1dpbmRvdygpOworICAgICAgICB2
aXJ0dWFsIHZvaWQgYnJpbmdUb0Zyb250KCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBjbG9zZVdp
bmRvdygpOwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hXaW5kb3coKTsKQEAgLTYyLDE3
ICs3OCwxMiBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0
QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KTsKIAotICAgICAgICB2aXJ0dWFs
IHZvaWQgaGlnaGxpZ2h0KFdlYkNvcmU6Ok5vZGUqKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGhp
ZGVIaWdobGlnaHQoKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGluc3BlY3RlZFVSTENoYW5nZWQo
Y29uc3QgV2ViQ29yZTo6U3RyaW5nJiBuZXdVUkwpOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBw
b3B1bGF0ZVNldHRpbmcoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBrZXksIFdlYkNvcmU6OlN0cmlu
ZyogdmFsdWUpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgc3RvcmVTZXR0aW5nKGNvbnN0IFdlYkNv
cmU6OlN0cmluZyYga2V5LCBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIHZhbHVlKTsKLQotICAgICAg
ICB2aXJ0dWFsIHZvaWQgaW5zcGVjdG9yV2luZG93T2JqZWN0Q2xlYXJlZCgpOwotCiAgICAgcHJp
dmF0ZToKLSAgICAgICAgV2ViS2l0V2ViVmlldyogbV93ZWJWaWV3OworICAgICAgICB2aXJ0dWFs
IH5JbnNwZWN0b3JGcm9udGVuZENsaWVudCgpOworCisgICAgICAgIFdlYktpdFdlYlZpZXcqIG1f
aW5zcGVjdG9yV2ViVmlldzsKICAgICAgICAgV2ViS2l0V2ViVmlldyogbV9pbnNwZWN0ZWRXZWJW
aWV3OwogICAgICAgICBXZWJLaXRXZWJJbnNwZWN0b3IqIG1fd2ViSW5zcGVjdG9yOwogICAgIH07
CmRpZmYgLS1naXQgYS9XZWJLaXQvaGFpa3UvQ2hhbmdlTG9nIGIvV2ViS2l0L2hhaWt1L0NoYW5n
ZUxvZwppbmRleCAwYjU3YTU5Li5jOGE5ZmQwIDEwMDY0NAotLS0gYS9XZWJLaXQvaGFpa3UvQ2hh
bmdlTG9nCisrKyBiL1dlYktpdC9oYWlrdS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAx
MC0wMy0xMCAgWXVyeSBTZW1pa2hhdHNreSA8eXVyeXNAY2hyb21pdW0ub3JnPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEludHJvZHVjZSBJbnNwZWN0
b3JGcm9udGVuZENsaWVudCB0aGF0IHByb3ZpZGVzIEluc3BlY3RvckZyb250ZW5kIHdpdGggYW4g
aW50ZXJmYWNlIHRvIHRoZSBlbWJlZGRlci4gSW5zcGVjdG9yQ2xpZW50IG5vdyBzZXJ2ZXMgYXMg
YSBkZWxlZ2F0ZSBmb3IgSW5zcGVjdG9yQ29udHJvbGxlciBhbmQgZG9lcyBub3QgY29udGFpbiBt
ZXRob2RzIGZvciBtYW5hZ2luZyBpbnNwZWN0b3IgZnJvbnRlbmQgd2luZG93LiBUaGF0IGFsbG93
cyB0byBjcmVhdGUgcmVtb3RlIEluc3BlY3RvckZyb250ZW5kSG9zdC4KKworICAgICAgICBJbnRy
b2R1Y2UgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQgdGhhdCB3b3VsZCBwcm92aWRlIEluc3BlY3Rv
ckZyb250ZW5kIHdpdGggYW4gaW50ZXJmYWNlIHRvIHRoZSBlbWJlZGRlcgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzUwMzYKKworICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudEhhaWt1LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckNsaWVudEhhaWt1OjpvcGVuSW5zcGVjdG9yRnJvbnRlbmQpOgorICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudEhhaWt1Lmg6CisKIDIwMTAtMDMtMDIgIEFk
YW0gVHJlYXQgIDxhdHJlYXRAcmltLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXZlIEh5
YXR0LgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNs
aWVudEhhaWt1LmNwcCBiL1dlYktpdC9oYWlrdS9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGll
bnRIYWlrdS5jcHAKaW5kZXggZjA2ZTk2Yi4uNTkyMzJlOSAxMDA2NDQKLS0tIGEvV2ViS2l0L2hh
aWt1L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudEhhaWt1LmNwcAorKysgYi9XZWJLaXQv
aGFpa3UvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50SGFpa3UuY3BwCkBAIC00Miw0NSAr
NDIsNyBAQCB2b2lkIEluc3BlY3RvckNsaWVudEhhaWt1OjppbnNwZWN0b3JEZXN0cm95ZWQoKQog
ICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLVBhZ2UqIEluc3BlY3RvckNsaWVudEhhaWt1Ojpj
cmVhdGVQYWdlKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQot
Ci1TdHJpbmcgSW5zcGVjdG9yQ2xpZW50SGFpa3U6OmxvY2FsaXplZFN0cmluZ3NVUkwoKQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1TdHJpbmcg
SW5zcGVjdG9yQ2xpZW50SGFpa3U6OmhpZGRlblBhbmVscygpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ2xpZW50SGFp
a3U6OnNob3dXaW5kb3coKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgSW5z
cGVjdG9yQ2xpZW50SGFpa3U6OmNsb3NlV2luZG93KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCi12b2lkIEluc3BlY3RvckNsaWVudEhhaWt1OjphdHRhY2hXaW5kb3coKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ2xpZW50SGFpa3U6OmRldGFj
aFdpbmRvdygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JD
bGllbnRIYWlrdTo6c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KQordm9p
ZCBJbnNwZWN0b3JDbGllbnRIYWlrdTo6b3Blbkluc3BlY3RvckZyb250ZW5kKFdlYkNvcmU6Oklu
c3BlY3RvckNvbnRyb2xsZXIqKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CkBAIC05NSwx
NiArNTcsNiBAQCB2b2lkIEluc3BlY3RvckNsaWVudEhhaWt1OjpoaWRlSGlnaGxpZ2h0KCkKICAg
ICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIEluc3BlY3RvckNsaWVudEhhaWt1OjppbnNw
ZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LX0KLQotdm9pZCBJbnNwZWN0b3JDbGllbnRIYWlrdTo6aW5zcGVjdG9yV2luZG93T2JqZWN0Q2xl
YXJlZCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQogdm9pZCBJbnNwZWN0b3JDbGll
bnRIYWlrdTo6cG9wdWxhdGVTZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5LCBTdHJpbmcqIHZhbHVl
KQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CmRpZmYgLS1naXQgYS9XZWJLaXQvaGFpa3UvV2Vi
Q29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50SGFpa3UuaCBiL1dlYktpdC9oYWlrdS9XZWJDb3Jl
U3VwcG9ydC9JbnNwZWN0b3JDbGllbnRIYWlrdS5oCmluZGV4IDg3ODhhNWYuLmQ0Mjc2NzAgMTAw
NjQ0Ci0tLSBhL1dlYktpdC9oYWlrdS9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRIYWlr
dS5oCisrKyBiL1dlYktpdC9oYWlrdS9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRIYWlr
dS5oCkBAIC00MiwyOSArNDIsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHB1YmxpYzoK
ICAgICAgICAgdmlydHVhbCB2b2lkIGluc3BlY3RvckRlc3Ryb3llZCgpOwogCi0gICAgICAgIHZp
cnR1YWwgUGFnZSogY3JlYXRlUGFnZSgpOwotCi0gICAgICAgIHZpcnR1YWwgU3RyaW5nIGxvY2Fs
aXplZFN0cmluZ3NVUkwoKTsKLQotICAgICAgICB2aXJ0dWFsIFN0cmluZyBoaWRkZW5QYW5lbHMo
KTsKLQotICAgICAgICB2aXJ0dWFsIHZvaWQgc2hvd1dpbmRvdygpOwotICAgICAgICB2aXJ0dWFs
IHZvaWQgY2xvc2VXaW5kb3coKTsKLQotICAgICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoV2luZG93
KCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hXaW5kb3coKTsKLQotICAgICAgICB2aXJ0
dWFsIHZvaWQgc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KTsKKyAgICAg
ICAgdmlydHVhbCB2b2lkIG9wZW5JbnNwZWN0b3JGcm9udGVuZChXZWJDb3JlOjpJbnNwZWN0b3JD
b250cm9sbGVyKik7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIGhpZ2hsaWdodChOb2RlKik7CiAg
ICAgICAgIHZpcnR1YWwgdm9pZCBoaWRlSGlnaGxpZ2h0KCk7CiAKLSAgICAgICAgdmlydHVhbCB2
b2lkIGluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJiBuZXdVUkwpOwotCiAgICAgICAg
IHZpcnR1YWwgdm9pZCBwb3B1bGF0ZVNldHRpbmcoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBrZXks
IFdlYkNvcmU6OlN0cmluZyogdmFsdWUpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3RvcmVTZXR0
aW5nKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYga2V5LCBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIHZh
bHVlKTsKLQotICAgICAgICB2aXJ0dWFsIHZvaWQgaW5zcGVjdG9yV2luZG93T2JqZWN0Q2xlYXJl
ZCgpOwogICAgIH07CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1dlYktp
dC9tYWMvQ2hhbmdlTG9nIGIvV2ViS2l0L21hYy9DaGFuZ2VMb2cKaW5kZXggMDY4ODA4OC4uMWE1
MTBlYiAxMDA2NDQKLS0tIGEvV2ViS2l0L21hYy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L21hYy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSw0OSBAQAorMjAxMC0wMy0xMSAgWXVyeSBTZW1pa2hhdHNreSA8
eXVyeXNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEludHJvZHVjZSBJbnNwZWN0b3JGcm9udGVuZENsaWVudCB0aGF0IHByb3Zp
ZGVzIEluc3BlY3RvckZyb250ZW5kIHdpdGggYW4gaW50ZXJmYWNlIHRvIHRoZSBlbWJlZGRlci4g
SW5zcGVjdG9yQ2xpZW50IG5vdyBzZXJ2ZXMgYXMgYSBkZWxlZ2F0ZSBmb3IgSW5zcGVjdG9yQ29u
dHJvbGxlciBhbmQgZG9lcyBub3QgY29udGFpbiBtZXRob2RzIGZvciBtYW5hZ2luZyBpbnNwZWN0
b3IgZnJvbnRlbmQgd2luZG93LiBUaGF0IGFsbG93cyB0byBjcmVhdGUgcmVtb3RlIEluc3BlY3Rv
ckZyb250ZW5kSG9zdC4KKworICAgICAgICBJbnRyb2R1Y2UgSW5zcGVjdG9yRnJvbnRlbmRDbGll
bnQgdGhhdCB3b3VsZCBwcm92aWRlIEluc3BlY3RvckZyb250ZW5kIHdpdGggYW4gaW50ZXJmYWNl
IHRvIHRoZSBlbWJlZGRlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MzUwMzYKKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNs
aWVudC5oOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5tbToK
KyAgICAgICAgKFdlYkluc3BlY3RvckNsaWVudDo6V2ViSW5zcGVjdG9yQ2xpZW50KToKKyAgICAg
ICAgKFdlYkluc3BlY3RvckNsaWVudDo6aW5zcGVjdG9yRGVzdHJveWVkKToKKyAgICAgICAgKFdl
Ykluc3BlY3RvckNsaWVudDo6b3Blbkluc3BlY3RvckZyb250ZW5kKToKKyAgICAgICAgKFdlYklu
c3BlY3RvckNsaWVudDo6aGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYkluc3BlY3RvckNsaWVudDo6
aGlkZUhpZ2hsaWdodCk6CisgICAgICAgIChXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6V2Vi
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRD
bGllbnQ6OmZyb250ZW5kTG9hZGVkKToKKyAgICAgICAgKFdlYkluc3BlY3RvckZyb250ZW5kQ2xp
ZW50Ojpsb2NhbGl6ZWRTdHJpbmdzVVJMKToKKyAgICAgICAgKFdlYkluc3BlY3RvckZyb250ZW5k
Q2xpZW50OjpoaWRkZW5QYW5lbHMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGll
bnQ6OmJyaW5nVG9Gcm9udCk6CisgICAgICAgIChXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6
Y2xvc2VXaW5kb3cpOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmF0dGFj
aFdpbmRvdyk6CisgICAgICAgIChXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6ZGV0YWNoV2lu
ZG93KToKKyAgICAgICAgKFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpzZXRBdHRhY2hlZFdp
bmRvd0hlaWdodCk6CisgICAgICAgIChXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6aW5zcGVj
dGVkVVJMQ2hhbmdlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6dXBk
YXRlV2luZG93VGl0bGUpOgorICAgICAgICAoLVtXZWJJbnNwZWN0b3JXaW5kb3dDb250cm9sbGVy
IGRlYWxsb2NdKToKKyAgICAgICAgKC1bV2ViSW5zcGVjdG9yV2luZG93Q29udHJvbGxlciB3aW5k
b3dTaG91bGRDbG9zZTpdKToKKyAgICAgICAgKC1bV2ViSW5zcGVjdG9yV2luZG93Q29udHJvbGxl
ciBjbG9zZV0pOgorICAgICAgICAoLVtXZWJJbnNwZWN0b3JXaW5kb3dDb250cm9sbGVyIHNob3dX
aW5kb3c6XSk6CisgICAgICAgICgtW1dlYkluc3BlY3RvcldpbmRvd0NvbnRyb2xsZXIgYXR0YWNo
XSk6CisgICAgICAgICgtW1dlYkluc3BlY3RvcldpbmRvd0NvbnRyb2xsZXIgZGV0YWNoXSk6Cisg
ICAgICAgICgtW1dlYkluc3BlY3RvcldpbmRvd0NvbnRyb2xsZXIgYXR0YWNoZWRdKToKKyAgICAg
ICAgKC1bV2ViSW5zcGVjdG9yV2luZG93Q29udHJvbGxlciBzZXRGcm9udGVuZENsaWVudDpdKToK
KyAgICAgICAgKC1bV2ViSW5zcGVjdG9yV2luZG93Q29udHJvbGxlciBkZXN0cm95SW5zcGVjdG9y
Vmlld10pOgorICAgICAgICAoLVtXZWJOb2RlSGlnaGxpZ2h0ZXIgaW5pdFdpdGhJbnNwZWN0ZWRX
ZWJWaWV3Ol0pOgorICAgICAgICAoLVtXZWJOb2RlSGlnaGxpZ2h0ZXIgZGVhbGxvY10pOgorICAg
ICAgICAoLVtXZWJOb2RlSGlnaGxpZ2h0ZXIgaGlnaGxpZ2h0Tm9kZTpdKToKKyAgICAgICAgKC1b
V2ViTm9kZUhpZ2hsaWdodGVyIGhpZGVIaWdobGlnaHRdKToKKyAgICAgICAgKC1bV2ViTm9kZUhp
Z2hsaWdodGVyIGRpZEF0dGFjaFdlYk5vZGVIaWdobGlnaHQ6XSk6CisgICAgICAgICgtW1dlYk5v
ZGVIaWdobGlnaHRlciB3aWxsRGV0YWNoV2ViTm9kZUhpZ2hsaWdodDpdKToKKyAgICAgICAgKiBX
ZWJJbnNwZWN0b3IvV2ViSW5zcGVjdG9yLm1tOgorICAgICAgICAoLVtXZWJJbnNwZWN0b3IgYXR0
YWNoOl0pOgorICAgICAgICAoLVtXZWJJbnNwZWN0b3IgZGV0YWNoOl0pOgorCiAyMDEwLTAzLTEw
ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IERhcmluIEFkbGVyLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9y
dC9XZWJJbnNwZWN0b3JDbGllbnQuaCBiL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViSW5z
cGVjdG9yQ2xpZW50LmgKaW5kZXggNjQ2MjFmOC4uZWU4MWIyNSAxMDA2NDQKLS0tIGEvV2ViS2l0
L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuaAorKysgYi9XZWJLaXQvbWFj
L1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5oCkBAIC0yNywxNSArMjcsMTggQEAK
ICAqLwogCiAjaW1wb3J0IDxXZWJDb3JlL0luc3BlY3RvckNsaWVudC5oPgorI2ltcG9ydCA8V2Vi
Q29yZS9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Bs
YXRmb3JtU3RyaW5nLmg+CiAKICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KIAogI2lmZGVmIF9f
T0JKQ19fCiBAY2xhc3MgV2ViSW5zcGVjdG9yV2luZG93Q29udHJvbGxlcjsKK0BjbGFzcyBXZWJO
b2RlSGlnaGxpZ2h0ZXI7CiBAY2xhc3MgV2ViVmlldzsKICNlbHNlCiBjbGFzcyBXZWJJbnNwZWN0
b3JXaW5kb3dDb250cm9sbGVyOworY2xhc3MgV2ViTm9kZUhpZ2hsaWdodGVyOwogY2xhc3MgV2Vi
VmlldzsKICNlbmRpZgogCkBAIC00NSwzMiArNDgsNDEgQEAgcHVibGljOgogCiAgICAgdmlydHVh
bCB2b2lkIGluc3BlY3RvckRlc3Ryb3llZCgpOwogCi0gICAgdmlydHVhbCBXZWJDb3JlOjpQYWdl
KiBjcmVhdGVQYWdlKCk7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpTdHJpbmcgbG9jYWxpemVkU3Ry
aW5nc1VSTCgpOwotCi0gICAgdmlydHVhbCBXZWJDb3JlOjpTdHJpbmcgaGlkZGVuUGFuZWxzKCk7
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2hvd1dpbmRvdygpOwotICAgIHZpcnR1YWwgdm9pZCBjbG9z
ZVdpbmRvdygpOwotCi0gICAgdmlydHVhbCB2b2lkIGF0dGFjaFdpbmRvdygpOwotICAgIHZpcnR1
YWwgdm9pZCBkZXRhY2hXaW5kb3coKTsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRBdHRhY2hlZFdp
bmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpOworICAgIHZpcnR1YWwgdm9pZCBvcGVuSW5zcGVj
dG9yRnJvbnRlbmQoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlciopOwogCiAgICAgdmlydHVh
bCB2b2lkIGhpZ2hsaWdodChXZWJDb3JlOjpOb2RlKik7CiAgICAgdmlydHVhbCB2b2lkIGhpZGVI
aWdobGlnaHQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgaW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBX
ZWJDb3JlOjpTdHJpbmcmIG5ld1VSTCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgcG9wdWxhdGVTZXR0
aW5nKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYga2V5LCBXZWJDb3JlOjpTdHJpbmcqIHZhbHVlKTsK
ICAgICB2aXJ0dWFsIHZvaWQgc3RvcmVTZXR0aW5nKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYga2V5
LCBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIHZhbHVlKTsKIAotICAgIHZpcnR1YWwgdm9pZCBpbnNw
ZWN0b3JXaW5kb3dPYmplY3RDbGVhcmVkKCk7Citwcml2YXRlOgorICAgIFdlYlZpZXcgKm1fd2Vi
VmlldzsKKyAgICBSZXRhaW5QdHI8V2ViTm9kZUhpZ2hsaWdodGVyPiBtX2hpZ2hsaWdodGVyOwor
fTsKKworY2xhc3MgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQgOiBwdWJsaWMgV2ViQ29yZTo6
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbCB7CitwdWJsaWM6CisgICAgV2ViSW5zcGVjdG9y
RnJvbnRlbmRDbGllbnQoV2ViVmlldyosIFdlYkluc3BlY3RvcldpbmRvd0NvbnRyb2xsZXIqLCBX
ZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyKiwgV2ViQ29yZTo6UGFnZSopOworCisgICAgdmly
dHVhbCB2b2lkIGZyb250ZW5kTG9hZGVkKCk7CisgICAgCisgICAgdmlydHVhbCBXZWJDb3JlOjpT
dHJpbmcgbG9jYWxpemVkU3RyaW5nc1VSTCgpOworICAgIHZpcnR1YWwgV2ViQ29yZTo6U3RyaW5n
IGhpZGRlblBhbmVscygpOworICAgIAorICAgIHZpcnR1YWwgdm9pZCBicmluZ1RvRnJvbnQoKTsK
KyAgICB2aXJ0dWFsIHZvaWQgY2xvc2VXaW5kb3coKTsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQg
YXR0YWNoV2luZG93KCk7CisgICAgdmlydHVhbCB2b2lkIGRldGFjaFdpbmRvdygpOworICAgIAor
ICAgIHZpcnR1YWwgdm9pZCBzZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQp
OworICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6OlN0
cmluZyYgbmV3VVJMKTsKIAogcHJpdmF0ZToKICAgICB2b2lkIHVwZGF0ZVdpbmRvd1RpdGxlKCkg
Y29uc3Q7CiAKLSAgICBXZWJWaWV3ICptX3dlYlZpZXc7CisgICAgV2ViVmlldyogbV9pbnNwZWN0
ZWRXZWJWaWV3OwogICAgIFJldGFpblB0cjxXZWJJbnNwZWN0b3JXaW5kb3dDb250cm9sbGVyPiBt
X3dpbmRvd0NvbnRyb2xsZXI7CiAgICAgV2ViQ29yZTo6U3RyaW5nIG1faW5zcGVjdGVkVVJMOwog
fTsKZGlmZiAtLWdpdCBhL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xp
ZW50Lm1tIGIvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQubW0K
aW5kZXggYzVmMTcyOS4uYWJjNmU2MCAxMDA2NDQKLS0tIGEvV2ViS2l0L21hYy9XZWJDb3JlU3Vw
cG9ydC9XZWJJbnNwZWN0b3JDbGllbnQubW0KKysrIGIvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9y
dC9XZWJJbnNwZWN0b3JDbGllbnQubW0KQEAgLTQxLDYgKzQxLDcgQEAKICNpbXBvcnQgPFdlYkNv
cmUvUGFnZS5oPgogI2ltcG9ydCA8V2ViS2l0L0RPTUV4dGVuc2lvbnMuaD4KICNpbXBvcnQgPFdl
YktpdFN5c3RlbUludGVyZmFjZS5oPgorI2ltcG9ydCA8d3RmL1Bhc3NPd25QdHIuaD4KIAogdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTQ4LDQ1ICs0OSw5MCBAQCB1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKIEBwcml2YXRlCiAgICAgV2ViVmlldyAqX2luc3BlY3RlZFdlYlZpZXc7CiAg
ICAgV2ViVmlldyAqX3dlYlZpZXc7Ci0gICAgV2ViTm9kZUhpZ2hsaWdodCAqX2N1cnJlbnRIaWdo
bGlnaHQ7CisgICAgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQqIF9mcm9udGVuZENsaWVudDsK
ICAgICBCT09MIF9hdHRhY2hlZFRvSW5zcGVjdGVkV2ViVmlldzsKICAgICBCT09MIF9zaG91bGRB
dHRhY2g7CiAgICAgQk9PTCBfdmlzaWJsZTsKLSAgICBCT09MIF9tb3ZpbmdXaW5kb3dzOworICAg
IEJPT0wgX2Rlc3Ryb3lpbmdJbnNwZWN0b3JWaWV3OwogfQogLSAoaWQpaW5pdFdpdGhJbnNwZWN0
ZWRXZWJWaWV3OihXZWJWaWV3ICopd2ViVmlldzsKLS0gKEJPT0wpaW5zcGVjdG9yVmlzaWJsZTsK
IC0gKFdlYlZpZXcgKil3ZWJWaWV3OwogLSAodm9pZClhdHRhY2g7CiAtICh2b2lkKWRldGFjaDsK
Ky0gKEJPT0wpYXR0YWNoZWQ7CistICh2b2lkKXNldEZyb250ZW5kQ2xpZW50OihXZWJJbnNwZWN0
b3JGcm9udGVuZENsaWVudCopZnJvbnRlbmRDbGllbnQ7CiAtICh2b2lkKXNldEF0dGFjaGVkV2lu
ZG93SGVpZ2h0Oih1bnNpZ25lZCloZWlnaHQ7CistICh2b2lkKWRlc3Ryb3lJbnNwZWN0b3JWaWV3
OworQGVuZAorCisjcHJhZ21hIG1hcmsgLQorCitAaW50ZXJmYWNlIFdlYk5vZGVIaWdobGlnaHRl
ciA6IE5TT2JqZWN0IHsKK0Bwcml2YXRlCisgICAgV2ViVmlldyAqX2luc3BlY3RlZFdlYlZpZXc7
CisgICAgV2ViTm9kZUhpZ2hsaWdodCAqX2N1cnJlbnRIaWdobGlnaHQ7Cit9CistIChpZClpbml0
V2l0aEluc3BlY3RlZFdlYlZpZXc6KFdlYlZpZXcgKil3ZWJWaWV3OwogLSAodm9pZCloaWdobGln
aHROb2RlOihET01Ob2RlICopbm9kZTsKIC0gKHZvaWQpaGlkZUhpZ2hsaWdodDsKIEBlbmQKIAog
I3ByYWdtYSBtYXJrIC0KIAorCiBXZWJJbnNwZWN0b3JDbGllbnQ6OldlYkluc3BlY3RvckNsaWVu
dChXZWJWaWV3ICp3ZWJWaWV3KQogOiBtX3dlYlZpZXcod2ViVmlldykKKywgbV9oaWdobGlnaHRl
cihBZG9wdE5TLCBbW1dlYk5vZGVIaWdobGlnaHRlciBhbGxvY10gaW5pdFdpdGhJbnNwZWN0ZWRX
ZWJWaWV3OndlYlZpZXddKQogewogfQogCiB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6aW5zcGVj
dG9yRGVzdHJveWVkKCkKIHsKLSAgICBbW21fd2luZG93Q29udHJvbGxlci5nZXQoKSB3ZWJWaWV3
XSBjbG9zZV07CiAgICAgZGVsZXRlIHRoaXM7CiB9CiAKLVBhZ2UqIFdlYkluc3BlY3RvckNsaWVu
dDo6Y3JlYXRlUGFnZSgpCit2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6b3Blbkluc3BlY3RvckZy
b250ZW5kKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIpCit7CisgICAg
UmV0YWluUHRyPFdlYkluc3BlY3RvcldpbmRvd0NvbnRyb2xsZXI+IHdpbmRvd0NvbnRyb2xsZXIo
QWRvcHROUywgW1tXZWJJbnNwZWN0b3JXaW5kb3dDb250cm9sbGVyIGFsbG9jXSBpbml0V2l0aElu
c3BlY3RlZFdlYlZpZXc6bV93ZWJWaWV3XSk7CisgICAgUGFnZSogZnJvbnRlbmRQYWdlID0gY29y
ZShbd2luZG93Q29udHJvbGxlci5nZXQoKSB3ZWJWaWV3XSk7CisKKyAgICBmcm9udGVuZFBhZ2Ut
Pmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQobmV3IFdl
Ykluc3BlY3RvckZyb250ZW5kQ2xpZW50KG1fd2ViVmlldywgd2luZG93Q29udHJvbGxlci5nZXQo
KSwgaW5zcGVjdG9yQ29udHJvbGxlciwgZnJvbnRlbmRQYWdlKSk7Cit9CisKK3ZvaWQgV2ViSW5z
cGVjdG9yQ2xpZW50OjpoaWdobGlnaHQoTm9kZSogbm9kZSkKK3sKKyAgICBbbV9oaWdobGlnaHRl
ci5nZXQoKSBoaWdobGlnaHROb2RlOmtpdChub2RlKV07Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9y
Q2xpZW50OjpoaWRlSGlnaGxpZ2h0KCkKIHsKLSAgICBpZiAobV93aW5kb3dDb250cm9sbGVyKQot
ICAgICAgICBbW21fd2luZG93Q29udHJvbGxlci5nZXQoKSB3ZWJWaWV3XSBjbG9zZV07Ci0gICAg
bV93aW5kb3dDb250cm9sbGVyLmFkb3B0TlMoW1tXZWJJbnNwZWN0b3JXaW5kb3dDb250cm9sbGVy
IGFsbG9jXSBpbml0V2l0aEluc3BlY3RlZFdlYlZpZXc6bV93ZWJWaWV3XSk7CisgICAgW21faGln
aGxpZ2h0ZXIuZ2V0KCkgaGlkZUhpZ2hsaWdodF07Cit9CiAKLSAgICByZXR1cm4gY29yZShbbV93
aW5kb3dDb250cm9sbGVyLmdldCgpIHdlYlZpZXddKTsKK1dlYkluc3BlY3RvckZyb250ZW5kQ2xp
ZW50OjpXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudChXZWJWaWV3KiBpbnNwZWN0ZWRXZWJWaWV3
LCBXZWJJbnNwZWN0b3JXaW5kb3dDb250cm9sbGVyKiB3aW5kb3dDb250cm9sbGVyLCBJbnNwZWN0
b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyLCBQYWdlKiBmcm9udGVuZFBhZ2UpCisg
ICAgOiBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsKGluc3BlY3RvckNvbnRyb2xsZXIsICBm
cm9udGVuZFBhZ2UpCisgICAgLCBtX2luc3BlY3RlZFdlYlZpZXcoaW5zcGVjdGVkV2ViVmlldykK
KyAgICAsIG1fd2luZG93Q29udHJvbGxlcih3aW5kb3dDb250cm9sbGVyKQoreworICAgIFt3aW5k
b3dDb250cm9sbGVyIHNldEZyb250ZW5kQ2xpZW50OnRoaXNdOwogfQogCi1TdHJpbmcgV2ViSW5z
cGVjdG9yQ2xpZW50Ojpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkKK3ZvaWQgV2ViSW5zcGVjdG9yRnJv
bnRlbmRDbGllbnQ6OmZyb250ZW5kTG9hZGVkKCkKK3sKKyAgICBJbnNwZWN0b3JGcm9udGVuZENs
aWVudExvY2FsOjpmcm9udGVuZExvYWRlZCgpOworCisgICAgV2ViRnJhbWUgKmZyYW1lID0gW21f
aW5zcGVjdGVkV2ViVmlldyBtYWluRnJhbWVdOworICAgIAorICAgIFdlYkZyYW1lTG9hZERlbGVn
YXRlSW1wbGVtZW50YXRpb25DYWNoZSogaW1wbGVtZW50YXRpb25zID0gV2ViVmlld0dldEZyYW1l
TG9hZERlbGVnYXRlSW1wbGVtZW50YXRpb25zKG1faW5zcGVjdGVkV2ViVmlldyk7CisgICAgaWYg
KGltcGxlbWVudGF0aW9ucy0+ZGlkQ2xlYXJJbnNwZWN0b3JXaW5kb3dPYmplY3RGb3JGcmFtZUZ1
bmMpCisgICAgICAgIENhbGxGcmFtZUxvYWREZWxlZ2F0ZShpbXBsZW1lbnRhdGlvbnMtPmRpZENs
ZWFySW5zcGVjdG9yV2luZG93T2JqZWN0Rm9yRnJhbWVGdW5jLCBtX2luc3BlY3RlZFdlYlZpZXcs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAc2VsZWN0b3Iod2ViVmlldzpkaWRDbGVh
ckluc3BlY3RvcldpbmRvd09iamVjdDpmb3JGcmFtZTopLCBbZnJhbWUgd2luZG93T2JqZWN0XSwg
ZnJhbWUpOworCisgICAgYm9vbCBhdHRhY2hlZCA9IFttX3dpbmRvd0NvbnRyb2xsZXIuZ2V0KCkg
YXR0YWNoZWRdOworICAgIHNldEF0dGFjaGVkV2luZG93KGF0dGFjaGVkKTsKK30KKworU3RyaW5n
IFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50Ojpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkKIHsKICAg
ICBOU1N0cmluZyAqcGF0aCA9IFtbTlNCdW5kbGUgYnVuZGxlV2l0aElkZW50aWZpZXI6QCJjb20u
YXBwbGUuV2ViQ29yZSJdIHBhdGhGb3JSZXNvdXJjZTpAImxvY2FsaXplZFN0cmluZ3MiIG9mVHlw
ZTpAImpzIl07CiAgICAgaWYgKHBhdGgpCkBAIC05NCw3ICsxNDAsNyBAQCBTdHJpbmcgV2ViSW5z
cGVjdG9yQ2xpZW50Ojpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkKICAgICByZXR1cm4gU3RyaW5nKCk7
CiB9CiAKLVN0cmluZyBXZWJJbnNwZWN0b3JDbGllbnQ6OmhpZGRlblBhbmVscygpCitTdHJpbmcg
V2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmhpZGRlblBhbmVscygpCiB7CiAgICAgTlNTdHJp
bmcgKmhpZGRlblBhbmVscyA9IFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNd
IHN0cmluZ0ZvcktleTpAIldlYktpdEluc3BlY3RvckhpZGRlblBhbmVscyJdOwogICAgIGlmICho
aWRkZW5QYW5lbHMpCkBAIC0xMDIsNjMgKzE0OCw0NSBAQCBTdHJpbmcgV2ViSW5zcGVjdG9yQ2xp
ZW50OjpoaWRkZW5QYW5lbHMoKQogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAotdm9pZCBXZWJJ
bnNwZWN0b3JDbGllbnQ6OnNob3dXaW5kb3coKQordm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZENs
aWVudDo6YnJpbmdUb0Zyb250KCkKIHsKICAgICB1cGRhdGVXaW5kb3dUaXRsZSgpOwogICAgIFtt
X3dpbmRvd0NvbnRyb2xsZXIuZ2V0KCkgc2hvd1dpbmRvdzpuaWxdOwogfQogCi12b2lkIFdlYklu
c3BlY3RvckNsaWVudDo6Y2xvc2VXaW5kb3coKQordm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZENs
aWVudDo6Y2xvc2VXaW5kb3coKQogewotICAgIFttX3dpbmRvd0NvbnRyb2xsZXIuZ2V0KCkgY2xv
c2VdOworICAgIFttX3dpbmRvd0NvbnRyb2xsZXIuZ2V0KCkgZGVzdHJveUluc3BlY3RvclZpZXdd
OwogfQogCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6YXR0YWNoV2luZG93KCkKK3ZvaWQgV2Vi
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmF0dGFjaFdpbmRvdygpCiB7CiAgICAgW21fd2luZG93
Q29udHJvbGxlci5nZXQoKSBhdHRhY2hdOworICAgIHJlc3RvcmVBdHRhY2hlZFdpbmRvd0hlaWdo
dCgpOwogfQogCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6ZGV0YWNoV2luZG93KCkKK3ZvaWQg
V2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmRldGFjaFdpbmRvdygpCiB7CiAgICAgW21fd2lu
ZG93Q29udHJvbGxlci5nZXQoKSBkZXRhY2hdOwogfQogCi12b2lkIFdlYkluc3BlY3RvckNsaWVu
dDo6c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KQordm9pZCBXZWJJbnNw
ZWN0b3JGcm9udGVuZENsaWVudDo6c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVp
Z2h0KQogewogICAgIFttX3dpbmRvd0NvbnRyb2xsZXIuZ2V0KCkgc2V0QXR0YWNoZWRXaW5kb3dI
ZWlnaHQ6aGVpZ2h0XTsKIH0KIAotdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmhpZ2hsaWdodChO
b2RlKiBub2RlKQotewotICAgIFttX3dpbmRvd0NvbnRyb2xsZXIuZ2V0KCkgaGlnaGxpZ2h0Tm9k
ZTpraXQobm9kZSldOwotfQotCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6aGlkZUhpZ2hsaWdo
dCgpCi17Ci0gICAgW21fd2luZG93Q29udHJvbGxlci5nZXQoKSBoaWRlSGlnaGxpZ2h0XTsKLX0K
LQotdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6Omluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3Ry
aW5nJiBuZXdVUkwpCit2b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjppbnNwZWN0ZWRV
UkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYgbmV3VVJMKQogewogICAgIG1faW5zcGVjdGVkVVJMID0g
bmV3VVJMOwogICAgIHVwZGF0ZVdpbmRvd1RpdGxlKCk7CiB9CiAKLXZvaWQgV2ViSW5zcGVjdG9y
Q2xpZW50Ojp1cGRhdGVXaW5kb3dUaXRsZSgpIGNvbnN0Cit2b2lkIFdlYkluc3BlY3RvckZyb250
ZW5kQ2xpZW50Ojp1cGRhdGVXaW5kb3dUaXRsZSgpIGNvbnN0CiB7CiAgICAgTlNTdHJpbmcgKnRp
dGxlID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6VUlfU1RSSU5HKCJXZWIgSW5zcGVjdG9y
IOKAlCAlQCIsICJXZWIgSW5zcGVjdG9yIHdpbmRvdyB0aXRsZSIpLCAoTlNTdHJpbmcgKiltX2lu
c3BlY3RlZFVSTF07CiAgICAgW1ttX3dpbmRvd0NvbnRyb2xsZXIuZ2V0KCkgd2luZG93XSBzZXRU
aXRsZTp0aXRsZV07CiB9CiAKLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjppbnNwZWN0b3JXaW5k
b3dPYmplY3RDbGVhcmVkKCkKLXsKLSAgICBXZWJGcmFtZSAqZnJhbWUgPSBbbV93ZWJWaWV3IG1h
aW5GcmFtZV07Ci0gICAgCi0gICAgV2ViRnJhbWVMb2FkRGVsZWdhdGVJbXBsZW1lbnRhdGlvbkNh
Y2hlKiBpbXBsZW1lbnRhdGlvbnMgPSBXZWJWaWV3R2V0RnJhbWVMb2FkRGVsZWdhdGVJbXBsZW1l
bnRhdGlvbnMobV93ZWJWaWV3KTsKLSAgICBpZiAoaW1wbGVtZW50YXRpb25zLT5kaWRDbGVhcklu
c3BlY3RvcldpbmRvd09iamVjdEZvckZyYW1lRnVuYykKLSAgICAgICAgQ2FsbEZyYW1lTG9hZERl
bGVnYXRlKGltcGxlbWVudGF0aW9ucy0+ZGlkQ2xlYXJJbnNwZWN0b3JXaW5kb3dPYmplY3RGb3JG
cmFtZUZ1bmMsIG1fd2ViVmlldywKLSAgICAgICAgICBAc2VsZWN0b3Iod2ViVmlldzpkaWRDbGVh
ckluc3BlY3RvcldpbmRvd09iamVjdDpmb3JGcmFtZTopLCBbZnJhbWUgd2luZG93T2JqZWN0XSwg
ZnJhbWUpOwotfQogCiAjcHJhZ21hIG1hcmsgLQogCkBAIC0yMjEsMTggKzI0OSwxMiBAQCB2b2lk
IFdlYkluc3BlY3RvckNsaWVudDo6aW5zcGVjdG9yV2luZG93T2JqZWN0Q2xlYXJlZCgpCiAKIC0g
KHZvaWQpZGVhbGxvYwogewotICAgIEFTU0VSVCghX2N1cnJlbnRIaWdobGlnaHQpOwogICAgIFtf
d2ViVmlldyByZWxlYXNlXTsKICAgICBbc3VwZXIgZGVhbGxvY107CiB9CiAKICNwcmFnbWEgbWFy
ayAtCiAKLS0gKEJPT0wpaW5zcGVjdG9yVmlzaWJsZQotewotICAgIHJldHVybiBfdmlzaWJsZTsK
LX0KLQogLSAoV2ViVmlldyAqKXdlYlZpZXcKIHsKICAgICByZXR1cm4gX3dlYlZpZXc7CkBAIC0y
NzEsMTEgKzI5Myw3IEBAIHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjppbnNwZWN0b3JXaW5kb3dP
YmplY3RDbGVhcmVkKCkKIAogLSAoQk9PTCl3aW5kb3dTaG91bGRDbG9zZTooaWQpc2VuZGVyCiB7
Ci0gICAgX3Zpc2libGUgPSBOTzsKLQotICAgIFtfaW5zcGVjdGVkV2ViVmlldyBwYWdlXS0+aW5z
cGVjdG9yQ29udHJvbGxlcigpLT5zZXRXaW5kb3dWaXNpYmxlKGZhbHNlKTsKLQotICAgIFtzZWxm
IGhpZGVIaWdobGlnaHRdOworICAgIFtzZWxmIGRlc3Ryb3lJbnNwZWN0b3JWaWV3XTsKIAogICAg
IHJldHVybiBZRVM7CiB9CkBAIC0yODcsMTEgKzMwNSw2IEBAIHZvaWQgV2ViSW5zcGVjdG9yQ2xp
ZW50OjppbnNwZWN0b3JXaW5kb3dPYmplY3RDbGVhcmVkKCkKIAogICAgIF92aXNpYmxlID0gTk87
CiAKLSAgICBpZiAoIV9tb3ZpbmdXaW5kb3dzKQotICAgICAgICBbX2luc3BlY3RlZFdlYlZpZXcg
cGFnZV0tPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0V2luZG93VmlzaWJsZShmYWxzZSk7Ci0K
LSAgICBbc2VsZiBoaWRlSGlnaGxpZ2h0XTsKLQogICAgIGlmIChfYXR0YWNoZWRUb0luc3BlY3Rl
ZFdlYlZpZXcpIHsKICAgICAgICAgaWYgKFtfaW5zcGVjdGVkV2ViVmlldyBfaXNDbG9zZWRdKQog
ICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzI4LDcgKzM0MSw3IEBAIHZvaWQgV2ViSW5zcGVjdG9y
Q2xpZW50OjppbnNwZWN0b3JXaW5kb3dPYmplY3RDbGVhcmVkKCkKICAgICBTdHJpbmcgc2hvdWxk
QXR0YWNoID0gW19pbnNwZWN0ZWRXZWJWaWV3IHBhZ2VdLT5pbnNwZWN0b3JDb250cm9sbGVyKCkt
PnNldHRpbmcoSW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zcGVjdG9yU3RhcnRzQXR0YWNoZWRTZXR0
aW5nTmFtZSgpKTsKICAgICBfc2hvdWxkQXR0YWNoID0gc2hvdWxkQXR0YWNoICE9ICJmYWxzZSI7
CiAgICAgCi0gICAgaWYgKF9zaG91bGRBdHRhY2ggJiYgIVtfaW5zcGVjdGVkV2ViVmlldyBwYWdl
XS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5jYW5BdHRhY2hXaW5kb3coKSkKKyAgICBpZiAoX3No
b3VsZEF0dGFjaCAmJiAhX2Zyb250ZW5kQ2xpZW50LT5jYW5BdHRhY2hXaW5kb3coKSkKICAgICAg
ICAgX3Nob3VsZEF0dGFjaCA9IE5POwogCiAgICAgaWYgKF9zaG91bGRBdHRhY2gpIHsKQEAgLTM1
Miw4ICszNjUsNiBAQCB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6aW5zcGVjdG9yV2luZG93T2Jq
ZWN0Q2xlYXJlZCgpCiAKICAgICAgICAgW3N1cGVyIHNob3dXaW5kb3c6bmlsXTsKICAgICB9Ci0K
LSAgICBbX2luc3BlY3RlZFdlYlZpZXcgcGFnZV0tPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0
V2luZG93VmlzaWJsZSh0cnVlLCBfc2hvdWxkQXR0YWNoKTsKIH0KIAogI3ByYWdtYSBtYXJrIC0K
QEAgLTM2NCwxMiArMzc1LDkgQEAgdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6Omluc3BlY3Rvcldp
bmRvd09iamVjdENsZWFyZWQoKQogICAgICAgICByZXR1cm47CiAKICAgICBbX2luc3BlY3RlZFdl
YlZpZXcgcGFnZV0tPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0U2V0dGluZyhJbnNwZWN0b3JD
b250cm9sbGVyOjppbnNwZWN0b3JTdGFydHNBdHRhY2hlZFNldHRpbmdOYW1lKCksICJ0cnVlIik7
Ci0gICAgX21vdmluZ1dpbmRvd3MgPSBZRVM7CiAKICAgICBbc2VsZiBjbG9zZV07CiAgICAgW3Nl
bGYgc2hvd1dpbmRvdzpuaWxdOwotCi0gICAgX21vdmluZ1dpbmRvd3MgPSBOTzsKIH0KIAogLSAo
dm9pZClkZXRhY2gKQEAgLTM3OCwxMyArMzg2LDE5IEBAIHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50
OjppbnNwZWN0b3JXaW5kb3dPYmplY3RDbGVhcmVkKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
W19pbnNwZWN0ZWRXZWJWaWV3IHBhZ2VdLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnNldFNldHRp
bmcoSW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zcGVjdG9yU3RhcnRzQXR0YWNoZWRTZXR0aW5nTmFt
ZSgpLCAiZmFsc2UiKTsKLSAgICBfbW92aW5nV2luZG93cyA9IFlFUzsKIAogICAgIFtzZWxmIGNs
b3NlXTsKICAgICBbc2VsZiBzaG93V2luZG93Om5pbF07Cit9CiAKLSAgICBfbW92aW5nV2luZG93
cyA9IE5POworLSAoQk9PTClhdHRhY2hlZAoreworICAgIHJldHVybiBfYXR0YWNoZWRUb0luc3Bl
Y3RlZFdlYlZpZXc7Cit9CiAKKy0gKHZvaWQpc2V0RnJvbnRlbmRDbGllbnQ6KFdlYkluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50Kilmcm9udGVuZENsaWVudAoreworICAgIF9mcm9udGVuZENsaWVudCA9
IGZyb250ZW5kQ2xpZW50OwogfQogCiAtICh2b2lkKXNldEF0dGFjaGVkV2luZG93SGVpZ2h0Oih1
bnNpZ25lZCloZWlnaHQKQEAgLTQwNSwyOSArNDE5LDE3IEBAIHZvaWQgV2ViSW5zcGVjdG9yQ2xp
ZW50OjppbnNwZWN0b3JXaW5kb3dPYmplY3RDbGVhcmVkKCkKICAgICBbZnJhbWVWaWV3IHNldEZy
YW1lOmZyYW1lVmlld1JlY3RdOwogfQogCi0jcHJhZ21hIG1hcmsgLQotCi0tICh2b2lkKWhpZ2hs
aWdodE5vZGU6KERPTU5vZGUgKilub2RlCistICh2b2lkKWRlc3Ryb3lJbnNwZWN0b3JWaWV3CiB7
Ci0gICAgLy8gVGhlIHNjcm9sbHZpZXcncyBjb250ZW50IHZpZXcgc3RheXMgYXJvdW5kIGJldHdl
ZW4gcGFnZSBuYXZpZ2F0aW9ucywgc28gdGFyZ2V0IGl0Ci0gICAgTlNWaWV3ICp2aWV3ID0gW1tb
W1tfaW5zcGVjdGVkV2ViVmlldyBtYWluRnJhbWVdIGZyYW1lVmlld10gZG9jdW1lbnRWaWV3XSBl
bmNsb3NpbmdTY3JvbGxWaWV3XSBjb250ZW50Vmlld107Ci0gICAgaWYgKCFbdmlldyB3aW5kb3dd
KQotICAgICAgICByZXR1cm47IC8vIHNraXAgdGhlIGhpZ2hsaWdodCBpZiB3ZSBoYXZlIG5vIHdp
bmRvdyAoZS5nLiBoaWRkZW4gdGFiKQotCi0gICAgaWYgKCFfY3VycmVudEhpZ2hsaWdodCkgewot
ICAgICAgICBfY3VycmVudEhpZ2hsaWdodCA9IFtbV2ViTm9kZUhpZ2hsaWdodCBhbGxvY10gaW5p
dFdpdGhUYXJnZXRWaWV3OnZpZXcgaW5zcGVjdG9yQ29udHJvbGxlcjpbX2luc3BlY3RlZFdlYlZp
ZXcgcGFnZV0tPmluc3BlY3RvckNvbnRyb2xsZXIoKV07Ci0gICAgICAgIFtfY3VycmVudEhpZ2hs
aWdodCBzZXREZWxlZ2F0ZTpzZWxmXTsKLSAgICAgICAgW19jdXJyZW50SGlnaGxpZ2h0IGF0dGFj
aF07Ci0gICAgfSBlbHNlCi0gICAgICAgIFtbX2N1cnJlbnRIaWdobGlnaHQgaGlnaGxpZ2h0Vmll
d10gc2V0TmVlZHNEaXNwbGF5OllFU107Ci19CisgICAgaWYgKF9kZXN0cm95aW5nSW5zcGVjdG9y
VmlldykKKyAgICAgICAgcmV0dXJuOworICAgIF9kZXN0cm95aW5nSW5zcGVjdG9yVmlldyA9IFlF
UzsKIAotLSAodm9pZCloaWRlSGlnaGxpZ2h0Ci17Ci0gICAgW19jdXJyZW50SGlnaGxpZ2h0IGRl
dGFjaF07Ci0gICAgW19jdXJyZW50SGlnaGxpZ2h0IHNldERlbGVnYXRlOm5pbF07Ci0gICAgW19j
dXJyZW50SGlnaGxpZ2h0IHJlbGVhc2VdOwotICAgIF9jdXJyZW50SGlnaGxpZ2h0ID0gbmlsOwor
ICAgIGlmIChfYXR0YWNoZWRUb0luc3BlY3RlZFdlYlZpZXcpCisgICAgICAgIFtzZWxmIGNsb3Nl
XTsKKyAgICBfdmlzaWJsZSA9IE5POworICAgIFtfaW5zcGVjdGVkV2ViVmlldyBwYWdlXS0+aW5z
cGVjdG9yQ29udHJvbGxlcigpLT5jbG9zZSgpOworICAgIFtfd2ViVmlldyBjbG9zZV07CiB9CiAK
ICNwcmFnbWEgbWFyayAtCkBAIC00OTcsMyArNDk5LDYwIEBAIHZvaWQgV2ViSW5zcGVjdG9yQ2xp
ZW50OjppbnNwZWN0b3JXaW5kb3dPYmplY3RDbGVhcmVkKCkKIH0KIAogQGVuZAorCisKKyNwcmFn
bWEgbWFyayAtCisKK0BpbXBsZW1lbnRhdGlvbiBXZWJOb2RlSGlnaGxpZ2h0ZXIKKy0gKGlkKWlu
aXRXaXRoSW5zcGVjdGVkV2ViVmlldzooV2ViVmlldyAqKXdlYlZpZXcKK3sKKyAgICAvLyBEb24n
dCByZXRhaW4gdG8gYXZvaWQgYSBjaXJjdWxhciByZWZlcmVuY2UKKyAgICBfaW5zcGVjdGVkV2Vi
VmlldyA9IHdlYlZpZXc7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYwor
eworICAgIEFTU0VSVCghX2N1cnJlbnRIaWdobGlnaHQpOworICAgIFtzdXBlciBkZWFsbG9jXTsK
K30KKworI3ByYWdtYSBtYXJrIC0KKworLSAodm9pZCloaWdobGlnaHROb2RlOihET01Ob2RlICop
bm9kZQoreworICAgIC8vIFRoZSBzY3JvbGx2aWV3J3MgY29udGVudCB2aWV3IHN0YXlzIGFyb3Vu
ZCBiZXR3ZWVuIHBhZ2UgbmF2aWdhdGlvbnMsIHNvIHRhcmdldCBpdAorICAgIE5TVmlldyAqdmll
dyA9IFtbW1tbX2luc3BlY3RlZFdlYlZpZXcgbWFpbkZyYW1lXSBmcmFtZVZpZXddIGRvY3VtZW50
Vmlld10gZW5jbG9zaW5nU2Nyb2xsVmlld10gY29udGVudFZpZXddOworICAgIGlmICghW3ZpZXcg
d2luZG93XSkKKyAgICAgICAgcmV0dXJuOyAvLyBza2lwIHRoZSBoaWdobGlnaHQgaWYgd2UgaGF2
ZSBubyB3aW5kb3cgKGUuZy4gaGlkZGVuIHRhYikKKyAgICAKKyAgICBpZiAoIV9jdXJyZW50SGln
aGxpZ2h0KSB7CisgICAgICAgIF9jdXJyZW50SGlnaGxpZ2h0ID0gW1tXZWJOb2RlSGlnaGxpZ2h0
IGFsbG9jXSBpbml0V2l0aFRhcmdldFZpZXc6dmlldyBpbnNwZWN0b3JDb250cm9sbGVyOltfaW5z
cGVjdGVkV2ViVmlldyBwYWdlXS0+aW5zcGVjdG9yQ29udHJvbGxlcigpXTsKKyAgICAgICAgW19j
dXJyZW50SGlnaGxpZ2h0IHNldERlbGVnYXRlOnNlbGZdOworICAgICAgICBbX2N1cnJlbnRIaWdo
bGlnaHQgYXR0YWNoXTsKKyAgICB9IGVsc2UKKyAgICAgICAgW1tfY3VycmVudEhpZ2hsaWdodCBo
aWdobGlnaHRWaWV3XSBzZXROZWVkc0Rpc3BsYXk6WUVTXTsKK30KKworLSAodm9pZCloaWRlSGln
aGxpZ2h0Cit7CisgICAgW19jdXJyZW50SGlnaGxpZ2h0IGRldGFjaF07CisgICAgW19jdXJyZW50
SGlnaGxpZ2h0IHNldERlbGVnYXRlOm5pbF07CisgICAgW19jdXJyZW50SGlnaGxpZ2h0IHJlbGVh
c2VdOworICAgIF9jdXJyZW50SGlnaGxpZ2h0ID0gbmlsOworfQorCisjcHJhZ21hIG1hcmsgLQor
I3ByYWdtYSBtYXJrIFdlYk5vZGVIaWdobGlnaHQgZGVsZWdhdGUKKworLSAodm9pZClkaWRBdHRh
Y2hXZWJOb2RlSGlnaGxpZ2h0OihXZWJOb2RlSGlnaGxpZ2h0ICopaGlnaGxpZ2h0Cit7CisgICAg
W19pbnNwZWN0ZWRXZWJWaWV3IHNldEN1cnJlbnROb2RlSGlnaGxpZ2h0OmhpZ2hsaWdodF07Cit9
CisKKy0gKHZvaWQpd2lsbERldGFjaFdlYk5vZGVIaWdobGlnaHQ6KFdlYk5vZGVIaWdobGlnaHQg
KiloaWdobGlnaHQKK3sKKyAgICBbX2luc3BlY3RlZFdlYlZpZXcgc2V0Q3VycmVudE5vZGVIaWdo
bGlnaHQ6bmlsXTsKK30KKyAgICAKK0BlbmQKZGlmZiAtLWdpdCBhL1dlYktpdC9tYWMvV2ViSW5z
cGVjdG9yL1dlYkluc3BlY3Rvci5tbSBiL1dlYktpdC9tYWMvV2ViSW5zcGVjdG9yL1dlYkluc3Bl
Y3Rvci5tbQppbmRleCAyNThkZDAxLi45YjE3NDU5IDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL1dl
Ykluc3BlY3Rvci9XZWJJbnNwZWN0b3IubW0KKysrIGIvV2ViS2l0L21hYy9XZWJJbnNwZWN0b3Iv
V2ViSW5zcGVjdG9yLm1tCkBAIC0xNzUsMTQgKzE3NSwxMCBAQCB1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKIAogLSAodm9pZClhdHRhY2g6KGlkKXNlbmRlcgogewotICAgIGlmIChQYWdlKiBwYWdl
ID0gY29yZShfd2ViVmlldykpCi0gICAgICAgIHBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+
YXR0YWNoV2luZG93KCk7CiB9CiAKIC0gKHZvaWQpZGV0YWNoOihpZClzZW5kZXIKIHsKLSAgICBp
ZiAoUGFnZSogcGFnZSA9IGNvcmUoX3dlYlZpZXcpKQotICAgICAgICBwYWdlLT5pbnNwZWN0b3JD
b250cm9sbGVyKCktPmRldGFjaFdpbmRvdygpOwogfQogCiAtICh2b2lkKWV2YWx1YXRlSW5Gcm9u
dGVuZDooaWQpc2VuZGVyIGNhbGxJZDoobG9uZyljYWxsSWQgc2NyaXB0OihOU1N0cmluZyAqKXNj
cmlwdApkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L0FwaS9xd2ViaW5zcGVjdG9yLmNwcCBiL1dlYktp
dC9xdC9BcGkvcXdlYmluc3BlY3Rvci5jcHAKaW5kZXggYzNlZjUzMC4uYzBlNTI3NyAxMDA2NDQK
LS0tIGEvV2ViS2l0L3F0L0FwaS9xd2ViaW5zcGVjdG9yLmNwcAorKysgYi9XZWJLaXQvcXQvQXBp
L3F3ZWJpbnNwZWN0b3IuY3BwCkBAIC0xNjEsNiArMTYxLDEwIEBAIHZvaWQgUVdlYkluc3BlY3Rv
cjo6c2hvd0V2ZW50KFFTaG93RXZlbnQqIGV2ZW50KQogLyohIFxyZWltcCAqLwogdm9pZCBRV2Vi
SW5zcGVjdG9yOjpoaWRlRXZlbnQoUUhpZGVFdmVudCogZXZlbnQpCiB7CisjaWYgRU5BQkxFKElO
U1BFQ1RPUikKKyAgICBpZiAoZC0+cGFnZSkKKyAgICAgICAgZC0+cGFnZS0+ZC0+aW5zcGVjdG9y
Q29udHJvbGxlcigpLT5jbG9zZSgpOworI2VuZGlmCiB9CiAKIC8qISBccmVpbXAgKi8KQEAgLTE2
OCw3ICsxNzIsNyBAQCB2b2lkIFFXZWJJbnNwZWN0b3I6OmNsb3NlRXZlbnQoUUNsb3NlRXZlbnQq
IGV2ZW50KQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAgICAgaWYgKGQtPnBhZ2UpCi0gICAg
ICAgIGQtPnBhZ2UtPmQtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0V2luZG93VmlzaWJsZShm
YWxzZSk7CisgICAgICAgIGQtPnBhZ2UtPmQtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+Y2xvc2Uo
KTsKICNlbmRpZgogfQogCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQXBpL3F3ZWJpbnNwZWN0b3Iu
aCBiL1dlYktpdC9xdC9BcGkvcXdlYmluc3BlY3Rvci5oCmluZGV4IDZjZGE0NzkuLmYxOTJlOTIg
MTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9BcGkvcXdlYmluc3BlY3Rvci5oCisrKyBiL1dlYktpdC9x
dC9BcGkvcXdlYmluc3BlY3Rvci5oCkBAIC01Miw1ICs1Miw2IEBAIHByaXZhdGU6CiAgICAgZnJp
ZW5kIGNsYXNzIFFXZWJQYWdlOwogICAgIGZyaWVuZCBjbGFzcyBRV2ViUGFnZVByaXZhdGU7CiAg
ICAgZnJpZW5kIGNsYXNzIFdlYkNvcmU6Okluc3BlY3RvckNsaWVudFF0OworICAgIGZyaWVuZCBj
bGFzcyBXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0OwogfTsKICNlbmRpZgpkaWZm
IC0tZ2l0IGEvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5oIGIvV2ViS2l0L3F0L0FwaS9xd2VicGFn
ZS5oCmluZGV4IDQ3NjZjYmQuLjA3NmZiN2MgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9BcGkvcXdl
YnBhZ2UuaAorKysgYi9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmgKQEAgLTU0LDYgKzU0LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEVkaXRvckNsaWVudFF0OwogICAgIGNsYXNz
IEZyYW1lTG9hZGVyQ2xpZW50UXQ7CiAgICAgY2xhc3MgSW5zcGVjdG9yQ2xpZW50UXQ7CisgICAg
Y2xhc3MgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdDsKICAgICBjbGFzcyBSZXNvdXJjZUhhbmRs
ZTsKICAgICBjbGFzcyBIaXRUZXN0UmVzdWx0OwogICAgIGNsYXNzIFFOZXR3b3JrUmVwbHlIYW5k
bGVyOwpAQCAtMzYxLDYgKzM2Miw3IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFdlYkNv
cmU6OkVkaXRvckNsaWVudFF0OwogICAgIGZyaWVuZCBjbGFzcyBXZWJDb3JlOjpGcmFtZUxvYWRl
ckNsaWVudFF0OwogICAgIGZyaWVuZCBjbGFzcyBXZWJDb3JlOjpJbnNwZWN0b3JDbGllbnRRdDsK
KyAgICBmcmllbmQgY2xhc3MgV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdDsKICAg
ICBmcmllbmQgY2xhc3MgV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU7CiAgICAgZnJpZW5kIGNsYXNz
IFdlYkNvcmU6OlFOZXR3b3JrUmVwbHlIYW5kbGVyOwogfTsKZGlmZiAtLWdpdCBhL1dlYktpdC9x
dC9DaGFuZ2VMb2cgYi9XZWJLaXQvcXQvQ2hhbmdlTG9nCmluZGV4IDRjMmY0ZTEuLjNkMDdhMWYg
MTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L3F0L0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDMyIEBACisyMDEwLTAzLTExICBZdXJ5IFNlbWlraGF0c2t5IDx5dXJ5c0Bj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgSW50cm9kdWNlIEluc3BlY3RvckZyb250ZW5kQ2xpZW50IHRoYXQgcHJvdmlkZXMgSW5z
cGVjdG9yRnJvbnRlbmQgd2l0aCBhbiBpbnRlcmZhY2UgdG8gdGhlIGVtYmVkZGVyLiBJbnNwZWN0
b3JDbGllbnQgbm93IHNlcnZlcyBhcyBhIGRlbGVnYXRlIGZvciBJbnNwZWN0b3JDb250cm9sbGVy
IGFuZCBkb2VzIG5vdCBjb250YWluIG1ldGhvZHMgZm9yIG1hbmFnaW5nIGluc3BlY3RvciBmcm9u
dGVuZCB3aW5kb3cuIFRoYXQgYWxsb3dzIHRvIGNyZWF0ZSByZW1vdGUgSW5zcGVjdG9yRnJvbnRl
bmRIb3N0LgorCisgICAgICAgIEludHJvZHVjZSBJbnNwZWN0b3JGcm9udGVuZENsaWVudCB0aGF0
IHdvdWxkIHByb3ZpZGUgSW5zcGVjdG9yRnJvbnRlbmQgd2l0aCBhbiBpbnRlcmZhY2UgdG8gdGhl
IGVtYmVkZGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0zNTAzNgorCisgICAgICAgICogQXBpL3F3ZWJpbnNwZWN0b3IuY3BwOgorICAgICAgICAoUVdl
Ykluc3BlY3Rvcjo6aGlkZUV2ZW50KToKKyAgICAgICAgKFFXZWJJbnNwZWN0b3I6OmNsb3NlRXZl
bnQpOgorICAgICAgICAqIEFwaS9xd2ViaW5zcGVjdG9yLmg6CisgICAgICAgICogQXBpL3F3ZWJw
YWdlLmg6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50UXQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2xpZW50UXQ6Om9wZW5JbnNwZWN0b3JGcm9udGVu
ZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0OjpJbnNwZWN0
b3JGcm9udGVuZENsaWVudFF0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5k
Q2xpZW50UXQ6OmZyb250ZW5kTG9hZGVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZy
b250ZW5kQ2xpZW50UXQ6OmxvY2FsaXplZFN0cmluZ3NVUkwpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdDo6aGlkZGVuUGFuZWxzKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50UXQ6OmJyaW5nVG9Gcm9udCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0OjpjbG9zZVdpbmRvdyk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0OjphdHRhY2hXaW5kb3cpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdDo6ZGV0YWNoV2luZG93KToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50UXQ6OnNldEF0dGFjaGVk
V2luZG93SGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50
UXQ6Omluc3BlY3RlZFVSTENoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJv
bnRlbmRDbGllbnRRdDo6dXBkYXRlV2luZG93VGl0bGUpOgorICAgICAgICAqIFdlYkNvcmVTdXBw
b3J0L0luc3BlY3RvckNsaWVudFF0Lmg6CisKIDIwMTAtMDMtMTAgIFJvYmVydCBIb2dhbiAgPHJv
YmVydEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEhhdXNtYW5uLgpk
aWZmIC0tZ2l0IGEvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudFF0LmNw
cCBiL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRRdC5jcHAKaW5kZXgg
Y2RlNjRjOC4uY2E5ZjE3MSAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0lu
c3BlY3RvckNsaWVudFF0LmNwcAorKysgYi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5zcGVj
dG9yQ2xpZW50UXQuY3BwCkBAIC04MSwxNSArODEsMTIgQEAgdm9pZCBJbnNwZWN0b3JDbGllbnRR
dDo6aW5zcGVjdG9yRGVzdHJveWVkKCkKICAgICBkZWxldGUgdGhpczsKIH0KIAotUGFnZSogSW5z
cGVjdG9yQ2xpZW50UXQ6OmNyZWF0ZVBhZ2UoKQotewotICAgIFFXZWJWaWV3KiBpbnNwZWN0b3JW
aWV3ID0gbV9pbnNwZWN0b3JWaWV3LmdldCgpOwotICAgIGlmICghaW5zcGVjdG9yVmlldykgewot
ICAgICAgICBpbnNwZWN0b3JWaWV3ID0gbmV3IFFXZWJWaWV3OwotICAgICAgICBJbnNwZWN0b3JD
bGllbnRXZWJQYWdlKiBpbnNwZWN0b3JQYWdlID0gbmV3IEluc3BlY3RvckNsaWVudFdlYlBhZ2Uo
aW5zcGVjdG9yVmlldyk7Ci0gICAgICAgIGluc3BlY3RvclZpZXctPnNldFBhZ2UoaW5zcGVjdG9y
UGFnZSk7Ci0gICAgICAgIG1faW5zcGVjdG9yVmlldy5zZXQoaW5zcGVjdG9yVmlldyk7Ci0gICAg
fQorICAgIAordm9pZCBJbnNwZWN0b3JDbGllbnRRdDo6b3Blbkluc3BlY3RvckZyb250ZW5kKFdl
YkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXIqKQoreworICAgIFFXZWJWaWV3KiBpbnNwZWN0b3JW
aWV3ID0gbmV3IFFXZWJWaWV3OworICAgIEluc3BlY3RvckNsaWVudFdlYlBhZ2UqIGluc3BlY3Rv
clBhZ2UgPSBuZXcgSW5zcGVjdG9yQ2xpZW50V2ViUGFnZShpbnNwZWN0b3JWaWV3KTsKKyAgICBp
bnNwZWN0b3JWaWV3LT5zZXRQYWdlKGluc3BlY3RvclBhZ2UpOwogCiAgICAgUVVybCBpbnNwZWN0
b3JVcmwgPSBtX2luc3BlY3RlZFdlYlBhZ2UtPnNldHRpbmdzKCktPmluc3BlY3RvclVybCgpOwog
ICAgIGlmICghaW5zcGVjdG9yVXJsLmlzVmFsaWQoKSkKQEAgLTk4LDUwICs5NSw3IEBAIFBhZ2Uq
IEluc3BlY3RvckNsaWVudFF0OjpjcmVhdGVQYWdlKCkKICAgICBtX2luc3BlY3RlZFdlYlBhZ2Ut
PmQtPmluc3BlY3RvckZyb250ZW5kID0gaW5zcGVjdG9yVmlldzsKICAgICBtX2luc3BlY3RlZFdl
YlBhZ2UtPmQtPmdldE9yQ3JlYXRlSW5zcGVjdG9yKCktPmQtPnNldEZyb250ZW5kKGluc3BlY3Rv
clZpZXcpOwogCi0gICAgcmV0dXJuIGluc3BlY3RvclZpZXctPnBhZ2UoKS0+ZC0+cGFnZTsKLX0K
LQotU3RyaW5nIEluc3BlY3RvckNsaWVudFF0Ojpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotU3RyaW5nIElu
c3BlY3RvckNsaWVudFF0OjpoaWRkZW5QYW5lbHMoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi12b2lkIEluc3BlY3RvckNsaWVudFF0OjpzaG93
V2luZG93KCkKLXsKLSAgICB1cGRhdGVXaW5kb3dUaXRsZSgpOwotCi0jaWYgRU5BQkxFKElOU1BF
Q1RPUikKLSAgICBtX2luc3BlY3RlZFdlYlBhZ2UtPmQtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+
c2V0V2luZG93VmlzaWJsZSh0cnVlLCB0cnVlKTsKLSNlbmRpZgotfQotCi12b2lkIEluc3BlY3Rv
ckNsaWVudFF0OjpjbG9zZVdpbmRvdygpCi17Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBt
X2luc3BlY3RlZFdlYlBhZ2UtPmQtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0V2luZG93Vmlz
aWJsZShmYWxzZSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBJbnNwZWN0b3JDbGllbnRRdDo6YXR0YWNo
V2luZG93KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEluc3BlY3RvckNs
aWVudFF0OjpkZXRhY2hXaW5kb3coKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZv
aWQgSW5zcGVjdG9yQ2xpZW50UXQ6OnNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgaW5zcGVjdG9yVmlldy0+cGFnZSgpLT5kLT5w
YWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnNldEluc3BlY3RvckZyb250ZW5kQ2xpZW50KG5l
dyBJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0KG1faW5zcGVjdGVkV2ViUGFnZSwgaW5zcGVjdG9y
VmlldykpOwogfQogCiB2b2lkIEluc3BlY3RvckNsaWVudFF0OjpoaWdobGlnaHQoTm9kZSopCkBA
IC0xNTQsMjUgKzEwOCw2IEBAIHZvaWQgSW5zcGVjdG9yQ2xpZW50UXQ6OmhpZGVIaWdobGlnaHQo
KQogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ2xpZW50UXQ6Omlu
c3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJiBuZXdVUkwpCi17Ci0gICAgbV9pbnNwZWN0
ZWRVUkwgPSBuZXdVUkw7Ci0gICAgdXBkYXRlV2luZG93VGl0bGUoKTsKLX0KLQotdm9pZCBJbnNw
ZWN0b3JDbGllbnRRdDo6aW5zcGVjdG9yV2luZG93T2JqZWN0Q2xlYXJlZCgpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDbGllbnRRdDo6dXBkYXRlV2luZG93
VGl0bGUoKQotewotICAgIGlmIChtX2luc3BlY3RlZFdlYlBhZ2UtPmQtPmluc3BlY3Rvcikgewot
ICAgICAgICBRU3RyaW5nIGNhcHRpb24gPSBRQ29yZUFwcGxpY2F0aW9uOjp0cmFuc2xhdGUoIlFX
ZWJQYWdlIiwgIldlYiBJbnNwZWN0b3IgLSAlMiIpLmFyZyhtX2luc3BlY3RlZFVSTCk7Ci0gICAg
ICAgIG1faW5zcGVjdGVkV2ViUGFnZS0+ZC0+aW5zcGVjdG9yLT5zZXRXaW5kb3dUaXRsZShjYXB0
aW9uKTsKLSAgICB9Ci19Ci0KIHZvaWQgSW5zcGVjdG9yQ2xpZW50UXQ6OnBvcHVsYXRlU2V0dGlu
Zyhjb25zdCBTdHJpbmcmIGtleSwgU3RyaW5nKiBzZXR0aW5nKQogewogICAgIFFTZXR0aW5ncyBx
c2V0dGluZ3M7CkBAIC0yMjYsNiArMTYxLDgxIEBAIHN0YXRpYyBRVmFyaWFudCBzZXR0aW5nVG9W
YXJpYW50KGNvbnN0IFN0cmluZyYgc2V0dGluZykKICAgICByZXR1cm4gcmV0VmFsOwogfQogCitJ
bnNwZWN0b3JGcm9udGVuZENsaWVudFF0OjpJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0KFFXZWJQ
YWdlKiBpbnNwZWN0ZWRXZWJQYWdlLCBQYXNzT3duUHRyPFFXZWJWaWV3PiBpbnNwZWN0b3JWaWV3
KQorICAgIDogSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbChpbnNwZWN0ZWRXZWJQYWdlLT5k
LT5wYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCksIGluc3BlY3RvclZpZXctPnBhZ2UoKS0+ZC0+
cGFnZSkgCisgICAgLCBtX2luc3BlY3RlZFdlYlBhZ2UoaW5zcGVjdGVkV2ViUGFnZSkKKyAgICAs
IG1faW5zcGVjdG9yVmlldyhpbnNwZWN0b3JWaWV3KQorICAgICwgbV9kZXN0cm95aW5nSW5zcGVj
dG9yVmlldyhmYWxzZSkKK3sKK30KKwordm9pZCBJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0Ojpm
cm9udGVuZExvYWRlZCgpCit7CisgICAgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6ZnJv
bnRlbmRMb2FkZWQoKTsKKyAgICBzZXRBdHRhY2hlZFdpbmRvdyh0cnVlKTsKK30KKworU3RyaW5n
IEluc3BlY3RvckZyb250ZW5kQ2xpZW50UXQ6OmxvY2FsaXplZFN0cmluZ3NVUkwoKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitTdHJpbmcgSW5z
cGVjdG9yRnJvbnRlbmRDbGllbnRRdDo6aGlkZGVuUGFuZWxzKCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKwordm9pZCBJbnNwZWN0b3JGcm9udGVu
ZENsaWVudFF0OjpicmluZ1RvRnJvbnQoKQoreworICAgIHVwZGF0ZVdpbmRvd1RpdGxlKCk7Cit9
CisKK3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdDo6Y2xvc2VXaW5kb3coKQoreworICAg
IGlmIChtX2Rlc3Ryb3lpbmdJbnNwZWN0b3JWaWV3KQorICAgICAgICByZXR1cm47CisgICAgbV9k
ZXN0cm95aW5nSW5zcGVjdG9yVmlldyA9IHRydWU7CisKKyAgICAvLyBDbGVhciByZWZlcmVuY2Ug
ZnJvbSBRV2ViSW5zcGVjdG9yIHRvIHRoZSBmcm9udGVuZCB2aWV3LgorICAgIG1faW5zcGVjdGVk
V2ViUGFnZS0+ZC0+Z2V0T3JDcmVhdGVJbnNwZWN0b3IoKS0+ZC0+c2V0RnJvbnRlbmQoMCk7Cisj
aWYgRU5BQkxFKElOU1BFQ1RPUikKKyAgICBtX2luc3BlY3RlZFdlYlBhZ2UtPmQtPmluc3BlY3Rv
ckNvbnRyb2xsZXIoKS0+Y2xvc2UoKTsKKyNlbmRpZgorICAgIC8vIENsZWFyIHBvaW50ZXIgYmVm
b3JlIGRlbGV0aW5nIFdlYlZpZXcgdG8gYXZvaWQgcmVjdXJzaXZlIGNhbGxzIHRvIGl0cyBkZXN0
cnVjdG9yLgorICAgIGRlbGV0ZSBtX2luc3BlY3RvclZpZXcucmVsZWFzZSgpOworfQorCit2b2lk
IEluc3BlY3RvckZyb250ZW5kQ2xpZW50UXQ6OmF0dGFjaFdpbmRvdygpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKwordm9pZCBJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0OjpkZXRhY2hX
aW5kb3coKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yRnJv
bnRlbmRDbGllbnRRdDo6c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0Ojpp
bnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYgbmV3VVJMKQoreworICAgIG1faW5zcGVj
dGVkVVJMID0gbmV3VVJMOworICAgIHVwZGF0ZVdpbmRvd1RpdGxlKCk7Cit9CisKK3ZvaWQgSW5z
cGVjdG9yRnJvbnRlbmRDbGllbnRRdDo6dXBkYXRlV2luZG93VGl0bGUoKQoreworICAgIGlmICht
X2luc3BlY3RlZFdlYlBhZ2UtPmQtPmluc3BlY3RvcikgeworICAgICAgICBRU3RyaW5nIGNhcHRp
b24gPSBRQ29yZUFwcGxpY2F0aW9uOjp0cmFuc2xhdGUoIlFXZWJQYWdlIiwgIldlYiBJbnNwZWN0
b3IgLSAlMiIpLmFyZyhtX2luc3BlY3RlZFVSTCk7CisgICAgICAgIG1faW5zcGVjdGVkV2ViUGFn
ZS0+ZC0+aW5zcGVjdG9yLT5zZXRXaW5kb3dUaXRsZShjYXB0aW9uKTsKKyAgICB9Cit9CisKIH0K
IAogI2luY2x1ZGUgIkluc3BlY3RvckNsaWVudFF0Lm1vYyIKZGlmZiAtLWdpdCBhL1dlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRRdC5oIGIvV2ViS2l0L3F0L1dlYkNvcmVT
dXBwb3J0L0luc3BlY3RvckNsaWVudFF0LmgKaW5kZXggYzk1NDhiMC4uNGJlYWRhYiAxMDA2NDQK
LS0tIGEvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudFF0LmgKKysrIGIv
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudFF0LmgKQEAgLTMxLDcgKzMx
LDkgQEAKICNkZWZpbmUgSW5zcGVjdG9yQ2xpZW50UXRfaAogCiAjaW5jbHVkZSAiSW5zcGVjdG9y
Q2xpZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5oIgogI2lu
Y2x1ZGUgIk93blB0ci5oIgorI2luY2x1ZGUgIlBhc3NPd25QdHIuaCIKICNpbmNsdWRlIDxRdENv
cmUvUVN0cmluZz4KIAogY2xhc3MgUVdlYlBhZ2U7CkBAIC00OCwxMyArNTAsMjkgQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCB2b2lkIGluc3BlY3RvckRlc3Ryb3llZCgpOwogCi0gICAgdmlydHVh
bCBQYWdlKiBjcmVhdGVQYWdlKCk7CisgICAgdmlydHVhbCB2b2lkIG9wZW5JbnNwZWN0b3JGcm9u
dGVuZChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyKik7CisKKyAgICB2aXJ0dWFsIHZvaWQg
aGlnaGxpZ2h0KE5vZGUqKTsKKyAgICB2aXJ0dWFsIHZvaWQgaGlkZUhpZ2hsaWdodCgpOworCisg
ICAgdmlydHVhbCB2b2lkIHBvcHVsYXRlU2V0dGluZyhjb25zdCBTdHJpbmcmIGtleSwgU3RyaW5n
KiB2YWx1ZSk7CisgICAgdmlydHVhbCB2b2lkIHN0b3JlU2V0dGluZyhjb25zdCBTdHJpbmcmIGtl
eSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisKK3ByaXZhdGU6CisgICAgUVdlYlBhZ2UqIG1faW5z
cGVjdGVkV2ViUGFnZTsKK307CisKK2NsYXNzIEluc3BlY3RvckZyb250ZW5kQ2xpZW50UXQgOiBw
dWJsaWMgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbCB7CitwdWJsaWM6CisgICAgSW5zcGVj
dG9yRnJvbnRlbmRDbGllbnRRdChRV2ViUGFnZSogaW5zcGVjdGVkV2ViUGFnZSwgUGFzc093blB0
cjxRV2ViVmlldz4gaW5zcGVjdG9yVmlldyk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZnJvbnRlbmRM
b2FkZWQoKTsKIAogICAgIHZpcnR1YWwgU3RyaW5nIGxvY2FsaXplZFN0cmluZ3NVUkwoKTsKIAog
ICAgIHZpcnR1YWwgU3RyaW5nIGhpZGRlblBhbmVscygpOwogCi0gICAgdmlydHVhbCB2b2lkIHNo
b3dXaW5kb3coKTsKKyAgICB2aXJ0dWFsIHZvaWQgYnJpbmdUb0Zyb250KCk7CiAgICAgdmlydHVh
bCB2b2lkIGNsb3NlV2luZG93KCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoV2luZG93KCk7
CkBAIC02MiwyMCArODAsMTQgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHNldEF0dGFj
aGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgaGln
aGxpZ2h0KE5vZGUqKTsKLSAgICB2aXJ0dWFsIHZvaWQgaGlkZUhpZ2hsaWdodCgpOwogICAgIHZp
cnR1YWwgdm9pZCBpbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYgbmV3VVJMKTsKIAot
ICAgIHZpcnR1YWwgdm9pZCBwb3B1bGF0ZVNldHRpbmcoY29uc3QgU3RyaW5nJiBrZXksIFN0cmlu
ZyogdmFsdWUpOwotICAgIHZpcnR1YWwgdm9pZCBzdG9yZVNldHRpbmcoY29uc3QgU3RyaW5nJiBr
ZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpOwotCi0gICAgdmlydHVhbCB2b2lkIGluc3BlY3Rvcldp
bmRvd09iamVjdENsZWFyZWQoKTsKLQogcHJpdmF0ZToKICAgICB2b2lkIHVwZGF0ZVdpbmRvd1Rp
dGxlKCk7CiAgICAgUVdlYlBhZ2UqIG1faW5zcGVjdGVkV2ViUGFnZTsKICAgICBPd25QdHI8UVdl
YlZpZXc+IG1faW5zcGVjdG9yVmlldzsKICAgICBRU3RyaW5nIG1faW5zcGVjdGVkVVJMOworICAg
IGJvb2wgbV9kZXN0cm95aW5nSW5zcGVjdG9yVmlldzsKIH07CiB9CiAKZGlmZiAtLWdpdCBhL1dl
YktpdC93aW4vQ2hhbmdlTG9nIGIvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKaW5kZXggYzkyN2QyYS4u
NmJlNDUxYSAxMDA2NDQKLS0tIGEvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L3dp
bi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NyBAQAorMjAxMC0wMy0xMSAgWXVyeSBTZW1pa2hhdHNr
eSA8eXVyeXNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEludHJvZHVjZSBJbnNwZWN0b3JGcm9udGVuZENsaWVudCB0aGF0IHBy
b3ZpZGVzIEluc3BlY3RvckZyb250ZW5kIHdpdGggYW4gaW50ZXJmYWNlIHRvIHRoZSBlbWJlZGRl
ci4gSW5zcGVjdG9yQ2xpZW50IG5vdyBzZXJ2ZXMgYXMgYSBkZWxlZ2F0ZSBmb3IgSW5zcGVjdG9y
Q29udHJvbGxlciBhbmQgZG9lcyBub3QgY29udGFpbiBtZXRob2RzIGZvciBtYW5hZ2luZyBpbnNw
ZWN0b3IgZnJvbnRlbmQgd2luZG93LiBUaGF0IGFsbG93cyB0byBjcmVhdGUgcmVtb3RlIEluc3Bl
Y3RvckZyb250ZW5kSG9zdC4KKworICAgICAgICBJbnRyb2R1Y2UgSW5zcGVjdG9yRnJvbnRlbmRD
bGllbnQgdGhhdCB3b3VsZCBwcm92aWRlIEluc3BlY3RvckZyb250ZW5kIHdpdGggYW4gaW50ZXJm
YWNlIHRvIHRoZSBlbWJlZGRlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MzUwMzYKKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3Rv
ckNsaWVudC5jcHA6CisgICAgICAgIChXZWJJbnNwZWN0b3JDbGllbnQ6OldlYkluc3BlY3RvckNs
aWVudCk6CisgICAgICAgIChXZWJJbnNwZWN0b3JDbGllbnQ6On5XZWJJbnNwZWN0b3JDbGllbnQp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yQ2xpZW50OjpvcGVuSW5zcGVjdG9yRnJvbnRlbmQpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yQ2xpZW50OjpoaWdobGlnaHQpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yQ2xpZW50OjpoaWRlSGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYkluc3BlY3RvckNsaWVu
dDo6dXBkYXRlSGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50
OjpXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudCk6CisgICAgICAgIChXZWJJbnNwZWN0b3JGcm9u
dGVuZENsaWVudDo6fldlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50KToKKyAgICAgICAgKFdlYklu
c3BlY3RvckZyb250ZW5kQ2xpZW50Ojpmcm9udGVuZExvYWRlZCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3JGcm9udGVuZENsaWVudDo6bG9jYWxpemVkU3RyaW5nc1VSTCk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3JGcm9udGVuZENsaWVudDo6aGlkZGVuUGFuZWxzKToKKyAgICAgICAgKFdlYkluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50OjpicmluZ1RvRnJvbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
RnJvbnRlbmRDbGllbnQ6OmNsb3NlV2luZG93KToKKyAgICAgICAgKFdlYkluc3BlY3RvckZyb250
ZW5kQ2xpZW50OjphdHRhY2hXaW5kb3cpOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRD
bGllbnQ6OmRldGFjaFdpbmRvdyk6CisgICAgICAgIChXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVu
dDo6c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRl
bmRDbGllbnQ6Omluc3BlY3RlZFVSTENoYW5nZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJv
bnRlbmRDbGllbnQ6OmNsb3NlV2luZG93V2l0aG91dE5vdGlmaWNhdGlvbnMpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OnNob3dXaW5kb3dXaXRob3V0Tm90aWZpY2F0aW9u
cyk6CisgICAgICAgIChXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6ZGVzdHJveUluc3BlY3Rv
clZpZXcpOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OnVwZGF0ZVdpbmRv
d1RpdGxlKToKKyAgICAgICAgKFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpvbkdldE1pbk1h
eEluZm8pOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6Om9uU2l6ZSk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6b25DbG9zZSk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6b25TZXRGb2N1cyk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3JGcm9udGVuZENsaWVudDo6b25XZWJWaWV3V2luZG93UG9zQ2hhbmdpbmcpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yV25kUHJvYyk6CisgICAgICAgIChXZWJJbnNwZWN0b3JGcm9udGVuZENs
aWVudDo6d2luZG93UmVjZWl2ZWRNZXNzYWdlKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9X
ZWJJbnNwZWN0b3JDbGllbnQuaDoKKyAgICAgICAgKFdlYkluc3BlY3RvckNsaWVudDo6ZnJvbnRl
bmRDbG9zaW5nKToKKyAgICAgICAgKiBXZWJJbnNwZWN0b3IuY3BwOgorICAgICAgICAoV2ViSW5z
cGVjdG9yOjphdHRhY2gpOgorICAgICAgICAoV2ViSW5zcGVjdG9yOjpkZXRhY2gpOgorCiAyMDEw
LTAzLTEwICBFcmljIFVocmhhbmUgIDxlcmljdUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgRGF2aWQgTGV2aW4uCmRpZmYgLS1naXQgYS9XZWJLaXQvd2luL1dlYkNvcmVTdXBw
b3J0L1dlYkluc3BlY3RvckNsaWVudC5jcHAgYi9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dl
Ykluc3BlY3RvckNsaWVudC5jcHAKaW5kZXggNmExMGMwZC4uNWFkYmZkZiAxMDA2NDQKLS0tIGEv
V2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuY3BwCisrKyBiL1dl
YktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcApAQCAtNjksMjUg
KzY5LDEzIEBAIHN0YXRpYyBDRkJ1bmRsZVJlZiBnZXRXZWJLaXRCdW5kbGUoKQogCiBXZWJJbnNw
ZWN0b3JDbGllbnQ6OldlYkluc3BlY3RvckNsaWVudChXZWJWaWV3KiB3ZWJWaWV3KQogICAgIDog
bV9pbnNwZWN0ZWRXZWJWaWV3KHdlYlZpZXcpCi0gICAgLCBtX2h3bmQoMCkKLSAgICAsIG1fd2Vi
Vmlld0h3bmQoMCkKLSAgICAsIG1fc2hvdWxkQXR0YWNoV2hlblNob3duKGZhbHNlKQotICAgICwg
bV9hdHRhY2hlZChmYWxzZSkKIHsKICAgICBBU1NFUlQobV9pbnNwZWN0ZWRXZWJWaWV3KTsKLQog
ICAgIG1faW5zcGVjdGVkV2ViVmlldy0+dmlld1dpbmRvdygoT0xFX0hBTkRMRSopJm1faW5zcGVj
dGVkV2ViVmlld0h3bmQpOwotCi0gICAgLy8gRklYTUU6IEltcGxlbWVudCB3aW5kb3cgc2l6ZS9w
b3NpdGlvbiBzYXZlL3Jlc3RvcmUKLSNpZiAwCi0gICAgW3NlbGYgc2V0V2luZG93RnJhbWVBdXRv
c2F2ZU5hbWU6QCJXZWIgSW5zcGVjdG9yIl07Ci0jZW5kaWYKIH0KIAogV2ViSW5zcGVjdG9yQ2xp
ZW50Ojp+V2ViSW5zcGVjdG9yQ2xpZW50KCkKIHsKLSAgICBpZiAobV9od25kKQotICAgICAgICA6
OkRlc3Ryb3lXaW5kb3cobV9od25kKTsKIH0KIAogdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6Omlu
c3BlY3RvckRlc3Ryb3llZCgpCkBAIC05NSwzNSArODMsMzAgQEAgdm9pZCBXZWJJbnNwZWN0b3JD
bGllbnQ6Omluc3BlY3RvckRlc3Ryb3llZCgpCiAgICAgZGVsZXRlIHRoaXM7CiB9CiAKLVBhZ2Uq
IFdlYkluc3BlY3RvckNsaWVudDo6Y3JlYXRlUGFnZSgpCit2b2lkIFdlYkluc3BlY3RvckNsaWVu
dDo6b3Blbkluc3BlY3RvckZyb250ZW5kKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNv
bnRyb2xsZXIpCiB7CiAgICAgcmVnaXN0ZXJXaW5kb3dDbGFzcygpOwogCi0gICAgaWYgKG1faHdu
ZCkKLSAgICAgICAgOjpEZXN0cm95V2luZG93KG1faHduZCk7Ci0KLSAgICBtX2h3bmQgPSA6OkNy
ZWF0ZVdpbmRvd0V4KDAsIGtXZWJJbnNwZWN0b3JXaW5kb3dDbGFzc05hbWUsIDAsIFdTX09WRVJM
QVBQRURXSU5ET1csCisgICAgSFdORCBmcm9udGVuZEh3bmQgPSA6OkNyZWF0ZVdpbmRvd0V4KDAs
IGtXZWJJbnNwZWN0b3JXaW5kb3dDbGFzc05hbWUsIDAsIFdTX09WRVJMQVBQRURXSU5ET1csCiAg
ICAgICAgIGRlZmF1bHRXaW5kb3dSZWN0KCkueCgpLCBkZWZhdWx0V2luZG93UmVjdCgpLnkoKSwg
ZGVmYXVsdFdpbmRvd1JlY3QoKS53aWR0aCgpLCBkZWZhdWx0V2luZG93UmVjdCgpLmhlaWdodCgp
LAogICAgICAgICAwLCAwLCAwLCAwKTsKIAotICAgIGlmICghbV9od25kKQotICAgICAgICByZXR1
cm4gMDsKLQotICAgIDo6U2V0UHJvcChtX2h3bmQsIGtXZWJJbnNwZWN0b3JQb2ludGVyUHJvcCwg
cmVpbnRlcnByZXRfY2FzdDxIQU5ETEU+KHRoaXMpKTsKKyAgICBpZiAoIWZyb250ZW5kSHduZCkK
KyAgICAgICAgcmV0dXJuOwogCi0gICAgbV93ZWJWaWV3LmFkb3B0UmVmKFdlYlZpZXc6OmNyZWF0
ZUluc3RhbmNlKCkpOworICAgIENPTVB0cjxXZWJWaWV3PiBmcm9udGVuZFdlYlZpZXcoQWRvcHRD
T00sIFdlYlZpZXc6OmNyZWF0ZUluc3RhbmNlKCkpOwogCi0gICAgaWYgKEZBSUxFRChtX3dlYlZp
ZXctPnNldEhvc3RXaW5kb3coKE9MRV9IQU5ETEUpKFVMT05HNjQpbV9od25kKSkpCi0gICAgICAg
IHJldHVybiAwOworICAgIGlmIChGQUlMRUQoZnJvbnRlbmRXZWJWaWV3LT5zZXRIb3N0V2luZG93
KChPTEVfSEFORExFKShVTE9ORzY0KWZyb250ZW5kSHduZCkpKQorICAgICAgICByZXR1cm47CiAK
ICAgICBSRUNUIHJlY3Q7Ci0gICAgR2V0Q2xpZW50UmVjdChtX2h3bmQsICZyZWN0KTsKLSAgICBp
ZiAoRkFJTEVEKG1fd2ViVmlldy0+aW5pdFdpdGhGcmFtZShyZWN0LCAwLCAwKSkpCi0gICAgICAg
IHJldHVybiAwOworICAgIEdldENsaWVudFJlY3QoZnJvbnRlbmRId25kLCAmcmVjdCk7CisgICAg
aWYgKEZBSUxFRChmcm9udGVuZFdlYlZpZXctPmluaXRXaXRoRnJhbWUocmVjdCwgMCwgMCkpKQor
ICAgICAgICByZXR1cm47CiAKICAgICBDT01QdHI8V2ViSW5zcGVjdG9yRGVsZWdhdGU+IGRlbGVn
YXRlKEFkb3B0Q09NLCBXZWJJbnNwZWN0b3JEZWxlZ2F0ZTo6Y3JlYXRlSW5zdGFuY2UoKSk7Ci0g
ICAgaWYgKEZBSUxFRChtX3dlYlZpZXctPnNldFVJRGVsZWdhdGUoZGVsZWdhdGUuZ2V0KCkpKSkK
LSAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKEZBSUxFRChmcm9udGVuZFdlYlZpZXctPnNldFVJ
RGVsZWdhdGUoZGVsZWdhdGUuZ2V0KCkpKSkKKyAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gS2Vl
cCBwcmVmZXJlbmNlcyBzZXBhcmF0ZSBmcm9tIHRoZSByZXN0IG9mIHRoZSBjbGllbnQsIG1ha2lu
ZyBzdXJlIHdlIGFyZSB1c2luZyBleHBlY3RlZCBwcmVmZXJlbmNlIHZhbHVlcy4KICAgICAvLyBP
bmUgcmVhc29uIHRoaXMgaXMgZ29vZCBpcyB0aGF0IGl0IGtlZXBzIHRoZSBpbnNwZWN0b3Igb3V0
IG9mIGhpc3RvcnkgdmlhICJwcml2YXRlIGJyb3dzaW5nIi4KQEAgLTEzNCw2NiArMTE3LDEyNiBA
QCBQYWdlKiBXZWJJbnNwZWN0b3JDbGllbnQ6OmNyZWF0ZVBhZ2UoKQogICAgIENPTVB0cjxXZWJQ
cmVmZXJlbmNlcz4gdGVtcFByZWZlcmVuY2VzKEFkb3B0Q09NLCBXZWJQcmVmZXJlbmNlczo6Y3Jl
YXRlSW5zdGFuY2UoKSk7CiAgICAgQ09NUHRyPElXZWJQcmVmZXJlbmNlcz4gaVByZWZlcmVuY2Vz
OwogICAgIGlmIChGQUlMRUQodGVtcFByZWZlcmVuY2VzLT5pbml0V2l0aElkZW50aWZpZXIoQlN0
cmluZyhMIldlYkluc3BlY3RvclByZWZlcmVuY2VzIiksICZpUHJlZmVyZW5jZXMpKSkKLSAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybjsKICAgICBDT01QdHI8V2ViUHJlZmVyZW5jZXM+
IHByZWZlcmVuY2VzKFF1ZXJ5LCBpUHJlZmVyZW5jZXMpOwogICAgIGlmICghcHJlZmVyZW5jZXMp
Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm47CiAgICAgaWYgKEZBSUxFRChwcmVm
ZXJlbmNlcy0+c2V0QXV0b3NhdmVzKEZBTFNFKSkpCi0gICAgICAgIHJldHVybiAwOworICAgICAg
ICByZXR1cm47CiAgICAgaWYgKEZBSUxFRChwcmVmZXJlbmNlcy0+c2V0UHJpdmF0ZUJyb3dzaW5n
RW5hYmxlZChUUlVFKSkpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm47CiAgICAg
aWYgKEZBSUxFRChwcmVmZXJlbmNlcy0+c2V0TG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5KFRSVUUp
KSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybjsKICAgICBpZiAoRkFJTEVEKHBy
ZWZlcmVuY2VzLT5zZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZChUUlVFKSkpCi0gICAgICAg
IHJldHVybiAwOworICAgICAgICByZXR1cm47CiAgICAgaWYgKEZBSUxFRChwcmVmZXJlbmNlcy0+
c2V0QWxsb3dzQW5pbWF0ZWRJbWFnZXMoVFJVRSkpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgcmV0dXJuOwogICAgIGlmIChGQUlMRUQocHJlZmVyZW5jZXMtPnNldExvYWRzSW1hZ2VzQXV0
b21hdGljYWxseShUUlVFKSkpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm47CiAg
ICAgaWYgKEZBSUxFRChwcmVmZXJlbmNlcy0+c2V0UGx1Z0luc0VuYWJsZWQoRkFMU0UpKSkKLSAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybjsKICAgICBpZiAoRkFJTEVEKHByZWZlcmVu
Y2VzLT5zZXRKYXZhRW5hYmxlZChGQUxTRSkpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
cmV0dXJuOwogICAgIGlmIChGQUlMRUQocHJlZmVyZW5jZXMtPnNldFVzZXJTdHlsZVNoZWV0RW5h
YmxlZChGQUxTRSkpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuOwogICAgIGlm
IChGQUlMRUQocHJlZmVyZW5jZXMtPnNldFRhYnNUb0xpbmtzKEZBTFNFKSkpCi0gICAgICAgIHJl
dHVybiAwOworICAgICAgICByZXR1cm47CiAgICAgaWYgKEZBSUxFRChwcmVmZXJlbmNlcy0+c2V0
TWluaW11bUZvbnRTaXplKDApKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybjsK
ICAgICBpZiAoRkFJTEVEKHByZWZlcmVuY2VzLT5zZXRNaW5pbXVtTG9naWNhbEZvbnRTaXplKDkp
KSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybjsKICAgICBpZiAoRkFJTEVEKHBy
ZWZlcmVuY2VzLT5zZXRGaXhlZEZvbnRGYW1pbHkoQlN0cmluZyhMIkNvdXJpZXIgTmV3IikpKSkK
LSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybjsKICAgICBpZiAoRkFJTEVEKHByZWZl
cmVuY2VzLT5zZXREZWZhdWx0Rml4ZWRGb250U2l6ZSgxMykpKQotICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKEZBSUxFRChtX3dlYlZpZXctPnNldFByZWZlcmVu
Y2VzKHByZWZlcmVuY2VzLmdldCgpKSkpCi0gICAgICAgIHJldHVybiAwOworICAgIGlmIChGQUlM
RUQoZnJvbnRlbmRXZWJWaWV3LT5zZXRQcmVmZXJlbmNlcyhwcmVmZXJlbmNlcy5nZXQoKSkpKQor
ICAgICAgICByZXR1cm47CiAKLSAgICBtX3dlYlZpZXctPnNldFByb2hpYml0c01haW5GcmFtZVNj
cm9sbGluZyhUUlVFKTsKKyAgICBmcm9udGVuZFdlYlZpZXctPnNldFByb2hpYml0c01haW5GcmFt
ZVNjcm9sbGluZyhUUlVFKTsKIAotICAgIGlmIChGQUlMRUQobV93ZWJWaWV3LT52aWV3V2luZG93
KHJlaW50ZXJwcmV0X2Nhc3Q8T0xFX0hBTkRMRSo+KCZtX3dlYlZpZXdId25kKSkpKQotICAgICAg
ICByZXR1cm4gMDsKKyAgICBIV05EIGZyb250ZW5kV2ViVmlld0h3bmQ7CisgICAgaWYgKEZBSUxF
RChmcm9udGVuZFdlYlZpZXctPnZpZXdXaW5kb3cocmVpbnRlcnByZXRfY2FzdDxPTEVfSEFORExF
Kj4oJmZyb250ZW5kV2ViVmlld0h3bmQpKSkpCisgICAgICAgIHJldHVybjsKIAotICAgIENPTVB0
cjxXZWJNdXRhYmxlVVJMUmVxdWVzdD4gcmVxdWVzdDsKLSAgICByZXF1ZXN0LmFkb3B0UmVmKFdl
Yk11dGFibGVVUkxSZXF1ZXN0OjpjcmVhdGVJbnN0YW5jZSgpKTsKKyAgICBDT01QdHI8V2ViTXV0
YWJsZVVSTFJlcXVlc3Q+IHJlcXVlc3QoQWRvcHRDT00sIFdlYk11dGFibGVVUkxSZXF1ZXN0Ojpj
cmVhdGVJbnN0YW5jZSgpKTsKIAogICAgIFJldGFpblB0cjxDRlVSTFJlZj4gaHRtbFVSTFJlZihB
ZG9wdENGLCBDRkJ1bmRsZUNvcHlSZXNvdXJjZVVSTChnZXRXZWJLaXRCdW5kbGUoKSwgQ0ZTVFIo
Imluc3BlY3RvciIpLCBDRlNUUigiaHRtbCIpLCBDRlNUUigiaW5zcGVjdG9yIikpKTsKICAgICBp
ZiAoIWh0bWxVUkxSZWYpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm47CiAKICAg
ICBDRlN0cmluZ1JlZiB1cmxTdHJpbmdSZWYgPSA6OkNGVVJMR2V0U3RyaW5nKGh0bWxVUkxSZWYu
Z2V0KCkpOwogICAgIGlmIChGQUlMRUQocmVxdWVzdC0+aW5pdFdpdGhVUkwoQlN0cmluZyh1cmxT
dHJpbmdSZWYpLCBXZWJVUkxSZXF1ZXN0VXNlUHJvdG9jb2xDYWNoZVBvbGljeSwgNjApKSkKLSAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybjsKIAotICAgIGlmIChGQUlMRUQobV93ZWJW
aWV3LT50b3BMZXZlbEZyYW1lKCktPmxvYWRSZXF1ZXN0KHJlcXVlc3QuZ2V0KCkpKSkKLSAgICAg
ICAgcmV0dXJuIDA7CisgICAgaWYgKEZBSUxFRChmcm9udGVuZFdlYlZpZXctPnRvcExldmVsRnJh
bWUoKS0+bG9hZFJlcXVlc3QocmVxdWVzdC5nZXQoKSkpKQorICAgICAgICByZXR1cm47CiAKLSAg
ICByZXR1cm4gY29yZShtX3dlYlZpZXcuZ2V0KCkpOworICAgIFBhZ2UqIHBhZ2UgPSBjb3JlKGZy
b250ZW5kV2ViVmlldy5nZXQoKSk7CisgICAgcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5z
ZXRJbnNwZWN0b3JGcm9udGVuZENsaWVudChuZXcgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQo
bV9pbnNwZWN0ZWRXZWJWaWV3LCBtX2luc3BlY3RlZFdlYlZpZXdId25kLCBmcm9udGVuZEh3bmQs
IGZyb250ZW5kV2ViVmlldywgZnJvbnRlbmRXZWJWaWV3SHduZCwgdGhpcykpOworICAgIG1fZnJv
bnRlbmRId25kID0gZnJvbnRlbmRId25kOwogfQogCit2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6
aGlnaGxpZ2h0KE5vZGUqKQoreworICAgIGJvb2wgY3JlYXRpbmdIaWdobGlnaHQgPSAhbV9oaWdo
bGlnaHQ7CisKKyAgICBpZiAoY3JlYXRpbmdIaWdobGlnaHQpCisgICAgICAgIG1faGlnaGxpZ2h0
LnNldChuZXcgV2ViTm9kZUhpZ2hsaWdodChtX2luc3BlY3RlZFdlYlZpZXcpKTsKIAotU3RyaW5n
IFdlYkluc3BlY3RvckNsaWVudDo6bG9jYWxpemVkU3RyaW5nc1VSTCgpCisgICAgaWYgKG1faGln
aGxpZ2h0LT5pc1Nob3dpbmcoKSkKKyAgICAgICAgbV9oaWdobGlnaHQtPnVwZGF0ZSgpOworICAg
IGVsc2UKKyAgICAgICAgbV9oaWdobGlnaHQtPnNldFNob3dzV2hpbGVXZWJWaWV3SXNWaXNpYmxl
KHRydWUpOworCisgICAgaWYgKGNyZWF0aW5nSGlnaGxpZ2h0ICYmIElzV2luZG93VmlzaWJsZSht
X2Zyb250ZW5kSHduZCkpCisgICAgICAgIG1faGlnaGxpZ2h0LT5wbGFjZUJlaGluZFdpbmRvdyht
X2Zyb250ZW5kSHduZCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpoaWRlSGlnaGxp
Z2h0KCkKK3sKKyAgICBpZiAobV9oaWdobGlnaHQpCisgICAgICAgIG1faGlnaGxpZ2h0LT5zZXRT
aG93c1doaWxlV2ViVmlld0lzVmlzaWJsZShmYWxzZSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9y
Q2xpZW50Ojp1cGRhdGVIaWdobGlnaHQoKQoreworICAgIGlmIChtX2hpZ2hsaWdodCAmJiBtX2hp
Z2hsaWdodC0+aXNTaG93aW5nKCkpCisgICAgICAgIG1faGlnaGxpZ2h0LT51cGRhdGUoKTsKK30K
KworV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OldlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50
KFdlYlZpZXcqIGluc3BlY3RlZFdlYlZpZXcsIEhXTkQgaW5zcGVjdGVkV2ViVmlld0h3bmQsIEhX
TkQgZnJvbnRlbmRId25kLCBjb25zdCBDT01QdHI8V2ViVmlldz4mIGZyb250ZW5kV2ViVmlldywg
SFdORCBmcm9udGVuZFdlYlZpZXdId25kLCBXZWJJbnNwZWN0b3JDbGllbnQqIGluc3BlY3RvckNs
aWVudCkKKyAgICA6IEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwoaW5zcGVjdGVkV2ViVmll
dy0+cGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCksICBjb3JlKGZyb250ZW5kV2ViVmlldy5n
ZXQoKSkpCisgICAgLCBtX2luc3BlY3RlZFdlYlZpZXcoaW5zcGVjdGVkV2ViVmlldykKKyAgICAs
IG1faW5zcGVjdGVkV2ViVmlld0h3bmQoaW5zcGVjdGVkV2ViVmlld0h3bmQpCisgICAgLCBtX2lu
c3BlY3RvckNsaWVudChpbnNwZWN0b3JDbGllbnQpCisgICAgLCBtX2Zyb250ZW5kSHduZChmcm9u
dGVuZEh3bmQpCisgICAgLCBtX2Zyb250ZW5kV2ViVmlldyhmcm9udGVuZFdlYlZpZXcpCisgICAg
LCBtX2Zyb250ZW5kV2ViVmlld0h3bmQoZnJvbnRlbmRXZWJWaWV3SHduZCkKKyAgICAsIG1fc2hv
dWxkQXR0YWNoV2hlblNob3duKGZhbHNlKQorICAgICwgbV9hdHRhY2hlZChmYWxzZSkKKyAgICAs
IG1fZGVzdHJveWluZ0luc3BlY3RvclZpZXcoZmFsc2UpCit7CisgICAgOjpTZXRQcm9wKGZyb250
ZW5kSHduZCwga1dlYkluc3BlY3RvclBvaW50ZXJQcm9wLCByZWludGVycHJldF9jYXN0PEhBTkRM
RT4odGhpcykpOworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgd2luZG93IHNpemUvcG9zaXRpb24g
c2F2ZS9yZXN0b3JlCisjaWYgMAorICAgIFtzZWxmIHNldFdpbmRvd0ZyYW1lQXV0b3NhdmVOYW1l
OkAiV2ViIEluc3BlY3RvciJdOworI2VuZGlmCit9CisKK1dlYkluc3BlY3RvckZyb250ZW5kQ2xp
ZW50Ojp+V2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQoKQoreworICAgIEFTU0VSVChtX2Rlc3Ry
b3lpbmdJbnNwZWN0b3JWaWV3KTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVu
dDo6ZnJvbnRlbmRMb2FkZWQoKQoreworICAgIEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6
OmZyb250ZW5kTG9hZGVkKCk7CisKKyAgICBzZXRBdHRhY2hlZFdpbmRvdyhtX2F0dGFjaGVkKTsK
K30KKworU3RyaW5nIFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50Ojpsb2NhbGl6ZWRTdHJpbmdz
VVJMKCkKIHsKICAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IHVybChBZG9wdENGLCBDRkJ1bmRsZUNv
cHlSZXNvdXJjZVVSTChnZXRXZWJLaXRCdW5kbGUoKSwgQ0ZTVFIoImxvY2FsaXplZFN0cmluZ3Mi
KSwgQ0ZTVFIoImpzIiksIDApKTsKICAgICBpZiAoIXVybCkKQEAgLTIwMiwzMSArMjQ1LDIzIEBA
IFN0cmluZyBXZWJJbnNwZWN0b3JDbGllbnQ6OmxvY2FsaXplZFN0cmluZ3NVUkwoKQogICAgIHJl
dHVybiBDRlVSTEdldFN0cmluZyh1cmwuZ2V0KCkpOwogfQogCi0KLVN0cmluZyBXZWJJbnNwZWN0
b3JDbGllbnQ6OmhpZGRlblBhbmVscygpCitTdHJpbmcgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGll
bnQ6OmhpZGRlblBhbmVscygpCiB7CiAgICAgLy8gRklYTUU6IGltcGxlbWVudCB0aGlzCiAgICAg
cmV0dXJuIFN0cmluZygpOwogfQogCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6c2hvd1dpbmRv
dygpCit2b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpicmluZ1RvRnJvbnQoKQogewog
ICAgIHNob3dXaW5kb3dXaXRob3V0Tm90aWZpY2F0aW9ucygpOwotICAgIG1faW5zcGVjdGVkV2Vi
Vmlldy0+cGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnNldFdpbmRvd1Zpc2libGUodHJ1
ZSwgbV9zaG91bGRBdHRhY2hXaGVuU2hvd24pOwotfQotCi12b2lkIFdlYkluc3BlY3RvckNsaWVu
dDo6Y2xvc2VXaW5kb3coKQotewotICAgIGNsb3NlV2luZG93V2l0aG91dE5vdGlmaWNhdGlvbnMo
KTsKLSAgICBtX2luc3BlY3RlZFdlYlZpZXctPnBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigp
LT5zZXRXaW5kb3dWaXNpYmxlKGZhbHNlLCBtX3Nob3VsZEF0dGFjaFdoZW5TaG93bik7CiB9CiAK
LWJvb2wgV2ViSW5zcGVjdG9yQ2xpZW50Ojp3aW5kb3dWaXNpYmxlKCkKK3ZvaWQgV2ViSW5zcGVj
dG9yRnJvbnRlbmRDbGllbnQ6OmNsb3NlV2luZG93KCkKIHsKLSAgICByZXR1cm4gISE6OklzV2lu
ZG93VmlzaWJsZShtX2h3bmQpOworICAgIGRlc3Ryb3lJbnNwZWN0b3JWaWV3KCk7CiB9CiAKLXZv
aWQgV2ViSW5zcGVjdG9yQ2xpZW50OjphdHRhY2hXaW5kb3coKQordm9pZCBXZWJJbnNwZWN0b3JG
cm9udGVuZENsaWVudDo6YXR0YWNoV2luZG93KCkKIHsKICAgICBpZiAobV9hdHRhY2hlZCkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMjM3LDcgKzI3Miw3IEBAIHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50
OjphdHRhY2hXaW5kb3coKQogICAgIHNob3dXaW5kb3dXaXRob3V0Tm90aWZpY2F0aW9ucygpOwog
fQogCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6ZGV0YWNoV2luZG93KCkKK3ZvaWQgV2ViSW5z
cGVjdG9yRnJvbnRlbmRDbGllbnQ6OmRldGFjaFdpbmRvdygpCiB7CiAgICAgaWYgKCFtX2F0dGFj
aGVkKQogICAgICAgICByZXR1cm47CkBAIC0yNDgsNyArMjgzLDcgQEAgdm9pZCBXZWJJbnNwZWN0
b3JDbGllbnQ6OmRldGFjaFdpbmRvdygpCiAgICAgc2hvd1dpbmRvd1dpdGhvdXROb3RpZmljYXRp
b25zKCk7CiB9CiAKLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpzZXRBdHRhY2hlZFdpbmRvd0hl
aWdodCh1bnNpZ25lZCBoZWlnaHQpCit2b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50Ojpz
ZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpCiB7CiAgICAgaWYgKCFtX2F0
dGFjaGVkKQogICAgICAgICByZXR1cm47CkBAIC0yNjYsMTAxICszMDEsNzMgQEAgdm9pZCBXZWJJ
bnNwZWN0b3JDbGllbnQ6OnNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkK
ICAgICBpbnQgdG90YWxIZWlnaHQgPSBob3N0V2luZG93UmVjdC5ib3R0b20gLSBob3N0V2luZG93
UmVjdC50b3A7CiAgICAgaW50IHdlYlZpZXdXaWR0aCA9IGluc3BlY3RlZFJlY3QucmlnaHQgLSBp
bnNwZWN0ZWRSZWN0LmxlZnQ7CiAKLSAgICBTZXRXaW5kb3dQb3MobV93ZWJWaWV3SHduZCwgMCwg
MCwgdG90YWxIZWlnaHQgLSBoZWlnaHQsIHdlYlZpZXdXaWR0aCwgaGVpZ2h0LCBTV1BfTk9aT1JE
RVIpOworICAgIFNldFdpbmRvd1BvcyhtX2Zyb250ZW5kV2ViVmlld0h3bmQsIDAsIDAsIHRvdGFs
SGVpZ2h0IC0gaGVpZ2h0LCB3ZWJWaWV3V2lkdGgsIGhlaWdodCwgU1dQX05PWk9SREVSKTsKIAog
ICAgIC8vIFdlIHdhbnQgdG8gc2V0IHRoZSBpbnNwZWN0ZWQgd2ViIHZpZXcgaGVpZ2h0IHRvIHRo
ZSB0b3RhbEhlaWdodCwgYmVjYXVzZSB0aGUgaGVpZ2h0IGFkanVzdG1lbnQKICAgICAvLyBvZiB0
aGUgaW5zcGVjdGVkIHdlYiB2aWV3IGhhcHBlbnMgaW4gb25XZWJWaWV3V2luZG93UG9zQ2hhbmdp
bmcsIG5vdCBoZXJlLgogICAgIFNldFdpbmRvd1BvcyhtX2luc3BlY3RlZFdlYlZpZXdId25kLCAw
LCAwLCAwLCB3ZWJWaWV3V2lkdGgsIHRvdGFsSGVpZ2h0LCBTV1BfTk9aT1JERVIpOwogCi0gICAg
UmVkcmF3V2luZG93KG1fd2ViVmlld0h3bmQsIDAsIDAsIFJEV19JTlZBTElEQVRFIHwgUkRXX0FM
TENISUxEUkVOIHwgUkRXX1VQREFURU5PVyk7IAorICAgIFJlZHJhd1dpbmRvdyhtX2Zyb250ZW5k
V2ViVmlld0h3bmQsIDAsIDAsIFJEV19JTlZBTElEQVRFIHwgUkRXX0FMTENISUxEUkVOIHwgUkRX
X1VQREFURU5PVyk7IAogICAgIFJlZHJhd1dpbmRvdyhtX2luc3BlY3RlZFdlYlZpZXdId25kLCAw
LCAwLCBSRFdfSU5WQUxJREFURSB8IFJEV19BTExDSElMRFJFTiB8IFJEV19VUERBVEVOT1cpOwog
fQogCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6aGlnaGxpZ2h0KE5vZGUqKQotewotICAgIGJv
b2wgY3JlYXRpbmdIaWdobGlnaHQgPSAhbV9oaWdobGlnaHQ7Ci0KLSAgICBpZiAoY3JlYXRpbmdI
aWdobGlnaHQpCi0gICAgICAgIG1faGlnaGxpZ2h0LnNldChuZXcgV2ViTm9kZUhpZ2hsaWdodCht
X2luc3BlY3RlZFdlYlZpZXcpKTsKLQotICAgIGlmIChtX2hpZ2hsaWdodC0+aXNTaG93aW5nKCkp
Ci0gICAgICAgIG1faGlnaGxpZ2h0LT51cGRhdGUoKTsKLSAgICBlbHNlCi0gICAgICAgIG1faGln
aGxpZ2h0LT5zZXRTaG93c1doaWxlV2ViVmlld0lzVmlzaWJsZSh0cnVlKTsKLQotICAgIGlmIChj
cmVhdGluZ0hpZ2hsaWdodCAmJiBJc1dpbmRvd1Zpc2libGUobV9od25kKSkKLSAgICAgICAgbV9o
aWdobGlnaHQtPnBsYWNlQmVoaW5kV2luZG93KG1faHduZCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVj
dG9yQ2xpZW50OjpoaWRlSGlnaGxpZ2h0KCkKLXsKLSAgICBpZiAobV9oaWdobGlnaHQpCi0gICAg
ICAgIG1faGlnaGxpZ2h0LT5zZXRTaG93c1doaWxlV2ViVmlld0lzVmlzaWJsZShmYWxzZSk7Ci19
Ci0KLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjppbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0
cmluZyYgbmV3VVJMKQordm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6aW5zcGVjdGVk
VVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIG5ld1VSTCkKIHsKICAgICBtX2luc3BlY3RlZFVSTCA9
IG5ld1VSTDsKICAgICB1cGRhdGVXaW5kb3dUaXRsZSgpOwogfQogCi12b2lkIFdlYkluc3BlY3Rv
ckNsaWVudDo6aW5zcGVjdG9yV2luZG93T2JqZWN0Q2xlYXJlZCgpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmNsb3NlV2luZG93V2l0aG91
dE5vdGlmaWNhdGlvbnMoKQordm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6Y2xvc2VX
aW5kb3dXaXRob3V0Tm90aWZpY2F0aW9ucygpCiB7Ci0gICAgaWYgKCFtX2h3bmQpCisgICAgaWYg
KCFtX2Zyb250ZW5kSHduZCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFtX2F0dGFjaGVk
KSB7Ci0gICAgICAgIFNob3dXaW5kb3cobV9od25kLCBTV19ISURFKTsKKyAgICAgICAgU2hvd1dp
bmRvdyhtX2Zyb250ZW5kSHduZCwgU1dfSElERSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBBU1NFUlQobV93ZWJWaWV3KTsKKyAgICBBU1NFUlQobV9mcm9udGVuZFdlYlZpZXcpOwog
ICAgIEFTU0VSVChtX2luc3BlY3RlZFdlYlZpZXdId25kKTsKLSAgICBBU1NFUlQoIUlzV2luZG93
VmlzaWJsZShtX2h3bmQpKTsKKyAgICBBU1NFUlQoIUlzV2luZG93VmlzaWJsZShtX2Zyb250ZW5k
SHduZCkpOwogCiAgICAgLy8gUmVtb3ZlIHRoZSBJbnNwZWN0b3IncyBXZWJWaWV3IGZyb20gdGhl
IGluc3BlY3RlZCBXZWJWaWV3J3MgcGFyZW50IHdpbmRvdy4KICAgICBXaW5kb3dNZXNzYWdlQnJv
YWRjYXN0ZXI6OnJlbW92ZUxpc3RlbmVyKG1faW5zcGVjdGVkV2ViVmlld0h3bmQsIHRoaXMpOwog
CiAgICAgbV9hdHRhY2hlZCA9IGZhbHNlOwogCi0gICAgbV93ZWJWaWV3LT5zZXRIb3N0V2luZG93
KHJlaW50ZXJwcmV0X2Nhc3Q8T0xFX0hBTkRMRT4obV9od25kKSk7CisgICAgbV9mcm9udGVuZFdl
YlZpZXctPnNldEhvc3RXaW5kb3cocmVpbnRlcnByZXRfY2FzdDxPTEVfSEFORExFPihtX2Zyb250
ZW5kSHduZCkpOwogCiAgICAgLy8gTWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaGFzIHRoZSByaWdodCBz
aXplL3Bvc2l0aW9uLgogICAgIEhXTkQgaG9zdFdpbmRvdzsKICAgICBpZiAoU1VDQ0VFREVEKG1f
aW5zcGVjdGVkV2ViVmlldy0+aG9zdFdpbmRvdygoT0xFX0hBTkRMRSopJmhvc3RXaW5kb3cpKSkK
ICAgICAgICAgU2VuZE1lc3NhZ2UoaG9zdFdpbmRvdywgV01fU0laRSwgMCwgMCk7CiAKLSAgICBp
ZiAobV9oaWdobGlnaHQgJiYgbV9oaWdobGlnaHQtPmlzU2hvd2luZygpKQotICAgICAgICBtX2hp
Z2hsaWdodC0+dXBkYXRlKCk7CisgICAgbV9pbnNwZWN0b3JDbGllbnQtPnVwZGF0ZUhpZ2hsaWdo
dCgpOwogfQogCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6c2hvd1dpbmRvd1dpdGhvdXROb3Rp
ZmljYXRpb25zKCkKK3ZvaWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OnNob3dXaW5kb3dX
aXRob3V0Tm90aWZpY2F0aW9ucygpCiB7Ci0gICAgaWYgKCFtX2h3bmQpCisgICAgaWYgKCFtX2Zy
b250ZW5kSHduZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQVNTRVJUKG1fd2ViVmlldyk7Cisg
ICAgQVNTRVJUKG1fZnJvbnRlbmRXZWJWaWV3KTsKICAgICBBU1NFUlQobV9pbnNwZWN0ZWRXZWJW
aWV3SHduZCk7CiAKICAgICAvLyBJZiBubyBwcmVmZXJlbmNlIGlzIHNldCAtIGRlZmF1bHQgdG8g
YW4gYXR0YWNoZWQgd2luZG93LiBUaGlzIGlzIGltcG9ydGFudCBmb3IgaW5zcGVjdG9yIExheW91
dFRlc3RzLgogICAgIFN0cmluZyBzaG91bGRBdHRhY2ggPSBtX2luc3BlY3RlZFdlYlZpZXctPnBh
Z2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5zZXR0aW5nKEluc3BlY3RvckNvbnRyb2xsZXI6
Omluc3BlY3RvclN0YXJ0c0F0dGFjaGVkU2V0dGluZ05hbWUoKSk7CiAgICAgbV9zaG91bGRBdHRh
Y2hXaGVuU2hvd24gPSBzaG91bGRBdHRhY2ggIT0gImZhbHNlIjsKICAgICAgICAgCi0gICAgaWYg
KG1fc2hvdWxkQXR0YWNoV2hlblNob3duICYmICFtX2luc3BlY3RlZFdlYlZpZXctPnBhZ2UoKS0+
aW5zcGVjdG9yQ29udHJvbGxlcigpLT5jYW5BdHRhY2hXaW5kb3coKSkKKyAgICBpZiAobV9zaG91
bGRBdHRhY2hXaGVuU2hvd24gJiYgIWNhbkF0dGFjaFdpbmRvdygpKQogICAgICAgICBtX3Nob3Vs
ZEF0dGFjaFdoZW5TaG93biA9IGZhbHNlOwogICAgIAogICAgIGlmICghbV9zaG91bGRBdHRhY2hX
aGVuU2hvd24pIHsKICAgICAgICAgLy8gUHV0IHRoZSBJbnNwZWN0b3IncyBXZWJWaWV3IGluc2lk
ZSBvdXIgd2luZG93IGFuZCBzaG93IGl0LgotICAgICAgICBtX3dlYlZpZXctPnNldEhvc3RXaW5k
b3cocmVpbnRlcnByZXRfY2FzdDxPTEVfSEFORExFPihtX2h3bmQpKTsKLSAgICAgICAgU2VuZE1l
c3NhZ2UobV9od25kLCBXTV9TSVpFLCAwLCAwKTsKKyAgICAgICAgbV9mcm9udGVuZFdlYlZpZXct
PnNldEhvc3RXaW5kb3cocmVpbnRlcnByZXRfY2FzdDxPTEVfSEFORExFPihtX2Zyb250ZW5kSHdu
ZCkpOworICAgICAgICBTZW5kTWVzc2FnZShtX2Zyb250ZW5kSHduZCwgV01fU0laRSwgMCwgMCk7
CiAgICAgICAgIHVwZGF0ZVdpbmRvd1RpdGxlKCk7CiAKLSAgICAgICAgU2V0V2luZG93UG9zKG1f
aHduZCwgSFdORF9UT1AsIDAsIDAsIDAsIDAsIFNXUF9TSE9XV0lORE9XIHwgU1dQX05PTU9WRSB8
IFNXUF9OT1NJWkUpOworICAgICAgICBTZXRXaW5kb3dQb3MobV9mcm9udGVuZEh3bmQsIEhXTkRf
VE9QLCAwLCAwLCAwLCAwLCBTV1BfU0hPV1dJTkRPVyB8IFNXUF9OT01PVkUgfCBTV1BfTk9TSVpF
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMzcxLDIwICszNzgsMzIgQEAgdm9pZCBX
ZWJJbnNwZWN0b3JDbGllbnQ6OnNob3dXaW5kb3dXaXRob3V0Tm90aWZpY2F0aW9ucygpCiAgICAg
aWYgKEZBSUxFRChtX2luc3BlY3RlZFdlYlZpZXctPmhvc3RXaW5kb3cocmVpbnRlcnByZXRfY2Fz
dDxPTEVfSEFORExFKj4oJmhvc3RXaW5kb3cpKSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1f
d2ViVmlldy0+c2V0SG9zdFdpbmRvdyhyZWludGVycHJldF9jYXN0PE9MRV9IQU5ETEU+KGhvc3RX
aW5kb3cpKTsKKyAgICBtX2Zyb250ZW5kV2ViVmlldy0+c2V0SG9zdFdpbmRvdyhyZWludGVycHJl
dF9jYXN0PE9MRV9IQU5ETEU+KGhvc3RXaW5kb3cpKTsKIAogICAgIC8vIFRoZW4gaGlkZSBvdXIg
b3duIHdpbmRvdy4KLSAgICBTaG93V2luZG93KG1faHduZCwgU1dfSElERSk7CisgICAgU2hvd1dp
bmRvdyhtX2Zyb250ZW5kSHduZCwgU1dfSElERSk7CiAKICAgICBtX2F0dGFjaGVkID0gdHJ1ZTsK
IAogICAgIC8vIE1ha2Ugc3VyZSBldmVyeXRoaW5nIGhhcyB0aGUgcmlnaHQgc2l6ZS9wb3NpdGlv
bi4KICAgICBTZW5kTWVzc2FnZShob3N0V2luZG93LCBXTV9TSVpFLCAwLCAwKTsKLSAgICBpZiAo
bV9oaWdobGlnaHQgJiYgbV9oaWdobGlnaHQtPmlzU2hvd2luZygpKQotICAgICAgICBtX2hpZ2hs
aWdodC0+dXBkYXRlKCk7CisgICAgbV9pbnNwZWN0b3JDbGllbnQtPnVwZGF0ZUhpZ2hsaWdodCgp
OworfQorCit2b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpkZXN0cm95SW5zcGVjdG9y
VmlldygpCit7CisgICAgaWYgKG1fZGVzdHJveWluZ0luc3BlY3RvclZpZXcpCisgICAgICAgIHJl
dHVybjsKKyAgICBtX2Rlc3Ryb3lpbmdJbnNwZWN0b3JWaWV3ID0gdHJ1ZTsKKworICAgIG1faW5z
cGVjdGVkV2ViVmlldy0+cGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmNsb3NlKCk7CisK
KyAgICBjbG9zZVdpbmRvd1dpdGhvdXROb3RpZmljYXRpb25zKCk7CisgICAgbV9pbnNwZWN0b3JD
bGllbnQtPmZyb250ZW5kQ2xvc2luZygpOworICAgIDo6RGVzdHJveVdpbmRvdyhtX2Zyb250ZW5k
SHduZCk7CiB9CiAKLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50Ojp1cGRhdGVXaW5kb3dUaXRsZSgp
Cit2b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50Ojp1cGRhdGVXaW5kb3dUaXRsZSgpCiB7
CiAgICAgLy8gRklYTUU6IFRoZSBzZXJpZXMgb2YgYXBwZW5kcyBzaG91bGQgYmUgcmVwbGFjZWQg
d2l0aCBhIGNhbGwgdG8gU3RyaW5nOjpmb3JtYXQoKQogICAgIC8vIHdoZW4gaXQgY2FuIGJlIGZp
Z3VyZWQgb3V0IGhvdyB0byBnZXQgdGhlIHVuaWNvZGUgZW0tZGFzaCB0byBzaG93IHVwLgpAQCAt
MzkyLDEwICs0MTEsMTAgQEAgdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OnVwZGF0ZVdpbmRvd1Rp
dGxlKCkKICAgICB0aXRsZS5hcHBlbmQoKFVDaGFyKTB4MjAxNCk7IC8vIGVtLWRhc2gKICAgICB0
aXRsZS5hcHBlbmQoJyAnKTsKICAgICB0aXRsZS5hcHBlbmQobV9pbnNwZWN0ZWRVUkwpOwotICAg
IDo6U2V0V2luZG93VGV4dChtX2h3bmQsIHRpdGxlLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0
aW9uKCkpOworICAgIDo6U2V0V2luZG93VGV4dChtX2Zyb250ZW5kSHduZCwgdGl0bGUuY2hhcmFj
dGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSk7CiB9CiAKLUxSRVNVTFQgV2ViSW5zcGVjdG9yQ2xp
ZW50OjpvbkdldE1pbk1heEluZm8oV1BBUkFNLCBMUEFSQU0gbFBhcmFtKQorTFJFU1VMVCBXZWJJ
bnNwZWN0b3JGcm9udGVuZENsaWVudDo6b25HZXRNaW5NYXhJbmZvKFdQQVJBTSwgTFBBUkFNIGxQ
YXJhbSkKIHsKICAgICBNSU5NQVhJTkZPKiBpbmZvID0gcmVpbnRlcnByZXRfY2FzdDxNSU5NQVhJ
TkZPKj4obFBhcmFtKTsKICAgICBQT0lOVCBzaXplID0gezQwMCwgNDAwfTsKQEAgLTQwNCwzMyAr
NDIzLDMxIEBAIExSRVNVTFQgV2ViSW5zcGVjdG9yQ2xpZW50OjpvbkdldE1pbk1heEluZm8oV1BB
UkFNLCBMUEFSQU0gbFBhcmFtKQogICAgIHJldHVybiAwOwogfQogCi1MUkVTVUxUIFdlYkluc3Bl
Y3RvckNsaWVudDo6b25TaXplKFdQQVJBTSwgTFBBUkFNKQorTFJFU1VMVCBXZWJJbnNwZWN0b3JG
cm9udGVuZENsaWVudDo6b25TaXplKFdQQVJBTSwgTFBBUkFNKQogewogICAgIFJFQ1QgcmVjdDsK
LSAgICA6OkdldENsaWVudFJlY3QobV9od25kLCAmcmVjdCk7CisgICAgOjpHZXRDbGllbnRSZWN0
KG1fZnJvbnRlbmRId25kLCAmcmVjdCk7CiAKLSAgICA6OlNldFdpbmRvd1BvcyhtX3dlYlZpZXdI
d25kLCAwLCByZWN0LmxlZnQsIHJlY3QudG9wLCByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0LCByZWN0
LmJvdHRvbSAtIHJlY3QudG9wLCBTV1BfTk9aT1JERVIpOworICAgIDo6U2V0V2luZG93UG9zKG1f
ZnJvbnRlbmRXZWJWaWV3SHduZCwgMCwgcmVjdC5sZWZ0LCByZWN0LnRvcCwgcmVjdC5yaWdodCAt
IHJlY3QubGVmdCwgcmVjdC5ib3R0b20gLSByZWN0LnRvcCwgU1dQX05PWk9SREVSKTsKIAogICAg
IHJldHVybiAwOwogfQogCi1MUkVTVUxUIFdlYkluc3BlY3RvckNsaWVudDo6b25DbG9zZShXUEFS
QU0sIExQQVJBTSkKK0xSRVNVTFQgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6Om9uQ2xvc2Uo
V1BBUkFNLCBMUEFSQU0pCiB7Ci0gICAgOjpTaG93V2luZG93KG1faHduZCwgU1dfSElERSk7Ci0g
ICAgbV9pbnNwZWN0ZWRXZWJWaWV3LT5wYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0
V2luZG93VmlzaWJsZShmYWxzZSwgbV9zaG91bGRBdHRhY2hXaGVuU2hvd24pOwotCi0gICAgaGlk
ZUhpZ2hsaWdodCgpOworICAgIDo6U2hvd1dpbmRvdyhtX2Zyb250ZW5kSHduZCwgU1dfSElERSk7
CisgICAgbV9pbnNwZWN0ZWRXZWJWaWV3LT5wYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+
Y2xvc2UoKTsKIAogICAgIHJldHVybiAwOwogfQogCi1MUkVTVUxUIFdlYkluc3BlY3RvckNsaWVu
dDo6b25TZXRGb2N1cygpCitMUkVTVUxUIFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpvblNl
dEZvY3VzKCkKIHsKLSAgICBTZXRGb2N1cyhtX3dlYlZpZXdId25kKTsKKyAgICBTZXRGb2N1cyht
X2Zyb250ZW5kV2ViVmlld0h3bmQpOwogICAgIHJldHVybiAwOwogfQogCi12b2lkIFdlYkluc3Bl
Y3RvckNsaWVudDo6b25XZWJWaWV3V2luZG93UG9zQ2hhbmdpbmcoV1BBUkFNLCBMUEFSQU0gbFBh
cmFtKQordm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6b25XZWJWaWV3V2luZG93UG9z
Q2hhbmdpbmcoV1BBUkFNLCBMUEFSQU0gbFBhcmFtKQogewogICAgIEFTU0VSVChtX2F0dGFjaGVk
KTsKIApAQCAtNDQxLDE3ICs0NTgsMTcgQEAgdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6Om9uV2Vi
Vmlld1dpbmRvd1Bvc0NoYW5naW5nKFdQQVJBTSwgTFBBUkFNIGxQYXJhbSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgUkVDVCBpbnNwZWN0b3JSZWN0OwotICAgIEdldENsaWVudFJlY3QobV93ZWJW
aWV3SHduZCwgJmluc3BlY3RvclJlY3QpOworICAgIEdldENsaWVudFJlY3QobV9mcm9udGVuZFdl
YlZpZXdId25kLCAmaW5zcGVjdG9yUmVjdCk7CiAgICAgdW5zaWduZWQgaW5zcGVjdG9ySGVpZ2h0
ID0gaW5zcGVjdG9yUmVjdC5ib3R0b20gLSBpbnNwZWN0b3JSZWN0LnRvcDsKIAogICAgIHdpbmRv
d1Bvcy0+Y3kgLT0gaW5zcGVjdG9ySGVpZ2h0OwogCi0gICAgU2V0V2luZG93UG9zKG1fd2ViVmll
d0h3bmQsIDAsIHdpbmRvd1Bvcy0+eCwgd2luZG93UG9zLT55ICsgd2luZG93UG9zLT5jeSwgd2lu
ZG93UG9zLT5jeCwgaW5zcGVjdG9ySGVpZ2h0LCBTV1BfTk9aT1JERVIpOworICAgIFNldFdpbmRv
d1BvcyhtX2Zyb250ZW5kV2ViVmlld0h3bmQsIDAsIHdpbmRvd1Bvcy0+eCwgd2luZG93UG9zLT55
ICsgd2luZG93UG9zLT5jeSwgd2luZG93UG9zLT5jeCwgaW5zcGVjdG9ySGVpZ2h0LCBTV1BfTk9a
T1JERVIpOwogfQogCiBzdGF0aWMgTFJFU1VMVCBDQUxMQkFDSyBXZWJJbnNwZWN0b3JXbmRQcm9j
KEhXTkQgaHduZCwgVUlOVCBtc2csIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCiB7Ci0g
ICAgV2ViSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQgPSByZWludGVycHJldF9jYXN0PFdlYkluc3Bl
Y3RvckNsaWVudCo+KDo6R2V0UHJvcChod25kLCBrV2ViSW5zcGVjdG9yUG9pbnRlclByb3ApKTsK
KyAgICBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudCogY2xpZW50ID0gcmVpbnRlcnByZXRfY2Fz
dDxXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudCo+KDo6R2V0UHJvcChod25kLCBrV2ViSW5zcGVj
dG9yUG9pbnRlclByb3ApKTsKICAgICBpZiAoIWNsaWVudCkKICAgICAgICAgcmV0dXJuIDo6RGVm
V2luZG93UHJvYyhod25kLCBtc2csIHdQYXJhbSwgbFBhcmFtKTsKIApAQCAtNDcxLDcgKzQ4OCw3
IEBAIHN0YXRpYyBMUkVTVUxUIENBTExCQUNLIFdlYkluc3BlY3RvclduZFByb2MoSFdORCBod25k
LCBVSU5UIG1zZywgV1BBUkFNIHdQYXJhbSwKICAgICByZXR1cm4gOjpEZWZXaW5kb3dQcm9jKGh3
bmQsIG1zZywgd1BhcmFtLCBsUGFyYW0pOwogfQogCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6
d2luZG93UmVjZWl2ZWRNZXNzYWdlKEhXTkQsIFVJTlQgbXNnLCBXUEFSQU0gd1BhcmFtLCBMUEFS
QU0gbFBhcmFtKQordm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6d2luZG93UmVjZWl2
ZWRNZXNzYWdlKEhXTkQsIFVJTlQgbXNnLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQog
ewogICAgIHN3aXRjaCAobXNnKSB7CiAgICAgICAgIGNhc2UgV01fV0lORE9XUE9TQ0hBTkdJTkc6
CmRpZmYgLS1naXQgYS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVu
dC5oIGIvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuaAppbmRl
eCAzZjY1YjBhLi40NTVlM2ExIDEwMDY0NAotLS0gYS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0
L1dlYkluc3BlY3RvckNsaWVudC5oCisrKyBiL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2Vi
SW5zcGVjdG9yQ2xpZW50LmgKQEAgLTMxLDYgKzMxLDcgQEAKIAogI2luY2x1ZGUgPFdlYkNvcmUv
Q09NUHRyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JDbGllbnQuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL1BsYXRmb3JtU3RyaW5nLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9XaW5kb3dNZXNzYWdlTGlz
dGVuZXIuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CkBAIC0zOSw0NCArNDAsNjAgQEAKIGNs
YXNzIFdlYk5vZGVIaWdobGlnaHQ7CiBjbGFzcyBXZWJWaWV3OwogCi1jbGFzcyBXZWJJbnNwZWN0
b3JDbGllbnQgOiBwdWJsaWMgV2ViQ29yZTo6SW5zcGVjdG9yQ2xpZW50LCBXZWJDb3JlOjpXaW5k
b3dNZXNzYWdlTGlzdGVuZXIgeworY2xhc3MgV2ViSW5zcGVjdG9yQ2xpZW50IDogcHVibGljIFdl
YkNvcmU6Okluc3BlY3RvckNsaWVudCB7CiBwdWJsaWM6CiAgICAgV2ViSW5zcGVjdG9yQ2xpZW50
KFdlYlZpZXcqKTsKIAogICAgIC8vIEluc3BlY3RvckNsaWVudAogICAgIHZpcnR1YWwgdm9pZCBp
bnNwZWN0b3JEZXN0cm95ZWQoKTsKIAotICAgIHZpcnR1YWwgV2ViQ29yZTo6UGFnZSogY3JlYXRl
UGFnZSgpOwotCi0gICAgdmlydHVhbCBXZWJDb3JlOjpTdHJpbmcgbG9jYWxpemVkU3RyaW5nc1VS
TCgpOwotCi0gICAgdmlydHVhbCBXZWJDb3JlOjpTdHJpbmcgaGlkZGVuUGFuZWxzKCk7Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgc2hvd1dpbmRvdygpOwotICAgIHZpcnR1YWwgdm9pZCBjbG9zZVdpbmRv
dygpOwotICAgIHZpcnR1YWwgYm9vbCB3aW5kb3dWaXNpYmxlKCk7Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgYXR0YWNoV2luZG93KCk7Ci0gICAgdmlydHVhbCB2b2lkIGRldGFjaFdpbmRvdygpOwotCi0g
ICAgdmlydHVhbCB2b2lkIHNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCk7
CisgICAgdmlydHVhbCB2b2lkIG9wZW5JbnNwZWN0b3JGcm9udGVuZChXZWJDb3JlOjpJbnNwZWN0
b3JDb250cm9sbGVyKik7CiAKICAgICB2aXJ0dWFsIHZvaWQgaGlnaGxpZ2h0KFdlYkNvcmU6Ok5v
ZGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgaGlkZUhpZ2hsaWdodCgpOwogCi0gICAgdmlydHVhbCB2
b2lkIGluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBuZXdVUkwpOwot
CiAgICAgdmlydHVhbCB2b2lkIHBvcHVsYXRlU2V0dGluZyhjb25zdCBXZWJDb3JlOjpTdHJpbmcm
IGtleSwgV2ViQ29yZTo6U3RyaW5nKiB2YWx1ZSk7CiAgICAgdmlydHVhbCB2b2lkIHN0b3JlU2V0
dGluZyhjb25zdCBXZWJDb3JlOjpTdHJpbmcmIGtleSwgY29uc3QgV2ViQ29yZTo6U3RyaW5nJiB2
YWx1ZSk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgaW5zcGVjdG9yV2luZG93T2JqZWN0Q2xlYXJlZCgp
OworICAgIHZvaWQgdXBkYXRlSGlnaGxpZ2h0KCk7CisgICAgdm9pZCBmcm9udGVuZENsb3Npbmco
KSB7IG1fZnJvbnRlbmRId25kID0gMDsgfQogCiBwcml2YXRlOgogICAgIH5XZWJJbnNwZWN0b3JD
bGllbnQoKTsKIAorICAgIFdlYlZpZXcqIG1faW5zcGVjdGVkV2ViVmlldzsKKyAgICBIV05EIG1f
aW5zcGVjdGVkV2ViVmlld0h3bmQ7CisgICAgSFdORCBtX2Zyb250ZW5kSHduZDsKKworICAgIE93
blB0cjxXZWJOb2RlSGlnaGxpZ2h0PiBtX2hpZ2hsaWdodDsKK307CisKK2NsYXNzIFdlYkluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50IDogcHVibGljIFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xp
ZW50TG9jYWwsIFdlYkNvcmU6OldpbmRvd01lc3NhZ2VMaXN0ZW5lciB7CitwdWJsaWM6CisgICAg
V2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQoV2ViVmlldyogaW5zcGVjdGVkV2ViVmlldywgSFdO
RCBpbnNwZWN0ZWRXZWJWaWV3SHduZCwgSFdORCBmcm9udGVuZEh3bmQsIGNvbnN0IENPTVB0cjxX
ZWJWaWV3PiYgZnJvdG5lbmRXZWJWaWV3LCBIV05EIGZyb250ZW5kV2ViVmlld0h3bmQsIFdlYklu
c3BlY3RvckNsaWVudCogaW5zcGVjdG9yQ2xpZW50KTsKKworICAgIHZpcnR1YWwgdm9pZCBmcm9u
dGVuZExvYWRlZCgpOworICAgIAorICAgIHZpcnR1YWwgV2ViQ29yZTo6U3RyaW5nIGxvY2FsaXpl
ZFN0cmluZ3NVUkwoKTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OlN0cmluZyBoaWRkZW5QYW5lbHMo
KTsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgYnJpbmdUb0Zyb250KCk7CisgICAgdmlydHVhbCB2
b2lkIGNsb3NlV2luZG93KCk7CisgICAgCisgICAgdmlydHVhbCB2b2lkIGF0dGFjaFdpbmRvdygp
OworICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hXaW5kb3coKTsKKyAgICAKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KTsKKyAgICB2aXJ0dWFs
IHZvaWQgaW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpTdHJpbmcmIG5ld1VSTCk7
CisKK3ByaXZhdGU6CisgICAgfldlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50KCk7CisKICAgICB2
b2lkIGNsb3NlV2luZG93V2l0aG91dE5vdGlmaWNhdGlvbnMoKTsKICAgICB2b2lkIHNob3dXaW5k
b3dXaXRob3V0Tm90aWZpY2F0aW9ucygpOwogCisgICAgdm9pZCBkZXN0cm95SW5zcGVjdG9yVmll
dygpOworCiAgICAgdm9pZCB1cGRhdGVXaW5kb3dUaXRsZSgpOwogCiAgICAgTFJFU1VMVCBvbkdl
dE1pbk1heEluZm8oV1BBUkFNLCBMUEFSQU0pOwpAQCAtOTAsMTYgKzEwNywxNiBAQCBwcml2YXRl
OgogCiAgICAgV2ViVmlldyogbV9pbnNwZWN0ZWRXZWJWaWV3OwogICAgIEhXTkQgbV9pbnNwZWN0
ZWRXZWJWaWV3SHduZDsKLSAgICBIV05EIG1faHduZDsKLSAgICBDT01QdHI8V2ViVmlldz4gbV93
ZWJWaWV3OwotICAgIEhXTkQgbV93ZWJWaWV3SHduZDsKKyAgICBIV05EIG1fZnJvbnRlbmRId25k
OworICAgIFdlYkluc3BlY3RvckNsaWVudCogbV9pbnNwZWN0b3JDbGllbnQ7CisgICAgQ09NUHRy
PFdlYlZpZXc+IG1fZnJvbnRlbmRXZWJWaWV3OworICAgIEhXTkQgbV9mcm9udGVuZFdlYlZpZXdI
d25kOwogCiAgICAgYm9vbCBtX3Nob3VsZEF0dGFjaFdoZW5TaG93bjsKICAgICBib29sIG1fYXR0
YWNoZWQ7CiAKLSAgICBPd25QdHI8V2ViTm9kZUhpZ2hsaWdodD4gbV9oaWdobGlnaHQ7Ci0KICAg
ICBXZWJDb3JlOjpTdHJpbmcgbV9pbnNwZWN0ZWRVUkw7CisgICAgYm9vbCBtX2Rlc3Ryb3lpbmdJ
bnNwZWN0b3JWaWV3OwogCiAgICAgc3RhdGljIGZyaWVuZCBMUkVTVUxUIENBTExCQUNLIFdlYklu
c3BlY3RvclduZFByb2MoSFdORCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0pOwogfTsKZGlmZiAtLWdp
dCBhL1dlYktpdC93aW4vV2ViSW5zcGVjdG9yLmNwcCBiL1dlYktpdC93aW4vV2ViSW5zcGVjdG9y
LmNwcAppbmRleCBlNGFjMzJiLi4wMzM3NzExIDEwMDY0NAotLS0gYS9XZWJLaXQvd2luL1dlYklu
c3BlY3Rvci5jcHAKKysrIGIvV2ViS2l0L3dpbi9XZWJJbnNwZWN0b3IuY3BwCkBAIC0xMzEsMTkg
KzEzMSwxMSBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkluc3BlY3Rvcjo6Y2xvc2Uo
KQogCiBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkluc3BlY3Rvcjo6YXR0YWNoKCkKIHsK
LSAgICBpZiAobV93ZWJWaWV3KQotICAgICAgICBpZiAoUGFnZSogcGFnZSA9IG1fd2ViVmlldy0+
cGFnZSgpKQotICAgICAgICAgICAgcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5hdHRhY2hX
aW5kb3coKTsKLQogICAgIHJldHVybiBTX09LOwogfQogCiBIUkVTVUxUIFNURE1FVEhPRENBTExU
WVBFIFdlYkluc3BlY3Rvcjo6ZGV0YWNoKCkKIHsKLSAgICBpZiAobV93ZWJWaWV3KQotICAgICAg
ICBpZiAoUGFnZSogcGFnZSA9IG1fd2ViVmlldy0+cGFnZSgpKQotICAgICAgICAgICAgcGFnZS0+
aW5zcGVjdG9yQ29udHJvbGxlcigpLT5kZXRhY2hXaW5kb3coKTsKLQogICAgIHJldHVybiBTX09L
OwogfQogCmRpZmYgLS1naXQgYS9XZWJLaXQvd3gvQ2hhbmdlTG9nIGIvV2ViS2l0L3d4L0NoYW5n
ZUxvZwppbmRleCA0YWM3NjA5Li5kZjcyY2Q1IDEwMDY0NAotLS0gYS9XZWJLaXQvd3gvQ2hhbmdl
TG9nCisrKyBiL1dlYktpdC93eC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMC0wMy0x
MCAgWXVyeSBTZW1pa2hhdHNreSA8eXVyeXNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEludHJvZHVjZSBJbnNwZWN0b3JGcm9u
dGVuZENsaWVudCB0aGF0IHByb3ZpZGVzIEluc3BlY3RvckZyb250ZW5kIHdpdGggYW4gaW50ZXJm
YWNlIHRvIHRoZSBlbWJlZGRlci4gSW5zcGVjdG9yQ2xpZW50IG5vdyBzZXJ2ZXMgYXMgYSBkZWxl
Z2F0ZSBmb3IgSW5zcGVjdG9yQ29udHJvbGxlciBhbmQgZG9lcyBub3QgY29udGFpbiBtZXRob2Rz
IGZvciBtYW5hZ2luZyBpbnNwZWN0b3IgZnJvbnRlbmQgd2luZG93LiBUaGF0IGFsbG93cyB0byBj
cmVhdGUgcmVtb3RlIEluc3BlY3RvckZyb250ZW5kSG9zdC4KKworICAgICAgICBJbnRyb2R1Y2Ug
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQgdGhhdCB3b3VsZCBwcm92aWRlIEluc3BlY3RvckZyb250
ZW5kIHdpdGggYW4gaW50ZXJmYWNlIHRvIHRoZSBlbWJlZGRlcgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzUwMzYKKworICAgICAgICAqIFdlYktpdFN1
cHBvcnQvSW5zcGVjdG9yQ2xpZW50V3guY3BwOgorICAgICAgICAqIFdlYktpdFN1cHBvcnQvSW5z
cGVjdG9yQ2xpZW50V3guaDoKKwogMjAxMC0wMy0wMiAgQWRhbSBUcmVhdCAgPGF0cmVhdEByaW0u
Y29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmUgSHlhdHQuCmRpZmYgLS1naXQgYS9XZWJL
aXQvd3gvV2ViS2l0U3VwcG9ydC9JbnNwZWN0b3JDbGllbnRXeC5jcHAgYi9XZWJLaXQvd3gvV2Vi
S2l0U3VwcG9ydC9JbnNwZWN0b3JDbGllbnRXeC5jcHAKaW5kZXggZmYyMWFlMC4uNDNmYmIyYiAx
MDA2NDQKLS0tIGEvV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50V3guY3Bw
CisrKyBiL1dlYktpdC93eC9XZWJLaXRTdXBwb3J0L0luc3BlY3RvckNsaWVudFd4LmNwcApAQCAt
NDcsNDUgKzQ3LDggQEAgdm9pZCBJbnNwZWN0b3JDbGllbnRXeDo6aW5zcGVjdG9yRGVzdHJveWVk
KCkKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1QYWdlKiBJbnNwZWN0b3JDbGllbnRXeDo6
Y3JlYXRlUGFnZSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0K
LQotU3RyaW5nIEluc3BlY3RvckNsaWVudFd4Ojpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotU3RyaW5nIElu
c3BlY3RvckNsaWVudFd4OjpoaWRkZW5QYW5lbHMoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi12b2lkIEluc3BlY3RvckNsaWVudFd4OjpzaG93
V2luZG93KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotICAgIAotdm9pZCBJbnNwZWN0
b3JDbGllbnRXeDo6Y2xvc2VXaW5kb3coKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0K
LXZvaWQgSW5zcGVjdG9yQ2xpZW50V3g6OmF0dGFjaFdpbmRvdygpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDbGllbnRXeDo6ZGV0YWNoV2luZG93KCkKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQogCi12b2lkIEluc3BlY3RvckNsaWVudFd4OjpzZXRB
dHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpCit2b2lkIEluc3BlY3RvckNsaWVu
dFd4OjpvcGVuSW5zcGVjdG9yRnJvbnRlbmQoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlciop
OwogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CkBAIC0xMDAsMTEgKzYzLDYgQEAgdm9pZCBJ
bnNwZWN0b3JDbGllbnRXeDo6aGlkZUhpZ2hsaWdodCgpCiAgICAgbm90SW1wbGVtZW50ZWQoKTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JDbGllbnRXeDo6aW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBT
dHJpbmcmIG5ld1VSTCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCiB2b2lkIEluc3Bl
Y3RvckNsaWVudFd4Ojpwb3B1bGF0ZVNldHRpbmcoY29uc3QgU3RyaW5nJiBrZXksIFN0cmluZyog
c2V0dGluZykKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwpAQCAtMTE1LDkgKzczLDQgQEAgdm9p
ZCBJbnNwZWN0b3JDbGllbnRXeDo6c3RvcmVTZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5LCBjb25z
dCBTdHJpbmcmIHNldHRpbmcpCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JDbGllbnRXeDo6aW5zcGVjdG9yV2luZG93T2JqZWN0Q2xlYXJlZCgpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQogfTsKZGlmZiAtLWdpdCBhL1dlYktpdC93eC9XZWJLaXRTdXBw
b3J0L0luc3BlY3RvckNsaWVudFd4LmggYi9XZWJLaXQvd3gvV2ViS2l0U3VwcG9ydC9JbnNwZWN0
b3JDbGllbnRXeC5oCmluZGV4IGY5MDU4MTcuLjc2NzVkYzEgMTAwNjQ0Ci0tLSBhL1dlYktpdC93
eC9XZWJLaXRTdXBwb3J0L0luc3BlY3RvckNsaWVudFd4LmgKKysrIGIvV2ViS2l0L3d4L1dlYktp
dFN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50V3guaApAQCAtNDEsMjkgKzQxLDEzIEBAIHB1YmxpYzoK
IAogICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0b3JEZXN0cm95ZWQoKTsKIAotICAgIHZpcnR1YWwg
UGFnZSogY3JlYXRlUGFnZSgpOwotCi0gICAgdmlydHVhbCBTdHJpbmcgbG9jYWxpemVkU3RyaW5n
c1VSTCgpOwotCi0gICAgdmlydHVhbCBTdHJpbmcgaGlkZGVuUGFuZWxzKCk7Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgc2hvd1dpbmRvdygpOwotICAgIHZpcnR1YWwgdm9pZCBjbG9zZVdpbmRvdygpOwot
Ci0gICAgdmlydHVhbCB2b2lkIGF0dGFjaFdpbmRvdygpOwotICAgIHZpcnR1YWwgdm9pZCBkZXRh
Y2hXaW5kb3coKTsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1
bnNpZ25lZCBoZWlnaHQpOworICAgIHZpcnR1YWwgdm9pZCBvcGVuSW5zcGVjdG9yRnJvbnRlbmQo
V2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlciopOwogCiAgICAgdmlydHVhbCB2b2lkIGhpZ2hs
aWdodChOb2RlKik7CiAgICAgdmlydHVhbCB2b2lkIGhpZGVIaWdobGlnaHQoKTsKIAotICAgIHZp
cnR1YWwgdm9pZCBpbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYgbmV3VVJMKTsKLQog
ICAgIHZpcnR1YWwgdm9pZCBwb3B1bGF0ZVNldHRpbmcoY29uc3QgU3RyaW5nJiBrZXksIFN0cmlu
ZyogdmFsdWUpOwogICAgIHZpcnR1YWwgdm9pZCBzdG9yZVNldHRpbmcoY29uc3QgU3RyaW5nJiBr
ZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpOwotCi0gICAgdmlydHVhbCB2b2lkIGluc3BlY3Rvcldp
bmRvd09iamVjdENsZWFyZWQoKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50594</attachid>
            <date>2010-03-12 06:52:41 -0800</date>
            <delta_ts>2010-03-16 02:42:36 -0700</delta_ts>
            <desc>patch</desc>
            <filename>frontend-client5.patch</filename>
            <type>text/plain</type>
            <size>169216</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MzYxY2U0ZC4uOGZlMzcwMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMTEgQEAKKzIwMTAtMDMtMTEgIFl1cnkgU2VtaWto
YXRza3kgPHl1cnlzQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBJbnRyb2R1Y2UgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQgdGhh
dCBwcm92aWRlcyBJbnNwZWN0b3JGcm9udGVuZCB3aXRoIGFuIGludGVyZmFjZSB0byB0aGUgZW1i
ZWRkZXIuIEluc3BlY3RvckNsaWVudCBub3cgc2VydmVzIGFzIGEgZGVsZWdhdGUgZm9yIEluc3Bl
Y3RvckNvbnRyb2xsZXIgYW5kIGRvZXMgbm90IGNvbnRhaW4gbWV0aG9kcyBmb3IgbWFuYWdpbmcg
aW5zcGVjdG9yIGZyb250ZW5kIHdpbmRvdy4gVGhhdCBhbGxvd3MgdG8gY3JlYXRlIHJlbW90ZSBJ
bnNwZWN0b3JGcm9udGVuZEhvc3QuCisKKyAgICAgICAgSW50cm9kdWNlIEluc3BlY3RvckZyb250
ZW5kQ2xpZW50IHRoYXQgd291bGQgcHJvdmlkZSBJbnNwZWN0b3JGcm9udGVuZCB3aXRoIGFuIGlu
dGVyZmFjZSB0byB0aGUgZW1iZWRkZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTM1MDM2CisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiAoT09QUyEpCisK
KyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLkluc3BlY3Rvci5l
eHA6CisgICAgICAgICogV2ViQ29yZS5iYXNlLmV4cDoKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6
CisgICAgICAgICogV2ViQ29yZS5vcmRlcjoKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAg
ICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaW5zcGVj
dG9yL0NvbnNvbGVNZXNzYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnNvbGVNZXNzYWdl
OjphZGRUb0Zyb250ZW5kKToKKyAgICAgICAgKiBpbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuaDoK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ2xpZW50Lmg6CisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
Q29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JDb250cm9sbGVyOjp+SW5zcGVjdG9yQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0ZWRQYWdlRGVzdHJveWVkKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OndpbmRvd1Zpc2libGUpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZnJvbnRlbmRSZWFkeSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjp3aWxsQ2xvc2VGcm9udGVuZCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjphZGRDb25zb2xlTWVzc2FnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRJbnNwZWN0b3JGcm9udGVuZENs
aWVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0ZWRX
aW5kb3dTY3JpcHRPYmplY3RDbGVhcmVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNv
bnRyb2xsZXI6OnNldEZyb250ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRy
b2xsZXI6OnNob3cpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6Y2xv
c2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6cmVsZWFzZURPTUFn
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnBvcHVsYXRlU2Ny
aXB0T2JqZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRD
b21taXRMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmdldFBy
b2ZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZW5hYmxlRGVi
dWdnZXIpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpoYXNJbnNwZWN0b3JGcm9udGVuZENs
aWVudCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kOjpJbnNwZWN0b3JGcm9udGVuZCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZDo6fkluc3BlY3RvckZyb250ZW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kOjphZGRDb25zb2xlTWVzc2FnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZDo6YnJpbmdUb0Zyb250KToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kOjppbnNwZWN0ZWRVUkxDaGFuZ2VkKToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuaDoKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JGcm9udGVuZENsaWVudDo6fkluc3BlY3RvckZyb250ZW5kQ2xpZW50KToKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RnJvbnRlbmRNZW51UHJvdmlkZXI6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpGcm9udGVuZE1lbnVQcm92aWRlcjo6ZGlzY29ubmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGcm9udGVuZE1lbnVQcm92aWRlcjo6RnJvbnRlbmRNZW51UHJvdmlkZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6RnJvbnRlbmRNZW51UHJvdmlkZXI6On5Gcm9udGVuZE1lbnVQcm92aWRl
cik6CisgICAgICAgIChXZWJDb3JlOjpGcm9udGVuZE1lbnVQcm92aWRlcjo6cG9wdWxhdGVDb250
ZXh0TWVudSk6CisgICAgICAgIChXZWJDb3JlOjpGcm9udGVuZE1lbnVQcm92aWRlcjo6Y29udGV4
dE1lbnVJdGVtU2VsZWN0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJvbnRlbmRNZW51UHJvdmlk
ZXI6OmNvbnRleHRNZW51Q2xlYXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9u
dGVuZENsaWVudExvY2FsOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6On5JbnNwZWN0b3JGcm9udGVu
ZENsaWVudExvY2FsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50
TG9jYWw6OndpbmRvd09iamVjdENsZWFyZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RnJvbnRlbmRDbGllbnRMb2NhbDo6ZnJvbnRlbmRMb2FkZWQpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6Y2FuQXR0YWNoV2luZG93KToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OmNoYW5nZUF0dGFjaGVkV2lu
ZG93SGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9j
YWw6Om1vdmVXaW5kb3dCeSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENs
aWVudExvY2FsOjpzaG93Q29udGV4dE1lbnUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RnJvbnRlbmRDbGllbnRMb2NhbDo6c2V0QXR0YWNoZWRXaW5kb3cpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6cmVzdG9yZUF0dGFjaGVkV2luZG93SGVp
Z2h0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OmNv
bnN0cmFpbmVkQXR0YWNoZWRXaW5kb3dIZWlnaHQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmg6IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9J
bnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJv
bnRlbmRIb3N0OjpJbnNwZWN0b3JGcm9udGVuZEhvc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yRnJvbnRlbmRIb3N0Ojp+SW5zcGVjdG9yRnJvbnRlbmRIb3N0KToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckZyb250ZW5kSG9zdDo6bG9hZGVkKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckZyb250ZW5kSG9zdDo6YXR0YWNoKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckZyb250ZW5kSG9zdDo6ZGV0YWNoKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZy
b250ZW5kSG9zdDo6Y2xvc2VXaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJv
bnRlbmRIb3N0OjpicmluZ1RvRnJvbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJv
bnRlbmRIb3N0OjppbnNwZWN0ZWRVUkxDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckZyb250ZW5kSG9zdDo6Y2FuQXR0YWNoV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckZyb250ZW5kSG9zdDo6c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRIb3N0Ojptb3ZlV2luZG93QnkpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRIb3N0OjpzaG93Q29udGV4dE1lbnUpOgorICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckZyb250ZW5kSG9zdDo6Y3JlYXRlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yRnJvbnRlbmRIb3N0LmlkbDoKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0lu
c3BlY3RvckZyb250ZW5kSG9zdFN0dWIuanM6CisgICAgICAgICguV2ViSW5zcGVjdG9yLkluc3Bl
Y3RvckZyb250ZW5kSG9zdFN0dWIucHJvdG90eXBlLmJyaW5nVG9Gcm9udCk6CisgICAgICAgICgu
V2ViSW5zcGVjdG9yLkluc3BlY3RvckZyb250ZW5kSG9zdFN0dWIucHJvdG90eXBlLmluc3BlY3Rl
ZFVSTENoYW5nZWQpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpz
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLmxvYWRlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
Y2xvc2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLmJyaW5nVG9Gcm9udCk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuaW5zcGVjdGVkVVJMQ2hhbmdlZCk6CisgICAgICAgICogbG9hZGVyL0VtcHR5
Q2xpZW50cy5oOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlJbnNwZWN0b3JDbGllbnQ6Om9wZW5J
bnNwZWN0b3JGcm9udGVuZCk6CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpkaXNwYXRjaERpZENsZWFyV2luZG93T2JqZWN0
SW5Xb3JsZCk6CisgICAgICAgICogcGFnZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBh
Z2U6OlBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6flBhZ2UpOgorICAgICAgICAqIHBh
Z2UvUGFnZS5oOgorICAgICAgICAqIHBsYXRmb3JtL0NvbnRleHRNZW51LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRleHRNZW51Ojpwb3B1bGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250
ZXh0TWVudTo6YWRkSW5zcGVjdEVsZW1lbnRJdGVtKToKKworPDw8PDw8PCBIRUFEOldlYkNvcmUv
Q2hhbmdlTG9nCiAyMDEwLTAzLTEyICBEYW4gV2luc2hpcCAgPGRhbndAZ25vbWUub3JnPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IEd1c3Rhdm8gTm9yb25oYS4KQEAgLTQwNSw2ICs1MTMsMTE0IEBA
CiAgICAgICAgICAgICBrZXkgbW9kaWZpZXJzIG9uIEFuZHJvaWQuCiAgICAgICAgICogcGxhdGZv
cm0vYW5kcm9pZC9QbGF0Zm9ybVRvdWNoRXZlbnRBbmRyb2lkLmNwcDoKICAgICAgICAgKFdlYkNv
cmU6OlBsYXRmb3JtVG91Y2hFdmVudDo6UGxhdGZvcm1Ub3VjaEV2ZW50KTogZGl0dG8uCis9PT09
PT09CisyMDEwLTAzLTExICBZdXJ5IFNlbWlraGF0c2t5IDx5dXJ5c0BjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW50cm9kdWNl
IEluc3BlY3RvckZyb250ZW5kQ2xpZW50IHRoYXQgcHJvdmlkZXMgSW5zcGVjdG9yRnJvbnRlbmQg
d2l0aCBhbiBpbnRlcmZhY2UgdG8gdGhlIGVtYmVkZGVyLiBJbnNwZWN0b3JDbGllbnQgbm93IHNl
cnZlcyBhcyBhIGRlbGVnYXRlIGZvciBJbnNwZWN0b3JDb250cm9sbGVyIGFuZCBkb2VzIG5vdCBj
b250YWluIG1ldGhvZHMgZm9yIG1hbmFnaW5nIGluc3BlY3RvciBmcm9udGVuZCB3aW5kb3cuIFRo
YXQgYWxsb3dzIHRvIGNyZWF0ZSByZW1vdGUgSW5zcGVjdG9yRnJvbnRlbmRIb3N0LgorCisgICAg
ICAgIEludHJvZHVjZSBJbnNwZWN0b3JGcm9udGVuZENsaWVudCB0aGF0IHdvdWxkIHByb3ZpZGUg
SW5zcGVjdG9yRnJvbnRlbmQgd2l0aCBhbiBpbnRlcmZhY2UgdG8gdGhlIGVtYmVkZGVyCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNTAzNgorCisgICAg
ICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMhKQorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06Cisg
ICAgICAgICogV2ViQ29yZS5JbnNwZWN0b3IuZXhwOgorICAgICAgICAqIFdlYkNvcmUuYmFzZS5l
eHA6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUub3JkZXI6Cisg
ICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIGluc3BlY3Rvci9Db25zb2xlTWVzc2FnZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDb25zb2xlTWVzc2FnZTo6YWRkVG9Gcm9udGVuZCk6CisgICAgICAgICog
aW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
ckNsaWVudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6Okluc3BlY3RvckNvbnRyb2xs
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6fkluc3BlY3RvckNv
bnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zcGVj
dGVkUGFnZURlc3Ryb3llZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVy
Ojp3aW5kb3dWaXNpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6
OmZyb250ZW5kUmVhZHkpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6
d2lsbENsb3NlRnJvbnRlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxl
cjo6YWRkQ29uc29sZU1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJv
bGxlcjo6c2V0SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQ29udHJvbGxlcjo6aW5zcGVjdGVkV2luZG93U2NyaXB0T2JqZWN0Q2xlYXJlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRGcm9udGVuZCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpzaG93KToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckNvbnRyb2xsZXI6OnJlbGVhc2VET01BZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JDb250cm9sbGVyOjpwb3B1bGF0ZVNjcmlwdE9iamVjdHMpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkQ29tbWl0TG9hZCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JDb250cm9sbGVyOjpnZXRQcm9maWxlKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckNvbnRyb2xsZXI6OmVuYWJsZURlYnVnZ2VyKToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yQ29udHJvbGxlci5oOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJv
bGxlcjo6aGFzSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9J
bnNwZWN0b3JGcm9udGVuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVu
ZDo6SW5zcGVjdG9yRnJvbnRlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRl
bmQ6On5JbnNwZWN0b3JGcm9udGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9u
dGVuZDo6YWRkQ29uc29sZU1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJv
bnRlbmQ6OmJyaW5nVG9Gcm9udCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVu
ZDo6aW5zcGVjdGVkVVJMQ2hhbmdlZCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckZy
b250ZW5kLmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50Lmg6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6On5JbnNw
ZWN0b3JGcm9udGVuZENsaWVudCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckZyb250
ZW5kQ2xpZW50TG9jYWwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZyb250ZW5kTWVu
dVByb3ZpZGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RnJvbnRlbmRNZW51UHJvdmlk
ZXI6OmRpc2Nvbm5lY3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJvbnRlbmRNZW51UHJvdmlkZXI6
OkZyb250ZW5kTWVudVByb3ZpZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZyb250ZW5kTWVudVBy
b3ZpZGVyOjp+RnJvbnRlbmRNZW51UHJvdmlkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RnJvbnRl
bmRNZW51UHJvdmlkZXI6OnBvcHVsYXRlQ29udGV4dE1lbnUpOgorICAgICAgICAoV2ViQ29yZTo6
RnJvbnRlbmRNZW51UHJvdmlkZXI6OmNvbnRleHRNZW51SXRlbVNlbGVjdGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OkZyb250ZW5kTWVudVByb3ZpZGVyOjpjb250ZXh0TWVudUNsZWFyZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6SW5zcGVjdG9yRnJv
bnRlbmRDbGllbnRMb2NhbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENs
aWVudExvY2FsOjp+SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbCk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjp3aW5kb3dPYmplY3RDbGVhcmVkKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OmZyb250ZW5k
TG9hZGVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6
OmNhbkF0dGFjaFdpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENs
aWVudExvY2FsOjpjaGFuZ2VBdHRhY2hlZFdpbmRvd0hlaWdodCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjptb3ZlV2luZG93QnkpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6c2hvd0NvbnRleHRNZW51KToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OnNldEF0dGFj
aGVkV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9j
YWw6OnJlc3RvcmVBdHRhY2hlZFdpbmRvd0hlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjpjb25zdHJhaW5lZEF0dGFjaGVkV2luZG93SGVpZ2h0
KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5oOiBB
ZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kSG9zdDo6SW5zcGVjdG9yRnJvbnRlbmRI
b3N0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kSG9zdDo6fkluc3BlY3Rv
ckZyb250ZW5kSG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZEhvc3Q6
OmxvYWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OmF0dGFj
aCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OmRldGFjaCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OmNsb3NlV2luZG93KToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kSG9zdDo6YnJpbmdUb0Zyb250KToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kSG9zdDo6aW5zcGVjdGVkVVJMQ2hhbmdl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OmNhbkF0dGFjaFdp
bmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OnNldEF0dGFj
aGVkV2luZG93SGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kSG9z
dDo6bW92ZVdpbmRvd0J5KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kSG9z
dDo6c2hvd0NvbnRleHRNZW51KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRl
bmRIb3N0Lmg6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OmNyZWF0
ZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5pZGw6CisgICAg
ICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0b3JGcm9udGVuZEhvc3RTdHViLmpzOgor
ICAgICAgICAoLldlYkluc3BlY3Rvci5JbnNwZWN0b3JGcm9udGVuZEhvc3RTdHViLnByb3RvdHlw
ZS5icmluZ1RvRnJvbnQpOgorICAgICAgICAoLldlYkluc3BlY3Rvci5JbnNwZWN0b3JGcm9udGVu
ZEhvc3RTdHViLnByb3RvdHlwZS5pbnNwZWN0ZWRVUkxDaGFuZ2VkKToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5sb2Fk
ZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLmNsb3NlKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5icmluZ1RvRnJvbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLmluc3BlY3RlZFVSTENoYW5n
ZWQpOgorICAgICAgICAqIGxvYWRlci9FbXB0eUNsaWVudHMuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkVtcHR5SW5zcGVjdG9yQ2xpZW50OjpvcGVuSW5zcGVjdG9yRnJvbnRlbmQpOgorICAgICAgICAq
IGxvYWRlci9GcmFtZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6
ZGlzcGF0Y2hEaWRDbGVhcldpbmRvd09iamVjdEluV29ybGQpOgorICAgICAgICAqIHBhZ2UvUGFn
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpQYWdlKToKKyAgICAgICAgKFdlYkNvcmU6
OlBhZ2U6On5QYWdlKToKKyAgICAgICAgKiBwYWdlL1BhZ2UuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9Db250ZXh0TWVudS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0TWVudTo6cG9wdWxh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnU6OmFkZEluc3BlY3RFbGVtZW50SXRl
bSk6Cis+Pj4+Pj4+IGZpeDpXZWJDb3JlL0NoYW5nZUxvZwogCiAyMDEwLTAzLTEwICBTdGV2ZSBC
bG9jayAgPHN0ZXZlYmxvY2tAZ29vZ2xlLmNvbT4KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9HTlVt
YWtlZmlsZS5hbSBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggMWI0ZmRiYy4uOTcyM2Rk
OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9XZWJDb3JlL0dOVW1h
a2VmaWxlLmFtCkBAIC0xMjM0LDYgKzEyMzQsOSBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaCBcCiAJV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRnJvbnRlbmQuY3BwIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JG
cm9udGVuZC5oIFwKKwlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudC5o
IFwKKwlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmNwcCBc
CisJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5oIFwKIAlX
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwIFwKIAlXZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuaCBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yUmVzb3VyY2UuY3BwIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5JbnNwZWN0
b3IuZXhwIGIvV2ViQ29yZS9XZWJDb3JlLkluc3BlY3Rvci5leHAKaW5kZXggMzc5YjdhMi4uZDVj
MjFjMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLkluc3BlY3Rvci5leHAKKysrIGIvV2Vi
Q29yZS9XZWJDb3JlLkluc3BlY3Rvci5leHAKQEAgLTEsMTEgKzEsOSBAQAogX19aTjdXZWJDb3Jl
MTlJbnNwZWN0b3JDb250cm9sbGVyMTBzZXRTZXR0aW5nRVJLTlNfNlN0cmluZ0VTM18KLV9fWk43
V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjEyYXR0YWNoV2luZG93RXYKLV9fWk43V2ViQ29y
ZTE5SW5zcGVjdG9yQ29udHJvbGxlcjEyZGV0YWNoV2luZG93RXYKIF9fWk43V2ViQ29yZTE5SW5z
cGVjdG9yQ29udHJvbGxlcjE0ZW5hYmxlRGVidWdnZXJFdgogX19aTjdXZWJDb3JlMTlJbnNwZWN0
b3JDb250cm9sbGVyMTRlbmFibGVQcm9maWxlckViYgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JD
b250cm9sbGVyMTVkaXNhYmxlRGVidWdnZXJFYgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250
cm9sbGVyMTVkaXNhYmxlUHJvZmlsZXJFYgotX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9s
bGVyMTZzZXRXaW5kb3dWaXNpYmxlRWJiCitfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xs
ZXIyNnNldEluc3BlY3RvckZyb250ZW5kQ2xpZW50RU4zV1RGMTBQYXNzT3duUHRySU5TXzIzSW5z
cGVjdG9yRnJvbnRlbmRDbGllbnRFRUUKIF9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxl
cjI2c3RvcFVzZXJJbml0aWF0ZWRQcm9maWxpbmdFdgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JD
b250cm9sbGVyMjdzdGFydFVzZXJJbml0aWF0ZWRQcm9maWxpbmdFUE5TXzVUaW1lcklTMF9FRQog
X19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyNHNob3dFdgpAQCAtMTgsMyArMTYsMTMg
QEAgX19aTks3V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjdlbmFibGVkRXYKIF9fWk5LN1dl
YkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXI3c2V0dGluZ0VSS05TXzZTdHJpbmdFCiBfX1pON1dl
YkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIyMXN0YXJ0VGltZWxpbmVQcm9maWxlckV2CiBfX1pO
N1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIyMHN0b3BUaW1lbGluZVByb2ZpbGVyRXYKK19f
Wk43V2ViQ29yZTI4SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbEMyRVBOU18xOUluc3BlY3Rv
ckNvbnRyb2xsZXJFUE5TXzRQYWdlRQorX19aTjdXZWJDb3JlMjhJbnNwZWN0b3JGcm9udGVuZENs
aWVudExvY2FsRDJFdgorX19aTjdXZWJDb3JlMjhJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2Fs
MTl3aW5kb3dPYmplY3RDbGVhcmVkRXYKK19fWk43V2ViQ29yZTI4SW5zcGVjdG9yRnJvbnRlbmRD
bGllbnRMb2NhbDE0ZnJvbnRlbmRMb2FkZWRFdgorX19aTjdXZWJDb3JlMjhJbnNwZWN0b3JGcm9u
dGVuZENsaWVudExvY2FsMjdyZXN0b3JlQXR0YWNoZWRXaW5kb3dIZWlnaHRFdgorX19aTjdXZWJD
b3JlMjhJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsMTJtb3ZlV2luZG93QnlFZmYKK19fWk43
V2ViQ29yZTI4SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDE1Y2FuQXR0YWNoV2luZG93RXYK
K19fWk43V2ViQ29yZTI4SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDE1c2hvd0NvbnRleHRN
ZW51RVBOU181RXZlbnRFUktOM1dURjZWZWN0b3JJUE5TXzE1Q29udGV4dE1lbnVJdGVtRUxtMEVF
RQorX19aTjdXZWJDb3JlMjhJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsMTdzZXRBdHRhY2hl
ZFdpbmRvd0ViCitfX1pON1dlYkNvcmUyOEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwyNmNo
YW5nZUF0dGFjaGVkV2luZG93SGVpZ2h0RWoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5i
YXNlLmV4cCBiL1dlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAppbmRleCA0MzY0YWVhLi45YmFmYWQ3
IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAKKysrIGIvV2ViQ29yZS9XZWJD
b3JlLmJhc2UuZXhwCkBAIC04NzQsNyArODc0LDYgQEAgX19aTks3V2ViQ29yZTE2VmlzaWJsZVNl
bGVjdGlvbjIzaXNDb250ZW50UmljaGx5RWRpdGFibGVFdgogX19aTks3V2ViQ29yZTE2VmlzaWJs
ZVNlbGVjdGlvbjVpc0FsbEVOU18yMVN0YXlJbkVkaXRhYmxlQ29udGVudEUKIF9fWk5LN1dlYkNv
cmUxN1Jlc291cmNlRXJyb3JCYXNlOGxhenlJbml0RXYKIF9fWk5LN1dlYkNvcmUxOUFuaW1hdGlv
bkNvbnRyb2xsZXIyNG51bWJlck9mQWN0aXZlQW5pbWF0aW9uc0V2Ci1fX1pOSzdXZWJDb3JlMTlJ
bnNwZWN0b3JDb250cm9sbGVyMTVjYW5BdHRhY2hXaW5kb3dFdgogX19aTks3V2ViQ29yZTE5UmVz
b3VyY2VSZXF1ZXN0QmFzZTEwaHR0cE1ldGhvZEV2CiBfX1pOSzdXZWJDb3JlMTlSZXNvdXJjZVJl
cXVlc3RCYXNlM3VybEV2CiBfX1pOSzdXZWJDb3JlMTlSZXNvdXJjZVJlcXVlc3RCYXNlN2lzRW1w
dHlFdgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQppbmRleCAyYzhlM2VhLi5lYzBiMTE1IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQorKysgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMTYyNSw2ICsxNjI1LDkgQEAKICAg
ICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlLmgnLAogICAg
ICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5jcHAnLAogICAgICAgICAgICAg
J2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5oJywKKyAgICAgICAgICAgICdpbnNwZWN0b3Iv
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaCcsCisgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3Bl
Y3RvckZyb250ZW5kQ2xpZW50TG9jYWwuY3BwJywKKyAgICAgICAgICAgICdpbnNwZWN0b3IvSW5z
cGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5oJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5z
cGVjdG9yRnJvbnRlbmRIb3N0LmNwcCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3Rv
ckZyb250ZW5kSG9zdC5oJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3Vy
Y2UuY3BwJywKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5vcmRlciBiL1dlYkNvcmUvV2Vi
Q29yZS5vcmRlcgppbmRleCBhOGQyMGZkLi40OGYzMjFiIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dl
YkNvcmUub3JkZXIKKysrIGIvV2ViQ29yZS9XZWJDb3JlLm9yZGVyCkBAIC0yMzc4OSw3ICsyMzc4
OSw2IEBAIF9fWk43V2ViQ29yZTE4U2NyaXB0RnVuY3Rpb25DYWxsMTRhcHBlbmRBcmd1bWVudEVi
CiBfX1pON1dlYkNvcmUxOFNjcmlwdEZ1bmN0aW9uQ2FsbDRjYWxsRXYKIF9fWk43V2ViQ29yZTE4
U2NyaXB0RnVuY3Rpb25DYWxsNGNhbGxFUmJiCiBfX1pON1dlYkNvcmU0NGpzSW5zcGVjdG9yQ29u
dHJvbGxlclByb3RvdHlwZUZ1bmN0aW9uQXR0YWNoRVBOM0pTQzlFeGVjU3RhdGVFUE5TMF84SlNP
YmplY3RFTlMwXzdKU1ZhbHVlRVJLTlMwXzdBcmdMaXN0RQotX19aTjdXZWJDb3JlMTlJbnNwZWN0
b3JDb250cm9sbGVyMTJhdHRhY2hXaW5kb3dFdgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250
cm9sbGVyMjFwb3B1bGF0ZVNjcmlwdE9iamVjdHNFdgogX19aTjdXZWJDb3JlTDE4Y2FsbFNpbXBs
ZUZ1bmN0aW9uRVBOM0pTQzlFeGVjU3RhdGVFUktOU18xMlNjcmlwdE9iamVjdEVQS2MKIF9fWk43
V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjlzaG93UGFuZWxFTlMwXzEzU3BlY2lhbFBhbmVs
c0UKQEAgLTIzODUwLDcgKzIzODQ5LDYgQEAgX19aTjdXZWJDb3JlTDE5ZHJhd0hpZ2hsaWdodEZv
ckJveEVSTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU185RmxvYXRRdWFkRVM0X1M0X1MKIF9fWk43
V2ViQ29yZUwxNmRyYXdPdXRsaW5lZFF1YWRFUk5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfOUZs
b2F0UXVhZEVSS05TXzVDb2xvckUKIF9fWk43V2ViQ29yZUwxMHF1YWRUb1BhdGhFUktOU185Rmxv
YXRRdWFkRQogX19aTjdXZWJDb3JlNDRqc0luc3BlY3RvckNvbnRyb2xsZXJQcm90b3R5cGVGdW5j
dGlvbkRldGFjaEVQTjNKU0M5RXhlY1N0YXRlRVBOUzBfOEpTT2JqZWN0RU5TMF83SlNWYWx1ZUVS
S05TMF83QXJnTGlzdEUKLV9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjEyZGV0YWNo
V2luZG93RXYKIF9fWk43V2ViQ29yZTU2anNJbnNwZWN0b3JDb250cm9sbGVyUHJvdG90eXBlRnVu
Y3Rpb25Nb3ZlQnlVbnJlc3RyaWN0ZWRFUE4zSlNDOUV4ZWNTdGF0ZUVQTlMwXzhKU09iamVjdEVO
UzBfN0pTVmFsdWVFUktOUzBfN0FyZ0wKIF9fWk5LN1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xs
ZXIxMm1vdmVXaW5kb3dCeUVmZgogX19aTjdXZWJDb3JlTDI0ZHJhd091dGxpbmVkUXVhZFdpdGhD
bGlwRVJOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzlGbG9hdFF1YWRFUzRfUktOU181Q29sb3JF
CmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvV2ViQ29yZS9XZWJDb3JlLnBybwpp
bmRleCA3ZDFhNTZhLi4wOTU1ZWVjIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUucHJvCisr
KyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KQEAgLTY5NSw2ICs2OTUsNyBAQCBTT1VSQ0VTICs9IFwK
ICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5z
cGVjdG9yRE9NU3RvcmFnZVJlc291cmNlLmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckZy
b250ZW5kLmNwcCBcCisgICAgaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwu
Y3BwIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcCBcCiAgICAgaW5z
cGVjdG9yL0luc3BlY3RvclJlc291cmNlLmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclRp
bWVsaW5lQWdlbnQuY3BwIFwKQEAgLTEzOTgsNiArMTM5OSw4IEBAIEhFQURFUlMgKz0gXAogICAg
IGluc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmggXAogICAgIGluc3BlY3Rvci9J
bnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuaCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckZy
b250ZW5kLmggXAorICAgIGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudC5oIFwKKyAg
ICBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5oIFwKICAgICBpbnNwZWN0
b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JSZXNv
dXJjZS5oIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oIFwKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMzkzM2ZlMy4uYjVjMWNm
OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
KysrIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTQ4NTYs
NiArNDg1Niw5IEBACiAJCUVENTAxREM2MEIyNDlGMjkwMEFFMThEOSAvKiBFZGl0b3JNYWMubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFRDUwMURDNTBC
MjQ5RjI5MDBBRTE4RDkgLyogRWRpdG9yTWFjLm1tICovOyB9OwogCQlFREUzQTUwMDBDN0E0MzA2
MDA5NTZBMzcgLyogQ29sb3JNYWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEVERTNBNEZGMEM3QTQzMDYwMDk1NkEzNyAvKiBDb2xvck1hYy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUVERUM5ODAzMEFF
RDdFMTcwMDU5MTM3RiAvKiBXZWJDb3JlUHJlZml4LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFREVDOTgwMjBBRUQ3RTE3MDA1OTEzN0YgLyogV2ViQ29y
ZVByZWZpeC5oICovOyB9OworCQlGMzQ0QzcxNDExMjVCODJDMDBGMjZFRUUgLyogSW5zcGVjdG9y
RnJvbnRlbmRDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEYzNDRDNzEyMTEyNUI4MkMwMEYyNkVFRSAvKiBJbnNwZWN0b3JGcm9udGVuZENsaWVu
dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUYz
NDRDNzUzMTEyOTREOUQwMEYyNkVFRSAvKiBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGMzQ0Qzc1MjEx
Mjk0RDlEMDBGMjZFRUUgLyogSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUYzNDRDNzU4MTEyOTRG
RjYwMEYyNkVFRSAvKiBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEYzNDRDNzU3MTEyOTRGRjYwMEYy
NkVFRSAvKiBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmNwcCAqLzsgfTsKIAkJRjM2NDRB
RkYxMTE5ODA1OTAwRTBENTM3IC8qIEluamVjdGVkU2NyaXB0LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEYzNjQ0QUZEMTExOTgwNTkwMEUwRDUzNyAv
KiBJbmplY3RlZFNjcmlwdC5jcHAgKi87IH07CiAJCUYzNjQ0QjAwMTExOTgwNTkwMEUwRDUzNyAv
KiBJbmplY3RlZFNjcmlwdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRjM2NDRBRkUxMTE5ODA1OTAwRTBENTM3IC8qIEluamVjdGVkU2NyaXB0LmggKi87
IH07CiAJCUY0RUFGNEFFMTBDNzQyQjEwMDkxMDBEMyAvKiBPcGVuVHlwZVNhbml0aXplci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNEVBRjRBQzEw
Qzc0MkIxMDA5MTAwRDMgLyogT3BlblR5cGVTYW5pdGl6ZXIuY3BwICovOyB9OwpAQCAtMTAxODks
NiArMTAxOTIsOSBAQAogCQlFRDUwMURDNTBCMjQ5RjI5MDBBRTE4RDkgLyogRWRpdG9yTWFjLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IEVkaXRvck1hYy5tbTsg
cGF0aCA9IG1hYy9FZGl0b3JNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUVE
RTNBNEZGMEM3QTQzMDYwMDk1NkEzNyAvKiBDb2xvck1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBDb2xvck1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
REVDOTgwMjBBRUQ3RTE3MDA1OTEzN0YgLyogV2ViQ29yZVByZWZpeC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29yZVByZWZpeC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB0YWJXaWR0aCA9IDQ7IHVzZXNUYWJzID0gMDsgfTsKKwkJRjM0NEM3MTIxMTI1QjgyQzAw
RjI2RUVFIC8qIEluc3BlY3RvckZyb250ZW5kQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEluc3BlY3RvckZyb250ZW5kQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUYzNDRDNzUyMTEyOTREOUQwMEYyNkVFRSAvKiBJbnNwZWN0b3JGcm9udGVu
ZENsaWVudExvY2FsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50TG9jYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRjM0
NEM3NTcxMTI5NEZGNjAwRjI2RUVFIC8qIEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVjdG9yRnJvbnRlbmRD
bGllbnRMb2NhbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUYzNjQ0QUZEMTEx
OTgwNTkwMEUwRDUzNyAvKiBJbmplY3RlZFNjcmlwdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBJbmplY3RlZFNjcmlwdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUYzNjQ0QUZFMTExOTgwNTkwMEUwRDUzNyAvKiBJbmplY3RlZFNjcmlwdC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmplY3RlZFNjcmlwdC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlGNEVBRjRBQzEwQzc0MkIxMDA5MTAwRDMgLyogT3BlblR5
cGVTYW5pdGl6ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gT3Bl
blR5cGVTYW5pdGl6ZXIuY3BwOyBwYXRoID0gb3BlbnR5cGUvT3BlblR5cGVTYW5pdGl6ZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTA3MjQsNiArMTA3MzAsOSBAQAogCQkJ
CTQxRjA2MTcyMEY1RjAwQUMwMEEwN0VBQyAvKiBJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2Uu
aCAqLywKIAkJCQk3QUVEM0UwMzBGQkIxRUFBMDBEMkIwM0MgLyogSW5zcGVjdG9yRnJvbnRlbmQu
Y3BwICovLAogCQkJCTdBRUQzRTA0MEZCQjFFQUEwMEQyQjAzQyAvKiBJbnNwZWN0b3JGcm9udGVu
ZC5oICovLAorCQkJCUYzNDRDNzEyMTEyNUI4MkMwMEYyNkVFRSAvKiBJbnNwZWN0b3JGcm9udGVu
ZENsaWVudC5oICovLAorCQkJCUYzNDRDNzU3MTEyOTRGRjYwMEYyNkVFRSAvKiBJbnNwZWN0b3JG
cm9udGVuZENsaWVudExvY2FsLmNwcCAqLywKKwkJCQlGMzQ0Qzc1MjExMjk0RDlEMDBGMjZFRUUg
LyogSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5oICovLAogCQkJCTdBMEU3NzBCMTBDMDBB
ODgwMEEwMjc2RSAvKiBJbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwICovLAogCQkJCTdBMEU3NzBD
MTBDMDBBODgwMEEwMjc2RSAvKiBJbnNwZWN0b3JGcm9udGVuZEhvc3QuaCAqLywKIAkJCQk3QTBF
NzcwRDEwQzAwQTg4MDBBMDI3NkUgLyogSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmlkbCAqLywKQEAg
LTE3NDEwLDYgKzE3NDE5LDggQEAKIAkJCQk3QTI0NTg3QzEwMjFFQUY0MDAwQTAwQUEgLyogSW5z
cGVjdG9yRE9NQWdlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxRjA2MTc0MEY1RjAwQUMwMEEw
N0VBQyAvKiBJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTdBRUQzRTA2MEZCQjFFQUEwMEQyQjAzQyAvKiBJbnNwZWN0b3JGcm9udGVuZC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJRjM0NEM3MTQxMTI1QjgyQzAwRjI2RUVFIC8qIEluc3BlY3RvckZyb250ZW5k
Q2xpZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQlGMzQ0Qzc1MzExMjk0RDlEMDBGMjZFRUUgLyog
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0EwRTc3
MEYxMEMwMEE4ODAwQTAyNzZFIC8qIEluc3BlY3RvckZyb250ZW5kSG9zdC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNDFGMDYyMDEwRjVGMEI2NjAwQTA3RUFDIC8qIEluc3BlY3RvclJlc291cmNlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk3NTQxMzNBODEwMkUwMEU4MDAwNzVEMDAgLyogSW5zcGVjdG9y
VGltZWxpbmVBZ2VudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0xOTYyMSw2ICsxOTYzMiw3IEBACiAJ
CQkJN0EyNDU4N0IxMDIxRUFGNDAwMEEwMEFBIC8qIEluc3BlY3RvckRPTUFnZW50LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTQxRjA2MTc1MEY1RjAwQUMwMEEwN0VBQyAvKiBJbnNwZWN0b3JET01T
dG9yYWdlUmVzb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0FFRDNFMDUwRkJCMUVBQTAw
RDJCMDNDIC8qIEluc3BlY3RvckZyb250ZW5kLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUYzNDRD
NzU4MTEyOTRGRjYwMEYyNkVFRSAvKiBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTdBMEU3NzBFMTBDMDBBODgwMEEwMjc2RSAvKiBJbnNwZWN0b3JG
cm9udGVuZEhvc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDFGMDYyMDIwRjVGMEI2NjAwQTA3
RUFDIC8qIEluc3BlY3RvclJlc291cmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTc1NDEzM0FB
MTAyRTAwRjQwMDA3NUQwMCAvKiBJbnNwZWN0b3JUaW1lbGluZUFnZW50LmNwcCBpbiBTb3VyY2Vz
ICovLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuY3BwIGIv
V2ViQ29yZS9pbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuY3BwCmluZGV4IDU1MzllOWQuLjQwNTQ5
OTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmNwcAorKysg
Yi9XZWJDb3JlL2luc3BlY3Rvci9Db25zb2xlTWVzc2FnZS5jcHAKQEAgLTMxLDkgKzMxLDEyIEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ29uc29sZU1lc3NhZ2UuaCIKIAorI2lu
Y2x1ZGUgIkluamVjdGVkU2NyaXB0LmgiCisjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHRIb3N0Lmgi
CiAjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmQuaCIKICNpbmNsdWRlICJTY3JpcHRDYWxsU3Rh
Y2suaCIKICNpbmNsdWRlICJTY3JpcHRPYmplY3QuaCIKKyNpbmNsdWRlICJTZXJpYWxpemVkU2Ny
aXB0VmFsdWUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC04MCw3ICs4Myw3IEBAIENv
bnNvbGVNZXNzYWdlOjpDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlIHMsIE1lc3NhZ2VUeXBl
IHQsIE1lc3NhZ2VMZXZlbCBsLCBTCiB9CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotdm9pZCBD
b25zb2xlTWVzc2FnZTo6YWRkVG9Db25zb2xlKEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCkK
K3ZvaWQgQ29uc29sZU1lc3NhZ2U6OmFkZFRvRnJvbnRlbmQoSW5zcGVjdG9yRnJvbnRlbmQqIGZy
b250ZW5kLCBJbmplY3RlZFNjcmlwdEhvc3QqIGluamVjdGVkU2NyaXB0SG9zdCkKIHsKICAgICBT
Y3JpcHRPYmplY3QganNvbk9iaiA9IGZyb250ZW5kLT5uZXdTY3JpcHRPYmplY3QoKTsKICAgICBq
c29uT2JqLnNldCgic291cmNlIiwgc3RhdGljX2Nhc3Q8aW50PihtX3NvdXJjZSkpOwpAQCAtOTAs
NyArOTMsMTUgQEAgdm9pZCBDb25zb2xlTWVzc2FnZTo6YWRkVG9Db25zb2xlKEluc3BlY3RvckZy
b250ZW5kKiBmcm9udGVuZCkKICAgICBqc29uT2JqLnNldCgidXJsIiwgbV91cmwpOwogICAgIGpz
b25PYmouc2V0KCJncm91cExldmVsIiwgc3RhdGljX2Nhc3Q8aW50PihtX2dyb3VwTGV2ZWwpKTsK
ICAgICBqc29uT2JqLnNldCgicmVwZWF0Q291bnQiLCBzdGF0aWNfY2FzdDxpbnQ+KG1fcmVwZWF0
Q291bnQpKTsKLSAgICBmcm9udGVuZC0+YWRkQ29uc29sZU1lc3NhZ2UoanNvbk9iaiwgbV9mcmFt
ZXMsIG1fc2NyaXB0U3RhdGUsIG1fYXJndW1lbnRzLCAgbV9tZXNzYWdlKTsKKyAgICBWZWN0b3I8
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gPiBhcmd1bWVudHM7CisgICAgaWYgKCFtX2Fy
Z3VtZW50cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3Jp
cHQgPSBpbmplY3RlZFNjcmlwdEhvc3QtPmluamVjdGVkU2NyaXB0Rm9yKG1fc2NyaXB0U3RhdGUp
OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9hcmd1bWVudHMuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6
ZWRWYWx1ZSA9IGluamVjdGVkU2NyaXB0LndyYXBGb3JDb25zb2xlKG1fYXJndW1lbnRzW2ldKTsK
KyAgICAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoc2VyaWFsaXplZFZhbHVlKTsKKyAgICAgICAg
fQorICAgIH0gICAKKyAgICBmcm9udGVuZC0+YWRkQ29uc29sZU1lc3NhZ2UoanNvbk9iaiwgbV9m
cmFtZXMsIGFyZ3VtZW50cywgIG1fbWVzc2FnZSk7CiB9CiAKIHZvaWQgQ29uc29sZU1lc3NhZ2U6
OnVwZGF0ZVJlcGVhdENvdW50SW5Db25zb2xlKEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCkK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmggYi9XZWJDb3Jl
L2luc3BlY3Rvci9Db25zb2xlTWVzc2FnZS5oCmluZGV4IGU5YWUxMzAuLjUzZjQyNTUgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmgKKysrIGIvV2ViQ29yZS9p
bnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuaApAQCAtMzgsNDAgKzM4LDQxIEBACiAjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgY2xhc3MgSW5zcGVjdG9y
RnJvbnRlbmQ7Ci0gICAgY2xhc3MgU2NyaXB0Q2FsbFN0YWNrOwotICAgIGNsYXNzIFNjcmlwdFN0
cmluZzsKK2NsYXNzIEluamVjdGVkU2NyaXB0SG9zdDsKK2NsYXNzIEluc3BlY3RvckZyb250ZW5k
OworY2xhc3MgU2NyaXB0Q2FsbFN0YWNrOworY2xhc3MgU2NyaXB0U3RyaW5nOwogCi0gICAgY2xh
c3MgQ29uc29sZU1lc3NhZ2UgOiBwdWJsaWMgTm9uY29weWFibGUgewotICAgIHB1YmxpYzoKLSAg
ICAgICAgQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1lc3NhZ2VM
ZXZlbCwgY29uc3QgU3RyaW5nJiBtLCB1bnNpZ25lZCBsaSwgY29uc3QgU3RyaW5nJiB1LCB1bnNp
Z25lZCBnKTsgICAgICAgIAotICAgICAgICBDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlLCBN
ZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBTY3JpcHRDYWxsU3RhY2sqLCB1bnNpZ25lZCBnLCBi
b29sIHN0b3JlVHJhY2UgPSBmYWxzZSk7CitjbGFzcyBDb25zb2xlTWVzc2FnZSA6IHB1YmxpYyBO
b25jb3B5YWJsZSB7CitwdWJsaWM6CisgICAgQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZSwg
TWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtLCB1bnNpZ25lZCBsaSwg
Y29uc3QgU3RyaW5nJiB1LCB1bnNpZ25lZCBnKTsgICAgICAgIAorICAgIENvbnNvbGVNZXNzYWdl
KE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIFNjcmlwdENhbGxTdGFj
ayosIHVuc2lnbmVkIGcsIGJvb2wgc3RvcmVUcmFjZSA9IGZhbHNlKTsKIAogI2lmIEVOQUJMRShJ
TlNQRUNUT1IpCi0gICAgICAgIHZvaWQgYWRkVG9Db25zb2xlKEluc3BlY3RvckZyb250ZW5kKiBm
cm9udGVuZCk7Ci0gICAgICAgIHZvaWQgdXBkYXRlUmVwZWF0Q291bnRJbkNvbnNvbGUoSW5zcGVj
dG9yRnJvbnRlbmQqIGZyb250ZW5kKTsKKyAgICB2b2lkIGFkZFRvRnJvbnRlbmQoSW5zcGVjdG9y
RnJvbnRlbmQqLCBJbmplY3RlZFNjcmlwdEhvc3QqKTsKKyAgICB2b2lkIHVwZGF0ZVJlcGVhdENv
dW50SW5Db25zb2xlKEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCk7CiAjZW5kaWYKLSAgICAg
ICAgdm9pZCBpbmNyZW1lbnRDb3VudCgpIHsgKyttX3JlcGVhdENvdW50OyB9OwotICAgICAgICBi
b29sIGlzRXF1YWwoU2NyaXB0U3RhdGUqLCBDb25zb2xlTWVzc2FnZSogbXNnKSBjb25zdDsKKyAg
ICB2b2lkIGluY3JlbWVudENvdW50KCkgeyArK21fcmVwZWF0Q291bnQ7IH0KKyAgICBib29sIGlz
RXF1YWwoU2NyaXB0U3RhdGUqLCBDb25zb2xlTWVzc2FnZSogbXNnKSBjb25zdDsKIAotICAgICAg
ICBNZXNzYWdlU291cmNlIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlOyB9Ci0gICAg
ICAgIGNvbnN0IFN0cmluZyYgbWVzc2FnZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWVzc2FnZTsgfQor
ICAgIE1lc3NhZ2VTb3VyY2Ugc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2U7IH0KKyAg
ICBjb25zdCBTdHJpbmcmIG1lc3NhZ2UoKSBjb25zdCB7IHJldHVybiBtX21lc3NhZ2U7IH0KIAot
ICAgIHByaXZhdGU6Ci0gICAgICAgIE1lc3NhZ2VTb3VyY2UgbV9zb3VyY2U7Ci0gICAgICAgIE1l
c3NhZ2VUeXBlIG1fdHlwZTsKLSAgICAgICAgTWVzc2FnZUxldmVsIG1fbGV2ZWw7Ci0gICAgICAg
IFN0cmluZyBtX21lc3NhZ2U7Citwcml2YXRlOgorICAgIE1lc3NhZ2VTb3VyY2UgbV9zb3VyY2U7
CisgICAgTWVzc2FnZVR5cGUgbV90eXBlOworICAgIE1lc3NhZ2VMZXZlbCBtX2xldmVsOworICAg
IFN0cmluZyBtX21lc3NhZ2U7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICAgICAgVmVjdG9y
PFNjcmlwdFZhbHVlPiBtX2FyZ3VtZW50czsKLSAgICAgICAgU2NyaXB0U3RhdGUqIG1fc2NyaXB0
U3RhdGU7CisgICAgVmVjdG9yPFNjcmlwdFZhbHVlPiBtX2FyZ3VtZW50czsKKyAgICBTY3JpcHRT
dGF0ZSogbV9zY3JpcHRTdGF0ZTsKICNlbmRpZgotICAgICAgICBWZWN0b3I8U2NyaXB0U3RyaW5n
PiBtX2ZyYW1lczsKLSAgICAgICAgdW5zaWduZWQgbV9saW5lOwotICAgICAgICBTdHJpbmcgbV91
cmw7Ci0gICAgICAgIHVuc2lnbmVkIG1fZ3JvdXBMZXZlbDsKLSAgICAgICAgdW5zaWduZWQgbV9y
ZXBlYXRDb3VudDsKLSAgICB9OworICAgIFZlY3RvcjxTY3JpcHRTdHJpbmc+IG1fZnJhbWVzOwor
ICAgIHVuc2lnbmVkIG1fbGluZTsKKyAgICBTdHJpbmcgbV91cmw7CisgICAgdW5zaWduZWQgbV9n
cm91cExldmVsOworICAgIHVuc2lnbmVkIG1fcmVwZWF0Q291bnQ7Cit9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNs
aWVudC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2xpZW50LmgKaW5kZXggZTQ0OGNk
Mi4uODQxYzE1ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2xpZW50
LmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2xpZW50LmgKQEAgLTMwLDYgKzMw
LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBJbnNwZWN0b3JDb250cm9sbGVy
OwogY2xhc3MgTm9kZTsKIGNsYXNzIFBhZ2U7CiBjbGFzcyBTdHJpbmc7CkBAIC00MCwyOSArNDEs
MTMgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGluc3BlY3RvckRlc3Ryb3llZCgpID0g
MDsKIAotICAgIHZpcnR1YWwgUGFnZSogY3JlYXRlUGFnZSgpID0gMDsKLQotICAgIHZpcnR1YWwg
U3RyaW5nIGxvY2FsaXplZFN0cmluZ3NVUkwoKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIFN0cmluZyBo
aWRkZW5QYW5lbHMoKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2hvd1dpbmRvdygpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgY2xvc2VXaW5kb3coKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
YXR0YWNoV2luZG93KCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hXaW5kb3coKSA9IDA7
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVp
Z2h0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIG9wZW5JbnNwZWN0b3JGcm9udGVuZChJbnNwZWN0
b3JDb250cm9sbGVyKikgPSAwOwogCiAgICAgdmlydHVhbCB2b2lkIGhpZ2hsaWdodChOb2RlKikg
PSAwOwogICAgIHZpcnR1YWwgdm9pZCBoaWRlSGlnaGxpZ2h0KCkgPSAwOwogCi0gICAgdmlydHVh
bCB2b2lkIGluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJiBuZXdVUkwpID0gMDsKLQog
ICAgIHZpcnR1YWwgdm9pZCBwb3B1bGF0ZVNldHRpbmcoY29uc3QgU3RyaW5nJiBrZXksIFN0cmlu
ZyogdmFsdWUpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc3RvcmVTZXR0aW5nKGNvbnN0IFN0cmlu
ZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgaW5z
cGVjdG9yV2luZG93T2JqZWN0Q2xlYXJlZCgpID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIu
Y3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXggMzMx
NDQzZC4uOTI0ZjAxMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29u
dHJvbGxlci5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5j
cHAKQEAgLTU3LDExICs1NywxMSBAQAogI2luY2x1ZGUgIkluamVjdGVkU2NyaXB0SG9zdC5oIgog
I2luY2x1ZGUgIkluc3BlY3RvckJhY2tlbmQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnQu
aCIKKyNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZENsaWVudC5oIgogI2luY2x1ZGUgIkluc3Bl
Y3RvckRPTUFnZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlLmgi
CiAjaW5jbHVkZSAiSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5oIgogI2luY2x1ZGUgIkluc3Bl
Y3RvckZyb250ZW5kLmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmgiCiAjaW5j
bHVkZSAiSW5zcGVjdG9yUmVzb3VyY2UuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JXb3JrZXJSZXNv
dXJjZS5oIgogI2luY2x1ZGUgIkluc3BlY3RvclRpbWVsaW5lQWdlbnQuaCIKQEAgLTE0NCwxMCAr
MTQ0LDkgQEAgc3RhdGljIHVuc2lnbmVkIHNfaW5zcGVjdG9yQ29udHJvbGxlckNvdW50OwogSW5z
cGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcihQYWdlKiBwYWdlLCBJbnNwZWN0
b3JDbGllbnQqIGNsaWVudCkKICAgICA6IG1faW5zcGVjdGVkUGFnZShwYWdlKQogICAgICwgbV9j
bGllbnQoY2xpZW50KQotICAgICwgbV9wYWdlKDApCisgICAgLCBtX29wZW5pbmdGcm9udGVuZChm
YWxzZSkKKyAgICAsIG1fY2xvc2luZ0Zyb250ZW5kKGZhbHNlKQogICAgICwgbV9leHBpcmVkQ29u
c29sZU1lc3NhZ2VDb3VudCgwKQotICAgICwgbV9mcm9udGVuZFNjcmlwdFN0YXRlKDApCi0gICAg
LCBtX3dpbmRvd1Zpc2libGUoZmFsc2UpCiAgICAgLCBtX3Nob3dBZnRlclZpc2libGUoQ3VycmVu
dFBhbmVsKQogICAgICwgbV9ncm91cExldmVsKDApCiAgICAgLCBtX3NlYXJjaGluZ0Zvck5vZGUo
ZmFsc2UpCkBAIC0xNTUsNyArMTU0LDYgQEAgSW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9y
Q29udHJvbGxlcihQYWdlKiBwYWdlLCBJbnNwZWN0b3JDbGllbnQqIGNsaWVudCkKICAgICAsIG1f
cmVzb3VyY2VUcmFja2luZ0VuYWJsZWQoZmFsc2UpCiAgICAgLCBtX3Jlc291cmNlVHJhY2tpbmdT
ZXR0aW5nc0xvYWRlZChmYWxzZSkKICAgICAsIG1faW5zcGVjdG9yQmFja2VuZChJbnNwZWN0b3JC
YWNrZW5kOjpjcmVhdGUodGhpcykpCi0gICAgLCBtX2luc3BlY3RvckZyb250ZW5kSG9zdChJbnNw
ZWN0b3JGcm9udGVuZEhvc3Q6OmNyZWF0ZSh0aGlzLCBjbGllbnQpKQogICAgICwgbV9pbmplY3Rl
ZFNjcmlwdEhvc3QoSW5qZWN0ZWRTY3JpcHRIb3N0OjpjcmVhdGUodGhpcykpCiAjaWYgRU5BQkxF
KEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICAgLCBtX2RlYnVnZ2VyRW5hYmxlZChmYWxzZSkKQEAg
LTE3OCw5ICsxNzYsNyBAQCBJbnNwZWN0b3JDb250cm9sbGVyOjp+SW5zcGVjdG9yQ29udHJvbGxl
cigpCiB7CiAgICAgLy8gVGhlc2Ugc2hvdWxkIGhhdmUgYmVlbiBjbGVhcmVkIGluIGluc3BlY3Rl
ZFBhZ2VEZXN0cm95ZWQoKS4KICAgICBBU1NFUlQoIW1fY2xpZW50KTsKLSAgICBBU1NFUlQoIW1f
ZnJvbnRlbmRTY3JpcHRTdGF0ZSk7CiAgICAgQVNTRVJUKCFtX2luc3BlY3RlZFBhZ2UpOwotICAg
IEFTU0VSVCghbV9wYWdlIHx8IChtX3BhZ2UgJiYgIW1fcGFnZS0+cGFyZW50SW5zcGVjdG9yQ29u
dHJvbGxlcigpKSk7CiAKICAgICBkZWxldGVBbGxWYWx1ZXMobV9mcmFtZVJlc291cmNlcyk7CiAg
ICAgZGVsZXRlQWxsVmFsdWVzKG1fY29uc29sZU1lc3NhZ2VzKTsKQEAgLTE5MSw3ICsxODcsNiBA
QCBJbnNwZWN0b3JDb250cm9sbGVyOjp+SW5zcGVjdG9yQ29udHJvbGxlcigpCiAgICAgcmVsZWFz
ZURPTUFnZW50KCk7CiAKICAgICBtX2luc3BlY3RvckJhY2tlbmQtPmRpc2Nvbm5lY3RDb250cm9s
bGVyKCk7Ci0gICAgbV9pbnNwZWN0b3JGcm9udGVuZEhvc3QtPmRpc2Nvbm5lY3RDb250cm9sbGVy
KCk7CiAgICAgbV9pbmplY3RlZFNjcmlwdEhvc3QtPmRpc2Nvbm5lY3RDb250cm9sbGVyKCk7CiB9
CiAKQEAgLTE5OSwxMCArMTk0LDYgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0
ZWRQYWdlRGVzdHJveWVkKCkKIHsKICAgICBjbG9zZSgpOwogCi0gICAgaWYgKG1fZnJvbnRlbmRT
Y3JpcHRTdGF0ZSkgewotICAgICAgICBTY3JpcHRHbG9iYWxPYmplY3Q6OnJlbW92ZShtX2Zyb250
ZW5kU2NyaXB0U3RhdGUsICJJbnNwZWN0b3JCYWNrZW5kIik7Ci0gICAgICAgIFNjcmlwdEdsb2Jh
bE9iamVjdDo6cmVtb3ZlKG1fZnJvbnRlbmRTY3JpcHRTdGF0ZSwgIkluc3BlY3RvckZyb250ZW5k
SG9zdCIpOwotICAgIH0KICAgICBBU1NFUlQobV9pbnNwZWN0ZWRQYWdlKTsKICAgICBtX2luc3Bl
Y3RlZFBhZ2UgPSAwOwogCkBAIC0yOTcsNDYgKzI4OCw0MiBAQCB2b2lkIEluc3BlY3RvckNvbnRy
b2xsZXI6OmhpZGVIaWdobGlnaHQoKQogCiBib29sIEluc3BlY3RvckNvbnRyb2xsZXI6OndpbmRv
d1Zpc2libGUoKQogewotICAgIHJldHVybiBtX3dpbmRvd1Zpc2libGU7CisgICAgcmV0dXJuIG1f
ZnJvbnRlbmQ7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0V2luZG93VmlzaWJs
ZShib29sIHZpc2libGUsIGJvb2wgYXR0YWNoZWQpCit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6
OmZyb250ZW5kUmVhZHkoKQogewotICAgIGlmICh2aXNpYmxlID09IG1fd2luZG93VmlzaWJsZSB8
fCAhbV9mcm9udGVuZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV93aW5kb3dWaXNpYmxlID0g
dmlzaWJsZTsKLQotICAgIGlmIChtX3dpbmRvd1Zpc2libGUpIHsKLSAgICAgICAgc2V0QXR0YWNo
ZWRXaW5kb3coYXR0YWNoZWQpOwotICAgICAgICBwb3B1bGF0ZVNjcmlwdE9iamVjdHMoKTsKLQot
ICAgICAgICBpZiAobV9zaG93QWZ0ZXJWaXNpYmxlID09IEN1cnJlbnRQYW5lbCkgewotICAgICAg
ICAgICAgU3RyaW5nIGxhc3RBY3RpdmVQYW5lbFNldHRpbmcgPSBzZXR0aW5nKGxhc3RBY3RpdmVQ
YW5lbFNldHRpbmdOYW1lKTsKLSAgICAgICAgICAgIG1fc2hvd0FmdGVyVmlzaWJsZSA9IHNwZWNp
YWxQYW5lbEZvckpTTmFtZShsYXN0QWN0aXZlUGFuZWxTZXR0aW5nKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmIChtX25vZGVUb0ZvY3VzKQotICAgICAgICAgICAgZm9jdXNOb2RlKCk7CisgICAg
cG9wdWxhdGVTY3JpcHRPYmplY3RzKCk7CisgICAgCisgICAgaWYgKG1fc2hvd0FmdGVyVmlzaWJs
ZSA9PSBDdXJyZW50UGFuZWwpIHsKKyAgICAgICAgU3RyaW5nIGxhc3RBY3RpdmVQYW5lbFNldHRp
bmcgPSBzZXR0aW5nKGxhc3RBY3RpdmVQYW5lbFNldHRpbmdOYW1lKTsKKyAgICAgICAgbV9zaG93
QWZ0ZXJWaXNpYmxlID0gc3BlY2lhbFBhbmVsRm9ySlNOYW1lKGxhc3RBY3RpdmVQYW5lbFNldHRp
bmcpOworICAgIH0KKyAgICAKKyAgICBpZiAobV9ub2RlVG9Gb2N1cykKKyAgICAgICAgZm9jdXNO
b2RlKCk7CiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCi0gICAgICAgIGlmIChtX2F0
dGFjaERlYnVnZ2VyV2hlblNob3duKQotICAgICAgICAgICAgZW5hYmxlRGVidWdnZXIoKTsKKyAg
ICBpZiAobV9hdHRhY2hEZWJ1Z2dlcldoZW5TaG93bikKKyAgICAgICAgZW5hYmxlRGVidWdnZXIo
KTsKICNlbmRpZgotICAgICAgICBzaG93UGFuZWwobV9zaG93QWZ0ZXJWaXNpYmxlKTsKLSAgICB9
IGVsc2UgeworICAgIHNob3dQYW5lbChtX3Nob3dBZnRlclZpc2libGUpOworfQorCit2b2lkIElu
c3BlY3RvckNvbnRyb2xsZXI6OndpbGxDbG9zZUZyb250ZW5kKCkKK3sKICNpZiBFTkFCTEUoSkFW
QVNDUklQVF9ERUJVR0dFUikKLSAgICAgICAgLy8gSWYgdGhlIHdpbmRvdyBpcyBiZWluZyBjbG9z
ZWQgd2l0aCB0aGUgZGVidWdnZXIgZW5hYmxlZCwKLSAgICAgICAgLy8gcmVtZW1iZXIgdGhpcyBz
dGF0ZSB0byByZS1lbmFibGUgZGVidWdnZXIgb24gdGhlIG5leHQgd2luZG93Ci0gICAgICAgIC8v
IG9wZW5pbmcuCi0gICAgICAgIGJvb2wgZGVidWdnZXJXYXNFbmFibGVkID0gbV9kZWJ1Z2dlckVu
YWJsZWQ7Ci0gICAgICAgIGRpc2FibGVEZWJ1Z2dlcigpOwotICAgICAgICBpZiAoZGVidWdnZXJX
YXNFbmFibGVkKQotICAgICAgICAgICAgbV9hdHRhY2hEZWJ1Z2dlcldoZW5TaG93biA9IHRydWU7
CisgICAgLy8gSWYgdGhlIHdpbmRvdyBpcyBiZWluZyBjbG9zZWQgd2l0aCB0aGUgZGVidWdnZXIg
ZW5hYmxlZCwKKyAgICAvLyByZW1lbWJlciB0aGlzIHN0YXRlIHRvIHJlLWVuYWJsZSBkZWJ1Z2dl
ciBvbiB0aGUgbmV4dCB3aW5kb3cKKyAgICAvLyBvcGVuaW5nLgorICAgIGJvb2wgZGVidWdnZXJX
YXNFbmFibGVkID0gbV9kZWJ1Z2dlckVuYWJsZWQ7CisgICAgZGlzYWJsZURlYnVnZ2VyKCk7Cisg
ICAgaWYgKGRlYnVnZ2VyV2FzRW5hYmxlZCkKKyAgICAgICAgbV9hdHRhY2hEZWJ1Z2dlcldoZW5T
aG93biA9IHRydWU7CiAjZW5kaWYKLSAgICAgICAgc2V0U2VhcmNoaW5nRm9yTm9kZShmYWxzZSk7
Ci0gICAgICAgIHJlc2V0U2NyaXB0T2JqZWN0cygpOwotICAgICAgICBzdG9wVGltZWxpbmVQcm9m
aWxlcigpOwotICAgIH0KKyAgICBzZXRTZWFyY2hpbmdGb3JOb2RlKGZhbHNlKTsKKyAgICByZXNl
dFNjcmlwdE9iamVjdHMoKTsKKyAgICBzdG9wVGltZWxpbmVQcm9maWxlcigpOworCiAgICAgbV9z
aG93QWZ0ZXJWaXNpYmxlID0gQ3VycmVudFBhbmVsOwogfQogCkBAIC0zNzAsNyArMzU3LDcgQEAg
dm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjphZGRDb25zb2xlTWVzc2FnZShTY3JpcHRTdGF0ZSog
c2NyaXB0U3RhdGUsIENvbnNvbGVNZXMKICAgICAgICAgbV9wcmV2aW91c01lc3NhZ2UgPSBjb25z
b2xlTWVzc2FnZTsKICAgICAgICAgbV9jb25zb2xlTWVzc2FnZXMuYXBwZW5kKGNvbnNvbGVNZXNz
YWdlKTsKICAgICAgICAgaWYgKHdpbmRvd1Zpc2libGUoKSkKLSAgICAgICAgICAgIG1fcHJldmlv
dXNNZXNzYWdlLT5hZGRUb0NvbnNvbGUobV9mcm9udGVuZC5nZXQoKSk7CisgICAgICAgICAgICBt
X3ByZXZpb3VzTWVzc2FnZS0+YWRkVG9Gcm9udGVuZChtX2Zyb250ZW5kLmdldCgpLCBtX2luamVj
dGVkU2NyaXB0SG9zdC5nZXQoKSk7CiAgICAgfQogCiAgICAgaWYgKCF3aW5kb3dWaXNpYmxlKCkg
JiYgbV9jb25zb2xlTWVzc2FnZXMuc2l6ZSgpID49IG1heGltdW1Db25zb2xlTWVzc2FnZXMpIHsK
QEAgLTQxOCw2OSArNDA1LDYgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjptYXJrVGltZWxp
bmUoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogICAgICAgICB0aW1lbGluZUFnZW50KCktPmRpZE1h
cmtUaW1lbGluZShtZXNzYWdlKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGNvbnN0cmFpbmVkQXR0
YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgcHJlZmVycmVkSGVpZ2h0LCB1bnNpZ25lZCB0b3Rh
bFdpbmRvd0hlaWdodCkKLXsKLSAgICByZXR1cm4gcm91bmRmKG1heChtaW5pbXVtQXR0YWNoZWRI
ZWlnaHQsIG1pbjxmbG9hdD4ocHJlZmVycmVkSGVpZ2h0LCB0b3RhbFdpbmRvd0hlaWdodCAqIG1h
eGltdW1BdHRhY2hlZEhlaWdodFJhdGlvKSkpOwotfQotCi1ib29sIEluc3BlY3RvckNvbnRyb2xs
ZXI6OmNhbkF0dGFjaFdpbmRvdygpIGNvbnN0Ci17Ci0gICAgaWYgKCFlbmFibGVkKCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgdW5zaWduZWQgaW5zcGVjdGVkUGFnZUhl
aWdodCA9IG1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+dmlzaWJsZUhlaWdo
dCgpOwotCi0gICAgLy8gRG9uJ3QgYWxsb3cgdGhlIGF0dGFjaCBpZiB0aGUgd2luZG93IHdvdWxk
IGJlIHRvbyBzbWFsbCB0byBhY2NvbW1vZGF0ZSB0aGUgbWluaW11bSBpbnNwZWN0b3IgaGVpZ2h0
LgotICAgIHJldHVybiBtaW5pbXVtQXR0YWNoZWRIZWlnaHQgPD0gaW5zcGVjdGVkUGFnZUhlaWdo
dCAqIG1heGltdW1BdHRhY2hlZEhlaWdodFJhdGlvOwotfQotCi12b2lkIEluc3BlY3RvckNvbnRy
b2xsZXI6OmF0dGFjaFdpbmRvdygpCi17Ci0gICAgaWYgKCFlbmFibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIHVuc2lnbmVkIGluc3BlY3RlZFBhZ2VIZWlnaHQgPSBtX2luc3BlY3RlZFBh
Z2UtPm1haW5GcmFtZSgpLT52aWV3KCktPnZpc2libGVIZWlnaHQoKTsKLQotICAgIFN0cmluZyBh
dHRhY2hlZEhlaWdodCA9IHNldHRpbmcoaW5zcGVjdG9yQXR0YWNoZWRIZWlnaHROYW1lKTsKLSAg
ICBib29sIHN1Y2Nlc3MgPSB0cnVlOwotICAgIGludCBoZWlnaHQgPSBhdHRhY2hlZEhlaWdodC50
b0ludCgmc3VjY2Vzcyk7Ci0gICAgdW5zaWduZWQgcHJlZmVycmVkSGVpZ2h0ID0gc3VjY2VzcyA/
IGhlaWdodCA6IGRlZmF1bHRBdHRhY2hlZEhlaWdodDsKLQotICAgIG1fY2xpZW50LT5hdHRhY2hX
aW5kb3coKTsKLQotICAgIC8vIFdlIG5lZWQgdG8gY29uc3RyYWluIHRoZSB3aW5kb3cgaGVpZ2h0
IGhlcmUgaW4gY2FzZSB0aGUgdXNlciBoYXMgcmVzaXplZCB0aGUgaW5zcGVjdGVkIHBhZ2UncyB3
aW5kb3cgc28gdGhhdAotICAgIC8vIHRoZSB1c2VyJ3MgcHJlZmVycmVkIGhlaWdodCB3b3VsZCBi
ZSB0b28gYmlnIHRvIGRpc3BsYXkuCi0gICAgbV9jbGllbnQtPnNldEF0dGFjaGVkV2luZG93SGVp
Z2h0KGNvbnN0cmFpbmVkQXR0YWNoZWRXaW5kb3dIZWlnaHQocHJlZmVycmVkSGVpZ2h0LCBpbnNw
ZWN0ZWRQYWdlSGVpZ2h0KSk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGV0YWNo
V2luZG93KCkKLXsKLSAgICBpZiAoIWVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1f
Y2xpZW50LT5kZXRhY2hXaW5kb3coKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpz
ZXRBdHRhY2hlZFdpbmRvdyhib29sIGF0dGFjaGVkKQotewotICAgIGlmICghZW5hYmxlZCgpIHx8
ICFtX2Zyb250ZW5kKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2Zyb250ZW5kLT5zZXRBdHRh
Y2hlZFdpbmRvdyhhdHRhY2hlZCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0
QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KQotewotICAgIGlmICghZW5hYmxl
ZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgdW5zaWduZWQgdG90YWxIZWlnaHQgPSBt
X3BhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCktPnZpc2libGVIZWlnaHQoKSArIG1faW5zcGVjdGVk
UGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+dmlzaWJsZUhlaWdodCgpOwotICAgIHVuc2lnbmVk
IGF0dGFjaGVkSGVpZ2h0ID0gY29uc3RyYWluZWRBdHRhY2hlZFdpbmRvd0hlaWdodChoZWlnaHQs
IHRvdGFsSGVpZ2h0KTsKLSAgICAKLSAgICBzZXRTZXR0aW5nKGluc3BlY3RvckF0dGFjaGVkSGVp
Z2h0TmFtZSwgU3RyaW5nOjpudW1iZXIoYXR0YWNoZWRIZWlnaHQpKTsKLSAgICAKLSAgICBtX2Ns
aWVudC0+c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQoYXR0YWNoZWRIZWlnaHQpOwotfQotCiB2b2lk
IEluc3BlY3RvckNvbnRyb2xsZXI6OnN0b3JlTGFzdEFjdGl2ZVBhbmVsKGNvbnN0IFN0cmluZyYg
cGFuZWxOYW1lKQogewogICAgIHNldFNldHRpbmcobGFzdEFjdGl2ZVBhbmVsU2V0dGluZ05hbWUs
IHBhbmVsTmFtZSk7CkBAIC01MTIsMjMgKzQzNiwyMiBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xs
ZXI6OmhhbmRsZU1vdXNlUHJlc3NPbk5vZGUoTm9kZSogbm9kZSkKICAgICBpbnNwZWN0KG5vZGUp
OwogfQogCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6Omluc3BlY3RlZFdpbmRvd1NjcmlwdE9i
amVjdENsZWFyZWQoRnJhbWUqIGZyYW1lKQordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRJ
bnNwZWN0b3JGcm9udGVuZENsaWVudChQYXNzT3duUHRyPEluc3BlY3RvckZyb250ZW5kQ2xpZW50
PiBjbGllbnQpCiB7Ci0gICAgaWYgKCFlbmFibGVkKCkgfHwgIW1fZnJvbnRlbmQgfHwgZnJhbWUg
IT0gbV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1f
aW5qZWN0ZWRTY3JpcHRIb3N0LT5kaXNjYXJkSW5qZWN0ZWRTY3JpcHRzKCk7CisgICAgQVNTRVJU
KCFtX2luc3BlY3RvckZyb250ZW5kQ2xpZW50KTsKKyAgICBtX2luc3BlY3RvckZyb250ZW5kQ2xp
ZW50ID0gY2xpZW50OwogfQogCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OndpbmRvd1Njcmlw
dE9iamVjdEF2YWlsYWJsZSgpCit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6Omluc3BlY3RlZFdp
bmRvd1NjcmlwdE9iamVjdENsZWFyZWQoRnJhbWUqIGZyYW1lKQogewotICAgIGlmICghbV9wYWdl
IHx8ICFlbmFibGVkKCkpCi0gICAgICAgIHJldHVybjsKKyAgICAvLyBJZiB0aGUgcGFnZSBpcyBz
dXBwb3NlZCB0byBzZXJ2ZSBhcyBJbnNwZWN0b3JGcm9udGVuZCBub3RpZnkgaW5zcGV0b3IgZnJv
bnRlbmQKKyAgICAvLyBjbGllbnQgdGhhdCBpdCdzIGNsZWFyZWQgc28gdGhhdCB0aGUgY2xpZW50
IGNhbiBleHBvc2UgaW5zcGVjdG9yIGJpbmRpbmdzLgorICAgIGlmIChtX2luc3BlY3RvckZyb250
ZW5kQ2xpZW50ICYmIGZyYW1lID09IG1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCkpCisgICAg
ICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDbGllbnQtPndpbmRvd09iamVjdENsZWFyZWQoKTsKIAot
ICAgIC8vIEdyYW50IHRoZSBpbnNwZWN0b3IgdGhlIGFiaWxpdHkgdG8gc2NyaXB0IHRoZSBpbnNw
ZWN0ZWQgcGFnZS4KLSAgICBtX3BhZ2UtPm1haW5GcmFtZSgpLT5kb2N1bWVudCgpLT5zZWN1cml0
eU9yaWdpbigpLT5ncmFudFVuaXZlcnNhbEFjY2VzcygpOwotICAgIG1fZnJvbnRlbmRTY3JpcHRT
dGF0ZSA9IHNjcmlwdFN0YXRlRnJvbVBhZ2UoZGVidWdnZXJXb3JsZCgpLCBtX3BhZ2UpOwotICAg
IFNjcmlwdEdsb2JhbE9iamVjdDo6c2V0KG1fZnJvbnRlbmRTY3JpcHRTdGF0ZSwgIkluc3BlY3Rv
ckJhY2tlbmQiLCBtX2luc3BlY3RvckJhY2tlbmQuZ2V0KCkpOwotICAgIFNjcmlwdEdsb2JhbE9i
amVjdDo6c2V0KG1fZnJvbnRlbmRTY3JpcHRTdGF0ZSwgIkluc3BlY3RvckZyb250ZW5kSG9zdCIs
IG1faW5zcGVjdG9yRnJvbnRlbmRIb3N0LmdldCgpKTsKKyAgICBpZiAoIWVuYWJsZWQoKSB8fCAh
bV9mcm9udGVuZCB8fCBmcmFtZSAhPSBtX2luc3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpKQorICAg
ICAgICByZXR1cm47CisgICAgbV9pbmplY3RlZFNjcmlwdEhvc3QtPmRpc2NhcmRJbmplY3RlZFNj
cmlwdHMoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRTZWFyY2hpbmdGb3JO
b2RlKGJvb2wgZW5hYmxlZCkKQEAgLTU0NiwxOCArNDY5LDE1IEBAIHZvaWQgSW5zcGVjdG9yQ29u
dHJvbGxlcjo6c2V0U2VhcmNoaW5nRm9yTm9kZShib29sIGVuYWJsZWQpCiAgICAgfQogfQogCi12
b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNjcmlwdE9iamVjdFJlYWR5KCkKK3ZvaWQgSW5zcGVj
dG9yQ29udHJvbGxlcjo6c2V0RnJvbnRlbmQoUGFzc093blB0cjxJbnNwZWN0b3JGcm9udGVuZD4g
ZnJvbnRlbmQpCiB7Ci0gICAgQVNTRVJUKG1fZnJvbnRlbmRTY3JpcHRTdGF0ZSk7Ci0gICAgaWYg
KCFtX2Zyb250ZW5kU2NyaXB0U3RhdGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIFNjcmlwdE9i
amVjdCB3ZWJJbnNwZWN0b3JPYmo7Ci0gICAgaWYgKCFTY3JpcHRHbG9iYWxPYmplY3Q6OmdldCht
X2Zyb250ZW5kU2NyaXB0U3RhdGUsICJXZWJJbnNwZWN0b3IiLCB3ZWJJbnNwZWN0b3JPYmopKQot
ICAgICAgICByZXR1cm47Ci0gICAgc2V0RnJvbnRlbmRQcm94eU9iamVjdChtX2Zyb250ZW5kU2Ny
aXB0U3RhdGUsIHdlYkluc3BlY3Rvck9iaik7Ci0KLSNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJV
R0dFUikKKyAgICBtX29wZW5pbmdGcm9udGVuZCA9IGZhbHNlOworICAgIG1fZnJvbnRlbmQgPSBm
cm9udGVuZDsKKyAgICByZWxlYXNlRE9NQWdlbnQoKTsKKyAgICBtX2RvbUFnZW50ID0gSW5zcGVj
dG9yRE9NQWdlbnQ6OmNyZWF0ZShtX2Zyb250ZW5kLmdldCgpKTsKKyAgICBpZiAobV90aW1lbGlu
ZUFnZW50KQorICAgICAgICBtX3RpbWVsaW5lQWdlbnQtPnJlc2V0RnJvbnRlbmRQcm94eU9iamVj
dChtX2Zyb250ZW5kLmdldCgpKTsKKyNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikgJiYg
VVNFKEpTQykKICAgICBTdHJpbmcgZGVidWdnZXJFbmFibGVkID0gc2V0dGluZyhkZWJ1Z2dlckVu
YWJsZWRTZXR0aW5nTmFtZSk7CiAgICAgaWYgKGRlYnVnZ2VyRW5hYmxlZCA9PSAidHJ1ZSIpCiAg
ICAgICAgIGVuYWJsZURlYnVnZ2VyKCk7CkBAIC01NjYsNDggKzQ4NiwyMyBAQCB2b2lkIEluc3Bl
Y3RvckNvbnRyb2xsZXI6OnNjcmlwdE9iamVjdFJlYWR5KCkKICAgICAgICAgZW5hYmxlUHJvZmls
ZXIoKTsKICNlbmRpZgogCi0gICAgLy8gSWYgbm8gcHJlZmVyZW5jZSBpcyBzZXQgLSBkZWZhdWx0
IHRvIGFuIGF0dGFjaGVkIHdpbmRvdy4gVGhpcyBpcyBpbXBvcnRhbnQgZm9yIGluc3BlY3RvciBM
YXlvdXRUZXN0cy4KLSAgICBTdHJpbmcgc2hvdWxkQXR0YWNoVmFsdWUgPSBzZXR0aW5nKGluc3Bl
Y3RvclN0YXJ0c0F0dGFjaGVkU2V0dGluZ05hbWUoKSk7Ci0gICAgYm9vbCBzaG91bGRBdHRhY2gg
PSBzaG91bGRBdHRhY2hWYWx1ZSAhPSAiZmFsc2UiOwotICAgIAotICAgIGlmIChzaG91bGRBdHRh
Y2ggJiYgIWNhbkF0dGFjaFdpbmRvdygpKQotICAgICAgICBzaG91bGRBdHRhY2ggPSBmYWxzZTsK
LQotICAgIC8vIE1ha2Ugc3VyZSBvdXIgd2luZG93IGlzIHZpc2libGUgbm93IHRoYXQgdGhlIHBh
Z2UgbG9hZGVkCi0gICAgc2V0V2luZG93VmlzaWJsZSh0cnVlLCBzaG91bGRBdHRhY2gpOwotCi0g
ICAgbV9jbGllbnQtPmluc3BlY3RvcldpbmRvd09iamVjdENsZWFyZWQoKTsKLX0KLQotdm9pZCBJ
bnNwZWN0b3JDb250cm9sbGVyOjpzZXRGcm9udGVuZFByb3h5T2JqZWN0KFNjcmlwdFN0YXRlKiBz
Y3JpcHRTdGF0ZSwgU2NyaXB0T2JqZWN0IHdlYkluc3BlY3Rvck9iaiwgU2NyaXB0T2JqZWN0KQot
ewotICAgIG1fZnJvbnRlbmRTY3JpcHRTdGF0ZSA9IHNjcmlwdFN0YXRlOwotICAgIG1fZnJvbnRl
bmQuc2V0KG5ldyBJbnNwZWN0b3JGcm9udGVuZCh0aGlzLCB3ZWJJbnNwZWN0b3JPYmopKTsKLSAg
ICByZWxlYXNlRE9NQWdlbnQoKTsKLSAgICBtX2RvbUFnZW50ID0gSW5zcGVjdG9yRE9NQWdlbnQ6
OmNyZWF0ZShtX2Zyb250ZW5kLmdldCgpKTsKLSAgICBpZiAobV90aW1lbGluZUFnZW50KQotICAg
ICAgICBtX3RpbWVsaW5lQWdlbnQtPnJlc2V0RnJvbnRlbmRQcm94eU9iamVjdChtX2Zyb250ZW5k
LmdldCgpKTsKKyAgICBmcm9udGVuZFJlYWR5KCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJv
bGxlcjo6c2hvdygpCiB7CiAgICAgaWYgKCFlbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKLSAg
ICAKLSAgICBpZiAoIW1fcGFnZSkgewotICAgICAgICBpZiAobV9mcm9udGVuZCkKLSAgICAgICAg
ICAgIHJldHVybjsgLy8gV2UgYXJlIHVzaW5nIGN1c3RvbSBmcm9udGVuZCAtIG5vIG5lZWQgdG8g
Y3JlYXRlIHBhZ2UuCiAKLSAgICAgICAgbV9wYWdlID0gbV9jbGllbnQtPmNyZWF0ZVBhZ2UoKTsK
LSAgICAgICAgaWYgKCFtX3BhZ2UpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fcGFn
ZS0+c2V0UGFyZW50SW5zcGVjdG9yQ29udHJvbGxlcih0aGlzKTsKLQotICAgICAgICAvLyBzaG93
V2luZG93KCkgd2lsbCBiZSBjYWxsZWQgYWZ0ZXIgdGhlIHBhZ2UgbG9hZHMgaW4gc2NyaXB0T2Jq
ZWN0UmVhZHkoKQorICAgIGlmIChtX29wZW5pbmdGcm9udGVuZCkKICAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIGlmIChtX2Zyb250ZW5kKQorICAgICAgICBtX2Zyb250ZW5kLT5icmluZ1RvRnJv
bnQoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9vcGVuaW5nRnJvbnRlbmQgPSB0cnVlOworICAg
ICAgICBtX2NsaWVudC0+b3Blbkluc3BlY3RvckZyb250ZW5kKHRoaXMpOwogICAgIH0KLQotICAg
IHNob3dXaW5kb3coKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzaG93UGFuZWwo
U3BlY2lhbFBhbmVscyBwYW5lbCkKQEAgLTYzMyw0NiArNTI4LDI3IEBAIHZvaWQgSW5zcGVjdG9y
Q29udHJvbGxlcjo6Y2xvc2UoKQogICAgIGlmICghZW5hYmxlZCgpKQogICAgICAgICByZXR1cm47
CiAKKyAgICBpZiAoIW1fZnJvbnRlbmQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2Ns
b3NpbmdGcm9udGVuZCkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY2xvc2luZ0Zyb250ZW5kID0g
dHJ1ZTsKKworICAgIHdpbGxDbG9zZUZyb250ZW5kKCk7CisKKyAgICBoaWRlSGlnaGxpZ2h0KCk7
CisKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgICBzdG9wVXNlckluaXRpYXRl
ZFByb2ZpbGluZygpOwogICAgIGRpc2FibGVEZWJ1Z2dlcigpOwogI2VuZGlmCi0gICAgY2xvc2VX
aW5kb3coKTsKIAogICAgIHJlbGVhc2VET01BZ2VudCgpOwotICAgIG1fZnJvbnRlbmQuc2V0KDAp
OwotICAgIG1fdGltZWxpbmVBZ2VudCA9IDA7Ci0gICAgbV9mcm9udGVuZFNjcmlwdFN0YXRlID0g
MDsKLSAgICBpZiAobV9wYWdlKSB7Ci0gICAgICAgIGlmICghbV9wYWdlLT5tYWluRnJhbWUoKSB8
fCAhbV9wYWdlLT5tYWluRnJhbWUoKS0+bG9hZGVyKCkgfHwgIW1fcGFnZS0+bWFpbkZyYW1lKCkt
PmxvYWRlcigpLT5pc0xvYWRpbmcoKSkgewotICAgICAgICAgICAgbV9wYWdlLT5zZXRQYXJlbnRJ
bnNwZWN0b3JDb250cm9sbGVyKDApOwotICAgICAgICAgICAgbV9wYWdlID0gMDsKLSAgICAgICAg
fQotICAgIH0KLX0KLQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzaG93V2luZG93KCkKLXsK
LSAgICBBU1NFUlQoZW5hYmxlZCgpKTsKLQotICAgIHVuc2lnbmVkIGluc3BlY3RlZFBhZ2VIZWln
aHQgPSBtX2luc3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCktPnZpc2libGVIZWlnaHQo
KTsKLQotICAgIG1fY2xpZW50LT5zaG93V2luZG93KCk7CisgICAgbV9mcm9udGVuZC5jbGVhcigp
OworICAgIG1fdGltZWxpbmVBZ2VudC5jbGVhcigpOwogCi0gICAgU3RyaW5nIGF0dGFjaGVkSGVp
Z2h0ID0gc2V0dGluZyhpbnNwZWN0b3JBdHRhY2hlZEhlaWdodE5hbWUpOwotICAgIGJvb2wgc3Vj
Y2VzcyA9IHRydWU7Ci0gICAgaW50IGhlaWdodCA9IGF0dGFjaGVkSGVpZ2h0LnRvSW50KCZzdWNj
ZXNzKTsKLSAgICB1bnNpZ25lZCBwcmVmZXJyZWRIZWlnaHQgPSBzdWNjZXNzID8gaGVpZ2h0IDog
ZGVmYXVsdEF0dGFjaGVkSGVpZ2h0OwotCi0gICAgLy8gVGhpcyBjYWxsIG1pZ2h0IG5vdCBnbyB0
aHJvdWdoIChpZiB0aGUgd2luZG93IHN0YXJ0cyBvdXQgZGV0YWNoZWQpLCBidXQgaWYgdGhlIHdp
bmRvdyBpcyBpbml0aWFsbHkgY3JlYXRlZCBhdHRhY2hlZCwKLSAgICAvLyBJbnNwZWN0b3JDb250
cm9sbGVyOjphdHRhY2hXaW5kb3cgaXMgbmV2ZXIgY2FsbGVkLCBzbyB3ZSBuZWVkIHRvIG1ha2Ug
c3VyZSB0byBzZXQgdGhlIGF0dGFjaGVkV2luZG93SGVpZ2h0LgotICAgIC8vIEZJWE1FOiBDbGVh
biB1cCBjb2RlIHNvIHdlIG9ubHkgaGF2ZSB0byBjYWxsIHNldEF0dGFjaGVkV2luZG93SGVpZ2h0
IGluIEluc3BlY3RvckNvbnRyb2xsZXI6OmF0dGFjaFdpbmRvdwotICAgIG1fY2xpZW50LT5zZXRB
dHRhY2hlZFdpbmRvd0hlaWdodChjb25zdHJhaW5lZEF0dGFjaGVkV2luZG93SGVpZ2h0KHByZWZl
cnJlZEhlaWdodCwgaW5zcGVjdGVkUGFnZUhlaWdodCkpOwotfQotCi12b2lkIEluc3BlY3RvckNv
bnRyb2xsZXI6OmNsb3NlV2luZG93KCkKLXsKLSAgICBtX2NsaWVudC0+Y2xvc2VXaW5kb3coKTsK
KyAgICBtX2Nsb3NpbmdGcm9udGVuZCA9IGZhbHNlOwogfQogCiB2b2lkIEluc3BlY3RvckNvbnRy
b2xsZXI6OnJlbGVhc2VET01BZ2VudCgpCkBAIC02ODEsNyArNTU3LDcgQEAgdm9pZCBJbnNwZWN0
b3JDb250cm9sbGVyOjpyZWxlYXNlRE9NQWdlbnQoKQogICAgIC8vIG5vIHJlZmVyZW5jZXMgdG8g
dGhlIERPTSBhZ2VudCBmcm9tIHRoZSBET00gdHJlZS4KICAgICBpZiAobV9kb21BZ2VudCkKICAg
ICAgICAgbV9kb21BZ2VudC0+cmVzZXQoKTsKLSAgICBtX2RvbUFnZW50ID0gMDsKKyAgICBtX2Rv
bUFnZW50LmNsZWFyKCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cG9wdWxhdGVT
Y3JpcHRPYmplY3RzKCkKQEAgLTcxNSw3ICs1OTEsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xs
ZXI6OnBvcHVsYXRlU2NyaXB0T2JqZWN0cygpCiAgICAgICAgIG1fZnJvbnRlbmQtPnVwZGF0ZUNv
bnNvbGVNZXNzYWdlRXhwaXJlZENvdW50KG1fZXhwaXJlZENvbnNvbGVNZXNzYWdlQ291bnQpOwog
ICAgIHVuc2lnbmVkIG1lc3NhZ2VDb3VudCA9IG1fY29uc29sZU1lc3NhZ2VzLnNpemUoKTsKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWVzc2FnZUNvdW50OyArK2kpCi0gICAgICAgIG1f
Y29uc29sZU1lc3NhZ2VzW2ldLT5hZGRUb0NvbnNvbGUobV9mcm9udGVuZC5nZXQoKSk7CisgICAg
ICAgIG1fY29uc29sZU1lc3NhZ2VzW2ldLT5hZGRUb0Zyb250ZW5kKG1fZnJvbnRlbmQuZ2V0KCks
IG1faW5qZWN0ZWRTY3JpcHRIb3N0LmdldCgpKTsKIAogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RF
QlVHR0VSKQogICAgIGlmIChtX2RlYnVnZ2VyRW5hYmxlZCkKQEAgLTgwMSw3ICs2NzcsOCBAQCB2
b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZENvbW1pdExvYWQoRG9jdW1lbnRMb2FkZXIqIGxv
YWRlcikKICAgICBBU1NFUlQobV9pbnNwZWN0ZWRQYWdlKTsKIAogICAgIGlmIChsb2FkZXItPmZy
YW1lKCkgPT0gbV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKSkgewotICAgICAgICBtX2NsaWVu
dC0+aW5zcGVjdGVkVVJMQ2hhbmdlZChsb2FkZXItPnVybCgpLnN0cmluZygpKTsKKyAgICAgICAg
aWYgKG1fZnJvbnRlbmQpCisgICAgICAgICAgICBtX2Zyb250ZW5kLT5pbnNwZWN0ZWRVUkxDaGFu
Z2VkKGxvYWRlci0+dXJsKCkuc3RyaW5nKCkpOwogCiAgICAgICAgIG1faW5qZWN0ZWRTY3JpcHRI
b3N0LT5kaXNjYXJkSW5qZWN0ZWRTY3JpcHRzKCk7CiAgICAgICAgIGNsZWFyQ29uc29sZU1lc3Nh
Z2VzKCk7CkBAIC0xNDM2LDE2ICsxMzEzLDYgQEAgSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNl
KiBJbnNwZWN0b3JDb250cm9sbGVyOjpnZXRET01TdG9yYWdlUmVzb3VyY2VGb3JJZChpbnQKIH0K
ICNlbmRpZgogCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6Om1vdmVXaW5kb3dCeShmbG9hdCB4
LCBmbG9hdCB5KSBjb25zdAotewotICAgIGlmICghbV9wYWdlIHx8ICFlbmFibGVkKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIEZsb2F0UmVjdCBmcmFtZVJlY3QgPSBtX3BhZ2UtPmNocm9tZSgp
LT53aW5kb3dSZWN0KCk7Ci0gICAgZnJhbWVSZWN0Lm1vdmUoeCwgeSk7Ci0gICAgbV9wYWdlLT5j
aHJvbWUoKS0+c2V0V2luZG93UmVjdChmcmFtZVJlY3QpOwotfQotCiAjaWYgRU5BQkxFKEpBVkFT
Q1JJUFRfREVCVUdHRVIpCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmFkZFByb2ZpbGUoUGFz
c1JlZlB0cjxTY3JpcHRQcm9maWxlPiBwcnBQcm9maWxlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBj
b25zdCBTdHJpbmcmIHNvdXJjZVVSTCkKIHsKQEAgLTE0OTgsNyArMTM2NSw3IEBAIHZvaWQgSW5z
cGVjdG9yQ29udHJvbGxlcjo6Z2V0UHJvZmlsZShsb25nIGNhbGxJZCwgdW5zaWduZWQgdWlkKQog
ICAgIFByb2ZpbGVzTWFwOjppdGVyYXRvciBpdCA9IG1fcHJvZmlsZXMuZmluZCh1aWQpOwogI2lm
IFVTRShKU0MpCiAgICAgaWYgKGl0ICE9IG1fcHJvZmlsZXMuZW5kKCkpCi0gICAgICAgIG1fZnJv
bnRlbmQtPmRpZEdldFByb2ZpbGUoY2FsbElkLCB0b0pTKG1fZnJvbnRlbmRTY3JpcHRTdGF0ZSwg
aXQtPnNlY29uZC5nZXQoKSkpOworICAgICAgICBtX2Zyb250ZW5kLT5kaWRHZXRQcm9maWxlKGNh
bGxJZCwgdG9KUyhtX2Zyb250ZW5kLT5zY3JpcHRTdGF0ZSgpLCBpdC0+c2Vjb25kLmdldCgpKSk7
CiAjZW5kaWYKIH0KIApAQCAtMTYzNSw3ICsxNTAyLDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9s
bGVyOjplbmFibGVEZWJ1Z2dlcigpCiAgICAgaWYgKG1fZGVidWdnZXJFbmFibGVkKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBpZiAoIW1fZnJvbnRlbmRTY3JpcHRTdGF0ZSB8fCAhbV9mcm9udGVu
ZCkKKyAgICBpZiAoIW1fZnJvbnRlbmQpCiAgICAgICAgIG1fYXR0YWNoRGVidWdnZXJXaGVuU2hv
d24gPSB0cnVlOwogICAgIGVsc2UgewogICAgICAgICBtX2Zyb250ZW5kLT5hdHRhY2hEZWJ1Z2dl
cldoZW5TaG93bigpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29u
dHJvbGxlci5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCmluZGV4
IGVhZDRkNWUuLjU4ODUzYWIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNvbnRyb2xsZXIuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVy
LmgKQEAgLTY2LDcgKzY2LDcgQEAgY2xhc3MgSW5qZWN0ZWRTY3JpcHRIb3N0OwogY2xhc3MgSW5z
cGVjdG9yQmFja2VuZDsKIGNsYXNzIEluc3BlY3RvckNsaWVudDsKIGNsYXNzIEluc3BlY3RvckZy
b250ZW5kOwotY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmRIb3N0OworY2xhc3MgSW5zcGVjdG9yRnJv
bnRlbmRDbGllbnQ7CiBjbGFzcyBJbnNwZWN0b3JUaW1lbGluZUFnZW50OwogY2xhc3MgSmF2YVNj
cmlwdENhbGxGcmFtZTsKIGNsYXNzIEtVUkw7CkBAIC0xMTYsMTEgKzExNiw5IEBAIHB1YmxpYzoK
ICAgICB+SW5zcGVjdG9yQ29udHJvbGxlcigpOwogCiAgICAgSW5zcGVjdG9yQmFja2VuZCogaW5z
cGVjdG9yQmFja2VuZCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yQmFja2VuZC5nZXQoKTsgfQotICAg
IEluc3BlY3RvckZyb250ZW5kSG9zdCogaW5zcGVjdG9yRnJvbnRlbmRIb3N0KCkgeyByZXR1cm4g
bV9pbnNwZWN0b3JGcm9udGVuZEhvc3QuZ2V0KCk7IH0KICAgICBJbmplY3RlZFNjcmlwdEhvc3Qq
IGluamVjdGVkU2NyaXB0SG9zdCgpIHsgcmV0dXJuIG1faW5qZWN0ZWRTY3JpcHRIb3N0LmdldCgp
OyB9CiAKICAgICB2b2lkIGluc3BlY3RlZFBhZ2VEZXN0cm95ZWQoKTsKLSAgICB2b2lkIHBhZ2VE
ZXN0cm95ZWQoKSB7IG1fcGFnZSA9IDA7IH0KIAogICAgIGJvb2wgZW5hYmxlZCgpIGNvbnN0Owog
CkBAIC0xMzcsMjcgKzEzNSwyMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzaG93UGFuZWwoU3BlY2lh
bFBhbmVscyk7CiAgICAgdm9pZCBjbG9zZSgpOwogCi0gICAgYm9vbCB3aW5kb3dWaXNpYmxlKCk7
Ci0gICAgdm9pZCBzZXRXaW5kb3dWaXNpYmxlKGJvb2wgdmlzaWJsZSA9IHRydWUsIGJvb2wgYXR0
YWNoZWQgPSBmYWxzZSk7Ci0KICAgICB2b2lkIGFkZE1lc3NhZ2VUb0NvbnNvbGUoTWVzc2FnZVNv
dXJjZSwgTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwgU2NyaXB0Q2FsbFN0YWNrKik7CiAgICAg
dm9pZCBhZGRNZXNzYWdlVG9Db25zb2xlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNz
YWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgdW5zaWduZWQgbGluZU51bWJlciwgY29u
c3QgU3RyaW5nJiBzb3VyY2VJRCk7CiAgICAgdm9pZCBjbGVhckNvbnNvbGVNZXNzYWdlcygpOwog
ICAgIGNvbnN0IFZlY3RvcjxDb25zb2xlTWVzc2FnZSo+JiBjb25zb2xlTWVzc2FnZXMoKSBjb25z
dCB7IHJldHVybiBtX2NvbnNvbGVNZXNzYWdlczsgfQogCi0gICAgYm9vbCBjYW5BdHRhY2hXaW5k
b3coKSBjb25zdDsKLSAgICB2b2lkIGF0dGFjaFdpbmRvdygpOwotICAgIHZvaWQgZGV0YWNoV2lu
ZG93KCk7Ci0KICAgICBib29sIHNlYXJjaGluZ0Zvck5vZGVJblBhZ2UoKSBjb25zdCB7IHJldHVy
biBtX3NlYXJjaGluZ0Zvck5vZGU7IH0KICAgICB2b2lkIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50
KGNvbnN0IEhpdFRlc3RSZXN1bHQmLCB1bnNpZ25lZCBtb2RpZmllckZsYWdzKTsKICAgICB2b2lk
IGhhbmRsZU1vdXNlUHJlc3NPbk5vZGUoTm9kZSopOwogCisgICAgdm9pZCBzZXRJbnNwZWN0b3JG
cm9udGVuZENsaWVudChQYXNzT3duUHRyPEluc3BlY3RvckZyb250ZW5kQ2xpZW50PiBjbGllbnQp
OworICAgIGJvb2wgaGFzSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQoKSBjb25zdCB7IHJldHVybiBt
X2luc3BlY3RvckZyb250ZW5kQ2xpZW50OyB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgIHZvaWQgaW5zcGVjdGVkV2luZG93U2Ny
aXB0T2JqZWN0Q2xlYXJlZChGcmFtZSopOwotICAgIHZvaWQgd2luZG93U2NyaXB0T2JqZWN0QXZh
aWxhYmxlKCk7CiAKLSAgICB2b2lkIHNldEZyb250ZW5kUHJveHlPYmplY3QoU2NyaXB0U3RhdGUq
IHN0YXRlLCBTY3JpcHRPYmplY3Qgd2ViSW5zcGVjdG9yT2JqLCBTY3JpcHRPYmplY3QgaW5qZWN0
ZWRTY3JpcHRPYmogPSBTY3JpcHRPYmplY3QoKSk7Ci0gICAgU2NyaXB0U3RhdGUqIGZyb250ZW5k
U2NyaXB0U3RhdGUoKSBjb25zdCB7IHJldHVybiBtX2Zyb250ZW5kU2NyaXB0U3RhdGU7IH0KKyAg
ICBib29sIHdpbmRvd1Zpc2libGUoKTsKKyAgICB2b2lkIHNldEZyb250ZW5kKFBhc3NPd25QdHI8
SW5zcGVjdG9yRnJvbnRlbmQ+KTsKIAogICAgIHZvaWQgcG9wdWxhdGVTY3JpcHRPYmplY3RzKCk7
CiAgICAgdm9pZCByZXNldFNjcmlwdE9iamVjdHMoKTsKQEAgLTI2MywxOSArMjU2LDE2IEBAIHBy
aXZhdGU6CiAgICAgc3RhdGljIGNvbnN0IFN0cmluZyYgZnJvbnRlbmRTZXR0aW5nc1NldHRpbmdO
YW1lKCk7CiAKICAgICBmcmllbmQgY2xhc3MgSW5zcGVjdG9yQmFja2VuZDsKLSAgICBmcmllbmQg
Y2xhc3MgSW5zcGVjdG9yRnJvbnRlbmRIb3N0OwogICAgIGZyaWVuZCBjbGFzcyBJbmplY3RlZFNj
cmlwdEhvc3Q7CiAKICAgICAvLyBGb2xsb3dpbmcgYXJlIHVzZWQgZnJvbSBJbnNwZWN0b3JCYWNr
ZW5kIGFuZCBpbnRlcm5hbGx5LgotCiAgICAgdm9pZCBzZXRTZWFyY2hpbmdGb3JOb2RlKGJvb2wg
ZW5hYmxlZCk7CiAKLSAgICB2b2lkIHNjcmlwdE9iamVjdFJlYWR5KCk7Ci0gICAgdm9pZCBtb3Zl
V2luZG93QnkoZmxvYXQgeCwgZmxvYXQgeSkgY29uc3Q7Ci0gICAgdm9pZCBzZXRBdHRhY2hlZFdp
bmRvdyhib29sKTsKLSAgICB2b2lkIHNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhl
aWdodCk7CisgICAgdm9pZCBmcm9udGVuZFJlYWR5KCk7CisgICAgdm9pZCB3aWxsQ2xvc2VGcm9u
dGVuZCgpOworCisgICAgLy8gRm9sbG93aW5nIGFyZSB1c2VkIGZyb20gSW5zcGVjdG9yQmFja2Vu
ZCBhbmQgaW50ZXJuYWxseS4KICAgICB2b2lkIHN0b3JlTGFzdEFjdGl2ZVBhbmVsKGNvbnN0IFN0
cmluZyYgcGFuZWxOYW1lKTsKLSAgICB2b2lkIGNsb3NlV2luZG93KCk7CiAgICAgSW5zcGVjdG9y
RE9NQWdlbnQqIGRvbUFnZW50KCkgeyByZXR1cm4gbV9kb21BZ2VudC5nZXQoKTsgfQogICAgIHZv
aWQgcmVsZWFzZURPTUFnZW50KCk7CiAKQEAgLTMxNiw4ICszMDYsNiBAQCBwcml2YXRlOgogICAg
IHZvaWQgcHJ1bmVSZXNvdXJjZXMoUmVzb3VyY2VzTWFwKiwgRG9jdW1lbnRMb2FkZXIqIGxvYWRl
clRvS2VlcCA9IDApOwogICAgIHZvaWQgcmVtb3ZlQWxsUmVzb3VyY2VzKFJlc291cmNlc01hcCog
bWFwKSB7IHBydW5lUmVzb3VyY2VzKG1hcCk7IH0KIAotICAgIHZvaWQgc2hvd1dpbmRvdygpOwot
CiAgICAgYm9vbCBpc01haW5SZXNvdXJjZUxvYWRlcihEb2N1bWVudExvYWRlciogbG9hZGVyLCBj
b25zdCBLVVJMJiByZXF1ZXN0VXJsKTsKIAogICAgIFNwZWNpYWxQYW5lbHMgc3BlY2lhbFBhbmVs
Rm9ySlNOYW1lKGNvbnN0IFN0cmluZyYgcGFuZWxOYW1lKTsKQEAgLTMyNiwxMCArMzE0LDEyIEBA
IHByaXZhdGU6CiAKICAgICBQYWdlKiBtX2luc3BlY3RlZFBhZ2U7CiAgICAgSW5zcGVjdG9yQ2xp
ZW50KiBtX2NsaWVudDsKKyAgICBPd25QdHI8SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ+IG1faW5z
cGVjdG9yRnJvbnRlbmRDbGllbnQ7CisgICAgYm9vbCBtX29wZW5pbmdGcm9udGVuZDsKKyAgICBi
b29sIG1fY2xvc2luZ0Zyb250ZW5kOwogICAgIE93blB0cjxJbnNwZWN0b3JGcm9udGVuZD4gbV9m
cm9udGVuZDsKICAgICBSZWZQdHI8SW5zcGVjdG9yRE9NQWdlbnQ+IG1fZG9tQWdlbnQ7CiAgICAg
T3duUHRyPEluc3BlY3RvclRpbWVsaW5lQWdlbnQ+IG1fdGltZWxpbmVBZ2VudDsKLSAgICBQYWdl
KiBtX3BhZ2U7CiAgICAgUmVmUHRyPE5vZGU+IG1fbm9kZVRvRm9jdXM7CiAgICAgUmVmUHRyPElu
c3BlY3RvclJlc291cmNlPiBtX21haW5SZXNvdXJjZTsKICAgICBSZXNvdXJjZXNNYXAgbV9yZXNv
dXJjZXM7CkBAIC0zNDUsOCArMzM1LDYgQEAgcHJpdmF0ZToKICNpZiBFTkFCTEUoRE9NX1NUT1JB
R0UpCiAgICAgRE9NU3RvcmFnZVJlc291cmNlc01hcCBtX2RvbVN0b3JhZ2VSZXNvdXJjZXM7CiAj
ZW5kaWYKLSAgICBTY3JpcHRTdGF0ZSogbV9mcm9udGVuZFNjcmlwdFN0YXRlOwotICAgIGJvb2wg
bV93aW5kb3dWaXNpYmxlOwogICAgIFNwZWNpYWxQYW5lbHMgbV9zaG93QWZ0ZXJWaXNpYmxlOwog
ICAgIFJlZlB0cjxOb2RlPiBtX2hpZ2hsaWdodGVkTm9kZTsKICAgICB1bnNpZ25lZCBtX2dyb3Vw
TGV2ZWw7CkBAIC0zNTUsNyArMzQzLDYgQEAgcHJpdmF0ZToKICAgICBib29sIG1fcmVzb3VyY2VU
cmFja2luZ0VuYWJsZWQ7CiAgICAgYm9vbCBtX3Jlc291cmNlVHJhY2tpbmdTZXR0aW5nc0xvYWRl
ZDsKICAgICBSZWZQdHI8SW5zcGVjdG9yQmFja2VuZD4gbV9pbnNwZWN0b3JCYWNrZW5kOwotICAg
IFJlZlB0cjxJbnNwZWN0b3JGcm9udGVuZEhvc3Q+IG1faW5zcGVjdG9yRnJvbnRlbmRIb3N0Owog
ICAgIFJlZlB0cjxJbmplY3RlZFNjcmlwdEhvc3Q+IG1faW5qZWN0ZWRTY3JpcHRIb3N0OwogCiAg
ICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBTZXR0aW5nczsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmNwcCBiL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckZyb250ZW5kLmNwcAppbmRleCBhZjU2MjBmLi5jYzVjZDc1IDEwMDc1NQot
LS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5jcHAKKysrIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuY3BwCkBAIC00OSwxNCArNDksMTYgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1JbnNwZWN0b3JGcm9udGVuZDo6SW5zcGVjdG9yRnJvbnRl
bmQoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciwgU2NyaXB0T2JqZWN0
IHdlYkluc3BlY3RvcikKLSAgICA6IG1faW5zcGVjdG9yQ29udHJvbGxlcihpbnNwZWN0b3JDb250
cm9sbGVyKQotICAgICwgbV93ZWJJbnNwZWN0b3Iod2ViSW5zcGVjdG9yKQorSW5zcGVjdG9yRnJv
bnRlbmQ6Okluc3BlY3RvckZyb250ZW5kKFNjcmlwdE9iamVjdCB3ZWJJbnNwZWN0b3IpCisgICAg
OiBtX3dlYkluc3BlY3Rvcih3ZWJJbnNwZWN0b3IpCiB7CiB9CiAKIEluc3BlY3RvckZyb250ZW5k
Ojp+SW5zcGVjdG9yRnJvbnRlbmQoKSAKIHsKKyAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rp
b24obV93ZWJJbnNwZWN0b3IsICJjbG9zZSIpOworICAgIGZ1bmN0aW9uLmNhbGwoKTsKKwogICAg
IG1fd2ViSW5zcGVjdG9yID0gU2NyaXB0T2JqZWN0KCk7CiB9CiAKQEAgLTkxLDcgKzkzLDcgQEAg
dm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6dXBkYXRlQ29uc29sZU1lc3NhZ2VFeHBpcmVkQ291bnQo
dW5zaWduZWQgY291bnQpCiAgICAgZnVuY3Rpb24uY2FsbCgpOwogfQogCi12b2lkIEluc3BlY3Rv
ckZyb250ZW5kOjphZGRDb25zb2xlTWVzc2FnZShjb25zdCBTY3JpcHRPYmplY3QmIG1lc3NhZ2VP
YmosIGNvbnN0IFZlY3RvcjxTY3JpcHRTdHJpbmc+JiBmcmFtZXMsIFNjcmlwdFN0YXRlKiBzY3Jp
cHRTdGF0ZSwgY29uc3QgVmVjdG9yPFNjcmlwdFZhbHVlPiBhcmd1bWVudHMsIGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSkKK3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmFkZENvbnNvbGVNZXNzYWdlKGNv
bnN0IFNjcmlwdE9iamVjdCYgbWVzc2FnZU9iaiwgY29uc3QgVmVjdG9yPFNjcmlwdFN0cmluZz4m
IGZyYW1lcywgY29uc3QgVmVjdG9yPFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+ID4mIGFy
Z3VtZW50cywgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewogICAgIFNjcmlwdEZ1bmN0aW9uQ2Fs
bCBmdW5jdGlvbihtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7IAogICAgIGZ1bmN0aW9uLmFw
cGVuZEFyZ3VtZW50KCJhZGRDb25zb2xlTWVzc2FnZSIpOwpAQCAtMTAwLDEwICsxMDIsOCBAQCB2
b2lkIEluc3BlY3RvckZyb250ZW5kOjphZGRDb25zb2xlTWVzc2FnZShjb25zdCBTY3JpcHRPYmpl
Y3QmIG1lc3NhZ2VPYmosIGNvbnN0CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBm
cmFtZXMuc2l6ZSgpOyArK2kpCiAgICAgICAgICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChm
cmFtZXNbaV0pOwogICAgIH0gZWxzZSBpZiAoIWFyZ3VtZW50cy5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBtX2luc3BlY3RvckNvbnRyb2xsZXIt
PmluamVjdGVkU2NyaXB0SG9zdCgpLT5pbmplY3RlZFNjcmlwdEZvcihzY3JpcHRTdGF0ZSk7CiAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcmd1bWVudHMuc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWRWYWx1
ZSA9IGluamVjdGVkU2NyaXB0LndyYXBGb3JDb25zb2xlKGFyZ3VtZW50c1tpXSk7Ci0gICAgICAg
ICAgICBTY3JpcHRWYWx1ZSBzY3JpcHRWYWx1ZSA9IFNjcmlwdFZhbHVlOjpkZXNlcmlhbGl6ZSh0
aGlzLT5zY3JpcHRTdGF0ZSgpLCBzZXJpYWxpemVkVmFsdWUuZ2V0KCkpOworICAgICAgICAgICAg
U2NyaXB0VmFsdWUgc2NyaXB0VmFsdWUgPSBTY3JpcHRWYWx1ZTo6ZGVzZXJpYWxpemUoc2NyaXB0
U3RhdGUoKSwgYXJndW1lbnRzW2ldLmdldCgpKTsKICAgICAgICAgICAgIGlmIChzY3JpcHRWYWx1
ZS5oYXNOb1ZhbHVlKCkpIHsKICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0yMjAsNiArMjIwLDE5IEBAIHZvaWQgSW5zcGVj
dG9yRnJvbnRlbmQ6OnJlc2V0KCkKICAgICBjYWxsU2ltcGxlRnVuY3Rpb24oInJlc2V0Iik7CiB9
CiAKK3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmJyaW5nVG9Gcm9udCgpCit7CisgICAgY2FsbFNp
bXBsZUZ1bmN0aW9uKCJicmluZ1RvRnJvbnQiKTsKK30KKwordm9pZCBJbnNwZWN0b3JGcm9udGVu
ZDo6aW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIHVybCkKK3sKKyAgICBTY3JpcHRG
dW5jdGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIpOworICAgIGZ1
bmN0aW9uLmFwcGVuZEFyZ3VtZW50KCJpbnNwZWN0ZWRVUkxDaGFuZ2VkIik7CisgICAgZnVuY3Rp
b24uYXBwZW5kQXJndW1lbnQodXJsKTsKKyAgICBmdW5jdGlvbi5jYWxsKCk7Cit9CisKIHZvaWQg
SW5zcGVjdG9yRnJvbnRlbmQ6OnJlc291cmNlVHJhY2tpbmdXYXNFbmFibGVkKCkKIHsKICAgICBj
YWxsU2ltcGxlRnVuY3Rpb24oInJlc291cmNlVHJhY2tpbmdXYXNFbmFibGVkIik7CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5oIGIvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuaAppbmRleCA4NjFhNmY3Li4yNWEwMzUxIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5oCisrKyBiL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmgKQEAgLTQ5LDcgKzQ5LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiAgICAgY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmQgOiBwdWJsaWMgTm9uY29w
eWFibGUgewogICAgIHB1YmxpYzoKLSAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmQoSW5zcGVjdG9y
Q29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciwgU2NyaXB0T2JqZWN0IHdlYkluc3BlY3Rv
cik7CisgICAgICAgIEluc3BlY3RvckZyb250ZW5kKFNjcmlwdE9iamVjdCB3ZWJJbnNwZWN0b3Ip
OwogICAgICAgICB+SW5zcGVjdG9yRnJvbnRlbmQoKTsKIAogICAgICAgICBTY3JpcHRBcnJheSBu
ZXdTY3JpcHRBcnJheSgpOwpAQCAtNjAsNyArNjAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIHZvaWQgcG9wdWxhdGVGcm9udGVuZFNldHRpbmdzKGNvbnN0IFN0cmluZyYgc2V0dGlu
Z3MpOwogCiAgICAgICAgIHZvaWQgdXBkYXRlQ29uc29sZU1lc3NhZ2VFeHBpcmVkQ291bnQodW5z
aWduZWQgY291bnQpOwotICAgICAgICB2b2lkIGFkZENvbnNvbGVNZXNzYWdlKGNvbnN0IFNjcmlw
dE9iamVjdCYgbWVzc2FnZU9iaiwgY29uc3QgVmVjdG9yPFNjcmlwdFN0cmluZz4mIGZyYW1lcywg
U2NyaXB0U3RhdGUqLCBjb25zdCBWZWN0b3I8U2NyaXB0VmFsdWU+IGFyZ3VtZW50cywgY29uc3Qg
U3RyaW5nJiBtZXNzYWdlKTsKKyAgICAgICAgdm9pZCBhZGRDb25zb2xlTWVzc2FnZShjb25zdCBT
Y3JpcHRPYmplY3QmIG1lc3NhZ2VPYmosIGNvbnN0IFZlY3RvcjxTY3JpcHRTdHJpbmc+JiBmcmFt
ZXMsIGNvbnN0IFZlY3RvcjxSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiA+JiBhcmd1bWVu
dHMsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CiAgICAgICAgIHZvaWQgdXBkYXRlQ29uc29sZU1l
c3NhZ2VSZXBlYXRDb3VudCh1bnNpZ25lZCBjb3VudCk7CiAgICAgICAgIHZvaWQgY2xlYXJDb25z
b2xlTWVzc2FnZXMoKTsKIApAQCAtNzMsNiArNzMsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIHZvaWQgc2hvd1BhbmVsKGludCBwYW5lbCk7CiAgICAgICAgIHZvaWQgcG9wdWxhdGVJ
bnRlcmZhY2UoKTsKICAgICAgICAgdm9pZCByZXNldCgpOworICAgICAgICAKKyAgICAgICAgdm9p
ZCBicmluZ1RvRnJvbnQoKTsKKyAgICAgICAgdm9pZCBpbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0
IFN0cmluZyYpOwogCiAgICAgICAgIHZvaWQgcmVzb3VyY2VUcmFja2luZ1dhc0VuYWJsZWQoKTsK
ICAgICAgICAgdm9pZCByZXNvdXJjZVRyYWNraW5nV2FzRGlzYWJsZWQoKTsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50LmggYi9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjA1ODM0NmIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JGcm9udGVuZENsaWVudC5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50X2gKKyNkZWZpbmUgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRfaAor
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IENvbnRleHRNZW51SXRlbTsKK2NsYXNzIEV2ZW50OworY2xhc3MgU3RyaW5nOworCitjbGFzcyBJ
bnNwZWN0b3JGcm9udGVuZENsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+SW5zcGVjdG9y
RnJvbnRlbmRDbGllbnQoKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCB3aW5kb3dPYmplY3RDbGVh
cmVkKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBmcm9udGVuZExvYWRlZCgpID0gMDsKKworICAg
IHZpcnR1YWwgdm9pZCBtb3ZlV2luZG93QnkoZmxvYXQgeCwgZmxvYXQgeSkgPSAwOworCisgICAg
dmlydHVhbCBTdHJpbmcgbG9jYWxpemVkU3RyaW5nc1VSTCgpID0gMDsKKyAgICB2aXJ0dWFsIFN0
cmluZyBoaWRkZW5QYW5lbHMoKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgYnJpbmdUb0Zyb250
KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjbG9zZVdpbmRvdygpID0gMDsKKworICAgIHZpcnR1
YWwgYm9vbCBjYW5BdHRhY2hXaW5kb3coKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGF0dGFjaFdp
bmRvdygpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoV2luZG93KCkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBjaGFuZ2VBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCkgPSAwOworICAg
IAorICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYpID0g
MDsKKworICAgIHZpcnR1YWwgdm9pZCBzaG93Q29udGV4dE1lbnUoRXZlbnQqLCBjb25zdCBWZWN0
b3I8Q29udGV4dE1lbnVJdGVtKj4mKSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRl
bmRDbGllbnRMb2NhbC5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENs
aWVudExvY2FsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDFlMGJl
Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRD
bGllbnRMb2NhbC5jcHAKQEAgLTAsMCArMSwyMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5oIgorCisjaWYgRU5BQkxFKElOU1BF
Q1RPUikKKworI2luY2x1ZGUgIkNocm9tZS5oIgorI2luY2x1ZGUgIkNvbnRleHRNZW51LmgiCisj
aW5jbHVkZSAiQ29udGV4dE1lbnVDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiQ29udGV4dE1lbnVJ
dGVtLmgiCisjaW5jbHVkZSAiQ29udGV4dE1lbnVQcm92aWRlci5oIgorI2luY2x1ZGUgIkZsb2F0
UmVjdC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5j
bHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5k
LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmgiCisjaW5jbHVkZSAiUGFnZS5o
IgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU2NyaXB0RnVuY3Rpb25D
YWxsLmgiCisjaW5jbHVkZSAiU2NyaXB0T2JqZWN0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgRnJvbnRlbmRNZW51UHJvdmlkZXIgOiBwdWJsaWMgQ29udGV4dE1lbnVQcm92aWRl
ciB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RnJvbnRlbmRNZW51UHJvdmlkZXI+
IGNyZWF0ZShJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsKiBmcm9udGVuZENsaWVudCwgU2Ny
aXB0T2JqZWN0IHdlYkluc3BlY3RvciwgY29uc3QgVmVjdG9yPENvbnRleHRNZW51SXRlbSo+JiBp
dGVtcykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRnJvbnRlbmRNZW51UHJv
dmlkZXIoZnJvbnRlbmRDbGllbnQsIHdlYkluc3BlY3RvciwgaXRlbXMpKTsKKyAgICB9CisgICAg
CisgICAgdm9pZCBkaXNjb25uZWN0KCkKKyAgICB7CisgICAgICAgIG1fd2ViSW5zcGVjdG9yID0g
U2NyaXB0T2JqZWN0KCk7CisgICAgICAgIG1fZnJvbnRlbmRDbGllbnQgPSAwOworICAgIH0KKyAg
ICAKK3ByaXZhdGU6CisgICAgRnJvbnRlbmRNZW51UHJvdmlkZXIoSW5zcGVjdG9yRnJvbnRlbmRD
bGllbnRMb2NhbCogZnJvbnRlbmRDbGllbnQsIFNjcmlwdE9iamVjdCB3ZWJJbnNwZWN0b3IsICBj
b25zdCBWZWN0b3I8Q29udGV4dE1lbnVJdGVtKj4mIGl0ZW1zKQorICAgICAgICA6IG1fZnJvbnRl
bmRDbGllbnQoZnJvbnRlbmRDbGllbnQpCisgICAgICAgICwgbV93ZWJJbnNwZWN0b3Iod2ViSW5z
cGVjdG9yKQorICAgICAgICAsIG1faXRlbXMoaXRlbXMpCisgICAgeworICAgIH0KKworICAgIHZp
cnR1YWwgfkZyb250ZW5kTWVudVByb3ZpZGVyKCkKKyAgICB7CisgICAgICAgIGNvbnRleHRNZW51
Q2xlYXJlZCgpOworICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgcG9wdWxhdGVDb250ZXh0
TWVudShDb250ZXh0TWVudSogbWVudSkKKyAgICB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9pdGVtcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG1lbnUtPmFwcGVuZEl0ZW0o
Km1faXRlbXNbaV0pOworICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgY29udGV4dE1lbnVJ
dGVtU2VsZWN0ZWQoQ29udGV4dE1lbnVJdGVtKiBpdGVtKQorICAgIHsKKyAgICAgICAgaW50IGl0
ZW1OdW1iZXIgPSBpdGVtLT5hY3Rpb24oKSAtIENvbnRleHRNZW51SXRlbUJhc2VDdXN0b21UYWc7
CisKKyAgICAgICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fd2ViSW5zcGVjdG9yLCAi
ZGlzcGF0Y2giKTsKKyAgICAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoImNvbnRleHRNZW51
SXRlbVNlbGVjdGVkIik7CisgICAgICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGl0ZW1OdW1i
ZXIpOworICAgICAgICBmdW5jdGlvbi5jYWxsKCk7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwg
dm9pZCBjb250ZXh0TWVudUNsZWFyZWQoKQorICAgIHsKKworICAgICAgICBpZiAobV9mcm9udGVu
ZENsaWVudCkgeworICAgICAgICAgICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fd2Vi
SW5zcGVjdG9yLCAiZGlzcGF0Y2giKTsKKyAgICAgICAgICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3Vt
ZW50KCJjb250ZXh0TWVudUNsZWFyZWQiKTsKKyAgICAgICAgICAgIGZ1bmN0aW9uLmNhbGwoKTsK
KworICAgICAgICAgICAgbV9mcm9udGVuZENsaWVudC0+bV9tZW51UHJvdmlkZXIgPSAwOworICAg
ICAgICB9CisgICAgICAgIGRlbGV0ZUFsbFZhbHVlcyhtX2l0ZW1zKTsKKyAgICAgICAgbV9pdGVt
cy5jbGVhcigpOworICAgIH0KKworICAgIEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwqIG1f
ZnJvbnRlbmRDbGllbnQ7CisgICAgU2NyaXB0T2JqZWN0IG1fd2ViSW5zcGVjdG9yOworICAgIFZl
Y3RvcjxDb250ZXh0TWVudUl0ZW0qPiBtX2l0ZW1zOworfTsKKworc3RhdGljIGNvbnN0IGNoYXIq
IGNvbnN0IGluc3BlY3RvckF0dGFjaGVkSGVpZ2h0TmFtZSA9ICJpbnNwZWN0b3JBdHRhY2hlZEhl
aWdodCI7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgZGVmYXVsdEF0dGFjaGVkSGVpZ2h0ID0gMzAw
Oworc3RhdGljIGNvbnN0IGZsb2F0IG1pbmltdW1BdHRhY2hlZEhlaWdodCA9IDI1MC4wZjsKK3N0
YXRpYyBjb25zdCBmbG9hdCBtYXhpbXVtQXR0YWNoZWRIZWlnaHRSYXRpbyA9IDAuNzVmOworCitJ
bnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2Fs
KEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIsIFBhZ2UqIGZyb250ZW5k
UGFnZSkKKyAgICA6IG1faW5zcGVjdG9yQ29udHJvbGxlcihpbnNwZWN0b3JDb250cm9sbGVyKQor
ICAgICwgbV9mcm9udGVuZFBhZ2UoZnJvbnRlbmRQYWdlKQorICAgICwgbV9mcm9udGVuZFNjcmlw
dFN0YXRlKDApCisgICAgLCBtX21lbnVQcm92aWRlcigwKQoreworfQorCitJbnNwZWN0b3JGcm9u
dGVuZENsaWVudExvY2FsOjp+SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbCgpCit7CisgICAg
aWYgKG1fbWVudVByb3ZpZGVyKQorICAgICAgICBtX21lbnVQcm92aWRlci0+ZGlzY29ubmVjdCgp
OworICAgIG1fZnJvbnRlbmRTY3JpcHRTdGF0ZSA9IDA7CisgICAgbV9mcm9udGVuZFBhZ2UgPSAw
OworICAgIG1faW5zcGVjdG9yQ29udHJvbGxlciA9IDA7Cit9CisgICAgCit2b2lkIEluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50TG9jYWw6OndpbmRvd09iamVjdENsZWFyZWQoKQoreworICAgIC8vIEdy
YW50IHRoZSBpbnNwZWN0b3IgdGhlIGFiaWxpdHkgdG8gc2NyaXB0IHRoZSBpbnNwZWN0ZWQgcGFn
ZS4KKyAgICBtX2Zyb250ZW5kUGFnZS0+bWFpbkZyYW1lKCktPmRvY3VtZW50KCktPnNlY3VyaXR5
T3JpZ2luKCktPmdyYW50VW5pdmVyc2FsQWNjZXNzKCk7CisgICAgLy8gRklYTUU6IGRvbid0IGtl
ZXAgcmVmZXJlbmNlIHRvIHRoZSBzY3JpcHQgc3RhdGUKKyAgICBtX2Zyb250ZW5kU2NyaXB0U3Rh
dGUgPSBzY3JpcHRTdGF0ZUZyb21QYWdlKGRlYnVnZ2VyV29ybGQoKSwgbV9mcm9udGVuZFBhZ2Up
OworICAgIFNjcmlwdEdsb2JhbE9iamVjdDo6c2V0KG1fZnJvbnRlbmRTY3JpcHRTdGF0ZSwgIklu
c3BlY3RvckJhY2tlbmQiLCBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RvckJhY2tlbmQo
KSk7CisgICAgbV9mcm9udGVuZEhvc3QgPSBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OmNyZWF0ZSh0
aGlzKTsKKyAgICBTY3JpcHRHbG9iYWxPYmplY3Q6OnNldChtX2Zyb250ZW5kU2NyaXB0U3RhdGUs
ICJJbnNwZWN0b3JGcm9udGVuZEhvc3QiLCBtX2Zyb250ZW5kSG9zdC5nZXQoKSk7Cit9CisKK3Zv
aWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6ZnJvbnRlbmRMb2FkZWQoKQoreworICAg
IC8vIENyZWF0ZSBJbnNwZWN0b3JGcm9udGVuZCBhbmQgc2V0IGl0IHRvIEluc3BlY3RvckNvbnRy
b2xsZXIuCisgICAgQVNTRVJUKG1fZnJvbnRlbmRTY3JpcHRTdGF0ZSk7CisgICAgU2NyaXB0T2Jq
ZWN0IHdlYkluc3BlY3Rvck9iajsKKyAgICBpZiAoIVNjcmlwdEdsb2JhbE9iamVjdDo6Z2V0KG1f
ZnJvbnRlbmRTY3JpcHRTdGF0ZSwgIldlYkluc3BlY3RvciIsIHdlYkluc3BlY3Rvck9iaikpIHsK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5zZXRGcm9udGVuZChuZXcgSW5zcGVjdG9yRnJvbnRl
bmQod2ViSW5zcGVjdG9yT2JqKSk7Cit9CisKK2Jvb2wgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRM
b2NhbDo6Y2FuQXR0YWNoV2luZG93KCkKK3sKKyAgICB1bnNpZ25lZCBpbnNwZWN0ZWRQYWdlSGVp
Z2h0ID0gbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0ZWRQYWdlKCktPm1haW5GcmFtZSgp
LT52aWV3KCktPnZpc2libGVIZWlnaHQoKTsKKworICAgIC8vIERvbid0IGFsbG93IHRoZSBhdHRh
Y2ggaWYgdGhlIHdpbmRvdyB3b3VsZCBiZSB0b28gc21hbGwgdG8gYWNjb21tb2RhdGUgdGhlIG1p
bmltdW0gaW5zcGVjdG9yIGhlaWdodC4KKyAgICByZXR1cm4gbWluaW11bUF0dGFjaGVkSGVpZ2h0
IDw9IGluc3BlY3RlZFBhZ2VIZWlnaHQgKiBtYXhpbXVtQXR0YWNoZWRIZWlnaHRSYXRpbzsKK30K
Kwordm9pZCBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjpjaGFuZ2VBdHRhY2hlZFdpbmRv
d0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpCit7CisgICAgdW5zaWduZWQgdG90YWxIZWlnaHQgPSBt
X2Zyb250ZW5kUGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+dmlzaWJsZUhlaWdodCgpICsgbV9p
bnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0ZWRQYWdlKCktPm1haW5GcmFtZSgpLT52aWV3KCkt
PnZpc2libGVIZWlnaHQoKTsKKyAgICB1bnNpZ25lZCBhdHRhY2hlZEhlaWdodCA9IGNvbnN0cmFp
bmVkQXR0YWNoZWRXaW5kb3dIZWlnaHQoaGVpZ2h0LCB0b3RhbEhlaWdodCk7CisgICAgbV9pbnNw
ZWN0b3JDb250cm9sbGVyLT5zZXRTZXR0aW5nKGluc3BlY3RvckF0dGFjaGVkSGVpZ2h0TmFtZSwg
U3RyaW5nOjpudW1iZXIoYXR0YWNoZWRIZWlnaHQpKTsKKyAgICBzZXRBdHRhY2hlZFdpbmRvd0hl
aWdodChhdHRhY2hlZEhlaWdodCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRM
b2NhbDo6bW92ZVdpbmRvd0J5KGZsb2F0IHgsIGZsb2F0IHkpCit7CisgICAgRmxvYXRSZWN0IGZy
YW1lUmVjdCA9IG1fZnJvbnRlbmRQYWdlLT5jaHJvbWUoKS0+d2luZG93UmVjdCgpOworICAgIGZy
YW1lUmVjdC5tb3ZlKHgsIHkpOworICAgIG1fZnJvbnRlbmRQYWdlLT5jaHJvbWUoKS0+c2V0V2lu
ZG93UmVjdChmcmFtZVJlY3QpOworfQorCit2b2lkIEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9j
YWw6OnNob3dDb250ZXh0TWVudShFdmVudCogZXZlbnQsIGNvbnN0IFZlY3RvcjxDb250ZXh0TWVu
dUl0ZW0qPiYgaXRlbXMpCit7CisgICAgU2NyaXB0T2JqZWN0IHdlYkluc3BlY3Rvck9iajsKKyAg
ICBpZiAoIVNjcmlwdEdsb2JhbE9iamVjdDo6Z2V0KG1fZnJvbnRlbmRTY3JpcHRTdGF0ZSwgIldl
Ykluc3BlY3RvciIsIHdlYkluc3BlY3Rvck9iaikpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgUmVmUHRyPEZyb250ZW5k
TWVudVByb3ZpZGVyPiBtZW51UHJvdmlkZXIgPSBGcm9udGVuZE1lbnVQcm92aWRlcjo6Y3JlYXRl
KHRoaXMsIHdlYkluc3BlY3Rvck9iaiwgaXRlbXMpOworICAgIENvbnRleHRNZW51Q29udHJvbGxl
ciogbWVudUNvbnRyb2xsZXIgPSBtX2Zyb250ZW5kUGFnZS0+Y29udGV4dE1lbnVDb250cm9sbGVy
KCk7CisgICAgbWVudUNvbnRyb2xsZXItPnNob3dDb250ZXh0TWVudShldmVudCwgbWVudVByb3Zp
ZGVyKTsKKyAgICBtX21lbnVQcm92aWRlciA9IG1lbnVQcm92aWRlci5nZXQoKTsKK30KKwordm9p
ZCBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjpzZXRBdHRhY2hlZFdpbmRvdyhib29sIGF0
dGFjaGVkKQoreworICAgIFNjcmlwdE9iamVjdCB3ZWJJbnNwZWN0b3JPYmo7CisgICAgaWYgKCFT
Y3JpcHRHbG9iYWxPYmplY3Q6OmdldChtX2Zyb250ZW5kU2NyaXB0U3RhdGUsICJXZWJJbnNwZWN0
b3IiLCB3ZWJJbnNwZWN0b3JPYmopKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbih3
ZWJJbnNwZWN0b3JPYmosICJkaXNwYXRjaCIpOyAKKyAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVu
dCgic2V0QXR0YWNoZWRXaW5kb3ciKTsKKyAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChhdHRh
Y2hlZCk7CisgICAgZnVuY3Rpb24uY2FsbCgpOworfQorCit2b2lkIEluc3BlY3RvckZyb250ZW5k
Q2xpZW50TG9jYWw6OnJlc3RvcmVBdHRhY2hlZFdpbmRvd0hlaWdodCgpCit7CisgICAgdW5zaWdu
ZWQgaW5zcGVjdGVkUGFnZUhlaWdodCA9IG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdGVk
UGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpLT52aXNpYmxlSGVpZ2h0KCk7CisgICAgU3RyaW5n
IGF0dGFjaGVkSGVpZ2h0ID0gbV9pbnNwZWN0b3JDb250cm9sbGVyLT5zZXR0aW5nKGluc3BlY3Rv
ckF0dGFjaGVkSGVpZ2h0TmFtZSk7CisgICAgYm9vbCBzdWNjZXNzID0gdHJ1ZTsKKyAgICBpbnQg
aGVpZ2h0ID0gYXR0YWNoZWRIZWlnaHQudG9JbnQoJnN1Y2Nlc3MpOworICAgIHVuc2lnbmVkIHBy
ZWZlcnJlZEhlaWdodCA9IHN1Y2Nlc3MgPyBoZWlnaHQgOiBkZWZhdWx0QXR0YWNoZWRIZWlnaHQ7
CisgICAgCisgICAgLy8gVGhpcyBjYWxsIG1pZ2h0IG5vdCBnbyB0aHJvdWdoIChpZiB0aGUgd2lu
ZG93IHN0YXJ0cyBvdXQgZGV0YWNoZWQpLCBidXQgaWYgdGhlIHdpbmRvdyBpcyBpbml0aWFsbHkg
Y3JlYXRlZCBhdHRhY2hlZCwKKyAgICAvLyBJbnNwZWN0b3JDb250cm9sbGVyOjphdHRhY2hXaW5k
b3cgaXMgbmV2ZXIgY2FsbGVkLCBzbyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0byBzZXQgdGhlIGF0
dGFjaGVkV2luZG93SGVpZ2h0LgorICAgIC8vIEZJWE1FOiBDbGVhbiB1cCBjb2RlIHNvIHdlIG9u
bHkgaGF2ZSB0byBjYWxsIHNldEF0dGFjaGVkV2luZG93SGVpZ2h0IGluIEluc3BlY3RvckNvbnRy
b2xsZXI6OmF0dGFjaFdpbmRvdworICAgIHNldEF0dGFjaGVkV2luZG93SGVpZ2h0KGNvbnN0cmFp
bmVkQXR0YWNoZWRXaW5kb3dIZWlnaHQocHJlZmVycmVkSGVpZ2h0LCBpbnNwZWN0ZWRQYWdlSGVp
Z2h0KSk7Cit9CisKK3Vuc2lnbmVkIEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OmNvbnN0
cmFpbmVkQXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgcHJlZmVycmVkSGVpZ2h0LCB1bnNp
Z25lZCB0b3RhbFdpbmRvd0hlaWdodCkKK3sKKyAgICB1c2luZyBuYW1lc3BhY2Ugc3RkOworICAg
IHJldHVybiByb3VuZGYobWF4KG1pbmltdW1BdHRhY2hlZEhlaWdodCwgbWluPGZsb2F0PihwcmVm
ZXJyZWRIZWlnaHQsIHRvdGFsV2luZG93SGVpZ2h0ICogbWF4aW11bUF0dGFjaGVkSGVpZ2h0UmF0
aW8pKSk7Cit9CisgICAgCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5oIGIv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxOGM0NzkKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmgKQEAgLTAsMCAr
MSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0Ogor
ICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisg
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbF9oCisjZGVmaW5lIElu
c3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWxfaAorCisjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRl
bmRDbGllbnQuaCIKKyNpbmNsdWRlICJTY3JpcHRTdGF0ZS5oIgorI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZyb250ZW5kTWVudVBy
b3ZpZGVyOworY2xhc3MgSW5zcGVjdG9yQ29udHJvbGxlcjsKK2NsYXNzIEluc3BlY3RvckZyb250
ZW5kSG9zdDsKK2NsYXNzIFBhZ2U7CisKK2NsYXNzIEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9j
YWwgOiBwdWJsaWMgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQsIHB1YmxpYyBOb25jb3B5YWJsZSB7
CitwdWJsaWM6CisgICAgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbChJbnNwZWN0b3JDb250
cm9sbGVyKiwgUGFnZSopOworICAgIHZpcnR1YWwgfkluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9j
YWwoKTsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgd2luZG93T2JqZWN0Q2xlYXJlZCgpOworICAg
IHZpcnR1YWwgdm9pZCBmcm9udGVuZExvYWRlZCgpOworCisgICAgdmlydHVhbCB2b2lkIG1vdmVX
aW5kb3dCeShmbG9hdCB4LCBmbG9hdCB5KTsKKworICAgIHZpcnR1YWwgYm9vbCBjYW5BdHRhY2hX
aW5kb3coKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2hhbmdlQXR0YWNoZWRXaW5kb3dIZWlnaHQodW5z
aWduZWQpOworCisgICAgdmlydHVhbCB2b2lkIHNob3dDb250ZXh0TWVudShFdmVudCosIGNvbnN0
IFZlY3RvcjxDb250ZXh0TWVudUl0ZW0qPiYpOworICAgIAorcHJvdGVjdGVkOgorICAgIHZpcnR1
YWwgdm9pZCBzZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCkgPSAwOworCisgICAgdm9p
ZCBzZXRBdHRhY2hlZFdpbmRvdyhib29sKTsKKyAgICB2b2lkIHJlc3RvcmVBdHRhY2hlZFdpbmRv
d0hlaWdodCgpOworCitwcml2YXRlOgorICAgIHN0YXRpYyB1bnNpZ25lZCBjb25zdHJhaW5lZEF0
dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIHByZWZlcnJlZEhlaWdodCwgdW5zaWduZWQgdG90
YWxXaW5kb3dIZWlnaHQpOworCisgICAgZnJpZW5kIGNsYXNzIEZyb250ZW5kTWVudVByb3ZpZGVy
OworICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIG1faW5zcGVjdG9yQ29udHJvbGxlcjsKKyAgICBQ
YWdlKiBtX2Zyb250ZW5kUGFnZTsKKyAgICBTY3JpcHRTdGF0ZSogbV9mcm9udGVuZFNjcmlwdFN0
YXRlOworICAgIC8vIFRPRE8oeXVyeXMpOiB0aGlzIHJlZiBzaG91bGRuJ3QgYmUgbmVlZGVkLgor
ICAgIFJlZlB0cjxJbnNwZWN0b3JGcm9udGVuZEhvc3Q+IG1fZnJvbnRlbmRIb3N0OworICAgIEZy
b250ZW5kTWVudVByb3ZpZGVyKiBtX21lbnVQcm92aWRlcjsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JGcm9udGVuZEhvc3QuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRI
b3N0LmNwcAppbmRleCBjMWExNzYxLi42ZDRjMjE1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckZyb250ZW5kSG9zdC5jcHAKQEAgLTQxLDggKzQxLDcgQEAKICNpbmNsdWRlICJGcmFt
ZUxvYWRlci5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJIVE1MRnJh
bWVPd25lckVsZW1lbnQuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnQuaCIKLSNpbmNsdWRl
ICJJbnNwZWN0b3JGcm9udGVuZC5oIgorI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kQ2xpZW50
LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yUmVzb3VyY2UuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAj
aW5jbHVkZSAiUGFzdGVib2FyZC5oIgpAQCAtNTQsNjUgKzUzLDY5IEBAIHVzaW5nIG5hbWVzcGFj
ZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSW5zcGVjdG9yRnJvbnRlbmRIb3N0OjpJ
bnNwZWN0b3JGcm9udGVuZEhvc3QoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJv
bGxlciwgSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQpCi0gICAgOiBtX2luc3BlY3RvckNvbnRyb2xs
ZXIoaW5zcGVjdG9yQ29udHJvbGxlcikKLSAgICAsIG1fY2xpZW50KGNsaWVudCkKK0luc3BlY3Rv
ckZyb250ZW5kSG9zdDo6SW5zcGVjdG9yRnJvbnRlbmRIb3N0KEluc3BlY3RvckZyb250ZW5kQ2xp
ZW50KiBjbGllbnQpCisgICAgOiBtX2NsaWVudChjbGllbnQpCiB7CiB9CiAKIEluc3BlY3RvckZy
b250ZW5kSG9zdDo6fkluc3BlY3RvckZyb250ZW5kSG9zdCgpCiB7Ci0gICAgaWYgKG1fbWVudVBy
b3ZpZGVyKQotICAgICAgICBtX21lbnVQcm92aWRlci0+ZGlzY29ubmVjdCgpOworICAgIEFTU0VS
VCghbV9jbGllbnQpOwogfQogCiB2b2lkIEluc3BlY3RvckZyb250ZW5kSG9zdDo6bG9hZGVkKCkK
IHsKLSAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyKQotICAgICAgICBtX2luc3BlY3RvckNv
bnRyb2xsZXItPnNjcmlwdE9iamVjdFJlYWR5KCk7CisgICAgaWYgKG1fY2xpZW50KQorICAgICAg
ICBtX2NsaWVudC0+ZnJvbnRlbmRMb2FkZWQoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JGcm9udGVu
ZEhvc3Q6OmF0dGFjaCgpCiB7Ci0gICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlcikKLSAgICAg
ICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5hdHRhY2hXaW5kb3coKTsKKyAgICBpZiAobV9jbGll
bnQpCisgICAgICAgIG1fY2xpZW50LT5hdHRhY2hXaW5kb3coKTsKIH0KIAogdm9pZCBJbnNwZWN0
b3JGcm9udGVuZEhvc3Q6OmRldGFjaCgpCiB7Ci0gICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxl
cikKLSAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kZXRhY2hXaW5kb3coKTsKKyAgICBp
ZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5kZXRhY2hXaW5kb3coKTsKIH0KIAogdm9p
ZCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OmNsb3NlV2luZG93KCkKIHsKLSAgICBpZiAobV9pbnNw
ZWN0b3JDb250cm9sbGVyKQotICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmNsb3NlV2lu
ZG93KCk7CisgICAgaWYgKG1fY2xpZW50KSB7CisgICAgICAgIG1fY2xpZW50LT5jbG9zZVdpbmRv
dygpOworICAgICAgICBtX2NsaWVudCA9IDA7IC8vIERpc2Nvbm5lY3QgZnJvbSBjbGllbnQuCisg
ICAgfQorfQorCit2b2lkIEluc3BlY3RvckZyb250ZW5kSG9zdDo6YnJpbmdUb0Zyb250KCkKK3sK
KyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5icmluZ1RvRnJvbnQoKTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OndpbmRvd1VubG9hZGluZygpCit2b2lkIElu
c3BlY3RvckZyb250ZW5kSG9zdDo6aW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIG5l
d1VSTCkKIHsKLSAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyKQotICAgICAgICBtX2luc3Bl
Y3RvckNvbnRyb2xsZXItPmNsb3NlKCk7CisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2Ns
aWVudC0+aW5zcGVjdGVkVVJMQ2hhbmdlZChuZXdVUkwpOwogfQogCiBib29sIEluc3BlY3RvckZy
b250ZW5kSG9zdDo6Y2FuQXR0YWNoV2luZG93KCkgY29uc3QKIHsKLSAgICBpZiAobV9pbnNwZWN0
b3JDb250cm9sbGVyKQotICAgICAgICByZXR1cm4gbV9pbnNwZWN0b3JDb250cm9sbGVyLT5jYW5B
dHRhY2hXaW5kb3coKTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG1fY2xpZW50ICYm
IG1fY2xpZW50LT5jYW5BdHRhY2hXaW5kb3coKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JGcm9udGVu
ZEhvc3Q6OnNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkKIHsKLSAgICBp
ZiAobV9pbnNwZWN0b3JDb250cm9sbGVyKQotICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXIt
PnNldEF0dGFjaGVkV2luZG93SGVpZ2h0KGhlaWdodCk7CisgICAgaWYgKG1fY2xpZW50KQorICAg
ICAgICBtX2NsaWVudC0+Y2hhbmdlQXR0YWNoZWRXaW5kb3dIZWlnaHQoaGVpZ2h0KTsKIH0KIAog
dm9pZCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6Om1vdmVXaW5kb3dCeShmbG9hdCB4LCBmbG9hdCB5
KSBjb25zdAogewotICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIpCi0gICAgICAgIG1faW5z
cGVjdG9yQ29udHJvbGxlci0+bW92ZVdpbmRvd0J5KHgsIHkpOworICAgIGlmIChtX2NsaWVudCkK
KyAgICAgICAgbV9jbGllbnQtPm1vdmVXaW5kb3dCeSh4LCB5KTsKIH0KIAogU3RyaW5nIEluc3Bl
Y3RvckZyb250ZW5kSG9zdDo6bG9jYWxpemVkU3RyaW5nc1VSTCgpCkBAIC0xNjEsMzAgKzE2NCw4
IEBAIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmRIb3N0Ojpjb3B5VGV4dChjb25zdCBTdHJpbmcmIHRl
eHQpCiAKIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmRIb3N0OjpzaG93Q29udGV4dE1lbnUoRXZlbnQq
IGV2ZW50LCBjb25zdCBWZWN0b3I8Q29udGV4dE1lbnVJdGVtKj4mIGl0ZW1zKQogewotICAgIGlm
ICghbV9pbnNwZWN0b3JDb250cm9sbGVyKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFtX2lu
c3BlY3RvckNvbnRyb2xsZXItPndpbmRvd1Zpc2libGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0K
LSAgICBtX21lbnVQcm92aWRlciA9IE1lbnVQcm92aWRlcjo6Y3JlYXRlKHRoaXMsIGl0ZW1zKTsK
LSAgICBDb250ZXh0TWVudUNvbnRyb2xsZXIqIG1lbnVDb250cm9sbGVyID0gbV9pbnNwZWN0b3JD
b250cm9sbGVyLT5tX3BhZ2UtPmNvbnRleHRNZW51Q29udHJvbGxlcigpOwotICAgIG1lbnVDb250
cm9sbGVyLT5zaG93Q29udGV4dE1lbnUoZXZlbnQsIG1fbWVudVByb3ZpZGVyKTsKLX0KLQotdm9p
ZCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OmNvbnRleHRNZW51SXRlbVNlbGVjdGVkKENvbnRleHRN
ZW51SXRlbSogaXRlbSkKLXsKLSAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyICYmIG1faW5z
cGVjdG9yQ29udHJvbGxlci0+d2luZG93VmlzaWJsZSgpKSB7Ci0gICAgICAgIGludCBpdGVtTnVt
YmVyID0gaXRlbS0+YWN0aW9uKCkgLSBDb250ZXh0TWVudUl0ZW1CYXNlQ3VzdG9tVGFnOwotICAg
ICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPm1fZnJvbnRlbmQtPmNvbnRleHRNZW51SXRlbVNl
bGVjdGVkKGl0ZW1OdW1iZXIpOwotICAgIH0KLX0KLQotdm9pZCBJbnNwZWN0b3JGcm9udGVuZEhv
c3Q6OmNvbnRleHRNZW51Q2xlYXJlZCgpCi17Ci0gICAgbV9tZW51UHJvdmlkZXIgPSAwOwotICAg
IGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIgJiYgbV9pbnNwZWN0b3JDb250cm9sbGVyLT53aW5k
b3dWaXNpYmxlKCkpCi0gICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+bV9mcm9udGVuZC0+
Y29udGV4dE1lbnVDbGVhcmVkKCk7CisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVu
dC0+c2hvd0NvbnRleHRNZW51KGV2ZW50LCBpdGVtcyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9z
dC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmgKaW5kZXggY2Jl
NmE5Yi4uNmUxNjI5NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJv
bnRlbmRIb3N0LmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0
LmgKQEAgLTQzLDI3ICs0MywyNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDb250ZXh0
TWVudUl0ZW07CiBjbGFzcyBFdmVudDsKIGNsYXNzIEluc3BlY3RvckNsaWVudDsKK2NsYXNzIElu
c3BlY3RvckZyb250ZW5kQ2xpZW50OwogY2xhc3MgTm9kZTsKIAogY2xhc3MgSW5zcGVjdG9yRnJv
bnRlbmRIb3N0IDogcHVibGljIFJlZkNvdW50ZWQ8SW5zcGVjdG9yRnJvbnRlbmRIb3N0Pgogewog
cHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvckZyb250ZW5kSG9zdD4gY3Jl
YXRlKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIsIEluc3BlY3RvckNs
aWVudCogY2xpZW50KQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvckZyb250ZW5kSG9z
dD4gY3JlYXRlKEluc3BlY3RvckZyb250ZW5kQ2xpZW50KiBjbGllbnQpCiAgICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvckZyb250ZW5kSG9zdChpbnNwZWN0b3JDb250
cm9sbGVyLCBjbGllbnQpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JG
cm9udGVuZEhvc3QoY2xpZW50KSk7CiAgICAgfQogCiAgICAgfkluc3BlY3RvckZyb250ZW5kSG9z
dCgpOwogCi0gICAgSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlcigpIHsg
cmV0dXJuIG1faW5zcGVjdG9yQ29udHJvbGxlcjsgfQotCi0gICAgdm9pZCBkaXNjb25uZWN0Q29u
dHJvbGxlcigpIHsgbV9pbnNwZWN0b3JDb250cm9sbGVyID0gMDsgfQotCiAgICAgdm9pZCBsb2Fk
ZWQoKTsKICAgICB2b2lkIGF0dGFjaCgpOwogICAgIHZvaWQgZGV0YWNoKCk7CiAgICAgdm9pZCBj
bG9zZVdpbmRvdygpOwotICAgIHZvaWQgd2luZG93VW5sb2FkaW5nKCk7CisgICAgdm9pZCBicmlu
Z1RvRnJvbnQoKTsKKyAgICB2b2lkIGluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJik7
CiAKICAgICBib29sIGNhbkF0dGFjaFdpbmRvdygpIGNvbnN0OwogICAgIHZvaWQgc2V0QXR0YWNo
ZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KTsKQEAgLTgwLDU5ICs3OCw5IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHNob3dDb250ZXh0TWVudShFdmVudCosIGNvbnN0IFZlY3RvcjxDb250ZXh0
TWVudUl0ZW0qPiYgaXRlbXMpOwogCiBwcml2YXRlOgotICAgIGNsYXNzIE1lbnVQcm92aWRlciA6
IHB1YmxpYyBDb250ZXh0TWVudVByb3ZpZGVyIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPE1lbnVQcm92aWRlcj4gY3JlYXRlKEluc3BlY3RvckZyb250ZW5kSG9zdCog
ZnJvbnRlbmRIb3N0LCBjb25zdCBWZWN0b3I8Q29udGV4dE1lbnVJdGVtKj4mIGl0ZW1zKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lbnVQcm92aWRlcihmcm9u
dGVuZEhvc3QsIGl0ZW1zKSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2aXJ0dWFsIH5NZW51UHJv
dmlkZXIoKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0TWVudUNsZWFyZWQoKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIHZvaWQgZGlzY29ubmVjdCgpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIG1fZnJvbnRlbmRIb3N0ID0gMDsKLSAgICAgICAgfQotCi0gICAgICAgIHZpcnR1YWwgdm9p
ZCBwb3B1bGF0ZUNvbnRleHRNZW51KENvbnRleHRNZW51KiBtZW51KQotICAgICAgICB7Ci0gICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1faXRlbXMuc2l6ZSgpOyArK2kpCi0gICAg
ICAgICAgICAgICAgbWVudS0+YXBwZW5kSXRlbSgqbV9pdGVtc1tpXSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICB2aXJ0dWFsIHZvaWQgY29udGV4dE1lbnVJdGVtU2VsZWN0ZWQoQ29udGV4dE1lbnVJ
dGVtKiBpdGVtKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobV9mcm9udGVuZEhvc3QpCi0g
ICAgICAgICAgICAgICAgbV9mcm9udGVuZEhvc3QtPmNvbnRleHRNZW51SXRlbVNlbGVjdGVkKGl0
ZW0pOwotICAgICAgICB9Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIGNvbnRleHRNZW51Q2xlYXJl
ZCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtX2Zyb250ZW5kSG9zdCkKLSAgICAgICAg
ICAgICAgICBtX2Zyb250ZW5kSG9zdC0+Y29udGV4dE1lbnVDbGVhcmVkKCk7Ci0gICAgICAgICAg
ICBkZWxldGVBbGxWYWx1ZXMobV9pdGVtcyk7Ci0gICAgICAgICAgICBtX2l0ZW1zLmNsZWFyKCk7
Ci0gICAgICAgIH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIE1lbnVQcm92aWRlcihJbnNwZWN0
b3JGcm9udGVuZEhvc3QqIGZyb250ZW5kSG9zdCwgIGNvbnN0IFZlY3RvcjxDb250ZXh0TWVudUl0
ZW0qPiYgaXRlbXMpCi0gICAgICAgICAgICA6IG1fZnJvbnRlbmRIb3N0KGZyb250ZW5kSG9zdCkK
LSAgICAgICAgICAgICwgbV9pdGVtcyhpdGVtcykgeyB9Ci0gICAgICAgIEluc3BlY3RvckZyb250
ZW5kSG9zdCogbV9mcm9udGVuZEhvc3Q7Ci0gICAgICAgIFZlY3RvcjxDb250ZXh0TWVudUl0ZW0q
PiBtX2l0ZW1zOwotICAgIH07Ci0KLSAgICBJbnNwZWN0b3JGcm9udGVuZEhvc3QoSW5zcGVjdG9y
Q29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciwgSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQp
OwotCi0gICAgdm9pZCBjb250ZXh0TWVudUl0ZW1TZWxlY3RlZChDb250ZXh0TWVudUl0ZW0qKTsK
LSAgICB2b2lkIGNvbnRleHRNZW51Q2xlYXJlZCgpOwotCi0gICAgSW5zcGVjdG9yQ29udHJvbGxl
ciogbV9pbnNwZWN0b3JDb250cm9sbGVyOwotICAgIEluc3BlY3RvckNsaWVudCogbV9jbGllbnQ7
Ci0gICAgUmVmUHRyPE1lbnVQcm92aWRlcj4gbV9tZW51UHJvdmlkZXI7CisgICAgSW5zcGVjdG9y
RnJvbnRlbmRIb3N0KEluc3BlY3RvckZyb250ZW5kQ2xpZW50KiBjbGllbnQpOworCisgICAgSW5z
cGVjdG9yRnJvbnRlbmRDbGllbnQqIG1fY2xpZW50OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0
LmlkbCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5pZGwKaW5kZXgg
MTUwZTlmYy4uMGFlZjVjNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RnJvbnRlbmRIb3N0LmlkbAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVu
ZEhvc3QuaWRsCkBAIC0zNiw3ICszNiw4IEBAIG1vZHVsZSBjb3JlIHsKICAgICAgICAgdm9pZCBh
dHRhY2goKTsKICAgICAgICAgdm9pZCBkZXRhY2goKTsKICAgICAgICAgdm9pZCBjbG9zZVdpbmRv
dygpOwotICAgICAgICB2b2lkIHdpbmRvd1VubG9hZGluZygpOworICAgICAgICB2b2lkIGJyaW5n
VG9Gcm9udCgpOworICAgICAgICB2b2lkIGluc3BlY3RlZFVSTENoYW5nZWQoaW4gRE9NU3RyaW5n
IG5ld1VSTCk7CiAKICAgICAgICAgYm9vbGVhbiBjYW5BdHRhY2hXaW5kb3coKTsKICAgICAgICAg
dm9pZCBzZXRBdHRhY2hlZFdpbmRvd0hlaWdodChpbiB1bnNpZ25lZCBsb25nIGhlaWdodCk7CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yRnJvbnRlbmRI
b3N0U3R1Yi5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0b3JGcm9udGVu
ZEhvc3RTdHViLmpzCmluZGV4IGVmZjI1MTguLjU0NTYwNjkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0b3JGcm9udGVuZEhvc3RTdHViLmpzCisrKyBiL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0b3JGcm9udGVuZEhvc3RTdHViLmpzCkBA
IC00OCw2ICs0OCwxMSBAQCBXZWJJbnNwZWN0b3IuSW5zcGVjdG9yRnJvbnRlbmRIb3N0U3R1Yi5w
cm90b3R5cGUgPSB7CiAgICAgICAgIHJldHVybiAidW5rbm93biI7CiAgICAgfSwKIAorICAgIGJy
aW5nVG9Gcm9udDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fd2luZG93VmlzaWJs
ZSA9IHRydWU7CisgICAgfSwKKwogICAgIGNsb3NlV2luZG93OiBmdW5jdGlvbigpCiAgICAgewog
ICAgICAgICB0aGlzLl93aW5kb3dWaXNpYmxlID0gZmFsc2U7CkBAIC04Nyw3ICs5Miw3IEBAIFdl
Ykluc3BlY3Rvci5JbnNwZWN0b3JGcm9udGVuZEhvc3RTdHViLnByb3RvdHlwZSA9IHsKICAgICAg
ICAgcmV0dXJuICIiOwogICAgIH0sCiAKLSAgICB3aW5kb3dVbmxvYWRpbmc6IGZ1bmN0aW9uKCkK
KyAgICBpbnNwZWN0ZWRVUkxDaGFuZ2VkOiBmdW5jdGlvbih1cmwpCiAgICAgewogICAgIH0sCiAK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMgYi9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCmluZGV4IDU5MTIwY2QuLjZj
ZDI2MTQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3Iu
anMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcwpAQCAtNDc4
LDcgKzQ3OCw2IEBAIFdlYkluc3BlY3Rvci5sb2FkZWQgPSBmdW5jdGlvbigpCiAKICAgICB0aGlz
LmFkZE1haW5FdmVudExpc3RlbmVycyhkb2N1bWVudCk7CiAKLSAgICB3aW5kb3cuYWRkRXZlbnRM
aXN0ZW5lcigidW5sb2FkIiwgdGhpcy53aW5kb3dVbmxvYWQuYmluZCh0aGlzKSwgdHJ1ZSk7CiAg
ICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsIHRoaXMud2luZG93UmVzaXplLmJp
bmQodGhpcyksIHRydWUpOwogCiAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMi
LCB0aGlzLmZvY3VzQ2hhbmdlZC5iaW5kKHRoaXMpLCB0cnVlKTsKQEAgLTU2MiwxMSArNTYxLDYg
QEAgV2ViSW5zcGVjdG9yLmRpc3BhdGNoID0gZnVuY3Rpb24oKSB7CiAgICAgc2V0VGltZW91dChk
ZWxheURpc3BhdGNoLCAwKTsKIH0KIAotV2ViSW5zcGVjdG9yLndpbmRvd1VubG9hZCA9IGZ1bmN0
aW9uKGV2ZW50KQotewotICAgIEluc3BlY3RvckZyb250ZW5kSG9zdC53aW5kb3dVbmxvYWRpbmco
KTsKLX0KLQogV2ViSW5zcGVjdG9yLndpbmRvd1Jlc2l6ZSA9IGZ1bmN0aW9uKGV2ZW50KQogewog
ICAgIGlmICh0aGlzLmN1cnJlbnRQYW5lbCkKQEAgLTYwNCw2ICs1OTgsOSBAQCBXZWJJbnNwZWN0
b3Iuc2V0QXR0YWNoZWRXaW5kb3cgPSBmdW5jdGlvbihhdHRhY2hlZCkKIAogV2ViSW5zcGVjdG9y
LmNsb3NlID0gZnVuY3Rpb24oZXZlbnQpCiB7CisgICAgaWYgKHRoaXMuX2lzQ2xvc2luZykKKyAg
ICAgICAgcmV0dXJuOworICAgIHRoaXMuX2lzQ2xvc2luZyA9IHRydWU7CiAgICAgSW5zcGVjdG9y
RnJvbnRlbmRIb3N0LmNsb3NlV2luZG93KCk7CiB9CiAKQEAgLTEzMTUsNiArMTMxMiwxNiBAQCBX
ZWJJbnNwZWN0b3IucmVzZXQgPSBmdW5jdGlvbigpCiAgICAgdGhpcy5jb25zb2xlLmNsZWFyTWVz
c2FnZXMoKTsKIH0KIAorV2ViSW5zcGVjdG9yLmJyaW5nVG9Gcm9udCA9IGZ1bmN0aW9uKCkKK3sK
KyAgICBJbnNwZWN0b3JGcm9udGVuZEhvc3QuYnJpbmdUb0Zyb250KCk7Cit9CisKK1dlYkluc3Bl
Y3Rvci5pbnNwZWN0ZWRVUkxDaGFuZ2VkID0gZnVuY3Rpb24odXJsKQoreworICAgIEluc3BlY3Rv
ckZyb250ZW5kSG9zdC5pbnNwZWN0ZWRVUkxDaGFuZ2VkKHVybCk7Cit9CisKIFdlYkluc3BlY3Rv
ci5yZXNvdXJjZVVSTENoYW5nZWQgPSBmdW5jdGlvbihyZXNvdXJjZSwgb2xkVVJMKQogewogICAg
IGRlbGV0ZSB0aGlzLnJlc291cmNlVVJMTWFwW29sZFVSTF07CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2xvYWRlci9FbXB0eUNsaWVudHMuaCBiL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCmlu
ZGV4IGEyNjczNzQuLjhiY2U1MjkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xp
ZW50cy5oCisrKyBiL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCkBAIC00NzEsMjkgKzQ3
MSwxNCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+RW1wdHlJbnNwZWN0b3JDbGllbnQoKSB7IH0K
IAogICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0b3JEZXN0cm95ZWQoKSB7IH0KLQotICAgIHZpcnR1
YWwgUGFnZSogY3JlYXRlUGFnZSgpIHsgcmV0dXJuIDA7IH07Ci0KLSAgICB2aXJ0dWFsIFN0cmlu
ZyBsb2NhbGl6ZWRTdHJpbmdzVVJMKCkgeyByZXR1cm4gU3RyaW5nKCk7IH0KLQotICAgIHZpcnR1
YWwgU3RyaW5nIGhpZGRlblBhbmVscygpIHsgcmV0dXJuIFN0cmluZygpOyB9Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgc2hvd1dpbmRvdygpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBjbG9zZVdpbmRvdygp
IHsgfQotCi0gICAgdmlydHVhbCB2b2lkIGF0dGFjaFdpbmRvdygpIHsgfQotICAgIHZpcnR1YWwg
dm9pZCBkZXRhY2hXaW5kb3coKSB7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBzZXRBdHRhY2hlZFdp
bmRvd0hlaWdodCh1bnNpZ25lZCkgeyB9CisgICAgCisgICAgdmlydHVhbCB2b2lkIG9wZW5JbnNw
ZWN0b3JGcm9udGVuZChJbnNwZWN0b3JDb250cm9sbGVyKikgeyB9CiAKICAgICB2aXJ0dWFsIHZv
aWQgaGlnaGxpZ2h0KE5vZGUqKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgaGlkZUhpZ2hsaWdodCgp
IHsgfQotICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYp
IHsgfQogCiAgICAgdmlydHVhbCB2b2lkIHBvcHVsYXRlU2V0dGluZyhjb25zdCBTdHJpbmcmLCBT
dHJpbmcqKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc3RvcmVTZXR0aW5nKGNvbnN0IFN0cmluZyYs
IGNvbnN0IFN0cmluZyYpIHsgfQotCi0gICAgdmlydHVhbCB2b2lkIGluc3BlY3RvcldpbmRvd09i
amVjdENsZWFyZWQoKSB7IH0KIH07CiAKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvbG9hZGVyL0Zy
YW1lTG9hZGVyLmNwcCBiL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAppbmRleCA1NGM3
OTcyLi5lMTBiNThmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAK
KysrIGIvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCkBAIC0zOTQ0LDggKzM5NDQsNiBA
QCB2b2lkIEZyYW1lTG9hZGVyOjpkaXNwYXRjaERpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZChE
T01XcmFwcGVyV29ybGQqIHdvcmxkKQogICAgIGlmIChQYWdlKiBwYWdlID0gbV9mcmFtZS0+cGFn
ZSgpKSB7CiAgICAgICAgIGlmIChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3IgPSBwYWdl
LT5pbnNwZWN0b3JDb250cm9sbGVyKCkpCiAgICAgICAgICAgICBpbnNwZWN0b3ItPmluc3BlY3Rl
ZFdpbmRvd1NjcmlwdE9iamVjdENsZWFyZWQobV9mcmFtZSk7Ci0gICAgICAgIGlmIChJbnNwZWN0
b3JDb250cm9sbGVyKiBpbnNwZWN0b3IgPSBwYWdlLT5wYXJlbnRJbnNwZWN0b3JDb250cm9sbGVy
KCkpCi0gICAgICAgICAgICBpbnNwZWN0b3ItPndpbmRvd1NjcmlwdE9iamVjdEF2YWlsYWJsZSgp
OwogICAgIH0KICNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwIGIv
V2ViQ29yZS9wYWdlL1BhZ2UuY3BwCmluZGV4IDdkMWU2MjQuLmQ2NmU0OTcgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvcGFnZS9QYWdlLmNwcAorKysgYi9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKQEAgLTEz
OCw5ICsxMzgsNiBAQCBQYWdlOjpQYWdlKENocm9tZUNsaWVudCogY2hyb21lQ2xpZW50LCBDb250
ZXh0TWVudUNsaWVudCogY29udGV4dE1lbnVDbGllbnQsIEVkaQogICAgICwgbV9hcmVNZW1vcnlD
YWNoZUNsaWVudENhbGxzRW5hYmxlZCh0cnVlKQogICAgICwgbV9tZWRpYVZvbHVtZSgxKQogICAg
ICwgbV9qYXZhU2NyaXB0VVJMc0FyZUFsbG93ZWQodHJ1ZSkKLSNpZiBFTkFCTEUoSU5TUEVDVE9S
KQotICAgICwgbV9wYXJlbnRJbnNwZWN0b3JDb250cm9sbGVyKDApCi0jZW5kaWYKICAgICAsIG1f
ZGlkTG9hZFVzZXJTdHlsZVNoZWV0KGZhbHNlKQogICAgICwgbV91c2VyU3R5bGVTaGVldE1vZGlm
aWNhdGlvblRpbWUoMCkKICAgICAsIG1fZ3JvdXAoMCkKQEAgLTE5Niw4ICsxOTMsNiBAQCBQYWdl
Ojp+UGFnZSgpCiAKICAgICBtX2VkaXRvckNsaWVudC0+cGFnZURlc3Ryb3llZCgpOwogI2lmIEVO
QUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKG1fcGFyZW50SW5zcGVjdG9yQ29udHJvbGxlcikKLSAg
ICAgICAgbV9wYXJlbnRJbnNwZWN0b3JDb250cm9sbGVyLT5wYWdlRGVzdHJveWVkKCk7CiAgICAg
bV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0ZWRQYWdlRGVzdHJveWVkKCk7CiAjZW5kaWYK
IApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL1BhZ2UuaCBiL1dlYkNvcmUvcGFnZS9QYWdlLmgK
aW5kZXggZjY5ODI4Ny4uOTRlNmRkNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL1BhZ2UuaAor
KysgYi9XZWJDb3JlL3BhZ2UvUGFnZS5oCkBAIC0xNDksMTEgKzE0OSw2IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICNlbmRpZgogICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3MoKSBjb25zdCB7IHJl
dHVybiBtX3NldHRpbmdzLmdldCgpOyB9CiAgICAgICAgIFByb2dyZXNzVHJhY2tlciogcHJvZ3Jl
c3MoKSBjb25zdCB7IHJldHVybiBtX3Byb2dyZXNzLmdldCgpOyB9Ci0KLSNpZiBFTkFCTEUoSU5T
UEVDVE9SKQotICAgICAgICB2b2lkIHNldFBhcmVudEluc3BlY3RvckNvbnRyb2xsZXIoSW5zcGVj
dG9yQ29udHJvbGxlciogY29udHJvbGxlcikgeyBtX3BhcmVudEluc3BlY3RvckNvbnRyb2xsZXIg
PSBjb250cm9sbGVyOyB9Ci0gICAgICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIHBhcmVudEluc3Bl
Y3RvckNvbnRyb2xsZXIoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudEluc3BlY3RvckNvbnRyb2xs
ZXI7IH0KLSNlbmRpZgogICAgICAgICAKICAgICAgICAgdm9pZCBzZXRUYWJLZXlDeWNsZXNUaHJv
dWdoRWxlbWVudHMoYm9vbCBiKSB7IG1fdGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzID0gYjsg
fQogICAgICAgICBib29sIHRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cygpIGNvbnN0IHsgcmV0
dXJuIG1fdGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzOyB9CkBAIC0yODYsMTAgKzI4MSw2IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBib29sIG1famF2YVNjcmlwdFVSTHNBcmVB
bGxvd2VkOwogCi0jaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICAgICAgSW5zcGVjdG9yQ29udHJv
bGxlciogbV9wYXJlbnRJbnNwZWN0b3JDb250cm9sbGVyOwotI2VuZGlmCi0KICAgICAgICAgU3Ry
aW5nIG1fdXNlclN0eWxlU2hlZXRQYXRoOwogICAgICAgICBtdXRhYmxlIFN0cmluZyBtX3VzZXJT
dHlsZVNoZWV0OwogICAgICAgICBtdXRhYmxlIGJvb2wgbV9kaWRMb2FkVXNlclN0eWxlU2hlZXQ7
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL0NvbnRleHRNZW51LmNwcCBiL1dlYkNvcmUv
cGxhdGZvcm0vQ29udGV4dE1lbnUuY3BwCmluZGV4IDI4M2FhNTYuLjAwMjJhNDcgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1lbnUuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vQ29udGV4dE1lbnUuY3BwCkBAIC0zNTksNiArMzU5LDkgQEAgdm9pZCBDb250ZXh0TWVudTo6
cG9wdWxhdGUoKQogICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oU3BlZWNoTWVudUl0ZW0pOwog
I2VuZGlmICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgfSBlbHNlIHsKKyNpZiBFTkFCTEUo
SU5TUEVDVE9SKQorICAgICAgICAgICAgICAgIGlmICghKGZyYW1lLT5wYWdlKCkgJiYgZnJhbWUt
PnBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5oYXNJbnNwZWN0b3JGcm9udGVuZENsaWVu
dCgpKSkgeworI2VuZGlmCiAjaWYgUExBVEZPUk0oR1RLKQogICAgICAgICAgICAgICAgIGFwcGVu
ZEl0ZW0oQmFja0l0ZW0pOwogICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oRm9yd2FyZEl0ZW0p
OwpAQCAtMzc4LDYgKzM4MSw5IEBAIHZvaWQgQ29udGV4dE1lbnU6OnBvcHVsYXRlKCkKICAgICAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oUmVsb2FkSXRl
bSk7CiAjZW5kaWYKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorICAgICAgICAgICAgICAgIH0KKyNl
bmRpZgogCiAgICAgICAgICAgICAgICAgaWYgKGZyYW1lLT5wYWdlKCkgJiYgZnJhbWUgIT0gZnJh
bWUtPnBhZ2UoKS0+bWFpbkZyYW1lKCkpCiAgICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0o
T3BlbkZyYW1lSXRlbSk7CkBAIC01NTAsNyArNTU2LDYgQEAgdm9pZCBDb250ZXh0TWVudTo6YWRk
SW5zcGVjdEVsZW1lbnRJdGVtKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQ29udGV4dE1lbnVJ
dGVtIEluc3BlY3RFbGVtZW50SXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdJbnNw
ZWN0RWxlbWVudCwgY29udGV4dE1lbnVJdGVtVGFnSW5zcGVjdEVsZW1lbnQoKSk7Ci0gICAgYXBw
ZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgpKTsKICAgICBhcHBlbmRJdGVtKEluc3BlY3RFbGVtZW50
SXRlbSk7CiB9CiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDBl
NDU2MjguLmZkNGJjNmMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysr
IGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDEwLTAzLTEx
ICBZdXJ5IFNlbWlraGF0c2t5IDx5dXJ5c0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW50cm9kdWNlIEluc3BlY3RvckZyb250
ZW5kQ2xpZW50IHRoYXQgcHJvdmlkZXMgSW5zcGVjdG9yRnJvbnRlbmQgd2l0aCBhbiBpbnRlcmZh
Y2UgdG8gdGhlIGVtYmVkZGVyLiBJbnNwZWN0b3JDbGllbnQgbm93IHNlcnZlcyBhcyBhIGRlbGVn
YXRlIGZvciBJbnNwZWN0b3JDb250cm9sbGVyIGFuZCBkb2VzIG5vdCBjb250YWluIG1ldGhvZHMg
Zm9yIG1hbmFnaW5nIGluc3BlY3RvciBmcm9udGVuZCB3aW5kb3cuIFRoYXQgYWxsb3dzIHRvIGNy
ZWF0ZSByZW1vdGUgSW5zcGVjdG9yRnJvbnRlbmRIb3N0LgorCisgICAgICAgIEludHJvZHVjZSBJ
bnNwZWN0b3JGcm9udGVuZENsaWVudCB0aGF0IHdvdWxkIHByb3ZpZGUgSW5zcGVjdG9yRnJvbnRl
bmQgd2l0aCBhbiBpbnRlcmZhY2UgdG8gdGhlIGVtYmVkZGVyCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNTAzNgorCisgICAgICAgICogc3JjL0luc3Bl
Y3RvckNsaWVudEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JDbGllbnRJbXBs
OjpvcGVuSW5zcGVjdG9yRnJvbnRlbmQpOgorICAgICAgICAqIHNyYy9JbnNwZWN0b3JDbGllbnRJ
bXBsLmg6CisgICAgICAgICogc3JjL1dlYkRldlRvb2xzQWdlbnRJbXBsLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudEltcGw6OmF0dGFjaCk6CisgICAgICAgIChXZWJLaXQ6
OldlYkRldlRvb2xzQWdlbnRJbXBsOjpkaWRDb21taXRQcm92aXNpb25hbExvYWQpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6Y3JlYXRlSW5zcGVjdG9yRnJvbnRlbmRQ
cm94eSk6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjpzZXRJbnNwZWN0
b3JGcm9udGVuZFByb3h5VG9JbnNwZWN0b3JDb250cm9sbGVyKToKKyAgICAgICAgKiBzcmMvV2Vi
RGV2VG9vbHNBZ2VudEltcGwuaDoKKyAgICAgICAgKiBzcmMvV2ViRGV2VG9vbHNGcm9udGVuZElt
cGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6V2ViRGV2
VG9vbHNGcm9udGVuZEltcGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0Zyb250ZW5k
SW1wbDo6anNCcmluZ1RvRnJvbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0Zyb250
ZW5kSW1wbDo6anNJbnNwZWN0ZWRVUkxDaGFuZ2VkKToKKyAgICAgICAgKiBzcmMvV2ViRGV2VG9v
bHNGcm9udGVuZEltcGwuaDoKKyAgICAgICAgKiBzcmMvanMvSW5qZWN0RGlzcGF0Y2guanM6Cisg
ICAgICAgIChjbG9zZSk6CisKIDIwMTAtMDMtMTEgIEFhcm9uIEJvb2RtYW4gIDxhYUBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgS2lsbCBXZWJEb2N1bWVudDo6YXBwbGljYXRpb25JRCgpIChwYXJ0
IDEpLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9JbnNwZWN0b3JDbGllbnRJbXBs
LmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvSW5zcGVjdG9yQ2xpZW50SW1wbC5jcHAKaW5kZXgg
NTQ1NTBkMS4uZjY5ZWY3MiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9JbnNwZWN0
b3JDbGllbnRJbXBsLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0luc3BlY3RvckNsaWVu
dEltcGwuY3BwCkBAIC02Myw0NiArNjMsOCBAQCB2b2lkIEluc3BlY3RvckNsaWVudEltcGw6Omlu
c3BlY3RvckRlc3Ryb3llZCgpCiAgICAgLy8gT3VyIGxpZmV0aW1lIGlzIGJvdW5kIHRvIHRoZSBX
ZWJWaWV3SW1wbC4KIH0KIAotUGFnZSogSW5zcGVjdG9yQ2xpZW50SW1wbDo6Y3JlYXRlUGFnZSgp
Cit2b2lkIEluc3BlY3RvckNsaWVudEltcGw6Om9wZW5JbnNwZWN0b3JGcm9udGVuZChJbnNwZWN0
b3JDb250cm9sbGVyKikKIHsKLSAgICAvLyBUaGlzIG1ldGhvZCBzaG91bGQgbmV2ZXIgYmUgY2Fs
bGVkIGluIENocm9tZSBhcyBpbnNwZWN0b3IgZnJvbnQtZW5kIGxpdmVzCi0gICAgLy8gaW4gYSBz
ZXBhcmF0ZSBwcm9jZXNzLgotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAw
OwotfQotCi12b2lkIEluc3BlY3RvckNsaWVudEltcGw6OnNob3dXaW5kb3coKQotewotICAgIEFT
U0VSVChtX2luc3BlY3RlZFdlYlZpZXctPmRldlRvb2xzQWdlbnRQcml2YXRlKCkpOwotICAgIG1f
aW5zcGVjdGVkV2ViVmlldy0+cGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnNldFdpbmRv
d1Zpc2libGUodHJ1ZSk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ2xpZW50SW1wbDo6Y2xvc2VXaW5k
b3coKQotewotICAgIGlmIChtX2luc3BlY3RlZFdlYlZpZXctPnBhZ2UoKSkKLSAgICAgICAgbV9p
bnNwZWN0ZWRXZWJWaWV3LT5wYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0V2luZG93
VmlzaWJsZShmYWxzZSk7Ci19Ci0KLWJvb2wgSW5zcGVjdG9yQ2xpZW50SW1wbDo6d2luZG93Vmlz
aWJsZSgpCi17Ci0gICAgQVNTRVJUKG1faW5zcGVjdGVkV2ViVmlldy0+ZGV2VG9vbHNBZ2VudFBy
aXZhdGUoKSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEluc3BlY3RvckNsaWVudElt
cGw6OmF0dGFjaFdpbmRvdygpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzCi19Ci0K
LXZvaWQgSW5zcGVjdG9yQ2xpZW50SW1wbDo6ZGV0YWNoV2luZG93KCkKLXsKLSAgICAvLyBGSVhN
RTogSW1wbGVtZW50IHRoaXMKLX0KLQotdm9pZCBJbnNwZWN0b3JDbGllbnRJbXBsOjpzZXRBdHRh
Y2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBpbnQgaGVpZ2h0KQotewotICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQgdGhpcwotICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKIHN0YXRpYyB2b2lkIGlu
dmFsaWRhdGVOb2RlQm91bmRpbmdSZWN0KFdlYlZpZXdJbXBsKiB3ZWJWaWV3KQpAQCAtMTMwLDIz
ICs5Miw2IEBAIHZvaWQgSW5zcGVjdG9yQ2xpZW50SW1wbDo6aGlkZUhpZ2hsaWdodCgpCiAgICAg
aW52YWxpZGF0ZU5vZGVCb3VuZGluZ1JlY3QobV9pbnNwZWN0ZWRXZWJWaWV3KTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JDbGllbnRJbXBsOjppbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYg
bmV3VVJMKQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcwotfQotCi1TdHJpbmcgSW5z
cGVjdG9yQ2xpZW50SW1wbDo6bG9jYWxpemVkU3RyaW5nc1VSTCgpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBJbnNwZWN0b3JDbGll
bnRJbXBsOjpoaWRkZW5QYW5lbHMoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0
dXJuICIiOwotfQotCiB2b2lkIEluc3BlY3RvckNsaWVudEltcGw6OnBvcHVsYXRlU2V0dGluZyhj
b25zdCBTdHJpbmcmIGtleSwgU3RyaW5nKiB2YWx1ZSkKIHsKICAgICBsb2FkU2V0dGluZ3MoKTsK
QEAgLTE2MSwxMSArMTA2LDYgQEAgdm9pZCBJbnNwZWN0b3JDbGllbnRJbXBsOjpzdG9yZVNldHRp
bmcoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgc2F2ZVNldHRp
bmdzKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ2xpZW50SW1wbDo6aW5zcGVjdG9yV2luZG93T2Jq
ZWN0Q2xlYXJlZCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQogdm9pZCBJbnNwZWN0
b3JDbGllbnRJbXBsOjpsb2FkU2V0dGluZ3MoKQogewogICAgIGlmIChtX3NldHRpbmdzKQpkaWZm
IC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9JbnNwZWN0b3JDbGllbnRJbXBsLmggYi9XZWJL
aXQvY2hyb21pdW0vc3JjL0luc3BlY3RvckNsaWVudEltcGwuaAppbmRleCA2ZjdmOGIxLi5jY2Jj
ZWY3IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL0luc3BlY3RvckNsaWVudEltcGwu
aAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0luc3BlY3RvckNsaWVudEltcGwuaApAQCAtNDUs
MjUgKzQ1LDE1IEBAIHB1YmxpYzoKIAogICAgIC8vIEluc3BlY3RvckNsaWVudCBtZXRob2RzOgog
ICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0b3JEZXN0cm95ZWQoKTsKLSAgICB2aXJ0dWFsIFdlYkNv
cmU6OlBhZ2UqIGNyZWF0ZVBhZ2UoKTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlN0cmluZyBsb2Nh
bGl6ZWRTdHJpbmdzVVJMKCk7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpTdHJpbmcgaGlkZGVuUGFu
ZWxzKCk7Ci0gICAgdmlydHVhbCB2b2lkIHNob3dXaW5kb3coKTsKLSAgICB2aXJ0dWFsIHZvaWQg
Y2xvc2VXaW5kb3coKTsKLSAgICB2aXJ0dWFsIGJvb2wgd2luZG93VmlzaWJsZSgpOwotICAgIHZp
cnR1YWwgdm9pZCBhdHRhY2hXaW5kb3coKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoV2luZG93
KCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhl
aWdodCk7CisgICAgdmlydHVhbCB2b2lkIG9wZW5JbnNwZWN0b3JGcm9udGVuZChXZWJDb3JlOjpJ
bnNwZWN0b3JDb250cm9sbGVyKik7CiAgICAgdmlydHVhbCB2b2lkIGhpZ2hsaWdodChXZWJDb3Jl
OjpOb2RlKik7CiAgICAgdmlydHVhbCB2b2lkIGhpZGVIaWdobGlnaHQoKTsKLSAgICB2aXJ0dWFs
IHZvaWQgaW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpTdHJpbmcmIG5ld1VSTCk7
CiAgICAgdmlydHVhbCB2b2lkIHBvcHVsYXRlU2V0dGluZygKICAgICAgICAgY29uc3QgV2ViQ29y
ZTo6U3RyaW5nJiBrZXksCiAgICAgICAgIFdlYkNvcmU6OlN0cmluZyogdmFsdWUpOwogICAgIHZp
cnR1YWwgdm9pZCBzdG9yZVNldHRpbmcoCiAgICAgICAgIGNvbnN0IFdlYkNvcmU6OlN0cmluZyYg
a2V5LAogICAgICAgICBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIHZhbHVlKTsKLSAgICB2aXJ0dWFs
IHZvaWQgaW5zcGVjdG9yV2luZG93T2JqZWN0Q2xlYXJlZCgpOwogCiBwcml2YXRlOgogICAgIHZv
aWQgbG9hZFNldHRpbmdzKCk7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRl
dlRvb2xzQWdlbnRJbXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2Vu
dEltcGwuY3BwCmluZGV4IGFmNTA2MmEuLjIxZjMxZjQgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuY3BwCkBAIC0xNjksNyArMTY5LDcgQEAgdm9pZCBXZWJE
ZXZUb29sc0FnZW50SW1wbDo6YXR0YWNoKCkKICAgICAgICAgbmV3IERlYnVnZ2VyQWdlbnRJbXBs
KG1fd2ViVmlld0ltcGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2RlYnVnZ2Vy
QWdlbnREZWxlZ2F0ZVN0dWIuZ2V0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
aGlzKSk7Ci0gICAgcmVzZXRJbnNwZWN0b3JGcm9udGVuZFByb3h5KCk7CisgICAgY3JlYXRlSW5z
cGVjdG9yRnJvbnRlbmRQcm94eSgpOwogCiAgICAgLy8gQWxsb3cgY29udHJvbGxlciB0byBzZW5k
IG1lc3NhZ2VzIHRvIHRoZSBmcm9udGVuZC4KICAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBpYyA9
IGluc3BlY3RvckNvbnRyb2xsZXIoKTsKQEAgLTE4NSw3ICsxODUsNyBAQCB2b2lkIFdlYkRldlRv
b2xzQWdlbnRJbXBsOjphdHRhY2goKQogICAgICAgICB9CiAgICAgfQogCi0gICAgaWMtPnNldFdp
bmRvd1Zpc2libGUodHJ1ZSwgZmFsc2UpOworICAgIHNldEluc3BlY3RvckZyb250ZW5kUHJveHlU
b0luc3BlY3RvckNvbnRyb2xsZXIoKTsKICAgICBtX2F0dGFjaGVkID0gdHJ1ZTsKIH0KIApAQCAt
MjE2LDcgKzIxNiw2IEBAIHZvaWQgV2ViRGV2VG9vbHNBZ2VudEltcGw6OmRpZENvbW1pdFByb3Zp
c2lvbmFsTG9hZChXZWJGcmFtZUltcGwqIHdlYmZyYW1lLCBib29sCiAgICAgICAgIGRzLT51bnJl
YWNoYWJsZVVSTCgpIDoKICAgICAgICAgcmVxdWVzdC51cmwoKTsKICAgICBpZiAoIXdlYmZyYW1l
LT5wYXJlbnQoKSkgewotICAgICAgICByZXNldEluc3BlY3RvckZyb250ZW5kUHJveHkoKTsKICAg
ICAgICAgbV90b29sc0FnZW50RGVsZWdhdGVTdHViLT5mcmFtZU5hdmlnYXRlKFdlYkNvcmU6OktV
UkwodXJsKS5zdHJpbmcoKSk7CiAgICAgICAgIFNldEFwdUFnZW50RW5hYmxlZEluVXRpbGl0eUNv
bnRleHQobV91dGlsaXR5Q29udGV4dCwgbV9hcHVBZ2VudEVuYWJsZWQpOwogICAgIH0KQEAgLTM1
Nyw3ICszNTYsNyBAQCB2ODo6TG9jYWw8djg6Ok9iamVjdD4gV2ViRGV2VG9vbHNBZ2VudEltcGw6
OmNyZWF0ZUluc3BlY3RvckJhY2tlbmRWOFdyYXBwZXIoKQogICAgIHJldHVybiBpbnN0YW5jZTsK
IH0KIAotdm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6cmVzZXRJbnNwZWN0b3JGcm9udGVuZFBy
b3h5KCkKK3ZvaWQgV2ViRGV2VG9vbHNBZ2VudEltcGw6OmNyZWF0ZUluc3BlY3RvckZyb250ZW5k
UHJveHkoKQogewogICAgIGRpc3Bvc2VVdGlsaXR5Q29udGV4dCgpOwogICAgIG1fdXRpbGl0eUNv
bnRleHQgPSB2ODo6Q29udGV4dDo6TmV3KCk7CkBAIC0zNjgsOCArMzY3LDE2IEBAIHZvaWQgV2Vi
RGV2VG9vbHNBZ2VudEltcGw6OnJlc2V0SW5zcGVjdG9yRnJvbnRlbmRQcm94eSgpCiAgICAgdjg6
OkNvbnRleHQ6OlNjb3BlIGNvbnRleHRTY29wZShtX3V0aWxpdHlDb250ZXh0KTsKICAgICBTY3Jp
cHRTdGF0ZSogc3RhdGUgPSBTY3JpcHRTdGF0ZTo6Zm9yQ29udGV4dCgKICAgICAgICAgdjg6Okxv
Y2FsPHY4OjpDb250ZXh0Pjo6TmV3KG1fdXRpbGl0eUNvbnRleHQpKTsKK30KKwordm9pZCBXZWJE
ZXZUb29sc0FnZW50SW1wbDo6c2V0SW5zcGVjdG9yRnJvbnRlbmRQcm94eVRvSW5zcGVjdG9yQ29u
dHJvbGxlcigpCit7CisgICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOworICAgIFNjcmlwdFN0YXRl
KiBzdGF0ZSA9IFNjcmlwdFN0YXRlOjpmb3JDb250ZXh0KAorICAgICAgICB2ODo6TG9jYWw8djg6
OkNvbnRleHQ+OjpOZXcobV91dGlsaXR5Q29udGV4dCkpOwogICAgIEluc3BlY3RvckNvbnRyb2xs
ZXIqIGljID0gaW5zcGVjdG9yQ29udHJvbGxlcigpOwotICAgIGljLT5zZXRGcm9udGVuZFByb3h5
T2JqZWN0KHN0YXRlLCBTY3JpcHRPYmplY3Qoc3RhdGUsIG1fdXRpbGl0eUNvbnRleHQtPkdsb2Jh
bCgpKSk7CisgICAgaWMtPnNldEZyb250ZW5kKG5ldyBJbnNwZWN0b3JGcm9udGVuZCgKKyAgICAg
ICAgU2NyaXB0T2JqZWN0KHN0YXRlLCBtX3V0aWxpdHlDb250ZXh0LT5HbG9iYWwoKSkpKTsKIH0K
IAogdm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6c2V0QXB1QWdlbnRFbmFibGVkKGJvb2wgZW5h
YmxlZCkKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudElt
cGwuaCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuaAppbmRleCAy
MDdiYWRhLi40NTVkY2VmIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRv
b2xzQWdlbnRJbXBsLmgKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50
SW1wbC5oCkBAIC0xMDksNyArMTA5LDggQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgY29tcGlsZVV0
aWxpdHlTY3JpcHRzKCk7CiAgICAgdm9pZCBpbml0RGV2VG9vbHNBZ2VudEhvc3QoKTsKLSAgICB2
b2lkIHJlc2V0SW5zcGVjdG9yRnJvbnRlbmRQcm94eSgpOworICAgIHZvaWQgY3JlYXRlSW5zcGVj
dG9yRnJvbnRlbmRQcm94eSgpOworICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRQcm94eVRv
SW5zcGVjdG9yQ29udHJvbGxlcigpOwogICAgIHZvaWQgc2V0QXB1QWdlbnRFbmFibGVkKGJvb2wg
ZW5hYmxlZCk7CiAKICAgICBXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JD
b250cm9sbGVyKCk7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xz
RnJvbnRlbmRJbXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNGcm9udGVu
ZEltcGwuY3BwCmluZGV4IGQ1YjhlYmMuLjhhMmY4MWMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViRGV2VG9vbHNGcm9udGVuZEltcGwuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViRGV2VG9vbHNGcm9udGVuZEltcGwuY3BwCkBAIC0xNTYsOCArMTU2LDExIEBAIFdl
YkRldlRvb2xzRnJvbnRlbmRJbXBsOjpXZWJEZXZUb29sc0Zyb250ZW5kSW1wbCgKICAgICAgICAg
InNldFNldHRpbmciLAogICAgICAgICBXZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6anNTZXRTZXR0
aW5nKTsKICAgICBkZXZUb29sc0hvc3QuYWRkUHJvdG9GdW5jdGlvbigKLSAgICAgICAgIndpbmRv
d1VubG9hZGluZyIsCi0gICAgICAgIFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjpqc1dpbmRvd1Vu
bG9hZGluZyk7CisgICAgICAgICJicmluZ1RvRnJvbnQiLAorICAgICAgICBXZWJEZXZUb29sc0Zy
b250ZW5kSW1wbDo6anNCcmluZ1RvRnJvbnQpOworICAgIGRldlRvb2xzSG9zdC5hZGRQcm90b0Z1
bmN0aW9uKAorICAgICAgICAiaW5zcGVjdGVkVVJMQ2hhbmdlZCIsCisgICAgICAgIFdlYkRldlRv
b2xzRnJvbnRlbmRJbXBsOjpqc0luc3BlY3RlZFVSTENoYW5nZWQpOwogICAgIGRldlRvb2xzSG9z
dC5hZGRQcm90b0Z1bmN0aW9uKAogICAgICAgICAic2hvd0NvbnRleHRNZW51IiwKICAgICAgICAg
V2ViRGV2VG9vbHNGcm9udGVuZEltcGw6OmpzU2hvd0NvbnRleHRNZW51KTsKQEAgLTM0Niw5ICsz
NDksMTMgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjpq
c0RlYnVnZ2VyUGF1c2VTY3JpcHQoY29uc3Qgdjg6OkEKICAgICByZXR1cm4gdjg6OlVuZGVmaW5l
ZCgpOwogfQogCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gV2ViRGV2VG9vbHNGcm9udGVuZEltcGw6
OmpzV2luZG93VW5sb2FkaW5nKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gV2ViRGV2VG9vbHNGcm9udGVuZEltcGw6OmpzQnJpbmdUb0Zyb250KGNvbnN0
IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKK30K
Kwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjpqc0luc3Bl
Y3RlZFVSTENoYW5nZWQoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsKLSAgICAvLyBUT0RP
KHBmZWxkbWFuKTogSW1wbGVtZW50IHRoaXMuCiAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsK
IH0KIApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0Zyb250ZW5k
SW1wbC5oIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0Zyb250ZW5kSW1wbC5oCmlu
ZGV4IGJhMDAxM2IuLjY1OTE2OTMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
RGV2VG9vbHNGcm9udGVuZEltcGwuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRv
b2xzRnJvbnRlbmRJbXBsLmgKQEAgLTE0Miw3ICsxNDIsOCBAQCBwcml2YXRlOgogICAgIHN0YXRp
YyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4ganNTZXR0aW5nKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFy
Z3MpOwogICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4ganNTZXRTZXR0aW5nKGNvbnN0
IHY4OjpBcmd1bWVudHMmIGFyZ3MpOwogICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
anNEZWJ1Z2dlclBhdXNlU2NyaXB0KGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpOwotICAgIHN0
YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4ganNXaW5kb3dVbmxvYWRpbmcoY29uc3Qgdjg6OkFy
Z3VtZW50cyYgYXJncyk7CisgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBqc0JyaW5n
VG9Gcm9udChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKTsKKyAgICBzdGF0aWMgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IGpzSW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCB2ODo6QXJndW1lbnRzJiBh
cmdzKTsKICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGpzU2hvd0NvbnRleHRNZW51
KGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpOwogICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4ganNDYW5BdHRhY2hXaW5kb3coY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncyk7CiAKZGlm
ZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvSW5qZWN0RGlzcGF0Y2guanMgYi9XZWJL
aXQvY2hyb21pdW0vc3JjL2pzL0luamVjdERpc3BhdGNoLmpzCmluZGV4IGUwNzBjNDIuLjY4YmNk
YmQgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvSW5qZWN0RGlzcGF0Y2guanMK
KysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9JbmplY3REaXNwYXRjaC5qcwpAQCAtMTA0LDMg
KzEwNCw3IEBAIGZ1bmN0aW9uIGRpc3BhdGNoKG1ldGhvZCwgdmFyX2FyZ3MpIHsKICAgICB2YXIg
Y2FsbCA9IEpTT04uc3RyaW5naWZ5KGFyZ3MpOwogICAgIERldlRvb2xzQWdlbnRIb3N0LmRpc3Bh
dGNoKGNhbGwpOwogfTsKKworZnVuY3Rpb24gY2xvc2UoKSB7CisgICAgLy8gVGhpcyBtZXRob2Qg
aXMgY2FsbGVkIHdoZW4gSW5zcGVjdG9yRnJvbnRlbmQgY2xvc2VzIGluIGxheW91dCB0ZXN0cy4K
K30KZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvQ2hhbmdlTG9nIGIvV2ViS2l0L2d0ay9DaGFuZ2VM
b2cKaW5kZXggMmEyODllMi4uOTRiNTA0OSAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNCBAQAorMjAxMC0wMy0x
MCAgWXVyeSBTZW1pa2hhdHNreSA8eXVyeXNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEludHJvZHVjZSBJbnNwZWN0b3JGcm9u
dGVuZENsaWVudCB0aGF0IHByb3ZpZGVzIEluc3BlY3RvckZyb250ZW5kIHdpdGggYW4gaW50ZXJm
YWNlIHRvIHRoZSBlbWJlZGRlci4gSW5zcGVjdG9yQ2xpZW50IG5vdyBzZXJ2ZXMgYXMgYSBkZWxl
Z2F0ZSBmb3IgSW5zcGVjdG9yQ29udHJvbGxlciBhbmQgZG9lcyBub3QgY29udGFpbiBtZXRob2Rz
IGZvciBtYW5hZ2luZyBpbnNwZWN0b3IgZnJvbnRlbmQgd2luZG93LiBUaGF0IGFsbG93cyB0byBj
cmVhdGUgcmVtb3RlIEluc3BlY3RvckZyb250ZW5kSG9zdC4KKworICAgICAgICBJbnRyb2R1Y2Ug
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQgdGhhdCB3b3VsZCBwcm92aWRlIEluc3BlY3RvckZyb250
ZW5kIHdpdGggYW4gaW50ZXJmYWNlIHRvIHRoZSBlbWJlZGRlcgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzUwMzYKKworICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L0luc3BlY3RvckNsaWVudEd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6Om5vdGlmeVdl
YlZpZXdEZXN0cm95ZWQpOgorICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JDbGllbnQ6Okluc3Bl
Y3RvckNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6Okluc3BlY3RvckNsaWVudDo6aW5zcGVjdG9y
RGVzdHJveWVkKToKKyAgICAgICAgKFdlYktpdDo6SW5zcGVjdG9yQ2xpZW50OjpvcGVuSW5zcGVj
dG9yRnJvbnRlbmQpOgorICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JDbGllbnQ6OmhpZ2hsaWdo
dCk6CisgICAgICAgIChXZWJLaXQ6Okluc3BlY3RvckNsaWVudDo6aGlkZUhpZ2hsaWdodCk6Cisg
ICAgICAgIChXZWJLaXQ6Okluc3BlY3RvckNsaWVudDo6cG9wdWxhdGVTZXR0aW5nKToKKyAgICAg
ICAgKFdlYktpdDo6SW5zcGVjdG9yQ2xpZW50OjpzdG9yZVNldHRpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQpOgor
ICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6fkluc3BlY3RvckZyb250
ZW5kQ2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmRl
c3Ryb3lJbnNwZWN0b3JXaW5kb3cpOgorICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JGcm9udGVu
ZENsaWVudDo6bG9jYWxpemVkU3RyaW5nc1VSTCk6CisgICAgICAgIChXZWJLaXQ6Okluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50OjpoaWRkZW5QYW5lbHMpOgorICAgICAgICAoV2ViS2l0OjpJbnNwZWN0
b3JGcm9udGVuZENsaWVudDo6YnJpbmdUb0Zyb250KToKKyAgICAgICAgKFdlYktpdDo6SW5zcGVj
dG9yRnJvbnRlbmRDbGllbnQ6OmNsb3NlV2luZG93KToKKyAgICAgICAgKFdlYktpdDo6SW5zcGVj
dG9yRnJvbnRlbmRDbGllbnQ6OmF0dGFjaFdpbmRvdyk6CisgICAgICAgIChXZWJLaXQ6Okluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50OjpkZXRhY2hXaW5kb3cpOgorICAgICAgICAoV2ViS2l0OjpJbnNw
ZWN0b3JGcm9udGVuZENsaWVudDo6c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQpOgorICAgICAgICAo
V2ViS2l0OjpJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6aW5zcGVjdGVkVVJMQ2hhbmdlZCk6Cisg
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50R3RrLmg6CisKIDIwMTAtMDMt
MTEgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBEYXZpZCBIeWF0dC4KZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBv
cnQvSW5zcGVjdG9yQ2xpZW50R3RrLmNwcCBiL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvSW5z
cGVjdG9yQ2xpZW50R3RrLmNwcAppbmRleCA5OWJjNjI3Li5lNzJhYzA1IDEwMDY0NAotLS0gYS9X
ZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudEd0ay5jcHAKKysrIGIvV2Vi
S2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRHdGsuY3BwCkBAIC0zMSw2NyAr
MzEsNDAgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewog
Ci1zdGF0aWMgdm9pZCBub3RpZnlXZWJWaWV3RGVzdHJveWVkKFdlYktpdFdlYlZpZXcqIHdlYlZp
ZXcsIEluc3BlY3RvckNsaWVudCogaW5zcGVjdG9yQ2xpZW50KQorc3RhdGljIHZvaWQgbm90aWZ5
V2ViVmlld0Rlc3Ryb3llZChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBJbnNwZWN0b3JGcm9udGVu
ZENsaWVudCogaW5zcGVjdG9yRnJvbnRlbmRDbGllbnQpCiB7Ci0gICAgaW5zcGVjdG9yQ2xpZW50
LT53ZWJWaWV3RGVzdHJveWVkKCk7CisgICAgaW5zcGVjdG9yRnJvbnRlbmRDbGllbnQtPmRlc3Ry
b3lJbnNwZWN0b3JXaW5kb3coKTsKIH0KIAogSW5zcGVjdG9yQ2xpZW50OjpJbnNwZWN0b3JDbGll
bnQoV2ViS2l0V2ViVmlldyogd2ViVmlldykKLSAgICA6IG1fd2ViVmlldygwKQotICAgICwgbV9p
bnNwZWN0ZWRXZWJWaWV3KHdlYlZpZXcpCi0gICAgLCBtX3dlYkluc3BlY3RvcigwKQorICAgIDog
bV9pbnNwZWN0ZWRXZWJWaWV3KHdlYlZpZXcpCiB7fQogCiB2b2lkIEluc3BlY3RvckNsaWVudDo6
aW5zcGVjdG9yRGVzdHJveWVkKCkKIHsKLSAgICBpZiAobV93ZWJJbnNwZWN0b3IpCi0gICAgICAg
IGdfb2JqZWN0X3VucmVmKG1fd2ViSW5zcGVjdG9yKTsKLQogICAgIGRlbGV0ZSB0aGlzOwogfQog
Ci12b2lkIEluc3BlY3RvckNsaWVudDo6d2ViVmlld0Rlc3Ryb3llZCgpCi17Ci0gICAgbV93ZWJW
aWV3ID0gMDsKLSAgICBjb3JlKG1faW5zcGVjdGVkV2ViVmlldyktPmluc3BlY3RvckNvbnRyb2xs
ZXIoKS0+cGFnZURlc3Ryb3llZCgpOwotCi0gICAgLy8gY3JlYXRlUGFnZSB3aWxsIGJlIGNhbGxl
ZCBhZ2FpbiwgaWYgdGhlIHVzZXIgY2hvb3NlcyB0byBpbnNwZWN0Ci0gICAgLy8gc29tZXRoaW5n
IGVsc2UsIGFuZCB0aGUgaW5zcGVjdG9yIHdpbGwgYmUgcmVmZXJlbmNlZCBhZ2FpbiwKLSAgICAv
LyB0aGVyZS4KLSAgICBnX29iamVjdF91bnJlZihtX3dlYkluc3BlY3Rvcik7Ci0gICAgbV93ZWJJ
bnNwZWN0b3IgPSAwOwotfQotCi1QYWdlKiBJbnNwZWN0b3JDbGllbnQ6OmNyZWF0ZVBhZ2UoKQor
dm9pZCBJbnNwZWN0b3JDbGllbnQ6Om9wZW5JbnNwZWN0b3JGcm9udGVuZChJbnNwZWN0b3JDb250
cm9sbGVyKiBjb250cm9sbGVyKQogewotICAgIGlmIChtX3dlYlZpZXcpIHsKLSAgICAgICAgZ2Jv
b2xlYW4gaGFuZGxlZCA9IEZBTFNFOwotICAgICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV93
ZWJJbnNwZWN0b3IsICJkZXN0cm95IiwgJmhhbmRsZWQpOwotCi0gICAgICAgIC8qIHdlIGNhbiBu
b3cgZGlzcG9zZSBvdXIgb3duIHJlZmVyZW5jZSAqLwotICAgICAgICBnX29iamVjdF91bnJlZiht
X3dlYkluc3BlY3Rvcik7Ci0gICAgfQotCiAgICAgLy8gVGhpcyBnX29iamVjdF9nZXQgd2lsbCBy
ZWYgdGhlIGluc3BlY3Rvci4gV2UncmUgbm90IGRvaW5nIGFuCiAgICAgLy8gdW5yZWYgaWYgdGhp
cyBtZXRob2Qgc3VjY2VlZHMgYmVjYXVzZSB0aGUgaW5zcGVjdG9yIG9iamVjdCBtdXN0CiAgICAg
Ly8gYmUgYWxpdmUgZXZlbiBhZnRlciB0aGUgaW5zcGVjdGVkIFdlYlZpZXcgaXMgZGVzdHJveWVk
IC0gdGhlCiAgICAgLy8gY2xvc2Utd2luZG93IGFuZCBkZXN0cm95IHNpZ25hbHMgc3RpbGwgbmVl
ZCB0byBiZQogICAgIC8vIGVtaXR0ZWQuCi0gICAgV2ViS2l0V2ViSW5zcGVjdG9yKiB3ZWJJbnNw
ZWN0b3I7CisgICAgV2ViS2l0V2ViSW5zcGVjdG9yKiB3ZWJJbnNwZWN0b3IgPSAwOwogICAgIGdf
b2JqZWN0X2dldChtX2luc3BlY3RlZFdlYlZpZXcsICJ3ZWItaW5zcGVjdG9yIiwgJndlYkluc3Bl
Y3RvciwgTlVMTCk7Ci0gICAgbV93ZWJJbnNwZWN0b3IgPSB3ZWJJbnNwZWN0b3I7CisgICAgQVNT
RVJUKHdlYkluc3BlY3Rvcik7CiAKLSAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV93ZWJJbnNw
ZWN0b3IsICJpbnNwZWN0LXdlYi12aWV3IiwgbV9pbnNwZWN0ZWRXZWJWaWV3LCAmbV93ZWJWaWV3
KTsKKyAgICBXZWJLaXRXZWJWaWV3KiBpbnNwZWN0b3JXZWJWaWV3ID0gMDsKKyAgICBnX3NpZ25h
bF9lbWl0X2J5X25hbWUod2ViSW5zcGVjdG9yLCAiaW5zcGVjdC13ZWItdmlldyIsIG1faW5zcGVj
dGVkV2ViVmlldywgJmluc3BlY3RvcldlYlZpZXcpOwogCi0gICAgaWYgKCFtX3dlYlZpZXcpIHsK
LSAgICAgICAgZ19vYmplY3RfdW5yZWYobV93ZWJJbnNwZWN0b3IpOwotICAgICAgICByZXR1cm4g
MDsKKyAgICBpZiAoIWluc3BlY3RvcldlYlZpZXcpIHsKKyAgICAgICAgZ19vYmplY3RfdW5yZWYo
d2ViSW5zcGVjdG9yKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHdlYmtpdF93ZWJf
aW5zcGVjdG9yX3NldF93ZWJfdmlldyhtX3dlYkluc3BlY3RvciwgbV93ZWJWaWV3KTsKLQotICAg
IGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAiZGVzdHJveSIsCi0gICAgICAgICAgICAgICAg
ICAgICBHX0NBTExCQUNLKG5vdGlmeVdlYlZpZXdEZXN0cm95ZWQpLCAoZ3BvaW50ZXIpdGhpcyk7
CisgICAgd2Via2l0X3dlYl9pbnNwZWN0b3Jfc2V0X3dlYl92aWV3KHdlYkluc3BlY3RvciwgaW5z
cGVjdG9yV2ViVmlldyk7CiAKICAgICBHT3duUHRyPGdjaGFyPiBpbnNwZWN0b3JVUkk7CiAKQEAg
LTEwMywxNCArNzYsNzMgQEAgUGFnZSogSW5zcGVjdG9yQ2xpZW50OjpjcmVhdGVQYWdlKCkKICAg
ICB9IGVsc2UKICAgICAgICAgaW5zcGVjdG9yVVJJLnNldChnX2ZpbGVuYW1lX3RvX3VyaShEQVRB
X0RJUiIvd2Via2l0LTEuMC93ZWJpbnNwZWN0b3IvaW5zcGVjdG9yLmh0bWwiLCBOVUxMLCBOVUxM
KSk7CiAKLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkobV93ZWJWaWV3LCBpbnNwZWN0b3JV
UkkuZ2V0KCkpOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaShpbnNwZWN0b3JXZWJWaWV3
LCBpbnNwZWN0b3JVUkkuZ2V0KCkpOworCisgICAgZ3RrX3dpZGdldF9zaG93KEdUS19XSURHRVQo
aW5zcGVjdG9yV2ViVmlldykpOworCisgICAgUGFnZSogaW5zcGVjdG9yUGFnZSA9IGNvcmUoaW5z
cGVjdG9yV2ViVmlldyk7CisgICAgaW5zcGVjdG9yUGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigp
LT5zZXRJbnNwZWN0b3JGcm9udGVuZENsaWVudChuZXcgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQo
bV9pbnNwZWN0ZWRXZWJWaWV3LCBpbnNwZWN0b3JXZWJWaWV3LCB3ZWJJbnNwZWN0b3IsIGluc3Bl
Y3RvclBhZ2UpKTsKK30KKwordm9pZCBJbnNwZWN0b3JDbGllbnQ6OmhpZ2hsaWdodChOb2RlKiBu
b2RlKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ2xpZW50
OjpoaWRlSGlnaGxpZ2h0KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIElu
c3BlY3RvckNsaWVudDo6cG9wdWxhdGVTZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5LCBTdHJpbmcq
IHZhbHVlKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ2xp
ZW50OjpzdG9yZVNldHRpbmcoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworCitib29sIGRlc3Ryb3llZCA9IFRSVUU7
CisKK0luc3BlY3RvckZyb250ZW5kQ2xpZW50OjpJbnNwZWN0b3JGcm9udGVuZENsaWVudChXZWJL
aXRXZWJWaWV3KiBpbnNwZWN0ZWRXZWJWaWV3LCBXZWJLaXRXZWJWaWV3KiBpbnNwZWN0b3JXZWJW
aWV3LCBXZWJLaXRXZWJJbnNwZWN0b3IqIHdlYkluc3BlY3RvciwgUGFnZSogaW5zcGVjdG9yUGFn
ZSkKKyAgICA6IEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwoY29yZShpbnNwZWN0ZWRXZWJW
aWV3KS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLCBpbnNwZWN0b3JQYWdlKQorICAgICwgbV9pbnNw
ZWN0b3JXZWJWaWV3KGluc3BlY3RvcldlYlZpZXcpCisgICAgLCBtX2luc3BlY3RlZFdlYlZpZXco
aW5zcGVjdGVkV2ViVmlldykKKyAgICAsIG1fd2ViSW5zcGVjdG9yKHdlYkluc3BlY3RvcikKK3sK
KyAgICBnX3NpZ25hbF9jb25uZWN0KG1faW5zcGVjdG9yV2ViVmlldywgImRlc3Ryb3kiLAorICAg
ICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyhub3RpZnlXZWJWaWV3RGVzdHJveWVkKSwgKGdw
b2ludGVyKXRoaXMpOworfQorCitJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6fkluc3BlY3RvckZy
b250ZW5kQ2xpZW50KCkKK3sKKyAgICBBU1NFUlQoIW1fd2ViSW5zcGVjdG9yKTsKK30KKwordm9p
ZCBJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6ZGVzdHJveUluc3BlY3RvcldpbmRvdygpCit7Cisg
ICAgaWYgKCFtX3dlYkluc3BlY3RvcikKKyAgICAgICAgcmV0dXJuOworICAgIFdlYktpdFdlYklu
c3BlY3Rvciogd2ViSW5zcGVjdG9yID0gbV93ZWJJbnNwZWN0b3I7CisgICAgbV93ZWJJbnNwZWN0
b3IgPSAwOworCisgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKG1faW5z
cGVjdG9yV2ViVmlldywgKGdwb2ludGVyKW5vdGlmeVdlYlZpZXdEZXN0cm95ZWQsIChncG9pbnRl
cil0aGlzKTsKKyAgICBtX2luc3BlY3RvcldlYlZpZXcgPSAwOworCisgICAgY29yZShtX2luc3Bl
Y3RlZFdlYlZpZXcpLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmNsb3NlKCk7CiAKLSAgICBndGtf
d2lkZ2V0X3Nob3coR1RLX1dJREdFVChtX3dlYlZpZXcpKTsKKyAgICBnYm9vbGVhbiBoYW5kbGVk
ID0gRkFMU0U7CisgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKHdlYkluc3BlY3RvciwgImNsb3Nl
LXdpbmRvdyIsICZoYW5kbGVkKTsKKyAgICBBU1NFUlQoaGFuZGxlZCk7CiAKLSAgICByZXR1cm4g
Y29yZShtX3dlYlZpZXcpOworICAgIC8qIHdlIHNob3VsZCBub3cgZGlzcG9zZSBvdXIgb3duIHJl
ZmVyZW5jZSAqLworICAgIGdfb2JqZWN0X3VucmVmKHdlYkluc3BlY3Rvcik7CiB9CiAKLVN0cmlu
ZyBJbnNwZWN0b3JDbGllbnQ6OmxvY2FsaXplZFN0cmluZ3NVUkwoKQorU3RyaW5nIEluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50Ojpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkKIHsKICAgICBHT3duUHRyPGdj
aGFyPiBVUkw7CiAKQEAgLTEyNiw4OSArMTU4LDU2IEBAIFN0cmluZyBJbnNwZWN0b3JDbGllbnQ6
OmxvY2FsaXplZFN0cmluZ3NVUkwoKQogICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KFVSTC5n
ZXQoKSk7CiB9CiAKLVN0cmluZyBJbnNwZWN0b3JDbGllbnQ6OmhpZGRlblBhbmVscygpCitTdHJp
bmcgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmhpZGRlblBhbmVscygpCiB7CiAgICAgbm90SW1w
bGVtZW50ZWQoKTsKICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ2xp
ZW50OjpzaG93V2luZG93KCkKK3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmJyaW5nVG9G
cm9udCgpCiB7Ci0gICAgaWYgKCFtX3dlYlZpZXcpCisgICAgaWYgKCFtX2luc3BlY3RvcldlYlZp
ZXcpCiAgICAgICAgIHJldHVybjsKIAogICAgIGdib29sZWFuIGhhbmRsZWQgPSBGQUxTRTsKICAg
ICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV93ZWJJbnNwZWN0b3IsICJzaG93LXdpbmRvdyIsICZo
YW5kbGVkKTsKLQotICAgIGNvcmUobV9pbnNwZWN0ZWRXZWJWaWV3KS0+aW5zcGVjdG9yQ29udHJv
bGxlcigpLT5zZXRXaW5kb3dWaXNpYmxlKHRydWUpOwogfQogCi12b2lkIEluc3BlY3RvckNsaWVu
dDo6Y2xvc2VXaW5kb3coKQordm9pZCBJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6Y2xvc2VXaW5k
b3coKQogewotICAgIGlmICghbV93ZWJWaWV3KQotICAgICAgICByZXR1cm47Ci0KLSAgICBnYm9v
bGVhbiBoYW5kbGVkID0gRkFMU0U7Ci0gICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fd2ViSW5z
cGVjdG9yLCAiY2xvc2Utd2luZG93IiwgJmhhbmRsZWQpOwotCi0gICAgY29yZShtX2luc3BlY3Rl
ZFdlYlZpZXcpLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnNldFdpbmRvd1Zpc2libGUoZmFsc2Up
OworICAgIGRlc3Ryb3lJbnNwZWN0b3JXaW5kb3coKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDbGll
bnQ6OmF0dGFjaFdpbmRvdygpCit2b2lkIEluc3BlY3RvckZyb250ZW5kQ2xpZW50OjphdHRhY2hX
aW5kb3coKQogewotICAgIGlmICghbV93ZWJWaWV3KQorICAgIGlmICghbV9pbnNwZWN0b3JXZWJW
aWV3KQogICAgICAgICByZXR1cm47CiAKICAgICBnYm9vbGVhbiBoYW5kbGVkID0gRkFMU0U7CiAg
ICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fd2ViSW5zcGVjdG9yLCAiYXR0YWNoLXdpbmRvdyIs
ICZoYW5kbGVkKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDbGllbnQ6OmRldGFjaFdpbmRvdygpCit2
b2lkIEluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpkZXRhY2hXaW5kb3coKQogewotICAgIGlmICgh
bV93ZWJWaWV3KQorICAgIGlmICghbV9pbnNwZWN0b3JXZWJWaWV3KQogICAgICAgICByZXR1cm47
CiAKICAgICBnYm9vbGVhbiBoYW5kbGVkID0gRkFMU0U7CiAgICAgZ19zaWduYWxfZW1pdF9ieV9u
YW1lKG1fd2ViSW5zcGVjdG9yLCAiZGV0YWNoLXdpbmRvdyIsICZoYW5kbGVkKTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JDbGllbnQ6OnNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdo
dCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEluc3BlY3RvckNsaWVudDo6
aGlnaGxpZ2h0KE5vZGUqIG5vZGUpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9p
ZCBJbnNwZWN0b3JDbGllbnQ6OmhpZGVIaWdobGlnaHQoKQordm9pZCBJbnNwZWN0b3JGcm9udGVu
ZENsaWVudDo6c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KQogewogICAg
IG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ2xpZW50OjppbnNwZWN0ZWRV
UkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYgbmV3VVJMKQordm9pZCBJbnNwZWN0b3JGcm9udGVuZENs
aWVudDo6aW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIG5ld1VSTCkKIHsKLSAgICBp
ZiAoIW1fd2ViVmlldykKKyAgICBpZiAoIW1faW5zcGVjdG9yV2ViVmlldykKICAgICAgICAgcmV0
dXJuOwogCiAgICAgd2Via2l0X3dlYl9pbnNwZWN0b3Jfc2V0X2luc3BlY3RlZF91cmkobV93ZWJJ
bnNwZWN0b3IsIG5ld1VSTC51dGY4KCkuZGF0YSgpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDbGll
bnQ6Omluc3BlY3RvcldpbmRvd09iamVjdENsZWFyZWQoKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ2xpZW50Ojpwb3B1bGF0ZVNldHRpbmcoY29uc3QgU3Ry
aW5nJiBrZXksIFN0cmluZyogdmFsdWUpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
dm9pZCBJbnNwZWN0b3JDbGllbnQ6OnN0b3JlU2V0dGluZyhjb25zdCBTdHJpbmcmIGtleSwgY29u
c3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCiB9CiAKZGlm
ZiAtLWdpdCBhL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50R3RrLmgg
Yi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudEd0ay5oCmluZGV4IDI5
N2ZkOGYuLmNkYjUzNzUgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvSW5z
cGVjdG9yQ2xpZW50R3RrLmgKKysrIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0
b3JDbGllbnRHdGsuaApAQCAtMzAsNiArMzAsNyBAQAogI2RlZmluZSBJbnNwZWN0b3JDbGllbnRH
dGtfaAogCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ2xpZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9y
RnJvbnRlbmRDbGllbnRMb2NhbC5oIgogI2luY2x1ZGUgIndlYmtpdHdlYnZpZXcuaCIKICNpbmNs
dWRlICJ3ZWJraXR3ZWJpbnNwZWN0b3IuaCIKIApAQCAtNDYsMTUgKzQ3LDMwIEBAIG5hbWVzcGFj
ZSBXZWJLaXQgewogICAgICAgICBJbnNwZWN0b3JDbGllbnQoV2ViS2l0V2ViVmlldyogd2ViVmll
dyk7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIGluc3BlY3RvckRlc3Ryb3llZCgpOwotICAgICAg
ICB2b2lkIHdlYlZpZXdEZXN0cm95ZWQoKTsKIAotICAgICAgICB2aXJ0dWFsIFdlYkNvcmU6OlBh
Z2UqIGNyZWF0ZVBhZ2UoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIG9wZW5JbnNwZWN0b3JGcm9u
dGVuZChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyKik7CisKKyAgICAgICAgdmlydHVhbCB2
b2lkIGhpZ2hsaWdodChXZWJDb3JlOjpOb2RlKik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBoaWRl
SGlnaGxpZ2h0KCk7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIHBvcHVsYXRlU2V0dGluZyhjb25z
dCBXZWJDb3JlOjpTdHJpbmcmIGtleSwgV2ViQ29yZTo6U3RyaW5nKiB2YWx1ZSk7CisgICAgICAg
IHZpcnR1YWwgdm9pZCBzdG9yZVNldHRpbmcoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBrZXksIGNv
bnN0IFdlYkNvcmU6OlN0cmluZyYgdmFsdWUpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgV2Vi
S2l0V2ViVmlldyogbV9pbnNwZWN0ZWRXZWJWaWV3OworICAgIH07CisKKyAgICBjbGFzcyBJbnNw
ZWN0b3JGcm9udGVuZENsaWVudCA6IHB1YmxpYyBXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENs
aWVudExvY2FsIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2xpZW50
KFdlYktpdFdlYlZpZXcqIGluc3BlY3RlZFdlYlZpZXcsIFdlYktpdFdlYlZpZXcqIGluc3BlY3Rv
cldlYlZpZXcsIFdlYktpdFdlYkluc3BlY3Rvciogd2ViSW5zcGVjdG9yLCBXZWJDb3JlOjpQYWdl
KiBpbnNwZWN0b3JQYWdlKTsKKworICAgICAgICB2b2lkIGRlc3Ryb3lJbnNwZWN0b3JXaW5kb3co
KTsKIAogICAgICAgICB2aXJ0dWFsIFdlYkNvcmU6OlN0cmluZyBsb2NhbGl6ZWRTdHJpbmdzVVJM
KCk7CiAKICAgICAgICAgdmlydHVhbCBXZWJDb3JlOjpTdHJpbmcgaGlkZGVuUGFuZWxzKCk7CiAK
LSAgICAgICAgdmlydHVhbCB2b2lkIHNob3dXaW5kb3coKTsKKyAgICAgICAgdmlydHVhbCB2b2lk
IGJyaW5nVG9Gcm9udCgpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgY2xvc2VXaW5kb3coKTsKIAog
ICAgICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoV2luZG93KCk7CkBAIC02MiwxNyArNzgsMTIgQEAg
bmFtZXNwYWNlIFdlYktpdCB7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHNldEF0dGFjaGVkV2lu
ZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCk7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIGhpZ2hs
aWdodChXZWJDb3JlOjpOb2RlKik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBoaWRlSGlnaGxpZ2h0
KCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFdlYkNv
cmU6OlN0cmluZyYgbmV3VVJMKTsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgcG9wdWxhdGVTZXR0
aW5nKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYga2V5LCBXZWJDb3JlOjpTdHJpbmcqIHZhbHVlKTsK
LSAgICAgICAgdmlydHVhbCB2b2lkIHN0b3JlU2V0dGluZyhjb25zdCBXZWJDb3JlOjpTdHJpbmcm
IGtleSwgY29uc3QgV2ViQ29yZTo6U3RyaW5nJiB2YWx1ZSk7Ci0KLSAgICAgICAgdmlydHVhbCB2
b2lkIGluc3BlY3RvcldpbmRvd09iamVjdENsZWFyZWQoKTsKLQogICAgIHByaXZhdGU6Ci0gICAg
ICAgIFdlYktpdFdlYlZpZXcqIG1fd2ViVmlldzsKKyAgICAgICAgdmlydHVhbCB+SW5zcGVjdG9y
RnJvbnRlbmRDbGllbnQoKTsKKworICAgICAgICBXZWJLaXRXZWJWaWV3KiBtX2luc3BlY3Rvcldl
YlZpZXc7CiAgICAgICAgIFdlYktpdFdlYlZpZXcqIG1faW5zcGVjdGVkV2ViVmlldzsKICAgICAg
ICAgV2ViS2l0V2ViSW5zcGVjdG9yKiBtX3dlYkluc3BlY3RvcjsKICAgICB9OwpkaWZmIC0tZ2l0
IGEvV2ViS2l0L2hhaWt1L0NoYW5nZUxvZyBiL1dlYktpdC9oYWlrdS9DaGFuZ2VMb2cKaW5kZXgg
MWM2ODcwYS4uNWRhZTQ3YSAxMDA2NDQKLS0tIGEvV2ViS2l0L2hhaWt1L0NoYW5nZUxvZworKysg
Yi9XZWJLaXQvaGFpa3UvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTAtMDMtMTAgIFl1
cnkgU2VtaWtoYXRza3kgPHl1cnlzQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbnRyb2R1Y2UgSW5zcGVjdG9yRnJvbnRlbmRD
bGllbnQgdGhhdCBwcm92aWRlcyBJbnNwZWN0b3JGcm9udGVuZCB3aXRoIGFuIGludGVyZmFjZSB0
byB0aGUgZW1iZWRkZXIuIEluc3BlY3RvckNsaWVudCBub3cgc2VydmVzIGFzIGEgZGVsZWdhdGUg
Zm9yIEluc3BlY3RvckNvbnRyb2xsZXIgYW5kIGRvZXMgbm90IGNvbnRhaW4gbWV0aG9kcyBmb3Ig
bWFuYWdpbmcgaW5zcGVjdG9yIGZyb250ZW5kIHdpbmRvdy4gVGhhdCBhbGxvd3MgdG8gY3JlYXRl
IHJlbW90ZSBJbnNwZWN0b3JGcm9udGVuZEhvc3QuCisKKyAgICAgICAgSW50cm9kdWNlIEluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50IHRoYXQgd291bGQgcHJvdmlkZSBJbnNwZWN0b3JGcm9udGVuZCB3
aXRoIGFuIGludGVyZmFjZSB0byB0aGUgZW1iZWRkZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM1MDM2CisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9JbnNwZWN0b3JDbGllbnRIYWlrdS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JD
bGllbnRIYWlrdTo6b3Blbkluc3BlY3RvckZyb250ZW5kKToKKyAgICAgICAgKiBXZWJDb3JlU3Vw
cG9ydC9JbnNwZWN0b3JDbGllbnRIYWlrdS5oOgorCiAyMDEwLTAzLTExICBBbmRlcnMgQ2FybHNz
b24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQgSHlh
dHQuCmRpZmYgLS1naXQgYS9XZWJLaXQvaGFpa3UvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xp
ZW50SGFpa3UuY3BwIGIvV2ViS2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVu
dEhhaWt1LmNwcAppbmRleCBmMDZlOTZiLi41OTIzMmU5IDEwMDY0NAotLS0gYS9XZWJLaXQvaGFp
a3UvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50SGFpa3UuY3BwCisrKyBiL1dlYktpdC9o
YWlrdS9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRIYWlrdS5jcHAKQEAgLTQyLDQ1ICs0
Miw3IEBAIHZvaWQgSW5zcGVjdG9yQ2xpZW50SGFpa3U6Omluc3BlY3RvckRlc3Ryb3llZCgpCiAg
ICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotUGFnZSogSW5zcGVjdG9yQ2xpZW50SGFpa3U6OmNy
ZWF0ZVBhZ2UoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0K
LVN0cmluZyBJbnNwZWN0b3JDbGllbnRIYWlrdTo6bG9jYWxpemVkU3RyaW5nc1VSTCgpCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBJ
bnNwZWN0b3JDbGllbnRIYWlrdTo6aGlkZGVuUGFuZWxzKCkKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDbGllbnRIYWlr
dTo6c2hvd1dpbmRvdygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBJbnNw
ZWN0b3JDbGllbnRIYWlrdTo6Y2xvc2VXaW5kb3coKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ2xpZW50SGFpa3U6OmF0dGFjaFdpbmRvdygpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDbGllbnRIYWlrdTo6ZGV0YWNo
V2luZG93KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEluc3BlY3RvckNs
aWVudEhhaWt1OjpzZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpCit2b2lk
IEluc3BlY3RvckNsaWVudEhhaWt1OjpvcGVuSW5zcGVjdG9yRnJvbnRlbmQoV2ViQ29yZTo6SW5z
cGVjdG9yQ29udHJvbGxlciopCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KQEAgLTk1LDE2
ICs1Nyw2IEBAIHZvaWQgSW5zcGVjdG9yQ2xpZW50SGFpa3U6OmhpZGVIaWdobGlnaHQoKQogICAg
IG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ2xpZW50SGFpa3U6Omluc3Bl
Y3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
fQotCi12b2lkIEluc3BlY3RvckNsaWVudEhhaWt1OjppbnNwZWN0b3JXaW5kb3dPYmplY3RDbGVh
cmVkKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCiB2b2lkIEluc3BlY3RvckNsaWVu
dEhhaWt1Ojpwb3B1bGF0ZVNldHRpbmcoY29uc3QgU3RyaW5nJiBrZXksIFN0cmluZyogdmFsdWUp
CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKZGlmZiAtLWdpdCBhL1dlYktpdC9oYWlrdS9XZWJD
b3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRIYWlrdS5oIGIvV2ViS2l0L2hhaWt1L1dlYkNvcmVT
dXBwb3J0L0luc3BlY3RvckNsaWVudEhhaWt1LmgKaW5kZXggODc4OGE1Zi4uZDQyNzY3MCAxMDA2
NDQKLS0tIGEvV2ViS2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudEhhaWt1
LmgKKysrIGIvV2ViS2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudEhhaWt1
LmgKQEAgLTQyLDI5ICs0MiwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgcHVibGljOgog
ICAgICAgICB2aXJ0dWFsIHZvaWQgaW5zcGVjdG9yRGVzdHJveWVkKCk7CiAKLSAgICAgICAgdmly
dHVhbCBQYWdlKiBjcmVhdGVQYWdlKCk7Ci0KLSAgICAgICAgdmlydHVhbCBTdHJpbmcgbG9jYWxp
emVkU3RyaW5nc1VSTCgpOwotCi0gICAgICAgIHZpcnR1YWwgU3RyaW5nIGhpZGRlblBhbmVscygp
OwotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBzaG93V2luZG93KCk7Ci0gICAgICAgIHZpcnR1YWwg
dm9pZCBjbG9zZVdpbmRvdygpOwotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hXaW5kb3co
KTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRldGFjaFdpbmRvdygpOwotCi0gICAgICAgIHZpcnR1
YWwgdm9pZCBzZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpOworICAgICAg
ICB2aXJ0dWFsIHZvaWQgb3Blbkluc3BlY3RvckZyb250ZW5kKFdlYkNvcmU6Okluc3BlY3RvckNv
bnRyb2xsZXIqKTsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgaGlnaGxpZ2h0KE5vZGUqKTsKICAg
ICAgICAgdmlydHVhbCB2b2lkIGhpZGVIaWdobGlnaHQoKTsKIAotICAgICAgICB2aXJ0dWFsIHZv
aWQgaW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIG5ld1VSTCk7Ci0KICAgICAgICAg
dmlydHVhbCB2b2lkIHBvcHVsYXRlU2V0dGluZyhjb25zdCBXZWJDb3JlOjpTdHJpbmcmIGtleSwg
V2ViQ29yZTo6U3RyaW5nKiB2YWx1ZSk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdG9yZVNldHRp
bmcoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBrZXksIGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgdmFs
dWUpOwotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0b3JXaW5kb3dPYmplY3RDbGVhcmVk
KCk7CiAgICAgfTsKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvV2ViS2l0
L21hYy9DaGFuZ2VMb2cgYi9XZWJLaXQvbWFjL0NoYW5nZUxvZwppbmRleCAwNmFhZDQ0Li5jODlh
NGM1IDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL0NoYW5nZUxvZworKysgYi9XZWJLaXQvbWFjL0No
YW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDEwLTAzLTExICBZdXJ5IFNlbWlraGF0c2t5IDx5
dXJ5c0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgSW50cm9kdWNlIEluc3BlY3RvckZyb250ZW5kQ2xpZW50IHRoYXQgcHJvdmlk
ZXMgSW5zcGVjdG9yRnJvbnRlbmQgd2l0aCBhbiBpbnRlcmZhY2UgdG8gdGhlIGVtYmVkZGVyLiBJ
bnNwZWN0b3JDbGllbnQgbm93IHNlcnZlcyBhcyBhIGRlbGVnYXRlIGZvciBJbnNwZWN0b3JDb250
cm9sbGVyIGFuZCBkb2VzIG5vdCBjb250YWluIG1ldGhvZHMgZm9yIG1hbmFnaW5nIGluc3BlY3Rv
ciBmcm9udGVuZCB3aW5kb3cuIFRoYXQgYWxsb3dzIHRvIGNyZWF0ZSByZW1vdGUgSW5zcGVjdG9y
RnJvbnRlbmRIb3N0LgorCisgICAgICAgIEludHJvZHVjZSBJbnNwZWN0b3JGcm9udGVuZENsaWVu
dCB0aGF0IHdvdWxkIHByb3ZpZGUgSW5zcGVjdG9yRnJvbnRlbmQgd2l0aCBhbiBpbnRlcmZhY2Ug
dG8gdGhlIGVtYmVkZGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0zNTAzNgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xp
ZW50Lmg6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50Lm1tOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yQ2xpZW50OjpXZWJJbnNwZWN0b3JDbGllbnQpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yQ2xpZW50OjppbnNwZWN0b3JEZXN0cm95ZWQpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yQ2xpZW50OjpvcGVuSW5zcGVjdG9yRnJvbnRlbmQpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yQ2xpZW50OjpoaWdobGlnaHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yQ2xpZW50Ojpo
aWRlSGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpXZWJJ
bnNwZWN0b3JGcm9udGVuZENsaWVudCk6CisgICAgICAgIChXZWJJbnNwZWN0b3JGcm9udGVuZENs
aWVudDo6ZnJvbnRlbmRMb2FkZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGll
bnQ6OmxvY2FsaXplZFN0cmluZ3NVUkwpOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRD
bGllbnQ6OmhpZGRlblBhbmVscyk6CisgICAgICAgIChXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVu
dDo6YnJpbmdUb0Zyb250KToKKyAgICAgICAgKFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50Ojpj
bG9zZVdpbmRvdyk6CisgICAgICAgIChXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6YXR0YWNo
V2luZG93KToKKyAgICAgICAgKFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpkZXRhY2hXaW5k
b3cpOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OnNldEF0dGFjaGVkV2lu
ZG93SGVpZ2h0KToKKyAgICAgICAgKFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjppbnNwZWN0
ZWRVUkxDaGFuZ2VkKToKKyAgICAgICAgKFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50Ojp1cGRh
dGVXaW5kb3dUaXRsZSk6CisgICAgICAgICgtW1dlYkluc3BlY3RvcldpbmRvd0NvbnRyb2xsZXIg
ZGVhbGxvY10pOgorICAgICAgICAoLVtXZWJJbnNwZWN0b3JXaW5kb3dDb250cm9sbGVyIHdpbmRv
d1Nob3VsZENsb3NlOl0pOgorICAgICAgICAoLVtXZWJJbnNwZWN0b3JXaW5kb3dDb250cm9sbGVy
IGNsb3NlXSk6CisgICAgICAgICgtW1dlYkluc3BlY3RvcldpbmRvd0NvbnRyb2xsZXIgc2hvd1dp
bmRvdzpdKToKKyAgICAgICAgKC1bV2ViSW5zcGVjdG9yV2luZG93Q29udHJvbGxlciBhdHRhY2hd
KToKKyAgICAgICAgKC1bV2ViSW5zcGVjdG9yV2luZG93Q29udHJvbGxlciBkZXRhY2hdKToKKyAg
ICAgICAgKC1bV2ViSW5zcGVjdG9yV2luZG93Q29udHJvbGxlciBhdHRhY2hlZF0pOgorICAgICAg
ICAoLVtXZWJJbnNwZWN0b3JXaW5kb3dDb250cm9sbGVyIHNldEZyb250ZW5kQ2xpZW50Ol0pOgor
ICAgICAgICAoLVtXZWJJbnNwZWN0b3JXaW5kb3dDb250cm9sbGVyIGRlc3Ryb3lJbnNwZWN0b3JW
aWV3XSk6CisgICAgICAgICgtW1dlYk5vZGVIaWdobGlnaHRlciBpbml0V2l0aEluc3BlY3RlZFdl
YlZpZXc6XSk6CisgICAgICAgICgtW1dlYk5vZGVIaWdobGlnaHRlciBkZWFsbG9jXSk6CisgICAg
ICAgICgtW1dlYk5vZGVIaWdobGlnaHRlciBoaWdobGlnaHROb2RlOl0pOgorICAgICAgICAoLVtX
ZWJOb2RlSGlnaGxpZ2h0ZXIgaGlkZUhpZ2hsaWdodF0pOgorICAgICAgICAoLVtXZWJOb2RlSGln
aGxpZ2h0ZXIgZGlkQXR0YWNoV2ViTm9kZUhpZ2hsaWdodDpdKToKKyAgICAgICAgKC1bV2ViTm9k
ZUhpZ2hsaWdodGVyIHdpbGxEZXRhY2hXZWJOb2RlSGlnaGxpZ2h0Ol0pOgorICAgICAgICAqIFdl
Ykluc3BlY3Rvci9XZWJJbnNwZWN0b3IubW06CisgICAgICAgICgtW1dlYkluc3BlY3RvciBhdHRh
Y2g6XSk6CisgICAgICAgICgtW1dlYkluc3BlY3RvciBkZXRhY2g6XSk6CisKIDIwMTAtMDMtMTEg
IE1hcmsgUm93ZSAgPG1yb3dlQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXZp
ZCBLaWx6ZXIuCmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkluc3Bl
Y3RvckNsaWVudC5oIGIvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGll
bnQuaAppbmRleCA2NDYyMWY4Li5lZTgxYjI1IDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL1dlYkNv
cmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5oCisrKyBiL1dlYktpdC9tYWMvV2ViQ29yZVN1
cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmgKQEAgLTI3LDE1ICsyNywxOCBAQAogICovCiAKICNp
bXBvcnQgPFdlYkNvcmUvSW5zcGVjdG9yQ2xpZW50Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0luc3Bl
Y3RvckZyb250ZW5kQ2xpZW50TG9jYWwuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1TdHJp
bmcuaD4KIAogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogCiAjaWZkZWYgX19PQkpDX18KIEBj
bGFzcyBXZWJJbnNwZWN0b3JXaW5kb3dDb250cm9sbGVyOworQGNsYXNzIFdlYk5vZGVIaWdobGln
aHRlcjsKIEBjbGFzcyBXZWJWaWV3OwogI2Vsc2UKIGNsYXNzIFdlYkluc3BlY3RvcldpbmRvd0Nv
bnRyb2xsZXI7CitjbGFzcyBXZWJOb2RlSGlnaGxpZ2h0ZXI7CiBjbGFzcyBXZWJWaWV3OwogI2Vu
ZGlmCiAKQEAgLTQ1LDMyICs0OCw0MSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgaW5z
cGVjdG9yRGVzdHJveWVkKCk7CiAKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlBhZ2UqIGNyZWF0ZVBh
Z2UoKTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlN0cmluZyBsb2NhbGl6ZWRTdHJpbmdzVVJMKCk7
Ci0KLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlN0cmluZyBoaWRkZW5QYW5lbHMoKTsKLQotICAgIHZp
cnR1YWwgdm9pZCBzaG93V2luZG93KCk7Ci0gICAgdmlydHVhbCB2b2lkIGNsb3NlV2luZG93KCk7
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoV2luZG93KCk7Ci0gICAgdmlydHVhbCB2b2lkIGRl
dGFjaFdpbmRvdygpOwotCi0gICAgdmlydHVhbCB2b2lkIHNldEF0dGFjaGVkV2luZG93SGVpZ2h0
KHVuc2lnbmVkIGhlaWdodCk7CisgICAgdmlydHVhbCB2b2lkIG9wZW5JbnNwZWN0b3JGcm9udGVu
ZChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyKik7CiAKICAgICB2aXJ0dWFsIHZvaWQgaGln
aGxpZ2h0KFdlYkNvcmU6Ok5vZGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgaGlkZUhpZ2hsaWdodCgp
OwotICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6OlN0
cmluZyYgbmV3VVJMKTsKIAogICAgIHZpcnR1YWwgdm9pZCBwb3B1bGF0ZVNldHRpbmcoY29uc3Qg
V2ViQ29yZTo6U3RyaW5nJiBrZXksIFdlYkNvcmU6OlN0cmluZyogdmFsdWUpOwogICAgIHZpcnR1
YWwgdm9pZCBzdG9yZVNldHRpbmcoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBrZXksIGNvbnN0IFdl
YkNvcmU6OlN0cmluZyYgdmFsdWUpOwogCi0gICAgdmlydHVhbCB2b2lkIGluc3BlY3RvcldpbmRv
d09iamVjdENsZWFyZWQoKTsKK3ByaXZhdGU6CisgICAgV2ViVmlldyAqbV93ZWJWaWV3OworICAg
IFJldGFpblB0cjxXZWJOb2RlSGlnaGxpZ2h0ZXI+IG1faGlnaGxpZ2h0ZXI7Cit9OworCitjbGFz
cyBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudCA6IHB1YmxpYyBXZWJDb3JlOjpJbnNwZWN0b3JG
cm9udGVuZENsaWVudExvY2FsIHsKK3B1YmxpYzoKKyAgICBXZWJJbnNwZWN0b3JGcm9udGVuZENs
aWVudChXZWJWaWV3KiwgV2ViSW5zcGVjdG9yV2luZG93Q29udHJvbGxlciosIFdlYkNvcmU6Oklu
c3BlY3RvckNvbnRyb2xsZXIqLCBXZWJDb3JlOjpQYWdlKik7CisKKyAgICB2aXJ0dWFsIHZvaWQg
ZnJvbnRlbmRMb2FkZWQoKTsKKyAgICAKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OlN0cmluZyBsb2Nh
bGl6ZWRTdHJpbmdzVVJMKCk7CisgICAgdmlydHVhbCBXZWJDb3JlOjpTdHJpbmcgaGlkZGVuUGFu
ZWxzKCk7CisgICAgCisgICAgdmlydHVhbCB2b2lkIGJyaW5nVG9Gcm9udCgpOworICAgIHZpcnR1
YWwgdm9pZCBjbG9zZVdpbmRvdygpOworICAgIAorICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hXaW5k
b3coKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoV2luZG93KCk7CisgICAgCisgICAgdmlydHVh
bCB2b2lkIHNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCk7CisgICAgdmly
dHVhbCB2b2lkIGluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBuZXdV
UkwpOwogCiBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRlV2luZG93VGl0bGUoKSBjb25zdDsKIAot
ICAgIFdlYlZpZXcgKm1fd2ViVmlldzsKKyAgICBXZWJWaWV3KiBtX2luc3BlY3RlZFdlYlZpZXc7
CiAgICAgUmV0YWluUHRyPFdlYkluc3BlY3RvcldpbmRvd0NvbnRyb2xsZXI+IG1fd2luZG93Q29u
dHJvbGxlcjsKICAgICBXZWJDb3JlOjpTdHJpbmcgbV9pbnNwZWN0ZWRVUkw7CiB9OwpkaWZmIC0t
Z2l0IGEvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQubW0gYi9X
ZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5tbQppbmRleCBjNWYx
NzI5Li5lNTU2NDMyIDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYklu
c3BlY3RvckNsaWVudC5tbQorKysgYi9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkluc3Bl
Y3RvckNsaWVudC5tbQpAQCAtNDEsNiArNDEsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9QYWdlLmg+
CiAjaW1wb3J0IDxXZWJLaXQvRE9NRXh0ZW5zaW9ucy5oPgogI2ltcG9ydCA8V2ViS2l0U3lzdGVt
SW50ZXJmYWNlLmg+CisjaW1wb3J0IDx3dGYvUGFzc093blB0ci5oPgogCiB1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKIApAQCAtNDgsNDUgKzQ5LDk0IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwogQHByaXZhdGUKICAgICBXZWJWaWV3ICpfaW5zcGVjdGVkV2ViVmlldzsKICAgICBXZWJWaWV3
ICpfd2ViVmlldzsKLSAgICBXZWJOb2RlSGlnaGxpZ2h0ICpfY3VycmVudEhpZ2hsaWdodDsKKyAg
ICBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudCogX2Zyb250ZW5kQ2xpZW50OwogICAgIEJPT0wg
X2F0dGFjaGVkVG9JbnNwZWN0ZWRXZWJWaWV3OwogICAgIEJPT0wgX3Nob3VsZEF0dGFjaDsKICAg
ICBCT09MIF92aXNpYmxlOwotICAgIEJPT0wgX21vdmluZ1dpbmRvd3M7CisgICAgQk9PTCBfZGVz
dHJveWluZ0luc3BlY3RvclZpZXc7CiB9CiAtIChpZClpbml0V2l0aEluc3BlY3RlZFdlYlZpZXc6
KFdlYlZpZXcgKil3ZWJWaWV3OwotLSAoQk9PTClpbnNwZWN0b3JWaXNpYmxlOwogLSAoV2ViVmll
dyAqKXdlYlZpZXc7CiAtICh2b2lkKWF0dGFjaDsKIC0gKHZvaWQpZGV0YWNoOworLSAoQk9PTClh
dHRhY2hlZDsKKy0gKHZvaWQpc2V0RnJvbnRlbmRDbGllbnQ6KFdlYkluc3BlY3RvckZyb250ZW5k
Q2xpZW50Kilmcm9udGVuZENsaWVudDsKIC0gKHZvaWQpc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQ6
KHVuc2lnbmVkKWhlaWdodDsKKy0gKHZvaWQpZGVzdHJveUluc3BlY3RvclZpZXc7CitAZW5kCisK
KyNwcmFnbWEgbWFyayAtCisKK0BpbnRlcmZhY2UgV2ViTm9kZUhpZ2hsaWdodGVyIDogTlNPYmpl
Y3QgeworQHByaXZhdGUKKyAgICBXZWJWaWV3ICpfaW5zcGVjdGVkV2ViVmlldzsKKyAgICBXZWJO
b2RlSGlnaGxpZ2h0ICpfY3VycmVudEhpZ2hsaWdodDsKK30KKy0gKGlkKWluaXRXaXRoSW5zcGVj
dGVkV2ViVmlldzooV2ViVmlldyAqKXdlYlZpZXc7CiAtICh2b2lkKWhpZ2hsaWdodE5vZGU6KERP
TU5vZGUgKilub2RlOwogLSAodm9pZCloaWRlSGlnaGxpZ2h0OwogQGVuZAogCiAjcHJhZ21hIG1h
cmsgLQogCisKIFdlYkluc3BlY3RvckNsaWVudDo6V2ViSW5zcGVjdG9yQ2xpZW50KFdlYlZpZXcg
KndlYlZpZXcpCiA6IG1fd2ViVmlldyh3ZWJWaWV3KQorLCBtX2hpZ2hsaWdodGVyKEFkb3B0TlMs
IFtbV2ViTm9kZUhpZ2hsaWdodGVyIGFsbG9jXSBpbml0V2l0aEluc3BlY3RlZFdlYlZpZXc6d2Vi
Vmlld10pCiB7CiB9CiAKIHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjppbnNwZWN0b3JEZXN0cm95
ZWQoKQogewotICAgIFtbbV93aW5kb3dDb250cm9sbGVyLmdldCgpIHdlYlZpZXddIGNsb3NlXTsK
ICAgICBkZWxldGUgdGhpczsKIH0KIAotUGFnZSogV2ViSW5zcGVjdG9yQ2xpZW50OjpjcmVhdGVQ
YWdlKCkKK3ZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpvcGVuSW5zcGVjdG9yRnJvbnRlbmQoSW5z
cGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlcikKIHsKLSAgICBpZiAobV93aW5k
b3dDb250cm9sbGVyKQotICAgICAgICBbW21fd2luZG93Q29udHJvbGxlci5nZXQoKSB3ZWJWaWV3
XSBjbG9zZV07Ci0gICAgbV93aW5kb3dDb250cm9sbGVyLmFkb3B0TlMoW1tXZWJJbnNwZWN0b3JX
aW5kb3dDb250cm9sbGVyIGFsbG9jXSBpbml0V2l0aEluc3BlY3RlZFdlYlZpZXc6bV93ZWJWaWV3
XSk7CisgICAgUmV0YWluUHRyPFdlYkluc3BlY3RvcldpbmRvd0NvbnRyb2xsZXI+IHdpbmRvd0Nv
bnRyb2xsZXIoQWRvcHROUywgW1tXZWJJbnNwZWN0b3JXaW5kb3dDb250cm9sbGVyIGFsbG9jXSBp
bml0V2l0aEluc3BlY3RlZFdlYlZpZXc6bV93ZWJWaWV3XSk7CisgICAgUGFnZSogZnJvbnRlbmRQ
YWdlID0gY29yZShbd2luZG93Q29udHJvbGxlci5nZXQoKSB3ZWJWaWV3XSk7CiAKLSAgICByZXR1
cm4gY29yZShbbV93aW5kb3dDb250cm9sbGVyLmdldCgpIHdlYlZpZXddKTsKKyAgICBmcm9udGVu
ZFBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQo
bmV3IFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50KG1fd2ViVmlldywgd2luZG93Q29udHJvbGxl
ci5nZXQoKSwgaW5zcGVjdG9yQ29udHJvbGxlciwgZnJvbnRlbmRQYWdlKSk7CiB9CiAKLVN0cmlu
ZyBXZWJJbnNwZWN0b3JDbGllbnQ6OmxvY2FsaXplZFN0cmluZ3NVUkwoKQordm9pZCBXZWJJbnNw
ZWN0b3JDbGllbnQ6OmhpZ2hsaWdodChOb2RlKiBub2RlKQoreworICAgIFttX2hpZ2hsaWdodGVy
LmdldCgpIGhpZ2hsaWdodE5vZGU6a2l0KG5vZGUpXTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JD
bGllbnQ6OmhpZGVIaWdobGlnaHQoKQoreworICAgIFttX2hpZ2hsaWdodGVyLmdldCgpIGhpZGVI
aWdobGlnaHRdOworfQorCitXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6V2ViSW5zcGVjdG9y
RnJvbnRlbmRDbGllbnQoV2ViVmlldyogaW5zcGVjdGVkV2ViVmlldywgV2ViSW5zcGVjdG9yV2lu
ZG93Q29udHJvbGxlciogd2luZG93Q29udHJvbGxlciwgSW5zcGVjdG9yQ29udHJvbGxlciogaW5z
cGVjdG9yQ29udHJvbGxlciwgUGFnZSogZnJvbnRlbmRQYWdlKQorICAgIDogSW5zcGVjdG9yRnJv
bnRlbmRDbGllbnRMb2NhbChpbnNwZWN0b3JDb250cm9sbGVyLCAgZnJvbnRlbmRQYWdlKQorICAg
ICwgbV9pbnNwZWN0ZWRXZWJWaWV3KGluc3BlY3RlZFdlYlZpZXcpCisgICAgLCBtX3dpbmRvd0Nv
bnRyb2xsZXIod2luZG93Q29udHJvbGxlcikKK3sKKyAgICBbd2luZG93Q29udHJvbGxlciBzZXRG
cm9udGVuZENsaWVudDp0aGlzXTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVu
dDo6ZnJvbnRlbmRMb2FkZWQoKQoreworICAgIFttX3dpbmRvd0NvbnRyb2xsZXIuZ2V0KCkgc2hv
d1dpbmRvdzpuaWxdOworICAgIGlmIChbbV93aW5kb3dDb250cm9sbGVyLmdldCgpIGF0dGFjaGVk
XSkKKyAgICAgICAgcmVzdG9yZUF0dGFjaGVkV2luZG93SGVpZ2h0KCk7CisKKyAgICBJbnNwZWN0
b3JGcm9udGVuZENsaWVudExvY2FsOjpmcm9udGVuZExvYWRlZCgpOworCisgICAgV2ViRnJhbWUg
KmZyYW1lID0gW21faW5zcGVjdGVkV2ViVmlldyBtYWluRnJhbWVdOworICAgIAorICAgIFdlYkZy
YW1lTG9hZERlbGVnYXRlSW1wbGVtZW50YXRpb25DYWNoZSogaW1wbGVtZW50YXRpb25zID0gV2Vi
Vmlld0dldEZyYW1lTG9hZERlbGVnYXRlSW1wbGVtZW50YXRpb25zKG1faW5zcGVjdGVkV2ViVmll
dyk7CisgICAgaWYgKGltcGxlbWVudGF0aW9ucy0+ZGlkQ2xlYXJJbnNwZWN0b3JXaW5kb3dPYmpl
Y3RGb3JGcmFtZUZ1bmMpCisgICAgICAgIENhbGxGcmFtZUxvYWREZWxlZ2F0ZShpbXBsZW1lbnRh
dGlvbnMtPmRpZENsZWFySW5zcGVjdG9yV2luZG93T2JqZWN0Rm9yRnJhbWVGdW5jLCBtX2luc3Bl
Y3RlZFdlYlZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAc2VsZWN0b3Iod2Vi
VmlldzpkaWRDbGVhckluc3BlY3RvcldpbmRvd09iamVjdDpmb3JGcmFtZTopLCBbZnJhbWUgd2lu
ZG93T2JqZWN0XSwgZnJhbWUpOworCisgICAgYm9vbCBhdHRhY2hlZCA9IFttX3dpbmRvd0NvbnRy
b2xsZXIuZ2V0KCkgYXR0YWNoZWRdOworICAgIHNldEF0dGFjaGVkV2luZG93KGF0dGFjaGVkKTsK
K30KKworU3RyaW5nIFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50Ojpsb2NhbGl6ZWRTdHJpbmdz
VVJMKCkKIHsKICAgICBOU1N0cmluZyAqcGF0aCA9IFtbTlNCdW5kbGUgYnVuZGxlV2l0aElkZW50
aWZpZXI6QCJjb20uYXBwbGUuV2ViQ29yZSJdIHBhdGhGb3JSZXNvdXJjZTpAImxvY2FsaXplZFN0
cmluZ3MiIG9mVHlwZTpAImpzIl07CiAgICAgaWYgKHBhdGgpCkBAIC05NCw3ICsxNDQsNyBAQCBT
dHJpbmcgV2ViSW5zcGVjdG9yQ2xpZW50Ojpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkKICAgICByZXR1
cm4gU3RyaW5nKCk7CiB9CiAKLVN0cmluZyBXZWJJbnNwZWN0b3JDbGllbnQ6OmhpZGRlblBhbmVs
cygpCitTdHJpbmcgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmhpZGRlblBhbmVscygpCiB7
CiAgICAgTlNTdHJpbmcgKmhpZGRlblBhbmVscyA9IFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRV
c2VyRGVmYXVsdHNdIHN0cmluZ0ZvcktleTpAIldlYktpdEluc3BlY3RvckhpZGRlblBhbmVscyJd
OwogICAgIGlmIChoaWRkZW5QYW5lbHMpCkBAIC0xMDIsNjMgKzE1Miw0NyBAQCBTdHJpbmcgV2Vi
SW5zcGVjdG9yQ2xpZW50OjpoaWRkZW5QYW5lbHMoKQogICAgIHJldHVybiBTdHJpbmcoKTsKIH0K
IAotdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OnNob3dXaW5kb3coKQordm9pZCBXZWJJbnNwZWN0
b3JGcm9udGVuZENsaWVudDo6YnJpbmdUb0Zyb250KCkKIHsKICAgICB1cGRhdGVXaW5kb3dUaXRs
ZSgpOwogICAgIFttX3dpbmRvd0NvbnRyb2xsZXIuZ2V0KCkgc2hvd1dpbmRvdzpuaWxdOwogfQog
Ci12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6Y2xvc2VXaW5kb3coKQordm9pZCBXZWJJbnNwZWN0
b3JGcm9udGVuZENsaWVudDo6Y2xvc2VXaW5kb3coKQogewotICAgIFttX3dpbmRvd0NvbnRyb2xs
ZXIuZ2V0KCkgY2xvc2VdOworICAgIFttX3dpbmRvd0NvbnRyb2xsZXIuZ2V0KCkgZGVzdHJveUlu
c3BlY3RvclZpZXddOwogfQogCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6YXR0YWNoV2luZG93
KCkKK3ZvaWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmF0dGFjaFdpbmRvdygpCiB7Cisg
ICAgaWYgKFttX3dpbmRvd0NvbnRyb2xsZXIuZ2V0KCkgYXR0YWNoZWRdKQorICAgICAgICByZXR1
cm47CiAgICAgW21fd2luZG93Q29udHJvbGxlci5nZXQoKSBhdHRhY2hdOworICAgIHJlc3RvcmVB
dHRhY2hlZFdpbmRvd0hlaWdodCgpOwogfQogCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6ZGV0
YWNoV2luZG93KCkKK3ZvaWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmRldGFjaFdpbmRv
dygpCiB7CiAgICAgW21fd2luZG93Q29udHJvbGxlci5nZXQoKSBkZXRhY2hdOwogfQogCi12b2lk
IFdlYkluc3BlY3RvckNsaWVudDo6c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVp
Z2h0KQordm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6c2V0QXR0YWNoZWRXaW5kb3dI
ZWlnaHQodW5zaWduZWQgaGVpZ2h0KQogewogICAgIFttX3dpbmRvd0NvbnRyb2xsZXIuZ2V0KCkg
c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQ6aGVpZ2h0XTsKIH0KIAotdm9pZCBXZWJJbnNwZWN0b3JD
bGllbnQ6OmhpZ2hsaWdodChOb2RlKiBub2RlKQotewotICAgIFttX3dpbmRvd0NvbnRyb2xsZXIu
Z2V0KCkgaGlnaGxpZ2h0Tm9kZTpraXQobm9kZSldOwotfQotCi12b2lkIFdlYkluc3BlY3RvckNs
aWVudDo6aGlkZUhpZ2hsaWdodCgpCi17Ci0gICAgW21fd2luZG93Q29udHJvbGxlci5nZXQoKSBo
aWRlSGlnaGxpZ2h0XTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6Omluc3BlY3RlZFVS
TENoYW5nZWQoY29uc3QgU3RyaW5nJiBuZXdVUkwpCit2b2lkIFdlYkluc3BlY3RvckZyb250ZW5k
Q2xpZW50OjppbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYgbmV3VVJMKQogewogICAg
IG1faW5zcGVjdGVkVVJMID0gbmV3VVJMOwogICAgIHVwZGF0ZVdpbmRvd1RpdGxlKCk7CiB9CiAK
LXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50Ojp1cGRhdGVXaW5kb3dUaXRsZSgpIGNvbnN0Cit2b2lk
IFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50Ojp1cGRhdGVXaW5kb3dUaXRsZSgpIGNvbnN0CiB7
CiAgICAgTlNTdHJpbmcgKnRpdGxlID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6VUlfU1RS
SU5HKCJXZWIgSW5zcGVjdG9yIOKAlCAlQCIsICJXZWIgSW5zcGVjdG9yIHdpbmRvdyB0aXRsZSIp
LCAoTlNTdHJpbmcgKiltX2luc3BlY3RlZFVSTF07CiAgICAgW1ttX3dpbmRvd0NvbnRyb2xsZXIu
Z2V0KCkgd2luZG93XSBzZXRUaXRsZTp0aXRsZV07CiB9CiAKLXZvaWQgV2ViSW5zcGVjdG9yQ2xp
ZW50OjppbnNwZWN0b3JXaW5kb3dPYmplY3RDbGVhcmVkKCkKLXsKLSAgICBXZWJGcmFtZSAqZnJh
bWUgPSBbbV93ZWJWaWV3IG1haW5GcmFtZV07Ci0gICAgCi0gICAgV2ViRnJhbWVMb2FkRGVsZWdh
dGVJbXBsZW1lbnRhdGlvbkNhY2hlKiBpbXBsZW1lbnRhdGlvbnMgPSBXZWJWaWV3R2V0RnJhbWVM
b2FkRGVsZWdhdGVJbXBsZW1lbnRhdGlvbnMobV93ZWJWaWV3KTsKLSAgICBpZiAoaW1wbGVtZW50
YXRpb25zLT5kaWRDbGVhckluc3BlY3RvcldpbmRvd09iamVjdEZvckZyYW1lRnVuYykKLSAgICAg
ICAgQ2FsbEZyYW1lTG9hZERlbGVnYXRlKGltcGxlbWVudGF0aW9ucy0+ZGlkQ2xlYXJJbnNwZWN0
b3JXaW5kb3dPYmplY3RGb3JGcmFtZUZ1bmMsIG1fd2ViVmlldywKLSAgICAgICAgICBAc2VsZWN0
b3Iod2ViVmlldzpkaWRDbGVhckluc3BlY3RvcldpbmRvd09iamVjdDpmb3JGcmFtZTopLCBbZnJh
bWUgd2luZG93T2JqZWN0XSwgZnJhbWUpOwotfQogCiAjcHJhZ21hIG1hcmsgLQogCkBAIC0yMjEs
MTggKzI1NSwxMiBAQCB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6aW5zcGVjdG9yV2luZG93T2Jq
ZWN0Q2xlYXJlZCgpCiAKIC0gKHZvaWQpZGVhbGxvYwogewotICAgIEFTU0VSVCghX2N1cnJlbnRI
aWdobGlnaHQpOwogICAgIFtfd2ViVmlldyByZWxlYXNlXTsKICAgICBbc3VwZXIgZGVhbGxvY107
CiB9CiAKICNwcmFnbWEgbWFyayAtCiAKLS0gKEJPT0wpaW5zcGVjdG9yVmlzaWJsZQotewotICAg
IHJldHVybiBfdmlzaWJsZTsKLX0KLQogLSAoV2ViVmlldyAqKXdlYlZpZXcKIHsKICAgICByZXR1
cm4gX3dlYlZpZXc7CkBAIC0yNzEsMTEgKzI5OSw3IEBAIHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50
OjppbnNwZWN0b3JXaW5kb3dPYmplY3RDbGVhcmVkKCkKIAogLSAoQk9PTCl3aW5kb3dTaG91bGRD
bG9zZTooaWQpc2VuZGVyCiB7Ci0gICAgX3Zpc2libGUgPSBOTzsKLQotICAgIFtfaW5zcGVjdGVk
V2ViVmlldyBwYWdlXS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5zZXRXaW5kb3dWaXNpYmxlKGZh
bHNlKTsKLQotICAgIFtzZWxmIGhpZGVIaWdobGlnaHRdOworICAgIFtzZWxmIGRlc3Ryb3lJbnNw
ZWN0b3JWaWV3XTsKIAogICAgIHJldHVybiBZRVM7CiB9CkBAIC0yODcsMTEgKzMxMSw2IEBAIHZv
aWQgV2ViSW5zcGVjdG9yQ2xpZW50OjppbnNwZWN0b3JXaW5kb3dPYmplY3RDbGVhcmVkKCkKIAog
ICAgIF92aXNpYmxlID0gTk87CiAKLSAgICBpZiAoIV9tb3ZpbmdXaW5kb3dzKQotICAgICAgICBb
X2luc3BlY3RlZFdlYlZpZXcgcGFnZV0tPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0V2luZG93
VmlzaWJsZShmYWxzZSk7Ci0KLSAgICBbc2VsZiBoaWRlSGlnaGxpZ2h0XTsKLQogICAgIGlmIChf
YXR0YWNoZWRUb0luc3BlY3RlZFdlYlZpZXcpIHsKICAgICAgICAgaWYgKFtfaW5zcGVjdGVkV2Vi
VmlldyBfaXNDbG9zZWRdKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzI4LDcgKzM0Nyw3IEBA
IHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjppbnNwZWN0b3JXaW5kb3dPYmplY3RDbGVhcmVkKCkK
ICAgICBTdHJpbmcgc2hvdWxkQXR0YWNoID0gW19pbnNwZWN0ZWRXZWJWaWV3IHBhZ2VdLT5pbnNw
ZWN0b3JDb250cm9sbGVyKCktPnNldHRpbmcoSW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zcGVjdG9y
U3RhcnRzQXR0YWNoZWRTZXR0aW5nTmFtZSgpKTsKICAgICBfc2hvdWxkQXR0YWNoID0gc2hvdWxk
QXR0YWNoICE9ICJmYWxzZSI7CiAgICAgCi0gICAgaWYgKF9zaG91bGRBdHRhY2ggJiYgIVtfaW5z
cGVjdGVkV2ViVmlldyBwYWdlXS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5jYW5BdHRhY2hXaW5k
b3coKSkKKyAgICBpZiAoX3Nob3VsZEF0dGFjaCAmJiAhX2Zyb250ZW5kQ2xpZW50LT5jYW5BdHRh
Y2hXaW5kb3coKSkKICAgICAgICAgX3Nob3VsZEF0dGFjaCA9IE5POwogCiAgICAgaWYgKF9zaG91
bGRBdHRhY2gpIHsKQEAgLTM1Miw4ICszNzEsNiBAQCB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6
aW5zcGVjdG9yV2luZG93T2JqZWN0Q2xlYXJlZCgpCiAKICAgICAgICAgW3N1cGVyIHNob3dXaW5k
b3c6bmlsXTsKICAgICB9Ci0KLSAgICBbX2luc3BlY3RlZFdlYlZpZXcgcGFnZV0tPmluc3BlY3Rv
ckNvbnRyb2xsZXIoKS0+c2V0V2luZG93VmlzaWJsZSh0cnVlLCBfc2hvdWxkQXR0YWNoKTsKIH0K
IAogI3ByYWdtYSBtYXJrIC0KQEAgLTM2NCwxMiArMzgxLDkgQEAgdm9pZCBXZWJJbnNwZWN0b3JD
bGllbnQ6Omluc3BlY3RvcldpbmRvd09iamVjdENsZWFyZWQoKQogICAgICAgICByZXR1cm47CiAK
ICAgICBbX2luc3BlY3RlZFdlYlZpZXcgcGFnZV0tPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0
U2V0dGluZyhJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0b3JTdGFydHNBdHRhY2hlZFNldHRp
bmdOYW1lKCksICJ0cnVlIik7Ci0gICAgX21vdmluZ1dpbmRvd3MgPSBZRVM7CiAKICAgICBbc2Vs
ZiBjbG9zZV07CiAgICAgW3NlbGYgc2hvd1dpbmRvdzpuaWxdOwotCi0gICAgX21vdmluZ1dpbmRv
d3MgPSBOTzsKIH0KIAogLSAodm9pZClkZXRhY2gKQEAgLTM3OCwxMyArMzkyLDE5IEBAIHZvaWQg
V2ViSW5zcGVjdG9yQ2xpZW50OjppbnNwZWN0b3JXaW5kb3dPYmplY3RDbGVhcmVkKCkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgW19pbnNwZWN0ZWRXZWJWaWV3IHBhZ2VdLT5pbnNwZWN0b3JDb250
cm9sbGVyKCktPnNldFNldHRpbmcoSW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zcGVjdG9yU3RhcnRz
QXR0YWNoZWRTZXR0aW5nTmFtZSgpLCAiZmFsc2UiKTsKLSAgICBfbW92aW5nV2luZG93cyA9IFlF
UzsKIAogICAgIFtzZWxmIGNsb3NlXTsKICAgICBbc2VsZiBzaG93V2luZG93Om5pbF07Cit9CiAK
LSAgICBfbW92aW5nV2luZG93cyA9IE5POworLSAoQk9PTClhdHRhY2hlZAoreworICAgIHJldHVy
biBfYXR0YWNoZWRUb0luc3BlY3RlZFdlYlZpZXc7Cit9CiAKKy0gKHZvaWQpc2V0RnJvbnRlbmRD
bGllbnQ6KFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50Kilmcm9udGVuZENsaWVudAoreworICAg
IF9mcm9udGVuZENsaWVudCA9IGZyb250ZW5kQ2xpZW50OwogfQogCiAtICh2b2lkKXNldEF0dGFj
aGVkV2luZG93SGVpZ2h0Oih1bnNpZ25lZCloZWlnaHQKQEAgLTQwNSwyOSArNDI1LDE3IEBAIHZv
aWQgV2ViSW5zcGVjdG9yQ2xpZW50OjppbnNwZWN0b3JXaW5kb3dPYmplY3RDbGVhcmVkKCkKICAg
ICBbZnJhbWVWaWV3IHNldEZyYW1lOmZyYW1lVmlld1JlY3RdOwogfQogCi0jcHJhZ21hIG1hcmsg
LQotCi0tICh2b2lkKWhpZ2hsaWdodE5vZGU6KERPTU5vZGUgKilub2RlCistICh2b2lkKWRlc3Ry
b3lJbnNwZWN0b3JWaWV3CiB7Ci0gICAgLy8gVGhlIHNjcm9sbHZpZXcncyBjb250ZW50IHZpZXcg
c3RheXMgYXJvdW5kIGJldHdlZW4gcGFnZSBuYXZpZ2F0aW9ucywgc28gdGFyZ2V0IGl0Ci0gICAg
TlNWaWV3ICp2aWV3ID0gW1tbW1tfaW5zcGVjdGVkV2ViVmlldyBtYWluRnJhbWVdIGZyYW1lVmll
d10gZG9jdW1lbnRWaWV3XSBlbmNsb3NpbmdTY3JvbGxWaWV3XSBjb250ZW50Vmlld107Ci0gICAg
aWYgKCFbdmlldyB3aW5kb3ddKQotICAgICAgICByZXR1cm47IC8vIHNraXAgdGhlIGhpZ2hsaWdo
dCBpZiB3ZSBoYXZlIG5vIHdpbmRvdyAoZS5nLiBoaWRkZW4gdGFiKQotCi0gICAgaWYgKCFfY3Vy
cmVudEhpZ2hsaWdodCkgewotICAgICAgICBfY3VycmVudEhpZ2hsaWdodCA9IFtbV2ViTm9kZUhp
Z2hsaWdodCBhbGxvY10gaW5pdFdpdGhUYXJnZXRWaWV3OnZpZXcgaW5zcGVjdG9yQ29udHJvbGxl
cjpbX2luc3BlY3RlZFdlYlZpZXcgcGFnZV0tPmluc3BlY3RvckNvbnRyb2xsZXIoKV07Ci0gICAg
ICAgIFtfY3VycmVudEhpZ2hsaWdodCBzZXREZWxlZ2F0ZTpzZWxmXTsKLSAgICAgICAgW19jdXJy
ZW50SGlnaGxpZ2h0IGF0dGFjaF07Ci0gICAgfSBlbHNlCi0gICAgICAgIFtbX2N1cnJlbnRIaWdo
bGlnaHQgaGlnaGxpZ2h0Vmlld10gc2V0TmVlZHNEaXNwbGF5OllFU107Ci19CisgICAgaWYgKF9k
ZXN0cm95aW5nSW5zcGVjdG9yVmlldykKKyAgICAgICAgcmV0dXJuOworICAgIF9kZXN0cm95aW5n
SW5zcGVjdG9yVmlldyA9IFlFUzsKIAotLSAodm9pZCloaWRlSGlnaGxpZ2h0Ci17Ci0gICAgW19j
dXJyZW50SGlnaGxpZ2h0IGRldGFjaF07Ci0gICAgW19jdXJyZW50SGlnaGxpZ2h0IHNldERlbGVn
YXRlOm5pbF07Ci0gICAgW19jdXJyZW50SGlnaGxpZ2h0IHJlbGVhc2VdOwotICAgIF9jdXJyZW50
SGlnaGxpZ2h0ID0gbmlsOworICAgIGlmIChfYXR0YWNoZWRUb0luc3BlY3RlZFdlYlZpZXcpCisg
ICAgICAgIFtzZWxmIGNsb3NlXTsKKyAgICBfdmlzaWJsZSA9IE5POworICAgIFtfaW5zcGVjdGVk
V2ViVmlldyBwYWdlXS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5jbG9zZSgpOworICAgIFtfd2Vi
VmlldyBjbG9zZV07CiB9CiAKICNwcmFnbWEgbWFyayAtCkBAIC00OTcsMyArNTA1LDYwIEBAIHZv
aWQgV2ViSW5zcGVjdG9yQ2xpZW50OjppbnNwZWN0b3JXaW5kb3dPYmplY3RDbGVhcmVkKCkKIH0K
IAogQGVuZAorCisKKyNwcmFnbWEgbWFyayAtCisKK0BpbXBsZW1lbnRhdGlvbiBXZWJOb2RlSGln
aGxpZ2h0ZXIKKy0gKGlkKWluaXRXaXRoSW5zcGVjdGVkV2ViVmlldzooV2ViVmlldyAqKXdlYlZp
ZXcKK3sKKyAgICAvLyBEb24ndCByZXRhaW4gdG8gYXZvaWQgYSBjaXJjdWxhciByZWZlcmVuY2UK
KyAgICBfaW5zcGVjdGVkV2ViVmlldyA9IHdlYlZpZXc7CisgICAgcmV0dXJuIHNlbGY7Cit9CisK
Ky0gKHZvaWQpZGVhbGxvYworeworICAgIEFTU0VSVCghX2N1cnJlbnRIaWdobGlnaHQpOworICAg
IFtzdXBlciBkZWFsbG9jXTsKK30KKworI3ByYWdtYSBtYXJrIC0KKworLSAodm9pZCloaWdobGln
aHROb2RlOihET01Ob2RlICopbm9kZQoreworICAgIC8vIFRoZSBzY3JvbGx2aWV3J3MgY29udGVu
dCB2aWV3IHN0YXlzIGFyb3VuZCBiZXR3ZWVuIHBhZ2UgbmF2aWdhdGlvbnMsIHNvIHRhcmdldCBp
dAorICAgIE5TVmlldyAqdmlldyA9IFtbW1tbX2luc3BlY3RlZFdlYlZpZXcgbWFpbkZyYW1lXSBm
cmFtZVZpZXddIGRvY3VtZW50Vmlld10gZW5jbG9zaW5nU2Nyb2xsVmlld10gY29udGVudFZpZXdd
OworICAgIGlmICghW3ZpZXcgd2luZG93XSkKKyAgICAgICAgcmV0dXJuOyAvLyBza2lwIHRoZSBo
aWdobGlnaHQgaWYgd2UgaGF2ZSBubyB3aW5kb3cgKGUuZy4gaGlkZGVuIHRhYikKKyAgICAKKyAg
ICBpZiAoIV9jdXJyZW50SGlnaGxpZ2h0KSB7CisgICAgICAgIF9jdXJyZW50SGlnaGxpZ2h0ID0g
W1tXZWJOb2RlSGlnaGxpZ2h0IGFsbG9jXSBpbml0V2l0aFRhcmdldFZpZXc6dmlldyBpbnNwZWN0
b3JDb250cm9sbGVyOltfaW5zcGVjdGVkV2ViVmlldyBwYWdlXS0+aW5zcGVjdG9yQ29udHJvbGxl
cigpXTsKKyAgICAgICAgW19jdXJyZW50SGlnaGxpZ2h0IHNldERlbGVnYXRlOnNlbGZdOworICAg
ICAgICBbX2N1cnJlbnRIaWdobGlnaHQgYXR0YWNoXTsKKyAgICB9IGVsc2UKKyAgICAgICAgW1tf
Y3VycmVudEhpZ2hsaWdodCBoaWdobGlnaHRWaWV3XSBzZXROZWVkc0Rpc3BsYXk6WUVTXTsKK30K
KworLSAodm9pZCloaWRlSGlnaGxpZ2h0Cit7CisgICAgW19jdXJyZW50SGlnaGxpZ2h0IGRldGFj
aF07CisgICAgW19jdXJyZW50SGlnaGxpZ2h0IHNldERlbGVnYXRlOm5pbF07CisgICAgW19jdXJy
ZW50SGlnaGxpZ2h0IHJlbGVhc2VdOworICAgIF9jdXJyZW50SGlnaGxpZ2h0ID0gbmlsOworfQor
CisjcHJhZ21hIG1hcmsgLQorI3ByYWdtYSBtYXJrIFdlYk5vZGVIaWdobGlnaHQgZGVsZWdhdGUK
KworLSAodm9pZClkaWRBdHRhY2hXZWJOb2RlSGlnaGxpZ2h0OihXZWJOb2RlSGlnaGxpZ2h0ICop
aGlnaGxpZ2h0Cit7CisgICAgW19pbnNwZWN0ZWRXZWJWaWV3IHNldEN1cnJlbnROb2RlSGlnaGxp
Z2h0OmhpZ2hsaWdodF07Cit9CisKKy0gKHZvaWQpd2lsbERldGFjaFdlYk5vZGVIaWdobGlnaHQ6
KFdlYk5vZGVIaWdobGlnaHQgKiloaWdobGlnaHQKK3sKKyAgICBbX2luc3BlY3RlZFdlYlZpZXcg
c2V0Q3VycmVudE5vZGVIaWdobGlnaHQ6bmlsXTsKK30KKyAgICAKK0BlbmQKZGlmZiAtLWdpdCBh
L1dlYktpdC9tYWMvV2ViSW5zcGVjdG9yL1dlYkluc3BlY3Rvci5tbSBiL1dlYktpdC9tYWMvV2Vi
SW5zcGVjdG9yL1dlYkluc3BlY3Rvci5tbQppbmRleCAyNThkZDAxLi45YjE3NDU5IDEwMDY0NAot
LS0gYS9XZWJLaXQvbWFjL1dlYkluc3BlY3Rvci9XZWJJbnNwZWN0b3IubW0KKysrIGIvV2ViS2l0
L21hYy9XZWJJbnNwZWN0b3IvV2ViSW5zcGVjdG9yLm1tCkBAIC0xNzUsMTQgKzE3NSwxMCBAQCB1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogLSAodm9pZClhdHRhY2g6KGlkKXNlbmRlcgogewot
ICAgIGlmIChQYWdlKiBwYWdlID0gY29yZShfd2ViVmlldykpCi0gICAgICAgIHBhZ2UtPmluc3Bl
Y3RvckNvbnRyb2xsZXIoKS0+YXR0YWNoV2luZG93KCk7CiB9CiAKIC0gKHZvaWQpZGV0YWNoOihp
ZClzZW5kZXIKIHsKLSAgICBpZiAoUGFnZSogcGFnZSA9IGNvcmUoX3dlYlZpZXcpKQotICAgICAg
ICBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmRldGFjaFdpbmRvdygpOwogfQogCiAtICh2
b2lkKWV2YWx1YXRlSW5Gcm9udGVuZDooaWQpc2VuZGVyIGNhbGxJZDoobG9uZyljYWxsSWQgc2Ny
aXB0OihOU1N0cmluZyAqKXNjcmlwdApkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L0FwaS9xd2ViaW5z
cGVjdG9yLmNwcCBiL1dlYktpdC9xdC9BcGkvcXdlYmluc3BlY3Rvci5jcHAKaW5kZXggYzNlZjUz
MC4uYzBlNTI3NyAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L0FwaS9xd2ViaW5zcGVjdG9yLmNwcAor
KysgYi9XZWJLaXQvcXQvQXBpL3F3ZWJpbnNwZWN0b3IuY3BwCkBAIC0xNjEsNiArMTYxLDEwIEBA
IHZvaWQgUVdlYkluc3BlY3Rvcjo6c2hvd0V2ZW50KFFTaG93RXZlbnQqIGV2ZW50KQogLyohIFxy
ZWltcCAqLwogdm9pZCBRV2ViSW5zcGVjdG9yOjpoaWRlRXZlbnQoUUhpZGVFdmVudCogZXZlbnQp
CiB7CisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKyAgICBpZiAoZC0+cGFnZSkKKyAgICAgICAgZC0+
cGFnZS0+ZC0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5jbG9zZSgpOworI2VuZGlmCiB9CiAKIC8q
ISBccmVpbXAgKi8KQEAgLTE2OCw3ICsxNzIsNyBAQCB2b2lkIFFXZWJJbnNwZWN0b3I6OmNsb3Nl
RXZlbnQoUUNsb3NlRXZlbnQqIGV2ZW50KQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAgICAg
aWYgKGQtPnBhZ2UpCi0gICAgICAgIGQtPnBhZ2UtPmQtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+
c2V0V2luZG93VmlzaWJsZShmYWxzZSk7CisgICAgICAgIGQtPnBhZ2UtPmQtPmluc3BlY3RvckNv
bnRyb2xsZXIoKS0+Y2xvc2UoKTsKICNlbmRpZgogfQogCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQv
QXBpL3F3ZWJpbnNwZWN0b3IuaCBiL1dlYktpdC9xdC9BcGkvcXdlYmluc3BlY3Rvci5oCmluZGV4
IDZjZGE0NzkuLmYxOTJlOTIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9BcGkvcXdlYmluc3BlY3Rv
ci5oCisrKyBiL1dlYktpdC9xdC9BcGkvcXdlYmluc3BlY3Rvci5oCkBAIC01Miw1ICs1Miw2IEBA
IHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFFXZWJQYWdlOwogICAgIGZyaWVuZCBjbGFzcyBR
V2ViUGFnZVByaXZhdGU7CiAgICAgZnJpZW5kIGNsYXNzIFdlYkNvcmU6Okluc3BlY3RvckNsaWVu
dFF0OworICAgIGZyaWVuZCBjbGFzcyBXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0
OwogfTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5oIGIvV2Vi
S2l0L3F0L0FwaS9xd2VicGFnZS5oCmluZGV4IDQ3NjZjYmQuLjA3NmZiN2MgMTAwNjQ0Ci0tLSBh
L1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuaAorKysgYi9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmgK
QEAgLTU0LDYgKzU0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEVkaXRvckNs
aWVudFF0OwogICAgIGNsYXNzIEZyYW1lTG9hZGVyQ2xpZW50UXQ7CiAgICAgY2xhc3MgSW5zcGVj
dG9yQ2xpZW50UXQ7CisgICAgY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdDsKICAgICBj
bGFzcyBSZXNvdXJjZUhhbmRsZTsKICAgICBjbGFzcyBIaXRUZXN0UmVzdWx0OwogICAgIGNsYXNz
IFFOZXR3b3JrUmVwbHlIYW5kbGVyOwpAQCAtMzYxLDYgKzM2Miw3IEBAIHByaXZhdGU6CiAgICAg
ZnJpZW5kIGNsYXNzIFdlYkNvcmU6OkVkaXRvckNsaWVudFF0OwogICAgIGZyaWVuZCBjbGFzcyBX
ZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudFF0OwogICAgIGZyaWVuZCBjbGFzcyBXZWJDb3JlOjpJ
bnNwZWN0b3JDbGllbnRRdDsKKyAgICBmcmllbmQgY2xhc3MgV2ViQ29yZTo6SW5zcGVjdG9yRnJv
bnRlbmRDbGllbnRRdDsKICAgICBmcmllbmQgY2xhc3MgV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU7
CiAgICAgZnJpZW5kIGNsYXNzIFdlYkNvcmU6OlFOZXR3b3JrUmVwbHlIYW5kbGVyOwogfTsKZGlm
ZiAtLWdpdCBhL1dlYktpdC9xdC9DaGFuZ2VMb2cgYi9XZWJLaXQvcXQvQ2hhbmdlTG9nCmluZGV4
IDgxZjkxYzMuLjVhMTc5ZmMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9DaGFuZ2VMb2cKKysrIGIv
V2ViS2l0L3F0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDEwLTAzLTExICBZdXJ5IFNl
bWlraGF0c2t5IDx5dXJ5c0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgSW50cm9kdWNlIEluc3BlY3RvckZyb250ZW5kQ2xpZW50
IHRoYXQgcHJvdmlkZXMgSW5zcGVjdG9yRnJvbnRlbmQgd2l0aCBhbiBpbnRlcmZhY2UgdG8gdGhl
IGVtYmVkZGVyLiBJbnNwZWN0b3JDbGllbnQgbm93IHNlcnZlcyBhcyBhIGRlbGVnYXRlIGZvciBJ
bnNwZWN0b3JDb250cm9sbGVyIGFuZCBkb2VzIG5vdCBjb250YWluIG1ldGhvZHMgZm9yIG1hbmFn
aW5nIGluc3BlY3RvciBmcm9udGVuZCB3aW5kb3cuIFRoYXQgYWxsb3dzIHRvIGNyZWF0ZSByZW1v
dGUgSW5zcGVjdG9yRnJvbnRlbmRIb3N0LgorCisgICAgICAgIEludHJvZHVjZSBJbnNwZWN0b3JG
cm9udGVuZENsaWVudCB0aGF0IHdvdWxkIHByb3ZpZGUgSW5zcGVjdG9yRnJvbnRlbmQgd2l0aCBh
biBpbnRlcmZhY2UgdG8gdGhlIGVtYmVkZGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0zNTAzNgorCisgICAgICAgICogQXBpL3F3ZWJpbnNwZWN0b3Iu
Y3BwOgorICAgICAgICAoUVdlYkluc3BlY3Rvcjo6aGlkZUV2ZW50KToKKyAgICAgICAgKFFXZWJJ
bnNwZWN0b3I6OmNsb3NlRXZlbnQpOgorICAgICAgICAqIEFwaS9xd2ViaW5zcGVjdG9yLmg6Cisg
ICAgICAgICogQXBpL3F3ZWJwYWdlLmg6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvSW5zcGVj
dG9yQ2xpZW50UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2xpZW50UXQ6Om9w
ZW5JbnNwZWN0b3JGcm9udGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVu
ZENsaWVudFF0OjpJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0KToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckZyb250ZW5kQ2xpZW50UXQ6OmZyb250ZW5kTG9hZGVkKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50UXQ6OmxvY2FsaXplZFN0cmluZ3NVUkwpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdDo6aGlkZGVuUGFuZWxz
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50UXQ6OmJyaW5nVG9G
cm9udCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0OjpjbG9z
ZVdpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0Ojph
dHRhY2hXaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRR
dDo6ZGV0YWNoV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xp
ZW50UXQ6OnNldEF0dGFjaGVkV2luZG93SGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50UXQ6Omluc3BlY3RlZFVSTENoYW5nZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdDo6dXBkYXRlV2luZG93VGl0bGUpOgorICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudFF0Lmg6CisKIDIwMTAtMDMtMTEg
IEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBEYXZpZCBIeWF0dC4KZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9J
bnNwZWN0b3JDbGllbnRRdC5jcHAgYi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9y
Q2xpZW50UXQuY3BwCmluZGV4IGNkZTY0YzguLmNhOWYxNzEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRRdC5jcHAKKysrIGIvV2ViS2l0L3F0L1dl
YkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudFF0LmNwcApAQCAtODEsMTUgKzgxLDEyIEBAIHZv
aWQgSW5zcGVjdG9yQ2xpZW50UXQ6Omluc3BlY3RvckRlc3Ryb3llZCgpCiAgICAgZGVsZXRlIHRo
aXM7CiB9CiAKLVBhZ2UqIEluc3BlY3RvckNsaWVudFF0OjpjcmVhdGVQYWdlKCkKLXsKLSAgICBR
V2ViVmlldyogaW5zcGVjdG9yVmlldyA9IG1faW5zcGVjdG9yVmlldy5nZXQoKTsKLSAgICBpZiAo
IWluc3BlY3RvclZpZXcpIHsKLSAgICAgICAgaW5zcGVjdG9yVmlldyA9IG5ldyBRV2ViVmlldzsK
LSAgICAgICAgSW5zcGVjdG9yQ2xpZW50V2ViUGFnZSogaW5zcGVjdG9yUGFnZSA9IG5ldyBJbnNw
ZWN0b3JDbGllbnRXZWJQYWdlKGluc3BlY3RvclZpZXcpOwotICAgICAgICBpbnNwZWN0b3JWaWV3
LT5zZXRQYWdlKGluc3BlY3RvclBhZ2UpOwotICAgICAgICBtX2luc3BlY3RvclZpZXcuc2V0KGlu
c3BlY3RvclZpZXcpOwotICAgIH0KKyAgICAKK3ZvaWQgSW5zcGVjdG9yQ2xpZW50UXQ6Om9wZW5J
bnNwZWN0b3JGcm9udGVuZChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyKikKK3sKKyAgICBR
V2ViVmlldyogaW5zcGVjdG9yVmlldyA9IG5ldyBRV2ViVmlldzsKKyAgICBJbnNwZWN0b3JDbGll
bnRXZWJQYWdlKiBpbnNwZWN0b3JQYWdlID0gbmV3IEluc3BlY3RvckNsaWVudFdlYlBhZ2UoaW5z
cGVjdG9yVmlldyk7CisgICAgaW5zcGVjdG9yVmlldy0+c2V0UGFnZShpbnNwZWN0b3JQYWdlKTsK
IAogICAgIFFVcmwgaW5zcGVjdG9yVXJsID0gbV9pbnNwZWN0ZWRXZWJQYWdlLT5zZXR0aW5ncygp
LT5pbnNwZWN0b3JVcmwoKTsKICAgICBpZiAoIWluc3BlY3RvclVybC5pc1ZhbGlkKCkpCkBAIC05
OCw1MCArOTUsNyBAQCBQYWdlKiBJbnNwZWN0b3JDbGllbnRRdDo6Y3JlYXRlUGFnZSgpCiAgICAg
bV9pbnNwZWN0ZWRXZWJQYWdlLT5kLT5pbnNwZWN0b3JGcm9udGVuZCA9IGluc3BlY3RvclZpZXc7
CiAgICAgbV9pbnNwZWN0ZWRXZWJQYWdlLT5kLT5nZXRPckNyZWF0ZUluc3BlY3RvcigpLT5kLT5z
ZXRGcm9udGVuZChpbnNwZWN0b3JWaWV3KTsKIAotICAgIHJldHVybiBpbnNwZWN0b3JWaWV3LT5w
YWdlKCktPmQtPnBhZ2U7Ci19Ci0KLVN0cmluZyBJbnNwZWN0b3JDbGllbnRRdDo6bG9jYWxpemVk
U3RyaW5nc1VSTCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5n
KCk7Ci19Ci0KLVN0cmluZyBJbnNwZWN0b3JDbGllbnRRdDo6aGlkZGVuUGFuZWxzKCkKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotdm9pZCBJbnNw
ZWN0b3JDbGllbnRRdDo6c2hvd1dpbmRvdygpCi17Ci0gICAgdXBkYXRlV2luZG93VGl0bGUoKTsK
LQotI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgbV9pbnNwZWN0ZWRXZWJQYWdlLT5kLT5pbnNw
ZWN0b3JDb250cm9sbGVyKCktPnNldFdpbmRvd1Zpc2libGUodHJ1ZSwgdHJ1ZSk7Ci0jZW5kaWYK
LX0KLQotdm9pZCBJbnNwZWN0b3JDbGllbnRRdDo6Y2xvc2VXaW5kb3coKQotewotI2lmIEVOQUJM
RShJTlNQRUNUT1IpCi0gICAgbV9pbnNwZWN0ZWRXZWJQYWdlLT5kLT5pbnNwZWN0b3JDb250cm9s
bGVyKCktPnNldFdpbmRvd1Zpc2libGUoZmFsc2UpOwotI2VuZGlmCi19Ci0KLXZvaWQgSW5zcGVj
dG9yQ2xpZW50UXQ6OmF0dGFjaFdpbmRvdygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotdm9pZCBJbnNwZWN0b3JDbGllbnRRdDo6ZGV0YWNoV2luZG93KCkKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotfQotCi12b2lkIEluc3BlY3RvckNsaWVudFF0OjpzZXRBdHRhY2hlZFdpbmRv
d0hlaWdodCh1bnNpZ25lZCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGluc3BlY3Rv
clZpZXctPnBhZ2UoKS0+ZC0+cGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5zZXRJbnNwZWN0
b3JGcm9udGVuZENsaWVudChuZXcgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdChtX2luc3BlY3Rl
ZFdlYlBhZ2UsIGluc3BlY3RvclZpZXcpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDbGllbnRRdDo6
aGlnaGxpZ2h0KE5vZGUqKQpAQCAtMTU0LDI1ICsxMDgsNiBAQCB2b2lkIEluc3BlY3RvckNsaWVu
dFF0OjpoaWRlSGlnaGxpZ2h0KCkKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIElu
c3BlY3RvckNsaWVudFF0OjppbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYgbmV3VVJM
KQotewotICAgIG1faW5zcGVjdGVkVVJMID0gbmV3VVJMOwotICAgIHVwZGF0ZVdpbmRvd1RpdGxl
KCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ2xpZW50UXQ6Omluc3BlY3RvcldpbmRvd09iamVjdENs
ZWFyZWQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ2xp
ZW50UXQ6OnVwZGF0ZVdpbmRvd1RpdGxlKCkKLXsKLSAgICBpZiAobV9pbnNwZWN0ZWRXZWJQYWdl
LT5kLT5pbnNwZWN0b3IpIHsKLSAgICAgICAgUVN0cmluZyBjYXB0aW9uID0gUUNvcmVBcHBsaWNh
dGlvbjo6dHJhbnNsYXRlKCJRV2ViUGFnZSIsICJXZWIgSW5zcGVjdG9yIC0gJTIiKS5hcmcobV9p
bnNwZWN0ZWRVUkwpOwotICAgICAgICBtX2luc3BlY3RlZFdlYlBhZ2UtPmQtPmluc3BlY3Rvci0+
c2V0V2luZG93VGl0bGUoY2FwdGlvbik7Ci0gICAgfQotfQotCiB2b2lkIEluc3BlY3RvckNsaWVu
dFF0Ojpwb3B1bGF0ZVNldHRpbmcoY29uc3QgU3RyaW5nJiBrZXksIFN0cmluZyogc2V0dGluZykK
IHsKICAgICBRU2V0dGluZ3MgcXNldHRpbmdzOwpAQCAtMjI2LDYgKzE2MSw4MSBAQCBzdGF0aWMg
UVZhcmlhbnQgc2V0dGluZ1RvVmFyaWFudChjb25zdCBTdHJpbmcmIHNldHRpbmcpCiAgICAgcmV0
dXJuIHJldFZhbDsKIH0KIAorSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdDo6SW5zcGVjdG9yRnJv
bnRlbmRDbGllbnRRdChRV2ViUGFnZSogaW5zcGVjdGVkV2ViUGFnZSwgUGFzc093blB0cjxRV2Vi
Vmlldz4gaW5zcGVjdG9yVmlldykKKyAgICA6IEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwo
aW5zcGVjdGVkV2ViUGFnZS0+ZC0+cGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLCBpbnNwZWN0
b3JWaWV3LT5wYWdlKCktPmQtPnBhZ2UpIAorICAgICwgbV9pbnNwZWN0ZWRXZWJQYWdlKGluc3Bl
Y3RlZFdlYlBhZ2UpCisgICAgLCBtX2luc3BlY3RvclZpZXcoaW5zcGVjdG9yVmlldykKKyAgICAs
IG1fZGVzdHJveWluZ0luc3BlY3RvclZpZXcoZmFsc2UpCit7Cit9CisKK3ZvaWQgSW5zcGVjdG9y
RnJvbnRlbmRDbGllbnRRdDo6ZnJvbnRlbmRMb2FkZWQoKQoreworICAgIEluc3BlY3RvckZyb250
ZW5kQ2xpZW50TG9jYWw6OmZyb250ZW5kTG9hZGVkKCk7CisgICAgc2V0QXR0YWNoZWRXaW5kb3co
dHJ1ZSk7Cit9CisKK1N0cmluZyBJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0Ojpsb2NhbGl6ZWRT
dHJpbmdzVVJMKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBTdHJpbmco
KTsKK30KKworU3RyaW5nIEluc3BlY3RvckZyb250ZW5kQ2xpZW50UXQ6OmhpZGRlblBhbmVscygp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK3Zv
aWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdDo6YnJpbmdUb0Zyb250KCkKK3sKKyAgICB1cGRh
dGVXaW5kb3dUaXRsZSgpOworfQorCit2b2lkIEluc3BlY3RvckZyb250ZW5kQ2xpZW50UXQ6OmNs
b3NlV2luZG93KCkKK3sKKyAgICBpZiAobV9kZXN0cm95aW5nSW5zcGVjdG9yVmlldykKKyAgICAg
ICAgcmV0dXJuOworICAgIG1fZGVzdHJveWluZ0luc3BlY3RvclZpZXcgPSB0cnVlOworCisgICAg
Ly8gQ2xlYXIgcmVmZXJlbmNlIGZyb20gUVdlYkluc3BlY3RvciB0byB0aGUgZnJvbnRlbmQgdmll
dy4KKyAgICBtX2luc3BlY3RlZFdlYlBhZ2UtPmQtPmdldE9yQ3JlYXRlSW5zcGVjdG9yKCktPmQt
PnNldEZyb250ZW5kKDApOworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisgICAgbV9pbnNwZWN0ZWRX
ZWJQYWdlLT5kLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmNsb3NlKCk7CisjZW5kaWYKKyAgICAv
LyBDbGVhciBwb2ludGVyIGJlZm9yZSBkZWxldGluZyBXZWJWaWV3IHRvIGF2b2lkIHJlY3Vyc2l2
ZSBjYWxscyB0byBpdHMgZGVzdHJ1Y3Rvci4KKyAgICBkZWxldGUgbV9pbnNwZWN0b3JWaWV3LnJl
bGVhc2UoKTsKK30KKwordm9pZCBJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0OjphdHRhY2hXaW5k
b3coKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yRnJvbnRl
bmRDbGllbnRRdDo6ZGV0YWNoV2luZG93KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
Cit2b2lkIEluc3BlY3RvckZyb250ZW5kQ2xpZW50UXQ6OnNldEF0dGFjaGVkV2luZG93SGVpZ2h0
KHVuc2lnbmVkKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9y
RnJvbnRlbmRDbGllbnRRdDo6aW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIG5ld1VS
TCkKK3sKKyAgICBtX2luc3BlY3RlZFVSTCA9IG5ld1VSTDsKKyAgICB1cGRhdGVXaW5kb3dUaXRs
ZSgpOworfQorCit2b2lkIEluc3BlY3RvckZyb250ZW5kQ2xpZW50UXQ6OnVwZGF0ZVdpbmRvd1Rp
dGxlKCkKK3sKKyAgICBpZiAobV9pbnNwZWN0ZWRXZWJQYWdlLT5kLT5pbnNwZWN0b3IpIHsKKyAg
ICAgICAgUVN0cmluZyBjYXB0aW9uID0gUUNvcmVBcHBsaWNhdGlvbjo6dHJhbnNsYXRlKCJRV2Vi
UGFnZSIsICJXZWIgSW5zcGVjdG9yIC0gJTIiKS5hcmcobV9pbnNwZWN0ZWRVUkwpOworICAgICAg
ICBtX2luc3BlY3RlZFdlYlBhZ2UtPmQtPmluc3BlY3Rvci0+c2V0V2luZG93VGl0bGUoY2FwdGlv
bik7CisgICAgfQorfQorCiB9CiAKICNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnRRdC5tb2MiCmRp
ZmYgLS1naXQgYS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50UXQuaCBi
L1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRRdC5oCmluZGV4IGM5NTQ4
YjAuLjRiZWFkYWIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0
b3JDbGllbnRRdC5oCisrKyBiL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGll
bnRRdC5oCkBAIC0zMSw3ICszMSw5IEBACiAjZGVmaW5lIEluc3BlY3RvckNsaWVudFF0X2gKIAog
I2luY2x1ZGUgIkluc3BlY3RvckNsaWVudC5oIgorI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5k
Q2xpZW50TG9jYWwuaCIKICNpbmNsdWRlICJPd25QdHIuaCIKKyNpbmNsdWRlICJQYXNzT3duUHRy
LmgiCiAjaW5jbHVkZSA8UXRDb3JlL1FTdHJpbmc+CiAKIGNsYXNzIFFXZWJQYWdlOwpAQCAtNDgs
MTMgKzUwLDI5IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0b3JEZXN0cm95
ZWQoKTsKIAotICAgIHZpcnR1YWwgUGFnZSogY3JlYXRlUGFnZSgpOworICAgIHZpcnR1YWwgdm9p
ZCBvcGVuSW5zcGVjdG9yRnJvbnRlbmQoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlciopOwor
CisgICAgdmlydHVhbCB2b2lkIGhpZ2hsaWdodChOb2RlKik7CisgICAgdmlydHVhbCB2b2lkIGhp
ZGVIaWdobGlnaHQoKTsKKworICAgIHZpcnR1YWwgdm9pZCBwb3B1bGF0ZVNldHRpbmcoY29uc3Qg
U3RyaW5nJiBrZXksIFN0cmluZyogdmFsdWUpOworICAgIHZpcnR1YWwgdm9pZCBzdG9yZVNldHRp
bmcoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpOworCitwcml2YXRlOgor
ICAgIFFXZWJQYWdlKiBtX2luc3BlY3RlZFdlYlBhZ2U7Cit9OworCitjbGFzcyBJbnNwZWN0b3JG
cm9udGVuZENsaWVudFF0IDogcHVibGljIEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwgewor
cHVibGljOgorICAgIEluc3BlY3RvckZyb250ZW5kQ2xpZW50UXQoUVdlYlBhZ2UqIGluc3BlY3Rl
ZFdlYlBhZ2UsIFBhc3NPd25QdHI8UVdlYlZpZXc+IGluc3BlY3RvclZpZXcpOworCisgICAgdmly
dHVhbCB2b2lkIGZyb250ZW5kTG9hZGVkKCk7CiAKICAgICB2aXJ0dWFsIFN0cmluZyBsb2NhbGl6
ZWRTdHJpbmdzVVJMKCk7CiAKICAgICB2aXJ0dWFsIFN0cmluZyBoaWRkZW5QYW5lbHMoKTsKIAot
ICAgIHZpcnR1YWwgdm9pZCBzaG93V2luZG93KCk7CisgICAgdmlydHVhbCB2b2lkIGJyaW5nVG9G
cm9udCgpOwogICAgIHZpcnR1YWwgdm9pZCBjbG9zZVdpbmRvdygpOwogCiAgICAgdmlydHVhbCB2
b2lkIGF0dGFjaFdpbmRvdygpOwpAQCAtNjIsMjAgKzgwLDE0IEBAIHB1YmxpYzoKIAogICAgIHZp
cnR1YWwgdm9pZCBzZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpOwogCi0g
ICAgdmlydHVhbCB2b2lkIGhpZ2hsaWdodChOb2RlKik7Ci0gICAgdmlydHVhbCB2b2lkIGhpZGVI
aWdobGlnaHQoKTsKICAgICB2aXJ0dWFsIHZvaWQgaW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBT
dHJpbmcmIG5ld1VSTCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgcG9wdWxhdGVTZXR0aW5nKGNvbnN0
IFN0cmluZyYga2V5LCBTdHJpbmcqIHZhbHVlKTsKLSAgICB2aXJ0dWFsIHZvaWQgc3RvcmVTZXR0
aW5nKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKLQotICAgIHZpcnR1
YWwgdm9pZCBpbnNwZWN0b3JXaW5kb3dPYmplY3RDbGVhcmVkKCk7Ci0KIHByaXZhdGU6CiAgICAg
dm9pZCB1cGRhdGVXaW5kb3dUaXRsZSgpOwogICAgIFFXZWJQYWdlKiBtX2luc3BlY3RlZFdlYlBh
Z2U7CiAgICAgT3duUHRyPFFXZWJWaWV3PiBtX2luc3BlY3RvclZpZXc7CiAgICAgUVN0cmluZyBt
X2luc3BlY3RlZFVSTDsKKyAgICBib29sIG1fZGVzdHJveWluZ0luc3BlY3RvclZpZXc7CiB9Owog
fQogCmRpZmYgLS1naXQgYS9XZWJLaXQvd2luL0NoYW5nZUxvZyBiL1dlYktpdC93aW4vQ2hhbmdl
TG9nCmluZGV4IGUwOWVhZDMuLmU1Nzg4NGYgMTAwNjQ0Ci0tLSBhL1dlYktpdC93aW4vQ2hhbmdl
TG9nCisrKyBiL1dlYktpdC93aW4vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDcgQEAKKzIwMTAtMDMt
MTEgIFl1cnkgU2VtaWtoYXRza3kgPHl1cnlzQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbnRyb2R1Y2UgSW5zcGVjdG9yRnJv
bnRlbmRDbGllbnQgdGhhdCBwcm92aWRlcyBJbnNwZWN0b3JGcm9udGVuZCB3aXRoIGFuIGludGVy
ZmFjZSB0byB0aGUgZW1iZWRkZXIuIEluc3BlY3RvckNsaWVudCBub3cgc2VydmVzIGFzIGEgZGVs
ZWdhdGUgZm9yIEluc3BlY3RvckNvbnRyb2xsZXIgYW5kIGRvZXMgbm90IGNvbnRhaW4gbWV0aG9k
cyBmb3IgbWFuYWdpbmcgaW5zcGVjdG9yIGZyb250ZW5kIHdpbmRvdy4gVGhhdCBhbGxvd3MgdG8g
Y3JlYXRlIHJlbW90ZSBJbnNwZWN0b3JGcm9udGVuZEhvc3QuCisKKyAgICAgICAgSW50cm9kdWNl
IEluc3BlY3RvckZyb250ZW5kQ2xpZW50IHRoYXQgd291bGQgcHJvdmlkZSBJbnNwZWN0b3JGcm9u
dGVuZCB3aXRoIGFuIGludGVyZmFjZSB0byB0aGUgZW1iZWRkZXIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM1MDM2CisKKyAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuY3BwOgorICAgICAgICAoV2ViSW5zcGVjdG9yQ2xp
ZW50OjpXZWJJbnNwZWN0b3JDbGllbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yQ2xpZW50Ojp+
V2ViSW5zcGVjdG9yQ2xpZW50KToKKyAgICAgICAgKFdlYkluc3BlY3RvckNsaWVudDo6b3Blbklu
c3BlY3RvckZyb250ZW5kKToKKyAgICAgICAgKFdlYkluc3BlY3RvckNsaWVudDo6aGlnaGxpZ2h0
KToKKyAgICAgICAgKFdlYkluc3BlY3RvckNsaWVudDo6aGlkZUhpZ2hsaWdodCk6CisgICAgICAg
IChXZWJJbnNwZWN0b3JDbGllbnQ6OnVwZGF0ZUhpZ2hsaWdodCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3JGcm9udGVuZENsaWVudDo6V2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6On5XZWJJbnNwZWN0b3JGcm9udGVuZENsaWVu
dCk6CisgICAgICAgIChXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6ZnJvbnRlbmRMb2FkZWQp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmxvY2FsaXplZFN0cmluZ3NV
UkwpOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmhpZGRlblBhbmVscyk6
CisgICAgICAgIChXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6YnJpbmdUb0Zyb250KToKKyAg
ICAgICAgKFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpjbG9zZVdpbmRvdyk6CisgICAgICAg
IChXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6YXR0YWNoV2luZG93KToKKyAgICAgICAgKFdl
Ykluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpkZXRhY2hXaW5kb3cpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yRnJvbnRlbmRDbGllbnQ6OnNldEF0dGFjaGVkV2luZG93SGVpZ2h0KToKKyAgICAgICAg
KFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjppbnNwZWN0ZWRVUkxDaGFuZ2VkKToKKyAgICAg
ICAgKFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpjbG9zZVdpbmRvd1dpdGhvdXROb3RpZmlj
YXRpb25zKToKKyAgICAgICAgKFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpzaG93V2luZG93
V2l0aG91dE5vdGlmaWNhdGlvbnMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGll
bnQ6OmRlc3Ryb3lJbnNwZWN0b3JWaWV3KToKKyAgICAgICAgKFdlYkluc3BlY3RvckZyb250ZW5k
Q2xpZW50Ojp1cGRhdGVXaW5kb3dUaXRsZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3JGcm9udGVu
ZENsaWVudDo6b25HZXRNaW5NYXhJbmZvKToKKyAgICAgICAgKFdlYkluc3BlY3RvckZyb250ZW5k
Q2xpZW50OjpvblNpemUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6Om9u
Q2xvc2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6Om9uU2V0Rm9jdXMp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6Om9uV2ViVmlld1dpbmRvd1Bv
c0NoYW5naW5nKToKKyAgICAgICAgKFdlYkluc3BlY3RvclduZFByb2MpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OndpbmRvd1JlY2VpdmVkTWVzc2FnZSk6CisgICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50Lmg6CisgICAgICAgIChXZWJJbnNw
ZWN0b3JDbGllbnQ6OmZyb250ZW5kQ2xvc2luZyk6CisgICAgICAgICogV2ViSW5zcGVjdG9yLmNw
cDoKKyAgICAgICAgKFdlYkluc3BlY3Rvcjo6YXR0YWNoKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
cjo6ZGV0YWNoKToKKwogMjAxMC0wMy0xMSAgQWFyb24gQm9vZG1hbiAgPGFhQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBLaWxsIFdlYkRvY3VtZW50OjphcHBsaWNhdGlvbklEKCkgKHBhcnQgMSku
CmRpZmYgLS1naXQgYS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVu
dC5jcHAgYi9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5jcHAK
aW5kZXggNmExMGMwZC4uNWFkYmZkZiAxMDA2NDQKLS0tIGEvV2ViS2l0L3dpbi9XZWJDb3JlU3Vw
cG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuY3BwCisrKyBiL1dlYktpdC93aW4vV2ViQ29yZVN1cHBv
cnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcApAQCAtNjksMjUgKzY5LDEzIEBAIHN0YXRpYyBDRkJ1
bmRsZVJlZiBnZXRXZWJLaXRCdW5kbGUoKQogCiBXZWJJbnNwZWN0b3JDbGllbnQ6OldlYkluc3Bl
Y3RvckNsaWVudChXZWJWaWV3KiB3ZWJWaWV3KQogICAgIDogbV9pbnNwZWN0ZWRXZWJWaWV3KHdl
YlZpZXcpCi0gICAgLCBtX2h3bmQoMCkKLSAgICAsIG1fd2ViVmlld0h3bmQoMCkKLSAgICAsIG1f
c2hvdWxkQXR0YWNoV2hlblNob3duKGZhbHNlKQotICAgICwgbV9hdHRhY2hlZChmYWxzZSkKIHsK
ICAgICBBU1NFUlQobV9pbnNwZWN0ZWRXZWJWaWV3KTsKLQogICAgIG1faW5zcGVjdGVkV2ViVmll
dy0+dmlld1dpbmRvdygoT0xFX0hBTkRMRSopJm1faW5zcGVjdGVkV2ViVmlld0h3bmQpOwotCi0g
ICAgLy8gRklYTUU6IEltcGxlbWVudCB3aW5kb3cgc2l6ZS9wb3NpdGlvbiBzYXZlL3Jlc3RvcmUK
LSNpZiAwCi0gICAgW3NlbGYgc2V0V2luZG93RnJhbWVBdXRvc2F2ZU5hbWU6QCJXZWIgSW5zcGVj
dG9yIl07Ci0jZW5kaWYKIH0KIAogV2ViSW5zcGVjdG9yQ2xpZW50Ojp+V2ViSW5zcGVjdG9yQ2xp
ZW50KCkKIHsKLSAgICBpZiAobV9od25kKQotICAgICAgICA6OkRlc3Ryb3lXaW5kb3cobV9od25k
KTsKIH0KIAogdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6Omluc3BlY3RvckRlc3Ryb3llZCgpCkBA
IC05NSwzNSArODMsMzAgQEAgdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6Omluc3BlY3RvckRlc3Ry
b3llZCgpCiAgICAgZGVsZXRlIHRoaXM7CiB9CiAKLVBhZ2UqIFdlYkluc3BlY3RvckNsaWVudDo6
Y3JlYXRlUGFnZSgpCit2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6b3Blbkluc3BlY3RvckZyb250
ZW5kKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIpCiB7CiAgICAgcmVn
aXN0ZXJXaW5kb3dDbGFzcygpOwogCi0gICAgaWYgKG1faHduZCkKLSAgICAgICAgOjpEZXN0cm95
V2luZG93KG1faHduZCk7Ci0KLSAgICBtX2h3bmQgPSA6OkNyZWF0ZVdpbmRvd0V4KDAsIGtXZWJJ
bnNwZWN0b3JXaW5kb3dDbGFzc05hbWUsIDAsIFdTX09WRVJMQVBQRURXSU5ET1csCisgICAgSFdO
RCBmcm9udGVuZEh3bmQgPSA6OkNyZWF0ZVdpbmRvd0V4KDAsIGtXZWJJbnNwZWN0b3JXaW5kb3dD
bGFzc05hbWUsIDAsIFdTX09WRVJMQVBQRURXSU5ET1csCiAgICAgICAgIGRlZmF1bHRXaW5kb3dS
ZWN0KCkueCgpLCBkZWZhdWx0V2luZG93UmVjdCgpLnkoKSwgZGVmYXVsdFdpbmRvd1JlY3QoKS53
aWR0aCgpLCBkZWZhdWx0V2luZG93UmVjdCgpLmhlaWdodCgpLAogICAgICAgICAwLCAwLCAwLCAw
KTsKIAotICAgIGlmICghbV9od25kKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIDo6U2V0UHJv
cChtX2h3bmQsIGtXZWJJbnNwZWN0b3JQb2ludGVyUHJvcCwgcmVpbnRlcnByZXRfY2FzdDxIQU5E
TEU+KHRoaXMpKTsKKyAgICBpZiAoIWZyb250ZW5kSHduZCkKKyAgICAgICAgcmV0dXJuOwogCi0g
ICAgbV93ZWJWaWV3LmFkb3B0UmVmKFdlYlZpZXc6OmNyZWF0ZUluc3RhbmNlKCkpOworICAgIENP
TVB0cjxXZWJWaWV3PiBmcm9udGVuZFdlYlZpZXcoQWRvcHRDT00sIFdlYlZpZXc6OmNyZWF0ZUlu
c3RhbmNlKCkpOwogCi0gICAgaWYgKEZBSUxFRChtX3dlYlZpZXctPnNldEhvc3RXaW5kb3coKE9M
RV9IQU5ETEUpKFVMT05HNjQpbV9od25kKSkpCi0gICAgICAgIHJldHVybiAwOworICAgIGlmIChG
QUlMRUQoZnJvbnRlbmRXZWJWaWV3LT5zZXRIb3N0V2luZG93KChPTEVfSEFORExFKShVTE9ORzY0
KWZyb250ZW5kSHduZCkpKQorICAgICAgICByZXR1cm47CiAKICAgICBSRUNUIHJlY3Q7Ci0gICAg
R2V0Q2xpZW50UmVjdChtX2h3bmQsICZyZWN0KTsKLSAgICBpZiAoRkFJTEVEKG1fd2ViVmlldy0+
aW5pdFdpdGhGcmFtZShyZWN0LCAwLCAwKSkpCi0gICAgICAgIHJldHVybiAwOworICAgIEdldENs
aWVudFJlY3QoZnJvbnRlbmRId25kLCAmcmVjdCk7CisgICAgaWYgKEZBSUxFRChmcm9udGVuZFdl
YlZpZXctPmluaXRXaXRoRnJhbWUocmVjdCwgMCwgMCkpKQorICAgICAgICByZXR1cm47CiAKICAg
ICBDT01QdHI8V2ViSW5zcGVjdG9yRGVsZWdhdGU+IGRlbGVnYXRlKEFkb3B0Q09NLCBXZWJJbnNw
ZWN0b3JEZWxlZ2F0ZTo6Y3JlYXRlSW5zdGFuY2UoKSk7Ci0gICAgaWYgKEZBSUxFRChtX3dlYlZp
ZXctPnNldFVJRGVsZWdhdGUoZGVsZWdhdGUuZ2V0KCkpKSkKLSAgICAgICAgcmV0dXJuIDA7Cisg
ICAgaWYgKEZBSUxFRChmcm9udGVuZFdlYlZpZXctPnNldFVJRGVsZWdhdGUoZGVsZWdhdGUuZ2V0
KCkpKSkKKyAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gS2VlcCBwcmVmZXJlbmNlcyBzZXBhcmF0
ZSBmcm9tIHRoZSByZXN0IG9mIHRoZSBjbGllbnQsIG1ha2luZyBzdXJlIHdlIGFyZSB1c2luZyBl
eHBlY3RlZCBwcmVmZXJlbmNlIHZhbHVlcy4KICAgICAvLyBPbmUgcmVhc29uIHRoaXMgaXMgZ29v
ZCBpcyB0aGF0IGl0IGtlZXBzIHRoZSBpbnNwZWN0b3Igb3V0IG9mIGhpc3RvcnkgdmlhICJwcml2
YXRlIGJyb3dzaW5nIi4KQEAgLTEzNCw2NiArMTE3LDEyNiBAQCBQYWdlKiBXZWJJbnNwZWN0b3JD
bGllbnQ6OmNyZWF0ZVBhZ2UoKQogICAgIENPTVB0cjxXZWJQcmVmZXJlbmNlcz4gdGVtcFByZWZl
cmVuY2VzKEFkb3B0Q09NLCBXZWJQcmVmZXJlbmNlczo6Y3JlYXRlSW5zdGFuY2UoKSk7CiAgICAg
Q09NUHRyPElXZWJQcmVmZXJlbmNlcz4gaVByZWZlcmVuY2VzOwogICAgIGlmIChGQUlMRUQodGVt
cFByZWZlcmVuY2VzLT5pbml0V2l0aElkZW50aWZpZXIoQlN0cmluZyhMIldlYkluc3BlY3RvclBy
ZWZlcmVuY2VzIiksICZpUHJlZmVyZW5jZXMpKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
IHJldHVybjsKICAgICBDT01QdHI8V2ViUHJlZmVyZW5jZXM+IHByZWZlcmVuY2VzKFF1ZXJ5LCBp
UHJlZmVyZW5jZXMpOwogICAgIGlmICghcHJlZmVyZW5jZXMpCi0gICAgICAgIHJldHVybiAwOwor
ICAgICAgICByZXR1cm47CiAgICAgaWYgKEZBSUxFRChwcmVmZXJlbmNlcy0+c2V0QXV0b3NhdmVz
KEZBTFNFKSkpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm47CiAgICAgaWYgKEZB
SUxFRChwcmVmZXJlbmNlcy0+c2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChUUlVFKSkpCi0gICAg
ICAgIHJldHVybiAwOworICAgICAgICByZXR1cm47CiAgICAgaWYgKEZBSUxFRChwcmVmZXJlbmNl
cy0+c2V0TG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5KFRSVUUpKSkKLSAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgIHJldHVybjsKICAgICBpZiAoRkFJTEVEKHByZWZlcmVuY2VzLT5zZXRBdXRob3JB
bmRVc2VyU3R5bGVzRW5hYmxlZChUUlVFKSkpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICBy
ZXR1cm47CiAgICAgaWYgKEZBSUxFRChwcmVmZXJlbmNlcy0+c2V0QWxsb3dzQW5pbWF0ZWRJbWFn
ZXMoVFJVRSkpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuOwogICAgIGlmIChG
QUlMRUQocHJlZmVyZW5jZXMtPnNldExvYWRzSW1hZ2VzQXV0b21hdGljYWxseShUUlVFKSkpCi0g
ICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm47CiAgICAgaWYgKEZBSUxFRChwcmVmZXJl
bmNlcy0+c2V0UGx1Z0luc0VuYWJsZWQoRkFMU0UpKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgIHJldHVybjsKICAgICBpZiAoRkFJTEVEKHByZWZlcmVuY2VzLT5zZXRKYXZhRW5hYmxlZChG
QUxTRSkpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuOwogICAgIGlmIChGQUlM
RUQocHJlZmVyZW5jZXMtPnNldFVzZXJTdHlsZVNoZWV0RW5hYmxlZChGQUxTRSkpKQotICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuOwogICAgIGlmIChGQUlMRUQocHJlZmVyZW5jZXMt
PnNldFRhYnNUb0xpbmtzKEZBTFNFKSkpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1
cm47CiAgICAgaWYgKEZBSUxFRChwcmVmZXJlbmNlcy0+c2V0TWluaW11bUZvbnRTaXplKDApKSkK
LSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybjsKICAgICBpZiAoRkFJTEVEKHByZWZl
cmVuY2VzLT5zZXRNaW5pbXVtTG9naWNhbEZvbnRTaXplKDkpKSkKLSAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgIHJldHVybjsKICAgICBpZiAoRkFJTEVEKHByZWZlcmVuY2VzLT5zZXRGaXhlZEZv
bnRGYW1pbHkoQlN0cmluZyhMIkNvdXJpZXIgTmV3IikpKSkKLSAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgIHJldHVybjsKICAgICBpZiAoRkFJTEVEKHByZWZlcmVuY2VzLT5zZXREZWZhdWx0Rml4
ZWRGb250U2l6ZSgxMykpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuOwogCi0g
ICAgaWYgKEZBSUxFRChtX3dlYlZpZXctPnNldFByZWZlcmVuY2VzKHByZWZlcmVuY2VzLmdldCgp
KSkpCi0gICAgICAgIHJldHVybiAwOworICAgIGlmIChGQUlMRUQoZnJvbnRlbmRXZWJWaWV3LT5z
ZXRQcmVmZXJlbmNlcyhwcmVmZXJlbmNlcy5nZXQoKSkpKQorICAgICAgICByZXR1cm47CiAKLSAg
ICBtX3dlYlZpZXctPnNldFByb2hpYml0c01haW5GcmFtZVNjcm9sbGluZyhUUlVFKTsKKyAgICBm
cm9udGVuZFdlYlZpZXctPnNldFByb2hpYml0c01haW5GcmFtZVNjcm9sbGluZyhUUlVFKTsKIAot
ICAgIGlmIChGQUlMRUQobV93ZWJWaWV3LT52aWV3V2luZG93KHJlaW50ZXJwcmV0X2Nhc3Q8T0xF
X0hBTkRMRSo+KCZtX3dlYlZpZXdId25kKSkpKQotICAgICAgICByZXR1cm4gMDsKKyAgICBIV05E
IGZyb250ZW5kV2ViVmlld0h3bmQ7CisgICAgaWYgKEZBSUxFRChmcm9udGVuZFdlYlZpZXctPnZp
ZXdXaW5kb3cocmVpbnRlcnByZXRfY2FzdDxPTEVfSEFORExFKj4oJmZyb250ZW5kV2ViVmlld0h3
bmQpKSkpCisgICAgICAgIHJldHVybjsKIAotICAgIENPTVB0cjxXZWJNdXRhYmxlVVJMUmVxdWVz
dD4gcmVxdWVzdDsKLSAgICByZXF1ZXN0LmFkb3B0UmVmKFdlYk11dGFibGVVUkxSZXF1ZXN0Ojpj
cmVhdGVJbnN0YW5jZSgpKTsKKyAgICBDT01QdHI8V2ViTXV0YWJsZVVSTFJlcXVlc3Q+IHJlcXVl
c3QoQWRvcHRDT00sIFdlYk11dGFibGVVUkxSZXF1ZXN0OjpjcmVhdGVJbnN0YW5jZSgpKTsKIAog
ICAgIFJldGFpblB0cjxDRlVSTFJlZj4gaHRtbFVSTFJlZihBZG9wdENGLCBDRkJ1bmRsZUNvcHlS
ZXNvdXJjZVVSTChnZXRXZWJLaXRCdW5kbGUoKSwgQ0ZTVFIoImluc3BlY3RvciIpLCBDRlNUUigi
aHRtbCIpLCBDRlNUUigiaW5zcGVjdG9yIikpKTsKICAgICBpZiAoIWh0bWxVUkxSZWYpCi0gICAg
ICAgIHJldHVybiAwOworICAgICAgICByZXR1cm47CiAKICAgICBDRlN0cmluZ1JlZiB1cmxTdHJp
bmdSZWYgPSA6OkNGVVJMR2V0U3RyaW5nKGh0bWxVUkxSZWYuZ2V0KCkpOwogICAgIGlmIChGQUlM
RUQocmVxdWVzdC0+aW5pdFdpdGhVUkwoQlN0cmluZyh1cmxTdHJpbmdSZWYpLCBXZWJVUkxSZXF1
ZXN0VXNlUHJvdG9jb2xDYWNoZVBvbGljeSwgNjApKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgIHJldHVybjsKIAotICAgIGlmIChGQUlMRUQobV93ZWJWaWV3LT50b3BMZXZlbEZyYW1lKCkt
PmxvYWRSZXF1ZXN0KHJlcXVlc3QuZ2V0KCkpKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgaWYg
KEZBSUxFRChmcm9udGVuZFdlYlZpZXctPnRvcExldmVsRnJhbWUoKS0+bG9hZFJlcXVlc3QocmVx
dWVzdC5nZXQoKSkpKQorICAgICAgICByZXR1cm47CiAKLSAgICByZXR1cm4gY29yZShtX3dlYlZp
ZXcuZ2V0KCkpOworICAgIFBhZ2UqIHBhZ2UgPSBjb3JlKGZyb250ZW5kV2ViVmlldy5nZXQoKSk7
CisgICAgcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5zZXRJbnNwZWN0b3JGcm9udGVuZENs
aWVudChuZXcgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQobV9pbnNwZWN0ZWRXZWJWaWV3LCBt
X2luc3BlY3RlZFdlYlZpZXdId25kLCBmcm9udGVuZEh3bmQsIGZyb250ZW5kV2ViVmlldywgZnJv
bnRlbmRXZWJWaWV3SHduZCwgdGhpcykpOworICAgIG1fZnJvbnRlbmRId25kID0gZnJvbnRlbmRI
d25kOwogfQogCit2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6aGlnaGxpZ2h0KE5vZGUqKQorewor
ICAgIGJvb2wgY3JlYXRpbmdIaWdobGlnaHQgPSAhbV9oaWdobGlnaHQ7CisKKyAgICBpZiAoY3Jl
YXRpbmdIaWdobGlnaHQpCisgICAgICAgIG1faGlnaGxpZ2h0LnNldChuZXcgV2ViTm9kZUhpZ2hs
aWdodChtX2luc3BlY3RlZFdlYlZpZXcpKTsKIAotU3RyaW5nIFdlYkluc3BlY3RvckNsaWVudDo6
bG9jYWxpemVkU3RyaW5nc1VSTCgpCisgICAgaWYgKG1faGlnaGxpZ2h0LT5pc1Nob3dpbmcoKSkK
KyAgICAgICAgbV9oaWdobGlnaHQtPnVwZGF0ZSgpOworICAgIGVsc2UKKyAgICAgICAgbV9oaWdo
bGlnaHQtPnNldFNob3dzV2hpbGVXZWJWaWV3SXNWaXNpYmxlKHRydWUpOworCisgICAgaWYgKGNy
ZWF0aW5nSGlnaGxpZ2h0ICYmIElzV2luZG93VmlzaWJsZShtX2Zyb250ZW5kSHduZCkpCisgICAg
ICAgIG1faGlnaGxpZ2h0LT5wbGFjZUJlaGluZFdpbmRvdyhtX2Zyb250ZW5kSHduZCk7Cit9CisK
K3ZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpoaWRlSGlnaGxpZ2h0KCkKK3sKKyAgICBpZiAobV9o
aWdobGlnaHQpCisgICAgICAgIG1faGlnaGxpZ2h0LT5zZXRTaG93c1doaWxlV2ViVmlld0lzVmlz
aWJsZShmYWxzZSk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50Ojp1cGRhdGVIaWdobGln
aHQoKQoreworICAgIGlmIChtX2hpZ2hsaWdodCAmJiBtX2hpZ2hsaWdodC0+aXNTaG93aW5nKCkp
CisgICAgICAgIG1faGlnaGxpZ2h0LT51cGRhdGUoKTsKK30KKworV2ViSW5zcGVjdG9yRnJvbnRl
bmRDbGllbnQ6OldlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50KFdlYlZpZXcqIGluc3BlY3RlZFdl
YlZpZXcsIEhXTkQgaW5zcGVjdGVkV2ViVmlld0h3bmQsIEhXTkQgZnJvbnRlbmRId25kLCBjb25z
dCBDT01QdHI8V2ViVmlldz4mIGZyb250ZW5kV2ViVmlldywgSFdORCBmcm9udGVuZFdlYlZpZXdI
d25kLCBXZWJJbnNwZWN0b3JDbGllbnQqIGluc3BlY3RvckNsaWVudCkKKyAgICA6IEluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50TG9jYWwoaW5zcGVjdGVkV2ViVmlldy0+cGFnZSgpLT5pbnNwZWN0b3JD
b250cm9sbGVyKCksICBjb3JlKGZyb250ZW5kV2ViVmlldy5nZXQoKSkpCisgICAgLCBtX2luc3Bl
Y3RlZFdlYlZpZXcoaW5zcGVjdGVkV2ViVmlldykKKyAgICAsIG1faW5zcGVjdGVkV2ViVmlld0h3
bmQoaW5zcGVjdGVkV2ViVmlld0h3bmQpCisgICAgLCBtX2luc3BlY3RvckNsaWVudChpbnNwZWN0
b3JDbGllbnQpCisgICAgLCBtX2Zyb250ZW5kSHduZChmcm9udGVuZEh3bmQpCisgICAgLCBtX2Zy
b250ZW5kV2ViVmlldyhmcm9udGVuZFdlYlZpZXcpCisgICAgLCBtX2Zyb250ZW5kV2ViVmlld0h3
bmQoZnJvbnRlbmRXZWJWaWV3SHduZCkKKyAgICAsIG1fc2hvdWxkQXR0YWNoV2hlblNob3duKGZh
bHNlKQorICAgICwgbV9hdHRhY2hlZChmYWxzZSkKKyAgICAsIG1fZGVzdHJveWluZ0luc3BlY3Rv
clZpZXcoZmFsc2UpCit7CisgICAgOjpTZXRQcm9wKGZyb250ZW5kSHduZCwga1dlYkluc3BlY3Rv
clBvaW50ZXJQcm9wLCByZWludGVycHJldF9jYXN0PEhBTkRMRT4odGhpcykpOworICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQgd2luZG93IHNpemUvcG9zaXRpb24gc2F2ZS9yZXN0b3JlCisjaWYgMAor
ICAgIFtzZWxmIHNldFdpbmRvd0ZyYW1lQXV0b3NhdmVOYW1lOkAiV2ViIEluc3BlY3RvciJdOwor
I2VuZGlmCit9CisKK1dlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50Ojp+V2ViSW5zcGVjdG9yRnJv
bnRlbmRDbGllbnQoKQoreworICAgIEFTU0VSVChtX2Rlc3Ryb3lpbmdJbnNwZWN0b3JWaWV3KTsK
K30KKwordm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6ZnJvbnRlbmRMb2FkZWQoKQor
eworICAgIEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OmZyb250ZW5kTG9hZGVkKCk7CisK
KyAgICBzZXRBdHRhY2hlZFdpbmRvdyhtX2F0dGFjaGVkKTsKK30KKworU3RyaW5nIFdlYkluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50Ojpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkKIHsKICAgICBSZXRhaW5Q
dHI8Q0ZVUkxSZWY+IHVybChBZG9wdENGLCBDRkJ1bmRsZUNvcHlSZXNvdXJjZVVSTChnZXRXZWJL
aXRCdW5kbGUoKSwgQ0ZTVFIoImxvY2FsaXplZFN0cmluZ3MiKSwgQ0ZTVFIoImpzIiksIDApKTsK
ICAgICBpZiAoIXVybCkKQEAgLTIwMiwzMSArMjQ1LDIzIEBAIFN0cmluZyBXZWJJbnNwZWN0b3JD
bGllbnQ6OmxvY2FsaXplZFN0cmluZ3NVUkwoKQogICAgIHJldHVybiBDRlVSTEdldFN0cmluZyh1
cmwuZ2V0KCkpOwogfQogCi0KLVN0cmluZyBXZWJJbnNwZWN0b3JDbGllbnQ6OmhpZGRlblBhbmVs
cygpCitTdHJpbmcgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmhpZGRlblBhbmVscygpCiB7
CiAgICAgLy8gRklYTUU6IGltcGxlbWVudCB0aGlzCiAgICAgcmV0dXJuIFN0cmluZygpOwogfQog
Ci12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6c2hvd1dpbmRvdygpCit2b2lkIFdlYkluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50OjpicmluZ1RvRnJvbnQoKQogewogICAgIHNob3dXaW5kb3dXaXRob3V0
Tm90aWZpY2F0aW9ucygpOwotICAgIG1faW5zcGVjdGVkV2ViVmlldy0+cGFnZSgpLT5pbnNwZWN0
b3JDb250cm9sbGVyKCktPnNldFdpbmRvd1Zpc2libGUodHJ1ZSwgbV9zaG91bGRBdHRhY2hXaGVu
U2hvd24pOwotfQotCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6Y2xvc2VXaW5kb3coKQotewot
ICAgIGNsb3NlV2luZG93V2l0aG91dE5vdGlmaWNhdGlvbnMoKTsKLSAgICBtX2luc3BlY3RlZFdl
YlZpZXctPnBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5zZXRXaW5kb3dWaXNpYmxlKGZh
bHNlLCBtX3Nob3VsZEF0dGFjaFdoZW5TaG93bik7CiB9CiAKLWJvb2wgV2ViSW5zcGVjdG9yQ2xp
ZW50Ojp3aW5kb3dWaXNpYmxlKCkKK3ZvaWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmNs
b3NlV2luZG93KCkKIHsKLSAgICByZXR1cm4gISE6OklzV2luZG93VmlzaWJsZShtX2h3bmQpOwor
ICAgIGRlc3Ryb3lJbnNwZWN0b3JWaWV3KCk7CiB9CiAKLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50
OjphdHRhY2hXaW5kb3coKQordm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6YXR0YWNo
V2luZG93KCkKIHsKICAgICBpZiAobV9hdHRhY2hlZCkKICAgICAgICAgcmV0dXJuOwpAQCAtMjM3
LDcgKzI3Miw3IEBAIHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjphdHRhY2hXaW5kb3coKQogICAg
IHNob3dXaW5kb3dXaXRob3V0Tm90aWZpY2F0aW9ucygpOwogfQogCi12b2lkIFdlYkluc3BlY3Rv
ckNsaWVudDo6ZGV0YWNoV2luZG93KCkKK3ZvaWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6
OmRldGFjaFdpbmRvdygpCiB7CiAgICAgaWYgKCFtX2F0dGFjaGVkKQogICAgICAgICByZXR1cm47
CkBAIC0yNDgsNyArMjgzLDcgQEAgdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmRldGFjaFdpbmRv
dygpCiAgICAgc2hvd1dpbmRvd1dpdGhvdXROb3RpZmljYXRpb25zKCk7CiB9CiAKLXZvaWQgV2Vi
SW5zcGVjdG9yQ2xpZW50OjpzZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQp
Cit2b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpzZXRBdHRhY2hlZFdpbmRvd0hlaWdo
dCh1bnNpZ25lZCBoZWlnaHQpCiB7CiAgICAgaWYgKCFtX2F0dGFjaGVkKQogICAgICAgICByZXR1
cm47CkBAIC0yNjYsMTAxICszMDEsNzMgQEAgdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OnNldEF0
dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkKICAgICBpbnQgdG90YWxIZWlnaHQg
PSBob3N0V2luZG93UmVjdC5ib3R0b20gLSBob3N0V2luZG93UmVjdC50b3A7CiAgICAgaW50IHdl
YlZpZXdXaWR0aCA9IGluc3BlY3RlZFJlY3QucmlnaHQgLSBpbnNwZWN0ZWRSZWN0LmxlZnQ7CiAK
LSAgICBTZXRXaW5kb3dQb3MobV93ZWJWaWV3SHduZCwgMCwgMCwgdG90YWxIZWlnaHQgLSBoZWln
aHQsIHdlYlZpZXdXaWR0aCwgaGVpZ2h0LCBTV1BfTk9aT1JERVIpOworICAgIFNldFdpbmRvd1Bv
cyhtX2Zyb250ZW5kV2ViVmlld0h3bmQsIDAsIDAsIHRvdGFsSGVpZ2h0IC0gaGVpZ2h0LCB3ZWJW
aWV3V2lkdGgsIGhlaWdodCwgU1dQX05PWk9SREVSKTsKIAogICAgIC8vIFdlIHdhbnQgdG8gc2V0
IHRoZSBpbnNwZWN0ZWQgd2ViIHZpZXcgaGVpZ2h0IHRvIHRoZSB0b3RhbEhlaWdodCwgYmVjYXVz
ZSB0aGUgaGVpZ2h0IGFkanVzdG1lbnQKICAgICAvLyBvZiB0aGUgaW5zcGVjdGVkIHdlYiB2aWV3
IGhhcHBlbnMgaW4gb25XZWJWaWV3V2luZG93UG9zQ2hhbmdpbmcsIG5vdCBoZXJlLgogICAgIFNl
dFdpbmRvd1BvcyhtX2luc3BlY3RlZFdlYlZpZXdId25kLCAwLCAwLCAwLCB3ZWJWaWV3V2lkdGgs
IHRvdGFsSGVpZ2h0LCBTV1BfTk9aT1JERVIpOwogCi0gICAgUmVkcmF3V2luZG93KG1fd2ViVmll
d0h3bmQsIDAsIDAsIFJEV19JTlZBTElEQVRFIHwgUkRXX0FMTENISUxEUkVOIHwgUkRXX1VQREFU
RU5PVyk7IAorICAgIFJlZHJhd1dpbmRvdyhtX2Zyb250ZW5kV2ViVmlld0h3bmQsIDAsIDAsIFJE
V19JTlZBTElEQVRFIHwgUkRXX0FMTENISUxEUkVOIHwgUkRXX1VQREFURU5PVyk7IAogICAgIFJl
ZHJhd1dpbmRvdyhtX2luc3BlY3RlZFdlYlZpZXdId25kLCAwLCAwLCBSRFdfSU5WQUxJREFURSB8
IFJEV19BTExDSElMRFJFTiB8IFJEV19VUERBVEVOT1cpOwogfQogCi12b2lkIFdlYkluc3BlY3Rv
ckNsaWVudDo6aGlnaGxpZ2h0KE5vZGUqKQotewotICAgIGJvb2wgY3JlYXRpbmdIaWdobGlnaHQg
PSAhbV9oaWdobGlnaHQ7Ci0KLSAgICBpZiAoY3JlYXRpbmdIaWdobGlnaHQpCi0gICAgICAgIG1f
aGlnaGxpZ2h0LnNldChuZXcgV2ViTm9kZUhpZ2hsaWdodChtX2luc3BlY3RlZFdlYlZpZXcpKTsK
LQotICAgIGlmIChtX2hpZ2hsaWdodC0+aXNTaG93aW5nKCkpCi0gICAgICAgIG1faGlnaGxpZ2h0
LT51cGRhdGUoKTsKLSAgICBlbHNlCi0gICAgICAgIG1faGlnaGxpZ2h0LT5zZXRTaG93c1doaWxl
V2ViVmlld0lzVmlzaWJsZSh0cnVlKTsKLQotICAgIGlmIChjcmVhdGluZ0hpZ2hsaWdodCAmJiBJ
c1dpbmRvd1Zpc2libGUobV9od25kKSkKLSAgICAgICAgbV9oaWdobGlnaHQtPnBsYWNlQmVoaW5k
V2luZG93KG1faHduZCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpoaWRlSGlnaGxp
Z2h0KCkKLXsKLSAgICBpZiAobV9oaWdobGlnaHQpCi0gICAgICAgIG1faGlnaGxpZ2h0LT5zZXRT
aG93c1doaWxlV2ViVmlld0lzVmlzaWJsZShmYWxzZSk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9y
Q2xpZW50OjppbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYgbmV3VVJMKQordm9pZCBX
ZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6aW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJp
bmcmIG5ld1VSTCkKIHsKICAgICBtX2luc3BlY3RlZFVSTCA9IG5ld1VSTDsKICAgICB1cGRhdGVX
aW5kb3dUaXRsZSgpOwogfQogCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6aW5zcGVjdG9yV2lu
ZG93T2JqZWN0Q2xlYXJlZCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBX
ZWJJbnNwZWN0b3JDbGllbnQ6OmNsb3NlV2luZG93V2l0aG91dE5vdGlmaWNhdGlvbnMoKQordm9p
ZCBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6Y2xvc2VXaW5kb3dXaXRob3V0Tm90aWZpY2F0
aW9ucygpCiB7Ci0gICAgaWYgKCFtX2h3bmQpCisgICAgaWYgKCFtX2Zyb250ZW5kSHduZCkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFtX2F0dGFjaGVkKSB7Ci0gICAgICAgIFNob3dXaW5k
b3cobV9od25kLCBTV19ISURFKTsKKyAgICAgICAgU2hvd1dpbmRvdyhtX2Zyb250ZW5kSHduZCwg
U1dfSElERSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBBU1NFUlQobV93ZWJWaWV3
KTsKKyAgICBBU1NFUlQobV9mcm9udGVuZFdlYlZpZXcpOwogICAgIEFTU0VSVChtX2luc3BlY3Rl
ZFdlYlZpZXdId25kKTsKLSAgICBBU1NFUlQoIUlzV2luZG93VmlzaWJsZShtX2h3bmQpKTsKKyAg
ICBBU1NFUlQoIUlzV2luZG93VmlzaWJsZShtX2Zyb250ZW5kSHduZCkpOwogCiAgICAgLy8gUmVt
b3ZlIHRoZSBJbnNwZWN0b3IncyBXZWJWaWV3IGZyb20gdGhlIGluc3BlY3RlZCBXZWJWaWV3J3Mg
cGFyZW50IHdpbmRvdy4KICAgICBXaW5kb3dNZXNzYWdlQnJvYWRjYXN0ZXI6OnJlbW92ZUxpc3Rl
bmVyKG1faW5zcGVjdGVkV2ViVmlld0h3bmQsIHRoaXMpOwogCiAgICAgbV9hdHRhY2hlZCA9IGZh
bHNlOwogCi0gICAgbV93ZWJWaWV3LT5zZXRIb3N0V2luZG93KHJlaW50ZXJwcmV0X2Nhc3Q8T0xF
X0hBTkRMRT4obV9od25kKSk7CisgICAgbV9mcm9udGVuZFdlYlZpZXctPnNldEhvc3RXaW5kb3co
cmVpbnRlcnByZXRfY2FzdDxPTEVfSEFORExFPihtX2Zyb250ZW5kSHduZCkpOwogCiAgICAgLy8g
TWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaGFzIHRoZSByaWdodCBzaXplL3Bvc2l0aW9uLgogICAgIEhX
TkQgaG9zdFdpbmRvdzsKICAgICBpZiAoU1VDQ0VFREVEKG1faW5zcGVjdGVkV2ViVmlldy0+aG9z
dFdpbmRvdygoT0xFX0hBTkRMRSopJmhvc3RXaW5kb3cpKSkKICAgICAgICAgU2VuZE1lc3NhZ2Uo
aG9zdFdpbmRvdywgV01fU0laRSwgMCwgMCk7CiAKLSAgICBpZiAobV9oaWdobGlnaHQgJiYgbV9o
aWdobGlnaHQtPmlzU2hvd2luZygpKQotICAgICAgICBtX2hpZ2hsaWdodC0+dXBkYXRlKCk7Cisg
ICAgbV9pbnNwZWN0b3JDbGllbnQtPnVwZGF0ZUhpZ2hsaWdodCgpOwogfQogCi12b2lkIFdlYklu
c3BlY3RvckNsaWVudDo6c2hvd1dpbmRvd1dpdGhvdXROb3RpZmljYXRpb25zKCkKK3ZvaWQgV2Vi
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OnNob3dXaW5kb3dXaXRob3V0Tm90aWZpY2F0aW9ucygp
CiB7Ci0gICAgaWYgKCFtX2h3bmQpCisgICAgaWYgKCFtX2Zyb250ZW5kSHduZCkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgQVNTRVJUKG1fd2ViVmlldyk7CisgICAgQVNTRVJUKG1fZnJvbnRlbmRX
ZWJWaWV3KTsKICAgICBBU1NFUlQobV9pbnNwZWN0ZWRXZWJWaWV3SHduZCk7CiAKICAgICAvLyBJ
ZiBubyBwcmVmZXJlbmNlIGlzIHNldCAtIGRlZmF1bHQgdG8gYW4gYXR0YWNoZWQgd2luZG93LiBU
aGlzIGlzIGltcG9ydGFudCBmb3IgaW5zcGVjdG9yIExheW91dFRlc3RzLgogICAgIFN0cmluZyBz
aG91bGRBdHRhY2ggPSBtX2luc3BlY3RlZFdlYlZpZXctPnBhZ2UoKS0+aW5zcGVjdG9yQ29udHJv
bGxlcigpLT5zZXR0aW5nKEluc3BlY3RvckNvbnRyb2xsZXI6Omluc3BlY3RvclN0YXJ0c0F0dGFj
aGVkU2V0dGluZ05hbWUoKSk7CiAgICAgbV9zaG91bGRBdHRhY2hXaGVuU2hvd24gPSBzaG91bGRB
dHRhY2ggIT0gImZhbHNlIjsKICAgICAgICAgCi0gICAgaWYgKG1fc2hvdWxkQXR0YWNoV2hlblNo
b3duICYmICFtX2luc3BlY3RlZFdlYlZpZXctPnBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigp
LT5jYW5BdHRhY2hXaW5kb3coKSkKKyAgICBpZiAobV9zaG91bGRBdHRhY2hXaGVuU2hvd24gJiYg
IWNhbkF0dGFjaFdpbmRvdygpKQogICAgICAgICBtX3Nob3VsZEF0dGFjaFdoZW5TaG93biA9IGZh
bHNlOwogICAgIAogICAgIGlmICghbV9zaG91bGRBdHRhY2hXaGVuU2hvd24pIHsKICAgICAgICAg
Ly8gUHV0IHRoZSBJbnNwZWN0b3IncyBXZWJWaWV3IGluc2lkZSBvdXIgd2luZG93IGFuZCBzaG93
IGl0LgotICAgICAgICBtX3dlYlZpZXctPnNldEhvc3RXaW5kb3cocmVpbnRlcnByZXRfY2FzdDxP
TEVfSEFORExFPihtX2h3bmQpKTsKLSAgICAgICAgU2VuZE1lc3NhZ2UobV9od25kLCBXTV9TSVpF
LCAwLCAwKTsKKyAgICAgICAgbV9mcm9udGVuZFdlYlZpZXctPnNldEhvc3RXaW5kb3cocmVpbnRl
cnByZXRfY2FzdDxPTEVfSEFORExFPihtX2Zyb250ZW5kSHduZCkpOworICAgICAgICBTZW5kTWVz
c2FnZShtX2Zyb250ZW5kSHduZCwgV01fU0laRSwgMCwgMCk7CiAgICAgICAgIHVwZGF0ZVdpbmRv
d1RpdGxlKCk7CiAKLSAgICAgICAgU2V0V2luZG93UG9zKG1faHduZCwgSFdORF9UT1AsIDAsIDAs
IDAsIDAsIFNXUF9TSE9XV0lORE9XIHwgU1dQX05PTU9WRSB8IFNXUF9OT1NJWkUpOworICAgICAg
ICBTZXRXaW5kb3dQb3MobV9mcm9udGVuZEh3bmQsIEhXTkRfVE9QLCAwLCAwLCAwLCAwLCBTV1Bf
U0hPV1dJTkRPVyB8IFNXUF9OT01PVkUgfCBTV1BfTk9TSVpFKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIApAQCAtMzcxLDIwICszNzgsMzIgQEAgdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OnNo
b3dXaW5kb3dXaXRob3V0Tm90aWZpY2F0aW9ucygpCiAgICAgaWYgKEZBSUxFRChtX2luc3BlY3Rl
ZFdlYlZpZXctPmhvc3RXaW5kb3cocmVpbnRlcnByZXRfY2FzdDxPTEVfSEFORExFKj4oJmhvc3RX
aW5kb3cpKSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fd2ViVmlldy0+c2V0SG9zdFdpbmRv
dyhyZWludGVycHJldF9jYXN0PE9MRV9IQU5ETEU+KGhvc3RXaW5kb3cpKTsKKyAgICBtX2Zyb250
ZW5kV2ViVmlldy0+c2V0SG9zdFdpbmRvdyhyZWludGVycHJldF9jYXN0PE9MRV9IQU5ETEU+KGhv
c3RXaW5kb3cpKTsKIAogICAgIC8vIFRoZW4gaGlkZSBvdXIgb3duIHdpbmRvdy4KLSAgICBTaG93
V2luZG93KG1faHduZCwgU1dfSElERSk7CisgICAgU2hvd1dpbmRvdyhtX2Zyb250ZW5kSHduZCwg
U1dfSElERSk7CiAKICAgICBtX2F0dGFjaGVkID0gdHJ1ZTsKIAogICAgIC8vIE1ha2Ugc3VyZSBl
dmVyeXRoaW5nIGhhcyB0aGUgcmlnaHQgc2l6ZS9wb3NpdGlvbi4KICAgICBTZW5kTWVzc2FnZSho
b3N0V2luZG93LCBXTV9TSVpFLCAwLCAwKTsKLSAgICBpZiAobV9oaWdobGlnaHQgJiYgbV9oaWdo
bGlnaHQtPmlzU2hvd2luZygpKQotICAgICAgICBtX2hpZ2hsaWdodC0+dXBkYXRlKCk7CisgICAg
bV9pbnNwZWN0b3JDbGllbnQtPnVwZGF0ZUhpZ2hsaWdodCgpOworfQorCit2b2lkIFdlYkluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50OjpkZXN0cm95SW5zcGVjdG9yVmlldygpCit7CisgICAgaWYgKG1f
ZGVzdHJveWluZ0luc3BlY3RvclZpZXcpCisgICAgICAgIHJldHVybjsKKyAgICBtX2Rlc3Ryb3lp
bmdJbnNwZWN0b3JWaWV3ID0gdHJ1ZTsKKworICAgIG1faW5zcGVjdGVkV2ViVmlldy0+cGFnZSgp
LT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmNsb3NlKCk7CisKKyAgICBjbG9zZVdpbmRvd1dpdGhv
dXROb3RpZmljYXRpb25zKCk7CisgICAgbV9pbnNwZWN0b3JDbGllbnQtPmZyb250ZW5kQ2xvc2lu
ZygpOworICAgIDo6RGVzdHJveVdpbmRvdyhtX2Zyb250ZW5kSHduZCk7CiB9CiAKLXZvaWQgV2Vi
SW5zcGVjdG9yQ2xpZW50Ojp1cGRhdGVXaW5kb3dUaXRsZSgpCit2b2lkIFdlYkluc3BlY3RvckZy
b250ZW5kQ2xpZW50Ojp1cGRhdGVXaW5kb3dUaXRsZSgpCiB7CiAgICAgLy8gRklYTUU6IFRoZSBz
ZXJpZXMgb2YgYXBwZW5kcyBzaG91bGQgYmUgcmVwbGFjZWQgd2l0aCBhIGNhbGwgdG8gU3RyaW5n
Ojpmb3JtYXQoKQogICAgIC8vIHdoZW4gaXQgY2FuIGJlIGZpZ3VyZWQgb3V0IGhvdyB0byBnZXQg
dGhlIHVuaWNvZGUgZW0tZGFzaCB0byBzaG93IHVwLgpAQCAtMzkyLDEwICs0MTEsMTAgQEAgdm9p
ZCBXZWJJbnNwZWN0b3JDbGllbnQ6OnVwZGF0ZVdpbmRvd1RpdGxlKCkKICAgICB0aXRsZS5hcHBl
bmQoKFVDaGFyKTB4MjAxNCk7IC8vIGVtLWRhc2gKICAgICB0aXRsZS5hcHBlbmQoJyAnKTsKICAg
ICB0aXRsZS5hcHBlbmQobV9pbnNwZWN0ZWRVUkwpOwotICAgIDo6U2V0V2luZG93VGV4dChtX2h3
bmQsIHRpdGxlLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkpOworICAgIDo6U2V0V2lu
ZG93VGV4dChtX2Zyb250ZW5kSHduZCwgdGl0bGUuY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRp
b24oKSk7CiB9CiAKLUxSRVNVTFQgV2ViSW5zcGVjdG9yQ2xpZW50OjpvbkdldE1pbk1heEluZm8o
V1BBUkFNLCBMUEFSQU0gbFBhcmFtKQorTFJFU1VMVCBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVu
dDo6b25HZXRNaW5NYXhJbmZvKFdQQVJBTSwgTFBBUkFNIGxQYXJhbSkKIHsKICAgICBNSU5NQVhJ
TkZPKiBpbmZvID0gcmVpbnRlcnByZXRfY2FzdDxNSU5NQVhJTkZPKj4obFBhcmFtKTsKICAgICBQ
T0lOVCBzaXplID0gezQwMCwgNDAwfTsKQEAgLTQwNCwzMyArNDIzLDMxIEBAIExSRVNVTFQgV2Vi
SW5zcGVjdG9yQ2xpZW50OjpvbkdldE1pbk1heEluZm8oV1BBUkFNLCBMUEFSQU0gbFBhcmFtKQog
ICAgIHJldHVybiAwOwogfQogCi1MUkVTVUxUIFdlYkluc3BlY3RvckNsaWVudDo6b25TaXplKFdQ
QVJBTSwgTFBBUkFNKQorTFJFU1VMVCBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6b25TaXpl
KFdQQVJBTSwgTFBBUkFNKQogewogICAgIFJFQ1QgcmVjdDsKLSAgICA6OkdldENsaWVudFJlY3Qo
bV9od25kLCAmcmVjdCk7CisgICAgOjpHZXRDbGllbnRSZWN0KG1fZnJvbnRlbmRId25kLCAmcmVj
dCk7CiAKLSAgICA6OlNldFdpbmRvd1BvcyhtX3dlYlZpZXdId25kLCAwLCByZWN0LmxlZnQsIHJl
Y3QudG9wLCByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0LCByZWN0LmJvdHRvbSAtIHJlY3QudG9wLCBT
V1BfTk9aT1JERVIpOworICAgIDo6U2V0V2luZG93UG9zKG1fZnJvbnRlbmRXZWJWaWV3SHduZCwg
MCwgcmVjdC5sZWZ0LCByZWN0LnRvcCwgcmVjdC5yaWdodCAtIHJlY3QubGVmdCwgcmVjdC5ib3R0
b20gLSByZWN0LnRvcCwgU1dQX05PWk9SREVSKTsKIAogICAgIHJldHVybiAwOwogfQogCi1MUkVT
VUxUIFdlYkluc3BlY3RvckNsaWVudDo6b25DbG9zZShXUEFSQU0sIExQQVJBTSkKK0xSRVNVTFQg
V2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6Om9uQ2xvc2UoV1BBUkFNLCBMUEFSQU0pCiB7Ci0g
ICAgOjpTaG93V2luZG93KG1faHduZCwgU1dfSElERSk7Ci0gICAgbV9pbnNwZWN0ZWRXZWJWaWV3
LT5wYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0V2luZG93VmlzaWJsZShmYWxzZSwg
bV9zaG91bGRBdHRhY2hXaGVuU2hvd24pOwotCi0gICAgaGlkZUhpZ2hsaWdodCgpOworICAgIDo6
U2hvd1dpbmRvdyhtX2Zyb250ZW5kSHduZCwgU1dfSElERSk7CisgICAgbV9pbnNwZWN0ZWRXZWJW
aWV3LT5wYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+Y2xvc2UoKTsKIAogICAgIHJldHVy
biAwOwogfQogCi1MUkVTVUxUIFdlYkluc3BlY3RvckNsaWVudDo6b25TZXRGb2N1cygpCitMUkVT
VUxUIFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpvblNldEZvY3VzKCkKIHsKLSAgICBTZXRG
b2N1cyhtX3dlYlZpZXdId25kKTsKKyAgICBTZXRGb2N1cyhtX2Zyb250ZW5kV2ViVmlld0h3bmQp
OwogICAgIHJldHVybiAwOwogfQogCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6b25XZWJWaWV3
V2luZG93UG9zQ2hhbmdpbmcoV1BBUkFNLCBMUEFSQU0gbFBhcmFtKQordm9pZCBXZWJJbnNwZWN0
b3JGcm9udGVuZENsaWVudDo6b25XZWJWaWV3V2luZG93UG9zQ2hhbmdpbmcoV1BBUkFNLCBMUEFS
QU0gbFBhcmFtKQogewogICAgIEFTU0VSVChtX2F0dGFjaGVkKTsKIApAQCAtNDQxLDE3ICs0NTgs
MTcgQEAgdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6Om9uV2ViVmlld1dpbmRvd1Bvc0NoYW5naW5n
KFdQQVJBTSwgTFBBUkFNIGxQYXJhbSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgUkVDVCBpbnNw
ZWN0b3JSZWN0OwotICAgIEdldENsaWVudFJlY3QobV93ZWJWaWV3SHduZCwgJmluc3BlY3RvclJl
Y3QpOworICAgIEdldENsaWVudFJlY3QobV9mcm9udGVuZFdlYlZpZXdId25kLCAmaW5zcGVjdG9y
UmVjdCk7CiAgICAgdW5zaWduZWQgaW5zcGVjdG9ySGVpZ2h0ID0gaW5zcGVjdG9yUmVjdC5ib3R0
b20gLSBpbnNwZWN0b3JSZWN0LnRvcDsKIAogICAgIHdpbmRvd1Bvcy0+Y3kgLT0gaW5zcGVjdG9y
SGVpZ2h0OwogCi0gICAgU2V0V2luZG93UG9zKG1fd2ViVmlld0h3bmQsIDAsIHdpbmRvd1Bvcy0+
eCwgd2luZG93UG9zLT55ICsgd2luZG93UG9zLT5jeSwgd2luZG93UG9zLT5jeCwgaW5zcGVjdG9y
SGVpZ2h0LCBTV1BfTk9aT1JERVIpOworICAgIFNldFdpbmRvd1BvcyhtX2Zyb250ZW5kV2ViVmll
d0h3bmQsIDAsIHdpbmRvd1Bvcy0+eCwgd2luZG93UG9zLT55ICsgd2luZG93UG9zLT5jeSwgd2lu
ZG93UG9zLT5jeCwgaW5zcGVjdG9ySGVpZ2h0LCBTV1BfTk9aT1JERVIpOwogfQogCiBzdGF0aWMg
TFJFU1VMVCBDQUxMQkFDSyBXZWJJbnNwZWN0b3JXbmRQcm9jKEhXTkQgaHduZCwgVUlOVCBtc2cs
IFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCiB7Ci0gICAgV2ViSW5zcGVjdG9yQ2xpZW50
KiBjbGllbnQgPSByZWludGVycHJldF9jYXN0PFdlYkluc3BlY3RvckNsaWVudCo+KDo6R2V0UHJv
cChod25kLCBrV2ViSW5zcGVjdG9yUG9pbnRlclByb3ApKTsKKyAgICBXZWJJbnNwZWN0b3JGcm9u
dGVuZENsaWVudCogY2xpZW50ID0gcmVpbnRlcnByZXRfY2FzdDxXZWJJbnNwZWN0b3JGcm9udGVu
ZENsaWVudCo+KDo6R2V0UHJvcChod25kLCBrV2ViSW5zcGVjdG9yUG9pbnRlclByb3ApKTsKICAg
ICBpZiAoIWNsaWVudCkKICAgICAgICAgcmV0dXJuIDo6RGVmV2luZG93UHJvYyhod25kLCBtc2cs
IHdQYXJhbSwgbFBhcmFtKTsKIApAQCAtNDcxLDcgKzQ4OCw3IEBAIHN0YXRpYyBMUkVTVUxUIENB
TExCQUNLIFdlYkluc3BlY3RvclduZFByb2MoSFdORCBod25kLCBVSU5UIG1zZywgV1BBUkFNIHdQ
YXJhbSwKICAgICByZXR1cm4gOjpEZWZXaW5kb3dQcm9jKGh3bmQsIG1zZywgd1BhcmFtLCBsUGFy
YW0pOwogfQogCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6d2luZG93UmVjZWl2ZWRNZXNzYWdl
KEhXTkQsIFVJTlQgbXNnLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQordm9pZCBXZWJJ
bnNwZWN0b3JGcm9udGVuZENsaWVudDo6d2luZG93UmVjZWl2ZWRNZXNzYWdlKEhXTkQsIFVJTlQg
bXNnLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQogewogICAgIHN3aXRjaCAobXNnKSB7
CiAgICAgICAgIGNhc2UgV01fV0lORE9XUE9TQ0hBTkdJTkc6CmRpZmYgLS1naXQgYS9XZWJLaXQv
d2luL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5oIGIvV2ViS2l0L3dpbi9XZWJD
b3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuaAppbmRleCAzZjY1YjBhLi40NTVlM2ExIDEw
MDY0NAotLS0gYS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5o
CisrKyBiL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmgKQEAg
LTMxLDYgKzMxLDcgQEAKIAogI2luY2x1ZGUgPFdlYkNvcmUvQ09NUHRyLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9JbnNwZWN0b3JDbGllbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckZy
b250ZW5kQ2xpZW50TG9jYWwuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtU3RyaW5nLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9XaW5kb3dNZXNzYWdlTGlzdGVuZXIuaD4KICNpbmNsdWRlIDx3
dGYvT3duUHRyLmg+CkBAIC0zOSw0NCArNDAsNjAgQEAKIGNsYXNzIFdlYk5vZGVIaWdobGlnaHQ7
CiBjbGFzcyBXZWJWaWV3OwogCi1jbGFzcyBXZWJJbnNwZWN0b3JDbGllbnQgOiBwdWJsaWMgV2Vi
Q29yZTo6SW5zcGVjdG9yQ2xpZW50LCBXZWJDb3JlOjpXaW5kb3dNZXNzYWdlTGlzdGVuZXIgewor
Y2xhc3MgV2ViSW5zcGVjdG9yQ2xpZW50IDogcHVibGljIFdlYkNvcmU6Okluc3BlY3RvckNsaWVu
dCB7CiBwdWJsaWM6CiAgICAgV2ViSW5zcGVjdG9yQ2xpZW50KFdlYlZpZXcqKTsKIAogICAgIC8v
IEluc3BlY3RvckNsaWVudAogICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0b3JEZXN0cm95ZWQoKTsK
IAotICAgIHZpcnR1YWwgV2ViQ29yZTo6UGFnZSogY3JlYXRlUGFnZSgpOwotCi0gICAgdmlydHVh
bCBXZWJDb3JlOjpTdHJpbmcgbG9jYWxpemVkU3RyaW5nc1VSTCgpOwotCi0gICAgdmlydHVhbCBX
ZWJDb3JlOjpTdHJpbmcgaGlkZGVuUGFuZWxzKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2hvd1dp
bmRvdygpOwotICAgIHZpcnR1YWwgdm9pZCBjbG9zZVdpbmRvdygpOwotICAgIHZpcnR1YWwgYm9v
bCB3aW5kb3dWaXNpYmxlKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoV2luZG93KCk7Ci0g
ICAgdmlydHVhbCB2b2lkIGRldGFjaFdpbmRvdygpOwotCi0gICAgdmlydHVhbCB2b2lkIHNldEF0
dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCk7CisgICAgdmlydHVhbCB2b2lkIG9w
ZW5JbnNwZWN0b3JGcm9udGVuZChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyKik7CiAKICAg
ICB2aXJ0dWFsIHZvaWQgaGlnaGxpZ2h0KFdlYkNvcmU6Ok5vZGUqKTsKICAgICB2aXJ0dWFsIHZv
aWQgaGlkZUhpZ2hsaWdodCgpOwogCi0gICAgdmlydHVhbCB2b2lkIGluc3BlY3RlZFVSTENoYW5n
ZWQoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBuZXdVUkwpOwotCiAgICAgdmlydHVhbCB2b2lkIHBv
cHVsYXRlU2V0dGluZyhjb25zdCBXZWJDb3JlOjpTdHJpbmcmIGtleSwgV2ViQ29yZTo6U3RyaW5n
KiB2YWx1ZSk7CiAgICAgdmlydHVhbCB2b2lkIHN0b3JlU2V0dGluZyhjb25zdCBXZWJDb3JlOjpT
dHJpbmcmIGtleSwgY29uc3QgV2ViQ29yZTo6U3RyaW5nJiB2YWx1ZSk7CiAKLSAgICB2aXJ0dWFs
IHZvaWQgaW5zcGVjdG9yV2luZG93T2JqZWN0Q2xlYXJlZCgpOworICAgIHZvaWQgdXBkYXRlSGln
aGxpZ2h0KCk7CisgICAgdm9pZCBmcm9udGVuZENsb3NpbmcoKSB7IG1fZnJvbnRlbmRId25kID0g
MDsgfQogCiBwcml2YXRlOgogICAgIH5XZWJJbnNwZWN0b3JDbGllbnQoKTsKIAorICAgIFdlYlZp
ZXcqIG1faW5zcGVjdGVkV2ViVmlldzsKKyAgICBIV05EIG1faW5zcGVjdGVkV2ViVmlld0h3bmQ7
CisgICAgSFdORCBtX2Zyb250ZW5kSHduZDsKKworICAgIE93blB0cjxXZWJOb2RlSGlnaGxpZ2h0
PiBtX2hpZ2hsaWdodDsKK307CisKK2NsYXNzIFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50IDog
cHVibGljIFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwsIFdlYkNvcmU6Oldp
bmRvd01lc3NhZ2VMaXN0ZW5lciB7CitwdWJsaWM6CisgICAgV2ViSW5zcGVjdG9yRnJvbnRlbmRD
bGllbnQoV2ViVmlldyogaW5zcGVjdGVkV2ViVmlldywgSFdORCBpbnNwZWN0ZWRXZWJWaWV3SHdu
ZCwgSFdORCBmcm9udGVuZEh3bmQsIGNvbnN0IENPTVB0cjxXZWJWaWV3PiYgZnJvdG5lbmRXZWJW
aWV3LCBIV05EIGZyb250ZW5kV2ViVmlld0h3bmQsIFdlYkluc3BlY3RvckNsaWVudCogaW5zcGVj
dG9yQ2xpZW50KTsKKworICAgIHZpcnR1YWwgdm9pZCBmcm9udGVuZExvYWRlZCgpOworICAgIAor
ICAgIHZpcnR1YWwgV2ViQ29yZTo6U3RyaW5nIGxvY2FsaXplZFN0cmluZ3NVUkwoKTsKKyAgICB2
aXJ0dWFsIFdlYkNvcmU6OlN0cmluZyBoaWRkZW5QYW5lbHMoKTsKKyAgICAKKyAgICB2aXJ0dWFs
IHZvaWQgYnJpbmdUb0Zyb250KCk7CisgICAgdmlydHVhbCB2b2lkIGNsb3NlV2luZG93KCk7Cisg
ICAgCisgICAgdmlydHVhbCB2b2lkIGF0dGFjaFdpbmRvdygpOworICAgIHZpcnR1YWwgdm9pZCBk
ZXRhY2hXaW5kb3coKTsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QXR0YWNoZWRXaW5kb3dI
ZWlnaHQodW5zaWduZWQgaGVpZ2h0KTsKKyAgICB2aXJ0dWFsIHZvaWQgaW5zcGVjdGVkVVJMQ2hh
bmdlZChjb25zdCBXZWJDb3JlOjpTdHJpbmcmIG5ld1VSTCk7CisKK3ByaXZhdGU6CisgICAgfldl
Ykluc3BlY3RvckZyb250ZW5kQ2xpZW50KCk7CisKICAgICB2b2lkIGNsb3NlV2luZG93V2l0aG91
dE5vdGlmaWNhdGlvbnMoKTsKICAgICB2b2lkIHNob3dXaW5kb3dXaXRob3V0Tm90aWZpY2F0aW9u
cygpOwogCisgICAgdm9pZCBkZXN0cm95SW5zcGVjdG9yVmlldygpOworCiAgICAgdm9pZCB1cGRh
dGVXaW5kb3dUaXRsZSgpOwogCiAgICAgTFJFU1VMVCBvbkdldE1pbk1heEluZm8oV1BBUkFNLCBM
UEFSQU0pOwpAQCAtOTAsMTYgKzEwNywxNiBAQCBwcml2YXRlOgogCiAgICAgV2ViVmlldyogbV9p
bnNwZWN0ZWRXZWJWaWV3OwogICAgIEhXTkQgbV9pbnNwZWN0ZWRXZWJWaWV3SHduZDsKLSAgICBI
V05EIG1faHduZDsKLSAgICBDT01QdHI8V2ViVmlldz4gbV93ZWJWaWV3OwotICAgIEhXTkQgbV93
ZWJWaWV3SHduZDsKKyAgICBIV05EIG1fZnJvbnRlbmRId25kOworICAgIFdlYkluc3BlY3RvckNs
aWVudCogbV9pbnNwZWN0b3JDbGllbnQ7CisgICAgQ09NUHRyPFdlYlZpZXc+IG1fZnJvbnRlbmRX
ZWJWaWV3OworICAgIEhXTkQgbV9mcm9udGVuZFdlYlZpZXdId25kOwogCiAgICAgYm9vbCBtX3No
b3VsZEF0dGFjaFdoZW5TaG93bjsKICAgICBib29sIG1fYXR0YWNoZWQ7CiAKLSAgICBPd25QdHI8
V2ViTm9kZUhpZ2hsaWdodD4gbV9oaWdobGlnaHQ7Ci0KICAgICBXZWJDb3JlOjpTdHJpbmcgbV9p
bnNwZWN0ZWRVUkw7CisgICAgYm9vbCBtX2Rlc3Ryb3lpbmdJbnNwZWN0b3JWaWV3OwogCiAgICAg
c3RhdGljIGZyaWVuZCBMUkVTVUxUIENBTExCQUNLIFdlYkluc3BlY3RvclduZFByb2MoSFdORCwg
VUlOVCwgV1BBUkFNLCBMUEFSQU0pOwogfTsKZGlmZiAtLWdpdCBhL1dlYktpdC93aW4vV2ViSW5z
cGVjdG9yLmNwcCBiL1dlYktpdC93aW4vV2ViSW5zcGVjdG9yLmNwcAppbmRleCBlNGFjMzJiLi4w
MzM3NzExIDEwMDY0NAotLS0gYS9XZWJLaXQvd2luL1dlYkluc3BlY3Rvci5jcHAKKysrIGIvV2Vi
S2l0L3dpbi9XZWJJbnNwZWN0b3IuY3BwCkBAIC0xMzEsMTkgKzEzMSwxMSBAQCBIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIFdlYkluc3BlY3Rvcjo6Y2xvc2UoKQogCiBIUkVTVUxUIFNURE1FVEhP
RENBTExUWVBFIFdlYkluc3BlY3Rvcjo6YXR0YWNoKCkKIHsKLSAgICBpZiAobV93ZWJWaWV3KQot
ICAgICAgICBpZiAoUGFnZSogcGFnZSA9IG1fd2ViVmlldy0+cGFnZSgpKQotICAgICAgICAgICAg
cGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5hdHRhY2hXaW5kb3coKTsKLQogICAgIHJldHVy
biBTX09LOwogfQogCiBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkluc3BlY3Rvcjo6ZGV0
YWNoKCkKIHsKLSAgICBpZiAobV93ZWJWaWV3KQotICAgICAgICBpZiAoUGFnZSogcGFnZSA9IG1f
d2ViVmlldy0+cGFnZSgpKQotICAgICAgICAgICAgcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigp
LT5kZXRhY2hXaW5kb3coKTsKLQogICAgIHJldHVybiBTX09LOwogfQogCmRpZmYgLS1naXQgYS9X
ZWJLaXQvd3gvQ2hhbmdlTG9nIGIvV2ViS2l0L3d4L0NoYW5nZUxvZwppbmRleCBkZjJhODlmLi5l
YjA4ZmY4IDEwMDY0NAotLS0gYS9XZWJLaXQvd3gvQ2hhbmdlTG9nCisrKyBiL1dlYktpdC93eC9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMC0wMy0xMCAgWXVyeSBTZW1pa2hhdHNreSA8
eXVyeXNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEludHJvZHVjZSBJbnNwZWN0b3JGcm9udGVuZENsaWVudCB0aGF0IHByb3Zp
ZGVzIEluc3BlY3RvckZyb250ZW5kIHdpdGggYW4gaW50ZXJmYWNlIHRvIHRoZSBlbWJlZGRlci4g
SW5zcGVjdG9yQ2xpZW50IG5vdyBzZXJ2ZXMgYXMgYSBkZWxlZ2F0ZSBmb3IgSW5zcGVjdG9yQ29u
dHJvbGxlciBhbmQgZG9lcyBub3QgY29udGFpbiBtZXRob2RzIGZvciBtYW5hZ2luZyBpbnNwZWN0
b3IgZnJvbnRlbmQgd2luZG93LiBUaGF0IGFsbG93cyB0byBjcmVhdGUgcmVtb3RlIEluc3BlY3Rv
ckZyb250ZW5kSG9zdC4KKworICAgICAgICBJbnRyb2R1Y2UgSW5zcGVjdG9yRnJvbnRlbmRDbGll
bnQgdGhhdCB3b3VsZCBwcm92aWRlIEluc3BlY3RvckZyb250ZW5kIHdpdGggYW4gaW50ZXJmYWNl
IHRvIHRoZSBlbWJlZGRlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MzUwMzYKKworICAgICAgICAqIFdlYktpdFN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50
V3guY3BwOgorICAgICAgICAqIFdlYktpdFN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50V3guaDoKKwog
MjAxMC0wMy0xMSAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IERhdmlkIEh5YXR0LgpkaWZmIC0tZ2l0IGEvV2ViS2l0L3d4L1dlYktp
dFN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50V3guY3BwIGIvV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQv
SW5zcGVjdG9yQ2xpZW50V3guY3BwCmluZGV4IGZmMjFhZTAuLjQzZmJiMmIgMTAwNjQ0Ci0tLSBh
L1dlYktpdC93eC9XZWJLaXRTdXBwb3J0L0luc3BlY3RvckNsaWVudFd4LmNwcAorKysgYi9XZWJL
aXQvd3gvV2ViS2l0U3VwcG9ydC9JbnNwZWN0b3JDbGllbnRXeC5jcHAKQEAgLTQ3LDQ1ICs0Nyw4
IEBAIHZvaWQgSW5zcGVjdG9yQ2xpZW50V3g6Omluc3BlY3RvckRlc3Ryb3llZCgpCiAgICAgbm90
SW1wbGVtZW50ZWQoKTsKIH0KIAotUGFnZSogSW5zcGVjdG9yQ2xpZW50V3g6OmNyZWF0ZVBhZ2Uo
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLVN0cmluZyBJ
bnNwZWN0b3JDbGllbnRXeDo6bG9jYWxpemVkU3RyaW5nc1VSTCgpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBJbnNwZWN0b3JDbGll
bnRXeDo6aGlkZGVuUGFuZWxzKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVy
biBTdHJpbmcoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDbGllbnRXeDo6c2hvd1dpbmRvdygpCi17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLSAgICAKLXZvaWQgSW5zcGVjdG9yQ2xpZW50V3g6
OmNsb3NlV2luZG93KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEluc3Bl
Y3RvckNsaWVudFd4OjphdHRhY2hXaW5kb3coKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLXZvaWQgSW5zcGVjdG9yQ2xpZW50V3g6OmRldGFjaFdpbmRvdygpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLX0KIAotdm9pZCBJbnNwZWN0b3JDbGllbnRXeDo6c2V0QXR0YWNoZWRXaW5k
b3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KQordm9pZCBJbnNwZWN0b3JDbGllbnRXeDo6b3Blbklu
c3BlY3RvckZyb250ZW5kKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXIqKTsKIHsKICAgICBu
b3RJbXBsZW1lbnRlZCgpOwogfQpAQCAtMTAwLDExICs2Myw2IEBAIHZvaWQgSW5zcGVjdG9yQ2xp
ZW50V3g6OmhpZGVIaWdobGlnaHQoKQogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQg
SW5zcGVjdG9yQ2xpZW50V3g6Omluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJiBuZXdV
UkwpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQogdm9pZCBJbnNwZWN0b3JDbGllbnRX
eDo6cG9wdWxhdGVTZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5LCBTdHJpbmcqIHNldHRpbmcpCiB7
CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKQEAgLTExNSw5ICs3Myw0IEBAIHZvaWQgSW5zcGVjdG9y
Q2xpZW50V3g6OnN0b3JlU2V0dGluZyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBz
ZXR0aW5nKQogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ2xpZW50
V3g6Omluc3BlY3RvcldpbmRvd09iamVjdENsZWFyZWQoKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci19Ci0KIH07CmRpZmYgLS1naXQgYS9XZWJLaXQvd3gvV2ViS2l0U3VwcG9ydC9JbnNwZWN0
b3JDbGllbnRXeC5oIGIvV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50V3gu
aAppbmRleCBmOTA1ODE3Li43Njc1ZGMxIDEwMDY0NAotLS0gYS9XZWJLaXQvd3gvV2ViS2l0U3Vw
cG9ydC9JbnNwZWN0b3JDbGllbnRXeC5oCisrKyBiL1dlYktpdC93eC9XZWJLaXRTdXBwb3J0L0lu
c3BlY3RvckNsaWVudFd4LmgKQEAgLTQxLDI5ICs0MSwxMyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0
dWFsIHZvaWQgaW5zcGVjdG9yRGVzdHJveWVkKCk7CiAKLSAgICB2aXJ0dWFsIFBhZ2UqIGNyZWF0
ZVBhZ2UoKTsKLQotICAgIHZpcnR1YWwgU3RyaW5nIGxvY2FsaXplZFN0cmluZ3NVUkwoKTsKLQot
ICAgIHZpcnR1YWwgU3RyaW5nIGhpZGRlblBhbmVscygpOwotCi0gICAgdmlydHVhbCB2b2lkIHNo
b3dXaW5kb3coKTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xvc2VXaW5kb3coKTsKLQotICAgIHZpcnR1
YWwgdm9pZCBhdHRhY2hXaW5kb3coKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoV2luZG93KCk7
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVp
Z2h0KTsKKyAgICB2aXJ0dWFsIHZvaWQgb3Blbkluc3BlY3RvckZyb250ZW5kKFdlYkNvcmU6Oklu
c3BlY3RvckNvbnRyb2xsZXIqKTsKIAogICAgIHZpcnR1YWwgdm9pZCBoaWdobGlnaHQoTm9kZSop
OwogICAgIHZpcnR1YWwgdm9pZCBoaWRlSGlnaGxpZ2h0KCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQg
aW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIG5ld1VSTCk7Ci0KICAgICB2aXJ0dWFs
IHZvaWQgcG9wdWxhdGVTZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5LCBTdHJpbmcqIHZhbHVlKTsK
ICAgICB2aXJ0dWFsIHZvaWQgc3RvcmVTZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBT
dHJpbmcmIHZhbHVlKTsKLQotICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0b3JXaW5kb3dPYmplY3RD
bGVhcmVkKCk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50777</attachid>
            <date>2010-03-16 02:42:36 -0700</date>
            <delta_ts>2010-03-16 02:47:43 -0700</delta_ts>
            <desc>patch</desc>
            <filename>frontend-client7.patch</filename>
            <type>text/plain</type>
            <size>173596</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YTcyZWM3MS4uNDhlMzNjYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMTEgQEAKKzIwMTAtMDMtMTEgIFl1cnkgU2VtaWto
YXRza3kgPHl1cnlzQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBJbnRyb2R1Y2UgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQgdGhh
dCBwcm92aWRlcyBJbnNwZWN0b3JGcm9udGVuZCB3aXRoIGFuIGludGVyZmFjZSB0byB0aGUgZW1i
ZWRkZXIuIEluc3BlY3RvckNsaWVudCBub3cgc2VydmVzIGFzIGEgZGVsZWdhdGUgZm9yIEluc3Bl
Y3RvckNvbnRyb2xsZXIgYW5kIGRvZXMgbm90IGNvbnRhaW4gbWV0aG9kcyBmb3IgbWFuYWdpbmcg
aW5zcGVjdG9yIGZyb250ZW5kIHdpbmRvdy4gVGhhdCBhbGxvd3MgdG8gY3JlYXRlIHJlbW90ZSBJ
bnNwZWN0b3JGcm9udGVuZEhvc3QuCisKKyAgICAgICAgSW50cm9kdWNlIEluc3BlY3RvckZyb250
ZW5kQ2xpZW50IHRoYXQgd291bGQgcHJvdmlkZSBJbnNwZWN0b3JGcm9udGVuZCB3aXRoIGFuIGlu
dGVyZmFjZSB0byB0aGUgZW1iZWRkZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTM1MDM2CisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiAoT09QUyEpCisK
KyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLkluc3BlY3Rvci5l
eHA6CisgICAgICAgICogV2ViQ29yZS5iYXNlLmV4cDoKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6
CisgICAgICAgICogV2ViQ29yZS5vcmRlcjoKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAg
ICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaW5zcGVj
dG9yL0NvbnNvbGVNZXNzYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnNvbGVNZXNzYWdl
OjphZGRUb0Zyb250ZW5kKToKKyAgICAgICAgKiBpbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuaDoK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ2xpZW50Lmg6CisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
Q29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JDb250cm9sbGVyOjp+SW5zcGVjdG9yQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0ZWRQYWdlRGVzdHJveWVkKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OndpbmRvd1Zpc2libGUpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZnJvbnRlbmRSZWFkeSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjp3aWxsQ2xvc2VGcm9udGVuZCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjphZGRDb25zb2xlTWVzc2FnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRJbnNwZWN0b3JGcm9udGVuZENs
aWVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0ZWRX
aW5kb3dTY3JpcHRPYmplY3RDbGVhcmVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNv
bnRyb2xsZXI6OnNldEZyb250ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRy
b2xsZXI6OnNob3cpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6Y2xv
c2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6cmVsZWFzZURPTUFn
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnBvcHVsYXRlU2Ny
aXB0T2JqZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRD
b21taXRMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmdldFBy
b2ZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZW5hYmxlRGVi
dWdnZXIpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpoYXNJbnNwZWN0b3JGcm9udGVuZENs
aWVudCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kOjpJbnNwZWN0b3JGcm9udGVuZCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZDo6fkluc3BlY3RvckZyb250ZW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kOjphZGRDb25zb2xlTWVzc2FnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZDo6YnJpbmdUb0Zyb250KToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kOjppbnNwZWN0ZWRVUkxDaGFuZ2VkKToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuaDoKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JGcm9udGVuZENsaWVudDo6fkluc3BlY3RvckZyb250ZW5kQ2xpZW50KToKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RnJvbnRlbmRNZW51UHJvdmlkZXI6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpGcm9udGVuZE1lbnVQcm92aWRlcjo6ZGlzY29ubmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGcm9udGVuZE1lbnVQcm92aWRlcjo6RnJvbnRlbmRNZW51UHJvdmlkZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6RnJvbnRlbmRNZW51UHJvdmlkZXI6On5Gcm9udGVuZE1lbnVQcm92aWRl
cik6CisgICAgICAgIChXZWJDb3JlOjpGcm9udGVuZE1lbnVQcm92aWRlcjo6cG9wdWxhdGVDb250
ZXh0TWVudSk6CisgICAgICAgIChXZWJDb3JlOjpGcm9udGVuZE1lbnVQcm92aWRlcjo6Y29udGV4
dE1lbnVJdGVtU2VsZWN0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJvbnRlbmRNZW51UHJvdmlk
ZXI6OmNvbnRleHRNZW51Q2xlYXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9u
dGVuZENsaWVudExvY2FsOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6On5JbnNwZWN0b3JGcm9udGVu
ZENsaWVudExvY2FsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50
TG9jYWw6OndpbmRvd09iamVjdENsZWFyZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RnJvbnRlbmRDbGllbnRMb2NhbDo6ZnJvbnRlbmRMb2FkZWQpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6Y2FuQXR0YWNoV2luZG93KToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OmNoYW5nZUF0dGFjaGVkV2lu
ZG93SGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9j
YWw6Om1vdmVXaW5kb3dCeSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENs
aWVudExvY2FsOjpzaG93Q29udGV4dE1lbnUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RnJvbnRlbmRDbGllbnRMb2NhbDo6c2V0QXR0YWNoZWRXaW5kb3cpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6cmVzdG9yZUF0dGFjaGVkV2luZG93SGVp
Z2h0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OmNv
bnN0cmFpbmVkQXR0YWNoZWRXaW5kb3dIZWlnaHQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmg6IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9J
bnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJv
bnRlbmRIb3N0OjpJbnNwZWN0b3JGcm9udGVuZEhvc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yRnJvbnRlbmRIb3N0Ojp+SW5zcGVjdG9yRnJvbnRlbmRIb3N0KToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckZyb250ZW5kSG9zdDo6bG9hZGVkKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckZyb250ZW5kSG9zdDo6YXR0YWNoKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckZyb250ZW5kSG9zdDo6ZGV0YWNoKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZy
b250ZW5kSG9zdDo6Y2xvc2VXaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJv
bnRlbmRIb3N0OjpicmluZ1RvRnJvbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJv
bnRlbmRIb3N0OjppbnNwZWN0ZWRVUkxDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckZyb250ZW5kSG9zdDo6Y2FuQXR0YWNoV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckZyb250ZW5kSG9zdDo6c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRIb3N0Ojptb3ZlV2luZG93QnkpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRIb3N0OjpzaG93Q29udGV4dE1lbnUpOgorICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckZyb250ZW5kSG9zdDo6Y3JlYXRlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yRnJvbnRlbmRIb3N0LmlkbDoKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0lu
c3BlY3RvckZyb250ZW5kSG9zdFN0dWIuanM6CisgICAgICAgICguV2ViSW5zcGVjdG9yLkluc3Bl
Y3RvckZyb250ZW5kSG9zdFN0dWIucHJvdG90eXBlLmJyaW5nVG9Gcm9udCk6CisgICAgICAgICgu
V2ViSW5zcGVjdG9yLkluc3BlY3RvckZyb250ZW5kSG9zdFN0dWIucHJvdG90eXBlLmluc3BlY3Rl
ZFVSTENoYW5nZWQpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpz
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLmxvYWRlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
Y2xvc2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLmJyaW5nVG9Gcm9udCk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuaW5zcGVjdGVkVVJMQ2hhbmdlZCk6CisgICAgICAgICogbG9hZGVyL0VtcHR5
Q2xpZW50cy5oOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlJbnNwZWN0b3JDbGllbnQ6Om9wZW5J
bnNwZWN0b3JGcm9udGVuZCk6CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpkaXNwYXRjaERpZENsZWFyV2luZG93T2JqZWN0
SW5Xb3JsZCk6CisgICAgICAgICogcGFnZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBh
Z2U6OlBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6flBhZ2UpOgorICAgICAgICAqIHBh
Z2UvUGFnZS5oOgorICAgICAgICAqIHBsYXRmb3JtL0NvbnRleHRNZW51LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRleHRNZW51Ojpwb3B1bGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250
ZXh0TWVudTo6YWRkSW5zcGVjdEVsZW1lbnRJdGVtKToKKworPDw8PDw8PCBIRUFEOldlYkNvcmUv
Q2hhbmdlTG9nCiAyMDEwLTAzLTE2ICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KQEAgLTE4NDUsNiAr
MTk1MywxMTQgQEAKICAgICAgICAgICAgIGtleSBtb2RpZmllcnMgb24gQW5kcm9pZC4KICAgICAg
ICAgKiBwbGF0Zm9ybS9hbmRyb2lkL1BsYXRmb3JtVG91Y2hFdmVudEFuZHJvaWQuY3BwOgogICAg
ICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Ub3VjaEV2ZW50OjpQbGF0Zm9ybVRvdWNoRXZlbnQpOiBk
aXR0by4KKz09PT09PT0KKzIwMTAtMDMtMTEgIFl1cnkgU2VtaWtoYXRza3kgPHl1cnlzQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBJbnRyb2R1Y2UgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQgdGhhdCBwcm92aWRlcyBJbnNwZWN0
b3JGcm9udGVuZCB3aXRoIGFuIGludGVyZmFjZSB0byB0aGUgZW1iZWRkZXIuIEluc3BlY3RvckNs
aWVudCBub3cgc2VydmVzIGFzIGEgZGVsZWdhdGUgZm9yIEluc3BlY3RvckNvbnRyb2xsZXIgYW5k
IGRvZXMgbm90IGNvbnRhaW4gbWV0aG9kcyBmb3IgbWFuYWdpbmcgaW5zcGVjdG9yIGZyb250ZW5k
IHdpbmRvdy4gVGhhdCBhbGxvd3MgdG8gY3JlYXRlIHJlbW90ZSBJbnNwZWN0b3JGcm9udGVuZEhv
c3QuCisKKyAgICAgICAgSW50cm9kdWNlIEluc3BlY3RvckZyb250ZW5kQ2xpZW50IHRoYXQgd291
bGQgcHJvdmlkZSBJbnNwZWN0b3JGcm9udGVuZCB3aXRoIGFuIGludGVyZmFjZSB0byB0aGUgZW1i
ZWRkZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM1
MDM2CisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiAoT09QUyEpCisKKyAgICAgICAgKiBHTlVtYWtl
ZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLkluc3BlY3Rvci5leHA6CisgICAgICAgICogV2Vi
Q29yZS5iYXNlLmV4cDoKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29y
ZS5vcmRlcjoKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnNvbGVNZXNzYWdlOjphZGRUb0Zyb250ZW5kKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuaDoKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yQ2xpZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRy
b2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVj
dG9yQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjp+
SW5zcGVjdG9yQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9s
bGVyOjppbnNwZWN0ZWRQYWdlRGVzdHJveWVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckNvbnRyb2xsZXI6OndpbmRvd1Zpc2libGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
Q29udHJvbGxlcjo6ZnJvbnRlbmRSZWFkeSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JD
b250cm9sbGVyOjp3aWxsQ2xvc2VGcm9udGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JDb250cm9sbGVyOjphZGRDb25zb2xlTWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JDb250cm9sbGVyOjpzZXRJbnNwZWN0b3JGcm9udGVuZENsaWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0ZWRXaW5kb3dTY3JpcHRPYmplY3RD
bGVhcmVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnNldEZyb250
ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnNob3cpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6Y2xvc2UpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6cmVsZWFzZURPTUFnZW50KToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnBvcHVsYXRlU2NyaXB0T2JqZWN0cyk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRDb21taXRMb2FkKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmdldFByb2ZpbGUpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZW5hYmxlRGVidWdnZXIpOgorICAgICAgICAq
IGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JDb250cm9sbGVyOjpoYXNJbnNwZWN0b3JGcm9udGVuZENsaWVudCk6CisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckZyb250ZW5kOjpJbnNwZWN0b3JGcm9udGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JGcm9udGVuZDo6fkluc3BlY3RvckZyb250ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckZyb250ZW5kOjphZGRDb25zb2xlTWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JGcm9udGVuZDo6YnJpbmdUb0Zyb250KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckZyb250ZW5kOjppbnNwZWN0ZWRVUkxDaGFuZ2VkKToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yRnJvbnRlbmQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRl
bmRDbGllbnQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENs
aWVudDo6fkluc3BlY3RvckZyb250ZW5kQ2xpZW50KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
RnJvbnRlbmRNZW51UHJvdmlkZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGcm9udGVu
ZE1lbnVQcm92aWRlcjo6ZGlzY29ubmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGcm9udGVuZE1l
bnVQcm92aWRlcjo6RnJvbnRlbmRNZW51UHJvdmlkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RnJv
bnRlbmRNZW51UHJvdmlkZXI6On5Gcm9udGVuZE1lbnVQcm92aWRlcik6CisgICAgICAgIChXZWJD
b3JlOjpGcm9udGVuZE1lbnVQcm92aWRlcjo6cG9wdWxhdGVDb250ZXh0TWVudSk6CisgICAgICAg
IChXZWJDb3JlOjpGcm9udGVuZE1lbnVQcm92aWRlcjo6Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQp
OgorICAgICAgICAoV2ViQ29yZTo6RnJvbnRlbmRNZW51UHJvdmlkZXI6OmNvbnRleHRNZW51Q2xl
YXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjpJ
bnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50TG9jYWw6On5JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OndpbmRvd09iamVj
dENsZWFyZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2Nh
bDo6ZnJvbnRlbmRMb2FkZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRD
bGllbnRMb2NhbDo6Y2FuQXR0YWNoV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50TG9jYWw6OmNoYW5nZUF0dGFjaGVkV2luZG93SGVpZ2h0KToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6Om1vdmVXaW5kb3dCeSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjpzaG93Q29u
dGV4dE1lbnUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2Nh
bDo6c2V0QXR0YWNoZWRXaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRl
bmRDbGllbnRMb2NhbDo6cmVzdG9yZUF0dGFjaGVkV2luZG93SGVpZ2h0KToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OmNvbnN0cmFpbmVkQXR0YWNoZWRX
aW5kb3dIZWlnaHQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVu
dExvY2FsLmg6IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhv
c3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRIb3N0OjpJbnNwZWN0
b3JGcm9udGVuZEhvc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRIb3N0
Ojp+SW5zcGVjdG9yRnJvbnRlbmRIb3N0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZy
b250ZW5kSG9zdDo6bG9hZGVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5k
SG9zdDo6YXR0YWNoKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kSG9zdDo6
ZGV0YWNoKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kSG9zdDo6Y2xvc2VX
aW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRIb3N0OjpicmluZ1Rv
RnJvbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRIb3N0OjppbnNwZWN0
ZWRVUkxDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kSG9zdDo6
Y2FuQXR0YWNoV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kSG9z
dDo6c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RnJvbnRlbmRIb3N0Ojptb3ZlV2luZG93QnkpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RnJvbnRlbmRIb3N0OjpzaG93Q29udGV4dE1lbnUpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JGcm9udGVuZEhvc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5k
SG9zdDo6Y3JlYXRlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0
LmlkbDoKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckZyb250ZW5kSG9z
dFN0dWIuanM6CisgICAgICAgICguV2ViSW5zcGVjdG9yLkluc3BlY3RvckZyb250ZW5kSG9zdFN0
dWIucHJvdG90eXBlLmJyaW5nVG9Gcm9udCk6CisgICAgICAgICguV2ViSW5zcGVjdG9yLkluc3Bl
Y3RvckZyb250ZW5kSG9zdFN0dWIucHJvdG90eXBlLmluc3BlY3RlZFVSTENoYW5nZWQpOgorICAg
ICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLmxvYWRlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuY2xvc2UpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLmJyaW5nVG9Gcm9udCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuaW5zcGVj
dGVkVVJMQ2hhbmdlZCk6CisgICAgICAgICogbG9hZGVyL0VtcHR5Q2xpZW50cy5oOgorICAgICAg
ICAoV2ViQ29yZTo6RW1wdHlJbnNwZWN0b3JDbGllbnQ6Om9wZW5JbnNwZWN0b3JGcm9udGVuZCk6
CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lTG9hZGVyOjpkaXNwYXRjaERpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZCk6CisgICAgICAg
ICogcGFnZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OlBhZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6UGFnZTo6flBhZ2UpOgorICAgICAgICAqIHBhZ2UvUGFnZS5oOgorICAgICAg
ICAqIHBsYXRmb3JtL0NvbnRleHRNZW51LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRN
ZW51Ojpwb3B1bGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0TWVudTo6YWRkSW5zcGVj
dEVsZW1lbnRJdGVtKToKKz4+Pj4+Pj4gZml4OldlYkNvcmUvQ2hhbmdlTG9nCiAKIDIwMTAtMDMt
MTAgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29nbGUuY29tPgogCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCBkYWU4
NWRjLi43NmE1OWEyIDEwMDY0NAotLS0gYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL1dl
YkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTEyMzksNiArMTIzOSw5IEBAIHdlYmNvcmVfc291cmNl
cyArPSBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oIFwKIAlXZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5jcHAgXAogCVdlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckZyb250ZW5kLmggXAorCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250
ZW5kQ2xpZW50LmggXAorCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50
TG9jYWwuY3BwIFwKKwlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExv
Y2FsLmggXAogCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAgXAog
CVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5oIFwKIAlXZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZS5jcHAgXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJD
b3JlLkluc3BlY3Rvci5leHAgYi9XZWJDb3JlL1dlYkNvcmUuSW5zcGVjdG9yLmV4cAppbmRleCAz
NzliN2EyLi5mNzc0NzM5IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuSW5zcGVjdG9yLmV4
cAorKysgYi9XZWJDb3JlL1dlYkNvcmUuSW5zcGVjdG9yLmV4cApAQCAtMSwxMSArMSwxMCBAQAog
X19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTBzZXRTZXR0aW5nRVJLTlNfNlN0cmlu
Z0VTM18KLV9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjEyYXR0YWNoV2luZG93RXYK
LV9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjEyZGV0YWNoV2luZG93RXYKIF9fWk43
V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjE0ZW5hYmxlRGVidWdnZXJFdgogX19aTjdXZWJD
b3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTRlbmFibGVQcm9maWxlckViYgogX19aTjdXZWJDb3Jl
MTlJbnNwZWN0b3JDb250cm9sbGVyMTVkaXNhYmxlRGVidWdnZXJFYgogX19aTjdXZWJDb3JlMTlJ
bnNwZWN0b3JDb250cm9sbGVyMTVkaXNhYmxlUHJvZmlsZXJFYgotX19aTjdXZWJDb3JlMTlJbnNw
ZWN0b3JDb250cm9sbGVyMTZzZXRXaW5kb3dWaXNpYmxlRWJiCitfX1pON1dlYkNvcmUxOUluc3Bl
Y3RvckNvbnRyb2xsZXIxOGRpc2Nvbm5lY3RGcm9udGVuZEV2CitfX1pON1dlYkNvcmUxOUluc3Bl
Y3RvckNvbnRyb2xsZXIyNnNldEluc3BlY3RvckZyb250ZW5kQ2xpZW50RU4zV1RGMTBQYXNzT3du
UHRySU5TXzIzSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRFRUUKIF9fWk43V2ViQ29yZTE5SW5zcGVj
dG9yQ29udHJvbGxlcjI2c3RvcFVzZXJJbml0aWF0ZWRQcm9maWxpbmdFdgogX19aTjdXZWJDb3Jl
MTlJbnNwZWN0b3JDb250cm9sbGVyMjdzdGFydFVzZXJJbml0aWF0ZWRQcm9maWxpbmdFUE5TXzVU
aW1lcklTMF9FRQogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyNHNob3dFdgpAQCAt
MTgsMyArMTcsMTMgQEAgX19aTks3V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjdlbmFibGVk
RXYKIF9fWk5LN1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXI3c2V0dGluZ0VSS05TXzZTdHJp
bmdFCiBfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIyMXN0YXJ0VGltZWxpbmVQcm9m
aWxlckV2CiBfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIyMHN0b3BUaW1lbGluZVBy
b2ZpbGVyRXYKK19fWk43V2ViQ29yZTI4SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbEMyRVBO
U18xOUluc3BlY3RvckNvbnRyb2xsZXJFUE5TXzRQYWdlRQorX19aTjdXZWJDb3JlMjhJbnNwZWN0
b3JGcm9udGVuZENsaWVudExvY2FsRDJFdgorX19aTjdXZWJDb3JlMjhJbnNwZWN0b3JGcm9udGVu
ZENsaWVudExvY2FsMTl3aW5kb3dPYmplY3RDbGVhcmVkRXYKK19fWk43V2ViQ29yZTI4SW5zcGVj
dG9yRnJvbnRlbmRDbGllbnRMb2NhbDE0ZnJvbnRlbmRMb2FkZWRFdgorX19aTjdXZWJDb3JlMjhJ
bnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsMjdyZXN0b3JlQXR0YWNoZWRXaW5kb3dIZWlnaHRF
dgorX19aTjdXZWJDb3JlMjhJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsMTJtb3ZlV2luZG93
QnlFZmYKK19fWk43V2ViQ29yZTI4SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDE1Y2FuQXR0
YWNoV2luZG93RXYKK19fWk43V2ViQ29yZTI4SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDE1
c2hvd0NvbnRleHRNZW51RVBOU181RXZlbnRFUktOM1dURjZWZWN0b3JJUE5TXzE1Q29udGV4dE1l
bnVJdGVtRUxtMEVFRQorX19aTjdXZWJDb3JlMjhJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2Fs
MTdzZXRBdHRhY2hlZFdpbmRvd0ViCitfX1pON1dlYkNvcmUyOEluc3BlY3RvckZyb250ZW5kQ2xp
ZW50TG9jYWwyNmNoYW5nZUF0dGFjaGVkV2luZG93SGVpZ2h0RWoKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvV2ViQ29yZS5iYXNlLmV4cCBiL1dlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAppbmRleCA0MzY0
YWVhLi45YmFmYWQ3IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAKKysrIGIv
V2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCkBAIC04NzQsNyArODc0LDYgQEAgX19aTks3V2ViQ29y
ZTE2VmlzaWJsZVNlbGVjdGlvbjIzaXNDb250ZW50UmljaGx5RWRpdGFibGVFdgogX19aTks3V2Vi
Q29yZTE2VmlzaWJsZVNlbGVjdGlvbjVpc0FsbEVOU18yMVN0YXlJbkVkaXRhYmxlQ29udGVudEUK
IF9fWk5LN1dlYkNvcmUxN1Jlc291cmNlRXJyb3JCYXNlOGxhenlJbml0RXYKIF9fWk5LN1dlYkNv
cmUxOUFuaW1hdGlvbkNvbnRyb2xsZXIyNG51bWJlck9mQWN0aXZlQW5pbWF0aW9uc0V2Ci1fX1pO
SzdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTVjYW5BdHRhY2hXaW5kb3dFdgogX19aTks3
V2ViQ29yZTE5UmVzb3VyY2VSZXF1ZXN0QmFzZTEwaHR0cE1ldGhvZEV2CiBfX1pOSzdXZWJDb3Jl
MTlSZXNvdXJjZVJlcXVlc3RCYXNlM3VybEV2CiBfX1pOSzdXZWJDb3JlMTlSZXNvdXJjZVJlcXVl
c3RCYXNlN2lzRW1wdHlFdgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQppbmRleCA4ZTZmYTNhLi43NTlmZWRiIDEwMDY0NAotLS0gYS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQorKysgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMTYzMCw2ICsx
NjMwLDkgQEAKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291
cmNlLmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5jcHAnLAog
ICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5oJywKKyAgICAgICAgICAg
ICdpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaCcsCisgICAgICAgICAgICAnaW5z
cGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuY3BwJywKKyAgICAgICAgICAgICdp
bnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5oJywKICAgICAgICAgICAgICdp
bnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcCcsCiAgICAgICAgICAgICAnaW5zcGVj
dG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5oJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5z
cGVjdG9yUmVzb3VyY2UuY3BwJywKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5vcmRlciBi
L1dlYkNvcmUvV2ViQ29yZS5vcmRlcgppbmRleCBhOGQyMGZkLi40OGYzMjFiIDEwMDY0NAotLS0g
YS9XZWJDb3JlL1dlYkNvcmUub3JkZXIKKysrIGIvV2ViQ29yZS9XZWJDb3JlLm9yZGVyCkBAIC0y
Mzc4OSw3ICsyMzc4OSw2IEBAIF9fWk43V2ViQ29yZTE4U2NyaXB0RnVuY3Rpb25DYWxsMTRhcHBl
bmRBcmd1bWVudEViCiBfX1pON1dlYkNvcmUxOFNjcmlwdEZ1bmN0aW9uQ2FsbDRjYWxsRXYKIF9f
Wk43V2ViQ29yZTE4U2NyaXB0RnVuY3Rpb25DYWxsNGNhbGxFUmJiCiBfX1pON1dlYkNvcmU0NGpz
SW5zcGVjdG9yQ29udHJvbGxlclByb3RvdHlwZUZ1bmN0aW9uQXR0YWNoRVBOM0pTQzlFeGVjU3Rh
dGVFUE5TMF84SlNPYmplY3RFTlMwXzdKU1ZhbHVlRVJLTlMwXzdBcmdMaXN0RQotX19aTjdXZWJD
b3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTJhdHRhY2hXaW5kb3dFdgogX19aTjdXZWJDb3JlMTlJ
bnNwZWN0b3JDb250cm9sbGVyMjFwb3B1bGF0ZVNjcmlwdE9iamVjdHNFdgogX19aTjdXZWJDb3Jl
TDE4Y2FsbFNpbXBsZUZ1bmN0aW9uRVBOM0pTQzlFeGVjU3RhdGVFUktOU18xMlNjcmlwdE9iamVj
dEVQS2MKIF9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjlzaG93UGFuZWxFTlMwXzEz
U3BlY2lhbFBhbmVsc0UKQEAgLTIzODUwLDcgKzIzODQ5LDYgQEAgX19aTjdXZWJDb3JlTDE5ZHJh
d0hpZ2hsaWdodEZvckJveEVSTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU185RmxvYXRRdWFkRVM0
X1M0X1MKIF9fWk43V2ViQ29yZUwxNmRyYXdPdXRsaW5lZFF1YWRFUk5TXzE1R3JhcGhpY3NDb250
ZXh0RVJLTlNfOUZsb2F0UXVhZEVSS05TXzVDb2xvckUKIF9fWk43V2ViQ29yZUwxMHF1YWRUb1Bh
dGhFUktOU185RmxvYXRRdWFkRQogX19aTjdXZWJDb3JlNDRqc0luc3BlY3RvckNvbnRyb2xsZXJQ
cm90b3R5cGVGdW5jdGlvbkRldGFjaEVQTjNKU0M5RXhlY1N0YXRlRVBOUzBfOEpTT2JqZWN0RU5T
MF83SlNWYWx1ZUVSS05TMF83QXJnTGlzdEUKLV9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJv
bGxlcjEyZGV0YWNoV2luZG93RXYKIF9fWk43V2ViQ29yZTU2anNJbnNwZWN0b3JDb250cm9sbGVy
UHJvdG90eXBlRnVuY3Rpb25Nb3ZlQnlVbnJlc3RyaWN0ZWRFUE4zSlNDOUV4ZWNTdGF0ZUVQTlMw
XzhKU09iamVjdEVOUzBfN0pTVmFsdWVFUktOUzBfN0FyZ0wKIF9fWk5LN1dlYkNvcmUxOUluc3Bl
Y3RvckNvbnRyb2xsZXIxMm1vdmVXaW5kb3dCeUVmZgogX19aTjdXZWJDb3JlTDI0ZHJhd091dGxp
bmVkUXVhZFdpdGhDbGlwRVJOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzlGbG9hdFF1YWRFUzRf
UktOU181Q29sb3JFCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvV2ViQ29yZS9X
ZWJDb3JlLnBybwppbmRleCA0MWNlNGNlLi45OWUwMjU5IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dl
YkNvcmUucHJvCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KQEAgLTY5Nyw2ICs2OTcsNyBAQCBT
T1VSQ0VTICs9IFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwIFwKICAgICBp
bnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlLmNwcCBcCiAgICAgaW5zcGVjdG9y
L0luc3BlY3RvckZyb250ZW5kLmNwcCBcCisgICAgaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5k
Q2xpZW50TG9jYWwuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNw
cCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlLmNwcCBcCiAgICAgaW5zcGVjdG9y
L0luc3BlY3RvclRpbWVsaW5lQWdlbnQuY3BwIFwKQEAgLTE0MDMsNiArMTQwNCw4IEBAIEhFQURF
UlMgKz0gXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmggXAogICAg
IGluc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuaCBcCiAgICAgaW5zcGVjdG9y
L0luc3BlY3RvckZyb250ZW5kLmggXAorICAgIGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENs
aWVudC5oIFwKKyAgICBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5oIFwK
ICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmggXAogICAgIGluc3BlY3Rvci9J
bnNwZWN0b3JSZXNvdXJjZS5oIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2Vu
dC5oIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2og
Yi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IDU5NjhjYmUuLjJl
MWMxNzcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oK
KysrIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAtNDI4NjEsNiAr
NDI4NjEsMTggQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZl
UGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3RvckZyb250ZW5kQ2xpZW50LmgiDQorCQkJCT4NCisJ
CQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5z
cGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJ
PEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yRnJvbnRlbmRD
bGllbnRMb2NhbC5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0
aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3RvckZyb250ZW5kSG9zdC5jcHAiDQogCQkJCT4N
CiAJCQk8L0ZpbGU+DQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCA5N2E5ZjdiLi5hYTgwNGIxIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagpAQCAtNDg2Myw2ICs0ODYzLDkgQEAKIAkJRUQ1MDFEQzYwQjI0OUYyOTAwQUUx
OEQ5IC8qIEVkaXRvck1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEVENTAxREM1MEIyNDlGMjkwMEFFMThEOSAvKiBFZGl0b3JNYWMubW0gKi87IH07
CiAJCUVERTNBNTAwMEM3QTQzMDYwMDk1NkEzNyAvKiBDb2xvck1hYy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRURFM0E0RkYwQzdBNDMwNjAwOTU2QTM3
IC8qIENvbG9yTWFjLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJRURFQzk4MDMwQUVEN0UxNzAwNTkxMzdGIC8qIFdlYkNvcmVQcmVmaXguaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEVERUM5ODAyMEFFRDdF
MTcwMDU5MTM3RiAvKiBXZWJDb3JlUHJlZml4LmggKi87IH07CisJCUYzNDRDNzE0MTEyNUI4MkMw
MEYyNkVFRSAvKiBJbnNwZWN0b3JGcm9udGVuZENsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjM0NEM3MTIxMTI1QjgyQzAwRjI2RUVFIC8qIElu
c3BlY3RvckZyb250ZW5kQ2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJRjM0NEM3NTMxMTI5NEQ5RDAwRjI2RUVFIC8qIEluc3BlY3RvckZy
b250ZW5kQ2xpZW50TG9jYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEYzNDRDNzUyMTEyOTREOUQwMEYyNkVFRSAvKiBJbnNwZWN0b3JGcm9udGVuZENs
aWVudExvY2FsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJRjM0NEM3NTgxMTI5NEZGNjAwRjI2RUVFIC8qIEluc3BlY3RvckZyb250ZW5kQ2xpZW50
TG9jYWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RjM0NEM3NTcxMTI5NEZGNjAwRjI2RUVFIC8qIEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwu
Y3BwICovOyB9OwogCQlGMzY0NEFGRjExMTk4MDU5MDBFMEQ1MzcgLyogSW5qZWN0ZWRTY3JpcHQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjM2NDRB
RkQxMTE5ODA1OTAwRTBENTM3IC8qIEluamVjdGVkU2NyaXB0LmNwcCAqLzsgfTsKIAkJRjM2NDRC
MDAxMTE5ODA1OTAwRTBENTM3IC8qIEluamVjdGVkU2NyaXB0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGMzY0NEFGRTExMTk4MDU5MDBFMEQ1MzcgLyog
SW5qZWN0ZWRTY3JpcHQuaCAqLzsgfTsKIAkJRjRFQUY0QUUxMEM3NDJCMTAwOTEwMEQzIC8qIE9w
ZW5UeXBlU2FuaXRpemVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEY0RUFGNEFDMTBDNzQyQjEwMDkxMDBEMyAvKiBPcGVuVHlwZVNhbml0aXplci5j
cHAgKi87IH07CkBAIC0xMDIwMyw2ICsxMDIwNiw5IEBACiAJCUVENTAxREM1MEIyNDlGMjkwMEFF
MThEOSAvKiBFZGl0b3JNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBu
YW1lID0gRWRpdG9yTWFjLm1tOyBwYXRoID0gbWFjL0VkaXRvck1hYy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRURFM0E0RkYwQzdBNDMwNjAwOTU2QTM3IC8qIENvbG9yTWFjLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbG9yTWFjLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUVERUM5ODAyMEFFRDdFMTcwMDU5MTM3RiAvKiBXZWJDb3JlUHJl
Zml4LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb3JlUHJlZml4Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gNDsgdXNlc1RhYnMgPSAwOyB9Owor
CQlGMzQ0QzcxMjExMjVCODJDMDBGMjZFRUUgLyogSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRjM0NEM3NTIxMTI5NEQ5RDAwRjI2RUVF
IC8qIEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlGMzQ0Qzc1NzExMjk0RkY2MDBGMjZFRUUgLyogSW5zcGVjdG9yRnJv
bnRlbmRDbGllbnRMb2NhbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRjM2NDRBRkQxMTE5ODA1OTAwRTBENTM3IC8qIEluamVjdGVkU2NyaXB0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluamVjdGVkU2NyaXB0LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjM2NDRBRkUxMTE5ODA1OTAwRTBENTM3IC8q
IEluamVjdGVkU2NyaXB0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluamVj
dGVkU2NyaXB0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0RUFGNEFDMTBDNzQy
QjEwMDkxMDBEMyAvKiBPcGVuVHlwZVNhbml0aXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBPcGVuVHlwZVNhbml0aXplci5jcHA7IHBhdGggPSBvcGVudHlwZS9P
cGVuVHlwZVNhbml0aXplci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDcz
OCw2ICsxMDc0NCw5IEBACiAJCQkJNDFGMDYxNzIwRjVGMDBBQzAwQTA3RUFDIC8qIEluc3BlY3Rv
ckRPTVN0b3JhZ2VSZXNvdXJjZS5oICovLAogCQkJCTdBRUQzRTAzMEZCQjFFQUEwMEQyQjAzQyAv
KiBJbnNwZWN0b3JGcm9udGVuZC5jcHAgKi8sCiAJCQkJN0FFRDNFMDQwRkJCMUVBQTAwRDJCMDND
IC8qIEluc3BlY3RvckZyb250ZW5kLmggKi8sCisJCQkJRjM0NEM3MTIxMTI1QjgyQzAwRjI2RUVF
IC8qIEluc3BlY3RvckZyb250ZW5kQ2xpZW50LmggKi8sCisJCQkJRjM0NEM3NTcxMTI5NEZGNjAw
RjI2RUVFIC8qIEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuY3BwICovLAorCQkJCUYzNDRD
NzUyMTEyOTREOUQwMEYyNkVFRSAvKiBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmggKi8s
CiAJCQkJN0EwRTc3MEIxMEMwMEE4ODAwQTAyNzZFIC8qIEluc3BlY3RvckZyb250ZW5kSG9zdC5j
cHAgKi8sCiAJCQkJN0EwRTc3MEMxMEMwMEE4ODAwQTAyNzZFIC8qIEluc3BlY3RvckZyb250ZW5k
SG9zdC5oICovLAogCQkJCTdBMEU3NzBEMTBDMDBBODgwMEEwMjc2RSAvKiBJbnNwZWN0b3JGcm9u
dGVuZEhvc3QuaWRsICovLApAQCAtMTc0MzAsNiArMTc0MzksOCBAQAogCQkJCTdBMjQ1ODdDMTAy
MUVBRjQwMDBBMDBBQSAvKiBJbnNwZWN0b3JET01BZ2VudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NDFGMDYxNzQwRjVGMDBBQzAwQTA3RUFDIC8qIEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJN0FFRDNFMDYwRkJCMUVBQTAwRDJCMDNDIC8qIEluc3BlY3Rv
ckZyb250ZW5kLmggaW4gSGVhZGVycyAqLywKKwkJCQlGMzQ0QzcxNDExMjVCODJDMDBGMjZFRUUg
LyogSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCUYzNDRDNzUz
MTEyOTREOUQwMEYyNkVFRSAvKiBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk3QTBFNzcwRjEwQzAwQTg4MDBBMDI3NkUgLyogSW5zcGVjdG9yRnJvbnRl
bmRIb3N0LmggaW4gSGVhZGVycyAqLywKIAkJCQk0MUYwNjIwMTBGNUYwQjY2MDBBMDdFQUMgLyog
SW5zcGVjdG9yUmVzb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTc1NDEzM0E4MTAyRTAwRTgw
MDA3NUQwMCAvKiBJbnNwZWN0b3JUaW1lbGluZUFnZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTE5
NjQ1LDYgKzE5NjU2LDcgQEAKIAkJCQk3QTI0NTg3QjEwMjFFQUY0MDAwQTAwQUEgLyogSW5zcGVj
dG9yRE9NQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDFGMDYxNzUwRjVGMDBBQzAwQTA3
RUFDIC8qIEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk3QUVEM0UwNTBGQkIxRUFBMDBEMkIwM0MgLyogSW5zcGVjdG9yRnJvbnRlbmQuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJRjM0NEM3NTgxMTI5NEZGNjAwRjI2RUVFIC8qIEluc3BlY3RvckZyb250
ZW5kQ2xpZW50TG9jYWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0EwRTc3MEUxMEMwMEE4ODAw
QTAyNzZFIC8qIEluc3BlY3RvckZyb250ZW5kSG9zdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0
MUYwNjIwMjBGNUYwQjY2MDBBMDdFQUMgLyogSW5zcGVjdG9yUmVzb3VyY2UuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNzU0MTMzQUExMDJFMDBGNDAwMDc1RDAwIC8qIEluc3BlY3RvclRpbWVsaW5l
QWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9D
b25zb2xlTWVzc2FnZS5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9Db25zb2xlTWVzc2FnZS5jcHAK
aW5kZXggNTUzOWU5ZC4uNDA1NDk5NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvQ29u
c29sZU1lc3NhZ2UuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmNw
cApAQCAtMzEsOSArMzEsMTIgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDb25z
b2xlTWVzc2FnZS5oIgogCisjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHQuaCIKKyNpbmNsdWRlICJJ
bmplY3RlZFNjcmlwdEhvc3QuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZC5oIgogI2lu
Y2x1ZGUgIlNjcmlwdENhbGxTdGFjay5oIgogI2luY2x1ZGUgIlNjcmlwdE9iamVjdC5oIgorI2lu
Y2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
QEAgLTgwLDcgKzgzLDcgQEAgQ29uc29sZU1lc3NhZ2U6OkNvbnNvbGVNZXNzYWdlKE1lc3NhZ2VT
b3VyY2UgcywgTWVzc2FnZVR5cGUgdCwgTWVzc2FnZUxldmVsIGwsIFMKIH0KIAogI2lmIEVOQUJM
RShJTlNQRUNUT1IpCi12b2lkIENvbnNvbGVNZXNzYWdlOjphZGRUb0NvbnNvbGUoSW5zcGVjdG9y
RnJvbnRlbmQqIGZyb250ZW5kKQordm9pZCBDb25zb2xlTWVzc2FnZTo6YWRkVG9Gcm9udGVuZChJ
bnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQsIEluamVjdGVkU2NyaXB0SG9zdCogaW5qZWN0ZWRT
Y3JpcHRIb3N0KQogewogICAgIFNjcmlwdE9iamVjdCBqc29uT2JqID0gZnJvbnRlbmQtPm5ld1Nj
cmlwdE9iamVjdCgpOwogICAgIGpzb25PYmouc2V0KCJzb3VyY2UiLCBzdGF0aWNfY2FzdDxpbnQ+
KG1fc291cmNlKSk7CkBAIC05MCw3ICs5MywxNSBAQCB2b2lkIENvbnNvbGVNZXNzYWdlOjphZGRU
b0NvbnNvbGUoSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kKQogICAgIGpzb25PYmouc2V0KCJ1
cmwiLCBtX3VybCk7CiAgICAganNvbk9iai5zZXQoImdyb3VwTGV2ZWwiLCBzdGF0aWNfY2FzdDxp
bnQ+KG1fZ3JvdXBMZXZlbCkpOwogICAgIGpzb25PYmouc2V0KCJyZXBlYXRDb3VudCIsIHN0YXRp
Y19jYXN0PGludD4obV9yZXBlYXRDb3VudCkpOwotICAgIGZyb250ZW5kLT5hZGRDb25zb2xlTWVz
c2FnZShqc29uT2JqLCBtX2ZyYW1lcywgbV9zY3JpcHRTdGF0ZSwgbV9hcmd1bWVudHMsICBtX21l
c3NhZ2UpOworICAgIFZlY3RvcjxSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiA+IGFyZ3Vt
ZW50czsKKyAgICBpZiAoIW1fYXJndW1lbnRzLmlzRW1wdHkoKSkgeworICAgICAgICBJbmplY3Rl
ZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IGluamVjdGVkU2NyaXB0SG9zdC0+aW5qZWN0ZWRTY3Jp
cHRGb3IobV9zY3JpcHRTdGF0ZSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
X2FyZ3VtZW50cy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgUmVmUHRyPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4gc2VyaWFsaXplZFZhbHVlID0gaW5qZWN0ZWRTY3JpcHQud3JhcEZvckNvbnNv
bGUobV9hcmd1bWVudHNbaV0pOworICAgICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChzZXJpYWxp
emVkVmFsdWUpOworICAgICAgICB9CisgICAgfSAgIAorICAgIGZyb250ZW5kLT5hZGRDb25zb2xl
TWVzc2FnZShqc29uT2JqLCBtX2ZyYW1lcywgYXJndW1lbnRzLCAgbV9tZXNzYWdlKTsKIH0KIAog
dm9pZCBDb25zb2xlTWVzc2FnZTo6dXBkYXRlUmVwZWF0Q291bnRJbkNvbnNvbGUoSW5zcGVjdG9y
RnJvbnRlbmQqIGZyb250ZW5kKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvQ29uc29s
ZU1lc3NhZ2UuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmgKaW5kZXggZTlh
ZTEzMC4uNTNmNDI1NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvQ29uc29sZU1lc3Nh
Z2UuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9Db25zb2xlTWVzc2FnZS5oCkBAIC0zOCw0MCAr
MzgsNDEgQEAKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
LSAgICBjbGFzcyBJbnNwZWN0b3JGcm9udGVuZDsKLSAgICBjbGFzcyBTY3JpcHRDYWxsU3RhY2s7
Ci0gICAgY2xhc3MgU2NyaXB0U3RyaW5nOworY2xhc3MgSW5qZWN0ZWRTY3JpcHRIb3N0OworY2xh
c3MgSW5zcGVjdG9yRnJvbnRlbmQ7CitjbGFzcyBTY3JpcHRDYWxsU3RhY2s7CitjbGFzcyBTY3Jp
cHRTdHJpbmc7CiAKLSAgICBjbGFzcyBDb25zb2xlTWVzc2FnZSA6IHB1YmxpYyBOb25jb3B5YWJs
ZSB7Ci0gICAgcHVibGljOgotICAgICAgICBDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlLCBN
ZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG0sIHVuc2lnbmVkIGxpLCBj
b25zdCBTdHJpbmcmIHUsIHVuc2lnbmVkIGcpOyAgICAgICAgCi0gICAgICAgIENvbnNvbGVNZXNz
YWdlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIFNjcmlwdENhbGxT
dGFjayosIHVuc2lnbmVkIGcsIGJvb2wgc3RvcmVUcmFjZSA9IGZhbHNlKTsKK2NsYXNzIENvbnNv
bGVNZXNzYWdlIDogcHVibGljIE5vbmNvcHlhYmxlIHsKK3B1YmxpYzoKKyAgICBDb25zb2xlTWVz
c2FnZShNZXNzYWdlU291cmNlLCBNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJp
bmcmIG0sIHVuc2lnbmVkIGxpLCBjb25zdCBTdHJpbmcmIHUsIHVuc2lnbmVkIGcpOyAgICAgICAg
CisgICAgQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1lc3NhZ2VM
ZXZlbCwgU2NyaXB0Q2FsbFN0YWNrKiwgdW5zaWduZWQgZywgYm9vbCBzdG9yZVRyYWNlID0gZmFs
c2UpOwogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICAgICAgdm9pZCBhZGRUb0NvbnNvbGUo
SW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kKTsKLSAgICAgICAgdm9pZCB1cGRhdGVSZXBlYXRD
b3VudEluQ29uc29sZShJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQpOworICAgIHZvaWQgYWRk
VG9Gcm9udGVuZChJbnNwZWN0b3JGcm9udGVuZCosIEluamVjdGVkU2NyaXB0SG9zdCopOworICAg
IHZvaWQgdXBkYXRlUmVwZWF0Q291bnRJbkNvbnNvbGUoSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250
ZW5kKTsKICNlbmRpZgotICAgICAgICB2b2lkIGluY3JlbWVudENvdW50KCkgeyArK21fcmVwZWF0
Q291bnQ7IH07Ci0gICAgICAgIGJvb2wgaXNFcXVhbChTY3JpcHRTdGF0ZSosIENvbnNvbGVNZXNz
YWdlKiBtc2cpIGNvbnN0OworICAgIHZvaWQgaW5jcmVtZW50Q291bnQoKSB7ICsrbV9yZXBlYXRD
b3VudDsgfQorICAgIGJvb2wgaXNFcXVhbChTY3JpcHRTdGF0ZSosIENvbnNvbGVNZXNzYWdlKiBt
c2cpIGNvbnN0OwogCi0gICAgICAgIE1lc3NhZ2VTb3VyY2Ugc291cmNlKCkgY29uc3QgeyByZXR1
cm4gbV9zb3VyY2U7IH0KLSAgICAgICAgY29uc3QgU3RyaW5nJiBtZXNzYWdlKCkgY29uc3QgeyBy
ZXR1cm4gbV9tZXNzYWdlOyB9CisgICAgTWVzc2FnZVNvdXJjZSBzb3VyY2UoKSBjb25zdCB7IHJl
dHVybiBtX3NvdXJjZTsgfQorICAgIGNvbnN0IFN0cmluZyYgbWVzc2FnZSgpIGNvbnN0IHsgcmV0
dXJuIG1fbWVzc2FnZTsgfQogCi0gICAgcHJpdmF0ZToKLSAgICAgICAgTWVzc2FnZVNvdXJjZSBt
X3NvdXJjZTsKLSAgICAgICAgTWVzc2FnZVR5cGUgbV90eXBlOwotICAgICAgICBNZXNzYWdlTGV2
ZWwgbV9sZXZlbDsKLSAgICAgICAgU3RyaW5nIG1fbWVzc2FnZTsKK3ByaXZhdGU6CisgICAgTWVz
c2FnZVNvdXJjZSBtX3NvdXJjZTsKKyAgICBNZXNzYWdlVHlwZSBtX3R5cGU7CisgICAgTWVzc2Fn
ZUxldmVsIG1fbGV2ZWw7CisgICAgU3RyaW5nIG1fbWVzc2FnZTsKICNpZiBFTkFCTEUoSU5TUEVD
VE9SKQotICAgICAgICBWZWN0b3I8U2NyaXB0VmFsdWU+IG1fYXJndW1lbnRzOwotICAgICAgICBT
Y3JpcHRTdGF0ZSogbV9zY3JpcHRTdGF0ZTsKKyAgICBWZWN0b3I8U2NyaXB0VmFsdWU+IG1fYXJn
dW1lbnRzOworICAgIFNjcmlwdFN0YXRlKiBtX3NjcmlwdFN0YXRlOwogI2VuZGlmCi0gICAgICAg
IFZlY3RvcjxTY3JpcHRTdHJpbmc+IG1fZnJhbWVzOwotICAgICAgICB1bnNpZ25lZCBtX2xpbmU7
Ci0gICAgICAgIFN0cmluZyBtX3VybDsKLSAgICAgICAgdW5zaWduZWQgbV9ncm91cExldmVsOwot
ICAgICAgICB1bnNpZ25lZCBtX3JlcGVhdENvdW50OwotICAgIH07CisgICAgVmVjdG9yPFNjcmlw
dFN0cmluZz4gbV9mcmFtZXM7CisgICAgdW5zaWduZWQgbV9saW5lOworICAgIFN0cmluZyBtX3Vy
bDsKKyAgICB1bnNpZ25lZCBtX2dyb3VwTGV2ZWw7CisgICAgdW5zaWduZWQgbV9yZXBlYXRDb3Vu
dDsKK307CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ2xpZW50LmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JD
bGllbnQuaAppbmRleCBlNDQ4Y2QyLi44NDFjMTVlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDbGllbnQuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JD
bGllbnQuaApAQCAtMzAsNiArMzAsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNz
IEluc3BlY3RvckNvbnRyb2xsZXI7CiBjbGFzcyBOb2RlOwogY2xhc3MgUGFnZTsKIGNsYXNzIFN0
cmluZzsKQEAgLTQwLDI5ICs0MSwxMyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgaW5z
cGVjdG9yRGVzdHJveWVkKCkgPSAwOwogCi0gICAgdmlydHVhbCBQYWdlKiBjcmVhdGVQYWdlKCkg
PSAwOwotCi0gICAgdmlydHVhbCBTdHJpbmcgbG9jYWxpemVkU3RyaW5nc1VSTCgpID0gMDsKLQot
ICAgIHZpcnR1YWwgU3RyaW5nIGhpZGRlblBhbmVscygpID0gMDsKLQotICAgIHZpcnR1YWwgdm9p
ZCBzaG93V2luZG93KCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbG9zZVdpbmRvdygpID0gMDsK
LQotICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hXaW5kb3coKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IGRldGFjaFdpbmRvdygpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRBdHRhY2hlZFdpbmRv
d0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgb3Blbkluc3Bl
Y3RvckZyb250ZW5kKEluc3BlY3RvckNvbnRyb2xsZXIqKSA9IDA7CiAKICAgICB2aXJ0dWFsIHZv
aWQgaGlnaGxpZ2h0KE5vZGUqKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGhpZGVIaWdobGlnaHQo
KSA9IDA7CiAKLSAgICB2aXJ0dWFsIHZvaWQgaW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJp
bmcmIG5ld1VSTCkgPSAwOwotCiAgICAgdmlydHVhbCB2b2lkIHBvcHVsYXRlU2V0dGluZyhjb25z
dCBTdHJpbmcmIGtleSwgU3RyaW5nKiB2YWx1ZSkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzdG9y
ZVNldHRpbmcoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpID0gMDsKLQot
ICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0b3JXaW5kb3dPYmplY3RDbGVhcmVkKCkgPSAwOwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250
cm9sbGVyLmNwcAppbmRleCBiMmNhM2E4Li40YzQ3ZTlkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDb250cm9sbGVyLmNwcApAQCAtNTcsMTEgKzU3LDExIEBACiAjaW5jbHVkZSAiSW5q
ZWN0ZWRTY3JpcHRIb3N0LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQmFja2VuZC5oIgogI2luY2x1
ZGUgIkluc3BlY3RvckNsaWVudC5oIgorI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kQ2xpZW50
LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRE9NQWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JE
T01TdG9yYWdlUmVzb3VyY2UuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNl
LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmQuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JG
cm9udGVuZEhvc3QuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JSZXNvdXJjZS5oIgogI2luY2x1ZGUg
Ikluc3BlY3RvcldvcmtlclJlc291cmNlLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yVGltZWxpbmVB
Z2VudC5oIgpAQCAtMTQ0LDEwICsxNDQsOCBAQCBzdGF0aWMgdW5zaWduZWQgc19pbnNwZWN0b3JD
b250cm9sbGVyQ291bnQ7CiBJbnNwZWN0b3JDb250cm9sbGVyOjpJbnNwZWN0b3JDb250cm9sbGVy
KFBhZ2UqIHBhZ2UsIEluc3BlY3RvckNsaWVudCogY2xpZW50KQogICAgIDogbV9pbnNwZWN0ZWRQ
YWdlKHBhZ2UpCiAgICAgLCBtX2NsaWVudChjbGllbnQpCi0gICAgLCBtX3BhZ2UoMCkKKyAgICAs
IG1fb3BlbmluZ0Zyb250ZW5kKGZhbHNlKQogICAgICwgbV9leHBpcmVkQ29uc29sZU1lc3NhZ2VD
b3VudCgwKQotICAgICwgbV9mcm9udGVuZFNjcmlwdFN0YXRlKDApCi0gICAgLCBtX3dpbmRvd1Zp
c2libGUoZmFsc2UpCiAgICAgLCBtX3Nob3dBZnRlclZpc2libGUoQ3VycmVudFBhbmVsKQogICAg
ICwgbV9ncm91cExldmVsKDApCiAgICAgLCBtX3NlYXJjaGluZ0Zvck5vZGUoZmFsc2UpCkBAIC0x
NTUsNyArMTUzLDYgQEAgSW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcihQ
YWdlKiBwYWdlLCBJbnNwZWN0b3JDbGllbnQqIGNsaWVudCkKICAgICAsIG1fcmVzb3VyY2VUcmFj
a2luZ0VuYWJsZWQoZmFsc2UpCiAgICAgLCBtX3Jlc291cmNlVHJhY2tpbmdTZXR0aW5nc0xvYWRl
ZChmYWxzZSkKICAgICAsIG1faW5zcGVjdG9yQmFja2VuZChJbnNwZWN0b3JCYWNrZW5kOjpjcmVh
dGUodGhpcykpCi0gICAgLCBtX2luc3BlY3RvckZyb250ZW5kSG9zdChJbnNwZWN0b3JGcm9udGVu
ZEhvc3Q6OmNyZWF0ZSh0aGlzLCBjbGllbnQpKQogICAgICwgbV9pbmplY3RlZFNjcmlwdEhvc3Qo
SW5qZWN0ZWRTY3JpcHRIb3N0OjpjcmVhdGUodGhpcykpCiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRf
REVCVUdHRVIpCiAgICAgLCBtX2RlYnVnZ2VyRW5hYmxlZChmYWxzZSkKQEAgLTE3OCw5ICsxNzUs
NyBAQCBJbnNwZWN0b3JDb250cm9sbGVyOjp+SW5zcGVjdG9yQ29udHJvbGxlcigpCiB7CiAgICAg
Ly8gVGhlc2Ugc2hvdWxkIGhhdmUgYmVlbiBjbGVhcmVkIGluIGluc3BlY3RlZFBhZ2VEZXN0cm95
ZWQoKS4KICAgICBBU1NFUlQoIW1fY2xpZW50KTsKLSAgICBBU1NFUlQoIW1fZnJvbnRlbmRTY3Jp
cHRTdGF0ZSk7CiAgICAgQVNTRVJUKCFtX2luc3BlY3RlZFBhZ2UpOwotICAgIEFTU0VSVCghbV9w
YWdlIHx8IChtX3BhZ2UgJiYgIW1fcGFnZS0+cGFyZW50SW5zcGVjdG9yQ29udHJvbGxlcigpKSk7
CiAKICAgICBkZWxldGVBbGxWYWx1ZXMobV9mcmFtZVJlc291cmNlcyk7CiAgICAgZGVsZXRlQWxs
VmFsdWVzKG1fY29uc29sZU1lc3NhZ2VzKTsKQEAgLTE5MSwxOCArMTg2LDE0IEBAIEluc3BlY3Rv
ckNvbnRyb2xsZXI6On5JbnNwZWN0b3JDb250cm9sbGVyKCkKICAgICByZWxlYXNlRE9NQWdlbnQo
KTsKIAogICAgIG1faW5zcGVjdG9yQmFja2VuZC0+ZGlzY29ubmVjdENvbnRyb2xsZXIoKTsKLSAg
ICBtX2luc3BlY3RvckZyb250ZW5kSG9zdC0+ZGlzY29ubmVjdENvbnRyb2xsZXIoKTsKICAgICBt
X2luamVjdGVkU2NyaXB0SG9zdC0+ZGlzY29ubmVjdENvbnRyb2xsZXIoKTsKIH0KIAogdm9pZCBJ
bnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0ZWRQYWdlRGVzdHJveWVkKCkKIHsKLSAgICBjbG9z
ZSgpOworICAgIGlmIChtX2Zyb250ZW5kKQorICAgICAgICBtX2Zyb250ZW5kLT5pbnNwZWN0ZWRQ
YWdlRGVzdHJveWVkKCk7CiAKLSAgICBpZiAobV9mcm9udGVuZFNjcmlwdFN0YXRlKSB7Ci0gICAg
ICAgIFNjcmlwdEdsb2JhbE9iamVjdDo6cmVtb3ZlKG1fZnJvbnRlbmRTY3JpcHRTdGF0ZSwgIklu
c3BlY3RvckJhY2tlbmQiKTsKLSAgICAgICAgU2NyaXB0R2xvYmFsT2JqZWN0OjpyZW1vdmUobV9m
cm9udGVuZFNjcmlwdFN0YXRlLCAiSW5zcGVjdG9yRnJvbnRlbmRIb3N0Iik7Ci0gICAgfQogICAg
IEFTU0VSVChtX2luc3BlY3RlZFBhZ2UpOwogICAgIG1faW5zcGVjdGVkUGFnZSA9IDA7CiAKQEAg
LTI5Nyw0NyArMjg4LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpoaWRlSGlnaGxpZ2h0
KCkKIAogYm9vbCBJbnNwZWN0b3JDb250cm9sbGVyOjp3aW5kb3dWaXNpYmxlKCkKIHsKLSAgICBy
ZXR1cm4gbV93aW5kb3dWaXNpYmxlOwotfQotCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNl
dFdpbmRvd1Zpc2libGUoYm9vbCB2aXNpYmxlLCBib29sIGF0dGFjaGVkKQotewotICAgIGlmICh2
aXNpYmxlID09IG1fd2luZG93VmlzaWJsZSB8fCAhbV9mcm9udGVuZCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgbV93aW5kb3dWaXNpYmxlID0gdmlzaWJsZTsKLQotICAgIGlmIChtX3dpbmRvd1Zp
c2libGUpIHsKLSAgICAgICAgc2V0QXR0YWNoZWRXaW5kb3coYXR0YWNoZWQpOwotICAgICAgICBw
b3B1bGF0ZVNjcmlwdE9iamVjdHMoKTsKLQotICAgICAgICBpZiAobV9zaG93QWZ0ZXJWaXNpYmxl
ID09IEN1cnJlbnRQYW5lbCkgewotICAgICAgICAgICAgU3RyaW5nIGxhc3RBY3RpdmVQYW5lbFNl
dHRpbmcgPSBzZXR0aW5nKGxhc3RBY3RpdmVQYW5lbFNldHRpbmdOYW1lKTsKLSAgICAgICAgICAg
IG1fc2hvd0FmdGVyVmlzaWJsZSA9IHNwZWNpYWxQYW5lbEZvckpTTmFtZShsYXN0QWN0aXZlUGFu
ZWxTZXR0aW5nKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtX25vZGVUb0ZvY3VzKQotICAg
ICAgICAgICAgZm9jdXNOb2RlKCk7Ci0jaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCi0g
ICAgICAgIGlmIChtX2F0dGFjaERlYnVnZ2VyV2hlblNob3duKQotICAgICAgICAgICAgZW5hYmxl
RGVidWdnZXIoKTsKLSNlbmRpZgotICAgICAgICBzaG93UGFuZWwobV9zaG93QWZ0ZXJWaXNpYmxl
KTsKLSAgICB9IGVsc2UgewotI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQotICAgICAg
ICAvLyBJZiB0aGUgd2luZG93IGlzIGJlaW5nIGNsb3NlZCB3aXRoIHRoZSBkZWJ1Z2dlciBlbmFi
bGVkLAotICAgICAgICAvLyByZW1lbWJlciB0aGlzIHN0YXRlIHRvIHJlLWVuYWJsZSBkZWJ1Z2dl
ciBvbiB0aGUgbmV4dCB3aW5kb3cKLSAgICAgICAgLy8gb3BlbmluZy4KLSAgICAgICAgYm9vbCBk
ZWJ1Z2dlcldhc0VuYWJsZWQgPSBtX2RlYnVnZ2VyRW5hYmxlZDsKLSAgICAgICAgZGlzYWJsZURl
YnVnZ2VyKCk7Ci0gICAgICAgIGlmIChkZWJ1Z2dlcldhc0VuYWJsZWQpCi0gICAgICAgICAgICBt
X2F0dGFjaERlYnVnZ2VyV2hlblNob3duID0gdHJ1ZTsKLSNlbmRpZgotICAgICAgICBzZXRTZWFy
Y2hpbmdGb3JOb2RlKGZhbHNlKTsKLSAgICAgICAgcmVzZXRTY3JpcHRPYmplY3RzKCk7Ci0gICAg
ICAgIHN0b3BUaW1lbGluZVByb2ZpbGVyKCk7Ci0gICAgfQotICAgIG1fc2hvd0FmdGVyVmlzaWJs
ZSA9IEN1cnJlbnRQYW5lbDsKKyAgICByZXR1cm4gbV9mcm9udGVuZDsKIH0KIAogdm9pZCBJbnNw
ZWN0b3JDb250cm9sbGVyOjphZGRNZXNzYWdlVG9Db25zb2xlKE1lc3NhZ2VTb3VyY2Ugc291cmNl
LCBNZXNzYWdlVHlwZSB0eXBlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIFNjcmlwdENhbGxTdGFjayog
Y2FsbFN0YWNrKQpAQCAtMzcwLDcgKzMyMSw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6
YWRkQ29uc29sZU1lc3NhZ2UoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBDb25zb2xlTWVzCiAg
ICAgICAgIG1fcHJldmlvdXNNZXNzYWdlID0gY29uc29sZU1lc3NhZ2U7CiAgICAgICAgIG1fY29u
c29sZU1lc3NhZ2VzLmFwcGVuZChjb25zb2xlTWVzc2FnZSk7CiAgICAgICAgIGlmICh3aW5kb3dW
aXNpYmxlKCkpCi0gICAgICAgICAgICBtX3ByZXZpb3VzTWVzc2FnZS0+YWRkVG9Db25zb2xlKG1f
ZnJvbnRlbmQuZ2V0KCkpOworICAgICAgICAgICAgbV9wcmV2aW91c01lc3NhZ2UtPmFkZFRvRnJv
bnRlbmQobV9mcm9udGVuZC5nZXQoKSwgbV9pbmplY3RlZFNjcmlwdEhvc3QuZ2V0KCkpOwogICAg
IH0KIAogICAgIGlmICghd2luZG93VmlzaWJsZSgpICYmIG1fY29uc29sZU1lc3NhZ2VzLnNpemUo
KSA+PSBtYXhpbXVtQ29uc29sZU1lc3NhZ2VzKSB7CkBAIC00MTgsNjkgKzM2OSw2IEBAIHZvaWQg
SW5zcGVjdG9yQ29udHJvbGxlcjo6bWFya1RpbWVsaW5lKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkK
ICAgICAgICAgdGltZWxpbmVBZ2VudCgpLT5kaWRNYXJrVGltZWxpbmUobWVzc2FnZSk7CiB9CiAK
LXN0YXRpYyB1bnNpZ25lZCBjb25zdHJhaW5lZEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVk
IHByZWZlcnJlZEhlaWdodCwgdW5zaWduZWQgdG90YWxXaW5kb3dIZWlnaHQpCi17Ci0gICAgcmV0
dXJuIHJvdW5kZihtYXgobWluaW11bUF0dGFjaGVkSGVpZ2h0LCBtaW48ZmxvYXQ+KHByZWZlcnJl
ZEhlaWdodCwgdG90YWxXaW5kb3dIZWlnaHQgKiBtYXhpbXVtQXR0YWNoZWRIZWlnaHRSYXRpbykp
KTsKLX0KLQotYm9vbCBJbnNwZWN0b3JDb250cm9sbGVyOjpjYW5BdHRhY2hXaW5kb3coKSBjb25z
dAotewotICAgIGlmICghZW5hYmxlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IAotICAgIHVuc2lnbmVkIGluc3BlY3RlZFBhZ2VIZWlnaHQgPSBtX2luc3BlY3RlZFBhZ2UtPm1h
aW5GcmFtZSgpLT52aWV3KCktPnZpc2libGVIZWlnaHQoKTsKLQotICAgIC8vIERvbid0IGFsbG93
IHRoZSBhdHRhY2ggaWYgdGhlIHdpbmRvdyB3b3VsZCBiZSB0b28gc21hbGwgdG8gYWNjb21tb2Rh
dGUgdGhlIG1pbmltdW0gaW5zcGVjdG9yIGhlaWdodC4KLSAgICByZXR1cm4gbWluaW11bUF0dGFj
aGVkSGVpZ2h0IDw9IGluc3BlY3RlZFBhZ2VIZWlnaHQgKiBtYXhpbXVtQXR0YWNoZWRIZWlnaHRS
YXRpbzsKLX0KLQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjphdHRhY2hXaW5kb3coKQotewot
ICAgIGlmICghZW5hYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICB1bnNpZ25lZCBpbnNw
ZWN0ZWRQYWdlSGVpZ2h0ID0gbV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKS0+dmlldygpLT52
aXNpYmxlSGVpZ2h0KCk7Ci0KLSAgICBTdHJpbmcgYXR0YWNoZWRIZWlnaHQgPSBzZXR0aW5nKGlu
c3BlY3RvckF0dGFjaGVkSGVpZ2h0TmFtZSk7Ci0gICAgYm9vbCBzdWNjZXNzID0gdHJ1ZTsKLSAg
ICBpbnQgaGVpZ2h0ID0gYXR0YWNoZWRIZWlnaHQudG9JbnQoJnN1Y2Nlc3MpOwotICAgIHVuc2ln
bmVkIHByZWZlcnJlZEhlaWdodCA9IHN1Y2Nlc3MgPyBoZWlnaHQgOiBkZWZhdWx0QXR0YWNoZWRI
ZWlnaHQ7Ci0KLSAgICBtX2NsaWVudC0+YXR0YWNoV2luZG93KCk7Ci0KLSAgICAvLyBXZSBuZWVk
IHRvIGNvbnN0cmFpbiB0aGUgd2luZG93IGhlaWdodCBoZXJlIGluIGNhc2UgdGhlIHVzZXIgaGFz
IHJlc2l6ZWQgdGhlIGluc3BlY3RlZCBwYWdlJ3Mgd2luZG93IHNvIHRoYXQKLSAgICAvLyB0aGUg
dXNlcidzIHByZWZlcnJlZCBoZWlnaHQgd291bGQgYmUgdG9vIGJpZyB0byBkaXNwbGF5LgotICAg
IG1fY2xpZW50LT5zZXRBdHRhY2hlZFdpbmRvd0hlaWdodChjb25zdHJhaW5lZEF0dGFjaGVkV2lu
ZG93SGVpZ2h0KHByZWZlcnJlZEhlaWdodCwgaW5zcGVjdGVkUGFnZUhlaWdodCkpOwotfQotCi12
b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRldGFjaFdpbmRvdygpCi17Ci0gICAgaWYgKCFlbmFi
bGVkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NsaWVudC0+ZGV0YWNoV2luZG93KCk7Ci19
Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0QXR0YWNoZWRXaW5kb3coYm9vbCBhdHRh
Y2hlZCkKLXsKLSAgICBpZiAoIWVuYWJsZWQoKSB8fCAhbV9mcm9udGVuZCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbV9mcm9udGVuZC0+c2V0QXR0YWNoZWRXaW5kb3coYXR0YWNoZWQpOwotfQot
Ci12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2ln
bmVkIGhlaWdodCkKLXsKLSAgICBpZiAoIWVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAg
IAotICAgIHVuc2lnbmVkIHRvdGFsSGVpZ2h0ID0gbV9wYWdlLT5tYWluRnJhbWUoKS0+dmlldygp
LT52aXNpYmxlSGVpZ2h0KCkgKyBtX2luc3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCkt
PnZpc2libGVIZWlnaHQoKTsKLSAgICB1bnNpZ25lZCBhdHRhY2hlZEhlaWdodCA9IGNvbnN0cmFp
bmVkQXR0YWNoZWRXaW5kb3dIZWlnaHQoaGVpZ2h0LCB0b3RhbEhlaWdodCk7Ci0gICAgCi0gICAg
c2V0U2V0dGluZyhpbnNwZWN0b3JBdHRhY2hlZEhlaWdodE5hbWUsIFN0cmluZzo6bnVtYmVyKGF0
dGFjaGVkSGVpZ2h0KSk7Ci0gICAgCi0gICAgbV9jbGllbnQtPnNldEF0dGFjaGVkV2luZG93SGVp
Z2h0KGF0dGFjaGVkSGVpZ2h0KTsKLX0KLQogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzdG9y
ZUxhc3RBY3RpdmVQYW5lbChjb25zdCBTdHJpbmcmIHBhbmVsTmFtZSkKIHsKICAgICBzZXRTZXR0
aW5nKGxhc3RBY3RpdmVQYW5lbFNldHRpbmdOYW1lLCBwYW5lbE5hbWUpOwpAQCAtNTEyLDIzICs0
MDAsMjIgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpoYW5kbGVNb3VzZVByZXNzT25Ob2Rl
KE5vZGUqIG5vZGUpCiAgICAgaW5zcGVjdChub2RlKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb250
cm9sbGVyOjppbnNwZWN0ZWRXaW5kb3dTY3JpcHRPYmplY3RDbGVhcmVkKEZyYW1lKiBmcmFtZSkK
K3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQoUGFz
c093blB0cjxJbnNwZWN0b3JGcm9udGVuZENsaWVudD4gY2xpZW50KQogewotICAgIGlmICghZW5h
YmxlZCgpIHx8ICFtX2Zyb250ZW5kIHx8IGZyYW1lICE9IG1faW5zcGVjdGVkUGFnZS0+bWFpbkZy
YW1lKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2luamVjdGVkU2NyaXB0SG9zdC0+ZGlzY2Fy
ZEluamVjdGVkU2NyaXB0cygpOworICAgIEFTU0VSVCghbV9pbnNwZWN0b3JGcm9udGVuZENsaWVu
dCk7CisgICAgbV9pbnNwZWN0b3JGcm9udGVuZENsaWVudCA9IGNsaWVudDsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JDb250cm9sbGVyOjp3aW5kb3dTY3JpcHRPYmplY3RBdmFpbGFibGUoKQordm9pZCBJ
bnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0ZWRXaW5kb3dTY3JpcHRPYmplY3RDbGVhcmVkKEZy
YW1lKiBmcmFtZSkKIHsKLSAgICBpZiAoIW1fcGFnZSB8fCAhZW5hYmxlZCgpKQotICAgICAgICBy
ZXR1cm47CisgICAgLy8gSWYgdGhlIHBhZ2UgaXMgc3VwcG9zZWQgdG8gc2VydmUgYXMgSW5zcGVj
dG9yRnJvbnRlbmQgbm90aWZ5IGluc3BldG9yIGZyb250ZW5kCisgICAgLy8gY2xpZW50IHRoYXQg
aXQncyBjbGVhcmVkIHNvIHRoYXQgdGhlIGNsaWVudCBjYW4gZXhwb3NlIGluc3BlY3RvciBiaW5k
aW5ncy4KKyAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENsaWVudCAmJiBmcmFtZSA9PSBtX2lu
c3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpKQorICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2xp
ZW50LT53aW5kb3dPYmplY3RDbGVhcmVkKCk7CiAKLSAgICAvLyBHcmFudCB0aGUgaW5zcGVjdG9y
IHRoZSBhYmlsaXR5IHRvIHNjcmlwdCB0aGUgaW5zcGVjdGVkIHBhZ2UuCi0gICAgbV9wYWdlLT5t
YWluRnJhbWUoKS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+Z3JhbnRVbml2ZXJzYWxB
Y2Nlc3MoKTsKLSAgICBtX2Zyb250ZW5kU2NyaXB0U3RhdGUgPSBzY3JpcHRTdGF0ZUZyb21QYWdl
KGRlYnVnZ2VyV29ybGQoKSwgbV9wYWdlKTsKLSAgICBTY3JpcHRHbG9iYWxPYmplY3Q6OnNldCht
X2Zyb250ZW5kU2NyaXB0U3RhdGUsICJJbnNwZWN0b3JCYWNrZW5kIiwgbV9pbnNwZWN0b3JCYWNr
ZW5kLmdldCgpKTsKLSAgICBTY3JpcHRHbG9iYWxPYmplY3Q6OnNldChtX2Zyb250ZW5kU2NyaXB0
U3RhdGUsICJJbnNwZWN0b3JGcm9udGVuZEhvc3QiLCBtX2luc3BlY3RvckZyb250ZW5kSG9zdC5n
ZXQoKSk7CisgICAgaWYgKCFlbmFibGVkKCkgfHwgIW1fZnJvbnRlbmQgfHwgZnJhbWUgIT0gbV9p
bnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1faW5qZWN0
ZWRTY3JpcHRIb3N0LT5kaXNjYXJkSW5qZWN0ZWRTY3JpcHRzKCk7CiB9CiAKIHZvaWQgSW5zcGVj
dG9yQ29udHJvbGxlcjo6c2V0U2VhcmNoaW5nRm9yTm9kZShib29sIGVuYWJsZWQpCkBAIC01NDYs
MTggKzQzMywxNiBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldFNlYXJjaGluZ0Zvck5v
ZGUoYm9vbCBlbmFibGVkKQogICAgIH0KIH0KIAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpz
Y3JpcHRPYmplY3RSZWFkeSgpCit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldEZyb250ZW5k
KFBhc3NPd25QdHI8SW5zcGVjdG9yRnJvbnRlbmQ+IGZyb250ZW5kKQogewotICAgIEFTU0VSVCht
X2Zyb250ZW5kU2NyaXB0U3RhdGUpOwotICAgIGlmICghbV9mcm9udGVuZFNjcmlwdFN0YXRlKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBTY3JpcHRPYmplY3Qgd2ViSW5zcGVjdG9yT2JqOwotICAg
IGlmICghU2NyaXB0R2xvYmFsT2JqZWN0OjpnZXQobV9mcm9udGVuZFNjcmlwdFN0YXRlLCAiV2Vi
SW5zcGVjdG9yIiwgd2ViSW5zcGVjdG9yT2JqKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHNldEZy
b250ZW5kUHJveHlPYmplY3QobV9mcm9udGVuZFNjcmlwdFN0YXRlLCB3ZWJJbnNwZWN0b3JPYmop
OwotCi0jaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCisgICAgQVNTRVJUKGZyb250ZW5k
KTsKKyAgICBtX29wZW5pbmdGcm9udGVuZCA9IGZhbHNlOworICAgIG1fZnJvbnRlbmQgPSBmcm9u
dGVuZDsKKyAgICByZWxlYXNlRE9NQWdlbnQoKTsKKyAgICBtX2RvbUFnZW50ID0gSW5zcGVjdG9y
RE9NQWdlbnQ6OmNyZWF0ZShtX2Zyb250ZW5kLmdldCgpKTsKKyAgICBpZiAobV90aW1lbGluZUFn
ZW50KQorICAgICAgICBtX3RpbWVsaW5lQWdlbnQtPnJlc2V0RnJvbnRlbmRQcm94eU9iamVjdCht
X2Zyb250ZW5kLmdldCgpKTsKKyNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikgJiYgVVNF
KEpTQykKICAgICBTdHJpbmcgZGVidWdnZXJFbmFibGVkID0gc2V0dGluZyhkZWJ1Z2dlckVuYWJs
ZWRTZXR0aW5nTmFtZSk7CiAgICAgaWYgKGRlYnVnZ2VyRW5hYmxlZCA9PSAidHJ1ZSIpCiAgICAg
ICAgIGVuYWJsZURlYnVnZ2VyKCk7CkBAIC01NjYsNDggKzQ1MSwzNyBAQCB2b2lkIEluc3BlY3Rv
ckNvbnRyb2xsZXI6OnNjcmlwdE9iamVjdFJlYWR5KCkKICAgICAgICAgZW5hYmxlUHJvZmlsZXIo
KTsKICNlbmRpZgogCi0gICAgLy8gSWYgbm8gcHJlZmVyZW5jZSBpcyBzZXQgLSBkZWZhdWx0IHRv
IGFuIGF0dGFjaGVkIHdpbmRvdy4gVGhpcyBpcyBpbXBvcnRhbnQgZm9yIGluc3BlY3RvciBMYXlv
dXRUZXN0cy4KLSAgICBTdHJpbmcgc2hvdWxkQXR0YWNoVmFsdWUgPSBzZXR0aW5nKGluc3BlY3Rv
clN0YXJ0c0F0dGFjaGVkU2V0dGluZ05hbWUoKSk7Ci0gICAgYm9vbCBzaG91bGRBdHRhY2ggPSBz
aG91bGRBdHRhY2hWYWx1ZSAhPSAiZmFsc2UiOworICAgIC8vLy8vIGZyb250ZW5kUmVhZHkKKyAg
ICBwb3B1bGF0ZVNjcmlwdE9iamVjdHMoKTsKICAgICAKLSAgICBpZiAoc2hvdWxkQXR0YWNoICYm
ICFjYW5BdHRhY2hXaW5kb3coKSkKLSAgICAgICAgc2hvdWxkQXR0YWNoID0gZmFsc2U7Ci0KLSAg
ICAvLyBNYWtlIHN1cmUgb3VyIHdpbmRvdyBpcyB2aXNpYmxlIG5vdyB0aGF0IHRoZSBwYWdlIGxv
YWRlZAotICAgIHNldFdpbmRvd1Zpc2libGUodHJ1ZSwgc2hvdWxkQXR0YWNoKTsKLQotICAgIG1f
Y2xpZW50LT5pbnNwZWN0b3JXaW5kb3dPYmplY3RDbGVhcmVkKCk7Ci19Ci0KLXZvaWQgSW5zcGVj
dG9yQ29udHJvbGxlcjo6c2V0RnJvbnRlbmRQcm94eU9iamVjdChTY3JpcHRTdGF0ZSogc2NyaXB0
U3RhdGUsIFNjcmlwdE9iamVjdCB3ZWJJbnNwZWN0b3JPYmosIFNjcmlwdE9iamVjdCkKLXsKLSAg
ICBtX2Zyb250ZW5kU2NyaXB0U3RhdGUgPSBzY3JpcHRTdGF0ZTsKLSAgICBtX2Zyb250ZW5kLnNl
dChuZXcgSW5zcGVjdG9yRnJvbnRlbmQodGhpcywgd2ViSW5zcGVjdG9yT2JqKSk7Ci0gICAgcmVs
ZWFzZURPTUFnZW50KCk7Ci0gICAgbV9kb21BZ2VudCA9IEluc3BlY3RvckRPTUFnZW50OjpjcmVh
dGUobV9mcm9udGVuZC5nZXQoKSk7Ci0gICAgaWYgKG1fdGltZWxpbmVBZ2VudCkKLSAgICAgICAg
bV90aW1lbGluZUFnZW50LT5yZXNldEZyb250ZW5kUHJveHlPYmplY3QobV9mcm9udGVuZC5nZXQo
KSk7CisgICAgaWYgKG1fc2hvd0FmdGVyVmlzaWJsZSA9PSBDdXJyZW50UGFuZWwpIHsKKyAgICAg
ICAgU3RyaW5nIGxhc3RBY3RpdmVQYW5lbFNldHRpbmcgPSBzZXR0aW5nKGxhc3RBY3RpdmVQYW5l
bFNldHRpbmdOYW1lKTsKKyAgICAgICAgbV9zaG93QWZ0ZXJWaXNpYmxlID0gc3BlY2lhbFBhbmVs
Rm9ySlNOYW1lKGxhc3RBY3RpdmVQYW5lbFNldHRpbmcpOworICAgIH0KKyAgICAKKyAgICBpZiAo
bV9ub2RlVG9Gb2N1cykKKyAgICAgICAgZm9jdXNOb2RlKCk7CisjaWYgRU5BQkxFKEpBVkFTQ1JJ
UFRfREVCVUdHRVIpCisgICAgaWYgKG1fYXR0YWNoRGVidWdnZXJXaGVuU2hvd24pCisgICAgICAg
IGVuYWJsZURlYnVnZ2VyKCk7CisjZW5kaWYKKyAgICBzaG93UGFuZWwobV9zaG93QWZ0ZXJWaXNp
YmxlKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzaG93KCkKIHsKICAgICBpZiAo
IWVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGlmICghbV9wYWdlKSB7Ci0g
ICAgICAgIGlmIChtX2Zyb250ZW5kKQotICAgICAgICAgICAgcmV0dXJuOyAvLyBXZSBhcmUgdXNp
bmcgY3VzdG9tIGZyb250ZW5kIC0gbm8gbmVlZCB0byBjcmVhdGUgcGFnZS4KLQotICAgICAgICBt
X3BhZ2UgPSBtX2NsaWVudC0+Y3JlYXRlUGFnZSgpOwotICAgICAgICBpZiAoIW1fcGFnZSkKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9wYWdlLT5zZXRQYXJlbnRJbnNwZWN0b3JDb250
cm9sbGVyKHRoaXMpOwogCi0gICAgICAgIC8vIHNob3dXaW5kb3coKSB3aWxsIGJlIGNhbGxlZCBh
ZnRlciB0aGUgcGFnZSBsb2FkcyBpbiBzY3JpcHRPYmplY3RSZWFkeSgpCisgICAgaWYgKG1fb3Bl
bmluZ0Zyb250ZW5kKQogICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKG1fZnJvbnRlbmQp
CisgICAgICAgIG1fZnJvbnRlbmQtPmJyaW5nVG9Gcm9udCgpOworICAgIGVsc2UgeworICAgICAg
ICBtX29wZW5pbmdGcm9udGVuZCA9IHRydWU7CisgICAgICAgIG1fY2xpZW50LT5vcGVuSW5zcGVj
dG9yRnJvbnRlbmQodGhpcyk7CiAgICAgfQotCi0gICAgc2hvd1dpbmRvdygpOwogfQogCiB2b2lk
IEluc3BlY3RvckNvbnRyb2xsZXI6OnNob3dQYW5lbChTcGVjaWFsUGFuZWxzIHBhbmVsKQpAQCAt
NjMwLDQ5ICs1MDQsNDQgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzaG93UGFuZWwoU3Bl
Y2lhbFBhbmVscyBwYW5lbCkKIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpjbG9zZSgpCiB7
Ci0gICAgaWYgKCFlbmFibGVkKCkpCisgICAgaWYgKCFtX2Zyb250ZW5kKQogICAgICAgICByZXR1
cm47Ci0KLSNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKLSAgICBzdG9wVXNlckluaXRp
YXRlZFByb2ZpbGluZygpOwotICAgIGRpc2FibGVEZWJ1Z2dlcigpOwotI2VuZGlmCi0gICAgY2xv
c2VXaW5kb3coKTsKLQotICAgIHJlbGVhc2VET01BZ2VudCgpOwotICAgIG1fZnJvbnRlbmQuc2V0
KDApOwotICAgIG1fdGltZWxpbmVBZ2VudCA9IDA7Ci0gICAgbV9mcm9udGVuZFNjcmlwdFN0YXRl
ID0gMDsKLSAgICBpZiAobV9wYWdlKSB7Ci0gICAgICAgIGlmICghbV9wYWdlLT5tYWluRnJhbWUo
KSB8fCAhbV9wYWdlLT5tYWluRnJhbWUoKS0+bG9hZGVyKCkgfHwgIW1fcGFnZS0+bWFpbkZyYW1l
KCktPmxvYWRlcigpLT5pc0xvYWRpbmcoKSkgewotICAgICAgICAgICAgbV9wYWdlLT5zZXRQYXJl
bnRJbnNwZWN0b3JDb250cm9sbGVyKDApOwotICAgICAgICAgICAgbV9wYWdlID0gMDsKLSAgICAg
ICAgfQotICAgIH0KKyAgICBtX2Zyb250ZW5kLT5jbG9zZSgpOwogfQogCi12b2lkIEluc3BlY3Rv
ckNvbnRyb2xsZXI6OnNob3dXaW5kb3coKQordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaXNj
b25uZWN0RnJvbnRlbmQoKQogewotICAgIEFTU0VSVChlbmFibGVkKCkpOworICAgIGlmICghbV9m
cm9udGVuZCkKKyAgICAgICAgcmV0dXJuOworICAgIG1fZnJvbnRlbmQuY2xlYXIoKTsKIAotICAg
IHVuc2lnbmVkIGluc3BlY3RlZFBhZ2VIZWlnaHQgPSBtX2luc3BlY3RlZFBhZ2UtPm1haW5GcmFt
ZSgpLT52aWV3KCktPnZpc2libGVIZWlnaHQoKTsKKy8vLy8vLy8vLy8vLy8gd2lsbENsb3NlRnJv
bnRlbmQKKyNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKKyAgICAvLyBJZiB0aGUgd2lu
ZG93IGlzIGJlaW5nIGNsb3NlZCB3aXRoIHRoZSBkZWJ1Z2dlciBlbmFibGVkLAorICAgIC8vIHJl
bWVtYmVyIHRoaXMgc3RhdGUgdG8gcmUtZW5hYmxlIGRlYnVnZ2VyIG9uIHRoZSBuZXh0IHdpbmRv
dworICAgIC8vIG9wZW5pbmcuCisgICAgYm9vbCBkZWJ1Z2dlcldhc0VuYWJsZWQgPSBtX2RlYnVn
Z2VyRW5hYmxlZDsKKyAgICBkaXNhYmxlRGVidWdnZXIoKTsKKyAgICBpZiAoZGVidWdnZXJXYXNF
bmFibGVkKQorICAgICAgICBtX2F0dGFjaERlYnVnZ2VyV2hlblNob3duID0gdHJ1ZTsKKyNlbmRp
ZgorICAgIHNldFNlYXJjaGluZ0Zvck5vZGUoZmFsc2UpOworICAgIHJlc2V0U2NyaXB0T2JqZWN0
cygpOworICAgIHN0b3BUaW1lbGluZVByb2ZpbGVyKCk7CiAKLSAgICBtX2NsaWVudC0+c2hvd1dp
bmRvdygpOworICAgIG1fc2hvd0FmdGVyVmlzaWJsZSA9IEN1cnJlbnRQYW5lbDsKKy8vLy8vLy8v
Ly8vLy8vLy8KIAotICAgIFN0cmluZyBhdHRhY2hlZEhlaWdodCA9IHNldHRpbmcoaW5zcGVjdG9y
QXR0YWNoZWRIZWlnaHROYW1lKTsKLSAgICBib29sIHN1Y2Nlc3MgPSB0cnVlOwotICAgIGludCBo
ZWlnaHQgPSBhdHRhY2hlZEhlaWdodC50b0ludCgmc3VjY2Vzcyk7Ci0gICAgdW5zaWduZWQgcHJl
ZmVycmVkSGVpZ2h0ID0gc3VjY2VzcyA/IGhlaWdodCA6IGRlZmF1bHRBdHRhY2hlZEhlaWdodDsK
KyAgICBoaWRlSGlnaGxpZ2h0KCk7CiAKLSAgICAvLyBUaGlzIGNhbGwgbWlnaHQgbm90IGdvIHRo
cm91Z2ggKGlmIHRoZSB3aW5kb3cgc3RhcnRzIG91dCBkZXRhY2hlZCksIGJ1dCBpZiB0aGUgd2lu
ZG93IGlzIGluaXRpYWxseSBjcmVhdGVkIGF0dGFjaGVkLAotICAgIC8vIEluc3BlY3RvckNvbnRy
b2xsZXI6OmF0dGFjaFdpbmRvdyBpcyBuZXZlciBjYWxsZWQsIHNvIHdlIG5lZWQgdG8gbWFrZSBz
dXJlIHRvIHNldCB0aGUgYXR0YWNoZWRXaW5kb3dIZWlnaHQuCi0gICAgLy8gRklYTUU6IENsZWFu
IHVwIGNvZGUgc28gd2Ugb25seSBoYXZlIHRvIGNhbGwgc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQg
aW4gSW5zcGVjdG9yQ29udHJvbGxlcjo6YXR0YWNoV2luZG93Ci0gICAgbV9jbGllbnQtPnNldEF0
dGFjaGVkV2luZG93SGVpZ2h0KGNvbnN0cmFpbmVkQXR0YWNoZWRXaW5kb3dIZWlnaHQocHJlZmVy
cmVkSGVpZ2h0LCBpbnNwZWN0ZWRQYWdlSGVpZ2h0KSk7Ci19CisjaWYgRU5BQkxFKEpBVkFTQ1JJ
UFRfREVCVUdHRVIpCisgICAgc3RvcFVzZXJJbml0aWF0ZWRQcm9maWxpbmcoKTsKKy8vICAgIGRp
c2FibGVEZWJ1Z2dlcigpOworI2VuZGlmCiAKLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6Y2xv
c2VXaW5kb3coKQotewotICAgIG1fY2xpZW50LT5jbG9zZVdpbmRvdygpOworICAgIHJlbGVhc2VE
T01BZ2VudCgpOworLy8gICAgbV9mcm9udGVuZC5jbGVhcigpOworICAgIG1fdGltZWxpbmVBZ2Vu
dC5jbGVhcigpOwogfQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnJlbGVhc2VET01BZ2Vu
dCgpCkBAIC02ODEsNyArNTUwLDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZWxlYXNl
RE9NQWdlbnQoKQogICAgIC8vIG5vIHJlZmVyZW5jZXMgdG8gdGhlIERPTSBhZ2VudCBmcm9tIHRo
ZSBET00gdHJlZS4KICAgICBpZiAobV9kb21BZ2VudCkKICAgICAgICAgbV9kb21BZ2VudC0+cmVz
ZXQoKTsKLSAgICBtX2RvbUFnZW50ID0gMDsKKyAgICBtX2RvbUFnZW50LmNsZWFyKCk7CiB9CiAK
IHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cG9wdWxhdGVTY3JpcHRPYmplY3RzKCkKQEAgLTcx
NSw3ICs1ODQsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnBvcHVsYXRlU2NyaXB0T2Jq
ZWN0cygpCiAgICAgICAgIG1fZnJvbnRlbmQtPnVwZGF0ZUNvbnNvbGVNZXNzYWdlRXhwaXJlZENv
dW50KG1fZXhwaXJlZENvbnNvbGVNZXNzYWdlQ291bnQpOwogICAgIHVuc2lnbmVkIG1lc3NhZ2VD
b3VudCA9IG1fY29uc29sZU1lc3NhZ2VzLnNpemUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbWVzc2FnZUNvdW50OyArK2kpCi0gICAgICAgIG1fY29uc29sZU1lc3NhZ2VzW2ldLT5h
ZGRUb0NvbnNvbGUobV9mcm9udGVuZC5nZXQoKSk7CisgICAgICAgIG1fY29uc29sZU1lc3NhZ2Vz
W2ldLT5hZGRUb0Zyb250ZW5kKG1fZnJvbnRlbmQuZ2V0KCksIG1faW5qZWN0ZWRTY3JpcHRIb3N0
LmdldCgpKTsKIAogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAgIGlmIChtX2Rl
YnVnZ2VyRW5hYmxlZCkKQEAgLTc1MCwxMCArNjE5LDYgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9s
bGVyOjpyZXNldFNjcmlwdE9iamVjdHMoKQogICAgIGlmICghbV9mcm9udGVuZCkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgUmVzb3VyY2VzTWFwOjppdGVyYXRvciByZXNvdXJjZXNFbmQgPSBtX3Jl
c291cmNlcy5lbmQoKTsKLSAgICBmb3IgKFJlc291cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBtX3Jl
c291cmNlcy5iZWdpbigpOyBpdCAhPSByZXNvdXJjZXNFbmQ7ICsraXQpCi0gICAgICAgIGl0LT5z
ZWNvbmQtPnJlbGVhc2VTY3JpcHRPYmplY3QobV9mcm9udGVuZC5nZXQoKSwgZmFsc2UpOwotCiAj
aWYgRU5BQkxFKERBVEFCQVNFKQogICAgIERhdGFiYXNlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBk
YXRhYmFzZXNFbmQgPSBtX2RhdGFiYXNlUmVzb3VyY2VzLmVuZCgpOwogICAgIGZvciAoRGF0YWJh
c2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9kYXRhYmFzZVJlc291cmNlcy5iZWdpbigp
OyBpdCAhPSBkYXRhYmFzZXNFbmQ7ICsraXQpCkBAIC03ODcsOCArNjUyLDggQEAgdm9pZCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpwcnVuZVJlc291cmNlcyhSZXNvdXJjZXNNYXAqIHJlc291cmNlTWFw
LCBEb2N1bWVudExvYWQKIAogICAgICAgICBpZiAoIWxvYWRlclRvS2VlcCB8fCAhcmVzb3VyY2Ut
PmlzU2FtZUxvYWRlcihsb2FkZXJUb0tlZXApKSB7CiAgICAgICAgICAgICByZW1vdmVSZXNvdXJj
ZShyZXNvdXJjZSk7Ci0gICAgICAgICAgICBpZiAod2luZG93VmlzaWJsZSgpKQotICAgICAgICAg
ICAgICAgIHJlc291cmNlLT5yZWxlYXNlU2NyaXB0T2JqZWN0KG1fZnJvbnRlbmQuZ2V0KCksIHRy
dWUpOworICAgICAgICAgICAgaWYgKG1fZnJvbnRlbmQpCisgICAgICAgICAgICAgICAgcmVzb3Vy
Y2UtPnJlbGVhc2VTY3JpcHRPYmplY3QobV9mcm9udGVuZC5nZXQoKSk7CiAgICAgICAgIH0KICAg
ICB9CiB9CkBAIC04MDEsNyArNjY2LDggQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRD
b21taXRMb2FkKERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCiAgICAgQVNTRVJUKG1faW5zcGVjdGVk
UGFnZSk7CiAKICAgICBpZiAobG9hZGVyLT5mcmFtZSgpID09IG1faW5zcGVjdGVkUGFnZS0+bWFp
bkZyYW1lKCkpIHsKLSAgICAgICAgbV9jbGllbnQtPmluc3BlY3RlZFVSTENoYW5nZWQobG9hZGVy
LT51cmwoKS5zdHJpbmcoKSk7CisgICAgICAgIGlmIChtX2Zyb250ZW5kKQorICAgICAgICAgICAg
bV9mcm9udGVuZC0+aW5zcGVjdGVkVVJMQ2hhbmdlZChsb2FkZXItPnVybCgpLnN0cmluZygpKTsK
IAogICAgICAgICBtX2luamVjdGVkU2NyaXB0SG9zdC0+ZGlzY2FyZEluamVjdGVkU2NyaXB0cygp
OwogICAgICAgICBjbGVhckNvbnNvbGVNZXNzYWdlcygpOwpAQCAtMTQzNywxNiArMTMwMyw2IEBA
IEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZSogSW5zcGVjdG9yQ29udHJvbGxlcjo6Z2V0RE9N
U3RvcmFnZVJlc291cmNlRm9ySWQoaW50CiB9CiAjZW5kaWYKIAotdm9pZCBJbnNwZWN0b3JDb250
cm9sbGVyOjptb3ZlV2luZG93QnkoZmxvYXQgeCwgZmxvYXQgeSkgY29uc3QKLXsKLSAgICBpZiAo
IW1fcGFnZSB8fCAhZW5hYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBGbG9hdFJlY3Qg
ZnJhbWVSZWN0ID0gbV9wYWdlLT5jaHJvbWUoKS0+d2luZG93UmVjdCgpOwotICAgIGZyYW1lUmVj
dC5tb3ZlKHgsIHkpOwotICAgIG1fcGFnZS0+Y2hyb21lKCktPnNldFdpbmRvd1JlY3QoZnJhbWVS
ZWN0KTsKLX0KLQogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogdm9pZCBJbnNwZWN0
b3JDb250cm9sbGVyOjphZGRQcm9maWxlKFBhc3NSZWZQdHI8U2NyaXB0UHJvZmlsZT4gcHJwUHJv
ZmlsZSwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpCiB7CkBA
IC0xNDk5LDcgKzEzNTUsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmdldFByb2ZpbGUo
bG9uZyBjYWxsSWQsIHVuc2lnbmVkIHVpZCkKICAgICBQcm9maWxlc01hcDo6aXRlcmF0b3IgaXQg
PSBtX3Byb2ZpbGVzLmZpbmQodWlkKTsKICNpZiBVU0UoSlNDKQogICAgIGlmIChpdCAhPSBtX3By
b2ZpbGVzLmVuZCgpKQotICAgICAgICBtX2Zyb250ZW5kLT5kaWRHZXRQcm9maWxlKGNhbGxJZCwg
dG9KUyhtX2Zyb250ZW5kU2NyaXB0U3RhdGUsIGl0LT5zZWNvbmQuZ2V0KCkpKTsKKyAgICAgICAg
bV9mcm9udGVuZC0+ZGlkR2V0UHJvZmlsZShjYWxsSWQsIHRvSlMobV9mcm9udGVuZC0+c2NyaXB0
U3RhdGUoKSwgaXQtPnNlY29uZC5nZXQoKSkpOwogI2VuZGlmCiB9CiAKQEAgLTE2MzYsNyArMTQ5
Miw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZW5hYmxlRGVidWdnZXIoKQogICAgIGlm
IChtX2RlYnVnZ2VyRW5hYmxlZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFtX2Zyb250
ZW5kU2NyaXB0U3RhdGUgfHwgIW1fZnJvbnRlbmQpCisgICAgaWYgKCFtX2Zyb250ZW5kKQogICAg
ICAgICBtX2F0dGFjaERlYnVnZ2VyV2hlblNob3duID0gdHJ1ZTsKICAgICBlbHNlIHsKICAgICAg
ICAgbV9mcm9udGVuZC0+YXR0YWNoRGVidWdnZXJXaGVuU2hvd24oKTsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaCBiL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckNvbnRyb2xsZXIuaAppbmRleCBlYWQ0ZDVlLi4wY2E5ZDE3IDEwMDY0NAotLS0g
YS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKKysrIGIvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCkBAIC02Niw3ICs2Niw3IEBAIGNsYXNzIElu
amVjdGVkU2NyaXB0SG9zdDsKIGNsYXNzIEluc3BlY3RvckJhY2tlbmQ7CiBjbGFzcyBJbnNwZWN0
b3JDbGllbnQ7CiBjbGFzcyBJbnNwZWN0b3JGcm9udGVuZDsKLWNsYXNzIEluc3BlY3RvckZyb250
ZW5kSG9zdDsKK2NsYXNzIEluc3BlY3RvckZyb250ZW5kQ2xpZW50OwogY2xhc3MgSW5zcGVjdG9y
VGltZWxpbmVBZ2VudDsKIGNsYXNzIEphdmFTY3JpcHRDYWxsRnJhbWU7CiBjbGFzcyBLVVJMOwpA
QCAtMTE2LDExICsxMTYsOSBAQCBwdWJsaWM6CiAgICAgfkluc3BlY3RvckNvbnRyb2xsZXIoKTsK
IAogICAgIEluc3BlY3RvckJhY2tlbmQqIGluc3BlY3RvckJhY2tlbmQoKSB7IHJldHVybiBtX2lu
c3BlY3RvckJhY2tlbmQuZ2V0KCk7IH0KLSAgICBJbnNwZWN0b3JGcm9udGVuZEhvc3QqIGluc3Bl
Y3RvckZyb250ZW5kSG9zdCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRIb3N0LmdldCgp
OyB9CiAgICAgSW5qZWN0ZWRTY3JpcHRIb3N0KiBpbmplY3RlZFNjcmlwdEhvc3QoKSB7IHJldHVy
biBtX2luamVjdGVkU2NyaXB0SG9zdC5nZXQoKTsgfQogCiAgICAgdm9pZCBpbnNwZWN0ZWRQYWdl
RGVzdHJveWVkKCk7Ci0gICAgdm9pZCBwYWdlRGVzdHJveWVkKCkgeyBtX3BhZ2UgPSAwOyB9CiAK
ICAgICBib29sIGVuYWJsZWQoKSBjb25zdDsKIApAQCAtMTM2LDI4ICsxMzQsMjQgQEAgcHVibGlj
OgogICAgIHZvaWQgc2hvdygpOwogICAgIHZvaWQgc2hvd1BhbmVsKFNwZWNpYWxQYW5lbHMpOwog
ICAgIHZvaWQgY2xvc2UoKTsKLQotICAgIGJvb2wgd2luZG93VmlzaWJsZSgpOwotICAgIHZvaWQg
c2V0V2luZG93VmlzaWJsZShib29sIHZpc2libGUgPSB0cnVlLCBib29sIGF0dGFjaGVkID0gZmFs
c2UpOworICAgIHZvaWQgZGlzY29ubmVjdEZyb250ZW5kKCk7CiAKICAgICB2b2lkIGFkZE1lc3Nh
Z2VUb0NvbnNvbGUoTWVzc2FnZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwgU2Ny
aXB0Q2FsbFN0YWNrKik7CiAgICAgdm9pZCBhZGRNZXNzYWdlVG9Db25zb2xlKE1lc3NhZ2VTb3Vy
Y2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgdW5z
aWduZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VJRCk7CiAgICAgdm9pZCBjbGVh
ckNvbnNvbGVNZXNzYWdlcygpOwogICAgIGNvbnN0IFZlY3RvcjxDb25zb2xlTWVzc2FnZSo+JiBj
b25zb2xlTWVzc2FnZXMoKSBjb25zdCB7IHJldHVybiBtX2NvbnNvbGVNZXNzYWdlczsgfQogCi0g
ICAgYm9vbCBjYW5BdHRhY2hXaW5kb3coKSBjb25zdDsKLSAgICB2b2lkIGF0dGFjaFdpbmRvdygp
OwotICAgIHZvaWQgZGV0YWNoV2luZG93KCk7Ci0KICAgICBib29sIHNlYXJjaGluZ0Zvck5vZGVJ
blBhZ2UoKSBjb25zdCB7IHJldHVybiBtX3NlYXJjaGluZ0Zvck5vZGU7IH0KICAgICB2b2lkIG1v
dXNlRGlkTW92ZU92ZXJFbGVtZW50KGNvbnN0IEhpdFRlc3RSZXN1bHQmLCB1bnNpZ25lZCBtb2Rp
ZmllckZsYWdzKTsKICAgICB2b2lkIGhhbmRsZU1vdXNlUHJlc3NPbk5vZGUoTm9kZSopOwogCisg
ICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENsaWVudChQYXNzT3duUHRyPEluc3BlY3RvckZy
b250ZW5kQ2xpZW50PiBjbGllbnQpOworICAgIGJvb2wgaGFzSW5zcGVjdG9yRnJvbnRlbmRDbGll
bnQoKSBjb25zdCB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2xpZW50OyB9CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgIHZv
aWQgaW5zcGVjdGVkV2luZG93U2NyaXB0T2JqZWN0Q2xlYXJlZChGcmFtZSopOwotICAgIHZvaWQg
d2luZG93U2NyaXB0T2JqZWN0QXZhaWxhYmxlKCk7CiAKLSAgICB2b2lkIHNldEZyb250ZW5kUHJv
eHlPYmplY3QoU2NyaXB0U3RhdGUqIHN0YXRlLCBTY3JpcHRPYmplY3Qgd2ViSW5zcGVjdG9yT2Jq
LCBTY3JpcHRPYmplY3QgaW5qZWN0ZWRTY3JpcHRPYmogPSBTY3JpcHRPYmplY3QoKSk7Ci0gICAg
U2NyaXB0U3RhdGUqIGZyb250ZW5kU2NyaXB0U3RhdGUoKSBjb25zdCB7IHJldHVybiBtX2Zyb250
ZW5kU2NyaXB0U3RhdGU7IH0KKyAgICBib29sIHdpbmRvd1Zpc2libGUoKTsKKyAgICB2b2lkIHNl
dEZyb250ZW5kKFBhc3NPd25QdHI8SW5zcGVjdG9yRnJvbnRlbmQ+KTsKIAogICAgIHZvaWQgcG9w
dWxhdGVTY3JpcHRPYmplY3RzKCk7CiAgICAgdm9pZCByZXNldFNjcmlwdE9iamVjdHMoKTsKQEAg
LTI2MywxOSArMjU3LDEzIEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGNvbnN0IFN0cmluZyYgZnJv
bnRlbmRTZXR0aW5nc1NldHRpbmdOYW1lKCk7CiAKICAgICBmcmllbmQgY2xhc3MgSW5zcGVjdG9y
QmFja2VuZDsKLSAgICBmcmllbmQgY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmRIb3N0OwogICAgIGZy
aWVuZCBjbGFzcyBJbmplY3RlZFNjcmlwdEhvc3Q7CiAKICAgICAvLyBGb2xsb3dpbmcgYXJlIHVz
ZWQgZnJvbSBJbnNwZWN0b3JCYWNrZW5kIGFuZCBpbnRlcm5hbGx5LgotCiAgICAgdm9pZCBzZXRT
ZWFyY2hpbmdGb3JOb2RlKGJvb2wgZW5hYmxlZCk7CiAKLSAgICB2b2lkIHNjcmlwdE9iamVjdFJl
YWR5KCk7Ci0gICAgdm9pZCBtb3ZlV2luZG93QnkoZmxvYXQgeCwgZmxvYXQgeSkgY29uc3Q7Ci0g
ICAgdm9pZCBzZXRBdHRhY2hlZFdpbmRvdyhib29sKTsKLSAgICB2b2lkIHNldEF0dGFjaGVkV2lu
ZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCk7CisgICAgLy8gRm9sbG93aW5nIGFyZSB1c2VkIGZy
b20gSW5zcGVjdG9yQmFja2VuZCBhbmQgaW50ZXJuYWxseS4KICAgICB2b2lkIHN0b3JlTGFzdEFj
dGl2ZVBhbmVsKGNvbnN0IFN0cmluZyYgcGFuZWxOYW1lKTsKLSAgICB2b2lkIGNsb3NlV2luZG93
KCk7CiAgICAgSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50KCkgeyByZXR1cm4gbV9kb21BZ2Vu
dC5nZXQoKTsgfQogICAgIHZvaWQgcmVsZWFzZURPTUFnZW50KCk7CiAKQEAgLTMxNiw4ICszMDQs
NiBAQCBwcml2YXRlOgogICAgIHZvaWQgcHJ1bmVSZXNvdXJjZXMoUmVzb3VyY2VzTWFwKiwgRG9j
dW1lbnRMb2FkZXIqIGxvYWRlclRvS2VlcCA9IDApOwogICAgIHZvaWQgcmVtb3ZlQWxsUmVzb3Vy
Y2VzKFJlc291cmNlc01hcCogbWFwKSB7IHBydW5lUmVzb3VyY2VzKG1hcCk7IH0KIAotICAgIHZv
aWQgc2hvd1dpbmRvdygpOwotCiAgICAgYm9vbCBpc01haW5SZXNvdXJjZUxvYWRlcihEb2N1bWVu
dExvYWRlciogbG9hZGVyLCBjb25zdCBLVVJMJiByZXF1ZXN0VXJsKTsKIAogICAgIFNwZWNpYWxQ
YW5lbHMgc3BlY2lhbFBhbmVsRm9ySlNOYW1lKGNvbnN0IFN0cmluZyYgcGFuZWxOYW1lKTsKQEAg
LTMyNiwxMCArMzEyLDExIEBAIHByaXZhdGU6CiAKICAgICBQYWdlKiBtX2luc3BlY3RlZFBhZ2U7
CiAgICAgSW5zcGVjdG9yQ2xpZW50KiBtX2NsaWVudDsKKyAgICBPd25QdHI8SW5zcGVjdG9yRnJv
bnRlbmRDbGllbnQ+IG1faW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ7CisgICAgYm9vbCBtX29wZW5p
bmdGcm9udGVuZDsKICAgICBPd25QdHI8SW5zcGVjdG9yRnJvbnRlbmQ+IG1fZnJvbnRlbmQ7CiAg
ICAgUmVmUHRyPEluc3BlY3RvckRPTUFnZW50PiBtX2RvbUFnZW50OwogICAgIE93blB0cjxJbnNw
ZWN0b3JUaW1lbGluZUFnZW50PiBtX3RpbWVsaW5lQWdlbnQ7Ci0gICAgUGFnZSogbV9wYWdlOwog
ICAgIFJlZlB0cjxOb2RlPiBtX25vZGVUb0ZvY3VzOwogICAgIFJlZlB0cjxJbnNwZWN0b3JSZXNv
dXJjZT4gbV9tYWluUmVzb3VyY2U7CiAgICAgUmVzb3VyY2VzTWFwIG1fcmVzb3VyY2VzOwpAQCAt
MzQ1LDggKzMzMiw2IEBAIHByaXZhdGU6CiAjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQogICAgIERP
TVN0b3JhZ2VSZXNvdXJjZXNNYXAgbV9kb21TdG9yYWdlUmVzb3VyY2VzOwogI2VuZGlmCi0gICAg
U2NyaXB0U3RhdGUqIG1fZnJvbnRlbmRTY3JpcHRTdGF0ZTsKLSAgICBib29sIG1fd2luZG93Vmlz
aWJsZTsKICAgICBTcGVjaWFsUGFuZWxzIG1fc2hvd0FmdGVyVmlzaWJsZTsKICAgICBSZWZQdHI8
Tm9kZT4gbV9oaWdobGlnaHRlZE5vZGU7CiAgICAgdW5zaWduZWQgbV9ncm91cExldmVsOwpAQCAt
MzU1LDcgKzM0MCw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3Jlc291cmNlVHJhY2tpbmdFbmFi
bGVkOwogICAgIGJvb2wgbV9yZXNvdXJjZVRyYWNraW5nU2V0dGluZ3NMb2FkZWQ7CiAgICAgUmVm
UHRyPEluc3BlY3RvckJhY2tlbmQ+IG1faW5zcGVjdG9yQmFja2VuZDsKLSAgICBSZWZQdHI8SW5z
cGVjdG9yRnJvbnRlbmRIb3N0PiBtX2luc3BlY3RvckZyb250ZW5kSG9zdDsKICAgICBSZWZQdHI8
SW5qZWN0ZWRTY3JpcHRIb3N0PiBtX2luamVjdGVkU2NyaXB0SG9zdDsKIAogICAgIHR5cGVkZWYg
SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gU2V0dGluZ3M7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JGcm9udGVuZC5jcHAKaW5kZXggNTRhNDQxNC4uNzRiZDhhMiAxMDA3NTUKLS0tIGEvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckZyb250ZW5kLmNwcApAQCAtNDksOSArNDksOCBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLUluc3BlY3RvckZyb250ZW5kOjpJbnNwZWN0b3JGcm9udGVuZChJbnNwZWN0b3JD
b250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyLCBTY3JpcHRPYmplY3Qgd2ViSW5zcGVjdG9y
KQotICAgIDogbV9pbnNwZWN0b3JDb250cm9sbGVyKGluc3BlY3RvckNvbnRyb2xsZXIpCi0gICAg
LCBtX3dlYkluc3BlY3Rvcih3ZWJJbnNwZWN0b3IpCitJbnNwZWN0b3JGcm9udGVuZDo6SW5zcGVj
dG9yRnJvbnRlbmQoU2NyaXB0T2JqZWN0IHdlYkluc3BlY3RvcikKKyAgICA6IG1fd2ViSW5zcGVj
dG9yKHdlYkluc3BlY3RvcikKIHsKIH0KIApAQCAtNjAsNiArNTksMTggQEAgSW5zcGVjdG9yRnJv
bnRlbmQ6On5JbnNwZWN0b3JGcm9udGVuZCgpCiAgICAgbV93ZWJJbnNwZWN0b3IgPSBTY3JpcHRP
YmplY3QoKTsKIH0KIAordm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6Y2xvc2UoKQoreworICAgIFNj
cmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3dlYkluc3BlY3RvciwgImNsb3NlIik7CisgICAg
ZnVuY3Rpb24uY2FsbCgpOworfQorCit2b2lkIEluc3BlY3RvckZyb250ZW5kOjppbnNwZWN0ZWRQ
YWdlRGVzdHJveWVkKCkKK3sKKyAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJ
bnNwZWN0b3IsICJpbnNwZWN0ZWRQYWdlRGVzdHJveWVkIik7CisgICAgZnVuY3Rpb24uY2FsbCgp
OworfQorCiBTY3JpcHRBcnJheSBJbnNwZWN0b3JGcm9udGVuZDo6bmV3U2NyaXB0QXJyYXkoKQog
ewogICAgIHJldHVybiBTY3JpcHRBcnJheTo6Y3JlYXRlTmV3KHNjcmlwdFN0YXRlKCkpOwpAQCAt
OTEsNyArMTAyLDcgQEAgdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6dXBkYXRlQ29uc29sZU1lc3Nh
Z2VFeHBpcmVkQ291bnQodW5zaWduZWQgY291bnQpCiAgICAgZnVuY3Rpb24uY2FsbCgpOwogfQog
Ci12b2lkIEluc3BlY3RvckZyb250ZW5kOjphZGRDb25zb2xlTWVzc2FnZShjb25zdCBTY3JpcHRP
YmplY3QmIG1lc3NhZ2VPYmosIGNvbnN0IFZlY3RvcjxTY3JpcHRTdHJpbmc+JiBmcmFtZXMsIFNj
cmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgY29uc3QgVmVjdG9yPFNjcmlwdFZhbHVlPiBhcmd1bWVu
dHMsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmFkZENv
bnNvbGVNZXNzYWdlKGNvbnN0IFNjcmlwdE9iamVjdCYgbWVzc2FnZU9iaiwgY29uc3QgVmVjdG9y
PFNjcmlwdFN0cmluZz4mIGZyYW1lcywgY29uc3QgVmVjdG9yPFJlZlB0cjxTZXJpYWxpemVkU2Ny
aXB0VmFsdWU+ID4mIGFyZ3VtZW50cywgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewogICAgIFNj
cmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7IAog
ICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KCJhZGRDb25zb2xlTWVzc2FnZSIpOwpAQCAtMTAw
LDEwICsxMTEsOCBAQCB2b2lkIEluc3BlY3RvckZyb250ZW5kOjphZGRDb25zb2xlTWVzc2FnZShj
b25zdCBTY3JpcHRPYmplY3QmIG1lc3NhZ2VPYmosIGNvbnN0CiAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBmcmFtZXMuc2l6ZSgpOyArK2kpCiAgICAgICAgICAgICBmdW5jdGlvbi5h
cHBlbmRBcmd1bWVudChmcmFtZXNbaV0pOwogICAgIH0gZWxzZSBpZiAoIWFyZ3VtZW50cy5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBtX2luc3Bl
Y3RvckNvbnRyb2xsZXItPmluamVjdGVkU2NyaXB0SG9zdCgpLT5pbmplY3RlZFNjcmlwdEZvcihz
Y3JpcHRTdGF0ZSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcmd1bWVudHMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
IHNlcmlhbGl6ZWRWYWx1ZSA9IGluamVjdGVkU2NyaXB0LndyYXBGb3JDb25zb2xlKGFyZ3VtZW50
c1tpXSk7Ci0gICAgICAgICAgICBTY3JpcHRWYWx1ZSBzY3JpcHRWYWx1ZSA9IFNjcmlwdFZhbHVl
OjpkZXNlcmlhbGl6ZSh0aGlzLT5zY3JpcHRTdGF0ZSgpLCBzZXJpYWxpemVkVmFsdWUuZ2V0KCkp
OworICAgICAgICAgICAgU2NyaXB0VmFsdWUgc2NyaXB0VmFsdWUgPSBTY3JpcHRWYWx1ZTo6ZGVz
ZXJpYWxpemUoc2NyaXB0U3RhdGUoKSwgYXJndW1lbnRzW2ldLmdldCgpKTsKICAgICAgICAgICAg
IGlmIChzY3JpcHRWYWx1ZS5oYXNOb1ZhbHVlKCkpIHsKICAgICAgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0yMjAsNiArMjI5LDE5
IEBAIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OnJlc2V0KCkKICAgICBjYWxsU2ltcGxlRnVuY3Rp
b24oInJlc2V0Iik7CiB9CiAKK3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmJyaW5nVG9Gcm9udCgp
Cit7CisgICAgY2FsbFNpbXBsZUZ1bmN0aW9uKCJicmluZ1RvRnJvbnQiKTsKK30KKwordm9pZCBJ
bnNwZWN0b3JGcm9udGVuZDo6aW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIHVybCkK
K3sKKyAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJbnNwZWN0b3IsICJkaXNw
YXRjaCIpOworICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KCJpbnNwZWN0ZWRVUkxDaGFuZ2Vk
Iik7CisgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQodXJsKTsKKyAgICBmdW5jdGlvbi5jYWxs
KCk7Cit9CisKIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OnJlc291cmNlVHJhY2tpbmdXYXNFbmFi
bGVkKCkKIHsKICAgICBjYWxsU2ltcGxlRnVuY3Rpb24oInJlc291cmNlVHJhY2tpbmdXYXNFbmFi
bGVkIik7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5o
IGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuaAppbmRleCA2MWMxYThjLi4x
N2M0YzhiIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5o
CisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmgKQEAgLTQ5LDggKzQ5
LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIEluc3BlY3RvckZyb250ZW5k
IDogcHVibGljIE5vbmNvcHlhYmxlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIEluc3BlY3RvckZy
b250ZW5kKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIsIFNjcmlwdE9i
amVjdCB3ZWJJbnNwZWN0b3IpOworICAgICAgICBJbnNwZWN0b3JGcm9udGVuZChTY3JpcHRPYmpl
Y3Qgd2ViSW5zcGVjdG9yKTsKICAgICAgICAgfkluc3BlY3RvckZyb250ZW5kKCk7CisgICAgICAg
IAorICAgICAgICB2b2lkIGNsb3NlKCk7CisgICAgICAgIHZvaWQgaW5zcGVjdGVkUGFnZURlc3Ry
b3llZCgpOwogCiAgICAgICAgIFNjcmlwdEFycmF5IG5ld1NjcmlwdEFycmF5KCk7CiAgICAgICAg
IFNjcmlwdE9iamVjdCBuZXdTY3JpcHRPYmplY3QoKTsKQEAgLTYwLDcgKzYzLDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHBvcHVsYXRlRnJvbnRlbmRTZXR0aW5ncyhjb25z
dCBTdHJpbmcmIHNldHRpbmdzKTsKIAogICAgICAgICB2b2lkIHVwZGF0ZUNvbnNvbGVNZXNzYWdl
RXhwaXJlZENvdW50KHVuc2lnbmVkIGNvdW50KTsKLSAgICAgICAgdm9pZCBhZGRDb25zb2xlTWVz
c2FnZShjb25zdCBTY3JpcHRPYmplY3QmIG1lc3NhZ2VPYmosIGNvbnN0IFZlY3RvcjxTY3JpcHRT
dHJpbmc+JiBmcmFtZXMsIFNjcmlwdFN0YXRlKiwgY29uc3QgVmVjdG9yPFNjcmlwdFZhbHVlPiBh
cmd1bWVudHMsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CisgICAgICAgIHZvaWQgYWRkQ29uc29s
ZU1lc3NhZ2UoY29uc3QgU2NyaXB0T2JqZWN0JiBtZXNzYWdlT2JqLCBjb25zdCBWZWN0b3I8U2Ny
aXB0U3RyaW5nPiYgZnJhbWVzLCBjb25zdCBWZWN0b3I8UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4gPiYgYXJndW1lbnRzLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwogICAgICAgICB2b2lk
IHVwZGF0ZUNvbnNvbGVNZXNzYWdlUmVwZWF0Q291bnQodW5zaWduZWQgY291bnQpOwogICAgICAg
ICB2b2lkIGNsZWFyQ29uc29sZU1lc3NhZ2VzKCk7CiAKQEAgLTczLDYgKzc2LDkgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHNob3dQYW5lbChpbnQgcGFuZWwpOwogICAgICAg
ICB2b2lkIHBvcHVsYXRlSW50ZXJmYWNlKCk7CiAgICAgICAgIHZvaWQgcmVzZXQoKTsKKyAgICAg
ICAgCisgICAgICAgIHZvaWQgYnJpbmdUb0Zyb250KCk7CisgICAgICAgIHZvaWQgaW5zcGVjdGVk
VVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmKTsKIAogICAgICAgICB2b2lkIHJlc291cmNlVHJhY2tp
bmdXYXNFbmFibGVkKCk7CiAgICAgICAgIHZvaWQgcmVzb3VyY2VUcmFja2luZ1dhc0Rpc2FibGVk
KCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVu
dC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTgzNDZiCi0tLSAvZGV2L251bGwKKysrIGIv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaApAQCAtMCwwICsxLDY5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisg
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBJbnNwZWN0b3JGcm9udGVuZENsaWVudF9oCisjZGVmaW5lIEluc3BlY3RvckZy
b250ZW5kQ2xpZW50X2gKKworI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBDb250ZXh0TWVudUl0ZW07CitjbGFzcyBFdmVudDsKK2NsYXNzIFN0
cmluZzsKKworY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQgeworcHVibGljOgorICAgIHZp
cnR1YWwgfkluc3BlY3RvckZyb250ZW5kQ2xpZW50KCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQg
d2luZG93T2JqZWN0Q2xlYXJlZCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZnJvbnRlbmRMb2Fk
ZWQoKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgbW92ZVdpbmRvd0J5KGZsb2F0IHgsIGZsb2F0
IHkpID0gMDsKKworICAgIHZpcnR1YWwgU3RyaW5nIGxvY2FsaXplZFN0cmluZ3NVUkwoKSA9IDA7
CisgICAgdmlydHVhbCBTdHJpbmcgaGlkZGVuUGFuZWxzKCkgPSAwOworCisgICAgdmlydHVhbCB2
b2lkIGJyaW5nVG9Gcm9udCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xvc2VXaW5kb3coKSA9
IDA7CisKKyAgICB2aXJ0dWFsIGJvb2wgY2FuQXR0YWNoV2luZG93KCkgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBhdHRhY2hXaW5kb3coKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRldGFjaFdpbmRv
dygpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2hhbmdlQXR0YWNoZWRXaW5kb3dIZWlnaHQodW5z
aWduZWQpID0gMDsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgaW5zcGVjdGVkVVJMQ2hhbmdlZChj
b25zdCBTdHJpbmcmKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2hvd0NvbnRleHRNZW51KEV2
ZW50KiwgY29uc3QgVmVjdG9yPENvbnRleHRNZW51SXRlbSo+JikgPSAwOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uMTg4OGZiZAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuY3BwCkBAIC0wLDAgKzEsMjM1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3Ry
aWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuaCIKKwor
I2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlICJDaHJvbWUuaCIKKyNpbmNsdWRlICJD
b250ZXh0TWVudS5oIgorI2luY2x1ZGUgIkNvbnRleHRNZW51Q29udHJvbGxlci5oIgorI2luY2x1
ZGUgIkNvbnRleHRNZW51SXRlbS5oIgorI2luY2x1ZGUgIkNvbnRleHRNZW51UHJvdmlkZXIuaCIK
KyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZy
YW1lVmlldy5oIgorI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJJ
bnNwZWN0b3JGcm9udGVuZC5oIgorI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kSG9zdC5oIgor
I2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUg
IlNjcmlwdEZ1bmN0aW9uQ2FsbC5oIgorI2luY2x1ZGUgIlNjcmlwdE9iamVjdC5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZyb250ZW5kTWVudVByb3ZpZGVyIDogcHVibGljIENv
bnRleHRNZW51UHJvdmlkZXIgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZyb250
ZW5kTWVudVByb3ZpZGVyPiBjcmVhdGUoSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbCogZnJv
bnRlbmRDbGllbnQsIFNjcmlwdE9iamVjdCB3ZWJJbnNwZWN0b3IsIGNvbnN0IFZlY3RvcjxDb250
ZXh0TWVudUl0ZW0qPiYgaXRlbXMpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IEZyb250ZW5kTWVudVByb3ZpZGVyKGZyb250ZW5kQ2xpZW50LCB3ZWJJbnNwZWN0b3IsIGl0ZW1z
KSk7CisgICAgfQorICAgIAorICAgIHZvaWQgZGlzY29ubmVjdCgpCisgICAgeworICAgICAgICBt
X3dlYkluc3BlY3RvciA9IFNjcmlwdE9iamVjdCgpOworICAgICAgICBtX2Zyb250ZW5kQ2xpZW50
ID0gMDsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIEZyb250ZW5kTWVudVByb3ZpZGVyKElu
c3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwqIGZyb250ZW5kQ2xpZW50LCBTY3JpcHRPYmplY3Qg
d2ViSW5zcGVjdG9yLCAgY29uc3QgVmVjdG9yPENvbnRleHRNZW51SXRlbSo+JiBpdGVtcykKKyAg
ICAgICAgOiBtX2Zyb250ZW5kQ2xpZW50KGZyb250ZW5kQ2xpZW50KQorICAgICAgICAsIG1fd2Vi
SW5zcGVjdG9yKHdlYkluc3BlY3RvcikKKyAgICAgICAgLCBtX2l0ZW1zKGl0ZW1zKQorICAgIHsK
KyAgICB9CisKKyAgICB2aXJ0dWFsIH5Gcm9udGVuZE1lbnVQcm92aWRlcigpCisgICAgeworICAg
ICAgICBjb250ZXh0TWVudUNsZWFyZWQoKTsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCB2b2lk
IHBvcHVsYXRlQ29udGV4dE1lbnUoQ29udGV4dE1lbnUqIG1lbnUpCisgICAgeworICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1faXRlbXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBt
ZW51LT5hcHBlbmRJdGVtKCptX2l0ZW1zW2ldKTsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCB2
b2lkIGNvbnRleHRNZW51SXRlbVNlbGVjdGVkKENvbnRleHRNZW51SXRlbSogaXRlbSkKKyAgICB7
CisgICAgICAgIGludCBpdGVtTnVtYmVyID0gaXRlbS0+YWN0aW9uKCkgLSBDb250ZXh0TWVudUl0
ZW1CYXNlQ3VzdG9tVGFnOworCisgICAgICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbiht
X3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7CisgICAgICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3Vt
ZW50KCJjb250ZXh0TWVudUl0ZW1TZWxlY3RlZCIpOworICAgICAgICBmdW5jdGlvbi5hcHBlbmRB
cmd1bWVudChpdGVtTnVtYmVyKTsKKyAgICAgICAgZnVuY3Rpb24uY2FsbCgpOworICAgIH0KKyAg
ICAKKyAgICB2aXJ0dWFsIHZvaWQgY29udGV4dE1lbnVDbGVhcmVkKCkKKyAgICB7CisKKyAgICAg
ICAgaWYgKG1fZnJvbnRlbmRDbGllbnQpIHsKKyAgICAgICAgICAgIFNjcmlwdEZ1bmN0aW9uQ2Fs
bCBmdW5jdGlvbihtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7CisgICAgICAgICAgICBmdW5j
dGlvbi5hcHBlbmRBcmd1bWVudCgiY29udGV4dE1lbnVDbGVhcmVkIik7CisgICAgICAgICAgICBm
dW5jdGlvbi5jYWxsKCk7CisKKyAgICAgICAgICAgIG1fZnJvbnRlbmRDbGllbnQtPm1fbWVudVBy
b3ZpZGVyID0gMDsKKyAgICAgICAgfQorICAgICAgICBkZWxldGVBbGxWYWx1ZXMobV9pdGVtcyk7
CisgICAgICAgIG1faXRlbXMuY2xlYXIoKTsKKyAgICB9CisKKyAgICBJbnNwZWN0b3JGcm9udGVu
ZENsaWVudExvY2FsKiBtX2Zyb250ZW5kQ2xpZW50OworICAgIFNjcmlwdE9iamVjdCBtX3dlYklu
c3BlY3RvcjsKKyAgICBWZWN0b3I8Q29udGV4dE1lbnVJdGVtKj4gbV9pdGVtczsKK307CisKK3N0
YXRpYyBjb25zdCBjaGFyKiBjb25zdCBpbnNwZWN0b3JBdHRhY2hlZEhlaWdodE5hbWUgPSAiaW5z
cGVjdG9yQXR0YWNoZWRIZWlnaHQiOworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGRlZmF1bHRBdHRh
Y2hlZEhlaWdodCA9IDMwMDsKK3N0YXRpYyBjb25zdCBmbG9hdCBtaW5pbXVtQXR0YWNoZWRIZWln
aHQgPSAyNTAuMGY7CitzdGF0aWMgY29uc3QgZmxvYXQgbWF4aW11bUF0dGFjaGVkSGVpZ2h0UmF0
aW8gPSAwLjc1ZjsKKworSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6SW5zcGVjdG9yRnJv
bnRlbmRDbGllbnRMb2NhbChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVy
LCBQYWdlKiBmcm9udGVuZFBhZ2UpCisgICAgOiBtX2luc3BlY3RvckNvbnRyb2xsZXIoaW5zcGVj
dG9yQ29udHJvbGxlcikKKyAgICAsIG1fZnJvbnRlbmRQYWdlKGZyb250ZW5kUGFnZSkKKyAgICAs
IG1fZnJvbnRlbmRTY3JpcHRTdGF0ZSgwKQorICAgICwgbV9tZW51UHJvdmlkZXIoMCkKK3sKK30K
KworSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6fkluc3BlY3RvckZyb250ZW5kQ2xpZW50
TG9jYWwoKQoreworICAgIGlmIChtX2Zyb250ZW5kSG9zdCkKKyAgICAgICAgbV9mcm9udGVuZEhv
c3QtPmRpc2Nvbm5lY3RDbGllbnQoKTsKKyAgICBpZiAobV9tZW51UHJvdmlkZXIpCisgICAgICAg
IG1fbWVudVByb3ZpZGVyLT5kaXNjb25uZWN0KCk7CisgICAgbV9mcm9udGVuZFNjcmlwdFN0YXRl
ID0gMDsKKyAgICBtX2Zyb250ZW5kUGFnZSA9IDA7CisgICAgbV9pbnNwZWN0b3JDb250cm9sbGVy
ID0gMDsKK30KKyAgICAKK3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6d2luZG93
T2JqZWN0Q2xlYXJlZCgpCit7CisgICAgLy8gR3JhbnQgdGhlIGluc3BlY3RvciB0aGUgYWJpbGl0
eSB0byBzY3JpcHQgdGhlIGluc3BlY3RlZCBwYWdlLgorICAgIG1fZnJvbnRlbmRQYWdlLT5tYWlu
RnJhbWUoKS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+Z3JhbnRVbml2ZXJzYWxBY2Nl
c3MoKTsKKyAgICAvLyBGSVhNRTogZG9uJ3Qga2VlcCByZWZlcmVuY2UgdG8gdGhlIHNjcmlwdCBz
dGF0ZQorICAgIG1fZnJvbnRlbmRTY3JpcHRTdGF0ZSA9IHNjcmlwdFN0YXRlRnJvbVBhZ2UoZGVi
dWdnZXJXb3JsZCgpLCBtX2Zyb250ZW5kUGFnZSk7CisgICAgU2NyaXB0R2xvYmFsT2JqZWN0Ojpz
ZXQobV9mcm9udGVuZFNjcmlwdFN0YXRlLCAiSW5zcGVjdG9yQmFja2VuZCIsIG1faW5zcGVjdG9y
Q29udHJvbGxlci0+aW5zcGVjdG9yQmFja2VuZCgpKTsKKyAgICBtX2Zyb250ZW5kSG9zdCA9IElu
c3BlY3RvckZyb250ZW5kSG9zdDo6Y3JlYXRlKHRoaXMpOworICAgIFNjcmlwdEdsb2JhbE9iamVj
dDo6c2V0KG1fZnJvbnRlbmRTY3JpcHRTdGF0ZSwgIkluc3BlY3RvckZyb250ZW5kSG9zdCIsIG1f
ZnJvbnRlbmRIb3N0LmdldCgpKTsKK30KKwordm9pZCBJbnNwZWN0b3JGcm9udGVuZENsaWVudExv
Y2FsOjpmcm9udGVuZExvYWRlZCgpCit7CisgICAgYnJpbmdUb0Zyb250KCk7CisgICAgLy8gQ3Jl
YXRlIEluc3BlY3RvckZyb250ZW5kIGFuZCBzZXQgaXQgdG8gSW5zcGVjdG9yQ29udHJvbGxlci4K
KyAgICBBU1NFUlQobV9mcm9udGVuZFNjcmlwdFN0YXRlKTsKKyAgICBTY3JpcHRPYmplY3Qgd2Vi
SW5zcGVjdG9yT2JqOworICAgIGlmICghU2NyaXB0R2xvYmFsT2JqZWN0OjpnZXQobV9mcm9udGVu
ZFNjcmlwdFN0YXRlLCAiV2ViSW5zcGVjdG9yIiwgd2ViSW5zcGVjdG9yT2JqKSkgeworICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2lu
c3BlY3RvckNvbnRyb2xsZXItPnNldEZyb250ZW5kKG5ldyBJbnNwZWN0b3JGcm9udGVuZCh3ZWJJ
bnNwZWN0b3JPYmopKTsKK30KKworYm9vbCBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjpj
YW5BdHRhY2hXaW5kb3coKQoreworICAgIHVuc2lnbmVkIGluc3BlY3RlZFBhZ2VIZWlnaHQgPSBt
X2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RlZFBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXco
KS0+dmlzaWJsZUhlaWdodCgpOworCisgICAgLy8gRG9uJ3QgYWxsb3cgdGhlIGF0dGFjaCBpZiB0
aGUgd2luZG93IHdvdWxkIGJlIHRvbyBzbWFsbCB0byBhY2NvbW1vZGF0ZSB0aGUgbWluaW11bSBp
bnNwZWN0b3IgaGVpZ2h0LgorICAgIHJldHVybiBtaW5pbXVtQXR0YWNoZWRIZWlnaHQgPD0gaW5z
cGVjdGVkUGFnZUhlaWdodCAqIG1heGltdW1BdHRhY2hlZEhlaWdodFJhdGlvOworfQorCit2b2lk
IEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OmNoYW5nZUF0dGFjaGVkV2luZG93SGVpZ2h0
KHVuc2lnbmVkIGhlaWdodCkKK3sKKyAgICB1bnNpZ25lZCB0b3RhbEhlaWdodCA9IG1fZnJvbnRl
bmRQYWdlLT5tYWluRnJhbWUoKS0+dmlldygpLT52aXNpYmxlSGVpZ2h0KCkgKyBtX2luc3BlY3Rv
ckNvbnRyb2xsZXItPmluc3BlY3RlZFBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+dmlzaWJs
ZUhlaWdodCgpOworICAgIHVuc2lnbmVkIGF0dGFjaGVkSGVpZ2h0ID0gY29uc3RyYWluZWRBdHRh
Y2hlZFdpbmRvd0hlaWdodChoZWlnaHQsIHRvdGFsSGVpZ2h0KTsKKyAgICBtX2luc3BlY3RvckNv
bnRyb2xsZXItPnNldFNldHRpbmcoaW5zcGVjdG9yQXR0YWNoZWRIZWlnaHROYW1lLCBTdHJpbmc6
Om51bWJlcihhdHRhY2hlZEhlaWdodCkpOworICAgIHNldEF0dGFjaGVkV2luZG93SGVpZ2h0KGF0
dGFjaGVkSGVpZ2h0KTsKK30KKwordm9pZCBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjpt
b3ZlV2luZG93QnkoZmxvYXQgeCwgZmxvYXQgeSkKK3sKKyAgICBGbG9hdFJlY3QgZnJhbWVSZWN0
ID0gbV9mcm9udGVuZFBhZ2UtPmNocm9tZSgpLT53aW5kb3dSZWN0KCk7CisgICAgZnJhbWVSZWN0
Lm1vdmUoeCwgeSk7CisgICAgbV9mcm9udGVuZFBhZ2UtPmNocm9tZSgpLT5zZXRXaW5kb3dSZWN0
KGZyYW1lUmVjdCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6c2hv
d0NvbnRleHRNZW51KEV2ZW50KiBldmVudCwgY29uc3QgVmVjdG9yPENvbnRleHRNZW51SXRlbSo+
JiBpdGVtcykKK3sKKyAgICBTY3JpcHRPYmplY3Qgd2ViSW5zcGVjdG9yT2JqOworICAgIGlmICgh
U2NyaXB0R2xvYmFsT2JqZWN0OjpnZXQobV9mcm9udGVuZFNjcmlwdFN0YXRlLCAiV2ViSW5zcGVj
dG9yIiwgd2ViSW5zcGVjdG9yT2JqKSkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBSZWZQdHI8RnJvbnRlbmRNZW51UHJv
dmlkZXI+IG1lbnVQcm92aWRlciA9IEZyb250ZW5kTWVudVByb3ZpZGVyOjpjcmVhdGUodGhpcywg
d2ViSW5zcGVjdG9yT2JqLCBpdGVtcyk7CisgICAgQ29udGV4dE1lbnVDb250cm9sbGVyKiBtZW51
Q29udHJvbGxlciA9IG1fZnJvbnRlbmRQYWdlLT5jb250ZXh0TWVudUNvbnRyb2xsZXIoKTsKKyAg
ICBtZW51Q29udHJvbGxlci0+c2hvd0NvbnRleHRNZW51KGV2ZW50LCBtZW51UHJvdmlkZXIpOwor
ICAgIG1fbWVudVByb3ZpZGVyID0gbWVudVByb3ZpZGVyLmdldCgpOworfQorCit2b2lkIEluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OnNldEF0dGFjaGVkV2luZG93KGJvb2wgYXR0YWNoZWQp
Cit7CisgICAgU2NyaXB0T2JqZWN0IHdlYkluc3BlY3Rvck9iajsKKyAgICBpZiAoIVNjcmlwdEds
b2JhbE9iamVjdDo6Z2V0KG1fZnJvbnRlbmRTY3JpcHRTdGF0ZSwgIldlYkluc3BlY3RvciIsIHdl
Ykluc3BlY3Rvck9iaikpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKHdlYkluc3Bl
Y3Rvck9iaiwgImRpc3BhdGNoIik7IAorICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KCJzZXRB
dHRhY2hlZFdpbmRvdyIpOworICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGF0dGFjaGVkKTsK
KyAgICBmdW5jdGlvbi5jYWxsKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRM
b2NhbDo6cmVzdG9yZUF0dGFjaGVkV2luZG93SGVpZ2h0KCkKK3sKKyAgICB1bnNpZ25lZCBpbnNw
ZWN0ZWRQYWdlSGVpZ2h0ID0gbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0ZWRQYWdlKCkt
Pm1haW5GcmFtZSgpLT52aWV3KCktPnZpc2libGVIZWlnaHQoKTsKKyAgICBTdHJpbmcgYXR0YWNo
ZWRIZWlnaHQgPSBtX2luc3BlY3RvckNvbnRyb2xsZXItPnNldHRpbmcoaW5zcGVjdG9yQXR0YWNo
ZWRIZWlnaHROYW1lKTsKKyAgICBib29sIHN1Y2Nlc3MgPSB0cnVlOworICAgIGludCBoZWlnaHQg
PSBhdHRhY2hlZEhlaWdodC50b0ludCgmc3VjY2Vzcyk7CisgICAgdW5zaWduZWQgcHJlZmVycmVk
SGVpZ2h0ID0gc3VjY2VzcyA/IGhlaWdodCA6IGRlZmF1bHRBdHRhY2hlZEhlaWdodDsKKyAgICAK
KyAgICAvLyBUaGlzIGNhbGwgbWlnaHQgbm90IGdvIHRocm91Z2ggKGlmIHRoZSB3aW5kb3cgc3Rh
cnRzIG91dCBkZXRhY2hlZCksIGJ1dCBpZiB0aGUgd2luZG93IGlzIGluaXRpYWxseSBjcmVhdGVk
IGF0dGFjaGVkLAorICAgIC8vIEluc3BlY3RvckNvbnRyb2xsZXI6OmF0dGFjaFdpbmRvdyBpcyBu
ZXZlciBjYWxsZWQsIHNvIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRvIHNldCB0aGUgYXR0YWNoZWRX
aW5kb3dIZWlnaHQuCisgICAgLy8gRklYTUU6IENsZWFuIHVwIGNvZGUgc28gd2Ugb25seSBoYXZl
IHRvIGNhbGwgc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQgaW4gSW5zcGVjdG9yQ29udHJvbGxlcjo6
YXR0YWNoV2luZG93CisgICAgc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQoY29uc3RyYWluZWRBdHRh
Y2hlZFdpbmRvd0hlaWdodChwcmVmZXJyZWRIZWlnaHQsIGluc3BlY3RlZFBhZ2VIZWlnaHQpKTsK
K30KKwordW5zaWduZWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6Y29uc3RyYWluZWRB
dHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBwcmVmZXJyZWRIZWlnaHQsIHVuc2lnbmVkIHRv
dGFsV2luZG93SGVpZ2h0KQoreworICAgIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CisgICAgcmV0dXJu
IHJvdW5kZihtYXgobWluaW11bUF0dGFjaGVkSGVpZ2h0LCBtaW48ZmxvYXQ+KHByZWZlcnJlZEhl
aWdodCwgdG90YWxXaW5kb3dIZWlnaHQgKiBtYXhpbXVtQXR0YWNoZWRIZWlnaHRSYXRpbykpKTsK
K30KKyAgICAKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmggYi9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uOTE4YzQ3OQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuaApAQCAtMCwwICsxLDgwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsX2gKKyNkZWZpbmUgSW5zcGVjdG9y
RnJvbnRlbmRDbGllbnRMb2NhbF9oCisKKyNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZENsaWVu
dC5oIgorI2luY2x1ZGUgIlNjcmlwdFN0YXRlLmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxl
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRnJvbnRlbmRNZW51UHJvdmlkZXI7
CitjbGFzcyBJbnNwZWN0b3JDb250cm9sbGVyOworY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmRIb3N0
OworY2xhc3MgUGFnZTsKKworY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbCA6IHB1
YmxpYyBJbnNwZWN0b3JGcm9udGVuZENsaWVudCwgcHVibGljIE5vbmNvcHlhYmxlIHsKK3B1Ymxp
YzoKKyAgICBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsKEluc3BlY3RvckNvbnRyb2xsZXIq
LCBQYWdlKik7CisgICAgdmlydHVhbCB+SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbCgpOwor
ICAgIAorICAgIHZpcnR1YWwgdm9pZCB3aW5kb3dPYmplY3RDbGVhcmVkKCk7CisgICAgdmlydHVh
bCB2b2lkIGZyb250ZW5kTG9hZGVkKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgbW92ZVdpbmRvd0J5
KGZsb2F0IHgsIGZsb2F0IHkpOworCisgICAgdmlydHVhbCBib29sIGNhbkF0dGFjaFdpbmRvdygp
OworICAgIHZpcnR1YWwgdm9pZCBjaGFuZ2VBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCk7
CisKKyAgICB2aXJ0dWFsIHZvaWQgc2hvd0NvbnRleHRNZW51KEV2ZW50KiwgY29uc3QgVmVjdG9y
PENvbnRleHRNZW51SXRlbSo+Jik7CisgICAgCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lk
IHNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkKSA9IDA7CisKKyAgICB2b2lkIHNldEF0
dGFjaGVkV2luZG93KGJvb2wpOworICAgIHZvaWQgcmVzdG9yZUF0dGFjaGVkV2luZG93SGVpZ2h0
KCk7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIHVuc2lnbmVkIGNvbnN0cmFpbmVkQXR0YWNoZWRX
aW5kb3dIZWlnaHQodW5zaWduZWQgcHJlZmVycmVkSGVpZ2h0LCB1bnNpZ25lZCB0b3RhbFdpbmRv
d0hlaWdodCk7CisKKyAgICBmcmllbmQgY2xhc3MgRnJvbnRlbmRNZW51UHJvdmlkZXI7CisgICAg
SW5zcGVjdG9yQ29udHJvbGxlciogbV9pbnNwZWN0b3JDb250cm9sbGVyOworICAgIFBhZ2UqIG1f
ZnJvbnRlbmRQYWdlOworICAgIFNjcmlwdFN0YXRlKiBtX2Zyb250ZW5kU2NyaXB0U3RhdGU7Cisg
ICAgLy8gVE9ETyh5dXJ5cyk6IHRoaXMgcmVmIHNob3VsZG4ndCBiZSBuZWVkZWQuCisgICAgUmVm
UHRyPEluc3BlY3RvckZyb250ZW5kSG9zdD4gbV9mcm9udGVuZEhvc3Q7CisgICAgRnJvbnRlbmRN
ZW51UHJvdmlkZXIqIG1fbWVudVByb3ZpZGVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250
ZW5kSG9zdC5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3Bw
CmluZGV4IGMxYTE3NjEuLjIzYmU0NGMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckZyb250ZW5kSG9zdC5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RnJvbnRlbmRIb3N0LmNwcApAQCAtNDEsOCArNDEsNyBAQAogI2luY2x1ZGUgIkZyYW1lTG9hZGVy
LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIkhUTUxGcmFtZU93bmVy
RWxlbWVudC5oIgotI2luY2x1ZGUgIkluc3BlY3RvckNsaWVudC5oIgotI2luY2x1ZGUgIkluc3Bl
Y3RvckZyb250ZW5kLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaCIKICNp
bmNsdWRlICJJbnNwZWN0b3JSZXNvdXJjZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRl
ICJQYXN0ZWJvYXJkLmgiCkBAIC01NCw2NSArNTMsNzQgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1JbnNwZWN0b3JGcm9udGVuZEhvc3Q6Okluc3BlY3Rv
ckZyb250ZW5kSG9zdChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyLCBJ
bnNwZWN0b3JDbGllbnQqIGNsaWVudCkKLSAgICA6IG1faW5zcGVjdG9yQ29udHJvbGxlcihpbnNw
ZWN0b3JDb250cm9sbGVyKQotICAgICwgbV9jbGllbnQoY2xpZW50KQorSW5zcGVjdG9yRnJvbnRl
bmRIb3N0OjpJbnNwZWN0b3JGcm9udGVuZEhvc3QoSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQqIGNs
aWVudCkKKyAgICA6IG1fY2xpZW50KGNsaWVudCkKIHsKIH0KIAogSW5zcGVjdG9yRnJvbnRlbmRI
b3N0Ojp+SW5zcGVjdG9yRnJvbnRlbmRIb3N0KCkKIHsKLSAgICBpZiAobV9tZW51UHJvdmlkZXIp
Ci0gICAgICAgIG1fbWVudVByb3ZpZGVyLT5kaXNjb25uZWN0KCk7CisgICAgQVNTRVJUKCFtX2Ns
aWVudCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmRIb3N0OjpkaXNjb25uZWN0Q2xpZW50
KCkKK3sKKyAgICBtX2NsaWVudCA9IDA7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmRIb3N0
Ojpsb2FkZWQoKQogewotICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIpCi0gICAgICAgIG1f
aW5zcGVjdG9yQ29udHJvbGxlci0+c2NyaXB0T2JqZWN0UmVhZHkoKTsKKyAgICBpZiAobV9jbGll
bnQpCisgICAgICAgIG1fY2xpZW50LT5mcm9udGVuZExvYWRlZCgpOwogfQogCiB2b2lkIEluc3Bl
Y3RvckZyb250ZW5kSG9zdDo6YXR0YWNoKCkKIHsKLSAgICBpZiAobV9pbnNwZWN0b3JDb250cm9s
bGVyKQotICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmF0dGFjaFdpbmRvdygpOworICAg
IGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPmF0dGFjaFdpbmRvdygpOwogfQogCiB2
b2lkIEluc3BlY3RvckZyb250ZW5kSG9zdDo6ZGV0YWNoKCkKIHsKLSAgICBpZiAobV9pbnNwZWN0
b3JDb250cm9sbGVyKQotICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmRldGFjaFdpbmRv
dygpOworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPmRldGFjaFdpbmRvdygp
OwogfQogCiB2b2lkIEluc3BlY3RvckZyb250ZW5kSG9zdDo6Y2xvc2VXaW5kb3coKQogewotICAg
IGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIpCi0gICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxl
ci0+Y2xvc2VXaW5kb3coKTsKKyAgICBpZiAobV9jbGllbnQpIHsKKyAgICAgICAgbV9jbGllbnQt
PmNsb3NlV2luZG93KCk7CisgICAgICAgIGRpc2Nvbm5lY3RDbGllbnQoKTsgLy8gRGlzY29ubmVj
dCBmcm9tIGNsaWVudC4KKyAgICB9Cit9CisKK3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmRIb3N0Ojpi
cmluZ1RvRnJvbnQoKQoreworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPmJy
aW5nVG9Gcm9udCgpOwogfQogCi12b2lkIEluc3BlY3RvckZyb250ZW5kSG9zdDo6d2luZG93VW5s
b2FkaW5nKCkKK3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmRIb3N0OjppbnNwZWN0ZWRVUkxDaGFuZ2Vk
KGNvbnN0IFN0cmluZyYgbmV3VVJMKQogewotICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIp
Ci0gICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+Y2xvc2UoKTsKKyAgICBpZiAobV9jbGll
bnQpCisgICAgICAgIG1fY2xpZW50LT5pbnNwZWN0ZWRVUkxDaGFuZ2VkKG5ld1VSTCk7CiB9CiAK
IGJvb2wgSW5zcGVjdG9yRnJvbnRlbmRIb3N0OjpjYW5BdHRhY2hXaW5kb3coKSBjb25zdAogewot
ICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIpCi0gICAgICAgIHJldHVybiBtX2luc3BlY3Rv
ckNvbnRyb2xsZXItPmNhbkF0dGFjaFdpbmRvdygpOwotICAgIHJldHVybiBmYWxzZTsKKyAgICBy
ZXR1cm4gbV9jbGllbnQgJiYgbV9jbGllbnQtPmNhbkF0dGFjaFdpbmRvdygpOwogfQogCiB2b2lk
IEluc3BlY3RvckZyb250ZW5kSG9zdDo6c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQg
aGVpZ2h0KQogewotICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIpCi0gICAgICAgIG1faW5z
cGVjdG9yQ29udHJvbGxlci0+c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQoaGVpZ2h0KTsKKyAgICBp
ZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5jaGFuZ2VBdHRhY2hlZFdpbmRvd0hlaWdo
dChoZWlnaHQpOwogfQogCiB2b2lkIEluc3BlY3RvckZyb250ZW5kSG9zdDo6bW92ZVdpbmRvd0J5
KGZsb2F0IHgsIGZsb2F0IHkpIGNvbnN0CiB7Ci0gICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxl
cikKLSAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5tb3ZlV2luZG93QnkoeCwgeSk7Cisg
ICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+bW92ZVdpbmRvd0J5KHgsIHkpOwog
fQogCiBTdHJpbmcgSW5zcGVjdG9yRnJvbnRlbmRIb3N0Ojpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkK
QEAgLTE2MSwzMCArMTY5LDggQEAgdm9pZCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OmNvcHlUZXh0
KGNvbnN0IFN0cmluZyYgdGV4dCkKIAogdm9pZCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OnNob3dD
b250ZXh0TWVudShFdmVudCogZXZlbnQsIGNvbnN0IFZlY3RvcjxDb250ZXh0TWVudUl0ZW0qPiYg
aXRlbXMpCiB7Ci0gICAgaWYgKCFtX2luc3BlY3RvckNvbnRyb2xsZXIpCi0gICAgICAgIHJldHVy
bjsKLSAgICBpZiAoIW1faW5zcGVjdG9yQ29udHJvbGxlci0+d2luZG93VmlzaWJsZSgpKQotICAg
ICAgICByZXR1cm47Ci0KLQotICAgIG1fbWVudVByb3ZpZGVyID0gTWVudVByb3ZpZGVyOjpjcmVh
dGUodGhpcywgaXRlbXMpOwotICAgIENvbnRleHRNZW51Q29udHJvbGxlciogbWVudUNvbnRyb2xs
ZXIgPSBtX2luc3BlY3RvckNvbnRyb2xsZXItPm1fcGFnZS0+Y29udGV4dE1lbnVDb250cm9sbGVy
KCk7Ci0gICAgbWVudUNvbnRyb2xsZXItPnNob3dDb250ZXh0TWVudShldmVudCwgbV9tZW51UHJv
dmlkZXIpOwotfQotCi12b2lkIEluc3BlY3RvckZyb250ZW5kSG9zdDo6Y29udGV4dE1lbnVJdGVt
U2VsZWN0ZWQoQ29udGV4dE1lbnVJdGVtKiBpdGVtKQotewotICAgIGlmIChtX2luc3BlY3RvckNv
bnRyb2xsZXIgJiYgbV9pbnNwZWN0b3JDb250cm9sbGVyLT53aW5kb3dWaXNpYmxlKCkpIHsKLSAg
ICAgICAgaW50IGl0ZW1OdW1iZXIgPSBpdGVtLT5hY3Rpb24oKSAtIENvbnRleHRNZW51SXRlbUJh
c2VDdXN0b21UYWc7Ci0gICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+bV9mcm9udGVuZC0+
Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQoaXRlbU51bWJlcik7Ci0gICAgfQotfQotCi12b2lkIElu
c3BlY3RvckZyb250ZW5kSG9zdDo6Y29udGV4dE1lbnVDbGVhcmVkKCkKLXsKLSAgICBtX21lbnVQ
cm92aWRlciA9IDA7Ci0gICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlciAmJiBtX2luc3BlY3Rv
ckNvbnRyb2xsZXItPndpbmRvd1Zpc2libGUoKSkKLSAgICAgICAgbV9pbnNwZWN0b3JDb250cm9s
bGVyLT5tX2Zyb250ZW5kLT5jb250ZXh0TWVudUNsZWFyZWQoKTsKKyAgICBpZiAobV9jbGllbnQp
CisgICAgICAgIG1fY2xpZW50LT5zaG93Q29udGV4dE1lbnUoZXZlbnQsIGl0ZW1zKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRnJvbnRlbmRIb3N0LmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVu
ZEhvc3QuaAppbmRleCBjYmU2YTliLi5mNWJhOWQ3IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JGcm9udGVuZEhvc3QuaApAQCAtNDMsMjcgKzQzLDI2IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIGNsYXNzIENvbnRleHRNZW51SXRlbTsKIGNsYXNzIEV2ZW50OwogY2xhc3MgSW5zcGVjdG9y
Q2xpZW50OworY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ7CiBjbGFzcyBOb2RlOwogCiBj
bGFzcyBJbnNwZWN0b3JGcm9udGVuZEhvc3QgOiBwdWJsaWMgUmVmQ291bnRlZDxJbnNwZWN0b3JG
cm9udGVuZEhvc3Q+CiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9y
RnJvbnRlbmRIb3N0PiBjcmVhdGUoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJv
bGxlciwgSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5z
cGVjdG9yRnJvbnRlbmRIb3N0PiBjcmVhdGUoSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQqIGNsaWVu
dCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9yRnJvbnRlbmRI
b3N0KGluc3BlY3RvckNvbnRyb2xsZXIsIGNsaWVudCkpOworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IEluc3BlY3RvckZyb250ZW5kSG9zdChjbGllbnQpKTsKICAgICB9CiAKICAgICB+SW5z
cGVjdG9yRnJvbnRlbmRIb3N0KCk7Ci0KLSAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0
b3JDb250cm9sbGVyKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JDb250cm9sbGVyOyB9Ci0KLSAgICB2
b2lkIGRpc2Nvbm5lY3RDb250cm9sbGVyKCkgeyBtX2luc3BlY3RvckNvbnRyb2xsZXIgPSAwOyB9
CisgICAgdm9pZCBkaXNjb25uZWN0Q2xpZW50KCk7CiAKICAgICB2b2lkIGxvYWRlZCgpOwogICAg
IHZvaWQgYXR0YWNoKCk7CiAgICAgdm9pZCBkZXRhY2goKTsKICAgICB2b2lkIGNsb3NlV2luZG93
KCk7Ci0gICAgdm9pZCB3aW5kb3dVbmxvYWRpbmcoKTsKKyAgICB2b2lkIGJyaW5nVG9Gcm9udCgp
OworICAgIHZvaWQgaW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmKTsKIAogICAgIGJv
b2wgY2FuQXR0YWNoV2luZG93KCkgY29uc3Q7CiAgICAgdm9pZCBzZXRBdHRhY2hlZFdpbmRvd0hl
aWdodCh1bnNpZ25lZCBoZWlnaHQpOwpAQCAtODAsNTkgKzc5LDkgQEAgcHVibGljOgogICAgIHZv
aWQgc2hvd0NvbnRleHRNZW51KEV2ZW50KiwgY29uc3QgVmVjdG9yPENvbnRleHRNZW51SXRlbSo+
JiBpdGVtcyk7CiAKIHByaXZhdGU6Ci0gICAgY2xhc3MgTWVudVByb3ZpZGVyIDogcHVibGljIENv
bnRleHRNZW51UHJvdmlkZXIgewotICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8TWVudVByb3ZpZGVyPiBjcmVhdGUoSW5zcGVjdG9yRnJvbnRlbmRIb3N0KiBmcm9udGVuZEhv
c3QsIGNvbnN0IFZlY3RvcjxDb250ZXh0TWVudUl0ZW0qPiYgaXRlbXMpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVudVByb3ZpZGVyKGZyb250ZW5kSG9zdCwg
aXRlbXMpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZpcnR1YWwgfk1lbnVQcm92aWRlcigpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHRNZW51Q2xlYXJlZCgpOwotICAgICAgICB9Ci0K
LSAgICAgICAgdm9pZCBkaXNjb25uZWN0KCkKLSAgICAgICAgewotICAgICAgICAgICAgbV9mcm9u
dGVuZEhvc3QgPSAwOwotICAgICAgICB9Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIHBvcHVsYXRl
Q29udGV4dE1lbnUoQ29udGV4dE1lbnUqIG1lbnUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9pdGVtcy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgICAg
ICBtZW51LT5hcHBlbmRJdGVtKCptX2l0ZW1zW2ldKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZp
cnR1YWwgdm9pZCBjb250ZXh0TWVudUl0ZW1TZWxlY3RlZChDb250ZXh0TWVudUl0ZW0qIGl0ZW0p
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtX2Zyb250ZW5kSG9zdCkKLSAgICAgICAgICAg
ICAgICBtX2Zyb250ZW5kSG9zdC0+Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQoaXRlbSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICB2aXJ0dWFsIHZvaWQgY29udGV4dE1lbnVDbGVhcmVkKCkKLSAgICAg
ICAgewotICAgICAgICAgICAgaWYgKG1fZnJvbnRlbmRIb3N0KQotICAgICAgICAgICAgICAgIG1f
ZnJvbnRlbmRIb3N0LT5jb250ZXh0TWVudUNsZWFyZWQoKTsKLSAgICAgICAgICAgIGRlbGV0ZUFs
bFZhbHVlcyhtX2l0ZW1zKTsKLSAgICAgICAgICAgIG1faXRlbXMuY2xlYXIoKTsKLSAgICAgICAg
fQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgTWVudVByb3ZpZGVyKEluc3BlY3RvckZyb250ZW5k
SG9zdCogZnJvbnRlbmRIb3N0LCAgY29uc3QgVmVjdG9yPENvbnRleHRNZW51SXRlbSo+JiBpdGVt
cykKLSAgICAgICAgICAgIDogbV9mcm9udGVuZEhvc3QoZnJvbnRlbmRIb3N0KQotICAgICAgICAg
ICAgLCBtX2l0ZW1zKGl0ZW1zKSB7IH0KLSAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRIb3N0KiBt
X2Zyb250ZW5kSG9zdDsKLSAgICAgICAgVmVjdG9yPENvbnRleHRNZW51SXRlbSo+IG1faXRlbXM7
Ci0gICAgfTsKLQotICAgIEluc3BlY3RvckZyb250ZW5kSG9zdChJbnNwZWN0b3JDb250cm9sbGVy
KiBpbnNwZWN0b3JDb250cm9sbGVyLCBJbnNwZWN0b3JDbGllbnQqIGNsaWVudCk7Ci0KLSAgICB2
b2lkIGNvbnRleHRNZW51SXRlbVNlbGVjdGVkKENvbnRleHRNZW51SXRlbSopOwotICAgIHZvaWQg
Y29udGV4dE1lbnVDbGVhcmVkKCk7Ci0KLSAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBtX2luc3Bl
Y3RvckNvbnRyb2xsZXI7Ci0gICAgSW5zcGVjdG9yQ2xpZW50KiBtX2NsaWVudDsKLSAgICBSZWZQ
dHI8TWVudVByb3ZpZGVyPiBtX21lbnVQcm92aWRlcjsKKyAgICBJbnNwZWN0b3JGcm9udGVuZEhv
c3QoSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQqIGNsaWVudCk7CisKKyAgICBJbnNwZWN0b3JGcm9u
dGVuZENsaWVudCogbV9jbGllbnQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuaWRsIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmlkbAppbmRleCAxNTBlOWZjLi4w
YWVmNWM0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhv
c3QuaWRsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5pZGwK
QEAgLTM2LDcgKzM2LDggQEAgbW9kdWxlIGNvcmUgewogICAgICAgICB2b2lkIGF0dGFjaCgpOwog
ICAgICAgICB2b2lkIGRldGFjaCgpOwogICAgICAgICB2b2lkIGNsb3NlV2luZG93KCk7Ci0gICAg
ICAgIHZvaWQgd2luZG93VW5sb2FkaW5nKCk7CisgICAgICAgIHZvaWQgYnJpbmdUb0Zyb250KCk7
CisgICAgICAgIHZvaWQgaW5zcGVjdGVkVVJMQ2hhbmdlZChpbiBET01TdHJpbmcgbmV3VVJMKTsK
IAogICAgICAgICBib29sZWFuIGNhbkF0dGFjaFdpbmRvdygpOwogICAgICAgICB2b2lkIHNldEF0
dGFjaGVkV2luZG93SGVpZ2h0KGluIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KTsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlLmNwcCBiL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvclJlc291cmNlLmNwcAppbmRleCBiNmI2MDU3Li43YTBiNDZlIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZS5jcHAKKysrIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2UuY3BwCkBAIC0yMTMsMTUgKzIxMywxMiBAQCB2
b2lkIEluc3BlY3RvclJlc291cmNlOjp1cGRhdGVTY3JpcHRPYmplY3QoSW5zcGVjdG9yRnJvbnRl
bmQqIGZyb250ZW5kKQogICAgICAgICBtX2NoYW5nZXMuY2xlYXJBbGwoKTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JSZXNvdXJjZTo6cmVsZWFzZVNjcmlwdE9iamVjdChJbnNwZWN0b3JGcm9udGVuZCog
ZnJvbnRlbmQsIGJvb2wgY2FsbFJlbW92ZVJlc291cmNlKQordm9pZCBJbnNwZWN0b3JSZXNvdXJj
ZTo6cmVsZWFzZVNjcmlwdE9iamVjdChJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQpCiB7CiAg
ICAgbV9jaGFuZ2VzLnNldEFsbCgpOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3Jl
ZGlyZWN0cy5zaXplKCk7ICsraSkKLSAgICAgICAgbV9yZWRpcmVjdHNbaV0tPnJlbGVhc2VTY3Jp
cHRPYmplY3QoZnJvbnRlbmQsIGNhbGxSZW1vdmVSZXNvdXJjZSk7Ci0KLSAgICBpZiAoIWNhbGxS
ZW1vdmVSZXNvdXJjZSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICBtX3JlZGlyZWN0c1tpXS0+
cmVsZWFzZVNjcmlwdE9iamVjdChmcm9udGVuZCk7CiAKICAgICBmcm9udGVuZC0+cmVtb3ZlUmVz
b3VyY2UobV9pZGVudGlmaWVyKTsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclJlc291cmNlLmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZS5o
CmluZGV4IGQzNDdlNWMuLjk3NDZlMWYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclJlc291cmNlLmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3Vy
Y2UuaApAQCAtNzksNyArNzksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgUGFz
c1JlZlB0cjxJbnNwZWN0b3JSZXNvdXJjZT4gYXBwZW5kUmVkaXJlY3QodW5zaWduZWQgbG9uZyBp
ZGVudGlmaWVyLCBjb25zdCBLVVJMJiByZWRpcmVjdFVSTCk7CiAgICAgICAgIHZvaWQgdXBkYXRl
U2NyaXB0T2JqZWN0KEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCk7Ci0gICAgICAgIHZvaWQg
cmVsZWFzZVNjcmlwdE9iamVjdChJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQsIGJvb2wgY2Fs
bFJlbW92ZVJlc291cmNlKTsKKyAgICAgICAgdm9pZCByZWxlYXNlU2NyaXB0T2JqZWN0KEluc3Bl
Y3RvckZyb250ZW5kKiBmcm9udGVuZCk7CiAKICAgICAgICAgdm9pZCB1cGRhdGVSZXF1ZXN0KGNv
bnN0IFJlc291cmNlUmVxdWVzdCYpOwogICAgICAgICB2b2lkIHVwZGF0ZVJlc3BvbnNlKGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9JbnNwZWN0b3JGcm9udGVuZEhvc3RTdHViLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL0luc3BlY3RvckZyb250ZW5kSG9zdFN0dWIuanMKaW5kZXggZWZmMjUxOC4uNTQ1NjA2
OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckZyb250
ZW5kSG9zdFN0dWIuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3Rv
ckZyb250ZW5kSG9zdFN0dWIuanMKQEAgLTQ4LDYgKzQ4LDExIEBAIFdlYkluc3BlY3Rvci5JbnNw
ZWN0b3JGcm9udGVuZEhvc3RTdHViLnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJuICJ1bmtu
b3duIjsKICAgICB9LAogCisgICAgYnJpbmdUb0Zyb250OiBmdW5jdGlvbigpCisgICAgeworICAg
ICAgICB0aGlzLl93aW5kb3dWaXNpYmxlID0gdHJ1ZTsKKyAgICB9LAorCiAgICAgY2xvc2VXaW5k
b3c6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIHRoaXMuX3dpbmRvd1Zpc2libGUgPSBmYWxz
ZTsKQEAgLTg3LDcgKzkyLDcgQEAgV2ViSW5zcGVjdG9yLkluc3BlY3RvckZyb250ZW5kSG9zdFN0
dWIucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4gIiI7CiAgICAgfSwKIAotICAgIHdpbmRv
d1VubG9hZGluZzogZnVuY3Rpb24oKQorICAgIGluc3BlY3RlZFVSTENoYW5nZWQ6IGZ1bmN0aW9u
KHVybCkKICAgICB7CiAgICAgfSwKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL2luc3BlY3Rvci5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0
b3IuanMKaW5kZXggZWI0MGEyOC4uMWQyYzQ2ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvaW5zcGVjdG9yLmpzCkBAIC00NzgsNyArNDc4LDYgQEAgV2ViSW5zcGVjdG9yLmxvYWRlZCA9
IGZ1bmN0aW9uKCkKIAogICAgIHRoaXMuYWRkTWFpbkV2ZW50TGlzdGVuZXJzKGRvY3VtZW50KTsK
IAotICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ1bmxvYWQiLCB0aGlzLndpbmRvd1VubG9h
ZC5iaW5kKHRoaXMpLCB0cnVlKTsKICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXpl
IiwgdGhpcy53aW5kb3dSZXNpemUuYmluZCh0aGlzKSwgdHJ1ZSk7CiAKICAgICBkb2N1bWVudC5h
ZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsIHRoaXMuZm9jdXNDaGFuZ2VkLmJpbmQodGhpcyksIHRy
dWUpOwpAQCAtNTYyLDExICs1NjEsNiBAQCBXZWJJbnNwZWN0b3IuZGlzcGF0Y2ggPSBmdW5jdGlv
bigpIHsKICAgICBzZXRUaW1lb3V0KGRlbGF5RGlzcGF0Y2gsIDApOwogfQogCi1XZWJJbnNwZWN0
b3Iud2luZG93VW5sb2FkID0gZnVuY3Rpb24oZXZlbnQpCi17Ci0gICAgSW5zcGVjdG9yRnJvbnRl
bmRIb3N0LndpbmRvd1VubG9hZGluZygpOwotfQotCiBXZWJJbnNwZWN0b3Iud2luZG93UmVzaXpl
ID0gZnVuY3Rpb24oZXZlbnQpCiB7CiAgICAgaWYgKHRoaXMuY3VycmVudFBhbmVsKQpAQCAtNjA0
LDkgKzU5OCwxNyBAQCBXZWJJbnNwZWN0b3Iuc2V0QXR0YWNoZWRXaW5kb3cgPSBmdW5jdGlvbihh
dHRhY2hlZCkKIAogV2ViSW5zcGVjdG9yLmNsb3NlID0gZnVuY3Rpb24oZXZlbnQpCiB7CisgICAg
aWYgKHRoaXMuX2lzQ2xvc2luZykKKyAgICAgICAgcmV0dXJuOworICAgIHRoaXMuX2lzQ2xvc2lu
ZyA9IHRydWU7CiAgICAgSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNsb3NlV2luZG93KCk7CiB9CiAK
K1dlYkluc3BlY3Rvci5pbnNwZWN0ZWRQYWdlRGVzdHJveWVkID0gZnVuY3Rpb24oKQoreworICAg
IFdlYkluc3BlY3Rvci5jbG9zZSgpOworfQorCiBXZWJJbnNwZWN0b3IuZG9jdW1lbnRNb3VzZU92
ZXIgPSBmdW5jdGlvbihldmVudCkKIHsKICAgICBpZiAoZXZlbnQudGFyZ2V0LnRhZ05hbWUgIT09
ICJBIikKQEAgLTEzMjEsNiArMTMyMywxNiBAQCBXZWJJbnNwZWN0b3IucmVzZXQgPSBmdW5jdGlv
bigpCiAgICAgdGhpcy5jb25zb2xlLmNsZWFyTWVzc2FnZXMoKTsKIH0KIAorV2ViSW5zcGVjdG9y
LmJyaW5nVG9Gcm9udCA9IGZ1bmN0aW9uKCkKK3sKKyAgICBJbnNwZWN0b3JGcm9udGVuZEhvc3Qu
YnJpbmdUb0Zyb250KCk7Cit9CisKK1dlYkluc3BlY3Rvci5pbnNwZWN0ZWRVUkxDaGFuZ2VkID0g
ZnVuY3Rpb24odXJsKQoreworICAgIEluc3BlY3RvckZyb250ZW5kSG9zdC5pbnNwZWN0ZWRVUkxD
aGFuZ2VkKHVybCk7Cit9CisKIFdlYkluc3BlY3Rvci5yZXNvdXJjZVVSTENoYW5nZWQgPSBmdW5j
dGlvbihyZXNvdXJjZSwgb2xkVVJMKQogewogICAgIGRlbGV0ZSB0aGlzLnJlc291cmNlVVJMTWFw
W29sZFVSTF07CmRpZmYgLS1naXQgYS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaCBiL1dl
YkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCmluZGV4IGEyNjczNzQuLjhiY2U1MjkgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCisrKyBiL1dlYkNvcmUvbG9hZGVy
L0VtcHR5Q2xpZW50cy5oCkBAIC00NzEsMjkgKzQ3MSwxNCBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB+RW1wdHlJbnNwZWN0b3JDbGllbnQoKSB7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0
b3JEZXN0cm95ZWQoKSB7IH0KLQotICAgIHZpcnR1YWwgUGFnZSogY3JlYXRlUGFnZSgpIHsgcmV0
dXJuIDA7IH07Ci0KLSAgICB2aXJ0dWFsIFN0cmluZyBsb2NhbGl6ZWRTdHJpbmdzVVJMKCkgeyBy
ZXR1cm4gU3RyaW5nKCk7IH0KLQotICAgIHZpcnR1YWwgU3RyaW5nIGhpZGRlblBhbmVscygpIHsg
cmV0dXJuIFN0cmluZygpOyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2hvd1dpbmRvdygpIHsgfQot
ICAgIHZpcnR1YWwgdm9pZCBjbG9zZVdpbmRvdygpIHsgfQotCi0gICAgdmlydHVhbCB2b2lkIGF0
dGFjaFdpbmRvdygpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hXaW5kb3coKSB7IH0KLQot
ICAgIHZpcnR1YWwgdm9pZCBzZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCkgeyB9Cisg
ICAgCisgICAgdmlydHVhbCB2b2lkIG9wZW5JbnNwZWN0b3JGcm9udGVuZChJbnNwZWN0b3JDb250
cm9sbGVyKikgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgaGlnaGxpZ2h0KE5vZGUqKSB7IH0KICAg
ICB2aXJ0dWFsIHZvaWQgaGlkZUhpZ2hsaWdodCgpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBpbnNw
ZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYpIHsgfQogCiAgICAgdmlydHVhbCB2b2lkIHBv
cHVsYXRlU2V0dGluZyhjb25zdCBTdHJpbmcmLCBTdHJpbmcqKSB7IH0KICAgICB2aXJ0dWFsIHZv
aWQgc3RvcmVTZXR0aW5nKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpIHsgfQotCi0gICAg
dmlydHVhbCB2b2lkIGluc3BlY3RvcldpbmRvd09iamVjdENsZWFyZWQoKSB7IH0KIH07CiAKIH0K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcCBiL1dlYkNvcmUvbG9h
ZGVyL0ZyYW1lTG9hZGVyLmNwcAppbmRleCA1NGM3OTcyLi5lMTBiNThmIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKKysrIGIvV2ViQ29yZS9sb2FkZXIvRnJhbWVM
b2FkZXIuY3BwCkBAIC0zOTQ0LDggKzM5NDQsNiBAQCB2b2lkIEZyYW1lTG9hZGVyOjpkaXNwYXRj
aERpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZChET01XcmFwcGVyV29ybGQqIHdvcmxkKQogICAg
IGlmIChQYWdlKiBwYWdlID0gbV9mcmFtZS0+cGFnZSgpKSB7CiAgICAgICAgIGlmIChJbnNwZWN0
b3JDb250cm9sbGVyKiBpbnNwZWN0b3IgPSBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCkpCiAg
ICAgICAgICAgICBpbnNwZWN0b3ItPmluc3BlY3RlZFdpbmRvd1NjcmlwdE9iamVjdENsZWFyZWQo
bV9mcmFtZSk7Ci0gICAgICAgIGlmIChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3IgPSBw
YWdlLT5wYXJlbnRJbnNwZWN0b3JDb250cm9sbGVyKCkpCi0gICAgICAgICAgICBpbnNwZWN0b3It
PndpbmRvd1NjcmlwdE9iamVjdEF2YWlsYWJsZSgpOwogICAgIH0KICNlbmRpZgogfQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwIGIvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCmluZGV4
IDdkMWU2MjQuLmQ2NmU0OTcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAorKysg
Yi9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKQEAgLTEzOCw5ICsxMzgsNiBAQCBQYWdlOjpQYWdlKENo
cm9tZUNsaWVudCogY2hyb21lQ2xpZW50LCBDb250ZXh0TWVudUNsaWVudCogY29udGV4dE1lbnVD
bGllbnQsIEVkaQogICAgICwgbV9hcmVNZW1vcnlDYWNoZUNsaWVudENhbGxzRW5hYmxlZCh0cnVl
KQogICAgICwgbV9tZWRpYVZvbHVtZSgxKQogICAgICwgbV9qYXZhU2NyaXB0VVJMc0FyZUFsbG93
ZWQodHJ1ZSkKLSNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgICwgbV9wYXJlbnRJbnNwZWN0b3JD
b250cm9sbGVyKDApCi0jZW5kaWYKICAgICAsIG1fZGlkTG9hZFVzZXJTdHlsZVNoZWV0KGZhbHNl
KQogICAgICwgbV91c2VyU3R5bGVTaGVldE1vZGlmaWNhdGlvblRpbWUoMCkKICAgICAsIG1fZ3Jv
dXAoMCkKQEAgLTE5Niw4ICsxOTMsNiBAQCBQYWdlOjp+UGFnZSgpCiAKICAgICBtX2VkaXRvckNs
aWVudC0+cGFnZURlc3Ryb3llZCgpOwogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKG1f
cGFyZW50SW5zcGVjdG9yQ29udHJvbGxlcikKLSAgICAgICAgbV9wYXJlbnRJbnNwZWN0b3JDb250
cm9sbGVyLT5wYWdlRGVzdHJveWVkKCk7CiAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNw
ZWN0ZWRQYWdlRGVzdHJveWVkKCk7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdl
L1BhZ2UuaCBiL1dlYkNvcmUvcGFnZS9QYWdlLmgKaW5kZXggZjY5ODI4Ny4uOTRlNmRkNSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9wYWdlL1BhZ2UuaAorKysgYi9XZWJDb3JlL3BhZ2UvUGFnZS5oCkBA
IC0xNDksMTEgKzE0OSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNlbmRpZgogICAgICAgICBT
ZXR0aW5ncyogc2V0dGluZ3MoKSBjb25zdCB7IHJldHVybiBtX3NldHRpbmdzLmdldCgpOyB9CiAg
ICAgICAgIFByb2dyZXNzVHJhY2tlciogcHJvZ3Jlc3MoKSBjb25zdCB7IHJldHVybiBtX3Byb2dy
ZXNzLmdldCgpOyB9Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgICAgICB2b2lkIHNldFBh
cmVudEluc3BlY3RvckNvbnRyb2xsZXIoSW5zcGVjdG9yQ29udHJvbGxlciogY29udHJvbGxlcikg
eyBtX3BhcmVudEluc3BlY3RvckNvbnRyb2xsZXIgPSBjb250cm9sbGVyOyB9Ci0gICAgICAgIElu
c3BlY3RvckNvbnRyb2xsZXIqIHBhcmVudEluc3BlY3RvckNvbnRyb2xsZXIoKSBjb25zdCB7IHJl
dHVybiBtX3BhcmVudEluc3BlY3RvckNvbnRyb2xsZXI7IH0KLSNlbmRpZgogICAgICAgICAKICAg
ICAgICAgdm9pZCBzZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMoYm9vbCBiKSB7IG1fdGFi
S2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzID0gYjsgfQogICAgICAgICBib29sIHRhYktleUN5Y2xl
c1Rocm91Z2hFbGVtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fdGFiS2V5Q3ljbGVzVGhyb3VnaEVs
ZW1lbnRzOyB9CkBAIC0yODYsMTAgKzI4MSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAg
ICAgICBib29sIG1famF2YVNjcmlwdFVSTHNBcmVBbGxvd2VkOwogCi0jaWYgRU5BQkxFKElOU1BF
Q1RPUikKLSAgICAgICAgSW5zcGVjdG9yQ29udHJvbGxlciogbV9wYXJlbnRJbnNwZWN0b3JDb250
cm9sbGVyOwotI2VuZGlmCi0KICAgICAgICAgU3RyaW5nIG1fdXNlclN0eWxlU2hlZXRQYXRoOwog
ICAgICAgICBtdXRhYmxlIFN0cmluZyBtX3VzZXJTdHlsZVNoZWV0OwogICAgICAgICBtdXRhYmxl
IGJvb2wgbV9kaWRMb2FkVXNlclN0eWxlU2hlZXQ7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRm
b3JtL0NvbnRleHRNZW51LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1lbnUuY3BwCmlu
ZGV4IDI4M2FhNTYuLjAwMjJhNDcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vQ29udGV4
dE1lbnUuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1lbnUuY3BwCkBAIC0zNTks
NiArMzU5LDkgQEAgdm9pZCBDb250ZXh0TWVudTo6cG9wdWxhdGUoKQogICAgICAgICAgICAgICAg
IGFwcGVuZEl0ZW0oU3BlZWNoTWVudUl0ZW0pOwogI2VuZGlmICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgfSBlbHNlIHsKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorICAgICAgICAgICAgICAg
IGlmICghKGZyYW1lLT5wYWdlKCkgJiYgZnJhbWUtPnBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxl
cigpLT5oYXNJbnNwZWN0b3JGcm9udGVuZENsaWVudCgpKSkgeworI2VuZGlmCiAjaWYgUExBVEZP
Uk0oR1RLKQogICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oQmFja0l0ZW0pOwogICAgICAgICAg
ICAgICAgIGFwcGVuZEl0ZW0oRm9yd2FyZEl0ZW0pOwpAQCAtMzc4LDYgKzM4MSw5IEBAIHZvaWQg
Q29udGV4dE1lbnU6OnBvcHVsYXRlKCkKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAg
ICAgICAgICAgIGFwcGVuZEl0ZW0oUmVsb2FkSXRlbSk7CiAjZW5kaWYKKyNpZiBFTkFCTEUoSU5T
UEVDVE9SKQorICAgICAgICAgICAgICAgIH0KKyNlbmRpZgogCiAgICAgICAgICAgICAgICAgaWYg
KGZyYW1lLT5wYWdlKCkgJiYgZnJhbWUgIT0gZnJhbWUtPnBhZ2UoKS0+bWFpbkZyYW1lKCkpCiAg
ICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oT3BlbkZyYW1lSXRlbSk7CkBAIC01NTAsNyAr
NTU2LDYgQEAgdm9pZCBDb250ZXh0TWVudTo6YWRkSW5zcGVjdEVsZW1lbnRJdGVtKCkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgQ29udGV4dE1lbnVJdGVtIEluc3BlY3RFbGVtZW50SXRlbShBY3Rp
b25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdJbnNwZWN0RWxlbWVudCwgY29udGV4dE1lbnVJdGVt
VGFnSW5zcGVjdEVsZW1lbnQoKSk7Ci0gICAgYXBwZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgpKTsK
ICAgICBhcHBlbmRJdGVtKEluc3BlY3RFbGVtZW50SXRlbSk7CiB9CiAjZW5kaWYgLy8gRU5BQkxF
KElOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGU2M2ZjYjUuLjIxNTlhNTMgMTAwNjQ0Ci0tLSBh
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDI5IEBACisyMDEwLTAzLTExICBZdXJ5IFNlbWlraGF0c2t5IDx5dXJ5c0Bj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgSW50cm9kdWNlIEluc3BlY3RvckZyb250ZW5kQ2xpZW50IHRoYXQgcHJvdmlkZXMgSW5z
cGVjdG9yRnJvbnRlbmQgd2l0aCBhbiBpbnRlcmZhY2UgdG8gdGhlIGVtYmVkZGVyLiBJbnNwZWN0
b3JDbGllbnQgbm93IHNlcnZlcyBhcyBhIGRlbGVnYXRlIGZvciBJbnNwZWN0b3JDb250cm9sbGVy
IGFuZCBkb2VzIG5vdCBjb250YWluIG1ldGhvZHMgZm9yIG1hbmFnaW5nIGluc3BlY3RvciBmcm9u
dGVuZCB3aW5kb3cuIFRoYXQgYWxsb3dzIHRvIGNyZWF0ZSByZW1vdGUgSW5zcGVjdG9yRnJvbnRl
bmRIb3N0LgorCisgICAgICAgIEludHJvZHVjZSBJbnNwZWN0b3JGcm9udGVuZENsaWVudCB0aGF0
IHdvdWxkIHByb3ZpZGUgSW5zcGVjdG9yRnJvbnRlbmQgd2l0aCBhbiBpbnRlcmZhY2UgdG8gdGhl
IGVtYmVkZGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0zNTAzNgorCisgICAgICAgICogc3JjL0luc3BlY3RvckNsaWVudEltcGwuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpJbnNwZWN0b3JDbGllbnRJbXBsOjpvcGVuSW5zcGVjdG9yRnJvbnRlbmQpOgor
ICAgICAgICAqIHNyYy9JbnNwZWN0b3JDbGllbnRJbXBsLmg6CisgICAgICAgICogc3JjL1dlYkRl
dlRvb2xzQWdlbnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudElt
cGw6OmF0dGFjaCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjpkaWRD
b21taXRQcm92aXNpb25hbExvYWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50
SW1wbDo6Y3JlYXRlSW5zcGVjdG9yRnJvbnRlbmRQcm94eSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkRldlRvb2xzQWdlbnRJbXBsOjpzZXRJbnNwZWN0b3JGcm9udGVuZFByb3h5VG9JbnNwZWN0b3JD
b250cm9sbGVyKToKKyAgICAgICAgKiBzcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuaDoKKyAgICAg
ICAgKiBzcmMvV2ViRGV2VG9vbHNGcm9udGVuZEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6V2ViRGV2VG9vbHNGcm9udGVuZEltcGwpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6anNCcmluZ1RvRnJvbnQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6anNJbnNwZWN0ZWRVUkxDaGFu
Z2VkKToKKyAgICAgICAgKiBzcmMvV2ViRGV2VG9vbHNGcm9udGVuZEltcGwuaDoKKyAgICAgICAg
KiBzcmMvanMvSW5qZWN0RGlzcGF0Y2guanM6CisgICAgICAgIChjbG9zZSk6CisKIDIwMTAtMDMt
MTYgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9JbnNwZWN0b3JDbGllbnRJbXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvSW5zcGVjdG9y
Q2xpZW50SW1wbC5jcHAKaW5kZXggNTQ1NTBkMS4uZjY5ZWY3MiAxMDA2NDQKLS0tIGEvV2ViS2l0
L2Nocm9taXVtL3NyYy9JbnNwZWN0b3JDbGllbnRJbXBsLmNwcAorKysgYi9XZWJLaXQvY2hyb21p
dW0vc3JjL0luc3BlY3RvckNsaWVudEltcGwuY3BwCkBAIC02Myw0NiArNjMsOCBAQCB2b2lkIElu
c3BlY3RvckNsaWVudEltcGw6Omluc3BlY3RvckRlc3Ryb3llZCgpCiAgICAgLy8gT3VyIGxpZmV0
aW1lIGlzIGJvdW5kIHRvIHRoZSBXZWJWaWV3SW1wbC4KIH0KIAotUGFnZSogSW5zcGVjdG9yQ2xp
ZW50SW1wbDo6Y3JlYXRlUGFnZSgpCit2b2lkIEluc3BlY3RvckNsaWVudEltcGw6Om9wZW5JbnNw
ZWN0b3JGcm9udGVuZChJbnNwZWN0b3JDb250cm9sbGVyKikKIHsKLSAgICAvLyBUaGlzIG1ldGhv
ZCBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIGluIENocm9tZSBhcyBpbnNwZWN0b3IgZnJvbnQtZW5k
IGxpdmVzCi0gICAgLy8gaW4gYSBzZXBhcmF0ZSBwcm9jZXNzLgotICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgIHJldHVybiAwOwotfQotCi12b2lkIEluc3BlY3RvckNsaWVudEltcGw6OnNo
b3dXaW5kb3coKQotewotICAgIEFTU0VSVChtX2luc3BlY3RlZFdlYlZpZXctPmRldlRvb2xzQWdl
bnRQcml2YXRlKCkpOwotICAgIG1faW5zcGVjdGVkV2ViVmlldy0+cGFnZSgpLT5pbnNwZWN0b3JD
b250cm9sbGVyKCktPnNldFdpbmRvd1Zpc2libGUodHJ1ZSk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9y
Q2xpZW50SW1wbDo6Y2xvc2VXaW5kb3coKQotewotICAgIGlmIChtX2luc3BlY3RlZFdlYlZpZXct
PnBhZ2UoKSkKLSAgICAgICAgbV9pbnNwZWN0ZWRXZWJWaWV3LT5wYWdlKCktPmluc3BlY3RvckNv
bnRyb2xsZXIoKS0+c2V0V2luZG93VmlzaWJsZShmYWxzZSk7Ci19Ci0KLWJvb2wgSW5zcGVjdG9y
Q2xpZW50SW1wbDo6d2luZG93VmlzaWJsZSgpCi17Ci0gICAgQVNTRVJUKG1faW5zcGVjdGVkV2Vi
Vmlldy0+ZGV2VG9vbHNBZ2VudFByaXZhdGUoKSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12
b2lkIEluc3BlY3RvckNsaWVudEltcGw6OmF0dGFjaFdpbmRvdygpCi17Ci0gICAgLy8gRklYTUU6
IEltcGxlbWVudCB0aGlzCi19Ci0KLXZvaWQgSW5zcGVjdG9yQ2xpZW50SW1wbDo6ZGV0YWNoV2lu
ZG93KCkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMKLX0KLQotdm9pZCBJbnNwZWN0
b3JDbGllbnRJbXBsOjpzZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBpbnQgaGVpZ2h0
KQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcwotICAgIG5vdEltcGxlbWVudGVkKCk7
CiB9CiAKIHN0YXRpYyB2b2lkIGludmFsaWRhdGVOb2RlQm91bmRpbmdSZWN0KFdlYlZpZXdJbXBs
KiB3ZWJWaWV3KQpAQCAtMTMwLDIzICs5Miw2IEBAIHZvaWQgSW5zcGVjdG9yQ2xpZW50SW1wbDo6
aGlkZUhpZ2hsaWdodCgpCiAgICAgaW52YWxpZGF0ZU5vZGVCb3VuZGluZ1JlY3QobV9pbnNwZWN0
ZWRXZWJWaWV3KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDbGllbnRJbXBsOjppbnNwZWN0ZWRVUkxD
aGFuZ2VkKGNvbnN0IFN0cmluZyYgbmV3VVJMKQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQg
dGhpcwotfQotCi1TdHJpbmcgSW5zcGVjdG9yQ2xpZW50SW1wbDo6bG9jYWxpemVkU3RyaW5nc1VS
TCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0K
LVN0cmluZyBJbnNwZWN0b3JDbGllbnRJbXBsOjpoaWRkZW5QYW5lbHMoKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuICIiOwotfQotCiB2b2lkIEluc3BlY3RvckNsaWVudElt
cGw6OnBvcHVsYXRlU2V0dGluZyhjb25zdCBTdHJpbmcmIGtleSwgU3RyaW5nKiB2YWx1ZSkKIHsK
ICAgICBsb2FkU2V0dGluZ3MoKTsKQEAgLTE2MSwxMSArMTA2LDYgQEAgdm9pZCBJbnNwZWN0b3JD
bGllbnRJbXBsOjpzdG9yZVNldHRpbmcoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYg
dmFsdWUpCiAgICAgc2F2ZVNldHRpbmdzKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ2xpZW50SW1w
bDo6aW5zcGVjdG9yV2luZG93T2JqZWN0Q2xlYXJlZCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQogdm9pZCBJbnNwZWN0b3JDbGllbnRJbXBsOjpsb2FkU2V0dGluZ3MoKQogewogICAg
IGlmIChtX3NldHRpbmdzKQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9JbnNwZWN0
b3JDbGllbnRJbXBsLmggYi9XZWJLaXQvY2hyb21pdW0vc3JjL0luc3BlY3RvckNsaWVudEltcGwu
aAppbmRleCA2ZjdmOGIxLi5jY2JjZWY3IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3Jj
L0luc3BlY3RvckNsaWVudEltcGwuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0luc3BlY3Rv
ckNsaWVudEltcGwuaApAQCAtNDUsMjUgKzQ1LDE1IEBAIHB1YmxpYzoKIAogICAgIC8vIEluc3Bl
Y3RvckNsaWVudCBtZXRob2RzOgogICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0b3JEZXN0cm95ZWQo
KTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlBhZ2UqIGNyZWF0ZVBhZ2UoKTsKLSAgICB2aXJ0dWFs
IFdlYkNvcmU6OlN0cmluZyBsb2NhbGl6ZWRTdHJpbmdzVVJMKCk7Ci0gICAgdmlydHVhbCBXZWJD
b3JlOjpTdHJpbmcgaGlkZGVuUGFuZWxzKCk7Ci0gICAgdmlydHVhbCB2b2lkIHNob3dXaW5kb3co
KTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xvc2VXaW5kb3coKTsKLSAgICB2aXJ0dWFsIGJvb2wgd2lu
ZG93VmlzaWJsZSgpOwotICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hXaW5kb3coKTsKLSAgICB2aXJ0
dWFsIHZvaWQgZGV0YWNoV2luZG93KCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldEF0dGFjaGVkV2lu
ZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCk7CisgICAgdmlydHVhbCB2b2lkIG9wZW5JbnNwZWN0
b3JGcm9udGVuZChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyKik7CiAgICAgdmlydHVhbCB2
b2lkIGhpZ2hsaWdodChXZWJDb3JlOjpOb2RlKik7CiAgICAgdmlydHVhbCB2b2lkIGhpZGVIaWdo
bGlnaHQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgaW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBXZWJD
b3JlOjpTdHJpbmcmIG5ld1VSTCk7CiAgICAgdmlydHVhbCB2b2lkIHBvcHVsYXRlU2V0dGluZygK
ICAgICAgICAgY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBrZXksCiAgICAgICAgIFdlYkNvcmU6OlN0
cmluZyogdmFsdWUpOwogICAgIHZpcnR1YWwgdm9pZCBzdG9yZVNldHRpbmcoCiAgICAgICAgIGNv
bnN0IFdlYkNvcmU6OlN0cmluZyYga2V5LAogICAgICAgICBjb25zdCBXZWJDb3JlOjpTdHJpbmcm
IHZhbHVlKTsKLSAgICB2aXJ0dWFsIHZvaWQgaW5zcGVjdG9yV2luZG93T2JqZWN0Q2xlYXJlZCgp
OwogCiBwcml2YXRlOgogICAgIHZvaWQgbG9hZFNldHRpbmdzKCk7CmRpZmYgLS1naXQgYS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzQWdlbnRJbXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuY3BwCmluZGV4IGFmNTA2MmEuLjIxZjMxZjQgMTAw
NjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuY3BwCisr
KyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuY3BwCkBAIC0xNjks
NyArMTY5LDcgQEAgdm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6YXR0YWNoKCkKICAgICAgICAg
bmV3IERlYnVnZ2VyQWdlbnRJbXBsKG1fd2ViVmlld0ltcGwsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtX2RlYnVnZ2VyQWdlbnREZWxlZ2F0ZVN0dWIuZ2V0KCksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzKSk7Ci0gICAgcmVzZXRJbnNwZWN0b3JGcm9udGVuZFBy
b3h5KCk7CisgICAgY3JlYXRlSW5zcGVjdG9yRnJvbnRlbmRQcm94eSgpOwogCiAgICAgLy8gQWxs
b3cgY29udHJvbGxlciB0byBzZW5kIG1lc3NhZ2VzIHRvIHRoZSBmcm9udGVuZC4KICAgICBJbnNw
ZWN0b3JDb250cm9sbGVyKiBpYyA9IGluc3BlY3RvckNvbnRyb2xsZXIoKTsKQEAgLTE4NSw3ICsx
ODUsNyBAQCB2b2lkIFdlYkRldlRvb2xzQWdlbnRJbXBsOjphdHRhY2goKQogICAgICAgICB9CiAg
ICAgfQogCi0gICAgaWMtPnNldFdpbmRvd1Zpc2libGUodHJ1ZSwgZmFsc2UpOworICAgIHNldElu
c3BlY3RvckZyb250ZW5kUHJveHlUb0luc3BlY3RvckNvbnRyb2xsZXIoKTsKICAgICBtX2F0dGFj
aGVkID0gdHJ1ZTsKIH0KIApAQCAtMjE2LDcgKzIxNiw2IEBAIHZvaWQgV2ViRGV2VG9vbHNBZ2Vu
dEltcGw6OmRpZENvbW1pdFByb3Zpc2lvbmFsTG9hZChXZWJGcmFtZUltcGwqIHdlYmZyYW1lLCBi
b29sCiAgICAgICAgIGRzLT51bnJlYWNoYWJsZVVSTCgpIDoKICAgICAgICAgcmVxdWVzdC51cmwo
KTsKICAgICBpZiAoIXdlYmZyYW1lLT5wYXJlbnQoKSkgewotICAgICAgICByZXNldEluc3BlY3Rv
ckZyb250ZW5kUHJveHkoKTsKICAgICAgICAgbV90b29sc0FnZW50RGVsZWdhdGVTdHViLT5mcmFt
ZU5hdmlnYXRlKFdlYkNvcmU6OktVUkwodXJsKS5zdHJpbmcoKSk7CiAgICAgICAgIFNldEFwdUFn
ZW50RW5hYmxlZEluVXRpbGl0eUNvbnRleHQobV91dGlsaXR5Q29udGV4dCwgbV9hcHVBZ2VudEVu
YWJsZWQpOwogICAgIH0KQEAgLTM1Nyw3ICszNTYsNyBAQCB2ODo6TG9jYWw8djg6Ok9iamVjdD4g
V2ViRGV2VG9vbHNBZ2VudEltcGw6OmNyZWF0ZUluc3BlY3RvckJhY2tlbmRWOFdyYXBwZXIoKQog
ICAgIHJldHVybiBpbnN0YW5jZTsKIH0KIAotdm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6cmVz
ZXRJbnNwZWN0b3JGcm9udGVuZFByb3h5KCkKK3ZvaWQgV2ViRGV2VG9vbHNBZ2VudEltcGw6OmNy
ZWF0ZUluc3BlY3RvckZyb250ZW5kUHJveHkoKQogewogICAgIGRpc3Bvc2VVdGlsaXR5Q29udGV4
dCgpOwogICAgIG1fdXRpbGl0eUNvbnRleHQgPSB2ODo6Q29udGV4dDo6TmV3KCk7CkBAIC0zNjgs
OCArMzY3LDE2IEBAIHZvaWQgV2ViRGV2VG9vbHNBZ2VudEltcGw6OnJlc2V0SW5zcGVjdG9yRnJv
bnRlbmRQcm94eSgpCiAgICAgdjg6OkNvbnRleHQ6OlNjb3BlIGNvbnRleHRTY29wZShtX3V0aWxp
dHlDb250ZXh0KTsKICAgICBTY3JpcHRTdGF0ZSogc3RhdGUgPSBTY3JpcHRTdGF0ZTo6Zm9yQ29u
dGV4dCgKICAgICAgICAgdjg6OkxvY2FsPHY4OjpDb250ZXh0Pjo6TmV3KG1fdXRpbGl0eUNvbnRl
eHQpKTsKK30KKwordm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6c2V0SW5zcGVjdG9yRnJvbnRl
bmRQcm94eVRvSW5zcGVjdG9yQ29udHJvbGxlcigpCit7CisgICAgdjg6OkhhbmRsZVNjb3BlIHNj
b3BlOworICAgIFNjcmlwdFN0YXRlKiBzdGF0ZSA9IFNjcmlwdFN0YXRlOjpmb3JDb250ZXh0KAor
ICAgICAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+OjpOZXcobV91dGlsaXR5Q29udGV4dCkpOwog
ICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIGljID0gaW5zcGVjdG9yQ29udHJvbGxlcigpOwotICAg
IGljLT5zZXRGcm9udGVuZFByb3h5T2JqZWN0KHN0YXRlLCBTY3JpcHRPYmplY3Qoc3RhdGUsIG1f
dXRpbGl0eUNvbnRleHQtPkdsb2JhbCgpKSk7CisgICAgaWMtPnNldEZyb250ZW5kKG5ldyBJbnNw
ZWN0b3JGcm9udGVuZCgKKyAgICAgICAgU2NyaXB0T2JqZWN0KHN0YXRlLCBtX3V0aWxpdHlDb250
ZXh0LT5HbG9iYWwoKSkpKTsKIH0KIAogdm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6c2V0QXB1
QWdlbnRFbmFibGVkKGJvb2wgZW5hYmxlZCkKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuaCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9v
bHNBZ2VudEltcGwuaAppbmRleCAyMDdiYWRhLi40NTVkY2VmIDEwMDY0NAotLS0gYS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkRldlRvb2xzQWdlbnRJbXBsLmgKKysrIGIvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5oCkBAIC0xMDksNyArMTA5LDggQEAgcHJpdmF0ZToK
IAogICAgIHZvaWQgY29tcGlsZVV0aWxpdHlTY3JpcHRzKCk7CiAgICAgdm9pZCBpbml0RGV2VG9v
bHNBZ2VudEhvc3QoKTsKLSAgICB2b2lkIHJlc2V0SW5zcGVjdG9yRnJvbnRlbmRQcm94eSgpOwor
ICAgIHZvaWQgY3JlYXRlSW5zcGVjdG9yRnJvbnRlbmRQcm94eSgpOworICAgIHZvaWQgc2V0SW5z
cGVjdG9yRnJvbnRlbmRQcm94eVRvSW5zcGVjdG9yQ29udHJvbGxlcigpOwogICAgIHZvaWQgc2V0
QXB1QWdlbnRFbmFibGVkKGJvb2wgZW5hYmxlZCk7CiAKICAgICBXZWJDb3JlOjpJbnNwZWN0b3JD
b250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyKCk7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYkRldlRvb2xzRnJvbnRlbmRJbXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViRGV2VG9vbHNGcm9udGVuZEltcGwuY3BwCmluZGV4IGQ1YjhlYmMuLjhhMmY4MWMgMTAw
NjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNGcm9udGVuZEltcGwuY3Bw
CisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNGcm9udGVuZEltcGwuY3BwCkBA
IC0xNTYsOCArMTU2LDExIEBAIFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjpXZWJEZXZUb29sc0Zy
b250ZW5kSW1wbCgKICAgICAgICAgInNldFNldHRpbmciLAogICAgICAgICBXZWJEZXZUb29sc0Zy
b250ZW5kSW1wbDo6anNTZXRTZXR0aW5nKTsKICAgICBkZXZUb29sc0hvc3QuYWRkUHJvdG9GdW5j
dGlvbigKLSAgICAgICAgIndpbmRvd1VubG9hZGluZyIsCi0gICAgICAgIFdlYkRldlRvb2xzRnJv
bnRlbmRJbXBsOjpqc1dpbmRvd1VubG9hZGluZyk7CisgICAgICAgICJicmluZ1RvRnJvbnQiLAor
ICAgICAgICBXZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6anNCcmluZ1RvRnJvbnQpOworICAgIGRl
dlRvb2xzSG9zdC5hZGRQcm90b0Z1bmN0aW9uKAorICAgICAgICAiaW5zcGVjdGVkVVJMQ2hhbmdl
ZCIsCisgICAgICAgIFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjpqc0luc3BlY3RlZFVSTENoYW5n
ZWQpOwogICAgIGRldlRvb2xzSG9zdC5hZGRQcm90b0Z1bmN0aW9uKAogICAgICAgICAic2hvd0Nv
bnRleHRNZW51IiwKICAgICAgICAgV2ViRGV2VG9vbHNGcm9udGVuZEltcGw6OmpzU2hvd0NvbnRl
eHRNZW51KTsKQEAgLTM0Niw5ICszNDksMTMgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFdlYkRl
dlRvb2xzRnJvbnRlbmRJbXBsOjpqc0RlYnVnZ2VyUGF1c2VTY3JpcHQoY29uc3Qgdjg6OkEKICAg
ICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogfQogCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gV2Vi
RGV2VG9vbHNGcm9udGVuZEltcGw6OmpzV2luZG93VW5sb2FkaW5nKGNvbnN0IHY4OjpBcmd1bWVu
dHMmIGFyZ3MpCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gV2ViRGV2VG9vbHNGcm9udGVuZEltcGw6
OmpzQnJpbmdUb0Zyb250KGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgcmV0dXJu
IHY4OjpVbmRlZmluZWQoKTsKK30KKwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFdlYkRldlRvb2xz
RnJvbnRlbmRJbXBsOjpqc0luc3BlY3RlZFVSTENoYW5nZWQoY29uc3Qgdjg6OkFyZ3VtZW50cyYg
YXJncykKIHsKLSAgICAvLyBUT0RPKHBmZWxkbWFuKTogSW1wbGVtZW50IHRoaXMuCiAgICAgcmV0
dXJuIHY4OjpVbmRlZmluZWQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJEZXZUb29sc0Zyb250ZW5kSW1wbC5oIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZU
b29sc0Zyb250ZW5kSW1wbC5oCmluZGV4IGJhMDAxM2IuLjY1OTE2OTMgMTAwNjQ0Ci0tLSBhL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNGcm9udGVuZEltcGwuaAorKysgYi9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkRldlRvb2xzRnJvbnRlbmRJbXBsLmgKQEAgLTE0Miw3ICsxNDIsOCBA
QCBwcml2YXRlOgogICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4ganNTZXR0aW5nKGNv
bnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpOwogICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4ganNTZXRTZXR0aW5nKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpOwogICAgIHN0YXRpYyB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4ganNEZWJ1Z2dlclBhdXNlU2NyaXB0KGNvbnN0IHY4OjpBcmd1
bWVudHMmIGFyZ3MpOwotICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4ganNXaW5kb3dV
bmxvYWRpbmcoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncyk7CisgICAgc3RhdGljIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBqc0JyaW5nVG9Gcm9udChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKTsK
KyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGpzSW5zcGVjdGVkVVJMQ2hhbmdlZChj
b25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKTsKICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IGpzU2hvd0NvbnRleHRNZW51KGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpOwogICAgIHN0
YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4ganNDYW5BdHRhY2hXaW5kb3coY29uc3Qgdjg6OkFy
Z3VtZW50cyYgYXJncyk7CiAKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvSW5q
ZWN0RGlzcGF0Y2guanMgYi9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0luamVjdERpc3BhdGNoLmpz
CmluZGV4IGUwNzBjNDIuLjY4YmNkYmQgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMv
anMvSW5qZWN0RGlzcGF0Y2guanMKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9JbmplY3RE
aXNwYXRjaC5qcwpAQCAtMTA0LDMgKzEwNCw3IEBAIGZ1bmN0aW9uIGRpc3BhdGNoKG1ldGhvZCwg
dmFyX2FyZ3MpIHsKICAgICB2YXIgY2FsbCA9IEpTT04uc3RyaW5naWZ5KGFyZ3MpOwogICAgIERl
dlRvb2xzQWdlbnRIb3N0LmRpc3BhdGNoKGNhbGwpOwogfTsKKworZnVuY3Rpb24gY2xvc2UoKSB7
CisgICAgLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gSW5zcGVjdG9yRnJvbnRlbmQgY2xv
c2VzIGluIGxheW91dCB0ZXN0cy4KK30KZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvQ2hhbmdlTG9n
IGIvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKaW5kZXggNTE5Y2FhNS4uNTZlZWJmNCAxMDA2NDQKLS0t
IGEvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNCBAQAorMjAxMC0wMy0xMCAgWXVyeSBTZW1pa2hhdHNreSA8eXVyeXNAY2hyb21pdW0u
b3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIElu
dHJvZHVjZSBJbnNwZWN0b3JGcm9udGVuZENsaWVudCB0aGF0IHByb3ZpZGVzIEluc3BlY3RvckZy
b250ZW5kIHdpdGggYW4gaW50ZXJmYWNlIHRvIHRoZSBlbWJlZGRlci4gSW5zcGVjdG9yQ2xpZW50
IG5vdyBzZXJ2ZXMgYXMgYSBkZWxlZ2F0ZSBmb3IgSW5zcGVjdG9yQ29udHJvbGxlciBhbmQgZG9l
cyBub3QgY29udGFpbiBtZXRob2RzIGZvciBtYW5hZ2luZyBpbnNwZWN0b3IgZnJvbnRlbmQgd2lu
ZG93LiBUaGF0IGFsbG93cyB0byBjcmVhdGUgcmVtb3RlIEluc3BlY3RvckZyb250ZW5kSG9zdC4K
KworICAgICAgICBJbnRyb2R1Y2UgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQgdGhhdCB3b3VsZCBw
cm92aWRlIEluc3BlY3RvckZyb250ZW5kIHdpdGggYW4gaW50ZXJmYWNlIHRvIHRoZSBlbWJlZGRl
cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzUwMzYK
KworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudEd0ay5jcHA6CisgICAg
ICAgIChXZWJLaXQ6Om5vdGlmeVdlYlZpZXdEZXN0cm95ZWQpOgorICAgICAgICAoV2ViS2l0OjpJ
bnNwZWN0b3JDbGllbnQ6Okluc3BlY3RvckNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6Okluc3Bl
Y3RvckNsaWVudDo6aW5zcGVjdG9yRGVzdHJveWVkKToKKyAgICAgICAgKFdlYktpdDo6SW5zcGVj
dG9yQ2xpZW50OjpvcGVuSW5zcGVjdG9yRnJvbnRlbmQpOgorICAgICAgICAoV2ViS2l0OjpJbnNw
ZWN0b3JDbGllbnQ6OmhpZ2hsaWdodCk6CisgICAgICAgIChXZWJLaXQ6Okluc3BlY3RvckNsaWVu
dDo6aGlkZUhpZ2hsaWdodCk6CisgICAgICAgIChXZWJLaXQ6Okluc3BlY3RvckNsaWVudDo6cG9w
dWxhdGVTZXR0aW5nKToKKyAgICAgICAgKFdlYktpdDo6SW5zcGVjdG9yQ2xpZW50OjpzdG9yZVNl
dHRpbmcpOgorICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6SW5zcGVj
dG9yRnJvbnRlbmRDbGllbnQpOgorICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JGcm9udGVuZENs
aWVudDo6fkluc3BlY3RvckZyb250ZW5kQ2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6SW5zcGVj
dG9yRnJvbnRlbmRDbGllbnQ6OmRlc3Ryb3lJbnNwZWN0b3JXaW5kb3cpOgorICAgICAgICAoV2Vi
S2l0OjpJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6bG9jYWxpemVkU3RyaW5nc1VSTCk6CisgICAg
ICAgIChXZWJLaXQ6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpoaWRkZW5QYW5lbHMpOgorICAg
ICAgICAoV2ViS2l0OjpJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6YnJpbmdUb0Zyb250KToKKyAg
ICAgICAgKFdlYktpdDo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmNsb3NlV2luZG93KToKKyAg
ICAgICAgKFdlYktpdDo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmF0dGFjaFdpbmRvdyk6Cisg
ICAgICAgIChXZWJLaXQ6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpkZXRhY2hXaW5kb3cpOgor
ICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6c2V0QXR0YWNoZWRXaW5k
b3dIZWlnaHQpOgorICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6aW5z
cGVjdGVkVVJMQ2hhbmdlZCk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xp
ZW50R3RrLmg6CisKIDIwMTAtMDMtMTUgIEpvYW5tYXJpZSBEaWdncyAgPGpvYW5tYXJpZS5kaWdn
c0BnbWFpbC5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSG9sZ2VyIEZyZXl0aGVyLgpkaWZm
IC0tZ2l0IGEvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRHdGsuY3Bw
IGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRHdGsuY3BwCmluZGV4
IDk5YmM2MjcuLjc3NWUzNTAgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQv
SW5zcGVjdG9yQ2xpZW50R3RrLmNwcAorKysgYi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0lu
c3BlY3RvckNsaWVudEd0ay5jcHAKQEAgLTMxLDY3ICszMSw0MCBAQCB1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLXN0YXRpYyB2b2lkIG5vdGlmeVdlYlZp
ZXdEZXN0cm95ZWQoV2ViS2l0V2ViVmlldyogd2ViVmlldywgSW5zcGVjdG9yQ2xpZW50KiBpbnNw
ZWN0b3JDbGllbnQpCitzdGF0aWMgdm9pZCBub3RpZnlXZWJWaWV3RGVzdHJveWVkKFdlYktpdFdl
YlZpZXcqIHdlYlZpZXcsIEluc3BlY3RvckZyb250ZW5kQ2xpZW50KiBpbnNwZWN0b3JGcm9udGVu
ZENsaWVudCkKIHsKLSAgICBpbnNwZWN0b3JDbGllbnQtPndlYlZpZXdEZXN0cm95ZWQoKTsKKyAg
ICBpbnNwZWN0b3JGcm9udGVuZENsaWVudC0+ZGVzdHJveUluc3BlY3RvcldpbmRvdygpOwogfQog
CiBJbnNwZWN0b3JDbGllbnQ6Okluc3BlY3RvckNsaWVudChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3
KQotICAgIDogbV93ZWJWaWV3KDApCi0gICAgLCBtX2luc3BlY3RlZFdlYlZpZXcod2ViVmlldykK
LSAgICAsIG1fd2ViSW5zcGVjdG9yKDApCisgICAgOiBtX2luc3BlY3RlZFdlYlZpZXcod2ViVmll
dykKIHt9CiAKIHZvaWQgSW5zcGVjdG9yQ2xpZW50OjppbnNwZWN0b3JEZXN0cm95ZWQoKQogewot
ICAgIGlmIChtX3dlYkluc3BlY3RvcikKLSAgICAgICAgZ19vYmplY3RfdW5yZWYobV93ZWJJbnNw
ZWN0b3IpOwotCiAgICAgZGVsZXRlIHRoaXM7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ2xpZW50Ojp3
ZWJWaWV3RGVzdHJveWVkKCkKLXsKLSAgICBtX3dlYlZpZXcgPSAwOwotICAgIGNvcmUobV9pbnNw
ZWN0ZWRXZWJWaWV3KS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5wYWdlRGVzdHJveWVkKCk7Ci0K
LSAgICAvLyBjcmVhdGVQYWdlIHdpbGwgYmUgY2FsbGVkIGFnYWluLCBpZiB0aGUgdXNlciBjaG9v
c2VzIHRvIGluc3BlY3QKLSAgICAvLyBzb21ldGhpbmcgZWxzZSwgYW5kIHRoZSBpbnNwZWN0b3Ig
d2lsbCBiZSByZWZlcmVuY2VkIGFnYWluLAotICAgIC8vIHRoZXJlLgotICAgIGdfb2JqZWN0X3Vu
cmVmKG1fd2ViSW5zcGVjdG9yKTsKLSAgICBtX3dlYkluc3BlY3RvciA9IDA7Ci19Ci0KLVBhZ2Uq
IEluc3BlY3RvckNsaWVudDo6Y3JlYXRlUGFnZSgpCit2b2lkIEluc3BlY3RvckNsaWVudDo6b3Bl
bkluc3BlY3RvckZyb250ZW5kKEluc3BlY3RvckNvbnRyb2xsZXIqIGNvbnRyb2xsZXIpCiB7Ci0g
ICAgaWYgKG1fd2ViVmlldykgewotICAgICAgICBnYm9vbGVhbiBoYW5kbGVkID0gRkFMU0U7Ci0g
ICAgICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX3dlYkluc3BlY3RvciwgImRlc3Ryb3kiLCAm
aGFuZGxlZCk7Ci0KLSAgICAgICAgLyogd2UgY2FuIG5vdyBkaXNwb3NlIG91ciBvd24gcmVmZXJl
bmNlICovCi0gICAgICAgIGdfb2JqZWN0X3VucmVmKG1fd2ViSW5zcGVjdG9yKTsKLSAgICB9Ci0K
ICAgICAvLyBUaGlzIGdfb2JqZWN0X2dldCB3aWxsIHJlZiB0aGUgaW5zcGVjdG9yLiBXZSdyZSBu
b3QgZG9pbmcgYW4KICAgICAvLyB1bnJlZiBpZiB0aGlzIG1ldGhvZCBzdWNjZWVkcyBiZWNhdXNl
IHRoZSBpbnNwZWN0b3Igb2JqZWN0IG11c3QKICAgICAvLyBiZSBhbGl2ZSBldmVuIGFmdGVyIHRo
ZSBpbnNwZWN0ZWQgV2ViVmlldyBpcyBkZXN0cm95ZWQgLSB0aGUKICAgICAvLyBjbG9zZS13aW5k
b3cgYW5kIGRlc3Ryb3kgc2lnbmFscyBzdGlsbCBuZWVkIHRvIGJlCiAgICAgLy8gZW1pdHRlZC4K
LSAgICBXZWJLaXRXZWJJbnNwZWN0b3IqIHdlYkluc3BlY3RvcjsKKyAgICBXZWJLaXRXZWJJbnNw
ZWN0b3IqIHdlYkluc3BlY3RvciA9IDA7CiAgICAgZ19vYmplY3RfZ2V0KG1faW5zcGVjdGVkV2Vi
VmlldywgIndlYi1pbnNwZWN0b3IiLCAmd2ViSW5zcGVjdG9yLCBOVUxMKTsKLSAgICBtX3dlYklu
c3BlY3RvciA9IHdlYkluc3BlY3RvcjsKKyAgICBBU1NFUlQod2ViSW5zcGVjdG9yKTsKIAotICAg
IGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX3dlYkluc3BlY3RvciwgImluc3BlY3Qtd2ViLXZpZXci
LCBtX2luc3BlY3RlZFdlYlZpZXcsICZtX3dlYlZpZXcpOworICAgIFdlYktpdFdlYlZpZXcqIGlu
c3BlY3RvcldlYlZpZXcgPSAwOworICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZSh3ZWJJbnNwZWN0
b3IsICJpbnNwZWN0LXdlYi12aWV3IiwgbV9pbnNwZWN0ZWRXZWJWaWV3LCAmaW5zcGVjdG9yV2Vi
Vmlldyk7CiAKLSAgICBpZiAoIW1fd2ViVmlldykgewotICAgICAgICBnX29iamVjdF91bnJlZiht
X3dlYkluc3BlY3Rvcik7Ci0gICAgICAgIHJldHVybiAwOworICAgIGlmICghaW5zcGVjdG9yV2Vi
VmlldykgeworICAgICAgICBnX29iamVjdF91bnJlZih3ZWJJbnNwZWN0b3IpOworICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgd2Via2l0X3dlYl9pbnNwZWN0b3Jfc2V0X3dlYl92aWV3KG1f
d2ViSW5zcGVjdG9yLCBtX3dlYlZpZXcpOwotCi0gICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZp
ZXcsICJkZXN0cm95IiwKLSAgICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0sobm90aWZ5V2Vi
Vmlld0Rlc3Ryb3llZCksIChncG9pbnRlcil0aGlzKTsKKyAgICB3ZWJraXRfd2ViX2luc3BlY3Rv
cl9zZXRfd2ViX3ZpZXcod2ViSW5zcGVjdG9yLCBpbnNwZWN0b3JXZWJWaWV3KTsKIAogICAgIEdP
d25QdHI8Z2NoYXI+IGluc3BlY3RvclVSSTsKIApAQCAtMTAzLDE0ICs3Niw3MyBAQCBQYWdlKiBJ
bnNwZWN0b3JDbGllbnQ6OmNyZWF0ZVBhZ2UoKQogICAgIH0gZWxzZQogICAgICAgICBpbnNwZWN0
b3JVUkkuc2V0KGdfZmlsZW5hbWVfdG9fdXJpKERBVEFfRElSIi93ZWJraXQtMS4wL3dlYmluc3Bl
Y3Rvci9pbnNwZWN0b3IuaHRtbCIsIE5VTEwsIE5VTEwpKTsKIAotICAgIHdlYmtpdF93ZWJfdmll
d19sb2FkX3VyaShtX3dlYlZpZXcsIGluc3BlY3RvclVSSS5nZXQoKSk7CisgICAgd2Via2l0X3dl
Yl92aWV3X2xvYWRfdXJpKGluc3BlY3RvcldlYlZpZXcsIGluc3BlY3RvclVSSS5nZXQoKSk7CisK
KyAgICBndGtfd2lkZ2V0X3Nob3coR1RLX1dJREdFVChpbnNwZWN0b3JXZWJWaWV3KSk7CisKKyAg
ICBQYWdlKiBpbnNwZWN0b3JQYWdlID0gY29yZShpbnNwZWN0b3JXZWJWaWV3KTsKKyAgICBpbnNw
ZWN0b3JQYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnNldEluc3BlY3RvckZyb250ZW5kQ2xp
ZW50KG5ldyBJbnNwZWN0b3JGcm9udGVuZENsaWVudChtX2luc3BlY3RlZFdlYlZpZXcsIGluc3Bl
Y3RvcldlYlZpZXcsIHdlYkluc3BlY3RvciwgaW5zcGVjdG9yUGFnZSkpOworfQorCit2b2lkIElu
c3BlY3RvckNsaWVudDo6aGlnaGxpZ2h0KE5vZGUqIG5vZGUpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKwordm9pZCBJbnNwZWN0b3JDbGllbnQ6OmhpZGVIaWdobGlnaHQoKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ2xpZW50Ojpwb3B1bGF0ZVNl
dHRpbmcoY29uc3QgU3RyaW5nJiBrZXksIFN0cmluZyogdmFsdWUpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKwordm9pZCBJbnNwZWN0b3JDbGllbnQ6OnN0b3JlU2V0dGluZyhjb25zdCBT
dHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCisKK2Jvb2wgZGVzdHJveWVkID0gVFJVRTsKKworSW5zcGVjdG9yRnJvbnRlbmRDbGll
bnQ6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50KFdlYktpdFdlYlZpZXcqIGluc3BlY3RlZFdlYlZp
ZXcsIFdlYktpdFdlYlZpZXcqIGluc3BlY3RvcldlYlZpZXcsIFdlYktpdFdlYkluc3BlY3Rvciog
d2ViSW5zcGVjdG9yLCBQYWdlKiBpbnNwZWN0b3JQYWdlKQorICAgIDogSW5zcGVjdG9yRnJvbnRl
bmRDbGllbnRMb2NhbChjb3JlKGluc3BlY3RlZFdlYlZpZXcpLT5pbnNwZWN0b3JDb250cm9sbGVy
KCksIGluc3BlY3RvclBhZ2UpCisgICAgLCBtX2luc3BlY3RvcldlYlZpZXcoaW5zcGVjdG9yV2Vi
VmlldykKKyAgICAsIG1faW5zcGVjdGVkV2ViVmlldyhpbnNwZWN0ZWRXZWJWaWV3KQorICAgICwg
bV93ZWJJbnNwZWN0b3Iod2ViSW5zcGVjdG9yKQoreworICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9p
bnNwZWN0b3JXZWJWaWV3LCAiZGVzdHJveSIsCisgICAgICAgICAgICAgICAgICAgICBHX0NBTExC
QUNLKG5vdGlmeVdlYlZpZXdEZXN0cm95ZWQpLCAoZ3BvaW50ZXIpdGhpcyk7Cit9CisKK0luc3Bl
Y3RvckZyb250ZW5kQ2xpZW50Ojp+SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQoKQoreworICAgIEFT
U0VSVCghbV93ZWJJbnNwZWN0b3IpOworfQorCit2b2lkIEluc3BlY3RvckZyb250ZW5kQ2xpZW50
OjpkZXN0cm95SW5zcGVjdG9yV2luZG93KCkKK3sKKyAgICBpZiAoIW1fd2ViSW5zcGVjdG9yKQor
ICAgICAgICByZXR1cm47CisgICAgV2ViS2l0V2ViSW5zcGVjdG9yKiB3ZWJJbnNwZWN0b3IgPSBt
X3dlYkluc3BlY3RvcjsKKyAgICBtX3dlYkluc3BlY3RvciA9IDA7CisKKyAgICBnX3NpZ25hbF9o
YW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMobV9pbnNwZWN0b3JXZWJWaWV3LCAoZ3BvaW50ZXIp
bm90aWZ5V2ViVmlld0Rlc3Ryb3llZCwgKGdwb2ludGVyKXRoaXMpOworICAgIG1faW5zcGVjdG9y
V2ViVmlldyA9IDA7CisKKyAgICBjb3JlKG1faW5zcGVjdGVkV2ViVmlldyktPmluc3BlY3RvckNv
bnRyb2xsZXIoKS0+ZGlzY29ubmVjdEZyb250ZW5kKCk7CiAKLSAgICBndGtfd2lkZ2V0X3Nob3co
R1RLX1dJREdFVChtX3dlYlZpZXcpKTsKKyAgICBnYm9vbGVhbiBoYW5kbGVkID0gRkFMU0U7Cisg
ICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKHdlYkluc3BlY3RvciwgImNsb3NlLXdpbmRvdyIsICZo
YW5kbGVkKTsKKyAgICBBU1NFUlQoaGFuZGxlZCk7CiAKLSAgICByZXR1cm4gY29yZShtX3dlYlZp
ZXcpOworICAgIC8qIHdlIHNob3VsZCBub3cgZGlzcG9zZSBvdXIgb3duIHJlZmVyZW5jZSAqLwor
ICAgIGdfb2JqZWN0X3VucmVmKHdlYkluc3BlY3Rvcik7CiB9CiAKLVN0cmluZyBJbnNwZWN0b3JD
bGllbnQ6OmxvY2FsaXplZFN0cmluZ3NVUkwoKQorU3RyaW5nIEluc3BlY3RvckZyb250ZW5kQ2xp
ZW50Ojpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkKIHsKICAgICBHT3duUHRyPGdjaGFyPiBVUkw7CiAK
QEAgLTEyNiw4OSArMTU4LDU2IEBAIFN0cmluZyBJbnNwZWN0b3JDbGllbnQ6OmxvY2FsaXplZFN0
cmluZ3NVUkwoKQogICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KFVSTC5nZXQoKSk7CiB9CiAK
LVN0cmluZyBJbnNwZWN0b3JDbGllbnQ6OmhpZGRlblBhbmVscygpCitTdHJpbmcgSW5zcGVjdG9y
RnJvbnRlbmRDbGllbnQ6OmhpZGRlblBhbmVscygpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsK
ICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ2xpZW50OjpzaG93V2lu
ZG93KCkKK3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmJyaW5nVG9Gcm9udCgpCiB7Ci0g
ICAgaWYgKCFtX3dlYlZpZXcpCisgICAgaWYgKCFtX2luc3BlY3RvcldlYlZpZXcpCiAgICAgICAg
IHJldHVybjsKIAogICAgIGdib29sZWFuIGhhbmRsZWQgPSBGQUxTRTsKICAgICBnX3NpZ25hbF9l
bWl0X2J5X25hbWUobV93ZWJJbnNwZWN0b3IsICJzaG93LXdpbmRvdyIsICZoYW5kbGVkKTsKLQot
ICAgIGNvcmUobV9pbnNwZWN0ZWRXZWJWaWV3KS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5zZXRX
aW5kb3dWaXNpYmxlKHRydWUpOwogfQogCi12b2lkIEluc3BlY3RvckNsaWVudDo6Y2xvc2VXaW5k
b3coKQordm9pZCBJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6Y2xvc2VXaW5kb3coKQogewotICAg
IGlmICghbV93ZWJWaWV3KQotICAgICAgICByZXR1cm47Ci0KLSAgICBnYm9vbGVhbiBoYW5kbGVk
ID0gRkFMU0U7Ci0gICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fd2ViSW5zcGVjdG9yLCAiY2xv
c2Utd2luZG93IiwgJmhhbmRsZWQpOwotCi0gICAgY29yZShtX2luc3BlY3RlZFdlYlZpZXcpLT5p
bnNwZWN0b3JDb250cm9sbGVyKCktPnNldFdpbmRvd1Zpc2libGUoZmFsc2UpOworICAgIGRlc3Ry
b3lJbnNwZWN0b3JXaW5kb3coKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDbGllbnQ6OmF0dGFjaFdp
bmRvdygpCit2b2lkIEluc3BlY3RvckZyb250ZW5kQ2xpZW50OjphdHRhY2hXaW5kb3coKQogewot
ICAgIGlmICghbV93ZWJWaWV3KQorICAgIGlmICghbV9pbnNwZWN0b3JXZWJWaWV3KQogICAgICAg
ICByZXR1cm47CiAKICAgICBnYm9vbGVhbiBoYW5kbGVkID0gRkFMU0U7CiAgICAgZ19zaWduYWxf
ZW1pdF9ieV9uYW1lKG1fd2ViSW5zcGVjdG9yLCAiYXR0YWNoLXdpbmRvdyIsICZoYW5kbGVkKTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JDbGllbnQ6OmRldGFjaFdpbmRvdygpCit2b2lkIEluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50OjpkZXRhY2hXaW5kb3coKQogewotICAgIGlmICghbV93ZWJWaWV3KQor
ICAgIGlmICghbV9pbnNwZWN0b3JXZWJWaWV3KQogICAgICAgICByZXR1cm47CiAKICAgICBnYm9v
bGVhbiBoYW5kbGVkID0gRkFMU0U7CiAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fd2ViSW5z
cGVjdG9yLCAiZGV0YWNoLXdpbmRvdyIsICZoYW5kbGVkKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JD
bGllbnQ6OnNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEluc3BlY3RvckNsaWVudDo6aGlnaGxpZ2h0KE5v
ZGUqIG5vZGUpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JD
bGllbnQ6OmhpZGVIaWdobGlnaHQoKQordm9pZCBJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6c2V0
QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KQogewogICAgIG5vdEltcGxlbWVu
dGVkKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ2xpZW50OjppbnNwZWN0ZWRVUkxDaGFuZ2VkKGNv
bnN0IFN0cmluZyYgbmV3VVJMKQordm9pZCBJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6aW5zcGVj
dGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIG5ld1VSTCkKIHsKLSAgICBpZiAoIW1fd2ViVmll
dykKKyAgICBpZiAoIW1faW5zcGVjdG9yV2ViVmlldykKICAgICAgICAgcmV0dXJuOwogCiAgICAg
d2Via2l0X3dlYl9pbnNwZWN0b3Jfc2V0X2luc3BlY3RlZF91cmkobV93ZWJJbnNwZWN0b3IsIG5l
d1VSTC51dGY4KCkuZGF0YSgpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDbGllbnQ6Omluc3BlY3Rv
cldpbmRvd09iamVjdENsZWFyZWQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZv
aWQgSW5zcGVjdG9yQ2xpZW50Ojpwb3B1bGF0ZVNldHRpbmcoY29uc3QgU3RyaW5nJiBrZXksIFN0
cmluZyogdmFsdWUpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBJbnNwZWN0
b3JDbGllbnQ6OnN0b3JlU2V0dGluZyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2
YWx1ZSkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCiB9CiAKZGlmZiAtLWdpdCBhL1dl
YktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50R3RrLmggYi9XZWJLaXQvZ3Rr
L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudEd0ay5oCmluZGV4IDI5N2ZkOGYuLmNkYjUz
NzUgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50
R3RrLmgKKysrIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRHdGsu
aApAQCAtMzAsNiArMzAsNyBAQAogI2RlZmluZSBJbnNwZWN0b3JDbGllbnRHdGtfaAogCiAjaW5j
bHVkZSAiSW5zcGVjdG9yQ2xpZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmRDbGll
bnRMb2NhbC5oIgogI2luY2x1ZGUgIndlYmtpdHdlYnZpZXcuaCIKICNpbmNsdWRlICJ3ZWJraXR3
ZWJpbnNwZWN0b3IuaCIKIApAQCAtNDYsMTUgKzQ3LDMwIEBAIG5hbWVzcGFjZSBXZWJLaXQgewog
ICAgICAgICBJbnNwZWN0b3JDbGllbnQoV2ViS2l0V2ViVmlldyogd2ViVmlldyk7CiAKICAgICAg
ICAgdmlydHVhbCB2b2lkIGluc3BlY3RvckRlc3Ryb3llZCgpOwotICAgICAgICB2b2lkIHdlYlZp
ZXdEZXN0cm95ZWQoKTsKIAotICAgICAgICB2aXJ0dWFsIFdlYkNvcmU6OlBhZ2UqIGNyZWF0ZVBh
Z2UoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIG9wZW5JbnNwZWN0b3JGcm9udGVuZChXZWJDb3Jl
OjpJbnNwZWN0b3JDb250cm9sbGVyKik7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGhpZ2hsaWdo
dChXZWJDb3JlOjpOb2RlKik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBoaWRlSGlnaGxpZ2h0KCk7
CisKKyAgICAgICAgdmlydHVhbCB2b2lkIHBvcHVsYXRlU2V0dGluZyhjb25zdCBXZWJDb3JlOjpT
dHJpbmcmIGtleSwgV2ViQ29yZTo6U3RyaW5nKiB2YWx1ZSk7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBzdG9yZVNldHRpbmcoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBrZXksIGNvbnN0IFdlYkNvcmU6
OlN0cmluZyYgdmFsdWUpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgV2ViS2l0V2ViVmlldyog
bV9pbnNwZWN0ZWRXZWJWaWV3OworICAgIH07CisKKyAgICBjbGFzcyBJbnNwZWN0b3JGcm9udGVu
ZENsaWVudCA6IHB1YmxpYyBXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsIHsK
KyAgICBwdWJsaWM6CisgICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2xpZW50KFdlYktpdFdlYlZp
ZXcqIGluc3BlY3RlZFdlYlZpZXcsIFdlYktpdFdlYlZpZXcqIGluc3BlY3RvcldlYlZpZXcsIFdl
YktpdFdlYkluc3BlY3Rvciogd2ViSW5zcGVjdG9yLCBXZWJDb3JlOjpQYWdlKiBpbnNwZWN0b3JQ
YWdlKTsKKworICAgICAgICB2b2lkIGRlc3Ryb3lJbnNwZWN0b3JXaW5kb3coKTsKIAogICAgICAg
ICB2aXJ0dWFsIFdlYkNvcmU6OlN0cmluZyBsb2NhbGl6ZWRTdHJpbmdzVVJMKCk7CiAKICAgICAg
ICAgdmlydHVhbCBXZWJDb3JlOjpTdHJpbmcgaGlkZGVuUGFuZWxzKCk7CiAKLSAgICAgICAgdmly
dHVhbCB2b2lkIHNob3dXaW5kb3coKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGJyaW5nVG9Gcm9u
dCgpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgY2xvc2VXaW5kb3coKTsKIAogICAgICAgICB2aXJ0
dWFsIHZvaWQgYXR0YWNoV2luZG93KCk7CkBAIC02MiwxNyArNzgsMTIgQEAgbmFtZXNwYWNlIFdl
YktpdCB7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVu
c2lnbmVkIGhlaWdodCk7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIGhpZ2hsaWdodChXZWJDb3Jl
OjpOb2RlKik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBoaWRlSGlnaGxpZ2h0KCk7CiAgICAgICAg
IHZpcnR1YWwgdm9pZCBpbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYg
bmV3VVJMKTsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgcG9wdWxhdGVTZXR0aW5nKGNvbnN0IFdl
YkNvcmU6OlN0cmluZyYga2V5LCBXZWJDb3JlOjpTdHJpbmcqIHZhbHVlKTsKLSAgICAgICAgdmly
dHVhbCB2b2lkIHN0b3JlU2V0dGluZyhjb25zdCBXZWJDb3JlOjpTdHJpbmcmIGtleSwgY29uc3Qg
V2ViQ29yZTo6U3RyaW5nJiB2YWx1ZSk7Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIGluc3BlY3Rv
cldpbmRvd09iamVjdENsZWFyZWQoKTsKLQogICAgIHByaXZhdGU6Ci0gICAgICAgIFdlYktpdFdl
YlZpZXcqIG1fd2ViVmlldzsKKyAgICAgICAgdmlydHVhbCB+SW5zcGVjdG9yRnJvbnRlbmRDbGll
bnQoKTsKKworICAgICAgICBXZWJLaXRXZWJWaWV3KiBtX2luc3BlY3RvcldlYlZpZXc7CiAgICAg
ICAgIFdlYktpdFdlYlZpZXcqIG1faW5zcGVjdGVkV2ViVmlldzsKICAgICAgICAgV2ViS2l0V2Vi
SW5zcGVjdG9yKiBtX3dlYkluc3BlY3RvcjsKICAgICB9OwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2hh
aWt1L0NoYW5nZUxvZyBiL1dlYktpdC9oYWlrdS9DaGFuZ2VMb2cKaW5kZXggMWM2ODcwYS4uNWRh
ZTQ3YSAxMDA2NDQKLS0tIGEvV2ViS2l0L2hhaWt1L0NoYW5nZUxvZworKysgYi9XZWJLaXQvaGFp
a3UvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTAtMDMtMTAgIFl1cnkgU2VtaWtoYXRz
a3kgPHl1cnlzQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBJbnRyb2R1Y2UgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQgdGhhdCBw
cm92aWRlcyBJbnNwZWN0b3JGcm9udGVuZCB3aXRoIGFuIGludGVyZmFjZSB0byB0aGUgZW1iZWRk
ZXIuIEluc3BlY3RvckNsaWVudCBub3cgc2VydmVzIGFzIGEgZGVsZWdhdGUgZm9yIEluc3BlY3Rv
ckNvbnRyb2xsZXIgYW5kIGRvZXMgbm90IGNvbnRhaW4gbWV0aG9kcyBmb3IgbWFuYWdpbmcgaW5z
cGVjdG9yIGZyb250ZW5kIHdpbmRvdy4gVGhhdCBhbGxvd3MgdG8gY3JlYXRlIHJlbW90ZSBJbnNw
ZWN0b3JGcm9udGVuZEhvc3QuCisKKyAgICAgICAgSW50cm9kdWNlIEluc3BlY3RvckZyb250ZW5k
Q2xpZW50IHRoYXQgd291bGQgcHJvdmlkZSBJbnNwZWN0b3JGcm9udGVuZCB3aXRoIGFuIGludGVy
ZmFjZSB0byB0aGUgZW1iZWRkZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTM1MDM2CisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JD
bGllbnRIYWlrdS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDbGllbnRIYWlrdTo6
b3Blbkluc3BlY3RvckZyb250ZW5kKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9JbnNwZWN0
b3JDbGllbnRIYWlrdS5oOgorCiAyMDEwLTAzLTExICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNj
YUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQgSHlhdHQuCmRpZmYgLS1n
aXQgYS9XZWJLaXQvaGFpa3UvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50SGFpa3UuY3Bw
IGIvV2ViS2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudEhhaWt1LmNwcApp
bmRleCBmMDZlOTZiLi41OTIzMmU5IDEwMDY0NAotLS0gYS9XZWJLaXQvaGFpa3UvV2ViQ29yZVN1
cHBvcnQvSW5zcGVjdG9yQ2xpZW50SGFpa3UuY3BwCisrKyBiL1dlYktpdC9oYWlrdS9XZWJDb3Jl
U3VwcG9ydC9JbnNwZWN0b3JDbGllbnRIYWlrdS5jcHAKQEAgLTQyLDQ1ICs0Miw3IEBAIHZvaWQg
SW5zcGVjdG9yQ2xpZW50SGFpa3U6Omluc3BlY3RvckRlc3Ryb3llZCgpCiAgICAgbm90SW1wbGVt
ZW50ZWQoKTsKIH0KIAotUGFnZSogSW5zcGVjdG9yQ2xpZW50SGFpa3U6OmNyZWF0ZVBhZ2UoKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLVN0cmluZyBJbnNw
ZWN0b3JDbGllbnRIYWlrdTo6bG9jYWxpemVkU3RyaW5nc1VSTCgpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBJbnNwZWN0b3JDbGll
bnRIYWlrdTo6aGlkZGVuUGFuZWxzKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJl
dHVybiBTdHJpbmcoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDbGllbnRIYWlrdTo6c2hvd1dpbmRv
dygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDbGllbnRI
YWlrdTo6Y2xvc2VXaW5kb3coKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQg
SW5zcGVjdG9yQ2xpZW50SGFpa3U6OmF0dGFjaFdpbmRvdygpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDbGllbnRIYWlrdTo6ZGV0YWNoV2luZG93KCkKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEluc3BlY3RvckNsaWVudEhhaWt1Ojpz
ZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpCit2b2lkIEluc3BlY3RvckNs
aWVudEhhaWt1OjpvcGVuSW5zcGVjdG9yRnJvbnRlbmQoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJv
bGxlciopCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KQEAgLTk1LDE2ICs1Nyw2IEBAIHZv
aWQgSW5zcGVjdG9yQ2xpZW50SGFpa3U6OmhpZGVIaWdobGlnaHQoKQogICAgIG5vdEltcGxlbWVu
dGVkKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ2xpZW50SGFpa3U6Omluc3BlY3RlZFVSTENoYW5n
ZWQoY29uc3QgU3RyaW5nJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIElu
c3BlY3RvckNsaWVudEhhaWt1OjppbnNwZWN0b3JXaW5kb3dPYmplY3RDbGVhcmVkKCkKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCiB2b2lkIEluc3BlY3RvckNsaWVudEhhaWt1Ojpwb3B1
bGF0ZVNldHRpbmcoY29uc3QgU3RyaW5nJiBrZXksIFN0cmluZyogdmFsdWUpCiB7CiAgICAgbm90
SW1wbGVtZW50ZWQoKTsKZGlmZiAtLWdpdCBhL1dlYktpdC9oYWlrdS9XZWJDb3JlU3VwcG9ydC9J
bnNwZWN0b3JDbGllbnRIYWlrdS5oIGIvV2ViS2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0luc3Bl
Y3RvckNsaWVudEhhaWt1LmgKaW5kZXggODc4OGE1Zi4uZDQyNzY3MCAxMDA2NDQKLS0tIGEvV2Vi
S2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudEhhaWt1LmgKKysrIGIvV2Vi
S2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudEhhaWt1LmgKQEAgLTQyLDI5
ICs0MiwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgcHVibGljOgogICAgICAgICB2aXJ0
dWFsIHZvaWQgaW5zcGVjdG9yRGVzdHJveWVkKCk7CiAKLSAgICAgICAgdmlydHVhbCBQYWdlKiBj
cmVhdGVQYWdlKCk7Ci0KLSAgICAgICAgdmlydHVhbCBTdHJpbmcgbG9jYWxpemVkU3RyaW5nc1VS
TCgpOwotCi0gICAgICAgIHZpcnR1YWwgU3RyaW5nIGhpZGRlblBhbmVscygpOwotCi0gICAgICAg
IHZpcnR1YWwgdm9pZCBzaG93V2luZG93KCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBjbG9zZVdp
bmRvdygpOwotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hXaW5kb3coKTsKLSAgICAgICAg
dmlydHVhbCB2b2lkIGRldGFjaFdpbmRvdygpOwotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBzZXRB
dHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpOworICAgICAgICB2aXJ0dWFsIHZv
aWQgb3Blbkluc3BlY3RvckZyb250ZW5kKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXIqKTsK
IAogICAgICAgICB2aXJ0dWFsIHZvaWQgaGlnaGxpZ2h0KE5vZGUqKTsKICAgICAgICAgdmlydHVh
bCB2b2lkIGhpZGVIaWdobGlnaHQoKTsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgaW5zcGVjdGVk
VVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIG5ld1VSTCk7Ci0KICAgICAgICAgdmlydHVhbCB2b2lk
IHBvcHVsYXRlU2V0dGluZyhjb25zdCBXZWJDb3JlOjpTdHJpbmcmIGtleSwgV2ViQ29yZTo6U3Ry
aW5nKiB2YWx1ZSk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdG9yZVNldHRpbmcoY29uc3QgV2Vi
Q29yZTo6U3RyaW5nJiBrZXksIGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgdmFsdWUpOwotCi0gICAg
ICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0b3JXaW5kb3dPYmplY3RDbGVhcmVkKCk7CiAgICAgfTsK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvV2ViS2l0L21hYy9DaGFuZ2VM
b2cgYi9XZWJLaXQvbWFjL0NoYW5nZUxvZwppbmRleCBlNmQzMDQ2Li5hNWU5ZDYyIDEwMDY0NAot
LS0gYS9XZWJLaXQvbWFjL0NoYW5nZUxvZworKysgYi9XZWJLaXQvbWFjL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDQ5IEBACisyMDEwLTAzLTExICBZdXJ5IFNlbWlraGF0c2t5IDx5dXJ5c0BjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
SW50cm9kdWNlIEluc3BlY3RvckZyb250ZW5kQ2xpZW50IHRoYXQgcHJvdmlkZXMgSW5zcGVjdG9y
RnJvbnRlbmQgd2l0aCBhbiBpbnRlcmZhY2UgdG8gdGhlIGVtYmVkZGVyLiBJbnNwZWN0b3JDbGll
bnQgbm93IHNlcnZlcyBhcyBhIGRlbGVnYXRlIGZvciBJbnNwZWN0b3JDb250cm9sbGVyIGFuZCBk
b2VzIG5vdCBjb250YWluIG1ldGhvZHMgZm9yIG1hbmFnaW5nIGluc3BlY3RvciBmcm9udGVuZCB3
aW5kb3cuIFRoYXQgYWxsb3dzIHRvIGNyZWF0ZSByZW1vdGUgSW5zcGVjdG9yRnJvbnRlbmRIb3N0
LgorCisgICAgICAgIEludHJvZHVjZSBJbnNwZWN0b3JGcm9udGVuZENsaWVudCB0aGF0IHdvdWxk
IHByb3ZpZGUgSW5zcGVjdG9yRnJvbnRlbmQgd2l0aCBhbiBpbnRlcmZhY2UgdG8gdGhlIGVtYmVk
ZGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNTAz
NgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50Lmg6CisgICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50Lm1tOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yQ2xpZW50OjpXZWJJbnNwZWN0b3JDbGllbnQpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yQ2xpZW50OjppbnNwZWN0b3JEZXN0cm95ZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yQ2xp
ZW50OjpvcGVuSW5zcGVjdG9yRnJvbnRlbmQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yQ2xpZW50
OjpoaWdobGlnaHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yQ2xpZW50OjpoaWRlSGlnaGxpZ2h0
KToKKyAgICAgICAgKFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpXZWJJbnNwZWN0b3JGcm9u
dGVuZENsaWVudCk6CisgICAgICAgIChXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6ZnJvbnRl
bmRMb2FkZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmxvY2FsaXpl
ZFN0cmluZ3NVUkwpOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmhpZGRl
blBhbmVscyk6CisgICAgICAgIChXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6YnJpbmdUb0Zy
b250KToKKyAgICAgICAgKFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpjbG9zZVdpbmRvdyk6
CisgICAgICAgIChXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6YXR0YWNoV2luZG93KToKKyAg
ICAgICAgKFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpkZXRhY2hXaW5kb3cpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OnNldEF0dGFjaGVkV2luZG93SGVpZ2h0KToK
KyAgICAgICAgKFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjppbnNwZWN0ZWRVUkxDaGFuZ2Vk
KToKKyAgICAgICAgKFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50Ojp1cGRhdGVXaW5kb3dUaXRs
ZSk6CisgICAgICAgICgtW1dlYkluc3BlY3RvcldpbmRvd0NvbnRyb2xsZXIgZGVhbGxvY10pOgor
ICAgICAgICAoLVtXZWJJbnNwZWN0b3JXaW5kb3dDb250cm9sbGVyIHdpbmRvd1Nob3VsZENsb3Nl
Ol0pOgorICAgICAgICAoLVtXZWJJbnNwZWN0b3JXaW5kb3dDb250cm9sbGVyIGNsb3NlXSk6Cisg
ICAgICAgICgtW1dlYkluc3BlY3RvcldpbmRvd0NvbnRyb2xsZXIgc2hvd1dpbmRvdzpdKToKKyAg
ICAgICAgKC1bV2ViSW5zcGVjdG9yV2luZG93Q29udHJvbGxlciBhdHRhY2hdKToKKyAgICAgICAg
KC1bV2ViSW5zcGVjdG9yV2luZG93Q29udHJvbGxlciBkZXRhY2hdKToKKyAgICAgICAgKC1bV2Vi
SW5zcGVjdG9yV2luZG93Q29udHJvbGxlciBhdHRhY2hlZF0pOgorICAgICAgICAoLVtXZWJJbnNw
ZWN0b3JXaW5kb3dDb250cm9sbGVyIHNldEZyb250ZW5kQ2xpZW50Ol0pOgorICAgICAgICAoLVtX
ZWJJbnNwZWN0b3JXaW5kb3dDb250cm9sbGVyIGRlc3Ryb3lJbnNwZWN0b3JWaWV3XSk6CisgICAg
ICAgICgtW1dlYk5vZGVIaWdobGlnaHRlciBpbml0V2l0aEluc3BlY3RlZFdlYlZpZXc6XSk6Cisg
ICAgICAgICgtW1dlYk5vZGVIaWdobGlnaHRlciBkZWFsbG9jXSk6CisgICAgICAgICgtW1dlYk5v
ZGVIaWdobGlnaHRlciBoaWdobGlnaHROb2RlOl0pOgorICAgICAgICAoLVtXZWJOb2RlSGlnaGxp
Z2h0ZXIgaGlkZUhpZ2hsaWdodF0pOgorICAgICAgICAoLVtXZWJOb2RlSGlnaGxpZ2h0ZXIgZGlk
QXR0YWNoV2ViTm9kZUhpZ2hsaWdodDpdKToKKyAgICAgICAgKC1bV2ViTm9kZUhpZ2hsaWdodGVy
IHdpbGxEZXRhY2hXZWJOb2RlSGlnaGxpZ2h0Ol0pOgorICAgICAgICAqIFdlYkluc3BlY3Rvci9X
ZWJJbnNwZWN0b3IubW06CisgICAgICAgICgtW1dlYkluc3BlY3RvciBhdHRhY2g6XSk6CisgICAg
ICAgICgtW1dlYkluc3BlY3RvciBkZXRhY2g6XSk6CisKIDIwMTAtMDMtMTUgIEFuZHkgRXN0ZXMg
IDxhZXN0ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEpvaG4gU3VsbGl2YW4u
CmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVu
dC5oIGIvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuaAppbmRl
eCA2NDYyMWY4Li5lZTgxYjI1IDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0
L1dlYkluc3BlY3RvckNsaWVudC5oCisrKyBiL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2Vi
SW5zcGVjdG9yQ2xpZW50LmgKQEAgLTI3LDE1ICsyNywxOCBAQAogICovCiAKICNpbXBvcnQgPFdl
YkNvcmUvSW5zcGVjdG9yQ2xpZW50Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0luc3BlY3RvckZyb250
ZW5kQ2xpZW50TG9jYWwuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1TdHJpbmcuaD4KIAog
I2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogCiAjaWZkZWYgX19PQkpDX18KIEBjbGFzcyBXZWJJ
bnNwZWN0b3JXaW5kb3dDb250cm9sbGVyOworQGNsYXNzIFdlYk5vZGVIaWdobGlnaHRlcjsKIEBj
bGFzcyBXZWJWaWV3OwogI2Vsc2UKIGNsYXNzIFdlYkluc3BlY3RvcldpbmRvd0NvbnRyb2xsZXI7
CitjbGFzcyBXZWJOb2RlSGlnaGxpZ2h0ZXI7CiBjbGFzcyBXZWJWaWV3OwogI2VuZGlmCiAKQEAg
LTQ1LDMyICs0OCw0MSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgaW5zcGVjdG9yRGVz
dHJveWVkKCk7CiAKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlBhZ2UqIGNyZWF0ZVBhZ2UoKTsKLSAg
ICB2aXJ0dWFsIFdlYkNvcmU6OlN0cmluZyBsb2NhbGl6ZWRTdHJpbmdzVVJMKCk7Ci0KLSAgICB2
aXJ0dWFsIFdlYkNvcmU6OlN0cmluZyBoaWRkZW5QYW5lbHMoKTsKLQotICAgIHZpcnR1YWwgdm9p
ZCBzaG93V2luZG93KCk7Ci0gICAgdmlydHVhbCB2b2lkIGNsb3NlV2luZG93KCk7Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgYXR0YWNoV2luZG93KCk7Ci0gICAgdmlydHVhbCB2b2lkIGRldGFjaFdpbmRv
dygpOwotCi0gICAgdmlydHVhbCB2b2lkIHNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVk
IGhlaWdodCk7CisgICAgdmlydHVhbCB2b2lkIG9wZW5JbnNwZWN0b3JGcm9udGVuZChXZWJDb3Jl
OjpJbnNwZWN0b3JDb250cm9sbGVyKik7CiAKICAgICB2aXJ0dWFsIHZvaWQgaGlnaGxpZ2h0KFdl
YkNvcmU6Ok5vZGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgaGlkZUhpZ2hsaWdodCgpOwotICAgIHZp
cnR1YWwgdm9pZCBpbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgbmV3
VVJMKTsKIAogICAgIHZpcnR1YWwgdm9pZCBwb3B1bGF0ZVNldHRpbmcoY29uc3QgV2ViQ29yZTo6
U3RyaW5nJiBrZXksIFdlYkNvcmU6OlN0cmluZyogdmFsdWUpOwogICAgIHZpcnR1YWwgdm9pZCBz
dG9yZVNldHRpbmcoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBrZXksIGNvbnN0IFdlYkNvcmU6OlN0
cmluZyYgdmFsdWUpOwogCi0gICAgdmlydHVhbCB2b2lkIGluc3BlY3RvcldpbmRvd09iamVjdENs
ZWFyZWQoKTsKK3ByaXZhdGU6CisgICAgV2ViVmlldyAqbV93ZWJWaWV3OworICAgIFJldGFpblB0
cjxXZWJOb2RlSGlnaGxpZ2h0ZXI+IG1faGlnaGxpZ2h0ZXI7Cit9OworCitjbGFzcyBXZWJJbnNw
ZWN0b3JGcm9udGVuZENsaWVudCA6IHB1YmxpYyBXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENs
aWVudExvY2FsIHsKK3B1YmxpYzoKKyAgICBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudChXZWJW
aWV3KiwgV2ViSW5zcGVjdG9yV2luZG93Q29udHJvbGxlciosIFdlYkNvcmU6Okluc3BlY3RvckNv
bnRyb2xsZXIqLCBXZWJDb3JlOjpQYWdlKik7CisKKyAgICB2aXJ0dWFsIHZvaWQgZnJvbnRlbmRM
b2FkZWQoKTsKKyAgICAKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OlN0cmluZyBsb2NhbGl6ZWRTdHJp
bmdzVVJMKCk7CisgICAgdmlydHVhbCBXZWJDb3JlOjpTdHJpbmcgaGlkZGVuUGFuZWxzKCk7Cisg
ICAgCisgICAgdmlydHVhbCB2b2lkIGJyaW5nVG9Gcm9udCgpOworICAgIHZpcnR1YWwgdm9pZCBj
bG9zZVdpbmRvdygpOworICAgIAorICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hXaW5kb3coKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGV0YWNoV2luZG93KCk7CisgICAgCisgICAgdmlydHVhbCB2b2lkIHNl
dEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCk7CisgICAgdmlydHVhbCB2b2lk
IGluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBuZXdVUkwpOwogCiBw
cml2YXRlOgogICAgIHZvaWQgdXBkYXRlV2luZG93VGl0bGUoKSBjb25zdDsKIAotICAgIFdlYlZp
ZXcgKm1fd2ViVmlldzsKKyAgICBXZWJWaWV3KiBtX2luc3BlY3RlZFdlYlZpZXc7CiAgICAgUmV0
YWluUHRyPFdlYkluc3BlY3RvcldpbmRvd0NvbnRyb2xsZXI+IG1fd2luZG93Q29udHJvbGxlcjsK
ICAgICBXZWJDb3JlOjpTdHJpbmcgbV9pbnNwZWN0ZWRVUkw7CiB9OwpkaWZmIC0tZ2l0IGEvV2Vi
S2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQubW0gYi9XZWJLaXQvbWFj
L1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5tbQppbmRleCBjNWYxNzI5Li4wMGM1
MWE5IDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNs
aWVudC5tbQorKysgYi9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVu
dC5tbQpAQCAtNDEsNiArNDEsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9QYWdlLmg+CiAjaW1wb3J0
IDxXZWJLaXQvRE9NRXh0ZW5zaW9ucy5oPgogI2ltcG9ydCA8V2ViS2l0U3lzdGVtSW50ZXJmYWNl
Lmg+CisjaW1wb3J0IDx3dGYvUGFzc093blB0ci5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKIApAQCAtNDgsNDUgKzQ5LDk0IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogQHByaXZh
dGUKICAgICBXZWJWaWV3ICpfaW5zcGVjdGVkV2ViVmlldzsKICAgICBXZWJWaWV3ICpfd2ViVmll
dzsKLSAgICBXZWJOb2RlSGlnaGxpZ2h0ICpfY3VycmVudEhpZ2hsaWdodDsKKyAgICBXZWJJbnNw
ZWN0b3JGcm9udGVuZENsaWVudCogX2Zyb250ZW5kQ2xpZW50OwogICAgIEJPT0wgX2F0dGFjaGVk
VG9JbnNwZWN0ZWRXZWJWaWV3OwogICAgIEJPT0wgX3Nob3VsZEF0dGFjaDsKICAgICBCT09MIF92
aXNpYmxlOwotICAgIEJPT0wgX21vdmluZ1dpbmRvd3M7CisgICAgQk9PTCBfZGVzdHJveWluZ0lu
c3BlY3RvclZpZXc7CiB9CiAtIChpZClpbml0V2l0aEluc3BlY3RlZFdlYlZpZXc6KFdlYlZpZXcg
Kil3ZWJWaWV3OwotLSAoQk9PTClpbnNwZWN0b3JWaXNpYmxlOwogLSAoV2ViVmlldyAqKXdlYlZp
ZXc7CiAtICh2b2lkKWF0dGFjaDsKIC0gKHZvaWQpZGV0YWNoOworLSAoQk9PTClhdHRhY2hlZDsK
Ky0gKHZvaWQpc2V0RnJvbnRlbmRDbGllbnQ6KFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50Kilm
cm9udGVuZENsaWVudDsKIC0gKHZvaWQpc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQ6KHVuc2lnbmVk
KWhlaWdodDsKKy0gKHZvaWQpZGVzdHJveUluc3BlY3RvclZpZXc7CitAZW5kCisKKyNwcmFnbWEg
bWFyayAtCisKK0BpbnRlcmZhY2UgV2ViTm9kZUhpZ2hsaWdodGVyIDogTlNPYmplY3QgeworQHBy
aXZhdGUKKyAgICBXZWJWaWV3ICpfaW5zcGVjdGVkV2ViVmlldzsKKyAgICBXZWJOb2RlSGlnaGxp
Z2h0ICpfY3VycmVudEhpZ2hsaWdodDsKK30KKy0gKGlkKWluaXRXaXRoSW5zcGVjdGVkV2ViVmll
dzooV2ViVmlldyAqKXdlYlZpZXc7CiAtICh2b2lkKWhpZ2hsaWdodE5vZGU6KERPTU5vZGUgKilu
b2RlOwogLSAodm9pZCloaWRlSGlnaGxpZ2h0OwogQGVuZAogCiAjcHJhZ21hIG1hcmsgLQogCisK
IFdlYkluc3BlY3RvckNsaWVudDo6V2ViSW5zcGVjdG9yQ2xpZW50KFdlYlZpZXcgKndlYlZpZXcp
CiA6IG1fd2ViVmlldyh3ZWJWaWV3KQorLCBtX2hpZ2hsaWdodGVyKEFkb3B0TlMsIFtbV2ViTm9k
ZUhpZ2hsaWdodGVyIGFsbG9jXSBpbml0V2l0aEluc3BlY3RlZFdlYlZpZXc6d2ViVmlld10pCiB7
CiB9CiAKIHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjppbnNwZWN0b3JEZXN0cm95ZWQoKQogewot
ICAgIFtbbV93aW5kb3dDb250cm9sbGVyLmdldCgpIHdlYlZpZXddIGNsb3NlXTsKICAgICBkZWxl
dGUgdGhpczsKIH0KIAotUGFnZSogV2ViSW5zcGVjdG9yQ2xpZW50OjpjcmVhdGVQYWdlKCkKK3Zv
aWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpvcGVuSW5zcGVjdG9yRnJvbnRlbmQoSW5zcGVjdG9yQ29u
dHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlcikKIHsKLSAgICBpZiAobV93aW5kb3dDb250cm9s
bGVyKQotICAgICAgICBbW21fd2luZG93Q29udHJvbGxlci5nZXQoKSB3ZWJWaWV3XSBjbG9zZV07
Ci0gICAgbV93aW5kb3dDb250cm9sbGVyLmFkb3B0TlMoW1tXZWJJbnNwZWN0b3JXaW5kb3dDb250
cm9sbGVyIGFsbG9jXSBpbml0V2l0aEluc3BlY3RlZFdlYlZpZXc6bV93ZWJWaWV3XSk7CisgICAg
UmV0YWluUHRyPFdlYkluc3BlY3RvcldpbmRvd0NvbnRyb2xsZXI+IHdpbmRvd0NvbnRyb2xsZXIo
QWRvcHROUywgW1tXZWJJbnNwZWN0b3JXaW5kb3dDb250cm9sbGVyIGFsbG9jXSBpbml0V2l0aElu
c3BlY3RlZFdlYlZpZXc6bV93ZWJWaWV3XSk7CisgICAgUGFnZSogZnJvbnRlbmRQYWdlID0gY29y
ZShbd2luZG93Q29udHJvbGxlci5nZXQoKSB3ZWJWaWV3XSk7CiAKLSAgICByZXR1cm4gY29yZShb
bV93aW5kb3dDb250cm9sbGVyLmdldCgpIHdlYlZpZXddKTsKKyAgICBmcm9udGVuZFBhZ2UtPmlu
c3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQobmV3IFdlYklu
c3BlY3RvckZyb250ZW5kQ2xpZW50KG1fd2ViVmlldywgd2luZG93Q29udHJvbGxlci5nZXQoKSwg
aW5zcGVjdG9yQ29udHJvbGxlciwgZnJvbnRlbmRQYWdlKSk7CiB9CiAKLVN0cmluZyBXZWJJbnNw
ZWN0b3JDbGllbnQ6OmxvY2FsaXplZFN0cmluZ3NVUkwoKQordm9pZCBXZWJJbnNwZWN0b3JDbGll
bnQ6OmhpZ2hsaWdodChOb2RlKiBub2RlKQoreworICAgIFttX2hpZ2hsaWdodGVyLmdldCgpIGhp
Z2hsaWdodE5vZGU6a2l0KG5vZGUpXTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6Omhp
ZGVIaWdobGlnaHQoKQoreworICAgIFttX2hpZ2hsaWdodGVyLmdldCgpIGhpZGVIaWdobGlnaHRd
OworfQorCitXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6V2ViSW5zcGVjdG9yRnJvbnRlbmRD
bGllbnQoV2ViVmlldyogaW5zcGVjdGVkV2ViVmlldywgV2ViSW5zcGVjdG9yV2luZG93Q29udHJv
bGxlciogd2luZG93Q29udHJvbGxlciwgSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29u
dHJvbGxlciwgUGFnZSogZnJvbnRlbmRQYWdlKQorICAgIDogSW5zcGVjdG9yRnJvbnRlbmRDbGll
bnRMb2NhbChpbnNwZWN0b3JDb250cm9sbGVyLCAgZnJvbnRlbmRQYWdlKQorICAgICwgbV9pbnNw
ZWN0ZWRXZWJWaWV3KGluc3BlY3RlZFdlYlZpZXcpCisgICAgLCBtX3dpbmRvd0NvbnRyb2xsZXIo
d2luZG93Q29udHJvbGxlcikKK3sKKyAgICBbd2luZG93Q29udHJvbGxlciBzZXRGcm9udGVuZENs
aWVudDp0aGlzXTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6ZnJvbnRl
bmRMb2FkZWQoKQoreworICAgIFttX3dpbmRvd0NvbnRyb2xsZXIuZ2V0KCkgc2hvd1dpbmRvdzpu
aWxdOworICAgIGlmIChbbV93aW5kb3dDb250cm9sbGVyLmdldCgpIGF0dGFjaGVkXSkKKyAgICAg
ICAgcmVzdG9yZUF0dGFjaGVkV2luZG93SGVpZ2h0KCk7CisKKyAgICBJbnNwZWN0b3JGcm9udGVu
ZENsaWVudExvY2FsOjpmcm9udGVuZExvYWRlZCgpOworCisgICAgV2ViRnJhbWUgKmZyYW1lID0g
W21faW5zcGVjdGVkV2ViVmlldyBtYWluRnJhbWVdOworICAgIAorICAgIFdlYkZyYW1lTG9hZERl
bGVnYXRlSW1wbGVtZW50YXRpb25DYWNoZSogaW1wbGVtZW50YXRpb25zID0gV2ViVmlld0dldEZy
YW1lTG9hZERlbGVnYXRlSW1wbGVtZW50YXRpb25zKG1faW5zcGVjdGVkV2ViVmlldyk7CisgICAg
aWYgKGltcGxlbWVudGF0aW9ucy0+ZGlkQ2xlYXJJbnNwZWN0b3JXaW5kb3dPYmplY3RGb3JGcmFt
ZUZ1bmMpCisgICAgICAgIENhbGxGcmFtZUxvYWREZWxlZ2F0ZShpbXBsZW1lbnRhdGlvbnMtPmRp
ZENsZWFySW5zcGVjdG9yV2luZG93T2JqZWN0Rm9yRnJhbWVGdW5jLCBtX2luc3BlY3RlZFdlYlZp
ZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAc2VsZWN0b3Iod2ViVmlldzpkaWRD
bGVhckluc3BlY3RvcldpbmRvd09iamVjdDpmb3JGcmFtZTopLCBbZnJhbWUgd2luZG93T2JqZWN0
XSwgZnJhbWUpOworCisgICAgYm9vbCBhdHRhY2hlZCA9IFttX3dpbmRvd0NvbnRyb2xsZXIuZ2V0
KCkgYXR0YWNoZWRdOworICAgIHNldEF0dGFjaGVkV2luZG93KGF0dGFjaGVkKTsKK30KKworU3Ry
aW5nIFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50Ojpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkKIHsK
ICAgICBOU1N0cmluZyAqcGF0aCA9IFtbTlNCdW5kbGUgYnVuZGxlV2l0aElkZW50aWZpZXI6QCJj
b20uYXBwbGUuV2ViQ29yZSJdIHBhdGhGb3JSZXNvdXJjZTpAImxvY2FsaXplZFN0cmluZ3MiIG9m
VHlwZTpAImpzIl07CiAgICAgaWYgKHBhdGgpCkBAIC05NCw3ICsxNDQsNyBAQCBTdHJpbmcgV2Vi
SW5zcGVjdG9yQ2xpZW50Ojpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkKICAgICByZXR1cm4gU3RyaW5n
KCk7CiB9CiAKLVN0cmluZyBXZWJJbnNwZWN0b3JDbGllbnQ6OmhpZGRlblBhbmVscygpCitTdHJp
bmcgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmhpZGRlblBhbmVscygpCiB7CiAgICAgTlNT
dHJpbmcgKmhpZGRlblBhbmVscyA9IFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVs
dHNdIHN0cmluZ0ZvcktleTpAIldlYktpdEluc3BlY3RvckhpZGRlblBhbmVscyJdOwogICAgIGlm
IChoaWRkZW5QYW5lbHMpCkBAIC0xMDIsNjMgKzE1Miw0NyBAQCBTdHJpbmcgV2ViSW5zcGVjdG9y
Q2xpZW50OjpoaWRkZW5QYW5lbHMoKQogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAotdm9pZCBX
ZWJJbnNwZWN0b3JDbGllbnQ6OnNob3dXaW5kb3coKQordm9pZCBXZWJJbnNwZWN0b3JGcm9udGVu
ZENsaWVudDo6YnJpbmdUb0Zyb250KCkKIHsKICAgICB1cGRhdGVXaW5kb3dUaXRsZSgpOwogICAg
IFttX3dpbmRvd0NvbnRyb2xsZXIuZ2V0KCkgc2hvd1dpbmRvdzpuaWxdOwogfQogCi12b2lkIFdl
Ykluc3BlY3RvckNsaWVudDo6Y2xvc2VXaW5kb3coKQordm9pZCBXZWJJbnNwZWN0b3JGcm9udGVu
ZENsaWVudDo6Y2xvc2VXaW5kb3coKQogewotICAgIFttX3dpbmRvd0NvbnRyb2xsZXIuZ2V0KCkg
Y2xvc2VdOworICAgIFttX3dpbmRvd0NvbnRyb2xsZXIuZ2V0KCkgZGVzdHJveUluc3BlY3RvclZp
ZXddOwogfQogCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6YXR0YWNoV2luZG93KCkKK3ZvaWQg
V2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmF0dGFjaFdpbmRvdygpCiB7CisgICAgaWYgKFtt
X3dpbmRvd0NvbnRyb2xsZXIuZ2V0KCkgYXR0YWNoZWRdKQorICAgICAgICByZXR1cm47CiAgICAg
W21fd2luZG93Q29udHJvbGxlci5nZXQoKSBhdHRhY2hdOworICAgIHJlc3RvcmVBdHRhY2hlZFdp
bmRvd0hlaWdodCgpOwogfQogCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6ZGV0YWNoV2luZG93
KCkKK3ZvaWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmRldGFjaFdpbmRvdygpCiB7CiAg
ICAgW21fd2luZG93Q29udHJvbGxlci5nZXQoKSBkZXRhY2hdOwogfQogCi12b2lkIFdlYkluc3Bl
Y3RvckNsaWVudDo6c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KQordm9p
ZCBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5z
aWduZWQgaGVpZ2h0KQogewogICAgIFttX3dpbmRvd0NvbnRyb2xsZXIuZ2V0KCkgc2V0QXR0YWNo
ZWRXaW5kb3dIZWlnaHQ6aGVpZ2h0XTsKIH0KIAotdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6Omhp
Z2hsaWdodChOb2RlKiBub2RlKQotewotICAgIFttX3dpbmRvd0NvbnRyb2xsZXIuZ2V0KCkgaGln
aGxpZ2h0Tm9kZTpraXQobm9kZSldOwotfQotCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6aGlk
ZUhpZ2hsaWdodCgpCi17Ci0gICAgW21fd2luZG93Q29udHJvbGxlci5nZXQoKSBoaWRlSGlnaGxp
Z2h0XTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6Omluc3BlY3RlZFVSTENoYW5nZWQo
Y29uc3QgU3RyaW5nJiBuZXdVUkwpCit2b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50Ojpp
bnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYgbmV3VVJMKQogewogICAgIG1faW5zcGVj
dGVkVVJMID0gbmV3VVJMOwogICAgIHVwZGF0ZVdpbmRvd1RpdGxlKCk7CiB9CiAKLXZvaWQgV2Vi
SW5zcGVjdG9yQ2xpZW50Ojp1cGRhdGVXaW5kb3dUaXRsZSgpIGNvbnN0Cit2b2lkIFdlYkluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50Ojp1cGRhdGVXaW5kb3dUaXRsZSgpIGNvbnN0CiB7CiAgICAgTlNT
dHJpbmcgKnRpdGxlID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6VUlfU1RSSU5HKCJXZWIg
SW5zcGVjdG9yIOKAlCAlQCIsICJXZWIgSW5zcGVjdG9yIHdpbmRvdyB0aXRsZSIpLCAoTlNTdHJp
bmcgKiltX2luc3BlY3RlZFVSTF07CiAgICAgW1ttX3dpbmRvd0NvbnRyb2xsZXIuZ2V0KCkgd2lu
ZG93XSBzZXRUaXRsZTp0aXRsZV07CiB9CiAKLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjppbnNw
ZWN0b3JXaW5kb3dPYmplY3RDbGVhcmVkKCkKLXsKLSAgICBXZWJGcmFtZSAqZnJhbWUgPSBbbV93
ZWJWaWV3IG1haW5GcmFtZV07Ci0gICAgCi0gICAgV2ViRnJhbWVMb2FkRGVsZWdhdGVJbXBsZW1l
bnRhdGlvbkNhY2hlKiBpbXBsZW1lbnRhdGlvbnMgPSBXZWJWaWV3R2V0RnJhbWVMb2FkRGVsZWdh
dGVJbXBsZW1lbnRhdGlvbnMobV93ZWJWaWV3KTsKLSAgICBpZiAoaW1wbGVtZW50YXRpb25zLT5k
aWRDbGVhckluc3BlY3RvcldpbmRvd09iamVjdEZvckZyYW1lRnVuYykKLSAgICAgICAgQ2FsbEZy
YW1lTG9hZERlbGVnYXRlKGltcGxlbWVudGF0aW9ucy0+ZGlkQ2xlYXJJbnNwZWN0b3JXaW5kb3dP
YmplY3RGb3JGcmFtZUZ1bmMsIG1fd2ViVmlldywKLSAgICAgICAgICBAc2VsZWN0b3Iod2ViVmll
dzpkaWRDbGVhckluc3BlY3RvcldpbmRvd09iamVjdDpmb3JGcmFtZTopLCBbZnJhbWUgd2luZG93
T2JqZWN0XSwgZnJhbWUpOwotfQogCiAjcHJhZ21hIG1hcmsgLQogCkBAIC0yMjEsMTggKzI1NSwx
MiBAQCB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6aW5zcGVjdG9yV2luZG93T2JqZWN0Q2xlYXJl
ZCgpCiAKIC0gKHZvaWQpZGVhbGxvYwogewotICAgIEFTU0VSVCghX2N1cnJlbnRIaWdobGlnaHQp
OwogICAgIFtfd2ViVmlldyByZWxlYXNlXTsKICAgICBbc3VwZXIgZGVhbGxvY107CiB9CiAKICNw
cmFnbWEgbWFyayAtCiAKLS0gKEJPT0wpaW5zcGVjdG9yVmlzaWJsZQotewotICAgIHJldHVybiBf
dmlzaWJsZTsKLX0KLQogLSAoV2ViVmlldyAqKXdlYlZpZXcKIHsKICAgICByZXR1cm4gX3dlYlZp
ZXc7CkBAIC0yNzEsMTEgKzI5OSw3IEBAIHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjppbnNwZWN0
b3JXaW5kb3dPYmplY3RDbGVhcmVkKCkKIAogLSAoQk9PTCl3aW5kb3dTaG91bGRDbG9zZTooaWQp
c2VuZGVyCiB7Ci0gICAgX3Zpc2libGUgPSBOTzsKLQotICAgIFtfaW5zcGVjdGVkV2ViVmlldyBw
YWdlXS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5zZXRXaW5kb3dWaXNpYmxlKGZhbHNlKTsKLQot
ICAgIFtzZWxmIGhpZGVIaWdobGlnaHRdOworICAgIFtzZWxmIGRlc3Ryb3lJbnNwZWN0b3JWaWV3
XTsKIAogICAgIHJldHVybiBZRVM7CiB9CkBAIC0yODcsMTEgKzMxMSw2IEBAIHZvaWQgV2ViSW5z
cGVjdG9yQ2xpZW50OjppbnNwZWN0b3JXaW5kb3dPYmplY3RDbGVhcmVkKCkKIAogICAgIF92aXNp
YmxlID0gTk87CiAKLSAgICBpZiAoIV9tb3ZpbmdXaW5kb3dzKQotICAgICAgICBbX2luc3BlY3Rl
ZFdlYlZpZXcgcGFnZV0tPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0V2luZG93VmlzaWJsZShm
YWxzZSk7Ci0KLSAgICBbc2VsZiBoaWRlSGlnaGxpZ2h0XTsKLQogICAgIGlmIChfYXR0YWNoZWRU
b0luc3BlY3RlZFdlYlZpZXcpIHsKICAgICAgICAgaWYgKFtfaW5zcGVjdGVkV2ViVmlldyBfaXND
bG9zZWRdKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzI4LDcgKzM0Nyw3IEBAIHZvaWQgV2Vi
SW5zcGVjdG9yQ2xpZW50OjppbnNwZWN0b3JXaW5kb3dPYmplY3RDbGVhcmVkKCkKICAgICBTdHJp
bmcgc2hvdWxkQXR0YWNoID0gW19pbnNwZWN0ZWRXZWJWaWV3IHBhZ2VdLT5pbnNwZWN0b3JDb250
cm9sbGVyKCktPnNldHRpbmcoSW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zcGVjdG9yU3RhcnRzQXR0
YWNoZWRTZXR0aW5nTmFtZSgpKTsKICAgICBfc2hvdWxkQXR0YWNoID0gc2hvdWxkQXR0YWNoICE9
ICJmYWxzZSI7CiAgICAgCi0gICAgaWYgKF9zaG91bGRBdHRhY2ggJiYgIVtfaW5zcGVjdGVkV2Vi
VmlldyBwYWdlXS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5jYW5BdHRhY2hXaW5kb3coKSkKKyAg
ICBpZiAoX3Nob3VsZEF0dGFjaCAmJiAhX2Zyb250ZW5kQ2xpZW50LT5jYW5BdHRhY2hXaW5kb3co
KSkKICAgICAgICAgX3Nob3VsZEF0dGFjaCA9IE5POwogCiAgICAgaWYgKF9zaG91bGRBdHRhY2gp
IHsKQEAgLTM1Miw4ICszNzEsNiBAQCB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6aW5zcGVjdG9y
V2luZG93T2JqZWN0Q2xlYXJlZCgpCiAKICAgICAgICAgW3N1cGVyIHNob3dXaW5kb3c6bmlsXTsK
ICAgICB9Ci0KLSAgICBbX2luc3BlY3RlZFdlYlZpZXcgcGFnZV0tPmluc3BlY3RvckNvbnRyb2xs
ZXIoKS0+c2V0V2luZG93VmlzaWJsZSh0cnVlLCBfc2hvdWxkQXR0YWNoKTsKIH0KIAogI3ByYWdt
YSBtYXJrIC0KQEAgLTM2NCwxMiArMzgxLDkgQEAgdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6Omlu
c3BlY3RvcldpbmRvd09iamVjdENsZWFyZWQoKQogICAgICAgICByZXR1cm47CiAKICAgICBbX2lu
c3BlY3RlZFdlYlZpZXcgcGFnZV0tPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0U2V0dGluZyhJ
bnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0b3JTdGFydHNBdHRhY2hlZFNldHRpbmdOYW1lKCks
ICJ0cnVlIik7Ci0gICAgX21vdmluZ1dpbmRvd3MgPSBZRVM7CiAKICAgICBbc2VsZiBjbG9zZV07
CiAgICAgW3NlbGYgc2hvd1dpbmRvdzpuaWxdOwotCi0gICAgX21vdmluZ1dpbmRvd3MgPSBOTzsK
IH0KIAogLSAodm9pZClkZXRhY2gKQEAgLTM3OCwxMyArMzkyLDE5IEBAIHZvaWQgV2ViSW5zcGVj
dG9yQ2xpZW50OjppbnNwZWN0b3JXaW5kb3dPYmplY3RDbGVhcmVkKCkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgW19pbnNwZWN0ZWRXZWJWaWV3IHBhZ2VdLT5pbnNwZWN0b3JDb250cm9sbGVyKCkt
PnNldFNldHRpbmcoSW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zcGVjdG9yU3RhcnRzQXR0YWNoZWRT
ZXR0aW5nTmFtZSgpLCAiZmFsc2UiKTsKLSAgICBfbW92aW5nV2luZG93cyA9IFlFUzsKIAogICAg
IFtzZWxmIGNsb3NlXTsKICAgICBbc2VsZiBzaG93V2luZG93Om5pbF07Cit9CiAKLSAgICBfbW92
aW5nV2luZG93cyA9IE5POworLSAoQk9PTClhdHRhY2hlZAoreworICAgIHJldHVybiBfYXR0YWNo
ZWRUb0luc3BlY3RlZFdlYlZpZXc7Cit9CiAKKy0gKHZvaWQpc2V0RnJvbnRlbmRDbGllbnQ6KFdl
Ykluc3BlY3RvckZyb250ZW5kQ2xpZW50Kilmcm9udGVuZENsaWVudAoreworICAgIF9mcm9udGVu
ZENsaWVudCA9IGZyb250ZW5kQ2xpZW50OwogfQogCiAtICh2b2lkKXNldEF0dGFjaGVkV2luZG93
SGVpZ2h0Oih1bnNpZ25lZCloZWlnaHQKQEAgLTQwNSwyOSArNDI1LDE3IEBAIHZvaWQgV2ViSW5z
cGVjdG9yQ2xpZW50OjppbnNwZWN0b3JXaW5kb3dPYmplY3RDbGVhcmVkKCkKICAgICBbZnJhbWVW
aWV3IHNldEZyYW1lOmZyYW1lVmlld1JlY3RdOwogfQogCi0jcHJhZ21hIG1hcmsgLQotCi0tICh2
b2lkKWhpZ2hsaWdodE5vZGU6KERPTU5vZGUgKilub2RlCistICh2b2lkKWRlc3Ryb3lJbnNwZWN0
b3JWaWV3CiB7Ci0gICAgLy8gVGhlIHNjcm9sbHZpZXcncyBjb250ZW50IHZpZXcgc3RheXMgYXJv
dW5kIGJldHdlZW4gcGFnZSBuYXZpZ2F0aW9ucywgc28gdGFyZ2V0IGl0Ci0gICAgTlNWaWV3ICp2
aWV3ID0gW1tbW1tfaW5zcGVjdGVkV2ViVmlldyBtYWluRnJhbWVdIGZyYW1lVmlld10gZG9jdW1l
bnRWaWV3XSBlbmNsb3NpbmdTY3JvbGxWaWV3XSBjb250ZW50Vmlld107Ci0gICAgaWYgKCFbdmll
dyB3aW5kb3ddKQotICAgICAgICByZXR1cm47IC8vIHNraXAgdGhlIGhpZ2hsaWdodCBpZiB3ZSBo
YXZlIG5vIHdpbmRvdyAoZS5nLiBoaWRkZW4gdGFiKQotCi0gICAgaWYgKCFfY3VycmVudEhpZ2hs
aWdodCkgewotICAgICAgICBfY3VycmVudEhpZ2hsaWdodCA9IFtbV2ViTm9kZUhpZ2hsaWdodCBh
bGxvY10gaW5pdFdpdGhUYXJnZXRWaWV3OnZpZXcgaW5zcGVjdG9yQ29udHJvbGxlcjpbX2luc3Bl
Y3RlZFdlYlZpZXcgcGFnZV0tPmluc3BlY3RvckNvbnRyb2xsZXIoKV07Ci0gICAgICAgIFtfY3Vy
cmVudEhpZ2hsaWdodCBzZXREZWxlZ2F0ZTpzZWxmXTsKLSAgICAgICAgW19jdXJyZW50SGlnaGxp
Z2h0IGF0dGFjaF07Ci0gICAgfSBlbHNlCi0gICAgICAgIFtbX2N1cnJlbnRIaWdobGlnaHQgaGln
aGxpZ2h0Vmlld10gc2V0TmVlZHNEaXNwbGF5OllFU107Ci19CisgICAgaWYgKF9kZXN0cm95aW5n
SW5zcGVjdG9yVmlldykKKyAgICAgICAgcmV0dXJuOworICAgIF9kZXN0cm95aW5nSW5zcGVjdG9y
VmlldyA9IFlFUzsKIAotLSAodm9pZCloaWRlSGlnaGxpZ2h0Ci17Ci0gICAgW19jdXJyZW50SGln
aGxpZ2h0IGRldGFjaF07Ci0gICAgW19jdXJyZW50SGlnaGxpZ2h0IHNldERlbGVnYXRlOm5pbF07
Ci0gICAgW19jdXJyZW50SGlnaGxpZ2h0IHJlbGVhc2VdOwotICAgIF9jdXJyZW50SGlnaGxpZ2h0
ID0gbmlsOworICAgIGlmIChfYXR0YWNoZWRUb0luc3BlY3RlZFdlYlZpZXcpCisgICAgICAgIFtz
ZWxmIGNsb3NlXTsKKyAgICBfdmlzaWJsZSA9IE5POworICAgIFtfaW5zcGVjdGVkV2ViVmlldyBw
YWdlXS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5kaXNjb25uZWN0RnJvbnRlbmQoKTsKKyAgICBb
X3dlYlZpZXcgY2xvc2VdOwogfQogCiAjcHJhZ21hIG1hcmsgLQpAQCAtNDk3LDMgKzUwNSw2MCBA
QCB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6aW5zcGVjdG9yV2luZG93T2JqZWN0Q2xlYXJlZCgp
CiB9CiAKIEBlbmQKKworCisjcHJhZ21hIG1hcmsgLQorCitAaW1wbGVtZW50YXRpb24gV2ViTm9k
ZUhpZ2hsaWdodGVyCistIChpZClpbml0V2l0aEluc3BlY3RlZFdlYlZpZXc6KFdlYlZpZXcgKil3
ZWJWaWV3Cit7CisgICAgLy8gRG9uJ3QgcmV0YWluIHRvIGF2b2lkIGEgY2lyY3VsYXIgcmVmZXJl
bmNlCisgICAgX2luc3BlY3RlZFdlYlZpZXcgPSB3ZWJWaWV3OworICAgIHJldHVybiBzZWxmOwor
fQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBBU1NFUlQoIV9jdXJyZW50SGlnaGxpZ2h0KTsK
KyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKyNwcmFnbWEgbWFyayAtCisKKy0gKHZvaWQpaGln
aGxpZ2h0Tm9kZTooRE9NTm9kZSAqKW5vZGUKK3sKKyAgICAvLyBUaGUgc2Nyb2xsdmlldydzIGNv
bnRlbnQgdmlldyBzdGF5cyBhcm91bmQgYmV0d2VlbiBwYWdlIG5hdmlnYXRpb25zLCBzbyB0YXJn
ZXQgaXQKKyAgICBOU1ZpZXcgKnZpZXcgPSBbW1tbW19pbnNwZWN0ZWRXZWJWaWV3IG1haW5GcmFt
ZV0gZnJhbWVWaWV3XSBkb2N1bWVudFZpZXddIGVuY2xvc2luZ1Njcm9sbFZpZXddIGNvbnRlbnRW
aWV3XTsKKyAgICBpZiAoIVt2aWV3IHdpbmRvd10pCisgICAgICAgIHJldHVybjsgLy8gc2tpcCB0
aGUgaGlnaGxpZ2h0IGlmIHdlIGhhdmUgbm8gd2luZG93IChlLmcuIGhpZGRlbiB0YWIpCisgICAg
CisgICAgaWYgKCFfY3VycmVudEhpZ2hsaWdodCkgeworICAgICAgICBfY3VycmVudEhpZ2hsaWdo
dCA9IFtbV2ViTm9kZUhpZ2hsaWdodCBhbGxvY10gaW5pdFdpdGhUYXJnZXRWaWV3OnZpZXcgaW5z
cGVjdG9yQ29udHJvbGxlcjpbX2luc3BlY3RlZFdlYlZpZXcgcGFnZV0tPmluc3BlY3RvckNvbnRy
b2xsZXIoKV07CisgICAgICAgIFtfY3VycmVudEhpZ2hsaWdodCBzZXREZWxlZ2F0ZTpzZWxmXTsK
KyAgICAgICAgW19jdXJyZW50SGlnaGxpZ2h0IGF0dGFjaF07CisgICAgfSBlbHNlCisgICAgICAg
IFtbX2N1cnJlbnRIaWdobGlnaHQgaGlnaGxpZ2h0Vmlld10gc2V0TmVlZHNEaXNwbGF5OllFU107
Cit9CisKKy0gKHZvaWQpaGlkZUhpZ2hsaWdodAoreworICAgIFtfY3VycmVudEhpZ2hsaWdodCBk
ZXRhY2hdOworICAgIFtfY3VycmVudEhpZ2hsaWdodCBzZXREZWxlZ2F0ZTpuaWxdOworICAgIFtf
Y3VycmVudEhpZ2hsaWdodCByZWxlYXNlXTsKKyAgICBfY3VycmVudEhpZ2hsaWdodCA9IG5pbDsK
K30KKworI3ByYWdtYSBtYXJrIC0KKyNwcmFnbWEgbWFyayBXZWJOb2RlSGlnaGxpZ2h0IGRlbGVn
YXRlCisKKy0gKHZvaWQpZGlkQXR0YWNoV2ViTm9kZUhpZ2hsaWdodDooV2ViTm9kZUhpZ2hsaWdo
dCAqKWhpZ2hsaWdodAoreworICAgIFtfaW5zcGVjdGVkV2ViVmlldyBzZXRDdXJyZW50Tm9kZUhp
Z2hsaWdodDpoaWdobGlnaHRdOworfQorCistICh2b2lkKXdpbGxEZXRhY2hXZWJOb2RlSGlnaGxp
Z2h0OihXZWJOb2RlSGlnaGxpZ2h0ICopaGlnaGxpZ2h0Cit7CisgICAgW19pbnNwZWN0ZWRXZWJW
aWV3IHNldEN1cnJlbnROb2RlSGlnaGxpZ2h0Om5pbF07Cit9CisgICAgCitAZW5kCmRpZmYgLS1n
aXQgYS9XZWJLaXQvbWFjL1dlYkluc3BlY3Rvci9XZWJJbnNwZWN0b3IubW0gYi9XZWJLaXQvbWFj
L1dlYkluc3BlY3Rvci9XZWJJbnNwZWN0b3IubW0KaW5kZXggMjU4ZGQwMS4uOWIxNzQ1OSAxMDA2
NDQKLS0tIGEvV2ViS2l0L21hYy9XZWJJbnNwZWN0b3IvV2ViSW5zcGVjdG9yLm1tCisrKyBiL1dl
YktpdC9tYWMvV2ViSW5zcGVjdG9yL1dlYkluc3BlY3Rvci5tbQpAQCAtMTc1LDE0ICsxNzUsMTAg
QEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIC0gKHZvaWQpYXR0YWNoOihpZClzZW5kZXIK
IHsKLSAgICBpZiAoUGFnZSogcGFnZSA9IGNvcmUoX3dlYlZpZXcpKQotICAgICAgICBwYWdlLT5p
bnNwZWN0b3JDb250cm9sbGVyKCktPmF0dGFjaFdpbmRvdygpOwogfQogCiAtICh2b2lkKWRldGFj
aDooaWQpc2VuZGVyCiB7Ci0gICAgaWYgKFBhZ2UqIHBhZ2UgPSBjb3JlKF93ZWJWaWV3KSkKLSAg
ICAgICAgcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5kZXRhY2hXaW5kb3coKTsKIH0KIAog
LSAodm9pZClldmFsdWF0ZUluRnJvbnRlbmQ6KGlkKXNlbmRlciBjYWxsSWQ6KGxvbmcpY2FsbElk
IHNjcmlwdDooTlNTdHJpbmcgKilzY3JpcHQKZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9BcGkvcXdl
Ymluc3BlY3Rvci5jcHAgYi9XZWJLaXQvcXQvQXBpL3F3ZWJpbnNwZWN0b3IuY3BwCmluZGV4IGMz
ZWY1MzAuLmMwZTUyNzcgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9BcGkvcXdlYmluc3BlY3Rvci5j
cHAKKysrIGIvV2ViS2l0L3F0L0FwaS9xd2ViaW5zcGVjdG9yLmNwcApAQCAtMTYxLDYgKzE2MSwx
MCBAQCB2b2lkIFFXZWJJbnNwZWN0b3I6OnNob3dFdmVudChRU2hvd0V2ZW50KiBldmVudCkKIC8q
ISBccmVpbXAgKi8KIHZvaWQgUVdlYkluc3BlY3Rvcjo6aGlkZUV2ZW50KFFIaWRlRXZlbnQqIGV2
ZW50KQogeworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisgICAgaWYgKGQtPnBhZ2UpCisgICAgICAg
IGQtPnBhZ2UtPmQtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+Y2xvc2UoKTsKKyNlbmRpZgogfQog
CiAvKiEgXHJlaW1wICovCkBAIC0xNjgsNyArMTcyLDcgQEAgdm9pZCBRV2ViSW5zcGVjdG9yOjpj
bG9zZUV2ZW50KFFDbG9zZUV2ZW50KiBldmVudCkKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQog
ICAgIGlmIChkLT5wYWdlKQotICAgICAgICBkLT5wYWdlLT5kLT5pbnNwZWN0b3JDb250cm9sbGVy
KCktPnNldFdpbmRvd1Zpc2libGUoZmFsc2UpOworICAgICAgICBkLT5wYWdlLT5kLT5pbnNwZWN0
b3JDb250cm9sbGVyKCktPmNsb3NlKCk7CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvV2ViS2l0
L3F0L0FwaS9xd2ViaW5zcGVjdG9yLmggYi9XZWJLaXQvcXQvQXBpL3F3ZWJpbnNwZWN0b3IuaApp
bmRleCA2Y2RhNDc5Li5mMTkyZTkyIDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvQXBpL3F3ZWJpbnNw
ZWN0b3IuaAorKysgYi9XZWJLaXQvcXQvQXBpL3F3ZWJpbnNwZWN0b3IuaApAQCAtNTIsNSArNTIs
NiBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBRV2ViUGFnZTsKICAgICBmcmllbmQgY2xh
c3MgUVdlYlBhZ2VQcml2YXRlOwogICAgIGZyaWVuZCBjbGFzcyBXZWJDb3JlOjpJbnNwZWN0b3JD
bGllbnRRdDsKKyAgICBmcmllbmQgY2xhc3MgV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGll
bnRRdDsKIH07CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuaCBi
L1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuaAppbmRleCA0NzY2Y2JkLi4wNzZmYjdjIDEwMDY0NAot
LS0gYS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmgKKysrIGIvV2ViS2l0L3F0L0FwaS9xd2VicGFn
ZS5oCkBAIC01NCw2ICs1NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBFZGl0
b3JDbGllbnRRdDsKICAgICBjbGFzcyBGcmFtZUxvYWRlckNsaWVudFF0OwogICAgIGNsYXNzIElu
c3BlY3RvckNsaWVudFF0OworICAgIGNsYXNzIEluc3BlY3RvckZyb250ZW5kQ2xpZW50UXQ7CiAg
ICAgY2xhc3MgUmVzb3VyY2VIYW5kbGU7CiAgICAgY2xhc3MgSGl0VGVzdFJlc3VsdDsKICAgICBj
bGFzcyBRTmV0d29ya1JlcGx5SGFuZGxlcjsKQEAgLTM2MSw2ICszNjIsNyBAQCBwcml2YXRlOgog
ICAgIGZyaWVuZCBjbGFzcyBXZWJDb3JlOjpFZGl0b3JDbGllbnRRdDsKICAgICBmcmllbmQgY2xh
c3MgV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRRdDsKICAgICBmcmllbmQgY2xhc3MgV2ViQ29y
ZTo6SW5zcGVjdG9yQ2xpZW50UXQ7CisgICAgZnJpZW5kIGNsYXNzIFdlYkNvcmU6Okluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50UXQ7CiAgICAgZnJpZW5kIGNsYXNzIFdlYkNvcmU6OlJlc291cmNlSGFu
ZGxlOwogICAgIGZyaWVuZCBjbGFzcyBXZWJDb3JlOjpRTmV0d29ya1JlcGx5SGFuZGxlcjsKIH07
CmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQ2hhbmdlTG9nIGIvV2ViS2l0L3F0L0NoYW5nZUxvZwpp
bmRleCA5OGVkMzlhLi4wMjQ0NzIwIDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvQ2hhbmdlTG9nCisr
KyBiL1dlYktpdC9xdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMiBAQAorMjAxMC0wMy0xMSAgWXVy
eSBTZW1pa2hhdHNreSA8eXVyeXNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEludHJvZHVjZSBJbnNwZWN0b3JGcm9udGVuZENs
aWVudCB0aGF0IHByb3ZpZGVzIEluc3BlY3RvckZyb250ZW5kIHdpdGggYW4gaW50ZXJmYWNlIHRv
IHRoZSBlbWJlZGRlci4gSW5zcGVjdG9yQ2xpZW50IG5vdyBzZXJ2ZXMgYXMgYSBkZWxlZ2F0ZSBm
b3IgSW5zcGVjdG9yQ29udHJvbGxlciBhbmQgZG9lcyBub3QgY29udGFpbiBtZXRob2RzIGZvciBt
YW5hZ2luZyBpbnNwZWN0b3IgZnJvbnRlbmQgd2luZG93LiBUaGF0IGFsbG93cyB0byBjcmVhdGUg
cmVtb3RlIEluc3BlY3RvckZyb250ZW5kSG9zdC4KKworICAgICAgICBJbnRyb2R1Y2UgSW5zcGVj
dG9yRnJvbnRlbmRDbGllbnQgdGhhdCB3b3VsZCBwcm92aWRlIEluc3BlY3RvckZyb250ZW5kIHdp
dGggYW4gaW50ZXJmYWNlIHRvIHRoZSBlbWJlZGRlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzUwMzYKKworICAgICAgICAqIEFwaS9xd2ViaW5zcGVj
dG9yLmNwcDoKKyAgICAgICAgKFFXZWJJbnNwZWN0b3I6OmhpZGVFdmVudCk6CisgICAgICAgIChR
V2ViSW5zcGVjdG9yOjpjbG9zZUV2ZW50KToKKyAgICAgICAgKiBBcGkvcXdlYmluc3BlY3Rvci5o
OgorICAgICAgICAqIEFwaS9xd2VicGFnZS5oOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0lu
c3BlY3RvckNsaWVudFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNsaWVudFF0
OjpvcGVuSW5zcGVjdG9yRnJvbnRlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJv
bnRlbmRDbGllbnRRdDo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdCk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0Ojpmcm9udGVuZExvYWRlZCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0Ojpsb2NhbGl6ZWRTdHJpbmdzVVJM
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50UXQ6OmhpZGRlblBh
bmVscyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0Ojpicmlu
Z1RvRnJvbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdDo6
Y2xvc2VXaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRR
dDo6YXR0YWNoV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xp
ZW50UXQ6OmRldGFjaFdpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVu
ZENsaWVudFF0OjpzZXRBdHRhY2hlZFdpbmRvd0hlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JGcm9udGVuZENsaWVudFF0OjppbnNwZWN0ZWRVUkxDaGFuZ2VkKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50UXQ6OnVwZGF0ZVdpbmRvd1RpdGxlKToK
KyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRRdC5oOgorCiAyMDEwLTAz
LTE1ICBMYXN6bG8gR29tYm9zICA8bGFzemxvLjEuZ29tYm9zQG5va2lhLmNvbT4KIAogICAgICAg
ICBVbnJldmlld2VkLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0luc3Bl
Y3RvckNsaWVudFF0LmNwcCBiL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGll
bnRRdC5jcHAKaW5kZXggY2RlNjRjOC4uOWJmN2IyZSAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L1dl
YkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudFF0LmNwcAorKysgYi9XZWJLaXQvcXQvV2ViQ29y
ZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50UXQuY3BwCkBAIC04MSwxNSArODEsMTIgQEAgdm9pZCBJ
bnNwZWN0b3JDbGllbnRRdDo6aW5zcGVjdG9yRGVzdHJveWVkKCkKICAgICBkZWxldGUgdGhpczsK
IH0KIAotUGFnZSogSW5zcGVjdG9yQ2xpZW50UXQ6OmNyZWF0ZVBhZ2UoKQotewotICAgIFFXZWJW
aWV3KiBpbnNwZWN0b3JWaWV3ID0gbV9pbnNwZWN0b3JWaWV3LmdldCgpOwotICAgIGlmICghaW5z
cGVjdG9yVmlldykgewotICAgICAgICBpbnNwZWN0b3JWaWV3ID0gbmV3IFFXZWJWaWV3OwotICAg
ICAgICBJbnNwZWN0b3JDbGllbnRXZWJQYWdlKiBpbnNwZWN0b3JQYWdlID0gbmV3IEluc3BlY3Rv
ckNsaWVudFdlYlBhZ2UoaW5zcGVjdG9yVmlldyk7Ci0gICAgICAgIGluc3BlY3RvclZpZXctPnNl
dFBhZ2UoaW5zcGVjdG9yUGFnZSk7Ci0gICAgICAgIG1faW5zcGVjdG9yVmlldy5zZXQoaW5zcGVj
dG9yVmlldyk7Ci0gICAgfQorICAgIAordm9pZCBJbnNwZWN0b3JDbGllbnRRdDo6b3Blbkluc3Bl
Y3RvckZyb250ZW5kKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXIqKQoreworICAgIFFXZWJW
aWV3KiBpbnNwZWN0b3JWaWV3ID0gbmV3IFFXZWJWaWV3OworICAgIEluc3BlY3RvckNsaWVudFdl
YlBhZ2UqIGluc3BlY3RvclBhZ2UgPSBuZXcgSW5zcGVjdG9yQ2xpZW50V2ViUGFnZShpbnNwZWN0
b3JWaWV3KTsKKyAgICBpbnNwZWN0b3JWaWV3LT5zZXRQYWdlKGluc3BlY3RvclBhZ2UpOwogCiAg
ICAgUVVybCBpbnNwZWN0b3JVcmwgPSBtX2luc3BlY3RlZFdlYlBhZ2UtPnNldHRpbmdzKCktPmlu
c3BlY3RvclVybCgpOwogICAgIGlmICghaW5zcGVjdG9yVXJsLmlzVmFsaWQoKSkKQEAgLTk4LDUw
ICs5NSw3IEBAIFBhZ2UqIEluc3BlY3RvckNsaWVudFF0OjpjcmVhdGVQYWdlKCkKICAgICBtX2lu
c3BlY3RlZFdlYlBhZ2UtPmQtPmluc3BlY3RvckZyb250ZW5kID0gaW5zcGVjdG9yVmlldzsKICAg
ICBtX2luc3BlY3RlZFdlYlBhZ2UtPmQtPmdldE9yQ3JlYXRlSW5zcGVjdG9yKCktPmQtPnNldEZy
b250ZW5kKGluc3BlY3RvclZpZXcpOwogCi0gICAgcmV0dXJuIGluc3BlY3RvclZpZXctPnBhZ2Uo
KS0+ZC0+cGFnZTsKLX0KLQotU3RyaW5nIEluc3BlY3RvckNsaWVudFF0Ojpsb2NhbGl6ZWRTdHJp
bmdzVVJMKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsK
LX0KLQotU3RyaW5nIEluc3BlY3RvckNsaWVudFF0OjpoaWRkZW5QYW5lbHMoKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi12b2lkIEluc3BlY3Rv
ckNsaWVudFF0OjpzaG93V2luZG93KCkKLXsKLSAgICB1cGRhdGVXaW5kb3dUaXRsZSgpOwotCi0j
aWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBtX2luc3BlY3RlZFdlYlBhZ2UtPmQtPmluc3BlY3Rv
ckNvbnRyb2xsZXIoKS0+c2V0V2luZG93VmlzaWJsZSh0cnVlLCB0cnVlKTsKLSNlbmRpZgotfQot
Ci12b2lkIEluc3BlY3RvckNsaWVudFF0OjpjbG9zZVdpbmRvdygpCi17Ci0jaWYgRU5BQkxFKElO
U1BFQ1RPUikKLSAgICBtX2luc3BlY3RlZFdlYlBhZ2UtPmQtPmluc3BlY3RvckNvbnRyb2xsZXIo
KS0+c2V0V2luZG93VmlzaWJsZShmYWxzZSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBJbnNwZWN0b3JD
bGllbnRRdDo6YXR0YWNoV2luZG93KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12
b2lkIEluc3BlY3RvckNsaWVudFF0OjpkZXRhY2hXaW5kb3coKQotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ2xpZW50UXQ6OnNldEF0dGFjaGVkV2luZG93SGVp
Z2h0KHVuc2lnbmVkKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgaW5zcGVjdG9yVmll
dy0+cGFnZSgpLT5kLT5wYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnNldEluc3BlY3RvckZy
b250ZW5kQ2xpZW50KG5ldyBJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0KG1faW5zcGVjdGVkV2Vi
UGFnZSwgaW5zcGVjdG9yVmlldykpOwogfQogCiB2b2lkIEluc3BlY3RvckNsaWVudFF0OjpoaWdo
bGlnaHQoTm9kZSopCkBAIC0xNTQsMjUgKzEwOCw2IEBAIHZvaWQgSW5zcGVjdG9yQ2xpZW50UXQ6
OmhpZGVIaWdobGlnaHQoKQogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgSW5zcGVj
dG9yQ2xpZW50UXQ6Omluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJiBuZXdVUkwpCi17
Ci0gICAgbV9pbnNwZWN0ZWRVUkwgPSBuZXdVUkw7Ci0gICAgdXBkYXRlV2luZG93VGl0bGUoKTsK
LX0KLQotdm9pZCBJbnNwZWN0b3JDbGllbnRRdDo6aW5zcGVjdG9yV2luZG93T2JqZWN0Q2xlYXJl
ZCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDbGllbnRR
dDo6dXBkYXRlV2luZG93VGl0bGUoKQotewotICAgIGlmIChtX2luc3BlY3RlZFdlYlBhZ2UtPmQt
Pmluc3BlY3RvcikgewotICAgICAgICBRU3RyaW5nIGNhcHRpb24gPSBRQ29yZUFwcGxpY2F0aW9u
Ojp0cmFuc2xhdGUoIlFXZWJQYWdlIiwgIldlYiBJbnNwZWN0b3IgLSAlMiIpLmFyZyhtX2luc3Bl
Y3RlZFVSTCk7Ci0gICAgICAgIG1faW5zcGVjdGVkV2ViUGFnZS0+ZC0+aW5zcGVjdG9yLT5zZXRX
aW5kb3dUaXRsZShjYXB0aW9uKTsKLSAgICB9Ci19Ci0KIHZvaWQgSW5zcGVjdG9yQ2xpZW50UXQ6
OnBvcHVsYXRlU2V0dGluZyhjb25zdCBTdHJpbmcmIGtleSwgU3RyaW5nKiBzZXR0aW5nKQogewog
ICAgIFFTZXR0aW5ncyBxc2V0dGluZ3M7CkBAIC0yMjYsNiArMTYxLDgxIEBAIHN0YXRpYyBRVmFy
aWFudCBzZXR0aW5nVG9WYXJpYW50KGNvbnN0IFN0cmluZyYgc2V0dGluZykKICAgICByZXR1cm4g
cmV0VmFsOwogfQogCitJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0OjpJbnNwZWN0b3JGcm9udGVu
ZENsaWVudFF0KFFXZWJQYWdlKiBpbnNwZWN0ZWRXZWJQYWdlLCBQYXNzT3duUHRyPFFXZWJWaWV3
PiBpbnNwZWN0b3JWaWV3KQorICAgIDogSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbChpbnNw
ZWN0ZWRXZWJQYWdlLT5kLT5wYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCksIGluc3BlY3RvclZp
ZXctPnBhZ2UoKS0+ZC0+cGFnZSkgCisgICAgLCBtX2luc3BlY3RlZFdlYlBhZ2UoaW5zcGVjdGVk
V2ViUGFnZSkKKyAgICAsIG1faW5zcGVjdG9yVmlldyhpbnNwZWN0b3JWaWV3KQorICAgICwgbV9k
ZXN0cm95aW5nSW5zcGVjdG9yVmlldyhmYWxzZSkKK3sKK30KKwordm9pZCBJbnNwZWN0b3JGcm9u
dGVuZENsaWVudFF0Ojpmcm9udGVuZExvYWRlZCgpCit7CisgICAgSW5zcGVjdG9yRnJvbnRlbmRD
bGllbnRMb2NhbDo6ZnJvbnRlbmRMb2FkZWQoKTsKKyAgICBzZXRBdHRhY2hlZFdpbmRvdyh0cnVl
KTsKK30KKworU3RyaW5nIEluc3BlY3RvckZyb250ZW5kQ2xpZW50UXQ6OmxvY2FsaXplZFN0cmlu
Z3NVUkwoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFN0cmluZygpOwor
fQorCitTdHJpbmcgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdDo6aGlkZGVuUGFuZWxzKCkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKwordm9pZCBJ
bnNwZWN0b3JGcm9udGVuZENsaWVudFF0OjpicmluZ1RvRnJvbnQoKQoreworICAgIHVwZGF0ZVdp
bmRvd1RpdGxlKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdDo6Y2xvc2VX
aW5kb3coKQoreworICAgIGlmIChtX2Rlc3Ryb3lpbmdJbnNwZWN0b3JWaWV3KQorICAgICAgICBy
ZXR1cm47CisgICAgbV9kZXN0cm95aW5nSW5zcGVjdG9yVmlldyA9IHRydWU7CisKKyAgICAvLyBD
bGVhciByZWZlcmVuY2UgZnJvbSBRV2ViSW5zcGVjdG9yIHRvIHRoZSBmcm9udGVuZCB2aWV3Lgor
ICAgIG1faW5zcGVjdGVkV2ViUGFnZS0+ZC0+Z2V0T3JDcmVhdGVJbnNwZWN0b3IoKS0+ZC0+c2V0
RnJvbnRlbmQoMCk7CisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKyAgICBtX2luc3BlY3RlZFdlYlBh
Z2UtPmQtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+ZGlzY29ubmVjdEZyb250ZW5kKCk7CisjZW5k
aWYKKyAgICAvLyBDbGVhciBwb2ludGVyIGJlZm9yZSBkZWxldGluZyBXZWJWaWV3IHRvIGF2b2lk
IHJlY3Vyc2l2ZSBjYWxscyB0byBpdHMgZGVzdHJ1Y3Rvci4KKyAgICBkZWxldGUgbV9pbnNwZWN0
b3JWaWV3LnJlbGVhc2UoKTsKK30KKwordm9pZCBJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0Ojph
dHRhY2hXaW5kb3coKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgSW5zcGVj
dG9yRnJvbnRlbmRDbGllbnRRdDo6ZGV0YWNoV2luZG93KCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCit2b2lkIEluc3BlY3RvckZyb250ZW5kQ2xpZW50UXQ6OnNldEF0dGFjaGVkV2lu
ZG93SGVpZ2h0KHVuc2lnbmVkKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQg
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdDo6aW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJp
bmcmIG5ld1VSTCkKK3sKKyAgICBtX2luc3BlY3RlZFVSTCA9IG5ld1VSTDsKKyAgICB1cGRhdGVX
aW5kb3dUaXRsZSgpOworfQorCit2b2lkIEluc3BlY3RvckZyb250ZW5kQ2xpZW50UXQ6OnVwZGF0
ZVdpbmRvd1RpdGxlKCkKK3sKKyAgICBpZiAobV9pbnNwZWN0ZWRXZWJQYWdlLT5kLT5pbnNwZWN0
b3IpIHsKKyAgICAgICAgUVN0cmluZyBjYXB0aW9uID0gUUNvcmVBcHBsaWNhdGlvbjo6dHJhbnNs
YXRlKCJRV2ViUGFnZSIsICJXZWIgSW5zcGVjdG9yIC0gJTIiKS5hcmcobV9pbnNwZWN0ZWRVUkwp
OworICAgICAgICBtX2luc3BlY3RlZFdlYlBhZ2UtPmQtPmluc3BlY3Rvci0+c2V0V2luZG93VGl0
bGUoY2FwdGlvbik7CisgICAgfQorfQorCiB9CiAKICNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnRR
dC5tb2MiCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xp
ZW50UXQuaCBiL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRRdC5oCmlu
ZGV4IGM5NTQ4YjAuLjRiZWFkYWIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9JbnNwZWN0b3JDbGllbnRRdC5oCisrKyBiL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9JbnNw
ZWN0b3JDbGllbnRRdC5oCkBAIC0zMSw3ICszMSw5IEBACiAjZGVmaW5lIEluc3BlY3RvckNsaWVu
dFF0X2gKIAogI2luY2x1ZGUgIkluc3BlY3RvckNsaWVudC5oIgorI2luY2x1ZGUgIkluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50TG9jYWwuaCIKICNpbmNsdWRlICJPd25QdHIuaCIKKyNpbmNsdWRlICJQ
YXNzT3duUHRyLmgiCiAjaW5jbHVkZSA8UXRDb3JlL1FTdHJpbmc+CiAKIGNsYXNzIFFXZWJQYWdl
OwpAQCAtNDgsMTMgKzUwLDI5IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0
b3JEZXN0cm95ZWQoKTsKIAotICAgIHZpcnR1YWwgUGFnZSogY3JlYXRlUGFnZSgpOworICAgIHZp
cnR1YWwgdm9pZCBvcGVuSW5zcGVjdG9yRnJvbnRlbmQoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJv
bGxlciopOworCisgICAgdmlydHVhbCB2b2lkIGhpZ2hsaWdodChOb2RlKik7CisgICAgdmlydHVh
bCB2b2lkIGhpZGVIaWdobGlnaHQoKTsKKworICAgIHZpcnR1YWwgdm9pZCBwb3B1bGF0ZVNldHRp
bmcoY29uc3QgU3RyaW5nJiBrZXksIFN0cmluZyogdmFsdWUpOworICAgIHZpcnR1YWwgdm9pZCBz
dG9yZVNldHRpbmcoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpOworCitw
cml2YXRlOgorICAgIFFXZWJQYWdlKiBtX2luc3BlY3RlZFdlYlBhZ2U7Cit9OworCitjbGFzcyBJ
bnNwZWN0b3JGcm9udGVuZENsaWVudFF0IDogcHVibGljIEluc3BlY3RvckZyb250ZW5kQ2xpZW50
TG9jYWwgeworcHVibGljOgorICAgIEluc3BlY3RvckZyb250ZW5kQ2xpZW50UXQoUVdlYlBhZ2Uq
IGluc3BlY3RlZFdlYlBhZ2UsIFBhc3NPd25QdHI8UVdlYlZpZXc+IGluc3BlY3RvclZpZXcpOwor
CisgICAgdmlydHVhbCB2b2lkIGZyb250ZW5kTG9hZGVkKCk7CiAKICAgICB2aXJ0dWFsIFN0cmlu
ZyBsb2NhbGl6ZWRTdHJpbmdzVVJMKCk7CiAKICAgICB2aXJ0dWFsIFN0cmluZyBoaWRkZW5QYW5l
bHMoKTsKIAotICAgIHZpcnR1YWwgdm9pZCBzaG93V2luZG93KCk7CisgICAgdmlydHVhbCB2b2lk
IGJyaW5nVG9Gcm9udCgpOwogICAgIHZpcnR1YWwgdm9pZCBjbG9zZVdpbmRvdygpOwogCiAgICAg
dmlydHVhbCB2b2lkIGF0dGFjaFdpbmRvdygpOwpAQCAtNjIsMjAgKzgwLDE0IEBAIHB1YmxpYzoK
IAogICAgIHZpcnR1YWwgdm9pZCBzZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWln
aHQpOwogCi0gICAgdmlydHVhbCB2b2lkIGhpZ2hsaWdodChOb2RlKik7Ci0gICAgdmlydHVhbCB2
b2lkIGhpZGVIaWdobGlnaHQoKTsKICAgICB2aXJ0dWFsIHZvaWQgaW5zcGVjdGVkVVJMQ2hhbmdl
ZChjb25zdCBTdHJpbmcmIG5ld1VSTCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgcG9wdWxhdGVTZXR0
aW5nKGNvbnN0IFN0cmluZyYga2V5LCBTdHJpbmcqIHZhbHVlKTsKLSAgICB2aXJ0dWFsIHZvaWQg
c3RvcmVTZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKLQot
ICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0b3JXaW5kb3dPYmplY3RDbGVhcmVkKCk7Ci0KIHByaXZh
dGU6CiAgICAgdm9pZCB1cGRhdGVXaW5kb3dUaXRsZSgpOwogICAgIFFXZWJQYWdlKiBtX2luc3Bl
Y3RlZFdlYlBhZ2U7CiAgICAgT3duUHRyPFFXZWJWaWV3PiBtX2luc3BlY3RvclZpZXc7CiAgICAg
UVN0cmluZyBtX2luc3BlY3RlZFVSTDsKKyAgICBib29sIG1fZGVzdHJveWluZ0luc3BlY3RvclZp
ZXc7CiB9OwogfQogCmRpZmYgLS1naXQgYS9XZWJLaXQvd2luL0NoYW5nZUxvZyBiL1dlYktpdC93
aW4vQ2hhbmdlTG9nCmluZGV4IGI2YTMyMDMuLmIyNWQ2NGIgMTAwNjQ0Ci0tLSBhL1dlYktpdC93
aW4vQ2hhbmdlTG9nCisrKyBiL1dlYktpdC93aW4vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDcgQEAK
KzIwMTAtMDMtMTEgIFl1cnkgU2VtaWtoYXRza3kgPHl1cnlzQGNocm9taXVtLm9yZz4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbnRyb2R1Y2UgSW5z
cGVjdG9yRnJvbnRlbmRDbGllbnQgdGhhdCBwcm92aWRlcyBJbnNwZWN0b3JGcm9udGVuZCB3aXRo
IGFuIGludGVyZmFjZSB0byB0aGUgZW1iZWRkZXIuIEluc3BlY3RvckNsaWVudCBub3cgc2VydmVz
IGFzIGEgZGVsZWdhdGUgZm9yIEluc3BlY3RvckNvbnRyb2xsZXIgYW5kIGRvZXMgbm90IGNvbnRh
aW4gbWV0aG9kcyBmb3IgbWFuYWdpbmcgaW5zcGVjdG9yIGZyb250ZW5kIHdpbmRvdy4gVGhhdCBh
bGxvd3MgdG8gY3JlYXRlIHJlbW90ZSBJbnNwZWN0b3JGcm9udGVuZEhvc3QuCisKKyAgICAgICAg
SW50cm9kdWNlIEluc3BlY3RvckZyb250ZW5kQ2xpZW50IHRoYXQgd291bGQgcHJvdmlkZSBJbnNw
ZWN0b3JGcm9udGVuZCB3aXRoIGFuIGludGVyZmFjZSB0byB0aGUgZW1iZWRkZXIKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM1MDM2CisKKyAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuY3BwOgorICAgICAgICAoV2ViSW5z
cGVjdG9yQ2xpZW50OjpXZWJJbnNwZWN0b3JDbGllbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
Q2xpZW50Ojp+V2ViSW5zcGVjdG9yQ2xpZW50KToKKyAgICAgICAgKFdlYkluc3BlY3RvckNsaWVu
dDo6b3Blbkluc3BlY3RvckZyb250ZW5kKToKKyAgICAgICAgKFdlYkluc3BlY3RvckNsaWVudDo6
aGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYkluc3BlY3RvckNsaWVudDo6aGlkZUhpZ2hsaWdodCk6
CisgICAgICAgIChXZWJJbnNwZWN0b3JDbGllbnQ6OnVwZGF0ZUhpZ2hsaWdodCk6CisgICAgICAg
IChXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6V2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6On5XZWJJbnNwZWN0b3JGcm9u
dGVuZENsaWVudCk6CisgICAgICAgIChXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6ZnJvbnRl
bmRMb2FkZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmxvY2FsaXpl
ZFN0cmluZ3NVUkwpOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmhpZGRl
blBhbmVscyk6CisgICAgICAgIChXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6YnJpbmdUb0Zy
b250KToKKyAgICAgICAgKFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpjbG9zZVdpbmRvdyk6
CisgICAgICAgIChXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6YXR0YWNoV2luZG93KToKKyAg
ICAgICAgKFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpkZXRhY2hXaW5kb3cpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OnNldEF0dGFjaGVkV2luZG93SGVpZ2h0KToK
KyAgICAgICAgKFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjppbnNwZWN0ZWRVUkxDaGFuZ2Vk
KToKKyAgICAgICAgKFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpjbG9zZVdpbmRvd1dpdGhv
dXROb3RpZmljYXRpb25zKToKKyAgICAgICAgKFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50Ojpz
aG93V2luZG93V2l0aG91dE5vdGlmaWNhdGlvbnMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJv
bnRlbmRDbGllbnQ6OmRlc3Ryb3lJbnNwZWN0b3JWaWV3KToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50Ojp1cGRhdGVXaW5kb3dUaXRsZSk6CisgICAgICAgIChXZWJJbnNwZWN0
b3JGcm9udGVuZENsaWVudDo6b25HZXRNaW5NYXhJbmZvKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50OjpvblNpemUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRD
bGllbnQ6Om9uQ2xvc2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6Om9u
U2V0Rm9jdXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6Om9uV2ViVmll
d1dpbmRvd1Bvc0NoYW5naW5nKToKKyAgICAgICAgKFdlYkluc3BlY3RvclduZFByb2MpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OndpbmRvd1JlY2VpdmVkTWVzc2FnZSk6
CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50Lmg6CisgICAgICAg
IChXZWJJbnNwZWN0b3JDbGllbnQ6OmZyb250ZW5kQ2xvc2luZyk6CisgICAgICAgICogV2ViSW5z
cGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkluc3BlY3Rvcjo6YXR0YWNoKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvcjo6ZGV0YWNoKToKKwogMjAxMC0wMy0xNCAgRGFuIEJlcm5zdGVpbiAgPG1pdHpA
YXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpkaWZmIC0tZ2l0
IGEvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuY3BwIGIvV2Vi
S2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuY3BwCmluZGV4IDZhMTBj
MGQuLjE2YWQxNzIgMTAwNjQ0Ci0tLSBhL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViSW5z
cGVjdG9yQ2xpZW50LmNwcAorKysgYi9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkluc3Bl
Y3RvckNsaWVudC5jcHAKQEAgLTY5LDI1ICs2OSwxMyBAQCBzdGF0aWMgQ0ZCdW5kbGVSZWYgZ2V0
V2ViS2l0QnVuZGxlKCkKIAogV2ViSW5zcGVjdG9yQ2xpZW50OjpXZWJJbnNwZWN0b3JDbGllbnQo
V2ViVmlldyogd2ViVmlldykKICAgICA6IG1faW5zcGVjdGVkV2ViVmlldyh3ZWJWaWV3KQotICAg
ICwgbV9od25kKDApCi0gICAgLCBtX3dlYlZpZXdId25kKDApCi0gICAgLCBtX3Nob3VsZEF0dGFj
aFdoZW5TaG93bihmYWxzZSkKLSAgICAsIG1fYXR0YWNoZWQoZmFsc2UpCiB7CiAgICAgQVNTRVJU
KG1faW5zcGVjdGVkV2ViVmlldyk7Ci0KICAgICBtX2luc3BlY3RlZFdlYlZpZXctPnZpZXdXaW5k
b3coKE9MRV9IQU5ETEUqKSZtX2luc3BlY3RlZFdlYlZpZXdId25kKTsKLQotICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQgd2luZG93IHNpemUvcG9zaXRpb24gc2F2ZS9yZXN0b3JlCi0jaWYgMAotICAg
IFtzZWxmIHNldFdpbmRvd0ZyYW1lQXV0b3NhdmVOYW1lOkAiV2ViIEluc3BlY3RvciJdOwotI2Vu
ZGlmCiB9CiAKIFdlYkluc3BlY3RvckNsaWVudDo6fldlYkluc3BlY3RvckNsaWVudCgpCiB7Ci0g
ICAgaWYgKG1faHduZCkKLSAgICAgICAgOjpEZXN0cm95V2luZG93KG1faHduZCk7CiB9CiAKIHZv
aWQgV2ViSW5zcGVjdG9yQ2xpZW50OjppbnNwZWN0b3JEZXN0cm95ZWQoKQpAQCAtOTUsMzUgKzgz
LDMwIEBAIHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjppbnNwZWN0b3JEZXN0cm95ZWQoKQogICAg
IGRlbGV0ZSB0aGlzOwogfQogCi1QYWdlKiBXZWJJbnNwZWN0b3JDbGllbnQ6OmNyZWF0ZVBhZ2Uo
KQordm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6Om9wZW5JbnNwZWN0b3JGcm9udGVuZChJbnNwZWN0
b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyKQogewogICAgIHJlZ2lzdGVyV2luZG93
Q2xhc3MoKTsKIAotICAgIGlmIChtX2h3bmQpCi0gICAgICAgIDo6RGVzdHJveVdpbmRvdyhtX2h3
bmQpOwotCi0gICAgbV9od25kID0gOjpDcmVhdGVXaW5kb3dFeCgwLCBrV2ViSW5zcGVjdG9yV2lu
ZG93Q2xhc3NOYW1lLCAwLCBXU19PVkVSTEFQUEVEV0lORE9XLAorICAgIEhXTkQgZnJvbnRlbmRI
d25kID0gOjpDcmVhdGVXaW5kb3dFeCgwLCBrV2ViSW5zcGVjdG9yV2luZG93Q2xhc3NOYW1lLCAw
LCBXU19PVkVSTEFQUEVEV0lORE9XLAogICAgICAgICBkZWZhdWx0V2luZG93UmVjdCgpLngoKSwg
ZGVmYXVsdFdpbmRvd1JlY3QoKS55KCksIGRlZmF1bHRXaW5kb3dSZWN0KCkud2lkdGgoKSwgZGVm
YXVsdFdpbmRvd1JlY3QoKS5oZWlnaHQoKSwKICAgICAgICAgMCwgMCwgMCwgMCk7CiAKLSAgICBp
ZiAoIW1faHduZCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICA6OlNldFByb3AobV9od25kLCBr
V2ViSW5zcGVjdG9yUG9pbnRlclByb3AsIHJlaW50ZXJwcmV0X2Nhc3Q8SEFORExFPih0aGlzKSk7
CisgICAgaWYgKCFmcm9udGVuZEh3bmQpCisgICAgICAgIHJldHVybjsKIAotICAgIG1fd2ViVmll
dy5hZG9wdFJlZihXZWJWaWV3OjpjcmVhdGVJbnN0YW5jZSgpKTsKKyAgICBDT01QdHI8V2ViVmll
dz4gZnJvbnRlbmRXZWJWaWV3KEFkb3B0Q09NLCBXZWJWaWV3OjpjcmVhdGVJbnN0YW5jZSgpKTsK
IAotICAgIGlmIChGQUlMRUQobV93ZWJWaWV3LT5zZXRIb3N0V2luZG93KChPTEVfSEFORExFKShV
TE9ORzY0KW1faHduZCkpKQotICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoRkFJTEVEKGZyb250
ZW5kV2ViVmlldy0+c2V0SG9zdFdpbmRvdygoT0xFX0hBTkRMRSkoVUxPTkc2NClmcm9udGVuZEh3
bmQpKSkKKyAgICAgICAgcmV0dXJuOwogCiAgICAgUkVDVCByZWN0OwotICAgIEdldENsaWVudFJl
Y3QobV9od25kLCAmcmVjdCk7Ci0gICAgaWYgKEZBSUxFRChtX3dlYlZpZXctPmluaXRXaXRoRnJh
bWUocmVjdCwgMCwgMCkpKQotICAgICAgICByZXR1cm4gMDsKKyAgICBHZXRDbGllbnRSZWN0KGZy
b250ZW5kSHduZCwgJnJlY3QpOworICAgIGlmIChGQUlMRUQoZnJvbnRlbmRXZWJWaWV3LT5pbml0
V2l0aEZyYW1lKHJlY3QsIDAsIDApKSkKKyAgICAgICAgcmV0dXJuOwogCiAgICAgQ09NUHRyPFdl
Ykluc3BlY3RvckRlbGVnYXRlPiBkZWxlZ2F0ZShBZG9wdENPTSwgV2ViSW5zcGVjdG9yRGVsZWdh
dGU6OmNyZWF0ZUluc3RhbmNlKCkpOwotICAgIGlmIChGQUlMRUQobV93ZWJWaWV3LT5zZXRVSURl
bGVnYXRlKGRlbGVnYXRlLmdldCgpKSkpCi0gICAgICAgIHJldHVybiAwOworICAgIGlmIChGQUlM
RUQoZnJvbnRlbmRXZWJWaWV3LT5zZXRVSURlbGVnYXRlKGRlbGVnYXRlLmdldCgpKSkpCisgICAg
ICAgIHJldHVybjsKIAogICAgIC8vIEtlZXAgcHJlZmVyZW5jZXMgc2VwYXJhdGUgZnJvbSB0aGUg
cmVzdCBvZiB0aGUgY2xpZW50LCBtYWtpbmcgc3VyZSB3ZSBhcmUgdXNpbmcgZXhwZWN0ZWQgcHJl
ZmVyZW5jZSB2YWx1ZXMuCiAgICAgLy8gT25lIHJlYXNvbiB0aGlzIGlzIGdvb2QgaXMgdGhhdCBp
dCBrZWVwcyB0aGUgaW5zcGVjdG9yIG91dCBvZiBoaXN0b3J5IHZpYSAicHJpdmF0ZSBicm93c2lu
ZyIuCkBAIC0xMzQsNjYgKzExNywxMjYgQEAgUGFnZSogV2ViSW5zcGVjdG9yQ2xpZW50OjpjcmVh
dGVQYWdlKCkKICAgICBDT01QdHI8V2ViUHJlZmVyZW5jZXM+IHRlbXBQcmVmZXJlbmNlcyhBZG9w
dENPTSwgV2ViUHJlZmVyZW5jZXM6OmNyZWF0ZUluc3RhbmNlKCkpOwogICAgIENPTVB0cjxJV2Vi
UHJlZmVyZW5jZXM+IGlQcmVmZXJlbmNlczsKICAgICBpZiAoRkFJTEVEKHRlbXBQcmVmZXJlbmNl
cy0+aW5pdFdpdGhJZGVudGlmaWVyKEJTdHJpbmcoTCJXZWJJbnNwZWN0b3JQcmVmZXJlbmNlcyIp
LCAmaVByZWZlcmVuY2VzKSkpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm47CiAg
ICAgQ09NUHRyPFdlYlByZWZlcmVuY2VzPiBwcmVmZXJlbmNlcyhRdWVyeSwgaVByZWZlcmVuY2Vz
KTsKICAgICBpZiAoIXByZWZlcmVuY2VzKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0
dXJuOwogICAgIGlmIChGQUlMRUQocHJlZmVyZW5jZXMtPnNldEF1dG9zYXZlcyhGQUxTRSkpKQot
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuOwogICAgIGlmIChGQUlMRUQocHJlZmVy
ZW5jZXMtPnNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQoVFJVRSkpKQotICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgcmV0dXJuOwogICAgIGlmIChGQUlMRUQocHJlZmVyZW5jZXMtPnNldExvYWRz
SW1hZ2VzQXV0b21hdGljYWxseShUUlVFKSkpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICBy
ZXR1cm47CiAgICAgaWYgKEZBSUxFRChwcmVmZXJlbmNlcy0+c2V0QXV0aG9yQW5kVXNlclN0eWxl
c0VuYWJsZWQoVFJVRSkpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuOwogICAg
IGlmIChGQUlMRUQocHJlZmVyZW5jZXMtPnNldEFsbG93c0FuaW1hdGVkSW1hZ2VzKFRSVUUpKSkK
LSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybjsKICAgICBpZiAoRkFJTEVEKHByZWZl
cmVuY2VzLT5zZXRMb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkoVFJVRSkpKQotICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgcmV0dXJuOwogICAgIGlmIChGQUlMRUQocHJlZmVyZW5jZXMtPnNldFBs
dWdJbnNFbmFibGVkKEZBTFNFKSkpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm47
CiAgICAgaWYgKEZBSUxFRChwcmVmZXJlbmNlcy0+c2V0SmF2YUVuYWJsZWQoRkFMU0UpKSkKLSAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybjsKICAgICBpZiAoRkFJTEVEKHByZWZlcmVu
Y2VzLT5zZXRVc2VyU3R5bGVTaGVldEVuYWJsZWQoRkFMU0UpKSkKLSAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgIHJldHVybjsKICAgICBpZiAoRkFJTEVEKHByZWZlcmVuY2VzLT5zZXRUYWJzVG9M
aW5rcyhGQUxTRSkpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuOwogICAgIGlm
IChGQUlMRUQocHJlZmVyZW5jZXMtPnNldE1pbmltdW1Gb250U2l6ZSgwKSkpCi0gICAgICAgIHJl
dHVybiAwOworICAgICAgICByZXR1cm47CiAgICAgaWYgKEZBSUxFRChwcmVmZXJlbmNlcy0+c2V0
TWluaW11bUxvZ2ljYWxGb250U2l6ZSg5KSkpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICBy
ZXR1cm47CiAgICAgaWYgKEZBSUxFRChwcmVmZXJlbmNlcy0+c2V0Rml4ZWRGb250RmFtaWx5KEJT
dHJpbmcoTCJDb3VyaWVyIE5ldyIpKSkpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1
cm47CiAgICAgaWYgKEZBSUxFRChwcmVmZXJlbmNlcy0+c2V0RGVmYXVsdEZpeGVkRm9udFNpemUo
MTMpKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybjsKIAotICAgIGlmIChGQUlM
RUQobV93ZWJWaWV3LT5zZXRQcmVmZXJlbmNlcyhwcmVmZXJlbmNlcy5nZXQoKSkpKQotICAgICAg
ICByZXR1cm4gMDsKKyAgICBpZiAoRkFJTEVEKGZyb250ZW5kV2ViVmlldy0+c2V0UHJlZmVyZW5j
ZXMocHJlZmVyZW5jZXMuZ2V0KCkpKSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgbV93ZWJWaWV3
LT5zZXRQcm9oaWJpdHNNYWluRnJhbWVTY3JvbGxpbmcoVFJVRSk7CisgICAgZnJvbnRlbmRXZWJW
aWV3LT5zZXRQcm9oaWJpdHNNYWluRnJhbWVTY3JvbGxpbmcoVFJVRSk7CiAKLSAgICBpZiAoRkFJ
TEVEKG1fd2ViVmlldy0+dmlld1dpbmRvdyhyZWludGVycHJldF9jYXN0PE9MRV9IQU5ETEUqPigm
bV93ZWJWaWV3SHduZCkpKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgSFdORCBmcm9udGVuZFdl
YlZpZXdId25kOworICAgIGlmIChGQUlMRUQoZnJvbnRlbmRXZWJWaWV3LT52aWV3V2luZG93KHJl
aW50ZXJwcmV0X2Nhc3Q8T0xFX0hBTkRMRSo+KCZmcm9udGVuZFdlYlZpZXdId25kKSkpKQorICAg
ICAgICByZXR1cm47CiAKLSAgICBDT01QdHI8V2ViTXV0YWJsZVVSTFJlcXVlc3Q+IHJlcXVlc3Q7
Ci0gICAgcmVxdWVzdC5hZG9wdFJlZihXZWJNdXRhYmxlVVJMUmVxdWVzdDo6Y3JlYXRlSW5zdGFu
Y2UoKSk7CisgICAgQ09NUHRyPFdlYk11dGFibGVVUkxSZXF1ZXN0PiByZXF1ZXN0KEFkb3B0Q09N
LCBXZWJNdXRhYmxlVVJMUmVxdWVzdDo6Y3JlYXRlSW5zdGFuY2UoKSk7CiAKICAgICBSZXRhaW5Q
dHI8Q0ZVUkxSZWY+IGh0bWxVUkxSZWYoQWRvcHRDRiwgQ0ZCdW5kbGVDb3B5UmVzb3VyY2VVUkwo
Z2V0V2ViS2l0QnVuZGxlKCksIENGU1RSKCJpbnNwZWN0b3IiKSwgQ0ZTVFIoImh0bWwiKSwgQ0ZT
VFIoImluc3BlY3RvciIpKSk7CiAgICAgaWYgKCFodG1sVVJMUmVmKQotICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgcmV0dXJuOwogCiAgICAgQ0ZTdHJpbmdSZWYgdXJsU3RyaW5nUmVmID0gOjpD
RlVSTEdldFN0cmluZyhodG1sVVJMUmVmLmdldCgpKTsKICAgICBpZiAoRkFJTEVEKHJlcXVlc3Qt
PmluaXRXaXRoVVJMKEJTdHJpbmcodXJsU3RyaW5nUmVmKSwgV2ViVVJMUmVxdWVzdFVzZVByb3Rv
Y29sQ2FjaGVQb2xpY3ksIDYwKSkpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm47
CiAKLSAgICBpZiAoRkFJTEVEKG1fd2ViVmlldy0+dG9wTGV2ZWxGcmFtZSgpLT5sb2FkUmVxdWVz
dChyZXF1ZXN0LmdldCgpKSkpCi0gICAgICAgIHJldHVybiAwOworICAgIGlmIChGQUlMRUQoZnJv
bnRlbmRXZWJWaWV3LT50b3BMZXZlbEZyYW1lKCktPmxvYWRSZXF1ZXN0KHJlcXVlc3QuZ2V0KCkp
KSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgcmV0dXJuIGNvcmUobV93ZWJWaWV3LmdldCgpKTsK
KyAgICBQYWdlKiBwYWdlID0gY29yZShmcm9udGVuZFdlYlZpZXcuZ2V0KCkpOworICAgIHBhZ2Ut
Pmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQobmV3IFdl
Ykluc3BlY3RvckZyb250ZW5kQ2xpZW50KG1faW5zcGVjdGVkV2ViVmlldywgbV9pbnNwZWN0ZWRX
ZWJWaWV3SHduZCwgZnJvbnRlbmRId25kLCBmcm9udGVuZFdlYlZpZXcsIGZyb250ZW5kV2ViVmll
d0h3bmQsIHRoaXMpKTsKKyAgICBtX2Zyb250ZW5kSHduZCA9IGZyb250ZW5kSHduZDsKIH0KIAor
dm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmhpZ2hsaWdodChOb2RlKikKK3sKKyAgICBib29sIGNy
ZWF0aW5nSGlnaGxpZ2h0ID0gIW1faGlnaGxpZ2h0OworCisgICAgaWYgKGNyZWF0aW5nSGlnaGxp
Z2h0KQorICAgICAgICBtX2hpZ2hsaWdodC5zZXQobmV3IFdlYk5vZGVIaWdobGlnaHQobV9pbnNw
ZWN0ZWRXZWJWaWV3KSk7CiAKLVN0cmluZyBXZWJJbnNwZWN0b3JDbGllbnQ6OmxvY2FsaXplZFN0
cmluZ3NVUkwoKQorICAgIGlmIChtX2hpZ2hsaWdodC0+aXNTaG93aW5nKCkpCisgICAgICAgIG1f
aGlnaGxpZ2h0LT51cGRhdGUoKTsKKyAgICBlbHNlCisgICAgICAgIG1faGlnaGxpZ2h0LT5zZXRT
aG93c1doaWxlV2ViVmlld0lzVmlzaWJsZSh0cnVlKTsKKworICAgIGlmIChjcmVhdGluZ0hpZ2hs
aWdodCAmJiBJc1dpbmRvd1Zpc2libGUobV9mcm9udGVuZEh3bmQpKQorICAgICAgICBtX2hpZ2hs
aWdodC0+cGxhY2VCZWhpbmRXaW5kb3cobV9mcm9udGVuZEh3bmQpOworfQorCit2b2lkIFdlYklu
c3BlY3RvckNsaWVudDo6aGlkZUhpZ2hsaWdodCgpCit7CisgICAgaWYgKG1faGlnaGxpZ2h0KQor
ICAgICAgICBtX2hpZ2hsaWdodC0+c2V0U2hvd3NXaGlsZVdlYlZpZXdJc1Zpc2libGUoZmFsc2Up
OworfQorCit2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6dXBkYXRlSGlnaGxpZ2h0KCkKK3sKKyAg
ICBpZiAobV9oaWdobGlnaHQgJiYgbV9oaWdobGlnaHQtPmlzU2hvd2luZygpKQorICAgICAgICBt
X2hpZ2hsaWdodC0+dXBkYXRlKCk7Cit9CisKK1dlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpX
ZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudChXZWJWaWV3KiBpbnNwZWN0ZWRXZWJWaWV3LCBIV05E
IGluc3BlY3RlZFdlYlZpZXdId25kLCBIV05EIGZyb250ZW5kSHduZCwgY29uc3QgQ09NUHRyPFdl
YlZpZXc+JiBmcm9udGVuZFdlYlZpZXcsIEhXTkQgZnJvbnRlbmRXZWJWaWV3SHduZCwgV2ViSW5z
cGVjdG9yQ2xpZW50KiBpbnNwZWN0b3JDbGllbnQpCisgICAgOiBJbnNwZWN0b3JGcm9udGVuZENs
aWVudExvY2FsKGluc3BlY3RlZFdlYlZpZXctPnBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigp
LCAgY29yZShmcm9udGVuZFdlYlZpZXcuZ2V0KCkpKQorICAgICwgbV9pbnNwZWN0ZWRXZWJWaWV3
KGluc3BlY3RlZFdlYlZpZXcpCisgICAgLCBtX2luc3BlY3RlZFdlYlZpZXdId25kKGluc3BlY3Rl
ZFdlYlZpZXdId25kKQorICAgICwgbV9pbnNwZWN0b3JDbGllbnQoaW5zcGVjdG9yQ2xpZW50KQor
ICAgICwgbV9mcm9udGVuZEh3bmQoZnJvbnRlbmRId25kKQorICAgICwgbV9mcm9udGVuZFdlYlZp
ZXcoZnJvbnRlbmRXZWJWaWV3KQorICAgICwgbV9mcm9udGVuZFdlYlZpZXdId25kKGZyb250ZW5k
V2ViVmlld0h3bmQpCisgICAgLCBtX3Nob3VsZEF0dGFjaFdoZW5TaG93bihmYWxzZSkKKyAgICAs
IG1fYXR0YWNoZWQoZmFsc2UpCisgICAgLCBtX2Rlc3Ryb3lpbmdJbnNwZWN0b3JWaWV3KGZhbHNl
KQoreworICAgIDo6U2V0UHJvcChmcm9udGVuZEh3bmQsIGtXZWJJbnNwZWN0b3JQb2ludGVyUHJv
cCwgcmVpbnRlcnByZXRfY2FzdDxIQU5ETEU+KHRoaXMpKTsKKyAgICAvLyBGSVhNRTogSW1wbGVt
ZW50IHdpbmRvdyBzaXplL3Bvc2l0aW9uIHNhdmUvcmVzdG9yZQorI2lmIDAKKyAgICBbc2VsZiBz
ZXRXaW5kb3dGcmFtZUF1dG9zYXZlTmFtZTpAIldlYiBJbnNwZWN0b3IiXTsKKyNlbmRpZgorfQor
CitXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6fldlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50
KCkKK3sKKyAgICBkZXN0cm95SW5zcGVjdG9yVmlldygpOworfQorCit2b2lkIFdlYkluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50Ojpmcm9udGVuZExvYWRlZCgpCit7CisgICAgSW5zcGVjdG9yRnJvbnRl
bmRDbGllbnRMb2NhbDo6ZnJvbnRlbmRMb2FkZWQoKTsKKworICAgIHNldEF0dGFjaGVkV2luZG93
KG1fYXR0YWNoZWQpOworfQorCitTdHJpbmcgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6Omxv
Y2FsaXplZFN0cmluZ3NVUkwoKQogewogICAgIFJldGFpblB0cjxDRlVSTFJlZj4gdXJsKEFkb3B0
Q0YsIENGQnVuZGxlQ29weVJlc291cmNlVVJMKGdldFdlYktpdEJ1bmRsZSgpLCBDRlNUUigibG9j
YWxpemVkU3RyaW5ncyIpLCBDRlNUUigianMiKSwgMCkpOwogICAgIGlmICghdXJsKQpAQCAtMjAy
LDMxICsyNDUsMjMgQEAgU3RyaW5nIFdlYkluc3BlY3RvckNsaWVudDo6bG9jYWxpemVkU3RyaW5n
c1VSTCgpCiAgICAgcmV0dXJuIENGVVJMR2V0U3RyaW5nKHVybC5nZXQoKSk7CiB9CiAKLQotU3Ry
aW5nIFdlYkluc3BlY3RvckNsaWVudDo6aGlkZGVuUGFuZWxzKCkKK1N0cmluZyBXZWJJbnNwZWN0
b3JGcm9udGVuZENsaWVudDo6aGlkZGVuUGFuZWxzKCkKIHsKICAgICAvLyBGSVhNRTogaW1wbGVt
ZW50IHRoaXMKICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKLXZvaWQgV2ViSW5zcGVjdG9yQ2xp
ZW50OjpzaG93V2luZG93KCkKK3ZvaWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmJyaW5n
VG9Gcm9udCgpCiB7CiAgICAgc2hvd1dpbmRvd1dpdGhvdXROb3RpZmljYXRpb25zKCk7Ci0gICAg
bV9pbnNwZWN0ZWRXZWJWaWV3LT5wYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0V2lu
ZG93VmlzaWJsZSh0cnVlLCBtX3Nob3VsZEF0dGFjaFdoZW5TaG93bik7Ci19Ci0KLXZvaWQgV2Vi
SW5zcGVjdG9yQ2xpZW50OjpjbG9zZVdpbmRvdygpCi17Ci0gICAgY2xvc2VXaW5kb3dXaXRob3V0
Tm90aWZpY2F0aW9ucygpOwotICAgIG1faW5zcGVjdGVkV2ViVmlldy0+cGFnZSgpLT5pbnNwZWN0
b3JDb250cm9sbGVyKCktPnNldFdpbmRvd1Zpc2libGUoZmFsc2UsIG1fc2hvdWxkQXR0YWNoV2hl
blNob3duKTsKIH0KIAotYm9vbCBXZWJJbnNwZWN0b3JDbGllbnQ6OndpbmRvd1Zpc2libGUoKQor
dm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6Y2xvc2VXaW5kb3coKQogewotICAgIHJl
dHVybiAhITo6SXNXaW5kb3dWaXNpYmxlKG1faHduZCk7CisgICAgZGVzdHJveUluc3BlY3RvclZp
ZXcoKTsKIH0KIAotdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmF0dGFjaFdpbmRvdygpCit2b2lk
IFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjphdHRhY2hXaW5kb3coKQogewogICAgIGlmICht
X2F0dGFjaGVkKQogICAgICAgICByZXR1cm47CkBAIC0yMzcsNyArMjcyLDcgQEAgdm9pZCBXZWJJ
bnNwZWN0b3JDbGllbnQ6OmF0dGFjaFdpbmRvdygpCiAgICAgc2hvd1dpbmRvd1dpdGhvdXROb3Rp
ZmljYXRpb25zKCk7CiB9CiAKLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpkZXRhY2hXaW5kb3co
KQordm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6ZGV0YWNoV2luZG93KCkKIHsKICAg
ICBpZiAoIW1fYXR0YWNoZWQpCiAgICAgICAgIHJldHVybjsKQEAgLTI0OCw3ICsyODMsNyBAQCB2
b2lkIFdlYkluc3BlY3RvckNsaWVudDo6ZGV0YWNoV2luZG93KCkKICAgICBzaG93V2luZG93V2l0
aG91dE5vdGlmaWNhdGlvbnMoKTsKIH0KIAotdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OnNldEF0
dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkKK3ZvaWQgV2ViSW5zcGVjdG9yRnJv
bnRlbmRDbGllbnQ6OnNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkKIHsK
ICAgICBpZiAoIW1fYXR0YWNoZWQpCiAgICAgICAgIHJldHVybjsKQEAgLTI2NiwxMDEgKzMwMSw3
MyBAQCB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5z
aWduZWQgaGVpZ2h0KQogICAgIGludCB0b3RhbEhlaWdodCA9IGhvc3RXaW5kb3dSZWN0LmJvdHRv
bSAtIGhvc3RXaW5kb3dSZWN0LnRvcDsKICAgICBpbnQgd2ViVmlld1dpZHRoID0gaW5zcGVjdGVk
UmVjdC5yaWdodCAtIGluc3BlY3RlZFJlY3QubGVmdDsKIAotICAgIFNldFdpbmRvd1BvcyhtX3dl
YlZpZXdId25kLCAwLCAwLCB0b3RhbEhlaWdodCAtIGhlaWdodCwgd2ViVmlld1dpZHRoLCBoZWln
aHQsIFNXUF9OT1pPUkRFUik7CisgICAgU2V0V2luZG93UG9zKG1fZnJvbnRlbmRXZWJWaWV3SHdu
ZCwgMCwgMCwgdG90YWxIZWlnaHQgLSBoZWlnaHQsIHdlYlZpZXdXaWR0aCwgaGVpZ2h0LCBTV1Bf
Tk9aT1JERVIpOwogCiAgICAgLy8gV2Ugd2FudCB0byBzZXQgdGhlIGluc3BlY3RlZCB3ZWIgdmll
dyBoZWlnaHQgdG8gdGhlIHRvdGFsSGVpZ2h0LCBiZWNhdXNlIHRoZSBoZWlnaHQgYWRqdXN0bWVu
dAogICAgIC8vIG9mIHRoZSBpbnNwZWN0ZWQgd2ViIHZpZXcgaGFwcGVucyBpbiBvbldlYlZpZXdX
aW5kb3dQb3NDaGFuZ2luZywgbm90IGhlcmUuCiAgICAgU2V0V2luZG93UG9zKG1faW5zcGVjdGVk
V2ViVmlld0h3bmQsIDAsIDAsIDAsIHdlYlZpZXdXaWR0aCwgdG90YWxIZWlnaHQsIFNXUF9OT1pP
UkRFUik7CiAKLSAgICBSZWRyYXdXaW5kb3cobV93ZWJWaWV3SHduZCwgMCwgMCwgUkRXX0lOVkFM
SURBVEUgfCBSRFdfQUxMQ0hJTERSRU4gfCBSRFdfVVBEQVRFTk9XKTsgCisgICAgUmVkcmF3V2lu
ZG93KG1fZnJvbnRlbmRXZWJWaWV3SHduZCwgMCwgMCwgUkRXX0lOVkFMSURBVEUgfCBSRFdfQUxM
Q0hJTERSRU4gfCBSRFdfVVBEQVRFTk9XKTsgCiAgICAgUmVkcmF3V2luZG93KG1faW5zcGVjdGVk
V2ViVmlld0h3bmQsIDAsIDAsIFJEV19JTlZBTElEQVRFIHwgUkRXX0FMTENISUxEUkVOIHwgUkRX
X1VQREFURU5PVyk7CiB9CiAKLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpoaWdobGlnaHQoTm9k
ZSopCi17Ci0gICAgYm9vbCBjcmVhdGluZ0hpZ2hsaWdodCA9ICFtX2hpZ2hsaWdodDsKLQotICAg
IGlmIChjcmVhdGluZ0hpZ2hsaWdodCkKLSAgICAgICAgbV9oaWdobGlnaHQuc2V0KG5ldyBXZWJO
b2RlSGlnaGxpZ2h0KG1faW5zcGVjdGVkV2ViVmlldykpOwotCi0gICAgaWYgKG1faGlnaGxpZ2h0
LT5pc1Nob3dpbmcoKSkKLSAgICAgICAgbV9oaWdobGlnaHQtPnVwZGF0ZSgpOwotICAgIGVsc2UK
LSAgICAgICAgbV9oaWdobGlnaHQtPnNldFNob3dzV2hpbGVXZWJWaWV3SXNWaXNpYmxlKHRydWUp
OwotCi0gICAgaWYgKGNyZWF0aW5nSGlnaGxpZ2h0ICYmIElzV2luZG93VmlzaWJsZShtX2h3bmQp
KQotICAgICAgICBtX2hpZ2hsaWdodC0+cGxhY2VCZWhpbmRXaW5kb3cobV9od25kKTsKLX0KLQot
dm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmhpZGVIaWdobGlnaHQoKQotewotICAgIGlmIChtX2hp
Z2hsaWdodCkKLSAgICAgICAgbV9oaWdobGlnaHQtPnNldFNob3dzV2hpbGVXZWJWaWV3SXNWaXNp
YmxlKGZhbHNlKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6Omluc3BlY3RlZFVSTENo
YW5nZWQoY29uc3QgU3RyaW5nJiBuZXdVUkwpCit2b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQ2xp
ZW50OjppbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYgbmV3VVJMKQogewogICAgIG1f
aW5zcGVjdGVkVVJMID0gbmV3VVJMOwogICAgIHVwZGF0ZVdpbmRvd1RpdGxlKCk7CiB9CiAKLXZv
aWQgV2ViSW5zcGVjdG9yQ2xpZW50OjppbnNwZWN0b3JXaW5kb3dPYmplY3RDbGVhcmVkKCkKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6Y2xv
c2VXaW5kb3dXaXRob3V0Tm90aWZpY2F0aW9ucygpCit2b2lkIFdlYkluc3BlY3RvckZyb250ZW5k
Q2xpZW50OjpjbG9zZVdpbmRvd1dpdGhvdXROb3RpZmljYXRpb25zKCkKIHsKLSAgICBpZiAoIW1f
aHduZCkKKyAgICBpZiAoIW1fZnJvbnRlbmRId25kKQogICAgICAgICByZXR1cm47CiAKICAgICBp
ZiAoIW1fYXR0YWNoZWQpIHsKLSAgICAgICAgU2hvd1dpbmRvdyhtX2h3bmQsIFNXX0hJREUpOwor
ICAgICAgICBTaG93V2luZG93KG1fZnJvbnRlbmRId25kLCBTV19ISURFKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIEFTU0VSVChtX3dlYlZpZXcpOworICAgIEFTU0VSVChtX2Zyb250
ZW5kV2ViVmlldyk7CiAgICAgQVNTRVJUKG1faW5zcGVjdGVkV2ViVmlld0h3bmQpOwotICAgIEFT
U0VSVCghSXNXaW5kb3dWaXNpYmxlKG1faHduZCkpOworICAgIEFTU0VSVCghSXNXaW5kb3dWaXNp
YmxlKG1fZnJvbnRlbmRId25kKSk7CiAKICAgICAvLyBSZW1vdmUgdGhlIEluc3BlY3RvcidzIFdl
YlZpZXcgZnJvbSB0aGUgaW5zcGVjdGVkIFdlYlZpZXcncyBwYXJlbnQgd2luZG93LgogICAgIFdp
bmRvd01lc3NhZ2VCcm9hZGNhc3Rlcjo6cmVtb3ZlTGlzdGVuZXIobV9pbnNwZWN0ZWRXZWJWaWV3
SHduZCwgdGhpcyk7CiAKICAgICBtX2F0dGFjaGVkID0gZmFsc2U7CiAKLSAgICBtX3dlYlZpZXct
PnNldEhvc3RXaW5kb3cocmVpbnRlcnByZXRfY2FzdDxPTEVfSEFORExFPihtX2h3bmQpKTsKKyAg
ICBtX2Zyb250ZW5kV2ViVmlldy0+c2V0SG9zdFdpbmRvdyhyZWludGVycHJldF9jYXN0PE9MRV9I
QU5ETEU+KG1fZnJvbnRlbmRId25kKSk7CiAKICAgICAvLyBNYWtlIHN1cmUgZXZlcnl0aGluZyBo
YXMgdGhlIHJpZ2h0IHNpemUvcG9zaXRpb24uCiAgICAgSFdORCBob3N0V2luZG93OwogICAgIGlm
IChTVUNDRUVERUQobV9pbnNwZWN0ZWRXZWJWaWV3LT5ob3N0V2luZG93KChPTEVfSEFORExFKikm
aG9zdFdpbmRvdykpKQogICAgICAgICBTZW5kTWVzc2FnZShob3N0V2luZG93LCBXTV9TSVpFLCAw
LCAwKTsKIAotICAgIGlmIChtX2hpZ2hsaWdodCAmJiBtX2hpZ2hsaWdodC0+aXNTaG93aW5nKCkp
Ci0gICAgICAgIG1faGlnaGxpZ2h0LT51cGRhdGUoKTsKKyAgICBtX2luc3BlY3RvckNsaWVudC0+
dXBkYXRlSGlnaGxpZ2h0KCk7CiB9CiAKLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpzaG93V2lu
ZG93V2l0aG91dE5vdGlmaWNhdGlvbnMoKQordm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVu
dDo6c2hvd1dpbmRvd1dpdGhvdXROb3RpZmljYXRpb25zKCkKIHsKLSAgICBpZiAoIW1faHduZCkK
KyAgICBpZiAoIW1fZnJvbnRlbmRId25kKQogICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQo
bV93ZWJWaWV3KTsKKyAgICBBU1NFUlQobV9mcm9udGVuZFdlYlZpZXcpOwogICAgIEFTU0VSVCht
X2luc3BlY3RlZFdlYlZpZXdId25kKTsKIAogICAgIC8vIElmIG5vIHByZWZlcmVuY2UgaXMgc2V0
IC0gZGVmYXVsdCB0byBhbiBhdHRhY2hlZCB3aW5kb3cuIFRoaXMgaXMgaW1wb3J0YW50IGZvciBp
bnNwZWN0b3IgTGF5b3V0VGVzdHMuCiAgICAgU3RyaW5nIHNob3VsZEF0dGFjaCA9IG1faW5zcGVj
dGVkV2ViVmlldy0+cGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnNldHRpbmcoSW5zcGVj
dG9yQ29udHJvbGxlcjo6aW5zcGVjdG9yU3RhcnRzQXR0YWNoZWRTZXR0aW5nTmFtZSgpKTsKICAg
ICBtX3Nob3VsZEF0dGFjaFdoZW5TaG93biA9IHNob3VsZEF0dGFjaCAhPSAiZmFsc2UiOwogICAg
ICAgICAKLSAgICBpZiAobV9zaG91bGRBdHRhY2hXaGVuU2hvd24gJiYgIW1faW5zcGVjdGVkV2Vi
Vmlldy0+cGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmNhbkF0dGFjaFdpbmRvdygpKQor
ICAgIGlmIChtX3Nob3VsZEF0dGFjaFdoZW5TaG93biAmJiAhY2FuQXR0YWNoV2luZG93KCkpCiAg
ICAgICAgIG1fc2hvdWxkQXR0YWNoV2hlblNob3duID0gZmFsc2U7CiAgICAgCiAgICAgaWYgKCFt
X3Nob3VsZEF0dGFjaFdoZW5TaG93bikgewogICAgICAgICAvLyBQdXQgdGhlIEluc3BlY3Rvcidz
IFdlYlZpZXcgaW5zaWRlIG91ciB3aW5kb3cgYW5kIHNob3cgaXQuCi0gICAgICAgIG1fd2ViVmll
dy0+c2V0SG9zdFdpbmRvdyhyZWludGVycHJldF9jYXN0PE9MRV9IQU5ETEU+KG1faHduZCkpOwot
ICAgICAgICBTZW5kTWVzc2FnZShtX2h3bmQsIFdNX1NJWkUsIDAsIDApOworICAgICAgICBtX2Zy
b250ZW5kV2ViVmlldy0+c2V0SG9zdFdpbmRvdyhyZWludGVycHJldF9jYXN0PE9MRV9IQU5ETEU+
KG1fZnJvbnRlbmRId25kKSk7CisgICAgICAgIFNlbmRNZXNzYWdlKG1fZnJvbnRlbmRId25kLCBX
TV9TSVpFLCAwLCAwKTsKICAgICAgICAgdXBkYXRlV2luZG93VGl0bGUoKTsKIAotICAgICAgICBT
ZXRXaW5kb3dQb3MobV9od25kLCBIV05EX1RPUCwgMCwgMCwgMCwgMCwgU1dQX1NIT1dXSU5ET1cg
fCBTV1BfTk9NT1ZFIHwgU1dQX05PU0laRSk7CisgICAgICAgIFNldFdpbmRvd1BvcyhtX2Zyb250
ZW5kSHduZCwgSFdORF9UT1AsIDAsIDAsIDAsIDAsIFNXUF9TSE9XV0lORE9XIHwgU1dQX05PTU9W
RSB8IFNXUF9OT1NJWkUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0zNzEsMjAgKzM3
OCwzMiBAQCB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6c2hvd1dpbmRvd1dpdGhvdXROb3RpZmlj
YXRpb25zKCkKICAgICBpZiAoRkFJTEVEKG1faW5zcGVjdGVkV2ViVmlldy0+aG9zdFdpbmRvdyhy
ZWludGVycHJldF9jYXN0PE9MRV9IQU5ETEUqPigmaG9zdFdpbmRvdykpKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgbV93ZWJWaWV3LT5zZXRIb3N0V2luZG93KHJlaW50ZXJwcmV0X2Nhc3Q8T0xF
X0hBTkRMRT4oaG9zdFdpbmRvdykpOworICAgIG1fZnJvbnRlbmRXZWJWaWV3LT5zZXRIb3N0V2lu
ZG93KHJlaW50ZXJwcmV0X2Nhc3Q8T0xFX0hBTkRMRT4oaG9zdFdpbmRvdykpOwogCiAgICAgLy8g
VGhlbiBoaWRlIG91ciBvd24gd2luZG93LgotICAgIFNob3dXaW5kb3cobV9od25kLCBTV19ISURF
KTsKKyAgICBTaG93V2luZG93KG1fZnJvbnRlbmRId25kLCBTV19ISURFKTsKIAogICAgIG1fYXR0
YWNoZWQgPSB0cnVlOwogCiAgICAgLy8gTWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaGFzIHRoZSByaWdo
dCBzaXplL3Bvc2l0aW9uLgogICAgIFNlbmRNZXNzYWdlKGhvc3RXaW5kb3csIFdNX1NJWkUsIDAs
IDApOwotICAgIGlmIChtX2hpZ2hsaWdodCAmJiBtX2hpZ2hsaWdodC0+aXNTaG93aW5nKCkpCi0g
ICAgICAgIG1faGlnaGxpZ2h0LT51cGRhdGUoKTsKKyAgICBtX2luc3BlY3RvckNsaWVudC0+dXBk
YXRlSGlnaGxpZ2h0KCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmRl
c3Ryb3lJbnNwZWN0b3JWaWV3KCkKK3sKKyAgICBpZiAobV9kZXN0cm95aW5nSW5zcGVjdG9yVmll
dykKKyAgICAgICAgcmV0dXJuOworICAgIG1fZGVzdHJveWluZ0luc3BlY3RvclZpZXcgPSB0cnVl
OworCisgICAgbV9pbnNwZWN0ZWRXZWJWaWV3LT5wYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIo
KS0+ZGlzY29ubmVjdEZyb250ZW5kKCk7CisKKyAgICBjbG9zZVdpbmRvd1dpdGhvdXROb3RpZmlj
YXRpb25zKCk7CisgICAgbV9pbnNwZWN0b3JDbGllbnQtPmZyb250ZW5kQ2xvc2luZygpOworICAg
IDo6RGVzdHJveVdpbmRvdyhtX2Zyb250ZW5kSHduZCk7CiB9CiAKLXZvaWQgV2ViSW5zcGVjdG9y
Q2xpZW50Ojp1cGRhdGVXaW5kb3dUaXRsZSgpCit2b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQ2xp
ZW50Ojp1cGRhdGVXaW5kb3dUaXRsZSgpCiB7CiAgICAgLy8gRklYTUU6IFRoZSBzZXJpZXMgb2Yg
YXBwZW5kcyBzaG91bGQgYmUgcmVwbGFjZWQgd2l0aCBhIGNhbGwgdG8gU3RyaW5nOjpmb3JtYXQo
KQogICAgIC8vIHdoZW4gaXQgY2FuIGJlIGZpZ3VyZWQgb3V0IGhvdyB0byBnZXQgdGhlIHVuaWNv
ZGUgZW0tZGFzaCB0byBzaG93IHVwLgpAQCAtMzkyLDEwICs0MTEsMTAgQEAgdm9pZCBXZWJJbnNw
ZWN0b3JDbGllbnQ6OnVwZGF0ZVdpbmRvd1RpdGxlKCkKICAgICB0aXRsZS5hcHBlbmQoKFVDaGFy
KTB4MjAxNCk7IC8vIGVtLWRhc2gKICAgICB0aXRsZS5hcHBlbmQoJyAnKTsKICAgICB0aXRsZS5h
cHBlbmQobV9pbnNwZWN0ZWRVUkwpOwotICAgIDo6U2V0V2luZG93VGV4dChtX2h3bmQsIHRpdGxl
LmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkpOworICAgIDo6U2V0V2luZG93VGV4dCht
X2Zyb250ZW5kSHduZCwgdGl0bGUuY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSk7CiB9
CiAKLUxSRVNVTFQgV2ViSW5zcGVjdG9yQ2xpZW50OjpvbkdldE1pbk1heEluZm8oV1BBUkFNLCBM
UEFSQU0gbFBhcmFtKQorTFJFU1VMVCBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6b25HZXRN
aW5NYXhJbmZvKFdQQVJBTSwgTFBBUkFNIGxQYXJhbSkKIHsKICAgICBNSU5NQVhJTkZPKiBpbmZv
ID0gcmVpbnRlcnByZXRfY2FzdDxNSU5NQVhJTkZPKj4obFBhcmFtKTsKICAgICBQT0lOVCBzaXpl
ID0gezQwMCwgNDAwfTsKQEAgLTQwNCwzMyArNDIzLDMxIEBAIExSRVNVTFQgV2ViSW5zcGVjdG9y
Q2xpZW50OjpvbkdldE1pbk1heEluZm8oV1BBUkFNLCBMUEFSQU0gbFBhcmFtKQogICAgIHJldHVy
biAwOwogfQogCi1MUkVTVUxUIFdlYkluc3BlY3RvckNsaWVudDo6b25TaXplKFdQQVJBTSwgTFBB
UkFNKQorTFJFU1VMVCBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6b25TaXplKFdQQVJBTSwg
TFBBUkFNKQogewogICAgIFJFQ1QgcmVjdDsKLSAgICA6OkdldENsaWVudFJlY3QobV9od25kLCAm
cmVjdCk7CisgICAgOjpHZXRDbGllbnRSZWN0KG1fZnJvbnRlbmRId25kLCAmcmVjdCk7CiAKLSAg
ICA6OlNldFdpbmRvd1BvcyhtX3dlYlZpZXdId25kLCAwLCByZWN0LmxlZnQsIHJlY3QudG9wLCBy
ZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0LCByZWN0LmJvdHRvbSAtIHJlY3QudG9wLCBTV1BfTk9aT1JE
RVIpOworICAgIDo6U2V0V2luZG93UG9zKG1fZnJvbnRlbmRXZWJWaWV3SHduZCwgMCwgcmVjdC5s
ZWZ0LCByZWN0LnRvcCwgcmVjdC5yaWdodCAtIHJlY3QubGVmdCwgcmVjdC5ib3R0b20gLSByZWN0
LnRvcCwgU1dQX05PWk9SREVSKTsKIAogICAgIHJldHVybiAwOwogfQogCi1MUkVTVUxUIFdlYklu
c3BlY3RvckNsaWVudDo6b25DbG9zZShXUEFSQU0sIExQQVJBTSkKK0xSRVNVTFQgV2ViSW5zcGVj
dG9yRnJvbnRlbmRDbGllbnQ6Om9uQ2xvc2UoV1BBUkFNLCBMUEFSQU0pCiB7Ci0gICAgOjpTaG93
V2luZG93KG1faHduZCwgU1dfSElERSk7Ci0gICAgbV9pbnNwZWN0ZWRXZWJWaWV3LT5wYWdlKCkt
Pmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0V2luZG93VmlzaWJsZShmYWxzZSwgbV9zaG91bGRB
dHRhY2hXaGVuU2hvd24pOwotCi0gICAgaGlkZUhpZ2hsaWdodCgpOworICAgIDo6U2hvd1dpbmRv
dyhtX2Zyb250ZW5kSHduZCwgU1dfSElERSk7CisgICAgbV9pbnNwZWN0ZWRXZWJWaWV3LT5wYWdl
KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+Y2xvc2UoKTsKIAogICAgIHJldHVybiAwOwogfQog
Ci1MUkVTVUxUIFdlYkluc3BlY3RvckNsaWVudDo6b25TZXRGb2N1cygpCitMUkVTVUxUIFdlYklu
c3BlY3RvckZyb250ZW5kQ2xpZW50OjpvblNldEZvY3VzKCkKIHsKLSAgICBTZXRGb2N1cyhtX3dl
YlZpZXdId25kKTsKKyAgICBTZXRGb2N1cyhtX2Zyb250ZW5kV2ViVmlld0h3bmQpOwogICAgIHJl
dHVybiAwOwogfQogCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6b25XZWJWaWV3V2luZG93UG9z
Q2hhbmdpbmcoV1BBUkFNLCBMUEFSQU0gbFBhcmFtKQordm9pZCBXZWJJbnNwZWN0b3JGcm9udGVu
ZENsaWVudDo6b25XZWJWaWV3V2luZG93UG9zQ2hhbmdpbmcoV1BBUkFNLCBMUEFSQU0gbFBhcmFt
KQogewogICAgIEFTU0VSVChtX2F0dGFjaGVkKTsKIApAQCAtNDQxLDE3ICs0NTgsMTcgQEAgdm9p
ZCBXZWJJbnNwZWN0b3JDbGllbnQ6Om9uV2ViVmlld1dpbmRvd1Bvc0NoYW5naW5nKFdQQVJBTSwg
TFBBUkFNIGxQYXJhbSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgUkVDVCBpbnNwZWN0b3JSZWN0
OwotICAgIEdldENsaWVudFJlY3QobV93ZWJWaWV3SHduZCwgJmluc3BlY3RvclJlY3QpOworICAg
IEdldENsaWVudFJlY3QobV9mcm9udGVuZFdlYlZpZXdId25kLCAmaW5zcGVjdG9yUmVjdCk7CiAg
ICAgdW5zaWduZWQgaW5zcGVjdG9ySGVpZ2h0ID0gaW5zcGVjdG9yUmVjdC5ib3R0b20gLSBpbnNw
ZWN0b3JSZWN0LnRvcDsKIAogICAgIHdpbmRvd1Bvcy0+Y3kgLT0gaW5zcGVjdG9ySGVpZ2h0Owog
Ci0gICAgU2V0V2luZG93UG9zKG1fd2ViVmlld0h3bmQsIDAsIHdpbmRvd1Bvcy0+eCwgd2luZG93
UG9zLT55ICsgd2luZG93UG9zLT5jeSwgd2luZG93UG9zLT5jeCwgaW5zcGVjdG9ySGVpZ2h0LCBT
V1BfTk9aT1JERVIpOworICAgIFNldFdpbmRvd1BvcyhtX2Zyb250ZW5kV2ViVmlld0h3bmQsIDAs
IHdpbmRvd1Bvcy0+eCwgd2luZG93UG9zLT55ICsgd2luZG93UG9zLT5jeSwgd2luZG93UG9zLT5j
eCwgaW5zcGVjdG9ySGVpZ2h0LCBTV1BfTk9aT1JERVIpOwogfQogCiBzdGF0aWMgTFJFU1VMVCBD
QUxMQkFDSyBXZWJJbnNwZWN0b3JXbmRQcm9jKEhXTkQgaHduZCwgVUlOVCBtc2csIFdQQVJBTSB3
UGFyYW0sIExQQVJBTSBsUGFyYW0pCiB7Ci0gICAgV2ViSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQg
PSByZWludGVycHJldF9jYXN0PFdlYkluc3BlY3RvckNsaWVudCo+KDo6R2V0UHJvcChod25kLCBr
V2ViSW5zcGVjdG9yUG9pbnRlclByb3ApKTsKKyAgICBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVu
dCogY2xpZW50ID0gcmVpbnRlcnByZXRfY2FzdDxXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudCo+
KDo6R2V0UHJvcChod25kLCBrV2ViSW5zcGVjdG9yUG9pbnRlclByb3ApKTsKICAgICBpZiAoIWNs
aWVudCkKICAgICAgICAgcmV0dXJuIDo6RGVmV2luZG93UHJvYyhod25kLCBtc2csIHdQYXJhbSwg
bFBhcmFtKTsKIApAQCAtNDcxLDcgKzQ4OCw3IEBAIHN0YXRpYyBMUkVTVUxUIENBTExCQUNLIFdl
Ykluc3BlY3RvclduZFByb2MoSFdORCBod25kLCBVSU5UIG1zZywgV1BBUkFNIHdQYXJhbSwKICAg
ICByZXR1cm4gOjpEZWZXaW5kb3dQcm9jKGh3bmQsIG1zZywgd1BhcmFtLCBsUGFyYW0pOwogfQog
Ci12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6d2luZG93UmVjZWl2ZWRNZXNzYWdlKEhXTkQsIFVJ
TlQgbXNnLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQordm9pZCBXZWJJbnNwZWN0b3JG
cm9udGVuZENsaWVudDo6d2luZG93UmVjZWl2ZWRNZXNzYWdlKEhXTkQsIFVJTlQgbXNnLCBXUEFS
QU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQogewogICAgIHN3aXRjaCAobXNnKSB7CiAgICAgICAg
IGNhc2UgV01fV0lORE9XUE9TQ0hBTkdJTkc6CmRpZmYgLS1naXQgYS9XZWJLaXQvd2luL1dlYkNv
cmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5oIGIvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9y
dC9XZWJJbnNwZWN0b3JDbGllbnQuaAppbmRleCAzZjY1YjBhLi40NTVlM2ExIDEwMDY0NAotLS0g
YS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5oCisrKyBiL1dl
YktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmgKQEAgLTMxLDYgKzMx
LDcgQEAKIAogI2luY2x1ZGUgPFdlYkNvcmUvQ09NUHRyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9J
bnNwZWN0b3JDbGllbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckZyb250ZW5kQ2xp
ZW50TG9jYWwuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtU3RyaW5nLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9XaW5kb3dNZXNzYWdlTGlzdGVuZXIuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRy
Lmg+CkBAIC0zOSw0NCArNDAsNjAgQEAKIGNsYXNzIFdlYk5vZGVIaWdobGlnaHQ7CiBjbGFzcyBX
ZWJWaWV3OwogCi1jbGFzcyBXZWJJbnNwZWN0b3JDbGllbnQgOiBwdWJsaWMgV2ViQ29yZTo6SW5z
cGVjdG9yQ2xpZW50LCBXZWJDb3JlOjpXaW5kb3dNZXNzYWdlTGlzdGVuZXIgeworY2xhc3MgV2Vi
SW5zcGVjdG9yQ2xpZW50IDogcHVibGljIFdlYkNvcmU6Okluc3BlY3RvckNsaWVudCB7CiBwdWJs
aWM6CiAgICAgV2ViSW5zcGVjdG9yQ2xpZW50KFdlYlZpZXcqKTsKIAogICAgIC8vIEluc3BlY3Rv
ckNsaWVudAogICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0b3JEZXN0cm95ZWQoKTsKIAotICAgIHZp
cnR1YWwgV2ViQ29yZTo6UGFnZSogY3JlYXRlUGFnZSgpOwotCi0gICAgdmlydHVhbCBXZWJDb3Jl
OjpTdHJpbmcgbG9jYWxpemVkU3RyaW5nc1VSTCgpOwotCi0gICAgdmlydHVhbCBXZWJDb3JlOjpT
dHJpbmcgaGlkZGVuUGFuZWxzKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2hvd1dpbmRvdygpOwot
ICAgIHZpcnR1YWwgdm9pZCBjbG9zZVdpbmRvdygpOwotICAgIHZpcnR1YWwgYm9vbCB3aW5kb3dW
aXNpYmxlKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoV2luZG93KCk7Ci0gICAgdmlydHVh
bCB2b2lkIGRldGFjaFdpbmRvdygpOwotCi0gICAgdmlydHVhbCB2b2lkIHNldEF0dGFjaGVkV2lu
ZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCk7CisgICAgdmlydHVhbCB2b2lkIG9wZW5JbnNwZWN0
b3JGcm9udGVuZChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyKik7CiAKICAgICB2aXJ0dWFs
IHZvaWQgaGlnaGxpZ2h0KFdlYkNvcmU6Ok5vZGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgaGlkZUhp
Z2hsaWdodCgpOwogCi0gICAgdmlydHVhbCB2b2lkIGluc3BlY3RlZFVSTENoYW5nZWQoY29uc3Qg
V2ViQ29yZTo6U3RyaW5nJiBuZXdVUkwpOwotCiAgICAgdmlydHVhbCB2b2lkIHBvcHVsYXRlU2V0
dGluZyhjb25zdCBXZWJDb3JlOjpTdHJpbmcmIGtleSwgV2ViQ29yZTo6U3RyaW5nKiB2YWx1ZSk7
CiAgICAgdmlydHVhbCB2b2lkIHN0b3JlU2V0dGluZyhjb25zdCBXZWJDb3JlOjpTdHJpbmcmIGtl
eSwgY29uc3QgV2ViQ29yZTo6U3RyaW5nJiB2YWx1ZSk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgaW5z
cGVjdG9yV2luZG93T2JqZWN0Q2xlYXJlZCgpOworICAgIHZvaWQgdXBkYXRlSGlnaGxpZ2h0KCk7
CisgICAgdm9pZCBmcm9udGVuZENsb3NpbmcoKSB7IG1fZnJvbnRlbmRId25kID0gMDsgfQogCiBw
cml2YXRlOgogICAgIH5XZWJJbnNwZWN0b3JDbGllbnQoKTsKIAorICAgIFdlYlZpZXcqIG1faW5z
cGVjdGVkV2ViVmlldzsKKyAgICBIV05EIG1faW5zcGVjdGVkV2ViVmlld0h3bmQ7CisgICAgSFdO
RCBtX2Zyb250ZW5kSHduZDsKKworICAgIE93blB0cjxXZWJOb2RlSGlnaGxpZ2h0PiBtX2hpZ2hs
aWdodDsKK307CisKK2NsYXNzIFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50IDogcHVibGljIFdl
YkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwsIFdlYkNvcmU6OldpbmRvd01lc3Nh
Z2VMaXN0ZW5lciB7CitwdWJsaWM6CisgICAgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQoV2Vi
VmlldyogaW5zcGVjdGVkV2ViVmlldywgSFdORCBpbnNwZWN0ZWRXZWJWaWV3SHduZCwgSFdORCBm
cm9udGVuZEh3bmQsIGNvbnN0IENPTVB0cjxXZWJWaWV3PiYgZnJvdG5lbmRXZWJWaWV3LCBIV05E
IGZyb250ZW5kV2ViVmlld0h3bmQsIFdlYkluc3BlY3RvckNsaWVudCogaW5zcGVjdG9yQ2xpZW50
KTsKKworICAgIHZpcnR1YWwgdm9pZCBmcm9udGVuZExvYWRlZCgpOworICAgIAorICAgIHZpcnR1
YWwgV2ViQ29yZTo6U3RyaW5nIGxvY2FsaXplZFN0cmluZ3NVUkwoKTsKKyAgICB2aXJ0dWFsIFdl
YkNvcmU6OlN0cmluZyBoaWRkZW5QYW5lbHMoKTsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgYnJp
bmdUb0Zyb250KCk7CisgICAgdmlydHVhbCB2b2lkIGNsb3NlV2luZG93KCk7CisgICAgCisgICAg
dmlydHVhbCB2b2lkIGF0dGFjaFdpbmRvdygpOworICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hXaW5k
b3coKTsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5z
aWduZWQgaGVpZ2h0KTsKKyAgICB2aXJ0dWFsIHZvaWQgaW5zcGVjdGVkVVJMQ2hhbmdlZChjb25z
dCBXZWJDb3JlOjpTdHJpbmcmIG5ld1VSTCk7CisKK3ByaXZhdGU6CisgICAgfldlYkluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50KCk7CisKICAgICB2b2lkIGNsb3NlV2luZG93V2l0aG91dE5vdGlmaWNh
dGlvbnMoKTsKICAgICB2b2lkIHNob3dXaW5kb3dXaXRob3V0Tm90aWZpY2F0aW9ucygpOwogCisg
ICAgdm9pZCBkZXN0cm95SW5zcGVjdG9yVmlldygpOworCiAgICAgdm9pZCB1cGRhdGVXaW5kb3dU
aXRsZSgpOwogCiAgICAgTFJFU1VMVCBvbkdldE1pbk1heEluZm8oV1BBUkFNLCBMUEFSQU0pOwpA
QCAtOTAsMTYgKzEwNywxNiBAQCBwcml2YXRlOgogCiAgICAgV2ViVmlldyogbV9pbnNwZWN0ZWRX
ZWJWaWV3OwogICAgIEhXTkQgbV9pbnNwZWN0ZWRXZWJWaWV3SHduZDsKLSAgICBIV05EIG1faHdu
ZDsKLSAgICBDT01QdHI8V2ViVmlldz4gbV93ZWJWaWV3OwotICAgIEhXTkQgbV93ZWJWaWV3SHdu
ZDsKKyAgICBIV05EIG1fZnJvbnRlbmRId25kOworICAgIFdlYkluc3BlY3RvckNsaWVudCogbV9p
bnNwZWN0b3JDbGllbnQ7CisgICAgQ09NUHRyPFdlYlZpZXc+IG1fZnJvbnRlbmRXZWJWaWV3Owor
ICAgIEhXTkQgbV9mcm9udGVuZFdlYlZpZXdId25kOwogCiAgICAgYm9vbCBtX3Nob3VsZEF0dGFj
aFdoZW5TaG93bjsKICAgICBib29sIG1fYXR0YWNoZWQ7CiAKLSAgICBPd25QdHI8V2ViTm9kZUhp
Z2hsaWdodD4gbV9oaWdobGlnaHQ7Ci0KICAgICBXZWJDb3JlOjpTdHJpbmcgbV9pbnNwZWN0ZWRV
Ukw7CisgICAgYm9vbCBtX2Rlc3Ryb3lpbmdJbnNwZWN0b3JWaWV3OwogCiAgICAgc3RhdGljIGZy
aWVuZCBMUkVTVUxUIENBTExCQUNLIFdlYkluc3BlY3RvclduZFByb2MoSFdORCwgVUlOVCwgV1BB
UkFNLCBMUEFSQU0pOwogfTsKZGlmZiAtLWdpdCBhL1dlYktpdC93aW4vV2ViSW5zcGVjdG9yLmNw
cCBiL1dlYktpdC93aW4vV2ViSW5zcGVjdG9yLmNwcAppbmRleCBlNGFjMzJiLi4wMzM3NzExIDEw
MDY0NAotLS0gYS9XZWJLaXQvd2luL1dlYkluc3BlY3Rvci5jcHAKKysrIGIvV2ViS2l0L3dpbi9X
ZWJJbnNwZWN0b3IuY3BwCkBAIC0xMzEsMTkgKzEzMSwxMSBAQCBIUkVTVUxUIFNURE1FVEhPRENB
TExUWVBFIFdlYkluc3BlY3Rvcjo6Y2xvc2UoKQogCiBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IFdlYkluc3BlY3Rvcjo6YXR0YWNoKCkKIHsKLSAgICBpZiAobV93ZWJWaWV3KQotICAgICAgICBp
ZiAoUGFnZSogcGFnZSA9IG1fd2ViVmlldy0+cGFnZSgpKQotICAgICAgICAgICAgcGFnZS0+aW5z
cGVjdG9yQ29udHJvbGxlcigpLT5hdHRhY2hXaW5kb3coKTsKLQogICAgIHJldHVybiBTX09LOwog
fQogCiBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkluc3BlY3Rvcjo6ZGV0YWNoKCkKIHsK
LSAgICBpZiAobV93ZWJWaWV3KQotICAgICAgICBpZiAoUGFnZSogcGFnZSA9IG1fd2ViVmlldy0+
cGFnZSgpKQotICAgICAgICAgICAgcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5kZXRhY2hX
aW5kb3coKTsKLQogICAgIHJldHVybiBTX09LOwogfQogCmRpZmYgLS1naXQgYS9XZWJLaXQvd3gv
Q2hhbmdlTG9nIGIvV2ViS2l0L3d4L0NoYW5nZUxvZwppbmRleCBkZjJhODlmLi5lYjA4ZmY4IDEw
MDY0NAotLS0gYS9XZWJLaXQvd3gvQ2hhbmdlTG9nCisrKyBiL1dlYktpdC93eC9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxNSBAQAorMjAxMC0wMy0xMCAgWXVyeSBTZW1pa2hhdHNreSA8eXVyeXNAY2hy
b21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEludHJvZHVjZSBJbnNwZWN0b3JGcm9udGVuZENsaWVudCB0aGF0IHByb3ZpZGVzIEluc3Bl
Y3RvckZyb250ZW5kIHdpdGggYW4gaW50ZXJmYWNlIHRvIHRoZSBlbWJlZGRlci4gSW5zcGVjdG9y
Q2xpZW50IG5vdyBzZXJ2ZXMgYXMgYSBkZWxlZ2F0ZSBmb3IgSW5zcGVjdG9yQ29udHJvbGxlciBh
bmQgZG9lcyBub3QgY29udGFpbiBtZXRob2RzIGZvciBtYW5hZ2luZyBpbnNwZWN0b3IgZnJvbnRl
bmQgd2luZG93LiBUaGF0IGFsbG93cyB0byBjcmVhdGUgcmVtb3RlIEluc3BlY3RvckZyb250ZW5k
SG9zdC4KKworICAgICAgICBJbnRyb2R1Y2UgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQgdGhhdCB3
b3VsZCBwcm92aWRlIEluc3BlY3RvckZyb250ZW5kIHdpdGggYW4gaW50ZXJmYWNlIHRvIHRoZSBl
bWJlZGRlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MzUwMzYKKworICAgICAgICAqIFdlYktpdFN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50V3guY3BwOgor
ICAgICAgICAqIFdlYktpdFN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50V3guaDoKKwogMjAxMC0wMy0x
MSAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IERhdmlkIEh5YXR0LgpkaWZmIC0tZ2l0IGEvV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQv
SW5zcGVjdG9yQ2xpZW50V3guY3BwIGIvV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQvSW5zcGVjdG9y
Q2xpZW50V3guY3BwCmluZGV4IGZmMjFhZTAuLjQzZmJiMmIgMTAwNjQ0Ci0tLSBhL1dlYktpdC93
eC9XZWJLaXRTdXBwb3J0L0luc3BlY3RvckNsaWVudFd4LmNwcAorKysgYi9XZWJLaXQvd3gvV2Vi
S2l0U3VwcG9ydC9JbnNwZWN0b3JDbGllbnRXeC5jcHAKQEAgLTQ3LDQ1ICs0Nyw4IEBAIHZvaWQg
SW5zcGVjdG9yQ2xpZW50V3g6Omluc3BlY3RvckRlc3Ryb3llZCgpCiAgICAgbm90SW1wbGVtZW50
ZWQoKTsKIH0KIAotUGFnZSogSW5zcGVjdG9yQ2xpZW50V3g6OmNyZWF0ZVBhZ2UoKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLVN0cmluZyBJbnNwZWN0b3JD
bGllbnRXeDo6bG9jYWxpemVkU3RyaW5nc1VSTCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBJbnNwZWN0b3JDbGllbnRXeDo6aGlk
ZGVuUGFuZWxzKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJpbmco
KTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDbGllbnRXeDo6c2hvd1dpbmRvdygpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLSAgICAKLXZvaWQgSW5zcGVjdG9yQ2xpZW50V3g6OmNsb3NlV2lu
ZG93KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEluc3BlY3RvckNsaWVu
dFd4OjphdHRhY2hXaW5kb3coKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQg
SW5zcGVjdG9yQ2xpZW50V3g6OmRldGFjaFdpbmRvdygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KIAotdm9pZCBJbnNwZWN0b3JDbGllbnRXeDo6c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQo
dW5zaWduZWQgaGVpZ2h0KQordm9pZCBJbnNwZWN0b3JDbGllbnRXeDo6b3Blbkluc3BlY3RvckZy
b250ZW5kKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXIqKTsKIHsKICAgICBub3RJbXBsZW1l
bnRlZCgpOwogfQpAQCAtMTAwLDExICs2Myw2IEBAIHZvaWQgSW5zcGVjdG9yQ2xpZW50V3g6Omhp
ZGVIaWdobGlnaHQoKQogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
Q2xpZW50V3g6Omluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJiBuZXdVUkwpCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQogdm9pZCBJbnNwZWN0b3JDbGllbnRXeDo6cG9wdWxh
dGVTZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5LCBTdHJpbmcqIHNldHRpbmcpCiB7CiAgICAgbm90
SW1wbGVtZW50ZWQoKTsKQEAgLTExNSw5ICs3Myw0IEBAIHZvaWQgSW5zcGVjdG9yQ2xpZW50V3g6
OnN0b3JlU2V0dGluZyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBzZXR0aW5nKQog
ICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ2xpZW50V3g6Omluc3Bl
Y3RvcldpbmRvd09iamVjdENsZWFyZWQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0K
IH07CmRpZmYgLS1naXQgYS9XZWJLaXQvd3gvV2ViS2l0U3VwcG9ydC9JbnNwZWN0b3JDbGllbnRX
eC5oIGIvV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50V3guaAppbmRleCBm
OTA1ODE3Li43Njc1ZGMxIDEwMDY0NAotLS0gYS9XZWJLaXQvd3gvV2ViS2l0U3VwcG9ydC9JbnNw
ZWN0b3JDbGllbnRXeC5oCisrKyBiL1dlYktpdC93eC9XZWJLaXRTdXBwb3J0L0luc3BlY3RvckNs
aWVudFd4LmgKQEAgLTQxLDI5ICs0MSwxMyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQg
aW5zcGVjdG9yRGVzdHJveWVkKCk7CiAKLSAgICB2aXJ0dWFsIFBhZ2UqIGNyZWF0ZVBhZ2UoKTsK
LQotICAgIHZpcnR1YWwgU3RyaW5nIGxvY2FsaXplZFN0cmluZ3NVUkwoKTsKLQotICAgIHZpcnR1
YWwgU3RyaW5nIGhpZGRlblBhbmVscygpOwotCi0gICAgdmlydHVhbCB2b2lkIHNob3dXaW5kb3co
KTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xvc2VXaW5kb3coKTsKLQotICAgIHZpcnR1YWwgdm9pZCBh
dHRhY2hXaW5kb3coKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoV2luZG93KCk7Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KTsKKyAg
ICB2aXJ0dWFsIHZvaWQgb3Blbkluc3BlY3RvckZyb250ZW5kKFdlYkNvcmU6Okluc3BlY3RvckNv
bnRyb2xsZXIqKTsKIAogICAgIHZpcnR1YWwgdm9pZCBoaWdobGlnaHQoTm9kZSopOwogICAgIHZp
cnR1YWwgdm9pZCBoaWRlSGlnaGxpZ2h0KCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgaW5zcGVjdGVk
VVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIG5ld1VSTCk7Ci0KICAgICB2aXJ0dWFsIHZvaWQgcG9w
dWxhdGVTZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5LCBTdHJpbmcqIHZhbHVlKTsKICAgICB2aXJ0
dWFsIHZvaWQgc3RvcmVTZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZh
bHVlKTsKLQotICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0b3JXaW5kb3dPYmplY3RDbGVhcmVkKCk7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50778</attachid>
            <date>2010-03-16 02:47:43 -0700</date>
            <delta_ts>2010-03-16 03:38:44 -0700</delta_ts>
            <desc>patch</desc>
            <filename>frontend-client8.patch</filename>
            <type>text/plain</type>
            <size>167524</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YTcyZWM3MS4uZDllNTIzNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMTAgQEAKKzIwMTAtMDMtMTEgIFl1cnkgU2VtaWto
YXRza3kgPHl1cnlzQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBJbnRyb2R1Y2UgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQgdGhh
dCBwcm92aWRlcyBJbnNwZWN0b3JGcm9udGVuZCB3aXRoIGFuIGludGVyZmFjZSB0byB0aGUgZW1i
ZWRkZXIuIEluc3BlY3RvckNsaWVudCBub3cgc2VydmVzIGFzIGEgZGVsZWdhdGUgZm9yIEluc3Bl
Y3RvckNvbnRyb2xsZXIgYW5kIGRvZXMgbm90IGNvbnRhaW4gbWV0aG9kcyBmb3IgbWFuYWdpbmcg
aW5zcGVjdG9yIGZyb250ZW5kIHdpbmRvdy4gVGhhdCBhbGxvd3MgdG8gY3JlYXRlIHJlbW90ZSBJ
bnNwZWN0b3JGcm9udGVuZEhvc3QuCisKKyAgICAgICAgSW50cm9kdWNlIEluc3BlY3RvckZyb250
ZW5kQ2xpZW50IHRoYXQgd291bGQgcHJvdmlkZSBJbnNwZWN0b3JGcm9udGVuZCB3aXRoIGFuIGlu
dGVyZmFjZSB0byB0aGUgZW1iZWRkZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTM1MDM2CisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiAoT09QUyEpCisK
KyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLkluc3BlY3Rvci5l
eHA6CisgICAgICAgICogV2ViQ29yZS5iYXNlLmV4cDoKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6
CisgICAgICAgICogV2ViQ29yZS5vcmRlcjoKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAg
ICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaW5zcGVj
dG9yL0NvbnNvbGVNZXNzYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnNvbGVNZXNzYWdl
OjphZGRUb0Zyb250ZW5kKToKKyAgICAgICAgKiBpbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuaDoK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ2xpZW50Lmg6CisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
Q29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JDb250cm9sbGVyOjp+SW5zcGVjdG9yQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0ZWRQYWdlRGVzdHJveWVkKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OndpbmRvd1Zpc2libGUpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZnJvbnRlbmRSZWFkeSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjp3aWxsQ2xvc2VGcm9udGVuZCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjphZGRDb25zb2xlTWVzc2FnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRJbnNwZWN0b3JGcm9udGVuZENs
aWVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0ZWRX
aW5kb3dTY3JpcHRPYmplY3RDbGVhcmVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNv
bnRyb2xsZXI6OnNldEZyb250ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRy
b2xsZXI6OnNob3cpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6Y2xv
c2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6cmVsZWFzZURPTUFn
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnBvcHVsYXRlU2Ny
aXB0T2JqZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRD
b21taXRMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmdldFBy
b2ZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZW5hYmxlRGVi
dWdnZXIpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpoYXNJbnNwZWN0b3JGcm9udGVuZENs
aWVudCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kOjpJbnNwZWN0b3JGcm9udGVuZCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZDo6fkluc3BlY3RvckZyb250ZW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kOjphZGRDb25zb2xlTWVzc2FnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZDo6YnJpbmdUb0Zyb250KToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kOjppbnNwZWN0ZWRVUkxDaGFuZ2VkKToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuaDoKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JGcm9udGVuZENsaWVudDo6fkluc3BlY3RvckZyb250ZW5kQ2xpZW50KToKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RnJvbnRlbmRNZW51UHJvdmlkZXI6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpGcm9udGVuZE1lbnVQcm92aWRlcjo6ZGlzY29ubmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGcm9udGVuZE1lbnVQcm92aWRlcjo6RnJvbnRlbmRNZW51UHJvdmlkZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6RnJvbnRlbmRNZW51UHJvdmlkZXI6On5Gcm9udGVuZE1lbnVQcm92aWRl
cik6CisgICAgICAgIChXZWJDb3JlOjpGcm9udGVuZE1lbnVQcm92aWRlcjo6cG9wdWxhdGVDb250
ZXh0TWVudSk6CisgICAgICAgIChXZWJDb3JlOjpGcm9udGVuZE1lbnVQcm92aWRlcjo6Y29udGV4
dE1lbnVJdGVtU2VsZWN0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJvbnRlbmRNZW51UHJvdmlk
ZXI6OmNvbnRleHRNZW51Q2xlYXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9u
dGVuZENsaWVudExvY2FsOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6On5JbnNwZWN0b3JGcm9udGVu
ZENsaWVudExvY2FsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50
TG9jYWw6OndpbmRvd09iamVjdENsZWFyZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RnJvbnRlbmRDbGllbnRMb2NhbDo6ZnJvbnRlbmRMb2FkZWQpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6Y2FuQXR0YWNoV2luZG93KToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OmNoYW5nZUF0dGFjaGVkV2lu
ZG93SGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9j
YWw6Om1vdmVXaW5kb3dCeSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENs
aWVudExvY2FsOjpzaG93Q29udGV4dE1lbnUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RnJvbnRlbmRDbGllbnRMb2NhbDo6c2V0QXR0YWNoZWRXaW5kb3cpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6cmVzdG9yZUF0dGFjaGVkV2luZG93SGVp
Z2h0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OmNv
bnN0cmFpbmVkQXR0YWNoZWRXaW5kb3dIZWlnaHQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmg6IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9J
bnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJv
bnRlbmRIb3N0OjpJbnNwZWN0b3JGcm9udGVuZEhvc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yRnJvbnRlbmRIb3N0Ojp+SW5zcGVjdG9yRnJvbnRlbmRIb3N0KToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckZyb250ZW5kSG9zdDo6bG9hZGVkKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckZyb250ZW5kSG9zdDo6YXR0YWNoKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckZyb250ZW5kSG9zdDo6ZGV0YWNoKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZy
b250ZW5kSG9zdDo6Y2xvc2VXaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJv
bnRlbmRIb3N0OjpicmluZ1RvRnJvbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJv
bnRlbmRIb3N0OjppbnNwZWN0ZWRVUkxDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckZyb250ZW5kSG9zdDo6Y2FuQXR0YWNoV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckZyb250ZW5kSG9zdDo6c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRIb3N0Ojptb3ZlV2luZG93QnkpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRIb3N0OjpzaG93Q29udGV4dE1lbnUpOgorICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckZyb250ZW5kSG9zdDo6Y3JlYXRlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yRnJvbnRlbmRIb3N0LmlkbDoKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0lu
c3BlY3RvckZyb250ZW5kSG9zdFN0dWIuanM6CisgICAgICAgICguV2ViSW5zcGVjdG9yLkluc3Bl
Y3RvckZyb250ZW5kSG9zdFN0dWIucHJvdG90eXBlLmJyaW5nVG9Gcm9udCk6CisgICAgICAgICgu
V2ViSW5zcGVjdG9yLkluc3BlY3RvckZyb250ZW5kSG9zdFN0dWIucHJvdG90eXBlLmluc3BlY3Rl
ZFVSTENoYW5nZWQpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpz
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLmxvYWRlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
Y2xvc2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLmJyaW5nVG9Gcm9udCk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuaW5zcGVjdGVkVVJMQ2hhbmdlZCk6CisgICAgICAgICogbG9hZGVyL0VtcHR5
Q2xpZW50cy5oOgorICAgICAgICAoV2ViQ29yZTo6RW1wdHlJbnNwZWN0b3JDbGllbnQ6Om9wZW5J
bnNwZWN0b3JGcm9udGVuZCk6CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpkaXNwYXRjaERpZENsZWFyV2luZG93T2JqZWN0
SW5Xb3JsZCk6CisgICAgICAgICogcGFnZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBh
Z2U6OlBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6flBhZ2UpOgorICAgICAgICAqIHBh
Z2UvUGFnZS5oOgorICAgICAgICAqIHBsYXRmb3JtL0NvbnRleHRNZW51LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRleHRNZW51Ojpwb3B1bGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250
ZXh0TWVudTo6YWRkSW5zcGVjdEVsZW1lbnRJdGVtKToKKwogMjAxMC0wMy0xNiAgUGF2ZWwgRmVs
ZG1hbiAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBUaW1v
dGh5IEhhdGNoZXIuCmRpZmYgLS1naXQgYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5hbQppbmRleCBkYWU4NWRjLi43NmE1OWEyIDEwMDY0NAotLS0gYS9XZWJD
b3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTEyMzks
NiArMTIzOSw5IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ29udHJvbGxlci5oIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVu
ZC5jcHAgXAogCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmggXAorCVdlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50LmggXAorCVdlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuY3BwIFwKKwlXZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmggXAogCVdlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckZyb250ZW5kSG9zdC5jcHAgXAogCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZy
b250ZW5kSG9zdC5oIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZS5jcHAg
XApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLkluc3BlY3Rvci5leHAgYi9XZWJDb3JlL1dl
YkNvcmUuSW5zcGVjdG9yLmV4cAppbmRleCAzNzliN2EyLi5mNzc0NzM5IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL1dlYkNvcmUuSW5zcGVjdG9yLmV4cAorKysgYi9XZWJDb3JlL1dlYkNvcmUuSW5zcGVj
dG9yLmV4cApAQCAtMSwxMSArMSwxMCBAQAogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9s
bGVyMTBzZXRTZXR0aW5nRVJLTlNfNlN0cmluZ0VTM18KLV9fWk43V2ViQ29yZTE5SW5zcGVjdG9y
Q29udHJvbGxlcjEyYXR0YWNoV2luZG93RXYKLV9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJv
bGxlcjEyZGV0YWNoV2luZG93RXYKIF9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjE0
ZW5hYmxlRGVidWdnZXJFdgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTRlbmFi
bGVQcm9maWxlckViYgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTVkaXNhYmxl
RGVidWdnZXJFYgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTVkaXNhYmxlUHJv
ZmlsZXJFYgotX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTZzZXRXaW5kb3dWaXNp
YmxlRWJiCitfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIxOGRpc2Nvbm5lY3RGcm9u
dGVuZEV2CitfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIyNnNldEluc3BlY3RvckZy
b250ZW5kQ2xpZW50RU4zV1RGMTBQYXNzT3duUHRySU5TXzIzSW5zcGVjdG9yRnJvbnRlbmRDbGll
bnRFRUUKIF9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjI2c3RvcFVzZXJJbml0aWF0
ZWRQcm9maWxpbmdFdgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMjdzdGFydFVz
ZXJJbml0aWF0ZWRQcm9maWxpbmdFUE5TXzVUaW1lcklTMF9FRQogX19aTjdXZWJDb3JlMTlJbnNw
ZWN0b3JDb250cm9sbGVyNHNob3dFdgpAQCAtMTgsMyArMTcsMTMgQEAgX19aTks3V2ViQ29yZTE5
SW5zcGVjdG9yQ29udHJvbGxlcjdlbmFibGVkRXYKIF9fWk5LN1dlYkNvcmUxOUluc3BlY3RvckNv
bnRyb2xsZXI3c2V0dGluZ0VSS05TXzZTdHJpbmdFCiBfX1pON1dlYkNvcmUxOUluc3BlY3RvckNv
bnRyb2xsZXIyMXN0YXJ0VGltZWxpbmVQcm9maWxlckV2CiBfX1pON1dlYkNvcmUxOUluc3BlY3Rv
ckNvbnRyb2xsZXIyMHN0b3BUaW1lbGluZVByb2ZpbGVyRXYKK19fWk43V2ViQ29yZTI4SW5zcGVj
dG9yRnJvbnRlbmRDbGllbnRMb2NhbEMyRVBOU18xOUluc3BlY3RvckNvbnRyb2xsZXJFUE5TXzRQ
YWdlRQorX19aTjdXZWJDb3JlMjhJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsRDJFdgorX19a
TjdXZWJDb3JlMjhJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsMTl3aW5kb3dPYmplY3RDbGVh
cmVkRXYKK19fWk43V2ViQ29yZTI4SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDE0ZnJvbnRl
bmRMb2FkZWRFdgorX19aTjdXZWJDb3JlMjhJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsMjdy
ZXN0b3JlQXR0YWNoZWRXaW5kb3dIZWlnaHRFdgorX19aTjdXZWJDb3JlMjhJbnNwZWN0b3JGcm9u
dGVuZENsaWVudExvY2FsMTJtb3ZlV2luZG93QnlFZmYKK19fWk43V2ViQ29yZTI4SW5zcGVjdG9y
RnJvbnRlbmRDbGllbnRMb2NhbDE1Y2FuQXR0YWNoV2luZG93RXYKK19fWk43V2ViQ29yZTI4SW5z
cGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDE1c2hvd0NvbnRleHRNZW51RVBOU181RXZlbnRFUktO
M1dURjZWZWN0b3JJUE5TXzE1Q29udGV4dE1lbnVJdGVtRUxtMEVFRQorX19aTjdXZWJDb3JlMjhJ
bnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsMTdzZXRBdHRhY2hlZFdpbmRvd0ViCitfX1pON1dl
YkNvcmUyOEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwyNmNoYW5nZUF0dGFjaGVkV2luZG93
SGVpZ2h0RWoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cCBiL1dlYkNvcmUv
V2ViQ29yZS5iYXNlLmV4cAppbmRleCA0MzY0YWVhLi45YmFmYWQ3IDEwMDY0NAotLS0gYS9XZWJD
b3JlL1dlYkNvcmUuYmFzZS5leHAKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCkBAIC04
NzQsNyArODc0LDYgQEAgX19aTks3V2ViQ29yZTE2VmlzaWJsZVNlbGVjdGlvbjIzaXNDb250ZW50
UmljaGx5RWRpdGFibGVFdgogX19aTks3V2ViQ29yZTE2VmlzaWJsZVNlbGVjdGlvbjVpc0FsbEVO
U18yMVN0YXlJbkVkaXRhYmxlQ29udGVudEUKIF9fWk5LN1dlYkNvcmUxN1Jlc291cmNlRXJyb3JC
YXNlOGxhenlJbml0RXYKIF9fWk5LN1dlYkNvcmUxOUFuaW1hdGlvbkNvbnRyb2xsZXIyNG51bWJl
ck9mQWN0aXZlQW5pbWF0aW9uc0V2Ci1fX1pOSzdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVy
MTVjYW5BdHRhY2hXaW5kb3dFdgogX19aTks3V2ViQ29yZTE5UmVzb3VyY2VSZXF1ZXN0QmFzZTEw
aHR0cE1ldGhvZEV2CiBfX1pOSzdXZWJDb3JlMTlSZXNvdXJjZVJlcXVlc3RCYXNlM3VybEV2CiBf
X1pOSzdXZWJDb3JlMTlSZXNvdXJjZVJlcXVlc3RCYXNlN2lzRW1wdHlFdgpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA4ZTZmYTNh
Li43NTlmZWRiIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQpAQCAtMTYzMCw2ICsxNjMwLDkgQEAKICAgICAgICAgICAgICdpbnNwZWN0
b3IvSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlLmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rv
ci9JbnNwZWN0b3JGcm9udGVuZC5jcHAnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0
b3JGcm9udGVuZC5oJywKKyAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRD
bGllbnQuaCcsCisgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50
TG9jYWwuY3BwJywKKyAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGll
bnRMb2NhbC5oJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0
LmNwcCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5oJywK
ICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2UuY3BwJywKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvV2ViQ29yZS5vcmRlciBiL1dlYkNvcmUvV2ViQ29yZS5vcmRlcgppbmRleCBh
OGQyMGZkLi40OGYzMjFiIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUub3JkZXIKKysrIGIv
V2ViQ29yZS9XZWJDb3JlLm9yZGVyCkBAIC0yMzc4OSw3ICsyMzc4OSw2IEBAIF9fWk43V2ViQ29y
ZTE4U2NyaXB0RnVuY3Rpb25DYWxsMTRhcHBlbmRBcmd1bWVudEViCiBfX1pON1dlYkNvcmUxOFNj
cmlwdEZ1bmN0aW9uQ2FsbDRjYWxsRXYKIF9fWk43V2ViQ29yZTE4U2NyaXB0RnVuY3Rpb25DYWxs
NGNhbGxFUmJiCiBfX1pON1dlYkNvcmU0NGpzSW5zcGVjdG9yQ29udHJvbGxlclByb3RvdHlwZUZ1
bmN0aW9uQXR0YWNoRVBOM0pTQzlFeGVjU3RhdGVFUE5TMF84SlNPYmplY3RFTlMwXzdKU1ZhbHVl
RVJLTlMwXzdBcmdMaXN0RQotX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTJhdHRh
Y2hXaW5kb3dFdgogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMjFwb3B1bGF0ZVNj
cmlwdE9iamVjdHNFdgogX19aTjdXZWJDb3JlTDE4Y2FsbFNpbXBsZUZ1bmN0aW9uRVBOM0pTQzlF
eGVjU3RhdGVFUktOU18xMlNjcmlwdE9iamVjdEVQS2MKIF9fWk43V2ViQ29yZTE5SW5zcGVjdG9y
Q29udHJvbGxlcjlzaG93UGFuZWxFTlMwXzEzU3BlY2lhbFBhbmVsc0UKQEAgLTIzODUwLDcgKzIz
ODQ5LDYgQEAgX19aTjdXZWJDb3JlTDE5ZHJhd0hpZ2hsaWdodEZvckJveEVSTlNfMTVHcmFwaGlj
c0NvbnRleHRFUktOU185RmxvYXRRdWFkRVM0X1M0X1MKIF9fWk43V2ViQ29yZUwxNmRyYXdPdXRs
aW5lZFF1YWRFUk5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfOUZsb2F0UXVhZEVSS05TXzVDb2xv
ckUKIF9fWk43V2ViQ29yZUwxMHF1YWRUb1BhdGhFUktOU185RmxvYXRRdWFkRQogX19aTjdXZWJD
b3JlNDRqc0luc3BlY3RvckNvbnRyb2xsZXJQcm90b3R5cGVGdW5jdGlvbkRldGFjaEVQTjNKU0M5
RXhlY1N0YXRlRVBOUzBfOEpTT2JqZWN0RU5TMF83SlNWYWx1ZUVSS05TMF83QXJnTGlzdEUKLV9f
Wk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjEyZGV0YWNoV2luZG93RXYKIF9fWk43V2Vi
Q29yZTU2anNJbnNwZWN0b3JDb250cm9sbGVyUHJvdG90eXBlRnVuY3Rpb25Nb3ZlQnlVbnJlc3Ry
aWN0ZWRFUE4zSlNDOUV4ZWNTdGF0ZUVQTlMwXzhKU09iamVjdEVOUzBfN0pTVmFsdWVFUktOUzBf
N0FyZ0wKIF9fWk5LN1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIxMm1vdmVXaW5kb3dCeUVm
ZgogX19aTjdXZWJDb3JlTDI0ZHJhd091dGxpbmVkUXVhZFdpdGhDbGlwRVJOU18xNUdyYXBoaWNz
Q29udGV4dEVSS05TXzlGbG9hdFF1YWRFUzRfUktOU181Q29sb3JFCmRpZmYgLS1naXQgYS9XZWJD
b3JlL1dlYkNvcmUucHJvIGIvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCA0MWNlNGNlLi45OWUw
MjU5IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUucHJvCisrKyBiL1dlYkNvcmUvV2ViQ29y
ZS5wcm8KQEAgLTY5Nyw2ICs2OTcsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBpbnNwZWN0b3IvSW5z
cGVjdG9yRE9NQWdlbnQuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZVJl
c291cmNlLmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmNwcCBcCisgICAg
aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuY3BwIFwKICAgICBpbnNwZWN0
b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclJl
c291cmNlLmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuY3BwIFwK
QEAgLTE0MDMsNiArMTQwNCw4IEBAIEhFQURFUlMgKz0gXAogICAgIGluc3BlY3Rvci9JbnNwZWN0
b3JEYXRhYmFzZVJlc291cmNlLmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdl
UmVzb3VyY2UuaCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmggXAorICAgIGlu
c3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudC5oIFwKKyAgICBpbnNwZWN0b3IvSW5zcGVj
dG9yRnJvbnRlbmRDbGllbnRMb2NhbC5oIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRl
bmRIb3N0LmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZS5oIFwKICAgICBpbnNw
ZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qCmluZGV4IDU5NjhjYmUuLjJlMWMxNzcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvagpAQCAtNDI4NjEsNiArNDI4NjEsMTggQEAKIAkJCQk+DQogCQkJPC9GaWxl
Pg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3RvckZy
b250ZW5kQ2xpZW50LmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVs
YXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5jcHAi
DQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxp
bnNwZWN0b3JcSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5oIg0KKwkJCQk+DQorCQkJPC9G
aWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3Rv
ckZyb250ZW5kSG9zdC5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA5N2E5ZjdiLi5hYTgwNGIxIDEwMDY0NAot
LS0gYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDg2Myw2ICs0ODYzLDkg
QEAKIAkJRUQ1MDFEQzYwQjI0OUYyOTAwQUUxOEQ5IC8qIEVkaXRvck1hYy5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEVENTAxREM1MEIyNDlGMjkwMEFF
MThEOSAvKiBFZGl0b3JNYWMubW0gKi87IH07CiAJCUVERTNBNTAwMEM3QTQzMDYwMDk1NkEzNyAv
KiBDb2xvck1hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRURFM0E0RkYwQzdBNDMwNjAwOTU2QTM3IC8qIENvbG9yTWFjLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRURFQzk4MDMwQUVEN0UxNzAwNTkx
MzdGIC8qIFdlYkNvcmVQcmVmaXguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEVERUM5ODAyMEFFRDdFMTcwMDU5MTM3RiAvKiBXZWJDb3JlUHJlZml4Lmgg
Ki87IH07CisJCUYzNDRDNzE0MTEyNUI4MkMwMEYyNkVFRSAvKiBJbnNwZWN0b3JGcm9udGVuZENs
aWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjM0
NEM3MTIxMTI1QjgyQzAwRjI2RUVFIC8qIEluc3BlY3RvckZyb250ZW5kQ2xpZW50LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRjM0NEM3NTMxMTI5
NEQ5RDAwRjI2RUVFIC8qIEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEYzNDRDNzUyMTEyOTREOUQwMEYy
NkVFRSAvKiBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRjM0NEM3NTgxMTI5NEZGNjAwRjI2RUVF
IC8qIEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjM0NEM3NTcxMTI5NEZGNjAwRjI2RUVFIC8qIElu
c3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuY3BwICovOyB9OwogCQlGMzY0NEFGRjExMTk4MDU5
MDBFMEQ1MzcgLyogSW5qZWN0ZWRTY3JpcHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRjM2NDRBRkQxMTE5ODA1OTAwRTBENTM3IC8qIEluamVjdGVk
U2NyaXB0LmNwcCAqLzsgfTsKIAkJRjM2NDRCMDAxMTE5ODA1OTAwRTBENTM3IC8qIEluamVjdGVk
U2NyaXB0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
MzY0NEFGRTExMTk4MDU5MDBFMEQ1MzcgLyogSW5qZWN0ZWRTY3JpcHQuaCAqLzsgfTsKIAkJRjRF
QUY0QUUxMEM3NDJCMTAwOTEwMEQzIC8qIE9wZW5UeXBlU2FuaXRpemVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0RUFGNEFDMTBDNzQyQjEwMDkx
MDBEMyAvKiBPcGVuVHlwZVNhbml0aXplci5jcHAgKi87IH07CkBAIC0xMDIwMyw2ICsxMDIwNiw5
IEBACiAJCUVENTAxREM1MEIyNDlGMjkwMEFFMThEOSAvKiBFZGl0b3JNYWMubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gRWRpdG9yTWFjLm1tOyBwYXRoID0gbWFj
L0VkaXRvck1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRURFM0E0RkYwQzdB
NDMwNjAwOTU2QTM3IC8qIENvbG9yTWFjLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IENvbG9yTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUVERUM5ODAyMEFF
RDdFMTcwMDU5MTM3RiAvKiBXZWJDb3JlUHJlZml4LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXZWJDb3JlUHJlZml4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldp
ZHRoID0gNDsgdXNlc1RhYnMgPSAwOyB9OworCQlGMzQ0QzcxMjExMjVCODJDMDBGMjZFRUUgLyog
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRjM0NEM3NTIxMTI5NEQ5RDAwRjI2RUVFIC8qIEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9j
YWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yRnJvbnRlbmRD
bGllbnRMb2NhbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGMzQ0Qzc1NzExMjk0
RkY2MDBGMjZFRUUgLyogSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2Fs
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjM2NDRBRkQxMTE5ODA1OTAwRTBE
NTM3IC8qIEluamVjdGVkU2NyaXB0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEluamVjdGVkU2NyaXB0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RjM2NDRBRkUxMTE5ODA1OTAwRTBENTM3IC8qIEluamVjdGVkU2NyaXB0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluamVjdGVkU2NyaXB0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUY0RUFGNEFDMTBDNzQyQjEwMDkxMDBEMyAvKiBPcGVuVHlwZVNhbml0aXpl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBPcGVuVHlwZVNhbml0
aXplci5jcHA7IHBhdGggPSBvcGVudHlwZS9PcGVuVHlwZVNhbml0aXplci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDczOCw2ICsxMDc0NCw5IEBACiAJCQkJNDFGMDYxNzIw
RjVGMDBBQzAwQTA3RUFDIC8qIEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZS5oICovLAogCQkJ
CTdBRUQzRTAzMEZCQjFFQUEwMEQyQjAzQyAvKiBJbnNwZWN0b3JGcm9udGVuZC5jcHAgKi8sCiAJ
CQkJN0FFRDNFMDQwRkJCMUVBQTAwRDJCMDNDIC8qIEluc3BlY3RvckZyb250ZW5kLmggKi8sCisJ
CQkJRjM0NEM3MTIxMTI1QjgyQzAwRjI2RUVFIC8qIEluc3BlY3RvckZyb250ZW5kQ2xpZW50Lmgg
Ki8sCisJCQkJRjM0NEM3NTcxMTI5NEZGNjAwRjI2RUVFIC8qIEluc3BlY3RvckZyb250ZW5kQ2xp
ZW50TG9jYWwuY3BwICovLAorCQkJCUYzNDRDNzUyMTEyOTREOUQwMEYyNkVFRSAvKiBJbnNwZWN0
b3JGcm9udGVuZENsaWVudExvY2FsLmggKi8sCiAJCQkJN0EwRTc3MEIxMEMwMEE4ODAwQTAyNzZF
IC8qIEluc3BlY3RvckZyb250ZW5kSG9zdC5jcHAgKi8sCiAJCQkJN0EwRTc3MEMxMEMwMEE4ODAw
QTAyNzZFIC8qIEluc3BlY3RvckZyb250ZW5kSG9zdC5oICovLAogCQkJCTdBMEU3NzBEMTBDMDBB
ODgwMEEwMjc2RSAvKiBJbnNwZWN0b3JGcm9udGVuZEhvc3QuaWRsICovLApAQCAtMTc0MzAsNiAr
MTc0MzksOCBAQAogCQkJCTdBMjQ1ODdDMTAyMUVBRjQwMDBBMDBBQSAvKiBJbnNwZWN0b3JET01B
Z2VudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDFGMDYxNzQwRjVGMDBBQzAwQTA3RUFDIC8qIElu
c3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0FFRDNFMDYw
RkJCMUVBQTAwRDJCMDNDIC8qIEluc3BlY3RvckZyb250ZW5kLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlGMzQ0QzcxNDExMjVCODJDMDBGMjZFRUUgLyogSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaCBp
biBIZWFkZXJzICovLAorCQkJCUYzNDRDNzUzMTEyOTREOUQwMEYyNkVFRSAvKiBJbnNwZWN0b3JG
cm9udGVuZENsaWVudExvY2FsLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QTBFNzcwRjEwQzAwQTg4
MDBBMDI3NkUgLyogSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmggaW4gSGVhZGVycyAqLywKIAkJCQk0
MUYwNjIwMTBGNUYwQjY2MDBBMDdFQUMgLyogSW5zcGVjdG9yUmVzb3VyY2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTc1NDEzM0E4MTAyRTAwRTgwMDA3NUQwMCAvKiBJbnNwZWN0b3JUaW1lbGluZUFn
ZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTE5NjQ1LDYgKzE5NjU2LDcgQEAKIAkJCQk3QTI0NTg3
QjEwMjFFQUY0MDAwQTAwQUEgLyogSW5zcGVjdG9yRE9NQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNDFGMDYxNzUwRjVGMDBBQzAwQTA3RUFDIC8qIEluc3BlY3RvckRPTVN0b3JhZ2VSZXNv
dXJjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QUVEM0UwNTBGQkIxRUFBMDBEMkIwM0MgLyog
SW5zcGVjdG9yRnJvbnRlbmQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRjM0NEM3NTgxMTI5NEZG
NjAwRjI2RUVFIC8qIEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJN0EwRTc3MEUxMEMwMEE4ODAwQTAyNzZFIC8qIEluc3BlY3RvckZyb250ZW5kSG9z
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MUYwNjIwMjBGNUYwQjY2MDBBMDdFQUMgLyogSW5z
cGVjdG9yUmVzb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzU0MTMzQUExMDJFMDBGNDAw
MDc1RDAwIC8qIEluc3BlY3RvclRpbWVsaW5lQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9Db25zb2xlTWVzc2FnZS5jcHAgYi9XZWJDb3JlL2lu
c3BlY3Rvci9Db25zb2xlTWVzc2FnZS5jcHAKaW5kZXggNTUzOWU5ZC4uNDA1NDk5NiAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuY3BwCisrKyBiL1dlYkNvcmUv
aW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmNwcApAQCAtMzEsOSArMzEsMTIgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJDb25zb2xlTWVzc2FnZS5oIgogCisjaW5jbHVkZSAiSW5q
ZWN0ZWRTY3JpcHQuaCIKKyNpbmNsdWRlICJJbmplY3RlZFNjcmlwdEhvc3QuaCIKICNpbmNsdWRl
ICJJbnNwZWN0b3JGcm9udGVuZC5oIgogI2luY2x1ZGUgIlNjcmlwdENhbGxTdGFjay5oIgogI2lu
Y2x1ZGUgIlNjcmlwdE9iamVjdC5oIgorI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTgwLDcgKzgzLDcgQEAgQ29uc29sZU1lc3Nh
Z2U6OkNvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2UgcywgTWVzc2FnZVR5cGUgdCwgTWVzc2Fn
ZUxldmVsIGwsIFMKIH0KIAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi12b2lkIENvbnNvbGVNZXNz
YWdlOjphZGRUb0NvbnNvbGUoSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kKQordm9pZCBDb25z
b2xlTWVzc2FnZTo6YWRkVG9Gcm9udGVuZChJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQsIElu
amVjdGVkU2NyaXB0SG9zdCogaW5qZWN0ZWRTY3JpcHRIb3N0KQogewogICAgIFNjcmlwdE9iamVj
dCBqc29uT2JqID0gZnJvbnRlbmQtPm5ld1NjcmlwdE9iamVjdCgpOwogICAgIGpzb25PYmouc2V0
KCJzb3VyY2UiLCBzdGF0aWNfY2FzdDxpbnQ+KG1fc291cmNlKSk7CkBAIC05MCw3ICs5MywxNSBA
QCB2b2lkIENvbnNvbGVNZXNzYWdlOjphZGRUb0NvbnNvbGUoSW5zcGVjdG9yRnJvbnRlbmQqIGZy
b250ZW5kKQogICAgIGpzb25PYmouc2V0KCJ1cmwiLCBtX3VybCk7CiAgICAganNvbk9iai5zZXQo
Imdyb3VwTGV2ZWwiLCBzdGF0aWNfY2FzdDxpbnQ+KG1fZ3JvdXBMZXZlbCkpOwogICAgIGpzb25P
Ymouc2V0KCJyZXBlYXRDb3VudCIsIHN0YXRpY19jYXN0PGludD4obV9yZXBlYXRDb3VudCkpOwot
ICAgIGZyb250ZW5kLT5hZGRDb25zb2xlTWVzc2FnZShqc29uT2JqLCBtX2ZyYW1lcywgbV9zY3Jp
cHRTdGF0ZSwgbV9hcmd1bWVudHMsICBtX21lc3NhZ2UpOworICAgIFZlY3RvcjxSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPiA+IGFyZ3VtZW50czsKKyAgICBpZiAoIW1fYXJndW1lbnRzLmlz
RW1wdHkoKSkgeworICAgICAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IGluamVj
dGVkU2NyaXB0SG9zdC0+aW5qZWN0ZWRTY3JpcHRGb3IobV9zY3JpcHRTdGF0ZSk7CisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2FyZ3VtZW50cy5zaXplKCk7ICsraSkgeworICAg
ICAgICAgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZFZhbHVlID0g
aW5qZWN0ZWRTY3JpcHQud3JhcEZvckNvbnNvbGUobV9hcmd1bWVudHNbaV0pOworICAgICAgICAg
ICAgYXJndW1lbnRzLmFwcGVuZChzZXJpYWxpemVkVmFsdWUpOworICAgICAgICB9CisgICAgfSAg
IAorICAgIGZyb250ZW5kLT5hZGRDb25zb2xlTWVzc2FnZShqc29uT2JqLCBtX2ZyYW1lcywgYXJn
dW1lbnRzLCAgbV9tZXNzYWdlKTsKIH0KIAogdm9pZCBDb25zb2xlTWVzc2FnZTo6dXBkYXRlUmVw
ZWF0Q291bnRJbkNvbnNvbGUoSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kKQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9pbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuaCBiL1dlYkNvcmUvaW5zcGVjdG9y
L0NvbnNvbGVNZXNzYWdlLmgKaW5kZXggZTlhZTEzMC4uNTNmNDI1NSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9pbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9D
b25zb2xlTWVzc2FnZS5oCkBAIC0zOCw0MCArMzgsNDEgQEAKICNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICBjbGFzcyBJbnNwZWN0b3JGcm9udGVuZDsK
LSAgICBjbGFzcyBTY3JpcHRDYWxsU3RhY2s7Ci0gICAgY2xhc3MgU2NyaXB0U3RyaW5nOworY2xh
c3MgSW5qZWN0ZWRTY3JpcHRIb3N0OworY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmQ7CitjbGFzcyBT
Y3JpcHRDYWxsU3RhY2s7CitjbGFzcyBTY3JpcHRTdHJpbmc7CiAKLSAgICBjbGFzcyBDb25zb2xl
TWVzc2FnZSA6IHB1YmxpYyBOb25jb3B5YWJsZSB7Ci0gICAgcHVibGljOgotICAgICAgICBDb25z
b2xlTWVzc2FnZShNZXNzYWdlU291cmNlLCBNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBjb25z
dCBTdHJpbmcmIG0sIHVuc2lnbmVkIGxpLCBjb25zdCBTdHJpbmcmIHUsIHVuc2lnbmVkIGcpOyAg
ICAgICAgCi0gICAgICAgIENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBl
LCBNZXNzYWdlTGV2ZWwsIFNjcmlwdENhbGxTdGFjayosIHVuc2lnbmVkIGcsIGJvb2wgc3RvcmVU
cmFjZSA9IGZhbHNlKTsKK2NsYXNzIENvbnNvbGVNZXNzYWdlIDogcHVibGljIE5vbmNvcHlhYmxl
IHsKK3B1YmxpYzoKKyAgICBDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlLCBNZXNzYWdlVHlw
ZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG0sIHVuc2lnbmVkIGxpLCBjb25zdCBTdHJp
bmcmIHUsIHVuc2lnbmVkIGcpOyAgICAgICAgCisgICAgQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNv
dXJjZSwgTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwgU2NyaXB0Q2FsbFN0YWNrKiwgdW5zaWdu
ZWQgZywgYm9vbCBzdG9yZVRyYWNlID0gZmFsc2UpOwogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikK
LSAgICAgICAgdm9pZCBhZGRUb0NvbnNvbGUoSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kKTsK
LSAgICAgICAgdm9pZCB1cGRhdGVSZXBlYXRDb3VudEluQ29uc29sZShJbnNwZWN0b3JGcm9udGVu
ZCogZnJvbnRlbmQpOworICAgIHZvaWQgYWRkVG9Gcm9udGVuZChJbnNwZWN0b3JGcm9udGVuZCos
IEluamVjdGVkU2NyaXB0SG9zdCopOworICAgIHZvaWQgdXBkYXRlUmVwZWF0Q291bnRJbkNvbnNv
bGUoSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kKTsKICNlbmRpZgotICAgICAgICB2b2lkIGlu
Y3JlbWVudENvdW50KCkgeyArK21fcmVwZWF0Q291bnQ7IH07Ci0gICAgICAgIGJvb2wgaXNFcXVh
bChTY3JpcHRTdGF0ZSosIENvbnNvbGVNZXNzYWdlKiBtc2cpIGNvbnN0OworICAgIHZvaWQgaW5j
cmVtZW50Q291bnQoKSB7ICsrbV9yZXBlYXRDb3VudDsgfQorICAgIGJvb2wgaXNFcXVhbChTY3Jp
cHRTdGF0ZSosIENvbnNvbGVNZXNzYWdlKiBtc2cpIGNvbnN0OwogCi0gICAgICAgIE1lc3NhZ2VT
b3VyY2Ugc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2U7IH0KLSAgICAgICAgY29uc3Qg
U3RyaW5nJiBtZXNzYWdlKCkgY29uc3QgeyByZXR1cm4gbV9tZXNzYWdlOyB9CisgICAgTWVzc2Fn
ZVNvdXJjZSBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZTsgfQorICAgIGNvbnN0IFN0
cmluZyYgbWVzc2FnZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWVzc2FnZTsgfQogCi0gICAgcHJpdmF0
ZToKLSAgICAgICAgTWVzc2FnZVNvdXJjZSBtX3NvdXJjZTsKLSAgICAgICAgTWVzc2FnZVR5cGUg
bV90eXBlOwotICAgICAgICBNZXNzYWdlTGV2ZWwgbV9sZXZlbDsKLSAgICAgICAgU3RyaW5nIG1f
bWVzc2FnZTsKK3ByaXZhdGU6CisgICAgTWVzc2FnZVNvdXJjZSBtX3NvdXJjZTsKKyAgICBNZXNz
YWdlVHlwZSBtX3R5cGU7CisgICAgTWVzc2FnZUxldmVsIG1fbGV2ZWw7CisgICAgU3RyaW5nIG1f
bWVzc2FnZTsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgICAgICBWZWN0b3I8U2NyaXB0VmFs
dWU+IG1fYXJndW1lbnRzOwotICAgICAgICBTY3JpcHRTdGF0ZSogbV9zY3JpcHRTdGF0ZTsKKyAg
ICBWZWN0b3I8U2NyaXB0VmFsdWU+IG1fYXJndW1lbnRzOworICAgIFNjcmlwdFN0YXRlKiBtX3Nj
cmlwdFN0YXRlOwogI2VuZGlmCi0gICAgICAgIFZlY3RvcjxTY3JpcHRTdHJpbmc+IG1fZnJhbWVz
OwotICAgICAgICB1bnNpZ25lZCBtX2xpbmU7Ci0gICAgICAgIFN0cmluZyBtX3VybDsKLSAgICAg
ICAgdW5zaWduZWQgbV9ncm91cExldmVsOwotICAgICAgICB1bnNpZ25lZCBtX3JlcGVhdENvdW50
OwotICAgIH07CisgICAgVmVjdG9yPFNjcmlwdFN0cmluZz4gbV9mcmFtZXM7CisgICAgdW5zaWdu
ZWQgbV9saW5lOworICAgIFN0cmluZyBtX3VybDsKKyAgICB1bnNpZ25lZCBtX2dyb3VwTGV2ZWw7
CisgICAgdW5zaWduZWQgbV9yZXBlYXRDb3VudDsKK307CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2xpZW50LmggYi9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDbGllbnQuaAppbmRleCBlNDQ4Y2QyLi44NDFjMTVl
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDbGllbnQuaAorKysgYi9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDbGllbnQuaApAQCAtMzAsNiArMzAsNyBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEluc3BlY3RvckNvbnRyb2xsZXI7CiBjbGFzcyBO
b2RlOwogY2xhc3MgUGFnZTsKIGNsYXNzIFN0cmluZzsKQEAgLTQwLDI5ICs0MSwxMyBAQCBwdWJs
aWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgaW5zcGVjdG9yRGVzdHJveWVkKCkgPSAwOwogCi0gICAg
dmlydHVhbCBQYWdlKiBjcmVhdGVQYWdlKCkgPSAwOwotCi0gICAgdmlydHVhbCBTdHJpbmcgbG9j
YWxpemVkU3RyaW5nc1VSTCgpID0gMDsKLQotICAgIHZpcnR1YWwgU3RyaW5nIGhpZGRlblBhbmVs
cygpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBzaG93V2luZG93KCkgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBjbG9zZVdpbmRvdygpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hXaW5k
b3coKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRldGFjaFdpbmRvdygpID0gMDsKLQotICAgIHZp
cnR1YWwgdm9pZCBzZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgb3Blbkluc3BlY3RvckZyb250ZW5kKEluc3BlY3RvckNvbnRyb2xs
ZXIqKSA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgaGlnaGxpZ2h0KE5vZGUqKSA9IDA7CiAgICAg
dmlydHVhbCB2b2lkIGhpZGVIaWdobGlnaHQoKSA9IDA7CiAKLSAgICB2aXJ0dWFsIHZvaWQgaW5z
cGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIG5ld1VSTCkgPSAwOwotCiAgICAgdmlydHVh
bCB2b2lkIHBvcHVsYXRlU2V0dGluZyhjb25zdCBTdHJpbmcmIGtleSwgU3RyaW5nKiB2YWx1ZSkg
PSAwOwogICAgIHZpcnR1YWwgdm9pZCBzdG9yZVNldHRpbmcoY29uc3QgU3RyaW5nJiBrZXksIGNv
bnN0IFN0cmluZyYgdmFsdWUpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0b3JXaW5k
b3dPYmplY3RDbGVhcmVkKCkgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAppbmRleCBiMmNhM2E4Li40YzQ3
ZTlkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNw
cAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcApAQCAtNTcs
MTEgKzU3LDExIEBACiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHRIb3N0LmgiCiAjaW5jbHVkZSAi
SW5zcGVjdG9yQmFja2VuZC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNsaWVudC5oIgorI2luY2x1
ZGUgIkluc3BlY3RvckZyb250ZW5kQ2xpZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRE9NQWdl
bnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuaCIKICNpbmNsdWRl
ICJJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRl
bmQuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZEhvc3QuaCIKICNpbmNsdWRlICJJbnNw
ZWN0b3JSZXNvdXJjZS5oIgogI2luY2x1ZGUgIkluc3BlY3RvcldvcmtlclJlc291cmNlLmgiCiAj
aW5jbHVkZSAiSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oIgpAQCAtMTQ0LDEwICsxNDQsOCBAQCBz
dGF0aWMgdW5zaWduZWQgc19pbnNwZWN0b3JDb250cm9sbGVyQ291bnQ7CiBJbnNwZWN0b3JDb250
cm9sbGVyOjpJbnNwZWN0b3JDb250cm9sbGVyKFBhZ2UqIHBhZ2UsIEluc3BlY3RvckNsaWVudCog
Y2xpZW50KQogICAgIDogbV9pbnNwZWN0ZWRQYWdlKHBhZ2UpCiAgICAgLCBtX2NsaWVudChjbGll
bnQpCi0gICAgLCBtX3BhZ2UoMCkKKyAgICAsIG1fb3BlbmluZ0Zyb250ZW5kKGZhbHNlKQogICAg
ICwgbV9leHBpcmVkQ29uc29sZU1lc3NhZ2VDb3VudCgwKQotICAgICwgbV9mcm9udGVuZFNjcmlw
dFN0YXRlKDApCi0gICAgLCBtX3dpbmRvd1Zpc2libGUoZmFsc2UpCiAgICAgLCBtX3Nob3dBZnRl
clZpc2libGUoQ3VycmVudFBhbmVsKQogICAgICwgbV9ncm91cExldmVsKDApCiAgICAgLCBtX3Nl
YXJjaGluZ0Zvck5vZGUoZmFsc2UpCkBAIC0xNTUsNyArMTUzLDYgQEAgSW5zcGVjdG9yQ29udHJv
bGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcihQYWdlKiBwYWdlLCBJbnNwZWN0b3JDbGllbnQqIGNs
aWVudCkKICAgICAsIG1fcmVzb3VyY2VUcmFja2luZ0VuYWJsZWQoZmFsc2UpCiAgICAgLCBtX3Jl
c291cmNlVHJhY2tpbmdTZXR0aW5nc0xvYWRlZChmYWxzZSkKICAgICAsIG1faW5zcGVjdG9yQmFj
a2VuZChJbnNwZWN0b3JCYWNrZW5kOjpjcmVhdGUodGhpcykpCi0gICAgLCBtX2luc3BlY3RvckZy
b250ZW5kSG9zdChJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OmNyZWF0ZSh0aGlzLCBjbGllbnQpKQog
ICAgICwgbV9pbmplY3RlZFNjcmlwdEhvc3QoSW5qZWN0ZWRTY3JpcHRIb3N0OjpjcmVhdGUodGhp
cykpCiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICAgLCBtX2RlYnVnZ2VyRW5h
YmxlZChmYWxzZSkKQEAgLTE3OCw5ICsxNzUsNyBAQCBJbnNwZWN0b3JDb250cm9sbGVyOjp+SW5z
cGVjdG9yQ29udHJvbGxlcigpCiB7CiAgICAgLy8gVGhlc2Ugc2hvdWxkIGhhdmUgYmVlbiBjbGVh
cmVkIGluIGluc3BlY3RlZFBhZ2VEZXN0cm95ZWQoKS4KICAgICBBU1NFUlQoIW1fY2xpZW50KTsK
LSAgICBBU1NFUlQoIW1fZnJvbnRlbmRTY3JpcHRTdGF0ZSk7CiAgICAgQVNTRVJUKCFtX2luc3Bl
Y3RlZFBhZ2UpOwotICAgIEFTU0VSVCghbV9wYWdlIHx8IChtX3BhZ2UgJiYgIW1fcGFnZS0+cGFy
ZW50SW5zcGVjdG9yQ29udHJvbGxlcigpKSk7CiAKICAgICBkZWxldGVBbGxWYWx1ZXMobV9mcmFt
ZVJlc291cmNlcyk7CiAgICAgZGVsZXRlQWxsVmFsdWVzKG1fY29uc29sZU1lc3NhZ2VzKTsKQEAg
LTE5MSwxOCArMTg2LDE0IEBAIEluc3BlY3RvckNvbnRyb2xsZXI6On5JbnNwZWN0b3JDb250cm9s
bGVyKCkKICAgICByZWxlYXNlRE9NQWdlbnQoKTsKIAogICAgIG1faW5zcGVjdG9yQmFja2VuZC0+
ZGlzY29ubmVjdENvbnRyb2xsZXIoKTsKLSAgICBtX2luc3BlY3RvckZyb250ZW5kSG9zdC0+ZGlz
Y29ubmVjdENvbnRyb2xsZXIoKTsKICAgICBtX2luamVjdGVkU2NyaXB0SG9zdC0+ZGlzY29ubmVj
dENvbnRyb2xsZXIoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0ZWRQ
YWdlRGVzdHJveWVkKCkKIHsKLSAgICBjbG9zZSgpOworICAgIGlmIChtX2Zyb250ZW5kKQorICAg
ICAgICBtX2Zyb250ZW5kLT5pbnNwZWN0ZWRQYWdlRGVzdHJveWVkKCk7CiAKLSAgICBpZiAobV9m
cm9udGVuZFNjcmlwdFN0YXRlKSB7Ci0gICAgICAgIFNjcmlwdEdsb2JhbE9iamVjdDo6cmVtb3Zl
KG1fZnJvbnRlbmRTY3JpcHRTdGF0ZSwgIkluc3BlY3RvckJhY2tlbmQiKTsKLSAgICAgICAgU2Ny
aXB0R2xvYmFsT2JqZWN0OjpyZW1vdmUobV9mcm9udGVuZFNjcmlwdFN0YXRlLCAiSW5zcGVjdG9y
RnJvbnRlbmRIb3N0Iik7Ci0gICAgfQogICAgIEFTU0VSVChtX2luc3BlY3RlZFBhZ2UpOwogICAg
IG1faW5zcGVjdGVkUGFnZSA9IDA7CiAKQEAgLTI5Nyw0NyArMjg4LDcgQEAgdm9pZCBJbnNwZWN0
b3JDb250cm9sbGVyOjpoaWRlSGlnaGxpZ2h0KCkKIAogYm9vbCBJbnNwZWN0b3JDb250cm9sbGVy
Ojp3aW5kb3dWaXNpYmxlKCkKIHsKLSAgICByZXR1cm4gbV93aW5kb3dWaXNpYmxlOwotfQotCi12
b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldFdpbmRvd1Zpc2libGUoYm9vbCB2aXNpYmxlLCBi
b29sIGF0dGFjaGVkKQotewotICAgIGlmICh2aXNpYmxlID09IG1fd2luZG93VmlzaWJsZSB8fCAh
bV9mcm9udGVuZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV93aW5kb3dWaXNpYmxlID0gdmlz
aWJsZTsKLQotICAgIGlmIChtX3dpbmRvd1Zpc2libGUpIHsKLSAgICAgICAgc2V0QXR0YWNoZWRX
aW5kb3coYXR0YWNoZWQpOwotICAgICAgICBwb3B1bGF0ZVNjcmlwdE9iamVjdHMoKTsKLQotICAg
ICAgICBpZiAobV9zaG93QWZ0ZXJWaXNpYmxlID09IEN1cnJlbnRQYW5lbCkgewotICAgICAgICAg
ICAgU3RyaW5nIGxhc3RBY3RpdmVQYW5lbFNldHRpbmcgPSBzZXR0aW5nKGxhc3RBY3RpdmVQYW5l
bFNldHRpbmdOYW1lKTsKLSAgICAgICAgICAgIG1fc2hvd0FmdGVyVmlzaWJsZSA9IHNwZWNpYWxQ
YW5lbEZvckpTTmFtZShsYXN0QWN0aXZlUGFuZWxTZXR0aW5nKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmIChtX25vZGVUb0ZvY3VzKQotICAgICAgICAgICAgZm9jdXNOb2RlKCk7Ci0jaWYgRU5B
QkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCi0gICAgICAgIGlmIChtX2F0dGFjaERlYnVnZ2VyV2hl
blNob3duKQotICAgICAgICAgICAgZW5hYmxlRGVidWdnZXIoKTsKLSNlbmRpZgotICAgICAgICBz
aG93UGFuZWwobV9zaG93QWZ0ZXJWaXNpYmxlKTsKLSAgICB9IGVsc2UgewotI2lmIEVOQUJMRShK
QVZBU0NSSVBUX0RFQlVHR0VSKQotICAgICAgICAvLyBJZiB0aGUgd2luZG93IGlzIGJlaW5nIGNs
b3NlZCB3aXRoIHRoZSBkZWJ1Z2dlciBlbmFibGVkLAotICAgICAgICAvLyByZW1lbWJlciB0aGlz
IHN0YXRlIHRvIHJlLWVuYWJsZSBkZWJ1Z2dlciBvbiB0aGUgbmV4dCB3aW5kb3cKLSAgICAgICAg
Ly8gb3BlbmluZy4KLSAgICAgICAgYm9vbCBkZWJ1Z2dlcldhc0VuYWJsZWQgPSBtX2RlYnVnZ2Vy
RW5hYmxlZDsKLSAgICAgICAgZGlzYWJsZURlYnVnZ2VyKCk7Ci0gICAgICAgIGlmIChkZWJ1Z2dl
cldhc0VuYWJsZWQpCi0gICAgICAgICAgICBtX2F0dGFjaERlYnVnZ2VyV2hlblNob3duID0gdHJ1
ZTsKLSNlbmRpZgotICAgICAgICBzZXRTZWFyY2hpbmdGb3JOb2RlKGZhbHNlKTsKLSAgICAgICAg
cmVzZXRTY3JpcHRPYmplY3RzKCk7Ci0gICAgICAgIHN0b3BUaW1lbGluZVByb2ZpbGVyKCk7Ci0g
ICAgfQotICAgIG1fc2hvd0FmdGVyVmlzaWJsZSA9IEN1cnJlbnRQYW5lbDsKKyAgICByZXR1cm4g
bV9mcm9udGVuZDsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjphZGRNZXNzYWdlVG9D
b25zb2xlKE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlVHlwZSB0eXBlLCBNZXNzYWdlTGV2
ZWwgbGV2ZWwsIFNjcmlwdENhbGxTdGFjayogY2FsbFN0YWNrKQpAQCAtMzcwLDcgKzMyMSw3IEBA
IHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6YWRkQ29uc29sZU1lc3NhZ2UoU2NyaXB0U3RhdGUq
IHNjcmlwdFN0YXRlLCBDb25zb2xlTWVzCiAgICAgICAgIG1fcHJldmlvdXNNZXNzYWdlID0gY29u
c29sZU1lc3NhZ2U7CiAgICAgICAgIG1fY29uc29sZU1lc3NhZ2VzLmFwcGVuZChjb25zb2xlTWVz
c2FnZSk7CiAgICAgICAgIGlmICh3aW5kb3dWaXNpYmxlKCkpCi0gICAgICAgICAgICBtX3ByZXZp
b3VzTWVzc2FnZS0+YWRkVG9Db25zb2xlKG1fZnJvbnRlbmQuZ2V0KCkpOworICAgICAgICAgICAg
bV9wcmV2aW91c01lc3NhZ2UtPmFkZFRvRnJvbnRlbmQobV9mcm9udGVuZC5nZXQoKSwgbV9pbmpl
Y3RlZFNjcmlwdEhvc3QuZ2V0KCkpOwogICAgIH0KIAogICAgIGlmICghd2luZG93VmlzaWJsZSgp
ICYmIG1fY29uc29sZU1lc3NhZ2VzLnNpemUoKSA+PSBtYXhpbXVtQ29uc29sZU1lc3NhZ2VzKSB7
CkBAIC00MTgsNjkgKzM2OSw2IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6bWFya1RpbWVs
aW5lKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKICAgICAgICAgdGltZWxpbmVBZ2VudCgpLT5kaWRN
YXJrVGltZWxpbmUobWVzc2FnZSk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBjb25zdHJhaW5lZEF0
dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIHByZWZlcnJlZEhlaWdodCwgdW5zaWduZWQgdG90
YWxXaW5kb3dIZWlnaHQpCi17Ci0gICAgcmV0dXJuIHJvdW5kZihtYXgobWluaW11bUF0dGFjaGVk
SGVpZ2h0LCBtaW48ZmxvYXQ+KHByZWZlcnJlZEhlaWdodCwgdG90YWxXaW5kb3dIZWlnaHQgKiBt
YXhpbXVtQXR0YWNoZWRIZWlnaHRSYXRpbykpKTsKLX0KLQotYm9vbCBJbnNwZWN0b3JDb250cm9s
bGVyOjpjYW5BdHRhY2hXaW5kb3coKSBjb25zdAotewotICAgIGlmICghZW5hYmxlZCgpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgIHVuc2lnbmVkIGluc3BlY3RlZFBhZ2VI
ZWlnaHQgPSBtX2luc3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCktPnZpc2libGVIZWln
aHQoKTsKLQotICAgIC8vIERvbid0IGFsbG93IHRoZSBhdHRhY2ggaWYgdGhlIHdpbmRvdyB3b3Vs
ZCBiZSB0b28gc21hbGwgdG8gYWNjb21tb2RhdGUgdGhlIG1pbmltdW0gaW5zcGVjdG9yIGhlaWdo
dC4KLSAgICByZXR1cm4gbWluaW11bUF0dGFjaGVkSGVpZ2h0IDw9IGluc3BlY3RlZFBhZ2VIZWln
aHQgKiBtYXhpbXVtQXR0YWNoZWRIZWlnaHRSYXRpbzsKLX0KLQotdm9pZCBJbnNwZWN0b3JDb250
cm9sbGVyOjphdHRhY2hXaW5kb3coKQotewotICAgIGlmICghZW5hYmxlZCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICB1bnNpZ25lZCBpbnNwZWN0ZWRQYWdlSGVpZ2h0ID0gbV9pbnNwZWN0ZWRQ
YWdlLT5tYWluRnJhbWUoKS0+dmlldygpLT52aXNpYmxlSGVpZ2h0KCk7Ci0KLSAgICBTdHJpbmcg
YXR0YWNoZWRIZWlnaHQgPSBzZXR0aW5nKGluc3BlY3RvckF0dGFjaGVkSGVpZ2h0TmFtZSk7Ci0g
ICAgYm9vbCBzdWNjZXNzID0gdHJ1ZTsKLSAgICBpbnQgaGVpZ2h0ID0gYXR0YWNoZWRIZWlnaHQu
dG9JbnQoJnN1Y2Nlc3MpOwotICAgIHVuc2lnbmVkIHByZWZlcnJlZEhlaWdodCA9IHN1Y2Nlc3Mg
PyBoZWlnaHQgOiBkZWZhdWx0QXR0YWNoZWRIZWlnaHQ7Ci0KLSAgICBtX2NsaWVudC0+YXR0YWNo
V2luZG93KCk7Ci0KLSAgICAvLyBXZSBuZWVkIHRvIGNvbnN0cmFpbiB0aGUgd2luZG93IGhlaWdo
dCBoZXJlIGluIGNhc2UgdGhlIHVzZXIgaGFzIHJlc2l6ZWQgdGhlIGluc3BlY3RlZCBwYWdlJ3Mg
d2luZG93IHNvIHRoYXQKLSAgICAvLyB0aGUgdXNlcidzIHByZWZlcnJlZCBoZWlnaHQgd291bGQg
YmUgdG9vIGJpZyB0byBkaXNwbGF5LgotICAgIG1fY2xpZW50LT5zZXRBdHRhY2hlZFdpbmRvd0hl
aWdodChjb25zdHJhaW5lZEF0dGFjaGVkV2luZG93SGVpZ2h0KHByZWZlcnJlZEhlaWdodCwgaW5z
cGVjdGVkUGFnZUhlaWdodCkpOwotfQotCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRldGFj
aFdpbmRvdygpCi17Ci0gICAgaWYgKCFlbmFibGVkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBt
X2NsaWVudC0+ZGV0YWNoV2luZG93KCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6
c2V0QXR0YWNoZWRXaW5kb3coYm9vbCBhdHRhY2hlZCkKLXsKLSAgICBpZiAoIWVuYWJsZWQoKSB8
fCAhbV9mcm9udGVuZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9mcm9udGVuZC0+c2V0QXR0
YWNoZWRXaW5kb3coYXR0YWNoZWQpOwotfQotCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNl
dEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkKLXsKLSAgICBpZiAoIWVuYWJs
ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIHVuc2lnbmVkIHRvdGFsSGVpZ2h0ID0g
bV9wYWdlLT5tYWluRnJhbWUoKS0+dmlldygpLT52aXNpYmxlSGVpZ2h0KCkgKyBtX2luc3BlY3Rl
ZFBhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCktPnZpc2libGVIZWlnaHQoKTsKLSAgICB1bnNpZ25l
ZCBhdHRhY2hlZEhlaWdodCA9IGNvbnN0cmFpbmVkQXR0YWNoZWRXaW5kb3dIZWlnaHQoaGVpZ2h0
LCB0b3RhbEhlaWdodCk7Ci0gICAgCi0gICAgc2V0U2V0dGluZyhpbnNwZWN0b3JBdHRhY2hlZEhl
aWdodE5hbWUsIFN0cmluZzo6bnVtYmVyKGF0dGFjaGVkSGVpZ2h0KSk7Ci0gICAgCi0gICAgbV9j
bGllbnQtPnNldEF0dGFjaGVkV2luZG93SGVpZ2h0KGF0dGFjaGVkSGVpZ2h0KTsKLX0KLQogdm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzdG9yZUxhc3RBY3RpdmVQYW5lbChjb25zdCBTdHJpbmcm
IHBhbmVsTmFtZSkKIHsKICAgICBzZXRTZXR0aW5nKGxhc3RBY3RpdmVQYW5lbFNldHRpbmdOYW1l
LCBwYW5lbE5hbWUpOwpAQCAtNTEyLDIzICs0MDAsMjIgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9s
bGVyOjpoYW5kbGVNb3VzZVByZXNzT25Ob2RlKE5vZGUqIG5vZGUpCiAgICAgaW5zcGVjdChub2Rl
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0ZWRXaW5kb3dTY3JpcHRP
YmplY3RDbGVhcmVkKEZyYW1lKiBmcmFtZSkKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQoUGFzc093blB0cjxJbnNwZWN0b3JGcm9udGVuZENsaWVu
dD4gY2xpZW50KQogewotICAgIGlmICghZW5hYmxlZCgpIHx8ICFtX2Zyb250ZW5kIHx8IGZyYW1l
ICE9IG1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBt
X2luamVjdGVkU2NyaXB0SG9zdC0+ZGlzY2FyZEluamVjdGVkU2NyaXB0cygpOworICAgIEFTU0VS
VCghbV9pbnNwZWN0b3JGcm9udGVuZENsaWVudCk7CisgICAgbV9pbnNwZWN0b3JGcm9udGVuZENs
aWVudCA9IGNsaWVudDsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjp3aW5kb3dTY3Jp
cHRPYmplY3RBdmFpbGFibGUoKQordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0ZWRX
aW5kb3dTY3JpcHRPYmplY3RDbGVhcmVkKEZyYW1lKiBmcmFtZSkKIHsKLSAgICBpZiAoIW1fcGFn
ZSB8fCAhZW5hYmxlZCgpKQotICAgICAgICByZXR1cm47CisgICAgLy8gSWYgdGhlIHBhZ2UgaXMg
c3VwcG9zZWQgdG8gc2VydmUgYXMgSW5zcGVjdG9yRnJvbnRlbmQgbm90aWZ5IGluc3BldG9yIGZy
b250ZW5kCisgICAgLy8gY2xpZW50IHRoYXQgaXQncyBjbGVhcmVkIHNvIHRoYXQgdGhlIGNsaWVu
dCBjYW4gZXhwb3NlIGluc3BlY3RvciBiaW5kaW5ncy4KKyAgICBpZiAobV9pbnNwZWN0b3JGcm9u
dGVuZENsaWVudCAmJiBmcmFtZSA9PSBtX2luc3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpKQorICAg
ICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2xpZW50LT53aW5kb3dPYmplY3RDbGVhcmVkKCk7CiAK
LSAgICAvLyBHcmFudCB0aGUgaW5zcGVjdG9yIHRoZSBhYmlsaXR5IHRvIHNjcmlwdCB0aGUgaW5z
cGVjdGVkIHBhZ2UuCi0gICAgbV9wYWdlLT5tYWluRnJhbWUoKS0+ZG9jdW1lbnQoKS0+c2VjdXJp
dHlPcmlnaW4oKS0+Z3JhbnRVbml2ZXJzYWxBY2Nlc3MoKTsKLSAgICBtX2Zyb250ZW5kU2NyaXB0
U3RhdGUgPSBzY3JpcHRTdGF0ZUZyb21QYWdlKGRlYnVnZ2VyV29ybGQoKSwgbV9wYWdlKTsKLSAg
ICBTY3JpcHRHbG9iYWxPYmplY3Q6OnNldChtX2Zyb250ZW5kU2NyaXB0U3RhdGUsICJJbnNwZWN0
b3JCYWNrZW5kIiwgbV9pbnNwZWN0b3JCYWNrZW5kLmdldCgpKTsKLSAgICBTY3JpcHRHbG9iYWxP
YmplY3Q6OnNldChtX2Zyb250ZW5kU2NyaXB0U3RhdGUsICJJbnNwZWN0b3JGcm9udGVuZEhvc3Qi
LCBtX2luc3BlY3RvckZyb250ZW5kSG9zdC5nZXQoKSk7CisgICAgaWYgKCFlbmFibGVkKCkgfHwg
IW1fZnJvbnRlbmQgfHwgZnJhbWUgIT0gbV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIG1faW5qZWN0ZWRTY3JpcHRIb3N0LT5kaXNjYXJkSW5qZWN0ZWRT
Y3JpcHRzKCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0U2VhcmNoaW5nRm9y
Tm9kZShib29sIGVuYWJsZWQpCkBAIC01NDYsMTggKzQzMywxNiBAQCB2b2lkIEluc3BlY3RvckNv
bnRyb2xsZXI6OnNldFNlYXJjaGluZ0Zvck5vZGUoYm9vbCBlbmFibGVkKQogICAgIH0KIH0KIAot
dm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzY3JpcHRPYmplY3RSZWFkeSgpCit2b2lkIEluc3Bl
Y3RvckNvbnRyb2xsZXI6OnNldEZyb250ZW5kKFBhc3NPd25QdHI8SW5zcGVjdG9yRnJvbnRlbmQ+
IGZyb250ZW5kKQogewotICAgIEFTU0VSVChtX2Zyb250ZW5kU2NyaXB0U3RhdGUpOwotICAgIGlm
ICghbV9mcm9udGVuZFNjcmlwdFN0YXRlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBTY3JpcHRP
YmplY3Qgd2ViSW5zcGVjdG9yT2JqOwotICAgIGlmICghU2NyaXB0R2xvYmFsT2JqZWN0OjpnZXQo
bV9mcm9udGVuZFNjcmlwdFN0YXRlLCAiV2ViSW5zcGVjdG9yIiwgd2ViSW5zcGVjdG9yT2JqKSkK
LSAgICAgICAgcmV0dXJuOwotICAgIHNldEZyb250ZW5kUHJveHlPYmplY3QobV9mcm9udGVuZFNj
cmlwdFN0YXRlLCB3ZWJJbnNwZWN0b3JPYmopOwotCi0jaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVC
VUdHRVIpCisgICAgQVNTRVJUKGZyb250ZW5kKTsKKyAgICBtX29wZW5pbmdGcm9udGVuZCA9IGZh
bHNlOworICAgIG1fZnJvbnRlbmQgPSBmcm9udGVuZDsKKyAgICByZWxlYXNlRE9NQWdlbnQoKTsK
KyAgICBtX2RvbUFnZW50ID0gSW5zcGVjdG9yRE9NQWdlbnQ6OmNyZWF0ZShtX2Zyb250ZW5kLmdl
dCgpKTsKKyAgICBpZiAobV90aW1lbGluZUFnZW50KQorICAgICAgICBtX3RpbWVsaW5lQWdlbnQt
PnJlc2V0RnJvbnRlbmRQcm94eU9iamVjdChtX2Zyb250ZW5kLmdldCgpKTsKKyNpZiBFTkFCTEUo
SkFWQVNDUklQVF9ERUJVR0dFUikgJiYgVVNFKEpTQykKICAgICBTdHJpbmcgZGVidWdnZXJFbmFi
bGVkID0gc2V0dGluZyhkZWJ1Z2dlckVuYWJsZWRTZXR0aW5nTmFtZSk7CiAgICAgaWYgKGRlYnVn
Z2VyRW5hYmxlZCA9PSAidHJ1ZSIpCiAgICAgICAgIGVuYWJsZURlYnVnZ2VyKCk7CkBAIC01NjYs
NDggKzQ1MSwzNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNjcmlwdE9iamVjdFJlYWR5
KCkKICAgICAgICAgZW5hYmxlUHJvZmlsZXIoKTsKICNlbmRpZgogCi0gICAgLy8gSWYgbm8gcHJl
ZmVyZW5jZSBpcyBzZXQgLSBkZWZhdWx0IHRvIGFuIGF0dGFjaGVkIHdpbmRvdy4gVGhpcyBpcyBp
bXBvcnRhbnQgZm9yIGluc3BlY3RvciBMYXlvdXRUZXN0cy4KLSAgICBTdHJpbmcgc2hvdWxkQXR0
YWNoVmFsdWUgPSBzZXR0aW5nKGluc3BlY3RvclN0YXJ0c0F0dGFjaGVkU2V0dGluZ05hbWUoKSk7
Ci0gICAgYm9vbCBzaG91bGRBdHRhY2ggPSBzaG91bGRBdHRhY2hWYWx1ZSAhPSAiZmFsc2UiOwor
ICAgIC8vLy8vIGZyb250ZW5kUmVhZHkKKyAgICBwb3B1bGF0ZVNjcmlwdE9iamVjdHMoKTsKICAg
ICAKLSAgICBpZiAoc2hvdWxkQXR0YWNoICYmICFjYW5BdHRhY2hXaW5kb3coKSkKLSAgICAgICAg
c2hvdWxkQXR0YWNoID0gZmFsc2U7Ci0KLSAgICAvLyBNYWtlIHN1cmUgb3VyIHdpbmRvdyBpcyB2
aXNpYmxlIG5vdyB0aGF0IHRoZSBwYWdlIGxvYWRlZAotICAgIHNldFdpbmRvd1Zpc2libGUodHJ1
ZSwgc2hvdWxkQXR0YWNoKTsKLQotICAgIG1fY2xpZW50LT5pbnNwZWN0b3JXaW5kb3dPYmplY3RD
bGVhcmVkKCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0RnJvbnRlbmRQcm94
eU9iamVjdChTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIFNjcmlwdE9iamVjdCB3ZWJJbnNwZWN0
b3JPYmosIFNjcmlwdE9iamVjdCkKLXsKLSAgICBtX2Zyb250ZW5kU2NyaXB0U3RhdGUgPSBzY3Jp
cHRTdGF0ZTsKLSAgICBtX2Zyb250ZW5kLnNldChuZXcgSW5zcGVjdG9yRnJvbnRlbmQodGhpcywg
d2ViSW5zcGVjdG9yT2JqKSk7Ci0gICAgcmVsZWFzZURPTUFnZW50KCk7Ci0gICAgbV9kb21BZ2Vu
dCA9IEluc3BlY3RvckRPTUFnZW50OjpjcmVhdGUobV9mcm9udGVuZC5nZXQoKSk7Ci0gICAgaWYg
KG1fdGltZWxpbmVBZ2VudCkKLSAgICAgICAgbV90aW1lbGluZUFnZW50LT5yZXNldEZyb250ZW5k
UHJveHlPYmplY3QobV9mcm9udGVuZC5nZXQoKSk7CisgICAgaWYgKG1fc2hvd0FmdGVyVmlzaWJs
ZSA9PSBDdXJyZW50UGFuZWwpIHsKKyAgICAgICAgU3RyaW5nIGxhc3RBY3RpdmVQYW5lbFNldHRp
bmcgPSBzZXR0aW5nKGxhc3RBY3RpdmVQYW5lbFNldHRpbmdOYW1lKTsKKyAgICAgICAgbV9zaG93
QWZ0ZXJWaXNpYmxlID0gc3BlY2lhbFBhbmVsRm9ySlNOYW1lKGxhc3RBY3RpdmVQYW5lbFNldHRp
bmcpOworICAgIH0KKyAgICAKKyAgICBpZiAobV9ub2RlVG9Gb2N1cykKKyAgICAgICAgZm9jdXNO
b2RlKCk7CisjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCisgICAgaWYgKG1fYXR0YWNo
RGVidWdnZXJXaGVuU2hvd24pCisgICAgICAgIGVuYWJsZURlYnVnZ2VyKCk7CisjZW5kaWYKKyAg
ICBzaG93UGFuZWwobV9zaG93QWZ0ZXJWaXNpYmxlKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250
cm9sbGVyOjpzaG93KCkKIHsKICAgICBpZiAoIWVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwot
ICAgIAotICAgIGlmICghbV9wYWdlKSB7Ci0gICAgICAgIGlmIChtX2Zyb250ZW5kKQotICAgICAg
ICAgICAgcmV0dXJuOyAvLyBXZSBhcmUgdXNpbmcgY3VzdG9tIGZyb250ZW5kIC0gbm8gbmVlZCB0
byBjcmVhdGUgcGFnZS4KLQotICAgICAgICBtX3BhZ2UgPSBtX2NsaWVudC0+Y3JlYXRlUGFnZSgp
OwotICAgICAgICBpZiAoIW1fcGFnZSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9w
YWdlLT5zZXRQYXJlbnRJbnNwZWN0b3JDb250cm9sbGVyKHRoaXMpOwogCi0gICAgICAgIC8vIHNo
b3dXaW5kb3coKSB3aWxsIGJlIGNhbGxlZCBhZnRlciB0aGUgcGFnZSBsb2FkcyBpbiBzY3JpcHRP
YmplY3RSZWFkeSgpCisgICAgaWYgKG1fb3BlbmluZ0Zyb250ZW5kKQogICAgICAgICByZXR1cm47
CisgICAgCisgICAgaWYgKG1fZnJvbnRlbmQpCisgICAgICAgIG1fZnJvbnRlbmQtPmJyaW5nVG9G
cm9udCgpOworICAgIGVsc2UgeworICAgICAgICBtX29wZW5pbmdGcm9udGVuZCA9IHRydWU7Cisg
ICAgICAgIG1fY2xpZW50LT5vcGVuSW5zcGVjdG9yRnJvbnRlbmQodGhpcyk7CiAgICAgfQotCi0g
ICAgc2hvd1dpbmRvdygpOwogfQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNob3dQYW5l
bChTcGVjaWFsUGFuZWxzIHBhbmVsKQpAQCAtNjMwLDQ5ICs1MDQsNDQgQEAgdm9pZCBJbnNwZWN0
b3JDb250cm9sbGVyOjpzaG93UGFuZWwoU3BlY2lhbFBhbmVscyBwYW5lbCkKIAogdm9pZCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpjbG9zZSgpCiB7Ci0gICAgaWYgKCFlbmFibGVkKCkpCisgICAgaWYg
KCFtX2Zyb250ZW5kKQogICAgICAgICByZXR1cm47Ci0KLSNpZiBFTkFCTEUoSkFWQVNDUklQVF9E
RUJVR0dFUikKLSAgICBzdG9wVXNlckluaXRpYXRlZFByb2ZpbGluZygpOwotICAgIGRpc2FibGVE
ZWJ1Z2dlcigpOwotI2VuZGlmCi0gICAgY2xvc2VXaW5kb3coKTsKLQotICAgIHJlbGVhc2VET01B
Z2VudCgpOwotICAgIG1fZnJvbnRlbmQuc2V0KDApOwotICAgIG1fdGltZWxpbmVBZ2VudCA9IDA7
Ci0gICAgbV9mcm9udGVuZFNjcmlwdFN0YXRlID0gMDsKLSAgICBpZiAobV9wYWdlKSB7Ci0gICAg
ICAgIGlmICghbV9wYWdlLT5tYWluRnJhbWUoKSB8fCAhbV9wYWdlLT5tYWluRnJhbWUoKS0+bG9h
ZGVyKCkgfHwgIW1fcGFnZS0+bWFpbkZyYW1lKCktPmxvYWRlcigpLT5pc0xvYWRpbmcoKSkgewot
ICAgICAgICAgICAgbV9wYWdlLT5zZXRQYXJlbnRJbnNwZWN0b3JDb250cm9sbGVyKDApOwotICAg
ICAgICAgICAgbV9wYWdlID0gMDsKLSAgICAgICAgfQotICAgIH0KKyAgICBtX2Zyb250ZW5kLT5j
bG9zZSgpOwogfQogCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNob3dXaW5kb3coKQordm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaXNjb25uZWN0RnJvbnRlbmQoKQogewotICAgIEFTU0VS
VChlbmFibGVkKCkpOworICAgIGlmICghbV9mcm9udGVuZCkKKyAgICAgICAgcmV0dXJuOworICAg
IG1fZnJvbnRlbmQuY2xlYXIoKTsKIAotICAgIHVuc2lnbmVkIGluc3BlY3RlZFBhZ2VIZWlnaHQg
PSBtX2luc3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCktPnZpc2libGVIZWlnaHQoKTsK
Ky8vLy8vLy8vLy8vLy8gd2lsbENsb3NlRnJvbnRlbmQKKyNpZiBFTkFCTEUoSkFWQVNDUklQVF9E
RUJVR0dFUikKKyAgICAvLyBJZiB0aGUgd2luZG93IGlzIGJlaW5nIGNsb3NlZCB3aXRoIHRoZSBk
ZWJ1Z2dlciBlbmFibGVkLAorICAgIC8vIHJlbWVtYmVyIHRoaXMgc3RhdGUgdG8gcmUtZW5hYmxl
IGRlYnVnZ2VyIG9uIHRoZSBuZXh0IHdpbmRvdworICAgIC8vIG9wZW5pbmcuCisgICAgYm9vbCBk
ZWJ1Z2dlcldhc0VuYWJsZWQgPSBtX2RlYnVnZ2VyRW5hYmxlZDsKKyAgICBkaXNhYmxlRGVidWdn
ZXIoKTsKKyAgICBpZiAoZGVidWdnZXJXYXNFbmFibGVkKQorICAgICAgICBtX2F0dGFjaERlYnVn
Z2VyV2hlblNob3duID0gdHJ1ZTsKKyNlbmRpZgorICAgIHNldFNlYXJjaGluZ0Zvck5vZGUoZmFs
c2UpOworICAgIHJlc2V0U2NyaXB0T2JqZWN0cygpOworICAgIHN0b3BUaW1lbGluZVByb2ZpbGVy
KCk7CiAKLSAgICBtX2NsaWVudC0+c2hvd1dpbmRvdygpOworICAgIG1fc2hvd0FmdGVyVmlzaWJs
ZSA9IEN1cnJlbnRQYW5lbDsKKy8vLy8vLy8vLy8vLy8vLy8KIAotICAgIFN0cmluZyBhdHRhY2hl
ZEhlaWdodCA9IHNldHRpbmcoaW5zcGVjdG9yQXR0YWNoZWRIZWlnaHROYW1lKTsKLSAgICBib29s
IHN1Y2Nlc3MgPSB0cnVlOwotICAgIGludCBoZWlnaHQgPSBhdHRhY2hlZEhlaWdodC50b0ludCgm
c3VjY2Vzcyk7Ci0gICAgdW5zaWduZWQgcHJlZmVycmVkSGVpZ2h0ID0gc3VjY2VzcyA/IGhlaWdo
dCA6IGRlZmF1bHRBdHRhY2hlZEhlaWdodDsKKyAgICBoaWRlSGlnaGxpZ2h0KCk7CiAKLSAgICAv
LyBUaGlzIGNhbGwgbWlnaHQgbm90IGdvIHRocm91Z2ggKGlmIHRoZSB3aW5kb3cgc3RhcnRzIG91
dCBkZXRhY2hlZCksIGJ1dCBpZiB0aGUgd2luZG93IGlzIGluaXRpYWxseSBjcmVhdGVkIGF0dGFj
aGVkLAotICAgIC8vIEluc3BlY3RvckNvbnRyb2xsZXI6OmF0dGFjaFdpbmRvdyBpcyBuZXZlciBj
YWxsZWQsIHNvIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRvIHNldCB0aGUgYXR0YWNoZWRXaW5kb3dI
ZWlnaHQuCi0gICAgLy8gRklYTUU6IENsZWFuIHVwIGNvZGUgc28gd2Ugb25seSBoYXZlIHRvIGNh
bGwgc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQgaW4gSW5zcGVjdG9yQ29udHJvbGxlcjo6YXR0YWNo
V2luZG93Ci0gICAgbV9jbGllbnQtPnNldEF0dGFjaGVkV2luZG93SGVpZ2h0KGNvbnN0cmFpbmVk
QXR0YWNoZWRXaW5kb3dIZWlnaHQocHJlZmVycmVkSGVpZ2h0LCBpbnNwZWN0ZWRQYWdlSGVpZ2h0
KSk7Ci19CisjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCisgICAgc3RvcFVzZXJJbml0
aWF0ZWRQcm9maWxpbmcoKTsKKy8vICAgIGRpc2FibGVEZWJ1Z2dlcigpOworI2VuZGlmCiAKLXZv
aWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6Y2xvc2VXaW5kb3coKQotewotICAgIG1fY2xpZW50LT5j
bG9zZVdpbmRvdygpOworICAgIHJlbGVhc2VET01BZ2VudCgpOworLy8gICAgbV9mcm9udGVuZC5j
bGVhcigpOworICAgIG1fdGltZWxpbmVBZ2VudC5jbGVhcigpOwogfQogCiB2b2lkIEluc3BlY3Rv
ckNvbnRyb2xsZXI6OnJlbGVhc2VET01BZ2VudCgpCkBAIC02ODEsNyArNTUwLDcgQEAgdm9pZCBJ
bnNwZWN0b3JDb250cm9sbGVyOjpyZWxlYXNlRE9NQWdlbnQoKQogICAgIC8vIG5vIHJlZmVyZW5j
ZXMgdG8gdGhlIERPTSBhZ2VudCBmcm9tIHRoZSBET00gdHJlZS4KICAgICBpZiAobV9kb21BZ2Vu
dCkKICAgICAgICAgbV9kb21BZ2VudC0+cmVzZXQoKTsKLSAgICBtX2RvbUFnZW50ID0gMDsKKyAg
ICBtX2RvbUFnZW50LmNsZWFyKCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cG9w
dWxhdGVTY3JpcHRPYmplY3RzKCkKQEAgLTcxNSw3ICs1ODQsNyBAQCB2b2lkIEluc3BlY3RvckNv
bnRyb2xsZXI6OnBvcHVsYXRlU2NyaXB0T2JqZWN0cygpCiAgICAgICAgIG1fZnJvbnRlbmQtPnVw
ZGF0ZUNvbnNvbGVNZXNzYWdlRXhwaXJlZENvdW50KG1fZXhwaXJlZENvbnNvbGVNZXNzYWdlQ291
bnQpOwogICAgIHVuc2lnbmVkIG1lc3NhZ2VDb3VudCA9IG1fY29uc29sZU1lc3NhZ2VzLnNpemUo
KTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWVzc2FnZUNvdW50OyArK2kpCi0gICAg
ICAgIG1fY29uc29sZU1lc3NhZ2VzW2ldLT5hZGRUb0NvbnNvbGUobV9mcm9udGVuZC5nZXQoKSk7
CisgICAgICAgIG1fY29uc29sZU1lc3NhZ2VzW2ldLT5hZGRUb0Zyb250ZW5kKG1fZnJvbnRlbmQu
Z2V0KCksIG1faW5qZWN0ZWRTY3JpcHRIb3N0LmdldCgpKTsKIAogI2lmIEVOQUJMRShKQVZBU0NS
SVBUX0RFQlVHR0VSKQogICAgIGlmIChtX2RlYnVnZ2VyRW5hYmxlZCkKQEAgLTc1MCwxMCArNjE5
LDYgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZXNldFNjcmlwdE9iamVjdHMoKQogICAg
IGlmICghbV9mcm9udGVuZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVzb3VyY2VzTWFwOjpp
dGVyYXRvciByZXNvdXJjZXNFbmQgPSBtX3Jlc291cmNlcy5lbmQoKTsKLSAgICBmb3IgKFJlc291
cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSByZXNvdXJj
ZXNFbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPnJlbGVhc2VTY3JpcHRPYmplY3QobV9m
cm9udGVuZC5nZXQoKSwgZmFsc2UpOwotCiAjaWYgRU5BQkxFKERBVEFCQVNFKQogICAgIERhdGFi
YXNlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBkYXRhYmFzZXNFbmQgPSBtX2RhdGFiYXNlUmVzb3Vy
Y2VzLmVuZCgpOwogICAgIGZvciAoRGF0YWJhc2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGl0ID0g
bV9kYXRhYmFzZVJlc291cmNlcy5iZWdpbigpOyBpdCAhPSBkYXRhYmFzZXNFbmQ7ICsraXQpCkBA
IC03ODcsOCArNjUyLDggQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpwcnVuZVJlc291cmNl
cyhSZXNvdXJjZXNNYXAqIHJlc291cmNlTWFwLCBEb2N1bWVudExvYWQKIAogICAgICAgICBpZiAo
IWxvYWRlclRvS2VlcCB8fCAhcmVzb3VyY2UtPmlzU2FtZUxvYWRlcihsb2FkZXJUb0tlZXApKSB7
CiAgICAgICAgICAgICByZW1vdmVSZXNvdXJjZShyZXNvdXJjZSk7Ci0gICAgICAgICAgICBpZiAo
d2luZG93VmlzaWJsZSgpKQotICAgICAgICAgICAgICAgIHJlc291cmNlLT5yZWxlYXNlU2NyaXB0
T2JqZWN0KG1fZnJvbnRlbmQuZ2V0KCksIHRydWUpOworICAgICAgICAgICAgaWYgKG1fZnJvbnRl
bmQpCisgICAgICAgICAgICAgICAgcmVzb3VyY2UtPnJlbGVhc2VTY3JpcHRPYmplY3QobV9mcm9u
dGVuZC5nZXQoKSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC04MDEsNyArNjY2LDggQEAgdm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRDb21taXRMb2FkKERvY3VtZW50TG9hZGVyKiBsb2Fk
ZXIpCiAgICAgQVNTRVJUKG1faW5zcGVjdGVkUGFnZSk7CiAKICAgICBpZiAobG9hZGVyLT5mcmFt
ZSgpID09IG1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCkpIHsKLSAgICAgICAgbV9jbGllbnQt
Pmluc3BlY3RlZFVSTENoYW5nZWQobG9hZGVyLT51cmwoKS5zdHJpbmcoKSk7CisgICAgICAgIGlm
IChtX2Zyb250ZW5kKQorICAgICAgICAgICAgbV9mcm9udGVuZC0+aW5zcGVjdGVkVVJMQ2hhbmdl
ZChsb2FkZXItPnVybCgpLnN0cmluZygpKTsKIAogICAgICAgICBtX2luamVjdGVkU2NyaXB0SG9z
dC0+ZGlzY2FyZEluamVjdGVkU2NyaXB0cygpOwogICAgICAgICBjbGVhckNvbnNvbGVNZXNzYWdl
cygpOwpAQCAtMTQzNywxNiArMTMwMyw2IEBAIEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZSog
SW5zcGVjdG9yQ29udHJvbGxlcjo6Z2V0RE9NU3RvcmFnZVJlc291cmNlRm9ySWQoaW50CiB9CiAj
ZW5kaWYKIAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjptb3ZlV2luZG93QnkoZmxvYXQgeCwg
ZmxvYXQgeSkgY29uc3QKLXsKLSAgICBpZiAoIW1fcGFnZSB8fCAhZW5hYmxlZCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBGbG9hdFJlY3QgZnJhbWVSZWN0ID0gbV9wYWdlLT5jaHJvbWUoKS0+
d2luZG93UmVjdCgpOwotICAgIGZyYW1lUmVjdC5tb3ZlKHgsIHkpOwotICAgIG1fcGFnZS0+Y2hy
b21lKCktPnNldFdpbmRvd1JlY3QoZnJhbWVSZWN0KTsKLX0KLQogI2lmIEVOQUJMRShKQVZBU0NS
SVBUX0RFQlVHR0VSKQogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjphZGRQcm9maWxlKFBhc3NS
ZWZQdHI8U2NyaXB0UHJvZmlsZT4gcHJwUHJvZmlsZSwgdW5zaWduZWQgbGluZU51bWJlciwgY29u
c3QgU3RyaW5nJiBzb3VyY2VVUkwpCiB7CkBAIC0xNDk5LDcgKzEzNTUsNyBAQCB2b2lkIEluc3Bl
Y3RvckNvbnRyb2xsZXI6OmdldFByb2ZpbGUobG9uZyBjYWxsSWQsIHVuc2lnbmVkIHVpZCkKICAg
ICBQcm9maWxlc01hcDo6aXRlcmF0b3IgaXQgPSBtX3Byb2ZpbGVzLmZpbmQodWlkKTsKICNpZiBV
U0UoSlNDKQogICAgIGlmIChpdCAhPSBtX3Byb2ZpbGVzLmVuZCgpKQotICAgICAgICBtX2Zyb250
ZW5kLT5kaWRHZXRQcm9maWxlKGNhbGxJZCwgdG9KUyhtX2Zyb250ZW5kU2NyaXB0U3RhdGUsIGl0
LT5zZWNvbmQuZ2V0KCkpKTsKKyAgICAgICAgbV9mcm9udGVuZC0+ZGlkR2V0UHJvZmlsZShjYWxs
SWQsIHRvSlMobV9mcm9udGVuZC0+c2NyaXB0U3RhdGUoKSwgaXQtPnNlY29uZC5nZXQoKSkpOwog
I2VuZGlmCiB9CiAKQEAgLTE2MzYsNyArMTQ5Miw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxl
cjo6ZW5hYmxlRGVidWdnZXIoKQogICAgIGlmIChtX2RlYnVnZ2VyRW5hYmxlZCkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgaWYgKCFtX2Zyb250ZW5kU2NyaXB0U3RhdGUgfHwgIW1fZnJvbnRlbmQp
CisgICAgaWYgKCFtX2Zyb250ZW5kKQogICAgICAgICBtX2F0dGFjaERlYnVnZ2VyV2hlblNob3du
ID0gdHJ1ZTsKICAgICBlbHNlIHsKICAgICAgICAgbV9mcm9udGVuZC0+YXR0YWNoRGVidWdnZXJX
aGVuU2hvd24oKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRy
b2xsZXIuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAppbmRleCBl
YWQ0ZDVlLi4wY2E5ZDE3IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JD
b250cm9sbGVyLmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5o
CkBAIC02Niw3ICs2Niw3IEBAIGNsYXNzIEluamVjdGVkU2NyaXB0SG9zdDsKIGNsYXNzIEluc3Bl
Y3RvckJhY2tlbmQ7CiBjbGFzcyBJbnNwZWN0b3JDbGllbnQ7CiBjbGFzcyBJbnNwZWN0b3JGcm9u
dGVuZDsKLWNsYXNzIEluc3BlY3RvckZyb250ZW5kSG9zdDsKK2NsYXNzIEluc3BlY3RvckZyb250
ZW5kQ2xpZW50OwogY2xhc3MgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDsKIGNsYXNzIEphdmFTY3Jp
cHRDYWxsRnJhbWU7CiBjbGFzcyBLVVJMOwpAQCAtMTE2LDExICsxMTYsOSBAQCBwdWJsaWM6CiAg
ICAgfkluc3BlY3RvckNvbnRyb2xsZXIoKTsKIAogICAgIEluc3BlY3RvckJhY2tlbmQqIGluc3Bl
Y3RvckJhY2tlbmQoKSB7IHJldHVybiBtX2luc3BlY3RvckJhY2tlbmQuZ2V0KCk7IH0KLSAgICBJ
bnNwZWN0b3JGcm9udGVuZEhvc3QqIGluc3BlY3RvckZyb250ZW5kSG9zdCgpIHsgcmV0dXJuIG1f
aW5zcGVjdG9yRnJvbnRlbmRIb3N0LmdldCgpOyB9CiAgICAgSW5qZWN0ZWRTY3JpcHRIb3N0KiBp
bmplY3RlZFNjcmlwdEhvc3QoKSB7IHJldHVybiBtX2luamVjdGVkU2NyaXB0SG9zdC5nZXQoKTsg
fQogCiAgICAgdm9pZCBpbnNwZWN0ZWRQYWdlRGVzdHJveWVkKCk7Ci0gICAgdm9pZCBwYWdlRGVz
dHJveWVkKCkgeyBtX3BhZ2UgPSAwOyB9CiAKICAgICBib29sIGVuYWJsZWQoKSBjb25zdDsKIApA
QCAtMTM2LDI4ICsxMzQsMjQgQEAgcHVibGljOgogICAgIHZvaWQgc2hvdygpOwogICAgIHZvaWQg
c2hvd1BhbmVsKFNwZWNpYWxQYW5lbHMpOwogICAgIHZvaWQgY2xvc2UoKTsKLQotICAgIGJvb2wg
d2luZG93VmlzaWJsZSgpOwotICAgIHZvaWQgc2V0V2luZG93VmlzaWJsZShib29sIHZpc2libGUg
PSB0cnVlLCBib29sIGF0dGFjaGVkID0gZmFsc2UpOworICAgIHZvaWQgZGlzY29ubmVjdEZyb250
ZW5kKCk7CiAKICAgICB2b2lkIGFkZE1lc3NhZ2VUb0NvbnNvbGUoTWVzc2FnZVNvdXJjZSwgTWVz
c2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwgU2NyaXB0Q2FsbFN0YWNrKik7CiAgICAgdm9pZCBhZGRN
ZXNzYWdlVG9Db25zb2xlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWws
IGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5n
JiBzb3VyY2VJRCk7CiAgICAgdm9pZCBjbGVhckNvbnNvbGVNZXNzYWdlcygpOwogICAgIGNvbnN0
IFZlY3RvcjxDb25zb2xlTWVzc2FnZSo+JiBjb25zb2xlTWVzc2FnZXMoKSBjb25zdCB7IHJldHVy
biBtX2NvbnNvbGVNZXNzYWdlczsgfQogCi0gICAgYm9vbCBjYW5BdHRhY2hXaW5kb3coKSBjb25z
dDsKLSAgICB2b2lkIGF0dGFjaFdpbmRvdygpOwotICAgIHZvaWQgZGV0YWNoV2luZG93KCk7Ci0K
ICAgICBib29sIHNlYXJjaGluZ0Zvck5vZGVJblBhZ2UoKSBjb25zdCB7IHJldHVybiBtX3NlYXJj
aGluZ0Zvck5vZGU7IH0KICAgICB2b2lkIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KGNvbnN0IEhp
dFRlc3RSZXN1bHQmLCB1bnNpZ25lZCBtb2RpZmllckZsYWdzKTsKICAgICB2b2lkIGhhbmRsZU1v
dXNlUHJlc3NPbk5vZGUoTm9kZSopOwogCisgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENs
aWVudChQYXNzT3duUHRyPEluc3BlY3RvckZyb250ZW5kQ2xpZW50PiBjbGllbnQpOworICAgIGJv
b2wgaGFzSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQoKSBjb25zdCB7IHJldHVybiBtX2luc3BlY3Rv
ckZyb250ZW5kQ2xpZW50OyB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIAogICAgIHZvaWQgaW5zcGVjdGVkV2luZG93U2NyaXB0T2JqZWN0
Q2xlYXJlZChGcmFtZSopOwotICAgIHZvaWQgd2luZG93U2NyaXB0T2JqZWN0QXZhaWxhYmxlKCk7
CiAKLSAgICB2b2lkIHNldEZyb250ZW5kUHJveHlPYmplY3QoU2NyaXB0U3RhdGUqIHN0YXRlLCBT
Y3JpcHRPYmplY3Qgd2ViSW5zcGVjdG9yT2JqLCBTY3JpcHRPYmplY3QgaW5qZWN0ZWRTY3JpcHRP
YmogPSBTY3JpcHRPYmplY3QoKSk7Ci0gICAgU2NyaXB0U3RhdGUqIGZyb250ZW5kU2NyaXB0U3Rh
dGUoKSBjb25zdCB7IHJldHVybiBtX2Zyb250ZW5kU2NyaXB0U3RhdGU7IH0KKyAgICBib29sIHdp
bmRvd1Zpc2libGUoKTsKKyAgICB2b2lkIHNldEZyb250ZW5kKFBhc3NPd25QdHI8SW5zcGVjdG9y
RnJvbnRlbmQ+KTsKIAogICAgIHZvaWQgcG9wdWxhdGVTY3JpcHRPYmplY3RzKCk7CiAgICAgdm9p
ZCByZXNldFNjcmlwdE9iamVjdHMoKTsKQEAgLTI2MywxOSArMjU3LDEzIEBAIHByaXZhdGU6CiAg
ICAgc3RhdGljIGNvbnN0IFN0cmluZyYgZnJvbnRlbmRTZXR0aW5nc1NldHRpbmdOYW1lKCk7CiAK
ICAgICBmcmllbmQgY2xhc3MgSW5zcGVjdG9yQmFja2VuZDsKLSAgICBmcmllbmQgY2xhc3MgSW5z
cGVjdG9yRnJvbnRlbmRIb3N0OwogICAgIGZyaWVuZCBjbGFzcyBJbmplY3RlZFNjcmlwdEhvc3Q7
CiAKICAgICAvLyBGb2xsb3dpbmcgYXJlIHVzZWQgZnJvbSBJbnNwZWN0b3JCYWNrZW5kIGFuZCBp
bnRlcm5hbGx5LgotCiAgICAgdm9pZCBzZXRTZWFyY2hpbmdGb3JOb2RlKGJvb2wgZW5hYmxlZCk7
CiAKLSAgICB2b2lkIHNjcmlwdE9iamVjdFJlYWR5KCk7Ci0gICAgdm9pZCBtb3ZlV2luZG93Qnko
ZmxvYXQgeCwgZmxvYXQgeSkgY29uc3Q7Ci0gICAgdm9pZCBzZXRBdHRhY2hlZFdpbmRvdyhib29s
KTsKLSAgICB2b2lkIHNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCk7Cisg
ICAgLy8gRm9sbG93aW5nIGFyZSB1c2VkIGZyb20gSW5zcGVjdG9yQmFja2VuZCBhbmQgaW50ZXJu
YWxseS4KICAgICB2b2lkIHN0b3JlTGFzdEFjdGl2ZVBhbmVsKGNvbnN0IFN0cmluZyYgcGFuZWxO
YW1lKTsKLSAgICB2b2lkIGNsb3NlV2luZG93KCk7CiAgICAgSW5zcGVjdG9yRE9NQWdlbnQqIGRv
bUFnZW50KCkgeyByZXR1cm4gbV9kb21BZ2VudC5nZXQoKTsgfQogICAgIHZvaWQgcmVsZWFzZURP
TUFnZW50KCk7CiAKQEAgLTMxNiw4ICszMDQsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgcHJ1bmVS
ZXNvdXJjZXMoUmVzb3VyY2VzTWFwKiwgRG9jdW1lbnRMb2FkZXIqIGxvYWRlclRvS2VlcCA9IDAp
OwogICAgIHZvaWQgcmVtb3ZlQWxsUmVzb3VyY2VzKFJlc291cmNlc01hcCogbWFwKSB7IHBydW5l
UmVzb3VyY2VzKG1hcCk7IH0KIAotICAgIHZvaWQgc2hvd1dpbmRvdygpOwotCiAgICAgYm9vbCBp
c01haW5SZXNvdXJjZUxvYWRlcihEb2N1bWVudExvYWRlciogbG9hZGVyLCBjb25zdCBLVVJMJiBy
ZXF1ZXN0VXJsKTsKIAogICAgIFNwZWNpYWxQYW5lbHMgc3BlY2lhbFBhbmVsRm9ySlNOYW1lKGNv
bnN0IFN0cmluZyYgcGFuZWxOYW1lKTsKQEAgLTMyNiwxMCArMzEyLDExIEBAIHByaXZhdGU6CiAK
ICAgICBQYWdlKiBtX2luc3BlY3RlZFBhZ2U7CiAgICAgSW5zcGVjdG9yQ2xpZW50KiBtX2NsaWVu
dDsKKyAgICBPd25QdHI8SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ+IG1faW5zcGVjdG9yRnJvbnRl
bmRDbGllbnQ7CisgICAgYm9vbCBtX29wZW5pbmdGcm9udGVuZDsKICAgICBPd25QdHI8SW5zcGVj
dG9yRnJvbnRlbmQ+IG1fZnJvbnRlbmQ7CiAgICAgUmVmUHRyPEluc3BlY3RvckRPTUFnZW50PiBt
X2RvbUFnZW50OwogICAgIE93blB0cjxJbnNwZWN0b3JUaW1lbGluZUFnZW50PiBtX3RpbWVsaW5l
QWdlbnQ7Ci0gICAgUGFnZSogbV9wYWdlOwogICAgIFJlZlB0cjxOb2RlPiBtX25vZGVUb0ZvY3Vz
OwogICAgIFJlZlB0cjxJbnNwZWN0b3JSZXNvdXJjZT4gbV9tYWluUmVzb3VyY2U7CiAgICAgUmVz
b3VyY2VzTWFwIG1fcmVzb3VyY2VzOwpAQCAtMzQ1LDggKzMzMiw2IEBAIHByaXZhdGU6CiAjaWYg
RU5BQkxFKERPTV9TVE9SQUdFKQogICAgIERPTVN0b3JhZ2VSZXNvdXJjZXNNYXAgbV9kb21TdG9y
YWdlUmVzb3VyY2VzOwogI2VuZGlmCi0gICAgU2NyaXB0U3RhdGUqIG1fZnJvbnRlbmRTY3JpcHRT
dGF0ZTsKLSAgICBib29sIG1fd2luZG93VmlzaWJsZTsKICAgICBTcGVjaWFsUGFuZWxzIG1fc2hv
d0FmdGVyVmlzaWJsZTsKICAgICBSZWZQdHI8Tm9kZT4gbV9oaWdobGlnaHRlZE5vZGU7CiAgICAg
dW5zaWduZWQgbV9ncm91cExldmVsOwpAQCAtMzU1LDcgKzM0MCw2IEBAIHByaXZhdGU6CiAgICAg
Ym9vbCBtX3Jlc291cmNlVHJhY2tpbmdFbmFibGVkOwogICAgIGJvb2wgbV9yZXNvdXJjZVRyYWNr
aW5nU2V0dGluZ3NMb2FkZWQ7CiAgICAgUmVmUHRyPEluc3BlY3RvckJhY2tlbmQ+IG1faW5zcGVj
dG9yQmFja2VuZDsKLSAgICBSZWZQdHI8SW5zcGVjdG9yRnJvbnRlbmRIb3N0PiBtX2luc3BlY3Rv
ckZyb250ZW5kSG9zdDsKICAgICBSZWZQdHI8SW5qZWN0ZWRTY3JpcHRIb3N0PiBtX2luamVjdGVk
U2NyaXB0SG9zdDsKIAogICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gU2V0dGlu
Z3M7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5jcHAg
Yi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5jcHAKaW5kZXggNTRhNDQxNC4u
NzRiZDhhMiAxMDA3NTUKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQu
Y3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmNwcApAQCAtNDks
OSArNDksOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUluc3BlY3RvckZyb250ZW5kOjpJ
bnNwZWN0b3JGcm9udGVuZChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVy
LCBTY3JpcHRPYmplY3Qgd2ViSW5zcGVjdG9yKQotICAgIDogbV9pbnNwZWN0b3JDb250cm9sbGVy
KGluc3BlY3RvckNvbnRyb2xsZXIpCi0gICAgLCBtX3dlYkluc3BlY3Rvcih3ZWJJbnNwZWN0b3Ip
CitJbnNwZWN0b3JGcm9udGVuZDo6SW5zcGVjdG9yRnJvbnRlbmQoU2NyaXB0T2JqZWN0IHdlYklu
c3BlY3RvcikKKyAgICA6IG1fd2ViSW5zcGVjdG9yKHdlYkluc3BlY3RvcikKIHsKIH0KIApAQCAt
NjAsNiArNTksMTggQEAgSW5zcGVjdG9yRnJvbnRlbmQ6On5JbnNwZWN0b3JGcm9udGVuZCgpCiAg
ICAgbV93ZWJJbnNwZWN0b3IgPSBTY3JpcHRPYmplY3QoKTsKIH0KIAordm9pZCBJbnNwZWN0b3JG
cm9udGVuZDo6Y2xvc2UoKQoreworICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3dl
Ykluc3BlY3RvciwgImNsb3NlIik7CisgICAgZnVuY3Rpb24uY2FsbCgpOworfQorCit2b2lkIElu
c3BlY3RvckZyb250ZW5kOjppbnNwZWN0ZWRQYWdlRGVzdHJveWVkKCkKK3sKKyAgICBTY3JpcHRG
dW5jdGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJbnNwZWN0b3IsICJpbnNwZWN0ZWRQYWdlRGVzdHJv
eWVkIik7CisgICAgZnVuY3Rpb24uY2FsbCgpOworfQorCiBTY3JpcHRBcnJheSBJbnNwZWN0b3JG
cm9udGVuZDo6bmV3U2NyaXB0QXJyYXkoKQogewogICAgIHJldHVybiBTY3JpcHRBcnJheTo6Y3Jl
YXRlTmV3KHNjcmlwdFN0YXRlKCkpOwpAQCAtOTEsNyArMTAyLDcgQEAgdm9pZCBJbnNwZWN0b3JG
cm9udGVuZDo6dXBkYXRlQ29uc29sZU1lc3NhZ2VFeHBpcmVkQ291bnQodW5zaWduZWQgY291bnQp
CiAgICAgZnVuY3Rpb24uY2FsbCgpOwogfQogCi12b2lkIEluc3BlY3RvckZyb250ZW5kOjphZGRD
b25zb2xlTWVzc2FnZShjb25zdCBTY3JpcHRPYmplY3QmIG1lc3NhZ2VPYmosIGNvbnN0IFZlY3Rv
cjxTY3JpcHRTdHJpbmc+JiBmcmFtZXMsIFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgY29uc3Qg
VmVjdG9yPFNjcmlwdFZhbHVlPiBhcmd1bWVudHMsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3Zv
aWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmFkZENvbnNvbGVNZXNzYWdlKGNvbnN0IFNjcmlwdE9iamVj
dCYgbWVzc2FnZU9iaiwgY29uc3QgVmVjdG9yPFNjcmlwdFN0cmluZz4mIGZyYW1lcywgY29uc3Qg
VmVjdG9yPFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+ID4mIGFyZ3VtZW50cywgY29uc3Qg
U3RyaW5nJiBtZXNzYWdlKQogewogICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3dl
Ykluc3BlY3RvciwgImRpc3BhdGNoIik7IAogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KCJh
ZGRDb25zb2xlTWVzc2FnZSIpOwpAQCAtMTAwLDEwICsxMTEsOCBAQCB2b2lkIEluc3BlY3RvckZy
b250ZW5kOjphZGRDb25zb2xlTWVzc2FnZShjb25zdCBTY3JpcHRPYmplY3QmIG1lc3NhZ2VPYmos
IGNvbnN0CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmcmFtZXMuc2l6ZSgpOyAr
K2kpCiAgICAgICAgICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChmcmFtZXNbaV0pOwogICAg
IH0gZWxzZSBpZiAoIWFyZ3VtZW50cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgSW5qZWN0ZWRTY3Jp
cHQgaW5qZWN0ZWRTY3JpcHQgPSBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluamVjdGVkU2NyaXB0
SG9zdCgpLT5pbmplY3RlZFNjcmlwdEZvcihzY3JpcHRTdGF0ZSk7CiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBhcmd1bWVudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIFJl
ZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWRWYWx1ZSA9IGluamVjdGVkU2Ny
aXB0LndyYXBGb3JDb25zb2xlKGFyZ3VtZW50c1tpXSk7Ci0gICAgICAgICAgICBTY3JpcHRWYWx1
ZSBzY3JpcHRWYWx1ZSA9IFNjcmlwdFZhbHVlOjpkZXNlcmlhbGl6ZSh0aGlzLT5zY3JpcHRTdGF0
ZSgpLCBzZXJpYWxpemVkVmFsdWUuZ2V0KCkpOworICAgICAgICAgICAgU2NyaXB0VmFsdWUgc2Ny
aXB0VmFsdWUgPSBTY3JpcHRWYWx1ZTo6ZGVzZXJpYWxpemUoc2NyaXB0U3RhdGUoKSwgYXJndW1l
bnRzW2ldLmdldCgpKTsKICAgICAgICAgICAgIGlmIChzY3JpcHRWYWx1ZS5oYXNOb1ZhbHVlKCkp
IHsKICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgICAg
ICByZXR1cm47CkBAIC0yMjAsNiArMjI5LDE5IEBAIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OnJl
c2V0KCkKICAgICBjYWxsU2ltcGxlRnVuY3Rpb24oInJlc2V0Iik7CiB9CiAKK3ZvaWQgSW5zcGVj
dG9yRnJvbnRlbmQ6OmJyaW5nVG9Gcm9udCgpCit7CisgICAgY2FsbFNpbXBsZUZ1bmN0aW9uKCJi
cmluZ1RvRnJvbnQiKTsKK30KKwordm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6aW5zcGVjdGVkVVJM
Q2hhbmdlZChjb25zdCBTdHJpbmcmIHVybCkKK3sKKyAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVu
Y3Rpb24obV93ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIpOworICAgIGZ1bmN0aW9uLmFwcGVuZEFy
Z3VtZW50KCJpbnNwZWN0ZWRVUkxDaGFuZ2VkIik7CisgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1l
bnQodXJsKTsKKyAgICBmdW5jdGlvbi5jYWxsKCk7Cit9CisKIHZvaWQgSW5zcGVjdG9yRnJvbnRl
bmQ6OnJlc291cmNlVHJhY2tpbmdXYXNFbmFibGVkKCkKIHsKICAgICBjYWxsU2ltcGxlRnVuY3Rp
b24oInJlc291cmNlVHJhY2tpbmdXYXNFbmFibGVkIik7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RnJvbnRlbmQuaAppbmRleCA2MWMxYThjLi4xN2M0YzhiIDEwMDY0NAotLS0gYS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckZyb250ZW5kLmgKQEAgLTQ5LDggKzQ5LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
ICAgIGNsYXNzIEluc3BlY3RvckZyb250ZW5kIDogcHVibGljIE5vbmNvcHlhYmxlIHsKICAgICBw
dWJsaWM6Ci0gICAgICAgIEluc3BlY3RvckZyb250ZW5kKEluc3BlY3RvckNvbnRyb2xsZXIqIGlu
c3BlY3RvckNvbnRyb2xsZXIsIFNjcmlwdE9iamVjdCB3ZWJJbnNwZWN0b3IpOworICAgICAgICBJ
bnNwZWN0b3JGcm9udGVuZChTY3JpcHRPYmplY3Qgd2ViSW5zcGVjdG9yKTsKICAgICAgICAgfklu
c3BlY3RvckZyb250ZW5kKCk7CisgICAgICAgIAorICAgICAgICB2b2lkIGNsb3NlKCk7CisgICAg
ICAgIHZvaWQgaW5zcGVjdGVkUGFnZURlc3Ryb3llZCgpOwogCiAgICAgICAgIFNjcmlwdEFycmF5
IG5ld1NjcmlwdEFycmF5KCk7CiAgICAgICAgIFNjcmlwdE9iamVjdCBuZXdTY3JpcHRPYmplY3Qo
KTsKQEAgLTYwLDcgKzYzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHBv
cHVsYXRlRnJvbnRlbmRTZXR0aW5ncyhjb25zdCBTdHJpbmcmIHNldHRpbmdzKTsKIAogICAgICAg
ICB2b2lkIHVwZGF0ZUNvbnNvbGVNZXNzYWdlRXhwaXJlZENvdW50KHVuc2lnbmVkIGNvdW50KTsK
LSAgICAgICAgdm9pZCBhZGRDb25zb2xlTWVzc2FnZShjb25zdCBTY3JpcHRPYmplY3QmIG1lc3Nh
Z2VPYmosIGNvbnN0IFZlY3RvcjxTY3JpcHRTdHJpbmc+JiBmcmFtZXMsIFNjcmlwdFN0YXRlKiwg
Y29uc3QgVmVjdG9yPFNjcmlwdFZhbHVlPiBhcmd1bWVudHMsIGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSk7CisgICAgICAgIHZvaWQgYWRkQ29uc29sZU1lc3NhZ2UoY29uc3QgU2NyaXB0T2JqZWN0JiBt
ZXNzYWdlT2JqLCBjb25zdCBWZWN0b3I8U2NyaXB0U3RyaW5nPiYgZnJhbWVzLCBjb25zdCBWZWN0
b3I8UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gPiYgYXJndW1lbnRzLCBjb25zdCBTdHJp
bmcmIG1lc3NhZ2UpOwogICAgICAgICB2b2lkIHVwZGF0ZUNvbnNvbGVNZXNzYWdlUmVwZWF0Q291
bnQodW5zaWduZWQgY291bnQpOwogICAgICAgICB2b2lkIGNsZWFyQ29uc29sZU1lc3NhZ2VzKCk7
CiAKQEAgLTczLDYgKzc2LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHNo
b3dQYW5lbChpbnQgcGFuZWwpOwogICAgICAgICB2b2lkIHBvcHVsYXRlSW50ZXJmYWNlKCk7CiAg
ICAgICAgIHZvaWQgcmVzZXQoKTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgYnJpbmdUb0Zyb250
KCk7CisgICAgICAgIHZvaWQgaW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmKTsKIAog
ICAgICAgICB2b2lkIHJlc291cmNlVHJhY2tpbmdXYXNFbmFibGVkKCk7CiAgICAgICAgIHZvaWQg
cmVzb3VyY2VUcmFja2luZ1dhc0Rpc2FibGVkKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRnJvbnRlbmRDbGllbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4w
NTgzNDZiCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJv
bnRlbmRDbGllbnQuaApAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJbnNwZWN0b3JGcm9udGVuZENs
aWVudF9oCisjZGVmaW5lIEluc3BlY3RvckZyb250ZW5kQ2xpZW50X2gKKworI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDb250ZXh0TWVudUl0
ZW07CitjbGFzcyBFdmVudDsKK2NsYXNzIFN0cmluZzsKKworY2xhc3MgSW5zcGVjdG9yRnJvbnRl
bmRDbGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgfkluc3BlY3RvckZyb250ZW5kQ2xpZW50
KCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgd2luZG93T2JqZWN0Q2xlYXJlZCgpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgZnJvbnRlbmRMb2FkZWQoKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQg
bW92ZVdpbmRvd0J5KGZsb2F0IHgsIGZsb2F0IHkpID0gMDsKKworICAgIHZpcnR1YWwgU3RyaW5n
IGxvY2FsaXplZFN0cmluZ3NVUkwoKSA9IDA7CisgICAgdmlydHVhbCBTdHJpbmcgaGlkZGVuUGFu
ZWxzKCkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGJyaW5nVG9Gcm9udCgpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgY2xvc2VXaW5kb3coKSA9IDA7CisKKyAgICB2aXJ0dWFsIGJvb2wgY2FuQXR0
YWNoV2luZG93KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hXaW5kb3coKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGRldGFjaFdpbmRvdygpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2hh
bmdlQXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQpID0gMDsKKyAgICAKKyAgICB2aXJ0dWFs
IHZvaWQgaW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmKSA9IDA7CisKKyAgICB2aXJ0
dWFsIHZvaWQgc2hvd0NvbnRleHRNZW51KEV2ZW50KiwgY29uc3QgVmVjdG9yPENvbnRleHRNZW51
SXRlbSo+JikgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwu
Y3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg4OGZiZAotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuY3Bw
CkBAIC0wLDAgKzEsMjM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50TG9jYWwuaCIKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNs
dWRlICJDaHJvbWUuaCIKKyNpbmNsdWRlICJDb250ZXh0TWVudS5oIgorI2luY2x1ZGUgIkNvbnRl
eHRNZW51Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIkNvbnRleHRNZW51SXRlbS5oIgorI2luY2x1
ZGUgIkNvbnRleHRNZW51UHJvdmlkZXIuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNs
dWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkluc3BlY3Rv
ckNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZC5oIgorI2luY2x1ZGUg
Ikluc3BlY3RvckZyb250ZW5kSG9zdC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQ
bGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlNjcmlwdEZ1bmN0aW9uQ2FsbC5oIgorI2luY2x1
ZGUgIlNjcmlwdE9iamVjdC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZyb250
ZW5kTWVudVByb3ZpZGVyIDogcHVibGljIENvbnRleHRNZW51UHJvdmlkZXIgeworcHVibGljOgor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZyb250ZW5kTWVudVByb3ZpZGVyPiBjcmVhdGUoSW5zcGVj
dG9yRnJvbnRlbmRDbGllbnRMb2NhbCogZnJvbnRlbmRDbGllbnQsIFNjcmlwdE9iamVjdCB3ZWJJ
bnNwZWN0b3IsIGNvbnN0IFZlY3RvcjxDb250ZXh0TWVudUl0ZW0qPiYgaXRlbXMpCisgICAgewor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZyb250ZW5kTWVudVByb3ZpZGVyKGZyb250ZW5k
Q2xpZW50LCB3ZWJJbnNwZWN0b3IsIGl0ZW1zKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgZGlz
Y29ubmVjdCgpCisgICAgeworICAgICAgICBtX3dlYkluc3BlY3RvciA9IFNjcmlwdE9iamVjdCgp
OworICAgICAgICBtX2Zyb250ZW5kQ2xpZW50ID0gMDsKKyAgICB9CisgICAgCitwcml2YXRlOgor
ICAgIEZyb250ZW5kTWVudVByb3ZpZGVyKEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwqIGZy
b250ZW5kQ2xpZW50LCBTY3JpcHRPYmplY3Qgd2ViSW5zcGVjdG9yLCAgY29uc3QgVmVjdG9yPENv
bnRleHRNZW51SXRlbSo+JiBpdGVtcykKKyAgICAgICAgOiBtX2Zyb250ZW5kQ2xpZW50KGZyb250
ZW5kQ2xpZW50KQorICAgICAgICAsIG1fd2ViSW5zcGVjdG9yKHdlYkluc3BlY3RvcikKKyAgICAg
ICAgLCBtX2l0ZW1zKGl0ZW1zKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5Gcm9udGVu
ZE1lbnVQcm92aWRlcigpCisgICAgeworICAgICAgICBjb250ZXh0TWVudUNsZWFyZWQoKTsKKyAg
ICB9CisgICAgCisgICAgdmlydHVhbCB2b2lkIHBvcHVsYXRlQ29udGV4dE1lbnUoQ29udGV4dE1l
bnUqIG1lbnUpCisgICAgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1faXRlbXMu
c2l6ZSgpOyArK2kpCisgICAgICAgICAgICBtZW51LT5hcHBlbmRJdGVtKCptX2l0ZW1zW2ldKTsK
KyAgICB9CisgICAgCisgICAgdmlydHVhbCB2b2lkIGNvbnRleHRNZW51SXRlbVNlbGVjdGVkKENv
bnRleHRNZW51SXRlbSogaXRlbSkKKyAgICB7CisgICAgICAgIGludCBpdGVtTnVtYmVyID0gaXRl
bS0+YWN0aW9uKCkgLSBDb250ZXh0TWVudUl0ZW1CYXNlQ3VzdG9tVGFnOworCisgICAgICAgIFNj
cmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7Cisg
ICAgICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KCJjb250ZXh0TWVudUl0ZW1TZWxlY3RlZCIp
OworICAgICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChpdGVtTnVtYmVyKTsKKyAgICAgICAg
ZnVuY3Rpb24uY2FsbCgpOworICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgY29udGV4dE1l
bnVDbGVhcmVkKCkKKyAgICB7CisKKyAgICAgICAgaWYgKG1fZnJvbnRlbmRDbGllbnQpIHsKKyAg
ICAgICAgICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3dlYkluc3BlY3RvciwgImRp
c3BhdGNoIik7CisgICAgICAgICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudCgiY29udGV4dE1l
bnVDbGVhcmVkIik7CisgICAgICAgICAgICBmdW5jdGlvbi5jYWxsKCk7CisKKyAgICAgICAgICAg
IG1fZnJvbnRlbmRDbGllbnQtPm1fbWVudVByb3ZpZGVyID0gMDsKKyAgICAgICAgfQorICAgICAg
ICBkZWxldGVBbGxWYWx1ZXMobV9pdGVtcyk7CisgICAgICAgIG1faXRlbXMuY2xlYXIoKTsKKyAg
ICB9CisKKyAgICBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsKiBtX2Zyb250ZW5kQ2xpZW50
OworICAgIFNjcmlwdE9iamVjdCBtX3dlYkluc3BlY3RvcjsKKyAgICBWZWN0b3I8Q29udGV4dE1l
bnVJdGVtKj4gbV9pdGVtczsKK307CisKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBpbnNwZWN0
b3JBdHRhY2hlZEhlaWdodE5hbWUgPSAiaW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQiOworc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIGRlZmF1bHRBdHRhY2hlZEhlaWdodCA9IDMwMDsKK3N0YXRpYyBjb25z
dCBmbG9hdCBtaW5pbXVtQXR0YWNoZWRIZWlnaHQgPSAyNTAuMGY7CitzdGF0aWMgY29uc3QgZmxv
YXQgbWF4aW11bUF0dGFjaGVkSGVpZ2h0UmF0aW8gPSAwLjc1ZjsKKworSW5zcGVjdG9yRnJvbnRl
bmRDbGllbnRMb2NhbDo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbChJbnNwZWN0b3JDb250
cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyLCBQYWdlKiBmcm9udGVuZFBhZ2UpCisgICAgOiBt
X2luc3BlY3RvckNvbnRyb2xsZXIoaW5zcGVjdG9yQ29udHJvbGxlcikKKyAgICAsIG1fZnJvbnRl
bmRQYWdlKGZyb250ZW5kUGFnZSkKKyAgICAsIG1fZnJvbnRlbmRTY3JpcHRTdGF0ZSgwKQorICAg
ICwgbV9tZW51UHJvdmlkZXIoMCkKK3sKK30KKworSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2Nh
bDo6fkluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwoKQoreworICAgIGlmIChtX2Zyb250ZW5k
SG9zdCkKKyAgICAgICAgbV9mcm9udGVuZEhvc3QtPmRpc2Nvbm5lY3RDbGllbnQoKTsKKyAgICBp
ZiAobV9tZW51UHJvdmlkZXIpCisgICAgICAgIG1fbWVudVByb3ZpZGVyLT5kaXNjb25uZWN0KCk7
CisgICAgbV9mcm9udGVuZFNjcmlwdFN0YXRlID0gMDsKKyAgICBtX2Zyb250ZW5kUGFnZSA9IDA7
CisgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyID0gMDsKK30KKyAgICAKK3ZvaWQgSW5zcGVjdG9y
RnJvbnRlbmRDbGllbnRMb2NhbDo6d2luZG93T2JqZWN0Q2xlYXJlZCgpCit7CisgICAgLy8gR3Jh
bnQgdGhlIGluc3BlY3RvciB0aGUgYWJpbGl0eSB0byBzY3JpcHQgdGhlIGluc3BlY3RlZCBwYWdl
LgorICAgIG1fZnJvbnRlbmRQYWdlLT5tYWluRnJhbWUoKS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlP
cmlnaW4oKS0+Z3JhbnRVbml2ZXJzYWxBY2Nlc3MoKTsKKyAgICAvLyBGSVhNRTogZG9uJ3Qga2Vl
cCByZWZlcmVuY2UgdG8gdGhlIHNjcmlwdCBzdGF0ZQorICAgIG1fZnJvbnRlbmRTY3JpcHRTdGF0
ZSA9IHNjcmlwdFN0YXRlRnJvbVBhZ2UoZGVidWdnZXJXb3JsZCgpLCBtX2Zyb250ZW5kUGFnZSk7
CisgICAgU2NyaXB0R2xvYmFsT2JqZWN0OjpzZXQobV9mcm9udGVuZFNjcmlwdFN0YXRlLCAiSW5z
cGVjdG9yQmFja2VuZCIsIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yQmFja2VuZCgp
KTsKKyAgICBtX2Zyb250ZW5kSG9zdCA9IEluc3BlY3RvckZyb250ZW5kSG9zdDo6Y3JlYXRlKHRo
aXMpOworICAgIFNjcmlwdEdsb2JhbE9iamVjdDo6c2V0KG1fZnJvbnRlbmRTY3JpcHRTdGF0ZSwg
Ikluc3BlY3RvckZyb250ZW5kSG9zdCIsIG1fZnJvbnRlbmRIb3N0LmdldCgpKTsKK30KKwordm9p
ZCBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjpmcm9udGVuZExvYWRlZCgpCit7CisgICAg
YnJpbmdUb0Zyb250KCk7CisgICAgLy8gQ3JlYXRlIEluc3BlY3RvckZyb250ZW5kIGFuZCBzZXQg
aXQgdG8gSW5zcGVjdG9yQ29udHJvbGxlci4KKyAgICBBU1NFUlQobV9mcm9udGVuZFNjcmlwdFN0
YXRlKTsKKyAgICBTY3JpcHRPYmplY3Qgd2ViSW5zcGVjdG9yT2JqOworICAgIGlmICghU2NyaXB0
R2xvYmFsT2JqZWN0OjpnZXQobV9mcm9udGVuZFNjcmlwdFN0YXRlLCAiV2ViSW5zcGVjdG9yIiwg
d2ViSW5zcGVjdG9yT2JqKSkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPnNldEZyb250ZW5k
KG5ldyBJbnNwZWN0b3JGcm9udGVuZCh3ZWJJbnNwZWN0b3JPYmopKTsKK30KKworYm9vbCBJbnNw
ZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjpjYW5BdHRhY2hXaW5kb3coKQoreworICAgIHVuc2ln
bmVkIGluc3BlY3RlZFBhZ2VIZWlnaHQgPSBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3Rl
ZFBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+dmlzaWJsZUhlaWdodCgpOworCisgICAgLy8g
RG9uJ3QgYWxsb3cgdGhlIGF0dGFjaCBpZiB0aGUgd2luZG93IHdvdWxkIGJlIHRvbyBzbWFsbCB0
byBhY2NvbW1vZGF0ZSB0aGUgbWluaW11bSBpbnNwZWN0b3IgaGVpZ2h0LgorICAgIHJldHVybiBt
aW5pbXVtQXR0YWNoZWRIZWlnaHQgPD0gaW5zcGVjdGVkUGFnZUhlaWdodCAqIG1heGltdW1BdHRh
Y2hlZEhlaWdodFJhdGlvOworfQorCit2b2lkIEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6
OmNoYW5nZUF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkKK3sKKyAgICB1bnNp
Z25lZCB0b3RhbEhlaWdodCA9IG1fZnJvbnRlbmRQYWdlLT5tYWluRnJhbWUoKS0+dmlldygpLT52
aXNpYmxlSGVpZ2h0KCkgKyBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RlZFBhZ2UoKS0+
bWFpbkZyYW1lKCktPnZpZXcoKS0+dmlzaWJsZUhlaWdodCgpOworICAgIHVuc2lnbmVkIGF0dGFj
aGVkSGVpZ2h0ID0gY29uc3RyYWluZWRBdHRhY2hlZFdpbmRvd0hlaWdodChoZWlnaHQsIHRvdGFs
SGVpZ2h0KTsKKyAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPnNldFNldHRpbmcoaW5zcGVjdG9y
QXR0YWNoZWRIZWlnaHROYW1lLCBTdHJpbmc6Om51bWJlcihhdHRhY2hlZEhlaWdodCkpOworICAg
IHNldEF0dGFjaGVkV2luZG93SGVpZ2h0KGF0dGFjaGVkSGVpZ2h0KTsKK30KKwordm9pZCBJbnNw
ZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjptb3ZlV2luZG93QnkoZmxvYXQgeCwgZmxvYXQgeSkK
K3sKKyAgICBGbG9hdFJlY3QgZnJhbWVSZWN0ID0gbV9mcm9udGVuZFBhZ2UtPmNocm9tZSgpLT53
aW5kb3dSZWN0KCk7CisgICAgZnJhbWVSZWN0Lm1vdmUoeCwgeSk7CisgICAgbV9mcm9udGVuZFBh
Z2UtPmNocm9tZSgpLT5zZXRXaW5kb3dSZWN0KGZyYW1lUmVjdCk7Cit9CisKK3ZvaWQgSW5zcGVj
dG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6c2hvd0NvbnRleHRNZW51KEV2ZW50KiBldmVudCwgY29u
c3QgVmVjdG9yPENvbnRleHRNZW51SXRlbSo+JiBpdGVtcykKK3sKKyAgICBTY3JpcHRPYmplY3Qg
d2ViSW5zcGVjdG9yT2JqOworICAgIGlmICghU2NyaXB0R2xvYmFsT2JqZWN0OjpnZXQobV9mcm9u
dGVuZFNjcmlwdFN0YXRlLCAiV2ViSW5zcGVjdG9yIiwgd2ViSW5zcGVjdG9yT2JqKSkgeworICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAK
KyAgICBSZWZQdHI8RnJvbnRlbmRNZW51UHJvdmlkZXI+IG1lbnVQcm92aWRlciA9IEZyb250ZW5k
TWVudVByb3ZpZGVyOjpjcmVhdGUodGhpcywgd2ViSW5zcGVjdG9yT2JqLCBpdGVtcyk7CisgICAg
Q29udGV4dE1lbnVDb250cm9sbGVyKiBtZW51Q29udHJvbGxlciA9IG1fZnJvbnRlbmRQYWdlLT5j
b250ZXh0TWVudUNvbnRyb2xsZXIoKTsKKyAgICBtZW51Q29udHJvbGxlci0+c2hvd0NvbnRleHRN
ZW51KGV2ZW50LCBtZW51UHJvdmlkZXIpOworICAgIG1fbWVudVByb3ZpZGVyID0gbWVudVByb3Zp
ZGVyLmdldCgpOworfQorCit2b2lkIEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OnNldEF0
dGFjaGVkV2luZG93KGJvb2wgYXR0YWNoZWQpCit7CisgICAgU2NyaXB0T2JqZWN0IHdlYkluc3Bl
Y3Rvck9iajsKKyAgICBpZiAoIVNjcmlwdEdsb2JhbE9iamVjdDo6Z2V0KG1fZnJvbnRlbmRTY3Jp
cHRTdGF0ZSwgIldlYkluc3BlY3RvciIsIHdlYkluc3BlY3Rvck9iaikpIHsKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgU2NyaXB0RnVu
Y3Rpb25DYWxsIGZ1bmN0aW9uKHdlYkluc3BlY3Rvck9iaiwgImRpc3BhdGNoIik7IAorICAgIGZ1
bmN0aW9uLmFwcGVuZEFyZ3VtZW50KCJzZXRBdHRhY2hlZFdpbmRvdyIpOworICAgIGZ1bmN0aW9u
LmFwcGVuZEFyZ3VtZW50KGF0dGFjaGVkKTsKKyAgICBmdW5jdGlvbi5jYWxsKCk7Cit9CisKK3Zv
aWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6cmVzdG9yZUF0dGFjaGVkV2luZG93SGVp
Z2h0KCkKK3sKKyAgICB1bnNpZ25lZCBpbnNwZWN0ZWRQYWdlSGVpZ2h0ID0gbV9pbnNwZWN0b3JD
b250cm9sbGVyLT5pbnNwZWN0ZWRQYWdlKCktPm1haW5GcmFtZSgpLT52aWV3KCktPnZpc2libGVI
ZWlnaHQoKTsKKyAgICBTdHJpbmcgYXR0YWNoZWRIZWlnaHQgPSBtX2luc3BlY3RvckNvbnRyb2xs
ZXItPnNldHRpbmcoaW5zcGVjdG9yQXR0YWNoZWRIZWlnaHROYW1lKTsKKyAgICBib29sIHN1Y2Nl
c3MgPSB0cnVlOworICAgIGludCBoZWlnaHQgPSBhdHRhY2hlZEhlaWdodC50b0ludCgmc3VjY2Vz
cyk7CisgICAgdW5zaWduZWQgcHJlZmVycmVkSGVpZ2h0ID0gc3VjY2VzcyA/IGhlaWdodCA6IGRl
ZmF1bHRBdHRhY2hlZEhlaWdodDsKKyAgICAKKyAgICAvLyBUaGlzIGNhbGwgbWlnaHQgbm90IGdv
IHRocm91Z2ggKGlmIHRoZSB3aW5kb3cgc3RhcnRzIG91dCBkZXRhY2hlZCksIGJ1dCBpZiB0aGUg
d2luZG93IGlzIGluaXRpYWxseSBjcmVhdGVkIGF0dGFjaGVkLAorICAgIC8vIEluc3BlY3RvckNv
bnRyb2xsZXI6OmF0dGFjaFdpbmRvdyBpcyBuZXZlciBjYWxsZWQsIHNvIHdlIG5lZWQgdG8gbWFr
ZSBzdXJlIHRvIHNldCB0aGUgYXR0YWNoZWRXaW5kb3dIZWlnaHQuCisgICAgLy8gRklYTUU6IENs
ZWFuIHVwIGNvZGUgc28gd2Ugb25seSBoYXZlIHRvIGNhbGwgc2V0QXR0YWNoZWRXaW5kb3dIZWln
aHQgaW4gSW5zcGVjdG9yQ29udHJvbGxlcjo6YXR0YWNoV2luZG93CisgICAgc2V0QXR0YWNoZWRX
aW5kb3dIZWlnaHQoY29uc3RyYWluZWRBdHRhY2hlZFdpbmRvd0hlaWdodChwcmVmZXJyZWRIZWln
aHQsIGluc3BlY3RlZFBhZ2VIZWlnaHQpKTsKK30KKwordW5zaWduZWQgSW5zcGVjdG9yRnJvbnRl
bmRDbGllbnRMb2NhbDo6Y29uc3RyYWluZWRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBw
cmVmZXJyZWRIZWlnaHQsIHVuc2lnbmVkIHRvdGFsV2luZG93SGVpZ2h0KQoreworICAgIHVzaW5n
IG5hbWVzcGFjZSBzdGQ7CisgICAgcmV0dXJuIHJvdW5kZihtYXgobWluaW11bUF0dGFjaGVkSGVp
Z2h0LCBtaW48ZmxvYXQ+KHByZWZlcnJlZEhlaWdodCwgdG90YWxXaW5kb3dIZWlnaHQgKiBtYXhp
bXVtQXR0YWNoZWRIZWlnaHRSYXRpbykpKTsKK30KKyAgICAKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9u
dGVuZENsaWVudExvY2FsLmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENs
aWVudExvY2FsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE4YzQ3OQot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xp
ZW50TG9jYWwuaApAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJbnNwZWN0b3JGcm9udGVuZENsaWVu
dExvY2FsX2gKKyNkZWZpbmUgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbF9oCisKKyNpbmNs
dWRlICJJbnNwZWN0b3JGcm9udGVuZENsaWVudC5oIgorI2luY2x1ZGUgIlNjcmlwdFN0YXRlLmgi
CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgRnJvbnRlbmRNZW51UHJvdmlkZXI7CitjbGFzcyBJbnNwZWN0b3JDb250cm9sbGVyOwor
Y2xhc3MgSW5zcGVjdG9yRnJvbnRlbmRIb3N0OworY2xhc3MgUGFnZTsKKworY2xhc3MgSW5zcGVj
dG9yRnJvbnRlbmRDbGllbnRMb2NhbCA6IHB1YmxpYyBJbnNwZWN0b3JGcm9udGVuZENsaWVudCwg
cHVibGljIE5vbmNvcHlhYmxlIHsKK3B1YmxpYzoKKyAgICBJbnNwZWN0b3JGcm9udGVuZENsaWVu
dExvY2FsKEluc3BlY3RvckNvbnRyb2xsZXIqLCBQYWdlKik7CisgICAgdmlydHVhbCB+SW5zcGVj
dG9yRnJvbnRlbmRDbGllbnRMb2NhbCgpOworICAgIAorICAgIHZpcnR1YWwgdm9pZCB3aW5kb3dP
YmplY3RDbGVhcmVkKCk7CisgICAgdmlydHVhbCB2b2lkIGZyb250ZW5kTG9hZGVkKCk7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgbW92ZVdpbmRvd0J5KGZsb2F0IHgsIGZsb2F0IHkpOworCisgICAgdmly
dHVhbCBib29sIGNhbkF0dGFjaFdpbmRvdygpOworICAgIHZpcnR1YWwgdm9pZCBjaGFuZ2VBdHRh
Y2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2hvd0NvbnRl
eHRNZW51KEV2ZW50KiwgY29uc3QgVmVjdG9yPENvbnRleHRNZW51SXRlbSo+Jik7CisgICAgCitw
cm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIHNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2ln
bmVkKSA9IDA7CisKKyAgICB2b2lkIHNldEF0dGFjaGVkV2luZG93KGJvb2wpOworICAgIHZvaWQg
cmVzdG9yZUF0dGFjaGVkV2luZG93SGVpZ2h0KCk7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIHVu
c2lnbmVkIGNvbnN0cmFpbmVkQXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgcHJlZmVycmVk
SGVpZ2h0LCB1bnNpZ25lZCB0b3RhbFdpbmRvd0hlaWdodCk7CisKKyAgICBmcmllbmQgY2xhc3Mg
RnJvbnRlbmRNZW51UHJvdmlkZXI7CisgICAgSW5zcGVjdG9yQ29udHJvbGxlciogbV9pbnNwZWN0
b3JDb250cm9sbGVyOworICAgIFBhZ2UqIG1fZnJvbnRlbmRQYWdlOworICAgIFNjcmlwdFN0YXRl
KiBtX2Zyb250ZW5kU2NyaXB0U3RhdGU7CisgICAgLy8gVE9ETyh5dXJ5cyk6IHRoaXMgcmVmIHNo
b3VsZG4ndCBiZSBuZWVkZWQuCisgICAgUmVmUHRyPEluc3BlY3RvckZyb250ZW5kSG9zdD4gbV9m
cm9udGVuZEhvc3Q7CisgICAgRnJvbnRlbmRNZW51UHJvdmlkZXIqIG1fbWVudVByb3ZpZGVyOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAgYi9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCmluZGV4IGMxYTE3NjEuLjIzYmU0NGMgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAKKysrIGIv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcApAQCAtNDEsOCArNDEs
NyBAQAogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5o
IgogI2luY2x1ZGUgIkhUTUxGcmFtZU93bmVyRWxlbWVudC5oIgotI2luY2x1ZGUgIkluc3BlY3Rv
ckNsaWVudC5oIgotI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kLmgiCisjaW5jbHVkZSAiSW5z
cGVjdG9yRnJvbnRlbmRDbGllbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JSZXNvdXJjZS5oIgog
I2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYXN0ZWJvYXJkLmgiCkBAIC01NCw2NSArNTMs
NzQgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1JbnNw
ZWN0b3JGcm9udGVuZEhvc3Q6Okluc3BlY3RvckZyb250ZW5kSG9zdChJbnNwZWN0b3JDb250cm9s
bGVyKiBpbnNwZWN0b3JDb250cm9sbGVyLCBJbnNwZWN0b3JDbGllbnQqIGNsaWVudCkKLSAgICA6
IG1faW5zcGVjdG9yQ29udHJvbGxlcihpbnNwZWN0b3JDb250cm9sbGVyKQotICAgICwgbV9jbGll
bnQoY2xpZW50KQorSW5zcGVjdG9yRnJvbnRlbmRIb3N0OjpJbnNwZWN0b3JGcm9udGVuZEhvc3Qo
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQqIGNsaWVudCkKKyAgICA6IG1fY2xpZW50KGNsaWVudCkK
IHsKIH0KIAogSW5zcGVjdG9yRnJvbnRlbmRIb3N0Ojp+SW5zcGVjdG9yRnJvbnRlbmRIb3N0KCkK
IHsKLSAgICBpZiAobV9tZW51UHJvdmlkZXIpCi0gICAgICAgIG1fbWVudVByb3ZpZGVyLT5kaXNj
b25uZWN0KCk7CisgICAgQVNTRVJUKCFtX2NsaWVudCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yRnJv
bnRlbmRIb3N0OjpkaXNjb25uZWN0Q2xpZW50KCkKK3sKKyAgICBtX2NsaWVudCA9IDA7CiB9CiAK
IHZvaWQgSW5zcGVjdG9yRnJvbnRlbmRIb3N0Ojpsb2FkZWQoKQogewotICAgIGlmIChtX2luc3Bl
Y3RvckNvbnRyb2xsZXIpCi0gICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+c2NyaXB0T2Jq
ZWN0UmVhZHkoKTsKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5mcm9udGVu
ZExvYWRlZCgpOwogfQogCiB2b2lkIEluc3BlY3RvckZyb250ZW5kSG9zdDo6YXR0YWNoKCkKIHsK
LSAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyKQotICAgICAgICBtX2luc3BlY3RvckNvbnRy
b2xsZXItPmF0dGFjaFdpbmRvdygpOworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGll
bnQtPmF0dGFjaFdpbmRvdygpOwogfQogCiB2b2lkIEluc3BlY3RvckZyb250ZW5kSG9zdDo6ZGV0
YWNoKCkKIHsKLSAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyKQotICAgICAgICBtX2luc3Bl
Y3RvckNvbnRyb2xsZXItPmRldGFjaFdpbmRvdygpOworICAgIGlmIChtX2NsaWVudCkKKyAgICAg
ICAgbV9jbGllbnQtPmRldGFjaFdpbmRvdygpOwogfQogCiB2b2lkIEluc3BlY3RvckZyb250ZW5k
SG9zdDo6Y2xvc2VXaW5kb3coKQogewotICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIpCi0g
ICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+Y2xvc2VXaW5kb3coKTsKKyAgICBpZiAobV9j
bGllbnQpIHsKKyAgICAgICAgbV9jbGllbnQtPmNsb3NlV2luZG93KCk7CisgICAgICAgIGRpc2Nv
bm5lY3RDbGllbnQoKTsgLy8gRGlzY29ubmVjdCBmcm9tIGNsaWVudC4KKyAgICB9Cit9CisKK3Zv
aWQgSW5zcGVjdG9yRnJvbnRlbmRIb3N0OjpicmluZ1RvRnJvbnQoKQoreworICAgIGlmIChtX2Ns
aWVudCkKKyAgICAgICAgbV9jbGllbnQtPmJyaW5nVG9Gcm9udCgpOwogfQogCi12b2lkIEluc3Bl
Y3RvckZyb250ZW5kSG9zdDo6d2luZG93VW5sb2FkaW5nKCkKK3ZvaWQgSW5zcGVjdG9yRnJvbnRl
bmRIb3N0OjppbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYgbmV3VVJMKQogewotICAg
IGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIpCi0gICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxl
ci0+Y2xvc2UoKTsKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5pbnNwZWN0
ZWRVUkxDaGFuZ2VkKG5ld1VSTCk7CiB9CiAKIGJvb2wgSW5zcGVjdG9yRnJvbnRlbmRIb3N0Ojpj
YW5BdHRhY2hXaW5kb3coKSBjb25zdAogewotICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIp
Ci0gICAgICAgIHJldHVybiBtX2luc3BlY3RvckNvbnRyb2xsZXItPmNhbkF0dGFjaFdpbmRvdygp
OwotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gbV9jbGllbnQgJiYgbV9jbGllbnQtPmNh
bkF0dGFjaFdpbmRvdygpOwogfQogCiB2b2lkIEluc3BlY3RvckZyb250ZW5kSG9zdDo6c2V0QXR0
YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KQogewotICAgIGlmIChtX2luc3BlY3Rv
ckNvbnRyb2xsZXIpCi0gICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+c2V0QXR0YWNoZWRX
aW5kb3dIZWlnaHQoaGVpZ2h0KTsKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50
LT5jaGFuZ2VBdHRhY2hlZFdpbmRvd0hlaWdodChoZWlnaHQpOwogfQogCiB2b2lkIEluc3BlY3Rv
ckZyb250ZW5kSG9zdDo6bW92ZVdpbmRvd0J5KGZsb2F0IHgsIGZsb2F0IHkpIGNvbnN0CiB7Ci0g
ICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlcikKLSAgICAgICAgbV9pbnNwZWN0b3JDb250cm9s
bGVyLT5tb3ZlV2luZG93QnkoeCwgeSk7CisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2Ns
aWVudC0+bW92ZVdpbmRvd0J5KHgsIHkpOwogfQogCiBTdHJpbmcgSW5zcGVjdG9yRnJvbnRlbmRI
b3N0Ojpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkKQEAgLTE2MSwzMCArMTY5LDggQEAgdm9pZCBJbnNw
ZWN0b3JGcm9udGVuZEhvc3Q6OmNvcHlUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCkKIAogdm9pZCBJ
bnNwZWN0b3JGcm9udGVuZEhvc3Q6OnNob3dDb250ZXh0TWVudShFdmVudCogZXZlbnQsIGNvbnN0
IFZlY3RvcjxDb250ZXh0TWVudUl0ZW0qPiYgaXRlbXMpCiB7Ci0gICAgaWYgKCFtX2luc3BlY3Rv
ckNvbnRyb2xsZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIW1faW5zcGVjdG9yQ29udHJv
bGxlci0+d2luZG93VmlzaWJsZSgpKQotICAgICAgICByZXR1cm47Ci0KLQotICAgIG1fbWVudVBy
b3ZpZGVyID0gTWVudVByb3ZpZGVyOjpjcmVhdGUodGhpcywgaXRlbXMpOwotICAgIENvbnRleHRN
ZW51Q29udHJvbGxlciogbWVudUNvbnRyb2xsZXIgPSBtX2luc3BlY3RvckNvbnRyb2xsZXItPm1f
cGFnZS0+Y29udGV4dE1lbnVDb250cm9sbGVyKCk7Ci0gICAgbWVudUNvbnRyb2xsZXItPnNob3dD
b250ZXh0TWVudShldmVudCwgbV9tZW51UHJvdmlkZXIpOwotfQotCi12b2lkIEluc3BlY3RvckZy
b250ZW5kSG9zdDo6Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQoQ29udGV4dE1lbnVJdGVtKiBpdGVt
KQotewotICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIgJiYgbV9pbnNwZWN0b3JDb250cm9s
bGVyLT53aW5kb3dWaXNpYmxlKCkpIHsKLSAgICAgICAgaW50IGl0ZW1OdW1iZXIgPSBpdGVtLT5h
Y3Rpb24oKSAtIENvbnRleHRNZW51SXRlbUJhc2VDdXN0b21UYWc7Ci0gICAgICAgIG1faW5zcGVj
dG9yQ29udHJvbGxlci0+bV9mcm9udGVuZC0+Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQoaXRlbU51
bWJlcik7Ci0gICAgfQotfQotCi12b2lkIEluc3BlY3RvckZyb250ZW5kSG9zdDo6Y29udGV4dE1l
bnVDbGVhcmVkKCkKLXsKLSAgICBtX21lbnVQcm92aWRlciA9IDA7Ci0gICAgaWYgKG1faW5zcGVj
dG9yQ29udHJvbGxlciAmJiBtX2luc3BlY3RvckNvbnRyb2xsZXItPndpbmRvd1Zpc2libGUoKSkK
LSAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5tX2Zyb250ZW5kLT5jb250ZXh0TWVudUNs
ZWFyZWQoKTsKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5zaG93Q29udGV4
dE1lbnUoZXZlbnQsIGl0ZW1zKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmggYi9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuaAppbmRleCBjYmU2YTliLi5mNWJhOWQ3
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuaAor
KysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuaApAQCAtNDMsMjcg
KzQzLDI2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIENvbnRleHRNZW51SXRlbTsKIGNs
YXNzIEV2ZW50OwogY2xhc3MgSW5zcGVjdG9yQ2xpZW50OworY2xhc3MgSW5zcGVjdG9yRnJvbnRl
bmRDbGllbnQ7CiBjbGFzcyBOb2RlOwogCiBjbGFzcyBJbnNwZWN0b3JGcm9udGVuZEhvc3QgOiBw
dWJsaWMgUmVmQ291bnRlZDxJbnNwZWN0b3JGcm9udGVuZEhvc3Q+CiB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yRnJvbnRlbmRIb3N0PiBjcmVhdGUoSW5zcGVjdG9y
Q29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciwgSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQp
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yRnJvbnRlbmRIb3N0PiBjcmVhdGUoSW5z
cGVjdG9yRnJvbnRlbmRDbGllbnQqIGNsaWVudCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgSW5zcGVjdG9yRnJvbnRlbmRIb3N0KGluc3BlY3RvckNvbnRyb2xsZXIsIGNsaWVu
dCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvckZyb250ZW5kSG9zdChj
bGllbnQpKTsKICAgICB9CiAKICAgICB+SW5zcGVjdG9yRnJvbnRlbmRIb3N0KCk7Ci0KLSAgICBJ
bnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyKCkgeyByZXR1cm4gbV9pbnNw
ZWN0b3JDb250cm9sbGVyOyB9Ci0KLSAgICB2b2lkIGRpc2Nvbm5lY3RDb250cm9sbGVyKCkgeyBt
X2luc3BlY3RvckNvbnRyb2xsZXIgPSAwOyB9CisgICAgdm9pZCBkaXNjb25uZWN0Q2xpZW50KCk7
CiAKICAgICB2b2lkIGxvYWRlZCgpOwogICAgIHZvaWQgYXR0YWNoKCk7CiAgICAgdm9pZCBkZXRh
Y2goKTsKICAgICB2b2lkIGNsb3NlV2luZG93KCk7Ci0gICAgdm9pZCB3aW5kb3dVbmxvYWRpbmco
KTsKKyAgICB2b2lkIGJyaW5nVG9Gcm9udCgpOworICAgIHZvaWQgaW5zcGVjdGVkVVJMQ2hhbmdl
ZChjb25zdCBTdHJpbmcmKTsKIAogICAgIGJvb2wgY2FuQXR0YWNoV2luZG93KCkgY29uc3Q7CiAg
ICAgdm9pZCBzZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpOwpAQCAtODAs
NTkgKzc5LDkgQEAgcHVibGljOgogICAgIHZvaWQgc2hvd0NvbnRleHRNZW51KEV2ZW50KiwgY29u
c3QgVmVjdG9yPENvbnRleHRNZW51SXRlbSo+JiBpdGVtcyk7CiAKIHByaXZhdGU6Ci0gICAgY2xh
c3MgTWVudVByb3ZpZGVyIDogcHVibGljIENvbnRleHRNZW51UHJvdmlkZXIgewotICAgIHB1Ymxp
YzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8TWVudVByb3ZpZGVyPiBjcmVhdGUoSW5zcGVj
dG9yRnJvbnRlbmRIb3N0KiBmcm9udGVuZEhvc3QsIGNvbnN0IFZlY3RvcjxDb250ZXh0TWVudUl0
ZW0qPiYgaXRlbXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
TWVudVByb3ZpZGVyKGZyb250ZW5kSG9zdCwgaXRlbXMpKTsKLSAgICAgICAgfQotCi0gICAgICAg
IHZpcnR1YWwgfk1lbnVQcm92aWRlcigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHRN
ZW51Q2xlYXJlZCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBkaXNjb25uZWN0KCkKLSAg
ICAgICAgewotICAgICAgICAgICAgbV9mcm9udGVuZEhvc3QgPSAwOwotICAgICAgICB9Ci0KLSAg
ICAgICAgdmlydHVhbCB2b2lkIHBvcHVsYXRlQ29udGV4dE1lbnUoQ29udGV4dE1lbnUqIG1lbnUp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9pdGVtcy5z
aXplKCk7ICsraSkKLSAgICAgICAgICAgICAgICBtZW51LT5hcHBlbmRJdGVtKCptX2l0ZW1zW2ld
KTsKLSAgICAgICAgfQotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBjb250ZXh0TWVudUl0ZW1TZWxl
Y3RlZChDb250ZXh0TWVudUl0ZW0qIGl0ZW0pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICht
X2Zyb250ZW5kSG9zdCkKLSAgICAgICAgICAgICAgICBtX2Zyb250ZW5kSG9zdC0+Y29udGV4dE1l
bnVJdGVtU2VsZWN0ZWQoaXRlbSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2aXJ0dWFsIHZvaWQg
Y29udGV4dE1lbnVDbGVhcmVkKCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1fZnJvbnRl
bmRIb3N0KQotICAgICAgICAgICAgICAgIG1fZnJvbnRlbmRIb3N0LT5jb250ZXh0TWVudUNsZWFy
ZWQoKTsKLSAgICAgICAgICAgIGRlbGV0ZUFsbFZhbHVlcyhtX2l0ZW1zKTsKLSAgICAgICAgICAg
IG1faXRlbXMuY2xlYXIoKTsKLSAgICAgICAgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgTWVu
dVByb3ZpZGVyKEluc3BlY3RvckZyb250ZW5kSG9zdCogZnJvbnRlbmRIb3N0LCAgY29uc3QgVmVj
dG9yPENvbnRleHRNZW51SXRlbSo+JiBpdGVtcykKLSAgICAgICAgICAgIDogbV9mcm9udGVuZEhv
c3QoZnJvbnRlbmRIb3N0KQotICAgICAgICAgICAgLCBtX2l0ZW1zKGl0ZW1zKSB7IH0KLSAgICAg
ICAgSW5zcGVjdG9yRnJvbnRlbmRIb3N0KiBtX2Zyb250ZW5kSG9zdDsKLSAgICAgICAgVmVjdG9y
PENvbnRleHRNZW51SXRlbSo+IG1faXRlbXM7Ci0gICAgfTsKLQotICAgIEluc3BlY3RvckZyb250
ZW5kSG9zdChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyLCBJbnNwZWN0
b3JDbGllbnQqIGNsaWVudCk7Ci0KLSAgICB2b2lkIGNvbnRleHRNZW51SXRlbVNlbGVjdGVkKENv
bnRleHRNZW51SXRlbSopOwotICAgIHZvaWQgY29udGV4dE1lbnVDbGVhcmVkKCk7Ci0KLSAgICBJ
bnNwZWN0b3JDb250cm9sbGVyKiBtX2luc3BlY3RvckNvbnRyb2xsZXI7Ci0gICAgSW5zcGVjdG9y
Q2xpZW50KiBtX2NsaWVudDsKLSAgICBSZWZQdHI8TWVudVByb3ZpZGVyPiBtX21lbnVQcm92aWRl
cjsKKyAgICBJbnNwZWN0b3JGcm9udGVuZEhvc3QoSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQqIGNs
aWVudCk7CisKKyAgICBJbnNwZWN0b3JGcm9udGVuZENsaWVudCogbV9jbGllbnQ7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JGcm9udGVuZEhvc3QuaWRsIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRl
bmRIb3N0LmlkbAppbmRleCAxNTBlOWZjLi4wYWVmNWM0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuaWRsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckZyb250ZW5kSG9zdC5pZGwKQEAgLTM2LDcgKzM2LDggQEAgbW9kdWxlIGNvcmUg
ewogICAgICAgICB2b2lkIGF0dGFjaCgpOwogICAgICAgICB2b2lkIGRldGFjaCgpOwogICAgICAg
ICB2b2lkIGNsb3NlV2luZG93KCk7Ci0gICAgICAgIHZvaWQgd2luZG93VW5sb2FkaW5nKCk7Cisg
ICAgICAgIHZvaWQgYnJpbmdUb0Zyb250KCk7CisgICAgICAgIHZvaWQgaW5zcGVjdGVkVVJMQ2hh
bmdlZChpbiBET01TdHJpbmcgbmV3VVJMKTsKIAogICAgICAgICBib29sZWFuIGNhbkF0dGFjaFdp
bmRvdygpOwogICAgICAgICB2b2lkIHNldEF0dGFjaGVkV2luZG93SGVpZ2h0KGluIHVuc2lnbmVk
IGxvbmcgaGVpZ2h0KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJl
c291cmNlLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlLmNwcAppbmRl
eCBiNmI2MDU3Li43YTBiNDZlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JSZXNvdXJjZS5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2Uu
Y3BwCkBAIC0yMTMsMTUgKzIxMywxMiBAQCB2b2lkIEluc3BlY3RvclJlc291cmNlOjp1cGRhdGVT
Y3JpcHRPYmplY3QoSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kKQogICAgICAgICBtX2NoYW5n
ZXMuY2xlYXJBbGwoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSZXNvdXJjZTo6cmVsZWFzZVNjcmlw
dE9iamVjdChJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQsIGJvb2wgY2FsbFJlbW92ZVJlc291
cmNlKQordm9pZCBJbnNwZWN0b3JSZXNvdXJjZTo6cmVsZWFzZVNjcmlwdE9iamVjdChJbnNwZWN0
b3JGcm9udGVuZCogZnJvbnRlbmQpCiB7CiAgICAgbV9jaGFuZ2VzLnNldEFsbCgpOwogCiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3JlZGlyZWN0cy5zaXplKCk7ICsraSkKLSAgICAgICAg
bV9yZWRpcmVjdHNbaV0tPnJlbGVhc2VTY3JpcHRPYmplY3QoZnJvbnRlbmQsIGNhbGxSZW1vdmVS
ZXNvdXJjZSk7Ci0KLSAgICBpZiAoIWNhbGxSZW1vdmVSZXNvdXJjZSkKLSAgICAgICAgcmV0dXJu
OworICAgICAgICBtX3JlZGlyZWN0c1tpXS0+cmVsZWFzZVNjcmlwdE9iamVjdChmcm9udGVuZCk7
CiAKICAgICBmcm9udGVuZC0+cmVtb3ZlUmVzb3VyY2UobV9pZGVudGlmaWVyKTsKIH0KZGlmZiAt
LWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlLmggYi9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZS5oCmluZGV4IGQzNDdlNWMuLjk3NDZlMWYgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlLmgKKysrIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2UuaApAQCAtNzksNyArNzksNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKICAgICAgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JSZXNvdXJjZT4gYXBw
ZW5kUmVkaXJlY3QodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBLVVJMJiByZWRpcmVj
dFVSTCk7CiAgICAgICAgIHZvaWQgdXBkYXRlU2NyaXB0T2JqZWN0KEluc3BlY3RvckZyb250ZW5k
KiBmcm9udGVuZCk7Ci0gICAgICAgIHZvaWQgcmVsZWFzZVNjcmlwdE9iamVjdChJbnNwZWN0b3JG
cm9udGVuZCogZnJvbnRlbmQsIGJvb2wgY2FsbFJlbW92ZVJlc291cmNlKTsKKyAgICAgICAgdm9p
ZCByZWxlYXNlU2NyaXB0T2JqZWN0KEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCk7CiAKICAg
ICAgICAgdm9pZCB1cGRhdGVSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOwogICAgICAg
ICB2b2lkIHVwZGF0ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0b3JGcm9udGVuZEhvc3RTdHVi
LmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckZyb250ZW5kSG9zdFN0
dWIuanMKaW5kZXggZWZmMjUxOC4uNTQ1NjA2OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0luc3BlY3RvckZyb250ZW5kSG9zdFN0dWIuanMKKysrIGIvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckZyb250ZW5kSG9zdFN0dWIuanMKQEAgLTQ4LDYg
KzQ4LDExIEBAIFdlYkluc3BlY3Rvci5JbnNwZWN0b3JGcm9udGVuZEhvc3RTdHViLnByb3RvdHlw
ZSA9IHsKICAgICAgICAgcmV0dXJuICJ1bmtub3duIjsKICAgICB9LAogCisgICAgYnJpbmdUb0Zy
b250OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLl93aW5kb3dWaXNpYmxlID0gdHJ1
ZTsKKyAgICB9LAorCiAgICAgY2xvc2VXaW5kb3c6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAg
IHRoaXMuX3dpbmRvd1Zpc2libGUgPSBmYWxzZTsKQEAgLTg3LDcgKzkyLDcgQEAgV2ViSW5zcGVj
dG9yLkluc3BlY3RvckZyb250ZW5kSG9zdFN0dWIucHJvdG90eXBlID0gewogICAgICAgICByZXR1
cm4gIiI7CiAgICAgfSwKIAotICAgIHdpbmRvd1VubG9hZGluZzogZnVuY3Rpb24oKQorICAgIGlu
c3BlY3RlZFVSTENoYW5nZWQ6IGZ1bmN0aW9uKHVybCkKICAgICB7CiAgICAgfSwKIApkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcyBiL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKaW5kZXggZWI0MGEyOC4uMWQyYzQ2ZCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcworKysg
Yi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCkBAIC00NzgsNyArNDc4
LDYgQEAgV2ViSW5zcGVjdG9yLmxvYWRlZCA9IGZ1bmN0aW9uKCkKIAogICAgIHRoaXMuYWRkTWFp
bkV2ZW50TGlzdGVuZXJzKGRvY3VtZW50KTsKIAotICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVy
KCJ1bmxvYWQiLCB0aGlzLndpbmRvd1VubG9hZC5iaW5kKHRoaXMpLCB0cnVlKTsKICAgICB3aW5k
b3cuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIiwgdGhpcy53aW5kb3dSZXNpemUuYmluZCh0aGlz
KSwgdHJ1ZSk7CiAKICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsIHRoaXMu
Zm9jdXNDaGFuZ2VkLmJpbmQodGhpcyksIHRydWUpOwpAQCAtNTYyLDExICs1NjEsNiBAQCBXZWJJ
bnNwZWN0b3IuZGlzcGF0Y2ggPSBmdW5jdGlvbigpIHsKICAgICBzZXRUaW1lb3V0KGRlbGF5RGlz
cGF0Y2gsIDApOwogfQogCi1XZWJJbnNwZWN0b3Iud2luZG93VW5sb2FkID0gZnVuY3Rpb24oZXZl
bnQpCi17Ci0gICAgSW5zcGVjdG9yRnJvbnRlbmRIb3N0LndpbmRvd1VubG9hZGluZygpOwotfQot
CiBXZWJJbnNwZWN0b3Iud2luZG93UmVzaXplID0gZnVuY3Rpb24oZXZlbnQpCiB7CiAgICAgaWYg
KHRoaXMuY3VycmVudFBhbmVsKQpAQCAtNjA0LDkgKzU5OCwxNyBAQCBXZWJJbnNwZWN0b3Iuc2V0
QXR0YWNoZWRXaW5kb3cgPSBmdW5jdGlvbihhdHRhY2hlZCkKIAogV2ViSW5zcGVjdG9yLmNsb3Nl
ID0gZnVuY3Rpb24oZXZlbnQpCiB7CisgICAgaWYgKHRoaXMuX2lzQ2xvc2luZykKKyAgICAgICAg
cmV0dXJuOworICAgIHRoaXMuX2lzQ2xvc2luZyA9IHRydWU7CiAgICAgSW5zcGVjdG9yRnJvbnRl
bmRIb3N0LmNsb3NlV2luZG93KCk7CiB9CiAKK1dlYkluc3BlY3Rvci5pbnNwZWN0ZWRQYWdlRGVz
dHJveWVkID0gZnVuY3Rpb24oKQoreworICAgIFdlYkluc3BlY3Rvci5jbG9zZSgpOworfQorCiBX
ZWJJbnNwZWN0b3IuZG9jdW1lbnRNb3VzZU92ZXIgPSBmdW5jdGlvbihldmVudCkKIHsKICAgICBp
ZiAoZXZlbnQudGFyZ2V0LnRhZ05hbWUgIT09ICJBIikKQEAgLTEzMjEsNiArMTMyMywxNiBAQCBX
ZWJJbnNwZWN0b3IucmVzZXQgPSBmdW5jdGlvbigpCiAgICAgdGhpcy5jb25zb2xlLmNsZWFyTWVz
c2FnZXMoKTsKIH0KIAorV2ViSW5zcGVjdG9yLmJyaW5nVG9Gcm9udCA9IGZ1bmN0aW9uKCkKK3sK
KyAgICBJbnNwZWN0b3JGcm9udGVuZEhvc3QuYnJpbmdUb0Zyb250KCk7Cit9CisKK1dlYkluc3Bl
Y3Rvci5pbnNwZWN0ZWRVUkxDaGFuZ2VkID0gZnVuY3Rpb24odXJsKQoreworICAgIEluc3BlY3Rv
ckZyb250ZW5kSG9zdC5pbnNwZWN0ZWRVUkxDaGFuZ2VkKHVybCk7Cit9CisKIFdlYkluc3BlY3Rv
ci5yZXNvdXJjZVVSTENoYW5nZWQgPSBmdW5jdGlvbihyZXNvdXJjZSwgb2xkVVJMKQogewogICAg
IGRlbGV0ZSB0aGlzLnJlc291cmNlVVJMTWFwW29sZFVSTF07CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2xvYWRlci9FbXB0eUNsaWVudHMuaCBiL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCmlu
ZGV4IGEyNjczNzQuLjhiY2U1MjkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xp
ZW50cy5oCisrKyBiL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCkBAIC00NzEsMjkgKzQ3
MSwxNCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+RW1wdHlJbnNwZWN0b3JDbGllbnQoKSB7IH0K
IAogICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0b3JEZXN0cm95ZWQoKSB7IH0KLQotICAgIHZpcnR1
YWwgUGFnZSogY3JlYXRlUGFnZSgpIHsgcmV0dXJuIDA7IH07Ci0KLSAgICB2aXJ0dWFsIFN0cmlu
ZyBsb2NhbGl6ZWRTdHJpbmdzVVJMKCkgeyByZXR1cm4gU3RyaW5nKCk7IH0KLQotICAgIHZpcnR1
YWwgU3RyaW5nIGhpZGRlblBhbmVscygpIHsgcmV0dXJuIFN0cmluZygpOyB9Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgc2hvd1dpbmRvdygpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBjbG9zZVdpbmRvdygp
IHsgfQotCi0gICAgdmlydHVhbCB2b2lkIGF0dGFjaFdpbmRvdygpIHsgfQotICAgIHZpcnR1YWwg
dm9pZCBkZXRhY2hXaW5kb3coKSB7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBzZXRBdHRhY2hlZFdp
bmRvd0hlaWdodCh1bnNpZ25lZCkgeyB9CisgICAgCisgICAgdmlydHVhbCB2b2lkIG9wZW5JbnNw
ZWN0b3JGcm9udGVuZChJbnNwZWN0b3JDb250cm9sbGVyKikgeyB9CiAKICAgICB2aXJ0dWFsIHZv
aWQgaGlnaGxpZ2h0KE5vZGUqKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgaGlkZUhpZ2hsaWdodCgp
IHsgfQotICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYp
IHsgfQogCiAgICAgdmlydHVhbCB2b2lkIHBvcHVsYXRlU2V0dGluZyhjb25zdCBTdHJpbmcmLCBT
dHJpbmcqKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc3RvcmVTZXR0aW5nKGNvbnN0IFN0cmluZyYs
IGNvbnN0IFN0cmluZyYpIHsgfQotCi0gICAgdmlydHVhbCB2b2lkIGluc3BlY3RvcldpbmRvd09i
amVjdENsZWFyZWQoKSB7IH0KIH07CiAKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvbG9hZGVyL0Zy
YW1lTG9hZGVyLmNwcCBiL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAppbmRleCA1NGM3
OTcyLi5lMTBiNThmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAK
KysrIGIvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCkBAIC0zOTQ0LDggKzM5NDQsNiBA
QCB2b2lkIEZyYW1lTG9hZGVyOjpkaXNwYXRjaERpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZChE
T01XcmFwcGVyV29ybGQqIHdvcmxkKQogICAgIGlmIChQYWdlKiBwYWdlID0gbV9mcmFtZS0+cGFn
ZSgpKSB7CiAgICAgICAgIGlmIChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3IgPSBwYWdl
LT5pbnNwZWN0b3JDb250cm9sbGVyKCkpCiAgICAgICAgICAgICBpbnNwZWN0b3ItPmluc3BlY3Rl
ZFdpbmRvd1NjcmlwdE9iamVjdENsZWFyZWQobV9mcmFtZSk7Ci0gICAgICAgIGlmIChJbnNwZWN0
b3JDb250cm9sbGVyKiBpbnNwZWN0b3IgPSBwYWdlLT5wYXJlbnRJbnNwZWN0b3JDb250cm9sbGVy
KCkpCi0gICAgICAgICAgICBpbnNwZWN0b3ItPndpbmRvd1NjcmlwdE9iamVjdEF2YWlsYWJsZSgp
OwogICAgIH0KICNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwIGIv
V2ViQ29yZS9wYWdlL1BhZ2UuY3BwCmluZGV4IDdkMWU2MjQuLmQ2NmU0OTcgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvcGFnZS9QYWdlLmNwcAorKysgYi9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKQEAgLTEz
OCw5ICsxMzgsNiBAQCBQYWdlOjpQYWdlKENocm9tZUNsaWVudCogY2hyb21lQ2xpZW50LCBDb250
ZXh0TWVudUNsaWVudCogY29udGV4dE1lbnVDbGllbnQsIEVkaQogICAgICwgbV9hcmVNZW1vcnlD
YWNoZUNsaWVudENhbGxzRW5hYmxlZCh0cnVlKQogICAgICwgbV9tZWRpYVZvbHVtZSgxKQogICAg
ICwgbV9qYXZhU2NyaXB0VVJMc0FyZUFsbG93ZWQodHJ1ZSkKLSNpZiBFTkFCTEUoSU5TUEVDVE9S
KQotICAgICwgbV9wYXJlbnRJbnNwZWN0b3JDb250cm9sbGVyKDApCi0jZW5kaWYKICAgICAsIG1f
ZGlkTG9hZFVzZXJTdHlsZVNoZWV0KGZhbHNlKQogICAgICwgbV91c2VyU3R5bGVTaGVldE1vZGlm
aWNhdGlvblRpbWUoMCkKICAgICAsIG1fZ3JvdXAoMCkKQEAgLTE5Niw4ICsxOTMsNiBAQCBQYWdl
Ojp+UGFnZSgpCiAKICAgICBtX2VkaXRvckNsaWVudC0+cGFnZURlc3Ryb3llZCgpOwogI2lmIEVO
QUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKG1fcGFyZW50SW5zcGVjdG9yQ29udHJvbGxlcikKLSAg
ICAgICAgbV9wYXJlbnRJbnNwZWN0b3JDb250cm9sbGVyLT5wYWdlRGVzdHJveWVkKCk7CiAgICAg
bV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0ZWRQYWdlRGVzdHJveWVkKCk7CiAjZW5kaWYK
IApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL1BhZ2UuaCBiL1dlYkNvcmUvcGFnZS9QYWdlLmgK
aW5kZXggZjY5ODI4Ny4uOTRlNmRkNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL1BhZ2UuaAor
KysgYi9XZWJDb3JlL3BhZ2UvUGFnZS5oCkBAIC0xNDksMTEgKzE0OSw2IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICNlbmRpZgogICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3MoKSBjb25zdCB7IHJl
dHVybiBtX3NldHRpbmdzLmdldCgpOyB9CiAgICAgICAgIFByb2dyZXNzVHJhY2tlciogcHJvZ3Jl
c3MoKSBjb25zdCB7IHJldHVybiBtX3Byb2dyZXNzLmdldCgpOyB9Ci0KLSNpZiBFTkFCTEUoSU5T
UEVDVE9SKQotICAgICAgICB2b2lkIHNldFBhcmVudEluc3BlY3RvckNvbnRyb2xsZXIoSW5zcGVj
dG9yQ29udHJvbGxlciogY29udHJvbGxlcikgeyBtX3BhcmVudEluc3BlY3RvckNvbnRyb2xsZXIg
PSBjb250cm9sbGVyOyB9Ci0gICAgICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIHBhcmVudEluc3Bl
Y3RvckNvbnRyb2xsZXIoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudEluc3BlY3RvckNvbnRyb2xs
ZXI7IH0KLSNlbmRpZgogICAgICAgICAKICAgICAgICAgdm9pZCBzZXRUYWJLZXlDeWNsZXNUaHJv
dWdoRWxlbWVudHMoYm9vbCBiKSB7IG1fdGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzID0gYjsg
fQogICAgICAgICBib29sIHRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cygpIGNvbnN0IHsgcmV0
dXJuIG1fdGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzOyB9CkBAIC0yODYsMTAgKzI4MSw2IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBib29sIG1famF2YVNjcmlwdFVSTHNBcmVB
bGxvd2VkOwogCi0jaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICAgICAgSW5zcGVjdG9yQ29udHJv
bGxlciogbV9wYXJlbnRJbnNwZWN0b3JDb250cm9sbGVyOwotI2VuZGlmCi0KICAgICAgICAgU3Ry
aW5nIG1fdXNlclN0eWxlU2hlZXRQYXRoOwogICAgICAgICBtdXRhYmxlIFN0cmluZyBtX3VzZXJT
dHlsZVNoZWV0OwogICAgICAgICBtdXRhYmxlIGJvb2wgbV9kaWRMb2FkVXNlclN0eWxlU2hlZXQ7
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL0NvbnRleHRNZW51LmNwcCBiL1dlYkNvcmUv
cGxhdGZvcm0vQ29udGV4dE1lbnUuY3BwCmluZGV4IDI4M2FhNTYuLjAwMjJhNDcgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1lbnUuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vQ29udGV4dE1lbnUuY3BwCkBAIC0zNTksNiArMzU5LDkgQEAgdm9pZCBDb250ZXh0TWVudTo6
cG9wdWxhdGUoKQogICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oU3BlZWNoTWVudUl0ZW0pOwog
I2VuZGlmICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgfSBlbHNlIHsKKyNpZiBFTkFCTEUo
SU5TUEVDVE9SKQorICAgICAgICAgICAgICAgIGlmICghKGZyYW1lLT5wYWdlKCkgJiYgZnJhbWUt
PnBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5oYXNJbnNwZWN0b3JGcm9udGVuZENsaWVu
dCgpKSkgeworI2VuZGlmCiAjaWYgUExBVEZPUk0oR1RLKQogICAgICAgICAgICAgICAgIGFwcGVu
ZEl0ZW0oQmFja0l0ZW0pOwogICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oRm9yd2FyZEl0ZW0p
OwpAQCAtMzc4LDYgKzM4MSw5IEBAIHZvaWQgQ29udGV4dE1lbnU6OnBvcHVsYXRlKCkKICAgICAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oUmVsb2FkSXRl
bSk7CiAjZW5kaWYKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorICAgICAgICAgICAgICAgIH0KKyNl
bmRpZgogCiAgICAgICAgICAgICAgICAgaWYgKGZyYW1lLT5wYWdlKCkgJiYgZnJhbWUgIT0gZnJh
bWUtPnBhZ2UoKS0+bWFpbkZyYW1lKCkpCiAgICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0o
T3BlbkZyYW1lSXRlbSk7CkBAIC01NTAsNyArNTU2LDYgQEAgdm9pZCBDb250ZXh0TWVudTo6YWRk
SW5zcGVjdEVsZW1lbnRJdGVtKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQ29udGV4dE1lbnVJ
dGVtIEluc3BlY3RFbGVtZW50SXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdJbnNw
ZWN0RWxlbWVudCwgY29udGV4dE1lbnVJdGVtVGFnSW5zcGVjdEVsZW1lbnQoKSk7Ci0gICAgYXBw
ZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgpKTsKICAgICBhcHBlbmRJdGVtKEluc3BlY3RFbGVtZW50
SXRlbSk7CiB9CiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGU2
M2ZjYjUuLjIxNTlhNTMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysr
IGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDEwLTAzLTEx
ICBZdXJ5IFNlbWlraGF0c2t5IDx5dXJ5c0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW50cm9kdWNlIEluc3BlY3RvckZyb250
ZW5kQ2xpZW50IHRoYXQgcHJvdmlkZXMgSW5zcGVjdG9yRnJvbnRlbmQgd2l0aCBhbiBpbnRlcmZh
Y2UgdG8gdGhlIGVtYmVkZGVyLiBJbnNwZWN0b3JDbGllbnQgbm93IHNlcnZlcyBhcyBhIGRlbGVn
YXRlIGZvciBJbnNwZWN0b3JDb250cm9sbGVyIGFuZCBkb2VzIG5vdCBjb250YWluIG1ldGhvZHMg
Zm9yIG1hbmFnaW5nIGluc3BlY3RvciBmcm9udGVuZCB3aW5kb3cuIFRoYXQgYWxsb3dzIHRvIGNy
ZWF0ZSByZW1vdGUgSW5zcGVjdG9yRnJvbnRlbmRIb3N0LgorCisgICAgICAgIEludHJvZHVjZSBJ
bnNwZWN0b3JGcm9udGVuZENsaWVudCB0aGF0IHdvdWxkIHByb3ZpZGUgSW5zcGVjdG9yRnJvbnRl
bmQgd2l0aCBhbiBpbnRlcmZhY2UgdG8gdGhlIGVtYmVkZGVyCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNTAzNgorCisgICAgICAgICogc3JjL0luc3Bl
Y3RvckNsaWVudEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JDbGllbnRJbXBs
OjpvcGVuSW5zcGVjdG9yRnJvbnRlbmQpOgorICAgICAgICAqIHNyYy9JbnNwZWN0b3JDbGllbnRJ
bXBsLmg6CisgICAgICAgICogc3JjL1dlYkRldlRvb2xzQWdlbnRJbXBsLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudEltcGw6OmF0dGFjaCk6CisgICAgICAgIChXZWJLaXQ6
OldlYkRldlRvb2xzQWdlbnRJbXBsOjpkaWRDb21taXRQcm92aXNpb25hbExvYWQpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6Y3JlYXRlSW5zcGVjdG9yRnJvbnRlbmRQ
cm94eSk6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjpzZXRJbnNwZWN0
b3JGcm9udGVuZFByb3h5VG9JbnNwZWN0b3JDb250cm9sbGVyKToKKyAgICAgICAgKiBzcmMvV2Vi
RGV2VG9vbHNBZ2VudEltcGwuaDoKKyAgICAgICAgKiBzcmMvV2ViRGV2VG9vbHNGcm9udGVuZElt
cGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6V2ViRGV2
VG9vbHNGcm9udGVuZEltcGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0Zyb250ZW5k
SW1wbDo6anNCcmluZ1RvRnJvbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0Zyb250
ZW5kSW1wbDo6anNJbnNwZWN0ZWRVUkxDaGFuZ2VkKToKKyAgICAgICAgKiBzcmMvV2ViRGV2VG9v
bHNGcm9udGVuZEltcGwuaDoKKyAgICAgICAgKiBzcmMvanMvSW5qZWN0RGlzcGF0Y2guanM6Cisg
ICAgICAgIChjbG9zZSk6CisKIDIwMTAtMDMtMTYgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgpkaWZm
IC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9JbnNwZWN0b3JDbGllbnRJbXBsLmNwcCBiL1dl
YktpdC9jaHJvbWl1bS9zcmMvSW5zcGVjdG9yQ2xpZW50SW1wbC5jcHAKaW5kZXggNTQ1NTBkMS4u
ZjY5ZWY3MiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9JbnNwZWN0b3JDbGllbnRJ
bXBsLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0luc3BlY3RvckNsaWVudEltcGwuY3Bw
CkBAIC02Myw0NiArNjMsOCBAQCB2b2lkIEluc3BlY3RvckNsaWVudEltcGw6Omluc3BlY3RvckRl
c3Ryb3llZCgpCiAgICAgLy8gT3VyIGxpZmV0aW1lIGlzIGJvdW5kIHRvIHRoZSBXZWJWaWV3SW1w
bC4KIH0KIAotUGFnZSogSW5zcGVjdG9yQ2xpZW50SW1wbDo6Y3JlYXRlUGFnZSgpCit2b2lkIElu
c3BlY3RvckNsaWVudEltcGw6Om9wZW5JbnNwZWN0b3JGcm9udGVuZChJbnNwZWN0b3JDb250cm9s
bGVyKikKIHsKLSAgICAvLyBUaGlzIG1ldGhvZCBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIGluIENo
cm9tZSBhcyBpbnNwZWN0b3IgZnJvbnQtZW5kIGxpdmVzCi0gICAgLy8gaW4gYSBzZXBhcmF0ZSBw
cm9jZXNzLgotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAwOwotfQotCi12
b2lkIEluc3BlY3RvckNsaWVudEltcGw6OnNob3dXaW5kb3coKQotewotICAgIEFTU0VSVChtX2lu
c3BlY3RlZFdlYlZpZXctPmRldlRvb2xzQWdlbnRQcml2YXRlKCkpOwotICAgIG1faW5zcGVjdGVk
V2ViVmlldy0+cGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnNldFdpbmRvd1Zpc2libGUo
dHJ1ZSk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ2xpZW50SW1wbDo6Y2xvc2VXaW5kb3coKQotewot
ICAgIGlmIChtX2luc3BlY3RlZFdlYlZpZXctPnBhZ2UoKSkKLSAgICAgICAgbV9pbnNwZWN0ZWRX
ZWJWaWV3LT5wYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0V2luZG93VmlzaWJsZShm
YWxzZSk7Ci19Ci0KLWJvb2wgSW5zcGVjdG9yQ2xpZW50SW1wbDo6d2luZG93VmlzaWJsZSgpCi17
Ci0gICAgQVNTRVJUKG1faW5zcGVjdGVkV2ViVmlldy0+ZGV2VG9vbHNBZ2VudFByaXZhdGUoKSk7
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEluc3BlY3RvckNsaWVudEltcGw6OmF0dGFj
aFdpbmRvdygpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzCi19Ci0KLXZvaWQgSW5z
cGVjdG9yQ2xpZW50SW1wbDo6ZGV0YWNoV2luZG93KCkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVt
ZW50IHRoaXMKLX0KLQotdm9pZCBJbnNwZWN0b3JDbGllbnRJbXBsOjpzZXRBdHRhY2hlZFdpbmRv
d0hlaWdodCh1bnNpZ25lZCBpbnQgaGVpZ2h0KQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQg
dGhpcwotICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKIHN0YXRpYyB2b2lkIGludmFsaWRhdGVO
b2RlQm91bmRpbmdSZWN0KFdlYlZpZXdJbXBsKiB3ZWJWaWV3KQpAQCAtMTMwLDIzICs5Miw2IEBA
IHZvaWQgSW5zcGVjdG9yQ2xpZW50SW1wbDo6aGlkZUhpZ2hsaWdodCgpCiAgICAgaW52YWxpZGF0
ZU5vZGVCb3VuZGluZ1JlY3QobV9pbnNwZWN0ZWRXZWJWaWV3KTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JDbGllbnRJbXBsOjppbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYgbmV3VVJMKQot
ewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcwotfQotCi1TdHJpbmcgSW5zcGVjdG9yQ2xp
ZW50SW1wbDo6bG9jYWxpemVkU3RyaW5nc1VSTCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBJbnNwZWN0b3JDbGllbnRJbXBsOjpo
aWRkZW5QYW5lbHMoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuICIiOwot
fQotCiB2b2lkIEluc3BlY3RvckNsaWVudEltcGw6OnBvcHVsYXRlU2V0dGluZyhjb25zdCBTdHJp
bmcmIGtleSwgU3RyaW5nKiB2YWx1ZSkKIHsKICAgICBsb2FkU2V0dGluZ3MoKTsKQEAgLTE2MSwx
MSArMTA2LDYgQEAgdm9pZCBJbnNwZWN0b3JDbGllbnRJbXBsOjpzdG9yZVNldHRpbmcoY29uc3Qg
U3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgc2F2ZVNldHRpbmdzKCk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yQ2xpZW50SW1wbDo6aW5zcGVjdG9yV2luZG93T2JqZWN0Q2xlYXJl
ZCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQogdm9pZCBJbnNwZWN0b3JDbGllbnRJ
bXBsOjpsb2FkU2V0dGluZ3MoKQogewogICAgIGlmIChtX3NldHRpbmdzKQpkaWZmIC0tZ2l0IGEv
V2ViS2l0L2Nocm9taXVtL3NyYy9JbnNwZWN0b3JDbGllbnRJbXBsLmggYi9XZWJLaXQvY2hyb21p
dW0vc3JjL0luc3BlY3RvckNsaWVudEltcGwuaAppbmRleCA2ZjdmOGIxLi5jY2JjZWY3IDEwMDY0
NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL0luc3BlY3RvckNsaWVudEltcGwuaAorKysgYi9X
ZWJLaXQvY2hyb21pdW0vc3JjL0luc3BlY3RvckNsaWVudEltcGwuaApAQCAtNDUsMjUgKzQ1LDE1
IEBAIHB1YmxpYzoKIAogICAgIC8vIEluc3BlY3RvckNsaWVudCBtZXRob2RzOgogICAgIHZpcnR1
YWwgdm9pZCBpbnNwZWN0b3JEZXN0cm95ZWQoKTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlBhZ2Uq
IGNyZWF0ZVBhZ2UoKTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlN0cmluZyBsb2NhbGl6ZWRTdHJp
bmdzVVJMKCk7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpTdHJpbmcgaGlkZGVuUGFuZWxzKCk7Ci0g
ICAgdmlydHVhbCB2b2lkIHNob3dXaW5kb3coKTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xvc2VXaW5k
b3coKTsKLSAgICB2aXJ0dWFsIGJvb2wgd2luZG93VmlzaWJsZSgpOwotICAgIHZpcnR1YWwgdm9p
ZCBhdHRhY2hXaW5kb3coKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoV2luZG93KCk7Ci0gICAg
dmlydHVhbCB2b2lkIHNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCk7Cisg
ICAgdmlydHVhbCB2b2lkIG9wZW5JbnNwZWN0b3JGcm9udGVuZChXZWJDb3JlOjpJbnNwZWN0b3JD
b250cm9sbGVyKik7CiAgICAgdmlydHVhbCB2b2lkIGhpZ2hsaWdodChXZWJDb3JlOjpOb2RlKik7
CiAgICAgdmlydHVhbCB2b2lkIGhpZGVIaWdobGlnaHQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgaW5z
cGVjdGVkVVJMQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpTdHJpbmcmIG5ld1VSTCk7CiAgICAgdmly
dHVhbCB2b2lkIHBvcHVsYXRlU2V0dGluZygKICAgICAgICAgY29uc3QgV2ViQ29yZTo6U3RyaW5n
JiBrZXksCiAgICAgICAgIFdlYkNvcmU6OlN0cmluZyogdmFsdWUpOwogICAgIHZpcnR1YWwgdm9p
ZCBzdG9yZVNldHRpbmcoCiAgICAgICAgIGNvbnN0IFdlYkNvcmU6OlN0cmluZyYga2V5LAogICAg
ICAgICBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIHZhbHVlKTsKLSAgICB2aXJ0dWFsIHZvaWQgaW5z
cGVjdG9yV2luZG93T2JqZWN0Q2xlYXJlZCgpOwogCiBwcml2YXRlOgogICAgIHZvaWQgbG9hZFNl
dHRpbmdzKCk7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzQWdl
bnRJbXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuY3Bw
CmluZGV4IGFmNTA2MmEuLjIxZjMxZjQgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViRGV2VG9vbHNBZ2VudEltcGwuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2
VG9vbHNBZ2VudEltcGwuY3BwCkBAIC0xNjksNyArMTY5LDcgQEAgdm9pZCBXZWJEZXZUb29sc0Fn
ZW50SW1wbDo6YXR0YWNoKCkKICAgICAgICAgbmV3IERlYnVnZ2VyQWdlbnRJbXBsKG1fd2ViVmll
d0ltcGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2RlYnVnZ2VyQWdlbnREZWxl
Z2F0ZVN0dWIuZ2V0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzKSk7Ci0g
ICAgcmVzZXRJbnNwZWN0b3JGcm9udGVuZFByb3h5KCk7CisgICAgY3JlYXRlSW5zcGVjdG9yRnJv
bnRlbmRQcm94eSgpOwogCiAgICAgLy8gQWxsb3cgY29udHJvbGxlciB0byBzZW5kIG1lc3NhZ2Vz
IHRvIHRoZSBmcm9udGVuZC4KICAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBpYyA9IGluc3BlY3Rv
ckNvbnRyb2xsZXIoKTsKQEAgLTE4NSw3ICsxODUsNyBAQCB2b2lkIFdlYkRldlRvb2xzQWdlbnRJ
bXBsOjphdHRhY2goKQogICAgICAgICB9CiAgICAgfQogCi0gICAgaWMtPnNldFdpbmRvd1Zpc2li
bGUodHJ1ZSwgZmFsc2UpOworICAgIHNldEluc3BlY3RvckZyb250ZW5kUHJveHlUb0luc3BlY3Rv
ckNvbnRyb2xsZXIoKTsKICAgICBtX2F0dGFjaGVkID0gdHJ1ZTsKIH0KIApAQCAtMjE2LDcgKzIx
Niw2IEBAIHZvaWQgV2ViRGV2VG9vbHNBZ2VudEltcGw6OmRpZENvbW1pdFByb3Zpc2lvbmFsTG9h
ZChXZWJGcmFtZUltcGwqIHdlYmZyYW1lLCBib29sCiAgICAgICAgIGRzLT51bnJlYWNoYWJsZVVS
TCgpIDoKICAgICAgICAgcmVxdWVzdC51cmwoKTsKICAgICBpZiAoIXdlYmZyYW1lLT5wYXJlbnQo
KSkgewotICAgICAgICByZXNldEluc3BlY3RvckZyb250ZW5kUHJveHkoKTsKICAgICAgICAgbV90
b29sc0FnZW50RGVsZWdhdGVTdHViLT5mcmFtZU5hdmlnYXRlKFdlYkNvcmU6OktVUkwodXJsKS5z
dHJpbmcoKSk7CiAgICAgICAgIFNldEFwdUFnZW50RW5hYmxlZEluVXRpbGl0eUNvbnRleHQobV91
dGlsaXR5Q29udGV4dCwgbV9hcHVBZ2VudEVuYWJsZWQpOwogICAgIH0KQEAgLTM1Nyw3ICszNTYs
NyBAQCB2ODo6TG9jYWw8djg6Ok9iamVjdD4gV2ViRGV2VG9vbHNBZ2VudEltcGw6OmNyZWF0ZUlu
c3BlY3RvckJhY2tlbmRWOFdyYXBwZXIoKQogICAgIHJldHVybiBpbnN0YW5jZTsKIH0KIAotdm9p
ZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6cmVzZXRJbnNwZWN0b3JGcm9udGVuZFByb3h5KCkKK3Zv
aWQgV2ViRGV2VG9vbHNBZ2VudEltcGw6OmNyZWF0ZUluc3BlY3RvckZyb250ZW5kUHJveHkoKQog
ewogICAgIGRpc3Bvc2VVdGlsaXR5Q29udGV4dCgpOwogICAgIG1fdXRpbGl0eUNvbnRleHQgPSB2
ODo6Q29udGV4dDo6TmV3KCk7CkBAIC0zNjgsOCArMzY3LDE2IEBAIHZvaWQgV2ViRGV2VG9vbHNB
Z2VudEltcGw6OnJlc2V0SW5zcGVjdG9yRnJvbnRlbmRQcm94eSgpCiAgICAgdjg6OkNvbnRleHQ6
OlNjb3BlIGNvbnRleHRTY29wZShtX3V0aWxpdHlDb250ZXh0KTsKICAgICBTY3JpcHRTdGF0ZSog
c3RhdGUgPSBTY3JpcHRTdGF0ZTo6Zm9yQ29udGV4dCgKICAgICAgICAgdjg6OkxvY2FsPHY4OjpD
b250ZXh0Pjo6TmV3KG1fdXRpbGl0eUNvbnRleHQpKTsKK30KKwordm9pZCBXZWJEZXZUb29sc0Fn
ZW50SW1wbDo6c2V0SW5zcGVjdG9yRnJvbnRlbmRQcm94eVRvSW5zcGVjdG9yQ29udHJvbGxlcigp
Cit7CisgICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOworICAgIFNjcmlwdFN0YXRlKiBzdGF0ZSA9
IFNjcmlwdFN0YXRlOjpmb3JDb250ZXh0KAorICAgICAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+
OjpOZXcobV91dGlsaXR5Q29udGV4dCkpOwogICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIGljID0g
aW5zcGVjdG9yQ29udHJvbGxlcigpOwotICAgIGljLT5zZXRGcm9udGVuZFByb3h5T2JqZWN0KHN0
YXRlLCBTY3JpcHRPYmplY3Qoc3RhdGUsIG1fdXRpbGl0eUNvbnRleHQtPkdsb2JhbCgpKSk7Cisg
ICAgaWMtPnNldEZyb250ZW5kKG5ldyBJbnNwZWN0b3JGcm9udGVuZCgKKyAgICAgICAgU2NyaXB0
T2JqZWN0KHN0YXRlLCBtX3V0aWxpdHlDb250ZXh0LT5HbG9iYWwoKSkpKTsKIH0KIAogdm9pZCBX
ZWJEZXZUb29sc0FnZW50SW1wbDo6c2V0QXB1QWdlbnRFbmFibGVkKGJvb2wgZW5hYmxlZCkKZGlm
ZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuaCBiL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuaAppbmRleCAyMDdiYWRhLi40
NTVkY2VmIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzQWdlbnRJ
bXBsLmgKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5oCkBA
IC0xMDksNyArMTA5LDggQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgY29tcGlsZVV0aWxpdHlTY3Jp
cHRzKCk7CiAgICAgdm9pZCBpbml0RGV2VG9vbHNBZ2VudEhvc3QoKTsKLSAgICB2b2lkIHJlc2V0
SW5zcGVjdG9yRnJvbnRlbmRQcm94eSgpOworICAgIHZvaWQgY3JlYXRlSW5zcGVjdG9yRnJvbnRl
bmRQcm94eSgpOworICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRQcm94eVRvSW5zcGVjdG9y
Q29udHJvbGxlcigpOwogICAgIHZvaWQgc2V0QXB1QWdlbnRFbmFibGVkKGJvb2wgZW5hYmxlZCk7
CiAKICAgICBXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVy
KCk7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzRnJvbnRlbmRJ
bXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNGcm9udGVuZEltcGwuY3Bw
CmluZGV4IGQ1YjhlYmMuLjhhMmY4MWMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViRGV2VG9vbHNGcm9udGVuZEltcGwuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
RGV2VG9vbHNGcm9udGVuZEltcGwuY3BwCkBAIC0xNTYsOCArMTU2LDExIEBAIFdlYkRldlRvb2xz
RnJvbnRlbmRJbXBsOjpXZWJEZXZUb29sc0Zyb250ZW5kSW1wbCgKICAgICAgICAgInNldFNldHRp
bmciLAogICAgICAgICBXZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6anNTZXRTZXR0aW5nKTsKICAg
ICBkZXZUb29sc0hvc3QuYWRkUHJvdG9GdW5jdGlvbigKLSAgICAgICAgIndpbmRvd1VubG9hZGlu
ZyIsCi0gICAgICAgIFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjpqc1dpbmRvd1VubG9hZGluZyk7
CisgICAgICAgICJicmluZ1RvRnJvbnQiLAorICAgICAgICBXZWJEZXZUb29sc0Zyb250ZW5kSW1w
bDo6anNCcmluZ1RvRnJvbnQpOworICAgIGRldlRvb2xzSG9zdC5hZGRQcm90b0Z1bmN0aW9uKAor
ICAgICAgICAiaW5zcGVjdGVkVVJMQ2hhbmdlZCIsCisgICAgICAgIFdlYkRldlRvb2xzRnJvbnRl
bmRJbXBsOjpqc0luc3BlY3RlZFVSTENoYW5nZWQpOwogICAgIGRldlRvb2xzSG9zdC5hZGRQcm90
b0Z1bmN0aW9uKAogICAgICAgICAic2hvd0NvbnRleHRNZW51IiwKICAgICAgICAgV2ViRGV2VG9v
bHNGcm9udGVuZEltcGw6OmpzU2hvd0NvbnRleHRNZW51KTsKQEAgLTM0Niw5ICszNDksMTMgQEAg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjpqc0RlYnVnZ2Vy
UGF1c2VTY3JpcHQoY29uc3Qgdjg6OkEKICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogfQog
Ci12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gV2ViRGV2VG9vbHNGcm9udGVuZEltcGw6OmpzV2luZG93
VW5sb2FkaW5nKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gV2ViRGV2VG9vbHNGcm9udGVuZEltcGw6OmpzQnJpbmdUb0Zyb250KGNvbnN0IHY4OjpBcmd1
bWVudHMmIGFyZ3MpCit7CisgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKK30KKwordjg6Okhh
bmRsZTx2ODo6VmFsdWU+IFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjpqc0luc3BlY3RlZFVSTENo
YW5nZWQoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsKLSAgICAvLyBUT0RPKHBmZWxkbWFu
KTogSW1wbGVtZW50IHRoaXMuCiAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKIH0KIApkaWZm
IC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0Zyb250ZW5kSW1wbC5oIGIv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0Zyb250ZW5kSW1wbC5oCmluZGV4IGJhMDAx
M2IuLjY1OTE2OTMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNG
cm9udGVuZEltcGwuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzRnJvbnRl
bmRJbXBsLmgKQEAgLTE0Miw3ICsxNDIsOCBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4ganNTZXR0aW5nKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpOwogICAg
IHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4ganNTZXRTZXR0aW5nKGNvbnN0IHY4OjpBcmd1
bWVudHMmIGFyZ3MpOwogICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4ganNEZWJ1Z2dl
clBhdXNlU2NyaXB0KGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpOwotICAgIHN0YXRpYyB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4ganNXaW5kb3dVbmxvYWRpbmcoY29uc3Qgdjg6OkFyZ3VtZW50cyYg
YXJncyk7CisgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBqc0JyaW5nVG9Gcm9udChj
b25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKTsKKyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IGpzSW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKTsKICAg
ICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGpzU2hvd0NvbnRleHRNZW51KGNvbnN0IHY4
OjpBcmd1bWVudHMmIGFyZ3MpOwogICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4ganND
YW5BdHRhY2hXaW5kb3coY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncyk7CiAKZGlmZiAtLWdpdCBh
L1dlYktpdC9jaHJvbWl1bS9zcmMvanMvSW5qZWN0RGlzcGF0Y2guanMgYi9XZWJLaXQvY2hyb21p
dW0vc3JjL2pzL0luamVjdERpc3BhdGNoLmpzCmluZGV4IGUwNzBjNDIuLjY4YmNkYmQgMTAwNjQ0
Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvSW5qZWN0RGlzcGF0Y2guanMKKysrIGIvV2Vi
S2l0L2Nocm9taXVtL3NyYy9qcy9JbmplY3REaXNwYXRjaC5qcwpAQCAtMTA0LDMgKzEwNCw3IEBA
IGZ1bmN0aW9uIGRpc3BhdGNoKG1ldGhvZCwgdmFyX2FyZ3MpIHsKICAgICB2YXIgY2FsbCA9IEpT
T04uc3RyaW5naWZ5KGFyZ3MpOwogICAgIERldlRvb2xzQWdlbnRIb3N0LmRpc3BhdGNoKGNhbGwp
OwogfTsKKworZnVuY3Rpb24gY2xvc2UoKSB7CisgICAgLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVk
IHdoZW4gSW5zcGVjdG9yRnJvbnRlbmQgY2xvc2VzIGluIGxheW91dCB0ZXN0cy4KK30KZGlmZiAt
LWdpdCBhL1dlYktpdC9ndGsvQ2hhbmdlTG9nIGIvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKaW5kZXgg
NTE5Y2FhNS4uNTZlZWJmNCAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKKysrIGIv
V2ViS2l0L2d0ay9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNCBAQAorMjAxMC0wMy0xMCAgWXVyeSBT
ZW1pa2hhdHNreSA8eXVyeXNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEludHJvZHVjZSBJbnNwZWN0b3JGcm9udGVuZENsaWVu
dCB0aGF0IHByb3ZpZGVzIEluc3BlY3RvckZyb250ZW5kIHdpdGggYW4gaW50ZXJmYWNlIHRvIHRo
ZSBlbWJlZGRlci4gSW5zcGVjdG9yQ2xpZW50IG5vdyBzZXJ2ZXMgYXMgYSBkZWxlZ2F0ZSBmb3Ig
SW5zcGVjdG9yQ29udHJvbGxlciBhbmQgZG9lcyBub3QgY29udGFpbiBtZXRob2RzIGZvciBtYW5h
Z2luZyBpbnNwZWN0b3IgZnJvbnRlbmQgd2luZG93LiBUaGF0IGFsbG93cyB0byBjcmVhdGUgcmVt
b3RlIEluc3BlY3RvckZyb250ZW5kSG9zdC4KKworICAgICAgICBJbnRyb2R1Y2UgSW5zcGVjdG9y
RnJvbnRlbmRDbGllbnQgdGhhdCB3b3VsZCBwcm92aWRlIEluc3BlY3RvckZyb250ZW5kIHdpdGgg
YW4gaW50ZXJmYWNlIHRvIHRoZSBlbWJlZGRlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzUwMzYKKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0lu
c3BlY3RvckNsaWVudEd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6Om5vdGlmeVdlYlZpZXdEZXN0
cm95ZWQpOgorICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JDbGllbnQ6Okluc3BlY3RvckNsaWVu
dCk6CisgICAgICAgIChXZWJLaXQ6Okluc3BlY3RvckNsaWVudDo6aW5zcGVjdG9yRGVzdHJveWVk
KToKKyAgICAgICAgKFdlYktpdDo6SW5zcGVjdG9yQ2xpZW50OjpvcGVuSW5zcGVjdG9yRnJvbnRl
bmQpOgorICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JDbGllbnQ6OmhpZ2hsaWdodCk6CisgICAg
ICAgIChXZWJLaXQ6Okluc3BlY3RvckNsaWVudDo6aGlkZUhpZ2hsaWdodCk6CisgICAgICAgIChX
ZWJLaXQ6Okluc3BlY3RvckNsaWVudDo6cG9wdWxhdGVTZXR0aW5nKToKKyAgICAgICAgKFdlYktp
dDo6SW5zcGVjdG9yQ2xpZW50OjpzdG9yZVNldHRpbmcpOgorICAgICAgICAoV2ViS2l0OjpJbnNw
ZWN0b3JGcm9udGVuZENsaWVudDo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQpOgorICAgICAgICAo
V2ViS2l0OjpJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6fkluc3BlY3RvckZyb250ZW5kQ2xpZW50
KToKKyAgICAgICAgKFdlYktpdDo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmRlc3Ryb3lJbnNw
ZWN0b3JXaW5kb3cpOgorICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6
bG9jYWxpemVkU3RyaW5nc1VSTCk6CisgICAgICAgIChXZWJLaXQ6Okluc3BlY3RvckZyb250ZW5k
Q2xpZW50OjpoaWRkZW5QYW5lbHMpOgorICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JGcm9udGVu
ZENsaWVudDo6YnJpbmdUb0Zyb250KToKKyAgICAgICAgKFdlYktpdDo6SW5zcGVjdG9yRnJvbnRl
bmRDbGllbnQ6OmNsb3NlV2luZG93KToKKyAgICAgICAgKFdlYktpdDo6SW5zcGVjdG9yRnJvbnRl
bmRDbGllbnQ6OmF0dGFjaFdpbmRvdyk6CisgICAgICAgIChXZWJLaXQ6Okluc3BlY3RvckZyb250
ZW5kQ2xpZW50OjpkZXRhY2hXaW5kb3cpOgorICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JGcm9u
dGVuZENsaWVudDo6c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQpOgorICAgICAgICAoV2ViS2l0OjpJ
bnNwZWN0b3JGcm9udGVuZENsaWVudDo6aW5zcGVjdGVkVVJMQ2hhbmdlZCk6CisgICAgICAgICog
V2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50R3RrLmg6CisKIDIwMTAtMDMtMTUgIEpvYW5t
YXJpZSBEaWdncyAgPGpvYW5tYXJpZS5kaWdnc0BnbWFpbC5jb20+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgSG9sZ2VyIEZyZXl0aGVyLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay9XZWJDb3JlU3Vw
cG9ydC9JbnNwZWN0b3JDbGllbnRHdGsuY3BwIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9J
bnNwZWN0b3JDbGllbnRHdGsuY3BwCmluZGV4IDk5YmM2MjcuLjc3NWUzNTAgMTAwNjQ0Ci0tLSBh
L1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50R3RrLmNwcAorKysgYi9X
ZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudEd0ay5jcHAKQEAgLTMxLDY3
ICszMSw0MCBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7
CiAKLXN0YXRpYyB2b2lkIG5vdGlmeVdlYlZpZXdEZXN0cm95ZWQoV2ViS2l0V2ViVmlldyogd2Vi
VmlldywgSW5zcGVjdG9yQ2xpZW50KiBpbnNwZWN0b3JDbGllbnQpCitzdGF0aWMgdm9pZCBub3Rp
ZnlXZWJWaWV3RGVzdHJveWVkKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIEluc3BlY3RvckZyb250
ZW5kQ2xpZW50KiBpbnNwZWN0b3JGcm9udGVuZENsaWVudCkKIHsKLSAgICBpbnNwZWN0b3JDbGll
bnQtPndlYlZpZXdEZXN0cm95ZWQoKTsKKyAgICBpbnNwZWN0b3JGcm9udGVuZENsaWVudC0+ZGVz
dHJveUluc3BlY3RvcldpbmRvdygpOwogfQogCiBJbnNwZWN0b3JDbGllbnQ6Okluc3BlY3RvckNs
aWVudChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQotICAgIDogbV93ZWJWaWV3KDApCi0gICAgLCBt
X2luc3BlY3RlZFdlYlZpZXcod2ViVmlldykKLSAgICAsIG1fd2ViSW5zcGVjdG9yKDApCisgICAg
OiBtX2luc3BlY3RlZFdlYlZpZXcod2ViVmlldykKIHt9CiAKIHZvaWQgSW5zcGVjdG9yQ2xpZW50
OjppbnNwZWN0b3JEZXN0cm95ZWQoKQogewotICAgIGlmIChtX3dlYkluc3BlY3RvcikKLSAgICAg
ICAgZ19vYmplY3RfdW5yZWYobV93ZWJJbnNwZWN0b3IpOwotCiAgICAgZGVsZXRlIHRoaXM7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yQ2xpZW50Ojp3ZWJWaWV3RGVzdHJveWVkKCkKLXsKLSAgICBtX3dl
YlZpZXcgPSAwOwotICAgIGNvcmUobV9pbnNwZWN0ZWRXZWJWaWV3KS0+aW5zcGVjdG9yQ29udHJv
bGxlcigpLT5wYWdlRGVzdHJveWVkKCk7Ci0KLSAgICAvLyBjcmVhdGVQYWdlIHdpbGwgYmUgY2Fs
bGVkIGFnYWluLCBpZiB0aGUgdXNlciBjaG9vc2VzIHRvIGluc3BlY3QKLSAgICAvLyBzb21ldGhp
bmcgZWxzZSwgYW5kIHRoZSBpbnNwZWN0b3Igd2lsbCBiZSByZWZlcmVuY2VkIGFnYWluLAotICAg
IC8vIHRoZXJlLgotICAgIGdfb2JqZWN0X3VucmVmKG1fd2ViSW5zcGVjdG9yKTsKLSAgICBtX3dl
Ykluc3BlY3RvciA9IDA7Ci19Ci0KLVBhZ2UqIEluc3BlY3RvckNsaWVudDo6Y3JlYXRlUGFnZSgp
Cit2b2lkIEluc3BlY3RvckNsaWVudDo6b3Blbkluc3BlY3RvckZyb250ZW5kKEluc3BlY3RvckNv
bnRyb2xsZXIqIGNvbnRyb2xsZXIpCiB7Ci0gICAgaWYgKG1fd2ViVmlldykgewotICAgICAgICBn
Ym9vbGVhbiBoYW5kbGVkID0gRkFMU0U7Ci0gICAgICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZSht
X3dlYkluc3BlY3RvciwgImRlc3Ryb3kiLCAmaGFuZGxlZCk7Ci0KLSAgICAgICAgLyogd2UgY2Fu
IG5vdyBkaXNwb3NlIG91ciBvd24gcmVmZXJlbmNlICovCi0gICAgICAgIGdfb2JqZWN0X3VucmVm
KG1fd2ViSW5zcGVjdG9yKTsKLSAgICB9Ci0KICAgICAvLyBUaGlzIGdfb2JqZWN0X2dldCB3aWxs
IHJlZiB0aGUgaW5zcGVjdG9yLiBXZSdyZSBub3QgZG9pbmcgYW4KICAgICAvLyB1bnJlZiBpZiB0
aGlzIG1ldGhvZCBzdWNjZWVkcyBiZWNhdXNlIHRoZSBpbnNwZWN0b3Igb2JqZWN0IG11c3QKICAg
ICAvLyBiZSBhbGl2ZSBldmVuIGFmdGVyIHRoZSBpbnNwZWN0ZWQgV2ViVmlldyBpcyBkZXN0cm95
ZWQgLSB0aGUKICAgICAvLyBjbG9zZS13aW5kb3cgYW5kIGRlc3Ryb3kgc2lnbmFscyBzdGlsbCBu
ZWVkIHRvIGJlCiAgICAgLy8gZW1pdHRlZC4KLSAgICBXZWJLaXRXZWJJbnNwZWN0b3IqIHdlYklu
c3BlY3RvcjsKKyAgICBXZWJLaXRXZWJJbnNwZWN0b3IqIHdlYkluc3BlY3RvciA9IDA7CiAgICAg
Z19vYmplY3RfZ2V0KG1faW5zcGVjdGVkV2ViVmlldywgIndlYi1pbnNwZWN0b3IiLCAmd2ViSW5z
cGVjdG9yLCBOVUxMKTsKLSAgICBtX3dlYkluc3BlY3RvciA9IHdlYkluc3BlY3RvcjsKKyAgICBB
U1NFUlQod2ViSW5zcGVjdG9yKTsKIAotICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX3dlYklu
c3BlY3RvciwgImluc3BlY3Qtd2ViLXZpZXciLCBtX2luc3BlY3RlZFdlYlZpZXcsICZtX3dlYlZp
ZXcpOworICAgIFdlYktpdFdlYlZpZXcqIGluc3BlY3RvcldlYlZpZXcgPSAwOworICAgIGdfc2ln
bmFsX2VtaXRfYnlfbmFtZSh3ZWJJbnNwZWN0b3IsICJpbnNwZWN0LXdlYi12aWV3IiwgbV9pbnNw
ZWN0ZWRXZWJWaWV3LCAmaW5zcGVjdG9yV2ViVmlldyk7CiAKLSAgICBpZiAoIW1fd2ViVmlldykg
ewotICAgICAgICBnX29iamVjdF91bnJlZihtX3dlYkluc3BlY3Rvcik7Ci0gICAgICAgIHJldHVy
biAwOworICAgIGlmICghaW5zcGVjdG9yV2ViVmlldykgeworICAgICAgICBnX29iamVjdF91bnJl
Zih3ZWJJbnNwZWN0b3IpOworICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgd2Via2l0X3dl
Yl9pbnNwZWN0b3Jfc2V0X3dlYl92aWV3KG1fd2ViSW5zcGVjdG9yLCBtX3dlYlZpZXcpOwotCi0g
ICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJkZXN0cm95IiwKLSAgICAgICAgICAgICAg
ICAgICAgIEdfQ0FMTEJBQ0sobm90aWZ5V2ViVmlld0Rlc3Ryb3llZCksIChncG9pbnRlcil0aGlz
KTsKKyAgICB3ZWJraXRfd2ViX2luc3BlY3Rvcl9zZXRfd2ViX3ZpZXcod2ViSW5zcGVjdG9yLCBp
bnNwZWN0b3JXZWJWaWV3KTsKIAogICAgIEdPd25QdHI8Z2NoYXI+IGluc3BlY3RvclVSSTsKIApA
QCAtMTAzLDE0ICs3Niw3MyBAQCBQYWdlKiBJbnNwZWN0b3JDbGllbnQ6OmNyZWF0ZVBhZ2UoKQog
ICAgIH0gZWxzZQogICAgICAgICBpbnNwZWN0b3JVUkkuc2V0KGdfZmlsZW5hbWVfdG9fdXJpKERB
VEFfRElSIi93ZWJraXQtMS4wL3dlYmluc3BlY3Rvci9pbnNwZWN0b3IuaHRtbCIsIE5VTEwsIE5V
TEwpKTsKIAotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaShtX3dlYlZpZXcsIGluc3BlY3Rv
clVSSS5nZXQoKSk7CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKGluc3BlY3RvcldlYlZp
ZXcsIGluc3BlY3RvclVSSS5nZXQoKSk7CisKKyAgICBndGtfd2lkZ2V0X3Nob3coR1RLX1dJREdF
VChpbnNwZWN0b3JXZWJWaWV3KSk7CisKKyAgICBQYWdlKiBpbnNwZWN0b3JQYWdlID0gY29yZShp
bnNwZWN0b3JXZWJWaWV3KTsKKyAgICBpbnNwZWN0b3JQYWdlLT5pbnNwZWN0b3JDb250cm9sbGVy
KCktPnNldEluc3BlY3RvckZyb250ZW5kQ2xpZW50KG5ldyBJbnNwZWN0b3JGcm9udGVuZENsaWVu
dChtX2luc3BlY3RlZFdlYlZpZXcsIGluc3BlY3RvcldlYlZpZXcsIHdlYkluc3BlY3RvciwgaW5z
cGVjdG9yUGFnZSkpOworfQorCit2b2lkIEluc3BlY3RvckNsaWVudDo6aGlnaGxpZ2h0KE5vZGUq
IG5vZGUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBJbnNwZWN0b3JDbGll
bnQ6OmhpZGVIaWdobGlnaHQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQg
SW5zcGVjdG9yQ2xpZW50Ojpwb3B1bGF0ZVNldHRpbmcoY29uc3QgU3RyaW5nJiBrZXksIFN0cmlu
ZyogdmFsdWUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBJbnNwZWN0b3JD
bGllbnQ6OnN0b3JlU2V0dGluZyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1
ZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCisKK2Jvb2wgZGVzdHJveWVkID0gVFJV
RTsKKworSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50KFdl
YktpdFdlYlZpZXcqIGluc3BlY3RlZFdlYlZpZXcsIFdlYktpdFdlYlZpZXcqIGluc3BlY3Rvcldl
YlZpZXcsIFdlYktpdFdlYkluc3BlY3Rvciogd2ViSW5zcGVjdG9yLCBQYWdlKiBpbnNwZWN0b3JQ
YWdlKQorICAgIDogSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbChjb3JlKGluc3BlY3RlZFdl
YlZpZXcpLT5pbnNwZWN0b3JDb250cm9sbGVyKCksIGluc3BlY3RvclBhZ2UpCisgICAgLCBtX2lu
c3BlY3RvcldlYlZpZXcoaW5zcGVjdG9yV2ViVmlldykKKyAgICAsIG1faW5zcGVjdGVkV2ViVmll
dyhpbnNwZWN0ZWRXZWJWaWV3KQorICAgICwgbV93ZWJJbnNwZWN0b3Iod2ViSW5zcGVjdG9yKQor
eworICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9pbnNwZWN0b3JXZWJWaWV3LCAiZGVzdHJveSIsCisg
ICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNLKG5vdGlmeVdlYlZpZXdEZXN0cm95ZWQpLCAo
Z3BvaW50ZXIpdGhpcyk7Cit9CisKK0luc3BlY3RvckZyb250ZW5kQ2xpZW50Ojp+SW5zcGVjdG9y
RnJvbnRlbmRDbGllbnQoKQoreworICAgIEFTU0VSVCghbV93ZWJJbnNwZWN0b3IpOworfQorCit2
b2lkIEluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpkZXN0cm95SW5zcGVjdG9yV2luZG93KCkKK3sK
KyAgICBpZiAoIW1fd2ViSW5zcGVjdG9yKQorICAgICAgICByZXR1cm47CisgICAgV2ViS2l0V2Vi
SW5zcGVjdG9yKiB3ZWJJbnNwZWN0b3IgPSBtX3dlYkluc3BlY3RvcjsKKyAgICBtX3dlYkluc3Bl
Y3RvciA9IDA7CisKKyAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMobV9p
bnNwZWN0b3JXZWJWaWV3LCAoZ3BvaW50ZXIpbm90aWZ5V2ViVmlld0Rlc3Ryb3llZCwgKGdwb2lu
dGVyKXRoaXMpOworICAgIG1faW5zcGVjdG9yV2ViVmlldyA9IDA7CisKKyAgICBjb3JlKG1faW5z
cGVjdGVkV2ViVmlldyktPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+ZGlzY29ubmVjdEZyb250ZW5k
KCk7CiAKLSAgICBndGtfd2lkZ2V0X3Nob3coR1RLX1dJREdFVChtX3dlYlZpZXcpKTsKKyAgICBn
Ym9vbGVhbiBoYW5kbGVkID0gRkFMU0U7CisgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKHdlYklu
c3BlY3RvciwgImNsb3NlLXdpbmRvdyIsICZoYW5kbGVkKTsKKyAgICBBU1NFUlQoaGFuZGxlZCk7
CiAKLSAgICByZXR1cm4gY29yZShtX3dlYlZpZXcpOworICAgIC8qIHdlIHNob3VsZCBub3cgZGlz
cG9zZSBvdXIgb3duIHJlZmVyZW5jZSAqLworICAgIGdfb2JqZWN0X3VucmVmKHdlYkluc3BlY3Rv
cik7CiB9CiAKLVN0cmluZyBJbnNwZWN0b3JDbGllbnQ6OmxvY2FsaXplZFN0cmluZ3NVUkwoKQor
U3RyaW5nIEluc3BlY3RvckZyb250ZW5kQ2xpZW50Ojpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkKIHsK
ICAgICBHT3duUHRyPGdjaGFyPiBVUkw7CiAKQEAgLTEyNiw4OSArMTU4LDU2IEBAIFN0cmluZyBJ
bnNwZWN0b3JDbGllbnQ6OmxvY2FsaXplZFN0cmluZ3NVUkwoKQogICAgIHJldHVybiBTdHJpbmc6
OmZyb21VVEY4KFVSTC5nZXQoKSk7CiB9CiAKLVN0cmluZyBJbnNwZWN0b3JDbGllbnQ6OmhpZGRl
blBhbmVscygpCitTdHJpbmcgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmhpZGRlblBhbmVscygp
CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yQ2xpZW50OjpzaG93V2luZG93KCkKK3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmRD
bGllbnQ6OmJyaW5nVG9Gcm9udCgpCiB7Ci0gICAgaWYgKCFtX3dlYlZpZXcpCisgICAgaWYgKCFt
X2luc3BlY3RvcldlYlZpZXcpCiAgICAgICAgIHJldHVybjsKIAogICAgIGdib29sZWFuIGhhbmRs
ZWQgPSBGQUxTRTsKICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV93ZWJJbnNwZWN0b3IsICJz
aG93LXdpbmRvdyIsICZoYW5kbGVkKTsKLQotICAgIGNvcmUobV9pbnNwZWN0ZWRXZWJWaWV3KS0+
aW5zcGVjdG9yQ29udHJvbGxlcigpLT5zZXRXaW5kb3dWaXNpYmxlKHRydWUpOwogfQogCi12b2lk
IEluc3BlY3RvckNsaWVudDo6Y2xvc2VXaW5kb3coKQordm9pZCBJbnNwZWN0b3JGcm9udGVuZENs
aWVudDo6Y2xvc2VXaW5kb3coKQogewotICAgIGlmICghbV93ZWJWaWV3KQotICAgICAgICByZXR1
cm47Ci0KLSAgICBnYm9vbGVhbiBoYW5kbGVkID0gRkFMU0U7Ci0gICAgZ19zaWduYWxfZW1pdF9i
eV9uYW1lKG1fd2ViSW5zcGVjdG9yLCAiY2xvc2Utd2luZG93IiwgJmhhbmRsZWQpOwotCi0gICAg
Y29yZShtX2luc3BlY3RlZFdlYlZpZXcpLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnNldFdpbmRv
d1Zpc2libGUoZmFsc2UpOworICAgIGRlc3Ryb3lJbnNwZWN0b3JXaW5kb3coKTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JDbGllbnQ6OmF0dGFjaFdpbmRvdygpCit2b2lkIEluc3BlY3RvckZyb250ZW5k
Q2xpZW50OjphdHRhY2hXaW5kb3coKQogewotICAgIGlmICghbV93ZWJWaWV3KQorICAgIGlmICgh
bV9pbnNwZWN0b3JXZWJWaWV3KQogICAgICAgICByZXR1cm47CiAKICAgICBnYm9vbGVhbiBoYW5k
bGVkID0gRkFMU0U7CiAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fd2ViSW5zcGVjdG9yLCAi
YXR0YWNoLXdpbmRvdyIsICZoYW5kbGVkKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDbGllbnQ6OmRl
dGFjaFdpbmRvdygpCit2b2lkIEluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpkZXRhY2hXaW5kb3co
KQogewotICAgIGlmICghbV93ZWJWaWV3KQorICAgIGlmICghbV9pbnNwZWN0b3JXZWJWaWV3KQog
ICAgICAgICByZXR1cm47CiAKICAgICBnYm9vbGVhbiBoYW5kbGVkID0gRkFMU0U7CiAgICAgZ19z
aWduYWxfZW1pdF9ieV9uYW1lKG1fd2ViSW5zcGVjdG9yLCAiZGV0YWNoLXdpbmRvdyIsICZoYW5k
bGVkKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDbGllbnQ6OnNldEF0dGFjaGVkV2luZG93SGVpZ2h0
KHVuc2lnbmVkIGhlaWdodCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIElu
c3BlY3RvckNsaWVudDo6aGlnaGxpZ2h0KE5vZGUqIG5vZGUpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDbGllbnQ6OmhpZGVIaWdobGlnaHQoKQordm9pZCBJ
bnNwZWN0b3JGcm9udGVuZENsaWVudDo6c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQg
aGVpZ2h0KQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ2xp
ZW50OjppbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYgbmV3VVJMKQordm9pZCBJbnNw
ZWN0b3JGcm9udGVuZENsaWVudDo6aW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIG5l
d1VSTCkKIHsKLSAgICBpZiAoIW1fd2ViVmlldykKKyAgICBpZiAoIW1faW5zcGVjdG9yV2ViVmll
dykKICAgICAgICAgcmV0dXJuOwogCiAgICAgd2Via2l0X3dlYl9pbnNwZWN0b3Jfc2V0X2luc3Bl
Y3RlZF91cmkobV93ZWJJbnNwZWN0b3IsIG5ld1VSTC51dGY4KCkuZGF0YSgpKTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JDbGllbnQ6Omluc3BlY3RvcldpbmRvd09iamVjdENsZWFyZWQoKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ2xpZW50Ojpwb3B1bGF0ZVNl
dHRpbmcoY29uc3QgU3RyaW5nJiBrZXksIFN0cmluZyogdmFsdWUpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDbGllbnQ6OnN0b3JlU2V0dGluZyhjb25zdCBT
dHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCiB9CiAKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvSW5zcGVj
dG9yQ2xpZW50R3RrLmggYi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVu
dEd0ay5oCmluZGV4IDI5N2ZkOGYuLmNkYjUzNzUgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvV2Vi
Q29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50R3RrLmgKKysrIGIvV2ViS2l0L2d0ay9XZWJDb3Jl
U3VwcG9ydC9JbnNwZWN0b3JDbGllbnRHdGsuaApAQCAtMzAsNiArMzAsNyBAQAogI2RlZmluZSBJ
bnNwZWN0b3JDbGllbnRHdGtfaAogCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ2xpZW50LmgiCisjaW5j
bHVkZSAiSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5oIgogI2luY2x1ZGUgIndlYmtpdHdl
YnZpZXcuaCIKICNpbmNsdWRlICJ3ZWJraXR3ZWJpbnNwZWN0b3IuaCIKIApAQCAtNDYsMTUgKzQ3
LDMwIEBAIG5hbWVzcGFjZSBXZWJLaXQgewogICAgICAgICBJbnNwZWN0b3JDbGllbnQoV2ViS2l0
V2ViVmlldyogd2ViVmlldyk7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIGluc3BlY3RvckRlc3Ry
b3llZCgpOwotICAgICAgICB2b2lkIHdlYlZpZXdEZXN0cm95ZWQoKTsKIAotICAgICAgICB2aXJ0
dWFsIFdlYkNvcmU6OlBhZ2UqIGNyZWF0ZVBhZ2UoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIG9w
ZW5JbnNwZWN0b3JGcm9udGVuZChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyKik7CisKKyAg
ICAgICAgdmlydHVhbCB2b2lkIGhpZ2hsaWdodChXZWJDb3JlOjpOb2RlKik7CisgICAgICAgIHZp
cnR1YWwgdm9pZCBoaWRlSGlnaGxpZ2h0KCk7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIHBvcHVs
YXRlU2V0dGluZyhjb25zdCBXZWJDb3JlOjpTdHJpbmcmIGtleSwgV2ViQ29yZTo6U3RyaW5nKiB2
YWx1ZSk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzdG9yZVNldHRpbmcoY29uc3QgV2ViQ29yZTo6
U3RyaW5nJiBrZXksIGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgdmFsdWUpOworCisgICAgcHJpdmF0
ZToKKyAgICAgICAgV2ViS2l0V2ViVmlldyogbV9pbnNwZWN0ZWRXZWJWaWV3OworICAgIH07CisK
KyAgICBjbGFzcyBJbnNwZWN0b3JGcm9udGVuZENsaWVudCA6IHB1YmxpYyBXZWJDb3JlOjpJbnNw
ZWN0b3JGcm9udGVuZENsaWVudExvY2FsIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50KFdlYktpdFdlYlZpZXcqIGluc3BlY3RlZFdlYlZpZXcsIFdlYktpdFdl
YlZpZXcqIGluc3BlY3RvcldlYlZpZXcsIFdlYktpdFdlYkluc3BlY3Rvciogd2ViSW5zcGVjdG9y
LCBXZWJDb3JlOjpQYWdlKiBpbnNwZWN0b3JQYWdlKTsKKworICAgICAgICB2b2lkIGRlc3Ryb3lJ
bnNwZWN0b3JXaW5kb3coKTsKIAogICAgICAgICB2aXJ0dWFsIFdlYkNvcmU6OlN0cmluZyBsb2Nh
bGl6ZWRTdHJpbmdzVVJMKCk7CiAKICAgICAgICAgdmlydHVhbCBXZWJDb3JlOjpTdHJpbmcgaGlk
ZGVuUGFuZWxzKCk7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIHNob3dXaW5kb3coKTsKKyAgICAg
ICAgdmlydHVhbCB2b2lkIGJyaW5nVG9Gcm9udCgpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgY2xv
c2VXaW5kb3coKTsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoV2luZG93KCk7CkBAIC02
MiwxNyArNzgsMTIgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKICAgICAgICAgdmlydHVhbCB2b2lk
IHNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCk7CiAKLSAgICAgICAgdmly
dHVhbCB2b2lkIGhpZ2hsaWdodChXZWJDb3JlOjpOb2RlKik7Ci0gICAgICAgIHZpcnR1YWwgdm9p
ZCBoaWRlSGlnaGxpZ2h0KCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0ZWRVUkxDaGFu
Z2VkKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgbmV3VVJMKTsKIAotICAgICAgICB2aXJ0dWFsIHZv
aWQgcG9wdWxhdGVTZXR0aW5nKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYga2V5LCBXZWJDb3JlOjpT
dHJpbmcqIHZhbHVlKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHN0b3JlU2V0dGluZyhjb25zdCBX
ZWJDb3JlOjpTdHJpbmcmIGtleSwgY29uc3QgV2ViQ29yZTo6U3RyaW5nJiB2YWx1ZSk7Ci0KLSAg
ICAgICAgdmlydHVhbCB2b2lkIGluc3BlY3RvcldpbmRvd09iamVjdENsZWFyZWQoKTsKLQogICAg
IHByaXZhdGU6Ci0gICAgICAgIFdlYktpdFdlYlZpZXcqIG1fd2ViVmlldzsKKyAgICAgICAgdmly
dHVhbCB+SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQoKTsKKworICAgICAgICBXZWJLaXRXZWJWaWV3
KiBtX2luc3BlY3RvcldlYlZpZXc7CiAgICAgICAgIFdlYktpdFdlYlZpZXcqIG1faW5zcGVjdGVk
V2ViVmlldzsKICAgICAgICAgV2ViS2l0V2ViSW5zcGVjdG9yKiBtX3dlYkluc3BlY3RvcjsKICAg
ICB9OwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2hhaWt1L0NoYW5nZUxvZyBiL1dlYktpdC9oYWlrdS9D
aGFuZ2VMb2cKaW5kZXggMWM2ODcwYS4uNWRhZTQ3YSAxMDA2NDQKLS0tIGEvV2ViS2l0L2hhaWt1
L0NoYW5nZUxvZworKysgYi9XZWJLaXQvaGFpa3UvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAK
KzIwMTAtMDMtMTAgIFl1cnkgU2VtaWtoYXRza3kgPHl1cnlzQGNocm9taXVtLm9yZz4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbnRyb2R1Y2UgSW5z
cGVjdG9yRnJvbnRlbmRDbGllbnQgdGhhdCBwcm92aWRlcyBJbnNwZWN0b3JGcm9udGVuZCB3aXRo
IGFuIGludGVyZmFjZSB0byB0aGUgZW1iZWRkZXIuIEluc3BlY3RvckNsaWVudCBub3cgc2VydmVz
IGFzIGEgZGVsZWdhdGUgZm9yIEluc3BlY3RvckNvbnRyb2xsZXIgYW5kIGRvZXMgbm90IGNvbnRh
aW4gbWV0aG9kcyBmb3IgbWFuYWdpbmcgaW5zcGVjdG9yIGZyb250ZW5kIHdpbmRvdy4gVGhhdCBh
bGxvd3MgdG8gY3JlYXRlIHJlbW90ZSBJbnNwZWN0b3JGcm9udGVuZEhvc3QuCisKKyAgICAgICAg
SW50cm9kdWNlIEluc3BlY3RvckZyb250ZW5kQ2xpZW50IHRoYXQgd291bGQgcHJvdmlkZSBJbnNw
ZWN0b3JGcm9udGVuZCB3aXRoIGFuIGludGVyZmFjZSB0byB0aGUgZW1iZWRkZXIKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM1MDM2CisKKyAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRIYWlrdS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JDbGllbnRIYWlrdTo6b3Blbkluc3BlY3RvckZyb250ZW5kKToKKyAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRIYWlrdS5oOgorCiAyMDEwLTAzLTEx
ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgRGF2aWQgSHlhdHQuCmRpZmYgLS1naXQgYS9XZWJLaXQvaGFpa3UvV2ViQ29yZVN1cHBv
cnQvSW5zcGVjdG9yQ2xpZW50SGFpa3UuY3BwIGIvV2ViS2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0
L0luc3BlY3RvckNsaWVudEhhaWt1LmNwcAppbmRleCBmMDZlOTZiLi41OTIzMmU5IDEwMDY0NAot
LS0gYS9XZWJLaXQvaGFpa3UvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50SGFpa3UuY3Bw
CisrKyBiL1dlYktpdC9oYWlrdS9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRIYWlrdS5j
cHAKQEAgLTQyLDQ1ICs0Miw3IEBAIHZvaWQgSW5zcGVjdG9yQ2xpZW50SGFpa3U6Omluc3BlY3Rv
ckRlc3Ryb3llZCgpCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotUGFnZSogSW5zcGVjdG9y
Q2xpZW50SGFpa3U6OmNyZWF0ZVBhZ2UoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAg
cmV0dXJuIDA7Ci19Ci0KLVN0cmluZyBJbnNwZWN0b3JDbGllbnRIYWlrdTo6bG9jYWxpemVkU3Ry
aW5nc1VSTCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7
Ci19Ci0KLVN0cmluZyBJbnNwZWN0b3JDbGllbnRIYWlrdTo6aGlkZGVuUGFuZWxzKCkKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotdm9pZCBJbnNw
ZWN0b3JDbGllbnRIYWlrdTo6c2hvd1dpbmRvdygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LX0KLQotdm9pZCBJbnNwZWN0b3JDbGllbnRIYWlrdTo6Y2xvc2VXaW5kb3coKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ2xpZW50SGFpa3U6OmF0dGFjaFdp
bmRvdygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDbGll
bnRIYWlrdTo6ZGV0YWNoV2luZG93KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12
b2lkIEluc3BlY3RvckNsaWVudEhhaWt1OjpzZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25l
ZCBoZWlnaHQpCit2b2lkIEluc3BlY3RvckNsaWVudEhhaWt1OjpvcGVuSW5zcGVjdG9yRnJvbnRl
bmQoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlciopCiB7CiAgICAgbm90SW1wbGVtZW50ZWQo
KTsKIH0KQEAgLTk1LDE2ICs1Nyw2IEBAIHZvaWQgSW5zcGVjdG9yQ2xpZW50SGFpa3U6OmhpZGVI
aWdobGlnaHQoKQogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ2xp
ZW50SGFpa3U6Omluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJikKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEluc3BlY3RvckNsaWVudEhhaWt1OjppbnNwZWN0b3JX
aW5kb3dPYmplY3RDbGVhcmVkKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCiB2b2lk
IEluc3BlY3RvckNsaWVudEhhaWt1Ojpwb3B1bGF0ZVNldHRpbmcoY29uc3QgU3RyaW5nJiBrZXks
IFN0cmluZyogdmFsdWUpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKZGlmZiAtLWdpdCBhL1dl
YktpdC9oYWlrdS9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRIYWlrdS5oIGIvV2ViS2l0
L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudEhhaWt1LmgKaW5kZXggODc4OGE1
Zi4uZDQyNzY3MCAxMDA2NDQKLS0tIGEvV2ViS2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0luc3Bl
Y3RvckNsaWVudEhhaWt1LmgKKysrIGIvV2ViS2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0luc3Bl
Y3RvckNsaWVudEhhaWt1LmgKQEAgLTQyLDI5ICs0MiwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgcHVibGljOgogICAgICAgICB2aXJ0dWFsIHZvaWQgaW5zcGVjdG9yRGVzdHJveWVkKCk7
CiAKLSAgICAgICAgdmlydHVhbCBQYWdlKiBjcmVhdGVQYWdlKCk7Ci0KLSAgICAgICAgdmlydHVh
bCBTdHJpbmcgbG9jYWxpemVkU3RyaW5nc1VSTCgpOwotCi0gICAgICAgIHZpcnR1YWwgU3RyaW5n
IGhpZGRlblBhbmVscygpOwotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBzaG93V2luZG93KCk7Ci0g
ICAgICAgIHZpcnR1YWwgdm9pZCBjbG9zZVdpbmRvdygpOwotCi0gICAgICAgIHZpcnR1YWwgdm9p
ZCBhdHRhY2hXaW5kb3coKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRldGFjaFdpbmRvdygpOwot
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBo
ZWlnaHQpOworICAgICAgICB2aXJ0dWFsIHZvaWQgb3Blbkluc3BlY3RvckZyb250ZW5kKFdlYkNv
cmU6Okluc3BlY3RvckNvbnRyb2xsZXIqKTsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgaGlnaGxp
Z2h0KE5vZGUqKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGhpZGVIaWdobGlnaHQoKTsKIAotICAg
ICAgICB2aXJ0dWFsIHZvaWQgaW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIG5ld1VS
TCk7Ci0KICAgICAgICAgdmlydHVhbCB2b2lkIHBvcHVsYXRlU2V0dGluZyhjb25zdCBXZWJDb3Jl
OjpTdHJpbmcmIGtleSwgV2ViQ29yZTo6U3RyaW5nKiB2YWx1ZSk7CiAgICAgICAgIHZpcnR1YWwg
dm9pZCBzdG9yZVNldHRpbmcoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBrZXksIGNvbnN0IFdlYkNv
cmU6OlN0cmluZyYgdmFsdWUpOwotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0b3JXaW5k
b3dPYmplY3RDbGVhcmVkKCk7CiAgICAgfTsKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZm
IC0tZ2l0IGEvV2ViS2l0L21hYy9DaGFuZ2VMb2cgYi9XZWJLaXQvbWFjL0NoYW5nZUxvZwppbmRl
eCBlNmQzMDQ2Li5hNWU5ZDYyIDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL0NoYW5nZUxvZworKysg
Yi9XZWJLaXQvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDEwLTAzLTExICBZdXJ5
IFNlbWlraGF0c2t5IDx5dXJ5c0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW50cm9kdWNlIEluc3BlY3RvckZyb250ZW5kQ2xp
ZW50IHRoYXQgcHJvdmlkZXMgSW5zcGVjdG9yRnJvbnRlbmQgd2l0aCBhbiBpbnRlcmZhY2UgdG8g
dGhlIGVtYmVkZGVyLiBJbnNwZWN0b3JDbGllbnQgbm93IHNlcnZlcyBhcyBhIGRlbGVnYXRlIGZv
ciBJbnNwZWN0b3JDb250cm9sbGVyIGFuZCBkb2VzIG5vdCBjb250YWluIG1ldGhvZHMgZm9yIG1h
bmFnaW5nIGluc3BlY3RvciBmcm9udGVuZCB3aW5kb3cuIFRoYXQgYWxsb3dzIHRvIGNyZWF0ZSBy
ZW1vdGUgSW5zcGVjdG9yRnJvbnRlbmRIb3N0LgorCisgICAgICAgIEludHJvZHVjZSBJbnNwZWN0
b3JGcm9udGVuZENsaWVudCB0aGF0IHdvdWxkIHByb3ZpZGUgSW5zcGVjdG9yRnJvbnRlbmQgd2l0
aCBhbiBpbnRlcmZhY2UgdG8gdGhlIGVtYmVkZGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNTAzNgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQv
V2ViSW5zcGVjdG9yQ2xpZW50Lmg6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVj
dG9yQ2xpZW50Lm1tOgorICAgICAgICAoV2ViSW5zcGVjdG9yQ2xpZW50OjpXZWJJbnNwZWN0b3JD
bGllbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yQ2xpZW50OjppbnNwZWN0b3JEZXN0cm95ZWQp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yQ2xpZW50OjpvcGVuSW5zcGVjdG9yRnJvbnRlbmQpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yQ2xpZW50OjpoaWdobGlnaHQpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yQ2xpZW50OjpoaWRlSGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYkluc3BlY3RvckZyb250
ZW5kQ2xpZW50OjpXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3JGcm9udGVuZENsaWVudDo6ZnJvbnRlbmRMb2FkZWQpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yRnJvbnRlbmRDbGllbnQ6OmxvY2FsaXplZFN0cmluZ3NVUkwpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yRnJvbnRlbmRDbGllbnQ6OmhpZGRlblBhbmVscyk6CisgICAgICAgIChXZWJJbnNwZWN0
b3JGcm9udGVuZENsaWVudDo6YnJpbmdUb0Zyb250KToKKyAgICAgICAgKFdlYkluc3BlY3RvckZy
b250ZW5kQ2xpZW50OjpjbG9zZVdpbmRvdyk6CisgICAgICAgIChXZWJJbnNwZWN0b3JGcm9udGVu
ZENsaWVudDo6YXR0YWNoV2luZG93KToKKyAgICAgICAgKFdlYkluc3BlY3RvckZyb250ZW5kQ2xp
ZW50OjpkZXRhY2hXaW5kb3cpOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6
OnNldEF0dGFjaGVkV2luZG93SGVpZ2h0KToKKyAgICAgICAgKFdlYkluc3BlY3RvckZyb250ZW5k
Q2xpZW50OjppbnNwZWN0ZWRVUkxDaGFuZ2VkKToKKyAgICAgICAgKFdlYkluc3BlY3RvckZyb250
ZW5kQ2xpZW50Ojp1cGRhdGVXaW5kb3dUaXRsZSk6CisgICAgICAgICgtW1dlYkluc3BlY3Rvcldp
bmRvd0NvbnRyb2xsZXIgZGVhbGxvY10pOgorICAgICAgICAoLVtXZWJJbnNwZWN0b3JXaW5kb3dD
b250cm9sbGVyIHdpbmRvd1Nob3VsZENsb3NlOl0pOgorICAgICAgICAoLVtXZWJJbnNwZWN0b3JX
aW5kb3dDb250cm9sbGVyIGNsb3NlXSk6CisgICAgICAgICgtW1dlYkluc3BlY3RvcldpbmRvd0Nv
bnRyb2xsZXIgc2hvd1dpbmRvdzpdKToKKyAgICAgICAgKC1bV2ViSW5zcGVjdG9yV2luZG93Q29u
dHJvbGxlciBhdHRhY2hdKToKKyAgICAgICAgKC1bV2ViSW5zcGVjdG9yV2luZG93Q29udHJvbGxl
ciBkZXRhY2hdKToKKyAgICAgICAgKC1bV2ViSW5zcGVjdG9yV2luZG93Q29udHJvbGxlciBhdHRh
Y2hlZF0pOgorICAgICAgICAoLVtXZWJJbnNwZWN0b3JXaW5kb3dDb250cm9sbGVyIHNldEZyb250
ZW5kQ2xpZW50Ol0pOgorICAgICAgICAoLVtXZWJJbnNwZWN0b3JXaW5kb3dDb250cm9sbGVyIGRl
c3Ryb3lJbnNwZWN0b3JWaWV3XSk6CisgICAgICAgICgtW1dlYk5vZGVIaWdobGlnaHRlciBpbml0
V2l0aEluc3BlY3RlZFdlYlZpZXc6XSk6CisgICAgICAgICgtW1dlYk5vZGVIaWdobGlnaHRlciBk
ZWFsbG9jXSk6CisgICAgICAgICgtW1dlYk5vZGVIaWdobGlnaHRlciBoaWdobGlnaHROb2RlOl0p
OgorICAgICAgICAoLVtXZWJOb2RlSGlnaGxpZ2h0ZXIgaGlkZUhpZ2hsaWdodF0pOgorICAgICAg
ICAoLVtXZWJOb2RlSGlnaGxpZ2h0ZXIgZGlkQXR0YWNoV2ViTm9kZUhpZ2hsaWdodDpdKToKKyAg
ICAgICAgKC1bV2ViTm9kZUhpZ2hsaWdodGVyIHdpbGxEZXRhY2hXZWJOb2RlSGlnaGxpZ2h0Ol0p
OgorICAgICAgICAqIFdlYkluc3BlY3Rvci9XZWJJbnNwZWN0b3IubW06CisgICAgICAgICgtW1dl
Ykluc3BlY3RvciBhdHRhY2g6XSk6CisgICAgICAgICgtW1dlYkluc3BlY3RvciBkZXRhY2g6XSk6
CisKIDIwMTAtMDMtMTUgIEFuZHkgRXN0ZXMgIDxhZXN0ZXNAYXBwbGUuY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IEpvaG4gU3VsbGl2YW4uCmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL1dlYkNv
cmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5oIGIvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9y
dC9XZWJJbnNwZWN0b3JDbGllbnQuaAppbmRleCA2NDYyMWY4Li5lZTgxYjI1IDEwMDY0NAotLS0g
YS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5oCisrKyBiL1dl
YktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmgKQEAgLTI3LDE1ICsy
NywxOCBAQAogICovCiAKICNpbXBvcnQgPFdlYkNvcmUvSW5zcGVjdG9yQ2xpZW50Lmg+CisjaW1w
b3J0IDxXZWJDb3JlL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuaD4KICNpbXBvcnQgPFdl
YkNvcmUvUGxhdGZvcm1TdHJpbmcuaD4KIAogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogCiAj
aWZkZWYgX19PQkpDX18KIEBjbGFzcyBXZWJJbnNwZWN0b3JXaW5kb3dDb250cm9sbGVyOworQGNs
YXNzIFdlYk5vZGVIaWdobGlnaHRlcjsKIEBjbGFzcyBXZWJWaWV3OwogI2Vsc2UKIGNsYXNzIFdl
Ykluc3BlY3RvcldpbmRvd0NvbnRyb2xsZXI7CitjbGFzcyBXZWJOb2RlSGlnaGxpZ2h0ZXI7CiBj
bGFzcyBXZWJWaWV3OwogI2VuZGlmCiAKQEAgLTQ1LDMyICs0OCw0MSBAQCBwdWJsaWM6CiAKICAg
ICB2aXJ0dWFsIHZvaWQgaW5zcGVjdG9yRGVzdHJveWVkKCk7CiAKLSAgICB2aXJ0dWFsIFdlYkNv
cmU6OlBhZ2UqIGNyZWF0ZVBhZ2UoKTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlN0cmluZyBsb2Nh
bGl6ZWRTdHJpbmdzVVJMKCk7Ci0KLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlN0cmluZyBoaWRkZW5Q
YW5lbHMoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBzaG93V2luZG93KCk7Ci0gICAgdmlydHVhbCB2
b2lkIGNsb3NlV2luZG93KCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoV2luZG93KCk7Ci0g
ICAgdmlydHVhbCB2b2lkIGRldGFjaFdpbmRvdygpOwotCi0gICAgdmlydHVhbCB2b2lkIHNldEF0
dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCk7CisgICAgdmlydHVhbCB2b2lkIG9w
ZW5JbnNwZWN0b3JGcm9udGVuZChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyKik7CiAKICAg
ICB2aXJ0dWFsIHZvaWQgaGlnaGxpZ2h0KFdlYkNvcmU6Ok5vZGUqKTsKICAgICB2aXJ0dWFsIHZv
aWQgaGlkZUhpZ2hsaWdodCgpOwotICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0ZWRVUkxDaGFuZ2Vk
KGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgbmV3VVJMKTsKIAogICAgIHZpcnR1YWwgdm9pZCBwb3B1
bGF0ZVNldHRpbmcoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBrZXksIFdlYkNvcmU6OlN0cmluZyog
dmFsdWUpOwogICAgIHZpcnR1YWwgdm9pZCBzdG9yZVNldHRpbmcoY29uc3QgV2ViQ29yZTo6U3Ry
aW5nJiBrZXksIGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgdmFsdWUpOwogCi0gICAgdmlydHVhbCB2
b2lkIGluc3BlY3RvcldpbmRvd09iamVjdENsZWFyZWQoKTsKK3ByaXZhdGU6CisgICAgV2ViVmll
dyAqbV93ZWJWaWV3OworICAgIFJldGFpblB0cjxXZWJOb2RlSGlnaGxpZ2h0ZXI+IG1faGlnaGxp
Z2h0ZXI7Cit9OworCitjbGFzcyBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudCA6IHB1YmxpYyBX
ZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsIHsKK3B1YmxpYzoKKyAgICBXZWJJ
bnNwZWN0b3JGcm9udGVuZENsaWVudChXZWJWaWV3KiwgV2ViSW5zcGVjdG9yV2luZG93Q29udHJv
bGxlciosIFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXIqLCBXZWJDb3JlOjpQYWdlKik7CisK
KyAgICB2aXJ0dWFsIHZvaWQgZnJvbnRlbmRMb2FkZWQoKTsKKyAgICAKKyAgICB2aXJ0dWFsIFdl
YkNvcmU6OlN0cmluZyBsb2NhbGl6ZWRTdHJpbmdzVVJMKCk7CisgICAgdmlydHVhbCBXZWJDb3Jl
OjpTdHJpbmcgaGlkZGVuUGFuZWxzKCk7CisgICAgCisgICAgdmlydHVhbCB2b2lkIGJyaW5nVG9G
cm9udCgpOworICAgIHZpcnR1YWwgdm9pZCBjbG9zZVdpbmRvdygpOworICAgIAorICAgIHZpcnR1
YWwgdm9pZCBhdHRhY2hXaW5kb3coKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoV2luZG93KCk7
CisgICAgCisgICAgdmlydHVhbCB2b2lkIHNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVk
IGhlaWdodCk7CisgICAgdmlydHVhbCB2b2lkIGluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgV2Vi
Q29yZTo6U3RyaW5nJiBuZXdVUkwpOwogCiBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRlV2luZG93
VGl0bGUoKSBjb25zdDsKIAotICAgIFdlYlZpZXcgKm1fd2ViVmlldzsKKyAgICBXZWJWaWV3KiBt
X2luc3BlY3RlZFdlYlZpZXc7CiAgICAgUmV0YWluUHRyPFdlYkluc3BlY3RvcldpbmRvd0NvbnRy
b2xsZXI+IG1fd2luZG93Q29udHJvbGxlcjsKICAgICBXZWJDb3JlOjpTdHJpbmcgbV9pbnNwZWN0
ZWRVUkw7CiB9OwpkaWZmIC0tZ2l0IGEvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNw
ZWN0b3JDbGllbnQubW0gYi9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNs
aWVudC5tbQppbmRleCBjNWYxNzI5Li4wMGM1MWE5IDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL1dl
YkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5tbQorKysgYi9XZWJLaXQvbWFjL1dlYkNv
cmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5tbQpAQCAtNDEsNiArNDEsNyBAQAogI2ltcG9y
dCA8V2ViQ29yZS9QYWdlLmg+CiAjaW1wb3J0IDxXZWJLaXQvRE9NRXh0ZW5zaW9ucy5oPgogI2lt
cG9ydCA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+CisjaW1wb3J0IDx3dGYvUGFzc093blB0ci5o
PgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtNDgsNDUgKzQ5LDk0IEBAIHVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwogQHByaXZhdGUKICAgICBXZWJWaWV3ICpfaW5zcGVjdGVkV2Vi
VmlldzsKICAgICBXZWJWaWV3ICpfd2ViVmlldzsKLSAgICBXZWJOb2RlSGlnaGxpZ2h0ICpfY3Vy
cmVudEhpZ2hsaWdodDsKKyAgICBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudCogX2Zyb250ZW5k
Q2xpZW50OwogICAgIEJPT0wgX2F0dGFjaGVkVG9JbnNwZWN0ZWRXZWJWaWV3OwogICAgIEJPT0wg
X3Nob3VsZEF0dGFjaDsKICAgICBCT09MIF92aXNpYmxlOwotICAgIEJPT0wgX21vdmluZ1dpbmRv
d3M7CisgICAgQk9PTCBfZGVzdHJveWluZ0luc3BlY3RvclZpZXc7CiB9CiAtIChpZClpbml0V2l0
aEluc3BlY3RlZFdlYlZpZXc6KFdlYlZpZXcgKil3ZWJWaWV3OwotLSAoQk9PTClpbnNwZWN0b3JW
aXNpYmxlOwogLSAoV2ViVmlldyAqKXdlYlZpZXc7CiAtICh2b2lkKWF0dGFjaDsKIC0gKHZvaWQp
ZGV0YWNoOworLSAoQk9PTClhdHRhY2hlZDsKKy0gKHZvaWQpc2V0RnJvbnRlbmRDbGllbnQ6KFdl
Ykluc3BlY3RvckZyb250ZW5kQ2xpZW50Kilmcm9udGVuZENsaWVudDsKIC0gKHZvaWQpc2V0QXR0
YWNoZWRXaW5kb3dIZWlnaHQ6KHVuc2lnbmVkKWhlaWdodDsKKy0gKHZvaWQpZGVzdHJveUluc3Bl
Y3RvclZpZXc7CitAZW5kCisKKyNwcmFnbWEgbWFyayAtCisKK0BpbnRlcmZhY2UgV2ViTm9kZUhp
Z2hsaWdodGVyIDogTlNPYmplY3QgeworQHByaXZhdGUKKyAgICBXZWJWaWV3ICpfaW5zcGVjdGVk
V2ViVmlldzsKKyAgICBXZWJOb2RlSGlnaGxpZ2h0ICpfY3VycmVudEhpZ2hsaWdodDsKK30KKy0g
KGlkKWluaXRXaXRoSW5zcGVjdGVkV2ViVmlldzooV2ViVmlldyAqKXdlYlZpZXc7CiAtICh2b2lk
KWhpZ2hsaWdodE5vZGU6KERPTU5vZGUgKilub2RlOwogLSAodm9pZCloaWRlSGlnaGxpZ2h0Owog
QGVuZAogCiAjcHJhZ21hIG1hcmsgLQogCisKIFdlYkluc3BlY3RvckNsaWVudDo6V2ViSW5zcGVj
dG9yQ2xpZW50KFdlYlZpZXcgKndlYlZpZXcpCiA6IG1fd2ViVmlldyh3ZWJWaWV3KQorLCBtX2hp
Z2hsaWdodGVyKEFkb3B0TlMsIFtbV2ViTm9kZUhpZ2hsaWdodGVyIGFsbG9jXSBpbml0V2l0aElu
c3BlY3RlZFdlYlZpZXc6d2ViVmlld10pCiB7CiB9CiAKIHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50
OjppbnNwZWN0b3JEZXN0cm95ZWQoKQogewotICAgIFtbbV93aW5kb3dDb250cm9sbGVyLmdldCgp
IHdlYlZpZXddIGNsb3NlXTsKICAgICBkZWxldGUgdGhpczsKIH0KIAotUGFnZSogV2ViSW5zcGVj
dG9yQ2xpZW50OjpjcmVhdGVQYWdlKCkKK3ZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpvcGVuSW5z
cGVjdG9yRnJvbnRlbmQoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlcikK
IHsKLSAgICBpZiAobV93aW5kb3dDb250cm9sbGVyKQotICAgICAgICBbW21fd2luZG93Q29udHJv
bGxlci5nZXQoKSB3ZWJWaWV3XSBjbG9zZV07Ci0gICAgbV93aW5kb3dDb250cm9sbGVyLmFkb3B0
TlMoW1tXZWJJbnNwZWN0b3JXaW5kb3dDb250cm9sbGVyIGFsbG9jXSBpbml0V2l0aEluc3BlY3Rl
ZFdlYlZpZXc6bV93ZWJWaWV3XSk7CisgICAgUmV0YWluUHRyPFdlYkluc3BlY3RvcldpbmRvd0Nv
bnRyb2xsZXI+IHdpbmRvd0NvbnRyb2xsZXIoQWRvcHROUywgW1tXZWJJbnNwZWN0b3JXaW5kb3dD
b250cm9sbGVyIGFsbG9jXSBpbml0V2l0aEluc3BlY3RlZFdlYlZpZXc6bV93ZWJWaWV3XSk7Cisg
ICAgUGFnZSogZnJvbnRlbmRQYWdlID0gY29yZShbd2luZG93Q29udHJvbGxlci5nZXQoKSB3ZWJW
aWV3XSk7CiAKLSAgICByZXR1cm4gY29yZShbbV93aW5kb3dDb250cm9sbGVyLmdldCgpIHdlYlZp
ZXddKTsKKyAgICBmcm9udGVuZFBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0SW5zcGVj
dG9yRnJvbnRlbmRDbGllbnQobmV3IFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50KG1fd2ViVmll
dywgd2luZG93Q29udHJvbGxlci5nZXQoKSwgaW5zcGVjdG9yQ29udHJvbGxlciwgZnJvbnRlbmRQ
YWdlKSk7CiB9CiAKLVN0cmluZyBXZWJJbnNwZWN0b3JDbGllbnQ6OmxvY2FsaXplZFN0cmluZ3NV
UkwoKQordm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmhpZ2hsaWdodChOb2RlKiBub2RlKQorewor
ICAgIFttX2hpZ2hsaWdodGVyLmdldCgpIGhpZ2hsaWdodE5vZGU6a2l0KG5vZGUpXTsKK30KKwor
dm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmhpZGVIaWdobGlnaHQoKQoreworICAgIFttX2hpZ2hs
aWdodGVyLmdldCgpIGhpZGVIaWdobGlnaHRdOworfQorCitXZWJJbnNwZWN0b3JGcm9udGVuZENs
aWVudDo6V2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQoV2ViVmlldyogaW5zcGVjdGVkV2ViVmll
dywgV2ViSW5zcGVjdG9yV2luZG93Q29udHJvbGxlciogd2luZG93Q29udHJvbGxlciwgSW5zcGVj
dG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciwgUGFnZSogZnJvbnRlbmRQYWdlKQor
ICAgIDogSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbChpbnNwZWN0b3JDb250cm9sbGVyLCAg
ZnJvbnRlbmRQYWdlKQorICAgICwgbV9pbnNwZWN0ZWRXZWJWaWV3KGluc3BlY3RlZFdlYlZpZXcp
CisgICAgLCBtX3dpbmRvd0NvbnRyb2xsZXIod2luZG93Q29udHJvbGxlcikKK3sKKyAgICBbd2lu
ZG93Q29udHJvbGxlciBzZXRGcm9udGVuZENsaWVudDp0aGlzXTsKK30KKwordm9pZCBXZWJJbnNw
ZWN0b3JGcm9udGVuZENsaWVudDo6ZnJvbnRlbmRMb2FkZWQoKQoreworICAgIFttX3dpbmRvd0Nv
bnRyb2xsZXIuZ2V0KCkgc2hvd1dpbmRvdzpuaWxdOworICAgIGlmIChbbV93aW5kb3dDb250cm9s
bGVyLmdldCgpIGF0dGFjaGVkXSkKKyAgICAgICAgcmVzdG9yZUF0dGFjaGVkV2luZG93SGVpZ2h0
KCk7CisKKyAgICBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjpmcm9udGVuZExvYWRlZCgp
OworCisgICAgV2ViRnJhbWUgKmZyYW1lID0gW21faW5zcGVjdGVkV2ViVmlldyBtYWluRnJhbWVd
OworICAgIAorICAgIFdlYkZyYW1lTG9hZERlbGVnYXRlSW1wbGVtZW50YXRpb25DYWNoZSogaW1w
bGVtZW50YXRpb25zID0gV2ViVmlld0dldEZyYW1lTG9hZERlbGVnYXRlSW1wbGVtZW50YXRpb25z
KG1faW5zcGVjdGVkV2ViVmlldyk7CisgICAgaWYgKGltcGxlbWVudGF0aW9ucy0+ZGlkQ2xlYXJJ
bnNwZWN0b3JXaW5kb3dPYmplY3RGb3JGcmFtZUZ1bmMpCisgICAgICAgIENhbGxGcmFtZUxvYWRE
ZWxlZ2F0ZShpbXBsZW1lbnRhdGlvbnMtPmRpZENsZWFySW5zcGVjdG9yV2luZG93T2JqZWN0Rm9y
RnJhbWVGdW5jLCBtX2luc3BlY3RlZFdlYlZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBAc2VsZWN0b3Iod2ViVmlldzpkaWRDbGVhckluc3BlY3RvcldpbmRvd09iamVjdDpmb3JG
cmFtZTopLCBbZnJhbWUgd2luZG93T2JqZWN0XSwgZnJhbWUpOworCisgICAgYm9vbCBhdHRhY2hl
ZCA9IFttX3dpbmRvd0NvbnRyb2xsZXIuZ2V0KCkgYXR0YWNoZWRdOworICAgIHNldEF0dGFjaGVk
V2luZG93KGF0dGFjaGVkKTsKK30KKworU3RyaW5nIFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50
Ojpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkKIHsKICAgICBOU1N0cmluZyAqcGF0aCA9IFtbTlNCdW5k
bGUgYnVuZGxlV2l0aElkZW50aWZpZXI6QCJjb20uYXBwbGUuV2ViQ29yZSJdIHBhdGhGb3JSZXNv
dXJjZTpAImxvY2FsaXplZFN0cmluZ3MiIG9mVHlwZTpAImpzIl07CiAgICAgaWYgKHBhdGgpCkBA
IC05NCw3ICsxNDQsNyBAQCBTdHJpbmcgV2ViSW5zcGVjdG9yQ2xpZW50Ojpsb2NhbGl6ZWRTdHJp
bmdzVVJMKCkKICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKLVN0cmluZyBXZWJJbnNwZWN0b3JD
bGllbnQ6OmhpZGRlblBhbmVscygpCitTdHJpbmcgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6
OmhpZGRlblBhbmVscygpCiB7CiAgICAgTlNTdHJpbmcgKmhpZGRlblBhbmVscyA9IFtbTlNVc2Vy
RGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIHN0cmluZ0ZvcktleTpAIldlYktpdEluc3Bl
Y3RvckhpZGRlblBhbmVscyJdOwogICAgIGlmIChoaWRkZW5QYW5lbHMpCkBAIC0xMDIsNjMgKzE1
Miw0NyBAQCBTdHJpbmcgV2ViSW5zcGVjdG9yQ2xpZW50OjpoaWRkZW5QYW5lbHMoKQogICAgIHJl
dHVybiBTdHJpbmcoKTsKIH0KIAotdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OnNob3dXaW5kb3co
KQordm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6YnJpbmdUb0Zyb250KCkKIHsKICAg
ICB1cGRhdGVXaW5kb3dUaXRsZSgpOwogICAgIFttX3dpbmRvd0NvbnRyb2xsZXIuZ2V0KCkgc2hv
d1dpbmRvdzpuaWxdOwogfQogCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6Y2xvc2VXaW5kb3co
KQordm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6Y2xvc2VXaW5kb3coKQogewotICAg
IFttX3dpbmRvd0NvbnRyb2xsZXIuZ2V0KCkgY2xvc2VdOworICAgIFttX3dpbmRvd0NvbnRyb2xs
ZXIuZ2V0KCkgZGVzdHJveUluc3BlY3RvclZpZXddOwogfQogCi12b2lkIFdlYkluc3BlY3RvckNs
aWVudDo6YXR0YWNoV2luZG93KCkKK3ZvaWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmF0
dGFjaFdpbmRvdygpCiB7CisgICAgaWYgKFttX3dpbmRvd0NvbnRyb2xsZXIuZ2V0KCkgYXR0YWNo
ZWRdKQorICAgICAgICByZXR1cm47CiAgICAgW21fd2luZG93Q29udHJvbGxlci5nZXQoKSBhdHRh
Y2hdOworICAgIHJlc3RvcmVBdHRhY2hlZFdpbmRvd0hlaWdodCgpOwogfQogCi12b2lkIFdlYklu
c3BlY3RvckNsaWVudDo6ZGV0YWNoV2luZG93KCkKK3ZvaWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRD
bGllbnQ6OmRldGFjaFdpbmRvdygpCiB7CiAgICAgW21fd2luZG93Q29udHJvbGxlci5nZXQoKSBk
ZXRhY2hdOwogfQogCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6c2V0QXR0YWNoZWRXaW5kb3dI
ZWlnaHQodW5zaWduZWQgaGVpZ2h0KQordm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6
c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KQogewogICAgIFttX3dpbmRv
d0NvbnRyb2xsZXIuZ2V0KCkgc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQ6aGVpZ2h0XTsKIH0KIAot
dm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmhpZ2hsaWdodChOb2RlKiBub2RlKQotewotICAgIFtt
X3dpbmRvd0NvbnRyb2xsZXIuZ2V0KCkgaGlnaGxpZ2h0Tm9kZTpraXQobm9kZSldOwotfQotCi12
b2lkIFdlYkluc3BlY3RvckNsaWVudDo6aGlkZUhpZ2hsaWdodCgpCi17Ci0gICAgW21fd2luZG93
Q29udHJvbGxlci5nZXQoKSBoaWRlSGlnaGxpZ2h0XTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JD
bGllbnQ6Omluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJiBuZXdVUkwpCit2b2lkIFdl
Ykluc3BlY3RvckZyb250ZW5kQ2xpZW50OjppbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmlu
ZyYgbmV3VVJMKQogewogICAgIG1faW5zcGVjdGVkVVJMID0gbmV3VVJMOwogICAgIHVwZGF0ZVdp
bmRvd1RpdGxlKCk7CiB9CiAKLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50Ojp1cGRhdGVXaW5kb3dU
aXRsZSgpIGNvbnN0Cit2b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50Ojp1cGRhdGVXaW5k
b3dUaXRsZSgpIGNvbnN0CiB7CiAgICAgTlNTdHJpbmcgKnRpdGxlID0gW05TU3RyaW5nIHN0cmlu
Z1dpdGhGb3JtYXQ6VUlfU1RSSU5HKCJXZWIgSW5zcGVjdG9yIOKAlCAlQCIsICJXZWIgSW5zcGVj
dG9yIHdpbmRvdyB0aXRsZSIpLCAoTlNTdHJpbmcgKiltX2luc3BlY3RlZFVSTF07CiAgICAgW1tt
X3dpbmRvd0NvbnRyb2xsZXIuZ2V0KCkgd2luZG93XSBzZXRUaXRsZTp0aXRsZV07CiB9CiAKLXZv
aWQgV2ViSW5zcGVjdG9yQ2xpZW50OjppbnNwZWN0b3JXaW5kb3dPYmplY3RDbGVhcmVkKCkKLXsK
LSAgICBXZWJGcmFtZSAqZnJhbWUgPSBbbV93ZWJWaWV3IG1haW5GcmFtZV07Ci0gICAgCi0gICAg
V2ViRnJhbWVMb2FkRGVsZWdhdGVJbXBsZW1lbnRhdGlvbkNhY2hlKiBpbXBsZW1lbnRhdGlvbnMg
PSBXZWJWaWV3R2V0RnJhbWVMb2FkRGVsZWdhdGVJbXBsZW1lbnRhdGlvbnMobV93ZWJWaWV3KTsK
LSAgICBpZiAoaW1wbGVtZW50YXRpb25zLT5kaWRDbGVhckluc3BlY3RvcldpbmRvd09iamVjdEZv
ckZyYW1lRnVuYykKLSAgICAgICAgQ2FsbEZyYW1lTG9hZERlbGVnYXRlKGltcGxlbWVudGF0aW9u
cy0+ZGlkQ2xlYXJJbnNwZWN0b3JXaW5kb3dPYmplY3RGb3JGcmFtZUZ1bmMsIG1fd2ViVmlldywK
LSAgICAgICAgICBAc2VsZWN0b3Iod2ViVmlldzpkaWRDbGVhckluc3BlY3RvcldpbmRvd09iamVj
dDpmb3JGcmFtZTopLCBbZnJhbWUgd2luZG93T2JqZWN0XSwgZnJhbWUpOwotfQogCiAjcHJhZ21h
IG1hcmsgLQogCkBAIC0yMjEsMTggKzI1NSwxMiBAQCB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6
aW5zcGVjdG9yV2luZG93T2JqZWN0Q2xlYXJlZCgpCiAKIC0gKHZvaWQpZGVhbGxvYwogewotICAg
IEFTU0VSVCghX2N1cnJlbnRIaWdobGlnaHQpOwogICAgIFtfd2ViVmlldyByZWxlYXNlXTsKICAg
ICBbc3VwZXIgZGVhbGxvY107CiB9CiAKICNwcmFnbWEgbWFyayAtCiAKLS0gKEJPT0wpaW5zcGVj
dG9yVmlzaWJsZQotewotICAgIHJldHVybiBfdmlzaWJsZTsKLX0KLQogLSAoV2ViVmlldyAqKXdl
YlZpZXcKIHsKICAgICByZXR1cm4gX3dlYlZpZXc7CkBAIC0yNzEsMTEgKzI5OSw3IEBAIHZvaWQg
V2ViSW5zcGVjdG9yQ2xpZW50OjppbnNwZWN0b3JXaW5kb3dPYmplY3RDbGVhcmVkKCkKIAogLSAo
Qk9PTCl3aW5kb3dTaG91bGRDbG9zZTooaWQpc2VuZGVyCiB7Ci0gICAgX3Zpc2libGUgPSBOTzsK
LQotICAgIFtfaW5zcGVjdGVkV2ViVmlldyBwYWdlXS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5z
ZXRXaW5kb3dWaXNpYmxlKGZhbHNlKTsKLQotICAgIFtzZWxmIGhpZGVIaWdobGlnaHRdOworICAg
IFtzZWxmIGRlc3Ryb3lJbnNwZWN0b3JWaWV3XTsKIAogICAgIHJldHVybiBZRVM7CiB9CkBAIC0y
ODcsMTEgKzMxMSw2IEBAIHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjppbnNwZWN0b3JXaW5kb3dP
YmplY3RDbGVhcmVkKCkKIAogICAgIF92aXNpYmxlID0gTk87CiAKLSAgICBpZiAoIV9tb3ZpbmdX
aW5kb3dzKQotICAgICAgICBbX2luc3BlY3RlZFdlYlZpZXcgcGFnZV0tPmluc3BlY3RvckNvbnRy
b2xsZXIoKS0+c2V0V2luZG93VmlzaWJsZShmYWxzZSk7Ci0KLSAgICBbc2VsZiBoaWRlSGlnaGxp
Z2h0XTsKLQogICAgIGlmIChfYXR0YWNoZWRUb0luc3BlY3RlZFdlYlZpZXcpIHsKICAgICAgICAg
aWYgKFtfaW5zcGVjdGVkV2ViVmlldyBfaXNDbG9zZWRdKQogICAgICAgICAgICAgcmV0dXJuOwpA
QCAtMzI4LDcgKzM0Nyw3IEBAIHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjppbnNwZWN0b3JXaW5k
b3dPYmplY3RDbGVhcmVkKCkKICAgICBTdHJpbmcgc2hvdWxkQXR0YWNoID0gW19pbnNwZWN0ZWRX
ZWJWaWV3IHBhZ2VdLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnNldHRpbmcoSW5zcGVjdG9yQ29u
dHJvbGxlcjo6aW5zcGVjdG9yU3RhcnRzQXR0YWNoZWRTZXR0aW5nTmFtZSgpKTsKICAgICBfc2hv
dWxkQXR0YWNoID0gc2hvdWxkQXR0YWNoICE9ICJmYWxzZSI7CiAgICAgCi0gICAgaWYgKF9zaG91
bGRBdHRhY2ggJiYgIVtfaW5zcGVjdGVkV2ViVmlldyBwYWdlXS0+aW5zcGVjdG9yQ29udHJvbGxl
cigpLT5jYW5BdHRhY2hXaW5kb3coKSkKKyAgICBpZiAoX3Nob3VsZEF0dGFjaCAmJiAhX2Zyb250
ZW5kQ2xpZW50LT5jYW5BdHRhY2hXaW5kb3coKSkKICAgICAgICAgX3Nob3VsZEF0dGFjaCA9IE5P
OwogCiAgICAgaWYgKF9zaG91bGRBdHRhY2gpIHsKQEAgLTM1Miw4ICszNzEsNiBAQCB2b2lkIFdl
Ykluc3BlY3RvckNsaWVudDo6aW5zcGVjdG9yV2luZG93T2JqZWN0Q2xlYXJlZCgpCiAKICAgICAg
ICAgW3N1cGVyIHNob3dXaW5kb3c6bmlsXTsKICAgICB9Ci0KLSAgICBbX2luc3BlY3RlZFdlYlZp
ZXcgcGFnZV0tPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0V2luZG93VmlzaWJsZSh0cnVlLCBf
c2hvdWxkQXR0YWNoKTsKIH0KIAogI3ByYWdtYSBtYXJrIC0KQEAgLTM2NCwxMiArMzgxLDkgQEAg
dm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6Omluc3BlY3RvcldpbmRvd09iamVjdENsZWFyZWQoKQog
ICAgICAgICByZXR1cm47CiAKICAgICBbX2luc3BlY3RlZFdlYlZpZXcgcGFnZV0tPmluc3BlY3Rv
ckNvbnRyb2xsZXIoKS0+c2V0U2V0dGluZyhJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0b3JT
dGFydHNBdHRhY2hlZFNldHRpbmdOYW1lKCksICJ0cnVlIik7Ci0gICAgX21vdmluZ1dpbmRvd3Mg
PSBZRVM7CiAKICAgICBbc2VsZiBjbG9zZV07CiAgICAgW3NlbGYgc2hvd1dpbmRvdzpuaWxdOwot
Ci0gICAgX21vdmluZ1dpbmRvd3MgPSBOTzsKIH0KIAogLSAodm9pZClkZXRhY2gKQEAgLTM3OCwx
MyArMzkyLDE5IEBAIHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjppbnNwZWN0b3JXaW5kb3dPYmpl
Y3RDbGVhcmVkKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgW19pbnNwZWN0ZWRXZWJWaWV3IHBh
Z2VdLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnNldFNldHRpbmcoSW5zcGVjdG9yQ29udHJvbGxl
cjo6aW5zcGVjdG9yU3RhcnRzQXR0YWNoZWRTZXR0aW5nTmFtZSgpLCAiZmFsc2UiKTsKLSAgICBf
bW92aW5nV2luZG93cyA9IFlFUzsKIAogICAgIFtzZWxmIGNsb3NlXTsKICAgICBbc2VsZiBzaG93
V2luZG93Om5pbF07Cit9CiAKLSAgICBfbW92aW5nV2luZG93cyA9IE5POworLSAoQk9PTClhdHRh
Y2hlZAoreworICAgIHJldHVybiBfYXR0YWNoZWRUb0luc3BlY3RlZFdlYlZpZXc7Cit9CiAKKy0g
KHZvaWQpc2V0RnJvbnRlbmRDbGllbnQ6KFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50Kilmcm9u
dGVuZENsaWVudAoreworICAgIF9mcm9udGVuZENsaWVudCA9IGZyb250ZW5kQ2xpZW50OwogfQog
CiAtICh2b2lkKXNldEF0dGFjaGVkV2luZG93SGVpZ2h0Oih1bnNpZ25lZCloZWlnaHQKQEAgLTQw
NSwyOSArNDI1LDE3IEBAIHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjppbnNwZWN0b3JXaW5kb3dP
YmplY3RDbGVhcmVkKCkKICAgICBbZnJhbWVWaWV3IHNldEZyYW1lOmZyYW1lVmlld1JlY3RdOwog
fQogCi0jcHJhZ21hIG1hcmsgLQotCi0tICh2b2lkKWhpZ2hsaWdodE5vZGU6KERPTU5vZGUgKilu
b2RlCistICh2b2lkKWRlc3Ryb3lJbnNwZWN0b3JWaWV3CiB7Ci0gICAgLy8gVGhlIHNjcm9sbHZp
ZXcncyBjb250ZW50IHZpZXcgc3RheXMgYXJvdW5kIGJldHdlZW4gcGFnZSBuYXZpZ2F0aW9ucywg
c28gdGFyZ2V0IGl0Ci0gICAgTlNWaWV3ICp2aWV3ID0gW1tbW1tfaW5zcGVjdGVkV2ViVmlldyBt
YWluRnJhbWVdIGZyYW1lVmlld10gZG9jdW1lbnRWaWV3XSBlbmNsb3NpbmdTY3JvbGxWaWV3XSBj
b250ZW50Vmlld107Ci0gICAgaWYgKCFbdmlldyB3aW5kb3ddKQotICAgICAgICByZXR1cm47IC8v
IHNraXAgdGhlIGhpZ2hsaWdodCBpZiB3ZSBoYXZlIG5vIHdpbmRvdyAoZS5nLiBoaWRkZW4gdGFi
KQotCi0gICAgaWYgKCFfY3VycmVudEhpZ2hsaWdodCkgewotICAgICAgICBfY3VycmVudEhpZ2hs
aWdodCA9IFtbV2ViTm9kZUhpZ2hsaWdodCBhbGxvY10gaW5pdFdpdGhUYXJnZXRWaWV3OnZpZXcg
aW5zcGVjdG9yQ29udHJvbGxlcjpbX2luc3BlY3RlZFdlYlZpZXcgcGFnZV0tPmluc3BlY3RvckNv
bnRyb2xsZXIoKV07Ci0gICAgICAgIFtfY3VycmVudEhpZ2hsaWdodCBzZXREZWxlZ2F0ZTpzZWxm
XTsKLSAgICAgICAgW19jdXJyZW50SGlnaGxpZ2h0IGF0dGFjaF07Ci0gICAgfSBlbHNlCi0gICAg
ICAgIFtbX2N1cnJlbnRIaWdobGlnaHQgaGlnaGxpZ2h0Vmlld10gc2V0TmVlZHNEaXNwbGF5OllF
U107Ci19CisgICAgaWYgKF9kZXN0cm95aW5nSW5zcGVjdG9yVmlldykKKyAgICAgICAgcmV0dXJu
OworICAgIF9kZXN0cm95aW5nSW5zcGVjdG9yVmlldyA9IFlFUzsKIAotLSAodm9pZCloaWRlSGln
aGxpZ2h0Ci17Ci0gICAgW19jdXJyZW50SGlnaGxpZ2h0IGRldGFjaF07Ci0gICAgW19jdXJyZW50
SGlnaGxpZ2h0IHNldERlbGVnYXRlOm5pbF07Ci0gICAgW19jdXJyZW50SGlnaGxpZ2h0IHJlbGVh
c2VdOwotICAgIF9jdXJyZW50SGlnaGxpZ2h0ID0gbmlsOworICAgIGlmIChfYXR0YWNoZWRUb0lu
c3BlY3RlZFdlYlZpZXcpCisgICAgICAgIFtzZWxmIGNsb3NlXTsKKyAgICBfdmlzaWJsZSA9IE5P
OworICAgIFtfaW5zcGVjdGVkV2ViVmlldyBwYWdlXS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5k
aXNjb25uZWN0RnJvbnRlbmQoKTsKKyAgICBbX3dlYlZpZXcgY2xvc2VdOwogfQogCiAjcHJhZ21h
IG1hcmsgLQpAQCAtNDk3LDMgKzUwNSw2MCBAQCB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6aW5z
cGVjdG9yV2luZG93T2JqZWN0Q2xlYXJlZCgpCiB9CiAKIEBlbmQKKworCisjcHJhZ21hIG1hcmsg
LQorCitAaW1wbGVtZW50YXRpb24gV2ViTm9kZUhpZ2hsaWdodGVyCistIChpZClpbml0V2l0aElu
c3BlY3RlZFdlYlZpZXc6KFdlYlZpZXcgKil3ZWJWaWV3Cit7CisgICAgLy8gRG9uJ3QgcmV0YWlu
IHRvIGF2b2lkIGEgY2lyY3VsYXIgcmVmZXJlbmNlCisgICAgX2luc3BlY3RlZFdlYlZpZXcgPSB3
ZWJWaWV3OworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBB
U1NFUlQoIV9jdXJyZW50SGlnaGxpZ2h0KTsKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKyNw
cmFnbWEgbWFyayAtCisKKy0gKHZvaWQpaGlnaGxpZ2h0Tm9kZTooRE9NTm9kZSAqKW5vZGUKK3sK
KyAgICAvLyBUaGUgc2Nyb2xsdmlldydzIGNvbnRlbnQgdmlldyBzdGF5cyBhcm91bmQgYmV0d2Vl
biBwYWdlIG5hdmlnYXRpb25zLCBzbyB0YXJnZXQgaXQKKyAgICBOU1ZpZXcgKnZpZXcgPSBbW1tb
W19pbnNwZWN0ZWRXZWJWaWV3IG1haW5GcmFtZV0gZnJhbWVWaWV3XSBkb2N1bWVudFZpZXddIGVu
Y2xvc2luZ1Njcm9sbFZpZXddIGNvbnRlbnRWaWV3XTsKKyAgICBpZiAoIVt2aWV3IHdpbmRvd10p
CisgICAgICAgIHJldHVybjsgLy8gc2tpcCB0aGUgaGlnaGxpZ2h0IGlmIHdlIGhhdmUgbm8gd2lu
ZG93IChlLmcuIGhpZGRlbiB0YWIpCisgICAgCisgICAgaWYgKCFfY3VycmVudEhpZ2hsaWdodCkg
eworICAgICAgICBfY3VycmVudEhpZ2hsaWdodCA9IFtbV2ViTm9kZUhpZ2hsaWdodCBhbGxvY10g
aW5pdFdpdGhUYXJnZXRWaWV3OnZpZXcgaW5zcGVjdG9yQ29udHJvbGxlcjpbX2luc3BlY3RlZFdl
YlZpZXcgcGFnZV0tPmluc3BlY3RvckNvbnRyb2xsZXIoKV07CisgICAgICAgIFtfY3VycmVudEhp
Z2hsaWdodCBzZXREZWxlZ2F0ZTpzZWxmXTsKKyAgICAgICAgW19jdXJyZW50SGlnaGxpZ2h0IGF0
dGFjaF07CisgICAgfSBlbHNlCisgICAgICAgIFtbX2N1cnJlbnRIaWdobGlnaHQgaGlnaGxpZ2h0
Vmlld10gc2V0TmVlZHNEaXNwbGF5OllFU107Cit9CisKKy0gKHZvaWQpaGlkZUhpZ2hsaWdodAor
eworICAgIFtfY3VycmVudEhpZ2hsaWdodCBkZXRhY2hdOworICAgIFtfY3VycmVudEhpZ2hsaWdo
dCBzZXREZWxlZ2F0ZTpuaWxdOworICAgIFtfY3VycmVudEhpZ2hsaWdodCByZWxlYXNlXTsKKyAg
ICBfY3VycmVudEhpZ2hsaWdodCA9IG5pbDsKK30KKworI3ByYWdtYSBtYXJrIC0KKyNwcmFnbWEg
bWFyayBXZWJOb2RlSGlnaGxpZ2h0IGRlbGVnYXRlCisKKy0gKHZvaWQpZGlkQXR0YWNoV2ViTm9k
ZUhpZ2hsaWdodDooV2ViTm9kZUhpZ2hsaWdodCAqKWhpZ2hsaWdodAoreworICAgIFtfaW5zcGVj
dGVkV2ViVmlldyBzZXRDdXJyZW50Tm9kZUhpZ2hsaWdodDpoaWdobGlnaHRdOworfQorCistICh2
b2lkKXdpbGxEZXRhY2hXZWJOb2RlSGlnaGxpZ2h0OihXZWJOb2RlSGlnaGxpZ2h0ICopaGlnaGxp
Z2h0Cit7CisgICAgW19pbnNwZWN0ZWRXZWJWaWV3IHNldEN1cnJlbnROb2RlSGlnaGxpZ2h0Om5p
bF07Cit9CisgICAgCitAZW5kCmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL1dlYkluc3BlY3Rvci9X
ZWJJbnNwZWN0b3IubW0gYi9XZWJLaXQvbWFjL1dlYkluc3BlY3Rvci9XZWJJbnNwZWN0b3IubW0K
aW5kZXggMjU4ZGQwMS4uOWIxNzQ1OSAxMDA2NDQKLS0tIGEvV2ViS2l0L21hYy9XZWJJbnNwZWN0
b3IvV2ViSW5zcGVjdG9yLm1tCisrKyBiL1dlYktpdC9tYWMvV2ViSW5zcGVjdG9yL1dlYkluc3Bl
Y3Rvci5tbQpAQCAtMTc1LDE0ICsxNzUsMTAgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAK
IC0gKHZvaWQpYXR0YWNoOihpZClzZW5kZXIKIHsKLSAgICBpZiAoUGFnZSogcGFnZSA9IGNvcmUo
X3dlYlZpZXcpKQotICAgICAgICBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmF0dGFjaFdp
bmRvdygpOwogfQogCiAtICh2b2lkKWRldGFjaDooaWQpc2VuZGVyCiB7Ci0gICAgaWYgKFBhZ2Uq
IHBhZ2UgPSBjb3JlKF93ZWJWaWV3KSkKLSAgICAgICAgcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxl
cigpLT5kZXRhY2hXaW5kb3coKTsKIH0KIAogLSAodm9pZClldmFsdWF0ZUluRnJvbnRlbmQ6KGlk
KXNlbmRlciBjYWxsSWQ6KGxvbmcpY2FsbElkIHNjcmlwdDooTlNTdHJpbmcgKilzY3JpcHQKZGlm
ZiAtLWdpdCBhL1dlYktpdC9xdC9BcGkvcXdlYmluc3BlY3Rvci5jcHAgYi9XZWJLaXQvcXQvQXBp
L3F3ZWJpbnNwZWN0b3IuY3BwCmluZGV4IGMzZWY1MzAuLmMwZTUyNzcgMTAwNjQ0Ci0tLSBhL1dl
YktpdC9xdC9BcGkvcXdlYmluc3BlY3Rvci5jcHAKKysrIGIvV2ViS2l0L3F0L0FwaS9xd2ViaW5z
cGVjdG9yLmNwcApAQCAtMTYxLDYgKzE2MSwxMCBAQCB2b2lkIFFXZWJJbnNwZWN0b3I6OnNob3dF
dmVudChRU2hvd0V2ZW50KiBldmVudCkKIC8qISBccmVpbXAgKi8KIHZvaWQgUVdlYkluc3BlY3Rv
cjo6aGlkZUV2ZW50KFFIaWRlRXZlbnQqIGV2ZW50KQogeworI2lmIEVOQUJMRShJTlNQRUNUT1Ip
CisgICAgaWYgKGQtPnBhZ2UpCisgICAgICAgIGQtPnBhZ2UtPmQtPmluc3BlY3RvckNvbnRyb2xs
ZXIoKS0+Y2xvc2UoKTsKKyNlbmRpZgogfQogCiAvKiEgXHJlaW1wICovCkBAIC0xNjgsNyArMTcy
LDcgQEAgdm9pZCBRV2ViSW5zcGVjdG9yOjpjbG9zZUV2ZW50KFFDbG9zZUV2ZW50KiBldmVudCkK
IHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAgIGlmIChkLT5wYWdlKQotICAgICAgICBkLT5w
YWdlLT5kLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnNldFdpbmRvd1Zpc2libGUoZmFsc2UpOwor
ICAgICAgICBkLT5wYWdlLT5kLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmNsb3NlKCk7CiAjZW5k
aWYKIH0KIApkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L0FwaS9xd2ViaW5zcGVjdG9yLmggYi9XZWJL
aXQvcXQvQXBpL3F3ZWJpbnNwZWN0b3IuaAppbmRleCA2Y2RhNDc5Li5mMTkyZTkyIDEwMDY0NAot
LS0gYS9XZWJLaXQvcXQvQXBpL3F3ZWJpbnNwZWN0b3IuaAorKysgYi9XZWJLaXQvcXQvQXBpL3F3
ZWJpbnNwZWN0b3IuaApAQCAtNTIsNSArNTIsNiBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFz
cyBRV2ViUGFnZTsKICAgICBmcmllbmQgY2xhc3MgUVdlYlBhZ2VQcml2YXRlOwogICAgIGZyaWVu
ZCBjbGFzcyBXZWJDb3JlOjpJbnNwZWN0b3JDbGllbnRRdDsKKyAgICBmcmllbmQgY2xhc3MgV2Vi
Q29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdDsKIH07CiAjZW5kaWYKZGlmZiAtLWdpdCBh
L1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuaCBiL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuaAppbmRl
eCA0NzY2Y2JkLi4wNzZmYjdjIDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmgK
KysrIGIvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5oCkBAIC01NCw2ICs1NCw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICBjbGFzcyBFZGl0b3JDbGllbnRRdDsKICAgICBjbGFzcyBGcmFtZUxv
YWRlckNsaWVudFF0OwogICAgIGNsYXNzIEluc3BlY3RvckNsaWVudFF0OworICAgIGNsYXNzIElu
c3BlY3RvckZyb250ZW5kQ2xpZW50UXQ7CiAgICAgY2xhc3MgUmVzb3VyY2VIYW5kbGU7CiAgICAg
Y2xhc3MgSGl0VGVzdFJlc3VsdDsKICAgICBjbGFzcyBRTmV0d29ya1JlcGx5SGFuZGxlcjsKQEAg
LTM2MSw2ICszNjIsNyBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBXZWJDb3JlOjpFZGl0
b3JDbGllbnRRdDsKICAgICBmcmllbmQgY2xhc3MgV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRR
dDsKICAgICBmcmllbmQgY2xhc3MgV2ViQ29yZTo6SW5zcGVjdG9yQ2xpZW50UXQ7CisgICAgZnJp
ZW5kIGNsYXNzIFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50UXQ7CiAgICAgZnJpZW5k
IGNsYXNzIFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOwogICAgIGZyaWVuZCBjbGFzcyBXZWJDb3Jl
OjpRTmV0d29ya1JlcGx5SGFuZGxlcjsKIH07CmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQ2hhbmdl
TG9nIGIvV2ViS2l0L3F0L0NoYW5nZUxvZwppbmRleCA5OGVkMzlhLi4wMjQ0NzIwIDEwMDY0NAot
LS0gYS9XZWJLaXQvcXQvQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9xdC9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzMiBAQAorMjAxMC0wMy0xMSAgWXVyeSBTZW1pa2hhdHNreSA8eXVyeXNAY2hyb21pdW0u
b3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIElu
dHJvZHVjZSBJbnNwZWN0b3JGcm9udGVuZENsaWVudCB0aGF0IHByb3ZpZGVzIEluc3BlY3RvckZy
b250ZW5kIHdpdGggYW4gaW50ZXJmYWNlIHRvIHRoZSBlbWJlZGRlci4gSW5zcGVjdG9yQ2xpZW50
IG5vdyBzZXJ2ZXMgYXMgYSBkZWxlZ2F0ZSBmb3IgSW5zcGVjdG9yQ29udHJvbGxlciBhbmQgZG9l
cyBub3QgY29udGFpbiBtZXRob2RzIGZvciBtYW5hZ2luZyBpbnNwZWN0b3IgZnJvbnRlbmQgd2lu
ZG93LiBUaGF0IGFsbG93cyB0byBjcmVhdGUgcmVtb3RlIEluc3BlY3RvckZyb250ZW5kSG9zdC4K
KworICAgICAgICBJbnRyb2R1Y2UgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQgdGhhdCB3b3VsZCBw
cm92aWRlIEluc3BlY3RvckZyb250ZW5kIHdpdGggYW4gaW50ZXJmYWNlIHRvIHRoZSBlbWJlZGRl
cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzUwMzYK
KworICAgICAgICAqIEFwaS9xd2ViaW5zcGVjdG9yLmNwcDoKKyAgICAgICAgKFFXZWJJbnNwZWN0
b3I6OmhpZGVFdmVudCk6CisgICAgICAgIChRV2ViSW5zcGVjdG9yOjpjbG9zZUV2ZW50KToKKyAg
ICAgICAgKiBBcGkvcXdlYmluc3BlY3Rvci5oOgorICAgICAgICAqIEFwaS9xd2VicGFnZS5oOgor
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudFF0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckNsaWVudFF0OjpvcGVuSW5zcGVjdG9yRnJvbnRlbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdDo6SW5zcGVjdG9yRnJvbnRl
bmRDbGllbnRRdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0
Ojpmcm9udGVuZExvYWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENs
aWVudFF0Ojpsb2NhbGl6ZWRTdHJpbmdzVVJMKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50UXQ6OmhpZGRlblBhbmVscyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JGcm9udGVuZENsaWVudFF0OjpicmluZ1RvRnJvbnQpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdDo6Y2xvc2VXaW5kb3cpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdDo6YXR0YWNoV2luZG93KToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50UXQ6OmRldGFjaFdpbmRvdyk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0OjpzZXRBdHRhY2hlZFdpbmRvd0hl
aWdodCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0OjppbnNw
ZWN0ZWRVUkxDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xp
ZW50UXQ6OnVwZGF0ZVdpbmRvd1RpdGxlKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9JbnNw
ZWN0b3JDbGllbnRRdC5oOgorCiAyMDEwLTAzLTE1ICBMYXN6bG8gR29tYm9zICA8bGFzemxvLjEu
Z29tYm9zQG5va2lhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLgpkaWZmIC0tZ2l0IGEvV2Vi
S2l0L3F0L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudFF0LmNwcCBiL1dlYktpdC9xdC9X
ZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRRdC5jcHAKaW5kZXggY2RlNjRjOC4uOWJmN2Iy
ZSAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudFF0
LmNwcAorKysgYi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50UXQuY3Bw
CkBAIC04MSwxNSArODEsMTIgQEAgdm9pZCBJbnNwZWN0b3JDbGllbnRRdDo6aW5zcGVjdG9yRGVz
dHJveWVkKCkKICAgICBkZWxldGUgdGhpczsKIH0KIAotUGFnZSogSW5zcGVjdG9yQ2xpZW50UXQ6
OmNyZWF0ZVBhZ2UoKQotewotICAgIFFXZWJWaWV3KiBpbnNwZWN0b3JWaWV3ID0gbV9pbnNwZWN0
b3JWaWV3LmdldCgpOwotICAgIGlmICghaW5zcGVjdG9yVmlldykgewotICAgICAgICBpbnNwZWN0
b3JWaWV3ID0gbmV3IFFXZWJWaWV3OwotICAgICAgICBJbnNwZWN0b3JDbGllbnRXZWJQYWdlKiBp
bnNwZWN0b3JQYWdlID0gbmV3IEluc3BlY3RvckNsaWVudFdlYlBhZ2UoaW5zcGVjdG9yVmlldyk7
Ci0gICAgICAgIGluc3BlY3RvclZpZXctPnNldFBhZ2UoaW5zcGVjdG9yUGFnZSk7Ci0gICAgICAg
IG1faW5zcGVjdG9yVmlldy5zZXQoaW5zcGVjdG9yVmlldyk7Ci0gICAgfQorICAgIAordm9pZCBJ
bnNwZWN0b3JDbGllbnRRdDo6b3Blbkluc3BlY3RvckZyb250ZW5kKFdlYkNvcmU6Okluc3BlY3Rv
ckNvbnRyb2xsZXIqKQoreworICAgIFFXZWJWaWV3KiBpbnNwZWN0b3JWaWV3ID0gbmV3IFFXZWJW
aWV3OworICAgIEluc3BlY3RvckNsaWVudFdlYlBhZ2UqIGluc3BlY3RvclBhZ2UgPSBuZXcgSW5z
cGVjdG9yQ2xpZW50V2ViUGFnZShpbnNwZWN0b3JWaWV3KTsKKyAgICBpbnNwZWN0b3JWaWV3LT5z
ZXRQYWdlKGluc3BlY3RvclBhZ2UpOwogCiAgICAgUVVybCBpbnNwZWN0b3JVcmwgPSBtX2luc3Bl
Y3RlZFdlYlBhZ2UtPnNldHRpbmdzKCktPmluc3BlY3RvclVybCgpOwogICAgIGlmICghaW5zcGVj
dG9yVXJsLmlzVmFsaWQoKSkKQEAgLTk4LDUwICs5NSw3IEBAIFBhZ2UqIEluc3BlY3RvckNsaWVu
dFF0OjpjcmVhdGVQYWdlKCkKICAgICBtX2luc3BlY3RlZFdlYlBhZ2UtPmQtPmluc3BlY3RvckZy
b250ZW5kID0gaW5zcGVjdG9yVmlldzsKICAgICBtX2luc3BlY3RlZFdlYlBhZ2UtPmQtPmdldE9y
Q3JlYXRlSW5zcGVjdG9yKCktPmQtPnNldEZyb250ZW5kKGluc3BlY3RvclZpZXcpOwogCi0gICAg
cmV0dXJuIGluc3BlY3RvclZpZXctPnBhZ2UoKS0+ZC0+cGFnZTsKLX0KLQotU3RyaW5nIEluc3Bl
Y3RvckNsaWVudFF0Ojpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotU3RyaW5nIEluc3BlY3RvckNsaWVudFF0
OjpoaWRkZW5QYW5lbHMoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0
cmluZygpOwotfQotCi12b2lkIEluc3BlY3RvckNsaWVudFF0OjpzaG93V2luZG93KCkKLXsKLSAg
ICB1cGRhdGVXaW5kb3dUaXRsZSgpOwotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBtX2lu
c3BlY3RlZFdlYlBhZ2UtPmQtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0V2luZG93VmlzaWJs
ZSh0cnVlLCB0cnVlKTsKLSNlbmRpZgotfQotCi12b2lkIEluc3BlY3RvckNsaWVudFF0OjpjbG9z
ZVdpbmRvdygpCi17Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBtX2luc3BlY3RlZFdlYlBh
Z2UtPmQtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0V2luZG93VmlzaWJsZShmYWxzZSk7Ci0j
ZW5kaWYKLX0KLQotdm9pZCBJbnNwZWN0b3JDbGllbnRRdDo6YXR0YWNoV2luZG93KCkKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEluc3BlY3RvckNsaWVudFF0OjpkZXRhY2hX
aW5kb3coKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ2xp
ZW50UXQ6OnNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkKQotewotICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgaW5zcGVjdG9yVmlldy0+cGFnZSgpLT5kLT5wYWdlLT5pbnNwZWN0b3JD
b250cm9sbGVyKCktPnNldEluc3BlY3RvckZyb250ZW5kQ2xpZW50KG5ldyBJbnNwZWN0b3JGcm9u
dGVuZENsaWVudFF0KG1faW5zcGVjdGVkV2ViUGFnZSwgaW5zcGVjdG9yVmlldykpOwogfQogCiB2
b2lkIEluc3BlY3RvckNsaWVudFF0OjpoaWdobGlnaHQoTm9kZSopCkBAIC0xNTQsMjUgKzEwOCw2
IEBAIHZvaWQgSW5zcGVjdG9yQ2xpZW50UXQ6OmhpZGVIaWdobGlnaHQoKQogICAgIG5vdEltcGxl
bWVudGVkKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ2xpZW50UXQ6Omluc3BlY3RlZFVSTENoYW5n
ZWQoY29uc3QgU3RyaW5nJiBuZXdVUkwpCi17Ci0gICAgbV9pbnNwZWN0ZWRVUkwgPSBuZXdVUkw7
Ci0gICAgdXBkYXRlV2luZG93VGl0bGUoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDbGllbnRRdDo6
aW5zcGVjdG9yV2luZG93T2JqZWN0Q2xlYXJlZCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LX0KLQotdm9pZCBJbnNwZWN0b3JDbGllbnRRdDo6dXBkYXRlV2luZG93VGl0bGUoKQotewotICAg
IGlmIChtX2luc3BlY3RlZFdlYlBhZ2UtPmQtPmluc3BlY3RvcikgewotICAgICAgICBRU3RyaW5n
IGNhcHRpb24gPSBRQ29yZUFwcGxpY2F0aW9uOjp0cmFuc2xhdGUoIlFXZWJQYWdlIiwgIldlYiBJ
bnNwZWN0b3IgLSAlMiIpLmFyZyhtX2luc3BlY3RlZFVSTCk7Ci0gICAgICAgIG1faW5zcGVjdGVk
V2ViUGFnZS0+ZC0+aW5zcGVjdG9yLT5zZXRXaW5kb3dUaXRsZShjYXB0aW9uKTsKLSAgICB9Ci19
Ci0KIHZvaWQgSW5zcGVjdG9yQ2xpZW50UXQ6OnBvcHVsYXRlU2V0dGluZyhjb25zdCBTdHJpbmcm
IGtleSwgU3RyaW5nKiBzZXR0aW5nKQogewogICAgIFFTZXR0aW5ncyBxc2V0dGluZ3M7CkBAIC0y
MjYsNiArMTYxLDgxIEBAIHN0YXRpYyBRVmFyaWFudCBzZXR0aW5nVG9WYXJpYW50KGNvbnN0IFN0
cmluZyYgc2V0dGluZykKICAgICByZXR1cm4gcmV0VmFsOwogfQogCitJbnNwZWN0b3JGcm9udGVu
ZENsaWVudFF0OjpJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0KFFXZWJQYWdlKiBpbnNwZWN0ZWRX
ZWJQYWdlLCBQYXNzT3duUHRyPFFXZWJWaWV3PiBpbnNwZWN0b3JWaWV3KQorICAgIDogSW5zcGVj
dG9yRnJvbnRlbmRDbGllbnRMb2NhbChpbnNwZWN0ZWRXZWJQYWdlLT5kLT5wYWdlLT5pbnNwZWN0
b3JDb250cm9sbGVyKCksIGluc3BlY3RvclZpZXctPnBhZ2UoKS0+ZC0+cGFnZSkgCisgICAgLCBt
X2luc3BlY3RlZFdlYlBhZ2UoaW5zcGVjdGVkV2ViUGFnZSkKKyAgICAsIG1faW5zcGVjdG9yVmll
dyhpbnNwZWN0b3JWaWV3KQorICAgICwgbV9kZXN0cm95aW5nSW5zcGVjdG9yVmlldyhmYWxzZSkK
K3sKK30KKwordm9pZCBJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0Ojpmcm9udGVuZExvYWRlZCgp
Cit7CisgICAgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6ZnJvbnRlbmRMb2FkZWQoKTsK
KyAgICBzZXRBdHRhY2hlZFdpbmRvdyh0cnVlKTsKK30KKworU3RyaW5nIEluc3BlY3RvckZyb250
ZW5kQ2xpZW50UXQ6OmxvY2FsaXplZFN0cmluZ3NVUkwoKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitTdHJpbmcgSW5zcGVjdG9yRnJvbnRlbmRD
bGllbnRRdDo6aGlkZGVuUGFuZWxzKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJl
dHVybiBTdHJpbmcoKTsKK30KKwordm9pZCBJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0Ojpicmlu
Z1RvRnJvbnQoKQoreworICAgIHVwZGF0ZVdpbmRvd1RpdGxlKCk7Cit9CisKK3ZvaWQgSW5zcGVj
dG9yRnJvbnRlbmRDbGllbnRRdDo6Y2xvc2VXaW5kb3coKQoreworICAgIGlmIChtX2Rlc3Ryb3lp
bmdJbnNwZWN0b3JWaWV3KQorICAgICAgICByZXR1cm47CisgICAgbV9kZXN0cm95aW5nSW5zcGVj
dG9yVmlldyA9IHRydWU7CisKKyAgICAvLyBDbGVhciByZWZlcmVuY2UgZnJvbSBRV2ViSW5zcGVj
dG9yIHRvIHRoZSBmcm9udGVuZCB2aWV3LgorICAgIG1faW5zcGVjdGVkV2ViUGFnZS0+ZC0+Z2V0
T3JDcmVhdGVJbnNwZWN0b3IoKS0+ZC0+c2V0RnJvbnRlbmQoMCk7CisjaWYgRU5BQkxFKElOU1BF
Q1RPUikKKyAgICBtX2luc3BlY3RlZFdlYlBhZ2UtPmQtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+
ZGlzY29ubmVjdEZyb250ZW5kKCk7CisjZW5kaWYKKyAgICAvLyBDbGVhciBwb2ludGVyIGJlZm9y
ZSBkZWxldGluZyBXZWJWaWV3IHRvIGF2b2lkIHJlY3Vyc2l2ZSBjYWxscyB0byBpdHMgZGVzdHJ1
Y3Rvci4KKyAgICBkZWxldGUgbV9pbnNwZWN0b3JWaWV3LnJlbGVhc2UoKTsKK30KKwordm9pZCBJ
bnNwZWN0b3JGcm9udGVuZENsaWVudFF0OjphdHRhY2hXaW5kb3coKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdDo6ZGV0YWNoV2lu
ZG93KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEluc3BlY3RvckZyb250
ZW5kQ2xpZW50UXQ6OnNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdDo6aW5z
cGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIG5ld1VSTCkKK3sKKyAgICBtX2luc3BlY3Rl
ZFVSTCA9IG5ld1VSTDsKKyAgICB1cGRhdGVXaW5kb3dUaXRsZSgpOworfQorCit2b2lkIEluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50UXQ6OnVwZGF0ZVdpbmRvd1RpdGxlKCkKK3sKKyAgICBpZiAobV9p
bnNwZWN0ZWRXZWJQYWdlLT5kLT5pbnNwZWN0b3IpIHsKKyAgICAgICAgUVN0cmluZyBjYXB0aW9u
ID0gUUNvcmVBcHBsaWNhdGlvbjo6dHJhbnNsYXRlKCJRV2ViUGFnZSIsICJXZWIgSW5zcGVjdG9y
IC0gJTIiKS5hcmcobV9pbnNwZWN0ZWRVUkwpOworICAgICAgICBtX2luc3BlY3RlZFdlYlBhZ2Ut
PmQtPmluc3BlY3Rvci0+c2V0V2luZG93VGl0bGUoY2FwdGlvbik7CisgICAgfQorfQorCiB9CiAK
ICNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnRRdC5tb2MiCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQv
V2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50UXQuaCBiL1dlYktpdC9xdC9XZWJDb3JlU3Vw
cG9ydC9JbnNwZWN0b3JDbGllbnRRdC5oCmluZGV4IGM5NTQ4YjAuLjRiZWFkYWIgMTAwNjQ0Ci0t
LSBhL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRRdC5oCisrKyBiL1dl
YktpdC9xdC9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRRdC5oCkBAIC0zMSw3ICszMSw5
IEBACiAjZGVmaW5lIEluc3BlY3RvckNsaWVudFF0X2gKIAogI2luY2x1ZGUgIkluc3BlY3RvckNs
aWVudC5oIgorI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuaCIKICNpbmNs
dWRlICJPd25QdHIuaCIKKyNpbmNsdWRlICJQYXNzT3duUHRyLmgiCiAjaW5jbHVkZSA8UXRDb3Jl
L1FTdHJpbmc+CiAKIGNsYXNzIFFXZWJQYWdlOwpAQCAtNDgsMTMgKzUwLDI5IEBAIHB1YmxpYzoK
IAogICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0b3JEZXN0cm95ZWQoKTsKIAotICAgIHZpcnR1YWwg
UGFnZSogY3JlYXRlUGFnZSgpOworICAgIHZpcnR1YWwgdm9pZCBvcGVuSW5zcGVjdG9yRnJvbnRl
bmQoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlciopOworCisgICAgdmlydHVhbCB2b2lkIGhp
Z2hsaWdodChOb2RlKik7CisgICAgdmlydHVhbCB2b2lkIGhpZGVIaWdobGlnaHQoKTsKKworICAg
IHZpcnR1YWwgdm9pZCBwb3B1bGF0ZVNldHRpbmcoY29uc3QgU3RyaW5nJiBrZXksIFN0cmluZyog
dmFsdWUpOworICAgIHZpcnR1YWwgdm9pZCBzdG9yZVNldHRpbmcoY29uc3QgU3RyaW5nJiBrZXks
IGNvbnN0IFN0cmluZyYgdmFsdWUpOworCitwcml2YXRlOgorICAgIFFXZWJQYWdlKiBtX2luc3Bl
Y3RlZFdlYlBhZ2U7Cit9OworCitjbGFzcyBJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0IDogcHVi
bGljIEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwgeworcHVibGljOgorICAgIEluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50UXQoUVdlYlBhZ2UqIGluc3BlY3RlZFdlYlBhZ2UsIFBhc3NPd25QdHI8
UVdlYlZpZXc+IGluc3BlY3RvclZpZXcpOworCisgICAgdmlydHVhbCB2b2lkIGZyb250ZW5kTG9h
ZGVkKCk7CiAKICAgICB2aXJ0dWFsIFN0cmluZyBsb2NhbGl6ZWRTdHJpbmdzVVJMKCk7CiAKICAg
ICB2aXJ0dWFsIFN0cmluZyBoaWRkZW5QYW5lbHMoKTsKIAotICAgIHZpcnR1YWwgdm9pZCBzaG93
V2luZG93KCk7CisgICAgdmlydHVhbCB2b2lkIGJyaW5nVG9Gcm9udCgpOwogICAgIHZpcnR1YWwg
dm9pZCBjbG9zZVdpbmRvdygpOwogCiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaFdpbmRvdygpOwpA
QCAtNjIsMjAgKzgwLDE0IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRBdHRhY2hl
ZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpOwogCi0gICAgdmlydHVhbCB2b2lkIGhpZ2hs
aWdodChOb2RlKik7Ci0gICAgdmlydHVhbCB2b2lkIGhpZGVIaWdobGlnaHQoKTsKICAgICB2aXJ0
dWFsIHZvaWQgaW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIG5ld1VSTCk7CiAKLSAg
ICB2aXJ0dWFsIHZvaWQgcG9wdWxhdGVTZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5LCBTdHJpbmcq
IHZhbHVlKTsKLSAgICB2aXJ0dWFsIHZvaWQgc3RvcmVTZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5
LCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKLQotICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0b3JXaW5k
b3dPYmplY3RDbGVhcmVkKCk7Ci0KIHByaXZhdGU6CiAgICAgdm9pZCB1cGRhdGVXaW5kb3dUaXRs
ZSgpOwogICAgIFFXZWJQYWdlKiBtX2luc3BlY3RlZFdlYlBhZ2U7CiAgICAgT3duUHRyPFFXZWJW
aWV3PiBtX2luc3BlY3RvclZpZXc7CiAgICAgUVN0cmluZyBtX2luc3BlY3RlZFVSTDsKKyAgICBi
b29sIG1fZGVzdHJveWluZ0luc3BlY3RvclZpZXc7CiB9OwogfQogCmRpZmYgLS1naXQgYS9XZWJL
aXQvd2luL0NoYW5nZUxvZyBiL1dlYktpdC93aW4vQ2hhbmdlTG9nCmluZGV4IGI2YTMyMDMuLmIy
NWQ2NGIgMTAwNjQ0Ci0tLSBhL1dlYktpdC93aW4vQ2hhbmdlTG9nCisrKyBiL1dlYktpdC93aW4v
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsNDcgQEAKKzIwMTAtMDMtMTEgIFl1cnkgU2VtaWtoYXRza3kg
PHl1cnlzQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBJbnRyb2R1Y2UgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQgdGhhdCBwcm92
aWRlcyBJbnNwZWN0b3JGcm9udGVuZCB3aXRoIGFuIGludGVyZmFjZSB0byB0aGUgZW1iZWRkZXIu
IEluc3BlY3RvckNsaWVudCBub3cgc2VydmVzIGFzIGEgZGVsZWdhdGUgZm9yIEluc3BlY3RvckNv
bnRyb2xsZXIgYW5kIGRvZXMgbm90IGNvbnRhaW4gbWV0aG9kcyBmb3IgbWFuYWdpbmcgaW5zcGVj
dG9yIGZyb250ZW5kIHdpbmRvdy4gVGhhdCBhbGxvd3MgdG8gY3JlYXRlIHJlbW90ZSBJbnNwZWN0
b3JGcm9udGVuZEhvc3QuCisKKyAgICAgICAgSW50cm9kdWNlIEluc3BlY3RvckZyb250ZW5kQ2xp
ZW50IHRoYXQgd291bGQgcHJvdmlkZSBJbnNwZWN0b3JGcm9udGVuZCB3aXRoIGFuIGludGVyZmFj
ZSB0byB0aGUgZW1iZWRkZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTM1MDM2CisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JD
bGllbnQuY3BwOgorICAgICAgICAoV2ViSW5zcGVjdG9yQ2xpZW50OjpXZWJJbnNwZWN0b3JDbGll
bnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yQ2xpZW50Ojp+V2ViSW5zcGVjdG9yQ2xpZW50KToK
KyAgICAgICAgKFdlYkluc3BlY3RvckNsaWVudDo6b3Blbkluc3BlY3RvckZyb250ZW5kKToKKyAg
ICAgICAgKFdlYkluc3BlY3RvckNsaWVudDo6aGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYkluc3Bl
Y3RvckNsaWVudDo6aGlkZUhpZ2hsaWdodCk6CisgICAgICAgIChXZWJJbnNwZWN0b3JDbGllbnQ6
OnVwZGF0ZUhpZ2hsaWdodCk6CisgICAgICAgIChXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6
V2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRl
bmRDbGllbnQ6On5XZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3JGcm9udGVuZENsaWVudDo6ZnJvbnRlbmRMb2FkZWQpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yRnJvbnRlbmRDbGllbnQ6OmxvY2FsaXplZFN0cmluZ3NVUkwpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yRnJvbnRlbmRDbGllbnQ6OmhpZGRlblBhbmVscyk6CisgICAgICAgIChXZWJJbnNwZWN0
b3JGcm9udGVuZENsaWVudDo6YnJpbmdUb0Zyb250KToKKyAgICAgICAgKFdlYkluc3BlY3RvckZy
b250ZW5kQ2xpZW50OjpjbG9zZVdpbmRvdyk6CisgICAgICAgIChXZWJJbnNwZWN0b3JGcm9udGVu
ZENsaWVudDo6YXR0YWNoV2luZG93KToKKyAgICAgICAgKFdlYkluc3BlY3RvckZyb250ZW5kQ2xp
ZW50OjpkZXRhY2hXaW5kb3cpOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6
OnNldEF0dGFjaGVkV2luZG93SGVpZ2h0KToKKyAgICAgICAgKFdlYkluc3BlY3RvckZyb250ZW5k
Q2xpZW50OjppbnNwZWN0ZWRVUkxDaGFuZ2VkKToKKyAgICAgICAgKFdlYkluc3BlY3RvckZyb250
ZW5kQ2xpZW50OjpjbG9zZVdpbmRvd1dpdGhvdXROb3RpZmljYXRpb25zKToKKyAgICAgICAgKFdl
Ykluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpzaG93V2luZG93V2l0aG91dE5vdGlmaWNhdGlvbnMp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmRlc3Ryb3lJbnNwZWN0b3JW
aWV3KToKKyAgICAgICAgKFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50Ojp1cGRhdGVXaW5kb3dU
aXRsZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6b25HZXRNaW5NYXhJ
bmZvKToKKyAgICAgICAgKFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpvblNpemUpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6Om9uQ2xvc2UpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6Om9uU2V0Rm9jdXMpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yRnJvbnRlbmRDbGllbnQ6Om9uV2ViVmlld1dpbmRvd1Bvc0NoYW5naW5nKToKKyAgICAgICAg
KFdlYkluc3BlY3RvclduZFByb2MpOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGll
bnQ6OndpbmRvd1JlY2VpdmVkTWVzc2FnZSk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2Vi
SW5zcGVjdG9yQ2xpZW50Lmg6CisgICAgICAgIChXZWJJbnNwZWN0b3JDbGllbnQ6OmZyb250ZW5k
Q2xvc2luZyk6CisgICAgICAgICogV2ViSW5zcGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvcjo6YXR0YWNoKToKKyAgICAgICAgKFdlYkluc3BlY3Rvcjo6ZGV0YWNoKToKKwogMjAxMC0w
My0xNCAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IERhcmluIEFkbGVyLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9X
ZWJJbnNwZWN0b3JDbGllbnQuY3BwIGIvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJJbnNw
ZWN0b3JDbGllbnQuY3BwCmluZGV4IDZhMTBjMGQuLjE2YWQxNzIgMTAwNjQ0Ci0tLSBhL1dlYktp
dC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcAorKysgYi9XZWJLaXQv
d2luL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5jcHAKQEAgLTY5LDI1ICs2OSwx
MyBAQCBzdGF0aWMgQ0ZCdW5kbGVSZWYgZ2V0V2ViS2l0QnVuZGxlKCkKIAogV2ViSW5zcGVjdG9y
Q2xpZW50OjpXZWJJbnNwZWN0b3JDbGllbnQoV2ViVmlldyogd2ViVmlldykKICAgICA6IG1faW5z
cGVjdGVkV2ViVmlldyh3ZWJWaWV3KQotICAgICwgbV9od25kKDApCi0gICAgLCBtX3dlYlZpZXdI
d25kKDApCi0gICAgLCBtX3Nob3VsZEF0dGFjaFdoZW5TaG93bihmYWxzZSkKLSAgICAsIG1fYXR0
YWNoZWQoZmFsc2UpCiB7CiAgICAgQVNTRVJUKG1faW5zcGVjdGVkV2ViVmlldyk7Ci0KICAgICBt
X2luc3BlY3RlZFdlYlZpZXctPnZpZXdXaW5kb3coKE9MRV9IQU5ETEUqKSZtX2luc3BlY3RlZFdl
YlZpZXdId25kKTsKLQotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgd2luZG93IHNpemUvcG9zaXRp
b24gc2F2ZS9yZXN0b3JlCi0jaWYgMAotICAgIFtzZWxmIHNldFdpbmRvd0ZyYW1lQXV0b3NhdmVO
YW1lOkAiV2ViIEluc3BlY3RvciJdOwotI2VuZGlmCiB9CiAKIFdlYkluc3BlY3RvckNsaWVudDo6
fldlYkluc3BlY3RvckNsaWVudCgpCiB7Ci0gICAgaWYgKG1faHduZCkKLSAgICAgICAgOjpEZXN0
cm95V2luZG93KG1faHduZCk7CiB9CiAKIHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjppbnNwZWN0
b3JEZXN0cm95ZWQoKQpAQCAtOTUsMzUgKzgzLDMwIEBAIHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50
OjppbnNwZWN0b3JEZXN0cm95ZWQoKQogICAgIGRlbGV0ZSB0aGlzOwogfQogCi1QYWdlKiBXZWJJ
bnNwZWN0b3JDbGllbnQ6OmNyZWF0ZVBhZ2UoKQordm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6Om9w
ZW5JbnNwZWN0b3JGcm9udGVuZChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9s
bGVyKQogewogICAgIHJlZ2lzdGVyV2luZG93Q2xhc3MoKTsKIAotICAgIGlmIChtX2h3bmQpCi0g
ICAgICAgIDo6RGVzdHJveVdpbmRvdyhtX2h3bmQpOwotCi0gICAgbV9od25kID0gOjpDcmVhdGVX
aW5kb3dFeCgwLCBrV2ViSW5zcGVjdG9yV2luZG93Q2xhc3NOYW1lLCAwLCBXU19PVkVSTEFQUEVE
V0lORE9XLAorICAgIEhXTkQgZnJvbnRlbmRId25kID0gOjpDcmVhdGVXaW5kb3dFeCgwLCBrV2Vi
SW5zcGVjdG9yV2luZG93Q2xhc3NOYW1lLCAwLCBXU19PVkVSTEFQUEVEV0lORE9XLAogICAgICAg
ICBkZWZhdWx0V2luZG93UmVjdCgpLngoKSwgZGVmYXVsdFdpbmRvd1JlY3QoKS55KCksIGRlZmF1
bHRXaW5kb3dSZWN0KCkud2lkdGgoKSwgZGVmYXVsdFdpbmRvd1JlY3QoKS5oZWlnaHQoKSwKICAg
ICAgICAgMCwgMCwgMCwgMCk7CiAKLSAgICBpZiAoIW1faHduZCkKLSAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICA6OlNldFByb3AobV9od25kLCBrV2ViSW5zcGVjdG9yUG9pbnRlclByb3AsIHJlaW50
ZXJwcmV0X2Nhc3Q8SEFORExFPih0aGlzKSk7CisgICAgaWYgKCFmcm9udGVuZEh3bmQpCisgICAg
ICAgIHJldHVybjsKIAotICAgIG1fd2ViVmlldy5hZG9wdFJlZihXZWJWaWV3OjpjcmVhdGVJbnN0
YW5jZSgpKTsKKyAgICBDT01QdHI8V2ViVmlldz4gZnJvbnRlbmRXZWJWaWV3KEFkb3B0Q09NLCBX
ZWJWaWV3OjpjcmVhdGVJbnN0YW5jZSgpKTsKIAotICAgIGlmIChGQUlMRUQobV93ZWJWaWV3LT5z
ZXRIb3N0V2luZG93KChPTEVfSEFORExFKShVTE9ORzY0KW1faHduZCkpKQotICAgICAgICByZXR1
cm4gMDsKKyAgICBpZiAoRkFJTEVEKGZyb250ZW5kV2ViVmlldy0+c2V0SG9zdFdpbmRvdygoT0xF
X0hBTkRMRSkoVUxPTkc2NClmcm9udGVuZEh3bmQpKSkKKyAgICAgICAgcmV0dXJuOwogCiAgICAg
UkVDVCByZWN0OwotICAgIEdldENsaWVudFJlY3QobV9od25kLCAmcmVjdCk7Ci0gICAgaWYgKEZB
SUxFRChtX3dlYlZpZXctPmluaXRXaXRoRnJhbWUocmVjdCwgMCwgMCkpKQotICAgICAgICByZXR1
cm4gMDsKKyAgICBHZXRDbGllbnRSZWN0KGZyb250ZW5kSHduZCwgJnJlY3QpOworICAgIGlmIChG
QUlMRUQoZnJvbnRlbmRXZWJWaWV3LT5pbml0V2l0aEZyYW1lKHJlY3QsIDAsIDApKSkKKyAgICAg
ICAgcmV0dXJuOwogCiAgICAgQ09NUHRyPFdlYkluc3BlY3RvckRlbGVnYXRlPiBkZWxlZ2F0ZShB
ZG9wdENPTSwgV2ViSW5zcGVjdG9yRGVsZWdhdGU6OmNyZWF0ZUluc3RhbmNlKCkpOwotICAgIGlm
IChGQUlMRUQobV93ZWJWaWV3LT5zZXRVSURlbGVnYXRlKGRlbGVnYXRlLmdldCgpKSkpCi0gICAg
ICAgIHJldHVybiAwOworICAgIGlmIChGQUlMRUQoZnJvbnRlbmRXZWJWaWV3LT5zZXRVSURlbGVn
YXRlKGRlbGVnYXRlLmdldCgpKSkpCisgICAgICAgIHJldHVybjsKIAogICAgIC8vIEtlZXAgcHJl
ZmVyZW5jZXMgc2VwYXJhdGUgZnJvbSB0aGUgcmVzdCBvZiB0aGUgY2xpZW50LCBtYWtpbmcgc3Vy
ZSB3ZSBhcmUgdXNpbmcgZXhwZWN0ZWQgcHJlZmVyZW5jZSB2YWx1ZXMuCiAgICAgLy8gT25lIHJl
YXNvbiB0aGlzIGlzIGdvb2QgaXMgdGhhdCBpdCBrZWVwcyB0aGUgaW5zcGVjdG9yIG91dCBvZiBo
aXN0b3J5IHZpYSAicHJpdmF0ZSBicm93c2luZyIuCkBAIC0xMzQsNjYgKzExNywxMjYgQEAgUGFn
ZSogV2ViSW5zcGVjdG9yQ2xpZW50OjpjcmVhdGVQYWdlKCkKICAgICBDT01QdHI8V2ViUHJlZmVy
ZW5jZXM+IHRlbXBQcmVmZXJlbmNlcyhBZG9wdENPTSwgV2ViUHJlZmVyZW5jZXM6OmNyZWF0ZUlu
c3RhbmNlKCkpOwogICAgIENPTVB0cjxJV2ViUHJlZmVyZW5jZXM+IGlQcmVmZXJlbmNlczsKICAg
ICBpZiAoRkFJTEVEKHRlbXBQcmVmZXJlbmNlcy0+aW5pdFdpdGhJZGVudGlmaWVyKEJTdHJpbmco
TCJXZWJJbnNwZWN0b3JQcmVmZXJlbmNlcyIpLCAmaVByZWZlcmVuY2VzKSkpCi0gICAgICAgIHJl
dHVybiAwOworICAgICAgICByZXR1cm47CiAgICAgQ09NUHRyPFdlYlByZWZlcmVuY2VzPiBwcmVm
ZXJlbmNlcyhRdWVyeSwgaVByZWZlcmVuY2VzKTsKICAgICBpZiAoIXByZWZlcmVuY2VzKQotICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuOwogICAgIGlmIChGQUlMRUQocHJlZmVyZW5j
ZXMtPnNldEF1dG9zYXZlcyhGQUxTRSkpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0
dXJuOwogICAgIGlmIChGQUlMRUQocHJlZmVyZW5jZXMtPnNldFByaXZhdGVCcm93c2luZ0VuYWJs
ZWQoVFJVRSkpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuOwogICAgIGlmIChG
QUlMRUQocHJlZmVyZW5jZXMtPnNldExvYWRzSW1hZ2VzQXV0b21hdGljYWxseShUUlVFKSkpCi0g
ICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm47CiAgICAgaWYgKEZBSUxFRChwcmVmZXJl
bmNlcy0+c2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQoVFJVRSkpKQotICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgcmV0dXJuOwogICAgIGlmIChGQUlMRUQocHJlZmVyZW5jZXMtPnNldEFs
bG93c0FuaW1hdGVkSW1hZ2VzKFRSVUUpKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJl
dHVybjsKICAgICBpZiAoRkFJTEVEKHByZWZlcmVuY2VzLT5zZXRMb2Fkc0ltYWdlc0F1dG9tYXRp
Y2FsbHkoVFJVRSkpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuOwogICAgIGlm
IChGQUlMRUQocHJlZmVyZW5jZXMtPnNldFBsdWdJbnNFbmFibGVkKEZBTFNFKSkpCi0gICAgICAg
IHJldHVybiAwOworICAgICAgICByZXR1cm47CiAgICAgaWYgKEZBSUxFRChwcmVmZXJlbmNlcy0+
c2V0SmF2YUVuYWJsZWQoRkFMU0UpKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVy
bjsKICAgICBpZiAoRkFJTEVEKHByZWZlcmVuY2VzLT5zZXRVc2VyU3R5bGVTaGVldEVuYWJsZWQo
RkFMU0UpKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybjsKICAgICBpZiAoRkFJ
TEVEKHByZWZlcmVuY2VzLT5zZXRUYWJzVG9MaW5rcyhGQUxTRSkpKQotICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgcmV0dXJuOwogICAgIGlmIChGQUlMRUQocHJlZmVyZW5jZXMtPnNldE1pbmlt
dW1Gb250U2l6ZSgwKSkpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm47CiAgICAg
aWYgKEZBSUxFRChwcmVmZXJlbmNlcy0+c2V0TWluaW11bUxvZ2ljYWxGb250U2l6ZSg5KSkpCi0g
ICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm47CiAgICAgaWYgKEZBSUxFRChwcmVmZXJl
bmNlcy0+c2V0Rml4ZWRGb250RmFtaWx5KEJTdHJpbmcoTCJDb3VyaWVyIE5ldyIpKSkpCi0gICAg
ICAgIHJldHVybiAwOworICAgICAgICByZXR1cm47CiAgICAgaWYgKEZBSUxFRChwcmVmZXJlbmNl
cy0+c2V0RGVmYXVsdEZpeGVkRm9udFNpemUoMTMpKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgIHJldHVybjsKIAotICAgIGlmIChGQUlMRUQobV93ZWJWaWV3LT5zZXRQcmVmZXJlbmNlcyhw
cmVmZXJlbmNlcy5nZXQoKSkpKQotICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoRkFJTEVEKGZy
b250ZW5kV2ViVmlldy0+c2V0UHJlZmVyZW5jZXMocHJlZmVyZW5jZXMuZ2V0KCkpKSkKKyAgICAg
ICAgcmV0dXJuOwogCi0gICAgbV93ZWJWaWV3LT5zZXRQcm9oaWJpdHNNYWluRnJhbWVTY3JvbGxp
bmcoVFJVRSk7CisgICAgZnJvbnRlbmRXZWJWaWV3LT5zZXRQcm9oaWJpdHNNYWluRnJhbWVTY3Jv
bGxpbmcoVFJVRSk7CiAKLSAgICBpZiAoRkFJTEVEKG1fd2ViVmlldy0+dmlld1dpbmRvdyhyZWlu
dGVycHJldF9jYXN0PE9MRV9IQU5ETEUqPigmbV93ZWJWaWV3SHduZCkpKSkKLSAgICAgICAgcmV0
dXJuIDA7CisgICAgSFdORCBmcm9udGVuZFdlYlZpZXdId25kOworICAgIGlmIChGQUlMRUQoZnJv
bnRlbmRXZWJWaWV3LT52aWV3V2luZG93KHJlaW50ZXJwcmV0X2Nhc3Q8T0xFX0hBTkRMRSo+KCZm
cm9udGVuZFdlYlZpZXdId25kKSkpKQorICAgICAgICByZXR1cm47CiAKLSAgICBDT01QdHI8V2Vi
TXV0YWJsZVVSTFJlcXVlc3Q+IHJlcXVlc3Q7Ci0gICAgcmVxdWVzdC5hZG9wdFJlZihXZWJNdXRh
YmxlVVJMUmVxdWVzdDo6Y3JlYXRlSW5zdGFuY2UoKSk7CisgICAgQ09NUHRyPFdlYk11dGFibGVV
UkxSZXF1ZXN0PiByZXF1ZXN0KEFkb3B0Q09NLCBXZWJNdXRhYmxlVVJMUmVxdWVzdDo6Y3JlYXRl
SW5zdGFuY2UoKSk7CiAKICAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IGh0bWxVUkxSZWYoQWRvcHRD
RiwgQ0ZCdW5kbGVDb3B5UmVzb3VyY2VVUkwoZ2V0V2ViS2l0QnVuZGxlKCksIENGU1RSKCJpbnNw
ZWN0b3IiKSwgQ0ZTVFIoImh0bWwiKSwgQ0ZTVFIoImluc3BlY3RvciIpKSk7CiAgICAgaWYgKCFo
dG1sVVJMUmVmKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuOwogCiAgICAgQ0ZT
dHJpbmdSZWYgdXJsU3RyaW5nUmVmID0gOjpDRlVSTEdldFN0cmluZyhodG1sVVJMUmVmLmdldCgp
KTsKICAgICBpZiAoRkFJTEVEKHJlcXVlc3QtPmluaXRXaXRoVVJMKEJTdHJpbmcodXJsU3RyaW5n
UmVmKSwgV2ViVVJMUmVxdWVzdFVzZVByb3RvY29sQ2FjaGVQb2xpY3ksIDYwKSkpCi0gICAgICAg
IHJldHVybiAwOworICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoRkFJTEVEKG1fd2ViVmlldy0+
dG9wTGV2ZWxGcmFtZSgpLT5sb2FkUmVxdWVzdChyZXF1ZXN0LmdldCgpKSkpCi0gICAgICAgIHJl
dHVybiAwOworICAgIGlmIChGQUlMRUQoZnJvbnRlbmRXZWJWaWV3LT50b3BMZXZlbEZyYW1lKCkt
PmxvYWRSZXF1ZXN0KHJlcXVlc3QuZ2V0KCkpKSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgcmV0
dXJuIGNvcmUobV93ZWJWaWV3LmdldCgpKTsKKyAgICBQYWdlKiBwYWdlID0gY29yZShmcm9udGVu
ZFdlYlZpZXcuZ2V0KCkpOworICAgIHBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0SW5z
cGVjdG9yRnJvbnRlbmRDbGllbnQobmV3IFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50KG1faW5z
cGVjdGVkV2ViVmlldywgbV9pbnNwZWN0ZWRXZWJWaWV3SHduZCwgZnJvbnRlbmRId25kLCBmcm9u
dGVuZFdlYlZpZXcsIGZyb250ZW5kV2ViVmlld0h3bmQsIHRoaXMpKTsKKyAgICBtX2Zyb250ZW5k
SHduZCA9IGZyb250ZW5kSHduZDsKIH0KIAordm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmhpZ2hs
aWdodChOb2RlKikKK3sKKyAgICBib29sIGNyZWF0aW5nSGlnaGxpZ2h0ID0gIW1faGlnaGxpZ2h0
OworCisgICAgaWYgKGNyZWF0aW5nSGlnaGxpZ2h0KQorICAgICAgICBtX2hpZ2hsaWdodC5zZXQo
bmV3IFdlYk5vZGVIaWdobGlnaHQobV9pbnNwZWN0ZWRXZWJWaWV3KSk7CiAKLVN0cmluZyBXZWJJ
bnNwZWN0b3JDbGllbnQ6OmxvY2FsaXplZFN0cmluZ3NVUkwoKQorICAgIGlmIChtX2hpZ2hsaWdo
dC0+aXNTaG93aW5nKCkpCisgICAgICAgIG1faGlnaGxpZ2h0LT51cGRhdGUoKTsKKyAgICBlbHNl
CisgICAgICAgIG1faGlnaGxpZ2h0LT5zZXRTaG93c1doaWxlV2ViVmlld0lzVmlzaWJsZSh0cnVl
KTsKKworICAgIGlmIChjcmVhdGluZ0hpZ2hsaWdodCAmJiBJc1dpbmRvd1Zpc2libGUobV9mcm9u
dGVuZEh3bmQpKQorICAgICAgICBtX2hpZ2hsaWdodC0+cGxhY2VCZWhpbmRXaW5kb3cobV9mcm9u
dGVuZEh3bmQpOworfQorCit2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6aGlkZUhpZ2hsaWdodCgp
Cit7CisgICAgaWYgKG1faGlnaGxpZ2h0KQorICAgICAgICBtX2hpZ2hsaWdodC0+c2V0U2hvd3NX
aGlsZVdlYlZpZXdJc1Zpc2libGUoZmFsc2UpOworfQorCit2b2lkIFdlYkluc3BlY3RvckNsaWVu
dDo6dXBkYXRlSGlnaGxpZ2h0KCkKK3sKKyAgICBpZiAobV9oaWdobGlnaHQgJiYgbV9oaWdobGln
aHQtPmlzU2hvd2luZygpKQorICAgICAgICBtX2hpZ2hsaWdodC0+dXBkYXRlKCk7Cit9CisKK1dl
Ykluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudChXZWJW
aWV3KiBpbnNwZWN0ZWRXZWJWaWV3LCBIV05EIGluc3BlY3RlZFdlYlZpZXdId25kLCBIV05EIGZy
b250ZW5kSHduZCwgY29uc3QgQ09NUHRyPFdlYlZpZXc+JiBmcm9udGVuZFdlYlZpZXcsIEhXTkQg
ZnJvbnRlbmRXZWJWaWV3SHduZCwgV2ViSW5zcGVjdG9yQ2xpZW50KiBpbnNwZWN0b3JDbGllbnQp
CisgICAgOiBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsKGluc3BlY3RlZFdlYlZpZXctPnBh
Z2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLCAgY29yZShmcm9udGVuZFdlYlZpZXcuZ2V0KCkp
KQorICAgICwgbV9pbnNwZWN0ZWRXZWJWaWV3KGluc3BlY3RlZFdlYlZpZXcpCisgICAgLCBtX2lu
c3BlY3RlZFdlYlZpZXdId25kKGluc3BlY3RlZFdlYlZpZXdId25kKQorICAgICwgbV9pbnNwZWN0
b3JDbGllbnQoaW5zcGVjdG9yQ2xpZW50KQorICAgICwgbV9mcm9udGVuZEh3bmQoZnJvbnRlbmRI
d25kKQorICAgICwgbV9mcm9udGVuZFdlYlZpZXcoZnJvbnRlbmRXZWJWaWV3KQorICAgICwgbV9m
cm9udGVuZFdlYlZpZXdId25kKGZyb250ZW5kV2ViVmlld0h3bmQpCisgICAgLCBtX3Nob3VsZEF0
dGFjaFdoZW5TaG93bihmYWxzZSkKKyAgICAsIG1fYXR0YWNoZWQoZmFsc2UpCisgICAgLCBtX2Rl
c3Ryb3lpbmdJbnNwZWN0b3JWaWV3KGZhbHNlKQoreworICAgIDo6U2V0UHJvcChmcm9udGVuZEh3
bmQsIGtXZWJJbnNwZWN0b3JQb2ludGVyUHJvcCwgcmVpbnRlcnByZXRfY2FzdDxIQU5ETEU+KHRo
aXMpKTsKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHdpbmRvdyBzaXplL3Bvc2l0aW9uIHNhdmUv
cmVzdG9yZQorI2lmIDAKKyAgICBbc2VsZiBzZXRXaW5kb3dGcmFtZUF1dG9zYXZlTmFtZTpAIldl
YiBJbnNwZWN0b3IiXTsKKyNlbmRpZgorfQorCitXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6
fldlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50KCkKK3sKKyAgICBkZXN0cm95SW5zcGVjdG9yVmll
dygpOworfQorCit2b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50Ojpmcm9udGVuZExvYWRl
ZCgpCit7CisgICAgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6ZnJvbnRlbmRMb2FkZWQo
KTsKKworICAgIHNldEF0dGFjaGVkV2luZG93KG1fYXR0YWNoZWQpOworfQorCitTdHJpbmcgV2Vi
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmxvY2FsaXplZFN0cmluZ3NVUkwoKQogewogICAgIFJl
dGFpblB0cjxDRlVSTFJlZj4gdXJsKEFkb3B0Q0YsIENGQnVuZGxlQ29weVJlc291cmNlVVJMKGdl
dFdlYktpdEJ1bmRsZSgpLCBDRlNUUigibG9jYWxpemVkU3RyaW5ncyIpLCBDRlNUUigianMiKSwg
MCkpOwogICAgIGlmICghdXJsKQpAQCAtMjAyLDMxICsyNDUsMjMgQEAgU3RyaW5nIFdlYkluc3Bl
Y3RvckNsaWVudDo6bG9jYWxpemVkU3RyaW5nc1VSTCgpCiAgICAgcmV0dXJuIENGVVJMR2V0U3Ry
aW5nKHVybC5nZXQoKSk7CiB9CiAKLQotU3RyaW5nIFdlYkluc3BlY3RvckNsaWVudDo6aGlkZGVu
UGFuZWxzKCkKK1N0cmluZyBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6aGlkZGVuUGFuZWxz
KCkKIHsKICAgICAvLyBGSVhNRTogaW1wbGVtZW50IHRoaXMKICAgICByZXR1cm4gU3RyaW5nKCk7
CiB9CiAKLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpzaG93V2luZG93KCkKK3ZvaWQgV2ViSW5z
cGVjdG9yRnJvbnRlbmRDbGllbnQ6OmJyaW5nVG9Gcm9udCgpCiB7CiAgICAgc2hvd1dpbmRvd1dp
dGhvdXROb3RpZmljYXRpb25zKCk7Ci0gICAgbV9pbnNwZWN0ZWRXZWJWaWV3LT5wYWdlKCktPmlu
c3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0V2luZG93VmlzaWJsZSh0cnVlLCBtX3Nob3VsZEF0dGFj
aFdoZW5TaG93bik7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpjbG9zZVdpbmRvdygp
Ci17Ci0gICAgY2xvc2VXaW5kb3dXaXRob3V0Tm90aWZpY2F0aW9ucygpOwotICAgIG1faW5zcGVj
dGVkV2ViVmlldy0+cGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnNldFdpbmRvd1Zpc2li
bGUoZmFsc2UsIG1fc2hvdWxkQXR0YWNoV2hlblNob3duKTsKIH0KIAotYm9vbCBXZWJJbnNwZWN0
b3JDbGllbnQ6OndpbmRvd1Zpc2libGUoKQordm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVu
dDo6Y2xvc2VXaW5kb3coKQogewotICAgIHJldHVybiAhITo6SXNXaW5kb3dWaXNpYmxlKG1faHdu
ZCk7CisgICAgZGVzdHJveUluc3BlY3RvclZpZXcoKTsKIH0KIAotdm9pZCBXZWJJbnNwZWN0b3JD
bGllbnQ6OmF0dGFjaFdpbmRvdygpCit2b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50Ojph
dHRhY2hXaW5kb3coKQogewogICAgIGlmIChtX2F0dGFjaGVkKQogICAgICAgICByZXR1cm47CkBA
IC0yMzcsNyArMjcyLDcgQEAgdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmF0dGFjaFdpbmRvdygp
CiAgICAgc2hvd1dpbmRvd1dpdGhvdXROb3RpZmljYXRpb25zKCk7CiB9CiAKLXZvaWQgV2ViSW5z
cGVjdG9yQ2xpZW50OjpkZXRhY2hXaW5kb3coKQordm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZENs
aWVudDo6ZGV0YWNoV2luZG93KCkKIHsKICAgICBpZiAoIW1fYXR0YWNoZWQpCiAgICAgICAgIHJl
dHVybjsKQEAgLTI0OCw3ICsyODMsNyBAQCB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6ZGV0YWNo
V2luZG93KCkKICAgICBzaG93V2luZG93V2l0aG91dE5vdGlmaWNhdGlvbnMoKTsKIH0KIAotdm9p
ZCBXZWJJbnNwZWN0b3JDbGllbnQ6OnNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhl
aWdodCkKK3ZvaWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OnNldEF0dGFjaGVkV2luZG93
SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkKIHsKICAgICBpZiAoIW1fYXR0YWNoZWQpCiAgICAgICAg
IHJldHVybjsKQEAgLTI2NiwxMDEgKzMwMSw3MyBAQCB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6
c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KQogICAgIGludCB0b3RhbEhl
aWdodCA9IGhvc3RXaW5kb3dSZWN0LmJvdHRvbSAtIGhvc3RXaW5kb3dSZWN0LnRvcDsKICAgICBp
bnQgd2ViVmlld1dpZHRoID0gaW5zcGVjdGVkUmVjdC5yaWdodCAtIGluc3BlY3RlZFJlY3QubGVm
dDsKIAotICAgIFNldFdpbmRvd1BvcyhtX3dlYlZpZXdId25kLCAwLCAwLCB0b3RhbEhlaWdodCAt
IGhlaWdodCwgd2ViVmlld1dpZHRoLCBoZWlnaHQsIFNXUF9OT1pPUkRFUik7CisgICAgU2V0V2lu
ZG93UG9zKG1fZnJvbnRlbmRXZWJWaWV3SHduZCwgMCwgMCwgdG90YWxIZWlnaHQgLSBoZWlnaHQs
IHdlYlZpZXdXaWR0aCwgaGVpZ2h0LCBTV1BfTk9aT1JERVIpOwogCiAgICAgLy8gV2Ugd2FudCB0
byBzZXQgdGhlIGluc3BlY3RlZCB3ZWIgdmlldyBoZWlnaHQgdG8gdGhlIHRvdGFsSGVpZ2h0LCBi
ZWNhdXNlIHRoZSBoZWlnaHQgYWRqdXN0bWVudAogICAgIC8vIG9mIHRoZSBpbnNwZWN0ZWQgd2Vi
IHZpZXcgaGFwcGVucyBpbiBvbldlYlZpZXdXaW5kb3dQb3NDaGFuZ2luZywgbm90IGhlcmUuCiAg
ICAgU2V0V2luZG93UG9zKG1faW5zcGVjdGVkV2ViVmlld0h3bmQsIDAsIDAsIDAsIHdlYlZpZXdX
aWR0aCwgdG90YWxIZWlnaHQsIFNXUF9OT1pPUkRFUik7CiAKLSAgICBSZWRyYXdXaW5kb3cobV93
ZWJWaWV3SHduZCwgMCwgMCwgUkRXX0lOVkFMSURBVEUgfCBSRFdfQUxMQ0hJTERSRU4gfCBSRFdf
VVBEQVRFTk9XKTsgCisgICAgUmVkcmF3V2luZG93KG1fZnJvbnRlbmRXZWJWaWV3SHduZCwgMCwg
MCwgUkRXX0lOVkFMSURBVEUgfCBSRFdfQUxMQ0hJTERSRU4gfCBSRFdfVVBEQVRFTk9XKTsgCiAg
ICAgUmVkcmF3V2luZG93KG1faW5zcGVjdGVkV2ViVmlld0h3bmQsIDAsIDAsIFJEV19JTlZBTElE
QVRFIHwgUkRXX0FMTENISUxEUkVOIHwgUkRXX1VQREFURU5PVyk7CiB9CiAKLXZvaWQgV2ViSW5z
cGVjdG9yQ2xpZW50OjpoaWdobGlnaHQoTm9kZSopCi17Ci0gICAgYm9vbCBjcmVhdGluZ0hpZ2hs
aWdodCA9ICFtX2hpZ2hsaWdodDsKLQotICAgIGlmIChjcmVhdGluZ0hpZ2hsaWdodCkKLSAgICAg
ICAgbV9oaWdobGlnaHQuc2V0KG5ldyBXZWJOb2RlSGlnaGxpZ2h0KG1faW5zcGVjdGVkV2ViVmll
dykpOwotCi0gICAgaWYgKG1faGlnaGxpZ2h0LT5pc1Nob3dpbmcoKSkKLSAgICAgICAgbV9oaWdo
bGlnaHQtPnVwZGF0ZSgpOwotICAgIGVsc2UKLSAgICAgICAgbV9oaWdobGlnaHQtPnNldFNob3dz
V2hpbGVXZWJWaWV3SXNWaXNpYmxlKHRydWUpOwotCi0gICAgaWYgKGNyZWF0aW5nSGlnaGxpZ2h0
ICYmIElzV2luZG93VmlzaWJsZShtX2h3bmQpKQotICAgICAgICBtX2hpZ2hsaWdodC0+cGxhY2VC
ZWhpbmRXaW5kb3cobV9od25kKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmhpZGVI
aWdobGlnaHQoKQotewotICAgIGlmIChtX2hpZ2hsaWdodCkKLSAgICAgICAgbV9oaWdobGlnaHQt
PnNldFNob3dzV2hpbGVXZWJWaWV3SXNWaXNpYmxlKGZhbHNlKTsKLX0KLQotdm9pZCBXZWJJbnNw
ZWN0b3JDbGllbnQ6Omluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJiBuZXdVUkwpCit2
b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjppbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0
IFN0cmluZyYgbmV3VVJMKQogewogICAgIG1faW5zcGVjdGVkVVJMID0gbmV3VVJMOwogICAgIHVw
ZGF0ZVdpbmRvd1RpdGxlKCk7CiB9CiAKLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjppbnNwZWN0
b3JXaW5kb3dPYmplY3RDbGVhcmVkKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12
b2lkIFdlYkluc3BlY3RvckNsaWVudDo6Y2xvc2VXaW5kb3dXaXRob3V0Tm90aWZpY2F0aW9ucygp
Cit2b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpjbG9zZVdpbmRvd1dpdGhvdXROb3Rp
ZmljYXRpb25zKCkKIHsKLSAgICBpZiAoIW1faHduZCkKKyAgICBpZiAoIW1fZnJvbnRlbmRId25k
KQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIW1fYXR0YWNoZWQpIHsKLSAgICAgICAgU2hv
d1dpbmRvdyhtX2h3bmQsIFNXX0hJREUpOworICAgICAgICBTaG93V2luZG93KG1fZnJvbnRlbmRI
d25kLCBTV19ISURFKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEFTU0VSVChtX3dl
YlZpZXcpOworICAgIEFTU0VSVChtX2Zyb250ZW5kV2ViVmlldyk7CiAgICAgQVNTRVJUKG1faW5z
cGVjdGVkV2ViVmlld0h3bmQpOwotICAgIEFTU0VSVCghSXNXaW5kb3dWaXNpYmxlKG1faHduZCkp
OworICAgIEFTU0VSVCghSXNXaW5kb3dWaXNpYmxlKG1fZnJvbnRlbmRId25kKSk7CiAKICAgICAv
LyBSZW1vdmUgdGhlIEluc3BlY3RvcidzIFdlYlZpZXcgZnJvbSB0aGUgaW5zcGVjdGVkIFdlYlZp
ZXcncyBwYXJlbnQgd2luZG93LgogICAgIFdpbmRvd01lc3NhZ2VCcm9hZGNhc3Rlcjo6cmVtb3Zl
TGlzdGVuZXIobV9pbnNwZWN0ZWRXZWJWaWV3SHduZCwgdGhpcyk7CiAKICAgICBtX2F0dGFjaGVk
ID0gZmFsc2U7CiAKLSAgICBtX3dlYlZpZXctPnNldEhvc3RXaW5kb3cocmVpbnRlcnByZXRfY2Fz
dDxPTEVfSEFORExFPihtX2h3bmQpKTsKKyAgICBtX2Zyb250ZW5kV2ViVmlldy0+c2V0SG9zdFdp
bmRvdyhyZWludGVycHJldF9jYXN0PE9MRV9IQU5ETEU+KG1fZnJvbnRlbmRId25kKSk7CiAKICAg
ICAvLyBNYWtlIHN1cmUgZXZlcnl0aGluZyBoYXMgdGhlIHJpZ2h0IHNpemUvcG9zaXRpb24uCiAg
ICAgSFdORCBob3N0V2luZG93OwogICAgIGlmIChTVUNDRUVERUQobV9pbnNwZWN0ZWRXZWJWaWV3
LT5ob3N0V2luZG93KChPTEVfSEFORExFKikmaG9zdFdpbmRvdykpKQogICAgICAgICBTZW5kTWVz
c2FnZShob3N0V2luZG93LCBXTV9TSVpFLCAwLCAwKTsKIAotICAgIGlmIChtX2hpZ2hsaWdodCAm
JiBtX2hpZ2hsaWdodC0+aXNTaG93aW5nKCkpCi0gICAgICAgIG1faGlnaGxpZ2h0LT51cGRhdGUo
KTsKKyAgICBtX2luc3BlY3RvckNsaWVudC0+dXBkYXRlSGlnaGxpZ2h0KCk7CiB9CiAKLXZvaWQg
V2ViSW5zcGVjdG9yQ2xpZW50OjpzaG93V2luZG93V2l0aG91dE5vdGlmaWNhdGlvbnMoKQordm9p
ZCBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6c2hvd1dpbmRvd1dpdGhvdXROb3RpZmljYXRp
b25zKCkKIHsKLSAgICBpZiAoIW1faHduZCkKKyAgICBpZiAoIW1fZnJvbnRlbmRId25kKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQobV93ZWJWaWV3KTsKKyAgICBBU1NFUlQobV9mcm9u
dGVuZFdlYlZpZXcpOwogICAgIEFTU0VSVChtX2luc3BlY3RlZFdlYlZpZXdId25kKTsKIAogICAg
IC8vIElmIG5vIHByZWZlcmVuY2UgaXMgc2V0IC0gZGVmYXVsdCB0byBhbiBhdHRhY2hlZCB3aW5k
b3cuIFRoaXMgaXMgaW1wb3J0YW50IGZvciBpbnNwZWN0b3IgTGF5b3V0VGVzdHMuCiAgICAgU3Ry
aW5nIHNob3VsZEF0dGFjaCA9IG1faW5zcGVjdGVkV2ViVmlldy0+cGFnZSgpLT5pbnNwZWN0b3JD
b250cm9sbGVyKCktPnNldHRpbmcoSW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zcGVjdG9yU3RhcnRz
QXR0YWNoZWRTZXR0aW5nTmFtZSgpKTsKICAgICBtX3Nob3VsZEF0dGFjaFdoZW5TaG93biA9IHNo
b3VsZEF0dGFjaCAhPSAiZmFsc2UiOwogICAgICAgICAKLSAgICBpZiAobV9zaG91bGRBdHRhY2hX
aGVuU2hvd24gJiYgIW1faW5zcGVjdGVkV2ViVmlldy0+cGFnZSgpLT5pbnNwZWN0b3JDb250cm9s
bGVyKCktPmNhbkF0dGFjaFdpbmRvdygpKQorICAgIGlmIChtX3Nob3VsZEF0dGFjaFdoZW5TaG93
biAmJiAhY2FuQXR0YWNoV2luZG93KCkpCiAgICAgICAgIG1fc2hvdWxkQXR0YWNoV2hlblNob3du
ID0gZmFsc2U7CiAgICAgCiAgICAgaWYgKCFtX3Nob3VsZEF0dGFjaFdoZW5TaG93bikgewogICAg
ICAgICAvLyBQdXQgdGhlIEluc3BlY3RvcidzIFdlYlZpZXcgaW5zaWRlIG91ciB3aW5kb3cgYW5k
IHNob3cgaXQuCi0gICAgICAgIG1fd2ViVmlldy0+c2V0SG9zdFdpbmRvdyhyZWludGVycHJldF9j
YXN0PE9MRV9IQU5ETEU+KG1faHduZCkpOwotICAgICAgICBTZW5kTWVzc2FnZShtX2h3bmQsIFdN
X1NJWkUsIDAsIDApOworICAgICAgICBtX2Zyb250ZW5kV2ViVmlldy0+c2V0SG9zdFdpbmRvdyhy
ZWludGVycHJldF9jYXN0PE9MRV9IQU5ETEU+KG1fZnJvbnRlbmRId25kKSk7CisgICAgICAgIFNl
bmRNZXNzYWdlKG1fZnJvbnRlbmRId25kLCBXTV9TSVpFLCAwLCAwKTsKICAgICAgICAgdXBkYXRl
V2luZG93VGl0bGUoKTsKIAotICAgICAgICBTZXRXaW5kb3dQb3MobV9od25kLCBIV05EX1RPUCwg
MCwgMCwgMCwgMCwgU1dQX1NIT1dXSU5ET1cgfCBTV1BfTk9NT1ZFIHwgU1dQX05PU0laRSk7Cisg
ICAgICAgIFNldFdpbmRvd1BvcyhtX2Zyb250ZW5kSHduZCwgSFdORF9UT1AsIDAsIDAsIDAsIDAs
IFNXUF9TSE9XV0lORE9XIHwgU1dQX05PTU9WRSB8IFNXUF9OT1NJWkUpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCkBAIC0zNzEsMjAgKzM3OCwzMiBAQCB2b2lkIFdlYkluc3BlY3RvckNsaWVu
dDo6c2hvd1dpbmRvd1dpdGhvdXROb3RpZmljYXRpb25zKCkKICAgICBpZiAoRkFJTEVEKG1faW5z
cGVjdGVkV2ViVmlldy0+aG9zdFdpbmRvdyhyZWludGVycHJldF9jYXN0PE9MRV9IQU5ETEUqPigm
aG9zdFdpbmRvdykpKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV93ZWJWaWV3LT5zZXRIb3N0
V2luZG93KHJlaW50ZXJwcmV0X2Nhc3Q8T0xFX0hBTkRMRT4oaG9zdFdpbmRvdykpOworICAgIG1f
ZnJvbnRlbmRXZWJWaWV3LT5zZXRIb3N0V2luZG93KHJlaW50ZXJwcmV0X2Nhc3Q8T0xFX0hBTkRM
RT4oaG9zdFdpbmRvdykpOwogCiAgICAgLy8gVGhlbiBoaWRlIG91ciBvd24gd2luZG93LgotICAg
IFNob3dXaW5kb3cobV9od25kLCBTV19ISURFKTsKKyAgICBTaG93V2luZG93KG1fZnJvbnRlbmRI
d25kLCBTV19ISURFKTsKIAogICAgIG1fYXR0YWNoZWQgPSB0cnVlOwogCiAgICAgLy8gTWFrZSBz
dXJlIGV2ZXJ5dGhpbmcgaGFzIHRoZSByaWdodCBzaXplL3Bvc2l0aW9uLgogICAgIFNlbmRNZXNz
YWdlKGhvc3RXaW5kb3csIFdNX1NJWkUsIDAsIDApOwotICAgIGlmIChtX2hpZ2hsaWdodCAmJiBt
X2hpZ2hsaWdodC0+aXNTaG93aW5nKCkpCi0gICAgICAgIG1faGlnaGxpZ2h0LT51cGRhdGUoKTsK
KyAgICBtX2luc3BlY3RvckNsaWVudC0+dXBkYXRlSGlnaGxpZ2h0KCk7Cit9CisKK3ZvaWQgV2Vi
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmRlc3Ryb3lJbnNwZWN0b3JWaWV3KCkKK3sKKyAgICBp
ZiAobV9kZXN0cm95aW5nSW5zcGVjdG9yVmlldykKKyAgICAgICAgcmV0dXJuOworICAgIG1fZGVz
dHJveWluZ0luc3BlY3RvclZpZXcgPSB0cnVlOworCisgICAgbV9pbnNwZWN0ZWRXZWJWaWV3LT5w
YWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+ZGlzY29ubmVjdEZyb250ZW5kKCk7CisKKyAg
ICBjbG9zZVdpbmRvd1dpdGhvdXROb3RpZmljYXRpb25zKCk7CisgICAgbV9pbnNwZWN0b3JDbGll
bnQtPmZyb250ZW5kQ2xvc2luZygpOworICAgIDo6RGVzdHJveVdpbmRvdyhtX2Zyb250ZW5kSHdu
ZCk7CiB9CiAKLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50Ojp1cGRhdGVXaW5kb3dUaXRsZSgpCit2
b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50Ojp1cGRhdGVXaW5kb3dUaXRsZSgpCiB7CiAg
ICAgLy8gRklYTUU6IFRoZSBzZXJpZXMgb2YgYXBwZW5kcyBzaG91bGQgYmUgcmVwbGFjZWQgd2l0
aCBhIGNhbGwgdG8gU3RyaW5nOjpmb3JtYXQoKQogICAgIC8vIHdoZW4gaXQgY2FuIGJlIGZpZ3Vy
ZWQgb3V0IGhvdyB0byBnZXQgdGhlIHVuaWNvZGUgZW0tZGFzaCB0byBzaG93IHVwLgpAQCAtMzky
LDEwICs0MTEsMTAgQEAgdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OnVwZGF0ZVdpbmRvd1RpdGxl
KCkKICAgICB0aXRsZS5hcHBlbmQoKFVDaGFyKTB4MjAxNCk7IC8vIGVtLWRhc2gKICAgICB0aXRs
ZS5hcHBlbmQoJyAnKTsKICAgICB0aXRsZS5hcHBlbmQobV9pbnNwZWN0ZWRVUkwpOwotICAgIDo6
U2V0V2luZG93VGV4dChtX2h3bmQsIHRpdGxlLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9u
KCkpOworICAgIDo6U2V0V2luZG93VGV4dChtX2Zyb250ZW5kSHduZCwgdGl0bGUuY2hhcmFjdGVy
c1dpdGhOdWxsVGVybWluYXRpb24oKSk7CiB9CiAKLUxSRVNVTFQgV2ViSW5zcGVjdG9yQ2xpZW50
OjpvbkdldE1pbk1heEluZm8oV1BBUkFNLCBMUEFSQU0gbFBhcmFtKQorTFJFU1VMVCBXZWJJbnNw
ZWN0b3JGcm9udGVuZENsaWVudDo6b25HZXRNaW5NYXhJbmZvKFdQQVJBTSwgTFBBUkFNIGxQYXJh
bSkKIHsKICAgICBNSU5NQVhJTkZPKiBpbmZvID0gcmVpbnRlcnByZXRfY2FzdDxNSU5NQVhJTkZP
Kj4obFBhcmFtKTsKICAgICBQT0lOVCBzaXplID0gezQwMCwgNDAwfTsKQEAgLTQwNCwzMyArNDIz
LDMxIEBAIExSRVNVTFQgV2ViSW5zcGVjdG9yQ2xpZW50OjpvbkdldE1pbk1heEluZm8oV1BBUkFN
LCBMUEFSQU0gbFBhcmFtKQogICAgIHJldHVybiAwOwogfQogCi1MUkVTVUxUIFdlYkluc3BlY3Rv
ckNsaWVudDo6b25TaXplKFdQQVJBTSwgTFBBUkFNKQorTFJFU1VMVCBXZWJJbnNwZWN0b3JGcm9u
dGVuZENsaWVudDo6b25TaXplKFdQQVJBTSwgTFBBUkFNKQogewogICAgIFJFQ1QgcmVjdDsKLSAg
ICA6OkdldENsaWVudFJlY3QobV9od25kLCAmcmVjdCk7CisgICAgOjpHZXRDbGllbnRSZWN0KG1f
ZnJvbnRlbmRId25kLCAmcmVjdCk7CiAKLSAgICA6OlNldFdpbmRvd1BvcyhtX3dlYlZpZXdId25k
LCAwLCByZWN0LmxlZnQsIHJlY3QudG9wLCByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0LCByZWN0LmJv
dHRvbSAtIHJlY3QudG9wLCBTV1BfTk9aT1JERVIpOworICAgIDo6U2V0V2luZG93UG9zKG1fZnJv
bnRlbmRXZWJWaWV3SHduZCwgMCwgcmVjdC5sZWZ0LCByZWN0LnRvcCwgcmVjdC5yaWdodCAtIHJl
Y3QubGVmdCwgcmVjdC5ib3R0b20gLSByZWN0LnRvcCwgU1dQX05PWk9SREVSKTsKIAogICAgIHJl
dHVybiAwOwogfQogCi1MUkVTVUxUIFdlYkluc3BlY3RvckNsaWVudDo6b25DbG9zZShXUEFSQU0s
IExQQVJBTSkKK0xSRVNVTFQgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6Om9uQ2xvc2UoV1BB
UkFNLCBMUEFSQU0pCiB7Ci0gICAgOjpTaG93V2luZG93KG1faHduZCwgU1dfSElERSk7Ci0gICAg
bV9pbnNwZWN0ZWRXZWJWaWV3LT5wYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0V2lu
ZG93VmlzaWJsZShmYWxzZSwgbV9zaG91bGRBdHRhY2hXaGVuU2hvd24pOwotCi0gICAgaGlkZUhp
Z2hsaWdodCgpOworICAgIDo6U2hvd1dpbmRvdyhtX2Zyb250ZW5kSHduZCwgU1dfSElERSk7Cisg
ICAgbV9pbnNwZWN0ZWRXZWJWaWV3LT5wYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+Y2xv
c2UoKTsKIAogICAgIHJldHVybiAwOwogfQogCi1MUkVTVUxUIFdlYkluc3BlY3RvckNsaWVudDo6
b25TZXRGb2N1cygpCitMUkVTVUxUIFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpvblNldEZv
Y3VzKCkKIHsKLSAgICBTZXRGb2N1cyhtX3dlYlZpZXdId25kKTsKKyAgICBTZXRGb2N1cyhtX2Zy
b250ZW5kV2ViVmlld0h3bmQpOwogICAgIHJldHVybiAwOwogfQogCi12b2lkIFdlYkluc3BlY3Rv
ckNsaWVudDo6b25XZWJWaWV3V2luZG93UG9zQ2hhbmdpbmcoV1BBUkFNLCBMUEFSQU0gbFBhcmFt
KQordm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6b25XZWJWaWV3V2luZG93UG9zQ2hh
bmdpbmcoV1BBUkFNLCBMUEFSQU0gbFBhcmFtKQogewogICAgIEFTU0VSVChtX2F0dGFjaGVkKTsK
IApAQCAtNDQxLDE3ICs0NTgsMTcgQEAgdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6Om9uV2ViVmll
d1dpbmRvd1Bvc0NoYW5naW5nKFdQQVJBTSwgTFBBUkFNIGxQYXJhbSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgUkVDVCBpbnNwZWN0b3JSZWN0OwotICAgIEdldENsaWVudFJlY3QobV93ZWJWaWV3
SHduZCwgJmluc3BlY3RvclJlY3QpOworICAgIEdldENsaWVudFJlY3QobV9mcm9udGVuZFdlYlZp
ZXdId25kLCAmaW5zcGVjdG9yUmVjdCk7CiAgICAgdW5zaWduZWQgaW5zcGVjdG9ySGVpZ2h0ID0g
aW5zcGVjdG9yUmVjdC5ib3R0b20gLSBpbnNwZWN0b3JSZWN0LnRvcDsKIAogICAgIHdpbmRvd1Bv
cy0+Y3kgLT0gaW5zcGVjdG9ySGVpZ2h0OwogCi0gICAgU2V0V2luZG93UG9zKG1fd2ViVmlld0h3
bmQsIDAsIHdpbmRvd1Bvcy0+eCwgd2luZG93UG9zLT55ICsgd2luZG93UG9zLT5jeSwgd2luZG93
UG9zLT5jeCwgaW5zcGVjdG9ySGVpZ2h0LCBTV1BfTk9aT1JERVIpOworICAgIFNldFdpbmRvd1Bv
cyhtX2Zyb250ZW5kV2ViVmlld0h3bmQsIDAsIHdpbmRvd1Bvcy0+eCwgd2luZG93UG9zLT55ICsg
d2luZG93UG9zLT5jeSwgd2luZG93UG9zLT5jeCwgaW5zcGVjdG9ySGVpZ2h0LCBTV1BfTk9aT1JE
RVIpOwogfQogCiBzdGF0aWMgTFJFU1VMVCBDQUxMQkFDSyBXZWJJbnNwZWN0b3JXbmRQcm9jKEhX
TkQgaHduZCwgVUlOVCBtc2csIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCiB7Ci0gICAg
V2ViSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQgPSByZWludGVycHJldF9jYXN0PFdlYkluc3BlY3Rv
ckNsaWVudCo+KDo6R2V0UHJvcChod25kLCBrV2ViSW5zcGVjdG9yUG9pbnRlclByb3ApKTsKKyAg
ICBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudCogY2xpZW50ID0gcmVpbnRlcnByZXRfY2FzdDxX
ZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudCo+KDo6R2V0UHJvcChod25kLCBrV2ViSW5zcGVjdG9y
UG9pbnRlclByb3ApKTsKICAgICBpZiAoIWNsaWVudCkKICAgICAgICAgcmV0dXJuIDo6RGVmV2lu
ZG93UHJvYyhod25kLCBtc2csIHdQYXJhbSwgbFBhcmFtKTsKIApAQCAtNDcxLDcgKzQ4OCw3IEBA
IHN0YXRpYyBMUkVTVUxUIENBTExCQUNLIFdlYkluc3BlY3RvclduZFByb2MoSFdORCBod25kLCBV
SU5UIG1zZywgV1BBUkFNIHdQYXJhbSwKICAgICByZXR1cm4gOjpEZWZXaW5kb3dQcm9jKGh3bmQs
IG1zZywgd1BhcmFtLCBsUGFyYW0pOwogfQogCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6d2lu
ZG93UmVjZWl2ZWRNZXNzYWdlKEhXTkQsIFVJTlQgbXNnLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0g
bFBhcmFtKQordm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6d2luZG93UmVjZWl2ZWRN
ZXNzYWdlKEhXTkQsIFVJTlQgbXNnLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQogewog
ICAgIHN3aXRjaCAobXNnKSB7CiAgICAgICAgIGNhc2UgV01fV0lORE9XUE9TQ0hBTkdJTkc6CmRp
ZmYgLS1naXQgYS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5o
IGIvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuaAppbmRleCAz
ZjY1YjBhLi40NTVlM2ExIDEwMDY0NAotLS0gYS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dl
Ykluc3BlY3RvckNsaWVudC5oCisrKyBiL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViSW5z
cGVjdG9yQ2xpZW50LmgKQEAgLTMxLDYgKzMxLDcgQEAKIAogI2luY2x1ZGUgPFdlYkNvcmUvQ09N
UHRyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JDbGllbnQuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L1BsYXRmb3JtU3RyaW5nLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9XaW5kb3dNZXNzYWdlTGlzdGVu
ZXIuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CkBAIC0zOSw0NCArNDAsNjAgQEAKIGNsYXNz
IFdlYk5vZGVIaWdobGlnaHQ7CiBjbGFzcyBXZWJWaWV3OwogCi1jbGFzcyBXZWJJbnNwZWN0b3JD
bGllbnQgOiBwdWJsaWMgV2ViQ29yZTo6SW5zcGVjdG9yQ2xpZW50LCBXZWJDb3JlOjpXaW5kb3dN
ZXNzYWdlTGlzdGVuZXIgeworY2xhc3MgV2ViSW5zcGVjdG9yQ2xpZW50IDogcHVibGljIFdlYkNv
cmU6Okluc3BlY3RvckNsaWVudCB7CiBwdWJsaWM6CiAgICAgV2ViSW5zcGVjdG9yQ2xpZW50KFdl
YlZpZXcqKTsKIAogICAgIC8vIEluc3BlY3RvckNsaWVudAogICAgIHZpcnR1YWwgdm9pZCBpbnNw
ZWN0b3JEZXN0cm95ZWQoKTsKIAotICAgIHZpcnR1YWwgV2ViQ29yZTo6UGFnZSogY3JlYXRlUGFn
ZSgpOwotCi0gICAgdmlydHVhbCBXZWJDb3JlOjpTdHJpbmcgbG9jYWxpemVkU3RyaW5nc1VSTCgp
OwotCi0gICAgdmlydHVhbCBXZWJDb3JlOjpTdHJpbmcgaGlkZGVuUGFuZWxzKCk7Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgc2hvd1dpbmRvdygpOwotICAgIHZpcnR1YWwgdm9pZCBjbG9zZVdpbmRvdygp
OwotICAgIHZpcnR1YWwgYm9vbCB3aW5kb3dWaXNpYmxlKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
YXR0YWNoV2luZG93KCk7Ci0gICAgdmlydHVhbCB2b2lkIGRldGFjaFdpbmRvdygpOwotCi0gICAg
dmlydHVhbCB2b2lkIHNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCk7Cisg
ICAgdmlydHVhbCB2b2lkIG9wZW5JbnNwZWN0b3JGcm9udGVuZChXZWJDb3JlOjpJbnNwZWN0b3JD
b250cm9sbGVyKik7CiAKICAgICB2aXJ0dWFsIHZvaWQgaGlnaGxpZ2h0KFdlYkNvcmU6Ok5vZGUq
KTsKICAgICB2aXJ0dWFsIHZvaWQgaGlkZUhpZ2hsaWdodCgpOwogCi0gICAgdmlydHVhbCB2b2lk
IGluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBuZXdVUkwpOwotCiAg
ICAgdmlydHVhbCB2b2lkIHBvcHVsYXRlU2V0dGluZyhjb25zdCBXZWJDb3JlOjpTdHJpbmcmIGtl
eSwgV2ViQ29yZTo6U3RyaW5nKiB2YWx1ZSk7CiAgICAgdmlydHVhbCB2b2lkIHN0b3JlU2V0dGlu
Zyhjb25zdCBXZWJDb3JlOjpTdHJpbmcmIGtleSwgY29uc3QgV2ViQ29yZTo6U3RyaW5nJiB2YWx1
ZSk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgaW5zcGVjdG9yV2luZG93T2JqZWN0Q2xlYXJlZCgpOwor
ICAgIHZvaWQgdXBkYXRlSGlnaGxpZ2h0KCk7CisgICAgdm9pZCBmcm9udGVuZENsb3NpbmcoKSB7
IG1fZnJvbnRlbmRId25kID0gMDsgfQogCiBwcml2YXRlOgogICAgIH5XZWJJbnNwZWN0b3JDbGll
bnQoKTsKIAorICAgIFdlYlZpZXcqIG1faW5zcGVjdGVkV2ViVmlldzsKKyAgICBIV05EIG1faW5z
cGVjdGVkV2ViVmlld0h3bmQ7CisgICAgSFdORCBtX2Zyb250ZW5kSHduZDsKKworICAgIE93blB0
cjxXZWJOb2RlSGlnaGxpZ2h0PiBtX2hpZ2hsaWdodDsKK307CisKK2NsYXNzIFdlYkluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50IDogcHVibGljIFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50
TG9jYWwsIFdlYkNvcmU6OldpbmRvd01lc3NhZ2VMaXN0ZW5lciB7CitwdWJsaWM6CisgICAgV2Vi
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQoV2ViVmlldyogaW5zcGVjdGVkV2ViVmlldywgSFdORCBp
bnNwZWN0ZWRXZWJWaWV3SHduZCwgSFdORCBmcm9udGVuZEh3bmQsIGNvbnN0IENPTVB0cjxXZWJW
aWV3PiYgZnJvdG5lbmRXZWJWaWV3LCBIV05EIGZyb250ZW5kV2ViVmlld0h3bmQsIFdlYkluc3Bl
Y3RvckNsaWVudCogaW5zcGVjdG9yQ2xpZW50KTsKKworICAgIHZpcnR1YWwgdm9pZCBmcm9udGVu
ZExvYWRlZCgpOworICAgIAorICAgIHZpcnR1YWwgV2ViQ29yZTo6U3RyaW5nIGxvY2FsaXplZFN0
cmluZ3NVUkwoKTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OlN0cmluZyBoaWRkZW5QYW5lbHMoKTsK
KyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgYnJpbmdUb0Zyb250KCk7CisgICAgdmlydHVhbCB2b2lk
IGNsb3NlV2luZG93KCk7CisgICAgCisgICAgdmlydHVhbCB2b2lkIGF0dGFjaFdpbmRvdygpOwor
ICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hXaW5kb3coKTsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KTsKKyAgICB2aXJ0dWFsIHZv
aWQgaW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpTdHJpbmcmIG5ld1VSTCk7CisK
K3ByaXZhdGU6CisgICAgfldlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50KCk7CisKICAgICB2b2lk
IGNsb3NlV2luZG93V2l0aG91dE5vdGlmaWNhdGlvbnMoKTsKICAgICB2b2lkIHNob3dXaW5kb3dX
aXRob3V0Tm90aWZpY2F0aW9ucygpOwogCisgICAgdm9pZCBkZXN0cm95SW5zcGVjdG9yVmlldygp
OworCiAgICAgdm9pZCB1cGRhdGVXaW5kb3dUaXRsZSgpOwogCiAgICAgTFJFU1VMVCBvbkdldE1p
bk1heEluZm8oV1BBUkFNLCBMUEFSQU0pOwpAQCAtOTAsMTYgKzEwNywxNiBAQCBwcml2YXRlOgog
CiAgICAgV2ViVmlldyogbV9pbnNwZWN0ZWRXZWJWaWV3OwogICAgIEhXTkQgbV9pbnNwZWN0ZWRX
ZWJWaWV3SHduZDsKLSAgICBIV05EIG1faHduZDsKLSAgICBDT01QdHI8V2ViVmlldz4gbV93ZWJW
aWV3OwotICAgIEhXTkQgbV93ZWJWaWV3SHduZDsKKyAgICBIV05EIG1fZnJvbnRlbmRId25kOwor
ICAgIFdlYkluc3BlY3RvckNsaWVudCogbV9pbnNwZWN0b3JDbGllbnQ7CisgICAgQ09NUHRyPFdl
YlZpZXc+IG1fZnJvbnRlbmRXZWJWaWV3OworICAgIEhXTkQgbV9mcm9udGVuZFdlYlZpZXdId25k
OwogCiAgICAgYm9vbCBtX3Nob3VsZEF0dGFjaFdoZW5TaG93bjsKICAgICBib29sIG1fYXR0YWNo
ZWQ7CiAKLSAgICBPd25QdHI8V2ViTm9kZUhpZ2hsaWdodD4gbV9oaWdobGlnaHQ7Ci0KICAgICBX
ZWJDb3JlOjpTdHJpbmcgbV9pbnNwZWN0ZWRVUkw7CisgICAgYm9vbCBtX2Rlc3Ryb3lpbmdJbnNw
ZWN0b3JWaWV3OwogCiAgICAgc3RhdGljIGZyaWVuZCBMUkVTVUxUIENBTExCQUNLIFdlYkluc3Bl
Y3RvclduZFByb2MoSFdORCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0pOwogfTsKZGlmZiAtLWdpdCBh
L1dlYktpdC93aW4vV2ViSW5zcGVjdG9yLmNwcCBiL1dlYktpdC93aW4vV2ViSW5zcGVjdG9yLmNw
cAppbmRleCBlNGFjMzJiLi4wMzM3NzExIDEwMDY0NAotLS0gYS9XZWJLaXQvd2luL1dlYkluc3Bl
Y3Rvci5jcHAKKysrIGIvV2ViS2l0L3dpbi9XZWJJbnNwZWN0b3IuY3BwCkBAIC0xMzEsMTkgKzEz
MSwxMSBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkluc3BlY3Rvcjo6Y2xvc2UoKQog
CiBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkluc3BlY3Rvcjo6YXR0YWNoKCkKIHsKLSAg
ICBpZiAobV93ZWJWaWV3KQotICAgICAgICBpZiAoUGFnZSogcGFnZSA9IG1fd2ViVmlldy0+cGFn
ZSgpKQotICAgICAgICAgICAgcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5hdHRhY2hXaW5k
b3coKTsKLQogICAgIHJldHVybiBTX09LOwogfQogCiBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IFdlYkluc3BlY3Rvcjo6ZGV0YWNoKCkKIHsKLSAgICBpZiAobV93ZWJWaWV3KQotICAgICAgICBp
ZiAoUGFnZSogcGFnZSA9IG1fd2ViVmlldy0+cGFnZSgpKQotICAgICAgICAgICAgcGFnZS0+aW5z
cGVjdG9yQ29udHJvbGxlcigpLT5kZXRhY2hXaW5kb3coKTsKLQogICAgIHJldHVybiBTX09LOwog
fQogCmRpZmYgLS1naXQgYS9XZWJLaXQvd3gvQ2hhbmdlTG9nIGIvV2ViS2l0L3d4L0NoYW5nZUxv
ZwppbmRleCBkZjJhODlmLi5lYjA4ZmY4IDEwMDY0NAotLS0gYS9XZWJLaXQvd3gvQ2hhbmdlTG9n
CisrKyBiL1dlYktpdC93eC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMC0wMy0xMCAg
WXVyeSBTZW1pa2hhdHNreSA8eXVyeXNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEludHJvZHVjZSBJbnNwZWN0b3JGcm9udGVu
ZENsaWVudCB0aGF0IHByb3ZpZGVzIEluc3BlY3RvckZyb250ZW5kIHdpdGggYW4gaW50ZXJmYWNl
IHRvIHRoZSBlbWJlZGRlci4gSW5zcGVjdG9yQ2xpZW50IG5vdyBzZXJ2ZXMgYXMgYSBkZWxlZ2F0
ZSBmb3IgSW5zcGVjdG9yQ29udHJvbGxlciBhbmQgZG9lcyBub3QgY29udGFpbiBtZXRob2RzIGZv
ciBtYW5hZ2luZyBpbnNwZWN0b3IgZnJvbnRlbmQgd2luZG93LiBUaGF0IGFsbG93cyB0byBjcmVh
dGUgcmVtb3RlIEluc3BlY3RvckZyb250ZW5kSG9zdC4KKworICAgICAgICBJbnRyb2R1Y2UgSW5z
cGVjdG9yRnJvbnRlbmRDbGllbnQgdGhhdCB3b3VsZCBwcm92aWRlIEluc3BlY3RvckZyb250ZW5k
IHdpdGggYW4gaW50ZXJmYWNlIHRvIHRoZSBlbWJlZGRlcgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzUwMzYKKworICAgICAgICAqIFdlYktpdFN1cHBv
cnQvSW5zcGVjdG9yQ2xpZW50V3guY3BwOgorICAgICAgICAqIFdlYktpdFN1cHBvcnQvSW5zcGVj
dG9yQ2xpZW50V3guaDoKKwogMjAxMC0wMy0xMSAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FA
YXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmlkIEh5YXR0LgpkaWZmIC0tZ2l0
IGEvV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50V3guY3BwIGIvV2ViS2l0
L3d4L1dlYktpdFN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50V3guY3BwCmluZGV4IGZmMjFhZTAuLjQz
ZmJiMmIgMTAwNjQ0Ci0tLSBhL1dlYktpdC93eC9XZWJLaXRTdXBwb3J0L0luc3BlY3RvckNsaWVu
dFd4LmNwcAorKysgYi9XZWJLaXQvd3gvV2ViS2l0U3VwcG9ydC9JbnNwZWN0b3JDbGllbnRXeC5j
cHAKQEAgLTQ3LDQ1ICs0Nyw4IEBAIHZvaWQgSW5zcGVjdG9yQ2xpZW50V3g6Omluc3BlY3RvckRl
c3Ryb3llZCgpCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotUGFnZSogSW5zcGVjdG9yQ2xp
ZW50V3g6OmNyZWF0ZVBhZ2UoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJu
IDA7Ci19Ci0KLVN0cmluZyBJbnNwZWN0b3JDbGllbnRXeDo6bG9jYWxpemVkU3RyaW5nc1VSTCgp
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0
cmluZyBJbnNwZWN0b3JDbGllbnRXeDo6aGlkZGVuUGFuZWxzKCkKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDbGllbnRX
eDo6c2hvd1dpbmRvdygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLSAgICAKLXZvaWQg
SW5zcGVjdG9yQ2xpZW50V3g6OmNsb3NlV2luZG93KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCi12b2lkIEluc3BlY3RvckNsaWVudFd4OjphdHRhY2hXaW5kb3coKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ2xpZW50V3g6OmRldGFjaFdpbmRv
dygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KIAotdm9pZCBJbnNwZWN0b3JDbGllbnRX
eDo6c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KQordm9pZCBJbnNwZWN0
b3JDbGllbnRXeDo6b3Blbkluc3BlY3RvckZyb250ZW5kKFdlYkNvcmU6Okluc3BlY3RvckNvbnRy
b2xsZXIqKTsKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQpAQCAtMTAwLDExICs2Myw2IEBA
IHZvaWQgSW5zcGVjdG9yQ2xpZW50V3g6OmhpZGVIaWdobGlnaHQoKQogICAgIG5vdEltcGxlbWVu
dGVkKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ2xpZW50V3g6Omluc3BlY3RlZFVSTENoYW5nZWQo
Y29uc3QgU3RyaW5nJiBuZXdVUkwpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQogdm9p
ZCBJbnNwZWN0b3JDbGllbnRXeDo6cG9wdWxhdGVTZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5LCBT
dHJpbmcqIHNldHRpbmcpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKQEAgLTExNSw5ICs3Myw0
IEBAIHZvaWQgSW5zcGVjdG9yQ2xpZW50V3g6OnN0b3JlU2V0dGluZyhjb25zdCBTdHJpbmcmIGtl
eSwgY29uc3QgU3RyaW5nJiBzZXR0aW5nKQogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yQ2xpZW50V3g6Omluc3BlY3RvcldpbmRvd09iamVjdENsZWFyZWQoKQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KIH07CmRpZmYgLS1naXQgYS9XZWJLaXQvd3gvV2Vi
S2l0U3VwcG9ydC9JbnNwZWN0b3JDbGllbnRXeC5oIGIvV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQv
SW5zcGVjdG9yQ2xpZW50V3guaAppbmRleCBmOTA1ODE3Li43Njc1ZGMxIDEwMDY0NAotLS0gYS9X
ZWJLaXQvd3gvV2ViS2l0U3VwcG9ydC9JbnNwZWN0b3JDbGllbnRXeC5oCisrKyBiL1dlYktpdC93
eC9XZWJLaXRTdXBwb3J0L0luc3BlY3RvckNsaWVudFd4LmgKQEAgLTQxLDI5ICs0MSwxMyBAQCBw
dWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgaW5zcGVjdG9yRGVzdHJveWVkKCk7CiAKLSAgICB2
aXJ0dWFsIFBhZ2UqIGNyZWF0ZVBhZ2UoKTsKLQotICAgIHZpcnR1YWwgU3RyaW5nIGxvY2FsaXpl
ZFN0cmluZ3NVUkwoKTsKLQotICAgIHZpcnR1YWwgU3RyaW5nIGhpZGRlblBhbmVscygpOwotCi0g
ICAgdmlydHVhbCB2b2lkIHNob3dXaW5kb3coKTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xvc2VXaW5k
b3coKTsKLQotICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hXaW5kb3coKTsKLSAgICB2aXJ0dWFsIHZv
aWQgZGV0YWNoV2luZG93KCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0QXR0YWNoZWRXaW5kb3dI
ZWlnaHQodW5zaWduZWQgaGVpZ2h0KTsKKyAgICB2aXJ0dWFsIHZvaWQgb3Blbkluc3BlY3RvckZy
b250ZW5kKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXIqKTsKIAogICAgIHZpcnR1YWwgdm9p
ZCBoaWdobGlnaHQoTm9kZSopOwogICAgIHZpcnR1YWwgdm9pZCBoaWRlSGlnaGxpZ2h0KCk7CiAK
LSAgICB2aXJ0dWFsIHZvaWQgaW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIG5ld1VS
TCk7Ci0KICAgICB2aXJ0dWFsIHZvaWQgcG9wdWxhdGVTZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5
LCBTdHJpbmcqIHZhbHVlKTsKICAgICB2aXJ0dWFsIHZvaWQgc3RvcmVTZXR0aW5nKGNvbnN0IFN0
cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKLQotICAgIHZpcnR1YWwgdm9pZCBpbnNw
ZWN0b3JXaW5kb3dPYmplY3RDbGVhcmVkKCk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Cg==
</data>
<flag name="review"
          id="33952"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50779</attachid>
            <date>2010-03-16 03:38:44 -0700</date>
            <delta_ts>2010-03-16 03:38:44 -0700</delta_ts>
            <desc>patch that I&apos;m going to land</desc>
            <filename>frontend-client10.patch</filename>
            <type>text/plain</type>
            <size>171399</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YTcyZWM3MS4uNzdiODg0NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMDggQEAKKzIwMTAtMDMtMTEgIFl1cnkgU2VtaWto
YXRza3kgPHl1cnlzQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBQYXZlbCBG
ZWxkbWFuLgorCisgICAgICAgIEludHJvZHVjZSBJbnNwZWN0b3JGcm9udGVuZENsaWVudCB0aGF0
IHByb3ZpZGVzIEluc3BlY3RvckZyb250ZW5kIHdpdGggYW4gaW50ZXJmYWNlIHRvIHRoZSBlbWJl
ZGRlci4gSW5zcGVjdG9yQ2xpZW50IG5vdyBzZXJ2ZXMgYXMgYSBkZWxlZ2F0ZSBmb3IgSW5zcGVj
dG9yQ29udHJvbGxlciBhbmQgZG9lcyBub3QgY29udGFpbiBtZXRob2RzIGZvciBtYW5hZ2luZyBp
bnNwZWN0b3IgZnJvbnRlbmQgd2luZG93LiBUaGF0IGFsbG93cyB0byBjcmVhdGUgcmVtb3RlIElu
c3BlY3RvckZyb250ZW5kSG9zdC4KKworICAgICAgICBJbnRyb2R1Y2UgSW5zcGVjdG9yRnJvbnRl
bmRDbGllbnQgdGhhdCB3b3VsZCBwcm92aWRlIEluc3BlY3RvckZyb250ZW5kIHdpdGggYW4gaW50
ZXJmYWNlIHRvIHRoZSBlbWJlZGRlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MzUwMzYKKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAg
ICAqIFdlYkNvcmUuSW5zcGVjdG9yLmV4cDoKKyAgICAgICAgKiBXZWJDb3JlLmJhc2UuZXhwOgor
ICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLm9yZGVyOgorICAgICAg
ICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBpbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q29uc29sZU1lc3NhZ2U6OmFkZFRvRnJvbnRlbmQpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9Db25zb2xlTWVzc2FnZS5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDbGll
bnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpJbnNwZWN0b3JDb250cm9sbGVyKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6On5JbnNwZWN0b3JDb250cm9s
bGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6Omluc3BlY3RlZFBh
Z2VEZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6d2lu
ZG93VmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpmcm9u
dGVuZFJlYWR5KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OndpbGxD
bG9zZUZyb250ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmFk
ZENvbnNvbGVNZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6
OnNldEluc3BlY3RvckZyb250ZW5kQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckNvbnRyb2xsZXI6Omluc3BlY3RlZFdpbmRvd1NjcmlwdE9iamVjdENsZWFyZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0RnJvbnRlbmQpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6c2hvdyk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JDb250cm9sbGVyOjpjbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JD
b250cm9sbGVyOjpyZWxlYXNlRE9NQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
Q29udHJvbGxlcjo6cG9wdWxhdGVTY3JpcHRPYmplY3RzKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckNvbnRyb2xsZXI6OmRpZENvbW1pdExvYWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQ29udHJvbGxlcjo6Z2V0UHJvZmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JDb250cm9sbGVyOjplbmFibGVEZWJ1Z2dlcik6CisgICAgICAgICogaW5zcGVjdG9yL0luc3Bl
Y3RvckNvbnRyb2xsZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6
Omhhc0luc3BlY3RvckZyb250ZW5kQ2xpZW50KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVj
dG9yRnJvbnRlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmQ6Oklu
c3BlY3RvckZyb250ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kOjp+
SW5zcGVjdG9yRnJvbnRlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmQ6
OmFkZENvbnNvbGVNZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5k
OjpicmluZ1RvRnJvbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmQ6Omlu
c3BlY3RlZFVSTENoYW5nZWQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVu
ZC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudC5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50Ojp+SW5zcGVjdG9y
RnJvbnRlbmRDbGllbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENs
aWVudExvY2FsLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGcm9udGVuZE1lbnVQcm92
aWRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyb250ZW5kTWVudVByb3ZpZGVyOjpk
aXNjb25uZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyb250ZW5kTWVudVByb3ZpZGVyOjpGcm9u
dGVuZE1lbnVQcm92aWRlcik6CisgICAgICAgIChXZWJDb3JlOjpGcm9udGVuZE1lbnVQcm92aWRl
cjo6fkZyb250ZW5kTWVudVByb3ZpZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZyb250ZW5kTWVu
dVByb3ZpZGVyOjpwb3B1bGF0ZUNvbnRleHRNZW51KToKKyAgICAgICAgKFdlYkNvcmU6OkZyb250
ZW5kTWVudVByb3ZpZGVyOjpjb250ZXh0TWVudUl0ZW1TZWxlY3RlZCk6CisgICAgICAgIChXZWJD
b3JlOjpGcm9udGVuZE1lbnVQcm92aWRlcjo6Y29udGV4dE1lbnVDbGVhcmVkKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6Okluc3BlY3RvckZyb250ZW5k
Q2xpZW50TG9jYWwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRM
b2NhbDo6fkluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6d2luZG93T2JqZWN0Q2xlYXJlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjpmcm9udGVuZExvYWRl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjpjYW5B
dHRhY2hXaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRM
b2NhbDo6Y2hhbmdlQXR0YWNoZWRXaW5kb3dIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6bW92ZVdpbmRvd0J5KToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OnNob3dDb250ZXh0TWVudSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjpzZXRBdHRhY2hlZFdp
bmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjpy
ZXN0b3JlQXR0YWNoZWRXaW5kb3dIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RnJvbnRlbmRDbGllbnRMb2NhbDo6Y29uc3RyYWluZWRBdHRhY2hlZFdpbmRvd0hlaWdodCk6Cisg
ICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuaDogQWRkZWQu
CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZEhvc3Q6Okluc3BlY3RvckZyb250ZW5kSG9zdCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZEhvc3Q6On5JbnNwZWN0b3JGcm9u
dGVuZEhvc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRIb3N0Ojpsb2Fk
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRIb3N0OjphdHRhY2gpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRIb3N0OjpkZXRhY2gpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRIb3N0OjpjbG9zZVdpbmRvdyk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OmJyaW5nVG9Gcm9udCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZEhvc3Q6Omluc3BlY3RlZFVSTENoYW5nZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRIb3N0OjpjYW5BdHRhY2hXaW5kb3cp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRIb3N0OjpzZXRBdHRhY2hlZFdp
bmRvd0hlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZEhvc3Q6Om1v
dmVXaW5kb3dCeSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OnNo
b3dDb250ZXh0TWVudSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9z
dC5oOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRIb3N0OjpjcmVhdGUpOgor
ICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuaWRsOgorICAgICAgICAq
IGluc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yRnJvbnRlbmRIb3N0U3R1Yi5qczoKKyAgICAg
ICAgKC5XZWJJbnNwZWN0b3IuSW5zcGVjdG9yRnJvbnRlbmRIb3N0U3R1Yi5wcm90b3R5cGUuYnJp
bmdUb0Zyb250KToKKyAgICAgICAgKC5XZWJJbnNwZWN0b3IuSW5zcGVjdG9yRnJvbnRlbmRIb3N0
U3R1Yi5wcm90b3R5cGUuaW5zcGVjdGVkVVJMQ2hhbmdlZCk6CisgICAgICAgICogaW5zcGVjdG9y
L2Zyb250LWVuZC9pbnNwZWN0b3IuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IubG9hZGVkKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5jbG9zZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuYnJp
bmdUb0Zyb250KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5pbnNwZWN0ZWRVUkxDaGFuZ2VkKToK
KyAgICAgICAgKiBsb2FkZXIvRW1wdHlDbGllbnRzLmg6CisgICAgICAgIChXZWJDb3JlOjpFbXB0
eUluc3BlY3RvckNsaWVudDo6b3Blbkluc3BlY3RvckZyb250ZW5kKToKKyAgICAgICAgKiBsb2Fk
ZXIvRnJhbWVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmRpc3Bh
dGNoRGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxkKToKKyAgICAgICAgKiBwYWdlL1BhZ2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6UGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpQYWdl
Ojp+UGFnZSk6CisgICAgICAgICogcGFnZS9QYWdlLmg6CisgICAgICAgICogcGxhdGZvcm0vQ29u
dGV4dE1lbnUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnU6OnBvcHVsYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51OjphZGRJbnNwZWN0RWxlbWVudEl0ZW0pOgor
CiAyMDEwLTAzLTE2ICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
R05VbWFrZWZpbGUuYW0gYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IGRhZTg1ZGMuLjc2
YTU5YTIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvV2ViQ29yZS9H
TlVtYWtlZmlsZS5hbQpAQCAtMTIzOSw2ICsxMjM5LDkgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwK
IAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmggXAogCVdlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmNwcCBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRnJvbnRlbmQuaCBcCisJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGll
bnQuaCBcCisJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5j
cHAgXAorCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuaCBc
CiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcCBcCiAJV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmggXAogCVdlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvclJlc291cmNlLmNwcCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuSW5z
cGVjdG9yLmV4cCBiL1dlYkNvcmUvV2ViQ29yZS5JbnNwZWN0b3IuZXhwCmluZGV4IDM3OWI3YTIu
LmY3NzQ3MzkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5JbnNwZWN0b3IuZXhwCisrKyBi
L1dlYkNvcmUvV2ViQ29yZS5JbnNwZWN0b3IuZXhwCkBAIC0xLDExICsxLDEwIEBACiBfX1pON1dl
YkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIxMHNldFNldHRpbmdFUktOU182U3RyaW5nRVMzXwot
X19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTJhdHRhY2hXaW5kb3dFdgotX19aTjdX
ZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTJkZXRhY2hXaW5kb3dFdgogX19aTjdXZWJDb3Jl
MTlJbnNwZWN0b3JDb250cm9sbGVyMTRlbmFibGVEZWJ1Z2dlckV2CiBfX1pON1dlYkNvcmUxOUlu
c3BlY3RvckNvbnRyb2xsZXIxNGVuYWJsZVByb2ZpbGVyRWJiCiBfX1pON1dlYkNvcmUxOUluc3Bl
Y3RvckNvbnRyb2xsZXIxNWRpc2FibGVEZWJ1Z2dlckViCiBfX1pON1dlYkNvcmUxOUluc3BlY3Rv
ckNvbnRyb2xsZXIxNWRpc2FibGVQcm9maWxlckViCi1fX1pON1dlYkNvcmUxOUluc3BlY3RvckNv
bnRyb2xsZXIxNnNldFdpbmRvd1Zpc2libGVFYmIKK19fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29u
dHJvbGxlcjE4ZGlzY29ubmVjdEZyb250ZW5kRXYKK19fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29u
dHJvbGxlcjI2c2V0SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRFTjNXVEYxMFBhc3NPd25QdHJJTlNf
MjNJbnNwZWN0b3JGcm9udGVuZENsaWVudEVFRQogX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250
cm9sbGVyMjZzdG9wVXNlckluaXRpYXRlZFByb2ZpbGluZ0V2CiBfX1pON1dlYkNvcmUxOUluc3Bl
Y3RvckNvbnRyb2xsZXIyN3N0YXJ0VXNlckluaXRpYXRlZFByb2ZpbGluZ0VQTlNfNVRpbWVySVMw
X0VFCiBfX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXI0c2hvd0V2CkBAIC0xOCwzICsx
NywxMyBAQCBfX1pOSzdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyN2VuYWJsZWRFdgogX19a
Tks3V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjdzZXR0aW5nRVJLTlNfNlN0cmluZ0UKIF9f
Wk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjIxc3RhcnRUaW1lbGluZVByb2ZpbGVyRXYK
IF9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjIwc3RvcFRpbWVsaW5lUHJvZmlsZXJF
dgorX19aTjdXZWJDb3JlMjhJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsQzJFUE5TXzE5SW5z
cGVjdG9yQ29udHJvbGxlckVQTlNfNFBhZ2VFCitfX1pON1dlYkNvcmUyOEluc3BlY3RvckZyb250
ZW5kQ2xpZW50TG9jYWxEMkV2CitfX1pON1dlYkNvcmUyOEluc3BlY3RvckZyb250ZW5kQ2xpZW50
TG9jYWwxOXdpbmRvd09iamVjdENsZWFyZWRFdgorX19aTjdXZWJDb3JlMjhJbnNwZWN0b3JGcm9u
dGVuZENsaWVudExvY2FsMTRmcm9udGVuZExvYWRlZEV2CitfX1pON1dlYkNvcmUyOEluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50TG9jYWwyN3Jlc3RvcmVBdHRhY2hlZFdpbmRvd0hlaWdodEV2CitfX1pO
N1dlYkNvcmUyOEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwxMm1vdmVXaW5kb3dCeUVmZgor
X19aTjdXZWJDb3JlMjhJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsMTVjYW5BdHRhY2hXaW5k
b3dFdgorX19aTjdXZWJDb3JlMjhJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsMTVzaG93Q29u
dGV4dE1lbnVFUE5TXzVFdmVudEVSS04zV1RGNlZlY3RvcklQTlNfMTVDb250ZXh0TWVudUl0ZW1F
TG0wRUVFCitfX1pON1dlYkNvcmUyOEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwxN3NldEF0
dGFjaGVkV2luZG93RWIKK19fWk43V2ViQ29yZTI4SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2Nh
bDI2Y2hhbmdlQXR0YWNoZWRXaW5kb3dIZWlnaHRFagpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJD
b3JlLmJhc2UuZXhwIGIvV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCmluZGV4IDQzNjRhZWEuLjli
YWZhZDcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAorKysgYi9XZWJDb3Jl
L1dlYkNvcmUuYmFzZS5leHAKQEAgLTg3NCw3ICs4NzQsNiBAQCBfX1pOSzdXZWJDb3JlMTZWaXNp
YmxlU2VsZWN0aW9uMjNpc0NvbnRlbnRSaWNobHlFZGl0YWJsZUV2CiBfX1pOSzdXZWJDb3JlMTZW
aXNpYmxlU2VsZWN0aW9uNWlzQWxsRU5TXzIxU3RheUluRWRpdGFibGVDb250ZW50RQogX19aTks3
V2ViQ29yZTE3UmVzb3VyY2VFcnJvckJhc2U4bGF6eUluaXRFdgogX19aTks3V2ViQ29yZTE5QW5p
bWF0aW9uQ29udHJvbGxlcjI0bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zRXYKLV9fWk5LN1dlYkNv
cmUxOUluc3BlY3RvckNvbnRyb2xsZXIxNWNhbkF0dGFjaFdpbmRvd0V2CiBfX1pOSzdXZWJDb3Jl
MTlSZXNvdXJjZVJlcXVlc3RCYXNlMTBodHRwTWV0aG9kRXYKIF9fWk5LN1dlYkNvcmUxOVJlc291
cmNlUmVxdWVzdEJhc2UzdXJsRXYKIF9fWk5LN1dlYkNvcmUxOVJlc291cmNlUmVxdWVzdEJhc2U3
aXNFbXB0eUV2CmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1dlYkNvcmUvV2Vi
Q29yZS5neXBpCmluZGV4IDhlNmZhM2EuLjc1OWZlZGIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2Vi
Q29yZS5neXBpCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0xNjMwLDYgKzE2MzAsOSBA
QAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuaCcs
CiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmNwcCcsCiAgICAgICAg
ICAgICAnaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmgnLAorICAgICAgICAgICAgJ2luc3Bl
Y3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudC5oJywKKyAgICAgICAgICAgICdpbnNwZWN0b3Iv
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5jcHAnLAorICAgICAgICAgICAgJ2luc3BlY3Rv
ci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rv
ci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5z
cGVjdG9yRnJvbnRlbmRIb3N0LmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JS
ZXNvdXJjZS5jcHAnLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLm9yZGVyIGIvV2ViQ29y
ZS9XZWJDb3JlLm9yZGVyCmluZGV4IGE4ZDIwZmQuLjQ4ZjMyMWIgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvV2ViQ29yZS5vcmRlcgorKysgYi9XZWJDb3JlL1dlYkNvcmUub3JkZXIKQEAgLTIzNzg5LDcg
KzIzNzg5LDYgQEAgX19aTjdXZWJDb3JlMThTY3JpcHRGdW5jdGlvbkNhbGwxNGFwcGVuZEFyZ3Vt
ZW50RWIKIF9fWk43V2ViQ29yZTE4U2NyaXB0RnVuY3Rpb25DYWxsNGNhbGxFdgogX19aTjdXZWJD
b3JlMThTY3JpcHRGdW5jdGlvbkNhbGw0Y2FsbEVSYmIKIF9fWk43V2ViQ29yZTQ0anNJbnNwZWN0
b3JDb250cm9sbGVyUHJvdG90eXBlRnVuY3Rpb25BdHRhY2hFUE4zSlNDOUV4ZWNTdGF0ZUVQTlMw
XzhKU09iamVjdEVOUzBfN0pTVmFsdWVFUktOUzBfN0FyZ0xpc3RFCi1fX1pON1dlYkNvcmUxOUlu
c3BlY3RvckNvbnRyb2xsZXIxMmF0dGFjaFdpbmRvd0V2CiBfX1pON1dlYkNvcmUxOUluc3BlY3Rv
ckNvbnRyb2xsZXIyMXBvcHVsYXRlU2NyaXB0T2JqZWN0c0V2CiBfX1pON1dlYkNvcmVMMThjYWxs
U2ltcGxlRnVuY3Rpb25FUE4zSlNDOUV4ZWNTdGF0ZUVSS05TXzEyU2NyaXB0T2JqZWN0RVBLYwog
X19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyOXNob3dQYW5lbEVOUzBfMTNTcGVjaWFs
UGFuZWxzRQpAQCAtMjM4NTAsNyArMjM4NDksNiBAQCBfX1pON1dlYkNvcmVMMTlkcmF3SGlnaGxp
Z2h0Rm9yQm94RVJOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzlGbG9hdFF1YWRFUzRfUzRfUwog
X19aTjdXZWJDb3JlTDE2ZHJhd091dGxpbmVkUXVhZEVSTlNfMTVHcmFwaGljc0NvbnRleHRFUktO
U185RmxvYXRRdWFkRVJLTlNfNUNvbG9yRQogX19aTjdXZWJDb3JlTDEwcXVhZFRvUGF0aEVSS05T
XzlGbG9hdFF1YWRFCiBfX1pON1dlYkNvcmU0NGpzSW5zcGVjdG9yQ29udHJvbGxlclByb3RvdHlw
ZUZ1bmN0aW9uRGV0YWNoRVBOM0pTQzlFeGVjU3RhdGVFUE5TMF84SlNPYmplY3RFTlMwXzdKU1Zh
bHVlRVJLTlMwXzdBcmdMaXN0RQotX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTJk
ZXRhY2hXaW5kb3dFdgogX19aTjdXZWJDb3JlNTZqc0luc3BlY3RvckNvbnRyb2xsZXJQcm90b3R5
cGVGdW5jdGlvbk1vdmVCeVVucmVzdHJpY3RlZEVQTjNKU0M5RXhlY1N0YXRlRVBOUzBfOEpTT2Jq
ZWN0RU5TMF83SlNWYWx1ZUVSS05TMF83QXJnTAogX19aTks3V2ViQ29yZTE5SW5zcGVjdG9yQ29u
dHJvbGxlcjEybW92ZVdpbmRvd0J5RWZmCiBfX1pON1dlYkNvcmVMMjRkcmF3T3V0bGluZWRRdWFk
V2l0aENsaXBFUk5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfOUZsb2F0UXVhZEVTNF9SS05TXzVD
b2xvckUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9XZWJDb3JlL1dlYkNvcmUu
cHJvCmluZGV4IDQxY2U0Y2UuLjk5ZTAyNTkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5w
cm8KKysrIGIvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtNjk3LDYgKzY5Nyw3IEBAIFNPVVJDRVMg
Kz0gXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAgXAogICAgIGluc3BlY3Rv
ci9JbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5zcGVj
dG9yRnJvbnRlbmQuY3BwIFwKKyAgICBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRM
b2NhbC5jcHAgXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwIFwKICAg
ICBpbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2UuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5zcGVj
dG9yVGltZWxpbmVBZ2VudC5jcHAgXApAQCAtMTQwMyw2ICsxNDA0LDggQEAgSEVBREVSUyArPSBc
CiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuaCBcCiAgICAgaW5zcGVj
dG9yL0luc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZS5oIFwKICAgICBpbnNwZWN0b3IvSW5zcGVj
dG9yRnJvbnRlbmQuaCBcCisgICAgaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50Lmgg
XAorICAgIGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmggXAogICAgIGlu
c3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuaCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3Rv
clJlc291cmNlLmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmggXApk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1dlYkNv
cmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggNTk2OGNiZS4uMmUxYzE3NyAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9X
ZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC00Mjg2MSw2ICs0Mjg2MSwx
OCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIu
LlxpbnNwZWN0b3JcSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaCINCisJCQkJPg0KKwkJCTwvRmls
ZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JG
cm9udGVuZENsaWVudExvY2FsLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0K
KwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JGcm9udGVuZENsaWVudExv
Y2FsLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRo
PSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcCINCiAJCQkJPg0KIAkJCTwv
RmlsZT4NCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDk3
YTlmN2IuLmFhODA0YjEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC00ODYzLDYgKzQ4NjMsOSBAQAogCQlFRDUwMURDNjBCMjQ5RjI5MDBBRTE4RDkgLyog
RWRpdG9yTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRUQ1MDFEQzUwQjI0OUYyOTAwQUUxOEQ5IC8qIEVkaXRvck1hYy5tbSAqLzsgfTsKIAkJRURF
M0E1MDAwQzdBNDMwNjAwOTU2QTM3IC8qIENvbG9yTWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFREUzQTRGRjBDN0E0MzA2MDA5NTZBMzcgLyogQ29s
b3JNYWMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQlFREVDOTgwMzBBRUQ3RTE3MDA1OTEzN0YgLyogV2ViQ29yZVByZWZpeC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRURFQzk4MDIwQUVEN0UxNzAwNTkx
MzdGIC8qIFdlYkNvcmVQcmVmaXguaCAqLzsgfTsKKwkJRjM0NEM3MTQxMTI1QjgyQzAwRjI2RUVF
IC8qIEluc3BlY3RvckZyb250ZW5kQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGMzQ0QzcxMjExMjVCODJDMDBGMjZFRUUgLyogSW5zcGVjdG9y
RnJvbnRlbmRDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQlGMzQ0Qzc1MzExMjk0RDlEMDBGMjZFRUUgLyogSW5zcGVjdG9yRnJvbnRlbmRD
bGllbnRMb2NhbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRjM0NEM3NTIxMTI5NEQ5RDAwRjI2RUVFIC8qIEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9j
YWwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlG
MzQ0Qzc1ODExMjk0RkY2MDBGMjZFRUUgLyogSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGMzQ0Qzc1
NzExMjk0RkY2MDBGMjZFRUUgLyogSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5jcHAgKi87
IH07CiAJCUYzNjQ0QUZGMTExOTgwNTkwMEUwRDUzNyAvKiBJbmplY3RlZFNjcmlwdC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGMzY0NEFGRDExMTk4
MDU5MDBFMEQ1MzcgLyogSW5qZWN0ZWRTY3JpcHQuY3BwICovOyB9OwogCQlGMzY0NEIwMDExMTk4
MDU5MDBFMEQ1MzcgLyogSW5qZWN0ZWRTY3JpcHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEYzNjQ0QUZFMTExOTgwNTkwMEUwRDUzNyAvKiBJbmplY3Rl
ZFNjcmlwdC5oICovOyB9OwogCQlGNEVBRjRBRTEwQzc0MkIxMDA5MTAwRDMgLyogT3BlblR5cGVT
YW5pdGl6ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRjRFQUY0QUMxMEM3NDJCMTAwOTEwMEQzIC8qIE9wZW5UeXBlU2FuaXRpemVyLmNwcCAqLzsg
fTsKQEAgLTEwMjAzLDYgKzEwMjA2LDkgQEAKIAkJRUQ1MDFEQzUwQjI0OUYyOTAwQUUxOEQ5IC8q
IEVkaXRvck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBF
ZGl0b3JNYWMubW07IHBhdGggPSBtYWMvRWRpdG9yTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlFREUzQTRGRjBDN0E0MzA2MDA5NTZBMzcgLyogQ29sb3JNYWMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29sb3JNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRURFQzk4MDIwQUVEN0UxNzAwNTkxMzdGIC8qIFdlYkNvcmVQcmVmaXguaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvcmVQcmVmaXguaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA0OyB1c2VzVGFicyA9IDA7IH07CisJCUYzNDRD
NzEyMTEyNUI4MkMwMEYyNkVFRSAvKiBJbnNwZWN0b3JGcm9udGVuZENsaWVudC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JGcm9udGVuZENsaWVudC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGMzQ0Qzc1MjExMjk0RDlEMDBGMjZFRUUgLyogSW5z
cGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUYzNDRDNzU3MTEyOTRGRjYwMEYyNkVFRSAvKiBJbnNwZWN0b3JGcm9udGVuZENs
aWVudExvY2FsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50TG9jYWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlGMzY0NEFGRDExMTk4MDU5MDBFMEQ1MzcgLyogSW5qZWN0ZWRTY3JpcHQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5qZWN0ZWRTY3JpcHQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlGMzY0NEFGRTExMTk4MDU5MDBFMEQ1MzcgLyogSW5qZWN0
ZWRTY3JpcHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5qZWN0ZWRTY3Jp
cHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjRFQUY0QUMxMEM3NDJCMTAwOTEw
MEQzIC8qIE9wZW5UeXBlU2FuaXRpemVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IE9wZW5UeXBlU2FuaXRpemVyLmNwcDsgcGF0aCA9IG9wZW50eXBlL09wZW5UeXBl
U2FuaXRpemVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwNzM4LDYgKzEw
NzQ0LDkgQEAKIAkJCQk0MUYwNjE3MjBGNUYwMEFDMDBBMDdFQUMgLyogSW5zcGVjdG9yRE9NU3Rv
cmFnZVJlc291cmNlLmggKi8sCiAJCQkJN0FFRDNFMDMwRkJCMUVBQTAwRDJCMDNDIC8qIEluc3Bl
Y3RvckZyb250ZW5kLmNwcCAqLywKIAkJCQk3QUVEM0UwNDBGQkIxRUFBMDBEMkIwM0MgLyogSW5z
cGVjdG9yRnJvbnRlbmQuaCAqLywKKwkJCQlGMzQ0QzcxMjExMjVCODJDMDBGMjZFRUUgLyogSW5z
cGVjdG9yRnJvbnRlbmRDbGllbnQuaCAqLywKKwkJCQlGMzQ0Qzc1NzExMjk0RkY2MDBGMjZFRUUg
LyogSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5jcHAgKi8sCisJCQkJRjM0NEM3NTIxMTI5
NEQ5RDAwRjI2RUVFIC8qIEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuaCAqLywKIAkJCQk3
QTBFNzcwQjEwQzAwQTg4MDBBMDI3NkUgLyogSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcCAqLywK
IAkJCQk3QTBFNzcwQzEwQzAwQTg4MDBBMDI3NkUgLyogSW5zcGVjdG9yRnJvbnRlbmRIb3N0Lmgg
Ki8sCiAJCQkJN0EwRTc3MEQxMEMwMEE4ODAwQTAyNzZFIC8qIEluc3BlY3RvckZyb250ZW5kSG9z
dC5pZGwgKi8sCkBAIC0xNzQzMCw2ICsxNzQzOSw4IEBACiAJCQkJN0EyNDU4N0MxMDIxRUFGNDAw
MEEwMEFBIC8qIEluc3BlY3RvckRPTUFnZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk0MUYwNjE3
NDBGNUYwMEFDMDBBMDdFQUMgLyogSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk3QUVEM0UwNjBGQkIxRUFBMDBEMkIwM0MgLyogSW5zcGVjdG9yRnJvbnRl
bmQuaCBpbiBIZWFkZXJzICovLAorCQkJCUYzNDRDNzE0MTEyNUI4MkMwMEYyNkVFRSAvKiBJbnNw
ZWN0b3JGcm9udGVuZENsaWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRjM0NEM3NTMxMTI5NEQ5
RDAwRjI2RUVFIC8qIEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuaCBpbiBIZWFkZXJzICov
LAogCQkJCTdBMEU3NzBGMTBDMDBBODgwMEEwMjc2RSAvKiBJbnNwZWN0b3JGcm9udGVuZEhvc3Qu
aCBpbiBIZWFkZXJzICovLAogCQkJCTQxRjA2MjAxMEY1RjBCNjYwMEEwN0VBQyAvKiBJbnNwZWN0
b3JSZXNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzU0MTMzQTgxMDJFMDBFODAwMDc1RDAw
IC8qIEluc3BlY3RvclRpbWVsaW5lQWdlbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMTk2NDUsNiAr
MTk2NTYsNyBAQAogCQkJCTdBMjQ1ODdCMTAyMUVBRjQwMDBBMDBBQSAvKiBJbnNwZWN0b3JET01B
Z2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MUYwNjE3NTBGNUYwMEFDMDBBMDdFQUMgLyog
SW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdBRUQz
RTA1MEZCQjFFQUEwMEQyQjAzQyAvKiBJbnNwZWN0b3JGcm9udGVuZC5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQlGMzQ0Qzc1ODExMjk0RkY2MDBGMjZFRUUgLyogSW5zcGVjdG9yRnJvbnRlbmRDbGll
bnRMb2NhbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QTBFNzcwRTEwQzAwQTg4MDBBMDI3NkUg
LyogSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQxRjA2MjAy
MEY1RjBCNjYwMEEwN0VBQyAvKiBJbnNwZWN0b3JSZXNvdXJjZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk3NTQxMzNBQTEwMkUwMEY0MDAwNzVEMDAgLyogSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5j
cHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0NvbnNvbGVN
ZXNzYWdlLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmNwcAppbmRleCA1
NTM5ZTlkLi40MDU0OTk2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9Db25zb2xlTWVz
c2FnZS5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuY3BwCkBAIC0z
MSw5ICszMSwxMiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNvbnNvbGVNZXNz
YWdlLmgiCiAKKyNpbmNsdWRlICJJbmplY3RlZFNjcmlwdC5oIgorI2luY2x1ZGUgIkluamVjdGVk
U2NyaXB0SG9zdC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kLmgiCiAjaW5jbHVkZSAi
U2NyaXB0Q2FsbFN0YWNrLmgiCiAjaW5jbHVkZSAiU2NyaXB0T2JqZWN0LmgiCisjaW5jbHVkZSAi
U2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtODAs
NyArODMsNyBAQCBDb25zb2xlTWVzc2FnZTo6Q29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZSBz
LCBNZXNzYWdlVHlwZSB0LCBNZXNzYWdlTGV2ZWwgbCwgUwogfQogCiAjaWYgRU5BQkxFKElOU1BF
Q1RPUikKLXZvaWQgQ29uc29sZU1lc3NhZ2U6OmFkZFRvQ29uc29sZShJbnNwZWN0b3JGcm9udGVu
ZCogZnJvbnRlbmQpCit2b2lkIENvbnNvbGVNZXNzYWdlOjphZGRUb0Zyb250ZW5kKEluc3BlY3Rv
ckZyb250ZW5kKiBmcm9udGVuZCwgSW5qZWN0ZWRTY3JpcHRIb3N0KiBpbmplY3RlZFNjcmlwdEhv
c3QpCiB7CiAgICAgU2NyaXB0T2JqZWN0IGpzb25PYmogPSBmcm9udGVuZC0+bmV3U2NyaXB0T2Jq
ZWN0KCk7CiAgICAganNvbk9iai5zZXQoInNvdXJjZSIsIHN0YXRpY19jYXN0PGludD4obV9zb3Vy
Y2UpKTsKQEAgLTkwLDcgKzkzLDE1IEBAIHZvaWQgQ29uc29sZU1lc3NhZ2U6OmFkZFRvQ29uc29s
ZShJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQpCiAgICAganNvbk9iai5zZXQoInVybCIsIG1f
dXJsKTsKICAgICBqc29uT2JqLnNldCgiZ3JvdXBMZXZlbCIsIHN0YXRpY19jYXN0PGludD4obV9n
cm91cExldmVsKSk7CiAgICAganNvbk9iai5zZXQoInJlcGVhdENvdW50Iiwgc3RhdGljX2Nhc3Q8
aW50PihtX3JlcGVhdENvdW50KSk7Ci0gICAgZnJvbnRlbmQtPmFkZENvbnNvbGVNZXNzYWdlKGpz
b25PYmosIG1fZnJhbWVzLCBtX3NjcmlwdFN0YXRlLCBtX2FyZ3VtZW50cywgIG1fbWVzc2FnZSk7
CisgICAgVmVjdG9yPFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+ID4gYXJndW1lbnRzOwor
ICAgIGlmICghbV9hcmd1bWVudHMuaXNFbXB0eSgpKSB7CisgICAgICAgIEluamVjdGVkU2NyaXB0
IGluamVjdGVkU2NyaXB0ID0gaW5qZWN0ZWRTY3JpcHRIb3N0LT5pbmplY3RlZFNjcmlwdEZvciht
X3NjcmlwdFN0YXRlKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYXJndW1l
bnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiBzZXJpYWxpemVkVmFsdWUgPSBpbmplY3RlZFNjcmlwdC53cmFwRm9yQ29uc29sZShtX2Fy
Z3VtZW50c1tpXSk7CisgICAgICAgICAgICBhcmd1bWVudHMuYXBwZW5kKHNlcmlhbGl6ZWRWYWx1
ZSk7CisgICAgICAgIH0KKyAgICB9ICAgCisgICAgZnJvbnRlbmQtPmFkZENvbnNvbGVNZXNzYWdl
KGpzb25PYmosIG1fZnJhbWVzLCBhcmd1bWVudHMsICBtX21lc3NhZ2UpOwogfQogCiB2b2lkIENv
bnNvbGVNZXNzYWdlOjp1cGRhdGVSZXBlYXRDb3VudEluQ29uc29sZShJbnNwZWN0b3JGcm9udGVu
ZCogZnJvbnRlbmQpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9Db25zb2xlTWVzc2Fn
ZS5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuaAppbmRleCBlOWFlMTMwLi41
M2Y0MjU1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9Db25zb2xlTWVzc2FnZS5oCisr
KyBiL1dlYkNvcmUvaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmgKQEAgLTM4LDQwICszOCw0MSBA
QAogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIGNs
YXNzIEluc3BlY3RvckZyb250ZW5kOwotICAgIGNsYXNzIFNjcmlwdENhbGxTdGFjazsKLSAgICBj
bGFzcyBTY3JpcHRTdHJpbmc7CitjbGFzcyBJbmplY3RlZFNjcmlwdEhvc3Q7CitjbGFzcyBJbnNw
ZWN0b3JGcm9udGVuZDsKK2NsYXNzIFNjcmlwdENhbGxTdGFjazsKK2NsYXNzIFNjcmlwdFN0cmlu
ZzsKIAotICAgIGNsYXNzIENvbnNvbGVNZXNzYWdlIDogcHVibGljIE5vbmNvcHlhYmxlIHsKLSAg
ICBwdWJsaWM6Ci0gICAgICAgIENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VU
eXBlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbSwgdW5zaWduZWQgbGksIGNvbnN0IFN0
cmluZyYgdSwgdW5zaWduZWQgZyk7ICAgICAgICAKLSAgICAgICAgQ29uc29sZU1lc3NhZ2UoTWVz
c2FnZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwgU2NyaXB0Q2FsbFN0YWNrKiwg
dW5zaWduZWQgZywgYm9vbCBzdG9yZVRyYWNlID0gZmFsc2UpOworY2xhc3MgQ29uc29sZU1lc3Nh
Z2UgOiBwdWJsaWMgTm9uY29weWFibGUgeworcHVibGljOgorICAgIENvbnNvbGVNZXNzYWdlKE1l
c3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbSwg
dW5zaWduZWQgbGksIGNvbnN0IFN0cmluZyYgdSwgdW5zaWduZWQgZyk7ICAgICAgICAKKyAgICBD
b25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlLCBNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBT
Y3JpcHRDYWxsU3RhY2sqLCB1bnNpZ25lZCBnLCBib29sIHN0b3JlVHJhY2UgPSBmYWxzZSk7CiAK
ICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgICAgICB2b2lkIGFkZFRvQ29uc29sZShJbnNwZWN0
b3JGcm9udGVuZCogZnJvbnRlbmQpOwotICAgICAgICB2b2lkIHVwZGF0ZVJlcGVhdENvdW50SW5D
b25zb2xlKEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCk7CisgICAgdm9pZCBhZGRUb0Zyb250
ZW5kKEluc3BlY3RvckZyb250ZW5kKiwgSW5qZWN0ZWRTY3JpcHRIb3N0Kik7CisgICAgdm9pZCB1
cGRhdGVSZXBlYXRDb3VudEluQ29uc29sZShJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQpOwog
I2VuZGlmCi0gICAgICAgIHZvaWQgaW5jcmVtZW50Q291bnQoKSB7ICsrbV9yZXBlYXRDb3VudDsg
fTsKLSAgICAgICAgYm9vbCBpc0VxdWFsKFNjcmlwdFN0YXRlKiwgQ29uc29sZU1lc3NhZ2UqIG1z
ZykgY29uc3Q7CisgICAgdm9pZCBpbmNyZW1lbnRDb3VudCgpIHsgKyttX3JlcGVhdENvdW50OyB9
CisgICAgYm9vbCBpc0VxdWFsKFNjcmlwdFN0YXRlKiwgQ29uc29sZU1lc3NhZ2UqIG1zZykgY29u
c3Q7CiAKLSAgICAgICAgTWVzc2FnZVNvdXJjZSBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3Nv
dXJjZTsgfQotICAgICAgICBjb25zdCBTdHJpbmcmIG1lc3NhZ2UoKSBjb25zdCB7IHJldHVybiBt
X21lc3NhZ2U7IH0KKyAgICBNZXNzYWdlU291cmNlIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c291cmNlOyB9CisgICAgY29uc3QgU3RyaW5nJiBtZXNzYWdlKCkgY29uc3QgeyByZXR1cm4gbV9t
ZXNzYWdlOyB9CiAKLSAgICBwcml2YXRlOgotICAgICAgICBNZXNzYWdlU291cmNlIG1fc291cmNl
OwotICAgICAgICBNZXNzYWdlVHlwZSBtX3R5cGU7Ci0gICAgICAgIE1lc3NhZ2VMZXZlbCBtX2xl
dmVsOwotICAgICAgICBTdHJpbmcgbV9tZXNzYWdlOworcHJpdmF0ZToKKyAgICBNZXNzYWdlU291
cmNlIG1fc291cmNlOworICAgIE1lc3NhZ2VUeXBlIG1fdHlwZTsKKyAgICBNZXNzYWdlTGV2ZWwg
bV9sZXZlbDsKKyAgICBTdHJpbmcgbV9tZXNzYWdlOwogI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0g
ICAgICAgIFZlY3RvcjxTY3JpcHRWYWx1ZT4gbV9hcmd1bWVudHM7Ci0gICAgICAgIFNjcmlwdFN0
YXRlKiBtX3NjcmlwdFN0YXRlOworICAgIFZlY3RvcjxTY3JpcHRWYWx1ZT4gbV9hcmd1bWVudHM7
CisgICAgU2NyaXB0U3RhdGUqIG1fc2NyaXB0U3RhdGU7CiAjZW5kaWYKLSAgICAgICAgVmVjdG9y
PFNjcmlwdFN0cmluZz4gbV9mcmFtZXM7Ci0gICAgICAgIHVuc2lnbmVkIG1fbGluZTsKLSAgICAg
ICAgU3RyaW5nIG1fdXJsOwotICAgICAgICB1bnNpZ25lZCBtX2dyb3VwTGV2ZWw7Ci0gICAgICAg
IHVuc2lnbmVkIG1fcmVwZWF0Q291bnQ7Ci0gICAgfTsKKyAgICBWZWN0b3I8U2NyaXB0U3RyaW5n
PiBtX2ZyYW1lczsKKyAgICB1bnNpZ25lZCBtX2xpbmU7CisgICAgU3RyaW5nIG1fdXJsOworICAg
IHVuc2lnbmVkIG1fZ3JvdXBMZXZlbDsKKyAgICB1bnNpZ25lZCBtX3JlcGVhdENvdW50OworfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JDbGllbnQuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNsaWVudC5o
CmluZGV4IGU0NDhjZDIuLjg0MWMxNWUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNsaWVudC5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNsaWVudC5o
CkBAIC0zMCw2ICszMCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgSW5zcGVj
dG9yQ29udHJvbGxlcjsKIGNsYXNzIE5vZGU7CiBjbGFzcyBQYWdlOwogY2xhc3MgU3RyaW5nOwpA
QCAtNDAsMjkgKzQxLDEzIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0b3JE
ZXN0cm95ZWQoKSA9IDA7CiAKLSAgICB2aXJ0dWFsIFBhZ2UqIGNyZWF0ZVBhZ2UoKSA9IDA7Ci0K
LSAgICB2aXJ0dWFsIFN0cmluZyBsb2NhbGl6ZWRTdHJpbmdzVVJMKCkgPSAwOwotCi0gICAgdmly
dHVhbCBTdHJpbmcgaGlkZGVuUGFuZWxzKCkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHNob3dX
aW5kb3coKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNsb3NlV2luZG93KCkgPSAwOwotCi0gICAg
dmlydHVhbCB2b2lkIGF0dGFjaFdpbmRvdygpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGV0YWNo
V2luZG93KCkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHNldEF0dGFjaGVkV2luZG93SGVpZ2h0
KHVuc2lnbmVkIGhlaWdodCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBvcGVuSW5zcGVjdG9yRnJv
bnRlbmQoSW5zcGVjdG9yQ29udHJvbGxlciopID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBoaWdo
bGlnaHQoTm9kZSopID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgaGlkZUhpZ2hsaWdodCgpID0gMDsK
IAotICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYgbmV3
VVJMKSA9IDA7Ci0KICAgICB2aXJ0dWFsIHZvaWQgcG9wdWxhdGVTZXR0aW5nKGNvbnN0IFN0cmlu
ZyYga2V5LCBTdHJpbmcqIHZhbHVlKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHN0b3JlU2V0dGlu
Zyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkgPSAwOwotCi0gICAgdmly
dHVhbCB2b2lkIGluc3BlY3RvcldpbmRvd09iamVjdENsZWFyZWQoKSA9IDA7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JDb250cm9sbGVyLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIu
Y3BwCmluZGV4IGIyY2EzYTguLmU1ZjIyMmYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNvbnRyb2xsZXIuY3BwCkBAIC01NywxMSArNTcsMTEgQEAKICNpbmNsdWRlICJJbmplY3RlZFNj
cmlwdEhvc3QuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JCYWNrZW5kLmgiCiAjaW5jbHVkZSAiSW5z
cGVjdG9yQ2xpZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaCIKICNp
bmNsdWRlICJJbnNwZWN0b3JET01BZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckRPTVN0b3Jh
Z2VSZXNvdXJjZS5oIgogI2luY2x1ZGUgIkluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuaCIKICNp
bmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZC5oIgotI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5k
SG9zdC5oIgogI2luY2x1ZGUgIkluc3BlY3RvclJlc291cmNlLmgiCiAjaW5jbHVkZSAiSW5zcGVj
dG9yV29ya2VyUmVzb3VyY2UuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JUaW1lbGluZUFnZW50Lmgi
CkBAIC0xNDQsMTAgKzE0NCw4IEBAIHN0YXRpYyB1bnNpZ25lZCBzX2luc3BlY3RvckNvbnRyb2xs
ZXJDb3VudDsKIEluc3BlY3RvckNvbnRyb2xsZXI6Okluc3BlY3RvckNvbnRyb2xsZXIoUGFnZSog
cGFnZSwgSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQpCiAgICAgOiBtX2luc3BlY3RlZFBhZ2UocGFn
ZSkKICAgICAsIG1fY2xpZW50KGNsaWVudCkKLSAgICAsIG1fcGFnZSgwKQorICAgICwgbV9vcGVu
aW5nRnJvbnRlbmQoZmFsc2UpCiAgICAgLCBtX2V4cGlyZWRDb25zb2xlTWVzc2FnZUNvdW50KDAp
Ci0gICAgLCBtX2Zyb250ZW5kU2NyaXB0U3RhdGUoMCkKLSAgICAsIG1fd2luZG93VmlzaWJsZShm
YWxzZSkKICAgICAsIG1fc2hvd0FmdGVyVmlzaWJsZShDdXJyZW50UGFuZWwpCiAgICAgLCBtX2dy
b3VwTGV2ZWwoMCkKICAgICAsIG1fc2VhcmNoaW5nRm9yTm9kZShmYWxzZSkKQEAgLTE1NSw3ICsx
NTMsNiBAQCBJbnNwZWN0b3JDb250cm9sbGVyOjpJbnNwZWN0b3JDb250cm9sbGVyKFBhZ2UqIHBh
Z2UsIEluc3BlY3RvckNsaWVudCogY2xpZW50KQogICAgICwgbV9yZXNvdXJjZVRyYWNraW5nRW5h
YmxlZChmYWxzZSkKICAgICAsIG1fcmVzb3VyY2VUcmFja2luZ1NldHRpbmdzTG9hZGVkKGZhbHNl
KQogICAgICwgbV9pbnNwZWN0b3JCYWNrZW5kKEluc3BlY3RvckJhY2tlbmQ6OmNyZWF0ZSh0aGlz
KSkKLSAgICAsIG1faW5zcGVjdG9yRnJvbnRlbmRIb3N0KEluc3BlY3RvckZyb250ZW5kSG9zdDo6
Y3JlYXRlKHRoaXMsIGNsaWVudCkpCiAgICAgLCBtX2luamVjdGVkU2NyaXB0SG9zdChJbmplY3Rl
ZFNjcmlwdEhvc3Q6OmNyZWF0ZSh0aGlzKSkKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dF
UikKICAgICAsIG1fZGVidWdnZXJFbmFibGVkKGZhbHNlKQpAQCAtMTc4LDkgKzE3NSw3IEBAIElu
c3BlY3RvckNvbnRyb2xsZXI6On5JbnNwZWN0b3JDb250cm9sbGVyKCkKIHsKICAgICAvLyBUaGVz
ZSBzaG91bGQgaGF2ZSBiZWVuIGNsZWFyZWQgaW4gaW5zcGVjdGVkUGFnZURlc3Ryb3llZCgpLgog
ICAgIEFTU0VSVCghbV9jbGllbnQpOwotICAgIEFTU0VSVCghbV9mcm9udGVuZFNjcmlwdFN0YXRl
KTsKICAgICBBU1NFUlQoIW1faW5zcGVjdGVkUGFnZSk7Ci0gICAgQVNTRVJUKCFtX3BhZ2UgfHwg
KG1fcGFnZSAmJiAhbV9wYWdlLT5wYXJlbnRJbnNwZWN0b3JDb250cm9sbGVyKCkpKTsKIAogICAg
IGRlbGV0ZUFsbFZhbHVlcyhtX2ZyYW1lUmVzb3VyY2VzKTsKICAgICBkZWxldGVBbGxWYWx1ZXMo
bV9jb25zb2xlTWVzc2FnZXMpOwpAQCAtMTkxLDE4ICsxODYsMTQgQEAgSW5zcGVjdG9yQ29udHJv
bGxlcjo6fkluc3BlY3RvckNvbnRyb2xsZXIoKQogICAgIHJlbGVhc2VET01BZ2VudCgpOwogCiAg
ICAgbV9pbnNwZWN0b3JCYWNrZW5kLT5kaXNjb25uZWN0Q29udHJvbGxlcigpOwotICAgIG1faW5z
cGVjdG9yRnJvbnRlbmRIb3N0LT5kaXNjb25uZWN0Q29udHJvbGxlcigpOwogICAgIG1faW5qZWN0
ZWRTY3JpcHRIb3N0LT5kaXNjb25uZWN0Q29udHJvbGxlcigpOwogfQogCiB2b2lkIEluc3BlY3Rv
ckNvbnRyb2xsZXI6Omluc3BlY3RlZFBhZ2VEZXN0cm95ZWQoKQogewotICAgIGNsb3NlKCk7Cisg
ICAgaWYgKG1fZnJvbnRlbmQpCisgICAgICAgIG1fZnJvbnRlbmQtPmluc3BlY3RlZFBhZ2VEZXN0
cm95ZWQoKTsKIAotICAgIGlmIChtX2Zyb250ZW5kU2NyaXB0U3RhdGUpIHsKLSAgICAgICAgU2Ny
aXB0R2xvYmFsT2JqZWN0OjpyZW1vdmUobV9mcm9udGVuZFNjcmlwdFN0YXRlLCAiSW5zcGVjdG9y
QmFja2VuZCIpOwotICAgICAgICBTY3JpcHRHbG9iYWxPYmplY3Q6OnJlbW92ZShtX2Zyb250ZW5k
U2NyaXB0U3RhdGUsICJJbnNwZWN0b3JGcm9udGVuZEhvc3QiKTsKLSAgICB9CiAgICAgQVNTRVJU
KG1faW5zcGVjdGVkUGFnZSk7CiAgICAgbV9pbnNwZWN0ZWRQYWdlID0gMDsKIApAQCAtMjk3LDQ3
ICsyODgsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmhpZGVIaWdobGlnaHQoKQogCiBi
b29sIEluc3BlY3RvckNvbnRyb2xsZXI6OndpbmRvd1Zpc2libGUoKQogewotICAgIHJldHVybiBt
X3dpbmRvd1Zpc2libGU7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0V2luZG93
VmlzaWJsZShib29sIHZpc2libGUsIGJvb2wgYXR0YWNoZWQpCi17Ci0gICAgaWYgKHZpc2libGUg
PT0gbV93aW5kb3dWaXNpYmxlIHx8ICFtX2Zyb250ZW5kKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX3dpbmRvd1Zpc2libGUgPSB2aXNpYmxlOwotCi0gICAgaWYgKG1fd2luZG93VmlzaWJsZSkg
ewotICAgICAgICBzZXRBdHRhY2hlZFdpbmRvdyhhdHRhY2hlZCk7Ci0gICAgICAgIHBvcHVsYXRl
U2NyaXB0T2JqZWN0cygpOwotCi0gICAgICAgIGlmIChtX3Nob3dBZnRlclZpc2libGUgPT0gQ3Vy
cmVudFBhbmVsKSB7Ci0gICAgICAgICAgICBTdHJpbmcgbGFzdEFjdGl2ZVBhbmVsU2V0dGluZyA9
IHNldHRpbmcobGFzdEFjdGl2ZVBhbmVsU2V0dGluZ05hbWUpOwotICAgICAgICAgICAgbV9zaG93
QWZ0ZXJWaXNpYmxlID0gc3BlY2lhbFBhbmVsRm9ySlNOYW1lKGxhc3RBY3RpdmVQYW5lbFNldHRp
bmcpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1fbm9kZVRvRm9jdXMpCi0gICAgICAgICAg
ICBmb2N1c05vZGUoKTsKLSNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKLSAgICAgICAg
aWYgKG1fYXR0YWNoRGVidWdnZXJXaGVuU2hvd24pCi0gICAgICAgICAgICBlbmFibGVEZWJ1Z2dl
cigpOwotI2VuZGlmCi0gICAgICAgIHNob3dQYW5lbChtX3Nob3dBZnRlclZpc2libGUpOwotICAg
IH0gZWxzZSB7Ci0jaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCi0gICAgICAgIC8vIElm
IHRoZSB3aW5kb3cgaXMgYmVpbmcgY2xvc2VkIHdpdGggdGhlIGRlYnVnZ2VyIGVuYWJsZWQsCi0g
ICAgICAgIC8vIHJlbWVtYmVyIHRoaXMgc3RhdGUgdG8gcmUtZW5hYmxlIGRlYnVnZ2VyIG9uIHRo
ZSBuZXh0IHdpbmRvdwotICAgICAgICAvLyBvcGVuaW5nLgotICAgICAgICBib29sIGRlYnVnZ2Vy
V2FzRW5hYmxlZCA9IG1fZGVidWdnZXJFbmFibGVkOwotICAgICAgICBkaXNhYmxlRGVidWdnZXIo
KTsKLSAgICAgICAgaWYgKGRlYnVnZ2VyV2FzRW5hYmxlZCkKLSAgICAgICAgICAgIG1fYXR0YWNo
RGVidWdnZXJXaGVuU2hvd24gPSB0cnVlOwotI2VuZGlmCi0gICAgICAgIHNldFNlYXJjaGluZ0Zv
ck5vZGUoZmFsc2UpOwotICAgICAgICByZXNldFNjcmlwdE9iamVjdHMoKTsKLSAgICAgICAgc3Rv
cFRpbWVsaW5lUHJvZmlsZXIoKTsKLSAgICB9Ci0gICAgbV9zaG93QWZ0ZXJWaXNpYmxlID0gQ3Vy
cmVudFBhbmVsOworICAgIHJldHVybiBtX2Zyb250ZW5kOwogfQogCiB2b2lkIEluc3BlY3RvckNv
bnRyb2xsZXI6OmFkZE1lc3NhZ2VUb0NvbnNvbGUoTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3Nh
Z2VUeXBlIHR5cGUsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgU2NyaXB0Q2FsbFN0YWNrKiBjYWxsU3Rh
Y2spCkBAIC0zNzAsNyArMzIxLDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjphZGRDb25z
b2xlTWVzc2FnZShTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIENvbnNvbGVNZXMKICAgICAgICAg
bV9wcmV2aW91c01lc3NhZ2UgPSBjb25zb2xlTWVzc2FnZTsKICAgICAgICAgbV9jb25zb2xlTWVz
c2FnZXMuYXBwZW5kKGNvbnNvbGVNZXNzYWdlKTsKICAgICAgICAgaWYgKHdpbmRvd1Zpc2libGUo
KSkKLSAgICAgICAgICAgIG1fcHJldmlvdXNNZXNzYWdlLT5hZGRUb0NvbnNvbGUobV9mcm9udGVu
ZC5nZXQoKSk7CisgICAgICAgICAgICBtX3ByZXZpb3VzTWVzc2FnZS0+YWRkVG9Gcm9udGVuZCht
X2Zyb250ZW5kLmdldCgpLCBtX2luamVjdGVkU2NyaXB0SG9zdC5nZXQoKSk7CiAgICAgfQogCiAg
ICAgaWYgKCF3aW5kb3dWaXNpYmxlKCkgJiYgbV9jb25zb2xlTWVzc2FnZXMuc2l6ZSgpID49IG1h
eGltdW1Db25zb2xlTWVzc2FnZXMpIHsKQEAgLTQxOCw2OSArMzY5LDYgQEAgdm9pZCBJbnNwZWN0
b3JDb250cm9sbGVyOjptYXJrVGltZWxpbmUoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogICAgICAg
ICB0aW1lbGluZUFnZW50KCktPmRpZE1hcmtUaW1lbGluZShtZXNzYWdlKTsKIH0KIAotc3RhdGlj
IHVuc2lnbmVkIGNvbnN0cmFpbmVkQXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgcHJlZmVy
cmVkSGVpZ2h0LCB1bnNpZ25lZCB0b3RhbFdpbmRvd0hlaWdodCkKLXsKLSAgICByZXR1cm4gcm91
bmRmKG1heChtaW5pbXVtQXR0YWNoZWRIZWlnaHQsIG1pbjxmbG9hdD4ocHJlZmVycmVkSGVpZ2h0
LCB0b3RhbFdpbmRvd0hlaWdodCAqIG1heGltdW1BdHRhY2hlZEhlaWdodFJhdGlvKSkpOwotfQot
Ci1ib29sIEluc3BlY3RvckNvbnRyb2xsZXI6OmNhbkF0dGFjaFdpbmRvdygpIGNvbnN0Ci17Ci0g
ICAgaWYgKCFlbmFibGVkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAg
dW5zaWduZWQgaW5zcGVjdGVkUGFnZUhlaWdodCA9IG1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1l
KCktPnZpZXcoKS0+dmlzaWJsZUhlaWdodCgpOwotCi0gICAgLy8gRG9uJ3QgYWxsb3cgdGhlIGF0
dGFjaCBpZiB0aGUgd2luZG93IHdvdWxkIGJlIHRvbyBzbWFsbCB0byBhY2NvbW1vZGF0ZSB0aGUg
bWluaW11bSBpbnNwZWN0b3IgaGVpZ2h0LgotICAgIHJldHVybiBtaW5pbXVtQXR0YWNoZWRIZWln
aHQgPD0gaW5zcGVjdGVkUGFnZUhlaWdodCAqIG1heGltdW1BdHRhY2hlZEhlaWdodFJhdGlvOwot
fQotCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmF0dGFjaFdpbmRvdygpCi17Ci0gICAgaWYg
KCFlbmFibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHVuc2lnbmVkIGluc3BlY3RlZFBh
Z2VIZWlnaHQgPSBtX2luc3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCktPnZpc2libGVI
ZWlnaHQoKTsKLQotICAgIFN0cmluZyBhdHRhY2hlZEhlaWdodCA9IHNldHRpbmcoaW5zcGVjdG9y
QXR0YWNoZWRIZWlnaHROYW1lKTsKLSAgICBib29sIHN1Y2Nlc3MgPSB0cnVlOwotICAgIGludCBo
ZWlnaHQgPSBhdHRhY2hlZEhlaWdodC50b0ludCgmc3VjY2Vzcyk7Ci0gICAgdW5zaWduZWQgcHJl
ZmVycmVkSGVpZ2h0ID0gc3VjY2VzcyA/IGhlaWdodCA6IGRlZmF1bHRBdHRhY2hlZEhlaWdodDsK
LQotICAgIG1fY2xpZW50LT5hdHRhY2hXaW5kb3coKTsKLQotICAgIC8vIFdlIG5lZWQgdG8gY29u
c3RyYWluIHRoZSB3aW5kb3cgaGVpZ2h0IGhlcmUgaW4gY2FzZSB0aGUgdXNlciBoYXMgcmVzaXpl
ZCB0aGUgaW5zcGVjdGVkIHBhZ2UncyB3aW5kb3cgc28gdGhhdAotICAgIC8vIHRoZSB1c2VyJ3Mg
cHJlZmVycmVkIGhlaWdodCB3b3VsZCBiZSB0b28gYmlnIHRvIGRpc3BsYXkuCi0gICAgbV9jbGll
bnQtPnNldEF0dGFjaGVkV2luZG93SGVpZ2h0KGNvbnN0cmFpbmVkQXR0YWNoZWRXaW5kb3dIZWln
aHQocHJlZmVycmVkSGVpZ2h0LCBpbnNwZWN0ZWRQYWdlSGVpZ2h0KSk7Ci19Ci0KLXZvaWQgSW5z
cGVjdG9yQ29udHJvbGxlcjo6ZGV0YWNoV2luZG93KCkKLXsKLSAgICBpZiAoIWVuYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotICAgIG1fY2xpZW50LT5kZXRhY2hXaW5kb3coKTsKLX0KLQotdm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRBdHRhY2hlZFdpbmRvdyhib29sIGF0dGFjaGVkKQot
ewotICAgIGlmICghZW5hYmxlZCgpIHx8ICFtX2Zyb250ZW5kKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBtX2Zyb250ZW5kLT5zZXRBdHRhY2hlZFdpbmRvdyhhdHRhY2hlZCk7Ci19Ci0KLXZvaWQg
SW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVp
Z2h0KQotewotICAgIGlmICghZW5hYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAg
dW5zaWduZWQgdG90YWxIZWlnaHQgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCktPnZpc2li
bGVIZWlnaHQoKSArIG1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+dmlzaWJs
ZUhlaWdodCgpOwotICAgIHVuc2lnbmVkIGF0dGFjaGVkSGVpZ2h0ID0gY29uc3RyYWluZWRBdHRh
Y2hlZFdpbmRvd0hlaWdodChoZWlnaHQsIHRvdGFsSGVpZ2h0KTsKLSAgICAKLSAgICBzZXRTZXR0
aW5nKGluc3BlY3RvckF0dGFjaGVkSGVpZ2h0TmFtZSwgU3RyaW5nOjpudW1iZXIoYXR0YWNoZWRI
ZWlnaHQpKTsKLSAgICAKLSAgICBtX2NsaWVudC0+c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQoYXR0
YWNoZWRIZWlnaHQpOwotfQotCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnN0b3JlTGFzdEFj
dGl2ZVBhbmVsKGNvbnN0IFN0cmluZyYgcGFuZWxOYW1lKQogewogICAgIHNldFNldHRpbmcobGFz
dEFjdGl2ZVBhbmVsU2V0dGluZ05hbWUsIHBhbmVsTmFtZSk7CkBAIC01MTIsMjMgKzQwMCwyMiBA
QCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmhhbmRsZU1vdXNlUHJlc3NPbk5vZGUoTm9kZSog
bm9kZSkKICAgICBpbnNwZWN0KG5vZGUpOwogfQogCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6
Omluc3BlY3RlZFdpbmRvd1NjcmlwdE9iamVjdENsZWFyZWQoRnJhbWUqIGZyYW1lKQordm9pZCBJ
bnNwZWN0b3JDb250cm9sbGVyOjpzZXRJbnNwZWN0b3JGcm9udGVuZENsaWVudChQYXNzT3duUHRy
PEluc3BlY3RvckZyb250ZW5kQ2xpZW50PiBjbGllbnQpCiB7Ci0gICAgaWYgKCFlbmFibGVkKCkg
fHwgIW1fZnJvbnRlbmQgfHwgZnJhbWUgIT0gbV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKSkK
LSAgICAgICAgcmV0dXJuOwotICAgIG1faW5qZWN0ZWRTY3JpcHRIb3N0LT5kaXNjYXJkSW5qZWN0
ZWRTY3JpcHRzKCk7CisgICAgQVNTRVJUKCFtX2luc3BlY3RvckZyb250ZW5kQ2xpZW50KTsKKyAg
ICBtX2luc3BlY3RvckZyb250ZW5kQ2xpZW50ID0gY2xpZW50OwogfQogCi12b2lkIEluc3BlY3Rv
ckNvbnRyb2xsZXI6OndpbmRvd1NjcmlwdE9iamVjdEF2YWlsYWJsZSgpCit2b2lkIEluc3BlY3Rv
ckNvbnRyb2xsZXI6Omluc3BlY3RlZFdpbmRvd1NjcmlwdE9iamVjdENsZWFyZWQoRnJhbWUqIGZy
YW1lKQogewotICAgIGlmICghbV9wYWdlIHx8ICFlbmFibGVkKCkpCi0gICAgICAgIHJldHVybjsK
KyAgICAvLyBJZiB0aGUgcGFnZSBpcyBzdXBwb3NlZCB0byBzZXJ2ZSBhcyBJbnNwZWN0b3JGcm9u
dGVuZCBub3RpZnkgaW5zcGV0b3IgZnJvbnRlbmQKKyAgICAvLyBjbGllbnQgdGhhdCBpdCdzIGNs
ZWFyZWQgc28gdGhhdCB0aGUgY2xpZW50IGNhbiBleHBvc2UgaW5zcGVjdG9yIGJpbmRpbmdzLgor
ICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2xpZW50ICYmIGZyYW1lID09IG1faW5zcGVjdGVk
UGFnZS0+bWFpbkZyYW1lKCkpCisgICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDbGllbnQtPndp
bmRvd09iamVjdENsZWFyZWQoKTsKIAotICAgIC8vIEdyYW50IHRoZSBpbnNwZWN0b3IgdGhlIGFi
aWxpdHkgdG8gc2NyaXB0IHRoZSBpbnNwZWN0ZWQgcGFnZS4KLSAgICBtX3BhZ2UtPm1haW5GcmFt
ZSgpLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5ncmFudFVuaXZlcnNhbEFjY2Vzcygp
OwotICAgIG1fZnJvbnRlbmRTY3JpcHRTdGF0ZSA9IHNjcmlwdFN0YXRlRnJvbVBhZ2UoZGVidWdn
ZXJXb3JsZCgpLCBtX3BhZ2UpOwotICAgIFNjcmlwdEdsb2JhbE9iamVjdDo6c2V0KG1fZnJvbnRl
bmRTY3JpcHRTdGF0ZSwgIkluc3BlY3RvckJhY2tlbmQiLCBtX2luc3BlY3RvckJhY2tlbmQuZ2V0
KCkpOwotICAgIFNjcmlwdEdsb2JhbE9iamVjdDo6c2V0KG1fZnJvbnRlbmRTY3JpcHRTdGF0ZSwg
Ikluc3BlY3RvckZyb250ZW5kSG9zdCIsIG1faW5zcGVjdG9yRnJvbnRlbmRIb3N0LmdldCgpKTsK
KyAgICBpZiAoIWVuYWJsZWQoKSB8fCAhbV9mcm9udGVuZCB8fCBmcmFtZSAhPSBtX2luc3BlY3Rl
ZFBhZ2UtPm1haW5GcmFtZSgpKQorICAgICAgICByZXR1cm47CisgICAgbV9pbmplY3RlZFNjcmlw
dEhvc3QtPmRpc2NhcmRJbmplY3RlZFNjcmlwdHMoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250
cm9sbGVyOjpzZXRTZWFyY2hpbmdGb3JOb2RlKGJvb2wgZW5hYmxlZCkKQEAgLTU0NiwxOCArNDMz
LDE2IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0U2VhcmNoaW5nRm9yTm9kZShib29s
IGVuYWJsZWQpCiAgICAgfQogfQogCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNjcmlwdE9i
amVjdFJlYWR5KCkKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0RnJvbnRlbmQoUGFzc093
blB0cjxJbnNwZWN0b3JGcm9udGVuZD4gZnJvbnRlbmQpCiB7Ci0gICAgQVNTRVJUKG1fZnJvbnRl
bmRTY3JpcHRTdGF0ZSk7Ci0gICAgaWYgKCFtX2Zyb250ZW5kU2NyaXB0U3RhdGUpCi0gICAgICAg
IHJldHVybjsKLQotICAgIFNjcmlwdE9iamVjdCB3ZWJJbnNwZWN0b3JPYmo7Ci0gICAgaWYgKCFT
Y3JpcHRHbG9iYWxPYmplY3Q6OmdldChtX2Zyb250ZW5kU2NyaXB0U3RhdGUsICJXZWJJbnNwZWN0
b3IiLCB3ZWJJbnNwZWN0b3JPYmopKQotICAgICAgICByZXR1cm47Ci0gICAgc2V0RnJvbnRlbmRQ
cm94eU9iamVjdChtX2Zyb250ZW5kU2NyaXB0U3RhdGUsIHdlYkluc3BlY3Rvck9iaik7Ci0KLSNp
ZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKKyAgICBBU1NFUlQoZnJvbnRlbmQpOworICAg
IG1fb3BlbmluZ0Zyb250ZW5kID0gZmFsc2U7CisgICAgbV9mcm9udGVuZCA9IGZyb250ZW5kOwor
ICAgIHJlbGVhc2VET01BZ2VudCgpOworICAgIG1fZG9tQWdlbnQgPSBJbnNwZWN0b3JET01BZ2Vu
dDo6Y3JlYXRlKG1fZnJvbnRlbmQuZ2V0KCkpOworICAgIGlmIChtX3RpbWVsaW5lQWdlbnQpCisg
ICAgICAgIG1fdGltZWxpbmVBZ2VudC0+cmVzZXRGcm9udGVuZFByb3h5T2JqZWN0KG1fZnJvbnRl
bmQuZ2V0KCkpOworI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKSAmJiBVU0UoSlNDKQog
ICAgIFN0cmluZyBkZWJ1Z2dlckVuYWJsZWQgPSBzZXR0aW5nKGRlYnVnZ2VyRW5hYmxlZFNldHRp
bmdOYW1lKTsKICAgICBpZiAoZGVidWdnZXJFbmFibGVkID09ICJ0cnVlIikKICAgICAgICAgZW5h
YmxlRGVidWdnZXIoKTsKQEAgLTU2Niw0OCArNDUxLDM2IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJv
bGxlcjo6c2NyaXB0T2JqZWN0UmVhZHkoKQogICAgICAgICBlbmFibGVQcm9maWxlcigpOwogI2Vu
ZGlmCiAKLSAgICAvLyBJZiBubyBwcmVmZXJlbmNlIGlzIHNldCAtIGRlZmF1bHQgdG8gYW4gYXR0
YWNoZWQgd2luZG93LiBUaGlzIGlzIGltcG9ydGFudCBmb3IgaW5zcGVjdG9yIExheW91dFRlc3Rz
LgotICAgIFN0cmluZyBzaG91bGRBdHRhY2hWYWx1ZSA9IHNldHRpbmcoaW5zcGVjdG9yU3RhcnRz
QXR0YWNoZWRTZXR0aW5nTmFtZSgpKTsKLSAgICBib29sIHNob3VsZEF0dGFjaCA9IHNob3VsZEF0
dGFjaFZhbHVlICE9ICJmYWxzZSI7CisgICAgcG9wdWxhdGVTY3JpcHRPYmplY3RzKCk7CiAgICAg
Ci0gICAgaWYgKHNob3VsZEF0dGFjaCAmJiAhY2FuQXR0YWNoV2luZG93KCkpCi0gICAgICAgIHNo
b3VsZEF0dGFjaCA9IGZhbHNlOwotCi0gICAgLy8gTWFrZSBzdXJlIG91ciB3aW5kb3cgaXMgdmlz
aWJsZSBub3cgdGhhdCB0aGUgcGFnZSBsb2FkZWQKLSAgICBzZXRXaW5kb3dWaXNpYmxlKHRydWUs
IHNob3VsZEF0dGFjaCk7Ci0KLSAgICBtX2NsaWVudC0+aW5zcGVjdG9yV2luZG93T2JqZWN0Q2xl
YXJlZCgpOwotfQotCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldEZyb250ZW5kUHJveHlP
YmplY3QoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBTY3JpcHRPYmplY3Qgd2ViSW5zcGVjdG9y
T2JqLCBTY3JpcHRPYmplY3QpCi17Ci0gICAgbV9mcm9udGVuZFNjcmlwdFN0YXRlID0gc2NyaXB0
U3RhdGU7Ci0gICAgbV9mcm9udGVuZC5zZXQobmV3IEluc3BlY3RvckZyb250ZW5kKHRoaXMsIHdl
Ykluc3BlY3Rvck9iaikpOwotICAgIHJlbGVhc2VET01BZ2VudCgpOwotICAgIG1fZG9tQWdlbnQg
PSBJbnNwZWN0b3JET01BZ2VudDo6Y3JlYXRlKG1fZnJvbnRlbmQuZ2V0KCkpOwotICAgIGlmICht
X3RpbWVsaW5lQWdlbnQpCi0gICAgICAgIG1fdGltZWxpbmVBZ2VudC0+cmVzZXRGcm9udGVuZFBy
b3h5T2JqZWN0KG1fZnJvbnRlbmQuZ2V0KCkpOworICAgIGlmIChtX3Nob3dBZnRlclZpc2libGUg
PT0gQ3VycmVudFBhbmVsKSB7CisgICAgICAgIFN0cmluZyBsYXN0QWN0aXZlUGFuZWxTZXR0aW5n
ID0gc2V0dGluZyhsYXN0QWN0aXZlUGFuZWxTZXR0aW5nTmFtZSk7CisgICAgICAgIG1fc2hvd0Fm
dGVyVmlzaWJsZSA9IHNwZWNpYWxQYW5lbEZvckpTTmFtZShsYXN0QWN0aXZlUGFuZWxTZXR0aW5n
KTsKKyAgICB9CisgICAgCisgICAgaWYgKG1fbm9kZVRvRm9jdXMpCisgICAgICAgIGZvY3VzTm9k
ZSgpOworI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQorICAgIGlmIChtX2F0dGFjaERl
YnVnZ2VyV2hlblNob3duKQorICAgICAgICBlbmFibGVEZWJ1Z2dlcigpOworI2VuZGlmCisgICAg
c2hvd1BhbmVsKG1fc2hvd0FmdGVyVmlzaWJsZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJv
bGxlcjo6c2hvdygpCiB7CiAgICAgaWYgKCFlbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKLSAg
ICAKLSAgICBpZiAoIW1fcGFnZSkgewotICAgICAgICBpZiAobV9mcm9udGVuZCkKLSAgICAgICAg
ICAgIHJldHVybjsgLy8gV2UgYXJlIHVzaW5nIGN1c3RvbSBmcm9udGVuZCAtIG5vIG5lZWQgdG8g
Y3JlYXRlIHBhZ2UuCi0KLSAgICAgICAgbV9wYWdlID0gbV9jbGllbnQtPmNyZWF0ZVBhZ2UoKTsK
LSAgICAgICAgaWYgKCFtX3BhZ2UpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fcGFn
ZS0+c2V0UGFyZW50SW5zcGVjdG9yQ29udHJvbGxlcih0aGlzKTsKIAotICAgICAgICAvLyBzaG93
V2luZG93KCkgd2lsbCBiZSBjYWxsZWQgYWZ0ZXIgdGhlIHBhZ2UgbG9hZHMgaW4gc2NyaXB0T2Jq
ZWN0UmVhZHkoKQorICAgIGlmIChtX29wZW5pbmdGcm9udGVuZCkKICAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIGlmIChtX2Zyb250ZW5kKQorICAgICAgICBtX2Zyb250ZW5kLT5icmluZ1RvRnJv
bnQoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9vcGVuaW5nRnJvbnRlbmQgPSB0cnVlOworICAg
ICAgICBtX2NsaWVudC0+b3Blbkluc3BlY3RvckZyb250ZW5kKHRoaXMpOwogICAgIH0KLQotICAg
IHNob3dXaW5kb3coKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzaG93UGFuZWwo
U3BlY2lhbFBhbmVscyBwYW5lbCkKQEAgLTYzMCw0OSArNTAzLDQwIEBAIHZvaWQgSW5zcGVjdG9y
Q29udHJvbGxlcjo6c2hvd1BhbmVsKFNwZWNpYWxQYW5lbHMgcGFuZWwpCiAKIHZvaWQgSW5zcGVj
dG9yQ29udHJvbGxlcjo6Y2xvc2UoKQogewotICAgIGlmICghZW5hYmxlZCgpKQorICAgIGlmICgh
bV9mcm9udGVuZCkKICAgICAgICAgcmV0dXJuOwotCi0jaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVC
VUdHRVIpCi0gICAgc3RvcFVzZXJJbml0aWF0ZWRQcm9maWxpbmcoKTsKLSAgICBkaXNhYmxlRGVi
dWdnZXIoKTsKLSNlbmRpZgotICAgIGNsb3NlV2luZG93KCk7Ci0KLSAgICByZWxlYXNlRE9NQWdl
bnQoKTsKLSAgICBtX2Zyb250ZW5kLnNldCgwKTsKLSAgICBtX3RpbWVsaW5lQWdlbnQgPSAwOwot
ICAgIG1fZnJvbnRlbmRTY3JpcHRTdGF0ZSA9IDA7Ci0gICAgaWYgKG1fcGFnZSkgewotICAgICAg
ICBpZiAoIW1fcGFnZS0+bWFpbkZyYW1lKCkgfHwgIW1fcGFnZS0+bWFpbkZyYW1lKCktPmxvYWRl
cigpIHx8ICFtX3BhZ2UtPm1haW5GcmFtZSgpLT5sb2FkZXIoKS0+aXNMb2FkaW5nKCkpIHsKLSAg
ICAgICAgICAgIG1fcGFnZS0+c2V0UGFyZW50SW5zcGVjdG9yQ29udHJvbGxlcigwKTsKLSAgICAg
ICAgICAgIG1fcGFnZSA9IDA7Ci0gICAgICAgIH0KLSAgICB9CisgICAgbV9mcm9udGVuZC0+Y2xv
c2UoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzaG93V2luZG93KCkKK3ZvaWQg
SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlzY29ubmVjdEZyb250ZW5kKCkKIHsKLSAgICBBU1NFUlQo
ZW5hYmxlZCgpKTsKKyAgICBpZiAoIW1fZnJvbnRlbmQpCisgICAgICAgIHJldHVybjsKKyAgICBt
X2Zyb250ZW5kLmNsZWFyKCk7CiAKLSAgICB1bnNpZ25lZCBpbnNwZWN0ZWRQYWdlSGVpZ2h0ID0g
bV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKS0+dmlldygpLT52aXNpYmxlSGVpZ2h0KCk7Cisj
aWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCisgICAgLy8gSWYgdGhlIHdpbmRvdyBpcyBi
ZWluZyBjbG9zZWQgd2l0aCB0aGUgZGVidWdnZXIgZW5hYmxlZCwKKyAgICAvLyByZW1lbWJlciB0
aGlzIHN0YXRlIHRvIHJlLWVuYWJsZSBkZWJ1Z2dlciBvbiB0aGUgbmV4dCB3aW5kb3cKKyAgICAv
LyBvcGVuaW5nLgorICAgIGJvb2wgZGVidWdnZXJXYXNFbmFibGVkID0gbV9kZWJ1Z2dlckVuYWJs
ZWQ7CisgICAgZGlzYWJsZURlYnVnZ2VyKCk7CisgICAgaWYgKGRlYnVnZ2VyV2FzRW5hYmxlZCkK
KyAgICAgICAgbV9hdHRhY2hEZWJ1Z2dlcldoZW5TaG93biA9IHRydWU7CisjZW5kaWYKKyAgICBz
ZXRTZWFyY2hpbmdGb3JOb2RlKGZhbHNlKTsKKyAgICByZXNldFNjcmlwdE9iamVjdHMoKTsKKyAg
ICBzdG9wVGltZWxpbmVQcm9maWxlcigpOwogCi0gICAgbV9jbGllbnQtPnNob3dXaW5kb3coKTsK
KyAgICBtX3Nob3dBZnRlclZpc2libGUgPSBDdXJyZW50UGFuZWw7CiAKLSAgICBTdHJpbmcgYXR0
YWNoZWRIZWlnaHQgPSBzZXR0aW5nKGluc3BlY3RvckF0dGFjaGVkSGVpZ2h0TmFtZSk7Ci0gICAg
Ym9vbCBzdWNjZXNzID0gdHJ1ZTsKLSAgICBpbnQgaGVpZ2h0ID0gYXR0YWNoZWRIZWlnaHQudG9J
bnQoJnN1Y2Nlc3MpOwotICAgIHVuc2lnbmVkIHByZWZlcnJlZEhlaWdodCA9IHN1Y2Nlc3MgPyBo
ZWlnaHQgOiBkZWZhdWx0QXR0YWNoZWRIZWlnaHQ7CisgICAgaGlkZUhpZ2hsaWdodCgpOwogCi0g
ICAgLy8gVGhpcyBjYWxsIG1pZ2h0IG5vdCBnbyB0aHJvdWdoIChpZiB0aGUgd2luZG93IHN0YXJ0
cyBvdXQgZGV0YWNoZWQpLCBidXQgaWYgdGhlIHdpbmRvdyBpcyBpbml0aWFsbHkgY3JlYXRlZCBh
dHRhY2hlZCwKLSAgICAvLyBJbnNwZWN0b3JDb250cm9sbGVyOjphdHRhY2hXaW5kb3cgaXMgbmV2
ZXIgY2FsbGVkLCBzbyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0byBzZXQgdGhlIGF0dGFjaGVkV2lu
ZG93SGVpZ2h0LgotICAgIC8vIEZJWE1FOiBDbGVhbiB1cCBjb2RlIHNvIHdlIG9ubHkgaGF2ZSB0
byBjYWxsIHNldEF0dGFjaGVkV2luZG93SGVpZ2h0IGluIEluc3BlY3RvckNvbnRyb2xsZXI6OmF0
dGFjaFdpbmRvdwotICAgIG1fY2xpZW50LT5zZXRBdHRhY2hlZFdpbmRvd0hlaWdodChjb25zdHJh
aW5lZEF0dGFjaGVkV2luZG93SGVpZ2h0KHByZWZlcnJlZEhlaWdodCwgaW5zcGVjdGVkUGFnZUhl
aWdodCkpOwotfQorI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQorICAgIHN0b3BVc2Vy
SW5pdGlhdGVkUHJvZmlsaW5nKCk7CisjZW5kaWYKIAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVy
OjpjbG9zZVdpbmRvdygpCi17Ci0gICAgbV9jbGllbnQtPmNsb3NlV2luZG93KCk7CisgICAgcmVs
ZWFzZURPTUFnZW50KCk7CisgICAgbV90aW1lbGluZUFnZW50LmNsZWFyKCk7CiB9CiAKIHZvaWQg
SW5zcGVjdG9yQ29udHJvbGxlcjo6cmVsZWFzZURPTUFnZW50KCkKQEAgLTY4MSw3ICs1NDUsNyBA
QCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnJlbGVhc2VET01BZ2VudCgpCiAgICAgLy8gbm8g
cmVmZXJlbmNlcyB0byB0aGUgRE9NIGFnZW50IGZyb20gdGhlIERPTSB0cmVlLgogICAgIGlmICht
X2RvbUFnZW50KQogICAgICAgICBtX2RvbUFnZW50LT5yZXNldCgpOwotICAgIG1fZG9tQWdlbnQg
PSAwOworICAgIG1fZG9tQWdlbnQuY2xlYXIoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9s
bGVyOjpwb3B1bGF0ZVNjcmlwdE9iamVjdHMoKQpAQCAtNzE1LDcgKzU3OSw3IEBAIHZvaWQgSW5z
cGVjdG9yQ29udHJvbGxlcjo6cG9wdWxhdGVTY3JpcHRPYmplY3RzKCkKICAgICAgICAgbV9mcm9u
dGVuZC0+dXBkYXRlQ29uc29sZU1lc3NhZ2VFeHBpcmVkQ291bnQobV9leHBpcmVkQ29uc29sZU1l
c3NhZ2VDb3VudCk7CiAgICAgdW5zaWduZWQgbWVzc2FnZUNvdW50ID0gbV9jb25zb2xlTWVzc2Fn
ZXMuc2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtZXNzYWdlQ291bnQ7ICsr
aSkKLSAgICAgICAgbV9jb25zb2xlTWVzc2FnZXNbaV0tPmFkZFRvQ29uc29sZShtX2Zyb250ZW5k
LmdldCgpKTsKKyAgICAgICAgbV9jb25zb2xlTWVzc2FnZXNbaV0tPmFkZFRvRnJvbnRlbmQobV9m
cm9udGVuZC5nZXQoKSwgbV9pbmplY3RlZFNjcmlwdEhvc3QuZ2V0KCkpOwogCiAjaWYgRU5BQkxF
KEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICAgaWYgKG1fZGVidWdnZXJFbmFibGVkKQpAQCAtNzUw
LDEwICs2MTQsNiBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnJlc2V0U2NyaXB0T2JqZWN0
cygpCiAgICAgaWYgKCFtX2Zyb250ZW5kKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZXNvdXJj
ZXNNYXA6Oml0ZXJhdG9yIHJlc291cmNlc0VuZCA9IG1fcmVzb3VyY2VzLmVuZCgpOwotICAgIGZv
ciAoUmVzb3VyY2VzTWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9
IHJlc291cmNlc0VuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+cmVsZWFzZVNjcmlwdE9i
amVjdChtX2Zyb250ZW5kLmdldCgpLCBmYWxzZSk7Ci0KICNpZiBFTkFCTEUoREFUQUJBU0UpCiAg
ICAgRGF0YWJhc2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGRhdGFiYXNlc0VuZCA9IG1fZGF0YWJh
c2VSZXNvdXJjZXMuZW5kKCk7CiAgICAgZm9yIChEYXRhYmFzZVJlc291cmNlc01hcDo6aXRlcmF0
b3IgaXQgPSBtX2RhdGFiYXNlUmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGRhdGFiYXNlc0VuZDsg
KytpdCkKQEAgLTc4Nyw4ICs2NDcsOCBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnBydW5l
UmVzb3VyY2VzKFJlc291cmNlc01hcCogcmVzb3VyY2VNYXAsIERvY3VtZW50TG9hZAogCiAgICAg
ICAgIGlmICghbG9hZGVyVG9LZWVwIHx8ICFyZXNvdXJjZS0+aXNTYW1lTG9hZGVyKGxvYWRlclRv
S2VlcCkpIHsKICAgICAgICAgICAgIHJlbW92ZVJlc291cmNlKHJlc291cmNlKTsKLSAgICAgICAg
ICAgIGlmICh3aW5kb3dWaXNpYmxlKCkpCi0gICAgICAgICAgICAgICAgcmVzb3VyY2UtPnJlbGVh
c2VTY3JpcHRPYmplY3QobV9mcm9udGVuZC5nZXQoKSwgdHJ1ZSk7CisgICAgICAgICAgICBpZiAo
bV9mcm9udGVuZCkKKyAgICAgICAgICAgICAgICByZXNvdXJjZS0+cmVsZWFzZVNjcmlwdE9iamVj
dChtX2Zyb250ZW5kLmdldCgpKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTgwMSw3ICs2NjEs
OCBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZENvbW1pdExvYWQoRG9jdW1lbnRMb2Fk
ZXIqIGxvYWRlcikKICAgICBBU1NFUlQobV9pbnNwZWN0ZWRQYWdlKTsKIAogICAgIGlmIChsb2Fk
ZXItPmZyYW1lKCkgPT0gbV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKSkgewotICAgICAgICBt
X2NsaWVudC0+aW5zcGVjdGVkVVJMQ2hhbmdlZChsb2FkZXItPnVybCgpLnN0cmluZygpKTsKKyAg
ICAgICAgaWYgKG1fZnJvbnRlbmQpCisgICAgICAgICAgICBtX2Zyb250ZW5kLT5pbnNwZWN0ZWRV
UkxDaGFuZ2VkKGxvYWRlci0+dXJsKCkuc3RyaW5nKCkpOwogCiAgICAgICAgIG1faW5qZWN0ZWRT
Y3JpcHRIb3N0LT5kaXNjYXJkSW5qZWN0ZWRTY3JpcHRzKCk7CiAgICAgICAgIGNsZWFyQ29uc29s
ZU1lc3NhZ2VzKCk7CkBAIC0xNDM3LDE2ICsxMjk4LDYgQEAgSW5zcGVjdG9yRE9NU3RvcmFnZVJl
c291cmNlKiBJbnNwZWN0b3JDb250cm9sbGVyOjpnZXRET01TdG9yYWdlUmVzb3VyY2VGb3JJZChp
bnQKIH0KICNlbmRpZgogCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6Om1vdmVXaW5kb3dCeShm
bG9hdCB4LCBmbG9hdCB5KSBjb25zdAotewotICAgIGlmICghbV9wYWdlIHx8ICFlbmFibGVkKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEZsb2F0UmVjdCBmcmFtZVJlY3QgPSBtX3BhZ2UtPmNo
cm9tZSgpLT53aW5kb3dSZWN0KCk7Ci0gICAgZnJhbWVSZWN0Lm1vdmUoeCwgeSk7Ci0gICAgbV9w
YWdlLT5jaHJvbWUoKS0+c2V0V2luZG93UmVjdChmcmFtZVJlY3QpOwotfQotCiAjaWYgRU5BQkxF
KEpBVkFTQ1JJUFRfREVCVUdHRVIpCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmFkZFByb2Zp
bGUoUGFzc1JlZlB0cjxTY3JpcHRQcm9maWxlPiBwcnBQcm9maWxlLCB1bnNpZ25lZCBsaW5lTnVt
YmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCkKIHsKQEAgLTE0OTksNyArMTM1MCw3IEBAIHZv
aWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6Z2V0UHJvZmlsZShsb25nIGNhbGxJZCwgdW5zaWduZWQg
dWlkKQogICAgIFByb2ZpbGVzTWFwOjppdGVyYXRvciBpdCA9IG1fcHJvZmlsZXMuZmluZCh1aWQp
OwogI2lmIFVTRShKU0MpCiAgICAgaWYgKGl0ICE9IG1fcHJvZmlsZXMuZW5kKCkpCi0gICAgICAg
IG1fZnJvbnRlbmQtPmRpZEdldFByb2ZpbGUoY2FsbElkLCB0b0pTKG1fZnJvbnRlbmRTY3JpcHRT
dGF0ZSwgaXQtPnNlY29uZC5nZXQoKSkpOworICAgICAgICBtX2Zyb250ZW5kLT5kaWRHZXRQcm9m
aWxlKGNhbGxJZCwgdG9KUyhtX2Zyb250ZW5kLT5zY3JpcHRTdGF0ZSgpLCBpdC0+c2Vjb25kLmdl
dCgpKSk7CiAjZW5kaWYKIH0KIApAQCAtMTYzNiw3ICsxNDg3LDcgQEAgdm9pZCBJbnNwZWN0b3JD
b250cm9sbGVyOjplbmFibGVEZWJ1Z2dlcigpCiAgICAgaWYgKG1fZGVidWdnZXJFbmFibGVkKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIW1fZnJvbnRlbmRTY3JpcHRTdGF0ZSB8fCAhbV9m
cm9udGVuZCkKKyAgICBpZiAoIW1fZnJvbnRlbmQpCiAgICAgICAgIG1fYXR0YWNoRGVidWdnZXJX
aGVuU2hvd24gPSB0cnVlOwogICAgIGVsc2UgewogICAgICAgICBtX2Zyb250ZW5kLT5hdHRhY2hE
ZWJ1Z2dlcldoZW5TaG93bigpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQ29udHJvbGxlci5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5o
CmluZGV4IGVhZDRkNWUuLjBjYTlkMTcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnRyb2xsZXIuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250
cm9sbGVyLmgKQEAgLTY2LDcgKzY2LDcgQEAgY2xhc3MgSW5qZWN0ZWRTY3JpcHRIb3N0OwogY2xh
c3MgSW5zcGVjdG9yQmFja2VuZDsKIGNsYXNzIEluc3BlY3RvckNsaWVudDsKIGNsYXNzIEluc3Bl
Y3RvckZyb250ZW5kOwotY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmRIb3N0OworY2xhc3MgSW5zcGVj
dG9yRnJvbnRlbmRDbGllbnQ7CiBjbGFzcyBJbnNwZWN0b3JUaW1lbGluZUFnZW50OwogY2xhc3Mg
SmF2YVNjcmlwdENhbGxGcmFtZTsKIGNsYXNzIEtVUkw7CkBAIC0xMTYsMTEgKzExNiw5IEBAIHB1
YmxpYzoKICAgICB+SW5zcGVjdG9yQ29udHJvbGxlcigpOwogCiAgICAgSW5zcGVjdG9yQmFja2Vu
ZCogaW5zcGVjdG9yQmFja2VuZCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yQmFja2VuZC5nZXQoKTsg
fQotICAgIEluc3BlY3RvckZyb250ZW5kSG9zdCogaW5zcGVjdG9yRnJvbnRlbmRIb3N0KCkgeyBy
ZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZEhvc3QuZ2V0KCk7IH0KICAgICBJbmplY3RlZFNjcmlw
dEhvc3QqIGluamVjdGVkU2NyaXB0SG9zdCgpIHsgcmV0dXJuIG1faW5qZWN0ZWRTY3JpcHRIb3N0
LmdldCgpOyB9CiAKICAgICB2b2lkIGluc3BlY3RlZFBhZ2VEZXN0cm95ZWQoKTsKLSAgICB2b2lk
IHBhZ2VEZXN0cm95ZWQoKSB7IG1fcGFnZSA9IDA7IH0KIAogICAgIGJvb2wgZW5hYmxlZCgpIGNv
bnN0OwogCkBAIC0xMzYsMjggKzEzNCwyNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzaG93KCk7CiAg
ICAgdm9pZCBzaG93UGFuZWwoU3BlY2lhbFBhbmVscyk7CiAgICAgdm9pZCBjbG9zZSgpOwotCi0g
ICAgYm9vbCB3aW5kb3dWaXNpYmxlKCk7Ci0gICAgdm9pZCBzZXRXaW5kb3dWaXNpYmxlKGJvb2wg
dmlzaWJsZSA9IHRydWUsIGJvb2wgYXR0YWNoZWQgPSBmYWxzZSk7CisgICAgdm9pZCBkaXNjb25u
ZWN0RnJvbnRlbmQoKTsKIAogICAgIHZvaWQgYWRkTWVzc2FnZVRvQ29uc29sZShNZXNzYWdlU291
cmNlLCBNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBTY3JpcHRDYWxsU3RhY2sqKTsKICAgICB2
b2lkIGFkZE1lc3NhZ2VUb0NvbnNvbGUoTWVzc2FnZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1lc3Nh
Z2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25z
dCBTdHJpbmcmIHNvdXJjZUlEKTsKICAgICB2b2lkIGNsZWFyQ29uc29sZU1lc3NhZ2VzKCk7CiAg
ICAgY29uc3QgVmVjdG9yPENvbnNvbGVNZXNzYWdlKj4mIGNvbnNvbGVNZXNzYWdlcygpIGNvbnN0
IHsgcmV0dXJuIG1fY29uc29sZU1lc3NhZ2VzOyB9CiAKLSAgICBib29sIGNhbkF0dGFjaFdpbmRv
dygpIGNvbnN0OwotICAgIHZvaWQgYXR0YWNoV2luZG93KCk7Ci0gICAgdm9pZCBkZXRhY2hXaW5k
b3coKTsKLQogICAgIGJvb2wgc2VhcmNoaW5nRm9yTm9kZUluUGFnZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc2VhcmNoaW5nRm9yTm9kZTsgfQogICAgIHZvaWQgbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQo
Y29uc3QgSGl0VGVzdFJlc3VsdCYsIHVuc2lnbmVkIG1vZGlmaWVyRmxhZ3MpOwogICAgIHZvaWQg
aGFuZGxlTW91c2VQcmVzc09uTm9kZShOb2RlKik7CiAKKyAgICB2b2lkIHNldEluc3BlY3RvckZy
b250ZW5kQ2xpZW50KFBhc3NPd25QdHI8SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ+IGNsaWVudCk7
CisgICAgYm9vbCBoYXNJbnNwZWN0b3JGcm9udGVuZENsaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1f
aW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ7IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgdm9pZCBpbnNwZWN0ZWRXaW5kb3dTY3Jp
cHRPYmplY3RDbGVhcmVkKEZyYW1lKik7Ci0gICAgdm9pZCB3aW5kb3dTY3JpcHRPYmplY3RBdmFp
bGFibGUoKTsKIAotICAgIHZvaWQgc2V0RnJvbnRlbmRQcm94eU9iamVjdChTY3JpcHRTdGF0ZSog
c3RhdGUsIFNjcmlwdE9iamVjdCB3ZWJJbnNwZWN0b3JPYmosIFNjcmlwdE9iamVjdCBpbmplY3Rl
ZFNjcmlwdE9iaiA9IFNjcmlwdE9iamVjdCgpKTsKLSAgICBTY3JpcHRTdGF0ZSogZnJvbnRlbmRT
Y3JpcHRTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJvbnRlbmRTY3JpcHRTdGF0ZTsgfQorICAg
IGJvb2wgd2luZG93VmlzaWJsZSgpOworICAgIHZvaWQgc2V0RnJvbnRlbmQoUGFzc093blB0cjxJ
bnNwZWN0b3JGcm9udGVuZD4pOwogCiAgICAgdm9pZCBwb3B1bGF0ZVNjcmlwdE9iamVjdHMoKTsK
ICAgICB2b2lkIHJlc2V0U2NyaXB0T2JqZWN0cygpOwpAQCAtMjYzLDE5ICsyNTcsMTMgQEAgcHJp
dmF0ZToKICAgICBzdGF0aWMgY29uc3QgU3RyaW5nJiBmcm9udGVuZFNldHRpbmdzU2V0dGluZ05h
bWUoKTsKIAogICAgIGZyaWVuZCBjbGFzcyBJbnNwZWN0b3JCYWNrZW5kOwotICAgIGZyaWVuZCBj
bGFzcyBJbnNwZWN0b3JGcm9udGVuZEhvc3Q7CiAgICAgZnJpZW5kIGNsYXNzIEluamVjdGVkU2Ny
aXB0SG9zdDsKIAogICAgIC8vIEZvbGxvd2luZyBhcmUgdXNlZCBmcm9tIEluc3BlY3RvckJhY2tl
bmQgYW5kIGludGVybmFsbHkuCi0KICAgICB2b2lkIHNldFNlYXJjaGluZ0Zvck5vZGUoYm9vbCBl
bmFibGVkKTsKIAotICAgIHZvaWQgc2NyaXB0T2JqZWN0UmVhZHkoKTsKLSAgICB2b2lkIG1vdmVX
aW5kb3dCeShmbG9hdCB4LCBmbG9hdCB5KSBjb25zdDsKLSAgICB2b2lkIHNldEF0dGFjaGVkV2lu
ZG93KGJvb2wpOwotICAgIHZvaWQgc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVp
Z2h0KTsKKyAgICAvLyBGb2xsb3dpbmcgYXJlIHVzZWQgZnJvbSBJbnNwZWN0b3JCYWNrZW5kIGFu
ZCBpbnRlcm5hbGx5LgogICAgIHZvaWQgc3RvcmVMYXN0QWN0aXZlUGFuZWwoY29uc3QgU3RyaW5n
JiBwYW5lbE5hbWUpOwotICAgIHZvaWQgY2xvc2VXaW5kb3coKTsKICAgICBJbnNwZWN0b3JET01B
Z2VudCogZG9tQWdlbnQoKSB7IHJldHVybiBtX2RvbUFnZW50LmdldCgpOyB9CiAgICAgdm9pZCBy
ZWxlYXNlRE9NQWdlbnQoKTsKIApAQCAtMzE2LDggKzMwNCw2IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBwcnVuZVJlc291cmNlcyhSZXNvdXJjZXNNYXAqLCBEb2N1bWVudExvYWRlciogbG9hZGVyVG9L
ZWVwID0gMCk7CiAgICAgdm9pZCByZW1vdmVBbGxSZXNvdXJjZXMoUmVzb3VyY2VzTWFwKiBtYXAp
IHsgcHJ1bmVSZXNvdXJjZXMobWFwKTsgfQogCi0gICAgdm9pZCBzaG93V2luZG93KCk7Ci0KICAg
ICBib29sIGlzTWFpblJlc291cmNlTG9hZGVyKERvY3VtZW50TG9hZGVyKiBsb2FkZXIsIGNvbnN0
IEtVUkwmIHJlcXVlc3RVcmwpOwogCiAgICAgU3BlY2lhbFBhbmVscyBzcGVjaWFsUGFuZWxGb3JK
U05hbWUoY29uc3QgU3RyaW5nJiBwYW5lbE5hbWUpOwpAQCAtMzI2LDEwICszMTIsMTEgQEAgcHJp
dmF0ZToKIAogICAgIFBhZ2UqIG1faW5zcGVjdGVkUGFnZTsKICAgICBJbnNwZWN0b3JDbGllbnQq
IG1fY2xpZW50OworICAgIE93blB0cjxJbnNwZWN0b3JGcm9udGVuZENsaWVudD4gbV9pbnNwZWN0
b3JGcm9udGVuZENsaWVudDsKKyAgICBib29sIG1fb3BlbmluZ0Zyb250ZW5kOwogICAgIE93blB0
cjxJbnNwZWN0b3JGcm9udGVuZD4gbV9mcm9udGVuZDsKICAgICBSZWZQdHI8SW5zcGVjdG9yRE9N
QWdlbnQ+IG1fZG9tQWdlbnQ7CiAgICAgT3duUHRyPEluc3BlY3RvclRpbWVsaW5lQWdlbnQ+IG1f
dGltZWxpbmVBZ2VudDsKLSAgICBQYWdlKiBtX3BhZ2U7CiAgICAgUmVmUHRyPE5vZGU+IG1fbm9k
ZVRvRm9jdXM7CiAgICAgUmVmUHRyPEluc3BlY3RvclJlc291cmNlPiBtX21haW5SZXNvdXJjZTsK
ICAgICBSZXNvdXJjZXNNYXAgbV9yZXNvdXJjZXM7CkBAIC0zNDUsOCArMzMyLDYgQEAgcHJpdmF0
ZToKICNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCiAgICAgRE9NU3RvcmFnZVJlc291cmNlc01hcCBt
X2RvbVN0b3JhZ2VSZXNvdXJjZXM7CiAjZW5kaWYKLSAgICBTY3JpcHRTdGF0ZSogbV9mcm9udGVu
ZFNjcmlwdFN0YXRlOwotICAgIGJvb2wgbV93aW5kb3dWaXNpYmxlOwogICAgIFNwZWNpYWxQYW5l
bHMgbV9zaG93QWZ0ZXJWaXNpYmxlOwogICAgIFJlZlB0cjxOb2RlPiBtX2hpZ2hsaWdodGVkTm9k
ZTsKICAgICB1bnNpZ25lZCBtX2dyb3VwTGV2ZWw7CkBAIC0zNTUsNyArMzQwLDYgQEAgcHJpdmF0
ZToKICAgICBib29sIG1fcmVzb3VyY2VUcmFja2luZ0VuYWJsZWQ7CiAgICAgYm9vbCBtX3Jlc291
cmNlVHJhY2tpbmdTZXR0aW5nc0xvYWRlZDsKICAgICBSZWZQdHI8SW5zcGVjdG9yQmFja2VuZD4g
bV9pbnNwZWN0b3JCYWNrZW5kOwotICAgIFJlZlB0cjxJbnNwZWN0b3JGcm9udGVuZEhvc3Q+IG1f
aW5zcGVjdG9yRnJvbnRlbmRIb3N0OwogICAgIFJlZlB0cjxJbmplY3RlZFNjcmlwdEhvc3Q+IG1f
aW5qZWN0ZWRTY3JpcHRIb3N0OwogCiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgU3RyaW5n
PiBTZXR0aW5nczsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250
ZW5kLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmNwcAppbmRleCA1
NGE0NDE0Li43NGJkOGEyIDEwMDc1NQotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JG
cm9udGVuZC5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuY3Bw
CkBAIC00OSw5ICs0OSw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSW5zcGVjdG9yRnJv
bnRlbmQ6Okluc3BlY3RvckZyb250ZW5kKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNv
bnRyb2xsZXIsIFNjcmlwdE9iamVjdCB3ZWJJbnNwZWN0b3IpCi0gICAgOiBtX2luc3BlY3RvckNv
bnRyb2xsZXIoaW5zcGVjdG9yQ29udHJvbGxlcikKLSAgICAsIG1fd2ViSW5zcGVjdG9yKHdlYklu
c3BlY3RvcikKK0luc3BlY3RvckZyb250ZW5kOjpJbnNwZWN0b3JGcm9udGVuZChTY3JpcHRPYmpl
Y3Qgd2ViSW5zcGVjdG9yKQorICAgIDogbV93ZWJJbnNwZWN0b3Iod2ViSW5zcGVjdG9yKQogewog
fQogCkBAIC02MCw2ICs1OSwxOCBAQCBJbnNwZWN0b3JGcm9udGVuZDo6fkluc3BlY3RvckZyb250
ZW5kKCkKICAgICBtX3dlYkluc3BlY3RvciA9IFNjcmlwdE9iamVjdCgpOwogfQogCit2b2lkIElu
c3BlY3RvckZyb250ZW5kOjpjbG9zZSgpCit7CisgICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0
aW9uKG1fd2ViSW5zcGVjdG9yLCAiY2xvc2UiKTsKKyAgICBmdW5jdGlvbi5jYWxsKCk7Cit9CisK
K3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6Omluc3BlY3RlZFBhZ2VEZXN0cm95ZWQoKQoreworICAg
IFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3dlYkluc3BlY3RvciwgImluc3BlY3RlZFBh
Z2VEZXN0cm95ZWQiKTsKKyAgICBmdW5jdGlvbi5jYWxsKCk7Cit9CisKIFNjcmlwdEFycmF5IElu
c3BlY3RvckZyb250ZW5kOjpuZXdTY3JpcHRBcnJheSgpCiB7CiAgICAgcmV0dXJuIFNjcmlwdEFy
cmF5OjpjcmVhdGVOZXcoc2NyaXB0U3RhdGUoKSk7CkBAIC05MSw3ICsxMDIsNyBAQCB2b2lkIElu
c3BlY3RvckZyb250ZW5kOjp1cGRhdGVDb25zb2xlTWVzc2FnZUV4cGlyZWRDb3VudCh1bnNpZ25l
ZCBjb3VudCkKICAgICBmdW5jdGlvbi5jYWxsKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRnJvbnRl
bmQ6OmFkZENvbnNvbGVNZXNzYWdlKGNvbnN0IFNjcmlwdE9iamVjdCYgbWVzc2FnZU9iaiwgY29u
c3QgVmVjdG9yPFNjcmlwdFN0cmluZz4mIGZyYW1lcywgU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRl
LCBjb25zdCBWZWN0b3I8U2NyaXB0VmFsdWU+IGFyZ3VtZW50cywgY29uc3QgU3RyaW5nJiBtZXNz
YWdlKQordm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6YWRkQ29uc29sZU1lc3NhZ2UoY29uc3QgU2Ny
aXB0T2JqZWN0JiBtZXNzYWdlT2JqLCBjb25zdCBWZWN0b3I8U2NyaXB0U3RyaW5nPiYgZnJhbWVz
LCBjb25zdCBWZWN0b3I8UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gPiYgYXJndW1lbnRz
LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiB7CiAgICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0
aW9uKG1fd2ViSW5zcGVjdG9yLCAiZGlzcGF0Y2giKTsgCiAgICAgZnVuY3Rpb24uYXBwZW5kQXJn
dW1lbnQoImFkZENvbnNvbGVNZXNzYWdlIik7CkBAIC0xMDAsMTAgKzExMSw4IEBAIHZvaWQgSW5z
cGVjdG9yRnJvbnRlbmQ6OmFkZENvbnNvbGVNZXNzYWdlKGNvbnN0IFNjcmlwdE9iamVjdCYgbWVz
c2FnZU9iaiwgY29uc3QKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZyYW1lcy5z
aXplKCk7ICsraSkKICAgICAgICAgICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGZyYW1lc1tp
XSk7CiAgICAgfSBlbHNlIGlmICghYXJndW1lbnRzLmlzRW1wdHkoKSkgewotICAgICAgICBJbmpl
Y3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5qZWN0
ZWRTY3JpcHRIb3N0KCktPmluamVjdGVkU2NyaXB0Rm9yKHNjcmlwdFN0YXRlKTsKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3VtZW50cy5zaXplKCk7ICsraSkgewotICAgICAg
ICAgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZFZhbHVlID0gaW5q
ZWN0ZWRTY3JpcHQud3JhcEZvckNvbnNvbGUoYXJndW1lbnRzW2ldKTsKLSAgICAgICAgICAgIFNj
cmlwdFZhbHVlIHNjcmlwdFZhbHVlID0gU2NyaXB0VmFsdWU6OmRlc2VyaWFsaXplKHRoaXMtPnNj
cmlwdFN0YXRlKCksIHNlcmlhbGl6ZWRWYWx1ZS5nZXQoKSk7CisgICAgICAgICAgICBTY3JpcHRW
YWx1ZSBzY3JpcHRWYWx1ZSA9IFNjcmlwdFZhbHVlOjpkZXNlcmlhbGl6ZShzY3JpcHRTdGF0ZSgp
LCBhcmd1bWVudHNbaV0uZ2V0KCkpOwogICAgICAgICAgICAgaWYgKHNjcmlwdFZhbHVlLmhhc05v
VmFsdWUoKSkgewogICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
ICAgICAgICAgIHJldHVybjsKQEAgLTIyMCw2ICsyMjksMTkgQEAgdm9pZCBJbnNwZWN0b3JGcm9u
dGVuZDo6cmVzZXQoKQogICAgIGNhbGxTaW1wbGVGdW5jdGlvbigicmVzZXQiKTsKIH0KIAordm9p
ZCBJbnNwZWN0b3JGcm9udGVuZDo6YnJpbmdUb0Zyb250KCkKK3sKKyAgICBjYWxsU2ltcGxlRnVu
Y3Rpb24oImJyaW5nVG9Gcm9udCIpOworfQorCit2b2lkIEluc3BlY3RvckZyb250ZW5kOjppbnNw
ZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYgdXJsKQoreworICAgIFNjcmlwdEZ1bmN0aW9u
Q2FsbCBmdW5jdGlvbihtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7CisgICAgZnVuY3Rpb24u
YXBwZW5kQXJndW1lbnQoImluc3BlY3RlZFVSTENoYW5nZWQiKTsKKyAgICBmdW5jdGlvbi5hcHBl
bmRBcmd1bWVudCh1cmwpOworICAgIGZ1bmN0aW9uLmNhbGwoKTsKK30KKwogdm9pZCBJbnNwZWN0
b3JGcm9udGVuZDo6cmVzb3VyY2VUcmFja2luZ1dhc0VuYWJsZWQoKQogewogICAgIGNhbGxTaW1w
bGVGdW5jdGlvbigicmVzb3VyY2VUcmFja2luZ1dhc0VuYWJsZWQiKTsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmggYi9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JGcm9udGVuZC5oCmluZGV4IDYxYzFhOGMuLjE3YzRjOGIgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRnJvbnRlbmQuaApAQCAtNDksOCArNDksMTEgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiAgICAgY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmQgOiBwdWJsaWMgTm9uY29weWFibGUg
ewogICAgIHB1YmxpYzoKLSAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmQoSW5zcGVjdG9yQ29udHJv
bGxlciogaW5zcGVjdG9yQ29udHJvbGxlciwgU2NyaXB0T2JqZWN0IHdlYkluc3BlY3Rvcik7Cisg
ICAgICAgIEluc3BlY3RvckZyb250ZW5kKFNjcmlwdE9iamVjdCB3ZWJJbnNwZWN0b3IpOwogICAg
ICAgICB+SW5zcGVjdG9yRnJvbnRlbmQoKTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgY2xvc2Uo
KTsKKyAgICAgICAgdm9pZCBpbnNwZWN0ZWRQYWdlRGVzdHJveWVkKCk7CiAKICAgICAgICAgU2Ny
aXB0QXJyYXkgbmV3U2NyaXB0QXJyYXkoKTsKICAgICAgICAgU2NyaXB0T2JqZWN0IG5ld1Njcmlw
dE9iamVjdCgpOwpAQCAtNjAsNyArNjMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IHZvaWQgcG9wdWxhdGVGcm9udGVuZFNldHRpbmdzKGNvbnN0IFN0cmluZyYgc2V0dGluZ3MpOwog
CiAgICAgICAgIHZvaWQgdXBkYXRlQ29uc29sZU1lc3NhZ2VFeHBpcmVkQ291bnQodW5zaWduZWQg
Y291bnQpOwotICAgICAgICB2b2lkIGFkZENvbnNvbGVNZXNzYWdlKGNvbnN0IFNjcmlwdE9iamVj
dCYgbWVzc2FnZU9iaiwgY29uc3QgVmVjdG9yPFNjcmlwdFN0cmluZz4mIGZyYW1lcywgU2NyaXB0
U3RhdGUqLCBjb25zdCBWZWN0b3I8U2NyaXB0VmFsdWU+IGFyZ3VtZW50cywgY29uc3QgU3RyaW5n
JiBtZXNzYWdlKTsKKyAgICAgICAgdm9pZCBhZGRDb25zb2xlTWVzc2FnZShjb25zdCBTY3JpcHRP
YmplY3QmIG1lc3NhZ2VPYmosIGNvbnN0IFZlY3RvcjxTY3JpcHRTdHJpbmc+JiBmcmFtZXMsIGNv
bnN0IFZlY3RvcjxSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiA+JiBhcmd1bWVudHMsIGNv
bnN0IFN0cmluZyYgbWVzc2FnZSk7CiAgICAgICAgIHZvaWQgdXBkYXRlQ29uc29sZU1lc3NhZ2VS
ZXBlYXRDb3VudCh1bnNpZ25lZCBjb3VudCk7CiAgICAgICAgIHZvaWQgY2xlYXJDb25zb2xlTWVz
c2FnZXMoKTsKIApAQCAtNzMsNiArNzYsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IHZvaWQgc2hvd1BhbmVsKGludCBwYW5lbCk7CiAgICAgICAgIHZvaWQgcG9wdWxhdGVJbnRlcmZh
Y2UoKTsKICAgICAgICAgdm9pZCByZXNldCgpOworICAgICAgICAKKyAgICAgICAgdm9pZCBicmlu
Z1RvRnJvbnQoKTsKKyAgICAgICAgdm9pZCBpbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmlu
ZyYpOwogCiAgICAgICAgIHZvaWQgcmVzb3VyY2VUcmFja2luZ1dhc0VuYWJsZWQoKTsKICAgICAg
ICAgdm9pZCByZXNvdXJjZVRyYWNraW5nV2FzRGlzYWJsZWQoKTsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50LmggYi9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JGcm9udGVuZENsaWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjA1ODM0NmIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JGcm9udGVuZENsaWVudC5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEluc3BlY3RvckZy
b250ZW5kQ2xpZW50X2gKKyNkZWZpbmUgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRfaAorCisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENvbnRl
eHRNZW51SXRlbTsKK2NsYXNzIEV2ZW50OworY2xhc3MgU3RyaW5nOworCitjbGFzcyBJbnNwZWN0
b3JGcm9udGVuZENsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+SW5zcGVjdG9yRnJvbnRl
bmRDbGllbnQoKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCB3aW5kb3dPYmplY3RDbGVhcmVkKCkg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBmcm9udGVuZExvYWRlZCgpID0gMDsKKworICAgIHZpcnR1
YWwgdm9pZCBtb3ZlV2luZG93QnkoZmxvYXQgeCwgZmxvYXQgeSkgPSAwOworCisgICAgdmlydHVh
bCBTdHJpbmcgbG9jYWxpemVkU3RyaW5nc1VSTCgpID0gMDsKKyAgICB2aXJ0dWFsIFN0cmluZyBo
aWRkZW5QYW5lbHMoKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgYnJpbmdUb0Zyb250KCkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBjbG9zZVdpbmRvdygpID0gMDsKKworICAgIHZpcnR1YWwgYm9v
bCBjYW5BdHRhY2hXaW5kb3coKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGF0dGFjaFdpbmRvdygp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoV2luZG93KCkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBjaGFuZ2VBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCkgPSAwOworICAgIAorICAg
IHZpcnR1YWwgdm9pZCBpbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYpID0gMDsKKwor
ICAgIHZpcnR1YWwgdm9pZCBzaG93Q29udGV4dE1lbnUoRXZlbnQqLCBjb25zdCBWZWN0b3I8Q29u
dGV4dE1lbnVJdGVtKj4mKSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGll
bnRMb2NhbC5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExv
Y2FsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODg4ZmJkCi0tLSAv
ZGV2L251bGwKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRM
b2NhbC5jcHAKQEAgLTAsMCArMSwyMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikK
KworI2luY2x1ZGUgIkNocm9tZS5oIgorI2luY2x1ZGUgIkNvbnRleHRNZW51LmgiCisjaW5jbHVk
ZSAiQ29udGV4dE1lbnVDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiQ29udGV4dE1lbnVJdGVtLmgi
CisjaW5jbHVkZSAiQ29udGV4dE1lbnVQcm92aWRlci5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5o
IgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAi
SW5zcGVjdG9yQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kLmgiCisj
aW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2lu
Y2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU2NyaXB0RnVuY3Rpb25DYWxsLmgi
CisjaW5jbHVkZSAiU2NyaXB0T2JqZWN0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgRnJvbnRlbmRNZW51UHJvdmlkZXIgOiBwdWJsaWMgQ29udGV4dE1lbnVQcm92aWRlciB7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RnJvbnRlbmRNZW51UHJvdmlkZXI+IGNyZWF0
ZShJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsKiBmcm9udGVuZENsaWVudCwgU2NyaXB0T2Jq
ZWN0IHdlYkluc3BlY3RvciwgY29uc3QgVmVjdG9yPENvbnRleHRNZW51SXRlbSo+JiBpdGVtcykK
KyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRnJvbnRlbmRNZW51UHJvdmlkZXIo
ZnJvbnRlbmRDbGllbnQsIHdlYkluc3BlY3RvciwgaXRlbXMpKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBkaXNjb25uZWN0KCkKKyAgICB7CisgICAgICAgIG1fd2ViSW5zcGVjdG9yID0gU2NyaXB0
T2JqZWN0KCk7CisgICAgICAgIG1fZnJvbnRlbmRDbGllbnQgPSAwOworICAgIH0KKyAgICAKK3By
aXZhdGU6CisgICAgRnJvbnRlbmRNZW51UHJvdmlkZXIoSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRM
b2NhbCogZnJvbnRlbmRDbGllbnQsIFNjcmlwdE9iamVjdCB3ZWJJbnNwZWN0b3IsICBjb25zdCBW
ZWN0b3I8Q29udGV4dE1lbnVJdGVtKj4mIGl0ZW1zKQorICAgICAgICA6IG1fZnJvbnRlbmRDbGll
bnQoZnJvbnRlbmRDbGllbnQpCisgICAgICAgICwgbV93ZWJJbnNwZWN0b3Iod2ViSW5zcGVjdG9y
KQorICAgICAgICAsIG1faXRlbXMoaXRlbXMpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwg
fkZyb250ZW5kTWVudVByb3ZpZGVyKCkKKyAgICB7CisgICAgICAgIGNvbnRleHRNZW51Q2xlYXJl
ZCgpOworICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgcG9wdWxhdGVDb250ZXh0TWVudShD
b250ZXh0TWVudSogbWVudSkKKyAgICB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV9pdGVtcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG1lbnUtPmFwcGVuZEl0ZW0oKm1faXRl
bXNbaV0pOworICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgY29udGV4dE1lbnVJdGVtU2Vs
ZWN0ZWQoQ29udGV4dE1lbnVJdGVtKiBpdGVtKQorICAgIHsKKyAgICAgICAgaW50IGl0ZW1OdW1i
ZXIgPSBpdGVtLT5hY3Rpb24oKSAtIENvbnRleHRNZW51SXRlbUJhc2VDdXN0b21UYWc7CisKKyAg
ICAgICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fd2ViSW5zcGVjdG9yLCAiZGlzcGF0
Y2giKTsKKyAgICAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoImNvbnRleHRNZW51SXRlbVNl
bGVjdGVkIik7CisgICAgICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGl0ZW1OdW1iZXIpOwor
ICAgICAgICBmdW5jdGlvbi5jYWxsKCk7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgdm9pZCBj
b250ZXh0TWVudUNsZWFyZWQoKQorICAgIHsKKworICAgICAgICBpZiAobV9mcm9udGVuZENsaWVu
dCkgeworICAgICAgICAgICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fd2ViSW5zcGVj
dG9yLCAiZGlzcGF0Y2giKTsKKyAgICAgICAgICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KCJj
b250ZXh0TWVudUNsZWFyZWQiKTsKKyAgICAgICAgICAgIGZ1bmN0aW9uLmNhbGwoKTsKKworICAg
ICAgICAgICAgbV9mcm9udGVuZENsaWVudC0+bV9tZW51UHJvdmlkZXIgPSAwOworICAgICAgICB9
CisgICAgICAgIGRlbGV0ZUFsbFZhbHVlcyhtX2l0ZW1zKTsKKyAgICAgICAgbV9pdGVtcy5jbGVh
cigpOworICAgIH0KKworICAgIEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwqIG1fZnJvbnRl
bmRDbGllbnQ7CisgICAgU2NyaXB0T2JqZWN0IG1fd2ViSW5zcGVjdG9yOworICAgIFZlY3RvcjxD
b250ZXh0TWVudUl0ZW0qPiBtX2l0ZW1zOworfTsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0
IGluc3BlY3RvckF0dGFjaGVkSGVpZ2h0TmFtZSA9ICJpbnNwZWN0b3JBdHRhY2hlZEhlaWdodCI7
CitzdGF0aWMgY29uc3QgdW5zaWduZWQgZGVmYXVsdEF0dGFjaGVkSGVpZ2h0ID0gMzAwOworc3Rh
dGljIGNvbnN0IGZsb2F0IG1pbmltdW1BdHRhY2hlZEhlaWdodCA9IDI1MC4wZjsKK3N0YXRpYyBj
b25zdCBmbG9hdCBtYXhpbXVtQXR0YWNoZWRIZWlnaHRSYXRpbyA9IDAuNzVmOworCitJbnNwZWN0
b3JGcm9udGVuZENsaWVudExvY2FsOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsKEluc3Bl
Y3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIsIFBhZ2UqIGZyb250ZW5kUGFnZSkK
KyAgICA6IG1faW5zcGVjdG9yQ29udHJvbGxlcihpbnNwZWN0b3JDb250cm9sbGVyKQorICAgICwg
bV9mcm9udGVuZFBhZ2UoZnJvbnRlbmRQYWdlKQorICAgICwgbV9mcm9udGVuZFNjcmlwdFN0YXRl
KDApCisgICAgLCBtX21lbnVQcm92aWRlcigwKQoreworfQorCitJbnNwZWN0b3JGcm9udGVuZENs
aWVudExvY2FsOjp+SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbCgpCit7CisgICAgaWYgKG1f
ZnJvbnRlbmRIb3N0KQorICAgICAgICBtX2Zyb250ZW5kSG9zdC0+ZGlzY29ubmVjdENsaWVudCgp
OworICAgIGlmIChtX21lbnVQcm92aWRlcikKKyAgICAgICAgbV9tZW51UHJvdmlkZXItPmRpc2Nv
bm5lY3QoKTsKKyAgICBtX2Zyb250ZW5kU2NyaXB0U3RhdGUgPSAwOworICAgIG1fZnJvbnRlbmRQ
YWdlID0gMDsKKyAgICBtX2luc3BlY3RvckNvbnRyb2xsZXIgPSAwOworfQorICAgIAordm9pZCBJ
bnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjp3aW5kb3dPYmplY3RDbGVhcmVkKCkKK3sKKyAg
ICAvLyBHcmFudCB0aGUgaW5zcGVjdG9yIHRoZSBhYmlsaXR5IHRvIHNjcmlwdCB0aGUgaW5zcGVj
dGVkIHBhZ2UuCisgICAgbV9mcm9udGVuZFBhZ2UtPm1haW5GcmFtZSgpLT5kb2N1bWVudCgpLT5z
ZWN1cml0eU9yaWdpbigpLT5ncmFudFVuaXZlcnNhbEFjY2VzcygpOworICAgIC8vIEZJWE1FOiBk
b24ndCBrZWVwIHJlZmVyZW5jZSB0byB0aGUgc2NyaXB0IHN0YXRlCisgICAgbV9mcm9udGVuZFNj
cmlwdFN0YXRlID0gc2NyaXB0U3RhdGVGcm9tUGFnZShkZWJ1Z2dlcldvcmxkKCksIG1fZnJvbnRl
bmRQYWdlKTsKKyAgICBTY3JpcHRHbG9iYWxPYmplY3Q6OnNldChtX2Zyb250ZW5kU2NyaXB0U3Rh
dGUsICJJbnNwZWN0b3JCYWNrZW5kIiwgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0b3JC
YWNrZW5kKCkpOworICAgIG1fZnJvbnRlbmRIb3N0ID0gSW5zcGVjdG9yRnJvbnRlbmRIb3N0Ojpj
cmVhdGUodGhpcyk7CisgICAgU2NyaXB0R2xvYmFsT2JqZWN0OjpzZXQobV9mcm9udGVuZFNjcmlw
dFN0YXRlLCAiSW5zcGVjdG9yRnJvbnRlbmRIb3N0IiwgbV9mcm9udGVuZEhvc3QuZ2V0KCkpOwor
fQorCit2b2lkIEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OmZyb250ZW5kTG9hZGVkKCkK
K3sKKyAgICBicmluZ1RvRnJvbnQoKTsKKyAgICAvLyBDcmVhdGUgSW5zcGVjdG9yRnJvbnRlbmQg
YW5kIHNldCBpdCB0byBJbnNwZWN0b3JDb250cm9sbGVyLgorICAgIEFTU0VSVChtX2Zyb250ZW5k
U2NyaXB0U3RhdGUpOworICAgIFNjcmlwdE9iamVjdCB3ZWJJbnNwZWN0b3JPYmo7CisgICAgaWYg
KCFTY3JpcHRHbG9iYWxPYmplY3Q6OmdldChtX2Zyb250ZW5kU2NyaXB0U3RhdGUsICJXZWJJbnNw
ZWN0b3IiLCB3ZWJJbnNwZWN0b3JPYmopKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+c2V0
RnJvbnRlbmQobmV3IEluc3BlY3RvckZyb250ZW5kKHdlYkluc3BlY3Rvck9iaikpOworfQorCiti
b29sIEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OmNhbkF0dGFjaFdpbmRvdygpCit7Cisg
ICAgdW5zaWduZWQgaW5zcGVjdGVkUGFnZUhlaWdodCA9IG1faW5zcGVjdG9yQ29udHJvbGxlci0+
aW5zcGVjdGVkUGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpLT52aXNpYmxlSGVpZ2h0KCk7CisK
KyAgICAvLyBEb24ndCBhbGxvdyB0aGUgYXR0YWNoIGlmIHRoZSB3aW5kb3cgd291bGQgYmUgdG9v
IHNtYWxsIHRvIGFjY29tbW9kYXRlIHRoZSBtaW5pbXVtIGluc3BlY3RvciBoZWlnaHQuCisgICAg
cmV0dXJuIG1pbmltdW1BdHRhY2hlZEhlaWdodCA8PSBpbnNwZWN0ZWRQYWdlSGVpZ2h0ICogbWF4
aW11bUF0dGFjaGVkSGVpZ2h0UmF0aW87Cit9CisKK3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmRDbGll
bnRMb2NhbDo6Y2hhbmdlQXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KQorewor
ICAgIHVuc2lnbmVkIHRvdGFsSGVpZ2h0ID0gbV9mcm9udGVuZFBhZ2UtPm1haW5GcmFtZSgpLT52
aWV3KCktPnZpc2libGVIZWlnaHQoKSArIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdGVk
UGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpLT52aXNpYmxlSGVpZ2h0KCk7CisgICAgdW5zaWdu
ZWQgYXR0YWNoZWRIZWlnaHQgPSBjb25zdHJhaW5lZEF0dGFjaGVkV2luZG93SGVpZ2h0KGhlaWdo
dCwgdG90YWxIZWlnaHQpOworICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+c2V0U2V0dGluZyhp
bnNwZWN0b3JBdHRhY2hlZEhlaWdodE5hbWUsIFN0cmluZzo6bnVtYmVyKGF0dGFjaGVkSGVpZ2h0
KSk7CisgICAgc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQoYXR0YWNoZWRIZWlnaHQpOworfQorCit2
b2lkIEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6Om1vdmVXaW5kb3dCeShmbG9hdCB4LCBm
bG9hdCB5KQoreworICAgIEZsb2F0UmVjdCBmcmFtZVJlY3QgPSBtX2Zyb250ZW5kUGFnZS0+Y2hy
b21lKCktPndpbmRvd1JlY3QoKTsKKyAgICBmcmFtZVJlY3QubW92ZSh4LCB5KTsKKyAgICBtX2Zy
b250ZW5kUGFnZS0+Y2hyb21lKCktPnNldFdpbmRvd1JlY3QoZnJhbWVSZWN0KTsKK30KKwordm9p
ZCBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjpzaG93Q29udGV4dE1lbnUoRXZlbnQqIGV2
ZW50LCBjb25zdCBWZWN0b3I8Q29udGV4dE1lbnVJdGVtKj4mIGl0ZW1zKQoreworICAgIFNjcmlw
dE9iamVjdCB3ZWJJbnNwZWN0b3JPYmo7CisgICAgaWYgKCFTY3JpcHRHbG9iYWxPYmplY3Q6Omdl
dChtX2Zyb250ZW5kU2NyaXB0U3RhdGUsICJXZWJJbnNwZWN0b3IiLCB3ZWJJbnNwZWN0b3JPYmop
KSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIAorICAgIFJlZlB0cjxGcm9udGVuZE1lbnVQcm92aWRlcj4gbWVudVByb3ZpZGVyID0g
RnJvbnRlbmRNZW51UHJvdmlkZXI6OmNyZWF0ZSh0aGlzLCB3ZWJJbnNwZWN0b3JPYmosIGl0ZW1z
KTsKKyAgICBDb250ZXh0TWVudUNvbnRyb2xsZXIqIG1lbnVDb250cm9sbGVyID0gbV9mcm9udGVu
ZFBhZ2UtPmNvbnRleHRNZW51Q29udHJvbGxlcigpOworICAgIG1lbnVDb250cm9sbGVyLT5zaG93
Q29udGV4dE1lbnUoZXZlbnQsIG1lbnVQcm92aWRlcik7CisgICAgbV9tZW51UHJvdmlkZXIgPSBt
ZW51UHJvdmlkZXIuZ2V0KCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2Nh
bDo6c2V0QXR0YWNoZWRXaW5kb3coYm9vbCBhdHRhY2hlZCkKK3sKKyAgICBTY3JpcHRPYmplY3Qg
d2ViSW5zcGVjdG9yT2JqOworICAgIGlmICghU2NyaXB0R2xvYmFsT2JqZWN0OjpnZXQobV9mcm9u
dGVuZFNjcmlwdFN0YXRlLCAiV2ViSW5zcGVjdG9yIiwgd2ViSW5zcGVjdG9yT2JqKSkgeworICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBT
Y3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24od2ViSW5zcGVjdG9yT2JqLCAiZGlzcGF0Y2giKTsg
CisgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoInNldEF0dGFjaGVkV2luZG93Iik7CisgICAg
ZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoYXR0YWNoZWQpOworICAgIGZ1bmN0aW9uLmNhbGwoKTsK
K30KKwordm9pZCBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjpyZXN0b3JlQXR0YWNoZWRX
aW5kb3dIZWlnaHQoKQoreworICAgIHVuc2lnbmVkIGluc3BlY3RlZFBhZ2VIZWlnaHQgPSBtX2lu
c3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RlZFBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+
dmlzaWJsZUhlaWdodCgpOworICAgIFN0cmluZyBhdHRhY2hlZEhlaWdodCA9IG1faW5zcGVjdG9y
Q29udHJvbGxlci0+c2V0dGluZyhpbnNwZWN0b3JBdHRhY2hlZEhlaWdodE5hbWUpOworICAgIGJv
b2wgc3VjY2VzcyA9IHRydWU7CisgICAgaW50IGhlaWdodCA9IGF0dGFjaGVkSGVpZ2h0LnRvSW50
KCZzdWNjZXNzKTsKKyAgICB1bnNpZ25lZCBwcmVmZXJyZWRIZWlnaHQgPSBzdWNjZXNzID8gaGVp
Z2h0IDogZGVmYXVsdEF0dGFjaGVkSGVpZ2h0OworICAgIAorICAgIC8vIFRoaXMgY2FsbCBtaWdo
dCBub3QgZ28gdGhyb3VnaCAoaWYgdGhlIHdpbmRvdyBzdGFydHMgb3V0IGRldGFjaGVkKSwgYnV0
IGlmIHRoZSB3aW5kb3cgaXMgaW5pdGlhbGx5IGNyZWF0ZWQgYXR0YWNoZWQsCisgICAgLy8gSW5z
cGVjdG9yQ29udHJvbGxlcjo6YXR0YWNoV2luZG93IGlzIG5ldmVyIGNhbGxlZCwgc28gd2UgbmVl
ZCB0byBtYWtlIHN1cmUgdG8gc2V0IHRoZSBhdHRhY2hlZFdpbmRvd0hlaWdodC4KKyAgICAvLyBG
SVhNRTogQ2xlYW4gdXAgY29kZSBzbyB3ZSBvbmx5IGhhdmUgdG8gY2FsbCBzZXRBdHRhY2hlZFdp
bmRvd0hlaWdodCBpbiBJbnNwZWN0b3JDb250cm9sbGVyOjphdHRhY2hXaW5kb3cKKyAgICBzZXRB
dHRhY2hlZFdpbmRvd0hlaWdodChjb25zdHJhaW5lZEF0dGFjaGVkV2luZG93SGVpZ2h0KHByZWZl
cnJlZEhlaWdodCwgaW5zcGVjdGVkUGFnZUhlaWdodCkpOworfQorCit1bnNpZ25lZCBJbnNwZWN0
b3JGcm9udGVuZENsaWVudExvY2FsOjpjb25zdHJhaW5lZEF0dGFjaGVkV2luZG93SGVpZ2h0KHVu
c2lnbmVkIHByZWZlcnJlZEhlaWdodCwgdW5zaWduZWQgdG90YWxXaW5kb3dIZWlnaHQpCit7Cisg
ICAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKKyAgICByZXR1cm4gcm91bmRmKG1heChtaW5pbXVtQXR0
YWNoZWRIZWlnaHQsIG1pbjxmbG9hdD4ocHJlZmVycmVkSGVpZ2h0LCB0b3RhbFdpbmRvd0hlaWdo
dCAqIG1heGltdW1BdHRhY2hlZEhlaWdodFJhdGlvKSkpOworfQorICAgIAorfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckZyb250ZW5kQ2xpZW50TG9jYWwuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZy
b250ZW5kQ2xpZW50TG9jYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45
MThjNDc5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJv
bnRlbmRDbGllbnRMb2NhbC5oCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEluc3BlY3RvckZyb250
ZW5kQ2xpZW50TG9jYWxfaAorI2RlZmluZSBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsX2gK
KworI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kQ2xpZW50LmgiCisjaW5jbHVkZSAiU2NyaXB0
U3RhdGUuaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBGcm9udGVuZE1lbnVQcm92aWRlcjsKK2NsYXNzIEluc3BlY3RvckNvbnRy
b2xsZXI7CitjbGFzcyBJbnNwZWN0b3JGcm9udGVuZEhvc3Q7CitjbGFzcyBQYWdlOworCitjbGFz
cyBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsIDogcHVibGljIEluc3BlY3RvckZyb250ZW5k
Q2xpZW50LCBwdWJsaWMgTm9uY29weWFibGUgeworcHVibGljOgorICAgIEluc3BlY3RvckZyb250
ZW5kQ2xpZW50TG9jYWwoSW5zcGVjdG9yQ29udHJvbGxlciosIFBhZ2UqKTsKKyAgICB2aXJ0dWFs
IH5JbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsKCk7CisgICAgCisgICAgdmlydHVhbCB2b2lk
IHdpbmRvd09iamVjdENsZWFyZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZnJvbnRlbmRMb2FkZWQo
KTsKKworICAgIHZpcnR1YWwgdm9pZCBtb3ZlV2luZG93QnkoZmxvYXQgeCwgZmxvYXQgeSk7CisK
KyAgICB2aXJ0dWFsIGJvb2wgY2FuQXR0YWNoV2luZG93KCk7CisgICAgdmlydHVhbCB2b2lkIGNo
YW5nZUF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkKTsKKworICAgIHZpcnR1YWwgdm9pZCBz
aG93Q29udGV4dE1lbnUoRXZlbnQqLCBjb25zdCBWZWN0b3I8Q29udGV4dE1lbnVJdGVtKj4mKTsK
KyAgICAKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QXR0YWNoZWRXaW5kb3dIZWln
aHQodW5zaWduZWQpID0gMDsKKworICAgIHZvaWQgc2V0QXR0YWNoZWRXaW5kb3coYm9vbCk7Cisg
ICAgdm9pZCByZXN0b3JlQXR0YWNoZWRXaW5kb3dIZWlnaHQoKTsKKworcHJpdmF0ZToKKyAgICBz
dGF0aWMgdW5zaWduZWQgY29uc3RyYWluZWRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBw
cmVmZXJyZWRIZWlnaHQsIHVuc2lnbmVkIHRvdGFsV2luZG93SGVpZ2h0KTsKKworICAgIGZyaWVu
ZCBjbGFzcyBGcm9udGVuZE1lbnVQcm92aWRlcjsKKyAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBt
X2luc3BlY3RvckNvbnRyb2xsZXI7CisgICAgUGFnZSogbV9mcm9udGVuZFBhZ2U7CisgICAgU2Ny
aXB0U3RhdGUqIG1fZnJvbnRlbmRTY3JpcHRTdGF0ZTsKKyAgICAvLyBUT0RPKHl1cnlzKTogdGhp
cyByZWYgc2hvdWxkbid0IGJlIG5lZWRlZC4KKyAgICBSZWZQdHI8SW5zcGVjdG9yRnJvbnRlbmRI
b3N0PiBtX2Zyb250ZW5kSG9zdDsKKyAgICBGcm9udGVuZE1lbnVQcm92aWRlciogbV9tZW51UHJv
dmlkZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcCBiL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAKaW5kZXggYzFhMTc2MS4uMjNiZTQ0
YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNw
cAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCkBAIC00
MSw4ICs0MSw3IEBACiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJIaXRUZXN0
UmVzdWx0LmgiCiAjaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCi0jaW5jbHVkZSAi
SW5zcGVjdG9yQ2xpZW50LmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmQuaCIKKyNpbmNs
dWRlICJJbnNwZWN0b3JGcm9udGVuZENsaWVudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvclJlc291
cmNlLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhc3RlYm9hcmQuaCIKQEAgLTU0
LDY1ICs1Myw3NCBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLUluc3BlY3RvckZyb250ZW5kSG9zdDo6SW5zcGVjdG9yRnJvbnRlbmRIb3N0KEluc3BlY3Rv
ckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIsIEluc3BlY3RvckNsaWVudCogY2xpZW50
KQotICAgIDogbV9pbnNwZWN0b3JDb250cm9sbGVyKGluc3BlY3RvckNvbnRyb2xsZXIpCi0gICAg
LCBtX2NsaWVudChjbGllbnQpCitJbnNwZWN0b3JGcm9udGVuZEhvc3Q6Okluc3BlY3RvckZyb250
ZW5kSG9zdChJbnNwZWN0b3JGcm9udGVuZENsaWVudCogY2xpZW50KQorICAgIDogbV9jbGllbnQo
Y2xpZW50KQogewogfQogCiBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6On5JbnNwZWN0b3JGcm9udGVu
ZEhvc3QoKQogewotICAgIGlmIChtX21lbnVQcm92aWRlcikKLSAgICAgICAgbV9tZW51UHJvdmlk
ZXItPmRpc2Nvbm5lY3QoKTsKKyAgICBBU1NFUlQoIW1fY2xpZW50KTsKK30KKwordm9pZCBJbnNw
ZWN0b3JGcm9udGVuZEhvc3Q6OmRpc2Nvbm5lY3RDbGllbnQoKQoreworICAgIG1fY2xpZW50ID0g
MDsKIH0KIAogdm9pZCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OmxvYWRlZCgpCiB7Ci0gICAgaWYg
KG1faW5zcGVjdG9yQ29udHJvbGxlcikKLSAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5z
Y3JpcHRPYmplY3RSZWFkeSgpOworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQt
PmZyb250ZW5kTG9hZGVkKCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmRIb3N0OjphdHRh
Y2goKQogewotICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIpCi0gICAgICAgIG1faW5zcGVj
dG9yQ29udHJvbGxlci0+YXR0YWNoV2luZG93KCk7CisgICAgaWYgKG1fY2xpZW50KQorICAgICAg
ICBtX2NsaWVudC0+YXR0YWNoV2luZG93KCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmRI
b3N0OjpkZXRhY2goKQogewotICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIpCi0gICAgICAg
IG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZGV0YWNoV2luZG93KCk7CisgICAgaWYgKG1fY2xpZW50
KQorICAgICAgICBtX2NsaWVudC0+ZGV0YWNoV2luZG93KCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9y
RnJvbnRlbmRIb3N0OjpjbG9zZVdpbmRvdygpCiB7Ci0gICAgaWYgKG1faW5zcGVjdG9yQ29udHJv
bGxlcikKLSAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5jbG9zZVdpbmRvdygpOworICAg
IGlmIChtX2NsaWVudCkgeworICAgICAgICBtX2NsaWVudC0+Y2xvc2VXaW5kb3coKTsKKyAgICAg
ICAgZGlzY29ubmVjdENsaWVudCgpOyAvLyBEaXNjb25uZWN0IGZyb20gY2xpZW50LgorICAgIH0K
K30KKwordm9pZCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OmJyaW5nVG9Gcm9udCgpCit7CisgICAg
aWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+YnJpbmdUb0Zyb250KCk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yRnJvbnRlbmRIb3N0Ojp3aW5kb3dVbmxvYWRpbmcoKQordm9pZCBJbnNwZWN0
b3JGcm9udGVuZEhvc3Q6Omluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJiBuZXdVUkwp
CiB7Ci0gICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlcikKLSAgICAgICAgbV9pbnNwZWN0b3JD
b250cm9sbGVyLT5jbG9zZSgpOworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQt
Pmluc3BlY3RlZFVSTENoYW5nZWQobmV3VVJMKTsKIH0KIAogYm9vbCBJbnNwZWN0b3JGcm9udGVu
ZEhvc3Q6OmNhbkF0dGFjaFdpbmRvdygpIGNvbnN0CiB7Ci0gICAgaWYgKG1faW5zcGVjdG9yQ29u
dHJvbGxlcikKLSAgICAgICAgcmV0dXJuIG1faW5zcGVjdG9yQ29udHJvbGxlci0+Y2FuQXR0YWNo
V2luZG93KCk7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBtX2NsaWVudCAmJiBtX2Ns
aWVudC0+Y2FuQXR0YWNoV2luZG93KCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmRIb3N0
OjpzZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpCiB7Ci0gICAgaWYgKG1f
aW5zcGVjdG9yQ29udHJvbGxlcikKLSAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5zZXRB
dHRhY2hlZFdpbmRvd0hlaWdodChoZWlnaHQpOworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAg
bV9jbGllbnQtPmNoYW5nZUF0dGFjaGVkV2luZG93SGVpZ2h0KGhlaWdodCk7CiB9CiAKIHZvaWQg
SW5zcGVjdG9yRnJvbnRlbmRIb3N0Ojptb3ZlV2luZG93QnkoZmxvYXQgeCwgZmxvYXQgeSkgY29u
c3QKIHsKLSAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyKQotICAgICAgICBtX2luc3BlY3Rv
ckNvbnRyb2xsZXItPm1vdmVXaW5kb3dCeSh4LCB5KTsKKyAgICBpZiAobV9jbGllbnQpCisgICAg
ICAgIG1fY2xpZW50LT5tb3ZlV2luZG93QnkoeCwgeSk7CiB9CiAKIFN0cmluZyBJbnNwZWN0b3JG
cm9udGVuZEhvc3Q6OmxvY2FsaXplZFN0cmluZ3NVUkwoKQpAQCAtMTYxLDMwICsxNjksOCBAQCB2
b2lkIEluc3BlY3RvckZyb250ZW5kSG9zdDo6Y29weVRleHQoY29uc3QgU3RyaW5nJiB0ZXh0KQog
CiB2b2lkIEluc3BlY3RvckZyb250ZW5kSG9zdDo6c2hvd0NvbnRleHRNZW51KEV2ZW50KiBldmVu
dCwgY29uc3QgVmVjdG9yPENvbnRleHRNZW51SXRlbSo+JiBpdGVtcykKIHsKLSAgICBpZiAoIW1f
aW5zcGVjdG9yQ29udHJvbGxlcikKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghbV9pbnNwZWN0
b3JDb250cm9sbGVyLT53aW5kb3dWaXNpYmxlKCkpCi0gICAgICAgIHJldHVybjsKLQotCi0gICAg
bV9tZW51UHJvdmlkZXIgPSBNZW51UHJvdmlkZXI6OmNyZWF0ZSh0aGlzLCBpdGVtcyk7Ci0gICAg
Q29udGV4dE1lbnVDb250cm9sbGVyKiBtZW51Q29udHJvbGxlciA9IG1faW5zcGVjdG9yQ29udHJv
bGxlci0+bV9wYWdlLT5jb250ZXh0TWVudUNvbnRyb2xsZXIoKTsKLSAgICBtZW51Q29udHJvbGxl
ci0+c2hvd0NvbnRleHRNZW51KGV2ZW50LCBtX21lbnVQcm92aWRlcik7Ci19Ci0KLXZvaWQgSW5z
cGVjdG9yRnJvbnRlbmRIb3N0Ojpjb250ZXh0TWVudUl0ZW1TZWxlY3RlZChDb250ZXh0TWVudUl0
ZW0qIGl0ZW0pCi17Ci0gICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlciAmJiBtX2luc3BlY3Rv
ckNvbnRyb2xsZXItPndpbmRvd1Zpc2libGUoKSkgewotICAgICAgICBpbnQgaXRlbU51bWJlciA9
IGl0ZW0tPmFjdGlvbigpIC0gQ29udGV4dE1lbnVJdGVtQmFzZUN1c3RvbVRhZzsKLSAgICAgICAg
bV9pbnNwZWN0b3JDb250cm9sbGVyLT5tX2Zyb250ZW5kLT5jb250ZXh0TWVudUl0ZW1TZWxlY3Rl
ZChpdGVtTnVtYmVyKTsKLSAgICB9Ci19Ci0KLXZvaWQgSW5zcGVjdG9yRnJvbnRlbmRIb3N0Ojpj
b250ZXh0TWVudUNsZWFyZWQoKQotewotICAgIG1fbWVudVByb3ZpZGVyID0gMDsKLSAgICBpZiAo
bV9pbnNwZWN0b3JDb250cm9sbGVyICYmIG1faW5zcGVjdG9yQ29udHJvbGxlci0+d2luZG93Vmlz
aWJsZSgpKQotICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPm1fZnJvbnRlbmQtPmNvbnRl
eHRNZW51Q2xlYXJlZCgpOworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPnNo
b3dDb250ZXh0TWVudShldmVudCwgaXRlbXMpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuaCBi
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5oCmluZGV4IGNiZTZhOWIu
LmY1YmE5ZDcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5k
SG9zdC5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5oCkBA
IC00MywyNyArNDMsMjYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQ29udGV4dE1lbnVJ
dGVtOwogY2xhc3MgRXZlbnQ7CiBjbGFzcyBJbnNwZWN0b3JDbGllbnQ7CitjbGFzcyBJbnNwZWN0
b3JGcm9udGVuZENsaWVudDsKIGNsYXNzIE5vZGU7CiAKIGNsYXNzIEluc3BlY3RvckZyb250ZW5k
SG9zdCA6IHB1YmxpYyBSZWZDb3VudGVkPEluc3BlY3RvckZyb250ZW5kSG9zdD4KIHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JGcm9udGVuZEhvc3Q+IGNyZWF0ZShJ
bnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyLCBJbnNwZWN0b3JDbGllbnQq
IGNsaWVudCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JGcm9udGVuZEhvc3Q+IGNy
ZWF0ZShJbnNwZWN0b3JGcm9udGVuZENsaWVudCogY2xpZW50KQogICAgIHsKLSAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JGcm9udGVuZEhvc3QoaW5zcGVjdG9yQ29udHJvbGxl
ciwgY2xpZW50KSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9yRnJvbnRl
bmRIb3N0KGNsaWVudCkpOwogICAgIH0KIAogICAgIH5JbnNwZWN0b3JGcm9udGVuZEhvc3QoKTsK
LQotICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIoKSB7IHJldHVy
biBtX2luc3BlY3RvckNvbnRyb2xsZXI7IH0KLQotICAgIHZvaWQgZGlzY29ubmVjdENvbnRyb2xs
ZXIoKSB7IG1faW5zcGVjdG9yQ29udHJvbGxlciA9IDA7IH0KKyAgICB2b2lkIGRpc2Nvbm5lY3RD
bGllbnQoKTsKIAogICAgIHZvaWQgbG9hZGVkKCk7CiAgICAgdm9pZCBhdHRhY2goKTsKICAgICB2
b2lkIGRldGFjaCgpOwogICAgIHZvaWQgY2xvc2VXaW5kb3coKTsKLSAgICB2b2lkIHdpbmRvd1Vu
bG9hZGluZygpOworICAgIHZvaWQgYnJpbmdUb0Zyb250KCk7CisgICAgdm9pZCBpbnNwZWN0ZWRV
UkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYpOwogCiAgICAgYm9vbCBjYW5BdHRhY2hXaW5kb3coKSBj
b25zdDsKICAgICB2b2lkIHNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCk7
CkBAIC04MCw1OSArNzksOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzaG93Q29udGV4dE1lbnUoRXZl
bnQqLCBjb25zdCBWZWN0b3I8Q29udGV4dE1lbnVJdGVtKj4mIGl0ZW1zKTsKIAogcHJpdmF0ZToK
LSAgICBjbGFzcyBNZW51UHJvdmlkZXIgOiBwdWJsaWMgQ29udGV4dE1lbnVQcm92aWRlciB7Ci0g
ICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZW51UHJvdmlkZXI+IGNyZWF0
ZShJbnNwZWN0b3JGcm9udGVuZEhvc3QqIGZyb250ZW5kSG9zdCwgY29uc3QgVmVjdG9yPENvbnRl
eHRNZW51SXRlbSo+JiBpdGVtcykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBNZW51UHJvdmlkZXIoZnJvbnRlbmRIb3N0LCBpdGVtcykpOwotICAgICAgICB9Ci0K
LSAgICAgICAgdmlydHVhbCB+TWVudVByb3ZpZGVyKCkKLSAgICAgICAgewotICAgICAgICAgICAg
Y29udGV4dE1lbnVDbGVhcmVkKCk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGRpc2Nvbm5l
Y3QoKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2Zyb250ZW5kSG9zdCA9IDA7Ci0gICAgICAg
IH0KLQotICAgICAgICB2aXJ0dWFsIHZvaWQgcG9wdWxhdGVDb250ZXh0TWVudShDb250ZXh0TWVu
dSogbWVudSkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X2l0ZW1zLnNpemUoKTsgKytpKQotICAgICAgICAgICAgICAgIG1lbnUtPmFwcGVuZEl0ZW0oKm1f
aXRlbXNbaV0pOwotICAgICAgICB9Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIGNvbnRleHRNZW51
SXRlbVNlbGVjdGVkKENvbnRleHRNZW51SXRlbSogaXRlbSkKLSAgICAgICAgewotICAgICAgICAg
ICAgaWYgKG1fZnJvbnRlbmRIb3N0KQotICAgICAgICAgICAgICAgIG1fZnJvbnRlbmRIb3N0LT5j
b250ZXh0TWVudUl0ZW1TZWxlY3RlZChpdGVtKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZpcnR1
YWwgdm9pZCBjb250ZXh0TWVudUNsZWFyZWQoKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAo
bV9mcm9udGVuZEhvc3QpCi0gICAgICAgICAgICAgICAgbV9mcm9udGVuZEhvc3QtPmNvbnRleHRN
ZW51Q2xlYXJlZCgpOwotICAgICAgICAgICAgZGVsZXRlQWxsVmFsdWVzKG1faXRlbXMpOwotICAg
ICAgICAgICAgbV9pdGVtcy5jbGVhcigpOwotICAgICAgICB9Ci0KLSAgICBwcml2YXRlOgotICAg
ICAgICBNZW51UHJvdmlkZXIoSW5zcGVjdG9yRnJvbnRlbmRIb3N0KiBmcm9udGVuZEhvc3QsICBj
b25zdCBWZWN0b3I8Q29udGV4dE1lbnVJdGVtKj4mIGl0ZW1zKQotICAgICAgICAgICAgOiBtX2Zy
b250ZW5kSG9zdChmcm9udGVuZEhvc3QpCi0gICAgICAgICAgICAsIG1faXRlbXMoaXRlbXMpIHsg
fQotICAgICAgICBJbnNwZWN0b3JGcm9udGVuZEhvc3QqIG1fZnJvbnRlbmRIb3N0OwotICAgICAg
ICBWZWN0b3I8Q29udGV4dE1lbnVJdGVtKj4gbV9pdGVtczsKLSAgICB9OwotCi0gICAgSW5zcGVj
dG9yRnJvbnRlbmRIb3N0KEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIs
IEluc3BlY3RvckNsaWVudCogY2xpZW50KTsKLQotICAgIHZvaWQgY29udGV4dE1lbnVJdGVtU2Vs
ZWN0ZWQoQ29udGV4dE1lbnVJdGVtKik7Ci0gICAgdm9pZCBjb250ZXh0TWVudUNsZWFyZWQoKTsK
LQotICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIG1faW5zcGVjdG9yQ29udHJvbGxlcjsKLSAgICBJ
bnNwZWN0b3JDbGllbnQqIG1fY2xpZW50OwotICAgIFJlZlB0cjxNZW51UHJvdmlkZXI+IG1fbWVu
dVByb3ZpZGVyOworICAgIEluc3BlY3RvckZyb250ZW5kSG9zdChJbnNwZWN0b3JGcm9udGVuZENs
aWVudCogY2xpZW50KTsKKworICAgIEluc3BlY3RvckZyb250ZW5kQ2xpZW50KiBtX2NsaWVudDsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5pZGwgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JGcm9udGVuZEhvc3QuaWRsCmluZGV4IDE1MGU5ZmMuLjBhZWY1YzQgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5pZGwKKysrIGIvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmlkbApAQCAtMzYsNyArMzYsOCBAQCBtb2R1
bGUgY29yZSB7CiAgICAgICAgIHZvaWQgYXR0YWNoKCk7CiAgICAgICAgIHZvaWQgZGV0YWNoKCk7
CiAgICAgICAgIHZvaWQgY2xvc2VXaW5kb3coKTsKLSAgICAgICAgdm9pZCB3aW5kb3dVbmxvYWRp
bmcoKTsKKyAgICAgICAgdm9pZCBicmluZ1RvRnJvbnQoKTsKKyAgICAgICAgdm9pZCBpbnNwZWN0
ZWRVUkxDaGFuZ2VkKGluIERPTVN0cmluZyBuZXdVUkwpOwogCiAgICAgICAgIGJvb2xlYW4gY2Fu
QXR0YWNoV2luZG93KCk7CiAgICAgICAgIHZvaWQgc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQoaW4g
dW5zaWduZWQgbG9uZyBoZWlnaHQpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yUmVzb3VyY2UuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2Uu
Y3BwCmluZGV4IGI2YjYwNTcuLjdhMGI0NmUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvclJlc291cmNlLmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JS
ZXNvdXJjZS5jcHAKQEAgLTIxMywxNSArMjEzLDEyIEBAIHZvaWQgSW5zcGVjdG9yUmVzb3VyY2U6
OnVwZGF0ZVNjcmlwdE9iamVjdChJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQpCiAgICAgICAg
IG1fY2hhbmdlcy5jbGVhckFsbCgpOwogfQogCi12b2lkIEluc3BlY3RvclJlc291cmNlOjpyZWxl
YXNlU2NyaXB0T2JqZWN0KEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCwgYm9vbCBjYWxsUmVt
b3ZlUmVzb3VyY2UpCit2b2lkIEluc3BlY3RvclJlc291cmNlOjpyZWxlYXNlU2NyaXB0T2JqZWN0
KEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCkKIHsKICAgICBtX2NoYW5nZXMuc2V0QWxsKCk7
CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcmVkaXJlY3RzLnNpemUoKTsgKytpKQot
ICAgICAgICBtX3JlZGlyZWN0c1tpXS0+cmVsZWFzZVNjcmlwdE9iamVjdChmcm9udGVuZCwgY2Fs
bFJlbW92ZVJlc291cmNlKTsKLQotICAgIGlmICghY2FsbFJlbW92ZVJlc291cmNlKQotICAgICAg
ICByZXR1cm47CisgICAgICAgIG1fcmVkaXJlY3RzW2ldLT5yZWxlYXNlU2NyaXB0T2JqZWN0KGZy
b250ZW5kKTsKIAogICAgIGZyb250ZW5kLT5yZW1vdmVSZXNvdXJjZShtX2lkZW50aWZpZXIpOwog
fQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2UuaCBiL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlLmgKaW5kZXggZDM0N2U1Yy4uOTc0NmUx
ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2UuaAorKysg
Yi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZS5oCkBAIC03OSw3ICs3OSw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBQYXNzUmVmUHRyPEluc3BlY3RvclJlc291
cmNlPiBhcHBlbmRSZWRpcmVjdCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IEtVUkwm
IHJlZGlyZWN0VVJMKTsKICAgICAgICAgdm9pZCB1cGRhdGVTY3JpcHRPYmplY3QoSW5zcGVjdG9y
RnJvbnRlbmQqIGZyb250ZW5kKTsKLSAgICAgICAgdm9pZCByZWxlYXNlU2NyaXB0T2JqZWN0KElu
c3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCwgYm9vbCBjYWxsUmVtb3ZlUmVzb3VyY2UpOworICAg
ICAgICB2b2lkIHJlbGVhc2VTY3JpcHRPYmplY3QoSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5k
KTsKIAogICAgICAgICB2b2lkIHVwZGF0ZVJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7
CiAgICAgICAgIHZvaWQgdXBkYXRlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckZyb250ZW5k
SG9zdFN0dWIuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yRnJvbnRl
bmRIb3N0U3R1Yi5qcwppbmRleCBlZmYyNTE4Li41NDU2MDY5IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yRnJvbnRlbmRIb3N0U3R1Yi5qcworKysgYi9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yRnJvbnRlbmRIb3N0U3R1Yi5qcwpA
QCAtNDgsNiArNDgsMTEgQEAgV2ViSW5zcGVjdG9yLkluc3BlY3RvckZyb250ZW5kSG9zdFN0dWIu
cHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4gInVua25vd24iOwogICAgIH0sCiAKKyAgICBi
cmluZ1RvRnJvbnQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuX3dpbmRvd1Zpc2li
bGUgPSB0cnVlOworICAgIH0sCisKICAgICBjbG9zZVdpbmRvdzogZnVuY3Rpb24oKQogICAgIHsK
ICAgICAgICAgdGhpcy5fd2luZG93VmlzaWJsZSA9IGZhbHNlOwpAQCAtODcsNyArOTIsNyBAQCBX
ZWJJbnNwZWN0b3IuSW5zcGVjdG9yRnJvbnRlbmRIb3N0U3R1Yi5wcm90b3R5cGUgPSB7CiAgICAg
ICAgIHJldHVybiAiIjsKICAgICB9LAogCi0gICAgd2luZG93VW5sb2FkaW5nOiBmdW5jdGlvbigp
CisgICAgaW5zcGVjdGVkVVJMQ2hhbmdlZDogZnVuY3Rpb24odXJsKQogICAgIHsKICAgICB9LAog
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzIGIv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcwppbmRleCBlYjQwYTI4Li4x
ZDJjNDZkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9y
LmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKQEAgLTQ3
OCw3ICs0NzgsNiBAQCBXZWJJbnNwZWN0b3IubG9hZGVkID0gZnVuY3Rpb24oKQogCiAgICAgdGhp
cy5hZGRNYWluRXZlbnRMaXN0ZW5lcnMoZG9jdW1lbnQpOwogCi0gICAgd2luZG93LmFkZEV2ZW50
TGlzdGVuZXIoInVubG9hZCIsIHRoaXMud2luZG93VW5sb2FkLmJpbmQodGhpcyksIHRydWUpOwog
ICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLCB0aGlzLndpbmRvd1Jlc2l6ZS5i
aW5kKHRoaXMpLCB0cnVlKTsKIAogICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImZvY3Vz
IiwgdGhpcy5mb2N1c0NoYW5nZWQuYmluZCh0aGlzKSwgdHJ1ZSk7CkBAIC01NjIsMTEgKzU2MSw2
IEBAIFdlYkluc3BlY3Rvci5kaXNwYXRjaCA9IGZ1bmN0aW9uKCkgewogICAgIHNldFRpbWVvdXQo
ZGVsYXlEaXNwYXRjaCwgMCk7CiB9CiAKLVdlYkluc3BlY3Rvci53aW5kb3dVbmxvYWQgPSBmdW5j
dGlvbihldmVudCkKLXsKLSAgICBJbnNwZWN0b3JGcm9udGVuZEhvc3Qud2luZG93VW5sb2FkaW5n
KCk7Ci19Ci0KIFdlYkluc3BlY3Rvci53aW5kb3dSZXNpemUgPSBmdW5jdGlvbihldmVudCkKIHsK
ICAgICBpZiAodGhpcy5jdXJyZW50UGFuZWwpCkBAIC02MDQsOSArNTk4LDE3IEBAIFdlYkluc3Bl
Y3Rvci5zZXRBdHRhY2hlZFdpbmRvdyA9IGZ1bmN0aW9uKGF0dGFjaGVkKQogCiBXZWJJbnNwZWN0
b3IuY2xvc2UgPSBmdW5jdGlvbihldmVudCkKIHsKKyAgICBpZiAodGhpcy5faXNDbG9zaW5nKQor
ICAgICAgICByZXR1cm47CisgICAgdGhpcy5faXNDbG9zaW5nID0gdHJ1ZTsKICAgICBJbnNwZWN0
b3JGcm9udGVuZEhvc3QuY2xvc2VXaW5kb3coKTsKIH0KIAorV2ViSW5zcGVjdG9yLmluc3BlY3Rl
ZFBhZ2VEZXN0cm95ZWQgPSBmdW5jdGlvbigpCit7CisgICAgV2ViSW5zcGVjdG9yLmNsb3NlKCk7
Cit9CisKIFdlYkluc3BlY3Rvci5kb2N1bWVudE1vdXNlT3ZlciA9IGZ1bmN0aW9uKGV2ZW50KQog
ewogICAgIGlmIChldmVudC50YXJnZXQudGFnTmFtZSAhPT0gIkEiKQpAQCAtMTMyMSw2ICsxMzIz
LDE2IEBAIFdlYkluc3BlY3Rvci5yZXNldCA9IGZ1bmN0aW9uKCkKICAgICB0aGlzLmNvbnNvbGUu
Y2xlYXJNZXNzYWdlcygpOwogfQogCitXZWJJbnNwZWN0b3IuYnJpbmdUb0Zyb250ID0gZnVuY3Rp
b24oKQoreworICAgIEluc3BlY3RvckZyb250ZW5kSG9zdC5icmluZ1RvRnJvbnQoKTsKK30KKwor
V2ViSW5zcGVjdG9yLmluc3BlY3RlZFVSTENoYW5nZWQgPSBmdW5jdGlvbih1cmwpCit7CisgICAg
SW5zcGVjdG9yRnJvbnRlbmRIb3N0Lmluc3BlY3RlZFVSTENoYW5nZWQodXJsKTsKK30KKwogV2Vi
SW5zcGVjdG9yLnJlc291cmNlVVJMQ2hhbmdlZCA9IGZ1bmN0aW9uKHJlc291cmNlLCBvbGRVUkwp
CiB7CiAgICAgZGVsZXRlIHRoaXMucmVzb3VyY2VVUkxNYXBbb2xkVVJMXTsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oIGIvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGll
bnRzLmgKaW5kZXggYTI2NzM3NC4uOGJjZTUyOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9sb2FkZXIv
RW1wdHlDbGllbnRzLmgKKysrIGIvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgKQEAgLTQ3
MSwyOSArNDcxLDE0IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5FbXB0eUluc3BlY3RvckNsaWVu
dCgpIHsgfQogCiAgICAgdmlydHVhbCB2b2lkIGluc3BlY3RvckRlc3Ryb3llZCgpIHsgfQotCi0g
ICAgdmlydHVhbCBQYWdlKiBjcmVhdGVQYWdlKCkgeyByZXR1cm4gMDsgfTsKLQotICAgIHZpcnR1
YWwgU3RyaW5nIGxvY2FsaXplZFN0cmluZ3NVUkwoKSB7IHJldHVybiBTdHJpbmcoKTsgfQotCi0g
ICAgdmlydHVhbCBTdHJpbmcgaGlkZGVuUGFuZWxzKCkgeyByZXR1cm4gU3RyaW5nKCk7IH0KLQot
ICAgIHZpcnR1YWwgdm9pZCBzaG93V2luZG93KCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGNsb3Nl
V2luZG93KCkgeyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoV2luZG93KCkgeyB9Ci0gICAg
dmlydHVhbCB2b2lkIGRldGFjaFdpbmRvdygpIHsgfQotCi0gICAgdmlydHVhbCB2b2lkIHNldEF0
dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkKSB7IH0KKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQg
b3Blbkluc3BlY3RvckZyb250ZW5kKEluc3BlY3RvckNvbnRyb2xsZXIqKSB7IH0KIAogICAgIHZp
cnR1YWwgdm9pZCBoaWdobGlnaHQoTm9kZSopIHsgfQogICAgIHZpcnR1YWwgdm9pZCBoaWRlSGln
aGxpZ2h0KCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGluc3BlY3RlZFVSTENoYW5nZWQoY29uc3Qg
U3RyaW5nJikgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgcG9wdWxhdGVTZXR0aW5nKGNvbnN0IFN0
cmluZyYsIFN0cmluZyopIHsgfQogICAgIHZpcnR1YWwgdm9pZCBzdG9yZVNldHRpbmcoY29uc3Qg
U3RyaW5nJiwgY29uc3QgU3RyaW5nJikgeyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgaW5zcGVjdG9y
V2luZG93T2JqZWN0Q2xlYXJlZCgpIHsgfQogfTsKIAogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9s
b2FkZXIvRnJhbWVMb2FkZXIuY3BwIGIvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCmlu
ZGV4IDU0Yzc5NzIuLmUxMGI1OGYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9h
ZGVyLmNwcAorKysgYi9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKQEAgLTM5NDQsOCAr
Mzk0NCw2IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmRpc3BhdGNoRGlkQ2xlYXJXaW5kb3dPYmplY3RJ
bldvcmxkKERPTVdyYXBwZXJXb3JsZCogd29ybGQpCiAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX2Zy
YW1lLT5wYWdlKCkpIHsKICAgICAgICAgaWYgKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3Rv
ciA9IHBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKSkKICAgICAgICAgICAgIGluc3BlY3Rvci0+
aW5zcGVjdGVkV2luZG93U2NyaXB0T2JqZWN0Q2xlYXJlZChtX2ZyYW1lKTsKLSAgICAgICAgaWYg
KEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvciA9IHBhZ2UtPnBhcmVudEluc3BlY3RvckNv
bnRyb2xsZXIoKSkKLSAgICAgICAgICAgIGluc3BlY3Rvci0+d2luZG93U2NyaXB0T2JqZWN0QXZh
aWxhYmxlKCk7CiAgICAgfQogI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvUGFn
ZS5jcHAgYi9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKaW5kZXggN2QxZTYyNC4uZDY2ZTQ5NyAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCisrKyBiL1dlYkNvcmUvcGFnZS9QYWdlLmNw
cApAQCAtMTM4LDkgKzEzOCw2IEBAIFBhZ2U6OlBhZ2UoQ2hyb21lQ2xpZW50KiBjaHJvbWVDbGll
bnQsIENvbnRleHRNZW51Q2xpZW50KiBjb250ZXh0TWVudUNsaWVudCwgRWRpCiAgICAgLCBtX2Fy
ZU1lbW9yeUNhY2hlQ2xpZW50Q2FsbHNFbmFibGVkKHRydWUpCiAgICAgLCBtX21lZGlhVm9sdW1l
KDEpCiAgICAgLCBtX2phdmFTY3JpcHRVUkxzQXJlQWxsb3dlZCh0cnVlKQotI2lmIEVOQUJMRShJ
TlNQRUNUT1IpCi0gICAgLCBtX3BhcmVudEluc3BlY3RvckNvbnRyb2xsZXIoMCkKLSNlbmRpZgog
ICAgICwgbV9kaWRMb2FkVXNlclN0eWxlU2hlZXQoZmFsc2UpCiAgICAgLCBtX3VzZXJTdHlsZVNo
ZWV0TW9kaWZpY2F0aW9uVGltZSgwKQogICAgICwgbV9ncm91cCgwKQpAQCAtMTk2LDggKzE5Myw2
IEBAIFBhZ2U6On5QYWdlKCkKIAogICAgIG1fZWRpdG9yQ2xpZW50LT5wYWdlRGVzdHJveWVkKCk7
CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICBpZiAobV9wYXJlbnRJbnNwZWN0b3JDb250cm9s
bGVyKQotICAgICAgICBtX3BhcmVudEluc3BlY3RvckNvbnRyb2xsZXItPnBhZ2VEZXN0cm95ZWQo
KTsKICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RlZFBhZ2VEZXN0cm95ZWQoKTsK
ICNlbmRpZgogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvUGFnZS5oIGIvV2ViQ29yZS9wYWdl
L1BhZ2UuaAppbmRleCBmNjk4Mjg3Li45NGU2ZGQ1IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2Uv
UGFnZS5oCisrKyBiL1dlYkNvcmUvcGFnZS9QYWdlLmgKQEAgLTE0OSwxMSArMTQ5LDYgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogI2VuZGlmCiAgICAgICAgIFNldHRpbmdzKiBzZXR0aW5ncygpIGNv
bnN0IHsgcmV0dXJuIG1fc2V0dGluZ3MuZ2V0KCk7IH0KICAgICAgICAgUHJvZ3Jlc3NUcmFja2Vy
KiBwcm9ncmVzcygpIGNvbnN0IHsgcmV0dXJuIG1fcHJvZ3Jlc3MuZ2V0KCk7IH0KLQotI2lmIEVO
QUJMRShJTlNQRUNUT1IpCi0gICAgICAgIHZvaWQgc2V0UGFyZW50SW5zcGVjdG9yQ29udHJvbGxl
cihJbnNwZWN0b3JDb250cm9sbGVyKiBjb250cm9sbGVyKSB7IG1fcGFyZW50SW5zcGVjdG9yQ29u
dHJvbGxlciA9IGNvbnRyb2xsZXI7IH0KLSAgICAgICAgSW5zcGVjdG9yQ29udHJvbGxlciogcGFy
ZW50SW5zcGVjdG9yQ29udHJvbGxlcigpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50SW5zcGVjdG9y
Q29udHJvbGxlcjsgfQotI2VuZGlmCiAgICAgICAgIAogICAgICAgICB2b2lkIHNldFRhYktleUN5
Y2xlc1Rocm91Z2hFbGVtZW50cyhib29sIGIpIHsgbV90YWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVu
dHMgPSBiOyB9CiAgICAgICAgIGJvb2wgdGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKCkgY29u
c3QgeyByZXR1cm4gbV90YWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHM7IH0KQEAgLTI4NiwxMCAr
MjgxLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIGJvb2wgbV9qYXZhU2NyaXB0
VVJMc0FyZUFsbG93ZWQ7CiAKLSNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgICAgICBJbnNwZWN0
b3JDb250cm9sbGVyKiBtX3BhcmVudEluc3BlY3RvckNvbnRyb2xsZXI7Ci0jZW5kaWYKLQogICAg
ICAgICBTdHJpbmcgbV91c2VyU3R5bGVTaGVldFBhdGg7CiAgICAgICAgIG11dGFibGUgU3RyaW5n
IG1fdXNlclN0eWxlU2hlZXQ7CiAgICAgICAgIG11dGFibGUgYm9vbCBtX2RpZExvYWRVc2VyU3R5
bGVTaGVldDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1lbnUuY3BwIGIv
V2ViQ29yZS9wbGF0Zm9ybS9Db250ZXh0TWVudS5jcHAKaW5kZXggMjgzYWE1Ni4uMDAyMmE0NyAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9Db250ZXh0TWVudS5jcHAKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9Db250ZXh0TWVudS5jcHAKQEAgLTM1OSw2ICszNTksOSBAQCB2b2lkIENvbnRl
eHRNZW51Ojpwb3B1bGF0ZSgpCiAgICAgICAgICAgICAgICAgYXBwZW5kSXRlbShTcGVlY2hNZW51
SXRlbSk7CiAjZW5kaWYgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICB9IGVsc2UgeworI2lm
IEVOQUJMRShJTlNQRUNUT1IpCisgICAgICAgICAgICAgICAgaWYgKCEoZnJhbWUtPnBhZ2UoKSAm
JiBmcmFtZS0+cGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmhhc0luc3BlY3RvckZyb250
ZW5kQ2xpZW50KCkpKSB7CisjZW5kaWYKICNpZiBQTEFURk9STShHVEspCiAgICAgICAgICAgICAg
ICAgYXBwZW5kSXRlbShCYWNrSXRlbSk7CiAgICAgICAgICAgICAgICAgYXBwZW5kSXRlbShGb3J3
YXJkSXRlbSk7CkBAIC0zNzgsNiArMzgxLDkgQEAgdm9pZCBDb250ZXh0TWVudTo6cG9wdWxhdGUo
KQogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgYXBwZW5kSXRlbShS
ZWxvYWRJdGVtKTsKICNlbmRpZgorI2lmIEVOQUJMRShJTlNQRUNUT1IpCisgICAgICAgICAgICAg
ICAgfQorI2VuZGlmCiAKICAgICAgICAgICAgICAgICBpZiAoZnJhbWUtPnBhZ2UoKSAmJiBmcmFt
ZSAhPSBmcmFtZS0+cGFnZSgpLT5tYWluRnJhbWUoKSkKICAgICAgICAgICAgICAgICAgICAgYXBw
ZW5kSXRlbShPcGVuRnJhbWVJdGVtKTsKQEAgLTU1MCw3ICs1NTYsNiBAQCB2b2lkIENvbnRleHRN
ZW51OjphZGRJbnNwZWN0RWxlbWVudEl0ZW0oKQogICAgICAgICByZXR1cm47CiAKICAgICBDb250
ZXh0TWVudUl0ZW0gSW5zcGVjdEVsZW1lbnRJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRl
bVRhZ0luc3BlY3RFbGVtZW50LCBjb250ZXh0TWVudUl0ZW1UYWdJbnNwZWN0RWxlbWVudCgpKTsK
LSAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCkpOwogICAgIGFwcGVuZEl0ZW0oSW5zcGVj
dEVsZW1lbnRJdGVtKTsKIH0KICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQpkaWZmIC0tZ2l0
IGEvV2ViS2l0L0NoYW5nZUxvZyBiL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggZWVmMDhjYy4uN2Ex
MmNiNSAxMDA2NDQKLS0tIGEvV2ViS2l0L0NoYW5nZUxvZworKysgYi9XZWJLaXQvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTcgQEAKKzIwMTAtMDMtMTYgIFl1cnkgU2VtaWtoYXRza3kgIDx5dXJ5c0Bj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgUGF2ZWwgRmVsZG1hbi4KKworICAg
ICAgICBJbnRyb2R1Y2UgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQgdGhhdCBwcm92aWRlcyBJbnNw
ZWN0b3JGcm9udGVuZCB3aXRoIGFuIGludGVyZmFjZSB0byB0aGUgZW1iZWRkZXIuIEluc3BlY3Rv
ckNsaWVudCBub3cgc2VydmVzIGFzIGEgZGVsZWdhdGUgZm9yIEluc3BlY3RvckNvbnRyb2xsZXIg
YW5kIGRvZXMgbm90IGNvbnRhaW4gbWV0aG9kcyBmb3IgbWFuYWdpbmcgaW5zcGVjdG9yIGZyb250
ZW5kIHdpbmRvdy4gVGhhdCBhbGxvd3MgdG8gY3JlYXRlIHJlbW90ZSBJbnNwZWN0b3JGcm9udGVu
ZEhvc3QuCisKKyAgICAgICAgSW50cm9kdWNlIEluc3BlY3RvckZyb250ZW5kQ2xpZW50IHRoYXQg
d291bGQgcHJvdmlkZSBJbnNwZWN0b3JGcm9udGVuZCB3aXRoIGFuIGludGVyZmFjZSB0byB0aGUg
ZW1iZWRkZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTM1MDM2CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
ZWZsL1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudEVmbC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JDbGllbnRFZmw6Om9wZW5JbnNwZWN0b3JGcm9udGVuZCk6CisgICAgICAg
ICogZWZsL1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudEVmbC5oOgorCiAyMDEwLTAzLTEz
ICBMZWFuZHJvIFBlcmVpcmEgIDxsZWFuZHJvQHByb2Z1c2lvbi5tb2JpPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuLgpkaWZmIC0tZ2l0IGEvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggYzk4
NTE4Mi4uZmQ0NWQyMSAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysg
Yi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkgQEAKKzIwMTAtMDMtMTYg
IFl1cnkgU2VtaWtoYXRza3kgPHl1cnlzQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdl
ZCBieSBQYXZlbCBGZWxkbWFuLgorCisgICAgICAgIEludHJvZHVjZSBJbnNwZWN0b3JGcm9udGVu
ZENsaWVudCB0aGF0IHByb3ZpZGVzIEluc3BlY3RvckZyb250ZW5kIHdpdGggYW4gaW50ZXJmYWNl
IHRvIHRoZSBlbWJlZGRlci4gSW5zcGVjdG9yQ2xpZW50IG5vdyBzZXJ2ZXMgYXMgYSBkZWxlZ2F0
ZSBmb3IgSW5zcGVjdG9yQ29udHJvbGxlciBhbmQgZG9lcyBub3QgY29udGFpbiBtZXRob2RzIGZv
ciBtYW5hZ2luZyBpbnNwZWN0b3IgZnJvbnRlbmQgd2luZG93LiBUaGF0IGFsbG93cyB0byBjcmVh
dGUgcmVtb3RlIEluc3BlY3RvckZyb250ZW5kSG9zdC4KKworICAgICAgICBJbnRyb2R1Y2UgSW5z
cGVjdG9yRnJvbnRlbmRDbGllbnQgdGhhdCB3b3VsZCBwcm92aWRlIEluc3BlY3RvckZyb250ZW5k
IHdpdGggYW4gaW50ZXJmYWNlIHRvIHRoZSBlbWJlZGRlcgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzUwMzYKKworICAgICAgICAqIHNyYy9JbnNwZWN0
b3JDbGllbnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6SW5zcGVjdG9yQ2xpZW50SW1wbDo6
b3Blbkluc3BlY3RvckZyb250ZW5kKToKKyAgICAgICAgKiBzcmMvSW5zcGVjdG9yQ2xpZW50SW1w
bC5oOgorICAgICAgICAqIHNyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjphdHRhY2gpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJEZXZUb29sc0FnZW50SW1wbDo6ZGlkQ29tbWl0UHJvdmlzaW9uYWxMb2FkKToKKyAgICAgICAg
KFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudEltcGw6OmNyZWF0ZUluc3BlY3RvckZyb250ZW5kUHJv
eHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6c2V0SW5zcGVjdG9y
RnJvbnRlbmRQcm94eVRvSW5zcGVjdG9yQ29udHJvbGxlcik6CisgICAgICAgICogc3JjL1dlYkRl
dlRvb2xzQWdlbnRJbXBsLmg6CisgICAgICAgICogc3JjL1dlYkRldlRvb2xzRnJvbnRlbmRJbXBs
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNGcm9udGVuZEltcGw6OldlYkRldlRv
b2xzRnJvbnRlbmRJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNGcm9udGVuZElt
cGw6OmpzQnJpbmdUb0Zyb250KToKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNGcm9udGVu
ZEltcGw6OmpzSW5zcGVjdGVkVVJMQ2hhbmdlZCk6CisgICAgICAgICogc3JjL1dlYkRldlRvb2xz
RnJvbnRlbmRJbXBsLmg6CisgICAgICAgICogc3JjL2pzL0luamVjdERpc3BhdGNoLmpzOgorICAg
ICAgICAoY2xvc2UpOgorCiAyMDEwLTAzLTE2ICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIE5vdCByZXZpZXdlZDogY2hyb21pdW0gdGVzdHMgZml4Lgpk
aWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9JbnNwZWN0b3JDbGllbnRJbXBsLmNwcCBi
L1dlYktpdC9jaHJvbWl1bS9zcmMvSW5zcGVjdG9yQ2xpZW50SW1wbC5jcHAKaW5kZXggNTQ1NTBk
MS4uZjY5ZWY3MiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9JbnNwZWN0b3JDbGll
bnRJbXBsLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0luc3BlY3RvckNsaWVudEltcGwu
Y3BwCkBAIC02Myw0NiArNjMsOCBAQCB2b2lkIEluc3BlY3RvckNsaWVudEltcGw6Omluc3BlY3Rv
ckRlc3Ryb3llZCgpCiAgICAgLy8gT3VyIGxpZmV0aW1lIGlzIGJvdW5kIHRvIHRoZSBXZWJWaWV3
SW1wbC4KIH0KIAotUGFnZSogSW5zcGVjdG9yQ2xpZW50SW1wbDo6Y3JlYXRlUGFnZSgpCit2b2lk
IEluc3BlY3RvckNsaWVudEltcGw6Om9wZW5JbnNwZWN0b3JGcm9udGVuZChJbnNwZWN0b3JDb250
cm9sbGVyKikKIHsKLSAgICAvLyBUaGlzIG1ldGhvZCBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIGlu
IENocm9tZSBhcyBpbnNwZWN0b3IgZnJvbnQtZW5kIGxpdmVzCi0gICAgLy8gaW4gYSBzZXBhcmF0
ZSBwcm9jZXNzLgotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAwOwotfQot
Ci12b2lkIEluc3BlY3RvckNsaWVudEltcGw6OnNob3dXaW5kb3coKQotewotICAgIEFTU0VSVCht
X2luc3BlY3RlZFdlYlZpZXctPmRldlRvb2xzQWdlbnRQcml2YXRlKCkpOwotICAgIG1faW5zcGVj
dGVkV2ViVmlldy0+cGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnNldFdpbmRvd1Zpc2li
bGUodHJ1ZSk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ2xpZW50SW1wbDo6Y2xvc2VXaW5kb3coKQot
ewotICAgIGlmIChtX2luc3BlY3RlZFdlYlZpZXctPnBhZ2UoKSkKLSAgICAgICAgbV9pbnNwZWN0
ZWRXZWJWaWV3LT5wYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0V2luZG93VmlzaWJs
ZShmYWxzZSk7Ci19Ci0KLWJvb2wgSW5zcGVjdG9yQ2xpZW50SW1wbDo6d2luZG93VmlzaWJsZSgp
Ci17Ci0gICAgQVNTRVJUKG1faW5zcGVjdGVkV2ViVmlldy0+ZGV2VG9vbHNBZ2VudFByaXZhdGUo
KSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEluc3BlY3RvckNsaWVudEltcGw6OmF0
dGFjaFdpbmRvdygpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzCi19Ci0KLXZvaWQg
SW5zcGVjdG9yQ2xpZW50SW1wbDo6ZGV0YWNoV2luZG93KCkKLXsKLSAgICAvLyBGSVhNRTogSW1w
bGVtZW50IHRoaXMKLX0KLQotdm9pZCBJbnNwZWN0b3JDbGllbnRJbXBsOjpzZXRBdHRhY2hlZFdp
bmRvd0hlaWdodCh1bnNpZ25lZCBpbnQgaGVpZ2h0KQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQgdGhpcwotICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKIHN0YXRpYyB2b2lkIGludmFsaWRh
dGVOb2RlQm91bmRpbmdSZWN0KFdlYlZpZXdJbXBsKiB3ZWJWaWV3KQpAQCAtMTMwLDIzICs5Miw2
IEBAIHZvaWQgSW5zcGVjdG9yQ2xpZW50SW1wbDo6aGlkZUhpZ2hsaWdodCgpCiAgICAgaW52YWxp
ZGF0ZU5vZGVCb3VuZGluZ1JlY3QobV9pbnNwZWN0ZWRXZWJWaWV3KTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JDbGllbnRJbXBsOjppbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYgbmV3VVJM
KQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcwotfQotCi1TdHJpbmcgSW5zcGVjdG9y
Q2xpZW50SW1wbDo6bG9jYWxpemVkU3RyaW5nc1VSTCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBJbnNwZWN0b3JDbGllbnRJbXBs
OjpoaWRkZW5QYW5lbHMoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuICIi
OwotfQotCiB2b2lkIEluc3BlY3RvckNsaWVudEltcGw6OnBvcHVsYXRlU2V0dGluZyhjb25zdCBT
dHJpbmcmIGtleSwgU3RyaW5nKiB2YWx1ZSkKIHsKICAgICBsb2FkU2V0dGluZ3MoKTsKQEAgLTE2
MSwxMSArMTA2LDYgQEAgdm9pZCBJbnNwZWN0b3JDbGllbnRJbXBsOjpzdG9yZVNldHRpbmcoY29u
c3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgc2F2ZVNldHRpbmdzKCk7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ2xpZW50SW1wbDo6aW5zcGVjdG9yV2luZG93T2JqZWN0Q2xl
YXJlZCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQogdm9pZCBJbnNwZWN0b3JDbGll
bnRJbXBsOjpsb2FkU2V0dGluZ3MoKQogewogICAgIGlmIChtX3NldHRpbmdzKQpkaWZmIC0tZ2l0
IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9JbnNwZWN0b3JDbGllbnRJbXBsLmggYi9XZWJLaXQvY2hy
b21pdW0vc3JjL0luc3BlY3RvckNsaWVudEltcGwuaAppbmRleCA2ZjdmOGIxLi5jY2JjZWY3IDEw
MDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL0luc3BlY3RvckNsaWVudEltcGwuaAorKysg
Yi9XZWJLaXQvY2hyb21pdW0vc3JjL0luc3BlY3RvckNsaWVudEltcGwuaApAQCAtNDUsMjUgKzQ1
LDE1IEBAIHB1YmxpYzoKIAogICAgIC8vIEluc3BlY3RvckNsaWVudCBtZXRob2RzOgogICAgIHZp
cnR1YWwgdm9pZCBpbnNwZWN0b3JEZXN0cm95ZWQoKTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlBh
Z2UqIGNyZWF0ZVBhZ2UoKTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlN0cmluZyBsb2NhbGl6ZWRT
dHJpbmdzVVJMKCk7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpTdHJpbmcgaGlkZGVuUGFuZWxzKCk7
Ci0gICAgdmlydHVhbCB2b2lkIHNob3dXaW5kb3coKTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xvc2VX
aW5kb3coKTsKLSAgICB2aXJ0dWFsIGJvb2wgd2luZG93VmlzaWJsZSgpOwotICAgIHZpcnR1YWwg
dm9pZCBhdHRhY2hXaW5kb3coKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoV2luZG93KCk7Ci0g
ICAgdmlydHVhbCB2b2lkIHNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCk7
CisgICAgdmlydHVhbCB2b2lkIG9wZW5JbnNwZWN0b3JGcm9udGVuZChXZWJDb3JlOjpJbnNwZWN0
b3JDb250cm9sbGVyKik7CiAgICAgdmlydHVhbCB2b2lkIGhpZ2hsaWdodChXZWJDb3JlOjpOb2Rl
Kik7CiAgICAgdmlydHVhbCB2b2lkIGhpZGVIaWdobGlnaHQoKTsKLSAgICB2aXJ0dWFsIHZvaWQg
aW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpTdHJpbmcmIG5ld1VSTCk7CiAgICAg
dmlydHVhbCB2b2lkIHBvcHVsYXRlU2V0dGluZygKICAgICAgICAgY29uc3QgV2ViQ29yZTo6U3Ry
aW5nJiBrZXksCiAgICAgICAgIFdlYkNvcmU6OlN0cmluZyogdmFsdWUpOwogICAgIHZpcnR1YWwg
dm9pZCBzdG9yZVNldHRpbmcoCiAgICAgICAgIGNvbnN0IFdlYkNvcmU6OlN0cmluZyYga2V5LAog
ICAgICAgICBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIHZhbHVlKTsKLSAgICB2aXJ0dWFsIHZvaWQg
aW5zcGVjdG9yV2luZG93T2JqZWN0Q2xlYXJlZCgpOwogCiBwcml2YXRlOgogICAgIHZvaWQgbG9h
ZFNldHRpbmdzKCk7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xz
QWdlbnRJbXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwu
Y3BwCmluZGV4IGFmNTA2MmEuLjIxZjMxZjQgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
RGV2VG9vbHNBZ2VudEltcGwuY3BwCkBAIC0xNjksNyArMTY5LDcgQEAgdm9pZCBXZWJEZXZUb29s
c0FnZW50SW1wbDo6YXR0YWNoKCkKICAgICAgICAgbmV3IERlYnVnZ2VyQWdlbnRJbXBsKG1fd2Vi
Vmlld0ltcGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2RlYnVnZ2VyQWdlbnRE
ZWxlZ2F0ZVN0dWIuZ2V0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzKSk7
Ci0gICAgcmVzZXRJbnNwZWN0b3JGcm9udGVuZFByb3h5KCk7CisgICAgY3JlYXRlSW5zcGVjdG9y
RnJvbnRlbmRQcm94eSgpOwogCiAgICAgLy8gQWxsb3cgY29udHJvbGxlciB0byBzZW5kIG1lc3Nh
Z2VzIHRvIHRoZSBmcm9udGVuZC4KICAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBpYyA9IGluc3Bl
Y3RvckNvbnRyb2xsZXIoKTsKQEAgLTE4NSw3ICsxODUsNyBAQCB2b2lkIFdlYkRldlRvb2xzQWdl
bnRJbXBsOjphdHRhY2goKQogICAgICAgICB9CiAgICAgfQogCi0gICAgaWMtPnNldFdpbmRvd1Zp
c2libGUodHJ1ZSwgZmFsc2UpOworICAgIHNldEluc3BlY3RvckZyb250ZW5kUHJveHlUb0luc3Bl
Y3RvckNvbnRyb2xsZXIoKTsKICAgICBtX2F0dGFjaGVkID0gdHJ1ZTsKIH0KIApAQCAtMjE2LDcg
KzIxNiw2IEBAIHZvaWQgV2ViRGV2VG9vbHNBZ2VudEltcGw6OmRpZENvbW1pdFByb3Zpc2lvbmFs
TG9hZChXZWJGcmFtZUltcGwqIHdlYmZyYW1lLCBib29sCiAgICAgICAgIGRzLT51bnJlYWNoYWJs
ZVVSTCgpIDoKICAgICAgICAgcmVxdWVzdC51cmwoKTsKICAgICBpZiAoIXdlYmZyYW1lLT5wYXJl
bnQoKSkgewotICAgICAgICByZXNldEluc3BlY3RvckZyb250ZW5kUHJveHkoKTsKICAgICAgICAg
bV90b29sc0FnZW50RGVsZWdhdGVTdHViLT5mcmFtZU5hdmlnYXRlKFdlYkNvcmU6OktVUkwodXJs
KS5zdHJpbmcoKSk7CiAgICAgICAgIFNldEFwdUFnZW50RW5hYmxlZEluVXRpbGl0eUNvbnRleHQo
bV91dGlsaXR5Q29udGV4dCwgbV9hcHVBZ2VudEVuYWJsZWQpOwogICAgIH0KQEAgLTM1Nyw3ICsz
NTYsNyBAQCB2ODo6TG9jYWw8djg6Ok9iamVjdD4gV2ViRGV2VG9vbHNBZ2VudEltcGw6OmNyZWF0
ZUluc3BlY3RvckJhY2tlbmRWOFdyYXBwZXIoKQogICAgIHJldHVybiBpbnN0YW5jZTsKIH0KIAot
dm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6cmVzZXRJbnNwZWN0b3JGcm9udGVuZFByb3h5KCkK
K3ZvaWQgV2ViRGV2VG9vbHNBZ2VudEltcGw6OmNyZWF0ZUluc3BlY3RvckZyb250ZW5kUHJveHko
KQogewogICAgIGRpc3Bvc2VVdGlsaXR5Q29udGV4dCgpOwogICAgIG1fdXRpbGl0eUNvbnRleHQg
PSB2ODo6Q29udGV4dDo6TmV3KCk7CkBAIC0zNjgsOCArMzY3LDE2IEBAIHZvaWQgV2ViRGV2VG9v
bHNBZ2VudEltcGw6OnJlc2V0SW5zcGVjdG9yRnJvbnRlbmRQcm94eSgpCiAgICAgdjg6OkNvbnRl
eHQ6OlNjb3BlIGNvbnRleHRTY29wZShtX3V0aWxpdHlDb250ZXh0KTsKICAgICBTY3JpcHRTdGF0
ZSogc3RhdGUgPSBTY3JpcHRTdGF0ZTo6Zm9yQ29udGV4dCgKICAgICAgICAgdjg6OkxvY2FsPHY4
OjpDb250ZXh0Pjo6TmV3KG1fdXRpbGl0eUNvbnRleHQpKTsKK30KKwordm9pZCBXZWJEZXZUb29s
c0FnZW50SW1wbDo6c2V0SW5zcGVjdG9yRnJvbnRlbmRQcm94eVRvSW5zcGVjdG9yQ29udHJvbGxl
cigpCit7CisgICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOworICAgIFNjcmlwdFN0YXRlKiBzdGF0
ZSA9IFNjcmlwdFN0YXRlOjpmb3JDb250ZXh0KAorICAgICAgICB2ODo6TG9jYWw8djg6OkNvbnRl
eHQ+OjpOZXcobV91dGlsaXR5Q29udGV4dCkpOwogICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIGlj
ID0gaW5zcGVjdG9yQ29udHJvbGxlcigpOwotICAgIGljLT5zZXRGcm9udGVuZFByb3h5T2JqZWN0
KHN0YXRlLCBTY3JpcHRPYmplY3Qoc3RhdGUsIG1fdXRpbGl0eUNvbnRleHQtPkdsb2JhbCgpKSk7
CisgICAgaWMtPnNldEZyb250ZW5kKG5ldyBJbnNwZWN0b3JGcm9udGVuZCgKKyAgICAgICAgU2Ny
aXB0T2JqZWN0KHN0YXRlLCBtX3V0aWxpdHlDb250ZXh0LT5HbG9iYWwoKSkpKTsKIH0KIAogdm9p
ZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6c2V0QXB1QWdlbnRFbmFibGVkKGJvb2wgZW5hYmxlZCkK
ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuaCBi
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuaAppbmRleCAyMDdiYWRh
Li40NTVkY2VmIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzQWdl
bnRJbXBsLmgKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5o
CkBAIC0xMDksNyArMTA5LDggQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgY29tcGlsZVV0aWxpdHlT
Y3JpcHRzKCk7CiAgICAgdm9pZCBpbml0RGV2VG9vbHNBZ2VudEhvc3QoKTsKLSAgICB2b2lkIHJl
c2V0SW5zcGVjdG9yRnJvbnRlbmRQcm94eSgpOworICAgIHZvaWQgY3JlYXRlSW5zcGVjdG9yRnJv
bnRlbmRQcm94eSgpOworICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRQcm94eVRvSW5zcGVj
dG9yQ29udHJvbGxlcigpOwogICAgIHZvaWQgc2V0QXB1QWdlbnRFbmFibGVkKGJvb2wgZW5hYmxl
ZCk7CiAKICAgICBXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9s
bGVyKCk7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzRnJvbnRl
bmRJbXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNGcm9udGVuZEltcGwu
Y3BwCmluZGV4IGQ1YjhlYmMuLjhhMmY4MWMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViRGV2VG9vbHNGcm9udGVuZEltcGwuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViRGV2VG9vbHNGcm9udGVuZEltcGwuY3BwCkBAIC0xNTYsOCArMTU2LDExIEBAIFdlYkRldlRv
b2xzRnJvbnRlbmRJbXBsOjpXZWJEZXZUb29sc0Zyb250ZW5kSW1wbCgKICAgICAgICAgInNldFNl
dHRpbmciLAogICAgICAgICBXZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6anNTZXRTZXR0aW5nKTsK
ICAgICBkZXZUb29sc0hvc3QuYWRkUHJvdG9GdW5jdGlvbigKLSAgICAgICAgIndpbmRvd1VubG9h
ZGluZyIsCi0gICAgICAgIFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjpqc1dpbmRvd1VubG9hZGlu
Zyk7CisgICAgICAgICJicmluZ1RvRnJvbnQiLAorICAgICAgICBXZWJEZXZUb29sc0Zyb250ZW5k
SW1wbDo6anNCcmluZ1RvRnJvbnQpOworICAgIGRldlRvb2xzSG9zdC5hZGRQcm90b0Z1bmN0aW9u
KAorICAgICAgICAiaW5zcGVjdGVkVVJMQ2hhbmdlZCIsCisgICAgICAgIFdlYkRldlRvb2xzRnJv
bnRlbmRJbXBsOjpqc0luc3BlY3RlZFVSTENoYW5nZWQpOwogICAgIGRldlRvb2xzSG9zdC5hZGRQ
cm90b0Z1bmN0aW9uKAogICAgICAgICAic2hvd0NvbnRleHRNZW51IiwKICAgICAgICAgV2ViRGV2
VG9vbHNGcm9udGVuZEltcGw6OmpzU2hvd0NvbnRleHRNZW51KTsKQEAgLTM0Niw5ICszNDksMTMg
QEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjpqc0RlYnVn
Z2VyUGF1c2VTY3JpcHQoY29uc3Qgdjg6OkEKICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwog
fQogCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gV2ViRGV2VG9vbHNGcm9udGVuZEltcGw6OmpzV2lu
ZG93VW5sb2FkaW5nKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gV2ViRGV2VG9vbHNGcm9udGVuZEltcGw6OmpzQnJpbmdUb0Zyb250KGNvbnN0IHY4OjpB
cmd1bWVudHMmIGFyZ3MpCit7CisgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKK30KKwordjg6
OkhhbmRsZTx2ODo6VmFsdWU+IFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjpqc0luc3BlY3RlZFVS
TENoYW5nZWQoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsKLSAgICAvLyBUT0RPKHBmZWxk
bWFuKTogSW1wbGVtZW50IHRoaXMuCiAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKIH0KIApk
aWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0Zyb250ZW5kSW1wbC5o
IGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0Zyb250ZW5kSW1wbC5oCmluZGV4IGJh
MDAxM2IuLjY1OTE2OTMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9v
bHNGcm9udGVuZEltcGwuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzRnJv
bnRlbmRJbXBsLmgKQEAgLTE0Miw3ICsxNDIsOCBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4ganNTZXR0aW5nKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpOwog
ICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4ganNTZXRTZXR0aW5nKGNvbnN0IHY4OjpB
cmd1bWVudHMmIGFyZ3MpOwogICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4ganNEZWJ1
Z2dlclBhdXNlU2NyaXB0KGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpOwotICAgIHN0YXRpYyB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4ganNXaW5kb3dVbmxvYWRpbmcoY29uc3Qgdjg6OkFyZ3VtZW50
cyYgYXJncyk7CisgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBqc0JyaW5nVG9Gcm9u
dChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKTsKKyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IGpzSW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKTsK
ICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGpzU2hvd0NvbnRleHRNZW51KGNvbnN0
IHY4OjpBcmd1bWVudHMmIGFyZ3MpOwogICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
anNDYW5BdHRhY2hXaW5kb3coY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncyk7CiAKZGlmZiAtLWdp
dCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvSW5qZWN0RGlzcGF0Y2guanMgYi9XZWJLaXQvY2hy
b21pdW0vc3JjL2pzL0luamVjdERpc3BhdGNoLmpzCmluZGV4IGUwNzBjNDIuLjY4YmNkYmQgMTAw
NjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvSW5qZWN0RGlzcGF0Y2guanMKKysrIGIv
V2ViS2l0L2Nocm9taXVtL3NyYy9qcy9JbmplY3REaXNwYXRjaC5qcwpAQCAtMTA0LDMgKzEwNCw3
IEBAIGZ1bmN0aW9uIGRpc3BhdGNoKG1ldGhvZCwgdmFyX2FyZ3MpIHsKICAgICB2YXIgY2FsbCA9
IEpTT04uc3RyaW5naWZ5KGFyZ3MpOwogICAgIERldlRvb2xzQWdlbnRIb3N0LmRpc3BhdGNoKGNh
bGwpOwogfTsKKworZnVuY3Rpb24gY2xvc2UoKSB7CisgICAgLy8gVGhpcyBtZXRob2QgaXMgY2Fs
bGVkIHdoZW4gSW5zcGVjdG9yRnJvbnRlbmQgY2xvc2VzIGluIGxheW91dCB0ZXN0cy4KK30KZGlm
ZiAtLWdpdCBhL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50RWZsLmNw
cCBiL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50RWZsLmNwcAppbmRl
eCA4M2M3ZDhlLi44ODkyZDdmIDEwMDY0NAotLS0gYS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0
L0luc3BlY3RvckNsaWVudEVmbC5jcHAKKysrIGIvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9J
bnNwZWN0b3JDbGllbnRFZmwuY3BwCkBAIC0zMyw0NSArMzMsNyBAQCB2b2lkIEluc3BlY3RvckNs
aWVudEVmbDo6aW5zcGVjdG9yRGVzdHJveWVkKCkKICAgICBkZWxldGUgdGhpczsKIH0KIAotUGFn
ZSogSW5zcGVjdG9yQ2xpZW50RWZsOjpjcmVhdGVQYWdlKCkKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotICAgIHJldHVybiAwOwotfQotCi1TdHJpbmcgSW5zcGVjdG9yQ2xpZW50RWZsOjpsb2Nh
bGl6ZWRTdHJpbmdzVVJMKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBT
dHJpbmcoKTsKLX0KLQotU3RyaW5nIEluc3BlY3RvckNsaWVudEVmbDo6aGlkZGVuUGFuZWxzKCkK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotdm9p
ZCBJbnNwZWN0b3JDbGllbnRFZmw6OnNob3dXaW5kb3coKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ2xpZW50RWZsOjpjbG9zZVdpbmRvdygpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDbGllbnRFZmw6OmF0dGFjaFdp
bmRvdygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDbGll
bnRFZmw6OmRldGFjaFdpbmRvdygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9p
ZCBJbnNwZWN0b3JDbGllbnRFZmw6OnNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkKQor
dm9pZCBJbnNwZWN0b3JDbGllbnRFZmw6Om9wZW5JbnNwZWN0b3JGcm9udGVuZChJbnNwZWN0b3JD
b250cm9sbGVyKikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQpAQCAtODYsMTYgKzQ4LDYg
QEAgdm9pZCBJbnNwZWN0b3JDbGllbnRFZmw6OmhpZGVIaWdobGlnaHQoKQogICAgIG5vdEltcGxl
bWVudGVkKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ2xpZW50RWZsOjppbnNwZWN0ZWRVUkxDaGFu
Z2VkKGNvbnN0IFN0cmluZyYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBJ
bnNwZWN0b3JDbGllbnRFZmw6Omluc3BlY3RvcldpbmRvd09iamVjdENsZWFyZWQoKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KIHZvaWQgSW5zcGVjdG9yQ2xpZW50RWZsOjpwb3B1bGF0
ZVNldHRpbmcoY29uc3QgU3RyaW5nJiwgU3RyaW5nKikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgp
OwpAQCAtMTA2LDkgKzU4LDQgQEAgdm9pZCBJbnNwZWN0b3JDbGllbnRFZmw6OnN0b3JlU2V0dGlu
Zyhjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKQogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yQ2xpZW50RWZsOjpyZW1vdmVTZXR0aW5nKGNvbnN0IFN0cmluZyYp
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQogfQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Vm
bC9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRFZmwuaCBiL1dlYktpdC9lZmwvV2ViQ29y
ZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50RWZsLmgKaW5kZXggODUzZTdiZC4uMzBjOWNhZiAxMDA2
NDQKLS0tIGEvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRFZmwuaAor
KysgYi9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudEVmbC5oCkBAIC00
MywyOCArNDMsMTMgQEAgY2xhc3MgSW5zcGVjdG9yQ2xpZW50RWZsIDogcHVibGljIFdlYkNvcmU6
Okluc3BlY3RvckNsaWVudCB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGluc3BlY3RvckRl
c3Ryb3llZCgpOwogCi0gICAgdmlydHVhbCBXZWJDb3JlOjpQYWdlKiBjcmVhdGVQYWdlKCk7Cisg
ICAgdmlydHVhbCB2b2lkIG9wZW5JbnNwZWN0b3JGcm9udGVuZChJbnNwZWN0b3JDb250cm9sbGVy
Kik7CiAKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlN0cmluZyBsb2NhbGl6ZWRTdHJpbmdzVVJMKCk7
Ci0KLSAgICB2aXJ0dWFsIFN0cmluZyBoaWRkZW5QYW5lbHMoKTsKLQotICAgIHZpcnR1YWwgdm9p
ZCBzaG93V2luZG93KCk7Ci0gICAgdmlydHVhbCB2b2lkIGNsb3NlV2luZG93KCk7Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgYXR0YWNoV2luZG93KCk7Ci0gICAgdmlydHVhbCB2b2lkIGRldGFjaFdpbmRv
dygpOwotCi0gICAgdmlydHVhbCB2b2lkIHNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVk
IGhlaWdodCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgaGlnaGxpZ2h0KFdlYkNvcmU6Ok5vZGUqKTsK
KyAgICB2aXJ0dWFsIHZvaWQgaGlnaGxpZ2h0KE5vZGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgaGlk
ZUhpZ2hsaWdodCgpOwotICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0
IFdlYkNvcmU6OlN0cmluZyYgbmV3VVJMKTsKIAotICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0b3JX
aW5kb3dPYmplY3RDbGVhcmVkKCk7Ci0gICAgdmlydHVhbCB2b2lkIHBvcHVsYXRlU2V0dGluZyhj
b25zdCBXZWJDb3JlOjpTdHJpbmcmIGtleSwgV2ViQ29yZTo6U3RyaW5nKik7Ci0gICAgdmlydHVh
bCB2b2lkIHN0b3JlU2V0dGluZyhjb25zdCBXZWJDb3JlOjpTdHJpbmcmIGtleSwgY29uc3QgV2Vi
Q29yZTo6U3RyaW5nJik7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZVNldHRpbmcoY29uc3QgV2Vi
Q29yZTo6U3RyaW5nJiBrZXkpOworICAgIHZpcnR1YWwgdm9pZCBwb3B1bGF0ZVNldHRpbmcoY29u
c3QgU3RyaW5nJiBrZXksIFN0cmluZyogdmFsdWUpOworICAgIHZpcnR1YWwgdm9pZCBzdG9yZVNl
dHRpbmcoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpOwogfTsKIH0KIApk
aWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay9DaGFuZ2VMb2cgYi9XZWJLaXQvZ3RrL0NoYW5nZUxvZwpp
bmRleCA1MTljYWE1Li45NjQzNjJjIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwor
KysgYi9XZWJLaXQvZ3RrL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDEwLTAzLTE2ICBZ
dXJ5IFNlbWlraGF0c2t5IDx5dXJ5c0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgUGF2ZWwgRmVsZG1hbi4KKworICAgICAgICBJbnRyb2R1Y2UgSW5zcGVjdG9yRnJvbnRlbmRD
bGllbnQgdGhhdCBwcm92aWRlcyBJbnNwZWN0b3JGcm9udGVuZCB3aXRoIGFuIGludGVyZmFjZSB0
byB0aGUgZW1iZWRkZXIuIEluc3BlY3RvckNsaWVudCBub3cgc2VydmVzIGFzIGEgZGVsZWdhdGUg
Zm9yIEluc3BlY3RvckNvbnRyb2xsZXIgYW5kIGRvZXMgbm90IGNvbnRhaW4gbWV0aG9kcyBmb3Ig
bWFuYWdpbmcgaW5zcGVjdG9yIGZyb250ZW5kIHdpbmRvdy4gVGhhdCBhbGxvd3MgdG8gY3JlYXRl
IHJlbW90ZSBJbnNwZWN0b3JGcm9udGVuZEhvc3QuCisKKyAgICAgICAgSW50cm9kdWNlIEluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50IHRoYXQgd291bGQgcHJvdmlkZSBJbnNwZWN0b3JGcm9udGVuZCB3
aXRoIGFuIGludGVyZmFjZSB0byB0aGUgZW1iZWRkZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM1MDM2CisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9JbnNwZWN0b3JDbGllbnRHdGsuY3BwOgorICAgICAgICAoV2ViS2l0Ojpub3RpZnlXZWJWaWV3
RGVzdHJveWVkKToKKyAgICAgICAgKFdlYktpdDo6SW5zcGVjdG9yQ2xpZW50OjpJbnNwZWN0b3JD
bGllbnQpOgorICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JDbGllbnQ6Omluc3BlY3RvckRlc3Ry
b3llZCk6CisgICAgICAgIChXZWJLaXQ6Okluc3BlY3RvckNsaWVudDo6b3Blbkluc3BlY3RvckZy
b250ZW5kKToKKyAgICAgICAgKFdlYktpdDo6SW5zcGVjdG9yQ2xpZW50OjpoaWdobGlnaHQpOgor
ICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JDbGllbnQ6OmhpZGVIaWdobGlnaHQpOgorICAgICAg
ICAoV2ViS2l0OjpJbnNwZWN0b3JDbGllbnQ6OnBvcHVsYXRlU2V0dGluZyk6CisgICAgICAgIChX
ZWJLaXQ6Okluc3BlY3RvckNsaWVudDo6c3RvcmVTZXR0aW5nKToKKyAgICAgICAgKFdlYktpdDo6
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50KToKKyAgICAg
ICAgKFdlYktpdDo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6On5JbnNwZWN0b3JGcm9udGVuZENs
aWVudCk6CisgICAgICAgIChXZWJLaXQ6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpkZXN0cm95
SW5zcGVjdG9yV2luZG93KToKKyAgICAgICAgKFdlYktpdDo6SW5zcGVjdG9yRnJvbnRlbmRDbGll
bnQ6OmxvY2FsaXplZFN0cmluZ3NVUkwpOgorICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JGcm9u
dGVuZENsaWVudDo6aGlkZGVuUGFuZWxzKToKKyAgICAgICAgKFdlYktpdDo6SW5zcGVjdG9yRnJv
bnRlbmRDbGllbnQ6OmJyaW5nVG9Gcm9udCk6CisgICAgICAgIChXZWJLaXQ6Okluc3BlY3RvckZy
b250ZW5kQ2xpZW50OjpjbG9zZVdpbmRvdyk6CisgICAgICAgIChXZWJLaXQ6Okluc3BlY3RvckZy
b250ZW5kQ2xpZW50OjphdHRhY2hXaW5kb3cpOgorICAgICAgICAoV2ViS2l0OjpJbnNwZWN0b3JG
cm9udGVuZENsaWVudDo6ZGV0YWNoV2luZG93KToKKyAgICAgICAgKFdlYktpdDo6SW5zcGVjdG9y
RnJvbnRlbmRDbGllbnQ6OnNldEF0dGFjaGVkV2luZG93SGVpZ2h0KToKKyAgICAgICAgKFdlYktp
dDo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6Omluc3BlY3RlZFVSTENoYW5nZWQpOgorICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudEd0ay5oOgorCiAyMDEwLTAzLTE1ICBK
b2FubWFyaWUgRGlnZ3MgIDxqb2FubWFyaWUuZGlnZ3NAZ21haWwuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IEhvbGdlciBGcmV5dGhlci4KZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvV2ViQ29y
ZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50R3RrLmNwcCBiL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBv
cnQvSW5zcGVjdG9yQ2xpZW50R3RrLmNwcAppbmRleCA5OWJjNjI3Li43NzVlMzUwIDEwMDY0NAot
LS0gYS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudEd0ay5jcHAKKysr
IGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRHdGsuY3BwCkBAIC0z
MSw2NyArMzEsNDAgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJL
aXQgewogCi1zdGF0aWMgdm9pZCBub3RpZnlXZWJWaWV3RGVzdHJveWVkKFdlYktpdFdlYlZpZXcq
IHdlYlZpZXcsIEluc3BlY3RvckNsaWVudCogaW5zcGVjdG9yQ2xpZW50KQorc3RhdGljIHZvaWQg
bm90aWZ5V2ViVmlld0Rlc3Ryb3llZChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBJbnNwZWN0b3JG
cm9udGVuZENsaWVudCogaW5zcGVjdG9yRnJvbnRlbmRDbGllbnQpCiB7Ci0gICAgaW5zcGVjdG9y
Q2xpZW50LT53ZWJWaWV3RGVzdHJveWVkKCk7CisgICAgaW5zcGVjdG9yRnJvbnRlbmRDbGllbnQt
PmRlc3Ryb3lJbnNwZWN0b3JXaW5kb3coKTsKIH0KIAogSW5zcGVjdG9yQ2xpZW50OjpJbnNwZWN0
b3JDbGllbnQoV2ViS2l0V2ViVmlldyogd2ViVmlldykKLSAgICA6IG1fd2ViVmlldygwKQotICAg
ICwgbV9pbnNwZWN0ZWRXZWJWaWV3KHdlYlZpZXcpCi0gICAgLCBtX3dlYkluc3BlY3RvcigwKQor
ICAgIDogbV9pbnNwZWN0ZWRXZWJWaWV3KHdlYlZpZXcpCiB7fQogCiB2b2lkIEluc3BlY3RvckNs
aWVudDo6aW5zcGVjdG9yRGVzdHJveWVkKCkKIHsKLSAgICBpZiAobV93ZWJJbnNwZWN0b3IpCi0g
ICAgICAgIGdfb2JqZWN0X3VucmVmKG1fd2ViSW5zcGVjdG9yKTsKLQogICAgIGRlbGV0ZSB0aGlz
OwogfQogCi12b2lkIEluc3BlY3RvckNsaWVudDo6d2ViVmlld0Rlc3Ryb3llZCgpCi17Ci0gICAg
bV93ZWJWaWV3ID0gMDsKLSAgICBjb3JlKG1faW5zcGVjdGVkV2ViVmlldyktPmluc3BlY3RvckNv
bnRyb2xsZXIoKS0+cGFnZURlc3Ryb3llZCgpOwotCi0gICAgLy8gY3JlYXRlUGFnZSB3aWxsIGJl
IGNhbGxlZCBhZ2FpbiwgaWYgdGhlIHVzZXIgY2hvb3NlcyB0byBpbnNwZWN0Ci0gICAgLy8gc29t
ZXRoaW5nIGVsc2UsIGFuZCB0aGUgaW5zcGVjdG9yIHdpbGwgYmUgcmVmZXJlbmNlZCBhZ2FpbiwK
LSAgICAvLyB0aGVyZS4KLSAgICBnX29iamVjdF91bnJlZihtX3dlYkluc3BlY3Rvcik7Ci0gICAg
bV93ZWJJbnNwZWN0b3IgPSAwOwotfQotCi1QYWdlKiBJbnNwZWN0b3JDbGllbnQ6OmNyZWF0ZVBh
Z2UoKQordm9pZCBJbnNwZWN0b3JDbGllbnQ6Om9wZW5JbnNwZWN0b3JGcm9udGVuZChJbnNwZWN0
b3JDb250cm9sbGVyKiBjb250cm9sbGVyKQogewotICAgIGlmIChtX3dlYlZpZXcpIHsKLSAgICAg
ICAgZ2Jvb2xlYW4gaGFuZGxlZCA9IEZBTFNFOwotICAgICAgICBnX3NpZ25hbF9lbWl0X2J5X25h
bWUobV93ZWJJbnNwZWN0b3IsICJkZXN0cm95IiwgJmhhbmRsZWQpOwotCi0gICAgICAgIC8qIHdl
IGNhbiBub3cgZGlzcG9zZSBvdXIgb3duIHJlZmVyZW5jZSAqLwotICAgICAgICBnX29iamVjdF91
bnJlZihtX3dlYkluc3BlY3Rvcik7Ci0gICAgfQotCiAgICAgLy8gVGhpcyBnX29iamVjdF9nZXQg
d2lsbCByZWYgdGhlIGluc3BlY3Rvci4gV2UncmUgbm90IGRvaW5nIGFuCiAgICAgLy8gdW5yZWYg
aWYgdGhpcyBtZXRob2Qgc3VjY2VlZHMgYmVjYXVzZSB0aGUgaW5zcGVjdG9yIG9iamVjdCBtdXN0
CiAgICAgLy8gYmUgYWxpdmUgZXZlbiBhZnRlciB0aGUgaW5zcGVjdGVkIFdlYlZpZXcgaXMgZGVz
dHJveWVkIC0gdGhlCiAgICAgLy8gY2xvc2Utd2luZG93IGFuZCBkZXN0cm95IHNpZ25hbHMgc3Rp
bGwgbmVlZCB0byBiZQogICAgIC8vIGVtaXR0ZWQuCi0gICAgV2ViS2l0V2ViSW5zcGVjdG9yKiB3
ZWJJbnNwZWN0b3I7CisgICAgV2ViS2l0V2ViSW5zcGVjdG9yKiB3ZWJJbnNwZWN0b3IgPSAwOwog
ICAgIGdfb2JqZWN0X2dldChtX2luc3BlY3RlZFdlYlZpZXcsICJ3ZWItaW5zcGVjdG9yIiwgJndl
Ykluc3BlY3RvciwgTlVMTCk7Ci0gICAgbV93ZWJJbnNwZWN0b3IgPSB3ZWJJbnNwZWN0b3I7Cisg
ICAgQVNTRVJUKHdlYkluc3BlY3Rvcik7CiAKLSAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV93
ZWJJbnNwZWN0b3IsICJpbnNwZWN0LXdlYi12aWV3IiwgbV9pbnNwZWN0ZWRXZWJWaWV3LCAmbV93
ZWJWaWV3KTsKKyAgICBXZWJLaXRXZWJWaWV3KiBpbnNwZWN0b3JXZWJWaWV3ID0gMDsKKyAgICBn
X3NpZ25hbF9lbWl0X2J5X25hbWUod2ViSW5zcGVjdG9yLCAiaW5zcGVjdC13ZWItdmlldyIsIG1f
aW5zcGVjdGVkV2ViVmlldywgJmluc3BlY3RvcldlYlZpZXcpOwogCi0gICAgaWYgKCFtX3dlYlZp
ZXcpIHsKLSAgICAgICAgZ19vYmplY3RfdW5yZWYobV93ZWJJbnNwZWN0b3IpOwotICAgICAgICBy
ZXR1cm4gMDsKKyAgICBpZiAoIWluc3BlY3RvcldlYlZpZXcpIHsKKyAgICAgICAgZ19vYmplY3Rf
dW5yZWYod2ViSW5zcGVjdG9yKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHdlYmtp
dF93ZWJfaW5zcGVjdG9yX3NldF93ZWJfdmlldyhtX3dlYkluc3BlY3RvciwgbV93ZWJWaWV3KTsK
LQotICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAiZGVzdHJveSIsCi0gICAgICAgICAg
ICAgICAgICAgICBHX0NBTExCQUNLKG5vdGlmeVdlYlZpZXdEZXN0cm95ZWQpLCAoZ3BvaW50ZXIp
dGhpcyk7CisgICAgd2Via2l0X3dlYl9pbnNwZWN0b3Jfc2V0X3dlYl92aWV3KHdlYkluc3BlY3Rv
ciwgaW5zcGVjdG9yV2ViVmlldyk7CiAKICAgICBHT3duUHRyPGdjaGFyPiBpbnNwZWN0b3JVUkk7
CiAKQEAgLTEwMywxNCArNzYsNzMgQEAgUGFnZSogSW5zcGVjdG9yQ2xpZW50OjpjcmVhdGVQYWdl
KCkKICAgICB9IGVsc2UKICAgICAgICAgaW5zcGVjdG9yVVJJLnNldChnX2ZpbGVuYW1lX3RvX3Vy
aShEQVRBX0RJUiIvd2Via2l0LTEuMC93ZWJpbnNwZWN0b3IvaW5zcGVjdG9yLmh0bWwiLCBOVUxM
LCBOVUxMKSk7CiAKLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkobV93ZWJWaWV3LCBpbnNw
ZWN0b3JVUkkuZ2V0KCkpOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaShpbnNwZWN0b3JX
ZWJWaWV3LCBpbnNwZWN0b3JVUkkuZ2V0KCkpOworCisgICAgZ3RrX3dpZGdldF9zaG93KEdUS19X
SURHRVQoaW5zcGVjdG9yV2ViVmlldykpOworCisgICAgUGFnZSogaW5zcGVjdG9yUGFnZSA9IGNv
cmUoaW5zcGVjdG9yV2ViVmlldyk7CisgICAgaW5zcGVjdG9yUGFnZS0+aW5zcGVjdG9yQ29udHJv
bGxlcigpLT5zZXRJbnNwZWN0b3JGcm9udGVuZENsaWVudChuZXcgSW5zcGVjdG9yRnJvbnRlbmRD
bGllbnQobV9pbnNwZWN0ZWRXZWJWaWV3LCBpbnNwZWN0b3JXZWJWaWV3LCB3ZWJJbnNwZWN0b3Is
IGluc3BlY3RvclBhZ2UpKTsKK30KKwordm9pZCBJbnNwZWN0b3JDbGllbnQ6OmhpZ2hsaWdodChO
b2RlKiBub2RlKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9y
Q2xpZW50OjpoaWRlSGlnaGxpZ2h0KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2
b2lkIEluc3BlY3RvckNsaWVudDo6cG9wdWxhdGVTZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5LCBT
dHJpbmcqIHZhbHVlKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgSW5zcGVj
dG9yQ2xpZW50OjpzdG9yZVNldHRpbmcoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYg
dmFsdWUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworCitib29sIGRlc3Ryb3llZCA9
IFRSVUU7CisKK0luc3BlY3RvckZyb250ZW5kQ2xpZW50OjpJbnNwZWN0b3JGcm9udGVuZENsaWVu
dChXZWJLaXRXZWJWaWV3KiBpbnNwZWN0ZWRXZWJWaWV3LCBXZWJLaXRXZWJWaWV3KiBpbnNwZWN0
b3JXZWJWaWV3LCBXZWJLaXRXZWJJbnNwZWN0b3IqIHdlYkluc3BlY3RvciwgUGFnZSogaW5zcGVj
dG9yUGFnZSkKKyAgICA6IEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwoY29yZShpbnNwZWN0
ZWRXZWJWaWV3KS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLCBpbnNwZWN0b3JQYWdlKQorICAgICwg
bV9pbnNwZWN0b3JXZWJWaWV3KGluc3BlY3RvcldlYlZpZXcpCisgICAgLCBtX2luc3BlY3RlZFdl
YlZpZXcoaW5zcGVjdGVkV2ViVmlldykKKyAgICAsIG1fd2ViSW5zcGVjdG9yKHdlYkluc3BlY3Rv
cikKK3sKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1faW5zcGVjdG9yV2ViVmlldywgImRlc3Ryb3ki
LAorICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyhub3RpZnlXZWJWaWV3RGVzdHJveWVk
KSwgKGdwb2ludGVyKXRoaXMpOworfQorCitJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6fkluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50KCkKK3sKKyAgICBBU1NFUlQoIW1fd2ViSW5zcGVjdG9yKTsKK30K
Kwordm9pZCBJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6ZGVzdHJveUluc3BlY3RvcldpbmRvdygp
Cit7CisgICAgaWYgKCFtX3dlYkluc3BlY3RvcikKKyAgICAgICAgcmV0dXJuOworICAgIFdlYktp
dFdlYkluc3BlY3Rvciogd2ViSW5zcGVjdG9yID0gbV93ZWJJbnNwZWN0b3I7CisgICAgbV93ZWJJ
bnNwZWN0b3IgPSAwOworCisgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5j
KG1faW5zcGVjdG9yV2ViVmlldywgKGdwb2ludGVyKW5vdGlmeVdlYlZpZXdEZXN0cm95ZWQsIChn
cG9pbnRlcil0aGlzKTsKKyAgICBtX2luc3BlY3RvcldlYlZpZXcgPSAwOworCisgICAgY29yZSht
X2luc3BlY3RlZFdlYlZpZXcpLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmRpc2Nvbm5lY3RGcm9u
dGVuZCgpOwogCi0gICAgZ3RrX3dpZGdldF9zaG93KEdUS19XSURHRVQobV93ZWJWaWV3KSk7Cisg
ICAgZ2Jvb2xlYW4gaGFuZGxlZCA9IEZBTFNFOworICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZSh3
ZWJJbnNwZWN0b3IsICJjbG9zZS13aW5kb3ciLCAmaGFuZGxlZCk7CisgICAgQVNTRVJUKGhhbmRs
ZWQpOwogCi0gICAgcmV0dXJuIGNvcmUobV93ZWJWaWV3KTsKKyAgICAvKiB3ZSBzaG91bGQgbm93
IGRpc3Bvc2Ugb3VyIG93biByZWZlcmVuY2UgKi8KKyAgICBnX29iamVjdF91bnJlZih3ZWJJbnNw
ZWN0b3IpOwogfQogCi1TdHJpbmcgSW5zcGVjdG9yQ2xpZW50Ojpsb2NhbGl6ZWRTdHJpbmdzVVJM
KCkKK1N0cmluZyBJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6bG9jYWxpemVkU3RyaW5nc1VSTCgp
CiB7CiAgICAgR093blB0cjxnY2hhcj4gVVJMOwogCkBAIC0xMjYsODkgKzE1OCw1NiBAQCBTdHJp
bmcgSW5zcGVjdG9yQ2xpZW50Ojpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkKICAgICByZXR1cm4gU3Ry
aW5nOjpmcm9tVVRGOChVUkwuZ2V0KCkpOwogfQogCi1TdHJpbmcgSW5zcGVjdG9yQ2xpZW50Ojpo
aWRkZW5QYW5lbHMoKQorU3RyaW5nIEluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpoaWRkZW5QYW5l
bHMoKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgcmV0dXJuIFN0cmluZygpOwogfQog
Ci12b2lkIEluc3BlY3RvckNsaWVudDo6c2hvd1dpbmRvdygpCit2b2lkIEluc3BlY3RvckZyb250
ZW5kQ2xpZW50OjpicmluZ1RvRnJvbnQoKQogewotICAgIGlmICghbV93ZWJWaWV3KQorICAgIGlm
ICghbV9pbnNwZWN0b3JXZWJWaWV3KQogICAgICAgICByZXR1cm47CiAKICAgICBnYm9vbGVhbiBo
YW5kbGVkID0gRkFMU0U7CiAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fd2ViSW5zcGVjdG9y
LCAic2hvdy13aW5kb3ciLCAmaGFuZGxlZCk7Ci0KLSAgICBjb3JlKG1faW5zcGVjdGVkV2ViVmll
dyktPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0V2luZG93VmlzaWJsZSh0cnVlKTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JDbGllbnQ6OmNsb3NlV2luZG93KCkKK3ZvaWQgSW5zcGVjdG9yRnJvbnRl
bmRDbGllbnQ6OmNsb3NlV2luZG93KCkKIHsKLSAgICBpZiAoIW1fd2ViVmlldykKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgZ2Jvb2xlYW4gaGFuZGxlZCA9IEZBTFNFOwotICAgIGdfc2lnbmFsX2Vt
aXRfYnlfbmFtZShtX3dlYkluc3BlY3RvciwgImNsb3NlLXdpbmRvdyIsICZoYW5kbGVkKTsKLQot
ICAgIGNvcmUobV9pbnNwZWN0ZWRXZWJWaWV3KS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5zZXRX
aW5kb3dWaXNpYmxlKGZhbHNlKTsKKyAgICBkZXN0cm95SW5zcGVjdG9yV2luZG93KCk7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yQ2xpZW50OjphdHRhY2hXaW5kb3coKQordm9pZCBJbnNwZWN0b3JGcm9u
dGVuZENsaWVudDo6YXR0YWNoV2luZG93KCkKIHsKLSAgICBpZiAoIW1fd2ViVmlldykKKyAgICBp
ZiAoIW1faW5zcGVjdG9yV2ViVmlldykKICAgICAgICAgcmV0dXJuOwogCiAgICAgZ2Jvb2xlYW4g
aGFuZGxlZCA9IEZBTFNFOwogICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX3dlYkluc3BlY3Rv
ciwgImF0dGFjaC13aW5kb3ciLCAmaGFuZGxlZCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ2xpZW50
OjpkZXRhY2hXaW5kb3coKQordm9pZCBJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6ZGV0YWNoV2lu
ZG93KCkKIHsKLSAgICBpZiAoIW1fd2ViVmlldykKKyAgICBpZiAoIW1faW5zcGVjdG9yV2ViVmll
dykKICAgICAgICAgcmV0dXJuOwogCiAgICAgZ2Jvb2xlYW4gaGFuZGxlZCA9IEZBTFNFOwogICAg
IGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX3dlYkluc3BlY3RvciwgImRldGFjaC13aW5kb3ciLCAm
aGFuZGxlZCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ2xpZW50OjpzZXRBdHRhY2hlZFdpbmRvd0hl
aWdodCh1bnNpZ25lZCBoZWlnaHQpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9p
ZCBJbnNwZWN0b3JDbGllbnQ6OmhpZ2hsaWdodChOb2RlKiBub2RlKQotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ2xpZW50OjpoaWRlSGlnaGxpZ2h0KCkKK3Zv
aWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OnNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2ln
bmVkIGhlaWdodCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIEluc3BlY3Rv
ckNsaWVudDo6aW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIG5ld1VSTCkKK3ZvaWQg
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6Omluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5n
JiBuZXdVUkwpCiB7Ci0gICAgaWYgKCFtX3dlYlZpZXcpCisgICAgaWYgKCFtX2luc3BlY3Rvcldl
YlZpZXcpCiAgICAgICAgIHJldHVybjsKIAogICAgIHdlYmtpdF93ZWJfaW5zcGVjdG9yX3NldF9p
bnNwZWN0ZWRfdXJpKG1fd2ViSW5zcGVjdG9yLCBuZXdVUkwudXRmOCgpLmRhdGEoKSk7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yQ2xpZW50OjppbnNwZWN0b3JXaW5kb3dPYmplY3RDbGVhcmVkKCkKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEluc3BlY3RvckNsaWVudDo6cG9wdWxh
dGVTZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5LCBTdHJpbmcqIHZhbHVlKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ2xpZW50OjpzdG9yZVNldHRpbmcoY29u
c3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQogfQogCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0lu
c3BlY3RvckNsaWVudEd0ay5oIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JD
bGllbnRHdGsuaAppbmRleCAyOTdmZDhmLi5jZGI1Mzc1IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3Rr
L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudEd0ay5oCisrKyBiL1dlYktpdC9ndGsvV2Vi
Q29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50R3RrLmgKQEAgLTMwLDYgKzMwLDcgQEAKICNkZWZp
bmUgSW5zcGVjdG9yQ2xpZW50R3RrX2gKIAogI2luY2x1ZGUgIkluc3BlY3RvckNsaWVudC5oIgor
I2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuaCIKICNpbmNsdWRlICJ3ZWJr
aXR3ZWJ2aWV3LmgiCiAjaW5jbHVkZSAid2Via2l0d2ViaW5zcGVjdG9yLmgiCiAKQEAgLTQ2LDE1
ICs0NywzMCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKICAgICAgICAgSW5zcGVjdG9yQ2xpZW50KFdl
YktpdFdlYlZpZXcqIHdlYlZpZXcpOwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0b3JE
ZXN0cm95ZWQoKTsKLSAgICAgICAgdm9pZCB3ZWJWaWV3RGVzdHJveWVkKCk7CiAKLSAgICAgICAg
dmlydHVhbCBXZWJDb3JlOjpQYWdlKiBjcmVhdGVQYWdlKCk7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBvcGVuSW5zcGVjdG9yRnJvbnRlbmQoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlciopOwor
CisgICAgICAgIHZpcnR1YWwgdm9pZCBoaWdobGlnaHQoV2ViQ29yZTo6Tm9kZSopOworICAgICAg
ICB2aXJ0dWFsIHZvaWQgaGlkZUhpZ2hsaWdodCgpOworCisgICAgICAgIHZpcnR1YWwgdm9pZCBw
b3B1bGF0ZVNldHRpbmcoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBrZXksIFdlYkNvcmU6OlN0cmlu
ZyogdmFsdWUpOworICAgICAgICB2aXJ0dWFsIHZvaWQgc3RvcmVTZXR0aW5nKGNvbnN0IFdlYkNv
cmU6OlN0cmluZyYga2V5LCBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIHZhbHVlKTsKKworICAgIHBy
aXZhdGU6CisgICAgICAgIFdlYktpdFdlYlZpZXcqIG1faW5zcGVjdGVkV2ViVmlldzsKKyAgICB9
OworCisgICAgY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQgOiBwdWJsaWMgV2ViQ29yZTo6
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbCB7CisgICAgcHVibGljOgorICAgICAgICBJbnNw
ZWN0b3JGcm9udGVuZENsaWVudChXZWJLaXRXZWJWaWV3KiBpbnNwZWN0ZWRXZWJWaWV3LCBXZWJL
aXRXZWJWaWV3KiBpbnNwZWN0b3JXZWJWaWV3LCBXZWJLaXRXZWJJbnNwZWN0b3IqIHdlYkluc3Bl
Y3RvciwgV2ViQ29yZTo6UGFnZSogaW5zcGVjdG9yUGFnZSk7CisKKyAgICAgICAgdm9pZCBkZXN0
cm95SW5zcGVjdG9yV2luZG93KCk7CiAKICAgICAgICAgdmlydHVhbCBXZWJDb3JlOjpTdHJpbmcg
bG9jYWxpemVkU3RyaW5nc1VSTCgpOwogCiAgICAgICAgIHZpcnR1YWwgV2ViQ29yZTo6U3RyaW5n
IGhpZGRlblBhbmVscygpOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBzaG93V2luZG93KCk7Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCBicmluZ1RvRnJvbnQoKTsKICAgICAgICAgdmlydHVhbCB2b2lk
IGNsb3NlV2luZG93KCk7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIGF0dGFjaFdpbmRvdygpOwpA
QCAtNjIsMTcgKzc4LDEyIEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiAgICAgICAgIHZpcnR1YWwg
dm9pZCBzZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpOwogCi0gICAgICAg
IHZpcnR1YWwgdm9pZCBoaWdobGlnaHQoV2ViQ29yZTo6Tm9kZSopOwotICAgICAgICB2aXJ0dWFs
IHZvaWQgaGlkZUhpZ2hsaWdodCgpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgaW5zcGVjdGVkVVJM
Q2hhbmdlZChjb25zdCBXZWJDb3JlOjpTdHJpbmcmIG5ld1VSTCk7CiAKLSAgICAgICAgdmlydHVh
bCB2b2lkIHBvcHVsYXRlU2V0dGluZyhjb25zdCBXZWJDb3JlOjpTdHJpbmcmIGtleSwgV2ViQ29y
ZTo6U3RyaW5nKiB2YWx1ZSk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzdG9yZVNldHRpbmcoY29u
c3QgV2ViQ29yZTo6U3RyaW5nJiBrZXksIGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgdmFsdWUpOwot
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0b3JXaW5kb3dPYmplY3RDbGVhcmVkKCk7Ci0K
ICAgICBwcml2YXRlOgotICAgICAgICBXZWJLaXRXZWJWaWV3KiBtX3dlYlZpZXc7CisgICAgICAg
IHZpcnR1YWwgfkluc3BlY3RvckZyb250ZW5kQ2xpZW50KCk7CisKKyAgICAgICAgV2ViS2l0V2Vi
VmlldyogbV9pbnNwZWN0b3JXZWJWaWV3OwogICAgICAgICBXZWJLaXRXZWJWaWV3KiBtX2luc3Bl
Y3RlZFdlYlZpZXc7CiAgICAgICAgIFdlYktpdFdlYkluc3BlY3RvciogbV93ZWJJbnNwZWN0b3I7
CiAgICAgfTsKZGlmZiAtLWdpdCBhL1dlYktpdC9oYWlrdS9DaGFuZ2VMb2cgYi9XZWJLaXQvaGFp
a3UvQ2hhbmdlTG9nCmluZGV4IDFjNjg3MGEuLjIxMThiNjcgMTAwNjQ0Ci0tLSBhL1dlYktpdC9o
YWlrdS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2hhaWt1L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2
IEBACisyMDEwLTAzLTE2ICBZdXJ5IFNlbWlraGF0c2t5IDx5dXJ5c0BjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgUGF2ZWwgRmVsZG1hbi4KKworICAgICAgICBJbnRyb2R1Y2Ug
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQgdGhhdCBwcm92aWRlcyBJbnNwZWN0b3JGcm9udGVuZCB3
aXRoIGFuIGludGVyZmFjZSB0byB0aGUgZW1iZWRkZXIuIEluc3BlY3RvckNsaWVudCBub3cgc2Vy
dmVzIGFzIGEgZGVsZWdhdGUgZm9yIEluc3BlY3RvckNvbnRyb2xsZXIgYW5kIGRvZXMgbm90IGNv
bnRhaW4gbWV0aG9kcyBmb3IgbWFuYWdpbmcgaW5zcGVjdG9yIGZyb250ZW5kIHdpbmRvdy4gVGhh
dCBhbGxvd3MgdG8gY3JlYXRlIHJlbW90ZSBJbnNwZWN0b3JGcm9udGVuZEhvc3QuCisKKyAgICAg
ICAgSW50cm9kdWNlIEluc3BlY3RvckZyb250ZW5kQ2xpZW50IHRoYXQgd291bGQgcHJvdmlkZSBJ
bnNwZWN0b3JGcm9udGVuZCB3aXRoIGFuIGludGVyZmFjZSB0byB0aGUgZW1iZWRkZXIKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM1MDM2CisKKyAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRIYWlrdS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JDbGllbnRIYWlrdTo6b3Blbkluc3BlY3RvckZyb250ZW5kKToKKyAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRIYWlrdS5oOgorCiAyMDEwLTAz
LTExICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgRGF2aWQgSHlhdHQuCmRpZmYgLS1naXQgYS9XZWJLaXQvaGFpa3UvV2ViQ29yZVN1
cHBvcnQvSW5zcGVjdG9yQ2xpZW50SGFpa3UuY3BwIGIvV2ViS2l0L2hhaWt1L1dlYkNvcmVTdXBw
b3J0L0luc3BlY3RvckNsaWVudEhhaWt1LmNwcAppbmRleCBmMDZlOTZiLi41OTIzMmU5IDEwMDY0
NAotLS0gYS9XZWJLaXQvaGFpa3UvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50SGFpa3Uu
Y3BwCisrKyBiL1dlYktpdC9oYWlrdS9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRIYWlr
dS5jcHAKQEAgLTQyLDQ1ICs0Miw3IEBAIHZvaWQgSW5zcGVjdG9yQ2xpZW50SGFpa3U6Omluc3Bl
Y3RvckRlc3Ryb3llZCgpCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotUGFnZSogSW5zcGVj
dG9yQ2xpZW50SGFpa3U6OmNyZWF0ZVBhZ2UoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0g
ICAgcmV0dXJuIDA7Ci19Ci0KLVN0cmluZyBJbnNwZWN0b3JDbGllbnRIYWlrdTo6bG9jYWxpemVk
U3RyaW5nc1VSTCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5n
KCk7Ci19Ci0KLVN0cmluZyBJbnNwZWN0b3JDbGllbnRIYWlrdTo6aGlkZGVuUGFuZWxzKCkKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotdm9pZCBJ
bnNwZWN0b3JDbGllbnRIYWlrdTo6c2hvd1dpbmRvdygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDbGllbnRIYWlrdTo6Y2xvc2VXaW5kb3coKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ2xpZW50SGFpa3U6OmF0dGFj
aFdpbmRvdygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JD
bGllbnRIYWlrdTo6ZGV0YWNoV2luZG93KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQot
Ci12b2lkIEluc3BlY3RvckNsaWVudEhhaWt1OjpzZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNp
Z25lZCBoZWlnaHQpCit2b2lkIEluc3BlY3RvckNsaWVudEhhaWt1OjpvcGVuSW5zcGVjdG9yRnJv
bnRlbmQoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlciopCiB7CiAgICAgbm90SW1wbGVtZW50
ZWQoKTsKIH0KQEAgLTk1LDE2ICs1Nyw2IEBAIHZvaWQgSW5zcGVjdG9yQ2xpZW50SGFpa3U6Omhp
ZGVIaWdobGlnaHQoKQogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
Q2xpZW50SGFpa3U6Omluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJikKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEluc3BlY3RvckNsaWVudEhhaWt1OjppbnNwZWN0
b3JXaW5kb3dPYmplY3RDbGVhcmVkKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCiB2
b2lkIEluc3BlY3RvckNsaWVudEhhaWt1Ojpwb3B1bGF0ZVNldHRpbmcoY29uc3QgU3RyaW5nJiBr
ZXksIFN0cmluZyogdmFsdWUpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKZGlmZiAtLWdpdCBh
L1dlYktpdC9oYWlrdS9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRIYWlrdS5oIGIvV2Vi
S2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudEhhaWt1LmgKaW5kZXggODc4
OGE1Zi4uZDQyNzY3MCAxMDA2NDQKLS0tIGEvV2ViS2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0lu
c3BlY3RvckNsaWVudEhhaWt1LmgKKysrIGIvV2ViS2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0lu
c3BlY3RvckNsaWVudEhhaWt1LmgKQEAgLTQyLDI5ICs0MiwxMyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgcHVibGljOgogICAgICAgICB2aXJ0dWFsIHZvaWQgaW5zcGVjdG9yRGVzdHJveWVk
KCk7CiAKLSAgICAgICAgdmlydHVhbCBQYWdlKiBjcmVhdGVQYWdlKCk7Ci0KLSAgICAgICAgdmly
dHVhbCBTdHJpbmcgbG9jYWxpemVkU3RyaW5nc1VSTCgpOwotCi0gICAgICAgIHZpcnR1YWwgU3Ry
aW5nIGhpZGRlblBhbmVscygpOwotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBzaG93V2luZG93KCk7
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBjbG9zZVdpbmRvdygpOwotCi0gICAgICAgIHZpcnR1YWwg
dm9pZCBhdHRhY2hXaW5kb3coKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRldGFjaFdpbmRvdygp
OwotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBzZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25l
ZCBoZWlnaHQpOworICAgICAgICB2aXJ0dWFsIHZvaWQgb3Blbkluc3BlY3RvckZyb250ZW5kKFdl
YkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXIqKTsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgaGln
aGxpZ2h0KE5vZGUqKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGhpZGVIaWdobGlnaHQoKTsKIAot
ICAgICAgICB2aXJ0dWFsIHZvaWQgaW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIG5l
d1VSTCk7Ci0KICAgICAgICAgdmlydHVhbCB2b2lkIHBvcHVsYXRlU2V0dGluZyhjb25zdCBXZWJD
b3JlOjpTdHJpbmcmIGtleSwgV2ViQ29yZTo6U3RyaW5nKiB2YWx1ZSk7CiAgICAgICAgIHZpcnR1
YWwgdm9pZCBzdG9yZVNldHRpbmcoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBrZXksIGNvbnN0IFdl
YkNvcmU6OlN0cmluZyYgdmFsdWUpOwotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0b3JX
aW5kb3dPYmplY3RDbGVhcmVkKCk7CiAgICAgfTsKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApk
aWZmIC0tZ2l0IGEvV2ViS2l0L21hYy9DaGFuZ2VMb2cgYi9XZWJLaXQvbWFjL0NoYW5nZUxvZwpp
bmRleCBlNmQzMDQ2Li44ZGVjYzU4IDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL0NoYW5nZUxvZwor
KysgYi9XZWJLaXQvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDEwLTAzLTE2ICBZ
dXJ5IFNlbWlraGF0c2t5IDx5dXJ5c0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgUGF2ZWwgRmVsZG1hbi4KKworICAgICAgICBJbnRyb2R1Y2UgSW5zcGVjdG9yRnJvbnRlbmRD
bGllbnQgdGhhdCBwcm92aWRlcyBJbnNwZWN0b3JGcm9udGVuZCB3aXRoIGFuIGludGVyZmFjZSB0
byB0aGUgZW1iZWRkZXIuIEluc3BlY3RvckNsaWVudCBub3cgc2VydmVzIGFzIGEgZGVsZWdhdGUg
Zm9yIEluc3BlY3RvckNvbnRyb2xsZXIgYW5kIGRvZXMgbm90IGNvbnRhaW4gbWV0aG9kcyBmb3Ig
bWFuYWdpbmcgaW5zcGVjdG9yIGZyb250ZW5kIHdpbmRvdy4gVGhhdCBhbGxvd3MgdG8gY3JlYXRl
IHJlbW90ZSBJbnNwZWN0b3JGcm9udGVuZEhvc3QuCisKKyAgICAgICAgSW50cm9kdWNlIEluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50IHRoYXQgd291bGQgcHJvdmlkZSBJbnNwZWN0b3JGcm9udGVuZCB3
aXRoIGFuIGludGVyZmFjZSB0byB0aGUgZW1iZWRkZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM1MDM2CisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9XZWJJbnNwZWN0b3JDbGllbnQuaDoKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJJbnNw
ZWN0b3JDbGllbnQubW06CisgICAgICAgIChXZWJJbnNwZWN0b3JDbGllbnQ6OldlYkluc3BlY3Rv
ckNsaWVudCk6CisgICAgICAgIChXZWJJbnNwZWN0b3JDbGllbnQ6Omluc3BlY3RvckRlc3Ryb3ll
ZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3JDbGllbnQ6Om9wZW5JbnNwZWN0b3JGcm9udGVuZCk6
CisgICAgICAgIChXZWJJbnNwZWN0b3JDbGllbnQ6OmhpZ2hsaWdodCk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3JDbGllbnQ6OmhpZGVIaWdobGlnaHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJv
bnRlbmRDbGllbnQ6OldlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50KToKKyAgICAgICAgKFdlYklu
c3BlY3RvckZyb250ZW5kQ2xpZW50Ojpmcm9udGVuZExvYWRlZCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3JGcm9udGVuZENsaWVudDo6bG9jYWxpemVkU3RyaW5nc1VSTCk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3JGcm9udGVuZENsaWVudDo6aGlkZGVuUGFuZWxzKToKKyAgICAgICAgKFdlYkluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50OjpicmluZ1RvRnJvbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
RnJvbnRlbmRDbGllbnQ6OmNsb3NlV2luZG93KToKKyAgICAgICAgKFdlYkluc3BlY3RvckZyb250
ZW5kQ2xpZW50OjphdHRhY2hXaW5kb3cpOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRD
bGllbnQ6OmRldGFjaFdpbmRvdyk6CisgICAgICAgIChXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVu
dDo6c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRl
bmRDbGllbnQ6Omluc3BlY3RlZFVSTENoYW5nZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJv
bnRlbmRDbGllbnQ6OnVwZGF0ZVdpbmRvd1RpdGxlKToKKyAgICAgICAgKC1bV2ViSW5zcGVjdG9y
V2luZG93Q29udHJvbGxlciBkZWFsbG9jXSk6CisgICAgICAgICgtW1dlYkluc3BlY3RvcldpbmRv
d0NvbnRyb2xsZXIgd2luZG93U2hvdWxkQ2xvc2U6XSk6CisgICAgICAgICgtW1dlYkluc3BlY3Rv
cldpbmRvd0NvbnRyb2xsZXIgY2xvc2VdKToKKyAgICAgICAgKC1bV2ViSW5zcGVjdG9yV2luZG93
Q29udHJvbGxlciBzaG93V2luZG93Ol0pOgorICAgICAgICAoLVtXZWJJbnNwZWN0b3JXaW5kb3dD
b250cm9sbGVyIGF0dGFjaF0pOgorICAgICAgICAoLVtXZWJJbnNwZWN0b3JXaW5kb3dDb250cm9s
bGVyIGRldGFjaF0pOgorICAgICAgICAoLVtXZWJJbnNwZWN0b3JXaW5kb3dDb250cm9sbGVyIGF0
dGFjaGVkXSk6CisgICAgICAgICgtW1dlYkluc3BlY3RvcldpbmRvd0NvbnRyb2xsZXIgc2V0RnJv
bnRlbmRDbGllbnQ6XSk6CisgICAgICAgICgtW1dlYkluc3BlY3RvcldpbmRvd0NvbnRyb2xsZXIg
ZGVzdHJveUluc3BlY3RvclZpZXddKToKKyAgICAgICAgKC1bV2ViTm9kZUhpZ2hsaWdodGVyIGlu
aXRXaXRoSW5zcGVjdGVkV2ViVmlldzpdKToKKyAgICAgICAgKC1bV2ViTm9kZUhpZ2hsaWdodGVy
IGRlYWxsb2NdKToKKyAgICAgICAgKC1bV2ViTm9kZUhpZ2hsaWdodGVyIGhpZ2hsaWdodE5vZGU6
XSk6CisgICAgICAgICgtW1dlYk5vZGVIaWdobGlnaHRlciBoaWRlSGlnaGxpZ2h0XSk6CisgICAg
ICAgICgtW1dlYk5vZGVIaWdobGlnaHRlciBkaWRBdHRhY2hXZWJOb2RlSGlnaGxpZ2h0Ol0pOgor
ICAgICAgICAoLVtXZWJOb2RlSGlnaGxpZ2h0ZXIgd2lsbERldGFjaFdlYk5vZGVIaWdobGlnaHQ6
XSk6CisgICAgICAgICogV2ViSW5zcGVjdG9yL1dlYkluc3BlY3Rvci5tbToKKyAgICAgICAgKC1b
V2ViSW5zcGVjdG9yIGF0dGFjaDpdKToKKyAgICAgICAgKC1bV2ViSW5zcGVjdG9yIGRldGFjaDpd
KToKKwogMjAxMC0wMy0xNSAgQW5keSBFc3RlcyAgPGFlc3Rlc0BhcHBsZS5jb20+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgSm9obiBTdWxsaXZhbi4KZGlmZiAtLWdpdCBhL1dlYktpdC9tYWMvV2Vi
Q29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmggYi9XZWJLaXQvbWFjL1dlYkNvcmVTdXBw
b3J0L1dlYkluc3BlY3RvckNsaWVudC5oCmluZGV4IDY0NjIxZjguLmVlODFiMjUgMTAwNjQ0Ci0t
LSBhL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmgKKysrIGIv
V2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuaApAQCAtMjcsMTUg
KzI3LDE4IEBACiAgKi8KIAogI2ltcG9ydCA8V2ViQ29yZS9JbnNwZWN0b3JDbGllbnQuaD4KKyNp
bXBvcnQgPFdlYkNvcmUvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5oPgogI2ltcG9ydCA8
V2ViQ29yZS9QbGF0Zm9ybVN0cmluZy5oPgogCiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAK
ICNpZmRlZiBfX09CSkNfXwogQGNsYXNzIFdlYkluc3BlY3RvcldpbmRvd0NvbnRyb2xsZXI7CitA
Y2xhc3MgV2ViTm9kZUhpZ2hsaWdodGVyOwogQGNsYXNzIFdlYlZpZXc7CiAjZWxzZQogY2xhc3Mg
V2ViSW5zcGVjdG9yV2luZG93Q29udHJvbGxlcjsKK2NsYXNzIFdlYk5vZGVIaWdobGlnaHRlcjsK
IGNsYXNzIFdlYlZpZXc7CiAjZW5kaWYKIApAQCAtNDUsMzIgKzQ4LDQxIEBAIHB1YmxpYzoKIAog
ICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0b3JEZXN0cm95ZWQoKTsKIAotICAgIHZpcnR1YWwgV2Vi
Q29yZTo6UGFnZSogY3JlYXRlUGFnZSgpOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6U3RyaW5nIGxv
Y2FsaXplZFN0cmluZ3NVUkwoKTsKLQotICAgIHZpcnR1YWwgV2ViQ29yZTo6U3RyaW5nIGhpZGRl
blBhbmVscygpOwotCi0gICAgdmlydHVhbCB2b2lkIHNob3dXaW5kb3coKTsKLSAgICB2aXJ0dWFs
IHZvaWQgY2xvc2VXaW5kb3coKTsKLQotICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hXaW5kb3coKTsK
LSAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoV2luZG93KCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0
QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KTsKKyAgICB2aXJ0dWFsIHZvaWQg
b3Blbkluc3BlY3RvckZyb250ZW5kKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXIqKTsKIAog
ICAgIHZpcnR1YWwgdm9pZCBoaWdobGlnaHQoV2ViQ29yZTo6Tm9kZSopOwogICAgIHZpcnR1YWwg
dm9pZCBoaWRlSGlnaGxpZ2h0KCk7Ci0gICAgdmlydHVhbCB2b2lkIGluc3BlY3RlZFVSTENoYW5n
ZWQoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBuZXdVUkwpOwogCiAgICAgdmlydHVhbCB2b2lkIHBv
cHVsYXRlU2V0dGluZyhjb25zdCBXZWJDb3JlOjpTdHJpbmcmIGtleSwgV2ViQ29yZTo6U3RyaW5n
KiB2YWx1ZSk7CiAgICAgdmlydHVhbCB2b2lkIHN0b3JlU2V0dGluZyhjb25zdCBXZWJDb3JlOjpT
dHJpbmcmIGtleSwgY29uc3QgV2ViQ29yZTo6U3RyaW5nJiB2YWx1ZSk7CiAKLSAgICB2aXJ0dWFs
IHZvaWQgaW5zcGVjdG9yV2luZG93T2JqZWN0Q2xlYXJlZCgpOworcHJpdmF0ZToKKyAgICBXZWJW
aWV3ICptX3dlYlZpZXc7CisgICAgUmV0YWluUHRyPFdlYk5vZGVIaWdobGlnaHRlcj4gbV9oaWdo
bGlnaHRlcjsKK307CisKK2NsYXNzIFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50IDogcHVibGlj
IFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwgeworcHVibGljOgorICAgIFdl
Ykluc3BlY3RvckZyb250ZW5kQ2xpZW50KFdlYlZpZXcqLCBXZWJJbnNwZWN0b3JXaW5kb3dDb250
cm9sbGVyKiwgV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlciosIFdlYkNvcmU6OlBhZ2UqKTsK
KworICAgIHZpcnR1YWwgdm9pZCBmcm9udGVuZExvYWRlZCgpOworICAgIAorICAgIHZpcnR1YWwg
V2ViQ29yZTo6U3RyaW5nIGxvY2FsaXplZFN0cmluZ3NVUkwoKTsKKyAgICB2aXJ0dWFsIFdlYkNv
cmU6OlN0cmluZyBoaWRkZW5QYW5lbHMoKTsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgYnJpbmdU
b0Zyb250KCk7CisgICAgdmlydHVhbCB2b2lkIGNsb3NlV2luZG93KCk7CisgICAgCisgICAgdmly
dHVhbCB2b2lkIGF0dGFjaFdpbmRvdygpOworICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hXaW5kb3co
KTsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWdu
ZWQgaGVpZ2h0KTsKKyAgICB2aXJ0dWFsIHZvaWQgaW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBX
ZWJDb3JlOjpTdHJpbmcmIG5ld1VSTCk7CiAKIHByaXZhdGU6CiAgICAgdm9pZCB1cGRhdGVXaW5k
b3dUaXRsZSgpIGNvbnN0OwogCi0gICAgV2ViVmlldyAqbV93ZWJWaWV3OworICAgIFdlYlZpZXcq
IG1faW5zcGVjdGVkV2ViVmlldzsKICAgICBSZXRhaW5QdHI8V2ViSW5zcGVjdG9yV2luZG93Q29u
dHJvbGxlcj4gbV93aW5kb3dDb250cm9sbGVyOwogICAgIFdlYkNvcmU6OlN0cmluZyBtX2luc3Bl
Y3RlZFVSTDsKIH07CmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYklu
c3BlY3RvckNsaWVudC5tbSBiL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9y
Q2xpZW50Lm1tCmluZGV4IGM1ZjE3MjkuLjAwYzUxYTkgMTAwNjQ0Ci0tLSBhL1dlYktpdC9tYWMv
V2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50Lm1tCisrKyBiL1dlYktpdC9tYWMvV2Vi
Q29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50Lm1tCkBAIC00MSw2ICs0MSw3IEBACiAjaW1w
b3J0IDxXZWJDb3JlL1BhZ2UuaD4KICNpbXBvcnQgPFdlYktpdC9ET01FeHRlbnNpb25zLmg+CiAj
aW1wb3J0IDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KKyNpbXBvcnQgPHd0Zi9QYXNzT3duUHRy
Lmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC00OCw0NSArNDksOTQgQEAgdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CiBAcHJpdmF0ZQogICAgIFdlYlZpZXcgKl9pbnNwZWN0ZWRX
ZWJWaWV3OwogICAgIFdlYlZpZXcgKl93ZWJWaWV3OwotICAgIFdlYk5vZGVIaWdobGlnaHQgKl9j
dXJyZW50SGlnaGxpZ2h0OworICAgIFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50KiBfZnJvbnRl
bmRDbGllbnQ7CiAgICAgQk9PTCBfYXR0YWNoZWRUb0luc3BlY3RlZFdlYlZpZXc7CiAgICAgQk9P
TCBfc2hvdWxkQXR0YWNoOwogICAgIEJPT0wgX3Zpc2libGU7Ci0gICAgQk9PTCBfbW92aW5nV2lu
ZG93czsKKyAgICBCT09MIF9kZXN0cm95aW5nSW5zcGVjdG9yVmlldzsKIH0KIC0gKGlkKWluaXRX
aXRoSW5zcGVjdGVkV2ViVmlldzooV2ViVmlldyAqKXdlYlZpZXc7Ci0tIChCT09MKWluc3BlY3Rv
clZpc2libGU7CiAtIChXZWJWaWV3ICopd2ViVmlldzsKIC0gKHZvaWQpYXR0YWNoOwogLSAodm9p
ZClkZXRhY2g7CistIChCT09MKWF0dGFjaGVkOworLSAodm9pZClzZXRGcm9udGVuZENsaWVudDoo
V2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQqKWZyb250ZW5kQ2xpZW50OwogLSAodm9pZClzZXRB
dHRhY2hlZFdpbmRvd0hlaWdodDoodW5zaWduZWQpaGVpZ2h0OworLSAodm9pZClkZXN0cm95SW5z
cGVjdG9yVmlldzsKK0BlbmQKKworI3ByYWdtYSBtYXJrIC0KKworQGludGVyZmFjZSBXZWJOb2Rl
SGlnaGxpZ2h0ZXIgOiBOU09iamVjdCB7CitAcHJpdmF0ZQorICAgIFdlYlZpZXcgKl9pbnNwZWN0
ZWRXZWJWaWV3OworICAgIFdlYk5vZGVIaWdobGlnaHQgKl9jdXJyZW50SGlnaGxpZ2h0OworfQor
LSAoaWQpaW5pdFdpdGhJbnNwZWN0ZWRXZWJWaWV3OihXZWJWaWV3ICopd2ViVmlldzsKIC0gKHZv
aWQpaGlnaGxpZ2h0Tm9kZTooRE9NTm9kZSAqKW5vZGU7CiAtICh2b2lkKWhpZGVIaWdobGlnaHQ7
CiBAZW5kCiAKICNwcmFnbWEgbWFyayAtCiAKKwogV2ViSW5zcGVjdG9yQ2xpZW50OjpXZWJJbnNw
ZWN0b3JDbGllbnQoV2ViVmlldyAqd2ViVmlldykKIDogbV93ZWJWaWV3KHdlYlZpZXcpCissIG1f
aGlnaGxpZ2h0ZXIoQWRvcHROUywgW1tXZWJOb2RlSGlnaGxpZ2h0ZXIgYWxsb2NdIGluaXRXaXRo
SW5zcGVjdGVkV2ViVmlldzp3ZWJWaWV3XSkKIHsKIH0KIAogdm9pZCBXZWJJbnNwZWN0b3JDbGll
bnQ6Omluc3BlY3RvckRlc3Ryb3llZCgpCiB7Ci0gICAgW1ttX3dpbmRvd0NvbnRyb2xsZXIuZ2V0
KCkgd2ViVmlld10gY2xvc2VdOwogICAgIGRlbGV0ZSB0aGlzOwogfQogCi1QYWdlKiBXZWJJbnNw
ZWN0b3JDbGllbnQ6OmNyZWF0ZVBhZ2UoKQordm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6Om9wZW5J
bnNwZWN0b3JGcm9udGVuZChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVy
KQogewotICAgIGlmIChtX3dpbmRvd0NvbnRyb2xsZXIpCi0gICAgICAgIFtbbV93aW5kb3dDb250
cm9sbGVyLmdldCgpIHdlYlZpZXddIGNsb3NlXTsKLSAgICBtX3dpbmRvd0NvbnRyb2xsZXIuYWRv
cHROUyhbW1dlYkluc3BlY3RvcldpbmRvd0NvbnRyb2xsZXIgYWxsb2NdIGluaXRXaXRoSW5zcGVj
dGVkV2ViVmlldzptX3dlYlZpZXddKTsKKyAgICBSZXRhaW5QdHI8V2ViSW5zcGVjdG9yV2luZG93
Q29udHJvbGxlcj4gd2luZG93Q29udHJvbGxlcihBZG9wdE5TLCBbW1dlYkluc3BlY3RvcldpbmRv
d0NvbnRyb2xsZXIgYWxsb2NdIGluaXRXaXRoSW5zcGVjdGVkV2ViVmlldzptX3dlYlZpZXddKTsK
KyAgICBQYWdlKiBmcm9udGVuZFBhZ2UgPSBjb3JlKFt3aW5kb3dDb250cm9sbGVyLmdldCgpIHdl
YlZpZXddKTsKIAotICAgIHJldHVybiBjb3JlKFttX3dpbmRvd0NvbnRyb2xsZXIuZ2V0KCkgd2Vi
Vmlld10pOworICAgIGZyb250ZW5kUGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5zZXRJbnNw
ZWN0b3JGcm9udGVuZENsaWVudChuZXcgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQobV93ZWJW
aWV3LCB3aW5kb3dDb250cm9sbGVyLmdldCgpLCBpbnNwZWN0b3JDb250cm9sbGVyLCBmcm9udGVu
ZFBhZ2UpKTsKIH0KIAotU3RyaW5nIFdlYkluc3BlY3RvckNsaWVudDo6bG9jYWxpemVkU3RyaW5n
c1VSTCgpCit2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6aGlnaGxpZ2h0KE5vZGUqIG5vZGUpCit7
CisgICAgW21faGlnaGxpZ2h0ZXIuZ2V0KCkgaGlnaGxpZ2h0Tm9kZTpraXQobm9kZSldOworfQor
Cit2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6aGlkZUhpZ2hsaWdodCgpCit7CisgICAgW21faGln
aGxpZ2h0ZXIuZ2V0KCkgaGlkZUhpZ2hsaWdodF07Cit9CisKK1dlYkluc3BlY3RvckZyb250ZW5k
Q2xpZW50OjpXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudChXZWJWaWV3KiBpbnNwZWN0ZWRXZWJW
aWV3LCBXZWJJbnNwZWN0b3JXaW5kb3dDb250cm9sbGVyKiB3aW5kb3dDb250cm9sbGVyLCBJbnNw
ZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyLCBQYWdlKiBmcm9udGVuZFBhZ2Up
CisgICAgOiBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsKGluc3BlY3RvckNvbnRyb2xsZXIs
ICBmcm9udGVuZFBhZ2UpCisgICAgLCBtX2luc3BlY3RlZFdlYlZpZXcoaW5zcGVjdGVkV2ViVmll
dykKKyAgICAsIG1fd2luZG93Q29udHJvbGxlcih3aW5kb3dDb250cm9sbGVyKQoreworICAgIFt3
aW5kb3dDb250cm9sbGVyIHNldEZyb250ZW5kQ2xpZW50OnRoaXNdOworfQorCit2b2lkIFdlYklu
c3BlY3RvckZyb250ZW5kQ2xpZW50Ojpmcm9udGVuZExvYWRlZCgpCit7CisgICAgW21fd2luZG93
Q29udHJvbGxlci5nZXQoKSBzaG93V2luZG93Om5pbF07CisgICAgaWYgKFttX3dpbmRvd0NvbnRy
b2xsZXIuZ2V0KCkgYXR0YWNoZWRdKQorICAgICAgICByZXN0b3JlQXR0YWNoZWRXaW5kb3dIZWln
aHQoKTsKKworICAgIEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OmZyb250ZW5kTG9hZGVk
KCk7CisKKyAgICBXZWJGcmFtZSAqZnJhbWUgPSBbbV9pbnNwZWN0ZWRXZWJWaWV3IG1haW5GcmFt
ZV07CisgICAgCisgICAgV2ViRnJhbWVMb2FkRGVsZWdhdGVJbXBsZW1lbnRhdGlvbkNhY2hlKiBp
bXBsZW1lbnRhdGlvbnMgPSBXZWJWaWV3R2V0RnJhbWVMb2FkRGVsZWdhdGVJbXBsZW1lbnRhdGlv
bnMobV9pbnNwZWN0ZWRXZWJWaWV3KTsKKyAgICBpZiAoaW1wbGVtZW50YXRpb25zLT5kaWRDbGVh
ckluc3BlY3RvcldpbmRvd09iamVjdEZvckZyYW1lRnVuYykKKyAgICAgICAgQ2FsbEZyYW1lTG9h
ZERlbGVnYXRlKGltcGxlbWVudGF0aW9ucy0+ZGlkQ2xlYXJJbnNwZWN0b3JXaW5kb3dPYmplY3RG
b3JGcmFtZUZ1bmMsIG1faW5zcGVjdGVkV2ViVmlldywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEBzZWxlY3Rvcih3ZWJWaWV3OmRpZENsZWFySW5zcGVjdG9yV2luZG93T2JqZWN0OmZv
ckZyYW1lOiksIFtmcmFtZSB3aW5kb3dPYmplY3RdLCBmcmFtZSk7CisKKyAgICBib29sIGF0dGFj
aGVkID0gW21fd2luZG93Q29udHJvbGxlci5nZXQoKSBhdHRhY2hlZF07CisgICAgc2V0QXR0YWNo
ZWRXaW5kb3coYXR0YWNoZWQpOworfQorCitTdHJpbmcgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGll
bnQ6OmxvY2FsaXplZFN0cmluZ3NVUkwoKQogewogICAgIE5TU3RyaW5nICpwYXRoID0gW1tOU0J1
bmRsZSBidW5kbGVXaXRoSWRlbnRpZmllcjpAImNvbS5hcHBsZS5XZWJDb3JlIl0gcGF0aEZvclJl
c291cmNlOkAibG9jYWxpemVkU3RyaW5ncyIgb2ZUeXBlOkAianMiXTsKICAgICBpZiAocGF0aCkK
QEAgLTk0LDcgKzE0NCw3IEBAIFN0cmluZyBXZWJJbnNwZWN0b3JDbGllbnQ6OmxvY2FsaXplZFN0
cmluZ3NVUkwoKQogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAotU3RyaW5nIFdlYkluc3BlY3Rv
ckNsaWVudDo6aGlkZGVuUGFuZWxzKCkKK1N0cmluZyBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVu
dDo6aGlkZGVuUGFuZWxzKCkKIHsKICAgICBOU1N0cmluZyAqaGlkZGVuUGFuZWxzID0gW1tOU1Vz
ZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gc3RyaW5nRm9yS2V5OkAiV2ViS2l0SW5z
cGVjdG9ySGlkZGVuUGFuZWxzIl07CiAgICAgaWYgKGhpZGRlblBhbmVscykKQEAgLTEwMiw2MyAr
MTUyLDQ3IEBAIFN0cmluZyBXZWJJbnNwZWN0b3JDbGllbnQ6OmhpZGRlblBhbmVscygpCiAgICAg
cmV0dXJuIFN0cmluZygpOwogfQogCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6c2hvd1dpbmRv
dygpCit2b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpicmluZ1RvRnJvbnQoKQogewog
ICAgIHVwZGF0ZVdpbmRvd1RpdGxlKCk7CiAgICAgW21fd2luZG93Q29udHJvbGxlci5nZXQoKSBz
aG93V2luZG93Om5pbF07CiB9CiAKLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpjbG9zZVdpbmRv
dygpCit2b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpjbG9zZVdpbmRvdygpCiB7Ci0g
ICAgW21fd2luZG93Q29udHJvbGxlci5nZXQoKSBjbG9zZV07CisgICAgW21fd2luZG93Q29udHJv
bGxlci5nZXQoKSBkZXN0cm95SW5zcGVjdG9yVmlld107CiB9CiAKLXZvaWQgV2ViSW5zcGVjdG9y
Q2xpZW50OjphdHRhY2hXaW5kb3coKQordm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6
YXR0YWNoV2luZG93KCkKIHsKKyAgICBpZiAoW21fd2luZG93Q29udHJvbGxlci5nZXQoKSBhdHRh
Y2hlZF0pCisgICAgICAgIHJldHVybjsKICAgICBbbV93aW5kb3dDb250cm9sbGVyLmdldCgpIGF0
dGFjaF07CisgICAgcmVzdG9yZUF0dGFjaGVkV2luZG93SGVpZ2h0KCk7CiB9CiAKLXZvaWQgV2Vi
SW5zcGVjdG9yQ2xpZW50OjpkZXRhY2hXaW5kb3coKQordm9pZCBXZWJJbnNwZWN0b3JGcm9udGVu
ZENsaWVudDo6ZGV0YWNoV2luZG93KCkKIHsKICAgICBbbV93aW5kb3dDb250cm9sbGVyLmdldCgp
IGRldGFjaF07CiB9CiAKLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpzZXRBdHRhY2hlZFdpbmRv
d0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpCit2b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50
OjpzZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpCiB7CiAgICAgW21fd2lu
ZG93Q29udHJvbGxlci5nZXQoKSBzZXRBdHRhY2hlZFdpbmRvd0hlaWdodDpoZWlnaHRdOwogfQog
Ci12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6aGlnaGxpZ2h0KE5vZGUqIG5vZGUpCi17Ci0gICAg
W21fd2luZG93Q29udHJvbGxlci5nZXQoKSBoaWdobGlnaHROb2RlOmtpdChub2RlKV07Ci19Ci0K
LXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpoaWRlSGlnaGxpZ2h0KCkKLXsKLSAgICBbbV93aW5k
b3dDb250cm9sbGVyLmdldCgpIGhpZGVIaWdobGlnaHRdOwotfQotCi12b2lkIFdlYkluc3BlY3Rv
ckNsaWVudDo6aW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIG5ld1VSTCkKK3ZvaWQg
V2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6Omluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3Ry
aW5nJiBuZXdVUkwpCiB7CiAgICAgbV9pbnNwZWN0ZWRVUkwgPSBuZXdVUkw7CiAgICAgdXBkYXRl
V2luZG93VGl0bGUoKTsKIH0KIAotdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OnVwZGF0ZVdpbmRv
d1RpdGxlKCkgY29uc3QKK3ZvaWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OnVwZGF0ZVdp
bmRvd1RpdGxlKCkgY29uc3QKIHsKICAgICBOU1N0cmluZyAqdGl0bGUgPSBbTlNTdHJpbmcgc3Ry
aW5nV2l0aEZvcm1hdDpVSV9TVFJJTkcoIldlYiBJbnNwZWN0b3Ig4oCUICVAIiwgIldlYiBJbnNw
ZWN0b3Igd2luZG93IHRpdGxlIiksIChOU1N0cmluZyAqKW1faW5zcGVjdGVkVVJMXTsKICAgICBb
W21fd2luZG93Q29udHJvbGxlci5nZXQoKSB3aW5kb3ddIHNldFRpdGxlOnRpdGxlXTsKIH0KIAot
dm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6Omluc3BlY3RvcldpbmRvd09iamVjdENsZWFyZWQoKQot
ewotICAgIFdlYkZyYW1lICpmcmFtZSA9IFttX3dlYlZpZXcgbWFpbkZyYW1lXTsKLSAgICAKLSAg
ICBXZWJGcmFtZUxvYWREZWxlZ2F0ZUltcGxlbWVudGF0aW9uQ2FjaGUqIGltcGxlbWVudGF0aW9u
cyA9IFdlYlZpZXdHZXRGcmFtZUxvYWREZWxlZ2F0ZUltcGxlbWVudGF0aW9ucyhtX3dlYlZpZXcp
OwotICAgIGlmIChpbXBsZW1lbnRhdGlvbnMtPmRpZENsZWFySW5zcGVjdG9yV2luZG93T2JqZWN0
Rm9yRnJhbWVGdW5jKQotICAgICAgICBDYWxsRnJhbWVMb2FkRGVsZWdhdGUoaW1wbGVtZW50YXRp
b25zLT5kaWRDbGVhckluc3BlY3RvcldpbmRvd09iamVjdEZvckZyYW1lRnVuYywgbV93ZWJWaWV3
LAotICAgICAgICAgIEBzZWxlY3Rvcih3ZWJWaWV3OmRpZENsZWFySW5zcGVjdG9yV2luZG93T2Jq
ZWN0OmZvckZyYW1lOiksIFtmcmFtZSB3aW5kb3dPYmplY3RdLCBmcmFtZSk7Ci19CiAKICNwcmFn
bWEgbWFyayAtCiAKQEAgLTIyMSwxOCArMjU1LDEyIEBAIHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50
OjppbnNwZWN0b3JXaW5kb3dPYmplY3RDbGVhcmVkKCkKIAogLSAodm9pZClkZWFsbG9jCiB7Ci0g
ICAgQVNTRVJUKCFfY3VycmVudEhpZ2hsaWdodCk7CiAgICAgW193ZWJWaWV3IHJlbGVhc2VdOwog
ICAgIFtzdXBlciBkZWFsbG9jXTsKIH0KIAogI3ByYWdtYSBtYXJrIC0KIAotLSAoQk9PTClpbnNw
ZWN0b3JWaXNpYmxlCi17Ci0gICAgcmV0dXJuIF92aXNpYmxlOwotfQotCiAtIChXZWJWaWV3ICop
d2ViVmlldwogewogICAgIHJldHVybiBfd2ViVmlldzsKQEAgLTI3MSwxMSArMjk5LDcgQEAgdm9p
ZCBXZWJJbnNwZWN0b3JDbGllbnQ6Omluc3BlY3RvcldpbmRvd09iamVjdENsZWFyZWQoKQogCiAt
IChCT09MKXdpbmRvd1Nob3VsZENsb3NlOihpZClzZW5kZXIKIHsKLSAgICBfdmlzaWJsZSA9IE5P
OwotCi0gICAgW19pbnNwZWN0ZWRXZWJWaWV3IHBhZ2VdLT5pbnNwZWN0b3JDb250cm9sbGVyKCkt
PnNldFdpbmRvd1Zpc2libGUoZmFsc2UpOwotCi0gICAgW3NlbGYgaGlkZUhpZ2hsaWdodF07Cisg
ICAgW3NlbGYgZGVzdHJveUluc3BlY3RvclZpZXddOwogCiAgICAgcmV0dXJuIFlFUzsKIH0KQEAg
LTI4NywxMSArMzExLDYgQEAgdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6Omluc3BlY3RvcldpbmRv
d09iamVjdENsZWFyZWQoKQogCiAgICAgX3Zpc2libGUgPSBOTzsKIAotICAgIGlmICghX21vdmlu
Z1dpbmRvd3MpCi0gICAgICAgIFtfaW5zcGVjdGVkV2ViVmlldyBwYWdlXS0+aW5zcGVjdG9yQ29u
dHJvbGxlcigpLT5zZXRXaW5kb3dWaXNpYmxlKGZhbHNlKTsKLQotICAgIFtzZWxmIGhpZGVIaWdo
bGlnaHRdOwotCiAgICAgaWYgKF9hdHRhY2hlZFRvSW5zcGVjdGVkV2ViVmlldykgewogICAgICAg
ICBpZiAoW19pbnNwZWN0ZWRXZWJWaWV3IF9pc0Nsb3NlZF0pCiAgICAgICAgICAgICByZXR1cm47
CkBAIC0zMjgsNyArMzQ3LDcgQEAgdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6Omluc3BlY3Rvcldp
bmRvd09iamVjdENsZWFyZWQoKQogICAgIFN0cmluZyBzaG91bGRBdHRhY2ggPSBbX2luc3BlY3Rl
ZFdlYlZpZXcgcGFnZV0tPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0dGluZyhJbnNwZWN0b3JD
b250cm9sbGVyOjppbnNwZWN0b3JTdGFydHNBdHRhY2hlZFNldHRpbmdOYW1lKCkpOwogICAgIF9z
aG91bGRBdHRhY2ggPSBzaG91bGRBdHRhY2ggIT0gImZhbHNlIjsKICAgICAKLSAgICBpZiAoX3No
b3VsZEF0dGFjaCAmJiAhW19pbnNwZWN0ZWRXZWJWaWV3IHBhZ2VdLT5pbnNwZWN0b3JDb250cm9s
bGVyKCktPmNhbkF0dGFjaFdpbmRvdygpKQorICAgIGlmIChfc2hvdWxkQXR0YWNoICYmICFfZnJv
bnRlbmRDbGllbnQtPmNhbkF0dGFjaFdpbmRvdygpKQogICAgICAgICBfc2hvdWxkQXR0YWNoID0g
Tk87CiAKICAgICBpZiAoX3Nob3VsZEF0dGFjaCkgewpAQCAtMzUyLDggKzM3MSw2IEBAIHZvaWQg
V2ViSW5zcGVjdG9yQ2xpZW50OjppbnNwZWN0b3JXaW5kb3dPYmplY3RDbGVhcmVkKCkKIAogICAg
ICAgICBbc3VwZXIgc2hvd1dpbmRvdzpuaWxdOwogICAgIH0KLQotICAgIFtfaW5zcGVjdGVkV2Vi
VmlldyBwYWdlXS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5zZXRXaW5kb3dWaXNpYmxlKHRydWUs
IF9zaG91bGRBdHRhY2gpOwogfQogCiAjcHJhZ21hIG1hcmsgLQpAQCAtMzY0LDEyICszODEsOSBA
QCB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6aW5zcGVjdG9yV2luZG93T2JqZWN0Q2xlYXJlZCgp
CiAgICAgICAgIHJldHVybjsKIAogICAgIFtfaW5zcGVjdGVkV2ViVmlldyBwYWdlXS0+aW5zcGVj
dG9yQ29udHJvbGxlcigpLT5zZXRTZXR0aW5nKEluc3BlY3RvckNvbnRyb2xsZXI6Omluc3BlY3Rv
clN0YXJ0c0F0dGFjaGVkU2V0dGluZ05hbWUoKSwgInRydWUiKTsKLSAgICBfbW92aW5nV2luZG93
cyA9IFlFUzsKIAogICAgIFtzZWxmIGNsb3NlXTsKICAgICBbc2VsZiBzaG93V2luZG93Om5pbF07
Ci0KLSAgICBfbW92aW5nV2luZG93cyA9IE5POwogfQogCiAtICh2b2lkKWRldGFjaApAQCAtMzc4
LDEzICszOTIsMTkgQEAgdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6Omluc3BlY3RvcldpbmRvd09i
amVjdENsZWFyZWQoKQogICAgICAgICByZXR1cm47CiAKICAgICBbX2luc3BlY3RlZFdlYlZpZXcg
cGFnZV0tPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0U2V0dGluZyhJbnNwZWN0b3JDb250cm9s
bGVyOjppbnNwZWN0b3JTdGFydHNBdHRhY2hlZFNldHRpbmdOYW1lKCksICJmYWxzZSIpOwotICAg
IF9tb3ZpbmdXaW5kb3dzID0gWUVTOwogCiAgICAgW3NlbGYgY2xvc2VdOwogICAgIFtzZWxmIHNo
b3dXaW5kb3c6bmlsXTsKK30KIAotICAgIF9tb3ZpbmdXaW5kb3dzID0gTk87CistIChCT09MKWF0
dGFjaGVkCit7CisgICAgcmV0dXJuIF9hdHRhY2hlZFRvSW5zcGVjdGVkV2ViVmlldzsKK30KIAor
LSAodm9pZClzZXRGcm9udGVuZENsaWVudDooV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQqKWZy
b250ZW5kQ2xpZW50Cit7CisgICAgX2Zyb250ZW5kQ2xpZW50ID0gZnJvbnRlbmRDbGllbnQ7CiB9
CiAKIC0gKHZvaWQpc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQ6KHVuc2lnbmVkKWhlaWdodApAQCAt
NDA1LDI5ICs0MjUsMTcgQEAgdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6Omluc3BlY3RvcldpbmRv
d09iamVjdENsZWFyZWQoKQogICAgIFtmcmFtZVZpZXcgc2V0RnJhbWU6ZnJhbWVWaWV3UmVjdF07
CiB9CiAKLSNwcmFnbWEgbWFyayAtCi0KLS0gKHZvaWQpaGlnaGxpZ2h0Tm9kZTooRE9NTm9kZSAq
KW5vZGUKKy0gKHZvaWQpZGVzdHJveUluc3BlY3RvclZpZXcKIHsKLSAgICAvLyBUaGUgc2Nyb2xs
dmlldydzIGNvbnRlbnQgdmlldyBzdGF5cyBhcm91bmQgYmV0d2VlbiBwYWdlIG5hdmlnYXRpb25z
LCBzbyB0YXJnZXQgaXQKLSAgICBOU1ZpZXcgKnZpZXcgPSBbW1tbW19pbnNwZWN0ZWRXZWJWaWV3
IG1haW5GcmFtZV0gZnJhbWVWaWV3XSBkb2N1bWVudFZpZXddIGVuY2xvc2luZ1Njcm9sbFZpZXdd
IGNvbnRlbnRWaWV3XTsKLSAgICBpZiAoIVt2aWV3IHdpbmRvd10pCi0gICAgICAgIHJldHVybjsg
Ly8gc2tpcCB0aGUgaGlnaGxpZ2h0IGlmIHdlIGhhdmUgbm8gd2luZG93IChlLmcuIGhpZGRlbiB0
YWIpCi0KLSAgICBpZiAoIV9jdXJyZW50SGlnaGxpZ2h0KSB7Ci0gICAgICAgIF9jdXJyZW50SGln
aGxpZ2h0ID0gW1tXZWJOb2RlSGlnaGxpZ2h0IGFsbG9jXSBpbml0V2l0aFRhcmdldFZpZXc6dmll
dyBpbnNwZWN0b3JDb250cm9sbGVyOltfaW5zcGVjdGVkV2ViVmlldyBwYWdlXS0+aW5zcGVjdG9y
Q29udHJvbGxlcigpXTsKLSAgICAgICAgW19jdXJyZW50SGlnaGxpZ2h0IHNldERlbGVnYXRlOnNl
bGZdOwotICAgICAgICBbX2N1cnJlbnRIaWdobGlnaHQgYXR0YWNoXTsKLSAgICB9IGVsc2UKLSAg
ICAgICAgW1tfY3VycmVudEhpZ2hsaWdodCBoaWdobGlnaHRWaWV3XSBzZXROZWVkc0Rpc3BsYXk6
WUVTXTsKLX0KKyAgICBpZiAoX2Rlc3Ryb3lpbmdJbnNwZWN0b3JWaWV3KQorICAgICAgICByZXR1
cm47CisgICAgX2Rlc3Ryb3lpbmdJbnNwZWN0b3JWaWV3ID0gWUVTOwogCi0tICh2b2lkKWhpZGVI
aWdobGlnaHQKLXsKLSAgICBbX2N1cnJlbnRIaWdobGlnaHQgZGV0YWNoXTsKLSAgICBbX2N1cnJl
bnRIaWdobGlnaHQgc2V0RGVsZWdhdGU6bmlsXTsKLSAgICBbX2N1cnJlbnRIaWdobGlnaHQgcmVs
ZWFzZV07Ci0gICAgX2N1cnJlbnRIaWdobGlnaHQgPSBuaWw7CisgICAgaWYgKF9hdHRhY2hlZFRv
SW5zcGVjdGVkV2ViVmlldykKKyAgICAgICAgW3NlbGYgY2xvc2VdOworICAgIF92aXNpYmxlID0g
Tk87CisgICAgW19pbnNwZWN0ZWRXZWJWaWV3IHBhZ2VdLT5pbnNwZWN0b3JDb250cm9sbGVyKCkt
PmRpc2Nvbm5lY3RGcm9udGVuZCgpOworICAgIFtfd2ViVmlldyBjbG9zZV07CiB9CiAKICNwcmFn
bWEgbWFyayAtCkBAIC00OTcsMyArNTA1LDYwIEBAIHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50Ojpp
bnNwZWN0b3JXaW5kb3dPYmplY3RDbGVhcmVkKCkKIH0KIAogQGVuZAorCisKKyNwcmFnbWEgbWFy
ayAtCisKK0BpbXBsZW1lbnRhdGlvbiBXZWJOb2RlSGlnaGxpZ2h0ZXIKKy0gKGlkKWluaXRXaXRo
SW5zcGVjdGVkV2ViVmlldzooV2ViVmlldyAqKXdlYlZpZXcKK3sKKyAgICAvLyBEb24ndCByZXRh
aW4gdG8gYXZvaWQgYSBjaXJjdWxhciByZWZlcmVuY2UKKyAgICBfaW5zcGVjdGVkV2ViVmlldyA9
IHdlYlZpZXc7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAg
IEFTU0VSVCghX2N1cnJlbnRIaWdobGlnaHQpOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKwor
I3ByYWdtYSBtYXJrIC0KKworLSAodm9pZCloaWdobGlnaHROb2RlOihET01Ob2RlICopbm9kZQor
eworICAgIC8vIFRoZSBzY3JvbGx2aWV3J3MgY29udGVudCB2aWV3IHN0YXlzIGFyb3VuZCBiZXR3
ZWVuIHBhZ2UgbmF2aWdhdGlvbnMsIHNvIHRhcmdldCBpdAorICAgIE5TVmlldyAqdmlldyA9IFtb
W1tbX2luc3BlY3RlZFdlYlZpZXcgbWFpbkZyYW1lXSBmcmFtZVZpZXddIGRvY3VtZW50Vmlld10g
ZW5jbG9zaW5nU2Nyb2xsVmlld10gY29udGVudFZpZXddOworICAgIGlmICghW3ZpZXcgd2luZG93
XSkKKyAgICAgICAgcmV0dXJuOyAvLyBza2lwIHRoZSBoaWdobGlnaHQgaWYgd2UgaGF2ZSBubyB3
aW5kb3cgKGUuZy4gaGlkZGVuIHRhYikKKyAgICAKKyAgICBpZiAoIV9jdXJyZW50SGlnaGxpZ2h0
KSB7CisgICAgICAgIF9jdXJyZW50SGlnaGxpZ2h0ID0gW1tXZWJOb2RlSGlnaGxpZ2h0IGFsbG9j
XSBpbml0V2l0aFRhcmdldFZpZXc6dmlldyBpbnNwZWN0b3JDb250cm9sbGVyOltfaW5zcGVjdGVk
V2ViVmlldyBwYWdlXS0+aW5zcGVjdG9yQ29udHJvbGxlcigpXTsKKyAgICAgICAgW19jdXJyZW50
SGlnaGxpZ2h0IHNldERlbGVnYXRlOnNlbGZdOworICAgICAgICBbX2N1cnJlbnRIaWdobGlnaHQg
YXR0YWNoXTsKKyAgICB9IGVsc2UKKyAgICAgICAgW1tfY3VycmVudEhpZ2hsaWdodCBoaWdobGln
aHRWaWV3XSBzZXROZWVkc0Rpc3BsYXk6WUVTXTsKK30KKworLSAodm9pZCloaWRlSGlnaGxpZ2h0
Cit7CisgICAgW19jdXJyZW50SGlnaGxpZ2h0IGRldGFjaF07CisgICAgW19jdXJyZW50SGlnaGxp
Z2h0IHNldERlbGVnYXRlOm5pbF07CisgICAgW19jdXJyZW50SGlnaGxpZ2h0IHJlbGVhc2VdOwor
ICAgIF9jdXJyZW50SGlnaGxpZ2h0ID0gbmlsOworfQorCisjcHJhZ21hIG1hcmsgLQorI3ByYWdt
YSBtYXJrIFdlYk5vZGVIaWdobGlnaHQgZGVsZWdhdGUKKworLSAodm9pZClkaWRBdHRhY2hXZWJO
b2RlSGlnaGxpZ2h0OihXZWJOb2RlSGlnaGxpZ2h0ICopaGlnaGxpZ2h0Cit7CisgICAgW19pbnNw
ZWN0ZWRXZWJWaWV3IHNldEN1cnJlbnROb2RlSGlnaGxpZ2h0OmhpZ2hsaWdodF07Cit9CisKKy0g
KHZvaWQpd2lsbERldGFjaFdlYk5vZGVIaWdobGlnaHQ6KFdlYk5vZGVIaWdobGlnaHQgKiloaWdo
bGlnaHQKK3sKKyAgICBbX2luc3BlY3RlZFdlYlZpZXcgc2V0Q3VycmVudE5vZGVIaWdobGlnaHQ6
bmlsXTsKK30KKyAgICAKK0BlbmQKZGlmZiAtLWdpdCBhL1dlYktpdC9tYWMvV2ViSW5zcGVjdG9y
L1dlYkluc3BlY3Rvci5tbSBiL1dlYktpdC9tYWMvV2ViSW5zcGVjdG9yL1dlYkluc3BlY3Rvci5t
bQppbmRleCAyNThkZDAxLi45YjE3NDU5IDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL1dlYkluc3Bl
Y3Rvci9XZWJJbnNwZWN0b3IubW0KKysrIGIvV2ViS2l0L21hYy9XZWJJbnNwZWN0b3IvV2ViSW5z
cGVjdG9yLm1tCkBAIC0xNzUsMTQgKzE3NSwxMCBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
IAogLSAodm9pZClhdHRhY2g6KGlkKXNlbmRlcgogewotICAgIGlmIChQYWdlKiBwYWdlID0gY29y
ZShfd2ViVmlldykpCi0gICAgICAgIHBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+YXR0YWNo
V2luZG93KCk7CiB9CiAKIC0gKHZvaWQpZGV0YWNoOihpZClzZW5kZXIKIHsKLSAgICBpZiAoUGFn
ZSogcGFnZSA9IGNvcmUoX3dlYlZpZXcpKQotICAgICAgICBwYWdlLT5pbnNwZWN0b3JDb250cm9s
bGVyKCktPmRldGFjaFdpbmRvdygpOwogfQogCiAtICh2b2lkKWV2YWx1YXRlSW5Gcm9udGVuZDoo
aWQpc2VuZGVyIGNhbGxJZDoobG9uZyljYWxsSWQgc2NyaXB0OihOU1N0cmluZyAqKXNjcmlwdApk
aWZmIC0tZ2l0IGEvV2ViS2l0L3F0L0FwaS9xd2ViaW5zcGVjdG9yLmNwcCBiL1dlYktpdC9xdC9B
cGkvcXdlYmluc3BlY3Rvci5jcHAKaW5kZXggYzNlZjUzMC4uYzBlNTI3NyAxMDA2NDQKLS0tIGEv
V2ViS2l0L3F0L0FwaS9xd2ViaW5zcGVjdG9yLmNwcAorKysgYi9XZWJLaXQvcXQvQXBpL3F3ZWJp
bnNwZWN0b3IuY3BwCkBAIC0xNjEsNiArMTYxLDEwIEBAIHZvaWQgUVdlYkluc3BlY3Rvcjo6c2hv
d0V2ZW50KFFTaG93RXZlbnQqIGV2ZW50KQogLyohIFxyZWltcCAqLwogdm9pZCBRV2ViSW5zcGVj
dG9yOjpoaWRlRXZlbnQoUUhpZGVFdmVudCogZXZlbnQpCiB7CisjaWYgRU5BQkxFKElOU1BFQ1RP
UikKKyAgICBpZiAoZC0+cGFnZSkKKyAgICAgICAgZC0+cGFnZS0+ZC0+aW5zcGVjdG9yQ29udHJv
bGxlcigpLT5jbG9zZSgpOworI2VuZGlmCiB9CiAKIC8qISBccmVpbXAgKi8KQEAgLTE2OCw3ICsx
NzIsNyBAQCB2b2lkIFFXZWJJbnNwZWN0b3I6OmNsb3NlRXZlbnQoUUNsb3NlRXZlbnQqIGV2ZW50
KQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAgICAgaWYgKGQtPnBhZ2UpCi0gICAgICAgIGQt
PnBhZ2UtPmQtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0V2luZG93VmlzaWJsZShmYWxzZSk7
CisgICAgICAgIGQtPnBhZ2UtPmQtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+Y2xvc2UoKTsKICNl
bmRpZgogfQogCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQXBpL3F3ZWJpbnNwZWN0b3IuaCBiL1dl
YktpdC9xdC9BcGkvcXdlYmluc3BlY3Rvci5oCmluZGV4IDZjZGE0NzkuLmYxOTJlOTIgMTAwNjQ0
Ci0tLSBhL1dlYktpdC9xdC9BcGkvcXdlYmluc3BlY3Rvci5oCisrKyBiL1dlYktpdC9xdC9BcGkv
cXdlYmluc3BlY3Rvci5oCkBAIC01Miw1ICs1Miw2IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNs
YXNzIFFXZWJQYWdlOwogICAgIGZyaWVuZCBjbGFzcyBRV2ViUGFnZVByaXZhdGU7CiAgICAgZnJp
ZW5kIGNsYXNzIFdlYkNvcmU6Okluc3BlY3RvckNsaWVudFF0OworICAgIGZyaWVuZCBjbGFzcyBX
ZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0OwogfTsKICNlbmRpZgpkaWZmIC0tZ2l0
IGEvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5oIGIvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5oCmlu
ZGV4IDQ3NjZjYmQuLjA3NmZiN2MgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2Uu
aAorKysgYi9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmgKQEAgLTU0LDYgKzU0LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEVkaXRvckNsaWVudFF0OwogICAgIGNsYXNzIEZyYW1l
TG9hZGVyQ2xpZW50UXQ7CiAgICAgY2xhc3MgSW5zcGVjdG9yQ2xpZW50UXQ7CisgICAgY2xhc3Mg
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdDsKICAgICBjbGFzcyBSZXNvdXJjZUhhbmRsZTsKICAg
ICBjbGFzcyBIaXRUZXN0UmVzdWx0OwogICAgIGNsYXNzIFFOZXR3b3JrUmVwbHlIYW5kbGVyOwpA
QCAtMzYxLDYgKzM2Miw3IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFdlYkNvcmU6OkVk
aXRvckNsaWVudFF0OwogICAgIGZyaWVuZCBjbGFzcyBXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVu
dFF0OwogICAgIGZyaWVuZCBjbGFzcyBXZWJDb3JlOjpJbnNwZWN0b3JDbGllbnRRdDsKKyAgICBm
cmllbmQgY2xhc3MgV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdDsKICAgICBmcmll
bmQgY2xhc3MgV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU7CiAgICAgZnJpZW5kIGNsYXNzIFdlYkNv
cmU6OlFOZXR3b3JrUmVwbHlIYW5kbGVyOwogfTsKZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9DaGFu
Z2VMb2cgYi9XZWJLaXQvcXQvQ2hhbmdlTG9nCmluZGV4IDk4ZWQzOWEuLmU4NTY5YzAgMTAwNjQ0
Ci0tLSBhL1dlYktpdC9xdC9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L3F0L0NoYW5nZUxvZwpAQCAt
MSwzICsxLDMyIEBACisyMDEwLTAzLTE2ICBZdXJ5IFNlbWlraGF0c2t5IDx5dXJ5c0BjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgUGF2ZWwgRmVsZG1hbi4KKworICAgICAgICBJ
bnRyb2R1Y2UgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQgdGhhdCBwcm92aWRlcyBJbnNwZWN0b3JG
cm9udGVuZCB3aXRoIGFuIGludGVyZmFjZSB0byB0aGUgZW1iZWRkZXIuIEluc3BlY3RvckNsaWVu
dCBub3cgc2VydmVzIGFzIGEgZGVsZWdhdGUgZm9yIEluc3BlY3RvckNvbnRyb2xsZXIgYW5kIGRv
ZXMgbm90IGNvbnRhaW4gbWV0aG9kcyBmb3IgbWFuYWdpbmcgaW5zcGVjdG9yIGZyb250ZW5kIHdp
bmRvdy4gVGhhdCBhbGxvd3MgdG8gY3JlYXRlIHJlbW90ZSBJbnNwZWN0b3JGcm9udGVuZEhvc3Qu
CisKKyAgICAgICAgSW50cm9kdWNlIEluc3BlY3RvckZyb250ZW5kQ2xpZW50IHRoYXQgd291bGQg
cHJvdmlkZSBJbnNwZWN0b3JGcm9udGVuZCB3aXRoIGFuIGludGVyZmFjZSB0byB0aGUgZW1iZWRk
ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM1MDM2
CisKKyAgICAgICAgKiBBcGkvcXdlYmluc3BlY3Rvci5jcHA6CisgICAgICAgIChRV2ViSW5zcGVj
dG9yOjpoaWRlRXZlbnQpOgorICAgICAgICAoUVdlYkluc3BlY3Rvcjo6Y2xvc2VFdmVudCk6Cisg
ICAgICAgICogQXBpL3F3ZWJpbnNwZWN0b3IuaDoKKyAgICAgICAgKiBBcGkvcXdlYnBhZ2UuaDoK
KyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRRdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JDbGllbnRRdDo6b3Blbkluc3BlY3RvckZyb250ZW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50UXQ6Okluc3BlY3RvckZyb250
ZW5kQ2xpZW50UXQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRR
dDo6ZnJvbnRlbmRMb2FkZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRD
bGllbnRRdDo6bG9jYWxpemVkU3RyaW5nc1VSTCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JGcm9udGVuZENsaWVudFF0OjpoaWRkZW5QYW5lbHMpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yRnJvbnRlbmRDbGllbnRRdDo6YnJpbmdUb0Zyb250KToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckZyb250ZW5kQ2xpZW50UXQ6OmNsb3NlV2luZG93KToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50UXQ6OmF0dGFjaFdpbmRvdyk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0OjpkZXRhY2hXaW5kb3cpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdDo6c2V0QXR0YWNoZWRXaW5kb3dI
ZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdDo6aW5z
cGVjdGVkVVJMQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENs
aWVudFF0Ojp1cGRhdGVXaW5kb3dUaXRsZSk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvSW5z
cGVjdG9yQ2xpZW50UXQuaDoKKwogMjAxMC0wMy0xNSAgTGFzemxvIEdvbWJvcyAgPGxhc3psby4x
LmdvbWJvc0Bub2tpYS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZC4KZGlmZiAtLWdpdCBhL1dl
YktpdC9xdC9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRRdC5jcHAgYi9XZWJLaXQvcXQv
V2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50UXQuY3BwCmluZGV4IGNkZTY0YzguLjliZjdi
MmUgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRR
dC5jcHAKKysrIGIvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudFF0LmNw
cApAQCAtODEsMTUgKzgxLDEyIEBAIHZvaWQgSW5zcGVjdG9yQ2xpZW50UXQ6Omluc3BlY3RvckRl
c3Ryb3llZCgpCiAgICAgZGVsZXRlIHRoaXM7CiB9CiAKLVBhZ2UqIEluc3BlY3RvckNsaWVudFF0
OjpjcmVhdGVQYWdlKCkKLXsKLSAgICBRV2ViVmlldyogaW5zcGVjdG9yVmlldyA9IG1faW5zcGVj
dG9yVmlldy5nZXQoKTsKLSAgICBpZiAoIWluc3BlY3RvclZpZXcpIHsKLSAgICAgICAgaW5zcGVj
dG9yVmlldyA9IG5ldyBRV2ViVmlldzsKLSAgICAgICAgSW5zcGVjdG9yQ2xpZW50V2ViUGFnZSog
aW5zcGVjdG9yUGFnZSA9IG5ldyBJbnNwZWN0b3JDbGllbnRXZWJQYWdlKGluc3BlY3RvclZpZXcp
OwotICAgICAgICBpbnNwZWN0b3JWaWV3LT5zZXRQYWdlKGluc3BlY3RvclBhZ2UpOwotICAgICAg
ICBtX2luc3BlY3RvclZpZXcuc2V0KGluc3BlY3RvclZpZXcpOwotICAgIH0KKyAgICAKK3ZvaWQg
SW5zcGVjdG9yQ2xpZW50UXQ6Om9wZW5JbnNwZWN0b3JGcm9udGVuZChXZWJDb3JlOjpJbnNwZWN0
b3JDb250cm9sbGVyKikKK3sKKyAgICBRV2ViVmlldyogaW5zcGVjdG9yVmlldyA9IG5ldyBRV2Vi
VmlldzsKKyAgICBJbnNwZWN0b3JDbGllbnRXZWJQYWdlKiBpbnNwZWN0b3JQYWdlID0gbmV3IElu
c3BlY3RvckNsaWVudFdlYlBhZ2UoaW5zcGVjdG9yVmlldyk7CisgICAgaW5zcGVjdG9yVmlldy0+
c2V0UGFnZShpbnNwZWN0b3JQYWdlKTsKIAogICAgIFFVcmwgaW5zcGVjdG9yVXJsID0gbV9pbnNw
ZWN0ZWRXZWJQYWdlLT5zZXR0aW5ncygpLT5pbnNwZWN0b3JVcmwoKTsKICAgICBpZiAoIWluc3Bl
Y3RvclVybC5pc1ZhbGlkKCkpCkBAIC05OCw1MCArOTUsNyBAQCBQYWdlKiBJbnNwZWN0b3JDbGll
bnRRdDo6Y3JlYXRlUGFnZSgpCiAgICAgbV9pbnNwZWN0ZWRXZWJQYWdlLT5kLT5pbnNwZWN0b3JG
cm9udGVuZCA9IGluc3BlY3RvclZpZXc7CiAgICAgbV9pbnNwZWN0ZWRXZWJQYWdlLT5kLT5nZXRP
ckNyZWF0ZUluc3BlY3RvcigpLT5kLT5zZXRGcm9udGVuZChpbnNwZWN0b3JWaWV3KTsKIAotICAg
IHJldHVybiBpbnNwZWN0b3JWaWV3LT5wYWdlKCktPmQtPnBhZ2U7Ci19Ci0KLVN0cmluZyBJbnNw
ZWN0b3JDbGllbnRRdDo6bG9jYWxpemVkU3RyaW5nc1VSTCgpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBJbnNwZWN0b3JDbGllbnRR
dDo6aGlkZGVuUGFuZWxzKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBT
dHJpbmcoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDbGllbnRRdDo6c2hvd1dpbmRvdygpCi17Ci0g
ICAgdXBkYXRlV2luZG93VGl0bGUoKTsKLQotI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgbV9p
bnNwZWN0ZWRXZWJQYWdlLT5kLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnNldFdpbmRvd1Zpc2li
bGUodHJ1ZSwgdHJ1ZSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBJbnNwZWN0b3JDbGllbnRRdDo6Y2xv
c2VXaW5kb3coKQotewotI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgbV9pbnNwZWN0ZWRXZWJQ
YWdlLT5kLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnNldFdpbmRvd1Zpc2libGUoZmFsc2UpOwot
I2VuZGlmCi19Ci0KLXZvaWQgSW5zcGVjdG9yQ2xpZW50UXQ6OmF0dGFjaFdpbmRvdygpCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDbGllbnRRdDo6ZGV0YWNo
V2luZG93KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEluc3BlY3RvckNs
aWVudFF0OjpzZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCkKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIGluc3BlY3RvclZpZXctPnBhZ2UoKS0+ZC0+cGFnZS0+aW5zcGVjdG9y
Q29udHJvbGxlcigpLT5zZXRJbnNwZWN0b3JGcm9udGVuZENsaWVudChuZXcgSW5zcGVjdG9yRnJv
bnRlbmRDbGllbnRRdChtX2luc3BlY3RlZFdlYlBhZ2UsIGluc3BlY3RvclZpZXcpKTsKIH0KIAog
dm9pZCBJbnNwZWN0b3JDbGllbnRRdDo6aGlnaGxpZ2h0KE5vZGUqKQpAQCAtMTU0LDI1ICsxMDgs
NiBAQCB2b2lkIEluc3BlY3RvckNsaWVudFF0OjpoaWRlSGlnaGxpZ2h0KCkKICAgICBub3RJbXBs
ZW1lbnRlZCgpOwogfQogCi12b2lkIEluc3BlY3RvckNsaWVudFF0OjppbnNwZWN0ZWRVUkxDaGFu
Z2VkKGNvbnN0IFN0cmluZyYgbmV3VVJMKQotewotICAgIG1faW5zcGVjdGVkVVJMID0gbmV3VVJM
OwotICAgIHVwZGF0ZVdpbmRvd1RpdGxlKCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ2xpZW50UXQ6
Omluc3BlY3RvcldpbmRvd09iamVjdENsZWFyZWQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ2xpZW50UXQ6OnVwZGF0ZVdpbmRvd1RpdGxlKCkKLXsKLSAg
ICBpZiAobV9pbnNwZWN0ZWRXZWJQYWdlLT5kLT5pbnNwZWN0b3IpIHsKLSAgICAgICAgUVN0cmlu
ZyBjYXB0aW9uID0gUUNvcmVBcHBsaWNhdGlvbjo6dHJhbnNsYXRlKCJRV2ViUGFnZSIsICJXZWIg
SW5zcGVjdG9yIC0gJTIiKS5hcmcobV9pbnNwZWN0ZWRVUkwpOwotICAgICAgICBtX2luc3BlY3Rl
ZFdlYlBhZ2UtPmQtPmluc3BlY3Rvci0+c2V0V2luZG93VGl0bGUoY2FwdGlvbik7Ci0gICAgfQot
fQotCiB2b2lkIEluc3BlY3RvckNsaWVudFF0Ojpwb3B1bGF0ZVNldHRpbmcoY29uc3QgU3RyaW5n
JiBrZXksIFN0cmluZyogc2V0dGluZykKIHsKICAgICBRU2V0dGluZ3MgcXNldHRpbmdzOwpAQCAt
MjI2LDYgKzE2MSw4MSBAQCBzdGF0aWMgUVZhcmlhbnQgc2V0dGluZ1RvVmFyaWFudChjb25zdCBT
dHJpbmcmIHNldHRpbmcpCiAgICAgcmV0dXJuIHJldFZhbDsKIH0KIAorSW5zcGVjdG9yRnJvbnRl
bmRDbGllbnRRdDo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdChRV2ViUGFnZSogaW5zcGVjdGVk
V2ViUGFnZSwgUGFzc093blB0cjxRV2ViVmlldz4gaW5zcGVjdG9yVmlldykKKyAgICA6IEluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50TG9jYWwoaW5zcGVjdGVkV2ViUGFnZS0+ZC0+cGFnZS0+aW5zcGVj
dG9yQ29udHJvbGxlcigpLCBpbnNwZWN0b3JWaWV3LT5wYWdlKCktPmQtPnBhZ2UpIAorICAgICwg
bV9pbnNwZWN0ZWRXZWJQYWdlKGluc3BlY3RlZFdlYlBhZ2UpCisgICAgLCBtX2luc3BlY3RvclZp
ZXcoaW5zcGVjdG9yVmlldykKKyAgICAsIG1fZGVzdHJveWluZ0luc3BlY3RvclZpZXcoZmFsc2Up
Cit7Cit9CisKK3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdDo6ZnJvbnRlbmRMb2FkZWQo
KQoreworICAgIEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OmZyb250ZW5kTG9hZGVkKCk7
CisgICAgc2V0QXR0YWNoZWRXaW5kb3codHJ1ZSk7Cit9CisKK1N0cmluZyBJbnNwZWN0b3JGcm9u
dGVuZENsaWVudFF0Ojpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworU3RyaW5nIEluc3BlY3RvckZyb250ZW5k
Q2xpZW50UXQ6OmhpZGRlblBhbmVscygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBy
ZXR1cm4gU3RyaW5nKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdDo6YnJp
bmdUb0Zyb250KCkKK3sKKyAgICB1cGRhdGVXaW5kb3dUaXRsZSgpOworfQorCit2b2lkIEluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50UXQ6OmNsb3NlV2luZG93KCkKK3sKKyAgICBpZiAobV9kZXN0cm95
aW5nSW5zcGVjdG9yVmlldykKKyAgICAgICAgcmV0dXJuOworICAgIG1fZGVzdHJveWluZ0luc3Bl
Y3RvclZpZXcgPSB0cnVlOworCisgICAgLy8gQ2xlYXIgcmVmZXJlbmNlIGZyb20gUVdlYkluc3Bl
Y3RvciB0byB0aGUgZnJvbnRlbmQgdmlldy4KKyAgICBtX2luc3BlY3RlZFdlYlBhZ2UtPmQtPmdl
dE9yQ3JlYXRlSW5zcGVjdG9yKCktPmQtPnNldEZyb250ZW5kKDApOworI2lmIEVOQUJMRShJTlNQ
RUNUT1IpCisgICAgbV9pbnNwZWN0ZWRXZWJQYWdlLT5kLT5pbnNwZWN0b3JDb250cm9sbGVyKCkt
PmRpc2Nvbm5lY3RGcm9udGVuZCgpOworI2VuZGlmCisgICAgLy8gQ2xlYXIgcG9pbnRlciBiZWZv
cmUgZGVsZXRpbmcgV2ViVmlldyB0byBhdm9pZCByZWN1cnNpdmUgY2FsbHMgdG8gaXRzIGRlc3Ry
dWN0b3IuCisgICAgZGVsZXRlIG1faW5zcGVjdG9yVmlldy5yZWxlYXNlKCk7Cit9CisKK3ZvaWQg
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdDo6YXR0YWNoV2luZG93KCkKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCit2b2lkIEluc3BlY3RvckZyb250ZW5kQ2xpZW50UXQ6OmRldGFjaFdp
bmRvdygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBJbnNwZWN0b3JGcm9u
dGVuZENsaWVudFF0OjpzZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEluc3BlY3RvckZyb250ZW5kQ2xpZW50UXQ6Omlu
c3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJiBuZXdVUkwpCit7CisgICAgbV9pbnNwZWN0
ZWRVUkwgPSBuZXdVUkw7CisgICAgdXBkYXRlV2luZG93VGl0bGUoKTsKK30KKwordm9pZCBJbnNw
ZWN0b3JGcm9udGVuZENsaWVudFF0Ojp1cGRhdGVXaW5kb3dUaXRsZSgpCit7CisgICAgaWYgKG1f
aW5zcGVjdGVkV2ViUGFnZS0+ZC0+aW5zcGVjdG9yKSB7CisgICAgICAgIFFTdHJpbmcgY2FwdGlv
biA9IFFDb3JlQXBwbGljYXRpb246OnRyYW5zbGF0ZSgiUVdlYlBhZ2UiLCAiV2ViIEluc3BlY3Rv
ciAtICUyIikuYXJnKG1faW5zcGVjdGVkVVJMKTsKKyAgICAgICAgbV9pbnNwZWN0ZWRXZWJQYWdl
LT5kLT5pbnNwZWN0b3ItPnNldFdpbmRvd1RpdGxlKGNhcHRpb24pOworICAgIH0KK30KKwogfQog
CiAjaW5jbHVkZSAiSW5zcGVjdG9yQ2xpZW50UXQubW9jIgpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0
L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudFF0LmggYi9XZWJLaXQvcXQvV2ViQ29yZVN1
cHBvcnQvSW5zcGVjdG9yQ2xpZW50UXQuaAppbmRleCBjOTU0OGIwLi40YmVhZGFiIDEwMDY0NAot
LS0gYS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50UXQuaAorKysgYi9X
ZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50UXQuaApAQCAtMzEsNyArMzEs
OSBAQAogI2RlZmluZSBJbnNwZWN0b3JDbGllbnRRdF9oCiAKICNpbmNsdWRlICJJbnNwZWN0b3JD
bGllbnQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsLmgiCiAjaW5j
bHVkZSAiT3duUHRyLmgiCisjaW5jbHVkZSAiUGFzc093blB0ci5oIgogI2luY2x1ZGUgPFF0Q29y
ZS9RU3RyaW5nPgogCiBjbGFzcyBRV2ViUGFnZTsKQEAgLTQ4LDEzICs1MCwyOSBAQCBwdWJsaWM6
CiAKICAgICB2aXJ0dWFsIHZvaWQgaW5zcGVjdG9yRGVzdHJveWVkKCk7CiAKLSAgICB2aXJ0dWFs
IFBhZ2UqIGNyZWF0ZVBhZ2UoKTsKKyAgICB2aXJ0dWFsIHZvaWQgb3Blbkluc3BlY3RvckZyb250
ZW5kKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXIqKTsKKworICAgIHZpcnR1YWwgdm9pZCBo
aWdobGlnaHQoTm9kZSopOworICAgIHZpcnR1YWwgdm9pZCBoaWRlSGlnaGxpZ2h0KCk7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgcG9wdWxhdGVTZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5LCBTdHJpbmcq
IHZhbHVlKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RvcmVTZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5
LCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKKworcHJpdmF0ZToKKyAgICBRV2ViUGFnZSogbV9pbnNw
ZWN0ZWRXZWJQYWdlOworfTsKKworY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdCA6IHB1
YmxpYyBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsIHsKK3B1YmxpYzoKKyAgICBJbnNwZWN0
b3JGcm9udGVuZENsaWVudFF0KFFXZWJQYWdlKiBpbnNwZWN0ZWRXZWJQYWdlLCBQYXNzT3duUHRy
PFFXZWJWaWV3PiBpbnNwZWN0b3JWaWV3KTsKKworICAgIHZpcnR1YWwgdm9pZCBmcm9udGVuZExv
YWRlZCgpOwogCiAgICAgdmlydHVhbCBTdHJpbmcgbG9jYWxpemVkU3RyaW5nc1VSTCgpOwogCiAg
ICAgdmlydHVhbCBTdHJpbmcgaGlkZGVuUGFuZWxzKCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgc2hv
d1dpbmRvdygpOworICAgIHZpcnR1YWwgdm9pZCBicmluZ1RvRnJvbnQoKTsKICAgICB2aXJ0dWFs
IHZvaWQgY2xvc2VXaW5kb3coKTsKIAogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hXaW5kb3coKTsK
QEAgLTYyLDIwICs4MCwxNCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0QXR0YWNo
ZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KTsKIAotICAgIHZpcnR1YWwgdm9pZCBoaWdo
bGlnaHQoTm9kZSopOwotICAgIHZpcnR1YWwgdm9pZCBoaWRlSGlnaGxpZ2h0KCk7CiAgICAgdmly
dHVhbCB2b2lkIGluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJiBuZXdVUkwpOwogCi0g
ICAgdmlydHVhbCB2b2lkIHBvcHVsYXRlU2V0dGluZyhjb25zdCBTdHJpbmcmIGtleSwgU3RyaW5n
KiB2YWx1ZSk7Ci0gICAgdmlydHVhbCB2b2lkIHN0b3JlU2V0dGluZyhjb25zdCBTdHJpbmcmIGtl
eSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgaW5zcGVjdG9yV2lu
ZG93T2JqZWN0Q2xlYXJlZCgpOwotCiBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRlV2luZG93VGl0
bGUoKTsKICAgICBRV2ViUGFnZSogbV9pbnNwZWN0ZWRXZWJQYWdlOwogICAgIE93blB0cjxRV2Vi
Vmlldz4gbV9pbnNwZWN0b3JWaWV3OwogICAgIFFTdHJpbmcgbV9pbnNwZWN0ZWRVUkw7CisgICAg
Ym9vbCBtX2Rlc3Ryb3lpbmdJbnNwZWN0b3JWaWV3OwogfTsKIH0KIApkaWZmIC0tZ2l0IGEvV2Vi
S2l0L3dpbi9DaGFuZ2VMb2cgYi9XZWJLaXQvd2luL0NoYW5nZUxvZwppbmRleCBiNmEzMjAzLi43
ZDVhODdjIDEwMDY0NAotLS0gYS9XZWJLaXQvd2luL0NoYW5nZUxvZworKysgYi9XZWJLaXQvd2lu
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDEwLTAzLTE2ICBZdXJ5IFNlbWlraGF0c2t5
IDx5dXJ5c0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgUGF2ZWwgRmVsZG1h
bi4KKworICAgICAgICBJbnRyb2R1Y2UgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQgdGhhdCBwcm92
aWRlcyBJbnNwZWN0b3JGcm9udGVuZCB3aXRoIGFuIGludGVyZmFjZSB0byB0aGUgZW1iZWRkZXIu
IEluc3BlY3RvckNsaWVudCBub3cgc2VydmVzIGFzIGEgZGVsZWdhdGUgZm9yIEluc3BlY3RvckNv
bnRyb2xsZXIgYW5kIGRvZXMgbm90IGNvbnRhaW4gbWV0aG9kcyBmb3IgbWFuYWdpbmcgaW5zcGVj
dG9yIGZyb250ZW5kIHdpbmRvdy4gVGhhdCBhbGxvd3MgdG8gY3JlYXRlIHJlbW90ZSBJbnNwZWN0
b3JGcm9udGVuZEhvc3QuCisKKyAgICAgICAgSW50cm9kdWNlIEluc3BlY3RvckZyb250ZW5kQ2xp
ZW50IHRoYXQgd291bGQgcHJvdmlkZSBJbnNwZWN0b3JGcm9udGVuZCB3aXRoIGFuIGludGVyZmFj
ZSB0byB0aGUgZW1iZWRkZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTM1MDM2CisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JD
bGllbnQuY3BwOgorICAgICAgICAoV2ViSW5zcGVjdG9yQ2xpZW50OjpXZWJJbnNwZWN0b3JDbGll
bnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yQ2xpZW50Ojp+V2ViSW5zcGVjdG9yQ2xpZW50KToK
KyAgICAgICAgKFdlYkluc3BlY3RvckNsaWVudDo6b3Blbkluc3BlY3RvckZyb250ZW5kKToKKyAg
ICAgICAgKFdlYkluc3BlY3RvckNsaWVudDo6aGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYkluc3Bl
Y3RvckNsaWVudDo6aGlkZUhpZ2hsaWdodCk6CisgICAgICAgIChXZWJJbnNwZWN0b3JDbGllbnQ6
OnVwZGF0ZUhpZ2hsaWdodCk6CisgICAgICAgIChXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6
V2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRl
bmRDbGllbnQ6On5XZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3JGcm9udGVuZENsaWVudDo6ZnJvbnRlbmRMb2FkZWQpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yRnJvbnRlbmRDbGllbnQ6OmxvY2FsaXplZFN0cmluZ3NVUkwpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yRnJvbnRlbmRDbGllbnQ6OmhpZGRlblBhbmVscyk6CisgICAgICAgIChXZWJJbnNwZWN0
b3JGcm9udGVuZENsaWVudDo6YnJpbmdUb0Zyb250KToKKyAgICAgICAgKFdlYkluc3BlY3RvckZy
b250ZW5kQ2xpZW50OjpjbG9zZVdpbmRvdyk6CisgICAgICAgIChXZWJJbnNwZWN0b3JGcm9udGVu
ZENsaWVudDo6YXR0YWNoV2luZG93KToKKyAgICAgICAgKFdlYkluc3BlY3RvckZyb250ZW5kQ2xp
ZW50OjpkZXRhY2hXaW5kb3cpOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6
OnNldEF0dGFjaGVkV2luZG93SGVpZ2h0KToKKyAgICAgICAgKFdlYkluc3BlY3RvckZyb250ZW5k
Q2xpZW50OjppbnNwZWN0ZWRVUkxDaGFuZ2VkKToKKyAgICAgICAgKFdlYkluc3BlY3RvckZyb250
ZW5kQ2xpZW50OjpjbG9zZVdpbmRvd1dpdGhvdXROb3RpZmljYXRpb25zKToKKyAgICAgICAgKFdl
Ykluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpzaG93V2luZG93V2l0aG91dE5vdGlmaWNhdGlvbnMp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmRlc3Ryb3lJbnNwZWN0b3JW
aWV3KToKKyAgICAgICAgKFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50Ojp1cGRhdGVXaW5kb3dU
aXRsZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6b25HZXRNaW5NYXhJ
bmZvKToKKyAgICAgICAgKFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpvblNpemUpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6Om9uQ2xvc2UpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6Om9uU2V0Rm9jdXMpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yRnJvbnRlbmRDbGllbnQ6Om9uV2ViVmlld1dpbmRvd1Bvc0NoYW5naW5nKToKKyAgICAgICAg
KFdlYkluc3BlY3RvclduZFByb2MpOgorICAgICAgICAoV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGll
bnQ6OndpbmRvd1JlY2VpdmVkTWVzc2FnZSk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2Vi
SW5zcGVjdG9yQ2xpZW50Lmg6CisgICAgICAgIChXZWJJbnNwZWN0b3JDbGllbnQ6OmZyb250ZW5k
Q2xvc2luZyk6CisgICAgICAgICogV2ViSW5zcGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvcjo6YXR0YWNoKToKKyAgICAgICAgKFdlYkluc3BlY3Rvcjo6ZGV0YWNoKToKKwogMjAxMC0w
My0xNCAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IERhcmluIEFkbGVyLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9X
ZWJJbnNwZWN0b3JDbGllbnQuY3BwIGIvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJJbnNw
ZWN0b3JDbGllbnQuY3BwCmluZGV4IDZhMTBjMGQuLjE2YWQxNzIgMTAwNjQ0Ci0tLSBhL1dlYktp
dC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcAorKysgYi9XZWJLaXQv
d2luL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5jcHAKQEAgLTY5LDI1ICs2OSwx
MyBAQCBzdGF0aWMgQ0ZCdW5kbGVSZWYgZ2V0V2ViS2l0QnVuZGxlKCkKIAogV2ViSW5zcGVjdG9y
Q2xpZW50OjpXZWJJbnNwZWN0b3JDbGllbnQoV2ViVmlldyogd2ViVmlldykKICAgICA6IG1faW5z
cGVjdGVkV2ViVmlldyh3ZWJWaWV3KQotICAgICwgbV9od25kKDApCi0gICAgLCBtX3dlYlZpZXdI
d25kKDApCi0gICAgLCBtX3Nob3VsZEF0dGFjaFdoZW5TaG93bihmYWxzZSkKLSAgICAsIG1fYXR0
YWNoZWQoZmFsc2UpCiB7CiAgICAgQVNTRVJUKG1faW5zcGVjdGVkV2ViVmlldyk7Ci0KICAgICBt
X2luc3BlY3RlZFdlYlZpZXctPnZpZXdXaW5kb3coKE9MRV9IQU5ETEUqKSZtX2luc3BlY3RlZFdl
YlZpZXdId25kKTsKLQotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgd2luZG93IHNpemUvcG9zaXRp
b24gc2F2ZS9yZXN0b3JlCi0jaWYgMAotICAgIFtzZWxmIHNldFdpbmRvd0ZyYW1lQXV0b3NhdmVO
YW1lOkAiV2ViIEluc3BlY3RvciJdOwotI2VuZGlmCiB9CiAKIFdlYkluc3BlY3RvckNsaWVudDo6
fldlYkluc3BlY3RvckNsaWVudCgpCiB7Ci0gICAgaWYgKG1faHduZCkKLSAgICAgICAgOjpEZXN0
cm95V2luZG93KG1faHduZCk7CiB9CiAKIHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjppbnNwZWN0
b3JEZXN0cm95ZWQoKQpAQCAtOTUsMzUgKzgzLDMwIEBAIHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50
OjppbnNwZWN0b3JEZXN0cm95ZWQoKQogICAgIGRlbGV0ZSB0aGlzOwogfQogCi1QYWdlKiBXZWJJ
bnNwZWN0b3JDbGllbnQ6OmNyZWF0ZVBhZ2UoKQordm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6Om9w
ZW5JbnNwZWN0b3JGcm9udGVuZChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9s
bGVyKQogewogICAgIHJlZ2lzdGVyV2luZG93Q2xhc3MoKTsKIAotICAgIGlmIChtX2h3bmQpCi0g
ICAgICAgIDo6RGVzdHJveVdpbmRvdyhtX2h3bmQpOwotCi0gICAgbV9od25kID0gOjpDcmVhdGVX
aW5kb3dFeCgwLCBrV2ViSW5zcGVjdG9yV2luZG93Q2xhc3NOYW1lLCAwLCBXU19PVkVSTEFQUEVE
V0lORE9XLAorICAgIEhXTkQgZnJvbnRlbmRId25kID0gOjpDcmVhdGVXaW5kb3dFeCgwLCBrV2Vi
SW5zcGVjdG9yV2luZG93Q2xhc3NOYW1lLCAwLCBXU19PVkVSTEFQUEVEV0lORE9XLAogICAgICAg
ICBkZWZhdWx0V2luZG93UmVjdCgpLngoKSwgZGVmYXVsdFdpbmRvd1JlY3QoKS55KCksIGRlZmF1
bHRXaW5kb3dSZWN0KCkud2lkdGgoKSwgZGVmYXVsdFdpbmRvd1JlY3QoKS5oZWlnaHQoKSwKICAg
ICAgICAgMCwgMCwgMCwgMCk7CiAKLSAgICBpZiAoIW1faHduZCkKLSAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICA6OlNldFByb3AobV9od25kLCBrV2ViSW5zcGVjdG9yUG9pbnRlclByb3AsIHJlaW50
ZXJwcmV0X2Nhc3Q8SEFORExFPih0aGlzKSk7CisgICAgaWYgKCFmcm9udGVuZEh3bmQpCisgICAg
ICAgIHJldHVybjsKIAotICAgIG1fd2ViVmlldy5hZG9wdFJlZihXZWJWaWV3OjpjcmVhdGVJbnN0
YW5jZSgpKTsKKyAgICBDT01QdHI8V2ViVmlldz4gZnJvbnRlbmRXZWJWaWV3KEFkb3B0Q09NLCBX
ZWJWaWV3OjpjcmVhdGVJbnN0YW5jZSgpKTsKIAotICAgIGlmIChGQUlMRUQobV93ZWJWaWV3LT5z
ZXRIb3N0V2luZG93KChPTEVfSEFORExFKShVTE9ORzY0KW1faHduZCkpKQotICAgICAgICByZXR1
cm4gMDsKKyAgICBpZiAoRkFJTEVEKGZyb250ZW5kV2ViVmlldy0+c2V0SG9zdFdpbmRvdygoT0xF
X0hBTkRMRSkoVUxPTkc2NClmcm9udGVuZEh3bmQpKSkKKyAgICAgICAgcmV0dXJuOwogCiAgICAg
UkVDVCByZWN0OwotICAgIEdldENsaWVudFJlY3QobV9od25kLCAmcmVjdCk7Ci0gICAgaWYgKEZB
SUxFRChtX3dlYlZpZXctPmluaXRXaXRoRnJhbWUocmVjdCwgMCwgMCkpKQotICAgICAgICByZXR1
cm4gMDsKKyAgICBHZXRDbGllbnRSZWN0KGZyb250ZW5kSHduZCwgJnJlY3QpOworICAgIGlmIChG
QUlMRUQoZnJvbnRlbmRXZWJWaWV3LT5pbml0V2l0aEZyYW1lKHJlY3QsIDAsIDApKSkKKyAgICAg
ICAgcmV0dXJuOwogCiAgICAgQ09NUHRyPFdlYkluc3BlY3RvckRlbGVnYXRlPiBkZWxlZ2F0ZShB
ZG9wdENPTSwgV2ViSW5zcGVjdG9yRGVsZWdhdGU6OmNyZWF0ZUluc3RhbmNlKCkpOwotICAgIGlm
IChGQUlMRUQobV93ZWJWaWV3LT5zZXRVSURlbGVnYXRlKGRlbGVnYXRlLmdldCgpKSkpCi0gICAg
ICAgIHJldHVybiAwOworICAgIGlmIChGQUlMRUQoZnJvbnRlbmRXZWJWaWV3LT5zZXRVSURlbGVn
YXRlKGRlbGVnYXRlLmdldCgpKSkpCisgICAgICAgIHJldHVybjsKIAogICAgIC8vIEtlZXAgcHJl
ZmVyZW5jZXMgc2VwYXJhdGUgZnJvbSB0aGUgcmVzdCBvZiB0aGUgY2xpZW50LCBtYWtpbmcgc3Vy
ZSB3ZSBhcmUgdXNpbmcgZXhwZWN0ZWQgcHJlZmVyZW5jZSB2YWx1ZXMuCiAgICAgLy8gT25lIHJl
YXNvbiB0aGlzIGlzIGdvb2QgaXMgdGhhdCBpdCBrZWVwcyB0aGUgaW5zcGVjdG9yIG91dCBvZiBo
aXN0b3J5IHZpYSAicHJpdmF0ZSBicm93c2luZyIuCkBAIC0xMzQsNjYgKzExNywxMjYgQEAgUGFn
ZSogV2ViSW5zcGVjdG9yQ2xpZW50OjpjcmVhdGVQYWdlKCkKICAgICBDT01QdHI8V2ViUHJlZmVy
ZW5jZXM+IHRlbXBQcmVmZXJlbmNlcyhBZG9wdENPTSwgV2ViUHJlZmVyZW5jZXM6OmNyZWF0ZUlu
c3RhbmNlKCkpOwogICAgIENPTVB0cjxJV2ViUHJlZmVyZW5jZXM+IGlQcmVmZXJlbmNlczsKICAg
ICBpZiAoRkFJTEVEKHRlbXBQcmVmZXJlbmNlcy0+aW5pdFdpdGhJZGVudGlmaWVyKEJTdHJpbmco
TCJXZWJJbnNwZWN0b3JQcmVmZXJlbmNlcyIpLCAmaVByZWZlcmVuY2VzKSkpCi0gICAgICAgIHJl
dHVybiAwOworICAgICAgICByZXR1cm47CiAgICAgQ09NUHRyPFdlYlByZWZlcmVuY2VzPiBwcmVm
ZXJlbmNlcyhRdWVyeSwgaVByZWZlcmVuY2VzKTsKICAgICBpZiAoIXByZWZlcmVuY2VzKQotICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuOwogICAgIGlmIChGQUlMRUQocHJlZmVyZW5j
ZXMtPnNldEF1dG9zYXZlcyhGQUxTRSkpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0
dXJuOwogICAgIGlmIChGQUlMRUQocHJlZmVyZW5jZXMtPnNldFByaXZhdGVCcm93c2luZ0VuYWJs
ZWQoVFJVRSkpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuOwogICAgIGlmIChG
QUlMRUQocHJlZmVyZW5jZXMtPnNldExvYWRzSW1hZ2VzQXV0b21hdGljYWxseShUUlVFKSkpCi0g
ICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm47CiAgICAgaWYgKEZBSUxFRChwcmVmZXJl
bmNlcy0+c2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQoVFJVRSkpKQotICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgcmV0dXJuOwogICAgIGlmIChGQUlMRUQocHJlZmVyZW5jZXMtPnNldEFs
bG93c0FuaW1hdGVkSW1hZ2VzKFRSVUUpKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJl
dHVybjsKICAgICBpZiAoRkFJTEVEKHByZWZlcmVuY2VzLT5zZXRMb2Fkc0ltYWdlc0F1dG9tYXRp
Y2FsbHkoVFJVRSkpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuOwogICAgIGlm
IChGQUlMRUQocHJlZmVyZW5jZXMtPnNldFBsdWdJbnNFbmFibGVkKEZBTFNFKSkpCi0gICAgICAg
IHJldHVybiAwOworICAgICAgICByZXR1cm47CiAgICAgaWYgKEZBSUxFRChwcmVmZXJlbmNlcy0+
c2V0SmF2YUVuYWJsZWQoRkFMU0UpKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVy
bjsKICAgICBpZiAoRkFJTEVEKHByZWZlcmVuY2VzLT5zZXRVc2VyU3R5bGVTaGVldEVuYWJsZWQo
RkFMU0UpKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybjsKICAgICBpZiAoRkFJ
TEVEKHByZWZlcmVuY2VzLT5zZXRUYWJzVG9MaW5rcyhGQUxTRSkpKQotICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgcmV0dXJuOwogICAgIGlmIChGQUlMRUQocHJlZmVyZW5jZXMtPnNldE1pbmlt
dW1Gb250U2l6ZSgwKSkpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm47CiAgICAg
aWYgKEZBSUxFRChwcmVmZXJlbmNlcy0+c2V0TWluaW11bUxvZ2ljYWxGb250U2l6ZSg5KSkpCi0g
ICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm47CiAgICAgaWYgKEZBSUxFRChwcmVmZXJl
bmNlcy0+c2V0Rml4ZWRGb250RmFtaWx5KEJTdHJpbmcoTCJDb3VyaWVyIE5ldyIpKSkpCi0gICAg
ICAgIHJldHVybiAwOworICAgICAgICByZXR1cm47CiAgICAgaWYgKEZBSUxFRChwcmVmZXJlbmNl
cy0+c2V0RGVmYXVsdEZpeGVkRm9udFNpemUoMTMpKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgIHJldHVybjsKIAotICAgIGlmIChGQUlMRUQobV93ZWJWaWV3LT5zZXRQcmVmZXJlbmNlcyhw
cmVmZXJlbmNlcy5nZXQoKSkpKQotICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoRkFJTEVEKGZy
b250ZW5kV2ViVmlldy0+c2V0UHJlZmVyZW5jZXMocHJlZmVyZW5jZXMuZ2V0KCkpKSkKKyAgICAg
ICAgcmV0dXJuOwogCi0gICAgbV93ZWJWaWV3LT5zZXRQcm9oaWJpdHNNYWluRnJhbWVTY3JvbGxp
bmcoVFJVRSk7CisgICAgZnJvbnRlbmRXZWJWaWV3LT5zZXRQcm9oaWJpdHNNYWluRnJhbWVTY3Jv
bGxpbmcoVFJVRSk7CiAKLSAgICBpZiAoRkFJTEVEKG1fd2ViVmlldy0+dmlld1dpbmRvdyhyZWlu
dGVycHJldF9jYXN0PE9MRV9IQU5ETEUqPigmbV93ZWJWaWV3SHduZCkpKSkKLSAgICAgICAgcmV0
dXJuIDA7CisgICAgSFdORCBmcm9udGVuZFdlYlZpZXdId25kOworICAgIGlmIChGQUlMRUQoZnJv
bnRlbmRXZWJWaWV3LT52aWV3V2luZG93KHJlaW50ZXJwcmV0X2Nhc3Q8T0xFX0hBTkRMRSo+KCZm
cm9udGVuZFdlYlZpZXdId25kKSkpKQorICAgICAgICByZXR1cm47CiAKLSAgICBDT01QdHI8V2Vi
TXV0YWJsZVVSTFJlcXVlc3Q+IHJlcXVlc3Q7Ci0gICAgcmVxdWVzdC5hZG9wdFJlZihXZWJNdXRh
YmxlVVJMUmVxdWVzdDo6Y3JlYXRlSW5zdGFuY2UoKSk7CisgICAgQ09NUHRyPFdlYk11dGFibGVV
UkxSZXF1ZXN0PiByZXF1ZXN0KEFkb3B0Q09NLCBXZWJNdXRhYmxlVVJMUmVxdWVzdDo6Y3JlYXRl
SW5zdGFuY2UoKSk7CiAKICAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IGh0bWxVUkxSZWYoQWRvcHRD
RiwgQ0ZCdW5kbGVDb3B5UmVzb3VyY2VVUkwoZ2V0V2ViS2l0QnVuZGxlKCksIENGU1RSKCJpbnNw
ZWN0b3IiKSwgQ0ZTVFIoImh0bWwiKSwgQ0ZTVFIoImluc3BlY3RvciIpKSk7CiAgICAgaWYgKCFo
dG1sVVJMUmVmKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuOwogCiAgICAgQ0ZT
dHJpbmdSZWYgdXJsU3RyaW5nUmVmID0gOjpDRlVSTEdldFN0cmluZyhodG1sVVJMUmVmLmdldCgp
KTsKICAgICBpZiAoRkFJTEVEKHJlcXVlc3QtPmluaXRXaXRoVVJMKEJTdHJpbmcodXJsU3RyaW5n
UmVmKSwgV2ViVVJMUmVxdWVzdFVzZVByb3RvY29sQ2FjaGVQb2xpY3ksIDYwKSkpCi0gICAgICAg
IHJldHVybiAwOworICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoRkFJTEVEKG1fd2ViVmlldy0+
dG9wTGV2ZWxGcmFtZSgpLT5sb2FkUmVxdWVzdChyZXF1ZXN0LmdldCgpKSkpCi0gICAgICAgIHJl
dHVybiAwOworICAgIGlmIChGQUlMRUQoZnJvbnRlbmRXZWJWaWV3LT50b3BMZXZlbEZyYW1lKCkt
PmxvYWRSZXF1ZXN0KHJlcXVlc3QuZ2V0KCkpKSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgcmV0
dXJuIGNvcmUobV93ZWJWaWV3LmdldCgpKTsKKyAgICBQYWdlKiBwYWdlID0gY29yZShmcm9udGVu
ZFdlYlZpZXcuZ2V0KCkpOworICAgIHBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0SW5z
cGVjdG9yRnJvbnRlbmRDbGllbnQobmV3IFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50KG1faW5z
cGVjdGVkV2ViVmlldywgbV9pbnNwZWN0ZWRXZWJWaWV3SHduZCwgZnJvbnRlbmRId25kLCBmcm9u
dGVuZFdlYlZpZXcsIGZyb250ZW5kV2ViVmlld0h3bmQsIHRoaXMpKTsKKyAgICBtX2Zyb250ZW5k
SHduZCA9IGZyb250ZW5kSHduZDsKIH0KIAordm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmhpZ2hs
aWdodChOb2RlKikKK3sKKyAgICBib29sIGNyZWF0aW5nSGlnaGxpZ2h0ID0gIW1faGlnaGxpZ2h0
OworCisgICAgaWYgKGNyZWF0aW5nSGlnaGxpZ2h0KQorICAgICAgICBtX2hpZ2hsaWdodC5zZXQo
bmV3IFdlYk5vZGVIaWdobGlnaHQobV9pbnNwZWN0ZWRXZWJWaWV3KSk7CiAKLVN0cmluZyBXZWJJ
bnNwZWN0b3JDbGllbnQ6OmxvY2FsaXplZFN0cmluZ3NVUkwoKQorICAgIGlmIChtX2hpZ2hsaWdo
dC0+aXNTaG93aW5nKCkpCisgICAgICAgIG1faGlnaGxpZ2h0LT51cGRhdGUoKTsKKyAgICBlbHNl
CisgICAgICAgIG1faGlnaGxpZ2h0LT5zZXRTaG93c1doaWxlV2ViVmlld0lzVmlzaWJsZSh0cnVl
KTsKKworICAgIGlmIChjcmVhdGluZ0hpZ2hsaWdodCAmJiBJc1dpbmRvd1Zpc2libGUobV9mcm9u
dGVuZEh3bmQpKQorICAgICAgICBtX2hpZ2hsaWdodC0+cGxhY2VCZWhpbmRXaW5kb3cobV9mcm9u
dGVuZEh3bmQpOworfQorCit2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6aGlkZUhpZ2hsaWdodCgp
Cit7CisgICAgaWYgKG1faGlnaGxpZ2h0KQorICAgICAgICBtX2hpZ2hsaWdodC0+c2V0U2hvd3NX
aGlsZVdlYlZpZXdJc1Zpc2libGUoZmFsc2UpOworfQorCit2b2lkIFdlYkluc3BlY3RvckNsaWVu
dDo6dXBkYXRlSGlnaGxpZ2h0KCkKK3sKKyAgICBpZiAobV9oaWdobGlnaHQgJiYgbV9oaWdobGln
aHQtPmlzU2hvd2luZygpKQorICAgICAgICBtX2hpZ2hsaWdodC0+dXBkYXRlKCk7Cit9CisKK1dl
Ykluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudChXZWJW
aWV3KiBpbnNwZWN0ZWRXZWJWaWV3LCBIV05EIGluc3BlY3RlZFdlYlZpZXdId25kLCBIV05EIGZy
b250ZW5kSHduZCwgY29uc3QgQ09NUHRyPFdlYlZpZXc+JiBmcm9udGVuZFdlYlZpZXcsIEhXTkQg
ZnJvbnRlbmRXZWJWaWV3SHduZCwgV2ViSW5zcGVjdG9yQ2xpZW50KiBpbnNwZWN0b3JDbGllbnQp
CisgICAgOiBJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsKGluc3BlY3RlZFdlYlZpZXctPnBh
Z2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLCAgY29yZShmcm9udGVuZFdlYlZpZXcuZ2V0KCkp
KQorICAgICwgbV9pbnNwZWN0ZWRXZWJWaWV3KGluc3BlY3RlZFdlYlZpZXcpCisgICAgLCBtX2lu
c3BlY3RlZFdlYlZpZXdId25kKGluc3BlY3RlZFdlYlZpZXdId25kKQorICAgICwgbV9pbnNwZWN0
b3JDbGllbnQoaW5zcGVjdG9yQ2xpZW50KQorICAgICwgbV9mcm9udGVuZEh3bmQoZnJvbnRlbmRI
d25kKQorICAgICwgbV9mcm9udGVuZFdlYlZpZXcoZnJvbnRlbmRXZWJWaWV3KQorICAgICwgbV9m
cm9udGVuZFdlYlZpZXdId25kKGZyb250ZW5kV2ViVmlld0h3bmQpCisgICAgLCBtX3Nob3VsZEF0
dGFjaFdoZW5TaG93bihmYWxzZSkKKyAgICAsIG1fYXR0YWNoZWQoZmFsc2UpCisgICAgLCBtX2Rl
c3Ryb3lpbmdJbnNwZWN0b3JWaWV3KGZhbHNlKQoreworICAgIDo6U2V0UHJvcChmcm9udGVuZEh3
bmQsIGtXZWJJbnNwZWN0b3JQb2ludGVyUHJvcCwgcmVpbnRlcnByZXRfY2FzdDxIQU5ETEU+KHRo
aXMpKTsKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHdpbmRvdyBzaXplL3Bvc2l0aW9uIHNhdmUv
cmVzdG9yZQorI2lmIDAKKyAgICBbc2VsZiBzZXRXaW5kb3dGcmFtZUF1dG9zYXZlTmFtZTpAIldl
YiBJbnNwZWN0b3IiXTsKKyNlbmRpZgorfQorCitXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6
fldlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50KCkKK3sKKyAgICBkZXN0cm95SW5zcGVjdG9yVmll
dygpOworfQorCit2b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50Ojpmcm9udGVuZExvYWRl
ZCgpCit7CisgICAgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDo6ZnJvbnRlbmRMb2FkZWQo
KTsKKworICAgIHNldEF0dGFjaGVkV2luZG93KG1fYXR0YWNoZWQpOworfQorCitTdHJpbmcgV2Vi
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmxvY2FsaXplZFN0cmluZ3NVUkwoKQogewogICAgIFJl
dGFpblB0cjxDRlVSTFJlZj4gdXJsKEFkb3B0Q0YsIENGQnVuZGxlQ29weVJlc291cmNlVVJMKGdl
dFdlYktpdEJ1bmRsZSgpLCBDRlNUUigibG9jYWxpemVkU3RyaW5ncyIpLCBDRlNUUigianMiKSwg
MCkpOwogICAgIGlmICghdXJsKQpAQCAtMjAyLDMxICsyNDUsMjMgQEAgU3RyaW5nIFdlYkluc3Bl
Y3RvckNsaWVudDo6bG9jYWxpemVkU3RyaW5nc1VSTCgpCiAgICAgcmV0dXJuIENGVVJMR2V0U3Ry
aW5nKHVybC5nZXQoKSk7CiB9CiAKLQotU3RyaW5nIFdlYkluc3BlY3RvckNsaWVudDo6aGlkZGVu
UGFuZWxzKCkKK1N0cmluZyBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6aGlkZGVuUGFuZWxz
KCkKIHsKICAgICAvLyBGSVhNRTogaW1wbGVtZW50IHRoaXMKICAgICByZXR1cm4gU3RyaW5nKCk7
CiB9CiAKLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpzaG93V2luZG93KCkKK3ZvaWQgV2ViSW5z
cGVjdG9yRnJvbnRlbmRDbGllbnQ6OmJyaW5nVG9Gcm9udCgpCiB7CiAgICAgc2hvd1dpbmRvd1dp
dGhvdXROb3RpZmljYXRpb25zKCk7Ci0gICAgbV9pbnNwZWN0ZWRXZWJWaWV3LT5wYWdlKCktPmlu
c3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0V2luZG93VmlzaWJsZSh0cnVlLCBtX3Nob3VsZEF0dGFj
aFdoZW5TaG93bik7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpjbG9zZVdpbmRvdygp
Ci17Ci0gICAgY2xvc2VXaW5kb3dXaXRob3V0Tm90aWZpY2F0aW9ucygpOwotICAgIG1faW5zcGVj
dGVkV2ViVmlldy0+cGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnNldFdpbmRvd1Zpc2li
bGUoZmFsc2UsIG1fc2hvdWxkQXR0YWNoV2hlblNob3duKTsKIH0KIAotYm9vbCBXZWJJbnNwZWN0
b3JDbGllbnQ6OndpbmRvd1Zpc2libGUoKQordm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVu
dDo6Y2xvc2VXaW5kb3coKQogewotICAgIHJldHVybiAhITo6SXNXaW5kb3dWaXNpYmxlKG1faHdu
ZCk7CisgICAgZGVzdHJveUluc3BlY3RvclZpZXcoKTsKIH0KIAotdm9pZCBXZWJJbnNwZWN0b3JD
bGllbnQ6OmF0dGFjaFdpbmRvdygpCit2b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50Ojph
dHRhY2hXaW5kb3coKQogewogICAgIGlmIChtX2F0dGFjaGVkKQogICAgICAgICByZXR1cm47CkBA
IC0yMzcsNyArMjcyLDcgQEAgdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmF0dGFjaFdpbmRvdygp
CiAgICAgc2hvd1dpbmRvd1dpdGhvdXROb3RpZmljYXRpb25zKCk7CiB9CiAKLXZvaWQgV2ViSW5z
cGVjdG9yQ2xpZW50OjpkZXRhY2hXaW5kb3coKQordm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZENs
aWVudDo6ZGV0YWNoV2luZG93KCkKIHsKICAgICBpZiAoIW1fYXR0YWNoZWQpCiAgICAgICAgIHJl
dHVybjsKQEAgLTI0OCw3ICsyODMsNyBAQCB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6ZGV0YWNo
V2luZG93KCkKICAgICBzaG93V2luZG93V2l0aG91dE5vdGlmaWNhdGlvbnMoKTsKIH0KIAotdm9p
ZCBXZWJJbnNwZWN0b3JDbGllbnQ6OnNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhl
aWdodCkKK3ZvaWQgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OnNldEF0dGFjaGVkV2luZG93
SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkKIHsKICAgICBpZiAoIW1fYXR0YWNoZWQpCiAgICAgICAg
IHJldHVybjsKQEAgLTI2NiwxMDEgKzMwMSw3MyBAQCB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6
c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KQogICAgIGludCB0b3RhbEhl
aWdodCA9IGhvc3RXaW5kb3dSZWN0LmJvdHRvbSAtIGhvc3RXaW5kb3dSZWN0LnRvcDsKICAgICBp
bnQgd2ViVmlld1dpZHRoID0gaW5zcGVjdGVkUmVjdC5yaWdodCAtIGluc3BlY3RlZFJlY3QubGVm
dDsKIAotICAgIFNldFdpbmRvd1BvcyhtX3dlYlZpZXdId25kLCAwLCAwLCB0b3RhbEhlaWdodCAt
IGhlaWdodCwgd2ViVmlld1dpZHRoLCBoZWlnaHQsIFNXUF9OT1pPUkRFUik7CisgICAgU2V0V2lu
ZG93UG9zKG1fZnJvbnRlbmRXZWJWaWV3SHduZCwgMCwgMCwgdG90YWxIZWlnaHQgLSBoZWlnaHQs
IHdlYlZpZXdXaWR0aCwgaGVpZ2h0LCBTV1BfTk9aT1JERVIpOwogCiAgICAgLy8gV2Ugd2FudCB0
byBzZXQgdGhlIGluc3BlY3RlZCB3ZWIgdmlldyBoZWlnaHQgdG8gdGhlIHRvdGFsSGVpZ2h0LCBi
ZWNhdXNlIHRoZSBoZWlnaHQgYWRqdXN0bWVudAogICAgIC8vIG9mIHRoZSBpbnNwZWN0ZWQgd2Vi
IHZpZXcgaGFwcGVucyBpbiBvbldlYlZpZXdXaW5kb3dQb3NDaGFuZ2luZywgbm90IGhlcmUuCiAg
ICAgU2V0V2luZG93UG9zKG1faW5zcGVjdGVkV2ViVmlld0h3bmQsIDAsIDAsIDAsIHdlYlZpZXdX
aWR0aCwgdG90YWxIZWlnaHQsIFNXUF9OT1pPUkRFUik7CiAKLSAgICBSZWRyYXdXaW5kb3cobV93
ZWJWaWV3SHduZCwgMCwgMCwgUkRXX0lOVkFMSURBVEUgfCBSRFdfQUxMQ0hJTERSRU4gfCBSRFdf
VVBEQVRFTk9XKTsgCisgICAgUmVkcmF3V2luZG93KG1fZnJvbnRlbmRXZWJWaWV3SHduZCwgMCwg
MCwgUkRXX0lOVkFMSURBVEUgfCBSRFdfQUxMQ0hJTERSRU4gfCBSRFdfVVBEQVRFTk9XKTsgCiAg
ICAgUmVkcmF3V2luZG93KG1faW5zcGVjdGVkV2ViVmlld0h3bmQsIDAsIDAsIFJEV19JTlZBTElE
QVRFIHwgUkRXX0FMTENISUxEUkVOIHwgUkRXX1VQREFURU5PVyk7CiB9CiAKLXZvaWQgV2ViSW5z
cGVjdG9yQ2xpZW50OjpoaWdobGlnaHQoTm9kZSopCi17Ci0gICAgYm9vbCBjcmVhdGluZ0hpZ2hs
aWdodCA9ICFtX2hpZ2hsaWdodDsKLQotICAgIGlmIChjcmVhdGluZ0hpZ2hsaWdodCkKLSAgICAg
ICAgbV9oaWdobGlnaHQuc2V0KG5ldyBXZWJOb2RlSGlnaGxpZ2h0KG1faW5zcGVjdGVkV2ViVmll
dykpOwotCi0gICAgaWYgKG1faGlnaGxpZ2h0LT5pc1Nob3dpbmcoKSkKLSAgICAgICAgbV9oaWdo
bGlnaHQtPnVwZGF0ZSgpOwotICAgIGVsc2UKLSAgICAgICAgbV9oaWdobGlnaHQtPnNldFNob3dz
V2hpbGVXZWJWaWV3SXNWaXNpYmxlKHRydWUpOwotCi0gICAgaWYgKGNyZWF0aW5nSGlnaGxpZ2h0
ICYmIElzV2luZG93VmlzaWJsZShtX2h3bmQpKQotICAgICAgICBtX2hpZ2hsaWdodC0+cGxhY2VC
ZWhpbmRXaW5kb3cobV9od25kKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OmhpZGVI
aWdobGlnaHQoKQotewotICAgIGlmIChtX2hpZ2hsaWdodCkKLSAgICAgICAgbV9oaWdobGlnaHQt
PnNldFNob3dzV2hpbGVXZWJWaWV3SXNWaXNpYmxlKGZhbHNlKTsKLX0KLQotdm9pZCBXZWJJbnNw
ZWN0b3JDbGllbnQ6Omluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJiBuZXdVUkwpCit2
b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjppbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0
IFN0cmluZyYgbmV3VVJMKQogewogICAgIG1faW5zcGVjdGVkVVJMID0gbmV3VVJMOwogICAgIHVw
ZGF0ZVdpbmRvd1RpdGxlKCk7CiB9CiAKLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjppbnNwZWN0
b3JXaW5kb3dPYmplY3RDbGVhcmVkKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12
b2lkIFdlYkluc3BlY3RvckNsaWVudDo6Y2xvc2VXaW5kb3dXaXRob3V0Tm90aWZpY2F0aW9ucygp
Cit2b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpjbG9zZVdpbmRvd1dpdGhvdXROb3Rp
ZmljYXRpb25zKCkKIHsKLSAgICBpZiAoIW1faHduZCkKKyAgICBpZiAoIW1fZnJvbnRlbmRId25k
KQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIW1fYXR0YWNoZWQpIHsKLSAgICAgICAgU2hv
d1dpbmRvdyhtX2h3bmQsIFNXX0hJREUpOworICAgICAgICBTaG93V2luZG93KG1fZnJvbnRlbmRI
d25kLCBTV19ISURFKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEFTU0VSVChtX3dl
YlZpZXcpOworICAgIEFTU0VSVChtX2Zyb250ZW5kV2ViVmlldyk7CiAgICAgQVNTRVJUKG1faW5z
cGVjdGVkV2ViVmlld0h3bmQpOwotICAgIEFTU0VSVCghSXNXaW5kb3dWaXNpYmxlKG1faHduZCkp
OworICAgIEFTU0VSVCghSXNXaW5kb3dWaXNpYmxlKG1fZnJvbnRlbmRId25kKSk7CiAKICAgICAv
LyBSZW1vdmUgdGhlIEluc3BlY3RvcidzIFdlYlZpZXcgZnJvbSB0aGUgaW5zcGVjdGVkIFdlYlZp
ZXcncyBwYXJlbnQgd2luZG93LgogICAgIFdpbmRvd01lc3NhZ2VCcm9hZGNhc3Rlcjo6cmVtb3Zl
TGlzdGVuZXIobV9pbnNwZWN0ZWRXZWJWaWV3SHduZCwgdGhpcyk7CiAKICAgICBtX2F0dGFjaGVk
ID0gZmFsc2U7CiAKLSAgICBtX3dlYlZpZXctPnNldEhvc3RXaW5kb3cocmVpbnRlcnByZXRfY2Fz
dDxPTEVfSEFORExFPihtX2h3bmQpKTsKKyAgICBtX2Zyb250ZW5kV2ViVmlldy0+c2V0SG9zdFdp
bmRvdyhyZWludGVycHJldF9jYXN0PE9MRV9IQU5ETEU+KG1fZnJvbnRlbmRId25kKSk7CiAKICAg
ICAvLyBNYWtlIHN1cmUgZXZlcnl0aGluZyBoYXMgdGhlIHJpZ2h0IHNpemUvcG9zaXRpb24uCiAg
ICAgSFdORCBob3N0V2luZG93OwogICAgIGlmIChTVUNDRUVERUQobV9pbnNwZWN0ZWRXZWJWaWV3
LT5ob3N0V2luZG93KChPTEVfSEFORExFKikmaG9zdFdpbmRvdykpKQogICAgICAgICBTZW5kTWVz
c2FnZShob3N0V2luZG93LCBXTV9TSVpFLCAwLCAwKTsKIAotICAgIGlmIChtX2hpZ2hsaWdodCAm
JiBtX2hpZ2hsaWdodC0+aXNTaG93aW5nKCkpCi0gICAgICAgIG1faGlnaGxpZ2h0LT51cGRhdGUo
KTsKKyAgICBtX2luc3BlY3RvckNsaWVudC0+dXBkYXRlSGlnaGxpZ2h0KCk7CiB9CiAKLXZvaWQg
V2ViSW5zcGVjdG9yQ2xpZW50OjpzaG93V2luZG93V2l0aG91dE5vdGlmaWNhdGlvbnMoKQordm9p
ZCBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6c2hvd1dpbmRvd1dpdGhvdXROb3RpZmljYXRp
b25zKCkKIHsKLSAgICBpZiAoIW1faHduZCkKKyAgICBpZiAoIW1fZnJvbnRlbmRId25kKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQobV93ZWJWaWV3KTsKKyAgICBBU1NFUlQobV9mcm9u
dGVuZFdlYlZpZXcpOwogICAgIEFTU0VSVChtX2luc3BlY3RlZFdlYlZpZXdId25kKTsKIAogICAg
IC8vIElmIG5vIHByZWZlcmVuY2UgaXMgc2V0IC0gZGVmYXVsdCB0byBhbiBhdHRhY2hlZCB3aW5k
b3cuIFRoaXMgaXMgaW1wb3J0YW50IGZvciBpbnNwZWN0b3IgTGF5b3V0VGVzdHMuCiAgICAgU3Ry
aW5nIHNob3VsZEF0dGFjaCA9IG1faW5zcGVjdGVkV2ViVmlldy0+cGFnZSgpLT5pbnNwZWN0b3JD
b250cm9sbGVyKCktPnNldHRpbmcoSW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zcGVjdG9yU3RhcnRz
QXR0YWNoZWRTZXR0aW5nTmFtZSgpKTsKICAgICBtX3Nob3VsZEF0dGFjaFdoZW5TaG93biA9IHNo
b3VsZEF0dGFjaCAhPSAiZmFsc2UiOwogICAgICAgICAKLSAgICBpZiAobV9zaG91bGRBdHRhY2hX
aGVuU2hvd24gJiYgIW1faW5zcGVjdGVkV2ViVmlldy0+cGFnZSgpLT5pbnNwZWN0b3JDb250cm9s
bGVyKCktPmNhbkF0dGFjaFdpbmRvdygpKQorICAgIGlmIChtX3Nob3VsZEF0dGFjaFdoZW5TaG93
biAmJiAhY2FuQXR0YWNoV2luZG93KCkpCiAgICAgICAgIG1fc2hvdWxkQXR0YWNoV2hlblNob3du
ID0gZmFsc2U7CiAgICAgCiAgICAgaWYgKCFtX3Nob3VsZEF0dGFjaFdoZW5TaG93bikgewogICAg
ICAgICAvLyBQdXQgdGhlIEluc3BlY3RvcidzIFdlYlZpZXcgaW5zaWRlIG91ciB3aW5kb3cgYW5k
IHNob3cgaXQuCi0gICAgICAgIG1fd2ViVmlldy0+c2V0SG9zdFdpbmRvdyhyZWludGVycHJldF9j
YXN0PE9MRV9IQU5ETEU+KG1faHduZCkpOwotICAgICAgICBTZW5kTWVzc2FnZShtX2h3bmQsIFdN
X1NJWkUsIDAsIDApOworICAgICAgICBtX2Zyb250ZW5kV2ViVmlldy0+c2V0SG9zdFdpbmRvdyhy
ZWludGVycHJldF9jYXN0PE9MRV9IQU5ETEU+KG1fZnJvbnRlbmRId25kKSk7CisgICAgICAgIFNl
bmRNZXNzYWdlKG1fZnJvbnRlbmRId25kLCBXTV9TSVpFLCAwLCAwKTsKICAgICAgICAgdXBkYXRl
V2luZG93VGl0bGUoKTsKIAotICAgICAgICBTZXRXaW5kb3dQb3MobV9od25kLCBIV05EX1RPUCwg
MCwgMCwgMCwgMCwgU1dQX1NIT1dXSU5ET1cgfCBTV1BfTk9NT1ZFIHwgU1dQX05PU0laRSk7Cisg
ICAgICAgIFNldFdpbmRvd1BvcyhtX2Zyb250ZW5kSHduZCwgSFdORF9UT1AsIDAsIDAsIDAsIDAs
IFNXUF9TSE9XV0lORE9XIHwgU1dQX05PTU9WRSB8IFNXUF9OT1NJWkUpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCkBAIC0zNzEsMjAgKzM3OCwzMiBAQCB2b2lkIFdlYkluc3BlY3RvckNsaWVu
dDo6c2hvd1dpbmRvd1dpdGhvdXROb3RpZmljYXRpb25zKCkKICAgICBpZiAoRkFJTEVEKG1faW5z
cGVjdGVkV2ViVmlldy0+aG9zdFdpbmRvdyhyZWludGVycHJldF9jYXN0PE9MRV9IQU5ETEUqPigm
aG9zdFdpbmRvdykpKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV93ZWJWaWV3LT5zZXRIb3N0
V2luZG93KHJlaW50ZXJwcmV0X2Nhc3Q8T0xFX0hBTkRMRT4oaG9zdFdpbmRvdykpOworICAgIG1f
ZnJvbnRlbmRXZWJWaWV3LT5zZXRIb3N0V2luZG93KHJlaW50ZXJwcmV0X2Nhc3Q8T0xFX0hBTkRM
RT4oaG9zdFdpbmRvdykpOwogCiAgICAgLy8gVGhlbiBoaWRlIG91ciBvd24gd2luZG93LgotICAg
IFNob3dXaW5kb3cobV9od25kLCBTV19ISURFKTsKKyAgICBTaG93V2luZG93KG1fZnJvbnRlbmRI
d25kLCBTV19ISURFKTsKIAogICAgIG1fYXR0YWNoZWQgPSB0cnVlOwogCiAgICAgLy8gTWFrZSBz
dXJlIGV2ZXJ5dGhpbmcgaGFzIHRoZSByaWdodCBzaXplL3Bvc2l0aW9uLgogICAgIFNlbmRNZXNz
YWdlKGhvc3RXaW5kb3csIFdNX1NJWkUsIDAsIDApOwotICAgIGlmIChtX2hpZ2hsaWdodCAmJiBt
X2hpZ2hsaWdodC0+aXNTaG93aW5nKCkpCi0gICAgICAgIG1faGlnaGxpZ2h0LT51cGRhdGUoKTsK
KyAgICBtX2luc3BlY3RvckNsaWVudC0+dXBkYXRlSGlnaGxpZ2h0KCk7Cit9CisKK3ZvaWQgV2Vi
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6OmRlc3Ryb3lJbnNwZWN0b3JWaWV3KCkKK3sKKyAgICBp
ZiAobV9kZXN0cm95aW5nSW5zcGVjdG9yVmlldykKKyAgICAgICAgcmV0dXJuOworICAgIG1fZGVz
dHJveWluZ0luc3BlY3RvclZpZXcgPSB0cnVlOworCisgICAgbV9pbnNwZWN0ZWRXZWJWaWV3LT5w
YWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+ZGlzY29ubmVjdEZyb250ZW5kKCk7CisKKyAg
ICBjbG9zZVdpbmRvd1dpdGhvdXROb3RpZmljYXRpb25zKCk7CisgICAgbV9pbnNwZWN0b3JDbGll
bnQtPmZyb250ZW5kQ2xvc2luZygpOworICAgIDo6RGVzdHJveVdpbmRvdyhtX2Zyb250ZW5kSHdu
ZCk7CiB9CiAKLXZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50Ojp1cGRhdGVXaW5kb3dUaXRsZSgpCit2
b2lkIFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50Ojp1cGRhdGVXaW5kb3dUaXRsZSgpCiB7CiAg
ICAgLy8gRklYTUU6IFRoZSBzZXJpZXMgb2YgYXBwZW5kcyBzaG91bGQgYmUgcmVwbGFjZWQgd2l0
aCBhIGNhbGwgdG8gU3RyaW5nOjpmb3JtYXQoKQogICAgIC8vIHdoZW4gaXQgY2FuIGJlIGZpZ3Vy
ZWQgb3V0IGhvdyB0byBnZXQgdGhlIHVuaWNvZGUgZW0tZGFzaCB0byBzaG93IHVwLgpAQCAtMzky
LDEwICs0MTEsMTAgQEAgdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OnVwZGF0ZVdpbmRvd1RpdGxl
KCkKICAgICB0aXRsZS5hcHBlbmQoKFVDaGFyKTB4MjAxNCk7IC8vIGVtLWRhc2gKICAgICB0aXRs
ZS5hcHBlbmQoJyAnKTsKICAgICB0aXRsZS5hcHBlbmQobV9pbnNwZWN0ZWRVUkwpOwotICAgIDo6
U2V0V2luZG93VGV4dChtX2h3bmQsIHRpdGxlLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9u
KCkpOworICAgIDo6U2V0V2luZG93VGV4dChtX2Zyb250ZW5kSHduZCwgdGl0bGUuY2hhcmFjdGVy
c1dpdGhOdWxsVGVybWluYXRpb24oKSk7CiB9CiAKLUxSRVNVTFQgV2ViSW5zcGVjdG9yQ2xpZW50
OjpvbkdldE1pbk1heEluZm8oV1BBUkFNLCBMUEFSQU0gbFBhcmFtKQorTFJFU1VMVCBXZWJJbnNw
ZWN0b3JGcm9udGVuZENsaWVudDo6b25HZXRNaW5NYXhJbmZvKFdQQVJBTSwgTFBBUkFNIGxQYXJh
bSkKIHsKICAgICBNSU5NQVhJTkZPKiBpbmZvID0gcmVpbnRlcnByZXRfY2FzdDxNSU5NQVhJTkZP
Kj4obFBhcmFtKTsKICAgICBQT0lOVCBzaXplID0gezQwMCwgNDAwfTsKQEAgLTQwNCwzMyArNDIz
LDMxIEBAIExSRVNVTFQgV2ViSW5zcGVjdG9yQ2xpZW50OjpvbkdldE1pbk1heEluZm8oV1BBUkFN
LCBMUEFSQU0gbFBhcmFtKQogICAgIHJldHVybiAwOwogfQogCi1MUkVTVUxUIFdlYkluc3BlY3Rv
ckNsaWVudDo6b25TaXplKFdQQVJBTSwgTFBBUkFNKQorTFJFU1VMVCBXZWJJbnNwZWN0b3JGcm9u
dGVuZENsaWVudDo6b25TaXplKFdQQVJBTSwgTFBBUkFNKQogewogICAgIFJFQ1QgcmVjdDsKLSAg
ICA6OkdldENsaWVudFJlY3QobV9od25kLCAmcmVjdCk7CisgICAgOjpHZXRDbGllbnRSZWN0KG1f
ZnJvbnRlbmRId25kLCAmcmVjdCk7CiAKLSAgICA6OlNldFdpbmRvd1BvcyhtX3dlYlZpZXdId25k
LCAwLCByZWN0LmxlZnQsIHJlY3QudG9wLCByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0LCByZWN0LmJv
dHRvbSAtIHJlY3QudG9wLCBTV1BfTk9aT1JERVIpOworICAgIDo6U2V0V2luZG93UG9zKG1fZnJv
bnRlbmRXZWJWaWV3SHduZCwgMCwgcmVjdC5sZWZ0LCByZWN0LnRvcCwgcmVjdC5yaWdodCAtIHJl
Y3QubGVmdCwgcmVjdC5ib3R0b20gLSByZWN0LnRvcCwgU1dQX05PWk9SREVSKTsKIAogICAgIHJl
dHVybiAwOwogfQogCi1MUkVTVUxUIFdlYkluc3BlY3RvckNsaWVudDo6b25DbG9zZShXUEFSQU0s
IExQQVJBTSkKK0xSRVNVTFQgV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ6Om9uQ2xvc2UoV1BB
UkFNLCBMUEFSQU0pCiB7Ci0gICAgOjpTaG93V2luZG93KG1faHduZCwgU1dfSElERSk7Ci0gICAg
bV9pbnNwZWN0ZWRXZWJWaWV3LT5wYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0V2lu
ZG93VmlzaWJsZShmYWxzZSwgbV9zaG91bGRBdHRhY2hXaGVuU2hvd24pOwotCi0gICAgaGlkZUhp
Z2hsaWdodCgpOworICAgIDo6U2hvd1dpbmRvdyhtX2Zyb250ZW5kSHduZCwgU1dfSElERSk7Cisg
ICAgbV9pbnNwZWN0ZWRXZWJWaWV3LT5wYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+Y2xv
c2UoKTsKIAogICAgIHJldHVybiAwOwogfQogCi1MUkVTVUxUIFdlYkluc3BlY3RvckNsaWVudDo6
b25TZXRGb2N1cygpCitMUkVTVUxUIFdlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50OjpvblNldEZv
Y3VzKCkKIHsKLSAgICBTZXRGb2N1cyhtX3dlYlZpZXdId25kKTsKKyAgICBTZXRGb2N1cyhtX2Zy
b250ZW5kV2ViVmlld0h3bmQpOwogICAgIHJldHVybiAwOwogfQogCi12b2lkIFdlYkluc3BlY3Rv
ckNsaWVudDo6b25XZWJWaWV3V2luZG93UG9zQ2hhbmdpbmcoV1BBUkFNLCBMUEFSQU0gbFBhcmFt
KQordm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6b25XZWJWaWV3V2luZG93UG9zQ2hh
bmdpbmcoV1BBUkFNLCBMUEFSQU0gbFBhcmFtKQogewogICAgIEFTU0VSVChtX2F0dGFjaGVkKTsK
IApAQCAtNDQxLDE3ICs0NTgsMTcgQEAgdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6Om9uV2ViVmll
d1dpbmRvd1Bvc0NoYW5naW5nKFdQQVJBTSwgTFBBUkFNIGxQYXJhbSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgUkVDVCBpbnNwZWN0b3JSZWN0OwotICAgIEdldENsaWVudFJlY3QobV93ZWJWaWV3
SHduZCwgJmluc3BlY3RvclJlY3QpOworICAgIEdldENsaWVudFJlY3QobV9mcm9udGVuZFdlYlZp
ZXdId25kLCAmaW5zcGVjdG9yUmVjdCk7CiAgICAgdW5zaWduZWQgaW5zcGVjdG9ySGVpZ2h0ID0g
aW5zcGVjdG9yUmVjdC5ib3R0b20gLSBpbnNwZWN0b3JSZWN0LnRvcDsKIAogICAgIHdpbmRvd1Bv
cy0+Y3kgLT0gaW5zcGVjdG9ySGVpZ2h0OwogCi0gICAgU2V0V2luZG93UG9zKG1fd2ViVmlld0h3
bmQsIDAsIHdpbmRvd1Bvcy0+eCwgd2luZG93UG9zLT55ICsgd2luZG93UG9zLT5jeSwgd2luZG93
UG9zLT5jeCwgaW5zcGVjdG9ySGVpZ2h0LCBTV1BfTk9aT1JERVIpOworICAgIFNldFdpbmRvd1Bv
cyhtX2Zyb250ZW5kV2ViVmlld0h3bmQsIDAsIHdpbmRvd1Bvcy0+eCwgd2luZG93UG9zLT55ICsg
d2luZG93UG9zLT5jeSwgd2luZG93UG9zLT5jeCwgaW5zcGVjdG9ySGVpZ2h0LCBTV1BfTk9aT1JE
RVIpOwogfQogCiBzdGF0aWMgTFJFU1VMVCBDQUxMQkFDSyBXZWJJbnNwZWN0b3JXbmRQcm9jKEhX
TkQgaHduZCwgVUlOVCBtc2csIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCiB7Ci0gICAg
V2ViSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQgPSByZWludGVycHJldF9jYXN0PFdlYkluc3BlY3Rv
ckNsaWVudCo+KDo6R2V0UHJvcChod25kLCBrV2ViSW5zcGVjdG9yUG9pbnRlclByb3ApKTsKKyAg
ICBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudCogY2xpZW50ID0gcmVpbnRlcnByZXRfY2FzdDxX
ZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudCo+KDo6R2V0UHJvcChod25kLCBrV2ViSW5zcGVjdG9y
UG9pbnRlclByb3ApKTsKICAgICBpZiAoIWNsaWVudCkKICAgICAgICAgcmV0dXJuIDo6RGVmV2lu
ZG93UHJvYyhod25kLCBtc2csIHdQYXJhbSwgbFBhcmFtKTsKIApAQCAtNDcxLDcgKzQ4OCw3IEBA
IHN0YXRpYyBMUkVTVUxUIENBTExCQUNLIFdlYkluc3BlY3RvclduZFByb2MoSFdORCBod25kLCBV
SU5UIG1zZywgV1BBUkFNIHdQYXJhbSwKICAgICByZXR1cm4gOjpEZWZXaW5kb3dQcm9jKGh3bmQs
IG1zZywgd1BhcmFtLCBsUGFyYW0pOwogfQogCi12b2lkIFdlYkluc3BlY3RvckNsaWVudDo6d2lu
ZG93UmVjZWl2ZWRNZXNzYWdlKEhXTkQsIFVJTlQgbXNnLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0g
bFBhcmFtKQordm9pZCBXZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudDo6d2luZG93UmVjZWl2ZWRN
ZXNzYWdlKEhXTkQsIFVJTlQgbXNnLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQogewog
ICAgIHN3aXRjaCAobXNnKSB7CiAgICAgICAgIGNhc2UgV01fV0lORE9XUE9TQ0hBTkdJTkc6CmRp
ZmYgLS1naXQgYS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5o
IGIvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuaAppbmRleCAz
ZjY1YjBhLi40NTVlM2ExIDEwMDY0NAotLS0gYS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dl
Ykluc3BlY3RvckNsaWVudC5oCisrKyBiL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViSW5z
cGVjdG9yQ2xpZW50LmgKQEAgLTMxLDYgKzMxLDcgQEAKIAogI2luY2x1ZGUgPFdlYkNvcmUvQ09N
UHRyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JDbGllbnQuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L1BsYXRmb3JtU3RyaW5nLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9XaW5kb3dNZXNzYWdlTGlzdGVu
ZXIuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CkBAIC0zOSw0NCArNDAsNjAgQEAKIGNsYXNz
IFdlYk5vZGVIaWdobGlnaHQ7CiBjbGFzcyBXZWJWaWV3OwogCi1jbGFzcyBXZWJJbnNwZWN0b3JD
bGllbnQgOiBwdWJsaWMgV2ViQ29yZTo6SW5zcGVjdG9yQ2xpZW50LCBXZWJDb3JlOjpXaW5kb3dN
ZXNzYWdlTGlzdGVuZXIgeworY2xhc3MgV2ViSW5zcGVjdG9yQ2xpZW50IDogcHVibGljIFdlYkNv
cmU6Okluc3BlY3RvckNsaWVudCB7CiBwdWJsaWM6CiAgICAgV2ViSW5zcGVjdG9yQ2xpZW50KFdl
YlZpZXcqKTsKIAogICAgIC8vIEluc3BlY3RvckNsaWVudAogICAgIHZpcnR1YWwgdm9pZCBpbnNw
ZWN0b3JEZXN0cm95ZWQoKTsKIAotICAgIHZpcnR1YWwgV2ViQ29yZTo6UGFnZSogY3JlYXRlUGFn
ZSgpOwotCi0gICAgdmlydHVhbCBXZWJDb3JlOjpTdHJpbmcgbG9jYWxpemVkU3RyaW5nc1VSTCgp
OwotCi0gICAgdmlydHVhbCBXZWJDb3JlOjpTdHJpbmcgaGlkZGVuUGFuZWxzKCk7Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgc2hvd1dpbmRvdygpOwotICAgIHZpcnR1YWwgdm9pZCBjbG9zZVdpbmRvdygp
OwotICAgIHZpcnR1YWwgYm9vbCB3aW5kb3dWaXNpYmxlKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
YXR0YWNoV2luZG93KCk7Ci0gICAgdmlydHVhbCB2b2lkIGRldGFjaFdpbmRvdygpOwotCi0gICAg
dmlydHVhbCB2b2lkIHNldEF0dGFjaGVkV2luZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCk7Cisg
ICAgdmlydHVhbCB2b2lkIG9wZW5JbnNwZWN0b3JGcm9udGVuZChXZWJDb3JlOjpJbnNwZWN0b3JD
b250cm9sbGVyKik7CiAKICAgICB2aXJ0dWFsIHZvaWQgaGlnaGxpZ2h0KFdlYkNvcmU6Ok5vZGUq
KTsKICAgICB2aXJ0dWFsIHZvaWQgaGlkZUhpZ2hsaWdodCgpOwogCi0gICAgdmlydHVhbCB2b2lk
IGluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBuZXdVUkwpOwotCiAg
ICAgdmlydHVhbCB2b2lkIHBvcHVsYXRlU2V0dGluZyhjb25zdCBXZWJDb3JlOjpTdHJpbmcmIGtl
eSwgV2ViQ29yZTo6U3RyaW5nKiB2YWx1ZSk7CiAgICAgdmlydHVhbCB2b2lkIHN0b3JlU2V0dGlu
Zyhjb25zdCBXZWJDb3JlOjpTdHJpbmcmIGtleSwgY29uc3QgV2ViQ29yZTo6U3RyaW5nJiB2YWx1
ZSk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgaW5zcGVjdG9yV2luZG93T2JqZWN0Q2xlYXJlZCgpOwor
ICAgIHZvaWQgdXBkYXRlSGlnaGxpZ2h0KCk7CisgICAgdm9pZCBmcm9udGVuZENsb3NpbmcoKSB7
IG1fZnJvbnRlbmRId25kID0gMDsgfQogCiBwcml2YXRlOgogICAgIH5XZWJJbnNwZWN0b3JDbGll
bnQoKTsKIAorICAgIFdlYlZpZXcqIG1faW5zcGVjdGVkV2ViVmlldzsKKyAgICBIV05EIG1faW5z
cGVjdGVkV2ViVmlld0h3bmQ7CisgICAgSFdORCBtX2Zyb250ZW5kSHduZDsKKworICAgIE93blB0
cjxXZWJOb2RlSGlnaGxpZ2h0PiBtX2hpZ2hsaWdodDsKK307CisKK2NsYXNzIFdlYkluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50IDogcHVibGljIFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50
TG9jYWwsIFdlYkNvcmU6OldpbmRvd01lc3NhZ2VMaXN0ZW5lciB7CitwdWJsaWM6CisgICAgV2Vi
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQoV2ViVmlldyogaW5zcGVjdGVkV2ViVmlldywgSFdORCBp
bnNwZWN0ZWRXZWJWaWV3SHduZCwgSFdORCBmcm9udGVuZEh3bmQsIGNvbnN0IENPTVB0cjxXZWJW
aWV3PiYgZnJvdG5lbmRXZWJWaWV3LCBIV05EIGZyb250ZW5kV2ViVmlld0h3bmQsIFdlYkluc3Bl
Y3RvckNsaWVudCogaW5zcGVjdG9yQ2xpZW50KTsKKworICAgIHZpcnR1YWwgdm9pZCBmcm9udGVu
ZExvYWRlZCgpOworICAgIAorICAgIHZpcnR1YWwgV2ViQ29yZTo6U3RyaW5nIGxvY2FsaXplZFN0
cmluZ3NVUkwoKTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OlN0cmluZyBoaWRkZW5QYW5lbHMoKTsK
KyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgYnJpbmdUb0Zyb250KCk7CisgICAgdmlydHVhbCB2b2lk
IGNsb3NlV2luZG93KCk7CisgICAgCisgICAgdmlydHVhbCB2b2lkIGF0dGFjaFdpbmRvdygpOwor
ICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hXaW5kb3coKTsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KTsKKyAgICB2aXJ0dWFsIHZv
aWQgaW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpTdHJpbmcmIG5ld1VSTCk7CisK
K3ByaXZhdGU6CisgICAgfldlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50KCk7CisKICAgICB2b2lk
IGNsb3NlV2luZG93V2l0aG91dE5vdGlmaWNhdGlvbnMoKTsKICAgICB2b2lkIHNob3dXaW5kb3dX
aXRob3V0Tm90aWZpY2F0aW9ucygpOwogCisgICAgdm9pZCBkZXN0cm95SW5zcGVjdG9yVmlldygp
OworCiAgICAgdm9pZCB1cGRhdGVXaW5kb3dUaXRsZSgpOwogCiAgICAgTFJFU1VMVCBvbkdldE1p
bk1heEluZm8oV1BBUkFNLCBMUEFSQU0pOwpAQCAtOTAsMTYgKzEwNywxNiBAQCBwcml2YXRlOgog
CiAgICAgV2ViVmlldyogbV9pbnNwZWN0ZWRXZWJWaWV3OwogICAgIEhXTkQgbV9pbnNwZWN0ZWRX
ZWJWaWV3SHduZDsKLSAgICBIV05EIG1faHduZDsKLSAgICBDT01QdHI8V2ViVmlldz4gbV93ZWJW
aWV3OwotICAgIEhXTkQgbV93ZWJWaWV3SHduZDsKKyAgICBIV05EIG1fZnJvbnRlbmRId25kOwor
ICAgIFdlYkluc3BlY3RvckNsaWVudCogbV9pbnNwZWN0b3JDbGllbnQ7CisgICAgQ09NUHRyPFdl
YlZpZXc+IG1fZnJvbnRlbmRXZWJWaWV3OworICAgIEhXTkQgbV9mcm9udGVuZFdlYlZpZXdId25k
OwogCiAgICAgYm9vbCBtX3Nob3VsZEF0dGFjaFdoZW5TaG93bjsKICAgICBib29sIG1fYXR0YWNo
ZWQ7CiAKLSAgICBPd25QdHI8V2ViTm9kZUhpZ2hsaWdodD4gbV9oaWdobGlnaHQ7Ci0KICAgICBX
ZWJDb3JlOjpTdHJpbmcgbV9pbnNwZWN0ZWRVUkw7CisgICAgYm9vbCBtX2Rlc3Ryb3lpbmdJbnNw
ZWN0b3JWaWV3OwogCiAgICAgc3RhdGljIGZyaWVuZCBMUkVTVUxUIENBTExCQUNLIFdlYkluc3Bl
Y3RvclduZFByb2MoSFdORCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0pOwogfTsKZGlmZiAtLWdpdCBh
L1dlYktpdC93aW4vV2ViSW5zcGVjdG9yLmNwcCBiL1dlYktpdC93aW4vV2ViSW5zcGVjdG9yLmNw
cAppbmRleCBlNGFjMzJiLi4wMzM3NzExIDEwMDY0NAotLS0gYS9XZWJLaXQvd2luL1dlYkluc3Bl
Y3Rvci5jcHAKKysrIGIvV2ViS2l0L3dpbi9XZWJJbnNwZWN0b3IuY3BwCkBAIC0xMzEsMTkgKzEz
MSwxMSBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkluc3BlY3Rvcjo6Y2xvc2UoKQog
CiBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkluc3BlY3Rvcjo6YXR0YWNoKCkKIHsKLSAg
ICBpZiAobV93ZWJWaWV3KQotICAgICAgICBpZiAoUGFnZSogcGFnZSA9IG1fd2ViVmlldy0+cGFn
ZSgpKQotICAgICAgICAgICAgcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5hdHRhY2hXaW5k
b3coKTsKLQogICAgIHJldHVybiBTX09LOwogfQogCiBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IFdlYkluc3BlY3Rvcjo6ZGV0YWNoKCkKIHsKLSAgICBpZiAobV93ZWJWaWV3KQotICAgICAgICBp
ZiAoUGFnZSogcGFnZSA9IG1fd2ViVmlldy0+cGFnZSgpKQotICAgICAgICAgICAgcGFnZS0+aW5z
cGVjdG9yQ29udHJvbGxlcigpLT5kZXRhY2hXaW5kb3coKTsKLQogICAgIHJldHVybiBTX09LOwog
fQogCmRpZmYgLS1naXQgYS9XZWJLaXQvd3gvQ2hhbmdlTG9nIGIvV2ViS2l0L3d4L0NoYW5nZUxv
ZwppbmRleCBkZjJhODlmLi44ODUwZjViIDEwMDY0NAotLS0gYS9XZWJLaXQvd3gvQ2hhbmdlTG9n
CisrKyBiL1dlYktpdC93eC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMC0wMy0xNiAg
WXVyeSBTZW1pa2hhdHNreSA8eXVyeXNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IFBhdmVsIEZlbGRtYW4uCisKKyAgICAgICAgSW50cm9kdWNlIEluc3BlY3RvckZyb250ZW5k
Q2xpZW50IHRoYXQgcHJvdmlkZXMgSW5zcGVjdG9yRnJvbnRlbmQgd2l0aCBhbiBpbnRlcmZhY2Ug
dG8gdGhlIGVtYmVkZGVyLiBJbnNwZWN0b3JDbGllbnQgbm93IHNlcnZlcyBhcyBhIGRlbGVnYXRl
IGZvciBJbnNwZWN0b3JDb250cm9sbGVyIGFuZCBkb2VzIG5vdCBjb250YWluIG1ldGhvZHMgZm9y
IG1hbmFnaW5nIGluc3BlY3RvciBmcm9udGVuZCB3aW5kb3cuIFRoYXQgYWxsb3dzIHRvIGNyZWF0
ZSByZW1vdGUgSW5zcGVjdG9yRnJvbnRlbmRIb3N0LgorCisgICAgICAgIEludHJvZHVjZSBJbnNw
ZWN0b3JGcm9udGVuZENsaWVudCB0aGF0IHdvdWxkIHByb3ZpZGUgSW5zcGVjdG9yRnJvbnRlbmQg
d2l0aCBhbiBpbnRlcmZhY2UgdG8gdGhlIGVtYmVkZGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNTAzNgorCisgICAgICAgICogV2ViS2l0U3VwcG9y
dC9JbnNwZWN0b3JDbGllbnRXeC5jcHA6CisgICAgICAgICogV2ViS2l0U3VwcG9ydC9JbnNwZWN0
b3JDbGllbnRXeC5oOgorCiAyMDEwLTAzLTExICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBh
cHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQgSHlhdHQuCmRpZmYgLS1naXQg
YS9XZWJLaXQvd3gvV2ViS2l0U3VwcG9ydC9JbnNwZWN0b3JDbGllbnRXeC5jcHAgYi9XZWJLaXQv
d3gvV2ViS2l0U3VwcG9ydC9JbnNwZWN0b3JDbGllbnRXeC5jcHAKaW5kZXggZmYyMWFlMC4uNDNm
YmIyYiAxMDA2NDQKLS0tIGEvV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50
V3guY3BwCisrKyBiL1dlYktpdC93eC9XZWJLaXRTdXBwb3J0L0luc3BlY3RvckNsaWVudFd4LmNw
cApAQCAtNDcsNDUgKzQ3LDggQEAgdm9pZCBJbnNwZWN0b3JDbGllbnRXeDo6aW5zcGVjdG9yRGVz
dHJveWVkKCkKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1QYWdlKiBJbnNwZWN0b3JDbGll
bnRXeDo6Y3JlYXRlUGFnZSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4g
MDsKLX0KLQotU3RyaW5nIEluc3BlY3RvckNsaWVudFd4Ojpsb2NhbGl6ZWRTdHJpbmdzVVJMKCkK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotU3Ry
aW5nIEluc3BlY3RvckNsaWVudFd4OjpoaWRkZW5QYW5lbHMoKQotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi12b2lkIEluc3BlY3RvckNsaWVudFd4
OjpzaG93V2luZG93KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotICAgIAotdm9pZCBJ
bnNwZWN0b3JDbGllbnRXeDo6Y2xvc2VXaW5kb3coKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ2xpZW50V3g6OmF0dGFjaFdpbmRvdygpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDbGllbnRXeDo6ZGV0YWNoV2luZG93
KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQogCi12b2lkIEluc3BlY3RvckNsaWVudFd4
OjpzZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWlnaHQpCit2b2lkIEluc3BlY3Rv
ckNsaWVudFd4OjpvcGVuSW5zcGVjdG9yRnJvbnRlbmQoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJv
bGxlciopOwogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CkBAIC0xMDAsMTEgKzYzLDYgQEAg
dm9pZCBJbnNwZWN0b3JDbGllbnRXeDo6aGlkZUhpZ2hsaWdodCgpCiAgICAgbm90SW1wbGVtZW50
ZWQoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDbGllbnRXeDo6aW5zcGVjdGVkVVJMQ2hhbmdlZChj
b25zdCBTdHJpbmcmIG5ld1VSTCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCiB2b2lk
IEluc3BlY3RvckNsaWVudFd4Ojpwb3B1bGF0ZVNldHRpbmcoY29uc3QgU3RyaW5nJiBrZXksIFN0
cmluZyogc2V0dGluZykKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwpAQCAtMTE1LDkgKzczLDQg
QEAgdm9pZCBJbnNwZWN0b3JDbGllbnRXeDo6c3RvcmVTZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5
LCBjb25zdCBTdHJpbmcmIHNldHRpbmcpCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JDbGllbnRXeDo6aW5zcGVjdG9yV2luZG93T2JqZWN0Q2xlYXJlZCgpCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQogfTsKZGlmZiAtLWdpdCBhL1dlYktpdC93eC9XZWJL
aXRTdXBwb3J0L0luc3BlY3RvckNsaWVudFd4LmggYi9XZWJLaXQvd3gvV2ViS2l0U3VwcG9ydC9J
bnNwZWN0b3JDbGllbnRXeC5oCmluZGV4IGY5MDU4MTcuLjc2NzVkYzEgMTAwNjQ0Ci0tLSBhL1dl
YktpdC93eC9XZWJLaXRTdXBwb3J0L0luc3BlY3RvckNsaWVudFd4LmgKKysrIGIvV2ViS2l0L3d4
L1dlYktpdFN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50V3guaApAQCAtNDEsMjkgKzQxLDEzIEBAIHB1
YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0b3JEZXN0cm95ZWQoKTsKIAotICAgIHZp
cnR1YWwgUGFnZSogY3JlYXRlUGFnZSgpOwotCi0gICAgdmlydHVhbCBTdHJpbmcgbG9jYWxpemVk
U3RyaW5nc1VSTCgpOwotCi0gICAgdmlydHVhbCBTdHJpbmcgaGlkZGVuUGFuZWxzKCk7Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgc2hvd1dpbmRvdygpOwotICAgIHZpcnR1YWwgdm9pZCBjbG9zZVdpbmRv
dygpOwotCi0gICAgdmlydHVhbCB2b2lkIGF0dGFjaFdpbmRvdygpOwotICAgIHZpcnR1YWwgdm9p
ZCBkZXRhY2hXaW5kb3coKTsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRBdHRhY2hlZFdpbmRvd0hl
aWdodCh1bnNpZ25lZCBoZWlnaHQpOworICAgIHZpcnR1YWwgdm9pZCBvcGVuSW5zcGVjdG9yRnJv
bnRlbmQoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlciopOwogCiAgICAgdmlydHVhbCB2b2lk
IGhpZ2hsaWdodChOb2RlKik7CiAgICAgdmlydHVhbCB2b2lkIGhpZGVIaWdobGlnaHQoKTsKIAot
ICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmluZyYgbmV3VVJM
KTsKLQogICAgIHZpcnR1YWwgdm9pZCBwb3B1bGF0ZVNldHRpbmcoY29uc3QgU3RyaW5nJiBrZXks
IFN0cmluZyogdmFsdWUpOwogICAgIHZpcnR1YWwgdm9pZCBzdG9yZVNldHRpbmcoY29uc3QgU3Ry
aW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpOwotCi0gICAgdmlydHVhbCB2b2lkIGluc3Bl
Y3RvcldpbmRvd09iamVjdENsZWFyZWQoKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
      

    </bug>

</bugzilla>