<?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>20294</bug_id>
          
          <creation_ts>2008-08-05 17:47:28 -0700</creation_ts>
          <short_desc>Move more Frame methods into ScriptController</short_desc>
          <delta_ts>2008-08-06 03:43:43 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</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="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>zwarich</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>87914</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-08-05 17:47:28 -0700</bug_when>
    <thetext>Long ago darin (I think) sorted the methods in Frame.h into comment blocks denoting where they should all go.  A bunch were destined for a future ScriptController... most of them got moved when SC was created.  I&apos;ve now moved the rest of them!  I also went ahead and cleaned up some of the plugin code at the same time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>87915</commentid>
    <comment_count>1</comment_count>
      <attachid>22670</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-08-05 17:59:00 -0700</bug_when>
    <thetext>Created attachment 22670
Move more methods from Frame into ScriptController

 WebCore/WebCore.NPAPI.exp                         |    3 +-
 WebCore/WebCore.base.exp                          |    6 +-
 WebCore/WebCore.xcodeproj/project.pbxproj         |    4 +
 WebCore/bindings/js/ScriptController.cpp          |  134 +++++++++++++++++++-
 WebCore/bindings/js/ScriptController.h            |   54 ++++++++
 WebCore/bindings/objc/DOM.mm                      |    3 +-
 WebCore/bindings/objc/DOMInternal.mm              |    2 +-
 WebCore/bridge/jni/jni_jsobject.mm                |    2 +-
 WebCore/html/HTMLAppletElement.cpp                |   33 +----
 WebCore/html/HTMLAppletElement.h                  |   11 +--
 WebCore/html/HTMLEmbedElement.cpp                 |   40 ++-----
 WebCore/html/HTMLEmbedElement.h                   |   11 +--
 WebCore/html/HTMLObjectElement.cpp                |   32 +----
 WebCore/html/HTMLObjectElement.h                  |    2 +-
 WebCore/html/HTMLPlugInElement.cpp                |   72 +++++------
 WebCore/html/HTMLPlugInElement.h                  |   12 +-
 WebCore/loader/FrameLoader.cpp                    |   12 +-
 WebCore/page/Frame.cpp                            |  120 ++----------------
 WebCore/page/Frame.h                              |   44 +------
 WebCore/page/FramePrivate.h                       |   42 +------
 WebCore/page/gtk/FrameGtk.cpp                     |   30 -----
 WebCore/page/mac/FrameMac.mm                      |  141 +++------------------
 WebCore/page/qt/FrameQt.cpp                       |   96 --------------
 WebCore/page/win/FrameWin.cpp                     |   48 +-------
 WebKit/mac/Plugins/WebBaseNetscapePluginView.mm   |    5 +-
 WebKit/mac/Plugins/WebPluginController.mm         |    5 +-
 WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm |    6 +-
 WebKit/mac/WebView/WebFrame.mm                    |    2 +-
 WebKit/mac/WebView/WebScriptDebugger.mm           |   25 ++--
 WebKit/mac/WebView/WebView.mm                     |    2 +-
 30 files changed, 328 insertions(+), 671 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>87917</commentid>
    <comment_count>2</comment_count>
      <attachid>22671</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-08-05 18:27:38 -0700</bug_when>
    <thetext>Created attachment 22671
Move more methods from Frame into ScriptController

 WebCore/GNUmakefile.am                            |    1 +
 WebCore/WebCore.NPAPI.exp                         |    3 +-
 WebCore/WebCore.base.exp                          |    6 +-
 WebCore/WebCore.pro                               |    1 +
 WebCore/WebCore.vcproj/WebCore.vcproj             |    4 +
 WebCore/WebCore.xcodeproj/project.pbxproj         |    4 +
 WebCore/bindings/js/ScriptController.cpp          |  134 ++++++++++++++++-
 WebCore/bindings/js/ScriptController.h            |   54 +++++++
 WebCore/bindings/js/ScriptControllerGtk.cpp       |   48 ++++++
 WebCore/bindings/js/ScriptControllerMac.mm        |  168 +++++++++++++++++++++
 WebCore/bindings/js/ScriptControllerQt.cpp        |   61 ++++++++
 WebCore/bindings/js/ScriptControllerWin.cpp       |   45 ++++++
 WebCore/bindings/objc/DOM.mm                      |    3 +-
 WebCore/bindings/objc/DOMInternal.mm              |    2 +-
 WebCore/bridge/jni/jni_jsobject.mm                |    2 +-
 WebCore/html/HTMLAppletElement.cpp                |   33 +---
 WebCore/html/HTMLAppletElement.h                  |   11 +--
 WebCore/html/HTMLEmbedElement.cpp                 |   40 +----
 WebCore/html/HTMLEmbedElement.h                   |   11 +--
 WebCore/html/HTMLObjectElement.cpp                |   32 +----
 WebCore/html/HTMLObjectElement.h                  |    2 +-
 WebCore/html/HTMLPlugInElement.cpp                |   72 ++++-----
 WebCore/html/HTMLPlugInElement.h                  |   12 +-
 WebCore/loader/FrameLoader.cpp                    |   12 +-
 WebCore/page/Frame.cpp                            |  120 ++-------------
 WebCore/page/Frame.h                              |   44 +-----
 WebCore/page/FramePrivate.h                       |   42 +-----
 WebCore/page/gtk/FrameGtk.cpp                     |   30 ----
 WebCore/page/mac/FrameMac.mm                      |  141 ++---------------
 WebCore/page/qt/FrameQt.cpp                       |   96 ------------
 WebCore/page/win/FrameWin.cpp                     |   48 +------
 WebKit/mac/Plugins/WebBaseNetscapePluginView.mm   |    5 +-
 WebKit/mac/Plugins/WebPluginController.mm         |    5 +-
 WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm |    6 +-
 WebKit/mac/WebView/WebFrame.mm                    |    2 +-
 WebKit/mac/WebView/WebScriptDebugger.mm           |   25 ++--
 WebKit/mac/WebView/WebView.mm                     |    2 +-
 37 files changed, 656 insertions(+), 671 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>87918</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-08-05 18:32:15 -0700</bug_when>
    <thetext>The first patch I posted would have broken all the non-mac builds.  I think this one has a fair chance of compiling correctly on all platforms... however I wouldn&apos;t be surprised if there was something small I missed.

The patch is large... but thankfully it&apos;s mostly minus lines! :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>87923</commentid>
    <comment_count>4</comment_count>
      <attachid>22673</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-08-06 01:20:57 -0700</bug_when>
    <thetext>Created attachment 22673
Move more methods from Frame into ScriptController

 WebCore/GNUmakefile.am                            |    1 +
 WebCore/WebCore.NPAPI.exp                         |    3 +-
 WebCore/WebCore.base.exp                          |    7 +-
 WebCore/WebCore.pro                               |    1 +
 WebCore/WebCore.vcproj/WebCore.vcproj             |    4 +
 WebCore/WebCore.xcodeproj/project.pbxproj         |    4 +
 WebCore/bindings/js/ScriptController.cpp          |  136 ++++++++++++++++-
 WebCore/bindings/js/ScriptController.h            |   59 +++++++-
 WebCore/bindings/js/ScriptControllerGtk.cpp       |   48 ++++++
 WebCore/bindings/js/ScriptControllerMac.mm        |  168 +++++++++++++++++++++
 WebCore/bindings/js/ScriptControllerQt.cpp        |   61 ++++++++
 WebCore/bindings/js/ScriptControllerWin.cpp       |   45 ++++++
 WebCore/bindings/objc/DOM.mm                      |    3 +-
 WebCore/bindings/objc/DOMInternal.mm              |    2 +-
 WebCore/bridge/jni/jni_jsobject.mm                |    2 +-
 WebCore/html/HTMLAppletElement.cpp                |   33 +---
 WebCore/html/HTMLAppletElement.h                  |   11 +--
 WebCore/html/HTMLEmbedElement.cpp                 |   40 +----
 WebCore/html/HTMLEmbedElement.h                   |   11 +--
 WebCore/html/HTMLObjectElement.cpp                |   32 +----
 WebCore/html/HTMLObjectElement.h                  |    2 +-
 WebCore/html/HTMLPlugInElement.cpp                |   72 ++++-----
 WebCore/html/HTMLPlugInElement.h                  |   12 +-
 WebCore/loader/FrameLoader.cpp                    |   14 +-
 WebCore/page/Frame.cpp                            |  125 ++--------------
 WebCore/page/Frame.h                              |   47 +------
 WebCore/page/FramePrivate.h                       |   42 +-----
 WebCore/page/gtk/FrameGtk.cpp                     |   30 ----
 WebCore/page/mac/FrameMac.mm                      |  141 ++---------------
 WebCore/page/qt/FrameQt.cpp                       |   96 ------------
 WebCore/page/win/FrameWin.cpp                     |   48 +------
 WebKit/mac/Plugins/WebBaseNetscapePluginView.mm   |    5 +-
 WebKit/mac/Plugins/WebPluginController.mm         |    5 +-
 WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm |    6 +-
 WebKit/mac/WebView/WebFrame.mm                    |    2 +-
 WebKit/mac/WebView/WebScriptDebugger.mm           |   25 ++--
 WebKit/mac/WebView/WebView.mm                     |    2 +-
 37 files changed, 663 insertions(+), 682 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>87924</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-08-06 01:22:20 -0700</bug_when>
    <thetext>I&apos;ve now added a ChangeLog, fixed an ASSERT and removed a confusing method (Frame::clearScriptController() replacing it with a direct call to ScriptController::clear(), now renamed to ScriptController::clearWindowShell()) which had indirectly caused said ASSERT...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>87929</commentid>
    <comment_count>6</comment_count>
      <attachid>22674</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-08-06 02:45:12 -0700</bug_when>
    <thetext>Created attachment 22674
Move more methods from Frame into ScriptController

 WebCore/ChangeLog                                 |   89 +++++++++++
 WebCore/GNUmakefile.am                            |    1 +
 WebCore/WebCore.NPAPI.exp                         |    3 +-
 WebCore/WebCore.base.exp                          |    7 +-
 WebCore/WebCore.pro                               |    1 +
 WebCore/WebCore.vcproj/WebCore.vcproj             |    4 +
 WebCore/WebCore.xcodeproj/project.pbxproj         |    4 +
 WebCore/bindings/js/ScriptController.cpp          |  136 ++++++++++++++++-
 WebCore/bindings/js/ScriptController.h            |   59 +++++++-
 WebCore/bindings/js/ScriptControllerGtk.cpp       |   48 ++++++
 WebCore/bindings/js/ScriptControllerMac.mm        |  168 +++++++++++++++++++++
 WebCore/bindings/js/ScriptControllerQt.cpp        |   61 ++++++++
 WebCore/bindings/js/ScriptControllerWin.cpp       |   45 ++++++
 WebCore/bindings/objc/DOM.mm                      |    3 +-
 WebCore/bindings/objc/DOMInternal.mm              |    2 +-
 WebCore/bridge/jni/jni_jsobject.mm                |    2 +-
 WebCore/html/HTMLAppletElement.cpp                |   33 +---
 WebCore/html/HTMLAppletElement.h                  |   11 +--
 WebCore/html/HTMLEmbedElement.cpp                 |   40 +----
 WebCore/html/HTMLEmbedElement.h                   |   11 +--
 WebCore/html/HTMLObjectElement.cpp                |   32 +----
 WebCore/html/HTMLObjectElement.h                  |    2 +-
 WebCore/html/HTMLPlugInElement.cpp                |   72 ++++-----
 WebCore/html/HTMLPlugInElement.h                  |   12 +-
 WebCore/loader/FrameLoader.cpp                    |   14 +-
 WebCore/page/Frame.cpp                            |  125 ++--------------
 WebCore/page/Frame.h                              |   47 +------
 WebCore/page/FramePrivate.h                       |   42 +-----
 WebCore/page/gtk/FrameGtk.cpp                     |   30 ----
 WebCore/page/mac/FrameMac.mm                      |  141 ++---------------
 WebCore/page/qt/FrameQt.cpp                       |   96 ------------
 WebCore/page/win/FrameWin.cpp                     |   48 +------
 WebKit/mac/ChangeLog                              |   23 +++
 WebKit/mac/Plugins/WebBaseNetscapePluginView.mm   |    5 +-
 WebKit/mac/Plugins/WebPluginController.mm         |    5 +-
 WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm |    6 +-
 WebKit/mac/WebView/WebFrame.mm                    |    2 +-
 WebKit/mac/WebView/WebScriptDebugger.mm           |   25 ++--
 WebKit/mac/WebView/WebView.mm                     |    2 +-
 39 files changed, 775 insertions(+), 682 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>87930</commentid>
    <comment_count>7</comment_count>
      <attachid>22673</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-08-06 02:45:37 -0700</bug_when>
    <thetext>Comment on attachment 22673
Move more methods from Frame into ScriptController

Uploading a new one with ChangeLog.  Not sure what happened to the ChangeLog I made before...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>87931</commentid>
    <comment_count>8</comment_count>
      <attachid>22674</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-08-06 02:59:02 -0700</bug_when>
    <thetext>Comment on attachment 22674
Move more methods from Frame into ScriptController

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>87933</commentid>
    <comment_count>9</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-08-06 03:43:43 -0700</bug_when>
    <thetext>Landed. http://trac.webkit.org/changeset/35590</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22670</attachid>
            <date>2008-08-05 17:59:00 -0700</date>
            <delta_ts>2008-08-05 18:27:55 -0700</delta_ts>
            <desc>Move more methods from Frame into ScriptController</desc>
            <filename>Move-more-methods-from-Frame-into-ScriptController.patch</filename>
            <type>text/plain</type>
            <size>60609</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">MDY3OWRmOWE3ZjcwMzcyYTZiYzBiOGY4YWY2ZjdiNTVkM2FmYTc4OQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9XZWJDb3JlLk5QQVBJLmV4cCBiL1dlYkNvcmUvV2ViQ29yZS5OUEFQSS5leHAKaW5kZXgg
YjFjZTQ0Mi4uZmQxNWM1MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLk5QQVBJLmV4cAor
KysgYi9XZWJDb3JlL1dlYkNvcmUuTlBBUEkuZXhwCkBAIC0xNiw0ICsxNiw1IEBAIF9fTlBOX1Jl
dGFpbk9iamVjdAogX19OUE5fU2V0RXhjZXB0aW9uCiBfX05QTl9TZXRQcm9wZXJ0eQogX19OUE5f
VVRGOEZyb21JZGVudGlmaWVyCi1fX1pON1dlYkNvcmU1RnJhbWUyMHdpbmRvd1NjcmlwdE5QT2Jq
ZWN0RXYKK19fWk43V2ViQ29yZTE2U2NyaXB0Q29udHJvbGxlcjIwd2luZG93U2NyaXB0TlBPYmpl
Y3RFdgorX19aTjdXZWJDb3JlMTZTY3JpcHRDb250cm9sbGVyMjljbGVhbnVwU2NyaXB0T2JqZWN0
c0ZvclBsdWdpbkVQdgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwIGIvV2Vi
Q29yZS9XZWJDb3JlLmJhc2UuZXhwCmluZGV4IGQzYTM2NmMuLjIxZmEzMGMgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAorKysgYi9XZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAK
QEAgLTM2Miw2ICszNjIsNyBAQCBfX1pON1dlYkNvcmUxNk5hdmlnYXRpb25BY3Rpb25DMUVSS05T
XzRLVVJMRU5TXzEzRnJhbWVMb2FkVHlwZUViCiBfX1pON1dlYkNvcmUxNk5hdmlnYXRpb25BY3Rp
b25DMUVSS05TXzRLVVJMRU5TXzE0TmF2aWdhdGlvblR5cGVFCiBfX1pON1dlYkNvcmUxNk5hdmln
YXRpb25BY3Rpb25DMUV2CiBfX1pON1dlYkNvcmUxNlNjcmlwdENvbnRyb2xsZXIxMGluaXRTY3Jp
cHRFdgorX19aTjdXZWJDb3JlMTZTY3JpcHRDb250cm9sbGVyMTh3aW5kb3dTY3JpcHRPYmplY3RF
dgogX19aTjdXZWJDb3JlMTZjb2xvckZyb21OU0NvbG9yRVA3TlNDb2xvcgogX19aTjdXZWJDb3Jl
MTZjcmVhdGVGdWxsTWFya3VwRVBLTlNfNE5vZGVFCiBfX1pON1dlYkNvcmUxNmNyZWF0ZUZ1bGxN
YXJrdXBFUEtOU181UmFuZ2VFCkBAIC00NjEsMTYgKzQ2MiwxMyBAQCBfX1pON1dlYkNvcmU1RnJh
bWUxM3NldFpvb21GYWN0b3JFZmIKIF9fWk43V2ViQ29yZTVGcmFtZTE0ZnJhbWVGb3JXaWRnZXRF
UEtOU182V2lkZ2V0RQogX19aTjdXZWJDb3JlNUZyYW1lMTVzZW5kU2Nyb2xsRXZlbnRFdgogX19a
TjdXZWJDb3JlNUZyYW1lMTZhZGp1c3RQYWdlSGVpZ2h0RVBmZmZmCi1fX1pON1dlYkNvcmU1RnJh
bWUxN2JpbmRpbmdSb290T2JqZWN0RXYKIF9fWk43V2ViQ29yZTVGcmFtZTE3c2V0SXNEaXNjb25u
ZWN0ZWRFYgotX19aTjdXZWJDb3JlNUZyYW1lMTh3aW5kb3dTY3JpcHRPYmplY3RFdgogX19aTjdX
ZWJDb3JlNUZyYW1lMjBzZXRTZWxlY3Rpb25Gcm9tTm9uZUV2CiBfX1pON1dlYkNvcmU1RnJhbWUy
MW1hcmtBbGxNYXRjaGVzRm9yVGV4dEVSS05TXzZTdHJpbmdFYmoKIF9fWk43V2ViQ29yZTVGcmFt
ZTIxc2V0UHJvaGliaXRzU2Nyb2xsaW5nRWIKIF9fWk43V2ViQ29yZTVGcmFtZTI0Y29tcHV0ZUFu
ZFNldFR5cGluZ1N0eWxlRVBOU18xOUNTU1N0eWxlRGVjbGFyYXRpb25FTlNfMTBFZGl0QWN0aW9u
RQogX19aTjdXZWJDb3JlNUZyYW1lMjVtYXRjaExhYmVsc0FnYWluc3RFbGVtZW50RVA3TlNBcnJh
eVBOU183RWxlbWVudEUKIF9fWk43V2ViQ29yZTVGcmFtZTI4c2VhcmNoRm9yTGFiZWxzQmVmb3Jl
RWxlbWVudEVQN05TQXJyYXlQTlNfN0VsZW1lbnRFCi1fX1pON1dlYkNvcmU1RnJhbWUyOWNsZWFu
dXBTY3JpcHRPYmplY3RzRm9yUGx1Z2luRVB2CiBfX1pON1dlYkNvcmU1RnJhbWUyOWZvcmNlTGF5
b3V0V2l0aFBhZ2VXaWR0aFJhbmdlRWZmYgogX19aTjdXZWJDb3JlNUZyYW1lMzRzZXRNYXJrZWRU
ZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkRWIKIF9fWk43V2ViQ29yZTVGcmFtZTRpbml0RXYKQEAg
LTU2MSw2ICs1NTksNyBAQCBfX1pON1dlYkNvcmU4Rm9ybURhdGFEMUV2CiBfX1pON1dlYkNvcmU4
SW50UG9pbnRDMUVSSzhfTlNQb2ludAogX19aTjdXZWJDb3JlOFNldHRpbmdzMTRzZXRKYXZhRW5h
YmxlZEViCiBfX1pON1dlYkNvcmU4U2V0dGluZ3MxNnNldFVzZXNQYWdlQ2FjaGVFYgorX19aTjdX
ZWJDb3JlOFNldHRpbmdzMTZzZXRab29tc1RleHRPbmx5RWIKIF9fWk43V2ViQ29yZThTZXR0aW5n
czE3c2V0UGx1Z2luc0VuYWJsZWRFYgogX19aTjdXZWJDb3JlOFNldHRpbmdzMThzZXRET01QYXN0
ZUFsbG93ZWRFYgogX19aTjdXZWJDb3JlOFNldHRpbmdzMThzZXREZWZhdWx0Rm9udFNpemVFaQpA
QCAtNTc2LDcgKzU3NSw2IEBAIF9fWk43V2ViQ29yZThTZXR0aW5nczIyc2V0U2hvd3NVUkxzSW5U
b29sVGlwc0ViCiBfX1pON1dlYkNvcmU4U2V0dGluZ3MyM3NldERlZmF1bHRGaXhlZEZvbnRTaXpl
RWkKIF9fWk43V2ViQ29yZThTZXR0aW5nczIzc2V0RWRpdGFibGVMaW5rQmVoYXZpb3JFTlNfMjBF
ZGl0YWJsZUxpbmtCZWhhdmlvckUKIF9fWk43V2ViQ29yZThTZXR0aW5nczIzc2V0VXBkYXRlc1do
ZW5PZmZzY3JlZW5FYgotX19aTjdXZWJDb3JlOFNldHRpbmdzMTZzZXRab29tc1RleHRPbmx5RWIK
IF9fWk43V2ViQ29yZThTZXR0aW5nczI0c2V0VGV4dEFyZWFzQXJlUmVzaXphYmxlRWIKIF9fWk43
V2ViQ29yZThTZXR0aW5nczI1c2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZEViCiBfX1pON1dlYkNv
cmU4U2V0dGluZ3MyNXNldE1pbmltdW1Mb2dpY2FsRm9udFNpemVFaQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBjYzQ3MTk1Li5kOGYxMmJhIDEwMDY0NAot
LS0gYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjE4Niw2ICsyMTg2LDcg
QEAKIAkJQTgzQjc5NTUwQ0NCMDEyNTAwMEIwODI1IC8qIERPTVNWR0ZvbnRGYWNlRWxlbWVudElu
dGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
ODNCNzk0NjBDQ0IwMTI1MDAwQjA4MjUgLyogRE9NU1ZHRm9udEZhY2VFbGVtZW50SW50ZXJuYWwu
aCAqLzsgfTsKIAkJQTgzQjc5NTYwQ0NCMDEyNTAwMEIwODI1IC8qIERPTVNWR0ZvbnRGYWNlRWxl
bWVudC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4
M0I3OTQ3MENDQjAxMjUwMDBCMDgyNSAvKiBET01TVkdGb250RmFjZUVsZW1lbnQubW0gKi87IH07
CiAJCUE4M0I3OTU3MENDQjAxMjUwMDBCMDgyNSAvKiBET01TVkdGb250RmFjZUVsZW1lbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4M0I3OTQ4MEND
QjAxMjUwMDBCMDgyNSAvKiBET01TVkdGb250RmFjZUVsZW1lbnQuaCAqLzsgfTsKKwkJQTgzRTFD
NzQwRTQ5MDQyQzAwMTQwQjlDIC8qIFNjcmlwdENvbnRyb2xsZXJNYWMubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODNFMUM3MjBFNDkwNDJCMDAxNDBC
OUMgLyogU2NyaXB0Q29udHJvbGxlck1hYy5tbSAqLzsgfTsKIAkJQTg0RUJENzgwQ0I4Qzg5MjAw
MDc5NjA5IC8qIEpTU3R5bGVTaGVldExpc3RDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg0RUJENzcwQ0I4Qzg5MjAwMDc5NjA5IC8qIEpT
U3R5bGVTaGVldExpc3RDdXN0b20uY3BwICovOyB9OwogCQlBODRFQkQ4MzBDQjhDOTc3MDAwNzk2
MDkgLyogSlNTdHlsZVNoZWV0TGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTg0RUJEODEwQ0I4Qzk3NzAwMDc5NjA5IC8qIEpTU3R5bGVTaGVldExp
c3QuaCAqLzsgfTsKIAkJQTg0RUJEODQwQ0I4Qzk3NzAwMDc5NjA5IC8qIEpTU3R5bGVTaGVldExp
c3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg0
RUJEODIwQ0I4Qzk3NzAwMDc5NjA5IC8qIEpTU3R5bGVTaGVldExpc3QuY3BwICovOyB9OwpAQCAt
NjUyMCw2ICs2NTIxLDcgQEAKIAkJQTgzQjc5NDYwQ0NCMDEyNTAwMEIwODI1IC8qIERPTVNWR0Zv
bnRGYWNlRWxlbWVudEludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IERPTVNWR0ZvbnRGYWNlRWxlbWVudEludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUE4M0I3OTQ3MENDQjAxMjUwMDBCMDgyNSAvKiBET01TVkdGb250RmFjZUVsZW1lbnQu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBET01TVkdGb250RmFj
ZUVsZW1lbnQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4M0I3OTQ4MENDQjAx
MjUwMDBCMDgyNSAvKiBET01TVkdGb250RmFjZUVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRE9NU1ZHRm9udEZhY2VFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUE4M0UxQzcyMEU0OTA0MkIwMDE0MEI5QyAvKiBTY3JpcHRDb250cm9sbGVy
TWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU2NyaXB0Q29u
dHJvbGxlck1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTg0RUJENzcwQ0I4
Qzg5MjAwMDc5NjA5IC8qIEpTU3R5bGVTaGVldExpc3RDdXN0b20uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNTdHlsZVNoZWV0TGlzdEN1c3RvbS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4NEVCRDgxMENCOEM5NzcwMDA3OTYwOSAvKiBKU1N0
eWxlU2hlZXRMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU3R5bGVT
aGVldExpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTg0RUJEODIwQ0I4Qzk3
NzAwMDc5NjA5IC8qIEpTU3R5bGVTaGVldExpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSlNTdHlsZVNoZWV0TGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xMjMyMyw2ICsxMjMyNSw3IEBACiAJCQkJQkNBMzc4QkEwRDE1RjY0MjAwQjc5
M0Q2IC8qIFNjaGVkdWxlZEFjdGlvbi5jcHAgKi8sCiAJCQkJQkNBMzc4QkIwRDE1RjY0MjAwQjc5
M0Q2IC8qIFNjaGVkdWxlZEFjdGlvbi5oICovLAogCQkJCTkzQjcwRDUzMDlFQjBDN0MwMDlEODQ2
OCAvKiBTY3JpcHRDb250cm9sbGVyLmNwcCAqLywKKwkJCQlBODNFMUM3MjBFNDkwNDJCMDAxNDBC
OUMgLyogU2NyaXB0Q29udHJvbGxlck1hYy5tbSAqLywKIAkJCQk5M0I3MEQ1NDA5RUIwQzdDMDA5
RDg0NjggLyogU2NyaXB0Q29udHJvbGxlci5oICovLAogCQkJCTY1NDg4RDZBMERENUE4M0QwMDlE
ODNCMiAvKiBTdHJpbmdTb3VyY2VQcm92aWRlci5oICovLAogCQkJKTsKQEAgLTE3MDg4LDYgKzE3
MDkxLDcgQEAKIAkJCQlCQ0RGRDQ5NTBFMzA1OTJGMDA5RDEwQUQgLyogSlNYTUxIdHRwUmVxdWVz
dFVwbG9hZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTI4OEU3MjBFMzAwNUQ2MDAzNjE5QUUg
LyogV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMjg4RTc0
MEUzMDA1RDYwMDM2MTlBRSAvKiBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCUE4M0UxQzc0MEU0OTA0MkMwMDE0MEI5QyAvKiBTY3JpcHRDb250cm9sbGVyTWFj
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJv
Y2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Njcmlw
dENvbnRyb2xsZXIuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNw
cAppbmRleCA2ZDM0YmRkLi5mYzBkNzcwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NjcmlwdENvbnRyb2xsZXIuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29u
dHJvbGxlci5jcHAKQEAgLTI5LDE2ICsyOSwyNCBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5j
bHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJHQ0NvbnRyb2xsZXIuaCIKLSNpbmNsdWRl
ICJKU0RvY3VtZW50LmgiCiAjaW5jbHVkZSAiSlNET01XaW5kb3cuaCIKKyNpbmNsdWRlICJKU0Rv
Y3VtZW50LmgiCisjaW5jbHVkZSAiSlNFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAibnBydW50
aW1lX2ltcGwuaCIKKyNpbmNsdWRlICJOUF9qc29iamVjdC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIK
ICNpbmNsdWRlICJQYWdlR3JvdXAuaCIKKyNpbmNsdWRlICJydW50aW1lX3Jvb3QuaCIKICNpbmNs
dWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlN0cmluZ1NvdXJjZVByb3ZpZGVyLmgiCi0jaW5j
bHVkZSAiSlNFdmVudExpc3RlbmVyLmgiCisKICNpbmNsdWRlIDxranMvY29tcGxldGlvbi5oPgog
I2luY2x1ZGUgPGtqcy9kZWJ1Z2dlci5oPgogCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9B
UEkpCisjaW5jbHVkZSAiSFRNTFBsdWdJbkVsZW1lbnQuaCIKKyNlbmRpZgorCiAjaWYgRU5BQkxF
KFNWRykKICNpbmNsdWRlICJKU1NWR0xhenlFdmVudExpc3RlbmVyLmgiCiAjZW5kaWYKQEAgLTU0
LDcgKzYyLDIwIEBAIFNjcmlwdENvbnRyb2xsZXI6OlNjcmlwdENvbnRyb2xsZXIoRnJhbWUqIGZy
YW1lKQogICAgICwgbV9zb3VyY2VVUkwoMCkKICAgICAsIG1fcHJvY2Vzc2luZ1RpbWVyQ2FsbGJh
Y2soZmFsc2UpCiAgICAgLCBtX3BhdXNlZChmYWxzZSkKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExV
R0lOX0FQSSkKKyAgICAsIG1fd2luZG93U2NyaXB0TlBPYmplY3QoMCkKKyNlbmRpZgorI2lmIFBM
QVRGT1JNKE1BQykKKyAgICAsIG1fd2luZG93U2NyaXB0T2JqZWN0KDApCisjZW5kaWYKIHsKKyNp
ZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShNQUNfSkFWQV9CUklER0UpCisgICAgc3RhdGljIGJv
b2wgaW5pdGlhbGl6ZWRKYXZhSlNCaW5kaW5nczsKKyAgICBpZiAoIWluaXRpYWxpemVkSmF2YUpT
QmluZGluZ3MpIHsKKyAgICAgICAgaW5pdGlhbGl6ZWRKYXZhSlNCaW5kaW5ncyA9IHRydWU7Cisg
ICAgICAgIGluaXRKYXZhSlNCaW5kaW5ncygpOworICAgIH0KKyNlbmRpZgogfQogCiBTY3JpcHRD
b250cm9sbGVyOjp+U2NyaXB0Q29udHJvbGxlcigpCkBAIC02NSw2ICs4Niw4IEBAIFNjcmlwdENv
bnRyb2xsZXI6On5TY3JpcHRDb250cm9sbGVyKCkKICAgICAgICAgLy8gSXQncyBsaWtlbHkgdGhh
dCByZWxlYXNpbmcgdGhlIGdsb2JhbCBvYmplY3QgaGFzIGNyZWF0ZWQgYSBsb3Qgb2YgZ2FyYmFn
ZS4KICAgICAgICAgZ2NDb250cm9sbGVyKCkuZ2FyYmFnZUNvbGxlY3RTb29uKCk7CiAgICAgfQor
CisgICAgZGlzY29ubmVjdFBsYXRmb3JtU2NyaXB0T2JqZWN0cygpOwogfQogCiBKU1ZhbHVlKiBT
Y3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZShjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgaW50IGJh
c2VMaW5lLCBjb25zdCBTdHJpbmcmIHN0cikgCkBAIC0yMTUsNCArMjM4LDExMSBAQCB2b2lkIFNj
cmlwdENvbnRyb2xsZXI6OnVwZGF0ZURvY3VtZW50KCkKIH0KIAogCitCaW5kaW5nczo6Um9vdE9i
amVjdCogU2NyaXB0Q29udHJvbGxlcjo6YmluZGluZ1Jvb3RPYmplY3QoKQoreworICAgIGlmICgh
aXNFbmFibGVkKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKCFtX2JpbmRpbmdSb290
T2JqZWN0KQorICAgICAgICBtX2JpbmRpbmdSb290T2JqZWN0ID0gQmluZGluZ3M6OlJvb3RPYmpl
Y3Q6OmNyZWF0ZSgwLCBnbG9iYWxPYmplY3QoKSk7CisgICAgcmV0dXJuIG1fYmluZGluZ1Jvb3RP
YmplY3QuZ2V0KCk7Cit9CisKK1Bhc3NSZWZQdHI8QmluZGluZ3M6OlJvb3RPYmplY3Q+IFNjcmlw
dENvbnRyb2xsZXI6OmNyZWF0ZVJvb3RPYmplY3Qodm9pZCogbmF0aXZlSGFuZGxlKQoreworICAg
IFJvb3RPYmplY3RNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yb290T2JqZWN0cy5maW5kKG5hdGl2ZUhh
bmRsZSk7CisgICAgaWYgKGl0ICE9IG1fcm9vdE9iamVjdHMuZW5kKCkpCisgICAgICAgIHJldHVy
biBpdC0+c2Vjb25kOworCisgICAgUmVmUHRyPEJpbmRpbmdzOjpSb290T2JqZWN0PiByb290T2Jq
ZWN0ID0gQmluZGluZ3M6OlJvb3RPYmplY3Q6OmNyZWF0ZShuYXRpdmVIYW5kbGUsIGdsb2JhbE9i
amVjdCgpKTsKKworICAgIG1fcm9vdE9iamVjdHMuc2V0KG5hdGl2ZUhhbmRsZSwgcm9vdE9iamVj
dCk7CisgICAgcmV0dXJuIHJvb3RPYmplY3QucmVsZWFzZSgpOworfQorCisjaWYgRU5BQkxFKE5F
VFNDQVBFX1BMVUdJTl9BUEkpCitOUE9iamVjdCogU2NyaXB0Q29udHJvbGxlcjo6d2luZG93U2Ny
aXB0TlBPYmplY3QoKQoreworICAgIGlmICghbV93aW5kb3dTY3JpcHROUE9iamVjdCkgeworICAg
ICAgICBpZiAoaXNFbmFibGVkKCkpIHsKKyAgICAgICAgICAgIC8vIEphdmFTY3JpcHQgaXMgZW5h
YmxlZCwgc28gdGhlcmUgaXMgYSBKYXZhU2NyaXB0IHdpbmRvdyBvYmplY3QuCisgICAgICAgICAg
ICAvLyBSZXR1cm4gYW4gTlBPYmplY3QgYm91bmQgdG8gdGhlIHdpbmRvdyBvYmplY3QuCisgICAg
ICAgICAgICBKU09iamVjdCogd2luID0gd2luZG93U2hlbGwoKS0+d2luZG93KCk7CisgICAgICAg
ICAgICBBU1NFUlQod2luKTsKKyAgICAgICAgICAgIEJpbmRpbmdzOjpSb290T2JqZWN0KiByb290
ID0gYmluZGluZ1Jvb3RPYmplY3QoKTsKKyAgICAgICAgICAgIG1fd2luZG93U2NyaXB0TlBPYmpl
Y3QgPSBfTlBOX0NyZWF0ZVNjcmlwdE9iamVjdCgwLCB3aW4sIHJvb3QpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgLy8gSmF2YVNjcmlwdCBpcyBub3QgZW5hYmxlZCwgc28gd2UgY2Fu
bm90IGJpbmQgdGhlIE5QT2JqZWN0IHRvIHRoZSBKYXZhU2NyaXB0IHdpbmRvdyBvYmplY3QuCisg
ICAgICAgICAgICAvLyBJbnN0ZWFkLCB3ZSBjcmVhdGUgYW4gTlBPYmplY3Qgb2YgYSBkaWZmZXJl
bnQgY2xhc3MsIG9uZSB3aGljaCBpcyBub3QgYm91bmQgdG8gYSBKYXZhU2NyaXB0IG9iamVjdC4K
KyAgICAgICAgICAgIG1fd2luZG93U2NyaXB0TlBPYmplY3QgPSBfTlBOX0NyZWF0ZU5vU2NyaXB0
T2JqZWN0KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbV93aW5kb3dTY3JpcHRO
UE9iamVjdDsKK30KKworTlBPYmplY3QqIFNjcmlwdENvbnRyb2xsZXI6OmNyZWF0ZVNjcmlwdE9i
amVjdEZvclBsdWdpbkVsZW1lbnQoSFRNTFBsdWdJbkVsZW1lbnQqIHBsdWdpbikKK3sKKyAgICAv
LyBDYW4ndCBjcmVhdGUgTlBPYmplY3RzIHdoZW4gSmF2YVNjcmlwdCBpcyBkaXNhYmxlZAorICAg
IGlmICghaXNFbmFibGVkKCkpCisgICAgICAgIHJldHVybiBfTlBOX0NyZWF0ZU5vU2NyaXB0T2Jq
ZWN0KCk7CisKKyAgICAvLyBDcmVhdGUgYSBKU09iamVjdCBib3VuZCB0byB0aGlzIGVsZW1lbnQK
KyAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOworICAg
IEpTVmFsdWUqIGpzRWxlbWVudFZhbHVlID0gdG9KUyhleGVjLCBwbHVnaW4pOworICAgIGlmICgh
anNFbGVtZW50VmFsdWUgfHwgIWpzRWxlbWVudFZhbHVlLT5pc09iamVjdCgpKQorICAgICAgICBy
ZXR1cm4gX05QTl9DcmVhdGVOb1NjcmlwdE9iamVjdCgpOworCisgICAgLy8gV3JhcCB0aGUgSlNP
YmplY3QgaW4gYW4gTlBPYmplY3QKKyAgICByZXR1cm4gX05QTl9DcmVhdGVTY3JpcHRPYmplY3Qo
MCwganNFbGVtZW50VmFsdWUtPmdldE9iamVjdCgpLCBiaW5kaW5nUm9vdE9iamVjdCgpKTsKK30K
KyNlbmRpZgorCisjaWYgIVBMQVRGT1JNKE1BQykKK3ZvaWQgU2NyaXB0Q29udHJvbGxlcjo6Y2xl
YXJQbGF0Zm9ybVNjcmlwdE9iamVjdHMoKQoreworfQorCit2b2lkIFNjcmlwdENvbnRyb2xsZXI6
OmRpc2Nvbm5lY3RQbGF0Zm9ybVNjcmlwdE9iamVjdHMoKQoreworfQorI2VuZGlmCisKK3ZvaWQg
U2NyaXB0Q29udHJvbGxlcjo6Y2xlYW51cFNjcmlwdE9iamVjdHNGb3JQbHVnaW4odm9pZCogbmF0
aXZlSGFuZGxlKQoreworICAgIFJvb3RPYmplY3RNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yb290T2Jq
ZWN0cy5maW5kKG5hdGl2ZUhhbmRsZSk7CisKKyAgICBpZiAoaXQgPT0gbV9yb290T2JqZWN0cy5l
bmQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaXQtPnNlY29uZC0+aW52YWxpZGF0ZSgpOwor
ICAgIG1fcm9vdE9iamVjdHMucmVtb3ZlKGl0KTsKK30KKwordm9pZCBTY3JpcHRDb250cm9sbGVy
OjpjbGVhclNjcmlwdE9iamVjdHMoKQoreworICAgIFJvb3RPYmplY3RNYXA6OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IG1fcm9vdE9iamVjdHMuZW5kKCk7CisgICAgZm9yIChSb290T2JqZWN0TWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IG1fcm9vdE9iamVjdHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KQorICAgICAgICBpdC0+c2Vjb25kLT5pbnZhbGlkYXRlKCk7CisKKyAgICBtX3Jvb3RPYmplY3Rz
LmNsZWFyKCk7CisKKyAgICBpZiAobV9iaW5kaW5nUm9vdE9iamVjdCkgeworICAgICAgICBtX2Jp
bmRpbmdSb290T2JqZWN0LT5pbnZhbGlkYXRlKCk7CisgICAgICAgIG1fYmluZGluZ1Jvb3RPYmpl
Y3QgPSAwOworICAgIH0KKworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgIGlm
IChtX3dpbmRvd1NjcmlwdE5QT2JqZWN0KSB7CisgICAgICAgIC8vIENhbGwgX05QTl9EZWFsbG9j
YXRlT2JqZWN0KCkgaW5zdGVhZCBvZiBfTlBOX1JlbGVhc2VPYmplY3QoKSBzbyB0aGF0IHdlIGRv
bid0IGxlYWsgaWYgYSBwbHVnaW4gZmFpbHMgdG8gcmVsZWFzZSB0aGUgd2luZG93CisgICAgICAg
IC8vIHNjcmlwdCBvYmplY3QgcHJvcGVybHkuCisgICAgICAgIC8vIFRoaXMgc2hvdWxkbid0IGNh
dXNlIGFueSBwcm9ibGVtcyBmb3IgcGx1Z2lucyBzaW5jZSB0aGV5IHNob3VsZCBoYXZlIGFscmVh
ZHkgYmVlbiBzdG9wcGVkIGFuZCBkZXN0cm95ZWQgYXQgdGhpcyBwb2ludC4KKyAgICAgICAgX05Q
Tl9EZWFsbG9jYXRlT2JqZWN0KG1fd2luZG93U2NyaXB0TlBPYmplY3QpOworICAgICAgICBtX3dp
bmRvd1NjcmlwdE5QT2JqZWN0ID0gMDsKKyAgICB9CisjZW5kaWYKKworICAgIGNsZWFyUGxhdGZv
cm1TY3JpcHRPYmplY3RzKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5oIGIvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmgKaW5kZXggZTYzYmZmMy4uNjg0ZGU0NCAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmgKKysrIGIvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmgKQEAgLTIsNiArMiw3IEBACiAgKiAgQ29w
eXJpZ2h0IChDKSAxOTk5IEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJp
Z2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCiAgKiAgQ29weXJpZ2h0IChD
KSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMp
IDIwMDggRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
QEAgLTI0LDE5ICsyNSwzOSBAQAogI2luY2x1ZGUgIkpTRE9NV2luZG93U2hlbGwuaCIKICNpbmNs
dWRlIDxranMvcHJvdGVjdC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3
dGYvUmV0YWluUHRyLmg+CisKKyNpZiBQTEFURk9STShNQUMpCisjaWZkZWYgX19PQkpDX18KK0Bj
bGFzcyBXZWJTY3JpcHRPYmplY3Q7CisjZWxzZQorY2xhc3MgV2ViU2NyaXB0T2JqZWN0OworI2Vu
ZGlmCisjZW5kaWYKKworc3RydWN0IE5QT2JqZWN0OwogCiBuYW1lc3BhY2UgS0pTIHsKICAgICBj
bGFzcyBKU0dsb2JhbE9iamVjdDsKICAgICBjbGFzcyBKU1ZhbHVlOworCisgICAgbmFtZXNwYWNl
IEJpbmRpbmdzIHsKKyAgICAgICAgY2xhc3MgSW5zdGFuY2U7CisgICAgICAgIGNsYXNzIFJvb3RP
YmplY3Q7CisgICAgfQogfQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEV2ZW50Owog
Y2xhc3MgRXZlbnRMaXN0ZW5lcjsKK2NsYXNzIEhUTUxQbHVnSW5FbGVtZW50OwogY2xhc3MgRnJh
bWU7CiBjbGFzcyBOb2RlOwogY2xhc3MgU3RyaW5nOworY2xhc3MgV2lkZ2V0OworCit0eXBlZGVm
IEhhc2hNYXA8dm9pZCosIFJlZlB0cjxLSlM6OkJpbmRpbmdzOjpSb290T2JqZWN0PiA+IFJvb3RP
YmplY3RNYXA7CiAKIGNsYXNzIFNjcmlwdENvbnRyb2xsZXIgewogcHVibGljOgpAQCAtODAsNiAr
MTAxLDI2IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IFN0cmluZyogc291cmNlVVJMKCkgY29uc3Qg
eyByZXR1cm4gbV9zb3VyY2VVUkw7IH0gLy8gMCBpZiB3ZSBhcmUgbm90IGV2YWx1YXRpbmcgYW55
IHNjcmlwdAogCisgICAgdm9pZCBjbGVhclNjcmlwdE9iamVjdHMoKTsKKyAgICB2b2lkIGNsZWFu
dXBTY3JpcHRPYmplY3RzRm9yUGx1Z2luKHZvaWQqKTsKKworICAgIFBhc3NSZWZQdHI8S0pTOjpC
aW5kaW5nczo6SW5zdGFuY2U+IGNyZWF0ZVNjcmlwdEluc3RhbmNlRm9yV2lkZ2V0KFdpZGdldCop
OworICAgIEtKUzo6QmluZGluZ3M6OlJvb3RPYmplY3QqIGJpbmRpbmdSb290T2JqZWN0KCk7CisK
KyAgICBQYXNzUmVmUHRyPEtKUzo6QmluZGluZ3M6OlJvb3RPYmplY3Q+IGNyZWF0ZVJvb3RPYmpl
Y3Qodm9pZCogbmF0aXZlSGFuZGxlKTsKKworI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBFTkFCTEUo
TUFDX0pBVkFfQlJJREdFKQorICAgIHN0YXRpYyB2b2lkIGluaXRKYXZhSlNCaW5kaW5ncygpOwor
I2VuZGlmCisgICAgV2ViU2NyaXB0T2JqZWN0KiB3aW5kb3dTY3JpcHRPYmplY3QoKTsKKyNlbmRp
ZgorCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgTlBPYmplY3QqIGNyZWF0
ZVNjcmlwdE9iamVjdEZvclBsdWdpbkVsZW1lbnQoSFRNTFBsdWdJbkVsZW1lbnQqKTsKKyAgICBO
UE9iamVjdCogd2luZG93U2NyaXB0TlBPYmplY3QoKTsKKyNlbmRpZgorCiBwcml2YXRlOgogICAg
IHZvaWQgaW5pdFNjcmlwdElmTmVlZGVkKCkKICAgICB7CkBAIC04OCw2ICsxMjksOSBAQCBwcml2
YXRlOgogICAgIH0KICAgICB2b2lkIGluaXRTY3JpcHQoKTsKIAorICAgIHZvaWQgY2xlYXJQbGF0
Zm9ybVNjcmlwdE9iamVjdHMoKTsKKyAgICB2b2lkIGRpc2Nvbm5lY3RQbGF0Zm9ybVNjcmlwdE9i
amVjdHMoKTsKKwogICAgIEtKUzo6UHJvdGVjdGVkUHRyPEpTRE9NV2luZG93U2hlbGw+IG1fd2lu
ZG93U2hlbGw7CiAgICAgSGFzaFNldDxKU0RPTVdpbmRvdyo+IG1fbGl2ZUZvcm1lcldpbmRvd3M7
CiAgICAgRnJhbWUqIG1fZnJhbWU7CkBAIC05Niw2ICsxNDAsMTYgQEAgcHJpdmF0ZToKIAogICAg
IGJvb2wgbV9wcm9jZXNzaW5nVGltZXJDYWxsYmFjazsKICAgICBib29sIG1fcGF1c2VkOworCisg
ICAgLy8gVGhlIHJvb3Qgb2JqZWN0IHVzZWQgZm9yIG9iamVjdHMgYm91bmQgb3V0c2lkZSB0aGUg
Y29udGV4dCBvZiBhIHBsdWdpbi4KKyAgICBSZWZQdHI8S0pTOjpCaW5kaW5nczo6Um9vdE9iamVj
dD4gbV9iaW5kaW5nUm9vdE9iamVjdDsKKyAgICBSb290T2JqZWN0TWFwIG1fcm9vdE9iamVjdHM7
CisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgTlBPYmplY3QqIG1fd2luZG93
U2NyaXB0TlBPYmplY3Q7CisjZW5kaWYKKyNpZiBQTEFURk9STShNQUMpCisgICAgUmV0YWluUHRy
PFdlYlNjcmlwdE9iamVjdD4gbV93aW5kb3dTY3JpcHRPYmplY3Q7CisjZW5kaWYKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9E
T00ubW0gYi9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCmluZGV4IDMzY2IzNWMuLjhlYTg2
ZTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0KKysrIGIvV2ViQ29y
ZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQpAQCAtNTksNiArNTksNyBAQAogI2ltcG9ydCAiUmFuZ2Uu
aCIKICNpbXBvcnQgIlJlbmRlckltYWdlLmgiCiAjaW1wb3J0ICJSZW5kZXJWaWV3LmgiCisjaW1w
b3J0ICJTY3JpcHRDb250cm9sbGVyLmgiCiAjaW1wb3J0ICJTaW1wbGVGb250RGF0YS5oIgogI2lt
cG9ydCAiVGV4dC5oIgogI2ltcG9ydCAiVHJlZVdhbGtlci5oIgpAQCAtNDE3LDcgKzQxOCw3IEBA
IHN0YXRpYyBOU0FycmF5ICpraXQoY29uc3QgVmVjdG9yPEludFJlY3Q+JiByZWN0cykKIHsKICAg
ICBpZiAoV2ViQ29yZTo6Tm9kZSAqbiA9IFtzZWxmIF9ub2RlXSkgewogICAgICAgICBpZiAoV2Vi
Q29yZTo6RnJhbWUqIGZyYW1lID0gbi0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSkKLSAgICAgICAgICAg
IHJldHVybiBmcmFtZS0+YmluZGluZ1Jvb3RPYmplY3QoKTsKKyAgICAgICAgICAgIHJldHVybiBm
cmFtZS0+c2NyaXB0KCktPmJpbmRpbmdSb290T2JqZWN0KCk7CiAgICAgfQogICAgIHJldHVybiAw
OwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTUludGVybmFsLm1tIGIv
V2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTUludGVybmFsLm1tCmluZGV4IDk3ZTI2YzkuLmZmYjYw
ZWQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01JbnRlcm5hbC5tbQorKysg
Yi9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NSW50ZXJuYWwubW0KQEAgLTExOSw3ICsxMTksNyBA
QCB2b2lkIHJlbW92ZURPTVdyYXBwZXIoRE9NT2JqZWN0SW50ZXJuYWwqIGltcGwpCiAgICAgLy8g
R2V0IChvciBjcmVhdGUpIGEgY2FjaGVkIEpTIG9iamVjdCBmb3IgdGhlIERPTSBub2RlLgogICAg
IEtKUzo6SlNPYmplY3QgKnNjcmlwdEltcCA9IHN0YXRpY19jYXN0PEtKUzo6SlNPYmplY3QqPihX
ZWJDb3JlOjp0b0pTKGV4ZWMsIG5vZGVJbXBsKSk7CiAKLSAgICBLSlM6OkJpbmRpbmdzOjpSb290
T2JqZWN0KiByb290T2JqZWN0ID0gZnJhbWUtPmJpbmRpbmdSb290T2JqZWN0KCk7CisgICAgS0pT
OjpCaW5kaW5nczo6Um9vdE9iamVjdCogcm9vdE9iamVjdCA9IGZyYW1lLT5zY3JpcHQoKS0+Ymlu
ZGluZ1Jvb3RPYmplY3QoKTsKIAogICAgIFtzZWxmIF9zZXRJbXA6c2NyaXB0SW1wIG9yaWdpblJv
b3RPYmplY3Q6cm9vdE9iamVjdCByb290T2JqZWN0OnJvb3RPYmplY3RdOwogfQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9qc29iamVjdC5tbSBiL1dlYkNvcmUvYnJpZGdlL2pu
aS9qbmlfanNvYmplY3QubW0KaW5kZXggZWUxZWFlNi4uNTM4NDcxZiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9icmlkZ2Uvam5pL2puaV9qc29iamVjdC5tbQorKysgYi9XZWJDb3JlL2JyaWRnZS9qbmkv
am5pX2pzb2JqZWN0Lm1tCkBAIC00NDEsNyArNDQxLDcgQEAgc3RhdGljIFBhc3NSZWZQdHI8Um9v
dE9iamVjdD4gY3JlYXRlUm9vdE9iamVjdCh2b2lkKiBuYXRpdmVIYW5kbGUpCiAgICAgfQogICAg
IGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBmcmFtZS0+Y3JlYXRl
Um9vdE9iamVjdChuYXRpdmVIYW5kbGUsIGZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KCkp
OworICAgIHJldHVybiBmcmFtZS0+c2NyaXB0KCktPmNyZWF0ZVJvb3RPYmplY3QobmF0aXZlSGFu
ZGxlKTsKIH0KIAogLy8gV2UncmUgZWl0aGVyIGNyZWF0aW5nIGEgJ1Jvb3QnIG9iamVjdCAodmlh
IGEgY2FsbCB0byBKYXZhSlNPYmplY3QuZ2V0V2luZG93KCkpLCBvcgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9odG1sL0hUTUxBcHBsZXRFbGVtZW50LmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MQXBwbGV0
RWxlbWVudC5jcHAKaW5kZXggNTUyNWFjYS4uMzc1NWM3NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9o
dG1sL0hUTUxBcHBsZXRFbGVtZW50LmNwcAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTEFwcGxldEVs
ZW1lbnQuY3BwCkBAIC0zMCwxMCArMzAsNyBAQAogI2luY2x1ZGUgIlJlbmRlckFwcGxldC5oIgog
I2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0KLSNpZiBV
U0UoSkFWQVNDUklQVENPUkVfQklORElOR1MpCi0jaW5jbHVkZSAicnVudGltZS5oIgotI2VuZGlm
CisjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
QEAgLTQ2LDEwICs0Myw2IEBAIEhUTUxBcHBsZXRFbGVtZW50OjpIVE1MQXBwbGV0RWxlbWVudChE
b2N1bWVudCogZG9jKQogCiBIVE1MQXBwbGV0RWxlbWVudDo6fkhUTUxBcHBsZXRFbGVtZW50KCkK
IHsKLSNpZiBVU0UoSkFWQVNDUklQVENPUkVfQklORElOR1MpCi0gICAgLy8gbV9pbnN0YW5jZSBz
aG91bGQgaGF2ZSBiZWVuIGNsZWFuZWQgdXAgaW4gZGV0YWNoKCkuCi0gICAgQVNTRVJUKCFtX2lu
c3RhbmNlKTsKLSNlbmRpZgogfQogCiB2b2lkIEhUTUxBcHBsZXRFbGVtZW50OjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqIGF0dHIpCkBAIC0xNDMsMjEgKzEzNiwxNyBAQCBS
ZW5kZXJPYmplY3QqIEhUTUxBcHBsZXRFbGVtZW50OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVu
YSogYXJlbmEsIFJlbmRlclN0eWxlKgogfQogCiAjaWYgVVNFKEpBVkFTQ1JJUFRDT1JFX0JJTkRJ
TkdTKQotS0pTOjpCaW5kaW5nczo6SW5zdGFuY2UqIEhUTUxBcHBsZXRFbGVtZW50OjpnZXRJbnN0
YW5jZSgpIGNvbnN0CitSZW5kZXJXaWRnZXQqIEhUTUxBcHBsZXRFbGVtZW50OjpyZW5kZXJXaWRn
ZXRGb3JKU0JpbmRpbmdzKCkgY29uc3QKIHsKICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1
bWVudCgpLT5zZXR0aW5ncygpOwogICAgIGlmICghc2V0dGluZ3MgfHwgIXNldHRpbmdzLT5pc0ph
dmFFbmFibGVkKCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgaWYgKG1faW5zdGFuY2UpCi0g
ICAgICAgIHJldHVybiBtX2luc3RhbmNlLmdldCgpOwotICAgIAotICAgIGlmIChSZW5kZXJBcHBs
ZXQqIHIgPSBzdGF0aWNfY2FzdDxSZW5kZXJBcHBsZXQqPihyZW5kZXJlcigpKSkgewotICAgICAg
ICByLT5jcmVhdGVXaWRnZXRJZk5lY2Vzc2FyeSgpOwotICAgICAgICBpZiAoci0+d2lkZ2V0KCkg
JiYgZG9jdW1lbnQoKS0+ZnJhbWUoKSkKLSAgICAgICAgICAgIG1faW5zdGFuY2UgPSBkb2N1bWVu
dCgpLT5mcmFtZSgpLT5jcmVhdGVTY3JpcHRJbnN0YW5jZUZvcldpZGdldChyLT53aWRnZXQoKSk7
Ci0gICAgfQotICAgIHJldHVybiBtX2luc3RhbmNlLmdldCgpOworICAgIFJlbmRlckFwcGxldCog
YXBwbGV0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyQXBwbGV0Kj4ocmVuZGVyZXIoKSk7CisgICAgaWYg
KGFwcGxldCkKKyAgICAgICAgYXBwbGV0LT5jcmVhdGVXaWRnZXRJZk5lY2Vzc2FyeSgpOworCisg
ICAgcmV0dXJuIGFwcGxldDsKIH0KICNlbmRpZgogCkBAIC0xNjksMTQgKzE1OCw2IEBAIHZvaWQg
SFRNTEFwcGxldEVsZW1lbnQ6OmZpbmlzaFBhcnNpbmdDaGlsZHJlbigpCiAgICAgICAgIHJlbmRl
cmVyKCktPnNldE5lZWRzTGF5b3V0KHRydWUpOyAvLyBUaGlzIHdpbGwgY2F1c2UgaXQgdG8gY3Jl
YXRlIGl0cyB3aWRnZXQgJiB0aGUgSmF2YSBhcHBsZXQKIH0KIAotdm9pZCBIVE1MQXBwbGV0RWxl
bWVudDo6ZGV0YWNoKCkKLXsKLSNpZiBVU0UoSkFWQVNDUklQVENPUkVfQklORElOR1MpCi0gICAg
bV9pbnN0YW5jZSA9IDA7Ci0jZW5kaWYKLSAgICBIVE1MUGx1Z0luRWxlbWVudDo6ZGV0YWNoKCk7
Ci19Ci0KIFN0cmluZyBIVE1MQXBwbGV0RWxlbWVudDo6YWx0KCkgY29uc3QKIHsKICAgICByZXR1
cm4gZ2V0QXR0cmlidXRlKGFsdEF0dHIpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxB
cHBsZXRFbGVtZW50LmggYi9XZWJDb3JlL2h0bWwvSFRNTEFwcGxldEVsZW1lbnQuaAppbmRleCAz
MTc5ZTQzLi5jZWU0ZmVkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTEFwcGxldEVsZW1l
bnQuaAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTEFwcGxldEVsZW1lbnQuaApAQCAtMjUsMTQgKzI1
LDYgQEAKIAogI2luY2x1ZGUgIkhUTUxQbHVnSW5FbGVtZW50LmgiCiAKLSNpZiBVU0UoSkFWQVND
UklQVENPUkVfQklORElOR1MpCi1uYW1lc3BhY2UgS0pTIHsgCi0gICAgbmFtZXNwYWNlIEJpbmRp
bmdzIHsgCi0gICAgICAgIGNsYXNzIEluc3RhbmNlOwotICAgIH0gCi19Ci0jZW5kaWYKLQogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBIVE1MRm9ybUVsZW1lbnQ7CkBAIC01MSwxMCArNDMs
OSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5
bGUqKTsKICAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJl
bmEqLCBSZW5kZXJTdHlsZSopOwogICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hQYXJzaW5nQ2hpbGRy
ZW4oKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoKCk7CiAgICAgCiAjaWYgVVNFKEpBVkFTQ1JJ
UFRDT1JFX0JJTkRJTkdTKQotICAgIHZpcnR1YWwgS0pTOjpCaW5kaW5nczo6SW5zdGFuY2UqIGdl
dEluc3RhbmNlKCkgY29uc3Q7CisgICAgdmlydHVhbCBSZW5kZXJXaWRnZXQqIHJlbmRlcldpZGdl
dEZvckpTQmluZGluZ3MoKSBjb25zdDsKICNlbmRpZgogCiAgICAgU3RyaW5nIGFsdCgpIGNvbnN0
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQuY3BwIGIvV2ViQ29y
ZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQuY3BwCmluZGV4IDg0YTNhMmMuLjcyYmI2YzUgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MRW1iZWRFbGVtZW50LmNwcAorKysgYi9XZWJDb3JlL2h0
bWwvSFRNTEVtYmVkRWxlbWVudC5jcHAKQEAgLTMyLDEwICszMiw3IEBACiAjaW5jbHVkZSAiSFRN
TE9iamVjdEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJSZW5k
ZXJQYXJ0T2JqZWN0LmgiCi0KLSNpZiBVU0UoSkFWQVNDUklQVENPUkVfQklORElOR1MpCi0jaW5j
bHVkZSAicnVudGltZS5oIgotI2VuZGlmCisjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ5LDEwICs0Niw2IEBAIEhUTUxFbWJlZEVsZW1l
bnQ6OkhUTUxFbWJlZEVsZW1lbnQoRG9jdW1lbnQqIGRvYykKIAogSFRNTEVtYmVkRWxlbWVudDo6
fkhUTUxFbWJlZEVsZW1lbnQoKQogewotI2lmIFVTRShKQVZBU0NSSVBUQ09SRV9CSU5ESU5HUykK
LSAgICAvLyBtX2luc3RhbmNlIHNob3VsZCBoYXZlIGJlZW4gY2xlYW5lZCB1cCBpbiBkZXRhY2go
KS4KLSAgICBBU1NFUlQoIW1faW5zdGFuY2UpOwotI2VuZGlmCiB9CiAKICNpZiBVU0UoSkFWQVND
UklQVENPUkVfQklORElOR1MpCkBAIC02MiwzMCArNTUsMjEgQEAgc3RhdGljIGlubGluZSBSZW5k
ZXJXaWRnZXQqIGZpbmRXaWRnZXRSZW5kZXJlcihjb25zdCBOb2RlKiBuKQogICAgICAgICBkbwog
ICAgICAgICAgICAgbiA9IG4tPnBhcmVudE5vZGUoKTsKICAgICAgICAgd2hpbGUgKG4gJiYgIW4t
Pmhhc1RhZ05hbWUob2JqZWN0VGFnKSk7Ci0gICAgCi0gICAgcmV0dXJuIChuICYmIG4tPnJlbmRl
cmVyKCkgJiYgbi0+cmVuZGVyZXIoKS0+aXNXaWRnZXQoKSkgCi0gICAgICAgID8gc3RhdGljX2Nh
c3Q8UmVuZGVyV2lkZ2V0Kj4obi0+cmVuZGVyZXIoKSkgOiAwOworCisgICAgaWYgKG4gJiYgbi0+
cmVuZGVyZXIoKSAmJiBuLT5yZW5kZXJlcigpLT5pc1dpZGdldCgpKQorICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8UmVuZGVyV2lkZ2V0Kj4obi0+cmVuZGVyZXIoKSk7CisKKyAgICByZXR1cm4g
MDsKIH0KICAgICAKLUtKUzo6QmluZGluZ3M6Okluc3RhbmNlKiBIVE1MRW1iZWRFbGVtZW50Ojpn
ZXRJbnN0YW5jZSgpIGNvbnN0CitSZW5kZXJXaWRnZXQqIEhUTUxFbWJlZEVsZW1lbnQ6OnJlbmRl
cldpZGdldEZvckpTQmluZGluZ3MoKSBjb25zdAogewotICAgIEZyYW1lKiBmcmFtZSA9IGRvY3Vt
ZW50KCktPmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAg
ICBpZiAobV9pbnN0YW5jZSkKLSAgICAgICAgcmV0dXJuIG1faW5zdGFuY2UuZ2V0KCk7Ci0gICAg
CiAgICAgUmVuZGVyV2lkZ2V0KiByZW5kZXJXaWRnZXQgPSBmaW5kV2lkZ2V0UmVuZGVyZXIodGhp
cyk7CiAgICAgaWYgKHJlbmRlcldpZGdldCAmJiAhcmVuZGVyV2lkZ2V0LT53aWRnZXQoKSkgewog
ICAgICAgICBkb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMo
KTsKICAgICAgICAgcmVuZGVyV2lkZ2V0ID0gZmluZFdpZGdldFJlbmRlcmVyKHRoaXMpOwogICAg
IH0KLSAgICAKLSAgICBpZiAocmVuZGVyV2lkZ2V0ICYmIHJlbmRlcldpZGdldC0+d2lkZ2V0KCkp
IAotICAgICAgICBtX2luc3RhbmNlID0gZnJhbWUtPmNyZWF0ZVNjcmlwdEluc3RhbmNlRm9yV2lk
Z2V0KHJlbmRlcldpZGdldC0+d2lkZ2V0KCkpOwotICAgIAotICAgIHJldHVybiBtX2luc3RhbmNl
LmdldCgpOworICAgIHJldHVybiByZW5kZXJXaWRnZXQ7CiB9CiAjZW5kaWYKIApAQCAtMTU3LDE0
ICsxNDEsNiBAQCB2b2lkIEhUTUxFbWJlZEVsZW1lbnQ6OmF0dGFjaCgpCiAgICAgSFRNTFBsdWdJ
bkVsZW1lbnQ6OmF0dGFjaCgpOwogfQogCi12b2lkIEhUTUxFbWJlZEVsZW1lbnQ6OmRldGFjaCgp
Ci17Ci0jaWYgVVNFKEpBVkFTQ1JJUFRDT1JFX0JJTkRJTkdTKQotICAgIG1faW5zdGFuY2UgPSAw
OwotI2VuZGlmCi0gICAgSFRNTFBsdWdJbkVsZW1lbnQ6OmRldGFjaCgpOwotfQotCiB2b2lkIEhU
TUxFbWJlZEVsZW1lbnQ6OnVwZGF0ZVdpZGdldCgpCiB7CiAgICAgZG9jdW1lbnQoKS0+dXBkYXRl
UmVuZGVyaW5nKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVudC5o
IGIvV2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQuaAppbmRleCBmYjRiYzRkLi43OTA1M2Y2
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVudC5oCisrKyBiL1dlYkNv
cmUvaHRtbC9IVE1MRW1iZWRFbGVtZW50LmgKQEAgLTI1LDE0ICsyNSw2IEBACiAKICNpbmNsdWRl
ICJIVE1MUGx1Z0luRWxlbWVudC5oIgogCi0jaWYgVVNFKEpBVkFTQ1JJUFRDT1JFX0JJTkRJTkdT
KQotbmFtZXNwYWNlIEtKUyB7Ci0gICAgbmFtZXNwYWNlIEJpbmRpbmdzIHsKLSAgICAgICAgY2xh
c3MgSW5zdGFuY2U7Ci0gICAgfQotfQotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgSFRNTEVtYmVkRWxlbWVudCA6IHB1YmxpYyBIVE1MUGx1Z0luRWxlbWVudCB7CkBAIC00
OCw3ICs0MCw2IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goKTsKICAgICB2
aXJ0dWFsIGJvb2wgY2FuTGF6eUF0dGFjaCgpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVh
bCB2b2lkIGRldGFjaCgpOwogICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKFJlbmRl
clN0eWxlKik7CiAgICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRl
ckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvRG9j
dW1lbnQoKTsKQEAgLTYxLDcgKzUyLDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TmVlZFdpZGdl
dFVwZGF0ZShib29sIG5lZWRXaWRnZXRVcGRhdGUpIHsgbV9uZWVkV2lkZ2V0VXBkYXRlID0gbmVl
ZFdpZGdldFVwZGF0ZTsgfQogCiAjaWYgVVNFKEpBVkFTQ1JJUFRDT1JFX0JJTkRJTkdTKQotICAg
IHZpcnR1YWwgS0pTOjpCaW5kaW5nczo6SW5zdGFuY2UqIGdldEluc3RhbmNlKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBSZW5kZXJXaWRnZXQqIHJlbmRlcldpZGdldEZvckpTQmluZGluZ3MoKSBjb25z
dDsKICNlbmRpZgogCiAgICAgU3RyaW5nIHNyYygpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxl
bWVudC5jcHAKaW5kZXggYmJmMWU2Yi4uMjhmYWJiZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1s
L0hUTUxPYmplY3RFbGVtZW50LmNwcAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1l
bnQuY3BwCkBAIC00MCwxMiArNDAsOSBAQAogI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCiAjaW5j
bHVkZSAiUmVuZGVyUGFydE9iamVjdC5oIgogI2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgorI2lu
Y2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJUZXh0LmgiCiAKLSNpZiBVU0Uo
SkFWQVNDUklQVENPUkVfQklORElOR1MpCi0jaW5jbHVkZSAicnVudGltZS5oIgotI2VuZGlmCi0K
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7CkBAIC02
MSwzMSArNTgsMTcgQEAgSFRNTE9iamVjdEVsZW1lbnQ6OkhUTUxPYmplY3RFbGVtZW50KERvY3Vt
ZW50KiBkb2MsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQogCiBIVE1MT2JqZWN0RWxlbWVudDo6fkhU
TUxPYmplY3RFbGVtZW50KCkKIHsKLSNpZiBVU0UoSkFWQVNDUklQVENPUkVfQklORElOR1MpCi0g
ICAgLy8gbV9pbnN0YW5jZSBzaG91bGQgaGF2ZSBiZWVuIGNsZWFuZWQgdXAgaW4gZGV0YWNoKCku
Ci0gICAgQVNTRVJUKCFtX2luc3RhbmNlKTsKLSNlbmRpZgogfQogCiAjaWYgVVNFKEpBVkFTQ1JJ
UFRDT1JFX0JJTkRJTkdTKQotS0pTOjpCaW5kaW5nczo6SW5zdGFuY2UgKkhUTUxPYmplY3RFbGVt
ZW50OjpnZXRJbnN0YW5jZSgpIGNvbnN0CitSZW5kZXJXaWRnZXQqIEhUTUxPYmplY3RFbGVtZW50
OjpyZW5kZXJXaWRnZXRGb3JKU0JpbmRpbmdzKCkgY29uc3QKIHsKLSAgICBGcmFtZSogZnJhbWUg
PSBkb2N1bWVudCgpLT5mcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiAw
OwotCi0gICAgaWYgKG1faW5zdGFuY2UpCi0gICAgICAgIHJldHVybiBtX2luc3RhbmNlLmdldCgp
OwotCiAgICAgUmVuZGVyV2lkZ2V0KiByZW5kZXJXaWRnZXQgPSAocmVuZGVyZXIoKSAmJiByZW5k
ZXJlcigpLT5pc1dpZGdldCgpKSA/IHN0YXRpY19jYXN0PFJlbmRlcldpZGdldCo+KHJlbmRlcmVy
KCkpIDogMDsKICAgICBpZiAocmVuZGVyV2lkZ2V0ICYmICFyZW5kZXJXaWRnZXQtPndpZGdldCgp
KSB7CiAgICAgICAgIGRvY3VtZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNo
ZWV0cygpOwogICAgICAgICByZW5kZXJXaWRnZXQgPSAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigp
LT5pc1dpZGdldCgpKSA/IHN0YXRpY19jYXN0PFJlbmRlcldpZGdldCo+KHJlbmRlcmVyKCkpIDog
MDsKLSAgICB9ICAgICAgICAgIAotICAgIGlmIChyZW5kZXJXaWRnZXQgJiYgcmVuZGVyV2lkZ2V0
LT53aWRnZXQoKSkgCi0gICAgICAgIG1faW5zdGFuY2UgPSBmcmFtZS0+Y3JlYXRlU2NyaXB0SW5z
dGFuY2VGb3JXaWRnZXQocmVuZGVyV2lkZ2V0LT53aWRnZXQoKSk7Ci0KLSAgICByZXR1cm4gbV9p
bnN0YW5jZS5nZXQoKTsKKyAgICB9CisgICAgcmV0dXJuIHJlbmRlcldpZGdldDsKIH0KICNlbmRp
ZgogCkBAIC0yMDMsMTQgKzE4Niw5IEBAIHZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OmZpbmlzaFBh
cnNpbmdDaGlsZHJlbigpCiAKIHZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OmRldGFjaCgpCiB7Ci0g
ICAgaWYgKGF0dGFjaGVkKCkgJiYgcmVuZGVyZXIoKSAmJiAhbV91c2VGYWxsYmFja0NvbnRlbnQp
IHsKKyAgICBpZiAoYXR0YWNoZWQoKSAmJiByZW5kZXJlcigpICYmICFtX3VzZUZhbGxiYWNrQ29u
dGVudCkKICAgICAgICAgLy8gVXBkYXRlIHRoZSB3aWRnZXQgdGhlIG5leHQgdGltZSB3ZSBhdHRh
Y2ggKGRldGFjaGluZyBkZXN0cm95cyB0aGUgcGx1Z2luKS4KICAgICAgICAgbV9uZWVkV2lkZ2V0
VXBkYXRlID0gdHJ1ZTsKLSAgICB9Ci0KLSNpZiBVU0UoSkFWQVNDUklQVENPUkVfQklORElOR1Mp
Ci0gICAgbV9pbnN0YW5jZSA9IDA7Ci0jZW5kaWYKICAgICBIVE1MUGx1Z0luRWxlbWVudDo6ZGV0
YWNoKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5o
IGIvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmgKaW5kZXggY2EyMDVkNy4uN2Y2Yjc5
NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmgKKysrIGIvV2Vi
Q29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmgKQEAgLTYzLDcgKzYzLDcgQEAgcHVibGljOgog
ICAgIHZvaWQgcmVuZGVyRmFsbGJhY2tDb250ZW50KCk7CiAKICNpZiBVU0UoSkFWQVNDUklQVENP
UkVfQklORElOR1MpCi0gICAgdmlydHVhbCBLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZSogZ2V0SW5z
dGFuY2UoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFJlbmRlcldpZGdldCogcmVuZGVyV2lkZ2V0Rm9y
SlNCaW5kaW5ncygpIGNvbnN0OwogI2VuZGlmCiAKICAgICBTdHJpbmcgYXJjaGl2ZSgpIGNvbnN0
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5FbGVtZW50LmNwcCBiL1dlYkNv
cmUvaHRtbC9IVE1MUGx1Z0luRWxlbWVudC5jcHAKaW5kZXggMjg0NTdhZC4uMGM4NjVmZCAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5FbGVtZW50LmNwcAorKysgYi9XZWJDb3Jl
L2h0bWwvSFRNTFBsdWdJbkVsZW1lbnQuY3BwCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSAi
RnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZVRyZWUuaCIKICNpbmNsdWRlICJIVE1MTmFt
ZXMuaCIKLSNpbmNsdWRlICJKU05vZGUuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAi
UmVuZGVyV2lkZ2V0LmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKQEAgLTQyLDE1ICs0MSwxMiBA
QAogI2VuZGlmCiAKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyNpbmNsdWRlICJK
U05vZGUuaCIKICNpbmNsdWRlICJOUF9qc29iamVjdC5oIgogI2luY2x1ZGUgIm5wcnVudGltZV9p
bXBsLmgiCiAjaW5jbHVkZSAicnVudGltZV9yb290LmgiCiAjZW5kaWYKIAotdXNpbmcgS0pTOjpF
eGVjU3RhdGU7Ci11c2luZyBLSlM6OkpTVmFsdWU7Ci11c2luZyBLSlM6OkJpbmRpbmdzOjpSb290
T2JqZWN0OwotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFt
ZXM7CkBAIC02NSw2ICs2MSwxMCBAQCBIVE1MUGx1Z0luRWxlbWVudDo6SFRNTFBsdWdJbkVsZW1l
bnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYwogCiBIVE1MUGx1
Z0luRWxlbWVudDo6fkhUTUxQbHVnSW5FbGVtZW50KCkKIHsKKyNpZiBVU0UoSkFWQVNDUklQVENP
UkVfQklORElOR1MpCisgICAgQVNTRVJUKCFtX2luc3RhbmNlKTsgLy8gY2xlYXJlZCBpbiBkZXRh
Y2goKQorI2VuZGlmCisKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKICAgICBpZiAo
bV9OUE9iamVjdCkgewogICAgICAgICBfTlBOX1JlbGVhc2VPYmplY3QobV9OUE9iamVjdCk7CkBA
IC03Myw2ICs3MywzMiBAQCBIVE1MUGx1Z0luRWxlbWVudDo6fkhUTUxQbHVnSW5FbGVtZW50KCkK
ICNlbmRpZgogfQogCisjaWYgVVNFKEpBVkFTQ1JJUFRDT1JFX0JJTkRJTkdTKQordm9pZCBIVE1M
UGx1Z0luRWxlbWVudDo6ZGV0YWNoKCkKK3sKKyAgICBtX2luc3RhbmNlLmNsZWFyKCk7CisgICAg
SFRNTEZyYW1lT3duZXJFbGVtZW50OjpkZXRhY2goKTsKK30KKworS0pTOjpCaW5kaW5nczo6SW5z
dGFuY2UqIEhUTUxQbHVnSW5FbGVtZW50OjpnZXRJbnN0YW5jZSgpIGNvbnN0Cit7CisgICAgRnJh
bWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIC8vIElmIHRoZSBob3N0IGR5bmFtaWNhbGx5IHR1cm5zIG9mZiBK
YXZhU2NyaXB0IChvciBKYXZhKSB3ZSB3aWxsIHN0aWxsIHJldHVybgorICAgIC8vIHRoZSBjYWNo
ZWQgYWxsb2NhdGVkIEJpbmRpbmdzOjpJbnN0YW5jZS4gIE5vdCBzdXBwb3J0aW5nIHRoaXMgZWRn
ZS1jYXNlIGlzIE9LLgorICAgIGlmIChtX2luc3RhbmNlKQorICAgICAgICByZXR1cm4gbV9pbnN0
YW5jZS5nZXQoKTsKKworICAgIFJlbmRlcldpZGdldCogcmVuZGVyV2lkZ2V0ID0gcmVuZGVyV2lk
Z2V0Rm9ySlNCaW5kaW5ncygpOworICAgIGlmIChyZW5kZXJXaWRnZXQgJiYgcmVuZGVyV2lkZ2V0
LT53aWRnZXQoKSkKKyAgICAgICAgbV9pbnN0YW5jZSA9IGZyYW1lLT5zY3JpcHQoKS0+Y3JlYXRl
U2NyaXB0SW5zdGFuY2VGb3JXaWRnZXQocmVuZGVyV2lkZ2V0LT53aWRnZXQoKSk7CisKKyAgICBy
ZXR1cm4gbV9pbnN0YW5jZS5nZXQoKTsKK30KKyNlbmRpZgorCiBTdHJpbmcgSFRNTFBsdWdJbkVs
ZW1lbnQ6OmFsaWduKCkgY29uc3QKIHsKICAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGFsaWduQXR0
cik7CkBAIC0xNDcsNyArMTczLDcgQEAgdm9pZCBIVE1MUGx1Z0luRWxlbWVudDo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKQogICAgICAgICBhZGRIVE1MQWxpZ25t
ZW50KGF0dHIpOwogICAgIGVsc2UKICAgICAgICAgSFRNTEZyYW1lT3duZXJFbGVtZW50OjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKLX0gICAgCit9CiAKIGJvb2wgSFRNTFBsdWdJbkVsZW1l
bnQ6OmNoZWNrRFREKGNvbnN0IE5vZGUqIG5ld0NoaWxkKQogewpAQCAtMTY2LDQxICsxOTIsMTEg
QEAgdm9pZCBIVE1MUGx1Z0luRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZl
bnQpCiAKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKIAotTlBPYmplY3QqIEhUTUxQ
bHVnSW5FbGVtZW50OjpjcmVhdGVOUE9iamVjdCgpCi17Ci0gICAgRnJhbWUqIGZyYW1lID0gZG9j
dW1lbnQoKS0+ZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKSB7Ci0gICAgICAgIC8vIFRoaXMgc2hv
dWxkbid0IGV2ZXIgaGFwcGVuLCBidXQgbWlnaHQgYXMgd2VsbCBjaGVjayBhbnl3YXkuCi0gICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gX05QTl9DcmVhdGVOb1Nj
cmlwdE9iamVjdCgpOwotICAgIH0KLQotICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGZyYW1lLT5z
ZXR0aW5ncygpOwotICAgIGlmICghc2V0dGluZ3MpIHsKLSAgICAgICAgLy8gVGhpcyBzaG91bGRu
J3QgZXZlciBoYXBwZW4sIGJ1dCBtaWdodCBhcyB3ZWxsIGNoZWNrIGFueXdheS4KLSAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBfTlBOX0NyZWF0ZU5vU2NyaXB0
T2JqZWN0KCk7Ci0gICAgfQotCi0gICAgLy8gQ2FuJ3QgY3JlYXRlIE5QT2JqZWN0cyB3aGVuIEph
dmFTY3JpcHQgaXMgZGlzYWJsZWQKLSAgICBpZiAoIWZyYW1lLT5zY3JpcHQoKS0+aXNFbmFibGVk
KCkpCi0gICAgICAgIHJldHVybiBfTlBOX0NyZWF0ZU5vU2NyaXB0T2JqZWN0KCk7Ci0gICAgCi0g
ICAgLy8gQ3JlYXRlIGEgSlNPYmplY3QgYm91bmQgdG8gdGhpcyBlbGVtZW50Ci0gICAgRXhlY1N0
YXRlICpleGVjID0gZnJhbWUtPnNjcmlwdCgpLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygp
OwotICAgIEpTVmFsdWUqIGpzRWxlbWVudFZhbHVlID0gdG9KUyhleGVjLCB0aGlzKTsKLSAgICBp
ZiAoIWpzRWxlbWVudFZhbHVlIHx8ICFqc0VsZW1lbnRWYWx1ZS0+aXNPYmplY3QoKSkKLSAgICAg
ICAgcmV0dXJuIF9OUE5fQ3JlYXRlTm9TY3JpcHRPYmplY3QoKTsKLQotICAgIC8vIFdyYXAgdGhl
IEpTT2JqZWN0IGluIGFuIE5QT2JqZWN0Ci0gICAgUm9vdE9iamVjdCogcm9vdE9iamVjdCA9IGZy
YW1lLT5iaW5kaW5nUm9vdE9iamVjdCgpOwotICAgIHJldHVybiBfTlBOX0NyZWF0ZVNjcmlwdE9i
amVjdCgwLCBqc0VsZW1lbnRWYWx1ZS0+Z2V0T2JqZWN0KCksIHJvb3RPYmplY3QpOwotfQotCiBO
UE9iamVjdCogSFRNTFBsdWdJbkVsZW1lbnQ6OmdldE5QT2JqZWN0KCkKIHsKKyAgICBBU1NFUlQo
ZG9jdW1lbnQoKS0+ZnJhbWUoKSk7CiAgICAgaWYgKCFtX05QT2JqZWN0KQotICAgICAgICBtX05Q
T2JqZWN0ID0gY3JlYXRlTlBPYmplY3QoKTsKKyAgICAgICAgbV9OUE9iamVjdCA9IGRvY3VtZW50
KCktPmZyYW1lKCktPnNjcmlwdCgpLT5jcmVhdGVTY3JpcHRPYmplY3RGb3JQbHVnaW5FbGVtZW50
KHRoaXMpOwogICAgIHJldHVybiBtX05QT2JqZWN0OwogfQogCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2h0bWwvSFRNTFBsdWdJbkVsZW1lbnQuaCBiL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luRWxlbWVu
dC5oCmluZGV4IGU1YjZkNGUuLjdmMjg4NDAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1M
UGx1Z0luRWxlbWVudC5oCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luRWxlbWVudC5oCkBA
IC0zOSw2ICszOSw4IEBAIHN0cnVjdCBOUE9iamVjdDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CitjbGFzcyBSZW5kZXJXaWRnZXQ7CisKIGNsYXNzIEhUTUxQbHVnSW5FbGVtZW50IDogcHVibGlj
IEhUTUxGcmFtZU93bmVyRWxlbWVudCB7CiBwdWJsaWM6CiAgICAgSFRNTFBsdWdJbkVsZW1lbnQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqKTsKQEAgLTY3LDE1ICs2OSwx
MyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQq
KTsKIAogI2lmIFVTRShKQVZBU0NSSVBUQ09SRV9CSU5ESU5HUykKLSAgICB2aXJ0dWFsIEtKUzo6
QmluZGluZ3M6Okluc3RhbmNlKiBnZXRJbnN0YW5jZSgpIGNvbnN0ID0gMDsKLSNlbmRpZgotI2lm
IEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIHZpcnR1YWwgTlBPYmplY3QqIGdldE5Q
T2JqZWN0KCk7CisgICAgdmlydHVhbCB2b2lkIGRldGFjaCgpOworICAgIHZpcnR1YWwgUmVuZGVy
V2lkZ2V0KiByZW5kZXJXaWRnZXRGb3JKU0JpbmRpbmdzKCkgY29uc3QgPSAwOworICAgIEtKUzo6
QmluZGluZ3M6Okluc3RhbmNlKiBnZXRJbnN0YW5jZSgpIGNvbnN0OwogI2VuZGlmCiAKLXByaXZh
dGU6CiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgTlBPYmplY3QqIGNyZWF0
ZU5QT2JqZWN0KCk7CisgICAgdmlydHVhbCBOUE9iamVjdCogZ2V0TlBPYmplY3QoKTsKICNlbmRp
ZgogCiBwcm90ZWN0ZWQ6CmRpZmYgLS1naXQgYS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5j
cHAgYi9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKaW5kZXggYzAwYTdiYS4uZWFkMWRh
ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCisrKyBiL1dlYkNv
cmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcApAQCAtODI3LDYgKzgyNyw5IEBAIHZvaWQgRnJhbWVM
b2FkZXI6OmNsZWFyKGJvb2wgY2xlYXJXaW5kb3dQcm9wZXJ0aWVzLCBib29sIGNsZWFyU2NyaXB0
T2JqZWN0cykKICAgICAgICAgfQogICAgIH0KIAorICAgIGlmIChjbGVhclNjcmlwdE9iamVjdHMp
CisgICAgICAgIG1fZnJhbWUtPnNjcmlwdCgpLT5jbGVhclNjcmlwdE9iamVjdHMoKTsKKwogICAg
IC8vIERvIHRoaXMgYWZ0ZXIgZGV0YWNoaW5nIHRoZSBkb2N1bWVudCBzbyB0aGF0IHRoZSB1bmxv
YWQgZXZlbnQgd29ya3MuCiAgICAgaWYgKGNsZWFyV2luZG93UHJvcGVydGllcykgewogICAgICAg
ICBtX2ZyYW1lLT5jbGVhckRPTVdpbmRvdygpOwpAQCAtODM3LDE4ICs4NDAsMTUgQEAgdm9pZCBG
cmFtZUxvYWRlcjo6Y2xlYXIoYm9vbCBjbGVhcldpbmRvd1Byb3BlcnRpZXMsIGJvb2wgY2xlYXJT
Y3JpcHRPYmplY3RzKQogICAgIG1fZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5jbGVhcigpOwogICAg
IGlmIChtX2ZyYW1lLT52aWV3KCkpCiAgICAgICAgIG1fZnJhbWUtPnZpZXcoKS0+Y2xlYXIoKTsK
LSAgICAKKwogICAgIG1fZnJhbWUtPnNldFNlbGVjdGlvbkdyYW51bGFyaXR5KENoYXJhY3Rlckdy
YW51bGFyaXR5KTsKIAotICAgIC8vIERvIG5vdCBkcm9wIHRoZSBkb2N1bWVudCBiZWZvcmUgdGhl
IHNjcmlwdCBwcm94eSBhbmQgdmlldyBhcmUgY2xlYXJlZCwgYXMgc29tZSBkZXN0cnVjdG9ycwot
ICAgIC8vIG1pZ2h0IHN0aWxsIHRyeSB0byBhY2Nlc3MgdGhlIGRvY3VtZW50LgorICAgIC8vIERv
IG5vdCBkcm9wIHRoZSBkb2N1bWVudCBiZWZvcmUgdGhlIFNjcmlwdENvbnRyb2xsZXIgYW5kIHZp
ZXcgYXJlIGNsZWFyZWQKKyAgICAvLyBhcyBzb21lIGRlc3RydWN0b3JzIG1pZ2h0IHN0aWxsIHRy
eSB0byBhY2Nlc3MgdGhlIGRvY3VtZW50LgogICAgIG1fZnJhbWUtPnNldERvY3VtZW50KDApOwog
ICAgIG1fZGVjb2RlciA9IDA7CiAKICAgICBtX2NvbnRhaW5zUGx1Z0lucyA9IGZhbHNlOwotICAg
IAotICAgIGlmIChjbGVhclNjcmlwdE9iamVjdHMpCi0gICAgICAgIG1fZnJhbWUtPmNsZWFyU2Ny
aXB0T2JqZWN0cygpOwogICAKICAgICBtX3JlZGlyZWN0aW9uVGltZXIuc3RvcCgpOwogICAgIG1f
c2NoZWR1bGVkUmVkaXJlY3Rpb24uY2xlYXIoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9G
cmFtZS5jcHAgYi9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCmluZGV4IGUwNjFlODUuLmY3ZTg5MGQg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKKysrIGIvV2ViQ29yZS9wYWdlL0Zy
YW1lLmNwcApAQCAtOCw2ICs4LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDUgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAbnlwb3AuY29tPgogICogQ29weXJpZ2h0IChD
KSAyMDA3IFRyb2xsdGVjaCBBU0EKKyAqIENvcHlyaWdodCAoQykgMjAwOCBFcmljIFNlaWRlbCA8
ZXJpY0B3ZWJraXQub3JnPgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC01Niw3ICs1Nyw2IEBACiAj
aW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIm1hcmt1cC5oIgogI2luY2x1ZGUgIk1lZGlh
RmVhdHVyZU5hbWVzLmgiCi0jaW5jbHVkZSAiTlBfanNvYmplY3QuaCIKICNpbmNsdWRlICJOYXZp
Z2F0b3IuaCIKICNpbmNsdWRlICJOb2RlTGlzdC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKQEAgLTEy
NCwxNCArMTI0LDYgQEAgRnJhbWU6OkZyYW1lKFBhZ2UqIHBhZ2UsIEhUTUxGcmFtZU93bmVyRWxl
bWVudCogb3duZXJFbGVtZW50LCBGcmFtZUxvYWRlckNsaWVudCoKIAogICAgIFhNTE5hbWVzOjpp
bml0KCk7CiAKLSNpZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShNQUNfSkFWQV9CUklER0UpCi0g
ICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWRKYXZhSlNCaW5kaW5nczsKLSAgICBpZiAoIWluaXRp
YWxpemVkSmF2YUpTQmluZGluZ3MpIHsKLSAgICAgICAgaW5pdGlhbGl6ZWRKYXZhSlNCaW5kaW5n
cyA9IHRydWU7Ci0gICAgICAgIGluaXRKYXZhSlNCaW5kaW5ncygpOwotICAgIH0KLSNlbmRpZgot
CiAgICAgaWYgKCFvd25lckVsZW1lbnQpCiAgICAgICAgIHBhZ2UtPnNldE1haW5GcmFtZSh0aGlz
KTsKICAgICBlbHNlIHsKQEAgLTE3NSw4ICsxNjcsNiBAQCBGcmFtZTo6fkZyYW1lKCkKICAgICAg
ICAgZC0+bV92aWV3LT5jbGVhckZyYW1lKCk7CiAgICAgfQogCi0gICAgZGlzY29ubmVjdFBsYXRm
b3JtU2NyaXB0T2JqZWN0cygpOwotCiAgICAgQVNTRVJUKCFkLT5tX2xpZmVTdXBwb3J0VGltZXIu
aXNBY3RpdmUoKSk7CiAKICNpZiBGUkFNRV9MT0FEU19VU0VSX1NUWUxFU0hFRVQKQEAgLTEwNTcs
NTAgKzEwNDcsNiBAQCB2b2lkIEZyYW1lOjpsaWZlU3VwcG9ydFRpbWVyRmlyZWQoVGltZXI8RnJh
bWU+KikKICNlbmRpZgogICAgIGRlcmVmKCk7CiB9Ci0KLUtKUzo6QmluZGluZ3M6OlJvb3RPYmpl
Y3QqIEZyYW1lOjpiaW5kaW5nUm9vdE9iamVjdCgpCi17Ci0gICAgaWYgKCFzY3JpcHQoKS0+aXNF
bmFibGVkKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKCFkLT5tX2JpbmRpbmdSb290
T2JqZWN0KQotICAgICAgICBkLT5tX2JpbmRpbmdSb290T2JqZWN0ID0gS0pTOjpCaW5kaW5nczo6
Um9vdE9iamVjdDo6Y3JlYXRlKDAsIHNjcmlwdCgpLT5nbG9iYWxPYmplY3QoKSk7Ci0gICAgcmV0
dXJuIGQtPm1fYmluZGluZ1Jvb3RPYmplY3QuZ2V0KCk7Ci19Ci0KLVBhc3NSZWZQdHI8S0pTOjpC
aW5kaW5nczo6Um9vdE9iamVjdD4gRnJhbWU6OmNyZWF0ZVJvb3RPYmplY3Qodm9pZCogbmF0aXZl
SGFuZGxlLCBLSlM6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi17Ci0gICAgUm9vdE9i
amVjdE1hcDo6aXRlcmF0b3IgaXQgPSBkLT5tX3Jvb3RPYmplY3RzLmZpbmQobmF0aXZlSGFuZGxl
KTsKLSAgICBpZiAoaXQgIT0gZC0+bV9yb290T2JqZWN0cy5lbmQoKSkKLSAgICAgICAgcmV0dXJu
IGl0LT5zZWNvbmQ7Ci0gICAgCi0gICAgUmVmUHRyPEtKUzo6QmluZGluZ3M6OlJvb3RPYmplY3Q+
IHJvb3RPYmplY3QgPSBLSlM6OkJpbmRpbmdzOjpSb290T2JqZWN0OjpjcmVhdGUobmF0aXZlSGFu
ZGxlLCBnbG9iYWxPYmplY3QpOwotICAgIAotICAgIGQtPm1fcm9vdE9iamVjdHMuc2V0KG5hdGl2
ZUhhbmRsZSwgcm9vdE9iamVjdCk7Ci0gICAgcmV0dXJuIHJvb3RPYmplY3QucmVsZWFzZSgpOwot
fQotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi1OUE9iamVjdCogRnJhbWU6Ondp
bmRvd1NjcmlwdE5QT2JqZWN0KCkKLXsKLSAgICBpZiAoIWQtPm1fd2luZG93U2NyaXB0TlBPYmpl
Y3QpIHsKLSAgICAgICAgaWYgKHNjcmlwdCgpLT5pc0VuYWJsZWQoKSkgewotICAgICAgICAgICAg
Ly8gSmF2YVNjcmlwdCBpcyBlbmFibGVkLCBzbyB0aGVyZSBpcyBhIEphdmFTY3JpcHQgd2luZG93
IG9iamVjdC4gIFJldHVybiBhbiBOUE9iamVjdCBib3VuZCB0byB0aGUgd2luZG93Ci0gICAgICAg
ICAgICAvLyBvYmplY3QuCi0gICAgICAgICAgICBLSlM6OkpTT2JqZWN0KiB3aW4gPSB0b0pTRE9N
V2luZG93KHRoaXMpOwotICAgICAgICAgICAgQVNTRVJUKHdpbik7Ci0gICAgICAgICAgICBLSlM6
OkJpbmRpbmdzOjpSb290T2JqZWN0KiByb290ID0gYmluZGluZ1Jvb3RPYmplY3QoKTsKLSAgICAg
ICAgICAgIGQtPm1fd2luZG93U2NyaXB0TlBPYmplY3QgPSBfTlBOX0NyZWF0ZVNjcmlwdE9iamVj
dCgwLCB3aW4sIHJvb3QpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gSmF2YVNj
cmlwdCBpcyBub3QgZW5hYmxlZCwgc28gd2UgY2Fubm90IGJpbmQgdGhlIE5QT2JqZWN0IHRvIHRo
ZSBKYXZhU2NyaXB0IHdpbmRvdyBvYmplY3QuCi0gICAgICAgICAgICAvLyBJbnN0ZWFkLCB3ZSBj
cmVhdGUgYW4gTlBPYmplY3Qgb2YgYSBkaWZmZXJlbnQgY2xhc3MsIG9uZSB3aGljaCBpcyBub3Qg
Ym91bmQgdG8gYSBKYXZhU2NyaXB0IG9iamVjdC4KLSAgICAgICAgICAgIGQtPm1fd2luZG93U2Ny
aXB0TlBPYmplY3QgPSBfTlBOX0NyZWF0ZU5vU2NyaXB0T2JqZWN0KCk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICByZXR1cm4gZC0+bV93aW5kb3dTY3JpcHROUE9iamVjdDsKLX0KLSNlbmRpZgog
ICAgIAogdm9pZCBGcmFtZTo6Y2xlYXJTY3JpcHRDb250cm9sbGVyKCkKIHsKQEAgLTExMTYsNDMg
KzEwNjIsNiBAQCB2b2lkIEZyYW1lOjpjbGVhckRPTVdpbmRvdygpCiAgICAgZC0+bV9kb21XaW5k
b3cgPSAwOwogfQogCi12b2lkIEZyYW1lOjpjbGVhbnVwU2NyaXB0T2JqZWN0c0ZvclBsdWdpbih2
b2lkKiBuYXRpdmVIYW5kbGUpCi17Ci0gICAgUm9vdE9iamVjdE1hcDo6aXRlcmF0b3IgaXQgPSBk
LT5tX3Jvb3RPYmplY3RzLmZpbmQobmF0aXZlSGFuZGxlKTsKLSAgICAKLSAgICBpZiAoaXQgPT0g
ZC0+bV9yb290T2JqZWN0cy5lbmQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGl0LT5z
ZWNvbmQtPmludmFsaWRhdGUoKTsKLSAgICBkLT5tX3Jvb3RPYmplY3RzLnJlbW92ZShpdCk7Ci19
Ci0gICAgCi12b2lkIEZyYW1lOjpjbGVhclNjcmlwdE9iamVjdHMoKQotewotICAgIFJvb3RPYmpl
Y3RNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGQtPm1fcm9vdE9iamVjdHMuZW5kKCk7Ci0gICAg
Zm9yIChSb290T2JqZWN0TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGQtPm1fcm9vdE9iamVjdHMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5pbnZhbGlkYXRl
KCk7Ci0KLSAgICBkLT5tX3Jvb3RPYmplY3RzLmNsZWFyKCk7Ci0KLSAgICBpZiAoZC0+bV9iaW5k
aW5nUm9vdE9iamVjdCkgewotICAgICAgICBkLT5tX2JpbmRpbmdSb290T2JqZWN0LT5pbnZhbGlk
YXRlKCk7Ci0gICAgICAgIGQtPm1fYmluZGluZ1Jvb3RPYmplY3QgPSAwOwotICAgIH0KLQotI2lm
IEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIGlmIChkLT5tX3dpbmRvd1NjcmlwdE5Q
T2JqZWN0KSB7Ci0gICAgICAgIC8vIENhbGwgX05QTl9EZWFsbG9jYXRlT2JqZWN0KCkgaW5zdGVh
ZCBvZiBfTlBOX1JlbGVhc2VPYmplY3QoKSBzbyB0aGF0IHdlIGRvbid0IGxlYWsgaWYgYSBwbHVn
aW4gZmFpbHMgdG8gcmVsZWFzZSB0aGUgd2luZG93Ci0gICAgICAgIC8vIHNjcmlwdCBvYmplY3Qg
cHJvcGVybHkuCi0gICAgICAgIC8vIFRoaXMgc2hvdWxkbid0IGNhdXNlIGFueSBwcm9ibGVtcyBm
b3IgcGx1Z2lucyBzaW5jZSB0aGV5IHNob3VsZCBoYXZlIGFscmVhZHkgYmVlbiBzdG9wcGVkIGFu
ZCBkZXN0cm95ZWQgYXQgdGhpcyBwb2ludC4KLSAgICAgICAgX05QTl9EZWFsbG9jYXRlT2JqZWN0
KGQtPm1fd2luZG93U2NyaXB0TlBPYmplY3QpOwotICAgICAgICBkLT5tX3dpbmRvd1NjcmlwdE5Q
T2JqZWN0ID0gMDsKLSAgICB9Ci0jZW5kaWYKLQotICAgIGNsZWFyUGxhdGZvcm1TY3JpcHRPYmpl
Y3RzKCk7Ci19Ci0KIFJlbmRlclZpZXcqIEZyYW1lOjpjb250ZW50UmVuZGVyZXIoKSBjb25zdAog
ewogICAgIERvY3VtZW50KiBkb2MgPSBkb2N1bWVudCgpOwpAQCAtMTc1MSwyMCArMTY2MCwyMCBA
QCBFdmVudEhhbmRsZXIqIEZyYW1lOjpldmVudEhhbmRsZXIoKSBjb25zdAogCiB2b2lkIEZyYW1l
OjpwYWdlRGVzdHJveWVkKCkKIHsKKyAgICBBU1NFUlQocGFnZSgpKTsKKwogICAgIGlmIChGcmFt
ZSogcGFyZW50ID0gdHJlZSgpLT5wYXJlbnQoKSkKICAgICAgICAgcGFyZW50LT5sb2FkZXIoKS0+
Y2hlY2tMb2FkQ29tcGxldGUoKTsKIAotICAgIGlmIChkLT5tX3BhZ2UgJiYgZC0+bV9wYWdlLT5m
b2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZEZyYW1lKCkgPT0gdGhpcykKLSAgICAgICAgZC0+bV9w
YWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+c2V0Rm9jdXNlZEZyYW1lKDApOworICAgIGlmIChwYWdl
KCktPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkRnJhbWUoKSA9PSB0aGlzKQorICAgICAgICBw
YWdlKCktPmZvY3VzQ29udHJvbGxlcigpLT5zZXRGb2N1c2VkRnJhbWUoMCk7CiAKICAgICAvLyBU
aGlzIHdpbGwgc3RvcCBhbnkgSlMgdGltZXJzCi0gICAgaWYgKGQtPm1fc2NyaXB0LmhhdmVXaW5k
b3dTaGVsbCgpKSB7Ci0gICAgICAgIGlmIChKU0RPTVdpbmRvd1NoZWxsKiB3aW5kb3dTaGVsbCA9
IHRvSlNET01XaW5kb3dTaGVsbCh0aGlzKSkKLSAgICAgICAgICAgIHdpbmRvd1NoZWxsLT5kaXNj
b25uZWN0RnJhbWUoKTsKLSAgICB9CisgICAgaWYgKHNjcmlwdCgpLT5oYXZlV2luZG93U2hlbGwo
KSkKKyAgICAgICAgc2NyaXB0KCktPndpbmRvd1NoZWxsKCktPmRpc2Nvbm5lY3RGcmFtZSgpOwor
CisgICAgc2NyaXB0KCktPmNsZWFyU2NyaXB0T2JqZWN0cygpOwogCi0gICAgY2xlYXJTY3JpcHRP
YmplY3RzKCk7Ci0gICAgCiAgICAgZC0+bV9wYWdlID0gMDsKIH0KIApAQCAtMTk1MSwyNiArMTg2
MCwxOSBAQCBGcmFtZVByaXZhdGU6OkZyYW1lUHJpdmF0ZShQYWdlKiBwYWdlLCBGcmFtZSogcGFy
ZW50LCBGcmFtZSogdGhpc0ZyYW1lLCBIVE1MRnJhbQogICAgICwgbV9lZGl0b3IodGhpc0ZyYW1l
KQogICAgICwgbV9ldmVudEhhbmRsZXIodGhpc0ZyYW1lKQogICAgICwgbV9hbmltYXRpb25Db250
cm9sbGVyKHRoaXNGcmFtZSkKKyAgICAsIG1fbGlmZVN1cHBvcnRUaW1lcih0aGlzRnJhbWUsICZG
cmFtZTo6bGlmZVN1cHBvcnRUaW1lckZpcmVkKQorICAgICwgbV9wYWludFJlc3RyaWN0aW9uKFBh
aW50UmVzdHJpY3Rpb25Ob25lKQogICAgICwgbV9jYXJldFZpc2libGUoZmFsc2UpCiAgICAgLCBt
X2NhcmV0UGFpbnQodHJ1ZSkKICAgICAsIG1faXNQYWludGluZyhmYWxzZSkKLSAgICAsIG1fbGlm
ZVN1cHBvcnRUaW1lcih0aGlzRnJhbWUsICZGcmFtZTo6bGlmZVN1cHBvcnRUaW1lckZpcmVkKQot
ICAgICwgbV9wYWludFJlc3RyaWN0aW9uKFBhaW50UmVzdHJpY3Rpb25Ob25lKQogICAgICwgbV9o
aWdobGlnaHRUZXh0TWF0Y2hlcyhmYWxzZSkKICAgICAsIG1faW5WaWV3U291cmNlTW9kZShmYWxz
ZSkKLSAgICAsIGZyYW1lQ291bnQoMCkKICAgICAsIG1fcHJvaGliaXRzU2Nyb2xsaW5nKGZhbHNl
KQogICAgICwgbV9uZWVkc1JlYXBwbHlTdHlsZXMoZmFsc2UpCiAgICAgLCBtX2lzRGlzY29ubmVj
dGVkKGZhbHNlKQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgICwgbV93aW5k
b3dTY3JpcHROUE9iamVjdCgwKQotI2VuZGlmCiAjaWYgRlJBTUVfTE9BRFNfVVNFUl9TVFlMRVNI
RUVUCiAgICAgLCBtX3VzZXJTdHlsZVNoZWV0TG9hZGVyKDApCiAjZW5kaWYKLSNpZiBQTEFURk9S
TShNQUMpCi0gICAgLCBtX3dpbmRvd1NjcmlwdE9iamVjdChuaWwpCi0jZW5kaWYKIHsKIH0KIApk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL0ZyYW1lLmggYi9XZWJDb3JlL3BhZ2UvRnJhbWUuaApp
bmRleCA1ZjI1YWZkLi4xZWY2MDM2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvRnJhbWUuaAor
KysgYi9XZWJDb3JlL3BhZ2UvRnJhbWUuaApAQCAtOCw2ICs4LDcgQEAKICAqICAgICAgICAgICAg
ICAgICAgICAgMjAwMCBTdGVmYW4gU2NoaW1hbnNraSA8MVN0ZWluQGdteC5kZT4KICAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgVHJvbGx0ZWNoIEFTQQorICogQ29w
eXJpZ2h0IChDKSAyMDA4IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTMzLDI4ICszNCwxMiBAQAogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAj
aW5jbHVkZSAiVGV4dEdyYW51bGFyaXR5LmgiCiAKLXN0cnVjdCBOUE9iamVjdDsKLQotbmFtZXNw
YWNlIEtKUyB7Ci0KLSAgICBjbGFzcyBKU0dsb2JhbE9iamVjdDsKLQotICAgIG5hbWVzcGFjZSBC
aW5kaW5ncyB7Ci0gICAgICAgIGNsYXNzIEluc3RhbmNlOwotICAgICAgICBjbGFzcyBSb290T2Jq
ZWN0OwotICAgIH0KLQotfQotCiAjaWYgUExBVEZPUk0oTUFDKQotI2lmZGVmIF9fT0JKQ19fCi1A
Y2xhc3MgV2ViU2NyaXB0T2JqZWN0OwotI2Vsc2UKKyNpZm5kZWYgX19PQkpDX18KIGNsYXNzIE5T
QXJyYXk7CiBjbGFzcyBOU0RpY3Rpb25hcnk7CiBjbGFzcyBOU011dGFibGVEaWN0aW9uYXJ5Owog
Y2xhc3MgTlNTdHJpbmc7Ci1jbGFzcyBXZWJTY3JpcHRPYmplY3Q7CiB0eXBlZGVmIGludCBOU1dy
aXRpbmdEaXJlY3Rpb247CiAjZW5kaWYKICNlbmRpZgpAQCAtMTYwLDMzICsxNDUsOCBAQCBwdWJs
aWM6CiAgICAgdm9pZCBjbGVhclNjcmlwdENvbnRyb2xsZXIoKTsKICAgICB2b2lkIGNsZWFyRE9N
V2luZG93KCk7CiAKLSAgICB2b2lkIGNsZWFyU2NyaXB0T2JqZWN0cygpOwotICAgIHZvaWQgY2xl
YW51cFNjcmlwdE9iamVjdHNGb3JQbHVnaW4odm9pZCopOwotCiBwcml2YXRlOgotICAgIHZvaWQg
Y2xlYXJQbGF0Zm9ybVNjcmlwdE9iamVjdHMoKTsKLSAgICB2b2lkIGRpc2Nvbm5lY3RQbGF0Zm9y
bVNjcmlwdE9iamVjdHMoKTsKLQogICAgIHZvaWQgbGlmZVN1cHBvcnRUaW1lckZpcmVkKFRpbWVy
PEZyYW1lPiopOwotICAgIAotLy8gPT09IHRvIGJlIG1vdmVkIGludG8gU2NyaXB0Q29udHJvbGxl
cgotCi1wdWJsaWM6Ci0gICAgUGFzc1JlZlB0cjxLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZT4gY3Jl
YXRlU2NyaXB0SW5zdGFuY2VGb3JXaWRnZXQoV2lkZ2V0Kik7Ci0gICAgS0pTOjpCaW5kaW5nczo6
Um9vdE9iamVjdCogYmluZGluZ1Jvb3RPYmplY3QoKTsKLQotICAgIFBhc3NSZWZQdHI8S0pTOjpC
aW5kaW5nczo6Um9vdE9iamVjdD4gY3JlYXRlUm9vdE9iamVjdCh2b2lkKiBuYXRpdmVIYW5kbGUs
IEtKUzo6SlNHbG9iYWxPYmplY3QqKTsKLQotI2lmIFBMQVRGT1JNKE1BQykKLSNpZiBFTkFCTEUo
TUFDX0pBVkFfQlJJREdFKQotICAgIHN0YXRpYyB2b2lkIGluaXRKYXZhSlNCaW5kaW5ncygpOwot
I2VuZGlmCi0gICAgV2ViU2NyaXB0T2JqZWN0KiB3aW5kb3dTY3JpcHRPYmplY3QoKTsKLSNlbmRp
ZgotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgTlBPYmplY3QqIHdpbmRv
d1NjcmlwdE5QT2JqZWN0KCk7Ci0jZW5kaWYgICAgCiAKIC8vID09PSB0byBiZSBtb3ZlZCBpbnRv
IERvY3VtZW50CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9GcmFtZVByaXZhdGUuaCBiL1dl
YkNvcmUvcGFnZS9GcmFtZVByaXZhdGUuaAppbmRleCA1MTQ5NDUzLi5hMDg1Mzc1IDEwMDY0NAot
LS0gYS9XZWJDb3JlL3BhZ2UvRnJhbWVQcml2YXRlLmgKKysrIGIvV2ViQ29yZS9wYWdlL0ZyYW1l
UHJpdmF0ZS5oCkBAIC0zNiwyMyArMzYsNiBAQAogI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKICNp
bmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCiAKLW5hbWVzcGFjZSBLSlMgewotICAgIGNsYXNz
IEludGVycHJldGVyOwotICAgICAgICAKLSAgICBuYW1lc3BhY2UgQmluZGluZ3MgewotICAgICAg
ICBjbGFzcyBJbnN0YW5jZTsKLSAgICAgICAgY2xhc3MgUm9vdE9iamVjdDsKLSAgICB9Ci19Ci0K
LSNpZiBQTEFURk9STShNQUMpCi0jaWZkZWYgX19PQkpDX18KLUBjbGFzcyBXZWJTY3JpcHRPYmpl
Y3Q7Ci0jZWxzZQotY2xhc3MgV2ViU2NyaXB0T2JqZWN0OwotI2VuZGlmCi0jZW5kaWYKLQogI2lm
IFBMQVRGT1JNKFdJTikKICNpbmNsdWRlICJGcmFtZVdpbi5oIgogI2VuZGlmCkBAIC02Miw4ICs0
NSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNpZiBGUkFNRV9MT0FEU19VU0VSX1NUWUxFU0hF
RVQKICAgICBjbGFzcyBVc2VyU3R5bGVTaGVldExvYWRlcjsKICNlbmRpZgotCi0gICAgdHlwZWRl
ZiBIYXNoTWFwPHZvaWQqLCBSZWZQdHI8S0pTOjpCaW5kaW5nczo6Um9vdE9iamVjdD4gPiBSb290
T2JqZWN0TWFwOwogICAgIAogICAgIGNsYXNzIEZyYW1lUHJpdmF0ZSB7CiAgICAgcHVibGljOgpA
QCAtOTYsMTAgKzc3LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBFdmVudEhhbmRs
ZXIgbV9ldmVudEhhbmRsZXI7CiAgICAgICAgIEFuaW1hdGlvbkNvbnRyb2xsZXIgbV9hbmltYXRp
b25Db250cm9sbGVyOwogCi0gICAgICAgIGJvb2wgbV9jYXJldFZpc2libGUgOiAxOwotICAgICAg
ICBib29sIG1fY2FyZXRQYWludCA6IDE7Ci0gICAgICAgIGJvb2wgbV9pc1BhaW50aW5nIDogMTsK
LQogICAgICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IG1fdHlwaW5nU3R5
bGU7CiAKICAgICAgICAgVGltZXI8RnJhbWU+IG1fbGlmZVN1cHBvcnRUaW1lcjsKQEAgLTEwNywz
MCArODQsMTkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBSZWZQdHI8Tm9kZT4gbV9l
bGVtZW50VG9EcmF3OwogICAgICAgICBQYWludFJlc3RyaWN0aW9uIG1fcGFpbnRSZXN0cmljdGlv
bjsKICAgICAgICAgCisgICAgICAgIGJvb2wgbV9jYXJldFZpc2libGU7CisgICAgICAgIGJvb2wg
bV9jYXJldFBhaW50OworICAgICAgICBib29sIG1faXNQYWludGluZzsKKwogICAgICAgICBib29s
IG1faGlnaGxpZ2h0VGV4dE1hdGNoZXM7Ci0gICAgICAgIAogICAgICAgICBib29sIG1faW5WaWV3
U291cmNlTW9kZTsKLQotICAgICAgICB1bnNpZ25lZCBmcmFtZUNvdW50OwotCiAgICAgICAgIGJv
b2wgbV9wcm9oaWJpdHNTY3JvbGxpbmc7Ci0KICAgICAgICAgYm9vbCBtX25lZWRzUmVhcHBseVN0
eWxlczsKLSAgICAgICAgCiAgICAgICAgIGJvb2wgbV9pc0Rpc2Nvbm5lY3RlZDsKIAotICAgICAg
ICAvLyBUaGUgcm9vdCBvYmplY3QgdXNlZCBmb3Igb2JqZWN0cyBib3VuZCBvdXRzaWRlIHRoZSBj
b250ZXh0IG9mIGEgcGx1Z2luLgotICAgICAgICBSZWZQdHI8S0pTOjpCaW5kaW5nczo6Um9vdE9i
amVjdD4gbV9iaW5kaW5nUm9vdE9iamVjdDsgCi0gICAgICAgIFJvb3RPYmplY3RNYXAgbV9yb290
T2JqZWN0czsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICAgICAgTlBPYmpl
Y3QqIG1fd2luZG93U2NyaXB0TlBPYmplY3Q7Ci0jZW5kaWYKICNpZiBGUkFNRV9MT0FEU19VU0VS
X1NUWUxFU0hFRVQKICAgICAgICAgVXNlclN0eWxlU2hlZXRMb2FkZXIqIG1fdXNlclN0eWxlU2hl
ZXRMb2FkZXI7CiAjZW5kaWYKLSNpZiBQTEFURk9STShNQUMpCi0gICAgICAgIFJldGFpblB0cjxX
ZWJTY3JpcHRPYmplY3Q+IG1fd2luZG93U2NyaXB0T2JqZWN0OwotI2VuZGlmCiAgICAgfTsKIH0K
IApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL2d0ay9GcmFtZUd0ay5jcHAgYi9XZWJDb3JlL3Bh
Z2UvZ3RrL0ZyYW1lR3RrLmNwcAppbmRleCBmMWFkMzU1Li4zY2FiNWEwIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3BhZ2UvZ3RrL0ZyYW1lR3RrLmNwcAorKysgYi9XZWJDb3JlL3BhZ2UvZ3RrL0ZyYW1l
R3RrLmNwcApAQCAtMSwxMCArMSw0IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxl
IENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KLSAqIENvcHlyaWdodCAoQykg
MjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgotICogQ29weXJpZ2h0IChDKSAyMDA4IENv
bGxhYm9yYSBMdGQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogICogYXJlIG1ldDoKQEAgLTMxLDMz
ICsyNSw5IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKIAogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVk
LmgiCi0jaW5jbHVkZSAiUGx1Z2luVmlldy5oIgotI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIu
aCIKLSNpbmNsdWRlICJydW50aW1lX3Jvb3QuaCIKLSNpbmNsdWRlICJydW50aW1lLmgiCi0KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzUmVmUHRyPEtKUzo6QmluZGluZ3M6Okluc3RhbmNl
PiBGcmFtZTo6Y3JlYXRlU2NyaXB0SW5zdGFuY2VGb3JXaWRnZXQoV2lkZ2V0KiB3aWRnZXQpCi17
Ci0gICAgLy8gRklYTUU6IElkZWFsbHkgd2UnZCBoYXZlIGFuIGlzUGx1Z2luVmlldygpIGhlcmUg
YnV0IHdlIGNhbid0IGFkZCB0aGF0IHRvIHRoZSBvcGVuIHNvdXJjZSB0cmVlIHJpZ2h0IG5vdy4K
LSAgICBpZiAod2lkZ2V0LT5pc0ZyYW1lVmlldygpKQotICAgICAgICByZXR1cm4gMDsKLQotICAg
IHJldHVybiBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3Kj4od2lkZ2V0KS0+YmluZGluZ0luc3RhbmNl
KCk7Ci19Ci0KLXZvaWQgRnJhbWU6OmNsZWFyUGxhdGZvcm1TY3JpcHRPYmplY3RzKCkKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEZyYW1lOjpkaXNjb25uZWN0UGxhdGZvcm1T
Y3JpcHRPYmplY3RzKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCiBEcmFnSW1hZ2VS
ZWYgRnJhbWU6OmRyYWdJbWFnZUZvclNlbGVjdGlvbigpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQo
KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9tYWMvRnJhbWVNYWMubW0gYi9XZWJDb3JlL3Bh
Z2UvbWFjL0ZyYW1lTWFjLm1tCmluZGV4IDE5MDQ1ODIuLjc2MmUxYzEgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcGFnZS9tYWMvRnJhbWVNYWMubW0KKysrIGIvV2ViQ29yZS9wYWdlL21hYy9GcmFtZU1h
Yy5tbQpAQCAtMzAsNyArMzAsMTEgQEAKIAogI2ltcG9ydCAiQmxvY2tFeGNlcHRpb25zLmgiCiAj
aW1wb3J0ICJDb2xvck1hYy5oIgotI2ltcG9ydCAiRE9NQWJzdHJhY3RWaWV3RnJhbWUuaCIKKyNp
bXBvcnQgIkN1cnNvci5oIgorI2ltcG9ydCAiRE9NSW50ZXJuYWwuaCIKKyNpbXBvcnQgIkRvY3Vt
ZW50TG9hZGVyLmgiCisjaW1wb3J0ICJFZGl0b3JDbGllbnQuaCIKKyNpbXBvcnQgIkV2ZW50Lmgi
CiAjaW1wb3J0ICJFdmVudE5hbWVzLmgiCiAjaW1wb3J0ICJGcmFtZUxvYWRlckNsaWVudC5oIgog
I2ltcG9ydCAiRnJhbWVQcml2YXRlLmgiCkBAIC0zOCw0MCArNDIsMzMgQEAKICNpbXBvcnQgIkdy
YXBoaWNzQ29udGV4dC5oIgogI2ltcG9ydCAiSFRNTE5hbWVzLmgiCiAjaW1wb3J0ICJIVE1MVGFi
bGVDZWxsRWxlbWVudC5oIgorI2ltcG9ydCAiSGl0VGVzdFJlcXVlc3QuaCIKKyNpbXBvcnQgIkhp
dFRlc3RSZXN1bHQuaCIKKyNpbXBvcnQgIktleWJvYXJkRXZlbnQuaCIKKyNpbXBvcnQgIkxvZ2dp
bmcuaCIKKyNpbXBvcnQgIk1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMuaCIKKyNpbXBvcnQg
IlBhZ2UuaCIKKyNpbXBvcnQgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgorI2ltcG9ydCAiUGxh
dGZvcm1TY3JvbGxCYXIuaCIKKyNpbXBvcnQgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgogI2ltcG9y
dCAiUmVndWxhckV4cHJlc3Npb24uaCIKICNpbXBvcnQgIlJlbmRlclRhYmxlQ2VsbC5oIgogI2lt
cG9ydCAiU2ltcGxlRm9udERhdGEuaCIKICNpbXBvcnQgIlVzZXJTdHlsZVNoZWV0TG9hZGVyLmgi
Ci0jaW1wb3J0ICJXZWJTY3JpcHRPYmplY3RQcml2YXRlLmgiCisjaW1wb3J0ICJXZWJDb3JlVmll
d0ZhY3RvcnkuaCIKKyNpbXBvcnQgInZpc2libGVfdW5pdHMuaCIKKwogI2ltcG9ydCA8Q2FyYm9u
L0NhcmJvbi5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQVBJQ2FzdC5oPgogCi0jaWYgRU5B
QkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0jaW1wb3J0ICJjX2luc3RhbmNlLmgiCi0jaW1wb3J0
ICJOUF9qc29iamVjdC5oIgotI2ltcG9ydCAibnBydW50aW1lX2ltcGwuaCIKLSNlbmRpZgotI2lt
cG9ydCAib2JqY19pbnN0YW5jZS5oIgotI2ltcG9ydCAicnVudGltZV9yb290LmgiCi0jaW1wb3J0
ICJydW50aW1lLmgiCi0jaWYgRU5BQkxFKE1BQ19KQVZBX0JSSURHRSkKLSNpbXBvcnQgImpuaV9p
bnN0YW5jZS5oIgotI2VuZGlmCiAjaWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQogI2ltcG9y
dCAiV2ViRGFzaGJvYXJkUmVnaW9uLmgiCiAjZW5kaWYKLQotQGludGVyZmFjZSBOU09iamVjdCAo
V2ViUGx1Z2luKQotLSAoaWQpb2JqZWN0Rm9yV2ViU2NyaXB0OwotLSAoTlBPYmplY3QgKiljcmVh
dGVQbHVnaW5TY3JpcHRhYmxlT2JqZWN0OwotQGVuZAogIAogQGludGVyZmFjZSBOU1ZpZXcgKFdl
YkNvcmVIVE1MRG9jdW1lbnRWaWV3KQogLSAodm9pZClkcmF3U2luZ2xlUmVjdDooTlNSZWN0KXJl
Y3Q7CiBAZW5kCiAgCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwotdXNpbmcgbmFtZXNwYWNlIEtKUzo6
QmluZGluZ3M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTA3LDc2ICs1MDQsNiBAQCBE
cmFnSW1hZ2VSZWYgRnJhbWU6OmRyYWdJbWFnZUZvclNlbGVjdGlvbigpCiAgICAgcmV0dXJuIHNl
bGVjdGlvbkltYWdlKCk7CiB9CiAKLVBhc3NSZWZQdHI8S0pTOjpCaW5kaW5nczo6SW5zdGFuY2U+
IEZyYW1lOjpjcmVhdGVTY3JpcHRJbnN0YW5jZUZvcldpZGdldChXaWRnZXQqIHdpZGdldCkKLXsK
LSAgICBOU1ZpZXcqIHdpZGdldFZpZXcgPSB3aWRnZXQtPmdldFZpZXcoKTsKLSAgICBpZiAoIXdp
ZGdldFZpZXcpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgUmVmUHRyPFJvb3RPYmplY3Q+IHJv
b3RPYmplY3QgPSBjcmVhdGVSb290T2JqZWN0KHdpZGdldFZpZXcsIHNjcmlwdCgpLT5nbG9iYWxP
YmplY3QoKSk7Ci0KLSAgICBpZiAoW3dpZGdldFZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxl
Y3RvcihvYmplY3RGb3JXZWJTY3JpcHQpXSkgewotICAgICAgICBpZCBvYmplY3RGb3JXZWJTY3Jp
cHQgPSBbd2lkZ2V0VmlldyBvYmplY3RGb3JXZWJTY3JpcHRdOwotICAgICAgICBpZiAoIW9iamVj
dEZvcldlYlNjcmlwdCkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4gS0pT
OjpCaW5kaW5nczo6T2JqY0luc3RhbmNlOjpjcmVhdGUob2JqZWN0Rm9yV2ViU2NyaXB0LCByb290
T2JqZWN0LnJlbGVhc2UoKSk7Ci0gICAgfQotCi0gICAgaWYgKFt3aWRnZXRWaWV3IHJlc3BvbmRz
VG9TZWxlY3RvcjpAc2VsZWN0b3IoY3JlYXRlUGx1Z2luU2NyaXB0YWJsZU9iamVjdCldKSB7Ci0j
aWYgIUVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgICAgICByZXR1cm4gMDsKLSNlbHNl
Ci0gICAgICAgIE5QT2JqZWN0KiBucE9iamVjdCA9IFt3aWRnZXRWaWV3IGNyZWF0ZVBsdWdpblNj
cmlwdGFibGVPYmplY3RdOwotICAgICAgICBpZiAoIW5wT2JqZWN0KQotICAgICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgICAgIFJlZlB0cjxJbnN0YW5jZT4gaW5zdGFuY2UgPSBLSlM6OkJpbmRpbmdz
OjpDSW5zdGFuY2U6OmNyZWF0ZShucE9iamVjdCwgcm9vdE9iamVjdC5yZWxlYXNlKCkpOwotICAg
ICAgICAvLyAtY3JlYXRlUGx1Z2luU2NyaXB0YWJsZU9iamVjdCByZXR1cm5zIGEgcmV0YWluZWQg
TlBPYmplY3QuICBUaGUgY2FsbGVyIGlzIGV4cGVjdGVkIHRvIHJlbGVhc2UgaXQuCi0gICAgICAg
IF9OUE5fUmVsZWFzZU9iamVjdChucE9iamVjdCk7Ci0gICAgICAgIHJldHVybiBpbnN0YW5jZS5y
ZWxlYXNlKCk7Ci0jZW5kaWYKLSAgICB9Ci0KLSNpZiBFTkFCTEUoTUFDX0pBVkFfQlJJREdFKQot
ICAgIGpvYmplY3QgYXBwbGV0ID0gbG9hZGVyKCktPmNsaWVudCgpLT5qYXZhQXBwbGV0KHdpZGdl
dFZpZXcpOwotICAgIGlmICghYXBwbGV0KQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4g
S0pTOjpCaW5kaW5nczo6SmF2YUluc3RhbmNlOjpjcmVhdGUoYXBwbGV0LCByb290T2JqZWN0LnJl
bGVhc2UoKSk7Ci0jZWxzZQotICAgIHJldHVybiAwOwotI2VuZGlmCi19Ci0KLVdlYlNjcmlwdE9i
amVjdCogRnJhbWU6OndpbmRvd1NjcmlwdE9iamVjdCgpCi17Ci0gICAgaWYgKCFzY3JpcHQoKS0+
aXNFbmFibGVkKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKCFkLT5tX3dpbmRvd1Nj
cmlwdE9iamVjdCkgewotICAgICAgICBLSlM6OkpTT2JqZWN0KiB3aW4gPSB0b0pTRE9NV2luZG93
U2hlbGwodGhpcyk7Ci0gICAgICAgIEtKUzo6QmluZGluZ3M6OlJvb3RPYmplY3QgKnJvb3QgPSBi
aW5kaW5nUm9vdE9iamVjdCgpOwotICAgICAgICBkLT5tX3dpbmRvd1NjcmlwdE9iamVjdCA9IFtX
ZWJTY3JpcHRPYmplY3Qgc2NyaXB0T2JqZWN0Rm9ySlNPYmplY3Q6dG9SZWYod2luKSBvcmlnaW5S
b290T2JqZWN0OnJvb3Qgcm9vdE9iamVjdDpyb290XTsKLSAgICB9Ci0KLSAgICBBU1NFUlQoW2Qt
Pm1fd2luZG93U2NyaXB0T2JqZWN0LmdldCgpIGlzS2luZE9mQ2xhc3M6W0RPTUFic3RyYWN0Vmll
dyBjbGFzc11dKTsKLSAgICByZXR1cm4gZC0+bV93aW5kb3dTY3JpcHRPYmplY3QuZ2V0KCk7Ci19
Ci0KLXZvaWQgRnJhbWU6OmNsZWFyUGxhdGZvcm1TY3JpcHRPYmplY3RzKCkKLXsKLSAgICBpZiAo
ZC0+bV93aW5kb3dTY3JpcHRPYmplY3QpIHsKLSAgICAgICAgS0pTOjpCaW5kaW5nczo6Um9vdE9i
amVjdCogcm9vdCA9IGJpbmRpbmdSb290T2JqZWN0KCk7Ci0gICAgICAgIFtkLT5tX3dpbmRvd1Nj
cmlwdE9iamVjdC5nZXQoKSBfc2V0T3JpZ2luUm9vdE9iamVjdDpyb290IGFuZFJvb3RPYmplY3Q6
cm9vdF07Ci0gICAgfQotfQotCi12b2lkIEZyYW1lOjpkaXNjb25uZWN0UGxhdGZvcm1TY3JpcHRP
YmplY3RzKCkKLXsKLSAgICBpZiAoZC0+bV93aW5kb3dTY3JpcHRPYmplY3QpIHsKLSAgICAgICAg
QVNTRVJUKFtkLT5tX3dpbmRvd1NjcmlwdE9iamVjdC5nZXQoKSBpc0tpbmRPZkNsYXNzOltET01B
YnN0cmFjdFZpZXcgY2xhc3NdXSk7Ci0gICAgICAgIFsoRE9NQWJzdHJhY3RWaWV3ICopZC0+bV93
aW5kb3dTY3JpcHRPYmplY3QuZ2V0KCkgX2Rpc2Nvbm5lY3RGcmFtZV07Ci0gICAgfQotfQotCiB2
b2lkIEZyYW1lOjpzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKGNvbnN0IEtVUkwmIHVybCkKIHsK
ICAgICBkZWxldGUgZC0+bV91c2VyU3R5bGVTaGVldExvYWRlcjsKQEAgLTU5MywzOCArNTIwLDQg
QEAgdm9pZCBGcmFtZTo6c2V0VXNlclN0eWxlU2hlZXQoY29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0
KQogICAgICAgICBkLT5tX2RvYy0+c2V0VXNlclN0eWxlU2hlZXQoc3R5bGVTaGVldCk7CiB9CiAK
LSNpZiBFTkFCTEUoTUFDX0pBVkFfQlJJREdFKQotc3RhdGljIHB0aHJlYWRfdCBtYWluVGhyZWFk
OwotCi1zdGF0aWMgdm9pZCB1cGRhdGVSZW5kZXJpbmdGb3JCaW5kaW5ncyhLSlM6OkV4ZWNTdGF0
ZSogZXhlYywgS0pTOjpKU09iamVjdCogcm9vdE9iamVjdCkKLXsKLSAgICBpZiAocHRocmVhZF9z
ZWxmKCkgIT0gbWFpblRocmVhZCkKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBpZiAo
IXJvb3RPYmplY3QpCi0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgSlNET01XaW5kb3cq
IHdpbmRvdyA9IHN0YXRpY19jYXN0PEpTRE9NV2luZG93Kj4ocm9vdE9iamVjdCk7Ci0gICAgaWYg
KCF3aW5kb3cpCi0gICAgICAgIHJldHVybjsKLQotICAgIEZyYW1lKiBmcmFtZSA9IHdpbmRvdy0+
aW1wbCgpLT5mcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybjsKLQotICAg
IERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpOwotICAgIGlmICghZG9jdW1l
bnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGRvY3VtZW50LT51cGRhdGVSZW5kZXJpbmcoKTsK
LX0KLQotdm9pZCBGcmFtZTo6aW5pdEphdmFKU0JpbmRpbmdzKCkKLXsKLSAgICBtYWluVGhyZWFk
ID0gcHRocmVhZF9zZWxmKCk7Ci0gICAgS0pTOjpCaW5kaW5nczo6SmF2YUpTT2JqZWN0Ojppbml0
aWFsaXplSk5JVGhyZWFkaW5nKCk7Ci0gICAgS0pTOjpCaW5kaW5nczo6SW5zdGFuY2U6OnNldERp
ZEV4ZWN1dGVGdW5jdGlvbih1cGRhdGVSZW5kZXJpbmdGb3JCaW5kaW5ncyk7Ci19Ci0jZW5kaWYK
LQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL3F0L0Zy
YW1lUXQuY3BwIGIvV2ViQ29yZS9wYWdlL3F0L0ZyYW1lUXQuY3BwCmluZGV4IDk1NjI1MzAuLjU2
MGZkNWIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9xdC9GcmFtZVF0LmNwcAorKysgYi9XZWJD
b3JlL3BhZ2UvcXQvRnJhbWVRdC5jcHAKQEAgLTEsMTUgKzEsNCBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KLSAqIENvcHlyaWdodCAo
QykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYg
R2VvcmdlIFN0YWlrb3MgPHN0YWlrb3NAa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBT
aW1vbiBIYXVzbWFubiA8aGF1c21hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBS
b2IgQnVpcyA8YnVpc0BrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmlt
bWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA3IFRyb2xs
dGVjaCBBU0EKLSAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCiAgKiBhcmUgbWV0OgpAQCAtMzUsOTMgKzI0LDggQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogCi0jaW5jbHVkZSAiUGx1Z2luVmlldy5o
IgotCi0jaW5jbHVkZSAiRWxlbWVudC5oIgotI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgotI2lu
Y2x1ZGUgIlJlbmRlcldpZGdldC5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCi0jaW5jbHVk
ZSAiUGFnZS5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiSFRNTEVsZW1lbnQu
aCIKLSNpbmNsdWRlICJET01XaW5kb3cuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRSZXF1ZXN0Lmgi
Ci0jaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnRRdC5oIgotI2luY2x1ZGUgIkRPTUltcGxlbWVu
dGF0aW9uLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oIgotI2luY2x1ZGUg
IkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJGcmFtZVZpZXcu
aCIKLSNpbmNsdWRlICJGcmFtZVByaXZhdGUuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKLSNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5o
IgotI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50
LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgiCi0jaW5jbHVkZSAiUGxhdGZv
cm1XaGVlbEV2ZW50LmgiCi0jaW5jbHVkZSAiTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cy5o
IgotI2luY2x1ZGUgIlNlbGVjdGlvbkNvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJTY3JpcHRDb250
cm9sbGVyLmgiCi0jaW5jbHVkZSAiVHlwaW5nQ29tbWFuZC5oIgotI2luY2x1ZGUgInF0X2luc3Rh
bmNlLmgiCi0jaW5jbHVkZSAicnVudGltZV9yb290LmgiCi0jaW5jbHVkZSAicnVudGltZS5oIgot
I2luY2x1ZGUgIkpTRE9NV2luZG93LmgiCi0jaW5jbHVkZSA8UVNjcm9sbEFyZWE+Ci0jaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLyBGSVhNRTog
VHVybmVkIHRoaXMgb2ZmIHRvIGZpeCBidWlsZGJvdC4gVGhpcyBmdW5jdGlvbiBiZSBlaXRoZXIg
ZGVsZXRlZCBvciB1c2VkLgotI2lmIDAKLXN0YXRpYyB2b2lkIGRvU2Nyb2xsKGNvbnN0IFJlbmRl
ck9iamVjdCogciwgYm9vbCBpc0hvcml6b250YWwsIGludCBtdWx0aXBsaWVyKQotewotICAgIC8v
IEZJWE1FOiBUaGUgc2Nyb2xsaW5nIGRvbmUgaGVyZSBzaG91bGQgYmUgZG9uZSBpbiB0aGUgZGVm
YXVsdCBoYW5kbGVycwotICAgIC8vIG9mIHRoZSBlbGVtZW50cyByYXRoZXIgdGhhbiBoZXJlIGlu
IHRoZSBwYXJ0LgotICAgIGlmICghcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy9icm9rZW4g
c2luY2UgaXQgY2FsbHMgc2Nyb2xsIG9uIHNjcm9sbGJhcnMKLSAgICAvL2FuZCB3ZSBoYXZlIG5v
bmUgbm93Ci0gICAgLy9yLT5zY3JvbGwoZGlyZWN0aW9uLCBLV1FTY3JvbGxXaGVlbCwgbXVsdGlw
bGllcik7Ci0gICAgaWYgKCFyLT5sYXllcigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbnQg
eCA9IHItPmxheWVyKCktPnNjcm9sbFhPZmZzZXQoKTsKLSAgICBpbnQgeSA9IHItPmxheWVyKCkt
PnNjcm9sbFlPZmZzZXQoKTsKLSAgICBpZiAoaXNIb3Jpem9udGFsKQotICAgICAgICB4ICs9IG11
bHRpcGxpZXI7Ci0gICAgZWxzZQotICAgICAgICB5ICs9IG11bHRpcGxpZXI7Ci0KLSAgICByLT5s
YXllcigpLT5zY3JvbGxUb09mZnNldCh4LCB5LCB0cnVlLCB0cnVlKTsKLX0KLSNlbmRpZgotCi1Q
YXNzUmVmUHRyPEtKUzo6QmluZGluZ3M6Okluc3RhbmNlPiBGcmFtZTo6Y3JlYXRlU2NyaXB0SW5z
dGFuY2VGb3JXaWRnZXQoV2ViQ29yZTo6V2lkZ2V0KiB3aWRnZXQpCi17Ci0gICAgaWYgKHdpZGdl
dC0+aXNGcmFtZVZpZXcoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKHdpZGdldC0+aXNO
UEFQSVBsdWdpbigpKQotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UGx1Z2luVmlldyo+KHdp
ZGdldCktPmJpbmRpbmdJbnN0YW5jZSgpOwotCi0gICAgUVdpZGdldCogbmF0aXZlV2lkZ2V0ID0g
d2lkZ2V0LT5uYXRpdmVXaWRnZXQoKTsKLSAgICBpZiAoIW5hdGl2ZVdpZGdldCkKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgcmV0dXJuIEtKUzo6QmluZGluZ3M6OlF0SW5zdGFuY2U6OmNyZWF0ZShu
YXRpdmVXaWRnZXQsIGJpbmRpbmdSb290T2JqZWN0KCkpOwotfQotCi12b2lkIEZyYW1lOjpjbGVh
clBsYXRmb3JtU2NyaXB0T2JqZWN0cygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
dm9pZCBGcmFtZTo6ZGlzY29ubmVjdFBsYXRmb3JtU2NyaXB0T2JqZWN0cygpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQogRHJhZ0ltYWdlUmVmIEZyYW1lOjpkcmFnSW1hZ2VGb3JTZWxl
Y3Rpb24oKSAKIHsKICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS93aW4v
RnJhbWVXaW4uY3BwIGIvV2ViQ29yZS9wYWdlL3dpbi9GcmFtZVdpbi5jcHAKaW5kZXggOTU1MTY4
MC4uYjIwNDFlOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL3dpbi9GcmFtZVdpbi5jcHAKKysr
IGIvV2ViQ29yZS9wYWdlL3dpbi9GcmFtZVdpbi5jcHAKQEAgLTI3LDY0ICsyNywyMCBAQAogI2lu
Y2x1ZGUgInJ1bnRpbWUuaCIKICNpbmNsdWRlICJGcmFtZVdpbi5oIgogCi0jaW5jbHVkZSA8d2lu
c29jazIuaD4KLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0KICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zv
cm0uaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgotI2lu
Y2x1ZGUgIkVkaXRvckNsaWVudC5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCi0jaW5jbHVk
ZSAiRnJhbWVMb2FkUmVxdWVzdC5oIgogI2luY2x1ZGUgIkZyYW1lUHJpdmF0ZS5oIgotI2luY2x1
ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUgIkhUTUxJRnJhbWVFbGVtZW50LmgiCi0jaW5jbHVk
ZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiSFRNTFRhYmxlQ2VsbEVsZW1lbnQuaCIKLSNpbmNs
dWRlICJKU0RPTVdpbmRvdy5oIgotI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKLSNpbmNsdWRl
ICJOUF9qc29iamVjdC5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAi
UGFnZS5oIgotI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCi0jaW5jbHVkZSAiUGx1Z2luVmll
dy5oIgotI2luY2x1ZGUgIlJlZ3VsYXJFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiUmVuZGVyRnJh
bWUuaCIKLSNpbmNsdWRlICJSZW5kZXJUYWJsZUNlbGwuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3
LmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKLSNpbmNsdWRlICJUZXh0UmVzb3VyY2VE
ZWNvZGVyLmgiCi0jaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgotI2luY2x1ZGUgIm5wcnVu
dGltZV9pbXBsLmgiCi0jaW5jbHVkZSAicnVudGltZV9yb290LmgiCi0jaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKIAogdXNpbmcgc3RkOjptaW47Ci11
c2luZyBuYW1lc3BhY2UgS0pTOjpCaW5kaW5nczsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1
c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi12b2lkIEZyYW1lOjpjbGVhclBsYXRmb3JtU2Ny
aXB0T2JqZWN0cygpCi17Ci19Ci0KLXZvaWQgRnJhbWU6OmRpc2Nvbm5lY3RQbGF0Zm9ybVNjcmlw
dE9iamVjdHMoKQotewotfQotCi1QYXNzUmVmUHRyPEtKUzo6QmluZGluZ3M6Okluc3RhbmNlPiBG
cmFtZTo6Y3JlYXRlU2NyaXB0SW5zdGFuY2VGb3JXaWRnZXQoV2lkZ2V0KiB3aWRnZXQpCi17Ci0g
ICAgLy8gRklYTUU6IElkZWFsbHkgd2UnZCBoYXZlIGFuIGlzUGx1Z2luVmlldygpIGhlcmUgYnV0
IHdlIGNhbid0IGFkZCB0aGF0IHRvIHRoZSBvcGVuIHNvdXJjZSB0cmVlIHJpZ2h0IG5vdy4KLSAg
ICBpZiAod2lkZ2V0LT5pc0ZyYW1lVmlldygpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3Kj4od2lkZ2V0KS0+YmluZGluZ0luc3RhbmNlKCk7
Ci19Ci0KLXZvaWQgY29tcHV0ZVBhZ2VSZWN0c0ZvckZyYW1lKEZyYW1lKiBmcmFtZSwgY29uc3Qg
SW50UmVjdCYgcHJpbnRSZWN0LCBmbG9hdCBoZWFkZXJIZWlnaHQsIGZsb2F0IGZvb3RlckhlaWdo
dCwgZmxvYXQgdXNlclNjYWxlRmFjdG9yLFZlY3RvcjxJbnRSZWN0PiYgcGFnZXMsIGludCYgb3V0
UGFnZUhlaWdodCkKK3ZvaWQgY29tcHV0ZVBhZ2VSZWN0c0ZvckZyYW1lKEZyYW1lKiBmcmFtZSwg
Y29uc3QgSW50UmVjdCYgcHJpbnRSZWN0LCBmbG9hdCBoZWFkZXJIZWlnaHQsIGZsb2F0IGZvb3Rl
ckhlaWdodCwgZmxvYXQgdXNlclNjYWxlRmFjdG9yLCBWZWN0b3I8SW50UmVjdD4mIHBhZ2VzLCBp
bnQmIG91dFBhZ2VIZWlnaHQpCiB7CiAgICAgQVNTRVJUKGZyYW1lKTsKIApAQCAtOTQsNyArNTAs
NyBAQCB2b2lkIGNvbXB1dGVQYWdlUmVjdHNGb3JGcmFtZShGcmFtZSogZnJhbWUsIGNvbnN0IElu
dFJlY3QmIHByaW50UmVjdCwgZmxvYXQgaGVhZAogICAgIGlmICghZnJhbWUtPmRvY3VtZW50KCkg
fHwgIWZyYW1lLT52aWV3KCkgfHwgIWZyYW1lLT5kb2N1bWVudCgpLT5yZW5kZXJlcigpKQogICAg
ICAgICByZXR1cm47CiAgCi0gICAgUmVuZGVyVmlldyogcm9vdCA9IHN0YXRpY19jYXN0PFJlbmRl
clZpZXcgKj4oZnJhbWUtPmRvY3VtZW50KCktPnJlbmRlcmVyKCkpOworICAgIFJlbmRlclZpZXcq
IHJvb3QgPSBzdGF0aWNfY2FzdDxSZW5kZXJWaWV3Kj4oZnJhbWUtPmRvY3VtZW50KCktPnJlbmRl
cmVyKCkpOwogCiAgICAgaWYgKCFyb290KSB7CiAgICAgICAgIExPR19FUlJPUigiZG9jdW1lbnQg
dG8gYmUgcHJpbnRlZCBoYXMgbm8gcmVuZGVyZXIiKTsKZGlmZiAtLWdpdCBhL1dlYktpdC9tYWMv
UGx1Z2lucy9XZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3Lm1tIGIvV2ViS2l0L21hYy9QbHVnaW5z
L1dlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcubW0KaW5kZXggMmI0NWUyYi4uYWZiNzZhNCAxMDA2
NDQKLS0tIGEvV2ViS2l0L21hYy9QbHVnaW5zL1dlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcubW0K
KysrIGIvV2ViS2l0L21hYy9QbHVnaW5zL1dlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcubW0KQEAg
LTYxLDYgKzYxLDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvRnJhbWVUcmVlLmg+IAogI2ltcG9ydCA8
V2ViQ29yZS9QYWdlLmg+IAogI2ltcG9ydCA8V2ViQ29yZS9QbHVnaW5NYWluVGhyZWFkU2NoZWR1
bGVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL1NjcmlwdENvbnRyb2xsZXIuaD4KICNpbXBvcnQgPFdl
YkNvcmUvU29mdExpbmtpbmcuaD4gCiAjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVPYmpDRXh0cmFz
Lmg+CiAjaW1wb3J0IDxXZWJLaXQvbnB0ZXh0aW5wdXQuaD4KQEAgLTI1NDgsNyArMjU0OSw3IEBA
IHN0YXRpYyBOUEJyb3dzZXJUZXh0SW5wdXRGdW5jcyAqYnJvd3NlclRleHRJbnB1dEZ1bmNzKCkK
ICAgICAgICAgY2FzZSBOUE5WV2luZG93TlBPYmplY3Q6CiAgICAgICAgIHsKICAgICAgICAgICAg
IEZyYW1lKiBmcmFtZSA9IGNvcmUoW3NlbGYgd2ViRnJhbWVdKTsKLSAgICAgICAgICAgIE5QT2Jq
ZWN0KiB3aW5kb3dTY3JpcHRPYmplY3QgPSBmcmFtZSA/IGZyYW1lLT53aW5kb3dTY3JpcHROUE9i
amVjdCgpIDogMDsKKyAgICAgICAgICAgIE5QT2JqZWN0KiB3aW5kb3dTY3JpcHRPYmplY3QgPSBm
cmFtZSA/IGZyYW1lLT5zY3JpcHQoKS0+d2luZG93U2NyaXB0TlBPYmplY3QoKSA6IDA7CiAKICAg
ICAgICAgICAgIC8vIFJldHVybiB2YWx1ZSBpcyBleHBlY3RlZCB0byBiZSByZXRhaW5lZCwgYXMg
ZGVzY3JpYmVkIGhlcmU6IDxodHRwOi8vd3d3Lm1vemlsbGEub3JnL3Byb2plY3RzL3BsdWdpbnMv
bnBydW50aW1lLmh0bWwjYnJvd3NlcmFjY2Vzcz4KICAgICAgICAgICAgIGlmICh3aW5kb3dTY3Jp
cHRPYmplY3QpCkBAIC0yODQ2LDcgKzI4NDcsNyBAQCBzdGF0aWMgTlBCcm93c2VyVGV4dElucHV0
RnVuY3MgKmJyb3dzZXJUZXh0SW5wdXRGdW5jcygpCiAgICAgTE9HKFBsdWdpbnMsICJOUFBfRGVz
dHJveTogJWQiLCBucEVycik7CiAgICAgCiAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGNvcmUoW3Nl
bGYgd2ViRnJhbWVdKSkKLSAgICAgICAgZnJhbWUtPmNsZWFudXBTY3JpcHRPYmplY3RzRm9yUGx1
Z2luKHNlbGYpOworICAgICAgICBmcmFtZS0+c2NyaXB0KCktPmNsZWFudXBTY3JpcHRPYmplY3Rz
Rm9yUGx1Z2luKHNlbGYpOwogICAgICAgICAKICAgICBmcmVlKHBsdWdpbik7CiAgICAgcGx1Z2lu
ID0gTlVMTDsKZGlmZiAtLWdpdCBhL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJQbHVnaW5Db250cm9s
bGVyLm1tIGIvV2ViS2l0L21hYy9QbHVnaW5zL1dlYlBsdWdpbkNvbnRyb2xsZXIubW0KaW5kZXgg
YzZiNzAxNS4uMGE4NmE1YiAxMDA2NDQKLS0tIGEvV2ViS2l0L21hYy9QbHVnaW5zL1dlYlBsdWdp
bkNvbnRyb2xsZXIubW0KKysrIGIvV2ViS2l0L21hYy9QbHVnaW5zL1dlYlBsdWdpbkNvbnRyb2xs
ZXIubW0KQEAgLTM1LDYgKzM1LDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtU3RyaW5nLmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L0RvY3VtZW50TG9hZGVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL1NjcmlwdENvbnRyb2xsZXIuaD4K
ICNpbXBvcnQgPFdlYktpdC9XZWJEYXRhU291cmNlSW50ZXJuYWwuaD4KICNpbXBvcnQgPFdlYktp
dC9XZWJGcmFtZUludGVybmFsLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViRnJhbWVWaWV3Lmg+CkBA
IC0yMDksNyArMjEwLDcgQEAgc3RhdGljIE5TTXV0YWJsZVNldCAqcGx1Z2luVmlld3MgPSBuaWw7
CiAgICAgICAgICAgICBbdmlldyBwbHVnaW5EZXN0cm95XTsKICAgICAgICAgCiAgICAgICAgIGlm
IChGcmFtZSogZnJhbWUgPSBjb3JlKFtzZWxmIHdlYkZyYW1lXSkpCi0gICAgICAgICAgICBmcmFt
ZS0+Y2xlYW51cFNjcmlwdE9iamVjdHNGb3JQbHVnaW4oc2VsZik7CisgICAgICAgICAgICBmcmFt
ZS0+c2NyaXB0KCktPmNsZWFudXBTY3JpcHRPYmplY3RzRm9yUGx1Z2luKHNlbGYpOwogICAgICAg
ICAKICAgICAgICAgW3BsdWdpblZpZXdzIHJlbW92ZU9iamVjdDp2aWV3XTsKICAgICAgICAgW1tf
ZG9jdW1lbnRWaWV3IF93ZWJWaWV3XSByZW1vdmVQbHVnaW5JbnN0YW5jZVZpZXc6dmlld107CkBA
IC0yNTYsNyArMjU3LDcgQEAgc3RhdGljIHZvaWQgY2FuY2VsT3V0c3RhbmRpbmdDaGVjayhjb25z
dCB2b2lkICppdGVtLCB2b2lkICpjb250ZXh0KQogICAgICAgICAgICAgW2FWaWV3IHBsdWdpbkRl
c3Ryb3ldOwogICAgICAgICAKICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGNvcmUoW3NlbGYg
d2ViRnJhbWVdKSkKLSAgICAgICAgICAgIGZyYW1lLT5jbGVhbnVwU2NyaXB0T2JqZWN0c0ZvclBs
dWdpbihzZWxmKTsKKyAgICAgICAgICAgIGZyYW1lLT5zY3JpcHQoKS0+Y2xlYW51cFNjcmlwdE9i
amVjdHNGb3JQbHVnaW4oc2VsZik7CiAgICAgICAgIAogICAgICAgICBbcGx1Z2luVmlld3MgcmVt
b3ZlT2JqZWN0OmFWaWV3XTsKICAgICAgICAgW1tfZG9jdW1lbnRWaWV3IF93ZWJWaWV3XSByZW1v
dmVQbHVnaW5JbnN0YW5jZVZpZXc6YVZpZXddOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L21hYy9XZWJD
b3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5tbSBiL1dlYktpdC9tYWMvV2ViQ29yZVN1
cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW0KaW5kZXggNjUxZjAwNi4uZTIxYzEwNCAxMDA2
NDQKLS0tIGEvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5t
bQorKysgYi9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1t
CkBAIC05OCw2ICs5OCw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL1Jlc291cmNlSGFuZGxlLmg+CiAj
aW1wb3J0IDxXZWJDb3JlL1Jlc291cmNlTG9hZGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Jlc291
cmNlUmVxdWVzdC5oPgorI2ltcG9ydCA8V2ViQ29yZS9TY3JpcHRDb250cm9sbGVyLmg+CiAjaW1w
b3J0IDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlT2Jq
Q0V4dHJhcy5oPgogI2ltcG9ydCA8V2ViQ29yZS9XaWRnZXQuaD4KQEAgLTE0NDYsMTQgKzE0NDcs
MTUgQEAgU3RyaW5nIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpvdmVycmlkZU1lZGlhVHlwZSgpIGNv
bnN0CiB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojp3aW5kb3dPYmplY3RDbGVhcmVkKCkKIHsK
ICAgICBGcmFtZSAqZnJhbWUgPSBjb3JlKG1fd2ViRnJhbWUuZ2V0KCkpOworICAgIFNjcmlwdENv
bnRyb2xsZXIgKnNjcmlwdCA9IGZyYW1lLT5zY3JpcHQoKTsKICAgICBXZWJWaWV3ICp3ZWJWaWV3
ID0gZ2V0V2ViVmlldyhtX3dlYkZyYW1lLmdldCgpKTsKICAgICBXZWJGcmFtZUxvYWREZWxlZ2F0
ZUltcGxlbWVudGF0aW9uQ2FjaGUqIGltcGxlbWVudGF0aW9ucyA9IFdlYlZpZXdHZXRGcmFtZUxv
YWREZWxlZ2F0ZUltcGxlbWVudGF0aW9ucyh3ZWJWaWV3KTsKICAgICBpZiAoaW1wbGVtZW50YXRp
b25zLT5kaWRDbGVhcldpbmRvd09iamVjdEZvckZyYW1lRnVuYykgewogICAgICAgICBDYWxsRnJh
bWVMb2FkRGVsZWdhdGUoaW1wbGVtZW50YXRpb25zLT5kaWRDbGVhcldpbmRvd09iamVjdEZvckZy
YW1lRnVuYywgd2ViVmlldywgQHNlbGVjdG9yKHdlYlZpZXc6ZGlkQ2xlYXJXaW5kb3dPYmplY3Q6
Zm9yRnJhbWU6KSwKLSAgICAgICAgICAgIGZyYW1lLT53aW5kb3dTY3JpcHRPYmplY3QoKSwgbV93
ZWJGcmFtZS5nZXQoKSk7CisgICAgICAgICAgICBzY3JpcHQtPndpbmRvd1NjcmlwdE9iamVjdCgp
LCBtX3dlYkZyYW1lLmdldCgpKTsKICAgICB9IGVsc2UgaWYgKGltcGxlbWVudGF0aW9ucy0+d2lu
ZG93U2NyaXB0T2JqZWN0QXZhaWxhYmxlRnVuYykgewogICAgICAgICBDYWxsRnJhbWVMb2FkRGVs
ZWdhdGUoaW1wbGVtZW50YXRpb25zLT53aW5kb3dTY3JpcHRPYmplY3RBdmFpbGFibGVGdW5jLCB3
ZWJWaWV3LCBAc2VsZWN0b3Iod2ViVmlldzp3aW5kb3dTY3JpcHRPYmplY3RBdmFpbGFibGU6KSwK
LSAgICAgICAgICAgIGZyYW1lLT53aW5kb3dTY3JpcHRPYmplY3QoKSk7CisgICAgICAgICAgICBz
Y3JpcHQtPndpbmRvd1NjcmlwdE9iamVjdCgpKTsKICAgICB9CiAKICAgICBpZiAoW3dlYlZpZXcg
c2NyaXB0RGVidWdEZWxlZ2F0ZV0pIHsKZGlmZiAtLWdpdCBhL1dlYktpdC9tYWMvV2ViVmlldy9X
ZWJGcmFtZS5tbSBiL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQppbmRleCA0ZjVhNjRm
Li40MmE3NDkxIDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KKysr
IGIvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCkBAIC0xMzA4LDcgKzEzMDgsNyBAQCBz
dGF0aWMgTlNVUkwgKmNyZWF0ZVVuaXF1ZVdlYkRhdGFVUkwoKQogICAgIEZyYW1lKiBjb3JlRnJh
bWUgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lOwogICAgIGlmICghY29yZUZyYW1lKQogICAgICAgICBy
ZXR1cm4gMDsKLSAgICByZXR1cm4gY29yZUZyYW1lLT53aW5kb3dTY3JpcHRPYmplY3QoKTsKKyAg
ICByZXR1cm4gY29yZUZyYW1lLT5zY3JpcHQoKS0+d2luZG93U2NyaXB0T2JqZWN0KCk7CiB9CiAK
IC0gKEpTR2xvYmFsQ29udGV4dFJlZilnbG9iYWxDb250ZXh0CmRpZmYgLS1naXQgYS9XZWJLaXQv
bWFjL1dlYlZpZXcvV2ViU2NyaXB0RGVidWdnZXIubW0gYi9XZWJLaXQvbWFjL1dlYlZpZXcvV2Vi
U2NyaXB0RGVidWdnZXIubW0KaW5kZXggYzkxNTcxMy4uM2RmOTVmMyAxMDA2NDQKLS0tIGEvV2Vi
S2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVnZ2VyLm1tCisrKyBiL1dlYktpdC9tYWMvV2Vi
Vmlldy9XZWJTY3JpcHREZWJ1Z2dlci5tbQpAQCAtMjYsMTcgKzI2LDE4IEBACiAgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgogICovCiAKLSNpbmNsdWRlICJXZWJTY3JpcHREZWJ1Z2dlci5oIgotCi0jaW5jbHVkZSAiV2Vi
RnJhbWVJbnRlcm5hbC5oIgotI2luY2x1ZGUgIldlYlZpZXdJbnRlcm5hbC5oIgotI2luY2x1ZGUg
IldlYlNjcmlwdERlYnVnRGVsZWdhdGUuaCIKLSNpbmNsdWRlIDxranMvSlNHbG9iYWxPYmplY3Qu
aD4KLSNpbmNsdWRlIDxranMvRGVidWdnZXJDYWxsRnJhbWUuaD4KLSNpbmNsdWRlIDxXZWJDb3Jl
L0RPTVdpbmRvdy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KLSNpbmNsdWRlIDxXZWJD
b3JlL0pTRE9NV2luZG93Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9LVVJMLmg+CisjaW1wb3J0ICJX
ZWJTY3JpcHREZWJ1Z2dlci5oIgorCisjaW1wb3J0ICJXZWJGcmFtZUludGVybmFsLmgiCisjaW1w
b3J0ICJXZWJWaWV3SW50ZXJuYWwuaCIKKyNpbXBvcnQgIldlYlNjcmlwdERlYnVnRGVsZWdhdGUu
aCIKKyNpbXBvcnQgPGtqcy9KU0dsb2JhbE9iamVjdC5oPgorI2ltcG9ydCA8a2pzL0RlYnVnZ2Vy
Q2FsbEZyYW1lLmg+CisjaW1wb3J0IDxXZWJDb3JlL0RPTVdpbmRvdy5oPgorI2ltcG9ydCA8V2Vi
Q29yZS9GcmFtZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9KU0RPTVdpbmRvdy5oPgorI2ltcG9ydCA8
V2ViQ29yZS9LVVJMLmg+CisjaW1wb3J0IDxXZWJDb3JlL1NjcmlwdENvbnRyb2xsZXIuaD4KIAog
dXNpbmcgbmFtZXNwYWNlIEtKUzsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtMTIwLDcg
KzEyMSw3IEBAIHZvaWQgV2ViU2NyaXB0RGVidWdnZXI6OmNhbGxFdmVudChjb25zdCBEZWJ1Z2dl
ckNhbGxGcmFtZSYgZGVidWdnZXJDYWxsRnJhbWUsIGluCiAKICAgICBXZWJGcmFtZSAqd2ViRnJh
bWUgPSB0b1dlYkZyYW1lKGRlYnVnZ2VyQ2FsbEZyYW1lLmR5bmFtaWNHbG9iYWxPYmplY3QoKSk7
CiAKLSAgICBtX3RvcENhbGxGcmFtZS5hZG9wdE5TKFtbV2ViU2NyaXB0Q2FsbEZyYW1lIGFsbG9j
XSBfaW5pdFdpdGhHbG9iYWxPYmplY3Q6Y29yZSh3ZWJGcmFtZSktPndpbmRvd1NjcmlwdE9iamVj
dCgpIGNhbGxlcjptX3RvcENhbGxGcmFtZS5nZXQoKSBkZWJ1Z2dlckNhbGxGcmFtZTpkZWJ1Z2dl
ckNhbGxGcmFtZV0pOworICAgIG1fdG9wQ2FsbEZyYW1lLmFkb3B0TlMoW1tXZWJTY3JpcHRDYWxs
RnJhbWUgYWxsb2NdIF9pbml0V2l0aEdsb2JhbE9iamVjdDpjb3JlKHdlYkZyYW1lKS0+c2NyaXB0
KCktPndpbmRvd1NjcmlwdE9iamVjdCgpIGNhbGxlcjptX3RvcENhbGxGcmFtZS5nZXQoKSBkZWJ1
Z2dlckNhbGxGcmFtZTpkZWJ1Z2dlckNhbGxGcmFtZV0pOwogCiAgICAgV2ViVmlldyAqd2ViVmll
dyA9IFt3ZWJGcmFtZSB3ZWJWaWV3XTsKICAgICBbW3dlYlZpZXcgX3NjcmlwdERlYnVnRGVsZWdh
dGVGb3J3YXJkZXJdIHdlYlZpZXc6d2ViVmlldyBkaWRFbnRlckNhbGxGcmFtZTptX3RvcENhbGxG
cmFtZS5nZXQoKSBzb3VyY2VJZDpzb3VyY2VJRCBsaW5lOmxpbmVOdW1iZXIgZm9yV2ViRnJhbWU6
d2ViRnJhbWVdOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0gYi9X
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQppbmRleCBmNWQ5NDg2Li5iOGI5YWFjIDEwMDY0
NAotLS0gYS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQorKysgYi9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViVmlldy5tbQpAQCAtMjUxNSw3ICsyNTE1LDcgQEAgc3RhdGljIHZvaWQgV2ViS2l0
SW5pdGlhbGl6ZUFwcGxpY2F0aW9uQ2FjaGVQYXRoSWZOZWNlc3NhcnkoKQogICAgIEZyYW1lKiBj
b3JlRnJhbWUgPSBjb3JlKFtzZWxmIG1haW5GcmFtZV0pOwogICAgIGlmICghY29yZUZyYW1lKQog
ICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiBjb3JlRnJhbWUtPndpbmRvd1NjcmlwdE9i
amVjdCgpOworICAgIHJldHVybiBjb3JlRnJhbWUtPnNjcmlwdCgpLT53aW5kb3dTY3JpcHRPYmpl
Y3QoKTsKIH0KIAogLy8gR2V0IHRoZSBhcHByb3ByaWF0ZSB1c2VyLWFnZW50IHN0cmluZyBmb3Ig
YSBwYXJ0aWN1bGFyIFVSTC4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22671</attachid>
            <date>2008-08-05 18:27:38 -0700</date>
            <delta_ts>2008-08-06 01:21:05 -0700</delta_ts>
            <desc>Move more methods from Frame into ScriptController</desc>
            <filename>Move-more-methods-from-Frame-into-ScriptController.patch</filename>
            <type>text/plain</type>
            <size>74595</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">MTkyNzhjYmM3MTI0MTk5OTEyNWRmMmI2NDVkZDljMjM1ZDhhODA4ZgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5hbSBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggNTM0Yzc5
My4uNTc5YmNhMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9XZWJD
b3JlL0dOVW1ha2VmaWxlLmFtCkBAIC0xMDUwLDYgKzEwNTAsNyBAQCB3ZWJjb3JlX3NvdXJjZXMg
Kz0gXAogCVdlYkNvcmUveG1sL1hNTFNlcmlhbGl6ZXIuY3BwCiAKIHdlYmNvcmVndGtfc291cmNl
cyArPSBcCisJV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyR3RrLmNwcCBcCiAJ
V2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5EYXRhR3RrLmNwcCBcCiAJV2ViQ29yZS9wbHVnaW5z
L2d0ay9QbHVnaW5QYWNrYWdlR3RrLmNwcCBcCiAJV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5W
aWV3R3RrLmNwcApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLk5QQVBJLmV4cCBiL1dlYkNv
cmUvV2ViQ29yZS5OUEFQSS5leHAKaW5kZXggYjFjZTQ0Mi4uZmQxNWM1MSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9XZWJDb3JlLk5QQVBJLmV4cAorKysgYi9XZWJDb3JlL1dlYkNvcmUuTlBBUEkuZXhw
CkBAIC0xNiw0ICsxNiw1IEBAIF9fTlBOX1JldGFpbk9iamVjdAogX19OUE5fU2V0RXhjZXB0aW9u
CiBfX05QTl9TZXRQcm9wZXJ0eQogX19OUE5fVVRGOEZyb21JZGVudGlmaWVyCi1fX1pON1dlYkNv
cmU1RnJhbWUyMHdpbmRvd1NjcmlwdE5QT2JqZWN0RXYKK19fWk43V2ViQ29yZTE2U2NyaXB0Q29u
dHJvbGxlcjIwd2luZG93U2NyaXB0TlBPYmplY3RFdgorX19aTjdXZWJDb3JlMTZTY3JpcHRDb250
cm9sbGVyMjljbGVhbnVwU2NyaXB0T2JqZWN0c0ZvclBsdWdpbkVQdgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9XZWJDb3JlLmJhc2UuZXhwIGIvV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCmluZGV4IGQz
YTM2NmMuLjIxZmEzMGMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAorKysg
Yi9XZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAKQEAgLTM2Miw2ICszNjIsNyBAQCBfX1pON1dlYkNv
cmUxNk5hdmlnYXRpb25BY3Rpb25DMUVSS05TXzRLVVJMRU5TXzEzRnJhbWVMb2FkVHlwZUViCiBf
X1pON1dlYkNvcmUxNk5hdmlnYXRpb25BY3Rpb25DMUVSS05TXzRLVVJMRU5TXzE0TmF2aWdhdGlv
blR5cGVFCiBfX1pON1dlYkNvcmUxNk5hdmlnYXRpb25BY3Rpb25DMUV2CiBfX1pON1dlYkNvcmUx
NlNjcmlwdENvbnRyb2xsZXIxMGluaXRTY3JpcHRFdgorX19aTjdXZWJDb3JlMTZTY3JpcHRDb250
cm9sbGVyMTh3aW5kb3dTY3JpcHRPYmplY3RFdgogX19aTjdXZWJDb3JlMTZjb2xvckZyb21OU0Nv
bG9yRVA3TlNDb2xvcgogX19aTjdXZWJDb3JlMTZjcmVhdGVGdWxsTWFya3VwRVBLTlNfNE5vZGVF
CiBfX1pON1dlYkNvcmUxNmNyZWF0ZUZ1bGxNYXJrdXBFUEtOU181UmFuZ2VFCkBAIC00NjEsMTYg
KzQ2MiwxMyBAQCBfX1pON1dlYkNvcmU1RnJhbWUxM3NldFpvb21GYWN0b3JFZmIKIF9fWk43V2Vi
Q29yZTVGcmFtZTE0ZnJhbWVGb3JXaWRnZXRFUEtOU182V2lkZ2V0RQogX19aTjdXZWJDb3JlNUZy
YW1lMTVzZW5kU2Nyb2xsRXZlbnRFdgogX19aTjdXZWJDb3JlNUZyYW1lMTZhZGp1c3RQYWdlSGVp
Z2h0RVBmZmZmCi1fX1pON1dlYkNvcmU1RnJhbWUxN2JpbmRpbmdSb290T2JqZWN0RXYKIF9fWk43
V2ViQ29yZTVGcmFtZTE3c2V0SXNEaXNjb25uZWN0ZWRFYgotX19aTjdXZWJDb3JlNUZyYW1lMTh3
aW5kb3dTY3JpcHRPYmplY3RFdgogX19aTjdXZWJDb3JlNUZyYW1lMjBzZXRTZWxlY3Rpb25Gcm9t
Tm9uZUV2CiBfX1pON1dlYkNvcmU1RnJhbWUyMW1hcmtBbGxNYXRjaGVzRm9yVGV4dEVSS05TXzZT
dHJpbmdFYmoKIF9fWk43V2ViQ29yZTVGcmFtZTIxc2V0UHJvaGliaXRzU2Nyb2xsaW5nRWIKIF9f
Wk43V2ViQ29yZTVGcmFtZTI0Y29tcHV0ZUFuZFNldFR5cGluZ1N0eWxlRVBOU18xOUNTU1N0eWxl
RGVjbGFyYXRpb25FTlNfMTBFZGl0QWN0aW9uRQogX19aTjdXZWJDb3JlNUZyYW1lMjVtYXRjaExh
YmVsc0FnYWluc3RFbGVtZW50RVA3TlNBcnJheVBOU183RWxlbWVudEUKIF9fWk43V2ViQ29yZTVG
cmFtZTI4c2VhcmNoRm9yTGFiZWxzQmVmb3JlRWxlbWVudEVQN05TQXJyYXlQTlNfN0VsZW1lbnRF
Ci1fX1pON1dlYkNvcmU1RnJhbWUyOWNsZWFudXBTY3JpcHRPYmplY3RzRm9yUGx1Z2luRVB2CiBf
X1pON1dlYkNvcmU1RnJhbWUyOWZvcmNlTGF5b3V0V2l0aFBhZ2VXaWR0aFJhbmdlRWZmYgogX19a
TjdXZWJDb3JlNUZyYW1lMzRzZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkRWIKIF9f
Wk43V2ViQ29yZTVGcmFtZTRpbml0RXYKQEAgLTU2MSw2ICs1NTksNyBAQCBfX1pON1dlYkNvcmU4
Rm9ybURhdGFEMUV2CiBfX1pON1dlYkNvcmU4SW50UG9pbnRDMUVSSzhfTlNQb2ludAogX19aTjdX
ZWJDb3JlOFNldHRpbmdzMTRzZXRKYXZhRW5hYmxlZEViCiBfX1pON1dlYkNvcmU4U2V0dGluZ3Mx
NnNldFVzZXNQYWdlQ2FjaGVFYgorX19aTjdXZWJDb3JlOFNldHRpbmdzMTZzZXRab29tc1RleHRP
bmx5RWIKIF9fWk43V2ViQ29yZThTZXR0aW5nczE3c2V0UGx1Z2luc0VuYWJsZWRFYgogX19aTjdX
ZWJDb3JlOFNldHRpbmdzMThzZXRET01QYXN0ZUFsbG93ZWRFYgogX19aTjdXZWJDb3JlOFNldHRp
bmdzMThzZXREZWZhdWx0Rm9udFNpemVFaQpAQCAtNTc2LDcgKzU3NSw2IEBAIF9fWk43V2ViQ29y
ZThTZXR0aW5nczIyc2V0U2hvd3NVUkxzSW5Ub29sVGlwc0ViCiBfX1pON1dlYkNvcmU4U2V0dGlu
Z3MyM3NldERlZmF1bHRGaXhlZEZvbnRTaXplRWkKIF9fWk43V2ViQ29yZThTZXR0aW5nczIzc2V0
RWRpdGFibGVMaW5rQmVoYXZpb3JFTlNfMjBFZGl0YWJsZUxpbmtCZWhhdmlvckUKIF9fWk43V2Vi
Q29yZThTZXR0aW5nczIzc2V0VXBkYXRlc1doZW5PZmZzY3JlZW5FYgotX19aTjdXZWJDb3JlOFNl
dHRpbmdzMTZzZXRab29tc1RleHRPbmx5RWIKIF9fWk43V2ViQ29yZThTZXR0aW5nczI0c2V0VGV4
dEFyZWFzQXJlUmVzaXphYmxlRWIKIF9fWk43V2ViQ29yZThTZXR0aW5nczI1c2V0RGV2ZWxvcGVy
RXh0cmFzRW5hYmxlZEViCiBfX1pON1dlYkNvcmU4U2V0dGluZ3MyNXNldE1pbmltdW1Mb2dpY2Fs
Rm9udFNpemVFaQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUvV2Vi
Q29yZS5wcm8KaW5kZXggZDM1YWRjNy4uNmVkOWIxNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJD
b3JlLnBybworKysgYi9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC05MjIsNiArOTIyLDcgQEAgSEVB
REVSUyArPSBcCiAgICAgJCRQV0QvcGxhdGZvcm0vbmV0d29yay9xdC9RTmV0d29ya1JlcGx5SGFu
ZGxlci5oCiAKIFNPVVJDRVMgKz0gXAorICAgIGJpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXJR
dC5jcHAgXAogICAgIGJyaWRnZS9xdC9xdF9jbGFzcy5jcHAgXAogICAgIGJyaWRnZS9xdC9xdF9p
bnN0YW5jZS5jcHAgXAogICAgIGJyaWRnZS9xdC9xdF9ydW50aW1lLmNwcCBcCmRpZmYgLS1naXQg
YS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvV2ViQ29yZS9XZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCA1YzcwMWI5Li5jMDg1NWRhIDEwMDY0NAotLS0g
YS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1dlYkNvcmUvV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTE0MTgzLDYgKzE0MTgzLDEwIEBACiAJCQkJ
CT4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxiaW5k
aW5nc1xqc1xTY3JpcHRDb250cm9sbGVyV2luLmNwcCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0K
KwkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxiaW5kaW5nc1xqc1xTdHJpbmdTb3Vy
Y2VQcm92aWRlci5oIg0KIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBjYzQ3MTk1Li5kOGYxMmJhIDEwMDY0NAotLS0g
YS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjE4Niw2ICsyMTg2LDcgQEAK
IAkJQTgzQjc5NTUwQ0NCMDEyNTAwMEIwODI1IC8qIERPTVNWR0ZvbnRGYWNlRWxlbWVudEludGVy
bmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODNC
Nzk0NjBDQ0IwMTI1MDAwQjA4MjUgLyogRE9NU1ZHRm9udEZhY2VFbGVtZW50SW50ZXJuYWwuaCAq
LzsgfTsKIAkJQTgzQjc5NTYwQ0NCMDEyNTAwMEIwODI1IC8qIERPTVNWR0ZvbnRGYWNlRWxlbWVu
dC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4M0I3
OTQ3MENDQjAxMjUwMDBCMDgyNSAvKiBET01TVkdGb250RmFjZUVsZW1lbnQubW0gKi87IH07CiAJ
CUE4M0I3OTU3MENDQjAxMjUwMDBCMDgyNSAvKiBET01TVkdGb250RmFjZUVsZW1lbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4M0I3OTQ4MENDQjAx
MjUwMDBCMDgyNSAvKiBET01TVkdGb250RmFjZUVsZW1lbnQuaCAqLzsgfTsKKwkJQTgzRTFDNzQw
RTQ5MDQyQzAwMTQwQjlDIC8qIFNjcmlwdENvbnRyb2xsZXJNYWMubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODNFMUM3MjBFNDkwNDJCMDAxNDBCOUMg
LyogU2NyaXB0Q29udHJvbGxlck1hYy5tbSAqLzsgfTsKIAkJQTg0RUJENzgwQ0I4Qzg5MjAwMDc5
NjA5IC8qIEpTU3R5bGVTaGVldExpc3RDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg0RUJENzcwQ0I4Qzg5MjAwMDc5NjA5IC8qIEpTU3R5
bGVTaGVldExpc3RDdXN0b20uY3BwICovOyB9OwogCQlBODRFQkQ4MzBDQjhDOTc3MDAwNzk2MDkg
LyogSlNTdHlsZVNoZWV0TGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTg0RUJEODEwQ0I4Qzk3NzAwMDc5NjA5IC8qIEpTU3R5bGVTaGVldExpc3Qu
aCAqLzsgfTsKIAkJQTg0RUJEODQwQ0I4Qzk3NzAwMDc5NjA5IC8qIEpTU3R5bGVTaGVldExpc3Qu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg0RUJE
ODIwQ0I4Qzk3NzAwMDc5NjA5IC8qIEpTU3R5bGVTaGVldExpc3QuY3BwICovOyB9OwpAQCAtNjUy
MCw2ICs2NTIxLDcgQEAKIAkJQTgzQjc5NDYwQ0NCMDEyNTAwMEIwODI1IC8qIERPTVNWR0ZvbnRG
YWNlRWxlbWVudEludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERP
TVNWR0ZvbnRGYWNlRWxlbWVudEludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUE4M0I3OTQ3MENDQjAxMjUwMDBCMDgyNSAvKiBET01TVkdGb250RmFjZUVsZW1lbnQubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBET01TVkdGb250RmFjZUVs
ZW1lbnQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4M0I3OTQ4MENDQjAxMjUw
MDBCMDgyNSAvKiBET01TVkdGb250RmFjZUVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRE9NU1ZHRm9udEZhY2VFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUE4M0UxQzcyMEU0OTA0MkIwMDE0MEI5QyAvKiBTY3JpcHRDb250cm9sbGVyTWFj
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU2NyaXB0Q29udHJv
bGxlck1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTg0RUJENzcwQ0I4Qzg5
MjAwMDc5NjA5IC8qIEpTU3R5bGVTaGVldExpc3RDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNTdHlsZVNoZWV0TGlzdEN1c3RvbS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4NEVCRDgxMENCOEM5NzcwMDA3OTYwOSAvKiBKU1N0eWxl
U2hlZXRMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU3R5bGVTaGVl
dExpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTg0RUJEODIwQ0I4Qzk3NzAw
MDc5NjA5IC8qIEpTU3R5bGVTaGVldExpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNTdHlsZVNoZWV0TGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xMjMyMyw2ICsxMjMyNSw3IEBACiAJCQkJQkNBMzc4QkEwRDE1RjY0MjAwQjc5M0Q2
IC8qIFNjaGVkdWxlZEFjdGlvbi5jcHAgKi8sCiAJCQkJQkNBMzc4QkIwRDE1RjY0MjAwQjc5M0Q2
IC8qIFNjaGVkdWxlZEFjdGlvbi5oICovLAogCQkJCTkzQjcwRDUzMDlFQjBDN0MwMDlEODQ2OCAv
KiBTY3JpcHRDb250cm9sbGVyLmNwcCAqLywKKwkJCQlBODNFMUM3MjBFNDkwNDJCMDAxNDBCOUMg
LyogU2NyaXB0Q29udHJvbGxlck1hYy5tbSAqLywKIAkJCQk5M0I3MEQ1NDA5RUIwQzdDMDA5RDg0
NjggLyogU2NyaXB0Q29udHJvbGxlci5oICovLAogCQkJCTY1NDg4RDZBMERENUE4M0QwMDlEODNC
MiAvKiBTdHJpbmdTb3VyY2VQcm92aWRlci5oICovLAogCQkJKTsKQEAgLTE3MDg4LDYgKzE3MDkx
LDcgQEAKIAkJCQlCQ0RGRDQ5NTBFMzA1OTJGMDA5RDEwQUQgLyogSlNYTUxIdHRwUmVxdWVzdFVw
bG9hZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTI4OEU3MjBFMzAwNUQ2MDAzNjE5QUUgLyog
V2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMjg4RTc0MEUz
MDA1RDYwMDM2MTlBRSAvKiBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUE4M0UxQzc0MEU0OTA0MkMwMDE0MEI5QyAvKiBTY3JpcHRDb250cm9sbGVyTWFjLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vz
c2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENv
bnRyb2xsZXIuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcApp
bmRleCA2ZDM0YmRkLi5mYzBkNzcwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nj
cmlwdENvbnRyb2xsZXIuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJv
bGxlci5jcHAKQEAgLTI5LDE2ICsyOSwyNCBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVk
ZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJHQ0NvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJK
U0RvY3VtZW50LmgiCiAjaW5jbHVkZSAiSlNET01XaW5kb3cuaCIKKyNpbmNsdWRlICJKU0RvY3Vt
ZW50LmgiCisjaW5jbHVkZSAiSlNFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAibnBydW50aW1l
X2ltcGwuaCIKKyNpbmNsdWRlICJOUF9qc29iamVjdC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNp
bmNsdWRlICJQYWdlR3JvdXAuaCIKKyNpbmNsdWRlICJydW50aW1lX3Jvb3QuaCIKICNpbmNsdWRl
ICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlN0cmluZ1NvdXJjZVByb3ZpZGVyLmgiCi0jaW5jbHVk
ZSAiSlNFdmVudExpc3RlbmVyLmgiCisKICNpbmNsdWRlIDxranMvY29tcGxldGlvbi5oPgogI2lu
Y2x1ZGUgPGtqcy9kZWJ1Z2dlci5oPgogCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkp
CisjaW5jbHVkZSAiSFRNTFBsdWdJbkVsZW1lbnQuaCIKKyNlbmRpZgorCiAjaWYgRU5BQkxFKFNW
RykKICNpbmNsdWRlICJKU1NWR0xhenlFdmVudExpc3RlbmVyLmgiCiAjZW5kaWYKQEAgLTU0LDcg
KzYyLDIwIEBAIFNjcmlwdENvbnRyb2xsZXI6OlNjcmlwdENvbnRyb2xsZXIoRnJhbWUqIGZyYW1l
KQogICAgICwgbV9zb3VyY2VVUkwoMCkKICAgICAsIG1fcHJvY2Vzc2luZ1RpbWVyQ2FsbGJhY2so
ZmFsc2UpCiAgICAgLCBtX3BhdXNlZChmYWxzZSkKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lO
X0FQSSkKKyAgICAsIG1fd2luZG93U2NyaXB0TlBPYmplY3QoMCkKKyNlbmRpZgorI2lmIFBMQVRG
T1JNKE1BQykKKyAgICAsIG1fd2luZG93U2NyaXB0T2JqZWN0KDApCisjZW5kaWYKIHsKKyNpZiBQ
TEFURk9STShNQUMpICYmIEVOQUJMRShNQUNfSkFWQV9CUklER0UpCisgICAgc3RhdGljIGJvb2wg
aW5pdGlhbGl6ZWRKYXZhSlNCaW5kaW5nczsKKyAgICBpZiAoIWluaXRpYWxpemVkSmF2YUpTQmlu
ZGluZ3MpIHsKKyAgICAgICAgaW5pdGlhbGl6ZWRKYXZhSlNCaW5kaW5ncyA9IHRydWU7CisgICAg
ICAgIGluaXRKYXZhSlNCaW5kaW5ncygpOworICAgIH0KKyNlbmRpZgogfQogCiBTY3JpcHRDb250
cm9sbGVyOjp+U2NyaXB0Q29udHJvbGxlcigpCkBAIC02NSw2ICs4Niw4IEBAIFNjcmlwdENvbnRy
b2xsZXI6On5TY3JpcHRDb250cm9sbGVyKCkKICAgICAgICAgLy8gSXQncyBsaWtlbHkgdGhhdCBy
ZWxlYXNpbmcgdGhlIGdsb2JhbCBvYmplY3QgaGFzIGNyZWF0ZWQgYSBsb3Qgb2YgZ2FyYmFnZS4K
ICAgICAgICAgZ2NDb250cm9sbGVyKCkuZ2FyYmFnZUNvbGxlY3RTb29uKCk7CiAgICAgfQorCisg
ICAgZGlzY29ubmVjdFBsYXRmb3JtU2NyaXB0T2JqZWN0cygpOwogfQogCiBKU1ZhbHVlKiBTY3Jp
cHRDb250cm9sbGVyOjpldmFsdWF0ZShjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgaW50IGJhc2VM
aW5lLCBjb25zdCBTdHJpbmcmIHN0cikgCkBAIC0yMTUsNCArMjM4LDExMSBAQCB2b2lkIFNjcmlw
dENvbnRyb2xsZXI6OnVwZGF0ZURvY3VtZW50KCkKIH0KIAogCitCaW5kaW5nczo6Um9vdE9iamVj
dCogU2NyaXB0Q29udHJvbGxlcjo6YmluZGluZ1Jvb3RPYmplY3QoKQoreworICAgIGlmICghaXNF
bmFibGVkKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKCFtX2JpbmRpbmdSb290T2Jq
ZWN0KQorICAgICAgICBtX2JpbmRpbmdSb290T2JqZWN0ID0gQmluZGluZ3M6OlJvb3RPYmplY3Q6
OmNyZWF0ZSgwLCBnbG9iYWxPYmplY3QoKSk7CisgICAgcmV0dXJuIG1fYmluZGluZ1Jvb3RPYmpl
Y3QuZ2V0KCk7Cit9CisKK1Bhc3NSZWZQdHI8QmluZGluZ3M6OlJvb3RPYmplY3Q+IFNjcmlwdENv
bnRyb2xsZXI6OmNyZWF0ZVJvb3RPYmplY3Qodm9pZCogbmF0aXZlSGFuZGxlKQoreworICAgIFJv
b3RPYmplY3RNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yb290T2JqZWN0cy5maW5kKG5hdGl2ZUhhbmRs
ZSk7CisgICAgaWYgKGl0ICE9IG1fcm9vdE9iamVjdHMuZW5kKCkpCisgICAgICAgIHJldHVybiBp
dC0+c2Vjb25kOworCisgICAgUmVmUHRyPEJpbmRpbmdzOjpSb290T2JqZWN0PiByb290T2JqZWN0
ID0gQmluZGluZ3M6OlJvb3RPYmplY3Q6OmNyZWF0ZShuYXRpdmVIYW5kbGUsIGdsb2JhbE9iamVj
dCgpKTsKKworICAgIG1fcm9vdE9iamVjdHMuc2V0KG5hdGl2ZUhhbmRsZSwgcm9vdE9iamVjdCk7
CisgICAgcmV0dXJuIHJvb3RPYmplY3QucmVsZWFzZSgpOworfQorCisjaWYgRU5BQkxFKE5FVFND
QVBFX1BMVUdJTl9BUEkpCitOUE9iamVjdCogU2NyaXB0Q29udHJvbGxlcjo6d2luZG93U2NyaXB0
TlBPYmplY3QoKQoreworICAgIGlmICghbV93aW5kb3dTY3JpcHROUE9iamVjdCkgeworICAgICAg
ICBpZiAoaXNFbmFibGVkKCkpIHsKKyAgICAgICAgICAgIC8vIEphdmFTY3JpcHQgaXMgZW5hYmxl
ZCwgc28gdGhlcmUgaXMgYSBKYXZhU2NyaXB0IHdpbmRvdyBvYmplY3QuCisgICAgICAgICAgICAv
LyBSZXR1cm4gYW4gTlBPYmplY3QgYm91bmQgdG8gdGhlIHdpbmRvdyBvYmplY3QuCisgICAgICAg
ICAgICBKU09iamVjdCogd2luID0gd2luZG93U2hlbGwoKS0+d2luZG93KCk7CisgICAgICAgICAg
ICBBU1NFUlQod2luKTsKKyAgICAgICAgICAgIEJpbmRpbmdzOjpSb290T2JqZWN0KiByb290ID0g
YmluZGluZ1Jvb3RPYmplY3QoKTsKKyAgICAgICAgICAgIG1fd2luZG93U2NyaXB0TlBPYmplY3Qg
PSBfTlBOX0NyZWF0ZVNjcmlwdE9iamVjdCgwLCB3aW4sIHJvb3QpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgLy8gSmF2YVNjcmlwdCBpcyBub3QgZW5hYmxlZCwgc28gd2UgY2Fubm90
IGJpbmQgdGhlIE5QT2JqZWN0IHRvIHRoZSBKYXZhU2NyaXB0IHdpbmRvdyBvYmplY3QuCisgICAg
ICAgICAgICAvLyBJbnN0ZWFkLCB3ZSBjcmVhdGUgYW4gTlBPYmplY3Qgb2YgYSBkaWZmZXJlbnQg
Y2xhc3MsIG9uZSB3aGljaCBpcyBub3QgYm91bmQgdG8gYSBKYXZhU2NyaXB0IG9iamVjdC4KKyAg
ICAgICAgICAgIG1fd2luZG93U2NyaXB0TlBPYmplY3QgPSBfTlBOX0NyZWF0ZU5vU2NyaXB0T2Jq
ZWN0KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbV93aW5kb3dTY3JpcHROUE9i
amVjdDsKK30KKworTlBPYmplY3QqIFNjcmlwdENvbnRyb2xsZXI6OmNyZWF0ZVNjcmlwdE9iamVj
dEZvclBsdWdpbkVsZW1lbnQoSFRNTFBsdWdJbkVsZW1lbnQqIHBsdWdpbikKK3sKKyAgICAvLyBD
YW4ndCBjcmVhdGUgTlBPYmplY3RzIHdoZW4gSmF2YVNjcmlwdCBpcyBkaXNhYmxlZAorICAgIGlm
ICghaXNFbmFibGVkKCkpCisgICAgICAgIHJldHVybiBfTlBOX0NyZWF0ZU5vU2NyaXB0T2JqZWN0
KCk7CisKKyAgICAvLyBDcmVhdGUgYSBKU09iamVjdCBib3VuZCB0byB0aGlzIGVsZW1lbnQKKyAg
ICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOworICAgIEpT
VmFsdWUqIGpzRWxlbWVudFZhbHVlID0gdG9KUyhleGVjLCBwbHVnaW4pOworICAgIGlmICghanNF
bGVtZW50VmFsdWUgfHwgIWpzRWxlbWVudFZhbHVlLT5pc09iamVjdCgpKQorICAgICAgICByZXR1
cm4gX05QTl9DcmVhdGVOb1NjcmlwdE9iamVjdCgpOworCisgICAgLy8gV3JhcCB0aGUgSlNPYmpl
Y3QgaW4gYW4gTlBPYmplY3QKKyAgICByZXR1cm4gX05QTl9DcmVhdGVTY3JpcHRPYmplY3QoMCwg
anNFbGVtZW50VmFsdWUtPmdldE9iamVjdCgpLCBiaW5kaW5nUm9vdE9iamVjdCgpKTsKK30KKyNl
bmRpZgorCisjaWYgIVBMQVRGT1JNKE1BQykKK3ZvaWQgU2NyaXB0Q29udHJvbGxlcjo6Y2xlYXJQ
bGF0Zm9ybVNjcmlwdE9iamVjdHMoKQoreworfQorCit2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmRp
c2Nvbm5lY3RQbGF0Zm9ybVNjcmlwdE9iamVjdHMoKQoreworfQorI2VuZGlmCisKK3ZvaWQgU2Ny
aXB0Q29udHJvbGxlcjo6Y2xlYW51cFNjcmlwdE9iamVjdHNGb3JQbHVnaW4odm9pZCogbmF0aXZl
SGFuZGxlKQoreworICAgIFJvb3RPYmplY3RNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yb290T2JqZWN0
cy5maW5kKG5hdGl2ZUhhbmRsZSk7CisKKyAgICBpZiAoaXQgPT0gbV9yb290T2JqZWN0cy5lbmQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaXQtPnNlY29uZC0+aW52YWxpZGF0ZSgpOworICAg
IG1fcm9vdE9iamVjdHMucmVtb3ZlKGl0KTsKK30KKwordm9pZCBTY3JpcHRDb250cm9sbGVyOjpj
bGVhclNjcmlwdE9iamVjdHMoKQoreworICAgIFJvb3RPYmplY3RNYXA6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IG1fcm9vdE9iamVjdHMuZW5kKCk7CisgICAgZm9yIChSb290T2JqZWN0TWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IG1fcm9vdE9iamVjdHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQor
ICAgICAgICBpdC0+c2Vjb25kLT5pbnZhbGlkYXRlKCk7CisKKyAgICBtX3Jvb3RPYmplY3RzLmNs
ZWFyKCk7CisKKyAgICBpZiAobV9iaW5kaW5nUm9vdE9iamVjdCkgeworICAgICAgICBtX2JpbmRp
bmdSb290T2JqZWN0LT5pbnZhbGlkYXRlKCk7CisgICAgICAgIG1fYmluZGluZ1Jvb3RPYmplY3Qg
PSAwOworICAgIH0KKworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgIGlmICht
X3dpbmRvd1NjcmlwdE5QT2JqZWN0KSB7CisgICAgICAgIC8vIENhbGwgX05QTl9EZWFsbG9jYXRl
T2JqZWN0KCkgaW5zdGVhZCBvZiBfTlBOX1JlbGVhc2VPYmplY3QoKSBzbyB0aGF0IHdlIGRvbid0
IGxlYWsgaWYgYSBwbHVnaW4gZmFpbHMgdG8gcmVsZWFzZSB0aGUgd2luZG93CisgICAgICAgIC8v
IHNjcmlwdCBvYmplY3QgcHJvcGVybHkuCisgICAgICAgIC8vIFRoaXMgc2hvdWxkbid0IGNhdXNl
IGFueSBwcm9ibGVtcyBmb3IgcGx1Z2lucyBzaW5jZSB0aGV5IHNob3VsZCBoYXZlIGFscmVhZHkg
YmVlbiBzdG9wcGVkIGFuZCBkZXN0cm95ZWQgYXQgdGhpcyBwb2ludC4KKyAgICAgICAgX05QTl9E
ZWFsbG9jYXRlT2JqZWN0KG1fd2luZG93U2NyaXB0TlBPYmplY3QpOworICAgICAgICBtX3dpbmRv
d1NjcmlwdE5QT2JqZWN0ID0gMDsKKyAgICB9CisjZW5kaWYKKworICAgIGNsZWFyUGxhdGZvcm1T
Y3JpcHRPYmplY3RzKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5oIGIvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TY3JpcHRDb250cm9sbGVyLmgKaW5kZXggZTYzYmZmMy4uNjg0ZGU0NCAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmgKKysrIGIvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmgKQEAgLTIsNiArMiw3IEBACiAgKiAgQ29weXJp
Z2h0IChDKSAxOTk5IEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0
IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCiAgKiAgQ29weXJpZ2h0IChDKSAy
MDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIw
MDggRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAg
LTI0LDE5ICsyNSwzOSBAQAogI2luY2x1ZGUgIkpTRE9NV2luZG93U2hlbGwuaCIKICNpbmNsdWRl
IDxranMvcHJvdGVjdC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
UmV0YWluUHRyLmg+CisKKyNpZiBQTEFURk9STShNQUMpCisjaWZkZWYgX19PQkpDX18KK0BjbGFz
cyBXZWJTY3JpcHRPYmplY3Q7CisjZWxzZQorY2xhc3MgV2ViU2NyaXB0T2JqZWN0OworI2VuZGlm
CisjZW5kaWYKKworc3RydWN0IE5QT2JqZWN0OwogCiBuYW1lc3BhY2UgS0pTIHsKICAgICBjbGFz
cyBKU0dsb2JhbE9iamVjdDsKICAgICBjbGFzcyBKU1ZhbHVlOworCisgICAgbmFtZXNwYWNlIEJp
bmRpbmdzIHsKKyAgICAgICAgY2xhc3MgSW5zdGFuY2U7CisgICAgICAgIGNsYXNzIFJvb3RPYmpl
Y3Q7CisgICAgfQogfQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEV2ZW50OwogY2xh
c3MgRXZlbnRMaXN0ZW5lcjsKK2NsYXNzIEhUTUxQbHVnSW5FbGVtZW50OwogY2xhc3MgRnJhbWU7
CiBjbGFzcyBOb2RlOwogY2xhc3MgU3RyaW5nOworY2xhc3MgV2lkZ2V0OworCit0eXBlZGVmIEhh
c2hNYXA8dm9pZCosIFJlZlB0cjxLSlM6OkJpbmRpbmdzOjpSb290T2JqZWN0PiA+IFJvb3RPYmpl
Y3RNYXA7CiAKIGNsYXNzIFNjcmlwdENvbnRyb2xsZXIgewogcHVibGljOgpAQCAtODAsNiArMTAx
LDI2IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IFN0cmluZyogc291cmNlVVJMKCkgY29uc3QgeyBy
ZXR1cm4gbV9zb3VyY2VVUkw7IH0gLy8gMCBpZiB3ZSBhcmUgbm90IGV2YWx1YXRpbmcgYW55IHNj
cmlwdAogCisgICAgdm9pZCBjbGVhclNjcmlwdE9iamVjdHMoKTsKKyAgICB2b2lkIGNsZWFudXBT
Y3JpcHRPYmplY3RzRm9yUGx1Z2luKHZvaWQqKTsKKworICAgIFBhc3NSZWZQdHI8S0pTOjpCaW5k
aW5nczo6SW5zdGFuY2U+IGNyZWF0ZVNjcmlwdEluc3RhbmNlRm9yV2lkZ2V0KFdpZGdldCopOwor
ICAgIEtKUzo6QmluZGluZ3M6OlJvb3RPYmplY3QqIGJpbmRpbmdSb290T2JqZWN0KCk7CisKKyAg
ICBQYXNzUmVmUHRyPEtKUzo6QmluZGluZ3M6OlJvb3RPYmplY3Q+IGNyZWF0ZVJvb3RPYmplY3Qo
dm9pZCogbmF0aXZlSGFuZGxlKTsKKworI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBFTkFCTEUoTUFD
X0pBVkFfQlJJREdFKQorICAgIHN0YXRpYyB2b2lkIGluaXRKYXZhSlNCaW5kaW5ncygpOworI2Vu
ZGlmCisgICAgV2ViU2NyaXB0T2JqZWN0KiB3aW5kb3dTY3JpcHRPYmplY3QoKTsKKyNlbmRpZgor
CisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgTlBPYmplY3QqIGNyZWF0ZVNj
cmlwdE9iamVjdEZvclBsdWdpbkVsZW1lbnQoSFRNTFBsdWdJbkVsZW1lbnQqKTsKKyAgICBOUE9i
amVjdCogd2luZG93U2NyaXB0TlBPYmplY3QoKTsKKyNlbmRpZgorCiBwcml2YXRlOgogICAgIHZv
aWQgaW5pdFNjcmlwdElmTmVlZGVkKCkKICAgICB7CkBAIC04OCw2ICsxMjksOSBAQCBwcml2YXRl
OgogICAgIH0KICAgICB2b2lkIGluaXRTY3JpcHQoKTsKIAorICAgIHZvaWQgY2xlYXJQbGF0Zm9y
bVNjcmlwdE9iamVjdHMoKTsKKyAgICB2b2lkIGRpc2Nvbm5lY3RQbGF0Zm9ybVNjcmlwdE9iamVj
dHMoKTsKKwogICAgIEtKUzo6UHJvdGVjdGVkUHRyPEpTRE9NV2luZG93U2hlbGw+IG1fd2luZG93
U2hlbGw7CiAgICAgSGFzaFNldDxKU0RPTVdpbmRvdyo+IG1fbGl2ZUZvcm1lcldpbmRvd3M7CiAg
ICAgRnJhbWUqIG1fZnJhbWU7CkBAIC05Niw2ICsxNDAsMTYgQEAgcHJpdmF0ZToKIAogICAgIGJv
b2wgbV9wcm9jZXNzaW5nVGltZXJDYWxsYmFjazsKICAgICBib29sIG1fcGF1c2VkOworCisgICAg
Ly8gVGhlIHJvb3Qgb2JqZWN0IHVzZWQgZm9yIG9iamVjdHMgYm91bmQgb3V0c2lkZSB0aGUgY29u
dGV4dCBvZiBhIHBsdWdpbi4KKyAgICBSZWZQdHI8S0pTOjpCaW5kaW5nczo6Um9vdE9iamVjdD4g
bV9iaW5kaW5nUm9vdE9iamVjdDsKKyAgICBSb290T2JqZWN0TWFwIG1fcm9vdE9iamVjdHM7Cisj
aWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgTlBPYmplY3QqIG1fd2luZG93U2Ny
aXB0TlBPYmplY3Q7CisjZW5kaWYKKyNpZiBQTEFURk9STShNQUMpCisgICAgUmV0YWluUHRyPFdl
YlNjcmlwdE9iamVjdD4gbV93aW5kb3dTY3JpcHRPYmplY3Q7CisjZW5kaWYKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0
Q29udHJvbGxlckd0ay5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXJH
dGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiYWQzNzYKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXJHdGsuY3Bw
CkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWlj
aGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQorICogQ29weXJpZ2h0IChDKSAyMDA3IEhv
bGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3Jh
IEx0ZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRXJpYyBT
ZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKKworI2lu
Y2x1ZGUgIlBsdWdpblZpZXcuaCIKKyNpbmNsdWRlICJydW50aW1lX3Jvb3QuaCIKKyNpbmNsdWRl
ICJydW50aW1lLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc1JlZlB0cjxLSlM6OkJp
bmRpbmdzOjpJbnN0YW5jZT4gRnJhbWU6OmNyZWF0ZVNjcmlwdEluc3RhbmNlRm9yV2lkZ2V0KFdp
ZGdldCogd2lkZ2V0KQoreworICAgIGlmICh3aWRnZXQtPmlzUGx1Z2luVmlldygpKQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIHJldHVybiBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3Kj4od2lkZ2V0
KS0+YmluZGluZ0luc3RhbmNlKCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGlu
Z3MvanMvU2NyaXB0Q29udHJvbGxlck1hYy5tbSBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0
Q29udHJvbGxlck1hYy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmMw
NjNhCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9s
bGVyTWFjLm1tCkBAIC0wLDAgKzEsMTY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEBueXBvcC5jb20pCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDcgVHJvbGx0ZWNoIEFTQQorICogQ29weXJpZ2h0IChDKSAyMDA4
IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgImNvbmZpZy5o
IgorI2ltcG9ydCAiU2NyaXB0Q29udHJvbGxlci5oIgorCisjaW1wb3J0ICJET01BYnN0cmFjdFZp
ZXdGcmFtZS5oIgorI2ltcG9ydCAiRE9NV2luZG93LmgiCisjaW1wb3J0ICJGcmFtZS5oIgorI2lt
cG9ydCAiRnJhbWVMb2FkZXIuaCIKKyNpbXBvcnQgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCisjaW1w
b3J0ICJKU0RPTVdpbmRvdy5oIgorI2ltcG9ydCAiV2ViU2NyaXB0T2JqZWN0UHJpdmF0ZS5oIgor
I2ltcG9ydCAiV2lkZ2V0LmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BUElDYXN0Lmg+CisK
KyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyNpbXBvcnQgImNfaW5zdGFuY2UuaCIK
KyNpbXBvcnQgIk5QX2pzb2JqZWN0LmgiCisjaW1wb3J0ICJucHJ1bnRpbWVfaW1wbC5oIgorI2Vu
ZGlmCisKKyNpbXBvcnQgIm9iamNfaW5zdGFuY2UuaCIKKyNpbXBvcnQgInJ1bnRpbWVfcm9vdC5o
IgorI2ltcG9ydCAicnVudGltZS5oIgorCisjaWYgRU5BQkxFKE1BQ19KQVZBX0JSSURHRSkKKyNp
bXBvcnQgImpuaV9pbnN0YW5jZS5oIgorI2VuZGlmCisKK0BpbnRlcmZhY2UgTlNPYmplY3QgKFdl
YlBsdWdpbikKKy0gKGlkKW9iamVjdEZvcldlYlNjcmlwdDsKKy0gKE5QT2JqZWN0ICopY3JlYXRl
UGx1Z2luU2NyaXB0YWJsZU9iamVjdDsKK0BlbmQKKwordXNpbmcgbmFtZXNwYWNlIEtKUzo6Qmlu
ZGluZ3M7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc1JlZlB0cjxLSlM6OkJpbmRpbmdz
OjpJbnN0YW5jZT4gU2NyaXB0Q29udHJvbGxlcjo6Y3JlYXRlU2NyaXB0SW5zdGFuY2VGb3JXaWRn
ZXQoV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgTlNWaWV3KiB3aWRnZXRWaWV3ID0gd2lkZ2V0LT5n
ZXRWaWV3KCk7CisgICAgaWYgKCF3aWRnZXRWaWV3KQorICAgICAgICByZXR1cm4gMDsKKworICAg
IFJlZlB0cjxSb290T2JqZWN0PiByb290T2JqZWN0ID0gY3JlYXRlUm9vdE9iamVjdCh3aWRnZXRW
aWV3KTsKKworICAgIGlmIChbd2lkZ2V0VmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9y
KG9iamVjdEZvcldlYlNjcmlwdCldKSB7CisgICAgICAgIGlkIG9iamVjdEZvcldlYlNjcmlwdCA9
IFt3aWRnZXRWaWV3IG9iamVjdEZvcldlYlNjcmlwdF07CisgICAgICAgIGlmICghb2JqZWN0Rm9y
V2ViU2NyaXB0KQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBLSlM6OkJp
bmRpbmdzOjpPYmpjSW5zdGFuY2U6OmNyZWF0ZShvYmplY3RGb3JXZWJTY3JpcHQsIHJvb3RPYmpl
Y3QucmVsZWFzZSgpKTsKKyAgICB9CisKKyAgICBpZiAoW3dpZGdldFZpZXcgcmVzcG9uZHNUb1Nl
bGVjdG9yOkBzZWxlY3RvcihjcmVhdGVQbHVnaW5TY3JpcHRhYmxlT2JqZWN0KV0pIHsKKyNpZiAh
RU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgICAgIHJldHVybiAwOworI2Vsc2UKKyAg
ICAgICAgTlBPYmplY3QqIG5wT2JqZWN0ID0gW3dpZGdldFZpZXcgY3JlYXRlUGx1Z2luU2NyaXB0
YWJsZU9iamVjdF07CisgICAgICAgIGlmICghbnBPYmplY3QpCisgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgUmVmUHRyPEluc3RhbmNlPiBpbnN0YW5jZSA9IEtKUzo6QmluZGluZ3M6OkNJ
bnN0YW5jZTo6Y3JlYXRlKG5wT2JqZWN0LCByb290T2JqZWN0LnJlbGVhc2UoKSk7CisgICAgICAg
IC8vIC1jcmVhdGVQbHVnaW5TY3JpcHRhYmxlT2JqZWN0IHJldHVybnMgYSByZXRhaW5lZCBOUE9i
amVjdC4gIFRoZSBjYWxsZXIgaXMgZXhwZWN0ZWQgdG8gcmVsZWFzZSBpdC4KKyAgICAgICAgX05Q
Tl9SZWxlYXNlT2JqZWN0KG5wT2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIGluc3RhbmNlLnJlbGVh
c2UoKTsKKyNlbmRpZgorICAgIH0KKworI2lmIEVOQUJMRShNQUNfSkFWQV9CUklER0UpCisgICAg
am9iamVjdCBhcHBsZXQgPSBtX2ZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmphdmFBcHBsZXQo
d2lkZ2V0Vmlldyk7CisgICAgaWYgKCFhcHBsZXQpCisgICAgICAgIHJldHVybiAwOworICAgIHJl
dHVybiBLSlM6OkJpbmRpbmdzOjpKYXZhSW5zdGFuY2U6OmNyZWF0ZShhcHBsZXQsIHJvb3RPYmpl
Y3QucmVsZWFzZSgpKTsKKyNlbHNlCisgICAgcmV0dXJuIDA7CisjZW5kaWYKK30KKworV2ViU2Ny
aXB0T2JqZWN0KiBTY3JpcHRDb250cm9sbGVyOjp3aW5kb3dTY3JpcHRPYmplY3QoKQoreworICAg
IGlmICghaXNFbmFibGVkKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKCFtX3dpbmRv
d1NjcmlwdE9iamVjdCkgeworICAgICAgICBLSlM6OkJpbmRpbmdzOjpSb290T2JqZWN0KiByb290
ID0gYmluZGluZ1Jvb3RPYmplY3QoKTsKKyAgICAgICAgbV93aW5kb3dTY3JpcHRPYmplY3QgPSBb
V2ViU2NyaXB0T2JqZWN0IHNjcmlwdE9iamVjdEZvckpTT2JqZWN0OnRvUmVmKHdpbmRvd1NoZWxs
KCkpIG9yaWdpblJvb3RPYmplY3Q6cm9vdCByb290T2JqZWN0OnJvb3RdOworICAgIH0KKworICAg
IEFTU0VSVChbbV93aW5kb3dTY3JpcHRPYmplY3QuZ2V0KCkgaXNLaW5kT2ZDbGFzczpbRE9NQWJz
dHJhY3RWaWV3IGNsYXNzXV0pOworICAgIHJldHVybiBtX3dpbmRvd1NjcmlwdE9iamVjdC5nZXQo
KTsKK30KKwordm9pZCBTY3JpcHRDb250cm9sbGVyOjpjbGVhclBsYXRmb3JtU2NyaXB0T2JqZWN0
cygpCit7CisgICAgaWYgKG1fd2luZG93U2NyaXB0T2JqZWN0KSB7CisgICAgICAgIEtKUzo6Qmlu
ZGluZ3M6OlJvb3RPYmplY3QqIHJvb3QgPSBiaW5kaW5nUm9vdE9iamVjdCgpOworICAgICAgICBb
bV93aW5kb3dTY3JpcHRPYmplY3QuZ2V0KCkgX3NldE9yaWdpblJvb3RPYmplY3Q6cm9vdCBhbmRS
b290T2JqZWN0OnJvb3RdOworICAgIH0KK30KKwordm9pZCBTY3JpcHRDb250cm9sbGVyOjpkaXNj
b25uZWN0UGxhdGZvcm1TY3JpcHRPYmplY3RzKCkKK3sKKyAgICBpZiAobV93aW5kb3dTY3JpcHRP
YmplY3QpIHsKKyAgICAgICAgQVNTRVJUKFttX3dpbmRvd1NjcmlwdE9iamVjdC5nZXQoKSBpc0tp
bmRPZkNsYXNzOltET01BYnN0cmFjdFZpZXcgY2xhc3NdXSk7CisgICAgICAgIFsoRE9NQWJzdHJh
Y3RWaWV3ICopbV93aW5kb3dTY3JpcHRPYmplY3QuZ2V0KCkgX2Rpc2Nvbm5lY3RGcmFtZV07Cisg
ICAgfQorfQorCisjaWYgRU5BQkxFKE1BQ19KQVZBX0JSSURHRSkKK3N0YXRpYyBwdGhyZWFkX3Qg
bWFpblRocmVhZDsKKworc3RhdGljIHZvaWQgdXBkYXRlUmVuZGVyaW5nRm9yQmluZGluZ3MoS0pT
OjpFeGVjU3RhdGUqIGV4ZWMsIEtKUzo6SlNPYmplY3QqIHJvb3RPYmplY3QpCit7CisgICAgaWYg
KHB0aHJlYWRfc2VsZigpICE9IG1haW5UaHJlYWQpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
ICghcm9vdE9iamVjdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgSlNET01XaW5kb3cqIHdpbmRv
dyA9IHN0YXRpY19jYXN0PEpTRE9NV2luZG93Kj4ocm9vdE9iamVjdCk7CisgICAgaWYgKCF3aW5k
b3cpCisgICAgICAgIHJldHVybjsKKworICAgIEZyYW1lKiBmcmFtZSA9IHdpbmRvdy0+aW1wbCgp
LT5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIERvY3Vt
ZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpOworICAgIGlmICghZG9jdW1lbnQpCisg
ICAgICAgIHJldHVybjsKKworICAgIGRvY3VtZW50LT51cGRhdGVSZW5kZXJpbmcoKTsKK30KKwor
dm9pZCBTY3JpcHRDb250cm9sbGVyOjppbml0SmF2YUpTQmluZGluZ3MoKQoreworICAgIG1haW5U
aHJlYWQgPSBwdGhyZWFkX3NlbGYoKTsKKyAgICBLSlM6OkJpbmRpbmdzOjpKYXZhSlNPYmplY3Q6
OmluaXRpYWxpemVKTklUaHJlYWRpbmcoKTsKKyAgICBLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZTo6
c2V0RGlkRXhlY3V0ZUZ1bmN0aW9uKHVwZGF0ZVJlbmRlcmluZ0ZvckJpbmRpbmdzKTsKK30KKyNl
bmRpZgorCit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xs
ZXJRdC5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXJRdC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmUwZWJlMgotLS0gL2Rldi9udWxsCisr
KyBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlclF0LmNwcApAQCAtMCwwICsx
LDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IERpcmsgTXVlbGxlciA8bXVlbGxlckBr
ZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAwNiBHZW9yZ2UgU3RhaWtvcyA8c3RhaWtvc0BrZGUub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDA2IFNpbW9uIEhhdXNtYW5uIDxoYXVzbWFubkBrZGUub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDcgVHJvbGx0ZWNoIEFTQQorICogQ29weXJpZ2h0IChDKSAyMDA4IENv
bGxhYm9yYSBMdGQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4
IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxl
ci5oIgorCisjaW5jbHVkZSAiRE9NV2luZG93LmgiCisjaW5jbHVkZSAiUGx1Z2luVmlldy5oIgor
I2luY2x1ZGUgInF0X2luc3RhbmNlLmgiCisjaW5jbHVkZSAicnVudGltZV9yb290LmgiCisjaW5j
bHVkZSAicnVudGltZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8S0pT
OjpCaW5kaW5nczo6SW5zdGFuY2U+IFNjcmlwdENvbnRyb2xsZXI6OmNyZWF0ZVNjcmlwdEluc3Rh
bmNlRm9yV2lkZ2V0KFdlYkNvcmU6OldpZGdldCogd2lkZ2V0KQoreworICAgIGlmICh3aWRnZXQt
PmlzRnJhbWVWaWV3KCkpCisgICAgICAgIHJldHVybiAwOworICAgIGlmICh3aWRnZXQtPmlzTlBB
UElQbHVnaW4oKSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFBsdWdpblZpZXcqPih3aWRn
ZXQpLT5iaW5kaW5nSW5zdGFuY2UoKTsKKworICAgIFFXaWRnZXQqIG5hdGl2ZVdpZGdldCA9IHdp
ZGdldC0+bmF0aXZlV2lkZ2V0KCk7CisgICAgaWYgKCFuYXRpdmVXaWRnZXQpCisgICAgICAgIHJl
dHVybiAwOworICAgIHJldHVybiBLSlM6OkJpbmRpbmdzOjpRdEluc3RhbmNlOjpjcmVhdGUobmF0
aXZlV2lkZ2V0LCBiaW5kaW5nUm9vdE9iamVjdCgpKTsKK30KKworfQorLy8gdmltOiB0cz00IHN3
PTQgZXQKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlcldp
bi5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXJXaW4uY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1YzNiMDAKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXJXaW4uY3BwCkBAIC0wLDAgKzEs
NDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IEVyaWMgU2VpZGVsIDxl
cmljQHdlYmtpdC5vcmc+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJT
Y3JpcHRDb250cm9sbGVyLmgiCisKKyNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCisjaW5jbHVkZSAi
cnVudGltZV9yb290LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBLSlM6OkJpbmRpbmdzOworCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8S0pTOjpCaW5kaW5nczo6SW5zdGFuY2U+IFNj
cmlwdENvbnRyb2xsZXI6OmNyZWF0ZVNjcmlwdEluc3RhbmNlRm9yV2lkZ2V0KFdpZGdldCogd2lk
Z2V0KQoreworICAgIGlmICh3aWRnZXQtPmlzUGx1Z2luVmlldygpKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIHJldHVybiBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3Kj4od2lkZ2V0KS0+YmluZGlu
Z0luc3RhbmNlKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0gYi9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1t
CmluZGV4IDMzY2IzNWMuLjhlYTg2ZTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvb2Jq
Yy9ET00ubW0KKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQpAQCAtNTksNiArNTks
NyBAQAogI2ltcG9ydCAiUmFuZ2UuaCIKICNpbXBvcnQgIlJlbmRlckltYWdlLmgiCiAjaW1wb3J0
ICJSZW5kZXJWaWV3LmgiCisjaW1wb3J0ICJTY3JpcHRDb250cm9sbGVyLmgiCiAjaW1wb3J0ICJT
aW1wbGVGb250RGF0YS5oIgogI2ltcG9ydCAiVGV4dC5oIgogI2ltcG9ydCAiVHJlZVdhbGtlci5o
IgpAQCAtNDE3LDcgKzQxOCw3IEBAIHN0YXRpYyBOU0FycmF5ICpraXQoY29uc3QgVmVjdG9yPElu
dFJlY3Q+JiByZWN0cykKIHsKICAgICBpZiAoV2ViQ29yZTo6Tm9kZSAqbiA9IFtzZWxmIF9ub2Rl
XSkgewogICAgICAgICBpZiAoV2ViQ29yZTo6RnJhbWUqIGZyYW1lID0gbi0+ZG9jdW1lbnQoKS0+
ZnJhbWUoKSkKLSAgICAgICAgICAgIHJldHVybiBmcmFtZS0+YmluZGluZ1Jvb3RPYmplY3QoKTsK
KyAgICAgICAgICAgIHJldHVybiBmcmFtZS0+c2NyaXB0KCktPmJpbmRpbmdSb290T2JqZWN0KCk7
CiAgICAgfQogICAgIHJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9v
YmpjL0RPTUludGVybmFsLm1tIGIvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTUludGVybmFsLm1t
CmluZGV4IDk3ZTI2YzkuLmZmYjYwZWQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvb2Jq
Yy9ET01JbnRlcm5hbC5tbQorKysgYi9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NSW50ZXJuYWwu
bW0KQEAgLTExOSw3ICsxMTksNyBAQCB2b2lkIHJlbW92ZURPTVdyYXBwZXIoRE9NT2JqZWN0SW50
ZXJuYWwqIGltcGwpCiAgICAgLy8gR2V0IChvciBjcmVhdGUpIGEgY2FjaGVkIEpTIG9iamVjdCBm
b3IgdGhlIERPTSBub2RlLgogICAgIEtKUzo6SlNPYmplY3QgKnNjcmlwdEltcCA9IHN0YXRpY19j
YXN0PEtKUzo6SlNPYmplY3QqPihXZWJDb3JlOjp0b0pTKGV4ZWMsIG5vZGVJbXBsKSk7CiAKLSAg
ICBLSlM6OkJpbmRpbmdzOjpSb290T2JqZWN0KiByb290T2JqZWN0ID0gZnJhbWUtPmJpbmRpbmdS
b290T2JqZWN0KCk7CisgICAgS0pTOjpCaW5kaW5nczo6Um9vdE9iamVjdCogcm9vdE9iamVjdCA9
IGZyYW1lLT5zY3JpcHQoKS0+YmluZGluZ1Jvb3RPYmplY3QoKTsKIAogICAgIFtzZWxmIF9zZXRJ
bXA6c2NyaXB0SW1wIG9yaWdpblJvb3RPYmplY3Q6cm9vdE9iamVjdCByb290T2JqZWN0OnJvb3RP
YmplY3RdOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9qc29iamVjdC5t
bSBiL1dlYkNvcmUvYnJpZGdlL2puaS9qbmlfanNvYmplY3QubW0KaW5kZXggZWUxZWFlNi4uNTM4
NDcxZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9qc29iamVjdC5tbQorKysg
Yi9XZWJDb3JlL2JyaWRnZS9qbmkvam5pX2pzb2JqZWN0Lm1tCkBAIC00NDEsNyArNDQxLDcgQEAg
c3RhdGljIFBhc3NSZWZQdHI8Um9vdE9iamVjdD4gY3JlYXRlUm9vdE9iamVjdCh2b2lkKiBuYXRp
dmVIYW5kbGUpCiAgICAgfQogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiAwOwotICAg
IHJldHVybiBmcmFtZS0+Y3JlYXRlUm9vdE9iamVjdChuYXRpdmVIYW5kbGUsIGZyYW1lLT5zY3Jp
cHQoKS0+Z2xvYmFsT2JqZWN0KCkpOworICAgIHJldHVybiBmcmFtZS0+c2NyaXB0KCktPmNyZWF0
ZVJvb3RPYmplY3QobmF0aXZlSGFuZGxlKTsKIH0KIAogLy8gV2UncmUgZWl0aGVyIGNyZWF0aW5n
IGEgJ1Jvb3QnIG9iamVjdCAodmlhIGEgY2FsbCB0byBKYXZhSlNPYmplY3QuZ2V0V2luZG93KCkp
LCBvcgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxBcHBsZXRFbGVtZW50LmNwcCBiL1dl
YkNvcmUvaHRtbC9IVE1MQXBwbGV0RWxlbWVudC5jcHAKaW5kZXggNTUyNWFjYS4uMzc1NWM3NCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxBcHBsZXRFbGVtZW50LmNwcAorKysgYi9XZWJD
b3JlL2h0bWwvSFRNTEFwcGxldEVsZW1lbnQuY3BwCkBAIC0zMCwxMCArMzAsNyBAQAogI2luY2x1
ZGUgIlJlbmRlckFwcGxldC5oIgogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgogI2luY2x1ZGUg
IlNldHRpbmdzLmgiCi0KLSNpZiBVU0UoSkFWQVNDUklQVENPUkVfQklORElOR1MpCi0jaW5jbHVk
ZSAicnVudGltZS5oIgotI2VuZGlmCisjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ2LDEwICs0Myw2IEBAIEhUTUxBcHBsZXRFbGVtZW50
OjpIVE1MQXBwbGV0RWxlbWVudChEb2N1bWVudCogZG9jKQogCiBIVE1MQXBwbGV0RWxlbWVudDo6
fkhUTUxBcHBsZXRFbGVtZW50KCkKIHsKLSNpZiBVU0UoSkFWQVNDUklQVENPUkVfQklORElOR1Mp
Ci0gICAgLy8gbV9pbnN0YW5jZSBzaG91bGQgaGF2ZSBiZWVuIGNsZWFuZWQgdXAgaW4gZGV0YWNo
KCkuCi0gICAgQVNTRVJUKCFtX2luc3RhbmNlKTsKLSNlbmRpZgogfQogCiB2b2lkIEhUTUxBcHBs
ZXRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqIGF0dHIpCkBA
IC0xNDMsMjEgKzEzNiwxNyBAQCBSZW5kZXJPYmplY3QqIEhUTUxBcHBsZXRFbGVtZW50OjpjcmVh
dGVSZW5kZXJlcihSZW5kZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0eWxlKgogfQogCiAjaWYgVVNF
KEpBVkFTQ1JJUFRDT1JFX0JJTkRJTkdTKQotS0pTOjpCaW5kaW5nczo6SW5zdGFuY2UqIEhUTUxB
cHBsZXRFbGVtZW50OjpnZXRJbnN0YW5jZSgpIGNvbnN0CitSZW5kZXJXaWRnZXQqIEhUTUxBcHBs
ZXRFbGVtZW50OjpyZW5kZXJXaWRnZXRGb3JKU0JpbmRpbmdzKCkgY29uc3QKIHsKICAgICBTZXR0
aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVudCgpLT5zZXR0aW5ncygpOwogICAgIGlmICghc2V0dGlu
Z3MgfHwgIXNldHRpbmdzLT5pc0phdmFFbmFibGVkKCkpCiAgICAgICAgIHJldHVybiAwOwogCi0g
ICAgaWYgKG1faW5zdGFuY2UpCi0gICAgICAgIHJldHVybiBtX2luc3RhbmNlLmdldCgpOwotICAg
IAotICAgIGlmIChSZW5kZXJBcHBsZXQqIHIgPSBzdGF0aWNfY2FzdDxSZW5kZXJBcHBsZXQqPihy
ZW5kZXJlcigpKSkgewotICAgICAgICByLT5jcmVhdGVXaWRnZXRJZk5lY2Vzc2FyeSgpOwotICAg
ICAgICBpZiAoci0+d2lkZ2V0KCkgJiYgZG9jdW1lbnQoKS0+ZnJhbWUoKSkKLSAgICAgICAgICAg
IG1faW5zdGFuY2UgPSBkb2N1bWVudCgpLT5mcmFtZSgpLT5jcmVhdGVTY3JpcHRJbnN0YW5jZUZv
cldpZGdldChyLT53aWRnZXQoKSk7Ci0gICAgfQotICAgIHJldHVybiBtX2luc3RhbmNlLmdldCgp
OworICAgIFJlbmRlckFwcGxldCogYXBwbGV0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyQXBwbGV0Kj4o
cmVuZGVyZXIoKSk7CisgICAgaWYgKGFwcGxldCkKKyAgICAgICAgYXBwbGV0LT5jcmVhdGVXaWRn
ZXRJZk5lY2Vzc2FyeSgpOworCisgICAgcmV0dXJuIGFwcGxldDsKIH0KICNlbmRpZgogCkBAIC0x
NjksMTQgKzE1OCw2IEBAIHZvaWQgSFRNTEFwcGxldEVsZW1lbnQ6OmZpbmlzaFBhcnNpbmdDaGls
ZHJlbigpCiAgICAgICAgIHJlbmRlcmVyKCktPnNldE5lZWRzTGF5b3V0KHRydWUpOyAvLyBUaGlz
IHdpbGwgY2F1c2UgaXQgdG8gY3JlYXRlIGl0cyB3aWRnZXQgJiB0aGUgSmF2YSBhcHBsZXQKIH0K
IAotdm9pZCBIVE1MQXBwbGV0RWxlbWVudDo6ZGV0YWNoKCkKLXsKLSNpZiBVU0UoSkFWQVNDUklQ
VENPUkVfQklORElOR1MpCi0gICAgbV9pbnN0YW5jZSA9IDA7Ci0jZW5kaWYKLSAgICBIVE1MUGx1
Z0luRWxlbWVudDo6ZGV0YWNoKCk7Ci19Ci0KIFN0cmluZyBIVE1MQXBwbGV0RWxlbWVudDo6YWx0
KCkgY29uc3QKIHsKICAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGFsdEF0dHIpOwpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9odG1sL0hUTUxBcHBsZXRFbGVtZW50LmggYi9XZWJDb3JlL2h0bWwvSFRNTEFw
cGxldEVsZW1lbnQuaAppbmRleCAzMTc5ZTQzLi5jZWU0ZmVkIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2h0bWwvSFRNTEFwcGxldEVsZW1lbnQuaAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTEFwcGxldEVs
ZW1lbnQuaApAQCAtMjUsMTQgKzI1LDYgQEAKIAogI2luY2x1ZGUgIkhUTUxQbHVnSW5FbGVtZW50
LmgiCiAKLSNpZiBVU0UoSkFWQVNDUklQVENPUkVfQklORElOR1MpCi1uYW1lc3BhY2UgS0pTIHsg
Ci0gICAgbmFtZXNwYWNlIEJpbmRpbmdzIHsgCi0gICAgICAgIGNsYXNzIEluc3RhbmNlOwotICAg
IH0gCi19Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBIVE1MRm9ybUVs
ZW1lbnQ7CkBAIC01MSwxMCArNDMsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIHJlbmRl
cmVySXNOZWVkZWQoUmVuZGVyU3R5bGUqKTsKICAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogY3Jl
YXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSopOwogICAgIHZpcnR1YWwgdm9p
ZCBmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoKCk7CiAg
ICAgCiAjaWYgVVNFKEpBVkFTQ1JJUFRDT1JFX0JJTkRJTkdTKQotICAgIHZpcnR1YWwgS0pTOjpC
aW5kaW5nczo6SW5zdGFuY2UqIGdldEluc3RhbmNlKCkgY29uc3Q7CisgICAgdmlydHVhbCBSZW5k
ZXJXaWRnZXQqIHJlbmRlcldpZGdldEZvckpTQmluZGluZ3MoKSBjb25zdDsKICNlbmRpZgogCiAg
ICAgU3RyaW5nIGFsdCgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxFbWJl
ZEVsZW1lbnQuY3BwIGIvV2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQuY3BwCmluZGV4IDg0
YTNhMmMuLjcyYmI2YzUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MRW1iZWRFbGVtZW50
LmNwcAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVudC5jcHAKQEAgLTMyLDEwICsz
Miw3IEBACiAjaW5jbHVkZSAiSFRNTE9iamVjdEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFt
ZXMuaCIKICNpbmNsdWRlICJSZW5kZXJQYXJ0T2JqZWN0LmgiCi0KLSNpZiBVU0UoSkFWQVNDUklQ
VENPUkVfQklORElOR1MpCi0jaW5jbHVkZSAicnVudGltZS5oIgotI2VuZGlmCisjaW5jbHVkZSAi
U2NyaXB0Q29udHJvbGxlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ5LDEwICs0
Niw2IEBAIEhUTUxFbWJlZEVsZW1lbnQ6OkhUTUxFbWJlZEVsZW1lbnQoRG9jdW1lbnQqIGRvYykK
IAogSFRNTEVtYmVkRWxlbWVudDo6fkhUTUxFbWJlZEVsZW1lbnQoKQogewotI2lmIFVTRShKQVZB
U0NSSVBUQ09SRV9CSU5ESU5HUykKLSAgICAvLyBtX2luc3RhbmNlIHNob3VsZCBoYXZlIGJlZW4g
Y2xlYW5lZCB1cCBpbiBkZXRhY2goKS4KLSAgICBBU1NFUlQoIW1faW5zdGFuY2UpOwotI2VuZGlm
CiB9CiAKICNpZiBVU0UoSkFWQVNDUklQVENPUkVfQklORElOR1MpCkBAIC02MiwzMCArNTUsMjEg
QEAgc3RhdGljIGlubGluZSBSZW5kZXJXaWRnZXQqIGZpbmRXaWRnZXRSZW5kZXJlcihjb25zdCBO
b2RlKiBuKQogICAgICAgICBkbwogICAgICAgICAgICAgbiA9IG4tPnBhcmVudE5vZGUoKTsKICAg
ICAgICAgd2hpbGUgKG4gJiYgIW4tPmhhc1RhZ05hbWUob2JqZWN0VGFnKSk7Ci0gICAgCi0gICAg
cmV0dXJuIChuICYmIG4tPnJlbmRlcmVyKCkgJiYgbi0+cmVuZGVyZXIoKS0+aXNXaWRnZXQoKSkg
Ci0gICAgICAgID8gc3RhdGljX2Nhc3Q8UmVuZGVyV2lkZ2V0Kj4obi0+cmVuZGVyZXIoKSkgOiAw
OworCisgICAgaWYgKG4gJiYgbi0+cmVuZGVyZXIoKSAmJiBuLT5yZW5kZXJlcigpLT5pc1dpZGdl
dCgpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyV2lkZ2V0Kj4obi0+cmVuZGVy
ZXIoKSk7CisKKyAgICByZXR1cm4gMDsKIH0KICAgICAKLUtKUzo6QmluZGluZ3M6Okluc3RhbmNl
KiBIVE1MRW1iZWRFbGVtZW50OjpnZXRJbnN0YW5jZSgpIGNvbnN0CitSZW5kZXJXaWRnZXQqIEhU
TUxFbWJlZEVsZW1lbnQ6OnJlbmRlcldpZGdldEZvckpTQmluZGluZ3MoKSBjb25zdAogewotICAg
IEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAobV9pbnN0YW5jZSkKLSAgICAgICAgcmV0dXJuIG1f
aW5zdGFuY2UuZ2V0KCk7Ci0gICAgCiAgICAgUmVuZGVyV2lkZ2V0KiByZW5kZXJXaWRnZXQgPSBm
aW5kV2lkZ2V0UmVuZGVyZXIodGhpcyk7CiAgICAgaWYgKHJlbmRlcldpZGdldCAmJiAhcmVuZGVy
V2lkZ2V0LT53aWRnZXQoKSkgewogICAgICAgICBkb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25v
cmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKICAgICAgICAgcmVuZGVyV2lkZ2V0ID0gZmluZFdpZGdl
dFJlbmRlcmVyKHRoaXMpOwogICAgIH0KLSAgICAKLSAgICBpZiAocmVuZGVyV2lkZ2V0ICYmIHJl
bmRlcldpZGdldC0+d2lkZ2V0KCkpIAotICAgICAgICBtX2luc3RhbmNlID0gZnJhbWUtPmNyZWF0
ZVNjcmlwdEluc3RhbmNlRm9yV2lkZ2V0KHJlbmRlcldpZGdldC0+d2lkZ2V0KCkpOwotICAgIAot
ICAgIHJldHVybiBtX2luc3RhbmNlLmdldCgpOworICAgIHJldHVybiByZW5kZXJXaWRnZXQ7CiB9
CiAjZW5kaWYKIApAQCAtMTU3LDE0ICsxNDEsNiBAQCB2b2lkIEhUTUxFbWJlZEVsZW1lbnQ6OmF0
dGFjaCgpCiAgICAgSFRNTFBsdWdJbkVsZW1lbnQ6OmF0dGFjaCgpOwogfQogCi12b2lkIEhUTUxF
bWJlZEVsZW1lbnQ6OmRldGFjaCgpCi17Ci0jaWYgVVNFKEpBVkFTQ1JJUFRDT1JFX0JJTkRJTkdT
KQotICAgIG1faW5zdGFuY2UgPSAwOwotI2VuZGlmCi0gICAgSFRNTFBsdWdJbkVsZW1lbnQ6OmRl
dGFjaCgpOwotfQotCiB2b2lkIEhUTUxFbWJlZEVsZW1lbnQ6OnVwZGF0ZVdpZGdldCgpCiB7CiAg
ICAgZG9jdW1lbnQoKS0+dXBkYXRlUmVuZGVyaW5nKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0
bWwvSFRNTEVtYmVkRWxlbWVudC5oIGIvV2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQuaApp
bmRleCBmYjRiYzRkLi43OTA1M2Y2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTEVtYmVk
RWxlbWVudC5oCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MRW1iZWRFbGVtZW50LmgKQEAgLTI1LDE0
ICsyNSw2IEBACiAKICNpbmNsdWRlICJIVE1MUGx1Z0luRWxlbWVudC5oIgogCi0jaWYgVVNFKEpB
VkFTQ1JJUFRDT1JFX0JJTkRJTkdTKQotbmFtZXNwYWNlIEtKUyB7Ci0gICAgbmFtZXNwYWNlIEJp
bmRpbmdzIHsKLSAgICAgICAgY2xhc3MgSW5zdGFuY2U7Ci0gICAgfQotfQotI2VuZGlmCi0KIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSFRNTEVtYmVkRWxlbWVudCA6IHB1YmxpYyBIVE1M
UGx1Z0luRWxlbWVudCB7CkBAIC00OCw3ICs0MCw2IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwg
dm9pZCBhdHRhY2goKTsKICAgICB2aXJ0dWFsIGJvb2wgY2FuTGF6eUF0dGFjaCgpIHsgcmV0dXJu
IGZhbHNlOyB9Ci0gICAgdmlydHVhbCB2b2lkIGRldGFjaCgpOwogICAgIHZpcnR1YWwgYm9vbCBy
ZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlKik7CiAgICAgdmlydHVhbCBSZW5kZXJPYmplY3Qq
IGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKICAgICB2aXJ0dWFs
IHZvaWQgaW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKQEAgLTYxLDcgKzUyLDcgQEAgcHVibGljOgog
ICAgIHZvaWQgc2V0TmVlZFdpZGdldFVwZGF0ZShib29sIG5lZWRXaWRnZXRVcGRhdGUpIHsgbV9u
ZWVkV2lkZ2V0VXBkYXRlID0gbmVlZFdpZGdldFVwZGF0ZTsgfQogCiAjaWYgVVNFKEpBVkFTQ1JJ
UFRDT1JFX0JJTkRJTkdTKQotICAgIHZpcnR1YWwgS0pTOjpCaW5kaW5nczo6SW5zdGFuY2UqIGdl
dEluc3RhbmNlKCkgY29uc3Q7CisgICAgdmlydHVhbCBSZW5kZXJXaWRnZXQqIHJlbmRlcldpZGdl
dEZvckpTQmluZGluZ3MoKSBjb25zdDsKICNlbmRpZgogCiAgICAgU3RyaW5nIHNyYygpIGNvbnN0
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcCBiL1dlYkNv
cmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAKaW5kZXggYmJmMWU2Yi4uMjhmYWJiZiAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAorKysgYi9XZWJDb3Jl
L2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwCkBAIC00MCwxMiArNDAsOSBAQAogI2luY2x1ZGUg
IlJlbmRlckltYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyUGFydE9iamVjdC5oIgogI2luY2x1ZGUg
IlJlbmRlcldpZGdldC5oIgorI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKICNpbmNsdWRl
ICJUZXh0LmgiCiAKLSNpZiBVU0UoSkFWQVNDUklQVENPUkVfQklORElOR1MpCi0jaW5jbHVkZSAi
cnVudGltZS5oIgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNw
YWNlIEV2ZW50TmFtZXM7CkBAIC02MSwzMSArNTgsMTcgQEAgSFRNTE9iamVjdEVsZW1lbnQ6OkhU
TUxPYmplY3RFbGVtZW50KERvY3VtZW50KiBkb2MsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQogCiBI
VE1MT2JqZWN0RWxlbWVudDo6fkhUTUxPYmplY3RFbGVtZW50KCkKIHsKLSNpZiBVU0UoSkFWQVND
UklQVENPUkVfQklORElOR1MpCi0gICAgLy8gbV9pbnN0YW5jZSBzaG91bGQgaGF2ZSBiZWVuIGNs
ZWFuZWQgdXAgaW4gZGV0YWNoKCkuCi0gICAgQVNTRVJUKCFtX2luc3RhbmNlKTsKLSNlbmRpZgog
fQogCiAjaWYgVVNFKEpBVkFTQ1JJUFRDT1JFX0JJTkRJTkdTKQotS0pTOjpCaW5kaW5nczo6SW5z
dGFuY2UgKkhUTUxPYmplY3RFbGVtZW50OjpnZXRJbnN0YW5jZSgpIGNvbnN0CitSZW5kZXJXaWRn
ZXQqIEhUTUxPYmplY3RFbGVtZW50OjpyZW5kZXJXaWRnZXRGb3JKU0JpbmRpbmdzKCkgY29uc3QK
IHsKLSAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpOwotICAgIGlmICghZnJh
bWUpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKG1faW5zdGFuY2UpCi0gICAgICAgIHJl
dHVybiBtX2luc3RhbmNlLmdldCgpOwotCiAgICAgUmVuZGVyV2lkZ2V0KiByZW5kZXJXaWRnZXQg
PSAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5pc1dpZGdldCgpKSA/IHN0YXRpY19jYXN0PFJl
bmRlcldpZGdldCo+KHJlbmRlcmVyKCkpIDogMDsKICAgICBpZiAocmVuZGVyV2lkZ2V0ICYmICFy
ZW5kZXJXaWRnZXQtPndpZGdldCgpKSB7CiAgICAgICAgIGRvY3VtZW50KCktPnVwZGF0ZUxheW91
dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogICAgICAgICByZW5kZXJXaWRnZXQgPSAocmVu
ZGVyZXIoKSAmJiByZW5kZXJlcigpLT5pc1dpZGdldCgpKSA/IHN0YXRpY19jYXN0PFJlbmRlcldp
ZGdldCo+KHJlbmRlcmVyKCkpIDogMDsKLSAgICB9ICAgICAgICAgIAotICAgIGlmIChyZW5kZXJX
aWRnZXQgJiYgcmVuZGVyV2lkZ2V0LT53aWRnZXQoKSkgCi0gICAgICAgIG1faW5zdGFuY2UgPSBm
cmFtZS0+Y3JlYXRlU2NyaXB0SW5zdGFuY2VGb3JXaWRnZXQocmVuZGVyV2lkZ2V0LT53aWRnZXQo
KSk7Ci0KLSAgICByZXR1cm4gbV9pbnN0YW5jZS5nZXQoKTsKKyAgICB9CisgICAgcmV0dXJuIHJl
bmRlcldpZGdldDsKIH0KICNlbmRpZgogCkBAIC0yMDMsMTQgKzE4Niw5IEBAIHZvaWQgSFRNTE9i
amVjdEVsZW1lbnQ6OmZpbmlzaFBhcnNpbmdDaGlsZHJlbigpCiAKIHZvaWQgSFRNTE9iamVjdEVs
ZW1lbnQ6OmRldGFjaCgpCiB7Ci0gICAgaWYgKGF0dGFjaGVkKCkgJiYgcmVuZGVyZXIoKSAmJiAh
bV91c2VGYWxsYmFja0NvbnRlbnQpIHsKKyAgICBpZiAoYXR0YWNoZWQoKSAmJiByZW5kZXJlcigp
ICYmICFtX3VzZUZhbGxiYWNrQ29udGVudCkKICAgICAgICAgLy8gVXBkYXRlIHRoZSB3aWRnZXQg
dGhlIG5leHQgdGltZSB3ZSBhdHRhY2ggKGRldGFjaGluZyBkZXN0cm95cyB0aGUgcGx1Z2luKS4K
ICAgICAgICAgbV9uZWVkV2lkZ2V0VXBkYXRlID0gdHJ1ZTsKLSAgICB9Ci0KLSNpZiBVU0UoSkFW
QVNDUklQVENPUkVfQklORElOR1MpCi0gICAgbV9pbnN0YW5jZSA9IDA7Ci0jZW5kaWYKICAgICBI
VE1MUGx1Z0luRWxlbWVudDo6ZGV0YWNoKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRt
bC9IVE1MT2JqZWN0RWxlbWVudC5oIGIvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmgK
aW5kZXggY2EyMDVkNy4uN2Y2Yjc5NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxPYmpl
Y3RFbGVtZW50LmgKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmgKQEAgLTYz
LDcgKzYzLDcgQEAgcHVibGljOgogICAgIHZvaWQgcmVuZGVyRmFsbGJhY2tDb250ZW50KCk7CiAK
ICNpZiBVU0UoSkFWQVNDUklQVENPUkVfQklORElOR1MpCi0gICAgdmlydHVhbCBLSlM6OkJpbmRp
bmdzOjpJbnN0YW5jZSogZ2V0SW5zdGFuY2UoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFJlbmRlcldp
ZGdldCogcmVuZGVyV2lkZ2V0Rm9ySlNCaW5kaW5ncygpIGNvbnN0OwogI2VuZGlmCiAKICAgICBT
dHJpbmcgYXJjaGl2ZSgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxQbHVn
SW5FbGVtZW50LmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luRWxlbWVudC5jcHAKaW5kZXgg
Mjg0NTdhZC4uMGM4NjVmZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5FbGVt
ZW50LmNwcAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkVsZW1lbnQuY3BwCkBAIC0zMCw3
ICszMCw2IEBACiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZVRyZWUu
aCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJKU05vZGUuaCIKICNpbmNsdWRl
ICJQYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyV2lkZ2V0LmgiCiAjaW5jbHVkZSAiU2V0dGluZ3Mu
aCIKQEAgLTQyLDE1ICs0MSwxMiBAQAogI2VuZGlmCiAKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExV
R0lOX0FQSSkKKyNpbmNsdWRlICJKU05vZGUuaCIKICNpbmNsdWRlICJOUF9qc29iamVjdC5oIgog
I2luY2x1ZGUgIm5wcnVudGltZV9pbXBsLmgiCiAjaW5jbHVkZSAicnVudGltZV9yb290LmgiCiAj
ZW5kaWYKIAotdXNpbmcgS0pTOjpFeGVjU3RhdGU7Ci11c2luZyBLSlM6OkpTVmFsdWU7Ci11c2lu
ZyBLSlM6OkJpbmRpbmdzOjpSb290T2JqZWN0OwotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVz
aW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CkBAIC02NSw2ICs2MSwxMCBAQCBIVE1MUGx1Z0luRWxl
bWVudDo6SFRNTFBsdWdJbkVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9j
dW1lbnQqIGRvYwogCiBIVE1MUGx1Z0luRWxlbWVudDo6fkhUTUxQbHVnSW5FbGVtZW50KCkKIHsK
KyNpZiBVU0UoSkFWQVNDUklQVENPUkVfQklORElOR1MpCisgICAgQVNTRVJUKCFtX2luc3RhbmNl
KTsgLy8gY2xlYXJlZCBpbiBkZXRhY2goKQorI2VuZGlmCisKICNpZiBFTkFCTEUoTkVUU0NBUEVf
UExVR0lOX0FQSSkKICAgICBpZiAobV9OUE9iamVjdCkgewogICAgICAgICBfTlBOX1JlbGVhc2VP
YmplY3QobV9OUE9iamVjdCk7CkBAIC03Myw2ICs3MywzMiBAQCBIVE1MUGx1Z0luRWxlbWVudDo6
fkhUTUxQbHVnSW5FbGVtZW50KCkKICNlbmRpZgogfQogCisjaWYgVVNFKEpBVkFTQ1JJUFRDT1JF
X0JJTkRJTkdTKQordm9pZCBIVE1MUGx1Z0luRWxlbWVudDo6ZGV0YWNoKCkKK3sKKyAgICBtX2lu
c3RhbmNlLmNsZWFyKCk7CisgICAgSFRNTEZyYW1lT3duZXJFbGVtZW50OjpkZXRhY2goKTsKK30K
KworS0pTOjpCaW5kaW5nczo6SW5zdGFuY2UqIEhUTUxQbHVnSW5FbGVtZW50OjpnZXRJbnN0YW5j
ZSgpIGNvbnN0Cit7CisgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKTsKKyAg
ICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8vIElmIHRoZSBob3N0IGR5
bmFtaWNhbGx5IHR1cm5zIG9mZiBKYXZhU2NyaXB0IChvciBKYXZhKSB3ZSB3aWxsIHN0aWxsIHJl
dHVybgorICAgIC8vIHRoZSBjYWNoZWQgYWxsb2NhdGVkIEJpbmRpbmdzOjpJbnN0YW5jZS4gIE5v
dCBzdXBwb3J0aW5nIHRoaXMgZWRnZS1jYXNlIGlzIE9LLgorICAgIGlmIChtX2luc3RhbmNlKQor
ICAgICAgICByZXR1cm4gbV9pbnN0YW5jZS5nZXQoKTsKKworICAgIFJlbmRlcldpZGdldCogcmVu
ZGVyV2lkZ2V0ID0gcmVuZGVyV2lkZ2V0Rm9ySlNCaW5kaW5ncygpOworICAgIGlmIChyZW5kZXJX
aWRnZXQgJiYgcmVuZGVyV2lkZ2V0LT53aWRnZXQoKSkKKyAgICAgICAgbV9pbnN0YW5jZSA9IGZy
YW1lLT5zY3JpcHQoKS0+Y3JlYXRlU2NyaXB0SW5zdGFuY2VGb3JXaWRnZXQocmVuZGVyV2lkZ2V0
LT53aWRnZXQoKSk7CisKKyAgICByZXR1cm4gbV9pbnN0YW5jZS5nZXQoKTsKK30KKyNlbmRpZgor
CiBTdHJpbmcgSFRNTFBsdWdJbkVsZW1lbnQ6OmFsaWduKCkgY29uc3QKIHsKICAgICByZXR1cm4g
Z2V0QXR0cmlidXRlKGFsaWduQXR0cik7CkBAIC0xNDcsNyArMTczLDcgQEAgdm9pZCBIVE1MUGx1
Z0luRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKQog
ICAgICAgICBhZGRIVE1MQWxpZ25tZW50KGF0dHIpOwogICAgIGVsc2UKICAgICAgICAgSFRNTEZy
YW1lT3duZXJFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKLX0gICAgCit9CiAK
IGJvb2wgSFRNTFBsdWdJbkVsZW1lbnQ6OmNoZWNrRFREKGNvbnN0IE5vZGUqIG5ld0NoaWxkKQog
ewpAQCAtMTY2LDQxICsxOTIsMTEgQEAgdm9pZCBIVE1MUGx1Z0luRWxlbWVudDo6ZGVmYXVsdEV2
ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiAKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQ
SSkKIAotTlBPYmplY3QqIEhUTUxQbHVnSW5FbGVtZW50OjpjcmVhdGVOUE9iamVjdCgpCi17Ci0g
ICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKSB7
Ci0gICAgICAgIC8vIFRoaXMgc2hvdWxkbid0IGV2ZXIgaGFwcGVuLCBidXQgbWlnaHQgYXMgd2Vs
bCBjaGVjayBhbnl3YXkuCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBy
ZXR1cm4gX05QTl9DcmVhdGVOb1NjcmlwdE9iamVjdCgpOwotICAgIH0KLQotICAgIFNldHRpbmdz
KiBzZXR0aW5ncyA9IGZyYW1lLT5zZXR0aW5ncygpOwotICAgIGlmICghc2V0dGluZ3MpIHsKLSAg
ICAgICAgLy8gVGhpcyBzaG91bGRuJ3QgZXZlciBoYXBwZW4sIGJ1dCBtaWdodCBhcyB3ZWxsIGNo
ZWNrIGFueXdheS4KLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVy
biBfTlBOX0NyZWF0ZU5vU2NyaXB0T2JqZWN0KCk7Ci0gICAgfQotCi0gICAgLy8gQ2FuJ3QgY3Jl
YXRlIE5QT2JqZWN0cyB3aGVuIEphdmFTY3JpcHQgaXMgZGlzYWJsZWQKLSAgICBpZiAoIWZyYW1l
LT5zY3JpcHQoKS0+aXNFbmFibGVkKCkpCi0gICAgICAgIHJldHVybiBfTlBOX0NyZWF0ZU5vU2Ny
aXB0T2JqZWN0KCk7Ci0gICAgCi0gICAgLy8gQ3JlYXRlIGEgSlNPYmplY3QgYm91bmQgdG8gdGhp
cyBlbGVtZW50Ci0gICAgRXhlY1N0YXRlICpleGVjID0gZnJhbWUtPnNjcmlwdCgpLT5nbG9iYWxP
YmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgIEpTVmFsdWUqIGpzRWxlbWVudFZhbHVlID0gdG9K
UyhleGVjLCB0aGlzKTsKLSAgICBpZiAoIWpzRWxlbWVudFZhbHVlIHx8ICFqc0VsZW1lbnRWYWx1
ZS0+aXNPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIF9OUE5fQ3JlYXRlTm9TY3JpcHRPYmplY3Qo
KTsKLQotICAgIC8vIFdyYXAgdGhlIEpTT2JqZWN0IGluIGFuIE5QT2JqZWN0Ci0gICAgUm9vdE9i
amVjdCogcm9vdE9iamVjdCA9IGZyYW1lLT5iaW5kaW5nUm9vdE9iamVjdCgpOwotICAgIHJldHVy
biBfTlBOX0NyZWF0ZVNjcmlwdE9iamVjdCgwLCBqc0VsZW1lbnRWYWx1ZS0+Z2V0T2JqZWN0KCks
IHJvb3RPYmplY3QpOwotfQotCiBOUE9iamVjdCogSFRNTFBsdWdJbkVsZW1lbnQ6OmdldE5QT2Jq
ZWN0KCkKIHsKKyAgICBBU1NFUlQoZG9jdW1lbnQoKS0+ZnJhbWUoKSk7CiAgICAgaWYgKCFtX05Q
T2JqZWN0KQotICAgICAgICBtX05QT2JqZWN0ID0gY3JlYXRlTlBPYmplY3QoKTsKKyAgICAgICAg
bV9OUE9iamVjdCA9IGRvY3VtZW50KCktPmZyYW1lKCktPnNjcmlwdCgpLT5jcmVhdGVTY3JpcHRP
YmplY3RGb3JQbHVnaW5FbGVtZW50KHRoaXMpOwogICAgIHJldHVybiBtX05QT2JqZWN0OwogfQog
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkVsZW1lbnQuaCBiL1dlYkNvcmUv
aHRtbC9IVE1MUGx1Z0luRWxlbWVudC5oCmluZGV4IGU1YjZkNGUuLjdmMjg4NDAgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luRWxlbWVudC5oCisrKyBiL1dlYkNvcmUvaHRtbC9I
VE1MUGx1Z0luRWxlbWVudC5oCkBAIC0zOSw2ICszOSw4IEBAIHN0cnVjdCBOUE9iamVjdDsKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBSZW5kZXJXaWRnZXQ7CisKIGNsYXNzIEhUTUxQ
bHVnSW5FbGVtZW50IDogcHVibGljIEhUTUxGcmFtZU93bmVyRWxlbWVudCB7CiBwdWJsaWM6CiAg
ICAgSFRNTFBsdWdJbkVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1l
bnQqKTsKQEAgLTY3LDE1ICs2OSwxMyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRlZmF1
bHRFdmVudEhhbmRsZXIoRXZlbnQqKTsKIAogI2lmIFVTRShKQVZBU0NSSVBUQ09SRV9CSU5ESU5H
UykKLSAgICB2aXJ0dWFsIEtKUzo6QmluZGluZ3M6Okluc3RhbmNlKiBnZXRJbnN0YW5jZSgpIGNv
bnN0ID0gMDsKLSNlbmRpZgotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIHZp
cnR1YWwgTlBPYmplY3QqIGdldE5QT2JqZWN0KCk7CisgICAgdmlydHVhbCB2b2lkIGRldGFjaCgp
OworICAgIHZpcnR1YWwgUmVuZGVyV2lkZ2V0KiByZW5kZXJXaWRnZXRGb3JKU0JpbmRpbmdzKCkg
Y29uc3QgPSAwOworICAgIEtKUzo6QmluZGluZ3M6Okluc3RhbmNlKiBnZXRJbnN0YW5jZSgpIGNv
bnN0OwogI2VuZGlmCiAKLXByaXZhdGU6CiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkp
Ci0gICAgTlBPYmplY3QqIGNyZWF0ZU5QT2JqZWN0KCk7CisgICAgdmlydHVhbCBOUE9iamVjdCog
Z2V0TlBPYmplY3QoKTsKICNlbmRpZgogCiBwcm90ZWN0ZWQ6CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2xvYWRlci9GcmFtZUxvYWRlci5jcHAgYi9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAK
aW5kZXggYzAwYTdiYS4uZWFkMWRhZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9sb2FkZXIvRnJhbWVM
b2FkZXIuY3BwCisrKyBiL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcApAQCAtODI3LDYg
KzgyNyw5IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmNsZWFyKGJvb2wgY2xlYXJXaW5kb3dQcm9wZXJ0
aWVzLCBib29sIGNsZWFyU2NyaXB0T2JqZWN0cykKICAgICAgICAgfQogICAgIH0KIAorICAgIGlm
IChjbGVhclNjcmlwdE9iamVjdHMpCisgICAgICAgIG1fZnJhbWUtPnNjcmlwdCgpLT5jbGVhclNj
cmlwdE9iamVjdHMoKTsKKwogICAgIC8vIERvIHRoaXMgYWZ0ZXIgZGV0YWNoaW5nIHRoZSBkb2N1
bWVudCBzbyB0aGF0IHRoZSB1bmxvYWQgZXZlbnQgd29ya3MuCiAgICAgaWYgKGNsZWFyV2luZG93
UHJvcGVydGllcykgewogICAgICAgICBtX2ZyYW1lLT5jbGVhckRPTVdpbmRvdygpOwpAQCAtODM3
LDE4ICs4NDAsMTUgQEAgdm9pZCBGcmFtZUxvYWRlcjo6Y2xlYXIoYm9vbCBjbGVhcldpbmRvd1By
b3BlcnRpZXMsIGJvb2wgY2xlYXJTY3JpcHRPYmplY3RzKQogICAgIG1fZnJhbWUtPmV2ZW50SGFu
ZGxlcigpLT5jbGVhcigpOwogICAgIGlmIChtX2ZyYW1lLT52aWV3KCkpCiAgICAgICAgIG1fZnJh
bWUtPnZpZXcoKS0+Y2xlYXIoKTsKLSAgICAKKwogICAgIG1fZnJhbWUtPnNldFNlbGVjdGlvbkdy
YW51bGFyaXR5KENoYXJhY3RlckdyYW51bGFyaXR5KTsKIAotICAgIC8vIERvIG5vdCBkcm9wIHRo
ZSBkb2N1bWVudCBiZWZvcmUgdGhlIHNjcmlwdCBwcm94eSBhbmQgdmlldyBhcmUgY2xlYXJlZCwg
YXMgc29tZSBkZXN0cnVjdG9ycwotICAgIC8vIG1pZ2h0IHN0aWxsIHRyeSB0byBhY2Nlc3MgdGhl
IGRvY3VtZW50LgorICAgIC8vIERvIG5vdCBkcm9wIHRoZSBkb2N1bWVudCBiZWZvcmUgdGhlIFNj
cmlwdENvbnRyb2xsZXIgYW5kIHZpZXcgYXJlIGNsZWFyZWQKKyAgICAvLyBhcyBzb21lIGRlc3Ry
dWN0b3JzIG1pZ2h0IHN0aWxsIHRyeSB0byBhY2Nlc3MgdGhlIGRvY3VtZW50LgogICAgIG1fZnJh
bWUtPnNldERvY3VtZW50KDApOwogICAgIG1fZGVjb2RlciA9IDA7CiAKICAgICBtX2NvbnRhaW5z
UGx1Z0lucyA9IGZhbHNlOwotICAgIAotICAgIGlmIChjbGVhclNjcmlwdE9iamVjdHMpCi0gICAg
ICAgIG1fZnJhbWUtPmNsZWFyU2NyaXB0T2JqZWN0cygpOwogICAKICAgICBtX3JlZGlyZWN0aW9u
VGltZXIuc3RvcCgpOwogICAgIG1fc2NoZWR1bGVkUmVkaXJlY3Rpb24uY2xlYXIoKTsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAgYi9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCmlu
ZGV4IGUwNjFlODUuLmY3ZTg5MGQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAK
KysrIGIvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcApAQCAtOCw2ICs4LDcgQEAKICAqIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAbnlwb3Au
Y29tPgogICogQ29weXJpZ2h0IChDKSAyMDA3IFRyb2xsdGVjaCBBU0EKKyAqIENvcHlyaWdodCAo
QykgMjAwOCBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICoKICAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC01Niw3ICs1Nyw2IEBACiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIm1hcmt1
cC5oIgogI2luY2x1ZGUgIk1lZGlhRmVhdHVyZU5hbWVzLmgiCi0jaW5jbHVkZSAiTlBfanNvYmpl
Y3QuaCIKICNpbmNsdWRlICJOYXZpZ2F0b3IuaCIKICNpbmNsdWRlICJOb2RlTGlzdC5oIgogI2lu
Y2x1ZGUgIlBhZ2UuaCIKQEAgLTEyNCwxNCArMTI0LDYgQEAgRnJhbWU6OkZyYW1lKFBhZ2UqIHBh
Z2UsIEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXJFbGVtZW50LCBGcmFtZUxvYWRlckNsaWVu
dCoKIAogICAgIFhNTE5hbWVzOjppbml0KCk7CiAKLSNpZiBQTEFURk9STShNQUMpICYmIEVOQUJM
RShNQUNfSkFWQV9CUklER0UpCi0gICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWRKYXZhSlNCaW5k
aW5nczsKLSAgICBpZiAoIWluaXRpYWxpemVkSmF2YUpTQmluZGluZ3MpIHsKLSAgICAgICAgaW5p
dGlhbGl6ZWRKYXZhSlNCaW5kaW5ncyA9IHRydWU7Ci0gICAgICAgIGluaXRKYXZhSlNCaW5kaW5n
cygpOwotICAgIH0KLSNlbmRpZgotCiAgICAgaWYgKCFvd25lckVsZW1lbnQpCiAgICAgICAgIHBh
Z2UtPnNldE1haW5GcmFtZSh0aGlzKTsKICAgICBlbHNlIHsKQEAgLTE3NSw4ICsxNjcsNiBAQCBG
cmFtZTo6fkZyYW1lKCkKICAgICAgICAgZC0+bV92aWV3LT5jbGVhckZyYW1lKCk7CiAgICAgfQog
Ci0gICAgZGlzY29ubmVjdFBsYXRmb3JtU2NyaXB0T2JqZWN0cygpOwotCiAgICAgQVNTRVJUKCFk
LT5tX2xpZmVTdXBwb3J0VGltZXIuaXNBY3RpdmUoKSk7CiAKICNpZiBGUkFNRV9MT0FEU19VU0VS
X1NUWUxFU0hFRVQKQEAgLTEwNTcsNTAgKzEwNDcsNiBAQCB2b2lkIEZyYW1lOjpsaWZlU3VwcG9y
dFRpbWVyRmlyZWQoVGltZXI8RnJhbWU+KikKICNlbmRpZgogICAgIGRlcmVmKCk7CiB9Ci0KLUtK
Uzo6QmluZGluZ3M6OlJvb3RPYmplY3QqIEZyYW1lOjpiaW5kaW5nUm9vdE9iamVjdCgpCi17Ci0g
ICAgaWYgKCFzY3JpcHQoKS0+aXNFbmFibGVkKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAg
aWYgKCFkLT5tX2JpbmRpbmdSb290T2JqZWN0KQotICAgICAgICBkLT5tX2JpbmRpbmdSb290T2Jq
ZWN0ID0gS0pTOjpCaW5kaW5nczo6Um9vdE9iamVjdDo6Y3JlYXRlKDAsIHNjcmlwdCgpLT5nbG9i
YWxPYmplY3QoKSk7Ci0gICAgcmV0dXJuIGQtPm1fYmluZGluZ1Jvb3RPYmplY3QuZ2V0KCk7Ci19
Ci0KLVBhc3NSZWZQdHI8S0pTOjpCaW5kaW5nczo6Um9vdE9iamVjdD4gRnJhbWU6OmNyZWF0ZVJv
b3RPYmplY3Qodm9pZCogbmF0aXZlSGFuZGxlLCBLSlM6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QpCi17Ci0gICAgUm9vdE9iamVjdE1hcDo6aXRlcmF0b3IgaXQgPSBkLT5tX3Jvb3RPYmpl
Y3RzLmZpbmQobmF0aXZlSGFuZGxlKTsKLSAgICBpZiAoaXQgIT0gZC0+bV9yb290T2JqZWN0cy5l
bmQoKSkKLSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7Ci0gICAgCi0gICAgUmVmUHRyPEtKUzo6
QmluZGluZ3M6OlJvb3RPYmplY3Q+IHJvb3RPYmplY3QgPSBLSlM6OkJpbmRpbmdzOjpSb290T2Jq
ZWN0OjpjcmVhdGUobmF0aXZlSGFuZGxlLCBnbG9iYWxPYmplY3QpOwotICAgIAotICAgIGQtPm1f
cm9vdE9iamVjdHMuc2V0KG5hdGl2ZUhhbmRsZSwgcm9vdE9iamVjdCk7Ci0gICAgcmV0dXJuIHJv
b3RPYmplY3QucmVsZWFzZSgpOwotfQotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkp
Ci1OUE9iamVjdCogRnJhbWU6OndpbmRvd1NjcmlwdE5QT2JqZWN0KCkKLXsKLSAgICBpZiAoIWQt
Pm1fd2luZG93U2NyaXB0TlBPYmplY3QpIHsKLSAgICAgICAgaWYgKHNjcmlwdCgpLT5pc0VuYWJs
ZWQoKSkgewotICAgICAgICAgICAgLy8gSmF2YVNjcmlwdCBpcyBlbmFibGVkLCBzbyB0aGVyZSBp
cyBhIEphdmFTY3JpcHQgd2luZG93IG9iamVjdC4gIFJldHVybiBhbiBOUE9iamVjdCBib3VuZCB0
byB0aGUgd2luZG93Ci0gICAgICAgICAgICAvLyBvYmplY3QuCi0gICAgICAgICAgICBLSlM6OkpT
T2JqZWN0KiB3aW4gPSB0b0pTRE9NV2luZG93KHRoaXMpOwotICAgICAgICAgICAgQVNTRVJUKHdp
bik7Ci0gICAgICAgICAgICBLSlM6OkJpbmRpbmdzOjpSb290T2JqZWN0KiByb290ID0gYmluZGlu
Z1Jvb3RPYmplY3QoKTsKLSAgICAgICAgICAgIGQtPm1fd2luZG93U2NyaXB0TlBPYmplY3QgPSBf
TlBOX0NyZWF0ZVNjcmlwdE9iamVjdCgwLCB3aW4sIHJvb3QpOwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgLy8gSmF2YVNjcmlwdCBpcyBub3QgZW5hYmxlZCwgc28gd2UgY2Fubm90IGJp
bmQgdGhlIE5QT2JqZWN0IHRvIHRoZSBKYXZhU2NyaXB0IHdpbmRvdyBvYmplY3QuCi0gICAgICAg
ICAgICAvLyBJbnN0ZWFkLCB3ZSBjcmVhdGUgYW4gTlBPYmplY3Qgb2YgYSBkaWZmZXJlbnQgY2xh
c3MsIG9uZSB3aGljaCBpcyBub3QgYm91bmQgdG8gYSBKYXZhU2NyaXB0IG9iamVjdC4KLSAgICAg
ICAgICAgIGQtPm1fd2luZG93U2NyaXB0TlBPYmplY3QgPSBfTlBOX0NyZWF0ZU5vU2NyaXB0T2Jq
ZWN0KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZC0+bV93aW5kb3dTY3JpcHRO
UE9iamVjdDsKLX0KLSNlbmRpZgogICAgIAogdm9pZCBGcmFtZTo6Y2xlYXJTY3JpcHRDb250cm9s
bGVyKCkKIHsKQEAgLTExMTYsNDMgKzEwNjIsNiBAQCB2b2lkIEZyYW1lOjpjbGVhckRPTVdpbmRv
dygpCiAgICAgZC0+bV9kb21XaW5kb3cgPSAwOwogfQogCi12b2lkIEZyYW1lOjpjbGVhbnVwU2Ny
aXB0T2JqZWN0c0ZvclBsdWdpbih2b2lkKiBuYXRpdmVIYW5kbGUpCi17Ci0gICAgUm9vdE9iamVj
dE1hcDo6aXRlcmF0b3IgaXQgPSBkLT5tX3Jvb3RPYmplY3RzLmZpbmQobmF0aXZlSGFuZGxlKTsK
LSAgICAKLSAgICBpZiAoaXQgPT0gZC0+bV9yb290T2JqZWN0cy5lbmQoKSkKLSAgICAgICAgcmV0
dXJuOwotICAgIAotICAgIGl0LT5zZWNvbmQtPmludmFsaWRhdGUoKTsKLSAgICBkLT5tX3Jvb3RP
YmplY3RzLnJlbW92ZShpdCk7Ci19Ci0gICAgCi12b2lkIEZyYW1lOjpjbGVhclNjcmlwdE9iamVj
dHMoKQotewotICAgIFJvb3RPYmplY3RNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGQtPm1fcm9v
dE9iamVjdHMuZW5kKCk7Ci0gICAgZm9yIChSb290T2JqZWN0TWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IGQtPm1fcm9vdE9iamVjdHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBp
dC0+c2Vjb25kLT5pbnZhbGlkYXRlKCk7Ci0KLSAgICBkLT5tX3Jvb3RPYmplY3RzLmNsZWFyKCk7
Ci0KLSAgICBpZiAoZC0+bV9iaW5kaW5nUm9vdE9iamVjdCkgewotICAgICAgICBkLT5tX2JpbmRp
bmdSb290T2JqZWN0LT5pbnZhbGlkYXRlKCk7Ci0gICAgICAgIGQtPm1fYmluZGluZ1Jvb3RPYmpl
Y3QgPSAwOwotICAgIH0KLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIGlm
IChkLT5tX3dpbmRvd1NjcmlwdE5QT2JqZWN0KSB7Ci0gICAgICAgIC8vIENhbGwgX05QTl9EZWFs
bG9jYXRlT2JqZWN0KCkgaW5zdGVhZCBvZiBfTlBOX1JlbGVhc2VPYmplY3QoKSBzbyB0aGF0IHdl
IGRvbid0IGxlYWsgaWYgYSBwbHVnaW4gZmFpbHMgdG8gcmVsZWFzZSB0aGUgd2luZG93Ci0gICAg
ICAgIC8vIHNjcmlwdCBvYmplY3QgcHJvcGVybHkuCi0gICAgICAgIC8vIFRoaXMgc2hvdWxkbid0
IGNhdXNlIGFueSBwcm9ibGVtcyBmb3IgcGx1Z2lucyBzaW5jZSB0aGV5IHNob3VsZCBoYXZlIGFs
cmVhZHkgYmVlbiBzdG9wcGVkIGFuZCBkZXN0cm95ZWQgYXQgdGhpcyBwb2ludC4KLSAgICAgICAg
X05QTl9EZWFsbG9jYXRlT2JqZWN0KGQtPm1fd2luZG93U2NyaXB0TlBPYmplY3QpOwotICAgICAg
ICBkLT5tX3dpbmRvd1NjcmlwdE5QT2JqZWN0ID0gMDsKLSAgICB9Ci0jZW5kaWYKLQotICAgIGNs
ZWFyUGxhdGZvcm1TY3JpcHRPYmplY3RzKCk7Ci19Ci0KIFJlbmRlclZpZXcqIEZyYW1lOjpjb250
ZW50UmVuZGVyZXIoKSBjb25zdAogewogICAgIERvY3VtZW50KiBkb2MgPSBkb2N1bWVudCgpOwpA
QCAtMTc1MSwyMCArMTY2MCwyMCBAQCBFdmVudEhhbmRsZXIqIEZyYW1lOjpldmVudEhhbmRsZXIo
KSBjb25zdAogCiB2b2lkIEZyYW1lOjpwYWdlRGVzdHJveWVkKCkKIHsKKyAgICBBU1NFUlQocGFn
ZSgpKTsKKwogICAgIGlmIChGcmFtZSogcGFyZW50ID0gdHJlZSgpLT5wYXJlbnQoKSkKICAgICAg
ICAgcGFyZW50LT5sb2FkZXIoKS0+Y2hlY2tMb2FkQ29tcGxldGUoKTsKIAotICAgIGlmIChkLT5t
X3BhZ2UgJiYgZC0+bV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZEZyYW1lKCkgPT0g
dGhpcykKLSAgICAgICAgZC0+bV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+c2V0Rm9jdXNlZEZy
YW1lKDApOworICAgIGlmIChwYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkRnJhbWUo
KSA9PSB0aGlzKQorICAgICAgICBwYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLT5zZXRGb2N1c2Vk
RnJhbWUoMCk7CiAKICAgICAvLyBUaGlzIHdpbGwgc3RvcCBhbnkgSlMgdGltZXJzCi0gICAgaWYg
KGQtPm1fc2NyaXB0LmhhdmVXaW5kb3dTaGVsbCgpKSB7Ci0gICAgICAgIGlmIChKU0RPTVdpbmRv
d1NoZWxsKiB3aW5kb3dTaGVsbCA9IHRvSlNET01XaW5kb3dTaGVsbCh0aGlzKSkKLSAgICAgICAg
ICAgIHdpbmRvd1NoZWxsLT5kaXNjb25uZWN0RnJhbWUoKTsKLSAgICB9CisgICAgaWYgKHNjcmlw
dCgpLT5oYXZlV2luZG93U2hlbGwoKSkKKyAgICAgICAgc2NyaXB0KCktPndpbmRvd1NoZWxsKCkt
PmRpc2Nvbm5lY3RGcmFtZSgpOworCisgICAgc2NyaXB0KCktPmNsZWFyU2NyaXB0T2JqZWN0cygp
OwogCi0gICAgY2xlYXJTY3JpcHRPYmplY3RzKCk7Ci0gICAgCiAgICAgZC0+bV9wYWdlID0gMDsK
IH0KIApAQCAtMTk1MSwyNiArMTg2MCwxOSBAQCBGcmFtZVByaXZhdGU6OkZyYW1lUHJpdmF0ZShQ
YWdlKiBwYWdlLCBGcmFtZSogcGFyZW50LCBGcmFtZSogdGhpc0ZyYW1lLCBIVE1MRnJhbQogICAg
ICwgbV9lZGl0b3IodGhpc0ZyYW1lKQogICAgICwgbV9ldmVudEhhbmRsZXIodGhpc0ZyYW1lKQog
ICAgICwgbV9hbmltYXRpb25Db250cm9sbGVyKHRoaXNGcmFtZSkKKyAgICAsIG1fbGlmZVN1cHBv
cnRUaW1lcih0aGlzRnJhbWUsICZGcmFtZTo6bGlmZVN1cHBvcnRUaW1lckZpcmVkKQorICAgICwg
bV9wYWludFJlc3RyaWN0aW9uKFBhaW50UmVzdHJpY3Rpb25Ob25lKQogICAgICwgbV9jYXJldFZp
c2libGUoZmFsc2UpCiAgICAgLCBtX2NhcmV0UGFpbnQodHJ1ZSkKICAgICAsIG1faXNQYWludGlu
ZyhmYWxzZSkKLSAgICAsIG1fbGlmZVN1cHBvcnRUaW1lcih0aGlzRnJhbWUsICZGcmFtZTo6bGlm
ZVN1cHBvcnRUaW1lckZpcmVkKQotICAgICwgbV9wYWludFJlc3RyaWN0aW9uKFBhaW50UmVzdHJp
Y3Rpb25Ob25lKQogICAgICwgbV9oaWdobGlnaHRUZXh0TWF0Y2hlcyhmYWxzZSkKICAgICAsIG1f
aW5WaWV3U291cmNlTW9kZShmYWxzZSkKLSAgICAsIGZyYW1lQ291bnQoMCkKICAgICAsIG1fcHJv
aGliaXRzU2Nyb2xsaW5nKGZhbHNlKQogICAgICwgbV9uZWVkc1JlYXBwbHlTdHlsZXMoZmFsc2Up
CiAgICAgLCBtX2lzRGlzY29ubmVjdGVkKGZhbHNlKQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVH
SU5fQVBJKQotICAgICwgbV93aW5kb3dTY3JpcHROUE9iamVjdCgwKQotI2VuZGlmCiAjaWYgRlJB
TUVfTE9BRFNfVVNFUl9TVFlMRVNIRUVUCiAgICAgLCBtX3VzZXJTdHlsZVNoZWV0TG9hZGVyKDAp
CiAjZW5kaWYKLSNpZiBQTEFURk9STShNQUMpCi0gICAgLCBtX3dpbmRvd1NjcmlwdE9iamVjdChu
aWwpCi0jZW5kaWYKIHsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL0ZyYW1lLmggYi9X
ZWJDb3JlL3BhZ2UvRnJhbWUuaAppbmRleCA1ZjI1YWZkLi4xZWY2MDM2IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3BhZ2UvRnJhbWUuaAorKysgYi9XZWJDb3JlL3BhZ2UvRnJhbWUuaApAQCAtOCw2ICs4
LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgMjAwMCBTdGVmYW4gU2NoaW1hbnNraSA8MVN0
ZWluQGdteC5kZT4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAw
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcg
VHJvbGx0ZWNoIEFTQQorICogQ29weXJpZ2h0IChDKSAyMDA4IEVyaWMgU2VpZGVsIDxlcmljQHdl
YmtpdC5vcmc+CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTMzLDI4ICszNCwxMiBAQAogI2luY2x1
ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiVGV4dEdyYW51bGFyaXR5LmgiCiAKLXN0cnVj
dCBOUE9iamVjdDsKLQotbmFtZXNwYWNlIEtKUyB7Ci0KLSAgICBjbGFzcyBKU0dsb2JhbE9iamVj
dDsKLQotICAgIG5hbWVzcGFjZSBCaW5kaW5ncyB7Ci0gICAgICAgIGNsYXNzIEluc3RhbmNlOwot
ICAgICAgICBjbGFzcyBSb290T2JqZWN0OwotICAgIH0KLQotfQotCiAjaWYgUExBVEZPUk0oTUFD
KQotI2lmZGVmIF9fT0JKQ19fCi1AY2xhc3MgV2ViU2NyaXB0T2JqZWN0OwotI2Vsc2UKKyNpZm5k
ZWYgX19PQkpDX18KIGNsYXNzIE5TQXJyYXk7CiBjbGFzcyBOU0RpY3Rpb25hcnk7CiBjbGFzcyBO
U011dGFibGVEaWN0aW9uYXJ5OwogY2xhc3MgTlNTdHJpbmc7Ci1jbGFzcyBXZWJTY3JpcHRPYmpl
Y3Q7CiB0eXBlZGVmIGludCBOU1dyaXRpbmdEaXJlY3Rpb247CiAjZW5kaWYKICNlbmRpZgpAQCAt
MTYwLDMzICsxNDUsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhclNjcmlwdENvbnRyb2xsZXIo
KTsKICAgICB2b2lkIGNsZWFyRE9NV2luZG93KCk7CiAKLSAgICB2b2lkIGNsZWFyU2NyaXB0T2Jq
ZWN0cygpOwotICAgIHZvaWQgY2xlYW51cFNjcmlwdE9iamVjdHNGb3JQbHVnaW4odm9pZCopOwot
CiBwcml2YXRlOgotICAgIHZvaWQgY2xlYXJQbGF0Zm9ybVNjcmlwdE9iamVjdHMoKTsKLSAgICB2
b2lkIGRpc2Nvbm5lY3RQbGF0Zm9ybVNjcmlwdE9iamVjdHMoKTsKLQogICAgIHZvaWQgbGlmZVN1
cHBvcnRUaW1lckZpcmVkKFRpbWVyPEZyYW1lPiopOwotICAgIAotLy8gPT09IHRvIGJlIG1vdmVk
IGludG8gU2NyaXB0Q29udHJvbGxlcgotCi1wdWJsaWM6Ci0gICAgUGFzc1JlZlB0cjxLSlM6OkJp
bmRpbmdzOjpJbnN0YW5jZT4gY3JlYXRlU2NyaXB0SW5zdGFuY2VGb3JXaWRnZXQoV2lkZ2V0Kik7
Ci0gICAgS0pTOjpCaW5kaW5nczo6Um9vdE9iamVjdCogYmluZGluZ1Jvb3RPYmplY3QoKTsKLQot
ICAgIFBhc3NSZWZQdHI8S0pTOjpCaW5kaW5nczo6Um9vdE9iamVjdD4gY3JlYXRlUm9vdE9iamVj
dCh2b2lkKiBuYXRpdmVIYW5kbGUsIEtKUzo6SlNHbG9iYWxPYmplY3QqKTsKLQotI2lmIFBMQVRG
T1JNKE1BQykKLSNpZiBFTkFCTEUoTUFDX0pBVkFfQlJJREdFKQotICAgIHN0YXRpYyB2b2lkIGlu
aXRKYXZhSlNCaW5kaW5ncygpOwotI2VuZGlmCi0gICAgV2ViU2NyaXB0T2JqZWN0KiB3aW5kb3dT
Y3JpcHRPYmplY3QoKTsKLSNlbmRpZgotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkp
Ci0gICAgTlBPYmplY3QqIHdpbmRvd1NjcmlwdE5QT2JqZWN0KCk7Ci0jZW5kaWYgICAgCiAKIC8v
ID09PSB0byBiZSBtb3ZlZCBpbnRvIERvY3VtZW50CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFn
ZS9GcmFtZVByaXZhdGUuaCBiL1dlYkNvcmUvcGFnZS9GcmFtZVByaXZhdGUuaAppbmRleCA1MTQ5
NDUzLi5hMDg1Mzc1IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvRnJhbWVQcml2YXRlLmgKKysr
IGIvV2ViQ29yZS9wYWdlL0ZyYW1lUHJpdmF0ZS5oCkBAIC0zNiwyMyArMzYsNiBAQAogI2luY2x1
ZGUgIlN0cmluZ0hhc2guaCIKICNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCiAKLW5hbWVz
cGFjZSBLSlMgewotICAgIGNsYXNzIEludGVycHJldGVyOwotICAgICAgICAKLSAgICBuYW1lc3Bh
Y2UgQmluZGluZ3MgewotICAgICAgICBjbGFzcyBJbnN0YW5jZTsKLSAgICAgICAgY2xhc3MgUm9v
dE9iamVjdDsKLSAgICB9Ci19Ci0KLSNpZiBQTEFURk9STShNQUMpCi0jaWZkZWYgX19PQkpDX18K
LUBjbGFzcyBXZWJTY3JpcHRPYmplY3Q7Ci0jZWxzZQotY2xhc3MgV2ViU2NyaXB0T2JqZWN0Owot
I2VuZGlmCi0jZW5kaWYKLQogI2lmIFBMQVRGT1JNKFdJTikKICNpbmNsdWRlICJGcmFtZVdpbi5o
IgogI2VuZGlmCkBAIC02Miw4ICs0NSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNpZiBGUkFN
RV9MT0FEU19VU0VSX1NUWUxFU0hFRVQKICAgICBjbGFzcyBVc2VyU3R5bGVTaGVldExvYWRlcjsK
ICNlbmRpZgotCi0gICAgdHlwZWRlZiBIYXNoTWFwPHZvaWQqLCBSZWZQdHI8S0pTOjpCaW5kaW5n
czo6Um9vdE9iamVjdD4gPiBSb290T2JqZWN0TWFwOwogICAgIAogICAgIGNsYXNzIEZyYW1lUHJp
dmF0ZSB7CiAgICAgcHVibGljOgpAQCAtOTYsMTAgKzc3LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICBFdmVudEhhbmRsZXIgbV9ldmVudEhhbmRsZXI7CiAgICAgICAgIEFuaW1hdGlv
bkNvbnRyb2xsZXIgbV9hbmltYXRpb25Db250cm9sbGVyOwogCi0gICAgICAgIGJvb2wgbV9jYXJl
dFZpc2libGUgOiAxOwotICAgICAgICBib29sIG1fY2FyZXRQYWludCA6IDE7Ci0gICAgICAgIGJv
b2wgbV9pc1BhaW50aW5nIDogMTsKLQogICAgICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24+IG1fdHlwaW5nU3R5bGU7CiAKICAgICAgICAgVGltZXI8RnJhbWU+IG1fbGlmZVN1
cHBvcnRUaW1lcjsKQEAgLTEwNywzMCArODQsMTkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICBSZWZQdHI8Tm9kZT4gbV9lbGVtZW50VG9EcmF3OwogICAgICAgICBQYWludFJlc3RyaWN0
aW9uIG1fcGFpbnRSZXN0cmljdGlvbjsKICAgICAgICAgCisgICAgICAgIGJvb2wgbV9jYXJldFZp
c2libGU7CisgICAgICAgIGJvb2wgbV9jYXJldFBhaW50OworICAgICAgICBib29sIG1faXNQYWlu
dGluZzsKKwogICAgICAgICBib29sIG1faGlnaGxpZ2h0VGV4dE1hdGNoZXM7Ci0gICAgICAgIAog
ICAgICAgICBib29sIG1faW5WaWV3U291cmNlTW9kZTsKLQotICAgICAgICB1bnNpZ25lZCBmcmFt
ZUNvdW50OwotCiAgICAgICAgIGJvb2wgbV9wcm9oaWJpdHNTY3JvbGxpbmc7Ci0KICAgICAgICAg
Ym9vbCBtX25lZWRzUmVhcHBseVN0eWxlczsKLSAgICAgICAgCiAgICAgICAgIGJvb2wgbV9pc0Rp
c2Nvbm5lY3RlZDsKIAotICAgICAgICAvLyBUaGUgcm9vdCBvYmplY3QgdXNlZCBmb3Igb2JqZWN0
cyBib3VuZCBvdXRzaWRlIHRoZSBjb250ZXh0IG9mIGEgcGx1Z2luLgotICAgICAgICBSZWZQdHI8
S0pTOjpCaW5kaW5nczo6Um9vdE9iamVjdD4gbV9iaW5kaW5nUm9vdE9iamVjdDsgCi0gICAgICAg
IFJvb3RPYmplY3RNYXAgbV9yb290T2JqZWN0czsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lO
X0FQSSkKLSAgICAgICAgTlBPYmplY3QqIG1fd2luZG93U2NyaXB0TlBPYmplY3Q7Ci0jZW5kaWYK
ICNpZiBGUkFNRV9MT0FEU19VU0VSX1NUWUxFU0hFRVQKICAgICAgICAgVXNlclN0eWxlU2hlZXRM
b2FkZXIqIG1fdXNlclN0eWxlU2hlZXRMb2FkZXI7CiAjZW5kaWYKLSNpZiBQTEFURk9STShNQUMp
Ci0gICAgICAgIFJldGFpblB0cjxXZWJTY3JpcHRPYmplY3Q+IG1fd2luZG93U2NyaXB0T2JqZWN0
OwotI2VuZGlmCiAgICAgfTsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL2d0ay9GcmFt
ZUd0ay5jcHAgYi9XZWJDb3JlL3BhZ2UvZ3RrL0ZyYW1lR3RrLmNwcAppbmRleCBmMWFkMzU1Li4z
Y2FiNWEwIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvZ3RrL0ZyYW1lR3RrLmNwcAorKysgYi9X
ZWJDb3JlL3BhZ2UvZ3RrL0ZyYW1lR3RrLmNwcApAQCAtMSwxMCArMSw0IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5j
b20KLSAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgotICog
Q29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwog
ICogYXJlIG1ldDoKQEAgLTMxLDMzICsyNSw5IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKIAogI2lu
Y2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUGx1Z2luVmlldy5oIgotI2luY2x1
ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJydW50aW1lX3Jvb3QuaCIKLSNpbmNs
dWRlICJydW50aW1lLmgiCi0KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzUmVmUHRyPEtK
Uzo6QmluZGluZ3M6Okluc3RhbmNlPiBGcmFtZTo6Y3JlYXRlU2NyaXB0SW5zdGFuY2VGb3JXaWRn
ZXQoV2lkZ2V0KiB3aWRnZXQpCi17Ci0gICAgLy8gRklYTUU6IElkZWFsbHkgd2UnZCBoYXZlIGFu
IGlzUGx1Z2luVmlldygpIGhlcmUgYnV0IHdlIGNhbid0IGFkZCB0aGF0IHRvIHRoZSBvcGVuIHNv
dXJjZSB0cmVlIHJpZ2h0IG5vdy4KLSAgICBpZiAod2lkZ2V0LT5pc0ZyYW1lVmlldygpKQotICAg
ICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3Kj4od2lk
Z2V0KS0+YmluZGluZ0luc3RhbmNlKCk7Ci19Ci0KLXZvaWQgRnJhbWU6OmNsZWFyUGxhdGZvcm1T
Y3JpcHRPYmplY3RzKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEZyYW1l
OjpkaXNjb25uZWN0UGxhdGZvcm1TY3JpcHRPYmplY3RzKCkKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotfQotCiBEcmFnSW1hZ2VSZWYgRnJhbWU6OmRyYWdJbWFnZUZvclNlbGVjdGlvbigpCiB7
CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9tYWMvRnJh
bWVNYWMubW0gYi9XZWJDb3JlL3BhZ2UvbWFjL0ZyYW1lTWFjLm1tCmluZGV4IDE5MDQ1ODIuLjc2
MmUxYzEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9tYWMvRnJhbWVNYWMubW0KKysrIGIvV2Vi
Q29yZS9wYWdlL21hYy9GcmFtZU1hYy5tbQpAQCAtMzAsNyArMzAsMTEgQEAKIAogI2ltcG9ydCAi
QmxvY2tFeGNlcHRpb25zLmgiCiAjaW1wb3J0ICJDb2xvck1hYy5oIgotI2ltcG9ydCAiRE9NQWJz
dHJhY3RWaWV3RnJhbWUuaCIKKyNpbXBvcnQgIkN1cnNvci5oIgorI2ltcG9ydCAiRE9NSW50ZXJu
YWwuaCIKKyNpbXBvcnQgIkRvY3VtZW50TG9hZGVyLmgiCisjaW1wb3J0ICJFZGl0b3JDbGllbnQu
aCIKKyNpbXBvcnQgIkV2ZW50LmgiCiAjaW1wb3J0ICJFdmVudE5hbWVzLmgiCiAjaW1wb3J0ICJG
cmFtZUxvYWRlckNsaWVudC5oIgogI2ltcG9ydCAiRnJhbWVQcml2YXRlLmgiCkBAIC0zOCw0MCAr
NDIsMzMgQEAKICNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dC5oIgogI2ltcG9ydCAiSFRNTE5hbWVz
LmgiCiAjaW1wb3J0ICJIVE1MVGFibGVDZWxsRWxlbWVudC5oIgorI2ltcG9ydCAiSGl0VGVzdFJl
cXVlc3QuaCIKKyNpbXBvcnQgIkhpdFRlc3RSZXN1bHQuaCIKKyNpbXBvcnQgIktleWJvYXJkRXZl
bnQuaCIKKyNpbXBvcnQgIkxvZ2dpbmcuaCIKKyNpbXBvcnQgIk1vdXNlRXZlbnRXaXRoSGl0VGVz
dFJlc3VsdHMuaCIKKyNpbXBvcnQgIlBhZ2UuaCIKKyNpbXBvcnQgIlBsYXRmb3JtS2V5Ym9hcmRF
dmVudC5oIgorI2ltcG9ydCAiUGxhdGZvcm1TY3JvbGxCYXIuaCIKKyNpbXBvcnQgIlBsYXRmb3Jt
V2hlZWxFdmVudC5oIgogI2ltcG9ydCAiUmVndWxhckV4cHJlc3Npb24uaCIKICNpbXBvcnQgIlJl
bmRlclRhYmxlQ2VsbC5oIgogI2ltcG9ydCAiU2ltcGxlRm9udERhdGEuaCIKICNpbXBvcnQgIlVz
ZXJTdHlsZVNoZWV0TG9hZGVyLmgiCi0jaW1wb3J0ICJXZWJTY3JpcHRPYmplY3RQcml2YXRlLmgi
CisjaW1wb3J0ICJXZWJDb3JlVmlld0ZhY3RvcnkuaCIKKyNpbXBvcnQgInZpc2libGVfdW5pdHMu
aCIKKwogI2ltcG9ydCA8Q2FyYm9uL0NhcmJvbi5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
QVBJQ2FzdC5oPgogCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0jaW1wb3J0ICJj
X2luc3RhbmNlLmgiCi0jaW1wb3J0ICJOUF9qc29iamVjdC5oIgotI2ltcG9ydCAibnBydW50aW1l
X2ltcGwuaCIKLSNlbmRpZgotI2ltcG9ydCAib2JqY19pbnN0YW5jZS5oIgotI2ltcG9ydCAicnVu
dGltZV9yb290LmgiCi0jaW1wb3J0ICJydW50aW1lLmgiCi0jaWYgRU5BQkxFKE1BQ19KQVZBX0JS
SURHRSkKLSNpbXBvcnQgImpuaV9pbnN0YW5jZS5oIgotI2VuZGlmCiAjaWYgRU5BQkxFKERBU0hC
T0FSRF9TVVBQT1JUKQogI2ltcG9ydCAiV2ViRGFzaGJvYXJkUmVnaW9uLmgiCiAjZW5kaWYKLQot
QGludGVyZmFjZSBOU09iamVjdCAoV2ViUGx1Z2luKQotLSAoaWQpb2JqZWN0Rm9yV2ViU2NyaXB0
OwotLSAoTlBPYmplY3QgKiljcmVhdGVQbHVnaW5TY3JpcHRhYmxlT2JqZWN0OwotQGVuZAogIAog
QGludGVyZmFjZSBOU1ZpZXcgKFdlYkNvcmVIVE1MRG9jdW1lbnRWaWV3KQogLSAodm9pZClkcmF3
U2luZ2xlUmVjdDooTlNSZWN0KXJlY3Q7CiBAZW5kCiAgCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwot
dXNpbmcgbmFtZXNwYWNlIEtKUzo6QmluZGluZ3M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApA
QCAtNTA3LDc2ICs1MDQsNiBAQCBEcmFnSW1hZ2VSZWYgRnJhbWU6OmRyYWdJbWFnZUZvclNlbGVj
dGlvbigpCiAgICAgcmV0dXJuIHNlbGVjdGlvbkltYWdlKCk7CiB9CiAKLVBhc3NSZWZQdHI8S0pT
OjpCaW5kaW5nczo6SW5zdGFuY2U+IEZyYW1lOjpjcmVhdGVTY3JpcHRJbnN0YW5jZUZvcldpZGdl
dChXaWRnZXQqIHdpZGdldCkKLXsKLSAgICBOU1ZpZXcqIHdpZGdldFZpZXcgPSB3aWRnZXQtPmdl
dFZpZXcoKTsKLSAgICBpZiAoIXdpZGdldFZpZXcpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAg
UmVmUHRyPFJvb3RPYmplY3Q+IHJvb3RPYmplY3QgPSBjcmVhdGVSb290T2JqZWN0KHdpZGdldFZp
ZXcsIHNjcmlwdCgpLT5nbG9iYWxPYmplY3QoKSk7Ci0KLSAgICBpZiAoW3dpZGdldFZpZXcgcmVz
cG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihvYmplY3RGb3JXZWJTY3JpcHQpXSkgewotICAgICAg
ICBpZCBvYmplY3RGb3JXZWJTY3JpcHQgPSBbd2lkZ2V0VmlldyBvYmplY3RGb3JXZWJTY3JpcHRd
OwotICAgICAgICBpZiAoIW9iamVjdEZvcldlYlNjcmlwdCkKLSAgICAgICAgICAgIHJldHVybiAw
OwotICAgICAgICByZXR1cm4gS0pTOjpCaW5kaW5nczo6T2JqY0luc3RhbmNlOjpjcmVhdGUob2Jq
ZWN0Rm9yV2ViU2NyaXB0LCByb290T2JqZWN0LnJlbGVhc2UoKSk7Ci0gICAgfQotCi0gICAgaWYg
KFt3aWRnZXRWaWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoY3JlYXRlUGx1Z2luU2Ny
aXB0YWJsZU9iamVjdCldKSB7Ci0jaWYgIUVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAg
ICAgICByZXR1cm4gMDsKLSNlbHNlCi0gICAgICAgIE5QT2JqZWN0KiBucE9iamVjdCA9IFt3aWRn
ZXRWaWV3IGNyZWF0ZVBsdWdpblNjcmlwdGFibGVPYmplY3RdOwotICAgICAgICBpZiAoIW5wT2Jq
ZWN0KQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIFJlZlB0cjxJbnN0YW5jZT4gaW5z
dGFuY2UgPSBLSlM6OkJpbmRpbmdzOjpDSW5zdGFuY2U6OmNyZWF0ZShucE9iamVjdCwgcm9vdE9i
amVjdC5yZWxlYXNlKCkpOwotICAgICAgICAvLyAtY3JlYXRlUGx1Z2luU2NyaXB0YWJsZU9iamVj
dCByZXR1cm5zIGEgcmV0YWluZWQgTlBPYmplY3QuICBUaGUgY2FsbGVyIGlzIGV4cGVjdGVkIHRv
IHJlbGVhc2UgaXQuCi0gICAgICAgIF9OUE5fUmVsZWFzZU9iamVjdChucE9iamVjdCk7Ci0gICAg
ICAgIHJldHVybiBpbnN0YW5jZS5yZWxlYXNlKCk7Ci0jZW5kaWYKLSAgICB9Ci0KLSNpZiBFTkFC
TEUoTUFDX0pBVkFfQlJJREdFKQotICAgIGpvYmplY3QgYXBwbGV0ID0gbG9hZGVyKCktPmNsaWVu
dCgpLT5qYXZhQXBwbGV0KHdpZGdldFZpZXcpOwotICAgIGlmICghYXBwbGV0KQotICAgICAgICBy
ZXR1cm4gMDsKLSAgICByZXR1cm4gS0pTOjpCaW5kaW5nczo6SmF2YUluc3RhbmNlOjpjcmVhdGUo
YXBwbGV0LCByb290T2JqZWN0LnJlbGVhc2UoKSk7Ci0jZWxzZQotICAgIHJldHVybiAwOwotI2Vu
ZGlmCi19Ci0KLVdlYlNjcmlwdE9iamVjdCogRnJhbWU6OndpbmRvd1NjcmlwdE9iamVjdCgpCi17
Ci0gICAgaWYgKCFzY3JpcHQoKS0+aXNFbmFibGVkKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0g
ICAgaWYgKCFkLT5tX3dpbmRvd1NjcmlwdE9iamVjdCkgewotICAgICAgICBLSlM6OkpTT2JqZWN0
KiB3aW4gPSB0b0pTRE9NV2luZG93U2hlbGwodGhpcyk7Ci0gICAgICAgIEtKUzo6QmluZGluZ3M6
OlJvb3RPYmplY3QgKnJvb3QgPSBiaW5kaW5nUm9vdE9iamVjdCgpOwotICAgICAgICBkLT5tX3dp
bmRvd1NjcmlwdE9iamVjdCA9IFtXZWJTY3JpcHRPYmplY3Qgc2NyaXB0T2JqZWN0Rm9ySlNPYmpl
Y3Q6dG9SZWYod2luKSBvcmlnaW5Sb290T2JqZWN0OnJvb3Qgcm9vdE9iamVjdDpyb290XTsKLSAg
ICB9Ci0KLSAgICBBU1NFUlQoW2QtPm1fd2luZG93U2NyaXB0T2JqZWN0LmdldCgpIGlzS2luZE9m
Q2xhc3M6W0RPTUFic3RyYWN0VmlldyBjbGFzc11dKTsKLSAgICByZXR1cm4gZC0+bV93aW5kb3dT
Y3JpcHRPYmplY3QuZ2V0KCk7Ci19Ci0KLXZvaWQgRnJhbWU6OmNsZWFyUGxhdGZvcm1TY3JpcHRP
YmplY3RzKCkKLXsKLSAgICBpZiAoZC0+bV93aW5kb3dTY3JpcHRPYmplY3QpIHsKLSAgICAgICAg
S0pTOjpCaW5kaW5nczo6Um9vdE9iamVjdCogcm9vdCA9IGJpbmRpbmdSb290T2JqZWN0KCk7Ci0g
ICAgICAgIFtkLT5tX3dpbmRvd1NjcmlwdE9iamVjdC5nZXQoKSBfc2V0T3JpZ2luUm9vdE9iamVj
dDpyb290IGFuZFJvb3RPYmplY3Q6cm9vdF07Ci0gICAgfQotfQotCi12b2lkIEZyYW1lOjpkaXNj
b25uZWN0UGxhdGZvcm1TY3JpcHRPYmplY3RzKCkKLXsKLSAgICBpZiAoZC0+bV93aW5kb3dTY3Jp
cHRPYmplY3QpIHsKLSAgICAgICAgQVNTRVJUKFtkLT5tX3dpbmRvd1NjcmlwdE9iamVjdC5nZXQo
KSBpc0tpbmRPZkNsYXNzOltET01BYnN0cmFjdFZpZXcgY2xhc3NdXSk7Ci0gICAgICAgIFsoRE9N
QWJzdHJhY3RWaWV3ICopZC0+bV93aW5kb3dTY3JpcHRPYmplY3QuZ2V0KCkgX2Rpc2Nvbm5lY3RG
cmFtZV07Ci0gICAgfQotfQotCiB2b2lkIEZyYW1lOjpzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9u
KGNvbnN0IEtVUkwmIHVybCkKIHsKICAgICBkZWxldGUgZC0+bV91c2VyU3R5bGVTaGVldExvYWRl
cjsKQEAgLTU5MywzOCArNTIwLDQgQEAgdm9pZCBGcmFtZTo6c2V0VXNlclN0eWxlU2hlZXQoY29u
c3QgU3RyaW5nJiBzdHlsZVNoZWV0KQogICAgICAgICBkLT5tX2RvYy0+c2V0VXNlclN0eWxlU2hl
ZXQoc3R5bGVTaGVldCk7CiB9CiAKLSNpZiBFTkFCTEUoTUFDX0pBVkFfQlJJREdFKQotc3RhdGlj
IHB0aHJlYWRfdCBtYWluVGhyZWFkOwotCi1zdGF0aWMgdm9pZCB1cGRhdGVSZW5kZXJpbmdGb3JC
aW5kaW5ncyhLSlM6OkV4ZWNTdGF0ZSogZXhlYywgS0pTOjpKU09iamVjdCogcm9vdE9iamVjdCkK
LXsKLSAgICBpZiAocHRocmVhZF9zZWxmKCkgIT0gbWFpblRocmVhZCkKLSAgICAgICAgcmV0dXJu
OwotICAgICAgICAKLSAgICBpZiAoIXJvb3RPYmplY3QpCi0gICAgICAgIHJldHVybjsKLSAgICAg
ICAgCi0gICAgSlNET01XaW5kb3cqIHdpbmRvdyA9IHN0YXRpY19jYXN0PEpTRE9NV2luZG93Kj4o
cm9vdE9iamVjdCk7Ci0gICAgaWYgKCF3aW5kb3cpCi0gICAgICAgIHJldHVybjsKLQotICAgIEZy
YW1lKiBmcmFtZSA9IHdpbmRvdy0+aW1wbCgpLT5mcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVu
dCgpOwotICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGRvY3VtZW50
LT51cGRhdGVSZW5kZXJpbmcoKTsKLX0KLQotdm9pZCBGcmFtZTo6aW5pdEphdmFKU0JpbmRpbmdz
KCkKLXsKLSAgICBtYWluVGhyZWFkID0gcHRocmVhZF9zZWxmKCk7Ci0gICAgS0pTOjpCaW5kaW5n
czo6SmF2YUpTT2JqZWN0Ojppbml0aWFsaXplSk5JVGhyZWFkaW5nKCk7Ci0gICAgS0pTOjpCaW5k
aW5nczo6SW5zdGFuY2U6OnNldERpZEV4ZWN1dGVGdW5jdGlvbih1cGRhdGVSZW5kZXJpbmdGb3JC
aW5kaW5ncyk7Ci19Ci0jZW5kaWYKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wYWdlL3F0L0ZyYW1lUXQuY3BwIGIvV2ViQ29yZS9wYWdlL3F0L0ZyYW1lUXQu
Y3BwCmluZGV4IDk1NjI1MzAuLjU2MGZkNWIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9xdC9G
cmFtZVF0LmNwcAorKysgYi9XZWJDb3JlL3BhZ2UvcXQvRnJhbWVRdC5jcHAKQEAgLTEsMTUgKzEs
NCBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2Rl
Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+Ci0g
KiBDb3B5cmlnaHQgKEMpIDIwMDYgR2VvcmdlIFN0YWlrb3MgPHN0YWlrb3NAa2RlLm9yZz4KLSAq
IENvcHlyaWdodCAoQykgMjAwNiBTaW1vbiBIYXVzbWFubiA8aGF1c21hbm5Aa2RlLm9yZz4KLSAq
IENvcHlyaWdodCAoQykgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgotICogQ29weXJpZ2h0
IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotICogQ29w
eXJpZ2h0IChDKSAyMDA3IFRyb2xsdGVjaCBBU0EKLSAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xs
YWJvcmEgTHRkLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiAgKiBhcmUgbWV0OgpAQCAtMzUs
OTMgKzI0LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogCi0j
aW5jbHVkZSAiUGx1Z2luVmlldy5oIgotCi0jaW5jbHVkZSAiRWxlbWVudC5oIgotI2luY2x1ZGUg
IlJlbmRlck9iamVjdC5oIgotI2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgotI2luY2x1ZGUgIlJl
bmRlckxheWVyLmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0j
aW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKLSNpbmNsdWRlICJET01XaW5kb3cuaCIKLSNpbmNsdWRl
ICJGcmFtZUxvYWRSZXF1ZXN0LmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnRRdC5oIgot
I2luY2x1ZGUgIkRPTUltcGxlbWVudGF0aW9uLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVJ
bnRlcm5hbC5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiU2V0dGluZ3MuaCIK
LSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJGcmFtZVByaXZhdGUuaCIKLSNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKLSNpbmNs
dWRlICJSZXNvdXJjZUhhbmRsZS5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCi0jaW5jbHVk
ZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50
LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCi0jaW5jbHVkZSAiTW91c2VFdmVu
dFdpdGhIaXRUZXN0UmVzdWx0cy5oIgotI2luY2x1ZGUgIlNlbGVjdGlvbkNvbnRyb2xsZXIuaCIK
LSNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiVHlwaW5nQ29tbWFuZC5o
IgotI2luY2x1ZGUgInF0X2luc3RhbmNlLmgiCi0jaW5jbHVkZSAicnVudGltZV9yb290LmgiCi0j
aW5jbHVkZSAicnVudGltZS5oIgotI2luY2x1ZGUgIkpTRE9NV2luZG93LmgiCi0jaW5jbHVkZSA8
UVNjcm9sbEFyZWE+Ci0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLQogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi0vLyBGSVhNRTogVHVybmVkIHRoaXMgb2ZmIHRvIGZpeCBidWlsZGJvdC4gVGhp
cyBmdW5jdGlvbiBiZSBlaXRoZXIgZGVsZXRlZCBvciB1c2VkLgotI2lmIDAKLXN0YXRpYyB2b2lk
IGRvU2Nyb2xsKGNvbnN0IFJlbmRlck9iamVjdCogciwgYm9vbCBpc0hvcml6b250YWwsIGludCBt
dWx0aXBsaWVyKQotewotICAgIC8vIEZJWE1FOiBUaGUgc2Nyb2xsaW5nIGRvbmUgaGVyZSBzaG91
bGQgYmUgZG9uZSBpbiB0aGUgZGVmYXVsdCBoYW5kbGVycwotICAgIC8vIG9mIHRoZSBlbGVtZW50
cyByYXRoZXIgdGhhbiBoZXJlIGluIHRoZSBwYXJ0LgotICAgIGlmICghcikKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgLy9icm9rZW4gc2luY2UgaXQgY2FsbHMgc2Nyb2xsIG9uIHNjcm9sbGJhcnMK
LSAgICAvL2FuZCB3ZSBoYXZlIG5vbmUgbm93Ci0gICAgLy9yLT5zY3JvbGwoZGlyZWN0aW9uLCBL
V1FTY3JvbGxXaGVlbCwgbXVsdGlwbGllcik7Ci0gICAgaWYgKCFyLT5sYXllcigpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpbnQgeCA9IHItPmxheWVyKCktPnNjcm9sbFhPZmZzZXQoKTsKLSAg
ICBpbnQgeSA9IHItPmxheWVyKCktPnNjcm9sbFlPZmZzZXQoKTsKLSAgICBpZiAoaXNIb3Jpem9u
dGFsKQotICAgICAgICB4ICs9IG11bHRpcGxpZXI7Ci0gICAgZWxzZQotICAgICAgICB5ICs9IG11
bHRpcGxpZXI7Ci0KLSAgICByLT5sYXllcigpLT5zY3JvbGxUb09mZnNldCh4LCB5LCB0cnVlLCB0
cnVlKTsKLX0KLSNlbmRpZgotCi1QYXNzUmVmUHRyPEtKUzo6QmluZGluZ3M6Okluc3RhbmNlPiBG
cmFtZTo6Y3JlYXRlU2NyaXB0SW5zdGFuY2VGb3JXaWRnZXQoV2ViQ29yZTo6V2lkZ2V0KiB3aWRn
ZXQpCi17Ci0gICAgaWYgKHdpZGdldC0+aXNGcmFtZVZpZXcoKSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgaWYgKHdpZGdldC0+aXNOUEFQSVBsdWdpbigpKQotICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8UGx1Z2luVmlldyo+KHdpZGdldCktPmJpbmRpbmdJbnN0YW5jZSgpOwotCi0gICAgUVdp
ZGdldCogbmF0aXZlV2lkZ2V0ID0gd2lkZ2V0LT5uYXRpdmVXaWRnZXQoKTsKLSAgICBpZiAoIW5h
dGl2ZVdpZGdldCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIEtKUzo6QmluZGluZ3M6
OlF0SW5zdGFuY2U6OmNyZWF0ZShuYXRpdmVXaWRnZXQsIGJpbmRpbmdSb290T2JqZWN0KCkpOwot
fQotCi12b2lkIEZyYW1lOjpjbGVhclBsYXRmb3JtU2NyaXB0T2JqZWN0cygpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZTo6ZGlzY29ubmVjdFBsYXRmb3JtU2NyaXB0
T2JqZWN0cygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQogRHJhZ0ltYWdlUmVmIEZy
YW1lOjpkcmFnSW1hZ2VGb3JTZWxlY3Rpb24oKSAKIHsKICAgICByZXR1cm4gMDsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGFnZS93aW4vRnJhbWVXaW4uY3BwIGIvV2ViQ29yZS9wYWdlL3dpbi9GcmFt
ZVdpbi5jcHAKaW5kZXggOTU1MTY4MC4uYjIwNDFlOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdl
L3dpbi9GcmFtZVdpbi5jcHAKKysrIGIvV2ViQ29yZS9wYWdlL3dpbi9GcmFtZVdpbi5jcHAKQEAg
LTI3LDY0ICsyNywyMCBAQAogI2luY2x1ZGUgInJ1bnRpbWUuaCIKICNpbmNsdWRlICJGcmFtZVdp
bi5oIgogCi0jaW5jbHVkZSA8d2luc29jazIuaD4KLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0KICNp
bmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNs
dWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkVkaXRvckNsaWVudC5oIgotI2luY2x1ZGUgIkZy
YW1lTG9hZGVyLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVzdC5oIgogI2luY2x1ZGUgIkZy
YW1lUHJpdmF0ZS5oIgotI2luY2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUgIkhUTUxJRnJh
bWVFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiSFRNTFRhYmxl
Q2VsbEVsZW1lbnQuaCIKLSNpbmNsdWRlICJKU0RPTVdpbmRvdy5oIgotI2luY2x1ZGUgIktleWJv
YXJkRXZlbnQuaCIKLSNpbmNsdWRlICJOUF9qc29iamVjdC5oIgotI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgi
Ci0jaW5jbHVkZSAiUGx1Z2luVmlldy5oIgotI2luY2x1ZGUgIlJlZ3VsYXJFeHByZXNzaW9uLmgi
Ci0jaW5jbHVkZSAiUmVuZGVyRnJhbWUuaCIKLSNpbmNsdWRlICJSZW5kZXJUYWJsZUNlbGwuaCIK
ICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKLSNp
bmNsdWRlICJUZXh0UmVzb3VyY2VEZWNvZGVyLmgiCi0jaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxl
ci5oIgotI2luY2x1ZGUgIm5wcnVudGltZV9pbXBsLmgiCi0jaW5jbHVkZSAicnVudGltZV9yb290
LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIK
IAogdXNpbmcgc3RkOjptaW47Ci11c2luZyBuYW1lc3BhY2UgS0pTOjpCaW5kaW5nczsKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi12b2lkIEZy
YW1lOjpjbGVhclBsYXRmb3JtU2NyaXB0T2JqZWN0cygpCi17Ci19Ci0KLXZvaWQgRnJhbWU6OmRp
c2Nvbm5lY3RQbGF0Zm9ybVNjcmlwdE9iamVjdHMoKQotewotfQotCi1QYXNzUmVmUHRyPEtKUzo6
QmluZGluZ3M6Okluc3RhbmNlPiBGcmFtZTo6Y3JlYXRlU2NyaXB0SW5zdGFuY2VGb3JXaWRnZXQo
V2lkZ2V0KiB3aWRnZXQpCi17Ci0gICAgLy8gRklYTUU6IElkZWFsbHkgd2UnZCBoYXZlIGFuIGlz
UGx1Z2luVmlldygpIGhlcmUgYnV0IHdlIGNhbid0IGFkZCB0aGF0IHRvIHRoZSBvcGVuIHNvdXJj
ZSB0cmVlIHJpZ2h0IG5vdy4KLSAgICBpZiAod2lkZ2V0LT5pc0ZyYW1lVmlldygpKQotICAgICAg
ICByZXR1cm4gMDsKLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3Kj4od2lkZ2V0
KS0+YmluZGluZ0luc3RhbmNlKCk7Ci19Ci0KLXZvaWQgY29tcHV0ZVBhZ2VSZWN0c0ZvckZyYW1l
KEZyYW1lKiBmcmFtZSwgY29uc3QgSW50UmVjdCYgcHJpbnRSZWN0LCBmbG9hdCBoZWFkZXJIZWln
aHQsIGZsb2F0IGZvb3RlckhlaWdodCwgZmxvYXQgdXNlclNjYWxlRmFjdG9yLFZlY3RvcjxJbnRS
ZWN0PiYgcGFnZXMsIGludCYgb3V0UGFnZUhlaWdodCkKK3ZvaWQgY29tcHV0ZVBhZ2VSZWN0c0Zv
ckZyYW1lKEZyYW1lKiBmcmFtZSwgY29uc3QgSW50UmVjdCYgcHJpbnRSZWN0LCBmbG9hdCBoZWFk
ZXJIZWlnaHQsIGZsb2F0IGZvb3RlckhlaWdodCwgZmxvYXQgdXNlclNjYWxlRmFjdG9yLCBWZWN0
b3I8SW50UmVjdD4mIHBhZ2VzLCBpbnQmIG91dFBhZ2VIZWlnaHQpCiB7CiAgICAgQVNTRVJUKGZy
YW1lKTsKIApAQCAtOTQsNyArNTAsNyBAQCB2b2lkIGNvbXB1dGVQYWdlUmVjdHNGb3JGcmFtZShG
cmFtZSogZnJhbWUsIGNvbnN0IEludFJlY3QmIHByaW50UmVjdCwgZmxvYXQgaGVhZAogICAgIGlm
ICghZnJhbWUtPmRvY3VtZW50KCkgfHwgIWZyYW1lLT52aWV3KCkgfHwgIWZyYW1lLT5kb2N1bWVu
dCgpLT5yZW5kZXJlcigpKQogICAgICAgICByZXR1cm47CiAgCi0gICAgUmVuZGVyVmlldyogcm9v
dCA9IHN0YXRpY19jYXN0PFJlbmRlclZpZXcgKj4oZnJhbWUtPmRvY3VtZW50KCktPnJlbmRlcmVy
KCkpOworICAgIFJlbmRlclZpZXcqIHJvb3QgPSBzdGF0aWNfY2FzdDxSZW5kZXJWaWV3Kj4oZnJh
bWUtPmRvY3VtZW50KCktPnJlbmRlcmVyKCkpOwogCiAgICAgaWYgKCFyb290KSB7CiAgICAgICAg
IExPR19FUlJPUigiZG9jdW1lbnQgdG8gYmUgcHJpbnRlZCBoYXMgbm8gcmVuZGVyZXIiKTsKZGlm
ZiAtLWdpdCBhL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3Lm1t
IGIvV2ViS2l0L21hYy9QbHVnaW5zL1dlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcubW0KaW5kZXgg
MmI0NWUyYi4uYWZiNzZhNCAxMDA2NDQKLS0tIGEvV2ViS2l0L21hYy9QbHVnaW5zL1dlYkJhc2VO
ZXRzY2FwZVBsdWdpblZpZXcubW0KKysrIGIvV2ViS2l0L21hYy9QbHVnaW5zL1dlYkJhc2VOZXRz
Y2FwZVBsdWdpblZpZXcubW0KQEAgLTYxLDYgKzYxLDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvRnJh
bWVUcmVlLmg+IAogI2ltcG9ydCA8V2ViQ29yZS9QYWdlLmg+IAogI2ltcG9ydCA8V2ViQ29yZS9Q
bHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL1NjcmlwdENvbnRy
b2xsZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvU29mdExpbmtpbmcuaD4gCiAjaW1wb3J0IDxXZWJD
b3JlL1dlYkNvcmVPYmpDRXh0cmFzLmg+CiAjaW1wb3J0IDxXZWJLaXQvbnB0ZXh0aW5wdXQuaD4K
QEAgLTI1NDgsNyArMjU0OSw3IEBAIHN0YXRpYyBOUEJyb3dzZXJUZXh0SW5wdXRGdW5jcyAqYnJv
d3NlclRleHRJbnB1dEZ1bmNzKCkKICAgICAgICAgY2FzZSBOUE5WV2luZG93TlBPYmplY3Q6CiAg
ICAgICAgIHsKICAgICAgICAgICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoW3NlbGYgd2ViRnJhbWVd
KTsKLSAgICAgICAgICAgIE5QT2JqZWN0KiB3aW5kb3dTY3JpcHRPYmplY3QgPSBmcmFtZSA/IGZy
YW1lLT53aW5kb3dTY3JpcHROUE9iamVjdCgpIDogMDsKKyAgICAgICAgICAgIE5QT2JqZWN0KiB3
aW5kb3dTY3JpcHRPYmplY3QgPSBmcmFtZSA/IGZyYW1lLT5zY3JpcHQoKS0+d2luZG93U2NyaXB0
TlBPYmplY3QoKSA6IDA7CiAKICAgICAgICAgICAgIC8vIFJldHVybiB2YWx1ZSBpcyBleHBlY3Rl
ZCB0byBiZSByZXRhaW5lZCwgYXMgZGVzY3JpYmVkIGhlcmU6IDxodHRwOi8vd3d3Lm1vemlsbGEu
b3JnL3Byb2plY3RzL3BsdWdpbnMvbnBydW50aW1lLmh0bWwjYnJvd3NlcmFjY2Vzcz4KICAgICAg
ICAgICAgIGlmICh3aW5kb3dTY3JpcHRPYmplY3QpCkBAIC0yODQ2LDcgKzI4NDcsNyBAQCBzdGF0
aWMgTlBCcm93c2VyVGV4dElucHV0RnVuY3MgKmJyb3dzZXJUZXh0SW5wdXRGdW5jcygpCiAgICAg
TE9HKFBsdWdpbnMsICJOUFBfRGVzdHJveTogJWQiLCBucEVycik7CiAgICAgCiAgICAgaWYgKEZy
YW1lKiBmcmFtZSA9IGNvcmUoW3NlbGYgd2ViRnJhbWVdKSkKLSAgICAgICAgZnJhbWUtPmNsZWFu
dXBTY3JpcHRPYmplY3RzRm9yUGx1Z2luKHNlbGYpOworICAgICAgICBmcmFtZS0+c2NyaXB0KCkt
PmNsZWFudXBTY3JpcHRPYmplY3RzRm9yUGx1Z2luKHNlbGYpOwogICAgICAgICAKICAgICBmcmVl
KHBsdWdpbik7CiAgICAgcGx1Z2luID0gTlVMTDsKZGlmZiAtLWdpdCBhL1dlYktpdC9tYWMvUGx1
Z2lucy9XZWJQbHVnaW5Db250cm9sbGVyLm1tIGIvV2ViS2l0L21hYy9QbHVnaW5zL1dlYlBsdWdp
bkNvbnRyb2xsZXIubW0KaW5kZXggYzZiNzAxNS4uMGE4NmE1YiAxMDA2NDQKLS0tIGEvV2ViS2l0
L21hYy9QbHVnaW5zL1dlYlBsdWdpbkNvbnRyb2xsZXIubW0KKysrIGIvV2ViS2l0L21hYy9QbHVn
aW5zL1dlYlBsdWdpbkNvbnRyb2xsZXIubW0KQEAgLTM1LDYgKzM1LDcgQEAKICNpbXBvcnQgPFdl
YkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtU3RyaW5n
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0RvY3VtZW50TG9hZGVyLmg+CisjaW1wb3J0IDxXZWJDb3Jl
L1NjcmlwdENvbnRyb2xsZXIuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJEYXRhU291cmNlSW50ZXJu
YWwuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJGcmFtZUludGVybmFsLmg+CiAjaW1wb3J0IDxXZWJL
aXQvV2ViRnJhbWVWaWV3Lmg+CkBAIC0yMDksNyArMjEwLDcgQEAgc3RhdGljIE5TTXV0YWJsZVNl
dCAqcGx1Z2luVmlld3MgPSBuaWw7CiAgICAgICAgICAgICBbdmlldyBwbHVnaW5EZXN0cm95XTsK
ICAgICAgICAgCiAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBjb3JlKFtzZWxmIHdlYkZyYW1l
XSkpCi0gICAgICAgICAgICBmcmFtZS0+Y2xlYW51cFNjcmlwdE9iamVjdHNGb3JQbHVnaW4oc2Vs
Zik7CisgICAgICAgICAgICBmcmFtZS0+c2NyaXB0KCktPmNsZWFudXBTY3JpcHRPYmplY3RzRm9y
UGx1Z2luKHNlbGYpOwogICAgICAgICAKICAgICAgICAgW3BsdWdpblZpZXdzIHJlbW92ZU9iamVj
dDp2aWV3XTsKICAgICAgICAgW1tfZG9jdW1lbnRWaWV3IF93ZWJWaWV3XSByZW1vdmVQbHVnaW5J
bnN0YW5jZVZpZXc6dmlld107CkBAIC0yNTYsNyArMjU3LDcgQEAgc3RhdGljIHZvaWQgY2FuY2Vs
T3V0c3RhbmRpbmdDaGVjayhjb25zdCB2b2lkICppdGVtLCB2b2lkICpjb250ZXh0KQogICAgICAg
ICAgICAgW2FWaWV3IHBsdWdpbkRlc3Ryb3ldOwogICAgICAgICAKICAgICAgICAgaWYgKEZyYW1l
KiBmcmFtZSA9IGNvcmUoW3NlbGYgd2ViRnJhbWVdKSkKLSAgICAgICAgICAgIGZyYW1lLT5jbGVh
bnVwU2NyaXB0T2JqZWN0c0ZvclBsdWdpbihzZWxmKTsKKyAgICAgICAgICAgIGZyYW1lLT5zY3Jp
cHQoKS0+Y2xlYW51cFNjcmlwdE9iamVjdHNGb3JQbHVnaW4oc2VsZik7CiAgICAgICAgIAogICAg
ICAgICBbcGx1Z2luVmlld3MgcmVtb3ZlT2JqZWN0OmFWaWV3XTsKICAgICAgICAgW1tfZG9jdW1l
bnRWaWV3IF93ZWJWaWV3XSByZW1vdmVQbHVnaW5JbnN0YW5jZVZpZXc6YVZpZXddOwpkaWZmIC0t
Z2l0IGEvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5tbSBi
L1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW0KaW5kZXgg
NjUxZjAwNi4uZTIxYzEwNCAxMDA2NDQKLS0tIGEvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9X
ZWJGcmFtZUxvYWRlckNsaWVudC5tbQorKysgYi9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dl
YkZyYW1lTG9hZGVyQ2xpZW50Lm1tCkBAIC05OCw2ICs5OCw3IEBACiAjaW1wb3J0IDxXZWJDb3Jl
L1Jlc291cmNlSGFuZGxlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Jlc291cmNlTG9hZGVyLmg+CiAj
aW1wb3J0IDxXZWJDb3JlL1Jlc291cmNlUmVxdWVzdC5oPgorI2ltcG9ydCA8V2ViQ29yZS9TY3Jp
cHRDb250cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgogI2ltcG9y
dCA8V2ViQ29yZS9XZWJDb3JlT2JqQ0V4dHJhcy5oPgogI2ltcG9ydCA8V2ViQ29yZS9XaWRnZXQu
aD4KQEAgLTE0NDYsMTQgKzE0NDcsMTUgQEAgU3RyaW5nIFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojpv
dmVycmlkZU1lZGlhVHlwZSgpIGNvbnN0CiB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojp3aW5k
b3dPYmplY3RDbGVhcmVkKCkKIHsKICAgICBGcmFtZSAqZnJhbWUgPSBjb3JlKG1fd2ViRnJhbWUu
Z2V0KCkpOworICAgIFNjcmlwdENvbnRyb2xsZXIgKnNjcmlwdCA9IGZyYW1lLT5zY3JpcHQoKTsK
ICAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gZ2V0V2ViVmlldyhtX3dlYkZyYW1lLmdldCgpKTsKICAg
ICBXZWJGcmFtZUxvYWREZWxlZ2F0ZUltcGxlbWVudGF0aW9uQ2FjaGUqIGltcGxlbWVudGF0aW9u
cyA9IFdlYlZpZXdHZXRGcmFtZUxvYWREZWxlZ2F0ZUltcGxlbWVudGF0aW9ucyh3ZWJWaWV3KTsK
ICAgICBpZiAoaW1wbGVtZW50YXRpb25zLT5kaWRDbGVhcldpbmRvd09iamVjdEZvckZyYW1lRnVu
YykgewogICAgICAgICBDYWxsRnJhbWVMb2FkRGVsZWdhdGUoaW1wbGVtZW50YXRpb25zLT5kaWRD
bGVhcldpbmRvd09iamVjdEZvckZyYW1lRnVuYywgd2ViVmlldywgQHNlbGVjdG9yKHdlYlZpZXc6
ZGlkQ2xlYXJXaW5kb3dPYmplY3Q6Zm9yRnJhbWU6KSwKLSAgICAgICAgICAgIGZyYW1lLT53aW5k
b3dTY3JpcHRPYmplY3QoKSwgbV93ZWJGcmFtZS5nZXQoKSk7CisgICAgICAgICAgICBzY3JpcHQt
PndpbmRvd1NjcmlwdE9iamVjdCgpLCBtX3dlYkZyYW1lLmdldCgpKTsKICAgICB9IGVsc2UgaWYg
KGltcGxlbWVudGF0aW9ucy0+d2luZG93U2NyaXB0T2JqZWN0QXZhaWxhYmxlRnVuYykgewogICAg
ICAgICBDYWxsRnJhbWVMb2FkRGVsZWdhdGUoaW1wbGVtZW50YXRpb25zLT53aW5kb3dTY3JpcHRP
YmplY3RBdmFpbGFibGVGdW5jLCB3ZWJWaWV3LCBAc2VsZWN0b3Iod2ViVmlldzp3aW5kb3dTY3Jp
cHRPYmplY3RBdmFpbGFibGU6KSwKLSAgICAgICAgICAgIGZyYW1lLT53aW5kb3dTY3JpcHRPYmpl
Y3QoKSk7CisgICAgICAgICAgICBzY3JpcHQtPndpbmRvd1NjcmlwdE9iamVjdCgpKTsKICAgICB9
CiAKICAgICBpZiAoW3dlYlZpZXcgc2NyaXB0RGVidWdEZWxlZ2F0ZV0pIHsKZGlmZiAtLWdpdCBh
L1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbSBiL1dlYktpdC9tYWMvV2ViVmlldy9XZWJG
cmFtZS5tbQppbmRleCA0ZjVhNjRmLi40MmE3NDkxIDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViRnJhbWUubW0KKysrIGIvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCkBA
IC0xMzA4LDcgKzEzMDgsNyBAQCBzdGF0aWMgTlNVUkwgKmNyZWF0ZVVuaXF1ZVdlYkRhdGFVUkwo
KQogICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lOwogICAgIGlmICgh
Y29yZUZyYW1lKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gY29yZUZyYW1lLT53aW5k
b3dTY3JpcHRPYmplY3QoKTsKKyAgICByZXR1cm4gY29yZUZyYW1lLT5zY3JpcHQoKS0+d2luZG93
U2NyaXB0T2JqZWN0KCk7CiB9CiAKIC0gKEpTR2xvYmFsQ29udGV4dFJlZilnbG9iYWxDb250ZXh0
CmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViU2NyaXB0RGVidWdnZXIubW0gYi9X
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViU2NyaXB0RGVidWdnZXIubW0KaW5kZXggYzkxNTcxMy4uM2Rm
OTVmMyAxMDA2NDQKLS0tIGEvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVnZ2VyLm1t
CisrKyBiL1dlYktpdC9tYWMvV2ViVmlldy9XZWJTY3JpcHREZWJ1Z2dlci5tbQpAQCAtMjYsMTcg
KzI2LDE4IEBACiAgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpbmNsdWRlICJXZWJTY3JpcHREZWJ1Z2dl
ci5oIgotCi0jaW5jbHVkZSAiV2ViRnJhbWVJbnRlcm5hbC5oIgotI2luY2x1ZGUgIldlYlZpZXdJ
bnRlcm5hbC5oIgotI2luY2x1ZGUgIldlYlNjcmlwdERlYnVnRGVsZWdhdGUuaCIKLSNpbmNsdWRl
IDxranMvSlNHbG9iYWxPYmplY3QuaD4KLSNpbmNsdWRlIDxranMvRGVidWdnZXJDYWxsRnJhbWUu
aD4KLSNpbmNsdWRlIDxXZWJDb3JlL0RPTVdpbmRvdy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRnJh
bWUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0pTRE9NV2luZG93Lmg+Ci0jaW5jbHVkZSA8V2ViQ29y
ZS9LVVJMLmg+CisjaW1wb3J0ICJXZWJTY3JpcHREZWJ1Z2dlci5oIgorCisjaW1wb3J0ICJXZWJG
cmFtZUludGVybmFsLmgiCisjaW1wb3J0ICJXZWJWaWV3SW50ZXJuYWwuaCIKKyNpbXBvcnQgIldl
YlNjcmlwdERlYnVnRGVsZWdhdGUuaCIKKyNpbXBvcnQgPGtqcy9KU0dsb2JhbE9iamVjdC5oPgor
I2ltcG9ydCA8a2pzL0RlYnVnZ2VyQ2FsbEZyYW1lLmg+CisjaW1wb3J0IDxXZWJDb3JlL0RPTVdp
bmRvdy5oPgorI2ltcG9ydCA8V2ViQ29yZS9GcmFtZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9KU0RP
TVdpbmRvdy5oPgorI2ltcG9ydCA8V2ViQ29yZS9LVVJMLmg+CisjaW1wb3J0IDxXZWJDb3JlL1Nj
cmlwdENvbnRyb2xsZXIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEtKUzsKIHVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwpAQCAtMTIwLDcgKzEyMSw3IEBAIHZvaWQgV2ViU2NyaXB0RGVidWdnZXI6OmNh
bGxFdmVudChjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYgZGVidWdnZXJDYWxsRnJhbWUsIGluCiAK
ICAgICBXZWJGcmFtZSAqd2ViRnJhbWUgPSB0b1dlYkZyYW1lKGRlYnVnZ2VyQ2FsbEZyYW1lLmR5
bmFtaWNHbG9iYWxPYmplY3QoKSk7CiAKLSAgICBtX3RvcENhbGxGcmFtZS5hZG9wdE5TKFtbV2Vi
U2NyaXB0Q2FsbEZyYW1lIGFsbG9jXSBfaW5pdFdpdGhHbG9iYWxPYmplY3Q6Y29yZSh3ZWJGcmFt
ZSktPndpbmRvd1NjcmlwdE9iamVjdCgpIGNhbGxlcjptX3RvcENhbGxGcmFtZS5nZXQoKSBkZWJ1
Z2dlckNhbGxGcmFtZTpkZWJ1Z2dlckNhbGxGcmFtZV0pOworICAgIG1fdG9wQ2FsbEZyYW1lLmFk
b3B0TlMoW1tXZWJTY3JpcHRDYWxsRnJhbWUgYWxsb2NdIF9pbml0V2l0aEdsb2JhbE9iamVjdDpj
b3JlKHdlYkZyYW1lKS0+c2NyaXB0KCktPndpbmRvd1NjcmlwdE9iamVjdCgpIGNhbGxlcjptX3Rv
cENhbGxGcmFtZS5nZXQoKSBkZWJ1Z2dlckNhbGxGcmFtZTpkZWJ1Z2dlckNhbGxGcmFtZV0pOwog
CiAgICAgV2ViVmlldyAqd2ViVmlldyA9IFt3ZWJGcmFtZSB3ZWJWaWV3XTsKICAgICBbW3dlYlZp
ZXcgX3NjcmlwdERlYnVnRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6d2ViVmlldyBkaWRFbnRl
ckNhbGxGcmFtZTptX3RvcENhbGxGcmFtZS5nZXQoKSBzb3VyY2VJZDpzb3VyY2VJRCBsaW5lOmxp
bmVOdW1iZXIgZm9yV2ViRnJhbWU6d2ViRnJhbWVdOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYlZpZXcubW0gYi9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQppbmRleCBm
NWQ5NDg2Li5iOGI5YWFjIDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5t
bQorKysgYi9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQpAQCAtMjUxNSw3ICsyNTE1LDcg
QEAgc3RhdGljIHZvaWQgV2ViS2l0SW5pdGlhbGl6ZUFwcGxpY2F0aW9uQ2FjaGVQYXRoSWZOZWNl
c3NhcnkoKQogICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIG1haW5GcmFtZV0pOwog
ICAgIGlmICghY29yZUZyYW1lKQogICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiBjb3Jl
RnJhbWUtPndpbmRvd1NjcmlwdE9iamVjdCgpOworICAgIHJldHVybiBjb3JlRnJhbWUtPnNjcmlw
dCgpLT53aW5kb3dTY3JpcHRPYmplY3QoKTsKIH0KIAogLy8gR2V0IHRoZSBhcHByb3ByaWF0ZSB1
c2VyLWFnZW50IHN0cmluZyBmb3IgYSBwYXJ0aWN1bGFyIFVSTC4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22673</attachid>
            <date>2008-08-06 01:20:57 -0700</date>
            <delta_ts>2008-08-06 02:45:37 -0700</delta_ts>
            <desc>Move more methods from Frame into ScriptController</desc>
            <filename>Move-more-methods-from-Frame-into-ScriptController.patch</filename>
            <type>text/plain</type>
            <size>76312</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">YjllZDZmZDhmYzc2ZjIwNjExZGZhYzg5ZjdiYzYyY2UyN2ZhNTI4MQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5hbSBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggNTM0Yzc5
My4uNTc5YmNhMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9XZWJD
b3JlL0dOVW1ha2VmaWxlLmFtCkBAIC0xMDUwLDYgKzEwNTAsNyBAQCB3ZWJjb3JlX3NvdXJjZXMg
Kz0gXAogCVdlYkNvcmUveG1sL1hNTFNlcmlhbGl6ZXIuY3BwCiAKIHdlYmNvcmVndGtfc291cmNl
cyArPSBcCisJV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyR3RrLmNwcCBcCiAJ
V2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5EYXRhR3RrLmNwcCBcCiAJV2ViQ29yZS9wbHVnaW5z
L2d0ay9QbHVnaW5QYWNrYWdlR3RrLmNwcCBcCiAJV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5W
aWV3R3RrLmNwcApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLk5QQVBJLmV4cCBiL1dlYkNv
cmUvV2ViQ29yZS5OUEFQSS5leHAKaW5kZXggYjFjZTQ0Mi4uZmQxNWM1MSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9XZWJDb3JlLk5QQVBJLmV4cAorKysgYi9XZWJDb3JlL1dlYkNvcmUuTlBBUEkuZXhw
CkBAIC0xNiw0ICsxNiw1IEBAIF9fTlBOX1JldGFpbk9iamVjdAogX19OUE5fU2V0RXhjZXB0aW9u
CiBfX05QTl9TZXRQcm9wZXJ0eQogX19OUE5fVVRGOEZyb21JZGVudGlmaWVyCi1fX1pON1dlYkNv
cmU1RnJhbWUyMHdpbmRvd1NjcmlwdE5QT2JqZWN0RXYKK19fWk43V2ViQ29yZTE2U2NyaXB0Q29u
dHJvbGxlcjIwd2luZG93U2NyaXB0TlBPYmplY3RFdgorX19aTjdXZWJDb3JlMTZTY3JpcHRDb250
cm9sbGVyMjljbGVhbnVwU2NyaXB0T2JqZWN0c0ZvclBsdWdpbkVQdgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9XZWJDb3JlLmJhc2UuZXhwIGIvV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCmluZGV4IGQz
YTM2NmMuLjhkYmI2ZWIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAorKysg
Yi9XZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAKQEAgLTE2Nyw3ICsxNjcsNiBAQCBfX1pON1dlYkNv
cmUxMUZyYW1lTG9hZGVyNGxvYWRFUE5TXzE0RG9jdW1lbnRMb2FkZXJFCiBfX1pON1dlYkNvcmUx
MUZyYW1lTG9hZGVyNGxvYWRFUktOU18xNVJlc291cmNlUmVxdWVzdEUKIF9fWk43V2ViQ29yZTEx
RnJhbWVMb2FkZXI0bG9hZEVSS05TXzE1UmVzb3VyY2VSZXF1ZXN0RVJLTlNfMTRTdWJzdGl0dXRl
RGF0YUUKIF9fWk43V2ViQ29yZTExRnJhbWVMb2FkZXI0bG9hZEVSS05TXzE1UmVzb3VyY2VSZXF1
ZXN0RVJLTlNfNlN0cmluZ0UKLV9fWk43V2ViQ29yZTExRnJhbWVMb2FkZXI1Y2xlYXJFYmIKIF9f
Wk43V2ViQ29yZTExRnJhbWVMb2FkZXI2cmVsb2FkRXYKIF9fWk43V2ViQ29yZTExRnJhbWVMb2Fk
ZXI3YWRkRGF0YUVQS2NpCiBfX1pON1dlYkNvcmUxMUZyYW1lTG9hZGVyN2NhbkxvYWRFUktOU180
S1VSTEVSS05TXzZTdHJpbmdFUEtOU184RG9jdW1lbnRFCkBAIC0zNjIsNiArMzYxLDcgQEAgX19a
TjdXZWJDb3JlMTZOYXZpZ2F0aW9uQWN0aW9uQzFFUktOU180S1VSTEVOU18xM0ZyYW1lTG9hZFR5
cGVFYgogX19aTjdXZWJDb3JlMTZOYXZpZ2F0aW9uQWN0aW9uQzFFUktOU180S1VSTEVOU18xNE5h
dmlnYXRpb25UeXBlRQogX19aTjdXZWJDb3JlMTZOYXZpZ2F0aW9uQWN0aW9uQzFFdgogX19aTjdX
ZWJDb3JlMTZTY3JpcHRDb250cm9sbGVyMTBpbml0U2NyaXB0RXYKK19fWk43V2ViQ29yZTE2U2Ny
aXB0Q29udHJvbGxlcjE4d2luZG93U2NyaXB0T2JqZWN0RXYKIF9fWk43V2ViQ29yZTE2Y29sb3JG
cm9tTlNDb2xvckVQN05TQ29sb3IKIF9fWk43V2ViQ29yZTE2Y3JlYXRlRnVsbE1hcmt1cEVQS05T
XzROb2RlRQogX19aTjdXZWJDb3JlMTZjcmVhdGVGdWxsTWFya3VwRVBLTlNfNVJhbmdlRQpAQCAt
NDYxLDE2ICs0NjEsMTMgQEAgX19aTjdXZWJDb3JlNUZyYW1lMTNzZXRab29tRmFjdG9yRWZiCiBf
X1pON1dlYkNvcmU1RnJhbWUxNGZyYW1lRm9yV2lkZ2V0RVBLTlNfNldpZGdldEUKIF9fWk43V2Vi
Q29yZTVGcmFtZTE1c2VuZFNjcm9sbEV2ZW50RXYKIF9fWk43V2ViQ29yZTVGcmFtZTE2YWRqdXN0
UGFnZUhlaWdodEVQZmZmZgotX19aTjdXZWJDb3JlNUZyYW1lMTdiaW5kaW5nUm9vdE9iamVjdEV2
CiBfX1pON1dlYkNvcmU1RnJhbWUxN3NldElzRGlzY29ubmVjdGVkRWIKLV9fWk43V2ViQ29yZTVG
cmFtZTE4d2luZG93U2NyaXB0T2JqZWN0RXYKIF9fWk43V2ViQ29yZTVGcmFtZTIwc2V0U2VsZWN0
aW9uRnJvbU5vbmVFdgogX19aTjdXZWJDb3JlNUZyYW1lMjFtYXJrQWxsTWF0Y2hlc0ZvclRleHRF
UktOU182U3RyaW5nRWJqCiBfX1pON1dlYkNvcmU1RnJhbWUyMXNldFByb2hpYml0c1Njcm9sbGlu
Z0ViCiBfX1pON1dlYkNvcmU1RnJhbWUyNGNvbXB1dGVBbmRTZXRUeXBpbmdTdHlsZUVQTlNfMTlD
U1NTdHlsZURlY2xhcmF0aW9uRU5TXzEwRWRpdEFjdGlvbkUKIF9fWk43V2ViQ29yZTVGcmFtZTI1
bWF0Y2hMYWJlbHNBZ2FpbnN0RWxlbWVudEVQN05TQXJyYXlQTlNfN0VsZW1lbnRFCiBfX1pON1dl
YkNvcmU1RnJhbWUyOHNlYXJjaEZvckxhYmVsc0JlZm9yZUVsZW1lbnRFUDdOU0FycmF5UE5TXzdF
bGVtZW50RQotX19aTjdXZWJDb3JlNUZyYW1lMjljbGVhbnVwU2NyaXB0T2JqZWN0c0ZvclBsdWdp
bkVQdgogX19aTjdXZWJDb3JlNUZyYW1lMjlmb3JjZUxheW91dFdpdGhQYWdlV2lkdGhSYW5nZUVm
ZmIKIF9fWk43V2ViQ29yZTVGcmFtZTM0c2V0TWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRl
ZEViCiBfX1pON1dlYkNvcmU1RnJhbWU0aW5pdEV2CkBAIC01NjEsNiArNTU4LDcgQEAgX19aTjdX
ZWJDb3JlOEZvcm1EYXRhRDFFdgogX19aTjdXZWJDb3JlOEludFBvaW50QzFFUks4X05TUG9pbnQK
IF9fWk43V2ViQ29yZThTZXR0aW5nczE0c2V0SmF2YUVuYWJsZWRFYgogX19aTjdXZWJDb3JlOFNl
dHRpbmdzMTZzZXRVc2VzUGFnZUNhY2hlRWIKK19fWk43V2ViQ29yZThTZXR0aW5nczE2c2V0Wm9v
bXNUZXh0T25seUViCiBfX1pON1dlYkNvcmU4U2V0dGluZ3MxN3NldFBsdWdpbnNFbmFibGVkRWIK
IF9fWk43V2ViQ29yZThTZXR0aW5nczE4c2V0RE9NUGFzdGVBbGxvd2VkRWIKIF9fWk43V2ViQ29y
ZThTZXR0aW5nczE4c2V0RGVmYXVsdEZvbnRTaXplRWkKQEAgLTU3Niw3ICs1NzQsNiBAQCBfX1pO
N1dlYkNvcmU4U2V0dGluZ3MyMnNldFNob3dzVVJMc0luVG9vbFRpcHNFYgogX19aTjdXZWJDb3Jl
OFNldHRpbmdzMjNzZXREZWZhdWx0Rml4ZWRGb250U2l6ZUVpCiBfX1pON1dlYkNvcmU4U2V0dGlu
Z3MyM3NldEVkaXRhYmxlTGlua0JlaGF2aW9yRU5TXzIwRWRpdGFibGVMaW5rQmVoYXZpb3JFCiBf
X1pON1dlYkNvcmU4U2V0dGluZ3MyM3NldFVwZGF0ZXNXaGVuT2Zmc2NyZWVuRWIKLV9fWk43V2Vi
Q29yZThTZXR0aW5nczE2c2V0Wm9vbXNUZXh0T25seUViCiBfX1pON1dlYkNvcmU4U2V0dGluZ3My
NHNldFRleHRBcmVhc0FyZVJlc2l6YWJsZUViCiBfX1pON1dlYkNvcmU4U2V0dGluZ3MyNXNldERl
dmVsb3BlckV4dHJhc0VuYWJsZWRFYgogX19aTjdXZWJDb3JlOFNldHRpbmdzMjVzZXRNaW5pbXVt
TG9naWNhbEZvbnRTaXplRWkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9XZWJD
b3JlL1dlYkNvcmUucHJvCmluZGV4IGQzNWFkYzcuLjZlZDliMTUgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvV2ViQ29yZS5wcm8KKysrIGIvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtOTIyLDYgKzkyMiw3
IEBAIEhFQURFUlMgKz0gXAogICAgICQkUFdEL3BsYXRmb3JtL25ldHdvcmsvcXQvUU5ldHdvcmtS
ZXBseUhhbmRsZXIuaAogCiBTT1VSQ0VTICs9IFwKKyAgICBiaW5kaW5ncy9qcy9TY3JpcHRDb250
cm9sbGVyUXQuY3BwIFwKICAgICBicmlkZ2UvcXQvcXRfY2xhc3MuY3BwIFwKICAgICBicmlkZ2Uv
cXQvcXRfaW5zdGFuY2UuY3BwIFwKICAgICBicmlkZ2UvcXQvcXRfcnVudGltZS5jcHAgXApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1dlYkNvcmUv
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggNWM3MDFiOS4uYzA4NTVkYSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9XZWJD
b3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC0xNDE4Myw2ICsxNDE4MywxMCBA
QAogCQkJCQk+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0i
Li5cYmluZGluZ3NcanNcU2NyaXB0Q29udHJvbGxlcldpbi5jcHAiDQorCQkJCQk+DQorCQkJCTwv
RmlsZT4NCisJCQkJPEZpbGUNCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5cYmluZGluZ3NcanNcU3Ry
aW5nU291cmNlUHJvdmlkZXIuaCINCiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggY2M0NzE5NS4uZDhmMTJiYSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTIxODYsNiArMjE4
Niw3IEBACiAJCUE4M0I3OTU1MENDQjAxMjUwMDBCMDgyNSAvKiBET01TVkdGb250RmFjZUVsZW1l
bnRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTgzQjc5NDYwQ0NCMDEyNTAwMEIwODI1IC8qIERPTVNWR0ZvbnRGYWNlRWxlbWVudEludGVy
bmFsLmggKi87IH07CiAJCUE4M0I3OTU2MENDQjAxMjUwMDBCMDgyNSAvKiBET01TVkdGb250RmFj
ZUVsZW1lbnQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBODNCNzk0NzBDQ0IwMTI1MDAwQjA4MjUgLyogRE9NU1ZHRm9udEZhY2VFbGVtZW50Lm1tICov
OyB9OwogCQlBODNCNzk1NzBDQ0IwMTI1MDAwQjA4MjUgLyogRE9NU1ZHRm9udEZhY2VFbGVtZW50
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODNCNzk0
ODBDQ0IwMTI1MDAwQjA4MjUgLyogRE9NU1ZHRm9udEZhY2VFbGVtZW50LmggKi87IH07CisJCUE4
M0UxQzc0MEU0OTA0MkMwMDE0MEI5QyAvKiBTY3JpcHRDb250cm9sbGVyTWFjLm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgzRTFDNzIwRTQ5MDQyQjAw
MTQwQjlDIC8qIFNjcmlwdENvbnRyb2xsZXJNYWMubW0gKi87IH07CiAJCUE4NEVCRDc4MENCOEM4
OTIwMDA3OTYwOSAvKiBKU1N0eWxlU2hlZXRMaXN0Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NEVCRDc3MENCOEM4OTIwMDA3OTYwOSAv
KiBKU1N0eWxlU2hlZXRMaXN0Q3VzdG9tLmNwcCAqLzsgfTsKIAkJQTg0RUJEODMwQ0I4Qzk3NzAw
MDc5NjA5IC8qIEpTU3R5bGVTaGVldExpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE4NEVCRDgxMENCOEM5NzcwMDA3OTYwOSAvKiBKU1N0eWxlU2hl
ZXRMaXN0LmggKi87IH07CiAJCUE4NEVCRDg0MENCOEM5NzcwMDA3OTYwOSAvKiBKU1N0eWxlU2hl
ZXRMaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE4NEVCRDgyMENCOEM5NzcwMDA3OTYwOSAvKiBKU1N0eWxlU2hlZXRMaXN0LmNwcCAqLzsgfTsK
QEAgLTY1MjAsNiArNjUyMSw3IEBACiAJCUE4M0I3OTQ2MENDQjAxMjUwMDBCMDgyNSAvKiBET01T
VkdGb250RmFjZUVsZW1lbnRJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBET01TVkdGb250RmFjZUVsZW1lbnRJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBODNCNzk0NzBDQ0IwMTI1MDAwQjA4MjUgLyogRE9NU1ZHRm9udEZhY2VFbGVt
ZW50Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRE9NU1ZHRm9u
dEZhY2VFbGVtZW50Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODNCNzk0ODBD
Q0IwMTI1MDAwQjA4MjUgLyogRE9NU1ZHRm9udEZhY2VFbGVtZW50LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IERPTVNWR0ZvbnRGYWNlRWxlbWVudC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlBODNFMUM3MjBFNDkwNDJCMDAxNDBCOUMgLyogU2NyaXB0Q29udHJv
bGxlck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNjcmlw
dENvbnRyb2xsZXJNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4NEVCRDc3
MENCOEM4OTIwMDA3OTYwOSAvKiBKU1N0eWxlU2hlZXRMaXN0Q3VzdG9tLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU3R5bGVTaGVldExpc3RDdXN0b20uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODRFQkQ4MTBDQjhDOTc3MDAwNzk2MDkgLyog
SlNTdHlsZVNoZWV0TGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1N0
eWxlU2hlZXRMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4NEVCRDgyMENC
OEM5NzcwMDA3OTYwOSAvKiBKU1N0eWxlU2hlZXRMaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpTU3R5bGVTaGVldExpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMTIzMjMsNiArMTIzMjUsNyBAQAogCQkJCUJDQTM3OEJBMEQxNUY2NDIw
MEI3OTNENiAvKiBTY2hlZHVsZWRBY3Rpb24uY3BwICovLAogCQkJCUJDQTM3OEJCMEQxNUY2NDIw
MEI3OTNENiAvKiBTY2hlZHVsZWRBY3Rpb24uaCAqLywKIAkJCQk5M0I3MEQ1MzA5RUIwQzdDMDA5
RDg0NjggLyogU2NyaXB0Q29udHJvbGxlci5jcHAgKi8sCisJCQkJQTgzRTFDNzIwRTQ5MDQyQjAw
MTQwQjlDIC8qIFNjcmlwdENvbnRyb2xsZXJNYWMubW0gKi8sCiAJCQkJOTNCNzBENTQwOUVCMEM3
QzAwOUQ4NDY4IC8qIFNjcmlwdENvbnRyb2xsZXIuaCAqLywKIAkJCQk2NTQ4OEQ2QTBERDVBODNE
MDA5RDgzQjIgLyogU3RyaW5nU291cmNlUHJvdmlkZXIuaCAqLywKIAkJCSk7CkBAIC0xNzA4OCw2
ICsxNzA5MSw3IEBACiAJCQkJQkNERkQ0OTUwRTMwNTkyRjAwOUQxMEFEIC8qIEpTWE1MSHR0cFJl
cXVlc3RVcGxvYWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEyODhFNzIwRTMwMDVENjAwMzYx
OUFFIC8qIFdlYktpdENTU0tleWZyYW1lUnVsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTI4
OEU3NDBFMzAwNUQ2MDAzNjE5QUUgLyogV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQlBODNFMUM3NDBFNDkwNDJDMDAxNDBCOUMgLyogU2NyaXB0Q29udHJvbGxl
ck1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9z
dHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
Y3JpcHRDb250cm9sbGVyLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxl
ci5jcHAKaW5kZXggNmQzNGJkZC4uMTFjNTA0OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1Njcmlw
dENvbnRyb2xsZXIuY3BwCkBAIC0yOSwxNiArMjksMjQgQEAKICNpbmNsdWRlICJGcmFtZS5oIgog
I2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiR0NDb250cm9sbGVyLmgiCi0jaW5j
bHVkZSAiSlNEb2N1bWVudC5oIgogI2luY2x1ZGUgIkpTRE9NV2luZG93LmgiCisjaW5jbHVkZSAi
SlNEb2N1bWVudC5oIgorI2luY2x1ZGUgIkpTRXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIm5w
cnVudGltZV9pbXBsLmgiCisjaW5jbHVkZSAiTlBfanNvYmplY3QuaCIKICNpbmNsdWRlICJQYWdl
LmgiCiAjaW5jbHVkZSAiUGFnZUdyb3VwLmgiCisjaW5jbHVkZSAicnVudGltZV9yb290LmgiCiAj
aW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTdHJpbmdTb3VyY2VQcm92aWRlci5oIgot
I2luY2x1ZGUgIkpTRXZlbnRMaXN0ZW5lci5oIgorCiAjaW5jbHVkZSA8a2pzL2NvbXBsZXRpb24u
aD4KICNpbmNsdWRlIDxranMvZGVidWdnZXIuaD4KIAorI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVH
SU5fQVBJKQorI2luY2x1ZGUgIkhUTUxQbHVnSW5FbGVtZW50LmgiCisjZW5kaWYKKwogI2lmIEVO
QUJMRShTVkcpCiAjaW5jbHVkZSAiSlNTVkdMYXp5RXZlbnRMaXN0ZW5lci5oIgogI2VuZGlmCkBA
IC01NCw3ICs2MiwyMCBAQCBTY3JpcHRDb250cm9sbGVyOjpTY3JpcHRDb250cm9sbGVyKEZyYW1l
KiBmcmFtZSkKICAgICAsIG1fc291cmNlVVJMKDApCiAgICAgLCBtX3Byb2Nlc3NpbmdUaW1lckNh
bGxiYWNrKGZhbHNlKQogICAgICwgbV9wYXVzZWQoZmFsc2UpCisjaWYgRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9BUEkpCisgICAgLCBtX3dpbmRvd1NjcmlwdE5QT2JqZWN0KDApCisjZW5kaWYKKyNp
ZiBQTEFURk9STShNQUMpCisgICAgLCBtX3dpbmRvd1NjcmlwdE9iamVjdCgwKQorI2VuZGlmCiB7
CisjaWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoTUFDX0pBVkFfQlJJREdFKQorICAgIHN0YXRp
YyBib29sIGluaXRpYWxpemVkSmF2YUpTQmluZGluZ3M7CisgICAgaWYgKCFpbml0aWFsaXplZEph
dmFKU0JpbmRpbmdzKSB7CisgICAgICAgIGluaXRpYWxpemVkSmF2YUpTQmluZGluZ3MgPSB0cnVl
OworICAgICAgICBpbml0SmF2YUpTQmluZGluZ3MoKTsKKyAgICB9CisjZW5kaWYKIH0KIAogU2Ny
aXB0Q29udHJvbGxlcjo6flNjcmlwdENvbnRyb2xsZXIoKQpAQCAtNjUsNiArODYsOCBAQCBTY3Jp
cHRDb250cm9sbGVyOjp+U2NyaXB0Q29udHJvbGxlcigpCiAgICAgICAgIC8vIEl0J3MgbGlrZWx5
IHRoYXQgcmVsZWFzaW5nIHRoZSBnbG9iYWwgb2JqZWN0IGhhcyBjcmVhdGVkIGEgbG90IG9mIGdh
cmJhZ2UuCiAgICAgICAgIGdjQ29udHJvbGxlcigpLmdhcmJhZ2VDb2xsZWN0U29vbigpOwogICAg
IH0KKworICAgIGRpc2Nvbm5lY3RQbGF0Zm9ybVNjcmlwdE9iamVjdHMoKTsKIH0KIAogSlNWYWx1
ZSogU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGUoY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIGlu
dCBiYXNlTGluZSwgY29uc3QgU3RyaW5nJiBzdHIpIApAQCAtMTAxLDcgKzEyNCw3IEBAIEpTVmFs
dWUqIFNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlKGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCBp
bnQgYmFzZUxpbmUsIGNvbnN0CiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgU2NyaXB0Q29udHJv
bGxlcjo6Y2xlYXIoKQordm9pZCBTY3JpcHRDb250cm9sbGVyOjpjbGVhcldpbmRvd1NoZWxsKCkK
IHsKICAgICBpZiAoIW1fd2luZG93U2hlbGwpCiAgICAgICAgIHJldHVybjsKQEAgLTIxNSw0ICsy
MzgsMTExIEBAIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6dXBkYXRlRG9jdW1lbnQoKQogfQogCiAK
K0JpbmRpbmdzOjpSb290T2JqZWN0KiBTY3JpcHRDb250cm9sbGVyOjpiaW5kaW5nUm9vdE9iamVj
dCgpCit7CisgICAgaWYgKCFpc0VuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBp
ZiAoIW1fYmluZGluZ1Jvb3RPYmplY3QpCisgICAgICAgIG1fYmluZGluZ1Jvb3RPYmplY3QgPSBC
aW5kaW5nczo6Um9vdE9iamVjdDo6Y3JlYXRlKDAsIGdsb2JhbE9iamVjdCgpKTsKKyAgICByZXR1
cm4gbV9iaW5kaW5nUm9vdE9iamVjdC5nZXQoKTsKK30KKworUGFzc1JlZlB0cjxCaW5kaW5nczo6
Um9vdE9iamVjdD4gU2NyaXB0Q29udHJvbGxlcjo6Y3JlYXRlUm9vdE9iamVjdCh2b2lkKiBuYXRp
dmVIYW5kbGUpCit7CisgICAgUm9vdE9iamVjdE1hcDo6aXRlcmF0b3IgaXQgPSBtX3Jvb3RPYmpl
Y3RzLmZpbmQobmF0aXZlSGFuZGxlKTsKKyAgICBpZiAoaXQgIT0gbV9yb290T2JqZWN0cy5lbmQo
KSkKKyAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisKKyAgICBSZWZQdHI8QmluZGluZ3M6OlJv
b3RPYmplY3Q+IHJvb3RPYmplY3QgPSBCaW5kaW5nczo6Um9vdE9iamVjdDo6Y3JlYXRlKG5hdGl2
ZUhhbmRsZSwgZ2xvYmFsT2JqZWN0KCkpOworCisgICAgbV9yb290T2JqZWN0cy5zZXQobmF0aXZl
SGFuZGxlLCByb290T2JqZWN0KTsKKyAgICByZXR1cm4gcm9vdE9iamVjdC5yZWxlYXNlKCk7Cit9
CisKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKK05QT2JqZWN0KiBTY3JpcHRDb250
cm9sbGVyOjp3aW5kb3dTY3JpcHROUE9iamVjdCgpCit7CisgICAgaWYgKCFtX3dpbmRvd1Njcmlw
dE5QT2JqZWN0KSB7CisgICAgICAgIGlmIChpc0VuYWJsZWQoKSkgeworICAgICAgICAgICAgLy8g
SmF2YVNjcmlwdCBpcyBlbmFibGVkLCBzbyB0aGVyZSBpcyBhIEphdmFTY3JpcHQgd2luZG93IG9i
amVjdC4KKyAgICAgICAgICAgIC8vIFJldHVybiBhbiBOUE9iamVjdCBib3VuZCB0byB0aGUgd2lu
ZG93IG9iamVjdC4KKyAgICAgICAgICAgIEpTT2JqZWN0KiB3aW4gPSB3aW5kb3dTaGVsbCgpLT53
aW5kb3coKTsKKyAgICAgICAgICAgIEFTU0VSVCh3aW4pOworICAgICAgICAgICAgQmluZGluZ3M6
OlJvb3RPYmplY3QqIHJvb3QgPSBiaW5kaW5nUm9vdE9iamVjdCgpOworICAgICAgICAgICAgbV93
aW5kb3dTY3JpcHROUE9iamVjdCA9IF9OUE5fQ3JlYXRlU2NyaXB0T2JqZWN0KDAsIHdpbiwgcm9v
dCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBKYXZhU2NyaXB0IGlzIG5vdCBl
bmFibGVkLCBzbyB3ZSBjYW5ub3QgYmluZCB0aGUgTlBPYmplY3QgdG8gdGhlIEphdmFTY3JpcHQg
d2luZG93IG9iamVjdC4KKyAgICAgICAgICAgIC8vIEluc3RlYWQsIHdlIGNyZWF0ZSBhbiBOUE9i
amVjdCBvZiBhIGRpZmZlcmVudCBjbGFzcywgb25lIHdoaWNoIGlzIG5vdCBib3VuZCB0byBhIEph
dmFTY3JpcHQgb2JqZWN0LgorICAgICAgICAgICAgbV93aW5kb3dTY3JpcHROUE9iamVjdCA9IF9O
UE5fQ3JlYXRlTm9TY3JpcHRPYmplY3QoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biBtX3dpbmRvd1NjcmlwdE5QT2JqZWN0OworfQorCitOUE9iamVjdCogU2NyaXB0Q29udHJvbGxl
cjo6Y3JlYXRlU2NyaXB0T2JqZWN0Rm9yUGx1Z2luRWxlbWVudChIVE1MUGx1Z0luRWxlbWVudCog
cGx1Z2luKQoreworICAgIC8vIENhbid0IGNyZWF0ZSBOUE9iamVjdHMgd2hlbiBKYXZhU2NyaXB0
IGlzIGRpc2FibGVkCisgICAgaWYgKCFpc0VuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIF9OUE5f
Q3JlYXRlTm9TY3JpcHRPYmplY3QoKTsKKworICAgIC8vIENyZWF0ZSBhIEpTT2JqZWN0IGJvdW5k
IHRvIHRoaXMgZWxlbWVudAorICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdCgpLT5n
bG9iYWxFeGVjKCk7CisgICAgSlNWYWx1ZSoganNFbGVtZW50VmFsdWUgPSB0b0pTKGV4ZWMsIHBs
dWdpbik7CisgICAgaWYgKCFqc0VsZW1lbnRWYWx1ZSB8fCAhanNFbGVtZW50VmFsdWUtPmlzT2Jq
ZWN0KCkpCisgICAgICAgIHJldHVybiBfTlBOX0NyZWF0ZU5vU2NyaXB0T2JqZWN0KCk7CisKKyAg
ICAvLyBXcmFwIHRoZSBKU09iamVjdCBpbiBhbiBOUE9iamVjdAorICAgIHJldHVybiBfTlBOX0Ny
ZWF0ZVNjcmlwdE9iamVjdCgwLCBqc0VsZW1lbnRWYWx1ZS0+Z2V0T2JqZWN0KCksIGJpbmRpbmdS
b290T2JqZWN0KCkpOworfQorI2VuZGlmCisKKyNpZiAhUExBVEZPUk0oTUFDKQordm9pZCBTY3Jp
cHRDb250cm9sbGVyOjpjbGVhclBsYXRmb3JtU2NyaXB0T2JqZWN0cygpCit7Cit9CisKK3ZvaWQg
U2NyaXB0Q29udHJvbGxlcjo6ZGlzY29ubmVjdFBsYXRmb3JtU2NyaXB0T2JqZWN0cygpCit7Cit9
CisjZW5kaWYKKwordm9pZCBTY3JpcHRDb250cm9sbGVyOjpjbGVhbnVwU2NyaXB0T2JqZWN0c0Zv
clBsdWdpbih2b2lkKiBuYXRpdmVIYW5kbGUpCit7CisgICAgUm9vdE9iamVjdE1hcDo6aXRlcmF0
b3IgaXQgPSBtX3Jvb3RPYmplY3RzLmZpbmQobmF0aXZlSGFuZGxlKTsKKworICAgIGlmIChpdCA9
PSBtX3Jvb3RPYmplY3RzLmVuZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpdC0+c2Vjb25k
LT5pbnZhbGlkYXRlKCk7CisgICAgbV9yb290T2JqZWN0cy5yZW1vdmUoaXQpOworfQorCit2b2lk
IFNjcmlwdENvbnRyb2xsZXI6OmNsZWFyU2NyaXB0T2JqZWN0cygpCit7CisgICAgUm9vdE9iamVj
dE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9yb290T2JqZWN0cy5lbmQoKTsKKyAgICBmb3Ig
KFJvb3RPYmplY3RNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9yb290T2JqZWN0cy5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIGl0LT5zZWNvbmQtPmludmFsaWRhdGUoKTsKKwor
ICAgIG1fcm9vdE9iamVjdHMuY2xlYXIoKTsKKworICAgIGlmIChtX2JpbmRpbmdSb290T2JqZWN0
KSB7CisgICAgICAgIG1fYmluZGluZ1Jvb3RPYmplY3QtPmludmFsaWRhdGUoKTsKKyAgICAgICAg
bV9iaW5kaW5nUm9vdE9iamVjdCA9IDA7CisgICAgfQorCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BM
VUdJTl9BUEkpCisgICAgaWYgKG1fd2luZG93U2NyaXB0TlBPYmplY3QpIHsKKyAgICAgICAgLy8g
Q2FsbCBfTlBOX0RlYWxsb2NhdGVPYmplY3QoKSBpbnN0ZWFkIG9mIF9OUE5fUmVsZWFzZU9iamVj
dCgpIHNvIHRoYXQgd2UgZG9uJ3QgbGVhayBpZiBhIHBsdWdpbiBmYWlscyB0byByZWxlYXNlIHRo
ZSB3aW5kb3cKKyAgICAgICAgLy8gc2NyaXB0IG9iamVjdCBwcm9wZXJseS4KKyAgICAgICAgLy8g
VGhpcyBzaG91bGRuJ3QgY2F1c2UgYW55IHByb2JsZW1zIGZvciBwbHVnaW5zIHNpbmNlIHRoZXkg
c2hvdWxkIGhhdmUgYWxyZWFkeSBiZWVuIHN0b3BwZWQgYW5kIGRlc3Ryb3llZCBhdCB0aGlzIHBv
aW50LgorICAgICAgICBfTlBOX0RlYWxsb2NhdGVPYmplY3QobV93aW5kb3dTY3JpcHROUE9iamVj
dCk7CisgICAgICAgIG1fd2luZG93U2NyaXB0TlBPYmplY3QgPSAwOworICAgIH0KKyNlbmRpZgor
CisgICAgY2xlYXJQbGF0Zm9ybVNjcmlwdE9iamVjdHMoKTsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVy
LmggYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuaAppbmRleCBlNjNiZmYz
Li42YTQxN2U2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xs
ZXIuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuaApAQCAtMiw2
ICsyLDcgQEAKICAqICBDb3B5cmlnaHQgKEMpIDE5OTkgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2Rl
Lm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkK
ICAqICBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogIENvcHlyaWdodCAoQykgMjAwOCBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICoK
ICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYwpAQCAtMjQsMTkgKzI1LDM5IEBACiAjaW5jbHVkZSAiSlNET01XaW5k
b3dTaGVsbC5oIgogI2luY2x1ZGUgPGtqcy9wcm90ZWN0Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworI2lmIFBMQVRGT1JNKE1BQykKKyNp
ZmRlZiBfX09CSkNfXworQGNsYXNzIFdlYlNjcmlwdE9iamVjdDsKKyNlbHNlCitjbGFzcyBXZWJT
Y3JpcHRPYmplY3Q7CisjZW5kaWYKKyNlbmRpZgorCitzdHJ1Y3QgTlBPYmplY3Q7CiAKIG5hbWVz
cGFjZSBLSlMgewogICAgIGNsYXNzIEpTR2xvYmFsT2JqZWN0OwogICAgIGNsYXNzIEpTVmFsdWU7
CisKKyAgICBuYW1lc3BhY2UgQmluZGluZ3MgeworICAgICAgICBjbGFzcyBJbnN0YW5jZTsKKyAg
ICAgICAgY2xhc3MgUm9vdE9iamVjdDsKKyAgICB9CiB9CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgRXZlbnQ7CiBjbGFzcyBFdmVudExpc3RlbmVyOworY2xhc3MgSFRNTFBsdWdJbkVs
ZW1lbnQ7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIE5vZGU7CiBjbGFzcyBTdHJpbmc7CitjbGFzcyBX
aWRnZXQ7CisKK3R5cGVkZWYgSGFzaE1hcDx2b2lkKiwgUmVmUHRyPEtKUzo6QmluZGluZ3M6OlJv
b3RPYmplY3Q+ID4gUm9vdE9iamVjdE1hcDsKIAogY2xhc3MgU2NyaXB0Q29udHJvbGxlciB7CiBw
dWJsaWM6CkBAIC01Nyw3ICs3OCw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBLSlM6OkpTVmFs
dWUqIGV2YWx1YXRlKGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCBpbnQgYmFzZUxpbmUsIGNvbnN0
IFN0cmluZyYgY29kZSk7Ci0gICAgdm9pZCBjbGVhcigpOworCiAgICAgUGFzc1JlZlB0cjxFdmVu
dExpc3RlbmVyPiBjcmVhdGVIVE1MRXZlbnRIYW5kbGVyKGNvbnN0IFN0cmluZyYgZnVuY3Rpb25O
YW1lLCBjb25zdCBTdHJpbmcmIGNvZGUsIE5vZGUqKTsKICNpZiBFTkFCTEUoU1ZHKQogICAgIFBh
c3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gY3JlYXRlU1ZHRXZlbnRIYW5kbGVyKGNvbnN0IFN0cmlu
ZyYgZnVuY3Rpb25OYW1lLCBjb25zdCBTdHJpbmcmIGNvZGUsIE5vZGUqKTsKQEAgLTc1LDEwICs5
NiwzMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRQYXVzZWQoYm9vbCBiKSB7IG1fcGF1c2VkID0g
YjsgfQogICAgIGJvb2wgaXNQYXVzZWQoKSBjb25zdCB7IHJldHVybiBtX3BhdXNlZDsgfQogCisg
ICAgY29uc3QgU3RyaW5nKiBzb3VyY2VVUkwoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZVVSTDsg
fSAvLyAwIGlmIHdlIGFyZSBub3QgZXZhbHVhdGluZyBhbnkgc2NyaXB0CisKKyAgICB2b2lkIGNs
ZWFyV2luZG93U2hlbGwoKTsKICAgICB2b2lkIGNsZWFyRm9ybWVyV2luZG93KEpTRE9NV2luZG93
KiB3aW5kb3cpIHsgbV9saXZlRm9ybWVyV2luZG93cy5yZW1vdmUod2luZG93KTsgfQogICAgIHZv
aWQgdXBkYXRlRG9jdW1lbnQoKTsKKyAgICAKKyAgICB2b2lkIGNsZWFyU2NyaXB0T2JqZWN0cygp
OworICAgIHZvaWQgY2xlYW51cFNjcmlwdE9iamVjdHNGb3JQbHVnaW4odm9pZCopOwogCi0gICAg
Y29uc3QgU3RyaW5nKiBzb3VyY2VVUkwoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZVVSTDsgfSAv
LyAwIGlmIHdlIGFyZSBub3QgZXZhbHVhdGluZyBhbnkgc2NyaXB0CisgICAgUGFzc1JlZlB0cjxL
SlM6OkJpbmRpbmdzOjpJbnN0YW5jZT4gY3JlYXRlU2NyaXB0SW5zdGFuY2VGb3JXaWRnZXQoV2lk
Z2V0Kik7CisgICAgS0pTOjpCaW5kaW5nczo6Um9vdE9iamVjdCogYmluZGluZ1Jvb3RPYmplY3Qo
KTsKKworICAgIFBhc3NSZWZQdHI8S0pTOjpCaW5kaW5nczo6Um9vdE9iamVjdD4gY3JlYXRlUm9v
dE9iamVjdCh2b2lkKiBuYXRpdmVIYW5kbGUpOworCisjaWYgUExBVEZPUk0oTUFDKQorI2lmIEVO
QUJMRShNQUNfSkFWQV9CUklER0UpCisgICAgc3RhdGljIHZvaWQgaW5pdEphdmFKU0JpbmRpbmdz
KCk7CisjZW5kaWYKKyAgICBXZWJTY3JpcHRPYmplY3QqIHdpbmRvd1NjcmlwdE9iamVjdCgpOwor
I2VuZGlmCisKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICBOUE9iamVjdCog
Y3JlYXRlU2NyaXB0T2JqZWN0Rm9yUGx1Z2luRWxlbWVudChIVE1MUGx1Z0luRWxlbWVudCopOwor
ICAgIE5QT2JqZWN0KiB3aW5kb3dTY3JpcHROUE9iamVjdCgpOworI2VuZGlmCiAKIHByaXZhdGU6
CiAgICAgdm9pZCBpbml0U2NyaXB0SWZOZWVkZWQoKQpAQCAtODgsNiArMTMwLDkgQEAgcHJpdmF0
ZToKICAgICB9CiAgICAgdm9pZCBpbml0U2NyaXB0KCk7CiAKKyAgICB2b2lkIGNsZWFyUGxhdGZv
cm1TY3JpcHRPYmplY3RzKCk7CisgICAgdm9pZCBkaXNjb25uZWN0UGxhdGZvcm1TY3JpcHRPYmpl
Y3RzKCk7CisKICAgICBLSlM6OlByb3RlY3RlZFB0cjxKU0RPTVdpbmRvd1NoZWxsPiBtX3dpbmRv
d1NoZWxsOwogICAgIEhhc2hTZXQ8SlNET01XaW5kb3cqPiBtX2xpdmVGb3JtZXJXaW5kb3dzOwog
ICAgIEZyYW1lKiBtX2ZyYW1lOwpAQCAtOTYsNiArMTQxLDE2IEBAIHByaXZhdGU6CiAKICAgICBi
b29sIG1fcHJvY2Vzc2luZ1RpbWVyQ2FsbGJhY2s7CiAgICAgYm9vbCBtX3BhdXNlZDsKKworICAg
IC8vIFRoZSByb290IG9iamVjdCB1c2VkIGZvciBvYmplY3RzIGJvdW5kIG91dHNpZGUgdGhlIGNv
bnRleHQgb2YgYSBwbHVnaW4uCisgICAgUmVmUHRyPEtKUzo6QmluZGluZ3M6OlJvb3RPYmplY3Q+
IG1fYmluZGluZ1Jvb3RPYmplY3Q7CisgICAgUm9vdE9iamVjdE1hcCBtX3Jvb3RPYmplY3RzOwor
I2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgIE5QT2JqZWN0KiBtX3dpbmRvd1Nj
cmlwdE5QT2JqZWN0OworI2VuZGlmCisjaWYgUExBVEZPUk0oTUFDKQorICAgIFJldGFpblB0cjxX
ZWJTY3JpcHRPYmplY3Q+IG1fd2luZG93U2NyaXB0T2JqZWN0OworI2VuZGlmCiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Njcmlw
dENvbnRyb2xsZXJHdGsuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVy
R3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmFkMzc2Ci0tLSAv
ZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyR3RrLmNw
cApAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1
dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1p
Y2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KKyAqIENvcHlyaWdodCAoQykgMjAwNyBI
b2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9y
YSBMdGQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IEVyaWMg
U2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCisKKyNp
bmNsdWRlICJQbHVnaW5WaWV3LmgiCisjaW5jbHVkZSAicnVudGltZV9yb290LmgiCisjaW5jbHVk
ZSAicnVudGltZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8S0pTOjpC
aW5kaW5nczo6SW5zdGFuY2U+IEZyYW1lOjpjcmVhdGVTY3JpcHRJbnN0YW5jZUZvcldpZGdldChX
aWRnZXQqIHdpZGdldCkKK3sKKyAgICBpZiAod2lkZ2V0LT5pc1BsdWdpblZpZXcoKSkKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UGx1Z2luVmlldyo+KHdpZGdl
dCktPmJpbmRpbmdJbnN0YW5jZSgpOworfQorCit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NjcmlwdENvbnRyb2xsZXJNYWMubW0gYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1Njcmlw
dENvbnRyb2xsZXJNYWMubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Zj
MDYzYQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJv
bGxlck1hYy5tbQpAQCAtMCwwICsxLDE2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAbnlwb3AuY29tKQor
ICogQ29weXJpZ2h0IChDKSAyMDA3IFRyb2xsdGVjaCBBU0EKKyAqIENvcHlyaWdodCAoQykgMjAw
OCBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0ICJjb25maWcu
aCIKKyNpbXBvcnQgIlNjcmlwdENvbnRyb2xsZXIuaCIKKworI2ltcG9ydCAiRE9NQWJzdHJhY3RW
aWV3RnJhbWUuaCIKKyNpbXBvcnQgIkRPTVdpbmRvdy5oIgorI2ltcG9ydCAiRnJhbWUuaCIKKyNp
bXBvcnQgIkZyYW1lTG9hZGVyLmgiCisjaW1wb3J0ICJGcmFtZUxvYWRlckNsaWVudC5oIgorI2lt
cG9ydCAiSlNET01XaW5kb3cuaCIKKyNpbXBvcnQgIldlYlNjcmlwdE9iamVjdFByaXZhdGUuaCIK
KyNpbXBvcnQgIldpZGdldC5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQVBJQ2FzdC5oPgor
CisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisjaW1wb3J0ICJjX2luc3RhbmNlLmgi
CisjaW1wb3J0ICJOUF9qc29iamVjdC5oIgorI2ltcG9ydCAibnBydW50aW1lX2ltcGwuaCIKKyNl
bmRpZgorCisjaW1wb3J0ICJvYmpjX2luc3RhbmNlLmgiCisjaW1wb3J0ICJydW50aW1lX3Jvb3Qu
aCIKKyNpbXBvcnQgInJ1bnRpbWUuaCIKKworI2lmIEVOQUJMRShNQUNfSkFWQV9CUklER0UpCisj
aW1wb3J0ICJqbmlfaW5zdGFuY2UuaCIKKyNlbmRpZgorCitAaW50ZXJmYWNlIE5TT2JqZWN0IChX
ZWJQbHVnaW4pCistIChpZClvYmplY3RGb3JXZWJTY3JpcHQ7CistIChOUE9iamVjdCAqKWNyZWF0
ZVBsdWdpblNjcmlwdGFibGVPYmplY3Q7CitAZW5kCisKK3VzaW5nIG5hbWVzcGFjZSBLSlM6OkJp
bmRpbmdzOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8S0pTOjpCaW5kaW5n
czo6SW5zdGFuY2U+IFNjcmlwdENvbnRyb2xsZXI6OmNyZWF0ZVNjcmlwdEluc3RhbmNlRm9yV2lk
Z2V0KFdpZGdldCogd2lkZ2V0KQoreworICAgIE5TVmlldyogd2lkZ2V0VmlldyA9IHdpZGdldC0+
Z2V0VmlldygpOworICAgIGlmICghd2lkZ2V0VmlldykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBSZWZQdHI8Um9vdE9iamVjdD4gcm9vdE9iamVjdCA9IGNyZWF0ZVJvb3RPYmplY3Qod2lkZ2V0
Vmlldyk7CisKKyAgICBpZiAoW3dpZGdldFZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rv
cihvYmplY3RGb3JXZWJTY3JpcHQpXSkgeworICAgICAgICBpZCBvYmplY3RGb3JXZWJTY3JpcHQg
PSBbd2lkZ2V0VmlldyBvYmplY3RGb3JXZWJTY3JpcHRdOworICAgICAgICBpZiAoIW9iamVjdEZv
cldlYlNjcmlwdCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gS0pTOjpC
aW5kaW5nczo6T2JqY0luc3RhbmNlOjpjcmVhdGUob2JqZWN0Rm9yV2ViU2NyaXB0LCByb290T2Jq
ZWN0LnJlbGVhc2UoKSk7CisgICAgfQorCisgICAgaWYgKFt3aWRnZXRWaWV3IHJlc3BvbmRzVG9T
ZWxlY3RvcjpAc2VsZWN0b3IoY3JlYXRlUGx1Z2luU2NyaXB0YWJsZU9iamVjdCldKSB7CisjaWYg
IUVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgICAgICByZXR1cm4gMDsKKyNlbHNlCisg
ICAgICAgIE5QT2JqZWN0KiBucE9iamVjdCA9IFt3aWRnZXRWaWV3IGNyZWF0ZVBsdWdpblNjcmlw
dGFibGVPYmplY3RdOworICAgICAgICBpZiAoIW5wT2JqZWN0KQorICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgIFJlZlB0cjxJbnN0YW5jZT4gaW5zdGFuY2UgPSBLSlM6OkJpbmRpbmdzOjpD
SW5zdGFuY2U6OmNyZWF0ZShucE9iamVjdCwgcm9vdE9iamVjdC5yZWxlYXNlKCkpOworICAgICAg
ICAvLyAtY3JlYXRlUGx1Z2luU2NyaXB0YWJsZU9iamVjdCByZXR1cm5zIGEgcmV0YWluZWQgTlBP
YmplY3QuICBUaGUgY2FsbGVyIGlzIGV4cGVjdGVkIHRvIHJlbGVhc2UgaXQuCisgICAgICAgIF9O
UE5fUmVsZWFzZU9iamVjdChucE9iamVjdCk7CisgICAgICAgIHJldHVybiBpbnN0YW5jZS5yZWxl
YXNlKCk7CisjZW5kaWYKKyAgICB9CisKKyNpZiBFTkFCTEUoTUFDX0pBVkFfQlJJREdFKQorICAg
IGpvYmplY3QgYXBwbGV0ID0gbV9mcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5qYXZhQXBwbGV0
KHdpZGdldFZpZXcpOworICAgIGlmICghYXBwbGV0KQorICAgICAgICByZXR1cm4gMDsKKyAgICBy
ZXR1cm4gS0pTOjpCaW5kaW5nczo6SmF2YUluc3RhbmNlOjpjcmVhdGUoYXBwbGV0LCByb290T2Jq
ZWN0LnJlbGVhc2UoKSk7CisjZWxzZQorICAgIHJldHVybiAwOworI2VuZGlmCit9CisKK1dlYlNj
cmlwdE9iamVjdCogU2NyaXB0Q29udHJvbGxlcjo6d2luZG93U2NyaXB0T2JqZWN0KCkKK3sKKyAg
ICBpZiAoIWlzRW5hYmxlZCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmICghbV93aW5k
b3dTY3JpcHRPYmplY3QpIHsKKyAgICAgICAgS0pTOjpCaW5kaW5nczo6Um9vdE9iamVjdCogcm9v
dCA9IGJpbmRpbmdSb290T2JqZWN0KCk7CisgICAgICAgIG1fd2luZG93U2NyaXB0T2JqZWN0ID0g
W1dlYlNjcmlwdE9iamVjdCBzY3JpcHRPYmplY3RGb3JKU09iamVjdDp0b1JlZih3aW5kb3dTaGVs
bCgpKSBvcmlnaW5Sb290T2JqZWN0OnJvb3Qgcm9vdE9iamVjdDpyb290XTsKKyAgICB9CisKKyAg
ICBBU1NFUlQoW21fd2luZG93U2NyaXB0T2JqZWN0LmdldCgpIGlzS2luZE9mQ2xhc3M6W0RPTUFi
c3RyYWN0VmlldyBjbGFzc11dKTsKKyAgICByZXR1cm4gbV93aW5kb3dTY3JpcHRPYmplY3QuZ2V0
KCk7Cit9CisKK3ZvaWQgU2NyaXB0Q29udHJvbGxlcjo6Y2xlYXJQbGF0Zm9ybVNjcmlwdE9iamVj
dHMoKQoreworICAgIGlmIChtX3dpbmRvd1NjcmlwdE9iamVjdCkgeworICAgICAgICBLSlM6OkJp
bmRpbmdzOjpSb290T2JqZWN0KiByb290ID0gYmluZGluZ1Jvb3RPYmplY3QoKTsKKyAgICAgICAg
W21fd2luZG93U2NyaXB0T2JqZWN0LmdldCgpIF9zZXRPcmlnaW5Sb290T2JqZWN0OnJvb3QgYW5k
Um9vdE9iamVjdDpyb290XTsKKyAgICB9Cit9CisKK3ZvaWQgU2NyaXB0Q29udHJvbGxlcjo6ZGlz
Y29ubmVjdFBsYXRmb3JtU2NyaXB0T2JqZWN0cygpCit7CisgICAgaWYgKG1fd2luZG93U2NyaXB0
T2JqZWN0KSB7CisgICAgICAgIEFTU0VSVChbbV93aW5kb3dTY3JpcHRPYmplY3QuZ2V0KCkgaXNL
aW5kT2ZDbGFzczpbRE9NQWJzdHJhY3RWaWV3IGNsYXNzXV0pOworICAgICAgICBbKERPTUFic3Ry
YWN0VmlldyAqKW1fd2luZG93U2NyaXB0T2JqZWN0LmdldCgpIF9kaXNjb25uZWN0RnJhbWVdOwor
ICAgIH0KK30KKworI2lmIEVOQUJMRShNQUNfSkFWQV9CUklER0UpCitzdGF0aWMgcHRocmVhZF90
IG1haW5UaHJlYWQ7CisKK3N0YXRpYyB2b2lkIHVwZGF0ZVJlbmRlcmluZ0ZvckJpbmRpbmdzKEtK
Uzo6RXhlY1N0YXRlKiBleGVjLCBLSlM6OkpTT2JqZWN0KiByb290T2JqZWN0KQoreworICAgIGlm
IChwdGhyZWFkX3NlbGYoKSAhPSBtYWluVGhyZWFkKQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAoIXJvb3RPYmplY3QpCisgICAgICAgIHJldHVybjsKKworICAgIEpTRE9NV2luZG93KiB3aW5k
b3cgPSBzdGF0aWNfY2FzdDxKU0RPTVdpbmRvdyo+KHJvb3RPYmplY3QpOworICAgIGlmICghd2lu
ZG93KQorICAgICAgICByZXR1cm47CisKKyAgICBGcmFtZSogZnJhbWUgPSB3aW5kb3ctPmltcGwo
KS0+ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm47CisKKyAgICBEb2N1
bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKTsKKyAgICBpZiAoIWRvY3VtZW50KQor
ICAgICAgICByZXR1cm47CisKKyAgICBkb2N1bWVudC0+dXBkYXRlUmVuZGVyaW5nKCk7Cit9CisK
K3ZvaWQgU2NyaXB0Q29udHJvbGxlcjo6aW5pdEphdmFKU0JpbmRpbmdzKCkKK3sKKyAgICBtYWlu
VGhyZWFkID0gcHRocmVhZF9zZWxmKCk7CisgICAgS0pTOjpCaW5kaW5nczo6SmF2YUpTT2JqZWN0
Ojppbml0aWFsaXplSk5JVGhyZWFkaW5nKCk7CisgICAgS0pTOjpCaW5kaW5nczo6SW5zdGFuY2U6
OnNldERpZEV4ZWN1dGVGdW5jdGlvbih1cGRhdGVSZW5kZXJpbmdGb3JCaW5kaW5ncyk7Cit9Cisj
ZW5kaWYKKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9s
bGVyUXQuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyUXQuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlMGViZTIKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXJRdC5jcHAKQEAgLTAsMCAr
MSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxsZXJA
a2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgR2VvcmdlIFN0YWlrb3MgPHN0YWlrb3NAa2RlLm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAwNiBTaW1vbiBIYXVzbWFubiA8aGF1c21hbm5Aa2RlLm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDA3IFRyb2xsdGVjaCBBU0EKKyAqIENvcHlyaWdodCAoQykgMjAwOCBD
b2xsYWJvcmEgTHRkLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
OCBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xs
ZXIuaCIKKworI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgorI2luY2x1ZGUgIlBsdWdpblZpZXcuaCIK
KyNpbmNsdWRlICJxdF9pbnN0YW5jZS5oIgorI2luY2x1ZGUgInJ1bnRpbWVfcm9vdC5oIgorI2lu
Y2x1ZGUgInJ1bnRpbWUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVmUHRyPEtK
Uzo6QmluZGluZ3M6Okluc3RhbmNlPiBTY3JpcHRDb250cm9sbGVyOjpjcmVhdGVTY3JpcHRJbnN0
YW5jZUZvcldpZGdldChXZWJDb3JlOjpXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBpZiAod2lkZ2V0
LT5pc0ZyYW1lVmlldygpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAod2lkZ2V0LT5pc05Q
QVBJUGx1Z2luKCkpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3Kj4od2lk
Z2V0KS0+YmluZGluZ0luc3RhbmNlKCk7CisKKyAgICBRV2lkZ2V0KiBuYXRpdmVXaWRnZXQgPSB3
aWRnZXQtPm5hdGl2ZVdpZGdldCgpOworICAgIGlmICghbmF0aXZlV2lkZ2V0KQorICAgICAgICBy
ZXR1cm4gMDsKKyAgICByZXR1cm4gS0pTOjpCaW5kaW5nczo6UXRJbnN0YW5jZTo6Y3JlYXRlKG5h
dGl2ZVdpZGdldCwgYmluZGluZ1Jvb3RPYmplY3QoKSk7Cit9CisKK30KKy8vIHZpbTogdHM9NCBz
dz00IGV0CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXJX
aW4uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyV2luLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWMzYjAwCi0tLSAvZGV2L251bGwKKysr
IGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyV2luLmNwcApAQCAtMCwwICsx
LDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBFcmljIFNlaWRlbCA8
ZXJpY0B3ZWJraXQub3JnPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
U2NyaXB0Q29udHJvbGxlci5oIgorCisjaW5jbHVkZSAiUGx1Z2luVmlldy5oIgorI2luY2x1ZGUg
InJ1bnRpbWVfcm9vdC5oIgorCit1c2luZyBuYW1lc3BhY2UgS0pTOjpCaW5kaW5nczsKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVmUHRyPEtKUzo6QmluZGluZ3M6Okluc3RhbmNlPiBT
Y3JpcHRDb250cm9sbGVyOjpjcmVhdGVTY3JpcHRJbnN0YW5jZUZvcldpZGdldChXaWRnZXQqIHdp
ZGdldCkKK3sKKyAgICBpZiAod2lkZ2V0LT5pc1BsdWdpblZpZXcoKSkKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UGx1Z2luVmlldyo+KHdpZGdldCktPmJpbmRp
bmdJbnN0YW5jZSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tIGIvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5t
bQppbmRleCAzM2NiMzVjLi44ZWE4NmU4IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL29i
amMvRE9NLm1tCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0KQEAgLTU5LDYgKzU5
LDcgQEAKICNpbXBvcnQgIlJhbmdlLmgiCiAjaW1wb3J0ICJSZW5kZXJJbWFnZS5oIgogI2ltcG9y
dCAiUmVuZGVyVmlldy5oIgorI2ltcG9ydCAiU2NyaXB0Q29udHJvbGxlci5oIgogI2ltcG9ydCAi
U2ltcGxlRm9udERhdGEuaCIKICNpbXBvcnQgIlRleHQuaCIKICNpbXBvcnQgIlRyZWVXYWxrZXIu
aCIKQEAgLTQxNyw3ICs0MTgsNyBAQCBzdGF0aWMgTlNBcnJheSAqa2l0KGNvbnN0IFZlY3RvcjxJ
bnRSZWN0PiYgcmVjdHMpCiB7CiAgICAgaWYgKFdlYkNvcmU6Ok5vZGUgKm4gPSBbc2VsZiBfbm9k
ZV0pIHsKICAgICAgICAgaWYgKFdlYkNvcmU6OkZyYW1lKiBmcmFtZSA9IG4tPmRvY3VtZW50KCkt
PmZyYW1lKCkpCi0gICAgICAgICAgICByZXR1cm4gZnJhbWUtPmJpbmRpbmdSb290T2JqZWN0KCk7
CisgICAgICAgICAgICByZXR1cm4gZnJhbWUtPnNjcmlwdCgpLT5iaW5kaW5nUm9vdE9iamVjdCgp
OwogICAgIH0KICAgICByZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mv
b2JqYy9ET01JbnRlcm5hbC5tbSBiL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01JbnRlcm5hbC5t
bQppbmRleCA5N2UyNmM5Li5mZmI2MGVkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL29i
amMvRE9NSW50ZXJuYWwubW0KKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTUludGVybmFs
Lm1tCkBAIC0xMTksNyArMTE5LDcgQEAgdm9pZCByZW1vdmVET01XcmFwcGVyKERPTU9iamVjdElu
dGVybmFsKiBpbXBsKQogICAgIC8vIEdldCAob3IgY3JlYXRlKSBhIGNhY2hlZCBKUyBvYmplY3Qg
Zm9yIHRoZSBET00gbm9kZS4KICAgICBLSlM6OkpTT2JqZWN0ICpzY3JpcHRJbXAgPSBzdGF0aWNf
Y2FzdDxLSlM6OkpTT2JqZWN0Kj4oV2ViQ29yZTo6dG9KUyhleGVjLCBub2RlSW1wbCkpOwogCi0g
ICAgS0pTOjpCaW5kaW5nczo6Um9vdE9iamVjdCogcm9vdE9iamVjdCA9IGZyYW1lLT5iaW5kaW5n
Um9vdE9iamVjdCgpOworICAgIEtKUzo6QmluZGluZ3M6OlJvb3RPYmplY3QqIHJvb3RPYmplY3Qg
PSBmcmFtZS0+c2NyaXB0KCktPmJpbmRpbmdSb290T2JqZWN0KCk7CiAKICAgICBbc2VsZiBfc2V0
SW1wOnNjcmlwdEltcCBvcmlnaW5Sb290T2JqZWN0OnJvb3RPYmplY3Qgcm9vdE9iamVjdDpyb290
T2JqZWN0XTsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYnJpZGdlL2puaS9qbmlfanNvYmplY3Qu
bW0gYi9XZWJDb3JlL2JyaWRnZS9qbmkvam5pX2pzb2JqZWN0Lm1tCmluZGV4IGVlMWVhZTYuLjUz
ODQ3MWYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYnJpZGdlL2puaS9qbmlfanNvYmplY3QubW0KKysr
IGIvV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9qc29iamVjdC5tbQpAQCAtNDQxLDcgKzQ0MSw3IEBA
IHN0YXRpYyBQYXNzUmVmUHRyPFJvb3RPYmplY3Q+IGNyZWF0ZVJvb3RPYmplY3Qodm9pZCogbmF0
aXZlSGFuZGxlKQogICAgIH0KICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gMDsKLSAg
ICByZXR1cm4gZnJhbWUtPmNyZWF0ZVJvb3RPYmplY3QobmF0aXZlSGFuZGxlLCBmcmFtZS0+c2Ny
aXB0KCktPmdsb2JhbE9iamVjdCgpKTsKKyAgICByZXR1cm4gZnJhbWUtPnNjcmlwdCgpLT5jcmVh
dGVSb290T2JqZWN0KG5hdGl2ZUhhbmRsZSk7CiB9CiAKIC8vIFdlJ3JlIGVpdGhlciBjcmVhdGlu
ZyBhICdSb290JyBvYmplY3QgKHZpYSBhIGNhbGwgdG8gSmF2YUpTT2JqZWN0LmdldFdpbmRvdygp
KSwgb3IKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MQXBwbGV0RWxlbWVudC5jcHAgYi9X
ZWJDb3JlL2h0bWwvSFRNTEFwcGxldEVsZW1lbnQuY3BwCmluZGV4IDU1MjVhY2EuLjM3NTVjNzQg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MQXBwbGV0RWxlbWVudC5jcHAKKysrIGIvV2Vi
Q29yZS9odG1sL0hUTUxBcHBsZXRFbGVtZW50LmNwcApAQCAtMzAsMTAgKzMwLDcgQEAKICNpbmNs
dWRlICJSZW5kZXJBcHBsZXQuaCIKICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKICNpbmNsdWRl
ICJTZXR0aW5ncy5oIgotCi0jaWYgVVNFKEpBVkFTQ1JJUFRDT1JFX0JJTkRJTkdTKQotI2luY2x1
ZGUgInJ1bnRpbWUuaCIKLSNlbmRpZgorI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00NiwxMCArNDMsNiBAQCBIVE1MQXBwbGV0RWxlbWVu
dDo6SFRNTEFwcGxldEVsZW1lbnQoRG9jdW1lbnQqIGRvYykKIAogSFRNTEFwcGxldEVsZW1lbnQ6
On5IVE1MQXBwbGV0RWxlbWVudCgpCiB7Ci0jaWYgVVNFKEpBVkFTQ1JJUFRDT1JFX0JJTkRJTkdT
KQotICAgIC8vIG1faW5zdGFuY2Ugc2hvdWxkIGhhdmUgYmVlbiBjbGVhbmVkIHVwIGluIGRldGFj
aCgpLgotICAgIEFTU0VSVCghbV9pbnN0YW5jZSk7Ci0jZW5kaWYKIH0KIAogdm9pZCBIVE1MQXBw
bGV0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKQpA
QCAtMTQzLDIxICsxMzYsMTcgQEAgUmVuZGVyT2JqZWN0KiBIVE1MQXBwbGV0RWxlbWVudDo6Y3Jl
YXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqIGFyZW5hLCBSZW5kZXJTdHlsZSoKIH0KIAogI2lmIFVT
RShKQVZBU0NSSVBUQ09SRV9CSU5ESU5HUykKLUtKUzo6QmluZGluZ3M6Okluc3RhbmNlKiBIVE1M
QXBwbGV0RWxlbWVudDo6Z2V0SW5zdGFuY2UoKSBjb25zdAorUmVuZGVyV2lkZ2V0KiBIVE1MQXBw
bGV0RWxlbWVudDo6cmVuZGVyV2lkZ2V0Rm9ySlNCaW5kaW5ncygpIGNvbnN0CiB7CiAgICAgU2V0
dGluZ3MqIHNldHRpbmdzID0gZG9jdW1lbnQoKS0+c2V0dGluZ3MoKTsKICAgICBpZiAoIXNldHRp
bmdzIHx8ICFzZXR0aW5ncy0+aXNKYXZhRW5hYmxlZCgpKQogICAgICAgICByZXR1cm4gMDsKIAot
ICAgIGlmIChtX2luc3RhbmNlKQotICAgICAgICByZXR1cm4gbV9pbnN0YW5jZS5nZXQoKTsKLSAg
ICAKLSAgICBpZiAoUmVuZGVyQXBwbGV0KiByID0gc3RhdGljX2Nhc3Q8UmVuZGVyQXBwbGV0Kj4o
cmVuZGVyZXIoKSkpIHsKLSAgICAgICAgci0+Y3JlYXRlV2lkZ2V0SWZOZWNlc3NhcnkoKTsKLSAg
ICAgICAgaWYgKHItPndpZGdldCgpICYmIGRvY3VtZW50KCktPmZyYW1lKCkpCi0gICAgICAgICAg
ICBtX2luc3RhbmNlID0gZG9jdW1lbnQoKS0+ZnJhbWUoKS0+Y3JlYXRlU2NyaXB0SW5zdGFuY2VG
b3JXaWRnZXQoci0+d2lkZ2V0KCkpOwotICAgIH0KLSAgICByZXR1cm4gbV9pbnN0YW5jZS5nZXQo
KTsKKyAgICBSZW5kZXJBcHBsZXQqIGFwcGxldCA9IHN0YXRpY19jYXN0PFJlbmRlckFwcGxldCo+
KHJlbmRlcmVyKCkpOworICAgIGlmIChhcHBsZXQpCisgICAgICAgIGFwcGxldC0+Y3JlYXRlV2lk
Z2V0SWZOZWNlc3NhcnkoKTsKKworICAgIHJldHVybiBhcHBsZXQ7CiB9CiAjZW5kaWYKIApAQCAt
MTY5LDE0ICsxNTgsNiBAQCB2b2lkIEhUTUxBcHBsZXRFbGVtZW50OjpmaW5pc2hQYXJzaW5nQ2hp
bGRyZW4oKQogICAgICAgICByZW5kZXJlcigpLT5zZXROZWVkc0xheW91dCh0cnVlKTsgLy8gVGhp
cyB3aWxsIGNhdXNlIGl0IHRvIGNyZWF0ZSBpdHMgd2lkZ2V0ICYgdGhlIEphdmEgYXBwbGV0CiB9
CiAKLXZvaWQgSFRNTEFwcGxldEVsZW1lbnQ6OmRldGFjaCgpCi17Ci0jaWYgVVNFKEpBVkFTQ1JJ
UFRDT1JFX0JJTkRJTkdTKQotICAgIG1faW5zdGFuY2UgPSAwOwotI2VuZGlmCi0gICAgSFRNTFBs
dWdJbkVsZW1lbnQ6OmRldGFjaCgpOwotfQotCiBTdHJpbmcgSFRNTEFwcGxldEVsZW1lbnQ6OmFs
dCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZShhbHRBdHRyKTsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaHRtbC9IVE1MQXBwbGV0RWxlbWVudC5oIGIvV2ViQ29yZS9odG1sL0hUTUxB
cHBsZXRFbGVtZW50LmgKaW5kZXggMzE3OWU0My4uY2VlNGZlZCAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9odG1sL0hUTUxBcHBsZXRFbGVtZW50LmgKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxBcHBsZXRF
bGVtZW50LmgKQEAgLTI1LDE0ICsyNSw2IEBACiAKICNpbmNsdWRlICJIVE1MUGx1Z0luRWxlbWVu
dC5oIgogCi0jaWYgVVNFKEpBVkFTQ1JJUFRDT1JFX0JJTkRJTkdTKQotbmFtZXNwYWNlIEtKUyB7
IAotICAgIG5hbWVzcGFjZSBCaW5kaW5ncyB7IAotICAgICAgICBjbGFzcyBJbnN0YW5jZTsKLSAg
ICB9IAotfQotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSFRNTEZvcm1F
bGVtZW50OwpAQCAtNTEsMTAgKzQzLDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCByZW5k
ZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlKik7CiAgICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGNy
ZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKICAgICB2aXJ0dWFsIHZv
aWQgZmluaXNoUGFyc2luZ0NoaWxkcmVuKCk7Ci0gICAgdmlydHVhbCB2b2lkIGRldGFjaCgpOwog
ICAgIAogI2lmIFVTRShKQVZBU0NSSVBUQ09SRV9CSU5ESU5HUykKLSAgICB2aXJ0dWFsIEtKUzo6
QmluZGluZ3M6Okluc3RhbmNlKiBnZXRJbnN0YW5jZSgpIGNvbnN0OworICAgIHZpcnR1YWwgUmVu
ZGVyV2lkZ2V0KiByZW5kZXJXaWRnZXRGb3JKU0JpbmRpbmdzKCkgY29uc3Q7CiAjZW5kaWYKIAog
ICAgIFN0cmluZyBhbHQoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MRW1i
ZWRFbGVtZW50LmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MRW1iZWRFbGVtZW50LmNwcAppbmRleCA4
NGEzYTJjLi43MmJiNmM1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVu
dC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQuY3BwCkBAIC0zMiwxMCAr
MzIsNyBAQAogI2luY2x1ZGUgIkhUTUxPYmplY3RFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5h
bWVzLmgiCiAjaW5jbHVkZSAiUmVuZGVyUGFydE9iamVjdC5oIgotCi0jaWYgVVNFKEpBVkFTQ1JJ
UFRDT1JFX0JJTkRJTkdTKQotI2luY2x1ZGUgInJ1bnRpbWUuaCIKLSNlbmRpZgorI2luY2x1ZGUg
IlNjcmlwdENvbnRyb2xsZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00OSwxMCAr
NDYsNiBAQCBIVE1MRW1iZWRFbGVtZW50OjpIVE1MRW1iZWRFbGVtZW50KERvY3VtZW50KiBkb2Mp
CiAKIEhUTUxFbWJlZEVsZW1lbnQ6On5IVE1MRW1iZWRFbGVtZW50KCkKIHsKLSNpZiBVU0UoSkFW
QVNDUklQVENPUkVfQklORElOR1MpCi0gICAgLy8gbV9pbnN0YW5jZSBzaG91bGQgaGF2ZSBiZWVu
IGNsZWFuZWQgdXAgaW4gZGV0YWNoKCkuCi0gICAgQVNTRVJUKCFtX2luc3RhbmNlKTsKLSNlbmRp
ZgogfQogCiAjaWYgVVNFKEpBVkFTQ1JJUFRDT1JFX0JJTkRJTkdTKQpAQCAtNjIsMzAgKzU1LDIx
IEBAIHN0YXRpYyBpbmxpbmUgUmVuZGVyV2lkZ2V0KiBmaW5kV2lkZ2V0UmVuZGVyZXIoY29uc3Qg
Tm9kZSogbikKICAgICAgICAgZG8KICAgICAgICAgICAgIG4gPSBuLT5wYXJlbnROb2RlKCk7CiAg
ICAgICAgIHdoaWxlIChuICYmICFuLT5oYXNUYWdOYW1lKG9iamVjdFRhZykpOwotICAgIAotICAg
IHJldHVybiAobiAmJiBuLT5yZW5kZXJlcigpICYmIG4tPnJlbmRlcmVyKCktPmlzV2lkZ2V0KCkp
IAotICAgICAgICA/IHN0YXRpY19jYXN0PFJlbmRlcldpZGdldCo+KG4tPnJlbmRlcmVyKCkpIDog
MDsKKworICAgIGlmIChuICYmIG4tPnJlbmRlcmVyKCkgJiYgbi0+cmVuZGVyZXIoKS0+aXNXaWRn
ZXQoKSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlcldpZGdldCo+KG4tPnJlbmRl
cmVyKCkpOworCisgICAgcmV0dXJuIDA7CiB9CiAgICAgCi1LSlM6OkJpbmRpbmdzOjpJbnN0YW5j
ZSogSFRNTEVtYmVkRWxlbWVudDo6Z2V0SW5zdGFuY2UoKSBjb25zdAorUmVuZGVyV2lkZ2V0KiBI
VE1MRW1iZWRFbGVtZW50OjpyZW5kZXJXaWRnZXRGb3JKU0JpbmRpbmdzKCkgY29uc3QKIHsKLSAg
ICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0g
ICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKG1faW5zdGFuY2UpCi0gICAgICAgIHJldHVybiBt
X2luc3RhbmNlLmdldCgpOwotICAgIAogICAgIFJlbmRlcldpZGdldCogcmVuZGVyV2lkZ2V0ID0g
ZmluZFdpZGdldFJlbmRlcmVyKHRoaXMpOwogICAgIGlmIChyZW5kZXJXaWRnZXQgJiYgIXJlbmRl
cldpZGdldC0+d2lkZ2V0KCkpIHsKICAgICAgICAgZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdu
b3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAgICAgICAgIHJlbmRlcldpZGdldCA9IGZpbmRXaWRn
ZXRSZW5kZXJlcih0aGlzKTsKICAgICB9Ci0gICAgCi0gICAgaWYgKHJlbmRlcldpZGdldCAmJiBy
ZW5kZXJXaWRnZXQtPndpZGdldCgpKSAKLSAgICAgICAgbV9pbnN0YW5jZSA9IGZyYW1lLT5jcmVh
dGVTY3JpcHRJbnN0YW5jZUZvcldpZGdldChyZW5kZXJXaWRnZXQtPndpZGdldCgpKTsKLSAgICAK
LSAgICByZXR1cm4gbV9pbnN0YW5jZS5nZXQoKTsKKyAgICByZXR1cm4gcmVuZGVyV2lkZ2V0Owog
fQogI2VuZGlmCiAKQEAgLTE1NywxNCArMTQxLDYgQEAgdm9pZCBIVE1MRW1iZWRFbGVtZW50Ojph
dHRhY2goKQogICAgIEhUTUxQbHVnSW5FbGVtZW50OjphdHRhY2goKTsKIH0KIAotdm9pZCBIVE1M
RW1iZWRFbGVtZW50OjpkZXRhY2goKQotewotI2lmIFVTRShKQVZBU0NSSVBUQ09SRV9CSU5ESU5H
UykKLSAgICBtX2luc3RhbmNlID0gMDsKLSNlbmRpZgotICAgIEhUTUxQbHVnSW5FbGVtZW50Ojpk
ZXRhY2goKTsKLX0KLQogdm9pZCBIVE1MRW1iZWRFbGVtZW50Ojp1cGRhdGVXaWRnZXQoKQogewog
ICAgIGRvY3VtZW50KCktPnVwZGF0ZVJlbmRlcmluZygpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9o
dG1sL0hUTUxFbWJlZEVsZW1lbnQuaCBiL1dlYkNvcmUvaHRtbC9IVE1MRW1iZWRFbGVtZW50LmgK
aW5kZXggZmI0YmM0ZC4uNzkwNTNmNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxFbWJl
ZEVsZW1lbnQuaAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVudC5oCkBAIC0yNSwx
NCArMjUsNiBAQAogCiAjaW5jbHVkZSAiSFRNTFBsdWdJbkVsZW1lbnQuaCIKIAotI2lmIFVTRShK
QVZBU0NSSVBUQ09SRV9CSU5ESU5HUykKLW5hbWVzcGFjZSBLSlMgewotICAgIG5hbWVzcGFjZSBC
aW5kaW5ncyB7Ci0gICAgICAgIGNsYXNzIEluc3RhbmNlOwotICAgIH0KLX0KLSNlbmRpZgotCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEhUTUxFbWJlZEVsZW1lbnQgOiBwdWJsaWMgSFRN
TFBsdWdJbkVsZW1lbnQgewpAQCAtNDgsNyArNDAsNiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFs
IHZvaWQgYXR0YWNoKCk7CiAgICAgdmlydHVhbCBib29sIGNhbkxhenlBdHRhY2goKSB7IHJldHVy
biBmYWxzZTsgfQotICAgIHZpcnR1YWwgdm9pZCBkZXRhY2goKTsKICAgICB2aXJ0dWFsIGJvb2wg
cmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSopOwogICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0
KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKik7CiAgICAgdmlydHVh
bCB2b2lkIGluc2VydGVkSW50b0RvY3VtZW50KCk7CkBAIC02MSw3ICs1Miw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNldE5lZWRXaWRnZXRVcGRhdGUoYm9vbCBuZWVkV2lkZ2V0VXBkYXRlKSB7IG1f
bmVlZFdpZGdldFVwZGF0ZSA9IG5lZWRXaWRnZXRVcGRhdGU7IH0KIAogI2lmIFVTRShKQVZBU0NS
SVBUQ09SRV9CSU5ESU5HUykKLSAgICB2aXJ0dWFsIEtKUzo6QmluZGluZ3M6Okluc3RhbmNlKiBn
ZXRJbnN0YW5jZSgpIGNvbnN0OworICAgIHZpcnR1YWwgUmVuZGVyV2lkZ2V0KiByZW5kZXJXaWRn
ZXRGb3JKU0JpbmRpbmdzKCkgY29uc3Q7CiAjZW5kaWYKIAogICAgIFN0cmluZyBzcmMoKSBjb25z
dDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAgYi9XZWJD
b3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwCmluZGV4IGJiZjFlNmIuLjI4ZmFiYmYgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAKKysrIGIvV2ViQ29y
ZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcApAQCAtNDAsMTIgKzQwLDkgQEAKICNpbmNsdWRl
ICJSZW5kZXJJbWFnZS5oIgogI2luY2x1ZGUgIlJlbmRlclBhcnRPYmplY3QuaCIKICNpbmNsdWRl
ICJSZW5kZXJXaWRnZXQuaCIKKyNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCiAjaW5jbHVk
ZSAiVGV4dC5oIgogCi0jaWYgVVNFKEpBVkFTQ1JJUFRDT1JFX0JJTkRJTkdTKQotI2luY2x1ZGUg
InJ1bnRpbWUuaCIKLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVz
cGFjZSBFdmVudE5hbWVzOwpAQCAtNjEsMzEgKzU4LDE3IEBAIEhUTUxPYmplY3RFbGVtZW50OjpI
VE1MT2JqZWN0RWxlbWVudChEb2N1bWVudCogZG9jLCBib29sIGNyZWF0ZWRCeVBhcnNlcikKIAog
SFRNTE9iamVjdEVsZW1lbnQ6On5IVE1MT2JqZWN0RWxlbWVudCgpCiB7Ci0jaWYgVVNFKEpBVkFT
Q1JJUFRDT1JFX0JJTkRJTkdTKQotICAgIC8vIG1faW5zdGFuY2Ugc2hvdWxkIGhhdmUgYmVlbiBj
bGVhbmVkIHVwIGluIGRldGFjaCgpLgotICAgIEFTU0VSVCghbV9pbnN0YW5jZSk7Ci0jZW5kaWYK
IH0KIAogI2lmIFVTRShKQVZBU0NSSVBUQ09SRV9CSU5ESU5HUykKLUtKUzo6QmluZGluZ3M6Oklu
c3RhbmNlICpIVE1MT2JqZWN0RWxlbWVudDo6Z2V0SW5zdGFuY2UoKSBjb25zdAorUmVuZGVyV2lk
Z2V0KiBIVE1MT2JqZWN0RWxlbWVudDo6cmVuZGVyV2lkZ2V0Rm9ySlNCaW5kaW5ncygpIGNvbnN0
CiB7Ci0gICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKTsKLSAgICBpZiAoIWZy
YW1lKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmIChtX2luc3RhbmNlKQotICAgICAgICBy
ZXR1cm4gbV9pbnN0YW5jZS5nZXQoKTsKLQogICAgIFJlbmRlcldpZGdldCogcmVuZGVyV2lkZ2V0
ID0gKHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+aXNXaWRnZXQoKSkgPyBzdGF0aWNfY2FzdDxS
ZW5kZXJXaWRnZXQqPihyZW5kZXJlcigpKSA6IDA7CiAgICAgaWYgKHJlbmRlcldpZGdldCAmJiAh
cmVuZGVyV2lkZ2V0LT53aWRnZXQoKSkgewogICAgICAgICBkb2N1bWVudCgpLT51cGRhdGVMYXlv
dXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKICAgICAgICAgcmVuZGVyV2lkZ2V0ID0gKHJl
bmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+aXNXaWRnZXQoKSkgPyBzdGF0aWNfY2FzdDxSZW5kZXJX
aWRnZXQqPihyZW5kZXJlcigpKSA6IDA7Ci0gICAgfSAgICAgICAgICAKLSAgICBpZiAocmVuZGVy
V2lkZ2V0ICYmIHJlbmRlcldpZGdldC0+d2lkZ2V0KCkpIAotICAgICAgICBtX2luc3RhbmNlID0g
ZnJhbWUtPmNyZWF0ZVNjcmlwdEluc3RhbmNlRm9yV2lkZ2V0KHJlbmRlcldpZGdldC0+d2lkZ2V0
KCkpOwotCi0gICAgcmV0dXJuIG1faW5zdGFuY2UuZ2V0KCk7CisgICAgfQorICAgIHJldHVybiBy
ZW5kZXJXaWRnZXQ7CiB9CiAjZW5kaWYKIApAQCAtMjAzLDE0ICsxODYsOSBAQCB2b2lkIEhUTUxP
YmplY3RFbGVtZW50OjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oKQogCiB2b2lkIEhUTUxPYmplY3RF
bGVtZW50OjpkZXRhY2goKQogewotICAgIGlmIChhdHRhY2hlZCgpICYmIHJlbmRlcmVyKCkgJiYg
IW1fdXNlRmFsbGJhY2tDb250ZW50KSB7CisgICAgaWYgKGF0dGFjaGVkKCkgJiYgcmVuZGVyZXIo
KSAmJiAhbV91c2VGYWxsYmFja0NvbnRlbnQpCiAgICAgICAgIC8vIFVwZGF0ZSB0aGUgd2lkZ2V0
IHRoZSBuZXh0IHRpbWUgd2UgYXR0YWNoIChkZXRhY2hpbmcgZGVzdHJveXMgdGhlIHBsdWdpbiku
CiAgICAgICAgIG1fbmVlZFdpZGdldFVwZGF0ZSA9IHRydWU7Ci0gICAgfQotCi0jaWYgVVNFKEpB
VkFTQ1JJUFRDT1JFX0JJTkRJTkdTKQotICAgIG1faW5zdGFuY2UgPSAwOwotI2VuZGlmCiAgICAg
SFRNTFBsdWdJbkVsZW1lbnQ6OmRldGFjaCgpOwogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0
bWwvSFRNTE9iamVjdEVsZW1lbnQuaCBiL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5o
CmluZGV4IGNhMjA1ZDcuLjdmNmI3OTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MT2Jq
ZWN0RWxlbWVudC5oCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5oCkBAIC02
Myw3ICs2Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbmRlckZhbGxiYWNrQ29udGVudCgpOwog
CiAjaWYgVVNFKEpBVkFTQ1JJUFRDT1JFX0JJTkRJTkdTKQotICAgIHZpcnR1YWwgS0pTOjpCaW5k
aW5nczo6SW5zdGFuY2UqIGdldEluc3RhbmNlKCkgY29uc3Q7CisgICAgdmlydHVhbCBSZW5kZXJX
aWRnZXQqIHJlbmRlcldpZGdldEZvckpTQmluZGluZ3MoKSBjb25zdDsKICNlbmRpZgogCiAgICAg
U3RyaW5nIGFyY2hpdmUoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MUGx1
Z0luRWxlbWVudC5jcHAgYi9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkVsZW1lbnQuY3BwCmluZGV4
IDI4NDU3YWQuLjBjODY1ZmQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luRWxl
bWVudC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5FbGVtZW50LmNwcApAQCAtMzAs
NyArMzAsNiBAQAogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVUcmVl
LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiSlNOb2RlLmgiCiAjaW5jbHVk
ZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgogI2luY2x1ZGUgIlNldHRpbmdz
LmgiCkBAIC00MiwxNSArNDEsMTIgQEAKICNlbmRpZgogCiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BM
VUdJTl9BUEkpCisjaW5jbHVkZSAiSlNOb2RlLmgiCiAjaW5jbHVkZSAiTlBfanNvYmplY3QuaCIK
ICNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgogI2luY2x1ZGUgInJ1bnRpbWVfcm9vdC5oIgog
I2VuZGlmCiAKLXVzaW5nIEtKUzo6RXhlY1N0YXRlOwotdXNpbmcgS0pTOjpKU1ZhbHVlOwotdXNp
bmcgS0pTOjpCaW5kaW5nczo6Um9vdE9iamVjdDsKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1
c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwpAQCAtNjUsNiArNjEsMTAgQEAgSFRNTFBsdWdJbkVs
ZW1lbnQ6OkhUTUxQbHVnSW5FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERv
Y3VtZW50KiBkb2MKIAogSFRNTFBsdWdJbkVsZW1lbnQ6On5IVE1MUGx1Z0luRWxlbWVudCgpCiB7
CisjaWYgVVNFKEpBVkFTQ1JJUFRDT1JFX0JJTkRJTkdTKQorICAgIEFTU0VSVCghbV9pbnN0YW5j
ZSk7IC8vIGNsZWFyZWQgaW4gZGV0YWNoKCkKKyNlbmRpZgorCiAjaWYgRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9BUEkpCiAgICAgaWYgKG1fTlBPYmplY3QpIHsKICAgICAgICAgX05QTl9SZWxlYXNl
T2JqZWN0KG1fTlBPYmplY3QpOwpAQCAtNzMsNiArNzMsMzIgQEAgSFRNTFBsdWdJbkVsZW1lbnQ6
On5IVE1MUGx1Z0luRWxlbWVudCgpCiAjZW5kaWYKIH0KIAorI2lmIFVTRShKQVZBU0NSSVBUQ09S
RV9CSU5ESU5HUykKK3ZvaWQgSFRNTFBsdWdJbkVsZW1lbnQ6OmRldGFjaCgpCit7CisgICAgbV9p
bnN0YW5jZS5jbGVhcigpOworICAgIEhUTUxGcmFtZU93bmVyRWxlbWVudDo6ZGV0YWNoKCk7Cit9
CisKK0tKUzo6QmluZGluZ3M6Okluc3RhbmNlKiBIVE1MUGx1Z0luRWxlbWVudDo6Z2V0SW5zdGFu
Y2UoKSBjb25zdAoreworICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCk7Cisg
ICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBJZiB0aGUgaG9zdCBk
eW5hbWljYWxseSB0dXJucyBvZmYgSmF2YVNjcmlwdCAob3IgSmF2YSkgd2Ugd2lsbCBzdGlsbCBy
ZXR1cm4KKyAgICAvLyB0aGUgY2FjaGVkIGFsbG9jYXRlZCBCaW5kaW5nczo6SW5zdGFuY2UuICBO
b3Qgc3VwcG9ydGluZyB0aGlzIGVkZ2UtY2FzZSBpcyBPSy4KKyAgICBpZiAobV9pbnN0YW5jZSkK
KyAgICAgICAgcmV0dXJuIG1faW5zdGFuY2UuZ2V0KCk7CisKKyAgICBSZW5kZXJXaWRnZXQqIHJl
bmRlcldpZGdldCA9IHJlbmRlcldpZGdldEZvckpTQmluZGluZ3MoKTsKKyAgICBpZiAocmVuZGVy
V2lkZ2V0ICYmIHJlbmRlcldpZGdldC0+d2lkZ2V0KCkpCisgICAgICAgIG1faW5zdGFuY2UgPSBm
cmFtZS0+c2NyaXB0KCktPmNyZWF0ZVNjcmlwdEluc3RhbmNlRm9yV2lkZ2V0KHJlbmRlcldpZGdl
dC0+d2lkZ2V0KCkpOworCisgICAgcmV0dXJuIG1faW5zdGFuY2UuZ2V0KCk7Cit9CisjZW5kaWYK
KwogU3RyaW5nIEhUTUxQbHVnSW5FbGVtZW50OjphbGlnbigpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IGdldEF0dHJpYnV0ZShhbGlnbkF0dHIpOwpAQCAtMTQ3LDcgKzE3Myw3IEBAIHZvaWQgSFRNTFBs
dWdJbkVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSogYXR0cikK
ICAgICAgICAgYWRkSFRNTEFsaWdubWVudChhdHRyKTsKICAgICBlbHNlCiAgICAgICAgIEhUTUxG
cmFtZU93bmVyRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7Ci19ICAgIAorfQog
CiBib29sIEhUTUxQbHVnSW5FbGVtZW50OjpjaGVja0RURChjb25zdCBOb2RlKiBuZXdDaGlsZCkK
IHsKQEAgLTE2Niw0MSArMTkyLDExIEBAIHZvaWQgSFRNTFBsdWdJbkVsZW1lbnQ6OmRlZmF1bHRF
dmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogCiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9B
UEkpCiAKLU5QT2JqZWN0KiBIVE1MUGx1Z0luRWxlbWVudDo6Y3JlYXRlTlBPYmplY3QoKQotewot
ICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkg
ewotICAgICAgICAvLyBUaGlzIHNob3VsZG4ndCBldmVyIGhhcHBlbiwgYnV0IG1pZ2h0IGFzIHdl
bGwgY2hlY2sgYW55d2F5LgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
cmV0dXJuIF9OUE5fQ3JlYXRlTm9TY3JpcHRPYmplY3QoKTsKLSAgICB9Ci0KLSAgICBTZXR0aW5n
cyogc2V0dGluZ3MgPSBmcmFtZS0+c2V0dGluZ3MoKTsKLSAgICBpZiAoIXNldHRpbmdzKSB7Ci0g
ICAgICAgIC8vIFRoaXMgc2hvdWxkbid0IGV2ZXIgaGFwcGVuLCBidXQgbWlnaHQgYXMgd2VsbCBj
aGVjayBhbnl3YXkuCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1
cm4gX05QTl9DcmVhdGVOb1NjcmlwdE9iamVjdCgpOwotICAgIH0KLQotICAgIC8vIENhbid0IGNy
ZWF0ZSBOUE9iamVjdHMgd2hlbiBKYXZhU2NyaXB0IGlzIGRpc2FibGVkCi0gICAgaWYgKCFmcmFt
ZS0+c2NyaXB0KCktPmlzRW5hYmxlZCgpKQotICAgICAgICByZXR1cm4gX05QTl9DcmVhdGVOb1Nj
cmlwdE9iamVjdCgpOwotICAgIAotICAgIC8vIENyZWF0ZSBhIEpTT2JqZWN0IGJvdW5kIHRvIHRo
aXMgZWxlbWVudAotICAgIEV4ZWNTdGF0ZSAqZXhlYyA9IGZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFs
T2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICBKU1ZhbHVlKiBqc0VsZW1lbnRWYWx1ZSA9IHRv
SlMoZXhlYywgdGhpcyk7Ci0gICAgaWYgKCFqc0VsZW1lbnRWYWx1ZSB8fCAhanNFbGVtZW50VmFs
dWUtPmlzT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiBfTlBOX0NyZWF0ZU5vU2NyaXB0T2JqZWN0
KCk7Ci0KLSAgICAvLyBXcmFwIHRoZSBKU09iamVjdCBpbiBhbiBOUE9iamVjdAotICAgIFJvb3RP
YmplY3QqIHJvb3RPYmplY3QgPSBmcmFtZS0+YmluZGluZ1Jvb3RPYmplY3QoKTsKLSAgICByZXR1
cm4gX05QTl9DcmVhdGVTY3JpcHRPYmplY3QoMCwganNFbGVtZW50VmFsdWUtPmdldE9iamVjdCgp
LCByb290T2JqZWN0KTsKLX0KLQogTlBPYmplY3QqIEhUTUxQbHVnSW5FbGVtZW50OjpnZXROUE9i
amVjdCgpCiB7CisgICAgQVNTRVJUKGRvY3VtZW50KCktPmZyYW1lKCkpOwogICAgIGlmICghbV9O
UE9iamVjdCkKLSAgICAgICAgbV9OUE9iamVjdCA9IGNyZWF0ZU5QT2JqZWN0KCk7CisgICAgICAg
IG1fTlBPYmplY3QgPSBkb2N1bWVudCgpLT5mcmFtZSgpLT5zY3JpcHQoKS0+Y3JlYXRlU2NyaXB0
T2JqZWN0Rm9yUGx1Z2luRWxlbWVudCh0aGlzKTsKICAgICByZXR1cm4gbV9OUE9iamVjdDsKIH0K
IApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5FbGVtZW50LmggYi9XZWJDb3Jl
L2h0bWwvSFRNTFBsdWdJbkVsZW1lbnQuaAppbmRleCBlNWI2ZDRlLi43ZjI4ODQwIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkVsZW1lbnQuaAorKysgYi9XZWJDb3JlL2h0bWwv
SFRNTFBsdWdJbkVsZW1lbnQuaApAQCAtMzksNiArMzksOCBAQCBzdHJ1Y3QgTlBPYmplY3Q7CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgUmVuZGVyV2lkZ2V0OworCiBjbGFzcyBIVE1M
UGx1Z0luRWxlbWVudCA6IHB1YmxpYyBIVE1MRnJhbWVPd25lckVsZW1lbnQgewogcHVibGljOgog
ICAgIEhUTUxQbHVnSW5FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3Vt
ZW50Kik7CkBAIC02NywxNSArNjksMTMgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkZWZh
dWx0RXZlbnRIYW5kbGVyKEV2ZW50Kik7CiAKICNpZiBVU0UoSkFWQVNDUklQVENPUkVfQklORElO
R1MpCi0gICAgdmlydHVhbCBLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZSogZ2V0SW5zdGFuY2UoKSBj
b25zdCA9IDA7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICB2
aXJ0dWFsIE5QT2JqZWN0KiBnZXROUE9iamVjdCgpOworICAgIHZpcnR1YWwgdm9pZCBkZXRhY2go
KTsKKyAgICB2aXJ0dWFsIFJlbmRlcldpZGdldCogcmVuZGVyV2lkZ2V0Rm9ySlNCaW5kaW5ncygp
IGNvbnN0ID0gMDsKKyAgICBLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZSogZ2V0SW5zdGFuY2UoKSBj
b25zdDsKICNlbmRpZgogCi1wcml2YXRlOgogI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJ
KQotICAgIE5QT2JqZWN0KiBjcmVhdGVOUE9iamVjdCgpOworICAgIHZpcnR1YWwgTlBPYmplY3Qq
IGdldE5QT2JqZWN0KCk7CiAjZW5kaWYKIAogcHJvdGVjdGVkOgpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwIGIvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3Bw
CmluZGV4IGMwMGE3YmEuLmNhYTJhNjQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbG9hZGVyL0ZyYW1l
TG9hZGVyLmNwcAorKysgYi9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKQEAgLTgzMCwy
NiArODMwLDI2IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmNsZWFyKGJvb2wgY2xlYXJXaW5kb3dQcm9w
ZXJ0aWVzLCBib29sIGNsZWFyU2NyaXB0T2JqZWN0cykKICAgICAvLyBEbyB0aGlzIGFmdGVyIGRl
dGFjaGluZyB0aGUgZG9jdW1lbnQgc28gdGhhdCB0aGUgdW5sb2FkIGV2ZW50IHdvcmtzLgogICAg
IGlmIChjbGVhcldpbmRvd1Byb3BlcnRpZXMpIHsKICAgICAgICAgbV9mcmFtZS0+Y2xlYXJET01X
aW5kb3coKTsKLSAgICAgICAgbV9mcmFtZS0+Y2xlYXJTY3JpcHRDb250cm9sbGVyKCk7CisgICAg
ICAgIG1fZnJhbWUtPnNjcmlwdCgpLT5jbGVhcldpbmRvd1NoZWxsKCk7CiAgICAgfQogCiAgICAg
bV9mcmFtZS0+c2VsZWN0aW9uKCktPmNsZWFyKCk7CiAgICAgbV9mcmFtZS0+ZXZlbnRIYW5kbGVy
KCktPmNsZWFyKCk7CiAgICAgaWYgKG1fZnJhbWUtPnZpZXcoKSkKICAgICAgICAgbV9mcmFtZS0+
dmlldygpLT5jbGVhcigpOwotICAgIAorCiAgICAgbV9mcmFtZS0+c2V0U2VsZWN0aW9uR3JhbnVs
YXJpdHkoQ2hhcmFjdGVyR3JhbnVsYXJpdHkpOwogCi0gICAgLy8gRG8gbm90IGRyb3AgdGhlIGRv
Y3VtZW50IGJlZm9yZSB0aGUgc2NyaXB0IHByb3h5IGFuZCB2aWV3IGFyZSBjbGVhcmVkLCBhcyBz
b21lIGRlc3RydWN0b3JzCi0gICAgLy8gbWlnaHQgc3RpbGwgdHJ5IHRvIGFjY2VzcyB0aGUgZG9j
dW1lbnQuCisgICAgLy8gRG8gbm90IGRyb3AgdGhlIGRvY3VtZW50IGJlZm9yZSB0aGUgU2NyaXB0
Q29udHJvbGxlciBhbmQgdmlldyBhcmUgY2xlYXJlZAorICAgIC8vIGFzIHNvbWUgZGVzdHJ1Y3Rv
cnMgbWlnaHQgc3RpbGwgdHJ5IHRvIGFjY2VzcyB0aGUgZG9jdW1lbnQuCiAgICAgbV9mcmFtZS0+
c2V0RG9jdW1lbnQoMCk7CiAgICAgbV9kZWNvZGVyID0gMDsKIAogICAgIG1fY29udGFpbnNQbHVn
SW5zID0gZmFsc2U7Ci0gICAgCisKICAgICBpZiAoY2xlYXJTY3JpcHRPYmplY3RzKQotICAgICAg
ICBtX2ZyYW1lLT5jbGVhclNjcmlwdE9iamVjdHMoKTsKLSAgCisgICAgICAgIG1fZnJhbWUtPnNj
cmlwdCgpLT5jbGVhclNjcmlwdE9iamVjdHMoKTsKKwogICAgIG1fcmVkaXJlY3Rpb25UaW1lci5z
dG9wKCk7CiAgICAgbV9zY2hlZHVsZWRSZWRpcmVjdGlvbi5jbGVhcigpOwogCmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwIGIvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAppbmRleCBl
MDYxZTg1Li5kOWE4NTE4IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCisrKyBi
L1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKQEAgLTgsNiArOCw3IEBACiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICogQ29weXJpZ2h0IChDKSAyMDA1IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQG55cG9wLmNvbT4K
ICAqIENvcHlyaWdodCAoQykgMjAwNyBUcm9sbHRlY2ggQVNBCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDggRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAt
NTYsNyArNTcsNiBAQAogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJtYXJrdXAuaCIK
ICNpbmNsdWRlICJNZWRpYUZlYXR1cmVOYW1lcy5oIgotI2luY2x1ZGUgIk5QX2pzb2JqZWN0Lmgi
CiAjaW5jbHVkZSAiTmF2aWdhdG9yLmgiCiAjaW5jbHVkZSAiTm9kZUxpc3QuaCIKICNpbmNsdWRl
ICJQYWdlLmgiCkBAIC0xMjQsMTQgKzEyNCw2IEBAIEZyYW1lOjpGcmFtZShQYWdlKiBwYWdlLCBI
VE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyRWxlbWVudCwgRnJhbWVMb2FkZXJDbGllbnQqCiAK
ICAgICBYTUxOYW1lczo6aW5pdCgpOwogCi0jaWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoTUFD
X0pBVkFfQlJJREdFKQotICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVkSmF2YUpTQmluZGluZ3M7
Ci0gICAgaWYgKCFpbml0aWFsaXplZEphdmFKU0JpbmRpbmdzKSB7Ci0gICAgICAgIGluaXRpYWxp
emVkSmF2YUpTQmluZGluZ3MgPSB0cnVlOwotICAgICAgICBpbml0SmF2YUpTQmluZGluZ3MoKTsK
LSAgICB9Ci0jZW5kaWYKLQogICAgIGlmICghb3duZXJFbGVtZW50KQogICAgICAgICBwYWdlLT5z
ZXRNYWluRnJhbWUodGhpcyk7CiAgICAgZWxzZSB7CkBAIC0xNzUsOCArMTY3LDYgQEAgRnJhbWU6
On5GcmFtZSgpCiAgICAgICAgIGQtPm1fdmlldy0+Y2xlYXJGcmFtZSgpOwogICAgIH0KIAotICAg
IGRpc2Nvbm5lY3RQbGF0Zm9ybVNjcmlwdE9iamVjdHMoKTsKLQogICAgIEFTU0VSVCghZC0+bV9s
aWZlU3VwcG9ydFRpbWVyLmlzQWN0aXZlKCkpOwogCiAjaWYgRlJBTUVfTE9BRFNfVVNFUl9TVFlM
RVNIRUVUCkBAIC0xMDU4LDU1ICsxMDQ4LDYgQEAgdm9pZCBGcmFtZTo6bGlmZVN1cHBvcnRUaW1l
ckZpcmVkKFRpbWVyPEZyYW1lPiopCiAgICAgZGVyZWYoKTsKIH0KIAotS0pTOjpCaW5kaW5nczo6
Um9vdE9iamVjdCogRnJhbWU6OmJpbmRpbmdSb290T2JqZWN0KCkKLXsKLSAgICBpZiAoIXNjcmlw
dCgpLT5pc0VuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoIWQtPm1fYmlu
ZGluZ1Jvb3RPYmplY3QpCi0gICAgICAgIGQtPm1fYmluZGluZ1Jvb3RPYmplY3QgPSBLSlM6OkJp
bmRpbmdzOjpSb290T2JqZWN0OjpjcmVhdGUoMCwgc2NyaXB0KCktPmdsb2JhbE9iamVjdCgpKTsK
LSAgICByZXR1cm4gZC0+bV9iaW5kaW5nUm9vdE9iamVjdC5nZXQoKTsKLX0KLQotUGFzc1JlZlB0
cjxLSlM6OkJpbmRpbmdzOjpSb290T2JqZWN0PiBGcmFtZTo6Y3JlYXRlUm9vdE9iamVjdCh2b2lk
KiBuYXRpdmVIYW5kbGUsIEtKUzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKLXsKLSAg
ICBSb290T2JqZWN0TWFwOjppdGVyYXRvciBpdCA9IGQtPm1fcm9vdE9iamVjdHMuZmluZChuYXRp
dmVIYW5kbGUpOwotICAgIGlmIChpdCAhPSBkLT5tX3Jvb3RPYmplY3RzLmVuZCgpKQotICAgICAg
ICByZXR1cm4gaXQtPnNlY29uZDsKLSAgICAKLSAgICBSZWZQdHI8S0pTOjpCaW5kaW5nczo6Um9v
dE9iamVjdD4gcm9vdE9iamVjdCA9IEtKUzo6QmluZGluZ3M6OlJvb3RPYmplY3Q6OmNyZWF0ZShu
YXRpdmVIYW5kbGUsIGdsb2JhbE9iamVjdCk7Ci0gICAgCi0gICAgZC0+bV9yb290T2JqZWN0cy5z
ZXQobmF0aXZlSGFuZGxlLCByb290T2JqZWN0KTsKLSAgICByZXR1cm4gcm9vdE9iamVjdC5yZWxl
YXNlKCk7Ci19Ci0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLU5QT2JqZWN0KiBG
cmFtZTo6d2luZG93U2NyaXB0TlBPYmplY3QoKQotewotICAgIGlmICghZC0+bV93aW5kb3dTY3Jp
cHROUE9iamVjdCkgewotICAgICAgICBpZiAoc2NyaXB0KCktPmlzRW5hYmxlZCgpKSB7Ci0gICAg
ICAgICAgICAvLyBKYXZhU2NyaXB0IGlzIGVuYWJsZWQsIHNvIHRoZXJlIGlzIGEgSmF2YVNjcmlw
dCB3aW5kb3cgb2JqZWN0LiAgUmV0dXJuIGFuIE5QT2JqZWN0IGJvdW5kIHRvIHRoZSB3aW5kb3cK
LSAgICAgICAgICAgIC8vIG9iamVjdC4KLSAgICAgICAgICAgIEtKUzo6SlNPYmplY3QqIHdpbiA9
IHRvSlNET01XaW5kb3codGhpcyk7Ci0gICAgICAgICAgICBBU1NFUlQod2luKTsKLSAgICAgICAg
ICAgIEtKUzo6QmluZGluZ3M6OlJvb3RPYmplY3QqIHJvb3QgPSBiaW5kaW5nUm9vdE9iamVjdCgp
OwotICAgICAgICAgICAgZC0+bV93aW5kb3dTY3JpcHROUE9iamVjdCA9IF9OUE5fQ3JlYXRlU2Ny
aXB0T2JqZWN0KDAsIHdpbiwgcm9vdCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAv
LyBKYXZhU2NyaXB0IGlzIG5vdCBlbmFibGVkLCBzbyB3ZSBjYW5ub3QgYmluZCB0aGUgTlBPYmpl
Y3QgdG8gdGhlIEphdmFTY3JpcHQgd2luZG93IG9iamVjdC4KLSAgICAgICAgICAgIC8vIEluc3Rl
YWQsIHdlIGNyZWF0ZSBhbiBOUE9iamVjdCBvZiBhIGRpZmZlcmVudCBjbGFzcywgb25lIHdoaWNo
IGlzIG5vdCBib3VuZCB0byBhIEphdmFTY3JpcHQgb2JqZWN0LgotICAgICAgICAgICAgZC0+bV93
aW5kb3dTY3JpcHROUE9iamVjdCA9IF9OUE5fQ3JlYXRlTm9TY3JpcHRPYmplY3QoKTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIHJldHVybiBkLT5tX3dpbmRvd1NjcmlwdE5QT2JqZWN0OwotfQot
I2VuZGlmCi0gICAgCi12b2lkIEZyYW1lOjpjbGVhclNjcmlwdENvbnRyb2xsZXIoKQotewotICAg
IGQtPm1fc2NyaXB0LmNsZWFyKCk7Ci19Ci0KIHZvaWQgRnJhbWU6OmNsZWFyRE9NV2luZG93KCkK
IHsKICAgICBpZiAoZC0+bV9kb21XaW5kb3cpIHsKQEAgLTExMTYsNDMgKzEwNTcsNiBAQCB2b2lk
IEZyYW1lOjpjbGVhckRPTVdpbmRvdygpCiAgICAgZC0+bV9kb21XaW5kb3cgPSAwOwogfQogCi12
b2lkIEZyYW1lOjpjbGVhbnVwU2NyaXB0T2JqZWN0c0ZvclBsdWdpbih2b2lkKiBuYXRpdmVIYW5k
bGUpCi17Ci0gICAgUm9vdE9iamVjdE1hcDo6aXRlcmF0b3IgaXQgPSBkLT5tX3Jvb3RPYmplY3Rz
LmZpbmQobmF0aXZlSGFuZGxlKTsKLSAgICAKLSAgICBpZiAoaXQgPT0gZC0+bV9yb290T2JqZWN0
cy5lbmQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGl0LT5zZWNvbmQtPmludmFsaWRh
dGUoKTsKLSAgICBkLT5tX3Jvb3RPYmplY3RzLnJlbW92ZShpdCk7Ci19Ci0gICAgCi12b2lkIEZy
YW1lOjpjbGVhclNjcmlwdE9iamVjdHMoKQotewotICAgIFJvb3RPYmplY3RNYXA6OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IGQtPm1fcm9vdE9iamVjdHMuZW5kKCk7Ci0gICAgZm9yIChSb290T2JqZWN0
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGQtPm1fcm9vdE9iamVjdHMuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5pbnZhbGlkYXRlKCk7Ci0KLSAgICBkLT5t
X3Jvb3RPYmplY3RzLmNsZWFyKCk7Ci0KLSAgICBpZiAoZC0+bV9iaW5kaW5nUm9vdE9iamVjdCkg
ewotICAgICAgICBkLT5tX2JpbmRpbmdSb290T2JqZWN0LT5pbnZhbGlkYXRlKCk7Ci0gICAgICAg
IGQtPm1fYmluZGluZ1Jvb3RPYmplY3QgPSAwOwotICAgIH0KLQotI2lmIEVOQUJMRShORVRTQ0FQ
RV9QTFVHSU5fQVBJKQotICAgIGlmIChkLT5tX3dpbmRvd1NjcmlwdE5QT2JqZWN0KSB7Ci0gICAg
ICAgIC8vIENhbGwgX05QTl9EZWFsbG9jYXRlT2JqZWN0KCkgaW5zdGVhZCBvZiBfTlBOX1JlbGVh
c2VPYmplY3QoKSBzbyB0aGF0IHdlIGRvbid0IGxlYWsgaWYgYSBwbHVnaW4gZmFpbHMgdG8gcmVs
ZWFzZSB0aGUgd2luZG93Ci0gICAgICAgIC8vIHNjcmlwdCBvYmplY3QgcHJvcGVybHkuCi0gICAg
ICAgIC8vIFRoaXMgc2hvdWxkbid0IGNhdXNlIGFueSBwcm9ibGVtcyBmb3IgcGx1Z2lucyBzaW5j
ZSB0aGV5IHNob3VsZCBoYXZlIGFscmVhZHkgYmVlbiBzdG9wcGVkIGFuZCBkZXN0cm95ZWQgYXQg
dGhpcyBwb2ludC4KLSAgICAgICAgX05QTl9EZWFsbG9jYXRlT2JqZWN0KGQtPm1fd2luZG93U2Ny
aXB0TlBPYmplY3QpOwotICAgICAgICBkLT5tX3dpbmRvd1NjcmlwdE5QT2JqZWN0ID0gMDsKLSAg
ICB9Ci0jZW5kaWYKLQotICAgIGNsZWFyUGxhdGZvcm1TY3JpcHRPYmplY3RzKCk7Ci19Ci0KIFJl
bmRlclZpZXcqIEZyYW1lOjpjb250ZW50UmVuZGVyZXIoKSBjb25zdAogewogICAgIERvY3VtZW50
KiBkb2MgPSBkb2N1bWVudCgpOwpAQCAtMTc1NCwxNyArMTY1OCwxNyBAQCB2b2lkIEZyYW1lOjpw
YWdlRGVzdHJveWVkKCkKICAgICBpZiAoRnJhbWUqIHBhcmVudCA9IHRyZWUoKS0+cGFyZW50KCkp
CiAgICAgICAgIHBhcmVudC0+bG9hZGVyKCktPmNoZWNrTG9hZENvbXBsZXRlKCk7CiAKLSAgICBp
ZiAoZC0+bV9wYWdlICYmIGQtPm1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRGcmFt
ZSgpID09IHRoaXMpCi0gICAgICAgIGQtPm1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPnNldEZv
Y3VzZWRGcmFtZSgwKTsKKyAgICAvLyBGSVhNRTogSXQncyB1bmNsZWFyIGFzIHRvIHdoeSB0aGlz
IGlzIGNhbGxlZCBtb3JlIHRoYW4gb25jZSwgYnV0IGl0IGlzLAorICAgIC8vIHNvIHBhZ2UoKSBj
b3VsZCBiZSBOVUxMLgorICAgIGlmIChwYWdlKCkgJiYgcGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIo
KS0+Zm9jdXNlZEZyYW1lKCkgPT0gdGhpcykKKyAgICAgICAgcGFnZSgpLT5mb2N1c0NvbnRyb2xs
ZXIoKS0+c2V0Rm9jdXNlZEZyYW1lKDApOwogCiAgICAgLy8gVGhpcyB3aWxsIHN0b3AgYW55IEpT
IHRpbWVycwotICAgIGlmIChkLT5tX3NjcmlwdC5oYXZlV2luZG93U2hlbGwoKSkgewotICAgICAg
ICBpZiAoSlNET01XaW5kb3dTaGVsbCogd2luZG93U2hlbGwgPSB0b0pTRE9NV2luZG93U2hlbGwo
dGhpcykpCi0gICAgICAgICAgICB3aW5kb3dTaGVsbC0+ZGlzY29ubmVjdEZyYW1lKCk7Ci0gICAg
fQorICAgIGlmIChzY3JpcHQoKS0+aGF2ZVdpbmRvd1NoZWxsKCkpCisgICAgICAgIHNjcmlwdCgp
LT53aW5kb3dTaGVsbCgpLT5kaXNjb25uZWN0RnJhbWUoKTsKKworICAgIHNjcmlwdCgpLT5jbGVh
clNjcmlwdE9iamVjdHMoKTsKIAotICAgIGNsZWFyU2NyaXB0T2JqZWN0cygpOwotICAgIAogICAg
IGQtPm1fcGFnZSA9IDA7CiB9CiAKQEAgLTE5NTEsMjYgKzE4NTUsMTkgQEAgRnJhbWVQcml2YXRl
OjpGcmFtZVByaXZhdGUoUGFnZSogcGFnZSwgRnJhbWUqIHBhcmVudCwgRnJhbWUqIHRoaXNGcmFt
ZSwgSFRNTEZyYW0KICAgICAsIG1fZWRpdG9yKHRoaXNGcmFtZSkKICAgICAsIG1fZXZlbnRIYW5k
bGVyKHRoaXNGcmFtZSkKICAgICAsIG1fYW5pbWF0aW9uQ29udHJvbGxlcih0aGlzRnJhbWUpCisg
ICAgLCBtX2xpZmVTdXBwb3J0VGltZXIodGhpc0ZyYW1lLCAmRnJhbWU6OmxpZmVTdXBwb3J0VGlt
ZXJGaXJlZCkKKyAgICAsIG1fcGFpbnRSZXN0cmljdGlvbihQYWludFJlc3RyaWN0aW9uTm9uZSkK
ICAgICAsIG1fY2FyZXRWaXNpYmxlKGZhbHNlKQogICAgICwgbV9jYXJldFBhaW50KHRydWUpCiAg
ICAgLCBtX2lzUGFpbnRpbmcoZmFsc2UpCi0gICAgLCBtX2xpZmVTdXBwb3J0VGltZXIodGhpc0Zy
YW1lLCAmRnJhbWU6OmxpZmVTdXBwb3J0VGltZXJGaXJlZCkKLSAgICAsIG1fcGFpbnRSZXN0cmlj
dGlvbihQYWludFJlc3RyaWN0aW9uTm9uZSkKICAgICAsIG1faGlnaGxpZ2h0VGV4dE1hdGNoZXMo
ZmFsc2UpCiAgICAgLCBtX2luVmlld1NvdXJjZU1vZGUoZmFsc2UpCi0gICAgLCBmcmFtZUNvdW50
KDApCiAgICAgLCBtX3Byb2hpYml0c1Njcm9sbGluZyhmYWxzZSkKICAgICAsIG1fbmVlZHNSZWFw
cGx5U3R5bGVzKGZhbHNlKQogICAgICwgbV9pc0Rpc2Nvbm5lY3RlZChmYWxzZSkKLSNpZiBFTkFC
TEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICAsIG1fd2luZG93U2NyaXB0TlBPYmplY3QoMCkK
LSNlbmRpZgogI2lmIEZSQU1FX0xPQURTX1VTRVJfU1RZTEVTSEVFVAogICAgICwgbV91c2VyU3R5
bGVTaGVldExvYWRlcigwKQogI2VuZGlmCi0jaWYgUExBVEZPUk0oTUFDKQotICAgICwgbV93aW5k
b3dTY3JpcHRPYmplY3QobmlsKQotI2VuZGlmCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGFnZS9GcmFtZS5oIGIvV2ViQ29yZS9wYWdlL0ZyYW1lLmgKaW5kZXggNWYyNWFmZC4uODNiYTM1
YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0ZyYW1lLmgKKysrIGIvV2ViQ29yZS9wYWdlL0Zy
YW1lLmgKQEAgLTgsNiArOCw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgIDIwMDAgU3RlZmFu
IFNjaGltYW5za2kgPDFTdGVpbkBnbXguZGU+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUs
IDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29w
eXJpZ2h0IChDKSAyMDA3IFRyb2xsdGVjaCBBU0EKKyAqIENvcHlyaWdodCAoQykgMjAwOCBFcmlj
IFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMywyOCAr
MzQsMTIgQEAKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlRleHRHcmFudWxh
cml0eS5oIgogCi1zdHJ1Y3QgTlBPYmplY3Q7Ci0KLW5hbWVzcGFjZSBLSlMgewotCi0gICAgY2xh
c3MgSlNHbG9iYWxPYmplY3Q7Ci0KLSAgICBuYW1lc3BhY2UgQmluZGluZ3MgewotICAgICAgICBj
bGFzcyBJbnN0YW5jZTsKLSAgICAgICAgY2xhc3MgUm9vdE9iamVjdDsKLSAgICB9Ci0KLX0KLQog
I2lmIFBMQVRGT1JNKE1BQykKLSNpZmRlZiBfX09CSkNfXwotQGNsYXNzIFdlYlNjcmlwdE9iamVj
dDsKLSNlbHNlCisjaWZuZGVmIF9fT0JKQ19fCiBjbGFzcyBOU0FycmF5OwogY2xhc3MgTlNEaWN0
aW9uYXJ5OwogY2xhc3MgTlNNdXRhYmxlRGljdGlvbmFyeTsKIGNsYXNzIE5TU3RyaW5nOwotY2xh
c3MgV2ViU2NyaXB0T2JqZWN0OwogdHlwZWRlZiBpbnQgTlNXcml0aW5nRGlyZWN0aW9uOwogI2Vu
ZGlmCiAjZW5kaWYKQEAgLTE1NywzNiArMTQyLDEyIEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBk
b2N1bWVudFR5cGVTdHJpbmcoKSBjb25zdDsKIAotICAgIHZvaWQgY2xlYXJTY3JpcHRDb250cm9s
bGVyKCk7CisgICAgLy8gVGhpcyBtZXRob2QgLS0gYW5kIHRoZSBjb3JyZXNwb25kaW5nIGxpc3Qg
b2YgZm9ybWVyIERPTSB3aW5kb3dzIC0tCisgICAgLy8gc2hvdWxkIG1vdmUgb250byBTY3JpcHRD
b250cm9sbGVyCiAgICAgdm9pZCBjbGVhckRPTVdpbmRvdygpOwogCi0gICAgdm9pZCBjbGVhclNj
cmlwdE9iamVjdHMoKTsKLSAgICB2b2lkIGNsZWFudXBTY3JpcHRPYmplY3RzRm9yUGx1Z2luKHZv
aWQqKTsKLQogcHJpdmF0ZToKLSAgICB2b2lkIGNsZWFyUGxhdGZvcm1TY3JpcHRPYmplY3RzKCk7
Ci0gICAgdm9pZCBkaXNjb25uZWN0UGxhdGZvcm1TY3JpcHRPYmplY3RzKCk7Ci0KICAgICB2b2lk
IGxpZmVTdXBwb3J0VGltZXJGaXJlZChUaW1lcjxGcmFtZT4qKTsKLSAgICAKLS8vID09PSB0byBi
ZSBtb3ZlZCBpbnRvIFNjcmlwdENvbnRyb2xsZXIKLQotcHVibGljOgotICAgIFBhc3NSZWZQdHI8
S0pTOjpCaW5kaW5nczo6SW5zdGFuY2U+IGNyZWF0ZVNjcmlwdEluc3RhbmNlRm9yV2lkZ2V0KFdp
ZGdldCopOwotICAgIEtKUzo6QmluZGluZ3M6OlJvb3RPYmplY3QqIGJpbmRpbmdSb290T2JqZWN0
KCk7Ci0KLSAgICBQYXNzUmVmUHRyPEtKUzo6QmluZGluZ3M6OlJvb3RPYmplY3Q+IGNyZWF0ZVJv
b3RPYmplY3Qodm9pZCogbmF0aXZlSGFuZGxlLCBLSlM6OkpTR2xvYmFsT2JqZWN0Kik7Ci0KLSNp
ZiBQTEFURk9STShNQUMpCi0jaWYgRU5BQkxFKE1BQ19KQVZBX0JSSURHRSkKLSAgICBzdGF0aWMg
dm9pZCBpbml0SmF2YUpTQmluZGluZ3MoKTsKLSNlbmRpZgotICAgIFdlYlNjcmlwdE9iamVjdCog
d2luZG93U2NyaXB0T2JqZWN0KCk7Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVH
SU5fQVBJKQotICAgIE5QT2JqZWN0KiB3aW5kb3dTY3JpcHROUE9iamVjdCgpOwotI2VuZGlmICAg
IAogCiAvLyA9PT0gdG8gYmUgbW92ZWQgaW50byBEb2N1bWVudAogCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BhZ2UvRnJhbWVQcml2YXRlLmggYi9XZWJDb3JlL3BhZ2UvRnJhbWVQcml2YXRlLmgKaW5k
ZXggNTE0OTQ1My4uYTA4NTM3NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0ZyYW1lUHJpdmF0
ZS5oCisrKyBiL1dlYkNvcmUvcGFnZS9GcmFtZVByaXZhdGUuaApAQCAtMzYsMjMgKzM2LDYgQEAK
ICNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgog
Ci1uYW1lc3BhY2UgS0pTIHsKLSAgICBjbGFzcyBJbnRlcnByZXRlcjsKLSAgICAgICAgCi0gICAg
bmFtZXNwYWNlIEJpbmRpbmdzIHsKLSAgICAgICAgY2xhc3MgSW5zdGFuY2U7Ci0gICAgICAgIGNs
YXNzIFJvb3RPYmplY3Q7Ci0gICAgfQotfQotCi0jaWYgUExBVEZPUk0oTUFDKQotI2lmZGVmIF9f
T0JKQ19fCi1AY2xhc3MgV2ViU2NyaXB0T2JqZWN0OwotI2Vsc2UKLWNsYXNzIFdlYlNjcmlwdE9i
amVjdDsKLSNlbmRpZgotI2VuZGlmCi0KICNpZiBQTEFURk9STShXSU4pCiAjaW5jbHVkZSAiRnJh
bWVXaW4uaCIKICNlbmRpZgpAQCAtNjIsOCArNDUsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAj
aWYgRlJBTUVfTE9BRFNfVVNFUl9TVFlMRVNIRUVUCiAgICAgY2xhc3MgVXNlclN0eWxlU2hlZXRM
b2FkZXI7CiAjZW5kaWYKLQotICAgIHR5cGVkZWYgSGFzaE1hcDx2b2lkKiwgUmVmUHRyPEtKUzo6
QmluZGluZ3M6OlJvb3RPYmplY3Q+ID4gUm9vdE9iamVjdE1hcDsKICAgICAKICAgICBjbGFzcyBG
cmFtZVByaXZhdGUgewogICAgIHB1YmxpYzoKQEAgLTk2LDEwICs3Nyw2IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgRXZlbnRIYW5kbGVyIG1fZXZlbnRIYW5kbGVyOwogICAgICAgICBB
bmltYXRpb25Db250cm9sbGVyIG1fYW5pbWF0aW9uQ29udHJvbGxlcjsKIAotICAgICAgICBib29s
IG1fY2FyZXRWaXNpYmxlIDogMTsKLSAgICAgICAgYm9vbCBtX2NhcmV0UGFpbnQgOiAxOwotICAg
ICAgICBib29sIG1faXNQYWludGluZyA6IDE7Ci0KICAgICAgICAgUmVmUHRyPENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uPiBtX3R5cGluZ1N0eWxlOwogCiAgICAgICAgIFRpbWVyPEZyYW1lPiBt
X2xpZmVTdXBwb3J0VGltZXI7CkBAIC0xMDcsMzAgKzg0LDE5IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgUmVmUHRyPE5vZGU+IG1fZWxlbWVudFRvRHJhdzsKICAgICAgICAgUGFpbnRS
ZXN0cmljdGlvbiBtX3BhaW50UmVzdHJpY3Rpb247CiAgICAgICAgIAorICAgICAgICBib29sIG1f
Y2FyZXRWaXNpYmxlOworICAgICAgICBib29sIG1fY2FyZXRQYWludDsKKyAgICAgICAgYm9vbCBt
X2lzUGFpbnRpbmc7CisKICAgICAgICAgYm9vbCBtX2hpZ2hsaWdodFRleHRNYXRjaGVzOwotICAg
ICAgICAKICAgICAgICAgYm9vbCBtX2luVmlld1NvdXJjZU1vZGU7Ci0KLSAgICAgICAgdW5zaWdu
ZWQgZnJhbWVDb3VudDsKLQogICAgICAgICBib29sIG1fcHJvaGliaXRzU2Nyb2xsaW5nOwotCiAg
ICAgICAgIGJvb2wgbV9uZWVkc1JlYXBwbHlTdHlsZXM7Ci0gICAgICAgIAogICAgICAgICBib29s
IG1faXNEaXNjb25uZWN0ZWQ7CiAKLSAgICAgICAgLy8gVGhlIHJvb3Qgb2JqZWN0IHVzZWQgZm9y
IG9iamVjdHMgYm91bmQgb3V0c2lkZSB0aGUgY29udGV4dCBvZiBhIHBsdWdpbi4KLSAgICAgICAg
UmVmUHRyPEtKUzo6QmluZGluZ3M6OlJvb3RPYmplY3Q+IG1fYmluZGluZ1Jvb3RPYmplY3Q7IAot
ICAgICAgICBSb290T2JqZWN0TWFwIG1fcm9vdE9iamVjdHM7Ci0jaWYgRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9BUEkpCi0gICAgICAgIE5QT2JqZWN0KiBtX3dpbmRvd1NjcmlwdE5QT2JqZWN0Owot
I2VuZGlmCiAjaWYgRlJBTUVfTE9BRFNfVVNFUl9TVFlMRVNIRUVUCiAgICAgICAgIFVzZXJTdHls
ZVNoZWV0TG9hZGVyKiBtX3VzZXJTdHlsZVNoZWV0TG9hZGVyOwogI2VuZGlmCi0jaWYgUExBVEZP
Uk0oTUFDKQotICAgICAgICBSZXRhaW5QdHI8V2ViU2NyaXB0T2JqZWN0PiBtX3dpbmRvd1Njcmlw
dE9iamVjdDsKLSNlbmRpZgogICAgIH07CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9n
dGsvRnJhbWVHdGsuY3BwIGIvV2ViQ29yZS9wYWdlL2d0ay9GcmFtZUd0ay5jcHAKaW5kZXggZjFh
ZDM1NS4uM2NhYjVhMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL2d0ay9GcmFtZUd0ay5jcHAK
KysrIGIvV2ViQ29yZS9wYWdlL2d0ay9GcmFtZUd0ay5jcHAKQEAgLTEsMTAgKzEsNCBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxA
Z21haWwuY29tCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRo
ZXIKLSAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKICAqIGFyZSBtZXQ6CkBAIC0zMSwzMyArMjUsOSBAQAogI2luY2x1ZGUgIkZyYW1lLmgi
CiAKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBsdWdpblZpZXcuaCIK
LSNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAicnVudGltZV9yb290Lmgi
Ci0jaW5jbHVkZSAicnVudGltZS5oIgotCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc1Jl
ZlB0cjxLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZT4gRnJhbWU6OmNyZWF0ZVNjcmlwdEluc3RhbmNl
Rm9yV2lkZ2V0KFdpZGdldCogd2lkZ2V0KQotewotICAgIC8vIEZJWE1FOiBJZGVhbGx5IHdlJ2Qg
aGF2ZSBhbiBpc1BsdWdpblZpZXcoKSBoZXJlIGJ1dCB3ZSBjYW4ndCBhZGQgdGhhdCB0byB0aGUg
b3BlbiBzb3VyY2UgdHJlZSByaWdodCBub3cuCi0gICAgaWYgKHdpZGdldC0+aXNGcmFtZVZpZXco
KSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UGx1Z2luVmll
dyo+KHdpZGdldCktPmJpbmRpbmdJbnN0YW5jZSgpOwotfQotCi12b2lkIEZyYW1lOjpjbGVhclBs
YXRmb3JtU2NyaXB0T2JqZWN0cygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9p
ZCBGcmFtZTo6ZGlzY29ubmVjdFBsYXRmb3JtU2NyaXB0T2JqZWN0cygpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLX0KLQogRHJhZ0ltYWdlUmVmIEZyYW1lOjpkcmFnSW1hZ2VGb3JTZWxlY3Rp
b24oKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2Uv
bWFjL0ZyYW1lTWFjLm1tIGIvV2ViQ29yZS9wYWdlL21hYy9GcmFtZU1hYy5tbQppbmRleCAxOTA0
NTgyLi43NjJlMWMxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvbWFjL0ZyYW1lTWFjLm1tCisr
KyBiL1dlYkNvcmUvcGFnZS9tYWMvRnJhbWVNYWMubW0KQEAgLTMwLDcgKzMwLDExIEBACiAKICNp
bXBvcnQgIkJsb2NrRXhjZXB0aW9ucy5oIgogI2ltcG9ydCAiQ29sb3JNYWMuaCIKLSNpbXBvcnQg
IkRPTUFic3RyYWN0Vmlld0ZyYW1lLmgiCisjaW1wb3J0ICJDdXJzb3IuaCIKKyNpbXBvcnQgIkRP
TUludGVybmFsLmgiCisjaW1wb3J0ICJEb2N1bWVudExvYWRlci5oIgorI2ltcG9ydCAiRWRpdG9y
Q2xpZW50LmgiCisjaW1wb3J0ICJFdmVudC5oIgogI2ltcG9ydCAiRXZlbnROYW1lcy5oIgogI2lt
cG9ydCAiRnJhbWVMb2FkZXJDbGllbnQuaCIKICNpbXBvcnQgIkZyYW1lUHJpdmF0ZS5oIgpAQCAt
MzgsNDAgKzQyLDMzIEBACiAjaW1wb3J0ICJHcmFwaGljc0NvbnRleHQuaCIKICNpbXBvcnQgIkhU
TUxOYW1lcy5oIgogI2ltcG9ydCAiSFRNTFRhYmxlQ2VsbEVsZW1lbnQuaCIKKyNpbXBvcnQgIkhp
dFRlc3RSZXF1ZXN0LmgiCisjaW1wb3J0ICJIaXRUZXN0UmVzdWx0LmgiCisjaW1wb3J0ICJLZXli
b2FyZEV2ZW50LmgiCisjaW1wb3J0ICJMb2dnaW5nLmgiCisjaW1wb3J0ICJNb3VzZUV2ZW50V2l0
aEhpdFRlc3RSZXN1bHRzLmgiCisjaW1wb3J0ICJQYWdlLmgiCisjaW1wb3J0ICJQbGF0Zm9ybUtl
eWJvYXJkRXZlbnQuaCIKKyNpbXBvcnQgIlBsYXRmb3JtU2Nyb2xsQmFyLmgiCisjaW1wb3J0ICJQ
bGF0Zm9ybVdoZWVsRXZlbnQuaCIKICNpbXBvcnQgIlJlZ3VsYXJFeHByZXNzaW9uLmgiCiAjaW1w
b3J0ICJSZW5kZXJUYWJsZUNlbGwuaCIKICNpbXBvcnQgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW1w
b3J0ICJVc2VyU3R5bGVTaGVldExvYWRlci5oIgotI2ltcG9ydCAiV2ViU2NyaXB0T2JqZWN0UHJp
dmF0ZS5oIgorI2ltcG9ydCAiV2ViQ29yZVZpZXdGYWN0b3J5LmgiCisjaW1wb3J0ICJ2aXNpYmxl
X3VuaXRzLmgiCisKICNpbXBvcnQgPENhcmJvbi9DYXJib24uaD4KLSNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0FQSUNhc3QuaD4KIAotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotI2lt
cG9ydCAiY19pbnN0YW5jZS5oIgotI2ltcG9ydCAiTlBfanNvYmplY3QuaCIKLSNpbXBvcnQgIm5w
cnVudGltZV9pbXBsLmgiCi0jZW5kaWYKLSNpbXBvcnQgIm9iamNfaW5zdGFuY2UuaCIKLSNpbXBv
cnQgInJ1bnRpbWVfcm9vdC5oIgotI2ltcG9ydCAicnVudGltZS5oIgotI2lmIEVOQUJMRShNQUNf
SkFWQV9CUklER0UpCi0jaW1wb3J0ICJqbmlfaW5zdGFuY2UuaCIKLSNlbmRpZgogI2lmIEVOQUJM
RShEQVNIQk9BUkRfU1VQUE9SVCkKICNpbXBvcnQgIldlYkRhc2hib2FyZFJlZ2lvbi5oIgogI2Vu
ZGlmCi0KLUBpbnRlcmZhY2UgTlNPYmplY3QgKFdlYlBsdWdpbikKLS0gKGlkKW9iamVjdEZvcldl
YlNjcmlwdDsKLS0gKE5QT2JqZWN0ICopY3JlYXRlUGx1Z2luU2NyaXB0YWJsZU9iamVjdDsKLUBl
bmQKICAKIEBpbnRlcmZhY2UgTlNWaWV3IChXZWJDb3JlSFRNTERvY3VtZW50VmlldykKIC0gKHZv
aWQpZHJhd1NpbmdsZVJlY3Q6KE5TUmVjdClyZWN0OwogQGVuZAogIAogdXNpbmcgbmFtZXNwYWNl
IHN0ZDsKLXVzaW5nIG5hbWVzcGFjZSBLSlM6OkJpbmRpbmdzOwogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKQEAgLTUwNyw3NiArNTA0LDYgQEAgRHJhZ0ltYWdlUmVmIEZyYW1lOjpkcmFnSW1hZ2VG
b3JTZWxlY3Rpb24oKQogICAgIHJldHVybiBzZWxlY3Rpb25JbWFnZSgpOwogfQogCi1QYXNzUmVm
UHRyPEtKUzo6QmluZGluZ3M6Okluc3RhbmNlPiBGcmFtZTo6Y3JlYXRlU2NyaXB0SW5zdGFuY2VG
b3JXaWRnZXQoV2lkZ2V0KiB3aWRnZXQpCi17Ci0gICAgTlNWaWV3KiB3aWRnZXRWaWV3ID0gd2lk
Z2V0LT5nZXRWaWV3KCk7Ci0gICAgaWYgKCF3aWRnZXRWaWV3KQotICAgICAgICByZXR1cm4gMDsK
LQotICAgIFJlZlB0cjxSb290T2JqZWN0PiByb290T2JqZWN0ID0gY3JlYXRlUm9vdE9iamVjdCh3
aWRnZXRWaWV3LCBzY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KCkpOwotCi0gICAgaWYgKFt3aWRnZXRW
aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Iob2JqZWN0Rm9yV2ViU2NyaXB0KV0pIHsK
LSAgICAgICAgaWQgb2JqZWN0Rm9yV2ViU2NyaXB0ID0gW3dpZGdldFZpZXcgb2JqZWN0Rm9yV2Vi
U2NyaXB0XTsKLSAgICAgICAgaWYgKCFvYmplY3RGb3JXZWJTY3JpcHQpCi0gICAgICAgICAgICBy
ZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuIEtKUzo6QmluZGluZ3M6Ok9iamNJbnN0YW5jZTo6Y3Jl
YXRlKG9iamVjdEZvcldlYlNjcmlwdCwgcm9vdE9iamVjdC5yZWxlYXNlKCkpOwotICAgIH0KLQot
ICAgIGlmIChbd2lkZ2V0VmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGNyZWF0ZVBs
dWdpblNjcmlwdGFibGVPYmplY3QpXSkgewotI2lmICFFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQ
SSkKLSAgICAgICAgcmV0dXJuIDA7Ci0jZWxzZQotICAgICAgICBOUE9iamVjdCogbnBPYmplY3Qg
PSBbd2lkZ2V0VmlldyBjcmVhdGVQbHVnaW5TY3JpcHRhYmxlT2JqZWN0XTsKLSAgICAgICAgaWYg
KCFucE9iamVjdCkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBSZWZQdHI8SW5zdGFu
Y2U+IGluc3RhbmNlID0gS0pTOjpCaW5kaW5nczo6Q0luc3RhbmNlOjpjcmVhdGUobnBPYmplY3Qs
IHJvb3RPYmplY3QucmVsZWFzZSgpKTsKLSAgICAgICAgLy8gLWNyZWF0ZVBsdWdpblNjcmlwdGFi
bGVPYmplY3QgcmV0dXJucyBhIHJldGFpbmVkIE5QT2JqZWN0LiAgVGhlIGNhbGxlciBpcyBleHBl
Y3RlZCB0byByZWxlYXNlIGl0LgotICAgICAgICBfTlBOX1JlbGVhc2VPYmplY3QobnBPYmplY3Qp
OwotICAgICAgICByZXR1cm4gaW5zdGFuY2UucmVsZWFzZSgpOwotI2VuZGlmCi0gICAgfQotCi0j
aWYgRU5BQkxFKE1BQ19KQVZBX0JSSURHRSkKLSAgICBqb2JqZWN0IGFwcGxldCA9IGxvYWRlcigp
LT5jbGllbnQoKS0+amF2YUFwcGxldCh3aWRnZXRWaWV3KTsKLSAgICBpZiAoIWFwcGxldCkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIEtKUzo6QmluZGluZ3M6OkphdmFJbnN0YW5jZTo6
Y3JlYXRlKGFwcGxldCwgcm9vdE9iamVjdC5yZWxlYXNlKCkpOwotI2Vsc2UKLSAgICByZXR1cm4g
MDsKLSNlbmRpZgotfQotCi1XZWJTY3JpcHRPYmplY3QqIEZyYW1lOjp3aW5kb3dTY3JpcHRPYmpl
Y3QoKQotewotICAgIGlmICghc2NyaXB0KCktPmlzRW5hYmxlZCgpKQotICAgICAgICByZXR1cm4g
MDsKLQotICAgIGlmICghZC0+bV93aW5kb3dTY3JpcHRPYmplY3QpIHsKLSAgICAgICAgS0pTOjpK
U09iamVjdCogd2luID0gdG9KU0RPTVdpbmRvd1NoZWxsKHRoaXMpOwotICAgICAgICBLSlM6OkJp
bmRpbmdzOjpSb290T2JqZWN0ICpyb290ID0gYmluZGluZ1Jvb3RPYmplY3QoKTsKLSAgICAgICAg
ZC0+bV93aW5kb3dTY3JpcHRPYmplY3QgPSBbV2ViU2NyaXB0T2JqZWN0IHNjcmlwdE9iamVjdEZv
ckpTT2JqZWN0OnRvUmVmKHdpbikgb3JpZ2luUm9vdE9iamVjdDpyb290IHJvb3RPYmplY3Q6cm9v
dF07Ci0gICAgfQotCi0gICAgQVNTRVJUKFtkLT5tX3dpbmRvd1NjcmlwdE9iamVjdC5nZXQoKSBp
c0tpbmRPZkNsYXNzOltET01BYnN0cmFjdFZpZXcgY2xhc3NdXSk7Ci0gICAgcmV0dXJuIGQtPm1f
d2luZG93U2NyaXB0T2JqZWN0LmdldCgpOwotfQotCi12b2lkIEZyYW1lOjpjbGVhclBsYXRmb3Jt
U2NyaXB0T2JqZWN0cygpCi17Ci0gICAgaWYgKGQtPm1fd2luZG93U2NyaXB0T2JqZWN0KSB7Ci0g
ICAgICAgIEtKUzo6QmluZGluZ3M6OlJvb3RPYmplY3QqIHJvb3QgPSBiaW5kaW5nUm9vdE9iamVj
dCgpOwotICAgICAgICBbZC0+bV93aW5kb3dTY3JpcHRPYmplY3QuZ2V0KCkgX3NldE9yaWdpblJv
b3RPYmplY3Q6cm9vdCBhbmRSb290T2JqZWN0OnJvb3RdOwotICAgIH0KLX0KLQotdm9pZCBGcmFt
ZTo6ZGlzY29ubmVjdFBsYXRmb3JtU2NyaXB0T2JqZWN0cygpCi17Ci0gICAgaWYgKGQtPm1fd2lu
ZG93U2NyaXB0T2JqZWN0KSB7Ci0gICAgICAgIEFTU0VSVChbZC0+bV93aW5kb3dTY3JpcHRPYmpl
Y3QuZ2V0KCkgaXNLaW5kT2ZDbGFzczpbRE9NQWJzdHJhY3RWaWV3IGNsYXNzXV0pOwotICAgICAg
ICBbKERPTUFic3RyYWN0VmlldyAqKWQtPm1fd2luZG93U2NyaXB0T2JqZWN0LmdldCgpIF9kaXNj
b25uZWN0RnJhbWVdOwotICAgIH0KLX0KLQogdm9pZCBGcmFtZTo6c2V0VXNlclN0eWxlU2hlZXRM
b2NhdGlvbihjb25zdCBLVVJMJiB1cmwpCiB7CiAgICAgZGVsZXRlIGQtPm1fdXNlclN0eWxlU2hl
ZXRMb2FkZXI7CkBAIC01OTMsMzggKzUyMCw0IEBAIHZvaWQgRnJhbWU6OnNldFVzZXJTdHlsZVNo
ZWV0KGNvbnN0IFN0cmluZyYgc3R5bGVTaGVldCkKICAgICAgICAgZC0+bV9kb2MtPnNldFVzZXJT
dHlsZVNoZWV0KHN0eWxlU2hlZXQpOwogfQogCi0jaWYgRU5BQkxFKE1BQ19KQVZBX0JSSURHRSkK
LXN0YXRpYyBwdGhyZWFkX3QgbWFpblRocmVhZDsKLQotc3RhdGljIHZvaWQgdXBkYXRlUmVuZGVy
aW5nRm9yQmluZGluZ3MoS0pTOjpFeGVjU3RhdGUqIGV4ZWMsIEtKUzo6SlNPYmplY3QqIHJvb3RP
YmplY3QpCi17Ci0gICAgaWYgKHB0aHJlYWRfc2VsZigpICE9IG1haW5UaHJlYWQpCi0gICAgICAg
IHJldHVybjsKLSAgICAgICAgCi0gICAgaWYgKCFyb290T2JqZWN0KQotICAgICAgICByZXR1cm47
Ci0gICAgICAgIAotICAgIEpTRE9NV2luZG93KiB3aW5kb3cgPSBzdGF0aWNfY2FzdDxKU0RPTVdp
bmRvdyo+KHJvb3RPYmplY3QpOwotICAgIGlmICghd2luZG93KQotICAgICAgICByZXR1cm47Ci0K
LSAgICBGcmFtZSogZnJhbWUgPSB3aW5kb3ctPmltcGwoKS0+ZnJhbWUoKTsKLSAgICBpZiAoIWZy
YW1lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+
ZG9jdW1lbnQoKTsKLSAgICBpZiAoIWRvY3VtZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBk
b2N1bWVudC0+dXBkYXRlUmVuZGVyaW5nKCk7Ci19Ci0KLXZvaWQgRnJhbWU6OmluaXRKYXZhSlNC
aW5kaW5ncygpCi17Ci0gICAgbWFpblRocmVhZCA9IHB0aHJlYWRfc2VsZigpOwotICAgIEtKUzo6
QmluZGluZ3M6OkphdmFKU09iamVjdDo6aW5pdGlhbGl6ZUpOSVRocmVhZGluZygpOwotICAgIEtK
Uzo6QmluZGluZ3M6Okluc3RhbmNlOjpzZXREaWRFeGVjdXRlRnVuY3Rpb24odXBkYXRlUmVuZGVy
aW5nRm9yQmluZGluZ3MpOwotfQotI2VuZGlmCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9xdC9GcmFtZVF0LmNwcCBiL1dlYkNvcmUvcGFnZS9xdC9G
cmFtZVF0LmNwcAppbmRleCA5NTYyNTMwLi41NjBmZDViIDEwMDY0NAotLS0gYS9XZWJDb3JlL3Bh
Z2UvcXQvRnJhbWVRdC5jcHAKKysrIGIvV2ViQ29yZS9wYWdlL3F0L0ZyYW1lUXQuY3BwCkBAIC0x
LDE1ICsxLDQgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgRGlyayBNdWVsbGVyIDxtdWVs
bGVyQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUu
b3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA2IEdlb3JnZSBTdGFpa29zIDxzdGFpa29zQGtkZS5v
cmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2ltb24gSGF1c21hbm4gPGhhdXNtYW5uQGtkZS5v
cmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLSAqIENv
cHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4K
LSAqIENvcHlyaWdodCAoQykgMjAwNyBUcm9sbHRlY2ggQVNBCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDggQ29sbGFib3JhIEx0ZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogICogYXJlIG1ldDoK
QEAgLTM1LDkzICsyNCw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRnJhbWUu
aCIKIAotI2luY2x1ZGUgIlBsdWdpblZpZXcuaCIKLQotI2luY2x1ZGUgIkVsZW1lbnQuaCIKLSNp
bmNsdWRlICJSZW5kZXJPYmplY3QuaCIKLSNpbmNsdWRlICJSZW5kZXJXaWRnZXQuaCIKLSNpbmNs
dWRlICJSZW5kZXJMYXllci5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJEb2N1bWVu
dC5oIgotI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCi0jaW5jbHVkZSAiRE9NV2luZG93LmgiCi0j
aW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVzdC5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50
UXQuaCIKLSNpbmNsdWRlICJET01JbXBsZW1lbnRhdGlvbi5oIgotI2luY2x1ZGUgIlJlc291cmNl
SGFuZGxlSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIlNldHRp
bmdzLmgiCi0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiRnJhbWVQcml2YXRlLmgi
Ci0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSFRNTERvY3VtZW50Lmgi
Ci0jaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgot
I2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9h
cmRFdmVudC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgotI2luY2x1ZGUgIk1v
dXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMuaCIKLSNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9s
bGVyLmgiCi0jaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgotI2luY2x1ZGUgIlR5cGluZ0Nv
bW1hbmQuaCIKLSNpbmNsdWRlICJxdF9pbnN0YW5jZS5oIgotI2luY2x1ZGUgInJ1bnRpbWVfcm9v
dC5oIgotI2luY2x1ZGUgInJ1bnRpbWUuaCIKLSNpbmNsdWRlICJKU0RPTVdpbmRvdy5oIgotI2lu
Y2x1ZGUgPFFTY3JvbGxBcmVhPgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0KIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotLy8gRklYTUU6IFR1cm5lZCB0aGlzIG9mZiB0byBmaXggYnVpbGRi
b3QuIFRoaXMgZnVuY3Rpb24gYmUgZWl0aGVyIGRlbGV0ZWQgb3IgdXNlZC4KLSNpZiAwCi1zdGF0
aWMgdm9pZCBkb1Njcm9sbChjb25zdCBSZW5kZXJPYmplY3QqIHIsIGJvb2wgaXNIb3Jpem9udGFs
LCBpbnQgbXVsdGlwbGllcikKLXsKLSAgICAvLyBGSVhNRTogVGhlIHNjcm9sbGluZyBkb25lIGhl
cmUgc2hvdWxkIGJlIGRvbmUgaW4gdGhlIGRlZmF1bHQgaGFuZGxlcnMKLSAgICAvLyBvZiB0aGUg
ZWxlbWVudHMgcmF0aGVyIHRoYW4gaGVyZSBpbiB0aGUgcGFydC4KLSAgICBpZiAoIXIpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIC8vYnJva2VuIHNpbmNlIGl0IGNhbGxzIHNjcm9sbCBvbiBzY3Jv
bGxiYXJzCi0gICAgLy9hbmQgd2UgaGF2ZSBub25lIG5vdwotICAgIC8vci0+c2Nyb2xsKGRpcmVj
dGlvbiwgS1dRU2Nyb2xsV2hlZWwsIG11bHRpcGxpZXIpOwotICAgIGlmICghci0+bGF5ZXIoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaW50IHggPSByLT5sYXllcigpLT5zY3JvbGxYT2Zmc2V0
KCk7Ci0gICAgaW50IHkgPSByLT5sYXllcigpLT5zY3JvbGxZT2Zmc2V0KCk7Ci0gICAgaWYgKGlz
SG9yaXpvbnRhbCkKLSAgICAgICAgeCArPSBtdWx0aXBsaWVyOwotICAgIGVsc2UKLSAgICAgICAg
eSArPSBtdWx0aXBsaWVyOwotCi0gICAgci0+bGF5ZXIoKS0+c2Nyb2xsVG9PZmZzZXQoeCwgeSwg
dHJ1ZSwgdHJ1ZSk7Ci19Ci0jZW5kaWYKLQotUGFzc1JlZlB0cjxLSlM6OkJpbmRpbmdzOjpJbnN0
YW5jZT4gRnJhbWU6OmNyZWF0ZVNjcmlwdEluc3RhbmNlRm9yV2lkZ2V0KFdlYkNvcmU6OldpZGdl
dCogd2lkZ2V0KQotewotICAgIGlmICh3aWRnZXQtPmlzRnJhbWVWaWV3KCkpCi0gICAgICAgIHJl
dHVybiAwOwotICAgIGlmICh3aWRnZXQtPmlzTlBBUElQbHVnaW4oKSkKLSAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFBsdWdpblZpZXcqPih3aWRnZXQpLT5iaW5kaW5nSW5zdGFuY2UoKTsKLQot
ICAgIFFXaWRnZXQqIG5hdGl2ZVdpZGdldCA9IHdpZGdldC0+bmF0aXZlV2lkZ2V0KCk7Ci0gICAg
aWYgKCFuYXRpdmVXaWRnZXQpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBLSlM6OkJp
bmRpbmdzOjpRdEluc3RhbmNlOjpjcmVhdGUobmF0aXZlV2lkZ2V0LCBiaW5kaW5nUm9vdE9iamVj
dCgpKTsKLX0KLQotdm9pZCBGcmFtZTo6Y2xlYXJQbGF0Zm9ybVNjcmlwdE9iamVjdHMoKQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRnJhbWU6OmRpc2Nvbm5lY3RQbGF0Zm9y
bVNjcmlwdE9iamVjdHMoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KIERyYWdJbWFn
ZVJlZiBGcmFtZTo6ZHJhZ0ltYWdlRm9yU2VsZWN0aW9uKCkgCiB7CiAgICAgcmV0dXJuIDA7CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2Uvd2luL0ZyYW1lV2luLmNwcCBiL1dlYkNvcmUvcGFnZS93
aW4vRnJhbWVXaW4uY3BwCmluZGV4IDk1NTE2ODAuLmIyMDQxZTggMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvcGFnZS93aW4vRnJhbWVXaW4uY3BwCisrKyBiL1dlYkNvcmUvcGFnZS93aW4vRnJhbWVXaW4u
Y3BwCkBAIC0yNyw2NCArMjcsMjAgQEAKICNpbmNsdWRlICJydW50aW1lLmgiCiAjaW5jbHVkZSAi
RnJhbWVXaW4uaCIKIAotI2luY2x1ZGUgPHdpbnNvY2syLmg+Ci0jaW5jbHVkZSA8d2luZG93cy5o
PgotCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0Lmgi
CiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJFZGl0b3JDbGllbnQuaCIKLSNpbmNs
dWRlICJGcmFtZUxvYWRlci5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZFJlcXVlc3QuaCIKICNpbmNs
dWRlICJGcmFtZVByaXZhdGUuaCIKLSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJI
VE1MSUZyYW1lRWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1ZGUgIkhU
TUxUYWJsZUNlbGxFbGVtZW50LmgiCi0jaW5jbHVkZSAiSlNET01XaW5kb3cuaCIKLSNpbmNsdWRl
ICJLZXlib2FyZEV2ZW50LmgiCi0jaW5jbHVkZSAiTlBfanNvYmplY3QuaCIKLSNpbmNsdWRlICJO
b3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJQbHVnaW5EYXRh
YmFzZS5oIgotI2luY2x1ZGUgIlBsdWdpblZpZXcuaCIKLSNpbmNsdWRlICJSZWd1bGFyRXhwcmVz
c2lvbi5oIgotI2luY2x1ZGUgIlJlbmRlckZyYW1lLmgiCi0jaW5jbHVkZSAiUmVuZGVyVGFibGVD
ZWxsLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgotI2luY2x1ZGUgIlJlc291cmNlSGFuZGxl
LmgiCi0jaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgotI2luY2x1ZGUgIlNjcmlwdENv
bnRyb2xsZXIuaCIKLSNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgotI2luY2x1ZGUgInJ1bnRp
bWVfcm9vdC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIlNldHRp
bmdzLmgiCiAKIHVzaW5nIHN0ZDo6bWluOwotdXNpbmcgbmFtZXNwYWNlIEtKUzo6QmluZGluZ3M7
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAot
dm9pZCBGcmFtZTo6Y2xlYXJQbGF0Zm9ybVNjcmlwdE9iamVjdHMoKQotewotfQotCi12b2lkIEZy
YW1lOjpkaXNjb25uZWN0UGxhdGZvcm1TY3JpcHRPYmplY3RzKCkKLXsKLX0KLQotUGFzc1JlZlB0
cjxLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZT4gRnJhbWU6OmNyZWF0ZVNjcmlwdEluc3RhbmNlRm9y
V2lkZ2V0KFdpZGdldCogd2lkZ2V0KQotewotICAgIC8vIEZJWE1FOiBJZGVhbGx5IHdlJ2QgaGF2
ZSBhbiBpc1BsdWdpblZpZXcoKSBoZXJlIGJ1dCB3ZSBjYW4ndCBhZGQgdGhhdCB0byB0aGUgb3Bl
biBzb3VyY2UgdHJlZSByaWdodCBub3cuCi0gICAgaWYgKHdpZGdldC0+aXNGcmFtZVZpZXcoKSkK
LSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UGx1Z2luVmlldyo+
KHdpZGdldCktPmJpbmRpbmdJbnN0YW5jZSgpOwotfQotCi12b2lkIGNvbXB1dGVQYWdlUmVjdHNG
b3JGcmFtZShGcmFtZSogZnJhbWUsIGNvbnN0IEludFJlY3QmIHByaW50UmVjdCwgZmxvYXQgaGVh
ZGVySGVpZ2h0LCBmbG9hdCBmb290ZXJIZWlnaHQsIGZsb2F0IHVzZXJTY2FsZUZhY3RvcixWZWN0
b3I8SW50UmVjdD4mIHBhZ2VzLCBpbnQmIG91dFBhZ2VIZWlnaHQpCit2b2lkIGNvbXB1dGVQYWdl
UmVjdHNGb3JGcmFtZShGcmFtZSogZnJhbWUsIGNvbnN0IEludFJlY3QmIHByaW50UmVjdCwgZmxv
YXQgaGVhZGVySGVpZ2h0LCBmbG9hdCBmb290ZXJIZWlnaHQsIGZsb2F0IHVzZXJTY2FsZUZhY3Rv
ciwgVmVjdG9yPEludFJlY3Q+JiBwYWdlcywgaW50JiBvdXRQYWdlSGVpZ2h0KQogewogICAgIEFT
U0VSVChmcmFtZSk7CiAKQEAgLTk0LDcgKzUwLDcgQEAgdm9pZCBjb21wdXRlUGFnZVJlY3RzRm9y
RnJhbWUoRnJhbWUqIGZyYW1lLCBjb25zdCBJbnRSZWN0JiBwcmludFJlY3QsIGZsb2F0IGhlYWQK
ICAgICBpZiAoIWZyYW1lLT5kb2N1bWVudCgpIHx8ICFmcmFtZS0+dmlldygpIHx8ICFmcmFtZS0+
ZG9jdW1lbnQoKS0+cmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuOwogIAotICAgIFJlbmRlclZp
ZXcqIHJvb3QgPSBzdGF0aWNfY2FzdDxSZW5kZXJWaWV3ICo+KGZyYW1lLT5kb2N1bWVudCgpLT5y
ZW5kZXJlcigpKTsKKyAgICBSZW5kZXJWaWV3KiByb290ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVmll
dyo+KGZyYW1lLT5kb2N1bWVudCgpLT5yZW5kZXJlcigpKTsKIAogICAgIGlmICghcm9vdCkgewog
ICAgICAgICBMT0dfRVJST1IoImRvY3VtZW50IHRvIGJlIHByaW50ZWQgaGFzIG5vIHJlbmRlcmVy
Iik7CmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViQmFzZU5ldHNjYXBlUGx1Z2lu
Vmlldy5tbSBiL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3Lm1t
CmluZGV4IDJiNDVlMmIuLmFmYjc2YTQgMTAwNjQ0Ci0tLSBhL1dlYktpdC9tYWMvUGx1Z2lucy9X
ZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3Lm1tCisrKyBiL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJC
YXNlTmV0c2NhcGVQbHVnaW5WaWV3Lm1tCkBAIC02MSw2ICs2MSw3IEBACiAjaW1wb3J0IDxXZWJD
b3JlL0ZyYW1lVHJlZS5oPiAKICNpbXBvcnQgPFdlYkNvcmUvUGFnZS5oPiAKICNpbXBvcnQgPFdl
YkNvcmUvUGx1Z2luTWFpblRocmVhZFNjaGVkdWxlci5oPgorI2ltcG9ydCA8V2ViQ29yZS9TY3Jp
cHRDb250cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1NvZnRMaW5raW5nLmg+IAogI2ltcG9y
dCA8V2ViQ29yZS9XZWJDb3JlT2JqQ0V4dHJhcy5oPgogI2ltcG9ydCA8V2ViS2l0L25wdGV4dGlu
cHV0Lmg+CkBAIC0yNTQ4LDcgKzI1NDksNyBAQCBzdGF0aWMgTlBCcm93c2VyVGV4dElucHV0RnVu
Y3MgKmJyb3dzZXJUZXh0SW5wdXRGdW5jcygpCiAgICAgICAgIGNhc2UgTlBOVldpbmRvd05QT2Jq
ZWN0OgogICAgICAgICB7CiAgICAgICAgICAgICBGcmFtZSogZnJhbWUgPSBjb3JlKFtzZWxmIHdl
YkZyYW1lXSk7Ci0gICAgICAgICAgICBOUE9iamVjdCogd2luZG93U2NyaXB0T2JqZWN0ID0gZnJh
bWUgPyBmcmFtZS0+d2luZG93U2NyaXB0TlBPYmplY3QoKSA6IDA7CisgICAgICAgICAgICBOUE9i
amVjdCogd2luZG93U2NyaXB0T2JqZWN0ID0gZnJhbWUgPyBmcmFtZS0+c2NyaXB0KCktPndpbmRv
d1NjcmlwdE5QT2JqZWN0KCkgOiAwOwogCiAgICAgICAgICAgICAvLyBSZXR1cm4gdmFsdWUgaXMg
ZXhwZWN0ZWQgdG8gYmUgcmV0YWluZWQsIGFzIGRlc2NyaWJlZCBoZXJlOiA8aHR0cDovL3d3dy5t
b3ppbGxhLm9yZy9wcm9qZWN0cy9wbHVnaW5zL25wcnVudGltZS5odG1sI2Jyb3dzZXJhY2Nlc3M+
CiAgICAgICAgICAgICBpZiAod2luZG93U2NyaXB0T2JqZWN0KQpAQCAtMjg0Niw3ICsyODQ3LDcg
QEAgc3RhdGljIE5QQnJvd3NlclRleHRJbnB1dEZ1bmNzICpicm93c2VyVGV4dElucHV0RnVuY3Mo
KQogICAgIExPRyhQbHVnaW5zLCAiTlBQX0Rlc3Ryb3k6ICVkIiwgbnBFcnIpOwogICAgIAogICAg
IGlmIChGcmFtZSogZnJhbWUgPSBjb3JlKFtzZWxmIHdlYkZyYW1lXSkpCi0gICAgICAgIGZyYW1l
LT5jbGVhbnVwU2NyaXB0T2JqZWN0c0ZvclBsdWdpbihzZWxmKTsKKyAgICAgICAgZnJhbWUtPnNj
cmlwdCgpLT5jbGVhbnVwU2NyaXB0T2JqZWN0c0ZvclBsdWdpbihzZWxmKTsKICAgICAgICAgCiAg
ICAgZnJlZShwbHVnaW4pOwogICAgIHBsdWdpbiA9IE5VTEw7CmRpZmYgLS1naXQgYS9XZWJLaXQv
bWFjL1BsdWdpbnMvV2ViUGx1Z2luQ29udHJvbGxlci5tbSBiL1dlYktpdC9tYWMvUGx1Z2lucy9X
ZWJQbHVnaW5Db250cm9sbGVyLm1tCmluZGV4IGM2YjcwMTUuLjBhODZhNWIgMTAwNjQ0Ci0tLSBh
L1dlYktpdC9tYWMvUGx1Z2lucy9XZWJQbHVnaW5Db250cm9sbGVyLm1tCisrKyBiL1dlYktpdC9t
YWMvUGx1Z2lucy9XZWJQbHVnaW5Db250cm9sbGVyLm1tCkBAIC0zNSw2ICszNSw3IEBACiAjaW1w
b3J0IDxXZWJDb3JlL1Jlc291cmNlUmVxdWVzdC5oPgogI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9y
bVN0cmluZy5oPgogI2ltcG9ydCA8V2ViQ29yZS9Eb2N1bWVudExvYWRlci5oPgorI2ltcG9ydCA8
V2ViQ29yZS9TY3JpcHRDb250cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViRGF0YVNvdXJj
ZUludGVybmFsLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViRnJhbWVJbnRlcm5hbC5oPgogI2ltcG9y
dCA8V2ViS2l0L1dlYkZyYW1lVmlldy5oPgpAQCAtMjA5LDcgKzIxMCw3IEBAIHN0YXRpYyBOU011
dGFibGVTZXQgKnBsdWdpblZpZXdzID0gbmlsOwogICAgICAgICAgICAgW3ZpZXcgcGx1Z2luRGVz
dHJveV07CiAgICAgICAgIAogICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gY29yZShbc2VsZiB3
ZWJGcmFtZV0pKQotICAgICAgICAgICAgZnJhbWUtPmNsZWFudXBTY3JpcHRPYmplY3RzRm9yUGx1
Z2luKHNlbGYpOworICAgICAgICAgICAgZnJhbWUtPnNjcmlwdCgpLT5jbGVhbnVwU2NyaXB0T2Jq
ZWN0c0ZvclBsdWdpbihzZWxmKTsKICAgICAgICAgCiAgICAgICAgIFtwbHVnaW5WaWV3cyByZW1v
dmVPYmplY3Q6dmlld107CiAgICAgICAgIFtbX2RvY3VtZW50VmlldyBfd2ViVmlld10gcmVtb3Zl
UGx1Z2luSW5zdGFuY2VWaWV3OnZpZXddOwpAQCAtMjU2LDcgKzI1Nyw3IEBAIHN0YXRpYyB2b2lk
IGNhbmNlbE91dHN0YW5kaW5nQ2hlY2soY29uc3Qgdm9pZCAqaXRlbSwgdm9pZCAqY29udGV4dCkK
ICAgICAgICAgICAgIFthVmlldyBwbHVnaW5EZXN0cm95XTsKICAgICAgICAgCiAgICAgICAgIGlm
IChGcmFtZSogZnJhbWUgPSBjb3JlKFtzZWxmIHdlYkZyYW1lXSkpCi0gICAgICAgICAgICBmcmFt
ZS0+Y2xlYW51cFNjcmlwdE9iamVjdHNGb3JQbHVnaW4oc2VsZik7CisgICAgICAgICAgICBmcmFt
ZS0+c2NyaXB0KCktPmNsZWFudXBTY3JpcHRPYmplY3RzRm9yUGx1Z2luKHNlbGYpOwogICAgICAg
ICAKICAgICAgICAgW3BsdWdpblZpZXdzIHJlbW92ZU9iamVjdDphVmlld107CiAgICAgICAgIFtb
X2RvY3VtZW50VmlldyBfd2ViVmlld10gcmVtb3ZlUGx1Z2luSW5zdGFuY2VWaWV3OmFWaWV3XTsK
ZGlmZiAtLWdpdCBhL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGll
bnQubW0gYi9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1t
CmluZGV4IDY1MWYwMDYuLmUyMWMxMDQgMTAwNjQ0Ci0tLSBhL1dlYktpdC9tYWMvV2ViQ29yZVN1
cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW0KKysrIGIvV2ViS2l0L21hYy9XZWJDb3JlU3Vw
cG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5tbQpAQCAtOTgsNiArOTgsNyBAQAogI2ltcG9ydCA8
V2ViQ29yZS9SZXNvdXJjZUhhbmRsZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZXNvdXJjZUxvYWRl
ci5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KKyNpbXBvcnQgPFdlYkNv
cmUvU2NyaXB0Q29udHJvbGxlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9TaGFyZWRCdWZmZXIuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZU9iakNFeHRyYXMuaD4KICNpbXBvcnQgPFdlYkNvcmUv
V2lkZ2V0Lmg+CkBAIC0xNDQ2LDE0ICsxNDQ3LDE1IEBAIFN0cmluZyBXZWJGcmFtZUxvYWRlckNs
aWVudDo6b3ZlcnJpZGVNZWRpYVR5cGUoKSBjb25zdAogdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVu
dDo6d2luZG93T2JqZWN0Q2xlYXJlZCgpCiB7CiAgICAgRnJhbWUgKmZyYW1lID0gY29yZShtX3dl
YkZyYW1lLmdldCgpKTsKKyAgICBTY3JpcHRDb250cm9sbGVyICpzY3JpcHQgPSBmcmFtZS0+c2Ny
aXB0KCk7CiAgICAgV2ViVmlldyAqd2ViVmlldyA9IGdldFdlYlZpZXcobV93ZWJGcmFtZS5nZXQo
KSk7CiAgICAgV2ViRnJhbWVMb2FkRGVsZWdhdGVJbXBsZW1lbnRhdGlvbkNhY2hlKiBpbXBsZW1l
bnRhdGlvbnMgPSBXZWJWaWV3R2V0RnJhbWVMb2FkRGVsZWdhdGVJbXBsZW1lbnRhdGlvbnMod2Vi
Vmlldyk7CiAgICAgaWYgKGltcGxlbWVudGF0aW9ucy0+ZGlkQ2xlYXJXaW5kb3dPYmplY3RGb3JG
cmFtZUZ1bmMpIHsKICAgICAgICAgQ2FsbEZyYW1lTG9hZERlbGVnYXRlKGltcGxlbWVudGF0aW9u
cy0+ZGlkQ2xlYXJXaW5kb3dPYmplY3RGb3JGcmFtZUZ1bmMsIHdlYlZpZXcsIEBzZWxlY3Rvcih3
ZWJWaWV3OmRpZENsZWFyV2luZG93T2JqZWN0OmZvckZyYW1lOiksCi0gICAgICAgICAgICBmcmFt
ZS0+d2luZG93U2NyaXB0T2JqZWN0KCksIG1fd2ViRnJhbWUuZ2V0KCkpOworICAgICAgICAgICAg
c2NyaXB0LT53aW5kb3dTY3JpcHRPYmplY3QoKSwgbV93ZWJGcmFtZS5nZXQoKSk7CiAgICAgfSBl
bHNlIGlmIChpbXBsZW1lbnRhdGlvbnMtPndpbmRvd1NjcmlwdE9iamVjdEF2YWlsYWJsZUZ1bmMp
IHsKICAgICAgICAgQ2FsbEZyYW1lTG9hZERlbGVnYXRlKGltcGxlbWVudGF0aW9ucy0+d2luZG93
U2NyaXB0T2JqZWN0QXZhaWxhYmxlRnVuYywgd2ViVmlldywgQHNlbGVjdG9yKHdlYlZpZXc6d2lu
ZG93U2NyaXB0T2JqZWN0QXZhaWxhYmxlOiksCi0gICAgICAgICAgICBmcmFtZS0+d2luZG93U2Ny
aXB0T2JqZWN0KCkpOworICAgICAgICAgICAgc2NyaXB0LT53aW5kb3dTY3JpcHRPYmplY3QoKSk7
CiAgICAgfQogCiAgICAgaWYgKFt3ZWJWaWV3IHNjcmlwdERlYnVnRGVsZWdhdGVdKSB7CmRpZmYg
LS1naXQgYS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0gYi9XZWJLaXQvbWFjL1dlYlZp
ZXcvV2ViRnJhbWUubW0KaW5kZXggNGY1YTY0Zi4uNDJhNzQ5MSAxMDA2NDQKLS0tIGEvV2ViS2l0
L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCisrKyBiL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFt
ZS5tbQpAQCAtMTMwOCw3ICsxMzA4LDcgQEAgc3RhdGljIE5TVVJMICpjcmVhdGVVbmlxdWVXZWJE
YXRhVVJMKCkKICAgICBGcmFtZSogY29yZUZyYW1lID0gX3ByaXZhdGUtPmNvcmVGcmFtZTsKICAg
ICBpZiAoIWNvcmVGcmFtZSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGNvcmVGcmFt
ZS0+d2luZG93U2NyaXB0T2JqZWN0KCk7CisgICAgcmV0dXJuIGNvcmVGcmFtZS0+c2NyaXB0KCkt
PndpbmRvd1NjcmlwdE9iamVjdCgpOwogfQogCiAtIChKU0dsb2JhbENvbnRleHRSZWYpZ2xvYmFs
Q29udGV4dApkaWZmIC0tZ2l0IGEvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVnZ2Vy
Lm1tIGIvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVnZ2VyLm1tCmluZGV4IGM5MTU3
MTMuLjNkZjk1ZjMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9tYWMvV2ViVmlldy9XZWJTY3JpcHREZWJ1
Z2dlci5tbQorKysgYi9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViU2NyaXB0RGVidWdnZXIubW0KQEAg
LTI2LDE3ICsyNiwxOCBAQAogICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaW5jbHVkZSAiV2ViU2NyaXB0
RGVidWdnZXIuaCIKLQotI2luY2x1ZGUgIldlYkZyYW1lSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJX
ZWJWaWV3SW50ZXJuYWwuaCIKLSNpbmNsdWRlICJXZWJTY3JpcHREZWJ1Z0RlbGVnYXRlLmgiCi0j
aW5jbHVkZSA8a2pzL0pTR2xvYmFsT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8a2pzL0RlYnVnZ2VyQ2Fs
bEZyYW1lLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9ET01XaW5kb3cuaD4KLSNpbmNsdWRlIDxXZWJD
b3JlL0ZyYW1lLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9KU0RPTVdpbmRvdy5oPgotI2luY2x1ZGUg
PFdlYkNvcmUvS1VSTC5oPgorI2ltcG9ydCAiV2ViU2NyaXB0RGVidWdnZXIuaCIKKworI2ltcG9y
dCAiV2ViRnJhbWVJbnRlcm5hbC5oIgorI2ltcG9ydCAiV2ViVmlld0ludGVybmFsLmgiCisjaW1w
b3J0ICJXZWJTY3JpcHREZWJ1Z0RlbGVnYXRlLmgiCisjaW1wb3J0IDxranMvSlNHbG9iYWxPYmpl
Y3QuaD4KKyNpbXBvcnQgPGtqcy9EZWJ1Z2dlckNhbGxGcmFtZS5oPgorI2ltcG9ydCA8V2ViQ29y
ZS9ET01XaW5kb3cuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRnJhbWUuaD4KKyNpbXBvcnQgPFdlYkNv
cmUvSlNET01XaW5kb3cuaD4KKyNpbXBvcnQgPFdlYkNvcmUvS1VSTC5oPgorI2ltcG9ydCA8V2Vi
Q29yZS9TY3JpcHRDb250cm9sbGVyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiB1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKQEAgLTEyMCw3ICsxMjEsNyBAQCB2b2lkIFdlYlNjcmlwdERlYnVn
Z2VyOjpjYWxsRXZlbnQoY29uc3QgRGVidWdnZXJDYWxsRnJhbWUmIGRlYnVnZ2VyQ2FsbEZyYW1l
LCBpbgogCiAgICAgV2ViRnJhbWUgKndlYkZyYW1lID0gdG9XZWJGcmFtZShkZWJ1Z2dlckNhbGxG
cmFtZS5keW5hbWljR2xvYmFsT2JqZWN0KCkpOwogCi0gICAgbV90b3BDYWxsRnJhbWUuYWRvcHRO
UyhbW1dlYlNjcmlwdENhbGxGcmFtZSBhbGxvY10gX2luaXRXaXRoR2xvYmFsT2JqZWN0OmNvcmUo
d2ViRnJhbWUpLT53aW5kb3dTY3JpcHRPYmplY3QoKSBjYWxsZXI6bV90b3BDYWxsRnJhbWUuZ2V0
KCkgZGVidWdnZXJDYWxsRnJhbWU6ZGVidWdnZXJDYWxsRnJhbWVdKTsKKyAgICBtX3RvcENhbGxG
cmFtZS5hZG9wdE5TKFtbV2ViU2NyaXB0Q2FsbEZyYW1lIGFsbG9jXSBfaW5pdFdpdGhHbG9iYWxP
YmplY3Q6Y29yZSh3ZWJGcmFtZSktPnNjcmlwdCgpLT53aW5kb3dTY3JpcHRPYmplY3QoKSBjYWxs
ZXI6bV90b3BDYWxsRnJhbWUuZ2V0KCkgZGVidWdnZXJDYWxsRnJhbWU6ZGVidWdnZXJDYWxsRnJh
bWVdKTsKIAogICAgIFdlYlZpZXcgKndlYlZpZXcgPSBbd2ViRnJhbWUgd2ViVmlld107CiAgICAg
W1t3ZWJWaWV3IF9zY3JpcHREZWJ1Z0RlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3OndlYlZpZXcg
ZGlkRW50ZXJDYWxsRnJhbWU6bV90b3BDYWxsRnJhbWUuZ2V0KCkgc291cmNlSWQ6c291cmNlSUQg
bGluZTpsaW5lTnVtYmVyIGZvcldlYkZyYW1lOndlYkZyYW1lXTsKZGlmZiAtLWdpdCBhL1dlYktp
dC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tIGIvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0K
aW5kZXggMDU2YzYyOC4uZjNiNTFlNCAxMDA2NDQKLS0tIGEvV2ViS2l0L21hYy9XZWJWaWV3L1dl
YlZpZXcubW0KKysrIGIvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KQEAgLTI1MTUsNyAr
MjUxNSw3IEBAIHN0YXRpYyB2b2lkIFdlYktpdEluaXRpYWxpemVBcHBsaWNhdGlvbkNhY2hlUGF0
aElmTmVjZXNzYXJ5KCkKICAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBtYWluRnJh
bWVdKTsKICAgICBpZiAoIWNvcmVGcmFtZSkKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1
cm4gY29yZUZyYW1lLT53aW5kb3dTY3JpcHRPYmplY3QoKTsKKyAgICByZXR1cm4gY29yZUZyYW1l
LT5zY3JpcHQoKS0+d2luZG93U2NyaXB0T2JqZWN0KCk7CiB9CiAKIC8vIEdldCB0aGUgYXBwcm9w
cmlhdGUgdXNlci1hZ2VudCBzdHJpbmcgZm9yIGEgcGFydGljdWxhciBVUkwuCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22674</attachid>
            <date>2008-08-06 02:45:12 -0700</date>
            <delta_ts>2008-08-06 02:59:02 -0700</delta_ts>
            <desc>Move more methods from Frame into ScriptController</desc>
            <filename>Move-more-methods-from-Frame-into-ScriptController.patch</filename>
            <type>text/plain</type>
            <size>81885</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">Y2EzMDM3OWE2NzVkYjIxNTQzNTQyN2FhZTFmMDYyNTk1OTU5NjNhYwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBkODAxODZlLi4wODJlOGEz
IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDkyIEBACisyMDA4LTA4LTA2ICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3Zl
IG1vcmUgbWV0aG9kcyBmcm9tIEZyYW1lIGludG8gU2NyaXB0Q29udHJvbGxlcgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAyOTQKKyAgICAgICAgCisg
ICAgICAgIEZpbmFsbHkgZmluaXNoIG1vcmUgb2YgdGhlIHdvcmsgd2hpY2ggRGFyaW4gc3RhcnRl
ZCBsb25nIGFnbworICAgICAgICBNb3ZlIGEgZmV3IG1vcmUgRnJhbWUgbWV0aG9kcyBpbnRvIFNj
cmlwdENvbnRyb2xsZXIuCisgICAgICAgIEkgYWxzbyB0b29rIHRoaXMgb3Bwb3J0dW5pdHkgdG8g
Y2xlYW4gdXAgc29tZSBvZiB0aGUgcGx1Z2luCisgICAgICAgIGNvZGUgYXMgd2VsbCwgYW5kIG1v
dmVkIHNvbWUgb2YgdGhhdCBpbnRvIFNjcmlwdENvbnRyb2xsZXIuCisKKyAgICAgICAgSSByZW1v
dmVkIEZyYW1lOjpjbGVhclNjcmlwdENvbnRyb2xsZXIoKSBhbmQgU2NyaXB0Q29udHJvbGxlcjo6
Y2xlYXIoKSBpcyBub3cgY2xlYXJXaW5kb3dTaGVsbCgpCisKKyAgICAgICAgTm8gZnVuY3Rpb25h
bCBjaGFuZ2VzLCB0aHVzIG5vIHRlc3QgY2FzZXMuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5h
bToKKyAgICAgICAgKiBXZWJDb3JlLk5QQVBJLmV4cDoKKyAgICAgICAgKiBXZWJDb3JlLmJhc2Uu
ZXhwOgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OlNjcmlwdENvbnRyb2xsZXIpOgorICAgICAgICAo
V2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6flNjcmlwdENvbnRyb2xsZXIpOgorICAgICAgICAo
V2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6YmluZGluZ1Jvb3RPYmplY3QpOgorICAgICAgICAo
V2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6Y3JlYXRlUm9vdE9iamVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjp3aW5kb3dTY3JpcHROUE9iamVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpjcmVhdGVTY3JpcHRPYmplY3RGb3JQbHVnaW5F
bGVtZW50KTogTmV3IG1ldGhvZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6
OmNsZWFyUGxhdGZvcm1TY3JpcHRPYmplY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENv
bnRyb2xsZXI6OmRpc2Nvbm5lY3RQbGF0Zm9ybVNjcmlwdE9iamVjdHMpOgorICAgICAgICAoV2Vi
Q29yZTo6U2NyaXB0Q29udHJvbGxlcjo6Y2xlYW51cFNjcmlwdE9iamVjdHNGb3JQbHVnaW4pOgor
ICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6Y2xlYXJTY3JpcHRPYmplY3RzKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmg6CisgICAgICAgIChXZWJD
b3JlOjpTY3JpcHRDb250cm9sbGVyOjpzb3VyY2VVUkwpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
aXB0Q29udHJvbGxlcjo6Y2xlYXJGb3JtZXJXaW5kb3cpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L1NjcmlwdENvbnRyb2xsZXJHdGsuY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3BhZ2UvZ3RrL0Zy
YW1lR3RrLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpjcmVhdGVTY3JpcHRJbnN0YW5j
ZUZvcldpZGdldCk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlck1hYy5t
bTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpjcmVhdGVTY3Jp
cHRJbnN0YW5jZUZvcldpZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVy
Ojp3aW5kb3dTY3JpcHRPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxl
cjo6Y2xlYXJQbGF0Zm9ybVNjcmlwdE9iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0
Q29udHJvbGxlcjo6ZGlzY29ubmVjdFBsYXRmb3JtU2NyaXB0T2JqZWN0cyk6CisgICAgICAgIChX
ZWJDb3JlOjp1cGRhdGVSZW5kZXJpbmdGb3JCaW5kaW5ncyk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JpcHRDb250cm9sbGVyOjppbml0SmF2YUpTQmluZGluZ3MpOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL1NjcmlwdENvbnRyb2xsZXJRdC5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvcGFnZS9ndGsv
RnJhbWVHdGsuY3BwLgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6Y3JlYXRl
U2NyaXB0SW5zdGFuY2VGb3JXaWRnZXQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdENv
bnRyb2xsZXJXaW4uY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9TVkdS
ZXNvdXJjZU1hc2tlckNnLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6
OmNyZWF0ZVNjcmlwdEluc3RhbmNlRm9yV2lkZ2V0KToKKyAgICAgICAgKiBiaW5kaW5ncy9vYmpj
L0RPTS5tbToKKyAgICAgICAgKC1bRE9NTm9kZSBLSlM6OkJpbmRpbmdzOjpdKToKKyAgICAgICAg
KiBiaW5kaW5ncy9vYmpjL0RPTUludGVybmFsLm1tOgorICAgICAgICAoLVtXZWJTY3JpcHRPYmpl
Y3QgX2luaXRpYWxpemVTY3JpcHRET01Ob2RlSW1wXSk6CisgICAgICAgICogYnJpZGdlL2puaS9q
bmlfanNvYmplY3QubW06CisgICAgICAgIChjcmVhdGVSb290T2JqZWN0KToKKyAgICAgICAgKiBo
dG1sL0hUTUxBcHBsZXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBcHBsZXRF
bGVtZW50OjpyZW5kZXJXaWRnZXRGb3JKU0JpbmRpbmdzKToKKyAgICAgICAgKiBodG1sL0hUTUxB
cHBsZXRFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MRW1iZWRFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmZpbmRXaWRnZXRSZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MRW1iZWRFbGVtZW50OjpyZW5kZXJXaWRnZXRGb3JKU0JpbmRpbmdzKToKKyAgICAgICAgKiBo
dG1sL0hUTUxFbWJlZEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxPYmplY3RFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50Ojp+SFRNTE9iamVjdEVs
ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9iamVjdEVsZW1lbnQ6OnJlbmRlcldpZGdl
dEZvckpTQmluZGluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9iamVjdEVsZW1lbnQ6OmRl
dGFjaCk6CisgICAgICAgICogaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5oOgorICAgICAgICAqIGh0
bWwvSFRNTFBsdWdJbkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBsdWdJbkVs
ZW1lbnQ6On5IVE1MUGx1Z0luRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGx1Z0lu
RWxlbWVudDo6ZGV0YWNoKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQbHVnSW5FbGVtZW50Ojpn
ZXRJbnN0YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGx1Z0luRWxlbWVudDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBsdWdJbkVsZW1lbnQ6Omdl
dE5QT2JqZWN0KToKKyAgICAgICAgKiBodG1sL0hUTUxQbHVnSW5FbGVtZW50Lmg6CisgICAgICAg
ICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVy
OjpjbGVhcik6CisgICAgICAgICogcGFnZS9GcmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZTo6RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6On5GcmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZTo6cGFnZURlc3Ryb3llZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVByaXZhdGU6OkZyYW1lUHJpdmF0ZSk6CisgICAgICAgICogcGFnZS9GcmFtZS5oOgorICAgICAg
ICAqIHBhZ2UvRnJhbWVQcml2YXRlLmg6CisgICAgICAgICogcGFnZS9ndGsvRnJhbWVHdGsuY3Bw
OgorICAgICAgICAqIHBhZ2UvbWFjL0ZyYW1lTWFjLm1tOgorICAgICAgICAqIHBhZ2UvcXQvRnJh
bWVRdC5jcHA6CisgICAgICAgICogcGFnZS93aW4vRnJhbWVXaW4uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Y29tcHV0ZVBhZ2VSZWN0c0ZvckZyYW1lKToKKwogMjAwOC0wOC0wNSAgU3RldmUgRmFs
a2VuYnVyZyAgPHNmYWxrZW5AYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBsYXN0IHRpbWVyIGZp
eC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0gYi9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmFtCmluZGV4IDUzNGM3OTMuLjU3OWJjYTMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvR05VbWFr
ZWZpbGUuYW0KKysrIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtMTA1MCw2ICsxMDUwLDcg
QEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3htbC9YTUxTZXJpYWxpemVyLmNwcAog
CiB3ZWJjb3JlZ3RrX3NvdXJjZXMgKz0gXAorCVdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29u
dHJvbGxlckd0ay5jcHAgXAogCVdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luRGF0YUd0ay5jcHAg
XAogCVdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luUGFja2FnZUd0ay5jcHAgXAogCVdlYkNvcmUv
cGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29y
ZS5OUEFQSS5leHAgYi9XZWJDb3JlL1dlYkNvcmUuTlBBUEkuZXhwCmluZGV4IGIxY2U0NDIuLmZk
MTVjNTEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5OUEFQSS5leHAKKysrIGIvV2ViQ29y
ZS9XZWJDb3JlLk5QQVBJLmV4cApAQCAtMTYsNCArMTYsNSBAQCBfX05QTl9SZXRhaW5PYmplY3QK
IF9fTlBOX1NldEV4Y2VwdGlvbgogX19OUE5fU2V0UHJvcGVydHkKIF9fTlBOX1VURjhGcm9tSWRl
bnRpZmllcgotX19aTjdXZWJDb3JlNUZyYW1lMjB3aW5kb3dTY3JpcHROUE9iamVjdEV2CitfX1pO
N1dlYkNvcmUxNlNjcmlwdENvbnRyb2xsZXIyMHdpbmRvd1NjcmlwdE5QT2JqZWN0RXYKK19fWk43
V2ViQ29yZTE2U2NyaXB0Q29udHJvbGxlcjI5Y2xlYW51cFNjcmlwdE9iamVjdHNGb3JQbHVnaW5F
UHYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cCBiL1dlYkNvcmUvV2ViQ29y
ZS5iYXNlLmV4cAppbmRleCBkM2EzNjZjLi44ZGJiNmViIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dl
YkNvcmUuYmFzZS5leHAKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCkBAIC0xNjcsNyAr
MTY3LDYgQEAgX19aTjdXZWJDb3JlMTFGcmFtZUxvYWRlcjRsb2FkRVBOU18xNERvY3VtZW50TG9h
ZGVyRQogX19aTjdXZWJDb3JlMTFGcmFtZUxvYWRlcjRsb2FkRVJLTlNfMTVSZXNvdXJjZVJlcXVl
c3RFCiBfX1pON1dlYkNvcmUxMUZyYW1lTG9hZGVyNGxvYWRFUktOU18xNVJlc291cmNlUmVxdWVz
dEVSS05TXzE0U3Vic3RpdHV0ZURhdGFFCiBfX1pON1dlYkNvcmUxMUZyYW1lTG9hZGVyNGxvYWRF
UktOU18xNVJlc291cmNlUmVxdWVzdEVSS05TXzZTdHJpbmdFCi1fX1pON1dlYkNvcmUxMUZyYW1l
TG9hZGVyNWNsZWFyRWJiCiBfX1pON1dlYkNvcmUxMUZyYW1lTG9hZGVyNnJlbG9hZEV2CiBfX1pO
N1dlYkNvcmUxMUZyYW1lTG9hZGVyN2FkZERhdGFFUEtjaQogX19aTjdXZWJDb3JlMTFGcmFtZUxv
YWRlcjdjYW5Mb2FkRVJLTlNfNEtVUkxFUktOU182U3RyaW5nRVBLTlNfOERvY3VtZW50RQpAQCAt
MzYyLDYgKzM2MSw3IEBAIF9fWk43V2ViQ29yZTE2TmF2aWdhdGlvbkFjdGlvbkMxRVJLTlNfNEtV
UkxFTlNfMTNGcmFtZUxvYWRUeXBlRWIKIF9fWk43V2ViQ29yZTE2TmF2aWdhdGlvbkFjdGlvbkMx
RVJLTlNfNEtVUkxFTlNfMTROYXZpZ2F0aW9uVHlwZUUKIF9fWk43V2ViQ29yZTE2TmF2aWdhdGlv
bkFjdGlvbkMxRXYKIF9fWk43V2ViQ29yZTE2U2NyaXB0Q29udHJvbGxlcjEwaW5pdFNjcmlwdEV2
CitfX1pON1dlYkNvcmUxNlNjcmlwdENvbnRyb2xsZXIxOHdpbmRvd1NjcmlwdE9iamVjdEV2CiBf
X1pON1dlYkNvcmUxNmNvbG9yRnJvbU5TQ29sb3JFUDdOU0NvbG9yCiBfX1pON1dlYkNvcmUxNmNy
ZWF0ZUZ1bGxNYXJrdXBFUEtOU180Tm9kZUUKIF9fWk43V2ViQ29yZTE2Y3JlYXRlRnVsbE1hcmt1
cEVQS05TXzVSYW5nZUUKQEAgLTQ2MSwxNiArNDYxLDEzIEBAIF9fWk43V2ViQ29yZTVGcmFtZTEz
c2V0Wm9vbUZhY3RvckVmYgogX19aTjdXZWJDb3JlNUZyYW1lMTRmcmFtZUZvcldpZGdldEVQS05T
XzZXaWRnZXRFCiBfX1pON1dlYkNvcmU1RnJhbWUxNXNlbmRTY3JvbGxFdmVudEV2CiBfX1pON1dl
YkNvcmU1RnJhbWUxNmFkanVzdFBhZ2VIZWlnaHRFUGZmZmYKLV9fWk43V2ViQ29yZTVGcmFtZTE3
YmluZGluZ1Jvb3RPYmplY3RFdgogX19aTjdXZWJDb3JlNUZyYW1lMTdzZXRJc0Rpc2Nvbm5lY3Rl
ZEViCi1fX1pON1dlYkNvcmU1RnJhbWUxOHdpbmRvd1NjcmlwdE9iamVjdEV2CiBfX1pON1dlYkNv
cmU1RnJhbWUyMHNldFNlbGVjdGlvbkZyb21Ob25lRXYKIF9fWk43V2ViQ29yZTVGcmFtZTIxbWFy
a0FsbE1hdGNoZXNGb3JUZXh0RVJLTlNfNlN0cmluZ0ViagogX19aTjdXZWJDb3JlNUZyYW1lMjFz
ZXRQcm9oaWJpdHNTY3JvbGxpbmdFYgogX19aTjdXZWJDb3JlNUZyYW1lMjRjb21wdXRlQW5kU2V0
VHlwaW5nU3R5bGVFUE5TXzE5Q1NTU3R5bGVEZWNsYXJhdGlvbkVOU18xMEVkaXRBY3Rpb25FCiBf
X1pON1dlYkNvcmU1RnJhbWUyNW1hdGNoTGFiZWxzQWdhaW5zdEVsZW1lbnRFUDdOU0FycmF5UE5T
XzdFbGVtZW50RQogX19aTjdXZWJDb3JlNUZyYW1lMjhzZWFyY2hGb3JMYWJlbHNCZWZvcmVFbGVt
ZW50RVA3TlNBcnJheVBOU183RWxlbWVudEUKLV9fWk43V2ViQ29yZTVGcmFtZTI5Y2xlYW51cFNj
cmlwdE9iamVjdHNGb3JQbHVnaW5FUHYKIF9fWk43V2ViQ29yZTVGcmFtZTI5Zm9yY2VMYXlvdXRX
aXRoUGFnZVdpZHRoUmFuZ2VFZmZiCiBfX1pON1dlYkNvcmU1RnJhbWUzNHNldE1hcmtlZFRleHRN
YXRjaGVzQXJlSGlnaGxpZ2h0ZWRFYgogX19aTjdXZWJDb3JlNUZyYW1lNGluaXRFdgpAQCAtNTYx
LDYgKzU1OCw3IEBAIF9fWk43V2ViQ29yZThGb3JtRGF0YUQxRXYKIF9fWk43V2ViQ29yZThJbnRQ
b2ludEMxRVJLOF9OU1BvaW50CiBfX1pON1dlYkNvcmU4U2V0dGluZ3MxNHNldEphdmFFbmFibGVk
RWIKIF9fWk43V2ViQ29yZThTZXR0aW5nczE2c2V0VXNlc1BhZ2VDYWNoZUViCitfX1pON1dlYkNv
cmU4U2V0dGluZ3MxNnNldFpvb21zVGV4dE9ubHlFYgogX19aTjdXZWJDb3JlOFNldHRpbmdzMTdz
ZXRQbHVnaW5zRW5hYmxlZEViCiBfX1pON1dlYkNvcmU4U2V0dGluZ3MxOHNldERPTVBhc3RlQWxs
b3dlZEViCiBfX1pON1dlYkNvcmU4U2V0dGluZ3MxOHNldERlZmF1bHRGb250U2l6ZUVpCkBAIC01
NzYsNyArNTc0LDYgQEAgX19aTjdXZWJDb3JlOFNldHRpbmdzMjJzZXRTaG93c1VSTHNJblRvb2xU
aXBzRWIKIF9fWk43V2ViQ29yZThTZXR0aW5nczIzc2V0RGVmYXVsdEZpeGVkRm9udFNpemVFaQog
X19aTjdXZWJDb3JlOFNldHRpbmdzMjNzZXRFZGl0YWJsZUxpbmtCZWhhdmlvckVOU18yMEVkaXRh
YmxlTGlua0JlaGF2aW9yRQogX19aTjdXZWJDb3JlOFNldHRpbmdzMjNzZXRVcGRhdGVzV2hlbk9m
ZnNjcmVlbkViCi1fX1pON1dlYkNvcmU4U2V0dGluZ3MxNnNldFpvb21zVGV4dE9ubHlFYgogX19a
TjdXZWJDb3JlOFNldHRpbmdzMjRzZXRUZXh0QXJlYXNBcmVSZXNpemFibGVFYgogX19aTjdXZWJD
b3JlOFNldHRpbmdzMjVzZXREZXZlbG9wZXJFeHRyYXNFbmFibGVkRWIKIF9fWk43V2ViQ29yZThT
ZXR0aW5nczI1c2V0TWluaW11bUxvZ2ljYWxGb250U2l6ZUVpCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L1dlYkNvcmUucHJvIGIvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCBkMzVhZGM3Li42ZWQ5YjE1
IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUucHJvCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5w
cm8KQEAgLTkyMiw2ICs5MjIsNyBAQCBIRUFERVJTICs9IFwKICAgICAkJFBXRC9wbGF0Zm9ybS9u
ZXR3b3JrL3F0L1FOZXR3b3JrUmVwbHlIYW5kbGVyLmgKIAogU09VUkNFUyArPSBcCisgICAgYmlu
ZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlclF0LmNwcCBcCiAgICAgYnJpZGdlL3F0L3F0X2NsYXNz
LmNwcCBcCiAgICAgYnJpZGdlL3F0L3F0X2luc3RhbmNlLmNwcCBcCiAgICAgYnJpZGdlL3F0L3F0
X3J1bnRpbWUuY3BwIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2ogYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IDVj
NzAxYjkuLmMwODU1ZGEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAt
MTQxODMsNiArMTQxODMsMTAgQEAKIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQor
CQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXFNjcmlwdENvbnRyb2xsZXJXaW4uY3Bw
Ig0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQogCQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXGJpbmRpbmdzXGpzXFN0cmluZ1NvdXJjZVByb3ZpZGVyLmgiDQogCQkJCQk+DQogCQkJCTwv
RmlsZT4NCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGNj
NDcxOTUuLmQ4ZjEyYmEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC0yMTg2LDYgKzIxODYsNyBAQAogCQlBODNCNzk1NTBDQ0IwMTI1MDAwQjA4MjUgLyog
RE9NU1ZHRm9udEZhY2VFbGVtZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4M0I3OTQ2MENDQjAxMjUwMDBCMDgyNSAvKiBET01TVkdG
b250RmFjZUVsZW1lbnRJbnRlcm5hbC5oICovOyB9OwogCQlBODNCNzk1NjBDQ0IwMTI1MDAwQjA4
MjUgLyogRE9NU1ZHRm9udEZhY2VFbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTgzQjc5NDcwQ0NCMDEyNTAwMEIwODI1IC8qIERPTVNWR0Zv
bnRGYWNlRWxlbWVudC5tbSAqLzsgfTsKIAkJQTgzQjc5NTcwQ0NCMDEyNTAwMEIwODI1IC8qIERP
TVNWR0ZvbnRGYWNlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTgzQjc5NDgwQ0NCMDEyNTAwMEIwODI1IC8qIERPTVNWR0ZvbnRGYWNlRWxl
bWVudC5oICovOyB9OworCQlBODNFMUM3NDBFNDkwNDJDMDAxNDBCOUMgLyogU2NyaXB0Q29udHJv
bGxlck1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE4M0UxQzcyMEU0OTA0MkIwMDE0MEI5QyAvKiBTY3JpcHRDb250cm9sbGVyTWFjLm1tICovOyB9
OwogCQlBODRFQkQ3ODBDQjhDODkyMDAwNzk2MDkgLyogSlNTdHlsZVNoZWV0TGlzdEN1c3RvbS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODRFQkQ3
NzBDQjhDODkyMDAwNzk2MDkgLyogSlNTdHlsZVNoZWV0TGlzdEN1c3RvbS5jcHAgKi87IH07CiAJ
CUE4NEVCRDgzMENCOEM5NzcwMDA3OTYwOSAvKiBKU1N0eWxlU2hlZXRMaXN0LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODRFQkQ4MTBDQjhDOTc3MDAw
Nzk2MDkgLyogSlNTdHlsZVNoZWV0TGlzdC5oICovOyB9OwogCQlBODRFQkQ4NDBDQjhDOTc3MDAw
Nzk2MDkgLyogSlNTdHlsZVNoZWV0TGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBODRFQkQ4MjBDQjhDOTc3MDAwNzk2MDkgLyogSlNTdHlsZVNo
ZWV0TGlzdC5jcHAgKi87IH07CkBAIC02NTIwLDYgKzY1MjEsNyBAQAogCQlBODNCNzk0NjBDQ0Iw
MTI1MDAwQjA4MjUgLyogRE9NU1ZHRm9udEZhY2VFbGVtZW50SW50ZXJuYWwuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NU1ZHRm9udEZhY2VFbGVtZW50SW50ZXJuYWwuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgzQjc5NDcwQ0NCMDEyNTAwMEIwODI1IC8q
IERPTVNWR0ZvbnRGYWNlRWxlbWVudC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IERPTVNWR0ZvbnRGYWNlRWxlbWVudC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQTgzQjc5NDgwQ0NCMDEyNTAwMEIwODI1IC8qIERPTVNWR0ZvbnRGYWNlRWxlbWVu
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01TVkdGb250RmFjZUVsZW1l
bnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTgzRTFDNzIwRTQ5MDQyQjAwMTQw
QjlDIC8qIFNjcmlwdENvbnRyb2xsZXJNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBTY3JpcHRDb250cm9sbGVyTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBODRFQkQ3NzBDQjhDODkyMDAwNzk2MDkgLyogSlNTdHlsZVNoZWV0TGlzdEN1
c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1N0eWxlU2hl
ZXRMaXN0Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTg0RUJEODEw
Q0I4Qzk3NzAwMDc5NjA5IC8qIEpTU3R5bGVTaGVldExpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNTdHlsZVNoZWV0TGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlBODRFQkQ4MjBDQjhDOTc3MDAwNzk2MDkgLyogSlNTdHlsZVNoZWV0TGlzdC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1N0eWxlU2hlZXRMaXN0LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyMzIzLDYgKzEyMzI1LDcgQEAKIAkJ
CQlCQ0EzNzhCQTBEMTVGNjQyMDBCNzkzRDYgLyogU2NoZWR1bGVkQWN0aW9uLmNwcCAqLywKIAkJ
CQlCQ0EzNzhCQjBEMTVGNjQyMDBCNzkzRDYgLyogU2NoZWR1bGVkQWN0aW9uLmggKi8sCiAJCQkJ
OTNCNzBENTMwOUVCMEM3QzAwOUQ4NDY4IC8qIFNjcmlwdENvbnRyb2xsZXIuY3BwICovLAorCQkJ
CUE4M0UxQzcyMEU0OTA0MkIwMDE0MEI5QyAvKiBTY3JpcHRDb250cm9sbGVyTWFjLm1tICovLAog
CQkJCTkzQjcwRDU0MDlFQjBDN0MwMDlEODQ2OCAvKiBTY3JpcHRDb250cm9sbGVyLmggKi8sCiAJ
CQkJNjU0ODhENkEwREQ1QTgzRDAwOUQ4M0IyIC8qIFN0cmluZ1NvdXJjZVByb3ZpZGVyLmggKi8s
CiAJCQkpOwpAQCAtMTcwODgsNiArMTcwOTEsNyBAQAogCQkJCUJDREZENDk1MEUzMDU5MkYwMDlE
MTBBRCAvKiBKU1hNTEh0dHBSZXF1ZXN0VXBsb2FkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMx
Mjg4RTcyMEUzMDA1RDYwMDM2MTlBRSAvKiBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMzEyODhFNzQwRTMwMDVENjAwMzYxOUFFIC8qIFdlYktpdENTU0tleWZy
YW1lc1J1bGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTgzRTFDNzQwRTQ5MDQyQzAwMTQwQjlD
IC8qIFNjcmlwdENvbnRyb2xsZXJNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5P
bmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAgYi9XZWJDb3JlL2JpbmRpbmdz
L2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCmluZGV4IDZkMzRiZGQuLjExYzUwNDkgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAKKysrIGIvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcApAQCAtMjksMTYgKzI5LDI0IEBACiAj
aW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIkdD
Q29udHJvbGxlci5oIgotI2luY2x1ZGUgIkpTRG9jdW1lbnQuaCIKICNpbmNsdWRlICJKU0RPTVdp
bmRvdy5oIgorI2luY2x1ZGUgIkpTRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJKU0V2ZW50TGlzdGVu
ZXIuaCIKKyNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgorI2luY2x1ZGUgIk5QX2pzb2JqZWN0
LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgorI2luY2x1ZGUg
InJ1bnRpbWVfcm9vdC5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU3RyaW5n
U291cmNlUHJvdmlkZXIuaCIKLSNpbmNsdWRlICJKU0V2ZW50TGlzdGVuZXIuaCIKKwogI2luY2x1
ZGUgPGtqcy9jb21wbGV0aW9uLmg+CiAjaW5jbHVkZSA8a2pzL2RlYnVnZ2VyLmg+CiAKKyNpZiBF
TkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyNpbmNsdWRlICJIVE1MUGx1Z0luRWxlbWVudC5o
IgorI2VuZGlmCisKICNpZiBFTkFCTEUoU1ZHKQogI2luY2x1ZGUgIkpTU1ZHTGF6eUV2ZW50TGlz
dGVuZXIuaCIKICNlbmRpZgpAQCAtNTQsNyArNjIsMjAgQEAgU2NyaXB0Q29udHJvbGxlcjo6U2Ny
aXB0Q29udHJvbGxlcihGcmFtZSogZnJhbWUpCiAgICAgLCBtX3NvdXJjZVVSTCgwKQogICAgICwg
bV9wcm9jZXNzaW5nVGltZXJDYWxsYmFjayhmYWxzZSkKICAgICAsIG1fcGF1c2VkKGZhbHNlKQor
I2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgICwgbV93aW5kb3dTY3JpcHROUE9i
amVjdCgwKQorI2VuZGlmCisjaWYgUExBVEZPUk0oTUFDKQorICAgICwgbV93aW5kb3dTY3JpcHRP
YmplY3QoMCkKKyNlbmRpZgogeworI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKE1BQ19KQVZB
X0JSSURHRSkKKyAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZEphdmFKU0JpbmRpbmdzOworICAg
IGlmICghaW5pdGlhbGl6ZWRKYXZhSlNCaW5kaW5ncykgeworICAgICAgICBpbml0aWFsaXplZEph
dmFKU0JpbmRpbmdzID0gdHJ1ZTsKKyAgICAgICAgaW5pdEphdmFKU0JpbmRpbmdzKCk7CisgICAg
fQorI2VuZGlmCiB9CiAKIFNjcmlwdENvbnRyb2xsZXI6On5TY3JpcHRDb250cm9sbGVyKCkKQEAg
LTY1LDYgKzg2LDggQEAgU2NyaXB0Q29udHJvbGxlcjo6flNjcmlwdENvbnRyb2xsZXIoKQogICAg
ICAgICAvLyBJdCdzIGxpa2VseSB0aGF0IHJlbGVhc2luZyB0aGUgZ2xvYmFsIG9iamVjdCBoYXMg
Y3JlYXRlZCBhIGxvdCBvZiBnYXJiYWdlLgogICAgICAgICBnY0NvbnRyb2xsZXIoKS5nYXJiYWdl
Q29sbGVjdFNvb24oKTsKICAgICB9CisKKyAgICBkaXNjb25uZWN0UGxhdGZvcm1TY3JpcHRPYmpl
Y3RzKCk7CiB9CiAKIEpTVmFsdWUqIFNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlKGNvbnN0IFN0
cmluZyYgc291cmNlVVJMLCBpbnQgYmFzZUxpbmUsIGNvbnN0IFN0cmluZyYgc3RyKSAKQEAgLTEw
MSw3ICsxMjQsNyBAQCBKU1ZhbHVlKiBTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZShjb25zdCBT
dHJpbmcmIHNvdXJjZVVSTCwgaW50IGJhc2VMaW5lLCBjb25zdAogICAgIHJldHVybiAwOwogfQog
Ci12b2lkIFNjcmlwdENvbnRyb2xsZXI6OmNsZWFyKCkKK3ZvaWQgU2NyaXB0Q29udHJvbGxlcjo6
Y2xlYXJXaW5kb3dTaGVsbCgpCiB7CiAgICAgaWYgKCFtX3dpbmRvd1NoZWxsKQogICAgICAgICBy
ZXR1cm47CkBAIC0yMTUsNCArMjM4LDExMSBAQCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OnVwZGF0
ZURvY3VtZW50KCkKIH0KIAogCitCaW5kaW5nczo6Um9vdE9iamVjdCogU2NyaXB0Q29udHJvbGxl
cjo6YmluZGluZ1Jvb3RPYmplY3QoKQoreworICAgIGlmICghaXNFbmFibGVkKCkpCisgICAgICAg
IHJldHVybiAwOworCisgICAgaWYgKCFtX2JpbmRpbmdSb290T2JqZWN0KQorICAgICAgICBtX2Jp
bmRpbmdSb290T2JqZWN0ID0gQmluZGluZ3M6OlJvb3RPYmplY3Q6OmNyZWF0ZSgwLCBnbG9iYWxP
YmplY3QoKSk7CisgICAgcmV0dXJuIG1fYmluZGluZ1Jvb3RPYmplY3QuZ2V0KCk7Cit9CisKK1Bh
c3NSZWZQdHI8QmluZGluZ3M6OlJvb3RPYmplY3Q+IFNjcmlwdENvbnRyb2xsZXI6OmNyZWF0ZVJv
b3RPYmplY3Qodm9pZCogbmF0aXZlSGFuZGxlKQoreworICAgIFJvb3RPYmplY3RNYXA6Oml0ZXJh
dG9yIGl0ID0gbV9yb290T2JqZWN0cy5maW5kKG5hdGl2ZUhhbmRsZSk7CisgICAgaWYgKGl0ICE9
IG1fcm9vdE9iamVjdHMuZW5kKCkpCisgICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworCisgICAg
UmVmUHRyPEJpbmRpbmdzOjpSb290T2JqZWN0PiByb290T2JqZWN0ID0gQmluZGluZ3M6OlJvb3RP
YmplY3Q6OmNyZWF0ZShuYXRpdmVIYW5kbGUsIGdsb2JhbE9iamVjdCgpKTsKKworICAgIG1fcm9v
dE9iamVjdHMuc2V0KG5hdGl2ZUhhbmRsZSwgcm9vdE9iamVjdCk7CisgICAgcmV0dXJuIHJvb3RP
YmplY3QucmVsZWFzZSgpOworfQorCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCitO
UE9iamVjdCogU2NyaXB0Q29udHJvbGxlcjo6d2luZG93U2NyaXB0TlBPYmplY3QoKQoreworICAg
IGlmICghbV93aW5kb3dTY3JpcHROUE9iamVjdCkgeworICAgICAgICBpZiAoaXNFbmFibGVkKCkp
IHsKKyAgICAgICAgICAgIC8vIEphdmFTY3JpcHQgaXMgZW5hYmxlZCwgc28gdGhlcmUgaXMgYSBK
YXZhU2NyaXB0IHdpbmRvdyBvYmplY3QuCisgICAgICAgICAgICAvLyBSZXR1cm4gYW4gTlBPYmpl
Y3QgYm91bmQgdG8gdGhlIHdpbmRvdyBvYmplY3QuCisgICAgICAgICAgICBKU09iamVjdCogd2lu
ID0gd2luZG93U2hlbGwoKS0+d2luZG93KCk7CisgICAgICAgICAgICBBU1NFUlQod2luKTsKKyAg
ICAgICAgICAgIEJpbmRpbmdzOjpSb290T2JqZWN0KiByb290ID0gYmluZGluZ1Jvb3RPYmplY3Qo
KTsKKyAgICAgICAgICAgIG1fd2luZG93U2NyaXB0TlBPYmplY3QgPSBfTlBOX0NyZWF0ZVNjcmlw
dE9iamVjdCgwLCB3aW4sIHJvb3QpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8g
SmF2YVNjcmlwdCBpcyBub3QgZW5hYmxlZCwgc28gd2UgY2Fubm90IGJpbmQgdGhlIE5QT2JqZWN0
IHRvIHRoZSBKYXZhU2NyaXB0IHdpbmRvdyBvYmplY3QuCisgICAgICAgICAgICAvLyBJbnN0ZWFk
LCB3ZSBjcmVhdGUgYW4gTlBPYmplY3Qgb2YgYSBkaWZmZXJlbnQgY2xhc3MsIG9uZSB3aGljaCBp
cyBub3QgYm91bmQgdG8gYSBKYXZhU2NyaXB0IG9iamVjdC4KKyAgICAgICAgICAgIG1fd2luZG93
U2NyaXB0TlBPYmplY3QgPSBfTlBOX0NyZWF0ZU5vU2NyaXB0T2JqZWN0KCk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICByZXR1cm4gbV93aW5kb3dTY3JpcHROUE9iamVjdDsKK30KKworTlBPYmpl
Y3QqIFNjcmlwdENvbnRyb2xsZXI6OmNyZWF0ZVNjcmlwdE9iamVjdEZvclBsdWdpbkVsZW1lbnQo
SFRNTFBsdWdJbkVsZW1lbnQqIHBsdWdpbikKK3sKKyAgICAvLyBDYW4ndCBjcmVhdGUgTlBPYmpl
Y3RzIHdoZW4gSmF2YVNjcmlwdCBpcyBkaXNhYmxlZAorICAgIGlmICghaXNFbmFibGVkKCkpCisg
ICAgICAgIHJldHVybiBfTlBOX0NyZWF0ZU5vU2NyaXB0T2JqZWN0KCk7CisKKyAgICAvLyBDcmVh
dGUgYSBKU09iamVjdCBib3VuZCB0byB0aGlzIGVsZW1lbnQKKyAgICBFeGVjU3RhdGUqIGV4ZWMg
PSBnbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOworICAgIEpTVmFsdWUqIGpzRWxlbWVudFZh
bHVlID0gdG9KUyhleGVjLCBwbHVnaW4pOworICAgIGlmICghanNFbGVtZW50VmFsdWUgfHwgIWpz
RWxlbWVudFZhbHVlLT5pc09iamVjdCgpKQorICAgICAgICByZXR1cm4gX05QTl9DcmVhdGVOb1Nj
cmlwdE9iamVjdCgpOworCisgICAgLy8gV3JhcCB0aGUgSlNPYmplY3QgaW4gYW4gTlBPYmplY3QK
KyAgICByZXR1cm4gX05QTl9DcmVhdGVTY3JpcHRPYmplY3QoMCwganNFbGVtZW50VmFsdWUtPmdl
dE9iamVjdCgpLCBiaW5kaW5nUm9vdE9iamVjdCgpKTsKK30KKyNlbmRpZgorCisjaWYgIVBMQVRG
T1JNKE1BQykKK3ZvaWQgU2NyaXB0Q29udHJvbGxlcjo6Y2xlYXJQbGF0Zm9ybVNjcmlwdE9iamVj
dHMoKQoreworfQorCit2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmRpc2Nvbm5lY3RQbGF0Zm9ybVNj
cmlwdE9iamVjdHMoKQoreworfQorI2VuZGlmCisKK3ZvaWQgU2NyaXB0Q29udHJvbGxlcjo6Y2xl
YW51cFNjcmlwdE9iamVjdHNGb3JQbHVnaW4odm9pZCogbmF0aXZlSGFuZGxlKQoreworICAgIFJv
b3RPYmplY3RNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yb290T2JqZWN0cy5maW5kKG5hdGl2ZUhhbmRs
ZSk7CisKKyAgICBpZiAoaXQgPT0gbV9yb290T2JqZWN0cy5lbmQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaXQtPnNlY29uZC0+aW52YWxpZGF0ZSgpOworICAgIG1fcm9vdE9iamVjdHMucmVt
b3ZlKGl0KTsKK30KKwordm9pZCBTY3JpcHRDb250cm9sbGVyOjpjbGVhclNjcmlwdE9iamVjdHMo
KQoreworICAgIFJvb3RPYmplY3RNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcm9vdE9iamVj
dHMuZW5kKCk7CisgICAgZm9yIChSb290T2JqZWN0TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1f
cm9vdE9iamVjdHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBpdC0+c2Vjb25k
LT5pbnZhbGlkYXRlKCk7CisKKyAgICBtX3Jvb3RPYmplY3RzLmNsZWFyKCk7CisKKyAgICBpZiAo
bV9iaW5kaW5nUm9vdE9iamVjdCkgeworICAgICAgICBtX2JpbmRpbmdSb290T2JqZWN0LT5pbnZh
bGlkYXRlKCk7CisgICAgICAgIG1fYmluZGluZ1Jvb3RPYmplY3QgPSAwOworICAgIH0KKworI2lm
IEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgIGlmIChtX3dpbmRvd1NjcmlwdE5QT2Jq
ZWN0KSB7CisgICAgICAgIC8vIENhbGwgX05QTl9EZWFsbG9jYXRlT2JqZWN0KCkgaW5zdGVhZCBv
ZiBfTlBOX1JlbGVhc2VPYmplY3QoKSBzbyB0aGF0IHdlIGRvbid0IGxlYWsgaWYgYSBwbHVnaW4g
ZmFpbHMgdG8gcmVsZWFzZSB0aGUgd2luZG93CisgICAgICAgIC8vIHNjcmlwdCBvYmplY3QgcHJv
cGVybHkuCisgICAgICAgIC8vIFRoaXMgc2hvdWxkbid0IGNhdXNlIGFueSBwcm9ibGVtcyBmb3Ig
cGx1Z2lucyBzaW5jZSB0aGV5IHNob3VsZCBoYXZlIGFscmVhZHkgYmVlbiBzdG9wcGVkIGFuZCBk
ZXN0cm95ZWQgYXQgdGhpcyBwb2ludC4KKyAgICAgICAgX05QTl9EZWFsbG9jYXRlT2JqZWN0KG1f
d2luZG93U2NyaXB0TlBPYmplY3QpOworICAgICAgICBtX3dpbmRvd1NjcmlwdE5QT2JqZWN0ID0g
MDsKKyAgICB9CisjZW5kaWYKKworICAgIGNsZWFyUGxhdGZvcm1TY3JpcHRPYmplY3RzKCk7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2NyaXB0Q29udHJvbGxlci5oIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9s
bGVyLmgKaW5kZXggZTYzYmZmMy4uMzk5ODQ0ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TY3JpcHRDb250cm9sbGVyLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRD
b250cm9sbGVyLmgKQEAgLTIsNiArMiw3IEBACiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5IEhhcnJp
IFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtl
bGx5IChwbWtAcG9zdC5jb20pCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggRXJpYyBTZWlkZWwgPGVy
aWNAd2Via2l0Lm9yZz4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDE5ICsyNSwzOSBAQAog
I2luY2x1ZGUgIkpTRE9NV2luZG93U2hlbGwuaCIKICNpbmNsdWRlIDxranMvcHJvdGVjdC5oPgog
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKKyNp
ZiBQTEFURk9STShNQUMpCisjaWZkZWYgX19PQkpDX18KK0BjbGFzcyBXZWJTY3JpcHRPYmplY3Q7
CisjZWxzZQorY2xhc3MgV2ViU2NyaXB0T2JqZWN0OworI2VuZGlmCisjZW5kaWYKKworc3RydWN0
IE5QT2JqZWN0OwogCiBuYW1lc3BhY2UgS0pTIHsKICAgICBjbGFzcyBKU0dsb2JhbE9iamVjdDsK
ICAgICBjbGFzcyBKU1ZhbHVlOworCisgICAgbmFtZXNwYWNlIEJpbmRpbmdzIHsKKyAgICAgICAg
Y2xhc3MgSW5zdGFuY2U7CisgICAgICAgIGNsYXNzIFJvb3RPYmplY3Q7CisgICAgfQogfQogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEV2ZW50OwogY2xhc3MgRXZlbnRMaXN0ZW5lcjsK
K2NsYXNzIEhUTUxQbHVnSW5FbGVtZW50OwogY2xhc3MgRnJhbWU7CiBjbGFzcyBOb2RlOwogY2xh
c3MgU3RyaW5nOworY2xhc3MgV2lkZ2V0OworCit0eXBlZGVmIEhhc2hNYXA8dm9pZCosIFJlZlB0
cjxLSlM6OkJpbmRpbmdzOjpSb290T2JqZWN0PiA+IFJvb3RPYmplY3RNYXA7CiAKIGNsYXNzIFNj
cmlwdENvbnRyb2xsZXIgewogcHVibGljOgpAQCAtNTcsNyArNzgsNyBAQCBwdWJsaWM6CiAgICAg
fQogCiAgICAgS0pTOjpKU1ZhbHVlKiBldmFsdWF0ZShjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwg
aW50IGJhc2VMaW5lLCBjb25zdCBTdHJpbmcmIGNvZGUpOwotICAgIHZvaWQgY2xlYXIoKTsKKwog
ICAgIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gY3JlYXRlSFRNTEV2ZW50SGFuZGxlcihjb25z
dCBTdHJpbmcmIGZ1bmN0aW9uTmFtZSwgY29uc3QgU3RyaW5nJiBjb2RlLCBOb2RlKik7CiAjaWYg
RU5BQkxFKFNWRykKICAgICBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGNyZWF0ZVNWR0V2ZW50
SGFuZGxlcihjb25zdCBTdHJpbmcmIGZ1bmN0aW9uTmFtZSwgY29uc3QgU3RyaW5nJiBjb2RlLCBO
b2RlKik7CkBAIC03NSwxMCArOTYsMzEgQEAgcHVibGljOgogICAgIHZvaWQgc2V0UGF1c2VkKGJv
b2wgYikgeyBtX3BhdXNlZCA9IGI7IH0KICAgICBib29sIGlzUGF1c2VkKCkgY29uc3QgeyByZXR1
cm4gbV9wYXVzZWQ7IH0KIAorICAgIGNvbnN0IFN0cmluZyogc291cmNlVVJMKCkgY29uc3QgeyBy
ZXR1cm4gbV9zb3VyY2VVUkw7IH0gLy8gMCBpZiB3ZSBhcmUgbm90IGV2YWx1YXRpbmcgYW55IHNj
cmlwdAorCisgICAgdm9pZCBjbGVhcldpbmRvd1NoZWxsKCk7CiAgICAgdm9pZCBjbGVhckZvcm1l
cldpbmRvdyhKU0RPTVdpbmRvdyogd2luZG93KSB7IG1fbGl2ZUZvcm1lcldpbmRvd3MucmVtb3Zl
KHdpbmRvdyk7IH0KICAgICB2b2lkIHVwZGF0ZURvY3VtZW50KCk7CiAKLSAgICBjb25zdCBTdHJp
bmcqIHNvdXJjZVVSTCgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlVVJMOyB9IC8vIDAgaWYgd2Ug
YXJlIG5vdCBldmFsdWF0aW5nIGFueSBzY3JpcHQKKyAgICB2b2lkIGNsZWFyU2NyaXB0T2JqZWN0
cygpOworICAgIHZvaWQgY2xlYW51cFNjcmlwdE9iamVjdHNGb3JQbHVnaW4odm9pZCopOworCisg
ICAgUGFzc1JlZlB0cjxLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZT4gY3JlYXRlU2NyaXB0SW5zdGFu
Y2VGb3JXaWRnZXQoV2lkZ2V0Kik7CisgICAgS0pTOjpCaW5kaW5nczo6Um9vdE9iamVjdCogYmlu
ZGluZ1Jvb3RPYmplY3QoKTsKKworICAgIFBhc3NSZWZQdHI8S0pTOjpCaW5kaW5nczo6Um9vdE9i
amVjdD4gY3JlYXRlUm9vdE9iamVjdCh2b2lkKiBuYXRpdmVIYW5kbGUpOworCisjaWYgUExBVEZP
Uk0oTUFDKQorI2lmIEVOQUJMRShNQUNfSkFWQV9CUklER0UpCisgICAgc3RhdGljIHZvaWQgaW5p
dEphdmFKU0JpbmRpbmdzKCk7CisjZW5kaWYKKyAgICBXZWJTY3JpcHRPYmplY3QqIHdpbmRvd1Nj
cmlwdE9iamVjdCgpOworI2VuZGlmCisKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkK
KyAgICBOUE9iamVjdCogY3JlYXRlU2NyaXB0T2JqZWN0Rm9yUGx1Z2luRWxlbWVudChIVE1MUGx1
Z0luRWxlbWVudCopOworICAgIE5QT2JqZWN0KiB3aW5kb3dTY3JpcHROUE9iamVjdCgpOworI2Vu
ZGlmCiAKIHByaXZhdGU6CiAgICAgdm9pZCBpbml0U2NyaXB0SWZOZWVkZWQoKQpAQCAtODgsNiAr
MTMwLDkgQEAgcHJpdmF0ZToKICAgICB9CiAgICAgdm9pZCBpbml0U2NyaXB0KCk7CiAKKyAgICB2
b2lkIGNsZWFyUGxhdGZvcm1TY3JpcHRPYmplY3RzKCk7CisgICAgdm9pZCBkaXNjb25uZWN0UGxh
dGZvcm1TY3JpcHRPYmplY3RzKCk7CisKICAgICBLSlM6OlByb3RlY3RlZFB0cjxKU0RPTVdpbmRv
d1NoZWxsPiBtX3dpbmRvd1NoZWxsOwogICAgIEhhc2hTZXQ8SlNET01XaW5kb3cqPiBtX2xpdmVG
b3JtZXJXaW5kb3dzOwogICAgIEZyYW1lKiBtX2ZyYW1lOwpAQCAtOTYsNiArMTQxLDE2IEBAIHBy
aXZhdGU6CiAKICAgICBib29sIG1fcHJvY2Vzc2luZ1RpbWVyQ2FsbGJhY2s7CiAgICAgYm9vbCBt
X3BhdXNlZDsKKworICAgIC8vIFRoZSByb290IG9iamVjdCB1c2VkIGZvciBvYmplY3RzIGJvdW5k
IG91dHNpZGUgdGhlIGNvbnRleHQgb2YgYSBwbHVnaW4uCisgICAgUmVmUHRyPEtKUzo6QmluZGlu
Z3M6OlJvb3RPYmplY3Q+IG1fYmluZGluZ1Jvb3RPYmplY3Q7CisgICAgUm9vdE9iamVjdE1hcCBt
X3Jvb3RPYmplY3RzOworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgIE5QT2Jq
ZWN0KiBtX3dpbmRvd1NjcmlwdE5QT2JqZWN0OworI2VuZGlmCisjaWYgUExBVEZPUk0oTUFDKQor
ICAgIFJldGFpblB0cjxXZWJTY3JpcHRPYmplY3Q+IG1fd2luZG93U2NyaXB0T2JqZWN0OworI2Vu
ZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXJHdGsuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
Y3JpcHRDb250cm9sbGVyR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li4xYmFkMzc2Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRD
b250cm9sbGVyR3RrLmNwcApAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KKyAqIENvcHly
aWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICogQ29weXJpZ2h0IChD
KSAyMDA4IENvbGxhYm9yYSBMdGQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA4IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY3JpcHRDb250
cm9sbGVyLmgiCisKKyNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCisjaW5jbHVkZSAicnVudGltZV9y
b290LmgiCisjaW5jbHVkZSAicnVudGltZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bh
c3NSZWZQdHI8S0pTOjpCaW5kaW5nczo6SW5zdGFuY2U+IEZyYW1lOjpjcmVhdGVTY3JpcHRJbnN0
YW5jZUZvcldpZGdldChXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBpZiAod2lkZ2V0LT5pc1BsdWdp
blZpZXcoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UGx1
Z2luVmlldyo+KHdpZGdldCktPmJpbmRpbmdJbnN0YW5jZSgpOworfQorCit9CmRpZmYgLS1naXQg
YS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXJNYWMubW0gYi9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXJNYWMubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uM2ZjMDYzYQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2NyaXB0Q29udHJvbGxlck1hYy5tbQpAQCAtMCwwICsxLDE2OCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAo
YXBAbnlwb3AuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDA3IFRyb2xsdGVjaCBBU0EKKyAqIENv
cHlyaWdodCAoQykgMjAwOCBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlNjcmlwdENvbnRyb2xsZXIuaCIKKworI2ltcG9y
dCAiRE9NQWJzdHJhY3RWaWV3RnJhbWUuaCIKKyNpbXBvcnQgIkRPTVdpbmRvdy5oIgorI2ltcG9y
dCAiRnJhbWUuaCIKKyNpbXBvcnQgIkZyYW1lTG9hZGVyLmgiCisjaW1wb3J0ICJGcmFtZUxvYWRl
ckNsaWVudC5oIgorI2ltcG9ydCAiSlNET01XaW5kb3cuaCIKKyNpbXBvcnQgIldlYlNjcmlwdE9i
amVjdFByaXZhdGUuaCIKKyNpbXBvcnQgIldpZGdldC5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvQVBJQ2FzdC5oPgorCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisjaW1wb3J0
ICJjX2luc3RhbmNlLmgiCisjaW1wb3J0ICJOUF9qc29iamVjdC5oIgorI2ltcG9ydCAibnBydW50
aW1lX2ltcGwuaCIKKyNlbmRpZgorCisjaW1wb3J0ICJvYmpjX2luc3RhbmNlLmgiCisjaW1wb3J0
ICJydW50aW1lX3Jvb3QuaCIKKyNpbXBvcnQgInJ1bnRpbWUuaCIKKworI2lmIEVOQUJMRShNQUNf
SkFWQV9CUklER0UpCisjaW1wb3J0ICJqbmlfaW5zdGFuY2UuaCIKKyNlbmRpZgorCitAaW50ZXJm
YWNlIE5TT2JqZWN0IChXZWJQbHVnaW4pCistIChpZClvYmplY3RGb3JXZWJTY3JpcHQ7CistIChO
UE9iamVjdCAqKWNyZWF0ZVBsdWdpblNjcmlwdGFibGVPYmplY3Q7CitAZW5kCisKK3VzaW5nIG5h
bWVzcGFjZSBLSlM6OkJpbmRpbmdzOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQ
dHI8S0pTOjpCaW5kaW5nczo6SW5zdGFuY2U+IFNjcmlwdENvbnRyb2xsZXI6OmNyZWF0ZVNjcmlw
dEluc3RhbmNlRm9yV2lkZ2V0KFdpZGdldCogd2lkZ2V0KQoreworICAgIE5TVmlldyogd2lkZ2V0
VmlldyA9IHdpZGdldC0+Z2V0VmlldygpOworICAgIGlmICghd2lkZ2V0VmlldykKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICBSZWZQdHI8Um9vdE9iamVjdD4gcm9vdE9iamVjdCA9IGNyZWF0ZVJv
b3RPYmplY3Qod2lkZ2V0Vmlldyk7CisKKyAgICBpZiAoW3dpZGdldFZpZXcgcmVzcG9uZHNUb1Nl
bGVjdG9yOkBzZWxlY3RvcihvYmplY3RGb3JXZWJTY3JpcHQpXSkgeworICAgICAgICBpZCBvYmpl
Y3RGb3JXZWJTY3JpcHQgPSBbd2lkZ2V0VmlldyBvYmplY3RGb3JXZWJTY3JpcHRdOworICAgICAg
ICBpZiAoIW9iamVjdEZvcldlYlNjcmlwdCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAg
ICByZXR1cm4gS0pTOjpCaW5kaW5nczo6T2JqY0luc3RhbmNlOjpjcmVhdGUob2JqZWN0Rm9yV2Vi
U2NyaXB0LCByb290T2JqZWN0LnJlbGVhc2UoKSk7CisgICAgfQorCisgICAgaWYgKFt3aWRnZXRW
aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoY3JlYXRlUGx1Z2luU2NyaXB0YWJsZU9i
amVjdCldKSB7CisjaWYgIUVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgICAgICByZXR1
cm4gMDsKKyNlbHNlCisgICAgICAgIE5QT2JqZWN0KiBucE9iamVjdCA9IFt3aWRnZXRWaWV3IGNy
ZWF0ZVBsdWdpblNjcmlwdGFibGVPYmplY3RdOworICAgICAgICBpZiAoIW5wT2JqZWN0KQorICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIFJlZlB0cjxJbnN0YW5jZT4gaW5zdGFuY2UgPSBL
SlM6OkJpbmRpbmdzOjpDSW5zdGFuY2U6OmNyZWF0ZShucE9iamVjdCwgcm9vdE9iamVjdC5yZWxl
YXNlKCkpOworICAgICAgICAvLyAtY3JlYXRlUGx1Z2luU2NyaXB0YWJsZU9iamVjdCByZXR1cm5z
IGEgcmV0YWluZWQgTlBPYmplY3QuICBUaGUgY2FsbGVyIGlzIGV4cGVjdGVkIHRvIHJlbGVhc2Ug
aXQuCisgICAgICAgIF9OUE5fUmVsZWFzZU9iamVjdChucE9iamVjdCk7CisgICAgICAgIHJldHVy
biBpbnN0YW5jZS5yZWxlYXNlKCk7CisjZW5kaWYKKyAgICB9CisKKyNpZiBFTkFCTEUoTUFDX0pB
VkFfQlJJREdFKQorICAgIGpvYmplY3QgYXBwbGV0ID0gbV9mcmFtZS0+bG9hZGVyKCktPmNsaWVu
dCgpLT5qYXZhQXBwbGV0KHdpZGdldFZpZXcpOworICAgIGlmICghYXBwbGV0KQorICAgICAgICBy
ZXR1cm4gMDsKKyAgICByZXR1cm4gS0pTOjpCaW5kaW5nczo6SmF2YUluc3RhbmNlOjpjcmVhdGUo
YXBwbGV0LCByb290T2JqZWN0LnJlbGVhc2UoKSk7CisjZWxzZQorICAgIHJldHVybiAwOworI2Vu
ZGlmCit9CisKK1dlYlNjcmlwdE9iamVjdCogU2NyaXB0Q29udHJvbGxlcjo6d2luZG93U2NyaXB0
T2JqZWN0KCkKK3sKKyAgICBpZiAoIWlzRW5hYmxlZCgpKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIGlmICghbV93aW5kb3dTY3JpcHRPYmplY3QpIHsKKyAgICAgICAgS0pTOjpCaW5kaW5nczo6
Um9vdE9iamVjdCogcm9vdCA9IGJpbmRpbmdSb290T2JqZWN0KCk7CisgICAgICAgIG1fd2luZG93
U2NyaXB0T2JqZWN0ID0gW1dlYlNjcmlwdE9iamVjdCBzY3JpcHRPYmplY3RGb3JKU09iamVjdDp0
b1JlZih3aW5kb3dTaGVsbCgpKSBvcmlnaW5Sb290T2JqZWN0OnJvb3Qgcm9vdE9iamVjdDpyb290
XTsKKyAgICB9CisKKyAgICBBU1NFUlQoW21fd2luZG93U2NyaXB0T2JqZWN0LmdldCgpIGlzS2lu
ZE9mQ2xhc3M6W0RPTUFic3RyYWN0VmlldyBjbGFzc11dKTsKKyAgICByZXR1cm4gbV93aW5kb3dT
Y3JpcHRPYmplY3QuZ2V0KCk7Cit9CisKK3ZvaWQgU2NyaXB0Q29udHJvbGxlcjo6Y2xlYXJQbGF0
Zm9ybVNjcmlwdE9iamVjdHMoKQoreworICAgIGlmIChtX3dpbmRvd1NjcmlwdE9iamVjdCkgewor
ICAgICAgICBLSlM6OkJpbmRpbmdzOjpSb290T2JqZWN0KiByb290ID0gYmluZGluZ1Jvb3RPYmpl
Y3QoKTsKKyAgICAgICAgW21fd2luZG93U2NyaXB0T2JqZWN0LmdldCgpIF9zZXRPcmlnaW5Sb290
T2JqZWN0OnJvb3QgYW5kUm9vdE9iamVjdDpyb290XTsKKyAgICB9Cit9CisKK3ZvaWQgU2NyaXB0
Q29udHJvbGxlcjo6ZGlzY29ubmVjdFBsYXRmb3JtU2NyaXB0T2JqZWN0cygpCit7CisgICAgaWYg
KG1fd2luZG93U2NyaXB0T2JqZWN0KSB7CisgICAgICAgIEFTU0VSVChbbV93aW5kb3dTY3JpcHRP
YmplY3QuZ2V0KCkgaXNLaW5kT2ZDbGFzczpbRE9NQWJzdHJhY3RWaWV3IGNsYXNzXV0pOworICAg
ICAgICBbKERPTUFic3RyYWN0VmlldyAqKW1fd2luZG93U2NyaXB0T2JqZWN0LmdldCgpIF9kaXNj
b25uZWN0RnJhbWVdOworICAgIH0KK30KKworI2lmIEVOQUJMRShNQUNfSkFWQV9CUklER0UpCitz
dGF0aWMgcHRocmVhZF90IG1haW5UaHJlYWQ7CisKK3N0YXRpYyB2b2lkIHVwZGF0ZVJlbmRlcmlu
Z0ZvckJpbmRpbmdzKEtKUzo6RXhlY1N0YXRlKiBleGVjLCBLSlM6OkpTT2JqZWN0KiByb290T2Jq
ZWN0KQoreworICAgIGlmIChwdGhyZWFkX3NlbGYoKSAhPSBtYWluVGhyZWFkKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAoIXJvb3RPYmplY3QpCisgICAgICAgIHJldHVybjsKKworICAgIEpT
RE9NV2luZG93KiB3aW5kb3cgPSBzdGF0aWNfY2FzdDxKU0RPTVdpbmRvdyo+KHJvb3RPYmplY3Qp
OworICAgIGlmICghd2luZG93KQorICAgICAgICByZXR1cm47CisKKyAgICBGcmFtZSogZnJhbWUg
PSB3aW5kb3ctPmltcGwoKS0+ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1
cm47CisKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKTsKKyAgICBp
ZiAoIWRvY3VtZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBkb2N1bWVudC0+dXBkYXRlUmVu
ZGVyaW5nKCk7Cit9CisKK3ZvaWQgU2NyaXB0Q29udHJvbGxlcjo6aW5pdEphdmFKU0JpbmRpbmdz
KCkKK3sKKyAgICBtYWluVGhyZWFkID0gcHRocmVhZF9zZWxmKCk7CisgICAgS0pTOjpCaW5kaW5n
czo6SmF2YUpTT2JqZWN0Ojppbml0aWFsaXplSk5JVGhyZWFkaW5nKCk7CisgICAgS0pTOjpCaW5k
aW5nczo6SW5zdGFuY2U6OnNldERpZEV4ZWN1dGVGdW5jdGlvbih1cGRhdGVSZW5kZXJpbmdGb3JC
aW5kaW5ncyk7Cit9CisjZW5kaWYKKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TY3JpcHRDb250cm9sbGVyUXQuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250
cm9sbGVyUXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlMGViZTIK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXJR
dC5jcHAKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBEaXJrIE11
ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2lu
IDx6YWNrQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgR2VvcmdlIFN0YWlrb3MgPHN0
YWlrb3NAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBTaW1vbiBIYXVzbWFubiA8aGF1
c21hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFu
bkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IFRyb2xsdGVjaCBBU0EKKyAqIENvcHly
aWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwOCBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICoKKyAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlNjcmlwdENvbnRyb2xsZXIuaCIKKworI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgorI2luY2x1ZGUg
IlBsdWdpblZpZXcuaCIKKyNpbmNsdWRlICJxdF9pbnN0YW5jZS5oIgorI2luY2x1ZGUgInJ1bnRp
bWVfcm9vdC5oIgorI2luY2x1ZGUgInJ1bnRpbWUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitQYXNzUmVmUHRyPEtKUzo6QmluZGluZ3M6Okluc3RhbmNlPiBTY3JpcHRDb250cm9sbGVyOjpj
cmVhdGVTY3JpcHRJbnN0YW5jZUZvcldpZGdldChXZWJDb3JlOjpXaWRnZXQqIHdpZGdldCkKK3sK
KyAgICBpZiAod2lkZ2V0LT5pc0ZyYW1lVmlldygpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBp
ZiAod2lkZ2V0LT5pc05QQVBJUGx1Z2luKCkpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQ
bHVnaW5WaWV3Kj4od2lkZ2V0KS0+YmluZGluZ0luc3RhbmNlKCk7CisKKyAgICBRV2lkZ2V0KiBu
YXRpdmVXaWRnZXQgPSB3aWRnZXQtPm5hdGl2ZVdpZGdldCgpOworICAgIGlmICghbmF0aXZlV2lk
Z2V0KQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gS0pTOjpCaW5kaW5nczo6UXRJbnN0
YW5jZTo6Y3JlYXRlKG5hdGl2ZVdpZGdldCwgYmluZGluZ1Jvb3RPYmplY3QoKSk7Cit9CisKK30K
Ky8vIHZpbTogdHM9NCBzdz00IGV0CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nj
cmlwdENvbnRyb2xsZXJXaW4uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9s
bGVyV2luLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWMzYjAwCi0t
LSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyV2lu
LmNwcApAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAy
MDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
OCBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgorCisjaW5jbHVkZSAiUGx1Z2luVmll
dy5oIgorI2luY2x1ZGUgInJ1bnRpbWVfcm9vdC5oIgorCit1c2luZyBuYW1lc3BhY2UgS0pTOjpC
aW5kaW5nczsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVmUHRyPEtKUzo6QmluZGlu
Z3M6Okluc3RhbmNlPiBTY3JpcHRDb250cm9sbGVyOjpjcmVhdGVTY3JpcHRJbnN0YW5jZUZvcldp
ZGdldChXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBpZiAod2lkZ2V0LT5pc1BsdWdpblZpZXcoKSkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UGx1Z2luVmlldyo+
KHdpZGdldCktPmJpbmRpbmdJbnN0YW5jZSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tIGIvV2ViQ29yZS9iaW5k
aW5ncy9vYmpjL0RPTS5tbQppbmRleCAzM2NiMzVjLi44ZWE4NmU4IDEwMDY0NAotLS0gYS9XZWJD
b3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00u
bW0KQEAgLTU5LDYgKzU5LDcgQEAKICNpbXBvcnQgIlJhbmdlLmgiCiAjaW1wb3J0ICJSZW5kZXJJ
bWFnZS5oIgogI2ltcG9ydCAiUmVuZGVyVmlldy5oIgorI2ltcG9ydCAiU2NyaXB0Q29udHJvbGxl
ci5oIgogI2ltcG9ydCAiU2ltcGxlRm9udERhdGEuaCIKICNpbXBvcnQgIlRleHQuaCIKICNpbXBv
cnQgIlRyZWVXYWxrZXIuaCIKQEAgLTQxNyw3ICs0MTgsNyBAQCBzdGF0aWMgTlNBcnJheSAqa2l0
KGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMpCiB7CiAgICAgaWYgKFdlYkNvcmU6Ok5vZGUg
Km4gPSBbc2VsZiBfbm9kZV0pIHsKICAgICAgICAgaWYgKFdlYkNvcmU6OkZyYW1lKiBmcmFtZSA9
IG4tPmRvY3VtZW50KCktPmZyYW1lKCkpCi0gICAgICAgICAgICByZXR1cm4gZnJhbWUtPmJpbmRp
bmdSb290T2JqZWN0KCk7CisgICAgICAgICAgICByZXR1cm4gZnJhbWUtPnNjcmlwdCgpLT5iaW5k
aW5nUm9vdE9iamVjdCgpOwogICAgIH0KICAgICByZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvYmluZGluZ3Mvb2JqYy9ET01JbnRlcm5hbC5tbSBiL1dlYkNvcmUvYmluZGluZ3Mvb2Jq
Yy9ET01JbnRlcm5hbC5tbQppbmRleCA5N2UyNmM5Li5mZmI2MGVkIDEwMDY0NAotLS0gYS9XZWJD
b3JlL2JpbmRpbmdzL29iamMvRE9NSW50ZXJuYWwubW0KKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9v
YmpjL0RPTUludGVybmFsLm1tCkBAIC0xMTksNyArMTE5LDcgQEAgdm9pZCByZW1vdmVET01XcmFw
cGVyKERPTU9iamVjdEludGVybmFsKiBpbXBsKQogICAgIC8vIEdldCAob3IgY3JlYXRlKSBhIGNh
Y2hlZCBKUyBvYmplY3QgZm9yIHRoZSBET00gbm9kZS4KICAgICBLSlM6OkpTT2JqZWN0ICpzY3Jp
cHRJbXAgPSBzdGF0aWNfY2FzdDxLSlM6OkpTT2JqZWN0Kj4oV2ViQ29yZTo6dG9KUyhleGVjLCBu
b2RlSW1wbCkpOwogCi0gICAgS0pTOjpCaW5kaW5nczo6Um9vdE9iamVjdCogcm9vdE9iamVjdCA9
IGZyYW1lLT5iaW5kaW5nUm9vdE9iamVjdCgpOworICAgIEtKUzo6QmluZGluZ3M6OlJvb3RPYmpl
Y3QqIHJvb3RPYmplY3QgPSBmcmFtZS0+c2NyaXB0KCktPmJpbmRpbmdSb290T2JqZWN0KCk7CiAK
ICAgICBbc2VsZiBfc2V0SW1wOnNjcmlwdEltcCBvcmlnaW5Sb290T2JqZWN0OnJvb3RPYmplY3Qg
cm9vdE9iamVjdDpyb290T2JqZWN0XTsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYnJpZGdlL2pu
aS9qbmlfanNvYmplY3QubW0gYi9XZWJDb3JlL2JyaWRnZS9qbmkvam5pX2pzb2JqZWN0Lm1tCmlu
ZGV4IGVlMWVhZTYuLjUzODQ3MWYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYnJpZGdlL2puaS9qbmlf
anNvYmplY3QubW0KKysrIGIvV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9qc29iamVjdC5tbQpAQCAt
NDQxLDcgKzQ0MSw3IEBAIHN0YXRpYyBQYXNzUmVmUHRyPFJvb3RPYmplY3Q+IGNyZWF0ZVJvb3RP
YmplY3Qodm9pZCogbmF0aXZlSGFuZGxlKQogICAgIH0KICAgICBpZiAoIWZyYW1lKQogICAgICAg
ICByZXR1cm4gMDsKLSAgICByZXR1cm4gZnJhbWUtPmNyZWF0ZVJvb3RPYmplY3QobmF0aXZlSGFu
ZGxlLCBmcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdCgpKTsKKyAgICByZXR1cm4gZnJhbWUt
PnNjcmlwdCgpLT5jcmVhdGVSb290T2JqZWN0KG5hdGl2ZUhhbmRsZSk7CiB9CiAKIC8vIFdlJ3Jl
IGVpdGhlciBjcmVhdGluZyBhICdSb290JyBvYmplY3QgKHZpYSBhIGNhbGwgdG8gSmF2YUpTT2Jq
ZWN0LmdldFdpbmRvdygpKSwgb3IKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MQXBwbGV0
RWxlbWVudC5jcHAgYi9XZWJDb3JlL2h0bWwvSFRNTEFwcGxldEVsZW1lbnQuY3BwCmluZGV4IDU1
MjVhY2EuLjM3NTVjNzQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MQXBwbGV0RWxlbWVu
dC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxBcHBsZXRFbGVtZW50LmNwcApAQCAtMzAsMTAg
KzMwLDcgQEAKICNpbmNsdWRlICJSZW5kZXJBcHBsZXQuaCIKICNpbmNsdWRlICJSZW5kZXJJbmxp
bmUuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgotCi0jaWYgVVNFKEpBVkFTQ1JJUFRDT1JFX0JJ
TkRJTkdTKQotI2luY2x1ZGUgInJ1bnRpbWUuaCIKLSNlbmRpZgorI2luY2x1ZGUgIlNjcmlwdENv
bnRyb2xsZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00NiwxMCArNDMsNiBAQCBI
VE1MQXBwbGV0RWxlbWVudDo6SFRNTEFwcGxldEVsZW1lbnQoRG9jdW1lbnQqIGRvYykKIAogSFRN
TEFwcGxldEVsZW1lbnQ6On5IVE1MQXBwbGV0RWxlbWVudCgpCiB7Ci0jaWYgVVNFKEpBVkFTQ1JJ
UFRDT1JFX0JJTkRJTkdTKQotICAgIC8vIG1faW5zdGFuY2Ugc2hvdWxkIGhhdmUgYmVlbiBjbGVh
bmVkIHVwIGluIGRldGFjaCgpLgotICAgIEFTU0VSVCghbV9pbnN0YW5jZSk7Ci0jZW5kaWYKIH0K
IAogdm9pZCBIVE1MQXBwbGV0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0
cmlidXRlKiBhdHRyKQpAQCAtMTQzLDIxICsxMzYsMTcgQEAgUmVuZGVyT2JqZWN0KiBIVE1MQXBw
bGV0RWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqIGFyZW5hLCBSZW5kZXJTdHls
ZSoKIH0KIAogI2lmIFVTRShKQVZBU0NSSVBUQ09SRV9CSU5ESU5HUykKLUtKUzo6QmluZGluZ3M6
Okluc3RhbmNlKiBIVE1MQXBwbGV0RWxlbWVudDo6Z2V0SW5zdGFuY2UoKSBjb25zdAorUmVuZGVy
V2lkZ2V0KiBIVE1MQXBwbGV0RWxlbWVudDo6cmVuZGVyV2lkZ2V0Rm9ySlNCaW5kaW5ncygpIGNv
bnN0CiB7CiAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZG9jdW1lbnQoKS0+c2V0dGluZ3MoKTsK
ICAgICBpZiAoIXNldHRpbmdzIHx8ICFzZXR0aW5ncy0+aXNKYXZhRW5hYmxlZCgpKQogICAgICAg
ICByZXR1cm4gMDsKIAotICAgIGlmIChtX2luc3RhbmNlKQotICAgICAgICByZXR1cm4gbV9pbnN0
YW5jZS5nZXQoKTsKLSAgICAKLSAgICBpZiAoUmVuZGVyQXBwbGV0KiByID0gc3RhdGljX2Nhc3Q8
UmVuZGVyQXBwbGV0Kj4ocmVuZGVyZXIoKSkpIHsKLSAgICAgICAgci0+Y3JlYXRlV2lkZ2V0SWZO
ZWNlc3NhcnkoKTsKLSAgICAgICAgaWYgKHItPndpZGdldCgpICYmIGRvY3VtZW50KCktPmZyYW1l
KCkpCi0gICAgICAgICAgICBtX2luc3RhbmNlID0gZG9jdW1lbnQoKS0+ZnJhbWUoKS0+Y3JlYXRl
U2NyaXB0SW5zdGFuY2VGb3JXaWRnZXQoci0+d2lkZ2V0KCkpOwotICAgIH0KLSAgICByZXR1cm4g
bV9pbnN0YW5jZS5nZXQoKTsKKyAgICBSZW5kZXJBcHBsZXQqIGFwcGxldCA9IHN0YXRpY19jYXN0
PFJlbmRlckFwcGxldCo+KHJlbmRlcmVyKCkpOworICAgIGlmIChhcHBsZXQpCisgICAgICAgIGFw
cGxldC0+Y3JlYXRlV2lkZ2V0SWZOZWNlc3NhcnkoKTsKKworICAgIHJldHVybiBhcHBsZXQ7CiB9
CiAjZW5kaWYKIApAQCAtMTY5LDE0ICsxNTgsNiBAQCB2b2lkIEhUTUxBcHBsZXRFbGVtZW50Ojpm
aW5pc2hQYXJzaW5nQ2hpbGRyZW4oKQogICAgICAgICByZW5kZXJlcigpLT5zZXROZWVkc0xheW91
dCh0cnVlKTsgLy8gVGhpcyB3aWxsIGNhdXNlIGl0IHRvIGNyZWF0ZSBpdHMgd2lkZ2V0ICYgdGhl
IEphdmEgYXBwbGV0CiB9CiAKLXZvaWQgSFRNTEFwcGxldEVsZW1lbnQ6OmRldGFjaCgpCi17Ci0j
aWYgVVNFKEpBVkFTQ1JJUFRDT1JFX0JJTkRJTkdTKQotICAgIG1faW5zdGFuY2UgPSAwOwotI2Vu
ZGlmCi0gICAgSFRNTFBsdWdJbkVsZW1lbnQ6OmRldGFjaCgpOwotfQotCiBTdHJpbmcgSFRNTEFw
cGxldEVsZW1lbnQ6OmFsdCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZShhbHRB
dHRyKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MQXBwbGV0RWxlbWVudC5oIGIvV2Vi
Q29yZS9odG1sL0hUTUxBcHBsZXRFbGVtZW50LmgKaW5kZXggMzE3OWU0My4uY2VlNGZlZCAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxBcHBsZXRFbGVtZW50LmgKKysrIGIvV2ViQ29yZS9o
dG1sL0hUTUxBcHBsZXRFbGVtZW50LmgKQEAgLTI1LDE0ICsyNSw2IEBACiAKICNpbmNsdWRlICJI
VE1MUGx1Z0luRWxlbWVudC5oIgogCi0jaWYgVVNFKEpBVkFTQ1JJUFRDT1JFX0JJTkRJTkdTKQot
bmFtZXNwYWNlIEtKUyB7IAotICAgIG5hbWVzcGFjZSBCaW5kaW5ncyB7IAotICAgICAgICBjbGFz
cyBJbnN0YW5jZTsKLSAgICB9IAotfQotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgSFRNTEZvcm1FbGVtZW50OwpAQCAtNTEsMTAgKzQzLDkgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlKik7CiAgICAgdmlydHVhbCBS
ZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsK
ICAgICB2aXJ0dWFsIHZvaWQgZmluaXNoUGFyc2luZ0NoaWxkcmVuKCk7Ci0gICAgdmlydHVhbCB2
b2lkIGRldGFjaCgpOwogICAgIAogI2lmIFVTRShKQVZBU0NSSVBUQ09SRV9CSU5ESU5HUykKLSAg
ICB2aXJ0dWFsIEtKUzo6QmluZGluZ3M6Okluc3RhbmNlKiBnZXRJbnN0YW5jZSgpIGNvbnN0Owor
ICAgIHZpcnR1YWwgUmVuZGVyV2lkZ2V0KiByZW5kZXJXaWRnZXRGb3JKU0JpbmRpbmdzKCkgY29u
c3Q7CiAjZW5kaWYKIAogICAgIFN0cmluZyBhbHQoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvaHRtbC9IVE1MRW1iZWRFbGVtZW50LmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MRW1iZWRFbGVt
ZW50LmNwcAppbmRleCA4NGEzYTJjLi43MmJiNmM1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwv
SFRNTEVtYmVkRWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQu
Y3BwCkBAIC0zMiwxMCArMzIsNyBAQAogI2luY2x1ZGUgIkhUTUxPYmplY3RFbGVtZW50LmgiCiAj
aW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiUmVuZGVyUGFydE9iamVjdC5oIgotCi0j
aWYgVVNFKEpBVkFTQ1JJUFRDT1JFX0JJTkRJTkdTKQotI2luY2x1ZGUgInJ1bnRpbWUuaCIKLSNl
bmRpZgorI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCkBAIC00OSwxMCArNDYsNiBAQCBIVE1MRW1iZWRFbGVtZW50OjpIVE1MRW1iZWRFbGVtZW50
KERvY3VtZW50KiBkb2MpCiAKIEhUTUxFbWJlZEVsZW1lbnQ6On5IVE1MRW1iZWRFbGVtZW50KCkK
IHsKLSNpZiBVU0UoSkFWQVNDUklQVENPUkVfQklORElOR1MpCi0gICAgLy8gbV9pbnN0YW5jZSBz
aG91bGQgaGF2ZSBiZWVuIGNsZWFuZWQgdXAgaW4gZGV0YWNoKCkuCi0gICAgQVNTRVJUKCFtX2lu
c3RhbmNlKTsKLSNlbmRpZgogfQogCiAjaWYgVVNFKEpBVkFTQ1JJUFRDT1JFX0JJTkRJTkdTKQpA
QCAtNjIsMzAgKzU1LDIxIEBAIHN0YXRpYyBpbmxpbmUgUmVuZGVyV2lkZ2V0KiBmaW5kV2lkZ2V0
UmVuZGVyZXIoY29uc3QgTm9kZSogbikKICAgICAgICAgZG8KICAgICAgICAgICAgIG4gPSBuLT5w
YXJlbnROb2RlKCk7CiAgICAgICAgIHdoaWxlIChuICYmICFuLT5oYXNUYWdOYW1lKG9iamVjdFRh
ZykpOwotICAgIAotICAgIHJldHVybiAobiAmJiBuLT5yZW5kZXJlcigpICYmIG4tPnJlbmRlcmVy
KCktPmlzV2lkZ2V0KCkpIAotICAgICAgICA/IHN0YXRpY19jYXN0PFJlbmRlcldpZGdldCo+KG4t
PnJlbmRlcmVyKCkpIDogMDsKKworICAgIGlmIChuICYmIG4tPnJlbmRlcmVyKCkgJiYgbi0+cmVu
ZGVyZXIoKS0+aXNXaWRnZXQoKSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlcldp
ZGdldCo+KG4tPnJlbmRlcmVyKCkpOworCisgICAgcmV0dXJuIDA7CiB9CiAgICAgCi1LSlM6OkJp
bmRpbmdzOjpJbnN0YW5jZSogSFRNTEVtYmVkRWxlbWVudDo6Z2V0SW5zdGFuY2UoKSBjb25zdAor
UmVuZGVyV2lkZ2V0KiBIVE1MRW1iZWRFbGVtZW50OjpyZW5kZXJXaWRnZXRGb3JKU0JpbmRpbmdz
KCkgY29uc3QKIHsKLSAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpOwotICAg
IGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKG1faW5zdGFuY2UpCi0g
ICAgICAgIHJldHVybiBtX2luc3RhbmNlLmdldCgpOwotICAgIAogICAgIFJlbmRlcldpZGdldCog
cmVuZGVyV2lkZ2V0ID0gZmluZFdpZGdldFJlbmRlcmVyKHRoaXMpOwogICAgIGlmIChyZW5kZXJX
aWRnZXQgJiYgIXJlbmRlcldpZGdldC0+d2lkZ2V0KCkpIHsKICAgICAgICAgZG9jdW1lbnQoKS0+
dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAgICAgICAgIHJlbmRlcldp
ZGdldCA9IGZpbmRXaWRnZXRSZW5kZXJlcih0aGlzKTsKICAgICB9Ci0gICAgCi0gICAgaWYgKHJl
bmRlcldpZGdldCAmJiByZW5kZXJXaWRnZXQtPndpZGdldCgpKSAKLSAgICAgICAgbV9pbnN0YW5j
ZSA9IGZyYW1lLT5jcmVhdGVTY3JpcHRJbnN0YW5jZUZvcldpZGdldChyZW5kZXJXaWRnZXQtPndp
ZGdldCgpKTsKLSAgICAKLSAgICByZXR1cm4gbV9pbnN0YW5jZS5nZXQoKTsKKyAgICByZXR1cm4g
cmVuZGVyV2lkZ2V0OwogfQogI2VuZGlmCiAKQEAgLTE1NywxNCArMTQxLDYgQEAgdm9pZCBIVE1M
RW1iZWRFbGVtZW50OjphdHRhY2goKQogICAgIEhUTUxQbHVnSW5FbGVtZW50OjphdHRhY2goKTsK
IH0KIAotdm9pZCBIVE1MRW1iZWRFbGVtZW50OjpkZXRhY2goKQotewotI2lmIFVTRShKQVZBU0NS
SVBUQ09SRV9CSU5ESU5HUykKLSAgICBtX2luc3RhbmNlID0gMDsKLSNlbmRpZgotICAgIEhUTUxQ
bHVnSW5FbGVtZW50OjpkZXRhY2goKTsKLX0KLQogdm9pZCBIVE1MRW1iZWRFbGVtZW50Ojp1cGRh
dGVXaWRnZXQoKQogewogICAgIGRvY3VtZW50KCktPnVwZGF0ZVJlbmRlcmluZygpOwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQuaCBiL1dlYkNvcmUvaHRtbC9IVE1M
RW1iZWRFbGVtZW50LmgKaW5kZXggZmI0YmM0ZC4uNzkwNTNmNiAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQuaAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxl
bWVudC5oCkBAIC0yNSwxNCArMjUsNiBAQAogCiAjaW5jbHVkZSAiSFRNTFBsdWdJbkVsZW1lbnQu
aCIKIAotI2lmIFVTRShKQVZBU0NSSVBUQ09SRV9CSU5ESU5HUykKLW5hbWVzcGFjZSBLSlMgewot
ICAgIG5hbWVzcGFjZSBCaW5kaW5ncyB7Ci0gICAgICAgIGNsYXNzIEluc3RhbmNlOwotICAgIH0K
LX0KLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEhUTUxFbWJlZEVsZW1l
bnQgOiBwdWJsaWMgSFRNTFBsdWdJbkVsZW1lbnQgewpAQCAtNDgsNyArNDAsNiBAQCBwdWJsaWM6
CiAKICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoKCk7CiAgICAgdmlydHVhbCBib29sIGNhbkxhenlB
dHRhY2goKSB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgdm9pZCBkZXRhY2goKTsKICAg
ICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSopOwogICAgIHZpcnR1
YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxl
Kik7CiAgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b0RvY3VtZW50KCk7CkBAIC02MSw3ICs1
Miw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE5lZWRXaWRnZXRVcGRhdGUoYm9vbCBuZWVkV2lk
Z2V0VXBkYXRlKSB7IG1fbmVlZFdpZGdldFVwZGF0ZSA9IG5lZWRXaWRnZXRVcGRhdGU7IH0KIAog
I2lmIFVTRShKQVZBU0NSSVBUQ09SRV9CSU5ESU5HUykKLSAgICB2aXJ0dWFsIEtKUzo6QmluZGlu
Z3M6Okluc3RhbmNlKiBnZXRJbnN0YW5jZSgpIGNvbnN0OworICAgIHZpcnR1YWwgUmVuZGVyV2lk
Z2V0KiByZW5kZXJXaWRnZXRGb3JKU0JpbmRpbmdzKCkgY29uc3Q7CiAjZW5kaWYKIAogICAgIFN0
cmluZyBzcmMoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxl
bWVudC5jcHAgYi9XZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwCmluZGV4IGJiZjFl
NmIuLjI4ZmFiYmYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5j
cHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcApAQCAtNDAsMTIgKzQw
LDkgQEAKICNpbmNsdWRlICJSZW5kZXJJbWFnZS5oIgogI2luY2x1ZGUgIlJlbmRlclBhcnRPYmpl
Y3QuaCIKICNpbmNsdWRlICJSZW5kZXJXaWRnZXQuaCIKKyNpbmNsdWRlICJTY3JpcHRDb250cm9s
bGVyLmgiCiAjaW5jbHVkZSAiVGV4dC5oIgogCi0jaWYgVVNFKEpBVkFTQ1JJUFRDT1JFX0JJTkRJ
TkdTKQotI2luY2x1ZGUgInJ1bnRpbWUuaCIKLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIHVzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOwpAQCAtNjEsMzEgKzU4LDE3IEBAIEhUTUxP
YmplY3RFbGVtZW50OjpIVE1MT2JqZWN0RWxlbWVudChEb2N1bWVudCogZG9jLCBib29sIGNyZWF0
ZWRCeVBhcnNlcikKIAogSFRNTE9iamVjdEVsZW1lbnQ6On5IVE1MT2JqZWN0RWxlbWVudCgpCiB7
Ci0jaWYgVVNFKEpBVkFTQ1JJUFRDT1JFX0JJTkRJTkdTKQotICAgIC8vIG1faW5zdGFuY2Ugc2hv
dWxkIGhhdmUgYmVlbiBjbGVhbmVkIHVwIGluIGRldGFjaCgpLgotICAgIEFTU0VSVCghbV9pbnN0
YW5jZSk7Ci0jZW5kaWYKIH0KIAogI2lmIFVTRShKQVZBU0NSSVBUQ09SRV9CSU5ESU5HUykKLUtK
Uzo6QmluZGluZ3M6Okluc3RhbmNlICpIVE1MT2JqZWN0RWxlbWVudDo6Z2V0SW5zdGFuY2UoKSBj
b25zdAorUmVuZGVyV2lkZ2V0KiBIVE1MT2JqZWN0RWxlbWVudDo6cmVuZGVyV2lkZ2V0Rm9ySlNC
aW5kaW5ncygpIGNvbnN0CiB7Ci0gICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUo
KTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmIChtX2luc3Rh
bmNlKQotICAgICAgICByZXR1cm4gbV9pbnN0YW5jZS5nZXQoKTsKLQogICAgIFJlbmRlcldpZGdl
dCogcmVuZGVyV2lkZ2V0ID0gKHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+aXNXaWRnZXQoKSkg
PyBzdGF0aWNfY2FzdDxSZW5kZXJXaWRnZXQqPihyZW5kZXJlcigpKSA6IDA7CiAgICAgaWYgKHJl
bmRlcldpZGdldCAmJiAhcmVuZGVyV2lkZ2V0LT53aWRnZXQoKSkgewogICAgICAgICBkb2N1bWVu
dCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKICAgICAgICAgcmVu
ZGVyV2lkZ2V0ID0gKHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+aXNXaWRnZXQoKSkgPyBzdGF0
aWNfY2FzdDxSZW5kZXJXaWRnZXQqPihyZW5kZXJlcigpKSA6IDA7Ci0gICAgfSAgICAgICAgICAK
LSAgICBpZiAocmVuZGVyV2lkZ2V0ICYmIHJlbmRlcldpZGdldC0+d2lkZ2V0KCkpIAotICAgICAg
ICBtX2luc3RhbmNlID0gZnJhbWUtPmNyZWF0ZVNjcmlwdEluc3RhbmNlRm9yV2lkZ2V0KHJlbmRl
cldpZGdldC0+d2lkZ2V0KCkpOwotCi0gICAgcmV0dXJuIG1faW5zdGFuY2UuZ2V0KCk7CisgICAg
fQorICAgIHJldHVybiByZW5kZXJXaWRnZXQ7CiB9CiAjZW5kaWYKIApAQCAtMjAzLDE0ICsxODYs
OSBAQCB2b2lkIEhUTUxPYmplY3RFbGVtZW50OjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oKQogCiB2
b2lkIEhUTUxPYmplY3RFbGVtZW50OjpkZXRhY2goKQogewotICAgIGlmIChhdHRhY2hlZCgpICYm
IHJlbmRlcmVyKCkgJiYgIW1fdXNlRmFsbGJhY2tDb250ZW50KSB7CisgICAgaWYgKGF0dGFjaGVk
KCkgJiYgcmVuZGVyZXIoKSAmJiAhbV91c2VGYWxsYmFja0NvbnRlbnQpCiAgICAgICAgIC8vIFVw
ZGF0ZSB0aGUgd2lkZ2V0IHRoZSBuZXh0IHRpbWUgd2UgYXR0YWNoIChkZXRhY2hpbmcgZGVzdHJv
eXMgdGhlIHBsdWdpbikuCiAgICAgICAgIG1fbmVlZFdpZGdldFVwZGF0ZSA9IHRydWU7Ci0gICAg
fQotCi0jaWYgVVNFKEpBVkFTQ1JJUFRDT1JFX0JJTkRJTkdTKQotICAgIG1faW5zdGFuY2UgPSAw
OwotI2VuZGlmCiAgICAgSFRNTFBsdWdJbkVsZW1lbnQ6OmRldGFjaCgpOwogfQogCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuaCBiL1dlYkNvcmUvaHRtbC9IVE1M
T2JqZWN0RWxlbWVudC5oCmluZGV4IGNhMjA1ZDcuLjdmNmI3OTYgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5oCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0
RWxlbWVudC5oCkBAIC02Myw3ICs2Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbmRlckZhbGxi
YWNrQ29udGVudCgpOwogCiAjaWYgVVNFKEpBVkFTQ1JJUFRDT1JFX0JJTkRJTkdTKQotICAgIHZp
cnR1YWwgS0pTOjpCaW5kaW5nczo6SW5zdGFuY2UqIGdldEluc3RhbmNlKCkgY29uc3Q7CisgICAg
dmlydHVhbCBSZW5kZXJXaWRnZXQqIHJlbmRlcldpZGdldEZvckpTQmluZGluZ3MoKSBjb25zdDsK
ICNlbmRpZgogCiAgICAgU3RyaW5nIGFyY2hpdmUoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvaHRtbC9IVE1MUGx1Z0luRWxlbWVudC5jcHAgYi9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkVs
ZW1lbnQuY3BwCmluZGV4IDI4NDU3YWQuLjBjODY1ZmQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRt
bC9IVE1MUGx1Z0luRWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5FbGVt
ZW50LmNwcApAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5j
bHVkZSAiRnJhbWVUcmVlLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiSlNO
b2RlLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgogI2lu
Y2x1ZGUgIlNldHRpbmdzLmgiCkBAIC00MiwxNSArNDEsMTIgQEAKICNlbmRpZgogCiAjaWYgRU5B
QkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisjaW5jbHVkZSAiSlNOb2RlLmgiCiAjaW5jbHVkZSAi
TlBfanNvYmplY3QuaCIKICNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgogI2luY2x1ZGUgInJ1
bnRpbWVfcm9vdC5oIgogI2VuZGlmCiAKLXVzaW5nIEtKUzo6RXhlY1N0YXRlOwotdXNpbmcgS0pT
OjpKU1ZhbHVlOwotdXNpbmcgS0pTOjpCaW5kaW5nczo6Um9vdE9iamVjdDsKLQogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwpAQCAtNjUsNiArNjEsMTAg
QEAgSFRNTFBsdWdJbkVsZW1lbnQ6OkhUTUxQbHVnSW5FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5h
bWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MKIAogSFRNTFBsdWdJbkVsZW1lbnQ6On5IVE1MUGx1
Z0luRWxlbWVudCgpCiB7CisjaWYgVVNFKEpBVkFTQ1JJUFRDT1JFX0JJTkRJTkdTKQorICAgIEFT
U0VSVCghbV9pbnN0YW5jZSk7IC8vIGNsZWFyZWQgaW4gZGV0YWNoKCkKKyNlbmRpZgorCiAjaWYg
RU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAgICAgaWYgKG1fTlBPYmplY3QpIHsKICAgICAg
ICAgX05QTl9SZWxlYXNlT2JqZWN0KG1fTlBPYmplY3QpOwpAQCAtNzMsNiArNzMsMzIgQEAgSFRN
TFBsdWdJbkVsZW1lbnQ6On5IVE1MUGx1Z0luRWxlbWVudCgpCiAjZW5kaWYKIH0KIAorI2lmIFVT
RShKQVZBU0NSSVBUQ09SRV9CSU5ESU5HUykKK3ZvaWQgSFRNTFBsdWdJbkVsZW1lbnQ6OmRldGFj
aCgpCit7CisgICAgbV9pbnN0YW5jZS5jbGVhcigpOworICAgIEhUTUxGcmFtZU93bmVyRWxlbWVu
dDo6ZGV0YWNoKCk7Cit9CisKK0tKUzo6QmluZGluZ3M6Okluc3RhbmNlKiBIVE1MUGx1Z0luRWxl
bWVudDo6Z2V0SW5zdGFuY2UoKSBjb25zdAoreworICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50
KCktPmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAv
LyBJZiB0aGUgaG9zdCBkeW5hbWljYWxseSB0dXJucyBvZmYgSmF2YVNjcmlwdCAob3IgSmF2YSkg
d2Ugd2lsbCBzdGlsbCByZXR1cm4KKyAgICAvLyB0aGUgY2FjaGVkIGFsbG9jYXRlZCBCaW5kaW5n
czo6SW5zdGFuY2UuICBOb3Qgc3VwcG9ydGluZyB0aGlzIGVkZ2UtY2FzZSBpcyBPSy4KKyAgICBp
ZiAobV9pbnN0YW5jZSkKKyAgICAgICAgcmV0dXJuIG1faW5zdGFuY2UuZ2V0KCk7CisKKyAgICBS
ZW5kZXJXaWRnZXQqIHJlbmRlcldpZGdldCA9IHJlbmRlcldpZGdldEZvckpTQmluZGluZ3MoKTsK
KyAgICBpZiAocmVuZGVyV2lkZ2V0ICYmIHJlbmRlcldpZGdldC0+d2lkZ2V0KCkpCisgICAgICAg
IG1faW5zdGFuY2UgPSBmcmFtZS0+c2NyaXB0KCktPmNyZWF0ZVNjcmlwdEluc3RhbmNlRm9yV2lk
Z2V0KHJlbmRlcldpZGdldC0+d2lkZ2V0KCkpOworCisgICAgcmV0dXJuIG1faW5zdGFuY2UuZ2V0
KCk7Cit9CisjZW5kaWYKKwogU3RyaW5nIEhUTUxQbHVnSW5FbGVtZW50OjphbGlnbigpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZShhbGlnbkF0dHIpOwpAQCAtMTQ3LDcgKzE3Myw3
IEBAIHZvaWQgSFRNTFBsdWdJbkVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0
dHJpYnV0ZSogYXR0cikKICAgICAgICAgYWRkSFRNTEFsaWdubWVudChhdHRyKTsKICAgICBlbHNl
CiAgICAgICAgIEhUTUxGcmFtZU93bmVyRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0
cik7Ci19ICAgIAorfQogCiBib29sIEhUTUxQbHVnSW5FbGVtZW50OjpjaGVja0RURChjb25zdCBO
b2RlKiBuZXdDaGlsZCkKIHsKQEAgLTE2Niw0MSArMTkyLDExIEBAIHZvaWQgSFRNTFBsdWdJbkVs
ZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogCiAjaWYgRU5BQkxFKE5F
VFNDQVBFX1BMVUdJTl9BUEkpCiAKLU5QT2JqZWN0KiBIVE1MUGx1Z0luRWxlbWVudDo6Y3JlYXRl
TlBPYmplY3QoKQotewotICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCk7Ci0g
ICAgaWYgKCFmcmFtZSkgewotICAgICAgICAvLyBUaGlzIHNob3VsZG4ndCBldmVyIGhhcHBlbiwg
YnV0IG1pZ2h0IGFzIHdlbGwgY2hlY2sgYW55d2F5LgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgcmV0dXJuIF9OUE5fQ3JlYXRlTm9TY3JpcHRPYmplY3QoKTsKLSAgICB9
Ci0KLSAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBmcmFtZS0+c2V0dGluZ3MoKTsKLSAgICBpZiAo
IXNldHRpbmdzKSB7Ci0gICAgICAgIC8vIFRoaXMgc2hvdWxkbid0IGV2ZXIgaGFwcGVuLCBidXQg
bWlnaHQgYXMgd2VsbCBjaGVjayBhbnl3YXkuCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICByZXR1cm4gX05QTl9DcmVhdGVOb1NjcmlwdE9iamVjdCgpOwotICAgIH0KLQot
ICAgIC8vIENhbid0IGNyZWF0ZSBOUE9iamVjdHMgd2hlbiBKYXZhU2NyaXB0IGlzIGRpc2FibGVk
Ci0gICAgaWYgKCFmcmFtZS0+c2NyaXB0KCktPmlzRW5hYmxlZCgpKQotICAgICAgICByZXR1cm4g
X05QTl9DcmVhdGVOb1NjcmlwdE9iamVjdCgpOwotICAgIAotICAgIC8vIENyZWF0ZSBhIEpTT2Jq
ZWN0IGJvdW5kIHRvIHRoaXMgZWxlbWVudAotICAgIEV4ZWNTdGF0ZSAqZXhlYyA9IGZyYW1lLT5z
Y3JpcHQoKS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICBKU1ZhbHVlKiBqc0Vs
ZW1lbnRWYWx1ZSA9IHRvSlMoZXhlYywgdGhpcyk7Ci0gICAgaWYgKCFqc0VsZW1lbnRWYWx1ZSB8
fCAhanNFbGVtZW50VmFsdWUtPmlzT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiBfTlBOX0NyZWF0
ZU5vU2NyaXB0T2JqZWN0KCk7Ci0KLSAgICAvLyBXcmFwIHRoZSBKU09iamVjdCBpbiBhbiBOUE9i
amVjdAotICAgIFJvb3RPYmplY3QqIHJvb3RPYmplY3QgPSBmcmFtZS0+YmluZGluZ1Jvb3RPYmpl
Y3QoKTsKLSAgICByZXR1cm4gX05QTl9DcmVhdGVTY3JpcHRPYmplY3QoMCwganNFbGVtZW50VmFs
dWUtPmdldE9iamVjdCgpLCByb290T2JqZWN0KTsKLX0KLQogTlBPYmplY3QqIEhUTUxQbHVnSW5F
bGVtZW50OjpnZXROUE9iamVjdCgpCiB7CisgICAgQVNTRVJUKGRvY3VtZW50KCktPmZyYW1lKCkp
OwogICAgIGlmICghbV9OUE9iamVjdCkKLSAgICAgICAgbV9OUE9iamVjdCA9IGNyZWF0ZU5QT2Jq
ZWN0KCk7CisgICAgICAgIG1fTlBPYmplY3QgPSBkb2N1bWVudCgpLT5mcmFtZSgpLT5zY3JpcHQo
KS0+Y3JlYXRlU2NyaXB0T2JqZWN0Rm9yUGx1Z2luRWxlbWVudCh0aGlzKTsKICAgICByZXR1cm4g
bV9OUE9iamVjdDsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5FbGVt
ZW50LmggYi9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkVsZW1lbnQuaAppbmRleCBlNWI2ZDRlLi43
ZjI4ODQwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkVsZW1lbnQuaAorKysg
Yi9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkVsZW1lbnQuaApAQCAtMzksNiArMzksOCBAQCBzdHJ1
Y3QgTlBPYmplY3Q7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgUmVuZGVyV2lkZ2V0
OworCiBjbGFzcyBIVE1MUGx1Z0luRWxlbWVudCA6IHB1YmxpYyBIVE1MRnJhbWVPd25lckVsZW1l
bnQgewogcHVibGljOgogICAgIEhUTUxQbHVnSW5FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUm
IHRhZ05hbWUsIERvY3VtZW50Kik7CkBAIC02NywxNSArNjksMTMgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50Kik7CiAKICNpZiBVU0UoSkFWQVND
UklQVENPUkVfQklORElOR1MpCi0gICAgdmlydHVhbCBLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZSog
Z2V0SW5zdGFuY2UoKSBjb25zdCA9IDA7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExV
R0lOX0FQSSkKLSAgICB2aXJ0dWFsIE5QT2JqZWN0KiBnZXROUE9iamVjdCgpOworICAgIHZpcnR1
YWwgdm9pZCBkZXRhY2goKTsKKyAgICB2aXJ0dWFsIFJlbmRlcldpZGdldCogcmVuZGVyV2lkZ2V0
Rm9ySlNCaW5kaW5ncygpIGNvbnN0ID0gMDsKKyAgICBLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZSog
Z2V0SW5zdGFuY2UoKSBjb25zdDsKICNlbmRpZgogCi1wcml2YXRlOgogI2lmIEVOQUJMRShORVRT
Q0FQRV9QTFVHSU5fQVBJKQotICAgIE5QT2JqZWN0KiBjcmVhdGVOUE9iamVjdCgpOworICAgIHZp
cnR1YWwgTlBPYmplY3QqIGdldE5QT2JqZWN0KCk7CiAjZW5kaWYKIAogcHJvdGVjdGVkOgpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwIGIvV2ViQ29yZS9sb2FkZXIv
RnJhbWVMb2FkZXIuY3BwCmluZGV4IGMwMGE3YmEuLmNhYTJhNjQgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAorKysgYi9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRl
ci5jcHAKQEAgLTgzMCwyNiArODMwLDI2IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmNsZWFyKGJvb2wg
Y2xlYXJXaW5kb3dQcm9wZXJ0aWVzLCBib29sIGNsZWFyU2NyaXB0T2JqZWN0cykKICAgICAvLyBE
byB0aGlzIGFmdGVyIGRldGFjaGluZyB0aGUgZG9jdW1lbnQgc28gdGhhdCB0aGUgdW5sb2FkIGV2
ZW50IHdvcmtzLgogICAgIGlmIChjbGVhcldpbmRvd1Byb3BlcnRpZXMpIHsKICAgICAgICAgbV9m
cmFtZS0+Y2xlYXJET01XaW5kb3coKTsKLSAgICAgICAgbV9mcmFtZS0+Y2xlYXJTY3JpcHRDb250
cm9sbGVyKCk7CisgICAgICAgIG1fZnJhbWUtPnNjcmlwdCgpLT5jbGVhcldpbmRvd1NoZWxsKCk7
CiAgICAgfQogCiAgICAgbV9mcmFtZS0+c2VsZWN0aW9uKCktPmNsZWFyKCk7CiAgICAgbV9mcmFt
ZS0+ZXZlbnRIYW5kbGVyKCktPmNsZWFyKCk7CiAgICAgaWYgKG1fZnJhbWUtPnZpZXcoKSkKICAg
ICAgICAgbV9mcmFtZS0+dmlldygpLT5jbGVhcigpOwotICAgIAorCiAgICAgbV9mcmFtZS0+c2V0
U2VsZWN0aW9uR3JhbnVsYXJpdHkoQ2hhcmFjdGVyR3JhbnVsYXJpdHkpOwogCi0gICAgLy8gRG8g
bm90IGRyb3AgdGhlIGRvY3VtZW50IGJlZm9yZSB0aGUgc2NyaXB0IHByb3h5IGFuZCB2aWV3IGFy
ZSBjbGVhcmVkLCBhcyBzb21lIGRlc3RydWN0b3JzCi0gICAgLy8gbWlnaHQgc3RpbGwgdHJ5IHRv
IGFjY2VzcyB0aGUgZG9jdW1lbnQuCisgICAgLy8gRG8gbm90IGRyb3AgdGhlIGRvY3VtZW50IGJl
Zm9yZSB0aGUgU2NyaXB0Q29udHJvbGxlciBhbmQgdmlldyBhcmUgY2xlYXJlZAorICAgIC8vIGFz
IHNvbWUgZGVzdHJ1Y3RvcnMgbWlnaHQgc3RpbGwgdHJ5IHRvIGFjY2VzcyB0aGUgZG9jdW1lbnQu
CiAgICAgbV9mcmFtZS0+c2V0RG9jdW1lbnQoMCk7CiAgICAgbV9kZWNvZGVyID0gMDsKIAogICAg
IG1fY29udGFpbnNQbHVnSW5zID0gZmFsc2U7Ci0gICAgCisKICAgICBpZiAoY2xlYXJTY3JpcHRP
YmplY3RzKQotICAgICAgICBtX2ZyYW1lLT5jbGVhclNjcmlwdE9iamVjdHMoKTsKLSAgCisgICAg
ICAgIG1fZnJhbWUtPnNjcmlwdCgpLT5jbGVhclNjcmlwdE9iamVjdHMoKTsKKwogICAgIG1fcmVk
aXJlY3Rpb25UaW1lci5zdG9wKCk7CiAgICAgbV9zY2hlZHVsZWRSZWRpcmVjdGlvbi5jbGVhcigp
OwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwIGIvV2ViQ29yZS9wYWdlL0Zy
YW1lLmNwcAppbmRleCBlMDYxZTg1Li5kOWE4NTE4IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2Uv
RnJhbWUuY3BwCisrKyBiL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKQEAgLTgsNiArOCw3IEBACiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA1IEFsZXhleSBQcm9za3VyeWFrb3Yg
PGFwQG55cG9wLmNvbT4KICAqIENvcHlyaWdodCAoQykgMjAwNyBUcm9sbHRlY2ggQVNBCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDggRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqCiAgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwpAQCAtNTYsNyArNTcsNiBAQAogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNs
dWRlICJtYXJrdXAuaCIKICNpbmNsdWRlICJNZWRpYUZlYXR1cmVOYW1lcy5oIgotI2luY2x1ZGUg
Ik5QX2pzb2JqZWN0LmgiCiAjaW5jbHVkZSAiTmF2aWdhdG9yLmgiCiAjaW5jbHVkZSAiTm9kZUxp
c3QuaCIKICNpbmNsdWRlICJQYWdlLmgiCkBAIC0xMjQsMTQgKzEyNCw2IEBAIEZyYW1lOjpGcmFt
ZShQYWdlKiBwYWdlLCBIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyRWxlbWVudCwgRnJhbWVM
b2FkZXJDbGllbnQqCiAKICAgICBYTUxOYW1lczo6aW5pdCgpOwogCi0jaWYgUExBVEZPUk0oTUFD
KSAmJiBFTkFCTEUoTUFDX0pBVkFfQlJJREdFKQotICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVk
SmF2YUpTQmluZGluZ3M7Ci0gICAgaWYgKCFpbml0aWFsaXplZEphdmFKU0JpbmRpbmdzKSB7Ci0g
ICAgICAgIGluaXRpYWxpemVkSmF2YUpTQmluZGluZ3MgPSB0cnVlOwotICAgICAgICBpbml0SmF2
YUpTQmluZGluZ3MoKTsKLSAgICB9Ci0jZW5kaWYKLQogICAgIGlmICghb3duZXJFbGVtZW50KQog
ICAgICAgICBwYWdlLT5zZXRNYWluRnJhbWUodGhpcyk7CiAgICAgZWxzZSB7CkBAIC0xNzUsOCAr
MTY3LDYgQEAgRnJhbWU6On5GcmFtZSgpCiAgICAgICAgIGQtPm1fdmlldy0+Y2xlYXJGcmFtZSgp
OwogICAgIH0KIAotICAgIGRpc2Nvbm5lY3RQbGF0Zm9ybVNjcmlwdE9iamVjdHMoKTsKLQogICAg
IEFTU0VSVCghZC0+bV9saWZlU3VwcG9ydFRpbWVyLmlzQWN0aXZlKCkpOwogCiAjaWYgRlJBTUVf
TE9BRFNfVVNFUl9TVFlMRVNIRUVUCkBAIC0xMDU4LDU1ICsxMDQ4LDYgQEAgdm9pZCBGcmFtZTo6
bGlmZVN1cHBvcnRUaW1lckZpcmVkKFRpbWVyPEZyYW1lPiopCiAgICAgZGVyZWYoKTsKIH0KIAot
S0pTOjpCaW5kaW5nczo6Um9vdE9iamVjdCogRnJhbWU6OmJpbmRpbmdSb290T2JqZWN0KCkKLXsK
LSAgICBpZiAoIXNjcmlwdCgpLT5pc0VuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAg
ICBpZiAoIWQtPm1fYmluZGluZ1Jvb3RPYmplY3QpCi0gICAgICAgIGQtPm1fYmluZGluZ1Jvb3RP
YmplY3QgPSBLSlM6OkJpbmRpbmdzOjpSb290T2JqZWN0OjpjcmVhdGUoMCwgc2NyaXB0KCktPmds
b2JhbE9iamVjdCgpKTsKLSAgICByZXR1cm4gZC0+bV9iaW5kaW5nUm9vdE9iamVjdC5nZXQoKTsK
LX0KLQotUGFzc1JlZlB0cjxLSlM6OkJpbmRpbmdzOjpSb290T2JqZWN0PiBGcmFtZTo6Y3JlYXRl
Um9vdE9iamVjdCh2b2lkKiBuYXRpdmVIYW5kbGUsIEtKUzo6SlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCkKLXsKLSAgICBSb290T2JqZWN0TWFwOjppdGVyYXRvciBpdCA9IGQtPm1fcm9vdE9i
amVjdHMuZmluZChuYXRpdmVIYW5kbGUpOwotICAgIGlmIChpdCAhPSBkLT5tX3Jvb3RPYmplY3Rz
LmVuZCgpKQotICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKLSAgICAKLSAgICBSZWZQdHI8S0pT
OjpCaW5kaW5nczo6Um9vdE9iamVjdD4gcm9vdE9iamVjdCA9IEtKUzo6QmluZGluZ3M6OlJvb3RP
YmplY3Q6OmNyZWF0ZShuYXRpdmVIYW5kbGUsIGdsb2JhbE9iamVjdCk7Ci0gICAgCi0gICAgZC0+
bV9yb290T2JqZWN0cy5zZXQobmF0aXZlSGFuZGxlLCByb290T2JqZWN0KTsKLSAgICByZXR1cm4g
cm9vdE9iamVjdC5yZWxlYXNlKCk7Ci19Ci0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQ
SSkKLU5QT2JqZWN0KiBGcmFtZTo6d2luZG93U2NyaXB0TlBPYmplY3QoKQotewotICAgIGlmICgh
ZC0+bV93aW5kb3dTY3JpcHROUE9iamVjdCkgewotICAgICAgICBpZiAoc2NyaXB0KCktPmlzRW5h
YmxlZCgpKSB7Ci0gICAgICAgICAgICAvLyBKYXZhU2NyaXB0IGlzIGVuYWJsZWQsIHNvIHRoZXJl
IGlzIGEgSmF2YVNjcmlwdCB3aW5kb3cgb2JqZWN0LiAgUmV0dXJuIGFuIE5QT2JqZWN0IGJvdW5k
IHRvIHRoZSB3aW5kb3cKLSAgICAgICAgICAgIC8vIG9iamVjdC4KLSAgICAgICAgICAgIEtKUzo6
SlNPYmplY3QqIHdpbiA9IHRvSlNET01XaW5kb3codGhpcyk7Ci0gICAgICAgICAgICBBU1NFUlQo
d2luKTsKLSAgICAgICAgICAgIEtKUzo6QmluZGluZ3M6OlJvb3RPYmplY3QqIHJvb3QgPSBiaW5k
aW5nUm9vdE9iamVjdCgpOwotICAgICAgICAgICAgZC0+bV93aW5kb3dTY3JpcHROUE9iamVjdCA9
IF9OUE5fQ3JlYXRlU2NyaXB0T2JqZWN0KDAsIHdpbiwgcm9vdCk7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAvLyBKYXZhU2NyaXB0IGlzIG5vdCBlbmFibGVkLCBzbyB3ZSBjYW5ub3Qg
YmluZCB0aGUgTlBPYmplY3QgdG8gdGhlIEphdmFTY3JpcHQgd2luZG93IG9iamVjdC4KLSAgICAg
ICAgICAgIC8vIEluc3RlYWQsIHdlIGNyZWF0ZSBhbiBOUE9iamVjdCBvZiBhIGRpZmZlcmVudCBj
bGFzcywgb25lIHdoaWNoIGlzIG5vdCBib3VuZCB0byBhIEphdmFTY3JpcHQgb2JqZWN0LgotICAg
ICAgICAgICAgZC0+bV93aW5kb3dTY3JpcHROUE9iamVjdCA9IF9OUE5fQ3JlYXRlTm9TY3JpcHRP
YmplY3QoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBkLT5tX3dpbmRvd1Njcmlw
dE5QT2JqZWN0OwotfQotI2VuZGlmCi0gICAgCi12b2lkIEZyYW1lOjpjbGVhclNjcmlwdENvbnRy
b2xsZXIoKQotewotICAgIGQtPm1fc2NyaXB0LmNsZWFyKCk7Ci19Ci0KIHZvaWQgRnJhbWU6OmNs
ZWFyRE9NV2luZG93KCkKIHsKICAgICBpZiAoZC0+bV9kb21XaW5kb3cpIHsKQEAgLTExMTYsNDMg
KzEwNTcsNiBAQCB2b2lkIEZyYW1lOjpjbGVhckRPTVdpbmRvdygpCiAgICAgZC0+bV9kb21XaW5k
b3cgPSAwOwogfQogCi12b2lkIEZyYW1lOjpjbGVhbnVwU2NyaXB0T2JqZWN0c0ZvclBsdWdpbih2
b2lkKiBuYXRpdmVIYW5kbGUpCi17Ci0gICAgUm9vdE9iamVjdE1hcDo6aXRlcmF0b3IgaXQgPSBk
LT5tX3Jvb3RPYmplY3RzLmZpbmQobmF0aXZlSGFuZGxlKTsKLSAgICAKLSAgICBpZiAoaXQgPT0g
ZC0+bV9yb290T2JqZWN0cy5lbmQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGl0LT5z
ZWNvbmQtPmludmFsaWRhdGUoKTsKLSAgICBkLT5tX3Jvb3RPYmplY3RzLnJlbW92ZShpdCk7Ci19
Ci0gICAgCi12b2lkIEZyYW1lOjpjbGVhclNjcmlwdE9iamVjdHMoKQotewotICAgIFJvb3RPYmpl
Y3RNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGQtPm1fcm9vdE9iamVjdHMuZW5kKCk7Ci0gICAg
Zm9yIChSb290T2JqZWN0TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGQtPm1fcm9vdE9iamVjdHMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5pbnZhbGlkYXRl
KCk7Ci0KLSAgICBkLT5tX3Jvb3RPYmplY3RzLmNsZWFyKCk7Ci0KLSAgICBpZiAoZC0+bV9iaW5k
aW5nUm9vdE9iamVjdCkgewotICAgICAgICBkLT5tX2JpbmRpbmdSb290T2JqZWN0LT5pbnZhbGlk
YXRlKCk7Ci0gICAgICAgIGQtPm1fYmluZGluZ1Jvb3RPYmplY3QgPSAwOwotICAgIH0KLQotI2lm
IEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIGlmIChkLT5tX3dpbmRvd1NjcmlwdE5Q
T2JqZWN0KSB7Ci0gICAgICAgIC8vIENhbGwgX05QTl9EZWFsbG9jYXRlT2JqZWN0KCkgaW5zdGVh
ZCBvZiBfTlBOX1JlbGVhc2VPYmplY3QoKSBzbyB0aGF0IHdlIGRvbid0IGxlYWsgaWYgYSBwbHVn
aW4gZmFpbHMgdG8gcmVsZWFzZSB0aGUgd2luZG93Ci0gICAgICAgIC8vIHNjcmlwdCBvYmplY3Qg
cHJvcGVybHkuCi0gICAgICAgIC8vIFRoaXMgc2hvdWxkbid0IGNhdXNlIGFueSBwcm9ibGVtcyBm
b3IgcGx1Z2lucyBzaW5jZSB0aGV5IHNob3VsZCBoYXZlIGFscmVhZHkgYmVlbiBzdG9wcGVkIGFu
ZCBkZXN0cm95ZWQgYXQgdGhpcyBwb2ludC4KLSAgICAgICAgX05QTl9EZWFsbG9jYXRlT2JqZWN0
KGQtPm1fd2luZG93U2NyaXB0TlBPYmplY3QpOwotICAgICAgICBkLT5tX3dpbmRvd1NjcmlwdE5Q
T2JqZWN0ID0gMDsKLSAgICB9Ci0jZW5kaWYKLQotICAgIGNsZWFyUGxhdGZvcm1TY3JpcHRPYmpl
Y3RzKCk7Ci19Ci0KIFJlbmRlclZpZXcqIEZyYW1lOjpjb250ZW50UmVuZGVyZXIoKSBjb25zdAog
ewogICAgIERvY3VtZW50KiBkb2MgPSBkb2N1bWVudCgpOwpAQCAtMTc1NCwxNyArMTY1OCwxNyBA
QCB2b2lkIEZyYW1lOjpwYWdlRGVzdHJveWVkKCkKICAgICBpZiAoRnJhbWUqIHBhcmVudCA9IHRy
ZWUoKS0+cGFyZW50KCkpCiAgICAgICAgIHBhcmVudC0+bG9hZGVyKCktPmNoZWNrTG9hZENvbXBs
ZXRlKCk7CiAKLSAgICBpZiAoZC0+bV9wYWdlICYmIGQtPm1fcGFnZS0+Zm9jdXNDb250cm9sbGVy
KCktPmZvY3VzZWRGcmFtZSgpID09IHRoaXMpCi0gICAgICAgIGQtPm1fcGFnZS0+Zm9jdXNDb250
cm9sbGVyKCktPnNldEZvY3VzZWRGcmFtZSgwKTsKKyAgICAvLyBGSVhNRTogSXQncyB1bmNsZWFy
IGFzIHRvIHdoeSB0aGlzIGlzIGNhbGxlZCBtb3JlIHRoYW4gb25jZSwgYnV0IGl0IGlzLAorICAg
IC8vIHNvIHBhZ2UoKSBjb3VsZCBiZSBOVUxMLgorICAgIGlmIChwYWdlKCkgJiYgcGFnZSgpLT5m
b2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZEZyYW1lKCkgPT0gdGhpcykKKyAgICAgICAgcGFnZSgp
LT5mb2N1c0NvbnRyb2xsZXIoKS0+c2V0Rm9jdXNlZEZyYW1lKDApOwogCiAgICAgLy8gVGhpcyB3
aWxsIHN0b3AgYW55IEpTIHRpbWVycwotICAgIGlmIChkLT5tX3NjcmlwdC5oYXZlV2luZG93U2hl
bGwoKSkgewotICAgICAgICBpZiAoSlNET01XaW5kb3dTaGVsbCogd2luZG93U2hlbGwgPSB0b0pT
RE9NV2luZG93U2hlbGwodGhpcykpCi0gICAgICAgICAgICB3aW5kb3dTaGVsbC0+ZGlzY29ubmVj
dEZyYW1lKCk7Ci0gICAgfQorICAgIGlmIChzY3JpcHQoKS0+aGF2ZVdpbmRvd1NoZWxsKCkpCisg
ICAgICAgIHNjcmlwdCgpLT53aW5kb3dTaGVsbCgpLT5kaXNjb25uZWN0RnJhbWUoKTsKKworICAg
IHNjcmlwdCgpLT5jbGVhclNjcmlwdE9iamVjdHMoKTsKIAotICAgIGNsZWFyU2NyaXB0T2JqZWN0
cygpOwotICAgIAogICAgIGQtPm1fcGFnZSA9IDA7CiB9CiAKQEAgLTE5NTEsMjYgKzE4NTUsMTkg
QEAgRnJhbWVQcml2YXRlOjpGcmFtZVByaXZhdGUoUGFnZSogcGFnZSwgRnJhbWUqIHBhcmVudCwg
RnJhbWUqIHRoaXNGcmFtZSwgSFRNTEZyYW0KICAgICAsIG1fZWRpdG9yKHRoaXNGcmFtZSkKICAg
ICAsIG1fZXZlbnRIYW5kbGVyKHRoaXNGcmFtZSkKICAgICAsIG1fYW5pbWF0aW9uQ29udHJvbGxl
cih0aGlzRnJhbWUpCisgICAgLCBtX2xpZmVTdXBwb3J0VGltZXIodGhpc0ZyYW1lLCAmRnJhbWU6
OmxpZmVTdXBwb3J0VGltZXJGaXJlZCkKKyAgICAsIG1fcGFpbnRSZXN0cmljdGlvbihQYWludFJl
c3RyaWN0aW9uTm9uZSkKICAgICAsIG1fY2FyZXRWaXNpYmxlKGZhbHNlKQogICAgICwgbV9jYXJl
dFBhaW50KHRydWUpCiAgICAgLCBtX2lzUGFpbnRpbmcoZmFsc2UpCi0gICAgLCBtX2xpZmVTdXBw
b3J0VGltZXIodGhpc0ZyYW1lLCAmRnJhbWU6OmxpZmVTdXBwb3J0VGltZXJGaXJlZCkKLSAgICAs
IG1fcGFpbnRSZXN0cmljdGlvbihQYWludFJlc3RyaWN0aW9uTm9uZSkKICAgICAsIG1faGlnaGxp
Z2h0VGV4dE1hdGNoZXMoZmFsc2UpCiAgICAgLCBtX2luVmlld1NvdXJjZU1vZGUoZmFsc2UpCi0g
ICAgLCBmcmFtZUNvdW50KDApCiAgICAgLCBtX3Byb2hpYml0c1Njcm9sbGluZyhmYWxzZSkKICAg
ICAsIG1fbmVlZHNSZWFwcGx5U3R5bGVzKGZhbHNlKQogICAgICwgbV9pc0Rpc2Nvbm5lY3RlZChm
YWxzZSkKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICAsIG1fd2luZG93U2Ny
aXB0TlBPYmplY3QoMCkKLSNlbmRpZgogI2lmIEZSQU1FX0xPQURTX1VTRVJfU1RZTEVTSEVFVAog
ICAgICwgbV91c2VyU3R5bGVTaGVldExvYWRlcigwKQogI2VuZGlmCi0jaWYgUExBVEZPUk0oTUFD
KQotICAgICwgbV93aW5kb3dTY3JpcHRPYmplY3QobmlsKQotI2VuZGlmCiB7CiB9CiAKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGFnZS9GcmFtZS5oIGIvV2ViQ29yZS9wYWdlL0ZyYW1lLmgKaW5kZXgg
NWYyNWFmZC4uODNiYTM1YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0ZyYW1lLmgKKysrIGIv
V2ViQ29yZS9wYWdlL0ZyYW1lLmgKQEAgLTgsNiArOCw3IEBACiAgKiAgICAgICAgICAgICAgICAg
ICAgIDIwMDAgU3RlZmFuIFNjaGltYW5za2kgPDFTdGVpbkBnbXguZGU+CiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA3IFRyb2xsdGVjaCBBU0EKKyAqIENvcHlyaWdo
dCAoQykgMjAwOCBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICoKICAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCkBAIC0zMywyOCArMzQsMTIgQEAKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1
ZGUgIlRleHRHcmFudWxhcml0eS5oIgogCi1zdHJ1Y3QgTlBPYmplY3Q7Ci0KLW5hbWVzcGFjZSBL
SlMgewotCi0gICAgY2xhc3MgSlNHbG9iYWxPYmplY3Q7Ci0KLSAgICBuYW1lc3BhY2UgQmluZGlu
Z3MgewotICAgICAgICBjbGFzcyBJbnN0YW5jZTsKLSAgICAgICAgY2xhc3MgUm9vdE9iamVjdDsK
LSAgICB9Ci0KLX0KLQogI2lmIFBMQVRGT1JNKE1BQykKLSNpZmRlZiBfX09CSkNfXwotQGNsYXNz
IFdlYlNjcmlwdE9iamVjdDsKLSNlbHNlCisjaWZuZGVmIF9fT0JKQ19fCiBjbGFzcyBOU0FycmF5
OwogY2xhc3MgTlNEaWN0aW9uYXJ5OwogY2xhc3MgTlNNdXRhYmxlRGljdGlvbmFyeTsKIGNsYXNz
IE5TU3RyaW5nOwotY2xhc3MgV2ViU2NyaXB0T2JqZWN0OwogdHlwZWRlZiBpbnQgTlNXcml0aW5n
RGlyZWN0aW9uOwogI2VuZGlmCiAjZW5kaWYKQEAgLTE1NywzNiArMTQyLDEyIEBAIHB1YmxpYzoK
IAogICAgIFN0cmluZyBkb2N1bWVudFR5cGVTdHJpbmcoKSBjb25zdDsKIAotICAgIHZvaWQgY2xl
YXJTY3JpcHRDb250cm9sbGVyKCk7CisgICAgLy8gVGhpcyBtZXRob2QgLS0gYW5kIHRoZSBjb3Jy
ZXNwb25kaW5nIGxpc3Qgb2YgZm9ybWVyIERPTSB3aW5kb3dzIC0tCisgICAgLy8gc2hvdWxkIG1v
dmUgb250byBTY3JpcHRDb250cm9sbGVyCiAgICAgdm9pZCBjbGVhckRPTVdpbmRvdygpOwogCi0g
ICAgdm9pZCBjbGVhclNjcmlwdE9iamVjdHMoKTsKLSAgICB2b2lkIGNsZWFudXBTY3JpcHRPYmpl
Y3RzRm9yUGx1Z2luKHZvaWQqKTsKLQogcHJpdmF0ZToKLSAgICB2b2lkIGNsZWFyUGxhdGZvcm1T
Y3JpcHRPYmplY3RzKCk7Ci0gICAgdm9pZCBkaXNjb25uZWN0UGxhdGZvcm1TY3JpcHRPYmplY3Rz
KCk7Ci0KICAgICB2b2lkIGxpZmVTdXBwb3J0VGltZXJGaXJlZChUaW1lcjxGcmFtZT4qKTsKLSAg
ICAKLS8vID09PSB0byBiZSBtb3ZlZCBpbnRvIFNjcmlwdENvbnRyb2xsZXIKLQotcHVibGljOgot
ICAgIFBhc3NSZWZQdHI8S0pTOjpCaW5kaW5nczo6SW5zdGFuY2U+IGNyZWF0ZVNjcmlwdEluc3Rh
bmNlRm9yV2lkZ2V0KFdpZGdldCopOwotICAgIEtKUzo6QmluZGluZ3M6OlJvb3RPYmplY3QqIGJp
bmRpbmdSb290T2JqZWN0KCk7Ci0KLSAgICBQYXNzUmVmUHRyPEtKUzo6QmluZGluZ3M6OlJvb3RP
YmplY3Q+IGNyZWF0ZVJvb3RPYmplY3Qodm9pZCogbmF0aXZlSGFuZGxlLCBLSlM6OkpTR2xvYmFs
T2JqZWN0Kik7Ci0KLSNpZiBQTEFURk9STShNQUMpCi0jaWYgRU5BQkxFKE1BQ19KQVZBX0JSSURH
RSkKLSAgICBzdGF0aWMgdm9pZCBpbml0SmF2YUpTQmluZGluZ3MoKTsKLSNlbmRpZgotICAgIFdl
YlNjcmlwdE9iamVjdCogd2luZG93U2NyaXB0T2JqZWN0KCk7Ci0jZW5kaWYKLQotI2lmIEVOQUJM
RShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIE5QT2JqZWN0KiB3aW5kb3dTY3JpcHROUE9iamVj
dCgpOwotI2VuZGlmICAgIAogCiAvLyA9PT0gdG8gYmUgbW92ZWQgaW50byBEb2N1bWVudAogCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvRnJhbWVQcml2YXRlLmggYi9XZWJDb3JlL3BhZ2UvRnJh
bWVQcml2YXRlLmgKaW5kZXggNTE0OTQ1My4uYTA4NTM3NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9w
YWdlL0ZyYW1lUHJpdmF0ZS5oCisrKyBiL1dlYkNvcmUvcGFnZS9GcmFtZVByaXZhdGUuaApAQCAt
MzYsMjMgKzM2LDYgQEAKICNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCiAjaW5jbHVkZSAiU2NyaXB0
Q29udHJvbGxlci5oIgogCi1uYW1lc3BhY2UgS0pTIHsKLSAgICBjbGFzcyBJbnRlcnByZXRlcjsK
LSAgICAgICAgCi0gICAgbmFtZXNwYWNlIEJpbmRpbmdzIHsKLSAgICAgICAgY2xhc3MgSW5zdGFu
Y2U7Ci0gICAgICAgIGNsYXNzIFJvb3RPYmplY3Q7Ci0gICAgfQotfQotCi0jaWYgUExBVEZPUk0o
TUFDKQotI2lmZGVmIF9fT0JKQ19fCi1AY2xhc3MgV2ViU2NyaXB0T2JqZWN0OwotI2Vsc2UKLWNs
YXNzIFdlYlNjcmlwdE9iamVjdDsKLSNlbmRpZgotI2VuZGlmCi0KICNpZiBQTEFURk9STShXSU4p
CiAjaW5jbHVkZSAiRnJhbWVXaW4uaCIKICNlbmRpZgpAQCAtNjIsOCArNDUsNiBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAjaWYgRlJBTUVfTE9BRFNfVVNFUl9TVFlMRVNIRUVUCiAgICAgY2xhc3Mg
VXNlclN0eWxlU2hlZXRMb2FkZXI7CiAjZW5kaWYKLQotICAgIHR5cGVkZWYgSGFzaE1hcDx2b2lk
KiwgUmVmUHRyPEtKUzo6QmluZGluZ3M6OlJvb3RPYmplY3Q+ID4gUm9vdE9iamVjdE1hcDsKICAg
ICAKICAgICBjbGFzcyBGcmFtZVByaXZhdGUgewogICAgIHB1YmxpYzoKQEAgLTk2LDEwICs3Nyw2
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgRXZlbnRIYW5kbGVyIG1fZXZlbnRIYW5k
bGVyOwogICAgICAgICBBbmltYXRpb25Db250cm9sbGVyIG1fYW5pbWF0aW9uQ29udHJvbGxlcjsK
IAotICAgICAgICBib29sIG1fY2FyZXRWaXNpYmxlIDogMTsKLSAgICAgICAgYm9vbCBtX2NhcmV0
UGFpbnQgOiAxOwotICAgICAgICBib29sIG1faXNQYWludGluZyA6IDE7Ci0KICAgICAgICAgUmVm
UHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBtX3R5cGluZ1N0eWxlOwogCiAgICAgICAg
IFRpbWVyPEZyYW1lPiBtX2xpZmVTdXBwb3J0VGltZXI7CkBAIC0xMDcsMzAgKzg0LDE5IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgUmVmUHRyPE5vZGU+IG1fZWxlbWVudFRvRHJhdzsK
ICAgICAgICAgUGFpbnRSZXN0cmljdGlvbiBtX3BhaW50UmVzdHJpY3Rpb247CiAgICAgICAgIAor
ICAgICAgICBib29sIG1fY2FyZXRWaXNpYmxlOworICAgICAgICBib29sIG1fY2FyZXRQYWludDsK
KyAgICAgICAgYm9vbCBtX2lzUGFpbnRpbmc7CisKICAgICAgICAgYm9vbCBtX2hpZ2hsaWdodFRl
eHRNYXRjaGVzOwotICAgICAgICAKICAgICAgICAgYm9vbCBtX2luVmlld1NvdXJjZU1vZGU7Ci0K
LSAgICAgICAgdW5zaWduZWQgZnJhbWVDb3VudDsKLQogICAgICAgICBib29sIG1fcHJvaGliaXRz
U2Nyb2xsaW5nOwotCiAgICAgICAgIGJvb2wgbV9uZWVkc1JlYXBwbHlTdHlsZXM7Ci0gICAgICAg
IAogICAgICAgICBib29sIG1faXNEaXNjb25uZWN0ZWQ7CiAKLSAgICAgICAgLy8gVGhlIHJvb3Qg
b2JqZWN0IHVzZWQgZm9yIG9iamVjdHMgYm91bmQgb3V0c2lkZSB0aGUgY29udGV4dCBvZiBhIHBs
dWdpbi4KLSAgICAgICAgUmVmUHRyPEtKUzo6QmluZGluZ3M6OlJvb3RPYmplY3Q+IG1fYmluZGlu
Z1Jvb3RPYmplY3Q7IAotICAgICAgICBSb290T2JqZWN0TWFwIG1fcm9vdE9iamVjdHM7Ci0jaWYg
RU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgICAgIE5QT2JqZWN0KiBtX3dpbmRvd1Nj
cmlwdE5QT2JqZWN0OwotI2VuZGlmCiAjaWYgRlJBTUVfTE9BRFNfVVNFUl9TVFlMRVNIRUVUCiAg
ICAgICAgIFVzZXJTdHlsZVNoZWV0TG9hZGVyKiBtX3VzZXJTdHlsZVNoZWV0TG9hZGVyOwogI2Vu
ZGlmCi0jaWYgUExBVEZPUk0oTUFDKQotICAgICAgICBSZXRhaW5QdHI8V2ViU2NyaXB0T2JqZWN0
PiBtX3dpbmRvd1NjcmlwdE9iamVjdDsKLSNlbmRpZgogICAgIH07CiB9CiAKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGFnZS9ndGsvRnJhbWVHdGsuY3BwIGIvV2ViQ29yZS9wYWdlL2d0ay9GcmFtZUd0
ay5jcHAKaW5kZXggZjFhZDM1NS4uM2NhYjVhMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL2d0
ay9GcmFtZUd0ay5jcHAKKysrIGIvV2ViQ29yZS9wYWdlL2d0ay9GcmFtZUd0ay5jcHAKQEAgLTEs
MTAgKzEsNCBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVt
bWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhh
bnMgUGV0ZXIgRnJleXRoZXIKLSAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKICAqIGFyZSBtZXQ6CkBAIC0zMSwzMyArMjUsOSBAQAogI2lu
Y2x1ZGUgIkZyYW1lLmgiCiAKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUg
IlBsdWdpblZpZXcuaCIKLSNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAi
cnVudGltZV9yb290LmgiCi0jaW5jbHVkZSAicnVudGltZS5oIgotCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotUGFzc1JlZlB0cjxLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZT4gRnJhbWU6OmNyZWF0
ZVNjcmlwdEluc3RhbmNlRm9yV2lkZ2V0KFdpZGdldCogd2lkZ2V0KQotewotICAgIC8vIEZJWE1F
OiBJZGVhbGx5IHdlJ2QgaGF2ZSBhbiBpc1BsdWdpblZpZXcoKSBoZXJlIGJ1dCB3ZSBjYW4ndCBh
ZGQgdGhhdCB0byB0aGUgb3BlbiBzb3VyY2UgdHJlZSByaWdodCBub3cuCi0gICAgaWYgKHdpZGdl
dC0+aXNGcmFtZVZpZXcoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8UGx1Z2luVmlldyo+KHdpZGdldCktPmJpbmRpbmdJbnN0YW5jZSgpOwotfQotCi12b2lk
IEZyYW1lOjpjbGVhclBsYXRmb3JtU2NyaXB0T2JqZWN0cygpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotdm9pZCBGcmFtZTo6ZGlzY29ubmVjdFBsYXRmb3JtU2NyaXB0T2JqZWN0cygp
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQogRHJhZ0ltYWdlUmVmIEZyYW1lOjpkcmFn
SW1hZ2VGb3JTZWxlY3Rpb24oKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BhZ2UvbWFjL0ZyYW1lTWFjLm1tIGIvV2ViQ29yZS9wYWdlL21hYy9GcmFtZU1h
Yy5tbQppbmRleCAxOTA0NTgyLi43NjJlMWMxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvbWFj
L0ZyYW1lTWFjLm1tCisrKyBiL1dlYkNvcmUvcGFnZS9tYWMvRnJhbWVNYWMubW0KQEAgLTMwLDcg
KzMwLDExIEBACiAKICNpbXBvcnQgIkJsb2NrRXhjZXB0aW9ucy5oIgogI2ltcG9ydCAiQ29sb3JN
YWMuaCIKLSNpbXBvcnQgIkRPTUFic3RyYWN0Vmlld0ZyYW1lLmgiCisjaW1wb3J0ICJDdXJzb3Iu
aCIKKyNpbXBvcnQgIkRPTUludGVybmFsLmgiCisjaW1wb3J0ICJEb2N1bWVudExvYWRlci5oIgor
I2ltcG9ydCAiRWRpdG9yQ2xpZW50LmgiCisjaW1wb3J0ICJFdmVudC5oIgogI2ltcG9ydCAiRXZl
bnROYW1lcy5oIgogI2ltcG9ydCAiRnJhbWVMb2FkZXJDbGllbnQuaCIKICNpbXBvcnQgIkZyYW1l
UHJpdmF0ZS5oIgpAQCAtMzgsNDAgKzQyLDMzIEBACiAjaW1wb3J0ICJHcmFwaGljc0NvbnRleHQu
aCIKICNpbXBvcnQgIkhUTUxOYW1lcy5oIgogI2ltcG9ydCAiSFRNTFRhYmxlQ2VsbEVsZW1lbnQu
aCIKKyNpbXBvcnQgIkhpdFRlc3RSZXF1ZXN0LmgiCisjaW1wb3J0ICJIaXRUZXN0UmVzdWx0Lmgi
CisjaW1wb3J0ICJLZXlib2FyZEV2ZW50LmgiCisjaW1wb3J0ICJMb2dnaW5nLmgiCisjaW1wb3J0
ICJNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzLmgiCisjaW1wb3J0ICJQYWdlLmgiCisjaW1w
b3J0ICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKKyNpbXBvcnQgIlBsYXRmb3JtU2Nyb2xsQmFy
LmgiCisjaW1wb3J0ICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKICNpbXBvcnQgIlJlZ3VsYXJFeHBy
ZXNzaW9uLmgiCiAjaW1wb3J0ICJSZW5kZXJUYWJsZUNlbGwuaCIKICNpbXBvcnQgIlNpbXBsZUZv
bnREYXRhLmgiCiAjaW1wb3J0ICJVc2VyU3R5bGVTaGVldExvYWRlci5oIgotI2ltcG9ydCAiV2Vi
U2NyaXB0T2JqZWN0UHJpdmF0ZS5oIgorI2ltcG9ydCAiV2ViQ29yZVZpZXdGYWN0b3J5LmgiCisj
aW1wb3J0ICJ2aXNpYmxlX3VuaXRzLmgiCisKICNpbXBvcnQgPENhcmJvbi9DYXJib24uaD4KLSNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0FQSUNhc3QuaD4KIAotI2lmIEVOQUJMRShORVRTQ0FQRV9Q
TFVHSU5fQVBJKQotI2ltcG9ydCAiY19pbnN0YW5jZS5oIgotI2ltcG9ydCAiTlBfanNvYmplY3Qu
aCIKLSNpbXBvcnQgIm5wcnVudGltZV9pbXBsLmgiCi0jZW5kaWYKLSNpbXBvcnQgIm9iamNfaW5z
dGFuY2UuaCIKLSNpbXBvcnQgInJ1bnRpbWVfcm9vdC5oIgotI2ltcG9ydCAicnVudGltZS5oIgot
I2lmIEVOQUJMRShNQUNfSkFWQV9CUklER0UpCi0jaW1wb3J0ICJqbmlfaW5zdGFuY2UuaCIKLSNl
bmRpZgogI2lmIEVOQUJMRShEQVNIQk9BUkRfU1VQUE9SVCkKICNpbXBvcnQgIldlYkRhc2hib2Fy
ZFJlZ2lvbi5oIgogI2VuZGlmCi0KLUBpbnRlcmZhY2UgTlNPYmplY3QgKFdlYlBsdWdpbikKLS0g
KGlkKW9iamVjdEZvcldlYlNjcmlwdDsKLS0gKE5QT2JqZWN0ICopY3JlYXRlUGx1Z2luU2NyaXB0
YWJsZU9iamVjdDsKLUBlbmQKICAKIEBpbnRlcmZhY2UgTlNWaWV3IChXZWJDb3JlSFRNTERvY3Vt
ZW50VmlldykKIC0gKHZvaWQpZHJhd1NpbmdsZVJlY3Q6KE5TUmVjdClyZWN0OwogQGVuZAogIAog
dXNpbmcgbmFtZXNwYWNlIHN0ZDsKLXVzaW5nIG5hbWVzcGFjZSBLSlM6OkJpbmRpbmdzOwogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTUwNyw3NiArNTA0LDYgQEAgRHJhZ0ltYWdlUmVmIEZy
YW1lOjpkcmFnSW1hZ2VGb3JTZWxlY3Rpb24oKQogICAgIHJldHVybiBzZWxlY3Rpb25JbWFnZSgp
OwogfQogCi1QYXNzUmVmUHRyPEtKUzo6QmluZGluZ3M6Okluc3RhbmNlPiBGcmFtZTo6Y3JlYXRl
U2NyaXB0SW5zdGFuY2VGb3JXaWRnZXQoV2lkZ2V0KiB3aWRnZXQpCi17Ci0gICAgTlNWaWV3KiB3
aWRnZXRWaWV3ID0gd2lkZ2V0LT5nZXRWaWV3KCk7Ci0gICAgaWYgKCF3aWRnZXRWaWV3KQotICAg
ICAgICByZXR1cm4gMDsKLQotICAgIFJlZlB0cjxSb290T2JqZWN0PiByb290T2JqZWN0ID0gY3Jl
YXRlUm9vdE9iamVjdCh3aWRnZXRWaWV3LCBzY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KCkpOwotCi0g
ICAgaWYgKFt3aWRnZXRWaWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Iob2JqZWN0Rm9y
V2ViU2NyaXB0KV0pIHsKLSAgICAgICAgaWQgb2JqZWN0Rm9yV2ViU2NyaXB0ID0gW3dpZGdldFZp
ZXcgb2JqZWN0Rm9yV2ViU2NyaXB0XTsKLSAgICAgICAgaWYgKCFvYmplY3RGb3JXZWJTY3JpcHQp
Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuIEtKUzo6QmluZGluZ3M6Ok9i
amNJbnN0YW5jZTo6Y3JlYXRlKG9iamVjdEZvcldlYlNjcmlwdCwgcm9vdE9iamVjdC5yZWxlYXNl
KCkpOwotICAgIH0KLQotICAgIGlmIChbd2lkZ2V0VmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNl
bGVjdG9yKGNyZWF0ZVBsdWdpblNjcmlwdGFibGVPYmplY3QpXSkgewotI2lmICFFTkFCTEUoTkVU
U0NBUEVfUExVR0lOX0FQSSkKLSAgICAgICAgcmV0dXJuIDA7Ci0jZWxzZQotICAgICAgICBOUE9i
amVjdCogbnBPYmplY3QgPSBbd2lkZ2V0VmlldyBjcmVhdGVQbHVnaW5TY3JpcHRhYmxlT2JqZWN0
XTsKLSAgICAgICAgaWYgKCFucE9iamVjdCkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAg
ICBSZWZQdHI8SW5zdGFuY2U+IGluc3RhbmNlID0gS0pTOjpCaW5kaW5nczo6Q0luc3RhbmNlOjpj
cmVhdGUobnBPYmplY3QsIHJvb3RPYmplY3QucmVsZWFzZSgpKTsKLSAgICAgICAgLy8gLWNyZWF0
ZVBsdWdpblNjcmlwdGFibGVPYmplY3QgcmV0dXJucyBhIHJldGFpbmVkIE5QT2JqZWN0LiAgVGhl
IGNhbGxlciBpcyBleHBlY3RlZCB0byByZWxlYXNlIGl0LgotICAgICAgICBfTlBOX1JlbGVhc2VP
YmplY3QobnBPYmplY3QpOwotICAgICAgICByZXR1cm4gaW5zdGFuY2UucmVsZWFzZSgpOwotI2Vu
ZGlmCi0gICAgfQotCi0jaWYgRU5BQkxFKE1BQ19KQVZBX0JSSURHRSkKLSAgICBqb2JqZWN0IGFw
cGxldCA9IGxvYWRlcigpLT5jbGllbnQoKS0+amF2YUFwcGxldCh3aWRnZXRWaWV3KTsKLSAgICBp
ZiAoIWFwcGxldCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIEtKUzo6QmluZGluZ3M6
OkphdmFJbnN0YW5jZTo6Y3JlYXRlKGFwcGxldCwgcm9vdE9iamVjdC5yZWxlYXNlKCkpOwotI2Vs
c2UKLSAgICByZXR1cm4gMDsKLSNlbmRpZgotfQotCi1XZWJTY3JpcHRPYmplY3QqIEZyYW1lOjp3
aW5kb3dTY3JpcHRPYmplY3QoKQotewotICAgIGlmICghc2NyaXB0KCktPmlzRW5hYmxlZCgpKQot
ICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmICghZC0+bV93aW5kb3dTY3JpcHRPYmplY3QpIHsK
LSAgICAgICAgS0pTOjpKU09iamVjdCogd2luID0gdG9KU0RPTVdpbmRvd1NoZWxsKHRoaXMpOwot
ICAgICAgICBLSlM6OkJpbmRpbmdzOjpSb290T2JqZWN0ICpyb290ID0gYmluZGluZ1Jvb3RPYmpl
Y3QoKTsKLSAgICAgICAgZC0+bV93aW5kb3dTY3JpcHRPYmplY3QgPSBbV2ViU2NyaXB0T2JqZWN0
IHNjcmlwdE9iamVjdEZvckpTT2JqZWN0OnRvUmVmKHdpbikgb3JpZ2luUm9vdE9iamVjdDpyb290
IHJvb3RPYmplY3Q6cm9vdF07Ci0gICAgfQotCi0gICAgQVNTRVJUKFtkLT5tX3dpbmRvd1Njcmlw
dE9iamVjdC5nZXQoKSBpc0tpbmRPZkNsYXNzOltET01BYnN0cmFjdFZpZXcgY2xhc3NdXSk7Ci0g
ICAgcmV0dXJuIGQtPm1fd2luZG93U2NyaXB0T2JqZWN0LmdldCgpOwotfQotCi12b2lkIEZyYW1l
OjpjbGVhclBsYXRmb3JtU2NyaXB0T2JqZWN0cygpCi17Ci0gICAgaWYgKGQtPm1fd2luZG93U2Ny
aXB0T2JqZWN0KSB7Ci0gICAgICAgIEtKUzo6QmluZGluZ3M6OlJvb3RPYmplY3QqIHJvb3QgPSBi
aW5kaW5nUm9vdE9iamVjdCgpOwotICAgICAgICBbZC0+bV93aW5kb3dTY3JpcHRPYmplY3QuZ2V0
KCkgX3NldE9yaWdpblJvb3RPYmplY3Q6cm9vdCBhbmRSb290T2JqZWN0OnJvb3RdOwotICAgIH0K
LX0KLQotdm9pZCBGcmFtZTo6ZGlzY29ubmVjdFBsYXRmb3JtU2NyaXB0T2JqZWN0cygpCi17Ci0g
ICAgaWYgKGQtPm1fd2luZG93U2NyaXB0T2JqZWN0KSB7Ci0gICAgICAgIEFTU0VSVChbZC0+bV93
aW5kb3dTY3JpcHRPYmplY3QuZ2V0KCkgaXNLaW5kT2ZDbGFzczpbRE9NQWJzdHJhY3RWaWV3IGNs
YXNzXV0pOwotICAgICAgICBbKERPTUFic3RyYWN0VmlldyAqKWQtPm1fd2luZG93U2NyaXB0T2Jq
ZWN0LmdldCgpIF9kaXNjb25uZWN0RnJhbWVdOwotICAgIH0KLX0KLQogdm9pZCBGcmFtZTo6c2V0
VXNlclN0eWxlU2hlZXRMb2NhdGlvbihjb25zdCBLVVJMJiB1cmwpCiB7CiAgICAgZGVsZXRlIGQt
Pm1fdXNlclN0eWxlU2hlZXRMb2FkZXI7CkBAIC01OTMsMzggKzUyMCw0IEBAIHZvaWQgRnJhbWU6
OnNldFVzZXJTdHlsZVNoZWV0KGNvbnN0IFN0cmluZyYgc3R5bGVTaGVldCkKICAgICAgICAgZC0+
bV9kb2MtPnNldFVzZXJTdHlsZVNoZWV0KHN0eWxlU2hlZXQpOwogfQogCi0jaWYgRU5BQkxFKE1B
Q19KQVZBX0JSSURHRSkKLXN0YXRpYyBwdGhyZWFkX3QgbWFpblRocmVhZDsKLQotc3RhdGljIHZv
aWQgdXBkYXRlUmVuZGVyaW5nRm9yQmluZGluZ3MoS0pTOjpFeGVjU3RhdGUqIGV4ZWMsIEtKUzo6
SlNPYmplY3QqIHJvb3RPYmplY3QpCi17Ci0gICAgaWYgKHB0aHJlYWRfc2VsZigpICE9IG1haW5U
aHJlYWQpCi0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgaWYgKCFyb290T2JqZWN0KQot
ICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIEpTRE9NV2luZG93KiB3aW5kb3cgPSBzdGF0
aWNfY2FzdDxKU0RPTVdpbmRvdyo+KHJvb3RPYmplY3QpOwotICAgIGlmICghd2luZG93KQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBGcmFtZSogZnJhbWUgPSB3aW5kb3ctPmltcGwoKS0+ZnJhbWUo
KTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBEb2N1bWVudCogZG9j
dW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKTsKLSAgICBpZiAoIWRvY3VtZW50KQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBkb2N1bWVudC0+dXBkYXRlUmVuZGVyaW5nKCk7Ci19Ci0KLXZvaWQgRnJh
bWU6OmluaXRKYXZhSlNCaW5kaW5ncygpCi17Ci0gICAgbWFpblRocmVhZCA9IHB0aHJlYWRfc2Vs
ZigpOwotICAgIEtKUzo6QmluZGluZ3M6OkphdmFKU09iamVjdDo6aW5pdGlhbGl6ZUpOSVRocmVh
ZGluZygpOwotICAgIEtKUzo6QmluZGluZ3M6Okluc3RhbmNlOjpzZXREaWRFeGVjdXRlRnVuY3Rp
b24odXBkYXRlUmVuZGVyaW5nRm9yQmluZGluZ3MpOwotfQotI2VuZGlmCi0KIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9xdC9GcmFtZVF0LmNwcCBiL1dl
YkNvcmUvcGFnZS9xdC9GcmFtZVF0LmNwcAppbmRleCA5NTYyNTMwLi41NjBmZDViIDEwMDY0NAot
LS0gYS9XZWJDb3JlL3BhZ2UvcXQvRnJhbWVRdC5jcHAKKysrIGIvV2ViQ29yZS9wYWdlL3F0L0Zy
YW1lUXQuY3BwCkBAIC0xLDE1ICsxLDQgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgRGly
ayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgWmFjayBS
dXNpbiA8emFja0BrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA2IEdlb3JnZSBTdGFpa29z
IDxzdGFpa29zQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2ltb24gSGF1c21hbm4g
PGhhdXNtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgUm9iIEJ1aXMgPGJ1aXNA
a2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1l
cm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBUcm9sbHRlY2ggQVNBCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwogICogYXJlIG1ldDoKQEAgLTM1LDkzICsyNCw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiRnJhbWUuaCIKIAotI2luY2x1ZGUgIlBsdWdpblZpZXcuaCIKLQotI2luY2x1ZGUg
IkVsZW1lbnQuaCIKLSNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKLSNpbmNsdWRlICJSZW5kZXJX
aWRnZXQuaCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNp
bmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCi0jaW5jbHVkZSAi
RE9NV2luZG93LmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVzdC5oIgotI2luY2x1ZGUgIkZy
YW1lTG9hZGVyQ2xpZW50UXQuaCIKLSNpbmNsdWRlICJET01JbXBsZW1lbnRhdGlvbi5oIgotI2lu
Y2x1ZGUgIlJlc291cmNlSGFuZGxlSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgot
I2luY2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAi
RnJhbWVQcml2YXRlLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAi
SFRNTERvY3VtZW50LmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKLSNpbmNsdWRlICJG
cmFtZUxvYWRlci5oIgotI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgotI2luY2x1ZGUg
IlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5o
IgotI2luY2x1ZGUgIk1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMuaCIKLSNpbmNsdWRlICJT
ZWxlY3Rpb25Db250cm9sbGVyLmgiCi0jaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgotI2lu
Y2x1ZGUgIlR5cGluZ0NvbW1hbmQuaCIKLSNpbmNsdWRlICJxdF9pbnN0YW5jZS5oIgotI2luY2x1
ZGUgInJ1bnRpbWVfcm9vdC5oIgotI2luY2x1ZGUgInJ1bnRpbWUuaCIKLSNpbmNsdWRlICJKU0RP
TVdpbmRvdy5oIgotI2luY2x1ZGUgPFFTY3JvbGxBcmVhPgotI2luY2x1ZGUgIk5vdEltcGxlbWVu
dGVkLmgiCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotLy8gRklYTUU6IFR1cm5lZCB0aGlzIG9m
ZiB0byBmaXggYnVpbGRib3QuIFRoaXMgZnVuY3Rpb24gYmUgZWl0aGVyIGRlbGV0ZWQgb3IgdXNl
ZC4KLSNpZiAwCi1zdGF0aWMgdm9pZCBkb1Njcm9sbChjb25zdCBSZW5kZXJPYmplY3QqIHIsIGJv
b2wgaXNIb3Jpem9udGFsLCBpbnQgbXVsdGlwbGllcikKLXsKLSAgICAvLyBGSVhNRTogVGhlIHNj
cm9sbGluZyBkb25lIGhlcmUgc2hvdWxkIGJlIGRvbmUgaW4gdGhlIGRlZmF1bHQgaGFuZGxlcnMK
LSAgICAvLyBvZiB0aGUgZWxlbWVudHMgcmF0aGVyIHRoYW4gaGVyZSBpbiB0aGUgcGFydC4KLSAg
ICBpZiAoIXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vYnJva2VuIHNpbmNlIGl0IGNhbGxz
IHNjcm9sbCBvbiBzY3JvbGxiYXJzCi0gICAgLy9hbmQgd2UgaGF2ZSBub25lIG5vdwotICAgIC8v
ci0+c2Nyb2xsKGRpcmVjdGlvbiwgS1dRU2Nyb2xsV2hlZWwsIG11bHRpcGxpZXIpOwotICAgIGlm
ICghci0+bGF5ZXIoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW50IHggPSByLT5sYXllcigp
LT5zY3JvbGxYT2Zmc2V0KCk7Ci0gICAgaW50IHkgPSByLT5sYXllcigpLT5zY3JvbGxZT2Zmc2V0
KCk7Ci0gICAgaWYgKGlzSG9yaXpvbnRhbCkKLSAgICAgICAgeCArPSBtdWx0aXBsaWVyOwotICAg
IGVsc2UKLSAgICAgICAgeSArPSBtdWx0aXBsaWVyOwotCi0gICAgci0+bGF5ZXIoKS0+c2Nyb2xs
VG9PZmZzZXQoeCwgeSwgdHJ1ZSwgdHJ1ZSk7Ci19Ci0jZW5kaWYKLQotUGFzc1JlZlB0cjxLSlM6
OkJpbmRpbmdzOjpJbnN0YW5jZT4gRnJhbWU6OmNyZWF0ZVNjcmlwdEluc3RhbmNlRm9yV2lkZ2V0
KFdlYkNvcmU6OldpZGdldCogd2lkZ2V0KQotewotICAgIGlmICh3aWRnZXQtPmlzRnJhbWVWaWV3
KCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmICh3aWRnZXQtPmlzTlBBUElQbHVnaW4oKSkK
LSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFBsdWdpblZpZXcqPih3aWRnZXQpLT5iaW5kaW5n
SW5zdGFuY2UoKTsKLQotICAgIFFXaWRnZXQqIG5hdGl2ZVdpZGdldCA9IHdpZGdldC0+bmF0aXZl
V2lkZ2V0KCk7Ci0gICAgaWYgKCFuYXRpdmVXaWRnZXQpCi0gICAgICAgIHJldHVybiAwOwotICAg
IHJldHVybiBLSlM6OkJpbmRpbmdzOjpRdEluc3RhbmNlOjpjcmVhdGUobmF0aXZlV2lkZ2V0LCBi
aW5kaW5nUm9vdE9iamVjdCgpKTsKLX0KLQotdm9pZCBGcmFtZTo6Y2xlYXJQbGF0Zm9ybVNjcmlw
dE9iamVjdHMoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRnJhbWU6OmRp
c2Nvbm5lY3RQbGF0Zm9ybVNjcmlwdE9iamVjdHMoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KIERyYWdJbWFnZVJlZiBGcmFtZTo6ZHJhZ0ltYWdlRm9yU2VsZWN0aW9uKCkgCiB7CiAg
ICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2Uvd2luL0ZyYW1lV2luLmNwcCBi
L1dlYkNvcmUvcGFnZS93aW4vRnJhbWVXaW4uY3BwCmluZGV4IDk1NTE2ODAuLmIyMDQxZTggMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS93aW4vRnJhbWVXaW4uY3BwCisrKyBiL1dlYkNvcmUvcGFn
ZS93aW4vRnJhbWVXaW4uY3BwCkBAIC0yNyw2NCArMjcsMjAgQEAKICNpbmNsdWRlICJydW50aW1l
LmgiCiAjaW5jbHVkZSAiRnJhbWVXaW4uaCIKIAotI2luY2x1ZGUgPHdpbnNvY2syLmg+Ci0jaW5j
bHVkZSA8d2luZG93cy5oPgotCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVk
ZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJFZGl0b3JD
bGllbnQuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZFJl
cXVlc3QuaCIKICNpbmNsdWRlICJGcmFtZVByaXZhdGUuaCIKLSNpbmNsdWRlICJGcmFtZVZpZXcu
aCIKLSNpbmNsdWRlICJIVE1MSUZyYW1lRWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxOYW1lcy5o
IgotI2luY2x1ZGUgIkhUTUxUYWJsZUNlbGxFbGVtZW50LmgiCi0jaW5jbHVkZSAiSlNET01XaW5k
b3cuaCIKLSNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCi0jaW5jbHVkZSAiTlBfanNvYmplY3Qu
aCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNs
dWRlICJQbHVnaW5EYXRhYmFzZS5oIgotI2luY2x1ZGUgIlBsdWdpblZpZXcuaCIKLSNpbmNsdWRl
ICJSZWd1bGFyRXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIlJlbmRlckZyYW1lLmgiCi0jaW5jbHVk
ZSAiUmVuZGVyVGFibGVDZWxsLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgotI2luY2x1ZGUg
IlJlc291cmNlSGFuZGxlLmgiCi0jaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgotI2lu
Y2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgot
I2luY2x1ZGUgInJ1bnRpbWVfcm9vdC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgog
I2luY2x1ZGUgIlNldHRpbmdzLmgiCiAKIHVzaW5nIHN0ZDo6bWluOwotdXNpbmcgbmFtZXNwYWNl
IEtKUzo6QmluZGluZ3M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNl
IEhUTUxOYW1lczsKIAotdm9pZCBGcmFtZTo6Y2xlYXJQbGF0Zm9ybVNjcmlwdE9iamVjdHMoKQot
ewotfQotCi12b2lkIEZyYW1lOjpkaXNjb25uZWN0UGxhdGZvcm1TY3JpcHRPYmplY3RzKCkKLXsK
LX0KLQotUGFzc1JlZlB0cjxLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZT4gRnJhbWU6OmNyZWF0ZVNj
cmlwdEluc3RhbmNlRm9yV2lkZ2V0KFdpZGdldCogd2lkZ2V0KQotewotICAgIC8vIEZJWE1FOiBJ
ZGVhbGx5IHdlJ2QgaGF2ZSBhbiBpc1BsdWdpblZpZXcoKSBoZXJlIGJ1dCB3ZSBjYW4ndCBhZGQg
dGhhdCB0byB0aGUgb3BlbiBzb3VyY2UgdHJlZSByaWdodCBub3cuCi0gICAgaWYgKHdpZGdldC0+
aXNGcmFtZVZpZXcoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8UGx1Z2luVmlldyo+KHdpZGdldCktPmJpbmRpbmdJbnN0YW5jZSgpOwotfQotCi12b2lkIGNv
bXB1dGVQYWdlUmVjdHNGb3JGcmFtZShGcmFtZSogZnJhbWUsIGNvbnN0IEludFJlY3QmIHByaW50
UmVjdCwgZmxvYXQgaGVhZGVySGVpZ2h0LCBmbG9hdCBmb290ZXJIZWlnaHQsIGZsb2F0IHVzZXJT
Y2FsZUZhY3RvcixWZWN0b3I8SW50UmVjdD4mIHBhZ2VzLCBpbnQmIG91dFBhZ2VIZWlnaHQpCit2
b2lkIGNvbXB1dGVQYWdlUmVjdHNGb3JGcmFtZShGcmFtZSogZnJhbWUsIGNvbnN0IEludFJlY3Qm
IHByaW50UmVjdCwgZmxvYXQgaGVhZGVySGVpZ2h0LCBmbG9hdCBmb290ZXJIZWlnaHQsIGZsb2F0
IHVzZXJTY2FsZUZhY3RvciwgVmVjdG9yPEludFJlY3Q+JiBwYWdlcywgaW50JiBvdXRQYWdlSGVp
Z2h0KQogewogICAgIEFTU0VSVChmcmFtZSk7CiAKQEAgLTk0LDcgKzUwLDcgQEAgdm9pZCBjb21w
dXRlUGFnZVJlY3RzRm9yRnJhbWUoRnJhbWUqIGZyYW1lLCBjb25zdCBJbnRSZWN0JiBwcmludFJl
Y3QsIGZsb2F0IGhlYWQKICAgICBpZiAoIWZyYW1lLT5kb2N1bWVudCgpIHx8ICFmcmFtZS0+dmll
dygpIHx8ICFmcmFtZS0+ZG9jdW1lbnQoKS0+cmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuOwog
IAotICAgIFJlbmRlclZpZXcqIHJvb3QgPSBzdGF0aWNfY2FzdDxSZW5kZXJWaWV3ICo+KGZyYW1l
LT5kb2N1bWVudCgpLT5yZW5kZXJlcigpKTsKKyAgICBSZW5kZXJWaWV3KiByb290ID0gc3RhdGlj
X2Nhc3Q8UmVuZGVyVmlldyo+KGZyYW1lLT5kb2N1bWVudCgpLT5yZW5kZXJlcigpKTsKIAogICAg
IGlmICghcm9vdCkgewogICAgICAgICBMT0dfRVJST1IoImRvY3VtZW50IHRvIGJlIHByaW50ZWQg
aGFzIG5vIHJlbmRlcmVyIik7CmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL0NoYW5nZUxvZyBiL1dl
YktpdC9tYWMvQ2hhbmdlTG9nCmluZGV4IGM1ZWZmYzkuLmIzNjk4YTMgMTAwNjQ0Ci0tLSBhL1dl
YktpdC9tYWMvQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MjYgQEAKKzIwMDgtMDgtMDYgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUgbW9yZSBtZXRo
b2RzIGZyb20gRnJhbWUgaW50byBTY3JpcHRDb250cm9sbGVyCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDI5NAorCisgICAgICAgIFRoZSBXZWJLaXQg
c2lkZSBvZiB0aGlzIG1vdmUuICBDYWxscyB0byBmcmFtZSgpIGFyZSBub3cgZnJhbWUoKS0+c2Ny
aXB0KCkKKworICAgICAgICAqIFBsdWdpbnMvV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldy5tbToK
KyAgICAgICAgKC1bV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldyBnZXRWYXJpYWJsZTp2YWx1ZTpd
KToKKyAgICAgICAgKC1bV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldyBfZGVzdHJveVBsdWdpbl0p
OgorICAgICAgICAqIFBsdWdpbnMvV2ViUGx1Z2luQ29udHJvbGxlci5tbToKKyAgICAgICAgKC1b
V2ViUGx1Z2luQ29udHJvbGxlciBkZXN0cm95UGx1Z2luOl0pOgorICAgICAgICAoLVtXZWJQbHVn
aW5Db250cm9sbGVyIGRlc3Ryb3lBbGxQbHVnaW5zXSk6CisgICAgICAgICogV2ViQ29yZVN1cHBv
cnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW06CisgICAgICAgICogV2ViVmlldy9XZWJGcmFtZS5t
bToKKyAgICAgICAgKC1bV2ViRnJhbWUgd2luZG93T2JqZWN0XSk6CisgICAgICAgICogV2ViVmll
dy9XZWJTY3JpcHREZWJ1Z2dlci5tbToKKyAgICAgICAgKFdlYlNjcmlwdERlYnVnZ2VyOjpjYWxs
RXZlbnQpOgorICAgICAgICAqIFdlYlZpZXcvV2ViVmlldy5tbToKKyAgICAgICAgKC1bV2ViVmll
dyB3aW5kb3dTY3JpcHRPYmplY3RdKToKKwogMjAwOC0wOC0wNiAgRGFuIEJlcm5zdGVpbiAgPG1p
dHpAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE1hcmsgUm93ZS4KZGlmZiAtLWdp
dCBhL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3Lm1tIGIvV2Vi
S2l0L21hYy9QbHVnaW5zL1dlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcubW0KaW5kZXggMmI0NWUy
Yi4uYWZiNzZhNCAxMDA2NDQKLS0tIGEvV2ViS2l0L21hYy9QbHVnaW5zL1dlYkJhc2VOZXRzY2Fw
ZVBsdWdpblZpZXcubW0KKysrIGIvV2ViS2l0L21hYy9QbHVnaW5zL1dlYkJhc2VOZXRzY2FwZVBs
dWdpblZpZXcubW0KQEAgLTYxLDYgKzYxLDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvRnJhbWVUcmVl
Lmg+IAogI2ltcG9ydCA8V2ViQ29yZS9QYWdlLmg+IAogI2ltcG9ydCA8V2ViQ29yZS9QbHVnaW5N
YWluVGhyZWFkU2NoZWR1bGVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL1NjcmlwdENvbnRyb2xsZXIu
aD4KICNpbXBvcnQgPFdlYkNvcmUvU29mdExpbmtpbmcuaD4gCiAjaW1wb3J0IDxXZWJDb3JlL1dl
YkNvcmVPYmpDRXh0cmFzLmg+CiAjaW1wb3J0IDxXZWJLaXQvbnB0ZXh0aW5wdXQuaD4KQEAgLTI1
NDgsNyArMjU0OSw3IEBAIHN0YXRpYyBOUEJyb3dzZXJUZXh0SW5wdXRGdW5jcyAqYnJvd3NlclRl
eHRJbnB1dEZ1bmNzKCkKICAgICAgICAgY2FzZSBOUE5WV2luZG93TlBPYmplY3Q6CiAgICAgICAg
IHsKICAgICAgICAgICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoW3NlbGYgd2ViRnJhbWVdKTsKLSAg
ICAgICAgICAgIE5QT2JqZWN0KiB3aW5kb3dTY3JpcHRPYmplY3QgPSBmcmFtZSA/IGZyYW1lLT53
aW5kb3dTY3JpcHROUE9iamVjdCgpIDogMDsKKyAgICAgICAgICAgIE5QT2JqZWN0KiB3aW5kb3dT
Y3JpcHRPYmplY3QgPSBmcmFtZSA/IGZyYW1lLT5zY3JpcHQoKS0+d2luZG93U2NyaXB0TlBPYmpl
Y3QoKSA6IDA7CiAKICAgICAgICAgICAgIC8vIFJldHVybiB2YWx1ZSBpcyBleHBlY3RlZCB0byBi
ZSByZXRhaW5lZCwgYXMgZGVzY3JpYmVkIGhlcmU6IDxodHRwOi8vd3d3Lm1vemlsbGEub3JnL3By
b2plY3RzL3BsdWdpbnMvbnBydW50aW1lLmh0bWwjYnJvd3NlcmFjY2Vzcz4KICAgICAgICAgICAg
IGlmICh3aW5kb3dTY3JpcHRPYmplY3QpCkBAIC0yODQ2LDcgKzI4NDcsNyBAQCBzdGF0aWMgTlBC
cm93c2VyVGV4dElucHV0RnVuY3MgKmJyb3dzZXJUZXh0SW5wdXRGdW5jcygpCiAgICAgTE9HKFBs
dWdpbnMsICJOUFBfRGVzdHJveTogJWQiLCBucEVycik7CiAgICAgCiAgICAgaWYgKEZyYW1lKiBm
cmFtZSA9IGNvcmUoW3NlbGYgd2ViRnJhbWVdKSkKLSAgICAgICAgZnJhbWUtPmNsZWFudXBTY3Jp
cHRPYmplY3RzRm9yUGx1Z2luKHNlbGYpOworICAgICAgICBmcmFtZS0+c2NyaXB0KCktPmNsZWFu
dXBTY3JpcHRPYmplY3RzRm9yUGx1Z2luKHNlbGYpOwogICAgICAgICAKICAgICBmcmVlKHBsdWdp
bik7CiAgICAgcGx1Z2luID0gTlVMTDsKZGlmZiAtLWdpdCBhL1dlYktpdC9tYWMvUGx1Z2lucy9X
ZWJQbHVnaW5Db250cm9sbGVyLm1tIGIvV2ViS2l0L21hYy9QbHVnaW5zL1dlYlBsdWdpbkNvbnRy
b2xsZXIubW0KaW5kZXggYzZiNzAxNS4uMGE4NmE1YiAxMDA2NDQKLS0tIGEvV2ViS2l0L21hYy9Q
bHVnaW5zL1dlYlBsdWdpbkNvbnRyb2xsZXIubW0KKysrIGIvV2ViS2l0L21hYy9QbHVnaW5zL1dl
YlBsdWdpbkNvbnRyb2xsZXIubW0KQEAgLTM1LDYgKzM1LDcgQEAKICNpbXBvcnQgPFdlYkNvcmUv
UmVzb3VyY2VSZXF1ZXN0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtU3RyaW5nLmg+CiAj
aW1wb3J0IDxXZWJDb3JlL0RvY3VtZW50TG9hZGVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL1Njcmlw
dENvbnRyb2xsZXIuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJEYXRhU291cmNlSW50ZXJuYWwuaD4K
ICNpbXBvcnQgPFdlYktpdC9XZWJGcmFtZUludGVybmFsLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2Vi
RnJhbWVWaWV3Lmg+CkBAIC0yMDksNyArMjEwLDcgQEAgc3RhdGljIE5TTXV0YWJsZVNldCAqcGx1
Z2luVmlld3MgPSBuaWw7CiAgICAgICAgICAgICBbdmlldyBwbHVnaW5EZXN0cm95XTsKICAgICAg
ICAgCiAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBjb3JlKFtzZWxmIHdlYkZyYW1lXSkpCi0g
ICAgICAgICAgICBmcmFtZS0+Y2xlYW51cFNjcmlwdE9iamVjdHNGb3JQbHVnaW4oc2VsZik7Cisg
ICAgICAgICAgICBmcmFtZS0+c2NyaXB0KCktPmNsZWFudXBTY3JpcHRPYmplY3RzRm9yUGx1Z2lu
KHNlbGYpOwogICAgICAgICAKICAgICAgICAgW3BsdWdpblZpZXdzIHJlbW92ZU9iamVjdDp2aWV3
XTsKICAgICAgICAgW1tfZG9jdW1lbnRWaWV3IF93ZWJWaWV3XSByZW1vdmVQbHVnaW5JbnN0YW5j
ZVZpZXc6dmlld107CkBAIC0yNTYsNyArMjU3LDcgQEAgc3RhdGljIHZvaWQgY2FuY2VsT3V0c3Rh
bmRpbmdDaGVjayhjb25zdCB2b2lkICppdGVtLCB2b2lkICpjb250ZXh0KQogICAgICAgICAgICAg
W2FWaWV3IHBsdWdpbkRlc3Ryb3ldOwogICAgICAgICAKICAgICAgICAgaWYgKEZyYW1lKiBmcmFt
ZSA9IGNvcmUoW3NlbGYgd2ViRnJhbWVdKSkKLSAgICAgICAgICAgIGZyYW1lLT5jbGVhbnVwU2Ny
aXB0T2JqZWN0c0ZvclBsdWdpbihzZWxmKTsKKyAgICAgICAgICAgIGZyYW1lLT5zY3JpcHQoKS0+
Y2xlYW51cFNjcmlwdE9iamVjdHNGb3JQbHVnaW4oc2VsZik7CiAgICAgICAgIAogICAgICAgICBb
cGx1Z2luVmlld3MgcmVtb3ZlT2JqZWN0OmFWaWV3XTsKICAgICAgICAgW1tfZG9jdW1lbnRWaWV3
IF93ZWJWaWV3XSByZW1vdmVQbHVnaW5JbnN0YW5jZVZpZXc6YVZpZXddOwpkaWZmIC0tZ2l0IGEv
V2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5tbSBiL1dlYktp
dC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW0KaW5kZXggNjUxZjAw
Ni4uZTIxYzEwNCAxMDA2NDQKLS0tIGEvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFt
ZUxvYWRlckNsaWVudC5tbQorKysgYi9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1l
TG9hZGVyQ2xpZW50Lm1tCkBAIC05OCw2ICs5OCw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL1Jlc291
cmNlSGFuZGxlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Jlc291cmNlTG9hZGVyLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL1Jlc291cmNlUmVxdWVzdC5oPgorI2ltcG9ydCA8V2ViQ29yZS9TY3JpcHRDb250
cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9XZWJDb3JlT2JqQ0V4dHJhcy5oPgogI2ltcG9ydCA8V2ViQ29yZS9XaWRnZXQuaD4KQEAg
LTE0NDYsMTQgKzE0NDcsMTUgQEAgU3RyaW5nIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpvdmVycmlk
ZU1lZGlhVHlwZSgpIGNvbnN0CiB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojp3aW5kb3dPYmpl
Y3RDbGVhcmVkKCkKIHsKICAgICBGcmFtZSAqZnJhbWUgPSBjb3JlKG1fd2ViRnJhbWUuZ2V0KCkp
OworICAgIFNjcmlwdENvbnRyb2xsZXIgKnNjcmlwdCA9IGZyYW1lLT5zY3JpcHQoKTsKICAgICBX
ZWJWaWV3ICp3ZWJWaWV3ID0gZ2V0V2ViVmlldyhtX3dlYkZyYW1lLmdldCgpKTsKICAgICBXZWJG
cmFtZUxvYWREZWxlZ2F0ZUltcGxlbWVudGF0aW9uQ2FjaGUqIGltcGxlbWVudGF0aW9ucyA9IFdl
YlZpZXdHZXRGcmFtZUxvYWREZWxlZ2F0ZUltcGxlbWVudGF0aW9ucyh3ZWJWaWV3KTsKICAgICBp
ZiAoaW1wbGVtZW50YXRpb25zLT5kaWRDbGVhcldpbmRvd09iamVjdEZvckZyYW1lRnVuYykgewog
ICAgICAgICBDYWxsRnJhbWVMb2FkRGVsZWdhdGUoaW1wbGVtZW50YXRpb25zLT5kaWRDbGVhcldp
bmRvd09iamVjdEZvckZyYW1lRnVuYywgd2ViVmlldywgQHNlbGVjdG9yKHdlYlZpZXc6ZGlkQ2xl
YXJXaW5kb3dPYmplY3Q6Zm9yRnJhbWU6KSwKLSAgICAgICAgICAgIGZyYW1lLT53aW5kb3dTY3Jp
cHRPYmplY3QoKSwgbV93ZWJGcmFtZS5nZXQoKSk7CisgICAgICAgICAgICBzY3JpcHQtPndpbmRv
d1NjcmlwdE9iamVjdCgpLCBtX3dlYkZyYW1lLmdldCgpKTsKICAgICB9IGVsc2UgaWYgKGltcGxl
bWVudGF0aW9ucy0+d2luZG93U2NyaXB0T2JqZWN0QXZhaWxhYmxlRnVuYykgewogICAgICAgICBD
YWxsRnJhbWVMb2FkRGVsZWdhdGUoaW1wbGVtZW50YXRpb25zLT53aW5kb3dTY3JpcHRPYmplY3RB
dmFpbGFibGVGdW5jLCB3ZWJWaWV3LCBAc2VsZWN0b3Iod2ViVmlldzp3aW5kb3dTY3JpcHRPYmpl
Y3RBdmFpbGFibGU6KSwKLSAgICAgICAgICAgIGZyYW1lLT53aW5kb3dTY3JpcHRPYmplY3QoKSk7
CisgICAgICAgICAgICBzY3JpcHQtPndpbmRvd1NjcmlwdE9iamVjdCgpKTsKICAgICB9CiAKICAg
ICBpZiAoW3dlYlZpZXcgc2NyaXB0RGVidWdEZWxlZ2F0ZV0pIHsKZGlmZiAtLWdpdCBhL1dlYktp
dC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbSBiL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5t
bQppbmRleCA0ZjVhNjRmLi40MmE3NDkxIDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL1dlYlZpZXcv
V2ViRnJhbWUubW0KKysrIGIvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCkBAIC0xMzA4
LDcgKzEzMDgsNyBAQCBzdGF0aWMgTlNVUkwgKmNyZWF0ZVVuaXF1ZVdlYkRhdGFVUkwoKQogICAg
IEZyYW1lKiBjb3JlRnJhbWUgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lOwogICAgIGlmICghY29yZUZy
YW1lKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gY29yZUZyYW1lLT53aW5kb3dTY3Jp
cHRPYmplY3QoKTsKKyAgICByZXR1cm4gY29yZUZyYW1lLT5zY3JpcHQoKS0+d2luZG93U2NyaXB0
T2JqZWN0KCk7CiB9CiAKIC0gKEpTR2xvYmFsQ29udGV4dFJlZilnbG9iYWxDb250ZXh0CmRpZmYg
LS1naXQgYS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViU2NyaXB0RGVidWdnZXIubW0gYi9XZWJLaXQv
bWFjL1dlYlZpZXcvV2ViU2NyaXB0RGVidWdnZXIubW0KaW5kZXggYzkxNTcxMy4uM2RmOTVmMyAx
MDA2NDQKLS0tIGEvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVnZ2VyLm1tCisrKyBi
L1dlYktpdC9tYWMvV2ViVmlldy9XZWJTY3JpcHREZWJ1Z2dlci5tbQpAQCAtMjYsMTcgKzI2LDE4
IEBACiAgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpbmNsdWRlICJXZWJTY3JpcHREZWJ1Z2dlci5oIgot
Ci0jaW5jbHVkZSAiV2ViRnJhbWVJbnRlcm5hbC5oIgotI2luY2x1ZGUgIldlYlZpZXdJbnRlcm5h
bC5oIgotI2luY2x1ZGUgIldlYlNjcmlwdERlYnVnRGVsZWdhdGUuaCIKLSNpbmNsdWRlIDxranMv
SlNHbG9iYWxPYmplY3QuaD4KLSNpbmNsdWRlIDxranMvRGVidWdnZXJDYWxsRnJhbWUuaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL0RPTVdpbmRvdy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4K
LSNpbmNsdWRlIDxXZWJDb3JlL0pTRE9NV2luZG93Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9LVVJM
Lmg+CisjaW1wb3J0ICJXZWJTY3JpcHREZWJ1Z2dlci5oIgorCisjaW1wb3J0ICJXZWJGcmFtZUlu
dGVybmFsLmgiCisjaW1wb3J0ICJXZWJWaWV3SW50ZXJuYWwuaCIKKyNpbXBvcnQgIldlYlNjcmlw
dERlYnVnRGVsZWdhdGUuaCIKKyNpbXBvcnQgPGtqcy9KU0dsb2JhbE9iamVjdC5oPgorI2ltcG9y
dCA8a2pzL0RlYnVnZ2VyQ2FsbEZyYW1lLmg+CisjaW1wb3J0IDxXZWJDb3JlL0RPTVdpbmRvdy5o
PgorI2ltcG9ydCA8V2ViQ29yZS9GcmFtZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9KU0RPTVdpbmRv
dy5oPgorI2ltcG9ydCA8V2ViQ29yZS9LVVJMLmg+CisjaW1wb3J0IDxXZWJDb3JlL1NjcmlwdENv
bnRyb2xsZXIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEtKUzsKIHVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwpAQCAtMTIwLDcgKzEyMSw3IEBAIHZvaWQgV2ViU2NyaXB0RGVidWdnZXI6OmNhbGxFdmVu
dChjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYgZGVidWdnZXJDYWxsRnJhbWUsIGluCiAKICAgICBX
ZWJGcmFtZSAqd2ViRnJhbWUgPSB0b1dlYkZyYW1lKGRlYnVnZ2VyQ2FsbEZyYW1lLmR5bmFtaWNH
bG9iYWxPYmplY3QoKSk7CiAKLSAgICBtX3RvcENhbGxGcmFtZS5hZG9wdE5TKFtbV2ViU2NyaXB0
Q2FsbEZyYW1lIGFsbG9jXSBfaW5pdFdpdGhHbG9iYWxPYmplY3Q6Y29yZSh3ZWJGcmFtZSktPndp
bmRvd1NjcmlwdE9iamVjdCgpIGNhbGxlcjptX3RvcENhbGxGcmFtZS5nZXQoKSBkZWJ1Z2dlckNh
bGxGcmFtZTpkZWJ1Z2dlckNhbGxGcmFtZV0pOworICAgIG1fdG9wQ2FsbEZyYW1lLmFkb3B0TlMo
W1tXZWJTY3JpcHRDYWxsRnJhbWUgYWxsb2NdIF9pbml0V2l0aEdsb2JhbE9iamVjdDpjb3JlKHdl
YkZyYW1lKS0+c2NyaXB0KCktPndpbmRvd1NjcmlwdE9iamVjdCgpIGNhbGxlcjptX3RvcENhbGxG
cmFtZS5nZXQoKSBkZWJ1Z2dlckNhbGxGcmFtZTpkZWJ1Z2dlckNhbGxGcmFtZV0pOwogCiAgICAg
V2ViVmlldyAqd2ViVmlldyA9IFt3ZWJGcmFtZSB3ZWJWaWV3XTsKICAgICBbW3dlYlZpZXcgX3Nj
cmlwdERlYnVnRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6d2ViVmlldyBkaWRFbnRlckNhbGxG
cmFtZTptX3RvcENhbGxGcmFtZS5nZXQoKSBzb3VyY2VJZDpzb3VyY2VJRCBsaW5lOmxpbmVOdW1i
ZXIgZm9yV2ViRnJhbWU6d2ViRnJhbWVdOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L21hYy9XZWJWaWV3
L1dlYlZpZXcubW0gYi9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQppbmRleCAwNTZjNjI4
Li5mM2I1MWU0IDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQorKysg
Yi9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQpAQCAtMjUxNSw3ICsyNTE1LDcgQEAgc3Rh
dGljIHZvaWQgV2ViS2l0SW5pdGlhbGl6ZUFwcGxpY2F0aW9uQ2FjaGVQYXRoSWZOZWNlc3Nhcnko
KQogICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIG1haW5GcmFtZV0pOwogICAgIGlm
ICghY29yZUZyYW1lKQogICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiBjb3JlRnJhbWUt
PndpbmRvd1NjcmlwdE9iamVjdCgpOworICAgIHJldHVybiBjb3JlRnJhbWUtPnNjcmlwdCgpLT53
aW5kb3dTY3JpcHRPYmplY3QoKTsKIH0KIAogLy8gR2V0IHRoZSBhcHByb3ByaWF0ZSB1c2VyLWFn
ZW50IHN0cmluZyBmb3IgYSBwYXJ0aWN1bGFyIFVSTC4K
</data>
<flag name="review"
          id="10043"
          type_id="1"
          status="+"
          setter="zwarich"
    />
          </attachment>
      

    </bug>

</bugzilla>