<?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>124296</bug_id>
          
          <creation_ts>2013-11-13 11:22:47 -0800</creation_ts>
          <short_desc>Web Inspector: Generate Individual InspectorBackendDispatchers, add base InspectorBackendDispatcher</short_desc>
          <delta_ts>2013-11-13 18:38:04 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Joseph Pecoraro">joepeck</reporter>
          <assigned_to name="Joseph Pecoraro">joepeck</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>graouts</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>joepeck</cc>
    
    <cc>rakuco</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>950258</commentid>
    <comment_count>0</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2013-11-13 11:22:47 -0800</bug_when>
    <thetext>With some of the domains moving down into JavaScriptCore, the generated InspectorBackendDispatchers.h cannot know about all domains / methods in advance. Instead make each domain supplemental, and register individual dispatchers with the base dispatcher based on their domain name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950259</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2013-11-13 11:23:03 -0800</bug_when>
    <thetext>&lt;rdar://problem/15461030&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950278</commentid>
    <comment_count>2</comment_count>
      <attachid>216831</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2013-11-13 11:58:00 -0800</bug_when>
    <thetext>Created attachment 216831
[PATCH] Proposed Fix

Bots probably won&apos;t apply this, so I&apos;ll have to check again later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950279</commentid>
    <comment_count>3</comment_count>
      <attachid>216832</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2013-11-13 11:58:31 -0800</bug_when>
    <thetext>Created attachment 216832
[BEFORE] InspectorBackendDispatchers.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950280</commentid>
    <comment_count>4</comment_count>
      <attachid>216833</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2013-11-13 11:58:47 -0800</bug_when>
    <thetext>Created attachment 216833
[BEFORE] InspectorBackendDispatchers.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950281</commentid>
    <comment_count>5</comment_count>
      <attachid>216834</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2013-11-13 11:59:06 -0800</bug_when>
    <thetext>Created attachment 216834
[AFTER] InspectorBackendDispatchers.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950282</commentid>
    <comment_count>6</comment_count>
      <attachid>216835</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2013-11-13 11:59:19 -0800</bug_when>
    <thetext>Created attachment 216835
[AFTER] InspectorBackendDispatchers.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950468</commentid>
    <comment_count>7</comment_count>
      <attachid>216884</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2013-11-13 18:07:14 -0800</bug_when>
    <thetext>Created attachment 216884
[BOTS] For Bots</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950469</commentid>
    <comment_count>8</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2013-11-13 18:08:45 -0800</bug_when>
    <thetext>In the most recent patch I added a small snippet of code in CodeGeneratorInspector.py to remove the old generated InspectorBackendDispatcher.{h,cpp}. This is to prevent build breaks on bots and developers machines if a compiler accidentally includes the wrong InspectorBackendDispatcher.{h,cpp} now that we have files of that name in WebCore/inspector.

This code was reviewed by Timothy Hatcher.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950470</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-11-13 18:09:32 -0800</bug_when>
    <thetext>Attachment 216884 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/CMakeLists.txt&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/GNUmakefile.list.am&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebCore/inspector/CodeGeneratorInspector.py&apos;, u&apos;Source/WebCore/inspector/CodeGeneratorInspectorStrings.py&apos;, u&apos;Source/WebCore/inspector/InspectorAgent.cpp&apos;, u&apos;Source/WebCore/inspector/InspectorAgent.h&apos;, u&apos;Source/WebCore/inspector/InspectorAllInOne.cpp&apos;, u&apos;Source/WebCore/inspector/InspectorApplicationCacheAgent.cpp&apos;, u&apos;Source/WebCore/inspector/InspectorApplicationCacheAgent.h&apos;, u&apos;Source/WebCore/inspector/InspectorBackendDispatcher.cpp&apos;, u&apos;Source/WebCore/inspector/InspectorBackendDispatcher.h&apos;, u&apos;Source/WebCore/inspector/InspectorCSSAgent.cpp&apos;, u&apos;Source/WebCore/inspector/InspectorCSSAgent.h&apos;, u&apos;Source/WebCore/inspector/InspectorCanvasAgent.cpp&apos;, u&apos;Source/WebCore/inspector/InspectorCanvasAgent.h&apos;, u&apos;Source/WebCore/inspector/InspectorConsoleAgent.cpp&apos;, u&apos;Source/WebCore/inspector/InspectorConsoleAgent.h&apos;, u&apos;Source/WebCore/inspector/InspectorDOMAgent.cpp&apos;, u&apos;Source/WebCore/inspector/InspectorDOMAgent.h&apos;, u&apos;Source/WebCore/inspector/InspectorDOMDebuggerAgent.cpp&apos;, u&apos;Source/WebCore/inspector/InspectorDOMDebuggerAgent.h&apos;, u&apos;Source/WebCore/inspector/InspectorDOMStorageAgent.cpp&apos;, u&apos;Source/WebCore/inspector/InspectorDOMStorageAgent.h&apos;, u&apos;Source/WebCore/inspector/InspectorDatabaseAgent.cpp&apos;, u&apos;Source/WebCore/inspector/InspectorDatabaseAgent.h&apos;, u&apos;Source/WebCore/inspector/InspectorDebuggerAgent.cpp&apos;, u&apos;Source/WebCore/inspector/InspectorDebuggerAgent.h&apos;, u&apos;Source/WebCore/inspector/InspectorHeapProfilerAgent.cpp&apos;, u&apos;Source/WebCore/inspector/InspectorHeapProfilerAgent.h&apos;, u&apos;Source/WebCore/inspector/InspectorIndexedDBAgent.cpp&apos;, u&apos;Source/WebCore/inspector/InspectorIndexedDBAgent.h&apos;, u&apos;Source/WebCore/inspector/InspectorInputAgent.cpp&apos;, u&apos;Source/WebCore/inspector/InspectorInputAgent.h&apos;, u&apos;Source/WebCore/inspector/InspectorLayerTreeAgent.cpp&apos;, u&apos;Source/WebCore/inspector/InspectorLayerTreeAgent.h&apos;, u&apos;Source/WebCore/inspector/InspectorMemoryAgent.cpp&apos;, u&apos;Source/WebCore/inspector/InspectorMemoryAgent.h&apos;, u&apos;Source/WebCore/inspector/InspectorPageAgent.cpp&apos;, u&apos;Source/WebCore/inspector/InspectorPageAgent.h&apos;, u&apos;Source/WebCore/inspector/InspectorProfilerAgent.cpp&apos;, u&apos;Source/WebCore/inspector/InspectorProfilerAgent.h&apos;, u&apos;Source/WebCore/inspector/InspectorResourceAgent.cpp&apos;, u&apos;Source/WebCore/inspector/InspectorResourceAgent.h&apos;, u&apos;Source/WebCore/inspector/InspectorRuntimeAgent.h&apos;, u&apos;Source/WebCore/inspector/InspectorTimelineAgent.cpp&apos;, u&apos;Source/WebCore/inspector/InspectorTimelineAgent.h&apos;, u&apos;Source/WebCore/inspector/InspectorWorkerAgent.cpp&apos;, u&apos;Source/WebCore/inspector/InspectorWorkerAgent.h&apos;, u&apos;Source/WebCore/inspector/PageRuntimeAgent.cpp&apos;, u&apos;Source/WebCore/inspector/PageRuntimeAgent.h&apos;, u&apos;Source/WebCore/inspector/WorkerRuntimeAgent.cpp&apos;, u&apos;Source/WebCore/inspector/WorkerRuntimeAgent.h&apos;]&quot; exit_code: 1
Source/WebCore/inspector/CodeGeneratorInspector.py:1997:  trailing whitespace  [pep8/W291] [5]
Source/WebCore/inspector/InspectorBackendDispatcher.cpp:28:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Source/WebCore/inspector/InspectorBackendDispatcher.h:52:  The parameter name &quot;inspectorFrontendChannel&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/inspector/InspectorBackendDispatcher.h:57:  The parameter name &quot;backendDispatcher&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/inspector/InspectorBackendDispatcher.h:85:  The parameter name &quot;dispatcher&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/inspector/InspectorBackendDispatcher.h:94:  The parameter name &quot;object&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/inspector/InspectorBackendDispatcher.h:95:  The parameter name &quot;object&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/inspector/InspectorBackendDispatcher.h:96:  The parameter name &quot;object&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/inspector/InspectorBackendDispatcher.h:97:  The parameter name &quot;object&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/inspector/InspectorBackendDispatcher.h:98:  The parameter name &quot;object&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/inspector/InspectorBackendDispatcher.h:99:  The parameter name &quot;object&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/inspector/InspectorBackendDispatcher.h:105:  The parameter name &quot;object&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/inspector/InspectorBackendDispatcher.h:105:  The parameter name &quot;defaultValue&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 13 in 54 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950472</commentid>
    <comment_count>10</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2013-11-13 18:16:41 -0800</bug_when>
    <thetext>&gt; Source/WebCore/inspector/CodeGeneratorInspector.py:1997:  trailing whitespace  [pep8/W291] [5]

Addressed.

&gt; Source/WebCore/inspector/InspectorBackendDispatcher.cpp:28:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]

Good catch style bot! This may have been causing some compile time issues I was seeing. Addressed.

&gt; Source/WebCore/inspector/InspectorBackendDispatcher.h:52:  The parameter name &quot;inspectorFrontendChannel&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
&gt; Source/WebCore/inspector/InspectorBackendDispatcher.h:57:  The parameter name &quot;backendDispatcher&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
&gt; Source/WebCore/inspector/InspectorBackendDispatcher.h:85:  The parameter name &quot;dispatcher&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
&gt; Source/WebCore/inspector/InspectorBackendDispatcher.h:94:  The parameter name &quot;object&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
&gt; Source/WebCore/inspector/InspectorBackendDispatcher.h:95:  The parameter name &quot;object&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
&gt; Source/WebCore/inspector/InspectorBackendDispatcher.h:96:  The parameter name &quot;object&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
&gt; Source/WebCore/inspector/InspectorBackendDispatcher.h:97:  The parameter name &quot;object&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
&gt; Source/WebCore/inspector/InspectorBackendDispatcher.h:98:  The parameter name &quot;object&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
&gt; Source/WebCore/inspector/InspectorBackendDispatcher.h:99:  The parameter name &quot;object&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
&gt; Source/WebCore/inspector/InspectorBackendDispatcher.h:105:  The parameter name &quot;object&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
&gt; Source/WebCore/inspector/InspectorBackendDispatcher.h:105:  The parameter name &quot;defaultValue&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]

Addressed all but the last of these.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950473</commentid>
    <comment_count>11</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2013-11-13 18:23:23 -0800</bug_when>
    <thetext>Committed &lt;http://trac.webkit.org/changeset/159268&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950477</commentid>
    <comment_count>12</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2013-11-13 18:38:04 -0800</bug_when>
    <thetext>Attempted Windows Build Fix:
&lt;http://trac.webkit.org/changeset/159270&gt;

Forgot to add the file to Windows vcxproj.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>216831</attachid>
            <date>2013-11-13 11:58:00 -0800</date>
            <delta_ts>2013-11-13 13:23:55 -0800</delta_ts>
            <desc>[PATCH] Proposed Fix</desc>
            <filename>backend.patch</filename>
            <type>text/plain</type>
            <size>118898</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggMzAxYTQyZS4uZmYzMGMwZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTE1NzAsNiArMTU3MCw3IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBpbnNw
ZWN0b3IvSW5zcGVjdG9yQWdlbnQuY3BwCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckFnZW50UmVn
aXN0cnkuY3BwCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5j
cHAKKyAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3BwCiAgICAgaW5z
cGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JDYW52
YXNBZ2VudC5jcHAKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQ2xpZW50LmNwcApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmlu
ZGV4IDdmNmYwOGQuLmNlMzk0NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNjMgQEAKKzIwMTMt
MTEtMTMgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KKworICAgICAgICBX
ZWIgSW5zcGVjdG9yOiBHZW5lcmF0ZSBJbmRpdmlkdWFsIEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVycywgYWRkIGJhc2UgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNDI5NgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgdGhpcyBpcyBq
dXN0IHJlZmFjdG9yaW5nIHdpdGhvdXQgY2hhbmdpbmcgZnVuY3Rpb25hbGl0eS4KKyAgICAgICAg
U2V0IG9mIGNoYW5nZXMgbWFkZToKKworICAgICAgICAgIC0gQWRkIGluc3BlY3Rvci9JbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlci57aCxjcHB9LiBUaGlzIHVzZWQgdG8gYmUgYWxtb3N0IGVudGly
ZWx5CisgICAgICAgICAgICB3cml0dGVuIGluIHRoZSBjb2RlIGdlbmVyYXRvciBzdHJpbmdzIGZp
bGUsIGJ1dCBtYWtlIGl0IGFjdHVhbCBzb3VyY2UgZmlsZXMKKyAgICAgICAgICAgIGJlY2F1c2Ug
dGhlcmUgaXMgbm90aGluZyBjaGFuZ2luZyBpbiB0aGUgY29kZS4gQWxzbyBjbGVhbiB0aGlzIHVw
IGEgYml0LgorICAgICAgICAgIC0gR2l2ZSB0aGUgYmFzZSBkaXNwYXRjaGVyIGEgbGlzdCBvZiBk
b21haW4gZGlzcGF0Y2hlcnMgYW5kIGEgd2F5IHRvIHJlZ2lzdGVyLgorICAgICAgICAgIC0gTWFr
ZSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2ggcmVhZCB0aGUgZG9tYWluIG9m
IGluY29taW5nIHJlcXVlc3QKKyAgICAgICAgICAgIGFuZCBwYXNzIHRoZSByZXF1ZXN0IG9uIHRv
IHRoZSBkb21haW4gZGlzcGF0Y2hlci4KKyAgICAgICAgICAtIENyZWF0ZSBwZXItZG9tYWluIGRp
c3BhdGNoZXIgY2xhc3NlcyBuYW1lZCAiSW5zcGVjdG9yRm9vQmFja2VuZERpc3BhdGNoZXIiCisg
ICAgICAgICAgLSBDb252ZXJ0ICJJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Rm9vQ29tbWFu
ZEhhbmRsZXIiIGludGVyZmFjZXMgdG8KKyAgICAgICAgICAgICJJbnNwZWN0b3JGb29CYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIiIGludGVyZmFjZXMuCisgICAgICAgICAgLSBDb252ZXJ0IGFsbCAi
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpGb29Eb21haW5fZm9vTWV0aG9kIiBtZXRo
b2RzIHRvCisgICAgICAgICAgICAiSW5zcGVjdG9yRm9vQmFja2VuZERpc3BhdGNoZXI6OmZvb01l
dGhvZCIgbWV0aG9kcy4gVGhlc2UgY2FuIGFsc28gcmVtb3ZlIHRoZWlyCisgICAgICAgICAgICAi
aWYgKCFhZ2VudCkiIGNoZWNrcyBiZWNhdXNlIHRoYXQgY2FuIG5ldmVyIGJlIHRoZSBjYXNlIGFu
eW1vcmUuCisgICAgICAgICAgLSBSZW1vdmUgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBs
LCBub3cgdGhhdCB0aGVyZSBhcmUgYmFzZSBhbmQgZG9tYWluIGRpc3BhdGNoZXJzLgorICAgICAg
ICAgIC0gQWRkIEFTQ0lJTGl0ZXJhbCBpbiBtYW55IHBsYWNlcyBpbiBnZW5lcmF0ZWQgY29kZSB3
aGVyZSBwb3NzaWJsZS4KKyAgICAgICAgICAtIEluIGFsbCBhZ2VudHMsIGNyZWF0ZSBkaXNwYXRj
aGVycyBpbiBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQgYW5kIGNsZWFyCisgICAgICAgICAg
ICB0aGVtIGluIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kLCByaWdodCBhbG9uZ3NpZGUg
ZnJvbnRlbmQgZGlzcGF0Y2hlcnMuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvQ29kZUdlbmVyYXRv
ckluc3BlY3Rvci5weToKKyAgICAgICAgKERvbWFpbk5hbWVGaXhlcy5nZXRfZml4ZWRfZGF0YS5S
ZXMpOgorICAgICAgICAoVHlwZUJpbmRpbmdzLmNyZWF0ZV90eXBlX2RlY2xhcmF0aW9uXy5FbnVt
QmluZGluZy5nZXRfY29kZV9nZW5lcmF0b3IuQ29kZUdlbmVyYXRvci5nZW5lcmF0ZV90eXBlX2J1
aWxkZXIpOgorICAgICAgICAoR2VuZXJhdG9yKToKKyAgICAgICAgKEdlbmVyYXRvci5nbyk6Cisg
ICAgICAgIChHZW5lcmF0b3IucHJvY2Vzc19jb21tYW5kKToKKyAgICAgICAgKEdlbmVyYXRvci5n
ZW5lcmF0ZV9zZW5kX21ldGhvZCk6CisgICAgICAgICogaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJ
bnNwZWN0b3JTdHJpbmdzLnB5OgorICAgICAgICAodm9pZCk6CisgICAgICAgIChIYXNoTWFwKToK
KyAgICAgICAgKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyc19oKToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSW5zcGVjdG9yQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdl
bnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQpOgorICAgICAgICAqIGlu
c3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JB
bGxJbk9uZS5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2Fj
aGVBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hl
QWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNr
ZW5kKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50
Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q2Fs
bGJhY2tCYXNlOjpDYWxsYmFja0Jhc2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZTo6aXNBY3RpdmUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZTo6c2VuZEZhaWx1cmUp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNr
QmFzZTo6c2VuZElmQWN0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6OnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbik6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnNlbmRSZXNwb25zZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6cmVwb3J0UHJvdG9jb2xFcnJvcik6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0UHJvcGVy
dHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBc01ldGhvZEJyaWRnZXM6OmFzSW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkFzTWV0aG9kQnJpZGdlczo6YXNEb3VibGUpOgorICAgICAgICAoV2Vi
Q29yZTo6QXNNZXRob2RCcmlkZ2VzOjphc1N0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpBc01l
dGhvZEJyaWRnZXM6OmFzQm9vbGVhbik6CisgICAgICAgIChXZWJDb3JlOjpBc01ldGhvZEJyaWRn
ZXM6OmFzT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFzTWV0aG9kQnJpZGdlczo6YXNBcnJh
eSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0SW50
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXREb3Vi
bGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0
cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0
Qm9vbGVhbik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
Z2V0T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
OjpnZXRBcnJheSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3VwcGxlbWVudGFsQmFj
a2VuZERpc3BhdGNoZXI6Okluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVy
Ojp+SW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6On5JbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Y2xl
YXJGcm9udGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cjo6aXNBY3RpdmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yQ1NTQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6
OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JDU1NBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQpOgorICAgICAgICAqIGlu
c3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0
b3JDYW52YXNBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXNBZ2Vu
dDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckNhbnZhc0FnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZCk6CisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhc0FnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9y
L0luc3BlY3RvckNvbnNvbGVBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JD
b25zb2xlQWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZCk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5k
KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29uc29sZUFnZW50Lmg6CisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckRPTUFnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5k
KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaDoKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6d2lsbERlc3Ry
b3lGcm9udGVuZEFuZEJhY2tlbmQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01E
ZWJ1Z2dlckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VB
Z2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmRp
ZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JE
T01TdG9yYWdlQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKToKKyAgICAgICAg
KiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yRGF0YWJhc2VBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRC
YWNrZW5kKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5oOgor
ICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFj
a2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojp3aWxsRGVz
dHJveUZyb250ZW5kQW5kQmFja2VuZCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRl
YnVnZ2VyQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9ySGVhcFByb2ZpbGVy
QWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySGVhcFByb2ZpbGVyQWdlbnQ6
OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JIZWFwUHJvZmlsZXJBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQpOgorICAg
ICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JIZWFwUHJvZmlsZXJBZ2VudC5oOgorICAgICAgICAq
IGluc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JJbmRleGVkREJBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckluZGV4ZWREQkFnZW50Ojp3aWxsRGVzdHJveUZy
b250ZW5kQW5kQmFja2VuZCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckluZGV4ZWRE
QkFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvcklucHV0QWdlbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5wdXRBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRB
bmRCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvcklucHV0QWdlbnQ6OndpbGxE
ZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9y
SW5wdXRBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JMYXllclRyZWVBZ2Vu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6ZGlkQ3Jl
YXRlRnJvbnRlbmRBbmRCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckxheWVy
VHJlZUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZCk6CisgICAgICAgICogaW5z
cGVjdG9yL0luc3BlY3RvckxheWVyVHJlZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3Rvck1lbW9yeUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck1lbW9y
eUFnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yTWVtb3J5QWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yTWVtb3J5QWdlbnQuaDoKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
clBhZ2VBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpnZXRTY3JpcHRFeGVjdXRpb25T
dGF0dXMpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuaDoKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JQcm9maWxlckFnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6d2lsbERlc3Ryb3lG
cm9udGVuZEFuZEJhY2tlbmQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxl
ckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6ZGlkQ3JlYXRlRnJv
bnRlbmRBbmRCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJlc291cmNlQWdl
bnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JS
dW50aW1lQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2Vu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpkaWRDcmVh
dGVGcm9udGVuZEFuZEJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yVGltZWxp
bmVBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3Bl
Y3RvcldvcmtlckFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvcldvcmtlckFn
ZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yV29ya2VyQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKToKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yV29ya2VyQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0
b3IvUGFnZVJ1bnRpbWVBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlUnVudGltZUFn
ZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6UGFn
ZVJ1bnRpbWVBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQpOgorICAgICAgICAq
IGluc3BlY3Rvci9QYWdlUnVudGltZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL1dvcmtl
clJ1bnRpbWVBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJSdW50aW1lQWdlbnQ6
OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJS
dW50aW1lQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKToKKyAgICAgICAgKiBp
bnNwZWN0b3IvV29ya2VyUnVudGltZUFnZW50Lmg6CisKIDIwMTMtMTEtMTIgIEpvc2VwaCBQZWNv
cmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBSZW5h
bWUgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaCB0byBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcnMuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBi
L1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggNGI3ZGZlNC4uNzhlYTIy
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC0zNzY1LDYgKzM3NjUsOCBAQCB3
ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JB
Z2VudFJlZ2lzdHJ5LmggXAogCVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBcHBs
aWNhdGlvbkNhY2hlQWdlbnQuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmggXAorCVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQmFzZUFnZW50LmggXAogCVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JDYW52YXNBZ2VudC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JDYW52YXNBZ2VudC5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagppbmRleCA4N2UwNmUzOC4uODE2YjJiZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzUwOSw2ICsz
NTA5LDggQEAKIAkJQTU3MzJCMEExMzZBMTYxRDAwNUM4RDdDIC8qIERhdGVDb21wb25lbnRzLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1NzMyQjA4
MTM2QTE2MUQwMDVDOEQ3QyAvKiBEYXRlQ29tcG9uZW50cy5jcHAgKi87IH07CiAJCUE1NzMyQjBC
MTM2QTE2MUQwMDVDOEQ3QyAvKiBEYXRlQ29tcG9uZW50cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTU3MzJCMDkxMzZBMTYxRDAwNUM4RDdDIC8qIERh
dGVDb21wb25lbnRzLmggKi87IH07CiAJCUE1QUJCNzg3MTNCOTA0QkMwMEYxOTdFMyAvKiBMaW5l
QnJlYWtJdGVyYXRvclBvb2xJQ1UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE1QUJCNzg2MTNCOTA0QkMwMEYxOTdFMyAvKiBMaW5lQnJlYWtJdGVyYXRv
clBvb2xJQ1UuaCAqLzsgfTsKKwkJQTVBQzRBRUYxODMzNjk3NTAwNzExNEUwIC8qIEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE1QUM0QUVEMTgzMzY5NzUwMDcxMTRFMCAvKiBJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlci5jcHAgKi87IH07CisJCUE1QUM0QUYwMTgzMzY5NzUwMDcxMTRFMCAvKiBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTVBQzRBRUUxODMzNjk3NTAwNzExNEUwIC8qIEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJQTVBRkIzNEYxMTUxNTFBNzAwQjA0NUNCIC8qIFN0ZXBSYW5nZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNUFGQjM0RDExNTE1MUE3
MDBCMDQ1Q0IgLyogU3RlcFJhbmdlLmNwcCAqLzsgfTsKIAkJQTVBRkIzNTAxMTUxNTFBNzAwQjA0
NUNCIC8qIFN0ZXBSYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTVBRkIzNEUxMTUxNTFBNzAwQjA0NUNCIC8qIFN0ZXBSYW5nZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE1QzU2NkFCMTI3QTNB
QUQwMEU4QTNGRiAvKiBEaXNrSW1hZ2VDYWNoZUNsaWVudElPUy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTVDNTY2QUExMjdBM0FBRDAwRThBM0ZGIC8q
IERpc2tJbWFnZUNhY2hlQ2xpZW50SU9TLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTEwMjcyLDYgKzEwMjc0LDggQEAKIAkJQTU3MzJCMDgxMzZB
MTYxRDAwNUM4RDdDIC8qIERhdGVDb21wb25lbnRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IERhdGVDb21wb25lbnRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQTU3MzJCMDkxMzZBMTYxRDAwNUM4RDdDIC8qIERhdGVDb21wb25lbnRzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERhdGVDb21wb25lbnRzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1QUJCNzg2MTNCOTA0QkMwMEYxOTdFMyAvKiBMaW5lQnJl
YWtJdGVyYXRvclBvb2xJQ1UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGlu
ZUJyZWFrSXRlcmF0b3JQb29sSUNVLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE1
QUM0QUVEMTgzMzY5NzUwMDcxMTRFMCAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE1QUM0QUVFMTgzMzY5
NzUwMDcxMTRFMCAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlBNUFGQjM0RDExNTE1MUE3MDBCMDQ1Q0IgLyogU3RlcFJh
bmdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0ZXBSYW5nZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1QUZCMzRFMTE1MTUxQTcwMEIwNDVD
QiAvKiBTdGVwUmFuZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RlcFJh
bmdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1QzU2NkFBMTI3QTNBQUQwMEU4
QTNGRiAvKiBEaXNrSW1hZ2VDYWNoZUNsaWVudElPUy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBEaXNrSW1hZ2VDYWNoZUNsaWVudElPUy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTQzNTcsNiArMTQzNjEsOCBAQAogCQkJCUE1NTZDMjg3MTgzMjA2QTgwMDhD
QjcyMCAvKiBJbnNwZWN0b3JBZ2VudFJlZ2lzdHJ5LmggKi8sCiAJCQkJQjg4NUU4RDIxMUUwNkRE
MjAwOUZGQkY0IC8qIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHAgKi8sCiAJCQkJ
Qjg4NUU4RDMxMUUwNkREMjAwOUZGQkY0IC8qIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2Vu
dC5oICovLAorCQkJCUE1QUM0QUVEMTgzMzY5NzUwMDcxMTRFMCAvKiBJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlci5jcHAgKi8sCisJCQkJQTVBQzRBRUUxODMzNjk3NTAwNzExNEUwIC8qIEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyLmggKi8sCiAJCQkJN0FBNTFCNkMxNDgzQjYxNjAwQUQyNzUy
IC8qIEluc3BlY3RvckJhc2VBZ2VudC5oICovLAogCQkJCUFBRDc2NkU4MTU3RTUwMkYwMEU4NTQy
MyAvKiBJbnNwZWN0b3JDYW52YXNBZ2VudC5jcHAgKi8sCiAJCQkJQUFENzY2RTkxNTdFNTAyRjAw
RTg1NDIzIC8qIEluc3BlY3RvckNhbnZhc0FnZW50LmggKi8sCkBAIC0yMjIwNyw2ICsyMjIxMyw3
IEBACiAJCQkJQTgwRTZEMDEwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU0luaGVyaXRlZFZhbHVlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBODBFNkQwODBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTSW5pdGlh
bFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzc3MkUxMzEzMzE2MjBDMDAxRUM5Q0UgLyog
Q1NTTGluZUJveENvbnRhaW5WYWx1ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTVBQzRBRjAxODMz
Njk3NTAwNzExNEUwIC8qIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBODBFNkQwMzBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTTWVkaWFSdWxlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlGOThGRkY0NTExQTI2NzYyMDBGNTQ4RTggLyogQ1NTT01VdGlscy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTgwRTZEMDAwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1BhZ2VSdWxl
LmggaW4gSGVhZGVycyAqLywKQEAgLTI1NTYzLDYgKzI1NTcwLDcgQEAKIAkJCQk1OUI1OTc3MzEx
MDg2NTZCMDA3MTU5RTggLyogQnJpZGdlSlNDLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUY1NUIz
REFGMTI1MUYxMkQwMDNFRjI2OSAvKiBCdXR0b25JbnB1dFR5cGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMUE1NjlDRjcwRDdFMkI4MjAwN0MzOTgzIC8qIGNfY2xhc3MuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJQTVBQzRBRUYxODMzNjk3NTAwNzExNEUwIC8qIEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBNTY5Q0Y5MEQ3RTJCODIwMDdDMzk4MyAv
KiBjX2luc3RhbmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBNTY5Q0ZCMEQ3RTJCODIwMDdD
Mzk4MyAvKiBjX3J1bnRpbWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE1NjlDRkQwRDdFMkI4
MjAwN0MzOTgzIC8qIGNfdXRpbGl0eS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5IGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKaW5kZXggMmMzOTI5
Yy4uODgwZTdjOCAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5l
cmF0b3JJbnNwZWN0b3IucHkKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5l
cmF0b3JJbnNwZWN0b3IucHkKQEAgLTE5MCw3ICsxOTAsNiBAQCBjbGFzcyBEb21haW5OYW1lRml4
ZXM6CiAKICAgICAgICAgY2xhc3MgUmVzKG9iamVjdCk6CiAgICAgICAgICAgICBza2lwX2pzX2Jp
bmQgPSBkb21haW5fbmFtZSBpbiBjbHMuc2tpcF9qc19iaW5kX2RvbWFpbnMKLSAgICAgICAgICAg
IGFnZW50X2ZpZWxkX25hbWUgPSBmaWVsZF9uYW1lX3JlcwogCiAgICAgICAgICAgICBAc3RhdGlj
bWV0aG9kCiAgICAgICAgICAgICBkZWYgZ2V0X2d1YXJkKCk6CkBAIC05NTksNyArOTU4LDcgQEAg
Y2xhc3MgVHlwZUJpbmRpbmdzOgogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdy
aXRlci5uZXdsaW5lKCJ9OyAvLyBzdHJ1Y3QgIikKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd3JpdGVyLmFwcGVuZChlbnVtX25hbWUpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHdyaXRlci5hcHBlbmQoIlxuXG4iKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB3cml0ZXIuYXBwZW5kKCJcbiIpCiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBA
c3RhdGljbWV0aG9kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmIHJlZ2lzdGVyX3Vz
ZShmb3J3YXJkX2xpc3RlbmVyKToKQEAgLTEyNDUsNyArMTI0NCw3IEBAIGNsYXNzIFR5cGVCaW5k
aW5nczoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmRf
bXVsdGlsaW5lKCJcbiAgICB2b2lkICVzIiAlIHNldHRlcl9uYW1lKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiKCVzIHZhbHVlKVxuIiAlIHBhcmFt
X3R5cGVfYmluZGluZy5nZXRfdHlwZV9tb2RlbCgpLmdldF9pbnB1dF9wYXJhbV90eXBlX3RleHQo
KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIg
ICAge1xuIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXds
aW5lKCIgICAgICAgIHRoaXMtPnNldCVzKFwiJXNcIiwgJXMpO1xuIgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgdGhpcy0+c2V0JXMo
QVNDSUlMaXRlcmFsKFwiJXNcIiksICVzKTtcbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAlIChwYXJhbV90eXBlX2JpbmRpbmcucmVkdWNlX3RvX3Jhd190eXBlKCku
Z2V0X3NldHRlcl9uYW1lKCksIHByb3BfZGF0YS5wWyJuYW1lIl0sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0X3NldHRlcl92YWx1ZV9leHByZXNzaW9u
KHBhcmFtX3R5cGVfYmluZGluZywgInZhbHVlIikpKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICB9XG4iKQpAQCAtMTczMCw2ICsxNzI5LDgg
QEAgY2xhc3MgVGVtcGxhdGVzOgogIiIiKQogCiAgICAgZnJvbnRlbmRfZG9tYWluX2NsYXNzID0g
c3RyaW5nLlRlbXBsYXRlKENvZGVHZW5lcmF0b3JJbnNwZWN0b3JTdHJpbmdzLmZyb250ZW5kX2Rv
bWFpbl9jbGFzcykKKyAgICBiYWNrZW5kX2Rpc3BhdGNoZXJfY29uc3RydWN0b3IgPSBzdHJpbmcu
VGVtcGxhdGUoQ29kZUdlbmVyYXRvckluc3BlY3RvclN0cmluZ3MuYmFja2VuZF9kaXNwYXRjaGVy
X2NvbnN0cnVjdG9yKQorICAgIGJhY2tlbmRfZGlzcGF0Y2hlcl9kaXNwYXRjaF9tZXRob2QgPSBz
dHJpbmcuVGVtcGxhdGUoQ29kZUdlbmVyYXRvckluc3BlY3RvclN0cmluZ3MuYmFja2VuZF9kaXNw
YXRjaGVyX2Rpc3BhdGNoX21ldGhvZCkKICAgICBiYWNrZW5kX21ldGhvZCA9IHN0cmluZy5UZW1w
bGF0ZShDb2RlR2VuZXJhdG9ySW5zcGVjdG9yU3RyaW5ncy5iYWNrZW5kX21ldGhvZCkKICAgICBm
cm9udGVuZF9tZXRob2QgPSBzdHJpbmcuVGVtcGxhdGUoQ29kZUdlbmVyYXRvckluc3BlY3RvclN0
cmluZ3MuZnJvbnRlbmRfbWV0aG9kKQogICAgIGNhbGxiYWNrX21ldGhvZCA9IHN0cmluZy5UZW1w
bGF0ZShDb2RlR2VuZXJhdG9ySW5zcGVjdG9yU3RyaW5ncy5jYWxsYmFja19tZXRob2QpCkBAIC0x
ODIzLDE5ICsxODI0LDEyIEBAIGRlZiBmb3JtYXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb24ocGFy
YW1fdHlwZV9iaW5kaW5nLCB2YWx1ZV9yZWYpOgogY2xhc3MgR2VuZXJhdG9yOgogICAgIGZyb250
ZW5kX2RvbWFpbl9jbGFzc19saW5lcyA9IFtdCiAKLSAgICBtZXRob2RfbmFtZV9lbnVtX2xpc3Qg
PSBbXQotICAgIGJhY2tlbmRfbWV0aG9kX2RlY2xhcmF0aW9uX2xpc3QgPSBbXQogICAgIGJhY2tl
bmRfbWV0aG9kX2ltcGxlbWVudGF0aW9uX2xpc3QgPSBbXQotICAgIGJhY2tlbmRfbWV0aG9kX25h
bWVfZGVjbGFyYXRpb25fbGlzdCA9IFtdCi0gICAgbWV0aG9kX2hhbmRsZXJfbGlzdCA9IFtdCiAg
ICAgZnJvbnRlbmRfbWV0aG9kX2xpc3QgPSBbXQogICAgIGJhY2tlbmRfanNfZG9tYWluX2luaXRp
YWxpemVyX2xpc3QgPSBbXQogCi0gICAgYmFja2VuZF92aXJ0dWFsX3NldHRlcnNfbGlzdCA9IFtd
Ci0gICAgYmFja2VuZF9hZ2VudF9pbnRlcmZhY2VfbGlzdCA9IFtdCi0gICAgYmFja2VuZF9zZXR0
ZXJzX2xpc3QgPSBbXQotICAgIGJhY2tlbmRfY29uc3RydWN0b3JfaW5pdF9saXN0ID0gW10KLSAg
ICBiYWNrZW5kX2ZpZWxkX2xpc3QgPSBbXQorICAgIGJhY2tlbmRfaGFuZGxlcl9pbnRlcmZhY2Vf
bGlzdCA9IFtdCisgICAgYmFja2VuZF9kaXNwYXRjaGVyX2ludGVyZmFjZV9saXN0ID0gW10KICAg
ICB0eXBlX2J1aWxkZXJfZnJhZ21lbnRzID0gW10KICAgICB0eXBlX2J1aWxkZXJfZm9yd2FyZHMg
PSBbXQogICAgIHZhbGlkYXRvcl9pbXBsX2xpc3QgPSBbXQpAQCAtMTg0NywxNiArMTg0MSw5IEBA
IGNsYXNzIEdlbmVyYXRvcjoKICAgICAgICAgR2VuZXJhdG9yLnByb2Nlc3NfdHlwZXModHlwZV9t
YXApCiAKICAgICAgICAgZmlyc3RfY3ljbGVfZ3VhcmRhYmxlX2xpc3RfbGlzdCA9IFsKLSAgICAg
ICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX21ldGhvZF9kZWNsYXJhdGlvbl9saXN0LAogICAgICAg
ICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfbWV0aG9kX2ltcGxlbWVudGF0aW9uX2xpc3QsCi0gICAg
ICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9tZXRob2RfbmFtZV9kZWNsYXJhdGlvbl9saXN0LAot
ICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfYWdlbnRfaW50ZXJmYWNlX2xpc3QsCi0gICAg
ICAgICAgICBHZW5lcmF0b3IubWV0aG9kX2hhbmRsZXJfbGlzdCwKLSAgICAgICAgICAgIEdlbmVy
YXRvci5tZXRob2RfbmFtZV9lbnVtX2xpc3QsCi0gICAgICAgICAgICBHZW5lcmF0b3IuYmFja2Vu
ZF9jb25zdHJ1Y3Rvcl9pbml0X2xpc3QsCi0gICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF92
aXJ0dWFsX3NldHRlcnNfbGlzdCwKLSAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX3NldHRl
cnNfbGlzdCwKLSAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2ZpZWxkX2xpc3RdCisgICAg
ICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9oYW5kbGVyX2ludGVyZmFjZV9saXN0LAorICAgICAg
ICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfZGlzcGF0Y2hlcl9pbnRlcmZhY2VfbGlzdF0KIAogICAg
ICAgICBmb3IganNvbl9kb21haW4gaW4ganNvbl9hcGlbImRvbWFpbnMiXToKICAgICAgICAgICAg
IGRvbWFpbl9uYW1lID0ganNvbl9kb21haW5bImRvbWFpbiJdCkBAIC0xODcwLDggKzE4NTcsNiBA
QCBjbGFzcyBHZW5lcmF0b3I6CiAgICAgICAgICAgICAgICAgZm9yIGwgaW4gZmlyc3RfY3ljbGVf
Z3VhcmRhYmxlX2xpc3RfbGlzdDoKICAgICAgICAgICAgICAgICAgICAgZG9tYWluX2d1YXJkLmdl
bmVyYXRlX29wZW4obCkKIAotICAgICAgICAgICAgYWdlbnRfZmllbGRfbmFtZSA9IGRvbWFpbl9m
aXhlcy5hZ2VudF9maWVsZF9uYW1lCi0KICAgICAgICAgICAgIGZyb250ZW5kX21ldGhvZF9kZWNs
YXJhdGlvbl9saW5lcyA9IFtdCiAKICAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2pzX2Rv
bWFpbl9pbml0aWFsaXplcl9saXN0LmFwcGVuZCgiLy8gJXMuXG4iICUgZG9tYWluX25hbWUpCkBA
IC0xOTA3LDIwICsxODkyLDQzIEBAIGNsYXNzIEdlbmVyYXRvcjoKICAgICAgICAgICAgICAgICAg
ICAgZG9tYWluX2d1YXJkLmdlbmVyYXRlX2Nsb3NlKEdlbmVyYXRvci5mcm9udGVuZF9tZXRob2Rf
bGlzdCkKICAgICAgICAgICAgICAgICAgICAgZG9tYWluX2d1YXJkLmdlbmVyYXRlX2Nsb3NlKEdl
bmVyYXRvci5mcm9udGVuZF9kb21haW5fY2xhc3NfbGluZXMpCiAKLSAgICAgICAgICAgIGFnZW50
X2ludGVyZmFjZV9uYW1lID0gQ2FwaXRhbGl6ZXIubG93ZXJfY2FtZWxfY2FzZV90b191cHBlcihk
b21haW5fbmFtZSkgKyAiQ29tbWFuZEhhbmRsZXIiCi0gICAgICAgICAgICBHZW5lcmF0b3IuYmFj
a2VuZF9hZ2VudF9pbnRlcmZhY2VfbGlzdC5hcHBlbmQoIiAgICBjbGFzcyAlcyB7XG4iICUgYWdl
bnRfaW50ZXJmYWNlX25hbWUpCi0gICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9hZ2VudF9p
bnRlcmZhY2VfbGlzdC5hcHBlbmQoIiAgICBwdWJsaWM6XG4iKQorICAgICAgICAgICAgZGlzcGF0
Y2hlcl9uYW1lID0gIkluc3BlY3RvciIgKyBDYXBpdGFsaXplci5sb3dlcl9jYW1lbF9jYXNlX3Rv
X3VwcGVyKGRvbWFpbl9uYW1lKSArICJCYWNrZW5kRGlzcGF0Y2hlciIKKyAgICAgICAgICAgIGFn
ZW50X2ludGVyZmFjZV9uYW1lID0gZGlzcGF0Y2hlcl9uYW1lICsgIkhhbmRsZXIiCisKKyAgICAg
ICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2Rpc3BhdGNoZXJfaW50ZXJmYWNlX2xpc3QuYXBwZW5k
KCJjbGFzcyAlcyBGSU5BTCA6IHB1YmxpYyBJbnNwZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlz
cGF0Y2hlciB7XG4iICUgZGlzcGF0Y2hlcl9uYW1lKQorICAgICAgICAgICAgR2VuZXJhdG9yLmJh
Y2tlbmRfZGlzcGF0Y2hlcl9pbnRlcmZhY2VfbGlzdC5hcHBlbmQoInB1YmxpYzpcbiIpCisgICAg
ICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9kaXNwYXRjaGVyX2ludGVyZmFjZV9saXN0LmFwcGVu
ZCgiICAgIHN0YXRpYyBQYXNzUmVmUHRyPCVzPiBjcmVhdGUoSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIqLCAlcyopO1xuIiAlIChkaXNwYXRjaGVyX25hbWUsIGFnZW50X2ludGVyZmFjZV9uYW1l
KSkKKyAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2Rpc3BhdGNoZXJfaW50ZXJmYWNlX2xp
c3QuYXBwZW5kKCIgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBT
dHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpIE9WRVJS
SURFO1xuIikKKyAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2Rpc3BhdGNoZXJfaW50ZXJm
YWNlX2xpc3QuYXBwZW5kKCJwcml2YXRlOlxuIikKKworICAgICAgICAgICAgR2VuZXJhdG9yLmJh
Y2tlbmRfaGFuZGxlcl9pbnRlcmZhY2VfbGlzdC5hcHBlbmQoImNsYXNzICVzIHtcbiIgJSBhZ2Vu
dF9pbnRlcmZhY2VfbmFtZSkKKyAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2hhbmRsZXJf
aW50ZXJmYWNlX2xpc3QuYXBwZW5kKCJwdWJsaWM6XG4iKQorCisgICAgICAgICAgICBiYWNrZW5k
X21ldGhvZF9jb3VudCA9IGxlbihHZW5lcmF0b3IuYmFja2VuZF9tZXRob2RfaW1wbGVtZW50YXRp
b25fbGlzdCkKKworICAgICAgICAgICAgZGlzcGF0Y2hlcl9jb21tYW5kc19saXN0ID0gW10KICAg
ICAgICAgICAgIGlmICJjb21tYW5kcyIgaW4ganNvbl9kb21haW46CiAgICAgICAgICAgICAgICAg
Zm9yIGpzb25fY29tbWFuZCBpbiBqc29uX2RvbWFpblsiY29tbWFuZHMiXToKLSAgICAgICAgICAg
ICAgICAgICAgR2VuZXJhdG9yLnByb2Nlc3NfY29tbWFuZChqc29uX2NvbW1hbmQsIGRvbWFpbl9u
YW1lLCBhZ2VudF9maWVsZF9uYW1lLCBhZ2VudF9pbnRlcmZhY2VfbmFtZSkKLSAgICAgICAgICAg
IEdlbmVyYXRvci5iYWNrZW5kX2FnZW50X2ludGVyZmFjZV9saXN0LmFwcGVuZCgiXG4gICAgcHJv
dGVjdGVkOlxuIikKLSAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2FnZW50X2ludGVyZmFj
ZV9saXN0LmFwcGVuZCgiICAgICAgICB2aXJ0dWFsIH4lcygpIHsgfVxuIiAlIGFnZW50X2ludGVy
ZmFjZV9uYW1lKQotICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfYWdlbnRfaW50ZXJmYWNl
X2xpc3QuYXBwZW5kKCIgICAgfTtcblxuIikKLQotICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tl
bmRfY29uc3RydWN0b3JfaW5pdF9saXN0LmFwcGVuZCgiICAgICAgICAsIG1fJXMoMCkiICUgYWdl
bnRfZmllbGRfbmFtZSkKLSAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX3ZpcnR1YWxfc2V0
dGVyc19saXN0LmFwcGVuZCgiICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckFnZW50KCVzKiAlcykg
PSAwOyIgJSAoYWdlbnRfaW50ZXJmYWNlX25hbWUsIGFnZW50X2ZpZWxkX25hbWUpKQotICAgICAg
ICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfc2V0dGVyc19saXN0LmFwcGVuZCgiICAgIHZpcnR1YWwg
dm9pZCByZWdpc3RlckFnZW50KCVzKiAlcykgeyBBU1NFUlQoIW1fJXMpOyBtXyVzID0gJXM7IH0i
ICUgKGFnZW50X2ludGVyZmFjZV9uYW1lLCBhZ2VudF9maWVsZF9uYW1lLCBhZ2VudF9maWVsZF9u
YW1lLCBhZ2VudF9maWVsZF9uYW1lLCBhZ2VudF9maWVsZF9uYW1lKSkKLSAgICAgICAgICAgIEdl
bmVyYXRvci5iYWNrZW5kX2ZpZWxkX2xpc3QuYXBwZW5kKCIgICAgJXMqIG1fJXM7IiAlIChhZ2Vu
dF9pbnRlcmZhY2VfbmFtZSwgYWdlbnRfZmllbGRfbmFtZSkpCisgICAgICAgICAgICAgICAgICAg
IEdlbmVyYXRvci5wcm9jZXNzX2NvbW1hbmQoanNvbl9jb21tYW5kLCBkb21haW5fbmFtZSwgYWdl
bnRfaW50ZXJmYWNlX25hbWUsIGRpc3BhdGNoZXJfbmFtZSwgZGlzcGF0Y2hlcl9jb21tYW5kc19s
aXN0KQorCisgICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9oYW5kbGVyX2ludGVyZmFjZV9s
aXN0LmFwcGVuZCgicHJvdGVjdGVkOlxuIikKKyAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5k
X2hhbmRsZXJfaW50ZXJmYWNlX2xpc3QuYXBwZW5kKCIgICAgdmlydHVhbCB+JXMoKSB7IH1cbiIg
JSBhZ2VudF9pbnRlcmZhY2VfbmFtZSkKKyAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2hh
bmRsZXJfaW50ZXJmYWNlX2xpc3QuYXBwZW5kKCJ9O1xuXG4iKQorCisgICAgICAgICAgICBHZW5l
cmF0b3IuYmFja2VuZF9kaXNwYXRjaGVyX2ludGVyZmFjZV9saXN0LmFwcGVuZCgicHJpdmF0ZTpc
biIpCisgICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9kaXNwYXRjaGVyX2ludGVyZmFjZV9s
aXN0LmFwcGVuZCgiICAgICVzKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwgJXMqKTtcbiIg
JSAoZGlzcGF0Y2hlcl9uYW1lLCBhZ2VudF9pbnRlcmZhY2VfbmFtZSkpCisgICAgICAgICAgICBH
ZW5lcmF0b3IuYmFja2VuZF9kaXNwYXRjaGVyX2ludGVyZmFjZV9saXN0LmFwcGVuZCgiICAgICVz
KiBtX2FnZW50O1xuIiAlIGFnZW50X2ludGVyZmFjZV9uYW1lKQorICAgICAgICAgICAgR2VuZXJh
dG9yLmJhY2tlbmRfZGlzcGF0Y2hlcl9pbnRlcmZhY2VfbGlzdC5hcHBlbmQoIn07XG5cbiIpCisK
KyAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX21ldGhvZF9pbXBsZW1lbnRhdGlvbl9saXN0
Lmluc2VydChiYWNrZW5kX21ldGhvZF9jb3VudCwgVGVtcGxhdGVzLmJhY2tlbmRfZGlzcGF0Y2hl
cl9jb25zdHJ1Y3Rvci5zdWJzdGl0dXRlKE5vbmUsCisgICAgICAgICAgICAgICAgZG9tYWluTmFt
ZT1kb21haW5fbmFtZSwKKyAgICAgICAgICAgICAgICBkaXNwYXRjaGVyTmFtZT1kaXNwYXRjaGVy
X25hbWUsCisgICAgICAgICAgICAgICAgYWdlbnROYW1lPWFnZW50X2ludGVyZmFjZV9uYW1lKSkK
KworICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfbWV0aG9kX2ltcGxlbWVudGF0aW9uX2xp
c3QuaW5zZXJ0KGJhY2tlbmRfbWV0aG9kX2NvdW50ICsgMSwgVGVtcGxhdGVzLmJhY2tlbmRfZGlz
cGF0Y2hlcl9kaXNwYXRjaF9tZXRob2Quc3Vic3RpdHV0ZShOb25lLAorICAgICAgICAgICAgICAg
IGRvbWFpbk5hbWU9ZG9tYWluX25hbWUsCisgICAgICAgICAgICAgICAgZGlzcGF0Y2hlck5hbWU9
ZGlzcGF0Y2hlcl9uYW1lLAorICAgICAgICAgICAgICAgIGRpc3BhdGNoZXJDb21tYW5kcz0iXG4i
LmpvaW4oZGlzcGF0Y2hlcl9jb21tYW5kc19saXN0KSkpCiAKICAgICAgICAgICAgIGlmIGRvbWFp
bl9ndWFyZDoKICAgICAgICAgICAgICAgICBmb3IgbCBpbiByZXZlcnNlZChmaXJzdF9jeWNsZV9n
dWFyZGFibGVfbGlzdF9saXN0KToKQEAgLTE5NzYsMjAgKzE5ODQsMTggQEAgY2xhc3MgR2VuZXJh
dG9yOgogICAgICAgICBjb250YWluZXJfbmFtZSA9ICJwYXJhbXNPYmplY3QiCiAKICAgICBAc3Rh
dGljbWV0aG9kCi0gICAgZGVmIHByb2Nlc3NfY29tbWFuZChqc29uX2NvbW1hbmQsIGRvbWFpbl9u
YW1lLCBhZ2VudF9maWVsZF9uYW1lLCBhZ2VudF9pbnRlcmZhY2VfbmFtZSk6CisgICAgZGVmIHBy
b2Nlc3NfY29tbWFuZChqc29uX2NvbW1hbmQsIGRvbWFpbl9uYW1lLCBhZ2VudF9pbnRlcmZhY2Vf
bmFtZSwgZGlzcGF0Y2hlcl9uYW1lLCBkaXNwYXRjaGVyX2NvbW1hbmRzX2xpc3QpOgogICAgICAg
ICBqc29uX2NvbW1hbmRfbmFtZSA9IGpzb25fY29tbWFuZFsibmFtZSJdCiAKLSAgICAgICAgY21k
X2VudW1fbmFtZSA9ICJrJXNfJXNDbWQiICUgKGRvbWFpbl9uYW1lLCBqc29uX2NvbW1hbmRbIm5h
bWUiXSkKLQotICAgICAgICBHZW5lcmF0b3IubWV0aG9kX25hbWVfZW51bV9saXN0LmFwcGVuZCgi
ICAgICAgICAlcywiICUgY21kX2VudW1fbmFtZSkKLSAgICAgICAgR2VuZXJhdG9yLm1ldGhvZF9o
YW5kbGVyX2xpc3QuYXBwZW5kKCIgICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXJJbXBsOjolc18lcywiICUgKGRvbWFpbl9uYW1lLCBqc29uX2NvbW1hbmRfbmFtZSkpCi0gICAg
ICAgIEdlbmVyYXRvci5iYWNrZW5kX21ldGhvZF9kZWNsYXJhdGlvbl9saXN0LmFwcGVuZCgiICAg
IHZvaWQgJXNfJXMobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VP
YmplY3QpOyIgJSAoZG9tYWluX25hbWUsIGpzb25fY29tbWFuZF9uYW1lKSkKLQogICAgICAgICBh
ZF9ob2NfdHlwZV9vdXRwdXQgPSBbXQotICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9hZ2VudF9p
bnRlcmZhY2VfbGlzdC5hcHBlbmQoYWRfaG9jX3R5cGVfb3V0cHV0KQotICAgICAgICBhZF9ob2Nf
dHlwZV93cml0ZXIgPSBXcml0ZXIoYWRfaG9jX3R5cGVfb3V0cHV0LCAiICAgICAgICAiKQorICAg
ICAgICBHZW5lcmF0b3IuYmFja2VuZF9oYW5kbGVyX2ludGVyZmFjZV9saXN0LmFwcGVuZChhZF9o
b2NfdHlwZV9vdXRwdXQpCisgICAgICAgIGFkX2hvY190eXBlX3dyaXRlciA9IFdyaXRlcihhZF9o
b2NfdHlwZV9vdXRwdXQsICIgICAgIikKIAotICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9hZ2Vu
dF9pbnRlcmZhY2VfbGlzdC5hcHBlbmQoIiAgICAgICAgdmlydHVhbCB2b2lkICVzKEVycm9yU3Ry
aW5nKiIgJSBqc29uX2NvbW1hbmRfbmFtZSkKKyAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfZGlz
cGF0Y2hlcl9pbnRlcmZhY2VfbGlzdC5hcHBlbmQoIiAgICB2b2lkICVzKGxvbmcgY2FsbElkLCBj
b25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpO1xuIiAlIGpzb25fY29tbWFuZF9uYW1lKQor
CisgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2hhbmRsZXJfaW50ZXJmYWNlX2xpc3QuYXBwZW5k
KCIgICAgdmlydHVhbCB2b2lkICVzKEVycm9yU3RyaW5nKiIgJSBqc29uX2NvbW1hbmRfbmFtZSkK
KyAgICAgICAgCisgICAgICAgIGRpc3BhdGNoZXJfY29tbWFuZHNfbGlzdC5hcHBlbmQoIiAgICAg
ICAgICAgIHsgXCIlc1wiLCAgJiVzOjolcyB9LCIgJSAoanNvbl9jb21tYW5kX25hbWUsIGRpc3Bh
dGNoZXJfbmFtZSwganNvbl9jb21tYW5kX25hbWUpKQogCiAgICAgICAgIG1ldGhvZF9pbl9jb2Rl
ID0gIiIKICAgICAgICAgbWV0aG9kX291dF9jb2RlID0gIiIKQEAgLTIwMDAsNyArMjAwNiw3IEBA
IGNsYXNzIEdlbmVyYXRvcjoKICAgICAgICAgaWYgInBhcmFtZXRlcnMiIGluIGpzb25fY29tbWFu
ZDoKICAgICAgICAgICAgIGpzb25fcGFyYW1zID0ganNvbl9jb21tYW5kWyJwYXJhbWV0ZXJzIl0K
ICAgICAgICAgICAgIG1ldGhvZF9pbl9jb2RlICs9IFRlbXBsYXRlcy5wYXJhbV9jb250YWluZXJf
YWNjZXNzX2NvZGUKLSAgICAgICAgICAgIHJlcXVlc3RfbWVzc2FnZV9wYXJhbSA9ICIgcmVxdWVz
dE1lc3NhZ2VPYmplY3QiCisgICAgICAgICAgICByZXF1ZXN0X21lc3NhZ2VfcGFyYW0gPSAiIG1l
c3NhZ2UiCiAgICAgICAgICAgICBqc19wYXJhbV9saXN0ID0gW10KIAogICAgICAgICAgICAgZm9y
IGpzb25fcGFyYW1ldGVyIGluIGpzb25fcGFyYW1zOgpAQCAtMjAxOSwxMyArMjAyNSwxMyBAQCBj
bGFzcyBHZW5lcmF0b3I6CiAKICAgICAgICAgICAgICAgICBpZiBvcHRpb25hbDoKICAgICAgICAg
ICAgICAgICAgICAgY29kZSA9ICgiICAgIGJvb2wgJXNfdmFsdWVGb3VuZCA9IGZhbHNlO1xuIgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgJXMgaW5fJXMgPSBnZXQlcyhwYXJhbXND
b250YWluZXJQdHIsIFwiJXNcIiwgJiVzX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTtc
biIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgJXMgaW5fJXMgPSBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0JXMocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVy
YWwoXCIlc1wiKSwgJiVzX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTtcbiIgJQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKGpzb25fcGFyYW1fbmFtZSwgbm9uX29wdGlvbmFsX3R5
cGVfbW9kZWwuZ2V0X2NvbW1hbmRfcmV0dXJuX3Bhc3NfbW9kZWwoKS5nZXRfcmV0dXJuX3Zhcl90
eXBlKCksIGpzb25fcGFyYW1fbmFtZSwgZ2V0dGVyX25hbWUsIGpzb25fcGFyYW1fbmFtZSwganNv
bl9wYXJhbV9uYW1lKSkKICAgICAgICAgICAgICAgICAgICAgcGFyYW0gPSAiLCAlc192YWx1ZUZv
dW5kID8gJmluXyVzIDogMCIgJSAoanNvbl9wYXJhbV9uYW1lLCBqc29uX3BhcmFtX25hbWUpCiAg
ICAgICAgICAgICAgICAgICAgICMgRklYTUU6IHBhc3Mgb3B0aW9uYWwgcmVmcHRyLXZhbHVlcyBh
cyBQYXNzUmVmUHRyCiAgICAgICAgICAgICAgICAgICAgIGZvcm1hbF9wYXJhbV90eXBlX3BhdHRl
cm4gPSAiY29uc3QgJXMqIgogICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAg
ICAgIGNvZGUgPSAoIiAgICAlcyBpbl8lcyA9IGdldCVzKHBhcmFtc0NvbnRhaW5lclB0ciwgXCIl
c1wiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7XG4iICUKKyAgICAgICAgICAgICAgICAgICAgY29k
ZSA9ICgiICAgICVzIGluXyVzID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldCVzKHBh
cmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKFwiJXNcIiksIG51bGxwdHIsIHByb3RvY29s
RXJyb3JzUHRyKTtcbiIgJQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIChub25fb3B0aW9u
YWxfdHlwZV9tb2RlbC5nZXRfY29tbWFuZF9yZXR1cm5fcGFzc19tb2RlbCgpLmdldF9yZXR1cm5f
dmFyX3R5cGUoKSwganNvbl9wYXJhbV9uYW1lLCBnZXR0ZXJfbmFtZSwganNvbl9wYXJhbV9uYW1l
KSkKICAgICAgICAgICAgICAgICAgICAgcGFyYW0gPSAiLCBpbl8lcyIgJSBqc29uX3BhcmFtX25h
bWUKICAgICAgICAgICAgICAgICAgICAgIyBGSVhNRTogcGFzcyBub3Qtb3B0aW9uYWwgcmVmcHRy
LXZhbHVlcyBhcyBOb25OdWxsUGFzc1JlZlB0cgpAQCAtMjAzNiw3ICsyMDQyLDcgQEAgY2xhc3Mg
R2VuZXJhdG9yOgogCiAgICAgICAgICAgICAgICAgbWV0aG9kX2luX2NvZGUgKz0gY29kZQogICAg
ICAgICAgICAgICAgIGFnZW50X2NhbGxfcGFyYW1fbGlzdC5hcHBlbmQocGFyYW0pCi0gICAgICAg
ICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfYWdlbnRfaW50ZXJmYWNlX2xpc3QuYXBwZW5kKCIs
ICVzIGluXyVzIiAlIChmb3JtYWxfcGFyYW1fdHlwZV9wYXR0ZXJuICUgbm9uX29wdGlvbmFsX3R5
cGVfbW9kZWwuZ2V0X2NvbW1hbmRfcmV0dXJuX3Bhc3NfbW9kZWwoKS5nZXRfcmV0dXJuX3Zhcl90
eXBlKCksIGpzb25fcGFyYW1fbmFtZSkpCisgICAgICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tl
bmRfaGFuZGxlcl9pbnRlcmZhY2VfbGlzdC5hcHBlbmQoIiwgJXMgaW5fJXMiICUgKGZvcm1hbF9w
YXJhbV90eXBlX3BhdHRlcm4gJSBub25fb3B0aW9uYWxfdHlwZV9tb2RlbC5nZXRfY29tbWFuZF9y
ZXR1cm5fcGFzc19tb2RlbCgpLmdldF9yZXR1cm5fdmFyX3R5cGUoKSwganNvbl9wYXJhbV9uYW1l
KSkKIAogICAgICAgICAgICAgICAgIGpzX2JpbmRfdHlwZSA9IHBhcmFtX3Jhd190eXBlLmdldF9q
c19iaW5kX3R5cGUoKQogICAgICAgICAgICAgICAgIGpzX3BhcmFtX3RleHQgPSAie1wibmFtZVwi
OiBcIiVzXCIsIFwidHlwZVwiOiBcIiVzXCIsIFwib3B0aW9uYWxcIjogJXN9IiAlICgKQEAgLTIw
NjAsMjIgKzIwNjYsMjIgQEAgY2xhc3MgR2VuZXJhdG9yOgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRlY2xfcGFyYW1ldGVyX2xpc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2VuZXJhdG9yLkNhbGxiYWNrTWV0aG9kU3Ry
dWN0VGVtcGxhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R2VuZXJhdG9yLmJhY2tlbmRfbWV0aG9kX2ltcGxlbWVudGF0aW9uX2xpc3QsIFRlbXBsYXRlcy5j
YWxsYmFja19tZXRob2QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgeyJjYWxsYmFja05hbWUiOiBjYWxsYmFja19uYW1lLCAiYWdlbnROYW1lIjogYWdlbnRfaW50
ZXJmYWNlX25hbWV9KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHsiY2FsbGJhY2tOYW1lIjogY2FsbGJhY2tfbmFtZSwgImhhbmRsZXJOYW1lIjogYWdlbnRfaW50
ZXJmYWNlX25hbWV9KQogCi0gICAgICAgICAgICBjYWxsYmFja193cml0ZXIubmV3bGluZSgiY2xh
c3MgIiArIGNhbGxiYWNrX25hbWUgKyAiIDogcHVibGljIENhbGxiYWNrQmFzZSB7XG4iKQorICAg
ICAgICAgICAgY2FsbGJhY2tfd3JpdGVyLm5ld2xpbmUoImNsYXNzICIgKyBjYWxsYmFja19uYW1l
ICsgIiA6IHB1YmxpYyBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlIHtc
biIpCiAgICAgICAgICAgICBjYWxsYmFja193cml0ZXIubmV3bGluZSgicHVibGljOlxuIikKLSAg
ICAgICAgICAgIGNhbGxiYWNrX3dyaXRlci5uZXdsaW5lKCIgICAgIiArIGNhbGxiYWNrX25hbWUg
KyAiKFBhc3NSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsPiwgaW50IGlkKTtc
biIpCisgICAgICAgICAgICBjYWxsYmFja193cml0ZXIubmV3bGluZSgiICAgICIgKyBjYWxsYmFj
a19uYW1lICsgIihQYXNzUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiwgaW50IGlk
KTtcbiIpCiAgICAgICAgICAgICBjYWxsYmFja193cml0ZXIubmV3bGluZSgiICAgIHZvaWQgc2Vu
ZFN1Y2Nlc3MoIiArICIsICIuam9pbihkZWNsX3BhcmFtZXRlcl9saXN0KSArICIpO1xuIikKICAg
ICAgICAgICAgIGNhbGxiYWNrX3dyaXRlci5uZXdsaW5lKCJ9O1xuIikKIAogICAgICAgICAgICAg
YWRfaG9jX3R5cGVfb3V0cHV0LmFwcGVuZChjYWxsYmFja19vdXRwdXQpCiAKLSAgICAgICAgICAg
IG1ldGhvZF9vdXRfY29kZSArPSAiICAgIFJlZlB0cjwiICsgYWdlbnRfaW50ZXJmYWNlX25hbWUg
KyAiOjoiICsgY2FsbGJhY2tfbmFtZSArICI+IGNhbGxiYWNrID0gYWRvcHRSZWYobmV3ICIgKyBh
Z2VudF9pbnRlcmZhY2VfbmFtZSArICI6OiIgKyBjYWxsYmFja19uYW1lICsgIih0aGlzLCBjYWxs
SWQpKTtcbiIKKyAgICAgICAgICAgIG1ldGhvZF9vdXRfY29kZSArPSAiICAgIFJlZlB0cjwiICsg
YWdlbnRfaW50ZXJmYWNlX25hbWUgKyAiOjoiICsgY2FsbGJhY2tfbmFtZSArICI+IGNhbGxiYWNr
ID0gYWRvcHRSZWYobmV3ICIgKyBhZ2VudF9pbnRlcmZhY2VfbmFtZSArICI6OiIgKyBjYWxsYmFj
a19uYW1lICsgIihtX2JhY2tlbmREaXNwYXRjaGVyLCBjYWxsSWQpKTtcbiIKICAgICAgICAgICAg
IGFnZW50X2NhbGxfcGFyYW1fbGlzdC5hcHBlbmQoIiwgY2FsbGJhY2siKQotICAgICAgICAgICAg
cmVzcG9uc2VfY29va190ZXh0ICs9ICIgICAgICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIFxuIgor
ICAgICAgICAgICAgcmVzcG9uc2VfY29va190ZXh0ICs9ICIgICAgICAgIGlmICghZXJyb3IubGVu
Z3RoKCkpXG4iCiAgICAgICAgICAgICByZXNwb25zZV9jb29rX3RleHQgKz0gIiAgICAgICAgICAg
IHJldHVybjtcbiIKICAgICAgICAgICAgIHJlc3BvbnNlX2Nvb2tfdGV4dCArPSAiICAgICAgICBj
YWxsYmFjay0+ZGlzYWJsZSgpO1xuIgotICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfYWdl
bnRfaW50ZXJmYWNlX2xpc3QuYXBwZW5kKCIsIFBhc3NSZWZQdHI8JXM+IGNhbGxiYWNrIiAlIGNh
bGxiYWNrX25hbWUpCisgICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9oYW5kbGVyX2ludGVy
ZmFjZV9saXN0LmFwcGVuZCgiLCBQYXNzUmVmUHRyPCVzPiBjYWxsYmFjayIgJSBjYWxsYmFja19u
YW1lKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgaWYgInJldHVybnMiIGluIGpzb25fY29t
bWFuZDoKICAgICAgICAgICAgICAgICBtZXRob2Rfb3V0X2NvZGUgKz0gIlxuIgpAQCAtMjEwMiw3
ICsyMTA4LDcgQEAgY2xhc3MgR2VuZXJhdG9yOgogICAgICAgICAgICAgICAgICAgICBpZiByZXR1
cm5fdHlwZV9iaW5kaW5nLmdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKCk6CiAg
ICAgICAgICAgICAgICAgICAgICAgICBzZXR0ZXJfYXJndW1lbnQgPSByZXR1cm5fdHlwZV9iaW5k
aW5nLmdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKCkgJSBzZXR0ZXJfYXJndW1l
bnQKIAotICAgICAgICAgICAgICAgICAgICBjb29rID0gIiAgICAgICAgICAgIHJlc3VsdC0+c2V0
JXMoXCIlc1wiLCAlcyk7XG4iICUgKHNldHRlcl90eXBlLCBqc29uX3JldHVybl9uYW1lLAorICAg
ICAgICAgICAgICAgICAgICBjb29rID0gIiAgICAgICAgICAgIHJlc3VsdC0+c2V0JXMoQVNDSUlM
aXRlcmFsKFwiJXNcIiksICVzKTtcbiIgJSAoc2V0dGVyX3R5cGUsIGpzb25fcmV0dXJuX25hbWUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2V0dGVyX2FyZ3VtZW50KQogCiAgICAgICAgICAgICAgICAgICAg
IHNldF9jb25kaXRpb25fcGF0dGVybiA9IHR5cGVfbW9kZWwuZ2V0X2NvbW1hbmRfcmV0dXJuX3Bh
c3NfbW9kZWwoKS5nZXRfc2V0X3JldHVybl9jb25kaXRpb24oKQpAQCAtMjExNCw3ICsyMTIwLDcg
QEAgY2xhc3MgR2VuZXJhdG9yOgogICAgICAgICAgICAgICAgICAgICBpZiBvcHRpb25hbDoKICAg
ICAgICAgICAgICAgICAgICAgICAgIHBhcmFtX25hbWUgPSAib3B0XyIgKyBwYXJhbV9uYW1lCiAK
LSAgICAgICAgICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfYWdlbnRfaW50ZXJmYWNlX2xp
c3QuYXBwZW5kKCIsICVzICVzIiAlIChhbm5vdGF0ZWRfdHlwZSwgcGFyYW1fbmFtZSkpCisgICAg
ICAgICAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2hhbmRsZXJfaW50ZXJmYWNlX2xpc3Qu
YXBwZW5kKCIsICVzICVzIiAlIChhbm5vdGF0ZWRfdHlwZSwgcGFyYW1fbmFtZSkpCiAgICAgICAg
ICAgICAgICAgICAgIHJlc3BvbnNlX2Nvb2tfbGlzdC5hcHBlbmQoY29vaykKIAogICAgICAgICAg
ICAgICAgICAgICBtZXRob2Rfb3V0X2NvZGUgKz0gY29kZQpAQCAtMjEzNCwxOCArMjE0MCwxNiBA
QCBjbGFzcyBHZW5lcmF0b3I6CiAgICAgICAgIGpzX3JlcGx5X2xpc3QgPSAiWyVzXSIgJSAiLCAi
LmpvaW4oYmFja2VuZF9qc19yZXBseV9wYXJhbV9saXN0KQogCiAgICAgICAgIEdlbmVyYXRvci5i
YWNrZW5kX21ldGhvZF9pbXBsZW1lbnRhdGlvbl9saXN0LmFwcGVuZChUZW1wbGF0ZXMuYmFja2Vu
ZF9tZXRob2Quc3Vic3RpdHV0ZShOb25lLAotICAgICAgICAgICAgZG9tYWluTmFtZT1kb21haW5f
bmFtZSwgbWV0aG9kTmFtZT1qc29uX2NvbW1hbmRfbmFtZSwKLSAgICAgICAgICAgIGFnZW50Rmll
bGQ9Im1fIiArIGFnZW50X2ZpZWxkX25hbWUsCisgICAgICAgICAgICBkaXNwYXRjaGVyTmFtZT1k
aXNwYXRjaGVyX25hbWUsCisgICAgICAgICAgICBtZXRob2ROYW1lPWpzb25fY29tbWFuZF9uYW1l
LAogICAgICAgICAgICAgbWV0aG9kSW5Db2RlPW1ldGhvZF9pbl9jb2RlLAogICAgICAgICAgICAg
bWV0aG9kT3V0Q29kZT1tZXRob2Rfb3V0X2NvZGUsCiAgICAgICAgICAgICBhZ2VudENhbGxQYXJh
bXM9IiIuam9pbihhZ2VudF9jYWxsX3BhcmFtX2xpc3QpLAogICAgICAgICAgICAgcmVxdWVzdE1l
c3NhZ2VPYmplY3Q9cmVxdWVzdF9tZXNzYWdlX3BhcmFtLAotICAgICAgICAgICAgcmVzcG9uc2VD
b29rPXJlc3BvbnNlX2Nvb2tfdGV4dCwKLSAgICAgICAgICAgIGNvbW1hbmROYW1lSW5kZXg9Y21k
X2VudW1fbmFtZSkpCi0gICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX21ldGhvZF9uYW1lX2RlY2xh
cmF0aW9uX2xpc3QuYXBwZW5kKCIgICAgXCIlcy4lc1wiLCIgJSAoZG9tYWluX25hbWUsIGpzb25f
Y29tbWFuZF9uYW1lKSkKKyAgICAgICAgICAgIHJlc3BvbnNlQ29vaz1yZXNwb25zZV9jb29rX3Rl
eHQpKQogCiAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2pzX2RvbWFpbl9pbml0aWFsaXplcl9s
aXN0LmFwcGVuZCgiSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoXCIlcy4lc1wiLCBb
JXNdLCAlcyk7XG4iICUgKGRvbWFpbl9uYW1lLCBqc29uX2NvbW1hbmRfbmFtZSwganNfcGFyYW1l
dGVyc190ZXh0LCBqc19yZXBseV9saXN0KSkKLSAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfYWdl
bnRfaW50ZXJmYWNlX2xpc3QuYXBwZW5kKCIpID0gMDtcbiIpCisgICAgICAgIEdlbmVyYXRvci5i
YWNrZW5kX2hhbmRsZXJfaW50ZXJmYWNlX2xpc3QuYXBwZW5kKCIpID0gMDtcbiIpCiAKICAgICBj
bGFzcyBDYWxsYmFja01ldGhvZFN0cnVjdFRlbXBsYXRlOgogICAgICAgICBAc3RhdGljbWV0aG9k
CkBAIC0yMTkzLDcgKzIxOTcsNyBAQCBjbGFzcyBHZW5lcmF0b3I6CiAgICAgICAgICAgICAgICAg
aWYgbW9kZV90eXBlX2JpbmRpbmcuZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4o
KToKICAgICAgICAgICAgICAgICAgICAgc2V0dGVyX2FyZ3VtZW50ID0gbW9kZV90eXBlX2JpbmRp
bmcuZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4oKSAlIHNldHRlcl9hcmd1bWVu
dAogCi0gICAgICAgICAgICAgICAgc2V0dGVyX2NvZGUgPSAiICAgICVzLT5zZXQlcyhcIiVzXCIs
ICVzKTtcbiIgJSAobWV0aG9kX3N0cnVjdF90ZW1wbGF0ZS5jb250YWluZXJfbmFtZSwgc2V0dGVy
X3R5cGUsIHBhcmFtZXRlcl9uYW1lLCBzZXR0ZXJfYXJndW1lbnQpCisgICAgICAgICAgICAgICAg
c2V0dGVyX2NvZGUgPSAiICAgICVzLT5zZXQlcyhBU0NJSUxpdGVyYWwoXCIlc1wiKSwgJXMpO1xu
IiAlIChtZXRob2Rfc3RydWN0X3RlbXBsYXRlLmNvbnRhaW5lcl9uYW1lLCBzZXR0ZXJfdHlwZSwg
cGFyYW1ldGVyX25hbWUsIHNldHRlcl9hcmd1bWVudCkKICAgICAgICAgICAgICAgICBpZiBvcHRp
b25hbDoKICAgICAgICAgICAgICAgICAgICAgc2V0dGVyX2NvZGUgPSAoIiAgICBpZiAoJXMpXG4g
ICAgIiAlIHBhcmFtZXRlcl9uYW1lKSArIHNldHRlcl9jb2RlCiAgICAgICAgICAgICAgICAgbWV0
aG9kX2xpbmVfbGlzdC5hcHBlbmQoc2V0dGVyX2NvZGUpCkBAIC0yMzc1LDE4ICsyMzc5LDExIEBA
IGJhY2tlbmRfanNfZmlsZSA9IFNtYXJ0T3V0cHV0KG91dHB1dF9qc19kaXJuYW1lICsgIi9JbnNw
ZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMiCiAKIAogYmFja2VuZF9oX2ZpbGUud3JpdGUoVGVtcGxh
dGVzLmJhY2tlbmRfaC5zdWJzdGl0dXRlKE5vbmUsCi0gICAgdmlydHVhbFNldHRlcnM9IlxuIi5q
b2luKEdlbmVyYXRvci5iYWNrZW5kX3ZpcnR1YWxfc2V0dGVyc19saXN0KSwKLSAgICBhZ2VudElu
dGVyZmFjZXM9IiIuam9pbihmbGF0dGVuX2xpc3QoR2VuZXJhdG9yLmJhY2tlbmRfYWdlbnRfaW50
ZXJmYWNlX2xpc3QpKSwKLSAgICBtZXRob2ROYW1lc0VudW1Db250ZW50PSJcbiIuam9pbihHZW5l
cmF0b3IubWV0aG9kX25hbWVfZW51bV9saXN0KSkpCisgICAgaGFuZGxlckludGVyZmFjZXM9IiIu
am9pbihmbGF0dGVuX2xpc3QoR2VuZXJhdG9yLmJhY2tlbmRfaGFuZGxlcl9pbnRlcmZhY2VfbGlz
dCkpLAorICAgIGRpc3BhdGNoZXJJbnRlcmZhY2VzPSIiLmpvaW4oZmxhdHRlbl9saXN0KEdlbmVy
YXRvci5iYWNrZW5kX2Rpc3BhdGNoZXJfaW50ZXJmYWNlX2xpc3QpKSkpCiAKIGJhY2tlbmRfY3Bw
X2ZpbGUud3JpdGUoVGVtcGxhdGVzLmJhY2tlbmRfY3BwLnN1YnN0aXR1dGUoTm9uZSwKLSAgICBj
b25zdHJ1Y3RvckluaXQ9IlxuIi5qb2luKEdlbmVyYXRvci5iYWNrZW5kX2NvbnN0cnVjdG9yX2lu
aXRfbGlzdCksCi0gICAgc2V0dGVycz0iXG4iLmpvaW4oR2VuZXJhdG9yLmJhY2tlbmRfc2V0dGVy
c19saXN0KSwKLSAgICBmaWVsZERlY2xhcmF0aW9ucz0iXG4iLmpvaW4oR2VuZXJhdG9yLmJhY2tl
bmRfZmllbGRfbGlzdCksCi0gICAgbWV0aG9kTmFtZURlY2xhcmF0aW9ucz0iXG4iLmpvaW4oR2Vu
ZXJhdG9yLmJhY2tlbmRfbWV0aG9kX25hbWVfZGVjbGFyYXRpb25fbGlzdCksCi0gICAgbWV0aG9k
cz0iXG4iLmpvaW4oR2VuZXJhdG9yLmJhY2tlbmRfbWV0aG9kX2ltcGxlbWVudGF0aW9uX2xpc3Qp
LAotICAgIG1ldGhvZERlY2xhcmF0aW9ucz0iXG4iLmpvaW4oR2VuZXJhdG9yLmJhY2tlbmRfbWV0
aG9kX2RlY2xhcmF0aW9uX2xpc3QpLAotICAgIG1lc3NhZ2VIYW5kbGVycz0iXG4iLmpvaW4oR2Vu
ZXJhdG9yLm1ldGhvZF9oYW5kbGVyX2xpc3QpKSkKKyAgICBtZXRob2RzPSJcbiIuam9pbihHZW5l
cmF0b3IuYmFja2VuZF9tZXRob2RfaW1wbGVtZW50YXRpb25fbGlzdCkpKQogCiBmcm9udGVuZF9o
X2ZpbGUud3JpdGUoVGVtcGxhdGVzLmZyb250ZW5kX2guc3Vic3RpdHV0ZShOb25lLAogICAgIGRv
bWFpbkNsYXNzTGlzdD0iIi5qb2luKEdlbmVyYXRvci5mcm9udGVuZF9kb21haW5fY2xhc3NfbGlu
ZXMpKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9y
SW5zcGVjdG9yU3RyaW5ncy5weSBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJh
dG9ySW5zcGVjdG9yU3RyaW5ncy5weQppbmRleCA4ZjdkMDRjLi4zY2RjNTE3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3RvclN0cmluZ3Mu
cHkKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3JT
dHJpbmdzLnB5CkBAIC0zOSwyMyArMzksNjMgQEAgJHtmcm9udGVuZERvbWFpbk1ldGhvZERlY2xh
cmF0aW9uc31wcml2YXRlOgogCiAiIiIpCiAKK2JhY2tlbmRfZGlzcGF0Y2hlcl9jb25zdHJ1Y3Rv
ciA9ICgKKyIiIlBhc3NSZWZQdHI8JHtkaXNwYXRjaGVyTmFtZX0+ICR7ZGlzcGF0Y2hlck5hbWV9
OjpjcmVhdGUoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyLCAk
e2FnZW50TmFtZX0qIGFnZW50KQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgJHtkaXNwYXRj
aGVyTmFtZX0oYmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7Cit9CisKKyR7ZGlzcGF0Y2hlck5h
bWV9Ojoke2Rpc3BhdGNoZXJOYW1lfShJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2Vu
ZERpc3BhdGNoZXIsICR7YWdlbnROYW1lfSogYWdlbnQpCisgICAgOiBJbnNwZWN0b3JTdXBwbGVt
ZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKKyAgICAsIG1fYWdlbnQo
YWdlbnQpCit7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9y
RG9tYWluKEFTQ0lJTGl0ZXJhbCgiJHtkb21haW5OYW1lfSIpLCB0aGlzKTsKK30KKyIiIikKKwor
YmFja2VuZF9kaXNwYXRjaGVyX2Rpc3BhdGNoX21ldGhvZCA9ICgKKyIiInZvaWQgJHtkaXNwYXRj
aGVyTmFtZX06OmRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpCit7CisgICAgUmVmPCR7ZGlzcGF0Y2hl
ck5hbWV9PiBwcm90ZWN0KCp0aGlzKTsKKworICAgIHR5cGVkZWYgdm9pZCAoJHtkaXNwYXRjaGVy
TmFtZX06OipDYWxsSGFuZGxlcikobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYg
bWVzc2FnZSk7CisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+IERpc3Bh
dGNoTWFwOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoRGlzcGF0Y2hNYXAsIGRpc3BhdGNoTWFw
LCAoKSk7CisgICAgaWYgKGRpc3BhdGNoTWFwLmlzRW1wdHkoKSkgeworICAgICAgICBzdGF0aWMg
Y29uc3Qgc3RydWN0IE1ldGhvZFRhYmxlIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIG5hbWU7
CisgICAgICAgICAgICBDYWxsSGFuZGxlciBoYW5kbGVyOworICAgICAgICB9IGNvbW1hbmRzW10g
PSB7Ciske2Rpc3BhdGNoZXJDb21tYW5kc30KKyAgICAgICAgfTsKKyAgICAgICAgc2l6ZV90IGxl
bmd0aCA9IFdURl9BUlJBWV9MRU5HVEgoY29tbWFuZHMpOworICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGxlbmd0aDsgKytpKQorICAgICAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKGNvbW1h
bmRzW2ldLm5hbWUsIGNvbW1hbmRzW2ldLmhhbmRsZXIpOworICAgIH0KKworICAgIEhhc2hNYXA8
U3RyaW5nLCBDYWxsSGFuZGxlcj46Oml0ZXJhdG9yIGl0ID0gZGlzcGF0Y2hNYXAuZmluZChtZXRo
b2QpOworICAgIGlmIChpdCA9PSBkaXNwYXRjaE1hcC5lbmQoKSkgeworICAgICAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgU3RyaW5nKCInIikgKyAiJHtkb21haW5OYW1l
fSIgKyAnLicgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICAoKCp0aGlzKS4qaXQtPnZhbHVlKShjYWxsSWQsICptZXNzYWdlLmdldCgp
KTsKK30KKyIiIikKKwogYmFja2VuZF9tZXRob2QgPSAoCi0iIiJ2b2lkIEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVySW1wbDo6JHtkb21haW5OYW1lfV8kbWV0aG9kTmFtZShsb25nIGNhbGxJZCwg
SW5zcGVjdG9yT2JqZWN0KiRyZXF1ZXN0TWVzc2FnZU9iamVjdCkKKyIiInZvaWQgJHtkaXNwYXRj
aGVyTmFtZX06OiR7bWV0aG9kTmFtZX0obG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVj
dCYke3JlcXVlc3RNZXNzYWdlT2JqZWN0fSkKIHsKICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwotCi0gICAgaWYgKCEk
YWdlbnRGaWVsZCkKLSAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIiR7ZG9tYWlu
TmFtZX0gaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwotJG1ldGhvZE91dENvZGUKLSRtZXRo
b2RJbkNvZGUKKyR7bWV0aG9kT3V0Q29kZX0ke21ldGhvZEluQ29kZX0KICAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIEVy
cm9yU3RyaW5nIGVycm9yOwogICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7Ci0g
ICAgICAgICRhZ2VudEZpZWxkLT4kbWV0aG9kTmFtZSgmZXJyb3IkYWdlbnRDYWxsUGFyYW1zKTsK
KyAgICAgICAgbV9hZ2VudC0+JHttZXRob2ROYW1lfSgmZXJyb3Ike2FnZW50Q2FsbFBhcmFtc30p
OwogCiAke3Jlc3BvbnNlQ29va30KICAgICB9Ci0gICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVz
dWx0LnJlbGVhc2UoKSwgY29tbWFuZE5hbWVzWyRjb21tYW5kTmFtZUluZGV4XSwgcHJvdG9jb2xF
cnJvcnMucmVsZWFzZSgpLCBlcnJvcik7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJl
c3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgp
LCBlcnJvcik7CiB9CiAiIiIpCiAKQEAgLTY5LDEyICsxMDksMTIgQEAgJGNvZGUKICIiIikKIAog
Y2FsbGJhY2tfbWV0aG9kID0gKAotIiIiSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OiRhZ2Vu
dE5hbWU6OiRjYWxsYmFja05hbWU6OiRjYWxsYmFja05hbWUoUGFzc1JlZlB0cjxJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlckltcGw+IGJhY2tlbmRJbXBsLCBpbnQgaWQpIDogQ2FsbGJhY2tCYXNl
KGJhY2tlbmRJbXBsLCBpZCkge30KKyIiIiR7aGFuZGxlck5hbWV9Ojoke2NhbGxiYWNrTmFtZX06
OiR7Y2FsbGJhY2tOYW1lfShQYXNzUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBi
YWNrZW5kRGlzcGF0Y2hlciwgaW50IGlkKSA6IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpD
YWxsYmFja0Jhc2UoYmFja2VuZERpc3BhdGNoZXIsIGlkKSB7IH0KIAotdm9pZCBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6JGFnZW50TmFtZTo6JGNhbGxiYWNrTmFtZTo6c2VuZFN1Y2Nlc3Mo
JHBhcmFtZXRlcnMpCit2b2lkICR7aGFuZGxlck5hbWV9Ojoke2NhbGxiYWNrTmFtZX06OnNlbmRT
dWNjZXNzKCR7cGFyYW1ldGVyc30pCiB7CiAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4ganNv
bk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotJGNvZGUgICAgc2VuZElmQWN0
aXZlKGpzb25NZXNzYWdlLCBFcnJvclN0cmluZygpKTsKKyR7Y29kZX0gICAgc2VuZElmQWN0aXZl
KGpzb25NZXNzYWdlLCBFcnJvclN0cmluZygpKTsKIH0KICIiIikKIApAQCAtMTA2LDg0ICsxNDYs
MjggQEAgYmFja2VuZF9oID0gKAogIiIiI2lmbmRlZiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cnNfaAogI2RlZmluZSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnNfaAogCisjaW5jbHVkZSAi
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUeXBlQnVp
bGRlci5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLSNpbmNsdWRlICJJbnNw
ZWN0b3JUeXBlQnVpbGRlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEluc3Bl
Y3RvckFnZW50OwogY2xhc3MgSW5zcGVjdG9yT2JqZWN0OwogY2xhc3MgSW5zcGVjdG9yQXJyYXk7
Ci1jbGFzcyBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAKIHR5cGVkZWYgU3RyaW5nIEVycm9y
U3RyaW5nOwogCi1jbGFzcyBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw7Ci0KLWNsYXNz
IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOiBwdWJsaWMgUmVmQ291bnRlZDxJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcj4gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBp
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwpOwotICAgIHZpcnR1YWwgfkluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyKCkgeyB9Ci0KLSAgICBjbGFzcyBDYWxsYmFja0Jhc2U6IHB1YmxpYyBSZWZDb3Vu
dGVkPENhbGxiYWNrQmFzZT4gewotICAgIHB1YmxpYzoKLSAgICAgICAgQ2FsbGJhY2tCYXNlKFBh
c3NSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsPiBiYWNrZW5kSW1wbCwgaW50
IGlkKTsKLSAgICAgICAgdmlydHVhbCB+Q2FsbGJhY2tCYXNlKCk7Ci0gICAgICAgIHZvaWQgc2Vu
ZEZhaWx1cmUoY29uc3QgRXJyb3JTdHJpbmcmKTsKLSAgICAgICAgYm9vbCBpc0FjdGl2ZSgpOwot
Ci0gICAgcHJvdGVjdGVkOgotICAgICAgICB2b2lkIHNlbmRJZkFjdGl2ZShQYXNzUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcGFydGlhbE1lc3NhZ2UsIGNvbnN0IEVycm9yU3RyaW5nJiBpbnZvY2F0
aW9uRXJyb3IpOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgdm9pZCBkaXNhYmxlKCkgeyBtX2Fs
cmVhZHlTZW50ID0gdHJ1ZTsgfQotCi0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlckltcGw+IG1fYmFja2VuZEltcGw7Ci0gICAgICAgIGludCBtX2lkOwotICAgICAgICBi
b29sIG1fYWxyZWFkeVNlbnQ7Ci0KLSAgICAgICAgZnJpZW5kIGNsYXNzIEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVySW1wbDsKLSAgICB9OwotCi0kYWdlbnRJbnRlcmZhY2VzCi0kdmlydHVhbFNl
dHRlcnMKLQotICAgIHZpcnR1YWwgdm9pZCBjbGVhckZyb250ZW5kKCkgPSAwOwotCi0gICAgZW51
bSBDb21tb25FcnJvckNvZGUgewotICAgICAgICBQYXJzZUVycm9yID0gMCwKLSAgICAgICAgSW52
YWxpZFJlcXVlc3QsCi0gICAgICAgIE1ldGhvZE5vdEZvdW5kLAotICAgICAgICBJbnZhbGlkUGFy
YW1zLAotICAgICAgICBJbnRlcm5hbEVycm9yLAotICAgICAgICBTZXJ2ZXJFcnJvciwKLSAgICAg
ICAgTGFzdEVudHJ5LAotICAgIH07Ci0KLSAgICB2b2lkIHJlcG9ydFByb3RvY29sRXJyb3IoY29u
c3QgbG9uZyogY29uc3QgY2FsbElkLCBDb21tb25FcnJvckNvZGUsIGNvbnN0IFN0cmluZyYgZXJy
b3JNZXNzYWdlKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0UHJvdG9jb2xFcnJvcihj
b25zdCBsb25nKiBjb25zdCBjYWxsSWQsIENvbW1vbkVycm9yQ29kZSwgY29uc3QgU3RyaW5nJiBl
cnJvck1lc3NhZ2UsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGRhdGEpIGNvbnN0ID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2goY29uc3QgU3RyaW5nJiBtZXNzYWdlKSA9IDA7Ci0K
LSAgICBlbnVtIE1ldGhvZE5hbWVzIHsKLSRtZXRob2ROYW1lc0VudW1Db250ZW50Ci0KLSAgICAg
ICAga01ldGhvZE5hbWVzRW51bVNpemUKLSAgICB9OwotCi0gICAgc3RhdGljIGNvbnN0IGNoYXIq
IGNvbW1hbmROYW1lc1tdOwotfTsKKyRoYW5kbGVySW50ZXJmYWNlcwogCiskZGlzcGF0Y2hlcklu
dGVyZmFjZXMKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwogI2VuZGlmIC8vICFkZWZpbmVkKElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyc19oKQotCi0KICIiIikKIAogYmFja2VuZF9jcHAgPSAo
CiAiIiIKLQogI2luY2x1ZGUgImNvbmZpZy5oIgogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKQEAg
LTE5OCwyNzUgKzE4Miw3IEBAIGJhY2tlbmRfY3BwID0gKAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLWNvbnN0IGNoYXIqIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpjb21tYW5kTmFtZXNb
XSA9IHsKLSRtZXRob2ROYW1lRGVjbGFyYXRpb25zCi19OwotCi0KLWNsYXNzIEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVySW1wbCA6IHB1YmxpYyBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciB7
Ci1wdWJsaWM6Ci0gICAgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsKEluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQotICAgICAgICA6IG1faW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKLSRjb25zdHJ1
Y3RvckluaXQKLSAgICB7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBjbGVhckZyb250ZW5kKCkgeyBt
X2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IDA7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0
Y2goY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0UHJvdG9j
b2xFcnJvcihjb25zdCBsb25nKiBjb25zdCBjYWxsSWQsIENvbW1vbkVycm9yQ29kZSwgY29uc3Qg
U3RyaW5nJiBlcnJvck1lc3NhZ2UsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGRhdGEpIGNv
bnN0OwotICAgIHVzaW5nIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpyZXBvcnRQcm90b2Nv
bEVycm9yOwotCi0gICAgdm9pZCBzZW5kUmVzcG9uc2UobG9uZyBjYWxsSWQsIFBhc3NSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQsIGNvbnN0IEVycm9yU3RyaW5nJiBpbnZvY2F0aW9uRXJy
b3IpOwotICAgIGJvb2wgaXNBY3RpdmUoKSB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hh
bm5lbDsgfQotCi0kc2V0dGVycwotcHJpdmF0ZToKLSRtZXRob2REZWNsYXJhdGlvbnMKLQotICAg
IEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7Ci0k
ZmllbGREZWNsYXJhdGlvbnMKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFIsIHR5cGVuYW1lIFYs
IHR5cGVuYW1lIFYwPgotICAgIHN0YXRpYyBSIGdldFByb3BlcnR5VmFsdWVJbXBsKEluc3BlY3Rv
ck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIElu
c3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycywgVjAgaW5pdGlhbF92YWx1ZSwgYm9vbCAoKmFz
X21ldGhvZCkoSW5zcGVjdG9yVmFsdWUqLCBWKiksIGNvbnN0IGNoYXIqIHR5cGVfbmFtZSk7Ci0K
LSAgICBzdGF0aWMgaW50IGdldEludChJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJv
cnMpOwotICAgIHN0YXRpYyBkb3VibGUgZ2V0RG91YmxlKEluc3BlY3Rvck9iamVjdCogb2JqZWN0
LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBw
cm90b2NvbEVycm9ycyk7Ci0gICAgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoSW5zcGVjdG9yT2Jq
ZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVj
dG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKTsKLSAgICBzdGF0aWMgYm9vbCBnZXRCb29sZWFuKElu
c3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91
bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycyk7Ci0gICAgc3RhdGljIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBnZXRPYmplY3QoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNv
bnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3Rv
Y29sRXJyb3JzKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gZ2V0QXJy
YXkoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFs
dWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKTsKLQotICAgIHZvaWQgc2Vu
ZFJlc3BvbnNlKGxvbmcgY2FsbElkLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0
LCBjb25zdCBjaGFyKiBjb21tYW5kTmFtZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJv
dG9jb2xFcnJvcnMsIEVycm9yU3RyaW5nIGludm9jYXRpb25FcnJvcik7Ci0KLX07Ci0KICRtZXRo
b2RzCi0KLVBhc3NSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlckltcGwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSk7Ci19Ci0KLQot
dm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OmRpc3BhdGNoKGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSkKLXsKLSAgICBSZWY8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IHByb3Rl
Y3QoKnRoaXMpOwotICAgIHR5cGVkZWYgdm9pZCAoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJ
bXBsOjoqQ2FsbEhhbmRsZXIpKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIG1lc3NhZ2VP
YmplY3QpOwotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPiBEaXNwYXRj
aE1hcDsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKERpc3BhdGNoTWFwLCBkaXNwYXRjaE1hcCwg
KTsKLSAgICBsb25nIGNhbGxJZCA9IDA7Ci0KLSAgICBpZiAoZGlzcGF0Y2hNYXAuaXNFbXB0eSgp
KSB7Ci0gICAgICAgIHN0YXRpYyBDYWxsSGFuZGxlciBoYW5kbGVyc1tdID0gewotJG1lc3NhZ2VI
YW5kbGVycwotICAgICAgICB9OwotICAgICAgICBzaXplX3QgbGVuZ3RoID0gV1RGX0FSUkFZX0xF
TkdUSChjb21tYW5kTmFtZXMpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0
aDsgKytpKQotICAgICAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKGNvbW1hbmROYW1lc1tpXSwgaGFu
ZGxlcnNbaV0pOwotICAgIH0KLQotICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gcGFyc2VkTWVz
c2FnZSA9IEluc3BlY3RvclZhbHVlOjpwYXJzZUpTT04obWVzc2FnZSk7Ci0gICAgaWYgKCFwYXJz
ZWRNZXNzYWdlKSB7Ci0gICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoMCwgUGFyc2VFcnJvciwg
Ik1lc3NhZ2UgbXVzdCBiZSBpbiBKU09OIGZvcm1hdCIpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZU9iamVjdCA9IHBhcnNlZE1l
c3NhZ2UtPmFzT2JqZWN0KCk7Ci0gICAgaWYgKCFtZXNzYWdlT2JqZWN0KSB7Ci0gICAgICAgIHJl
cG9ydFByb3RvY29sRXJyb3IoMCwgSW52YWxpZFJlcXVlc3QsICJNZXNzYWdlIG11c3QgYmUgYSBK
U09OaWZpZWQgb2JqZWN0Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBSZWZQdHI8
SW5zcGVjdG9yVmFsdWU+IGNhbGxJZFZhbHVlID0gbWVzc2FnZU9iamVjdC0+Z2V0KCJpZCIpOwot
ICAgIGlmICghY2FsbElkVmFsdWUpIHsKLSAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcigwLCBJ
bnZhbGlkUmVxdWVzdCwgIidpZCcgcHJvcGVydHkgd2FzIG5vdCBmb3VuZCIpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFjYWxsSWRWYWx1ZS0+YXNOdW1iZXIoJmNhbGxJZCkp
IHsKLSAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcigwLCBJbnZhbGlkUmVxdWVzdCwgIlRoZSB0
eXBlIG9mICdpZCcgcHJvcGVydHkgbXVzdCBiZSBudW1iZXIiKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gbWV0aG9kVmFsdWUgPSBtZXNzYWdl
T2JqZWN0LT5nZXQoIm1ldGhvZCIpOwotICAgIGlmICghbWV0aG9kVmFsdWUpIHsKLSAgICAgICAg
cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnZhbGlkUmVxdWVzdCwgIidtZXRob2QnIHBy
b3BlcnR5IHdhc24ndCBmb3VuZCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgU3Ry
aW5nIG1ldGhvZDsKLSAgICBpZiAoIW1ldGhvZFZhbHVlLT5hc1N0cmluZygmbWV0aG9kKSkgewot
ICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEludmFsaWRSZXF1ZXN0LCAiVGhl
IHR5cGUgb2YgJ21ldGhvZCcgcHJvcGVydHkgbXVzdCBiZSBzdHJpbmciKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj46Oml0ZXJhdG9y
IGl0ID0gZGlzcGF0Y2hNYXAuZmluZChtZXRob2QpOwotICAgIGlmIChpdCA9PSBkaXNwYXRjaE1h
cC5lbmQoKSkgewotICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIE1ldGhvZE5v
dEZvdW5kLCAiJyIgKyBtZXRob2QgKyAiJyB3YXNuJ3QgZm91bmQiKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgICgoKnRoaXMpLippdC0+dmFsdWUpKGNhbGxJZCwgbWVzc2FnZU9iamVj
dC5nZXQoKSk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpzZW5k
UmVzcG9uc2UobG9uZyBjYWxsSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQs
IGNvbnN0IGNoYXIqIGNvbW1hbmROYW1lLCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90
b2NvbEVycm9ycywgRXJyb3JTdHJpbmcgaW52b2NhdGlvbkVycm9yKQotewotICAgIGlmIChwcm90
b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKLSAgICAgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IFN0
cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9j
ZXNzZWQiLCBjb21tYW5kTmFtZSk7Ci0gICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJ
ZCwgSW52YWxpZFBhcmFtcywgZXJyb3JNZXNzYWdlLCBwcm90b2NvbEVycm9ycyk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBpbnZvY2F0
aW9uRXJyb3IpOwotfQotCi12b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6c2Vu
ZFJlc3BvbnNlKGxvbmcgY2FsbElkLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0
LCBjb25zdCBFcnJvclN0cmluZyYgaW52b2NhdGlvbkVycm9yKQotewotICAgIGlmIChpbnZvY2F0
aW9uRXJyb3IubGVuZ3RoKCkpIHsKLSAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElk
LCBTZXJ2ZXJFcnJvciwgaW52b2NhdGlvbkVycm9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3BvbnNlTWVzc2FnZSA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRPYmplY3QoInJlc3Vs
dCIsIHJlc3VsdCk7Ci0gICAgcmVzcG9uc2VNZXNzYWdlLT5zZXROdW1iZXIoImlkIiwgY2FsbElk
KTsKLSAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCi0gICAgICAgIG1faW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQocmVzcG9uc2VNZXNzYWdl
LT50b0pTT05TdHJpbmcoKSk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OnJlcG9ydFByb3RvY29sRXJyb3IoY29uc3QgbG9uZyogY29uc3QgY2FsbElkLCBDb21tb25FcnJv
ckNvZGUgY29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpIGNvbnN0Ci17Ci0gICAgcmVw
b3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIGNvZGUsIGVycm9yTWVzc2FnZSwgMCk7Ci19Ci0KLXZv
aWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpyZXBvcnRQcm90b2NvbEVycm9yKGNv
bnN0IGxvbmcqIGNvbnN0IGNhbGxJZCwgQ29tbW9uRXJyb3JDb2RlIGNvZGUsIGNvbnN0IFN0cmlu
ZyYgZXJyb3JNZXNzYWdlLCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBkYXRhKSBjb25zdAot
ewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoVmVjdG9yPGludD4sc19jb21tb25FcnJvcnMsKTsK
LSAgICBpZiAoIXNfY29tbW9uRXJyb3JzLnNpemUoKSkgewotICAgICAgICBzX2NvbW1vbkVycm9y
cy5pbnNlcnQoUGFyc2VFcnJvciwgLTMyNzAwKTsKLSAgICAgICAgc19jb21tb25FcnJvcnMuaW5z
ZXJ0KEludmFsaWRSZXF1ZXN0LCAtMzI2MDApOwotICAgICAgICBzX2NvbW1vbkVycm9ycy5pbnNl
cnQoTWV0aG9kTm90Rm91bmQsIC0zMjYwMSk7Ci0gICAgICAgIHNfY29tbW9uRXJyb3JzLmluc2Vy
dChJbnZhbGlkUGFyYW1zLCAtMzI2MDIpOwotICAgICAgICBzX2NvbW1vbkVycm9ycy5pbnNlcnQo
SW50ZXJuYWxFcnJvciwgLTMyNjAzKTsKLSAgICAgICAgc19jb21tb25FcnJvcnMuaW5zZXJ0KFNl
cnZlckVycm9yLCAtMzIwMDApOwotICAgIH0KLSAgICBBU1NFUlQoY29kZSA+PTApOwotICAgIEFT
U0VSVCgodW5zaWduZWQpY29kZSA8IHNfY29tbW9uRXJyb3JzLnNpemUoKSk7Ci0gICAgQVNTRVJU
KHNfY29tbW9uRXJyb3JzW2NvZGVdKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBlcnJv
ciA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgZXJyb3ItPnNldE51bWJlcigiY29k
ZSIsIHNfY29tbW9uRXJyb3JzW2NvZGVdKTsKLSAgICBlcnJvci0+c2V0U3RyaW5nKCJtZXNzYWdl
IiwgZXJyb3JNZXNzYWdlKTsKLSAgICBBU1NFUlQoZXJyb3IpOwotICAgIGlmIChkYXRhKQotICAg
ICAgICBlcnJvci0+c2V0QXJyYXkoImRhdGEiLCBkYXRhKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBtZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtZXNzYWdl
LT5zZXRPYmplY3QoImVycm9yIiwgZXJyb3IucmVsZWFzZSgpKTsKLSAgICBpZiAoY2FsbElkKQot
ICAgICAgICBtZXNzYWdlLT5zZXROdW1iZXIoImlkIiwgKmNhbGxJZCk7Ci0gICAgZWxzZQotICAg
ICAgICBtZXNzYWdlLT5zZXRWYWx1ZSgiaWQiLCBJbnNwZWN0b3JWYWx1ZTo6bnVsbCgpKTsKLSAg
ICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCi0gICAgICAgIG1faW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQobWVzc2FnZS0+dG9KU09OU3RyaW5n
KCkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBSLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBWMD4K
LVIgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpnZXRQcm9wZXJ0eVZhbHVlSW1wbChJ
bnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZv
dW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMsIFYwIGluaXRpYWxfdmFsdWUsIGJv
b2wgKCphc19tZXRob2QpKEluc3BlY3RvclZhbHVlKiwgViopLCBjb25zdCBjaGFyKiB0eXBlX25h
bWUpCi17Ci0gICAgQVNTRVJUKHByb3RvY29sRXJyb3JzKTsKLQotICAgIGlmICh2YWx1ZUZvdW5k
KQotICAgICAgICAqdmFsdWVGb3VuZCA9IGZhbHNlOwotCi0gICAgViB2YWx1ZSA9IGluaXRpYWxf
dmFsdWU7Ci0KLSAgICBpZiAoIW9iamVjdCkgewotICAgICAgICBpZiAoIXZhbHVlRm91bmQpIHsK
LSAgICAgICAgICAgIC8vIFJlcXVpcmVkIHBhcmFtZXRlciBpbiBtaXNzaW5nIHBhcmFtcyBjb250
YWluZXIuCi0gICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZv
cm1hdCgiJ3BhcmFtcycgb2JqZWN0IG11c3QgY29udGFpbiByZXF1aXJlZCBwYXJhbWV0ZXIgJyVz
JyB3aXRoIHR5cGUgJyVzJy4iLCBuYW1lLnV0ZjgoKS5kYXRhKCksIHR5cGVfbmFtZSkpOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICB9Ci0KLSAgICBJbnNwZWN0b3JPYmpl
Y3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG9iamVjdC0+ZW5kKCk7Ci0gICAgSW5zcGVjdG9yT2Jq
ZWN0Ojpjb25zdF9pdGVyYXRvciB2YWx1ZUl0ZXJhdG9yID0gb2JqZWN0LT5maW5kKG5hbWUpOwot
Ci0gICAgaWYgKHZhbHVlSXRlcmF0b3IgPT0gZW5kKSB7Ci0gICAgICAgIGlmICghdmFsdWVGb3Vu
ZCkKLSAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0
KCJQYXJhbWV0ZXIgJyVzJyB3aXRoIHR5cGUgJyVzJyB3YXMgbm90IGZvdW5kLiIsIG5hbWUudXRm
OCgpLmRhdGEoKSwgdHlwZV9uYW1lKSk7Ci0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICB9Ci0K
LSAgICBpZiAoIWFzX21ldGhvZCh2YWx1ZUl0ZXJhdG9yLT52YWx1ZS5nZXQoKSwgJnZhbHVlKSkK
LSAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIlBhcmFt
ZXRlciAnJXMnIGhhcyB3cm9uZyB0eXBlLiBJdCBtdXN0IGJlICclcycuIiwgbmFtZS51dGY4KCku
ZGF0YSgpLCB0eXBlX25hbWUpKTsKLSAgICBlbHNlCi0gICAgICAgIGlmICh2YWx1ZUZvdW5kKQot
ICAgICAgICAgICAgKnZhbHVlRm91bmQgPSB0cnVlOwotICAgIHJldHVybiB2YWx1ZTsKLX0KLQot
c3RydWN0IEFzTWV0aG9kQnJpZGdlcyB7Ci0gICAgc3RhdGljIGJvb2wgYXNJbnQoSW5zcGVjdG9y
VmFsdWUqIHZhbHVlLCBpbnQqIG91dHB1dCkgeyByZXR1cm4gdmFsdWUtPmFzTnVtYmVyKG91dHB1
dCk7IH0KLSAgICBzdGF0aWMgYm9vbCBhc0RvdWJsZShJbnNwZWN0b3JWYWx1ZSogdmFsdWUsIGRv
dWJsZSogb3V0cHV0KSB7IHJldHVybiB2YWx1ZS0+YXNOdW1iZXIob3V0cHV0KTsgfQotICAgIHN0
YXRpYyBib29sIGFzU3RyaW5nKEluc3BlY3RvclZhbHVlKiB2YWx1ZSwgU3RyaW5nKiBvdXRwdXQp
IHsgcmV0dXJuIHZhbHVlLT5hc1N0cmluZyhvdXRwdXQpOyB9Ci0gICAgc3RhdGljIGJvb2wgYXNC
b29sZWFuKEluc3BlY3RvclZhbHVlKiB2YWx1ZSwgYm9vbCogb3V0cHV0KSB7IHJldHVybiB2YWx1
ZS0+YXNCb29sZWFuKG91dHB1dCk7IH0KLSAgICBzdGF0aWMgYm9vbCBhc09iamVjdChJbnNwZWN0
b3JWYWx1ZSogdmFsdWUsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBvdXRwdXQpIHsgcmV0dXJu
IHZhbHVlLT5hc09iamVjdChvdXRwdXQpOyB9Ci0gICAgc3RhdGljIGJvb2wgYXNBcnJheShJbnNw
ZWN0b3JWYWx1ZSogdmFsdWUsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIG91dHB1dCkgeyByZXR1
cm4gdmFsdWUtPmFzQXJyYXkob3V0cHV0KTsgfQotfTsKLQotaW50IEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVySW1wbDo6Z2V0SW50KEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJp
bmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9y
cykKLXsKLSAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZUltcGw8aW50LCBpbnQsIGludD4ob2Jq
ZWN0LCBuYW1lLCB2YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9ycywgMCwgQXNNZXRob2RCcmlkZ2Vz
Ojphc0ludCwgIk51bWJlciIpOwotfQotCi1kb3VibGUgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXJJbXBsOjpnZXREb3VibGUoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYg
bmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKQot
ewotICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlSW1wbDxkb3VibGUsIGRvdWJsZSwgZG91Ymxl
PihvYmplY3QsIG5hbWUsIHZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzLCAwLCBBc01ldGhvZEJy
aWRnZXM6OmFzRG91YmxlLCAiTnVtYmVyIik7Ci19Ci0KLVN0cmluZyBJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlckltcGw6OmdldFN0cmluZyhJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xF
cnJvcnMpCi17Ci0gICAgcmV0dXJuIGdldFByb3BlcnR5VmFsdWVJbXBsPFN0cmluZywgU3RyaW5n
LCBTdHJpbmc+KG9iamVjdCwgbmFtZSwgdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnMsICIiLCBB
c01ldGhvZEJyaWRnZXM6OmFzU3RyaW5nLCAiU3RyaW5nIik7Ci19Ci0KLWJvb2wgSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXJJbXBsOjpnZXRCb29sZWFuKEluc3BlY3Rvck9iamVjdCogb2JqZWN0
LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBw
cm90b2NvbEVycm9ycykKLXsKLSAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZUltcGw8Ym9vbCwg
Ym9vbCwgYm9vbD4ob2JqZWN0LCBuYW1lLCB2YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9ycywgZmFs
c2UsIEFzTWV0aG9kQnJpZGdlczo6YXNCb29sZWFuLCAiQm9vbGVhbiIpOwotfQotCi1QYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpnZXRP
YmplY3QoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCog
dmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKQotewotICAgIHJldHVy
biBnZXRQcm9wZXJ0eVZhbHVlSW1wbDxQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4sIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+LCBJbnNwZWN0b3JPYmplY3QqPihvYmplY3QsIG5hbWUsIHZhbHVl
Rm91bmQsIHByb3RvY29sRXJyb3JzLCAwLCBBc01ldGhvZEJyaWRnZXM6OmFzT2JqZWN0LCAiT2Jq
ZWN0Iik7Ci19Ci0KLVBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVySW1wbDo6Z2V0QXJyYXkoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0
cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJy
b3JzKQotewotICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlSW1wbDxQYXNzUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiwgUmVmUHRyPEluc3BlY3RvckFycmF5PiwgSW5zcGVjdG9yQXJyYXkqPihvYmpl
Y3QsIG5hbWUsIHZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzLCAwLCBBc01ldGhvZEJyaWRnZXM6
OmFzQXJyYXksICJBcnJheSIpOwotfQotCi1JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q2Fs
bGJhY2tCYXNlOjpDYWxsYmFja0Jhc2UoUGFzc1JlZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlckltcGw+IGJhY2tlbmRJbXBsLCBpbnQgaWQpCi0gICAgOiBtX2JhY2tlbmRJbXBsKGJhY2tl
bmRJbXBsKSwgbV9pZChpZCksIG1fYWxyZWFkeVNlbnQoZmFsc2UpIHt9Ci0KLUluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2U6On5DYWxsYmFja0Jhc2UoKSB7fQotCi12b2lk
IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2U6OnNlbmRGYWlsdXJlKGNv
bnN0IEVycm9yU3RyaW5nJiBlcnJvcikKLXsKLSAgICBBU1NFUlQoZXJyb3IubGVuZ3RoKCkpOwot
ICAgIHNlbmRJZkFjdGl2ZSgwLCBlcnJvcik7Ci19Ci0KLWJvb2wgSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6OkNhbGxiYWNrQmFzZTo6aXNBY3RpdmUoKQotewotICAgIHJldHVybiAhbV9hbHJl
YWR5U2VudCAmJiBtX2JhY2tlbmRJbXBsLT5pc0FjdGl2ZSgpOwotfQotCi12b2lkIEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2U6OnNlbmRJZkFjdGl2ZShQYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcGFydGlhbE1lc3NhZ2UsIGNvbnN0IEVycm9yU3RyaW5nJiBpbnZv
Y2F0aW9uRXJyb3IpCi17Ci0gICAgaWYgKG1fYWxyZWFkeVNlbnQpCi0gICAgICAgIHJldHVybjsK
LSAgICBtX2JhY2tlbmRJbXBsLT5zZW5kUmVzcG9uc2UobV9pZCwgcGFydGlhbE1lc3NhZ2UsIGlu
dm9jYXRpb25FcnJvcik7Ci0gICAgbV9hbHJlYWR5U2VudCA9IHRydWU7Ci19Ci0KLUNPTVBJTEVf
QVNTRVJUKHN0YXRpY19jYXN0PGludD4oSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmtNZXRo
b2ROYW1lc0VudW1TaXplKSA9PSBXVEZfQVJSQVlfTEVOR1RIKEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpjb21tYW5kTmFtZXMpLCBjb21tYW5kX25hbWVfYXJyYXlfcHJvYmxlbSk7Ci0KIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCkBAIC02
MDEsMTIgKzMxNywxMiBAQCBwdWJsaWM6CiAgICAgICAgIEFycmF5SXRlbUhlbHBlcjxUPjo6VHJh
aXRzOjpwdXNoUmF3KHRoaXMtPm9wZW5BY2Nlc3NvcnMoKSwgdmFsdWUpOwogICAgIH0KIAotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEFycmF5PFQ+ID4gY3JlYXRlKCkKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxBcnJheTxUPj4gY3JlYXRlKCkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgQXJyYXk8VD4oKSk7CiAgICAgfQogCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8QXJyYXk8VD4g
PiBydW50aW1lQ2FzdChQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSkKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxBcnJheTxUPj4gcnVudGltZUNhc3QoUGFzc1JlZlB0cjxJbnNwZWN0b3JW
YWx1ZT4gdmFsdWUpCiAgICAgewogICAgICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFycmF5
OwogICAgICAgICBib29sIGNhc3RSZXMgPSB2YWx1ZS0+YXNBcnJheSgmYXJyYXkpOwpAQCAtNzY1
LDkgKzQ4MSw5IEBAIHN0cnVjdCBBcnJheUl0ZW1IZWxwZXI8SW5zcGVjdG9yQXJyYXk+IHsKIH07
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgQXJyYXlJdGVtSGVscGVyPFR5cGVCdWls
ZGVyOjpBcnJheTxUPiA+IHsKK3N0cnVjdCBBcnJheUl0ZW1IZWxwZXI8VHlwZUJ1aWxkZXI6OkFy
cmF5PFQ+PiB7CiAgICAgc3RydWN0IFRyYWl0cyB7Ci0gICAgICAgIHN0YXRpYyB2b2lkIHB1c2hS
ZWZQdHIoSW5zcGVjdG9yQXJyYXkqIGFycmF5LCBQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJh
eTxUPiA+IHZhbHVlKQorICAgICAgICBzdGF0aWMgdm9pZCBwdXNoUmVmUHRyKEluc3BlY3RvckFy
cmF5KiBhcnJheSwgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VD4+IHZhbHVlKQogICAg
ICAgICB7CiAgICAgICAgICAgICBhcnJheS0+cHVzaFZhbHVlKHZhbHVlKTsKICAgICAgICAgfQpA
QCAtODUzLDcgKzU2OSw3IEBAICRkb21haW5Jbml0aWFsaXplcnMKICIiIikKIAogcGFyYW1fY29u
dGFpbmVyX2FjY2Vzc19jb2RlID0gIiIiCi0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFy
YW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7
CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gbWVzc2FnZS5n
ZXRPYmplY3QoInBhcmFtcyIpOwogICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVy
UHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgIEluc3BlY3RvckFycmF5KiBwcm90b2Nv
bEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogIiIiCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmNwcAppbmRleCA0ZWFkZGU0Li43YWMzMzBhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5jcHAKQEAgLTk2LDEyICs5
NiwxMyBAQCB2b2lkIEluc3BlY3RvckFnZW50OjpkaWRDbGVhcldpbmRvd09iamVjdEluV29ybGQo
RnJhbWUqIGZyYW1lLCBET01XcmFwcGVyV29ybGQmCiB2b2lkIEluc3BlY3RvckFnZW50OjpkaWRD
cmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBmcm9udGVu
ZENoYW5uZWwsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcikK
IHsKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlciA9IHN0ZDo6bWFrZV91bmlxdWU8SW5zcGVjdG9y
SW5zcGVjdG9yRnJvbnRlbmREaXNwYXRjaGVyPihmcm9udGVuZENoYW5uZWwpOwotICAgIGJhY2tl
bmREaXNwYXRjaGVyLT5yZWdpc3RlckFnZW50KHRoaXMpOworICAgIG1fYmFja2VuZERpc3BhdGNo
ZXIgPSBJbnNwZWN0b3JJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKGJhY2tlbmRE
aXNwYXRjaGVyLCB0aGlzKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JBZ2VudDo6d2lsbERlc3Ryb3lG
cm9udGVuZEFuZEJhY2tlbmQoKQogewogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyID0gbnVsbHB0
cjsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLmNsZWFyKCk7CiAKICAgICBtX3BlbmRpbmdFdmFs
dWF0ZVRlc3RDb21tYW5kcy5jbGVhcigpOwogICAgIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLT5k
aXNjYXJkSW5qZWN0ZWRTY3JpcHRzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JBZ2VudC5oCmluZGV4IGY4ZjNiMDYuLjkxMTE4OWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JBZ2VudC5oCkBAIC01MSw3ICs1MSw3IEBAIGNsYXNzIFBhZ2U7CiAKIHR5
cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogCi1jbGFzcyBJbnNwZWN0b3JBZ2VudCA6IHB1Ymxp
YyBJbnNwZWN0b3JCYXNlQWdlbnQsIHB1YmxpYyBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
SW5zcGVjdG9yQ29tbWFuZEhhbmRsZXIgeworY2xhc3MgSW5zcGVjdG9yQWdlbnQgOiBwdWJsaWMg
SW5zcGVjdG9yQmFzZUFnZW50LCBwdWJsaWMgSW5zcGVjdG9ySW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbnNwZWN0b3JBZ2VudCk7
CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NPd25QdHI8SW5zcGVjdG9yQWdlbnQ+IGNyZWF0ZShQ
YWdlKiBwYWdlLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVkU2NyaXB0TWFuYWdlciwg
SW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cykKQEAgLTkyLDYgKzkyLDcg
QEAgcHJpdmF0ZToKIAogICAgIFBhZ2UqIG1faW5zcGVjdGVkUGFnZTsKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8SW5zcGVjdG9ySW5zcGVjdG9yRnJvbnRlbmREaXNwYXRjaGVyPiBtX2Zyb250ZW5kRGlz
cGF0Y2hlcjsKKyAgICBSZWZQdHI8SW5zcGVjdG9ySW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+
IG1fYmFja2VuZERpc3BhdGNoZXI7CiAgICAgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBtX2luamVj
dGVkU2NyaXB0TWFuYWdlcjsKIAogICAgIFZlY3RvcjxwYWlyPGxvbmcsIFN0cmluZz4+IG1fcGVu
ZGluZ0V2YWx1YXRlVGVzdENvbW1hbmRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckFsbEluT25lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JBbGxJbk9uZS5jcHAKaW5kZXggMmIzZTE1OS4uM2JlMDIzZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFsbEluT25lLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQWxsSW5PbmUuY3BwCkBAIC0zOSw2ICszOSw3
IEBACiAjaW5jbHVkZSAiSW5zcGVjdG9yQWdlbnQuY3BwIgogI2luY2x1ZGUgIkluc3BlY3RvckFn
ZW50UmVnaXN0cnkuY3BwIgogI2luY2x1ZGUgIkluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2Vu
dC5jcHAiCisjaW5jbHVkZSAiSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3BwIgogI2luY2x1
ZGUgIkluc3BlY3RvckNTU0FnZW50LmNwcCIKICNpbmNsdWRlICJJbnNwZWN0b3JDYW52YXNBZ2Vu
dC5jcHAiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ2xpZW50LmNwcCIKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5j
cHAKaW5kZXggNzVmMjVhZS4uMDRjYzUzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHAKQEAgLTUz
LDEyICs1MywxMyBAQCBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6Okluc3BlY3RvckFw
cGxpY2F0aW9uQ2FjaGVBZ2VudChJbnN0cnVtZW50aW5nQWdlbgogdm9pZCBJbnNwZWN0b3JBcHBs
aWNhdGlvbkNhY2hlQWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwqIGZyb250ZW5kQ2hhbm5lbCwgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIqIGJhY2tlbmREaXNwYXRjaGVyKQogewogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyID0gc3Rk
OjptYWtlX3VuaXF1ZTxJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlRnJvbnRlbmREaXNwYXRjaGVy
Pihmcm9udGVuZENoYW5uZWwpOwotICAgIGJhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckFnZW50
KHRoaXMpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXIgPSBJbnNwZWN0b3JBcHBsaWNhdGlvbkNh
Y2hlQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShiYWNrZW5kRGlzcGF0Y2hlciwgdGhpcyk7CiB9
CiAKIHZvaWQgSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50Ojp3aWxsRGVzdHJveUZyb250
ZW5kQW5kQmFja2VuZCgpCiB7CiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXIgPSBudWxscHRyOwor
ICAgIG1fYmFja2VuZERpc3BhdGNoZXIuY2xlYXIoKTsKIAogICAgIG1faW5zdHJ1bWVudGluZ0Fn
ZW50cy0+c2V0SW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50KDApOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2Vu
dC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVB
Z2VudC5oCmluZGV4IGU0ZmFhMTEuLmViMDZjOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmgKQEAgLTQ4
LDcgKzQ4LDcgQEAgY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKIAogdHlwZWRlZiBTdHJpbmcgRXJy
b3JTdHJpbmc7CiAKLWNsYXNzIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudCA6IHB1Ymxp
YyBJbnNwZWN0b3JCYXNlQWdlbnQsIHB1YmxpYyBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
QXBwbGljYXRpb25DYWNoZUNvbW1hbmRIYW5kbGVyIHsKK2NsYXNzIEluc3BlY3RvckFwcGxpY2F0
aW9uQ2FjaGVBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3JCYXNlQWdlbnQsIHB1YmxpYyBJbnNwZWN0
b3JBcHBsaWNhdGlvbkNhY2hlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQpOyBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc093blB0cjxJbnNwZWN0b3JB
cHBsaWNhdGlvbkNhY2hlQWdlbnQ+IGNyZWF0ZShJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVt
ZW50aW5nQWdlbnRzLCBJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCkKQEAgLTgxLDYgKzgx
LDcgQEAgcHJpdmF0ZToKIAogICAgIEluc3BlY3RvclBhZ2VBZ2VudCogbV9wYWdlQWdlbnQ7CiAg
ICAgc3RkOjp1bmlxdWVfcHRyPEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVGcm9udGVuZERpc3Bh
dGNoZXI+IG1fZnJvbnRlbmREaXNwYXRjaGVyOworICAgIFJlZlB0cjxJbnNwZWN0b3JBcHBsaWNh
dGlvbkNhY2hlQmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi44ZjJmYjc1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNwcApAQCAtMCwwICsxLDI3NyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cnMuaCIKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlICJJbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIKKyNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNr
QmFzZTo6Q2FsbGJhY2tCYXNlKFBhc3NSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+
IGJhY2tlbmREaXNwYXRjaGVyLCBpbnQgaWQpCisgICAgOiBtX2JhY2tlbmREaXNwYXRjaGVyKGJh
Y2tlbmREaXNwYXRjaGVyKQorICAgICwgbV9pZChpZCkKKyAgICAsIG1fYWxyZWFkeVNlbnQoZmFs
c2UpCit7Cit9CisKK2Jvb2wgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFz
ZTo6aXNBY3RpdmUoKSBjb25zdAoreworICAgIHJldHVybiAhbV9hbHJlYWR5U2VudCAmJiBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5pc0FjdGl2ZSgpOworfQorCit2b2lkIEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOjpDYWxsYmFja0Jhc2U6OnNlbmRGYWlsdXJlKGNvbnN0IEVycm9yU3RyaW5nJiBl
cnJvcikKK3sKKyAgICBBU1NFUlQoZXJyb3IubGVuZ3RoKCkpOworICAgIHNlbmRJZkFjdGl2ZShu
dWxscHRyLCBlcnJvcik7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNh
bGxiYWNrQmFzZTo6c2VuZElmQWN0aXZlKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJ0
aWFsTWVzc2FnZSwgY29uc3QgRXJyb3JTdHJpbmcmIGludm9jYXRpb25FcnJvcikKK3sKKyAgICBp
ZiAobV9hbHJlYWR5U2VudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+c2VuZFJlc3BvbnNlKG1faWQsIHBhcnRpYWxNZXNzYWdlLCBpbnZvY2F0aW9uRXJyb3Ip
OworICAgIG1fYWxyZWFkeVNlbnQgPSB0cnVlOworfQorCitQYXNzUmVmUHRyPEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyPiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQoreworICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIoaW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnJl
Z2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbihjb25zdCBTdHJpbmcmIGRvbWFpbiwgSW5zcGVjdG9y
U3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIqIGRpc3BhdGNoZXIpCit7CisgICAgYXV0byBy
ZXN1bHQgPSBtX2Rpc3BhdGNoZXJzLmFkZChkb21haW4sIGRpc3BhdGNoZXIpOworICAgIEFTU0VS
VF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAg
ICBSZWY8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOworCisgICAg
UmVmUHRyPEluc3BlY3RvclZhbHVlPiBwYXJzZWRNZXNzYWdlID0gSW5zcGVjdG9yVmFsdWU6OnBh
cnNlSlNPTihtZXNzYWdlKTsKKyAgICBpZiAoIXBhcnNlZE1lc3NhZ2UpIHsKKyAgICAgICAgcmVw
b3J0UHJvdG9jb2xFcnJvcihudWxscHRyLCBQYXJzZUVycm9yLCAiTWVzc2FnZSBtdXN0IGJlIGlu
IEpTT04gZm9ybWF0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBtZXNzYWdlT2JqZWN0ID0gcGFyc2VkTWVzc2FnZS0+YXNPYmplY3QoKTsK
KyAgICBpZiAoIW1lc3NhZ2VPYmplY3QpIHsKKyAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihu
dWxscHRyLCBJbnZhbGlkUmVxdWVzdCwgIk1lc3NhZ2UgbXVzdCBiZSBhIEpTT05pZmllZCBvYmpl
Y3QiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1
ZT4gY2FsbElkVmFsdWUgPSBtZXNzYWdlT2JqZWN0LT5nZXQoImlkIik7CisgICAgaWYgKCFjYWxs
SWRWYWx1ZSkgeworICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKG51bGxwdHIsIEludmFsaWRS
ZXF1ZXN0LCAiJ2lkJyBwcm9wZXJ0eSB3YXMgbm90IGZvdW5kIik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBsb25nIGNhbGxJZCA9IDA7CisgICAgaWYgKCFjYWxsSWRWYWx1ZS0+YXNO
dW1iZXIoJmNhbGxJZCkpIHsKKyAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihudWxscHRyLCBJ
bnZhbGlkUmVxdWVzdCwgIlRoZSB0eXBlIG9mICdpZCcgcHJvcGVydHkgbXVzdCBiZSBudW1iZXIi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4g
bWV0aG9kVmFsdWUgPSBtZXNzYWdlT2JqZWN0LT5nZXQoIm1ldGhvZCIpOworICAgIGlmICghbWV0
aG9kVmFsdWUpIHsKKyAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnZhbGlk
UmVxdWVzdCwgIidtZXRob2QnIHByb3BlcnR5IHdhc24ndCBmb3VuZCIpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgU3RyaW5nIG1ldGhvZDsKKyAgICBpZiAoIW1ldGhvZFZhbHVlLT5h
c1N0cmluZygmbWV0aG9kKSkgeworICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQs
IEludmFsaWRSZXF1ZXN0LCAiVGhlIHR5cGUgb2YgJ21ldGhvZCcgcHJvcGVydHkgbXVzdCBiZSBz
dHJpbmciKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNpemVfdCBwb3NpdGlvbiA9
IG1ldGhvZC5maW5kKCcuJyk7CisgICAgaWYgKHBvc2l0aW9uID09IFdURjo6bm90Rm91bmQpIHsK
KyAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnZhbGlkUmVxdWVzdCwgIlRo
ZSAnbWV0aG9kJyBwcm9wZXJ0eSB3YXMgZm9ybWF0dGVkIGluY29ycmVjdGx5LiBJdCBzaG91bGQg
YmUgJ0RvbWFpbi5tZXRob2QnIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBTdHJp
bmcgZG9tYWluID0gbWV0aG9kLnN1YnN0cmluZygwLCBwb3NpdGlvbik7CisgICAgSW5zcGVjdG9y
U3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIqIGRvbWFpbkRpc3BhdGNoZXIgPSBtX2Rpc3Bh
dGNoZXJzLmdldChkb21haW4pOworICAgIGlmICghZG9tYWluRGlzcGF0Y2hlcikgeworICAgICAg
ICByZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIE1ldGhvZE5vdEZvdW5kLCAiJyIgKyBkb21h
aW4gKyAiJyBkb21haW4gd2FzIG5vdCBmb3VuZCIpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgU3RyaW5nIGRvbWFpbk1ldGhvZCA9IG1ldGhvZC5zdWJzdHJpbmcocG9zaXRpb24gKyAx
KTsKKyAgICBkb21haW5EaXNwYXRjaGVyLT5kaXNwYXRjaChjYWxsSWQsIGRvbWFpbk1ldGhvZCwg
bWVzc2FnZU9iamVjdC5yZWxlYXNlKCkpOworfQorCisvLyBGSVhNRTogUmVtb3ZlIHRoaXMgYnkg
YnVpbGRpbmcgYmV0dGVyIGdlbmVyYXRlZCBjb2RlLgordm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjo6c2VuZFJlc3BvbnNlKGxvbmcgY2FsbElkLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gcmVzdWx0LCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycywg
Y29uc3QgRXJyb3JTdHJpbmcmIGludm9jYXRpb25FcnJvcikKK3sKKyAgICBpZiAocHJvdG9jb2xF
cnJvcnMtPmxlbmd0aCgpKSB7CisgICAgICAgIFN0cmluZyBlcnJvck1lc3NhZ2UgPSBTdHJpbmc6
OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kID8/PyBjYW4ndCBiZSBwcm9jZXNzZWQi
KTsKKyAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnZhbGlkUGFyYW1zLCBl
cnJvck1lc3NhZ2UsIHByb3RvY29sRXJyb3JzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgaW52b2NhdGlvbkVycm9yKTsKK30KKwor
dm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6c2VuZFJlc3BvbnNlKGxvbmcgY2FsbElk
LCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0LCBjb25zdCBFcnJvclN0cmluZyYg
aW52b2NhdGlvbkVycm9yKQoreworICAgIGlmICghbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmIChpbnZvY2F0aW9uRXJyb3IubGVuZ3RoKCkpIHsK
KyAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBTZXJ2ZXJFcnJvciwgaW52b2Nh
dGlvbkVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHJlc3BvbnNlTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Cisg
ICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRPYmplY3QoInJlc3VsdCIsIHJlc3VsdCk7CisgICAgcmVz
cG9uc2VNZXNzYWdlLT5zZXROdW1iZXIoImlkIiwgY2FsbElkKTsKKyAgICBtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHJlc3BvbnNlTWVzc2FnZS0+dG9K
U09OU3RyaW5nKCkpOworfQorCit2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpyZXBv
cnRQcm90b2NvbEVycm9yKGNvbnN0IGxvbmcqIGNvbnN0IGNhbGxJZCwgQ29tbW9uRXJyb3JDb2Rl
IGVycm9yQ29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpIGNvbnN0Cit7CisgICAgcmVw
b3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIGVycm9yQ29kZSwgZXJyb3JNZXNzYWdlLCBudWxscHRy
KTsKK30KKwordm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6cmVwb3J0UHJvdG9jb2xF
cnJvcihjb25zdCBsb25nKiBjb25zdCBjYWxsSWQsIENvbW1vbkVycm9yQ29kZSBlcnJvckNvZGUs
IGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBk
YXRhKSBjb25zdAoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoVmVjdG9yPGludD4sIGNvbW1v
bkVycm9ycywgKCkpOworICAgIGlmICghY29tbW9uRXJyb3JzLnNpemUoKSkgeworICAgICAgICBj
b21tb25FcnJvcnMuaW5zZXJ0KFBhcnNlRXJyb3IsIC0zMjcwMCk7CisgICAgICAgIGNvbW1vbkVy
cm9ycy5pbnNlcnQoSW52YWxpZFJlcXVlc3QsIC0zMjYwMCk7CisgICAgICAgIGNvbW1vbkVycm9y
cy5pbnNlcnQoTWV0aG9kTm90Rm91bmQsIC0zMjYwMSk7CisgICAgICAgIGNvbW1vbkVycm9ycy5p
bnNlcnQoSW52YWxpZFBhcmFtcywgLTMyNjAyKTsKKyAgICAgICAgY29tbW9uRXJyb3JzLmluc2Vy
dChJbnRlcm5hbEVycm9yLCAtMzI2MDMpOworICAgICAgICBjb21tb25FcnJvcnMuaW5zZXJ0KFNl
cnZlckVycm9yLCAtMzIwMDApOworICAgIH0KKworICAgIEFTU0VSVChlcnJvckNvZGUgPj0gMCk7
CisgICAgQVNTRVJUKCh1bnNpZ25lZCllcnJvckNvZGUgPCBjb21tb25FcnJvcnMuc2l6ZSgpKTsK
KyAgICBBU1NFUlQoY29tbW9uRXJyb3JzW2Vycm9yQ29kZV0pOworCisgICAgaWYgKCFtX2luc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gZXJyb3IgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIGVycm9y
LT5zZXROdW1iZXIoImNvZGUiLCBjb21tb25FcnJvcnNbZXJyb3JDb2RlXSk7CisgICAgZXJyb3It
PnNldFN0cmluZygibWVzc2FnZSIsIGVycm9yTWVzc2FnZSk7CisgICAgaWYgKGRhdGEpCisgICAg
ICAgIGVycm9yLT5zZXRBcnJheSgiZGF0YSIsIGRhdGEpOworCisgICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gbWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgbWVzc2Fn
ZS0+c2V0T2JqZWN0KCJlcnJvciIsIGVycm9yLnJlbGVhc2UoKSk7CisgICAgaWYgKGNhbGxJZCkK
KyAgICAgICAgbWVzc2FnZS0+c2V0TnVtYmVyKCJpZCIsICpjYWxsSWQpOworICAgIGVsc2UKKyAg
ICAgICAgbWVzc2FnZS0+c2V0VmFsdWUoImlkIiwgSW5zcGVjdG9yVmFsdWU6Om51bGwoKSk7CisK
KyAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKG1l
c3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVmFs
dWVUeXBlLCB0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIERlZmF1bHRWYWx1ZVR5cGU+CitS
ZXR1cm5WYWx1ZVR5cGUgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFByb3BlcnR5VmFs
dWUoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFs
dWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzLCBEZWZhdWx0VmFsdWVUeXBl
IGRlZmF1bHRWYWx1ZSwgYm9vbCAoKmFzTWV0aG9kKShJbnNwZWN0b3JWYWx1ZSosIFZhbHVlVHlw
ZSopLCBjb25zdCBjaGFyKiB0eXBlTmFtZSkKK3sKKyAgICBBU1NFUlQocHJvdG9jb2xFcnJvcnMp
OworCisgICAgVmFsdWVUeXBlIHZhbHVlID0gZGVmYXVsdFZhbHVlOworICAgIGlmICh2YWx1ZUZv
dW5kKQorICAgICAgICAqdmFsdWVGb3VuZCA9IGZhbHNlOworCisgICAgaWYgKCFvYmplY3QpIHsK
KyAgICAgICAgaWYgKCF2YWx1ZUZvdW5kKQorICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1
c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIidwYXJhbXMnIG9iamVjdCBtdXN0IGNvbnRhaW4gcmVx
dWlyZWQgcGFyYW1ldGVyICclcycgd2l0aCB0eXBlICclcycuIiwgbmFtZS51dGY4KCkuZGF0YSgp
LCB0eXBlTmFtZSkpOworICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAgSW5zcGVj
dG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBvYmplY3QtPmVuZCgpOworICAgIEluc3Bl
Y3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgdmFsdWVJdGVyYXRvciA9IG9iamVjdC0+ZmluZChu
YW1lKTsKKyAgICBpZiAodmFsdWVJdGVyYXRvciA9PSBlbmQpIHsKKyAgICAgICAgaWYgKCF2YWx1
ZUZvdW5kKQorICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpm
b3JtYXQoIlBhcmFtZXRlciAnJXMnIHdpdGggdHlwZSAnJXMnIHdhcyBub3QgZm91bmQuIiwgbmFt
ZS51dGY4KCkuZGF0YSgpLCB0eXBlTmFtZSkpOworICAgICAgICByZXR1cm4gdmFsdWU7CisgICAg
fQorCisgICAgaWYgKCFhc01ldGhvZCh2YWx1ZUl0ZXJhdG9yLT52YWx1ZS5nZXQoKSwgJnZhbHVl
KSkgeworICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgi
UGFyYW1ldGVyICclcycgaGFzIHdyb25nIHR5cGUuIEl0IG11c3QgYmUgJyVzJy4iLCBuYW1lLnV0
ZjgoKS5kYXRhKCksIHR5cGVOYW1lKSk7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisK
KyAgICBpZiAodmFsdWVGb3VuZCkKKyAgICAgICAgKnZhbHVlRm91bmQgPSB0cnVlOworCisgICAg
cmV0dXJuIHZhbHVlOworfQorCitzdHJ1Y3QgQXNNZXRob2RCcmlkZ2VzIHsKKyAgICBzdGF0aWMg
Ym9vbCBhc0ludChJbnNwZWN0b3JWYWx1ZSogdmFsdWUsIGludCogb3V0cHV0KSB7IHJldHVybiB2
YWx1ZS0+YXNOdW1iZXIob3V0cHV0KTsgfQorICAgIHN0YXRpYyBib29sIGFzRG91YmxlKEluc3Bl
Y3RvclZhbHVlKiB2YWx1ZSwgZG91YmxlKiBvdXRwdXQpIHsgcmV0dXJuIHZhbHVlLT5hc051bWJl
cihvdXRwdXQpOyB9CisgICAgc3RhdGljIGJvb2wgYXNTdHJpbmcoSW5zcGVjdG9yVmFsdWUqIHZh
bHVlLCBTdHJpbmcqIG91dHB1dCkgeyByZXR1cm4gdmFsdWUtPmFzU3RyaW5nKG91dHB1dCk7IH0K
KyAgICBzdGF0aWMgYm9vbCBhc0Jvb2xlYW4oSW5zcGVjdG9yVmFsdWUqIHZhbHVlLCBib29sKiBv
dXRwdXQpIHsgcmV0dXJuIHZhbHVlLT5hc0Jvb2xlYW4ob3V0cHV0KTsgfQorICAgIHN0YXRpYyBi
b29sIGFzT2JqZWN0KEluc3BlY3RvclZhbHVlKiB2YWx1ZSwgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4qIG91dHB1dCkgeyByZXR1cm4gdmFsdWUtPmFzT2JqZWN0KG91dHB1dCk7IH0KKyAgICBzdGF0
aWMgYm9vbCBhc0FycmF5KEluc3BlY3RvclZhbHVlKiB2YWx1ZSwgUmVmUHRyPEluc3BlY3RvckFy
cmF5Piogb3V0cHV0KSB7IHJldHVybiB2YWx1ZS0+YXNBcnJheShvdXRwdXQpOyB9Cit9OworCitp
bnQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEludChJbnNwZWN0b3JPYmplY3QqIG9i
amVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJh
eSogcHJvdG9jb2xFcnJvcnMpCit7CisgICAgcmV0dXJuIGdldFByb3BlcnR5VmFsdWU8aW50LCBp
bnQsIGludD4ob2JqZWN0LCBuYW1lLCB2YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9ycywgMCwgQXNN
ZXRob2RCcmlkZ2VzOjphc0ludCwgIk51bWJlciIpOworfQorCitkb3VibGUgSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6OmdldERvdWJsZShJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xF
cnJvcnMpCit7CisgICAgcmV0dXJuIGdldFByb3BlcnR5VmFsdWU8ZG91YmxlLCBkb3VibGUsIGRv
dWJsZT4ob2JqZWN0LCBuYW1lLCB2YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9ycywgMCwgQXNNZXRo
b2RCcmlkZ2VzOjphc0RvdWJsZSwgIk51bWJlciIpOworfQorCitTdHJpbmcgSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xF
cnJvcnMpCit7CisgICAgcmV0dXJuIGdldFByb3BlcnR5VmFsdWU8U3RyaW5nLCBTdHJpbmcsIFN0
cmluZz4ob2JqZWN0LCBuYW1lLCB2YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9ycywgIiIsIEFzTWV0
aG9kQnJpZGdlczo6YXNTdHJpbmcsICJTdHJpbmciKTsKK30KKworYm9vbCBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjo6Z2V0Qm9vbGVhbihJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xF
cnJvcnMpCit7CisgICAgcmV0dXJuIGdldFByb3BlcnR5VmFsdWU8Ym9vbCwgYm9vbCwgYm9vbD4o
b2JqZWN0LCBuYW1lLCB2YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9ycywgZmFsc2UsIEFzTWV0aG9k
QnJpZGdlczo6YXNCb29sZWFuLCAiQm9vbGVhbiIpOworfQorCitQYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldE9iamVjdChJbnNwZWN0b3JP
YmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNw
ZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMpCit7CisgICAgcmV0dXJuIGdldFByb3BlcnR5VmFs
dWU8UGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+LCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Piwg
SW5zcGVjdG9yT2JqZWN0Kj4ob2JqZWN0LCBuYW1lLCB2YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9y
cywgbnVsbHB0ciwgQXNNZXRob2RCcmlkZ2VzOjphc09iamVjdCwgIk9iamVjdCIpOworfQorCitQ
YXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0
QXJyYXkoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCog
dmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKQoreworICAgIHJldHVy
biBnZXRQcm9wZXJ0eVZhbHVlPFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+LCBSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+LCBJbnNwZWN0b3JBcnJheSo+KG9iamVjdCwgbmFtZSwgdmFsdWVGb3VuZCwg
cHJvdG9jb2xFcnJvcnMsIG51bGxwdHIsIEFzTWV0aG9kQnJpZGdlczo6YXNBcnJheSwgIkFycmF5
Iik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQ
RUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwMDg1
NmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXIuaApAQCAtMCwwICsxLDExMyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXJfaAorI2RlZmluZSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcl9oCisK
KyNpbmNsdWRlICJJbnNwZWN0b3JUeXBlQnVpbGRlci5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjsKK2NsYXNzIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKK3R5cGVkZWYg
U3RyaW5nIEVycm9yU3RyaW5nOworCitjbGFzcyBJbnNwZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5k
RGlzcGF0Y2hlciA6IHB1YmxpYyBSZWZDb3VudGVkPEluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tl
bmREaXNwYXRjaGVyPiB7CitwdWJsaWM6CisgICAgSW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2Vu
ZERpc3BhdGNoZXIoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIgKmJhY2tlbmREaXNwYXRjaGVy
KSA6IG1fYmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpIHsgfQorICAgIHZpcnR1
YWwgfkluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKCkgeyB9CisgICAgdmly
dHVhbCB2b2lkIGRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpID0gMDsKK3Byb3RlY3RlZDoKKyAgICBS
ZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Cit9
OworCitjbGFzcyBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBSZWZDb3VudGVk
PEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShJbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCk7CisgICAgdmlydHVhbCB+SW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KKworICAgIGNsYXNzIENhbGxiYWNrQmFzZTogcHVi
bGljIFJlZkNvdW50ZWQ8Q2FsbGJhY2tCYXNlPiB7CisgICAgcHVibGljOgorICAgICAgICBDYWxs
YmFja0Jhc2UoUGFzc1JlZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gYmFja2VuZERp
c3BhdGNoZXIsIGludCBpZCk7CisgICAgICAgIHZpcnR1YWwgfkNhbGxiYWNrQmFzZSgpIHsgfQor
CisgICAgICAgIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsKKyAgICAgICAgdm9pZCBzZW5kRmFpbHVy
ZShjb25zdCBFcnJvclN0cmluZyYpOworICAgICAgICB2b2lkIGRpc2FibGUoKSB7IG1fYWxyZWFk
eVNlbnQgPSB0cnVlOyB9CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIHZvaWQgc2VuZElmQWN0
aXZlKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJ0aWFsTWVzc2FnZSwgY29uc3QgRXJy
b3JTdHJpbmcmIGludm9jYXRpb25FcnJvcik7CisKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQ
dHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7CisgICAg
ICAgIGludCBtX2lkOworICAgICAgICBib29sIG1fYWxyZWFkeVNlbnQ7CisgICAgfTsKKworICAg
IHZvaWQgY2xlYXJGcm9udGVuZCgpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBudWxs
cHRyOyB9CisgICAgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0IHsgcmV0dXJuICEhbV9pbnNwZWN0b3JG
cm9udGVuZENoYW5uZWw7IH0KKworICAgIGVudW0gQ29tbW9uRXJyb3JDb2RlIHsKKyAgICAgICAg
UGFyc2VFcnJvciA9IDAsCisgICAgICAgIEludmFsaWRSZXF1ZXN0LAorICAgICAgICBNZXRob2RO
b3RGb3VuZCwKKyAgICAgICAgSW52YWxpZFBhcmFtcywKKyAgICAgICAgSW50ZXJuYWxFcnJvciwK
KyAgICAgICAgU2VydmVyRXJyb3IKKyAgICB9OworCisgICAgdm9pZCByZWdpc3RlckRpc3BhdGNo
ZXJGb3JEb21haW4oY29uc3QgU3RyaW5nJiBkb21haW4sIEluc3BlY3RvclN1cHBsZW1lbnRhbEJh
Y2tlbmREaXNwYXRjaGVyKiBkaXNwYXRjaGVyKTsKKyAgICB2b2lkIGRpc3BhdGNoKGNvbnN0IFN0
cmluZyYgbWVzc2FnZSk7CisgICAgdm9pZCBzZW5kUmVzcG9uc2UobG9uZyBjYWxsSWQsIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQsIGNvbnN0IEVycm9yU3RyaW5nJiBpbnZvY2F0
aW9uRXJyb3IpOworICAgIHZvaWQgcmVwb3J0UHJvdG9jb2xFcnJvcihjb25zdCBsb25nKiBjb25z
dCBjYWxsSWQsIENvbW1vbkVycm9yQ29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpIGNv
bnN0OworICAgIHZvaWQgcmVwb3J0UHJvdG9jb2xFcnJvcihjb25zdCBsb25nKiBjb25zdCBjYWxs
SWQsIENvbW1vbkVycm9yQ29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IGRhdGEpIGNvbnN0OworCisgICAgLy8gRklYTUU6IFJlbW92ZSB0
aGlzIGJ5IGJ1aWxkaW5nIGJldHRlciBnZW5lcmF0ZWQgY29kZS4KKyAgICB2b2lkIHNlbmRSZXNw
b25zZShsb25nIGNhbGxJZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCwgUGFz
c1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMsIGNvbnN0IEVycm9yU3RyaW5n
JiBpbnZvY2F0aW9uRXJyb3IpOworCisgICAgc3RhdGljIGludCBnZXRJbnQoSW5zcGVjdG9yT2Jq
ZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVj
dG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKTsKKyAgICBzdGF0aWMgZG91YmxlIGdldERvdWJsZShJ
bnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZv
dW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMpOworICAgIHN0YXRpYyBTdHJpbmcg
Z2V0U3RyaW5nKEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJv
b2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycyk7CisgICAgc3Rh
dGljIGJvb2wgZ2V0Qm9vbGVhbihJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5n
JiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMp
OworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZ2V0T2JqZWN0KEluc3Bl
Y3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQs
IEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycyk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IGdldEFycmF5KEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBT
dHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVy
cm9ycyk7CisKK3ByaXZhdGU6CisgICAgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIoSW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFJldHVyblZhbHVlVHlwZSwgdHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBl
bmFtZSBEZWZhdWx0VmFsdWVUeXBlPgorICAgIHN0YXRpYyBSZXR1cm5WYWx1ZVR5cGUgZ2V0UHJv
cGVydHlWYWx1ZShJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBi
b29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMsIERlZmF1bHRW
YWx1ZVR5cGUgZGVmYXVsdFZhbHVlLCBib29sICgqYXNNZXRob2QpKEluc3BlY3RvclZhbHVlKiwg
VmFsdWVUeXBlKiksIGNvbnN0IGNoYXIqIHR5cGVOYW1lKTsKKworICAgIEluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CisgICAgSGFzaE1hcDxTdHJp
bmcsIEluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKj4gbV9kaXNwYXRjaGVy
czsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vICFkZWZpbmVkKElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyX2gpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckNTU0FnZW50LmNwcAppbmRleCA2MDc3Y2ExLi41MWU0OTAyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKQEAgLTYzMiwxMiAr
NjMyLDEzIEBAIEluc3BlY3RvckNTU0FnZW50Ojp+SW5zcGVjdG9yQ1NTQWdlbnQoKQogdm9pZCBJ
bnNwZWN0b3JDU1NBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCogZnJvbnRlbmRDaGFubmVsLCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ciogYmFja2VuZERpc3BhdGNoZXIpCiB7CiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXIgPSBzdGQ6
Om1ha2VfdW5pcXVlPEluc3BlY3RvckNTU0Zyb250ZW5kRGlzcGF0Y2hlcj4oZnJvbnRlbmRDaGFu
bmVsKTsKLSAgICBiYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJBZ2VudCh0aGlzKTsKKyAgICBt
X2JhY2tlbmREaXNwYXRjaGVyID0gSW5zcGVjdG9yQ1NTQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0
ZShiYWNrZW5kRGlzcGF0Y2hlciwgdGhpcyk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6
OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKCkKIHsKICAgICBtX2Zyb250ZW5kRGlzcGF0
Y2hlciA9IG51bGxwdHI7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci5jbGVhcigpOwogCiAgICAg
cmVzZXROb25QZXJzaXN0ZW50RGF0YSgpOwogICAgIFN0cmluZyBlcnJvclN0cmluZzsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmgKaW5kZXggY2JlNmMzNi4u
OWQzYjQwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNT
U0FnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50
LmgKQEAgLTY2LDcgKzY2LDcgQEAgY2xhc3MgQ2hhbmdlUmVnaW9uT3ZlcnNldFRhc2s7CiBjbGFz
cyBJbnNwZWN0b3JDU1NBZ2VudAogICAgIDogcHVibGljIEluc3BlY3RvckJhc2VBZ2VudAogICAg
ICwgcHVibGljIEluc3BlY3RvckRPTUFnZW50OjpET01MaXN0ZW5lcgotICAgICwgcHVibGljIElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpDU1NDb21tYW5kSGFuZGxlcgorICAgICwgcHVibGlj
IEluc3BlY3RvckNTU0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcgogICAgICwgcHVibGljIEluc3Bl
Y3RvclN0eWxlU2hlZXQ6Okxpc3RlbmVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbnNw
ZWN0b3JDU1NBZ2VudCk7CiBwdWJsaWM6CkBAIC0xODQsNiArMTg0LDcgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIHJlc2V0UHNldWRvU3RhdGVzKCk7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVj
dG9yQ1NTRnJvbnRlbmREaXNwYXRjaGVyPiBtX2Zyb250ZW5kRGlzcGF0Y2hlcjsKKyAgICBSZWZQ
dHI8SW5zcGVjdG9yQ1NTQmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7CiAg
ICAgSW5zcGVjdG9yRE9NQWdlbnQqIG1fZG9tQWdlbnQ7CiAKICAgICBJZFRvSW5zcGVjdG9yU3R5
bGVTaGVldCBtX2lkVG9JbnNwZWN0b3JTdHlsZVNoZWV0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhc0FnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXNBZ2VudC5jcHAKaW5kZXggM2RlOGQ2Ny4uZjlmNzJm
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhc0Fn
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzQWdl
bnQuY3BwCkBAIC03NiwxMiArNzYsMTMgQEAgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6On5JbnNwZWN0
b3JDYW52YXNBZ2VudCgpCiB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpkaWRDcmVhdGVGcm9u
dGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBmcm9udGVuZENoYW5uZWws
IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcikKIHsKICAgICBt
X2Zyb250ZW5kRGlzcGF0Y2hlciA9IHN0ZDo6bWFrZV91bmlxdWU8SW5zcGVjdG9yQ2FudmFzRnJv
bnRlbmREaXNwYXRjaGVyPihmcm9udGVuZENoYW5uZWwpOwotICAgIGJhY2tlbmREaXNwYXRjaGVy
LT5yZWdpc3RlckFnZW50KHRoaXMpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXIgPSBJbnNwZWN0
b3JDYW52YXNCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKGJhY2tlbmREaXNwYXRjaGVyLCB0aGlz
KTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFu
ZEJhY2tlbmQoKQogewogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyID0gbnVsbHB0cjsKKyAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLmNsZWFyKCk7CiAKICAgICBkaXNhYmxlKG51bGxwdHIpOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhc0FnZW50
LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzQWdlbnQuaAppbmRl
eCAyZWJjNzFiLi40OWQwM2U4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQ2FudmFzQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ2FudmFzQWdlbnQuaApAQCAtNTMsNyArNTMsNyBAQCBjbGFzcyBTY3JpcHRPYmplY3Q7
CiAKIHR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogCi1jbGFzcyBJbnNwZWN0b3JDYW52YXNB
Z2VudCA6IHB1YmxpYyBJbnNwZWN0b3JCYXNlQWdlbnQsIHB1YmxpYyBJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcjo6Q2FudmFzQ29tbWFuZEhhbmRsZXIgeworY2xhc3MgSW5zcGVjdG9yQ2FudmFz
QWdlbnQgOiBwdWJsaWMgSW5zcGVjdG9yQmFzZUFnZW50LCBwdWJsaWMgSW5zcGVjdG9yQ2FudmFz
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc093blB0
cjxJbnNwZWN0b3JDYW52YXNBZ2VudD4gY3JlYXRlKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3Ry
dW1lbnRpbmdBZ2VudHMsIEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50LCBJbmplY3RlZFNj
cmlwdE1hbmFnZXIqIGluamVjdGVkU2NyaXB0TWFuYWdlcikKICAgICB7CkBAIC0xMDEsNiArMTAx
LDcgQEAgcHJpdmF0ZToKICAgICBJbnNwZWN0b3JQYWdlQWdlbnQqIG1fcGFnZUFnZW50OwogICAg
IEluamVjdGVkU2NyaXB0TWFuYWdlciogbV9pbmplY3RlZFNjcmlwdE1hbmFnZXI7CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPEluc3BlY3RvckNhbnZhc0Zyb250ZW5kRGlzcGF0Y2hlcj4gbV9mcm9udGVu
ZERpc3BhdGNoZXI7CisgICAgUmVmUHRyPEluc3BlY3RvckNhbnZhc0JhY2tlbmREaXNwYXRjaGVy
PiBtX2JhY2tlbmREaXNwYXRjaGVyOwogICAgIGJvb2wgbV9lbmFibGVkOwogICAgIC8vIENvbnRh
aW5zIGFsbCBmcmFtZXMgd2l0aCBjYW52YXNlcywgdmFsdWUgaXMgdHJ1ZSBvbmx5IGZvciBmcmFt
ZXMgdGhhdCBoYXZlIGFuIHVuaW5zdHJ1bWVudGVkIGNhbnZhcy4KICAgICB0eXBlZGVmIEhhc2hN
YXA8RnJhbWUqLCBib29sPiBGcmFtZXNXaXRoVW5pbnN0cnVtZW50ZWRDYW52YXNlczsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb25zb2xlQWdlbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnNvbGVBZ2VudC5jcHAKaW5k
ZXggNjJiOWUzMi4uZGFhOWM1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckNvbnNvbGVBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckNvbnNvbGVBZ2VudC5jcHAKQEAgLTEyNSwxMiArMTI1LDEzIEBAIHZvaWQgSW5z
cGVjdG9yQ29uc29sZUFnZW50OjpyZXNldCgpCiB2b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6
ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZnJv
bnRlbmRDaGFubmVsLCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNo
ZXIpCiB7CiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEluc3Bl
Y3RvckNvbnNvbGVGcm9udGVuZERpc3BhdGNoZXI+KGZyb250ZW5kQ2hhbm5lbCk7Ci0gICAgYmFj
a2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyQWdlbnQodGhpcyk7CisgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlciA9IEluc3BlY3RvckNvbnNvbGVCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKGJhY2tlbmRE
aXNwYXRjaGVyLCB0aGlzKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OndpbGxE
ZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKCkKIHsKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlciA9
IG51bGxwdHI7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci5jbGVhcigpOwogCiAgICAgU3RyaW5n
IGVycm9yU3RyaW5nOwogICAgIGRpc2FibGUoJmVycm9yU3RyaW5nKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb25zb2xlQWdlbnQuaCBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb25zb2xlQWdlbnQuaAppbmRleCA0NTA0YWJkLi5j
MGYwYWRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29u
c29sZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnNv
bGVBZ2VudC5oCkBAIC01Miw3ICs1Miw3IEBAIGNsYXNzIFNjcmlwdFByb2ZpbGU7CiAKIHR5cGVk
ZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogCi1jbGFzcyBJbnNwZWN0b3JDb25zb2xlQWdlbnQgOiBw
dWJsaWMgSW5zcGVjdG9yQmFzZUFnZW50LCBwdWJsaWMgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OkNvbnNvbGVDb21tYW5kSGFuZGxlciB7CitjbGFzcyBJbnNwZWN0b3JDb25zb2xlQWdlbnQg
OiBwdWJsaWMgSW5zcGVjdG9yQmFzZUFnZW50LCBwdWJsaWMgSW5zcGVjdG9yQ29uc29sZUJhY2tl
bmREaXNwYXRjaGVySGFuZGxlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9y
Q29uc29sZUFnZW50KTsKIHB1YmxpYzoKICAgICBJbnNwZWN0b3JDb25zb2xlQWdlbnQoSW5zdHJ1
bWVudGluZ0FnZW50cyosIEluamVjdGVkU2NyaXB0TWFuYWdlciopOwpAQCAtMTAxLDYgKzEwMSw3
IEBAIHByb3RlY3RlZDoKIAogICAgIEluamVjdGVkU2NyaXB0TWFuYWdlciogbV9pbmplY3RlZFNj
cmlwdE1hbmFnZXI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEluc3BlY3RvckNvbnNvbGVGcm9udGVu
ZERpc3BhdGNoZXI+IG1fZnJvbnRlbmREaXNwYXRjaGVyOworICAgIFJlZlB0cjxJbnNwZWN0b3JD
b25zb2xlQmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7CiAgICAgQ29uc29s
ZU1lc3NhZ2UqIG1fcHJldmlvdXNNZXNzYWdlOwogICAgIFZlY3RvcjxPd25QdHI8Q29uc29sZU1l
c3NhZ2U+PiBtX2NvbnNvbGVNZXNzYWdlczsKICAgICBpbnQgbV9leHBpcmVkQ29uc29sZU1lc3Nh
Z2VDb3VudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JE
T01BZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQu
Y3BwCmluZGV4IGU2YmNiNGMuLjI1ZWVkODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckRPTUFnZW50LmNwcApAQCAtMjM0LDcgKzIzNCw3IEBAIEluc3BlY3RvckRP
TUFnZW50Ojp+SW5zcGVjdG9yRE9NQWdlbnQoKQogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6ZGlk
Q3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZnJvbnRl
bmRDaGFubmVsLCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIp
CiB7CiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEluc3BlY3Rv
ckRPTUZyb250ZW5kRGlzcGF0Y2hlcj4oZnJvbnRlbmRDaGFubmVsKTsKLSAgICBiYWNrZW5kRGlz
cGF0Y2hlci0+cmVnaXN0ZXJBZ2VudCh0aGlzKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyID0g
SW5zcGVjdG9yRE9NQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShiYWNrZW5kRGlzcGF0Y2hlciwg
dGhpcyk7CiAKICAgICBtX2hpc3RvcnkgPSBhZG9wdFB0cihuZXcgSW5zcGVjdG9ySGlzdG9yeSgp
KTsKICAgICBtX2RvbUVkaXRvciA9IGFkb3B0UHRyKG5ldyBET01FZGl0b3IobV9oaXN0b3J5Lmdl
dCgpKSk7CkBAIC0yNDksNiArMjQ5LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6ZGlkQ3Jl
YXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZnIKIHZvaWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKCkKIHsKICAg
ICBtX2Zyb250ZW5kRGlzcGF0Y2hlciA9IG51bGxwdHI7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci5jbGVhcigpOwogCiAgICAgbV9oaXN0b3J5LmNsZWFyKCk7CiAgICAgbV9kb21FZGl0b3IuY2xl
YXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01B
Z2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmgKaW5k
ZXggMzFlZDY5ZC4uMTE5NmM5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckRPTUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckRPTUFnZW50LmgKQEAgLTkwLDcgKzkwLDcgQEAgc3RydWN0IEV2ZW50TGlzdGVuZXJJbmZv
IHsKICAgICBjb25zdCBFdmVudExpc3RlbmVyVmVjdG9yIGV2ZW50TGlzdGVuZXJWZWN0b3I7CiB9
OwogCi1jbGFzcyBJbnNwZWN0b3JET01BZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3JCYXNlQWdlbnQs
IHB1YmxpYyBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6RE9NQ29tbWFuZEhhbmRsZXIgewor
Y2xhc3MgSW5zcGVjdG9yRE9NQWdlbnQgOiBwdWJsaWMgSW5zcGVjdG9yQmFzZUFnZW50LCBwdWJs
aWMgSW5zcGVjdG9yRE9NQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShJbnNwZWN0b3JET01BZ2VudCk7CiBwdWJsaWM6CiAgICAgc3RydWN0IERPTUxp
c3RlbmVyIHsKQEAgLTI0NSw2ICsyNDUsNyBAQCBwcml2YXRlOgogICAgIEluc3BlY3Rvck92ZXJs
YXkqIG1fb3ZlcmxheTsKICAgICBJbnNwZWN0b3JDbGllbnQqIG1fY2xpZW50OwogICAgIHN0ZDo6
dW5pcXVlX3B0cjxJbnNwZWN0b3JET01Gcm9udGVuZERpc3BhdGNoZXI+IG1fZnJvbnRlbmREaXNw
YXRjaGVyOworICAgIFJlZlB0cjxJbnNwZWN0b3JET01CYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNr
ZW5kRGlzcGF0Y2hlcjsKICAgICBET01MaXN0ZW5lciogbV9kb21MaXN0ZW5lcjsKICAgICBOb2Rl
VG9JZE1hcCBtX2RvY3VtZW50Tm9kZVRvSWRNYXA7CiAgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0
cjxOb2RlPiwgQmFja2VuZE5vZGVJZD4gTm9kZVRvQmFja2VuZElkTWFwOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQuY3BwCmlu
ZGV4IGNmZTVlZWYuLjg5ZmY2ZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudC5jcHAKQEAgLTExMywxMSArMTEzLDEzIEBA
IHZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6ZGlzYWJsZSgpCiAKIHZvaWQgSW5zcGVj
dG9yRE9NRGVidWdnZXJBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCosIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlz
cGF0Y2hlcikKIHsKLSAgICBiYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJBZ2VudCh0aGlzKTsK
KyAgICBtX2JhY2tlbmREaXNwYXRjaGVyID0gSW5zcGVjdG9yRE9NRGVidWdnZXJCYWNrZW5kRGlz
cGF0Y2hlcjo6Y3JlYXRlKGJhY2tlbmREaXNwYXRjaGVyLCB0aGlzKTsKIH0KIAogdm9pZCBJbnNw
ZWN0b3JET01EZWJ1Z2dlckFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZCgpCiB7
CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci5jbGVhcigpOworCiAgICAgZGlzYWJsZSgpOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NRGVidWdn
ZXJBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTURlYnVnZ2Vy
QWdlbnQuaAppbmRleCBhZTI1YTAzLi45NmY4OGE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50LmgKQEAgLTUyLDcgKzUyLDcg
QEAgY2xhc3MgTm9kZTsKIAogdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKLWNsYXNzIElu
c3BlY3RvckRPTURlYnVnZ2VyQWdlbnQgOiBwdWJsaWMgSW5zcGVjdG9yQmFzZUFnZW50LCBwdWJs
aWMgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6TGlzdGVuZXIsIHB1YmxpYyBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjo6RE9NRGVidWdnZXJDb21tYW5kSGFuZGxlciB7CitjbGFzcyBJbnNwZWN0
b3JET01EZWJ1Z2dlckFnZW50IDogcHVibGljIEluc3BlY3RvckJhc2VBZ2VudCwgcHVibGljIElu
c3BlY3RvckRlYnVnZ2VyQWdlbnQ6Okxpc3RlbmVyLCBwdWJsaWMgSW5zcGVjdG9yRE9NRGVidWdn
ZXJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKElu
c3BlY3RvckRPTURlYnVnZ2VyQWdlbnQpOwogcHVibGljOgogICAgIHN0YXRpYyBQYXNzT3duUHRy
PEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ+IGNyZWF0ZShJbnN0cnVtZW50aW5nQWdlbnRzKiwg
SW5zcGVjdG9yRE9NQWdlbnQqLCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KiwgSW5zcGVjdG9yQWdl
bnQqKTsKQEAgLTEwNCw2ICsxMDQsNyBAQCBwcml2YXRlOgogCiAgICAgSW5zcGVjdG9yRE9NQWdl
bnQqIG1fZG9tQWdlbnQ7CiAgICAgSW5zcGVjdG9yRGVidWdnZXJBZ2VudCogbV9kZWJ1Z2dlckFn
ZW50OworICAgIFJlZlB0cjxJbnNwZWN0b3JET01EZWJ1Z2dlckJhY2tlbmREaXNwYXRjaGVyPiBt
X2JhY2tlbmREaXNwYXRjaGVyOwogICAgIEhhc2hNYXA8Tm9kZSosIHVpbnQzMl90PiBtX2RvbUJy
ZWFrcG9pbnRzOwogICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2V2ZW50TGlzdGVuZXJCcmVha3BvaW50
czsKICAgICBIYXNoU2V0PFN0cmluZz4gbV94aHJCcmVha3BvaW50czsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5jcHAKaW5kZXgg
NDE5YWY5Mi4uNjQ2ZGUyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5jcHAKQEAgLTcyLDEyICs3MiwxMyBAQCBJbnNwZWN0
b3JET01TdG9yYWdlQWdlbnQ6On5JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQoKQogdm9pZCBJbnNw
ZWN0b3JET01TdG9yYWdlQWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwqIGZyb250ZW5kQ2hhbm5lbCwgSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKQogewogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyID0g
c3RkOjptYWtlX3VuaXF1ZTxJbnNwZWN0b3JET01TdG9yYWdlRnJvbnRlbmREaXNwYXRjaGVyPihm
cm9udGVuZENoYW5uZWwpOwotICAgIGJhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckFnZW50KHRo
aXMpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXIgPSBJbnNwZWN0b3JET01TdG9yYWdlQmFja2Vu
ZERpc3BhdGNoZXI6OmNyZWF0ZShiYWNrZW5kRGlzcGF0Y2hlciwgdGhpcyk7CiB9CiAKIHZvaWQg
SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZCgp
CiB7CiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXIgPSBudWxscHRyOworICAgIG1fYmFja2VuZERp
c3BhdGNoZXIuY2xlYXIoKTsKIAogICAgIGRpc2FibGUobnVsbHB0cik7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmggYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmgKaW5kZXgg
ODRhYjkzMi4uMmNkMTdiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JET01TdG9yYWdlQWdlbnQuaApAQCAtNDksNyArNDksNyBAQCBjbGFzcyBTdG9yYWdl
QXJlYTsKIAogdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKLWNsYXNzIEluc3BlY3RvckRP
TVN0b3JhZ2VBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3JCYXNlQWdlbnQsIHB1YmxpYyBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcjo6RE9NU3RvcmFnZUNvbW1hbmRIYW5kbGVyIHsKK2NsYXNzIElu
c3BlY3RvckRPTVN0b3JhZ2VBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3JCYXNlQWdlbnQsIHB1Ymxp
YyBJbnNwZWN0b3JET01TdG9yYWdlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKIHB1YmxpYzoK
ICAgICBzdGF0aWMgUGFzc093blB0cjxJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ+IGNyZWF0ZShJ
bnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJbnNwZWN0b3JQYWdlQWdl
bnQqIHBhZ2VBZ2VudCkKICAgICB7CkBAIC04Miw2ICs4Miw3IEBAIHByaXZhdGU6CiAKICAgICBJ
bnNwZWN0b3JQYWdlQWdlbnQqIG1fcGFnZUFnZW50OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJbnNw
ZWN0b3JET01TdG9yYWdlRnJvbnRlbmREaXNwYXRjaGVyPiBtX2Zyb250ZW5kRGlzcGF0Y2hlcjsK
KyAgICBSZWZQdHI8SW5zcGVjdG9yRE9NU3RvcmFnZUJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tl
bmREaXNwYXRjaGVyOwogICAgIGJvb2wgbV9lbmFibGVkOwogfTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuY3BwCmluZGV4IDdhNzc0
MTUuLmM1ODAwZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JEYXRhYmFzZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRGF0YWJhc2VBZ2VudC5jcHAKQEAgLTUzLDcgKzUzLDcgQEAKIAogI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KIAotdHlwZWRlZiBXZWJDb3JlOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
RGF0YWJhc2VDb21tYW5kSGFuZGxlcjo6RXhlY3V0ZVNRTENhbGxiYWNrIEV4ZWN1dGVTUUxDYWxs
YmFjazsKK3R5cGVkZWYgV2ViQ29yZTo6SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXI6OkV4ZWN1dGVTUUxDYWxsYmFjayBFeGVjdXRlU1FMQ2FsbGJhY2s7CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIApAQCAtMjI1LDEyICsyMjUsMTMgQEAgSW5zcGVjdG9yRGF0YWJhc2VB
Z2VudDo6fkluc3BlY3RvckRhdGFiYXNlQWdlbnQoKQogdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUFn
ZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KiBmcm9udGVuZENoYW5uZWwsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlz
cGF0Y2hlcikKIHsKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlciA9IHN0ZDo6bWFrZV91bmlxdWU8
SW5zcGVjdG9yRGF0YWJhc2VGcm9udGVuZERpc3BhdGNoZXI+KGZyb250ZW5kQ2hhbm5lbCk7Ci0g
ICAgYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyQWdlbnQodGhpcyk7CisgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlciA9IEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShi
YWNrZW5kRGlzcGF0Y2hlciwgdGhpcyk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VBZ2Vu
dDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoKQogewogICAgIG1fZnJvbnRlbmREaXNw
YXRjaGVyID0gbnVsbHB0cjsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLmNsZWFyKCk7CiAKICAg
ICBkaXNhYmxlKG51bGxwdHIpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JEYXRhYmFzZUFnZW50LmgKaW5kZXggYTIxYmNhOC4uYTMyZjA2NCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5oCkBAIC00
Niw3ICs0Niw3IEBAIGNsYXNzIEluc3RydW1lbnRpbmdBZ2VudHM7CiAKIHR5cGVkZWYgU3RyaW5n
IEVycm9yU3RyaW5nOwogCi1jbGFzcyBJbnNwZWN0b3JEYXRhYmFzZUFnZW50IDogcHVibGljIElu
c3BlY3RvckJhc2VBZ2VudCwgcHVibGljIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpEYXRh
YmFzZUNvbW1hbmRIYW5kbGVyIHsKK2NsYXNzIEluc3BlY3RvckRhdGFiYXNlQWdlbnQgOiBwdWJs
aWMgSW5zcGVjdG9yQmFzZUFnZW50LCBwdWJsaWMgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzT3duUHRyPEluc3BlY3Rv
ckRhdGFiYXNlQWdlbnQ+IGNyZWF0ZShJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5n
QWdlbnRzKQogICAgIHsKQEAgLTc2LDYgKzc2LDcgQEAgcHJpdmF0ZToKICAgICBJbnNwZWN0b3JE
YXRhYmFzZVJlc291cmNlKiBmaW5kQnlGaWxlTmFtZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKTsK
IAogICAgIHN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3JEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hl
cj4gbV9mcm9udGVuZERpc3BhdGNoZXI7CisgICAgUmVmUHRyPEluc3BlY3RvckRhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7CiAgICAgdHlwZWRlZiBIYXNoTWFw
PFN0cmluZywgUmVmUHRyPEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2U+PiBEYXRhYmFzZVJlc291
cmNlc01hcDsKICAgICBEYXRhYmFzZVJlc291cmNlc01hcCBtX3Jlc291cmNlczsKICAgICBib29s
IG1fZW5hYmxlZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JEZWJ1Z2dlckFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50LmNwcAppbmRleCAyZGY1OGMzLi5hYzJiNzBlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCkBAIC0xMzks
MTIgKzEzOSwxMyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpc2FibGUoRXJyb3JT
dHJpbmcqKQogdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFu
ZEJhY2tlbmQoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBmcm9udGVuZENoYW5uZWwsIEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcikKIHsKICAgICBtX2Zyb250
ZW5kRGlzcGF0Y2hlciA9IHN0ZDo6bWFrZV91bmlxdWU8SW5zcGVjdG9yRGVidWdnZXJGcm9udGVu
ZERpc3BhdGNoZXI+KGZyb250ZW5kQ2hhbm5lbCk7Ci0gICAgYmFja2VuZERpc3BhdGNoZXItPnJl
Z2lzdGVyQWdlbnQodGhpcyk7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IEluc3BlY3RvckRl
YnVnZ2VyQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShiYWNrZW5kRGlzcGF0Y2hlciwgdGhpcyk7
CiB9CiAKIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFu
ZEJhY2tlbmQoKQogewogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyID0gbnVsbHB0cjsKKyAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLmNsZWFyKCk7CiAKICAgICBkaXNhYmxlKCk7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaAppbmRleCA0
Mjk1MWRkLi40YmU2MDAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRGVidWdnZXJBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50LmgKQEAgLTYwLDcgKzYwLDcgQEAgY2xhc3MgU2NyaXB0VmFsdWU7
CiAKIHR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogCi1jbGFzcyBJbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50IDogcHVibGljIEluc3BlY3RvckJhc2VBZ2VudCwgcHVibGljIFNjcmlwdERlYnVnTGlz
dGVuZXIsIHB1YmxpYyBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6RGVidWdnZXJDb21tYW5k
SGFuZGxlciB7CitjbGFzcyBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50IDogcHVibGljIEluc3BlY3Rv
ckJhc2VBZ2VudCwgcHVibGljIFNjcmlwdERlYnVnTGlzdGVuZXIsIHB1YmxpYyBJbnNwZWN0b3JE
ZWJ1Z2dlckJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoSW5zcGVjdG9yRGVidWdnZXJBZ2VudCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVi
bGljOgogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBiYWNrdHJhY2VPYmplY3RHcm91cDsKQEAgLTE2
OCw2ICsxNjgsNyBAQCBwcml2YXRlOgogCiAgICAgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBtX2lu
amVjdGVkU2NyaXB0TWFuYWdlcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yRGVidWdn
ZXJGcm9udGVuZERpc3BhdGNoZXI+IG1fZnJvbnRlbmREaXNwYXRjaGVyOworICAgIFJlZlB0cjxJ
bnNwZWN0b3JEZWJ1Z2dlckJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwog
ICAgIEpTQzo6RXhlY1N0YXRlKiBtX3BhdXNlZFNjcmlwdFN0YXRlOwogICAgIFNjcmlwdFZhbHVl
IG1fY3VycmVudENhbGxTdGFjazsKICAgICBTY3JpcHRzTWFwIG1fc2NyaXB0czsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JIZWFwUHJvZmlsZXJBZ2VudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySGVhcFByb2ZpbGVyQWdlbnQu
Y3BwCmluZGV4IDhjY2JmMTUuLjA4MTRhMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JIZWFwUHJvZmlsZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckhlYXBQcm9maWxlckFnZW50LmNwcApAQCAtODMsMTIgKzgz
LDEzIEBAIHZvaWQgSW5zcGVjdG9ySGVhcFByb2ZpbGVyQWdlbnQ6OnJlc2V0RnJvbnRlbmRQcm9m
aWxlcygpCiB2b2lkIEluc3BlY3RvckhlYXBQcm9maWxlckFnZW50OjpkaWRDcmVhdGVGcm9udGVu
ZEFuZEJhY2tlbmQoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBmcm9udGVuZENoYW5uZWwsIElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcikKIHsKICAgICBtX2Zy
b250ZW5kRGlzcGF0Y2hlciA9IHN0ZDo6bWFrZV91bmlxdWU8SW5zcGVjdG9ySGVhcFByb2ZpbGVy
RnJvbnRlbmREaXNwYXRjaGVyPihmcm9udGVuZENoYW5uZWwpOwotICAgIGJhY2tlbmREaXNwYXRj
aGVyLT5yZWdpc3RlckFnZW50KHRoaXMpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXIgPSBJbnNw
ZWN0b3JIZWFwUHJvZmlsZXJCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKGJhY2tlbmREaXNwYXRj
aGVyLCB0aGlzKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JIZWFwUHJvZmlsZXJBZ2VudDo6d2lsbERl
c3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoKQogewogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyID0g
bnVsbHB0cjsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLmNsZWFyKCk7CiAKICAgICBtX3Byb2Zp
bGVIZWFkZXJzUmVxdWVzdGVkID0gZmFsc2U7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9ySGVhcFByb2ZpbGVyQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JIZWFwUHJvZmlsZXJBZ2VudC5oCmluZGV4IDI2YzJkMTkuLmNj
MzY4NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JIZWFw
UHJvZmlsZXJBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JI
ZWFwUHJvZmlsZXJBZ2VudC5oCkBAIC00OSw3ICs0OSw3IEBAIGNsYXNzIFNjcmlwdFByb2ZpbGU7
CiAKIHR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogCi1jbGFzcyBJbnNwZWN0b3JIZWFwUHJv
ZmlsZXJBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3JCYXNlQWdlbnQsIHB1YmxpYyBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6SGVhcFByb2ZpbGVyQ29tbWFuZEhhbmRsZXIgeworY2xhc3MgSW5z
cGVjdG9ySGVhcFByb2ZpbGVyQWdlbnQgOiBwdWJsaWMgSW5zcGVjdG9yQmFzZUFnZW50LCBwdWJs
aWMgSW5zcGVjdG9ySGVhcFByb2ZpbGVyQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKICAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShJbnNwZWN0b3JIZWFwUHJvZmlsZXJBZ2VudCk7IFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIHN0YXRpYyBQYXNzT3duUHRyPEluc3BlY3Rv
ckhlYXBQcm9maWxlckFnZW50PiBjcmVhdGUoSW5zdHJ1bWVudGluZ0FnZW50cyosIEluamVjdGVk
U2NyaXB0TWFuYWdlciopOwpAQCAtODQsNiArODQsNyBAQCBwcml2YXRlOgogCiAgICAgSW5qZWN0
ZWRTY3JpcHRNYW5hZ2VyKiBtX2luamVjdGVkU2NyaXB0TWFuYWdlcjsKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8SW5zcGVjdG9ySGVhcFByb2ZpbGVyRnJvbnRlbmREaXNwYXRjaGVyPiBtX2Zyb250ZW5k
RGlzcGF0Y2hlcjsKKyAgICBSZWZQdHI8SW5zcGVjdG9ySGVhcFByb2ZpbGVyQmFja2VuZERpc3Bh
dGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7CiAgICAgdW5zaWduZWQgbV9uZXh0VXNlckluaXRp
YXRlZEhlYXBTbmFwc2hvdE51bWJlcjsKICAgICBJZFRvSGVhcFNuYXBzaG90TWFwIG1fc25hcHNo
b3RzOwogICAgIGJvb2wgbV9wcm9maWxlSGVhZGVyc1JlcXVlc3RlZDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwCmluZGV4IDFl
MjcyMDcuLjg5NmRlOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JJbmRleGVkREJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckluZGV4ZWREQkFnZW50LmNwcApAQCAtNzYsMTEgKzc2LDExIEBAIHVzaW5nIFdlYkNv
cmU6OlR5cGVCdWlsZGVyOjpJbmRleGVkREI6OktleVJhbmdlOwogdXNpbmcgV2ViQ29yZTo6VHlw
ZUJ1aWxkZXI6OkluZGV4ZWREQjo6T2JqZWN0U3RvcmU7CiB1c2luZyBXZWJDb3JlOjpUeXBlQnVp
bGRlcjo6SW5kZXhlZERCOjpPYmplY3RTdG9yZUluZGV4OwogCi10eXBlZGVmIFdlYkNvcmU6Oklu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpJbmRleGVkREJDb21tYW5kSGFuZGxlcjo6UmVxdWVz
dERhdGFiYXNlTmFtZXNDYWxsYmFjayBSZXF1ZXN0RGF0YWJhc2VOYW1lc0NhbGxiYWNrOwotdHlw
ZWRlZiBXZWJDb3JlOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6SW5kZXhlZERCQ29tbWFu
ZEhhbmRsZXI6OlJlcXVlc3REYXRhYmFzZUNhbGxiYWNrIFJlcXVlc3REYXRhYmFzZUNhbGxiYWNr
OwotdHlwZWRlZiBXZWJDb3JlOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6SW5kZXhlZERC
Q29tbWFuZEhhbmRsZXI6OlJlcXVlc3REYXRhQ2FsbGJhY2sgUmVxdWVzdERhdGFDYWxsYmFjazsK
K3R5cGVkZWYgV2ViQ29yZTo6SW5zcGVjdG9ySW5kZXhlZERCQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyOjpSZXF1ZXN0RGF0YWJhc2VOYW1lc0NhbGxiYWNrIFJlcXVlc3REYXRhYmFzZU5hbWVzQ2Fs
bGJhY2s7Cit0eXBlZGVmIFdlYkNvcmU6Okluc3BlY3RvckluZGV4ZWREQkJhY2tlbmREaXNwYXRj
aGVySGFuZGxlcjo6UmVxdWVzdERhdGFiYXNlQ2FsbGJhY2sgUmVxdWVzdERhdGFiYXNlQ2FsbGJh
Y2s7Cit0eXBlZGVmIFdlYkNvcmU6Okluc3BlY3RvckluZGV4ZWREQkJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcjo6UmVxdWVzdERhdGFDYWxsYmFjayBSZXF1ZXN0RGF0YUNhbGxiYWNrOwogdHlwZWRl
ZiBXZWJDb3JlOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlIFJlcXVl
c3RDYWxsYmFjazsKLXR5cGVkZWYgV2ViQ29yZTo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OkluZGV4ZWREQkNvbW1hbmRIYW5kbGVyOjpDbGVhck9iamVjdFN0b3JlQ2FsbGJhY2sgQ2xlYXJP
YmplY3RTdG9yZUNhbGxiYWNrOwordHlwZWRlZiBXZWJDb3JlOjpJbnNwZWN0b3JJbmRleGVkREJC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkNsZWFyT2JqZWN0U3RvcmVDYWxsYmFjayBDbGVhck9i
amVjdFN0b3JlQ2FsbGJhY2s7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTY5LDExICs1
NjksMTMgQEAgSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQ6On5JbnNwZWN0b3JJbmRleGVkREJBZ2Vu
dCgpCiAKIHZvaWQgSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5k
QmFja2VuZChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqLCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlciogYmFja2VuZERpc3BhdGNoZXIpCiB7Ci0gICAgYmFja2VuZERpc3BhdGNoZXItPnJlZ2lz
dGVyQWdlbnQodGhpcyk7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IEluc3BlY3RvckluZGV4
ZWREQkJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoYmFja2VuZERpc3BhdGNoZXIsIHRoaXMpOwog
fQogCiB2b2lkIEluc3BlY3RvckluZGV4ZWREQkFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5k
QmFja2VuZCgpCiB7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci5jbGVhcigpOworCiAgICAgZGlz
YWJsZShudWxscHRyKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckluZGV4ZWREQkFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9ySW5kZXhlZERCQWdlbnQuaAppbmRleCBlZjQwZGJjLi5iYTM3NTlhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuaApAQCAt
NDQsNyArNDQsNyBAQCBjbGFzcyBJbnNwZWN0b3JQYWdlQWdlbnQ7CiAKIHR5cGVkZWYgU3RyaW5n
IEVycm9yU3RyaW5nOwogCi1jbGFzcyBJbnNwZWN0b3JJbmRleGVkREJBZ2VudCA6IHB1YmxpYyBJ
bnNwZWN0b3JCYXNlQWdlbnQsIHB1YmxpYyBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6SW5k
ZXhlZERCQ29tbWFuZEhhbmRsZXIgeworY2xhc3MgSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQgOiBw
dWJsaWMgSW5zcGVjdG9yQmFzZUFnZW50LCBwdWJsaWMgSW5zcGVjdG9ySW5kZXhlZERCQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc093blB0cjxJbnNw
ZWN0b3JJbmRleGVkREJBZ2VudD4gY3JlYXRlKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1l
bnRpbmdBZ2VudHMsIEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
LCBJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCkKICAgICB7CkBAIC02OCw2ICs2OCw3IEBA
IHByaXZhdGU6CiAKICAgICBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIG1faW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyOwogICAgIEluc3BlY3RvclBhZ2VBZ2VudCogbV9wYWdlQWdlbnQ7CisgICAgUmVmUHRy
PEluc3BlY3RvckluZGV4ZWREQkJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVy
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvcklucHV0QWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvcklucHV0QWdlbnQuY3BwCmluZGV4IGYyNmQ3MWQuLjdlY2NiOGQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnB1dEFnZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5wdXRBZ2VudC5jcHAK
QEAgLTYzLDExICs2MywxMiBAQCBJbnNwZWN0b3JJbnB1dEFnZW50Ojp+SW5zcGVjdG9ySW5wdXRB
Z2VudCgpCiAKIHZvaWQgSW5zcGVjdG9ySW5wdXRBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRC
YWNrZW5kKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCosIEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyKiBiYWNrZW5kRGlzcGF0Y2hlcikKIHsKLSAgICBiYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0
ZXJBZ2VudCh0aGlzKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyID0gSW5zcGVjdG9ySW5wdXRC
YWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKGJhY2tlbmREaXNwYXRjaGVyLCB0aGlzKTsKIH0KIAog
dm9pZCBJbnNwZWN0b3JJbnB1dEFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZCgp
CiB7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci5jbGVhcigpOwogfQogCiB2b2lkIEluc3BlY3Rv
cklucHV0QWdlbnQ6OmRpc3BhdGNoS2V5RXZlbnQoRXJyb3JTdHJpbmcqIGVycm9yLCBjb25zdCBT
dHJpbmcmIHR5cGUsIGNvbnN0IGludCogbW9kaWZpZXJzLCBjb25zdCBkb3VibGUqIHRpbWVzdGFt
cCwgY29uc3QgU3RyaW5nKiB0ZXh0LCBjb25zdCBTdHJpbmcqIHVubW9kaWZpZWRUZXh0LCBjb25z
dCBTdHJpbmcqIGtleUlkZW50aWZpZXIsIGNvbnN0IGludCogd2luZG93c1ZpcnR1YWxLZXlDb2Rl
LCBjb25zdCBpbnQqIG5hdGl2ZVZpcnR1YWxLZXlDb2RlLCBjb25zdCBpbnQqIG1hY0NoYXJDb2Rl
LCBjb25zdCBib29sKiBhdXRvUmVwZWF0LCBjb25zdCBib29sKiBpc0tleXBhZCwgY29uc3QgYm9v
bCogaXNTeXN0ZW1LZXkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9ySW5wdXRBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvcklu
cHV0QWdlbnQuaAppbmRleCAzZjcxZTc0Li5hY2JhMjk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5wdXRBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JJbnB1dEFnZW50LmgKQEAgLTQ0LDcgKzQ0LDcgQEAgY2xhc3Mg
UGFnZTsKIAogdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKLWNsYXNzIEluc3BlY3Rvcklu
cHV0QWdlbnQgOiBwdWJsaWMgSW5zcGVjdG9yQmFzZUFnZW50LCBwdWJsaWMgSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6OklucHV0Q29tbWFuZEhhbmRsZXIgeworY2xhc3MgSW5zcGVjdG9ySW5w
dXRBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3JCYXNlQWdlbnQsIHB1YmxpYyBJbnNwZWN0b3JJbnB1
dEJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5z
cGVjdG9ySW5wdXRBZ2VudCk7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NPd25QdHI8SW5zcGVj
dG9ySW5wdXRBZ2VudD4gY3JlYXRlKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdB
Z2VudHMsIFBhZ2UqIHBhZ2UpCkBAIC02NSw2ICs2NSw3IEBAIHByaXZhdGU6CiAgICAgSW5zcGVj
dG9ySW5wdXRBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiwgUGFnZSopOwogCiAgICAgUGFnZSog
bV9wYWdlOworICAgIFJlZlB0cjxJbnNwZWN0b3JJbnB1dEJhY2tlbmREaXNwYXRjaGVyPiBtX2Jh
Y2tlbmREaXNwYXRjaGVyOwogfTsKIAogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckxheWVyVHJlZUFnZW50LmNw
cAppbmRleCAzNWE1MTFlLi5kMjdmOTA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JMYXllclRyZWVBZ2VudC5jcHAKQEAgLTYxLDEyICs2MSwxMyBAQCBJ
bnNwZWN0b3JMYXllclRyZWVBZ2VudDo6fkluc3BlY3RvckxheWVyVHJlZUFnZW50KCkKIHZvaWQg
SW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwqIGZyb250ZW5kQ2hhbm5lbCwgSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKQogewogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVy
ID0gc3RkOjptYWtlX3VuaXF1ZTxJbnNwZWN0b3JMYXllclRyZWVGcm9udGVuZERpc3BhdGNoZXI+
KGZyb250ZW5kQ2hhbm5lbCk7Ci0gICAgYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyQWdlbnQo
dGhpcyk7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IEluc3BlY3RvckxheWVyVHJlZUJhY2tl
bmREaXNwYXRjaGVyOjpjcmVhdGUoYmFja2VuZERpc3BhdGNoZXIsIHRoaXMpOwogfQogCiB2b2lk
IEluc3BlY3RvckxheWVyVHJlZUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZCgp
CiB7CiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXIgPSBudWxscHRyOworICAgIG1fYmFja2VuZERp
c3BhdGNoZXIuY2xlYXIoKTsKIAogICAgIGRpc2FibGUobnVsbHB0cik7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JMYXllclRyZWVBZ2VudC5oCmluZGV4IDI3
ZDU1ZDcuLmFmNTVhOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JMYXllclRyZWVBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JMYXllclRyZWVBZ2VudC5oCkBAIC00Niw3ICs0Niw3IEBAIGNsYXNzIEluc3RydW1lbnRp
bmdBZ2VudHM7CiAKIHR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogCi1jbGFzcyBJbnNwZWN0
b3JMYXllclRyZWVBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3JCYXNlQWdlbnQsIHB1YmxpYyBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6TGF5ZXJUcmVlQ29tbWFuZEhhbmRsZXIgeworY2xhc3Mg
SW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQgOiBwdWJsaWMgSW5zcGVjdG9yQmFzZUFnZW50LCBwdWJs
aWMgSW5zcGVjdG9yTGF5ZXJUcmVlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKIHB1YmxpYzoK
ICAgICBzdGF0aWMgUGFzc093blB0cjxJbnNwZWN0b3JMYXllclRyZWVBZ2VudD4gY3JlYXRlKElu
c3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMpCiAgICAgewpAQCAtODcsNiAr
ODcsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgdW5iaW5kUHNldWRvRWxlbWVudChQc2V1ZG9FbGVt
ZW50Kik7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yTGF5ZXJUcmVlRnJvbnRlbmRE
aXNwYXRjaGVyPiBtX2Zyb250ZW5kRGlzcGF0Y2hlcjsKKyAgICBSZWZQdHI8SW5zcGVjdG9yTGF5
ZXJUcmVlQmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7CiAKICAgICBIYXNo
TWFwPGNvbnN0IFJlbmRlckxheWVyKiwgU3RyaW5nPiBtX2RvY3VtZW50TGF5ZXJUb0lkTWFwOwog
ICAgIEhhc2hNYXA8U3RyaW5nLCBjb25zdCBSZW5kZXJMYXllcio+IG1faWRUb0xheWVyOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck1lbW9yeUFnZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JNZW1vcnlBZ2VudC5jcHAKaW5k
ZXggM2MyNjlmYy4uNzU4YjdiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3Rvck1lbW9yeUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yTWVtb3J5QWdlbnQuY3BwCkBAIC02OSwxMSArNjksMTIgQEAgSW5zcGVjdG9yTWVt
b3J5QWdlbnQ6On5JbnNwZWN0b3JNZW1vcnlBZ2VudCgpCiAKIHZvaWQgSW5zcGVjdG9yTWVtb3J5
QWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwqLCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIpCiB7Ci0g
ICAgYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyQWdlbnQodGhpcyk7CisgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlciA9IEluc3BlY3Rvck1lbW9yeUJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoYmFj
a2VuZERpc3BhdGNoZXIsIHRoaXMpOwogfQogCiB2b2lkIEluc3BlY3Rvck1lbW9yeUFnZW50Ojp3
aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZCgpCiB7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci5jbGVhcigpOwogfQogCiB2b2lkIEluc3BlY3Rvck1lbW9yeUFnZW50OjpnZXRET01Db3VudGVy
cyhFcnJvclN0cmluZyosIGludCogZG9jdW1lbnRzLCBpbnQqIG5vZGVzLCBpbnQqIGpzRXZlbnRM
aXN0ZW5lcnMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
TWVtb3J5QWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JNZW1vcnlB
Z2VudC5oCmluZGV4IGYxNGRiYTkuLmUxOTEwZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JNZW1vcnlBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JNZW1vcnlBZ2VudC5oCkBAIC00NSw3ICs0NSw3IEBAIGNsYXNzIElu
c3RydW1lbnRpbmdBZ2VudHM7CiAKIHR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogCi1jbGFz
cyBJbnNwZWN0b3JNZW1vcnlBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3JCYXNlQWdlbnQsIHB1Ymxp
YyBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6TWVtb3J5Q29tbWFuZEhhbmRsZXIgeworY2xh
c3MgSW5zcGVjdG9yTWVtb3J5QWdlbnQgOiBwdWJsaWMgSW5zcGVjdG9yQmFzZUFnZW50LCBwdWJs
aWMgSW5zcGVjdG9yTWVtb3J5QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShJbnNwZWN0b3JNZW1vcnlBZ2VudCk7CiBwdWJsaWM6CiAgICAgc3RhdGlj
IFBhc3NPd25QdHI8SW5zcGVjdG9yTWVtb3J5QWdlbnQ+IGNyZWF0ZShJbnN0cnVtZW50aW5nQWdl
bnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzKTsKQEAgLTU4LDYgKzU4LDggQEAgcHVibGljOgogCiBw
cml2YXRlOgogICAgIEluc3BlY3Rvck1lbW9yeUFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqKTsK
KworICAgIFJlZlB0cjxJbnNwZWN0b3JNZW1vcnlCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5k
RGlzcGF0Y2hlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKaW5kZXggZTEzNmQxMS4uZWMz
ZDI0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VB
Z2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2Vu
dC5jcHAKQEAgLTM3MSwxMiArMzcxLDEzIEBAIEluc3BlY3RvclBhZ2VBZ2VudDo6SW5zcGVjdG9y
UGFnZUFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsCiB2b2lk
IEluc3BlY3RvclBhZ2VBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCogZnJvbnRlbmRDaGFubmVsLCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlciogYmFja2VuZERpc3BhdGNoZXIpCiB7CiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXIgPSBz
dGQ6Om1ha2VfdW5pcXVlPEluc3BlY3RvclBhZ2VGcm9udGVuZERpc3BhdGNoZXI+KGZyb250ZW5k
Q2hhbm5lbCk7Ci0gICAgYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyQWdlbnQodGhpcyk7Cisg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IEluc3BlY3RvclBhZ2VCYWNrZW5kRGlzcGF0Y2hlcjo6
Y3JlYXRlKGJhY2tlbmREaXNwYXRjaGVyLCB0aGlzKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JQYWdl
QWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKCkKIHsKICAgICBtX2Zyb250ZW5k
RGlzcGF0Y2hlciA9IG51bGxwdHI7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci5jbGVhcigpOwog
CiAgICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICAgZGlzYWJsZSgmZXJyb3IpOwpAQCAtNzgxLDcg
Kzc4Miw3IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzZXRDb250aW51b3VzUGFpbnRpbmdF
bmFibGVkKEVycm9yU3RyaW5nKiwgYm9vbCBlbmFibGVkCiAgICAgICAgIG1haW5GcmFtZSgpLT52
aWV3KCktPmludmFsaWRhdGUoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmdldFNj
cmlwdEV4ZWN1dGlvblN0YXR1cyhFcnJvclN0cmluZyosIFBhZ2VDb21tYW5kSGFuZGxlcjo6UmVz
dWx0OjpFbnVtKiBzdGF0dXMpCit2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6Z2V0U2NyaXB0RXhl
Y3V0aW9uU3RhdHVzKEVycm9yU3RyaW5nKiwgSW5zcGVjdG9yUGFnZUJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcjo6UmVzdWx0OjpFbnVtKiBzdGF0dXMpCiB7CiAgICAgYm9vbCBkaXNhYmxlZEJ5U2Ny
aXB0Q29udHJvbGxlciA9IGZhbHNlOwogICAgIGJvb2wgZGlzYWJsZWRJblNldHRpbmdzID0gZmFs
c2U7CkBAIC03OTIsMTQgKzc5MywxNCBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6Z2V0U2Ny
aXB0RXhlY3V0aW9uU3RhdHVzKEVycm9yU3RyaW5nKiwgUGFnZUNvbW1hbmRIYW5kbAogICAgIH0K
IAogICAgIGlmICghZGlzYWJsZWRCeVNjcmlwdENvbnRyb2xsZXIpIHsKLSAgICAgICAgKnN0YXR1
cyA9IFBhZ2VDb21tYW5kSGFuZGxlcjo6UmVzdWx0OjpBbGxvd2VkOworICAgICAgICAqc3RhdHVz
ID0gSW5zcGVjdG9yUGFnZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UmVzdWx0OjpBbGxvd2Vk
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKGRpc2FibGVkSW5TZXR0aW5ncykK
LSAgICAgICAgKnN0YXR1cyA9IFBhZ2VDb21tYW5kSGFuZGxlcjo6UmVzdWx0OjpEaXNhYmxlZDsK
KyAgICAgICAgKnN0YXR1cyA9IEluc3BlY3RvclBhZ2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6
OlJlc3VsdDo6RGlzYWJsZWQ7CiAgICAgZWxzZQotICAgICAgICAqc3RhdHVzID0gUGFnZUNvbW1h
bmRIYW5kbGVyOjpSZXN1bHQ6OkZvcmJpZGRlbjsKKyAgICAgICAgKnN0YXR1cyA9IEluc3BlY3Rv
clBhZ2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlJlc3VsdDo6Rm9yYmlkZGVuOwogfQogCiB2
b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c2V0U2NyaXB0RXhlY3V0aW9uRGlzYWJsZWQoRXJyb3JT
dHJpbmcqLCBib29sIHZhbHVlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvclBhZ2VBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
clBhZ2VBZ2VudC5oCmluZGV4IDc2NDVmNDQuLjhmNGJkNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmgKQEAgLTY3LDcgKzY3LDcgQEAgY2xhc3Mg
VGV4dFJlc291cmNlRGVjb2RlcjsKIAogdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKLWNs
YXNzIEluc3BlY3RvclBhZ2VBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3JCYXNlQWdlbnQsIHB1Ymxp
YyBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6UGFnZUNvbW1hbmRIYW5kbGVyIHsKK2NsYXNz
IEluc3BlY3RvclBhZ2VBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3JCYXNlQWdlbnQsIHB1YmxpYyBJ
bnNwZWN0b3JQYWdlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShJbnNwZWN0b3JQYWdlQWdlbnQpOwogcHVibGljOgogICAgIGVudW0gUmVzb3VyY2VU
eXBlIHsKQEAgLTExNyw3ICsxMTcsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldFNo
b3dGUFNDb3VudGVyKEVycm9yU3RyaW5nKiwgYm9vbCBzaG93KTsKICAgICB2aXJ0dWFsIHZvaWQg
Y2FuQ29udGludW91c2x5UGFpbnQoRXJyb3JTdHJpbmcqLCBib29sKik7CiAgICAgdmlydHVhbCB2
b2lkIHNldENvbnRpbnVvdXNQYWludGluZ0VuYWJsZWQoRXJyb3JTdHJpbmcqLCBib29sIGVuYWJs
ZWQpOwotICAgIHZpcnR1YWwgdm9pZCBnZXRTY3JpcHRFeGVjdXRpb25TdGF0dXMoRXJyb3JTdHJp
bmcqLCBQYWdlQ29tbWFuZEhhbmRsZXI6OlJlc3VsdDo6RW51bSopOworICAgIHZpcnR1YWwgdm9p
ZCBnZXRTY3JpcHRFeGVjdXRpb25TdGF0dXMoRXJyb3JTdHJpbmcqLCBJbnNwZWN0b3JQYWdlQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyOjpSZXN1bHQ6OkVudW0qKTsKICAgICB2aXJ0dWFsIHZvaWQg
c2V0U2NyaXB0RXhlY3V0aW9uRGlzYWJsZWQoRXJyb3JTdHJpbmcqLCBib29sKTsKICAgICB2aXJ0
dWFsIHZvaWQgc2V0R2VvbG9jYXRpb25PdmVycmlkZShFcnJvclN0cmluZyosIGNvbnN0IGRvdWJs
ZSosIGNvbnN0IGRvdWJsZSosIGNvbnN0IGRvdWJsZSopOwogICAgIHZpcnR1YWwgdm9pZCBjbGVh
ckdlb2xvY2F0aW9uT3ZlcnJpZGUoRXJyb3JTdHJpbmcqKTsKQEAgLTE5OCw2ICsxOTgsNyBAQCBw
cml2YXRlOgogICAgIEluamVjdGVkU2NyaXB0TWFuYWdlciogbV9pbmplY3RlZFNjcmlwdE1hbmFn
ZXI7CiAgICAgSW5zcGVjdG9yQ2xpZW50KiBtX2NsaWVudDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
SW5zcGVjdG9yUGFnZUZyb250ZW5kRGlzcGF0Y2hlcj4gbV9mcm9udGVuZERpc3BhdGNoZXI7Cisg
ICAgUmVmUHRyPEluc3BlY3RvclBhZ2VCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0
Y2hlcjsKICAgICBJbnNwZWN0b3JPdmVybGF5KiBtX292ZXJsYXk7CiAgICAgbG9uZyBtX2xhc3RT
Y3JpcHRJZGVudGlmaWVyOwogICAgIFN0cmluZyBtX3BlbmRpbmdTY3JpcHRUb0V2YWx1YXRlT25M
b2FkT25jZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQ
cm9maWxlckFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9m
aWxlckFnZW50LmNwcAppbmRleCBkNjQ2NWEyLi41MjljYWU2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwCkBAIC0zMzIsMTIg
KzMzMiwxMyBAQCB2b2lkIEluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OnJlc2V0RnJvbnRlbmRQcm9m
aWxlcygpCiB2b2lkIEluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5k
QmFja2VuZChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGZyb250ZW5kQ2hhbm5lbCwgSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKQogewogICAgIG1fZnJvbnRl
bmREaXNwYXRjaGVyID0gc3RkOjptYWtlX3VuaXF1ZTxJbnNwZWN0b3JQcm9maWxlckZyb250ZW5k
RGlzcGF0Y2hlcj4oZnJvbnRlbmRDaGFubmVsKTsKLSAgICBiYWNrZW5kRGlzcGF0Y2hlci0+cmVn
aXN0ZXJBZ2VudCh0aGlzKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyID0gSW5zcGVjdG9yUHJv
ZmlsZXJCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKGJhY2tlbmREaXNwYXRjaGVyLCB0aGlzKTsK
IH0KIAogdm9pZCBJbnNwZWN0b3JQcm9maWxlckFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5k
QmFja2VuZCgpCiB7CiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXIgPSBudWxscHRyOworICAgIG1f
YmFja2VuZERpc3BhdGNoZXIuY2xlYXIoKTsKIAogICAgIHN0b3AoKTsKICAgICBFcnJvclN0cmlu
ZyBlcnJvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQ
cm9maWxlckFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmls
ZXJBZ2VudC5oCmluZGV4IDZlYzc3ZWEuLmUwNTUwYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuaApAQCAtNTQsNyArNTQsNyBAQCBj
bGFzcyBXb3JrZXJHbG9iYWxTY29wZTsKIAogdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAK
LWNsYXNzIEluc3BlY3RvclByb2ZpbGVyQWdlbnQgOiBwdWJsaWMgSW5zcGVjdG9yQmFzZUFnZW50
LCBwdWJsaWMgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OlByb2ZpbGVyQ29tbWFuZEhhbmRs
ZXIgeworY2xhc3MgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3JCYXNl
QWdlbnQsIHB1YmxpYyBJbnNwZWN0b3JQcm9maWxlckJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7
CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yUHJvZmlsZXJBZ2VudCk7IFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIHN0YXRpYyBQYXNzT3duUHRyPEluc3Bl
Y3RvclByb2ZpbGVyQWdlbnQ+IGNyZWF0ZShJbnN0cnVtZW50aW5nQWdlbnRzKiwgSW5zcGVjdG9y
Q29uc29sZUFnZW50KiwgUGFnZSosIEluamVjdGVkU2NyaXB0TWFuYWdlciopOwpAQCAtMTE2LDYg
KzExNiw3IEBAIHByaXZhdGU6CiAgICAgSW5zcGVjdG9yQ29uc29sZUFnZW50KiBtX2NvbnNvbGVB
Z2VudDsKICAgICBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3JQcm9maWxlckZyb250ZW5kRGlzcGF0Y2hl
cj4gbV9mcm9udGVuZERpc3BhdGNoZXI7CisgICAgUmVmUHRyPEluc3BlY3RvclByb2ZpbGVyQmFj
a2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7CiAgICAgYm9vbCBtX2VuYWJsZWQ7
CiAgICAgYm9vbCBtX3Byb2ZpbGVIZWFkZXJzUmVxdWVzdGVkOwogICAgIGJvb2wgbV9yZWNvcmRp
bmdDUFVQcm9maWxlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclJlc291cmNlQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
clJlc291cmNlQWdlbnQuY3BwCmluZGV4IDIwODgwMmQuLjM4ZGNkYWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5jcHAKQEAgLTc5
LDEyICs3OSwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiB2b2lkIEluc3BlY3RvclJlc291cmNl
QWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwqIGZyb250ZW5kQ2hhbm5lbCwgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmRE
aXNwYXRjaGVyKQogewogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyID0gc3RkOjptYWtlX3VuaXF1
ZTxJbnNwZWN0b3JOZXR3b3JrRnJvbnRlbmREaXNwYXRjaGVyPihmcm9udGVuZENoYW5uZWwpOwot
ICAgIGJhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckFnZW50KHRoaXMpOworICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXIgPSBJbnNwZWN0b3JOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShi
YWNrZW5kRGlzcGF0Y2hlciwgdGhpcyk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2Vu
dDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoKQogewogICAgIG1fZnJvbnRlbmREaXNw
YXRjaGVyID0gbnVsbHB0cjsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLmNsZWFyKCk7CiAKICAg
ICBFcnJvclN0cmluZyBlcnJvcjsKICAgICBkaXNhYmxlKCZlcnJvcik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5oIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuaAppbmRleCBhZmVhMWVl
Li44YzI3Zjk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
UmVzb3VyY2VBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JS
ZXNvdXJjZUFnZW50LmgKQEAgLTc2LDcgKzc2LDcgQEAgc3RydWN0IFdlYlNvY2tldEZyYW1lOwog
CiB0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKIAotY2xhc3MgSW5zcGVjdG9yUmVzb3VyY2VB
Z2VudCA6IHB1YmxpYyBJbnNwZWN0b3JCYXNlQWdlbnQsIHB1YmxpYyBJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcjo6TmV0d29ya0NvbW1hbmRIYW5kbGVyIHsKK2NsYXNzIEluc3BlY3RvclJlc291
cmNlQWdlbnQgOiBwdWJsaWMgSW5zcGVjdG9yQmFzZUFnZW50LCBwdWJsaWMgSW5zcGVjdG9yTmV0
d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NP
d25QdHI8SW5zcGVjdG9yUmVzb3VyY2VBZ2VudD4gY3JlYXRlKEluc3RydW1lbnRpbmdBZ2VudHMq
IGluc3RydW1lbnRpbmdBZ2VudHMsIEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50LCBJbnNw
ZWN0b3JDbGllbnQqIGNsaWVudCkKICAgICB7CkBAIC0xNTQsNiArMTU0LDcgQEAgcHJpdmF0ZToK
ICAgICBJbnNwZWN0b3JQYWdlQWdlbnQqIG1fcGFnZUFnZW50OwogICAgIEluc3BlY3RvckNsaWVu
dCogbV9jbGllbnQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEluc3BlY3Rvck5ldHdvcmtGcm9udGVu
ZERpc3BhdGNoZXI+IG1fZnJvbnRlbmREaXNwYXRjaGVyOworICAgIFJlZlB0cjxJbnNwZWN0b3JO
ZXR3b3JrQmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7CiAgICAgU3RyaW5n
IG1fdXNlckFnZW50T3ZlcnJpZGU7CiAgICAgT3duUHRyPE5ldHdvcmtSZXNvdXJjZXNEYXRhPiBt
X3Jlc291cmNlc0RhdGE7CiAgICAgYm9vbCBtX2VuYWJsZWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUnVudGltZUFnZW50LmggYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yUnVudGltZUFnZW50LmgKaW5kZXggM2UzNTIxOS4uOWI1N2Uy
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJ1bnRpbWVB
Z2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSdW50aW1lQWdl
bnQuaApAQCAtNTEsNyArNTEsNyBAQCBjbGFzcyBXb3JrZXJHbG9iYWxTY29wZTsKIAogdHlwZWRl
ZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKLWNsYXNzIEluc3BlY3RvclJ1bnRpbWVBZ2VudCA6IHB1
YmxpYyBJbnNwZWN0b3JCYXNlQWdlbnQsIHB1YmxpYyBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cjo6UnVudGltZUNvbW1hbmRIYW5kbGVyIHsKK2NsYXNzIEluc3BlY3RvclJ1bnRpbWVBZ2VudCA6
IHB1YmxpYyBJbnNwZWN0b3JCYXNlQWdlbnQsIHB1YmxpYyBJbnNwZWN0b3JSdW50aW1lQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbnNwZWN0b3JS
dW50aW1lQWdlbnQpOwogcHVibGljOgogICAgIHZpcnR1YWwgfkluc3BlY3RvclJ1bnRpbWVBZ2Vu
dCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclRpbWVs
aW5lQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5l
QWdlbnQuY3BwCmluZGV4IGYwNGRjMjMuLjRjODhiMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5jcHAKQEAgLTY4LDEyICs2OCwx
MyBAQCBJbnNwZWN0b3JUaW1lbGluZUFnZW50Ojp+SW5zcGVjdG9yVGltZWxpbmVBZ2VudCgpCiB2
b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJ
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGZyb250ZW5kQ2hhbm5lbCwgSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKQogewogICAgIG1fZnJvbnRlbmREaXNwYXRj
aGVyID0gc3RkOjptYWtlX3VuaXF1ZTxJbnNwZWN0b3JUaW1lbGluZUZyb250ZW5kRGlzcGF0Y2hl
cj4oZnJvbnRlbmRDaGFubmVsKTsKLSAgICBiYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJBZ2Vu
dCh0aGlzKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyID0gSW5zcGVjdG9yVGltZWxpbmVCYWNr
ZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKGJhY2tlbmREaXNwYXRjaGVyLCB0aGlzKTsKIH0KIAogdm9p
ZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZCgp
CiB7CiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXIgPSBudWxscHRyOworICAgIG1fYmFja2VuZERp
c3BhdGNoZXIuY2xlYXIoKTsKIAogICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgIHN0b3AoJmVy
cm9yKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JUaW1l
bGluZUFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVB
Z2VudC5oCmluZGV4IDcwN2UyMjcuLjQ1ZGMyZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuaApAQCAtMTIyLDcgKzEyMiw3IEBAIHBy
aXZhdGU6CiAKIGNsYXNzIEluc3BlY3RvclRpbWVsaW5lQWdlbnQKICAgICA6IHB1YmxpYyBJbnNw
ZWN0b3JCYXNlQWdlbnQKLSAgICAsIHB1YmxpYyBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
VGltZWxpbmVDb21tYW5kSGFuZGxlciB7CisgICAgLCBwdWJsaWMgSW5zcGVjdG9yVGltZWxpbmVC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3Bl
Y3RvclRpbWVsaW5lQWdlbnQpOwogcHVibGljOgogICAgIGVudW0gSW5zcGVjdG9yVHlwZSB7IFBh
Z2VJbnNwZWN0b3IsIFdvcmtlckluc3BlY3RvciB9OwpAQCAtMjU5LDYgKzI1OSw3IEBAIHByaXZh
dGU6CiAgICAgVGltZWxpbmVUaW1lQ29udmVydGVyIG1fdGltZUNvbnZlcnRlcjsKIAogICAgIHN0
ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3JUaW1lbGluZUZyb250ZW5kRGlzcGF0Y2hlcj4gbV9mcm9u
dGVuZERpc3BhdGNoZXI7CisgICAgUmVmUHRyPEluc3BlY3RvclRpbWVsaW5lQmFja2VuZERpc3Bh
dGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7CiAgICAgZG91YmxlIG1fdGltZXN0YW1wT2Zmc2V0
OwogCiAgICAgVmVjdG9yPFRpbWVsaW5lUmVjb3JkRW50cnk+IG1fcmVjb3JkU3RhY2s7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yV29ya2VyQWdlbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvcldvcmtlckFnZW50LmNwcAppbmRl
eCAyNWQyMjkzLi5mNjQ4NTQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yV29ya2VyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JXb3JrZXJBZ2VudC5jcHAKQEAgLTEyMiw3ICsxMjIsNyBAQCBJbnNwZWN0b3JXb3Jr
ZXJBZ2VudDo6fkluc3BlY3RvcldvcmtlckFnZW50KCkKIHZvaWQgSW5zcGVjdG9yV29ya2VyQWdl
bnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwq
IGZyb250ZW5kQ2hhbm5lbCwgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNw
YXRjaGVyKQogewogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyID0gc3RkOjptYWtlX3VuaXF1ZTxJ
bnNwZWN0b3JXb3JrZXJGcm9udGVuZERpc3BhdGNoZXI+KGZyb250ZW5kQ2hhbm5lbCk7Ci0gICAg
YmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyQWdlbnQodGhpcyk7CisgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlciA9IEluc3BlY3RvcldvcmtlckJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoYmFja2Vu
ZERpc3BhdGNoZXIsIHRoaXMpOwogfQogCiB2b2lkIEluc3BlY3RvcldvcmtlckFnZW50Ojp3aWxs
RGVzdHJveUZyb250ZW5kQW5kQmFja2VuZCgpCkBAIC0xMzEsNiArMTMxLDcgQEAgdm9pZCBJbnNw
ZWN0b3JXb3JrZXJBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoKQogICAgIGRp
c2FibGUobnVsbHB0cik7CiAKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlciA9IG51bGxwdHI7Cisg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci5jbGVhcigpOwogfQogCiB2b2lkIEluc3BlY3Rvcldvcmtl
ckFnZW50OjplbmFibGUoRXJyb3JTdHJpbmcqKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvcldvcmtlckFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yV29ya2VyQWdlbnQuaAppbmRleCBjODFjZjBmYy4uNzg1NTlkZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvcldvcmtlckFnZW50LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvcldvcmtlckFnZW50LmgKQEAgLTQ2
LDcgKzQ2LDcgQEAgY2xhc3MgV29ya2VyR2xvYmFsU2NvcGVQcm94eTsKIAogdHlwZWRlZiBTdHJp
bmcgRXJyb3JTdHJpbmc7CiAKLWNsYXNzIEluc3BlY3RvcldvcmtlckFnZW50IDogcHVibGljIElu
c3BlY3RvckJhc2VBZ2VudCwgcHVibGljIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpXb3Jr
ZXJDb21tYW5kSGFuZGxlciB7CitjbGFzcyBJbnNwZWN0b3JXb3JrZXJBZ2VudCA6IHB1YmxpYyBJ
bnNwZWN0b3JCYXNlQWdlbnQsIHB1YmxpYyBJbnNwZWN0b3JXb3JrZXJCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzT3duUHRyPEluc3BlY3Rvcldvcmtl
ckFnZW50PiBjcmVhdGUoSW5zdHJ1bWVudGluZ0FnZW50cyopOwogICAgIH5JbnNwZWN0b3JXb3Jr
ZXJBZ2VudCgpOwpAQCAtNzUsNiArNzUsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZGVzdHJveVdv
cmtlckZyb250ZW5kQ2hhbm5lbHMoKTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3JX
b3JrZXJGcm9udGVuZERpc3BhdGNoZXI+IG1fZnJvbnRlbmREaXNwYXRjaGVyOworICAgIFJlZlB0
cjxJbnNwZWN0b3JXb3JrZXJCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsK
ICAgICBib29sIG1fZW5hYmxlZDsKICAgICBib29sIG1fc2hvdWxkUGF1c2VEZWRpY2F0ZWRXb3Jr
ZXJPblN0YXJ0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZVJ1
bnRpbWVBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZVJ1bnRpbWVBZ2Vu
dC5jcHAKaW5kZXggYjg4M2I5OC4uNTdiM2IzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL1BhZ2VSdW50aW1lQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9QYWdlUnVudGltZUFnZW50LmNwcApAQCAtNjYsMTIgKzY2LDEzIEBAIFBhZ2VSdW50aW1l
QWdlbnQ6On5QYWdlUnVudGltZUFnZW50KCkKIHZvaWQgUGFnZVJ1bnRpbWVBZ2VudDo6ZGlkQ3Jl
YXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZnJvbnRlbmRD
aGFubmVsLCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIpCiB7
CiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEluc3BlY3RvclJ1
bnRpbWVGcm9udGVuZERpc3BhdGNoZXI+KGZyb250ZW5kQ2hhbm5lbCk7Ci0gICAgYmFja2VuZERp
c3BhdGNoZXItPnJlZ2lzdGVyQWdlbnQodGhpcyk7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlciA9
IEluc3BlY3RvclJ1bnRpbWVCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKGJhY2tlbmREaXNwYXRj
aGVyLCB0aGlzKTsKIH0KIAogdm9pZCBQYWdlUnVudGltZUFnZW50Ojp3aWxsRGVzdHJveUZyb250
ZW5kQW5kQmFja2VuZCgpCiB7CiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXIgPSBudWxscHRyOwor
ICAgIG1fYmFja2VuZERpc3BhdGNoZXIuY2xlYXIoKTsKIAogICAgIFN0cmluZyBlcnJvclN0cmlu
ZzsKICAgICBkaXNhYmxlKCZlcnJvclN0cmluZyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvUGFnZVJ1bnRpbWVBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L1BhZ2VSdW50aW1lQWdlbnQuaAppbmRleCBlNmI0MTNkLi5lOGIzM2IyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZVJ1bnRpbWVBZ2VudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9QYWdlUnVudGltZUFnZW50LmgKQEAgLTcxLDYgKzcxLDcgQEAgcHJp
dmF0ZToKICAgICBQYWdlKiBtX2luc3BlY3RlZFBhZ2U7CiAgICAgSW5zcGVjdG9yUGFnZUFnZW50
KiBtX3BhZ2VBZ2VudDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yUnVudGltZUZyb250
ZW5kRGlzcGF0Y2hlcj4gbV9mcm9udGVuZERpc3BhdGNoZXI7CisgICAgUmVmUHRyPEluc3BlY3Rv
clJ1bnRpbWVCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKICAgICBib29s
IG1fbWFpbldvcmxkQ29udGV4dENyZWF0ZWQ7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvV29ya2VyUnVudGltZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9Xb3JrZXJSdW50aW1lQWdlbnQuY3BwCmluZGV4IDE5NGM1MDQuLjBhYjkwMzMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Xb3JrZXJSdW50aW1lQWdlbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Xb3JrZXJSdW50aW1lQWdlbnQuY3BwCkBA
IC01OSwxMSArNTksMTIgQEAgV29ya2VyUnVudGltZUFnZW50Ojp+V29ya2VyUnVudGltZUFnZW50
KCkKIAogdm9pZCBXb3JrZXJSdW50aW1lQWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2Vu
ZChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqLCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciog
YmFja2VuZERpc3BhdGNoZXIpCiB7Ci0gICAgYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyQWdl
bnQodGhpcyk7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IEluc3BlY3RvclJ1bnRpbWVCYWNr
ZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKGJhY2tlbmREaXNwYXRjaGVyLCB0aGlzKTsKIH0KIAogdm9p
ZCBXb3JrZXJSdW50aW1lQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKCkKIHsK
KyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLmNsZWFyKCk7CiB9CiAKIEluamVjdGVkU2NyaXB0IFdv
cmtlclJ1bnRpbWVBZ2VudDo6aW5qZWN0ZWRTY3JpcHRGb3JFdmFsKEVycm9yU3RyaW5nKiBlcnJv
ciwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvV29ya2VyUnVudGltZUFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvV29ya2VyUnVudGltZUFnZW50LmgKaW5kZXggNmMzMjZhNi4uMzE3MjI3NSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dvcmtlclJ1bnRpbWVBZ2VudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Xb3JrZXJSdW50aW1lQWdlbnQuaApAQCAtNjQsNiAr
NjQsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBtdXRlQ29uc29sZSgpOwogICAgIHZp
cnR1YWwgdm9pZCB1bm11dGVDb25zb2xlKCk7CiAgICAgV29ya2VyR2xvYmFsU2NvcGUqIG1fd29y
a2VyR2xvYmFsU2NvcGU7CisgICAgUmVmUHRyPEluc3BlY3RvclJ1bnRpbWVCYWNrZW5kRGlzcGF0
Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKICAgICBib29sIG1fcGF1c2VkOwogfTsKIAo=
</data>
<flag name="review"
          id="239879"
          type_id="1"
          status="+"
          setter="timothy"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>216832</attachid>
            <date>2013-11-13 11:58:31 -0800</date>
            <delta_ts>2013-11-13 11:58:31 -0800</delta_ts>
            <desc>[BEFORE] InspectorBackendDispatchers.h</desc>
            <filename>InspectorBackendDispatchersBefore.h</filename>
            <type>application/octet-stream</type>
            <size>45385</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">Ly8gRmlsZSBpcyBnZW5lcmF0ZWQgYnkgV2ViQ29yZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2Vu
ZXJhdG9ySW5zcGVjdG9yLnB5CgovLyBDb3B5cmlnaHQgKGMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgovLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIENocm9taXVtIEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KI2lmbmRlZiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcl9oCiNkZWZp
bmUgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJfaAoKI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+CiNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgojaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiNpbmNsdWRlICJJbnNwZWN0b3JUeXBlQnVpbGRlci5oIgoKbmFtZXNwYWNlIFdlYkNv
cmUgewoKY2xhc3MgSW5zcGVjdG9yQWdlbnQ7CmNsYXNzIEluc3BlY3Rvck9iamVjdDsKY2xhc3Mg
SW5zcGVjdG9yQXJyYXk7CmNsYXNzIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKCnR5cGVkZWYg
U3RyaW5nIEVycm9yU3RyaW5nOwoKY2xhc3MgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBs
OwoKY2xhc3MgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6IHB1YmxpYyBSZWZDb3VudGVkPElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiB7CnB1YmxpYzoKICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoSW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpOwogICAgdmlydHVhbCB+SW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXIoKSB7IH0KCiAgICBjbGFzcyBDYWxsYmFja0Jhc2U6IHB1YmxpYyBSZWZD
b3VudGVkPENhbGxiYWNrQmFzZT4gewogICAgcHVibGljOgogICAgICAgIENhbGxiYWNrQmFzZShQ
YXNzUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbD4gYmFja2VuZEltcGwsIGlu
dCBpZCk7CiAgICAgICAgdmlydHVhbCB+Q2FsbGJhY2tCYXNlKCk7CiAgICAgICAgdm9pZCBzZW5k
RmFpbHVyZShjb25zdCBFcnJvclN0cmluZyYpOwogICAgICAgIGJvb2wgaXNBY3RpdmUoKTsKCiAg
ICBwcm90ZWN0ZWQ6CiAgICAgICAgdm9pZCBzZW5kSWZBY3RpdmUoUGFzc1JlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHBhcnRpYWxNZXNzYWdlLCBjb25zdCBFcnJvclN0cmluZyYgaW52b2NhdGlvbkVy
cm9yKTsKCiAgICBwcml2YXRlOgogICAgICAgIHZvaWQgZGlzYWJsZSgpIHsgbV9hbHJlYWR5U2Vu
dCA9IHRydWU7IH0KCiAgICAgICAgUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1w
bD4gbV9iYWNrZW5kSW1wbDsKICAgICAgICBpbnQgbV9pZDsKICAgICAgICBib29sIG1fYWxyZWFk
eVNlbnQ7CgogICAgICAgIGZyaWVuZCBjbGFzcyBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcklt
cGw7CiAgICB9OwoKICAgIGNsYXNzIEFwcGxpY2F0aW9uQ2FjaGVDb21tYW5kSGFuZGxlciB7CiAg
ICBwdWJsaWM6CiAgICAgICAgdmlydHVhbCB2b2lkIGdldEZyYW1lc1dpdGhNYW5pZmVzdHMoRXJy
b3JTdHJpbmcqLCBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpBcHBsaWNh
dGlvbkNhY2hlOjpGcmFtZVdpdGhNYW5pZmVzdD4gPiYgb3V0X2ZyYW1lSWRzKSA9IDA7CiAgICAg
ICAgdmlydHVhbCB2b2lkIGVuYWJsZShFcnJvclN0cmluZyopID0gMDsKICAgICAgICB2aXJ0dWFs
IHZvaWQgZ2V0TWFuaWZlc3RGb3JGcmFtZShFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgaW5f
ZnJhbWVJZCwgU3RyaW5nKiBvdXRfbWFuaWZlc3RVUkwpID0gMDsKICAgICAgICB2aXJ0dWFsIHZv
aWQgZ2V0QXBwbGljYXRpb25DYWNoZUZvckZyYW1lKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5n
JiBpbl9mcmFtZUlkLCBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxp
Y2F0aW9uQ2FjaGU+JiBvdXRfYXBwbGljYXRpb25DYWNoZSkgPSAwOwoKICAgIHByb3RlY3RlZDoK
ICAgICAgICB2aXJ0dWFsIH5BcHBsaWNhdGlvbkNhY2hlQ29tbWFuZEhhbmRsZXIoKSB7IH0KICAg
IH07CgogICAgY2xhc3MgQ1NTQ29tbWFuZEhhbmRsZXIgewogICAgcHVibGljOgogICAgICAgIHZp
cnR1YWwgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcqKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lk
IGRpc2FibGUoRXJyb3JTdHJpbmcqKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIGdldE1hdGNo
ZWRTdHlsZXNGb3JOb2RlKEVycm9yU3RyaW5nKiwgaW50IGluX25vZGVJZCwgY29uc3QgYm9vbCog
aW5faW5jbHVkZVBzZXVkbywgY29uc3QgYm9vbCogaW5faW5jbHVkZUluaGVyaXRlZCwgUmVmUHRy
PFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6Q1NTOjpSdWxlTWF0Y2g+ID4mIG9wdF9v
dXRfbWF0Y2hlZENTU1J1bGVzLCBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVy
OjpDU1M6OlBzZXVkb0lkTWF0Y2hlcz4gPiYgb3B0X291dF9wc2V1ZG9FbGVtZW50cywgUmVmUHRy
PFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6Q1NTOjpJbmhlcml0ZWRTdHlsZUVudHJ5
PiA+JiBvcHRfb3V0X2luaGVyaXRlZCkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBnZXRJbmxp
bmVTdHlsZXNGb3JOb2RlKEVycm9yU3RyaW5nKiwgaW50IGluX25vZGVJZCwgUmVmUHRyPFR5cGVC
dWlsZGVyOjpDU1M6OkNTU1N0eWxlPiYgb3B0X291dF9pbmxpbmVTdHlsZSwgUmVmUHRyPFR5cGVC
dWlsZGVyOjpDU1M6OkNTU1N0eWxlPiYgb3B0X291dF9hdHRyaWJ1dGVzU3R5bGUpID0gMDsKICAg
ICAgICB2aXJ0dWFsIHZvaWQgZ2V0Q29tcHV0ZWRTdHlsZUZvck5vZGUoRXJyb3JTdHJpbmcqLCBp
bnQgaW5fbm9kZUlkLCBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpDU1M6
OkNTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0eT4gPiYgb3V0X2NvbXB1dGVkU3R5bGUpID0gMDsKICAg
ICAgICB2aXJ0dWFsIHZvaWQgZ2V0QWxsU3R5bGVTaGVldHMoRXJyb3JTdHJpbmcqLCBSZWZQdHI8
VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpDU1M6OkNTU1N0eWxlU2hlZXRIZWFkZXI+
ID4mIG91dF9oZWFkZXJzKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIGdldFN0eWxlU2hlZXQo
RXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGluX3N0eWxlU2hlZXRJZCwgUmVmUHRyPFR5cGVC
dWlsZGVyOjpDU1M6OkNTU1N0eWxlU2hlZXRCb2R5PiYgb3V0X3N0eWxlU2hlZXQpID0gMDsKICAg
ICAgICB2aXJ0dWFsIHZvaWQgZ2V0U3R5bGVTaGVldFRleHQoRXJyb3JTdHJpbmcqLCBjb25zdCBT
dHJpbmcmIGluX3N0eWxlU2hlZXRJZCwgU3RyaW5nKiBvdXRfdGV4dCkgPSAwOwogICAgICAgIHZp
cnR1YWwgdm9pZCBzZXRTdHlsZVNoZWV0VGV4dChFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYg
aW5fc3R5bGVTaGVldElkLCBjb25zdCBTdHJpbmcmIGluX3RleHQpID0gMDsKICAgICAgICB2aXJ0
dWFsIHZvaWQgc2V0U3R5bGVUZXh0KEVycm9yU3RyaW5nKiwgY29uc3QgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4mIGluX3N0eWxlSWQsIGNvbnN0IFN0cmluZyYgaW5fdGV4dCwgUmVmUHRyPFR5cGVC
dWlsZGVyOjpDU1M6OkNTU1N0eWxlPiYgb3V0X3N0eWxlKSA9IDA7CiAgICAgICAgdmlydHVhbCB2
b2lkIHNldFByb3BlcnR5VGV4dChFcnJvclN0cmluZyosIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+JiBpbl9zdHlsZUlkLCBpbnQgaW5fcHJvcGVydHlJbmRleCwgY29uc3QgU3RyaW5nJiBp
bl90ZXh0LCBib29sIGluX292ZXJ3cml0ZSwgUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNTU1N0
eWxlPiYgb3V0X3N0eWxlKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIHRvZ2dsZVByb3BlcnR5
KEVycm9yU3RyaW5nKiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIGluX3N0eWxlSWQs
IGludCBpbl9wcm9wZXJ0eUluZGV4LCBib29sIGluX2Rpc2FibGUsIFJlZlB0cjxUeXBlQnVpbGRl
cjo6Q1NTOjpDU1NTdHlsZT4mIG91dF9zdHlsZSkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBz
ZXRSdWxlU2VsZWN0b3IoRXJyb3JTdHJpbmcqLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiYgaW5fcnVsZUlkLCBjb25zdCBTdHJpbmcmIGluX3NlbGVjdG9yLCBSZWZQdHI8VHlwZUJ1aWxk
ZXI6OkNTUzo6Q1NTUnVsZT4mIG91dF9ydWxlKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIGFk
ZFJ1bGUoRXJyb3JTdHJpbmcqLCBpbnQgaW5fY29udGV4dE5vZGVJZCwgY29uc3QgU3RyaW5nJiBp
bl9zZWxlY3RvciwgUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNTU1J1bGU+JiBvdXRfcnVsZSkg
PSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBnZXRTdXBwb3J0ZWRDU1NQcm9wZXJ0aWVzKEVycm9y
U3RyaW5nKiwgUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NQ
cm9wZXJ0eUluZm8+ID4mIG91dF9jc3NQcm9wZXJ0aWVzKSA9IDA7CiAgICAgICAgdmlydHVhbCB2
b2lkIGZvcmNlUHNldWRvU3RhdGUoRXJyb3JTdHJpbmcqLCBpbnQgaW5fbm9kZUlkLCBjb25zdCBS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+JiBpbl9mb3JjZWRQc2V1ZG9DbGFzc2VzKSA9IDA7CiAgICAg
ICAgdmlydHVhbCB2b2lkIHN0YXJ0U2VsZWN0b3JQcm9maWxlcihFcnJvclN0cmluZyopID0gMDsK
ICAgICAgICB2aXJ0dWFsIHZvaWQgc3RvcFNlbGVjdG9yUHJvZmlsZXIoRXJyb3JTdHJpbmcqLCBS
ZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6U2VsZWN0b3JQcm9maWxlPiYgb3V0X3Byb2ZpbGUpID0g
MDsKICAgICAgICB2aXJ0dWFsIHZvaWQgZ2V0TmFtZWRGbG93Q29sbGVjdGlvbihFcnJvclN0cmlu
ZyosIGludCBpbl9kb2N1bWVudE5vZGVJZCwgUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUeXBl
QnVpbGRlcjo6Q1NTOjpOYW1lZEZsb3c+ID4mIG91dF9uYW1lZEZsb3dzKSA9IDA7CgogICAgcHJv
dGVjdGVkOgogICAgICAgIHZpcnR1YWwgfkNTU0NvbW1hbmRIYW5kbGVyKCkgeyB9CiAgICB9OwoK
ICAgIGNsYXNzIENhbnZhc0NvbW1hbmRIYW5kbGVyIHsKICAgIHB1YmxpYzoKICAgICAgICB2aXJ0
dWFsIHZvaWQgZW5hYmxlKEVycm9yU3RyaW5nKikgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBk
aXNhYmxlKEVycm9yU3RyaW5nKikgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBkcm9wVHJhY2VM
b2coRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGluX3RyYWNlTG9nSWQpID0gMDsKICAgICAg
ICB2aXJ0dWFsIHZvaWQgaGFzVW5pbnN0cnVtZW50ZWRDYW52YXNlcyhFcnJvclN0cmluZyosIGJv
b2wqIG91dF9yZXN1bHQpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgY2FwdHVyZUZyYW1lKEVy
cm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nKiBpbl9mcmFtZUlkLCBUeXBlQnVpbGRlcjo6Q2FudmFz
OjpUcmFjZUxvZ0lkKiBvdXRfdHJhY2VMb2dJZCkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBz
dGFydENhcHR1cmluZyhFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyogaW5fZnJhbWVJZCwgVHlw
ZUJ1aWxkZXI6OkNhbnZhczo6VHJhY2VMb2dJZCogb3V0X3RyYWNlTG9nSWQpID0gMDsKICAgICAg
ICB2aXJ0dWFsIHZvaWQgc3RvcENhcHR1cmluZyhFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYg
aW5fdHJhY2VMb2dJZCkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBnZXRUcmFjZUxvZyhFcnJv
clN0cmluZyosIGNvbnN0IFN0cmluZyYgaW5fdHJhY2VMb2dJZCwgY29uc3QgaW50KiBpbl9zdGFy
dE9mZnNldCwgY29uc3QgaW50KiBpbl9tYXhMZW5ndGgsIFJlZlB0cjxUeXBlQnVpbGRlcjo6Q2Fu
dmFzOjpUcmFjZUxvZz4mIG91dF90cmFjZUxvZykgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBy
ZXBsYXlUcmFjZUxvZyhFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgaW5fdHJhY2VMb2dJZCwg
aW50IGluX3N0ZXBObywgUmVmUHRyPFR5cGVCdWlsZGVyOjpDYW52YXM6OlJlc291cmNlU3RhdGU+
JiBvdXRfcmVzb3VyY2VTdGF0ZSkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBnZXRSZXNvdXJj
ZUluZm8oRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGluX3Jlc291cmNlSWQsIFJlZlB0cjxU
eXBlQnVpbGRlcjo6Q2FudmFzOjpSZXNvdXJjZUluZm8+JiBvdXRfcmVzb3VyY2VJbmZvKSA9IDA7
CiAgICAgICAgdmlydHVhbCB2b2lkIGdldFJlc291cmNlU3RhdGUoRXJyb3JTdHJpbmcqLCBjb25z
dCBTdHJpbmcmIGluX3RyYWNlTG9nSWQsIGNvbnN0IFN0cmluZyYgaW5fcmVzb3VyY2VJZCwgUmVm
UHRyPFR5cGVCdWlsZGVyOjpDYW52YXM6OlJlc291cmNlU3RhdGU+JiBvdXRfcmVzb3VyY2VTdGF0
ZSkgPSAwOwoKICAgIHByb3RlY3RlZDoKICAgICAgICB2aXJ0dWFsIH5DYW52YXNDb21tYW5kSGFu
ZGxlcigpIHsgfQogICAgfTsKCiAgICBjbGFzcyBDb25zb2xlQ29tbWFuZEhhbmRsZXIgewogICAg
cHVibGljOgogICAgICAgIHZpcnR1YWwgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcqKSA9IDA7CiAg
ICAgICAgdmlydHVhbCB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcqKSA9IDA7CiAgICAgICAgdmly
dHVhbCB2b2lkIGNsZWFyTWVzc2FnZXMoRXJyb3JTdHJpbmcqKSA9IDA7CiAgICAgICAgdmlydHVh
bCB2b2lkIHNldE1vbml0b3JpbmdYSFJFbmFibGVkKEVycm9yU3RyaW5nKiwgYm9vbCBpbl9lbmFi
bGVkKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIGFkZEluc3BlY3RlZE5vZGUoRXJyb3JTdHJp
bmcqLCBpbnQgaW5fbm9kZUlkKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIGFkZEluc3BlY3Rl
ZEhlYXBPYmplY3QoRXJyb3JTdHJpbmcqLCBpbnQgaW5faGVhcE9iamVjdElkKSA9IDA7CgogICAg
cHJvdGVjdGVkOgogICAgICAgIHZpcnR1YWwgfkNvbnNvbGVDb21tYW5kSGFuZGxlcigpIHsgfQog
ICAgfTsKCiAgICBjbGFzcyBET01Db21tYW5kSGFuZGxlciB7CiAgICBwdWJsaWM6CiAgICAgICAg
dmlydHVhbCB2b2lkIGdldERvY3VtZW50KEVycm9yU3RyaW5nKiwgUmVmUHRyPFR5cGVCdWlsZGVy
OjpET006Ok5vZGU+JiBvdXRfcm9vdCkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0
Q2hpbGROb2RlcyhFcnJvclN0cmluZyosIGludCBpbl9ub2RlSWQsIGNvbnN0IGludCogaW5fZGVw
dGgpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgcXVlcnlTZWxlY3RvcihFcnJvclN0cmluZyos
IGludCBpbl9ub2RlSWQsIGNvbnN0IFN0cmluZyYgaW5fc2VsZWN0b3IsIGludCogb3V0X25vZGVJ
ZCkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBxdWVyeVNlbGVjdG9yQWxsKEVycm9yU3RyaW5n
KiwgaW50IGluX25vZGVJZCwgY29uc3QgU3RyaW5nJiBpbl9zZWxlY3RvciwgUmVmUHRyPFR5cGVC
dWlsZGVyOjpBcnJheTxpbnQ+ID4mIG91dF9ub2RlSWRzKSA9IDA7CiAgICAgICAgdmlydHVhbCB2
b2lkIHNldE5vZGVOYW1lKEVycm9yU3RyaW5nKiwgaW50IGluX25vZGVJZCwgY29uc3QgU3RyaW5n
JiBpbl9uYW1lLCBpbnQqIG91dF9ub2RlSWQpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0
Tm9kZVZhbHVlKEVycm9yU3RyaW5nKiwgaW50IGluX25vZGVJZCwgY29uc3QgU3RyaW5nJiBpbl92
YWx1ZSkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCByZW1vdmVOb2RlKEVycm9yU3RyaW5nKiwg
aW50IGluX25vZGVJZCkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBzZXRBdHRyaWJ1dGVWYWx1
ZShFcnJvclN0cmluZyosIGludCBpbl9ub2RlSWQsIGNvbnN0IFN0cmluZyYgaW5fbmFtZSwgY29u
c3QgU3RyaW5nJiBpbl92YWx1ZSkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBzZXRBdHRyaWJ1
dGVzQXNUZXh0KEVycm9yU3RyaW5nKiwgaW50IGluX25vZGVJZCwgY29uc3QgU3RyaW5nJiBpbl90
ZXh0LCBjb25zdCBTdHJpbmcqIGluX25hbWUpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgcmVt
b3ZlQXR0cmlidXRlKEVycm9yU3RyaW5nKiwgaW50IGluX25vZGVJZCwgY29uc3QgU3RyaW5nJiBp
bl9uYW1lKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIGdldEV2ZW50TGlzdGVuZXJzRm9yTm9k
ZShFcnJvclN0cmluZyosIGludCBpbl9ub2RlSWQsIGNvbnN0IFN0cmluZyogaW5fb2JqZWN0R3Jv
dXAsIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkRPTTo6RXZlbnRMaXN0
ZW5lcj4gPiYgb3V0X2xpc3RlbmVycykgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBnZXRPdXRl
ckhUTUwoRXJyb3JTdHJpbmcqLCBpbnQgaW5fbm9kZUlkLCBTdHJpbmcqIG91dF9vdXRlckhUTUwp
ID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0T3V0ZXJIVE1MKEVycm9yU3RyaW5nKiwgaW50
IGluX25vZGVJZCwgY29uc3QgU3RyaW5nJiBpbl9vdXRlckhUTUwpID0gMDsKICAgICAgICB2aXJ0
dWFsIHZvaWQgcGVyZm9ybVNlYXJjaChFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgaW5fcXVl
cnksIFN0cmluZyogb3V0X3NlYXJjaElkLCBpbnQqIG91dF9yZXN1bHRDb3VudCkgPSAwOwogICAg
ICAgIHZpcnR1YWwgdm9pZCBnZXRTZWFyY2hSZXN1bHRzKEVycm9yU3RyaW5nKiwgY29uc3QgU3Ry
aW5nJiBpbl9zZWFyY2hJZCwgaW50IGluX2Zyb21JbmRleCwgaW50IGluX3RvSW5kZXgsIFJlZlB0
cjxUeXBlQnVpbGRlcjo6QXJyYXk8aW50PiA+JiBvdXRfbm9kZUlkcykgPSAwOwogICAgICAgIHZp
cnR1YWwgdm9pZCBkaXNjYXJkU2VhcmNoUmVzdWx0cyhFcnJvclN0cmluZyosIGNvbnN0IFN0cmlu
ZyYgaW5fc2VhcmNoSWQpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdE5vZGUoRXJy
b3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGluX29iamVjdElkLCBpbnQqIG91dF9ub2RlSWQpID0g
MDsKICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0SW5zcGVjdE1vZGVFbmFibGVkKEVycm9yU3RyaW5n
KiwgYm9vbCBpbl9lbmFibGVkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiogaW5faGln
aGxpZ2h0Q29uZmlnKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIGhpZ2hsaWdodFJlY3QoRXJy
b3JTdHJpbmcqLCBpbnQgaW5feCwgaW50IGluX3ksIGludCBpbl93aWR0aCwgaW50IGluX2hlaWdo
dCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIGluX2NvbG9yLCBjb25zdCBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiogaW5fb3V0bGluZUNvbG9yLCBjb25zdCBib29sKiBpbl91c2VQYWdl
Q29vcmRpbmF0ZXMpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgaGlnaGxpZ2h0UXVhZChFcnJv
clN0cmluZyosIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mIGluX3F1YWQsIGNvbnN0IFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBpbl9jb2xvciwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4qIGluX291dGxpbmVDb2xvciwgY29uc3QgYm9vbCogaW5fdXNlUGFnZUNvb3JkaW5hdGVz
KSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIGhpZ2hsaWdodE5vZGUoRXJyb3JTdHJpbmcqLCBj
b25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgaW5faGlnaGxpZ2h0Q29uZmlnLCBjb25zdCBp
bnQqIGluX25vZGVJZCwgY29uc3QgU3RyaW5nKiBpbl9vYmplY3RJZCkgPSAwOwogICAgICAgIHZp
cnR1YWwgdm9pZCBoaWRlSGlnaGxpZ2h0KEVycm9yU3RyaW5nKikgPSAwOwogICAgICAgIHZpcnR1
YWwgdm9pZCBoaWdobGlnaHRGcmFtZShFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgaW5fZnJh
bWVJZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIGluX2NvbnRlbnRDb2xvciwgY29u
c3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIGluX2NvbnRlbnRPdXRsaW5lQ29sb3IpID0gMDsK
ICAgICAgICB2aXJ0dWFsIHZvaWQgcHVzaE5vZGVCeVBhdGhUb0Zyb250ZW5kKEVycm9yU3RyaW5n
KiwgY29uc3QgU3RyaW5nJiBpbl9wYXRoLCBpbnQqIG91dF9ub2RlSWQpID0gMDsKICAgICAgICB2
aXJ0dWFsIHZvaWQgcHVzaE5vZGVCeUJhY2tlbmRJZFRvRnJvbnRlbmQoRXJyb3JTdHJpbmcqLCBp
bnQgaW5fYmFja2VuZE5vZGVJZCwgaW50KiBvdXRfbm9kZUlkKSA9IDA7CiAgICAgICAgdmlydHVh
bCB2b2lkIHJlbGVhc2VCYWNrZW5kTm9kZUlkcyhFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYg
aW5fbm9kZUdyb3VwKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIHJlc29sdmVOb2RlKEVycm9y
U3RyaW5nKiwgaW50IGluX25vZGVJZCwgY29uc3QgU3RyaW5nKiBpbl9vYmplY3RHcm91cCwgUmVm
UHRyPFR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiBvdXRfb2JqZWN0KSA9IDA7
CiAgICAgICAgdmlydHVhbCB2b2lkIGdldEF0dHJpYnV0ZXMoRXJyb3JTdHJpbmcqLCBpbnQgaW5f
bm9kZUlkLCBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz4gPiYgb3V0X2F0dHJpYnV0
ZXMpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgbW92ZVRvKEVycm9yU3RyaW5nKiwgaW50IGlu
X25vZGVJZCwgaW50IGluX3RhcmdldE5vZGVJZCwgY29uc3QgaW50KiBpbl9pbnNlcnRCZWZvcmVO
b2RlSWQsIGludCogb3V0X25vZGVJZCkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCB1bmRvKEVy
cm9yU3RyaW5nKikgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCByZWRvKEVycm9yU3RyaW5nKikg
PSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBtYXJrVW5kb2FibGVTdGF0ZShFcnJvclN0cmluZyop
ID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgZm9jdXMoRXJyb3JTdHJpbmcqLCBpbnQgaW5fbm9k
ZUlkKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIHNldEZpbGVJbnB1dEZpbGVzKEVycm9yU3Ry
aW5nKiwgaW50IGluX25vZGVJZCwgY29uc3QgUmVmUHRyPEluc3BlY3RvckFycmF5PiYgaW5fZmls
ZXMpID0gMDsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgICAgdmlydHVhbCB+RE9NQ29tbWFuZEhhbmRs
ZXIoKSB7IH0KICAgIH07CgojaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICBjbGFz
cyBET01EZWJ1Z2dlckNvbW1hbmRIYW5kbGVyIHsKICAgIHB1YmxpYzoKICAgICAgICB2aXJ0dWFs
IHZvaWQgc2V0RE9NQnJlYWtwb2ludChFcnJvclN0cmluZyosIGludCBpbl9ub2RlSWQsIGNvbnN0
IFN0cmluZyYgaW5fdHlwZSkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCByZW1vdmVET01CcmVh
a3BvaW50KEVycm9yU3RyaW5nKiwgaW50IGluX25vZGVJZCwgY29uc3QgU3RyaW5nJiBpbl90eXBl
KSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIHNldEV2ZW50TGlzdGVuZXJCcmVha3BvaW50KEVy
cm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBpbl9ldmVudE5hbWUpID0gMDsKICAgICAgICB2aXJ0
dWFsIHZvaWQgcmVtb3ZlRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQoRXJyb3JTdHJpbmcqLCBjb25z
dCBTdHJpbmcmIGluX2V2ZW50TmFtZSkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBzZXRJbnN0
cnVtZW50YXRpb25CcmVha3BvaW50KEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBpbl9ldmVu
dE5hbWUpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlSW5zdHJ1bWVudGF0aW9uQnJl
YWtwb2ludChFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgaW5fZXZlbnROYW1lKSA9IDA7CiAg
ICAgICAgdmlydHVhbCB2b2lkIHNldFhIUkJyZWFrcG9pbnQoRXJyb3JTdHJpbmcqLCBjb25zdCBT
dHJpbmcmIGluX3VybCkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCByZW1vdmVYSFJCcmVha3Bv
aW50KEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBpbl91cmwpID0gMDsKCiAgICBwcm90ZWN0
ZWQ6CiAgICAgICAgdmlydHVhbCB+RE9NRGVidWdnZXJDb21tYW5kSGFuZGxlcigpIHsgfQogICAg
fTsKCiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgIGNsYXNzIERPTVN0
b3JhZ2VDb21tYW5kSGFuZGxlciB7CiAgICBwdWJsaWM6CiAgICAgICAgdmlydHVhbCB2b2lkIGVu
YWJsZShFcnJvclN0cmluZyopID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzYWJsZShFcnJv
clN0cmluZyopID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgZ2V0RE9NU3RvcmFnZUl0ZW1zKEVy
cm9yU3RyaW5nKiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIGluX3N0b3JhZ2VJZCwg
UmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPiA+ID4m
IG91dF9lbnRyaWVzKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIHNldERPTVN0b3JhZ2VJdGVt
KEVycm9yU3RyaW5nKiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIGluX3N0b3JhZ2VJ
ZCwgY29uc3QgU3RyaW5nJiBpbl9rZXksIGNvbnN0IFN0cmluZyYgaW5fdmFsdWUpID0gMDsKICAg
ICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlRE9NU3RvcmFnZUl0ZW0oRXJyb3JTdHJpbmcqLCBjb25z
dCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgaW5fc3RvcmFnZUlkLCBjb25zdCBTdHJpbmcmIGlu
X2tleSkgPSAwOwoKICAgIHByb3RlY3RlZDoKICAgICAgICB2aXJ0dWFsIH5ET01TdG9yYWdlQ29t
bWFuZEhhbmRsZXIoKSB7IH0KICAgIH07CgojaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKICAgIGNs
YXNzIERhdGFiYXNlQ29tbWFuZEhhbmRsZXIgewogICAgcHVibGljOgogICAgICAgIHZpcnR1YWwg
dm9pZCBlbmFibGUoRXJyb3JTdHJpbmcqKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIGRpc2Fi
bGUoRXJyb3JTdHJpbmcqKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIGdldERhdGFiYXNlVGFi
bGVOYW1lcyhFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgaW5fZGF0YWJhc2VJZCwgUmVmUHRy
PFR5cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+ID4mIG91dF90YWJsZU5hbWVzKSA9IDA7CiAgICAg
ICAgY2xhc3MgRXhlY3V0ZVNRTENhbGxiYWNrIDogcHVibGljIENhbGxiYWNrQmFzZSB7CiAgICAg
ICAgcHVibGljOgogICAgICAgICAgICBFeGVjdXRlU1FMQ2FsbGJhY2soUGFzc1JlZlB0cjxJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw+LCBpbnQgaWQpOwogICAgICAgICAgICB2b2lkIHNl
bmRTdWNjZXNzKFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz4gPiBjb2x1bW5O
YW1lcywgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8SW5zcGVjdG9yVmFsdWU+ID4gdmFs
dWVzLCBQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yKTsK
ICAgICAgICB9OwogICAgICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMKEVycm9yU3RyaW5nKiwg
Y29uc3QgU3RyaW5nJiBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5LCBQYXNz
UmVmUHRyPEV4ZWN1dGVTUUxDYWxsYmFjaz4gY2FsbGJhY2spID0gMDsKCiAgICBwcm90ZWN0ZWQ6
CiAgICAgICAgdmlydHVhbCB+RGF0YWJhc2VDb21tYW5kSGFuZGxlcigpIHsgfQogICAgfTsKCiNl
bmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQojaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdH
RVIpCiAgICBjbGFzcyBEZWJ1Z2dlckNvbW1hbmRIYW5kbGVyIHsKICAgIHB1YmxpYzoKICAgICAg
ICB2aXJ0dWFsIHZvaWQgY2F1c2VzUmVjb21waWxhdGlvbihFcnJvclN0cmluZyosIGJvb2wqIG91
dF9yZXN1bHQpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgc3VwcG9ydHNTZXBhcmF0ZVNjcmlw
dENvbXBpbGF0aW9uQW5kRXhlY3V0aW9uKEVycm9yU3RyaW5nKiwgYm9vbCogb3V0X3Jlc3VsdCkg
PSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcqKSA9IDA7CiAgICAg
ICAgdmlydHVhbCB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcqKSA9IDA7CiAgICAgICAgdmlydHVh
bCB2b2lkIHNldEJyZWFrcG9pbnRzQWN0aXZlKEVycm9yU3RyaW5nKiwgYm9vbCBpbl9hY3RpdmUp
ID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0QnJlYWtwb2ludEJ5VXJsKEVycm9yU3RyaW5n
KiwgaW50IGluX2xpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyogaW5fdXJsLCBjb25zdCBTdHJpbmcq
IGluX3VybFJlZ2V4LCBjb25zdCBpbnQqIGluX2NvbHVtbk51bWJlciwgY29uc3QgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4qIGluX29wdGlvbnMsIFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6QnJlYWtw
b2ludElkKiBvdXRfYnJlYWtwb2ludElkLCBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVC
dWlsZGVyOjpEZWJ1Z2dlcjo6TG9jYXRpb24+ID4mIG91dF9sb2NhdGlvbnMpID0gMDsKICAgICAg
ICB2aXJ0dWFsIHZvaWQgc2V0QnJlYWtwb2ludChFcnJvclN0cmluZyosIGNvbnN0IFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+JiBpbl9sb2NhdGlvbiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4qIGluX29wdGlvbnMsIFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludElkKiBvdXRf
YnJlYWtwb2ludElkLCBSZWZQdHI8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj4mIG91
dF9hY3R1YWxMb2NhdGlvbikgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCByZW1vdmVCcmVha3Bv
aW50KEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBpbl9icmVha3BvaW50SWQpID0gMDsKICAg
ICAgICB2aXJ0dWFsIHZvaWQgY29udGludWVUb0xvY2F0aW9uKEVycm9yU3RyaW5nKiwgY29uc3Qg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIGluX2xvY2F0aW9uKSA9IDA7CiAgICAgICAgdmlydHVh
bCB2b2lkIHN0ZXBPdmVyKEVycm9yU3RyaW5nKikgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBz
dGVwSW50byhFcnJvclN0cmluZyopID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgc3RlcE91dChF
cnJvclN0cmluZyopID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgcGF1c2UoRXJyb3JTdHJpbmcq
KSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIHJlc3VtZShFcnJvclN0cmluZyopID0gMDsKICAg
ICAgICB2aXJ0dWFsIHZvaWQgc2VhcmNoSW5Db250ZW50KEVycm9yU3RyaW5nKiwgY29uc3QgU3Ry
aW5nJiBpbl9zY3JpcHRJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSwgY29uc3QgYm9vbCogaW5f
Y2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogaW5faXNSZWdleCwgUmVmUHRyPFR5cGVCdWlsZGVy
OjpBcnJheTxUeXBlQnVpbGRlcjo6UGFnZTo6U2VhcmNoTWF0Y2g+ID4mIG91dF9yZXN1bHQpID0g
MDsKICAgICAgICB2aXJ0dWFsIHZvaWQgY2FuU2V0U2NyaXB0U291cmNlKEVycm9yU3RyaW5nKiwg
Ym9vbCogb3V0X3Jlc3VsdCkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JpcHRTb3Vy
Y2UoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGluX3NjcmlwdElkLCBjb25zdCBTdHJpbmcm
IGluX3NjcmlwdFNvdXJjZSwgY29uc3QgYm9vbCogaW5fcHJldmlldywgUmVmUHRyPFR5cGVCdWls
ZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkNhbGxGcmFtZT4gPiYgb3B0X291dF9j
YWxsRnJhbWVzLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgb3B0X291dF9yZXN1bHQpID0gMDsK
ICAgICAgICB2aXJ0dWFsIHZvaWQgZ2V0U2NyaXB0U291cmNlKEVycm9yU3RyaW5nKiwgY29uc3Qg
U3RyaW5nJiBpbl9zY3JpcHRJZCwgU3RyaW5nKiBvdXRfc2NyaXB0U291cmNlKSA9IDA7CiAgICAg
ICAgdmlydHVhbCB2b2lkIGdldEZ1bmN0aW9uRGV0YWlscyhFcnJvclN0cmluZyosIGNvbnN0IFN0
cmluZyYgaW5fZnVuY3Rpb25JZCwgUmVmUHRyPFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6RnVuY3Rp
b25EZXRhaWxzPiYgb3V0X2RldGFpbHMpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0UGF1
c2VPbkV4Y2VwdGlvbnMoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGluX3N0YXRlKSA9IDA7
CiAgICAgICAgdmlydHVhbCB2b2lkIGV2YWx1YXRlT25DYWxsRnJhbWUoRXJyb3JTdHJpbmcqLCBj
b25zdCBTdHJpbmcmIGluX2NhbGxGcmFtZUlkLCBjb25zdCBTdHJpbmcmIGluX2V4cHJlc3Npb24s
IGNvbnN0IFN0cmluZyogaW5fb2JqZWN0R3JvdXAsIGNvbnN0IGJvb2wqIGluX2luY2x1ZGVDb21t
YW5kTGluZUFQSSwgY29uc3QgYm9vbCogaW5fZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVD
b25zb2xlLCBjb25zdCBib29sKiBpbl9yZXR1cm5CeVZhbHVlLCBjb25zdCBib29sKiBpbl9nZW5l
cmF0ZVByZXZpZXcsIFJlZlB0cjxUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYg
b3V0X3Jlc3VsdCwgVHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxib29sPiogb3B0X291dF93YXNUaHJv
d24pID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgY29tcGlsZVNjcmlwdChFcnJvclN0cmluZyos
IGNvbnN0IFN0cmluZyYgaW5fZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nJiBpbl9zb3VyY2VVUkws
IFR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpTY3JpcHRJZD4q
IG9wdF9vdXRfc2NyaXB0SWQsIFR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8U3RyaW5nPiogb3B0X291
dF9zeW50YXhFcnJvck1lc3NhZ2UpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgcnVuU2NyaXB0
KEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBpbl9zY3JpcHRJZCwgY29uc3QgaW50KiBpbl9j
b250ZXh0SWQsIGNvbnN0IFN0cmluZyogaW5fb2JqZWN0R3JvdXAsIGNvbnN0IGJvb2wqIGluX2Rv
Tm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgUmVmUHRyPFR5cGVCdWlsZGVyOjpS
dW50aW1lOjpSZW1vdGVPYmplY3Q+JiBvdXRfcmVzdWx0LCBUeXBlQnVpbGRlcjo6T3B0T3V0cHV0
PGJvb2w+KiBvcHRfb3V0X3dhc1Rocm93bikgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBzZXRP
dmVybGF5TWVzc2FnZShFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyogaW5fbWVzc2FnZSkgPSAw
OwoKICAgIHByb3RlY3RlZDoKICAgICAgICB2aXJ0dWFsIH5EZWJ1Z2dlckNvbW1hbmRIYW5kbGVy
KCkgeyB9CiAgICB9OwoKI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAg
Y2xhc3MgRmlsZVN5c3RlbUNvbW1hbmRIYW5kbGVyIHsKICAgIHB1YmxpYzoKICAgICAgICB2aXJ0
dWFsIHZvaWQgZW5hYmxlKEVycm9yU3RyaW5nKikgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBk
aXNhYmxlKEVycm9yU3RyaW5nKikgPSAwOwogICAgICAgIGNsYXNzIFJlcXVlc3RGaWxlU3lzdGVt
Um9vdENhbGxiYWNrIDogcHVibGljIENhbGxiYWNrQmFzZSB7CiAgICAgICAgcHVibGljOgogICAg
ICAgICAgICBSZXF1ZXN0RmlsZVN5c3RlbVJvb3RDYWxsYmFjayhQYXNzUmVmUHRyPEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVySW1wbD4sIGludCBpZCk7CiAgICAgICAgICAgIHZvaWQgc2VuZFN1
Y2Nlc3MoaW50IGVycm9yQ29kZSwgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6RmlsZVN5c3RlbTo6
RW50cnk+IHJvb3QpOwogICAgICAgIH07CiAgICAgICAgdmlydHVhbCB2b2lkIHJlcXVlc3RGaWxl
U3lzdGVtUm9vdChFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgaW5fb3JpZ2luLCBjb25zdCBT
dHJpbmcmIGluX3R5cGUsIFBhc3NSZWZQdHI8UmVxdWVzdEZpbGVTeXN0ZW1Sb290Q2FsbGJhY2s+
IGNhbGxiYWNrKSA9IDA7CiAgICAgICAgY2xhc3MgUmVxdWVzdERpcmVjdG9yeUNvbnRlbnRDYWxs
YmFjayA6IHB1YmxpYyBDYWxsYmFja0Jhc2UgewogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAg
UmVxdWVzdERpcmVjdG9yeUNvbnRlbnRDYWxsYmFjayhQYXNzUmVmUHRyPEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVySW1wbD4sIGludCBpZCk7CiAgICAgICAgICAgIHZvaWQgc2VuZFN1Y2Nlc3Mo
aW50IGVycm9yQ29kZSwgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6
OkZpbGVTeXN0ZW06OkVudHJ5PiA+IGVudHJpZXMpOwogICAgICAgIH07CiAgICAgICAgdmlydHVh
bCB2b2lkIHJlcXVlc3REaXJlY3RvcnlDb250ZW50KEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5n
JiBpbl91cmwsIFBhc3NSZWZQdHI8UmVxdWVzdERpcmVjdG9yeUNvbnRlbnRDYWxsYmFjaz4gY2Fs
bGJhY2spID0gMDsKICAgICAgICBjbGFzcyBSZXF1ZXN0TWV0YWRhdGFDYWxsYmFjayA6IHB1Ymxp
YyBDYWxsYmFja0Jhc2UgewogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgUmVxdWVzdE1ldGFk
YXRhQ2FsbGJhY2soUGFzc1JlZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw+LCBp
bnQgaWQpOwogICAgICAgICAgICB2b2lkIHNlbmRTdWNjZXNzKGludCBlcnJvckNvZGUsIFBhc3NS
ZWZQdHI8VHlwZUJ1aWxkZXI6OkZpbGVTeXN0ZW06Ok1ldGFkYXRhPiBtZXRhZGF0YSk7CiAgICAg
ICAgfTsKICAgICAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdE1ldGFkYXRhKEVycm9yU3RyaW5nKiwg
Y29uc3QgU3RyaW5nJiBpbl91cmwsIFBhc3NSZWZQdHI8UmVxdWVzdE1ldGFkYXRhQ2FsbGJhY2s+
IGNhbGxiYWNrKSA9IDA7CiAgICAgICAgY2xhc3MgUmVxdWVzdEZpbGVDb250ZW50Q2FsbGJhY2sg
OiBwdWJsaWMgQ2FsbGJhY2tCYXNlIHsKICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgIFJlcXVl
c3RGaWxlQ29udGVudENhbGxiYWNrKFBhc3NSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXJJbXBsPiwgaW50IGlkKTsKICAgICAgICAgICAgdm9pZCBzZW5kU3VjY2VzcyhpbnQgZXJyb3JD
b2RlLCBjb25zdCBTdHJpbmcqIGNvbnN0IGNvbnRlbnQsIGNvbnN0IFN0cmluZyogY29uc3QgY2hh
cnNldCk7CiAgICAgICAgfTsKICAgICAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdEZpbGVDb250ZW50
KEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBpbl91cmwsIGJvb2wgaW5fcmVhZEFzVGV4dCwg
Y29uc3QgaW50KiBpbl9zdGFydCwgY29uc3QgaW50KiBpbl9lbmQsIGNvbnN0IFN0cmluZyogaW5f
Y2hhcnNldCwgUGFzc1JlZlB0cjxSZXF1ZXN0RmlsZUNvbnRlbnRDYWxsYmFjaz4gY2FsbGJhY2sp
ID0gMDsKICAgICAgICBjbGFzcyBEZWxldGVFbnRyeUNhbGxiYWNrIDogcHVibGljIENhbGxiYWNr
QmFzZSB7CiAgICAgICAgcHVibGljOgogICAgICAgICAgICBEZWxldGVFbnRyeUNhbGxiYWNrKFBh
c3NSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsPiwgaW50IGlkKTsKICAgICAg
ICAgICAgdm9pZCBzZW5kU3VjY2VzcyhpbnQgZXJyb3JDb2RlKTsKICAgICAgICB9OwogICAgICAg
IHZpcnR1YWwgdm9pZCBkZWxldGVFbnRyeShFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgaW5f
dXJsLCBQYXNzUmVmUHRyPERlbGV0ZUVudHJ5Q2FsbGJhY2s+IGNhbGxiYWNrKSA9IDA7CgogICAg
cHJvdGVjdGVkOgogICAgICAgIHZpcnR1YWwgfkZpbGVTeXN0ZW1Db21tYW5kSGFuZGxlcigpIHsg
fQogICAgfTsKCiAgICBjbGFzcyBIZWFwUHJvZmlsZXJDb21tYW5kSGFuZGxlciB7CiAgICBwdWJs
aWM6CiAgICAgICAgdmlydHVhbCB2b2lkIGhhc0hlYXBQcm9maWxlcihFcnJvclN0cmluZyosIGJv
b2wqIG91dF9yZXN1bHQpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgZ2V0UHJvZmlsZUhlYWRl
cnMoRXJyb3JTdHJpbmcqLCBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpI
ZWFwUHJvZmlsZXI6OlByb2ZpbGVIZWFkZXI+ID4mIG91dF9oZWFkZXJzKSA9IDA7CiAgICAgICAg
dmlydHVhbCB2b2lkIGdldEhlYXBTbmFwc2hvdChFcnJvclN0cmluZyosIGludCBpbl91aWQpID0g
MDsKICAgICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlUHJvZmlsZShFcnJvclN0cmluZyosIGludCBp
bl91aWQpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJQcm9maWxlcyhFcnJvclN0cmlu
ZyopID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgdGFrZUhlYXBTbmFwc2hvdChFcnJvclN0cmlu
ZyosIGNvbnN0IGJvb2wqIGluX3JlcG9ydFByb2dyZXNzKSA9IDA7CiAgICAgICAgdmlydHVhbCB2
b2lkIGNvbGxlY3RHYXJiYWdlKEVycm9yU3RyaW5nKikgPSAwOwogICAgICAgIHZpcnR1YWwgdm9p
ZCBnZXRPYmplY3RCeUhlYXBPYmplY3RJZChFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgaW5f
b2JqZWN0SWQsIGNvbnN0IFN0cmluZyogaW5fb2JqZWN0R3JvdXAsIFJlZlB0cjxUeXBlQnVpbGRl
cjo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgb3V0X3Jlc3VsdCkgPSAwOwogICAgICAgIHZpcnR1
YWwgdm9pZCBnZXRIZWFwT2JqZWN0SWQoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGluX29i
amVjdElkLCBUeXBlQnVpbGRlcjo6SGVhcFByb2ZpbGVyOjpIZWFwU25hcHNob3RPYmplY3RJZCog
b3V0X2hlYXBTbmFwc2hvdE9iamVjdElkKSA9IDA7CgogICAgcHJvdGVjdGVkOgogICAgICAgIHZp
cnR1YWwgfkhlYXBQcm9maWxlckNvbW1hbmRIYW5kbGVyKCkgeyB9CiAgICB9OwoKI2lmIEVOQUJM
RShJTkRFWEVEX0RBVEFCQVNFKQogICAgY2xhc3MgSW5kZXhlZERCQ29tbWFuZEhhbmRsZXIgewog
ICAgcHVibGljOgogICAgICAgIHZpcnR1YWwgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcqKSA9IDA7
CiAgICAgICAgdmlydHVhbCB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcqKSA9IDA7CiAgICAgICAg
Y2xhc3MgUmVxdWVzdERhdGFiYXNlTmFtZXNDYWxsYmFjayA6IHB1YmxpYyBDYWxsYmFja0Jhc2Ug
ewogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgUmVxdWVzdERhdGFiYXNlTmFtZXNDYWxsYmFj
ayhQYXNzUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbD4sIGludCBpZCk7CiAg
ICAgICAgICAgIHZvaWQgc2VuZFN1Y2Nlc3MoUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8
U3RyaW5nPiA+IGRhdGFiYXNlTmFtZXMpOwogICAgICAgIH07CiAgICAgICAgdmlydHVhbCB2b2lk
IHJlcXVlc3REYXRhYmFzZU5hbWVzKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBpbl9zZWN1
cml0eU9yaWdpbiwgUGFzc1JlZlB0cjxSZXF1ZXN0RGF0YWJhc2VOYW1lc0NhbGxiYWNrPiBjYWxs
YmFjaykgPSAwOwogICAgICAgIGNsYXNzIFJlcXVlc3REYXRhYmFzZUNhbGxiYWNrIDogcHVibGlj
IENhbGxiYWNrQmFzZSB7CiAgICAgICAgcHVibGljOgogICAgICAgICAgICBSZXF1ZXN0RGF0YWJh
c2VDYWxsYmFjayhQYXNzUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbD4sIGlu
dCBpZCk7CiAgICAgICAgICAgIHZvaWQgc2VuZFN1Y2Nlc3MoUGFzc1JlZlB0cjxUeXBlQnVpbGRl
cjo6SW5kZXhlZERCOjpEYXRhYmFzZVdpdGhPYmplY3RTdG9yZXM+IGRhdGFiYXNlV2l0aE9iamVj
dFN0b3Jlcyk7CiAgICAgICAgfTsKICAgICAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdERhdGFiYXNl
KEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBpbl9zZWN1cml0eU9yaWdpbiwgY29uc3QgU3Ry
aW5nJiBpbl9kYXRhYmFzZU5hbWUsIFBhc3NSZWZQdHI8UmVxdWVzdERhdGFiYXNlQ2FsbGJhY2s+
IGNhbGxiYWNrKSA9IDA7CiAgICAgICAgY2xhc3MgUmVxdWVzdERhdGFDYWxsYmFjayA6IHB1Ymxp
YyBDYWxsYmFja0Jhc2UgewogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgUmVxdWVzdERhdGFD
YWxsYmFjayhQYXNzUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbD4sIGludCBp
ZCk7CiAgICAgICAgICAgIHZvaWQgc2VuZFN1Y2Nlc3MoUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6
QXJyYXk8VHlwZUJ1aWxkZXI6OkluZGV4ZWREQjo6RGF0YUVudHJ5PiA+IG9iamVjdFN0b3JlRGF0
YUVudHJpZXMsIGJvb2wgaGFzTW9yZSk7CiAgICAgICAgfTsKICAgICAgICB2aXJ0dWFsIHZvaWQg
cmVxdWVzdERhdGEoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGluX3NlY3VyaXR5T3JpZ2lu
LCBjb25zdCBTdHJpbmcmIGluX2RhdGFiYXNlTmFtZSwgY29uc3QgU3RyaW5nJiBpbl9vYmplY3RT
dG9yZU5hbWUsIGNvbnN0IFN0cmluZyYgaW5faW5kZXhOYW1lLCBpbnQgaW5fc2tpcENvdW50LCBp
bnQgaW5fcGFnZVNpemUsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBpbl9rZXlSYW5n
ZSwgUGFzc1JlZlB0cjxSZXF1ZXN0RGF0YUNhbGxiYWNrPiBjYWxsYmFjaykgPSAwOwogICAgICAg
IGNsYXNzIENsZWFyT2JqZWN0U3RvcmVDYWxsYmFjayA6IHB1YmxpYyBDYWxsYmFja0Jhc2Ugewog
ICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgQ2xlYXJPYmplY3RTdG9yZUNhbGxiYWNrKFBhc3NS
ZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsPiwgaW50IGlkKTsKICAgICAgICAg
ICAgdm9pZCBzZW5kU3VjY2VzcygpOwogICAgICAgIH07CiAgICAgICAgdmlydHVhbCB2b2lkIGNs
ZWFyT2JqZWN0U3RvcmUoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGluX3NlY3VyaXR5T3Jp
Z2luLCBjb25zdCBTdHJpbmcmIGluX2RhdGFiYXNlTmFtZSwgY29uc3QgU3RyaW5nJiBpbl9vYmpl
Y3RTdG9yZU5hbWUsIFBhc3NSZWZQdHI8Q2xlYXJPYmplY3RTdG9yZUNhbGxiYWNrPiBjYWxsYmFj
aykgPSAwOwoKICAgIHByb3RlY3RlZDoKICAgICAgICB2aXJ0dWFsIH5JbmRleGVkREJDb21tYW5k
SGFuZGxlcigpIHsgfQogICAgfTsKCiNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkK
ICAgIGNsYXNzIElucHV0Q29tbWFuZEhhbmRsZXIgewogICAgcHVibGljOgogICAgICAgIHZpcnR1
YWwgdm9pZCBkaXNwYXRjaEtleUV2ZW50KEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBpbl90
eXBlLCBjb25zdCBpbnQqIGluX21vZGlmaWVycywgY29uc3QgZG91YmxlKiBpbl90aW1lc3RhbXAs
IGNvbnN0IFN0cmluZyogaW5fdGV4dCwgY29uc3QgU3RyaW5nKiBpbl91bm1vZGlmaWVkVGV4dCwg
Y29uc3QgU3RyaW5nKiBpbl9rZXlJZGVudGlmaWVyLCBjb25zdCBpbnQqIGluX3dpbmRvd3NWaXJ0
dWFsS2V5Q29kZSwgY29uc3QgaW50KiBpbl9uYXRpdmVWaXJ0dWFsS2V5Q29kZSwgY29uc3QgaW50
KiBpbl9tYWNDaGFyQ29kZSwgY29uc3QgYm9vbCogaW5fYXV0b1JlcGVhdCwgY29uc3QgYm9vbCog
aW5faXNLZXlwYWQsIGNvbnN0IGJvb2wqIGluX2lzU3lzdGVtS2V5KSA9IDA7CiAgICAgICAgdmly
dHVhbCB2b2lkIGRpc3BhdGNoTW91c2VFdmVudChFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYg
aW5fdHlwZSwgaW50IGluX3gsIGludCBpbl95LCBjb25zdCBpbnQqIGluX21vZGlmaWVycywgY29u
c3QgZG91YmxlKiBpbl90aW1lc3RhbXAsIGNvbnN0IFN0cmluZyogaW5fYnV0dG9uLCBjb25zdCBp
bnQqIGluX2NsaWNrQ291bnQpID0gMDsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgICAgdmlydHVhbCB+
SW5wdXRDb21tYW5kSGFuZGxlcigpIHsgfQogICAgfTsKCiAgICBjbGFzcyBJbnNwZWN0b3JDb21t
YW5kSGFuZGxlciB7CiAgICBwdWJsaWM6CiAgICAgICAgdmlydHVhbCB2b2lkIGVuYWJsZShFcnJv
clN0cmluZyopID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzYWJsZShFcnJvclN0cmluZyop
ID0gMDsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgICAgdmlydHVhbCB+SW5zcGVjdG9yQ29tbWFuZEhh
bmRsZXIoKSB7IH0KICAgIH07CgogICAgY2xhc3MgTGF5ZXJUcmVlQ29tbWFuZEhhbmRsZXIgewog
ICAgcHVibGljOgogICAgICAgIHZpcnR1YWwgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcqKSA9IDA7
CiAgICAgICAgdmlydHVhbCB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcqKSA9IDA7CiAgICAgICAg
dmlydHVhbCB2b2lkIGxheWVyc0Zvck5vZGUoRXJyb3JTdHJpbmcqLCBpbnQgaW5fbm9kZUlkLCBS
ZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpMYXllclRyZWU6OkxheWVyPiA+
JiBvdXRfbGF5ZXJzKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIHJlYXNvbnNGb3JDb21wb3Np
dGluZ0xheWVyKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBpbl9sYXllcklkLCBSZWZQdHI8
VHlwZUJ1aWxkZXI6OkxheWVyVHJlZTo6Q29tcG9zaXRpbmdSZWFzb25zPiYgb3V0X2NvbXBvc2l0
aW5nUmVhc29ucykgPSAwOwoKICAgIHByb3RlY3RlZDoKICAgICAgICB2aXJ0dWFsIH5MYXllclRy
ZWVDb21tYW5kSGFuZGxlcigpIHsgfQogICAgfTsKCiAgICBjbGFzcyBNZW1vcnlDb21tYW5kSGFu
ZGxlciB7CiAgICBwdWJsaWM6CiAgICAgICAgdmlydHVhbCB2b2lkIGdldERPTUNvdW50ZXJzKEVy
cm9yU3RyaW5nKiwgaW50KiBvdXRfZG9jdW1lbnRzLCBpbnQqIG91dF9ub2RlcywgaW50KiBvdXRf
anNFdmVudExpc3RlbmVycykgPSAwOwoKICAgIHByb3RlY3RlZDoKICAgICAgICB2aXJ0dWFsIH5N
ZW1vcnlDb21tYW5kSGFuZGxlcigpIHsgfQogICAgfTsKCiAgICBjbGFzcyBOZXR3b3JrQ29tbWFu
ZEhhbmRsZXIgewogICAgcHVibGljOgogICAgICAgIHZpcnR1YWwgdm9pZCBlbmFibGUoRXJyb3JT
dHJpbmcqKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcqKSA9
IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIHNldFVzZXJBZ2VudE92ZXJyaWRlKEVycm9yU3RyaW5n
KiwgY29uc3QgU3RyaW5nJiBpbl91c2VyQWdlbnQpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQg
c2V0RXh0cmFIVFRQSGVhZGVycyhFcnJvclN0cmluZyosIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+JiBpbl9oZWFkZXJzKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIGdldFJlc3BvbnNl
Qm9keShFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgaW5fcmVxdWVzdElkLCBTdHJpbmcqIG91
dF9ib2R5LCBib29sKiBvdXRfYmFzZTY0RW5jb2RlZCkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9p
ZCByZXBsYXlYSFIoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGluX3JlcXVlc3RJZCkgPSAw
OwogICAgICAgIHZpcnR1YWwgdm9pZCBjYW5DbGVhckJyb3dzZXJDYWNoZShFcnJvclN0cmluZyos
IGJvb2wqIG91dF9yZXN1bHQpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJCcm93c2Vy
Q2FjaGUoRXJyb3JTdHJpbmcqKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIGNhbkNsZWFyQnJv
d3NlckNvb2tpZXMoRXJyb3JTdHJpbmcqLCBib29sKiBvdXRfcmVzdWx0KSA9IDA7CiAgICAgICAg
dmlydHVhbCB2b2lkIGNsZWFyQnJvd3NlckNvb2tpZXMoRXJyb3JTdHJpbmcqKSA9IDA7CiAgICAg
ICAgdmlydHVhbCB2b2lkIHNldENhY2hlRGlzYWJsZWQoRXJyb3JTdHJpbmcqLCBib29sIGluX2Nh
Y2hlRGlzYWJsZWQpID0gMDsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgICAgdmlydHVhbCB+TmV0d29y
a0NvbW1hbmRIYW5kbGVyKCkgeyB9CiAgICB9OwoKICAgIGNsYXNzIFBhZ2VDb21tYW5kSGFuZGxl
ciB7CiAgICBwdWJsaWM6CiAgICAgICAgdmlydHVhbCB2b2lkIGVuYWJsZShFcnJvclN0cmluZyop
ID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzYWJsZShFcnJvclN0cmluZyopID0gMDsKICAg
ICAgICB2aXJ0dWFsIHZvaWQgYWRkU2NyaXB0VG9FdmFsdWF0ZU9uTG9hZChFcnJvclN0cmluZyos
IGNvbnN0IFN0cmluZyYgaW5fc2NyaXB0U291cmNlLCBUeXBlQnVpbGRlcjo6UGFnZTo6U2NyaXB0
SWRlbnRpZmllciogb3V0X2lkZW50aWZpZXIpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgcmVt
b3ZlU2NyaXB0VG9FdmFsdWF0ZU9uTG9hZChFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgaW5f
aWRlbnRpZmllcikgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCByZWxvYWQoRXJyb3JTdHJpbmcq
LCBjb25zdCBib29sKiBpbl9pZ25vcmVDYWNoZSwgY29uc3QgU3RyaW5nKiBpbl9zY3JpcHRUb0V2
YWx1YXRlT25Mb2FkLCBjb25zdCBTdHJpbmcqIGluX3NjcmlwdFByZXByb2Nlc3NvcikgPSAwOwog
ICAgICAgIHZpcnR1YWwgdm9pZCBuYXZpZ2F0ZShFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYg
aW5fdXJsKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIGdldENvb2tpZXMoRXJyb3JTdHJpbmcq
LCBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpQYWdlOjpDb29raWU+ID4m
IG91dF9jb29raWVzLCBTdHJpbmcqIG91dF9jb29raWVzU3RyaW5nKSA9IDA7CiAgICAgICAgdmly
dHVhbCB2b2lkIGRlbGV0ZUNvb2tpZShFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgaW5fY29v
a2llTmFtZSwgY29uc3QgU3RyaW5nJiBpbl91cmwpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQg
Z2V0UmVzb3VyY2VUcmVlKEVycm9yU3RyaW5nKiwgUmVmUHRyPFR5cGVCdWlsZGVyOjpQYWdlOjpG
cmFtZVJlc291cmNlVHJlZT4mIG91dF9mcmFtZVRyZWUpID0gMDsKICAgICAgICB2aXJ0dWFsIHZv
aWQgZ2V0UmVzb3VyY2VDb250ZW50KEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBpbl9mcmFt
ZUlkLCBjb25zdCBTdHJpbmcmIGluX3VybCwgU3RyaW5nKiBvdXRfY29udGVudCwgYm9vbCogb3V0
X2Jhc2U2NEVuY29kZWQpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgc2VhcmNoSW5SZXNvdXJj
ZShFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgaW5fZnJhbWVJZCwgY29uc3QgU3RyaW5nJiBp
bl91cmwsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnksIGNvbnN0IGJvb2wqIGluX2Nhc2VTZW5zaXRp
dmUsIGNvbnN0IGJvb2wqIGluX2lzUmVnZXgsIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlw
ZUJ1aWxkZXI6OlBhZ2U6OlNlYXJjaE1hdGNoPiA+JiBvdXRfcmVzdWx0KSA9IDA7CiAgICAgICAg
dmlydHVhbCB2b2lkIHNlYXJjaEluUmVzb3VyY2VzKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5n
JiBpbl90ZXh0LCBjb25zdCBib29sKiBpbl9jYXNlU2Vuc2l0aXZlLCBjb25zdCBib29sKiBpbl9p
c1JlZ2V4LCBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpQYWdlOjpTZWFy
Y2hSZXN1bHQ+ID4mIG91dF9yZXN1bHQpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0RG9j
dW1lbnRDb250ZW50KEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBpbl9mcmFtZUlkLCBjb25z
dCBTdHJpbmcmIGluX2h0bWwpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgY2FuT3ZlcnJpZGVE
ZXZpY2VNZXRyaWNzKEVycm9yU3RyaW5nKiwgYm9vbCogb3V0X3Jlc3VsdCkgPSAwOwogICAgICAg
IHZpcnR1YWwgdm9pZCBzZXREZXZpY2VNZXRyaWNzT3ZlcnJpZGUoRXJyb3JTdHJpbmcqLCBpbnQg
aW5fd2lkdGgsIGludCBpbl9oZWlnaHQsIGRvdWJsZSBpbl9mb250U2NhbGVGYWN0b3IsIGJvb2wg
aW5fZml0V2luZG93KSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIHNldFNob3dQYWludFJlY3Rz
KEVycm9yU3RyaW5nKiwgYm9vbCBpbl9yZXN1bHQpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQg
Y2FuU2hvd0RlYnVnQm9yZGVycyhFcnJvclN0cmluZyosIGJvb2wqIG91dF9zaG93KSA9IDA7CiAg
ICAgICAgdmlydHVhbCB2b2lkIHNldFNob3dEZWJ1Z0JvcmRlcnMoRXJyb3JTdHJpbmcqLCBib29s
IGluX3Nob3cpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgY2FuU2hvd0ZQU0NvdW50ZXIoRXJy
b3JTdHJpbmcqLCBib29sKiBvdXRfc2hvdykgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBzZXRT
aG93RlBTQ291bnRlcihFcnJvclN0cmluZyosIGJvb2wgaW5fc2hvdykgPSAwOwogICAgICAgIHZp
cnR1YWwgdm9pZCBjYW5Db250aW51b3VzbHlQYWludChFcnJvclN0cmluZyosIGJvb2wqIG91dF92
YWx1ZSkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBzZXRDb250aW51b3VzUGFpbnRpbmdFbmFi
bGVkKEVycm9yU3RyaW5nKiwgYm9vbCBpbl9lbmFibGVkKSA9IDA7CiAgICAgICAgLy8gTmFtZWQg
YWZ0ZXIgcGFyYW1ldGVyICdyZXN1bHQnIHdoaWxlIGdlbmVyYXRpbmcgY29tbWFuZC9ldmVudCBn
ZXRTY3JpcHRFeGVjdXRpb25TdGF0dXMuCiAgICAgICAgc3RydWN0IFJlc3VsdCB7CiAgICAgICAg
ICAgIGVudW0gRW51bSB7CiAgICAgICAgICAgICAgICBBbGxvd2VkID0gMTE5LAogICAgICAgICAg
ICAgICAgRGlzYWJsZWQgPSAxNCwKICAgICAgICAgICAgICAgIEZvcmJpZGRlbiA9IDEyMCwKICAg
ICAgICAgICAgfTsKICAgICAgICB9OyAvLyBzdHJ1Y3QgUmVzdWx0CgogICAgICAgIHZpcnR1YWwg
dm9pZCBnZXRTY3JpcHRFeGVjdXRpb25TdGF0dXMoRXJyb3JTdHJpbmcqLCBQYWdlQ29tbWFuZEhh
bmRsZXI6OlJlc3VsdDo6RW51bSogb3V0X3Jlc3VsdCkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9p
ZCBzZXRTY3JpcHRFeGVjdXRpb25EaXNhYmxlZChFcnJvclN0cmluZyosIGJvb2wgaW5fdmFsdWUp
ID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0R2VvbG9jYXRpb25PdmVycmlkZShFcnJvclN0
cmluZyosIGNvbnN0IGRvdWJsZSogaW5fbGF0aXR1ZGUsIGNvbnN0IGRvdWJsZSogaW5fbG9uZ2l0
dWRlLCBjb25zdCBkb3VibGUqIGluX2FjY3VyYWN5KSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lk
IGNsZWFyR2VvbG9jYXRpb25PdmVycmlkZShFcnJvclN0cmluZyopID0gMDsKICAgICAgICB2aXJ0
dWFsIHZvaWQgY2FuT3ZlcnJpZGVHZW9sb2NhdGlvbihFcnJvclN0cmluZyosIGJvb2wqIG91dF9y
ZXN1bHQpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0RGV2aWNlT3JpZW50YXRpb25PdmVy
cmlkZShFcnJvclN0cmluZyosIGRvdWJsZSBpbl9hbHBoYSwgZG91YmxlIGluX2JldGEsIGRvdWJs
ZSBpbl9nYW1tYSkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBjbGVhckRldmljZU9yaWVudGF0
aW9uT3ZlcnJpZGUoRXJyb3JTdHJpbmcqKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIGNhbk92
ZXJyaWRlRGV2aWNlT3JpZW50YXRpb24oRXJyb3JTdHJpbmcqLCBib29sKiBvdXRfcmVzdWx0KSA9
IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIHNldFRvdWNoRW11bGF0aW9uRW5hYmxlZChFcnJvclN0
cmluZyosIGJvb2wgaW5fZW5hYmxlZCkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBzZXRFbXVs
YXRlZE1lZGlhKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBpbl9tZWRpYSkgPSAwOwogICAg
ICAgIHZpcnR1YWwgdm9pZCBnZXRDb21wb3NpdGluZ0JvcmRlcnNWaXNpYmxlKEVycm9yU3RyaW5n
KiwgYm9vbCogb3V0X3Jlc3VsdCkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBzZXRDb21wb3Np
dGluZ0JvcmRlcnNWaXNpYmxlKEVycm9yU3RyaW5nKiwgYm9vbCBpbl92aXNpYmxlKSA9IDA7CiAg
ICAgICAgdmlydHVhbCB2b2lkIGNhcHR1cmVTY3JlZW5zaG90KEVycm9yU3RyaW5nKiwgU3RyaW5n
KiBvdXRfZGF0YSkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVKYXZhU2NyaXB0RGlh
bG9nKEVycm9yU3RyaW5nKiwgYm9vbCBpbl9hY2NlcHQsIGNvbnN0IFN0cmluZyogaW5fcHJvbXB0
VGV4dCkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBhcmNoaXZlKEVycm9yU3RyaW5nKiwgU3Ry
aW5nKiBvdXRfZGF0YSkgPSAwOwoKICAgIHByb3RlY3RlZDoKICAgICAgICB2aXJ0dWFsIH5QYWdl
Q29tbWFuZEhhbmRsZXIoKSB7IH0KICAgIH07CgojaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdH
RVIpCiAgICBjbGFzcyBQcm9maWxlckNvbW1hbmRIYW5kbGVyIHsKICAgIHB1YmxpYzoKICAgICAg
ICB2aXJ0dWFsIHZvaWQgY2F1c2VzUmVjb21waWxhdGlvbihFcnJvclN0cmluZyosIGJvb2wqIG91
dF9yZXN1bHQpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgaXNTYW1wbGluZyhFcnJvclN0cmlu
ZyosIGJvb2wqIG91dF9yZXN1bHQpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgaGFzSGVhcFBy
b2ZpbGVyKEVycm9yU3RyaW5nKiwgYm9vbCogb3V0X3Jlc3VsdCkgPSAwOwogICAgICAgIHZpcnR1
YWwgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcqKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIGRp
c2FibGUoRXJyb3JTdHJpbmcqKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIHN0YXJ0KEVycm9y
U3RyaW5nKikgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBzdG9wKEVycm9yU3RyaW5nKikgPSAw
OwogICAgICAgIHZpcnR1YWwgdm9pZCBnZXRQcm9maWxlSGVhZGVycyhFcnJvclN0cmluZyosIFJl
ZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OlByb2ZpbGVyOjpQcm9maWxlSGVh
ZGVyPiA+JiBvdXRfaGVhZGVycykgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBnZXRDUFVQcm9m
aWxlKEVycm9yU3RyaW5nKiwgaW50IGluX3VpZCwgUmVmUHRyPFR5cGVCdWlsZGVyOjpQcm9maWxl
cjo6Q1BVUHJvZmlsZT4mIG91dF9wcm9maWxlKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIGdl
dEhlYXBTbmFwc2hvdChFcnJvclN0cmluZyosIGludCBpbl91aWQpID0gMDsKICAgICAgICB2aXJ0
dWFsIHZvaWQgcmVtb3ZlUHJvZmlsZShFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgaW5fdHlw
ZSwgaW50IGluX3VpZCkgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCBjbGVhclByb2ZpbGVzKEVy
cm9yU3RyaW5nKikgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCB0YWtlSGVhcFNuYXBzaG90KEVy
cm9yU3RyaW5nKiwgY29uc3QgYm9vbCogaW5fcmVwb3J0UHJvZ3Jlc3MpID0gMDsKICAgICAgICB2
aXJ0dWFsIHZvaWQgY29sbGVjdEdhcmJhZ2UoRXJyb3JTdHJpbmcqKSA9IDA7CiAgICAgICAgdmly
dHVhbCB2b2lkIGdldE9iamVjdEJ5SGVhcE9iamVjdElkKEVycm9yU3RyaW5nKiwgY29uc3QgU3Ry
aW5nJiBpbl9vYmplY3RJZCwgY29uc3QgU3RyaW5nKiBpbl9vYmplY3RHcm91cCwgUmVmUHRyPFR5
cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiBvdXRfcmVzdWx0KSA9IDA7CiAgICAg
ICAgdmlydHVhbCB2b2lkIGdldEhlYXBPYmplY3RJZChFcnJvclN0cmluZyosIGNvbnN0IFN0cmlu
ZyYgaW5fb2JqZWN0SWQsIFR5cGVCdWlsZGVyOjpQcm9maWxlcjo6SGVhcFNuYXBzaG90T2JqZWN0
SWQqIG91dF9oZWFwU25hcHNob3RPYmplY3RJZCkgPSAwOwoKICAgIHByb3RlY3RlZDoKICAgICAg
ICB2aXJ0dWFsIH5Qcm9maWxlckNvbW1hbmRIYW5kbGVyKCkgeyB9CiAgICB9OwoKI2VuZGlmIC8v
IEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAgY2xhc3MgUnVudGltZUNvbW1hbmRIYW5k
bGVyIHsKICAgIHB1YmxpYzoKICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2UoRXJyb3JTdHJpbmcq
LCBjb25zdCBTdHJpbmcmIGluX3NvdXJjZSwgVHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlN5bnRheEVy
cm9yVHlwZTo6RW51bSogb3V0X3Jlc3VsdCwgVHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxTdHJpbmc+
KiBvcHRfb3V0X21lc3NhZ2UsIFJlZlB0cjxUeXBlQnVpbGRlcjo6UnVudGltZTo6RXJyb3JSYW5n
ZT4mIG9wdF9vdXRfcmFuZ2UpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgZXZhbHVhdGUoRXJy
b3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGluX2V4cHJlc3Npb24sIGNvbnN0IFN0cmluZyogaW5f
b2JqZWN0R3JvdXAsIGNvbnN0IGJvb2wqIGluX2luY2x1ZGVDb21tYW5kTGluZUFQSSwgY29uc3Qg
Ym9vbCogaW5fZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBjb25zdCBpbnQq
IGluX2NvbnRleHRJZCwgY29uc3QgYm9vbCogaW5fcmV0dXJuQnlWYWx1ZSwgY29uc3QgYm9vbCog
aW5fZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9i
amVjdD4mIG91dF9yZXN1bHQsIFR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8Ym9vbD4qIG9wdF9vdXRf
d2FzVGhyb3duKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIGNhbGxGdW5jdGlvbk9uKEVycm9y
U3RyaW5nKiwgY29uc3QgU3RyaW5nJiBpbl9vYmplY3RJZCwgY29uc3QgU3RyaW5nJiBpbl9mdW5j
dGlvbkRlY2xhcmF0aW9uLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBpbl9hcmd1bWVu
dHMsIGNvbnN0IGJvb2wqIGluX2RvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwg
Y29uc3QgYm9vbCogaW5fcmV0dXJuQnlWYWx1ZSwgY29uc3QgYm9vbCogaW5fZ2VuZXJhdGVQcmV2
aWV3LCBSZWZQdHI8VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIG91dF9yZXN1
bHQsIFR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8Ym9vbD4qIG9wdF9vdXRfd2FzVGhyb3duKSA9IDA7
CiAgICAgICAgdmlydHVhbCB2b2lkIGdldFByb3BlcnRpZXMoRXJyb3JTdHJpbmcqLCBjb25zdCBT
dHJpbmcmIGluX29iamVjdElkLCBjb25zdCBib29sKiBpbl9vd25Qcm9wZXJ0aWVzLCBSZWZQdHI8
VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpSdW50aW1lOjpQcm9wZXJ0eURlc2NyaXB0
b3I+ID4mIG91dF9yZXN1bHQsIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6
OlJ1bnRpbWU6OkludGVybmFsUHJvcGVydHlEZXNjcmlwdG9yPiA+JiBvcHRfb3V0X2ludGVybmFs
UHJvcGVydGllcykgPSAwOwogICAgICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlT2JqZWN0KEVycm9y
U3RyaW5nKiwgY29uc3QgU3RyaW5nJiBpbl9vYmplY3RJZCkgPSAwOwogICAgICAgIHZpcnR1YWwg
dm9pZCByZWxlYXNlT2JqZWN0R3JvdXAoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGluX29i
amVjdEdyb3VwKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIHJ1bihFcnJvclN0cmluZyopID0g
MDsKICAgICAgICB2aXJ0dWFsIHZvaWQgZW5hYmxlKEVycm9yU3RyaW5nKikgPSAwOwogICAgICAg
IHZpcnR1YWwgdm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nKikgPSAwOwoKICAgIHByb3RlY3RlZDoK
ICAgICAgICB2aXJ0dWFsIH5SdW50aW1lQ29tbWFuZEhhbmRsZXIoKSB7IH0KICAgIH07CgogICAg
Y2xhc3MgVGltZWxpbmVDb21tYW5kSGFuZGxlciB7CiAgICBwdWJsaWM6CiAgICAgICAgdmlydHVh
bCB2b2lkIHN0YXJ0KEVycm9yU3RyaW5nKiwgY29uc3QgaW50KiBpbl9tYXhDYWxsU3RhY2tEZXB0
aCwgY29uc3QgYm9vbCogaW5faW5jbHVkZURvbUNvdW50ZXJzKSA9IDA7CiAgICAgICAgdmlydHVh
bCB2b2lkIHN0b3AoRXJyb3JTdHJpbmcqKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIHN1cHBv
cnRzRnJhbWVJbnN0cnVtZW50YXRpb24oRXJyb3JTdHJpbmcqLCBib29sKiBvdXRfcmVzdWx0KSA9
IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIGNhbk1vbml0b3JNYWluVGhyZWFkKEVycm9yU3RyaW5n
KiwgYm9vbCogb3V0X3Jlc3VsdCkgPSAwOwoKICAgIHByb3RlY3RlZDoKICAgICAgICB2aXJ0dWFs
IH5UaW1lbGluZUNvbW1hbmRIYW5kbGVyKCkgeyB9CiAgICB9OwoKI2lmIEVOQUJMRShXT1JLRVJT
KQogICAgY2xhc3MgV29ya2VyQ29tbWFuZEhhbmRsZXIgewogICAgcHVibGljOgogICAgICAgIHZp
cnR1YWwgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcqKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lk
IGRpc2FibGUoRXJyb3JTdHJpbmcqKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIHNlbmRNZXNz
YWdlVG9Xb3JrZXIoRXJyb3JTdHJpbmcqLCBpbnQgaW5fd29ya2VySWQsIGNvbnN0IFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+JiBpbl9tZXNzYWdlKSA9IDA7CiAgICAgICAgdmlydHVhbCB2b2lkIGNh
bkluc3BlY3RXb3JrZXJzKEVycm9yU3RyaW5nKiwgYm9vbCogb3V0X3Jlc3VsdCkgPSAwOwogICAg
ICAgIHZpcnR1YWwgdm9pZCBjb25uZWN0VG9Xb3JrZXIoRXJyb3JTdHJpbmcqLCBpbnQgaW5fd29y
a2VySWQpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzY29ubmVjdEZyb21Xb3JrZXIoRXJy
b3JTdHJpbmcqLCBpbnQgaW5fd29ya2VySWQpID0gMDsKICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0
QXV0b2Nvbm5lY3RUb1dvcmtlcnMoRXJyb3JTdHJpbmcqLCBib29sIGluX3ZhbHVlKSA9IDA7Cgog
ICAgcHJvdGVjdGVkOgogICAgICAgIHZpcnR1YWwgfldvcmtlckNvbW1hbmRIYW5kbGVyKCkgeyB9
CiAgICB9OwoKI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQoKICAgIHZpcnR1YWwgdm9pZCByZWdp
c3RlckFnZW50KEFwcGxpY2F0aW9uQ2FjaGVDb21tYW5kSGFuZGxlciogYXBwbGljYXRpb25DYWNo
ZUFnZW50KSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJBZ2VudChDU1NDb21tYW5kSGFu
ZGxlciogY3NzQWdlbnQpID0gMDsKICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckFnZW50KENhbnZh
c0NvbW1hbmRIYW5kbGVyKiBjYW52YXNBZ2VudCkgPSAwOwogICAgdmlydHVhbCB2b2lkIHJlZ2lz
dGVyQWdlbnQoQ29uc29sZUNvbW1hbmRIYW5kbGVyKiBjb25zb2xlQWdlbnQpID0gMDsKICAgIHZp
cnR1YWwgdm9pZCByZWdpc3RlckFnZW50KERPTUNvbW1hbmRIYW5kbGVyKiBkb21BZ2VudCkgPSAw
OwojaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCgogICAgdmlydHVhbCB2b2lkIHJlZ2lz
dGVyQWdlbnQoRE9NRGVidWdnZXJDb21tYW5kSGFuZGxlciogZG9tRGVidWdnZXJBZ2VudCkgPSAw
OwojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCgogICAgdmlydHVhbCB2b2lk
IHJlZ2lzdGVyQWdlbnQoRE9NU3RvcmFnZUNvbW1hbmRIYW5kbGVyKiBkb21TdG9yYWdlQWdlbnQp
ID0gMDsKI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCgogICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVy
QWdlbnQoRGF0YWJhc2VDb21tYW5kSGFuZGxlciogZGF0YWJhc2VBZ2VudCkgPSAwOwojZW5kaWYg
Ly8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikK
CiAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJBZ2VudChEZWJ1Z2dlckNvbW1hbmRIYW5kbGVyKiBk
ZWJ1Z2dlckFnZW50KSA9IDA7CiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikK
CiAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJBZ2VudChGaWxlU3lzdGVtQ29tbWFuZEhhbmRsZXIq
IGZpbGVTeXN0ZW1BZ2VudCkgPSAwOwogICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyQWdlbnQoSGVh
cFByb2ZpbGVyQ29tbWFuZEhhbmRsZXIqIGhlYXBQcm9maWxlckFnZW50KSA9IDA7CiNpZiBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkKCiAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJBZ2VudChJbmRl
eGVkREJDb21tYW5kSGFuZGxlciogaW5kZXhlZERCQWdlbnQpID0gMDsKI2VuZGlmIC8vIEVOQUJM
RShJTkRFWEVEX0RBVEFCQVNFKQoKICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckFnZW50KElucHV0
Q29tbWFuZEhhbmRsZXIqIGlucHV0QWdlbnQpID0gMDsKICAgIHZpcnR1YWwgdm9pZCByZWdpc3Rl
ckFnZW50KEluc3BlY3RvckNvbW1hbmRIYW5kbGVyKiBpbnNwZWN0b3JBZ2VudCkgPSAwOwogICAg
dmlydHVhbCB2b2lkIHJlZ2lzdGVyQWdlbnQoTGF5ZXJUcmVlQ29tbWFuZEhhbmRsZXIqIGxheWVy
VHJlZUFnZW50KSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJBZ2VudChNZW1vcnlDb21t
YW5kSGFuZGxlciogbWVtb3J5QWdlbnQpID0gMDsKICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckFn
ZW50KE5ldHdvcmtDb21tYW5kSGFuZGxlciogbmV0d29ya0FnZW50KSA9IDA7CiAgICB2aXJ0dWFs
IHZvaWQgcmVnaXN0ZXJBZ2VudChQYWdlQ29tbWFuZEhhbmRsZXIqIHBhZ2VBZ2VudCkgPSAwOwoj
aWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCgogICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVy
QWdlbnQoUHJvZmlsZXJDb21tYW5kSGFuZGxlciogcHJvZmlsZXJBZ2VudCkgPSAwOwojZW5kaWYg
Ly8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCgogICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVy
QWdlbnQoUnVudGltZUNvbW1hbmRIYW5kbGVyKiBydW50aW1lQWdlbnQpID0gMDsKICAgIHZpcnR1
YWwgdm9pZCByZWdpc3RlckFnZW50KFRpbWVsaW5lQ29tbWFuZEhhbmRsZXIqIHRpbWVsaW5lQWdl
bnQpID0gMDsKI2lmIEVOQUJMRShXT1JLRVJTKQoKICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckFn
ZW50KFdvcmtlckNvbW1hbmRIYW5kbGVyKiB3b3JrZXJBZ2VudCkgPSAwOwojZW5kaWYgLy8gRU5B
QkxFKFdPUktFUlMpCgoKICAgIHZpcnR1YWwgdm9pZCBjbGVhckZyb250ZW5kKCkgPSAwOwoKICAg
IGVudW0gQ29tbW9uRXJyb3JDb2RlIHsKICAgICAgICBQYXJzZUVycm9yID0gMCwKICAgICAgICBJ
bnZhbGlkUmVxdWVzdCwKICAgICAgICBNZXRob2ROb3RGb3VuZCwKICAgICAgICBJbnZhbGlkUGFy
YW1zLAogICAgICAgIEludGVybmFsRXJyb3IsCiAgICAgICAgU2VydmVyRXJyb3IsCiAgICAgICAg
TGFzdEVudHJ5LAogICAgfTsKCiAgICB2b2lkIHJlcG9ydFByb3RvY29sRXJyb3IoY29uc3QgbG9u
ZyogY29uc3QgY2FsbElkLCBDb21tb25FcnJvckNvZGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNz
YWdlKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCByZXBvcnRQcm90b2NvbEVycm9yKGNvbnN0IGxv
bmcqIGNvbnN0IGNhbGxJZCwgQ29tbW9uRXJyb3JDb2RlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVz
c2FnZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gZGF0YSkgY29uc3QgPSAwOwogICAgdmly
dHVhbCB2b2lkIGRpc3BhdGNoKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkgPSAwOwoKICAgIGVudW0g
TWV0aG9kTmFtZXMgewogICAgICAgIGtBcHBsaWNhdGlvbkNhY2hlX2dldEZyYW1lc1dpdGhNYW5p
ZmVzdHNDbWQsCiAgICAgICAga0FwcGxpY2F0aW9uQ2FjaGVfZW5hYmxlQ21kLAogICAgICAgIGtB
cHBsaWNhdGlvbkNhY2hlX2dldE1hbmlmZXN0Rm9yRnJhbWVDbWQsCiAgICAgICAga0FwcGxpY2F0
aW9uQ2FjaGVfZ2V0QXBwbGljYXRpb25DYWNoZUZvckZyYW1lQ21kLAogICAgICAgIGtDU1NfZW5h
YmxlQ21kLAogICAgICAgIGtDU1NfZGlzYWJsZUNtZCwKICAgICAgICBrQ1NTX2dldE1hdGNoZWRT
dHlsZXNGb3JOb2RlQ21kLAogICAgICAgIGtDU1NfZ2V0SW5saW5lU3R5bGVzRm9yTm9kZUNtZCwK
ICAgICAgICBrQ1NTX2dldENvbXB1dGVkU3R5bGVGb3JOb2RlQ21kLAogICAgICAgIGtDU1NfZ2V0
QWxsU3R5bGVTaGVldHNDbWQsCiAgICAgICAga0NTU19nZXRTdHlsZVNoZWV0Q21kLAogICAgICAg
IGtDU1NfZ2V0U3R5bGVTaGVldFRleHRDbWQsCiAgICAgICAga0NTU19zZXRTdHlsZVNoZWV0VGV4
dENtZCwKICAgICAgICBrQ1NTX3NldFN0eWxlVGV4dENtZCwKICAgICAgICBrQ1NTX3NldFByb3Bl
cnR5VGV4dENtZCwKICAgICAgICBrQ1NTX3RvZ2dsZVByb3BlcnR5Q21kLAogICAgICAgIGtDU1Nf
c2V0UnVsZVNlbGVjdG9yQ21kLAogICAgICAgIGtDU1NfYWRkUnVsZUNtZCwKICAgICAgICBrQ1NT
X2dldFN1cHBvcnRlZENTU1Byb3BlcnRpZXNDbWQsCiAgICAgICAga0NTU19mb3JjZVBzZXVkb1N0
YXRlQ21kLAogICAgICAgIGtDU1Nfc3RhcnRTZWxlY3RvclByb2ZpbGVyQ21kLAogICAgICAgIGtD
U1Nfc3RvcFNlbGVjdG9yUHJvZmlsZXJDbWQsCiAgICAgICAga0NTU19nZXROYW1lZEZsb3dDb2xs
ZWN0aW9uQ21kLAogICAgICAgIGtDYW52YXNfZW5hYmxlQ21kLAogICAgICAgIGtDYW52YXNfZGlz
YWJsZUNtZCwKICAgICAgICBrQ2FudmFzX2Ryb3BUcmFjZUxvZ0NtZCwKICAgICAgICBrQ2FudmFz
X2hhc1VuaW5zdHJ1bWVudGVkQ2FudmFzZXNDbWQsCiAgICAgICAga0NhbnZhc19jYXB0dXJlRnJh
bWVDbWQsCiAgICAgICAga0NhbnZhc19zdGFydENhcHR1cmluZ0NtZCwKICAgICAgICBrQ2FudmFz
X3N0b3BDYXB0dXJpbmdDbWQsCiAgICAgICAga0NhbnZhc19nZXRUcmFjZUxvZ0NtZCwKICAgICAg
ICBrQ2FudmFzX3JlcGxheVRyYWNlTG9nQ21kLAogICAgICAgIGtDYW52YXNfZ2V0UmVzb3VyY2VJ
bmZvQ21kLAogICAgICAgIGtDYW52YXNfZ2V0UmVzb3VyY2VTdGF0ZUNtZCwKICAgICAgICBrQ29u
c29sZV9lbmFibGVDbWQsCiAgICAgICAga0NvbnNvbGVfZGlzYWJsZUNtZCwKICAgICAgICBrQ29u
c29sZV9jbGVhck1lc3NhZ2VzQ21kLAogICAgICAgIGtDb25zb2xlX3NldE1vbml0b3JpbmdYSFJF
bmFibGVkQ21kLAogICAgICAgIGtDb25zb2xlX2FkZEluc3BlY3RlZE5vZGVDbWQsCiAgICAgICAg
a0NvbnNvbGVfYWRkSW5zcGVjdGVkSGVhcE9iamVjdENtZCwKICAgICAgICBrRE9NX2dldERvY3Vt
ZW50Q21kLAogICAgICAgIGtET01fcmVxdWVzdENoaWxkTm9kZXNDbWQsCiAgICAgICAga0RPTV9x
dWVyeVNlbGVjdG9yQ21kLAogICAgICAgIGtET01fcXVlcnlTZWxlY3RvckFsbENtZCwKICAgICAg
ICBrRE9NX3NldE5vZGVOYW1lQ21kLAogICAgICAgIGtET01fc2V0Tm9kZVZhbHVlQ21kLAogICAg
ICAgIGtET01fcmVtb3ZlTm9kZUNtZCwKICAgICAgICBrRE9NX3NldEF0dHJpYnV0ZVZhbHVlQ21k
LAogICAgICAgIGtET01fc2V0QXR0cmlidXRlc0FzVGV4dENtZCwKICAgICAgICBrRE9NX3JlbW92
ZUF0dHJpYnV0ZUNtZCwKICAgICAgICBrRE9NX2dldEV2ZW50TGlzdGVuZXJzRm9yTm9kZUNtZCwK
ICAgICAgICBrRE9NX2dldE91dGVySFRNTENtZCwKICAgICAgICBrRE9NX3NldE91dGVySFRNTENt
ZCwKICAgICAgICBrRE9NX3BlcmZvcm1TZWFyY2hDbWQsCiAgICAgICAga0RPTV9nZXRTZWFyY2hS
ZXN1bHRzQ21kLAogICAgICAgIGtET01fZGlzY2FyZFNlYXJjaFJlc3VsdHNDbWQsCiAgICAgICAg
a0RPTV9yZXF1ZXN0Tm9kZUNtZCwKICAgICAgICBrRE9NX3NldEluc3BlY3RNb2RlRW5hYmxlZENt
ZCwKICAgICAgICBrRE9NX2hpZ2hsaWdodFJlY3RDbWQsCiAgICAgICAga0RPTV9oaWdobGlnaHRR
dWFkQ21kLAogICAgICAgIGtET01faGlnaGxpZ2h0Tm9kZUNtZCwKICAgICAgICBrRE9NX2hpZGVI
aWdobGlnaHRDbWQsCiAgICAgICAga0RPTV9oaWdobGlnaHRGcmFtZUNtZCwKICAgICAgICBrRE9N
X3B1c2hOb2RlQnlQYXRoVG9Gcm9udGVuZENtZCwKICAgICAgICBrRE9NX3B1c2hOb2RlQnlCYWNr
ZW5kSWRUb0Zyb250ZW5kQ21kLAogICAgICAgIGtET01fcmVsZWFzZUJhY2tlbmROb2RlSWRzQ21k
LAogICAgICAgIGtET01fcmVzb2x2ZU5vZGVDbWQsCiAgICAgICAga0RPTV9nZXRBdHRyaWJ1dGVz
Q21kLAogICAgICAgIGtET01fbW92ZVRvQ21kLAogICAgICAgIGtET01fdW5kb0NtZCwKICAgICAg
ICBrRE9NX3JlZG9DbWQsCiAgICAgICAga0RPTV9tYXJrVW5kb2FibGVTdGF0ZUNtZCwKICAgICAg
ICBrRE9NX2ZvY3VzQ21kLAogICAgICAgIGtET01fc2V0RmlsZUlucHV0RmlsZXNDbWQsCiNpZiBF
TkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCiAgICAgICAga0RPTURlYnVnZ2VyX3NldERPTUJy
ZWFrcG9pbnRDbWQsCiAgICAgICAga0RPTURlYnVnZ2VyX3JlbW92ZURPTUJyZWFrcG9pbnRDbWQs
CiAgICAgICAga0RPTURlYnVnZ2VyX3NldEV2ZW50TGlzdGVuZXJCcmVha3BvaW50Q21kLAogICAg
ICAgIGtET01EZWJ1Z2dlcl9yZW1vdmVFdmVudExpc3RlbmVyQnJlYWtwb2ludENtZCwKICAgICAg
ICBrRE9NRGVidWdnZXJfc2V0SW5zdHJ1bWVudGF0aW9uQnJlYWtwb2ludENtZCwKICAgICAgICBr
RE9NRGVidWdnZXJfcmVtb3ZlSW5zdHJ1bWVudGF0aW9uQnJlYWtwb2ludENtZCwKICAgICAgICBr
RE9NRGVidWdnZXJfc2V0WEhSQnJlYWtwb2ludENtZCwKICAgICAgICBrRE9NRGVidWdnZXJfcmVt
b3ZlWEhSQnJlYWtwb2ludENtZCwKI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VS
KQoKICAgICAgICBrRE9NU3RvcmFnZV9lbmFibGVDbWQsCiAgICAgICAga0RPTVN0b3JhZ2VfZGlz
YWJsZUNtZCwKICAgICAgICBrRE9NU3RvcmFnZV9nZXRET01TdG9yYWdlSXRlbXNDbWQsCiAgICAg
ICAga0RPTVN0b3JhZ2Vfc2V0RE9NU3RvcmFnZUl0ZW1DbWQsCiAgICAgICAga0RPTVN0b3JhZ2Vf
cmVtb3ZlRE9NU3RvcmFnZUl0ZW1DbWQsCiNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQoKICAgICAg
ICBrRGF0YWJhc2VfZW5hYmxlQ21kLAogICAgICAgIGtEYXRhYmFzZV9kaXNhYmxlQ21kLAogICAg
ICAgIGtEYXRhYmFzZV9nZXREYXRhYmFzZVRhYmxlTmFtZXNDbWQsCiAgICAgICAga0RhdGFiYXNl
X2V4ZWN1dGVTUUxDbWQsCiNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQoKI2lmIEVOQUJM
RShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKICAgICAgICBrRGVidWdnZXJfY2F1c2VzUmVjb21waWxh
dGlvbkNtZCwKICAgICAgICBrRGVidWdnZXJfc3VwcG9ydHNTZXBhcmF0ZVNjcmlwdENvbXBpbGF0
aW9uQW5kRXhlY3V0aW9uQ21kLAogICAgICAgIGtEZWJ1Z2dlcl9lbmFibGVDbWQsCiAgICAgICAg
a0RlYnVnZ2VyX2Rpc2FibGVDbWQsCiAgICAgICAga0RlYnVnZ2VyX3NldEJyZWFrcG9pbnRzQWN0
aXZlQ21kLAogICAgICAgIGtEZWJ1Z2dlcl9zZXRCcmVha3BvaW50QnlVcmxDbWQsCiAgICAgICAg
a0RlYnVnZ2VyX3NldEJyZWFrcG9pbnRDbWQsCiAgICAgICAga0RlYnVnZ2VyX3JlbW92ZUJyZWFr
cG9pbnRDbWQsCiAgICAgICAga0RlYnVnZ2VyX2NvbnRpbnVlVG9Mb2NhdGlvbkNtZCwKICAgICAg
ICBrRGVidWdnZXJfc3RlcE92ZXJDbWQsCiAgICAgICAga0RlYnVnZ2VyX3N0ZXBJbnRvQ21kLAog
ICAgICAgIGtEZWJ1Z2dlcl9zdGVwT3V0Q21kLAogICAgICAgIGtEZWJ1Z2dlcl9wYXVzZUNtZCwK
ICAgICAgICBrRGVidWdnZXJfcmVzdW1lQ21kLAogICAgICAgIGtEZWJ1Z2dlcl9zZWFyY2hJbkNv
bnRlbnRDbWQsCiAgICAgICAga0RlYnVnZ2VyX2NhblNldFNjcmlwdFNvdXJjZUNtZCwKICAgICAg
ICBrRGVidWdnZXJfc2V0U2NyaXB0U291cmNlQ21kLAogICAgICAgIGtEZWJ1Z2dlcl9nZXRTY3Jp
cHRTb3VyY2VDbWQsCiAgICAgICAga0RlYnVnZ2VyX2dldEZ1bmN0aW9uRGV0YWlsc0NtZCwKICAg
ICAgICBrRGVidWdnZXJfc2V0UGF1c2VPbkV4Y2VwdGlvbnNDbWQsCiAgICAgICAga0RlYnVnZ2Vy
X2V2YWx1YXRlT25DYWxsRnJhbWVDbWQsCiAgICAgICAga0RlYnVnZ2VyX2NvbXBpbGVTY3JpcHRD
bWQsCiAgICAgICAga0RlYnVnZ2VyX3J1blNjcmlwdENtZCwKICAgICAgICBrRGVidWdnZXJfc2V0
T3ZlcmxheU1lc3NhZ2VDbWQsCiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikK
CiAgICAgICAga0ZpbGVTeXN0ZW1fZW5hYmxlQ21kLAogICAgICAgIGtGaWxlU3lzdGVtX2Rpc2Fi
bGVDbWQsCiAgICAgICAga0ZpbGVTeXN0ZW1fcmVxdWVzdEZpbGVTeXN0ZW1Sb290Q21kLAogICAg
ICAgIGtGaWxlU3lzdGVtX3JlcXVlc3REaXJlY3RvcnlDb250ZW50Q21kLAogICAgICAgIGtGaWxl
U3lzdGVtX3JlcXVlc3RNZXRhZGF0YUNtZCwKICAgICAgICBrRmlsZVN5c3RlbV9yZXF1ZXN0Rmls
ZUNvbnRlbnRDbWQsCiAgICAgICAga0ZpbGVTeXN0ZW1fZGVsZXRlRW50cnlDbWQsCiAgICAgICAg
a0hlYXBQcm9maWxlcl9oYXNIZWFwUHJvZmlsZXJDbWQsCiAgICAgICAga0hlYXBQcm9maWxlcl9n
ZXRQcm9maWxlSGVhZGVyc0NtZCwKICAgICAgICBrSGVhcFByb2ZpbGVyX2dldEhlYXBTbmFwc2hv
dENtZCwKICAgICAgICBrSGVhcFByb2ZpbGVyX3JlbW92ZVByb2ZpbGVDbWQsCiAgICAgICAga0hl
YXBQcm9maWxlcl9jbGVhclByb2ZpbGVzQ21kLAogICAgICAgIGtIZWFwUHJvZmlsZXJfdGFrZUhl
YXBTbmFwc2hvdENtZCwKICAgICAgICBrSGVhcFByb2ZpbGVyX2NvbGxlY3RHYXJiYWdlQ21kLAog
ICAgICAgIGtIZWFwUHJvZmlsZXJfZ2V0T2JqZWN0QnlIZWFwT2JqZWN0SWRDbWQsCiAgICAgICAg
a0hlYXBQcm9maWxlcl9nZXRIZWFwT2JqZWN0SWRDbWQsCiNpZiBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKCiAgICAgICAga0luZGV4ZWREQl9lbmFibGVDbWQsCiAgICAgICAga0luZGV4ZWREQl9k
aXNhYmxlQ21kLAogICAgICAgIGtJbmRleGVkREJfcmVxdWVzdERhdGFiYXNlTmFtZXNDbWQsCiAg
ICAgICAga0luZGV4ZWREQl9yZXF1ZXN0RGF0YWJhc2VDbWQsCiAgICAgICAga0luZGV4ZWREQl9y
ZXF1ZXN0RGF0YUNtZCwKICAgICAgICBrSW5kZXhlZERCX2NsZWFyT2JqZWN0U3RvcmVDbWQsCiNl
bmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKCiAgICAgICAga0lucHV0X2Rpc3BhdGNo
S2V5RXZlbnRDbWQsCiAgICAgICAga0lucHV0X2Rpc3BhdGNoTW91c2VFdmVudENtZCwKICAgICAg
ICBrSW5zcGVjdG9yX2VuYWJsZUNtZCwKICAgICAgICBrSW5zcGVjdG9yX2Rpc2FibGVDbWQsCiAg
ICAgICAga0xheWVyVHJlZV9lbmFibGVDbWQsCiAgICAgICAga0xheWVyVHJlZV9kaXNhYmxlQ21k
LAogICAgICAgIGtMYXllclRyZWVfbGF5ZXJzRm9yTm9kZUNtZCwKICAgICAgICBrTGF5ZXJUcmVl
X3JlYXNvbnNGb3JDb21wb3NpdGluZ0xheWVyQ21kLAogICAgICAgIGtNZW1vcnlfZ2V0RE9NQ291
bnRlcnNDbWQsCiAgICAgICAga05ldHdvcmtfZW5hYmxlQ21kLAogICAgICAgIGtOZXR3b3JrX2Rp
c2FibGVDbWQsCiAgICAgICAga05ldHdvcmtfc2V0VXNlckFnZW50T3ZlcnJpZGVDbWQsCiAgICAg
ICAga05ldHdvcmtfc2V0RXh0cmFIVFRQSGVhZGVyc0NtZCwKICAgICAgICBrTmV0d29ya19nZXRS
ZXNwb25zZUJvZHlDbWQsCiAgICAgICAga05ldHdvcmtfcmVwbGF5WEhSQ21kLAogICAgICAgIGtO
ZXR3b3JrX2NhbkNsZWFyQnJvd3NlckNhY2hlQ21kLAogICAgICAgIGtOZXR3b3JrX2NsZWFyQnJv
d3NlckNhY2hlQ21kLAogICAgICAgIGtOZXR3b3JrX2NhbkNsZWFyQnJvd3NlckNvb2tpZXNDbWQs
CiAgICAgICAga05ldHdvcmtfY2xlYXJCcm93c2VyQ29va2llc0NtZCwKICAgICAgICBrTmV0d29y
a19zZXRDYWNoZURpc2FibGVkQ21kLAogICAgICAgIGtQYWdlX2VuYWJsZUNtZCwKICAgICAgICBr
UGFnZV9kaXNhYmxlQ21kLAogICAgICAgIGtQYWdlX2FkZFNjcmlwdFRvRXZhbHVhdGVPbkxvYWRD
bWQsCiAgICAgICAga1BhZ2VfcmVtb3ZlU2NyaXB0VG9FdmFsdWF0ZU9uTG9hZENtZCwKICAgICAg
ICBrUGFnZV9yZWxvYWRDbWQsCiAgICAgICAga1BhZ2VfbmF2aWdhdGVDbWQsCiAgICAgICAga1Bh
Z2VfZ2V0Q29va2llc0NtZCwKICAgICAgICBrUGFnZV9kZWxldGVDb29raWVDbWQsCiAgICAgICAg
a1BhZ2VfZ2V0UmVzb3VyY2VUcmVlQ21kLAogICAgICAgIGtQYWdlX2dldFJlc291cmNlQ29udGVu
dENtZCwKICAgICAgICBrUGFnZV9zZWFyY2hJblJlc291cmNlQ21kLAogICAgICAgIGtQYWdlX3Nl
YXJjaEluUmVzb3VyY2VzQ21kLAogICAgICAgIGtQYWdlX3NldERvY3VtZW50Q29udGVudENtZCwK
ICAgICAgICBrUGFnZV9jYW5PdmVycmlkZURldmljZU1ldHJpY3NDbWQsCiAgICAgICAga1BhZ2Vf
c2V0RGV2aWNlTWV0cmljc092ZXJyaWRlQ21kLAogICAgICAgIGtQYWdlX3NldFNob3dQYWludFJl
Y3RzQ21kLAogICAgICAgIGtQYWdlX2NhblNob3dEZWJ1Z0JvcmRlcnNDbWQsCiAgICAgICAga1Bh
Z2Vfc2V0U2hvd0RlYnVnQm9yZGVyc0NtZCwKICAgICAgICBrUGFnZV9jYW5TaG93RlBTQ291bnRl
ckNtZCwKICAgICAgICBrUGFnZV9zZXRTaG93RlBTQ291bnRlckNtZCwKICAgICAgICBrUGFnZV9j
YW5Db250aW51b3VzbHlQYWludENtZCwKICAgICAgICBrUGFnZV9zZXRDb250aW51b3VzUGFpbnRp
bmdFbmFibGVkQ21kLAogICAgICAgIGtQYWdlX2dldFNjcmlwdEV4ZWN1dGlvblN0YXR1c0NtZCwK
ICAgICAgICBrUGFnZV9zZXRTY3JpcHRFeGVjdXRpb25EaXNhYmxlZENtZCwKICAgICAgICBrUGFn
ZV9zZXRHZW9sb2NhdGlvbk92ZXJyaWRlQ21kLAogICAgICAgIGtQYWdlX2NsZWFyR2VvbG9jYXRp
b25PdmVycmlkZUNtZCwKICAgICAgICBrUGFnZV9jYW5PdmVycmlkZUdlb2xvY2F0aW9uQ21kLAog
ICAgICAgIGtQYWdlX3NldERldmljZU9yaWVudGF0aW9uT3ZlcnJpZGVDbWQsCiAgICAgICAga1Bh
Z2VfY2xlYXJEZXZpY2VPcmllbnRhdGlvbk92ZXJyaWRlQ21kLAogICAgICAgIGtQYWdlX2Nhbk92
ZXJyaWRlRGV2aWNlT3JpZW50YXRpb25DbWQsCiAgICAgICAga1BhZ2Vfc2V0VG91Y2hFbXVsYXRp
b25FbmFibGVkQ21kLAogICAgICAgIGtQYWdlX3NldEVtdWxhdGVkTWVkaWFDbWQsCiAgICAgICAg
a1BhZ2VfZ2V0Q29tcG9zaXRpbmdCb3JkZXJzVmlzaWJsZUNtZCwKICAgICAgICBrUGFnZV9zZXRD
b21wb3NpdGluZ0JvcmRlcnNWaXNpYmxlQ21kLAogICAgICAgIGtQYWdlX2NhcHR1cmVTY3JlZW5z
aG90Q21kLAogICAgICAgIGtQYWdlX2hhbmRsZUphdmFTY3JpcHREaWFsb2dDbWQsCiAgICAgICAg
a1BhZ2VfYXJjaGl2ZUNtZCwKI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKICAgICAg
ICBrUHJvZmlsZXJfY2F1c2VzUmVjb21waWxhdGlvbkNtZCwKICAgICAgICBrUHJvZmlsZXJfaXNT
YW1wbGluZ0NtZCwKICAgICAgICBrUHJvZmlsZXJfaGFzSGVhcFByb2ZpbGVyQ21kLAogICAgICAg
IGtQcm9maWxlcl9lbmFibGVDbWQsCiAgICAgICAga1Byb2ZpbGVyX2Rpc2FibGVDbWQsCiAgICAg
ICAga1Byb2ZpbGVyX3N0YXJ0Q21kLAogICAgICAgIGtQcm9maWxlcl9zdG9wQ21kLAogICAgICAg
IGtQcm9maWxlcl9nZXRQcm9maWxlSGVhZGVyc0NtZCwKICAgICAgICBrUHJvZmlsZXJfZ2V0Q1BV
UHJvZmlsZUNtZCwKICAgICAgICBrUHJvZmlsZXJfZ2V0SGVhcFNuYXBzaG90Q21kLAogICAgICAg
IGtQcm9maWxlcl9yZW1vdmVQcm9maWxlQ21kLAogICAgICAgIGtQcm9maWxlcl9jbGVhclByb2Zp
bGVzQ21kLAogICAgICAgIGtQcm9maWxlcl90YWtlSGVhcFNuYXBzaG90Q21kLAogICAgICAgIGtQ
cm9maWxlcl9jb2xsZWN0R2FyYmFnZUNtZCwKICAgICAgICBrUHJvZmlsZXJfZ2V0T2JqZWN0QnlI
ZWFwT2JqZWN0SWRDbWQsCiAgICAgICAga1Byb2ZpbGVyX2dldEhlYXBPYmplY3RJZENtZCwKI2Vu
ZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKICAgICAgICBrUnVudGltZV9wYXJz
ZUNtZCwKICAgICAgICBrUnVudGltZV9ldmFsdWF0ZUNtZCwKICAgICAgICBrUnVudGltZV9jYWxs
RnVuY3Rpb25PbkNtZCwKICAgICAgICBrUnVudGltZV9nZXRQcm9wZXJ0aWVzQ21kLAogICAgICAg
IGtSdW50aW1lX3JlbGVhc2VPYmplY3RDbWQsCiAgICAgICAga1J1bnRpbWVfcmVsZWFzZU9iamVj
dEdyb3VwQ21kLAogICAgICAgIGtSdW50aW1lX3J1bkNtZCwKICAgICAgICBrUnVudGltZV9lbmFi
bGVDbWQsCiAgICAgICAga1J1bnRpbWVfZGlzYWJsZUNtZCwKICAgICAgICBrVGltZWxpbmVfc3Rh
cnRDbWQsCiAgICAgICAga1RpbWVsaW5lX3N0b3BDbWQsCiAgICAgICAga1RpbWVsaW5lX3N1cHBv
cnRzRnJhbWVJbnN0cnVtZW50YXRpb25DbWQsCiAgICAgICAga1RpbWVsaW5lX2Nhbk1vbml0b3JN
YWluVGhyZWFkQ21kLAojaWYgRU5BQkxFKFdPUktFUlMpCgogICAgICAgIGtXb3JrZXJfZW5hYmxl
Q21kLAogICAgICAgIGtXb3JrZXJfZGlzYWJsZUNtZCwKICAgICAgICBrV29ya2VyX3NlbmRNZXNz
YWdlVG9Xb3JrZXJDbWQsCiAgICAgICAga1dvcmtlcl9jYW5JbnNwZWN0V29ya2Vyc0NtZCwKICAg
ICAgICBrV29ya2VyX2Nvbm5lY3RUb1dvcmtlckNtZCwKICAgICAgICBrV29ya2VyX2Rpc2Nvbm5l
Y3RGcm9tV29ya2VyQ21kLAogICAgICAgIGtXb3JrZXJfc2V0QXV0b2Nvbm5lY3RUb1dvcmtlcnND
bWQsCiNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKCgogICAgICAgIGtNZXRob2ROYW1lc0VudW1T
aXplCiAgICB9OwoKICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb21tYW5kTmFtZXNbXTsKfTsKCn0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyX2gpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>216833</attachid>
            <date>2013-11-13 11:58:47 -0800</date>
            <delta_ts>2013-11-13 11:58:47 -0800</delta_ts>
            <desc>[BEFORE] InspectorBackendDispatchers.cpp</desc>
            <filename>InspectorBackendDispatchersBefore.cpp</filename>
            <type>application/octet-stream</type>
            <size>291839</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">Ly8gRmlsZSBpcyBnZW5lcmF0ZWQgYnkgV2ViQ29yZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2Vu
ZXJhdG9ySW5zcGVjdG9yLnB5CgovLyBDb3B5cmlnaHQgKGMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgovLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIENocm9taXVtIEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KCgojaW5jbHVkZSAiY29uZmlnLmgiCgojaWYgRU5BQkxFKElOU1BFQ1RP
UikKCiNpbmNsdWRlICJJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oIgoKI2luY2x1ZGUgIklu
c3BlY3RvckFnZW50LmgiCiNpbmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIKI2luY2x1ZGUgIklu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oIgojaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgoj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CgpuYW1lc3BhY2UgV2ViQ29yZSB7Cgpjb25z
dCBjaGFyKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Y29tbWFuZE5hbWVzW10gPSB7CiAg
ICAiQXBwbGljYXRpb25DYWNoZS5nZXRGcmFtZXNXaXRoTWFuaWZlc3RzIiwKICAgICJBcHBsaWNh
dGlvbkNhY2hlLmVuYWJsZSIsCiAgICAiQXBwbGljYXRpb25DYWNoZS5nZXRNYW5pZmVzdEZvckZy
YW1lIiwKICAgICJBcHBsaWNhdGlvbkNhY2hlLmdldEFwcGxpY2F0aW9uQ2FjaGVGb3JGcmFtZSIs
CiAgICAiQ1NTLmVuYWJsZSIsCiAgICAiQ1NTLmRpc2FibGUiLAogICAgIkNTUy5nZXRNYXRjaGVk
U3R5bGVzRm9yTm9kZSIsCiAgICAiQ1NTLmdldElubGluZVN0eWxlc0Zvck5vZGUiLAogICAgIkNT
Uy5nZXRDb21wdXRlZFN0eWxlRm9yTm9kZSIsCiAgICAiQ1NTLmdldEFsbFN0eWxlU2hlZXRzIiwK
ICAgICJDU1MuZ2V0U3R5bGVTaGVldCIsCiAgICAiQ1NTLmdldFN0eWxlU2hlZXRUZXh0IiwKICAg
ICJDU1Muc2V0U3R5bGVTaGVldFRleHQiLAogICAgIkNTUy5zZXRTdHlsZVRleHQiLAogICAgIkNT
Uy5zZXRQcm9wZXJ0eVRleHQiLAogICAgIkNTUy50b2dnbGVQcm9wZXJ0eSIsCiAgICAiQ1NTLnNl
dFJ1bGVTZWxlY3RvciIsCiAgICAiQ1NTLmFkZFJ1bGUiLAogICAgIkNTUy5nZXRTdXBwb3J0ZWRD
U1NQcm9wZXJ0aWVzIiwKICAgICJDU1MuZm9yY2VQc2V1ZG9TdGF0ZSIsCiAgICAiQ1NTLnN0YXJ0
U2VsZWN0b3JQcm9maWxlciIsCiAgICAiQ1NTLnN0b3BTZWxlY3RvclByb2ZpbGVyIiwKICAgICJD
U1MuZ2V0TmFtZWRGbG93Q29sbGVjdGlvbiIsCiAgICAiQ2FudmFzLmVuYWJsZSIsCiAgICAiQ2Fu
dmFzLmRpc2FibGUiLAogICAgIkNhbnZhcy5kcm9wVHJhY2VMb2ciLAogICAgIkNhbnZhcy5oYXNV
bmluc3RydW1lbnRlZENhbnZhc2VzIiwKICAgICJDYW52YXMuY2FwdHVyZUZyYW1lIiwKICAgICJD
YW52YXMuc3RhcnRDYXB0dXJpbmciLAogICAgIkNhbnZhcy5zdG9wQ2FwdHVyaW5nIiwKICAgICJD
YW52YXMuZ2V0VHJhY2VMb2ciLAogICAgIkNhbnZhcy5yZXBsYXlUcmFjZUxvZyIsCiAgICAiQ2Fu
dmFzLmdldFJlc291cmNlSW5mbyIsCiAgICAiQ2FudmFzLmdldFJlc291cmNlU3RhdGUiLAogICAg
IkNvbnNvbGUuZW5hYmxlIiwKICAgICJDb25zb2xlLmRpc2FibGUiLAogICAgIkNvbnNvbGUuY2xl
YXJNZXNzYWdlcyIsCiAgICAiQ29uc29sZS5zZXRNb25pdG9yaW5nWEhSRW5hYmxlZCIsCiAgICAi
Q29uc29sZS5hZGRJbnNwZWN0ZWROb2RlIiwKICAgICJDb25zb2xlLmFkZEluc3BlY3RlZEhlYXBP
YmplY3QiLAogICAgIkRPTS5nZXREb2N1bWVudCIsCiAgICAiRE9NLnJlcXVlc3RDaGlsZE5vZGVz
IiwKICAgICJET00ucXVlcnlTZWxlY3RvciIsCiAgICAiRE9NLnF1ZXJ5U2VsZWN0b3JBbGwiLAog
ICAgIkRPTS5zZXROb2RlTmFtZSIsCiAgICAiRE9NLnNldE5vZGVWYWx1ZSIsCiAgICAiRE9NLnJl
bW92ZU5vZGUiLAogICAgIkRPTS5zZXRBdHRyaWJ1dGVWYWx1ZSIsCiAgICAiRE9NLnNldEF0dHJp
YnV0ZXNBc1RleHQiLAogICAgIkRPTS5yZW1vdmVBdHRyaWJ1dGUiLAogICAgIkRPTS5nZXRFdmVu
dExpc3RlbmVyc0Zvck5vZGUiLAogICAgIkRPTS5nZXRPdXRlckhUTUwiLAogICAgIkRPTS5zZXRP
dXRlckhUTUwiLAogICAgIkRPTS5wZXJmb3JtU2VhcmNoIiwKICAgICJET00uZ2V0U2VhcmNoUmVz
dWx0cyIsCiAgICAiRE9NLmRpc2NhcmRTZWFyY2hSZXN1bHRzIiwKICAgICJET00ucmVxdWVzdE5v
ZGUiLAogICAgIkRPTS5zZXRJbnNwZWN0TW9kZUVuYWJsZWQiLAogICAgIkRPTS5oaWdobGlnaHRS
ZWN0IiwKICAgICJET00uaGlnaGxpZ2h0UXVhZCIsCiAgICAiRE9NLmhpZ2hsaWdodE5vZGUiLAog
ICAgIkRPTS5oaWRlSGlnaGxpZ2h0IiwKICAgICJET00uaGlnaGxpZ2h0RnJhbWUiLAogICAgIkRP
TS5wdXNoTm9kZUJ5UGF0aFRvRnJvbnRlbmQiLAogICAgIkRPTS5wdXNoTm9kZUJ5QmFja2VuZElk
VG9Gcm9udGVuZCIsCiAgICAiRE9NLnJlbGVhc2VCYWNrZW5kTm9kZUlkcyIsCiAgICAiRE9NLnJl
c29sdmVOb2RlIiwKICAgICJET00uZ2V0QXR0cmlidXRlcyIsCiAgICAiRE9NLm1vdmVUbyIsCiAg
ICAiRE9NLnVuZG8iLAogICAgIkRPTS5yZWRvIiwKICAgICJET00ubWFya1VuZG9hYmxlU3RhdGUi
LAogICAgIkRPTS5mb2N1cyIsCiAgICAiRE9NLnNldEZpbGVJbnB1dEZpbGVzIiwKI2lmIEVOQUJM
RShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKICAgICJET01EZWJ1Z2dlci5zZXRET01CcmVha3BvaW50
IiwKICAgICJET01EZWJ1Z2dlci5yZW1vdmVET01CcmVha3BvaW50IiwKICAgICJET01EZWJ1Z2dl
ci5zZXRFdmVudExpc3RlbmVyQnJlYWtwb2ludCIsCiAgICAiRE9NRGVidWdnZXIucmVtb3ZlRXZl
bnRMaXN0ZW5lckJyZWFrcG9pbnQiLAogICAgIkRPTURlYnVnZ2VyLnNldEluc3RydW1lbnRhdGlv
bkJyZWFrcG9pbnQiLAogICAgIkRPTURlYnVnZ2VyLnJlbW92ZUluc3RydW1lbnRhdGlvbkJyZWFr
cG9pbnQiLAogICAgIkRPTURlYnVnZ2VyLnNldFhIUkJyZWFrcG9pbnQiLAogICAgIkRPTURlYnVn
Z2VyLnJlbW92ZVhIUkJyZWFrcG9pbnQiLAojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVC
VUdHRVIpCgogICAgIkRPTVN0b3JhZ2UuZW5hYmxlIiwKICAgICJET01TdG9yYWdlLmRpc2FibGUi
LAogICAgIkRPTVN0b3JhZ2UuZ2V0RE9NU3RvcmFnZUl0ZW1zIiwKICAgICJET01TdG9yYWdlLnNl
dERPTVN0b3JhZ2VJdGVtIiwKICAgICJET01TdG9yYWdlLnJlbW92ZURPTVN0b3JhZ2VJdGVtIiwK
I2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCgogICAgIkRhdGFiYXNlLmVuYWJsZSIsCiAgICAiRGF0
YWJhc2UuZGlzYWJsZSIsCiAgICAiRGF0YWJhc2UuZ2V0RGF0YWJhc2VUYWJsZU5hbWVzIiwKICAg
ICJEYXRhYmFzZS5leGVjdXRlU1FMIiwKI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCgoj
aWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCgogICAgIkRlYnVnZ2VyLmNhdXNlc1JlY29t
cGlsYXRpb24iLAogICAgIkRlYnVnZ2VyLnN1cHBvcnRzU2VwYXJhdGVTY3JpcHRDb21waWxhdGlv
bkFuZEV4ZWN1dGlvbiIsCiAgICAiRGVidWdnZXIuZW5hYmxlIiwKICAgICJEZWJ1Z2dlci5kaXNh
YmxlIiwKICAgICJEZWJ1Z2dlci5zZXRCcmVha3BvaW50c0FjdGl2ZSIsCiAgICAiRGVidWdnZXIu
c2V0QnJlYWtwb2ludEJ5VXJsIiwKICAgICJEZWJ1Z2dlci5zZXRCcmVha3BvaW50IiwKICAgICJE
ZWJ1Z2dlci5yZW1vdmVCcmVha3BvaW50IiwKICAgICJEZWJ1Z2dlci5jb250aW51ZVRvTG9jYXRp
b24iLAogICAgIkRlYnVnZ2VyLnN0ZXBPdmVyIiwKICAgICJEZWJ1Z2dlci5zdGVwSW50byIsCiAg
ICAiRGVidWdnZXIuc3RlcE91dCIsCiAgICAiRGVidWdnZXIucGF1c2UiLAogICAgIkRlYnVnZ2Vy
LnJlc3VtZSIsCiAgICAiRGVidWdnZXIuc2VhcmNoSW5Db250ZW50IiwKICAgICJEZWJ1Z2dlci5j
YW5TZXRTY3JpcHRTb3VyY2UiLAogICAgIkRlYnVnZ2VyLnNldFNjcmlwdFNvdXJjZSIsCiAgICAi
RGVidWdnZXIuZ2V0U2NyaXB0U291cmNlIiwKICAgICJEZWJ1Z2dlci5nZXRGdW5jdGlvbkRldGFp
bHMiLAogICAgIkRlYnVnZ2VyLnNldFBhdXNlT25FeGNlcHRpb25zIiwKICAgICJEZWJ1Z2dlci5l
dmFsdWF0ZU9uQ2FsbEZyYW1lIiwKICAgICJEZWJ1Z2dlci5jb21waWxlU2NyaXB0IiwKICAgICJE
ZWJ1Z2dlci5ydW5TY3JpcHQiLAogICAgIkRlYnVnZ2VyLnNldE92ZXJsYXlNZXNzYWdlIiwKI2Vu
ZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKICAgICJGaWxlU3lzdGVtLmVuYWJs
ZSIsCiAgICAiRmlsZVN5c3RlbS5kaXNhYmxlIiwKICAgICJGaWxlU3lzdGVtLnJlcXVlc3RGaWxl
U3lzdGVtUm9vdCIsCiAgICAiRmlsZVN5c3RlbS5yZXF1ZXN0RGlyZWN0b3J5Q29udGVudCIsCiAg
ICAiRmlsZVN5c3RlbS5yZXF1ZXN0TWV0YWRhdGEiLAogICAgIkZpbGVTeXN0ZW0ucmVxdWVzdEZp
bGVDb250ZW50IiwKICAgICJGaWxlU3lzdGVtLmRlbGV0ZUVudHJ5IiwKICAgICJIZWFwUHJvZmls
ZXIuaGFzSGVhcFByb2ZpbGVyIiwKICAgICJIZWFwUHJvZmlsZXIuZ2V0UHJvZmlsZUhlYWRlcnMi
LAogICAgIkhlYXBQcm9maWxlci5nZXRIZWFwU25hcHNob3QiLAogICAgIkhlYXBQcm9maWxlci5y
ZW1vdmVQcm9maWxlIiwKICAgICJIZWFwUHJvZmlsZXIuY2xlYXJQcm9maWxlcyIsCiAgICAiSGVh
cFByb2ZpbGVyLnRha2VIZWFwU25hcHNob3QiLAogICAgIkhlYXBQcm9maWxlci5jb2xsZWN0R2Fy
YmFnZSIsCiAgICAiSGVhcFByb2ZpbGVyLmdldE9iamVjdEJ5SGVhcE9iamVjdElkIiwKICAgICJI
ZWFwUHJvZmlsZXIuZ2V0SGVhcE9iamVjdElkIiwKI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNF
KQoKICAgICJJbmRleGVkREIuZW5hYmxlIiwKICAgICJJbmRleGVkREIuZGlzYWJsZSIsCiAgICAi
SW5kZXhlZERCLnJlcXVlc3REYXRhYmFzZU5hbWVzIiwKICAgICJJbmRleGVkREIucmVxdWVzdERh
dGFiYXNlIiwKICAgICJJbmRleGVkREIucmVxdWVzdERhdGEiLAogICAgIkluZGV4ZWREQi5jbGVh
ck9iamVjdFN0b3JlIiwKI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQoKICAgICJJ
bnB1dC5kaXNwYXRjaEtleUV2ZW50IiwKICAgICJJbnB1dC5kaXNwYXRjaE1vdXNlRXZlbnQiLAog
ICAgIkluc3BlY3Rvci5lbmFibGUiLAogICAgIkluc3BlY3Rvci5kaXNhYmxlIiwKICAgICJMYXll
clRyZWUuZW5hYmxlIiwKICAgICJMYXllclRyZWUuZGlzYWJsZSIsCiAgICAiTGF5ZXJUcmVlLmxh
eWVyc0Zvck5vZGUiLAogICAgIkxheWVyVHJlZS5yZWFzb25zRm9yQ29tcG9zaXRpbmdMYXllciIs
CiAgICAiTWVtb3J5LmdldERPTUNvdW50ZXJzIiwKICAgICJOZXR3b3JrLmVuYWJsZSIsCiAgICAi
TmV0d29yay5kaXNhYmxlIiwKICAgICJOZXR3b3JrLnNldFVzZXJBZ2VudE92ZXJyaWRlIiwKICAg
ICJOZXR3b3JrLnNldEV4dHJhSFRUUEhlYWRlcnMiLAogICAgIk5ldHdvcmsuZ2V0UmVzcG9uc2VC
b2R5IiwKICAgICJOZXR3b3JrLnJlcGxheVhIUiIsCiAgICAiTmV0d29yay5jYW5DbGVhckJyb3dz
ZXJDYWNoZSIsCiAgICAiTmV0d29yay5jbGVhckJyb3dzZXJDYWNoZSIsCiAgICAiTmV0d29yay5j
YW5DbGVhckJyb3dzZXJDb29raWVzIiwKICAgICJOZXR3b3JrLmNsZWFyQnJvd3NlckNvb2tpZXMi
LAogICAgIk5ldHdvcmsuc2V0Q2FjaGVEaXNhYmxlZCIsCiAgICAiUGFnZS5lbmFibGUiLAogICAg
IlBhZ2UuZGlzYWJsZSIsCiAgICAiUGFnZS5hZGRTY3JpcHRUb0V2YWx1YXRlT25Mb2FkIiwKICAg
ICJQYWdlLnJlbW92ZVNjcmlwdFRvRXZhbHVhdGVPbkxvYWQiLAogICAgIlBhZ2UucmVsb2FkIiwK
ICAgICJQYWdlLm5hdmlnYXRlIiwKICAgICJQYWdlLmdldENvb2tpZXMiLAogICAgIlBhZ2UuZGVs
ZXRlQ29va2llIiwKICAgICJQYWdlLmdldFJlc291cmNlVHJlZSIsCiAgICAiUGFnZS5nZXRSZXNv
dXJjZUNvbnRlbnQiLAogICAgIlBhZ2Uuc2VhcmNoSW5SZXNvdXJjZSIsCiAgICAiUGFnZS5zZWFy
Y2hJblJlc291cmNlcyIsCiAgICAiUGFnZS5zZXREb2N1bWVudENvbnRlbnQiLAogICAgIlBhZ2Uu
Y2FuT3ZlcnJpZGVEZXZpY2VNZXRyaWNzIiwKICAgICJQYWdlLnNldERldmljZU1ldHJpY3NPdmVy
cmlkZSIsCiAgICAiUGFnZS5zZXRTaG93UGFpbnRSZWN0cyIsCiAgICAiUGFnZS5jYW5TaG93RGVi
dWdCb3JkZXJzIiwKICAgICJQYWdlLnNldFNob3dEZWJ1Z0JvcmRlcnMiLAogICAgIlBhZ2UuY2Fu
U2hvd0ZQU0NvdW50ZXIiLAogICAgIlBhZ2Uuc2V0U2hvd0ZQU0NvdW50ZXIiLAogICAgIlBhZ2Uu
Y2FuQ29udGludW91c2x5UGFpbnQiLAogICAgIlBhZ2Uuc2V0Q29udGludW91c1BhaW50aW5nRW5h
YmxlZCIsCiAgICAiUGFnZS5nZXRTY3JpcHRFeGVjdXRpb25TdGF0dXMiLAogICAgIlBhZ2Uuc2V0
U2NyaXB0RXhlY3V0aW9uRGlzYWJsZWQiLAogICAgIlBhZ2Uuc2V0R2VvbG9jYXRpb25PdmVycmlk
ZSIsCiAgICAiUGFnZS5jbGVhckdlb2xvY2F0aW9uT3ZlcnJpZGUiLAogICAgIlBhZ2UuY2FuT3Zl
cnJpZGVHZW9sb2NhdGlvbiIsCiAgICAiUGFnZS5zZXREZXZpY2VPcmllbnRhdGlvbk92ZXJyaWRl
IiwKICAgICJQYWdlLmNsZWFyRGV2aWNlT3JpZW50YXRpb25PdmVycmlkZSIsCiAgICAiUGFnZS5j
YW5PdmVycmlkZURldmljZU9yaWVudGF0aW9uIiwKICAgICJQYWdlLnNldFRvdWNoRW11bGF0aW9u
RW5hYmxlZCIsCiAgICAiUGFnZS5zZXRFbXVsYXRlZE1lZGlhIiwKICAgICJQYWdlLmdldENvbXBv
c2l0aW5nQm9yZGVyc1Zpc2libGUiLAogICAgIlBhZ2Uuc2V0Q29tcG9zaXRpbmdCb3JkZXJzVmlz
aWJsZSIsCiAgICAiUGFnZS5jYXB0dXJlU2NyZWVuc2hvdCIsCiAgICAiUGFnZS5oYW5kbGVKYXZh
U2NyaXB0RGlhbG9nIiwKICAgICJQYWdlLmFyY2hpdmUiLAojaWYgRU5BQkxFKEpBVkFTQ1JJUFRf
REVCVUdHRVIpCgogICAgIlByb2ZpbGVyLmNhdXNlc1JlY29tcGlsYXRpb24iLAogICAgIlByb2Zp
bGVyLmlzU2FtcGxpbmciLAogICAgIlByb2ZpbGVyLmhhc0hlYXBQcm9maWxlciIsCiAgICAiUHJv
ZmlsZXIuZW5hYmxlIiwKICAgICJQcm9maWxlci5kaXNhYmxlIiwKICAgICJQcm9maWxlci5zdGFy
dCIsCiAgICAiUHJvZmlsZXIuc3RvcCIsCiAgICAiUHJvZmlsZXIuZ2V0UHJvZmlsZUhlYWRlcnMi
LAogICAgIlByb2ZpbGVyLmdldENQVVByb2ZpbGUiLAogICAgIlByb2ZpbGVyLmdldEhlYXBTbmFw
c2hvdCIsCiAgICAiUHJvZmlsZXIucmVtb3ZlUHJvZmlsZSIsCiAgICAiUHJvZmlsZXIuY2xlYXJQ
cm9maWxlcyIsCiAgICAiUHJvZmlsZXIudGFrZUhlYXBTbmFwc2hvdCIsCiAgICAiUHJvZmlsZXIu
Y29sbGVjdEdhcmJhZ2UiLAogICAgIlByb2ZpbGVyLmdldE9iamVjdEJ5SGVhcE9iamVjdElkIiwK
ICAgICJQcm9maWxlci5nZXRIZWFwT2JqZWN0SWQiLAojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJ
UFRfREVCVUdHRVIpCgogICAgIlJ1bnRpbWUucGFyc2UiLAogICAgIlJ1bnRpbWUuZXZhbHVhdGUi
LAogICAgIlJ1bnRpbWUuY2FsbEZ1bmN0aW9uT24iLAogICAgIlJ1bnRpbWUuZ2V0UHJvcGVydGll
cyIsCiAgICAiUnVudGltZS5yZWxlYXNlT2JqZWN0IiwKICAgICJSdW50aW1lLnJlbGVhc2VPYmpl
Y3RHcm91cCIsCiAgICAiUnVudGltZS5ydW4iLAogICAgIlJ1bnRpbWUuZW5hYmxlIiwKICAgICJS
dW50aW1lLmRpc2FibGUiLAogICAgIlRpbWVsaW5lLnN0YXJ0IiwKICAgICJUaW1lbGluZS5zdG9w
IiwKICAgICJUaW1lbGluZS5zdXBwb3J0c0ZyYW1lSW5zdHJ1bWVudGF0aW9uIiwKICAgICJUaW1l
bGluZS5jYW5Nb25pdG9yTWFpblRocmVhZCIsCiNpZiBFTkFCTEUoV09SS0VSUykKCiAgICAiV29y
a2VyLmVuYWJsZSIsCiAgICAiV29ya2VyLmRpc2FibGUiLAogICAgIldvcmtlci5zZW5kTWVzc2Fn
ZVRvV29ya2VyIiwKICAgICJXb3JrZXIuY2FuSW5zcGVjdFdvcmtlcnMiLAogICAgIldvcmtlci5j
b25uZWN0VG9Xb3JrZXIiLAogICAgIldvcmtlci5kaXNjb25uZWN0RnJvbVdvcmtlciIsCiAgICAi
V29ya2VyLnNldEF1dG9jb25uZWN0VG9Xb3JrZXJzIiwKI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJT
KQoKfTsKCgpjbGFzcyBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGwgOiBwdWJsaWMgSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXIgewpwdWJsaWM6CiAgICBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlckltcGwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwpCiAgICAgICAgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwpCiAgICAgICAgLCBtX2FwcGxpY2F0aW9uQ2FjaGVBZ2VudCgwKQogICAgICAg
ICwgbV9jc3NBZ2VudCgwKQogICAgICAgICwgbV9jYW52YXNBZ2VudCgwKQogICAgICAgICwgbV9j
b25zb2xlQWdlbnQoMCkKICAgICAgICAsIG1fZG9tQWdlbnQoMCkKI2lmIEVOQUJMRShKQVZBU0NS
SVBUX0RFQlVHR0VSKQoKICAgICAgICAsIG1fZG9tRGVidWdnZXJBZ2VudCgwKQojZW5kaWYgLy8g
RU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCgogICAgICAgICwgbV9kb21TdG9yYWdlQWdlbnQo
MCkKI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCgogICAgICAgICwgbV9kYXRhYmFzZUFnZW50KDAp
CiNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQoKI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RF
QlVHR0VSKQoKICAgICAgICAsIG1fZGVidWdnZXJBZ2VudCgwKQojZW5kaWYgLy8gRU5BQkxFKEpB
VkFTQ1JJUFRfREVCVUdHRVIpCgogICAgICAgICwgbV9maWxlU3lzdGVtQWdlbnQoMCkKICAgICAg
ICAsIG1faGVhcFByb2ZpbGVyQWdlbnQoMCkKI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQoK
ICAgICAgICAsIG1faW5kZXhlZERCQWdlbnQoMCkKI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKQoKICAgICAgICAsIG1faW5wdXRBZ2VudCgwKQogICAgICAgICwgbV9pbnNwZWN0b3JB
Z2VudCgwKQogICAgICAgICwgbV9sYXllclRyZWVBZ2VudCgwKQogICAgICAgICwgbV9tZW1vcnlB
Z2VudCgwKQogICAgICAgICwgbV9uZXR3b3JrQWdlbnQoMCkKICAgICAgICAsIG1fcGFnZUFnZW50
KDApCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCiAgICAgICAgLCBtX3Byb2ZpbGVy
QWdlbnQoMCkKI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKICAgICAgICAs
IG1fcnVudGltZUFnZW50KDApCiAgICAgICAgLCBtX3RpbWVsaW5lQWdlbnQoMCkKI2lmIEVOQUJM
RShXT1JLRVJTKQoKICAgICAgICAsIG1fd29ya2VyQWdlbnQoMCkKI2VuZGlmIC8vIEVOQUJMRShX
T1JLRVJTKQoKICAgIHsgfQoKICAgIHZpcnR1YWwgdm9pZCBjbGVhckZyb250ZW5kKCkgeyBtX2lu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IDA7IH0KICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaChj
b25zdCBTdHJpbmcmIG1lc3NhZ2UpOwogICAgdmlydHVhbCB2b2lkIHJlcG9ydFByb3RvY29sRXJy
b3IoY29uc3QgbG9uZyogY29uc3QgY2FsbElkLCBDb21tb25FcnJvckNvZGUsIGNvbnN0IFN0cmlu
ZyYgZXJyb3JNZXNzYWdlLCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBkYXRhKSBjb25zdDsK
ICAgIHVzaW5nIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpyZXBvcnRQcm90b2NvbEVycm9y
OwoKICAgIHZvaWQgc2VuZFJlc3BvbnNlKGxvbmcgY2FsbElkLCBQYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcmVzdWx0LCBjb25zdCBFcnJvclN0cmluZyYgaW52b2NhdGlvbkVycm9yKTsKICAg
IGJvb2wgaXNBY3RpdmUoKSB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQoK
ICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckFnZW50KEFwcGxpY2F0aW9uQ2FjaGVDb21tYW5kSGFu
ZGxlciogYXBwbGljYXRpb25DYWNoZUFnZW50KSB7IEFTU0VSVCghbV9hcHBsaWNhdGlvbkNhY2hl
QWdlbnQpOyBtX2FwcGxpY2F0aW9uQ2FjaGVBZ2VudCA9IGFwcGxpY2F0aW9uQ2FjaGVBZ2VudDsg
fQogICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyQWdlbnQoQ1NTQ29tbWFuZEhhbmRsZXIqIGNzc0Fn
ZW50KSB7IEFTU0VSVCghbV9jc3NBZ2VudCk7IG1fY3NzQWdlbnQgPSBjc3NBZ2VudDsgfQogICAg
dmlydHVhbCB2b2lkIHJlZ2lzdGVyQWdlbnQoQ2FudmFzQ29tbWFuZEhhbmRsZXIqIGNhbnZhc0Fn
ZW50KSB7IEFTU0VSVCghbV9jYW52YXNBZ2VudCk7IG1fY2FudmFzQWdlbnQgPSBjYW52YXNBZ2Vu
dDsgfQogICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyQWdlbnQoQ29uc29sZUNvbW1hbmRIYW5kbGVy
KiBjb25zb2xlQWdlbnQpIHsgQVNTRVJUKCFtX2NvbnNvbGVBZ2VudCk7IG1fY29uc29sZUFnZW50
ID0gY29uc29sZUFnZW50OyB9CiAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJBZ2VudChET01Db21t
YW5kSGFuZGxlciogZG9tQWdlbnQpIHsgQVNTRVJUKCFtX2RvbUFnZW50KTsgbV9kb21BZ2VudCA9
IGRvbUFnZW50OyB9CiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCiAgICB2aXJ0dWFs
IHZvaWQgcmVnaXN0ZXJBZ2VudChET01EZWJ1Z2dlckNvbW1hbmRIYW5kbGVyKiBkb21EZWJ1Z2dl
ckFnZW50KSB7IEFTU0VSVCghbV9kb21EZWJ1Z2dlckFnZW50KTsgbV9kb21EZWJ1Z2dlckFnZW50
ID0gZG9tRGVidWdnZXJBZ2VudDsgfQojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdH
RVIpCgogICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyQWdlbnQoRE9NU3RvcmFnZUNvbW1hbmRIYW5k
bGVyKiBkb21TdG9yYWdlQWdlbnQpIHsgQVNTRVJUKCFtX2RvbVN0b3JhZ2VBZ2VudCk7IG1fZG9t
U3RvcmFnZUFnZW50ID0gZG9tU3RvcmFnZUFnZW50OyB9CiNpZiBFTkFCTEUoU1FMX0RBVEFCQVNF
KQoKICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckFnZW50KERhdGFiYXNlQ29tbWFuZEhhbmRsZXIq
IGRhdGFiYXNlQWdlbnQpIHsgQVNTRVJUKCFtX2RhdGFiYXNlQWdlbnQpOyBtX2RhdGFiYXNlQWdl
bnQgPSBkYXRhYmFzZUFnZW50OyB9CiNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQoKI2lm
IEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckFn
ZW50KERlYnVnZ2VyQ29tbWFuZEhhbmRsZXIqIGRlYnVnZ2VyQWdlbnQpIHsgQVNTRVJUKCFtX2Rl
YnVnZ2VyQWdlbnQpOyBtX2RlYnVnZ2VyQWdlbnQgPSBkZWJ1Z2dlckFnZW50OyB9CiNlbmRpZiAv
LyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCiAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJB
Z2VudChGaWxlU3lzdGVtQ29tbWFuZEhhbmRsZXIqIGZpbGVTeXN0ZW1BZ2VudCkgeyBBU1NFUlQo
IW1fZmlsZVN5c3RlbUFnZW50KTsgbV9maWxlU3lzdGVtQWdlbnQgPSBmaWxlU3lzdGVtQWdlbnQ7
IH0KICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckFnZW50KEhlYXBQcm9maWxlckNvbW1hbmRIYW5k
bGVyKiBoZWFwUHJvZmlsZXJBZ2VudCkgeyBBU1NFUlQoIW1faGVhcFByb2ZpbGVyQWdlbnQpOyBt
X2hlYXBQcm9maWxlckFnZW50ID0gaGVhcFByb2ZpbGVyQWdlbnQ7IH0KI2lmIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQoKICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckFnZW50KEluZGV4ZWREQkNv
bW1hbmRIYW5kbGVyKiBpbmRleGVkREJBZ2VudCkgeyBBU1NFUlQoIW1faW5kZXhlZERCQWdlbnQp
OyBtX2luZGV4ZWREQkFnZW50ID0gaW5kZXhlZERCQWdlbnQ7IH0KI2VuZGlmIC8vIEVOQUJMRShJ
TkRFWEVEX0RBVEFCQVNFKQoKICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckFnZW50KElucHV0Q29t
bWFuZEhhbmRsZXIqIGlucHV0QWdlbnQpIHsgQVNTRVJUKCFtX2lucHV0QWdlbnQpOyBtX2lucHV0
QWdlbnQgPSBpbnB1dEFnZW50OyB9CiAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJBZ2VudChJbnNw
ZWN0b3JDb21tYW5kSGFuZGxlciogaW5zcGVjdG9yQWdlbnQpIHsgQVNTRVJUKCFtX2luc3BlY3Rv
ckFnZW50KTsgbV9pbnNwZWN0b3JBZ2VudCA9IGluc3BlY3RvckFnZW50OyB9CiAgICB2aXJ0dWFs
IHZvaWQgcmVnaXN0ZXJBZ2VudChMYXllclRyZWVDb21tYW5kSGFuZGxlciogbGF5ZXJUcmVlQWdl
bnQpIHsgQVNTRVJUKCFtX2xheWVyVHJlZUFnZW50KTsgbV9sYXllclRyZWVBZ2VudCA9IGxheWVy
VHJlZUFnZW50OyB9CiAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJBZ2VudChNZW1vcnlDb21tYW5k
SGFuZGxlciogbWVtb3J5QWdlbnQpIHsgQVNTRVJUKCFtX21lbW9yeUFnZW50KTsgbV9tZW1vcnlB
Z2VudCA9IG1lbW9yeUFnZW50OyB9CiAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJBZ2VudChOZXR3
b3JrQ29tbWFuZEhhbmRsZXIqIG5ldHdvcmtBZ2VudCkgeyBBU1NFUlQoIW1fbmV0d29ya0FnZW50
KTsgbV9uZXR3b3JrQWdlbnQgPSBuZXR3b3JrQWdlbnQ7IH0KICAgIHZpcnR1YWwgdm9pZCByZWdp
c3RlckFnZW50KFBhZ2VDb21tYW5kSGFuZGxlciogcGFnZUFnZW50KSB7IEFTU0VSVCghbV9wYWdl
QWdlbnQpOyBtX3BhZ2VBZ2VudCA9IHBhZ2VBZ2VudDsgfQojaWYgRU5BQkxFKEpBVkFTQ1JJUFRf
REVCVUdHRVIpCgogICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyQWdlbnQoUHJvZmlsZXJDb21tYW5k
SGFuZGxlciogcHJvZmlsZXJBZ2VudCkgeyBBU1NFUlQoIW1fcHJvZmlsZXJBZ2VudCk7IG1fcHJv
ZmlsZXJBZ2VudCA9IHByb2ZpbGVyQWdlbnQ7IH0KI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBU
X0RFQlVHR0VSKQoKICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckFnZW50KFJ1bnRpbWVDb21tYW5k
SGFuZGxlciogcnVudGltZUFnZW50KSB7IEFTU0VSVCghbV9ydW50aW1lQWdlbnQpOyBtX3J1bnRp
bWVBZ2VudCA9IHJ1bnRpbWVBZ2VudDsgfQogICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyQWdlbnQo
VGltZWxpbmVDb21tYW5kSGFuZGxlciogdGltZWxpbmVBZ2VudCkgeyBBU1NFUlQoIW1fdGltZWxp
bmVBZ2VudCk7IG1fdGltZWxpbmVBZ2VudCA9IHRpbWVsaW5lQWdlbnQ7IH0KI2lmIEVOQUJMRShX
T1JLRVJTKQoKICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckFnZW50KFdvcmtlckNvbW1hbmRIYW5k
bGVyKiB3b3JrZXJBZ2VudCkgeyBBU1NFUlQoIW1fd29ya2VyQWdlbnQpOyBtX3dvcmtlckFnZW50
ID0gd29ya2VyQWdlbnQ7IH0KI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQoKcHJpdmF0ZToKICAg
IHZvaWQgQXBwbGljYXRpb25DYWNoZV9nZXRGcmFtZXNXaXRoTWFuaWZlc3RzKGxvbmcgY2FsbElk
LCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgQXBwbGlj
YXRpb25DYWNoZV9lbmFibGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1l
c3NhZ2VPYmplY3QpOwogICAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlX2dldE1hbmlmZXN0Rm9yRnJh
bWUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwog
ICAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlX2dldEFwcGxpY2F0aW9uQ2FjaGVGb3JGcmFtZShsb25n
IGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lk
IENTU19lbmFibGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VP
YmplY3QpOwogICAgdm9pZCBDU1NfZGlzYWJsZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0
KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIENTU19nZXRNYXRjaGVkU3R5bGVzRm9y
Tm9kZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7
CiAgICB2b2lkIENTU19nZXRJbmxpbmVTdHlsZXNGb3JOb2RlKGxvbmcgY2FsbElkLCBJbnNwZWN0
b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgQ1NTX2dldENvbXB1dGVk
U3R5bGVGb3JOb2RlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdl
T2JqZWN0KTsKICAgIHZvaWQgQ1NTX2dldEFsbFN0eWxlU2hlZXRzKGxvbmcgY2FsbElkLCBJbnNw
ZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgQ1NTX2dldFN0eWxl
U2hlZXQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3Qp
OwogICAgdm9pZCBDU1NfZ2V0U3R5bGVTaGVldFRleHQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9i
amVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBDU1Nfc2V0U3R5bGVTaGVldFRl
eHQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwog
ICAgdm9pZCBDU1Nfc2V0U3R5bGVUZXh0KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJl
cXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgQ1NTX3NldFByb3BlcnR5VGV4dChsb25nIGNh
bGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIENT
U190b2dnbGVQcm9wZXJ0eShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVz
c2FnZU9iamVjdCk7CiAgICB2b2lkIENTU19zZXRSdWxlU2VsZWN0b3IobG9uZyBjYWxsSWQsIElu
c3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBDU1NfYWRkUnVs
ZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAg
ICB2b2lkIENTU19nZXRTdXBwb3J0ZWRDU1NQcm9wZXJ0aWVzKGxvbmcgY2FsbElkLCBJbnNwZWN0
b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgQ1NTX2ZvcmNlUHNldWRv
U3RhdGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3Qp
OwogICAgdm9pZCBDU1Nfc3RhcnRTZWxlY3RvclByb2ZpbGVyKGxvbmcgY2FsbElkLCBJbnNwZWN0
b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgQ1NTX3N0b3BTZWxlY3Rv
clByb2ZpbGVyKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2Jq
ZWN0KTsKICAgIHZvaWQgQ1NTX2dldE5hbWVkRmxvd0NvbGxlY3Rpb24obG9uZyBjYWxsSWQsIElu
c3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBDYW52YXNfZW5h
YmxlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsK
ICAgIHZvaWQgQ2FudmFzX2Rpc2FibGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVx
dWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBDYW52YXNfZHJvcFRyYWNlTG9nKGxvbmcgY2Fs
bElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgQ2Fu
dmFzX2hhc1VuaW5zdHJ1bWVudGVkQ2FudmFzZXMobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVj
dCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBDYW52YXNfY2FwdHVyZUZyYW1lKGxv
bmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZv
aWQgQ2FudmFzX3N0YXJ0Q2FwdHVyaW5nKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJl
cXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgQ2FudmFzX3N0b3BDYXB0dXJpbmcobG9uZyBj
YWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBD
YW52YXNfZ2V0VHJhY2VMb2cobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1l
c3NhZ2VPYmplY3QpOwogICAgdm9pZCBDYW52YXNfcmVwbGF5VHJhY2VMb2cobG9uZyBjYWxsSWQs
IEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBDYW52YXNf
Z2V0UmVzb3VyY2VJbmZvKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNz
YWdlT2JqZWN0KTsKICAgIHZvaWQgQ2FudmFzX2dldFJlc291cmNlU3RhdGUobG9uZyBjYWxsSWQs
IEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBDb25zb2xl
X2VuYWJsZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVj
dCk7CiAgICB2b2lkIENvbnNvbGVfZGlzYWJsZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0
KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIENvbnNvbGVfY2xlYXJNZXNzYWdlcyhs
b25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2
b2lkIENvbnNvbGVfc2V0TW9uaXRvcmluZ1hIUkVuYWJsZWQobG9uZyBjYWxsSWQsIEluc3BlY3Rv
ck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBDb25zb2xlX2FkZEluc3Bl
Y3RlZE5vZGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmpl
Y3QpOwogICAgdm9pZCBDb25zb2xlX2FkZEluc3BlY3RlZEhlYXBPYmplY3QobG9uZyBjYWxsSWQs
IEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBET01fZ2V0
RG9jdW1lbnQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmpl
Y3QpOwogICAgdm9pZCBET01fcmVxdWVzdENoaWxkTm9kZXMobG9uZyBjYWxsSWQsIEluc3BlY3Rv
ck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBET01fcXVlcnlTZWxlY3Rv
cihsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAg
ICB2b2lkIERPTV9xdWVyeVNlbGVjdG9yQWxsKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3Qq
IHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgRE9NX3NldE5vZGVOYW1lKGxvbmcgY2Fs
bElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgRE9N
X3NldE5vZGVWYWx1ZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2Fn
ZU9iamVjdCk7CiAgICB2b2lkIERPTV9yZW1vdmVOb2RlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JP
YmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgRE9NX3NldEF0dHJpYnV0ZVZh
bHVlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsK
ICAgIHZvaWQgRE9NX3NldEF0dHJpYnV0ZXNBc1RleHQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9i
amVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBET01fcmVtb3ZlQXR0cmlidXRl
KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAg
IHZvaWQgRE9NX2dldEV2ZW50TGlzdGVuZXJzRm9yTm9kZShsb25nIGNhbGxJZCwgSW5zcGVjdG9y
T2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIERPTV9nZXRPdXRlckhUTUwo
bG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAg
dm9pZCBET01fc2V0T3V0ZXJIVE1MKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVl
c3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgRE9NX3BlcmZvcm1TZWFyY2gobG9uZyBjYWxsSWQs
IEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBET01fZ2V0
U2VhcmNoUmVzdWx0cyhsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2Fn
ZU9iamVjdCk7CiAgICB2b2lkIERPTV9kaXNjYXJkU2VhcmNoUmVzdWx0cyhsb25nIGNhbGxJZCwg
SW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIERPTV9yZXF1
ZXN0Tm9kZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVj
dCk7CiAgICB2b2lkIERPTV9zZXRJbnNwZWN0TW9kZUVuYWJsZWQobG9uZyBjYWxsSWQsIEluc3Bl
Y3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBET01faGlnaGxpZ2h0
UmVjdChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7
CiAgICB2b2lkIERPTV9oaWdobGlnaHRRdWFkKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3Qq
IHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgRE9NX2hpZ2hsaWdodE5vZGUobG9uZyBj
YWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBE
T01faGlkZUhpZ2hsaWdodChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVz
c2FnZU9iamVjdCk7CiAgICB2b2lkIERPTV9oaWdobGlnaHRGcmFtZShsb25nIGNhbGxJZCwgSW5z
cGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIERPTV9wdXNoTm9k
ZUJ5UGF0aFRvRnJvbnRlbmQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1l
c3NhZ2VPYmplY3QpOwogICAgdm9pZCBET01fcHVzaE5vZGVCeUJhY2tlbmRJZFRvRnJvbnRlbmQo
bG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAg
dm9pZCBET01fcmVsZWFzZUJhY2tlbmROb2RlSWRzKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmpl
Y3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgRE9NX3Jlc29sdmVOb2RlKGxvbmcg
Y2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQg
RE9NX2dldEF0dHJpYnV0ZXMobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1l
c3NhZ2VPYmplY3QpOwogICAgdm9pZCBET01fbW92ZVRvKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JP
YmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgRE9NX3VuZG8obG9uZyBjYWxs
SWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBET01f
cmVkbyhsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7
CiAgICB2b2lkIERPTV9tYXJrVW5kb2FibGVTdGF0ZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2Jq
ZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIERPTV9mb2N1cyhsb25nIGNhbGxJ
ZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIERPTV9z
ZXRGaWxlSW5wdXRGaWxlcyhsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVz
c2FnZU9iamVjdCk7CiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCiAgICB2b2lkIERP
TURlYnVnZ2VyX3NldERPTUJyZWFrcG9pbnQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCog
cmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBET01EZWJ1Z2dlcl9yZW1vdmVET01CcmVh
a3BvaW50KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0
KTsKICAgIHZvaWQgRE9NRGVidWdnZXJfc2V0RXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQobG9uZyBj
YWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBE
T01EZWJ1Z2dlcl9yZW1vdmVFdmVudExpc3RlbmVyQnJlYWtwb2ludChsb25nIGNhbGxJZCwgSW5z
cGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIERPTURlYnVnZ2Vy
X3NldEluc3RydW1lbnRhdGlvbkJyZWFrcG9pbnQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVj
dCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBET01EZWJ1Z2dlcl9yZW1vdmVJbnN0
cnVtZW50YXRpb25CcmVha3BvaW50KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVl
c3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgRE9NRGVidWdnZXJfc2V0WEhSQnJlYWtwb2ludChs
b25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2
b2lkIERPTURlYnVnZ2VyX3JlbW92ZVhIUkJyZWFrcG9pbnQobG9uZyBjYWxsSWQsIEluc3BlY3Rv
ck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJ
UFRfREVCVUdHRVIpCgogICAgdm9pZCBET01TdG9yYWdlX2VuYWJsZShsb25nIGNhbGxJZCwgSW5z
cGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIERPTVN0b3JhZ2Vf
ZGlzYWJsZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVj
dCk7CiAgICB2b2lkIERPTVN0b3JhZ2VfZ2V0RE9NU3RvcmFnZUl0ZW1zKGxvbmcgY2FsbElkLCBJ
bnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgRE9NU3RvcmFn
ZV9zZXRET01TdG9yYWdlSXRlbShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0
TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIERPTVN0b3JhZ2VfcmVtb3ZlRE9NU3RvcmFnZUl0ZW0o
bG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwojaWYg
RU5BQkxFKFNRTF9EQVRBQkFTRSkKCiAgICB2b2lkIERhdGFiYXNlX2VuYWJsZShsb25nIGNhbGxJ
ZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIERhdGFi
YXNlX2Rpc2FibGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VP
YmplY3QpOwogICAgdm9pZCBEYXRhYmFzZV9nZXREYXRhYmFzZVRhYmxlTmFtZXMobG9uZyBjYWxs
SWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBEYXRh
YmFzZV9leGVjdXRlU1FMKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNz
YWdlT2JqZWN0KTsKI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCgojaWYgRU5BQkxFKEpB
VkFTQ1JJUFRfREVCVUdHRVIpCgogICAgdm9pZCBEZWJ1Z2dlcl9jYXVzZXNSZWNvbXBpbGF0aW9u
KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAg
IHZvaWQgRGVidWdnZXJfc3VwcG9ydHNTZXBhcmF0ZVNjcmlwdENvbXBpbGF0aW9uQW5kRXhlY3V0
aW9uKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsK
ICAgIHZvaWQgRGVidWdnZXJfZW5hYmxlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJl
cXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgRGVidWdnZXJfZGlzYWJsZShsb25nIGNhbGxJ
ZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIERlYnVn
Z2VyX3NldEJyZWFrcG9pbnRzQWN0aXZlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJl
cXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgRGVidWdnZXJfc2V0QnJlYWtwb2ludEJ5VXJs
KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAg
IHZvaWQgRGVidWdnZXJfc2V0QnJlYWtwb2ludChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0
KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIERlYnVnZ2VyX3JlbW92ZUJyZWFrcG9p
bnQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwog
ICAgdm9pZCBEZWJ1Z2dlcl9jb250aW51ZVRvTG9jYXRpb24obG9uZyBjYWxsSWQsIEluc3BlY3Rv
ck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBEZWJ1Z2dlcl9zdGVwT3Zl
cihsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAg
ICB2b2lkIERlYnVnZ2VyX3N0ZXBJbnRvKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJl
cXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgRGVidWdnZXJfc3RlcE91dChsb25nIGNhbGxJ
ZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIERlYnVn
Z2VyX3BhdXNlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2Jq
ZWN0KTsKICAgIHZvaWQgRGVidWdnZXJfcmVzdW1lKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmpl
Y3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgRGVidWdnZXJfc2VhcmNoSW5Db250
ZW50KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsK
ICAgIHZvaWQgRGVidWdnZXJfY2FuU2V0U2NyaXB0U291cmNlKGxvbmcgY2FsbElkLCBJbnNwZWN0
b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgRGVidWdnZXJfc2V0U2Ny
aXB0U291cmNlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2Jq
ZWN0KTsKICAgIHZvaWQgRGVidWdnZXJfZ2V0U2NyaXB0U291cmNlKGxvbmcgY2FsbElkLCBJbnNw
ZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgRGVidWdnZXJfZ2V0
RnVuY3Rpb25EZXRhaWxzKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNz
YWdlT2JqZWN0KTsKICAgIHZvaWQgRGVidWdnZXJfc2V0UGF1c2VPbkV4Y2VwdGlvbnMobG9uZyBj
YWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBE
ZWJ1Z2dlcl9ldmFsdWF0ZU9uQ2FsbEZyYW1lKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3Qq
IHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgRGVidWdnZXJfY29tcGlsZVNjcmlwdChs
b25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2
b2lkIERlYnVnZ2VyX3J1blNjcmlwdChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1
ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIERlYnVnZ2VyX3NldE92ZXJsYXlNZXNzYWdlKGxv
bmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKI2VuZGlm
IC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKICAgIHZvaWQgRmlsZVN5c3RlbV9lbmFi
bGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwog
ICAgdm9pZCBGaWxlU3lzdGVtX2Rpc2FibGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCog
cmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBGaWxlU3lzdGVtX3JlcXVlc3RGaWxlU3lz
dGVtUm9vdChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVj
dCk7CiAgICB2b2lkIEZpbGVTeXN0ZW1fcmVxdWVzdERpcmVjdG9yeUNvbnRlbnQobG9uZyBjYWxs
SWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBGaWxl
U3lzdGVtX3JlcXVlc3RNZXRhZGF0YShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1
ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIEZpbGVTeXN0ZW1fcmVxdWVzdEZpbGVDb250ZW50
KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAg
IHZvaWQgRmlsZVN5c3RlbV9kZWxldGVFbnRyeShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0
KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIEhlYXBQcm9maWxlcl9oYXNIZWFwUHJv
ZmlsZXIobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3Qp
OwogICAgdm9pZCBIZWFwUHJvZmlsZXJfZ2V0UHJvZmlsZUhlYWRlcnMobG9uZyBjYWxsSWQsIElu
c3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBIZWFwUHJvZmls
ZXJfZ2V0SGVhcFNuYXBzaG90KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RN
ZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgSGVhcFByb2ZpbGVyX3JlbW92ZVByb2ZpbGUobG9uZyBj
YWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBI
ZWFwUHJvZmlsZXJfY2xlYXJQcm9maWxlcyhsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiBy
ZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIEhlYXBQcm9maWxlcl90YWtlSGVhcFNuYXBz
aG90KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsK
ICAgIHZvaWQgSGVhcFByb2ZpbGVyX2NvbGxlY3RHYXJiYWdlKGxvbmcgY2FsbElkLCBJbnNwZWN0
b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgSGVhcFByb2ZpbGVyX2dl
dE9iamVjdEJ5SGVhcE9iamVjdElkKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVl
c3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgSGVhcFByb2ZpbGVyX2dldEhlYXBPYmplY3RJZChs
b25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiNpZiBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKCiAgICB2b2lkIEluZGV4ZWREQl9lbmFibGUobG9uZyBj
YWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBJ
bmRleGVkREJfZGlzYWJsZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVz
c2FnZU9iamVjdCk7CiAgICB2b2lkIEluZGV4ZWREQl9yZXF1ZXN0RGF0YWJhc2VOYW1lcyhsb25n
IGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lk
IEluZGV4ZWREQl9yZXF1ZXN0RGF0YWJhc2UobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCog
cmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBJbmRleGVkREJfcmVxdWVzdERhdGEobG9u
ZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9p
ZCBJbmRleGVkREJfY2xlYXJPYmplY3RTdG9yZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0
KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKCiAgICB2b2lkIElucHV0X2Rpc3BhdGNoS2V5RXZlbnQobG9uZyBjYWxsSWQsIEluc3BlY3Rv
ck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBJbnB1dF9kaXNwYXRjaE1v
dXNlRXZlbnQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmpl
Y3QpOwogICAgdm9pZCBJbnNwZWN0b3JfZW5hYmxlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmpl
Y3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgSW5zcGVjdG9yX2Rpc2FibGUobG9u
ZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9p
ZCBMYXllclRyZWVfZW5hYmxlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RN
ZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgTGF5ZXJUcmVlX2Rpc2FibGUobG9uZyBjYWxsSWQsIElu
c3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBMYXllclRyZWVf
bGF5ZXJzRm9yTm9kZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2Fn
ZU9iamVjdCk7CiAgICB2b2lkIExheWVyVHJlZV9yZWFzb25zRm9yQ29tcG9zaXRpbmdMYXllcihs
b25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2
b2lkIE1lbW9yeV9nZXRET01Db3VudGVycyhsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiBy
ZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIE5ldHdvcmtfZW5hYmxlKGxvbmcgY2FsbElk
LCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgTmV0d29y
a19kaXNhYmxlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2Jq
ZWN0KTsKICAgIHZvaWQgTmV0d29ya19zZXRVc2VyQWdlbnRPdmVycmlkZShsb25nIGNhbGxJZCwg
SW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIE5ldHdvcmtf
c2V0RXh0cmFIVFRQSGVhZGVycyhsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0
TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIE5ldHdvcmtfZ2V0UmVzcG9uc2VCb2R5KGxvbmcgY2Fs
bElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgTmV0
d29ya19yZXBsYXlYSFIobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3Nh
Z2VPYmplY3QpOwogICAgdm9pZCBOZXR3b3JrX2NhbkNsZWFyQnJvd3NlckNhY2hlKGxvbmcgY2Fs
bElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgTmV0
d29ya19jbGVhckJyb3dzZXJDYWNoZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1
ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIE5ldHdvcmtfY2FuQ2xlYXJCcm93c2VyQ29va2ll
cyhsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAg
ICB2b2lkIE5ldHdvcmtfY2xlYXJCcm93c2VyQ29va2llcyhsb25nIGNhbGxJZCwgSW5zcGVjdG9y
T2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIE5ldHdvcmtfc2V0Q2FjaGVE
aXNhYmxlZChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVj
dCk7CiAgICB2b2lkIFBhZ2VfZW5hYmxlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJl
cXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgUGFnZV9kaXNhYmxlKGxvbmcgY2FsbElkLCBJ
bnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgUGFnZV9hZGRT
Y3JpcHRUb0V2YWx1YXRlT25Mb2FkKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVl
c3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgUGFnZV9yZW1vdmVTY3JpcHRUb0V2YWx1YXRlT25M
b2FkKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsK
ICAgIHZvaWQgUGFnZV9yZWxvYWQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVz
dE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBQYWdlX25hdmlnYXRlKGxvbmcgY2FsbElkLCBJbnNw
ZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgUGFnZV9nZXRDb29r
aWVzKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsK
ICAgIHZvaWQgUGFnZV9kZWxldGVDb29raWUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCog
cmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBQYWdlX2dldFJlc291cmNlVHJlZShsb25n
IGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lk
IFBhZ2VfZ2V0UmVzb3VyY2VDb250ZW50KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJl
cXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgUGFnZV9zZWFyY2hJblJlc291cmNlKGxvbmcg
Y2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQg
UGFnZV9zZWFyY2hJblJlc291cmNlcyhsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1
ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIFBhZ2Vfc2V0RG9jdW1lbnRDb250ZW50KGxvbmcg
Y2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQg
UGFnZV9jYW5PdmVycmlkZURldmljZU1ldHJpY3MobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVj
dCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBQYWdlX3NldERldmljZU1ldHJpY3NP
dmVycmlkZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVj
dCk7CiAgICB2b2lkIFBhZ2Vfc2V0U2hvd1BhaW50UmVjdHMobG9uZyBjYWxsSWQsIEluc3BlY3Rv
ck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBQYWdlX2NhblNob3dEZWJ1
Z0JvcmRlcnMobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmpl
Y3QpOwogICAgdm9pZCBQYWdlX3NldFNob3dEZWJ1Z0JvcmRlcnMobG9uZyBjYWxsSWQsIEluc3Bl
Y3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBQYWdlX2NhblNob3dG
UFNDb3VudGVyKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2Jq
ZWN0KTsKICAgIHZvaWQgUGFnZV9zZXRTaG93RlBTQ291bnRlcihsb25nIGNhbGxJZCwgSW5zcGVj
dG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIFBhZ2VfY2FuQ29udGlu
dW91c2x5UGFpbnQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VP
YmplY3QpOwogICAgdm9pZCBQYWdlX3NldENvbnRpbnVvdXNQYWludGluZ0VuYWJsZWQobG9uZyBj
YWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBQ
YWdlX2dldFNjcmlwdEV4ZWN1dGlvblN0YXR1cyhsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0
KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIFBhZ2Vfc2V0U2NyaXB0RXhlY3V0aW9u
RGlzYWJsZWQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmpl
Y3QpOwogICAgdm9pZCBQYWdlX3NldEdlb2xvY2F0aW9uT3ZlcnJpZGUobG9uZyBjYWxsSWQsIElu
c3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBQYWdlX2NsZWFy
R2VvbG9jYXRpb25PdmVycmlkZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0
TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIFBhZ2VfY2FuT3ZlcnJpZGVHZW9sb2NhdGlvbihsb25n
IGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lk
IFBhZ2Vfc2V0RGV2aWNlT3JpZW50YXRpb25PdmVycmlkZShsb25nIGNhbGxJZCwgSW5zcGVjdG9y
T2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIFBhZ2VfY2xlYXJEZXZpY2VP
cmllbnRhdGlvbk92ZXJyaWRlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RN
ZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgUGFnZV9jYW5PdmVycmlkZURldmljZU9yaWVudGF0aW9u
KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAg
IHZvaWQgUGFnZV9zZXRUb3VjaEVtdWxhdGlvbkVuYWJsZWQobG9uZyBjYWxsSWQsIEluc3BlY3Rv
ck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBQYWdlX3NldEVtdWxhdGVk
TWVkaWEobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3Qp
OwogICAgdm9pZCBQYWdlX2dldENvbXBvc2l0aW5nQm9yZGVyc1Zpc2libGUobG9uZyBjYWxsSWQs
IEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBQYWdlX3Nl
dENvbXBvc2l0aW5nQm9yZGVyc1Zpc2libGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCog
cmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBQYWdlX2NhcHR1cmVTY3JlZW5zaG90KGxv
bmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZv
aWQgUGFnZV9oYW5kbGVKYXZhU2NyaXB0RGlhbG9nKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmpl
Y3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgUGFnZV9hcmNoaXZlKGxvbmcgY2Fs
bElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKI2lmIEVOQUJMRShK
QVZBU0NSSVBUX0RFQlVHR0VSKQoKICAgIHZvaWQgUHJvZmlsZXJfY2F1c2VzUmVjb21waWxhdGlv
bihsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAg
ICB2b2lkIFByb2ZpbGVyX2lzU2FtcGxpbmcobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCog
cmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBQcm9maWxlcl9oYXNIZWFwUHJvZmlsZXIo
bG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAg
dm9pZCBQcm9maWxlcl9lbmFibGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVz
dE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBQcm9maWxlcl9kaXNhYmxlKGxvbmcgY2FsbElkLCBJ
bnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgUHJvZmlsZXJf
c3RhcnQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3Qp
OwogICAgdm9pZCBQcm9maWxlcl9zdG9wKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJl
cXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgUHJvZmlsZXJfZ2V0UHJvZmlsZUhlYWRlcnMo
bG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAg
dm9pZCBQcm9maWxlcl9nZXRDUFVQcm9maWxlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3Qq
IHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgUHJvZmlsZXJfZ2V0SGVhcFNuYXBzaG90
KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAg
IHZvaWQgUHJvZmlsZXJfcmVtb3ZlUHJvZmlsZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0
KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIFByb2ZpbGVyX2NsZWFyUHJvZmlsZXMo
bG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAg
dm9pZCBQcm9maWxlcl90YWtlSGVhcFNuYXBzaG90KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmpl
Y3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgUHJvZmlsZXJfY29sbGVjdEdhcmJh
Z2UobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwog
ICAgdm9pZCBQcm9maWxlcl9nZXRPYmplY3RCeUhlYXBPYmplY3RJZChsb25nIGNhbGxJZCwgSW5z
cGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIFByb2ZpbGVyX2dl
dEhlYXBPYmplY3RJZChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2Fn
ZU9iamVjdCk7CiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCiAgICB2b2lk
IFJ1bnRpbWVfcGFyc2UobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3Nh
Z2VPYmplY3QpOwogICAgdm9pZCBSdW50aW1lX2V2YWx1YXRlKGxvbmcgY2FsbElkLCBJbnNwZWN0
b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgUnVudGltZV9jYWxsRnVu
Y3Rpb25Pbihsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVj
dCk7CiAgICB2b2lkIFJ1bnRpbWVfZ2V0UHJvcGVydGllcyhsb25nIGNhbGxJZCwgSW5zcGVjdG9y
T2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIFJ1bnRpbWVfcmVsZWFzZU9i
amVjdChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7
CiAgICB2b2lkIFJ1bnRpbWVfcmVsZWFzZU9iamVjdEdyb3VwKGxvbmcgY2FsbElkLCBJbnNwZWN0
b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgUnVudGltZV9ydW4obG9u
ZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9p
ZCBSdW50aW1lX2VuYWJsZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVz
c2FnZU9iamVjdCk7CiAgICB2b2lkIFJ1bnRpbWVfZGlzYWJsZShsb25nIGNhbGxJZCwgSW5zcGVj
dG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIFRpbWVsaW5lX3N0YXJ0
KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAg
IHZvaWQgVGltZWxpbmVfc3RvcChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0
TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIFRpbWVsaW5lX3N1cHBvcnRzRnJhbWVJbnN0cnVtZW50
YXRpb24obG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3Qp
OwogICAgdm9pZCBUaW1lbGluZV9jYW5Nb25pdG9yTWFpblRocmVhZChsb25nIGNhbGxJZCwgSW5z
cGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiNpZiBFTkFCTEUoV09SS0VSUykK
CiAgICB2b2lkIFdvcmtlcl9lbmFibGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVx
dWVzdE1lc3NhZ2VPYmplY3QpOwogICAgdm9pZCBXb3JrZXJfZGlzYWJsZShsb25nIGNhbGxJZCwg
SW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIFdvcmtlcl9z
ZW5kTWVzc2FnZVRvV29ya2VyKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RN
ZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgV29ya2VyX2Nhbkluc3BlY3RXb3JrZXJzKGxvbmcgY2Fs
bElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsKICAgIHZvaWQgV29y
a2VyX2Nvbm5lY3RUb1dvcmtlcihsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0
TWVzc2FnZU9iamVjdCk7CiAgICB2b2lkIFdvcmtlcl9kaXNjb25uZWN0RnJvbVdvcmtlcihsb25n
IGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiAgICB2b2lk
IFdvcmtlcl9zZXRBdXRvY29ubmVjdFRvV29ya2Vycyhsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2Jq
ZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7CiNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKCgog
ICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsK
ICAgIEFwcGxpY2F0aW9uQ2FjaGVDb21tYW5kSGFuZGxlciogbV9hcHBsaWNhdGlvbkNhY2hlQWdl
bnQ7CiAgICBDU1NDb21tYW5kSGFuZGxlciogbV9jc3NBZ2VudDsKICAgIENhbnZhc0NvbW1hbmRI
YW5kbGVyKiBtX2NhbnZhc0FnZW50OwogICAgQ29uc29sZUNvbW1hbmRIYW5kbGVyKiBtX2NvbnNv
bGVBZ2VudDsKICAgIERPTUNvbW1hbmRIYW5kbGVyKiBtX2RvbUFnZW50OwojaWYgRU5BQkxFKEpB
VkFTQ1JJUFRfREVCVUdHRVIpCgogICAgRE9NRGVidWdnZXJDb21tYW5kSGFuZGxlciogbV9kb21E
ZWJ1Z2dlckFnZW50OwojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCgogICAg
RE9NU3RvcmFnZUNvbW1hbmRIYW5kbGVyKiBtX2RvbVN0b3JhZ2VBZ2VudDsKI2lmIEVOQUJMRShT
UUxfREFUQUJBU0UpCgogICAgRGF0YWJhc2VDb21tYW5kSGFuZGxlciogbV9kYXRhYmFzZUFnZW50
OwojZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9E
RUJVR0dFUikKCiAgICBEZWJ1Z2dlckNvbW1hbmRIYW5kbGVyKiBtX2RlYnVnZ2VyQWdlbnQ7CiNl
bmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCiAgICBGaWxlU3lzdGVtQ29tbWFu
ZEhhbmRsZXIqIG1fZmlsZVN5c3RlbUFnZW50OwogICAgSGVhcFByb2ZpbGVyQ29tbWFuZEhhbmRs
ZXIqIG1faGVhcFByb2ZpbGVyQWdlbnQ7CiNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKCiAg
ICBJbmRleGVkREJDb21tYW5kSGFuZGxlciogbV9pbmRleGVkREJBZ2VudDsKI2VuZGlmIC8vIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQoKICAgIElucHV0Q29tbWFuZEhhbmRsZXIqIG1faW5wdXRB
Z2VudDsKICAgIEluc3BlY3RvckNvbW1hbmRIYW5kbGVyKiBtX2luc3BlY3RvckFnZW50OwogICAg
TGF5ZXJUcmVlQ29tbWFuZEhhbmRsZXIqIG1fbGF5ZXJUcmVlQWdlbnQ7CiAgICBNZW1vcnlDb21t
YW5kSGFuZGxlciogbV9tZW1vcnlBZ2VudDsKICAgIE5ldHdvcmtDb21tYW5kSGFuZGxlciogbV9u
ZXR3b3JrQWdlbnQ7CiAgICBQYWdlQ29tbWFuZEhhbmRsZXIqIG1fcGFnZUFnZW50OwojaWYgRU5B
QkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCgogICAgUHJvZmlsZXJDb21tYW5kSGFuZGxlciogbV9w
cm9maWxlckFnZW50OwojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCgogICAg
UnVudGltZUNvbW1hbmRIYW5kbGVyKiBtX3J1bnRpbWVBZ2VudDsKICAgIFRpbWVsaW5lQ29tbWFu
ZEhhbmRsZXIqIG1fdGltZWxpbmVBZ2VudDsKI2lmIEVOQUJMRShXT1JLRVJTKQoKICAgIFdvcmtl
ckNvbW1hbmRIYW5kbGVyKiBtX3dvcmtlckFnZW50OwojZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMp
CgoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIFIsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFYwPgogICAg
c3RhdGljIFIgZ2V0UHJvcGVydHlWYWx1ZUltcGwoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNv
bnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3Rv
Y29sRXJyb3JzLCBWMCBpbml0aWFsX3ZhbHVlLCBib29sICgqYXNfbWV0aG9kKShJbnNwZWN0b3JW
YWx1ZSosIFYqKSwgY29uc3QgY2hhciogdHlwZV9uYW1lKTsKCiAgICBzdGF0aWMgaW50IGdldElu
dChJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1
ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMpOwogICAgc3RhdGljIGRvdWJs
ZSBnZXREb3VibGUoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwg
Ym9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKTsKICAgIHN0
YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJp
bmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9y
cyk7CiAgICBzdGF0aWMgYm9vbCBnZXRCb29sZWFuKEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBj
b25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90
b2NvbEVycm9ycyk7CiAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGdldE9i
amVjdChJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2
YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMpOwogICAgc3RhdGljIFBh
c3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGdldEFycmF5KEluc3BlY3Rvck9iamVjdCogb2JqZWN0
LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBw
cm90b2NvbEVycm9ycyk7CgogICAgdm9pZCBzZW5kUmVzcG9uc2UobG9uZyBjYWxsSWQsIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQsIGNvbnN0IGNoYXIqIGNvbW1hbmROYW1lLCBQ
YXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycywgRXJyb3JTdHJpbmcgaW52
b2NhdGlvbkVycm9yKTsKCn07Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6
QXBwbGljYXRpb25DYWNoZV9nZXRGcmFtZXNXaXRoTWFuaWZlc3RzKGxvbmcgY2FsbElkLCBJbnNw
ZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3Jz
ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9hcHBsaWNhdGlvbkNhY2hl
QWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkFwcGxpY2F0aW9uQ2Fj
aGUgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6
QXJyYXk8VHlwZUJ1aWxkZXI6OkFwcGxpY2F0aW9uQ2FjaGU6OkZyYW1lV2l0aE1hbmlmZXN0PiA+
IG91dF9mcmFtZUlkczsKCgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFw
cm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2FwcGxpY2F0aW9uQ2FjaGVBZ2Vu
dC0+Z2V0RnJhbWVzV2l0aE1hbmlmZXN0cygmZXJyb3IsIG91dF9mcmFtZUlkcyk7CgogICAgICAg
IGlmICghZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZSgiZnJh
bWVJZHMiLCBvdXRfZnJhbWVJZHMpOwogICAgICAgIH0KICAgIH0KICAgIHNlbmRSZXNwb25zZShj
YWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGNvbW1hbmROYW1lc1trQXBwbGljYXRpb25DYWNoZV9n
ZXRGcmFtZXNXaXRoTWFuaWZlc3RzQ21kXSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJv
cik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpBcHBsaWNhdGlvbkNh
Y2hlX2VuYWJsZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KikKewogICAgUmVmUHRyPElu
c3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsK
CiAgICBpZiAoIW1fYXBwbGljYXRpb25DYWNoZUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3Jz
LT5wdXNoU3RyaW5nKCJBcHBsaWNhdGlvbkNhY2hlIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4i
KTsKCgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9y
cy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2FwcGxpY2F0aW9uQ2FjaGVBZ2VudC0+ZW5hYmxlKCZl
cnJvcik7CgoKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCks
IGNvbW1hbmROYW1lc1trQXBwbGljYXRpb25DYWNoZV9lbmFibGVDbWRdLCBwcm90b2NvbEVycm9y
cy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcklt
cGw6OkFwcGxpY2F0aW9uQ2FjaGVfZ2V0TWFuaWZlc3RGb3JGcmFtZShsb25nIGNhbGxJZCwgSW5z
cGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBp
ZiAoIW1fYXBwbGljYXRpb25DYWNoZUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNo
U3RyaW5nKCJBcHBsaWNhdGlvbkNhY2hlIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAg
ICBTdHJpbmcgb3V0X21hbmlmZXN0VVJMOwoKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBw
YXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMi
KTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFp
bmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9j
b2xFcnJvcnMuZ2V0KCk7CiAgICBTdHJpbmcgaW5fZnJhbWVJZCA9IGdldFN0cmluZyhwYXJhbXND
b250YWluZXJQdHIsICJmcmFtZUlkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAg
ICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7
CiAgICAgICAgbV9hcHBsaWNhdGlvbkNhY2hlQWdlbnQtPmdldE1hbmlmZXN0Rm9yRnJhbWUoJmVy
cm9yLCBpbl9mcmFtZUlkLCAmb3V0X21hbmlmZXN0VVJMKTsKCiAgICAgICAgaWYgKCFlcnJvci5s
ZW5ndGgoKSkgewogICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZygibWFuaWZlc3RVUkwiLCBv
dXRfbWFuaWZlc3RVUkwpOwogICAgICAgIH0KICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQs
IHJlc3VsdC5yZWxlYXNlKCksIGNvbW1hbmROYW1lc1trQXBwbGljYXRpb25DYWNoZV9nZXRNYW5p
ZmVzdEZvckZyYW1lQ21kXSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZv
aWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpBcHBsaWNhdGlvbkNhY2hlX2dldEFw
cGxpY2F0aW9uQ2FjaGVGb3JGcmFtZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1
ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVy
cm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fYXBwbGljYXRpb25D
YWNoZUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJBcHBsaWNhdGlv
bkNhY2hlIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBSZWZQdHI8VHlwZUJ1aWxk
ZXI6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGU+IG91dF9hcHBsaWNhdGlvbkNh
Y2hlOwoKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1
ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVj
dCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVj
dG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBT
dHJpbmcgaW5fZnJhbWVJZCA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJmcmFtZUlk
IiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJl
c3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsK
ICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9hcHBsaWNhdGlv
bkNhY2hlQWdlbnQtPmdldEFwcGxpY2F0aW9uQ2FjaGVGb3JGcmFtZSgmZXJyb3IsIGluX2ZyYW1l
SWQsIG91dF9hcHBsaWNhdGlvbkNhY2hlKTsKCiAgICAgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkg
ewogICAgICAgICAgICByZXN1bHQtPnNldFZhbHVlKCJhcHBsaWNhdGlvbkNhY2hlIiwgb3V0X2Fw
cGxpY2F0aW9uQ2FjaGUpOwogICAgICAgIH0KICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQs
IHJlc3VsdC5yZWxlYXNlKCksIGNvbW1hbmROYW1lc1trQXBwbGljYXRpb25DYWNoZV9nZXRBcHBs
aWNhdGlvbkNhY2hlRm9yRnJhbWVDbWRdLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9y
KTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkNTU19lbmFibGUobG9u
ZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4g
cHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2Nz
c0FnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJDU1MgaGFuZGxlciBp
cyBub3QgYXZhaWxhYmxlLiIpOwoKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBp
ZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fY3NzQWdlbnQtPmVuYWJs
ZSgmZXJyb3IpOwoKCiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFz
ZSgpLCBjb21tYW5kTmFtZXNba0NTU19lbmFibGVDbWRdLCBwcm90b2NvbEVycm9ycy5yZWxlYXNl
KCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkNTU19k
aXNhYmxlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAg
IGlmICghbV9jc3NBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiQ1NT
IGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVy
cm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2Nzc0Fn
ZW50LT5kaXNhYmxlKCZlcnJvcik7CgoKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJl
c3VsdC5yZWxlYXNlKCksIGNvbW1hbmROYW1lc1trQ1NTX2Rpc2FibGVDbWRdLCBwcm90b2NvbEVy
cm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ckltcGw6OkNTU19nZXRNYXRjaGVkU3R5bGVzRm9yTm9kZShsb25nIGNhbGxJZCwgSW5zcGVjdG9y
T2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5
PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1f
Y3NzQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkNTUyBoYW5kbGVy
IGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUeXBl
QnVpbGRlcjo6Q1NTOjpSdWxlTWF0Y2g+ID4gb3V0X21hdGNoZWRDU1NSdWxlczsKICAgIFJlZlB0
cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkNTUzo6UHNldWRvSWRNYXRjaGVzPiA+
IG91dF9wc2V1ZG9FbGVtZW50czsKICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1
aWxkZXI6OkNTUzo6SW5oZXJpdGVkU3R5bGVFbnRyeT4gPiBvdXRfaW5oZXJpdGVkOwoKCiAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9i
amVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29u
dGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHBy
b3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBpbnQgaW5fbm9kZUlk
ID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgIm5vZGVJZCIsIDAsIHByb3RvY29sRXJyb3Jz
UHRyKTsKICAgIGJvb2wgaW5jbHVkZVBzZXVkb192YWx1ZUZvdW5kID0gZmFsc2U7CiAgICBib29s
IGluX2luY2x1ZGVQc2V1ZG8gPSBnZXRCb29sZWFuKHBhcmFtc0NvbnRhaW5lclB0ciwgImluY2x1
ZGVQc2V1ZG8iLCAmaW5jbHVkZVBzZXVkb192YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7
CiAgICBib29sIGluY2x1ZGVJbmhlcml0ZWRfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgYm9vbCBp
bl9pbmNsdWRlSW5oZXJpdGVkID0gZ2V0Qm9vbGVhbihwYXJhbXNDb250YWluZXJQdHIsICJpbmNs
dWRlSW5oZXJpdGVkIiwgJmluY2x1ZGVJbmhlcml0ZWRfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJv
cnNQdHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xF
cnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9jc3NBZ2VudC0+Z2V0TWF0Y2hlZFN0eWxlc0Zv
ck5vZGUoJmVycm9yLCBpbl9ub2RlSWQsIGluY2x1ZGVQc2V1ZG9fdmFsdWVGb3VuZCA/ICZpbl9p
bmNsdWRlUHNldWRvIDogMCwgaW5jbHVkZUluaGVyaXRlZF92YWx1ZUZvdW5kID8gJmluX2luY2x1
ZGVJbmhlcml0ZWQgOiAwLCBvdXRfbWF0Y2hlZENTU1J1bGVzLCBvdXRfcHNldWRvRWxlbWVudHMs
IG91dF9pbmhlcml0ZWQpOwoKICAgICAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAg
ICAgIGlmIChvdXRfbWF0Y2hlZENTU1J1bGVzKQogICAgICAgICAgICAgICAgcmVzdWx0LT5zZXRW
YWx1ZSgibWF0Y2hlZENTU1J1bGVzIiwgb3V0X21hdGNoZWRDU1NSdWxlcyk7CiAgICAgICAgICAg
IGlmIChvdXRfcHNldWRvRWxlbWVudHMpCiAgICAgICAgICAgICAgICByZXN1bHQtPnNldFZhbHVl
KCJwc2V1ZG9FbGVtZW50cyIsIG91dF9wc2V1ZG9FbGVtZW50cyk7CiAgICAgICAgICAgIGlmIChv
dXRfaW5oZXJpdGVkKQogICAgICAgICAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZSgiaW5oZXJpdGVk
Iiwgb3V0X2luaGVyaXRlZCk7CiAgICAgICAgfQogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJ
ZCwgcmVzdWx0LnJlbGVhc2UoKSwgY29tbWFuZE5hbWVzW2tDU1NfZ2V0TWF0Y2hlZFN0eWxlc0Zv
ck5vZGVDbWRdLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkNTU19nZXRJbmxpbmVTdHlsZXNGb3JOb2RlKGxv
bmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNy
ZWF0ZSgpOwoKICAgIGlmICghbV9jc3NBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVz
aFN0cmluZygiQ1NTIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBSZWZQdHI8VHlw
ZUJ1aWxkZXI6OkNTUzo6Q1NTU3R5bGU+IG91dF9pbmxpbmVTdHlsZTsKICAgIFJlZlB0cjxUeXBl
QnVpbGRlcjo6Q1NTOjpDU1NTdHlsZT4gb3V0X2F0dHJpYnV0ZXNTdHlsZTsKCgogICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3Qt
PmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5l
clB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2Nv
bEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgaW50IGluX25vZGVJZCA9IGdl
dEludChwYXJhbXNDb250YWluZXJQdHIsICJub2RlSWQiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7
CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+
bGVuZ3RoKCkpIHsKICAgICAgICBtX2Nzc0FnZW50LT5nZXRJbmxpbmVTdHlsZXNGb3JOb2RlKCZl
cnJvciwgaW5fbm9kZUlkLCBvdXRfaW5saW5lU3R5bGUsIG91dF9hdHRyaWJ1dGVzU3R5bGUpOwoK
ICAgICAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgICAgIGlmIChvdXRfaW5saW5l
U3R5bGUpCiAgICAgICAgICAgICAgICByZXN1bHQtPnNldFZhbHVlKCJpbmxpbmVTdHlsZSIsIG91
dF9pbmxpbmVTdHlsZSk7CiAgICAgICAgICAgIGlmIChvdXRfYXR0cmlidXRlc1N0eWxlKQogICAg
ICAgICAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZSgiYXR0cmlidXRlc1N0eWxlIiwgb3V0X2F0dHJp
YnV0ZXNTdHlsZSk7CiAgICAgICAgfQogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVz
dWx0LnJlbGVhc2UoKSwgY29tbWFuZE5hbWVzW2tDU1NfZ2V0SW5saW5lU3R5bGVzRm9yTm9kZUNt
ZF0sIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVySW1wbDo6Q1NTX2dldENvbXB1dGVkU3R5bGVGb3JOb2RlKGxvbmcgY2Fs
bElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgp
OwoKICAgIGlmICghbV9jc3NBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmlu
ZygiQ1NTIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBSZWZQdHI8VHlwZUJ1aWxk
ZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpDU1M6OkNTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0eT4gPiBv
dXRfY29tcHV0ZWRTdHlsZTsKCgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29u
dGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJ
bnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQo
KTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3Jz
LmdldCgpOwogICAgaW50IGluX25vZGVJZCA9IGdldEludChwYXJhbXNDb250YWluZXJQdHIsICJu
b2RlSWQiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVy
cm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2Nzc0Fn
ZW50LT5nZXRDb21wdXRlZFN0eWxlRm9yTm9kZSgmZXJyb3IsIGluX25vZGVJZCwgb3V0X2NvbXB1
dGVkU3R5bGUpOwoKICAgICAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgICAgIHJl
c3VsdC0+c2V0VmFsdWUoImNvbXB1dGVkU3R5bGUiLCBvdXRfY29tcHV0ZWRTdHlsZSk7CiAgICAg
ICAgfQogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgY29t
bWFuZE5hbWVzW2tDU1NfZ2V0Q29tcHV0ZWRTdHlsZUZvck5vZGVDbWRdLCBwcm90b2NvbEVycm9y
cy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcklt
cGw6OkNTU19nZXRBbGxTdHlsZVNoZWV0cyhsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KikK
ewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFy
cmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fY3NzQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJv
cnMtPnB1c2hTdHJpbmcoIkNTUyBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgUmVm
UHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZVNoZWV0SGVh
ZGVyPiA+IG91dF9oZWFkZXJzOwoKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBp
ZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fY3NzQWdlbnQtPmdldEFs
bFN0eWxlU2hlZXRzKCZlcnJvciwgb3V0X2hlYWRlcnMpOwoKICAgICAgICBpZiAoIWVycm9yLmxl
bmd0aCgpKSB7CiAgICAgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoImhlYWRlcnMiLCBvdXRfaGVh
ZGVycyk7CiAgICAgICAgfQogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJl
bGVhc2UoKSwgY29tbWFuZE5hbWVzW2tDU1NfZ2V0QWxsU3R5bGVTaGVldHNDbWRdLCBwcm90b2Nv
bEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlckltcGw6OkNTU19nZXRTdHlsZVNoZWV0KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3Qq
IHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3Rv
Y29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9jc3NBZ2Vu
dCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiQ1NTIGhhbmRsZXIgaXMgbm90
IGF2YWlsYWJsZS4iKTsKCiAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTU3R5bGVTaGVl
dEJvZHk+IG91dF9zdHlsZVNoZWV0OwoKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJh
bXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsK
ICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVy
LmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xF
cnJvcnMuZ2V0KCk7CiAgICBTdHJpbmcgaW5fc3R5bGVTaGVldElkID0gZ2V0U3RyaW5nKHBhcmFt
c0NvbnRhaW5lclB0ciwgInN0eWxlU2hlZXRJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5n
dGgoKSkgewogICAgICAgIG1fY3NzQWdlbnQtPmdldFN0eWxlU2hlZXQoJmVycm9yLCBpbl9zdHls
ZVNoZWV0SWQsIG91dF9zdHlsZVNoZWV0KTsKCiAgICAgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkg
ewogICAgICAgICAgICByZXN1bHQtPnNldFZhbHVlKCJzdHlsZVNoZWV0Iiwgb3V0X3N0eWxlU2hl
ZXQpOwogICAgICAgIH0KICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxl
YXNlKCksIGNvbW1hbmROYW1lc1trQ1NTX2dldFN0eWxlU2hlZXRDbWRdLCBwcm90b2NvbEVycm9y
cy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcklt
cGw6OkNTU19nZXRTdHlsZVNoZWV0VGV4dChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiBy
ZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2Nv
bEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fY3NzQWdlbnQp
CiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkNTUyBoYW5kbGVyIGlzIG5vdCBh
dmFpbGFibGUuIik7CgogICAgU3RyaW5nIG91dF90ZXh0OwoKCiAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0
KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFy
YW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRy
ID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBTdHJpbmcgaW5fc3R5bGVTaGVldElkID0gZ2V0
U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgInN0eWxlU2hlZXRJZCIsIDAsIHByb3RvY29sRXJy
b3JzUHRyKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29s
RXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fY3NzQWdlbnQtPmdldFN0eWxlU2hlZXRUZXh0
KCZlcnJvciwgaW5fc3R5bGVTaGVldElkLCAmb3V0X3RleHQpOwoKICAgICAgICBpZiAoIWVycm9y
Lmxlbmd0aCgpKSB7CiAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJ0ZXh0Iiwgb3V0X3Rl
eHQpOwogICAgICAgIH0KICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxl
YXNlKCksIGNvbW1hbmROYW1lc1trQ1NTX2dldFN0eWxlU2hlZXRUZXh0Q21kXSwgcHJvdG9jb2xF
cnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXJJbXBsOjpDU1Nfc2V0U3R5bGVTaGVldFRleHQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVj
dCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJv
dG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2Nzc0Fn
ZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJDU1MgaGFuZGxlciBpcyBu
b3QgYXZhaWxhYmxlLiIpOwoKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250
YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIElu
c3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgp
OwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMu
Z2V0KCk7CiAgICBTdHJpbmcgaW5fc3R5bGVTaGVldElkID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRh
aW5lclB0ciwgInN0eWxlU2hlZXRJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIFN0cmlu
ZyBpbl90ZXh0ID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgInRleHQiLCAwLCBwcm90
b2NvbEVycm9yc1B0cik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFw
cm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2Nzc0FnZW50LT5zZXRTdHlsZVNo
ZWV0VGV4dCgmZXJyb3IsIGluX3N0eWxlU2hlZXRJZCwgaW5fdGV4dCk7CgoKICAgIH0KICAgIHNl
bmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGNvbW1hbmROYW1lc1trQ1NTX3Nl
dFN0eWxlU2hlZXRUZXh0Q21kXSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0K
CnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpDU1Nfc2V0U3R5bGVUZXh0KGxv
bmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNy
ZWF0ZSgpOwoKICAgIGlmICghbV9jc3NBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVz
aFN0cmluZygiQ1NTIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBSZWZQdHI8VHlw
ZUJ1aWxkZXI6OkNTUzo6Q1NTU3R5bGU+IG91dF9zdHlsZTsKCgogICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVj
dCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBh
cmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0
ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaW5f
c3R5bGVJZCA9IGdldE9iamVjdChwYXJhbXNDb250YWluZXJQdHIsICJzdHlsZUlkIiwgMCwgcHJv
dG9jb2xFcnJvcnNQdHIpOwogICAgU3RyaW5nIGluX3RleHQgPSBnZXRTdHJpbmcocGFyYW1zQ29u
dGFpbmVyUHRyLCAidGV4dCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJy
b3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAg
ICAgIG1fY3NzQWdlbnQtPnNldFN0eWxlVGV4dCgmZXJyb3IsIGluX3N0eWxlSWQsIGluX3RleHQs
IG91dF9zdHlsZSk7CgogICAgICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICAgICAg
cmVzdWx0LT5zZXRWYWx1ZSgic3R5bGUiLCBvdXRfc3R5bGUpOwogICAgICAgIH0KICAgIH0KICAg
IHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGNvbW1hbmROYW1lc1trQ1NT
X3NldFN0eWxlVGV4dENtZF0sIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2
b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6Q1NTX3NldFByb3BlcnR5VGV4dChs
b25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAg
UmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5Ojpj
cmVhdGUoKTsKCiAgICBpZiAoIW1fY3NzQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1
c2hTdHJpbmcoIkNTUyBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgUmVmUHRyPFR5
cGVCdWlsZGVyOjpDU1M6OkNTU1N0eWxlPiBvdXRfc3R5bGU7CgoKICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmpl
Y3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBw
YXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQ
dHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGlu
X3N0eWxlSWQgPSBnZXRPYmplY3QocGFyYW1zQ29udGFpbmVyUHRyLCAic3R5bGVJZCIsIDAsIHBy
b3RvY29sRXJyb3JzUHRyKTsKICAgIGludCBpbl9wcm9wZXJ0eUluZGV4ID0gZ2V0SW50KHBhcmFt
c0NvbnRhaW5lclB0ciwgInByb3BlcnR5SW5kZXgiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CiAg
ICBTdHJpbmcgaW5fdGV4dCA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJ0ZXh0Iiwg
MCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgYm9vbCBpbl9vdmVyd3JpdGUgPSBnZXRCb29sZWFu
KHBhcmFtc0NvbnRhaW5lclB0ciwgIm92ZXJ3cml0ZSIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsK
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5s
ZW5ndGgoKSkgewogICAgICAgIG1fY3NzQWdlbnQtPnNldFByb3BlcnR5VGV4dCgmZXJyb3IsIGlu
X3N0eWxlSWQsIGluX3Byb3BlcnR5SW5kZXgsIGluX3RleHQsIGluX292ZXJ3cml0ZSwgb3V0X3N0
eWxlKTsKCiAgICAgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkgewogICAgICAgICAgICByZXN1bHQt
PnNldFZhbHVlKCJzdHlsZSIsIG91dF9zdHlsZSk7CiAgICAgICAgfQogICAgfQogICAgc2VuZFJl
c3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgY29tbWFuZE5hbWVzW2tDU1Nfc2V0UHJv
cGVydHlUZXh0Q21kXSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQg
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpDU1NfdG9nZ2xlUHJvcGVydHkobG9uZyBj
YWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0
cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRl
KCk7CgogICAgaWYgKCFtX2Nzc0FnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3Ry
aW5nKCJDU1MgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIFJlZlB0cjxUeXBlQnVp
bGRlcjo6Q1NTOjpDU1NTdHlsZT4gb3V0X3N0eWxlOwoKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJw
YXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1z
Q29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0g
cHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBpbl9zdHls
ZUlkID0gZ2V0T2JqZWN0KHBhcmFtc0NvbnRhaW5lclB0ciwgInN0eWxlSWQiLCAwLCBwcm90b2Nv
bEVycm9yc1B0cik7CiAgICBpbnQgaW5fcHJvcGVydHlJbmRleCA9IGdldEludChwYXJhbXNDb250
YWluZXJQdHIsICJwcm9wZXJ0eUluZGV4IiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgYm9v
bCBpbl9kaXNhYmxlID0gZ2V0Qm9vbGVhbihwYXJhbXNDb250YWluZXJQdHIsICJkaXNhYmxlIiwg
MCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3Vs
dCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAg
IGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9jc3NBZ2VudC0+dG9n
Z2xlUHJvcGVydHkoJmVycm9yLCBpbl9zdHlsZUlkLCBpbl9wcm9wZXJ0eUluZGV4LCBpbl9kaXNh
YmxlLCBvdXRfc3R5bGUpOwoKICAgICAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAg
ICAgIHJlc3VsdC0+c2V0VmFsdWUoInN0eWxlIiwgb3V0X3N0eWxlKTsKICAgICAgICB9CiAgICB9
CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBjb21tYW5kTmFtZXNb
a0NTU190b2dnbGVQcm9wZXJ0eUNtZF0sIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3Ip
Owp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6Q1NTX3NldFJ1bGVTZWxl
Y3Rvcihsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkK
ewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFy
cmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fY3NzQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJv
cnMtPnB1c2hTdHJpbmcoIkNTUyBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgUmVm
UHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNTU1J1bGU+IG91dF9ydWxlOwoKCiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0
T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRy
ID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJy
b3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBpbl9ydWxlSWQgPSBnZXRPYmplY3QocGFyYW1zQ29udGFpbmVyUHRyLCAicnVsZUlkIiwgMCwg
cHJvdG9jb2xFcnJvcnNQdHIpOwogICAgU3RyaW5nIGluX3NlbGVjdG9yID0gZ2V0U3RyaW5nKHBh
cmFtc0NvbnRhaW5lclB0ciwgInNlbGVjdG9yIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0
aCgpKSB7CiAgICAgICAgbV9jc3NBZ2VudC0+c2V0UnVsZVNlbGVjdG9yKCZlcnJvciwgaW5fcnVs
ZUlkLCBpbl9zZWxlY3Rvciwgb3V0X3J1bGUpOwoKICAgICAgICBpZiAoIWVycm9yLmxlbmd0aCgp
KSB7CiAgICAgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoInJ1bGUiLCBvdXRfcnVsZSk7CiAgICAg
ICAgfQogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgY29t
bWFuZE5hbWVzW2tDU1Nfc2V0UnVsZVNlbGVjdG9yQ21kXSwgcHJvdG9jb2xFcnJvcnMucmVsZWFz
ZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpDU1Nf
YWRkUnVsZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVj
dCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3Rv
ckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fY3NzQWdlbnQpCiAgICAgICAgcHJvdG9jb2xF
cnJvcnMtPnB1c2hTdHJpbmcoIkNTUyBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAg
UmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNTU1J1bGU+IG91dF9ydWxlOwoKCiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+
Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVy
UHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29s
RXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBpbnQgaW5fY29udGV4dE5vZGVJ
ZCA9IGdldEludChwYXJhbXNDb250YWluZXJQdHIsICJjb250ZXh0Tm9kZUlkIiwgMCwgcHJvdG9j
b2xFcnJvcnNQdHIpOwogICAgU3RyaW5nIGluX3NlbGVjdG9yID0gZ2V0U3RyaW5nKHBhcmFtc0Nv
bnRhaW5lclB0ciwgInNlbGVjdG9yIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAg
ICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7
CiAgICAgICAgbV9jc3NBZ2VudC0+YWRkUnVsZSgmZXJyb3IsIGluX2NvbnRleHROb2RlSWQsIGlu
X3NlbGVjdG9yLCBvdXRfcnVsZSk7CgogICAgICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsKICAg
ICAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZSgicnVsZSIsIG91dF9ydWxlKTsKICAgICAgICB9CiAg
ICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBjb21tYW5kTmFt
ZXNba0NTU19hZGRSdWxlQ21kXSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0K
CnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpDU1NfZ2V0U3VwcG9ydGVkQ1NT
UHJvcGVydGllcyhsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KikKewogICAgUmVmUHRyPElu
c3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsK
CiAgICBpZiAoIW1fY3NzQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmco
IkNTUyBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgUmVmUHRyPFR5cGVCdWlsZGVy
OjpBcnJheTxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NQcm9wZXJ0eUluZm8+ID4gb3V0X2Nzc1Byb3Bl
cnRpZXM7CgoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xF
cnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9jc3NBZ2VudC0+Z2V0U3VwcG9ydGVkQ1NTUHJv
cGVydGllcygmZXJyb3IsIG91dF9jc3NQcm9wZXJ0aWVzKTsKCiAgICAgICAgaWYgKCFlcnJvci5s
ZW5ndGgoKSkgewogICAgICAgICAgICByZXN1bHQtPnNldFZhbHVlKCJjc3NQcm9wZXJ0aWVzIiwg
b3V0X2Nzc1Byb3BlcnRpZXMpOwogICAgICAgIH0KICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxs
SWQsIHJlc3VsdC5yZWxlYXNlKCksIGNvbW1hbmROYW1lc1trQ1NTX2dldFN1cHBvcnRlZENTU1By
b3BlcnRpZXNDbWRdLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkNTU19mb3JjZVBzZXVkb1N0YXRlKGxvbmcg
Y2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0
ZSgpOwoKICAgIGlmICghbV9jc3NBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0
cmluZygiQ1NTIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCgogICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9i
amVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9
IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9y
c1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgaW50IGluX25vZGVJZCA9IGdldEludChw
YXJhbXNDb250YWluZXJQdHIsICJub2RlSWQiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGluX2ZvcmNlZFBzZXVkb0NsYXNzZXMgPSBnZXRBcnJheShw
YXJhbXNDb250YWluZXJQdHIsICJmb3JjZWRQc2V1ZG9DbGFzc2VzIiwgMCwgcHJvdG9jb2xFcnJv
cnNQdHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xF
cnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9jc3NBZ2VudC0+Zm9yY2VQc2V1ZG9TdGF0ZSgm
ZXJyb3IsIGluX25vZGVJZCwgaW5fZm9yY2VkUHNldWRvQ2xhc3Nlcyk7CgoKICAgIH0KICAgIHNl
bmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGNvbW1hbmROYW1lc1trQ1NTX2Zv
cmNlUHNldWRvU3RhdGVDbWRdLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoK
dm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkNTU19zdGFydFNlbGVjdG9yUHJv
ZmlsZXIobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0
b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAg
aWYgKCFtX2Nzc0FnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJDU1Mg
aGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJy
b3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fY3NzQWdl
bnQtPnN0YXJ0U2VsZWN0b3JQcm9maWxlcigmZXJyb3IpOwoKCiAgICB9CiAgICBzZW5kUmVzcG9u
c2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBjb21tYW5kTmFtZXNba0NTU19zdGFydFNlbGVj
dG9yUHJvZmlsZXJDbWRdLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9p
ZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkNTU19zdG9wU2VsZWN0b3JQcm9maWxl
cihsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KikKewogICAgUmVmUHRyPEluc3BlY3RvckFy
cmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAo
IW1fY3NzQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkNTUyBoYW5k
bGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OlNl
bGVjdG9yUHJvZmlsZT4gb3V0X3Byb2ZpbGU7CgoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJv
cjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9jc3NBZ2Vu
dC0+c3RvcFNlbGVjdG9yUHJvZmlsZXIoJmVycm9yLCBvdXRfcHJvZmlsZSk7CgogICAgICAgIGlm
ICghZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZSgicHJvZmls
ZSIsIG91dF9wcm9maWxlKTsKICAgICAgICB9CiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElk
LCByZXN1bHQucmVsZWFzZSgpLCBjb21tYW5kTmFtZXNba0NTU19zdG9wU2VsZWN0b3JQcm9maWxl
ckNtZF0sIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVySW1wbDo6Q1NTX2dldE5hbWVkRmxvd0NvbGxlY3Rpb24obG9uZyBj
YWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0
cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRl
KCk7CgogICAgaWYgKCFtX2Nzc0FnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3Ry
aW5nKCJDU1MgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIFJlZlB0cjxUeXBlQnVp
bGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkNTUzo6TmFtZWRGbG93PiA+IG91dF9uYW1lZEZsb3dz
OwoKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0
TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCog
cGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9y
QXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBpbnQg
aW5fZG9jdW1lbnROb2RlSWQgPSBnZXRJbnQocGFyYW1zQ29udGFpbmVyUHRyLCAiZG9jdW1lbnRO
b2RlSWQiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVy
cm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2Nzc0Fn
ZW50LT5nZXROYW1lZEZsb3dDb2xsZWN0aW9uKCZlcnJvciwgaW5fZG9jdW1lbnROb2RlSWQsIG91
dF9uYW1lZEZsb3dzKTsKCiAgICAgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkgewogICAgICAgICAg
ICByZXN1bHQtPnNldFZhbHVlKCJuYW1lZEZsb3dzIiwgb3V0X25hbWVkRmxvd3MpOwogICAgICAg
IH0KICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGNvbW1h
bmROYW1lc1trQ1NTX2dldE5hbWVkRmxvd0NvbGxlY3Rpb25DbWRdLCBwcm90b2NvbEVycm9ycy5y
ZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6
OkNhbnZhc19lbmFibGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJlZlB0
cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRl
KCk7CgogICAgaWYgKCFtX2NhbnZhc0FnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNo
U3RyaW5nKCJDYW52YXMgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKCiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
RXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewog
ICAgICAgIG1fY2FudmFzQWdlbnQtPmVuYWJsZSgmZXJyb3IpOwoKCiAgICB9CiAgICBzZW5kUmVz
cG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBjb21tYW5kTmFtZXNba0NhbnZhc19lbmFi
bGVDbWRdLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkNhbnZhc19kaXNhYmxlKGxvbmcgY2FsbElkLCBJbnNw
ZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3Jz
ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9jYW52YXNBZ2VudCkKICAg
ICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiQ2FudmFzIGhhbmRsZXIgaXMgbm90IGF2
YWlsYWJsZS4iKTsKCgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90
b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2NhbnZhc0FnZW50LT5kaXNhYmxlKCZl
cnJvcik7CgoKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCks
IGNvbW1hbmROYW1lc1trQ2FudmFzX2Rpc2FibGVDbWRdLCBwcm90b2NvbEVycm9ycy5yZWxlYXNl
KCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkNhbnZh
c19kcm9wVHJhY2VMb2cobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3Nh
Z2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJ
bnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2NhbnZhc0FnZW50KQogICAgICAg
IHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJDYW52YXMgaGFuZGxlciBpcyBub3QgYXZhaWxh
YmxlLiIpOwoKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSBy
ZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9i
amVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5z
cGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAg
ICBTdHJpbmcgaW5fdHJhY2VMb2dJZCA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJ0
cmFjZUxvZ0lkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmlu
ZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9j
YW52YXNBZ2VudC0+ZHJvcFRyYWNlTG9nKCZlcnJvciwgaW5fdHJhY2VMb2dJZCk7CgoKICAgIH0K
ICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGNvbW1hbmROYW1lc1tr
Q2FudmFzX2Ryb3BUcmFjZUxvZ0NtZF0sIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3Ip
Owp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6Q2FudmFzX2hhc1VuaW5z
dHJ1bWVudGVkQ2FudmFzZXMobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJl
ZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3Jl
YXRlKCk7CgogICAgaWYgKCFtX2NhbnZhc0FnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5w
dXNoU3RyaW5nKCJDYW52YXMgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIGJvb2wg
b3V0X3Jlc3VsdDsKCgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90
b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2NhbnZhc0FnZW50LT5oYXNVbmluc3Ry
dW1lbnRlZENhbnZhc2VzKCZlcnJvciwgJm91dF9yZXN1bHQpOwoKICAgICAgICBpZiAoIWVycm9y
Lmxlbmd0aCgpKSB7CiAgICAgICAgICAgIHJlc3VsdC0+c2V0Qm9vbGVhbigicmVzdWx0Iiwgb3V0
X3Jlc3VsdCk7CiAgICAgICAgfQogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0
LnJlbGVhc2UoKSwgY29tbWFuZE5hbWVzW2tDYW52YXNfaGFzVW5pbnN0cnVtZW50ZWRDYW52YXNl
c0NtZF0sIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVySW1wbDo6Q2FudmFzX2NhcHR1cmVGcmFtZShsb25nIGNhbGxJZCwg
SW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAg
ICBpZiAoIW1fY2FudmFzQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmco
IkNhbnZhcyBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgVHlwZUJ1aWxkZXI6OkNh
bnZhczo6VHJhY2VMb2dJZCBvdXRfdHJhY2VMb2dJZDsKCgogICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgi
cGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFt
c0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9
IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgYm9vbCBmcmFtZUlkX3ZhbHVlRm91bmQgPSBmYWxz
ZTsKICAgIFN0cmluZyBpbl9mcmFtZUlkID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwg
ImZyYW1lSWQiLCAmZnJhbWVJZF92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3Ro
KCkpIHsKICAgICAgICBtX2NhbnZhc0FnZW50LT5jYXB0dXJlRnJhbWUoJmVycm9yLCBmcmFtZUlk
X3ZhbHVlRm91bmQgPyAmaW5fZnJhbWVJZCA6IDAsICZvdXRfdHJhY2VMb2dJZCk7CgogICAgICAg
IGlmICghZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInRy
YWNlTG9nSWQiLCBvdXRfdHJhY2VMb2dJZCk7CiAgICAgICAgfQogICAgfQogICAgc2VuZFJlc3Bv
bnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgY29tbWFuZE5hbWVzW2tDYW52YXNfY2FwdHVy
ZUZyYW1lQ21kXSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpDYW52YXNfc3RhcnRDYXB0dXJpbmcobG9uZyBj
YWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0
cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRl
KCk7CgogICAgaWYgKCFtX2NhbnZhc0FnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNo
U3RyaW5nKCJDYW52YXMgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIFR5cGVCdWls
ZGVyOjpDYW52YXM6OlRyYWNlTG9nSWQgb3V0X3RyYWNlTG9nSWQ7CgoKICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRP
YmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIg
PSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJv
cnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIGJvb2wgZnJhbWVJZF92YWx1ZUZvdW5k
ID0gZmFsc2U7CiAgICBTdHJpbmcgaW5fZnJhbWVJZCA9IGdldFN0cmluZyhwYXJhbXNDb250YWlu
ZXJQdHIsICJmcmFtZUlkIiwgJmZyYW1lSWRfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIp
OwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMt
Pmxlbmd0aCgpKSB7CiAgICAgICAgbV9jYW52YXNBZ2VudC0+c3RhcnRDYXB0dXJpbmcoJmVycm9y
LCBmcmFtZUlkX3ZhbHVlRm91bmQgPyAmaW5fZnJhbWVJZCA6IDAsICZvdXRfdHJhY2VMb2dJZCk7
CgogICAgICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICAgICAgcmVzdWx0LT5zZXRT
dHJpbmcoInRyYWNlTG9nSWQiLCBvdXRfdHJhY2VMb2dJZCk7CiAgICAgICAgfQogICAgfQogICAg
c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgY29tbWFuZE5hbWVzW2tDYW52
YXNfc3RhcnRDYXB0dXJpbmdDbWRdLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsK
fQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkNhbnZhc19zdG9wQ2FwdHVy
aW5nKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7
CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJy
YXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9jYW52YXNBZ2VudCkKICAgICAgICBwcm90b2NvbEVy
cm9ycy0+cHVzaFN0cmluZygiQ2FudmFzIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCgog
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3Nh
Z2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFt
c0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5
KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgU3RyaW5nIGlu
X3RyYWNlTG9nSWQgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAidHJhY2VMb2dJZCIs
IDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1
bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAg
ICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fY2FudmFzQWdlbnQt
PnN0b3BDYXB0dXJpbmcoJmVycm9yLCBpbl90cmFjZUxvZ0lkKTsKCgogICAgfQogICAgc2VuZFJl
c3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgY29tbWFuZE5hbWVzW2tDYW52YXNfc3Rv
cENhcHR1cmluZ0NtZF0sIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lk
IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6Q2FudmFzX2dldFRyYWNlTG9nKGxvbmcg
Y2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0
ZSgpOwoKICAgIGlmICghbV9jYW52YXNBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVz
aFN0cmluZygiQ2FudmFzIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBSZWZQdHI8
VHlwZUJ1aWxkZXI6OkNhbnZhczo6VHJhY2VMb2c+IG91dF90cmFjZUxvZzsKCgogICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3Qt
PmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5l
clB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2Nv
bEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgU3RyaW5nIGluX3RyYWNlTG9n
SWQgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAidHJhY2VMb2dJZCIsIDAsIHByb3Rv
Y29sRXJyb3JzUHRyKTsKICAgIGJvb2wgc3RhcnRPZmZzZXRfdmFsdWVGb3VuZCA9IGZhbHNlOwog
ICAgaW50IGluX3N0YXJ0T2Zmc2V0ID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgInN0YXJ0
T2Zmc2V0IiwgJnN0YXJ0T2Zmc2V0X3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKICAg
IGJvb2wgbWF4TGVuZ3RoX3ZhbHVlRm91bmQgPSBmYWxzZTsKICAgIGludCBpbl9tYXhMZW5ndGgg
PSBnZXRJbnQocGFyYW1zQ29udGFpbmVyUHRyLCAibWF4TGVuZ3RoIiwgJm1heExlbmd0aF92YWx1
ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9y
OwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2NhbnZhc0Fn
ZW50LT5nZXRUcmFjZUxvZygmZXJyb3IsIGluX3RyYWNlTG9nSWQsIHN0YXJ0T2Zmc2V0X3ZhbHVl
Rm91bmQgPyAmaW5fc3RhcnRPZmZzZXQgOiAwLCBtYXhMZW5ndGhfdmFsdWVGb3VuZCA/ICZpbl9t
YXhMZW5ndGggOiAwLCBvdXRfdHJhY2VMb2cpOwoKICAgICAgICBpZiAoIWVycm9yLmxlbmd0aCgp
KSB7CiAgICAgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoInRyYWNlTG9nIiwgb3V0X3RyYWNlTG9n
KTsKICAgICAgICB9CiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFz
ZSgpLCBjb21tYW5kTmFtZXNba0NhbnZhc19nZXRUcmFjZUxvZ0NtZF0sIHByb3RvY29sRXJyb3Jz
LnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1w
bDo6Q2FudmFzX3JlcGxheVRyYWNlTG9nKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJl
cXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29s
RXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9jYW52YXNBZ2Vu
dCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiQ2FudmFzIGhhbmRsZXIgaXMg
bm90IGF2YWlsYWJsZS4iKTsKCiAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkNhbnZhczo6UmVzb3Vy
Y2VTdGF0ZT4gb3V0X3Jlc291cmNlU3RhdGU7CgoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFt
cyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250
YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90
b2NvbEVycm9ycy5nZXQoKTsKICAgIFN0cmluZyBpbl90cmFjZUxvZ0lkID0gZ2V0U3RyaW5nKHBh
cmFtc0NvbnRhaW5lclB0ciwgInRyYWNlTG9nSWQiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CiAg
ICBpbnQgaW5fc3RlcE5vID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgInN0ZXBObyIsIDAs
IHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBp
ZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fY2FudmFzQWdlbnQtPnJl
cGxheVRyYWNlTG9nKCZlcnJvciwgaW5fdHJhY2VMb2dJZCwgaW5fc3RlcE5vLCBvdXRfcmVzb3Vy
Y2VTdGF0ZSk7CgogICAgICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICAgICAgcmVz
dWx0LT5zZXRWYWx1ZSgicmVzb3VyY2VTdGF0ZSIsIG91dF9yZXNvdXJjZVN0YXRlKTsKICAgICAg
ICB9CiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBjb21t
YW5kTmFtZXNba0NhbnZhc19yZXBsYXlUcmFjZUxvZ0NtZF0sIHByb3RvY29sRXJyb3JzLnJlbGVh
c2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6Q2Fu
dmFzX2dldFJlc291cmNlSW5mbyhsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0
TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9y
cyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fY2FudmFzQWdlbnQpCiAg
ICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkNhbnZhcyBoYW5kbGVyIGlzIG5vdCBh
dmFpbGFibGUuIik7CgogICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpDYW52YXM6OlJlc291cmNlSW5m
bz4gb3V0X3Jlc291cmNlSW5mbzsKCgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1z
Q29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAg
ICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5n
ZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJy
b3JzLmdldCgpOwogICAgU3RyaW5nIGluX3Jlc291cmNlSWQgPSBnZXRTdHJpbmcocGFyYW1zQ29u
dGFpbmVyUHRyLCAicmVzb3VyY2VJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkg
ewogICAgICAgIG1fY2FudmFzQWdlbnQtPmdldFJlc291cmNlSW5mbygmZXJyb3IsIGluX3Jlc291
cmNlSWQsIG91dF9yZXNvdXJjZUluZm8pOwoKICAgICAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7
CiAgICAgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoInJlc291cmNlSW5mbyIsIG91dF9yZXNvdXJj
ZUluZm8pOwogICAgICAgIH0KICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5y
ZWxlYXNlKCksIGNvbW1hbmROYW1lc1trQ2FudmFzX2dldFJlc291cmNlSW5mb0NtZF0sIHByb3Rv
Y29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVySW1wbDo6Q2FudmFzX2dldFJlc291cmNlU3RhdGUobG9uZyBjYWxsSWQsIEluc3BlY3Rv
ck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJh
eT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFt
X2NhbnZhc0FnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJDYW52YXMg
aGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6Q2Fu
dmFzOjpSZXNvdXJjZVN0YXRlPiBvdXRfcmVzb3VyY2VTdGF0ZTsKCgogICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9i
amVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9
IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9y
c1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgU3RyaW5nIGluX3RyYWNlTG9nSWQgPSBn
ZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAidHJhY2VMb2dJZCIsIDAsIHByb3RvY29sRXJy
b3JzUHRyKTsKICAgIFN0cmluZyBpbl9yZXNvdXJjZUlkID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRh
aW5lclB0ciwgInJlc291cmNlSWQiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAg
IEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsK
ICAgICAgICBtX2NhbnZhc0FnZW50LT5nZXRSZXNvdXJjZVN0YXRlKCZlcnJvciwgaW5fdHJhY2VM
b2dJZCwgaW5fcmVzb3VyY2VJZCwgb3V0X3Jlc291cmNlU3RhdGUpOwoKICAgICAgICBpZiAoIWVy
cm9yLmxlbmd0aCgpKSB7CiAgICAgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoInJlc291cmNlU3Rh
dGUiLCBvdXRfcmVzb3VyY2VTdGF0ZSk7CiAgICAgICAgfQogICAgfQogICAgc2VuZFJlc3BvbnNl
KGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgY29tbWFuZE5hbWVzW2tDYW52YXNfZ2V0UmVzb3Vy
Y2VTdGF0ZUNtZF0sIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lkIElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6Q29uc29sZV9lbmFibGUobG9uZyBjYWxsSWQs
IEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xF
cnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2NvbnNvbGVBZ2Vu
dCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiQ29uc29sZSBoYW5kbGVyIGlz
IG5vdCBhdmFpbGFibGUuIik7CgoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlm
ICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9jb25zb2xlQWdlbnQtPmVu
YWJsZSgmZXJyb3IpOwoKCiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVs
ZWFzZSgpLCBjb21tYW5kTmFtZXNba0NvbnNvbGVfZW5hYmxlQ21kXSwgcHJvdG9jb2xFcnJvcnMu
cmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBs
OjpDb25zb2xlX2Rpc2FibGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJl
ZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3Jl
YXRlKCk7CgogICAgaWYgKCFtX2NvbnNvbGVBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+
cHVzaFN0cmluZygiQ29uc29sZSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgoKICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgp
KSB7CiAgICAgICAgbV9jb25zb2xlQWdlbnQtPmRpc2FibGUoJmVycm9yKTsKCgogICAgfQogICAg
c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgY29tbWFuZE5hbWVzW2tDb25z
b2xlX2Rpc2FibGVDbWRdLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9p
ZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkNvbnNvbGVfY2xlYXJNZXNzYWdlcyhs
b25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5
PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1f
Y29uc29sZUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJDb25zb2xl
IGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVy
cm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2NvbnNv
bGVBZ2VudC0+Y2xlYXJNZXNzYWdlcygmZXJyb3IpOwoKCiAgICB9CiAgICBzZW5kUmVzcG9uc2Uo
Y2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBjb21tYW5kTmFtZXNba0NvbnNvbGVfY2xlYXJNZXNz
YWdlc0NtZF0sIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6Q29uc29sZV9zZXRNb25pdG9yaW5nWEhSRW5hYmxl
ZChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewog
ICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5
OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fY29uc29sZUFnZW50KQogICAgICAgIHByb3RvY29sRXJy
b3JzLT5wdXNoU3RyaW5nKCJDb25zb2xlIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCgog
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3Nh
Z2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFt
c0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5
KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgYm9vbCBpbl9l
bmFibGVkID0gZ2V0Qm9vbGVhbihwYXJhbXNDb250YWluZXJQdHIsICJlbmFibGVkIiwgMCwgcHJv
dG9jb2xFcnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICgh
cHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9jb25zb2xlQWdlbnQtPnNldE1v
bml0b3JpbmdYSFJFbmFibGVkKCZlcnJvciwgaW5fZW5hYmxlZCk7CgoKICAgIH0KICAgIHNlbmRS
ZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGNvbW1hbmROYW1lc1trQ29uc29sZV9z
ZXRNb25pdG9yaW5nWEhSRW5hYmxlZENtZF0sIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJy
b3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6Q29uc29sZV9hZGRJ
bnNwZWN0ZWROb2RlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdl
T2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5z
cGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9jb25zb2xlQWdlbnQpCiAgICAgICAg
cHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkNvbnNvbGUgaGFuZGxlciBpcyBub3QgYXZhaWxh
YmxlLiIpOwoKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSBy
ZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9i
amVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5z
cGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAg
ICBpbnQgaW5fbm9kZUlkID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgIm5vZGVJZCIsIDAs
IHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBp
ZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fY29uc29sZUFnZW50LT5h
ZGRJbnNwZWN0ZWROb2RlKCZlcnJvciwgaW5fbm9kZUlkKTsKCgogICAgfQogICAgc2VuZFJlc3Bv
bnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgY29tbWFuZE5hbWVzW2tDb25zb2xlX2FkZElu
c3BlY3RlZE5vZGVDbWRdLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9p
ZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkNvbnNvbGVfYWRkSW5zcGVjdGVkSGVh
cE9iamVjdChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVj
dCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3Rv
ckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fY29uc29sZUFnZW50KQogICAgICAgIHByb3Rv
Y29sRXJyb3JzLT5wdXNoU3RyaW5nKCJDb25zb2xlIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4i
KTsKCgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVz
dE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3Qq
IHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3Rv
ckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgaW50
IGluX2hlYXBPYmplY3RJZCA9IGdldEludChwYXJhbXNDb250YWluZXJQdHIsICJoZWFwT2JqZWN0
SWQiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9y
OwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2NvbnNvbGVB
Z2VudC0+YWRkSW5zcGVjdGVkSGVhcE9iamVjdCgmZXJyb3IsIGluX2hlYXBPYmplY3RJZCk7CgoK
ICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGNvbW1hbmRO
YW1lc1trQ29uc29sZV9hZGRJbnNwZWN0ZWRIZWFwT2JqZWN0Q21kXSwgcHJvdG9jb2xFcnJvcnMu
cmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBs
OjpET01fZ2V0RG9jdW1lbnQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJl
ZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3Jl
YXRlKCk7CgogICAgaWYgKCFtX2RvbUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNo
U3RyaW5nKCJET00gaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIFJlZlB0cjxUeXBl
QnVpbGRlcjo6RE9NOjpOb2RlPiBvdXRfcm9vdDsKCgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVy
cm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2RvbUFn
ZW50LT5nZXREb2N1bWVudCgmZXJyb3IsIG91dF9yb290KTsKCiAgICAgICAgaWYgKCFlcnJvci5s
ZW5ndGgoKSkgewogICAgICAgICAgICByZXN1bHQtPnNldFZhbHVlKCJyb290Iiwgb3V0X3Jvb3Qp
OwogICAgICAgIH0KICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNl
KCksIGNvbW1hbmROYW1lc1trRE9NX2dldERvY3VtZW50Q21kXSwgcHJvdG9jb2xFcnJvcnMucmVs
ZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpE
T01fcmVxdWVzdENoaWxkTm9kZXMobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVz
dE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJv
cnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2RvbUFnZW50KQogICAg
ICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJET00gaGFuZGxlciBpcyBub3QgYXZhaWxh
YmxlLiIpOwoKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSBy
ZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9i
amVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5z
cGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAg
ICBpbnQgaW5fbm9kZUlkID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgIm5vZGVJZCIsIDAs
IHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgZGVwdGhfdmFsdWVGb3VuZCA9IGZhbHNlOwog
ICAgaW50IGluX2RlcHRoID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgImRlcHRoIiwgJmRl
cHRoX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJp
bmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1f
ZG9tQWdlbnQtPnJlcXVlc3RDaGlsZE5vZGVzKCZlcnJvciwgaW5fbm9kZUlkLCBkZXB0aF92YWx1
ZUZvdW5kID8gJmluX2RlcHRoIDogMCk7CgoKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQs
IHJlc3VsdC5yZWxlYXNlKCksIGNvbW1hbmROYW1lc1trRE9NX3JlcXVlc3RDaGlsZE5vZGVzQ21k
XSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXJJbXBsOjpET01fcXVlcnlTZWxlY3Rvcihsb25nIGNhbGxJZCwgSW5zcGVj
dG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFy
cmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAo
IW1fZG9tQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRPTSBoYW5k
bGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgaW50IG91dF9ub2RlSWQ7CgoKICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0
LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWlu
ZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9j
b2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIGludCBpbl9ub2RlSWQgPSBn
ZXRJbnQocGFyYW1zQ29udGFpbmVyUHRyLCAibm9kZUlkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIp
OwogICAgU3RyaW5nIGluX3NlbGVjdG9yID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwg
InNlbGVjdG9yIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmlu
ZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9k
b21BZ2VudC0+cXVlcnlTZWxlY3RvcigmZXJyb3IsIGluX25vZGVJZCwgaW5fc2VsZWN0b3IsICZv
dXRfbm9kZUlkKTsKCiAgICAgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkgewogICAgICAgICAgICBy
ZXN1bHQtPnNldE51bWJlcigibm9kZUlkIiwgb3V0X25vZGVJZCk7CiAgICAgICAgfQogICAgfQog
ICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgY29tbWFuZE5hbWVzW2tE
T01fcXVlcnlTZWxlY3RvckNtZF0sIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9
Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RE9NX3F1ZXJ5U2VsZWN0b3JB
bGwobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsK
ICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJh
eTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2RvbUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3Jz
LT5wdXNoU3RyaW5nKCJET00gaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIFJlZlB0
cjxUeXBlQnVpbGRlcjo6QXJyYXk8aW50PiA+IG91dF9ub2RlSWRzOwoKCiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0
T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRy
ID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJy
b3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBpbnQgaW5fbm9kZUlkID0gZ2V0SW50
KHBhcmFtc0NvbnRhaW5lclB0ciwgIm5vZGVJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAg
IFN0cmluZyBpbl9zZWxlY3RvciA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJzZWxl
Y3RvciIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJy
b3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fZG9tQWdl
bnQtPnF1ZXJ5U2VsZWN0b3JBbGwoJmVycm9yLCBpbl9ub2RlSWQsIGluX3NlbGVjdG9yLCBvdXRf
bm9kZUlkcyk7CgogICAgICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICAgICAgcmVz
dWx0LT5zZXRWYWx1ZSgibm9kZUlkcyIsIG91dF9ub2RlSWRzKTsKICAgICAgICB9CiAgICB9CiAg
ICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBjb21tYW5kTmFtZXNba0RP
TV9xdWVyeVNlbGVjdG9yQWxsQ21kXSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7
Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpET01fc2V0Tm9kZU5hbWUo
bG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAg
IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6
Y3JlYXRlKCk7CgogICAgaWYgKCFtX2RvbUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5w
dXNoU3RyaW5nKCJET00gaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIGludCBvdXRf
bm9kZUlkOwoKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSBy
ZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9i
amVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5z
cGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAg
ICBpbnQgaW5fbm9kZUlkID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgIm5vZGVJZCIsIDAs
IHByb3RvY29sRXJyb3JzUHRyKTsKICAgIFN0cmluZyBpbl9uYW1lID0gZ2V0U3RyaW5nKHBhcmFt
c0NvbnRhaW5lclB0ciwgIm5hbWUiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAg
IEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsK
ICAgICAgICBtX2RvbUFnZW50LT5zZXROb2RlTmFtZSgmZXJyb3IsIGluX25vZGVJZCwgaW5fbmFt
ZSwgJm91dF9ub2RlSWQpOwoKICAgICAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAg
ICAgIHJlc3VsdC0+c2V0TnVtYmVyKCJub2RlSWQiLCBvdXRfbm9kZUlkKTsKICAgICAgICB9CiAg
ICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBjb21tYW5kTmFt
ZXNba0RPTV9zZXROb2RlTmFtZUNtZF0sIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3Ip
Owp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RE9NX3NldE5vZGVWYWx1
ZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewog
ICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5
OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZG9tQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMt
PnB1c2hTdHJpbmcoIkRPTSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgoKICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0
LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWlu
ZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9j
b2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIGludCBpbl9ub2RlSWQgPSBn
ZXRJbnQocGFyYW1zQ29udGFpbmVyUHRyLCAibm9kZUlkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIp
OwogICAgU3RyaW5nIGluX3ZhbHVlID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgInZh
bHVlIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJv
cjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9kb21BZ2Vu
dC0+c2V0Tm9kZVZhbHVlKCZlcnJvciwgaW5fbm9kZUlkLCBpbl92YWx1ZSk7CgoKICAgIH0KICAg
IHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGNvbW1hbmROYW1lc1trRE9N
X3NldE5vZGVWYWx1ZUNtZF0sIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2
b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RE9NX3JlbW92ZU5vZGUobG9uZyBj
YWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0
cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRl
KCk7CgogICAgaWYgKCFtX2RvbUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3Ry
aW5nKCJET00gaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKCiAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2Jq
ZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0g
cGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3Jz
UHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBpbnQgaW5fbm9kZUlkID0gZ2V0SW50KHBh
cmFtc0NvbnRhaW5lclB0ciwgIm5vZGVJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgo
KSkgewogICAgICAgIG1fZG9tQWdlbnQtPnJlbW92ZU5vZGUoJmVycm9yLCBpbl9ub2RlSWQpOwoK
CiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBjb21tYW5k
TmFtZXNba0RPTV9yZW1vdmVOb2RlQ21kXSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJv
cik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpET01fc2V0QXR0cmli
dXRlVmFsdWUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmpl
Y3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0
b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2RvbUFnZW50KQogICAgICAgIHByb3RvY29s
RXJyb3JzLT5wdXNoU3RyaW5nKCJET00gaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKCiAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2Fn
ZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1z
Q29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkq
IHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBpbnQgaW5fbm9k
ZUlkID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgIm5vZGVJZCIsIDAsIHByb3RvY29sRXJy
b3JzUHRyKTsKICAgIFN0cmluZyBpbl9uYW1lID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0
ciwgIm5hbWUiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBTdHJpbmcgaW5fdmFsdWUgPSBn
ZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAidmFsdWUiLCAwLCBwcm90b2NvbEVycm9yc1B0
cik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9y
cy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2RvbUFnZW50LT5zZXRBdHRyaWJ1dGVWYWx1ZSgmZXJy
b3IsIGluX25vZGVJZCwgaW5fbmFtZSwgaW5fdmFsdWUpOwoKCiAgICB9CiAgICBzZW5kUmVzcG9u
c2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBjb21tYW5kTmFtZXNba0RPTV9zZXRBdHRyaWJ1
dGVWYWx1ZUNtZF0sIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lkIElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RE9NX3NldEF0dHJpYnV0ZXNBc1RleHQobG9u
ZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJl
ZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3Jl
YXRlKCk7CgogICAgaWYgKCFtX2RvbUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNo
U3RyaW5nKCJET00gaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKCiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0
T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRy
ID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJy
b3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBpbnQgaW5fbm9kZUlkID0gZ2V0SW50
KHBhcmFtc0NvbnRhaW5lclB0ciwgIm5vZGVJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAg
IFN0cmluZyBpbl90ZXh0ID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgInRleHQiLCAw
LCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBib29sIG5hbWVfdmFsdWVGb3VuZCA9IGZhbHNlOwog
ICAgU3RyaW5nIGluX25hbWUgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAibmFtZSIs
ICZuYW1lX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JT
dHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAg
IG1fZG9tQWdlbnQtPnNldEF0dHJpYnV0ZXNBc1RleHQoJmVycm9yLCBpbl9ub2RlSWQsIGluX3Rl
eHQsIG5hbWVfdmFsdWVGb3VuZCA/ICZpbl9uYW1lIDogMCk7CgoKICAgIH0KICAgIHNlbmRSZXNw
b25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGNvbW1hbmROYW1lc1trRE9NX3NldEF0dHJp
YnV0ZXNBc1RleHRDbWRdLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9p
ZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTV9yZW1vdmVBdHRyaWJ1dGUobG9u
ZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJl
ZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3Jl
YXRlKCk7CgogICAgaWYgKCFtX2RvbUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNo
U3RyaW5nKCJET00gaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKCiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0
T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRy
ID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJy
b3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBpbnQgaW5fbm9kZUlkID0gZ2V0SW50
KHBhcmFtc0NvbnRhaW5lclB0ciwgIm5vZGVJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAg
IFN0cmluZyBpbl9uYW1lID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgIm5hbWUiLCAw
LCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAg
aWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2RvbUFnZW50LT5yZW1v
dmVBdHRyaWJ1dGUoJmVycm9yLCBpbl9ub2RlSWQsIGluX25hbWUpOwoKCiAgICB9CiAgICBzZW5k
UmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBjb21tYW5kTmFtZXNba0RPTV9yZW1v
dmVBdHRyaWJ1dGVDbWRdLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9p
ZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTV9nZXRFdmVudExpc3RlbmVyc0Zv
ck5vZGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3Qp
CnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JB
cnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2RvbUFnZW50KQogICAgICAgIHByb3RvY29sRXJy
b3JzLT5wdXNoU3RyaW5nKCJET00gaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIFJl
ZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkRPTTo6RXZlbnRMaXN0ZW5lcj4g
PiBvdXRfbGlzdGVuZXJzOwoKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250
YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIElu
c3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgp
OwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMu
Z2V0KCk7CiAgICBpbnQgaW5fbm9kZUlkID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgIm5v
ZGVJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgb2JqZWN0R3JvdXBfdmFsdWVG
b3VuZCA9IGZhbHNlOwogICAgU3RyaW5nIGluX29iamVjdEdyb3VwID0gZ2V0U3RyaW5nKHBhcmFt
c0NvbnRhaW5lclB0ciwgIm9iamVjdEdyb3VwIiwgJm9iamVjdEdyb3VwX3ZhbHVlRm91bmQsIHBy
b3RvY29sRXJyb3JzUHRyKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAo
IXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fZG9tQWdlbnQtPmdldEV2ZW50
TGlzdGVuZXJzRm9yTm9kZSgmZXJyb3IsIGluX25vZGVJZCwgb2JqZWN0R3JvdXBfdmFsdWVGb3Vu
ZCA/ICZpbl9vYmplY3RHcm91cCA6IDAsIG91dF9saXN0ZW5lcnMpOwoKICAgICAgICBpZiAoIWVy
cm9yLmxlbmd0aCgpKSB7CiAgICAgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoImxpc3RlbmVycyIs
IG91dF9saXN0ZW5lcnMpOwogICAgICAgIH0KICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQs
IHJlc3VsdC5yZWxlYXNlKCksIGNvbW1hbmROYW1lc1trRE9NX2dldEV2ZW50TGlzdGVuZXJzRm9y
Tm9kZUNtZF0sIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RE9NX2dldE91dGVySFRNTChsb25nIGNhbGxJZCwg
SW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAg
ICBpZiAoIW1fZG9tQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRP
TSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgU3RyaW5nIG91dF9vdXRlckhUTUw7
CgoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RN
ZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBw
YXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JB
cnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIGludCBp
bl9ub2RlSWQgPSBnZXRJbnQocGFyYW1zQ29udGFpbmVyUHRyLCAibm9kZUlkIiwgMCwgcHJvdG9j
b2xFcnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJv
dG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9kb21BZ2VudC0+Z2V0T3V0ZXJIVE1M
KCZlcnJvciwgaW5fbm9kZUlkLCAmb3V0X291dGVySFRNTCk7CgogICAgICAgIGlmICghZXJyb3Iu
bGVuZ3RoKCkpIHsKICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoIm91dGVySFRNTCIsIG91
dF9vdXRlckhUTUwpOwogICAgICAgIH0KICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJl
c3VsdC5yZWxlYXNlKCksIGNvbW1hbmROYW1lc1trRE9NX2dldE91dGVySFRNTENtZF0sIHByb3Rv
Y29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVySW1wbDo6RE9NX3NldE91dGVySFRNTChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0
KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90
b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZG9tQWdl
bnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRPTSBoYW5kbGVyIGlzIG5v
dCBhdmFpbGFibGUuIik7CgoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRh
aW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5z
cGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7
CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5n
ZXQoKTsKICAgIGludCBpbl9ub2RlSWQgPSBnZXRJbnQocGFyYW1zQ29udGFpbmVyUHRyLCAibm9k
ZUlkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgU3RyaW5nIGluX291dGVySFRNTCA9IGdl
dFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJvdXRlckhUTUwiLCAwLCBwcm90b2NvbEVycm9y
c1B0cik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVy
cm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2RvbUFnZW50LT5zZXRPdXRlckhUTUwoJmVycm9y
LCBpbl9ub2RlSWQsIGluX291dGVySFRNTCk7CgoKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxs
SWQsIHJlc3VsdC5yZWxlYXNlKCksIGNvbW1hbmROYW1lc1trRE9NX3NldE91dGVySFRNTENtZF0s
IHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVySW1wbDo6RE9NX3BlcmZvcm1TZWFyY2gobG9uZyBjYWxsSWQsIEluc3BlY3Rv
ck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJh
eT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFt
X2RvbUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJET00gaGFuZGxl
ciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIFN0cmluZyBvdXRfc2VhcmNoSWQ7CiAgICBpbnQg
b3V0X3Jlc3VsdENvdW50OwoKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250
YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIElu
c3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgp
OwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMu
Z2V0KCk7CiAgICBTdHJpbmcgaW5fcXVlcnkgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRy
LCAicXVlcnkiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5n
IGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2Rv
bUFnZW50LT5wZXJmb3JtU2VhcmNoKCZlcnJvciwgaW5fcXVlcnksICZvdXRfc2VhcmNoSWQsICZv
dXRfcmVzdWx0Q291bnQpOwoKICAgICAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAg
ICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJzZWFyY2hJZCIsIG91dF9zZWFyY2hJZCk7CiAgICAgICAg
ICAgIHJlc3VsdC0+c2V0TnVtYmVyKCJyZXN1bHRDb3VudCIsIG91dF9yZXN1bHRDb3VudCk7CiAg
ICAgICAgfQogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwg
Y29tbWFuZE5hbWVzW2tET01fcGVyZm9ybVNlYXJjaENtZF0sIHByb3RvY29sRXJyb3JzLnJlbGVh
c2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RE9N
X2dldFNlYXJjaFJlc3VsdHMobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1l
c3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMg
PSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2RvbUFnZW50KQogICAgICAg
IHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJET00gaGFuZGxlciBpcyBub3QgYXZhaWxhYmxl
LiIpOwoKICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8aW50PiA+IG91dF9ub2RlSWRzOwoK
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVz
c2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFy
YW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJy
YXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBTdHJpbmcg
aW5fc2VhcmNoSWQgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAic2VhcmNoSWQiLCAw
LCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBpbnQgaW5fZnJvbUluZGV4ID0gZ2V0SW50KHBhcmFt
c0NvbnRhaW5lclB0ciwgImZyb21JbmRleCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGlu
dCBpbl90b0luZGV4ID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgInRvSW5kZXgiLCAwLCBw
cm90b2NvbEVycm9yc1B0cik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYg
KCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2RvbUFnZW50LT5nZXRTZWFy
Y2hSZXN1bHRzKCZlcnJvciwgaW5fc2VhcmNoSWQsIGluX2Zyb21JbmRleCwgaW5fdG9JbmRleCwg
b3V0X25vZGVJZHMpOwoKICAgICAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgICAg
IHJlc3VsdC0+c2V0VmFsdWUoIm5vZGVJZHMiLCBvdXRfbm9kZUlkcyk7CiAgICAgICAgfQogICAg
fQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgY29tbWFuZE5hbWVz
W2tET01fZ2V0U2VhcmNoUmVzdWx0c0NtZF0sIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJy
b3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RE9NX2Rpc2NhcmRT
ZWFyY2hSZXN1bHRzKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdl
T2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5z
cGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kb21BZ2VudCkKICAgICAgICBwcm90
b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRE9NIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsK
CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1l
c3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBh
cmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFy
cmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgU3RyaW5n
IGluX3NlYXJjaElkID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgInNlYXJjaElkIiwg
MCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3Vs
dCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAg
IGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9kb21BZ2VudC0+ZGlz
Y2FyZFNlYXJjaFJlc3VsdHMoJmVycm9yLCBpbl9zZWFyY2hJZCk7CgoKICAgIH0KICAgIHNlbmRS
ZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGNvbW1hbmROYW1lc1trRE9NX2Rpc2Nh
cmRTZWFyY2hSZXN1bHRzQ21kXSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0K
CnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpET01fcmVxdWVzdE5vZGUobG9u
ZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJl
ZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3Jl
YXRlKCk7CgogICAgaWYgKCFtX2RvbUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNo
U3RyaW5nKCJET00gaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIGludCBvdXRfbm9k
ZUlkOwoKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1
ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVj
dCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVj
dG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBT
dHJpbmcgaW5fb2JqZWN0SWQgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAib2JqZWN0
SWQiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9y
OwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2RvbUFnZW50
LT5yZXF1ZXN0Tm9kZSgmZXJyb3IsIGluX29iamVjdElkLCAmb3V0X25vZGVJZCk7CgogICAgICAg
IGlmICghZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICAgICAgcmVzdWx0LT5zZXROdW1iZXIoIm5v
ZGVJZCIsIG91dF9ub2RlSWQpOwogICAgICAgIH0KICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxs
SWQsIHJlc3VsdC5yZWxlYXNlKCksIGNvbW1hbmROYW1lc1trRE9NX3JlcXVlc3ROb2RlQ21kXSwg
cHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXJJbXBsOjpET01fc2V0SW5zcGVjdE1vZGVFbmFibGVkKGxvbmcgY2FsbElkLCBJ
bnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAg
IGlmICghbV9kb21BZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRE9N
IGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFy
YW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0Nv
bnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHBy
b3RvY29sRXJyb3JzLmdldCgpOwogICAgYm9vbCBpbl9lbmFibGVkID0gZ2V0Qm9vbGVhbihwYXJh
bXNDb250YWluZXJQdHIsICJlbmFibGVkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgYm9v
bCBoaWdobGlnaHRDb25maWdfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gaW5faGlnaGxpZ2h0Q29uZmlnID0gZ2V0T2JqZWN0KHBhcmFtc0NvbnRhaW5lclB0
ciwgImhpZ2hsaWdodENvbmZpZyIsICZoaWdobGlnaHRDb25maWdfdmFsdWVGb3VuZCwgcHJvdG9j
b2xFcnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJv
dG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9kb21BZ2VudC0+c2V0SW5zcGVjdE1v
ZGVFbmFibGVkKCZlcnJvciwgaW5fZW5hYmxlZCwgaGlnaGxpZ2h0Q29uZmlnX3ZhbHVlRm91bmQg
PyAmaW5faGlnaGxpZ2h0Q29uZmlnIDogMCk7CgoKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxs
SWQsIHJlc3VsdC5yZWxlYXNlKCksIGNvbW1hbmROYW1lc1trRE9NX3NldEluc3BlY3RNb2RlRW5h
YmxlZENtZF0sIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RE9NX2hpZ2hsaWdodFJlY3QobG9uZyBjYWxsSWQs
IEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7Cgog
ICAgaWYgKCFtX2RvbUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJE
T00gaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJw
YXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1z
Q29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0g
cHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBpbnQgaW5feCA9IGdldEludChwYXJhbXNDb250YWlu
ZXJQdHIsICJ4IiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgaW50IGluX3kgPSBnZXRJbnQo
cGFyYW1zQ29udGFpbmVyUHRyLCAieSIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGludCBp
bl93aWR0aCA9IGdldEludChwYXJhbXNDb250YWluZXJQdHIsICJ3aWR0aCIsIDAsIHByb3RvY29s
RXJyb3JzUHRyKTsKICAgIGludCBpbl9oZWlnaHQgPSBnZXRJbnQocGFyYW1zQ29udGFpbmVyUHRy
LCAiaGVpZ2h0IiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgYm9vbCBjb2xvcl92YWx1ZUZv
dW5kID0gZmFsc2U7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBpbl9jb2xvciA9IGdldE9i
amVjdChwYXJhbXNDb250YWluZXJQdHIsICJjb2xvciIsICZjb2xvcl92YWx1ZUZvdW5kLCBwcm90
b2NvbEVycm9yc1B0cik7CiAgICBib29sIG91dGxpbmVDb2xvcl92YWx1ZUZvdW5kID0gZmFsc2U7
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBpbl9vdXRsaW5lQ29sb3IgPSBnZXRPYmplY3Qo
cGFyYW1zQ29udGFpbmVyUHRyLCAib3V0bGluZUNvbG9yIiwgJm91dGxpbmVDb2xvcl92YWx1ZUZv
dW5kLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBib29sIHVzZVBhZ2VDb29yZGluYXRlc192YWx1
ZUZvdW5kID0gZmFsc2U7CiAgICBib29sIGluX3VzZVBhZ2VDb29yZGluYXRlcyA9IGdldEJvb2xl
YW4ocGFyYW1zQ29udGFpbmVyUHRyLCAidXNlUGFnZUNvb3JkaW5hdGVzIiwgJnVzZVBhZ2VDb29y
ZGluYXRlc192YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9y
U3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAg
ICBtX2RvbUFnZW50LT5oaWdobGlnaHRSZWN0KCZlcnJvciwgaW5feCwgaW5feSwgaW5fd2lkdGgs
IGluX2hlaWdodCwgY29sb3JfdmFsdWVGb3VuZCA/ICZpbl9jb2xvciA6IDAsIG91dGxpbmVDb2xv
cl92YWx1ZUZvdW5kID8gJmluX291dGxpbmVDb2xvciA6IDAsIHVzZVBhZ2VDb29yZGluYXRlc192
YWx1ZUZvdW5kID8gJmluX3VzZVBhZ2VDb29yZGluYXRlcyA6IDApOwoKCiAgICB9CiAgICBzZW5k
UmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBjb21tYW5kTmFtZXNba0RPTV9oaWdo
bGlnaHRSZWN0Q21kXSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQg
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpET01faGlnaGxpZ2h0UXVhZChsb25nIGNh
bGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRy
PEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUo
KTsKCiAgICBpZiAoIW1fZG9tQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJp
bmcoIkRPTSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgoKICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmpl
Y3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBw
YXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQ
dHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gaW5f
cXVhZCA9IGdldEFycmF5KHBhcmFtc0NvbnRhaW5lclB0ciwgInF1YWQiLCAwLCBwcm90b2NvbEVy
cm9yc1B0cik7CiAgICBib29sIGNvbG9yX3ZhbHVlRm91bmQgPSBmYWxzZTsKICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IGluX2NvbG9yID0gZ2V0T2JqZWN0KHBhcmFtc0NvbnRhaW5lclB0ciwg
ImNvbG9yIiwgJmNvbG9yX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wg
b3V0bGluZUNvbG9yX3ZhbHVlRm91bmQgPSBmYWxzZTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IGluX291dGxpbmVDb2xvciA9IGdldE9iamVjdChwYXJhbXNDb250YWluZXJQdHIsICJvdXRs
aW5lQ29sb3IiLCAmb3V0bGluZUNvbG9yX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsK
ICAgIGJvb2wgdXNlUGFnZUNvb3JkaW5hdGVzX3ZhbHVlRm91bmQgPSBmYWxzZTsKICAgIGJvb2wg
aW5fdXNlUGFnZUNvb3JkaW5hdGVzID0gZ2V0Qm9vbGVhbihwYXJhbXNDb250YWluZXJQdHIsICJ1
c2VQYWdlQ29vcmRpbmF0ZXMiLCAmdXNlUGFnZUNvb3JkaW5hdGVzX3ZhbHVlRm91bmQsIHByb3Rv
Y29sRXJyb3JzUHRyKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXBy
b3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fZG9tQWdlbnQtPmhpZ2hsaWdodFF1
YWQoJmVycm9yLCBpbl9xdWFkLCBjb2xvcl92YWx1ZUZvdW5kID8gJmluX2NvbG9yIDogMCwgb3V0
bGluZUNvbG9yX3ZhbHVlRm91bmQgPyAmaW5fb3V0bGluZUNvbG9yIDogMCwgdXNlUGFnZUNvb3Jk
aW5hdGVzX3ZhbHVlRm91bmQgPyAmaW5fdXNlUGFnZUNvb3JkaW5hdGVzIDogMCk7CgoKICAgIH0K
ICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGNvbW1hbmROYW1lc1tr
RE9NX2hpZ2hsaWdodFF1YWRDbWRdLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsK
fQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTV9oaWdobGlnaHROb2Rl
KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAg
ICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6
OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kb21BZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+
cHVzaFN0cmluZygiRE9NIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCgogICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3Qt
PmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5l
clB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2Nv
bEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gaW5faGlnaGxpZ2h0Q29uZmlnID0gZ2V0T2JqZWN0KHBhcmFtc0NvbnRhaW5lclB0ciwg
ImhpZ2hsaWdodENvbmZpZyIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgbm9kZUlk
X3ZhbHVlRm91bmQgPSBmYWxzZTsKICAgIGludCBpbl9ub2RlSWQgPSBnZXRJbnQocGFyYW1zQ29u
dGFpbmVyUHRyLCAibm9kZUlkIiwgJm5vZGVJZF92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0
cik7CiAgICBib29sIG9iamVjdElkX3ZhbHVlRm91bmQgPSBmYWxzZTsKICAgIFN0cmluZyBpbl9v
YmplY3RJZCA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJvYmplY3RJZCIsICZvYmpl
Y3RJZF92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3Ry
aW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBt
X2RvbUFnZW50LT5oaWdobGlnaHROb2RlKCZlcnJvciwgaW5faGlnaGxpZ2h0Q29uZmlnLCBub2Rl
SWRfdmFsdWVGb3VuZCA/ICZpbl9ub2RlSWQgOiAwLCBvYmplY3RJZF92YWx1ZUZvdW5kID8gJmlu
X29iamVjdElkIDogMCk7CgoKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5y
ZWxlYXNlKCksIGNvbW1hbmROYW1lc1trRE9NX2hpZ2hsaWdodE5vZGVDbWRdLCBwcm90b2NvbEVy
cm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ckltcGw6OkRPTV9oaWRlSGlnaGxpZ2h0KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqKQp7
CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJy
YXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kb21BZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9y
cy0+cHVzaFN0cmluZygiRE9NIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCgogICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
ICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkp
IHsKICAgICAgICBtX2RvbUFnZW50LT5oaWRlSGlnaGxpZ2h0KCZlcnJvcik7CgoKICAgIH0KICAg
IHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGNvbW1hbmROYW1lc1trRE9N
X2hpZGVIaWdobGlnaHRDbWRdLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoK
dm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTV9oaWdobGlnaHRGcmFtZShs
b25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAg
UmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5Ojpj
cmVhdGUoKTsKCiAgICBpZiAoIW1fZG9tQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1
c2hTdHJpbmcoIkRPTSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgoKICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5n
ZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQ
dHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xF
cnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIFN0cmluZyBpbl9mcmFtZUlkID0g
Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgImZyYW1lSWQiLCAwLCBwcm90b2NvbEVycm9y
c1B0cik7CiAgICBib29sIGNvbnRlbnRDb2xvcl92YWx1ZUZvdW5kID0gZmFsc2U7CiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBpbl9jb250ZW50Q29sb3IgPSBnZXRPYmplY3QocGFyYW1zQ29u
dGFpbmVyUHRyLCAiY29udGVudENvbG9yIiwgJmNvbnRlbnRDb2xvcl92YWx1ZUZvdW5kLCBwcm90
b2NvbEVycm9yc1B0cik7CiAgICBib29sIGNvbnRlbnRPdXRsaW5lQ29sb3JfdmFsdWVGb3VuZCA9
IGZhbHNlOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaW5fY29udGVudE91dGxpbmVDb2xv
ciA9IGdldE9iamVjdChwYXJhbXNDb250YWluZXJQdHIsICJjb250ZW50T3V0bGluZUNvbG9yIiwg
JmNvbnRlbnRPdXRsaW5lQ29sb3JfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0
aCgpKSB7CiAgICAgICAgbV9kb21BZ2VudC0+aGlnaGxpZ2h0RnJhbWUoJmVycm9yLCBpbl9mcmFt
ZUlkLCBjb250ZW50Q29sb3JfdmFsdWVGb3VuZCA/ICZpbl9jb250ZW50Q29sb3IgOiAwLCBjb250
ZW50T3V0bGluZUNvbG9yX3ZhbHVlRm91bmQgPyAmaW5fY29udGVudE91dGxpbmVDb2xvciA6IDAp
OwoKCiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBjb21t
YW5kTmFtZXNba0RPTV9oaWdobGlnaHRGcmFtZUNtZF0sIHByb3RvY29sRXJyb3JzLnJlbGVhc2Uo
KSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RE9NX3B1
c2hOb2RlQnlQYXRoVG9Gcm9udGVuZChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1
ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVy
cm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZG9tQWdlbnQpCiAg
ICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRPTSBoYW5kbGVyIGlzIG5vdCBhdmFp
bGFibGUuIik7CgogICAgaW50IG91dF9ub2RlSWQ7CgoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBh
cmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXND
b250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBw
cm90b2NvbEVycm9ycy5nZXQoKTsKICAgIFN0cmluZyBpbl9wYXRoID0gZ2V0U3RyaW5nKHBhcmFt
c0NvbnRhaW5lclB0ciwgInBhdGgiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAg
IEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsK
ICAgICAgICBtX2RvbUFnZW50LT5wdXNoTm9kZUJ5UGF0aFRvRnJvbnRlbmQoJmVycm9yLCBpbl9w
YXRoLCAmb3V0X25vZGVJZCk7CgogICAgICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsKICAgICAg
ICAgICAgcmVzdWx0LT5zZXROdW1iZXIoIm5vZGVJZCIsIG91dF9ub2RlSWQpOwogICAgICAgIH0K
ICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGNvbW1hbmRO
YW1lc1trRE9NX3B1c2hOb2RlQnlQYXRoVG9Gcm9udGVuZENtZF0sIHByb3RvY29sRXJyb3JzLnJl
bGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6
RE9NX3B1c2hOb2RlQnlCYWNrZW5kSWRUb0Zyb250ZW5kKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JP
YmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9k
b21BZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRE9NIGhhbmRsZXIg
aXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBpbnQgb3V0X25vZGVJZDsKCgogICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdl
dE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0
ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVy
cm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgaW50IGluX2JhY2tlbmROb2RlSWQg
PSBnZXRJbnQocGFyYW1zQ29udGFpbmVyUHRyLCAiYmFja2VuZE5vZGVJZCIsIDAsIHByb3RvY29s
RXJyb3JzUHRyKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3Rv
Y29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fZG9tQWdlbnQtPnB1c2hOb2RlQnlCYWNr
ZW5kSWRUb0Zyb250ZW5kKCZlcnJvciwgaW5fYmFja2VuZE5vZGVJZCwgJm91dF9ub2RlSWQpOwoK
ICAgICAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgICAgIHJlc3VsdC0+c2V0TnVt
YmVyKCJub2RlSWQiLCBvdXRfbm9kZUlkKTsKICAgICAgICB9CiAgICB9CiAgICBzZW5kUmVzcG9u
c2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBjb21tYW5kTmFtZXNba0RPTV9wdXNoTm9kZUJ5
QmFja2VuZElkVG9Gcm9udGVuZENtZF0sIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3Ip
Owp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RE9NX3JlbGVhc2VCYWNr
ZW5kTm9kZUlkcyhsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9i
amVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3Bl
Y3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZG9tQWdlbnQpCiAgICAgICAgcHJvdG9j
b2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRPTSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgoK
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNz
YWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJh
bXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJh
eSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIFN0cmluZyBp
bl9ub2RlR3JvdXAgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAibm9kZUdyb3VwIiwg
MCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3Vs
dCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAg
IGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9kb21BZ2VudC0+cmVs
ZWFzZUJhY2tlbmROb2RlSWRzKCZlcnJvciwgaW5fbm9kZUdyb3VwKTsKCgogICAgfQogICAgc2Vu
ZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgY29tbWFuZE5hbWVzW2tET01fcmVs
ZWFzZUJhY2tlbmROb2RlSWRzQ21kXSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7
Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpET01fcmVzb2x2ZU5vZGUo
bG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAg
IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6
Y3JlYXRlKCk7CgogICAgaWYgKCFtX2RvbUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5w
dXNoU3RyaW5nKCJET00gaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIFJlZlB0cjxU
eXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiBvdXRfb2JqZWN0OwoKCiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVj
dC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFp
bmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3Rv
Y29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBpbnQgaW5fbm9kZUlkID0g
Z2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgIm5vZGVJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRy
KTsKICAgIGJvb2wgb2JqZWN0R3JvdXBfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgU3RyaW5nIGlu
X29iamVjdEdyb3VwID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgIm9iamVjdEdyb3Vw
IiwgJm9iamVjdEdyb3VwX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkg
ewogICAgICAgIG1fZG9tQWdlbnQtPnJlc29sdmVOb2RlKCZlcnJvciwgaW5fbm9kZUlkLCBvYmpl
Y3RHcm91cF92YWx1ZUZvdW5kID8gJmluX29iamVjdEdyb3VwIDogMCwgb3V0X29iamVjdCk7Cgog
ICAgICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICAgICAgcmVzdWx0LT5zZXRWYWx1
ZSgib2JqZWN0Iiwgb3V0X29iamVjdCk7CiAgICAgICAgfQogICAgfQogICAgc2VuZFJlc3BvbnNl
KGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgY29tbWFuZE5hbWVzW2tET01fcmVzb2x2ZU5vZGVD
bWRdLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTV9nZXRBdHRyaWJ1dGVzKGxvbmcgY2FsbElkLCBJbnNw
ZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlm
ICghbV9kb21BZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRE9NIGhh
bmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5
PFN0cmluZz4gPiBvdXRfYXR0cmlidXRlczsKCgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1z
Iik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRh
aW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3Rv
Y29sRXJyb3JzLmdldCgpOwogICAgaW50IGluX25vZGVJZCA9IGdldEludChwYXJhbXNDb250YWlu
ZXJQdHIsICJub2RlSWQiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9y
U3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAg
ICBtX2RvbUFnZW50LT5nZXRBdHRyaWJ1dGVzKCZlcnJvciwgaW5fbm9kZUlkLCBvdXRfYXR0cmli
dXRlcyk7CgogICAgICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICAgICAgcmVzdWx0
LT5zZXRWYWx1ZSgiYXR0cmlidXRlcyIsIG91dF9hdHRyaWJ1dGVzKTsKICAgICAgICB9CiAgICB9
CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBjb21tYW5kTmFtZXNb
a0RPTV9nZXRBdHRyaWJ1dGVzQ21kXSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7
Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpET01fbW92ZVRvKGxvbmcg
Y2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0
ZSgpOwoKICAgIGlmICghbV9kb21BZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0
cmluZygiRE9NIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBpbnQgb3V0X25vZGVJ
ZDsKCgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVz
dE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3Qq
IHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3Rv
ckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgaW50
IGluX25vZGVJZCA9IGdldEludChwYXJhbXNDb250YWluZXJQdHIsICJub2RlSWQiLCAwLCBwcm90
b2NvbEVycm9yc1B0cik7CiAgICBpbnQgaW5fdGFyZ2V0Tm9kZUlkID0gZ2V0SW50KHBhcmFtc0Nv
bnRhaW5lclB0ciwgInRhcmdldE5vZGVJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJv
b2wgaW5zZXJ0QmVmb3JlTm9kZUlkX3ZhbHVlRm91bmQgPSBmYWxzZTsKICAgIGludCBpbl9pbnNl
cnRCZWZvcmVOb2RlSWQgPSBnZXRJbnQocGFyYW1zQ29udGFpbmVyUHRyLCAiaW5zZXJ0QmVmb3Jl
Tm9kZUlkIiwgJmluc2VydEJlZm9yZU5vZGVJZF92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0
cik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9y
cy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2RvbUFnZW50LT5tb3ZlVG8oJmVycm9yLCBpbl9ub2Rl
SWQsIGluX3RhcmdldE5vZGVJZCwgaW5zZXJ0QmVmb3JlTm9kZUlkX3ZhbHVlRm91bmQgPyAmaW5f
aW5zZXJ0QmVmb3JlTm9kZUlkIDogMCwgJm91dF9ub2RlSWQpOwoKICAgICAgICBpZiAoIWVycm9y
Lmxlbmd0aCgpKSB7CiAgICAgICAgICAgIHJlc3VsdC0+c2V0TnVtYmVyKCJub2RlSWQiLCBvdXRf
bm9kZUlkKTsKICAgICAgICB9CiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQu
cmVsZWFzZSgpLCBjb21tYW5kTmFtZXNba0RPTV9tb3ZlVG9DbWRdLCBwcm90b2NvbEVycm9ycy5y
ZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6
OkRPTV91bmRvKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoK
ICAgIGlmICghbV9kb21BZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygi
RE9NIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCgogICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5n
IGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2Rv
bUFnZW50LT51bmRvKCZlcnJvcik7CgoKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJl
c3VsdC5yZWxlYXNlKCksIGNvbW1hbmROYW1lc1trRE9NX3VuZG9DbWRdLCBwcm90b2NvbEVycm9y
cy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcklt
cGw6OkRPTV9yZWRvKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgp
OwoKICAgIGlmICghbV9kb21BZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmlu
ZygiRE9NIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCgogICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3Ry
aW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBt
X2RvbUFnZW50LT5yZWRvKCZlcnJvcik7CgoKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQs
IHJlc3VsdC5yZWxlYXNlKCksIGNvbW1hbmROYW1lc1trRE9NX3JlZG9DbWRdLCBwcm90b2NvbEVy
cm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ckltcGw6OkRPTV9tYXJrVW5kb2FibGVTdGF0ZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0
KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3Rv
ckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZG9tQWdlbnQpCiAgICAgICAgcHJvdG9jb2xF
cnJvcnMtPnB1c2hTdHJpbmcoIkRPTSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgoKICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0
aCgpKSB7CiAgICAgICAgbV9kb21BZ2VudC0+bWFya1VuZG9hYmxlU3RhdGUoJmVycm9yKTsKCgog
ICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgY29tbWFuZE5h
bWVzW2tET01fbWFya1VuZG9hYmxlU3RhdGVDbWRdLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCks
IGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTV9mb2N1
cyhsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewog
ICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5
OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZG9tQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMt
PnB1c2hTdHJpbmcoIkRPTSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgoKICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0
LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWlu
ZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9j
b2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIGludCBpbl9ub2RlSWQgPSBn
ZXRJbnQocGFyYW1zQ29udGFpbmVyUHRyLCAibm9kZUlkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIp
OwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMt
Pmxlbmd0aCgpKSB7CiAgICAgICAgbV9kb21BZ2VudC0+Zm9jdXMoJmVycm9yLCBpbl9ub2RlSWQp
OwoKCiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBjb21t
YW5kTmFtZXNba0RPTV9mb2N1c0NtZF0sIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3Ip
Owp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RE9NX3NldEZpbGVJbnB1
dEZpbGVzKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0
KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9y
QXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kb21BZ2VudCkKICAgICAgICBwcm90b2NvbEVy
cm9ycy0+cHVzaFN0cmluZygiRE9NIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCgogICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VP
YmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0Nv
bnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBw
cm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgaW50IGluX25vZGVJ
ZCA9IGdldEludChwYXJhbXNDb250YWluZXJQdHIsICJub2RlSWQiLCAwLCBwcm90b2NvbEVycm9y
c1B0cik7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGluX2ZpbGVzID0gZ2V0QXJyYXkocGFy
YW1zQ29udGFpbmVyUHRyLCAiZmlsZXMiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
ICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkp
IHsKICAgICAgICBtX2RvbUFnZW50LT5zZXRGaWxlSW5wdXRGaWxlcygmZXJyb3IsIGluX25vZGVJ
ZCwgaW5fZmlsZXMpOwoKCiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVs
ZWFzZSgpLCBjb21tYW5kTmFtZXNba0RPTV9zZXRGaWxlSW5wdXRGaWxlc0NtZF0sIHByb3RvY29s
RXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9CgojaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdH
RVIpCgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RE9NRGVidWdnZXJfc2V0
RE9NQnJlYWtwb2ludChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2Fn
ZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IElu
c3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZG9tRGVidWdnZXJBZ2VudCkKICAg
ICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRE9NRGVidWdnZXIgaGFuZGxlciBpcyBu
b3QgYXZhaWxhYmxlLiIpOwoKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250
YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIElu
c3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgp
OwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMu
Z2V0KCk7CiAgICBpbnQgaW5fbm9kZUlkID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgIm5v
ZGVJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIFN0cmluZyBpbl90eXBlID0gZ2V0U3Ry
aW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgInR5cGUiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7Cgog
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVu
Z3RoKCkpIHsKICAgICAgICBtX2RvbURlYnVnZ2VyQWdlbnQtPnNldERPTUJyZWFrcG9pbnQoJmVy
cm9yLCBpbl9ub2RlSWQsIGluX3R5cGUpOwoKCiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElk
LCByZXN1bHQucmVsZWFzZSgpLCBjb21tYW5kTmFtZXNba0RPTURlYnVnZ2VyX3NldERPTUJyZWFr
cG9pbnRDbWRdLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTURlYnVnZ2VyX3JlbW92ZURPTUJyZWFrcG9p
bnQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsK
ICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJh
eTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2RvbURlYnVnZ2VyQWdlbnQpCiAgICAgICAgcHJvdG9j
b2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRPTURlYnVnZ2VyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJs
ZS4iKTsKCgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVx
dWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmpl
Y3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3Bl
Y3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAg
aW50IGluX25vZGVJZCA9IGdldEludChwYXJhbXNDb250YWluZXJQdHIsICJub2RlSWQiLCAwLCBw
cm90b2NvbEVycm9yc1B0cik7CiAgICBTdHJpbmcgaW5fdHlwZSA9IGdldFN0cmluZyhwYXJhbXND
b250YWluZXJQdHIsICJ0eXBlIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBF
cnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAg
ICAgICAgbV9kb21EZWJ1Z2dlckFnZW50LT5yZW1vdmVET01CcmVha3BvaW50KCZlcnJvciwgaW5f
bm9kZUlkLCBpbl90eXBlKTsKCgogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0
LnJlbGVhc2UoKSwgY29tbWFuZE5hbWVzW2tET01EZWJ1Z2dlcl9yZW1vdmVET01CcmVha3BvaW50
Q21kXSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXJJbXBsOjpET01EZWJ1Z2dlcl9zZXRFdmVudExpc3RlbmVyQnJlYWtw
b2ludChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkK
ewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFy
cmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZG9tRGVidWdnZXJBZ2VudCkKICAgICAgICBwcm90
b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRE9NRGVidWdnZXIgaGFuZGxlciBpcyBub3QgYXZhaWxh
YmxlLiIpOwoKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSBy
ZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9i
amVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5z
cGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAg
ICBTdHJpbmcgaW5fZXZlbnROYW1lID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgImV2
ZW50TmFtZSIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcg
ZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fZG9t
RGVidWdnZXJBZ2VudC0+c2V0RXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQoJmVycm9yLCBpbl9ldmVu
dE5hbWUpOwoKCiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgp
LCBjb21tYW5kTmFtZXNba0RPTURlYnVnZ2VyX3NldEV2ZW50TGlzdGVuZXJCcmVha3BvaW50Q21k
XSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXJJbXBsOjpET01EZWJ1Z2dlcl9yZW1vdmVFdmVudExpc3RlbmVyQnJlYWtw
b2ludChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkK
ewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFy
cmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZG9tRGVidWdnZXJBZ2VudCkKICAgICAgICBwcm90
b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRE9NRGVidWdnZXIgaGFuZGxlciBpcyBub3QgYXZhaWxh
YmxlLiIpOwoKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSBy
ZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9i
amVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5z
cGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAg
ICBTdHJpbmcgaW5fZXZlbnROYW1lID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgImV2
ZW50TmFtZSIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcg
ZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fZG9t
RGVidWdnZXJBZ2VudC0+cmVtb3ZlRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQoJmVycm9yLCBpbl9l
dmVudE5hbWUpOwoKCiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFz
ZSgpLCBjb21tYW5kTmFtZXNba0RPTURlYnVnZ2VyX3JlbW92ZUV2ZW50TGlzdGVuZXJCcmVha3Bv
aW50Q21kXSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpET01EZWJ1Z2dlcl9zZXRJbnN0cnVtZW50YXRpb25C
cmVha3BvaW50KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2Jq
ZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVj
dG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kb21EZWJ1Z2dlckFnZW50KQogICAgICAg
IHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJET01EZWJ1Z2dlciBoYW5kbGVyIGlzIG5vdCBh
dmFpbGFibGUuIik7CgoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5l
ciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVj
dG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAg
ICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQo
KTsKICAgIFN0cmluZyBpbl9ldmVudE5hbWUgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRy
LCAiZXZlbnROYW1lIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0
cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAg
bV9kb21EZWJ1Z2dlckFnZW50LT5zZXRJbnN0cnVtZW50YXRpb25CcmVha3BvaW50KCZlcnJvciwg
aW5fZXZlbnROYW1lKTsKCgogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJl
bGVhc2UoKSwgY29tbWFuZE5hbWVzW2tET01EZWJ1Z2dlcl9zZXRJbnN0cnVtZW50YXRpb25CcmVh
a3BvaW50Q21kXSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpET01EZWJ1Z2dlcl9yZW1vdmVJbnN0cnVtZW50
YXRpb25CcmVha3BvaW50KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNz
YWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0g
SW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kb21EZWJ1Z2dlckFnZW50KQog
ICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJET01EZWJ1Z2dlciBoYW5kbGVyIGlz
IG5vdCBhdmFpbGFibGUuIik7CgoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0Nv
bnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAg
SW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0
KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9y
cy5nZXQoKTsKICAgIFN0cmluZyBpbl9ldmVudE5hbWUgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFp
bmVyUHRyLCAiZXZlbnROYW1lIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBF
cnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAg
ICAgICAgbV9kb21EZWJ1Z2dlckFnZW50LT5yZW1vdmVJbnN0cnVtZW50YXRpb25CcmVha3BvaW50
KCZlcnJvciwgaW5fZXZlbnROYW1lKTsKCgogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwg
cmVzdWx0LnJlbGVhc2UoKSwgY29tbWFuZE5hbWVzW2tET01EZWJ1Z2dlcl9yZW1vdmVJbnN0cnVt
ZW50YXRpb25CcmVha3BvaW50Q21kXSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7
Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpET01EZWJ1Z2dlcl9zZXRY
SFJCcmVha3BvaW50KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdl
T2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5z
cGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kb21EZWJ1Z2dlckFnZW50KQogICAg
ICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJET01EZWJ1Z2dlciBoYW5kbGVyIGlzIG5v
dCBhdmFpbGFibGUuIik7CgoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRh
aW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5z
cGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7
CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5n
ZXQoKTsKICAgIFN0cmluZyBpbl91cmwgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAi
dXJsIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJv
cjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9kb21EZWJ1
Z2dlckFnZW50LT5zZXRYSFJCcmVha3BvaW50KCZlcnJvciwgaW5fdXJsKTsKCgogICAgfQogICAg
c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgY29tbWFuZE5hbWVzW2tET01E
ZWJ1Z2dlcl9zZXRYSFJCcmVha3BvaW50Q21kXSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBl
cnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpET01EZWJ1Z2dl
cl9yZW1vdmVYSFJCcmVha3BvaW50KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVl
c3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJy
b3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kb21EZWJ1Z2dlckFn
ZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJET01EZWJ1Z2dlciBoYW5k
bGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBh
cmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIp
OwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWlu
ZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2Nv
bEVycm9ycy5nZXQoKTsKICAgIFN0cmluZyBpbl91cmwgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFp
bmVyUHRyLCAidXJsIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0
cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAg
bV9kb21EZWJ1Z2dlckFnZW50LT5yZW1vdmVYSFJCcmVha3BvaW50KCZlcnJvciwgaW5fdXJsKTsK
CgogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgY29tbWFu
ZE5hbWVzW2tET01EZWJ1Z2dlcl9yZW1vdmVYSFJCcmVha3BvaW50Q21kXSwgcHJvdG9jb2xFcnJv
cnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJV
R0dFUikKCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpET01TdG9yYWdlX2Vu
YWJsZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KikKewogICAgUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBp
ZiAoIW1fZG9tU3RvcmFnZUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5n
KCJET01TdG9yYWdlIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCgogICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVy
cm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAg
ICAgICBtX2RvbVN0b3JhZ2VBZ2VudC0+ZW5hYmxlKCZlcnJvcik7CgoKICAgIH0KICAgIHNlbmRS
ZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGNvbW1hbmROYW1lc1trRE9NU3RvcmFn
ZV9lbmFibGVDbWRdLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTVN0b3JhZ2VfZGlzYWJsZShsb25nIGNh
bGxJZCwgSW5zcGVjdG9yT2JqZWN0KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90
b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZG9tU3Rv
cmFnZUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJET01TdG9yYWdl
IGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVy
cm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2RvbVN0
b3JhZ2VBZ2VudC0+ZGlzYWJsZSgmZXJyb3IpOwoKCiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2Fs
bElkLCByZXN1bHQucmVsZWFzZSgpLCBjb21tYW5kTmFtZXNba0RPTVN0b3JhZ2VfZGlzYWJsZUNt
ZF0sIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVySW1wbDo6RE9NU3RvcmFnZV9nZXRET01TdG9yYWdlSXRlbXMobG9uZyBj
YWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0
cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRl
KCk7CgogICAgaWYgKCFtX2RvbVN0b3JhZ2VBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+
cHVzaFN0cmluZygiRE9NU3RvcmFnZSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAg
UmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPiA+ID4g
b3V0X2VudHJpZXM7CgoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5l
ciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVj
dG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAg
ICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQo
KTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGluX3N0b3JhZ2VJZCA9IGdldE9iamVjdChw
YXJhbXNDb250YWluZXJQdHIsICJzdG9yYWdlSWQiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7Cgog
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVu
Z3RoKCkpIHsKICAgICAgICBtX2RvbVN0b3JhZ2VBZ2VudC0+Z2V0RE9NU3RvcmFnZUl0ZW1zKCZl
cnJvciwgaW5fc3RvcmFnZUlkLCBvdXRfZW50cmllcyk7CgogICAgICAgIGlmICghZXJyb3IubGVu
Z3RoKCkpIHsKICAgICAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZSgiZW50cmllcyIsIG91dF9lbnRy
aWVzKTsKICAgICAgICB9CiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVs
ZWFzZSgpLCBjb21tYW5kTmFtZXNba0RPTVN0b3JhZ2VfZ2V0RE9NU3RvcmFnZUl0ZW1zQ21kXSwg
cHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXJJbXBsOjpET01TdG9yYWdlX3NldERPTVN0b3JhZ2VJdGVtKGxvbmcgY2FsbElk
LCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoK
ICAgIGlmICghbV9kb21TdG9yYWdlQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hT
dHJpbmcoIkRPTVN0b3JhZ2UgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKCiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVj
dC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFp
bmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3Rv
Y29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBpbl9zdG9yYWdlSWQgPSBnZXRPYmplY3QocGFyYW1zQ29udGFpbmVyUHRyLCAic3Rv
cmFnZUlkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgU3RyaW5nIGluX2tleSA9IGdldFN0
cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJrZXkiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CiAg
ICBTdHJpbmcgaW5fdmFsdWUgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAidmFsdWUi
LCAwLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVz
dWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwog
ICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2RvbVN0b3JhZ2VB
Z2VudC0+c2V0RE9NU3RvcmFnZUl0ZW0oJmVycm9yLCBpbl9zdG9yYWdlSWQsIGluX2tleSwgaW5f
dmFsdWUpOwoKCiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgp
LCBjb21tYW5kTmFtZXNba0RPTVN0b3JhZ2Vfc2V0RE9NU3RvcmFnZUl0ZW1DbWRdLCBwcm90b2Nv
bEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlckltcGw6OkRPTVN0b3JhZ2VfcmVtb3ZlRE9NU3RvcmFnZUl0ZW0obG9uZyBjYWxsSWQsIElu
c3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0
b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAg
aWYgKCFtX2RvbVN0b3JhZ2VBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmlu
ZygiRE9NU3RvcmFnZSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgoKICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5n
ZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQ
dHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xF
cnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IGluX3N0b3JhZ2VJZCA9IGdldE9iamVjdChwYXJhbXNDb250YWluZXJQdHIsICJzdG9yYWdl
SWQiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBTdHJpbmcgaW5fa2V5ID0gZ2V0U3RyaW5n
KHBhcmFtc0NvbnRhaW5lclB0ciwgImtleSIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgo
KSkgewogICAgICAgIG1fZG9tU3RvcmFnZUFnZW50LT5yZW1vdmVET01TdG9yYWdlSXRlbSgmZXJy
b3IsIGluX3N0b3JhZ2VJZCwgaW5fa2V5KTsKCgogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJ
ZCwgcmVzdWx0LnJlbGVhc2UoKSwgY29tbWFuZE5hbWVzW2tET01TdG9yYWdlX3JlbW92ZURPTVN0
b3JhZ2VJdGVtQ21kXSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCiNpZiBF
TkFCTEUoU1FMX0RBVEFCQVNFKQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6
OkRhdGFiYXNlX2VuYWJsZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KikKewogICAgUmVm
UHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVh
dGUoKTsKCiAgICBpZiAoIW1fZGF0YWJhc2VBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+
cHVzaFN0cmluZygiRGF0YWJhc2UgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKCiAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgo
KSkgewogICAgICAgIG1fZGF0YWJhc2VBZ2VudC0+ZW5hYmxlKCZlcnJvcik7CgoKICAgIH0KICAg
IHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGNvbW1hbmROYW1lc1trRGF0
YWJhc2VfZW5hYmxlQ21kXSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZv
aWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpEYXRhYmFzZV9kaXNhYmxlKGxvbmcg
Y2FsbElkLCBJbnNwZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHBy
b3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kYXRh
YmFzZUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJEYXRhYmFzZSBo
YW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJv
cjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9kYXRhYmFz
ZUFnZW50LT5kaXNhYmxlKCZlcnJvcik7CgoKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQs
IHJlc3VsdC5yZWxlYXNlKCksIGNvbW1hbmROYW1lc1trRGF0YWJhc2VfZGlzYWJsZUNtZF0sIHBy
b3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVySW1wbDo6RGF0YWJhc2VfZ2V0RGF0YWJhc2VUYWJsZU5hbWVzKGxvbmcgY2FsbElk
LCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoK
ICAgIGlmICghbV9kYXRhYmFzZUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3Ry
aW5nKCJEYXRhYmFzZSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgUmVmUHRyPFR5
cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+ID4gb3V0X3RhYmxlTmFtZXM7CgoKICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5n
ZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQ
dHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xF
cnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIFN0cmluZyBpbl9kYXRhYmFzZUlk
ID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgImRhdGFiYXNlSWQiLCAwLCBwcm90b2Nv
bEVycm9yc1B0cik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90
b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2RhdGFiYXNlQWdlbnQtPmdldERhdGFi
YXNlVGFibGVOYW1lcygmZXJyb3IsIGluX2RhdGFiYXNlSWQsIG91dF90YWJsZU5hbWVzKTsKCiAg
ICAgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkgewogICAgICAgICAgICByZXN1bHQtPnNldFZhbHVl
KCJ0YWJsZU5hbWVzIiwgb3V0X3RhYmxlTmFtZXMpOwogICAgICAgIH0KICAgIH0KICAgIHNlbmRS
ZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGNvbW1hbmROYW1lc1trRGF0YWJhc2Vf
Z2V0RGF0YWJhc2VUYWJsZU5hbWVzQ21kXSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJv
cik7Cn0KCkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpEYXRhYmFzZUNvbW1hbmRIYW5kbGVy
OjpFeGVjdXRlU1FMQ2FsbGJhY2s6OkV4ZWN1dGVTUUxDYWxsYmFjayhQYXNzUmVmUHRyPEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVySW1wbD4gYmFja2VuZEltcGwsIGludCBpZCkgOiBDYWxsYmFj
a0Jhc2UoYmFja2VuZEltcGwsIGlkKSB7fQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cjo6RGF0YWJhc2VDb21tYW5kSGFuZGxlcjo6RXhlY3V0ZVNRTENhbGxiYWNrOjpzZW5kU3VjY2Vz
cyhQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+ID4gY29sdW1uTmFtZXMsIFBh
c3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3RvclZhbHVlPiA+IHZhbHVlcywgUGFz
c1JlZlB0cjxUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OkVycm9yPiBzcWxFcnJvcikKewogICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOwogICAgaWYgKGNvbHVtbk5hbWVzKQogICAgICAgIGpzb25NZXNzYWdlLT5zZXRWYWx1ZSgi
Y29sdW1uTmFtZXMiLCBjb2x1bW5OYW1lcyk7CiAgICBpZiAodmFsdWVzKQogICAgICAgIGpzb25N
ZXNzYWdlLT5zZXRWYWx1ZSgidmFsdWVzIiwgdmFsdWVzKTsKICAgIGlmIChzcWxFcnJvcikKICAg
ICAgICBqc29uTWVzc2FnZS0+c2V0VmFsdWUoInNxbEVycm9yIiwgc3FsRXJyb3IpOwogICAgc2Vu
ZElmQWN0aXZlKGpzb25NZXNzYWdlLCBFcnJvclN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlckltcGw6OkRhdGFiYXNlX2V4ZWN1dGVTUUwobG9uZyBjYWxsSWQsIElu
c3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0
b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAg
aWYgKCFtX2RhdGFiYXNlQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmco
IkRhdGFiYXNlIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKICAgIFJlZlB0cjxEYXRhYmFz
ZUNvbW1hbmRIYW5kbGVyOjpFeGVjdXRlU1FMQ2FsbGJhY2s+IGNhbGxiYWNrID0gYWRvcHRSZWYo
bmV3IERhdGFiYXNlQ29tbWFuZEhhbmRsZXI6OkV4ZWN1dGVTUUxDYWxsYmFjayh0aGlzLCBjYWxs
SWQpKTsKCgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVx
dWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmpl
Y3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3Bl
Y3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAg
U3RyaW5nIGluX2RhdGFiYXNlSWQgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAiZGF0
YWJhc2VJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIFN0cmluZyBpbl9xdWVyeSA9IGdl
dFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJxdWVyeSIsIDAsIHByb3RvY29sRXJyb3JzUHRy
KTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3Jz
LT5sZW5ndGgoKSkgewogICAgICAgIG1fZGF0YWJhc2VBZ2VudC0+ZXhlY3V0ZVNRTCgmZXJyb3Is
IGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5LCBjYWxsYmFjayk7CgogICAgICAgIGlmICghZXJyb3Iu
bGVuZ3RoKCkpIAogICAgICAgICAgICByZXR1cm47CiAgICAgICAgY2FsbGJhY2stPmRpc2FibGUo
KTsKCiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBjb21t
YW5kTmFtZXNba0RhdGFiYXNlX2V4ZWN1dGVTUUxDbWRdLCBwcm90b2NvbEVycm9ycy5yZWxlYXNl
KCksIGVycm9yKTsKfQoKI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCgojaWYgRU5BQkxF
KEpBVkFTQ1JJUFRfREVCVUdHRVIpCgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1w
bDo6RGVidWdnZXJfY2F1c2VzUmVjb21waWxhdGlvbihsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2Jq
ZWN0KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3Bl
Y3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZGVidWdnZXJBZ2VudCkKICAgICAgICBw
cm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRGVidWdnZXIgaGFuZGxlciBpcyBub3QgYXZhaWxh
YmxlLiIpOwoKICAgIGJvb2wgb3V0X3Jlc3VsdDsKCgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVy
cm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2RlYnVn
Z2VyQWdlbnQtPmNhdXNlc1JlY29tcGlsYXRpb24oJmVycm9yLCAmb3V0X3Jlc3VsdCk7CgogICAg
ICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICAgICAgcmVzdWx0LT5zZXRCb29sZWFu
KCJyZXN1bHQiLCBvdXRfcmVzdWx0KTsKICAgICAgICB9CiAgICB9CiAgICBzZW5kUmVzcG9uc2Uo
Y2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBjb21tYW5kTmFtZXNba0RlYnVnZ2VyX2NhdXNlc1Jl
Y29tcGlsYXRpb25DbWRdLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9p
ZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRlYnVnZ2VyX3N1cHBvcnRzU2VwYXJh
dGVTY3JpcHRDb21waWxhdGlvbkFuZEV4ZWN1dGlvbihsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2Jq
ZWN0KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3Bl
Y3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZGVidWdnZXJBZ2VudCkKICAgICAgICBw
cm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRGVidWdnZXIgaGFuZGxlciBpcyBub3QgYXZhaWxh
YmxlLiIpOwoKICAgIGJvb2wgb3V0X3Jlc3VsdDsKCgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVy
cm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2RlYnVn
Z2VyQWdlbnQtPnN1cHBvcnRzU2VwYXJhdGVTY3JpcHRDb21waWxhdGlvbkFuZEV4ZWN1dGlvbigm
ZXJyb3IsICZvdXRfcmVzdWx0KTsKCiAgICAgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkgewogICAg
ICAgICAgICByZXN1bHQtPnNldEJvb2xlYW4oInJlc3VsdCIsIG91dF9yZXN1bHQpOwogICAgICAg
IH0KICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGNvbW1h
bmROYW1lc1trRGVidWdnZXJfc3VwcG9ydHNTZXBhcmF0ZVNjcmlwdENvbXBpbGF0aW9uQW5kRXhl
Y3V0aW9uQ21kXSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpEZWJ1Z2dlcl9lbmFibGUobG9uZyBjYWxsSWQs
IEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xF
cnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2RlYnVnZ2VyQWdl
bnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRlYnVnZ2VyIGhhbmRsZXIg
aXMgbm90IGF2YWlsYWJsZS4iKTsKCgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAg
aWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2RlYnVnZ2VyQWdlbnQt
PmVuYWJsZSgmZXJyb3IpOwoKCiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQu
cmVsZWFzZSgpLCBjb21tYW5kTmFtZXNba0RlYnVnZ2VyX2VuYWJsZUNtZF0sIHByb3RvY29sRXJy
b3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
SW1wbDo6RGVidWdnZXJfZGlzYWJsZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KikKewog
ICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5
OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZGVidWdnZXJBZ2VudCkKICAgICAgICBwcm90b2NvbEVy
cm9ycy0+cHVzaFN0cmluZygiRGVidWdnZXIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoK
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5s
ZW5ndGgoKSkgewogICAgICAgIG1fZGVidWdnZXJBZ2VudC0+ZGlzYWJsZSgmZXJyb3IpOwoKCiAg
ICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBjb21tYW5kTmFt
ZXNba0RlYnVnZ2VyX2Rpc2FibGVDbWRdLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9y
KTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRlYnVnZ2VyX3NldEJy
ZWFrcG9pbnRzQWN0aXZlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNz
YWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0g
SW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kZWJ1Z2dlckFnZW50KQogICAg
ICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJEZWJ1Z2dlciBoYW5kbGVyIGlzIG5vdCBh
dmFpbGFibGUuIik7CgoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5l
ciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVj
dG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAg
ICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQo
KTsKICAgIGJvb2wgaW5fYWN0aXZlID0gZ2V0Qm9vbGVhbihwYXJhbXNDb250YWluZXJQdHIsICJh
Y3RpdmUiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVy
cm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2RlYnVn
Z2VyQWdlbnQtPnNldEJyZWFrcG9pbnRzQWN0aXZlKCZlcnJvciwgaW5fYWN0aXZlKTsKCgogICAg
fQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgY29tbWFuZE5hbWVz
W2tEZWJ1Z2dlcl9zZXRCcmVha3BvaW50c0FjdGl2ZUNtZF0sIHByb3RvY29sRXJyb3JzLnJlbGVh
c2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RGVi
dWdnZXJfc2V0QnJlYWtwb2ludEJ5VXJsKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJl
cXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29s
RXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kZWJ1Z2dlckFn
ZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJEZWJ1Z2dlciBoYW5kbGVy
IGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgVHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpCcmVha3Bv
aW50SWQgb3V0X2JyZWFrcG9pbnRJZDsKICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlw
ZUJ1aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj4gPiBvdXRfbG9jYXRpb25zOwoKCiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVj
dC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFp
bmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3Rv
Y29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBpbnQgaW5fbGluZU51bWJl
ciA9IGdldEludChwYXJhbXNDb250YWluZXJQdHIsICJsaW5lTnVtYmVyIiwgMCwgcHJvdG9jb2xF
cnJvcnNQdHIpOwogICAgYm9vbCB1cmxfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgU3RyaW5nIGlu
X3VybCA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJ1cmwiLCAmdXJsX3ZhbHVlRm91
bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgdXJsUmVnZXhfdmFsdWVGb3VuZCA9IGZh
bHNlOwogICAgU3RyaW5nIGluX3VybFJlZ2V4ID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0
ciwgInVybFJlZ2V4IiwgJnVybFJlZ2V4X3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsK
ICAgIGJvb2wgY29sdW1uTnVtYmVyX3ZhbHVlRm91bmQgPSBmYWxzZTsKICAgIGludCBpbl9jb2x1
bW5OdW1iZXIgPSBnZXRJbnQocGFyYW1zQ29udGFpbmVyUHRyLCAiY29sdW1uTnVtYmVyIiwgJmNv
bHVtbk51bWJlcl92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBib29sIG9wdGlv
bnNfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaW5fb3B0
aW9ucyA9IGdldE9iamVjdChwYXJhbXNDb250YWluZXJQdHIsICJvcHRpb25zIiwgJm9wdGlvbnNf
dmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBl
cnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9kZWJ1
Z2dlckFnZW50LT5zZXRCcmVha3BvaW50QnlVcmwoJmVycm9yLCBpbl9saW5lTnVtYmVyLCB1cmxf
dmFsdWVGb3VuZCA/ICZpbl91cmwgOiAwLCB1cmxSZWdleF92YWx1ZUZvdW5kID8gJmluX3VybFJl
Z2V4IDogMCwgY29sdW1uTnVtYmVyX3ZhbHVlRm91bmQgPyAmaW5fY29sdW1uTnVtYmVyIDogMCwg
b3B0aW9uc192YWx1ZUZvdW5kID8gJmluX29wdGlvbnMgOiAwLCAmb3V0X2JyZWFrcG9pbnRJZCwg
b3V0X2xvY2F0aW9ucyk7CgogICAgICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICAg
ICAgcmVzdWx0LT5zZXRTdHJpbmcoImJyZWFrcG9pbnRJZCIsIG91dF9icmVha3BvaW50SWQpOwog
ICAgICAgICAgICByZXN1bHQtPnNldFZhbHVlKCJsb2NhdGlvbnMiLCBvdXRfbG9jYXRpb25zKTsK
ICAgICAgICB9CiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgp
LCBjb21tYW5kTmFtZXNba0RlYnVnZ2VyX3NldEJyZWFrcG9pbnRCeVVybENtZF0sIHByb3RvY29s
RXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVySW1wbDo6RGVidWdnZXJfc2V0QnJlYWtwb2ludChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2Jq
ZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBw
cm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZGVi
dWdnZXJBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRGVidWdnZXIg
aGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6
QnJlYWtwb2ludElkIG91dF9icmVha3BvaW50SWQ7CiAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkRl
YnVnZ2VyOjpMb2NhdGlvbj4gb3V0X2FjdHVhbExvY2F0aW9uOwoKCiAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2Jq
ZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0g
cGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3Jz
UHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBp
bl9sb2NhdGlvbiA9IGdldE9iamVjdChwYXJhbXNDb250YWluZXJQdHIsICJsb2NhdGlvbiIsIDAs
IHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgb3B0aW9uc192YWx1ZUZvdW5kID0gZmFsc2U7
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBpbl9vcHRpb25zID0gZ2V0T2JqZWN0KHBhcmFt
c0NvbnRhaW5lclB0ciwgIm9wdGlvbnMiLCAmb3B0aW9uc192YWx1ZUZvdW5kLCBwcm90b2NvbEVy
cm9yc1B0cik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2Nv
bEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2RlYnVnZ2VyQWdlbnQtPnNldEJyZWFrcG9p
bnQoJmVycm9yLCBpbl9sb2NhdGlvbiwgb3B0aW9uc192YWx1ZUZvdW5kID8gJmluX29wdGlvbnMg
OiAwLCAmb3V0X2JyZWFrcG9pbnRJZCwgb3V0X2FjdHVhbExvY2F0aW9uKTsKCiAgICAgICAgaWYg
KCFlcnJvci5sZW5ndGgoKSkgewogICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZygiYnJlYWtw
b2ludElkIiwgb3V0X2JyZWFrcG9pbnRJZCk7CiAgICAgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUo
ImFjdHVhbExvY2F0aW9uIiwgb3V0X2FjdHVhbExvY2F0aW9uKTsKICAgICAgICB9CiAgICB9CiAg
ICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBjb21tYW5kTmFtZXNba0Rl
YnVnZ2VyX3NldEJyZWFrcG9pbnRDbWRdLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9y
KTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRlYnVnZ2VyX3JlbW92
ZUJyZWFrcG9pbnQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VP
YmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNw
ZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2RlYnVnZ2VyQWdlbnQpCiAgICAgICAg
cHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRlYnVnZ2VyIGhhbmRsZXIgaXMgbm90IGF2YWls
YWJsZS4iKTsKCgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0g
cmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JP
YmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIElu
c3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwog
ICAgU3RyaW5nIGluX2JyZWFrcG9pbnRJZCA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIs
ICJicmVha3BvaW50SWQiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9y
U3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAg
ICBtX2RlYnVnZ2VyQWdlbnQtPnJlbW92ZUJyZWFrcG9pbnQoJmVycm9yLCBpbl9icmVha3BvaW50
SWQpOwoKCiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBj
b21tYW5kTmFtZXNba0RlYnVnZ2VyX3JlbW92ZUJyZWFrcG9pbnRDbWRdLCBwcm90b2NvbEVycm9y
cy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcklt
cGw6OkRlYnVnZ2VyX2NvbnRpbnVlVG9Mb2NhdGlvbihsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2Jq
ZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBw
cm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZGVi
dWdnZXJBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRGVidWdnZXIg
aGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJh
bXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29u
dGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJv
dG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBpbl9sb2NhdGlv
biA9IGdldE9iamVjdChwYXJhbXNDb250YWluZXJQdHIsICJsb2NhdGlvbiIsIDAsIHByb3RvY29s
RXJyb3JzUHRyKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3Rv
Y29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fZGVidWdnZXJBZ2VudC0+Y29udGludWVU
b0xvY2F0aW9uKCZlcnJvciwgaW5fbG9jYXRpb24pOwoKCiAgICB9CiAgICBzZW5kUmVzcG9uc2Uo
Y2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBjb21tYW5kTmFtZXNba0RlYnVnZ2VyX2NvbnRpbnVl
VG9Mb2NhdGlvbkNtZF0sIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lk
IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RGVidWdnZXJfc3RlcE92ZXIobG9uZyBj
YWxsSWQsIEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJv
dG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2RlYnVn
Z2VyQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRlYnVnZ2VyIGhh
bmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9y
OwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2RlYnVnZ2Vy
QWdlbnQtPnN0ZXBPdmVyKCZlcnJvcik7CgoKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQs
IHJlc3VsdC5yZWxlYXNlKCksIGNvbW1hbmROYW1lc1trRGVidWdnZXJfc3RlcE92ZXJDbWRdLCBw
cm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlckltcGw6OkRlYnVnZ2VyX3N0ZXBJbnRvKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JP
YmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5z
cGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kZWJ1Z2dlckFnZW50KQogICAgICAg
IHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJEZWJ1Z2dlciBoYW5kbGVyIGlzIG5vdCBhdmFp
bGFibGUuIik7CgoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9j
b2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5zdGVwSW50bygm
ZXJyb3IpOwoKCiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgp
LCBjb21tYW5kTmFtZXNba0RlYnVnZ2VyX3N0ZXBJbnRvQ21kXSwgcHJvdG9jb2xFcnJvcnMucmVs
ZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpE
ZWJ1Z2dlcl9zdGVwT3V0KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0
ZSgpOwoKICAgIGlmICghbV9kZWJ1Z2dlckFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5w
dXNoU3RyaW5nKCJEZWJ1Z2dlciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgoKICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgp
KSB7CiAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5zdGVwT3V0KCZlcnJvcik7CgoKICAgIH0KICAg
IHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGNvbW1hbmROYW1lc1trRGVi
dWdnZXJfc3RlcE91dENtZF0sIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2
b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RGVidWdnZXJfcGF1c2UobG9uZyBj
YWxsSWQsIEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJv
dG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2RlYnVn
Z2VyQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRlYnVnZ2VyIGhh
bmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9y
OwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2RlYnVnZ2Vy
QWdlbnQtPnBhdXNlKCZlcnJvcik7CgoKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJl
c3VsdC5yZWxlYXNlKCksIGNvbW1hbmROYW1lc1trRGVidWdnZXJfcGF1c2VDbWRdLCBwcm90b2Nv
bEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlckltcGw6OkRlYnVnZ2VyX3Jlc3VtZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KikK
ewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFy
cmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZGVidWdnZXJBZ2VudCkKICAgICAgICBwcm90b2Nv
bEVycm9ycy0+cHVzaFN0cmluZygiRGVidWdnZXIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIp
OwoKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3Jz
LT5sZW5ndGgoKSkgewogICAgICAgIG1fZGVidWdnZXJBZ2VudC0+cmVzdW1lKCZlcnJvcik7CgoK
ICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGNvbW1hbmRO
YW1lc1trRGVidWdnZXJfcmVzdW1lQ21kXSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJv
cik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpEZWJ1Z2dlcl9zZWFy
Y2hJbkNvbnRlbnQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VP
YmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNw
ZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2RlYnVnZ2VyQWdlbnQpCiAgICAgICAg
cHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRlYnVnZ2VyIGhhbmRsZXIgaXMgbm90IGF2YWls
YWJsZS4iKTsKCiAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpQYWdl
OjpTZWFyY2hNYXRjaD4gPiBvdXRfcmVzdWx0OwoKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJh
bXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29u
dGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJv
dG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBTdHJpbmcgaW5fc2NyaXB0SWQgPSBnZXRTdHJpbmcocGFy
YW1zQ29udGFpbmVyUHRyLCAic2NyaXB0SWQiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBT
dHJpbmcgaW5fcXVlcnkgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAicXVlcnkiLCAw
LCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBib29sIGNhc2VTZW5zaXRpdmVfdmFsdWVGb3VuZCA9
IGZhbHNlOwogICAgYm9vbCBpbl9jYXNlU2Vuc2l0aXZlID0gZ2V0Qm9vbGVhbihwYXJhbXNDb250
YWluZXJQdHIsICJjYXNlU2Vuc2l0aXZlIiwgJmNhc2VTZW5zaXRpdmVfdmFsdWVGb3VuZCwgcHJv
dG9jb2xFcnJvcnNQdHIpOwogICAgYm9vbCBpc1JlZ2V4X3ZhbHVlRm91bmQgPSBmYWxzZTsKICAg
IGJvb2wgaW5faXNSZWdleCA9IGdldEJvb2xlYW4ocGFyYW1zQ29udGFpbmVyUHRyLCAiaXNSZWdl
eCIsICZpc1JlZ2V4X3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
RXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewog
ICAgICAgIG1fZGVidWdnZXJBZ2VudC0+c2VhcmNoSW5Db250ZW50KCZlcnJvciwgaW5fc2NyaXB0
SWQsIGluX3F1ZXJ5LCBjYXNlU2Vuc2l0aXZlX3ZhbHVlRm91bmQgPyAmaW5fY2FzZVNlbnNpdGl2
ZSA6IDAsIGlzUmVnZXhfdmFsdWVGb3VuZCA/ICZpbl9pc1JlZ2V4IDogMCwgb3V0X3Jlc3VsdCk7
CgogICAgICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICAgICAgcmVzdWx0LT5zZXRW
YWx1ZSgicmVzdWx0Iiwgb3V0X3Jlc3VsdCk7CiAgICAgICAgfQogICAgfQogICAgc2VuZFJlc3Bv
bnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgY29tbWFuZE5hbWVzW2tEZWJ1Z2dlcl9zZWFy
Y2hJbkNvbnRlbnRDbWRdLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9p
ZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRlYnVnZ2VyX2NhblNldFNjcmlwdFNv
dXJjZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KikKewogICAgUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBp
ZiAoIW1fZGVidWdnZXJBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygi
RGVidWdnZXIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIGJvb2wgb3V0X3Jlc3Vs
dDsKCgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9y
cy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2RlYnVnZ2VyQWdlbnQtPmNhblNldFNjcmlwdFNvdXJj
ZSgmZXJyb3IsICZvdXRfcmVzdWx0KTsKCiAgICAgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkgewog
ICAgICAgICAgICByZXN1bHQtPnNldEJvb2xlYW4oInJlc3VsdCIsIG91dF9yZXN1bHQpOwogICAg
ICAgIH0KICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGNv
bW1hbmROYW1lc1trRGVidWdnZXJfY2FuU2V0U2NyaXB0U291cmNlQ21kXSwgcHJvdG9jb2xFcnJv
cnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJ
bXBsOjpEZWJ1Z2dlcl9zZXRTY3JpcHRTb3VyY2UobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVj
dCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJv
dG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2RlYnVn
Z2VyQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRlYnVnZ2VyIGhh
bmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5
PFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6Q2FsbEZyYW1lPiA+IG91dF9jYWxsRnJhbWVzOwogICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb3V0X3Jlc3VsdDsKCgogICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVj
dCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBh
cmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0
ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgU3RyaW5nIGluX3NjcmlwdElkID0gZ2V0U3Ry
aW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgInNjcmlwdElkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIp
OwogICAgU3RyaW5nIGluX3NjcmlwdFNvdXJjZSA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQ
dHIsICJzY3JpcHRTb3VyY2UiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBib29sIHByZXZp
ZXdfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgYm9vbCBpbl9wcmV2aWV3ID0gZ2V0Qm9vbGVhbihw
YXJhbXNDb250YWluZXJQdHIsICJwcmV2aWV3IiwgJnByZXZpZXdfdmFsdWVGb3VuZCwgcHJvdG9j
b2xFcnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJv
dG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5zZXRTY3Jp
cHRTb3VyY2UoJmVycm9yLCBpbl9zY3JpcHRJZCwgaW5fc2NyaXB0U291cmNlLCBwcmV2aWV3X3Zh
bHVlRm91bmQgPyAmaW5fcHJldmlldyA6IDAsIG91dF9jYWxsRnJhbWVzLCBvdXRfcmVzdWx0KTsK
CiAgICAgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkgewogICAgICAgICAgICBpZiAob3V0X2NhbGxG
cmFtZXMpCiAgICAgICAgICAgICAgICByZXN1bHQtPnNldFZhbHVlKCJjYWxsRnJhbWVzIiwgb3V0
X2NhbGxGcmFtZXMpOwogICAgICAgICAgICBpZiAob3V0X3Jlc3VsdCkKICAgICAgICAgICAgICAg
IHJlc3VsdC0+c2V0VmFsdWUoInJlc3VsdCIsIG91dF9yZXN1bHQpOwogICAgICAgIH0KICAgIH0K
ICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGNvbW1hbmROYW1lc1tr
RGVidWdnZXJfc2V0U2NyaXB0U291cmNlQ21kXSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBl
cnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpEZWJ1Z2dlcl9n
ZXRTY3JpcHRTb3VyY2UobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3Nh
Z2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJ
bnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2RlYnVnZ2VyQWdlbnQpCiAgICAg
ICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRlYnVnZ2VyIGhhbmRsZXIgaXMgbm90IGF2
YWlsYWJsZS4iKTsKCiAgICBTdHJpbmcgb3V0X3NjcmlwdFNvdXJjZTsKCgogICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdl
dE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0
ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVy
cm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgU3RyaW5nIGluX3NjcmlwdElkID0g
Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgInNjcmlwdElkIiwgMCwgcHJvdG9jb2xFcnJv
cnNQdHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xF
cnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5nZXRTY3JpcHRTb3Vy
Y2UoJmVycm9yLCBpbl9zY3JpcHRJZCwgJm91dF9zY3JpcHRTb3VyY2UpOwoKICAgICAgICBpZiAo
IWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJzY3JpcHRT
b3VyY2UiLCBvdXRfc2NyaXB0U291cmNlKTsKICAgICAgICB9CiAgICB9CiAgICBzZW5kUmVzcG9u
c2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBjb21tYW5kTmFtZXNba0RlYnVnZ2VyX2dldFNj
cmlwdFNvdXJjZUNtZF0sIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lk
IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RGVidWdnZXJfZ2V0RnVuY3Rpb25EZXRh
aWxzKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7
CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJy
YXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kZWJ1Z2dlckFnZW50KQogICAgICAgIHByb3RvY29s
RXJyb3JzLT5wdXNoU3RyaW5nKCJEZWJ1Z2dlciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7
CgogICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPiBvdXRf
ZGV0YWlsczsKCgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0g
cmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JP
YmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIElu
c3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwog
ICAgU3RyaW5nIGluX2Z1bmN0aW9uSWQgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAi
ZnVuY3Rpb25JZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJp
bmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1f
ZGVidWdnZXJBZ2VudC0+Z2V0RnVuY3Rpb25EZXRhaWxzKCZlcnJvciwgaW5fZnVuY3Rpb25JZCwg
b3V0X2RldGFpbHMpOwoKICAgICAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgICAg
IHJlc3VsdC0+c2V0VmFsdWUoImRldGFpbHMiLCBvdXRfZGV0YWlscyk7CiAgICAgICAgfQogICAg
fQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgY29tbWFuZE5hbWVz
W2tEZWJ1Z2dlcl9nZXRGdW5jdGlvbkRldGFpbHNDbWRdLCBwcm90b2NvbEVycm9ycy5yZWxlYXNl
KCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRlYnVn
Z2VyX3NldFBhdXNlT25FeGNlcHRpb25zKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJl
cXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29s
RXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kZWJ1Z2dlckFn
ZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJEZWJ1Z2dlciBoYW5kbGVy
IGlzIG5vdCBhdmFpbGFibGUuIik7CgoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFt
c0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwog
ICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIu
Z2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVy
cm9ycy5nZXQoKTsKICAgIFN0cmluZyBpbl9zdGF0ZSA9IGdldFN0cmluZyhwYXJhbXNDb250YWlu
ZXJQdHIsICJzdGF0ZSIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JT
dHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAg
IG1fZGVidWdnZXJBZ2VudC0+c2V0UGF1c2VPbkV4Y2VwdGlvbnMoJmVycm9yLCBpbl9zdGF0ZSk7
CgoKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGNvbW1h
bmROYW1lc1trRGVidWdnZXJfc2V0UGF1c2VPbkV4Y2VwdGlvbnNDbWRdLCBwcm90b2NvbEVycm9y
cy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcklt
cGw6OkRlYnVnZ2VyX2V2YWx1YXRlT25DYWxsRnJhbWUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9i
amVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4g
cHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2Rl
YnVnZ2VyQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRlYnVnZ2Vy
IGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OlJ1
bnRpbWU6OlJlbW90ZU9iamVjdD4gb3V0X3Jlc3VsdDsKICAgIFR5cGVCdWlsZGVyOjpPcHRPdXRw
dXQ8Ym9vbD4gb3V0X3dhc1Rocm93bjsKCgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFy
YW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7
CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5l
ci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29s
RXJyb3JzLmdldCgpOwogICAgU3RyaW5nIGluX2NhbGxGcmFtZUlkID0gZ2V0U3RyaW5nKHBhcmFt
c0NvbnRhaW5lclB0ciwgImNhbGxGcmFtZUlkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAg
U3RyaW5nIGluX2V4cHJlc3Npb24gPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAiZXhw
cmVzc2lvbiIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgb2JqZWN0R3JvdXBfdmFs
dWVGb3VuZCA9IGZhbHNlOwogICAgU3RyaW5nIGluX29iamVjdEdyb3VwID0gZ2V0U3RyaW5nKHBh
cmFtc0NvbnRhaW5lclB0ciwgIm9iamVjdEdyb3VwIiwgJm9iamVjdEdyb3VwX3ZhbHVlRm91bmQs
IHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgaW5jbHVkZUNvbW1hbmRMaW5lQVBJX3ZhbHVl
Rm91bmQgPSBmYWxzZTsKICAgIGJvb2wgaW5faW5jbHVkZUNvbW1hbmRMaW5lQVBJID0gZ2V0Qm9v
bGVhbihwYXJhbXNDb250YWluZXJQdHIsICJpbmNsdWRlQ29tbWFuZExpbmVBUEkiLCAmaW5jbHVk
ZUNvbW1hbmRMaW5lQVBJX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wg
ZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlX3ZhbHVlRm91bmQgPSBmYWxzZTsK
ICAgIGJvb2wgaW5fZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlID0gZ2V0Qm9v
bGVhbihwYXJhbXNDb250YWluZXJQdHIsICJkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNv
bnNvbGUiLCAmZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlX3ZhbHVlRm91bmQs
IHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgcmV0dXJuQnlWYWx1ZV92YWx1ZUZvdW5kID0g
ZmFsc2U7CiAgICBib29sIGluX3JldHVybkJ5VmFsdWUgPSBnZXRCb29sZWFuKHBhcmFtc0NvbnRh
aW5lclB0ciwgInJldHVybkJ5VmFsdWUiLCAmcmV0dXJuQnlWYWx1ZV92YWx1ZUZvdW5kLCBwcm90
b2NvbEVycm9yc1B0cik7CiAgICBib29sIGdlbmVyYXRlUHJldmlld192YWx1ZUZvdW5kID0gZmFs
c2U7CiAgICBib29sIGluX2dlbmVyYXRlUHJldmlldyA9IGdldEJvb2xlYW4ocGFyYW1zQ29udGFp
bmVyUHRyLCAiZ2VuZXJhdGVQcmV2aWV3IiwgJmdlbmVyYXRlUHJldmlld192YWx1ZUZvdW5kLCBw
cm90b2NvbEVycm9yc1B0cik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYg
KCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2RlYnVnZ2VyQWdlbnQtPmV2
YWx1YXRlT25DYWxsRnJhbWUoJmVycm9yLCBpbl9jYWxsRnJhbWVJZCwgaW5fZXhwcmVzc2lvbiwg
b2JqZWN0R3JvdXBfdmFsdWVGb3VuZCA/ICZpbl9vYmplY3RHcm91cCA6IDAsIGluY2x1ZGVDb21t
YW5kTGluZUFQSV92YWx1ZUZvdW5kID8gJmluX2luY2x1ZGVDb21tYW5kTGluZUFQSSA6IDAsIGRv
Tm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZV92YWx1ZUZvdW5kID8gJmluX2RvTm90
UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSA6IDAsIHJldHVybkJ5VmFsdWVfdmFsdWVG
b3VuZCA/ICZpbl9yZXR1cm5CeVZhbHVlIDogMCwgZ2VuZXJhdGVQcmV2aWV3X3ZhbHVlRm91bmQg
PyAmaW5fZ2VuZXJhdGVQcmV2aWV3IDogMCwgb3V0X3Jlc3VsdCwgJm91dF93YXNUaHJvd24pOwoK
ICAgICAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgICAgIHJlc3VsdC0+c2V0VmFs
dWUoInJlc3VsdCIsIG91dF9yZXN1bHQpOwogICAgICAgICAgICBpZiAob3V0X3dhc1Rocm93bi5p
c0Fzc2lnbmVkKCkpCiAgICAgICAgICAgICAgICByZXN1bHQtPnNldEJvb2xlYW4oIndhc1Rocm93
biIsIG91dF93YXNUaHJvd24uZ2V0VmFsdWUoKSk7CiAgICAgICAgfQogICAgfQogICAgc2VuZFJl
c3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgY29tbWFuZE5hbWVzW2tEZWJ1Z2dlcl9l
dmFsdWF0ZU9uQ2FsbEZyYW1lQ21kXSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7
Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpEZWJ1Z2dlcl9jb21waWxl
U2NyaXB0KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0
KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9y
QXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kZWJ1Z2dlckFnZW50KQogICAgICAgIHByb3Rv
Y29sRXJyb3JzLT5wdXNoU3RyaW5nKCJEZWJ1Z2dlciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUu
Iik7CgogICAgVHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxUeXBlQnVpbGRlcjo6RGVidWdnZXI6OlNj
cmlwdElkPiBvdXRfc2NyaXB0SWQ7CiAgICBUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PFN0cmluZz4g
b3V0X3N5bnRheEVycm9yTWVzc2FnZTsKCgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFy
YW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7
CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5l
ci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29s
RXJyb3JzLmdldCgpOwogICAgU3RyaW5nIGluX2V4cHJlc3Npb24gPSBnZXRTdHJpbmcocGFyYW1z
Q29udGFpbmVyUHRyLCAiZXhwcmVzc2lvbiIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIFN0
cmluZyBpbl9zb3VyY2VVUkwgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAic291cmNl
VVJMIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJv
cjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9kZWJ1Z2dl
ckFnZW50LT5jb21waWxlU2NyaXB0KCZlcnJvciwgaW5fZXhwcmVzc2lvbiwgaW5fc291cmNlVVJM
LCAmb3V0X3NjcmlwdElkLCAmb3V0X3N5bnRheEVycm9yTWVzc2FnZSk7CgogICAgICAgIGlmICgh
ZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICAgICAgaWYgKG91dF9zY3JpcHRJZC5pc0Fzc2lnbmVk
KCkpCiAgICAgICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZygic2NyaXB0SWQiLCBvdXRfc2Ny
aXB0SWQuZ2V0VmFsdWUoKSk7CiAgICAgICAgICAgIGlmIChvdXRfc3ludGF4RXJyb3JNZXNzYWdl
LmlzQXNzaWduZWQoKSkKICAgICAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJzeW50YXhF
cnJvck1lc3NhZ2UiLCBvdXRfc3ludGF4RXJyb3JNZXNzYWdlLmdldFZhbHVlKCkpOwogICAgICAg
IH0KICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGNvbW1h
bmROYW1lc1trRGVidWdnZXJfY29tcGlsZVNjcmlwdENtZF0sIHByb3RvY29sRXJyb3JzLnJlbGVh
c2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RGVi
dWdnZXJfcnVuU2NyaXB0KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNz
YWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0g
SW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kZWJ1Z2dlckFnZW50KQogICAg
ICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJEZWJ1Z2dlciBoYW5kbGVyIGlzIG5vdCBh
dmFpbGFibGUuIik7CgogICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1vdGVPYmpl
Y3Q+IG91dF9yZXN1bHQ7CiAgICBUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PGJvb2w+IG91dF93YXNU
aHJvd247CgoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJl
cXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2Jq
ZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNw
ZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAg
IFN0cmluZyBpbl9zY3JpcHRJZCA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJzY3Jp
cHRJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgY29udGV4dElkX3ZhbHVlRm91
bmQgPSBmYWxzZTsKICAgIGludCBpbl9jb250ZXh0SWQgPSBnZXRJbnQocGFyYW1zQ29udGFpbmVy
UHRyLCAiY29udGV4dElkIiwgJmNvbnRleHRJZF92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0
cik7CiAgICBib29sIG9iamVjdEdyb3VwX3ZhbHVlRm91bmQgPSBmYWxzZTsKICAgIFN0cmluZyBp
bl9vYmplY3RHcm91cCA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJvYmplY3RHcm91
cCIsICZvYmplY3RHcm91cF92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBib29s
IGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZV92YWx1ZUZvdW5kID0gZmFsc2U7
CiAgICBib29sIGluX2RvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSA9IGdldEJv
b2xlYW4ocGFyYW1zQ29udGFpbmVyUHRyLCAiZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVD
b25zb2xlIiwgJmRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZV92YWx1ZUZvdW5k
LCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAg
aWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2RlYnVnZ2VyQWdlbnQt
PnJ1blNjcmlwdCgmZXJyb3IsIGluX3NjcmlwdElkLCBjb250ZXh0SWRfdmFsdWVGb3VuZCA/ICZp
bl9jb250ZXh0SWQgOiAwLCBvYmplY3RHcm91cF92YWx1ZUZvdW5kID8gJmluX29iamVjdEdyb3Vw
IDogMCwgZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlX3ZhbHVlRm91bmQgPyAm
aW5fZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlIDogMCwgb3V0X3Jlc3VsdCwg
Jm91dF93YXNUaHJvd24pOwoKICAgICAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAg
ICAgIHJlc3VsdC0+c2V0VmFsdWUoInJlc3VsdCIsIG91dF9yZXN1bHQpOwogICAgICAgICAgICBp
ZiAob3V0X3dhc1Rocm93bi5pc0Fzc2lnbmVkKCkpCiAgICAgICAgICAgICAgICByZXN1bHQtPnNl
dEJvb2xlYW4oIndhc1Rocm93biIsIG91dF93YXNUaHJvd24uZ2V0VmFsdWUoKSk7CiAgICAgICAg
fQogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgY29tbWFu
ZE5hbWVzW2tEZWJ1Z2dlcl9ydW5TY3JpcHRDbWRdLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCks
IGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRlYnVnZ2Vy
X3NldE92ZXJsYXlNZXNzYWdlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RN
ZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3Jz
ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kZWJ1Z2dlckFnZW50KQog
ICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJEZWJ1Z2dlciBoYW5kbGVyIGlzIG5v
dCBhdmFpbGFibGUuIik7CgoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRh
aW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5z
cGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7
CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5n
ZXQoKTsKICAgIGJvb2wgbWVzc2FnZV92YWx1ZUZvdW5kID0gZmFsc2U7CiAgICBTdHJpbmcgaW5f
bWVzc2FnZSA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJtZXNzYWdlIiwgJm1lc3Nh
Z2VfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmlu
ZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9k
ZWJ1Z2dlckFnZW50LT5zZXRPdmVybGF5TWVzc2FnZSgmZXJyb3IsIG1lc3NhZ2VfdmFsdWVGb3Vu
ZCA/ICZpbl9tZXNzYWdlIDogMCk7CgoKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJl
c3VsdC5yZWxlYXNlKCksIGNvbW1hbmROYW1lc1trRGVidWdnZXJfc2V0T3ZlcmxheU1lc3NhZ2VD
bWRdLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKI2VuZGlmIC8vIEVOQUJM
RShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcklt
cGw6OkZpbGVTeXN0ZW1fZW5hYmxlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqKQp7CiAg
ICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6
OmNyZWF0ZSgpOwoKICAgIGlmICghbV9maWxlU3lzdGVtQWdlbnQpCiAgICAgICAgcHJvdG9jb2xF
cnJvcnMtPnB1c2hTdHJpbmcoIkZpbGVTeXN0ZW0gaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIp
OwoKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3Jz
LT5sZW5ndGgoKSkgewogICAgICAgIG1fZmlsZVN5c3RlbUFnZW50LT5lbmFibGUoJmVycm9yKTsK
CgogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgY29tbWFu
ZE5hbWVzW2tGaWxlU3lzdGVtX2VuYWJsZUNtZF0sIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwg
ZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RmlsZVN5c3Rl
bV9kaXNhYmxlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoK
ICAgIGlmICghbV9maWxlU3lzdGVtQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hT
dHJpbmcoIkZpbGVTeXN0ZW0gaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKCiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkg
ewogICAgICAgIG1fZmlsZVN5c3RlbUFnZW50LT5kaXNhYmxlKCZlcnJvcik7CgoKICAgIH0KICAg
IHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGNvbW1hbmROYW1lc1trRmls
ZVN5c3RlbV9kaXNhYmxlQ21kXSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0K
Ckluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpGaWxlU3lzdGVtQ29tbWFuZEhhbmRsZXI6OlJl
cXVlc3RGaWxlU3lzdGVtUm9vdENhbGxiYWNrOjpSZXF1ZXN0RmlsZVN5c3RlbVJvb3RDYWxsYmFj
ayhQYXNzUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbD4gYmFja2VuZEltcGws
IGludCBpZCkgOiBDYWxsYmFja0Jhc2UoYmFja2VuZEltcGwsIGlkKSB7fQoKdm9pZCBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcjo6RmlsZVN5c3RlbUNvbW1hbmRIYW5kbGVyOjpSZXF1ZXN0Rmls
ZVN5c3RlbVJvb3RDYWxsYmFjazo6c2VuZFN1Y2Nlc3MoaW50IGVycm9yQ29kZSwgUGFzc1JlZlB0
cjxUeXBlQnVpbGRlcjo6RmlsZVN5c3RlbTo6RW50cnk+IHJvb3QpCnsKICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAg
IGpzb25NZXNzYWdlLT5zZXROdW1iZXIoImVycm9yQ29kZSIsIGVycm9yQ29kZSk7CiAgICBpZiAo
cm9vdCkKICAgICAgICBqc29uTWVzc2FnZS0+c2V0VmFsdWUoInJvb3QiLCByb290KTsKICAgIHNl
bmRJZkFjdGl2ZShqc29uTWVzc2FnZSwgRXJyb3JTdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXJJbXBsOjpGaWxlU3lzdGVtX3JlcXVlc3RGaWxlU3lzdGVtUm9vdChs
b25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAg
UmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5Ojpj
cmVhdGUoKTsKCiAgICBpZiAoIW1fZmlsZVN5c3RlbUFnZW50KQogICAgICAgIHByb3RvY29sRXJy
b3JzLT5wdXNoU3RyaW5nKCJGaWxlU3lzdGVtIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsK
ICAgIFJlZlB0cjxGaWxlU3lzdGVtQ29tbWFuZEhhbmRsZXI6OlJlcXVlc3RGaWxlU3lzdGVtUm9v
dENhbGxiYWNrPiBjYWxsYmFjayA9IGFkb3B0UmVmKG5ldyBGaWxlU3lzdGVtQ29tbWFuZEhhbmRs
ZXI6OlJlcXVlc3RGaWxlU3lzdGVtUm9vdENhbGxiYWNrKHRoaXMsIGNhbGxJZCkpOwoKCiAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9i
amVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29u
dGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHBy
b3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBTdHJpbmcgaW5fb3Jp
Z2luID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgIm9yaWdpbiIsIDAsIHByb3RvY29s
RXJyb3JzUHRyKTsKICAgIFN0cmluZyBpbl90eXBlID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5l
clB0ciwgInR5cGUiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3Ry
aW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBt
X2ZpbGVTeXN0ZW1BZ2VudC0+cmVxdWVzdEZpbGVTeXN0ZW1Sb290KCZlcnJvciwgaW5fb3JpZ2lu
LCBpbl90eXBlLCBjYWxsYmFjayk7CgogICAgICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIAogICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgY2FsbGJhY2stPmRpc2FibGUoKTsKCiAgICB9CiAgICBz
ZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBjb21tYW5kTmFtZXNba0ZpbGVT
eXN0ZW1fcmVxdWVzdEZpbGVTeXN0ZW1Sb290Q21kXSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgp
LCBlcnJvcik7Cn0KCkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpGaWxlU3lzdGVtQ29tbWFu
ZEhhbmRsZXI6OlJlcXVlc3REaXJlY3RvcnlDb250ZW50Q2FsbGJhY2s6OlJlcXVlc3REaXJlY3Rv
cnlDb250ZW50Q2FsbGJhY2soUGFzc1JlZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcklt
cGw+IGJhY2tlbmRJbXBsLCBpbnQgaWQpIDogQ2FsbGJhY2tCYXNlKGJhY2tlbmRJbXBsLCBpZCkg
e30KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkZpbGVTeXN0ZW1Db21tYW5kSGFu
ZGxlcjo6UmVxdWVzdERpcmVjdG9yeUNvbnRlbnRDYWxsYmFjazo6c2VuZFN1Y2Nlc3MoaW50IGVy
cm9yQ29kZSwgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkZpbGVT
eXN0ZW06OkVudHJ5PiA+IGVudHJpZXMpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGpz
b25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGpzb25NZXNzYWdlLT5z
ZXROdW1iZXIoImVycm9yQ29kZSIsIGVycm9yQ29kZSk7CiAgICBpZiAoZW50cmllcykKICAgICAg
ICBqc29uTWVzc2FnZS0+c2V0VmFsdWUoImVudHJpZXMiLCBlbnRyaWVzKTsKICAgIHNlbmRJZkFj
dGl2ZShqc29uTWVzc2FnZSwgRXJyb3JTdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXJJbXBsOjpGaWxlU3lzdGVtX3JlcXVlc3REaXJlY3RvcnlDb250ZW50KGxvbmcg
Y2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0
ZSgpOwoKICAgIGlmICghbV9maWxlU3lzdGVtQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMt
PnB1c2hTdHJpbmcoIkZpbGVTeXN0ZW0gaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwogICAg
UmVmUHRyPEZpbGVTeXN0ZW1Db21tYW5kSGFuZGxlcjo6UmVxdWVzdERpcmVjdG9yeUNvbnRlbnRD
YWxsYmFjaz4gY2FsbGJhY2sgPSBhZG9wdFJlZihuZXcgRmlsZVN5c3RlbUNvbW1hbmRIYW5kbGVy
OjpSZXF1ZXN0RGlyZWN0b3J5Q29udGVudENhbGxiYWNrKHRoaXMsIGNhbGxJZCkpOwoKCiAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9i
amVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29u
dGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHBy
b3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBTdHJpbmcgaW5fdXJs
ID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgInVybCIsIDAsIHByb3RvY29sRXJyb3Jz
UHRyKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJy
b3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fZmlsZVN5c3RlbUFnZW50LT5yZXF1ZXN0RGlyZWN0
b3J5Q29udGVudCgmZXJyb3IsIGluX3VybCwgY2FsbGJhY2spOwoKICAgICAgICBpZiAoIWVycm9y
Lmxlbmd0aCgpKSAKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIGNhbGxiYWNrLT5kaXNhYmxl
KCk7CgogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgY29t
bWFuZE5hbWVzW2tGaWxlU3lzdGVtX3JlcXVlc3REaXJlY3RvcnlDb250ZW50Q21kXSwgcHJvdG9j
b2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
OjpGaWxlU3lzdGVtQ29tbWFuZEhhbmRsZXI6OlJlcXVlc3RNZXRhZGF0YUNhbGxiYWNrOjpSZXF1
ZXN0TWV0YWRhdGFDYWxsYmFjayhQYXNzUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
SW1wbD4gYmFja2VuZEltcGwsIGludCBpZCkgOiBDYWxsYmFja0Jhc2UoYmFja2VuZEltcGwsIGlk
KSB7fQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6RmlsZVN5c3RlbUNvbW1hbmRI
YW5kbGVyOjpSZXF1ZXN0TWV0YWRhdGFDYWxsYmFjazo6c2VuZFN1Y2Nlc3MoaW50IGVycm9yQ29k
ZSwgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6RmlsZVN5c3RlbTo6TWV0YWRhdGE+IG1ldGFkYXRh
KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CiAgICBqc29uTWVzc2FnZS0+c2V0TnVtYmVyKCJlcnJvckNvZGUiLCBl
cnJvckNvZGUpOwogICAgaWYgKG1ldGFkYXRhKQogICAgICAgIGpzb25NZXNzYWdlLT5zZXRWYWx1
ZSgibWV0YWRhdGEiLCBtZXRhZGF0YSk7CiAgICBzZW5kSWZBY3RpdmUoanNvbk1lc3NhZ2UsIEVy
cm9yU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6Rmls
ZVN5c3RlbV9yZXF1ZXN0TWV0YWRhdGEobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVx
dWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xF
cnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2ZpbGVTeXN0ZW1B
Z2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRmlsZVN5c3RlbSBoYW5k
bGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CiAgICBSZWZQdHI8RmlsZVN5c3RlbUNvbW1hbmRIYW5k
bGVyOjpSZXF1ZXN0TWV0YWRhdGFDYWxsYmFjaz4gY2FsbGJhY2sgPSBhZG9wdFJlZihuZXcgRmls
ZVN5c3RlbUNvbW1hbmRIYW5kbGVyOjpSZXF1ZXN0TWV0YWRhdGFDYWxsYmFjayh0aGlzLCBjYWxs
SWQpKTsKCgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVx
dWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmpl
Y3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3Bl
Y3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAg
U3RyaW5nIGluX3VybCA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJ1cmwiLCAwLCBw
cm90b2NvbEVycm9yc1B0cik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYg
KCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2ZpbGVTeXN0ZW1BZ2VudC0+
cmVxdWVzdE1ldGFkYXRhKCZlcnJvciwgaW5fdXJsLCBjYWxsYmFjayk7CgogICAgICAgIGlmICgh
ZXJyb3IubGVuZ3RoKCkpIAogICAgICAgICAgICByZXR1cm47CiAgICAgICAgY2FsbGJhY2stPmRp
c2FibGUoKTsKCiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgp
LCBjb21tYW5kTmFtZXNba0ZpbGVTeXN0ZW1fcmVxdWVzdE1ldGFkYXRhQ21kXSwgcHJvdG9jb2xF
cnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpG
aWxlU3lzdGVtQ29tbWFuZEhhbmRsZXI6OlJlcXVlc3RGaWxlQ29udGVudENhbGxiYWNrOjpSZXF1
ZXN0RmlsZUNvbnRlbnRDYWxsYmFjayhQYXNzUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVySW1wbD4gYmFja2VuZEltcGwsIGludCBpZCkgOiBDYWxsYmFja0Jhc2UoYmFja2VuZEltcGws
IGlkKSB7fQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6RmlsZVN5c3RlbUNvbW1h
bmRIYW5kbGVyOjpSZXF1ZXN0RmlsZUNvbnRlbnRDYWxsYmFjazo6c2VuZFN1Y2Nlc3MoaW50IGVy
cm9yQ29kZSwgY29uc3QgU3RyaW5nKiBjb25zdCBjb250ZW50LCBjb25zdCBTdHJpbmcqIGNvbnN0
IGNoYXJzZXQpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGpzb25NZXNzYWdlLT5zZXROdW1iZXIoImVycm9y
Q29kZSIsIGVycm9yQ29kZSk7CiAgICBpZiAoY29udGVudCkKICAgICAgICBqc29uTWVzc2FnZS0+
c2V0U3RyaW5nKCJjb250ZW50IiwgKmNvbnRlbnQpOwogICAgaWYgKGNoYXJzZXQpCiAgICAgICAg
anNvbk1lc3NhZ2UtPnNldFN0cmluZygiY2hhcnNldCIsICpjaGFyc2V0KTsKICAgIHNlbmRJZkFj
dGl2ZShqc29uTWVzc2FnZSwgRXJyb3JTdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXJJbXBsOjpGaWxlU3lzdGVtX3JlcXVlc3RGaWxlQ29udGVudChsb25nIGNhbGxJ
ZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPElu
c3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsK
CiAgICBpZiAoIW1fZmlsZVN5c3RlbUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNo
U3RyaW5nKCJGaWxlU3lzdGVtIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKICAgIFJlZlB0
cjxGaWxlU3lzdGVtQ29tbWFuZEhhbmRsZXI6OlJlcXVlc3RGaWxlQ29udGVudENhbGxiYWNrPiBj
YWxsYmFjayA9IGFkb3B0UmVmKG5ldyBGaWxlU3lzdGVtQ29tbWFuZEhhbmRsZXI6OlJlcXVlc3RG
aWxlQ29udGVudENhbGxiYWNrKHRoaXMsIGNhbGxJZCkpOwoKCiAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0
KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFy
YW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRy
ID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBTdHJpbmcgaW5fdXJsID0gZ2V0U3RyaW5nKHBh
cmFtc0NvbnRhaW5lclB0ciwgInVybCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wg
aW5fcmVhZEFzVGV4dCA9IGdldEJvb2xlYW4ocGFyYW1zQ29udGFpbmVyUHRyLCAicmVhZEFzVGV4
dCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgc3RhcnRfdmFsdWVGb3VuZCA9IGZh
bHNlOwogICAgaW50IGluX3N0YXJ0ID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgInN0YXJ0
IiwgJnN0YXJ0X3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgZW5kX3Zh
bHVlRm91bmQgPSBmYWxzZTsKICAgIGludCBpbl9lbmQgPSBnZXRJbnQocGFyYW1zQ29udGFpbmVy
UHRyLCAiZW5kIiwgJmVuZF92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBib29s
IGNoYXJzZXRfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgU3RyaW5nIGluX2NoYXJzZXQgPSBnZXRT
dHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAiY2hhcnNldCIsICZjaGFyc2V0X3ZhbHVlRm91bmQs
IHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBp
ZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fZmlsZVN5c3RlbUFnZW50
LT5yZXF1ZXN0RmlsZUNvbnRlbnQoJmVycm9yLCBpbl91cmwsIGluX3JlYWRBc1RleHQsIHN0YXJ0
X3ZhbHVlRm91bmQgPyAmaW5fc3RhcnQgOiAwLCBlbmRfdmFsdWVGb3VuZCA/ICZpbl9lbmQgOiAw
LCBjaGFyc2V0X3ZhbHVlRm91bmQgPyAmaW5fY2hhcnNldCA6IDAsIGNhbGxiYWNrKTsKCiAgICAg
ICAgaWYgKCFlcnJvci5sZW5ndGgoKSkgCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICBjYWxs
YmFjay0+ZGlzYWJsZSgpOwoKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5y
ZWxlYXNlKCksIGNvbW1hbmROYW1lc1trRmlsZVN5c3RlbV9yZXF1ZXN0RmlsZUNvbnRlbnRDbWRd
LCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6OkZpbGVTeXN0ZW1Db21tYW5kSGFuZGxlcjo6RGVsZXRlRW50cnlDYWxsYmFjazo6
RGVsZXRlRW50cnlDYWxsYmFjayhQYXNzUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
SW1wbD4gYmFja2VuZEltcGwsIGludCBpZCkgOiBDYWxsYmFja0Jhc2UoYmFja2VuZEltcGwsIGlk
KSB7fQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6RmlsZVN5c3RlbUNvbW1hbmRI
YW5kbGVyOjpEZWxldGVFbnRyeUNhbGxiYWNrOjpzZW5kU3VjY2VzcyhpbnQgZXJyb3JDb2RlKQp7
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7CiAgICBqc29uTWVzc2FnZS0+c2V0TnVtYmVyKCJlcnJvckNvZGUiLCBlcnJv
ckNvZGUpOwogICAgc2VuZElmQWN0aXZlKGpzb25NZXNzYWdlLCBFcnJvclN0cmluZygpKTsKfQoK
dm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkZpbGVTeXN0ZW1fZGVsZXRlRW50
cnkobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsK
ICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJh
eTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2ZpbGVTeXN0ZW1BZ2VudCkKICAgICAgICBwcm90b2Nv
bEVycm9ycy0+cHVzaFN0cmluZygiRmlsZVN5c3RlbSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUu
Iik7CiAgICBSZWZQdHI8RmlsZVN5c3RlbUNvbW1hbmRIYW5kbGVyOjpEZWxldGVFbnRyeUNhbGxi
YWNrPiBjYWxsYmFjayA9IGFkb3B0UmVmKG5ldyBGaWxlU3lzdGVtQ29tbWFuZEhhbmRsZXI6OkRl
bGV0ZUVudHJ5Q2FsbGJhY2sodGhpcywgY2FsbElkKSk7CgoKICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3Qo
InBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJh
bXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIg
PSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIFN0cmluZyBpbl91cmwgPSBnZXRTdHJpbmcocGFy
YW1zQ29udGFpbmVyUHRyLCAidXJsIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAg
ICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7
CiAgICAgICAgbV9maWxlU3lzdGVtQWdlbnQtPmRlbGV0ZUVudHJ5KCZlcnJvciwgaW5fdXJsLCBj
YWxsYmFjayk7CgogICAgICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIAogICAgICAgICAgICByZXR1
cm47CiAgICAgICAgY2FsbGJhY2stPmRpc2FibGUoKTsKCiAgICB9CiAgICBzZW5kUmVzcG9uc2Uo
Y2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBjb21tYW5kTmFtZXNba0ZpbGVTeXN0ZW1fZGVsZXRl
RW50cnlDbWRdLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkhlYXBQcm9maWxlcl9oYXNIZWFwUHJvZmlsZXIo
bG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJh
eT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFt
X2hlYXBQcm9maWxlckFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJI
ZWFwUHJvZmlsZXIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIGJvb2wgb3V0X3Jl
c3VsdDsKCgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVy
cm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2hlYXBQcm9maWxlckFnZW50LT5oYXNIZWFwUHJv
ZmlsZXIoJmVycm9yLCAmb3V0X3Jlc3VsdCk7CgogICAgICAgIGlmICghZXJyb3IubGVuZ3RoKCkp
IHsKICAgICAgICAgICAgcmVzdWx0LT5zZXRCb29sZWFuKCJyZXN1bHQiLCBvdXRfcmVzdWx0KTsK
ICAgICAgICB9CiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgp
LCBjb21tYW5kTmFtZXNba0hlYXBQcm9maWxlcl9oYXNIZWFwUHJvZmlsZXJDbWRdLCBwcm90b2Nv
bEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlckltcGw6OkhlYXBQcm9maWxlcl9nZXRQcm9maWxlSGVhZGVycyhsb25nIGNhbGxJZCwgSW5z
cGVjdG9yT2JqZWN0KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9y
cyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1faGVhcFByb2ZpbGVyQWdl
bnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkhlYXBQcm9maWxlciBoYW5k
bGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxU
eXBlQnVpbGRlcjo6SGVhcFByb2ZpbGVyOjpQcm9maWxlSGVhZGVyPiA+IG91dF9oZWFkZXJzOwoK
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5s
ZW5ndGgoKSkgewogICAgICAgIG1faGVhcFByb2ZpbGVyQWdlbnQtPmdldFByb2ZpbGVIZWFkZXJz
KCZlcnJvciwgb3V0X2hlYWRlcnMpOwoKICAgICAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7CiAg
ICAgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoImhlYWRlcnMiLCBvdXRfaGVhZGVycyk7CiAgICAg
ICAgfQogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgY29t
bWFuZE5hbWVzW2tIZWFwUHJvZmlsZXJfZ2V0UHJvZmlsZUhlYWRlcnNDbWRdLCBwcm90b2NvbEVy
cm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ckltcGw6OkhlYXBQcm9maWxlcl9nZXRIZWFwU25hcHNob3QobG9uZyBjYWxsSWQsIEluc3BlY3Rv
ck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJh
eT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFt
X2hlYXBQcm9maWxlckFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJI
ZWFwUHJvZmlsZXIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKCiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0
T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRy
ID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJy
b3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBpbnQgaW5fdWlkID0gZ2V0SW50KHBh
cmFtc0NvbnRhaW5lclB0ciwgInVpZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkg
ewogICAgICAgIG1faGVhcFByb2ZpbGVyQWdlbnQtPmdldEhlYXBTbmFwc2hvdCgmZXJyb3IsIGlu
X3VpZCk7CgoKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCks
IGNvbW1hbmROYW1lc1trSGVhcFByb2ZpbGVyX2dldEhlYXBTbmFwc2hvdENtZF0sIHByb3RvY29s
RXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVySW1wbDo6SGVhcFByb2ZpbGVyX3JlbW92ZVByb2ZpbGUobG9uZyBjYWxsSWQsIEluc3BlY3Rv
ck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJh
eT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFt
X2hlYXBQcm9maWxlckFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJI
ZWFwUHJvZmlsZXIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKCiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0
T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRy
ID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJy
b3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBpbnQgaW5fdWlkID0gZ2V0SW50KHBh
cmFtc0NvbnRhaW5lclB0ciwgInVpZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkg
ewogICAgICAgIG1faGVhcFByb2ZpbGVyQWdlbnQtPnJlbW92ZVByb2ZpbGUoJmVycm9yLCBpbl91
aWQpOwoKCiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBj
b21tYW5kTmFtZXNba0hlYXBQcm9maWxlcl9yZW1vdmVQcm9maWxlQ21kXSwgcHJvdG9jb2xFcnJv
cnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJ
bXBsOjpIZWFwUHJvZmlsZXJfY2xlYXJQcm9maWxlcyhsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2Jq
ZWN0KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3Bl
Y3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1faGVhcFByb2ZpbGVyQWdlbnQpCiAgICAg
ICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkhlYXBQcm9maWxlciBoYW5kbGVyIGlzIG5v
dCBhdmFpbGFibGUuIik7CgoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICgh
cHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9oZWFwUHJvZmlsZXJBZ2VudC0+
Y2xlYXJQcm9maWxlcygmZXJyb3IpOwoKCiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCBy
ZXN1bHQucmVsZWFzZSgpLCBjb21tYW5kTmFtZXNba0hlYXBQcm9maWxlcl9jbGVhclByb2ZpbGVz
Q21kXSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXJJbXBsOjpIZWFwUHJvZmlsZXJfdGFrZUhlYXBTbmFwc2hvdChsb25n
IGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVm
UHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVh
dGUoKTsKCiAgICBpZiAoIW1faGVhcFByb2ZpbGVyQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJv
cnMtPnB1c2hTdHJpbmcoIkhlYXBQcm9maWxlciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7
CgoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RN
ZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBw
YXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JB
cnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIGJvb2wg
cmVwb3J0UHJvZ3Jlc3NfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgYm9vbCBpbl9yZXBvcnRQcm9n
cmVzcyA9IGdldEJvb2xlYW4ocGFyYW1zQ29udGFpbmVyUHRyLCAicmVwb3J0UHJvZ3Jlc3MiLCAm
cmVwb3J0UHJvZ3Jlc3NfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAg
ICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7
CiAgICAgICAgbV9oZWFwUHJvZmlsZXJBZ2VudC0+dGFrZUhlYXBTbmFwc2hvdCgmZXJyb3IsIHJl
cG9ydFByb2dyZXNzX3ZhbHVlRm91bmQgPyAmaW5fcmVwb3J0UHJvZ3Jlc3MgOiAwKTsKCgogICAg
fQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgY29tbWFuZE5hbWVz
W2tIZWFwUHJvZmlsZXJfdGFrZUhlYXBTbmFwc2hvdENtZF0sIHByb3RvY29sRXJyb3JzLnJlbGVh
c2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6SGVh
cFByb2ZpbGVyX2NvbGxlY3RHYXJiYWdlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqKQp7
CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJy
YXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9oZWFwUHJvZmlsZXJBZ2VudCkKICAgICAgICBwcm90
b2NvbEVycm9ycy0+cHVzaFN0cmluZygiSGVhcFByb2ZpbGVyIGhhbmRsZXIgaXMgbm90IGF2YWls
YWJsZS4iKTsKCgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2Nv
bEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2hlYXBQcm9maWxlckFnZW50LT5jb2xsZWN0
R2FyYmFnZSgmZXJyb3IpOwoKCiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQu
cmVsZWFzZSgpLCBjb21tYW5kTmFtZXNba0hlYXBQcm9maWxlcl9jb2xsZWN0R2FyYmFnZUNtZF0s
IHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVySW1wbDo6SGVhcFByb2ZpbGVyX2dldE9iamVjdEJ5SGVhcE9iamVjdElkKGxv
bmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNy
ZWF0ZSgpOwoKICAgIGlmICghbV9oZWFwUHJvZmlsZXJBZ2VudCkKICAgICAgICBwcm90b2NvbEVy
cm9ycy0+cHVzaFN0cmluZygiSGVhcFByb2ZpbGVyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4i
KTsKCiAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gb3V0X3Jl
c3VsdDsKCgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVx
dWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmpl
Y3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3Bl
Y3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAg
U3RyaW5nIGluX29iamVjdElkID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgIm9iamVj
dElkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgYm9vbCBvYmplY3RHcm91cF92YWx1ZUZv
dW5kID0gZmFsc2U7CiAgICBTdHJpbmcgaW5fb2JqZWN0R3JvdXAgPSBnZXRTdHJpbmcocGFyYW1z
Q29udGFpbmVyUHRyLCAib2JqZWN0R3JvdXAiLCAmb2JqZWN0R3JvdXBfdmFsdWVGb3VuZCwgcHJv
dG9jb2xFcnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICgh
cHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9oZWFwUHJvZmlsZXJBZ2VudC0+
Z2V0T2JqZWN0QnlIZWFwT2JqZWN0SWQoJmVycm9yLCBpbl9vYmplY3RJZCwgb2JqZWN0R3JvdXBf
dmFsdWVGb3VuZCA/ICZpbl9vYmplY3RHcm91cCA6IDAsIG91dF9yZXN1bHQpOwoKICAgICAgICBp
ZiAoIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoInJlc3Vs
dCIsIG91dF9yZXN1bHQpOwogICAgICAgIH0KICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQs
IHJlc3VsdC5yZWxlYXNlKCksIGNvbW1hbmROYW1lc1trSGVhcFByb2ZpbGVyX2dldE9iamVjdEJ5
SGVhcE9iamVjdElkQ21kXSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZv
aWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpIZWFwUHJvZmlsZXJfZ2V0SGVhcE9i
amVjdElkKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0
KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9y
QXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9oZWFwUHJvZmlsZXJBZ2VudCkKICAgICAgICBw
cm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiSGVhcFByb2ZpbGVyIGhhbmRsZXIgaXMgbm90IGF2
YWlsYWJsZS4iKTsKCiAgICBUeXBlQnVpbGRlcjo6SGVhcFByb2ZpbGVyOjpIZWFwU25hcHNob3RP
YmplY3RJZCBvdXRfaGVhcFNuYXBzaG90T2JqZWN0SWQ7CgoKICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3Qo
InBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJh
bXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIg
PSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIFN0cmluZyBpbl9vYmplY3RJZCA9IGdldFN0cmlu
ZyhwYXJhbXNDb250YWluZXJQdHIsICJvYmplY3RJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsK
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5s
ZW5ndGgoKSkgewogICAgICAgIG1faGVhcFByb2ZpbGVyQWdlbnQtPmdldEhlYXBPYmplY3RJZCgm
ZXJyb3IsIGluX29iamVjdElkLCAmb3V0X2hlYXBTbmFwc2hvdE9iamVjdElkKTsKCiAgICAgICAg
aWYgKCFlcnJvci5sZW5ndGgoKSkgewogICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZygiaGVh
cFNuYXBzaG90T2JqZWN0SWQiLCBvdXRfaGVhcFNuYXBzaG90T2JqZWN0SWQpOwogICAgICAgIH0K
ICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGNvbW1hbmRO
YW1lc1trSGVhcFByb2ZpbGVyX2dldEhlYXBPYmplY3RJZENtZF0sIHByb3RvY29sRXJyb3JzLnJl
bGVhc2UoKSwgZXJyb3IpOwp9CgojaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCgp2b2lkIElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6SW5kZXhlZERCX2VuYWJsZShsb25nIGNhbGxJ
ZCwgSW5zcGVjdG9yT2JqZWN0KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2Nv
bEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1faW5kZXhlZERC
QWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkluZGV4ZWREQiBoYW5k
bGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJl
c3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsK
ICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9pbmRleGVkREJB
Z2VudC0+ZW5hYmxlKCZlcnJvcik7CgoKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJl
c3VsdC5yZWxlYXNlKCksIGNvbW1hbmROYW1lc1trSW5kZXhlZERCX2VuYWJsZUNtZF0sIHByb3Rv
Y29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVySW1wbDo6SW5kZXhlZERCX2Rpc2FibGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVj
dCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0
b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2luZGV4ZWREQkFnZW50KQogICAgICAgIHBy
b3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJJbmRleGVkREIgaGFuZGxlciBpcyBub3QgYXZhaWxh
YmxlLiIpOwoKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29s
RXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1faW5kZXhlZERCQWdlbnQtPmRpc2FibGUoJmVy
cm9yKTsKCgogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwg
Y29tbWFuZE5hbWVzW2tJbmRleGVkREJfZGlzYWJsZUNtZF0sIHByb3RvY29sRXJyb3JzLnJlbGVh
c2UoKSwgZXJyb3IpOwp9CgpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6SW5kZXhlZERCQ29t
bWFuZEhhbmRsZXI6OlJlcXVlc3REYXRhYmFzZU5hbWVzQ2FsbGJhY2s6OlJlcXVlc3REYXRhYmFz
ZU5hbWVzQ2FsbGJhY2soUGFzc1JlZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw+
IGJhY2tlbmRJbXBsLCBpbnQgaWQpIDogQ2FsbGJhY2tCYXNlKGJhY2tlbmRJbXBsLCBpZCkge30K
CnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkluZGV4ZWREQkNvbW1hbmRIYW5kbGVy
OjpSZXF1ZXN0RGF0YWJhc2VOYW1lc0NhbGxiYWNrOjpzZW5kU3VjY2VzcyhQYXNzUmVmUHRyPFR5
cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+ID4gZGF0YWJhc2VOYW1lcykKewogICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAganNvbk1lc3NhZ2UtPnNldFZhbHVlKCJkYXRhYmFzZU5hbWVzIiwgZGF0YWJhc2VOYW1lcyk7
CiAgICBzZW5kSWZBY3RpdmUoanNvbk1lc3NhZ2UsIEVycm9yU3RyaW5nKCkpOwp9Cgp2b2lkIElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6SW5kZXhlZERCX3JlcXVlc3REYXRhYmFzZU5h
bWVzKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7
CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJy
YXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9pbmRleGVkREJBZ2VudCkKICAgICAgICBwcm90b2Nv
bEVycm9ycy0+cHVzaFN0cmluZygiSW5kZXhlZERCIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4i
KTsKICAgIFJlZlB0cjxJbmRleGVkREJDb21tYW5kSGFuZGxlcjo6UmVxdWVzdERhdGFiYXNlTmFt
ZXNDYWxsYmFjaz4gY2FsbGJhY2sgPSBhZG9wdFJlZihuZXcgSW5kZXhlZERCQ29tbWFuZEhhbmRs
ZXI6OlJlcXVlc3REYXRhYmFzZU5hbWVzQ2FsbGJhY2sodGhpcywgY2FsbElkKSk7CgoKICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2Jq
ZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250
YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJv
dG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIFN0cmluZyBpbl9zZWN1
cml0eU9yaWdpbiA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJzZWN1cml0eU9yaWdp
biIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBy
ZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7
CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1faW5kZXhlZERC
QWdlbnQtPnJlcXVlc3REYXRhYmFzZU5hbWVzKCZlcnJvciwgaW5fc2VjdXJpdHlPcmlnaW4sIGNh
bGxiYWNrKTsKCiAgICAgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkgCiAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICBjYWxsYmFjay0+ZGlzYWJsZSgpOwoKICAgIH0KICAgIHNlbmRSZXNwb25zZShj
YWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGNvbW1hbmROYW1lc1trSW5kZXhlZERCX3JlcXVlc3RE
YXRhYmFzZU5hbWVzQ21kXSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCklu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpJbmRleGVkREJDb21tYW5kSGFuZGxlcjo6UmVxdWVz
dERhdGFiYXNlQ2FsbGJhY2s6OlJlcXVlc3REYXRhYmFzZUNhbGxiYWNrKFBhc3NSZWZQdHI8SW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsPiBiYWNrZW5kSW1wbCwgaW50IGlkKSA6IENhbGxi
YWNrQmFzZShiYWNrZW5kSW1wbCwgaWQpIHt9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpJbmRleGVkREJDb21tYW5kSGFuZGxlcjo6UmVxdWVzdERhdGFiYXNlQ2FsbGJhY2s6OnNl
bmRTdWNjZXNzKFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkluZGV4ZWREQjo6RGF0YWJhc2VXaXRo
T2JqZWN0U3RvcmVzPiBkYXRhYmFzZVdpdGhPYmplY3RTdG9yZXMpCnsKICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAg
IGpzb25NZXNzYWdlLT5zZXRWYWx1ZSgiZGF0YWJhc2VXaXRoT2JqZWN0U3RvcmVzIiwgZGF0YWJh
c2VXaXRoT2JqZWN0U3RvcmVzKTsKICAgIHNlbmRJZkFjdGl2ZShqc29uTWVzc2FnZSwgRXJyb3JT
dHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpJbmRleGVk
REJfcmVxdWVzdERhdGFiYXNlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RN
ZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3Jz
ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9pbmRleGVkREJBZ2VudCkK
ICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiSW5kZXhlZERCIGhhbmRsZXIgaXMg
bm90IGF2YWlsYWJsZS4iKTsKICAgIFJlZlB0cjxJbmRleGVkREJDb21tYW5kSGFuZGxlcjo6UmVx
dWVzdERhdGFiYXNlQ2FsbGJhY2s+IGNhbGxiYWNrID0gYWRvcHRSZWYobmV3IEluZGV4ZWREQkNv
bW1hbmRIYW5kbGVyOjpSZXF1ZXN0RGF0YWJhc2VDYWxsYmFjayh0aGlzLCBjYWxsSWQpKTsKCgog
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3Nh
Z2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFt
c0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5
KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgU3RyaW5nIGlu
X3NlY3VyaXR5T3JpZ2luID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgInNlY3VyaXR5
T3JpZ2luIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgU3RyaW5nIGluX2RhdGFiYXNlTmFt
ZSA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJkYXRhYmFzZU5hbWUiLCAwLCBwcm90
b2NvbEVycm9yc1B0cik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFw
cm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2luZGV4ZWREQkFnZW50LT5yZXF1
ZXN0RGF0YWJhc2UoJmVycm9yLCBpbl9zZWN1cml0eU9yaWdpbiwgaW5fZGF0YWJhc2VOYW1lLCBj
YWxsYmFjayk7CgogICAgICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIAogICAgICAgICAgICByZXR1
cm47CiAgICAgICAgY2FsbGJhY2stPmRpc2FibGUoKTsKCiAgICB9CiAgICBzZW5kUmVzcG9uc2Uo
Y2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBjb21tYW5kTmFtZXNba0luZGV4ZWREQl9yZXF1ZXN0
RGF0YWJhc2VDbWRdLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6OkluZGV4ZWREQkNvbW1hbmRIYW5kbGVyOjpSZXF1ZXN0RGF0
YUNhbGxiYWNrOjpSZXF1ZXN0RGF0YUNhbGxiYWNrKFBhc3NSZWZQdHI8SW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXJJbXBsPiBiYWNrZW5kSW1wbCwgaW50IGlkKSA6IENhbGxiYWNrQmFzZShiYWNr
ZW5kSW1wbCwgaWQpIHt9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpJbmRleGVk
REJDb21tYW5kSGFuZGxlcjo6UmVxdWVzdERhdGFDYWxsYmFjazo6c2VuZFN1Y2Nlc3MoUGFzc1Jl
ZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkluZGV4ZWREQjo6RGF0YUVudHJ5
PiA+IG9iamVjdFN0b3JlRGF0YUVudHJpZXMsIGJvb2wgaGFzTW9yZSkKewogICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAganNvbk1lc3NhZ2UtPnNldFZhbHVlKCJvYmplY3RTdG9yZURhdGFFbnRyaWVzIiwgb2JqZWN0
U3RvcmVEYXRhRW50cmllcyk7CiAgICBqc29uTWVzc2FnZS0+c2V0Qm9vbGVhbigiaGFzTW9yZSIs
IGhhc01vcmUpOwogICAgc2VuZElmQWN0aXZlKGpzb25NZXNzYWdlLCBFcnJvclN0cmluZygpKTsK
fQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkluZGV4ZWREQl9yZXF1ZXN0
RGF0YShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkK
ewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFy
cmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1faW5kZXhlZERCQWdlbnQpCiAgICAgICAgcHJvdG9j
b2xFcnJvcnMtPnB1c2hTdHJpbmcoIkluZGV4ZWREQiBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUu
Iik7CiAgICBSZWZQdHI8SW5kZXhlZERCQ29tbWFuZEhhbmRsZXI6OlJlcXVlc3REYXRhQ2FsbGJh
Y2s+IGNhbGxiYWNrID0gYWRvcHRSZWYobmV3IEluZGV4ZWREQkNvbW1hbmRIYW5kbGVyOjpSZXF1
ZXN0RGF0YUNhbGxiYWNrKHRoaXMsIGNhbGxJZCkpOwoKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJw
YXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1z
Q29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0g
cHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBTdHJpbmcgaW5fc2VjdXJpdHlPcmlnaW4gPSBnZXRT
dHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAic2VjdXJpdHlPcmlnaW4iLCAwLCBwcm90b2NvbEVy
cm9yc1B0cik7CiAgICBTdHJpbmcgaW5fZGF0YWJhc2VOYW1lID0gZ2V0U3RyaW5nKHBhcmFtc0Nv
bnRhaW5lclB0ciwgImRhdGFiYXNlTmFtZSIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIFN0
cmluZyBpbl9vYmplY3RTdG9yZU5hbWUgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAi
b2JqZWN0U3RvcmVOYW1lIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgU3RyaW5nIGluX2lu
ZGV4TmFtZSA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJpbmRleE5hbWUiLCAwLCBw
cm90b2NvbEVycm9yc1B0cik7CiAgICBpbnQgaW5fc2tpcENvdW50ID0gZ2V0SW50KHBhcmFtc0Nv
bnRhaW5lclB0ciwgInNraXBDb3VudCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGludCBp
bl9wYWdlU2l6ZSA9IGdldEludChwYXJhbXNDb250YWluZXJQdHIsICJwYWdlU2l6ZSIsIDAsIHBy
b3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wga2V5UmFuZ2VfdmFsdWVGb3VuZCA9IGZhbHNlOwog
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaW5fa2V5UmFuZ2UgPSBnZXRPYmplY3QocGFyYW1z
Q29udGFpbmVyUHRyLCAia2V5UmFuZ2UiLCAma2V5UmFuZ2VfdmFsdWVGb3VuZCwgcHJvdG9jb2xF
cnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9j
b2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9pbmRleGVkREJBZ2VudC0+cmVxdWVzdERh
dGEoJmVycm9yLCBpbl9zZWN1cml0eU9yaWdpbiwgaW5fZGF0YWJhc2VOYW1lLCBpbl9vYmplY3RT
dG9yZU5hbWUsIGluX2luZGV4TmFtZSwgaW5fc2tpcENvdW50LCBpbl9wYWdlU2l6ZSwga2V5UmFu
Z2VfdmFsdWVGb3VuZCA/ICZpbl9rZXlSYW5nZSA6IDAsIGNhbGxiYWNrKTsKCiAgICAgICAgaWYg
KCFlcnJvci5sZW5ndGgoKSkgCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICBjYWxsYmFjay0+
ZGlzYWJsZSgpOwoKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNl
KCksIGNvbW1hbmROYW1lc1trSW5kZXhlZERCX3JlcXVlc3REYXRhQ21kXSwgcHJvdG9jb2xFcnJv
cnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpJbmRl
eGVkREJDb21tYW5kSGFuZGxlcjo6Q2xlYXJPYmplY3RTdG9yZUNhbGxiYWNrOjpDbGVhck9iamVj
dFN0b3JlQ2FsbGJhY2soUGFzc1JlZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw+
IGJhY2tlbmRJbXBsLCBpbnQgaWQpIDogQ2FsbGJhY2tCYXNlKGJhY2tlbmRJbXBsLCBpZCkge30K
CnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkluZGV4ZWREQkNvbW1hbmRIYW5kbGVy
OjpDbGVhck9iamVjdFN0b3JlQ2FsbGJhY2s6OnNlbmRTdWNjZXNzKCkKewogICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgc2VuZElmQWN0aXZlKGpzb25NZXNzYWdlLCBFcnJvclN0cmluZygpKTsKfQoKdm9pZCBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkluZGV4ZWREQl9jbGVhck9iamVjdFN0b3JlKGxv
bmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNy
ZWF0ZSgpOwoKICAgIGlmICghbV9pbmRleGVkREJBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9y
cy0+cHVzaFN0cmluZygiSW5kZXhlZERCIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKICAg
IFJlZlB0cjxJbmRleGVkREJDb21tYW5kSGFuZGxlcjo6Q2xlYXJPYmplY3RTdG9yZUNhbGxiYWNr
PiBjYWxsYmFjayA9IGFkb3B0UmVmKG5ldyBJbmRleGVkREJDb21tYW5kSGFuZGxlcjo6Q2xlYXJP
YmplY3RTdG9yZUNhbGxiYWNrKHRoaXMsIGNhbGxJZCkpOwoKCiAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0
KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFy
YW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRy
ID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBTdHJpbmcgaW5fc2VjdXJpdHlPcmlnaW4gPSBn
ZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAic2VjdXJpdHlPcmlnaW4iLCAwLCBwcm90b2Nv
bEVycm9yc1B0cik7CiAgICBTdHJpbmcgaW5fZGF0YWJhc2VOYW1lID0gZ2V0U3RyaW5nKHBhcmFt
c0NvbnRhaW5lclB0ciwgImRhdGFiYXNlTmFtZSIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAg
IFN0cmluZyBpbl9vYmplY3RTdG9yZU5hbWUgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRy
LCAib2JqZWN0U3RvcmVOYW1lIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBF
cnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAg
ICAgICAgbV9pbmRleGVkREJBZ2VudC0+Y2xlYXJPYmplY3RTdG9yZSgmZXJyb3IsIGluX3NlY3Vy
aXR5T3JpZ2luLCBpbl9kYXRhYmFzZU5hbWUsIGluX29iamVjdFN0b3JlTmFtZSwgY2FsbGJhY2sp
OwoKICAgICAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSAKICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgIGNhbGxiYWNrLT5kaXNhYmxlKCk7CgogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwg
cmVzdWx0LnJlbGVhc2UoKSwgY29tbWFuZE5hbWVzW2tJbmRleGVkREJfY2xlYXJPYmplY3RTdG9y
ZUNtZF0sIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9CgojZW5kaWYgLy8gRU5B
QkxFKElOREVYRURfREFUQUJBU0UpCgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1w
bDo6SW5wdXRfZGlzcGF0Y2hLZXlFdmVudChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiBy
ZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2Nv
bEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1faW5wdXRBZ2Vu
dCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiSW5wdXQgaGFuZGxlciBpcyBu
b3QgYXZhaWxhYmxlLiIpOwoKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250
YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIElu
c3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgp
OwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMu
Z2V0KCk7CiAgICBTdHJpbmcgaW5fdHlwZSA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIs
ICJ0eXBlIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgYm9vbCBtb2RpZmllcnNfdmFsdWVG
b3VuZCA9IGZhbHNlOwogICAgaW50IGluX21vZGlmaWVycyA9IGdldEludChwYXJhbXNDb250YWlu
ZXJQdHIsICJtb2RpZmllcnMiLCAmbW9kaWZpZXJzX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3Jz
UHRyKTsKICAgIGJvb2wgdGltZXN0YW1wX3ZhbHVlRm91bmQgPSBmYWxzZTsKICAgIGRvdWJsZSBp
bl90aW1lc3RhbXAgPSBnZXREb3VibGUocGFyYW1zQ29udGFpbmVyUHRyLCAidGltZXN0YW1wIiwg
JnRpbWVzdGFtcF92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBib29sIHRleHRf
dmFsdWVGb3VuZCA9IGZhbHNlOwogICAgU3RyaW5nIGluX3RleHQgPSBnZXRTdHJpbmcocGFyYW1z
Q29udGFpbmVyUHRyLCAidGV4dCIsICZ0ZXh0X3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRy
KTsKICAgIGJvb2wgdW5tb2RpZmllZFRleHRfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgU3RyaW5n
IGluX3VubW9kaWZpZWRUZXh0ID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgInVubW9k
aWZpZWRUZXh0IiwgJnVubW9kaWZpZWRUZXh0X3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRy
KTsKICAgIGJvb2wga2V5SWRlbnRpZmllcl92YWx1ZUZvdW5kID0gZmFsc2U7CiAgICBTdHJpbmcg
aW5fa2V5SWRlbnRpZmllciA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJrZXlJZGVu
dGlmaWVyIiwgJmtleUlkZW50aWZpZXJfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOwog
ICAgYm9vbCB3aW5kb3dzVmlydHVhbEtleUNvZGVfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgaW50
IGluX3dpbmRvd3NWaXJ0dWFsS2V5Q29kZSA9IGdldEludChwYXJhbXNDb250YWluZXJQdHIsICJ3
aW5kb3dzVmlydHVhbEtleUNvZGUiLCAmd2luZG93c1ZpcnR1YWxLZXlDb2RlX3ZhbHVlRm91bmQs
IHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgbmF0aXZlVmlydHVhbEtleUNvZGVfdmFsdWVG
b3VuZCA9IGZhbHNlOwogICAgaW50IGluX25hdGl2ZVZpcnR1YWxLZXlDb2RlID0gZ2V0SW50KHBh
cmFtc0NvbnRhaW5lclB0ciwgIm5hdGl2ZVZpcnR1YWxLZXlDb2RlIiwgJm5hdGl2ZVZpcnR1YWxL
ZXlDb2RlX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgbWFjQ2hhckNv
ZGVfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgaW50IGluX21hY0NoYXJDb2RlID0gZ2V0SW50KHBh
cmFtc0NvbnRhaW5lclB0ciwgIm1hY0NoYXJDb2RlIiwgJm1hY0NoYXJDb2RlX3ZhbHVlRm91bmQs
IHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgYXV0b1JlcGVhdF92YWx1ZUZvdW5kID0gZmFs
c2U7CiAgICBib29sIGluX2F1dG9SZXBlYXQgPSBnZXRCb29sZWFuKHBhcmFtc0NvbnRhaW5lclB0
ciwgImF1dG9SZXBlYXQiLCAmYXV0b1JlcGVhdF92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0
cik7CiAgICBib29sIGlzS2V5cGFkX3ZhbHVlRm91bmQgPSBmYWxzZTsKICAgIGJvb2wgaW5faXNL
ZXlwYWQgPSBnZXRCb29sZWFuKHBhcmFtc0NvbnRhaW5lclB0ciwgImlzS2V5cGFkIiwgJmlzS2V5
cGFkX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgaXNTeXN0ZW1LZXlf
dmFsdWVGb3VuZCA9IGZhbHNlOwogICAgYm9vbCBpbl9pc1N5c3RlbUtleSA9IGdldEJvb2xlYW4o
cGFyYW1zQ29udGFpbmVyUHRyLCAiaXNTeXN0ZW1LZXkiLCAmaXNTeXN0ZW1LZXlfdmFsdWVGb3Vu
ZCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3Vs
dCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAg
IGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9pbnB1dEFnZW50LT5k
aXNwYXRjaEtleUV2ZW50KCZlcnJvciwgaW5fdHlwZSwgbW9kaWZpZXJzX3ZhbHVlRm91bmQgPyAm
aW5fbW9kaWZpZXJzIDogMCwgdGltZXN0YW1wX3ZhbHVlRm91bmQgPyAmaW5fdGltZXN0YW1wIDog
MCwgdGV4dF92YWx1ZUZvdW5kID8gJmluX3RleHQgOiAwLCB1bm1vZGlmaWVkVGV4dF92YWx1ZUZv
dW5kID8gJmluX3VubW9kaWZpZWRUZXh0IDogMCwga2V5SWRlbnRpZmllcl92YWx1ZUZvdW5kID8g
JmluX2tleUlkZW50aWZpZXIgOiAwLCB3aW5kb3dzVmlydHVhbEtleUNvZGVfdmFsdWVGb3VuZCA/
ICZpbl93aW5kb3dzVmlydHVhbEtleUNvZGUgOiAwLCBuYXRpdmVWaXJ0dWFsS2V5Q29kZV92YWx1
ZUZvdW5kID8gJmluX25hdGl2ZVZpcnR1YWxLZXlDb2RlIDogMCwgbWFjQ2hhckNvZGVfdmFsdWVG
b3VuZCA/ICZpbl9tYWNDaGFyQ29kZSA6IDAsIGF1dG9SZXBlYXRfdmFsdWVGb3VuZCA/ICZpbl9h
dXRvUmVwZWF0IDogMCwgaXNLZXlwYWRfdmFsdWVGb3VuZCA/ICZpbl9pc0tleXBhZCA6IDAsIGlz
U3lzdGVtS2V5X3ZhbHVlRm91bmQgPyAmaW5faXNTeXN0ZW1LZXkgOiAwKTsKCgogICAgfQogICAg
c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgY29tbWFuZE5hbWVzW2tJbnB1
dF9kaXNwYXRjaEtleUV2ZW50Q21kXSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7
Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpJbnB1dF9kaXNwYXRjaE1v
dXNlRXZlbnQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmpl
Y3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0
b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2lucHV0QWdlbnQpCiAgICAgICAgcHJvdG9j
b2xFcnJvcnMtPnB1c2hTdHJpbmcoIklucHV0IGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsK
CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1l
c3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBh
cmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFy
cmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgU3RyaW5n
IGluX3R5cGUgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAidHlwZSIsIDAsIHByb3Rv
Y29sRXJyb3JzUHRyKTsKICAgIGludCBpbl94ID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwg
IngiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBpbnQgaW5feSA9IGdldEludChwYXJhbXND
b250YWluZXJQdHIsICJ5IiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgYm9vbCBtb2RpZmll
cnNfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgaW50IGluX21vZGlmaWVycyA9IGdldEludChwYXJh
bXNDb250YWluZXJQdHIsICJtb2RpZmllcnMiLCAmbW9kaWZpZXJzX3ZhbHVlRm91bmQsIHByb3Rv
Y29sRXJyb3JzUHRyKTsKICAgIGJvb2wgdGltZXN0YW1wX3ZhbHVlRm91bmQgPSBmYWxzZTsKICAg
IGRvdWJsZSBpbl90aW1lc3RhbXAgPSBnZXREb3VibGUocGFyYW1zQ29udGFpbmVyUHRyLCAidGlt
ZXN0YW1wIiwgJnRpbWVzdGFtcF92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBi
b29sIGJ1dHRvbl92YWx1ZUZvdW5kID0gZmFsc2U7CiAgICBTdHJpbmcgaW5fYnV0dG9uID0gZ2V0
U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgImJ1dHRvbiIsICZidXR0b25fdmFsdWVGb3VuZCwg
cHJvdG9jb2xFcnJvcnNQdHIpOwogICAgYm9vbCBjbGlja0NvdW50X3ZhbHVlRm91bmQgPSBmYWxz
ZTsKICAgIGludCBpbl9jbGlja0NvdW50ID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgImNs
aWNrQ291bnQiLCAmY2xpY2tDb3VudF92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7Cgog
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVu
Z3RoKCkpIHsKICAgICAgICBtX2lucHV0QWdlbnQtPmRpc3BhdGNoTW91c2VFdmVudCgmZXJyb3Is
IGluX3R5cGUsIGluX3gsIGluX3ksIG1vZGlmaWVyc192YWx1ZUZvdW5kID8gJmluX21vZGlmaWVy
cyA6IDAsIHRpbWVzdGFtcF92YWx1ZUZvdW5kID8gJmluX3RpbWVzdGFtcCA6IDAsIGJ1dHRvbl92
YWx1ZUZvdW5kID8gJmluX2J1dHRvbiA6IDAsIGNsaWNrQ291bnRfdmFsdWVGb3VuZCA/ICZpbl9j
bGlja0NvdW50IDogMCk7CgoKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5y
ZWxlYXNlKCksIGNvbW1hbmROYW1lc1trSW5wdXRfZGlzcGF0Y2hNb3VzZUV2ZW50Q21kXSwgcHJv
dG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXJJbXBsOjpJbnNwZWN0b3JfZW5hYmxlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmpl
Y3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVj
dG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9pbnNwZWN0b3JBZ2VudCkKICAgICAgICBw
cm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiSW5zcGVjdG9yIGhhbmRsZXIgaXMgbm90IGF2YWls
YWJsZS4iKTsKCgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2Nv
bEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2luc3BlY3RvckFnZW50LT5lbmFibGUoJmVy
cm9yKTsKCgogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwg
Y29tbWFuZE5hbWVzW2tJbnNwZWN0b3JfZW5hYmxlQ21kXSwgcHJvdG9jb2xFcnJvcnMucmVsZWFz
ZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpJbnNw
ZWN0b3JfZGlzYWJsZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KikKewogICAgUmVmUHRy
PEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUo
KTsKCiAgICBpZiAoIW1faW5zcGVjdG9yQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1
c2hTdHJpbmcoIkluc3BlY3RvciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgoKICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgp
KSB7CiAgICAgICAgbV9pbnNwZWN0b3JBZ2VudC0+ZGlzYWJsZSgmZXJyb3IpOwoKCiAgICB9CiAg
ICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBjb21tYW5kTmFtZXNba0lu
c3BlY3Rvcl9kaXNhYmxlQ21kXSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0K
CnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpMYXllclRyZWVfZW5hYmxlKGxv
bmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9s
YXllclRyZWVBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiTGF5ZXJU
cmVlIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCgogICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5n
IGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2xh
eWVyVHJlZUFnZW50LT5lbmFibGUoJmVycm9yKTsKCgogICAgfQogICAgc2VuZFJlc3BvbnNlKGNh
bGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgY29tbWFuZE5hbWVzW2tMYXllclRyZWVfZW5hYmxlQ21k
XSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXJJbXBsOjpMYXllclRyZWVfZGlzYWJsZShsb25nIGNhbGxJZCwgSW5zcGVj
dG9yT2JqZWN0KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9
IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fbGF5ZXJUcmVlQWdlbnQpCiAg
ICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkxheWVyVHJlZSBoYW5kbGVyIGlzIG5v
dCBhdmFpbGFibGUuIik7CgoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICgh
cHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9sYXllclRyZWVBZ2VudC0+ZGlz
YWJsZSgmZXJyb3IpOwoKCiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVs
ZWFzZSgpLCBjb21tYW5kTmFtZXNba0xheWVyVHJlZV9kaXNhYmxlQ21kXSwgcHJvdG9jb2xFcnJv
cnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJ
bXBsOjpMYXllclRyZWVfbGF5ZXJzRm9yTm9kZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0
KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90
b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fbGF5ZXJU
cmVlQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkxheWVyVHJlZSBo
YW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJh
eTxUeXBlQnVpbGRlcjo6TGF5ZXJUcmVlOjpMYXllcj4gPiBvdXRfbGF5ZXJzOwoKCiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVj
dC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFp
bmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3Rv
Y29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBpbnQgaW5fbm9kZUlkID0g
Z2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgIm5vZGVJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRy
KTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3Jz
LT5sZW5ndGgoKSkgewogICAgICAgIG1fbGF5ZXJUcmVlQWdlbnQtPmxheWVyc0Zvck5vZGUoJmVy
cm9yLCBpbl9ub2RlSWQsIG91dF9sYXllcnMpOwoKICAgICAgICBpZiAoIWVycm9yLmxlbmd0aCgp
KSB7CiAgICAgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoImxheWVycyIsIG91dF9sYXllcnMpOwog
ICAgICAgIH0KICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCks
IGNvbW1hbmROYW1lc1trTGF5ZXJUcmVlX2xheWVyc0Zvck5vZGVDbWRdLCBwcm90b2NvbEVycm9y
cy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcklt
cGw6OkxheWVyVHJlZV9yZWFzb25zRm9yQ29tcG9zaXRpbmdMYXllcihsb25nIGNhbGxJZCwgSW5z
cGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBp
ZiAoIW1fbGF5ZXJUcmVlQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmco
IkxheWVyVHJlZSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgUmVmUHRyPFR5cGVC
dWlsZGVyOjpMYXllclRyZWU6OkNvbXBvc2l0aW5nUmVhc29ucz4gb3V0X2NvbXBvc2l0aW5nUmVh
c29uczsKCgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVx
dWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmpl
Y3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3Bl
Y3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAg
U3RyaW5nIGluX2xheWVySWQgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAibGF5ZXJJ
ZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBy
ZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7
CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fbGF5ZXJUcmVl
QWdlbnQtPnJlYXNvbnNGb3JDb21wb3NpdGluZ0xheWVyKCZlcnJvciwgaW5fbGF5ZXJJZCwgb3V0
X2NvbXBvc2l0aW5nUmVhc29ucyk7CgogICAgICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsKICAg
ICAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZSgiY29tcG9zaXRpbmdSZWFzb25zIiwgb3V0X2NvbXBv
c2l0aW5nUmVhc29ucyk7CiAgICAgICAgfQogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwg
cmVzdWx0LnJlbGVhc2UoKSwgY29tbWFuZE5hbWVzW2tMYXllclRyZWVfcmVhc29uc0ZvckNvbXBv
c2l0aW5nTGF5ZXJDbWRdLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9p
ZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6Ok1lbW9yeV9nZXRET01Db3VudGVycyhs
b25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5
PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1f
bWVtb3J5QWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIk1lbW9yeSBo
YW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgaW50IG91dF9kb2N1bWVudHM7CiAgICBp
bnQgb3V0X25vZGVzOwogICAgaW50IG91dF9qc0V2ZW50TGlzdGVuZXJzOwoKCiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
RXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewog
ICAgICAgIG1fbWVtb3J5QWdlbnQtPmdldERPTUNvdW50ZXJzKCZlcnJvciwgJm91dF9kb2N1bWVu
dHMsICZvdXRfbm9kZXMsICZvdXRfanNFdmVudExpc3RlbmVycyk7CgogICAgICAgIGlmICghZXJy
b3IubGVuZ3RoKCkpIHsKICAgICAgICAgICAgcmVzdWx0LT5zZXROdW1iZXIoImRvY3VtZW50cyIs
IG91dF9kb2N1bWVudHMpOwogICAgICAgICAgICByZXN1bHQtPnNldE51bWJlcigibm9kZXMiLCBv
dXRfbm9kZXMpOwogICAgICAgICAgICByZXN1bHQtPnNldE51bWJlcigianNFdmVudExpc3RlbmVy
cyIsIG91dF9qc0V2ZW50TGlzdGVuZXJzKTsKICAgICAgICB9CiAgICB9CiAgICBzZW5kUmVzcG9u
c2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBjb21tYW5kTmFtZXNba01lbW9yeV9nZXRET01D
b3VudGVyc0NtZF0sIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lkIElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6TmV0d29ya19lbmFibGUobG9uZyBjYWxsSWQs
IEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xF
cnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX25ldHdvcmtBZ2Vu
dCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiTmV0d29yayBoYW5kbGVyIGlz
IG5vdCBhdmFpbGFibGUuIik7CgoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlm
ICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9uZXR3b3JrQWdlbnQtPmVu
YWJsZSgmZXJyb3IpOwoKCiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVs
ZWFzZSgpLCBjb21tYW5kTmFtZXNba05ldHdvcmtfZW5hYmxlQ21kXSwgcHJvdG9jb2xFcnJvcnMu
cmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBs
OjpOZXR3b3JrX2Rpc2FibGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJl
ZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3Jl
YXRlKCk7CgogICAgaWYgKCFtX25ldHdvcmtBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+
cHVzaFN0cmluZygiTmV0d29yayBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgoKICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgp
KSB7CiAgICAgICAgbV9uZXR3b3JrQWdlbnQtPmRpc2FibGUoJmVycm9yKTsKCgogICAgfQogICAg
c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgY29tbWFuZE5hbWVzW2tOZXR3
b3JrX2Rpc2FibGVDbWRdLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9p
ZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6Ok5ldHdvcmtfc2V0VXNlckFnZW50T3Zl
cnJpZGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3Qp
CnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JB
cnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX25ldHdvcmtBZ2VudCkKICAgICAgICBwcm90b2Nv
bEVycm9ycy0+cHVzaFN0cmluZygiTmV0d29yayBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7
CgoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RN
ZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBw
YXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JB
cnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIFN0cmlu
ZyBpbl91c2VyQWdlbnQgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAidXNlckFnZW50
IiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJl
c3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsK
ICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9uZXR3b3JrQWdl
bnQtPnNldFVzZXJBZ2VudE92ZXJyaWRlKCZlcnJvciwgaW5fdXNlckFnZW50KTsKCgogICAgfQog
ICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgY29tbWFuZE5hbWVzW2tO
ZXR3b3JrX3NldFVzZXJBZ2VudE92ZXJyaWRlQ21kXSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgp
LCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpOZXR3b3Jr
X3NldEV4dHJhSFRUUEhlYWRlcnMobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVz
dE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJv
cnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX25ldHdvcmtBZ2VudCkK
ICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiTmV0d29yayBoYW5kbGVyIGlzIG5v
dCBhdmFpbGFibGUuIik7CgoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRh
aW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5z
cGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7
CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5n
ZXQoKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGluX2hlYWRlcnMgPSBnZXRPYmplY3Qo
cGFyYW1zQ29udGFpbmVyUHRyLCAiaGVhZGVycyIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5n
dGgoKSkgewogICAgICAgIG1fbmV0d29ya0FnZW50LT5zZXRFeHRyYUhUVFBIZWFkZXJzKCZlcnJv
ciwgaW5faGVhZGVycyk7CgoKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5y
ZWxlYXNlKCksIGNvbW1hbmROYW1lc1trTmV0d29ya19zZXRFeHRyYUhUVFBIZWFkZXJzQ21kXSwg
cHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXJJbXBsOjpOZXR3b3JrX2dldFJlc3BvbnNlQm9keShsb25nIGNhbGxJZCwgSW5z
cGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBp
ZiAoIW1fbmV0d29ya0FnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJO
ZXR3b3JrIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBTdHJpbmcgb3V0X2JvZHk7
CiAgICBib29sIG91dF9iYXNlNjRFbmNvZGVkOwoKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJh
bXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29u
dGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJv
dG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBTdHJpbmcgaW5fcmVxdWVzdElkID0gZ2V0U3RyaW5nKHBh
cmFtc0NvbnRhaW5lclB0ciwgInJlcXVlc3RJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5n
dGgoKSkgewogICAgICAgIG1fbmV0d29ya0FnZW50LT5nZXRSZXNwb25zZUJvZHkoJmVycm9yLCBp
bl9yZXF1ZXN0SWQsICZvdXRfYm9keSwgJm91dF9iYXNlNjRFbmNvZGVkKTsKCiAgICAgICAgaWYg
KCFlcnJvci5sZW5ndGgoKSkgewogICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZygiYm9keSIs
IG91dF9ib2R5KTsKICAgICAgICAgICAgcmVzdWx0LT5zZXRCb29sZWFuKCJiYXNlNjRFbmNvZGVk
Iiwgb3V0X2Jhc2U2NEVuY29kZWQpOwogICAgICAgIH0KICAgIH0KICAgIHNlbmRSZXNwb25zZShj
YWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGNvbW1hbmROYW1lc1trTmV0d29ya19nZXRSZXNwb25z
ZUJvZHlDbWRdLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6Ok5ldHdvcmtfcmVwbGF5WEhSKGxvbmcgY2FsbElk
LCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoK
ICAgIGlmICghbV9uZXR3b3JrQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJp
bmcoIk5ldHdvcmsgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKCiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0
T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRy
ID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJy
b3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBTdHJpbmcgaW5fcmVxdWVzdElkID0g
Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgInJlcXVlc3RJZCIsIDAsIHByb3RvY29sRXJy
b3JzUHRyKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29s
RXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fbmV0d29ya0FnZW50LT5yZXBsYXlYSFIoJmVy
cm9yLCBpbl9yZXF1ZXN0SWQpOwoKCiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1
bHQucmVsZWFzZSgpLCBjb21tYW5kTmFtZXNba05ldHdvcmtfcmVwbGF5WEhSQ21kXSwgcHJvdG9j
b2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXJJbXBsOjpOZXR3b3JrX2NhbkNsZWFyQnJvd3NlckNhY2hlKGxvbmcgY2FsbElkLCBJbnNw
ZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3Jz
ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9uZXR3b3JrQWdlbnQpCiAg
ICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIk5ldHdvcmsgaGFuZGxlciBpcyBub3Qg
YXZhaWxhYmxlLiIpOwoKICAgIGJvb2wgb3V0X3Jlc3VsdDsKCgogICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3Ry
aW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBt
X25ldHdvcmtBZ2VudC0+Y2FuQ2xlYXJCcm93c2VyQ2FjaGUoJmVycm9yLCAmb3V0X3Jlc3VsdCk7
CgogICAgICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICAgICAgcmVzdWx0LT5zZXRC
b29sZWFuKCJyZXN1bHQiLCBvdXRfcmVzdWx0KTsKICAgICAgICB9CiAgICB9CiAgICBzZW5kUmVz
cG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBjb21tYW5kTmFtZXNba05ldHdvcmtfY2Fu
Q2xlYXJCcm93c2VyQ2FjaGVDbWRdLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsK
fQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6Ok5ldHdvcmtfY2xlYXJCcm93
c2VyQ2FjaGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7Cgog
ICAgaWYgKCFtX25ldHdvcmtBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmlu
ZygiTmV0d29yayBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgoKICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJv
clN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAg
ICAgbV9uZXR3b3JrQWdlbnQtPmNsZWFyQnJvd3NlckNhY2hlKCZlcnJvcik7CgoKICAgIH0KICAg
IHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGNvbW1hbmROYW1lc1trTmV0
d29ya19jbGVhckJyb3dzZXJDYWNoZUNtZF0sIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJy
b3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6TmV0d29ya19jYW5D
bGVhckJyb3dzZXJDb29raWVzKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqKQp7CiAgICBS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNy
ZWF0ZSgpOwoKICAgIGlmICghbV9uZXR3b3JrQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMt
PnB1c2hTdHJpbmcoIk5ldHdvcmsgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIGJv
b2wgb3V0X3Jlc3VsdDsKCgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFw
cm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX25ldHdvcmtBZ2VudC0+Y2FuQ2xl
YXJCcm93c2VyQ29va2llcygmZXJyb3IsICZvdXRfcmVzdWx0KTsKCiAgICAgICAgaWYgKCFlcnJv
ci5sZW5ndGgoKSkgewogICAgICAgICAgICByZXN1bHQtPnNldEJvb2xlYW4oInJlc3VsdCIsIG91
dF9yZXN1bHQpOwogICAgICAgIH0KICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3Vs
dC5yZWxlYXNlKCksIGNvbW1hbmROYW1lc1trTmV0d29ya19jYW5DbGVhckJyb3dzZXJDb29raWVz
Q21kXSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXJJbXBsOjpOZXR3b3JrX2NsZWFyQnJvd3NlckNvb2tpZXMobG9uZyBj
YWxsSWQsIEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJv
dG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX25ldHdv
cmtBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiTmV0d29yayBoYW5k
bGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJl
c3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsK
ICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9uZXR3b3JrQWdl
bnQtPmNsZWFyQnJvd3NlckNvb2tpZXMoJmVycm9yKTsKCgogICAgfQogICAgc2VuZFJlc3BvbnNl
KGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgY29tbWFuZE5hbWVzW2tOZXR3b3JrX2NsZWFyQnJv
d3NlckNvb2tpZXNDbWRdLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9p
ZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6Ok5ldHdvcmtfc2V0Q2FjaGVEaXNhYmxl
ZChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewog
ICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5
OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fbmV0d29ya0FnZW50KQogICAgICAgIHByb3RvY29sRXJy
b3JzLT5wdXNoU3RyaW5nKCJOZXR3b3JrIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCgog
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3Nh
Z2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFt
c0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5
KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgYm9vbCBpbl9j
YWNoZURpc2FibGVkID0gZ2V0Qm9vbGVhbihwYXJhbXNDb250YWluZXJQdHIsICJjYWNoZURpc2Fi
bGVkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJv
cjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9uZXR3b3Jr
QWdlbnQtPnNldENhY2hlRGlzYWJsZWQoJmVycm9yLCBpbl9jYWNoZURpc2FibGVkKTsKCgogICAg
fQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgY29tbWFuZE5hbWVz
W2tOZXR3b3JrX3NldENhY2hlRGlzYWJsZWRDbWRdLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCks
IGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlBhZ2VfZW5h
YmxlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlm
ICghbV9wYWdlQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIlBhZ2Ug
aGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJy
b3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fcGFnZUFn
ZW50LT5lbmFibGUoJmVycm9yKTsKCgogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVz
dWx0LnJlbGVhc2UoKSwgY29tbWFuZE5hbWVzW2tQYWdlX2VuYWJsZUNtZF0sIHByb3RvY29sRXJy
b3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
SW1wbDo6UGFnZV9kaXNhYmxlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqKQp7CiAgICBS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNy
ZWF0ZSgpOwoKICAgIGlmICghbV9wYWdlQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1
c2hTdHJpbmcoIlBhZ2UgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKCiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
RXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewog
ICAgICAgIG1fcGFnZUFnZW50LT5kaXNhYmxlKCZlcnJvcik7CgoKICAgIH0KICAgIHNlbmRSZXNw
b25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGNvbW1hbmROYW1lc1trUGFnZV9kaXNhYmxl
Q21kXSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXJJbXBsOjpQYWdlX2FkZFNjcmlwdFRvRXZhbHVhdGVPbkxvYWQobG9u
ZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJl
ZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3Jl
YXRlKCk7CgogICAgaWYgKCFtX3BhZ2VBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVz
aFN0cmluZygiUGFnZSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgVHlwZUJ1aWxk
ZXI6OlBhZ2U6OlNjcmlwdElkZW50aWZpZXIgb3V0X2lkZW50aWZpZXI7CgoKICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5n
ZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQ
dHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xF
cnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIFN0cmluZyBpbl9zY3JpcHRTb3Vy
Y2UgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAic2NyaXB0U291cmNlIiwgMCwgcHJv
dG9jb2xFcnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICgh
cHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9wYWdlQWdlbnQtPmFkZFNjcmlw
dFRvRXZhbHVhdGVPbkxvYWQoJmVycm9yLCBpbl9zY3JpcHRTb3VyY2UsICZvdXRfaWRlbnRpZmll
cik7CgogICAgICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICAgICAgcmVzdWx0LT5z
ZXRTdHJpbmcoImlkZW50aWZpZXIiLCBvdXRfaWRlbnRpZmllcik7CiAgICAgICAgfQogICAgfQog
ICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgY29tbWFuZE5hbWVzW2tQ
YWdlX2FkZFNjcmlwdFRvRXZhbHVhdGVPbkxvYWRDbWRdLCBwcm90b2NvbEVycm9ycy5yZWxlYXNl
KCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlBhZ2Vf
cmVtb3ZlU2NyaXB0VG9FdmFsdWF0ZU9uTG9hZChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0
KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90
b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fcGFnZUFn
ZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJQYWdlIGhhbmRsZXIgaXMg
bm90IGF2YWlsYWJsZS4iKTsKCgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29u
dGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJ
bnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQo
KTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3Jz
LmdldCgpOwogICAgU3RyaW5nIGluX2lkZW50aWZpZXIgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFp
bmVyUHRyLCAiaWRlbnRpZmllciIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
RXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewog
ICAgICAgIG1fcGFnZUFnZW50LT5yZW1vdmVTY3JpcHRUb0V2YWx1YXRlT25Mb2FkKCZlcnJvciwg
aW5faWRlbnRpZmllcik7CgoKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5y
ZWxlYXNlKCksIGNvbW1hbmROYW1lc1trUGFnZV9yZW1vdmVTY3JpcHRUb0V2YWx1YXRlT25Mb2Fk
Q21kXSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXJJbXBsOjpQYWdlX3JlbG9hZChsb25nIGNhbGxJZCwgSW5zcGVjdG9y
T2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5
PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1f
cGFnZUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJQYWdlIGhhbmRs
ZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFy
YW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7
CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5l
ci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29s
RXJyb3JzLmdldCgpOwogICAgYm9vbCBpZ25vcmVDYWNoZV92YWx1ZUZvdW5kID0gZmFsc2U7CiAg
ICBib29sIGluX2lnbm9yZUNhY2hlID0gZ2V0Qm9vbGVhbihwYXJhbXNDb250YWluZXJQdHIsICJp
Z25vcmVDYWNoZSIsICZpZ25vcmVDYWNoZV92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7
CiAgICBib29sIHNjcmlwdFRvRXZhbHVhdGVPbkxvYWRfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAg
U3RyaW5nIGluX3NjcmlwdFRvRXZhbHVhdGVPbkxvYWQgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFp
bmVyUHRyLCAic2NyaXB0VG9FdmFsdWF0ZU9uTG9hZCIsICZzY3JpcHRUb0V2YWx1YXRlT25Mb2Fk
X3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgc2NyaXB0UHJlcHJvY2Vz
c29yX3ZhbHVlRm91bmQgPSBmYWxzZTsKICAgIFN0cmluZyBpbl9zY3JpcHRQcmVwcm9jZXNzb3Ig
PSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAic2NyaXB0UHJlcHJvY2Vzc29yIiwgJnNj
cmlwdFByZXByb2Nlc3Nvcl92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
ICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkp
IHsKICAgICAgICBtX3BhZ2VBZ2VudC0+cmVsb2FkKCZlcnJvciwgaWdub3JlQ2FjaGVfdmFsdWVG
b3VuZCA/ICZpbl9pZ25vcmVDYWNoZSA6IDAsIHNjcmlwdFRvRXZhbHVhdGVPbkxvYWRfdmFsdWVG
b3VuZCA/ICZpbl9zY3JpcHRUb0V2YWx1YXRlT25Mb2FkIDogMCwgc2NyaXB0UHJlcHJvY2Vzc29y
X3ZhbHVlRm91bmQgPyAmaW5fc2NyaXB0UHJlcHJvY2Vzc29yIDogMCk7CgoKICAgIH0KICAgIHNl
bmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGNvbW1hbmROYW1lc1trUGFnZV9y
ZWxvYWRDbWRdLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlBhZ2VfbmF2aWdhdGUobG9uZyBjYWxsSWQsIElu
c3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0
b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAg
aWYgKCFtX3BhZ2VBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiUGFn
ZSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBh
cmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXND
b250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBw
cm90b2NvbEVycm9ycy5nZXQoKTsKICAgIFN0cmluZyBpbl91cmwgPSBnZXRTdHJpbmcocGFyYW1z
Q29udGFpbmVyUHRyLCAidXJsIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBF
cnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAg
ICAgICAgbV9wYWdlQWdlbnQtPm5hdmlnYXRlKCZlcnJvciwgaW5fdXJsKTsKCgogICAgfQogICAg
c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgY29tbWFuZE5hbWVzW2tQYWdl
X25hdmlnYXRlQ21kXSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQg
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpQYWdlX2dldENvb2tpZXMobG9uZyBjYWxs
SWQsIEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9j
b2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX3BhZ2VBZ2Vu
dCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiUGFnZSBoYW5kbGVyIGlzIG5v
dCBhdmFpbGFibGUuIik7CgogICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRl
cjo6UGFnZTo6Q29va2llPiA+IG91dF9jb29raWVzOwogICAgU3RyaW5nIG91dF9jb29raWVzU3Ry
aW5nOwoKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJy
b3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fcGFnZUFnZW50LT5nZXRDb29raWVzKCZlcnJvciwg
b3V0X2Nvb2tpZXMsICZvdXRfY29va2llc1N0cmluZyk7CgogICAgICAgIGlmICghZXJyb3IubGVu
Z3RoKCkpIHsKICAgICAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZSgiY29va2llcyIsIG91dF9jb29r
aWVzKTsKICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoImNvb2tpZXNTdHJpbmciLCBvdXRf
Y29va2llc1N0cmluZyk7CiAgICAgICAgfQogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwg
cmVzdWx0LnJlbGVhc2UoKSwgY29tbWFuZE5hbWVzW2tQYWdlX2dldENvb2tpZXNDbWRdLCBwcm90
b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlckltcGw6OlBhZ2VfZGVsZXRlQ29va2llKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmpl
Y3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHBy
b3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9wYWdl
QWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIlBhZ2UgaGFuZGxlciBp
cyBub3QgYXZhaWxhYmxlLiIpOwoKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXND
b250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAg
IEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdl
dCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJv
cnMuZ2V0KCk7CiAgICBTdHJpbmcgaW5fY29va2llTmFtZSA9IGdldFN0cmluZyhwYXJhbXNDb250
YWluZXJQdHIsICJjb29raWVOYW1lIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgU3RyaW5n
IGluX3VybCA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJ1cmwiLCAwLCBwcm90b2Nv
bEVycm9yc1B0cik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90
b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX3BhZ2VBZ2VudC0+ZGVsZXRlQ29va2ll
KCZlcnJvciwgaW5fY29va2llTmFtZSwgaW5fdXJsKTsKCgogICAgfQogICAgc2VuZFJlc3BvbnNl
KGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgY29tbWFuZE5hbWVzW2tQYWdlX2RlbGV0ZUNvb2tp
ZUNtZF0sIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVySW1wbDo6UGFnZV9nZXRSZXNvdXJjZVRyZWUobG9uZyBjYWxsSWQs
IEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xF
cnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX3BhZ2VBZ2VudCkK
ICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiUGFnZSBoYW5kbGVyIGlzIG5vdCBh
dmFpbGFibGUuIik7CgogICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpQYWdlOjpGcmFtZVJlc291cmNl
VHJlZT4gb3V0X2ZyYW1lVHJlZTsKCgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAg
aWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX3BhZ2VBZ2VudC0+Z2V0
UmVzb3VyY2VUcmVlKCZlcnJvciwgb3V0X2ZyYW1lVHJlZSk7CgogICAgICAgIGlmICghZXJyb3Iu
bGVuZ3RoKCkpIHsKICAgICAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZSgiZnJhbWVUcmVlIiwgb3V0
X2ZyYW1lVHJlZSk7CiAgICAgICAgfQogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVz
dWx0LnJlbGVhc2UoKSwgY29tbWFuZE5hbWVzW2tQYWdlX2dldFJlc291cmNlVHJlZUNtZF0sIHBy
b3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVySW1wbDo6UGFnZV9nZXRSZXNvdXJjZUNvbnRlbnQobG9uZyBjYWxsSWQsIEluc3Bl
Y3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYg
KCFtX3BhZ2VBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiUGFnZSBo
YW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgU3RyaW5nIG91dF9jb250ZW50OwogICAg
Ym9vbCBvdXRfYmFzZTY0RW5jb2RlZDsKCgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFy
YW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7
CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5l
ci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29s
RXJyb3JzLmdldCgpOwogICAgU3RyaW5nIGluX2ZyYW1lSWQgPSBnZXRTdHJpbmcocGFyYW1zQ29u
dGFpbmVyUHRyLCAiZnJhbWVJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIFN0cmluZyBp
bl91cmwgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAidXJsIiwgMCwgcHJvdG9jb2xF
cnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9j
b2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9wYWdlQWdlbnQtPmdldFJlc291cmNlQ29u
dGVudCgmZXJyb3IsIGluX2ZyYW1lSWQsIGluX3VybCwgJm91dF9jb250ZW50LCAmb3V0X2Jhc2U2
NEVuY29kZWQpOwoKICAgICAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgICAgIHJl
c3VsdC0+c2V0U3RyaW5nKCJjb250ZW50Iiwgb3V0X2NvbnRlbnQpOwogICAgICAgICAgICByZXN1
bHQtPnNldEJvb2xlYW4oImJhc2U2NEVuY29kZWQiLCBvdXRfYmFzZTY0RW5jb2RlZCk7CiAgICAg
ICAgfQogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgY29t
bWFuZE5hbWVzW2tQYWdlX2dldFJlc291cmNlQ29udGVudENtZF0sIHByb3RvY29sRXJyb3JzLnJl
bGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6
UGFnZV9zZWFyY2hJblJlc291cmNlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVl
c3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJy
b3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9wYWdlQWdlbnQpCiAg
ICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIlBhZ2UgaGFuZGxlciBpcyBub3QgYXZh
aWxhYmxlLiIpOwoKICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OlBh
Z2U6OlNlYXJjaE1hdGNoPiA+IG91dF9yZXN1bHQ7CgoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBh
cmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXND
b250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBw
cm90b2NvbEVycm9ycy5nZXQoKTsKICAgIFN0cmluZyBpbl9mcmFtZUlkID0gZ2V0U3RyaW5nKHBh
cmFtc0NvbnRhaW5lclB0ciwgImZyYW1lSWQiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBT
dHJpbmcgaW5fdXJsID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgInVybCIsIDAsIHBy
b3RvY29sRXJyb3JzUHRyKTsKICAgIFN0cmluZyBpbl9xdWVyeSA9IGdldFN0cmluZyhwYXJhbXND
b250YWluZXJQdHIsICJxdWVyeSIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgY2Fz
ZVNlbnNpdGl2ZV92YWx1ZUZvdW5kID0gZmFsc2U7CiAgICBib29sIGluX2Nhc2VTZW5zaXRpdmUg
PSBnZXRCb29sZWFuKHBhcmFtc0NvbnRhaW5lclB0ciwgImNhc2VTZW5zaXRpdmUiLCAmY2FzZVNl
bnNpdGl2ZV92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBib29sIGlzUmVnZXhf
dmFsdWVGb3VuZCA9IGZhbHNlOwogICAgYm9vbCBpbl9pc1JlZ2V4ID0gZ2V0Qm9vbGVhbihwYXJh
bXNDb250YWluZXJQdHIsICJpc1JlZ2V4IiwgJmlzUmVnZXhfdmFsdWVGb3VuZCwgcHJvdG9jb2xF
cnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9j
b2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9wYWdlQWdlbnQtPnNlYXJjaEluUmVzb3Vy
Y2UoJmVycm9yLCBpbl9mcmFtZUlkLCBpbl91cmwsIGluX3F1ZXJ5LCBjYXNlU2Vuc2l0aXZlX3Zh
bHVlRm91bmQgPyAmaW5fY2FzZVNlbnNpdGl2ZSA6IDAsIGlzUmVnZXhfdmFsdWVGb3VuZCA/ICZp
bl9pc1JlZ2V4IDogMCwgb3V0X3Jlc3VsdCk7CgogICAgICAgIGlmICghZXJyb3IubGVuZ3RoKCkp
IHsKICAgICAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZSgicmVzdWx0Iiwgb3V0X3Jlc3VsdCk7CiAg
ICAgICAgfQogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwg
Y29tbWFuZE5hbWVzW2tQYWdlX3NlYXJjaEluUmVzb3VyY2VDbWRdLCBwcm90b2NvbEVycm9ycy5y
ZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6
OlBhZ2Vfc2VhcmNoSW5SZXNvdXJjZXMobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVx
dWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xF
cnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX3BhZ2VBZ2VudCkK
ICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiUGFnZSBoYW5kbGVyIGlzIG5vdCBh
dmFpbGFibGUuIik7CgogICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6
UGFnZTo6U2VhcmNoUmVzdWx0PiA+IG91dF9yZXN1bHQ7CgoKICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3Qo
InBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJh
bXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIg
PSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIFN0cmluZyBpbl90ZXh0ID0gZ2V0U3RyaW5nKHBh
cmFtc0NvbnRhaW5lclB0ciwgInRleHQiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBib29s
IGNhc2VTZW5zaXRpdmVfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgYm9vbCBpbl9jYXNlU2Vuc2l0
aXZlID0gZ2V0Qm9vbGVhbihwYXJhbXNDb250YWluZXJQdHIsICJjYXNlU2Vuc2l0aXZlIiwgJmNh
c2VTZW5zaXRpdmVfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgYm9vbCBpc1Jl
Z2V4X3ZhbHVlRm91bmQgPSBmYWxzZTsKICAgIGJvb2wgaW5faXNSZWdleCA9IGdldEJvb2xlYW4o
cGFyYW1zQ29udGFpbmVyUHRyLCAiaXNSZWdleCIsICZpc1JlZ2V4X3ZhbHVlRm91bmQsIHByb3Rv
Y29sRXJyb3JzUHRyKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXBy
b3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fcGFnZUFnZW50LT5zZWFyY2hJblJl
c291cmNlcygmZXJyb3IsIGluX3RleHQsIGNhc2VTZW5zaXRpdmVfdmFsdWVGb3VuZCA/ICZpbl9j
YXNlU2Vuc2l0aXZlIDogMCwgaXNSZWdleF92YWx1ZUZvdW5kID8gJmluX2lzUmVnZXggOiAwLCBv
dXRfcmVzdWx0KTsKCiAgICAgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkgewogICAgICAgICAgICBy
ZXN1bHQtPnNldFZhbHVlKCJyZXN1bHQiLCBvdXRfcmVzdWx0KTsKICAgICAgICB9CiAgICB9CiAg
ICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBjb21tYW5kTmFtZXNba1Bh
Z2Vfc2VhcmNoSW5SZXNvdXJjZXNDbWRdLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9y
KTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlBhZ2Vfc2V0RG9jdW1l
bnRDb250ZW50KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2Jq
ZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVj
dG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9wYWdlQWdlbnQpCiAgICAgICAgcHJvdG9j
b2xFcnJvcnMtPnB1c2hTdHJpbmcoIlBhZ2UgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoK
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVz
c2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFy
YW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJy
YXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBTdHJpbmcg
aW5fZnJhbWVJZCA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJmcmFtZUlkIiwgMCwg
cHJvdG9jb2xFcnJvcnNQdHIpOwogICAgU3RyaW5nIGluX2h0bWwgPSBnZXRTdHJpbmcocGFyYW1z
Q29udGFpbmVyUHRyLCAiaHRtbCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
RXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewog
ICAgICAgIG1fcGFnZUFnZW50LT5zZXREb2N1bWVudENvbnRlbnQoJmVycm9yLCBpbl9mcmFtZUlk
LCBpbl9odG1sKTsKCgogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVh
c2UoKSwgY29tbWFuZE5hbWVzW2tQYWdlX3NldERvY3VtZW50Q29udGVudENtZF0sIHByb3RvY29s
RXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVySW1wbDo6UGFnZV9jYW5PdmVycmlkZURldmljZU1ldHJpY3MobG9uZyBjYWxsSWQsIEluc3Bl
Y3Rvck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMg
PSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX3BhZ2VBZ2VudCkKICAgICAg
ICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiUGFnZSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFi
bGUuIik7CgogICAgYm9vbCBvdXRfcmVzdWx0OwoKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJy
b3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fcGFnZUFn
ZW50LT5jYW5PdmVycmlkZURldmljZU1ldHJpY3MoJmVycm9yLCAmb3V0X3Jlc3VsdCk7CgogICAg
ICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICAgICAgcmVzdWx0LT5zZXRCb29sZWFu
KCJyZXN1bHQiLCBvdXRfcmVzdWx0KTsKICAgICAgICB9CiAgICB9CiAgICBzZW5kUmVzcG9uc2Uo
Y2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBjb21tYW5kTmFtZXNba1BhZ2VfY2FuT3ZlcnJpZGVE
ZXZpY2VNZXRyaWNzQ21kXSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZv
aWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpQYWdlX3NldERldmljZU1ldHJpY3NP
dmVycmlkZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVj
dCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3Rv
ckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fcGFnZUFnZW50KQogICAgICAgIHByb3RvY29s
RXJyb3JzLT5wdXNoU3RyaW5nKCJQYWdlIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCgog
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3Nh
Z2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFt
c0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5
KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgaW50IGluX3dp
ZHRoID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgIndpZHRoIiwgMCwgcHJvdG9jb2xFcnJv
cnNQdHIpOwogICAgaW50IGluX2hlaWdodCA9IGdldEludChwYXJhbXNDb250YWluZXJQdHIsICJo
ZWlnaHQiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBkb3VibGUgaW5fZm9udFNjYWxlRmFj
dG9yID0gZ2V0RG91YmxlKHBhcmFtc0NvbnRhaW5lclB0ciwgImZvbnRTY2FsZUZhY3RvciIsIDAs
IHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgaW5fZml0V2luZG93ID0gZ2V0Qm9vbGVhbihw
YXJhbXNDb250YWluZXJQdHIsICJmaXRXaW5kb3ciLCAwLCBwcm90b2NvbEVycm9yc1B0cik7Cgog
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVu
Z3RoKCkpIHsKICAgICAgICBtX3BhZ2VBZ2VudC0+c2V0RGV2aWNlTWV0cmljc092ZXJyaWRlKCZl
cnJvciwgaW5fd2lkdGgsIGluX2hlaWdodCwgaW5fZm9udFNjYWxlRmFjdG9yLCBpbl9maXRXaW5k
b3cpOwoKCiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBj
b21tYW5kTmFtZXNba1BhZ2Vfc2V0RGV2aWNlTWV0cmljc092ZXJyaWRlQ21kXSwgcHJvdG9jb2xF
cnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXJJbXBsOjpQYWdlX3NldFNob3dQYWludFJlY3RzKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmpl
Y3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHBy
b3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9wYWdl
QWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIlBhZ2UgaGFuZGxlciBp
cyBub3QgYXZhaWxhYmxlLiIpOwoKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXND
b250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAg
IEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdl
dCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJv
cnMuZ2V0KCk7CiAgICBib29sIGluX3Jlc3VsdCA9IGdldEJvb2xlYW4ocGFyYW1zQ29udGFpbmVy
UHRyLCAicmVzdWx0IiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0
cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAg
bV9wYWdlQWdlbnQtPnNldFNob3dQYWludFJlY3RzKCZlcnJvciwgaW5fcmVzdWx0KTsKCgogICAg
fQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgY29tbWFuZE5hbWVz
W2tQYWdlX3NldFNob3dQYWludFJlY3RzQ21kXSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBl
cnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpQYWdlX2NhblNo
b3dEZWJ1Z0JvcmRlcnMobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJlZlB0
cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRl
KCk7CgogICAgaWYgKCFtX3BhZ2VBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0
cmluZygiUGFnZSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgYm9vbCBvdXRfc2hv
dzsKCgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9y
cy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX3BhZ2VBZ2VudC0+Y2FuU2hvd0RlYnVnQm9yZGVycygm
ZXJyb3IsICZvdXRfc2hvdyk7CgogICAgICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsKICAgICAg
ICAgICAgcmVzdWx0LT5zZXRCb29sZWFuKCJzaG93Iiwgb3V0X3Nob3cpOwogICAgICAgIH0KICAg
IH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGNvbW1hbmROYW1l
c1trUGFnZV9jYW5TaG93RGVidWdCb3JkZXJzQ21kXSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgp
LCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpQYWdlX3Nl
dFNob3dEZWJ1Z0JvcmRlcnMobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1l
c3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMg
PSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX3BhZ2VBZ2VudCkKICAgICAg
ICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiUGFnZSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFi
bGUuIik7CgoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJl
cXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2Jq
ZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNw
ZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAg
IGJvb2wgaW5fc2hvdyA9IGdldEJvb2xlYW4ocGFyYW1zQ29udGFpbmVyUHRyLCAic2hvdyIsIDAs
IHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBp
ZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fcGFnZUFnZW50LT5zZXRT
aG93RGVidWdCb3JkZXJzKCZlcnJvciwgaW5fc2hvdyk7CgoKICAgIH0KICAgIHNlbmRSZXNwb25z
ZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGNvbW1hbmROYW1lc1trUGFnZV9zZXRTaG93RGVi
dWdCb3JkZXJzQ21kXSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQg
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpQYWdlX2NhblNob3dGUFNDb3VudGVyKGxv
bmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9w
YWdlQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIlBhZ2UgaGFuZGxl
ciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIGJvb2wgb3V0X3Nob3c7CgoKICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBF
cnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAg
ICAgICAgbV9wYWdlQWdlbnQtPmNhblNob3dGUFNDb3VudGVyKCZlcnJvciwgJm91dF9zaG93KTsK
CiAgICAgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkgewogICAgICAgICAgICByZXN1bHQtPnNldEJv
b2xlYW4oInNob3ciLCBvdXRfc2hvdyk7CiAgICAgICAgfQogICAgfQogICAgc2VuZFJlc3BvbnNl
KGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgY29tbWFuZE5hbWVzW2tQYWdlX2NhblNob3dGUFND
b3VudGVyQ21kXSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpQYWdlX3NldFNob3dGUFNDb3VudGVyKGxvbmcg
Y2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0
ZSgpOwoKICAgIGlmICghbV9wYWdlQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hT
dHJpbmcoIlBhZ2UgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKCiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0
T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRy
ID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJy
b3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBib29sIGluX3Nob3cgPSBnZXRCb29s
ZWFuKHBhcmFtc0NvbnRhaW5lclB0ciwgInNob3ciLCAwLCBwcm90b2NvbEVycm9yc1B0cik7Cgog
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVu
Z3RoKCkpIHsKICAgICAgICBtX3BhZ2VBZ2VudC0+c2V0U2hvd0ZQU0NvdW50ZXIoJmVycm9yLCBp
bl9zaG93KTsKCgogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2Uo
KSwgY29tbWFuZE5hbWVzW2tQYWdlX3NldFNob3dGUFNDb3VudGVyQ21kXSwgcHJvdG9jb2xFcnJv
cnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJ
bXBsOjpQYWdlX2NhbkNvbnRpbnVvdXNseVBhaW50KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmpl
Y3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVj
dG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9wYWdlQWdlbnQpCiAgICAgICAgcHJvdG9j
b2xFcnJvcnMtPnB1c2hTdHJpbmcoIlBhZ2UgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoK
ICAgIGJvb2wgb3V0X3ZhbHVlOwoKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBp
ZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fcGFnZUFnZW50LT5jYW5D
b250aW51b3VzbHlQYWludCgmZXJyb3IsICZvdXRfdmFsdWUpOwoKICAgICAgICBpZiAoIWVycm9y
Lmxlbmd0aCgpKSB7CiAgICAgICAgICAgIHJlc3VsdC0+c2V0Qm9vbGVhbigidmFsdWUiLCBvdXRf
dmFsdWUpOwogICAgICAgIH0KICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5y
ZWxlYXNlKCksIGNvbW1hbmROYW1lc1trUGFnZV9jYW5Db250aW51b3VzbHlQYWludENtZF0sIHBy
b3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVySW1wbDo6UGFnZV9zZXRDb250aW51b3VzUGFpbnRpbmdFbmFibGVkKGxvbmcgY2Fs
bElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgp
OwoKICAgIGlmICghbV9wYWdlQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJp
bmcoIlBhZ2UgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKCiAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2Jq
ZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0g
cGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3Jz
UHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBib29sIGluX2VuYWJsZWQgPSBnZXRCb29s
ZWFuKHBhcmFtc0NvbnRhaW5lclB0ciwgImVuYWJsZWQiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7
CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+
bGVuZ3RoKCkpIHsKICAgICAgICBtX3BhZ2VBZ2VudC0+c2V0Q29udGludW91c1BhaW50aW5nRW5h
YmxlZCgmZXJyb3IsIGluX2VuYWJsZWQpOwoKCiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElk
LCByZXN1bHQucmVsZWFzZSgpLCBjb21tYW5kTmFtZXNba1BhZ2Vfc2V0Q29udGludW91c1BhaW50
aW5nRW5hYmxlZENtZF0sIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lk
IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6UGFnZV9nZXRTY3JpcHRFeGVjdXRpb25T
dGF0dXMobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0
b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAg
aWYgKCFtX3BhZ2VBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiUGFn
ZSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgUGFnZUNvbW1hbmRIYW5kbGVyOjpS
ZXN1bHQ6OkVudW0gb3V0X3Jlc3VsdDsKCgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVz
dWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwog
ICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX3BhZ2VBZ2VudC0+
Z2V0U2NyaXB0RXhlY3V0aW9uU3RhdHVzKCZlcnJvciwgJm91dF9yZXN1bHQpOwoKICAgICAgICBp
ZiAoIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJyZXN1
bHQiLCBUeXBlQnVpbGRlcjo6Z2V0RW51bUNvbnN0YW50VmFsdWUob3V0X3Jlc3VsdCkpOwogICAg
ICAgIH0KICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGNv
bW1hbmROYW1lc1trUGFnZV9nZXRTY3JpcHRFeGVjdXRpb25TdGF0dXNDbWRdLCBwcm90b2NvbEVy
cm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ckltcGw6OlBhZ2Vfc2V0U2NyaXB0RXhlY3V0aW9uRGlzYWJsZWQobG9uZyBjYWxsSWQsIEluc3Bl
Y3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYg
KCFtX3BhZ2VBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiUGFnZSBo
YW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFt
cyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250
YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90
b2NvbEVycm9ycy5nZXQoKTsKICAgIGJvb2wgaW5fdmFsdWUgPSBnZXRCb29sZWFuKHBhcmFtc0Nv
bnRhaW5lclB0ciwgInZhbHVlIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBF
cnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAg
ICAgICAgbV9wYWdlQWdlbnQtPnNldFNjcmlwdEV4ZWN1dGlvbkRpc2FibGVkKCZlcnJvciwgaW5f
dmFsdWUpOwoKCiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgp
LCBjb21tYW5kTmFtZXNba1BhZ2Vfc2V0U2NyaXB0RXhlY3V0aW9uRGlzYWJsZWRDbWRdLCBwcm90
b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlckltcGw6OlBhZ2Vfc2V0R2VvbG9jYXRpb25PdmVycmlkZShsb25nIGNhbGxJZCwgSW5z
cGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBp
ZiAoIW1fcGFnZUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJQYWdl
IGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFy
YW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0Nv
bnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHBy
b3RvY29sRXJyb3JzLmdldCgpOwogICAgYm9vbCBsYXRpdHVkZV92YWx1ZUZvdW5kID0gZmFsc2U7
CiAgICBkb3VibGUgaW5fbGF0aXR1ZGUgPSBnZXREb3VibGUocGFyYW1zQ29udGFpbmVyUHRyLCAi
bGF0aXR1ZGUiLCAmbGF0aXR1ZGVfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAg
Ym9vbCBsb25naXR1ZGVfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgZG91YmxlIGluX2xvbmdpdHVk
ZSA9IGdldERvdWJsZShwYXJhbXNDb250YWluZXJQdHIsICJsb25naXR1ZGUiLCAmbG9uZ2l0dWRl
X3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgYWNjdXJhY3lfdmFsdWVG
b3VuZCA9IGZhbHNlOwogICAgZG91YmxlIGluX2FjY3VyYWN5ID0gZ2V0RG91YmxlKHBhcmFtc0Nv
bnRhaW5lclB0ciwgImFjY3VyYWN5IiwgJmFjY3VyYWN5X3ZhbHVlRm91bmQsIHByb3RvY29sRXJy
b3JzUHRyKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29s
RXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fcGFnZUFnZW50LT5zZXRHZW9sb2NhdGlvbk92
ZXJyaWRlKCZlcnJvciwgbGF0aXR1ZGVfdmFsdWVGb3VuZCA/ICZpbl9sYXRpdHVkZSA6IDAsIGxv
bmdpdHVkZV92YWx1ZUZvdW5kID8gJmluX2xvbmdpdHVkZSA6IDAsIGFjY3VyYWN5X3ZhbHVlRm91
bmQgPyAmaW5fYWNjdXJhY3kgOiAwKTsKCgogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwg
cmVzdWx0LnJlbGVhc2UoKSwgY29tbWFuZE5hbWVzW2tQYWdlX3NldEdlb2xvY2F0aW9uT3ZlcnJp
ZGVDbWRdLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlBhZ2VfY2xlYXJHZW9sb2NhdGlvbk92ZXJyaWRlKGxv
bmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9w
YWdlQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIlBhZ2UgaGFuZGxl
ciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1
bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAg
ICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fcGFnZUFnZW50LT5j
bGVhckdlb2xvY2F0aW9uT3ZlcnJpZGUoJmVycm9yKTsKCgogICAgfQogICAgc2VuZFJlc3BvbnNl
KGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgY29tbWFuZE5hbWVzW2tQYWdlX2NsZWFyR2VvbG9j
YXRpb25PdmVycmlkZUNtZF0sIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2
b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6UGFnZV9jYW5PdmVycmlkZUdlb2xv
Y2F0aW9uKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAg
IGlmICghbV9wYWdlQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIlBh
Z2UgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIGJvb2wgb3V0X3Jlc3VsdDsKCgog
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVu
Z3RoKCkpIHsKICAgICAgICBtX3BhZ2VBZ2VudC0+Y2FuT3ZlcnJpZGVHZW9sb2NhdGlvbigmZXJy
b3IsICZvdXRfcmVzdWx0KTsKCiAgICAgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkgewogICAgICAg
ICAgICByZXN1bHQtPnNldEJvb2xlYW4oInJlc3VsdCIsIG91dF9yZXN1bHQpOwogICAgICAgIH0K
ICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGNvbW1hbmRO
YW1lc1trUGFnZV9jYW5PdmVycmlkZUdlb2xvY2F0aW9uQ21kXSwgcHJvdG9jb2xFcnJvcnMucmVs
ZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpQ
YWdlX3NldERldmljZU9yaWVudGF0aW9uT3ZlcnJpZGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9i
amVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4g
cHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX3Bh
Z2VBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiUGFnZSBoYW5kbGVy
IGlzIG5vdCBhdmFpbGFibGUuIik7CgoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFt
c0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwog
ICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIu
Z2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVy
cm9ycy5nZXQoKTsKICAgIGRvdWJsZSBpbl9hbHBoYSA9IGdldERvdWJsZShwYXJhbXNDb250YWlu
ZXJQdHIsICJhbHBoYSIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGRvdWJsZSBpbl9iZXRh
ID0gZ2V0RG91YmxlKHBhcmFtc0NvbnRhaW5lclB0ciwgImJldGEiLCAwLCBwcm90b2NvbEVycm9y
c1B0cik7CiAgICBkb3VibGUgaW5fZ2FtbWEgPSBnZXREb3VibGUocGFyYW1zQ29udGFpbmVyUHRy
LCAiZ2FtbWEiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5n
IGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX3Bh
Z2VBZ2VudC0+c2V0RGV2aWNlT3JpZW50YXRpb25PdmVycmlkZSgmZXJyb3IsIGluX2FscGhhLCBp
bl9iZXRhLCBpbl9nYW1tYSk7CgoKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3Vs
dC5yZWxlYXNlKCksIGNvbW1hbmROYW1lc1trUGFnZV9zZXREZXZpY2VPcmllbnRhdGlvbk92ZXJy
aWRlQ21kXSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpQYWdlX2NsZWFyRGV2aWNlT3JpZW50YXRpb25PdmVy
cmlkZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KikKewogICAgUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBp
ZiAoIW1fcGFnZUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJQYWdl
IGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVy
cm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX3BhZ2VB
Z2VudC0+Y2xlYXJEZXZpY2VPcmllbnRhdGlvbk92ZXJyaWRlKCZlcnJvcik7CgoKICAgIH0KICAg
IHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGNvbW1hbmROYW1lc1trUGFn
ZV9jbGVhckRldmljZU9yaWVudGF0aW9uT3ZlcnJpZGVDbWRdLCBwcm90b2NvbEVycm9ycy5yZWxl
YXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlBh
Z2VfY2FuT3ZlcnJpZGVEZXZpY2VPcmllbnRhdGlvbihsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2Jq
ZWN0KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3Bl
Y3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fcGFnZUFnZW50KQogICAgICAgIHByb3Rv
Y29sRXJyb3JzLT5wdXNoU3RyaW5nKCJQYWdlIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsK
CiAgICBib29sIG91dF9yZXN1bHQ7CgoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3Vs
dCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAg
IGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9wYWdlQWdlbnQtPmNh
bk92ZXJyaWRlRGV2aWNlT3JpZW50YXRpb24oJmVycm9yLCAmb3V0X3Jlc3VsdCk7CgogICAgICAg
IGlmICghZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICAgICAgcmVzdWx0LT5zZXRCb29sZWFuKCJy
ZXN1bHQiLCBvdXRfcmVzdWx0KTsKICAgICAgICB9CiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2Fs
bElkLCByZXN1bHQucmVsZWFzZSgpLCBjb21tYW5kTmFtZXNba1BhZ2VfY2FuT3ZlcnJpZGVEZXZp
Y2VPcmllbnRhdGlvbkNtZF0sIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2
b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6UGFnZV9zZXRUb3VjaEVtdWxhdGlv
bkVuYWJsZWQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmpl
Y3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0
b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX3BhZ2VBZ2VudCkKICAgICAgICBwcm90b2Nv
bEVycm9ycy0+cHVzaFN0cmluZygiUGFnZSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgoK
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNz
YWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJh
bXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJh
eSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIGJvb2wgaW5f
ZW5hYmxlZCA9IGdldEJvb2xlYW4ocGFyYW1zQ29udGFpbmVyUHRyLCAiZW5hYmxlZCIsIDAsIHBy
b3RvY29sRXJyb3JzUHRyKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAo
IXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fcGFnZUFnZW50LT5zZXRUb3Vj
aEVtdWxhdGlvbkVuYWJsZWQoJmVycm9yLCBpbl9lbmFibGVkKTsKCgogICAgfQogICAgc2VuZFJl
c3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgY29tbWFuZE5hbWVzW2tQYWdlX3NldFRv
dWNoRW11bGF0aW9uRW5hYmxlZENtZF0sIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3Ip
Owp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6UGFnZV9zZXRFbXVsYXRl
ZE1lZGlhKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0
KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9y
QXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9wYWdlQWdlbnQpCiAgICAgICAgcHJvdG9jb2xF
cnJvcnMtPnB1c2hTdHJpbmcoIlBhZ2UgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKCiAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2Fn
ZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1z
Q29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkq
IHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBTdHJpbmcgaW5f
bWVkaWEgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAibWVkaWEiLCAwLCBwcm90b2Nv
bEVycm9yc1B0cik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90
b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX3BhZ2VBZ2VudC0+c2V0RW11bGF0ZWRN
ZWRpYSgmZXJyb3IsIGluX21lZGlhKTsKCgogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwg
cmVzdWx0LnJlbGVhc2UoKSwgY29tbWFuZE5hbWVzW2tQYWdlX3NldEVtdWxhdGVkTWVkaWFDbWRd
LCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlckltcGw6OlBhZ2VfZ2V0Q29tcG9zaXRpbmdCb3JkZXJzVmlzaWJsZShsb25n
IGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBw
cm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fcGFn
ZUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJQYWdlIGhhbmRsZXIg
aXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBib29sIG91dF9yZXN1bHQ7CgoKICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBF
cnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAg
ICAgICAgbV9wYWdlQWdlbnQtPmdldENvbXBvc2l0aW5nQm9yZGVyc1Zpc2libGUoJmVycm9yLCAm
b3V0X3Jlc3VsdCk7CgogICAgICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICAgICAg
cmVzdWx0LT5zZXRCb29sZWFuKCJyZXN1bHQiLCBvdXRfcmVzdWx0KTsKICAgICAgICB9CiAgICB9
CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBjb21tYW5kTmFtZXNb
a1BhZ2VfZ2V0Q29tcG9zaXRpbmdCb3JkZXJzVmlzaWJsZUNtZF0sIHByb3RvY29sRXJyb3JzLnJl
bGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6
UGFnZV9zZXRDb21wb3NpdGluZ0JvcmRlcnNWaXNpYmxlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JP
YmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9w
YWdlQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIlBhZ2UgaGFuZGxl
ciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJh
bXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsK
ICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVy
LmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xF
cnJvcnMuZ2V0KCk7CiAgICBib29sIGluX3Zpc2libGUgPSBnZXRCb29sZWFuKHBhcmFtc0NvbnRh
aW5lclB0ciwgInZpc2libGUiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVy
cm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAg
ICAgICBtX3BhZ2VBZ2VudC0+c2V0Q29tcG9zaXRpbmdCb3JkZXJzVmlzaWJsZSgmZXJyb3IsIGlu
X3Zpc2libGUpOwoKCiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFz
ZSgpLCBjb21tYW5kTmFtZXNba1BhZ2Vfc2V0Q29tcG9zaXRpbmdCb3JkZXJzVmlzaWJsZUNtZF0s
IHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVySW1wbDo6UGFnZV9jYXB0dXJlU2NyZWVuc2hvdChsb25nIGNhbGxJZCwgSW5z
cGVjdG9yT2JqZWN0KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9y
cyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fcGFnZUFnZW50KQogICAg
ICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJQYWdlIGhhbmRsZXIgaXMgbm90IGF2YWls
YWJsZS4iKTsKCiAgICBTdHJpbmcgb3V0X2RhdGE7CgoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBl
cnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9wYWdl
QWdlbnQtPmNhcHR1cmVTY3JlZW5zaG90KCZlcnJvciwgJm91dF9kYXRhKTsKCiAgICAgICAgaWYg
KCFlcnJvci5sZW5ndGgoKSkgewogICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZygiZGF0YSIs
IG91dF9kYXRhKTsKICAgICAgICB9CiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1
bHQucmVsZWFzZSgpLCBjb21tYW5kTmFtZXNba1BhZ2VfY2FwdHVyZVNjcmVlbnNob3RDbWRdLCBw
cm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlckltcGw6OlBhZ2VfaGFuZGxlSmF2YVNjcmlwdERpYWxvZyhsb25nIGNhbGxJZCwg
SW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAg
ICBpZiAoIW1fcGFnZUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJQ
YWdlIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCgogICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgi
cGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFt
c0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9
IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgYm9vbCBpbl9hY2NlcHQgPSBnZXRCb29sZWFuKHBh
cmFtc0NvbnRhaW5lclB0ciwgImFjY2VwdCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJv
b2wgcHJvbXB0VGV4dF92YWx1ZUZvdW5kID0gZmFsc2U7CiAgICBTdHJpbmcgaW5fcHJvbXB0VGV4
dCA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJwcm9tcHRUZXh0IiwgJnByb21wdFRl
eHRfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmlu
ZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9w
YWdlQWdlbnQtPmhhbmRsZUphdmFTY3JpcHREaWFsb2coJmVycm9yLCBpbl9hY2NlcHQsIHByb21w
dFRleHRfdmFsdWVGb3VuZCA/ICZpbl9wcm9tcHRUZXh0IDogMCk7CgoKICAgIH0KICAgIHNlbmRS
ZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGNvbW1hbmROYW1lc1trUGFnZV9oYW5k
bGVKYXZhU2NyaXB0RGlhbG9nQ21kXSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7
Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpQYWdlX2FyY2hpdmUobG9u
ZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4g
cHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX3Bh
Z2VBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiUGFnZSBoYW5kbGVy
IGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgU3RyaW5nIG91dF9kYXRhOwoKCiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
RXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewog
ICAgICAgIG1fcGFnZUFnZW50LT5hcmNoaXZlKCZlcnJvciwgJm91dF9kYXRhKTsKCiAgICAgICAg
aWYgKCFlcnJvci5sZW5ndGgoKSkgewogICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZygiZGF0
YSIsIG91dF9kYXRhKTsKICAgICAgICB9CiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCBy
ZXN1bHQucmVsZWFzZSgpLCBjb21tYW5kTmFtZXNba1BhZ2VfYXJjaGl2ZUNtZF0sIHByb3RvY29s
RXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9CgojaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdH
RVIpCgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6UHJvZmlsZXJfY2F1c2Vz
UmVjb21waWxhdGlvbihsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KikKewogICAgUmVmUHRy
PEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUo
KTsKCiAgICBpZiAoIW1fcHJvZmlsZXJBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVz
aFN0cmluZygiUHJvZmlsZXIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIGJvb2wg
b3V0X3Jlc3VsdDsKCgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90
b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX3Byb2ZpbGVyQWdlbnQtPmNhdXNlc1Jl
Y29tcGlsYXRpb24oJmVycm9yLCAmb3V0X3Jlc3VsdCk7CgogICAgICAgIGlmICghZXJyb3IubGVu
Z3RoKCkpIHsKICAgICAgICAgICAgcmVzdWx0LT5zZXRCb29sZWFuKCJyZXN1bHQiLCBvdXRfcmVz
dWx0KTsKICAgICAgICB9CiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVs
ZWFzZSgpLCBjb21tYW5kTmFtZXNba1Byb2ZpbGVyX2NhdXNlc1JlY29tcGlsYXRpb25DbWRdLCBw
cm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlckltcGw6OlByb2ZpbGVyX2lzU2FtcGxpbmcobG9uZyBjYWxsSWQsIEluc3BlY3Rv
ck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJ
bnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX3Byb2ZpbGVyQWdlbnQpCiAgICAg
ICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIlByb2ZpbGVyIGhhbmRsZXIgaXMgbm90IGF2
YWlsYWJsZS4iKTsKCiAgICBib29sIG91dF9yZXN1bHQ7CgoKICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmlu
ZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9w
cm9maWxlckFnZW50LT5pc1NhbXBsaW5nKCZlcnJvciwgJm91dF9yZXN1bHQpOwoKICAgICAgICBp
ZiAoIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgICAgIHJlc3VsdC0+c2V0Qm9vbGVhbigicmVz
dWx0Iiwgb3V0X3Jlc3VsdCk7CiAgICAgICAgfQogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJ
ZCwgcmVzdWx0LnJlbGVhc2UoKSwgY29tbWFuZE5hbWVzW2tQcm9maWxlcl9pc1NhbXBsaW5nQ21k
XSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXJJbXBsOjpQcm9maWxlcl9oYXNIZWFwUHJvZmlsZXIobG9uZyBjYWxsSWQs
IEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xF
cnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX3Byb2ZpbGVyQWdl
bnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIlByb2ZpbGVyIGhhbmRsZXIg
aXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBib29sIG91dF9yZXN1bHQ7CgoKICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBF
cnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAg
ICAgICAgbV9wcm9maWxlckFnZW50LT5oYXNIZWFwUHJvZmlsZXIoJmVycm9yLCAmb3V0X3Jlc3Vs
dCk7CgogICAgICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICAgICAgcmVzdWx0LT5z
ZXRCb29sZWFuKCJyZXN1bHQiLCBvdXRfcmVzdWx0KTsKICAgICAgICB9CiAgICB9CiAgICBzZW5k
UmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBjb21tYW5kTmFtZXNba1Byb2ZpbGVy
X2hhc0hlYXBQcm9maWxlckNtZF0sIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9
Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6UHJvZmlsZXJfZW5hYmxlKGxv
bmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9w
cm9maWxlckFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJQcm9maWxl
ciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBl
cnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9wcm9m
aWxlckFnZW50LT5lbmFibGUoJmVycm9yKTsKCgogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJ
ZCwgcmVzdWx0LnJlbGVhc2UoKSwgY29tbWFuZE5hbWVzW2tQcm9maWxlcl9lbmFibGVDbWRdLCBw
cm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlckltcGw6OlByb2ZpbGVyX2Rpc2FibGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9i
amVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNw
ZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX3Byb2ZpbGVyQWdlbnQpCiAgICAgICAg
cHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIlByb2ZpbGVyIGhhbmRsZXIgaXMgbm90IGF2YWls
YWJsZS4iKTsKCgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2Nv
bEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX3Byb2ZpbGVyQWdlbnQtPmRpc2FibGUoJmVy
cm9yKTsKCgogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwg
Y29tbWFuZE5hbWVzW2tQcm9maWxlcl9kaXNhYmxlQ21kXSwgcHJvdG9jb2xFcnJvcnMucmVsZWFz
ZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpQcm9m
aWxlcl9zdGFydChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KikKewogICAgUmVmUHRyPElu
c3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsK
CiAgICBpZiAoIW1fcHJvZmlsZXJBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0
cmluZygiUHJvZmlsZXIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKCiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
RXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewog
ICAgICAgIG1fcHJvZmlsZXJBZ2VudC0+c3RhcnQoJmVycm9yKTsKCgogICAgfQogICAgc2VuZFJl
c3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgY29tbWFuZE5hbWVzW2tQcm9maWxlcl9z
dGFydENtZF0sIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6UHJvZmlsZXJfc3RvcChsb25nIGNhbGxJZCwgSW5z
cGVjdG9yT2JqZWN0KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9y
cyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fcHJvZmlsZXJBZ2VudCkK
ICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiUHJvZmlsZXIgaGFuZGxlciBpcyBu
b3QgYXZhaWxhYmxlLiIpOwoKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAo
IXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fcHJvZmlsZXJBZ2VudC0+c3Rv
cCgmZXJyb3IpOwoKCiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFz
ZSgpLCBjb21tYW5kTmFtZXNba1Byb2ZpbGVyX3N0b3BDbWRdLCBwcm90b2NvbEVycm9ycy5yZWxl
YXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlBy
b2ZpbGVyX2dldFByb2ZpbGVIZWFkZXJzKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqKQp7
CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJy
YXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9wcm9maWxlckFnZW50KQogICAgICAgIHByb3RvY29s
RXJyb3JzLT5wdXNoU3RyaW5nKCJQcm9maWxlciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7
CgogICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6UHJvZmlsZXI6OlBy
b2ZpbGVIZWFkZXI+ID4gb3V0X2hlYWRlcnM7CgoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJv
cjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9wcm9maWxl
ckFnZW50LT5nZXRQcm9maWxlSGVhZGVycygmZXJyb3IsIG91dF9oZWFkZXJzKTsKCiAgICAgICAg
aWYgKCFlcnJvci5sZW5ndGgoKSkgewogICAgICAgICAgICByZXN1bHQtPnNldFZhbHVlKCJoZWFk
ZXJzIiwgb3V0X2hlYWRlcnMpOwogICAgICAgIH0KICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxs
SWQsIHJlc3VsdC5yZWxlYXNlKCksIGNvbW1hbmROYW1lc1trUHJvZmlsZXJfZ2V0UHJvZmlsZUhl
YWRlcnNDbWRdLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlByb2ZpbGVyX2dldENQVVByb2ZpbGUobG9uZyBj
YWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0
cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRl
KCk7CgogICAgaWYgKCFtX3Byb2ZpbGVyQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1
c2hTdHJpbmcoIlByb2ZpbGVyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBSZWZQ
dHI8VHlwZUJ1aWxkZXI6OlByb2ZpbGVyOjpDUFVQcm9maWxlPiBvdXRfcHJvZmlsZTsKCgogICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VP
YmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0Nv
bnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBw
cm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgaW50IGluX3VpZCA9
IGdldEludChwYXJhbXNDb250YWluZXJQdHIsICJ1aWQiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7
CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+
bGVuZ3RoKCkpIHsKICAgICAgICBtX3Byb2ZpbGVyQWdlbnQtPmdldENQVVByb2ZpbGUoJmVycm9y
LCBpbl91aWQsIG91dF9wcm9maWxlKTsKCiAgICAgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkgewog
ICAgICAgICAgICByZXN1bHQtPnNldFZhbHVlKCJwcm9maWxlIiwgb3V0X3Byb2ZpbGUpOwogICAg
ICAgIH0KICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGNv
bW1hbmROYW1lc1trUHJvZmlsZXJfZ2V0Q1BVUHJvZmlsZUNtZF0sIHByb3RvY29sRXJyb3JzLnJl
bGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6
UHJvZmlsZXJfZ2V0SGVhcFNuYXBzaG90KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJl
cXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29s
RXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9wcm9maWxlckFn
ZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJQcm9maWxlciBoYW5kbGVy
IGlzIG5vdCBhdmFpbGFibGUuIik7CgoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFt
c0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwog
ICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIu
Z2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVy
cm9ycy5nZXQoKTsKICAgIGludCBpbl91aWQgPSBnZXRJbnQocGFyYW1zQ29udGFpbmVyUHRyLCAi
dWlkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJv
cjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9wcm9maWxl
ckFnZW50LT5nZXRIZWFwU25hcHNob3QoJmVycm9yLCBpbl91aWQpOwoKCiAgICB9CiAgICBzZW5k
UmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBjb21tYW5kTmFtZXNba1Byb2ZpbGVy
X2dldEhlYXBTbmFwc2hvdENtZF0sIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9
Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6UHJvZmlsZXJfcmVtb3ZlUHJv
ZmlsZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkK
ewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFy
cmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fcHJvZmlsZXJBZ2VudCkKICAgICAgICBwcm90b2Nv
bEVycm9ycy0+cHVzaFN0cmluZygiUHJvZmlsZXIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIp
OwoKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0
TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCog
cGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9y
QXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBTdHJp
bmcgaW5fdHlwZSA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJ0eXBlIiwgMCwgcHJv
dG9jb2xFcnJvcnNQdHIpOwogICAgaW50IGluX3VpZCA9IGdldEludChwYXJhbXNDb250YWluZXJQ
dHIsICJ1aWQiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5n
IGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX3By
b2ZpbGVyQWdlbnQtPnJlbW92ZVByb2ZpbGUoJmVycm9yLCBpbl90eXBlLCBpbl91aWQpOwoKCiAg
ICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBjb21tYW5kTmFt
ZXNba1Byb2ZpbGVyX3JlbW92ZVByb2ZpbGVDbWRdLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCks
IGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlByb2ZpbGVy
X2NsZWFyUHJvZmlsZXMobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJlZlB0
cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRl
KCk7CgogICAgaWYgKCFtX3Byb2ZpbGVyQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1
c2hTdHJpbmcoIlByb2ZpbGVyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCgogICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
ICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkp
IHsKICAgICAgICBtX3Byb2ZpbGVyQWdlbnQtPmNsZWFyUHJvZmlsZXMoJmVycm9yKTsKCgogICAg
fQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgY29tbWFuZE5hbWVz
W2tQcm9maWxlcl9jbGVhclByb2ZpbGVzQ21kXSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBl
cnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpQcm9maWxlcl90
YWtlSGVhcFNuYXBzaG90KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNz
YWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0g
SW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9wcm9maWxlckFnZW50KQogICAg
ICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJQcm9maWxlciBoYW5kbGVyIGlzIG5vdCBh
dmFpbGFibGUuIik7CgoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5l
ciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVj
dG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAg
ICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQo
KTsKICAgIGJvb2wgcmVwb3J0UHJvZ3Jlc3NfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgYm9vbCBp
bl9yZXBvcnRQcm9ncmVzcyA9IGdldEJvb2xlYW4ocGFyYW1zQ29udGFpbmVyUHRyLCAicmVwb3J0
UHJvZ3Jlc3MiLCAmcmVwb3J0UHJvZ3Jlc3NfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIp
OwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMt
Pmxlbmd0aCgpKSB7CiAgICAgICAgbV9wcm9maWxlckFnZW50LT50YWtlSGVhcFNuYXBzaG90KCZl
cnJvciwgcmVwb3J0UHJvZ3Jlc3NfdmFsdWVGb3VuZCA/ICZpbl9yZXBvcnRQcm9ncmVzcyA6IDAp
OwoKCiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBjb21t
YW5kTmFtZXNba1Byb2ZpbGVyX3Rha2VIZWFwU25hcHNob3RDbWRdLCBwcm90b2NvbEVycm9ycy5y
ZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6
OlByb2ZpbGVyX2NvbGxlY3RHYXJiYWdlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqKQp7
CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJy
YXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9wcm9maWxlckFnZW50KQogICAgICAgIHByb3RvY29s
RXJyb3JzLT5wdXNoU3RyaW5nKCJQcm9maWxlciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7
CgoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMt
Pmxlbmd0aCgpKSB7CiAgICAgICAgbV9wcm9maWxlckFnZW50LT5jb2xsZWN0R2FyYmFnZSgmZXJy
b3IpOwoKCiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBj
b21tYW5kTmFtZXNba1Byb2ZpbGVyX2NvbGxlY3RHYXJiYWdlQ21kXSwgcHJvdG9jb2xFcnJvcnMu
cmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBs
OjpQcm9maWxlcl9nZXRPYmplY3RCeUhlYXBPYmplY3RJZChsb25nIGNhbGxJZCwgSW5zcGVjdG9y
T2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5
PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1f
cHJvZmlsZXJBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiUHJvZmls
ZXIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6
UnVudGltZTo6UmVtb3RlT2JqZWN0PiBvdXRfcmVzdWx0OwoKCiAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0
KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFy
YW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRy
ID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBTdHJpbmcgaW5fb2JqZWN0SWQgPSBnZXRTdHJp
bmcocGFyYW1zQ29udGFpbmVyUHRyLCAib2JqZWN0SWQiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7
CiAgICBib29sIG9iamVjdEdyb3VwX3ZhbHVlRm91bmQgPSBmYWxzZTsKICAgIFN0cmluZyBpbl9v
YmplY3RHcm91cCA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJvYmplY3RHcm91cCIs
ICZvYmplY3RHcm91cF92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAg
IEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsK
ICAgICAgICBtX3Byb2ZpbGVyQWdlbnQtPmdldE9iamVjdEJ5SGVhcE9iamVjdElkKCZlcnJvciwg
aW5fb2JqZWN0SWQsIG9iamVjdEdyb3VwX3ZhbHVlRm91bmQgPyAmaW5fb2JqZWN0R3JvdXAgOiAw
LCBvdXRfcmVzdWx0KTsKCiAgICAgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkgewogICAgICAgICAg
ICByZXN1bHQtPnNldFZhbHVlKCJyZXN1bHQiLCBvdXRfcmVzdWx0KTsKICAgICAgICB9CiAgICB9
CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBjb21tYW5kTmFtZXNb
a1Byb2ZpbGVyX2dldE9iamVjdEJ5SGVhcE9iamVjdElkQ21kXSwgcHJvdG9jb2xFcnJvcnMucmVs
ZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpQ
cm9maWxlcl9nZXRIZWFwT2JqZWN0SWQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVx
dWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xF
cnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX3Byb2ZpbGVyQWdl
bnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIlByb2ZpbGVyIGhhbmRsZXIg
aXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBUeXBlQnVpbGRlcjo6UHJvZmlsZXI6OkhlYXBTbmFw
c2hvdE9iamVjdElkIG91dF9oZWFwU25hcHNob3RPYmplY3RJZDsKCgogICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9i
amVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9
IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9y
c1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgU3RyaW5nIGluX29iamVjdElkID0gZ2V0
U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgIm9iamVjdElkIiwgMCwgcHJvdG9jb2xFcnJvcnNQ
dHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJv
cnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9wcm9maWxlckFnZW50LT5nZXRIZWFwT2JqZWN0SWQo
JmVycm9yLCBpbl9vYmplY3RJZCwgJm91dF9oZWFwU25hcHNob3RPYmplY3RJZCk7CgogICAgICAg
IGlmICghZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoImhl
YXBTbmFwc2hvdE9iamVjdElkIiwgb3V0X2hlYXBTbmFwc2hvdE9iamVjdElkKTsKICAgICAgICB9
CiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBjb21tYW5k
TmFtZXNba1Byb2ZpbGVyX2dldEhlYXBPYmplY3RJZENtZF0sIHByb3RvY29sRXJyb3JzLnJlbGVh
c2UoKSwgZXJyb3IpOwp9CgojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCgp2
b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6UnVudGltZV9wYXJzZShsb25nIGNh
bGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRy
PEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUo
KTsKCiAgICBpZiAoIW1fcnVudGltZUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNo
U3RyaW5nKCJSdW50aW1lIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBUeXBlQnVp
bGRlcjo6UnVudGltZTo6U3ludGF4RXJyb3JUeXBlOjpFbnVtIG91dF9yZXN1bHQ7CiAgICBUeXBl
QnVpbGRlcjo6T3B0T3V0cHV0PFN0cmluZz4gb3V0X21lc3NhZ2U7CiAgICBSZWZQdHI8VHlwZUJ1
aWxkZXI6OlJ1bnRpbWU6OkVycm9yUmFuZ2U+IG91dF9yYW5nZTsKCgogICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9i
amVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9
IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9y
c1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgU3RyaW5nIGluX3NvdXJjZSA9IGdldFN0
cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJzb3VyY2UiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7
CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+
bGVuZ3RoKCkpIHsKICAgICAgICBtX3J1bnRpbWVBZ2VudC0+cGFyc2UoJmVycm9yLCBpbl9zb3Vy
Y2UsICZvdXRfcmVzdWx0LCAmb3V0X21lc3NhZ2UsIG91dF9yYW5nZSk7CgogICAgICAgIGlmICgh
ZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInJlc3VsdCIs
IFR5cGVCdWlsZGVyOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShvdXRfcmVzdWx0KSk7CiAgICAgICAg
ICAgIGlmIChvdXRfbWVzc2FnZS5pc0Fzc2lnbmVkKCkpCiAgICAgICAgICAgICAgICByZXN1bHQt
PnNldFN0cmluZygibWVzc2FnZSIsIG91dF9tZXNzYWdlLmdldFZhbHVlKCkpOwogICAgICAgICAg
ICBpZiAob3V0X3JhbmdlKQogICAgICAgICAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZSgicmFuZ2Ui
LCBvdXRfcmFuZ2UpOwogICAgICAgIH0KICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJl
c3VsdC5yZWxlYXNlKCksIGNvbW1hbmROYW1lc1trUnVudGltZV9wYXJzZUNtZF0sIHByb3RvY29s
RXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVySW1wbDo6UnVudGltZV9ldmFsdWF0ZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiBy
ZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2Nv
bEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fcnVudGltZUFn
ZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJSdW50aW1lIGhhbmRsZXIg
aXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJl
bW90ZU9iamVjdD4gb3V0X3Jlc3VsdDsKICAgIFR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8Ym9vbD4g
b3V0X3dhc1Rocm93bjsKCgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFp
bmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNw
ZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsK
ICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdl
dCgpOwogICAgU3RyaW5nIGluX2V4cHJlc3Npb24gPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVy
UHRyLCAiZXhwcmVzc2lvbiIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgb2JqZWN0
R3JvdXBfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgU3RyaW5nIGluX29iamVjdEdyb3VwID0gZ2V0
U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgIm9iamVjdEdyb3VwIiwgJm9iamVjdEdyb3VwX3Zh
bHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgaW5jbHVkZUNvbW1hbmRMaW5l
QVBJX3ZhbHVlRm91bmQgPSBmYWxzZTsKICAgIGJvb2wgaW5faW5jbHVkZUNvbW1hbmRMaW5lQVBJ
ID0gZ2V0Qm9vbGVhbihwYXJhbXNDb250YWluZXJQdHIsICJpbmNsdWRlQ29tbWFuZExpbmVBUEki
LCAmaW5jbHVkZUNvbW1hbmRMaW5lQVBJX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsK
ICAgIGJvb2wgZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlX3ZhbHVlRm91bmQg
PSBmYWxzZTsKICAgIGJvb2wgaW5fZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xl
ID0gZ2V0Qm9vbGVhbihwYXJhbXNDb250YWluZXJQdHIsICJkb05vdFBhdXNlT25FeGNlcHRpb25z
QW5kTXV0ZUNvbnNvbGUiLCAmZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlX3Zh
bHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgY29udGV4dElkX3ZhbHVlRm91
bmQgPSBmYWxzZTsKICAgIGludCBpbl9jb250ZXh0SWQgPSBnZXRJbnQocGFyYW1zQ29udGFpbmVy
UHRyLCAiY29udGV4dElkIiwgJmNvbnRleHRJZF92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0
cik7CiAgICBib29sIHJldHVybkJ5VmFsdWVfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgYm9vbCBp
bl9yZXR1cm5CeVZhbHVlID0gZ2V0Qm9vbGVhbihwYXJhbXNDb250YWluZXJQdHIsICJyZXR1cm5C
eVZhbHVlIiwgJnJldHVybkJ5VmFsdWVfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOwog
ICAgYm9vbCBnZW5lcmF0ZVByZXZpZXdfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgYm9vbCBpbl9n
ZW5lcmF0ZVByZXZpZXcgPSBnZXRCb29sZWFuKHBhcmFtc0NvbnRhaW5lclB0ciwgImdlbmVyYXRl
UHJldmlldyIsICZnZW5lcmF0ZVByZXZpZXdfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIp
OwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMt
Pmxlbmd0aCgpKSB7CiAgICAgICAgbV9ydW50aW1lQWdlbnQtPmV2YWx1YXRlKCZlcnJvciwgaW5f
ZXhwcmVzc2lvbiwgb2JqZWN0R3JvdXBfdmFsdWVGb3VuZCA/ICZpbl9vYmplY3RHcm91cCA6IDAs
IGluY2x1ZGVDb21tYW5kTGluZUFQSV92YWx1ZUZvdW5kID8gJmluX2luY2x1ZGVDb21tYW5kTGlu
ZUFQSSA6IDAsIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZV92YWx1ZUZvdW5k
ID8gJmluX2RvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSA6IDAsIGNvbnRleHRJ
ZF92YWx1ZUZvdW5kID8gJmluX2NvbnRleHRJZCA6IDAsIHJldHVybkJ5VmFsdWVfdmFsdWVGb3Vu
ZCA/ICZpbl9yZXR1cm5CeVZhbHVlIDogMCwgZ2VuZXJhdGVQcmV2aWV3X3ZhbHVlRm91bmQgPyAm
aW5fZ2VuZXJhdGVQcmV2aWV3IDogMCwgb3V0X3Jlc3VsdCwgJm91dF93YXNUaHJvd24pOwoKICAg
ICAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUo
InJlc3VsdCIsIG91dF9yZXN1bHQpOwogICAgICAgICAgICBpZiAob3V0X3dhc1Rocm93bi5pc0Fz
c2lnbmVkKCkpCiAgICAgICAgICAgICAgICByZXN1bHQtPnNldEJvb2xlYW4oIndhc1Rocm93biIs
IG91dF93YXNUaHJvd24uZ2V0VmFsdWUoKSk7CiAgICAgICAgfQogICAgfQogICAgc2VuZFJlc3Bv
bnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgY29tbWFuZE5hbWVzW2tSdW50aW1lX2V2YWx1
YXRlQ21kXSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpSdW50aW1lX2NhbGxGdW5jdGlvbk9uKGxvbmcgY2Fs
bElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgp
OwoKICAgIGlmICghbV9ydW50aW1lQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hT
dHJpbmcoIlJ1bnRpbWUgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIFJlZlB0cjxU
eXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiBvdXRfcmVzdWx0OwogICAgVHlwZUJ1
aWxkZXI6Ok9wdE91dHB1dDxib29sPiBvdXRfd2FzVGhyb3duOwoKCiAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2Jq
ZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0g
cGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3Jz
UHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBTdHJpbmcgaW5fb2JqZWN0SWQgPSBnZXRT
dHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCAib2JqZWN0SWQiLCAwLCBwcm90b2NvbEVycm9yc1B0
cik7CiAgICBTdHJpbmcgaW5fZnVuY3Rpb25EZWNsYXJhdGlvbiA9IGdldFN0cmluZyhwYXJhbXND
b250YWluZXJQdHIsICJmdW5jdGlvbkRlY2xhcmF0aW9uIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIp
OwogICAgYm9vbCBhcmd1bWVudHNfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiBpbl9hcmd1bWVudHMgPSBnZXRBcnJheShwYXJhbXNDb250YWluZXJQdHIsICJh
cmd1bWVudHMiLCAmYXJndW1lbnRzX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKICAg
IGJvb2wgZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlX3ZhbHVlRm91bmQgPSBm
YWxzZTsKICAgIGJvb2wgaW5fZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlID0g
Z2V0Qm9vbGVhbihwYXJhbXNDb250YWluZXJQdHIsICJkb05vdFBhdXNlT25FeGNlcHRpb25zQW5k
TXV0ZUNvbnNvbGUiLCAmZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlX3ZhbHVl
Rm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgcmV0dXJuQnlWYWx1ZV92YWx1ZUZv
dW5kID0gZmFsc2U7CiAgICBib29sIGluX3JldHVybkJ5VmFsdWUgPSBnZXRCb29sZWFuKHBhcmFt
c0NvbnRhaW5lclB0ciwgInJldHVybkJ5VmFsdWUiLCAmcmV0dXJuQnlWYWx1ZV92YWx1ZUZvdW5k
LCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBib29sIGdlbmVyYXRlUHJldmlld192YWx1ZUZvdW5k
ID0gZmFsc2U7CiAgICBib29sIGluX2dlbmVyYXRlUHJldmlldyA9IGdldEJvb2xlYW4ocGFyYW1z
Q29udGFpbmVyUHRyLCAiZ2VuZXJhdGVQcmV2aWV3IiwgJmdlbmVyYXRlUHJldmlld192YWx1ZUZv
dW5kLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVz
dWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwog
ICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX3J1bnRpbWVBZ2Vu
dC0+Y2FsbEZ1bmN0aW9uT24oJmVycm9yLCBpbl9vYmplY3RJZCwgaW5fZnVuY3Rpb25EZWNsYXJh
dGlvbiwgYXJndW1lbnRzX3ZhbHVlRm91bmQgPyAmaW5fYXJndW1lbnRzIDogMCwgZG9Ob3RQYXVz
ZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlX3ZhbHVlRm91bmQgPyAmaW5fZG9Ob3RQYXVzZU9u
RXhjZXB0aW9uc0FuZE11dGVDb25zb2xlIDogMCwgcmV0dXJuQnlWYWx1ZV92YWx1ZUZvdW5kID8g
JmluX3JldHVybkJ5VmFsdWUgOiAwLCBnZW5lcmF0ZVByZXZpZXdfdmFsdWVGb3VuZCA/ICZpbl9n
ZW5lcmF0ZVByZXZpZXcgOiAwLCBvdXRfcmVzdWx0LCAmb3V0X3dhc1Rocm93bik7CgogICAgICAg
IGlmICghZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZSgicmVz
dWx0Iiwgb3V0X3Jlc3VsdCk7CiAgICAgICAgICAgIGlmIChvdXRfd2FzVGhyb3duLmlzQXNzaWdu
ZWQoKSkKICAgICAgICAgICAgICAgIHJlc3VsdC0+c2V0Qm9vbGVhbigid2FzVGhyb3duIiwgb3V0
X3dhc1Rocm93bi5nZXRWYWx1ZSgpKTsKICAgICAgICB9CiAgICB9CiAgICBzZW5kUmVzcG9uc2Uo
Y2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBjb21tYW5kTmFtZXNba1J1bnRpbWVfY2FsbEZ1bmN0
aW9uT25DbWRdLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlJ1bnRpbWVfZ2V0UHJvcGVydGllcyhsb25nIGNh
bGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRy
PEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUo
KTsKCiAgICBpZiAoIW1fcnVudGltZUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNo
U3RyaW5nKCJSdW50aW1lIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBSZWZQdHI8
VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpSdW50aW1lOjpQcm9wZXJ0eURlc2NyaXB0
b3I+ID4gb3V0X3Jlc3VsdDsKICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxk
ZXI6OlJ1bnRpbWU6OkludGVybmFsUHJvcGVydHlEZXNjcmlwdG9yPiA+IG91dF9pbnRlcm5hbFBy
b3BlcnRpZXM7CgoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9
IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9y
T2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJ
bnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsK
ICAgIFN0cmluZyBpbl9vYmplY3RJZCA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJv
YmplY3RJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgb3duUHJvcGVydGllc192
YWx1ZUZvdW5kID0gZmFsc2U7CiAgICBib29sIGluX293blByb3BlcnRpZXMgPSBnZXRCb29sZWFu
KHBhcmFtc0NvbnRhaW5lclB0ciwgIm93blByb3BlcnRpZXMiLCAmb3duUHJvcGVydGllc192YWx1
ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9y
OwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX3J1bnRpbWVB
Z2VudC0+Z2V0UHJvcGVydGllcygmZXJyb3IsIGluX29iamVjdElkLCBvd25Qcm9wZXJ0aWVzX3Zh
bHVlRm91bmQgPyAmaW5fb3duUHJvcGVydGllcyA6IDAsIG91dF9yZXN1bHQsIG91dF9pbnRlcm5h
bFByb3BlcnRpZXMpOwoKICAgICAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgICAg
IHJlc3VsdC0+c2V0VmFsdWUoInJlc3VsdCIsIG91dF9yZXN1bHQpOwogICAgICAgICAgICBpZiAo
b3V0X2ludGVybmFsUHJvcGVydGllcykKICAgICAgICAgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUo
ImludGVybmFsUHJvcGVydGllcyIsIG91dF9pbnRlcm5hbFByb3BlcnRpZXMpOwogICAgICAgIH0K
ICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGNvbW1hbmRO
YW1lc1trUnVudGltZV9nZXRQcm9wZXJ0aWVzQ21kXSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgp
LCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpSdW50aW1l
X3JlbGVhc2VPYmplY3QobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3Nh
Z2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJ
bnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX3J1bnRpbWVBZ2VudCkKICAgICAg
ICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiUnVudGltZSBoYW5kbGVyIGlzIG5vdCBhdmFp
bGFibGUuIik7CgoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9
IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9y
T2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJ
bnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsK
ICAgIFN0cmluZyBpbl9vYmplY3RJZCA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJv
YmplY3RJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcg
ZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fcnVu
dGltZUFnZW50LT5yZWxlYXNlT2JqZWN0KCZlcnJvciwgaW5fb2JqZWN0SWQpOwoKCiAgICB9CiAg
ICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBjb21tYW5kTmFtZXNba1J1
bnRpbWVfcmVsZWFzZU9iamVjdENtZF0sIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3Ip
Owp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6UnVudGltZV9yZWxlYXNl
T2JqZWN0R3JvdXAobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VP
YmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNw
ZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX3J1bnRpbWVBZ2VudCkKICAgICAgICBw
cm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiUnVudGltZSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFi
bGUuIik7CgoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJl
cXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2Jq
ZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNw
ZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAg
IFN0cmluZyBpbl9vYmplY3RHcm91cCA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsICJv
YmplY3RHcm91cCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJp
bmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1f
cnVudGltZUFnZW50LT5yZWxlYXNlT2JqZWN0R3JvdXAoJmVycm9yLCBpbl9vYmplY3RHcm91cCk7
CgoKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGNvbW1h
bmROYW1lc1trUnVudGltZV9yZWxlYXNlT2JqZWN0R3JvdXBDbWRdLCBwcm90b2NvbEVycm9ycy5y
ZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6
OlJ1bnRpbWVfcnVuKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgp
OwoKICAgIGlmICghbV9ydW50aW1lQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hT
dHJpbmcoIlJ1bnRpbWUgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKCiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
RXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewog
ICAgICAgIG1fcnVudGltZUFnZW50LT5ydW4oJmVycm9yKTsKCgogICAgfQogICAgc2VuZFJlc3Bv
bnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgY29tbWFuZE5hbWVzW2tSdW50aW1lX3J1bkNt
ZF0sIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVySW1wbDo6UnVudGltZV9lbmFibGUobG9uZyBjYWxsSWQsIEluc3BlY3Rv
ck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJ
bnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX3J1bnRpbWVBZ2VudCkKICAgICAg
ICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiUnVudGltZSBoYW5kbGVyIGlzIG5vdCBhdmFp
bGFibGUuIik7CgoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9j
b2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9ydW50aW1lQWdlbnQtPmVuYWJsZSgmZXJy
b3IpOwoKCiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBj
b21tYW5kTmFtZXNba1J1bnRpbWVfZW5hYmxlQ21kXSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgp
LCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpSdW50aW1l
X2Rpc2FibGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7Cgog
ICAgaWYgKCFtX3J1bnRpbWVBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmlu
ZygiUnVudGltZSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgoKICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJv
clN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAg
ICAgbV9ydW50aW1lQWdlbnQtPmRpc2FibGUoJmVycm9yKTsKCgogICAgfQogICAgc2VuZFJlc3Bv
bnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgY29tbWFuZE5hbWVzW2tSdW50aW1lX2Rpc2Fi
bGVDbWRdLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlRpbWVsaW5lX3N0YXJ0KGxvbmcgY2FsbElkLCBJbnNw
ZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlm
ICghbV90aW1lbGluZUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJU
aW1lbGluZSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgoKICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmpl
Y3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBw
YXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQ
dHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIGJvb2wgbWF4Q2FsbFN0YWNrRGVwdGhfdmFs
dWVGb3VuZCA9IGZhbHNlOwogICAgaW50IGluX21heENhbGxTdGFja0RlcHRoID0gZ2V0SW50KHBh
cmFtc0NvbnRhaW5lclB0ciwgIm1heENhbGxTdGFja0RlcHRoIiwgJm1heENhbGxTdGFja0RlcHRo
X3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgaW5jbHVkZURvbUNvdW50
ZXJzX3ZhbHVlRm91bmQgPSBmYWxzZTsKICAgIGJvb2wgaW5faW5jbHVkZURvbUNvdW50ZXJzID0g
Z2V0Qm9vbGVhbihwYXJhbXNDb250YWluZXJQdHIsICJpbmNsdWRlRG9tQ291bnRlcnMiLCAmaW5j
bHVkZURvbUNvdW50ZXJzX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkg
ewogICAgICAgIG1fdGltZWxpbmVBZ2VudC0+c3RhcnQoJmVycm9yLCBtYXhDYWxsU3RhY2tEZXB0
aF92YWx1ZUZvdW5kID8gJmluX21heENhbGxTdGFja0RlcHRoIDogMCwgaW5jbHVkZURvbUNvdW50
ZXJzX3ZhbHVlRm91bmQgPyAmaW5faW5jbHVkZURvbUNvdW50ZXJzIDogMCk7CgoKICAgIH0KICAg
IHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGNvbW1hbmROYW1lc1trVGlt
ZWxpbmVfc3RhcnRDbWRdLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9p
ZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlRpbWVsaW5lX3N0b3AobG9uZyBjYWxs
SWQsIEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9j
b2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX3RpbWVsaW5l
QWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIlRpbWVsaW5lIGhhbmRs
ZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVz
dWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwog
ICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX3RpbWVsaW5lQWdl
bnQtPnN0b3AoJmVycm9yKTsKCgogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0
LnJlbGVhc2UoKSwgY29tbWFuZE5hbWVzW2tUaW1lbGluZV9zdG9wQ21kXSwgcHJvdG9jb2xFcnJv
cnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJ
bXBsOjpUaW1lbGluZV9zdXBwb3J0c0ZyYW1lSW5zdHJ1bWVudGF0aW9uKGxvbmcgY2FsbElkLCBJ
bnNwZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJy
b3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV90aW1lbGluZUFnZW50
KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJUaW1lbGluZSBoYW5kbGVyIGlz
IG5vdCBhdmFpbGFibGUuIik7CgogICAgYm9vbCBvdXRfcmVzdWx0OwoKCiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJy
b3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAg
ICAgIG1fdGltZWxpbmVBZ2VudC0+c3VwcG9ydHNGcmFtZUluc3RydW1lbnRhdGlvbigmZXJyb3Is
ICZvdXRfcmVzdWx0KTsKCiAgICAgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkgewogICAgICAgICAg
ICByZXN1bHQtPnNldEJvb2xlYW4oInJlc3VsdCIsIG91dF9yZXN1bHQpOwogICAgICAgIH0KICAg
IH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGNvbW1hbmROYW1l
c1trVGltZWxpbmVfc3VwcG9ydHNGcmFtZUluc3RydW1lbnRhdGlvbkNtZF0sIHByb3RvY29sRXJy
b3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
SW1wbDo6VGltZWxpbmVfY2FuTW9uaXRvck1haW5UaHJlYWQobG9uZyBjYWxsSWQsIEluc3BlY3Rv
ck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJ
bnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX3RpbWVsaW5lQWdlbnQpCiAgICAg
ICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIlRpbWVsaW5lIGhhbmRsZXIgaXMgbm90IGF2
YWlsYWJsZS4iKTsKCiAgICBib29sIG91dF9yZXN1bHQ7CgoKICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmlu
ZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV90
aW1lbGluZUFnZW50LT5jYW5Nb25pdG9yTWFpblRocmVhZCgmZXJyb3IsICZvdXRfcmVzdWx0KTsK
CiAgICAgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkgewogICAgICAgICAgICByZXN1bHQtPnNldEJv
b2xlYW4oInJlc3VsdCIsIG91dF9yZXN1bHQpOwogICAgICAgIH0KICAgIH0KICAgIHNlbmRSZXNw
b25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGNvbW1hbmROYW1lc1trVGltZWxpbmVfY2Fu
TW9uaXRvck1haW5UaHJlYWRDbWRdLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsK
fQoKI2lmIEVOQUJMRShXT1JLRVJTKQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcklt
cGw6Oldvcmtlcl9lbmFibGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJl
ZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3Jl
YXRlKCk7CgogICAgaWYgKCFtX3dvcmtlckFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5w
dXNoU3RyaW5nKCJXb3JrZXIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKCiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkg
ewogICAgICAgIG1fd29ya2VyQWdlbnQtPmVuYWJsZSgmZXJyb3IpOwoKCiAgICB9CiAgICBzZW5k
UmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBjb21tYW5kTmFtZXNba1dvcmtlcl9l
bmFibGVDbWRdLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6Oldvcmtlcl9kaXNhYmxlKGxvbmcgY2FsbElkLCBJ
bnNwZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJy
b3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV93b3JrZXJBZ2VudCkK
ICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiV29ya2VyIGhhbmRsZXIgaXMgbm90
IGF2YWlsYWJsZS4iKTsKCgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFw
cm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX3dvcmtlckFnZW50LT5kaXNhYmxl
KCZlcnJvcik7CgoKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNl
KCksIGNvbW1hbmROYW1lc1trV29ya2VyX2Rpc2FibGVDbWRdLCBwcm90b2NvbEVycm9ycy5yZWxl
YXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6Oldv
cmtlcl9zZW5kTWVzc2FnZVRvV29ya2VyKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJl
cXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29s
RXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV93b3JrZXJBZ2Vu
dCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiV29ya2VyIGhhbmRsZXIgaXMg
bm90IGF2YWlsYWJsZS4iKTsKCgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29u
dGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJ
bnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQo
KTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3Jz
LmdldCgpOwogICAgaW50IGluX3dvcmtlcklkID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwg
IndvcmtlcklkIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gaW5fbWVzc2FnZSA9IGdldE9iamVjdChwYXJhbXNDb250YWluZXJQdHIsICJtZXNzYWdl
IiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJl
c3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsK
ICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV93b3JrZXJBZ2Vu
dC0+c2VuZE1lc3NhZ2VUb1dvcmtlcigmZXJyb3IsIGluX3dvcmtlcklkLCBpbl9tZXNzYWdlKTsK
CgogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgY29tbWFu
ZE5hbWVzW2tXb3JrZXJfc2VuZE1lc3NhZ2VUb1dvcmtlckNtZF0sIHByb3RvY29sRXJyb3JzLnJl
bGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6
V29ya2VyX2Nhbkluc3BlY3RXb3JrZXJzKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqKQp7
CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJy
YXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV93b3JrZXJBZ2VudCkKICAgICAgICBwcm90b2NvbEVy
cm9ycy0+cHVzaFN0cmluZygiV29ya2VyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAg
ICBib29sIG91dF9yZXN1bHQ7CgoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlm
ICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV93b3JrZXJBZ2VudC0+Y2Fu
SW5zcGVjdFdvcmtlcnMoJmVycm9yLCAmb3V0X3Jlc3VsdCk7CgogICAgICAgIGlmICghZXJyb3Iu
bGVuZ3RoKCkpIHsKICAgICAgICAgICAgcmVzdWx0LT5zZXRCb29sZWFuKCJyZXN1bHQiLCBvdXRf
cmVzdWx0KTsKICAgICAgICB9CiAgICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQu
cmVsZWFzZSgpLCBjb21tYW5kTmFtZXNba1dvcmtlcl9jYW5JbnNwZWN0V29ya2Vyc0NtZF0sIHBy
b3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVySW1wbDo6V29ya2VyX2Nvbm5lY3RUb1dvcmtlcihsb25nIGNhbGxJZCwgSW5zcGVj
dG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFy
cmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAo
IW1fd29ya2VyQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIldvcmtl
ciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBh
cmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXND
b250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBw
cm90b2NvbEVycm9ycy5nZXQoKTsKICAgIGludCBpbl93b3JrZXJJZCA9IGdldEludChwYXJhbXND
b250YWluZXJQdHIsICJ3b3JrZXJJZCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkg
ewogICAgICAgIG1fd29ya2VyQWdlbnQtPmNvbm5lY3RUb1dvcmtlcigmZXJyb3IsIGluX3dvcmtl
cklkKTsKCgogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwg
Y29tbWFuZE5hbWVzW2tXb3JrZXJfY29ubmVjdFRvV29ya2VyQ21kXSwgcHJvdG9jb2xFcnJvcnMu
cmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBs
OjpXb3JrZXJfZGlzY29ubmVjdEZyb21Xb3JrZXIobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVj
dCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJv
dG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX3dvcmtl
ckFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJXb3JrZXIgaGFuZGxl
ciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJh
bXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsK
ICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVy
LmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xF
cnJvcnMuZ2V0KCk7CiAgICBpbnQgaW5fd29ya2VySWQgPSBnZXRJbnQocGFyYW1zQ29udGFpbmVy
UHRyLCAid29ya2VySWQiLCAwLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9y
U3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAg
ICBtX3dvcmtlckFnZW50LT5kaXNjb25uZWN0RnJvbVdvcmtlcigmZXJyb3IsIGluX3dvcmtlcklk
KTsKCgogICAgfQogICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgY29t
bWFuZE5hbWVzW2tXb3JrZXJfZGlzY29ubmVjdEZyb21Xb3JrZXJDbWRdLCBwcm90b2NvbEVycm9y
cy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcklt
cGw6Oldvcmtlcl9zZXRBdXRvY29ubmVjdFRvV29ya2Vycyhsb25nIGNhbGxJZCwgSW5zcGVjdG9y
T2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5
PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1f
d29ya2VyQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIldvcmtlciBo
YW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFt
cyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250
YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90
b2NvbEVycm9ycy5nZXQoKTsKICAgIGJvb2wgaW5fdmFsdWUgPSBnZXRCb29sZWFuKHBhcmFtc0Nv
bnRhaW5lclB0ciwgInZhbHVlIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBF
cnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAg
ICAgICAgbV93b3JrZXJBZ2VudC0+c2V0QXV0b2Nvbm5lY3RUb1dvcmtlcnMoJmVycm9yLCBpbl92
YWx1ZSk7CgoKICAgIH0KICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCks
IGNvbW1hbmROYW1lc1trV29ya2VyX3NldEF1dG9jb25uZWN0VG9Xb3JrZXJzQ21kXSwgcHJvdG9j
b2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCiNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykK
CgpQYXNzUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcjo6Y3JlYXRlKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKQp7CiAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVySW1wbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpKTsKfQoKCnZvaWQgSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpkaXNwYXRjaChjb25zdCBTdHJpbmcmIG1lc3NhZ2Up
CnsKICAgIFJlZjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CiAg
ICB0eXBlZGVmIHZvaWQgKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6KkNhbGxIYW5k
bGVyKShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiBtZXNzYWdlT2JqZWN0KTsKICAgIHR5
cGVkZWYgSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPiBEaXNwYXRjaE1hcDsKICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoRGlzcGF0Y2hNYXAsIGRpc3BhdGNoTWFwLCApOwogICAgbG9uZyBjYWxs
SWQgPSAwOwoKICAgIGlmIChkaXNwYXRjaE1hcC5pc0VtcHR5KCkpIHsKICAgICAgICBzdGF0aWMg
Q2FsbEhhbmRsZXIgaGFuZGxlcnNbXSA9IHsKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVySW1wbDo6QXBwbGljYXRpb25DYWNoZV9nZXRGcmFtZXNXaXRoTWFuaWZlc3RzLAog
ICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpBcHBsaWNhdGlvbkNh
Y2hlX2VuYWJsZSwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6
QXBwbGljYXRpb25DYWNoZV9nZXRNYW5pZmVzdEZvckZyYW1lLAogICAgICAgICAgICAmSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpBcHBsaWNhdGlvbkNhY2hlX2dldEFwcGxpY2F0aW9u
Q2FjaGVGb3JGcmFtZSwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1w
bDo6Q1NTX2VuYWJsZSwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1w
bDo6Q1NTX2Rpc2FibGUsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcklt
cGw6OkNTU19nZXRNYXRjaGVkU3R5bGVzRm9yTm9kZSwKICAgICAgICAgICAgJkluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVySW1wbDo6Q1NTX2dldElubGluZVN0eWxlc0Zvck5vZGUsCiAgICAgICAg
ICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkNTU19nZXRDb21wdXRlZFN0eWxl
Rm9yTm9kZSwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6Q1NT
X2dldEFsbFN0eWxlU2hlZXRzLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXJJbXBsOjpDU1NfZ2V0U3R5bGVTaGVldCwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVySW1wbDo6Q1NTX2dldFN0eWxlU2hlZXRUZXh0LAogICAgICAgICAgICAmSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpDU1Nfc2V0U3R5bGVTaGVldFRleHQsCiAgICAgICAg
ICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkNTU19zZXRTdHlsZVRleHQsCiAg
ICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkNTU19zZXRQcm9wZXJ0
eVRleHQsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkNTU190
b2dnbGVQcm9wZXJ0eSwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1w
bDo6Q1NTX3NldFJ1bGVTZWxlY3RvciwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVySW1wbDo6Q1NTX2FkZFJ1bGUsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlckltcGw6OkNTU19nZXRTdXBwb3J0ZWRDU1NQcm9wZXJ0aWVzLAogICAgICAgICAgICAm
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpDU1NfZm9yY2VQc2V1ZG9TdGF0ZSwKICAg
ICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6Q1NTX3N0YXJ0U2VsZWN0
b3JQcm9maWxlciwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6
Q1NTX3N0b3BTZWxlY3RvclByb2ZpbGVyLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXJJbXBsOjpDU1NfZ2V0TmFtZWRGbG93Q29sbGVjdGlvbiwKICAgICAgICAgICAgJklu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6Q2FudmFzX2VuYWJsZSwKICAgICAgICAgICAg
Jkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6Q2FudmFzX2Rpc2FibGUsCiAgICAgICAg
ICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkNhbnZhc19kcm9wVHJhY2VMb2cs
CiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkNhbnZhc19oYXNV
bmluc3RydW1lbnRlZENhbnZhc2VzLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXJJbXBsOjpDYW52YXNfY2FwdHVyZUZyYW1lLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXJJbXBsOjpDYW52YXNfc3RhcnRDYXB0dXJpbmcsCiAgICAgICAgICAgICZJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkNhbnZhc19zdG9wQ2FwdHVyaW5nLAogICAg
ICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpDYW52YXNfZ2V0VHJhY2VM
b2csCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkNhbnZhc19y
ZXBsYXlUcmFjZUxvZywKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1w
bDo6Q2FudmFzX2dldFJlc291cmNlSW5mbywKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVySW1wbDo6Q2FudmFzX2dldFJlc291cmNlU3RhdGUsCiAgICAgICAgICAgICZJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkNvbnNvbGVfZW5hYmxlLAogICAgICAgICAgICAm
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpDb25zb2xlX2Rpc2FibGUsCiAgICAgICAg
ICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkNvbnNvbGVfY2xlYXJNZXNzYWdl
cywKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6Q29uc29sZV9z
ZXRNb25pdG9yaW5nWEhSRW5hYmxlZCwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVySW1wbDo6Q29uc29sZV9hZGRJbnNwZWN0ZWROb2RlLAogICAgICAgICAgICAmSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpDb25zb2xlX2FkZEluc3BlY3RlZEhlYXBPYmplY3Qs
CiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTV9nZXREb2N1
bWVudCwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RE9NX3Jl
cXVlc3RDaGlsZE5vZGVzLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJ
bXBsOjpET01fcXVlcnlTZWxlY3RvciwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVySW1wbDo6RE9NX3F1ZXJ5U2VsZWN0b3JBbGwsCiAgICAgICAgICAgICZJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTV9zZXROb2RlTmFtZSwKICAgICAgICAgICAgJkluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RE9NX3NldE5vZGVWYWx1ZSwKICAgICAgICAgICAg
Jkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RE9NX3JlbW92ZU5vZGUsCiAgICAgICAg
ICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTV9zZXRBdHRyaWJ1dGVWYWx1
ZSwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RE9NX3NldEF0
dHJpYnV0ZXNBc1RleHQsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcklt
cGw6OkRPTV9yZW1vdmVBdHRyaWJ1dGUsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlckltcGw6OkRPTV9nZXRFdmVudExpc3RlbmVyc0Zvck5vZGUsCiAgICAgICAgICAgICZJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTV9nZXRPdXRlckhUTUwsCiAgICAgICAg
ICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTV9zZXRPdXRlckhUTUwsCiAg
ICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTV9wZXJmb3JtU2Vh
cmNoLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpET01fZ2V0
U2VhcmNoUmVzdWx0cywKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1w
bDo6RE9NX2Rpc2NhcmRTZWFyY2hSZXN1bHRzLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXJJbXBsOjpET01fcmVxdWVzdE5vZGUsCiAgICAgICAgICAgICZJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTV9zZXRJbnNwZWN0TW9kZUVuYWJsZWQsCiAgICAgICAg
ICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTV9oaWdobGlnaHRSZWN0LAog
ICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpET01faGlnaGxpZ2h0
UXVhZCwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RE9NX2hp
Z2hsaWdodE5vZGUsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6
OkRPTV9oaWRlSGlnaGxpZ2h0LAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXJJbXBsOjpET01faGlnaGxpZ2h0RnJhbWUsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlckltcGw6OkRPTV9wdXNoTm9kZUJ5UGF0aFRvRnJvbnRlbmQsCiAgICAgICAgICAg
ICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTV9wdXNoTm9kZUJ5QmFja2VuZElk
VG9Gcm9udGVuZCwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6
RE9NX3JlbGVhc2VCYWNrZW5kTm9kZUlkcywKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVySW1wbDo6RE9NX3Jlc29sdmVOb2RlLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXJJbXBsOjpET01fZ2V0QXR0cmlidXRlcywKICAgICAgICAgICAgJkluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RE9NX21vdmVUbywKICAgICAgICAgICAgJkluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RE9NX3VuZG8sCiAgICAgICAgICAgICZJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTV9yZWRvLAogICAgICAgICAgICAmSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXJJbXBsOjpET01fbWFya1VuZG9hYmxlU3RhdGUsCiAgICAgICAgICAg
ICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTV9mb2N1cywKICAgICAgICAgICAg
Jkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RE9NX3NldEZpbGVJbnB1dEZpbGVzLAoj
aWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCgogICAgICAgICAgICAmSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXJJbXBsOjpET01EZWJ1Z2dlcl9zZXRET01CcmVha3BvaW50LAogICAgICAg
ICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpET01EZWJ1Z2dlcl9yZW1vdmVE
T01CcmVha3BvaW50LAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBs
OjpET01EZWJ1Z2dlcl9zZXRFdmVudExpc3RlbmVyQnJlYWtwb2ludCwKICAgICAgICAgICAgJklu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RE9NRGVidWdnZXJfcmVtb3ZlRXZlbnRMaXN0
ZW5lckJyZWFrcG9pbnQsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcklt
cGw6OkRPTURlYnVnZ2VyX3NldEluc3RydW1lbnRhdGlvbkJyZWFrcG9pbnQsCiAgICAgICAgICAg
ICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTURlYnVnZ2VyX3JlbW92ZUluc3Ry
dW1lbnRhdGlvbkJyZWFrcG9pbnQsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlckltcGw6OkRPTURlYnVnZ2VyX3NldFhIUkJyZWFrcG9pbnQsCiAgICAgICAgICAgICZJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTURlYnVnZ2VyX3JlbW92ZVhIUkJyZWFrcG9p
bnQsCiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCiAgICAgICAgICAgICZJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTVN0b3JhZ2VfZW5hYmxlLAogICAgICAg
ICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpET01TdG9yYWdlX2Rpc2FibGUs
CiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRPTVN0b3JhZ2Vf
Z2V0RE9NU3RvcmFnZUl0ZW1zLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXJJbXBsOjpET01TdG9yYWdlX3NldERPTVN0b3JhZ2VJdGVtLAogICAgICAgICAgICAmSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpET01TdG9yYWdlX3JlbW92ZURPTVN0b3JhZ2VJdGVt
LAojaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlckltcGw6OkRhdGFiYXNlX2VuYWJsZSwKICAgICAgICAgICAgJkluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVySW1wbDo6RGF0YWJhc2VfZGlzYWJsZSwKICAgICAgICAgICAgJkluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RGF0YWJhc2VfZ2V0RGF0YWJhc2VUYWJsZU5hbWVz
LAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpEYXRhYmFzZV9l
eGVjdXRlU1FMLAojZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKCiNpZiBFTkFCTEUoSkFW
QVNDUklQVF9ERUJVR0dFUikKCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ckltcGw6OkRlYnVnZ2VyX2NhdXNlc1JlY29tcGlsYXRpb24sCiAgICAgICAgICAgICZJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRlYnVnZ2VyX3N1cHBvcnRzU2VwYXJhdGVTY3JpcHRD
b21waWxhdGlvbkFuZEV4ZWN1dGlvbiwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVySW1wbDo6RGVidWdnZXJfZW5hYmxlLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXJJbXBsOjpEZWJ1Z2dlcl9kaXNhYmxlLAogICAgICAgICAgICAmSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXJJbXBsOjpEZWJ1Z2dlcl9zZXRCcmVha3BvaW50c0FjdGl2ZSwKICAg
ICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RGVidWdnZXJfc2V0QnJl
YWtwb2ludEJ5VXJsLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBs
OjpEZWJ1Z2dlcl9zZXRCcmVha3BvaW50LAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXJJbXBsOjpEZWJ1Z2dlcl9yZW1vdmVCcmVha3BvaW50LAogICAgICAgICAgICAmSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpEZWJ1Z2dlcl9jb250aW51ZVRvTG9jYXRpb24s
CiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRlYnVnZ2VyX3N0
ZXBPdmVyLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpEZWJ1
Z2dlcl9zdGVwSW50bywKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1w
bDo6RGVidWdnZXJfc3RlcE91dCwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVySW1wbDo6RGVidWdnZXJfcGF1c2UsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlckltcGw6OkRlYnVnZ2VyX3Jlc3VtZSwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVySW1wbDo6RGVidWdnZXJfc2VhcmNoSW5Db250ZW50LAogICAgICAgICAgICAm
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpEZWJ1Z2dlcl9jYW5TZXRTY3JpcHRTb3Vy
Y2UsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRlYnVnZ2Vy
X3NldFNjcmlwdFNvdXJjZSwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
SW1wbDo6RGVidWdnZXJfZ2V0U2NyaXB0U291cmNlLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXJJbXBsOjpEZWJ1Z2dlcl9nZXRGdW5jdGlvbkRldGFpbHMsCiAgICAgICAg
ICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRlYnVnZ2VyX3NldFBhdXNlT25F
eGNlcHRpb25zLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpE
ZWJ1Z2dlcl9ldmFsdWF0ZU9uQ2FsbEZyYW1lLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXJJbXBsOjpEZWJ1Z2dlcl9jb21waWxlU2NyaXB0LAogICAgICAgICAgICAmSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpEZWJ1Z2dlcl9ydW5TY3JpcHQsCiAgICAgICAg
ICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkRlYnVnZ2VyX3NldE92ZXJsYXlN
ZXNzYWdlLAojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCgogICAgICAgICAg
ICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpGaWxlU3lzdGVtX2VuYWJsZSwKICAg
ICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RmlsZVN5c3RlbV9kaXNh
YmxlLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpGaWxlU3lz
dGVtX3JlcXVlc3RGaWxlU3lzdGVtUm9vdCwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVySW1wbDo6RmlsZVN5c3RlbV9yZXF1ZXN0RGlyZWN0b3J5Q29udGVudCwKICAgICAg
ICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6RmlsZVN5c3RlbV9yZXF1ZXN0
TWV0YWRhdGEsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkZp
bGVTeXN0ZW1fcmVxdWVzdEZpbGVDb250ZW50LAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXJJbXBsOjpGaWxlU3lzdGVtX2RlbGV0ZUVudHJ5LAogICAgICAgICAgICAmSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpIZWFwUHJvZmlsZXJfaGFzSGVhcFByb2ZpbGVy
LAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpIZWFwUHJvZmls
ZXJfZ2V0UHJvZmlsZUhlYWRlcnMsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlckltcGw6OkhlYXBQcm9maWxlcl9nZXRIZWFwU25hcHNob3QsCiAgICAgICAgICAgICZJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OkhlYXBQcm9maWxlcl9yZW1vdmVQcm9maWxlLAog
ICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpIZWFwUHJvZmlsZXJf
Y2xlYXJQcm9maWxlcywKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1w
bDo6SGVhcFByb2ZpbGVyX3Rha2VIZWFwU25hcHNob3QsCiAgICAgICAgICAgICZJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlckltcGw6OkhlYXBQcm9maWxlcl9jb2xsZWN0R2FyYmFnZSwKICAgICAg
ICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6SGVhcFByb2ZpbGVyX2dldE9i
amVjdEJ5SGVhcE9iamVjdElkLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXJJbXBsOjpIZWFwUHJvZmlsZXJfZ2V0SGVhcE9iamVjdElkLAojaWYgRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCgogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpJ
bmRleGVkREJfZW5hYmxlLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJ
bXBsOjpJbmRleGVkREJfZGlzYWJsZSwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVySW1wbDo6SW5kZXhlZERCX3JlcXVlc3REYXRhYmFzZU5hbWVzLAogICAgICAgICAgICAm
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpJbmRleGVkREJfcmVxdWVzdERhdGFiYXNl
LAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpJbmRleGVkREJf
cmVxdWVzdERhdGEsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6
OkluZGV4ZWREQl9jbGVhck9iamVjdFN0b3JlLAojZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCgogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpJbnB1
dF9kaXNwYXRjaEtleUV2ZW50LAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXJJbXBsOjpJbnB1dF9kaXNwYXRjaE1vdXNlRXZlbnQsCiAgICAgICAgICAgICZJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlckltcGw6Okluc3BlY3Rvcl9lbmFibGUsCiAgICAgICAgICAgICZJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6Okluc3BlY3Rvcl9kaXNhYmxlLAogICAgICAgICAg
ICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpMYXllclRyZWVfZW5hYmxlLAogICAg
ICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpMYXllclRyZWVfZGlzYWJs
ZSwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6TGF5ZXJUcmVl
X2xheWVyc0Zvck5vZGUsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcklt
cGw6OkxheWVyVHJlZV9yZWFzb25zRm9yQ29tcG9zaXRpbmdMYXllciwKICAgICAgICAgICAgJklu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6TWVtb3J5X2dldERPTUNvdW50ZXJzLAogICAg
ICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpOZXR3b3JrX2VuYWJsZSwK
ICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6TmV0d29ya19kaXNh
YmxlLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpOZXR3b3Jr
X3NldFVzZXJBZ2VudE92ZXJyaWRlLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXJJbXBsOjpOZXR3b3JrX3NldEV4dHJhSFRUUEhlYWRlcnMsCiAgICAgICAgICAgICZJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6Ok5ldHdvcmtfZ2V0UmVzcG9uc2VCb2R5LAogICAg
ICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpOZXR3b3JrX3JlcGxheVhI
UiwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6TmV0d29ya19j
YW5DbGVhckJyb3dzZXJDYWNoZSwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVySW1wbDo6TmV0d29ya19jbGVhckJyb3dzZXJDYWNoZSwKICAgICAgICAgICAgJkluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVySW1wbDo6TmV0d29ya19jYW5DbGVhckJyb3dzZXJDb29raWVzLAog
ICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpOZXR3b3JrX2NsZWFy
QnJvd3NlckNvb2tpZXMsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcklt
cGw6Ok5ldHdvcmtfc2V0Q2FjaGVEaXNhYmxlZCwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVySW1wbDo6UGFnZV9lbmFibGUsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlckltcGw6OlBhZ2VfZGlzYWJsZSwKICAgICAgICAgICAgJkluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVySW1wbDo6UGFnZV9hZGRTY3JpcHRUb0V2YWx1YXRlT25Mb2FkLAogICAg
ICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpQYWdlX3JlbW92ZVNjcmlw
dFRvRXZhbHVhdGVPbkxvYWQsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ckltcGw6OlBhZ2VfcmVsb2FkLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXJJbXBsOjpQYWdlX25hdmlnYXRlLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXJJbXBsOjpQYWdlX2dldENvb2tpZXMsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlckltcGw6OlBhZ2VfZGVsZXRlQ29va2llLAogICAgICAgICAgICAmSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXJJbXBsOjpQYWdlX2dldFJlc291cmNlVHJlZSwKICAgICAgICAgICAg
Jkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6UGFnZV9nZXRSZXNvdXJjZUNvbnRlbnQs
CiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlBhZ2Vfc2VhcmNo
SW5SZXNvdXJjZSwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6
UGFnZV9zZWFyY2hJblJlc291cmNlcywKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVySW1wbDo6UGFnZV9zZXREb2N1bWVudENvbnRlbnQsCiAgICAgICAgICAgICZJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlBhZ2VfY2FuT3ZlcnJpZGVEZXZpY2VNZXRyaWNzLAog
ICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpQYWdlX3NldERldmlj
ZU1ldHJpY3NPdmVycmlkZSwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
SW1wbDo6UGFnZV9zZXRTaG93UGFpbnRSZWN0cywKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVySW1wbDo6UGFnZV9jYW5TaG93RGVidWdCb3JkZXJzLAogICAgICAgICAgICAm
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpQYWdlX3NldFNob3dEZWJ1Z0JvcmRlcnMs
CiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlBhZ2VfY2FuU2hv
d0ZQU0NvdW50ZXIsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6
OlBhZ2Vfc2V0U2hvd0ZQU0NvdW50ZXIsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlckltcGw6OlBhZ2VfY2FuQ29udGludW91c2x5UGFpbnQsCiAgICAgICAgICAgICZJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlBhZ2Vfc2V0Q29udGludW91c1BhaW50aW5nRW5h
YmxlZCwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6UGFnZV9n
ZXRTY3JpcHRFeGVjdXRpb25TdGF0dXMsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlckltcGw6OlBhZ2Vfc2V0U2NyaXB0RXhlY3V0aW9uRGlzYWJsZWQsCiAgICAgICAgICAg
ICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlBhZ2Vfc2V0R2VvbG9jYXRpb25PdmVy
cmlkZSwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6UGFnZV9j
bGVhckdlb2xvY2F0aW9uT3ZlcnJpZGUsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlckltcGw6OlBhZ2VfY2FuT3ZlcnJpZGVHZW9sb2NhdGlvbiwKICAgICAgICAgICAgJklu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6UGFnZV9zZXREZXZpY2VPcmllbnRhdGlvbk92
ZXJyaWRlLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpQYWdl
X2NsZWFyRGV2aWNlT3JpZW50YXRpb25PdmVycmlkZSwKICAgICAgICAgICAgJkluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVySW1wbDo6UGFnZV9jYW5PdmVycmlkZURldmljZU9yaWVudGF0aW9uLAog
ICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpQYWdlX3NldFRvdWNo
RW11bGF0aW9uRW5hYmxlZCwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
SW1wbDo6UGFnZV9zZXRFbXVsYXRlZE1lZGlhLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXJJbXBsOjpQYWdlX2dldENvbXBvc2l0aW5nQm9yZGVyc1Zpc2libGUsCiAgICAg
ICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlBhZ2Vfc2V0Q29tcG9zaXRp
bmdCb3JkZXJzVmlzaWJsZSwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
SW1wbDo6UGFnZV9jYXB0dXJlU2NyZWVuc2hvdCwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVySW1wbDo6UGFnZV9oYW5kbGVKYXZhU2NyaXB0RGlhbG9nLAogICAgICAgICAg
ICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpQYWdlX2FyY2hpdmUsCiNpZiBFTkFC
TEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlckltcGw6OlByb2ZpbGVyX2NhdXNlc1JlY29tcGlsYXRpb24sCiAgICAgICAgICAgICZJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlByb2ZpbGVyX2lzU2FtcGxpbmcsCiAgICAg
ICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlByb2ZpbGVyX2hhc0hlYXBQ
cm9maWxlciwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6UHJv
ZmlsZXJfZW5hYmxlLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBs
OjpQcm9maWxlcl9kaXNhYmxlLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXJJbXBsOjpQcm9maWxlcl9zdGFydCwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVySW1wbDo6UHJvZmlsZXJfc3RvcCwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVySW1wbDo6UHJvZmlsZXJfZ2V0UHJvZmlsZUhlYWRlcnMsCiAgICAgICAgICAgICZJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlByb2ZpbGVyX2dldENQVVByb2ZpbGUsCiAg
ICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlByb2ZpbGVyX2dldEhl
YXBTbmFwc2hvdCwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6
UHJvZmlsZXJfcmVtb3ZlUHJvZmlsZSwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVySW1wbDo6UHJvZmlsZXJfY2xlYXJQcm9maWxlcywKICAgICAgICAgICAgJkluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVySW1wbDo6UHJvZmlsZXJfdGFrZUhlYXBTbmFwc2hvdCwKICAgICAg
ICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6UHJvZmlsZXJfY29sbGVjdEdh
cmJhZ2UsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlByb2Zp
bGVyX2dldE9iamVjdEJ5SGVhcE9iamVjdElkLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXJJbXBsOjpQcm9maWxlcl9nZXRIZWFwT2JqZWN0SWQsCiNlbmRpZiAvLyBFTkFC
TEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlckltcGw6OlJ1bnRpbWVfcGFyc2UsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlckltcGw6OlJ1bnRpbWVfZXZhbHVhdGUsCiAgICAgICAgICAgICZJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlckltcGw6OlJ1bnRpbWVfY2FsbEZ1bmN0aW9uT24sCiAgICAgICAgICAg
ICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlJ1bnRpbWVfZ2V0UHJvcGVydGllcywK
ICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6UnVudGltZV9yZWxl
YXNlT2JqZWN0LAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpS
dW50aW1lX3JlbGVhc2VPYmplY3RHcm91cCwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVySW1wbDo6UnVudGltZV9ydW4sCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlckltcGw6OlJ1bnRpbWVfZW5hYmxlLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXJJbXBsOjpSdW50aW1lX2Rpc2FibGUsCiAgICAgICAgICAgICZJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OlRpbWVsaW5lX3N0YXJ0LAogICAgICAgICAgICAmSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpUaW1lbGluZV9zdG9wLAogICAgICAgICAgICAm
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpUaW1lbGluZV9zdXBwb3J0c0ZyYW1lSW5z
dHJ1bWVudGF0aW9uLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBs
OjpUaW1lbGluZV9jYW5Nb25pdG9yTWFpblRocmVhZCwKI2lmIEVOQUJMRShXT1JLRVJTKQoKICAg
ICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6V29ya2VyX2VuYWJsZSwK
ICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6V29ya2VyX2Rpc2Fi
bGUsCiAgICAgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6Oldvcmtlcl9z
ZW5kTWVzc2FnZVRvV29ya2VyLAogICAgICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXJJbXBsOjpXb3JrZXJfY2FuSW5zcGVjdFdvcmtlcnMsCiAgICAgICAgICAgICZJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlckltcGw6Oldvcmtlcl9jb25uZWN0VG9Xb3JrZXIsCiAgICAgICAgICAg
ICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6Oldvcmtlcl9kaXNjb25uZWN0RnJvbVdv
cmtlciwKICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6V29ya2Vy
X3NldEF1dG9jb25uZWN0VG9Xb3JrZXJzLAojZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCgogICAg
ICAgIH07CiAgICAgICAgc2l6ZV90IGxlbmd0aCA9IFdURl9BUlJBWV9MRU5HVEgoY29tbWFuZE5h
bWVzKTsKICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQogICAgICAg
ICAgICBkaXNwYXRjaE1hcC5hZGQoY29tbWFuZE5hbWVzW2ldLCBoYW5kbGVyc1tpXSk7CiAgICB9
CgogICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBwYXJzZWRNZXNzYWdlID0gSW5zcGVjdG9yVmFs
dWU6OnBhcnNlSlNPTihtZXNzYWdlKTsKICAgIGlmICghcGFyc2VkTWVzc2FnZSkgewogICAgICAg
IHJlcG9ydFByb3RvY29sRXJyb3IoMCwgUGFyc2VFcnJvciwgIk1lc3NhZ2UgbXVzdCBiZSBpbiBK
U09OIGZvcm1hdCIpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBtZXNzYWdlT2JqZWN0ID0gcGFyc2VkTWVzc2FnZS0+YXNPYmplY3QoKTsKICAgIGlm
ICghbWVzc2FnZU9iamVjdCkgewogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoMCwgSW52YWxp
ZFJlcXVlc3QsICJNZXNzYWdlIG11c3QgYmUgYSBKU09OaWZpZWQgb2JqZWN0Iik7CiAgICAgICAg
cmV0dXJuOwogICAgfQoKICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gY2FsbElkVmFsdWUgPSBt
ZXNzYWdlT2JqZWN0LT5nZXQoImlkIik7CiAgICBpZiAoIWNhbGxJZFZhbHVlKSB7CiAgICAgICAg
cmVwb3J0UHJvdG9jb2xFcnJvcigwLCBJbnZhbGlkUmVxdWVzdCwgIidpZCcgcHJvcGVydHkgd2Fz
IG5vdCBmb3VuZCIpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoIWNhbGxJZFZhbHVl
LT5hc051bWJlcigmY2FsbElkKSkgewogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoMCwgSW52
YWxpZFJlcXVlc3QsICJUaGUgdHlwZSBvZiAnaWQnIHByb3BlcnR5IG11c3QgYmUgbnVtYmVyIik7
CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gbWV0aG9k
VmFsdWUgPSBtZXNzYWdlT2JqZWN0LT5nZXQoIm1ldGhvZCIpOwogICAgaWYgKCFtZXRob2RWYWx1
ZSkgewogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW52YWxpZFJlcXVlc3Qs
ICInbWV0aG9kJyBwcm9wZXJ0eSB3YXNuJ3QgZm91bmQiKTsKICAgICAgICByZXR1cm47CiAgICB9
CgogICAgU3RyaW5nIG1ldGhvZDsKICAgIGlmICghbWV0aG9kVmFsdWUtPmFzU3RyaW5nKCZtZXRo
b2QpKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnZhbGlkUmVxdWVz
dCwgIlRoZSB0eXBlIG9mICdtZXRob2QnIHByb3BlcnR5IG11c3QgYmUgc3RyaW5nIik7CiAgICAg
ICAgcmV0dXJuOwogICAgfQoKICAgIEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj46Oml0ZXJh
dG9yIGl0ID0gZGlzcGF0Y2hNYXAuZmluZChtZXRob2QpOwogICAgaWYgKGl0ID09IGRpc3BhdGNo
TWFwLmVuZCgpKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBNZXRob2RO
b3RGb3VuZCwgIiciICsgbWV0aG9kICsgIicgd2Fzbid0IGZvdW5kIik7CiAgICAgICAgcmV0dXJu
OwogICAgfQoKICAgICgoKnRoaXMpLippdC0+dmFsdWUpKGNhbGxJZCwgbWVzc2FnZU9iamVjdC5n
ZXQoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpzZW5kUmVzcG9u
c2UobG9uZyBjYWxsSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQsIGNvbnN0
IGNoYXIqIGNvbW1hbmROYW1lLCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVy
cm9ycywgRXJyb3JTdHJpbmcgaW52b2NhdGlvbkVycm9yKQp7CiAgICBpZiAocHJvdG9jb2xFcnJv
cnMtPmxlbmd0aCgpKSB7CiAgICAgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IFN0cmluZzo6Zm9y
bWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCBj
b21tYW5kTmFtZSk7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnZhbGlk
UGFyYW1zLCBlcnJvck1lc3NhZ2UsIHByb3RvY29sRXJyb3JzKTsKICAgICAgICByZXR1cm47CiAg
ICB9CiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIGludm9jYXRpb25FcnJvcik7Cn0K
CnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpzZW5kUmVzcG9uc2UobG9uZyBj
YWxsSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQsIGNvbnN0IEVycm9yU3Ry
aW5nJiBpbnZvY2F0aW9uRXJyb3IpCnsKICAgIGlmIChpbnZvY2F0aW9uRXJyb3IubGVuZ3RoKCkp
IHsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIFNlcnZlckVycm9yLCBpbnZv
Y2F0aW9uRXJyb3IpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiByZXNwb25zZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
cmVzcG9uc2VNZXNzYWdlLT5zZXRPYmplY3QoInJlc3VsdCIsIHJlc3VsdCk7CiAgICByZXNwb25z
ZU1lc3NhZ2UtPnNldE51bWJlcigiaWQiLCBjYWxsSWQpOwogICAgaWYgKG1faW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKQogICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVz
c2FnZVRvRnJvbnRlbmQocmVzcG9uc2VNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQg
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnJlcG9ydFByb3RvY29sRXJyb3IoY29uc3QgbG9u
ZyogY29uc3QgY2FsbElkLCBDb21tb25FcnJvckNvZGUgY29kZSwgY29uc3QgU3RyaW5nJiBlcnJv
ck1lc3NhZ2UpIGNvbnN0CnsKICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBjb2RlLCBl
cnJvck1lc3NhZ2UsIDApOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6
cmVwb3J0UHJvdG9jb2xFcnJvcihjb25zdCBsb25nKiBjb25zdCBjYWxsSWQsIENvbW1vbkVycm9y
Q29kZSBjb2RlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgUGFzc1JlZlB0cjxJbnNwZWN0
b3JBcnJheT4gZGF0YSkgY29uc3QKewogICAgREVGSU5FX1NUQVRJQ19MT0NBTChWZWN0b3I8aW50
PixzX2NvbW1vbkVycm9ycywpOwogICAgaWYgKCFzX2NvbW1vbkVycm9ycy5zaXplKCkpIHsKICAg
ICAgICBzX2NvbW1vbkVycm9ycy5pbnNlcnQoUGFyc2VFcnJvciwgLTMyNzAwKTsKICAgICAgICBz
X2NvbW1vbkVycm9ycy5pbnNlcnQoSW52YWxpZFJlcXVlc3QsIC0zMjYwMCk7CiAgICAgICAgc19j
b21tb25FcnJvcnMuaW5zZXJ0KE1ldGhvZE5vdEZvdW5kLCAtMzI2MDEpOwogICAgICAgIHNfY29t
bW9uRXJyb3JzLmluc2VydChJbnZhbGlkUGFyYW1zLCAtMzI2MDIpOwogICAgICAgIHNfY29tbW9u
RXJyb3JzLmluc2VydChJbnRlcm5hbEVycm9yLCAtMzI2MDMpOwogICAgICAgIHNfY29tbW9uRXJy
b3JzLmluc2VydChTZXJ2ZXJFcnJvciwgLTMyMDAwKTsKICAgIH0KICAgIEFTU0VSVChjb2RlID49
MCk7CiAgICBBU1NFUlQoKHVuc2lnbmVkKWNvZGUgPCBzX2NvbW1vbkVycm9ycy5zaXplKCkpOwog
ICAgQVNTRVJUKHNfY29tbW9uRXJyb3JzW2NvZGVdKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IGVycm9yID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGVycm9yLT5zZXROdW1i
ZXIoImNvZGUiLCBzX2NvbW1vbkVycm9yc1tjb2RlXSk7CiAgICBlcnJvci0+c2V0U3RyaW5nKCJt
ZXNzYWdlIiwgZXJyb3JNZXNzYWdlKTsKICAgIEFTU0VSVChlcnJvcik7CiAgICBpZiAoZGF0YSkK
ICAgICAgICBlcnJvci0+c2V0QXJyYXkoImRhdGEiLCBkYXRhKTsKICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IG1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgbWVzc2Fn
ZS0+c2V0T2JqZWN0KCJlcnJvciIsIGVycm9yLnJlbGVhc2UoKSk7CiAgICBpZiAoY2FsbElkKQog
ICAgICAgIG1lc3NhZ2UtPnNldE51bWJlcigiaWQiLCAqY2FsbElkKTsKICAgIGVsc2UKICAgICAg
ICBtZXNzYWdlLT5zZXRWYWx1ZSgiaWQiLCBJbnNwZWN0b3JWYWx1ZTo6bnVsbCgpKTsKICAgIGlm
IChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKICAgICAgICBtX2luc3BlY3RvckZyb250ZW5k
Q2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKG1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsK
fQoKdGVtcGxhdGU8dHlwZW5hbWUgUiwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVjA+ClIgSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpnZXRQcm9wZXJ0eVZhbHVlSW1wbChJbnNwZWN0b3JP
YmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNw
ZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMsIFYwIGluaXRpYWxfdmFsdWUsIGJvb2wgKCphc19t
ZXRob2QpKEluc3BlY3RvclZhbHVlKiwgViopLCBjb25zdCBjaGFyKiB0eXBlX25hbWUpCnsKICAg
IEFTU0VSVChwcm90b2NvbEVycm9ycyk7CgogICAgaWYgKHZhbHVlRm91bmQpCiAgICAgICAgKnZh
bHVlRm91bmQgPSBmYWxzZTsKCiAgICBWIHZhbHVlID0gaW5pdGlhbF92YWx1ZTsKCiAgICBpZiAo
IW9iamVjdCkgewogICAgICAgIGlmICghdmFsdWVGb3VuZCkgewogICAgICAgICAgICAvLyBSZXF1
aXJlZCBwYXJhbWV0ZXIgaW4gbWlzc2luZyBwYXJhbXMgY29udGFpbmVyLgogICAgICAgICAgICBw
cm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiJ3BhcmFtcycgb2JqZWN0
IG11c3QgY29udGFpbiByZXF1aXJlZCBwYXJhbWV0ZXIgJyVzJyB3aXRoIHR5cGUgJyVzJy4iLCBu
YW1lLnV0ZjgoKS5kYXRhKCksIHR5cGVfbmFtZSkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4g
dmFsdWU7CiAgICB9CgogICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBv
YmplY3QtPmVuZCgpOwogICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciB2YWx1ZUl0
ZXJhdG9yID0gb2JqZWN0LT5maW5kKG5hbWUpOwoKICAgIGlmICh2YWx1ZUl0ZXJhdG9yID09IGVu
ZCkgewogICAgICAgIGlmICghdmFsdWVGb3VuZCkKICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMt
PnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIlBhcmFtZXRlciAnJXMnIHdpdGggdHlwZSAnJXMn
IHdhcyBub3QgZm91bmQuIiwgbmFtZS51dGY4KCkuZGF0YSgpLCB0eXBlX25hbWUpKTsKICAgICAg
ICByZXR1cm4gdmFsdWU7CiAgICB9CgogICAgaWYgKCFhc19tZXRob2QodmFsdWVJdGVyYXRvci0+
dmFsdWUuZ2V0KCksICZ2YWx1ZSkpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmco
U3RyaW5nOjpmb3JtYXQoIlBhcmFtZXRlciAnJXMnIGhhcyB3cm9uZyB0eXBlLiBJdCBtdXN0IGJl
ICclcycuIiwgbmFtZS51dGY4KCkuZGF0YSgpLCB0eXBlX25hbWUpKTsKICAgIGVsc2UKICAgICAg
ICBpZiAodmFsdWVGb3VuZCkKICAgICAgICAgICAgKnZhbHVlRm91bmQgPSB0cnVlOwogICAgcmV0
dXJuIHZhbHVlOwp9CgpzdHJ1Y3QgQXNNZXRob2RCcmlkZ2VzIHsKICAgIHN0YXRpYyBib29sIGFz
SW50KEluc3BlY3RvclZhbHVlKiB2YWx1ZSwgaW50KiBvdXRwdXQpIHsgcmV0dXJuIHZhbHVlLT5h
c051bWJlcihvdXRwdXQpOyB9CiAgICBzdGF0aWMgYm9vbCBhc0RvdWJsZShJbnNwZWN0b3JWYWx1
ZSogdmFsdWUsIGRvdWJsZSogb3V0cHV0KSB7IHJldHVybiB2YWx1ZS0+YXNOdW1iZXIob3V0cHV0
KTsgfQogICAgc3RhdGljIGJvb2wgYXNTdHJpbmcoSW5zcGVjdG9yVmFsdWUqIHZhbHVlLCBTdHJp
bmcqIG91dHB1dCkgeyByZXR1cm4gdmFsdWUtPmFzU3RyaW5nKG91dHB1dCk7IH0KICAgIHN0YXRp
YyBib29sIGFzQm9vbGVhbihJbnNwZWN0b3JWYWx1ZSogdmFsdWUsIGJvb2wqIG91dHB1dCkgeyBy
ZXR1cm4gdmFsdWUtPmFzQm9vbGVhbihvdXRwdXQpOyB9CiAgICBzdGF0aWMgYm9vbCBhc09iamVj
dChJbnNwZWN0b3JWYWx1ZSogdmFsdWUsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBvdXRwdXQp
IHsgcmV0dXJuIHZhbHVlLT5hc09iamVjdChvdXRwdXQpOyB9CiAgICBzdGF0aWMgYm9vbCBhc0Fy
cmF5KEluc3BlY3RvclZhbHVlKiB2YWx1ZSwgUmVmUHRyPEluc3BlY3RvckFycmF5Piogb3V0cHV0
KSB7IHJldHVybiB2YWx1ZS0+YXNBcnJheShvdXRwdXQpOyB9Cn07CgppbnQgSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXJJbXBsOjpnZXRJbnQoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0
IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29s
RXJyb3JzKQp7CiAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZUltcGw8aW50LCBpbnQsIGludD4o
b2JqZWN0LCBuYW1lLCB2YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9ycywgMCwgQXNNZXRob2RCcmlk
Z2VzOjphc0ludCwgIk51bWJlciIpOwp9Cgpkb3VibGUgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXJJbXBsOjpnZXREb3VibGUoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYg
bmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKQp7
CiAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZUltcGw8ZG91YmxlLCBkb3VibGUsIGRvdWJsZT4o
b2JqZWN0LCBuYW1lLCB2YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9ycywgMCwgQXNNZXRob2RCcmlk
Z2VzOjphc0RvdWJsZSwgIk51bWJlciIpOwp9CgpTdHJpbmcgSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXJJbXBsOjpnZXRTdHJpbmcoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3Jz
KQp7CiAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZUltcGw8U3RyaW5nLCBTdHJpbmcsIFN0cmlu
Zz4ob2JqZWN0LCBuYW1lLCB2YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9ycywgIiIsIEFzTWV0aG9k
QnJpZGdlczo6YXNTdHJpbmcsICJTdHJpbmciKTsKfQoKYm9vbCBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlckltcGw6OmdldEJvb2xlYW4oSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0
cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJy
b3JzKQp7CiAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZUltcGw8Ym9vbCwgYm9vbCwgYm9vbD4o
b2JqZWN0LCBuYW1lLCB2YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9ycywgZmFsc2UsIEFzTWV0aG9k
QnJpZGdlczo6YXNCb29sZWFuLCAiQm9vbGVhbiIpOwp9CgpQYXNzUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpnZXRPYmplY3QoSW5zcGVjdG9y
T2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5z
cGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKQp7CiAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1
ZUltcGw8UGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+LCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiwgSW5zcGVjdG9yT2JqZWN0Kj4ob2JqZWN0LCBuYW1lLCB2YWx1ZUZvdW5kLCBwcm90b2NvbEVy
cm9ycywgMCwgQXNNZXRob2RCcmlkZ2VzOjphc09iamVjdCwgIk9iamVjdCIpOwp9CgpQYXNzUmVm
UHRyPEluc3BlY3RvckFycmF5PiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OmdldEFy
cmF5KEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZh
bHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycykKewogICAgcmV0dXJuIGdl
dFByb3BlcnR5VmFsdWVJbXBsPFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+LCBSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+LCBJbnNwZWN0b3JBcnJheSo+KG9iamVjdCwgbmFtZSwgdmFsdWVGb3VuZCwg
cHJvdG9jb2xFcnJvcnMsIDAsIEFzTWV0aG9kQnJpZGdlczo6YXNBcnJheSwgIkFycmF5Iik7Cn0K
Ckluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2U6OkNhbGxiYWNrQmFzZShQ
YXNzUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbD4gYmFja2VuZEltcGwsIGlu
dCBpZCkKICAgIDogbV9iYWNrZW5kSW1wbChiYWNrZW5kSW1wbCksIG1faWQoaWQpLCBtX2FscmVh
ZHlTZW50KGZhbHNlKSB7fQoKSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFz
ZTo6fkNhbGxiYWNrQmFzZSgpIHt9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpD
YWxsYmFja0Jhc2U6OnNlbmRGYWlsdXJlKGNvbnN0IEVycm9yU3RyaW5nJiBlcnJvcikKewogICAg
QVNTRVJUKGVycm9yLmxlbmd0aCgpKTsKICAgIHNlbmRJZkFjdGl2ZSgwLCBlcnJvcik7Cn0KCmJv
b2wgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZTo6aXNBY3RpdmUoKQp7
CiAgICByZXR1cm4gIW1fYWxyZWFkeVNlbnQgJiYgbV9iYWNrZW5kSW1wbC0+aXNBY3RpdmUoKTsK
fQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlOjpzZW5kSWZB
Y3RpdmUoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcnRpYWxNZXNzYWdlLCBjb25zdCBF
cnJvclN0cmluZyYgaW52b2NhdGlvbkVycm9yKQp7CiAgICBpZiAobV9hbHJlYWR5U2VudCkKICAg
ICAgICByZXR1cm47CiAgICBtX2JhY2tlbmRJbXBsLT5zZW5kUmVzcG9uc2UobV9pZCwgcGFydGlh
bE1lc3NhZ2UsIGludm9jYXRpb25FcnJvcik7CiAgICBtX2FscmVhZHlTZW50ID0gdHJ1ZTsKfQoK
Q09NUElMRV9BU1NFUlQoc3RhdGljX2Nhc3Q8aW50PihJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cjo6a01ldGhvZE5hbWVzRW51bVNpemUpID09IFdURl9BUlJBWV9MRU5HVEgoSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6OmNvbW1hbmROYW1lcyksIGNvbW1hbmRfbmFtZV9hcnJheV9wcm9ibGVt
KTsKCn0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKCiNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>216834</attachid>
            <date>2013-11-13 11:59:06 -0800</date>
            <delta_ts>2013-11-13 11:59:06 -0800</delta_ts>
            <desc>[AFTER] InspectorBackendDispatchers.h</desc>
            <filename>InspectorBackendDispatchers.h</filename>
            <type>application/octet-stream</type>
            <size>61100</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">Ly8gRmlsZSBpcyBnZW5lcmF0ZWQgYnkgV2ViQ29yZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2Vu
ZXJhdG9ySW5zcGVjdG9yLnB5CgovLyBDb3B5cmlnaHQgKGMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgovLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIENocm9taXVtIEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KI2lmbmRlZiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnNfaAojZGVm
aW5lIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyc19oCgojaW5jbHVkZSAiSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXIuaCIKI2luY2x1ZGUgIkluc3BlY3RvclR5cGVCdWlsZGVyLmgiCiNpbmNs
dWRlIDx3dGYvUGFzc1JlZlB0ci5oPgojaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Cgpu
YW1lc3BhY2UgV2ViQ29yZSB7CgpjbGFzcyBJbnNwZWN0b3JPYmplY3Q7CmNsYXNzIEluc3BlY3Rv
ckFycmF5OwoKdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CgpjbGFzcyBJbnNwZWN0b3JBcHBs
aWNhdGlvbkNhY2hlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKcHVibGljOgogICAgdmlydHVh
bCB2b2lkIGdldEZyYW1lc1dpdGhNYW5pZmVzdHMoRXJyb3JTdHJpbmcqLCBSZWZQdHI8VHlwZUJ1
aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpBcHBsaWNhdGlvbkNhY2hlOjpGcmFtZVdpdGhNYW5p
ZmVzdD4gPiYgb3V0X2ZyYW1lSWRzKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgZW5hYmxlKEVycm9y
U3RyaW5nKikgPSAwOwogICAgdmlydHVhbCB2b2lkIGdldE1hbmlmZXN0Rm9yRnJhbWUoRXJyb3JT
dHJpbmcqLCBjb25zdCBTdHJpbmcmIGluX2ZyYW1lSWQsIFN0cmluZyogb3V0X21hbmlmZXN0VVJM
KSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgZ2V0QXBwbGljYXRpb25DYWNoZUZvckZyYW1lKEVycm9y
U3RyaW5nKiwgY29uc3QgU3RyaW5nJiBpbl9mcmFtZUlkLCBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFw
cGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGU+JiBvdXRfYXBwbGljYXRpb25DYWNoZSkg
PSAwOwpwcm90ZWN0ZWQ6CiAgICB2aXJ0dWFsIH5JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9Cn07CgpjbGFzcyBJbnNwZWN0b3JDU1NCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIgewpwdWJsaWM6CiAgICB2aXJ0dWFsIHZvaWQgZW5hYmxlKEVycm9y
U3RyaW5nKikgPSAwOwogICAgdmlydHVhbCB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcqKSA9IDA7
CiAgICB2aXJ0dWFsIHZvaWQgZ2V0TWF0Y2hlZFN0eWxlc0Zvck5vZGUoRXJyb3JTdHJpbmcqLCBp
bnQgaW5fbm9kZUlkLCBjb25zdCBib29sKiBpbl9pbmNsdWRlUHNldWRvLCBjb25zdCBib29sKiBp
bl9pbmNsdWRlSW5oZXJpdGVkLCBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVy
OjpDU1M6OlJ1bGVNYXRjaD4gPiYgb3B0X291dF9tYXRjaGVkQ1NTUnVsZXMsIFJlZlB0cjxUeXBl
QnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkNTUzo6UHNldWRvSWRNYXRjaGVzPiA+JiBvcHRf
b3V0X3BzZXVkb0VsZW1lbnRzLCBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVy
OjpDU1M6OkluaGVyaXRlZFN0eWxlRW50cnk+ID4mIG9wdF9vdXRfaW5oZXJpdGVkKSA9IDA7CiAg
ICB2aXJ0dWFsIHZvaWQgZ2V0SW5saW5lU3R5bGVzRm9yTm9kZShFcnJvclN0cmluZyosIGludCBp
bl9ub2RlSWQsIFJlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZT4mIG9wdF9vdXRfaW5s
aW5lU3R5bGUsIFJlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZT4mIG9wdF9vdXRfYXR0
cmlidXRlc1N0eWxlKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgZ2V0Q29tcHV0ZWRTdHlsZUZvck5v
ZGUoRXJyb3JTdHJpbmcqLCBpbnQgaW5fbm9kZUlkLCBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5
PFR5cGVCdWlsZGVyOjpDU1M6OkNTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0eT4gPiYgb3V0X2NvbXB1
dGVkU3R5bGUpID0gMDsKICAgIHZpcnR1YWwgdm9pZCBnZXRBbGxTdHlsZVNoZWV0cyhFcnJvclN0
cmluZyosIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTU3R5
bGVTaGVldEhlYWRlcj4gPiYgb3V0X2hlYWRlcnMpID0gMDsKICAgIHZpcnR1YWwgdm9pZCBnZXRT
dHlsZVNoZWV0KEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBpbl9zdHlsZVNoZWV0SWQsIFJl
ZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9keT4mIG91dF9zdHlsZVNoZWV0
KSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgZ2V0U3R5bGVTaGVldFRleHQoRXJyb3JTdHJpbmcqLCBj
b25zdCBTdHJpbmcmIGluX3N0eWxlU2hlZXRJZCwgU3RyaW5nKiBvdXRfdGV4dCkgPSAwOwogICAg
dmlydHVhbCB2b2lkIHNldFN0eWxlU2hlZXRUZXh0KEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5n
JiBpbl9zdHlsZVNoZWV0SWQsIGNvbnN0IFN0cmluZyYgaW5fdGV4dCkgPSAwOwogICAgdmlydHVh
bCB2b2lkIHNldFN0eWxlVGV4dChFcnJvclN0cmluZyosIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+JiBpbl9zdHlsZUlkLCBjb25zdCBTdHJpbmcmIGluX3RleHQsIFJlZlB0cjxUeXBlQnVp
bGRlcjo6Q1NTOjpDU1NTdHlsZT4mIG91dF9zdHlsZSkgPSAwOwogICAgdmlydHVhbCB2b2lkIHNl
dFByb3BlcnR5VGV4dChFcnJvclN0cmluZyosIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
JiBpbl9zdHlsZUlkLCBpbnQgaW5fcHJvcGVydHlJbmRleCwgY29uc3QgU3RyaW5nJiBpbl90ZXh0
LCBib29sIGluX292ZXJ3cml0ZSwgUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNTU1N0eWxlPiYg
b3V0X3N0eWxlKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgdG9nZ2xlUHJvcGVydHkoRXJyb3JTdHJp
bmcqLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgaW5fc3R5bGVJZCwgaW50IGluX3By
b3BlcnR5SW5kZXgsIGJvb2wgaW5fZGlzYWJsZSwgUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNT
U1N0eWxlPiYgb3V0X3N0eWxlKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgc2V0UnVsZVNlbGVjdG9y
KEVycm9yU3RyaW5nKiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIGluX3J1bGVJZCwg
Y29uc3QgU3RyaW5nJiBpbl9zZWxlY3RvciwgUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNTU1J1
bGU+JiBvdXRfcnVsZSkgPSAwOwogICAgdmlydHVhbCB2b2lkIGFkZFJ1bGUoRXJyb3JTdHJpbmcq
LCBpbnQgaW5fY29udGV4dE5vZGVJZCwgY29uc3QgU3RyaW5nJiBpbl9zZWxlY3RvciwgUmVmUHRy
PFR5cGVCdWlsZGVyOjpDU1M6OkNTU1J1bGU+JiBvdXRfcnVsZSkgPSAwOwogICAgdmlydHVhbCB2
b2lkIGdldFN1cHBvcnRlZENTU1Byb3BlcnRpZXMoRXJyb3JTdHJpbmcqLCBSZWZQdHI8VHlwZUJ1
aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpDU1M6OkNTU1Byb3BlcnR5SW5mbz4gPiYgb3V0X2Nz
c1Byb3BlcnRpZXMpID0gMDsKICAgIHZpcnR1YWwgdm9pZCBmb3JjZVBzZXVkb1N0YXRlKEVycm9y
U3RyaW5nKiwgaW50IGluX25vZGVJZCwgY29uc3QgUmVmUHRyPEluc3BlY3RvckFycmF5PiYgaW5f
Zm9yY2VkUHNldWRvQ2xhc3NlcykgPSAwOwogICAgdmlydHVhbCB2b2lkIHN0YXJ0U2VsZWN0b3JQ
cm9maWxlcihFcnJvclN0cmluZyopID0gMDsKICAgIHZpcnR1YWwgdm9pZCBzdG9wU2VsZWN0b3JQ
cm9maWxlcihFcnJvclN0cmluZyosIFJlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpTZWxlY3RvclBy
b2ZpbGU+JiBvdXRfcHJvZmlsZSkgPSAwOwogICAgdmlydHVhbCB2b2lkIGdldE5hbWVkRmxvd0Nv
bGxlY3Rpb24oRXJyb3JTdHJpbmcqLCBpbnQgaW5fZG9jdW1lbnROb2RlSWQsIFJlZlB0cjxUeXBl
QnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkNTUzo6TmFtZWRGbG93PiA+JiBvdXRfbmFtZWRG
bG93cykgPSAwOwpwcm90ZWN0ZWQ6CiAgICB2aXJ0dWFsIH5JbnNwZWN0b3JDU1NCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIoKSB7IH0KfTsKCmNsYXNzIEluc3BlY3RvckNhbnZhc0JhY2tlbmREaXNw
YXRjaGVySGFuZGxlciB7CnB1YmxpYzoKICAgIHZpcnR1YWwgdm9pZCBlbmFibGUoRXJyb3JTdHJp
bmcqKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgZGlzYWJsZShFcnJvclN0cmluZyopID0gMDsKICAg
IHZpcnR1YWwgdm9pZCBkcm9wVHJhY2VMb2coRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGlu
X3RyYWNlTG9nSWQpID0gMDsKICAgIHZpcnR1YWwgdm9pZCBoYXNVbmluc3RydW1lbnRlZENhbnZh
c2VzKEVycm9yU3RyaW5nKiwgYm9vbCogb3V0X3Jlc3VsdCkgPSAwOwogICAgdmlydHVhbCB2b2lk
IGNhcHR1cmVGcmFtZShFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyogaW5fZnJhbWVJZCwgVHlw
ZUJ1aWxkZXI6OkNhbnZhczo6VHJhY2VMb2dJZCogb3V0X3RyYWNlTG9nSWQpID0gMDsKICAgIHZp
cnR1YWwgdm9pZCBzdGFydENhcHR1cmluZyhFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyogaW5f
ZnJhbWVJZCwgVHlwZUJ1aWxkZXI6OkNhbnZhczo6VHJhY2VMb2dJZCogb3V0X3RyYWNlTG9nSWQp
ID0gMDsKICAgIHZpcnR1YWwgdm9pZCBzdG9wQ2FwdHVyaW5nKEVycm9yU3RyaW5nKiwgY29uc3Qg
U3RyaW5nJiBpbl90cmFjZUxvZ0lkKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgZ2V0VHJhY2VMb2co
RXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGluX3RyYWNlTG9nSWQsIGNvbnN0IGludCogaW5f
c3RhcnRPZmZzZXQsIGNvbnN0IGludCogaW5fbWF4TGVuZ3RoLCBSZWZQdHI8VHlwZUJ1aWxkZXI6
OkNhbnZhczo6VHJhY2VMb2c+JiBvdXRfdHJhY2VMb2cpID0gMDsKICAgIHZpcnR1YWwgdm9pZCBy
ZXBsYXlUcmFjZUxvZyhFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgaW5fdHJhY2VMb2dJZCwg
aW50IGluX3N0ZXBObywgUmVmUHRyPFR5cGVCdWlsZGVyOjpDYW52YXM6OlJlc291cmNlU3RhdGU+
JiBvdXRfcmVzb3VyY2VTdGF0ZSkgPSAwOwogICAgdmlydHVhbCB2b2lkIGdldFJlc291cmNlSW5m
byhFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgaW5fcmVzb3VyY2VJZCwgUmVmUHRyPFR5cGVC
dWlsZGVyOjpDYW52YXM6OlJlc291cmNlSW5mbz4mIG91dF9yZXNvdXJjZUluZm8pID0gMDsKICAg
IHZpcnR1YWwgdm9pZCBnZXRSZXNvdXJjZVN0YXRlKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5n
JiBpbl90cmFjZUxvZ0lkLCBjb25zdCBTdHJpbmcmIGluX3Jlc291cmNlSWQsIFJlZlB0cjxUeXBl
QnVpbGRlcjo6Q2FudmFzOjpSZXNvdXJjZVN0YXRlPiYgb3V0X3Jlc291cmNlU3RhdGUpID0gMDsK
cHJvdGVjdGVkOgogICAgdmlydHVhbCB+SW5zcGVjdG9yQ2FudmFzQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyKCkgeyB9Cn07CgpjbGFzcyBJbnNwZWN0b3JDb25zb2xlQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyIHsKcHVibGljOgogICAgdmlydHVhbCB2b2lkIGVuYWJsZShFcnJvclN0cmluZyopID0g
MDsKICAgIHZpcnR1YWwgdm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nKikgPSAwOwogICAgdmlydHVh
bCB2b2lkIGNsZWFyTWVzc2FnZXMoRXJyb3JTdHJpbmcqKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQg
c2V0TW9uaXRvcmluZ1hIUkVuYWJsZWQoRXJyb3JTdHJpbmcqLCBib29sIGluX2VuYWJsZWQpID0g
MDsKICAgIHZpcnR1YWwgdm9pZCBhZGRJbnNwZWN0ZWROb2RlKEVycm9yU3RyaW5nKiwgaW50IGlu
X25vZGVJZCkgPSAwOwogICAgdmlydHVhbCB2b2lkIGFkZEluc3BlY3RlZEhlYXBPYmplY3QoRXJy
b3JTdHJpbmcqLCBpbnQgaW5faGVhcE9iamVjdElkKSA9IDA7CnByb3RlY3RlZDoKICAgIHZpcnR1
YWwgfkluc3BlY3RvckNvbnNvbGVCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KfTsKCmNs
YXNzIEluc3BlY3RvckRPTUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CnB1YmxpYzoKICAgIHZp
cnR1YWwgdm9pZCBnZXREb2N1bWVudChFcnJvclN0cmluZyosIFJlZlB0cjxUeXBlQnVpbGRlcjo6
RE9NOjpOb2RlPiYgb3V0X3Jvb3QpID0gMDsKICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0Q2hpbGRO
b2RlcyhFcnJvclN0cmluZyosIGludCBpbl9ub2RlSWQsIGNvbnN0IGludCogaW5fZGVwdGgpID0g
MDsKICAgIHZpcnR1YWwgdm9pZCBxdWVyeVNlbGVjdG9yKEVycm9yU3RyaW5nKiwgaW50IGluX25v
ZGVJZCwgY29uc3QgU3RyaW5nJiBpbl9zZWxlY3RvciwgaW50KiBvdXRfbm9kZUlkKSA9IDA7CiAg
ICB2aXJ0dWFsIHZvaWQgcXVlcnlTZWxlY3RvckFsbChFcnJvclN0cmluZyosIGludCBpbl9ub2Rl
SWQsIGNvbnN0IFN0cmluZyYgaW5fc2VsZWN0b3IsIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8
aW50PiA+JiBvdXRfbm9kZUlkcykgPSAwOwogICAgdmlydHVhbCB2b2lkIHNldE5vZGVOYW1lKEVy
cm9yU3RyaW5nKiwgaW50IGluX25vZGVJZCwgY29uc3QgU3RyaW5nJiBpbl9uYW1lLCBpbnQqIG91
dF9ub2RlSWQpID0gMDsKICAgIHZpcnR1YWwgdm9pZCBzZXROb2RlVmFsdWUoRXJyb3JTdHJpbmcq
LCBpbnQgaW5fbm9kZUlkLCBjb25zdCBTdHJpbmcmIGluX3ZhbHVlKSA9IDA7CiAgICB2aXJ0dWFs
IHZvaWQgcmVtb3ZlTm9kZShFcnJvclN0cmluZyosIGludCBpbl9ub2RlSWQpID0gMDsKICAgIHZp
cnR1YWwgdm9pZCBzZXRBdHRyaWJ1dGVWYWx1ZShFcnJvclN0cmluZyosIGludCBpbl9ub2RlSWQs
IGNvbnN0IFN0cmluZyYgaW5fbmFtZSwgY29uc3QgU3RyaW5nJiBpbl92YWx1ZSkgPSAwOwogICAg
dmlydHVhbCB2b2lkIHNldEF0dHJpYnV0ZXNBc1RleHQoRXJyb3JTdHJpbmcqLCBpbnQgaW5fbm9k
ZUlkLCBjb25zdCBTdHJpbmcmIGluX3RleHQsIGNvbnN0IFN0cmluZyogaW5fbmFtZSkgPSAwOwog
ICAgdmlydHVhbCB2b2lkIHJlbW92ZUF0dHJpYnV0ZShFcnJvclN0cmluZyosIGludCBpbl9ub2Rl
SWQsIGNvbnN0IFN0cmluZyYgaW5fbmFtZSkgPSAwOwogICAgdmlydHVhbCB2b2lkIGdldEV2ZW50
TGlzdGVuZXJzRm9yTm9kZShFcnJvclN0cmluZyosIGludCBpbl9ub2RlSWQsIGNvbnN0IFN0cmlu
ZyogaW5fb2JqZWN0R3JvdXAsIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6
OkRPTTo6RXZlbnRMaXN0ZW5lcj4gPiYgb3V0X2xpc3RlbmVycykgPSAwOwogICAgdmlydHVhbCB2
b2lkIGdldE91dGVySFRNTChFcnJvclN0cmluZyosIGludCBpbl9ub2RlSWQsIFN0cmluZyogb3V0
X291dGVySFRNTCkgPSAwOwogICAgdmlydHVhbCB2b2lkIHNldE91dGVySFRNTChFcnJvclN0cmlu
ZyosIGludCBpbl9ub2RlSWQsIGNvbnN0IFN0cmluZyYgaW5fb3V0ZXJIVE1MKSA9IDA7CiAgICB2
aXJ0dWFsIHZvaWQgcGVyZm9ybVNlYXJjaChFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgaW5f
cXVlcnksIFN0cmluZyogb3V0X3NlYXJjaElkLCBpbnQqIG91dF9yZXN1bHRDb3VudCkgPSAwOwog
ICAgdmlydHVhbCB2b2lkIGdldFNlYXJjaFJlc3VsdHMoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJp
bmcmIGluX3NlYXJjaElkLCBpbnQgaW5fZnJvbUluZGV4LCBpbnQgaW5fdG9JbmRleCwgUmVmUHRy
PFR5cGVCdWlsZGVyOjpBcnJheTxpbnQ+ID4mIG91dF9ub2RlSWRzKSA9IDA7CiAgICB2aXJ0dWFs
IHZvaWQgZGlzY2FyZFNlYXJjaFJlc3VsdHMoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGlu
X3NlYXJjaElkKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdE5vZGUoRXJyb3JTdHJpbmcq
LCBjb25zdCBTdHJpbmcmIGluX29iamVjdElkLCBpbnQqIG91dF9ub2RlSWQpID0gMDsKICAgIHZp
cnR1YWwgdm9pZCBzZXRJbnNwZWN0TW9kZUVuYWJsZWQoRXJyb3JTdHJpbmcqLCBib29sIGluX2Vu
YWJsZWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBpbl9oaWdobGlnaHRDb25maWcp
ID0gMDsKICAgIHZpcnR1YWwgdm9pZCBoaWdobGlnaHRSZWN0KEVycm9yU3RyaW5nKiwgaW50IGlu
X3gsIGludCBpbl95LCBpbnQgaW5fd2lkdGgsIGludCBpbl9oZWlnaHQsIGNvbnN0IFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+KiBpbl9jb2xvciwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4q
IGluX291dGxpbmVDb2xvciwgY29uc3QgYm9vbCogaW5fdXNlUGFnZUNvb3JkaW5hdGVzKSA9IDA7
CiAgICB2aXJ0dWFsIHZvaWQgaGlnaGxpZ2h0UXVhZChFcnJvclN0cmluZyosIGNvbnN0IFJlZlB0
cjxJbnNwZWN0b3JBcnJheT4mIGluX3F1YWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
KiBpbl9jb2xvciwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIGluX291dGxpbmVDb2xv
ciwgY29uc3QgYm9vbCogaW5fdXNlUGFnZUNvb3JkaW5hdGVzKSA9IDA7CiAgICB2aXJ0dWFsIHZv
aWQgaGlnaGxpZ2h0Tm9kZShFcnJvclN0cmluZyosIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+JiBpbl9oaWdobGlnaHRDb25maWcsIGNvbnN0IGludCogaW5fbm9kZUlkLCBjb25zdCBTdHJp
bmcqIGluX29iamVjdElkKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgaGlkZUhpZ2hsaWdodChFcnJv
clN0cmluZyopID0gMDsKICAgIHZpcnR1YWwgdm9pZCBoaWdobGlnaHRGcmFtZShFcnJvclN0cmlu
ZyosIGNvbnN0IFN0cmluZyYgaW5fZnJhbWVJZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4qIGluX2NvbnRlbnRDb2xvciwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIGluX2Nv
bnRlbnRPdXRsaW5lQ29sb3IpID0gMDsKICAgIHZpcnR1YWwgdm9pZCBwdXNoTm9kZUJ5UGF0aFRv
RnJvbnRlbmQoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGluX3BhdGgsIGludCogb3V0X25v
ZGVJZCkgPSAwOwogICAgdmlydHVhbCB2b2lkIHB1c2hOb2RlQnlCYWNrZW5kSWRUb0Zyb250ZW5k
KEVycm9yU3RyaW5nKiwgaW50IGluX2JhY2tlbmROb2RlSWQsIGludCogb3V0X25vZGVJZCkgPSAw
OwogICAgdmlydHVhbCB2b2lkIHJlbGVhc2VCYWNrZW5kTm9kZUlkcyhFcnJvclN0cmluZyosIGNv
bnN0IFN0cmluZyYgaW5fbm9kZUdyb3VwKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgcmVzb2x2ZU5v
ZGUoRXJyb3JTdHJpbmcqLCBpbnQgaW5fbm9kZUlkLCBjb25zdCBTdHJpbmcqIGluX29iamVjdEdy
b3VwLCBSZWZQdHI8VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIG91dF9vYmpl
Y3QpID0gMDsKICAgIHZpcnR1YWwgdm9pZCBnZXRBdHRyaWJ1dGVzKEVycm9yU3RyaW5nKiwgaW50
IGluX25vZGVJZCwgUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+ID4mIG91dF9hdHRy
aWJ1dGVzKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgbW92ZVRvKEVycm9yU3RyaW5nKiwgaW50IGlu
X25vZGVJZCwgaW50IGluX3RhcmdldE5vZGVJZCwgY29uc3QgaW50KiBpbl9pbnNlcnRCZWZvcmVO
b2RlSWQsIGludCogb3V0X25vZGVJZCkgPSAwOwogICAgdmlydHVhbCB2b2lkIHVuZG8oRXJyb3JT
dHJpbmcqKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgcmVkbyhFcnJvclN0cmluZyopID0gMDsKICAg
IHZpcnR1YWwgdm9pZCBtYXJrVW5kb2FibGVTdGF0ZShFcnJvclN0cmluZyopID0gMDsKICAgIHZp
cnR1YWwgdm9pZCBmb2N1cyhFcnJvclN0cmluZyosIGludCBpbl9ub2RlSWQpID0gMDsKICAgIHZp
cnR1YWwgdm9pZCBzZXRGaWxlSW5wdXRGaWxlcyhFcnJvclN0cmluZyosIGludCBpbl9ub2RlSWQs
IGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mIGluX2ZpbGVzKSA9IDA7CnByb3RlY3RlZDoK
ICAgIHZpcnR1YWwgfkluc3BlY3RvckRPTUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQp9
OwoKI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQpjbGFzcyBJbnNwZWN0b3JET01EZWJ1
Z2dlckJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CnB1YmxpYzoKICAgIHZpcnR1YWwgdm9pZCBz
ZXRET01CcmVha3BvaW50KEVycm9yU3RyaW5nKiwgaW50IGluX25vZGVJZCwgY29uc3QgU3RyaW5n
JiBpbl90eXBlKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlRE9NQnJlYWtwb2ludChFcnJv
clN0cmluZyosIGludCBpbl9ub2RlSWQsIGNvbnN0IFN0cmluZyYgaW5fdHlwZSkgPSAwOwogICAg
dmlydHVhbCB2b2lkIHNldEV2ZW50TGlzdGVuZXJCcmVha3BvaW50KEVycm9yU3RyaW5nKiwgY29u
c3QgU3RyaW5nJiBpbl9ldmVudE5hbWUpID0gMDsKICAgIHZpcnR1YWwgdm9pZCByZW1vdmVFdmVu
dExpc3RlbmVyQnJlYWtwb2ludChFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgaW5fZXZlbnRO
YW1lKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgc2V0SW5zdHJ1bWVudGF0aW9uQnJlYWtwb2ludChF
cnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgaW5fZXZlbnROYW1lKSA9IDA7CiAgICB2aXJ0dWFs
IHZvaWQgcmVtb3ZlSW5zdHJ1bWVudGF0aW9uQnJlYWtwb2ludChFcnJvclN0cmluZyosIGNvbnN0
IFN0cmluZyYgaW5fZXZlbnROYW1lKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgc2V0WEhSQnJlYWtw
b2ludChFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgaW5fdXJsKSA9IDA7CiAgICB2aXJ0dWFs
IHZvaWQgcmVtb3ZlWEhSQnJlYWtwb2ludChFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgaW5f
dXJsKSA9IDA7CnByb3RlY3RlZDoKICAgIHZpcnR1YWwgfkluc3BlY3RvckRPTURlYnVnZ2VyQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9Cn07CgojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJ
UFRfREVCVUdHRVIpCmNsYXNzIEluc3BlY3RvckRPTVN0b3JhZ2VCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIgewpwdWJsaWM6CiAgICB2aXJ0dWFsIHZvaWQgZW5hYmxlKEVycm9yU3RyaW5nKikgPSAw
OwogICAgdmlydHVhbCB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcqKSA9IDA7CiAgICB2aXJ0dWFs
IHZvaWQgZ2V0RE9NU3RvcmFnZUl0ZW1zKEVycm9yU3RyaW5nKiwgY29uc3QgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4mIGluX3N0b3JhZ2VJZCwgUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUeXBl
QnVpbGRlcjo6QXJyYXk8U3RyaW5nPiA+ID4mIG91dF9lbnRyaWVzKSA9IDA7CiAgICB2aXJ0dWFs
IHZvaWQgc2V0RE9NU3RvcmFnZUl0ZW0oRXJyb3JTdHJpbmcqLCBjb25zdCBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiYgaW5fc3RvcmFnZUlkLCBjb25zdCBTdHJpbmcmIGluX2tleSwgY29uc3QgU3Ry
aW5nJiBpbl92YWx1ZSkgPSAwOwogICAgdmlydHVhbCB2b2lkIHJlbW92ZURPTVN0b3JhZ2VJdGVt
KEVycm9yU3RyaW5nKiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIGluX3N0b3JhZ2VJ
ZCwgY29uc3QgU3RyaW5nJiBpbl9rZXkpID0gMDsKcHJvdGVjdGVkOgogICAgdmlydHVhbCB+SW5z
cGVjdG9yRE9NU3RvcmFnZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQp9OwoKI2lmIEVO
QUJMRShTUUxfREFUQUJBU0UpCmNsYXNzIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyIHsKcHVibGljOgogICAgdmlydHVhbCB2b2lkIGVuYWJsZShFcnJvclN0cmluZyop
ID0gMDsKICAgIHZpcnR1YWwgdm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nKikgPSAwOwogICAgdmly
dHVhbCB2b2lkIGdldERhdGFiYXNlVGFibGVOYW1lcyhFcnJvclN0cmluZyosIGNvbnN0IFN0cmlu
ZyYgaW5fZGF0YWJhc2VJZCwgUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+ID4mIG91
dF90YWJsZU5hbWVzKSA9IDA7CiAgICBjbGFzcyBFeGVjdXRlU1FMQ2FsbGJhY2sgOiBwdWJsaWMg
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZSB7CiAgICBwdWJsaWM6CiAg
ICAgICAgRXhlY3V0ZVNRTENhbGxiYWNrKFBhc3NSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI+LCBpbnQgaWQpOwogICAgICAgIHZvaWQgc2VuZFN1Y2Nlc3MoUGFzc1JlZlB0cjxUeXBl
QnVpbGRlcjo6QXJyYXk8U3RyaW5nPiA+IGNvbHVtbk5hbWVzLCBQYXNzUmVmUHRyPFR5cGVCdWls
ZGVyOjpBcnJheTxJbnNwZWN0b3JWYWx1ZT4gPiB2YWx1ZXMsIFBhc3NSZWZQdHI8VHlwZUJ1aWxk
ZXI6OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IpOwogICAgfTsKICAgIHZpcnR1YWwgdm9pZCBl
eGVjdXRlU1FMKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBpbl9kYXRhYmFzZUlkLCBjb25z
dCBTdHJpbmcmIGluX3F1ZXJ5LCBQYXNzUmVmUHRyPEV4ZWN1dGVTUUxDYWxsYmFjaz4gY2FsbGJh
Y2spID0gMDsKcHJvdGVjdGVkOgogICAgdmlydHVhbCB+SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KfTsKCiNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNF
KQojaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCmNsYXNzIEluc3BlY3RvckRlYnVnZ2Vy
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKcHVibGljOgogICAgdmlydHVhbCB2b2lkIGNhdXNl
c1JlY29tcGlsYXRpb24oRXJyb3JTdHJpbmcqLCBib29sKiBvdXRfcmVzdWx0KSA9IDA7CiAgICB2
aXJ0dWFsIHZvaWQgc3VwcG9ydHNTZXBhcmF0ZVNjcmlwdENvbXBpbGF0aW9uQW5kRXhlY3V0aW9u
KEVycm9yU3RyaW5nKiwgYm9vbCogb3V0X3Jlc3VsdCkgPSAwOwogICAgdmlydHVhbCB2b2lkIGVu
YWJsZShFcnJvclN0cmluZyopID0gMDsKICAgIHZpcnR1YWwgdm9pZCBkaXNhYmxlKEVycm9yU3Ry
aW5nKikgPSAwOwogICAgdmlydHVhbCB2b2lkIHNldEJyZWFrcG9pbnRzQWN0aXZlKEVycm9yU3Ry
aW5nKiwgYm9vbCBpbl9hY3RpdmUpID0gMDsKICAgIHZpcnR1YWwgdm9pZCBzZXRCcmVha3BvaW50
QnlVcmwoRXJyb3JTdHJpbmcqLCBpbnQgaW5fbGluZU51bWJlciwgY29uc3QgU3RyaW5nKiBpbl91
cmwsIGNvbnN0IFN0cmluZyogaW5fdXJsUmVnZXgsIGNvbnN0IGludCogaW5fY29sdW1uTnVtYmVy
LCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiogaW5fb3B0aW9ucywgVHlwZUJ1aWxkZXI6
OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQqIG91dF9icmVha3BvaW50SWQsIFJlZlB0cjxUeXBlQnVp
bGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj4gPiYgb3V0X2xvY2F0
aW9ucykgPSAwOwogICAgdmlydHVhbCB2b2lkIHNldEJyZWFrcG9pbnQoRXJyb3JTdHJpbmcqLCBj
b25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgaW5fbG9jYXRpb24sIGNvbnN0IFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+KiBpbl9vcHRpb25zLCBUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkJyZWFr
cG9pbnRJZCogb3V0X2JyZWFrcG9pbnRJZCwgUmVmUHRyPFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6
TG9jYXRpb24+JiBvdXRfYWN0dWFsTG9jYXRpb24pID0gMDsKICAgIHZpcnR1YWwgdm9pZCByZW1v
dmVCcmVha3BvaW50KEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBpbl9icmVha3BvaW50SWQp
ID0gMDsKICAgIHZpcnR1YWwgdm9pZCBjb250aW51ZVRvTG9jYXRpb24oRXJyb3JTdHJpbmcqLCBj
b25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgaW5fbG9jYXRpb24pID0gMDsKICAgIHZpcnR1
YWwgdm9pZCBzdGVwT3ZlcihFcnJvclN0cmluZyopID0gMDsKICAgIHZpcnR1YWwgdm9pZCBzdGVw
SW50byhFcnJvclN0cmluZyopID0gMDsKICAgIHZpcnR1YWwgdm9pZCBzdGVwT3V0KEVycm9yU3Ry
aW5nKikgPSAwOwogICAgdmlydHVhbCB2b2lkIHBhdXNlKEVycm9yU3RyaW5nKikgPSAwOwogICAg
dmlydHVhbCB2b2lkIHJlc3VtZShFcnJvclN0cmluZyopID0gMDsKICAgIHZpcnR1YWwgdm9pZCBz
ZWFyY2hJbkNvbnRlbnQoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGluX3NjcmlwdElkLCBj
b25zdCBTdHJpbmcmIGluX3F1ZXJ5LCBjb25zdCBib29sKiBpbl9jYXNlU2Vuc2l0aXZlLCBjb25z
dCBib29sKiBpbl9pc1JlZ2V4LCBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVy
OjpQYWdlOjpTZWFyY2hNYXRjaD4gPiYgb3V0X3Jlc3VsdCkgPSAwOwogICAgdmlydHVhbCB2b2lk
IGNhblNldFNjcmlwdFNvdXJjZShFcnJvclN0cmluZyosIGJvb2wqIG91dF9yZXN1bHQpID0gMDsK
ICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JpcHRTb3VyY2UoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJp
bmcmIGluX3NjcmlwdElkLCBjb25zdCBTdHJpbmcmIGluX3NjcmlwdFNvdXJjZSwgY29uc3QgYm9v
bCogaW5fcHJldmlldywgUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6RGVi
dWdnZXI6OkNhbGxGcmFtZT4gPiYgb3B0X291dF9jYWxsRnJhbWVzLCBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiYgb3B0X291dF9yZXN1bHQpID0gMDsKICAgIHZpcnR1YWwgdm9pZCBnZXRTY3JpcHRT
b3VyY2UoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGluX3NjcmlwdElkLCBTdHJpbmcqIG91
dF9zY3JpcHRTb3VyY2UpID0gMDsKICAgIHZpcnR1YWwgdm9pZCBnZXRGdW5jdGlvbkRldGFpbHMo
RXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGluX2Z1bmN0aW9uSWQsIFJlZlB0cjxUeXBlQnVp
bGRlcjo6RGVidWdnZXI6OkZ1bmN0aW9uRGV0YWlscz4mIG91dF9kZXRhaWxzKSA9IDA7CiAgICB2
aXJ0dWFsIHZvaWQgc2V0UGF1c2VPbkV4Y2VwdGlvbnMoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJp
bmcmIGluX3N0YXRlKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgZXZhbHVhdGVPbkNhbGxGcmFtZShF
cnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgaW5fY2FsbEZyYW1lSWQsIGNvbnN0IFN0cmluZyYg
aW5fZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nKiBpbl9vYmplY3RHcm91cCwgY29uc3QgYm9vbCog
aW5faW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBjb25zdCBib29sKiBpbl9kb05vdFBhdXNlT25FeGNl
cHRpb25zQW5kTXV0ZUNvbnNvbGUsIGNvbnN0IGJvb2wqIGluX3JldHVybkJ5VmFsdWUsIGNvbnN0
IGJvb2wqIGluX2dlbmVyYXRlUHJldmlldywgUmVmUHRyPFR5cGVCdWlsZGVyOjpSdW50aW1lOjpS
ZW1vdGVPYmplY3Q+JiBvdXRfcmVzdWx0LCBUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PGJvb2w+KiBv
cHRfb3V0X3dhc1Rocm93bikgPSAwOwogICAgdmlydHVhbCB2b2lkIGNvbXBpbGVTY3JpcHQoRXJy
b3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGluX2V4cHJlc3Npb24sIGNvbnN0IFN0cmluZyYgaW5f
c291cmNlVVJMLCBUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6
U2NyaXB0SWQ+KiBvcHRfb3V0X3NjcmlwdElkLCBUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PFN0cmlu
Zz4qIG9wdF9vdXRfc3ludGF4RXJyb3JNZXNzYWdlKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgcnVu
U2NyaXB0KEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBpbl9zY3JpcHRJZCwgY29uc3QgaW50
KiBpbl9jb250ZXh0SWQsIGNvbnN0IFN0cmluZyogaW5fb2JqZWN0R3JvdXAsIGNvbnN0IGJvb2wq
IGluX2RvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgUmVmUHRyPFR5cGVCdWls
ZGVyOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiBvdXRfcmVzdWx0LCBUeXBlQnVpbGRlcjo6T3B0
T3V0cHV0PGJvb2w+KiBvcHRfb3V0X3dhc1Rocm93bikgPSAwOwogICAgdmlydHVhbCB2b2lkIHNl
dE92ZXJsYXlNZXNzYWdlKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nKiBpbl9tZXNzYWdlKSA9
IDA7CnByb3RlY3RlZDoKICAgIHZpcnR1YWwgfkluc3BlY3RvckRlYnVnZ2VyQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyKCkgeyB9Cn07CgojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdH
RVIpCmNsYXNzIEluc3BlY3RvckZpbGVTeXN0ZW1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewpw
dWJsaWM6CiAgICB2aXJ0dWFsIHZvaWQgZW5hYmxlKEVycm9yU3RyaW5nKikgPSAwOwogICAgdmly
dHVhbCB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcqKSA9IDA7CiAgICBjbGFzcyBSZXF1ZXN0Rmls
ZVN5c3RlbVJvb3RDYWxsYmFjayA6IHB1YmxpYyBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
Q2FsbGJhY2tCYXNlIHsKICAgIHB1YmxpYzoKICAgICAgICBSZXF1ZXN0RmlsZVN5c3RlbVJvb3RD
YWxsYmFjayhQYXNzUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiwgaW50IGlkKTsK
ICAgICAgICB2b2lkIHNlbmRTdWNjZXNzKGludCBlcnJvckNvZGUsIFBhc3NSZWZQdHI8VHlwZUJ1
aWxkZXI6OkZpbGVTeXN0ZW06OkVudHJ5PiByb290KTsKICAgIH07CiAgICB2aXJ0dWFsIHZvaWQg
cmVxdWVzdEZpbGVTeXN0ZW1Sb290KEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBpbl9vcmln
aW4sIGNvbnN0IFN0cmluZyYgaW5fdHlwZSwgUGFzc1JlZlB0cjxSZXF1ZXN0RmlsZVN5c3RlbVJv
b3RDYWxsYmFjaz4gY2FsbGJhY2spID0gMDsKICAgIGNsYXNzIFJlcXVlc3REaXJlY3RvcnlDb250
ZW50Q2FsbGJhY2sgOiBwdWJsaWMgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNr
QmFzZSB7CiAgICBwdWJsaWM6CiAgICAgICAgUmVxdWVzdERpcmVjdG9yeUNvbnRlbnRDYWxsYmFj
ayhQYXNzUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiwgaW50IGlkKTsKICAgICAg
ICB2b2lkIHNlbmRTdWNjZXNzKGludCBlcnJvckNvZGUsIFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6
OkFycmF5PFR5cGVCdWlsZGVyOjpGaWxlU3lzdGVtOjpFbnRyeT4gPiBlbnRyaWVzKTsKICAgIH07
CiAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdERpcmVjdG9yeUNvbnRlbnQoRXJyb3JTdHJpbmcqLCBj
b25zdCBTdHJpbmcmIGluX3VybCwgUGFzc1JlZlB0cjxSZXF1ZXN0RGlyZWN0b3J5Q29udGVudENh
bGxiYWNrPiBjYWxsYmFjaykgPSAwOwogICAgY2xhc3MgUmVxdWVzdE1ldGFkYXRhQ2FsbGJhY2sg
OiBwdWJsaWMgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZSB7CiAgICBw
dWJsaWM6CiAgICAgICAgUmVxdWVzdE1ldGFkYXRhQ2FsbGJhY2soUGFzc1JlZlB0cjxJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcj4sIGludCBpZCk7CiAgICAgICAgdm9pZCBzZW5kU3VjY2Vzcyhp
bnQgZXJyb3JDb2RlLCBQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpGaWxlU3lzdGVtOjpNZXRhZGF0
YT4gbWV0YWRhdGEpOwogICAgfTsKICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0TWV0YWRhdGEoRXJy
b3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGluX3VybCwgUGFzc1JlZlB0cjxSZXF1ZXN0TWV0YWRh
dGFDYWxsYmFjaz4gY2FsbGJhY2spID0gMDsKICAgIGNsYXNzIFJlcXVlc3RGaWxlQ29udGVudENh
bGxiYWNrIDogcHVibGljIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2Ug
ewogICAgcHVibGljOgogICAgICAgIFJlcXVlc3RGaWxlQ29udGVudENhbGxiYWNrKFBhc3NSZWZQ
dHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+LCBpbnQgaWQpOwogICAgICAgIHZvaWQgc2Vu
ZFN1Y2Nlc3MoaW50IGVycm9yQ29kZSwgY29uc3QgU3RyaW5nKiBjb25zdCBjb250ZW50LCBjb25z
dCBTdHJpbmcqIGNvbnN0IGNoYXJzZXQpOwogICAgfTsKICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0
RmlsZUNvbnRlbnQoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGluX3VybCwgYm9vbCBpbl9y
ZWFkQXNUZXh0LCBjb25zdCBpbnQqIGluX3N0YXJ0LCBjb25zdCBpbnQqIGluX2VuZCwgY29uc3Qg
U3RyaW5nKiBpbl9jaGFyc2V0LCBQYXNzUmVmUHRyPFJlcXVlc3RGaWxlQ29udGVudENhbGxiYWNr
PiBjYWxsYmFjaykgPSAwOwogICAgY2xhc3MgRGVsZXRlRW50cnlDYWxsYmFjayA6IHB1YmxpYyBJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlIHsKICAgIHB1YmxpYzoKICAg
ICAgICBEZWxldGVFbnRyeUNhbGxiYWNrKFBhc3NSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI+LCBpbnQgaWQpOwogICAgICAgIHZvaWQgc2VuZFN1Y2Nlc3MoaW50IGVycm9yQ29kZSk7
CiAgICB9OwogICAgdmlydHVhbCB2b2lkIGRlbGV0ZUVudHJ5KEVycm9yU3RyaW5nKiwgY29uc3Qg
U3RyaW5nJiBpbl91cmwsIFBhc3NSZWZQdHI8RGVsZXRlRW50cnlDYWxsYmFjaz4gY2FsbGJhY2sp
ID0gMDsKcHJvdGVjdGVkOgogICAgdmlydHVhbCB+SW5zcGVjdG9yRmlsZVN5c3RlbUJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlcigpIHsgfQp9OwoKY2xhc3MgSW5zcGVjdG9ySGVhcFByb2ZpbGVyQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKcHVibGljOgogICAgdmlydHVhbCB2b2lkIGhhc0hlYXBQ
cm9maWxlcihFcnJvclN0cmluZyosIGJvb2wqIG91dF9yZXN1bHQpID0gMDsKICAgIHZpcnR1YWwg
dm9pZCBnZXRQcm9maWxlSGVhZGVycyhFcnJvclN0cmluZyosIFJlZlB0cjxUeXBlQnVpbGRlcjo6
QXJyYXk8VHlwZUJ1aWxkZXI6OkhlYXBQcm9maWxlcjo6UHJvZmlsZUhlYWRlcj4gPiYgb3V0X2hl
YWRlcnMpID0gMDsKICAgIHZpcnR1YWwgdm9pZCBnZXRIZWFwU25hcHNob3QoRXJyb3JTdHJpbmcq
LCBpbnQgaW5fdWlkKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlUHJvZmlsZShFcnJvclN0
cmluZyosIGludCBpbl91aWQpID0gMDsKICAgIHZpcnR1YWwgdm9pZCBjbGVhclByb2ZpbGVzKEVy
cm9yU3RyaW5nKikgPSAwOwogICAgdmlydHVhbCB2b2lkIHRha2VIZWFwU25hcHNob3QoRXJyb3JT
dHJpbmcqLCBjb25zdCBib29sKiBpbl9yZXBvcnRQcm9ncmVzcykgPSAwOwogICAgdmlydHVhbCB2
b2lkIGNvbGxlY3RHYXJiYWdlKEVycm9yU3RyaW5nKikgPSAwOwogICAgdmlydHVhbCB2b2lkIGdl
dE9iamVjdEJ5SGVhcE9iamVjdElkKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBpbl9vYmpl
Y3RJZCwgY29uc3QgU3RyaW5nKiBpbl9vYmplY3RHcm91cCwgUmVmUHRyPFR5cGVCdWlsZGVyOjpS
dW50aW1lOjpSZW1vdGVPYmplY3Q+JiBvdXRfcmVzdWx0KSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQg
Z2V0SGVhcE9iamVjdElkKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBpbl9vYmplY3RJZCwg
VHlwZUJ1aWxkZXI6OkhlYXBQcm9maWxlcjo6SGVhcFNuYXBzaG90T2JqZWN0SWQqIG91dF9oZWFw
U25hcHNob3RPYmplY3RJZCkgPSAwOwpwcm90ZWN0ZWQ6CiAgICB2aXJ0dWFsIH5JbnNwZWN0b3JI
ZWFwUHJvZmlsZXJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KfTsKCiNpZiBFTkFCTEUo
SU5ERVhFRF9EQVRBQkFTRSkKY2xhc3MgSW5zcGVjdG9ySW5kZXhlZERCQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyIHsKcHVibGljOgogICAgdmlydHVhbCB2b2lkIGVuYWJsZShFcnJvclN0cmluZyop
ID0gMDsKICAgIHZpcnR1YWwgdm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nKikgPSAwOwogICAgY2xh
c3MgUmVxdWVzdERhdGFiYXNlTmFtZXNDYWxsYmFjayA6IHB1YmxpYyBJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlIHsKICAgIHB1YmxpYzoKICAgICAgICBSZXF1ZXN0RGF0
YWJhc2VOYW1lc0NhbGxiYWNrKFBhc3NSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+
LCBpbnQgaWQpOwogICAgICAgIHZvaWQgc2VuZFN1Y2Nlc3MoUGFzc1JlZlB0cjxUeXBlQnVpbGRl
cjo6QXJyYXk8U3RyaW5nPiA+IGRhdGFiYXNlTmFtZXMpOwogICAgfTsKICAgIHZpcnR1YWwgdm9p
ZCByZXF1ZXN0RGF0YWJhc2VOYW1lcyhFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgaW5fc2Vj
dXJpdHlPcmlnaW4sIFBhc3NSZWZQdHI8UmVxdWVzdERhdGFiYXNlTmFtZXNDYWxsYmFjaz4gY2Fs
bGJhY2spID0gMDsKICAgIGNsYXNzIFJlcXVlc3REYXRhYmFzZUNhbGxiYWNrIDogcHVibGljIElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UgewogICAgcHVibGljOgogICAg
ICAgIFJlcXVlc3REYXRhYmFzZUNhbGxiYWNrKFBhc3NSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI+LCBpbnQgaWQpOwogICAgICAgIHZvaWQgc2VuZFN1Y2Nlc3MoUGFzc1JlZlB0cjxU
eXBlQnVpbGRlcjo6SW5kZXhlZERCOjpEYXRhYmFzZVdpdGhPYmplY3RTdG9yZXM+IGRhdGFiYXNl
V2l0aE9iamVjdFN0b3Jlcyk7CiAgICB9OwogICAgdmlydHVhbCB2b2lkIHJlcXVlc3REYXRhYmFz
ZShFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgaW5fc2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0
cmluZyYgaW5fZGF0YWJhc2VOYW1lLCBQYXNzUmVmUHRyPFJlcXVlc3REYXRhYmFzZUNhbGxiYWNr
PiBjYWxsYmFjaykgPSAwOwogICAgY2xhc3MgUmVxdWVzdERhdGFDYWxsYmFjayA6IHB1YmxpYyBJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlIHsKICAgIHB1YmxpYzoKICAg
ICAgICBSZXF1ZXN0RGF0YUNhbGxiYWNrKFBhc3NSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI+LCBpbnQgaWQpOwogICAgICAgIHZvaWQgc2VuZFN1Y2Nlc3MoUGFzc1JlZlB0cjxUeXBl
QnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkluZGV4ZWREQjo6RGF0YUVudHJ5PiA+IG9iamVj
dFN0b3JlRGF0YUVudHJpZXMsIGJvb2wgaGFzTW9yZSk7CiAgICB9OwogICAgdmlydHVhbCB2b2lk
IHJlcXVlc3REYXRhKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBpbl9zZWN1cml0eU9yaWdp
biwgY29uc3QgU3RyaW5nJiBpbl9kYXRhYmFzZU5hbWUsIGNvbnN0IFN0cmluZyYgaW5fb2JqZWN0
U3RvcmVOYW1lLCBjb25zdCBTdHJpbmcmIGluX2luZGV4TmFtZSwgaW50IGluX3NraXBDb3VudCwg
aW50IGluX3BhZ2VTaXplLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiogaW5fa2V5UmFu
Z2UsIFBhc3NSZWZQdHI8UmVxdWVzdERhdGFDYWxsYmFjaz4gY2FsbGJhY2spID0gMDsKICAgIGNs
YXNzIENsZWFyT2JqZWN0U3RvcmVDYWxsYmFjayA6IHB1YmxpYyBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjo6Q2FsbGJhY2tCYXNlIHsKICAgIHB1YmxpYzoKICAgICAgICBDbGVhck9iamVjdFN0
b3JlQ2FsbGJhY2soUGFzc1JlZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4sIGludCBp
ZCk7CiAgICAgICAgdm9pZCBzZW5kU3VjY2VzcygpOwogICAgfTsKICAgIHZpcnR1YWwgdm9pZCBj
bGVhck9iamVjdFN0b3JlKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBpbl9zZWN1cml0eU9y
aWdpbiwgY29uc3QgU3RyaW5nJiBpbl9kYXRhYmFzZU5hbWUsIGNvbnN0IFN0cmluZyYgaW5fb2Jq
ZWN0U3RvcmVOYW1lLCBQYXNzUmVmUHRyPENsZWFyT2JqZWN0U3RvcmVDYWxsYmFjaz4gY2FsbGJh
Y2spID0gMDsKcHJvdGVjdGVkOgogICAgdmlydHVhbCB+SW5zcGVjdG9ySW5kZXhlZERCQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9Cn07CgojZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCmNsYXNzIEluc3BlY3RvcklucHV0QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKcHVi
bGljOgogICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoS2V5RXZlbnQoRXJyb3JTdHJpbmcqLCBjb25z
dCBTdHJpbmcmIGluX3R5cGUsIGNvbnN0IGludCogaW5fbW9kaWZpZXJzLCBjb25zdCBkb3VibGUq
IGluX3RpbWVzdGFtcCwgY29uc3QgU3RyaW5nKiBpbl90ZXh0LCBjb25zdCBTdHJpbmcqIGluX3Vu
bW9kaWZpZWRUZXh0LCBjb25zdCBTdHJpbmcqIGluX2tleUlkZW50aWZpZXIsIGNvbnN0IGludCog
aW5fd2luZG93c1ZpcnR1YWxLZXlDb2RlLCBjb25zdCBpbnQqIGluX25hdGl2ZVZpcnR1YWxLZXlD
b2RlLCBjb25zdCBpbnQqIGluX21hY0NoYXJDb2RlLCBjb25zdCBib29sKiBpbl9hdXRvUmVwZWF0
LCBjb25zdCBib29sKiBpbl9pc0tleXBhZCwgY29uc3QgYm9vbCogaW5faXNTeXN0ZW1LZXkpID0g
MDsKICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaE1vdXNlRXZlbnQoRXJyb3JTdHJpbmcqLCBjb25z
dCBTdHJpbmcmIGluX3R5cGUsIGludCBpbl94LCBpbnQgaW5feSwgY29uc3QgaW50KiBpbl9tb2Rp
ZmllcnMsIGNvbnN0IGRvdWJsZSogaW5fdGltZXN0YW1wLCBjb25zdCBTdHJpbmcqIGluX2J1dHRv
biwgY29uc3QgaW50KiBpbl9jbGlja0NvdW50KSA9IDA7CnByb3RlY3RlZDoKICAgIHZpcnR1YWwg
fkluc3BlY3RvcklucHV0QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9Cn07CgpjbGFzcyBJ
bnNwZWN0b3JJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewpwdWJsaWM6CiAgICB2
aXJ0dWFsIHZvaWQgZW5hYmxlKEVycm9yU3RyaW5nKikgPSAwOwogICAgdmlydHVhbCB2b2lkIGRp
c2FibGUoRXJyb3JTdHJpbmcqKSA9IDA7CnByb3RlY3RlZDoKICAgIHZpcnR1YWwgfkluc3BlY3Rv
ckluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQp9OwoKY2xhc3MgSW5zcGVj
dG9yTGF5ZXJUcmVlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKcHVibGljOgogICAgdmlydHVh
bCB2b2lkIGVuYWJsZShFcnJvclN0cmluZyopID0gMDsKICAgIHZpcnR1YWwgdm9pZCBkaXNhYmxl
KEVycm9yU3RyaW5nKikgPSAwOwogICAgdmlydHVhbCB2b2lkIGxheWVyc0Zvck5vZGUoRXJyb3JT
dHJpbmcqLCBpbnQgaW5fbm9kZUlkLCBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWls
ZGVyOjpMYXllclRyZWU6OkxheWVyPiA+JiBvdXRfbGF5ZXJzKSA9IDA7CiAgICB2aXJ0dWFsIHZv
aWQgcmVhc29uc0ZvckNvbXBvc2l0aW5nTGF5ZXIoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcm
IGluX2xheWVySWQsIFJlZlB0cjxUeXBlQnVpbGRlcjo6TGF5ZXJUcmVlOjpDb21wb3NpdGluZ1Jl
YXNvbnM+JiBvdXRfY29tcG9zaXRpbmdSZWFzb25zKSA9IDA7CnByb3RlY3RlZDoKICAgIHZpcnR1
YWwgfkluc3BlY3RvckxheWVyVHJlZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQp9OwoK
Y2xhc3MgSW5zcGVjdG9yTWVtb3J5QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKcHVibGljOgog
ICAgdmlydHVhbCB2b2lkIGdldERPTUNvdW50ZXJzKEVycm9yU3RyaW5nKiwgaW50KiBvdXRfZG9j
dW1lbnRzLCBpbnQqIG91dF9ub2RlcywgaW50KiBvdXRfanNFdmVudExpc3RlbmVycykgPSAwOwpw
cm90ZWN0ZWQ6CiAgICB2aXJ0dWFsIH5JbnNwZWN0b3JNZW1vcnlCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIoKSB7IH0KfTsKCmNsYXNzIEluc3BlY3Rvck5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIgewpwdWJsaWM6CiAgICB2aXJ0dWFsIHZvaWQgZW5hYmxlKEVycm9yU3RyaW5nKikgPSAw
OwogICAgdmlydHVhbCB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcqKSA9IDA7CiAgICB2aXJ0dWFs
IHZvaWQgc2V0VXNlckFnZW50T3ZlcnJpZGUoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGlu
X3VzZXJBZ2VudCkgPSAwOwogICAgdmlydHVhbCB2b2lkIHNldEV4dHJhSFRUUEhlYWRlcnMoRXJy
b3JTdHJpbmcqLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgaW5faGVhZGVycykgPSAw
OwogICAgdmlydHVhbCB2b2lkIGdldFJlc3BvbnNlQm9keShFcnJvclN0cmluZyosIGNvbnN0IFN0
cmluZyYgaW5fcmVxdWVzdElkLCBTdHJpbmcqIG91dF9ib2R5LCBib29sKiBvdXRfYmFzZTY0RW5j
b2RlZCkgPSAwOwogICAgdmlydHVhbCB2b2lkIHJlcGxheVhIUihFcnJvclN0cmluZyosIGNvbnN0
IFN0cmluZyYgaW5fcmVxdWVzdElkKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgY2FuQ2xlYXJCcm93
c2VyQ2FjaGUoRXJyb3JTdHJpbmcqLCBib29sKiBvdXRfcmVzdWx0KSA9IDA7CiAgICB2aXJ0dWFs
IHZvaWQgY2xlYXJCcm93c2VyQ2FjaGUoRXJyb3JTdHJpbmcqKSA9IDA7CiAgICB2aXJ0dWFsIHZv
aWQgY2FuQ2xlYXJCcm93c2VyQ29va2llcyhFcnJvclN0cmluZyosIGJvb2wqIG91dF9yZXN1bHQp
ID0gMDsKICAgIHZpcnR1YWwgdm9pZCBjbGVhckJyb3dzZXJDb29raWVzKEVycm9yU3RyaW5nKikg
PSAwOwogICAgdmlydHVhbCB2b2lkIHNldENhY2hlRGlzYWJsZWQoRXJyb3JTdHJpbmcqLCBib29s
IGluX2NhY2hlRGlzYWJsZWQpID0gMDsKcHJvdGVjdGVkOgogICAgdmlydHVhbCB+SW5zcGVjdG9y
TmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQp9OwoKY2xhc3MgSW5zcGVjdG9y
UGFnZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CnB1YmxpYzoKICAgIHZpcnR1YWwgdm9pZCBl
bmFibGUoRXJyb3JTdHJpbmcqKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgZGlzYWJsZShFcnJvclN0
cmluZyopID0gMDsKICAgIHZpcnR1YWwgdm9pZCBhZGRTY3JpcHRUb0V2YWx1YXRlT25Mb2FkKEVy
cm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBpbl9zY3JpcHRTb3VyY2UsIFR5cGVCdWlsZGVyOjpQ
YWdlOjpTY3JpcHRJZGVudGlmaWVyKiBvdXRfaWRlbnRpZmllcikgPSAwOwogICAgdmlydHVhbCB2
b2lkIHJlbW92ZVNjcmlwdFRvRXZhbHVhdGVPbkxvYWQoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJp
bmcmIGluX2lkZW50aWZpZXIpID0gMDsKICAgIHZpcnR1YWwgdm9pZCByZWxvYWQoRXJyb3JTdHJp
bmcqLCBjb25zdCBib29sKiBpbl9pZ25vcmVDYWNoZSwgY29uc3QgU3RyaW5nKiBpbl9zY3JpcHRU
b0V2YWx1YXRlT25Mb2FkLCBjb25zdCBTdHJpbmcqIGluX3NjcmlwdFByZXByb2Nlc3NvcikgPSAw
OwogICAgdmlydHVhbCB2b2lkIG5hdmlnYXRlKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBp
bl91cmwpID0gMDsKICAgIHZpcnR1YWwgdm9pZCBnZXRDb29raWVzKEVycm9yU3RyaW5nKiwgUmVm
UHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6UGFnZTo6Q29va2llPiA+JiBvdXRf
Y29va2llcywgU3RyaW5nKiBvdXRfY29va2llc1N0cmluZykgPSAwOwogICAgdmlydHVhbCB2b2lk
IGRlbGV0ZUNvb2tpZShFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgaW5fY29va2llTmFtZSwg
Y29uc3QgU3RyaW5nJiBpbl91cmwpID0gMDsKICAgIHZpcnR1YWwgdm9pZCBnZXRSZXNvdXJjZVRy
ZWUoRXJyb3JTdHJpbmcqLCBSZWZQdHI8VHlwZUJ1aWxkZXI6OlBhZ2U6OkZyYW1lUmVzb3VyY2VU
cmVlPiYgb3V0X2ZyYW1lVHJlZSkgPSAwOwogICAgdmlydHVhbCB2b2lkIGdldFJlc291cmNlQ29u
dGVudChFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgaW5fZnJhbWVJZCwgY29uc3QgU3RyaW5n
JiBpbl91cmwsIFN0cmluZyogb3V0X2NvbnRlbnQsIGJvb2wqIG91dF9iYXNlNjRFbmNvZGVkKSA9
IDA7CiAgICB2aXJ0dWFsIHZvaWQgc2VhcmNoSW5SZXNvdXJjZShFcnJvclN0cmluZyosIGNvbnN0
IFN0cmluZyYgaW5fZnJhbWVJZCwgY29uc3QgU3RyaW5nJiBpbl91cmwsIGNvbnN0IFN0cmluZyYg
aW5fcXVlcnksIGNvbnN0IGJvb2wqIGluX2Nhc2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wqIGluX2lz
UmVnZXgsIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OlBhZ2U6OlNlYXJj
aE1hdGNoPiA+JiBvdXRfcmVzdWx0KSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgc2VhcmNoSW5SZXNv
dXJjZXMoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGluX3RleHQsIGNvbnN0IGJvb2wqIGlu
X2Nhc2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wqIGluX2lzUmVnZXgsIFJlZlB0cjxUeXBlQnVpbGRl
cjo6QXJyYXk8VHlwZUJ1aWxkZXI6OlBhZ2U6OlNlYXJjaFJlc3VsdD4gPiYgb3V0X3Jlc3VsdCkg
PSAwOwogICAgdmlydHVhbCB2b2lkIHNldERvY3VtZW50Q29udGVudChFcnJvclN0cmluZyosIGNv
bnN0IFN0cmluZyYgaW5fZnJhbWVJZCwgY29uc3QgU3RyaW5nJiBpbl9odG1sKSA9IDA7CiAgICB2
aXJ0dWFsIHZvaWQgY2FuT3ZlcnJpZGVEZXZpY2VNZXRyaWNzKEVycm9yU3RyaW5nKiwgYm9vbCog
b3V0X3Jlc3VsdCkgPSAwOwogICAgdmlydHVhbCB2b2lkIHNldERldmljZU1ldHJpY3NPdmVycmlk
ZShFcnJvclN0cmluZyosIGludCBpbl93aWR0aCwgaW50IGluX2hlaWdodCwgZG91YmxlIGluX2Zv
bnRTY2FsZUZhY3RvciwgYm9vbCBpbl9maXRXaW5kb3cpID0gMDsKICAgIHZpcnR1YWwgdm9pZCBz
ZXRTaG93UGFpbnRSZWN0cyhFcnJvclN0cmluZyosIGJvb2wgaW5fcmVzdWx0KSA9IDA7CiAgICB2
aXJ0dWFsIHZvaWQgY2FuU2hvd0RlYnVnQm9yZGVycyhFcnJvclN0cmluZyosIGJvb2wqIG91dF9z
aG93KSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgc2V0U2hvd0RlYnVnQm9yZGVycyhFcnJvclN0cmlu
ZyosIGJvb2wgaW5fc2hvdykgPSAwOwogICAgdmlydHVhbCB2b2lkIGNhblNob3dGUFNDb3VudGVy
KEVycm9yU3RyaW5nKiwgYm9vbCogb3V0X3Nob3cpID0gMDsKICAgIHZpcnR1YWwgdm9pZCBzZXRT
aG93RlBTQ291bnRlcihFcnJvclN0cmluZyosIGJvb2wgaW5fc2hvdykgPSAwOwogICAgdmlydHVh
bCB2b2lkIGNhbkNvbnRpbnVvdXNseVBhaW50KEVycm9yU3RyaW5nKiwgYm9vbCogb3V0X3ZhbHVl
KSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGludW91c1BhaW50aW5nRW5hYmxlZChFcnJv
clN0cmluZyosIGJvb2wgaW5fZW5hYmxlZCkgPSAwOwogICAgLy8gTmFtZWQgYWZ0ZXIgcGFyYW1l
dGVyICdyZXN1bHQnIHdoaWxlIGdlbmVyYXRpbmcgY29tbWFuZC9ldmVudCBnZXRTY3JpcHRFeGVj
dXRpb25TdGF0dXMuCiAgICBzdHJ1Y3QgUmVzdWx0IHsKICAgICAgICBlbnVtIEVudW0gewogICAg
ICAgICAgICBBbGxvd2VkID0gMTE5LAogICAgICAgICAgICBEaXNhYmxlZCA9IDE0LAogICAgICAg
ICAgICBGb3JiaWRkZW4gPSAxMjAsCiAgICAgICAgfTsKICAgIH07IC8vIHN0cnVjdCBSZXN1bHQK
ICAgIHZpcnR1YWwgdm9pZCBnZXRTY3JpcHRFeGVjdXRpb25TdGF0dXMoRXJyb3JTdHJpbmcqLCBJ
bnNwZWN0b3JQYWdlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpSZXN1bHQ6OkVudW0qIG91dF9y
ZXN1bHQpID0gMDsKICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JpcHRFeGVjdXRpb25EaXNhYmxlZChF
cnJvclN0cmluZyosIGJvb2wgaW5fdmFsdWUpID0gMDsKICAgIHZpcnR1YWwgdm9pZCBzZXRHZW9s
b2NhdGlvbk92ZXJyaWRlKEVycm9yU3RyaW5nKiwgY29uc3QgZG91YmxlKiBpbl9sYXRpdHVkZSwg
Y29uc3QgZG91YmxlKiBpbl9sb25naXR1ZGUsIGNvbnN0IGRvdWJsZSogaW5fYWNjdXJhY3kpID0g
MDsKICAgIHZpcnR1YWwgdm9pZCBjbGVhckdlb2xvY2F0aW9uT3ZlcnJpZGUoRXJyb3JTdHJpbmcq
KSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgY2FuT3ZlcnJpZGVHZW9sb2NhdGlvbihFcnJvclN0cmlu
ZyosIGJvb2wqIG91dF9yZXN1bHQpID0gMDsKICAgIHZpcnR1YWwgdm9pZCBzZXREZXZpY2VPcmll
bnRhdGlvbk92ZXJyaWRlKEVycm9yU3RyaW5nKiwgZG91YmxlIGluX2FscGhhLCBkb3VibGUgaW5f
YmV0YSwgZG91YmxlIGluX2dhbW1hKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgY2xlYXJEZXZpY2VP
cmllbnRhdGlvbk92ZXJyaWRlKEVycm9yU3RyaW5nKikgPSAwOwogICAgdmlydHVhbCB2b2lkIGNh
bk92ZXJyaWRlRGV2aWNlT3JpZW50YXRpb24oRXJyb3JTdHJpbmcqLCBib29sKiBvdXRfcmVzdWx0
KSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgc2V0VG91Y2hFbXVsYXRpb25FbmFibGVkKEVycm9yU3Ry
aW5nKiwgYm9vbCBpbl9lbmFibGVkKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgc2V0RW11bGF0ZWRN
ZWRpYShFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgaW5fbWVkaWEpID0gMDsKICAgIHZpcnR1
YWwgdm9pZCBnZXRDb21wb3NpdGluZ0JvcmRlcnNWaXNpYmxlKEVycm9yU3RyaW5nKiwgYm9vbCog
b3V0X3Jlc3VsdCkgPSAwOwogICAgdmlydHVhbCB2b2lkIHNldENvbXBvc2l0aW5nQm9yZGVyc1Zp
c2libGUoRXJyb3JTdHJpbmcqLCBib29sIGluX3Zpc2libGUpID0gMDsKICAgIHZpcnR1YWwgdm9p
ZCBjYXB0dXJlU2NyZWVuc2hvdChFcnJvclN0cmluZyosIFN0cmluZyogb3V0X2RhdGEpID0gMDsK
ICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVKYXZhU2NyaXB0RGlhbG9nKEVycm9yU3RyaW5nKiwgYm9v
bCBpbl9hY2NlcHQsIGNvbnN0IFN0cmluZyogaW5fcHJvbXB0VGV4dCkgPSAwOwogICAgdmlydHVh
bCB2b2lkIGFyY2hpdmUoRXJyb3JTdHJpbmcqLCBTdHJpbmcqIG91dF9kYXRhKSA9IDA7CnByb3Rl
Y3RlZDoKICAgIHZpcnR1YWwgfkluc3BlY3RvclBhZ2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIo
KSB7IH0KfTsKCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKY2xhc3MgSW5zcGVjdG9y
UHJvZmlsZXJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewpwdWJsaWM6CiAgICB2aXJ0dWFsIHZv
aWQgY2F1c2VzUmVjb21waWxhdGlvbihFcnJvclN0cmluZyosIGJvb2wqIG91dF9yZXN1bHQpID0g
MDsKICAgIHZpcnR1YWwgdm9pZCBpc1NhbXBsaW5nKEVycm9yU3RyaW5nKiwgYm9vbCogb3V0X3Jl
c3VsdCkgPSAwOwogICAgdmlydHVhbCB2b2lkIGhhc0hlYXBQcm9maWxlcihFcnJvclN0cmluZyos
IGJvb2wqIG91dF9yZXN1bHQpID0gMDsKICAgIHZpcnR1YWwgdm9pZCBlbmFibGUoRXJyb3JTdHJp
bmcqKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgZGlzYWJsZShFcnJvclN0cmluZyopID0gMDsKICAg
IHZpcnR1YWwgdm9pZCBzdGFydChFcnJvclN0cmluZyopID0gMDsKICAgIHZpcnR1YWwgdm9pZCBz
dG9wKEVycm9yU3RyaW5nKikgPSAwOwogICAgdmlydHVhbCB2b2lkIGdldFByb2ZpbGVIZWFkZXJz
KEVycm9yU3RyaW5nKiwgUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6UHJv
ZmlsZXI6OlByb2ZpbGVIZWFkZXI+ID4mIG91dF9oZWFkZXJzKSA9IDA7CiAgICB2aXJ0dWFsIHZv
aWQgZ2V0Q1BVUHJvZmlsZShFcnJvclN0cmluZyosIGludCBpbl91aWQsIFJlZlB0cjxUeXBlQnVp
bGRlcjo6UHJvZmlsZXI6OkNQVVByb2ZpbGU+JiBvdXRfcHJvZmlsZSkgPSAwOwogICAgdmlydHVh
bCB2b2lkIGdldEhlYXBTbmFwc2hvdChFcnJvclN0cmluZyosIGludCBpbl91aWQpID0gMDsKICAg
IHZpcnR1YWwgdm9pZCByZW1vdmVQcm9maWxlKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBp
bl90eXBlLCBpbnQgaW5fdWlkKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgY2xlYXJQcm9maWxlcyhF
cnJvclN0cmluZyopID0gMDsKICAgIHZpcnR1YWwgdm9pZCB0YWtlSGVhcFNuYXBzaG90KEVycm9y
U3RyaW5nKiwgY29uc3QgYm9vbCogaW5fcmVwb3J0UHJvZ3Jlc3MpID0gMDsKICAgIHZpcnR1YWwg
dm9pZCBjb2xsZWN0R2FyYmFnZShFcnJvclN0cmluZyopID0gMDsKICAgIHZpcnR1YWwgdm9pZCBn
ZXRPYmplY3RCeUhlYXBPYmplY3RJZChFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgaW5fb2Jq
ZWN0SWQsIGNvbnN0IFN0cmluZyogaW5fb2JqZWN0R3JvdXAsIFJlZlB0cjxUeXBlQnVpbGRlcjo6
UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgb3V0X3Jlc3VsdCkgPSAwOwogICAgdmlydHVhbCB2b2lk
IGdldEhlYXBPYmplY3RJZChFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgaW5fb2JqZWN0SWQs
IFR5cGVCdWlsZGVyOjpQcm9maWxlcjo6SGVhcFNuYXBzaG90T2JqZWN0SWQqIG91dF9oZWFwU25h
cHNob3RPYmplY3RJZCkgPSAwOwpwcm90ZWN0ZWQ6CiAgICB2aXJ0dWFsIH5JbnNwZWN0b3JQcm9m
aWxlckJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQp9OwoKI2VuZGlmIC8vIEVOQUJMRShK
QVZBU0NSSVBUX0RFQlVHR0VSKQpjbGFzcyBJbnNwZWN0b3JSdW50aW1lQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyIHsKcHVibGljOgogICAgdmlydHVhbCB2b2lkIHBhcnNlKEVycm9yU3RyaW5nKiwg
Y29uc3QgU3RyaW5nJiBpbl9zb3VyY2UsIFR5cGVCdWlsZGVyOjpSdW50aW1lOjpTeW50YXhFcnJv
clR5cGU6OkVudW0qIG91dF9yZXN1bHQsIFR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8U3RyaW5nPiog
b3B0X291dF9tZXNzYWdlLCBSZWZQdHI8VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OkVycm9yUmFuZ2U+
JiBvcHRfb3V0X3JhbmdlKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgZXZhbHVhdGUoRXJyb3JTdHJp
bmcqLCBjb25zdCBTdHJpbmcmIGluX2V4cHJlc3Npb24sIGNvbnN0IFN0cmluZyogaW5fb2JqZWN0
R3JvdXAsIGNvbnN0IGJvb2wqIGluX2luY2x1ZGVDb21tYW5kTGluZUFQSSwgY29uc3QgYm9vbCog
aW5fZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBjb25zdCBpbnQqIGluX2Nv
bnRleHRJZCwgY29uc3QgYm9vbCogaW5fcmV0dXJuQnlWYWx1ZSwgY29uc3QgYm9vbCogaW5fZ2Vu
ZXJhdGVQcmV2aWV3LCBSZWZQdHI8VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4m
IG91dF9yZXN1bHQsIFR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8Ym9vbD4qIG9wdF9vdXRfd2FzVGhy
b3duKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgY2FsbEZ1bmN0aW9uT24oRXJyb3JTdHJpbmcqLCBj
b25zdCBTdHJpbmcmIGluX29iamVjdElkLCBjb25zdCBTdHJpbmcmIGluX2Z1bmN0aW9uRGVjbGFy
YXRpb24sIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIGluX2FyZ3VtZW50cywgY29uc3Qg
Ym9vbCogaW5fZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBjb25zdCBib29s
KiBpbl9yZXR1cm5CeVZhbHVlLCBjb25zdCBib29sKiBpbl9nZW5lcmF0ZVByZXZpZXcsIFJlZlB0
cjxUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgb3V0X3Jlc3VsdCwgVHlwZUJ1
aWxkZXI6Ok9wdE91dHB1dDxib29sPiogb3B0X291dF93YXNUaHJvd24pID0gMDsKICAgIHZpcnR1
YWwgdm9pZCBnZXRQcm9wZXJ0aWVzKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBpbl9vYmpl
Y3RJZCwgY29uc3QgYm9vbCogaW5fb3duUHJvcGVydGllcywgUmVmUHRyPFR5cGVCdWlsZGVyOjpB
cnJheTxUeXBlQnVpbGRlcjo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPiA+JiBvdXRfcmVz
dWx0LCBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpSdW50aW1lOjpJbnRl
cm5hbFByb3BlcnR5RGVzY3JpcHRvcj4gPiYgb3B0X291dF9pbnRlcm5hbFByb3BlcnRpZXMpID0g
MDsKICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlT2JqZWN0KEVycm9yU3RyaW5nKiwgY29uc3QgU3Ry
aW5nJiBpbl9vYmplY3RJZCkgPSAwOwogICAgdmlydHVhbCB2b2lkIHJlbGVhc2VPYmplY3RHcm91
cChFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgaW5fb2JqZWN0R3JvdXApID0gMDsKICAgIHZp
cnR1YWwgdm9pZCBydW4oRXJyb3JTdHJpbmcqKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgZW5hYmxl
KEVycm9yU3RyaW5nKikgPSAwOwogICAgdmlydHVhbCB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcq
KSA9IDA7CnByb3RlY3RlZDoKICAgIHZpcnR1YWwgfkluc3BlY3RvclJ1bnRpbWVCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIoKSB7IH0KfTsKCmNsYXNzIEluc3BlY3RvclRpbWVsaW5lQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyIHsKcHVibGljOgogICAgdmlydHVhbCB2b2lkIHN0YXJ0KEVycm9yU3Ry
aW5nKiwgY29uc3QgaW50KiBpbl9tYXhDYWxsU3RhY2tEZXB0aCwgY29uc3QgYm9vbCogaW5faW5j
bHVkZURvbUNvdW50ZXJzKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgc3RvcChFcnJvclN0cmluZyop
ID0gMDsKICAgIHZpcnR1YWwgdm9pZCBzdXBwb3J0c0ZyYW1lSW5zdHJ1bWVudGF0aW9uKEVycm9y
U3RyaW5nKiwgYm9vbCogb3V0X3Jlc3VsdCkgPSAwOwogICAgdmlydHVhbCB2b2lkIGNhbk1vbml0
b3JNYWluVGhyZWFkKEVycm9yU3RyaW5nKiwgYm9vbCogb3V0X3Jlc3VsdCkgPSAwOwpwcm90ZWN0
ZWQ6CiAgICB2aXJ0dWFsIH5JbnNwZWN0b3JUaW1lbGluZUJhY2tlbmREaXNwYXRjaGVySGFuZGxl
cigpIHsgfQp9OwoKI2lmIEVOQUJMRShXT1JLRVJTKQpjbGFzcyBJbnNwZWN0b3JXb3JrZXJCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIgewpwdWJsaWM6CiAgICB2aXJ0dWFsIHZvaWQgZW5hYmxlKEVy
cm9yU3RyaW5nKikgPSAwOwogICAgdmlydHVhbCB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcqKSA9
IDA7CiAgICB2aXJ0dWFsIHZvaWQgc2VuZE1lc3NhZ2VUb1dvcmtlcihFcnJvclN0cmluZyosIGlu
dCBpbl93b3JrZXJJZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIGluX21lc3NhZ2Up
ID0gMDsKICAgIHZpcnR1YWwgdm9pZCBjYW5JbnNwZWN0V29ya2VycyhFcnJvclN0cmluZyosIGJv
b2wqIG91dF9yZXN1bHQpID0gMDsKICAgIHZpcnR1YWwgdm9pZCBjb25uZWN0VG9Xb3JrZXIoRXJy
b3JTdHJpbmcqLCBpbnQgaW5fd29ya2VySWQpID0gMDsKICAgIHZpcnR1YWwgdm9pZCBkaXNjb25u
ZWN0RnJvbVdvcmtlcihFcnJvclN0cmluZyosIGludCBpbl93b3JrZXJJZCkgPSAwOwogICAgdmly
dHVhbCB2b2lkIHNldEF1dG9jb25uZWN0VG9Xb3JrZXJzKEVycm9yU3RyaW5nKiwgYm9vbCBpbl92
YWx1ZSkgPSAwOwpwcm90ZWN0ZWQ6CiAgICB2aXJ0dWFsIH5JbnNwZWN0b3JXb3JrZXJCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KfTsKCiNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKCgpj
bGFzcyBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQmFja2VuZERpc3BhdGNoZXIgRklOQUwgOiBw
dWJsaWMgSW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewpwdWJsaWM6CiAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQmFja2VuZERpc3Bh
dGNoZXI+IGNyZWF0ZShJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciosIEluc3BlY3RvckFwcGxp
Y2F0aW9uQ2FjaGVCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKICAgIHZpcnR1YWwgdm9pZCBk
aXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBtZXNzYWdlKSBPVkVSUklERTsKcHJpdmF0ZToKICAgIHZvaWQgZ2V0RnJh
bWVzV2l0aE1hbmlmZXN0cyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNz
YWdlKTsKICAgIHZvaWQgZW5hYmxlKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3Qm
IG1lc3NhZ2UpOwogICAgdm9pZCBnZXRNYW5pZmVzdEZvckZyYW1lKGxvbmcgY2FsbElkLCBjb25z
dCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwogICAgdm9pZCBnZXRBcHBsaWNhdGlvbkNhY2hl
Rm9yRnJhbWUobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CnBy
aXZhdGU6CiAgICBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQmFja2VuZERpc3BhdGNoZXIoSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyKik7CiAgICBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50Owp9OwoKY2xhc3MgSW5zcGVjdG9yQ1NTQmFja2Vu
ZERpc3BhdGNoZXIgRklOQUwgOiBwdWJsaWMgSW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERp
c3BhdGNoZXIgewpwdWJsaWM6CiAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JDU1NCYWNr
ZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwgSW5zcGVj
dG9yQ1NTQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CiAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0
Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gbWVzc2FnZSkgT1ZFUlJJREU7CnByaXZhdGU6CiAgICB2b2lkIGVuYWJsZShsb25n
IGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKICAgIHZvaWQgZGlzYWJs
ZShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKICAgIHZvaWQg
Z2V0TWF0Y2hlZFN0eWxlc0Zvck5vZGUobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVj
dCYgbWVzc2FnZSk7CiAgICB2b2lkIGdldElubGluZVN0eWxlc0Zvck5vZGUobG9uZyBjYWxsSWQs
IGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CiAgICB2b2lkIGdldENvbXB1dGVkU3R5
bGVGb3JOb2RlKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwog
ICAgdm9pZCBnZXRBbGxTdHlsZVNoZWV0cyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2Jq
ZWN0JiBtZXNzYWdlKTsKICAgIHZvaWQgZ2V0U3R5bGVTaGVldChsb25nIGNhbGxJZCwgY29uc3Qg
SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKICAgIHZvaWQgZ2V0U3R5bGVTaGVldFRleHQobG9u
ZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CiAgICB2b2lkIHNldFN0
eWxlU2hlZXRUZXh0KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2Up
OwogICAgdm9pZCBzZXRTdHlsZVRleHQobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVj
dCYgbWVzc2FnZSk7CiAgICB2b2lkIHNldFByb3BlcnR5VGV4dChsb25nIGNhbGxJZCwgY29uc3Qg
SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKICAgIHZvaWQgdG9nZ2xlUHJvcGVydHkobG9uZyBj
YWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CiAgICB2b2lkIHNldFJ1bGVT
ZWxlY3Rvcihsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKICAg
IHZvaWQgYWRkUnVsZShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdl
KTsKICAgIHZvaWQgZ2V0U3VwcG9ydGVkQ1NTUHJvcGVydGllcyhsb25nIGNhbGxJZCwgY29uc3Qg
SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKICAgIHZvaWQgZm9yY2VQc2V1ZG9TdGF0ZShsb25n
IGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKICAgIHZvaWQgc3RhcnRT
ZWxlY3RvclByb2ZpbGVyKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3Nh
Z2UpOwogICAgdm9pZCBzdG9wU2VsZWN0b3JQcm9maWxlcihsb25nIGNhbGxJZCwgY29uc3QgSW5z
cGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKICAgIHZvaWQgZ2V0TmFtZWRGbG93Q29sbGVjdGlvbihs
b25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKcHJpdmF0ZToKICAg
IEluc3BlY3RvckNTU0JhY2tlbmREaXNwYXRjaGVyKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
KiwgSW5zcGVjdG9yQ1NTQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CiAgICBJbnNwZWN0b3JD
U1NCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQ7Cn07CgpjbGFzcyBJbnNwZWN0b3JD
YW52YXNCYWNrZW5kRGlzcGF0Y2hlciBGSU5BTCA6IHB1YmxpYyBJbnNwZWN0b3JTdXBwbGVtZW50
YWxCYWNrZW5kRGlzcGF0Y2hlciB7CnB1YmxpYzoKICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3Bl
Y3RvckNhbnZhc0JhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIqLCBJbnNwZWN0b3JDYW52YXNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKICAgIHZp
cnR1YWwgdm9pZCBkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFBh
c3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKSBPVkVSUklERTsKcHJpdmF0ZToKICAg
IHZvaWQgZW5hYmxlKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2Up
OwogICAgdm9pZCBkaXNhYmxlKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1l
c3NhZ2UpOwogICAgdm9pZCBkcm9wVHJhY2VMb2cobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rv
ck9iamVjdCYgbWVzc2FnZSk7CiAgICB2b2lkIGhhc1VuaW5zdHJ1bWVudGVkQ2FudmFzZXMobG9u
ZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CiAgICB2b2lkIGNhcHR1
cmVGcmFtZShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKICAg
IHZvaWQgc3RhcnRDYXB0dXJpbmcobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYg
bWVzc2FnZSk7CiAgICB2b2lkIHN0b3BDYXB0dXJpbmcobG9uZyBjYWxsSWQsIGNvbnN0IEluc3Bl
Y3Rvck9iamVjdCYgbWVzc2FnZSk7CiAgICB2b2lkIGdldFRyYWNlTG9nKGxvbmcgY2FsbElkLCBj
b25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwogICAgdm9pZCByZXBsYXlUcmFjZUxvZyhs
b25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKICAgIHZvaWQgZ2V0
UmVzb3VyY2VJbmZvKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2Up
OwogICAgdm9pZCBnZXRSZXNvdXJjZVN0YXRlKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JP
YmplY3QmIG1lc3NhZ2UpOwpwcml2YXRlOgogICAgSW5zcGVjdG9yQ2FudmFzQmFja2VuZERpc3Bh
dGNoZXIoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJbnNwZWN0b3JDYW52YXNCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIqKTsKICAgIEluc3BlY3RvckNhbnZhc0JhY2tlbmREaXNwYXRjaGVy
SGFuZGxlciogbV9hZ2VudDsKfTsKCmNsYXNzIEluc3BlY3RvckNvbnNvbGVCYWNrZW5kRGlzcGF0
Y2hlciBGSU5BTCA6IHB1YmxpYyBJbnNwZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hl
ciB7CnB1YmxpYzoKICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvckNvbnNvbGVCYWNrZW5k
RGlzcGF0Y2hlcj4gY3JlYXRlKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwgSW5zcGVjdG9y
Q29uc29sZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwogICAgdmlydHVhbCB2b2lkIGRpc3Bh
dGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IG1lc3NhZ2UpIE9WRVJSSURFOwpwcml2YXRlOgogICAgdm9pZCBlbmFibGUobG9u
ZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CiAgICB2b2lkIGRpc2Fi
bGUobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CiAgICB2b2lk
IGNsZWFyTWVzc2FnZXMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2Fn
ZSk7CiAgICB2b2lkIHNldE1vbml0b3JpbmdYSFJFbmFibGVkKGxvbmcgY2FsbElkLCBjb25zdCBJ
bnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwogICAgdm9pZCBhZGRJbnNwZWN0ZWROb2RlKGxvbmcg
Y2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwogICAgdm9pZCBhZGRJbnNw
ZWN0ZWRIZWFwT2JqZWN0KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3Nh
Z2UpOwpwcml2YXRlOgogICAgSW5zcGVjdG9yQ29uc29sZUJhY2tlbmREaXNwYXRjaGVyKEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyKiwgSW5zcGVjdG9yQ29uc29sZUJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlciopOwogICAgSW5zcGVjdG9yQ29uc29sZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciog
bV9hZ2VudDsKfTsKCmNsYXNzIEluc3BlY3RvckRPTUJhY2tlbmREaXNwYXRjaGVyIEZJTkFMIDog
cHVibGljIEluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKcHVibGljOgog
ICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yRE9NQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0
ZShJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciosIEluc3BlY3RvckRPTUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlciopOwogICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25z
dCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpIE9W
RVJSSURFOwpwcml2YXRlOgogICAgdm9pZCBnZXREb2N1bWVudChsb25nIGNhbGxJZCwgY29uc3Qg
SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKICAgIHZvaWQgcmVxdWVzdENoaWxkTm9kZXMobG9u
ZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CiAgICB2b2lkIHF1ZXJ5
U2VsZWN0b3IobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CiAg
ICB2b2lkIHF1ZXJ5U2VsZWN0b3JBbGwobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVj
dCYgbWVzc2FnZSk7CiAgICB2b2lkIHNldE5vZGVOYW1lKGxvbmcgY2FsbElkLCBjb25zdCBJbnNw
ZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwogICAgdm9pZCBzZXROb2RlVmFsdWUobG9uZyBjYWxsSWQs
IGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CiAgICB2b2lkIHJlbW92ZU5vZGUobG9u
ZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CiAgICB2b2lkIHNldEF0
dHJpYnV0ZVZhbHVlKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2Up
OwogICAgdm9pZCBzZXRBdHRyaWJ1dGVzQXNUZXh0KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0
b3JPYmplY3QmIG1lc3NhZ2UpOwogICAgdm9pZCByZW1vdmVBdHRyaWJ1dGUobG9uZyBjYWxsSWQs
IGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CiAgICB2b2lkIGdldEV2ZW50TGlzdGVu
ZXJzRm9yTm9kZShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsK
ICAgIHZvaWQgZ2V0T3V0ZXJIVE1MKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3Qm
IG1lc3NhZ2UpOwogICAgdm9pZCBzZXRPdXRlckhUTUwobG9uZyBjYWxsSWQsIGNvbnN0IEluc3Bl
Y3Rvck9iamVjdCYgbWVzc2FnZSk7CiAgICB2b2lkIHBlcmZvcm1TZWFyY2gobG9uZyBjYWxsSWQs
IGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CiAgICB2b2lkIGdldFNlYXJjaFJlc3Vs
dHMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CiAgICB2b2lk
IGRpc2NhcmRTZWFyY2hSZXN1bHRzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3Qm
IG1lc3NhZ2UpOwogICAgdm9pZCByZXF1ZXN0Tm9kZShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVj
dG9yT2JqZWN0JiBtZXNzYWdlKTsKICAgIHZvaWQgc2V0SW5zcGVjdE1vZGVFbmFibGVkKGxvbmcg
Y2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwogICAgdm9pZCBoaWdobGln
aHRSZWN0KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwogICAg
dm9pZCBoaWdobGlnaHRRdWFkKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1l
c3NhZ2UpOwogICAgdm9pZCBoaWdobGlnaHROb2RlKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0
b3JPYmplY3QmIG1lc3NhZ2UpOwogICAgdm9pZCBoaWRlSGlnaGxpZ2h0KGxvbmcgY2FsbElkLCBj
b25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwogICAgdm9pZCBoaWdobGlnaHRGcmFtZShs
b25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKICAgIHZvaWQgcHVz
aE5vZGVCeVBhdGhUb0Zyb250ZW5kKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3Qm
IG1lc3NhZ2UpOwogICAgdm9pZCBwdXNoTm9kZUJ5QmFja2VuZElkVG9Gcm9udGVuZChsb25nIGNh
bGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKICAgIHZvaWQgcmVsZWFzZUJh
Y2tlbmROb2RlSWRzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2Up
OwogICAgdm9pZCByZXNvbHZlTm9kZShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0
JiBtZXNzYWdlKTsKICAgIHZvaWQgZ2V0QXR0cmlidXRlcyhsb25nIGNhbGxJZCwgY29uc3QgSW5z
cGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKICAgIHZvaWQgbW92ZVRvKGxvbmcgY2FsbElkLCBjb25z
dCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwogICAgdm9pZCB1bmRvKGxvbmcgY2FsbElkLCBj
b25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwogICAgdm9pZCByZWRvKGxvbmcgY2FsbElk
LCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwogICAgdm9pZCBtYXJrVW5kb2FibGVT
dGF0ZShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKICAgIHZv
aWQgZm9jdXMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CiAg
ICB2b2lkIHNldEZpbGVJbnB1dEZpbGVzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmpl
Y3QmIG1lc3NhZ2UpOwpwcml2YXRlOgogICAgSW5zcGVjdG9yRE9NQmFja2VuZERpc3BhdGNoZXIo
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJbnNwZWN0b3JET01CYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIqKTsKICAgIEluc3BlY3RvckRPTUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9h
Z2VudDsKfTsKCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKY2xhc3MgSW5zcGVjdG9y
RE9NRGVidWdnZXJCYWNrZW5kRGlzcGF0Y2hlciBGSU5BTCA6IHB1YmxpYyBJbnNwZWN0b3JTdXBw
bGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CnB1YmxpYzoKICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEluc3BlY3RvckRPTURlYnVnZ2VyQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlciosIEluc3BlY3RvckRPTURlYnVnZ2VyQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyKik7CiAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0
cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSkgT1ZFUlJJ
REU7CnByaXZhdGU6CiAgICB2b2lkIHNldERPTUJyZWFrcG9pbnQobG9uZyBjYWxsSWQsIGNvbnN0
IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CiAgICB2b2lkIHJlbW92ZURPTUJyZWFrcG9pbnQo
bG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CiAgICB2b2lkIHNl
dEV2ZW50TGlzdGVuZXJCcmVha3BvaW50KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmpl
Y3QmIG1lc3NhZ2UpOwogICAgdm9pZCByZW1vdmVFdmVudExpc3RlbmVyQnJlYWtwb2ludChsb25n
IGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKICAgIHZvaWQgc2V0SW5z
dHJ1bWVudGF0aW9uQnJlYWtwb2ludChsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0
JiBtZXNzYWdlKTsKICAgIHZvaWQgcmVtb3ZlSW5zdHJ1bWVudGF0aW9uQnJlYWtwb2ludChsb25n
IGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKICAgIHZvaWQgc2V0WEhS
QnJlYWtwb2ludChsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsK
ICAgIHZvaWQgcmVtb3ZlWEhSQnJlYWtwb2ludChsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9y
T2JqZWN0JiBtZXNzYWdlKTsKcHJpdmF0ZToKICAgIEluc3BlY3RvckRPTURlYnVnZ2VyQmFja2Vu
ZERpc3BhdGNoZXIoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJbnNwZWN0b3JET01EZWJ1
Z2dlckJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwogICAgSW5zcGVjdG9yRE9NRGVidWdnZXJC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQ7Cn07CgojZW5kaWYgLy8gRU5BQkxFKEpB
VkFTQ1JJUFRfREVCVUdHRVIpCmNsYXNzIEluc3BlY3RvckRPTVN0b3JhZ2VCYWNrZW5kRGlzcGF0
Y2hlciBGSU5BTCA6IHB1YmxpYyBJbnNwZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hl
ciB7CnB1YmxpYzoKICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvckRPTVN0b3JhZ2VCYWNr
ZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwgSW5zcGVj
dG9yRE9NU3RvcmFnZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwogICAgdmlydHVhbCB2b2lk
IGRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpIE9WRVJSSURFOwpwcml2YXRlOgogICAgdm9pZCBlbmFi
bGUobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CiAgICB2b2lk
IGRpc2FibGUobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CiAg
ICB2b2lkIGdldERPTVN0b3JhZ2VJdGVtcyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2Jq
ZWN0JiBtZXNzYWdlKTsKICAgIHZvaWQgc2V0RE9NU3RvcmFnZUl0ZW0obG9uZyBjYWxsSWQsIGNv
bnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CiAgICB2b2lkIHJlbW92ZURPTVN0b3JhZ2VJ
dGVtKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwpwcml2YXRl
OgogICAgSW5zcGVjdG9yRE9NU3RvcmFnZUJhY2tlbmREaXNwYXRjaGVyKEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyKiwgSW5zcGVjdG9yRE9NU3RvcmFnZUJhY2tlbmREaXNwYXRjaGVySGFuZGxl
ciopOwogICAgSW5zcGVjdG9yRE9NU3RvcmFnZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9h
Z2VudDsKfTsKCiNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQpjbGFzcyBJbnNwZWN0b3JEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVyIEZJTkFMIDogcHVibGljIEluc3BlY3RvclN1cHBsZW1lbnRhbEJh
Y2tlbmREaXNwYXRjaGVyIHsKcHVibGljOgogICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9y
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyKiwgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKICAgIHZp
cnR1YWwgdm9pZCBkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFBh
c3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKSBPVkVSUklERTsKcHJpdmF0ZToKICAg
IHZvaWQgZW5hYmxlKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2Up
OwogICAgdm9pZCBkaXNhYmxlKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1l
c3NhZ2UpOwogICAgdm9pZCBnZXREYXRhYmFzZVRhYmxlTmFtZXMobG9uZyBjYWxsSWQsIGNvbnN0
IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CiAgICB2b2lkIGV4ZWN1dGVTUUwobG9uZyBjYWxs
SWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CnByaXZhdGU6CiAgICBJbnNwZWN0
b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwg
SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKICAgIEluc3BlY3Rv
ckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50Owp9OwoKI2VuZGlmIC8v
IEVOQUJMRShTUUxfREFUQUJBU0UpCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKY2xh
c3MgSW5zcGVjdG9yRGVidWdnZXJCYWNrZW5kRGlzcGF0Y2hlciBGSU5BTCA6IHB1YmxpYyBJbnNw
ZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CnB1YmxpYzoKICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEluc3BlY3RvckRlYnVnZ2VyQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciosIEluc3BlY3RvckRlYnVnZ2VyQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyKik7CiAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0
IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSkgT1ZF
UlJJREU7CnByaXZhdGU6CiAgICB2b2lkIGNhdXNlc1JlY29tcGlsYXRpb24obG9uZyBjYWxsSWQs
IGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CiAgICB2b2lkIHN1cHBvcnRzU2VwYXJh
dGVTY3JpcHRDb21waWxhdGlvbkFuZEV4ZWN1dGlvbihsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVj
dG9yT2JqZWN0JiBtZXNzYWdlKTsKICAgIHZvaWQgZW5hYmxlKGxvbmcgY2FsbElkLCBjb25zdCBJ
bnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwogICAgdm9pZCBkaXNhYmxlKGxvbmcgY2FsbElkLCBj
b25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwogICAgdm9pZCBzZXRCcmVha3BvaW50c0Fj
dGl2ZShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKICAgIHZv
aWQgc2V0QnJlYWtwb2ludEJ5VXJsKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3Qm
IG1lc3NhZ2UpOwogICAgdm9pZCBzZXRCcmVha3BvaW50KGxvbmcgY2FsbElkLCBjb25zdCBJbnNw
ZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwogICAgdm9pZCByZW1vdmVCcmVha3BvaW50KGxvbmcgY2Fs
bElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwogICAgdm9pZCBjb250aW51ZVRv
TG9jYXRpb24obG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CiAg
ICB2b2lkIHN0ZXBPdmVyKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3Nh
Z2UpOwogICAgdm9pZCBzdGVwSW50byhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0
JiBtZXNzYWdlKTsKICAgIHZvaWQgc3RlcE91dChsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9y
T2JqZWN0JiBtZXNzYWdlKTsKICAgIHZvaWQgcGF1c2UobG9uZyBjYWxsSWQsIGNvbnN0IEluc3Bl
Y3Rvck9iamVjdCYgbWVzc2FnZSk7CiAgICB2b2lkIHJlc3VtZShsb25nIGNhbGxJZCwgY29uc3Qg
SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKICAgIHZvaWQgc2VhcmNoSW5Db250ZW50KGxvbmcg
Y2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwogICAgdm9pZCBjYW5TZXRT
Y3JpcHRTb3VyY2UobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7
CiAgICB2b2lkIHNldFNjcmlwdFNvdXJjZShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2Jq
ZWN0JiBtZXNzYWdlKTsKICAgIHZvaWQgZ2V0U2NyaXB0U291cmNlKGxvbmcgY2FsbElkLCBjb25z
dCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwogICAgdm9pZCBnZXRGdW5jdGlvbkRldGFpbHMo
bG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CiAgICB2b2lkIHNl
dFBhdXNlT25FeGNlcHRpb25zKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1l
c3NhZ2UpOwogICAgdm9pZCBldmFsdWF0ZU9uQ2FsbEZyYW1lKGxvbmcgY2FsbElkLCBjb25zdCBJ
bnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwogICAgdm9pZCBjb21waWxlU2NyaXB0KGxvbmcgY2Fs
bElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwogICAgdm9pZCBydW5TY3JpcHQo
bG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CiAgICB2b2lkIHNl
dE92ZXJsYXlNZXNzYWdlKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3Nh
Z2UpOwpwcml2YXRlOgogICAgSW5zcGVjdG9yRGVidWdnZXJCYWNrZW5kRGlzcGF0Y2hlcihJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciosIEluc3BlY3RvckRlYnVnZ2VyQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyKik7CiAgICBJbnNwZWN0b3JEZWJ1Z2dlckJhY2tlbmREaXNwYXRjaGVySGFuZGxl
ciogbV9hZ2VudDsKfTsKCiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKY2xh
c3MgSW5zcGVjdG9yRmlsZVN5c3RlbUJhY2tlbmREaXNwYXRjaGVyIEZJTkFMIDogcHVibGljIElu
c3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKcHVibGljOgogICAgc3RhdGlj
IFBhc3NSZWZQdHI8SW5zcGVjdG9yRmlsZVN5c3RlbUJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUo
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJbnNwZWN0b3JGaWxlU3lzdGVtQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyKik7CiAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2gobG9uZyBjYWxsSWQs
IGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2Fn
ZSkgT1ZFUlJJREU7CnByaXZhdGU6CiAgICB2b2lkIGVuYWJsZShsb25nIGNhbGxJZCwgY29uc3Qg
SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKICAgIHZvaWQgZGlzYWJsZShsb25nIGNhbGxJZCwg
Y29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKICAgIHZvaWQgcmVxdWVzdEZpbGVTeXN0
ZW1Sb290KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwogICAg
dm9pZCByZXF1ZXN0RGlyZWN0b3J5Q29udGVudChsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9y
T2JqZWN0JiBtZXNzYWdlKTsKICAgIHZvaWQgcmVxdWVzdE1ldGFkYXRhKGxvbmcgY2FsbElkLCBj
b25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwogICAgdm9pZCByZXF1ZXN0RmlsZUNvbnRl
bnQobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CiAgICB2b2lk
IGRlbGV0ZUVudHJ5KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2Up
Owpwcml2YXRlOgogICAgSW5zcGVjdG9yRmlsZVN5c3RlbUJhY2tlbmREaXNwYXRjaGVyKEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyKiwgSW5zcGVjdG9yRmlsZVN5c3RlbUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlciopOwogICAgSW5zcGVjdG9yRmlsZVN5c3RlbUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciogbV9hZ2VudDsKfTsKCmNsYXNzIEluc3BlY3RvckhlYXBQcm9maWxlckJhY2tlbmREaXNw
YXRjaGVyIEZJTkFMIDogcHVibGljIEluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRj
aGVyIHsKcHVibGljOgogICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9ySGVhcFByb2ZpbGVy
QmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciosIElu
c3BlY3RvckhlYXBQcm9maWxlckJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwogICAgdmlydHVh
bCB2b2lkIGRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpIE9WRVJSSURFOwpwcml2YXRlOgogICAgdm9p
ZCBoYXNIZWFwUHJvZmlsZXIobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVz
c2FnZSk7CiAgICB2b2lkIGdldFByb2ZpbGVIZWFkZXJzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNw
ZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwogICAgdm9pZCBnZXRIZWFwU25hcHNob3QobG9uZyBjYWxs
SWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CiAgICB2b2lkIHJlbW92ZVByb2Zp
bGUobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CiAgICB2b2lk
IGNsZWFyUHJvZmlsZXMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2Fn
ZSk7CiAgICB2b2lkIHRha2VIZWFwU25hcHNob3QobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rv
ck9iamVjdCYgbWVzc2FnZSk7CiAgICB2b2lkIGNvbGxlY3RHYXJiYWdlKGxvbmcgY2FsbElkLCBj
b25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwogICAgdm9pZCBnZXRPYmplY3RCeUhlYXBP
YmplY3RJZChsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKICAg
IHZvaWQgZ2V0SGVhcE9iamVjdElkKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3Qm
IG1lc3NhZ2UpOwpwcml2YXRlOgogICAgSW5zcGVjdG9ySGVhcFByb2ZpbGVyQmFja2VuZERpc3Bh
dGNoZXIoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJbnNwZWN0b3JIZWFwUHJvZmlsZXJC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKICAgIEluc3BlY3RvckhlYXBQcm9maWxlckJhY2tl
bmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudDsKfTsKCiNpZiBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKY2xhc3MgSW5zcGVjdG9ySW5kZXhlZERCQmFja2VuZERpc3BhdGNoZXIgRklOQUwgOiBw
dWJsaWMgSW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewpwdWJsaWM6CiAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JJbmRleGVkREJCYWNrZW5kRGlzcGF0Y2hlcj4g
Y3JlYXRlKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwgSW5zcGVjdG9ySW5kZXhlZERCQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CiAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2gobG9uZyBj
YWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
bWVzc2FnZSkgT1ZFUlJJREU7CnByaXZhdGU6CiAgICB2b2lkIGVuYWJsZShsb25nIGNhbGxJZCwg
Y29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKICAgIHZvaWQgZGlzYWJsZShsb25nIGNh
bGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKICAgIHZvaWQgcmVxdWVzdERh
dGFiYXNlTmFtZXMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7
CiAgICB2b2lkIHJlcXVlc3REYXRhYmFzZShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2Jq
ZWN0JiBtZXNzYWdlKTsKICAgIHZvaWQgcmVxdWVzdERhdGEobG9uZyBjYWxsSWQsIGNvbnN0IElu
c3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CiAgICB2b2lkIGNsZWFyT2JqZWN0U3RvcmUobG9uZyBj
YWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CnByaXZhdGU6CiAgICBJbnNw
ZWN0b3JJbmRleGVkREJCYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ciosIEluc3BlY3RvckluZGV4ZWREQkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwogICAgSW5z
cGVjdG9ySW5kZXhlZERCQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50Owp9OwoKI2Vu
ZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpjbGFzcyBJbnNwZWN0b3JJbnB1dEJhY2tl
bmREaXNwYXRjaGVyIEZJTkFMIDogcHVibGljIEluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmRE
aXNwYXRjaGVyIHsKcHVibGljOgogICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9ySW5wdXRC
YWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwgSW5z
cGVjdG9ySW5wdXRCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKICAgIHZpcnR1YWwgdm9pZCBk
aXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBtZXNzYWdlKSBPVkVSUklERTsKcHJpdmF0ZToKICAgIHZvaWQgZGlzcGF0
Y2hLZXlFdmVudChsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsK
ICAgIHZvaWQgZGlzcGF0Y2hNb3VzZUV2ZW50KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JP
YmplY3QmIG1lc3NhZ2UpOwpwcml2YXRlOgogICAgSW5zcGVjdG9ySW5wdXRCYWNrZW5kRGlzcGF0
Y2hlcihJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciosIEluc3BlY3RvcklucHV0QmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyKik7CiAgICBJbnNwZWN0b3JJbnB1dEJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciogbV9hZ2VudDsKfTsKCmNsYXNzIEluc3BlY3Rvckluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyIEZJTkFMIDogcHVibGljIEluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVy
IHsKcHVibGljOgogICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9ySW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI+IGNyZWF0ZShJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciosIEluc3BlY3Rv
ckluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwogICAgdmlydHVhbCB2b2lkIGRp
c3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IG1lc3NhZ2UpIE9WRVJSSURFOwpwcml2YXRlOgogICAgdm9pZCBlbmFibGUo
bG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CiAgICB2b2lkIGRp
c2FibGUobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CnByaXZh
dGU6CiAgICBJbnNwZWN0b3JJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlciosIEluc3BlY3Rvckluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySGFuZGxl
ciopOwogICAgSW5zcGVjdG9ySW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2Fn
ZW50Owp9OwoKY2xhc3MgSW5zcGVjdG9yTGF5ZXJUcmVlQmFja2VuZERpc3BhdGNoZXIgRklOQUwg
OiBwdWJsaWMgSW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewpwdWJsaWM6
CiAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JMYXllclRyZWVCYWNrZW5kRGlzcGF0Y2hl
cj4gY3JlYXRlKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwgSW5zcGVjdG9yTGF5ZXJUcmVl
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CiAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2gobG9u
ZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gbWVzc2FnZSkgT1ZFUlJJREU7CnByaXZhdGU6CiAgICB2b2lkIGVuYWJsZShsb25nIGNhbGxJ
ZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKICAgIHZvaWQgZGlzYWJsZShsb25n
IGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKICAgIHZvaWQgbGF5ZXJz
Rm9yTm9kZShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKICAg
IHZvaWQgcmVhc29uc0ZvckNvbXBvc2l0aW5nTGF5ZXIobG9uZyBjYWxsSWQsIGNvbnN0IEluc3Bl
Y3Rvck9iamVjdCYgbWVzc2FnZSk7CnByaXZhdGU6CiAgICBJbnNwZWN0b3JMYXllclRyZWVCYWNr
ZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciosIEluc3BlY3RvckxheWVy
VHJlZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwogICAgSW5zcGVjdG9yTGF5ZXJUcmVlQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50Owp9OwoKY2xhc3MgSW5zcGVjdG9yTWVtb3J5
QmFja2VuZERpc3BhdGNoZXIgRklOQUwgOiBwdWJsaWMgSW5zcGVjdG9yU3VwcGxlbWVudGFsQmFj
a2VuZERpc3BhdGNoZXIgewpwdWJsaWM6CiAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JN
ZW1vcnlCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
KiwgSW5zcGVjdG9yTWVtb3J5QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CiAgICB2aXJ0dWFs
IHZvaWQgZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSkgT1ZFUlJJREU7CnByaXZhdGU6CiAgICB2b2lk
IGdldERPTUNvdW50ZXJzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3Nh
Z2UpOwpwcml2YXRlOgogICAgSW5zcGVjdG9yTWVtb3J5QmFja2VuZERpc3BhdGNoZXIoSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXIqLCBJbnNwZWN0b3JNZW1vcnlCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIqKTsKICAgIEluc3BlY3Rvck1lbW9yeUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9h
Z2VudDsKfTsKCmNsYXNzIEluc3BlY3Rvck5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlciBGSU5BTCA6
IHB1YmxpYyBJbnNwZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CnB1YmxpYzoK
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvck5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcj4g
Y3JlYXRlKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwgSW5zcGVjdG9yTmV0d29ya0JhY2tl
bmREaXNwYXRjaGVySGFuZGxlciopOwogICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoKGxvbmcgY2Fs
bElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1l
c3NhZ2UpIE9WRVJSSURFOwpwcml2YXRlOgogICAgdm9pZCBlbmFibGUobG9uZyBjYWxsSWQsIGNv
bnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CiAgICB2b2lkIGRpc2FibGUobG9uZyBjYWxs
SWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CiAgICB2b2lkIHNldFVzZXJBZ2Vu
dE92ZXJyaWRlKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwog
ICAgdm9pZCBzZXRFeHRyYUhUVFBIZWFkZXJzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JP
YmplY3QmIG1lc3NhZ2UpOwogICAgdm9pZCBnZXRSZXNwb25zZUJvZHkobG9uZyBjYWxsSWQsIGNv
bnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CiAgICB2b2lkIHJlcGxheVhIUihsb25nIGNh
bGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKICAgIHZvaWQgY2FuQ2xlYXJC
cm93c2VyQ2FjaGUobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7
CiAgICB2b2lkIGNsZWFyQnJvd3NlckNhY2hlKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JP
YmplY3QmIG1lc3NhZ2UpOwogICAgdm9pZCBjYW5DbGVhckJyb3dzZXJDb29raWVzKGxvbmcgY2Fs
bElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwogICAgdm9pZCBjbGVhckJyb3dz
ZXJDb29raWVzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwog
ICAgdm9pZCBzZXRDYWNoZURpc2FibGVkKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmpl
Y3QmIG1lc3NhZ2UpOwpwcml2YXRlOgogICAgSW5zcGVjdG9yTmV0d29ya0JhY2tlbmREaXNwYXRj
aGVyKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwgSW5zcGVjdG9yTmV0d29ya0JhY2tlbmRE
aXNwYXRjaGVySGFuZGxlciopOwogICAgSW5zcGVjdG9yTmV0d29ya0JhY2tlbmREaXNwYXRjaGVy
SGFuZGxlciogbV9hZ2VudDsKfTsKCmNsYXNzIEluc3BlY3RvclBhZ2VCYWNrZW5kRGlzcGF0Y2hl
ciBGSU5BTCA6IHB1YmxpYyBJbnNwZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7
CnB1YmxpYzoKICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvclBhZ2VCYWNrZW5kRGlzcGF0
Y2hlcj4gY3JlYXRlKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwgSW5zcGVjdG9yUGFnZUJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlciopOwogICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoKGxvbmcg
Y2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IG1lc3NhZ2UpIE9WRVJSSURFOwpwcml2YXRlOgogICAgdm9pZCBlbmFibGUobG9uZyBjYWxsSWQs
IGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CiAgICB2b2lkIGRpc2FibGUobG9uZyBj
YWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CiAgICB2b2lkIGFkZFNjcmlw
dFRvRXZhbHVhdGVPbkxvYWQobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVz
c2FnZSk7CiAgICB2b2lkIHJlbW92ZVNjcmlwdFRvRXZhbHVhdGVPbkxvYWQobG9uZyBjYWxsSWQs
IGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CiAgICB2b2lkIHJlbG9hZChsb25nIGNh
bGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKICAgIHZvaWQgbmF2aWdhdGUo
bG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CiAgICB2b2lkIGdl
dENvb2tpZXMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CiAg
ICB2b2lkIGRlbGV0ZUNvb2tpZShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBt
ZXNzYWdlKTsKICAgIHZvaWQgZ2V0UmVzb3VyY2VUcmVlKGxvbmcgY2FsbElkLCBjb25zdCBJbnNw
ZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwogICAgdm9pZCBnZXRSZXNvdXJjZUNvbnRlbnQobG9uZyBj
YWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CiAgICB2b2lkIHNlYXJjaElu
UmVzb3VyY2UobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CiAg
ICB2b2lkIHNlYXJjaEluUmVzb3VyY2VzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmpl
Y3QmIG1lc3NhZ2UpOwogICAgdm9pZCBzZXREb2N1bWVudENvbnRlbnQobG9uZyBjYWxsSWQsIGNv
bnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CiAgICB2b2lkIGNhbk92ZXJyaWRlRGV2aWNl
TWV0cmljcyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKICAg
IHZvaWQgc2V0RGV2aWNlTWV0cmljc092ZXJyaWRlKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0
b3JPYmplY3QmIG1lc3NhZ2UpOwogICAgdm9pZCBzZXRTaG93UGFpbnRSZWN0cyhsb25nIGNhbGxJ
ZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKICAgIHZvaWQgY2FuU2hvd0RlYnVn
Qm9yZGVycyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKICAg
IHZvaWQgc2V0U2hvd0RlYnVnQm9yZGVycyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2Jq
ZWN0JiBtZXNzYWdlKTsKICAgIHZvaWQgY2FuU2hvd0ZQU0NvdW50ZXIobG9uZyBjYWxsSWQsIGNv
bnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CiAgICB2b2lkIHNldFNob3dGUFNDb3VudGVy
KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwogICAgdm9pZCBj
YW5Db250aW51b3VzbHlQYWludChsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBt
ZXNzYWdlKTsKICAgIHZvaWQgc2V0Q29udGludW91c1BhaW50aW5nRW5hYmxlZChsb25nIGNhbGxJ
ZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKICAgIHZvaWQgZ2V0U2NyaXB0RXhl
Y3V0aW9uU3RhdHVzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2Up
OwogICAgdm9pZCBzZXRTY3JpcHRFeGVjdXRpb25EaXNhYmxlZChsb25nIGNhbGxJZCwgY29uc3Qg
SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKICAgIHZvaWQgc2V0R2VvbG9jYXRpb25PdmVycmlk
ZShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKICAgIHZvaWQg
Y2xlYXJHZW9sb2NhdGlvbk92ZXJyaWRlKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmpl
Y3QmIG1lc3NhZ2UpOwogICAgdm9pZCBjYW5PdmVycmlkZUdlb2xvY2F0aW9uKGxvbmcgY2FsbElk
LCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwogICAgdm9pZCBzZXREZXZpY2VPcmll
bnRhdGlvbk92ZXJyaWRlKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3Nh
Z2UpOwogICAgdm9pZCBjbGVhckRldmljZU9yaWVudGF0aW9uT3ZlcnJpZGUobG9uZyBjYWxsSWQs
IGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CiAgICB2b2lkIGNhbk92ZXJyaWRlRGV2
aWNlT3JpZW50YXRpb24obG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2Fn
ZSk7CiAgICB2b2lkIHNldFRvdWNoRW11bGF0aW9uRW5hYmxlZChsb25nIGNhbGxJZCwgY29uc3Qg
SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKICAgIHZvaWQgc2V0RW11bGF0ZWRNZWRpYShsb25n
IGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKICAgIHZvaWQgZ2V0Q29t
cG9zaXRpbmdCb3JkZXJzVmlzaWJsZShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0
JiBtZXNzYWdlKTsKICAgIHZvaWQgc2V0Q29tcG9zaXRpbmdCb3JkZXJzVmlzaWJsZShsb25nIGNh
bGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKICAgIHZvaWQgY2FwdHVyZVNj
cmVlbnNob3QobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CiAg
ICB2b2lkIGhhbmRsZUphdmFTY3JpcHREaWFsb2cobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rv
ck9iamVjdCYgbWVzc2FnZSk7CiAgICB2b2lkIGFyY2hpdmUobG9uZyBjYWxsSWQsIGNvbnN0IElu
c3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CnByaXZhdGU6CiAgICBJbnNwZWN0b3JQYWdlQmFja2Vu
ZERpc3BhdGNoZXIoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJbnNwZWN0b3JQYWdlQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CiAgICBJbnNwZWN0b3JQYWdlQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyKiBtX2FnZW50Owp9OwoKI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQpj
bGFzcyBJbnNwZWN0b3JQcm9maWxlckJhY2tlbmREaXNwYXRjaGVyIEZJTkFMIDogcHVibGljIElu
c3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKcHVibGljOgogICAgc3RhdGlj
IFBhc3NSZWZQdHI8SW5zcGVjdG9yUHJvZmlsZXJCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwgSW5zcGVjdG9yUHJvZmlsZXJCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIqKTsKICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaChsb25nIGNhbGxJZCwgY29u
c3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKSBP
VkVSUklERTsKcHJpdmF0ZToKICAgIHZvaWQgY2F1c2VzUmVjb21waWxhdGlvbihsb25nIGNhbGxJ
ZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKICAgIHZvaWQgaXNTYW1wbGluZyhs
b25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKICAgIHZvaWQgaGFz
SGVhcFByb2ZpbGVyKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2Up
OwogICAgdm9pZCBlbmFibGUobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVz
c2FnZSk7CiAgICB2b2lkIGRpc2FibGUobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVj
dCYgbWVzc2FnZSk7CiAgICB2b2lkIHN0YXJ0KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JP
YmplY3QmIG1lc3NhZ2UpOwogICAgdm9pZCBzdG9wKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0
b3JPYmplY3QmIG1lc3NhZ2UpOwogICAgdm9pZCBnZXRQcm9maWxlSGVhZGVycyhsb25nIGNhbGxJ
ZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKICAgIHZvaWQgZ2V0Q1BVUHJvZmls
ZShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKICAgIHZvaWQg
Z2V0SGVhcFNuYXBzaG90KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3Nh
Z2UpOwogICAgdm9pZCByZW1vdmVQcm9maWxlKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JP
YmplY3QmIG1lc3NhZ2UpOwogICAgdm9pZCBjbGVhclByb2ZpbGVzKGxvbmcgY2FsbElkLCBjb25z
dCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwogICAgdm9pZCB0YWtlSGVhcFNuYXBzaG90KGxv
bmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwogICAgdm9pZCBjb2xs
ZWN0R2FyYmFnZShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsK
ICAgIHZvaWQgZ2V0T2JqZWN0QnlIZWFwT2JqZWN0SWQobG9uZyBjYWxsSWQsIGNvbnN0IEluc3Bl
Y3Rvck9iamVjdCYgbWVzc2FnZSk7CiAgICB2b2lkIGdldEhlYXBPYmplY3RJZChsb25nIGNhbGxJ
ZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKcHJpdmF0ZToKICAgIEluc3BlY3Rv
clByb2ZpbGVyQmFja2VuZERpc3BhdGNoZXIoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJ
bnNwZWN0b3JQcm9maWxlckJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwogICAgSW5zcGVjdG9y
UHJvZmlsZXJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQ7Cn07CgojZW5kaWYgLy8g
RU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCmNsYXNzIEluc3BlY3RvclJ1bnRpbWVCYWNrZW5k
RGlzcGF0Y2hlciBGSU5BTCA6IHB1YmxpYyBJbnNwZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlz
cGF0Y2hlciB7CnB1YmxpYzoKICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvclJ1bnRpbWVC
YWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwgSW5z
cGVjdG9yUnVudGltZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwogICAgdmlydHVhbCB2b2lk
IGRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpIE9WRVJSSURFOwpwcml2YXRlOgogICAgdm9pZCBwYXJz
ZShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKICAgIHZvaWQg
ZXZhbHVhdGUobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CiAg
ICB2b2lkIGNhbGxGdW5jdGlvbk9uKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3Qm
IG1lc3NhZ2UpOwogICAgdm9pZCBnZXRQcm9wZXJ0aWVzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNw
ZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwogICAgdm9pZCByZWxlYXNlT2JqZWN0KGxvbmcgY2FsbElk
LCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwogICAgdm9pZCByZWxlYXNlT2JqZWN0
R3JvdXAobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CiAgICB2
b2lkIHJ1bihsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKICAg
IHZvaWQgZW5hYmxlKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2Up
OwogICAgdm9pZCBkaXNhYmxlKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1l
c3NhZ2UpOwpwcml2YXRlOgogICAgSW5zcGVjdG9yUnVudGltZUJhY2tlbmREaXNwYXRjaGVyKElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwgSW5zcGVjdG9yUnVudGltZUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlciopOwogICAgSW5zcGVjdG9yUnVudGltZUJhY2tlbmREaXNwYXRjaGVySGFuZGxl
ciogbV9hZ2VudDsKfTsKCmNsYXNzIEluc3BlY3RvclRpbWVsaW5lQmFja2VuZERpc3BhdGNoZXIg
RklOQUwgOiBwdWJsaWMgSW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewpw
dWJsaWM6CiAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JUaW1lbGluZUJhY2tlbmREaXNw
YXRjaGVyPiBjcmVhdGUoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJbnNwZWN0b3JUaW1l
bGluZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwogICAgdmlydHVhbCB2b2lkIGRpc3BhdGNo
KGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IG1lc3NhZ2UpIE9WRVJSSURFOwpwcml2YXRlOgogICAgdm9pZCBzdGFydChsb25nIGNh
bGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKICAgIHZvaWQgc3RvcChsb25n
IGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKICAgIHZvaWQgc3VwcG9y
dHNGcmFtZUluc3RydW1lbnRhdGlvbihsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0
JiBtZXNzYWdlKTsKICAgIHZvaWQgY2FuTW9uaXRvck1haW5UaHJlYWQobG9uZyBjYWxsSWQsIGNv
bnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CnByaXZhdGU6CiAgICBJbnNwZWN0b3JUaW1l
bGluZUJhY2tlbmREaXNwYXRjaGVyKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwgSW5zcGVj
dG9yVGltZWxpbmVCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKICAgIEluc3BlY3RvclRpbWVs
aW5lQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50Owp9OwoKI2lmIEVOQUJMRShXT1JL
RVJTKQpjbGFzcyBJbnNwZWN0b3JXb3JrZXJCYWNrZW5kRGlzcGF0Y2hlciBGSU5BTCA6IHB1Ymxp
YyBJbnNwZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CnB1YmxpYzoKICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvcldvcmtlckJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUo
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJbnNwZWN0b3JXb3JrZXJCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIqKTsKICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaChsb25nIGNhbGxJZCwgY29u
c3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKSBP
VkVSUklERTsKcHJpdmF0ZToKICAgIHZvaWQgZW5hYmxlKGxvbmcgY2FsbElkLCBjb25zdCBJbnNw
ZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwogICAgdm9pZCBkaXNhYmxlKGxvbmcgY2FsbElkLCBjb25z
dCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwogICAgdm9pZCBzZW5kTWVzc2FnZVRvV29ya2Vy
KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwogICAgdm9pZCBj
YW5JbnNwZWN0V29ya2Vycyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNz
YWdlKTsKICAgIHZvaWQgY29ubmVjdFRvV29ya2VyKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0
b3JPYmplY3QmIG1lc3NhZ2UpOwogICAgdm9pZCBkaXNjb25uZWN0RnJvbVdvcmtlcihsb25nIGNh
bGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKICAgIHZvaWQgc2V0QXV0b2Nv
bm5lY3RUb1dvcmtlcnMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2Fn
ZSk7CnByaXZhdGU6CiAgICBJbnNwZWN0b3JXb3JrZXJCYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlciosIEluc3BlY3RvcldvcmtlckJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciopOwogICAgSW5zcGVjdG9yV29ya2VyQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2Fn
ZW50Owp9OwoKI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQoKfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQoKI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyc19oKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>216835</attachid>
            <date>2013-11-13 11:59:19 -0800</date>
            <delta_ts>2013-11-13 11:59:19 -0800</delta_ts>
            <desc>[AFTER] InspectorBackendDispatchers.cpp</desc>
            <filename>InspectorBackendDispatchers.cpp</filename>
            <type>application/octet-stream</type>
            <size>271599</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">Ly8gRmlsZSBpcyBnZW5lcmF0ZWQgYnkgV2ViQ29yZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2Vu
ZXJhdG9ySW5zcGVjdG9yLnB5CgovLyBDb3B5cmlnaHQgKGMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgovLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIENocm9taXVtIEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KCiNpbmNsdWRlICJjb25maWcuaCIKCiNpZiBFTkFCTEUoSU5TUEVDVE9S
KQoKI2luY2x1ZGUgIkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oIgoKI2luY2x1ZGUgIklu
c3BlY3RvckFnZW50LmgiCiNpbmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIKI2luY2x1ZGUgIklu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oIgojaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgoj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CgpuYW1lc3BhY2UgV2ViQ29yZSB7CgpQYXNz
UmVmUHRyPEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVCYWNrZW5kRGlzcGF0Y2hlcj4gSW5zcGVj
dG9yQXBwbGljYXRpb25DYWNoZUJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyLCBJbnNwZWN0b3JBcHBsaWNhdGlvbkNh
Y2hlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKewogICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERp
c3BhdGNoZXIsIGFnZW50KSk7Cn0KCkluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVCYWNrZW5kRGlz
cGF0Y2hlcjo6SW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUJhY2tlbmREaXNwYXRjaGVyKEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9yQXBwbGlj
YXRpb25DYWNoZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCiAgICA6IEluc3BlY3Rv
clN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQogICAgLCBt
X2FnZW50KGFnZW50KQp7CiAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNo
ZXJGb3JEb21haW4oQVNDSUlMaXRlcmFsKCJBcHBsaWNhdGlvbkNhY2hlIiksIHRoaXMpOwp9Cgp2
b2lkIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2go
bG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gbWVzc2FnZSkKewogICAgUmVmPEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVCYWNrZW5k
RGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CgogICAgdHlwZWRlZiB2b2lkIChJbnNwZWN0b3JB
cHBsaWNhdGlvbkNhY2hlQmFja2VuZERpc3BhdGNoZXI6OipDYWxsSGFuZGxlcikobG9uZyBjYWxs
SWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CiAgICB0eXBlZGVmIEhhc2hNYXA8
U3RyaW5nLCBDYWxsSGFuZGxlcj4gRGlzcGF0Y2hNYXA7CiAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KERpc3BhdGNoTWFwLCBkaXNwYXRjaE1hcCwgKCkpOwogICAgaWYgKGRpc3BhdGNoTWFwLmlzRW1w
dHkoKSkgewogICAgICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgTWV0aG9kVGFibGUgewogICAgICAg
ICAgICBjb25zdCBjaGFyKiBuYW1lOwogICAgICAgICAgICBDYWxsSGFuZGxlciBoYW5kbGVyOwog
ICAgICAgIH0gY29tbWFuZHNbXSA9IHsKICAgICAgICAgICAgeyAiZ2V0RnJhbWVzV2l0aE1hbmlm
ZXN0cyIsICAmSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUJhY2tlbmREaXNwYXRjaGVyOjpnZXRG
cmFtZXNXaXRoTWFuaWZlc3RzIH0sCiAgICAgICAgICAgIHsgImVuYWJsZSIsICAmSW5zcGVjdG9y
QXBwbGljYXRpb25DYWNoZUJhY2tlbmREaXNwYXRjaGVyOjplbmFibGUgfSwKICAgICAgICAgICAg
eyAiZ2V0TWFuaWZlc3RGb3JGcmFtZSIsICAmSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUJhY2tl
bmREaXNwYXRjaGVyOjpnZXRNYW5pZmVzdEZvckZyYW1lIH0sCiAgICAgICAgICAgIHsgImdldEFw
cGxpY2F0aW9uQ2FjaGVGb3JGcmFtZSIsICAmSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUJhY2tl
bmREaXNwYXRjaGVyOjpnZXRBcHBsaWNhdGlvbkNhY2hlRm9yRnJhbWUgfSwKICAgICAgICB9Owog
ICAgICAgIHNpemVfdCBsZW5ndGggPSBXVEZfQVJSQVlfTEVOR1RIKGNvbW1hbmRzKTsKICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQogICAgICAgICAgICBkaXNwYXRj
aE1hcC5hZGQoY29tbWFuZHNbaV0ubmFtZSwgY29tbWFuZHNbaV0uaGFuZGxlcik7CiAgICB9Cgog
ICAgSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPjo6aXRlcmF0b3IgaXQgPSBkaXNwYXRjaE1h
cC5maW5kKG1ldGhvZCk7CiAgICBpZiAoaXQgPT0gZGlzcGF0Y2hNYXAuZW5kKCkpIHsKICAgICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgU3RyaW5nKCInIikgKyAiQXBw
bGljYXRpb25DYWNoZSIgKyAnLicgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CiAgICAg
ICAgcmV0dXJuOwogICAgfQoKICAgICgoKnRoaXMpLippdC0+dmFsdWUpKGNhbGxJZCwgKm1lc3Nh
Z2UuZ2V0KCkpOwp9Cgp2b2lkIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVCYWNrZW5kRGlzcGF0
Y2hlcjo6Z2V0RnJhbWVzV2l0aE1hbmlmZXN0cyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9y
T2JqZWN0JikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IElu
c3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5
cGVCdWlsZGVyOjpBcHBsaWNhdGlvbkNhY2hlOjpGcmFtZVdpdGhNYW5pZmVzdD4gPiBvdXRfZnJh
bWVJZHM7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVy
cm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2FnZW50LT5nZXRGcmFtZXNXaXRoTWFuaWZlc3Rz
KCZlcnJvciwgb3V0X2ZyYW1lSWRzKTsKCiAgICAgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkgewog
ICAgICAgICAgICByZXN1bHQtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgiZnJhbWVJZHMiKSwgb3V0
X2ZyYW1lSWRzKTsKICAgICAgICB9CiAgICB9CiAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5k
UmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBwcm90b2NvbEVycm9ycy5yZWxlYXNl
KCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQmFja2VuZERpc3Bh
dGNoZXI6OmVuYWJsZShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JikKewogICAg
UmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5Ojpj
cmVhdGUoKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29s
RXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fYWdlbnQtPmVuYWJsZSgmZXJyb3IpOwoKCiAg
ICB9CiAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQu
cmVsZWFzZSgpLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNw
ZWN0b3JBcHBsaWNhdGlvbkNhY2hlQmFja2VuZERpc3BhdGNoZXI6OmdldE1hbmlmZXN0Rm9yRnJh
bWUobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSkKewogICAgUmVm
UHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVh
dGUoKTsKCiAgICBTdHJpbmcgb3V0X21hbmlmZXN0VVJMOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2JqZWN0KCJwYXJhbXMiKTsKICAg
IEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdl
dCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJv
cnMuZ2V0KCk7CiAgICBTdHJpbmcgaW5fZnJhbWVJZCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoImZyYW1lSWQi
KSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBl
cnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9hZ2Vu
dC0+Z2V0TWFuaWZlc3RGb3JGcmFtZSgmZXJyb3IsIGluX2ZyYW1lSWQsICZvdXRfbWFuaWZlc3RV
UkwpOwoKICAgICAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgICAgIHJlc3VsdC0+
c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibWFuaWZlc3RVUkwiKSwgb3V0X21hbmlmZXN0VVJMKTsK
ICAgICAgICB9CiAgICB9CiAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2Fs
bElkLCByZXN1bHQucmVsZWFzZSgpLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsK
fQoKdm9pZCBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQmFja2VuZERpc3BhdGNoZXI6OmdldEFw
cGxpY2F0aW9uQ2FjaGVGb3JGcmFtZShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0
JiBtZXNzYWdlKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0g
SW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXBwbGlj
YXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNoZT4gb3V0X2FwcGxpY2F0aW9uQ2FjaGU7CgogICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gbWVzc2FnZS5nZXRPYmpl
Y3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBw
YXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQ
dHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIFN0cmluZyBpbl9mcmFtZUlkID0gSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJ
TGl0ZXJhbCgiZnJhbWVJZCIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
ICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkp
IHsKICAgICAgICBtX2FnZW50LT5nZXRBcHBsaWNhdGlvbkNhY2hlRm9yRnJhbWUoJmVycm9yLCBp
bl9mcmFtZUlkLCBvdXRfYXBwbGljYXRpb25DYWNoZSk7CgogICAgICAgIGlmICghZXJyb3IubGVu
Z3RoKCkpIHsKICAgICAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoImFwcGxp
Y2F0aW9uQ2FjaGUiKSwgb3V0X2FwcGxpY2F0aW9uQ2FjaGUpOwogICAgICAgIH0KICAgIH0KICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNl
KCksIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9CgpQYXNzUmVmUHRyPEluc3Bl
Y3RvckNTU0JhY2tlbmREaXNwYXRjaGVyPiBJbnNwZWN0b3JDU1NCYWNrZW5kRGlzcGF0Y2hlcjo6
Y3JlYXRlKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5z
cGVjdG9yQ1NTQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKewogICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBJbnNwZWN0b3JDU1NCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hl
ciwgYWdlbnQpKTsKfQoKSW5zcGVjdG9yQ1NTQmFja2VuZERpc3BhdGNoZXI6Okluc3BlY3RvckNT
U0JhY2tlbmREaXNwYXRjaGVyKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlz
cGF0Y2hlciwgSW5zcGVjdG9yQ1NTQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKICAg
IDogSW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNo
ZXIpCiAgICAsIG1fYWdlbnQoYWdlbnQpCnsKICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lz
dGVyRGlzcGF0Y2hlckZvckRvbWFpbihBU0NJSUxpdGVyYWwoIkNTUyIpLCB0aGlzKTsKfQoKdm9p
ZCBJbnNwZWN0b3JDU1NCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNv
bnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSkK
ewogICAgUmVmPEluc3BlY3RvckNTU0JhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsK
CiAgICB0eXBlZGVmIHZvaWQgKEluc3BlY3RvckNTU0JhY2tlbmREaXNwYXRjaGVyOjoqQ2FsbEhh
bmRsZXIpKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwogICAg
dHlwZWRlZiBIYXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+IERpc3BhdGNoTWFwOwogICAgREVG
SU5FX1NUQVRJQ19MT0NBTChEaXNwYXRjaE1hcCwgZGlzcGF0Y2hNYXAsICgpKTsKICAgIGlmIChk
aXNwYXRjaE1hcC5pc0VtcHR5KCkpIHsKICAgICAgICBzdGF0aWMgY29uc3Qgc3RydWN0IE1ldGhv
ZFRhYmxlIHsKICAgICAgICAgICAgY29uc3QgY2hhciogbmFtZTsKICAgICAgICAgICAgQ2FsbEhh
bmRsZXIgaGFuZGxlcjsKICAgICAgICB9IGNvbW1hbmRzW10gPSB7CiAgICAgICAgICAgIHsgImVu
YWJsZSIsICAmSW5zcGVjdG9yQ1NTQmFja2VuZERpc3BhdGNoZXI6OmVuYWJsZSB9LAogICAgICAg
ICAgICB7ICJkaXNhYmxlIiwgICZJbnNwZWN0b3JDU1NCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzYWJs
ZSB9LAogICAgICAgICAgICB7ICJnZXRNYXRjaGVkU3R5bGVzRm9yTm9kZSIsICAmSW5zcGVjdG9y
Q1NTQmFja2VuZERpc3BhdGNoZXI6OmdldE1hdGNoZWRTdHlsZXNGb3JOb2RlIH0sCiAgICAgICAg
ICAgIHsgImdldElubGluZVN0eWxlc0Zvck5vZGUiLCAgJkluc3BlY3RvckNTU0JhY2tlbmREaXNw
YXRjaGVyOjpnZXRJbmxpbmVTdHlsZXNGb3JOb2RlIH0sCiAgICAgICAgICAgIHsgImdldENvbXB1
dGVkU3R5bGVGb3JOb2RlIiwgICZJbnNwZWN0b3JDU1NCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0Q29t
cHV0ZWRTdHlsZUZvck5vZGUgfSwKICAgICAgICAgICAgeyAiZ2V0QWxsU3R5bGVTaGVldHMiLCAg
Jkluc3BlY3RvckNTU0JhY2tlbmREaXNwYXRjaGVyOjpnZXRBbGxTdHlsZVNoZWV0cyB9LAogICAg
ICAgICAgICB7ICJnZXRTdHlsZVNoZWV0IiwgICZJbnNwZWN0b3JDU1NCYWNrZW5kRGlzcGF0Y2hl
cjo6Z2V0U3R5bGVTaGVldCB9LAogICAgICAgICAgICB7ICJnZXRTdHlsZVNoZWV0VGV4dCIsICAm
SW5zcGVjdG9yQ1NTQmFja2VuZERpc3BhdGNoZXI6OmdldFN0eWxlU2hlZXRUZXh0IH0sCiAgICAg
ICAgICAgIHsgInNldFN0eWxlU2hlZXRUZXh0IiwgICZJbnNwZWN0b3JDU1NCYWNrZW5kRGlzcGF0
Y2hlcjo6c2V0U3R5bGVTaGVldFRleHQgfSwKICAgICAgICAgICAgeyAic2V0U3R5bGVUZXh0Iiwg
ICZJbnNwZWN0b3JDU1NCYWNrZW5kRGlzcGF0Y2hlcjo6c2V0U3R5bGVUZXh0IH0sCiAgICAgICAg
ICAgIHsgInNldFByb3BlcnR5VGV4dCIsICAmSW5zcGVjdG9yQ1NTQmFja2VuZERpc3BhdGNoZXI6
OnNldFByb3BlcnR5VGV4dCB9LAogICAgICAgICAgICB7ICJ0b2dnbGVQcm9wZXJ0eSIsICAmSW5z
cGVjdG9yQ1NTQmFja2VuZERpc3BhdGNoZXI6OnRvZ2dsZVByb3BlcnR5IH0sCiAgICAgICAgICAg
IHsgInNldFJ1bGVTZWxlY3RvciIsICAmSW5zcGVjdG9yQ1NTQmFja2VuZERpc3BhdGNoZXI6OnNl
dFJ1bGVTZWxlY3RvciB9LAogICAgICAgICAgICB7ICJhZGRSdWxlIiwgICZJbnNwZWN0b3JDU1NC
YWNrZW5kRGlzcGF0Y2hlcjo6YWRkUnVsZSB9LAogICAgICAgICAgICB7ICJnZXRTdXBwb3J0ZWRD
U1NQcm9wZXJ0aWVzIiwgICZJbnNwZWN0b3JDU1NCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3VwcG9y
dGVkQ1NTUHJvcGVydGllcyB9LAogICAgICAgICAgICB7ICJmb3JjZVBzZXVkb1N0YXRlIiwgICZJ
bnNwZWN0b3JDU1NCYWNrZW5kRGlzcGF0Y2hlcjo6Zm9yY2VQc2V1ZG9TdGF0ZSB9LAogICAgICAg
ICAgICB7ICJzdGFydFNlbGVjdG9yUHJvZmlsZXIiLCAgJkluc3BlY3RvckNTU0JhY2tlbmREaXNw
YXRjaGVyOjpzdGFydFNlbGVjdG9yUHJvZmlsZXIgfSwKICAgICAgICAgICAgeyAic3RvcFNlbGVj
dG9yUHJvZmlsZXIiLCAgJkluc3BlY3RvckNTU0JhY2tlbmREaXNwYXRjaGVyOjpzdG9wU2VsZWN0
b3JQcm9maWxlciB9LAogICAgICAgICAgICB7ICJnZXROYW1lZEZsb3dDb2xsZWN0aW9uIiwgICZJ
bnNwZWN0b3JDU1NCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0TmFtZWRGbG93Q29sbGVjdGlvbiB9LAog
ICAgICAgIH07CiAgICAgICAgc2l6ZV90IGxlbmd0aCA9IFdURl9BUlJBWV9MRU5HVEgoY29tbWFu
ZHMpOwogICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCiAgICAgICAg
ICAgIGRpc3BhdGNoTWFwLmFkZChjb21tYW5kc1tpXS5uYW1lLCBjb21tYW5kc1tpXS5oYW5kbGVy
KTsKICAgIH0KCiAgICBIYXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+OjppdGVyYXRvciBpdCA9
IGRpc3BhdGNoTWFwLmZpbmQobWV0aG9kKTsKICAgIGlmIChpdCA9PSBkaXNwYXRjaE1hcC5lbmQo
KSkgewogICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNh
bGxJZCwgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCBTdHJpbmco
IiciKSArICJDU1MiICsgJy4nICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOwogICAgICAg
IHJldHVybjsKICAgIH0KCiAgICAoKCp0aGlzKS4qaXQtPnZhbHVlKShjYWxsSWQsICptZXNzYWdl
LmdldCgpKTsKfQoKdm9pZCBJbnNwZWN0b3JDU1NCYWNrZW5kRGlzcGF0Y2hlcjo6ZW5hYmxlKGxv
bmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgp
KSB7CiAgICAgICAgbV9hZ2VudC0+ZW5hYmxlKCZlcnJvcik7CgoKICAgIH0KICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIHByb3Rv
Y29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckNTU0JhY2tlbmRE
aXNwYXRjaGVyOjpkaXNhYmxlKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmKQp7
CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJy
YXk6OmNyZWF0ZSgpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJv
dG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9hZ2VudC0+ZGlzYWJsZSgmZXJyb3Ip
OwoKCiAgICB9CiAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCBy
ZXN1bHQucmVsZWFzZSgpLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9p
ZCBJbnNwZWN0b3JDU1NCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0TWF0Y2hlZFN0eWxlc0Zvck5vZGUo
bG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSkKewogICAgUmVmUHRy
PEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUo
KTsKCiAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpDU1M6OlJ1bGVN
YXRjaD4gPiBvdXRfbWF0Y2hlZENTU1J1bGVzOwogICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJh
eTxUeXBlQnVpbGRlcjo6Q1NTOjpQc2V1ZG9JZE1hdGNoZXM+ID4gb3V0X3BzZXVkb0VsZW1lbnRz
OwogICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6Q1NTOjpJbmhlcml0
ZWRTdHlsZUVudHJ5PiA+IG91dF9pbmhlcml0ZWQ7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcGFyYW1zQ29udGFpbmVyID0gbWVzc2FnZS5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5z
cGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7
CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5n
ZXQoKTsKICAgIGludCBpbl9ub2RlSWQgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0
SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJub2RlSWQiKSwgbnVsbHB0ciwg
cHJvdG9jb2xFcnJvcnNQdHIpOwogICAgYm9vbCBpbmNsdWRlUHNldWRvX3ZhbHVlRm91bmQgPSBm
YWxzZTsKICAgIGJvb2wgaW5faW5jbHVkZVBzZXVkbyA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpnZXRCb29sZWFuKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJpbmNsdWRl
UHNldWRvIiksICZpbmNsdWRlUHNldWRvX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsK
ICAgIGJvb2wgaW5jbHVkZUluaGVyaXRlZF92YWx1ZUZvdW5kID0gZmFsc2U7CiAgICBib29sIGlu
X2luY2x1ZGVJbmhlcml0ZWQgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0Qm9vbGVh
bihwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgiaW5jbHVkZUluaGVyaXRlZCIpLCAm
aW5jbHVkZUluaGVyaXRlZF92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
ICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkp
IHsKICAgICAgICBtX2FnZW50LT5nZXRNYXRjaGVkU3R5bGVzRm9yTm9kZSgmZXJyb3IsIGluX25v
ZGVJZCwgaW5jbHVkZVBzZXVkb192YWx1ZUZvdW5kID8gJmluX2luY2x1ZGVQc2V1ZG8gOiAwLCBp
bmNsdWRlSW5oZXJpdGVkX3ZhbHVlRm91bmQgPyAmaW5faW5jbHVkZUluaGVyaXRlZCA6IDAsIG91
dF9tYXRjaGVkQ1NTUnVsZXMsIG91dF9wc2V1ZG9FbGVtZW50cywgb3V0X2luaGVyaXRlZCk7Cgog
ICAgICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICAgICAgaWYgKG91dF9tYXRjaGVk
Q1NTUnVsZXMpCiAgICAgICAgICAgICAgICByZXN1bHQtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgi
bWF0Y2hlZENTU1J1bGVzIiksIG91dF9tYXRjaGVkQ1NTUnVsZXMpOwogICAgICAgICAgICBpZiAo
b3V0X3BzZXVkb0VsZW1lbnRzKQogICAgICAgICAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZShBU0NJ
SUxpdGVyYWwoInBzZXVkb0VsZW1lbnRzIiksIG91dF9wc2V1ZG9FbGVtZW50cyk7CiAgICAgICAg
ICAgIGlmIChvdXRfaW5oZXJpdGVkKQogICAgICAgICAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZShB
U0NJSUxpdGVyYWwoImluaGVyaXRlZCIpLCBvdXRfaW5oZXJpdGVkKTsKICAgICAgICB9CiAgICB9
CiAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVs
ZWFzZSgpLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0
b3JDU1NCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0SW5saW5lU3R5bGVzRm9yTm9kZShsb25nIGNhbGxJ
ZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIFJl
ZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZT4gb3V0X2lubGluZVN0eWxlOwogICAgUmVm
UHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNTU1N0eWxlPiBvdXRfYXR0cmlidXRlc1N0eWxlOwoKICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2Jq
ZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0g
cGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3Jz
UHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBpbnQgaW5fbm9kZUlkID0gSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI6OmdldEludChwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJh
bCgibm9kZUlkIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJy
b3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAg
ICAgIG1fYWdlbnQtPmdldElubGluZVN0eWxlc0Zvck5vZGUoJmVycm9yLCBpbl9ub2RlSWQsIG91
dF9pbmxpbmVTdHlsZSwgb3V0X2F0dHJpYnV0ZXNTdHlsZSk7CgogICAgICAgIGlmICghZXJyb3Iu
bGVuZ3RoKCkpIHsKICAgICAgICAgICAgaWYgKG91dF9pbmxpbmVTdHlsZSkKICAgICAgICAgICAg
ICAgIHJlc3VsdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJpbmxpbmVTdHlsZSIpLCBvdXRfaW5s
aW5lU3R5bGUpOwogICAgICAgICAgICBpZiAob3V0X2F0dHJpYnV0ZXNTdHlsZSkKICAgICAgICAg
ICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJhdHRyaWJ1dGVzU3R5bGUiKSwg
b3V0X2F0dHJpYnV0ZXNTdHlsZSk7CiAgICAgICAgfQogICAgfQogICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgcHJvdG9jb2xFcnJv
cnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQ1NTQmFja2VuZERpc3BhdGNo
ZXI6OmdldENvbXB1dGVkU3R5bGVGb3JOb2RlKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JP
YmplY3QmIG1lc3NhZ2UpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJv
cnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpB
cnJheTxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NDb21wdXRlZFN0eWxlUHJvcGVydHk+ID4gb3V0X2Nv
bXB1dGVkU3R5bGU7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVy
ID0gbWVzc2FnZS5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJh
bXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJh
eSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIGludCBpbl9u
b2RlSWQgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0SW50KHBhcmFtc0NvbnRhaW5l
clB0ciwgQVNDSUlMaXRlcmFsKCJub2RlSWQiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIp
OwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMt
Pmxlbmd0aCgpKSB7CiAgICAgICAgbV9hZ2VudC0+Z2V0Q29tcHV0ZWRTdHlsZUZvck5vZGUoJmVy
cm9yLCBpbl9ub2RlSWQsIG91dF9jb21wdXRlZFN0eWxlKTsKCiAgICAgICAgaWYgKCFlcnJvci5s
ZW5ndGgoKSkgewogICAgICAgICAgICByZXN1bHQtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgiY29t
cHV0ZWRTdHlsZSIpLCBvdXRfY29tcHV0ZWRTdHlsZSk7CiAgICAgICAgfQogICAgfQogICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwg
cHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQ1NTQmFj
a2VuZERpc3BhdGNoZXI6OmdldEFsbFN0eWxlU2hlZXRzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNw
ZWN0b3JPYmplY3QmKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3Jz
ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJy
YXk8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTU3R5bGVTaGVldEhlYWRlcj4gPiBvdXRfaGVhZGVyczsK
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5s
ZW5ndGgoKSkgewogICAgICAgIG1fYWdlbnQtPmdldEFsbFN0eWxlU2hlZXRzKCZlcnJvciwgb3V0
X2hlYWRlcnMpOwoKICAgICAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgICAgIHJl
c3VsdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJoZWFkZXJzIiksIG91dF9oZWFkZXJzKTsKICAg
ICAgICB9CiAgICB9CiAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElk
LCByZXN1bHQucmVsZWFzZSgpLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoK
dm9pZCBJbnNwZWN0b3JDU1NCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3R5bGVTaGVldChsb25nIGNh
bGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKQp7CiAgICBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAg
IFJlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9keT4gb3V0X3N0eWxlU2hl
ZXQ7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gbWVzc2Fn
ZS5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWlu
ZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9j
b2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIFN0cmluZyBpbl9zdHlsZVNo
ZWV0SWQgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRh
aW5lclB0ciwgQVNDSUlMaXRlcmFsKCJzdHlsZVNoZWV0SWQiKSwgbnVsbHB0ciwgcHJvdG9jb2xF
cnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9j
b2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9hZ2VudC0+Z2V0U3R5bGVTaGVldCgmZXJy
b3IsIGluX3N0eWxlU2hlZXRJZCwgb3V0X3N0eWxlU2hlZXQpOwoKICAgICAgICBpZiAoIWVycm9y
Lmxlbmd0aCgpKSB7CiAgICAgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJz
dHlsZVNoZWV0IiksIG91dF9zdHlsZVNoZWV0KTsKICAgICAgICB9CiAgICB9CiAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBwcm90
b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JDU1NCYWNrZW5k
RGlzcGF0Y2hlcjo6Z2V0U3R5bGVTaGVldFRleHQobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rv
ck9iamVjdCYgbWVzc2FnZSkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVy
cm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBTdHJpbmcgb3V0X3RleHQ7Cgog
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gbWVzc2FnZS5nZXRP
YmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIg
PSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJv
cnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIFN0cmluZyBpbl9zdHlsZVNoZWV0SWQg
PSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0
ciwgQVNDSUlMaXRlcmFsKCJzdHlsZVNoZWV0SWQiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQ
dHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJv
cnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9hZ2VudC0+Z2V0U3R5bGVTaGVldFRleHQoJmVycm9y
LCBpbl9zdHlsZVNoZWV0SWQsICZvdXRfdGV4dCk7CgogICAgICAgIGlmICghZXJyb3IubGVuZ3Ro
KCkpIHsKICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJ0ZXh0Iiks
IG91dF90ZXh0KTsKICAgICAgICB9CiAgICB9CiAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5k
UmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBwcm90b2NvbEVycm9ycy5yZWxlYXNl
KCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JDU1NCYWNrZW5kRGlzcGF0Y2hlcjo6c2V0U3R5
bGVTaGVldFRleHQobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSkK
ewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFy
cmF5OjpjcmVhdGUoKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWlu
ZXIgPSBtZXNzYWdlLmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBh
cmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFy
cmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgU3RyaW5n
IGluX3N0eWxlU2hlZXRJZCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmco
cGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInN0eWxlU2hlZXRJZCIpLCBudWxscHRy
LCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBTdHJpbmcgaW5fdGV4dCA9IEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwo
InRleHQiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0
cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAg
bV9hZ2VudC0+c2V0U3R5bGVTaGVldFRleHQoJmVycm9yLCBpbl9zdHlsZVNoZWV0SWQsIGluX3Rl
eHQpOwoKCiAgICB9CiAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElk
LCByZXN1bHQucmVsZWFzZSgpLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoK
dm9pZCBJbnNwZWN0b3JDU1NCYWNrZW5kRGlzcGF0Y2hlcjo6c2V0U3R5bGVUZXh0KGxvbmcgY2Fs
bElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpCnsKICAgIFJlZlB0cjxJbnNwZWN0
b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAg
UmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNTU1N0eWxlPiBvdXRfc3R5bGU7CgogICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gbWVzc2FnZS5nZXRPYmplY3QoInBh
cmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXND
b250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBw
cm90b2NvbEVycm9ycy5nZXQoKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGluX3N0eWxl
SWQgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0T2JqZWN0KHBhcmFtc0NvbnRhaW5l
clB0ciwgQVNDSUlMaXRlcmFsKCJzdHlsZUlkIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRy
KTsKICAgIFN0cmluZyBpbl90ZXh0ID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0
cmluZyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgidGV4dCIpLCBudWxscHRyLCBw
cm90b2NvbEVycm9yc1B0cik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYg
KCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2FnZW50LT5zZXRTdHlsZVRl
eHQoJmVycm9yLCBpbl9zdHlsZUlkLCBpbl90ZXh0LCBvdXRfc3R5bGUpOwoKICAgICAgICBpZiAo
IWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoQVNDSUlMaXRl
cmFsKCJzdHlsZSIpLCBvdXRfc3R5bGUpOwogICAgICAgIH0KICAgIH0KICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIHByb3RvY29s
RXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckNTU0JhY2tlbmREaXNw
YXRjaGVyOjpzZXRQcm9wZXJ0eVRleHQobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVj
dCYgbWVzc2FnZSkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9
IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6
Q1NTU3R5bGU+IG91dF9zdHlsZTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXND
b250YWluZXIgPSBtZXNzYWdlLmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmpl
Y3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3Bl
Y3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaW5fc3R5bGVJZCA9IEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpnZXRPYmplY3QocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInN0eWxl
SWQiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgaW50IGluX3Byb3BlcnR5SW5k
ZXggPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0SW50KHBhcmFtc0NvbnRhaW5lclB0
ciwgQVNDSUlMaXRlcmFsKCJwcm9wZXJ0eUluZGV4IiksIG51bGxwdHIsIHByb3RvY29sRXJyb3Jz
UHRyKTsKICAgIFN0cmluZyBpbl90ZXh0ID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6Omdl
dFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgidGV4dCIpLCBudWxscHRy
LCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBib29sIGluX292ZXJ3cml0ZSA9IEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjpnZXRCb29sZWFuKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRl
cmFsKCJvdmVyd3JpdGUiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAg
ICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7
CiAgICAgICAgbV9hZ2VudC0+c2V0UHJvcGVydHlUZXh0KCZlcnJvciwgaW5fc3R5bGVJZCwgaW5f
cHJvcGVydHlJbmRleCwgaW5fdGV4dCwgaW5fb3ZlcndyaXRlLCBvdXRfc3R5bGUpOwoKICAgICAg
ICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoQVND
SUlMaXRlcmFsKCJzdHlsZSIpLCBvdXRfc3R5bGUpOwogICAgICAgIH0KICAgIH0KICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIHBy
b3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckNTU0JhY2tl
bmREaXNwYXRjaGVyOjp0b2dnbGVQcm9wZXJ0eShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9y
T2JqZWN0JiBtZXNzYWdlKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJy
b3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6
Q1NTOjpDU1NTdHlsZT4gb3V0X3N0eWxlOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBh
cmFtc0NvbnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rv
ck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAg
SW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBpbl9zdHlsZUlkID0gSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI6OmdldE9iamVjdChwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgi
c3R5bGVJZCIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBpbnQgaW5fcHJvcGVy
dHlJbmRleCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRJbnQocGFyYW1zQ29udGFp
bmVyUHRyLCBBU0NJSUxpdGVyYWwoInByb3BlcnR5SW5kZXgiKSwgbnVsbHB0ciwgcHJvdG9jb2xF
cnJvcnNQdHIpOwogICAgYm9vbCBpbl9kaXNhYmxlID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OmdldEJvb2xlYW4ocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoImRpc2FibGUi
KSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBl
cnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9hZ2Vu
dC0+dG9nZ2xlUHJvcGVydHkoJmVycm9yLCBpbl9zdHlsZUlkLCBpbl9wcm9wZXJ0eUluZGV4LCBp
bl9kaXNhYmxlLCBvdXRfc3R5bGUpOwoKICAgICAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7CiAg
ICAgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJzdHlsZSIpLCBvdXRfc3R5
bGUpOwogICAgICAgIH0KICAgIH0KICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25z
ZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJy
b3IpOwp9Cgp2b2lkIEluc3BlY3RvckNTU0JhY2tlbmREaXNwYXRjaGVyOjpzZXRSdWxlU2VsZWN0
b3IobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSkKewogICAgUmVm
UHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVh
dGUoKTsKCiAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUnVsZT4gb3V0X3J1bGU7Cgog
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gbWVzc2FnZS5nZXRP
YmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIg
PSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJv
cnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IGluX3J1bGVJZCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRPYmplY3QocGFyYW1z
Q29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInJ1bGVJZCIpLCBudWxscHRyLCBwcm90b2NvbEVy
cm9yc1B0cik7CiAgICBTdHJpbmcgaW5fc2VsZWN0b3IgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJzZWxlY3Rv
ciIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5n
IGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2Fn
ZW50LT5zZXRSdWxlU2VsZWN0b3IoJmVycm9yLCBpbl9ydWxlSWQsIGluX3NlbGVjdG9yLCBvdXRf
cnVsZSk7CgogICAgICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICAgICAgcmVzdWx0
LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoInJ1bGUiKSwgb3V0X3J1bGUpOwogICAgICAgIH0KICAg
IH0KICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5y
ZWxlYXNlKCksIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3Bl
Y3RvckNTU0JhY2tlbmREaXNwYXRjaGVyOjphZGRSdWxlKGxvbmcgY2FsbElkLCBjb25zdCBJbnNw
ZWN0b3JPYmplY3QmIG1lc3NhZ2UpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9j
b2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgUmVmUHRyPFR5cGVCdWls
ZGVyOjpDU1M6OkNTU1J1bGU+IG91dF9ydWxlOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHBhcmFtc0NvbnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3Bl
Y3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwog
ICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0
KCk7CiAgICBpbnQgaW5fY29udGV4dE5vZGVJZCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
OjpnZXRJbnQocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoImNvbnRleHROb2RlSWQi
KSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgU3RyaW5nIGluX3NlbGVjdG9yID0g
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIs
IEFTQ0lJTGl0ZXJhbCgic2VsZWN0b3IiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOwoK
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxl
bmd0aCgpKSB7CiAgICAgICAgbV9hZ2VudC0+YWRkUnVsZSgmZXJyb3IsIGluX2NvbnRleHROb2Rl
SWQsIGluX3NlbGVjdG9yLCBvdXRfcnVsZSk7CgogICAgICAgIGlmICghZXJyb3IubGVuZ3RoKCkp
IHsKICAgICAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoInJ1bGUiKSwgb3V0
X3J1bGUpOwogICAgICAgIH0KICAgIH0KICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNw
b25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwg
ZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckNTU0JhY2tlbmREaXNwYXRjaGVyOjpnZXRTdXBwb3J0
ZWRDU1NQcm9wZXJ0aWVzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmKQp7CiAg
ICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6
OmNyZWF0ZSgpOwoKICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkNT
Uzo6Q1NTUHJvcGVydHlJbmZvPiA+IG91dF9jc3NQcm9wZXJ0aWVzOwoKICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJv
clN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAg
ICAgbV9hZ2VudC0+Z2V0U3VwcG9ydGVkQ1NTUHJvcGVydGllcygmZXJyb3IsIG91dF9jc3NQcm9w
ZXJ0aWVzKTsKCiAgICAgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkgewogICAgICAgICAgICByZXN1
bHQtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgiY3NzUHJvcGVydGllcyIpLCBvdXRfY3NzUHJvcGVy
dGllcyk7CiAgICAgICAgfQogICAgfQogICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3Bv
bnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBl
cnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQ1NTQmFja2VuZERpc3BhdGNoZXI6OmZvcmNlUHNldWRv
U3RhdGUobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSkKewogICAg
UmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5Ojpj
cmVhdGUoKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSBt
ZXNzYWdlLmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0Nv
bnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBw
cm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgaW50IGluX25vZGVJ
ZCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRJbnQocGFyYW1zQ29udGFpbmVyUHRy
LCBBU0NJSUxpdGVyYWwoIm5vZGVJZCIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7CiAg
ICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGluX2ZvcmNlZFBzZXVkb0NsYXNzZXMgPSBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0QXJyYXkocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxp
dGVyYWwoImZvcmNlZFBzZXVkb0NsYXNzZXMiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIp
OwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMt
Pmxlbmd0aCgpKSB7CiAgICAgICAgbV9hZ2VudC0+Zm9yY2VQc2V1ZG9TdGF0ZSgmZXJyb3IsIGlu
X25vZGVJZCwgaW5fZm9yY2VkUHNldWRvQ2xhc3Nlcyk7CgoKICAgIH0KICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIHByb3RvY29s
RXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckNTU0JhY2tlbmREaXNw
YXRjaGVyOjpzdGFydFNlbGVjdG9yUHJvZmlsZXIobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rv
ck9iamVjdCYpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJ
bnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVz
dWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwog
ICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2FnZW50LT5zdGFy
dFNlbGVjdG9yUHJvZmlsZXIoJmVycm9yKTsKCgogICAgfQogICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgcHJvdG9jb2xFcnJvcnMu
cmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQ1NTQmFja2VuZERpc3BhdGNoZXI6
OnN0b3BTZWxlY3RvclByb2ZpbGVyKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3Qm
KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9y
QXJyYXk6OmNyZWF0ZSgpOwoKICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpTZWxlY3RvclBy
b2ZpbGU+IG91dF9wcm9maWxlOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlm
ICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9hZ2VudC0+c3RvcFNlbGVj
dG9yUHJvZmlsZXIoJmVycm9yLCBvdXRfcHJvZmlsZSk7CgogICAgICAgIGlmICghZXJyb3IubGVu
Z3RoKCkpIHsKICAgICAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoInByb2Zp
bGUiKSwgb3V0X3Byb2ZpbGUpOwogICAgICAgIH0KICAgIH0KICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIHByb3RvY29sRXJyb3Jz
LnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckNTU0JhY2tlbmREaXNwYXRjaGVy
OjpnZXROYW1lZEZsb3dDb2xsZWN0aW9uKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmpl
Y3QmIG1lc3NhZ2UpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMg
PSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJh
eTxUeXBlQnVpbGRlcjo6Q1NTOjpOYW1lZEZsb3c+ID4gb3V0X25hbWVkRmxvd3M7CgogICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gbWVzc2FnZS5nZXRPYmplY3Qo
InBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJh
bXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIg
PSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIGludCBpbl9kb2N1bWVudE5vZGVJZCA9IEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRJbnQocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxp
dGVyYWwoImRvY3VtZW50Tm9kZUlkIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5n
dGgoKSkgewogICAgICAgIG1fYWdlbnQtPmdldE5hbWVkRmxvd0NvbGxlY3Rpb24oJmVycm9yLCBp
bl9kb2N1bWVudE5vZGVJZCwgb3V0X25hbWVkRmxvd3MpOwoKICAgICAgICBpZiAoIWVycm9yLmxl
bmd0aCgpKSB7CiAgICAgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJuYW1l
ZEZsb3dzIiksIG91dF9uYW1lZEZsb3dzKTsKICAgICAgICB9CiAgICB9CiAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBwcm90b2Nv
bEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKUGFzc1JlZlB0cjxJbnNwZWN0b3JDYW52YXNC
YWNrZW5kRGlzcGF0Y2hlcj4gSW5zcGVjdG9yQ2FudmFzQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0
ZShJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIsIEluc3BlY3Rv
ckNhbnZhc0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCnsKICAgIHJldHVybiBhZG9w
dFJlZihuZXcgSW5zcGVjdG9yQ2FudmFzQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNo
ZXIsIGFnZW50KSk7Cn0KCkluc3BlY3RvckNhbnZhc0JhY2tlbmREaXNwYXRjaGVyOjpJbnNwZWN0
b3JDYW52YXNCYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFj
a2VuZERpc3BhdGNoZXIsIEluc3BlY3RvckNhbnZhc0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciog
YWdlbnQpCiAgICA6IEluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tl
bmREaXNwYXRjaGVyKQogICAgLCBtX2FnZW50KGFnZW50KQp7CiAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oQVNDSUlMaXRlcmFsKCJDYW52YXMiKSwg
dGhpcyk7Cn0KCnZvaWQgSW5zcGVjdG9yQ2FudmFzQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNo
KGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IG1lc3NhZ2UpCnsKICAgIFJlZjxJbnNwZWN0b3JDYW52YXNCYWNrZW5kRGlzcGF0Y2hl
cj4gcHJvdGVjdCgqdGhpcyk7CgogICAgdHlwZWRlZiB2b2lkIChJbnNwZWN0b3JDYW52YXNCYWNr
ZW5kRGlzcGF0Y2hlcjo6KkNhbGxIYW5kbGVyKShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9y
T2JqZWN0JiBtZXNzYWdlKTsKICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVy
PiBEaXNwYXRjaE1hcDsKICAgIERFRklORV9TVEFUSUNfTE9DQUwoRGlzcGF0Y2hNYXAsIGRpc3Bh
dGNoTWFwLCAoKSk7CiAgICBpZiAoZGlzcGF0Y2hNYXAuaXNFbXB0eSgpKSB7CiAgICAgICAgc3Rh
dGljIGNvbnN0IHN0cnVjdCBNZXRob2RUYWJsZSB7CiAgICAgICAgICAgIGNvbnN0IGNoYXIqIG5h
bWU7CiAgICAgICAgICAgIENhbGxIYW5kbGVyIGhhbmRsZXI7CiAgICAgICAgfSBjb21tYW5kc1td
ID0gewogICAgICAgICAgICB7ICJlbmFibGUiLCAgJkluc3BlY3RvckNhbnZhc0JhY2tlbmREaXNw
YXRjaGVyOjplbmFibGUgfSwKICAgICAgICAgICAgeyAiZGlzYWJsZSIsICAmSW5zcGVjdG9yQ2Fu
dmFzQmFja2VuZERpc3BhdGNoZXI6OmRpc2FibGUgfSwKICAgICAgICAgICAgeyAiZHJvcFRyYWNl
TG9nIiwgICZJbnNwZWN0b3JDYW52YXNCYWNrZW5kRGlzcGF0Y2hlcjo6ZHJvcFRyYWNlTG9nIH0s
CiAgICAgICAgICAgIHsgImhhc1VuaW5zdHJ1bWVudGVkQ2FudmFzZXMiLCAgJkluc3BlY3RvckNh
bnZhc0JhY2tlbmREaXNwYXRjaGVyOjpoYXNVbmluc3RydW1lbnRlZENhbnZhc2VzIH0sCiAgICAg
ICAgICAgIHsgImNhcHR1cmVGcmFtZSIsICAmSW5zcGVjdG9yQ2FudmFzQmFja2VuZERpc3BhdGNo
ZXI6OmNhcHR1cmVGcmFtZSB9LAogICAgICAgICAgICB7ICJzdGFydENhcHR1cmluZyIsICAmSW5z
cGVjdG9yQ2FudmFzQmFja2VuZERpc3BhdGNoZXI6OnN0YXJ0Q2FwdHVyaW5nIH0sCiAgICAgICAg
ICAgIHsgInN0b3BDYXB0dXJpbmciLCAgJkluc3BlY3RvckNhbnZhc0JhY2tlbmREaXNwYXRjaGVy
OjpzdG9wQ2FwdHVyaW5nIH0sCiAgICAgICAgICAgIHsgImdldFRyYWNlTG9nIiwgICZJbnNwZWN0
b3JDYW52YXNCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0VHJhY2VMb2cgfSwKICAgICAgICAgICAgeyAi
cmVwbGF5VHJhY2VMb2ciLCAgJkluc3BlY3RvckNhbnZhc0JhY2tlbmREaXNwYXRjaGVyOjpyZXBs
YXlUcmFjZUxvZyB9LAogICAgICAgICAgICB7ICJnZXRSZXNvdXJjZUluZm8iLCAgJkluc3BlY3Rv
ckNhbnZhc0JhY2tlbmREaXNwYXRjaGVyOjpnZXRSZXNvdXJjZUluZm8gfSwKICAgICAgICAgICAg
eyAiZ2V0UmVzb3VyY2VTdGF0ZSIsICAmSW5zcGVjdG9yQ2FudmFzQmFja2VuZERpc3BhdGNoZXI6
OmdldFJlc291cmNlU3RhdGUgfSwKICAgICAgICB9OwogICAgICAgIHNpemVfdCBsZW5ndGggPSBX
VEZfQVJSQVlfTEVOR1RIKGNvbW1hbmRzKTsKICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGxlbmd0aDsgKytpKQogICAgICAgICAgICBkaXNwYXRjaE1hcC5hZGQoY29tbWFuZHNbaV0ubmFt
ZSwgY29tbWFuZHNbaV0uaGFuZGxlcik7CiAgICB9CgogICAgSGFzaE1hcDxTdHJpbmcsIENhbGxI
YW5kbGVyPjo6aXRlcmF0b3IgaXQgPSBkaXNwYXRjaE1hcC5maW5kKG1ldGhvZCk7CiAgICBpZiAo
aXQgPT0gZGlzcGF0Y2hNYXAuZW5kKCkpIHsKICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5y
ZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpN
ZXRob2ROb3RGb3VuZCwgU3RyaW5nKCInIikgKyAiQ2FudmFzIiArICcuJyArIG1ldGhvZCArICIn
IHdhcyBub3QgZm91bmQiKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgKCgqdGhpcykuKml0
LT52YWx1ZSkoY2FsbElkLCAqbWVzc2FnZS5nZXQoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yQ2FudmFz
QmFja2VuZERpc3BhdGNoZXI6OmVuYWJsZShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2Jq
ZWN0JikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3Bl
Y3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBp
ZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fYWdlbnQtPmVuYWJsZSgm
ZXJyb3IpOwoKCiAgICB9CiAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2Fs
bElkLCByZXN1bHQucmVsZWFzZSgpLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsK
fQoKdm9pZCBJbnNwZWN0b3JDYW52YXNCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzYWJsZShsb25nIGNh
bGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5
PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
RXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewog
ICAgICAgIG1fYWdlbnQtPmRpc2FibGUoJmVycm9yKTsKCgogICAgfQogICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgcHJvdG9jb2xF
cnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQ2FudmFzQmFja2VuZERp
c3BhdGNoZXI6OmRyb3BUcmFjZUxvZyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0
JiBtZXNzYWdlKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0g
SW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBh
cmFtc0NvbnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rv
ck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAg
SW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7
CiAgICBTdHJpbmcgaW5fdHJhY2VMb2dJZCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpn
ZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInRyYWNlTG9nSWQiKSwg
bnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJv
cjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9hZ2VudC0+
ZHJvcFRyYWNlTG9nKCZlcnJvciwgaW5fdHJhY2VMb2dJZCk7CgoKICAgIH0KICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIHByb3Rv
Y29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckNhbnZhc0JhY2tl
bmREaXNwYXRjaGVyOjpoYXNVbmluc3RydW1lbnRlZENhbnZhc2VzKGxvbmcgY2FsbElkLCBjb25z
dCBJbnNwZWN0b3JPYmplY3QmKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29s
RXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGJvb2wgb3V0X3Jlc3VsdDsK
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5s
ZW5ndGgoKSkgewogICAgICAgIG1fYWdlbnQtPmhhc1VuaW5zdHJ1bWVudGVkQ2FudmFzZXMoJmVy
cm9yLCAmb3V0X3Jlc3VsdCk7CgogICAgICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsKICAgICAg
ICAgICAgcmVzdWx0LT5zZXRCb29sZWFuKEFTQ0lJTGl0ZXJhbCgicmVzdWx0IiksIG91dF9yZXN1
bHQpOwogICAgICAgIH0KICAgIH0KICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25z
ZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJy
b3IpOwp9Cgp2b2lkIEluc3BlY3RvckNhbnZhc0JhY2tlbmREaXNwYXRjaGVyOjpjYXB0dXJlRnJh
bWUobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSkKewogICAgUmVm
UHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVh
dGUoKTsKCiAgICBUeXBlQnVpbGRlcjo6Q2FudmFzOjpUcmFjZUxvZ0lkIG91dF90cmFjZUxvZ0lk
OwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IG1lc3NhZ2Uu
Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVy
UHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29s
RXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBib29sIGZyYW1lSWRfdmFsdWVG
b3VuZCA9IGZhbHNlOwogICAgU3RyaW5nIGluX2ZyYW1lSWQgPSBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJmcmFt
ZUlkIiksICZmcmFtZUlkX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkg
ewogICAgICAgIG1fYWdlbnQtPmNhcHR1cmVGcmFtZSgmZXJyb3IsIGZyYW1lSWRfdmFsdWVGb3Vu
ZCA/ICZpbl9mcmFtZUlkIDogMCwgJm91dF90cmFjZUxvZ0lkKTsKCiAgICAgICAgaWYgKCFlcnJv
ci5sZW5ndGgoKSkgewogICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwo
InRyYWNlTG9nSWQiKSwgb3V0X3RyYWNlTG9nSWQpOwogICAgICAgIH0KICAgIH0KICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIHBy
b3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckNhbnZhc0Jh
Y2tlbmREaXNwYXRjaGVyOjpzdGFydENhcHR1cmluZyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVj
dG9yT2JqZWN0JiBtZXNzYWdlKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29s
RXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIFR5cGVCdWlsZGVyOjpDYW52
YXM6OlRyYWNlTG9nSWQgb3V0X3RyYWNlTG9nSWQ7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcGFyYW1zQ29udGFpbmVyID0gbWVzc2FnZS5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5z
cGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7
CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5n
ZXQoKTsKICAgIGJvb2wgZnJhbWVJZF92YWx1ZUZvdW5kID0gZmFsc2U7CiAgICBTdHJpbmcgaW5f
ZnJhbWVJZCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29u
dGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoImZyYW1lSWQiKSwgJmZyYW1lSWRfdmFsdWVGb3VuZCwg
cHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlm
ICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9hZ2VudC0+c3RhcnRDYXB0
dXJpbmcoJmVycm9yLCBmcmFtZUlkX3ZhbHVlRm91bmQgPyAmaW5fZnJhbWVJZCA6IDAsICZvdXRf
dHJhY2VMb2dJZCk7CgogICAgICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICAgICAg
cmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJ0cmFjZUxvZ0lkIiksIG91dF90cmFjZUxv
Z0lkKTsKICAgICAgICB9CiAgICB9CiAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9u
c2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVy
cm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JDYW52YXNCYWNrZW5kRGlzcGF0Y2hlcjo6c3RvcENhcHR1
cmluZyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKQp7CiAgICBS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNy
ZWF0ZSgpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IG1l
c3NhZ2UuZ2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29u
dGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHBy
b3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBTdHJpbmcgaW5fdHJh
Y2VMb2dJZCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29u
dGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInRyYWNlTG9nSWQiKSwgbnVsbHB0ciwgcHJvdG9jb2xF
cnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9j
b2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9hZ2VudC0+c3RvcENhcHR1cmluZygmZXJy
b3IsIGluX3RyYWNlTG9nSWQpOwoKCiAgICB9CiAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5k
UmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBwcm90b2NvbEVycm9ycy5yZWxlYXNl
KCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JDYW52YXNCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0
VHJhY2VMb2cobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSkKewog
ICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5
OjpjcmVhdGUoKTsKCiAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkNhbnZhczo6VHJhY2VMb2c+IG91
dF90cmFjZUxvZzsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIg
PSBtZXNzYWdlLmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFt
c0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5
KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgU3RyaW5nIGlu
X3RyYWNlTG9nSWQgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFt
c0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJ0cmFjZUxvZ0lkIiksIG51bGxwdHIsIHByb3Rv
Y29sRXJyb3JzUHRyKTsKICAgIGJvb2wgc3RhcnRPZmZzZXRfdmFsdWVGb3VuZCA9IGZhbHNlOwog
ICAgaW50IGluX3N0YXJ0T2Zmc2V0ID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldElu
dChwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgic3RhcnRPZmZzZXQiKSwgJnN0YXJ0
T2Zmc2V0X3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgbWF4TGVuZ3Ro
X3ZhbHVlRm91bmQgPSBmYWxzZTsKICAgIGludCBpbl9tYXhMZW5ndGggPSBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjo6Z2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJt
YXhMZW5ndGgiKSwgJm1heExlbmd0aF92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7Cgog
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVu
Z3RoKCkpIHsKICAgICAgICBtX2FnZW50LT5nZXRUcmFjZUxvZygmZXJyb3IsIGluX3RyYWNlTG9n
SWQsIHN0YXJ0T2Zmc2V0X3ZhbHVlRm91bmQgPyAmaW5fc3RhcnRPZmZzZXQgOiAwLCBtYXhMZW5n
dGhfdmFsdWVGb3VuZCA/ICZpbl9tYXhMZW5ndGggOiAwLCBvdXRfdHJhY2VMb2cpOwoKICAgICAg
ICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoQVND
SUlMaXRlcmFsKCJ0cmFjZUxvZyIpLCBvdXRfdHJhY2VMb2cpOwogICAgICAgIH0KICAgIH0KICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNl
KCksIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckNh
bnZhc0JhY2tlbmREaXNwYXRjaGVyOjpyZXBsYXlUcmFjZUxvZyhsb25nIGNhbGxJZCwgY29uc3Qg
SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHBy
b3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIFJlZlB0cjxUeXBl
QnVpbGRlcjo6Q2FudmFzOjpSZXNvdXJjZVN0YXRlPiBvdXRfcmVzb3VyY2VTdGF0ZTsKCiAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSBtZXNzYWdlLmdldE9iamVj
dCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBh
cmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0
ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgU3RyaW5nIGluX3RyYWNlTG9nSWQgPSBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgQVND
SUlMaXRlcmFsKCJ0cmFjZUxvZ0lkIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKICAg
IGludCBpbl9zdGVwTm8gPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0SW50KHBhcmFt
c0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJzdGVwTm8iKSwgbnVsbHB0ciwgcHJvdG9jb2xF
cnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9j
b2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9hZ2VudC0+cmVwbGF5VHJhY2VMb2coJmVy
cm9yLCBpbl90cmFjZUxvZ0lkLCBpbl9zdGVwTm8sIG91dF9yZXNvdXJjZVN0YXRlKTsKCiAgICAg
ICAgaWYgKCFlcnJvci5sZW5ndGgoKSkgewogICAgICAgICAgICByZXN1bHQtPnNldFZhbHVlKEFT
Q0lJTGl0ZXJhbCgicmVzb3VyY2VTdGF0ZSIpLCBvdXRfcmVzb3VyY2VTdGF0ZSk7CiAgICAgICAg
fQogICAgfQogICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVz
dWx0LnJlbGVhc2UoKSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQg
SW5zcGVjdG9yQ2FudmFzQmFja2VuZERpc3BhdGNoZXI6OmdldFJlc291cmNlSW5mbyhsb25nIGNh
bGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKQp7CiAgICBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAg
IFJlZlB0cjxUeXBlQnVpbGRlcjo6Q2FudmFzOjpSZXNvdXJjZUluZm8+IG91dF9yZXNvdXJjZUlu
Zm87CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gbWVzc2Fn
ZS5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWlu
ZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9j
b2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIFN0cmluZyBpbl9yZXNvdXJj
ZUlkID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWlu
ZXJQdHIsIEFTQ0lJTGl0ZXJhbCgicmVzb3VyY2VJZCIpLCBudWxscHRyLCBwcm90b2NvbEVycm9y
c1B0cik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVy
cm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2FnZW50LT5nZXRSZXNvdXJjZUluZm8oJmVycm9y
LCBpbl9yZXNvdXJjZUlkLCBvdXRfcmVzb3VyY2VJbmZvKTsKCiAgICAgICAgaWYgKCFlcnJvci5s
ZW5ndGgoKSkgewogICAgICAgICAgICByZXN1bHQtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgicmVz
b3VyY2VJbmZvIiksIG91dF9yZXNvdXJjZUluZm8pOwogICAgICAgIH0KICAgIH0KICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIHBy
b3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckNhbnZhc0Jh
Y2tlbmREaXNwYXRjaGVyOjpnZXRSZXNvdXJjZVN0YXRlKGxvbmcgY2FsbElkLCBjb25zdCBJbnNw
ZWN0b3JPYmplY3QmIG1lc3NhZ2UpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9j
b2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgUmVmUHRyPFR5cGVCdWls
ZGVyOjpDYW52YXM6OlJlc291cmNlU3RhdGU+IG91dF9yZXNvdXJjZVN0YXRlOwoKICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2JqZWN0KCJw
YXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1z
Q29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0g
cHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBTdHJpbmcgaW5fdHJhY2VMb2dJZCA9IEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxp
dGVyYWwoInRyYWNlTG9nSWQiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgU3Ry
aW5nIGluX3Jlc291cmNlSWQgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5n
KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJyZXNvdXJjZUlkIiksIG51bGxwdHIs
IHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBp
ZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fYWdlbnQtPmdldFJlc291
cmNlU3RhdGUoJmVycm9yLCBpbl90cmFjZUxvZ0lkLCBpbl9yZXNvdXJjZUlkLCBvdXRfcmVzb3Vy
Y2VTdGF0ZSk7CgogICAgICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICAgICAgcmVz
dWx0LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoInJlc291cmNlU3RhdGUiKSwgb3V0X3Jlc291cmNl
U3RhdGUpOwogICAgICAgIH0KICAgIH0KICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNw
b25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwg
ZXJyb3IpOwp9CgpQYXNzUmVmUHRyPEluc3BlY3RvckNvbnNvbGVCYWNrZW5kRGlzcGF0Y2hlcj4g
SW5zcGVjdG9yQ29uc29sZUJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyLCBJbnNwZWN0b3JDb25zb2xlQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKewogICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0
b3JDb25zb2xlQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7Cn0K
Ckluc3BlY3RvckNvbnNvbGVCYWNrZW5kRGlzcGF0Y2hlcjo6SW5zcGVjdG9yQ29uc29sZUJhY2tl
bmREaXNwYXRjaGVyKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hl
ciwgSW5zcGVjdG9yQ29uc29sZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCiAgICA6
IEluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVy
KQogICAgLCBtX2FnZW50KGFnZW50KQp7CiAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3Rl
ckRpc3BhdGNoZXJGb3JEb21haW4oQVNDSUlMaXRlcmFsKCJDb25zb2xlIiksIHRoaXMpOwp9Cgp2
b2lkIEluc3BlY3RvckNvbnNvbGVCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBjYWxs
SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVz
c2FnZSkKewogICAgUmVmPEluc3BlY3RvckNvbnNvbGVCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVj
dCgqdGhpcyk7CgogICAgdHlwZWRlZiB2b2lkIChJbnNwZWN0b3JDb25zb2xlQmFja2VuZERpc3Bh
dGNoZXI6OipDYWxsSGFuZGxlcikobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYg
bWVzc2FnZSk7CiAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj4gRGlzcGF0
Y2hNYXA7CiAgICBERUZJTkVfU1RBVElDX0xPQ0FMKERpc3BhdGNoTWFwLCBkaXNwYXRjaE1hcCwg
KCkpOwogICAgaWYgKGRpc3BhdGNoTWFwLmlzRW1wdHkoKSkgewogICAgICAgIHN0YXRpYyBjb25z
dCBzdHJ1Y3QgTWV0aG9kVGFibGUgewogICAgICAgICAgICBjb25zdCBjaGFyKiBuYW1lOwogICAg
ICAgICAgICBDYWxsSGFuZGxlciBoYW5kbGVyOwogICAgICAgIH0gY29tbWFuZHNbXSA9IHsKICAg
ICAgICAgICAgeyAiZW5hYmxlIiwgICZJbnNwZWN0b3JDb25zb2xlQmFja2VuZERpc3BhdGNoZXI6
OmVuYWJsZSB9LAogICAgICAgICAgICB7ICJkaXNhYmxlIiwgICZJbnNwZWN0b3JDb25zb2xlQmFj
a2VuZERpc3BhdGNoZXI6OmRpc2FibGUgfSwKICAgICAgICAgICAgeyAiY2xlYXJNZXNzYWdlcyIs
ICAmSW5zcGVjdG9yQ29uc29sZUJhY2tlbmREaXNwYXRjaGVyOjpjbGVhck1lc3NhZ2VzIH0sCiAg
ICAgICAgICAgIHsgInNldE1vbml0b3JpbmdYSFJFbmFibGVkIiwgICZJbnNwZWN0b3JDb25zb2xl
QmFja2VuZERpc3BhdGNoZXI6OnNldE1vbml0b3JpbmdYSFJFbmFibGVkIH0sCiAgICAgICAgICAg
IHsgImFkZEluc3BlY3RlZE5vZGUiLCAgJkluc3BlY3RvckNvbnNvbGVCYWNrZW5kRGlzcGF0Y2hl
cjo6YWRkSW5zcGVjdGVkTm9kZSB9LAogICAgICAgICAgICB7ICJhZGRJbnNwZWN0ZWRIZWFwT2Jq
ZWN0IiwgICZJbnNwZWN0b3JDb25zb2xlQmFja2VuZERpc3BhdGNoZXI6OmFkZEluc3BlY3RlZEhl
YXBPYmplY3QgfSwKICAgICAgICB9OwogICAgICAgIHNpemVfdCBsZW5ndGggPSBXVEZfQVJSQVlf
TEVOR1RIKGNvbW1hbmRzKTsKICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsg
KytpKQogICAgICAgICAgICBkaXNwYXRjaE1hcC5hZGQoY29tbWFuZHNbaV0ubmFtZSwgY29tbWFu
ZHNbaV0uaGFuZGxlcik7CiAgICB9CgogICAgSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPjo6
aXRlcmF0b3IgaXQgPSBkaXNwYXRjaE1hcC5maW5kKG1ldGhvZCk7CiAgICBpZiAoaXQgPT0gZGlz
cGF0Y2hNYXAuZW5kKCkpIHsKICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90
b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RG
b3VuZCwgU3RyaW5nKCInIikgKyAiQ29uc29sZSIgKyAnLicgKyBtZXRob2QgKyAiJyB3YXMgbm90
IGZvdW5kIik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICgoKnRoaXMpLippdC0+dmFsdWUp
KGNhbGxJZCwgKm1lc3NhZ2UuZ2V0KCkpOwp9Cgp2b2lkIEluc3BlY3RvckNvbnNvbGVCYWNrZW5k
RGlzcGF0Y2hlcjo6ZW5hYmxlKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmKQp7
CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJy
YXk6OmNyZWF0ZSgpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJv
dG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9hZ2VudC0+ZW5hYmxlKCZlcnJvcik7
CgoKICAgIH0KICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJl
c3VsdC5yZWxlYXNlKCksIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lk
IEluc3BlY3RvckNvbnNvbGVCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzYWJsZShsb25nIGNhbGxJZCwg
Y29uc3QgSW5zcGVjdG9yT2JqZWN0JikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90
b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JT
dHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAg
IG1fYWdlbnQtPmRpc2FibGUoJmVycm9yKTsKCgogICAgfQogICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgcHJvdG9jb2xFcnJvcnMu
cmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yQ29uc29sZUJhY2tlbmREaXNwYXRj
aGVyOjpjbGVhck1lc3NhZ2VzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmKQp7
CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJy
YXk6OmNyZWF0ZSgpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJv
dG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9hZ2VudC0+Y2xlYXJNZXNzYWdlcygm
ZXJyb3IpOwoKCiAgICB9CiAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2Fs
bElkLCByZXN1bHQucmVsZWFzZSgpLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsK
fQoKdm9pZCBJbnNwZWN0b3JDb25zb2xlQmFja2VuZERpc3BhdGNoZXI6OnNldE1vbml0b3JpbmdY
SFJFbmFibGVkKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpCnsK
ICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJh
eTo6Y3JlYXRlKCk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVy
ID0gbWVzc2FnZS5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJh
bXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJh
eSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIGJvb2wgaW5f
ZW5hYmxlZCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRCb29sZWFuKHBhcmFtc0Nv
bnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJlbmFibGVkIiksIG51bGxwdHIsIHByb3RvY29sRXJy
b3JzUHRyKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29s
RXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fYWdlbnQtPnNldE1vbml0b3JpbmdYSFJFbmFi
bGVkKCZlcnJvciwgaW5fZW5hYmxlZCk7CgoKICAgIH0KICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIHByb3RvY29sRXJyb3JzLnJl
bGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckNvbnNvbGVCYWNrZW5kRGlzcGF0Y2hl
cjo6YWRkSW5zcGVjdGVkTm9kZShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBt
ZXNzYWdlKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5z
cGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFt
c0NvbnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9i
amVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5z
cGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAg
ICBpbnQgaW5fbm9kZUlkID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEludChwYXJh
bXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgibm9kZUlkIiksIG51bGxwdHIsIHByb3RvY29s
RXJyb3JzUHRyKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3Rv
Y29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fYWdlbnQtPmFkZEluc3BlY3RlZE5vZGUo
JmVycm9yLCBpbl9ub2RlSWQpOwoKCiAgICB9CiAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5k
UmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBwcm90b2NvbEVycm9ycy5yZWxlYXNl
KCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JDb25zb2xlQmFja2VuZERpc3BhdGNoZXI6OmFk
ZEluc3BlY3RlZEhlYXBPYmplY3QobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYg
bWVzc2FnZSkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IElu
c3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJh
bXNDb250YWluZXIgPSBtZXNzYWdlLmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JP
YmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIElu
c3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwog
ICAgaW50IGluX2hlYXBPYmplY3RJZCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRJ
bnQocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoImhlYXBPYmplY3RJZCIpLCBudWxs
cHRyLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVz
dWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwog
ICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2FnZW50LT5hZGRJ
bnNwZWN0ZWRIZWFwT2JqZWN0KCZlcnJvciwgaW5faGVhcE9iamVjdElkKTsKCgogICAgfQogICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2Uo
KSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KClBhc3NSZWZQdHI8SW5zcGVj
dG9yRE9NQmFja2VuZERpc3BhdGNoZXI+IEluc3BlY3RvckRPTUJhY2tlbmREaXNwYXRjaGVyOjpj
cmVhdGUoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyLCBJbnNw
ZWN0b3JET01CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQp7CiAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEluc3BlY3RvckRPTUJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVy
LCBhZ2VudCkpOwp9CgpJbnNwZWN0b3JET01CYWNrZW5kRGlzcGF0Y2hlcjo6SW5zcGVjdG9yRE9N
QmFja2VuZERpc3BhdGNoZXIoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNw
YXRjaGVyLCBJbnNwZWN0b3JET01CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQogICAg
OiBJbnNwZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hl
cikKICAgICwgbV9hZ2VudChhZ2VudCkKewogICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0
ZXJEaXNwYXRjaGVyRm9yRG9tYWluKEFTQ0lJTGl0ZXJhbCgiRE9NIiksIHRoaXMpOwp9Cgp2b2lk
IEluc3BlY3RvckRPTUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIGNhbGxJZCwgY29u
c3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKQp7
CiAgICBSZWY8SW5zcGVjdG9yRE9NQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwoK
ICAgIHR5cGVkZWYgdm9pZCAoSW5zcGVjdG9yRE9NQmFja2VuZERpc3BhdGNoZXI6OipDYWxsSGFu
ZGxlcikobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CiAgICB0
eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj4gRGlzcGF0Y2hNYXA7CiAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKERpc3BhdGNoTWFwLCBkaXNwYXRjaE1hcCwgKCkpOwogICAgaWYgKGRp
c3BhdGNoTWFwLmlzRW1wdHkoKSkgewogICAgICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgTWV0aG9k
VGFibGUgewogICAgICAgICAgICBjb25zdCBjaGFyKiBuYW1lOwogICAgICAgICAgICBDYWxsSGFu
ZGxlciBoYW5kbGVyOwogICAgICAgIH0gY29tbWFuZHNbXSA9IHsKICAgICAgICAgICAgeyAiZ2V0
RG9jdW1lbnQiLCAgJkluc3BlY3RvckRPTUJhY2tlbmREaXNwYXRjaGVyOjpnZXREb2N1bWVudCB9
LAogICAgICAgICAgICB7ICJyZXF1ZXN0Q2hpbGROb2RlcyIsICAmSW5zcGVjdG9yRE9NQmFja2Vu
ZERpc3BhdGNoZXI6OnJlcXVlc3RDaGlsZE5vZGVzIH0sCiAgICAgICAgICAgIHsgInF1ZXJ5U2Vs
ZWN0b3IiLCAgJkluc3BlY3RvckRPTUJhY2tlbmREaXNwYXRjaGVyOjpxdWVyeVNlbGVjdG9yIH0s
CiAgICAgICAgICAgIHsgInF1ZXJ5U2VsZWN0b3JBbGwiLCAgJkluc3BlY3RvckRPTUJhY2tlbmRE
aXNwYXRjaGVyOjpxdWVyeVNlbGVjdG9yQWxsIH0sCiAgICAgICAgICAgIHsgInNldE5vZGVOYW1l
IiwgICZJbnNwZWN0b3JET01CYWNrZW5kRGlzcGF0Y2hlcjo6c2V0Tm9kZU5hbWUgfSwKICAgICAg
ICAgICAgeyAic2V0Tm9kZVZhbHVlIiwgICZJbnNwZWN0b3JET01CYWNrZW5kRGlzcGF0Y2hlcjo6
c2V0Tm9kZVZhbHVlIH0sCiAgICAgICAgICAgIHsgInJlbW92ZU5vZGUiLCAgJkluc3BlY3RvckRP
TUJhY2tlbmREaXNwYXRjaGVyOjpyZW1vdmVOb2RlIH0sCiAgICAgICAgICAgIHsgInNldEF0dHJp
YnV0ZVZhbHVlIiwgICZJbnNwZWN0b3JET01CYWNrZW5kRGlzcGF0Y2hlcjo6c2V0QXR0cmlidXRl
VmFsdWUgfSwKICAgICAgICAgICAgeyAic2V0QXR0cmlidXRlc0FzVGV4dCIsICAmSW5zcGVjdG9y
RE9NQmFja2VuZERpc3BhdGNoZXI6OnNldEF0dHJpYnV0ZXNBc1RleHQgfSwKICAgICAgICAgICAg
eyAicmVtb3ZlQXR0cmlidXRlIiwgICZJbnNwZWN0b3JET01CYWNrZW5kRGlzcGF0Y2hlcjo6cmVt
b3ZlQXR0cmlidXRlIH0sCiAgICAgICAgICAgIHsgImdldEV2ZW50TGlzdGVuZXJzRm9yTm9kZSIs
ICAmSW5zcGVjdG9yRE9NQmFja2VuZERpc3BhdGNoZXI6OmdldEV2ZW50TGlzdGVuZXJzRm9yTm9k
ZSB9LAogICAgICAgICAgICB7ICJnZXRPdXRlckhUTUwiLCAgJkluc3BlY3RvckRPTUJhY2tlbmRE
aXNwYXRjaGVyOjpnZXRPdXRlckhUTUwgfSwKICAgICAgICAgICAgeyAic2V0T3V0ZXJIVE1MIiwg
ICZJbnNwZWN0b3JET01CYWNrZW5kRGlzcGF0Y2hlcjo6c2V0T3V0ZXJIVE1MIH0sCiAgICAgICAg
ICAgIHsgInBlcmZvcm1TZWFyY2giLCAgJkluc3BlY3RvckRPTUJhY2tlbmREaXNwYXRjaGVyOjpw
ZXJmb3JtU2VhcmNoIH0sCiAgICAgICAgICAgIHsgImdldFNlYXJjaFJlc3VsdHMiLCAgJkluc3Bl
Y3RvckRPTUJhY2tlbmREaXNwYXRjaGVyOjpnZXRTZWFyY2hSZXN1bHRzIH0sCiAgICAgICAgICAg
IHsgImRpc2NhcmRTZWFyY2hSZXN1bHRzIiwgICZJbnNwZWN0b3JET01CYWNrZW5kRGlzcGF0Y2hl
cjo6ZGlzY2FyZFNlYXJjaFJlc3VsdHMgfSwKICAgICAgICAgICAgeyAicmVxdWVzdE5vZGUiLCAg
Jkluc3BlY3RvckRPTUJhY2tlbmREaXNwYXRjaGVyOjpyZXF1ZXN0Tm9kZSB9LAogICAgICAgICAg
ICB7ICJzZXRJbnNwZWN0TW9kZUVuYWJsZWQiLCAgJkluc3BlY3RvckRPTUJhY2tlbmREaXNwYXRj
aGVyOjpzZXRJbnNwZWN0TW9kZUVuYWJsZWQgfSwKICAgICAgICAgICAgeyAiaGlnaGxpZ2h0UmVj
dCIsICAmSW5zcGVjdG9yRE9NQmFja2VuZERpc3BhdGNoZXI6OmhpZ2hsaWdodFJlY3QgfSwKICAg
ICAgICAgICAgeyAiaGlnaGxpZ2h0UXVhZCIsICAmSW5zcGVjdG9yRE9NQmFja2VuZERpc3BhdGNo
ZXI6OmhpZ2hsaWdodFF1YWQgfSwKICAgICAgICAgICAgeyAiaGlnaGxpZ2h0Tm9kZSIsICAmSW5z
cGVjdG9yRE9NQmFja2VuZERpc3BhdGNoZXI6OmhpZ2hsaWdodE5vZGUgfSwKICAgICAgICAgICAg
eyAiaGlkZUhpZ2hsaWdodCIsICAmSW5zcGVjdG9yRE9NQmFja2VuZERpc3BhdGNoZXI6OmhpZGVI
aWdobGlnaHQgfSwKICAgICAgICAgICAgeyAiaGlnaGxpZ2h0RnJhbWUiLCAgJkluc3BlY3RvckRP
TUJhY2tlbmREaXNwYXRjaGVyOjpoaWdobGlnaHRGcmFtZSB9LAogICAgICAgICAgICB7ICJwdXNo
Tm9kZUJ5UGF0aFRvRnJvbnRlbmQiLCAgJkluc3BlY3RvckRPTUJhY2tlbmREaXNwYXRjaGVyOjpw
dXNoTm9kZUJ5UGF0aFRvRnJvbnRlbmQgfSwKICAgICAgICAgICAgeyAicHVzaE5vZGVCeUJhY2tl
bmRJZFRvRnJvbnRlbmQiLCAgJkluc3BlY3RvckRPTUJhY2tlbmREaXNwYXRjaGVyOjpwdXNoTm9k
ZUJ5QmFja2VuZElkVG9Gcm9udGVuZCB9LAogICAgICAgICAgICB7ICJyZWxlYXNlQmFja2VuZE5v
ZGVJZHMiLCAgJkluc3BlY3RvckRPTUJhY2tlbmREaXNwYXRjaGVyOjpyZWxlYXNlQmFja2VuZE5v
ZGVJZHMgfSwKICAgICAgICAgICAgeyAicmVzb2x2ZU5vZGUiLCAgJkluc3BlY3RvckRPTUJhY2tl
bmREaXNwYXRjaGVyOjpyZXNvbHZlTm9kZSB9LAogICAgICAgICAgICB7ICJnZXRBdHRyaWJ1dGVz
IiwgICZJbnNwZWN0b3JET01CYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0QXR0cmlidXRlcyB9LAogICAg
ICAgICAgICB7ICJtb3ZlVG8iLCAgJkluc3BlY3RvckRPTUJhY2tlbmREaXNwYXRjaGVyOjptb3Zl
VG8gfSwKICAgICAgICAgICAgeyAidW5kbyIsICAmSW5zcGVjdG9yRE9NQmFja2VuZERpc3BhdGNo
ZXI6OnVuZG8gfSwKICAgICAgICAgICAgeyAicmVkbyIsICAmSW5zcGVjdG9yRE9NQmFja2VuZERp
c3BhdGNoZXI6OnJlZG8gfSwKICAgICAgICAgICAgeyAibWFya1VuZG9hYmxlU3RhdGUiLCAgJklu
c3BlY3RvckRPTUJhY2tlbmREaXNwYXRjaGVyOjptYXJrVW5kb2FibGVTdGF0ZSB9LAogICAgICAg
ICAgICB7ICJmb2N1cyIsICAmSW5zcGVjdG9yRE9NQmFja2VuZERpc3BhdGNoZXI6OmZvY3VzIH0s
CiAgICAgICAgICAgIHsgInNldEZpbGVJbnB1dEZpbGVzIiwgICZJbnNwZWN0b3JET01CYWNrZW5k
RGlzcGF0Y2hlcjo6c2V0RmlsZUlucHV0RmlsZXMgfSwKICAgICAgICB9OwogICAgICAgIHNpemVf
dCBsZW5ndGggPSBXVEZfQVJSQVlfTEVOR1RIKGNvbW1hbmRzKTsKICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQogICAgICAgICAgICBkaXNwYXRjaE1hcC5hZGQoY29t
bWFuZHNbaV0ubmFtZSwgY29tbWFuZHNbaV0uaGFuZGxlcik7CiAgICB9CgogICAgSGFzaE1hcDxT
dHJpbmcsIENhbGxIYW5kbGVyPjo6aXRlcmF0b3IgaXQgPSBkaXNwYXRjaE1hcC5maW5kKG1ldGhv
ZCk7CiAgICBpZiAoaXQgPT0gZGlzcGF0Y2hNYXAuZW5kKCkpIHsKICAgICAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgU3RyaW5nKCInIikgKyAiRE9NIiArICcuJyArIG1l
dGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgKCgq
dGhpcykuKml0LT52YWx1ZSkoY2FsbElkLCAqbWVzc2FnZS5nZXQoKSk7Cn0KCnZvaWQgSW5zcGVj
dG9yRE9NQmFja2VuZERpc3BhdGNoZXI6OmdldERvY3VtZW50KGxvbmcgY2FsbElkLCBjb25zdCBJ
bnNwZWN0b3JPYmplY3QmKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJy
b3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6
RE9NOjpOb2RlPiBvdXRfcm9vdDsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBp
ZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fYWdlbnQtPmdldERvY3Vt
ZW50KCZlcnJvciwgb3V0X3Jvb3QpOwoKICAgICAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7CiAg
ICAgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJyb290IiksIG91dF9yb290
KTsKICAgICAgICB9CiAgICB9CiAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2Uo
Y2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9y
KTsKfQoKdm9pZCBJbnNwZWN0b3JET01CYWNrZW5kRGlzcGF0Y2hlcjo6cmVxdWVzdENoaWxkTm9k
ZXMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSkKewogICAgUmVm
UHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVh
dGUoKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSBtZXNz
YWdlLmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRh
aW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90
b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgaW50IGluX25vZGVJZCA9
IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRJbnQocGFyYW1zQ29udGFpbmVyUHRyLCBB
U0NJSUxpdGVyYWwoIm5vZGVJZCIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBi
b29sIGRlcHRoX3ZhbHVlRm91bmQgPSBmYWxzZTsKICAgIGludCBpbl9kZXB0aCA9IEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjpnZXRJbnQocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVy
YWwoImRlcHRoIiksICZkZXB0aF92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3Ro
KCkpIHsKICAgICAgICBtX2FnZW50LT5yZXF1ZXN0Q2hpbGROb2RlcygmZXJyb3IsIGluX25vZGVJ
ZCwgZGVwdGhfdmFsdWVGb3VuZCA/ICZpbl9kZXB0aCA6IDApOwoKCiAgICB9CiAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBwcm90
b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JET01CYWNrZW5k
RGlzcGF0Y2hlcjo6cXVlcnlTZWxlY3Rvcihsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2Jq
ZWN0JiBtZXNzYWdlKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3Jz
ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGludCBvdXRfbm9kZUlkOwoKICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2JqZWN0
KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFy
YW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRy
ID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBpbnQgaW5fbm9kZUlkID0gSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6OmdldEludChwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgi
bm9kZUlkIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIFN0cmluZyBpbl9zZWxl
Y3RvciA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFp
bmVyUHRyLCBBU0NJSUxpdGVyYWwoInNlbGVjdG9yIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3Jz
UHRyKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJy
b3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fYWdlbnQtPnF1ZXJ5U2VsZWN0b3IoJmVycm9yLCBp
bl9ub2RlSWQsIGluX3NlbGVjdG9yLCAmb3V0X25vZGVJZCk7CgogICAgICAgIGlmICghZXJyb3Iu
bGVuZ3RoKCkpIHsKICAgICAgICAgICAgcmVzdWx0LT5zZXROdW1iZXIoQVNDSUlMaXRlcmFsKCJu
b2RlSWQiKSwgb3V0X25vZGVJZCk7CiAgICAgICAgfQogICAgfQogICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgcHJvdG9jb2xFcnJv
cnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yRE9NQmFja2VuZERpc3BhdGNo
ZXI6OnF1ZXJ5U2VsZWN0b3JBbGwobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYg
bWVzc2FnZSkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IElu
c3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PGlu
dD4gPiBvdXRfbm9kZUlkczsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250
YWluZXIgPSBtZXNzYWdlLmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3Qq
IHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3Rv
ckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgaW50
IGluX25vZGVJZCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRJbnQocGFyYW1zQ29u
dGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoIm5vZGVJZCIpLCBudWxscHRyLCBwcm90b2NvbEVycm9y
c1B0cik7CiAgICBTdHJpbmcgaW5fc2VsZWN0b3IgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJzZWxlY3RvciIp
LCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVy
cm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2FnZW50
LT5xdWVyeVNlbGVjdG9yQWxsKCZlcnJvciwgaW5fbm9kZUlkLCBpbl9zZWxlY3Rvciwgb3V0X25v
ZGVJZHMpOwoKICAgICAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgICAgIHJlc3Vs
dC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJub2RlSWRzIiksIG91dF9ub2RlSWRzKTsKICAgICAg
ICB9CiAgICB9CiAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCBy
ZXN1bHQucmVsZWFzZSgpLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9p
ZCBJbnNwZWN0b3JET01CYWNrZW5kRGlzcGF0Y2hlcjo6c2V0Tm9kZU5hbWUobG9uZyBjYWxsSWQs
IGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSkKewogICAgUmVmUHRyPEluc3BlY3RvckFy
cmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpbnQg
b3V0X25vZGVJZDsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIg
PSBtZXNzYWdlLmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFt
c0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5
KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgaW50IGluX25v
ZGVJZCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRJbnQocGFyYW1zQ29udGFpbmVy
UHRyLCBBU0NJSUxpdGVyYWwoIm5vZGVJZCIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7
CiAgICBTdHJpbmcgaW5fbmFtZSA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJp
bmcocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoIm5hbWUiKSwgbnVsbHB0ciwgcHJv
dG9jb2xFcnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICgh
cHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9hZ2VudC0+c2V0Tm9kZU5hbWUo
JmVycm9yLCBpbl9ub2RlSWQsIGluX25hbWUsICZvdXRfbm9kZUlkKTsKCiAgICAgICAgaWYgKCFl
cnJvci5sZW5ndGgoKSkgewogICAgICAgICAgICByZXN1bHQtPnNldE51bWJlcihBU0NJSUxpdGVy
YWwoIm5vZGVJZCIpLCBvdXRfbm9kZUlkKTsKICAgICAgICB9CiAgICB9CiAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBwcm90b2Nv
bEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JET01CYWNrZW5kRGlz
cGF0Y2hlcjo6c2V0Tm9kZVZhbHVlKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3Qm
IG1lc3NhZ2UpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJ
bnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFy
YW1zQ29udGFpbmVyID0gbWVzc2FnZS5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9y
T2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJ
bnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsK
ICAgIGludCBpbl9ub2RlSWQgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0SW50KHBh
cmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJub2RlSWQiKSwgbnVsbHB0ciwgcHJvdG9j
b2xFcnJvcnNQdHIpOwogICAgU3RyaW5nIGluX3ZhbHVlID0gSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgidmFsdWUi
KSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBl
cnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9hZ2Vu
dC0+c2V0Tm9kZVZhbHVlKCZlcnJvciwgaW5fbm9kZUlkLCBpbl92YWx1ZSk7CgoKICAgIH0KICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNl
KCksIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckRP
TUJhY2tlbmREaXNwYXRjaGVyOjpyZW1vdmVOb2RlKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0
b3JPYmplY3QmIG1lc3NhZ2UpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xF
cnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gcGFyYW1zQ29udGFpbmVyID0gbWVzc2FnZS5nZXRPYmplY3QoInBhcmFtcyIpOwogICAg
SW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0
KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9y
cy5nZXQoKTsKICAgIGludCBpbl9ub2RlSWQgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
Z2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJub2RlSWQiKSwgbnVsbHB0
ciwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3Vs
dCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAg
IGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9hZ2VudC0+cmVtb3Zl
Tm9kZSgmZXJyb3IsIGluX25vZGVJZCk7CgoKICAgIH0KICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIHByb3RvY29sRXJyb3JzLnJl
bGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckRPTUJhY2tlbmREaXNwYXRjaGVyOjpz
ZXRBdHRyaWJ1dGVWYWx1ZShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNz
YWdlKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVj
dG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0Nv
bnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVj
dCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVj
dG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBp
bnQgaW5fbm9kZUlkID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEludChwYXJhbXND
b250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgibm9kZUlkIiksIG51bGxwdHIsIHByb3RvY29sRXJy
b3JzUHRyKTsKICAgIFN0cmluZyBpbl9uYW1lID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OmdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgibmFtZSIpLCBudWxs
cHRyLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBTdHJpbmcgaW5fdmFsdWUgPSBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRl
cmFsKCJ2YWx1ZSIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVy
cm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAg
ICAgICBtX2FnZW50LT5zZXRBdHRyaWJ1dGVWYWx1ZSgmZXJyb3IsIGluX25vZGVJZCwgaW5fbmFt
ZSwgaW5fdmFsdWUpOwoKCiAgICB9CiAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9u
c2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVy
cm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JET01CYWNrZW5kRGlzcGF0Y2hlcjo6c2V0QXR0cmlidXRl
c0FzVGV4dChsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKQp7CiAg
ICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6
OmNyZWF0ZSgpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9
IG1lc3NhZ2UuZ2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1z
Q29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkq
IHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBpbnQgaW5fbm9k
ZUlkID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEludChwYXJhbXNDb250YWluZXJQ
dHIsIEFTQ0lJTGl0ZXJhbCgibm9kZUlkIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsK
ICAgIFN0cmluZyBpbl90ZXh0ID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmlu
ZyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgidGV4dCIpLCBudWxscHRyLCBwcm90
b2NvbEVycm9yc1B0cik7CiAgICBib29sIG5hbWVfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgU3Ry
aW5nIGluX25hbWUgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFt
c0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJuYW1lIiksICZuYW1lX3ZhbHVlRm91bmQsIHBy
b3RvY29sRXJyb3JzUHRyKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAo
IXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fYWdlbnQtPnNldEF0dHJpYnV0
ZXNBc1RleHQoJmVycm9yLCBpbl9ub2RlSWQsIGluX3RleHQsIG5hbWVfdmFsdWVGb3VuZCA/ICZp
bl9uYW1lIDogMCk7CgoKICAgIH0KICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25z
ZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJy
b3IpOwp9Cgp2b2lkIEluc3BlY3RvckRPTUJhY2tlbmREaXNwYXRjaGVyOjpyZW1vdmVBdHRyaWJ1
dGUobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSkKewogICAgUmVm
UHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVh
dGUoKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSBtZXNz
YWdlLmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRh
aW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90
b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgaW50IGluX25vZGVJZCA9
IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRJbnQocGFyYW1zQ29udGFpbmVyUHRyLCBB
U0NJSUxpdGVyYWwoIm5vZGVJZCIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBT
dHJpbmcgaW5fbmFtZSA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFy
YW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoIm5hbWUiKSwgbnVsbHB0ciwgcHJvdG9jb2xF
cnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9j
b2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9hZ2VudC0+cmVtb3ZlQXR0cmlidXRlKCZl
cnJvciwgaW5fbm9kZUlkLCBpbl9uYW1lKTsKCgogICAgfQogICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgcHJvdG9jb2xFcnJvcnMu
cmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yRE9NQmFja2VuZERpc3BhdGNoZXI6
OmdldEV2ZW50TGlzdGVuZXJzRm9yTm9kZShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2Jq
ZWN0JiBtZXNzYWdlKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3Jz
ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJy
YXk8VHlwZUJ1aWxkZXI6OkRPTTo6RXZlbnRMaXN0ZW5lcj4gPiBvdXRfbGlzdGVuZXJzOwoKICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2Jq
ZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0g
cGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3Jz
UHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBpbnQgaW5fbm9kZUlkID0gSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI6OmdldEludChwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJh
bCgibm9kZUlkIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgb2JqZWN0
R3JvdXBfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgU3RyaW5nIGluX29iamVjdEdyb3VwID0gSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsIEFT
Q0lJTGl0ZXJhbCgib2JqZWN0R3JvdXAiKSwgJm9iamVjdEdyb3VwX3ZhbHVlRm91bmQsIHByb3Rv
Y29sRXJyb3JzUHRyKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXBy
b3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fYWdlbnQtPmdldEV2ZW50TGlzdGVu
ZXJzRm9yTm9kZSgmZXJyb3IsIGluX25vZGVJZCwgb2JqZWN0R3JvdXBfdmFsdWVGb3VuZCA/ICZp
bl9vYmplY3RHcm91cCA6IDAsIG91dF9saXN0ZW5lcnMpOwoKICAgICAgICBpZiAoIWVycm9yLmxl
bmd0aCgpKSB7CiAgICAgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJsaXN0
ZW5lcnMiKSwgb3V0X2xpc3RlbmVycyk7CiAgICAgICAgfQogICAgfQogICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgcHJvdG9jb2xF
cnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yRE9NQmFja2VuZERpc3Bh
dGNoZXI6OmdldE91dGVySFRNTChsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBt
ZXNzYWdlKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5z
cGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIFN0cmluZyBvdXRfb3V0ZXJIVE1MOwoKICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2JqZWN0
KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFy
YW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRy
ID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBpbnQgaW5fbm9kZUlkID0gSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6OmdldEludChwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgi
bm9kZUlkIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JT
dHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAg
IG1fYWdlbnQtPmdldE91dGVySFRNTCgmZXJyb3IsIGluX25vZGVJZCwgJm91dF9vdXRlckhUTUwp
OwoKICAgICAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgICAgIHJlc3VsdC0+c2V0
U3RyaW5nKEFTQ0lJTGl0ZXJhbCgib3V0ZXJIVE1MIiksIG91dF9vdXRlckhUTUwpOwogICAgICAg
IH0KICAgIH0KICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJl
c3VsdC5yZWxlYXNlKCksIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lk
IEluc3BlY3RvckRPTUJhY2tlbmREaXNwYXRjaGVyOjpzZXRPdXRlckhUTUwobG9uZyBjYWxsSWQs
IGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSkKewogICAgUmVmUHRyPEluc3BlY3RvckFy
cmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSBtZXNzYWdlLmdldE9iamVjdCgi
cGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFt
c0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9
IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgaW50IGluX25vZGVJZCA9IEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyOjpnZXRJbnQocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoIm5v
ZGVJZCIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBTdHJpbmcgaW5fb3V0ZXJI
VE1MID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWlu
ZXJQdHIsIEFTQ0lJTGl0ZXJhbCgib3V0ZXJIVE1MIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3Jz
UHRyKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJy
b3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fYWdlbnQtPnNldE91dGVySFRNTCgmZXJyb3IsIGlu
X25vZGVJZCwgaW5fb3V0ZXJIVE1MKTsKCgogICAgfQogICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgcHJvdG9jb2xFcnJvcnMucmVs
ZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yRE9NQmFja2VuZERpc3BhdGNoZXI6OnBl
cmZvcm1TZWFyY2gobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSkK
ewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFy
cmF5OjpjcmVhdGUoKTsKCiAgICBTdHJpbmcgb3V0X3NlYXJjaElkOwogICAgaW50IG91dF9yZXN1
bHRDb3VudDsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSBt
ZXNzYWdlLmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0Nv
bnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBw
cm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgU3RyaW5nIGluX3F1
ZXJ5ID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWlu
ZXJQdHIsIEFTQ0lJTGl0ZXJhbCgicXVlcnkiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIp
OwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMt
Pmxlbmd0aCgpKSB7CiAgICAgICAgbV9hZ2VudC0+cGVyZm9ybVNlYXJjaCgmZXJyb3IsIGluX3F1
ZXJ5LCAmb3V0X3NlYXJjaElkLCAmb3V0X3Jlc3VsdENvdW50KTsKCiAgICAgICAgaWYgKCFlcnJv
ci5sZW5ndGgoKSkgewogICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwo
InNlYXJjaElkIiksIG91dF9zZWFyY2hJZCk7CiAgICAgICAgICAgIHJlc3VsdC0+c2V0TnVtYmVy
KEFTQ0lJTGl0ZXJhbCgicmVzdWx0Q291bnQiKSwgb3V0X3Jlc3VsdENvdW50KTsKICAgICAgICB9
CiAgICB9CiAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1
bHQucmVsZWFzZSgpLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJ
bnNwZWN0b3JET01CYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U2VhcmNoUmVzdWx0cyhsb25nIGNhbGxJ
ZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIFJl
ZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8aW50PiA+IG91dF9ub2RlSWRzOwoKICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2JqZWN0KCJwYXJh
bXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29u
dGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJv
dG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBTdHJpbmcgaW5fc2VhcmNoSWQgPSBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFs
KCJzZWFyY2hJZCIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBpbnQgaW5fZnJv
bUluZGV4ID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEludChwYXJhbXNDb250YWlu
ZXJQdHIsIEFTQ0lJTGl0ZXJhbCgiZnJvbUluZGV4IiksIG51bGxwdHIsIHByb3RvY29sRXJyb3Jz
UHRyKTsKICAgIGludCBpbl90b0luZGV4ID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6Omdl
dEludChwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgidG9JbmRleCIpLCBudWxscHRy
LCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAg
aWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2FnZW50LT5nZXRTZWFy
Y2hSZXN1bHRzKCZlcnJvciwgaW5fc2VhcmNoSWQsIGluX2Zyb21JbmRleCwgaW5fdG9JbmRleCwg
b3V0X25vZGVJZHMpOwoKICAgICAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgICAg
IHJlc3VsdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJub2RlSWRzIiksIG91dF9ub2RlSWRzKTsK
ICAgICAgICB9CiAgICB9CiAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2Fs
bElkLCByZXN1bHQucmVsZWFzZSgpLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsK
fQoKdm9pZCBJbnNwZWN0b3JET01CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzY2FyZFNlYXJjaFJlc3Vs
dHMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSkKewogICAgUmVm
UHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVh
dGUoKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSBtZXNz
YWdlLmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRh
aW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90
b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgU3RyaW5nIGluX3NlYXJj
aElkID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWlu
ZXJQdHIsIEFTQ0lJTGl0ZXJhbCgic2VhcmNoSWQiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQ
dHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJv
cnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9hZ2VudC0+ZGlzY2FyZFNlYXJjaFJlc3VsdHMoJmVy
cm9yLCBpbl9zZWFyY2hJZCk7CgoKICAgIH0KICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRS
ZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIHByb3RvY29sRXJyb3JzLnJlbGVhc2Uo
KSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckRPTUJhY2tlbmREaXNwYXRjaGVyOjpyZXF1ZXN0
Tm9kZShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKQp7CiAgICBS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNy
ZWF0ZSgpOwoKICAgIGludCBvdXRfbm9kZUlkOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHBhcmFtc0NvbnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3Bl
Y3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwog
ICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0
KCk7CiAgICBTdHJpbmcgaW5fb2JqZWN0SWQgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJvYmplY3RJZCIpLCBu
dWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9y
OwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2FnZW50LT5y
ZXF1ZXN0Tm9kZSgmZXJyb3IsIGluX29iamVjdElkLCAmb3V0X25vZGVJZCk7CgogICAgICAgIGlm
ICghZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICAgICAgcmVzdWx0LT5zZXROdW1iZXIoQVNDSUlM
aXRlcmFsKCJub2RlSWQiKSwgb3V0X25vZGVJZCk7CiAgICAgICAgfQogICAgfQogICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgcHJv
dG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yRE9NQmFja2Vu
ZERpc3BhdGNoZXI6OnNldEluc3BlY3RNb2RlRW5hYmxlZChsb25nIGNhbGxJZCwgY29uc3QgSW5z
cGVjdG9yT2JqZWN0JiBtZXNzYWdlKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3Rv
Y29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2JqZWN0KCJwYXJhbXMiKTsK
ICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVy
LmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xF
cnJvcnMuZ2V0KCk7CiAgICBib29sIGluX2VuYWJsZWQgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcjo6Z2V0Qm9vbGVhbihwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgiZW5hYmxl
ZCIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBib29sIGhpZ2hsaWdodENvbmZp
Z192YWx1ZUZvdW5kID0gZmFsc2U7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBpbl9oaWdo
bGlnaHRDb25maWcgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0T2JqZWN0KHBhcmFt
c0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJoaWdobGlnaHRDb25maWciKSwgJmhpZ2hsaWdo
dENvbmZpZ192YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9y
U3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAg
ICBtX2FnZW50LT5zZXRJbnNwZWN0TW9kZUVuYWJsZWQoJmVycm9yLCBpbl9lbmFibGVkLCBoaWdo
bGlnaHRDb25maWdfdmFsdWVGb3VuZCA/ICZpbl9oaWdobGlnaHRDb25maWcgOiAwKTsKCgogICAg
fQogICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJl
bGVhc2UoKSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVj
dG9yRE9NQmFja2VuZERpc3BhdGNoZXI6OmhpZ2hsaWdodFJlY3QobG9uZyBjYWxsSWQsIGNvbnN0
IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBw
cm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSBtZXNzYWdlLmdldE9iamVjdCgicGFyYW1z
Iik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRh
aW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3Rv
Y29sRXJyb3JzLmdldCgpOwogICAgaW50IGluX3ggPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cjo6Z2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJ4IiksIG51bGxwdHIs
IHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGludCBpbl95ID0gSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI6OmdldEludChwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgieSIpLCBudWxs
cHRyLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBpbnQgaW5fd2lkdGggPSBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjo6Z2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJ3
aWR0aCIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBpbnQgaW5faGVpZ2h0ID0g
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEludChwYXJhbXNDb250YWluZXJQdHIsIEFT
Q0lJTGl0ZXJhbCgiaGVpZ2h0IiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJv
b2wgY29sb3JfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
aW5fY29sb3IgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0T2JqZWN0KHBhcmFtc0Nv
bnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJjb2xvciIpLCAmY29sb3JfdmFsdWVGb3VuZCwgcHJv
dG9jb2xFcnJvcnNQdHIpOwogICAgYm9vbCBvdXRsaW5lQ29sb3JfdmFsdWVGb3VuZCA9IGZhbHNl
OwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaW5fb3V0bGluZUNvbG9yID0gSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI6OmdldE9iamVjdChwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0
ZXJhbCgib3V0bGluZUNvbG9yIiksICZvdXRsaW5lQ29sb3JfdmFsdWVGb3VuZCwgcHJvdG9jb2xF
cnJvcnNQdHIpOwogICAgYm9vbCB1c2VQYWdlQ29vcmRpbmF0ZXNfdmFsdWVGb3VuZCA9IGZhbHNl
OwogICAgYm9vbCBpbl91c2VQYWdlQ29vcmRpbmF0ZXMgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcjo6Z2V0Qm9vbGVhbihwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgidXNlUGFn
ZUNvb3JkaW5hdGVzIiksICZ1c2VQYWdlQ29vcmRpbmF0ZXNfdmFsdWVGb3VuZCwgcHJvdG9jb2xF
cnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9j
b2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9hZ2VudC0+aGlnaGxpZ2h0UmVjdCgmZXJy
b3IsIGluX3gsIGluX3ksIGluX3dpZHRoLCBpbl9oZWlnaHQsIGNvbG9yX3ZhbHVlRm91bmQgPyAm
aW5fY29sb3IgOiAwLCBvdXRsaW5lQ29sb3JfdmFsdWVGb3VuZCA/ICZpbl9vdXRsaW5lQ29sb3Ig
OiAwLCB1c2VQYWdlQ29vcmRpbmF0ZXNfdmFsdWVGb3VuZCA/ICZpbl91c2VQYWdlQ29vcmRpbmF0
ZXMgOiAwKTsKCgogICAgfQogICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNh
bGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7
Cn0KCnZvaWQgSW5zcGVjdG9yRE9NQmFja2VuZERpc3BhdGNoZXI6OmhpZ2hsaWdodFF1YWQobG9u
ZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSkKewogICAgUmVmUHRyPElu
c3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsK
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSBtZXNzYWdlLmdl
dE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0
ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVy
cm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgUmVmUHRyPEluc3BlY3RvckFycmF5
PiBpbl9xdWFkID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEFycmF5KHBhcmFtc0Nv
bnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJxdWFkIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3Jz
UHRyKTsKICAgIGJvb2wgY29sb3JfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gaW5fY29sb3IgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0T2Jq
ZWN0KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJjb2xvciIpLCAmY29sb3JfdmFs
dWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgYm9vbCBvdXRsaW5lQ29sb3JfdmFsdWVG
b3VuZCA9IGZhbHNlOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaW5fb3V0bGluZUNvbG9y
ID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldE9iamVjdChwYXJhbXNDb250YWluZXJQ
dHIsIEFTQ0lJTGl0ZXJhbCgib3V0bGluZUNvbG9yIiksICZvdXRsaW5lQ29sb3JfdmFsdWVGb3Vu
ZCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgYm9vbCB1c2VQYWdlQ29vcmRpbmF0ZXNfdmFsdWVG
b3VuZCA9IGZhbHNlOwogICAgYm9vbCBpbl91c2VQYWdlQ29vcmRpbmF0ZXMgPSBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6Z2V0Qm9vbGVhbihwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0
ZXJhbCgidXNlUGFnZUNvb3JkaW5hdGVzIiksICZ1c2VQYWdlQ29vcmRpbmF0ZXNfdmFsdWVGb3Vu
ZCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3Vs
dCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAg
IGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9hZ2VudC0+aGlnaGxp
Z2h0UXVhZCgmZXJyb3IsIGluX3F1YWQsIGNvbG9yX3ZhbHVlRm91bmQgPyAmaW5fY29sb3IgOiAw
LCBvdXRsaW5lQ29sb3JfdmFsdWVGb3VuZCA/ICZpbl9vdXRsaW5lQ29sb3IgOiAwLCB1c2VQYWdl
Q29vcmRpbmF0ZXNfdmFsdWVGb3VuZCA/ICZpbl91c2VQYWdlQ29vcmRpbmF0ZXMgOiAwKTsKCgog
ICAgfQogICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0
LnJlbGVhc2UoKSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5z
cGVjdG9yRE9NQmFja2VuZERpc3BhdGNoZXI6OmhpZ2hsaWdodE5vZGUobG9uZyBjYWxsSWQsIGNv
bnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5
PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSBtZXNzYWdlLmdldE9iamVjdCgicGFy
YW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0Nv
bnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHBy
b3RvY29sRXJyb3JzLmdldCgpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaW5faGlnaGxp
Z2h0Q29uZmlnID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldE9iamVjdChwYXJhbXND
b250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgiaGlnaGxpZ2h0Q29uZmlnIiksIG51bGxwdHIsIHBy
b3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgbm9kZUlkX3ZhbHVlRm91bmQgPSBmYWxzZTsKICAg
IGludCBpbl9ub2RlSWQgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0SW50KHBhcmFt
c0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJub2RlSWQiKSwgJm5vZGVJZF92YWx1ZUZvdW5k
LCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBib29sIG9iamVjdElkX3ZhbHVlRm91bmQgPSBmYWxz
ZTsKICAgIFN0cmluZyBpbl9vYmplY3RJZCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpn
ZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoIm9iamVjdElkIiksICZv
YmplY3RJZF92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9y
U3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAg
ICBtX2FnZW50LT5oaWdobGlnaHROb2RlKCZlcnJvciwgaW5faGlnaGxpZ2h0Q29uZmlnLCBub2Rl
SWRfdmFsdWVGb3VuZCA/ICZpbl9ub2RlSWQgOiAwLCBvYmplY3RJZF92YWx1ZUZvdW5kID8gJmlu
X29iamVjdElkIDogMCk7CgoKICAgIH0KICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNw
b25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwg
ZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckRPTUJhY2tlbmREaXNwYXRjaGVyOjpoaWRlSGlnaGxp
Z2h0KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmKQp7CiAgICBSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoK
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxl
bmd0aCgpKSB7CiAgICAgICAgbV9hZ2VudC0+aGlkZUhpZ2hsaWdodCgmZXJyb3IpOwoKCiAgICB9
CiAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVs
ZWFzZSgpLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0
b3JET01CYWNrZW5kRGlzcGF0Y2hlcjo6aGlnaGxpZ2h0RnJhbWUobG9uZyBjYWxsSWQsIGNvbnN0
IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBw
cm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSBtZXNzYWdlLmdldE9iamVjdCgicGFyYW1z
Iik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRh
aW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3Rv
Y29sRXJyb3JzLmdldCgpOwogICAgU3RyaW5nIGluX2ZyYW1lSWQgPSBJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJm
cmFtZUlkIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgY29udGVudENv
bG9yX3ZhbHVlRm91bmQgPSBmYWxzZTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGluX2Nv
bnRlbnRDb2xvciA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRPYmplY3QocGFyYW1z
Q29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoImNvbnRlbnRDb2xvciIpLCAmY29udGVudENvbG9y
X3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgY29udGVudE91dGxpbmVD
b2xvcl92YWx1ZUZvdW5kID0gZmFsc2U7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBpbl9j
b250ZW50T3V0bGluZUNvbG9yID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldE9iamVj
dChwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgiY29udGVudE91dGxpbmVDb2xvciIp
LCAmY29udGVudE91dGxpbmVDb2xvcl92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7Cgog
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVu
Z3RoKCkpIHsKICAgICAgICBtX2FnZW50LT5oaWdobGlnaHRGcmFtZSgmZXJyb3IsIGluX2ZyYW1l
SWQsIGNvbnRlbnRDb2xvcl92YWx1ZUZvdW5kID8gJmluX2NvbnRlbnRDb2xvciA6IDAsIGNvbnRl
bnRPdXRsaW5lQ29sb3JfdmFsdWVGb3VuZCA/ICZpbl9jb250ZW50T3V0bGluZUNvbG9yIDogMCk7
CgoKICAgIH0KICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJl
c3VsdC5yZWxlYXNlKCksIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lk
IEluc3BlY3RvckRPTUJhY2tlbmREaXNwYXRjaGVyOjpwdXNoTm9kZUJ5UGF0aFRvRnJvbnRlbmQo
bG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSkKewogICAgUmVmUHRy
PEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUo
KTsKCiAgICBpbnQgb3V0X25vZGVJZDsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJh
bXNDb250YWluZXIgPSBtZXNzYWdlLmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JP
YmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIElu
c3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwog
ICAgU3RyaW5nIGluX3BhdGggPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5n
KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJwYXRoIiksIG51bGxwdHIsIHByb3Rv
Y29sRXJyb3JzUHRyKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXBy
b3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fYWdlbnQtPnB1c2hOb2RlQnlQYXRo
VG9Gcm9udGVuZCgmZXJyb3IsIGluX3BhdGgsICZvdXRfbm9kZUlkKTsKCiAgICAgICAgaWYgKCFl
cnJvci5sZW5ndGgoKSkgewogICAgICAgICAgICByZXN1bHQtPnNldE51bWJlcihBU0NJSUxpdGVy
YWwoIm5vZGVJZCIpLCBvdXRfbm9kZUlkKTsKICAgICAgICB9CiAgICB9CiAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBwcm90b2Nv
bEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JET01CYWNrZW5kRGlz
cGF0Y2hlcjo6cHVzaE5vZGVCeUJhY2tlbmRJZFRvRnJvbnRlbmQobG9uZyBjYWxsSWQsIGNvbnN0
IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBw
cm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpbnQgb3V0X25v
ZGVJZDsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSBtZXNz
YWdlLmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRh
aW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90
b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgaW50IGluX2JhY2tlbmRO
b2RlSWQgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0SW50KHBhcmFtc0NvbnRhaW5l
clB0ciwgQVNDSUlMaXRlcmFsKCJiYWNrZW5kTm9kZUlkIiksIG51bGxwdHIsIHByb3RvY29sRXJy
b3JzUHRyKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29s
RXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fYWdlbnQtPnB1c2hOb2RlQnlCYWNrZW5kSWRU
b0Zyb250ZW5kKCZlcnJvciwgaW5fYmFja2VuZE5vZGVJZCwgJm91dF9ub2RlSWQpOwoKICAgICAg
ICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgICAgIHJlc3VsdC0+c2V0TnVtYmVyKEFT
Q0lJTGl0ZXJhbCgibm9kZUlkIiksIG91dF9ub2RlSWQpOwogICAgICAgIH0KICAgIH0KICAgIG1f
YmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCks
IHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckRPTUJh
Y2tlbmREaXNwYXRjaGVyOjpyZWxlYXNlQmFja2VuZE5vZGVJZHMobG9uZyBjYWxsSWQsIGNvbnN0
IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBw
cm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSBtZXNzYWdlLmdldE9iamVjdCgicGFyYW1z
Iik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRh
aW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3Rv
Y29sRXJyb3JzLmdldCgpOwogICAgU3RyaW5nIGluX25vZGVHcm91cCA9IEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwo
Im5vZGVHcm91cCIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVy
cm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAg
ICAgICBtX2FnZW50LT5yZWxlYXNlQmFja2VuZE5vZGVJZHMoJmVycm9yLCBpbl9ub2RlR3JvdXAp
OwoKCiAgICB9CiAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCBy
ZXN1bHQucmVsZWFzZSgpLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9p
ZCBJbnNwZWN0b3JET01CYWNrZW5kRGlzcGF0Y2hlcjo6cmVzb2x2ZU5vZGUobG9uZyBjYWxsSWQs
IGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSkKewogICAgUmVmUHRyPEluc3BlY3RvckFy
cmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBSZWZQ
dHI8VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gb3V0X29iamVjdDsKCiAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSBtZXNzYWdlLmdldE9iamVj
dCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBh
cmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0
ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgaW50IGluX25vZGVJZCA9IEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjpnZXRJbnQocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwo
Im5vZGVJZCIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBib29sIG9iamVjdEdy
b3VwX3ZhbHVlRm91bmQgPSBmYWxzZTsKICAgIFN0cmluZyBpbl9vYmplY3RHcm91cCA9IEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJ
SUxpdGVyYWwoIm9iamVjdEdyb3VwIiksICZvYmplY3RHcm91cF92YWx1ZUZvdW5kLCBwcm90b2Nv
bEVycm9yc1B0cik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90
b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2FnZW50LT5yZXNvbHZlTm9kZSgmZXJy
b3IsIGluX25vZGVJZCwgb2JqZWN0R3JvdXBfdmFsdWVGb3VuZCA/ICZpbl9vYmplY3RHcm91cCA6
IDAsIG91dF9vYmplY3QpOwoKICAgICAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAg
ICAgIHJlc3VsdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJvYmplY3QiKSwgb3V0X29iamVjdCk7
CiAgICAgICAgfQogICAgfQogICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNh
bGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7
Cn0KCnZvaWQgSW5zcGVjdG9yRE9NQmFja2VuZERpc3BhdGNoZXI6OmdldEF0dHJpYnV0ZXMobG9u
ZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSkKewogICAgUmVmUHRyPElu
c3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsK
CiAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz4gPiBvdXRfYXR0cmlidXRlczsK
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSBtZXNzYWdlLmdl
dE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0
ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVy
cm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgaW50IGluX25vZGVJZCA9IEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRJbnQocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxp
dGVyYWwoIm5vZGVJZCIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAg
IEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsK
ICAgICAgICBtX2FnZW50LT5nZXRBdHRyaWJ1dGVzKCZlcnJvciwgaW5fbm9kZUlkLCBvdXRfYXR0
cmlidXRlcyk7CgogICAgICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICAgICAgcmVz
dWx0LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoImF0dHJpYnV0ZXMiKSwgb3V0X2F0dHJpYnV0ZXMp
OwogICAgICAgIH0KICAgIH0KICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShj
YWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3Ip
Owp9Cgp2b2lkIEluc3BlY3RvckRPTUJhY2tlbmREaXNwYXRjaGVyOjptb3ZlVG8obG9uZyBjYWxs
SWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSkKewogICAgUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBp
bnQgb3V0X25vZGVJZDsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWlu
ZXIgPSBtZXNzYWdlLmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBh
cmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFy
cmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgaW50IGlu
X25vZGVJZCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRJbnQocGFyYW1zQ29udGFp
bmVyUHRyLCBBU0NJSUxpdGVyYWwoIm5vZGVJZCIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0
cik7CiAgICBpbnQgaW5fdGFyZ2V0Tm9kZUlkID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OmdldEludChwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgidGFyZ2V0Tm9kZUlkIiks
IG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgaW5zZXJ0QmVmb3JlTm9kZUlk
X3ZhbHVlRm91bmQgPSBmYWxzZTsKICAgIGludCBpbl9pbnNlcnRCZWZvcmVOb2RlSWQgPSBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlM
aXRlcmFsKCJpbnNlcnRCZWZvcmVOb2RlSWQiKSwgJmluc2VydEJlZm9yZU5vZGVJZF92YWx1ZUZv
dW5kLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVz
dWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwog
ICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2FnZW50LT5tb3Zl
VG8oJmVycm9yLCBpbl9ub2RlSWQsIGluX3RhcmdldE5vZGVJZCwgaW5zZXJ0QmVmb3JlTm9kZUlk
X3ZhbHVlRm91bmQgPyAmaW5faW5zZXJ0QmVmb3JlTm9kZUlkIDogMCwgJm91dF9ub2RlSWQpOwoK
ICAgICAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgICAgIHJlc3VsdC0+c2V0TnVt
YmVyKEFTQ0lJTGl0ZXJhbCgibm9kZUlkIiksIG91dF9ub2RlSWQpOwogICAgICAgIH0KICAgIH0K
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxl
YXNlKCksIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3Rv
ckRPTUJhY2tlbmREaXNwYXRjaGVyOjp1bmRvKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JP
YmplY3QmKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5z
cGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3Vs
dCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAg
IGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9hZ2VudC0+dW5kbygm
ZXJyb3IpOwoKCiAgICB9CiAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2Fs
bElkLCByZXN1bHQucmVsZWFzZSgpLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsK
fQoKdm9pZCBJbnNwZWN0b3JET01CYWNrZW5kRGlzcGF0Y2hlcjo6cmVkbyhsb25nIGNhbGxJZCwg
Y29uc3QgSW5zcGVjdG9yT2JqZWN0JikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90
b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JT
dHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAg
IG1fYWdlbnQtPnJlZG8oJmVycm9yKTsKCgogICAgfQogICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgcHJvdG9jb2xFcnJvcnMucmVs
ZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yRE9NQmFja2VuZERpc3BhdGNoZXI6Om1h
cmtVbmRvYWJsZVN0YXRlKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmKQp7CiAg
ICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6
OmNyZWF0ZSgpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9j
b2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9hZ2VudC0+bWFya1VuZG9hYmxlU3RhdGUo
JmVycm9yKTsKCgogICAgfQogICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNh
bGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7
Cn0KCnZvaWQgSW5zcGVjdG9yRE9NQmFja2VuZERpc3BhdGNoZXI6OmZvY3VzKGxvbmcgY2FsbElk
LCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gbWVzc2FnZS5nZXRPYmplY3Qo
InBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJh
bXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIg
PSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIGludCBpbl9ub2RlSWQgPSBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjo6Z2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJu
b2RlSWQiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0
cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAg
bV9hZ2VudC0+Zm9jdXMoJmVycm9yLCBpbl9ub2RlSWQpOwoKCiAgICB9CiAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBwcm90b2Nv
bEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JET01CYWNrZW5kRGlz
cGF0Y2hlcjo6c2V0RmlsZUlucHV0RmlsZXMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9i
amVjdCYgbWVzc2FnZSkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9y
cyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBwYXJhbXNDb250YWluZXIgPSBtZXNzYWdlLmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNw
ZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsK
ICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdl
dCgpOwogICAgaW50IGluX25vZGVJZCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRJ
bnQocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoIm5vZGVJZCIpLCBudWxscHRyLCBw
cm90b2NvbEVycm9yc1B0cik7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGluX2ZpbGVzID0g
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEFycmF5KHBhcmFtc0NvbnRhaW5lclB0ciwg
QVNDSUlMaXRlcmFsKCJmaWxlcyIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3Ro
KCkpIHsKICAgICAgICBtX2FnZW50LT5zZXRGaWxlSW5wdXRGaWxlcygmZXJyb3IsIGluX25vZGVJ
ZCwgaW5fZmlsZXMpOwoKCiAgICB9CiAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9u
c2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVy
cm9yKTsKfQoKI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoKUGFzc1JlZlB0cjxJbnNw
ZWN0b3JET01EZWJ1Z2dlckJhY2tlbmREaXNwYXRjaGVyPiBJbnNwZWN0b3JET01EZWJ1Z2dlckJh
Y2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tl
bmREaXNwYXRjaGVyLCBJbnNwZWN0b3JET01EZWJ1Z2dlckJhY2tlbmREaXNwYXRjaGVySGFuZGxl
ciogYWdlbnQpCnsKICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9yRE9NRGVidWdnZXJC
YWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKfQoKSW5zcGVjdG9y
RE9NRGVidWdnZXJCYWNrZW5kRGlzcGF0Y2hlcjo6SW5zcGVjdG9yRE9NRGVidWdnZXJCYWNrZW5k
RGlzcGF0Y2hlcihJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIs
IEluc3BlY3RvckRPTURlYnVnZ2VyQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKICAg
IDogSW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNo
ZXIpCiAgICAsIG1fYWdlbnQoYWdlbnQpCnsKICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lz
dGVyRGlzcGF0Y2hlckZvckRvbWFpbihBU0NJSUxpdGVyYWwoIkRPTURlYnVnZ2VyIiksIHRoaXMp
Owp9Cgp2b2lkIEluc3BlY3RvckRPTURlYnVnZ2VyQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNo
KGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IG1lc3NhZ2UpCnsKICAgIFJlZjxJbnNwZWN0b3JET01EZWJ1Z2dlckJhY2tlbmREaXNw
YXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKCiAgICB0eXBlZGVmIHZvaWQgKEluc3BlY3RvckRPTURl
YnVnZ2VyQmFja2VuZERpc3BhdGNoZXI6OipDYWxsSGFuZGxlcikobG9uZyBjYWxsSWQsIGNvbnN0
IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CiAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBD
YWxsSGFuZGxlcj4gRGlzcGF0Y2hNYXA7CiAgICBERUZJTkVfU1RBVElDX0xPQ0FMKERpc3BhdGNo
TWFwLCBkaXNwYXRjaE1hcCwgKCkpOwogICAgaWYgKGRpc3BhdGNoTWFwLmlzRW1wdHkoKSkgewog
ICAgICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgTWV0aG9kVGFibGUgewogICAgICAgICAgICBjb25z
dCBjaGFyKiBuYW1lOwogICAgICAgICAgICBDYWxsSGFuZGxlciBoYW5kbGVyOwogICAgICAgIH0g
Y29tbWFuZHNbXSA9IHsKICAgICAgICAgICAgeyAic2V0RE9NQnJlYWtwb2ludCIsICAmSW5zcGVj
dG9yRE9NRGVidWdnZXJCYWNrZW5kRGlzcGF0Y2hlcjo6c2V0RE9NQnJlYWtwb2ludCB9LAogICAg
ICAgICAgICB7ICJyZW1vdmVET01CcmVha3BvaW50IiwgICZJbnNwZWN0b3JET01EZWJ1Z2dlckJh
Y2tlbmREaXNwYXRjaGVyOjpyZW1vdmVET01CcmVha3BvaW50IH0sCiAgICAgICAgICAgIHsgInNl
dEV2ZW50TGlzdGVuZXJCcmVha3BvaW50IiwgICZJbnNwZWN0b3JET01EZWJ1Z2dlckJhY2tlbmRE
aXNwYXRjaGVyOjpzZXRFdmVudExpc3RlbmVyQnJlYWtwb2ludCB9LAogICAgICAgICAgICB7ICJy
ZW1vdmVFdmVudExpc3RlbmVyQnJlYWtwb2ludCIsICAmSW5zcGVjdG9yRE9NRGVidWdnZXJCYWNr
ZW5kRGlzcGF0Y2hlcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQgfSwKICAgICAgICAg
ICAgeyAic2V0SW5zdHJ1bWVudGF0aW9uQnJlYWtwb2ludCIsICAmSW5zcGVjdG9yRE9NRGVidWdn
ZXJCYWNrZW5kRGlzcGF0Y2hlcjo6c2V0SW5zdHJ1bWVudGF0aW9uQnJlYWtwb2ludCB9LAogICAg
ICAgICAgICB7ICJyZW1vdmVJbnN0cnVtZW50YXRpb25CcmVha3BvaW50IiwgICZJbnNwZWN0b3JE
T01EZWJ1Z2dlckJhY2tlbmREaXNwYXRjaGVyOjpyZW1vdmVJbnN0cnVtZW50YXRpb25CcmVha3Bv
aW50IH0sCiAgICAgICAgICAgIHsgInNldFhIUkJyZWFrcG9pbnQiLCAgJkluc3BlY3RvckRPTURl
YnVnZ2VyQmFja2VuZERpc3BhdGNoZXI6OnNldFhIUkJyZWFrcG9pbnQgfSwKICAgICAgICAgICAg
eyAicmVtb3ZlWEhSQnJlYWtwb2ludCIsICAmSW5zcGVjdG9yRE9NRGVidWdnZXJCYWNrZW5kRGlz
cGF0Y2hlcjo6cmVtb3ZlWEhSQnJlYWtwb2ludCB9LAogICAgICAgIH07CiAgICAgICAgc2l6ZV90
IGxlbmd0aCA9IFdURl9BUlJBWV9MRU5HVEgoY29tbWFuZHMpOwogICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCiAgICAgICAgICAgIGRpc3BhdGNoTWFwLmFkZChjb21t
YW5kc1tpXS5uYW1lLCBjb21tYW5kc1tpXS5oYW5kbGVyKTsKICAgIH0KCiAgICBIYXNoTWFwPFN0
cmluZywgQ2FsbEhhbmRsZXI+OjppdGVyYXRvciBpdCA9IGRpc3BhdGNoTWFwLmZpbmQobWV0aG9k
KTsKICAgIGlmIChpdCA9PSBkaXNwYXRjaE1hcC5lbmQoKSkgewogICAgICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCBTdHJpbmcoIiciKSArICJET01EZWJ1Z2dlciIgKyAn
LicgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CiAgICAgICAgcmV0dXJuOwogICAgfQoK
ICAgICgoKnRoaXMpLippdC0+dmFsdWUpKGNhbGxJZCwgKm1lc3NhZ2UuZ2V0KCkpOwp9Cgp2b2lk
IEluc3BlY3RvckRPTURlYnVnZ2VyQmFja2VuZERpc3BhdGNoZXI6OnNldERPTUJyZWFrcG9pbnQo
bG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSkKewogICAgUmVmUHRy
PEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUo
KTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSBtZXNzYWdl
LmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5l
clB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2Nv
bEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgaW50IGluX25vZGVJZCA9IElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRJbnQocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJ
SUxpdGVyYWwoIm5vZGVJZCIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBTdHJp
bmcgaW5fdHlwZSA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1z
Q29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInR5cGUiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJv
cnNQdHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xF
cnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9hZ2VudC0+c2V0RE9NQnJlYWtwb2ludCgmZXJy
b3IsIGluX25vZGVJZCwgaW5fdHlwZSk7CgoKICAgIH0KICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIHByb3RvY29sRXJyb3JzLnJl
bGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckRPTURlYnVnZ2VyQmFja2VuZERpc3Bh
dGNoZXI6OnJlbW92ZURPTUJyZWFrcG9pbnQobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9i
amVjdCYgbWVzc2FnZSkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9y
cyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBwYXJhbXNDb250YWluZXIgPSBtZXNzYWdlLmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNw
ZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsK
ICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdl
dCgpOwogICAgaW50IGluX25vZGVJZCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRJ
bnQocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoIm5vZGVJZCIpLCBudWxscHRyLCBw
cm90b2NvbEVycm9yc1B0cik7CiAgICBTdHJpbmcgaW5fdHlwZSA9IEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInR5
cGUiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmlu
ZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9h
Z2VudC0+cmVtb3ZlRE9NQnJlYWtwb2ludCgmZXJyb3IsIGluX25vZGVJZCwgaW5fdHlwZSk7CgoK
ICAgIH0KICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3Vs
dC5yZWxlYXNlKCksIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lkIElu
c3BlY3RvckRPTURlYnVnZ2VyQmFja2VuZERpc3BhdGNoZXI6OnNldEV2ZW50TGlzdGVuZXJCcmVh
a3BvaW50KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpCnsKICAg
IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6
Y3JlYXRlKCk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0g
bWVzc2FnZS5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXND
b250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSog
cHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIFN0cmluZyBpbl9l
dmVudE5hbWUgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0Nv
bnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJldmVudE5hbWUiKSwgbnVsbHB0ciwgcHJvdG9jb2xF
cnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9j
b2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9hZ2VudC0+c2V0RXZlbnRMaXN0ZW5lckJy
ZWFrcG9pbnQoJmVycm9yLCBpbl9ldmVudE5hbWUpOwoKCiAgICB9CiAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBwcm90b2NvbEVy
cm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JET01EZWJ1Z2dlckJhY2tl
bmREaXNwYXRjaGVyOjpyZW1vdmVFdmVudExpc3RlbmVyQnJlYWtwb2ludChsb25nIGNhbGxJZCwg
Y29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2JqZWN0KCJw
YXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1z
Q29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0g
cHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBTdHJpbmcgaW5fZXZlbnROYW1lID0gSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0
ZXJhbCgiZXZlbnROYW1lIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkg
ewogICAgICAgIG1fYWdlbnQtPnJlbW92ZUV2ZW50TGlzdGVuZXJCcmVha3BvaW50KCZlcnJvciwg
aW5fZXZlbnROYW1lKTsKCgogICAgfQogICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3Bv
bnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBl
cnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJCYWNrZW5kRGlzcGF0Y2hlcjo6c2V0
SW5zdHJ1bWVudGF0aW9uQnJlYWtwb2ludChsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2Jq
ZWN0JiBtZXNzYWdlKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3Jz
ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHBhcmFtc0NvbnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3Bl
Y3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwog
ICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0
KCk7CiAgICBTdHJpbmcgaW5fZXZlbnROYW1lID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OmdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgiZXZlbnROYW1lIiks
IG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJy
b3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fYWdlbnQt
PnNldEluc3RydW1lbnRhdGlvbkJyZWFrcG9pbnQoJmVycm9yLCBpbl9ldmVudE5hbWUpOwoKCiAg
ICB9CiAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQu
cmVsZWFzZSgpLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNw
ZWN0b3JET01EZWJ1Z2dlckJhY2tlbmREaXNwYXRjaGVyOjpyZW1vdmVJbnN0cnVtZW50YXRpb25C
cmVha3BvaW50KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpCnsK
ICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJh
eTo6Y3JlYXRlKCk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVy
ID0gbWVzc2FnZS5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJh
bXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJh
eSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIFN0cmluZyBp
bl9ldmVudE5hbWUgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFt
c0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJldmVudE5hbWUiKSwgbnVsbHB0ciwgcHJvdG9j
b2xFcnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJv
dG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9hZ2VudC0+cmVtb3ZlSW5zdHJ1bWVu
dGF0aW9uQnJlYWtwb2ludCgmZXJyb3IsIGluX2V2ZW50TmFtZSk7CgoKICAgIH0KICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIHBy
b3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckRPTURlYnVn
Z2VyQmFja2VuZERpc3BhdGNoZXI6OnNldFhIUkJyZWFrcG9pbnQobG9uZyBjYWxsSWQsIGNvbnN0
IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBw
cm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSBtZXNzYWdlLmdldE9iamVjdCgicGFyYW1z
Iik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRh
aW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3Rv
Y29sRXJyb3JzLmdldCgpOwogICAgU3RyaW5nIGluX3VybCA9IEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInVybCIp
LCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVy
cm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2FnZW50
LT5zZXRYSFJCcmVha3BvaW50KCZlcnJvciwgaW5fdXJsKTsKCgogICAgfQogICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgcHJvdG9j
b2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJC
YWNrZW5kRGlzcGF0Y2hlcjo6cmVtb3ZlWEhSQnJlYWtwb2ludChsb25nIGNhbGxJZCwgY29uc3Qg
SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHBy
b3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2JqZWN0KCJwYXJhbXMi
KTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFp
bmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9j
b2xFcnJvcnMuZ2V0KCk7CiAgICBTdHJpbmcgaW5fdXJsID0gSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgidXJsIiks
IG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJy
b3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fYWdlbnQt
PnJlbW92ZVhIUkJyZWFrcG9pbnQoJmVycm9yLCBpbl91cmwpOwoKCiAgICB9CiAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBwcm90
b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NS
SVBUX0RFQlVHR0VSKQoKUGFzc1JlZlB0cjxJbnNwZWN0b3JET01TdG9yYWdlQmFja2VuZERpc3Bh
dGNoZXI+IEluc3BlY3RvckRPTVN0b3JhZ2VCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9yRE9NU3Rv
cmFnZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCnsKICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgSW5zcGVjdG9yRE9NU3RvcmFnZUJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRj
aGVyLCBhZ2VudCkpOwp9CgpJbnNwZWN0b3JET01TdG9yYWdlQmFja2VuZERpc3BhdGNoZXI6Oklu
c3BlY3RvckRPTVN0b3JhZ2VCYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlciogYmFja2VuZERpc3BhdGNoZXIsIEluc3BlY3RvckRPTVN0b3JhZ2VCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIqIGFnZW50KQogICAgOiBJbnNwZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlz
cGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKICAgICwgbV9hZ2VudChhZ2VudCkKewogICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKEFTQ0lJTGl0ZXJh
bCgiRE9NU3RvcmFnZSIpLCB0aGlzKTsKfQoKdm9pZCBJbnNwZWN0b3JET01TdG9yYWdlQmFja2Vu
ZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwg
UGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpCnsKICAgIFJlZjxJbnNwZWN0b3JE
T01TdG9yYWdlQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwoKICAgIHR5cGVkZWYg
dm9pZCAoSW5zcGVjdG9yRE9NU3RvcmFnZUJhY2tlbmREaXNwYXRjaGVyOjoqQ2FsbEhhbmRsZXIp
KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwogICAgdHlwZWRl
ZiBIYXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+IERpc3BhdGNoTWFwOwogICAgREVGSU5FX1NU
QVRJQ19MT0NBTChEaXNwYXRjaE1hcCwgZGlzcGF0Y2hNYXAsICgpKTsKICAgIGlmIChkaXNwYXRj
aE1hcC5pc0VtcHR5KCkpIHsKICAgICAgICBzdGF0aWMgY29uc3Qgc3RydWN0IE1ldGhvZFRhYmxl
IHsKICAgICAgICAgICAgY29uc3QgY2hhciogbmFtZTsKICAgICAgICAgICAgQ2FsbEhhbmRsZXIg
aGFuZGxlcjsKICAgICAgICB9IGNvbW1hbmRzW10gPSB7CiAgICAgICAgICAgIHsgImVuYWJsZSIs
ICAmSW5zcGVjdG9yRE9NU3RvcmFnZUJhY2tlbmREaXNwYXRjaGVyOjplbmFibGUgfSwKICAgICAg
ICAgICAgeyAiZGlzYWJsZSIsICAmSW5zcGVjdG9yRE9NU3RvcmFnZUJhY2tlbmREaXNwYXRjaGVy
OjpkaXNhYmxlIH0sCiAgICAgICAgICAgIHsgImdldERPTVN0b3JhZ2VJdGVtcyIsICAmSW5zcGVj
dG9yRE9NU3RvcmFnZUJhY2tlbmREaXNwYXRjaGVyOjpnZXRET01TdG9yYWdlSXRlbXMgfSwKICAg
ICAgICAgICAgeyAic2V0RE9NU3RvcmFnZUl0ZW0iLCAgJkluc3BlY3RvckRPTVN0b3JhZ2VCYWNr
ZW5kRGlzcGF0Y2hlcjo6c2V0RE9NU3RvcmFnZUl0ZW0gfSwKICAgICAgICAgICAgeyAicmVtb3Zl
RE9NU3RvcmFnZUl0ZW0iLCAgJkluc3BlY3RvckRPTVN0b3JhZ2VCYWNrZW5kRGlzcGF0Y2hlcjo6
cmVtb3ZlRE9NU3RvcmFnZUl0ZW0gfSwKICAgICAgICB9OwogICAgICAgIHNpemVfdCBsZW5ndGgg
PSBXVEZfQVJSQVlfTEVOR1RIKGNvbW1hbmRzKTsKICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGxlbmd0aDsgKytpKQogICAgICAgICAgICBkaXNwYXRjaE1hcC5hZGQoY29tbWFuZHNbaV0u
bmFtZSwgY29tbWFuZHNbaV0uaGFuZGxlcik7CiAgICB9CgogICAgSGFzaE1hcDxTdHJpbmcsIENh
bGxIYW5kbGVyPjo6aXRlcmF0b3IgaXQgPSBkaXNwYXRjaE1hcC5maW5kKG1ldGhvZCk7CiAgICBp
ZiAoaXQgPT0gZGlzcGF0Y2hNYXAuZW5kKCkpIHsKICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
OjpNZXRob2ROb3RGb3VuZCwgU3RyaW5nKCInIikgKyAiRE9NU3RvcmFnZSIgKyAnLicgKyBtZXRo
b2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICgoKnRo
aXMpLippdC0+dmFsdWUpKGNhbGxJZCwgKm1lc3NhZ2UuZ2V0KCkpOwp9Cgp2b2lkIEluc3BlY3Rv
ckRPTVN0b3JhZ2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZW5hYmxlKGxvbmcgY2FsbElkLCBjb25zdCBJ
bnNwZWN0b3JPYmplY3QmKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJy
b3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBl
cnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9hZ2Vu
dC0+ZW5hYmxlKCZlcnJvcik7CgoKICAgIH0KICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRS
ZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIHByb3RvY29sRXJyb3JzLnJlbGVhc2Uo
KSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VCYWNrZW5kRGlzcGF0Y2hlcjo6
ZGlzYWJsZShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JikKewogICAgUmVmUHRy
PEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUo
KTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3Jz
LT5sZW5ndGgoKSkgewogICAgICAgIG1fYWdlbnQtPmRpc2FibGUoJmVycm9yKTsKCgogICAgfQog
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVh
c2UoKSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9y
RE9NU3RvcmFnZUJhY2tlbmREaXNwYXRjaGVyOjpnZXRET01TdG9yYWdlSXRlbXMobG9uZyBjYWxs
SWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSkKewogICAgUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBS
ZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+ID4gPiBv
dXRfZW50cmllczsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIg
PSBtZXNzYWdlLmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFt
c0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5
KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gaW5fc3RvcmFnZUlkID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OmdldE9iamVjdChwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgic3RvcmFnZUlkIiks
IG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJy
b3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fYWdlbnQt
PmdldERPTVN0b3JhZ2VJdGVtcygmZXJyb3IsIGluX3N0b3JhZ2VJZCwgb3V0X2VudHJpZXMpOwoK
ICAgICAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgICAgIHJlc3VsdC0+c2V0VmFs
dWUoQVNDSUlMaXRlcmFsKCJlbnRyaWVzIiksIG91dF9lbnRyaWVzKTsKICAgICAgICB9CiAgICB9
CiAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVs
ZWFzZSgpLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0
b3JET01TdG9yYWdlQmFja2VuZERpc3BhdGNoZXI6OnNldERPTVN0b3JhZ2VJdGVtKGxvbmcgY2Fs
bElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpCnsKICAgIFJlZlB0cjxJbnNwZWN0
b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gbWVzc2FnZS5nZXRPYmpl
Y3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBw
YXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQ
dHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGlu
X3N0b3JhZ2VJZCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRPYmplY3QocGFyYW1z
Q29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInN0b3JhZ2VJZCIpLCBudWxscHRyLCBwcm90b2Nv
bEVycm9yc1B0cik7CiAgICBTdHJpbmcgaW5fa2V5ID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgia2V5IiksIG51
bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIFN0cmluZyBpbl92YWx1ZSA9IEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxp
dGVyYWwoInZhbHVlIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
RXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewog
ICAgICAgIG1fYWdlbnQtPnNldERPTVN0b3JhZ2VJdGVtKCZlcnJvciwgaW5fc3RvcmFnZUlkLCBp
bl9rZXksIGluX3ZhbHVlKTsKCgogICAgfQogICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJl
c3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgp
LCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yRE9NU3RvcmFnZUJhY2tlbmREaXNwYXRjaGVyOjpy
ZW1vdmVET01TdG9yYWdlSXRlbShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBt
ZXNzYWdlKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5z
cGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFt
c0NvbnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9i
amVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5z
cGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBpbl9zdG9yYWdlSWQgPSBJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcjo6Z2V0T2JqZWN0KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJz
dG9yYWdlSWQiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgU3RyaW5nIGluX2tl
eSA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVy
UHRyLCBBU0NJSUxpdGVyYWwoImtleSIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7Cgog
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVu
Z3RoKCkpIHsKICAgICAgICBtX2FnZW50LT5yZW1vdmVET01TdG9yYWdlSXRlbSgmZXJyb3IsIGlu
X3N0b3JhZ2VJZCwgaW5fa2V5KTsKCgogICAgfQogICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2Vu
ZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgcHJvdG9jb2xFcnJvcnMucmVsZWFz
ZSgpLCBlcnJvcik7Cn0KCiNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQoKUGFzc1JlZlB0cjxJbnNw
ZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVyOjpjcmVhdGUoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNw
YXRjaGVyLCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQp
CnsKICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKfQoKSW5zcGVjdG9yRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlcjo6SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIsIEluc3BlY3RvckRhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKICAgIDogSW5zcGVjdG9yU3VwcGxlbWVu
dGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCiAgICAsIG1fYWdlbnQoYWdl
bnQpCnsKICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFp
bihBU0NJSUxpdGVyYWwoIkRhdGFiYXNlIiksIHRoaXMpOwp9Cgp2b2lkIEluc3BlY3RvckRhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcm
IG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpCnsKICAgIFJlZjxJ
bnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKCiAgICB0
eXBlZGVmIHZvaWQgKEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OipDYWxsSGFu
ZGxlcikobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CiAgICB0
eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj4gRGlzcGF0Y2hNYXA7CiAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKERpc3BhdGNoTWFwLCBkaXNwYXRjaE1hcCwgKCkpOwogICAgaWYgKGRp
c3BhdGNoTWFwLmlzRW1wdHkoKSkgewogICAgICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgTWV0aG9k
VGFibGUgewogICAgICAgICAgICBjb25zdCBjaGFyKiBuYW1lOwogICAgICAgICAgICBDYWxsSGFu
ZGxlciBoYW5kbGVyOwogICAgICAgIH0gY29tbWFuZHNbXSA9IHsKICAgICAgICAgICAgeyAiZW5h
YmxlIiwgICZJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjplbmFibGUgfSwKICAg
ICAgICAgICAgeyAiZGlzYWJsZSIsICAmSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
cjo6ZGlzYWJsZSB9LAogICAgICAgICAgICB7ICJnZXREYXRhYmFzZVRhYmxlTmFtZXMiLCAgJklu
c3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmdldERhdGFiYXNlVGFibGVOYW1lcyB9
LAogICAgICAgICAgICB7ICJleGVjdXRlU1FMIiwgICZJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVyOjpleGVjdXRlU1FMIH0sCiAgICAgICAgfTsKICAgICAgICBzaXplX3QgbGVuZ3Ro
ID0gV1RGX0FSUkFZX0xFTkdUSChjb21tYW5kcyk7CiAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBsZW5ndGg7ICsraSkKICAgICAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKGNvbW1hbmRzW2ld
Lm5hbWUsIGNvbW1hbmRzW2ldLmhhbmRsZXIpOwogICAgfQoKICAgIEhhc2hNYXA8U3RyaW5nLCBD
YWxsSGFuZGxlcj46Oml0ZXJhdG9yIGl0ID0gZGlzcGF0Y2hNYXAuZmluZChtZXRob2QpOwogICAg
aWYgKGl0ID09IGRpc3BhdGNoTWFwLmVuZCgpKSB7CiAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cjo6TWV0aG9kTm90Rm91bmQsIFN0cmluZygiJyIpICsgIkRhdGFiYXNlIiArICcuJyArIG1ldGhv
ZCArICInIHdhcyBub3QgZm91bmQiKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgKCgqdGhp
cykuKml0LT52YWx1ZSkoY2FsbElkLCAqbWVzc2FnZS5nZXQoKSk7Cn0KCnZvaWQgSW5zcGVjdG9y
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZW5hYmxlKGxvbmcgY2FsbElkLCBjb25zdCBJbnNw
ZWN0b3JPYmplY3QmKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3Jz
ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJv
cjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9hZ2VudC0+
ZW5hYmxlKCZlcnJvcik7CgoKICAgIH0KICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNw
b25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwg
ZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmRpc2Fi
bGUobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYpCnsKICAgIFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7Cgog
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVu
Z3RoKCkpIHsKICAgICAgICBtX2FnZW50LT5kaXNhYmxlKCZlcnJvcik7CgoKICAgIH0KICAgIG1f
YmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCks
IHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckRhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXI6OmdldERhdGFiYXNlVGFibGVOYW1lcyhsb25nIGNhbGxJZCwg
Y29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIFJlZlB0
cjxUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPiA+IG91dF90YWJsZU5hbWVzOwoKICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2JqZWN0KCJw
YXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1z
Q29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0g
cHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBTdHJpbmcgaW5fZGF0YWJhc2VJZCA9IEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxp
dGVyYWwoImRhdGFiYXNlSWQiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgp
KSB7CiAgICAgICAgbV9hZ2VudC0+Z2V0RGF0YWJhc2VUYWJsZU5hbWVzKCZlcnJvciwgaW5fZGF0
YWJhc2VJZCwgb3V0X3RhYmxlTmFtZXMpOwoKICAgICAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7
CiAgICAgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJ0YWJsZU5hbWVzIiks
IG91dF90YWJsZU5hbWVzKTsKICAgICAgICB9CiAgICB9CiAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBwcm90b2NvbEVycm9ycy5y
ZWxlYXNlKCksIGVycm9yKTsKfQoKSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXI6OkV4ZWN1dGVTUUxDYWxsYmFjazo6RXhlY3V0ZVNRTENhbGxiYWNrKFBhc3NSZWZQdHI8
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IGJhY2tlbmREaXNwYXRjaGVyLCBpbnQgaWQpIDog
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZShiYWNrZW5kRGlzcGF0Y2hl
ciwgaWQpIHsgfQoKdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxl
cjo6RXhlY3V0ZVNRTENhbGxiYWNrOjpzZW5kU3VjY2VzcyhQYXNzUmVmUHRyPFR5cGVCdWlsZGVy
OjpBcnJheTxTdHJpbmc+ID4gY29sdW1uTmFtZXMsIFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkFy
cmF5PEluc3BlY3RvclZhbHVlPiA+IHZhbHVlcywgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6RGF0
YWJhc2U6OkVycm9yPiBzcWxFcnJvcikKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4ganNv
bk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgaWYgKGNvbHVtbk5hbWVz
KQogICAgICAgIGpzb25NZXNzYWdlLT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVz
IiksIGNvbHVtbk5hbWVzKTsKICAgIGlmICh2YWx1ZXMpCiAgICAgICAganNvbk1lc3NhZ2UtPnNl
dFZhbHVlKEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksIHZhbHVlcyk7CiAgICBpZiAoc3FsRXJyb3Ip
CiAgICAgICAganNvbk1lc3NhZ2UtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgic3FsRXJyb3IiKSwg
c3FsRXJyb3IpOwogICAgc2VuZElmQWN0aXZlKGpzb25NZXNzYWdlLCBFcnJvclN0cmluZygpKTsK
fQoKdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMKGxv
bmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpCnsKICAgIFJlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7
CiAgICBSZWZQdHI8SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4
ZWN1dGVTUUxDYWxsYmFjaz4gY2FsbGJhY2sgPSBhZG9wdFJlZihuZXcgSW5zcGVjdG9yRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxDYWxsYmFjayhtX2JhY2tlbmRE
aXNwYXRjaGVyLCBjYWxsSWQpKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXND
b250YWluZXIgPSBtZXNzYWdlLmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmpl
Y3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3Bl
Y3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAg
U3RyaW5nIGluX2RhdGFiYXNlSWQgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3Ry
aW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksIG51bGxw
dHIsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIFN0cmluZyBpbl9xdWVyeSA9IEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVy
YWwoInF1ZXJ5IiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJy
b3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAg
ICAgIG1fYWdlbnQtPmV4ZWN1dGVTUUwoJmVycm9yLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSwg
Y2FsbGJhY2spOwoKICAgICAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQogICAgICAgICAgICByZXR1
cm47CiAgICAgICAgY2FsbGJhY2stPmRpc2FibGUoKTsKCiAgICB9CiAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBwcm90b2NvbEVy
cm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0Up
CgojaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCgpQYXNzUmVmUHRyPEluc3BlY3RvckRl
YnVnZ2VyQmFja2VuZERpc3BhdGNoZXI+IEluc3BlY3RvckRlYnVnZ2VyQmFja2VuZERpc3BhdGNo
ZXI6OmNyZWF0ZShJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIs
IEluc3BlY3RvckRlYnVnZ2VyQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKewogICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JEZWJ1Z2dlckJhY2tlbmREaXNwYXRjaGVyKGJh
Y2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOwp9CgpJbnNwZWN0b3JEZWJ1Z2dlckJhY2tlbmREaXNw
YXRjaGVyOjpJbnNwZWN0b3JEZWJ1Z2dlckJhY2tlbmREaXNwYXRjaGVyKEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9yRGVidWdnZXJCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQogICAgOiBJbnNwZWN0b3JTdXBwbGVtZW50YWxCYWNr
ZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKICAgICwgbV9hZ2VudChhZ2VudCkKewog
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKEFTQ0lJ
TGl0ZXJhbCgiRGVidWdnZXIiKSwgdGhpcyk7Cn0KCnZvaWQgSW5zcGVjdG9yRGVidWdnZXJCYWNr
ZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9k
LCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSkKewogICAgUmVmPEluc3BlY3Rv
ckRlYnVnZ2VyQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwoKICAgIHR5cGVkZWYg
dm9pZCAoSW5zcGVjdG9yRGVidWdnZXJCYWNrZW5kRGlzcGF0Y2hlcjo6KkNhbGxIYW5kbGVyKShs
b25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKICAgIHR5cGVkZWYg
SGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPiBEaXNwYXRjaE1hcDsKICAgIERFRklORV9TVEFU
SUNfTE9DQUwoRGlzcGF0Y2hNYXAsIGRpc3BhdGNoTWFwLCAoKSk7CiAgICBpZiAoZGlzcGF0Y2hN
YXAuaXNFbXB0eSgpKSB7CiAgICAgICAgc3RhdGljIGNvbnN0IHN0cnVjdCBNZXRob2RUYWJsZSB7
CiAgICAgICAgICAgIGNvbnN0IGNoYXIqIG5hbWU7CiAgICAgICAgICAgIENhbGxIYW5kbGVyIGhh
bmRsZXI7CiAgICAgICAgfSBjb21tYW5kc1tdID0gewogICAgICAgICAgICB7ICJjYXVzZXNSZWNv
bXBpbGF0aW9uIiwgICZJbnNwZWN0b3JEZWJ1Z2dlckJhY2tlbmREaXNwYXRjaGVyOjpjYXVzZXNS
ZWNvbXBpbGF0aW9uIH0sCiAgICAgICAgICAgIHsgInN1cHBvcnRzU2VwYXJhdGVTY3JpcHRDb21w
aWxhdGlvbkFuZEV4ZWN1dGlvbiIsICAmSW5zcGVjdG9yRGVidWdnZXJCYWNrZW5kRGlzcGF0Y2hl
cjo6c3VwcG9ydHNTZXBhcmF0ZVNjcmlwdENvbXBpbGF0aW9uQW5kRXhlY3V0aW9uIH0sCiAgICAg
ICAgICAgIHsgImVuYWJsZSIsICAmSW5zcGVjdG9yRGVidWdnZXJCYWNrZW5kRGlzcGF0Y2hlcjo6
ZW5hYmxlIH0sCiAgICAgICAgICAgIHsgImRpc2FibGUiLCAgJkluc3BlY3RvckRlYnVnZ2VyQmFj
a2VuZERpc3BhdGNoZXI6OmRpc2FibGUgfSwKICAgICAgICAgICAgeyAic2V0QnJlYWtwb2ludHNB
Y3RpdmUiLCAgJkluc3BlY3RvckRlYnVnZ2VyQmFja2VuZERpc3BhdGNoZXI6OnNldEJyZWFrcG9p
bnRzQWN0aXZlIH0sCiAgICAgICAgICAgIHsgInNldEJyZWFrcG9pbnRCeVVybCIsICAmSW5zcGVj
dG9yRGVidWdnZXJCYWNrZW5kRGlzcGF0Y2hlcjo6c2V0QnJlYWtwb2ludEJ5VXJsIH0sCiAgICAg
ICAgICAgIHsgInNldEJyZWFrcG9pbnQiLCAgJkluc3BlY3RvckRlYnVnZ2VyQmFja2VuZERpc3Bh
dGNoZXI6OnNldEJyZWFrcG9pbnQgfSwKICAgICAgICAgICAgeyAicmVtb3ZlQnJlYWtwb2ludCIs
ICAmSW5zcGVjdG9yRGVidWdnZXJCYWNrZW5kRGlzcGF0Y2hlcjo6cmVtb3ZlQnJlYWtwb2ludCB9
LAogICAgICAgICAgICB7ICJjb250aW51ZVRvTG9jYXRpb24iLCAgJkluc3BlY3RvckRlYnVnZ2Vy
QmFja2VuZERpc3BhdGNoZXI6OmNvbnRpbnVlVG9Mb2NhdGlvbiB9LAogICAgICAgICAgICB7ICJz
dGVwT3ZlciIsICAmSW5zcGVjdG9yRGVidWdnZXJCYWNrZW5kRGlzcGF0Y2hlcjo6c3RlcE92ZXIg
fSwKICAgICAgICAgICAgeyAic3RlcEludG8iLCAgJkluc3BlY3RvckRlYnVnZ2VyQmFja2VuZERp
c3BhdGNoZXI6OnN0ZXBJbnRvIH0sCiAgICAgICAgICAgIHsgInN0ZXBPdXQiLCAgJkluc3BlY3Rv
ckRlYnVnZ2VyQmFja2VuZERpc3BhdGNoZXI6OnN0ZXBPdXQgfSwKICAgICAgICAgICAgeyAicGF1
c2UiLCAgJkluc3BlY3RvckRlYnVnZ2VyQmFja2VuZERpc3BhdGNoZXI6OnBhdXNlIH0sCiAgICAg
ICAgICAgIHsgInJlc3VtZSIsICAmSW5zcGVjdG9yRGVidWdnZXJCYWNrZW5kRGlzcGF0Y2hlcjo6
cmVzdW1lIH0sCiAgICAgICAgICAgIHsgInNlYXJjaEluQ29udGVudCIsICAmSW5zcGVjdG9yRGVi
dWdnZXJCYWNrZW5kRGlzcGF0Y2hlcjo6c2VhcmNoSW5Db250ZW50IH0sCiAgICAgICAgICAgIHsg
ImNhblNldFNjcmlwdFNvdXJjZSIsICAmSW5zcGVjdG9yRGVidWdnZXJCYWNrZW5kRGlzcGF0Y2hl
cjo6Y2FuU2V0U2NyaXB0U291cmNlIH0sCiAgICAgICAgICAgIHsgInNldFNjcmlwdFNvdXJjZSIs
ICAmSW5zcGVjdG9yRGVidWdnZXJCYWNrZW5kRGlzcGF0Y2hlcjo6c2V0U2NyaXB0U291cmNlIH0s
CiAgICAgICAgICAgIHsgImdldFNjcmlwdFNvdXJjZSIsICAmSW5zcGVjdG9yRGVidWdnZXJCYWNr
ZW5kRGlzcGF0Y2hlcjo6Z2V0U2NyaXB0U291cmNlIH0sCiAgICAgICAgICAgIHsgImdldEZ1bmN0
aW9uRGV0YWlscyIsICAmSW5zcGVjdG9yRGVidWdnZXJCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0RnVu
Y3Rpb25EZXRhaWxzIH0sCiAgICAgICAgICAgIHsgInNldFBhdXNlT25FeGNlcHRpb25zIiwgICZJ
bnNwZWN0b3JEZWJ1Z2dlckJhY2tlbmREaXNwYXRjaGVyOjpzZXRQYXVzZU9uRXhjZXB0aW9ucyB9
LAogICAgICAgICAgICB7ICJldmFsdWF0ZU9uQ2FsbEZyYW1lIiwgICZJbnNwZWN0b3JEZWJ1Z2dl
ckJhY2tlbmREaXNwYXRjaGVyOjpldmFsdWF0ZU9uQ2FsbEZyYW1lIH0sCiAgICAgICAgICAgIHsg
ImNvbXBpbGVTY3JpcHQiLCAgJkluc3BlY3RvckRlYnVnZ2VyQmFja2VuZERpc3BhdGNoZXI6OmNv
bXBpbGVTY3JpcHQgfSwKICAgICAgICAgICAgeyAicnVuU2NyaXB0IiwgICZJbnNwZWN0b3JEZWJ1
Z2dlckJhY2tlbmREaXNwYXRjaGVyOjpydW5TY3JpcHQgfSwKICAgICAgICAgICAgeyAic2V0T3Zl
cmxheU1lc3NhZ2UiLCAgJkluc3BlY3RvckRlYnVnZ2VyQmFja2VuZERpc3BhdGNoZXI6OnNldE92
ZXJsYXlNZXNzYWdlIH0sCiAgICAgICAgfTsKICAgICAgICBzaXplX3QgbGVuZ3RoID0gV1RGX0FS
UkFZX0xFTkdUSChjb21tYW5kcyk7CiAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5n
dGg7ICsraSkKICAgICAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKGNvbW1hbmRzW2ldLm5hbWUsIGNv
bW1hbmRzW2ldLmhhbmRsZXIpOwogICAgfQoKICAgIEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxl
cj46Oml0ZXJhdG9yIGl0ID0gZGlzcGF0Y2hNYXAuZmluZChtZXRob2QpOwogICAgaWYgKGl0ID09
IGRpc3BhdGNoTWFwLmVuZCgpKSB7CiAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0
UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9k
Tm90Rm91bmQsIFN0cmluZygiJyIpICsgIkRlYnVnZ2VyIiArICcuJyArIG1ldGhvZCArICInIHdh
cyBub3QgZm91bmQiKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgKCgqdGhpcykuKml0LT52
YWx1ZSkoY2FsbElkLCAqbWVzc2FnZS5nZXQoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRGVidWdnZXJC
YWNrZW5kRGlzcGF0Y2hlcjo6Y2F1c2VzUmVjb21waWxhdGlvbihsb25nIGNhbGxJZCwgY29uc3Qg
SW5zcGVjdG9yT2JqZWN0JikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVy
cm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBib29sIG91dF9yZXN1bHQ7Cgog
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVu
Z3RoKCkpIHsKICAgICAgICBtX2FnZW50LT5jYXVzZXNSZWNvbXBpbGF0aW9uKCZlcnJvciwgJm91
dF9yZXN1bHQpOwoKICAgICAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgICAgIHJl
c3VsdC0+c2V0Qm9vbGVhbihBU0NJSUxpdGVyYWwoInJlc3VsdCIpLCBvdXRfcmVzdWx0KTsKICAg
ICAgICB9CiAgICB9CiAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElk
LCByZXN1bHQucmVsZWFzZSgpLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoK
dm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckJhY2tlbmREaXNwYXRjaGVyOjpzdXBwb3J0c1NlcGFyYXRl
U2NyaXB0Q29tcGlsYXRpb25BbmRFeGVjdXRpb24obG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rv
ck9iamVjdCYpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJ
bnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgYm9vbCBvdXRfcmVzdWx0OwoKICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAg
ICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7
CiAgICAgICAgbV9hZ2VudC0+c3VwcG9ydHNTZXBhcmF0ZVNjcmlwdENvbXBpbGF0aW9uQW5kRXhl
Y3V0aW9uKCZlcnJvciwgJm91dF9yZXN1bHQpOwoKICAgICAgICBpZiAoIWVycm9yLmxlbmd0aCgp
KSB7CiAgICAgICAgICAgIHJlc3VsdC0+c2V0Qm9vbGVhbihBU0NJSUxpdGVyYWwoInJlc3VsdCIp
LCBvdXRfcmVzdWx0KTsKICAgICAgICB9CiAgICB9CiAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5z
ZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBwcm90b2NvbEVycm9ycy5yZWxl
YXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckJhY2tlbmREaXNwYXRjaGVy
OjplbmFibGUobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYpCnsKICAgIFJlZlB0
cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRl
KCk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9y
cy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2FnZW50LT5lbmFibGUoJmVycm9yKTsKCgogICAgfQog
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVh
c2UoKSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9y
RGVidWdnZXJCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzYWJsZShsb25nIGNhbGxJZCwgY29uc3QgSW5z
cGVjdG9yT2JqZWN0JikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9y
cyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJy
b3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fYWdlbnQt
PmRpc2FibGUoJmVycm9yKTsKCgogICAgfQogICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJl
c3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgp
LCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yRGVidWdnZXJCYWNrZW5kRGlzcGF0Y2hlcjo6c2V0
QnJlYWtwb2ludHNBY3RpdmUobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVz
c2FnZSkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3Bl
Y3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXND
b250YWluZXIgPSBtZXNzYWdlLmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmpl
Y3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3Bl
Y3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAg
Ym9vbCBpbl9hY3RpdmUgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0Qm9vbGVhbihw
YXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgiYWN0aXZlIiksIG51bGxwdHIsIHByb3Rv
Y29sRXJyb3JzUHRyKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXBy
b3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fYWdlbnQtPnNldEJyZWFrcG9pbnRz
QWN0aXZlKCZlcnJvciwgaW5fYWN0aXZlKTsKCgogICAgfQogICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgcHJvdG9jb2xFcnJvcnMu
cmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yRGVidWdnZXJCYWNrZW5kRGlzcGF0
Y2hlcjo6c2V0QnJlYWtwb2ludEJ5VXJsKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmpl
Y3QmIG1lc3NhZ2UpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMg
PSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgVHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpC
cmVha3BvaW50SWQgb3V0X2JyZWFrcG9pbnRJZDsKICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJy
YXk8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj4gPiBvdXRfbG9jYXRpb25zOwoKICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2Jq
ZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0g
cGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3Jz
UHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBpbnQgaW5fbGluZU51bWJlciA9IEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRJbnQocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxp
dGVyYWwoImxpbmVOdW1iZXIiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgYm9v
bCB1cmxfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgU3RyaW5nIGluX3VybCA9IEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVy
YWwoInVybCIpLCAmdXJsX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wg
dXJsUmVnZXhfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgU3RyaW5nIGluX3VybFJlZ2V4ID0gSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsIEFT
Q0lJTGl0ZXJhbCgidXJsUmVnZXgiKSwgJnVybFJlZ2V4X3ZhbHVlRm91bmQsIHByb3RvY29sRXJy
b3JzUHRyKTsKICAgIGJvb2wgY29sdW1uTnVtYmVyX3ZhbHVlRm91bmQgPSBmYWxzZTsKICAgIGlu
dCBpbl9jb2x1bW5OdW1iZXIgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0SW50KHBh
cmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJjb2x1bW5OdW1iZXIiKSwgJmNvbHVtbk51
bWJlcl92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBib29sIG9wdGlvbnNfdmFs
dWVGb3VuZCA9IGZhbHNlOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaW5fb3B0aW9ucyA9
IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRPYmplY3QocGFyYW1zQ29udGFpbmVyUHRy
LCBBU0NJSUxpdGVyYWwoIm9wdGlvbnMiKSwgJm9wdGlvbnNfdmFsdWVGb3VuZCwgcHJvdG9jb2xF
cnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9j
b2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9hZ2VudC0+c2V0QnJlYWtwb2ludEJ5VXJs
KCZlcnJvciwgaW5fbGluZU51bWJlciwgdXJsX3ZhbHVlRm91bmQgPyAmaW5fdXJsIDogMCwgdXJs
UmVnZXhfdmFsdWVGb3VuZCA/ICZpbl91cmxSZWdleCA6IDAsIGNvbHVtbk51bWJlcl92YWx1ZUZv
dW5kID8gJmluX2NvbHVtbk51bWJlciA6IDAsIG9wdGlvbnNfdmFsdWVGb3VuZCA/ICZpbl9vcHRp
b25zIDogMCwgJm91dF9icmVha3BvaW50SWQsIG91dF9sb2NhdGlvbnMpOwoKICAgICAgICBpZiAo
IWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0
ZXJhbCgiYnJlYWtwb2ludElkIiksIG91dF9icmVha3BvaW50SWQpOwogICAgICAgICAgICByZXN1
bHQtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgibG9jYXRpb25zIiksIG91dF9sb2NhdGlvbnMpOwog
ICAgICAgIH0KICAgIH0KICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxs
SWQsIHJlc3VsdC5yZWxlYXNlKCksIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9
Cgp2b2lkIEluc3BlY3RvckRlYnVnZ2VyQmFja2VuZERpc3BhdGNoZXI6OnNldEJyZWFrcG9pbnQo
bG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSkKewogICAgUmVmUHRy
PEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUo
KTsKCiAgICBUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCBvdXRfYnJlYWtwb2lu
dElkOwogICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6TG9jYXRpb24+IG91dF9hY3R1
YWxMb2NhdGlvbjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIg
PSBtZXNzYWdlLmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFt
c0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5
KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gaW5fbG9jYXRpb24gPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
Z2V0T2JqZWN0KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJsb2NhdGlvbiIpLCBu
dWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBib29sIG9wdGlvbnNfdmFsdWVGb3VuZCA9
IGZhbHNlOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaW5fb3B0aW9ucyA9IEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjpnZXRPYmplY3QocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxp
dGVyYWwoIm9wdGlvbnMiKSwgJm9wdGlvbnNfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIp
OwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMt
Pmxlbmd0aCgpKSB7CiAgICAgICAgbV9hZ2VudC0+c2V0QnJlYWtwb2ludCgmZXJyb3IsIGluX2xv
Y2F0aW9uLCBvcHRpb25zX3ZhbHVlRm91bmQgPyAmaW5fb3B0aW9ucyA6IDAsICZvdXRfYnJlYWtw
b2ludElkLCBvdXRfYWN0dWFsTG9jYXRpb24pOwoKICAgICAgICBpZiAoIWVycm9yLmxlbmd0aCgp
KSB7CiAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgiYnJlYWtwb2lu
dElkIiksIG91dF9icmVha3BvaW50SWQpOwogICAgICAgICAgICByZXN1bHQtPnNldFZhbHVlKEFT
Q0lJTGl0ZXJhbCgiYWN0dWFsTG9jYXRpb24iKSwgb3V0X2FjdHVhbExvY2F0aW9uKTsKICAgICAg
ICB9CiAgICB9CiAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCBy
ZXN1bHQucmVsZWFzZSgpLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9p
ZCBJbnNwZWN0b3JEZWJ1Z2dlckJhY2tlbmREaXNwYXRjaGVyOjpyZW1vdmVCcmVha3BvaW50KGxv
bmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpCnsKICAgIFJlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7
CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gbWVzc2FnZS5n
ZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQ
dHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xF
cnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIFN0cmluZyBpbl9icmVha3BvaW50
SWQgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5l
clB0ciwgQVNDSUlMaXRlcmFsKCJicmVha3BvaW50SWQiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJv
cnNQdHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xF
cnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9hZ2VudC0+cmVtb3ZlQnJlYWtwb2ludCgmZXJy
b3IsIGluX2JyZWFrcG9pbnRJZCk7CgoKICAgIH0KICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNl
bmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIHByb3RvY29sRXJyb3JzLnJlbGVh
c2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckRlYnVnZ2VyQmFja2VuZERpc3BhdGNoZXI6
OmNvbnRpbnVlVG9Mb2NhdGlvbihsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBt
ZXNzYWdlKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5z
cGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFt
c0NvbnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9i
amVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5z
cGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBpbl9sb2NhdGlvbiA9IEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOjpnZXRPYmplY3QocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoImxv
Y2F0aW9uIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JT
dHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAg
IG1fYWdlbnQtPmNvbnRpbnVlVG9Mb2NhdGlvbigmZXJyb3IsIGluX2xvY2F0aW9uKTsKCgogICAg
fQogICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJl
bGVhc2UoKSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVj
dG9yRGVidWdnZXJCYWNrZW5kRGlzcGF0Y2hlcjo6c3RlcE92ZXIobG9uZyBjYWxsSWQsIGNvbnN0
IEluc3BlY3Rvck9iamVjdCYpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xF
cnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5n
IGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2Fn
ZW50LT5zdGVwT3ZlcigmZXJyb3IpOwoKCiAgICB9CiAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5z
ZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBwcm90b2NvbEVycm9ycy5yZWxl
YXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckJhY2tlbmREaXNwYXRjaGVy
OjpzdGVwSW50byhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JikKewogICAgUmVm
UHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVh
dGUoKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJy
b3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fYWdlbnQtPnN0ZXBJbnRvKCZlcnJvcik7CgoKICAg
IH0KICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5y
ZWxlYXNlKCksIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3Bl
Y3RvckRlYnVnZ2VyQmFja2VuZERpc3BhdGNoZXI6OnN0ZXBPdXQobG9uZyBjYWxsSWQsIGNvbnN0
IEluc3BlY3Rvck9iamVjdCYpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xF
cnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5n
IGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2Fn
ZW50LT5zdGVwT3V0KCZlcnJvcik7CgoKICAgIH0KICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNl
bmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIHByb3RvY29sRXJyb3JzLnJlbGVh
c2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckRlYnVnZ2VyQmFja2VuZERpc3BhdGNoZXI6
OnBhdXNlKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmKQp7CiAgICBSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgp
OwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMt
Pmxlbmd0aCgpKSB7CiAgICAgICAgbV9hZ2VudC0+cGF1c2UoJmVycm9yKTsKCgogICAgfQogICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2Uo
KSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yRGVi
dWdnZXJCYWNrZW5kRGlzcGF0Y2hlcjo6cmVzdW1lKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0
b3JPYmplY3QmKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0g
SW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJl
c3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsK
ICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9hZ2VudC0+cmVz
dW1lKCZlcnJvcik7CgoKICAgIH0KICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25z
ZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJy
b3IpOwp9Cgp2b2lkIEluc3BlY3RvckRlYnVnZ2VyQmFja2VuZERpc3BhdGNoZXI6OnNlYXJjaElu
Q29udGVudChsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKQp7CiAg
ICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6
OmNyZWF0ZSgpOwoKICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OlBh
Z2U6OlNlYXJjaE1hdGNoPiA+IG91dF9yZXN1bHQ7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcGFyYW1zQ29udGFpbmVyID0gbWVzc2FnZS5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5z
cGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7
CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5n
ZXQoKTsKICAgIFN0cmluZyBpbl9zY3JpcHRJZCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
OjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInNjcmlwdElkIiks
IG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIFN0cmluZyBpbl9xdWVyeSA9IEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJ
SUxpdGVyYWwoInF1ZXJ5IiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wg
Y2FzZVNlbnNpdGl2ZV92YWx1ZUZvdW5kID0gZmFsc2U7CiAgICBib29sIGluX2Nhc2VTZW5zaXRp
dmUgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0Qm9vbGVhbihwYXJhbXNDb250YWlu
ZXJQdHIsIEFTQ0lJTGl0ZXJhbCgiY2FzZVNlbnNpdGl2ZSIpLCAmY2FzZVNlbnNpdGl2ZV92YWx1
ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBib29sIGlzUmVnZXhfdmFsdWVGb3VuZCA9
IGZhbHNlOwogICAgYm9vbCBpbl9pc1JlZ2V4ID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OmdldEJvb2xlYW4ocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoImlzUmVnZXgiKSwg
JmlzUmVnZXhfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJv
clN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAg
ICAgbV9hZ2VudC0+c2VhcmNoSW5Db250ZW50KCZlcnJvciwgaW5fc2NyaXB0SWQsIGluX3F1ZXJ5
LCBjYXNlU2Vuc2l0aXZlX3ZhbHVlRm91bmQgPyAmaW5fY2FzZVNlbnNpdGl2ZSA6IDAsIGlzUmVn
ZXhfdmFsdWVGb3VuZCA/ICZpbl9pc1JlZ2V4IDogMCwgb3V0X3Jlc3VsdCk7CgogICAgICAgIGlm
ICghZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZShBU0NJSUxp
dGVyYWwoInJlc3VsdCIpLCBvdXRfcmVzdWx0KTsKICAgICAgICB9CiAgICB9CiAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBwcm90
b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckJh
Y2tlbmREaXNwYXRjaGVyOjpjYW5TZXRTY3JpcHRTb3VyY2UobG9uZyBjYWxsSWQsIGNvbnN0IElu
c3BlY3Rvck9iamVjdCYpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJv
cnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgYm9vbCBvdXRfcmVzdWx0OwoKICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0
aCgpKSB7CiAgICAgICAgbV9hZ2VudC0+Y2FuU2V0U2NyaXB0U291cmNlKCZlcnJvciwgJm91dF9y
ZXN1bHQpOwoKICAgICAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgICAgIHJlc3Vs
dC0+c2V0Qm9vbGVhbihBU0NJSUxpdGVyYWwoInJlc3VsdCIpLCBvdXRfcmVzdWx0KTsKICAgICAg
ICB9CiAgICB9CiAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCBy
ZXN1bHQucmVsZWFzZSgpLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9p
ZCBJbnNwZWN0b3JEZWJ1Z2dlckJhY2tlbmREaXNwYXRjaGVyOjpzZXRTY3JpcHRTb3VyY2UobG9u
ZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSkKewogICAgUmVmUHRyPElu
c3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsK
CiAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6Q2Fs
bEZyYW1lPiA+IG91dF9jYWxsRnJhbWVzOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb3V0
X3Jlc3VsdDsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSBt
ZXNzYWdlLmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0Nv
bnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBw
cm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgU3RyaW5nIGluX3Nj
cmlwdElkID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250
YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgic2NyaXB0SWQiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJv
cnNQdHIpOwogICAgU3RyaW5nIGluX3NjcmlwdFNvdXJjZSA9IEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInNjcmlw
dFNvdXJjZSIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBib29sIHByZXZpZXdf
dmFsdWVGb3VuZCA9IGZhbHNlOwogICAgYm9vbCBpbl9wcmV2aWV3ID0gSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI6OmdldEJvb2xlYW4ocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwo
InByZXZpZXciKSwgJnByZXZpZXdfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0
aCgpKSB7CiAgICAgICAgbV9hZ2VudC0+c2V0U2NyaXB0U291cmNlKCZlcnJvciwgaW5fc2NyaXB0
SWQsIGluX3NjcmlwdFNvdXJjZSwgcHJldmlld192YWx1ZUZvdW5kID8gJmluX3ByZXZpZXcgOiAw
LCBvdXRfY2FsbEZyYW1lcywgb3V0X3Jlc3VsdCk7CgogICAgICAgIGlmICghZXJyb3IubGVuZ3Ro
KCkpIHsKICAgICAgICAgICAgaWYgKG91dF9jYWxsRnJhbWVzKQogICAgICAgICAgICAgICAgcmVz
dWx0LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoImNhbGxGcmFtZXMiKSwgb3V0X2NhbGxGcmFtZXMp
OwogICAgICAgICAgICBpZiAob3V0X3Jlc3VsdCkKICAgICAgICAgICAgICAgIHJlc3VsdC0+c2V0
VmFsdWUoQVNDSUlMaXRlcmFsKCJyZXN1bHQiKSwgb3V0X3Jlc3VsdCk7CiAgICAgICAgfQogICAg
fQogICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJl
bGVhc2UoKSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVj
dG9yRGVidWdnZXJCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U2NyaXB0U291cmNlKGxvbmcgY2FsbElk
LCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgU3Ry
aW5nIG91dF9zY3JpcHRTb3VyY2U7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1z
Q29udGFpbmVyID0gbWVzc2FnZS5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2Jq
ZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNw
ZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAg
IFN0cmluZyBpbl9zY3JpcHRJZCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJp
bmcocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInNjcmlwdElkIiksIG51bGxwdHIs
IHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBp
ZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fYWdlbnQtPmdldFNjcmlw
dFNvdXJjZSgmZXJyb3IsIGluX3NjcmlwdElkLCAmb3V0X3NjcmlwdFNvdXJjZSk7CgogICAgICAg
IGlmICghZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoQVND
SUlMaXRlcmFsKCJzY3JpcHRTb3VyY2UiKSwgb3V0X3NjcmlwdFNvdXJjZSk7CiAgICAgICAgfQog
ICAgfQogICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0
LnJlbGVhc2UoKSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5z
cGVjdG9yRGVidWdnZXJCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0RnVuY3Rpb25EZXRhaWxzKGxvbmcg
Y2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpCnsKICAgIFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7Cgog
ICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPiBvdXRfZGV0
YWlsczsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSBtZXNz
YWdlLmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRh
aW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90
b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgU3RyaW5nIGluX2Z1bmN0
aW9uSWQgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRh
aW5lclB0ciwgQVNDSUlMaXRlcmFsKCJmdW5jdGlvbklkIiksIG51bGxwdHIsIHByb3RvY29sRXJy
b3JzUHRyKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29s
RXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fYWdlbnQtPmdldEZ1bmN0aW9uRGV0YWlscygm
ZXJyb3IsIGluX2Z1bmN0aW9uSWQsIG91dF9kZXRhaWxzKTsKCiAgICAgICAgaWYgKCFlcnJvci5s
ZW5ndGgoKSkgewogICAgICAgICAgICByZXN1bHQtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgiZGV0
YWlscyIpLCBvdXRfZGV0YWlscyk7CiAgICAgICAgfQogICAgfQogICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgcHJvdG9jb2xFcnJv
cnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yRGVidWdnZXJCYWNrZW5kRGlz
cGF0Y2hlcjo6c2V0UGF1c2VPbkV4Y2VwdGlvbnMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rv
ck9iamVjdCYgbWVzc2FnZSkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVy
cm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBwYXJhbXNDb250YWluZXIgPSBtZXNzYWdlLmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJ
bnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQo
KTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3Jz
LmdldCgpOwogICAgU3RyaW5nIGluX3N0YXRlID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OmdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgic3RhdGUiKSwgbnVs
bHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJl
c3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsK
ICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9hZ2VudC0+c2V0
UGF1c2VPbkV4Y2VwdGlvbnMoJmVycm9yLCBpbl9zdGF0ZSk7CgoKICAgIH0KICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIHByb3Rv
Y29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckRlYnVnZ2VyQmFj
a2VuZERpc3BhdGNoZXI6OmV2YWx1YXRlT25DYWxsRnJhbWUobG9uZyBjYWxsSWQsIGNvbnN0IElu
c3BlY3Rvck9iamVjdCYgbWVzc2FnZSkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90
b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBSZWZQdHI8VHlwZUJ1
aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gb3V0X3Jlc3VsdDsKICAgIFR5cGVCdWlsZGVy
OjpPcHRPdXRwdXQ8Ym9vbD4gb3V0X3dhc1Rocm93bjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBwYXJhbXNDb250YWluZXIgPSBtZXNzYWdlLmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJ
bnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQo
KTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3Jz
LmdldCgpOwogICAgU3RyaW5nIGluX2NhbGxGcmFtZUlkID0gSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgiY2FsbEZy
YW1lSWQiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgU3RyaW5nIGluX2V4cHJl
c3Npb24gPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRh
aW5lclB0ciwgQVNDSUlMaXRlcmFsKCJleHByZXNzaW9uIiksIG51bGxwdHIsIHByb3RvY29sRXJy
b3JzUHRyKTsKICAgIGJvb2wgb2JqZWN0R3JvdXBfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgU3Ry
aW5nIGluX29iamVjdEdyb3VwID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmlu
ZyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgib2JqZWN0R3JvdXAiKSwgJm9iamVj
dEdyb3VwX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgaW5jbHVkZUNv
bW1hbmRMaW5lQVBJX3ZhbHVlRm91bmQgPSBmYWxzZTsKICAgIGJvb2wgaW5faW5jbHVkZUNvbW1h
bmRMaW5lQVBJID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEJvb2xlYW4ocGFyYW1z
Q29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoImluY2x1ZGVDb21tYW5kTGluZUFQSSIpLCAmaW5j
bHVkZUNvbW1hbmRMaW5lQVBJX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJv
b2wgZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlX3ZhbHVlRm91bmQgPSBmYWxz
ZTsKICAgIGJvb2wgaW5fZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlID0gSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEJvb2xlYW4ocGFyYW1zQ29udGFpbmVyUHRyLCBB
U0NJSUxpdGVyYWwoImRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSIpLCAmZG9O
b3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlX3ZhbHVlRm91bmQsIHByb3RvY29sRXJy
b3JzUHRyKTsKICAgIGJvb2wgcmV0dXJuQnlWYWx1ZV92YWx1ZUZvdW5kID0gZmFsc2U7CiAgICBi
b29sIGluX3JldHVybkJ5VmFsdWUgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0Qm9v
bGVhbihwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgicmV0dXJuQnlWYWx1ZSIpLCAm
cmV0dXJuQnlWYWx1ZV92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBib29sIGdl
bmVyYXRlUHJldmlld192YWx1ZUZvdW5kID0gZmFsc2U7CiAgICBib29sIGluX2dlbmVyYXRlUHJl
dmlldyA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRCb29sZWFuKHBhcmFtc0NvbnRh
aW5lclB0ciwgQVNDSUlMaXRlcmFsKCJnZW5lcmF0ZVByZXZpZXciKSwgJmdlbmVyYXRlUHJldmll
d192YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5n
IGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2Fn
ZW50LT5ldmFsdWF0ZU9uQ2FsbEZyYW1lKCZlcnJvciwgaW5fY2FsbEZyYW1lSWQsIGluX2V4cHJl
c3Npb24sIG9iamVjdEdyb3VwX3ZhbHVlRm91bmQgPyAmaW5fb2JqZWN0R3JvdXAgOiAwLCBpbmNs
dWRlQ29tbWFuZExpbmVBUElfdmFsdWVGb3VuZCA/ICZpbl9pbmNsdWRlQ29tbWFuZExpbmVBUEkg
OiAwLCBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGVfdmFsdWVGb3VuZCA/ICZp
bl9kb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUgOiAwLCByZXR1cm5CeVZhbHVl
X3ZhbHVlRm91bmQgPyAmaW5fcmV0dXJuQnlWYWx1ZSA6IDAsIGdlbmVyYXRlUHJldmlld192YWx1
ZUZvdW5kID8gJmluX2dlbmVyYXRlUHJldmlldyA6IDAsIG91dF9yZXN1bHQsICZvdXRfd2FzVGhy
b3duKTsKCiAgICAgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkgewogICAgICAgICAgICByZXN1bHQt
PnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgicmVzdWx0IiksIG91dF9yZXN1bHQpOwogICAgICAgICAg
ICBpZiAob3V0X3dhc1Rocm93bi5pc0Fzc2lnbmVkKCkpCiAgICAgICAgICAgICAgICByZXN1bHQt
PnNldEJvb2xlYW4oQVNDSUlMaXRlcmFsKCJ3YXNUaHJvd24iKSwgb3V0X3dhc1Rocm93bi5nZXRW
YWx1ZSgpKTsKICAgICAgICB9CiAgICB9CiAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVz
cG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCks
IGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckJhY2tlbmREaXNwYXRjaGVyOjpjb21w
aWxlU2NyaXB0KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpCnsK
ICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJh
eTo6Y3JlYXRlKCk7CgogICAgVHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxUeXBlQnVpbGRlcjo6RGVi
dWdnZXI6OlNjcmlwdElkPiBvdXRfc2NyaXB0SWQ7CiAgICBUeXBlQnVpbGRlcjo6T3B0T3V0cHV0
PFN0cmluZz4gb3V0X3N5bnRheEVycm9yTWVzc2FnZTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBwYXJhbXNDb250YWluZXIgPSBtZXNzYWdlLmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJ
bnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQo
KTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3Jz
LmdldCgpOwogICAgU3RyaW5nIGluX2V4cHJlc3Npb24gPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJleHByZXNz
aW9uIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIFN0cmluZyBpbl9zb3VyY2VV
UkwgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5l
clB0ciwgQVNDSUlMaXRlcmFsKCJzb3VyY2VVUkwiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQ
dHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJv
cnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9hZ2VudC0+Y29tcGlsZVNjcmlwdCgmZXJyb3IsIGlu
X2V4cHJlc3Npb24sIGluX3NvdXJjZVVSTCwgJm91dF9zY3JpcHRJZCwgJm91dF9zeW50YXhFcnJv
ck1lc3NhZ2UpOwoKICAgICAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgICAgIGlm
IChvdXRfc2NyaXB0SWQuaXNBc3NpZ25lZCgpKQogICAgICAgICAgICAgICAgcmVzdWx0LT5zZXRT
dHJpbmcoQVNDSUlMaXRlcmFsKCJzY3JpcHRJZCIpLCBvdXRfc2NyaXB0SWQuZ2V0VmFsdWUoKSk7
CiAgICAgICAgICAgIGlmIChvdXRfc3ludGF4RXJyb3JNZXNzYWdlLmlzQXNzaWduZWQoKSkKICAg
ICAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgic3ludGF4RXJyb3JN
ZXNzYWdlIiksIG91dF9zeW50YXhFcnJvck1lc3NhZ2UuZ2V0VmFsdWUoKSk7CiAgICAgICAgfQog
ICAgfQogICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0
LnJlbGVhc2UoKSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5z
cGVjdG9yRGVidWdnZXJCYWNrZW5kRGlzcGF0Y2hlcjo6cnVuU2NyaXB0KGxvbmcgY2FsbElkLCBj
b25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJh
eT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgUmVmUHRy
PFR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+IG91dF9yZXN1bHQ7CiAgICBUeXBl
QnVpbGRlcjo6T3B0T3V0cHV0PGJvb2w+IG91dF93YXNUaHJvd247CgogICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gbWVzc2FnZS5nZXRPYmplY3QoInBhcmFtcyIp
OwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWlu
ZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2Nv
bEVycm9ycy5nZXQoKTsKICAgIFN0cmluZyBpbl9zY3JpcHRJZCA9IEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInNj
cmlwdElkIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgY29udGV4dElk
X3ZhbHVlRm91bmQgPSBmYWxzZTsKICAgIGludCBpbl9jb250ZXh0SWQgPSBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjo6Z2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJj
b250ZXh0SWQiKSwgJmNvbnRleHRJZF92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CiAg
ICBib29sIG9iamVjdEdyb3VwX3ZhbHVlRm91bmQgPSBmYWxzZTsKICAgIFN0cmluZyBpbl9vYmpl
Y3RHcm91cCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29u
dGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoIm9iamVjdEdyb3VwIiksICZvYmplY3RHcm91cF92YWx1
ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBib29sIGRvTm90UGF1c2VPbkV4Y2VwdGlv
bnNBbmRNdXRlQ29uc29sZV92YWx1ZUZvdW5kID0gZmFsc2U7CiAgICBib29sIGluX2RvTm90UGF1
c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
OjpnZXRCb29sZWFuKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJkb05vdFBhdXNl
T25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUiKSwgJmRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRN
dXRlQ29uc29sZV92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVy
cm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAg
ICAgICBtX2FnZW50LT5ydW5TY3JpcHQoJmVycm9yLCBpbl9zY3JpcHRJZCwgY29udGV4dElkX3Zh
bHVlRm91bmQgPyAmaW5fY29udGV4dElkIDogMCwgb2JqZWN0R3JvdXBfdmFsdWVGb3VuZCA/ICZp
bl9vYmplY3RHcm91cCA6IDAsIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZV92
YWx1ZUZvdW5kID8gJmluX2RvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSA6IDAs
IG91dF9yZXN1bHQsICZvdXRfd2FzVGhyb3duKTsKCiAgICAgICAgaWYgKCFlcnJvci5sZW5ndGgo
KSkgewogICAgICAgICAgICByZXN1bHQtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgicmVzdWx0Iiks
IG91dF9yZXN1bHQpOwogICAgICAgICAgICBpZiAob3V0X3dhc1Rocm93bi5pc0Fzc2lnbmVkKCkp
CiAgICAgICAgICAgICAgICByZXN1bHQtPnNldEJvb2xlYW4oQVNDSUlMaXRlcmFsKCJ3YXNUaHJv
d24iKSwgb3V0X3dhc1Rocm93bi5nZXRWYWx1ZSgpKTsKICAgICAgICB9CiAgICB9CiAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBw
cm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JEZWJ1Z2dl
ckJhY2tlbmREaXNwYXRjaGVyOjpzZXRPdmVybGF5TWVzc2FnZShsb25nIGNhbGxJZCwgY29uc3Qg
SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHBy
b3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2JqZWN0KCJwYXJhbXMi
KTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFp
bmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9j
b2xFcnJvcnMuZ2V0KCk7CiAgICBib29sIG1lc3NhZ2VfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAg
U3RyaW5nIGluX21lc3NhZ2UgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5n
KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJtZXNzYWdlIiksICZtZXNzYWdlX3Zh
bHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJy
b3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fYWdlbnQt
PnNldE92ZXJsYXlNZXNzYWdlKCZlcnJvciwgbWVzc2FnZV92YWx1ZUZvdW5kID8gJmluX21lc3Nh
Z2UgOiAwKTsKCgogICAgfQogICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNh
bGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7
Cn0KCiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKClBhc3NSZWZQdHI8SW5z
cGVjdG9yRmlsZVN5c3RlbUJhY2tlbmREaXNwYXRjaGVyPiBJbnNwZWN0b3JGaWxlU3lzdGVtQmFj
a2VuZERpc3BhdGNoZXI6OmNyZWF0ZShJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2Vu
ZERpc3BhdGNoZXIsIEluc3BlY3RvckZpbGVTeXN0ZW1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIq
IGFnZW50KQp7CiAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvckZpbGVTeXN0ZW1CYWNr
ZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKfQoKSW5zcGVjdG9yRmls
ZVN5c3RlbUJhY2tlbmREaXNwYXRjaGVyOjpJbnNwZWN0b3JGaWxlU3lzdGVtQmFja2VuZERpc3Bh
dGNoZXIoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyLCBJbnNw
ZWN0b3JGaWxlU3lzdGVtQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKICAgIDogSW5z
cGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCiAg
ICAsIG1fYWdlbnQoYWdlbnQpCnsKICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlz
cGF0Y2hlckZvckRvbWFpbihBU0NJSUxpdGVyYWwoIkZpbGVTeXN0ZW0iKSwgdGhpcyk7Cn0KCnZv
aWQgSW5zcGVjdG9yRmlsZVN5c3RlbUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIGNh
bGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBt
ZXNzYWdlKQp7CiAgICBSZWY8SW5zcGVjdG9yRmlsZVN5c3RlbUJhY2tlbmREaXNwYXRjaGVyPiBw
cm90ZWN0KCp0aGlzKTsKCiAgICB0eXBlZGVmIHZvaWQgKEluc3BlY3RvckZpbGVTeXN0ZW1CYWNr
ZW5kRGlzcGF0Y2hlcjo6KkNhbGxIYW5kbGVyKShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9y
T2JqZWN0JiBtZXNzYWdlKTsKICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVy
PiBEaXNwYXRjaE1hcDsKICAgIERFRklORV9TVEFUSUNfTE9DQUwoRGlzcGF0Y2hNYXAsIGRpc3Bh
dGNoTWFwLCAoKSk7CiAgICBpZiAoZGlzcGF0Y2hNYXAuaXNFbXB0eSgpKSB7CiAgICAgICAgc3Rh
dGljIGNvbnN0IHN0cnVjdCBNZXRob2RUYWJsZSB7CiAgICAgICAgICAgIGNvbnN0IGNoYXIqIG5h
bWU7CiAgICAgICAgICAgIENhbGxIYW5kbGVyIGhhbmRsZXI7CiAgICAgICAgfSBjb21tYW5kc1td
ID0gewogICAgICAgICAgICB7ICJlbmFibGUiLCAgJkluc3BlY3RvckZpbGVTeXN0ZW1CYWNrZW5k
RGlzcGF0Y2hlcjo6ZW5hYmxlIH0sCiAgICAgICAgICAgIHsgImRpc2FibGUiLCAgJkluc3BlY3Rv
ckZpbGVTeXN0ZW1CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzYWJsZSB9LAogICAgICAgICAgICB7ICJy
ZXF1ZXN0RmlsZVN5c3RlbVJvb3QiLCAgJkluc3BlY3RvckZpbGVTeXN0ZW1CYWNrZW5kRGlzcGF0
Y2hlcjo6cmVxdWVzdEZpbGVTeXN0ZW1Sb290IH0sCiAgICAgICAgICAgIHsgInJlcXVlc3REaXJl
Y3RvcnlDb250ZW50IiwgICZJbnNwZWN0b3JGaWxlU3lzdGVtQmFja2VuZERpc3BhdGNoZXI6OnJl
cXVlc3REaXJlY3RvcnlDb250ZW50IH0sCiAgICAgICAgICAgIHsgInJlcXVlc3RNZXRhZGF0YSIs
ICAmSW5zcGVjdG9yRmlsZVN5c3RlbUJhY2tlbmREaXNwYXRjaGVyOjpyZXF1ZXN0TWV0YWRhdGEg
fSwKICAgICAgICAgICAgeyAicmVxdWVzdEZpbGVDb250ZW50IiwgICZJbnNwZWN0b3JGaWxlU3lz
dGVtQmFja2VuZERpc3BhdGNoZXI6OnJlcXVlc3RGaWxlQ29udGVudCB9LAogICAgICAgICAgICB7
ICJkZWxldGVFbnRyeSIsICAmSW5zcGVjdG9yRmlsZVN5c3RlbUJhY2tlbmREaXNwYXRjaGVyOjpk
ZWxldGVFbnRyeSB9LAogICAgICAgIH07CiAgICAgICAgc2l6ZV90IGxlbmd0aCA9IFdURl9BUlJB
WV9MRU5HVEgoY29tbWFuZHMpOwogICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3Ro
OyArK2kpCiAgICAgICAgICAgIGRpc3BhdGNoTWFwLmFkZChjb21tYW5kc1tpXS5uYW1lLCBjb21t
YW5kc1tpXS5oYW5kbGVyKTsKICAgIH0KCiAgICBIYXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+
OjppdGVyYXRvciBpdCA9IGRpc3BhdGNoTWFwLmZpbmQobWV0aG9kKTsKICAgIGlmIChpdCA9PSBk
aXNwYXRjaE1hcC5lbmQoKSkgewogICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFBy
b3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5v
dEZvdW5kLCBTdHJpbmcoIiciKSArICJGaWxlU3lzdGVtIiArICcuJyArIG1ldGhvZCArICInIHdh
cyBub3QgZm91bmQiKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgKCgqdGhpcykuKml0LT52
YWx1ZSkoY2FsbElkLCAqbWVzc2FnZS5nZXQoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yRmlsZVN5c3Rl
bUJhY2tlbmREaXNwYXRjaGVyOjplbmFibGUobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9i
amVjdCYpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNw
ZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAg
aWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2FnZW50LT5lbmFibGUo
JmVycm9yKTsKCgogICAgfQogICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNh
bGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7
Cn0KCnZvaWQgSW5zcGVjdG9yRmlsZVN5c3RlbUJhY2tlbmREaXNwYXRjaGVyOjpkaXNhYmxlKGxv
bmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgp
KSB7CiAgICAgICAgbV9hZ2VudC0+ZGlzYWJsZSgmZXJyb3IpOwoKCiAgICB9CiAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBwcm90
b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKSW5zcGVjdG9yRmlsZVN5c3RlbUJhY2tl
bmREaXNwYXRjaGVySGFuZGxlcjo6UmVxdWVzdEZpbGVTeXN0ZW1Sb290Q2FsbGJhY2s6OlJlcXVl
c3RGaWxlU3lzdGVtUm9vdENhbGxiYWNrKFBhc3NSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI+IGJhY2tlbmREaXNwYXRjaGVyLCBpbnQgaWQpIDogSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI6OkNhbGxiYWNrQmFzZShiYWNrZW5kRGlzcGF0Y2hlciwgaWQpIHsgfQoKdm9pZCBJbnNw
ZWN0b3JGaWxlU3lzdGVtQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpSZXF1ZXN0RmlsZVN5c3Rl
bVJvb3RDYWxsYmFjazo6c2VuZFN1Y2Nlc3MoaW50IGVycm9yQ29kZSwgUGFzc1JlZlB0cjxUeXBl
QnVpbGRlcjo6RmlsZVN5c3RlbTo6RW50cnk+IHJvb3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGpzb25N
ZXNzYWdlLT5zZXROdW1iZXIoQVNDSUlMaXRlcmFsKCJlcnJvckNvZGUiKSwgZXJyb3JDb2RlKTsK
ICAgIGlmIChyb290KQogICAgICAgIGpzb25NZXNzYWdlLT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwo
InJvb3QiKSwgcm9vdCk7CiAgICBzZW5kSWZBY3RpdmUoanNvbk1lc3NhZ2UsIEVycm9yU3RyaW5n
KCkpOwp9Cgp2b2lkIEluc3BlY3RvckZpbGVTeXN0ZW1CYWNrZW5kRGlzcGF0Y2hlcjo6cmVxdWVz
dEZpbGVTeXN0ZW1Sb290KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3Nh
Z2UpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0
b3JBcnJheTo6Y3JlYXRlKCk7CiAgICBSZWZQdHI8SW5zcGVjdG9yRmlsZVN5c3RlbUJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlcjo6UmVxdWVzdEZpbGVTeXN0ZW1Sb290Q2FsbGJhY2s+IGNhbGxiYWNr
ID0gYWRvcHRSZWYobmV3IEluc3BlY3RvckZpbGVTeXN0ZW1CYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXI6OlJlcXVlc3RGaWxlU3lzdGVtUm9vdENhbGxiYWNrKG1fYmFja2VuZERpc3BhdGNoZXIsIGNh
bGxJZCkpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IG1l
c3NhZ2UuZ2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29u
dGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHBy
b3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBTdHJpbmcgaW5fb3Jp
Z2luID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWlu
ZXJQdHIsIEFTQ0lJTGl0ZXJhbCgib3JpZ2luIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRy
KTsKICAgIFN0cmluZyBpbl90eXBlID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0
cmluZyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgidHlwZSIpLCBudWxscHRyLCBw
cm90b2NvbEVycm9yc1B0cik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYg
KCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2FnZW50LT5yZXF1ZXN0Rmls
ZVN5c3RlbVJvb3QoJmVycm9yLCBpbl9vcmlnaW4sIGluX3R5cGUsIGNhbGxiYWNrKTsKCiAgICAg
ICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIGNhbGxi
YWNrLT5kaXNhYmxlKCk7CgogICAgfQogICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3Bv
bnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBl
cnJvcik7Cn0KCkluc3BlY3RvckZpbGVTeXN0ZW1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlJl
cXVlc3REaXJlY3RvcnlDb250ZW50Q2FsbGJhY2s6OlJlcXVlc3REaXJlY3RvcnlDb250ZW50Q2Fs
bGJhY2soUGFzc1JlZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gYmFja2VuZERpc3Bh
dGNoZXIsIGludCBpZCkgOiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNl
KGJhY2tlbmREaXNwYXRjaGVyLCBpZCkgeyB9Cgp2b2lkIEluc3BlY3RvckZpbGVTeXN0ZW1CYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlJlcXVlc3REaXJlY3RvcnlDb250ZW50Q2FsbGJhY2s6OnNl
bmRTdWNjZXNzKGludCBlcnJvckNvZGUsIFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5
cGVCdWlsZGVyOjpGaWxlU3lzdGVtOjpFbnRyeT4gPiBlbnRyaWVzKQp7CiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAg
ICBqc29uTWVzc2FnZS0+c2V0TnVtYmVyKEFTQ0lJTGl0ZXJhbCgiZXJyb3JDb2RlIiksIGVycm9y
Q29kZSk7CiAgICBpZiAoZW50cmllcykKICAgICAgICBqc29uTWVzc2FnZS0+c2V0VmFsdWUoQVND
SUlMaXRlcmFsKCJlbnRyaWVzIiksIGVudHJpZXMpOwogICAgc2VuZElmQWN0aXZlKGpzb25NZXNz
YWdlLCBFcnJvclN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGaWxlU3lzdGVtQmFja2VuZERp
c3BhdGNoZXI6OnJlcXVlc3REaXJlY3RvcnlDb250ZW50KGxvbmcgY2FsbElkLCBjb25zdCBJbnNw
ZWN0b3JPYmplY3QmIG1lc3NhZ2UpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9j
b2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CiAgICBSZWZQdHI8SW5zcGVjdG9y
RmlsZVN5c3RlbUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UmVxdWVzdERpcmVjdG9yeUNvbnRl
bnRDYWxsYmFjaz4gY2FsbGJhY2sgPSBhZG9wdFJlZihuZXcgSW5zcGVjdG9yRmlsZVN5c3RlbUJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UmVxdWVzdERpcmVjdG9yeUNvbnRlbnRDYWxsYmFjayht
X2JhY2tlbmREaXNwYXRjaGVyLCBjYWxsSWQpKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBwYXJhbXNDb250YWluZXIgPSBtZXNzYWdlLmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNw
ZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsK
ICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdl
dCgpOwogICAgU3RyaW5nIGluX3VybCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRT
dHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInVybCIpLCBudWxscHRyLCBw
cm90b2NvbEVycm9yc1B0cik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYg
KCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2FnZW50LT5yZXF1ZXN0RGly
ZWN0b3J5Q29udGVudCgmZXJyb3IsIGluX3VybCwgY2FsbGJhY2spOwoKICAgICAgICBpZiAoIWVy
cm9yLmxlbmd0aCgpKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgY2FsbGJhY2stPmRpc2Fi
bGUoKTsKCiAgICB9CiAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElk
LCByZXN1bHQucmVsZWFzZSgpLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoK
SW5zcGVjdG9yRmlsZVN5c3RlbUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UmVxdWVzdE1ldGFk
YXRhQ2FsbGJhY2s6OlJlcXVlc3RNZXRhZGF0YUNhbGxiYWNrKFBhc3NSZWZQdHI8SW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI+IGJhY2tlbmREaXNwYXRjaGVyLCBpbnQgaWQpIDogSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZShiYWNrZW5kRGlzcGF0Y2hlciwgaWQpIHsg
fQoKdm9pZCBJbnNwZWN0b3JGaWxlU3lzdGVtQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpSZXF1
ZXN0TWV0YWRhdGFDYWxsYmFjazo6c2VuZFN1Y2Nlc3MoaW50IGVycm9yQ29kZSwgUGFzc1JlZlB0
cjxUeXBlQnVpbGRlcjo6RmlsZVN5c3RlbTo6TWV0YWRhdGE+IG1ldGFkYXRhKQp7CiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CiAgICBqc29uTWVzc2FnZS0+c2V0TnVtYmVyKEFTQ0lJTGl0ZXJhbCgiZXJyb3JDb2RlIiks
IGVycm9yQ29kZSk7CiAgICBpZiAobWV0YWRhdGEpCiAgICAgICAganNvbk1lc3NhZ2UtPnNldFZh
bHVlKEFTQ0lJTGl0ZXJhbCgibWV0YWRhdGEiKSwgbWV0YWRhdGEpOwogICAgc2VuZElmQWN0aXZl
KGpzb25NZXNzYWdlLCBFcnJvclN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGaWxlU3lzdGVt
QmFja2VuZERpc3BhdGNoZXI6OnJlcXVlc3RNZXRhZGF0YShsb25nIGNhbGxJZCwgY29uc3QgSW5z
cGVjdG9yT2JqZWN0JiBtZXNzYWdlKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3Rv
Y29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwogICAgUmVmUHRyPEluc3BlY3Rv
ckZpbGVTeXN0ZW1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlJlcXVlc3RNZXRhZGF0YUNhbGxi
YWNrPiBjYWxsYmFjayA9IGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JGaWxlU3lzdGVtQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyOjpSZXF1ZXN0TWV0YWRhdGFDYWxsYmFjayhtX2JhY2tlbmREaXNwYXRj
aGVyLCBjYWxsSWQpKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWlu
ZXIgPSBtZXNzYWdlLmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBh
cmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFy
cmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgU3RyaW5n
IGluX3VybCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29u
dGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInVybCIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0
cik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9y
cy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2FnZW50LT5yZXF1ZXN0TWV0YWRhdGEoJmVycm9yLCBp
bl91cmwsIGNhbGxiYWNrKTsKCiAgICAgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgIGNhbGxiYWNrLT5kaXNhYmxlKCk7CgogICAgfQogICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgcHJv
dG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCkluc3BlY3RvckZpbGVTeXN0ZW1CYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlJlcXVlc3RGaWxlQ29udGVudENhbGxiYWNrOjpSZXF1ZXN0
RmlsZUNvbnRlbnRDYWxsYmFjayhQYXNzUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
PiBiYWNrZW5kRGlzcGF0Y2hlciwgaW50IGlkKSA6IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
OjpDYWxsYmFja0Jhc2UoYmFja2VuZERpc3BhdGNoZXIsIGlkKSB7IH0KCnZvaWQgSW5zcGVjdG9y
RmlsZVN5c3RlbUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UmVxdWVzdEZpbGVDb250ZW50Q2Fs
bGJhY2s6OnNlbmRTdWNjZXNzKGludCBlcnJvckNvZGUsIGNvbnN0IFN0cmluZyogY29uc3QgY29u
dGVudCwgY29uc3QgU3RyaW5nKiBjb25zdCBjaGFyc2V0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBqc29u
TWVzc2FnZS0+c2V0TnVtYmVyKEFTQ0lJTGl0ZXJhbCgiZXJyb3JDb2RlIiksIGVycm9yQ29kZSk7
CiAgICBpZiAoY29udGVudCkKICAgICAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKEFTQ0lJTGl0
ZXJhbCgiY29udGVudCIpLCAqY29udGVudCk7CiAgICBpZiAoY2hhcnNldCkKICAgICAgICBqc29u
TWVzc2FnZS0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgiY2hhcnNldCIpLCAqY2hhcnNldCk7CiAg
ICBzZW5kSWZBY3RpdmUoanNvbk1lc3NhZ2UsIEVycm9yU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3Bl
Y3RvckZpbGVTeXN0ZW1CYWNrZW5kRGlzcGF0Y2hlcjo6cmVxdWVzdEZpbGVDb250ZW50KGxvbmcg
Y2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpCnsKICAgIFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CiAg
ICBSZWZQdHI8SW5zcGVjdG9yRmlsZVN5c3RlbUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UmVx
dWVzdEZpbGVDb250ZW50Q2FsbGJhY2s+IGNhbGxiYWNrID0gYWRvcHRSZWYobmV3IEluc3BlY3Rv
ckZpbGVTeXN0ZW1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlJlcXVlc3RGaWxlQ29udGVudENh
bGxiYWNrKG1fYmFja2VuZERpc3BhdGNoZXIsIGNhbGxJZCkpOwoKICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2JqZWN0KCJwYXJhbXMiKTsK
ICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVy
LmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xF
cnJvcnMuZ2V0KCk7CiAgICBTdHJpbmcgaW5fdXJsID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgidXJsIiksIG51
bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgaW5fcmVhZEFzVGV4dCA9IEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRCb29sZWFuKHBhcmFtc0NvbnRhaW5lclB0ciwgQVND
SUlMaXRlcmFsKCJyZWFkQXNUZXh0IiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKICAg
IGJvb2wgc3RhcnRfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgaW50IGluX3N0YXJ0ID0gSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEludChwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0
ZXJhbCgic3RhcnQiKSwgJnN0YXJ0X3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKICAg
IGJvb2wgZW5kX3ZhbHVlRm91bmQgPSBmYWxzZTsKICAgIGludCBpbl9lbmQgPSBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6Z2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFs
KCJlbmQiKSwgJmVuZF92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBib29sIGNo
YXJzZXRfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgU3RyaW5nIGluX2NoYXJzZXQgPSBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlM
aXRlcmFsKCJjaGFyc2V0IiksICZjaGFyc2V0X3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRy
KTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3Jz
LT5sZW5ndGgoKSkgewogICAgICAgIG1fYWdlbnQtPnJlcXVlc3RGaWxlQ29udGVudCgmZXJyb3Is
IGluX3VybCwgaW5fcmVhZEFzVGV4dCwgc3RhcnRfdmFsdWVGb3VuZCA/ICZpbl9zdGFydCA6IDAs
IGVuZF92YWx1ZUZvdW5kID8gJmluX2VuZCA6IDAsIGNoYXJzZXRfdmFsdWVGb3VuZCA/ICZpbl9j
aGFyc2V0IDogMCwgY2FsbGJhY2spOwoKICAgICAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQogICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgY2FsbGJhY2stPmRpc2FibGUoKTsKCiAgICB9CiAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgp
LCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKSW5zcGVjdG9yRmlsZVN5c3Rl
bUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RGVsZXRlRW50cnlDYWxsYmFjazo6RGVsZXRlRW50
cnlDYWxsYmFjayhQYXNzUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBiYWNrZW5k
RGlzcGF0Y2hlciwgaW50IGlkKSA6IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFj
a0Jhc2UoYmFja2VuZERpc3BhdGNoZXIsIGlkKSB7IH0KCnZvaWQgSW5zcGVjdG9yRmlsZVN5c3Rl
bUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RGVsZXRlRW50cnlDYWxsYmFjazo6c2VuZFN1Y2Nl
c3MoaW50IGVycm9yQ29kZSkKewogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3Nh
Z2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAganNvbk1lc3NhZ2UtPnNldE51bWJl
cihBU0NJSUxpdGVyYWwoImVycm9yQ29kZSIpLCBlcnJvckNvZGUpOwogICAgc2VuZElmQWN0aXZl
KGpzb25NZXNzYWdlLCBFcnJvclN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JGaWxlU3lzdGVt
QmFja2VuZERpc3BhdGNoZXI6OmRlbGV0ZUVudHJ5KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0
b3JPYmplY3QmIG1lc3NhZ2UpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xF
cnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CiAgICBSZWZQdHI8SW5zcGVjdG9yRmls
ZVN5c3RlbUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RGVsZXRlRW50cnlDYWxsYmFjaz4gY2Fs
bGJhY2sgPSBhZG9wdFJlZihuZXcgSW5zcGVjdG9yRmlsZVN5c3RlbUJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcjo6RGVsZXRlRW50cnlDYWxsYmFjayhtX2JhY2tlbmREaXNwYXRjaGVyLCBjYWxsSWQp
KTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSBtZXNzYWdl
LmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5l
clB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2Nv
bEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgU3RyaW5nIGluX3VybCA9IElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCBB
U0NJSUxpdGVyYWwoInVybCIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
ICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkp
IHsKICAgICAgICBtX2FnZW50LT5kZWxldGVFbnRyeSgmZXJyb3IsIGluX3VybCwgY2FsbGJhY2sp
OwoKICAgICAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQogICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgY2FsbGJhY2stPmRpc2FibGUoKTsKCiAgICB9CiAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5z
ZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBwcm90b2NvbEVycm9ycy5yZWxl
YXNlKCksIGVycm9yKTsKfQoKUGFzc1JlZlB0cjxJbnNwZWN0b3JIZWFwUHJvZmlsZXJCYWNrZW5k
RGlzcGF0Y2hlcj4gSW5zcGVjdG9ySGVhcFByb2ZpbGVyQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0
ZShJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIsIEluc3BlY3Rv
ckhlYXBQcm9maWxlckJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCnsKICAgIHJldHVy
biBhZG9wdFJlZihuZXcgSW5zcGVjdG9ySGVhcFByb2ZpbGVyQmFja2VuZERpc3BhdGNoZXIoYmFj
a2VuZERpc3BhdGNoZXIsIGFnZW50KSk7Cn0KCkluc3BlY3RvckhlYXBQcm9maWxlckJhY2tlbmRE
aXNwYXRjaGVyOjpJbnNwZWN0b3JIZWFwUHJvZmlsZXJCYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIsIEluc3BlY3RvckhlYXBQcm9m
aWxlckJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCiAgICA6IEluc3BlY3RvclN1cHBs
ZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQogICAgLCBtX2FnZW50
KGFnZW50KQp7CiAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JE
b21haW4oQVNDSUlMaXRlcmFsKCJIZWFwUHJvZmlsZXIiKSwgdGhpcyk7Cn0KCnZvaWQgSW5zcGVj
dG9ySGVhcFByb2ZpbGVyQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgY2FsbElkLCBj
b25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2Up
CnsKICAgIFJlZjxJbnNwZWN0b3JIZWFwUHJvZmlsZXJCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVj
dCgqdGhpcyk7CgogICAgdHlwZWRlZiB2b2lkIChJbnNwZWN0b3JIZWFwUHJvZmlsZXJCYWNrZW5k
RGlzcGF0Y2hlcjo6KkNhbGxIYW5kbGVyKShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2Jq
ZWN0JiBtZXNzYWdlKTsKICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPiBE
aXNwYXRjaE1hcDsKICAgIERFRklORV9TVEFUSUNfTE9DQUwoRGlzcGF0Y2hNYXAsIGRpc3BhdGNo
TWFwLCAoKSk7CiAgICBpZiAoZGlzcGF0Y2hNYXAuaXNFbXB0eSgpKSB7CiAgICAgICAgc3RhdGlj
IGNvbnN0IHN0cnVjdCBNZXRob2RUYWJsZSB7CiAgICAgICAgICAgIGNvbnN0IGNoYXIqIG5hbWU7
CiAgICAgICAgICAgIENhbGxIYW5kbGVyIGhhbmRsZXI7CiAgICAgICAgfSBjb21tYW5kc1tdID0g
ewogICAgICAgICAgICB7ICJoYXNIZWFwUHJvZmlsZXIiLCAgJkluc3BlY3RvckhlYXBQcm9maWxl
ckJhY2tlbmREaXNwYXRjaGVyOjpoYXNIZWFwUHJvZmlsZXIgfSwKICAgICAgICAgICAgeyAiZ2V0
UHJvZmlsZUhlYWRlcnMiLCAgJkluc3BlY3RvckhlYXBQcm9maWxlckJhY2tlbmREaXNwYXRjaGVy
OjpnZXRQcm9maWxlSGVhZGVycyB9LAogICAgICAgICAgICB7ICJnZXRIZWFwU25hcHNob3QiLCAg
Jkluc3BlY3RvckhlYXBQcm9maWxlckJhY2tlbmREaXNwYXRjaGVyOjpnZXRIZWFwU25hcHNob3Qg
fSwKICAgICAgICAgICAgeyAicmVtb3ZlUHJvZmlsZSIsICAmSW5zcGVjdG9ySGVhcFByb2ZpbGVy
QmFja2VuZERpc3BhdGNoZXI6OnJlbW92ZVByb2ZpbGUgfSwKICAgICAgICAgICAgeyAiY2xlYXJQ
cm9maWxlcyIsICAmSW5zcGVjdG9ySGVhcFByb2ZpbGVyQmFja2VuZERpc3BhdGNoZXI6OmNsZWFy
UHJvZmlsZXMgfSwKICAgICAgICAgICAgeyAidGFrZUhlYXBTbmFwc2hvdCIsICAmSW5zcGVjdG9y
SGVhcFByb2ZpbGVyQmFja2VuZERpc3BhdGNoZXI6OnRha2VIZWFwU25hcHNob3QgfSwKICAgICAg
ICAgICAgeyAiY29sbGVjdEdhcmJhZ2UiLCAgJkluc3BlY3RvckhlYXBQcm9maWxlckJhY2tlbmRE
aXNwYXRjaGVyOjpjb2xsZWN0R2FyYmFnZSB9LAogICAgICAgICAgICB7ICJnZXRPYmplY3RCeUhl
YXBPYmplY3RJZCIsICAmSW5zcGVjdG9ySGVhcFByb2ZpbGVyQmFja2VuZERpc3BhdGNoZXI6Omdl
dE9iamVjdEJ5SGVhcE9iamVjdElkIH0sCiAgICAgICAgICAgIHsgImdldEhlYXBPYmplY3RJZCIs
ICAmSW5zcGVjdG9ySGVhcFByb2ZpbGVyQmFja2VuZERpc3BhdGNoZXI6OmdldEhlYXBPYmplY3RJ
ZCB9LAogICAgICAgIH07CiAgICAgICAgc2l6ZV90IGxlbmd0aCA9IFdURl9BUlJBWV9MRU5HVEgo
Y29tbWFuZHMpOwogICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCiAg
ICAgICAgICAgIGRpc3BhdGNoTWFwLmFkZChjb21tYW5kc1tpXS5uYW1lLCBjb21tYW5kc1tpXS5o
YW5kbGVyKTsKICAgIH0KCiAgICBIYXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+OjppdGVyYXRv
ciBpdCA9IGRpc3BhdGNoTWFwLmZpbmQobWV0aG9kKTsKICAgIGlmIChpdCA9PSBkaXNwYXRjaE1h
cC5lbmQoKSkgewogICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJy
b3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCBT
dHJpbmcoIiciKSArICJIZWFwUHJvZmlsZXIiICsgJy4nICsgbWV0aG9kICsgIicgd2FzIG5vdCBm
b3VuZCIpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAoKCp0aGlzKS4qaXQtPnZhbHVlKShj
YWxsSWQsICptZXNzYWdlLmdldCgpKTsKfQoKdm9pZCBJbnNwZWN0b3JIZWFwUHJvZmlsZXJCYWNr
ZW5kRGlzcGF0Y2hlcjo6aGFzSGVhcFByb2ZpbGVyKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0
b3JPYmplY3QmKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0g
SW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGJvb2wgb3V0X3Jlc3VsdDsKCiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkg
ewogICAgICAgIG1fYWdlbnQtPmhhc0hlYXBQcm9maWxlcigmZXJyb3IsICZvdXRfcmVzdWx0KTsK
CiAgICAgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkgewogICAgICAgICAgICByZXN1bHQtPnNldEJv
b2xlYW4oQVNDSUlMaXRlcmFsKCJyZXN1bHQiKSwgb3V0X3Jlc3VsdCk7CiAgICAgICAgfQogICAg
fQogICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJl
bGVhc2UoKSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVj
dG9ySGVhcFByb2ZpbGVyQmFja2VuZERpc3BhdGNoZXI6OmdldFByb2ZpbGVIZWFkZXJzKGxvbmcg
Y2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIFJlZlB0
cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkhlYXBQcm9maWxlcjo6UHJvZmlsZUhl
YWRlcj4gPiBvdXRfaGVhZGVyczsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBp
ZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fYWdlbnQtPmdldFByb2Zp
bGVIZWFkZXJzKCZlcnJvciwgb3V0X2hlYWRlcnMpOwoKICAgICAgICBpZiAoIWVycm9yLmxlbmd0
aCgpKSB7CiAgICAgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJoZWFkZXJz
IiksIG91dF9oZWFkZXJzKTsKICAgICAgICB9CiAgICB9CiAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBwcm90b2NvbEVycm9ycy5y
ZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JIZWFwUHJvZmlsZXJCYWNrZW5kRGlz
cGF0Y2hlcjo6Z2V0SGVhcFNuYXBzaG90KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmpl
Y3QmIG1lc3NhZ2UpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMg
PSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cGFyYW1zQ29udGFpbmVyID0gbWVzc2FnZS5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVj
dG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAg
ICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQo
KTsKICAgIGludCBpbl91aWQgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0SW50KHBh
cmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJ1aWQiKSwgbnVsbHB0ciwgcHJvdG9jb2xF
cnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9j
b2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9hZ2VudC0+Z2V0SGVhcFNuYXBzaG90KCZl
cnJvciwgaW5fdWlkKTsKCgogICAgfQogICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3Bv
bnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBl
cnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9ySGVhcFByb2ZpbGVyQmFja2VuZERpc3BhdGNoZXI6OnJl
bW92ZVByb2ZpbGUobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSkK
ewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFy
cmF5OjpjcmVhdGUoKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWlu
ZXIgPSBtZXNzYWdlLmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBh
cmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFy
cmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgaW50IGlu
X3VpZCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRJbnQocGFyYW1zQ29udGFpbmVy
UHRyLCBBU0NJSUxpdGVyYWwoInVpZCIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7Cgog
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVu
Z3RoKCkpIHsKICAgICAgICBtX2FnZW50LT5yZW1vdmVQcm9maWxlKCZlcnJvciwgaW5fdWlkKTsK
CgogICAgfQogICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVz
dWx0LnJlbGVhc2UoKSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQg
SW5zcGVjdG9ySGVhcFByb2ZpbGVyQmFja2VuZERpc3BhdGNoZXI6OmNsZWFyUHJvZmlsZXMobG9u
ZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
ICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkp
IHsKICAgICAgICBtX2FnZW50LT5jbGVhclByb2ZpbGVzKCZlcnJvcik7CgoKICAgIH0KICAgIG1f
YmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCks
IHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckhlYXBQ
cm9maWxlckJhY2tlbmREaXNwYXRjaGVyOjp0YWtlSGVhcFNuYXBzaG90KGxvbmcgY2FsbElkLCBj
b25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJh
eT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gbWVzc2FnZS5nZXRPYmplY3QoInBh
cmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXND
b250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBw
cm90b2NvbEVycm9ycy5nZXQoKTsKICAgIGJvb2wgcmVwb3J0UHJvZ3Jlc3NfdmFsdWVGb3VuZCA9
IGZhbHNlOwogICAgYm9vbCBpbl9yZXBvcnRQcm9ncmVzcyA9IEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpnZXRCb29sZWFuKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJyZXBv
cnRQcm9ncmVzcyIpLCAmcmVwb3J0UHJvZ3Jlc3NfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQ
dHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJv
cnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9hZ2VudC0+dGFrZUhlYXBTbmFwc2hvdCgmZXJyb3Is
IHJlcG9ydFByb2dyZXNzX3ZhbHVlRm91bmQgPyAmaW5fcmVwb3J0UHJvZ3Jlc3MgOiAwKTsKCgog
ICAgfQogICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0
LnJlbGVhc2UoKSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5z
cGVjdG9ySGVhcFByb2ZpbGVyQmFja2VuZERpc3BhdGNoZXI6OmNvbGxlY3RHYXJiYWdlKGxvbmcg
Y2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAg
ICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7
CiAgICAgICAgbV9hZ2VudC0+Y29sbGVjdEdhcmJhZ2UoJmVycm9yKTsKCgogICAgfQogICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwg
cHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9ySGVhcFBy
b2ZpbGVyQmFja2VuZERpc3BhdGNoZXI6OmdldE9iamVjdEJ5SGVhcE9iamVjdElkKGxvbmcgY2Fs
bElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpCnsKICAgIFJlZlB0cjxJbnNwZWN0
b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAg
UmVmUHRyPFR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+IG91dF9yZXN1bHQ7Cgog
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gbWVzc2FnZS5nZXRP
YmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIg
PSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJv
cnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIFN0cmluZyBpbl9vYmplY3RJZCA9IElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCBB
U0NJSUxpdGVyYWwoIm9iamVjdElkIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKICAg
IGJvb2wgb2JqZWN0R3JvdXBfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgU3RyaW5nIGluX29iamVj
dEdyb3VwID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250
YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgib2JqZWN0R3JvdXAiKSwgJm9iamVjdEdyb3VwX3ZhbHVl
Rm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBy
ZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7
CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fYWdlbnQtPmdl
dE9iamVjdEJ5SGVhcE9iamVjdElkKCZlcnJvciwgaW5fb2JqZWN0SWQsIG9iamVjdEdyb3VwX3Zh
bHVlRm91bmQgPyAmaW5fb2JqZWN0R3JvdXAgOiAwLCBvdXRfcmVzdWx0KTsKCiAgICAgICAgaWYg
KCFlcnJvci5sZW5ndGgoKSkgewogICAgICAgICAgICByZXN1bHQtPnNldFZhbHVlKEFTQ0lJTGl0
ZXJhbCgicmVzdWx0IiksIG91dF9yZXN1bHQpOwogICAgICAgIH0KICAgIH0KICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIHByb3Rv
Y29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckhlYXBQcm9maWxl
ckJhY2tlbmREaXNwYXRjaGVyOjpnZXRIZWFwT2JqZWN0SWQobG9uZyBjYWxsSWQsIGNvbnN0IElu
c3BlY3Rvck9iamVjdCYgbWVzc2FnZSkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90
b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBUeXBlQnVpbGRlcjo6
SGVhcFByb2ZpbGVyOjpIZWFwU25hcHNob3RPYmplY3RJZCBvdXRfaGVhcFNuYXBzaG90T2JqZWN0
SWQ7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gbWVzc2Fn
ZS5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWlu
ZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9j
b2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIFN0cmluZyBpbl9vYmplY3RJ
ZCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVy
UHRyLCBBU0NJSUxpdGVyYWwoIm9iamVjdElkIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRy
KTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3Jz
LT5sZW5ndGgoKSkgewogICAgICAgIG1fYWdlbnQtPmdldEhlYXBPYmplY3RJZCgmZXJyb3IsIGlu
X29iamVjdElkLCAmb3V0X2hlYXBTbmFwc2hvdE9iamVjdElkKTsKCiAgICAgICAgaWYgKCFlcnJv
ci5sZW5ndGgoKSkgewogICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwo
ImhlYXBTbmFwc2hvdE9iamVjdElkIiksIG91dF9oZWFwU25hcHNob3RPYmplY3RJZCk7CiAgICAg
ICAgfQogICAgfQogICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwg
cmVzdWx0LnJlbGVhc2UoKSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCiNp
ZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKClBhc3NSZWZQdHI8SW5zcGVjdG9ySW5kZXhlZERC
QmFja2VuZERpc3BhdGNoZXI+IEluc3BlY3RvckluZGV4ZWREQkJhY2tlbmREaXNwYXRjaGVyOjpj
cmVhdGUoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyLCBJbnNw
ZWN0b3JJbmRleGVkREJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQp7CiAgICByZXR1
cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvckluZGV4ZWREQkJhY2tlbmREaXNwYXRjaGVyKGJhY2tl
bmREaXNwYXRjaGVyLCBhZ2VudCkpOwp9CgpJbnNwZWN0b3JJbmRleGVkREJCYWNrZW5kRGlzcGF0
Y2hlcjo6SW5zcGVjdG9ySW5kZXhlZERCQmFja2VuZERpc3BhdGNoZXIoSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyLCBJbnNwZWN0b3JJbmRleGVkREJCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQogICAgOiBJbnNwZWN0b3JTdXBwbGVtZW50YWxCYWNr
ZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKICAgICwgbV9hZ2VudChhZ2VudCkKewog
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKEFTQ0lJ
TGl0ZXJhbCgiSW5kZXhlZERCIiksIHRoaXMpOwp9Cgp2b2lkIEluc3BlY3RvckluZGV4ZWREQkJh
Y2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRo
b2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKQp7CiAgICBSZWY8SW5zcGVj
dG9ySW5kZXhlZERCQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwoKICAgIHR5cGVk
ZWYgdm9pZCAoSW5zcGVjdG9ySW5kZXhlZERCQmFja2VuZERpc3BhdGNoZXI6OipDYWxsSGFuZGxl
cikobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CiAgICB0eXBl
ZGVmIEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj4gRGlzcGF0Y2hNYXA7CiAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKERpc3BhdGNoTWFwLCBkaXNwYXRjaE1hcCwgKCkpOwogICAgaWYgKGRpc3Bh
dGNoTWFwLmlzRW1wdHkoKSkgewogICAgICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgTWV0aG9kVGFi
bGUgewogICAgICAgICAgICBjb25zdCBjaGFyKiBuYW1lOwogICAgICAgICAgICBDYWxsSGFuZGxl
ciBoYW5kbGVyOwogICAgICAgIH0gY29tbWFuZHNbXSA9IHsKICAgICAgICAgICAgeyAiZW5hYmxl
IiwgICZJbnNwZWN0b3JJbmRleGVkREJCYWNrZW5kRGlzcGF0Y2hlcjo6ZW5hYmxlIH0sCiAgICAg
ICAgICAgIHsgImRpc2FibGUiLCAgJkluc3BlY3RvckluZGV4ZWREQkJhY2tlbmREaXNwYXRjaGVy
OjpkaXNhYmxlIH0sCiAgICAgICAgICAgIHsgInJlcXVlc3REYXRhYmFzZU5hbWVzIiwgICZJbnNw
ZWN0b3JJbmRleGVkREJCYWNrZW5kRGlzcGF0Y2hlcjo6cmVxdWVzdERhdGFiYXNlTmFtZXMgfSwK
ICAgICAgICAgICAgeyAicmVxdWVzdERhdGFiYXNlIiwgICZJbnNwZWN0b3JJbmRleGVkREJCYWNr
ZW5kRGlzcGF0Y2hlcjo6cmVxdWVzdERhdGFiYXNlIH0sCiAgICAgICAgICAgIHsgInJlcXVlc3RE
YXRhIiwgICZJbnNwZWN0b3JJbmRleGVkREJCYWNrZW5kRGlzcGF0Y2hlcjo6cmVxdWVzdERhdGEg
fSwKICAgICAgICAgICAgeyAiY2xlYXJPYmplY3RTdG9yZSIsICAmSW5zcGVjdG9ySW5kZXhlZERC
QmFja2VuZERpc3BhdGNoZXI6OmNsZWFyT2JqZWN0U3RvcmUgfSwKICAgICAgICB9OwogICAgICAg
IHNpemVfdCBsZW5ndGggPSBXVEZfQVJSQVlfTEVOR1RIKGNvbW1hbmRzKTsKICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQogICAgICAgICAgICBkaXNwYXRjaE1hcC5h
ZGQoY29tbWFuZHNbaV0ubmFtZSwgY29tbWFuZHNbaV0uaGFuZGxlcik7CiAgICB9CgogICAgSGFz
aE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPjo6aXRlcmF0b3IgaXQgPSBkaXNwYXRjaE1hcC5maW5k
KG1ldGhvZCk7CiAgICBpZiAoaXQgPT0gZGlzcGF0Y2hNYXAuZW5kKCkpIHsKICAgICAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgU3RyaW5nKCInIikgKyAiSW5kZXhlZERC
IiArICcuJyArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKICAgICAgICByZXR1cm47CiAg
ICB9CgogICAgKCgqdGhpcykuKml0LT52YWx1ZSkoY2FsbElkLCAqbWVzc2FnZS5nZXQoKSk7Cn0K
CnZvaWQgSW5zcGVjdG9ySW5kZXhlZERCQmFja2VuZERpc3BhdGNoZXI6OmVuYWJsZShsb25nIGNh
bGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5
PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
RXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewog
ICAgICAgIG1fYWdlbnQtPmVuYWJsZSgmZXJyb3IpOwoKCiAgICB9CiAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBwcm90b2NvbEVy
cm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JJbmRleGVkREJCYWNrZW5k
RGlzcGF0Y2hlcjo6ZGlzYWJsZShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JikK
ewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFy
cmF5OjpjcmVhdGUoKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXBy
b3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fYWdlbnQtPmRpc2FibGUoJmVycm9y
KTsKCgogICAgfQogICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwg
cmVzdWx0LnJlbGVhc2UoKSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCklu
c3BlY3RvckluZGV4ZWREQkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UmVxdWVzdERhdGFiYXNl
TmFtZXNDYWxsYmFjazo6UmVxdWVzdERhdGFiYXNlTmFtZXNDYWxsYmFjayhQYXNzUmVmUHRyPElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBiYWNrZW5kRGlzcGF0Y2hlciwgaW50IGlkKSA6IElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UoYmFja2VuZERpc3BhdGNoZXIs
IGlkKSB7IH0KCnZvaWQgSW5zcGVjdG9ySW5kZXhlZERCQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
OjpSZXF1ZXN0RGF0YWJhc2VOYW1lc0NhbGxiYWNrOjpzZW5kU3VjY2VzcyhQYXNzUmVmUHRyPFR5
cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+ID4gZGF0YWJhc2VOYW1lcykKewogICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAganNvbk1lc3NhZ2UtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VOYW1lcyIpLCBk
YXRhYmFzZU5hbWVzKTsKICAgIHNlbmRJZkFjdGl2ZShqc29uTWVzc2FnZSwgRXJyb3JTdHJpbmco
KSk7Cn0KCnZvaWQgSW5zcGVjdG9ySW5kZXhlZERCQmFja2VuZERpc3BhdGNoZXI6OnJlcXVlc3RE
YXRhYmFzZU5hbWVzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2Up
CnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JB
cnJheTo6Y3JlYXRlKCk7CiAgICBSZWZQdHI8SW5zcGVjdG9ySW5kZXhlZERCQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyOjpSZXF1ZXN0RGF0YWJhc2VOYW1lc0NhbGxiYWNrPiBjYWxsYmFjayA9IGFk
b3B0UmVmKG5ldyBJbnNwZWN0b3JJbmRleGVkREJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlJl
cXVlc3REYXRhYmFzZU5hbWVzQ2FsbGJhY2sobV9iYWNrZW5kRGlzcGF0Y2hlciwgY2FsbElkKSk7
CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gbWVzc2FnZS5n
ZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQ
dHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xF
cnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIFN0cmluZyBpbl9zZWN1cml0eU9y
aWdpbiA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFp
bmVyUHRyLCBBU0NJSUxpdGVyYWwoInNlY3VyaXR5T3JpZ2luIiksIG51bGxwdHIsIHByb3RvY29s
RXJyb3JzUHRyKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3Rv
Y29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fYWdlbnQtPnJlcXVlc3REYXRhYmFzZU5h
bWVzKCZlcnJvciwgaW5fc2VjdXJpdHlPcmlnaW4sIGNhbGxiYWNrKTsKCiAgICAgICAgaWYgKCFl
cnJvci5sZW5ndGgoKSkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIGNhbGxiYWNrLT5kaXNh
YmxlKCk7CgogICAgfQogICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJ
ZCwgcmVzdWx0LnJlbGVhc2UoKSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0K
Ckluc3BlY3RvckluZGV4ZWREQkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UmVxdWVzdERhdGFi
YXNlQ2FsbGJhY2s6OlJlcXVlc3REYXRhYmFzZUNhbGxiYWNrKFBhc3NSZWZQdHI8SW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI+IGJhY2tlbmREaXNwYXRjaGVyLCBpbnQgaWQpIDogSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZShiYWNrZW5kRGlzcGF0Y2hlciwgaWQpIHsg
fQoKdm9pZCBJbnNwZWN0b3JJbmRleGVkREJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlJlcXVl
c3REYXRhYmFzZUNhbGxiYWNrOjpzZW5kU3VjY2VzcyhQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpJ
bmRleGVkREI6OkRhdGFiYXNlV2l0aE9iamVjdFN0b3Jlcz4gZGF0YWJhc2VXaXRoT2JqZWN0U3Rv
cmVzKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICBqc29uTWVzc2FnZS0+c2V0VmFsdWUoQVNDSUlMaXRlcmFs
KCJkYXRhYmFzZVdpdGhPYmplY3RTdG9yZXMiKSwgZGF0YWJhc2VXaXRoT2JqZWN0U3RvcmVzKTsK
ICAgIHNlbmRJZkFjdGl2ZShqc29uTWVzc2FnZSwgRXJyb3JTdHJpbmcoKSk7Cn0KCnZvaWQgSW5z
cGVjdG9ySW5kZXhlZERCQmFja2VuZERpc3BhdGNoZXI6OnJlcXVlc3REYXRhYmFzZShsb25nIGNh
bGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKQp7CiAgICBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwogICAg
UmVmUHRyPEluc3BlY3RvckluZGV4ZWREQkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UmVxdWVz
dERhdGFiYXNlQ2FsbGJhY2s+IGNhbGxiYWNrID0gYWRvcHRSZWYobmV3IEluc3BlY3RvckluZGV4
ZWREQkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UmVxdWVzdERhdGFiYXNlQ2FsbGJhY2sobV9i
YWNrZW5kRGlzcGF0Y2hlciwgY2FsbElkKSk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cGFyYW1zQ29udGFpbmVyID0gbWVzc2FnZS5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVj
dG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAg
ICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQo
KTsKICAgIFN0cmluZyBpbl9zZWN1cml0eU9yaWdpbiA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInNlY3VyaXR5
T3JpZ2luIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIFN0cmluZyBpbl9kYXRh
YmFzZU5hbWUgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0Nv
bnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJkYXRhYmFzZU5hbWUiKSwgbnVsbHB0ciwgcHJvdG9j
b2xFcnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJv
dG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9hZ2VudC0+cmVxdWVzdERhdGFiYXNl
KCZlcnJvciwgaW5fc2VjdXJpdHlPcmlnaW4sIGluX2RhdGFiYXNlTmFtZSwgY2FsbGJhY2spOwoK
ICAgICAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAg
Y2FsbGJhY2stPmRpc2FibGUoKTsKCiAgICB9CiAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5k
UmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBwcm90b2NvbEVycm9ycy5yZWxlYXNl
KCksIGVycm9yKTsKfQoKSW5zcGVjdG9ySW5kZXhlZERCQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
OjpSZXF1ZXN0RGF0YUNhbGxiYWNrOjpSZXF1ZXN0RGF0YUNhbGxiYWNrKFBhc3NSZWZQdHI8SW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IGJhY2tlbmREaXNwYXRjaGVyLCBpbnQgaWQpIDogSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZShiYWNrZW5kRGlzcGF0Y2hlciwg
aWQpIHsgfQoKdm9pZCBJbnNwZWN0b3JJbmRleGVkREJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6
OlJlcXVlc3REYXRhQ2FsbGJhY2s6OnNlbmRTdWNjZXNzKFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6
OkFycmF5PFR5cGVCdWlsZGVyOjpJbmRleGVkREI6OkRhdGFFbnRyeT4gPiBvYmplY3RTdG9yZURh
dGFFbnRyaWVzLCBib29sIGhhc01vcmUpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGpz
b25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIGpzb25NZXNzYWdlLT5z
ZXRWYWx1ZShBU0NJSUxpdGVyYWwoIm9iamVjdFN0b3JlRGF0YUVudHJpZXMiKSwgb2JqZWN0U3Rv
cmVEYXRhRW50cmllcyk7CiAgICBqc29uTWVzc2FnZS0+c2V0Qm9vbGVhbihBU0NJSUxpdGVyYWwo
Imhhc01vcmUiKSwgaGFzTW9yZSk7CiAgICBzZW5kSWZBY3RpdmUoanNvbk1lc3NhZ2UsIEVycm9y
U3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckluZGV4ZWREQkJhY2tlbmREaXNwYXRjaGVyOjpy
ZXF1ZXN0RGF0YShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKQp7
CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJy
YXk6OmNyZWF0ZSgpOwogICAgUmVmUHRyPEluc3BlY3RvckluZGV4ZWREQkJhY2tlbmREaXNwYXRj
aGVySGFuZGxlcjo6UmVxdWVzdERhdGFDYWxsYmFjaz4gY2FsbGJhY2sgPSBhZG9wdFJlZihuZXcg
SW5zcGVjdG9ySW5kZXhlZERCQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpSZXF1ZXN0RGF0YUNh
bGxiYWNrKG1fYmFja2VuZERpc3BhdGNoZXIsIGNhbGxJZCkpOwoKICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2JqZWN0KCJwYXJhbXMiKTsK
ICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVy
LmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xF
cnJvcnMuZ2V0KCk7CiAgICBTdHJpbmcgaW5fc2VjdXJpdHlPcmlnaW4gPSBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFs
KCJzZWN1cml0eU9yaWdpbiIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBTdHJp
bmcgaW5fZGF0YWJhc2VOYW1lID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmlu
ZyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VOYW1lIiksIG51bGxw
dHIsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIFN0cmluZyBpbl9vYmplY3RTdG9yZU5hbWUgPSBJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwg
QVNDSUlMaXRlcmFsKCJvYmplY3RTdG9yZU5hbWUiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQ
dHIpOwogICAgU3RyaW5nIGluX2luZGV4TmFtZSA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
OjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoImluZGV4TmFtZSIp
LCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBpbnQgaW5fc2tpcENvdW50ID0gSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEludChwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJ
TGl0ZXJhbCgic2tpcENvdW50IiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGlu
dCBpbl9wYWdlU2l6ZSA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRJbnQocGFyYW1z
Q29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInBhZ2VTaXplIiksIG51bGxwdHIsIHByb3RvY29s
RXJyb3JzUHRyKTsKICAgIGJvb2wga2V5UmFuZ2VfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gaW5fa2V5UmFuZ2UgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcjo6Z2V0T2JqZWN0KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJrZXlSYW5n
ZSIpLCAma2V5UmFuZ2VfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAg
ICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7
CiAgICAgICAgbV9hZ2VudC0+cmVxdWVzdERhdGEoJmVycm9yLCBpbl9zZWN1cml0eU9yaWdpbiwg
aW5fZGF0YWJhc2VOYW1lLCBpbl9vYmplY3RTdG9yZU5hbWUsIGluX2luZGV4TmFtZSwgaW5fc2tp
cENvdW50LCBpbl9wYWdlU2l6ZSwga2V5UmFuZ2VfdmFsdWVGb3VuZCA/ICZpbl9rZXlSYW5nZSA6
IDAsIGNhbGxiYWNrKTsKCiAgICAgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgIGNhbGxiYWNrLT5kaXNhYmxlKCk7CgogICAgfQogICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgcHJvdG9j
b2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCkluc3BlY3RvckluZGV4ZWREQkJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlcjo6Q2xlYXJPYmplY3RTdG9yZUNhbGxiYWNrOjpDbGVhck9iamVjdFN0
b3JlQ2FsbGJhY2soUGFzc1JlZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gYmFja2Vu
ZERpc3BhdGNoZXIsIGludCBpZCkgOiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJh
Y2tCYXNlKGJhY2tlbmREaXNwYXRjaGVyLCBpZCkgeyB9Cgp2b2lkIEluc3BlY3RvckluZGV4ZWRE
QkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6Q2xlYXJPYmplY3RTdG9yZUNhbGxiYWNrOjpzZW5k
U3VjY2VzcygpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHNlbmRJZkFjdGl2ZShqc29uTWVzc2FnZSwgRXJy
b3JTdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9ySW5kZXhlZERCQmFja2VuZERpc3BhdGNoZXI6
OmNsZWFyT2JqZWN0U3RvcmUobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVz
c2FnZSkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3Bl
Y3RvckFycmF5OjpjcmVhdGUoKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JJbmRleGVkREJCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXI6OkNsZWFyT2JqZWN0U3RvcmVDYWxsYmFjaz4gY2FsbGJhY2sgPSBh
ZG9wdFJlZihuZXcgSW5zcGVjdG9ySW5kZXhlZERCQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpD
bGVhck9iamVjdFN0b3JlQ2FsbGJhY2sobV9iYWNrZW5kRGlzcGF0Y2hlciwgY2FsbElkKSk7Cgog
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gbWVzc2FnZS5nZXRP
YmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIg
PSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJv
cnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIFN0cmluZyBpbl9zZWN1cml0eU9yaWdp
biA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVy
UHRyLCBBU0NJSUxpdGVyYWwoInNlY3VyaXR5T3JpZ2luIiksIG51bGxwdHIsIHByb3RvY29sRXJy
b3JzUHRyKTsKICAgIFN0cmluZyBpbl9kYXRhYmFzZU5hbWUgPSBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJkYXRh
YmFzZU5hbWUiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgU3RyaW5nIGluX29i
amVjdFN0b3JlTmFtZSA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFy
YW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoIm9iamVjdFN0b3JlTmFtZSIpLCBudWxscHRy
LCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAg
aWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2FnZW50LT5jbGVhck9i
amVjdFN0b3JlKCZlcnJvciwgaW5fc2VjdXJpdHlPcmlnaW4sIGluX2RhdGFiYXNlTmFtZSwgaW5f
b2JqZWN0U3RvcmVOYW1lLCBjYWxsYmFjayk7CgogICAgICAgIGlmICghZXJyb3IubGVuZ3RoKCkp
CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICBjYWxsYmFjay0+ZGlzYWJsZSgpOwoKICAgIH0K
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxl
YXNlKCksIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9CgojZW5kaWYgLy8gRU5B
QkxFKElOREVYRURfREFUQUJBU0UpCgpQYXNzUmVmUHRyPEluc3BlY3RvcklucHV0QmFja2VuZERp
c3BhdGNoZXI+IEluc3BlY3RvcklucHV0QmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIsIEluc3BlY3RvcklucHV0QmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKewogICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJ
bnNwZWN0b3JJbnB1dEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkp
Owp9CgpJbnNwZWN0b3JJbnB1dEJhY2tlbmREaXNwYXRjaGVyOjpJbnNwZWN0b3JJbnB1dEJhY2tl
bmREaXNwYXRjaGVyKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hl
ciwgSW5zcGVjdG9ySW5wdXRCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQogICAgOiBJ
bnNwZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikK
ICAgICwgbV9hZ2VudChhZ2VudCkKewogICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJE
aXNwYXRjaGVyRm9yRG9tYWluKEFTQ0lJTGl0ZXJhbCgiSW5wdXQiKSwgdGhpcyk7Cn0KCnZvaWQg
SW5zcGVjdG9ySW5wdXRCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNv
bnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSkK
ewogICAgUmVmPEluc3BlY3RvcklucHV0QmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMp
OwoKICAgIHR5cGVkZWYgdm9pZCAoSW5zcGVjdG9ySW5wdXRCYWNrZW5kRGlzcGF0Y2hlcjo6KkNh
bGxIYW5kbGVyKShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsK
ICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPiBEaXNwYXRjaE1hcDsKICAg
IERFRklORV9TVEFUSUNfTE9DQUwoRGlzcGF0Y2hNYXAsIGRpc3BhdGNoTWFwLCAoKSk7CiAgICBp
ZiAoZGlzcGF0Y2hNYXAuaXNFbXB0eSgpKSB7CiAgICAgICAgc3RhdGljIGNvbnN0IHN0cnVjdCBN
ZXRob2RUYWJsZSB7CiAgICAgICAgICAgIGNvbnN0IGNoYXIqIG5hbWU7CiAgICAgICAgICAgIENh
bGxIYW5kbGVyIGhhbmRsZXI7CiAgICAgICAgfSBjb21tYW5kc1tdID0gewogICAgICAgICAgICB7
ICJkaXNwYXRjaEtleUV2ZW50IiwgICZJbnNwZWN0b3JJbnB1dEJhY2tlbmREaXNwYXRjaGVyOjpk
aXNwYXRjaEtleUV2ZW50IH0sCiAgICAgICAgICAgIHsgImRpc3BhdGNoTW91c2VFdmVudCIsICAm
SW5zcGVjdG9ySW5wdXRCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2hNb3VzZUV2ZW50IH0sCiAg
ICAgICAgfTsKICAgICAgICBzaXplX3QgbGVuZ3RoID0gV1RGX0FSUkFZX0xFTkdUSChjb21tYW5k
cyk7CiAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKICAgICAgICAg
ICAgZGlzcGF0Y2hNYXAuYWRkKGNvbW1hbmRzW2ldLm5hbWUsIGNvbW1hbmRzW2ldLmhhbmRsZXIp
OwogICAgfQoKICAgIEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj46Oml0ZXJhdG9yIGl0ID0g
ZGlzcGF0Y2hNYXAuZmluZChtZXRob2QpOwogICAgaWYgKGl0ID09IGRpc3BhdGNoTWFwLmVuZCgp
KSB7CiAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2Fs
bElkLCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsIFN0cmluZygi
JyIpICsgIklucHV0IiArICcuJyArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKICAgICAg
ICByZXR1cm47CiAgICB9CgogICAgKCgqdGhpcykuKml0LT52YWx1ZSkoY2FsbElkLCAqbWVzc2Fn
ZS5nZXQoKSk7Cn0KCnZvaWQgSW5zcGVjdG9ySW5wdXRCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0
Y2hLZXlFdmVudChsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKQp7
CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJy
YXk6OmNyZWF0ZSgpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5l
ciA9IG1lc3NhZ2UuZ2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFy
YW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJy
YXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBTdHJpbmcg
aW5fdHlwZSA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29u
dGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInR5cGUiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQ
dHIpOwogICAgYm9vbCBtb2RpZmllcnNfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgaW50IGluX21v
ZGlmaWVycyA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRJbnQocGFyYW1zQ29udGFp
bmVyUHRyLCBBU0NJSUxpdGVyYWwoIm1vZGlmaWVycyIpLCAmbW9kaWZpZXJzX3ZhbHVlRm91bmQs
IHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgdGltZXN0YW1wX3ZhbHVlRm91bmQgPSBmYWxz
ZTsKICAgIGRvdWJsZSBpbl90aW1lc3RhbXAgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
Z2V0RG91YmxlKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwg
JnRpbWVzdGFtcF92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBib29sIHRleHRf
dmFsdWVGb3VuZCA9IGZhbHNlOwogICAgU3RyaW5nIGluX3RleHQgPSBJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJ0
ZXh0IiksICZ0ZXh0X3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgdW5t
b2RpZmllZFRleHRfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgU3RyaW5nIGluX3VubW9kaWZpZWRU
ZXh0ID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWlu
ZXJQdHIsIEFTQ0lJTGl0ZXJhbCgidW5tb2RpZmllZFRleHQiKSwgJnVubW9kaWZpZWRUZXh0X3Zh
bHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wga2V5SWRlbnRpZmllcl92YWx1
ZUZvdW5kID0gZmFsc2U7CiAgICBTdHJpbmcgaW5fa2V5SWRlbnRpZmllciA9IEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVy
YWwoImtleUlkZW50aWZpZXIiKSwgJmtleUlkZW50aWZpZXJfdmFsdWVGb3VuZCwgcHJvdG9jb2xF
cnJvcnNQdHIpOwogICAgYm9vbCB3aW5kb3dzVmlydHVhbEtleUNvZGVfdmFsdWVGb3VuZCA9IGZh
bHNlOwogICAgaW50IGluX3dpbmRvd3NWaXJ0dWFsS2V5Q29kZSA9IEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOjpnZXRJbnQocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoIndpbmRv
d3NWaXJ0dWFsS2V5Q29kZSIpLCAmd2luZG93c1ZpcnR1YWxLZXlDb2RlX3ZhbHVlRm91bmQsIHBy
b3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgbmF0aXZlVmlydHVhbEtleUNvZGVfdmFsdWVGb3Vu
ZCA9IGZhbHNlOwogICAgaW50IGluX25hdGl2ZVZpcnR1YWxLZXlDb2RlID0gSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6OmdldEludChwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgi
bmF0aXZlVmlydHVhbEtleUNvZGUiKSwgJm5hdGl2ZVZpcnR1YWxLZXlDb2RlX3ZhbHVlRm91bmQs
IHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgbWFjQ2hhckNvZGVfdmFsdWVGb3VuZCA9IGZh
bHNlOwogICAgaW50IGluX21hY0NoYXJDb2RlID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OmdldEludChwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgibWFjQ2hhckNvZGUiKSwg
Jm1hY0NoYXJDb2RlX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgYXV0
b1JlcGVhdF92YWx1ZUZvdW5kID0gZmFsc2U7CiAgICBib29sIGluX2F1dG9SZXBlYXQgPSBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0Qm9vbGVhbihwYXJhbXNDb250YWluZXJQdHIsIEFT
Q0lJTGl0ZXJhbCgiYXV0b1JlcGVhdCIpLCAmYXV0b1JlcGVhdF92YWx1ZUZvdW5kLCBwcm90b2Nv
bEVycm9yc1B0cik7CiAgICBib29sIGlzS2V5cGFkX3ZhbHVlRm91bmQgPSBmYWxzZTsKICAgIGJv
b2wgaW5faXNLZXlwYWQgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0Qm9vbGVhbihw
YXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgiaXNLZXlwYWQiKSwgJmlzS2V5cGFkX3Zh
bHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgaXNTeXN0ZW1LZXlfdmFsdWVG
b3VuZCA9IGZhbHNlOwogICAgYm9vbCBpbl9pc1N5c3RlbUtleSA9IEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOjpnZXRCb29sZWFuKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJp
c1N5c3RlbUtleSIpLCAmaXNTeXN0ZW1LZXlfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIp
OwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMt
Pmxlbmd0aCgpKSB7CiAgICAgICAgbV9hZ2VudC0+ZGlzcGF0Y2hLZXlFdmVudCgmZXJyb3IsIGlu
X3R5cGUsIG1vZGlmaWVyc192YWx1ZUZvdW5kID8gJmluX21vZGlmaWVycyA6IDAsIHRpbWVzdGFt
cF92YWx1ZUZvdW5kID8gJmluX3RpbWVzdGFtcCA6IDAsIHRleHRfdmFsdWVGb3VuZCA/ICZpbl90
ZXh0IDogMCwgdW5tb2RpZmllZFRleHRfdmFsdWVGb3VuZCA/ICZpbl91bm1vZGlmaWVkVGV4dCA6
IDAsIGtleUlkZW50aWZpZXJfdmFsdWVGb3VuZCA/ICZpbl9rZXlJZGVudGlmaWVyIDogMCwgd2lu
ZG93c1ZpcnR1YWxLZXlDb2RlX3ZhbHVlRm91bmQgPyAmaW5fd2luZG93c1ZpcnR1YWxLZXlDb2Rl
IDogMCwgbmF0aXZlVmlydHVhbEtleUNvZGVfdmFsdWVGb3VuZCA/ICZpbl9uYXRpdmVWaXJ0dWFs
S2V5Q29kZSA6IDAsIG1hY0NoYXJDb2RlX3ZhbHVlRm91bmQgPyAmaW5fbWFjQ2hhckNvZGUgOiAw
LCBhdXRvUmVwZWF0X3ZhbHVlRm91bmQgPyAmaW5fYXV0b1JlcGVhdCA6IDAsIGlzS2V5cGFkX3Zh
bHVlRm91bmQgPyAmaW5faXNLZXlwYWQgOiAwLCBpc1N5c3RlbUtleV92YWx1ZUZvdW5kID8gJmlu
X2lzU3lzdGVtS2V5IDogMCk7CgoKICAgIH0KICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRS
ZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIHByb3RvY29sRXJyb3JzLnJlbGVhc2Uo
KSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvcklucHV0QmFja2VuZERpc3BhdGNoZXI6OmRpc3Bh
dGNoTW91c2VFdmVudChsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdl
KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9y
QXJyYXk6OmNyZWF0ZSgpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRh
aW5lciA9IG1lc3NhZ2UuZ2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCog
cGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9y
QXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBTdHJp
bmcgaW5fdHlwZSA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1z
Q29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInR5cGUiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJv
cnNQdHIpOwogICAgaW50IGluX3ggPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0SW50
KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJ4IiksIG51bGxwdHIsIHByb3RvY29s
RXJyb3JzUHRyKTsKICAgIGludCBpbl95ID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6Omdl
dEludChwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgieSIpLCBudWxscHRyLCBwcm90
b2NvbEVycm9yc1B0cik7CiAgICBib29sIG1vZGlmaWVyc192YWx1ZUZvdW5kID0gZmFsc2U7CiAg
ICBpbnQgaW5fbW9kaWZpZXJzID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEludChw
YXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgibW9kaWZpZXJzIiksICZtb2RpZmllcnNf
dmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgYm9vbCB0aW1lc3RhbXBfdmFsdWVG
b3VuZCA9IGZhbHNlOwogICAgZG91YmxlIGluX3RpbWVzdGFtcCA9IEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOjpnZXREb3VibGUocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInRp
bWVzdGFtcCIpLCAmdGltZXN0YW1wX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKICAg
IGJvb2wgYnV0dG9uX3ZhbHVlRm91bmQgPSBmYWxzZTsKICAgIFN0cmluZyBpbl9idXR0b24gPSBJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwg
QVNDSUlMaXRlcmFsKCJidXR0b24iKSwgJmJ1dHRvbl92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9y
c1B0cik7CiAgICBib29sIGNsaWNrQ291bnRfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgaW50IGlu
X2NsaWNrQ291bnQgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0SW50KHBhcmFtc0Nv
bnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJjbGlja0NvdW50IiksICZjbGlja0NvdW50X3ZhbHVl
Rm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBy
ZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7
CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fYWdlbnQtPmRp
c3BhdGNoTW91c2VFdmVudCgmZXJyb3IsIGluX3R5cGUsIGluX3gsIGluX3ksIG1vZGlmaWVyc192
YWx1ZUZvdW5kID8gJmluX21vZGlmaWVycyA6IDAsIHRpbWVzdGFtcF92YWx1ZUZvdW5kID8gJmlu
X3RpbWVzdGFtcCA6IDAsIGJ1dHRvbl92YWx1ZUZvdW5kID8gJmluX2J1dHRvbiA6IDAsIGNsaWNr
Q291bnRfdmFsdWVGb3VuZCA/ICZpbl9jbGlja0NvdW50IDogMCk7CgoKICAgIH0KICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIHBy
b3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9CgpQYXNzUmVmUHRyPEluc3BlY3Rvcklu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBJbnNwZWN0b3JJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcjo6Y3JlYXRlKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hl
ciwgSW5zcGVjdG9ySW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKewog
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKfQoKSW5zcGVjdG9ySW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI6Okluc3BlY3Rvckluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9ySW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKICAgIDogSW5zcGVjdG9yU3VwcGxlbWVu
dGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCiAgICAsIG1fYWdlbnQoYWdl
bnQpCnsKICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFp
bihBU0NJSUxpdGVyYWwoIkluc3BlY3RvciIpLCB0aGlzKTsKfQoKdm9pZCBJbnNwZWN0b3JJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmlu
ZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSkKewogICAgUmVm
PEluc3BlY3Rvckluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKCiAg
ICB0eXBlZGVmIHZvaWQgKEluc3BlY3Rvckluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjoqQ2Fs
bEhhbmRsZXIpKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwog
ICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+IERpc3BhdGNoTWFwOwogICAg
REVGSU5FX1NUQVRJQ19MT0NBTChEaXNwYXRjaE1hcCwgZGlzcGF0Y2hNYXAsICgpKTsKICAgIGlm
IChkaXNwYXRjaE1hcC5pc0VtcHR5KCkpIHsKICAgICAgICBzdGF0aWMgY29uc3Qgc3RydWN0IE1l
dGhvZFRhYmxlIHsKICAgICAgICAgICAgY29uc3QgY2hhciogbmFtZTsKICAgICAgICAgICAgQ2Fs
bEhhbmRsZXIgaGFuZGxlcjsKICAgICAgICB9IGNvbW1hbmRzW10gPSB7CiAgICAgICAgICAgIHsg
ImVuYWJsZSIsICAmSW5zcGVjdG9ySW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmVuYWJsZSB9
LAogICAgICAgICAgICB7ICJkaXNhYmxlIiwgICZJbnNwZWN0b3JJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjo6ZGlzYWJsZSB9LAogICAgICAgIH07CiAgICAgICAgc2l6ZV90IGxlbmd0aCA9IFdU
Rl9BUlJBWV9MRU5HVEgoY29tbWFuZHMpOwogICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bGVuZ3RoOyArK2kpCiAgICAgICAgICAgIGRpc3BhdGNoTWFwLmFkZChjb21tYW5kc1tpXS5uYW1l
LCBjb21tYW5kc1tpXS5oYW5kbGVyKTsKICAgIH0KCiAgICBIYXNoTWFwPFN0cmluZywgQ2FsbEhh
bmRsZXI+OjppdGVyYXRvciBpdCA9IGRpc3BhdGNoTWFwLmZpbmQobWV0aG9kKTsKICAgIGlmIChp
dCA9PSBkaXNwYXRjaE1hcC5lbmQoKSkgewogICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJl
cG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6Ok1l
dGhvZE5vdEZvdW5kLCBTdHJpbmcoIiciKSArICJJbnNwZWN0b3IiICsgJy4nICsgbWV0aG9kICsg
Iicgd2FzIG5vdCBmb3VuZCIpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAoKCp0aGlzKS4q
aXQtPnZhbHVlKShjYWxsSWQsICptZXNzYWdlLmdldCgpKTsKfQoKdm9pZCBJbnNwZWN0b3JJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6ZW5hYmxlKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0
b3JPYmplY3QmKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0g
SW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJl
c3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsK
ICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9hZ2VudC0+ZW5h
YmxlKCZlcnJvcik7CgoKICAgIH0KICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25z
ZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJy
b3IpOwp9Cgp2b2lkIEluc3BlY3Rvckluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpkaXNhYmxl
KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmKQp7CiAgICBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0
aCgpKSB7CiAgICAgICAgbV9hZ2VudC0+ZGlzYWJsZSgmZXJyb3IpOwoKCiAgICB9CiAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBw
cm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKUGFzc1JlZlB0cjxJbnNwZWN0b3JM
YXllclRyZWVCYWNrZW5kRGlzcGF0Y2hlcj4gSW5zcGVjdG9yTGF5ZXJUcmVlQmFja2VuZERpc3Bh
dGNoZXI6OmNyZWF0ZShJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNo
ZXIsIEluc3BlY3RvckxheWVyVHJlZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCnsK
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9yTGF5ZXJUcmVlQmFja2VuZERpc3BhdGNo
ZXIoYmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7Cn0KCkluc3BlY3RvckxheWVyVHJlZUJhY2tl
bmREaXNwYXRjaGVyOjpJbnNwZWN0b3JMYXllclRyZWVCYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIsIEluc3BlY3RvckxheWVyVHJl
ZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCiAgICA6IEluc3BlY3RvclN1cHBsZW1l
bnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQogICAgLCBtX2FnZW50KGFn
ZW50KQp7CiAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21h
aW4oQVNDSUlMaXRlcmFsKCJMYXllclRyZWUiKSwgdGhpcyk7Cn0KCnZvaWQgSW5zcGVjdG9yTGF5
ZXJUcmVlQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJp
bmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpCnsKICAgIFJl
ZjxJbnNwZWN0b3JMYXllclRyZWVCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7Cgog
ICAgdHlwZWRlZiB2b2lkIChJbnNwZWN0b3JMYXllclRyZWVCYWNrZW5kRGlzcGF0Y2hlcjo6KkNh
bGxIYW5kbGVyKShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsK
ICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPiBEaXNwYXRjaE1hcDsKICAg
IERFRklORV9TVEFUSUNfTE9DQUwoRGlzcGF0Y2hNYXAsIGRpc3BhdGNoTWFwLCAoKSk7CiAgICBp
ZiAoZGlzcGF0Y2hNYXAuaXNFbXB0eSgpKSB7CiAgICAgICAgc3RhdGljIGNvbnN0IHN0cnVjdCBN
ZXRob2RUYWJsZSB7CiAgICAgICAgICAgIGNvbnN0IGNoYXIqIG5hbWU7CiAgICAgICAgICAgIENh
bGxIYW5kbGVyIGhhbmRsZXI7CiAgICAgICAgfSBjb21tYW5kc1tdID0gewogICAgICAgICAgICB7
ICJlbmFibGUiLCAgJkluc3BlY3RvckxheWVyVHJlZUJhY2tlbmREaXNwYXRjaGVyOjplbmFibGUg
fSwKICAgICAgICAgICAgeyAiZGlzYWJsZSIsICAmSW5zcGVjdG9yTGF5ZXJUcmVlQmFja2VuZERp
c3BhdGNoZXI6OmRpc2FibGUgfSwKICAgICAgICAgICAgeyAibGF5ZXJzRm9yTm9kZSIsICAmSW5z
cGVjdG9yTGF5ZXJUcmVlQmFja2VuZERpc3BhdGNoZXI6OmxheWVyc0Zvck5vZGUgfSwKICAgICAg
ICAgICAgeyAicmVhc29uc0ZvckNvbXBvc2l0aW5nTGF5ZXIiLCAgJkluc3BlY3RvckxheWVyVHJl
ZUJhY2tlbmREaXNwYXRjaGVyOjpyZWFzb25zRm9yQ29tcG9zaXRpbmdMYXllciB9LAogICAgICAg
IH07CiAgICAgICAgc2l6ZV90IGxlbmd0aCA9IFdURl9BUlJBWV9MRU5HVEgoY29tbWFuZHMpOwog
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCiAgICAgICAgICAgIGRp
c3BhdGNoTWFwLmFkZChjb21tYW5kc1tpXS5uYW1lLCBjb21tYW5kc1tpXS5oYW5kbGVyKTsKICAg
IH0KCiAgICBIYXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+OjppdGVyYXRvciBpdCA9IGRpc3Bh
dGNoTWFwLmZpbmQobWV0aG9kKTsKICAgIGlmIChpdCA9PSBkaXNwYXRjaE1hcC5lbmQoKSkgewog
ICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwg
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCBTdHJpbmcoIiciKSAr
ICJMYXllclRyZWUiICsgJy4nICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOwogICAgICAg
IHJldHVybjsKICAgIH0KCiAgICAoKCp0aGlzKS4qaXQtPnZhbHVlKShjYWxsSWQsICptZXNzYWdl
LmdldCgpKTsKfQoKdm9pZCBJbnNwZWN0b3JMYXllclRyZWVCYWNrZW5kRGlzcGF0Y2hlcjo6ZW5h
YmxlKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmKQp7CiAgICBSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoK
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxl
bmd0aCgpKSB7CiAgICAgICAgbV9hZ2VudC0+ZW5hYmxlKCZlcnJvcik7CgoKICAgIH0KICAgIG1f
YmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCks
IHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckxheWVy
VHJlZUJhY2tlbmREaXNwYXRjaGVyOjpkaXNhYmxlKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0
b3JPYmplY3QmKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0g
SW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJl
c3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsK
ICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9hZ2VudC0+ZGlz
YWJsZSgmZXJyb3IpOwoKCiAgICB9CiAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9u
c2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVy
cm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JMYXllclRyZWVCYWNrZW5kRGlzcGF0Y2hlcjo6bGF5ZXJz
Rm9yTm9kZShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKQp7CiAg
ICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6
OmNyZWF0ZSgpOwoKICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6Okxh
eWVyVHJlZTo6TGF5ZXI+ID4gb3V0X2xheWVyczsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBwYXJhbXNDb250YWluZXIgPSBtZXNzYWdlLmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNw
ZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsK
ICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdl
dCgpOwogICAgaW50IGluX25vZGVJZCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRJ
bnQocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoIm5vZGVJZCIpLCBudWxscHRyLCBw
cm90b2NvbEVycm9yc1B0cik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYg
KCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2FnZW50LT5sYXllcnNGb3JO
b2RlKCZlcnJvciwgaW5fbm9kZUlkLCBvdXRfbGF5ZXJzKTsKCiAgICAgICAgaWYgKCFlcnJvci5s
ZW5ndGgoKSkgewogICAgICAgICAgICByZXN1bHQtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgibGF5
ZXJzIiksIG91dF9sYXllcnMpOwogICAgICAgIH0KICAgIH0KICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIHByb3RvY29sRXJyb3Jz
LnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvckxheWVyVHJlZUJhY2tlbmREaXNw
YXRjaGVyOjpyZWFzb25zRm9yQ29tcG9zaXRpbmdMYXllcihsb25nIGNhbGxJZCwgY29uc3QgSW5z
cGVjdG9yT2JqZWN0JiBtZXNzYWdlKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3Rv
Y29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIFJlZlB0cjxUeXBlQnVp
bGRlcjo6TGF5ZXJUcmVlOjpDb21wb3NpdGluZ1JlYXNvbnM+IG91dF9jb21wb3NpdGluZ1JlYXNv
bnM7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gbWVzc2Fn
ZS5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWlu
ZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9j
b2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIFN0cmluZyBpbl9sYXllcklk
ID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWluZXJQ
dHIsIEFTQ0lJTGl0ZXJhbCgibGF5ZXJJZCIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7
CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+
bGVuZ3RoKCkpIHsKICAgICAgICBtX2FnZW50LT5yZWFzb25zRm9yQ29tcG9zaXRpbmdMYXllcigm
ZXJyb3IsIGluX2xheWVySWQsIG91dF9jb21wb3NpdGluZ1JlYXNvbnMpOwoKICAgICAgICBpZiAo
IWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoQVNDSUlMaXRl
cmFsKCJjb21wb3NpdGluZ1JlYXNvbnMiKSwgb3V0X2NvbXBvc2l0aW5nUmVhc29ucyk7CiAgICAg
ICAgfQogICAgfQogICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwg
cmVzdWx0LnJlbGVhc2UoKSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KClBh
c3NSZWZQdHI8SW5zcGVjdG9yTWVtb3J5QmFja2VuZERpc3BhdGNoZXI+IEluc3BlY3Rvck1lbW9y
eUJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJh
Y2tlbmREaXNwYXRjaGVyLCBJbnNwZWN0b3JNZW1vcnlCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIq
IGFnZW50KQp7CiAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3Rvck1lbW9yeUJhY2tlbmRE
aXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOwp9CgpJbnNwZWN0b3JNZW1vcnlC
YWNrZW5kRGlzcGF0Y2hlcjo6SW5zcGVjdG9yTWVtb3J5QmFja2VuZERpc3BhdGNoZXIoSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyLCBJbnNwZWN0b3JNZW1vcnlC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQogICAgOiBJbnNwZWN0b3JTdXBwbGVtZW50
YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKICAgICwgbV9hZ2VudChhZ2Vu
dCkKewogICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWlu
KEFTQ0lJTGl0ZXJhbCgiTWVtb3J5IiksIHRoaXMpOwp9Cgp2b2lkIEluc3BlY3Rvck1lbW9yeUJh
Y2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRo
b2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKQp7CiAgICBSZWY8SW5zcGVj
dG9yTWVtb3J5QmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwoKICAgIHR5cGVkZWYg
dm9pZCAoSW5zcGVjdG9yTWVtb3J5QmFja2VuZERpc3BhdGNoZXI6OipDYWxsSGFuZGxlcikobG9u
ZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CiAgICB0eXBlZGVmIEhh
c2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj4gRGlzcGF0Y2hNYXA7CiAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKERpc3BhdGNoTWFwLCBkaXNwYXRjaE1hcCwgKCkpOwogICAgaWYgKGRpc3BhdGNoTWFw
LmlzRW1wdHkoKSkgewogICAgICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgTWV0aG9kVGFibGUgewog
ICAgICAgICAgICBjb25zdCBjaGFyKiBuYW1lOwogICAgICAgICAgICBDYWxsSGFuZGxlciBoYW5k
bGVyOwogICAgICAgIH0gY29tbWFuZHNbXSA9IHsKICAgICAgICAgICAgeyAiZ2V0RE9NQ291bnRl
cnMiLCAgJkluc3BlY3Rvck1lbW9yeUJhY2tlbmREaXNwYXRjaGVyOjpnZXRET01Db3VudGVycyB9
LAogICAgICAgIH07CiAgICAgICAgc2l6ZV90IGxlbmd0aCA9IFdURl9BUlJBWV9MRU5HVEgoY29t
bWFuZHMpOwogICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCiAgICAg
ICAgICAgIGRpc3BhdGNoTWFwLmFkZChjb21tYW5kc1tpXS5uYW1lLCBjb21tYW5kc1tpXS5oYW5k
bGVyKTsKICAgIH0KCiAgICBIYXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+OjppdGVyYXRvciBp
dCA9IGRpc3BhdGNoTWFwLmZpbmQobWV0aG9kKTsKICAgIGlmIChpdCA9PSBkaXNwYXRjaE1hcC5l
bmQoKSkgewogICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3Io
JmNhbGxJZCwgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCBTdHJp
bmcoIiciKSArICJNZW1vcnkiICsgJy4nICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOwog
ICAgICAgIHJldHVybjsKICAgIH0KCiAgICAoKCp0aGlzKS4qaXQtPnZhbHVlKShjYWxsSWQsICpt
ZXNzYWdlLmdldCgpKTsKfQoKdm9pZCBJbnNwZWN0b3JNZW1vcnlCYWNrZW5kRGlzcGF0Y2hlcjo6
Z2V0RE9NQ291bnRlcnMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYpCnsKICAg
IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6
Y3JlYXRlKCk7CgogICAgaW50IG91dF9kb2N1bWVudHM7CiAgICBpbnQgb3V0X25vZGVzOwogICAg
aW50IG91dF9qc0V2ZW50TGlzdGVuZXJzOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJl
c3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsK
ICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9hZ2VudC0+Z2V0
RE9NQ291bnRlcnMoJmVycm9yLCAmb3V0X2RvY3VtZW50cywgJm91dF9ub2RlcywgJm91dF9qc0V2
ZW50TGlzdGVuZXJzKTsKCiAgICAgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkgewogICAgICAgICAg
ICByZXN1bHQtPnNldE51bWJlcihBU0NJSUxpdGVyYWwoImRvY3VtZW50cyIpLCBvdXRfZG9jdW1l
bnRzKTsKICAgICAgICAgICAgcmVzdWx0LT5zZXROdW1iZXIoQVNDSUlMaXRlcmFsKCJub2RlcyIp
LCBvdXRfbm9kZXMpOwogICAgICAgICAgICByZXN1bHQtPnNldE51bWJlcihBU0NJSUxpdGVyYWwo
ImpzRXZlbnRMaXN0ZW5lcnMiKSwgb3V0X2pzRXZlbnRMaXN0ZW5lcnMpOwogICAgICAgIH0KICAg
IH0KICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5y
ZWxlYXNlKCksIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9CgpQYXNzUmVmUHRy
PEluc3BlY3Rvck5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcj4gSW5zcGVjdG9yTmV0d29ya0JhY2tl
bmREaXNwYXRjaGVyOjpjcmVhdGUoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmRE
aXNwYXRjaGVyLCBJbnNwZWN0b3JOZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2Vu
dCkKewogICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JOZXR3b3JrQmFja2VuZERpc3Bh
dGNoZXIoYmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7Cn0KCkluc3BlY3Rvck5ldHdvcmtCYWNr
ZW5kRGlzcGF0Y2hlcjo6SW5zcGVjdG9yTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyKEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9yTmV0d29ya0Jh
Y2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCiAgICA6IEluc3BlY3RvclN1cHBsZW1lbnRh
bEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQogICAgLCBtX2FnZW50KGFnZW50
KQp7CiAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4o
QVNDSUlMaXRlcmFsKCJOZXR3b3JrIiksIHRoaXMpOwp9Cgp2b2lkIEluc3BlY3Rvck5ldHdvcmtC
YWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0
aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSkKewogICAgUmVmPEluc3Bl
Y3Rvck5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CgogICAgdHlwZWRl
ZiB2b2lkIChJbnNwZWN0b3JOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI6OipDYWxsSGFuZGxlciko
bG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CiAgICB0eXBlZGVm
IEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj4gRGlzcGF0Y2hNYXA7CiAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKERpc3BhdGNoTWFwLCBkaXNwYXRjaE1hcCwgKCkpOwogICAgaWYgKGRpc3BhdGNo
TWFwLmlzRW1wdHkoKSkgewogICAgICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgTWV0aG9kVGFibGUg
ewogICAgICAgICAgICBjb25zdCBjaGFyKiBuYW1lOwogICAgICAgICAgICBDYWxsSGFuZGxlciBo
YW5kbGVyOwogICAgICAgIH0gY29tbWFuZHNbXSA9IHsKICAgICAgICAgICAgeyAiZW5hYmxlIiwg
ICZJbnNwZWN0b3JOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI6OmVuYWJsZSB9LAogICAgICAgICAg
ICB7ICJkaXNhYmxlIiwgICZJbnNwZWN0b3JOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI6OmRpc2Fi
bGUgfSwKICAgICAgICAgICAgeyAic2V0VXNlckFnZW50T3ZlcnJpZGUiLCAgJkluc3BlY3Rvck5l
dHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6c2V0VXNlckFnZW50T3ZlcnJpZGUgfSwKICAgICAgICAg
ICAgeyAic2V0RXh0cmFIVFRQSGVhZGVycyIsICAmSW5zcGVjdG9yTmV0d29ya0JhY2tlbmREaXNw
YXRjaGVyOjpzZXRFeHRyYUhUVFBIZWFkZXJzIH0sCiAgICAgICAgICAgIHsgImdldFJlc3BvbnNl
Qm9keSIsICAmSW5zcGVjdG9yTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyOjpnZXRSZXNwb25zZUJv
ZHkgfSwKICAgICAgICAgICAgeyAicmVwbGF5WEhSIiwgICZJbnNwZWN0b3JOZXR3b3JrQmFja2Vu
ZERpc3BhdGNoZXI6OnJlcGxheVhIUiB9LAogICAgICAgICAgICB7ICJjYW5DbGVhckJyb3dzZXJD
YWNoZSIsICAmSW5zcGVjdG9yTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyOjpjYW5DbGVhckJyb3dz
ZXJDYWNoZSB9LAogICAgICAgICAgICB7ICJjbGVhckJyb3dzZXJDYWNoZSIsICAmSW5zcGVjdG9y
TmV0d29ya0JhY2tlbmREaXNwYXRjaGVyOjpjbGVhckJyb3dzZXJDYWNoZSB9LAogICAgICAgICAg
ICB7ICJjYW5DbGVhckJyb3dzZXJDb29raWVzIiwgICZJbnNwZWN0b3JOZXR3b3JrQmFja2VuZERp
c3BhdGNoZXI6OmNhbkNsZWFyQnJvd3NlckNvb2tpZXMgfSwKICAgICAgICAgICAgeyAiY2xlYXJC
cm93c2VyQ29va2llcyIsICAmSW5zcGVjdG9yTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyOjpjbGVh
ckJyb3dzZXJDb29raWVzIH0sCiAgICAgICAgICAgIHsgInNldENhY2hlRGlzYWJsZWQiLCAgJklu
c3BlY3Rvck5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6c2V0Q2FjaGVEaXNhYmxlZCB9LAogICAg
ICAgIH07CiAgICAgICAgc2l6ZV90IGxlbmd0aCA9IFdURl9BUlJBWV9MRU5HVEgoY29tbWFuZHMp
OwogICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCiAgICAgICAgICAg
IGRpc3BhdGNoTWFwLmFkZChjb21tYW5kc1tpXS5uYW1lLCBjb21tYW5kc1tpXS5oYW5kbGVyKTsK
ICAgIH0KCiAgICBIYXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+OjppdGVyYXRvciBpdCA9IGRp
c3BhdGNoTWFwLmZpbmQobWV0aG9kKTsKICAgIGlmIChpdCA9PSBkaXNwYXRjaE1hcC5lbmQoKSkg
ewogICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJ
ZCwgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCBTdHJpbmcoIici
KSArICJOZXR3b3JrIiArICcuJyArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKICAgICAg
ICByZXR1cm47CiAgICB9CgogICAgKCgqdGhpcykuKml0LT52YWx1ZSkoY2FsbElkLCAqbWVzc2Fn
ZS5nZXQoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyOjplbmFi
bGUobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYpCnsKICAgIFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7Cgog
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVu
Z3RoKCkpIHsKICAgICAgICBtX2FnZW50LT5lbmFibGUoJmVycm9yKTsKCgogICAgfQogICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwg
cHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yTmV0d29y
a0JhY2tlbmREaXNwYXRjaGVyOjpkaXNhYmxlKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JP
YmplY3QmKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5z
cGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3Vs
dCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAg
IGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9hZ2VudC0+ZGlzYWJs
ZSgmZXJyb3IpOwoKCiAgICB9CiAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2Uo
Y2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9y
KTsKfQoKdm9pZCBJbnNwZWN0b3JOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI6OnNldFVzZXJBZ2Vu
dE92ZXJyaWRlKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpCnsK
ICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJh
eTo6Y3JlYXRlKCk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVy
ID0gbWVzc2FnZS5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJh
bXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJh
eSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIFN0cmluZyBp
bl91c2VyQWdlbnQgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFt
c0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJ1c2VyQWdlbnQiKSwgbnVsbHB0ciwgcHJvdG9j
b2xFcnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJv
dG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9hZ2VudC0+c2V0VXNlckFnZW50T3Zl
cnJpZGUoJmVycm9yLCBpbl91c2VyQWdlbnQpOwoKCiAgICB9CiAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBwcm90b2NvbEVycm9y
cy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JOZXR3b3JrQmFja2VuZERpc3Bh
dGNoZXI6OnNldEV4dHJhSFRUUEhlYWRlcnMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9i
amVjdCYgbWVzc2FnZSkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9y
cyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBwYXJhbXNDb250YWluZXIgPSBtZXNzYWdlLmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNw
ZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsK
ICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdl
dCgpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaW5faGVhZGVycyA9IEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjpnZXRPYmplY3QocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVy
YWwoImhlYWRlcnMiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBF
cnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAg
ICAgICAgbV9hZ2VudC0+c2V0RXh0cmFIVFRQSGVhZGVycygmZXJyb3IsIGluX2hlYWRlcnMpOwoK
CiAgICB9CiAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1
bHQucmVsZWFzZSgpLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJ
bnNwZWN0b3JOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI6OmdldFJlc3BvbnNlQm9keShsb25nIGNh
bGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKQp7CiAgICBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAg
IFN0cmluZyBvdXRfYm9keTsKICAgIGJvb2wgb3V0X2Jhc2U2NEVuY29kZWQ7CgogICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gbWVzc2FnZS5nZXRPYmplY3QoInBh
cmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXND
b250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBw
cm90b2NvbEVycm9ycy5nZXQoKTsKICAgIFN0cmluZyBpbl9yZXF1ZXN0SWQgPSBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRl
cmFsKCJyZXF1ZXN0SWQiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAg
ICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7
CiAgICAgICAgbV9hZ2VudC0+Z2V0UmVzcG9uc2VCb2R5KCZlcnJvciwgaW5fcmVxdWVzdElkLCAm
b3V0X2JvZHksICZvdXRfYmFzZTY0RW5jb2RlZCk7CgogICAgICAgIGlmICghZXJyb3IubGVuZ3Ro
KCkpIHsKICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJib2R5Iiks
IG91dF9ib2R5KTsKICAgICAgICAgICAgcmVzdWx0LT5zZXRCb29sZWFuKEFTQ0lJTGl0ZXJhbCgi
YmFzZTY0RW5jb2RlZCIpLCBvdXRfYmFzZTY0RW5jb2RlZCk7CiAgICAgICAgfQogICAgfQogICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2Uo
KSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yTmV0
d29ya0JhY2tlbmREaXNwYXRjaGVyOjpyZXBsYXlYSFIobG9uZyBjYWxsSWQsIGNvbnN0IEluc3Bl
Y3Rvck9iamVjdCYgbWVzc2FnZSkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2Nv
bEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSBtZXNzYWdlLmdldE9iamVjdCgicGFyYW1zIik7CiAg
ICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5n
ZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJy
b3JzLmdldCgpOwogICAgU3RyaW5nIGluX3JlcXVlc3RJZCA9IEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInJlcXVl
c3RJZCIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3Ry
aW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBt
X2FnZW50LT5yZXBsYXlYSFIoJmVycm9yLCBpbl9yZXF1ZXN0SWQpOwoKCiAgICB9CiAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBw
cm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JOZXR3b3Jr
QmFja2VuZERpc3BhdGNoZXI6OmNhbkNsZWFyQnJvd3NlckNhY2hlKGxvbmcgY2FsbElkLCBjb25z
dCBJbnNwZWN0b3JPYmplY3QmKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29s
RXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGJvb2wgb3V0X3Jlc3VsdDsK
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5s
ZW5ndGgoKSkgewogICAgICAgIG1fYWdlbnQtPmNhbkNsZWFyQnJvd3NlckNhY2hlKCZlcnJvciwg
Jm91dF9yZXN1bHQpOwoKICAgICAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgICAg
IHJlc3VsdC0+c2V0Qm9vbGVhbihBU0NJSUxpdGVyYWwoInJlc3VsdCIpLCBvdXRfcmVzdWx0KTsK
ICAgICAgICB9CiAgICB9CiAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2Fs
bElkLCByZXN1bHQucmVsZWFzZSgpLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsK
fQoKdm9pZCBJbnNwZWN0b3JOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI6OmNsZWFyQnJvd3NlckNh
Y2hlKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmKQp7CiAgICBSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoK
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxl
bmd0aCgpKSB7CiAgICAgICAgbV9hZ2VudC0+Y2xlYXJCcm93c2VyQ2FjaGUoJmVycm9yKTsKCgog
ICAgfQogICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0
LnJlbGVhc2UoKSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5z
cGVjdG9yTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyOjpjYW5DbGVhckJyb3dzZXJDb29raWVzKGxv
bmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGJv
b2wgb3V0X3Jlc3VsdDsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXBy
b3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fYWdlbnQtPmNhbkNsZWFyQnJvd3Nl
ckNvb2tpZXMoJmVycm9yLCAmb3V0X3Jlc3VsdCk7CgogICAgICAgIGlmICghZXJyb3IubGVuZ3Ro
KCkpIHsKICAgICAgICAgICAgcmVzdWx0LT5zZXRCb29sZWFuKEFTQ0lJTGl0ZXJhbCgicmVzdWx0
IiksIG91dF9yZXN1bHQpOwogICAgICAgIH0KICAgIH0KICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIHByb3RvY29sRXJyb3JzLnJl
bGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3Rvck5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hl
cjo6Y2xlYXJCcm93c2VyQ29va2llcyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0
JikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3Rv
ckFycmF5OjpjcmVhdGUoKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAo
IXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fYWdlbnQtPmNsZWFyQnJvd3Nl
ckNvb2tpZXMoJmVycm9yKTsKCgogICAgfQogICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJl
c3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgp
LCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyOjpzZXRD
YWNoZURpc2FibGVkKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2Up
CnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JB
cnJheTo6Y3JlYXRlKCk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFp
bmVyID0gbWVzc2FnZS5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBw
YXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JB
cnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIGJvb2wg
aW5fY2FjaGVEaXNhYmxlZCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRCb29sZWFu
KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJjYWNoZURpc2FibGVkIiksIG51bGxw
dHIsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1
bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAg
ICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fYWdlbnQtPnNldENh
Y2hlRGlzYWJsZWQoJmVycm9yLCBpbl9jYWNoZURpc2FibGVkKTsKCgogICAgfQogICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgcHJv
dG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KClBhc3NSZWZQdHI8SW5zcGVjdG9yUGFn
ZUJhY2tlbmREaXNwYXRjaGVyPiBJbnNwZWN0b3JQYWdlQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0
ZShJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIsIEluc3BlY3Rv
clBhZ2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQp7CiAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IEluc3BlY3RvclBhZ2VCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwg
YWdlbnQpKTsKfQoKSW5zcGVjdG9yUGFnZUJhY2tlbmREaXNwYXRjaGVyOjpJbnNwZWN0b3JQYWdl
QmFja2VuZERpc3BhdGNoZXIoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNw
YXRjaGVyLCBJbnNwZWN0b3JQYWdlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKICAg
IDogSW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNo
ZXIpCiAgICAsIG1fYWdlbnQoYWdlbnQpCnsKICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lz
dGVyRGlzcGF0Y2hlckZvckRvbWFpbihBU0NJSUxpdGVyYWwoIlBhZ2UiKSwgdGhpcyk7Cn0KCnZv
aWQgSW5zcGVjdG9yUGFnZUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIGNhbGxJZCwg
Y29uc3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdl
KQp7CiAgICBSZWY8SW5zcGVjdG9yUGFnZUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlz
KTsKCiAgICB0eXBlZGVmIHZvaWQgKEluc3BlY3RvclBhZ2VCYWNrZW5kRGlzcGF0Y2hlcjo6KkNh
bGxIYW5kbGVyKShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsK
ICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPiBEaXNwYXRjaE1hcDsKICAg
IERFRklORV9TVEFUSUNfTE9DQUwoRGlzcGF0Y2hNYXAsIGRpc3BhdGNoTWFwLCAoKSk7CiAgICBp
ZiAoZGlzcGF0Y2hNYXAuaXNFbXB0eSgpKSB7CiAgICAgICAgc3RhdGljIGNvbnN0IHN0cnVjdCBN
ZXRob2RUYWJsZSB7CiAgICAgICAgICAgIGNvbnN0IGNoYXIqIG5hbWU7CiAgICAgICAgICAgIENh
bGxIYW5kbGVyIGhhbmRsZXI7CiAgICAgICAgfSBjb21tYW5kc1tdID0gewogICAgICAgICAgICB7
ICJlbmFibGUiLCAgJkluc3BlY3RvclBhZ2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZW5hYmxlIH0sCiAg
ICAgICAgICAgIHsgImRpc2FibGUiLCAgJkluc3BlY3RvclBhZ2VCYWNrZW5kRGlzcGF0Y2hlcjo6
ZGlzYWJsZSB9LAogICAgICAgICAgICB7ICJhZGRTY3JpcHRUb0V2YWx1YXRlT25Mb2FkIiwgICZJ
bnNwZWN0b3JQYWdlQmFja2VuZERpc3BhdGNoZXI6OmFkZFNjcmlwdFRvRXZhbHVhdGVPbkxvYWQg
fSwKICAgICAgICAgICAgeyAicmVtb3ZlU2NyaXB0VG9FdmFsdWF0ZU9uTG9hZCIsICAmSW5zcGVj
dG9yUGFnZUJhY2tlbmREaXNwYXRjaGVyOjpyZW1vdmVTY3JpcHRUb0V2YWx1YXRlT25Mb2FkIH0s
CiAgICAgICAgICAgIHsgInJlbG9hZCIsICAmSW5zcGVjdG9yUGFnZUJhY2tlbmREaXNwYXRjaGVy
OjpyZWxvYWQgfSwKICAgICAgICAgICAgeyAibmF2aWdhdGUiLCAgJkluc3BlY3RvclBhZ2VCYWNr
ZW5kRGlzcGF0Y2hlcjo6bmF2aWdhdGUgfSwKICAgICAgICAgICAgeyAiZ2V0Q29va2llcyIsICAm
SW5zcGVjdG9yUGFnZUJhY2tlbmREaXNwYXRjaGVyOjpnZXRDb29raWVzIH0sCiAgICAgICAgICAg
IHsgImRlbGV0ZUNvb2tpZSIsICAmSW5zcGVjdG9yUGFnZUJhY2tlbmREaXNwYXRjaGVyOjpkZWxl
dGVDb29raWUgfSwKICAgICAgICAgICAgeyAiZ2V0UmVzb3VyY2VUcmVlIiwgICZJbnNwZWN0b3JQ
YWdlQmFja2VuZERpc3BhdGNoZXI6OmdldFJlc291cmNlVHJlZSB9LAogICAgICAgICAgICB7ICJn
ZXRSZXNvdXJjZUNvbnRlbnQiLCAgJkluc3BlY3RvclBhZ2VCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0
UmVzb3VyY2VDb250ZW50IH0sCiAgICAgICAgICAgIHsgInNlYXJjaEluUmVzb3VyY2UiLCAgJklu
c3BlY3RvclBhZ2VCYWNrZW5kRGlzcGF0Y2hlcjo6c2VhcmNoSW5SZXNvdXJjZSB9LAogICAgICAg
ICAgICB7ICJzZWFyY2hJblJlc291cmNlcyIsICAmSW5zcGVjdG9yUGFnZUJhY2tlbmREaXNwYXRj
aGVyOjpzZWFyY2hJblJlc291cmNlcyB9LAogICAgICAgICAgICB7ICJzZXREb2N1bWVudENvbnRl
bnQiLCAgJkluc3BlY3RvclBhZ2VCYWNrZW5kRGlzcGF0Y2hlcjo6c2V0RG9jdW1lbnRDb250ZW50
IH0sCiAgICAgICAgICAgIHsgImNhbk92ZXJyaWRlRGV2aWNlTWV0cmljcyIsICAmSW5zcGVjdG9y
UGFnZUJhY2tlbmREaXNwYXRjaGVyOjpjYW5PdmVycmlkZURldmljZU1ldHJpY3MgfSwKICAgICAg
ICAgICAgeyAic2V0RGV2aWNlTWV0cmljc092ZXJyaWRlIiwgICZJbnNwZWN0b3JQYWdlQmFja2Vu
ZERpc3BhdGNoZXI6OnNldERldmljZU1ldHJpY3NPdmVycmlkZSB9LAogICAgICAgICAgICB7ICJz
ZXRTaG93UGFpbnRSZWN0cyIsICAmSW5zcGVjdG9yUGFnZUJhY2tlbmREaXNwYXRjaGVyOjpzZXRT
aG93UGFpbnRSZWN0cyB9LAogICAgICAgICAgICB7ICJjYW5TaG93RGVidWdCb3JkZXJzIiwgICZJ
bnNwZWN0b3JQYWdlQmFja2VuZERpc3BhdGNoZXI6OmNhblNob3dEZWJ1Z0JvcmRlcnMgfSwKICAg
ICAgICAgICAgeyAic2V0U2hvd0RlYnVnQm9yZGVycyIsICAmSW5zcGVjdG9yUGFnZUJhY2tlbmRE
aXNwYXRjaGVyOjpzZXRTaG93RGVidWdCb3JkZXJzIH0sCiAgICAgICAgICAgIHsgImNhblNob3dG
UFNDb3VudGVyIiwgICZJbnNwZWN0b3JQYWdlQmFja2VuZERpc3BhdGNoZXI6OmNhblNob3dGUFND
b3VudGVyIH0sCiAgICAgICAgICAgIHsgInNldFNob3dGUFNDb3VudGVyIiwgICZJbnNwZWN0b3JQ
YWdlQmFja2VuZERpc3BhdGNoZXI6OnNldFNob3dGUFNDb3VudGVyIH0sCiAgICAgICAgICAgIHsg
ImNhbkNvbnRpbnVvdXNseVBhaW50IiwgICZJbnNwZWN0b3JQYWdlQmFja2VuZERpc3BhdGNoZXI6
OmNhbkNvbnRpbnVvdXNseVBhaW50IH0sCiAgICAgICAgICAgIHsgInNldENvbnRpbnVvdXNQYWlu
dGluZ0VuYWJsZWQiLCAgJkluc3BlY3RvclBhZ2VCYWNrZW5kRGlzcGF0Y2hlcjo6c2V0Q29udGlu
dW91c1BhaW50aW5nRW5hYmxlZCB9LAogICAgICAgICAgICB7ICJnZXRTY3JpcHRFeGVjdXRpb25T
dGF0dXMiLCAgJkluc3BlY3RvclBhZ2VCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U2NyaXB0RXhlY3V0
aW9uU3RhdHVzIH0sCiAgICAgICAgICAgIHsgInNldFNjcmlwdEV4ZWN1dGlvbkRpc2FibGVkIiwg
ICZJbnNwZWN0b3JQYWdlQmFja2VuZERpc3BhdGNoZXI6OnNldFNjcmlwdEV4ZWN1dGlvbkRpc2Fi
bGVkIH0sCiAgICAgICAgICAgIHsgInNldEdlb2xvY2F0aW9uT3ZlcnJpZGUiLCAgJkluc3BlY3Rv
clBhZ2VCYWNrZW5kRGlzcGF0Y2hlcjo6c2V0R2VvbG9jYXRpb25PdmVycmlkZSB9LAogICAgICAg
ICAgICB7ICJjbGVhckdlb2xvY2F0aW9uT3ZlcnJpZGUiLCAgJkluc3BlY3RvclBhZ2VCYWNrZW5k
RGlzcGF0Y2hlcjo6Y2xlYXJHZW9sb2NhdGlvbk92ZXJyaWRlIH0sCiAgICAgICAgICAgIHsgImNh
bk92ZXJyaWRlR2VvbG9jYXRpb24iLCAgJkluc3BlY3RvclBhZ2VCYWNrZW5kRGlzcGF0Y2hlcjo6
Y2FuT3ZlcnJpZGVHZW9sb2NhdGlvbiB9LAogICAgICAgICAgICB7ICJzZXREZXZpY2VPcmllbnRh
dGlvbk92ZXJyaWRlIiwgICZJbnNwZWN0b3JQYWdlQmFja2VuZERpc3BhdGNoZXI6OnNldERldmlj
ZU9yaWVudGF0aW9uT3ZlcnJpZGUgfSwKICAgICAgICAgICAgeyAiY2xlYXJEZXZpY2VPcmllbnRh
dGlvbk92ZXJyaWRlIiwgICZJbnNwZWN0b3JQYWdlQmFja2VuZERpc3BhdGNoZXI6OmNsZWFyRGV2
aWNlT3JpZW50YXRpb25PdmVycmlkZSB9LAogICAgICAgICAgICB7ICJjYW5PdmVycmlkZURldmlj
ZU9yaWVudGF0aW9uIiwgICZJbnNwZWN0b3JQYWdlQmFja2VuZERpc3BhdGNoZXI6OmNhbk92ZXJy
aWRlRGV2aWNlT3JpZW50YXRpb24gfSwKICAgICAgICAgICAgeyAic2V0VG91Y2hFbXVsYXRpb25F
bmFibGVkIiwgICZJbnNwZWN0b3JQYWdlQmFja2VuZERpc3BhdGNoZXI6OnNldFRvdWNoRW11bGF0
aW9uRW5hYmxlZCB9LAogICAgICAgICAgICB7ICJzZXRFbXVsYXRlZE1lZGlhIiwgICZJbnNwZWN0
b3JQYWdlQmFja2VuZERpc3BhdGNoZXI6OnNldEVtdWxhdGVkTWVkaWEgfSwKICAgICAgICAgICAg
eyAiZ2V0Q29tcG9zaXRpbmdCb3JkZXJzVmlzaWJsZSIsICAmSW5zcGVjdG9yUGFnZUJhY2tlbmRE
aXNwYXRjaGVyOjpnZXRDb21wb3NpdGluZ0JvcmRlcnNWaXNpYmxlIH0sCiAgICAgICAgICAgIHsg
InNldENvbXBvc2l0aW5nQm9yZGVyc1Zpc2libGUiLCAgJkluc3BlY3RvclBhZ2VCYWNrZW5kRGlz
cGF0Y2hlcjo6c2V0Q29tcG9zaXRpbmdCb3JkZXJzVmlzaWJsZSB9LAogICAgICAgICAgICB7ICJj
YXB0dXJlU2NyZWVuc2hvdCIsICAmSW5zcGVjdG9yUGFnZUJhY2tlbmREaXNwYXRjaGVyOjpjYXB0
dXJlU2NyZWVuc2hvdCB9LAogICAgICAgICAgICB7ICJoYW5kbGVKYXZhU2NyaXB0RGlhbG9nIiwg
ICZJbnNwZWN0b3JQYWdlQmFja2VuZERpc3BhdGNoZXI6OmhhbmRsZUphdmFTY3JpcHREaWFsb2cg
fSwKICAgICAgICAgICAgeyAiYXJjaGl2ZSIsICAmSW5zcGVjdG9yUGFnZUJhY2tlbmREaXNwYXRj
aGVyOjphcmNoaXZlIH0sCiAgICAgICAgfTsKICAgICAgICBzaXplX3QgbGVuZ3RoID0gV1RGX0FS
UkFZX0xFTkdUSChjb21tYW5kcyk7CiAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5n
dGg7ICsraSkKICAgICAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKGNvbW1hbmRzW2ldLm5hbWUsIGNv
bW1hbmRzW2ldLmhhbmRsZXIpOwogICAgfQoKICAgIEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxl
cj46Oml0ZXJhdG9yIGl0ID0gZGlzcGF0Y2hNYXAuZmluZChtZXRob2QpOwogICAgaWYgKGl0ID09
IGRpc3BhdGNoTWFwLmVuZCgpKSB7CiAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0
UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9k
Tm90Rm91bmQsIFN0cmluZygiJyIpICsgIlBhZ2UiICsgJy4nICsgbWV0aG9kICsgIicgd2FzIG5v
dCBmb3VuZCIpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAoKCp0aGlzKS4qaXQtPnZhbHVl
KShjYWxsSWQsICptZXNzYWdlLmdldCgpKTsKfQoKdm9pZCBJbnNwZWN0b3JQYWdlQmFja2VuZERp
c3BhdGNoZXI6OmVuYWJsZShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JikKewog
ICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5
OjpjcmVhdGUoKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3Rv
Y29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fYWdlbnQtPmVuYWJsZSgmZXJyb3IpOwoK
CiAgICB9CiAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1
bHQucmVsZWFzZSgpLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJ
bnNwZWN0b3JQYWdlQmFja2VuZERpc3BhdGNoZXI6OmRpc2FibGUobG9uZyBjYWxsSWQsIGNvbnN0
IEluc3BlY3Rvck9iamVjdCYpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xF
cnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5n
IGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2Fn
ZW50LT5kaXNhYmxlKCZlcnJvcik7CgoKICAgIH0KICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNl
bmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIHByb3RvY29sRXJyb3JzLnJlbGVh
c2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvclBhZ2VCYWNrZW5kRGlzcGF0Y2hlcjo6YWRk
U2NyaXB0VG9FdmFsdWF0ZU9uTG9hZChsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0
JiBtZXNzYWdlKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0g
SW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIFR5cGVCdWlsZGVyOjpQYWdlOjpTY3JpcHRJ
ZGVudGlmaWVyIG91dF9pZGVudGlmaWVyOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBh
cmFtc0NvbnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rv
ck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAg
SW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7
CiAgICBTdHJpbmcgaW5fc2NyaXB0U291cmNlID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OmdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgic2NyaXB0U291cmNl
IiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcg
ZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fYWdl
bnQtPmFkZFNjcmlwdFRvRXZhbHVhdGVPbkxvYWQoJmVycm9yLCBpbl9zY3JpcHRTb3VyY2UsICZv
dXRfaWRlbnRpZmllcik7CgogICAgICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICAg
ICAgcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJpZGVudGlmaWVyIiksIG91dF9pZGVu
dGlmaWVyKTsKICAgICAgICB9CiAgICB9CiAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVz
cG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCks
IGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JQYWdlQmFja2VuZERpc3BhdGNoZXI6OnJlbW92ZVNj
cmlwdFRvRXZhbHVhdGVPbkxvYWQobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYg
bWVzc2FnZSkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IElu
c3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJh
bXNDb250YWluZXIgPSBtZXNzYWdlLmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JP
YmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIElu
c3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwog
ICAgU3RyaW5nIGluX2lkZW50aWZpZXIgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0
U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJpZGVudGlmaWVyIiksIG51
bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBy
ZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7
CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fYWdlbnQtPnJl
bW92ZVNjcmlwdFRvRXZhbHVhdGVPbkxvYWQoJmVycm9yLCBpbl9pZGVudGlmaWVyKTsKCgogICAg
fQogICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJl
bGVhc2UoKSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVj
dG9yUGFnZUJhY2tlbmREaXNwYXRjaGVyOjpyZWxvYWQobG9uZyBjYWxsSWQsIGNvbnN0IEluc3Bl
Y3Rvck9iamVjdCYgbWVzc2FnZSkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2Nv
bEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSBtZXNzYWdlLmdldE9iamVjdCgicGFyYW1zIik7CiAg
ICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5n
ZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJy
b3JzLmdldCgpOwogICAgYm9vbCBpZ25vcmVDYWNoZV92YWx1ZUZvdW5kID0gZmFsc2U7CiAgICBi
b29sIGluX2lnbm9yZUNhY2hlID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEJvb2xl
YW4ocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoImlnbm9yZUNhY2hlIiksICZpZ25v
cmVDYWNoZV92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBib29sIHNjcmlwdFRv
RXZhbHVhdGVPbkxvYWRfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgU3RyaW5nIGluX3NjcmlwdFRv
RXZhbHVhdGVPbkxvYWQgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBh
cmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJzY3JpcHRUb0V2YWx1YXRlT25Mb2FkIiks
ICZzY3JpcHRUb0V2YWx1YXRlT25Mb2FkX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsK
ICAgIGJvb2wgc2NyaXB0UHJlcHJvY2Vzc29yX3ZhbHVlRm91bmQgPSBmYWxzZTsKICAgIFN0cmlu
ZyBpbl9zY3JpcHRQcmVwcm9jZXNzb3IgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0
U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJzY3JpcHRQcmVwcm9jZXNz
b3IiKSwgJnNjcmlwdFByZXByb2Nlc3Nvcl92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7
CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+
bGVuZ3RoKCkpIHsKICAgICAgICBtX2FnZW50LT5yZWxvYWQoJmVycm9yLCBpZ25vcmVDYWNoZV92
YWx1ZUZvdW5kID8gJmluX2lnbm9yZUNhY2hlIDogMCwgc2NyaXB0VG9FdmFsdWF0ZU9uTG9hZF92
YWx1ZUZvdW5kID8gJmluX3NjcmlwdFRvRXZhbHVhdGVPbkxvYWQgOiAwLCBzY3JpcHRQcmVwcm9j
ZXNzb3JfdmFsdWVGb3VuZCA/ICZpbl9zY3JpcHRQcmVwcm9jZXNzb3IgOiAwKTsKCgogICAgfQog
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVh
c2UoKSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9y
UGFnZUJhY2tlbmREaXNwYXRjaGVyOjpuYXZpZ2F0ZShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVj
dG9yT2JqZWN0JiBtZXNzYWdlKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29s
RXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2JqZWN0KCJwYXJhbXMiKTsKICAg
IEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdl
dCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJv
cnMuZ2V0KCk7CiAgICBTdHJpbmcgaW5fdXJsID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OmdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgidXJsIiksIG51bGxw
dHIsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1
bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAg
ICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fYWdlbnQtPm5hdmln
YXRlKCZlcnJvciwgaW5fdXJsKTsKCgogICAgfQogICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2Vu
ZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgcHJvdG9jb2xFcnJvcnMucmVsZWFz
ZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yUGFnZUJhY2tlbmREaXNwYXRjaGVyOjpnZXRD
b29raWVzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmKQp7CiAgICBSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgp
OwoKICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OlBhZ2U6OkNvb2tp
ZT4gPiBvdXRfY29va2llczsKICAgIFN0cmluZyBvdXRfY29va2llc1N0cmluZzsKCiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkg
ewogICAgICAgIG1fYWdlbnQtPmdldENvb2tpZXMoJmVycm9yLCBvdXRfY29va2llcywgJm91dF9j
b29raWVzU3RyaW5nKTsKCiAgICAgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkgewogICAgICAgICAg
ICByZXN1bHQtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgiY29va2llcyIpLCBvdXRfY29va2llcyk7
CiAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgiY29va2llc1N0cmlu
ZyIpLCBvdXRfY29va2llc1N0cmluZyk7CiAgICAgICAgfQogICAgfQogICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgcHJvdG9jb2xF
cnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yUGFnZUJhY2tlbmREaXNw
YXRjaGVyOjpkZWxldGVDb29raWUobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYg
bWVzc2FnZSkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IElu
c3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJh
bXNDb250YWluZXIgPSBtZXNzYWdlLmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JP
YmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIElu
c3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwog
ICAgU3RyaW5nIGluX2Nvb2tpZU5hbWUgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0
U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJjb29raWVOYW1lIiksIG51
bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIFN0cmluZyBpbl91cmwgPSBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRl
cmFsKCJ1cmwiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJv
clN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAg
ICAgbV9hZ2VudC0+ZGVsZXRlQ29va2llKCZlcnJvciwgaW5fY29va2llTmFtZSwgaW5fdXJsKTsK
CgogICAgfQogICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVz
dWx0LnJlbGVhc2UoKSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQg
SW5zcGVjdG9yUGFnZUJhY2tlbmREaXNwYXRjaGVyOjpnZXRSZXNvdXJjZVRyZWUobG9uZyBjYWxs
SWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4g
cHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgUmVmUHRyPFR5
cGVCdWlsZGVyOjpQYWdlOjpGcmFtZVJlc291cmNlVHJlZT4gb3V0X2ZyYW1lVHJlZTsKCiAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgo
KSkgewogICAgICAgIG1fYWdlbnQtPmdldFJlc291cmNlVHJlZSgmZXJyb3IsIG91dF9mcmFtZVRy
ZWUpOwoKICAgICAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgICAgIHJlc3VsdC0+
c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJmcmFtZVRyZWUiKSwgb3V0X2ZyYW1lVHJlZSk7CiAgICAg
ICAgfQogICAgfQogICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwg
cmVzdWx0LnJlbGVhc2UoKSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZv
aWQgSW5zcGVjdG9yUGFnZUJhY2tlbmREaXNwYXRjaGVyOjpnZXRSZXNvdXJjZUNvbnRlbnQobG9u
ZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSkKewogICAgUmVmUHRyPElu
c3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsK
CiAgICBTdHJpbmcgb3V0X2NvbnRlbnQ7CiAgICBib29sIG91dF9iYXNlNjRFbmNvZGVkOwoKICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2Jq
ZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0g
cGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3Jz
UHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBTdHJpbmcgaW5fZnJhbWVJZCA9IEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJ
SUxpdGVyYWwoImZyYW1lSWQiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgU3Ry
aW5nIGluX3VybCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1z
Q29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInVybCIpLCBudWxscHRyLCBwcm90b2NvbEVycm9y
c1B0cik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVy
cm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2FnZW50LT5nZXRSZXNvdXJjZUNvbnRlbnQoJmVy
cm9yLCBpbl9mcmFtZUlkLCBpbl91cmwsICZvdXRfY29udGVudCwgJm91dF9iYXNlNjRFbmNvZGVk
KTsKCiAgICAgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkgewogICAgICAgICAgICByZXN1bHQtPnNl
dFN0cmluZyhBU0NJSUxpdGVyYWwoImNvbnRlbnQiKSwgb3V0X2NvbnRlbnQpOwogICAgICAgICAg
ICByZXN1bHQtPnNldEJvb2xlYW4oQVNDSUlMaXRlcmFsKCJiYXNlNjRFbmNvZGVkIiksIG91dF9i
YXNlNjRFbmNvZGVkKTsKICAgICAgICB9CiAgICB9CiAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5z
ZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBwcm90b2NvbEVycm9ycy5yZWxl
YXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JQYWdlQmFja2VuZERpc3BhdGNoZXI6OnNl
YXJjaEluUmVzb3VyY2UobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2Fn
ZSkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3Rv
ckFycmF5OjpjcmVhdGUoKTsKCiAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWls
ZGVyOjpQYWdlOjpTZWFyY2hNYXRjaD4gPiBvdXRfcmVzdWx0OwoKICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2JqZWN0KCJwYXJhbXMiKTsK
ICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVy
LmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xF
cnJvcnMuZ2V0KCk7CiAgICBTdHJpbmcgaW5fZnJhbWVJZCA9IEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoImZyYW1l
SWQiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgU3RyaW5nIGluX3VybCA9IElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCBB
U0NJSUxpdGVyYWwoInVybCIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBTdHJp
bmcgaW5fcXVlcnkgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFt
c0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJxdWVyeSIpLCBudWxscHRyLCBwcm90b2NvbEVy
cm9yc1B0cik7CiAgICBib29sIGNhc2VTZW5zaXRpdmVfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAg
Ym9vbCBpbl9jYXNlU2Vuc2l0aXZlID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEJv
b2xlYW4ocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoImNhc2VTZW5zaXRpdmUiKSwg
JmNhc2VTZW5zaXRpdmVfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgYm9vbCBp
c1JlZ2V4X3ZhbHVlRm91bmQgPSBmYWxzZTsKICAgIGJvb2wgaW5faXNSZWdleCA9IEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjpnZXRCb29sZWFuKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlM
aXRlcmFsKCJpc1JlZ2V4IiksICZpc1JlZ2V4X3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRy
KTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3Jz
LT5sZW5ndGgoKSkgewogICAgICAgIG1fYWdlbnQtPnNlYXJjaEluUmVzb3VyY2UoJmVycm9yLCBp
bl9mcmFtZUlkLCBpbl91cmwsIGluX3F1ZXJ5LCBjYXNlU2Vuc2l0aXZlX3ZhbHVlRm91bmQgPyAm
aW5fY2FzZVNlbnNpdGl2ZSA6IDAsIGlzUmVnZXhfdmFsdWVGb3VuZCA/ICZpbl9pc1JlZ2V4IDog
MCwgb3V0X3Jlc3VsdCk7CgogICAgICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICAg
ICAgcmVzdWx0LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoInJlc3VsdCIpLCBvdXRfcmVzdWx0KTsK
ICAgICAgICB9CiAgICB9CiAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2Fs
bElkLCByZXN1bHQucmVsZWFzZSgpLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsK
fQoKdm9pZCBJbnNwZWN0b3JQYWdlQmFja2VuZERpc3BhdGNoZXI6OnNlYXJjaEluUmVzb3VyY2Vz
KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpCnsKICAgIFJlZlB0
cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRl
KCk7CgogICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6UGFnZTo6U2Vh
cmNoUmVzdWx0PiA+IG91dF9yZXN1bHQ7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFy
YW1zQ29udGFpbmVyID0gbWVzc2FnZS5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9y
T2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJ
bnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsK
ICAgIFN0cmluZyBpbl90ZXh0ID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmlu
ZyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgidGV4dCIpLCBudWxscHRyLCBwcm90
b2NvbEVycm9yc1B0cik7CiAgICBib29sIGNhc2VTZW5zaXRpdmVfdmFsdWVGb3VuZCA9IGZhbHNl
OwogICAgYm9vbCBpbl9jYXNlU2Vuc2l0aXZlID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OmdldEJvb2xlYW4ocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoImNhc2VTZW5zaXRp
dmUiKSwgJmNhc2VTZW5zaXRpdmVfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAg
Ym9vbCBpc1JlZ2V4X3ZhbHVlRm91bmQgPSBmYWxzZTsKICAgIGJvb2wgaW5faXNSZWdleCA9IElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRCb29sZWFuKHBhcmFtc0NvbnRhaW5lclB0ciwg
QVNDSUlMaXRlcmFsKCJpc1JlZ2V4IiksICZpc1JlZ2V4X3ZhbHVlRm91bmQsIHByb3RvY29sRXJy
b3JzUHRyKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29s
RXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fYWdlbnQtPnNlYXJjaEluUmVzb3VyY2VzKCZl
cnJvciwgaW5fdGV4dCwgY2FzZVNlbnNpdGl2ZV92YWx1ZUZvdW5kID8gJmluX2Nhc2VTZW5zaXRp
dmUgOiAwLCBpc1JlZ2V4X3ZhbHVlRm91bmQgPyAmaW5faXNSZWdleCA6IDAsIG91dF9yZXN1bHQp
OwoKICAgICAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgICAgIHJlc3VsdC0+c2V0
VmFsdWUoQVNDSUlMaXRlcmFsKCJyZXN1bHQiKSwgb3V0X3Jlc3VsdCk7CiAgICAgICAgfQogICAg
fQogICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJl
bGVhc2UoKSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVj
dG9yUGFnZUJhY2tlbmREaXNwYXRjaGVyOjpzZXREb2N1bWVudENvbnRlbnQobG9uZyBjYWxsSWQs
IGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSkKewogICAgUmVmUHRyPEluc3BlY3RvckFy
cmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSBtZXNzYWdlLmdldE9iamVjdCgi
cGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFt
c0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9
IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgU3RyaW5nIGluX2ZyYW1lSWQgPSBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRl
cmFsKCJmcmFtZUlkIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIFN0cmluZyBp
bl9odG1sID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250
YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgiaHRtbCIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0
cik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9y
cy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2FnZW50LT5zZXREb2N1bWVudENvbnRlbnQoJmVycm9y
LCBpbl9mcmFtZUlkLCBpbl9odG1sKTsKCgogICAgfQogICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgcHJvdG9jb2xFcnJvcnMucmVs
ZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yUGFnZUJhY2tlbmREaXNwYXRjaGVyOjpj
YW5PdmVycmlkZURldmljZU1ldHJpY3MobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVj
dCYpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0
b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgYm9vbCBvdXRfcmVzdWx0OwoKICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJv
clN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAg
ICAgbV9hZ2VudC0+Y2FuT3ZlcnJpZGVEZXZpY2VNZXRyaWNzKCZlcnJvciwgJm91dF9yZXN1bHQp
OwoKICAgICAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgICAgIHJlc3VsdC0+c2V0
Qm9vbGVhbihBU0NJSUxpdGVyYWwoInJlc3VsdCIpLCBvdXRfcmVzdWx0KTsKICAgICAgICB9CiAg
ICB9CiAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQu
cmVsZWFzZSgpLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNw
ZWN0b3JQYWdlQmFja2VuZERpc3BhdGNoZXI6OnNldERldmljZU1ldHJpY3NPdmVycmlkZShsb25n
IGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKQp7CiAgICBSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoK
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IG1lc3NhZ2UuZ2V0
T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRy
ID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJy
b3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBpbnQgaW5fd2lkdGggPSBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRl
cmFsKCJ3aWR0aCIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBpbnQgaW5faGVp
Z2h0ID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEludChwYXJhbXNDb250YWluZXJQ
dHIsIEFTQ0lJTGl0ZXJhbCgiaGVpZ2h0IiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsK
ICAgIGRvdWJsZSBpbl9mb250U2NhbGVGYWN0b3IgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cjo6Z2V0RG91YmxlKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJmb250U2NhbGVG
YWN0b3IiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgYm9vbCBpbl9maXRXaW5k
b3cgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0Qm9vbGVhbihwYXJhbXNDb250YWlu
ZXJQdHIsIEFTQ0lJTGl0ZXJhbCgiZml0V2luZG93IiksIG51bGxwdHIsIHByb3RvY29sRXJyb3Jz
UHRyKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJy
b3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fYWdlbnQtPnNldERldmljZU1ldHJpY3NPdmVycmlk
ZSgmZXJyb3IsIGluX3dpZHRoLCBpbl9oZWlnaHQsIGluX2ZvbnRTY2FsZUZhY3RvciwgaW5fZml0
V2luZG93KTsKCgogICAgfQogICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNh
bGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7
Cn0KCnZvaWQgSW5zcGVjdG9yUGFnZUJhY2tlbmREaXNwYXRjaGVyOjpzZXRTaG93UGFpbnRSZWN0
cyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKQp7CiAgICBSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0
ZSgpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IG1lc3Nh
Z2UuZ2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFp
bmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3Rv
Y29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBib29sIGluX3Jlc3VsdCA9
IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRCb29sZWFuKHBhcmFtc0NvbnRhaW5lclB0
ciwgQVNDSUlMaXRlcmFsKCJyZXN1bHQiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOwoK
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxl
bmd0aCgpKSB7CiAgICAgICAgbV9hZ2VudC0+c2V0U2hvd1BhaW50UmVjdHMoJmVycm9yLCBpbl9y
ZXN1bHQpOwoKCiAgICB9CiAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2Fs
bElkLCByZXN1bHQucmVsZWFzZSgpLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsK
fQoKdm9pZCBJbnNwZWN0b3JQYWdlQmFja2VuZERpc3BhdGNoZXI6OmNhblNob3dEZWJ1Z0JvcmRl
cnMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYpCnsKICAgIFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7Cgog
ICAgYm9vbCBvdXRfc2hvdzsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAo
IXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fYWdlbnQtPmNhblNob3dEZWJ1
Z0JvcmRlcnMoJmVycm9yLCAmb3V0X3Nob3cpOwoKICAgICAgICBpZiAoIWVycm9yLmxlbmd0aCgp
KSB7CiAgICAgICAgICAgIHJlc3VsdC0+c2V0Qm9vbGVhbihBU0NJSUxpdGVyYWwoInNob3ciKSwg
b3V0X3Nob3cpOwogICAgICAgIH0KICAgIH0KICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRS
ZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIHByb3RvY29sRXJyb3JzLnJlbGVhc2Uo
KSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvclBhZ2VCYWNrZW5kRGlzcGF0Y2hlcjo6c2V0U2hv
d0RlYnVnQm9yZGVycyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdl
KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9y
QXJyYXk6OmNyZWF0ZSgpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRh
aW5lciA9IG1lc3NhZ2UuZ2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCog
cGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9y
QXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBib29s
IGluX3Nob3cgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0Qm9vbGVhbihwYXJhbXND
b250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgic2hvdyIpLCBudWxscHRyLCBwcm90b2NvbEVycm9y
c1B0cik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVy
cm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2FnZW50LT5zZXRTaG93RGVidWdCb3JkZXJzKCZl
cnJvciwgaW5fc2hvdyk7CgoKICAgIH0KICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNw
b25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwg
ZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvclBhZ2VCYWNrZW5kRGlzcGF0Y2hlcjo6Y2FuU2hvd0ZQ
U0NvdW50ZXIobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYpCnsKICAgIFJlZlB0
cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRl
KCk7CgogICAgYm9vbCBvdXRfc2hvdzsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1
bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAg
ICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fYWdlbnQtPmNhblNo
b3dGUFNDb3VudGVyKCZlcnJvciwgJm91dF9zaG93KTsKCiAgICAgICAgaWYgKCFlcnJvci5sZW5n
dGgoKSkgewogICAgICAgICAgICByZXN1bHQtPnNldEJvb2xlYW4oQVNDSUlMaXRlcmFsKCJzaG93
IiksIG91dF9zaG93KTsKICAgICAgICB9CiAgICB9CiAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5z
ZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBwcm90b2NvbEVycm9ycy5yZWxl
YXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JQYWdlQmFja2VuZERpc3BhdGNoZXI6OnNl
dFNob3dGUFNDb3VudGVyKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3Nh
Z2UpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0
b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29u
dGFpbmVyID0gbWVzc2FnZS5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0
KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0
b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIGJv
b2wgaW5fc2hvdyA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRCb29sZWFuKHBhcmFt
c0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJzaG93IiksIG51bGxwdHIsIHByb3RvY29sRXJy
b3JzUHRyKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29s
RXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fYWdlbnQtPnNldFNob3dGUFNDb3VudGVyKCZl
cnJvciwgaW5fc2hvdyk7CgoKICAgIH0KICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNw
b25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwg
ZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvclBhZ2VCYWNrZW5kRGlzcGF0Y2hlcjo6Y2FuQ29udGlu
dW91c2x5UGFpbnQobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYpCnsKICAgIFJl
ZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3Jl
YXRlKCk7CgogICAgYm9vbCBvdXRfdmFsdWU7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9y
OwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2FnZW50LT5j
YW5Db250aW51b3VzbHlQYWludCgmZXJyb3IsICZvdXRfdmFsdWUpOwoKICAgICAgICBpZiAoIWVy
cm9yLmxlbmd0aCgpKSB7CiAgICAgICAgICAgIHJlc3VsdC0+c2V0Qm9vbGVhbihBU0NJSUxpdGVy
YWwoInZhbHVlIiksIG91dF92YWx1ZSk7CiAgICAgICAgfQogICAgfQogICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgcHJvdG9jb2xF
cnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yUGFnZUJhY2tlbmREaXNw
YXRjaGVyOjpzZXRDb250aW51b3VzUGFpbnRpbmdFbmFibGVkKGxvbmcgY2FsbElkLCBjb25zdCBJ
bnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJv
dG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gbWVzc2FnZS5nZXRPYmplY3QoInBhcmFtcyIp
OwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWlu
ZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2Nv
bEVycm9ycy5nZXQoKTsKICAgIGJvb2wgaW5fZW5hYmxlZCA9IEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpnZXRCb29sZWFuKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJlbmFi
bGVkIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJp
bmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1f
YWdlbnQtPnNldENvbnRpbnVvdXNQYWludGluZ0VuYWJsZWQoJmVycm9yLCBpbl9lbmFibGVkKTsK
CgogICAgfQogICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVz
dWx0LnJlbGVhc2UoKSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQg
SW5zcGVjdG9yUGFnZUJhY2tlbmREaXNwYXRjaGVyOjpnZXRTY3JpcHRFeGVjdXRpb25TdGF0dXMo
bG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYpCnsKICAgIFJlZlB0cjxJbnNwZWN0
b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAg
SW5zcGVjdG9yUGFnZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UmVzdWx0OjpFbnVtIG91dF9y
ZXN1bHQ7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVy
cm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2FnZW50LT5nZXRTY3JpcHRFeGVjdXRpb25TdGF0
dXMoJmVycm9yLCAmb3V0X3Jlc3VsdCk7CgogICAgICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsK
ICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJyZXN1bHQiKSwgVHlw
ZUJ1aWxkZXI6OmdldEVudW1Db25zdGFudFZhbHVlKG91dF9yZXN1bHQpKTsKICAgICAgICB9CiAg
ICB9CiAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQu
cmVsZWFzZSgpLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNw
ZWN0b3JQYWdlQmFja2VuZERpc3BhdGNoZXI6OnNldFNjcmlwdEV4ZWN1dGlvbkRpc2FibGVkKGxv
bmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpCnsKICAgIFJlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7
CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gbWVzc2FnZS5n
ZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQ
dHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xF
cnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIGJvb2wgaW5fdmFsdWUgPSBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0Qm9vbGVhbihwYXJhbXNDb250YWluZXJQdHIsIEFT
Q0lJTGl0ZXJhbCgidmFsdWUiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgp
KSB7CiAgICAgICAgbV9hZ2VudC0+c2V0U2NyaXB0RXhlY3V0aW9uRGlzYWJsZWQoJmVycm9yLCBp
bl92YWx1ZSk7CgoKICAgIH0KICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShj
YWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3Ip
Owp9Cgp2b2lkIEluc3BlY3RvclBhZ2VCYWNrZW5kRGlzcGF0Y2hlcjo6c2V0R2VvbG9jYXRpb25P
dmVycmlkZShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKQp7CiAg
ICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6
OmNyZWF0ZSgpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9
IG1lc3NhZ2UuZ2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1z
Q29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkq
IHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBib29sIGxhdGl0
dWRlX3ZhbHVlRm91bmQgPSBmYWxzZTsKICAgIGRvdWJsZSBpbl9sYXRpdHVkZSA9IEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjpnZXREb3VibGUocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxp
dGVyYWwoImxhdGl0dWRlIiksICZsYXRpdHVkZV92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0
cik7CiAgICBib29sIGxvbmdpdHVkZV92YWx1ZUZvdW5kID0gZmFsc2U7CiAgICBkb3VibGUgaW5f
bG9uZ2l0dWRlID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldERvdWJsZShwYXJhbXND
b250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgibG9uZ2l0dWRlIiksICZsb25naXR1ZGVfdmFsdWVG
b3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgYm9vbCBhY2N1cmFjeV92YWx1ZUZvdW5kID0g
ZmFsc2U7CiAgICBkb3VibGUgaW5fYWNjdXJhY3kgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cjo6Z2V0RG91YmxlKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJhY2N1cmFjeSIp
LCAmYWNjdXJhY3lfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBF
cnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAg
ICAgICAgbV9hZ2VudC0+c2V0R2VvbG9jYXRpb25PdmVycmlkZSgmZXJyb3IsIGxhdGl0dWRlX3Zh
bHVlRm91bmQgPyAmaW5fbGF0aXR1ZGUgOiAwLCBsb25naXR1ZGVfdmFsdWVGb3VuZCA/ICZpbl9s
b25naXR1ZGUgOiAwLCBhY2N1cmFjeV92YWx1ZUZvdW5kID8gJmluX2FjY3VyYWN5IDogMCk7CgoK
ICAgIH0KICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3Vs
dC5yZWxlYXNlKCksIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lkIElu
c3BlY3RvclBhZ2VCYWNrZW5kRGlzcGF0Y2hlcjo6Y2xlYXJHZW9sb2NhdGlvbk92ZXJyaWRlKGxv
bmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgp
KSB7CiAgICAgICAgbV9hZ2VudC0+Y2xlYXJHZW9sb2NhdGlvbk92ZXJyaWRlKCZlcnJvcik7CgoK
ICAgIH0KICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3Vs
dC5yZWxlYXNlKCksIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lkIElu
c3BlY3RvclBhZ2VCYWNrZW5kRGlzcGF0Y2hlcjo6Y2FuT3ZlcnJpZGVHZW9sb2NhdGlvbihsb25n
IGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JikKewogICAgUmVmUHRyPEluc3BlY3RvckFy
cmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBib29s
IG91dF9yZXN1bHQ7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90
b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2FnZW50LT5jYW5PdmVycmlkZUdlb2xv
Y2F0aW9uKCZlcnJvciwgJm91dF9yZXN1bHQpOwoKICAgICAgICBpZiAoIWVycm9yLmxlbmd0aCgp
KSB7CiAgICAgICAgICAgIHJlc3VsdC0+c2V0Qm9vbGVhbihBU0NJSUxpdGVyYWwoInJlc3VsdCIp
LCBvdXRfcmVzdWx0KTsKICAgICAgICB9CiAgICB9CiAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5z
ZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBwcm90b2NvbEVycm9ycy5yZWxl
YXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JQYWdlQmFja2VuZERpc3BhdGNoZXI6OnNl
dERldmljZU9yaWVudGF0aW9uT3ZlcnJpZGUobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9i
amVjdCYgbWVzc2FnZSkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9y
cyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBwYXJhbXNDb250YWluZXIgPSBtZXNzYWdlLmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNw
ZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsK
ICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdl
dCgpOwogICAgZG91YmxlIGluX2FscGhhID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6Omdl
dERvdWJsZShwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgiYWxwaGEiKSwgbnVsbHB0
ciwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgZG91YmxlIGluX2JldGEgPSBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjo6Z2V0RG91YmxlKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFs
KCJiZXRhIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGRvdWJsZSBpbl9nYW1t
YSA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXREb3VibGUocGFyYW1zQ29udGFpbmVy
UHRyLCBBU0NJSUxpdGVyYWwoImdhbW1hIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsK
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5s
ZW5ndGgoKSkgewogICAgICAgIG1fYWdlbnQtPnNldERldmljZU9yaWVudGF0aW9uT3ZlcnJpZGUo
JmVycm9yLCBpbl9hbHBoYSwgaW5fYmV0YSwgaW5fZ2FtbWEpOwoKCiAgICB9CiAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBwcm90
b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JQYWdlQmFja2Vu
ZERpc3BhdGNoZXI6OmNsZWFyRGV2aWNlT3JpZW50YXRpb25PdmVycmlkZShsb25nIGNhbGxJZCwg
Y29uc3QgSW5zcGVjdG9yT2JqZWN0JikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90
b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JT
dHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAg
IG1fYWdlbnQtPmNsZWFyRGV2aWNlT3JpZW50YXRpb25PdmVycmlkZSgmZXJyb3IpOwoKCiAgICB9
CiAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVs
ZWFzZSgpLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0
b3JQYWdlQmFja2VuZERpc3BhdGNoZXI6OmNhbk92ZXJyaWRlRGV2aWNlT3JpZW50YXRpb24obG9u
ZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgYm9v
bCBvdXRfcmVzdWx0OwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJv
dG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9hZ2VudC0+Y2FuT3ZlcnJpZGVEZXZp
Y2VPcmllbnRhdGlvbigmZXJyb3IsICZvdXRfcmVzdWx0KTsKCiAgICAgICAgaWYgKCFlcnJvci5s
ZW5ndGgoKSkgewogICAgICAgICAgICByZXN1bHQtPnNldEJvb2xlYW4oQVNDSUlMaXRlcmFsKCJy
ZXN1bHQiKSwgb3V0X3Jlc3VsdCk7CiAgICAgICAgfQogICAgfQogICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgcHJvdG9jb2xFcnJv
cnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yUGFnZUJhY2tlbmREaXNwYXRj
aGVyOjpzZXRUb3VjaEVtdWxhdGlvbkVuYWJsZWQobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rv
ck9iamVjdCYgbWVzc2FnZSkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVy
cm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBwYXJhbXNDb250YWluZXIgPSBtZXNzYWdlLmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJ
bnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQo
KTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3Jz
LmdldCgpOwogICAgYm9vbCBpbl9lbmFibGVkID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OmdldEJvb2xlYW4ocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoImVuYWJsZWQiKSwg
bnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJv
cjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9hZ2VudC0+
c2V0VG91Y2hFbXVsYXRpb25FbmFibGVkKCZlcnJvciwgaW5fZW5hYmxlZCk7CgoKICAgIH0KICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNl
KCksIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvclBh
Z2VCYWNrZW5kRGlzcGF0Y2hlcjo6c2V0RW11bGF0ZWRNZWRpYShsb25nIGNhbGxJZCwgY29uc3Qg
SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHBy
b3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2JqZWN0KCJwYXJhbXMi
KTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFp
bmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9j
b2xFcnJvcnMuZ2V0KCk7CiAgICBTdHJpbmcgaW5fbWVkaWEgPSBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJtZWRp
YSIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5n
IGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2Fn
ZW50LT5zZXRFbXVsYXRlZE1lZGlhKCZlcnJvciwgaW5fbWVkaWEpOwoKCiAgICB9CiAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBw
cm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JQYWdlQmFj
a2VuZERpc3BhdGNoZXI6OmdldENvbXBvc2l0aW5nQm9yZGVyc1Zpc2libGUobG9uZyBjYWxsSWQs
IGNvbnN0IEluc3BlY3Rvck9iamVjdCYpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJv
dG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgYm9vbCBvdXRfcmVz
dWx0OwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJv
cnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9hZ2VudC0+Z2V0Q29tcG9zaXRpbmdCb3JkZXJzVmlz
aWJsZSgmZXJyb3IsICZvdXRfcmVzdWx0KTsKCiAgICAgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkg
ewogICAgICAgICAgICByZXN1bHQtPnNldEJvb2xlYW4oQVNDSUlMaXRlcmFsKCJyZXN1bHQiKSwg
b3V0X3Jlc3VsdCk7CiAgICAgICAgfQogICAgfQogICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2Vu
ZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgcHJvdG9jb2xFcnJvcnMucmVsZWFz
ZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yUGFnZUJhY2tlbmREaXNwYXRjaGVyOjpzZXRD
b21wb3NpdGluZ0JvcmRlcnNWaXNpYmxlKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmpl
Y3QmIG1lc3NhZ2UpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMg
PSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cGFyYW1zQ29udGFpbmVyID0gbWVzc2FnZS5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVj
dG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAg
ICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQo
KTsKICAgIGJvb2wgaW5fdmlzaWJsZSA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRC
b29sZWFuKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJ2aXNpYmxlIiksIG51bGxw
dHIsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1
bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAg
ICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fYWdlbnQtPnNldENv
bXBvc2l0aW5nQm9yZGVyc1Zpc2libGUoJmVycm9yLCBpbl92aXNpYmxlKTsKCgogICAgfQogICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2Uo
KSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yUGFn
ZUJhY2tlbmREaXNwYXRjaGVyOjpjYXB0dXJlU2NyZWVuc2hvdChsb25nIGNhbGxJZCwgY29uc3Qg
SW5zcGVjdG9yT2JqZWN0JikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVy
cm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBTdHJpbmcgb3V0X2RhdGE7Cgog
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVu
Z3RoKCkpIHsKICAgICAgICBtX2FnZW50LT5jYXB0dXJlU2NyZWVuc2hvdCgmZXJyb3IsICZvdXRf
ZGF0YSk7CgogICAgICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICAgICAgcmVzdWx0
LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJkYXRhIiksIG91dF9kYXRhKTsKICAgICAgICB9CiAg
ICB9CiAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQu
cmVsZWFzZSgpLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNw
ZWN0b3JQYWdlQmFja2VuZERpc3BhdGNoZXI6OmhhbmRsZUphdmFTY3JpcHREaWFsb2cobG9uZyBj
YWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSkKewogICAgUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSBtZXNzYWdlLmdldE9i
amVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9
IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9y
c1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgYm9vbCBpbl9hY2NlcHQgPSBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0Qm9vbGVhbihwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJ
TGl0ZXJhbCgiYWNjZXB0IiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wg
cHJvbXB0VGV4dF92YWx1ZUZvdW5kID0gZmFsc2U7CiAgICBTdHJpbmcgaW5fcHJvbXB0VGV4dCA9
IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRy
LCBBU0NJSUxpdGVyYWwoInByb21wdFRleHQiKSwgJnByb21wdFRleHRfdmFsdWVGb3VuZCwgcHJv
dG9jb2xFcnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICgh
cHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9hZ2VudC0+aGFuZGxlSmF2YVNj
cmlwdERpYWxvZygmZXJyb3IsIGluX2FjY2VwdCwgcHJvbXB0VGV4dF92YWx1ZUZvdW5kID8gJmlu
X3Byb21wdFRleHQgOiAwKTsKCgogICAgfQogICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJl
c3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgp
LCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yUGFnZUJhY2tlbmREaXNwYXRjaGVyOjphcmNoaXZl
KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmKQp7CiAgICBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAg
IFN0cmluZyBvdXRfZGF0YTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAo
IXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fYWdlbnQtPmFyY2hpdmUoJmVy
cm9yLCAmb3V0X2RhdGEpOwoKICAgICAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAg
ICAgIHJlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgiZGF0YSIpLCBvdXRfZGF0YSk7CiAg
ICAgICAgfQogICAgfQogICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJ
ZCwgcmVzdWx0LnJlbGVhc2UoKSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0K
CiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKClBhc3NSZWZQdHI8SW5zcGVjdG9yUHJv
ZmlsZXJCYWNrZW5kRGlzcGF0Y2hlcj4gSW5zcGVjdG9yUHJvZmlsZXJCYWNrZW5kRGlzcGF0Y2hl
cjo6Y3JlYXRlKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwg
SW5zcGVjdG9yUHJvZmlsZXJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQp7CiAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvclByb2ZpbGVyQmFja2VuZERpc3BhdGNoZXIoYmFj
a2VuZERpc3BhdGNoZXIsIGFnZW50KSk7Cn0KCkluc3BlY3RvclByb2ZpbGVyQmFja2VuZERpc3Bh
dGNoZXI6Okluc3BlY3RvclByb2ZpbGVyQmFja2VuZERpc3BhdGNoZXIoSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyLCBJbnNwZWN0b3JQcm9maWxlckJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlciogYWdlbnQpCiAgICA6IEluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tl
bmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQogICAgLCBtX2FnZW50KGFnZW50KQp7CiAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oQVNDSUlM
aXRlcmFsKCJQcm9maWxlciIpLCB0aGlzKTsKfQoKdm9pZCBJbnNwZWN0b3JQcm9maWxlckJhY2tl
bmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2Qs
IFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKQp7CiAgICBSZWY8SW5zcGVjdG9y
UHJvZmlsZXJCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CgogICAgdHlwZWRlZiB2
b2lkIChJbnNwZWN0b3JQcm9maWxlckJhY2tlbmREaXNwYXRjaGVyOjoqQ2FsbEhhbmRsZXIpKGxv
bmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwogICAgdHlwZWRlZiBI
YXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+IERpc3BhdGNoTWFwOwogICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChEaXNwYXRjaE1hcCwgZGlzcGF0Y2hNYXAsICgpKTsKICAgIGlmIChkaXNwYXRjaE1h
cC5pc0VtcHR5KCkpIHsKICAgICAgICBzdGF0aWMgY29uc3Qgc3RydWN0IE1ldGhvZFRhYmxlIHsK
ICAgICAgICAgICAgY29uc3QgY2hhciogbmFtZTsKICAgICAgICAgICAgQ2FsbEhhbmRsZXIgaGFu
ZGxlcjsKICAgICAgICB9IGNvbW1hbmRzW10gPSB7CiAgICAgICAgICAgIHsgImNhdXNlc1JlY29t
cGlsYXRpb24iLCAgJkluc3BlY3RvclByb2ZpbGVyQmFja2VuZERpc3BhdGNoZXI6OmNhdXNlc1Jl
Y29tcGlsYXRpb24gfSwKICAgICAgICAgICAgeyAiaXNTYW1wbGluZyIsICAmSW5zcGVjdG9yUHJv
ZmlsZXJCYWNrZW5kRGlzcGF0Y2hlcjo6aXNTYW1wbGluZyB9LAogICAgICAgICAgICB7ICJoYXNI
ZWFwUHJvZmlsZXIiLCAgJkluc3BlY3RvclByb2ZpbGVyQmFja2VuZERpc3BhdGNoZXI6Omhhc0hl
YXBQcm9maWxlciB9LAogICAgICAgICAgICB7ICJlbmFibGUiLCAgJkluc3BlY3RvclByb2ZpbGVy
QmFja2VuZERpc3BhdGNoZXI6OmVuYWJsZSB9LAogICAgICAgICAgICB7ICJkaXNhYmxlIiwgICZJ
bnNwZWN0b3JQcm9maWxlckJhY2tlbmREaXNwYXRjaGVyOjpkaXNhYmxlIH0sCiAgICAgICAgICAg
IHsgInN0YXJ0IiwgICZJbnNwZWN0b3JQcm9maWxlckJhY2tlbmREaXNwYXRjaGVyOjpzdGFydCB9
LAogICAgICAgICAgICB7ICJzdG9wIiwgICZJbnNwZWN0b3JQcm9maWxlckJhY2tlbmREaXNwYXRj
aGVyOjpzdG9wIH0sCiAgICAgICAgICAgIHsgImdldFByb2ZpbGVIZWFkZXJzIiwgICZJbnNwZWN0
b3JQcm9maWxlckJhY2tlbmREaXNwYXRjaGVyOjpnZXRQcm9maWxlSGVhZGVycyB9LAogICAgICAg
ICAgICB7ICJnZXRDUFVQcm9maWxlIiwgICZJbnNwZWN0b3JQcm9maWxlckJhY2tlbmREaXNwYXRj
aGVyOjpnZXRDUFVQcm9maWxlIH0sCiAgICAgICAgICAgIHsgImdldEhlYXBTbmFwc2hvdCIsICAm
SW5zcGVjdG9yUHJvZmlsZXJCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0SGVhcFNuYXBzaG90IH0sCiAg
ICAgICAgICAgIHsgInJlbW92ZVByb2ZpbGUiLCAgJkluc3BlY3RvclByb2ZpbGVyQmFja2VuZERp
c3BhdGNoZXI6OnJlbW92ZVByb2ZpbGUgfSwKICAgICAgICAgICAgeyAiY2xlYXJQcm9maWxlcyIs
ICAmSW5zcGVjdG9yUHJvZmlsZXJCYWNrZW5kRGlzcGF0Y2hlcjo6Y2xlYXJQcm9maWxlcyB9LAog
ICAgICAgICAgICB7ICJ0YWtlSGVhcFNuYXBzaG90IiwgICZJbnNwZWN0b3JQcm9maWxlckJhY2tl
bmREaXNwYXRjaGVyOjp0YWtlSGVhcFNuYXBzaG90IH0sCiAgICAgICAgICAgIHsgImNvbGxlY3RH
YXJiYWdlIiwgICZJbnNwZWN0b3JQcm9maWxlckJhY2tlbmREaXNwYXRjaGVyOjpjb2xsZWN0R2Fy
YmFnZSB9LAogICAgICAgICAgICB7ICJnZXRPYmplY3RCeUhlYXBPYmplY3RJZCIsICAmSW5zcGVj
dG9yUHJvZmlsZXJCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0T2JqZWN0QnlIZWFwT2JqZWN0SWQgfSwK
ICAgICAgICAgICAgeyAiZ2V0SGVhcE9iamVjdElkIiwgICZJbnNwZWN0b3JQcm9maWxlckJhY2tl
bmREaXNwYXRjaGVyOjpnZXRIZWFwT2JqZWN0SWQgfSwKICAgICAgICB9OwogICAgICAgIHNpemVf
dCBsZW5ndGggPSBXVEZfQVJSQVlfTEVOR1RIKGNvbW1hbmRzKTsKICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQogICAgICAgICAgICBkaXNwYXRjaE1hcC5hZGQoY29t
bWFuZHNbaV0ubmFtZSwgY29tbWFuZHNbaV0uaGFuZGxlcik7CiAgICB9CgogICAgSGFzaE1hcDxT
dHJpbmcsIENhbGxIYW5kbGVyPjo6aXRlcmF0b3IgaXQgPSBkaXNwYXRjaE1hcC5maW5kKG1ldGhv
ZCk7CiAgICBpZiAoaXQgPT0gZGlzcGF0Y2hNYXAuZW5kKCkpIHsKICAgICAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgU3RyaW5nKCInIikgKyAiUHJvZmlsZXIiICsgJy4n
ICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAg
ICAoKCp0aGlzKS4qaXQtPnZhbHVlKShjYWxsSWQsICptZXNzYWdlLmdldCgpKTsKfQoKdm9pZCBJ
bnNwZWN0b3JQcm9maWxlckJhY2tlbmREaXNwYXRjaGVyOjpjYXVzZXNSZWNvbXBpbGF0aW9uKGxv
bmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGJv
b2wgb3V0X3Jlc3VsdDsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXBy
b3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fYWdlbnQtPmNhdXNlc1JlY29tcGls
YXRpb24oJmVycm9yLCAmb3V0X3Jlc3VsdCk7CgogICAgICAgIGlmICghZXJyb3IubGVuZ3RoKCkp
IHsKICAgICAgICAgICAgcmVzdWx0LT5zZXRCb29sZWFuKEFTQ0lJTGl0ZXJhbCgicmVzdWx0Iiks
IG91dF9yZXN1bHQpOwogICAgICAgIH0KICAgIH0KICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNl
bmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIHByb3RvY29sRXJyb3JzLnJlbGVh
c2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvclByb2ZpbGVyQmFja2VuZERpc3BhdGNoZXI6
OmlzU2FtcGxpbmcobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYpCnsKICAgIFJl
ZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3Jl
YXRlKCk7CgogICAgYm9vbCBvdXRfcmVzdWx0OwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJv
cjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9hZ2VudC0+
aXNTYW1wbGluZygmZXJyb3IsICZvdXRfcmVzdWx0KTsKCiAgICAgICAgaWYgKCFlcnJvci5sZW5n
dGgoKSkgewogICAgICAgICAgICByZXN1bHQtPnNldEJvb2xlYW4oQVNDSUlMaXRlcmFsKCJyZXN1
bHQiKSwgb3V0X3Jlc3VsdCk7CiAgICAgICAgfQogICAgfQogICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgcHJvdG9jb2xFcnJvcnMu
cmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yUHJvZmlsZXJCYWNrZW5kRGlzcGF0
Y2hlcjo6aGFzSGVhcFByb2ZpbGVyKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3Qm
KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9y
QXJyYXk6OmNyZWF0ZSgpOwoKICAgIGJvb2wgb3V0X3Jlc3VsdDsKCiAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JT
dHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAg
IG1fYWdlbnQtPmhhc0hlYXBQcm9maWxlcigmZXJyb3IsICZvdXRfcmVzdWx0KTsKCiAgICAgICAg
aWYgKCFlcnJvci5sZW5ndGgoKSkgewogICAgICAgICAgICByZXN1bHQtPnNldEJvb2xlYW4oQVND
SUlMaXRlcmFsKCJyZXN1bHQiKSwgb3V0X3Jlc3VsdCk7CiAgICAgICAgfQogICAgfQogICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwg
cHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yUHJvZmls
ZXJCYWNrZW5kRGlzcGF0Y2hlcjo6ZW5hYmxlKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JP
YmplY3QmKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5z
cGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3Vs
dCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAg
IGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9hZ2VudC0+ZW5hYmxl
KCZlcnJvcik7CgoKICAgIH0KICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShj
YWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3Ip
Owp9Cgp2b2lkIEluc3BlY3RvclByb2ZpbGVyQmFja2VuZERpc3BhdGNoZXI6OmRpc2FibGUobG9u
ZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
ICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkp
IHsKICAgICAgICBtX2FnZW50LT5kaXNhYmxlKCZlcnJvcik7CgoKICAgIH0KICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIHByb3Rv
Y29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvclByb2ZpbGVyQmFj
a2VuZERpc3BhdGNoZXI6OnN0YXJ0KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3Qm
KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9y
QXJyYXk6OmNyZWF0ZSgpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICgh
cHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9hZ2VudC0+c3RhcnQoJmVycm9y
KTsKCgogICAgfQogICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwg
cmVzdWx0LnJlbGVhc2UoKSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZv
aWQgSW5zcGVjdG9yUHJvZmlsZXJCYWNrZW5kRGlzcGF0Y2hlcjo6c3RvcChsb25nIGNhbGxJZCwg
Y29uc3QgSW5zcGVjdG9yT2JqZWN0JikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90
b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JT
dHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAg
IG1fYWdlbnQtPnN0b3AoJmVycm9yKTsKCgogICAgfQogICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgcHJvdG9jb2xFcnJvcnMucmVs
ZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yUHJvZmlsZXJCYWNrZW5kRGlzcGF0Y2hl
cjo6Z2V0UHJvZmlsZUhlYWRlcnMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYp
CnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JB
cnJheTo6Y3JlYXRlKCk7CgogICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRl
cjo6UHJvZmlsZXI6OlByb2ZpbGVIZWFkZXI+ID4gb3V0X2hlYWRlcnM7CgogICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVy
cm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAg
ICAgICBtX2FnZW50LT5nZXRQcm9maWxlSGVhZGVycygmZXJyb3IsIG91dF9oZWFkZXJzKTsKCiAg
ICAgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkgewogICAgICAgICAgICByZXN1bHQtPnNldFZhbHVl
KEFTQ0lJTGl0ZXJhbCgiaGVhZGVycyIpLCBvdXRfaGVhZGVycyk7CiAgICAgICAgfQogICAgfQog
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVh
c2UoKSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9y
UHJvZmlsZXJCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0Q1BVUHJvZmlsZShsb25nIGNhbGxJZCwgY29u
c3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIFJlZlB0cjxU
eXBlQnVpbGRlcjo6UHJvZmlsZXI6OkNQVVByb2ZpbGU+IG91dF9wcm9maWxlOwoKICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2JqZWN0KCJw
YXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1z
Q29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0g
cHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBpbnQgaW5fdWlkID0gSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6OmdldEludChwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgidWlkIiks
IG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJy
b3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fYWdlbnQt
PmdldENQVVByb2ZpbGUoJmVycm9yLCBpbl91aWQsIG91dF9wcm9maWxlKTsKCiAgICAgICAgaWYg
KCFlcnJvci5sZW5ndGgoKSkgewogICAgICAgICAgICByZXN1bHQtPnNldFZhbHVlKEFTQ0lJTGl0
ZXJhbCgicHJvZmlsZSIpLCBvdXRfcHJvZmlsZSk7CiAgICAgICAgfQogICAgfQogICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgcHJv
dG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yUHJvZmlsZXJC
YWNrZW5kRGlzcGF0Y2hlcjo6Z2V0SGVhcFNuYXBzaG90KGxvbmcgY2FsbElkLCBjb25zdCBJbnNw
ZWN0b3JPYmplY3QmIG1lc3NhZ2UpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9j
b2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gbWVzc2FnZS5nZXRPYmplY3QoInBhcmFtcyIpOwog
ICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIu
Z2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVy
cm9ycy5nZXQoKTsKICAgIGludCBpbl91aWQgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
Z2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJ1aWQiKSwgbnVsbHB0ciwg
cHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlm
ICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9hZ2VudC0+Z2V0SGVhcFNu
YXBzaG90KCZlcnJvciwgaW5fdWlkKTsKCgogICAgfQogICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgcHJvdG9jb2xFcnJvcnMucmVs
ZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yUHJvZmlsZXJCYWNrZW5kRGlzcGF0Y2hl
cjo6cmVtb3ZlUHJvZmlsZShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNz
YWdlKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVj
dG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0Nv
bnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVj
dCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVj
dG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBT
dHJpbmcgaW5fdHlwZSA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFy
YW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInR5cGUiKSwgbnVsbHB0ciwgcHJvdG9jb2xF
cnJvcnNQdHIpOwogICAgaW50IGluX3VpZCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpn
ZXRJbnQocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInVpZCIpLCBudWxscHRyLCBw
cm90b2NvbEVycm9yc1B0cik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYg
KCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2FnZW50LT5yZW1vdmVQcm9m
aWxlKCZlcnJvciwgaW5fdHlwZSwgaW5fdWlkKTsKCgogICAgfQogICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgcHJvdG9jb2xFcnJv
cnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yUHJvZmlsZXJCYWNrZW5kRGlz
cGF0Y2hlcjo6Y2xlYXJQcm9maWxlcyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0
JikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3Rv
ckFycmF5OjpjcmVhdGUoKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAo
IXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fYWdlbnQtPmNsZWFyUHJvZmls
ZXMoJmVycm9yKTsKCgogICAgfQogICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNl
KGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJv
cik7Cn0KCnZvaWQgSW5zcGVjdG9yUHJvZmlsZXJCYWNrZW5kRGlzcGF0Y2hlcjo6dGFrZUhlYXBT
bmFwc2hvdChsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKQp7CiAg
ICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6
OmNyZWF0ZSgpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9
IG1lc3NhZ2UuZ2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1z
Q29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkq
IHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBib29sIHJlcG9y
dFByb2dyZXNzX3ZhbHVlRm91bmQgPSBmYWxzZTsKICAgIGJvb2wgaW5fcmVwb3J0UHJvZ3Jlc3Mg
PSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0Qm9vbGVhbihwYXJhbXNDb250YWluZXJQ
dHIsIEFTQ0lJTGl0ZXJhbCgicmVwb3J0UHJvZ3Jlc3MiKSwgJnJlcG9ydFByb2dyZXNzX3ZhbHVl
Rm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBy
ZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7
CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fYWdlbnQtPnRh
a2VIZWFwU25hcHNob3QoJmVycm9yLCByZXBvcnRQcm9ncmVzc192YWx1ZUZvdW5kID8gJmluX3Jl
cG9ydFByb2dyZXNzIDogMCk7CgoKICAgIH0KICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRS
ZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIHByb3RvY29sRXJyb3JzLnJlbGVhc2Uo
KSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvclByb2ZpbGVyQmFja2VuZERpc3BhdGNoZXI6OmNv
bGxlY3RHYXJiYWdlKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmKQp7CiAgICBS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNy
ZWF0ZSgpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xF
cnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9hZ2VudC0+Y29sbGVjdEdhcmJhZ2UoJmVycm9y
KTsKCgogICAgfQogICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwg
cmVzdWx0LnJlbGVhc2UoKSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZv
aWQgSW5zcGVjdG9yUHJvZmlsZXJCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0T2JqZWN0QnlIZWFwT2Jq
ZWN0SWQobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSkKewogICAg
UmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5Ojpj
cmVhdGUoKTsKCiAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4g
b3V0X3Jlc3VsdDsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIg
PSBtZXNzYWdlLmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFt
c0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5
KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgU3RyaW5nIGlu
X29iamVjdElkID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXND
b250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgib2JqZWN0SWQiKSwgbnVsbHB0ciwgcHJvdG9jb2xF
cnJvcnNQdHIpOwogICAgYm9vbCBvYmplY3RHcm91cF92YWx1ZUZvdW5kID0gZmFsc2U7CiAgICBT
dHJpbmcgaW5fb2JqZWN0R3JvdXAgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3Ry
aW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJvYmplY3RHcm91cCIpLCAmb2Jq
ZWN0R3JvdXBfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJv
clN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAg
ICAgbV9hZ2VudC0+Z2V0T2JqZWN0QnlIZWFwT2JqZWN0SWQoJmVycm9yLCBpbl9vYmplY3RJZCwg
b2JqZWN0R3JvdXBfdmFsdWVGb3VuZCA/ICZpbl9vYmplY3RHcm91cCA6IDAsIG91dF9yZXN1bHQp
OwoKICAgICAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgICAgIHJlc3VsdC0+c2V0
VmFsdWUoQVNDSUlMaXRlcmFsKCJyZXN1bHQiKSwgb3V0X3Jlc3VsdCk7CiAgICAgICAgfQogICAg
fQogICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJl
bGVhc2UoKSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVj
dG9yUHJvZmlsZXJCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0SGVhcE9iamVjdElkKGxvbmcgY2FsbElk
LCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgVHlw
ZUJ1aWxkZXI6OlByb2ZpbGVyOjpIZWFwU25hcHNob3RPYmplY3RJZCBvdXRfaGVhcFNuYXBzaG90
T2JqZWN0SWQ7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0g
bWVzc2FnZS5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXND
b250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSog
cHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIFN0cmluZyBpbl9v
YmplY3RJZCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29u
dGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoIm9iamVjdElkIiksIG51bGxwdHIsIHByb3RvY29sRXJy
b3JzUHRyKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29s
RXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fYWdlbnQtPmdldEhlYXBPYmplY3RJZCgmZXJy
b3IsIGluX29iamVjdElkLCAmb3V0X2hlYXBTbmFwc2hvdE9iamVjdElkKTsKCiAgICAgICAgaWYg
KCFlcnJvci5sZW5ndGgoKSkgewogICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZyhBU0NJSUxp
dGVyYWwoImhlYXBTbmFwc2hvdE9iamVjdElkIiksIG91dF9oZWFwU25hcHNob3RPYmplY3RJZCk7
CiAgICAgICAgfQogICAgfQogICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNh
bGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7
Cn0KCiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKClBhc3NSZWZQdHI8SW5z
cGVjdG9yUnVudGltZUJhY2tlbmREaXNwYXRjaGVyPiBJbnNwZWN0b3JSdW50aW1lQmFja2VuZERp
c3BhdGNoZXI6OmNyZWF0ZShJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3Bh
dGNoZXIsIEluc3BlY3RvclJ1bnRpbWVCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQp7
CiAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvclJ1bnRpbWVCYWNrZW5kRGlzcGF0Y2hl
cihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKfQoKSW5zcGVjdG9yUnVudGltZUJhY2tlbmRE
aXNwYXRjaGVyOjpJbnNwZWN0b3JSdW50aW1lQmFja2VuZERpc3BhdGNoZXIoSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyLCBJbnNwZWN0b3JSdW50aW1lQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKICAgIDogSW5zcGVjdG9yU3VwcGxlbWVudGFsQmFj
a2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCiAgICAsIG1fYWdlbnQoYWdlbnQpCnsK
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbihBU0NJ
SUxpdGVyYWwoIlJ1bnRpbWUiKSwgdGhpcyk7Cn0KCnZvaWQgSW5zcGVjdG9yUnVudGltZUJhY2tl
bmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2Qs
IFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKQp7CiAgICBSZWY8SW5zcGVjdG9y
UnVudGltZUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKCiAgICB0eXBlZGVmIHZv
aWQgKEluc3BlY3RvclJ1bnRpbWVCYWNrZW5kRGlzcGF0Y2hlcjo6KkNhbGxIYW5kbGVyKShsb25n
IGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKICAgIHR5cGVkZWYgSGFz
aE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPiBEaXNwYXRjaE1hcDsKICAgIERFRklORV9TVEFUSUNf
TE9DQUwoRGlzcGF0Y2hNYXAsIGRpc3BhdGNoTWFwLCAoKSk7CiAgICBpZiAoZGlzcGF0Y2hNYXAu
aXNFbXB0eSgpKSB7CiAgICAgICAgc3RhdGljIGNvbnN0IHN0cnVjdCBNZXRob2RUYWJsZSB7CiAg
ICAgICAgICAgIGNvbnN0IGNoYXIqIG5hbWU7CiAgICAgICAgICAgIENhbGxIYW5kbGVyIGhhbmRs
ZXI7CiAgICAgICAgfSBjb21tYW5kc1tdID0gewogICAgICAgICAgICB7ICJwYXJzZSIsICAmSW5z
cGVjdG9yUnVudGltZUJhY2tlbmREaXNwYXRjaGVyOjpwYXJzZSB9LAogICAgICAgICAgICB7ICJl
dmFsdWF0ZSIsICAmSW5zcGVjdG9yUnVudGltZUJhY2tlbmREaXNwYXRjaGVyOjpldmFsdWF0ZSB9
LAogICAgICAgICAgICB7ICJjYWxsRnVuY3Rpb25PbiIsICAmSW5zcGVjdG9yUnVudGltZUJhY2tl
bmREaXNwYXRjaGVyOjpjYWxsRnVuY3Rpb25PbiB9LAogICAgICAgICAgICB7ICJnZXRQcm9wZXJ0
aWVzIiwgICZJbnNwZWN0b3JSdW50aW1lQmFja2VuZERpc3BhdGNoZXI6OmdldFByb3BlcnRpZXMg
fSwKICAgICAgICAgICAgeyAicmVsZWFzZU9iamVjdCIsICAmSW5zcGVjdG9yUnVudGltZUJhY2tl
bmREaXNwYXRjaGVyOjpyZWxlYXNlT2JqZWN0IH0sCiAgICAgICAgICAgIHsgInJlbGVhc2VPYmpl
Y3RHcm91cCIsICAmSW5zcGVjdG9yUnVudGltZUJhY2tlbmREaXNwYXRjaGVyOjpyZWxlYXNlT2Jq
ZWN0R3JvdXAgfSwKICAgICAgICAgICAgeyAicnVuIiwgICZJbnNwZWN0b3JSdW50aW1lQmFja2Vu
ZERpc3BhdGNoZXI6OnJ1biB9LAogICAgICAgICAgICB7ICJlbmFibGUiLCAgJkluc3BlY3RvclJ1
bnRpbWVCYWNrZW5kRGlzcGF0Y2hlcjo6ZW5hYmxlIH0sCiAgICAgICAgICAgIHsgImRpc2FibGUi
LCAgJkluc3BlY3RvclJ1bnRpbWVCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzYWJsZSB9LAogICAgICAg
IH07CiAgICAgICAgc2l6ZV90IGxlbmd0aCA9IFdURl9BUlJBWV9MRU5HVEgoY29tbWFuZHMpOwog
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCiAgICAgICAgICAgIGRp
c3BhdGNoTWFwLmFkZChjb21tYW5kc1tpXS5uYW1lLCBjb21tYW5kc1tpXS5oYW5kbGVyKTsKICAg
IH0KCiAgICBIYXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+OjppdGVyYXRvciBpdCA9IGRpc3Bh
dGNoTWFwLmZpbmQobWV0aG9kKTsKICAgIGlmIChpdCA9PSBkaXNwYXRjaE1hcC5lbmQoKSkgewog
ICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwg
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCBTdHJpbmcoIiciKSAr
ICJSdW50aW1lIiArICcuJyArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKICAgICAgICBy
ZXR1cm47CiAgICB9CgogICAgKCgqdGhpcykuKml0LT52YWx1ZSkoY2FsbElkLCAqbWVzc2FnZS5n
ZXQoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yUnVudGltZUJhY2tlbmREaXNwYXRjaGVyOjpwYXJzZShs
b25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKQp7CiAgICBSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgp
OwoKICAgIFR5cGVCdWlsZGVyOjpSdW50aW1lOjpTeW50YXhFcnJvclR5cGU6OkVudW0gb3V0X3Jl
c3VsdDsKICAgIFR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8U3RyaW5nPiBvdXRfbWVzc2FnZTsKICAg
IFJlZlB0cjxUeXBlQnVpbGRlcjo6UnVudGltZTo6RXJyb3JSYW5nZT4gb3V0X3JhbmdlOwoKICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2Jq
ZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0g
cGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3Jz
UHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBTdHJpbmcgaW5fc291cmNlID0gSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJ
TGl0ZXJhbCgic291cmNlIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkg
ewogICAgICAgIG1fYWdlbnQtPnBhcnNlKCZlcnJvciwgaW5fc291cmNlLCAmb3V0X3Jlc3VsdCwg
Jm91dF9tZXNzYWdlLCBvdXRfcmFuZ2UpOwoKICAgICAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7
CiAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicmVzdWx0IiksIFR5
cGVCdWlsZGVyOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShvdXRfcmVzdWx0KSk7CiAgICAgICAgICAg
IGlmIChvdXRfbWVzc2FnZS5pc0Fzc2lnbmVkKCkpCiAgICAgICAgICAgICAgICByZXN1bHQtPnNl
dFN0cmluZyhBU0NJSUxpdGVyYWwoIm1lc3NhZ2UiKSwgb3V0X21lc3NhZ2UuZ2V0VmFsdWUoKSk7
CiAgICAgICAgICAgIGlmIChvdXRfcmFuZ2UpCiAgICAgICAgICAgICAgICByZXN1bHQtPnNldFZh
bHVlKEFTQ0lJTGl0ZXJhbCgicmFuZ2UiKSwgb3V0X3JhbmdlKTsKICAgICAgICB9CiAgICB9CiAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFz
ZSgpLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JS
dW50aW1lQmFja2VuZERpc3BhdGNoZXI6OmV2YWx1YXRlKGxvbmcgY2FsbElkLCBjb25zdCBJbnNw
ZWN0b3JPYmplY3QmIG1lc3NhZ2UpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9j
b2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgUmVmUHRyPFR5cGVCdWls
ZGVyOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+IG91dF9yZXN1bHQ7CiAgICBUeXBlQnVpbGRlcjo6
T3B0T3V0cHV0PGJvb2w+IG91dF93YXNUaHJvd247CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcGFyYW1zQ29udGFpbmVyID0gbWVzc2FnZS5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5z
cGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7
CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5n
ZXQoKTsKICAgIFN0cmluZyBpbl9leHByZXNzaW9uID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgiZXhwcmVzc2lv
biIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBib29sIG9iamVjdEdyb3VwX3Zh
bHVlRm91bmQgPSBmYWxzZTsKICAgIFN0cmluZyBpbl9vYmplY3RHcm91cCA9IEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVy
YWwoIm9iamVjdEdyb3VwIiksICZvYmplY3RHcm91cF92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9y
c1B0cik7CiAgICBib29sIGluY2x1ZGVDb21tYW5kTGluZUFQSV92YWx1ZUZvdW5kID0gZmFsc2U7
CiAgICBib29sIGluX2luY2x1ZGVDb21tYW5kTGluZUFQSSA9IEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpnZXRCb29sZWFuKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJpbmNs
dWRlQ29tbWFuZExpbmVBUEkiKSwgJmluY2x1ZGVDb21tYW5kTGluZUFQSV92YWx1ZUZvdW5kLCBw
cm90b2NvbEVycm9yc1B0cik7CiAgICBib29sIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRl
Q29uc29sZV92YWx1ZUZvdW5kID0gZmFsc2U7CiAgICBib29sIGluX2RvTm90UGF1c2VPbkV4Y2Vw
dGlvbnNBbmRNdXRlQ29uc29sZSA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRCb29s
ZWFuKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJkb05vdFBhdXNlT25FeGNlcHRp
b25zQW5kTXV0ZUNvbnNvbGUiKSwgJmRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29s
ZV92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBib29sIGNvbnRleHRJZF92YWx1
ZUZvdW5kID0gZmFsc2U7CiAgICBpbnQgaW5fY29udGV4dElkID0gSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6OmdldEludChwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgiY29udGV4
dElkIiksICZjb250ZXh0SWRfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgYm9v
bCByZXR1cm5CeVZhbHVlX3ZhbHVlRm91bmQgPSBmYWxzZTsKICAgIGJvb2wgaW5fcmV0dXJuQnlW
YWx1ZSA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRCb29sZWFuKHBhcmFtc0NvbnRh
aW5lclB0ciwgQVNDSUlMaXRlcmFsKCJyZXR1cm5CeVZhbHVlIiksICZyZXR1cm5CeVZhbHVlX3Zh
bHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgZ2VuZXJhdGVQcmV2aWV3X3Zh
bHVlRm91bmQgPSBmYWxzZTsKICAgIGJvb2wgaW5fZ2VuZXJhdGVQcmV2aWV3ID0gSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI6OmdldEJvb2xlYW4ocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxp
dGVyYWwoImdlbmVyYXRlUHJldmlldyIpLCAmZ2VuZXJhdGVQcmV2aWV3X3ZhbHVlRm91bmQsIHBy
b3RvY29sRXJyb3JzUHRyKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAo
IXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fYWdlbnQtPmV2YWx1YXRlKCZl
cnJvciwgaW5fZXhwcmVzc2lvbiwgb2JqZWN0R3JvdXBfdmFsdWVGb3VuZCA/ICZpbl9vYmplY3RH
cm91cCA6IDAsIGluY2x1ZGVDb21tYW5kTGluZUFQSV92YWx1ZUZvdW5kID8gJmluX2luY2x1ZGVD
b21tYW5kTGluZUFQSSA6IDAsIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZV92
YWx1ZUZvdW5kID8gJmluX2RvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSA6IDAs
IGNvbnRleHRJZF92YWx1ZUZvdW5kID8gJmluX2NvbnRleHRJZCA6IDAsIHJldHVybkJ5VmFsdWVf
dmFsdWVGb3VuZCA/ICZpbl9yZXR1cm5CeVZhbHVlIDogMCwgZ2VuZXJhdGVQcmV2aWV3X3ZhbHVl
Rm91bmQgPyAmaW5fZ2VuZXJhdGVQcmV2aWV3IDogMCwgb3V0X3Jlc3VsdCwgJm91dF93YXNUaHJv
d24pOwoKICAgICAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgICAgIHJlc3VsdC0+
c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJyZXN1bHQiKSwgb3V0X3Jlc3VsdCk7CiAgICAgICAgICAg
IGlmIChvdXRfd2FzVGhyb3duLmlzQXNzaWduZWQoKSkKICAgICAgICAgICAgICAgIHJlc3VsdC0+
c2V0Qm9vbGVhbihBU0NJSUxpdGVyYWwoIndhc1Rocm93biIpLCBvdXRfd2FzVGhyb3duLmdldFZh
bHVlKCkpOwogICAgICAgIH0KICAgIH0KICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNw
b25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwg
ZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvclJ1bnRpbWVCYWNrZW5kRGlzcGF0Y2hlcjo6Y2FsbEZ1
bmN0aW9uT24obG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSkKewog
ICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5
OjpjcmVhdGUoKTsKCiAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVj
dD4gb3V0X3Jlc3VsdDsKICAgIFR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8Ym9vbD4gb3V0X3dhc1Ro
cm93bjsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSBtZXNz
YWdlLmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRh
aW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIEluc3BlY3RvckFycmF5KiBwcm90
b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwogICAgU3RyaW5nIGluX29iamVj
dElkID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWlu
ZXJQdHIsIEFTQ0lJTGl0ZXJhbCgib2JqZWN0SWQiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQ
dHIpOwogICAgU3RyaW5nIGluX2Z1bmN0aW9uRGVjbGFyYXRpb24gPSBJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJm
dW5jdGlvbkRlY2xhcmF0aW9uIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJv
b2wgYXJndW1lbnRzX3ZhbHVlRm91bmQgPSBmYWxzZTsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJh
eT4gaW5fYXJndW1lbnRzID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEFycmF5KHBh
cmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJhcmd1bWVudHMiKSwgJmFyZ3VtZW50c192
YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBib29sIGRvTm90UGF1c2VPbkV4Y2Vw
dGlvbnNBbmRNdXRlQ29uc29sZV92YWx1ZUZvdW5kID0gZmFsc2U7CiAgICBib29sIGluX2RvTm90
UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpnZXRCb29sZWFuKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJkb05vdFBh
dXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUiKSwgJmRvTm90UGF1c2VPbkV4Y2VwdGlvbnNB
bmRNdXRlQ29uc29sZV92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CiAgICBib29sIHJl
dHVybkJ5VmFsdWVfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgYm9vbCBpbl9yZXR1cm5CeVZhbHVl
ID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEJvb2xlYW4ocGFyYW1zQ29udGFpbmVy
UHRyLCBBU0NJSUxpdGVyYWwoInJldHVybkJ5VmFsdWUiKSwgJnJldHVybkJ5VmFsdWVfdmFsdWVG
b3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOwogICAgYm9vbCBnZW5lcmF0ZVByZXZpZXdfdmFsdWVG
b3VuZCA9IGZhbHNlOwogICAgYm9vbCBpbl9nZW5lcmF0ZVByZXZpZXcgPSBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjo6Z2V0Qm9vbGVhbihwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJh
bCgiZ2VuZXJhdGVQcmV2aWV3IiksICZnZW5lcmF0ZVByZXZpZXdfdmFsdWVGb3VuZCwgcHJvdG9j
b2xFcnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJv
dG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9hZ2VudC0+Y2FsbEZ1bmN0aW9uT24o
JmVycm9yLCBpbl9vYmplY3RJZCwgaW5fZnVuY3Rpb25EZWNsYXJhdGlvbiwgYXJndW1lbnRzX3Zh
bHVlRm91bmQgPyAmaW5fYXJndW1lbnRzIDogMCwgZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11
dGVDb25zb2xlX3ZhbHVlRm91bmQgPyAmaW5fZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVD
b25zb2xlIDogMCwgcmV0dXJuQnlWYWx1ZV92YWx1ZUZvdW5kID8gJmluX3JldHVybkJ5VmFsdWUg
OiAwLCBnZW5lcmF0ZVByZXZpZXdfdmFsdWVGb3VuZCA/ICZpbl9nZW5lcmF0ZVByZXZpZXcgOiAw
LCBvdXRfcmVzdWx0LCAmb3V0X3dhc1Rocm93bik7CgogICAgICAgIGlmICghZXJyb3IubGVuZ3Ro
KCkpIHsKICAgICAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoInJlc3VsdCIp
LCBvdXRfcmVzdWx0KTsKICAgICAgICAgICAgaWYgKG91dF93YXNUaHJvd24uaXNBc3NpZ25lZCgp
KQogICAgICAgICAgICAgICAgcmVzdWx0LT5zZXRCb29sZWFuKEFTQ0lJTGl0ZXJhbCgid2FzVGhy
b3duIiksIG91dF93YXNUaHJvd24uZ2V0VmFsdWUoKSk7CiAgICAgICAgfQogICAgfQogICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwg
cHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yUnVudGlt
ZUJhY2tlbmREaXNwYXRjaGVyOjpnZXRQcm9wZXJ0aWVzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNw
ZWN0b3JPYmplY3QmIG1lc3NhZ2UpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9j
b2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgUmVmUHRyPFR5cGVCdWls
ZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPiA+IG91
dF9yZXN1bHQ7CiAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpSdW50
aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvcj4gPiBvdXRfaW50ZXJuYWxQcm9wZXJ0aWVz
OwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IG1lc3NhZ2Uu
Z2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVy
UHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29s
RXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBTdHJpbmcgaW5fb2JqZWN0SWQg
PSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0
ciwgQVNDSUlMaXRlcmFsKCJvYmplY3RJZCIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7
CiAgICBib29sIG93blByb3BlcnRpZXNfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgYm9vbCBpbl9v
d25Qcm9wZXJ0aWVzID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEJvb2xlYW4ocGFy
YW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoIm93blByb3BlcnRpZXMiKSwgJm93blByb3Bl
cnRpZXNfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0
cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAg
bV9hZ2VudC0+Z2V0UHJvcGVydGllcygmZXJyb3IsIGluX29iamVjdElkLCBvd25Qcm9wZXJ0aWVz
X3ZhbHVlRm91bmQgPyAmaW5fb3duUHJvcGVydGllcyA6IDAsIG91dF9yZXN1bHQsIG91dF9pbnRl
cm5hbFByb3BlcnRpZXMpOwoKICAgICAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAg
ICAgIHJlc3VsdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJyZXN1bHQiKSwgb3V0X3Jlc3VsdCk7
CiAgICAgICAgICAgIGlmIChvdXRfaW50ZXJuYWxQcm9wZXJ0aWVzKQogICAgICAgICAgICAgICAg
cmVzdWx0LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoImludGVybmFsUHJvcGVydGllcyIpLCBvdXRf
aW50ZXJuYWxQcm9wZXJ0aWVzKTsKICAgICAgICB9CiAgICB9CiAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBwcm90b2NvbEVycm9y
cy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JSdW50aW1lQmFja2VuZERpc3Bh
dGNoZXI6OnJlbGVhc2VPYmplY3QobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYg
bWVzc2FnZSkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IElu
c3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJh
bXNDb250YWluZXIgPSBtZXNzYWdlLmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNwZWN0b3JP
YmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKICAgIElu
c3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwog
ICAgU3RyaW5nIGluX29iamVjdElkID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0
cmluZyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgib2JqZWN0SWQiKSwgbnVsbHB0
ciwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3Vs
dCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAg
IGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9hZ2VudC0+cmVsZWFz
ZU9iamVjdCgmZXJyb3IsIGluX29iamVjdElkKTsKCgogICAgfQogICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgcHJvdG9jb2xFcnJv
cnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yUnVudGltZUJhY2tlbmREaXNw
YXRjaGVyOjpyZWxlYXNlT2JqZWN0R3JvdXAobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9i
amVjdCYgbWVzc2FnZSkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9y
cyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBwYXJhbXNDb250YWluZXIgPSBtZXNzYWdlLmdldE9iamVjdCgicGFyYW1zIik7CiAgICBJbnNw
ZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsK
ICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdl
dCgpOwogICAgU3RyaW5nIGluX29iamVjdEdyb3VwID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgib2JqZWN0R3Jv
dXAiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmlu
ZyBlcnJvcjsKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9h
Z2VudC0+cmVsZWFzZU9iamVjdEdyb3VwKCZlcnJvciwgaW5fb2JqZWN0R3JvdXApOwoKCiAgICB9
CiAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVs
ZWFzZSgpLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0
b3JSdW50aW1lQmFja2VuZERpc3BhdGNoZXI6OnJ1bihsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVj
dG9yT2JqZWN0JikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9
IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBy
ZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7
CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fYWdlbnQtPnJ1
bigmZXJyb3IpOwoKCiAgICB9CiAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2Uo
Y2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9y
KTsKfQoKdm9pZCBJbnNwZWN0b3JSdW50aW1lQmFja2VuZERpc3BhdGNoZXI6OmVuYWJsZShsb25n
IGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JikKewogICAgUmVmUHRyPEluc3BlY3RvckFy
cmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkg
ewogICAgICAgIG1fYWdlbnQtPmVuYWJsZSgmZXJyb3IpOwoKCiAgICB9CiAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBwcm90b2Nv
bEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JSdW50aW1lQmFja2Vu
ZERpc3BhdGNoZXI6OmRpc2FibGUobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYp
CnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JB
cnJheTo6Y3JlYXRlKCk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFw
cm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2FnZW50LT5kaXNhYmxlKCZlcnJv
cik7CgoKICAgIH0KICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQs
IHJlc3VsdC5yZWxlYXNlKCksIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9CgpQ
YXNzUmVmUHRyPEluc3BlY3RvclRpbWVsaW5lQmFja2VuZERpc3BhdGNoZXI+IEluc3BlY3RvclRp
bWVsaW5lQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ciogYmFja2VuZERpc3BhdGNoZXIsIEluc3BlY3RvclRpbWVsaW5lQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyKiBhZ2VudCkKewogICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JUaW1lbGlu
ZUJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOwp9CgpJbnNwZWN0
b3JUaW1lbGluZUJhY2tlbmREaXNwYXRjaGVyOjpJbnNwZWN0b3JUaW1lbGluZUJhY2tlbmREaXNw
YXRjaGVyKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5z
cGVjdG9yVGltZWxpbmVCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQogICAgOiBJbnNw
ZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKICAg
ICwgbV9hZ2VudChhZ2VudCkKewogICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNw
YXRjaGVyRm9yRG9tYWluKEFTQ0lJTGl0ZXJhbCgiVGltZWxpbmUiKSwgdGhpcyk7Cn0KCnZvaWQg
SW5zcGVjdG9yVGltZWxpbmVCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBjYWxsSWQs
IGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2Fn
ZSkKewogICAgUmVmPEluc3BlY3RvclRpbWVsaW5lQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3Qo
KnRoaXMpOwoKICAgIHR5cGVkZWYgdm9pZCAoSW5zcGVjdG9yVGltZWxpbmVCYWNrZW5kRGlzcGF0
Y2hlcjo6KkNhbGxIYW5kbGVyKShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBt
ZXNzYWdlKTsKICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPiBEaXNwYXRj
aE1hcDsKICAgIERFRklORV9TVEFUSUNfTE9DQUwoRGlzcGF0Y2hNYXAsIGRpc3BhdGNoTWFwLCAo
KSk7CiAgICBpZiAoZGlzcGF0Y2hNYXAuaXNFbXB0eSgpKSB7CiAgICAgICAgc3RhdGljIGNvbnN0
IHN0cnVjdCBNZXRob2RUYWJsZSB7CiAgICAgICAgICAgIGNvbnN0IGNoYXIqIG5hbWU7CiAgICAg
ICAgICAgIENhbGxIYW5kbGVyIGhhbmRsZXI7CiAgICAgICAgfSBjb21tYW5kc1tdID0gewogICAg
ICAgICAgICB7ICJzdGFydCIsICAmSW5zcGVjdG9yVGltZWxpbmVCYWNrZW5kRGlzcGF0Y2hlcjo6
c3RhcnQgfSwKICAgICAgICAgICAgeyAic3RvcCIsICAmSW5zcGVjdG9yVGltZWxpbmVCYWNrZW5k
RGlzcGF0Y2hlcjo6c3RvcCB9LAogICAgICAgICAgICB7ICJzdXBwb3J0c0ZyYW1lSW5zdHJ1bWVu
dGF0aW9uIiwgICZJbnNwZWN0b3JUaW1lbGluZUJhY2tlbmREaXNwYXRjaGVyOjpzdXBwb3J0c0Zy
YW1lSW5zdHJ1bWVudGF0aW9uIH0sCiAgICAgICAgICAgIHsgImNhbk1vbml0b3JNYWluVGhyZWFk
IiwgICZJbnNwZWN0b3JUaW1lbGluZUJhY2tlbmREaXNwYXRjaGVyOjpjYW5Nb25pdG9yTWFpblRo
cmVhZCB9LAogICAgICAgIH07CiAgICAgICAgc2l6ZV90IGxlbmd0aCA9IFdURl9BUlJBWV9MRU5H
VEgoY29tbWFuZHMpOwogICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kp
CiAgICAgICAgICAgIGRpc3BhdGNoTWFwLmFkZChjb21tYW5kc1tpXS5uYW1lLCBjb21tYW5kc1tp
XS5oYW5kbGVyKTsKICAgIH0KCiAgICBIYXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+OjppdGVy
YXRvciBpdCA9IGRpc3BhdGNoTWFwLmZpbmQobWV0aG9kKTsKICAgIGlmIChpdCA9PSBkaXNwYXRj
aE1hcC5lbmQoKSkgewogICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29s
RXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5k
LCBTdHJpbmcoIiciKSArICJUaW1lbGluZSIgKyAnLicgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZv
dW5kIik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICgoKnRoaXMpLippdC0+dmFsdWUpKGNh
bGxJZCwgKm1lc3NhZ2UuZ2V0KCkpOwp9Cgp2b2lkIEluc3BlY3RvclRpbWVsaW5lQmFja2VuZERp
c3BhdGNoZXI6OnN0YXJ0KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3Nh
Z2UpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0
b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29u
dGFpbmVyID0gbWVzc2FnZS5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0
KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0
b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIGJv
b2wgbWF4Q2FsbFN0YWNrRGVwdGhfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgaW50IGluX21heENh
bGxTdGFja0RlcHRoID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEludChwYXJhbXND
b250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgibWF4Q2FsbFN0YWNrRGVwdGgiKSwgJm1heENhbGxT
dGFja0RlcHRoX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIGJvb2wgaW5jbHVk
ZURvbUNvdW50ZXJzX3ZhbHVlRm91bmQgPSBmYWxzZTsKICAgIGJvb2wgaW5faW5jbHVkZURvbUNv
dW50ZXJzID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEJvb2xlYW4ocGFyYW1zQ29u
dGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoImluY2x1ZGVEb21Db3VudGVycyIpLCAmaW5jbHVkZURv
bUNvdW50ZXJzX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJy
b3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAg
ICAgIG1fYWdlbnQtPnN0YXJ0KCZlcnJvciwgbWF4Q2FsbFN0YWNrRGVwdGhfdmFsdWVGb3VuZCA/
ICZpbl9tYXhDYWxsU3RhY2tEZXB0aCA6IDAsIGluY2x1ZGVEb21Db3VudGVyc192YWx1ZUZvdW5k
ID8gJmluX2luY2x1ZGVEb21Db3VudGVycyA6IDApOwoKCiAgICB9CiAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBwcm90b2NvbEVy
cm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNwZWN0b3JUaW1lbGluZUJhY2tlbmRE
aXNwYXRjaGVyOjpzdG9wKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmKQp7CiAg
ICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6
OmNyZWF0ZSgpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlmICghcHJvdG9j
b2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9hZ2VudC0+c3RvcCgmZXJyb3IpOwoKCiAg
ICB9CiAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQu
cmVsZWFzZSgpLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoKdm9pZCBJbnNw
ZWN0b3JUaW1lbGluZUJhY2tlbmREaXNwYXRjaGVyOjpzdXBwb3J0c0ZyYW1lSW5zdHJ1bWVudGF0
aW9uKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmKQp7CiAgICBSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoK
ICAgIGJvb2wgb3V0X3Jlc3VsdDsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBp
ZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fYWdlbnQtPnN1cHBvcnRz
RnJhbWVJbnN0cnVtZW50YXRpb24oJmVycm9yLCAmb3V0X3Jlc3VsdCk7CgogICAgICAgIGlmICgh
ZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICAgICAgcmVzdWx0LT5zZXRCb29sZWFuKEFTQ0lJTGl0
ZXJhbCgicmVzdWx0IiksIG91dF9yZXN1bHQpOwogICAgICAgIH0KICAgIH0KICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIHByb3Rv
Y29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvclRpbWVsaW5lQmFj
a2VuZERpc3BhdGNoZXI6OmNhbk1vbml0b3JNYWluVGhyZWFkKGxvbmcgY2FsbElkLCBjb25zdCBJ
bnNwZWN0b3JPYmplY3QmKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJy
b3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGJvb2wgb3V0X3Jlc3VsdDsKCiAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOwogICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5n
dGgoKSkgewogICAgICAgIG1fYWdlbnQtPmNhbk1vbml0b3JNYWluVGhyZWFkKCZlcnJvciwgJm91
dF9yZXN1bHQpOwoKICAgICAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgICAgIHJl
c3VsdC0+c2V0Qm9vbGVhbihBU0NJSUxpdGVyYWwoInJlc3VsdCIpLCBvdXRfcmVzdWx0KTsKICAg
ICAgICB9CiAgICB9CiAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElk
LCByZXN1bHQucmVsZWFzZSgpLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCksIGVycm9yKTsKfQoK
I2lmIEVOQUJMRShXT1JLRVJTKQoKUGFzc1JlZlB0cjxJbnNwZWN0b3JXb3JrZXJCYWNrZW5kRGlz
cGF0Y2hlcj4gSW5zcGVjdG9yV29ya2VyQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIsIEluc3BlY3RvcldvcmtlckJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCnsKICAgIHJldHVybiBhZG9wdFJlZihuZXcg
SW5zcGVjdG9yV29ya2VyQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIsIGFnZW50
KSk7Cn0KCkluc3BlY3RvcldvcmtlckJhY2tlbmREaXNwYXRjaGVyOjpJbnNwZWN0b3JXb3JrZXJC
YWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3Bh
dGNoZXIsIEluc3BlY3RvcldvcmtlckJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCiAg
ICA6IEluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRj
aGVyKQogICAgLCBtX2FnZW50KGFnZW50KQp7CiAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdp
c3RlckRpc3BhdGNoZXJGb3JEb21haW4oQVNDSUlMaXRlcmFsKCJXb3JrZXIiKSwgdGhpcyk7Cn0K
CnZvaWQgSW5zcGVjdG9yV29ya2VyQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgY2Fs
bElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1l
c3NhZ2UpCnsKICAgIFJlZjxJbnNwZWN0b3JXb3JrZXJCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVj
dCgqdGhpcyk7CgogICAgdHlwZWRlZiB2b2lkIChJbnNwZWN0b3JXb3JrZXJCYWNrZW5kRGlzcGF0
Y2hlcjo6KkNhbGxIYW5kbGVyKShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBt
ZXNzYWdlKTsKICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPiBEaXNwYXRj
aE1hcDsKICAgIERFRklORV9TVEFUSUNfTE9DQUwoRGlzcGF0Y2hNYXAsIGRpc3BhdGNoTWFwLCAo
KSk7CiAgICBpZiAoZGlzcGF0Y2hNYXAuaXNFbXB0eSgpKSB7CiAgICAgICAgc3RhdGljIGNvbnN0
IHN0cnVjdCBNZXRob2RUYWJsZSB7CiAgICAgICAgICAgIGNvbnN0IGNoYXIqIG5hbWU7CiAgICAg
ICAgICAgIENhbGxIYW5kbGVyIGhhbmRsZXI7CiAgICAgICAgfSBjb21tYW5kc1tdID0gewogICAg
ICAgICAgICB7ICJlbmFibGUiLCAgJkluc3BlY3RvcldvcmtlckJhY2tlbmREaXNwYXRjaGVyOjpl
bmFibGUgfSwKICAgICAgICAgICAgeyAiZGlzYWJsZSIsICAmSW5zcGVjdG9yV29ya2VyQmFja2Vu
ZERpc3BhdGNoZXI6OmRpc2FibGUgfSwKICAgICAgICAgICAgeyAic2VuZE1lc3NhZ2VUb1dvcmtl
ciIsICAmSW5zcGVjdG9yV29ya2VyQmFja2VuZERpc3BhdGNoZXI6OnNlbmRNZXNzYWdlVG9Xb3Jr
ZXIgfSwKICAgICAgICAgICAgeyAiY2FuSW5zcGVjdFdvcmtlcnMiLCAgJkluc3BlY3Rvcldvcmtl
ckJhY2tlbmREaXNwYXRjaGVyOjpjYW5JbnNwZWN0V29ya2VycyB9LAogICAgICAgICAgICB7ICJj
b25uZWN0VG9Xb3JrZXIiLCAgJkluc3BlY3RvcldvcmtlckJhY2tlbmREaXNwYXRjaGVyOjpjb25u
ZWN0VG9Xb3JrZXIgfSwKICAgICAgICAgICAgeyAiZGlzY29ubmVjdEZyb21Xb3JrZXIiLCAgJklu
c3BlY3RvcldvcmtlckJhY2tlbmREaXNwYXRjaGVyOjpkaXNjb25uZWN0RnJvbVdvcmtlciB9LAog
ICAgICAgICAgICB7ICJzZXRBdXRvY29ubmVjdFRvV29ya2VycyIsICAmSW5zcGVjdG9yV29ya2Vy
QmFja2VuZERpc3BhdGNoZXI6OnNldEF1dG9jb25uZWN0VG9Xb3JrZXJzIH0sCiAgICAgICAgfTsK
ICAgICAgICBzaXplX3QgbGVuZ3RoID0gV1RGX0FSUkFZX0xFTkdUSChjb21tYW5kcyk7CiAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKICAgICAgICAgICAgZGlzcGF0
Y2hNYXAuYWRkKGNvbW1hbmRzW2ldLm5hbWUsIGNvbW1hbmRzW2ldLmhhbmRsZXIpOwogICAgfQoK
ICAgIEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj46Oml0ZXJhdG9yIGl0ID0gZGlzcGF0Y2hN
YXAuZmluZChtZXRob2QpOwogICAgaWYgKGl0ID09IGRpc3BhdGNoTWFwLmVuZCgpKSB7CiAgICAg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsIFN0cmluZygiJyIpICsgIldv
cmtlciIgKyAnLicgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CiAgICAgICAgcmV0dXJu
OwogICAgfQoKICAgICgoKnRoaXMpLippdC0+dmFsdWUpKGNhbGxJZCwgKm1lc3NhZ2UuZ2V0KCkp
Owp9Cgp2b2lkIEluc3BlY3RvcldvcmtlckJhY2tlbmREaXNwYXRjaGVyOjplbmFibGUobG9uZyBj
YWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJh
eT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAg
IEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsK
ICAgICAgICBtX2FnZW50LT5lbmFibGUoJmVycm9yKTsKCgogICAgfQogICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgcHJvdG9jb2xF
cnJvcnMucmVsZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yV29ya2VyQmFja2VuZERp
c3BhdGNoZXI6OmRpc2FibGUobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYpCnsK
ICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJh
eTo6Y3JlYXRlKCk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90
b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2FnZW50LT5kaXNhYmxlKCZlcnJvcik7
CgoKICAgIH0KICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJl
c3VsdC5yZWxlYXNlKCksIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lk
IEluc3BlY3RvcldvcmtlckJhY2tlbmREaXNwYXRjaGVyOjpzZW5kTWVzc2FnZVRvV29ya2VyKGxv
bmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpCnsKICAgIFJlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7
CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gbWVzc2FnZS5n
ZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQ
dHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xF
cnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKICAgIGludCBpbl93b3JrZXJJZCA9IElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRJbnQocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJ
SUxpdGVyYWwoIndvcmtlcklkIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGluX21lc3NhZ2UgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcjo6Z2V0T2JqZWN0KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJtZXNzYWdl
IiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgRXJyb3JTdHJpbmcg
ZXJyb3I7CiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIG1fYWdl
bnQtPnNlbmRNZXNzYWdlVG9Xb3JrZXIoJmVycm9yLCBpbl93b3JrZXJJZCwgaW5fbWVzc2FnZSk7
CgoKICAgIH0KICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJl
c3VsdC5yZWxlYXNlKCksIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9Cgp2b2lk
IEluc3BlY3RvcldvcmtlckJhY2tlbmREaXNwYXRjaGVyOjpjYW5JbnNwZWN0V29ya2Vycyhsb25n
IGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JikKewogICAgUmVmUHRyPEluc3BlY3RvckFy
cmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBib29s
IG91dF9yZXN1bHQ7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90
b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2FnZW50LT5jYW5JbnNwZWN0V29ya2Vy
cygmZXJyb3IsICZvdXRfcmVzdWx0KTsKCiAgICAgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkgewog
ICAgICAgICAgICByZXN1bHQtPnNldEJvb2xlYW4oQVNDSUlMaXRlcmFsKCJyZXN1bHQiKSwgb3V0
X3Jlc3VsdCk7CiAgICAgICAgfQogICAgfQogICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJl
c3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgp
LCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yV29ya2VyQmFja2VuZERpc3BhdGNoZXI6OmNvbm5l
Y3RUb1dvcmtlcihsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKQp7
CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJy
YXk6OmNyZWF0ZSgpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5l
ciA9IG1lc3NhZ2UuZ2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCogcGFy
YW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9yQXJy
YXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBpbnQgaW5f
d29ya2VySWQgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0SW50KHBhcmFtc0NvbnRh
aW5lclB0ciwgQVNDSUlMaXRlcmFsKCJ3b3JrZXJJZCIpLCBudWxscHRyLCBwcm90b2NvbEVycm9y
c1B0cik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2NvbEVy
cm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2FnZW50LT5jb25uZWN0VG9Xb3JrZXIoJmVycm9y
LCBpbl93b3JrZXJJZCk7CgoKICAgIH0KICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNw
b25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSwg
ZXJyb3IpOwp9Cgp2b2lkIEluc3BlY3RvcldvcmtlckJhY2tlbmREaXNwYXRjaGVyOjpkaXNjb25u
ZWN0RnJvbVdvcmtlcihsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdl
KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9y
QXJyYXk6OmNyZWF0ZSgpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRh
aW5lciA9IG1lc3NhZ2UuZ2V0T2JqZWN0KCJwYXJhbXMiKTsKICAgIEluc3BlY3Rvck9iamVjdCog
cGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOwogICAgSW5zcGVjdG9y
QXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAgICBpbnQg
aW5fd29ya2VySWQgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0SW50KHBhcmFtc0Nv
bnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJ3b3JrZXJJZCIpLCBudWxscHRyLCBwcm90b2NvbEVy
cm9yc1B0cik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgaWYgKCFwcm90b2Nv
bEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICBtX2FnZW50LT5kaXNjb25uZWN0RnJvbVdvcmtl
cigmZXJyb3IsIGluX3dvcmtlcklkKTsKCgogICAgfQogICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgcHJvdG9jb2xFcnJvcnMucmVs
ZWFzZSgpLCBlcnJvcik7Cn0KCnZvaWQgSW5zcGVjdG9yV29ya2VyQmFja2VuZERpc3BhdGNoZXI6
OnNldEF1dG9jb25uZWN0VG9Xb3JrZXJzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmpl
Y3QmIG1lc3NhZ2UpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMg
PSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cGFyYW1zQ29udGFpbmVyID0gbWVzc2FnZS5nZXRPYmplY3QoInBhcmFtcyIpOwogICAgSW5zcGVj
dG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAg
ICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQo
KTsKICAgIGJvb2wgaW5fdmFsdWUgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0Qm9v
bGVhbihwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgidmFsdWUiKSwgbnVsbHB0ciwg
cHJvdG9jb2xFcnJvcnNQdHIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgIGlm
ICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgbV9hZ2VudC0+c2V0QXV0b2Nv
bm5lY3RUb1dvcmtlcnMoJmVycm9yLCBpbl92YWx1ZSk7CgoKICAgIH0KICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIHByb3RvY29s
RXJyb3JzLnJlbGVhc2UoKSwgZXJyb3IpOwp9CgojZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCgp9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCgojZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>216884</attachid>
            <date>2013-11-13 18:07:14 -0800</date>
            <delta_ts>2013-11-13 18:07:14 -0800</delta_ts>
            <desc>[BOTS] For Bots</desc>
            <filename>bots2.patch</filename>
            <type>text/plain</type>
            <size>119752</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggZDFkZTA3Mi4uNzRlMzhmNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTE1NzEsNiArMTU3MSw3IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBpbnNw
ZWN0b3IvSW5zcGVjdG9yQWdlbnQuY3BwCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckFnZW50UmVn
aXN0cnkuY3BwCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5j
cHAKKyAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3BwCiAgICAgaW5z
cGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JDYW52
YXNBZ2VudC5jcHAKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQ2xpZW50LmNwcApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmlu
ZGV4IGE4ZjM3YWEuLmU2NWYyY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsNSArMSwxNjUgQEAKIDIwMTMt
MTEtMTMgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAorICAgICAgICBX
ZWIgSW5zcGVjdG9yOiBHZW5lcmF0ZSBJbmRpdmlkdWFsIEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVycywgYWRkIGJhc2UgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNDI5NgorCisgICAgICAgIFJldmll
d2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KKworICAgICAgICBObyBuZXcgdGVzdHMsIHRoaXMgaXMg
anVzdCByZWZhY3RvcmluZyB3aXRob3V0IGNoYW5naW5nIGZ1bmN0aW9uYWxpdHkuCisgICAgICAg
IFNldCBvZiBjaGFuZ2VzIG1hZGU6CisKKyAgICAgICAgICAtIEFkZCBpbnNwZWN0b3IvSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXIue2gsY3BwfS4gVGhpcyB1c2VkIHRvIGJlIGFsbW9zdCBlbnRp
cmVseQorICAgICAgICAgICAgd3JpdHRlbiBpbiB0aGUgY29kZSBnZW5lcmF0b3Igc3RyaW5ncyBm
aWxlLCBidXQgbWFrZSBpdCBhY3R1YWwgc291cmNlIGZpbGVzCisgICAgICAgICAgICBiZWNhdXNl
IHRoZXJlIGlzIG5vdGhpbmcgY2hhbmdpbmcgaW4gdGhlIGNvZGUuIEFsc28gY2xlYW4gdGhpcyB1
cCBhIGJpdC4KKyAgICAgICAgICAtIEdpdmUgdGhlIGJhc2UgZGlzcGF0Y2hlciBhIGxpc3Qgb2Yg
ZG9tYWluIGRpc3BhdGNoZXJzIGFuZCBhIHdheSB0byByZWdpc3Rlci4KKyAgICAgICAgICAtIE1h
a2UgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoIHJlYWQgdGhlIGRvbWFpbiBv
ZiBpbmNvbWluZyByZXF1ZXN0CisgICAgICAgICAgICBhbmQgcGFzcyB0aGUgcmVxdWVzdCBvbiB0
byB0aGUgZG9tYWluIGRpc3BhdGNoZXIuCisgICAgICAgICAgLSBDcmVhdGUgcGVyLWRvbWFpbiBk
aXNwYXRjaGVyIGNsYXNzZXMgbmFtZWQgIkluc3BlY3RvckZvb0JhY2tlbmREaXNwYXRjaGVyIgor
ICAgICAgICAgIC0gQ29udmVydCAiSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkZvb0NvbW1h
bmRIYW5kbGVyIiBpbnRlcmZhY2VzIHRvCisgICAgICAgICAgICAiSW5zcGVjdG9yRm9vQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyIiBpbnRlcmZhY2VzLgorICAgICAgICAgIC0gQ29udmVydCBhbGwg
Ikluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6Rm9vRG9tYWluX2Zvb01ldGhvZCIgbWV0
aG9kcyB0bworICAgICAgICAgICAgIkluc3BlY3RvckZvb0JhY2tlbmREaXNwYXRjaGVyOjpmb29N
ZXRob2QiIG1ldGhvZHMuIFRoZXNlIGNhbiBhbHNvIHJlbW92ZSB0aGVpcgorICAgICAgICAgICAg
ImlmICghYWdlbnQpIiBjaGVja3MgYmVjYXVzZSB0aGF0IGNhbiBuZXZlciBiZSB0aGUgY2FzZSBh
bnltb3JlLgorICAgICAgICAgIC0gUmVtb3ZlIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1w
bCwgbm93IHRoYXQgdGhlcmUgYXJlIGJhc2UgYW5kIGRvbWFpbiBkaXNwYXRjaGVycy4KKyAgICAg
ICAgICAtIEFkZCBBU0NJSUxpdGVyYWwgaW4gbWFueSBwbGFjZXMgaW4gZ2VuZXJhdGVkIGNvZGUg
d2hlcmUgcG9zc2libGUuCisgICAgICAgICAgLSBJbiBhbGwgYWdlbnRzLCBjcmVhdGUgZGlzcGF0
Y2hlcnMgaW4gZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kIGFuZCBjbGVhcgorICAgICAgICAg
ICAgdGhlbSBpbiB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZCwgcmlnaHQgYWxvbmdzaWRl
IGZyb250ZW5kIGRpc3BhdGNoZXJzLgorCisgICAgICAgICogaW5zcGVjdG9yL0NvZGVHZW5lcmF0
b3JJbnNwZWN0b3IucHk6CisgICAgICAgIChEb21haW5OYW1lRml4ZXMuZ2V0X2ZpeGVkX2RhdGEu
UmVzKToKKyAgICAgICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uRW51
bUJpbmRpbmcuZ2V0X2NvZGVfZ2VuZXJhdG9yLkNvZGVHZW5lcmF0b3IuZ2VuZXJhdGVfdHlwZV9i
dWlsZGVyKToKKyAgICAgICAgKEdlbmVyYXRvcik6CisgICAgICAgIChHZW5lcmF0b3IuZ28pOgor
ICAgICAgICAoR2VuZXJhdG9yLnByb2Nlc3NfY29tbWFuZCk6CisgICAgICAgIChHZW5lcmF0b3Iu
Z2VuZXJhdGVfc2VuZF9tZXRob2QpOgorICAgICAgICAqIGluc3BlY3Rvci9Db2RlR2VuZXJhdG9y
SW5zcGVjdG9yU3RyaW5ncy5weToKKyAgICAgICAgKHZvaWQpOgorICAgICAgICAoSGFzaE1hcCk6
CisgICAgICAgIChJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnNfaCk6CisgICAgICAgICogaW5z
cGVjdG9yL0luc3BlY3RvckFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFn
ZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKToKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9y
QWxsSW5PbmUuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNh
Y2hlQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQXBwbGljYXRpb25DYWNo
ZUFnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFj
a2VuZCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2Vu
dC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNh
bGxiYWNrQmFzZTo6Q2FsbGJhY2tCYXNlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2U6OmlzQWN0aXZlKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2U6OnNlbmRGYWlsdXJl
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFj
a0Jhc2U6OnNlbmRJZkFjdGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOjpyZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4pOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpzZW5kUmVzcG9uc2UpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnJlcG9ydFByb3RvY29sRXJyb3Ip
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFByb3Bl
cnR5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXNNZXRob2RCcmlkZ2VzOjphc0ludCk6Cisg
ICAgICAgIChXZWJDb3JlOjpBc01ldGhvZEJyaWRnZXM6OmFzRG91YmxlKToKKyAgICAgICAgKFdl
YkNvcmU6OkFzTWV0aG9kQnJpZGdlczo6YXNTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6QXNN
ZXRob2RCcmlkZ2VzOjphc0Jvb2xlYW4pOgorICAgICAgICAoV2ViQ29yZTo6QXNNZXRob2RCcmlk
Z2VzOjphc09iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpBc01ldGhvZEJyaWRnZXM6OmFzQXJy
YXkpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldElu
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0RG91
YmxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRT
dHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6Omdl
dEJvb2xlYW4pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OmdldE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cjo6Z2V0QXJyYXkpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN1cHBsZW1lbnRhbEJh
Y2tlbmREaXNwYXRjaGVyOjpJbnNwZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcik6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hl
cjo6fkluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjp+SW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmNs
ZWFyRnJvbnRlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OmlzQWN0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcik6CisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3RvckNTU0FnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50
OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yQ1NTQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKToKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVj
dG9yQ2FudmFzQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQWdl
bnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JDYW52YXNBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQpOgorICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDYW52YXNBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JDb25zb2xlQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
Q29uc29sZUFnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQ29uc29sZUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2Vu
ZCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnNvbGVBZ2VudC5oOgorICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JET01BZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2Vu
ZCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50Lmg6CisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5k
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OndpbGxEZXN0
cm95RnJvbnRlbmRBbmRCYWNrZW5kKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9N
RGVidWdnZXJBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdl
QWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50Ojpk
aWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RE9NU3RvcmFnZUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZCk6CisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5oOgorICAgICAgICAqIGluc3Bl
Y3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckRhdGFiYXNlQWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JEYXRhYmFzZUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5k
QmFja2VuZCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuaDoK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJh
Y2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6d2lsbERl
c3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckhlYXBQcm9maWxl
ckFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckhlYXBQcm9maWxlckFnZW50
OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9ySGVhcFByb2ZpbGVyQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9ySGVhcFByb2ZpbGVyQWdlbnQuaDoKKyAgICAgICAg
KiBpbnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9ySW5kZXhlZERCQWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbmRleGVkREJBZ2VudDo6d2lsbERlc3Ryb3lG
cm9udGVuZEFuZEJhY2tlbmQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVk
REJBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JJbnB1dEFnZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvcklucHV0QWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5k
QW5kQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnB1dEFnZW50Ojp3aWxs
RGVzdHJveUZyb250ZW5kQW5kQmFja2VuZCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
cklucHV0QWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yTGF5ZXJUcmVlQWdl
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmRpZENy
ZWF0ZUZyb250ZW5kQW5kQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JMYXll
clRyZWVBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQpOgorICAgICAgICAqIGlu
c3BlY3Rvci9JbnNwZWN0b3JMYXllclRyZWVBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9J
bnNwZWN0b3JNZW1vcnlBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JNZW1v
cnlBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3Rvck1lbW9yeUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZCk6Cisg
ICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvck1lbW9yeUFnZW50Lmg6CisgICAgICAgICogaW5z
cGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JQYWdlQWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZCk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6Z2V0U2NyaXB0RXhlY3V0aW9u
U3RhdHVzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50Lmg6CisgICAg
ICAgICogaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5k
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OndpbGxEZXN0cm95
RnJvbnRlbmRBbmRCYWNrZW5kKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmls
ZXJBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJlc291cmNlQWdlbnQ6OmRpZENyZWF0ZUZy
b250ZW5kQW5kQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXNvdXJjZUFn
ZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZCk6CisgICAgICAgICogaW5zcGVjdG9y
L0luc3BlY3RvclJlc291cmNlQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9y
UnVudGltZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdl
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6ZGlkQ3Jl
YXRlRnJvbnRlbmRBbmRCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclRpbWVs
aW5lQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JXb3JrZXJBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JXb3JrZXJB
Z2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvcldvcmtlckFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZCk6CisgICAg
ICAgICogaW5zcGVjdG9yL0luc3BlY3RvcldvcmtlckFnZW50Lmg6CisgICAgICAgICogaW5zcGVj
dG9yL1BhZ2VSdW50aW1lQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZVJ1bnRpbWVB
Z2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlBh
Z2VSdW50aW1lQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKToKKyAgICAgICAg
KiBpbnNwZWN0b3IvUGFnZVJ1bnRpbWVBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9Xb3Jr
ZXJSdW50aW1lQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyUnVudGltZUFnZW50
OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2Vy
UnVudGltZUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZCk6CisgICAgICAgICog
aW5zcGVjdG9yL1dvcmtlclJ1bnRpbWVBZ2VudC5oOgorCisyMDEzLTExLTEzICBKb3NlcGggUGVj
b3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CisKICAgICAgICAgV2ViIEluc3BlY3RvcjogUmVu
YW1lIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmggdG8gSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXJzLmgKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEyNDI1NwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFt
IGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCBlYzA3OTUxLi45MWI5
M2QyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBi
L1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTM3NjksNiArMzc2OSw4IEBA
IHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckFnZW50UmVnaXN0cnkuaCBcCiAJU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFw
cGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaCBcCisJU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNwcCBcCisJU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmggXAogCVNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JCYXNlQWdlbnQuaCBcCiAJU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNhbnZhc0FnZW50LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckNhbnZhc0FnZW50LmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDMyYTY1MTMuLjEzMzBiZDggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTM1MTQsNiAr
MzUxNCw4IEBACiAJCUE1NzMyQjBBMTM2QTE2MUQwMDVDOEQ3QyAvKiBEYXRlQ29tcG9uZW50cy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNTczMkIw
ODEzNkExNjFEMDA1QzhEN0MgLyogRGF0ZUNvbXBvbmVudHMuY3BwICovOyB9OwogCQlBNTczMkIw
QjEzNkExNjFEMDA1QzhEN0MgLyogRGF0ZUNvbXBvbmVudHMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1NzMyQjA5MTM2QTE2MUQwMDVDOEQ3QyAvKiBE
YXRlQ29tcG9uZW50cy5oICovOyB9OwogCQlBNUFCQjc4NzEzQjkwNEJDMDBGMTk3RTMgLyogTGlu
ZUJyZWFrSXRlcmF0b3JQb29sSUNVLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBNUFCQjc4NjEzQjkwNEJDMDBGMTk3RTMgLyogTGluZUJyZWFrSXRlcmF0
b3JQb29sSUNVLmggKi87IH07CisJCUE1QUM0QUVGMTgzMzY5NzUwMDcxMTRFMCAvKiBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBNUFDNEFFRDE4MzM2OTc1MDA3MTE0RTAgLyogSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIuY3BwICovOyB9OworCQlBNUFDNEFGMDE4MzM2OTc1MDA3MTE0RTAgLyogSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE1QUM0QUVFMTgzMzY5NzUwMDcxMTRFMCAvKiBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCUE1QUZCMzRGMTE1MTUxQTcwMEIwNDVDQiAvKiBTdGVwUmFuZ2UuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTVBRkIzNEQxMTUxNTFB
NzAwQjA0NUNCIC8qIFN0ZXBSYW5nZS5jcHAgKi87IH07CiAJCUE1QUZCMzUwMTE1MTUxQTcwMEIw
NDVDQiAvKiBTdGVwUmFuZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE1QUZCMzRFMTE1MTUxQTcwMEIwNDVDQiAvKiBTdGVwUmFuZ2UuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBNUM1NjZBQjEyN0Ez
QUFEMDBFOEEzRkYgLyogRGlza0ltYWdlQ2FjaGVDbGllbnRJT1MuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1QzU2NkFBMTI3QTNBQUQwMEU4QTNGRiAv
KiBEaXNrSW1hZ2VDYWNoZUNsaWVudElPUy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC0xMDI5Miw2ICsxMDI5NCw4IEBACiAJCUE1NzMyQjA4MTM2
QTE2MUQwMDVDOEQ3QyAvKiBEYXRlQ29tcG9uZW50cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBEYXRlQ29tcG9uZW50cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUE1NzMyQjA5MTM2QTE2MUQwMDVDOEQ3QyAvKiBEYXRlQ29tcG9uZW50cy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRlQ29tcG9uZW50cy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlBNUFCQjc4NjEzQjkwNEJDMDBGMTk3RTMgLyogTGluZUJy
ZWFrSXRlcmF0b3JQb29sSUNVLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExp
bmVCcmVha0l0ZXJhdG9yUG9vbElDVS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlB
NUFDNEFFRDE4MzM2OTc1MDA3MTE0RTAgLyogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNUFDNEFFRTE4MzM2
OTc1MDA3MTE0RTAgLyogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTVBRkIzNEQxMTUxNTFBNzAwQjA0NUNCIC8qIFN0ZXBS
YW5nZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdGVwUmFuZ2Uu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNUFGQjM0RTExNTE1MUE3MDBCMDQ1
Q0IgLyogU3RlcFJhbmdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0ZXBS
YW5nZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNUM1NjZBQTEyN0EzQUFEMDBF
OEEzRkYgLyogRGlza0ltYWdlQ2FjaGVDbGllbnRJT1MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRGlza0ltYWdlQ2FjaGVDbGllbnRJT1MuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTE0Mzg3LDYgKzE0MzkxLDggQEAKIAkJCQlBNTU2QzI4NzE4MzIwNkE4MDA4
Q0I3MjAgLyogSW5zcGVjdG9yQWdlbnRSZWdpc3RyeS5oICovLAogCQkJCUI4ODVFOEQyMTFFMDZE
RDIwMDlGRkJGNCAvKiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuY3BwICovLAogCQkJ
CUI4ODVFOEQzMTFFMDZERDIwMDlGRkJGNCAvKiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdl
bnQuaCAqLywKKwkJCQlBNUFDNEFFRDE4MzM2OTc1MDA3MTE0RTAgLyogSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIuY3BwICovLAorCQkJCUE1QUM0QUVFMTgzMzY5NzUwMDcxMTRFMCAvKiBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oICovLAogCQkJCTdBQTUxQjZDMTQ4M0I2MTYwMEFEMjc1
MiAvKiBJbnNwZWN0b3JCYXNlQWdlbnQuaCAqLywKIAkJCQlBQUQ3NjZFODE1N0U1MDJGMDBFODU0
MjMgLyogSW5zcGVjdG9yQ2FudmFzQWdlbnQuY3BwICovLAogCQkJCUFBRDc2NkU5MTU3RTUwMkYw
MEU4NTQyMyAvKiBJbnNwZWN0b3JDYW52YXNBZ2VudC5oICovLApAQCAtMjIyNTUsNiArMjIyNjEs
NyBAQAogCQkJCUE4MEU2RDAxMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NJbmhlcml0ZWRWYWx1ZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTgwRTZEMDgwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU0luaXRp
YWxWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM3NzJFMTMxMzMxNjIwQzAwMUVDOUNFIC8q
IENTU0xpbmVCb3hDb250YWluVmFsdWUuaCBpbiBIZWFkZXJzICovLAorCQkJCUE1QUM0QUYwMTgz
MzY5NzUwMDcxMTRFMCAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTgwRTZEMDMwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU01lZGlhUnVsZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRjk4RkZGNDUxMUEyNjc2MjAwRjU0OEU4IC8qIENTU09NVXRpbHMuaCBp
biBIZWFkZXJzICovLAogCQkJCUE4MEU2RDAwMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NQYWdlUnVs
ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNTYxNyw2ICsyNTYyNCw3IEBACiAJCQkJNTlCNTk3NzMx
MTA4NjU2QjAwNzE1OUU4IC8qIEJyaWRnZUpTQy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGNTVC
M0RBRjEyNTFGMTJEMDAzRUYyNjkgLyogQnV0dG9uSW5wdXRUeXBlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTFBNTY5Q0Y3MEQ3RTJCODIwMDdDMzk4MyAvKiBjX2NsYXNzLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCUE1QUM0QUVGMTgzMzY5NzUwMDcxMTRFMCAvKiBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTU2OUNGOTBEN0UyQjgyMDA3QzM5ODMg
LyogY19pbnN0YW5jZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTU2OUNGQjBEN0UyQjgyMDA3
QzM5ODMgLyogY19ydW50aW1lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBNTY5Q0ZEMEQ3RTJC
ODIwMDdDMzk4MyAvKiBjX3V0aWxpdHkuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weSBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CmluZGV4IDJjMzky
OWMuLjYwNTAyNmQgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2Vu
ZXJhdG9ySW5zcGVjdG9yLnB5CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2Vu
ZXJhdG9ySW5zcGVjdG9yLnB5CkBAIC0xOTAsNyArMTkwLDYgQEAgY2xhc3MgRG9tYWluTmFtZUZp
eGVzOgogCiAgICAgICAgIGNsYXNzIFJlcyhvYmplY3QpOgogICAgICAgICAgICAgc2tpcF9qc19i
aW5kID0gZG9tYWluX25hbWUgaW4gY2xzLnNraXBfanNfYmluZF9kb21haW5zCi0gICAgICAgICAg
ICBhZ2VudF9maWVsZF9uYW1lID0gZmllbGRfbmFtZV9yZXMKIAogICAgICAgICAgICAgQHN0YXRp
Y21ldGhvZAogICAgICAgICAgICAgZGVmIGdldF9ndWFyZCgpOgpAQCAtOTU5LDcgKzk1OCw3IEBA
IGNsYXNzIFR5cGVCaW5kaW5nczoKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3
cml0ZXIubmV3bGluZSgifTsgLy8gc3RydWN0ICIpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHdyaXRlci5hcHBlbmQoZW51bV9uYW1lKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3cml0ZXIuYXBwZW5kKCJcblxuIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd3JpdGVyLmFwcGVuZCgiXG4iKQogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
QHN0YXRpY21ldGhvZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiByZWdpc3Rlcl91
c2UoZm9yd2FyZF9saXN0ZW5lcik6CkBAIC0xMjQ1LDcgKzEyNDQsNyBAQCBjbGFzcyBUeXBlQmlu
ZGluZ3M6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5k
X211bHRpbGluZSgiXG4gICAgdm9pZCAlcyIgJSBzZXR0ZXJfbmFtZSkKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoIiglcyB2YWx1ZSlcbiIgJSBwYXJh
bV90eXBlX2JpbmRpbmcuZ2V0X3R5cGVfbW9kZWwoKS5nZXRfaW5wdXRfcGFyYW1fdHlwZV90ZXh0
KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgi
ICAgIHtcbiIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3
bGluZSgiICAgICAgICB0aGlzLT5zZXQlcyhcIiVzXCIsICVzKTtcbiIKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgICAgIHRoaXMtPnNldCVz
KEFTQ0lJTGl0ZXJhbChcIiVzXCIpLCAlcyk7XG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJSAocGFyYW1fdHlwZV9iaW5kaW5nLnJlZHVjZV90b19yYXdfdHlwZSgp
LmdldF9zZXR0ZXJfbmFtZSgpLCBwcm9wX2RhdGEucFsibmFtZSJdLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lv
bihwYXJhbV90eXBlX2JpbmRpbmcsICJ2YWx1ZSIpKSkKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgfVxuIikKQEAgLTE3MzAsNiArMTcyOSw4
IEBAIGNsYXNzIFRlbXBsYXRlczoKICIiIikKIAogICAgIGZyb250ZW5kX2RvbWFpbl9jbGFzcyA9
IHN0cmluZy5UZW1wbGF0ZShDb2RlR2VuZXJhdG9ySW5zcGVjdG9yU3RyaW5ncy5mcm9udGVuZF9k
b21haW5fY2xhc3MpCisgICAgYmFja2VuZF9kaXNwYXRjaGVyX2NvbnN0cnVjdG9yID0gc3RyaW5n
LlRlbXBsYXRlKENvZGVHZW5lcmF0b3JJbnNwZWN0b3JTdHJpbmdzLmJhY2tlbmRfZGlzcGF0Y2hl
cl9jb25zdHJ1Y3RvcikKKyAgICBiYWNrZW5kX2Rpc3BhdGNoZXJfZGlzcGF0Y2hfbWV0aG9kID0g
c3RyaW5nLlRlbXBsYXRlKENvZGVHZW5lcmF0b3JJbnNwZWN0b3JTdHJpbmdzLmJhY2tlbmRfZGlz
cGF0Y2hlcl9kaXNwYXRjaF9tZXRob2QpCiAgICAgYmFja2VuZF9tZXRob2QgPSBzdHJpbmcuVGVt
cGxhdGUoQ29kZUdlbmVyYXRvckluc3BlY3RvclN0cmluZ3MuYmFja2VuZF9tZXRob2QpCiAgICAg
ZnJvbnRlbmRfbWV0aG9kID0gc3RyaW5nLlRlbXBsYXRlKENvZGVHZW5lcmF0b3JJbnNwZWN0b3JT
dHJpbmdzLmZyb250ZW5kX21ldGhvZCkKICAgICBjYWxsYmFja19tZXRob2QgPSBzdHJpbmcuVGVt
cGxhdGUoQ29kZUdlbmVyYXRvckluc3BlY3RvclN0cmluZ3MuY2FsbGJhY2tfbWV0aG9kKQpAQCAt
MTgyMywxOSArMTgyNCwxMiBAQCBkZWYgZm9ybWF0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uKHBh
cmFtX3R5cGVfYmluZGluZywgdmFsdWVfcmVmKToKIGNsYXNzIEdlbmVyYXRvcjoKICAgICBmcm9u
dGVuZF9kb21haW5fY2xhc3NfbGluZXMgPSBbXQogCi0gICAgbWV0aG9kX25hbWVfZW51bV9saXN0
ID0gW10KLSAgICBiYWNrZW5kX21ldGhvZF9kZWNsYXJhdGlvbl9saXN0ID0gW10KICAgICBiYWNr
ZW5kX21ldGhvZF9pbXBsZW1lbnRhdGlvbl9saXN0ID0gW10KLSAgICBiYWNrZW5kX21ldGhvZF9u
YW1lX2RlY2xhcmF0aW9uX2xpc3QgPSBbXQotICAgIG1ldGhvZF9oYW5kbGVyX2xpc3QgPSBbXQog
ICAgIGZyb250ZW5kX21ldGhvZF9saXN0ID0gW10KICAgICBiYWNrZW5kX2pzX2RvbWFpbl9pbml0
aWFsaXplcl9saXN0ID0gW10KIAotICAgIGJhY2tlbmRfdmlydHVhbF9zZXR0ZXJzX2xpc3QgPSBb
XQotICAgIGJhY2tlbmRfYWdlbnRfaW50ZXJmYWNlX2xpc3QgPSBbXQotICAgIGJhY2tlbmRfc2V0
dGVyc19saXN0ID0gW10KLSAgICBiYWNrZW5kX2NvbnN0cnVjdG9yX2luaXRfbGlzdCA9IFtdCi0g
ICAgYmFja2VuZF9maWVsZF9saXN0ID0gW10KKyAgICBiYWNrZW5kX2hhbmRsZXJfaW50ZXJmYWNl
X2xpc3QgPSBbXQorICAgIGJhY2tlbmRfZGlzcGF0Y2hlcl9pbnRlcmZhY2VfbGlzdCA9IFtdCiAg
ICAgdHlwZV9idWlsZGVyX2ZyYWdtZW50cyA9IFtdCiAgICAgdHlwZV9idWlsZGVyX2ZvcndhcmRz
ID0gW10KICAgICB2YWxpZGF0b3JfaW1wbF9saXN0ID0gW10KQEAgLTE4NDcsMTYgKzE4NDEsOSBA
QCBjbGFzcyBHZW5lcmF0b3I6CiAgICAgICAgIEdlbmVyYXRvci5wcm9jZXNzX3R5cGVzKHR5cGVf
bWFwKQogCiAgICAgICAgIGZpcnN0X2N5Y2xlX2d1YXJkYWJsZV9saXN0X2xpc3QgPSBbCi0gICAg
ICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9tZXRob2RfZGVjbGFyYXRpb25fbGlzdCwKICAgICAg
ICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX21ldGhvZF9pbXBsZW1lbnRhdGlvbl9saXN0LAotICAg
ICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfbWV0aG9kX25hbWVfZGVjbGFyYXRpb25fbGlzdCwK
LSAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2FnZW50X2ludGVyZmFjZV9saXN0LAotICAg
ICAgICAgICAgR2VuZXJhdG9yLm1ldGhvZF9oYW5kbGVyX2xpc3QsCi0gICAgICAgICAgICBHZW5l
cmF0b3IubWV0aG9kX25hbWVfZW51bV9saXN0LAotICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tl
bmRfY29uc3RydWN0b3JfaW5pdF9saXN0LAotICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRf
dmlydHVhbF9zZXR0ZXJzX2xpc3QsCi0gICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9zZXR0
ZXJzX2xpc3QsCi0gICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9maWVsZF9saXN0XQorICAg
ICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfaGFuZGxlcl9pbnRlcmZhY2VfbGlzdCwKKyAgICAg
ICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2Rpc3BhdGNoZXJfaW50ZXJmYWNlX2xpc3RdCiAKICAg
ICAgICAgZm9yIGpzb25fZG9tYWluIGluIGpzb25fYXBpWyJkb21haW5zIl06CiAgICAgICAgICAg
ICBkb21haW5fbmFtZSA9IGpzb25fZG9tYWluWyJkb21haW4iXQpAQCAtMTg3MCw4ICsxODU3LDYg
QEAgY2xhc3MgR2VuZXJhdG9yOgogICAgICAgICAgICAgICAgIGZvciBsIGluIGZpcnN0X2N5Y2xl
X2d1YXJkYWJsZV9saXN0X2xpc3Q6CiAgICAgICAgICAgICAgICAgICAgIGRvbWFpbl9ndWFyZC5n
ZW5lcmF0ZV9vcGVuKGwpCiAKLSAgICAgICAgICAgIGFnZW50X2ZpZWxkX25hbWUgPSBkb21haW5f
Zml4ZXMuYWdlbnRfZmllbGRfbmFtZQotCiAgICAgICAgICAgICBmcm9udGVuZF9tZXRob2RfZGVj
bGFyYXRpb25fbGluZXMgPSBbXQogCiAgICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9qc19k
b21haW5faW5pdGlhbGl6ZXJfbGlzdC5hcHBlbmQoIi8vICVzLlxuIiAlIGRvbWFpbl9uYW1lKQpA
QCAtMTkwNywyMCArMTg5Miw0MyBAQCBjbGFzcyBHZW5lcmF0b3I6CiAgICAgICAgICAgICAgICAg
ICAgIGRvbWFpbl9ndWFyZC5nZW5lcmF0ZV9jbG9zZShHZW5lcmF0b3IuZnJvbnRlbmRfbWV0aG9k
X2xpc3QpCiAgICAgICAgICAgICAgICAgICAgIGRvbWFpbl9ndWFyZC5nZW5lcmF0ZV9jbG9zZShH
ZW5lcmF0b3IuZnJvbnRlbmRfZG9tYWluX2NsYXNzX2xpbmVzKQogCi0gICAgICAgICAgICBhZ2Vu
dF9pbnRlcmZhY2VfbmFtZSA9IENhcGl0YWxpemVyLmxvd2VyX2NhbWVsX2Nhc2VfdG9fdXBwZXIo
ZG9tYWluX25hbWUpICsgIkNvbW1hbmRIYW5kbGVyIgotICAgICAgICAgICAgR2VuZXJhdG9yLmJh
Y2tlbmRfYWdlbnRfaW50ZXJmYWNlX2xpc3QuYXBwZW5kKCIgICAgY2xhc3MgJXMge1xuIiAlIGFn
ZW50X2ludGVyZmFjZV9uYW1lKQotICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfYWdlbnRf
aW50ZXJmYWNlX2xpc3QuYXBwZW5kKCIgICAgcHVibGljOlxuIikKKyAgICAgICAgICAgIGRpc3Bh
dGNoZXJfbmFtZSA9ICJJbnNwZWN0b3IiICsgQ2FwaXRhbGl6ZXIubG93ZXJfY2FtZWxfY2FzZV90
b191cHBlcihkb21haW5fbmFtZSkgKyAiQmFja2VuZERpc3BhdGNoZXIiCisgICAgICAgICAgICBh
Z2VudF9pbnRlcmZhY2VfbmFtZSA9IGRpc3BhdGNoZXJfbmFtZSArICJIYW5kbGVyIgorCisgICAg
ICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9kaXNwYXRjaGVyX2ludGVyZmFjZV9saXN0LmFwcGVu
ZCgiY2xhc3MgJXMgRklOQUwgOiBwdWJsaWMgSW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERp
c3BhdGNoZXIge1xuIiAlIGRpc3BhdGNoZXJfbmFtZSkKKyAgICAgICAgICAgIEdlbmVyYXRvci5i
YWNrZW5kX2Rpc3BhdGNoZXJfaW50ZXJmYWNlX2xpc3QuYXBwZW5kKCJwdWJsaWM6XG4iKQorICAg
ICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfZGlzcGF0Y2hlcl9pbnRlcmZhY2VfbGlzdC5hcHBl
bmQoIiAgICBzdGF0aWMgUGFzc1JlZlB0cjwlcz4gY3JlYXRlKEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyKiwgJXMqKTtcbiIgJSAoZGlzcGF0Y2hlcl9uYW1lLCBhZ2VudF9pbnRlcmZhY2VfbmFt
ZSkpCisgICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9kaXNwYXRjaGVyX2ludGVyZmFjZV9s
aXN0LmFwcGVuZCgiICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3Qg
U3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKSBPVkVS
UklERTtcbiIpCisgICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9kaXNwYXRjaGVyX2ludGVy
ZmFjZV9saXN0LmFwcGVuZCgicHJpdmF0ZTpcbiIpCisKKyAgICAgICAgICAgIEdlbmVyYXRvci5i
YWNrZW5kX2hhbmRsZXJfaW50ZXJmYWNlX2xpc3QuYXBwZW5kKCJjbGFzcyAlcyB7XG4iICUgYWdl
bnRfaW50ZXJmYWNlX25hbWUpCisgICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9oYW5kbGVy
X2ludGVyZmFjZV9saXN0LmFwcGVuZCgicHVibGljOlxuIikKKworICAgICAgICAgICAgYmFja2Vu
ZF9tZXRob2RfY291bnQgPSBsZW4oR2VuZXJhdG9yLmJhY2tlbmRfbWV0aG9kX2ltcGxlbWVudGF0
aW9uX2xpc3QpCisKKyAgICAgICAgICAgIGRpc3BhdGNoZXJfY29tbWFuZHNfbGlzdCA9IFtdCiAg
ICAgICAgICAgICBpZiAiY29tbWFuZHMiIGluIGpzb25fZG9tYWluOgogICAgICAgICAgICAgICAg
IGZvciBqc29uX2NvbW1hbmQgaW4ganNvbl9kb21haW5bImNvbW1hbmRzIl06Ci0gICAgICAgICAg
ICAgICAgICAgIEdlbmVyYXRvci5wcm9jZXNzX2NvbW1hbmQoanNvbl9jb21tYW5kLCBkb21haW5f
bmFtZSwgYWdlbnRfZmllbGRfbmFtZSwgYWdlbnRfaW50ZXJmYWNlX25hbWUpCi0gICAgICAgICAg
ICBHZW5lcmF0b3IuYmFja2VuZF9hZ2VudF9pbnRlcmZhY2VfbGlzdC5hcHBlbmQoIlxuICAgIHBy
b3RlY3RlZDpcbiIpCi0gICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9hZ2VudF9pbnRlcmZh
Y2VfbGlzdC5hcHBlbmQoIiAgICAgICAgdmlydHVhbCB+JXMoKSB7IH1cbiIgJSBhZ2VudF9pbnRl
cmZhY2VfbmFtZSkKLSAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2FnZW50X2ludGVyZmFj
ZV9saXN0LmFwcGVuZCgiICAgIH07XG5cbiIpCi0KLSAgICAgICAgICAgIEdlbmVyYXRvci5iYWNr
ZW5kX2NvbnN0cnVjdG9yX2luaXRfbGlzdC5hcHBlbmQoIiAgICAgICAgLCBtXyVzKDApIiAlIGFn
ZW50X2ZpZWxkX25hbWUpCi0gICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF92aXJ0dWFsX3Nl
dHRlcnNfbGlzdC5hcHBlbmQoIiAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJBZ2VudCglcyogJXMp
ID0gMDsiICUgKGFnZW50X2ludGVyZmFjZV9uYW1lLCBhZ2VudF9maWVsZF9uYW1lKSkKLSAgICAg
ICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX3NldHRlcnNfbGlzdC5hcHBlbmQoIiAgICB2aXJ0dWFs
IHZvaWQgcmVnaXN0ZXJBZ2VudCglcyogJXMpIHsgQVNTRVJUKCFtXyVzKTsgbV8lcyA9ICVzOyB9
IiAlIChhZ2VudF9pbnRlcmZhY2VfbmFtZSwgYWdlbnRfZmllbGRfbmFtZSwgYWdlbnRfZmllbGRf
bmFtZSwgYWdlbnRfZmllbGRfbmFtZSwgYWdlbnRfZmllbGRfbmFtZSkpCi0gICAgICAgICAgICBH
ZW5lcmF0b3IuYmFja2VuZF9maWVsZF9saXN0LmFwcGVuZCgiICAgICVzKiBtXyVzOyIgJSAoYWdl
bnRfaW50ZXJmYWNlX25hbWUsIGFnZW50X2ZpZWxkX25hbWUpKQorICAgICAgICAgICAgICAgICAg
ICBHZW5lcmF0b3IucHJvY2Vzc19jb21tYW5kKGpzb25fY29tbWFuZCwgZG9tYWluX25hbWUsIGFn
ZW50X2ludGVyZmFjZV9uYW1lLCBkaXNwYXRjaGVyX25hbWUsIGRpc3BhdGNoZXJfY29tbWFuZHNf
bGlzdCkKKworICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfaGFuZGxlcl9pbnRlcmZhY2Vf
bGlzdC5hcHBlbmQoInByb3RlY3RlZDpcbiIpCisgICAgICAgICAgICBHZW5lcmF0b3IuYmFja2Vu
ZF9oYW5kbGVyX2ludGVyZmFjZV9saXN0LmFwcGVuZCgiICAgIHZpcnR1YWwgfiVzKCkgeyB9XG4i
ICUgYWdlbnRfaW50ZXJmYWNlX25hbWUpCisgICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9o
YW5kbGVyX2ludGVyZmFjZV9saXN0LmFwcGVuZCgifTtcblxuIikKKworICAgICAgICAgICAgR2Vu
ZXJhdG9yLmJhY2tlbmRfZGlzcGF0Y2hlcl9pbnRlcmZhY2VfbGlzdC5hcHBlbmQoInByaXZhdGU6
XG4iKQorICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfZGlzcGF0Y2hlcl9pbnRlcmZhY2Vf
bGlzdC5hcHBlbmQoIiAgICAlcyhJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciosICVzKik7XG4i
ICUgKGRpc3BhdGNoZXJfbmFtZSwgYWdlbnRfaW50ZXJmYWNlX25hbWUpKQorICAgICAgICAgICAg
R2VuZXJhdG9yLmJhY2tlbmRfZGlzcGF0Y2hlcl9pbnRlcmZhY2VfbGlzdC5hcHBlbmQoIiAgICAl
cyogbV9hZ2VudDtcbiIgJSBhZ2VudF9pbnRlcmZhY2VfbmFtZSkKKyAgICAgICAgICAgIEdlbmVy
YXRvci5iYWNrZW5kX2Rpc3BhdGNoZXJfaW50ZXJmYWNlX2xpc3QuYXBwZW5kKCJ9O1xuXG4iKQor
CisgICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9tZXRob2RfaW1wbGVtZW50YXRpb25fbGlz
dC5pbnNlcnQoYmFja2VuZF9tZXRob2RfY291bnQsIFRlbXBsYXRlcy5iYWNrZW5kX2Rpc3BhdGNo
ZXJfY29uc3RydWN0b3Iuc3Vic3RpdHV0ZShOb25lLAorICAgICAgICAgICAgICAgIGRvbWFpbk5h
bWU9ZG9tYWluX25hbWUsCisgICAgICAgICAgICAgICAgZGlzcGF0Y2hlck5hbWU9ZGlzcGF0Y2hl
cl9uYW1lLAorICAgICAgICAgICAgICAgIGFnZW50TmFtZT1hZ2VudF9pbnRlcmZhY2VfbmFtZSkp
CisKKyAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX21ldGhvZF9pbXBsZW1lbnRhdGlvbl9s
aXN0Lmluc2VydChiYWNrZW5kX21ldGhvZF9jb3VudCArIDEsIFRlbXBsYXRlcy5iYWNrZW5kX2Rp
c3BhdGNoZXJfZGlzcGF0Y2hfbWV0aG9kLnN1YnN0aXR1dGUoTm9uZSwKKyAgICAgICAgICAgICAg
ICBkb21haW5OYW1lPWRvbWFpbl9uYW1lLAorICAgICAgICAgICAgICAgIGRpc3BhdGNoZXJOYW1l
PWRpc3BhdGNoZXJfbmFtZSwKKyAgICAgICAgICAgICAgICBkaXNwYXRjaGVyQ29tbWFuZHM9Ilxu
Ii5qb2luKGRpc3BhdGNoZXJfY29tbWFuZHNfbGlzdCkpKQogCiAgICAgICAgICAgICBpZiBkb21h
aW5fZ3VhcmQ6CiAgICAgICAgICAgICAgICAgZm9yIGwgaW4gcmV2ZXJzZWQoZmlyc3RfY3ljbGVf
Z3VhcmRhYmxlX2xpc3RfbGlzdCk6CkBAIC0xOTc2LDIwICsxOTg0LDE4IEBAIGNsYXNzIEdlbmVy
YXRvcjoKICAgICAgICAgY29udGFpbmVyX25hbWUgPSAicGFyYW1zT2JqZWN0IgogCiAgICAgQHN0
YXRpY21ldGhvZAotICAgIGRlZiBwcm9jZXNzX2NvbW1hbmQoanNvbl9jb21tYW5kLCBkb21haW5f
bmFtZSwgYWdlbnRfZmllbGRfbmFtZSwgYWdlbnRfaW50ZXJmYWNlX25hbWUpOgorICAgIGRlZiBw
cm9jZXNzX2NvbW1hbmQoanNvbl9jb21tYW5kLCBkb21haW5fbmFtZSwgYWdlbnRfaW50ZXJmYWNl
X25hbWUsIGRpc3BhdGNoZXJfbmFtZSwgZGlzcGF0Y2hlcl9jb21tYW5kc19saXN0KToKICAgICAg
ICAganNvbl9jb21tYW5kX25hbWUgPSBqc29uX2NvbW1hbmRbIm5hbWUiXQogCi0gICAgICAgIGNt
ZF9lbnVtX25hbWUgPSAiayVzXyVzQ21kIiAlIChkb21haW5fbmFtZSwganNvbl9jb21tYW5kWyJu
YW1lIl0pCi0KLSAgICAgICAgR2VuZXJhdG9yLm1ldGhvZF9uYW1lX2VudW1fbGlzdC5hcHBlbmQo
IiAgICAgICAgJXMsIiAlIGNtZF9lbnVtX25hbWUpCi0gICAgICAgIEdlbmVyYXRvci5tZXRob2Rf
aGFuZGxlcl9saXN0LmFwcGVuZCgiICAgICAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVySW1wbDo6JXNfJXMsIiAlIChkb21haW5fbmFtZSwganNvbl9jb21tYW5kX25hbWUpKQotICAg
ICAgICBHZW5lcmF0b3IuYmFja2VuZF9tZXRob2RfZGVjbGFyYXRpb25fbGlzdC5hcHBlbmQoIiAg
ICB2b2lkICVzXyVzKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdl
T2JqZWN0KTsiICUgKGRvbWFpbl9uYW1lLCBqc29uX2NvbW1hbmRfbmFtZSkpCi0KICAgICAgICAg
YWRfaG9jX3R5cGVfb3V0cHV0ID0gW10KLSAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfYWdlbnRf
aW50ZXJmYWNlX2xpc3QuYXBwZW5kKGFkX2hvY190eXBlX291dHB1dCkKLSAgICAgICAgYWRfaG9j
X3R5cGVfd3JpdGVyID0gV3JpdGVyKGFkX2hvY190eXBlX291dHB1dCwgIiAgICAgICAgIikKKyAg
ICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfaGFuZGxlcl9pbnRlcmZhY2VfbGlzdC5hcHBlbmQoYWRf
aG9jX3R5cGVfb3V0cHV0KQorICAgICAgICBhZF9ob2NfdHlwZV93cml0ZXIgPSBXcml0ZXIoYWRf
aG9jX3R5cGVfb3V0cHV0LCAiICAgICIpCiAKLSAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfYWdl
bnRfaW50ZXJmYWNlX2xpc3QuYXBwZW5kKCIgICAgICAgIHZpcnR1YWwgdm9pZCAlcyhFcnJvclN0
cmluZyoiICUganNvbl9jb21tYW5kX25hbWUpCisgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2Rp
c3BhdGNoZXJfaW50ZXJmYWNlX2xpc3QuYXBwZW5kKCIgICAgdm9pZCAlcyhsb25nIGNhbGxJZCwg
Y29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTtcbiIgJSBqc29uX2NvbW1hbmRfbmFtZSkK
KworICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9oYW5kbGVyX2ludGVyZmFjZV9saXN0LmFwcGVu
ZCgiICAgIHZpcnR1YWwgdm9pZCAlcyhFcnJvclN0cmluZyoiICUganNvbl9jb21tYW5kX25hbWUp
CisgICAgICAgIAorICAgICAgICBkaXNwYXRjaGVyX2NvbW1hbmRzX2xpc3QuYXBwZW5kKCIgICAg
ICAgICAgICB7IFwiJXNcIiwgICYlczo6JXMgfSwiICUgKGpzb25fY29tbWFuZF9uYW1lLCBkaXNw
YXRjaGVyX25hbWUsIGpzb25fY29tbWFuZF9uYW1lKSkKIAogICAgICAgICBtZXRob2RfaW5fY29k
ZSA9ICIiCiAgICAgICAgIG1ldGhvZF9vdXRfY29kZSA9ICIiCkBAIC0yMDAwLDcgKzIwMDYsNyBA
QCBjbGFzcyBHZW5lcmF0b3I6CiAgICAgICAgIGlmICJwYXJhbWV0ZXJzIiBpbiBqc29uX2NvbW1h
bmQ6CiAgICAgICAgICAgICBqc29uX3BhcmFtcyA9IGpzb25fY29tbWFuZFsicGFyYW1ldGVycyJd
CiAgICAgICAgICAgICBtZXRob2RfaW5fY29kZSArPSBUZW1wbGF0ZXMucGFyYW1fY29udGFpbmVy
X2FjY2Vzc19jb2RlCi0gICAgICAgICAgICByZXF1ZXN0X21lc3NhZ2VfcGFyYW0gPSAiIHJlcXVl
c3RNZXNzYWdlT2JqZWN0IgorICAgICAgICAgICAgcmVxdWVzdF9tZXNzYWdlX3BhcmFtID0gIiBt
ZXNzYWdlIgogICAgICAgICAgICAganNfcGFyYW1fbGlzdCA9IFtdCiAKICAgICAgICAgICAgIGZv
ciBqc29uX3BhcmFtZXRlciBpbiBqc29uX3BhcmFtczoKQEAgLTIwMTksMTMgKzIwMjUsMTMgQEAg
Y2xhc3MgR2VuZXJhdG9yOgogCiAgICAgICAgICAgICAgICAgaWYgb3B0aW9uYWw6CiAgICAgICAg
ICAgICAgICAgICAgIGNvZGUgPSAoIiAgICBib29sICVzX3ZhbHVlRm91bmQgPSBmYWxzZTtcbiIK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICVzIGluXyVzID0gZ2V0JXMocGFyYW1z
Q29udGFpbmVyUHRyLCBcIiVzXCIsICYlc192YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7
XG4iICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICVzIGluXyVzID0gSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6OmdldCVzKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRl
cmFsKFwiJXNcIiksICYlc192YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7XG4iICUKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChqc29uX3BhcmFtX25hbWUsIG5vbl9vcHRpb25hbF90
eXBlX21vZGVsLmdldF9jb21tYW5kX3JldHVybl9wYXNzX21vZGVsKCkuZ2V0X3JldHVybl92YXJf
dHlwZSgpLCBqc29uX3BhcmFtX25hbWUsIGdldHRlcl9uYW1lLCBqc29uX3BhcmFtX25hbWUsIGpz
b25fcGFyYW1fbmFtZSkpCiAgICAgICAgICAgICAgICAgICAgIHBhcmFtID0gIiwgJXNfdmFsdWVG
b3VuZCA/ICZpbl8lcyA6IDAiICUgKGpzb25fcGFyYW1fbmFtZSwganNvbl9wYXJhbV9uYW1lKQog
ICAgICAgICAgICAgICAgICAgICAjIEZJWE1FOiBwYXNzIG9wdGlvbmFsIHJlZnB0ci12YWx1ZXMg
YXMgUGFzc1JlZlB0cgogICAgICAgICAgICAgICAgICAgICBmb3JtYWxfcGFyYW1fdHlwZV9wYXR0
ZXJuID0gImNvbnN0ICVzKiIKICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAg
ICAgICBjb2RlID0gKCIgICAgJXMgaW5fJXMgPSBnZXQlcyhwYXJhbXNDb250YWluZXJQdHIsIFwi
JXNcIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpO1xuIiAlCisgICAgICAgICAgICAgICAgICAgIGNv
ZGUgPSAoIiAgICAlcyBpbl8lcyA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXQlcyhw
YXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbChcIiVzXCIpLCBudWxscHRyLCBwcm90b2Nv
bEVycm9yc1B0cik7XG4iICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobm9uX29wdGlv
bmFsX3R5cGVfbW9kZWwuZ2V0X2NvbW1hbmRfcmV0dXJuX3Bhc3NfbW9kZWwoKS5nZXRfcmV0dXJu
X3Zhcl90eXBlKCksIGpzb25fcGFyYW1fbmFtZSwgZ2V0dGVyX25hbWUsIGpzb25fcGFyYW1fbmFt
ZSkpCiAgICAgICAgICAgICAgICAgICAgIHBhcmFtID0gIiwgaW5fJXMiICUganNvbl9wYXJhbV9u
YW1lCiAgICAgICAgICAgICAgICAgICAgICMgRklYTUU6IHBhc3Mgbm90LW9wdGlvbmFsIHJlZnB0
ci12YWx1ZXMgYXMgTm9uTnVsbFBhc3NSZWZQdHIKQEAgLTIwMzYsNyArMjA0Miw3IEBAIGNsYXNz
IEdlbmVyYXRvcjoKIAogICAgICAgICAgICAgICAgIG1ldGhvZF9pbl9jb2RlICs9IGNvZGUKICAg
ICAgICAgICAgICAgICBhZ2VudF9jYWxsX3BhcmFtX2xpc3QuYXBwZW5kKHBhcmFtKQotICAgICAg
ICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2FnZW50X2ludGVyZmFjZV9saXN0LmFwcGVuZCgi
LCAlcyBpbl8lcyIgJSAoZm9ybWFsX3BhcmFtX3R5cGVfcGF0dGVybiAlIG5vbl9vcHRpb25hbF90
eXBlX21vZGVsLmdldF9jb21tYW5kX3JldHVybl9wYXNzX21vZGVsKCkuZ2V0X3JldHVybl92YXJf
dHlwZSgpLCBqc29uX3BhcmFtX25hbWUpKQorICAgICAgICAgICAgICAgIEdlbmVyYXRvci5iYWNr
ZW5kX2hhbmRsZXJfaW50ZXJmYWNlX2xpc3QuYXBwZW5kKCIsICVzIGluXyVzIiAlIChmb3JtYWxf
cGFyYW1fdHlwZV9wYXR0ZXJuICUgbm9uX29wdGlvbmFsX3R5cGVfbW9kZWwuZ2V0X2NvbW1hbmRf
cmV0dXJuX3Bhc3NfbW9kZWwoKS5nZXRfcmV0dXJuX3Zhcl90eXBlKCksIGpzb25fcGFyYW1fbmFt
ZSkpCiAKICAgICAgICAgICAgICAgICBqc19iaW5kX3R5cGUgPSBwYXJhbV9yYXdfdHlwZS5nZXRf
anNfYmluZF90eXBlKCkKICAgICAgICAgICAgICAgICBqc19wYXJhbV90ZXh0ID0gIntcIm5hbWVc
IjogXCIlc1wiLCBcInR5cGVcIjogXCIlc1wiLCBcIm9wdGlvbmFsXCI6ICVzfSIgJSAoCkBAIC0y
MDYwLDIyICsyMDY2LDIyIEBAIGNsYXNzIEdlbmVyYXRvcjoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkZWNsX3BhcmFtZXRlcl9saXN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdlbmVyYXRvci5DYWxsYmFja01ldGhvZFN0
cnVjdFRlbXBsYXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdlbmVyYXRvci5iYWNrZW5kX21ldGhvZF9pbXBsZW1lbnRhdGlvbl9saXN0LCBUZW1wbGF0ZXMu
Y2FsbGJhY2tfbWV0aG9kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHsiY2FsbGJhY2tOYW1lIjogY2FsbGJhY2tfbmFtZSwgImFnZW50TmFtZSI6IGFnZW50X2lu
dGVyZmFjZV9uYW1lfSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB7ImNhbGxiYWNrTmFtZSI6IGNhbGxiYWNrX25hbWUsICJoYW5kbGVyTmFtZSI6IGFnZW50X2lu
dGVyZmFjZV9uYW1lfSkKIAotICAgICAgICAgICAgY2FsbGJhY2tfd3JpdGVyLm5ld2xpbmUoImNs
YXNzICIgKyBjYWxsYmFja19uYW1lICsgIiA6IHB1YmxpYyBDYWxsYmFja0Jhc2Uge1xuIikKKyAg
ICAgICAgICAgIGNhbGxiYWNrX3dyaXRlci5uZXdsaW5lKCJjbGFzcyAiICsgY2FsbGJhY2tfbmFt
ZSArICIgOiBwdWJsaWMgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZSB7
XG4iKQogICAgICAgICAgICAgY2FsbGJhY2tfd3JpdGVyLm5ld2xpbmUoInB1YmxpYzpcbiIpCi0g
ICAgICAgICAgICBjYWxsYmFja193cml0ZXIubmV3bGluZSgiICAgICIgKyBjYWxsYmFja19uYW1l
ICsgIihQYXNzUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbD4sIGludCBpZCk7
XG4iKQorICAgICAgICAgICAgY2FsbGJhY2tfd3JpdGVyLm5ld2xpbmUoIiAgICAiICsgY2FsbGJh
Y2tfbmFtZSArICIoUGFzc1JlZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4sIGludCBp
ZCk7XG4iKQogICAgICAgICAgICAgY2FsbGJhY2tfd3JpdGVyLm5ld2xpbmUoIiAgICB2b2lkIHNl
bmRTdWNjZXNzKCIgKyAiLCAiLmpvaW4oZGVjbF9wYXJhbWV0ZXJfbGlzdCkgKyAiKTtcbiIpCiAg
ICAgICAgICAgICBjYWxsYmFja193cml0ZXIubmV3bGluZSgifTtcbiIpCiAKICAgICAgICAgICAg
IGFkX2hvY190eXBlX291dHB1dC5hcHBlbmQoY2FsbGJhY2tfb3V0cHV0KQogCi0gICAgICAgICAg
ICBtZXRob2Rfb3V0X2NvZGUgKz0gIiAgICBSZWZQdHI8IiArIGFnZW50X2ludGVyZmFjZV9uYW1l
ICsgIjo6IiArIGNhbGxiYWNrX25hbWUgKyAiPiBjYWxsYmFjayA9IGFkb3B0UmVmKG5ldyAiICsg
YWdlbnRfaW50ZXJmYWNlX25hbWUgKyAiOjoiICsgY2FsbGJhY2tfbmFtZSArICIodGhpcywgY2Fs
bElkKSk7XG4iCisgICAgICAgICAgICBtZXRob2Rfb3V0X2NvZGUgKz0gIiAgICBSZWZQdHI8IiAr
IGFnZW50X2ludGVyZmFjZV9uYW1lICsgIjo6IiArIGNhbGxiYWNrX25hbWUgKyAiPiBjYWxsYmFj
ayA9IGFkb3B0UmVmKG5ldyAiICsgYWdlbnRfaW50ZXJmYWNlX25hbWUgKyAiOjoiICsgY2FsbGJh
Y2tfbmFtZSArICIobV9iYWNrZW5kRGlzcGF0Y2hlciwgY2FsbElkKSk7XG4iCiAgICAgICAgICAg
ICBhZ2VudF9jYWxsX3BhcmFtX2xpc3QuYXBwZW5kKCIsIGNhbGxiYWNrIikKLSAgICAgICAgICAg
IHJlc3BvbnNlX2Nvb2tfdGV4dCArPSAiICAgICAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSBcbiIK
KyAgICAgICAgICAgIHJlc3BvbnNlX2Nvb2tfdGV4dCArPSAiICAgICAgICBpZiAoIWVycm9yLmxl
bmd0aCgpKVxuIgogICAgICAgICAgICAgcmVzcG9uc2VfY29va190ZXh0ICs9ICIgICAgICAgICAg
ICByZXR1cm47XG4iCiAgICAgICAgICAgICByZXNwb25zZV9jb29rX3RleHQgKz0gIiAgICAgICAg
Y2FsbGJhY2stPmRpc2FibGUoKTtcbiIKLSAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2Fn
ZW50X2ludGVyZmFjZV9saXN0LmFwcGVuZCgiLCBQYXNzUmVmUHRyPCVzPiBjYWxsYmFjayIgJSBj
YWxsYmFja19uYW1lKQorICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfaGFuZGxlcl9pbnRl
cmZhY2VfbGlzdC5hcHBlbmQoIiwgUGFzc1JlZlB0cjwlcz4gY2FsbGJhY2siICUgY2FsbGJhY2tf
bmFtZSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGlmICJyZXR1cm5zIiBpbiBqc29uX2Nv
bW1hbmQ6CiAgICAgICAgICAgICAgICAgbWV0aG9kX291dF9jb2RlICs9ICJcbiIKQEAgLTIxMDIs
NyArMjEwOCw3IEBAIGNsYXNzIEdlbmVyYXRvcjoKICAgICAgICAgICAgICAgICAgICAgaWYgcmV0
dXJuX3R5cGVfYmluZGluZy5nZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb25fcGF0dGVybigpOgog
ICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGVyX2FyZ3VtZW50ID0gcmV0dXJuX3R5cGVfYmlu
ZGluZy5nZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb25fcGF0dGVybigpICUgc2V0dGVyX2FyZ3Vt
ZW50CiAKLSAgICAgICAgICAgICAgICAgICAgY29vayA9ICIgICAgICAgICAgICByZXN1bHQtPnNl
dCVzKFwiJXNcIiwgJXMpO1xuIiAlIChzZXR0ZXJfdHlwZSwganNvbl9yZXR1cm5fbmFtZSwKKyAg
ICAgICAgICAgICAgICAgICAgY29vayA9ICIgICAgICAgICAgICByZXN1bHQtPnNldCVzKEFTQ0lJ
TGl0ZXJhbChcIiVzXCIpLCAlcyk7XG4iICUgKHNldHRlcl90eXBlLCBqc29uX3JldHVybl9uYW1l
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNldHRlcl9hcmd1bWVudCkKIAogICAgICAgICAgICAgICAgICAg
ICBzZXRfY29uZGl0aW9uX3BhdHRlcm4gPSB0eXBlX21vZGVsLmdldF9jb21tYW5kX3JldHVybl9w
YXNzX21vZGVsKCkuZ2V0X3NldF9yZXR1cm5fY29uZGl0aW9uKCkKQEAgLTIxMTQsNyArMjEyMCw3
IEBAIGNsYXNzIEdlbmVyYXRvcjoKICAgICAgICAgICAgICAgICAgICAgaWYgb3B0aW9uYWw6CiAg
ICAgICAgICAgICAgICAgICAgICAgICBwYXJhbV9uYW1lID0gIm9wdF8iICsgcGFyYW1fbmFtZQog
Ci0gICAgICAgICAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2FnZW50X2ludGVyZmFjZV9s
aXN0LmFwcGVuZCgiLCAlcyAlcyIgJSAoYW5ub3RhdGVkX3R5cGUsIHBhcmFtX25hbWUpKQorICAg
ICAgICAgICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9oYW5kbGVyX2ludGVyZmFjZV9saXN0
LmFwcGVuZCgiLCAlcyAlcyIgJSAoYW5ub3RhdGVkX3R5cGUsIHBhcmFtX25hbWUpKQogICAgICAg
ICAgICAgICAgICAgICByZXNwb25zZV9jb29rX2xpc3QuYXBwZW5kKGNvb2spCiAKICAgICAgICAg
ICAgICAgICAgICAgbWV0aG9kX291dF9jb2RlICs9IGNvZGUKQEAgLTIxMzQsMTggKzIxNDAsMTYg
QEAgY2xhc3MgR2VuZXJhdG9yOgogICAgICAgICBqc19yZXBseV9saXN0ID0gIlslc10iICUgIiwg
Ii5qb2luKGJhY2tlbmRfanNfcmVwbHlfcGFyYW1fbGlzdCkKIAogICAgICAgICBHZW5lcmF0b3Iu
YmFja2VuZF9tZXRob2RfaW1wbGVtZW50YXRpb25fbGlzdC5hcHBlbmQoVGVtcGxhdGVzLmJhY2tl
bmRfbWV0aG9kLnN1YnN0aXR1dGUoTm9uZSwKLSAgICAgICAgICAgIGRvbWFpbk5hbWU9ZG9tYWlu
X25hbWUsIG1ldGhvZE5hbWU9anNvbl9jb21tYW5kX25hbWUsCi0gICAgICAgICAgICBhZ2VudEZp
ZWxkPSJtXyIgKyBhZ2VudF9maWVsZF9uYW1lLAorICAgICAgICAgICAgZGlzcGF0Y2hlck5hbWU9
ZGlzcGF0Y2hlcl9uYW1lLAorICAgICAgICAgICAgbWV0aG9kTmFtZT1qc29uX2NvbW1hbmRfbmFt
ZSwKICAgICAgICAgICAgIG1ldGhvZEluQ29kZT1tZXRob2RfaW5fY29kZSwKICAgICAgICAgICAg
IG1ldGhvZE91dENvZGU9bWV0aG9kX291dF9jb2RlLAogICAgICAgICAgICAgYWdlbnRDYWxsUGFy
YW1zPSIiLmpvaW4oYWdlbnRfY2FsbF9wYXJhbV9saXN0KSwKICAgICAgICAgICAgIHJlcXVlc3RN
ZXNzYWdlT2JqZWN0PXJlcXVlc3RfbWVzc2FnZV9wYXJhbSwKLSAgICAgICAgICAgIHJlc3BvbnNl
Q29vaz1yZXNwb25zZV9jb29rX3RleHQsCi0gICAgICAgICAgICBjb21tYW5kTmFtZUluZGV4PWNt
ZF9lbnVtX25hbWUpKQotICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9tZXRob2RfbmFtZV9kZWNs
YXJhdGlvbl9saXN0LmFwcGVuZCgiICAgIFwiJXMuJXNcIiwiICUgKGRvbWFpbl9uYW1lLCBqc29u
X2NvbW1hbmRfbmFtZSkpCisgICAgICAgICAgICByZXNwb25zZUNvb2s9cmVzcG9uc2VfY29va190
ZXh0KSkKIAogICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9qc19kb21haW5faW5pdGlhbGl6ZXJf
bGlzdC5hcHBlbmQoIkluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKFwiJXMuJXNcIiwg
WyVzXSwgJXMpO1xuIiAlIChkb21haW5fbmFtZSwganNvbl9jb21tYW5kX25hbWUsIGpzX3BhcmFt
ZXRlcnNfdGV4dCwganNfcmVwbHlfbGlzdCkpCi0gICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2Fn
ZW50X2ludGVyZmFjZV9saXN0LmFwcGVuZCgiKSA9IDA7XG4iKQorICAgICAgICBHZW5lcmF0b3Iu
YmFja2VuZF9oYW5kbGVyX2ludGVyZmFjZV9saXN0LmFwcGVuZCgiKSA9IDA7XG4iKQogCiAgICAg
Y2xhc3MgQ2FsbGJhY2tNZXRob2RTdHJ1Y3RUZW1wbGF0ZToKICAgICAgICAgQHN0YXRpY21ldGhv
ZApAQCAtMjE5Myw3ICsyMTk3LDcgQEAgY2xhc3MgR2VuZXJhdG9yOgogICAgICAgICAgICAgICAg
IGlmIG1vZGVfdHlwZV9iaW5kaW5nLmdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJu
KCk6CiAgICAgICAgICAgICAgICAgICAgIHNldHRlcl9hcmd1bWVudCA9IG1vZGVfdHlwZV9iaW5k
aW5nLmdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKCkgJSBzZXR0ZXJfYXJndW1l
bnQKIAotICAgICAgICAgICAgICAgIHNldHRlcl9jb2RlID0gIiAgICAlcy0+c2V0JXMoXCIlc1wi
LCAlcyk7XG4iICUgKG1ldGhvZF9zdHJ1Y3RfdGVtcGxhdGUuY29udGFpbmVyX25hbWUsIHNldHRl
cl90eXBlLCBwYXJhbWV0ZXJfbmFtZSwgc2V0dGVyX2FyZ3VtZW50KQorICAgICAgICAgICAgICAg
IHNldHRlcl9jb2RlID0gIiAgICAlcy0+c2V0JXMoQVNDSUlMaXRlcmFsKFwiJXNcIiksICVzKTtc
biIgJSAobWV0aG9kX3N0cnVjdF90ZW1wbGF0ZS5jb250YWluZXJfbmFtZSwgc2V0dGVyX3R5cGUs
IHBhcmFtZXRlcl9uYW1lLCBzZXR0ZXJfYXJndW1lbnQpCiAgICAgICAgICAgICAgICAgaWYgb3B0
aW9uYWw6CiAgICAgICAgICAgICAgICAgICAgIHNldHRlcl9jb2RlID0gKCIgICAgaWYgKCVzKVxu
ICAgICIgJSBwYXJhbWV0ZXJfbmFtZSkgKyBzZXR0ZXJfY29kZQogICAgICAgICAgICAgICAgIG1l
dGhvZF9saW5lX2xpc3QuYXBwZW5kKHNldHRlcl9jb2RlKQpAQCAtMjM3NSwxOCArMjM3OSwxMSBA
QCBiYWNrZW5kX2pzX2ZpbGUgPSBTbWFydE91dHB1dChvdXRwdXRfanNfZGlybmFtZSArICIvSW5z
cGVjdG9yQmFja2VuZENvbW1hbmRzLmpzIgogCiAKIGJhY2tlbmRfaF9maWxlLndyaXRlKFRlbXBs
YXRlcy5iYWNrZW5kX2guc3Vic3RpdHV0ZShOb25lLAotICAgIHZpcnR1YWxTZXR0ZXJzPSJcbiIu
am9pbihHZW5lcmF0b3IuYmFja2VuZF92aXJ0dWFsX3NldHRlcnNfbGlzdCksCi0gICAgYWdlbnRJ
bnRlcmZhY2VzPSIiLmpvaW4oZmxhdHRlbl9saXN0KEdlbmVyYXRvci5iYWNrZW5kX2FnZW50X2lu
dGVyZmFjZV9saXN0KSksCi0gICAgbWV0aG9kTmFtZXNFbnVtQ29udGVudD0iXG4iLmpvaW4oR2Vu
ZXJhdG9yLm1ldGhvZF9uYW1lX2VudW1fbGlzdCkpKQorICAgIGhhbmRsZXJJbnRlcmZhY2VzPSIi
LmpvaW4oZmxhdHRlbl9saXN0KEdlbmVyYXRvci5iYWNrZW5kX2hhbmRsZXJfaW50ZXJmYWNlX2xp
c3QpKSwKKyAgICBkaXNwYXRjaGVySW50ZXJmYWNlcz0iIi5qb2luKGZsYXR0ZW5fbGlzdChHZW5l
cmF0b3IuYmFja2VuZF9kaXNwYXRjaGVyX2ludGVyZmFjZV9saXN0KSkpKQogCiBiYWNrZW5kX2Nw
cF9maWxlLndyaXRlKFRlbXBsYXRlcy5iYWNrZW5kX2NwcC5zdWJzdGl0dXRlKE5vbmUsCi0gICAg
Y29uc3RydWN0b3JJbml0PSJcbiIuam9pbihHZW5lcmF0b3IuYmFja2VuZF9jb25zdHJ1Y3Rvcl9p
bml0X2xpc3QpLAotICAgIHNldHRlcnM9IlxuIi5qb2luKEdlbmVyYXRvci5iYWNrZW5kX3NldHRl
cnNfbGlzdCksCi0gICAgZmllbGREZWNsYXJhdGlvbnM9IlxuIi5qb2luKEdlbmVyYXRvci5iYWNr
ZW5kX2ZpZWxkX2xpc3QpLAotICAgIG1ldGhvZE5hbWVEZWNsYXJhdGlvbnM9IlxuIi5qb2luKEdl
bmVyYXRvci5iYWNrZW5kX21ldGhvZF9uYW1lX2RlY2xhcmF0aW9uX2xpc3QpLAotICAgIG1ldGhv
ZHM9IlxuIi5qb2luKEdlbmVyYXRvci5iYWNrZW5kX21ldGhvZF9pbXBsZW1lbnRhdGlvbl9saXN0
KSwKLSAgICBtZXRob2REZWNsYXJhdGlvbnM9IlxuIi5qb2luKEdlbmVyYXRvci5iYWNrZW5kX21l
dGhvZF9kZWNsYXJhdGlvbl9saXN0KSwKLSAgICBtZXNzYWdlSGFuZGxlcnM9IlxuIi5qb2luKEdl
bmVyYXRvci5tZXRob2RfaGFuZGxlcl9saXN0KSkpCisgICAgbWV0aG9kcz0iXG4iLmpvaW4oR2Vu
ZXJhdG9yLmJhY2tlbmRfbWV0aG9kX2ltcGxlbWVudGF0aW9uX2xpc3QpKSkKIAogZnJvbnRlbmRf
aF9maWxlLndyaXRlKFRlbXBsYXRlcy5mcm9udGVuZF9oLnN1YnN0aXR1dGUoTm9uZSwKICAgICBk
b21haW5DbGFzc0xpc3Q9IiIuam9pbihHZW5lcmF0b3IuZnJvbnRlbmRfZG9tYWluX2NsYXNzX2xp
bmVzKSkpCkBAIC0yNDE4LDMgKzI0MTUsMTQgQEAgdHlwZWJ1aWxkZXJfaF9maWxlLmNsb3NlKCkK
IHR5cGVidWlsZGVyX2NwcF9maWxlLmNsb3NlKCkKIAogYmFja2VuZF9qc19maWxlLmNsb3NlKCkK
KworIyBGSVhNRTogVGhpcyBleGlzdHMgdG8gcmVtb3ZlIHNvbWUgb2xkIGdlbmVyYXRlZCBmaWxl
cyB0aGF0IGNhbiBjYXVzZSBidWlsZCBpc3N1ZXMgaWYKKyMgYSBjb21waWxlciBpbmNsdWRlcyB0
aGUgb2xkIGZpbGVzIGluc3RlYWQgb2YgdGhlIG5ldyBmaWxlcyB3aXRoIHRoZSBzYW1lIG5hbWUu
IFRoaXMKKyMgY2FuIGJlIHJlbW92ZWQgYWZ0ZXIgYSB3ZWVrIG9yIHNvIG9uY2UgYm90cyBhbmQg
ZGV2ZWxvcGVycyBoYXZlIGJ1aWx0IHdpdGggdGhpcy4KKyMgT3RoZXJ3aXNlLCBkZXZlbG9wZXJz
IGNhbiBhbHdheXMganVzdCBkbyBhIGNsZWFuIGJ1aWxkIG9yIHJlbW92ZSB0aGVpciBEZXJpdmVk
U291cmNlcy4KK29sZF9iYWNrZW5kX2hfZmlsZSA9IG9zLnBhdGguam9pbihvdXRwdXRfaGVhZGVy
X2Rpcm5hbWUsICJJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oIikKK29sZF9iYWNrZW5kX2Nw
cF9maWxlID0gb3MucGF0aC5qb2luKG91dHB1dF9oZWFkZXJfZGlybmFtZSwgIkluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyLmNwcCIpCitpZiBvcy5wYXRoLmV4aXN0cyhvbGRfYmFja2VuZF9oX2Zp
bGUpOgorICAgIG9zLnJlbW92ZShvbGRfYmFja2VuZF9oX2ZpbGUpCitpZiBvcy5wYXRoLmV4aXN0
cyhvbGRfYmFja2VuZF9jcHBfZmlsZSk6CisgICAgb3MucmVtb3ZlKG9sZF9iYWNrZW5kX2NwcF9m
aWxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJ
bnNwZWN0b3JTdHJpbmdzLnB5IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0
b3JJbnNwZWN0b3JTdHJpbmdzLnB5CmluZGV4IDhmN2QwNGMuLjNjZGM1MTcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yU3RyaW5ncy5w
eQorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3RvclN0
cmluZ3MucHkKQEAgLTM5LDIzICszOSw2MyBAQCAke2Zyb250ZW5kRG9tYWluTWV0aG9kRGVjbGFy
YXRpb25zfXByaXZhdGU6CiAKICIiIikKIAorYmFja2VuZF9kaXNwYXRjaGVyX2NvbnN0cnVjdG9y
ID0gKAorIiIiUGFzc1JlZlB0cjwke2Rpc3BhdGNoZXJOYW1lfT4gJHtkaXNwYXRjaGVyTmFtZX06
OmNyZWF0ZShJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIsICR7
YWdlbnROYW1lfSogYWdlbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyAke2Rpc3BhdGNo
ZXJOYW1lfShiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKK30KKworJHtkaXNwYXRjaGVyTmFt
ZX06OiR7ZGlzcGF0Y2hlck5hbWV9KEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5k
RGlzcGF0Y2hlciwgJHthZ2VudE5hbWV9KiBhZ2VudCkKKyAgICA6IEluc3BlY3RvclN1cHBsZW1l
bnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQorICAgICwgbV9hZ2VudChh
Z2VudCkKK3sKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JE
b21haW4oQVNDSUlMaXRlcmFsKCIke2RvbWFpbk5hbWV9IiksIHRoaXMpOworfQorIiIiKQorCiti
YWNrZW5kX2Rpc3BhdGNoZXJfZGlzcGF0Y2hfbWV0aG9kID0gKAorIiIidm9pZCAke2Rpc3BhdGNo
ZXJOYW1lfTo6ZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNz
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSkKK3sKKyAgICBSZWY8JHtkaXNwYXRjaGVy
TmFtZX0+IHByb3RlY3QoKnRoaXMpOworCisgICAgdHlwZWRlZiB2b2lkICgke2Rpc3BhdGNoZXJO
YW1lfTo6KkNhbGxIYW5kbGVyKShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBt
ZXNzYWdlKTsKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj4gRGlzcGF0
Y2hNYXA7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChEaXNwYXRjaE1hcCwgZGlzcGF0Y2hNYXAs
ICgpKTsKKyAgICBpZiAoZGlzcGF0Y2hNYXAuaXNFbXB0eSgpKSB7CisgICAgICAgIHN0YXRpYyBj
b25zdCBzdHJ1Y3QgTWV0aG9kVGFibGUgeworICAgICAgICAgICAgY29uc3QgY2hhciogbmFtZTsK
KyAgICAgICAgICAgIENhbGxIYW5kbGVyIGhhbmRsZXI7CisgICAgICAgIH0gY29tbWFuZHNbXSA9
IHsKKyR7ZGlzcGF0Y2hlckNvbW1hbmRzfQorICAgICAgICB9OworICAgICAgICBzaXplX3QgbGVu
Z3RoID0gV1RGX0FSUkFZX0xFTkdUSChjb21tYW5kcyk7CisgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbGVuZ3RoOyArK2kpCisgICAgICAgICAgICBkaXNwYXRjaE1hcC5hZGQoY29tbWFu
ZHNbaV0ubmFtZSwgY29tbWFuZHNbaV0uaGFuZGxlcik7CisgICAgfQorCisgICAgSGFzaE1hcDxT
dHJpbmcsIENhbGxIYW5kbGVyPjo6aXRlcmF0b3IgaXQgPSBkaXNwYXRjaE1hcC5maW5kKG1ldGhv
ZCk7CisgICAgaWYgKGl0ID09IGRpc3BhdGNoTWFwLmVuZCgpKSB7CisgICAgICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCBTdHJpbmcoIiciKSArICIke2RvbWFpbk5hbWV9
IiArICcuJyArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgICgoKnRoaXMpLippdC0+dmFsdWUpKGNhbGxJZCwgKm1lc3NhZ2UuZ2V0KCkp
OworfQorIiIiKQorCiBiYWNrZW5kX21ldGhvZCA9ICgKLSIiInZvaWQgSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXJJbXBsOjoke2RvbWFpbk5hbWV9XyRtZXRob2ROYW1lKGxvbmcgY2FsbElkLCBJ
bnNwZWN0b3JPYmplY3QqJHJlcXVlc3RNZXNzYWdlT2JqZWN0KQorIiIidm9pZCAke2Rpc3BhdGNo
ZXJOYW1lfTo6JHttZXRob2ROYW1lfShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0
JiR7cmVxdWVzdE1lc3NhZ2VPYmplY3R9KQogewogICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4g
cHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7Ci0KLSAgICBpZiAoISRh
Z2VudEZpZWxkKQotICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiJHtkb21haW5O
YW1lfSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7Ci0kbWV0aG9kT3V0Q29kZQotJG1ldGhv
ZEluQ29kZQorJHttZXRob2RPdXRDb2RlfSR7bWV0aG9kSW5Db2RlfQogICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgRXJy
b3JTdHJpbmcgZXJyb3I7CiAgICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKLSAg
ICAgICAgJGFnZW50RmllbGQtPiRtZXRob2ROYW1lKCZlcnJvciRhZ2VudENhbGxQYXJhbXMpOwor
ICAgICAgICBtX2FnZW50LT4ke21ldGhvZE5hbWV9KCZlcnJvciR7YWdlbnRDYWxsUGFyYW1zfSk7
CiAKICR7cmVzcG9uc2VDb29rfQogICAgIH0KLSAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1
bHQucmVsZWFzZSgpLCBjb21tYW5kTmFtZXNbJGNvbW1hbmROYW1lSW5kZXhdLCBwcm90b2NvbEVy
cm9ycy5yZWxlYXNlKCksIGVycm9yKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVz
cG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCks
IGVycm9yKTsKIH0KICIiIikKIApAQCAtNjksMTIgKzEwOSwxMiBAQCAkY29kZQogIiIiKQogCiBj
YWxsYmFja19tZXRob2QgPSAoCi0iIiJJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6JGFnZW50
TmFtZTo6JGNhbGxiYWNrTmFtZTo6JGNhbGxiYWNrTmFtZShQYXNzUmVmUHRyPEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVySW1wbD4gYmFja2VuZEltcGwsIGludCBpZCkgOiBDYWxsYmFja0Jhc2Uo
YmFja2VuZEltcGwsIGlkKSB7fQorIiIiJHtoYW5kbGVyTmFtZX06OiR7Y2FsbGJhY2tOYW1lfTo6
JHtjYWxsYmFja05hbWV9KFBhc3NSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IGJh
Y2tlbmREaXNwYXRjaGVyLCBpbnQgaWQpIDogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNh
bGxiYWNrQmFzZShiYWNrZW5kRGlzcGF0Y2hlciwgaWQpIHsgfQogCi12b2lkIEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjokYWdlbnROYW1lOjokY2FsbGJhY2tOYW1lOjpzZW5kU3VjY2Vzcygk
cGFyYW1ldGVycykKK3ZvaWQgJHtoYW5kbGVyTmFtZX06OiR7Y2FsbGJhY2tOYW1lfTo6c2VuZFN1
Y2Nlc3MoJHtwYXJhbWV0ZXJzfSkKIHsKICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBqc29u
TWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0kY29kZSAgICBzZW5kSWZBY3Rp
dmUoanNvbk1lc3NhZ2UsIEVycm9yU3RyaW5nKCkpOworJHtjb2RlfSAgICBzZW5kSWZBY3RpdmUo
anNvbk1lc3NhZ2UsIEVycm9yU3RyaW5nKCkpOwogfQogIiIiKQogCkBAIC0xMDYsODQgKzE0Niwy
OCBAQCBiYWNrZW5kX2ggPSAoCiAiIiIjaWZuZGVmIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
c19oCiAjZGVmaW5lIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyc19oCiAKKyNpbmNsdWRlICJJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oIgorI2luY2x1ZGUgIkluc3BlY3RvclR5cGVCdWls
ZGVyLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotI2luY2x1ZGUgIkluc3Bl
Y3RvclR5cGVCdWlsZGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgSW5zcGVj
dG9yQWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JPYmplY3Q7CiBjbGFzcyBJbnNwZWN0b3JBcnJheTsK
LWNsYXNzIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKIAogdHlwZWRlZiBTdHJpbmcgRXJyb3JT
dHJpbmc7CiAKLWNsYXNzIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDsKLQotY2xhc3Mg
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6IHB1YmxpYyBSZWZDb3VudGVkPEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyPiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGlu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCk7Ci0gICAgdmlydHVhbCB+SW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXIoKSB7IH0KLQotICAgIGNsYXNzIENhbGxiYWNrQmFzZTogcHVibGljIFJlZkNvdW50
ZWQ8Q2FsbGJhY2tCYXNlPiB7Ci0gICAgcHVibGljOgotICAgICAgICBDYWxsYmFja0Jhc2UoUGFz
c1JlZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw+IGJhY2tlbmRJbXBsLCBpbnQg
aWQpOwotICAgICAgICB2aXJ0dWFsIH5DYWxsYmFja0Jhc2UoKTsKLSAgICAgICAgdm9pZCBzZW5k
RmFpbHVyZShjb25zdCBFcnJvclN0cmluZyYpOwotICAgICAgICBib29sIGlzQWN0aXZlKCk7Ci0K
LSAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIHZvaWQgc2VuZElmQWN0aXZlKFBhc3NSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBwYXJ0aWFsTWVzc2FnZSwgY29uc3QgRXJyb3JTdHJpbmcmIGludm9jYXRp
b25FcnJvcik7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICB2b2lkIGRpc2FibGUoKSB7IG1fYWxy
ZWFkeVNlbnQgPSB0cnVlOyB9Ci0KLSAgICAgICAgUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVySW1wbD4gbV9iYWNrZW5kSW1wbDsKLSAgICAgICAgaW50IG1faWQ7Ci0gICAgICAgIGJv
b2wgbV9hbHJlYWR5U2VudDsKLQotICAgICAgICBmcmllbmQgY2xhc3MgSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXJJbXBsOwotICAgIH07Ci0KLSRhZ2VudEludGVyZmFjZXMKLSR2aXJ0dWFsU2V0
dGVycwotCi0gICAgdmlydHVhbCB2b2lkIGNsZWFyRnJvbnRlbmQoKSA9IDA7Ci0KLSAgICBlbnVt
IENvbW1vbkVycm9yQ29kZSB7Ci0gICAgICAgIFBhcnNlRXJyb3IgPSAwLAotICAgICAgICBJbnZh
bGlkUmVxdWVzdCwKLSAgICAgICAgTWV0aG9kTm90Rm91bmQsCi0gICAgICAgIEludmFsaWRQYXJh
bXMsCi0gICAgICAgIEludGVybmFsRXJyb3IsCi0gICAgICAgIFNlcnZlckVycm9yLAotICAgICAg
ICBMYXN0RW50cnksCi0gICAgfTsKLQotICAgIHZvaWQgcmVwb3J0UHJvdG9jb2xFcnJvcihjb25z
dCBsb25nKiBjb25zdCBjYWxsSWQsIENvbW1vbkVycm9yQ29kZSwgY29uc3QgU3RyaW5nJiBlcnJv
ck1lc3NhZ2UpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCByZXBvcnRQcm90b2NvbEVycm9yKGNv
bnN0IGxvbmcqIGNvbnN0IGNhbGxJZCwgQ29tbW9uRXJyb3JDb2RlLCBjb25zdCBTdHJpbmcmIGVy
cm9yTWVzc2FnZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gZGF0YSkgY29uc3QgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpID0gMDsKLQot
ICAgIGVudW0gTWV0aG9kTmFtZXMgewotJG1ldGhvZE5hbWVzRW51bUNvbnRlbnQKLQotICAgICAg
ICBrTWV0aG9kTmFtZXNFbnVtU2l6ZQotICAgIH07Ci0KLSAgICBzdGF0aWMgY29uc3QgY2hhciog
Y29tbWFuZE5hbWVzW107Ci19OworJGhhbmRsZXJJbnRlcmZhY2VzCiAKKyRkaXNwYXRjaGVySW50
ZXJmYWNlcwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCiAjZW5kaWYgLy8gIWRlZmluZWQoSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXJzX2gpCi0KLQogIiIiKQogCiBiYWNrZW5kX2NwcCA9ICgK
ICIiIgotCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQpAQCAt
MTk4LDI3NSArMTgyLDcgQEAgYmFja2VuZF9jcHAgPSAoCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotY29uc3QgY2hhciogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmNvbW1hbmROYW1lc1td
ID0gewotJG1ldGhvZE5hbWVEZWNsYXJhdGlvbnMKLX07Ci0KLQotY2xhc3MgSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXJJbXBsIDogcHVibGljIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyIHsK
LXB1YmxpYzoKLSAgICBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGwoSW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCi0gICAgICAgIDogbV9pbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQotJGNvbnN0cnVj
dG9ySW5pdAotICAgIHsgfQotCi0gICAgdmlydHVhbCB2b2lkIGNsZWFyRnJvbnRlbmQoKSB7IG1f
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gMDsgfQotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRj
aChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwotICAgIHZpcnR1YWwgdm9pZCByZXBvcnRQcm90b2Nv
bEVycm9yKGNvbnN0IGxvbmcqIGNvbnN0IGNhbGxJZCwgQ29tbW9uRXJyb3JDb2RlLCBjb25zdCBT
dHJpbmcmIGVycm9yTWVzc2FnZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gZGF0YSkgY29u
c3Q7Ci0gICAgdXNpbmcgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnJlcG9ydFByb3RvY29s
RXJyb3I7Ci0KLSAgICB2b2lkIHNlbmRSZXNwb25zZShsb25nIGNhbGxJZCwgUGFzc1JlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHJlc3VsdCwgY29uc3QgRXJyb3JTdHJpbmcmIGludm9jYXRpb25FcnJv
cik7Ci0gICAgYm9vbCBpc0FjdGl2ZSgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsOyB9Ci0KLSRzZXR0ZXJzCi1wcml2YXRlOgotJG1ldGhvZERlY2xhcmF0aW9ucwotCi0gICAg
SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKLSRm
aWVsZERlY2xhcmF0aW9ucwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgUiwgdHlwZW5hbWUgViwg
dHlwZW5hbWUgVjA+Ci0gICAgc3RhdGljIFIgZ2V0UHJvcGVydHlWYWx1ZUltcGwoSW5zcGVjdG9y
T2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5z
cGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzLCBWMCBpbml0aWFsX3ZhbHVlLCBib29sICgqYXNf
bWV0aG9kKShJbnNwZWN0b3JWYWx1ZSosIFYqKSwgY29uc3QgY2hhciogdHlwZV9uYW1lKTsKLQot
ICAgIHN0YXRpYyBpbnQgZ2V0SW50KEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJp
bmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9y
cyk7Ci0gICAgc3RhdGljIGRvdWJsZSBnZXREb3VibGUoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3Qs
IGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHBy
b3RvY29sRXJyb3JzKTsKLSAgICBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhJbnNwZWN0b3JPYmpl
Y3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0
b3JBcnJheSogcHJvdG9jb2xFcnJvcnMpOwotICAgIHN0YXRpYyBib29sIGdldEJvb2xlYW4oSW5z
cGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3Vu
ZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGdldE9iamVjdChJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29u
c3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9j
b2xFcnJvcnMpOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBnZXRBcnJh
eShJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1
ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMpOwotCi0gICAgdm9pZCBzZW5k
UmVzcG9uc2UobG9uZyBjYWxsSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQs
IGNvbnN0IGNoYXIqIGNvbW1hbmROYW1lLCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90
b2NvbEVycm9ycywgRXJyb3JTdHJpbmcgaW52b2NhdGlvbkVycm9yKTsKLQotfTsKLQogJG1ldGhv
ZHMKLQotUGFzc1JlZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6OmNyZWF0ZShJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVySW1wbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpKTsKLX0KLQotCi12
b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySW1wbDo6ZGlzcGF0Y2goY29uc3QgU3RyaW5n
JiBtZXNzYWdlKQotewotICAgIFJlZjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVj
dCgqdGhpcyk7Ci0gICAgdHlwZWRlZiB2b2lkIChJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcklt
cGw6OipDYWxsSGFuZGxlcikobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogbWVzc2FnZU9i
amVjdCk7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+IERpc3BhdGNo
TWFwOwotICAgIERFRklORV9TVEFUSUNfTE9DQUwoRGlzcGF0Y2hNYXAsIGRpc3BhdGNoTWFwLCAp
OwotICAgIGxvbmcgY2FsbElkID0gMDsKLQotICAgIGlmIChkaXNwYXRjaE1hcC5pc0VtcHR5KCkp
IHsKLSAgICAgICAgc3RhdGljIENhbGxIYW5kbGVyIGhhbmRsZXJzW10gPSB7Ci0kbWVzc2FnZUhh
bmRsZXJzCi0gICAgICAgIH07Ci0gICAgICAgIHNpemVfdCBsZW5ndGggPSBXVEZfQVJSQVlfTEVO
R1RIKGNvbW1hbmROYW1lcyk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3Ro
OyArK2kpCi0gICAgICAgICAgICBkaXNwYXRjaE1hcC5hZGQoY29tbWFuZE5hbWVzW2ldLCBoYW5k
bGVyc1tpXSk7Ci0gICAgfQotCi0gICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBwYXJzZWRNZXNz
YWdlID0gSW5zcGVjdG9yVmFsdWU6OnBhcnNlSlNPTihtZXNzYWdlKTsKLSAgICBpZiAoIXBhcnNl
ZE1lc3NhZ2UpIHsKLSAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcigwLCBQYXJzZUVycm9yLCAi
TWVzc2FnZSBtdXN0IGJlIGluIEpTT04gZm9ybWF0Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlT2JqZWN0ID0gcGFyc2VkTWVz
c2FnZS0+YXNPYmplY3QoKTsKLSAgICBpZiAoIW1lc3NhZ2VPYmplY3QpIHsKLSAgICAgICAgcmVw
b3J0UHJvdG9jb2xFcnJvcigwLCBJbnZhbGlkUmVxdWVzdCwgIk1lc3NhZ2UgbXVzdCBiZSBhIEpT
T05pZmllZCBvYmplY3QiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFJlZlB0cjxJ
bnNwZWN0b3JWYWx1ZT4gY2FsbElkVmFsdWUgPSBtZXNzYWdlT2JqZWN0LT5nZXQoImlkIik7Ci0g
ICAgaWYgKCFjYWxsSWRWYWx1ZSkgewotICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKDAsIElu
dmFsaWRSZXF1ZXN0LCAiJ2lkJyBwcm9wZXJ0eSB3YXMgbm90IGZvdW5kIik7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIWNhbGxJZFZhbHVlLT5hc051bWJlcigmY2FsbElkKSkg
ewotICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKDAsIEludmFsaWRSZXF1ZXN0LCAiVGhlIHR5
cGUgb2YgJ2lkJyBwcm9wZXJ0eSBtdXN0IGJlIG51bWJlciIpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBtZXRob2RWYWx1ZSA9IG1lc3NhZ2VP
YmplY3QtPmdldCgibWV0aG9kIik7Ci0gICAgaWYgKCFtZXRob2RWYWx1ZSkgewotICAgICAgICBy
ZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEludmFsaWRSZXF1ZXN0LCAiJ21ldGhvZCcgcHJv
cGVydHkgd2Fzbid0IGZvdW5kIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBTdHJp
bmcgbWV0aG9kOwotICAgIGlmICghbWV0aG9kVmFsdWUtPmFzU3RyaW5nKCZtZXRob2QpKSB7Ci0g
ICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW52YWxpZFJlcXVlc3QsICJUaGUg
dHlwZSBvZiAnbWV0aG9kJyBwcm9wZXJ0eSBtdXN0IGJlIHN0cmluZyIpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPjo6aXRlcmF0b3Ig
aXQgPSBkaXNwYXRjaE1hcC5maW5kKG1ldGhvZCk7Ci0gICAgaWYgKGl0ID09IGRpc3BhdGNoTWFw
LmVuZCgpKSB7Ci0gICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgTWV0aG9kTm90
Rm91bmQsICInIiArIG1ldGhvZCArICInIHdhc24ndCBmb3VuZCIpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgKCgqdGhpcykuKml0LT52YWx1ZSkoY2FsbElkLCBtZXNzYWdlT2JqZWN0
LmdldCgpKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OnNlbmRS
ZXNwb25zZShsb25nIGNhbGxJZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCwg
Y29uc3QgY2hhciogY29tbWFuZE5hbWUsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3Rv
Y29sRXJyb3JzLCBFcnJvclN0cmluZyBpbnZvY2F0aW9uRXJyb3IpCi17Ci0gICAgaWYgKHByb3Rv
Y29sRXJyb3JzLT5sZW5ndGgoKSkgewotICAgICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gU3Ry
aW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nl
c3NlZCIsIGNvbW1hbmROYW1lKTsKLSAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElk
LCBJbnZhbGlkUGFyYW1zLCBlcnJvck1lc3NhZ2UsIHByb3RvY29sRXJyb3JzKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIGludm9jYXRp
b25FcnJvcik7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJJbXBsOjpzZW5k
UmVzcG9uc2UobG9uZyBjYWxsSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQs
IGNvbnN0IEVycm9yU3RyaW5nJiBpbnZvY2F0aW9uRXJyb3IpCi17Ci0gICAgaWYgKGludm9jYXRp
b25FcnJvci5sZW5ndGgoKSkgewotICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQs
IFNlcnZlckVycm9yLCBpbnZvY2F0aW9uRXJyb3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2VNZXNzYWdlID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKLSAgICByZXNwb25zZU1lc3NhZ2UtPnNldE9iamVjdCgicmVzdWx0
IiwgcmVzdWx0KTsKLSAgICByZXNwb25zZU1lc3NhZ2UtPnNldE51bWJlcigiaWQiLCBjYWxsSWQp
OwotICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKLSAgICAgICAgbV9pbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChyZXNwb25zZU1lc3NhZ2Ut
PnRvSlNPTlN0cmluZygpKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
cmVwb3J0UHJvdG9jb2xFcnJvcihjb25zdCBsb25nKiBjb25zdCBjYWxsSWQsIENvbW1vbkVycm9y
Q29kZSBjb2RlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkgY29uc3QKLXsKLSAgICByZXBv
cnRQcm90b2NvbEVycm9yKGNhbGxJZCwgY29kZSwgZXJyb3JNZXNzYWdlLCAwKTsKLX0KLQotdm9p
ZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OnJlcG9ydFByb3RvY29sRXJyb3IoY29u
c3QgbG9uZyogY29uc3QgY2FsbElkLCBDb21tb25FcnJvckNvZGUgY29kZSwgY29uc3QgU3RyaW5n
JiBlcnJvck1lc3NhZ2UsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGRhdGEpIGNvbnN0Ci17
Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChWZWN0b3I8aW50PixzX2NvbW1vbkVycm9ycywpOwot
ICAgIGlmICghc19jb21tb25FcnJvcnMuc2l6ZSgpKSB7Ci0gICAgICAgIHNfY29tbW9uRXJyb3Jz
Lmluc2VydChQYXJzZUVycm9yLCAtMzI3MDApOwotICAgICAgICBzX2NvbW1vbkVycm9ycy5pbnNl
cnQoSW52YWxpZFJlcXVlc3QsIC0zMjYwMCk7Ci0gICAgICAgIHNfY29tbW9uRXJyb3JzLmluc2Vy
dChNZXRob2ROb3RGb3VuZCwgLTMyNjAxKTsKLSAgICAgICAgc19jb21tb25FcnJvcnMuaW5zZXJ0
KEludmFsaWRQYXJhbXMsIC0zMjYwMik7Ci0gICAgICAgIHNfY29tbW9uRXJyb3JzLmluc2VydChJ
bnRlcm5hbEVycm9yLCAtMzI2MDMpOwotICAgICAgICBzX2NvbW1vbkVycm9ycy5pbnNlcnQoU2Vy
dmVyRXJyb3IsIC0zMjAwMCk7Ci0gICAgfQotICAgIEFTU0VSVChjb2RlID49MCk7Ci0gICAgQVNT
RVJUKCh1bnNpZ25lZCljb2RlIDwgc19jb21tb25FcnJvcnMuc2l6ZSgpKTsKLSAgICBBU1NFUlQo
c19jb21tb25FcnJvcnNbY29kZV0pOwotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGVycm9y
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICBlcnJvci0+c2V0TnVtYmVyKCJjb2Rl
Iiwgc19jb21tb25FcnJvcnNbY29kZV0pOwotICAgIGVycm9yLT5zZXRTdHJpbmcoIm1lc3NhZ2Ui
LCBlcnJvck1lc3NhZ2UpOwotICAgIEFTU0VSVChlcnJvcik7Ci0gICAgaWYgKGRhdGEpCi0gICAg
ICAgIGVycm9yLT5zZXRBcnJheSgiZGF0YSIsIGRhdGEpOwotICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IG1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1lc3NhZ2Ut
PnNldE9iamVjdCgiZXJyb3IiLCBlcnJvci5yZWxlYXNlKCkpOwotICAgIGlmIChjYWxsSWQpCi0g
ICAgICAgIG1lc3NhZ2UtPnNldE51bWJlcigiaWQiLCAqY2FsbElkKTsKLSAgICBlbHNlCi0gICAg
ICAgIG1lc3NhZ2UtPnNldFZhbHVlKCJpZCIsIEluc3BlY3RvclZhbHVlOjpudWxsKCkpOwotICAg
IGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKLSAgICAgICAgbV9pbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChtZXNzYWdlLT50b0pTT05TdHJpbmco
KSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFIsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFYwPgot
UiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OmdldFByb3BlcnR5VmFsdWVJbXBsKElu
c3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91
bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycywgVjAgaW5pdGlhbF92YWx1ZSwgYm9v
bCAoKmFzX21ldGhvZCkoSW5zcGVjdG9yVmFsdWUqLCBWKiksIGNvbnN0IGNoYXIqIHR5cGVfbmFt
ZSkKLXsKLSAgICBBU1NFUlQocHJvdG9jb2xFcnJvcnMpOwotCi0gICAgaWYgKHZhbHVlRm91bmQp
Ci0gICAgICAgICp2YWx1ZUZvdW5kID0gZmFsc2U7Ci0KLSAgICBWIHZhbHVlID0gaW5pdGlhbF92
YWx1ZTsKLQotICAgIGlmICghb2JqZWN0KSB7Ci0gICAgICAgIGlmICghdmFsdWVGb3VuZCkgewot
ICAgICAgICAgICAgLy8gUmVxdWlyZWQgcGFyYW1ldGVyIGluIG1pc3NpbmcgcGFyYW1zIGNvbnRh
aW5lci4KLSAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9y
bWF0KCIncGFyYW1zJyBvYmplY3QgbXVzdCBjb250YWluIHJlcXVpcmVkIHBhcmFtZXRlciAnJXMn
IHdpdGggdHlwZSAnJXMnLiIsIG5hbWUudXRmOCgpLmRhdGEoKSwgdHlwZV9uYW1lKSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgIH0KLQotICAgIEluc3BlY3Rvck9iamVj
dDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gb2JqZWN0LT5lbmQoKTsKLSAgICBJbnNwZWN0b3JPYmpl
Y3Q6OmNvbnN0X2l0ZXJhdG9yIHZhbHVlSXRlcmF0b3IgPSBvYmplY3QtPmZpbmQobmFtZSk7Ci0K
LSAgICBpZiAodmFsdWVJdGVyYXRvciA9PSBlbmQpIHsKLSAgICAgICAgaWYgKCF2YWx1ZUZvdW5k
KQotICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQo
IlBhcmFtZXRlciAnJXMnIHdpdGggdHlwZSAnJXMnIHdhcyBub3QgZm91bmQuIiwgbmFtZS51dGY4
KCkuZGF0YSgpLCB0eXBlX25hbWUpKTsKLSAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgIH0KLQot
ICAgIGlmICghYXNfbWV0aG9kKHZhbHVlSXRlcmF0b3ItPnZhbHVlLmdldCgpLCAmdmFsdWUpKQot
ICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiUGFyYW1l
dGVyICclcycgaGFzIHdyb25nIHR5cGUuIEl0IG11c3QgYmUgJyVzJy4iLCBuYW1lLnV0ZjgoKS5k
YXRhKCksIHR5cGVfbmFtZSkpOwotICAgIGVsc2UKLSAgICAgICAgaWYgKHZhbHVlRm91bmQpCi0g
ICAgICAgICAgICAqdmFsdWVGb3VuZCA9IHRydWU7Ci0gICAgcmV0dXJuIHZhbHVlOwotfQotCi1z
dHJ1Y3QgQXNNZXRob2RCcmlkZ2VzIHsKLSAgICBzdGF0aWMgYm9vbCBhc0ludChJbnNwZWN0b3JW
YWx1ZSogdmFsdWUsIGludCogb3V0cHV0KSB7IHJldHVybiB2YWx1ZS0+YXNOdW1iZXIob3V0cHV0
KTsgfQotICAgIHN0YXRpYyBib29sIGFzRG91YmxlKEluc3BlY3RvclZhbHVlKiB2YWx1ZSwgZG91
YmxlKiBvdXRwdXQpIHsgcmV0dXJuIHZhbHVlLT5hc051bWJlcihvdXRwdXQpOyB9Ci0gICAgc3Rh
dGljIGJvb2wgYXNTdHJpbmcoSW5zcGVjdG9yVmFsdWUqIHZhbHVlLCBTdHJpbmcqIG91dHB1dCkg
eyByZXR1cm4gdmFsdWUtPmFzU3RyaW5nKG91dHB1dCk7IH0KLSAgICBzdGF0aWMgYm9vbCBhc0Jv
b2xlYW4oSW5zcGVjdG9yVmFsdWUqIHZhbHVlLCBib29sKiBvdXRwdXQpIHsgcmV0dXJuIHZhbHVl
LT5hc0Jvb2xlYW4ob3V0cHV0KTsgfQotICAgIHN0YXRpYyBib29sIGFzT2JqZWN0KEluc3BlY3Rv
clZhbHVlKiB2YWx1ZSwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIG91dHB1dCkgeyByZXR1cm4g
dmFsdWUtPmFzT2JqZWN0KG91dHB1dCk7IH0KLSAgICBzdGF0aWMgYm9vbCBhc0FycmF5KEluc3Bl
Y3RvclZhbHVlKiB2YWx1ZSwgUmVmUHRyPEluc3BlY3RvckFycmF5Piogb3V0cHV0KSB7IHJldHVy
biB2YWx1ZS0+YXNBcnJheShvdXRwdXQpOyB9Ci19OwotCi1pbnQgSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXJJbXBsOjpnZXRJbnQoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3Jz
KQotewotICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlSW1wbDxpbnQsIGludCwgaW50PihvYmpl
Y3QsIG5hbWUsIHZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzLCAwLCBBc01ldGhvZEJyaWRnZXM6
OmFzSW50LCAiTnVtYmVyIik7Ci19Ci0KLWRvdWJsZSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ckltcGw6OmdldERvdWJsZShJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBu
YW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMpCi17
Ci0gICAgcmV0dXJuIGdldFByb3BlcnR5VmFsdWVJbXBsPGRvdWJsZSwgZG91YmxlLCBkb3VibGU+
KG9iamVjdCwgbmFtZSwgdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnMsIDAsIEFzTWV0aG9kQnJp
ZGdlczo6YXNEb3VibGUsICJOdW1iZXIiKTsKLX0KLQotU3RyaW5nIEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVySW1wbDo6Z2V0U3RyaW5nKEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBT
dHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVy
cm9ycykKLXsKLSAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZUltcGw8U3RyaW5nLCBTdHJpbmcs
IFN0cmluZz4ob2JqZWN0LCBuYW1lLCB2YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9ycywgIiIsIEFz
TWV0aG9kQnJpZGdlczo6YXNTdHJpbmcsICJTdHJpbmciKTsKLX0KLQotYm9vbCBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlckltcGw6OmdldEJvb2xlYW4oSW5zcGVjdG9yT2JqZWN0KiBvYmplY3Qs
IGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHBy
b3RvY29sRXJyb3JzKQotewotICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlSW1wbDxib29sLCBi
b29sLCBib29sPihvYmplY3QsIG5hbWUsIHZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzLCBmYWxz
ZSwgQXNNZXRob2RCcmlkZ2VzOjphc0Jvb2xlYW4sICJCb29sZWFuIik7Ci19Ci0KLVBhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckltcGw6OmdldE9i
amVjdChJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2
YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMpCi17Ci0gICAgcmV0dXJu
IGdldFByb3BlcnR5VmFsdWVJbXBsPFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiwgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4sIEluc3BlY3Rvck9iamVjdCo+KG9iamVjdCwgbmFtZSwgdmFsdWVG
b3VuZCwgcHJvdG9jb2xFcnJvcnMsIDAsIEFzTWV0aG9kQnJpZGdlczo6YXNPYmplY3QsICJPYmpl
Y3QiKTsKLX0KLQotUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXJJbXBsOjpnZXRBcnJheShJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJv
cnMpCi17Ci0gICAgcmV0dXJuIGdldFByb3BlcnR5VmFsdWVJbXBsPFBhc3NSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+LCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+LCBJbnNwZWN0b3JBcnJheSo+KG9iamVj
dCwgbmFtZSwgdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnMsIDAsIEFzTWV0aG9kQnJpZGdlczo6
YXNBcnJheSwgIkFycmF5Iik7Ci19Ci0KLUluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpDYWxs
YmFja0Jhc2U6OkNhbGxiYWNrQmFzZShQYXNzUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVySW1wbD4gYmFja2VuZEltcGwsIGludCBpZCkKLSAgICA6IG1fYmFja2VuZEltcGwoYmFja2Vu
ZEltcGwpLCBtX2lkKGlkKSwgbV9hbHJlYWR5U2VudChmYWxzZSkge30KLQotSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZTo6fkNhbGxiYWNrQmFzZSgpIHt9Ci0KLXZvaWQg
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZTo6c2VuZEZhaWx1cmUoY29u
c3QgRXJyb3JTdHJpbmcmIGVycm9yKQotewotICAgIEFTU0VSVChlcnJvci5sZW5ndGgoKSk7Ci0g
ICAgc2VuZElmQWN0aXZlKDAsIGVycm9yKTsKLX0KLQotYm9vbCBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjo6Q2FsbGJhY2tCYXNlOjppc0FjdGl2ZSgpCi17Ci0gICAgcmV0dXJuICFtX2FscmVh
ZHlTZW50ICYmIG1fYmFja2VuZEltcGwtPmlzQWN0aXZlKCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZTo6c2VuZElmQWN0aXZlKFBhc3NSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBwYXJ0aWFsTWVzc2FnZSwgY29uc3QgRXJyb3JTdHJpbmcmIGludm9j
YXRpb25FcnJvcikKLXsKLSAgICBpZiAobV9hbHJlYWR5U2VudCkKLSAgICAgICAgcmV0dXJuOwot
ICAgIG1fYmFja2VuZEltcGwtPnNlbmRSZXNwb25zZShtX2lkLCBwYXJ0aWFsTWVzc2FnZSwgaW52
b2NhdGlvbkVycm9yKTsKLSAgICBtX2FscmVhZHlTZW50ID0gdHJ1ZTsKLX0KLQotQ09NUElMRV9B
U1NFUlQoc3RhdGljX2Nhc3Q8aW50PihJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6a01ldGhv
ZE5hbWVzRW51bVNpemUpID09IFdURl9BUlJBWV9MRU5HVEgoSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI6OmNvbW1hbmROYW1lcyksIGNvbW1hbmRfbmFtZV9hcnJheV9wcm9ibGVtKTsKLQogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKQEAgLTYw
MSwxMiArMzE3LDEyIEBAIHB1YmxpYzoKICAgICAgICAgQXJyYXlJdGVtSGVscGVyPFQ+OjpUcmFp
dHM6OnB1c2hSYXcodGhpcy0+b3BlbkFjY2Vzc29ycygpLCB2YWx1ZSk7CiAgICAgfQogCi0gICAg
c3RhdGljIFBhc3NSZWZQdHI8QXJyYXk8VD4gPiBjcmVhdGUoKQorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEFycmF5PFQ+PiBjcmVhdGUoKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBBcnJheTxUPigpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxBcnJheTxUPiA+
IHJ1bnRpbWVDYXN0KFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlKQorICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEFycmF5PFQ+PiBydW50aW1lQ2FzdChQYXNzUmVmUHRyPEluc3BlY3RvclZh
bHVlPiB2YWx1ZSkKICAgICB7CiAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJyYXk7
CiAgICAgICAgIGJvb2wgY2FzdFJlcyA9IHZhbHVlLT5hc0FycmF5KCZhcnJheSk7CkBAIC03NjUs
OSArNDgxLDkgQEAgc3RydWN0IEFycmF5SXRlbUhlbHBlcjxJbnNwZWN0b3JBcnJheT4gewogfTsK
IAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0cnVjdCBBcnJheUl0ZW1IZWxwZXI8VHlwZUJ1aWxk
ZXI6OkFycmF5PFQ+ID4geworc3RydWN0IEFycmF5SXRlbUhlbHBlcjxUeXBlQnVpbGRlcjo6QXJy
YXk8VD4+IHsKICAgICBzdHJ1Y3QgVHJhaXRzIHsKLSAgICAgICAgc3RhdGljIHZvaWQgcHVzaFJl
ZlB0cihJbnNwZWN0b3JBcnJheSogYXJyYXksIFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5
PFQ+ID4gdmFsdWUpCisgICAgICAgIHN0YXRpYyB2b2lkIHB1c2hSZWZQdHIoSW5zcGVjdG9yQXJy
YXkqIGFycmF5LCBQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUPj4gdmFsdWUpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIGFycmF5LT5wdXNoVmFsdWUodmFsdWUpOwogICAgICAgICB9CkBA
IC04NTMsNyArNTY5LDcgQEAgJGRvbWFpbkluaXRpYWxpemVycwogIiIiKQogCiBwYXJhbV9jb250
YWluZXJfYWNjZXNzX2NvZGUgPSAiIiIKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJh
bXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsK
KyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSBtZXNzYWdlLmdl
dE9iamVjdCgicGFyYW1zIik7CiAgICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQ
dHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CiAgICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29s
RXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CiAiIiIKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQWdlbnQuY3BwCmluZGV4IDRlYWRkZTQuLjdhYzMzMGEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmNwcApAQCAtOTYsMTIgKzk2
LDEzIEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OmRpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZChG
cmFtZSogZnJhbWUsIERPTVdyYXBwZXJXb3JsZCYKIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OmRpZENy
ZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGZyb250ZW5k
Q2hhbm5lbCwgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKQog
ewogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyID0gc3RkOjptYWtlX3VuaXF1ZTxJbnNwZWN0b3JJ
bnNwZWN0b3JGcm9udGVuZERpc3BhdGNoZXI+KGZyb250ZW5kQ2hhbm5lbCk7Ci0gICAgYmFja2Vu
ZERpc3BhdGNoZXItPnJlZ2lzdGVyQWdlbnQodGhpcyk7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ciA9IEluc3BlY3Rvckluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoYmFja2VuZERp
c3BhdGNoZXIsIHRoaXMpOwogfQogCiB2b2lkIEluc3BlY3RvckFnZW50Ojp3aWxsRGVzdHJveUZy
b250ZW5kQW5kQmFja2VuZCgpCiB7CiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXIgPSBudWxscHRy
OworICAgIG1fYmFja2VuZERpc3BhdGNoZXIuY2xlYXIoKTsKIAogICAgIG1fcGVuZGluZ0V2YWx1
YXRlVGVzdENvbW1hbmRzLmNsZWFyKCk7CiAgICAgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXItPmRp
c2NhcmRJbmplY3RlZFNjcmlwdHMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckFnZW50LmgKaW5kZXggZjhmM2IwNi4uOTExMTg5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckFnZW50LmgKQEAgLTUxLDcgKzUxLDcgQEAgY2xhc3MgUGFnZTsKIAogdHlw
ZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKLWNsYXNzIEluc3BlY3RvckFnZW50IDogcHVibGlj
IEluc3BlY3RvckJhc2VBZ2VudCwgcHVibGljIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpJ
bnNwZWN0b3JDb21tYW5kSGFuZGxlciB7CitjbGFzcyBJbnNwZWN0b3JBZ2VudCA6IHB1YmxpYyBJ
bnNwZWN0b3JCYXNlQWdlbnQsIHB1YmxpYyBJbnNwZWN0b3JJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3RvckFnZW50KTsK
IHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc093blB0cjxJbnNwZWN0b3JBZ2VudD4gY3JlYXRlKFBh
Z2UqIHBhZ2UsIEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBJ
bnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzKQpAQCAtOTIsNiArOTIsNyBA
QCBwcml2YXRlOgogCiAgICAgUGFnZSogbV9pbnNwZWN0ZWRQYWdlOwogICAgIHN0ZDo6dW5pcXVl
X3B0cjxJbnNwZWN0b3JJbnNwZWN0b3JGcm9udGVuZERpc3BhdGNoZXI+IG1fZnJvbnRlbmREaXNw
YXRjaGVyOworICAgIFJlZlB0cjxJbnNwZWN0b3JJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4g
bV9iYWNrZW5kRGlzcGF0Y2hlcjsKICAgICBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIG1faW5qZWN0
ZWRTY3JpcHRNYW5hZ2VyOwogCiAgICAgVmVjdG9yPHBhaXI8bG9uZywgU3RyaW5nPj4gbV9wZW5k
aW5nRXZhbHVhdGVUZXN0Q29tbWFuZHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQWxsSW5PbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckFsbEluT25lLmNwcAppbmRleCAyYjNlMTU5Li4zYmUwMjNlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQWxsSW5PbmUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBbGxJbk9uZS5jcHAKQEAgLTM5LDYgKzM5LDcg
QEAKICNpbmNsdWRlICJJbnNwZWN0b3JBZ2VudC5jcHAiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQWdl
bnRSZWdpc3RyeS5jcHAiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50
LmNwcCIKKyNpbmNsdWRlICJJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAiCiAjaW5jbHVk
ZSAiSW5zcGVjdG9yQ1NTQWdlbnQuY3BwIgogI2luY2x1ZGUgIkluc3BlY3RvckNhbnZhc0FnZW50
LmNwcCIKICNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnQuY3BwIgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmNw
cAppbmRleCA3NWYyNWFlLi4wNGNjNTNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmNwcApAQCAtNTMs
MTIgKzUzLDEzIEBAIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6SW5zcGVjdG9yQXBw
bGljYXRpb25DYWNoZUFnZW50KEluc3RydW1lbnRpbmdBZ2VuCiB2b2lkIEluc3BlY3RvckFwcGxp
Y2F0aW9uQ2FjaGVBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCogZnJvbnRlbmRDaGFubmVsLCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ciogYmFja2VuZERpc3BhdGNoZXIpCiB7CiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXIgPSBzdGQ6
Om1ha2VfdW5pcXVlPEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVGcm9udGVuZERpc3BhdGNoZXI+
KGZyb250ZW5kQ2hhbm5lbCk7Ci0gICAgYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyQWdlbnQo
dGhpcyk7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IEluc3BlY3RvckFwcGxpY2F0aW9uQ2Fj
aGVCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKGJhY2tlbmREaXNwYXRjaGVyLCB0aGlzKTsKIH0K
IAogdm9pZCBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRl
bmRBbmRCYWNrZW5kKCkKIHsKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlciA9IG51bGxwdHI7Cisg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci5jbGVhcigpOwogCiAgICAgbV9pbnN0cnVtZW50aW5nQWdl
bnRzLT5zZXRJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQoMCk7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50
LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFn
ZW50LmgKaW5kZXggZTRmYWExMS4uZWIwNmM4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaApAQCAtNDgs
NyArNDgsNyBAQCBjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOwogCiB0eXBlZGVmIFN0cmluZyBFcnJv
clN0cmluZzsKIAotY2xhc3MgSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50IDogcHVibGlj
IEluc3BlY3RvckJhc2VBZ2VudCwgcHVibGljIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpB
cHBsaWNhdGlvbkNhY2hlQ29tbWFuZEhhbmRsZXIgeworY2xhc3MgSW5zcGVjdG9yQXBwbGljYXRp
b25DYWNoZUFnZW50IDogcHVibGljIEluc3BlY3RvckJhc2VBZ2VudCwgcHVibGljIEluc3BlY3Rv
ckFwcGxpY2F0aW9uQ2FjaGVCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudCk7IFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIHN0YXRpYyBQYXNzT3duUHRyPEluc3BlY3RvckFw
cGxpY2F0aW9uQ2FjaGVBZ2VudD4gY3JlYXRlKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1l
bnRpbmdBZ2VudHMsIEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50KQpAQCAtODEsNiArODEs
NyBAQCBwcml2YXRlOgogCiAgICAgSW5zcGVjdG9yUGFnZUFnZW50KiBtX3BhZ2VBZ2VudDsKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUZyb250ZW5kRGlzcGF0
Y2hlcj4gbV9mcm9udGVuZERpc3BhdGNoZXI7CisgICAgUmVmUHRyPEluc3BlY3RvckFwcGxpY2F0
aW9uQ2FjaGVCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjhmMmZiNzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3BwCkBAIC0wLDAgKzEsMjc3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
cy5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgIkluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbC5oIgorI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgorI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tC
YXNlOjpDYWxsYmFja0Jhc2UoUGFzc1JlZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4g
YmFja2VuZERpc3BhdGNoZXIsIGludCBpZCkKKyAgICA6IG1fYmFja2VuZERpc3BhdGNoZXIoYmFj
a2VuZERpc3BhdGNoZXIpCisgICAgLCBtX2lkKGlkKQorICAgICwgbV9hbHJlYWR5U2VudChmYWxz
ZSkKK3sKK30KKworYm9vbCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNl
Ojppc0FjdGl2ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICFtX2FscmVhZHlTZW50ICYmIG1fYmFj
a2VuZERpc3BhdGNoZXItPmlzQWN0aXZlKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6OkNhbGxiYWNrQmFzZTo6c2VuZEZhaWx1cmUoY29uc3QgRXJyb3JTdHJpbmcmIGVy
cm9yKQoreworICAgIEFTU0VSVChlcnJvci5sZW5ndGgoKSk7CisgICAgc2VuZElmQWN0aXZlKG51
bGxwdHIsIGVycm9yKTsKK30KKwordm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q2Fs
bGJhY2tCYXNlOjpzZW5kSWZBY3RpdmUoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcnRp
YWxNZXNzYWdlLCBjb25zdCBFcnJvclN0cmluZyYgaW52b2NhdGlvbkVycm9yKQoreworICAgIGlm
IChtX2FscmVhZHlTZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5zZW5kUmVzcG9uc2UobV9pZCwgcGFydGlhbE1lc3NhZ2UsIGludm9jYXRpb25FcnJvcik7
CisgICAgbV9hbHJlYWR5U2VudCA9IHRydWU7Cit9CisKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI+IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoSW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCit7CisgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcihpbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwpKTsKK30KKwordm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6cmVn
aXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKGNvbnN0IFN0cmluZyYgZG9tYWluLCBJbnNwZWN0b3JT
dXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciogZGlzcGF0Y2hlcikKK3sKKyAgICBhdXRvIHJl
c3VsdCA9IG1fZGlzcGF0Y2hlcnMuYWRkKGRvbWFpbiwgZGlzcGF0Y2hlcik7CisgICAgQVNTRVJU
X1VOVVNFRChyZXN1bHQsIHJlc3VsdC5pc05ld0VudHJ5KTsKK30KKwordm9pZCBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2goY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAg
IFJlZjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CisKKyAgICBS
ZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHBhcnNlZE1lc3NhZ2UgPSBJbnNwZWN0b3JWYWx1ZTo6cGFy
c2VKU09OKG1lc3NhZ2UpOworICAgIGlmICghcGFyc2VkTWVzc2FnZSkgeworICAgICAgICByZXBv
cnRQcm90b2NvbEVycm9yKG51bGxwdHIsIFBhcnNlRXJyb3IsICJNZXNzYWdlIG11c3QgYmUgaW4g
SlNPTiBmb3JtYXQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IG1lc3NhZ2VPYmplY3QgPSBwYXJzZWRNZXNzYWdlLT5hc09iamVjdCgpOwor
ICAgIGlmICghbWVzc2FnZU9iamVjdCkgeworICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKG51
bGxwdHIsIEludmFsaWRSZXF1ZXN0LCAiTWVzc2FnZSBtdXN0IGJlIGEgSlNPTmlmaWVkIG9iamVj
dCIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUmVmUHRyPEluc3BlY3RvclZhbHVl
PiBjYWxsSWRWYWx1ZSA9IG1lc3NhZ2VPYmplY3QtPmdldCgiaWQiKTsKKyAgICBpZiAoIWNhbGxJ
ZFZhbHVlKSB7CisgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IobnVsbHB0ciwgSW52YWxpZFJl
cXVlc3QsICInaWQnIHByb3BlcnR5IHdhcyBub3QgZm91bmQiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGxvbmcgY2FsbElkID0gMDsKKyAgICBpZiAoIWNhbGxJZFZhbHVlLT5hc051
bWJlcigmY2FsbElkKSkgeworICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKG51bGxwdHIsIElu
dmFsaWRSZXF1ZXN0LCAiVGhlIHR5cGUgb2YgJ2lkJyBwcm9wZXJ0eSBtdXN0IGJlIG51bWJlciIp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBt
ZXRob2RWYWx1ZSA9IG1lc3NhZ2VPYmplY3QtPmdldCgibWV0aG9kIik7CisgICAgaWYgKCFtZXRo
b2RWYWx1ZSkgeworICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEludmFsaWRS
ZXF1ZXN0LCAiJ21ldGhvZCcgcHJvcGVydHkgd2Fzbid0IGZvdW5kIik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBTdHJpbmcgbWV0aG9kOworICAgIGlmICghbWV0aG9kVmFsdWUtPmFz
U3RyaW5nKCZtZXRob2QpKSB7CisgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwg
SW52YWxpZFJlcXVlc3QsICJUaGUgdHlwZSBvZiAnbWV0aG9kJyBwcm9wZXJ0eSBtdXN0IGJlIHN0
cmluZyIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc2l6ZV90IHBvc2l0aW9uID0g
bWV0aG9kLmZpbmQoJy4nKTsKKyAgICBpZiAocG9zaXRpb24gPT0gV1RGOjpub3RGb3VuZCkgewor
ICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEludmFsaWRSZXF1ZXN0LCAiVGhl
ICdtZXRob2QnIHByb3BlcnR5IHdhcyBmb3JtYXR0ZWQgaW5jb3JyZWN0bHkuIEl0IHNob3VsZCBi
ZSAnRG9tYWluLm1ldGhvZCciKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFN0cmlu
ZyBkb21haW4gPSBtZXRob2Quc3Vic3RyaW5nKDAsIHBvc2l0aW9uKTsKKyAgICBJbnNwZWN0b3JT
dXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciogZG9tYWluRGlzcGF0Y2hlciA9IG1fZGlzcGF0
Y2hlcnMuZ2V0KGRvbWFpbik7CisgICAgaWYgKCFkb21haW5EaXNwYXRjaGVyKSB7CisgICAgICAg
IHJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgTWV0aG9kTm90Rm91bmQsICInIiArIGRvbWFp
biArICInIGRvbWFpbiB3YXMgbm90IGZvdW5kIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBTdHJpbmcgZG9tYWluTWV0aG9kID0gbWV0aG9kLnN1YnN0cmluZyhwb3NpdGlvbiArIDEp
OworICAgIGRvbWFpbkRpc3BhdGNoZXItPmRpc3BhdGNoKGNhbGxJZCwgZG9tYWluTWV0aG9kLCBt
ZXNzYWdlT2JqZWN0LnJlbGVhc2UoKSk7Cit9CisKKy8vIEZJWE1FOiBSZW1vdmUgdGhpcyBieSBi
dWlsZGluZyBiZXR0ZXIgZ2VuZXJhdGVkIGNvZGUuCit2b2lkIEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpzZW5kUmVzcG9uc2UobG9uZyBjYWxsSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiByZXN1bHQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzLCBj
b25zdCBFcnJvclN0cmluZyYgaW52b2NhdGlvbkVycm9yKQoreworICAgIGlmIChwcm90b2NvbEVy
cm9ycy0+bGVuZ3RoKCkpIHsKKyAgICAgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IFN0cmluZzo6
Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgPz8/IGNhbid0IGJlIHByb2Nlc3NlZCIp
OworICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEludmFsaWRQYXJhbXMsIGVy
cm9yTWVzc2FnZSwgcHJvdG9jb2xFcnJvcnMpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBpbnZvY2F0aW9uRXJyb3IpOworfQorCit2
b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpzZW5kUmVzcG9uc2UobG9uZyBjYWxsSWQs
IFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQsIGNvbnN0IEVycm9yU3RyaW5nJiBp
bnZvY2F0aW9uRXJyb3IpCit7CisgICAgaWYgKCFtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGludm9jYXRpb25FcnJvci5sZW5ndGgoKSkgewor
ICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIFNlcnZlckVycm9yLCBpbnZvY2F0
aW9uRXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcmVzcG9uc2VNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICByZXNwb25zZU1lc3NhZ2UtPnNldE9iamVjdCgicmVzdWx0IiwgcmVzdWx0KTsKKyAgICByZXNw
b25zZU1lc3NhZ2UtPnNldE51bWJlcigiaWQiLCBjYWxsSWQpOworICAgIG1faW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQocmVzcG9uc2VNZXNzYWdlLT50b0pT
T05TdHJpbmcoKSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnJlcG9y
dFByb3RvY29sRXJyb3IoY29uc3QgbG9uZyogY29uc3QgY2FsbElkLCBDb21tb25FcnJvckNvZGUg
ZXJyb3JDb2RlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkgY29uc3QKK3sKKyAgICByZXBv
cnRQcm90b2NvbEVycm9yKGNhbGxJZCwgZXJyb3JDb2RlLCBlcnJvck1lc3NhZ2UsIG51bGxwdHIp
OworfQorCit2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpyZXBvcnRQcm90b2NvbEVy
cm9yKGNvbnN0IGxvbmcqIGNvbnN0IGNhbGxJZCwgQ29tbW9uRXJyb3JDb2RlIGVycm9yQ29kZSwg
Y29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGRh
dGEpIGNvbnN0Cit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChWZWN0b3I8aW50PiwgY29tbW9u
RXJyb3JzLCAoKSk7CisgICAgaWYgKCFjb21tb25FcnJvcnMuc2l6ZSgpKSB7CisgICAgICAgIGNv
bW1vbkVycm9ycy5pbnNlcnQoUGFyc2VFcnJvciwgLTMyNzAwKTsKKyAgICAgICAgY29tbW9uRXJy
b3JzLmluc2VydChJbnZhbGlkUmVxdWVzdCwgLTMyNjAwKTsKKyAgICAgICAgY29tbW9uRXJyb3Jz
Lmluc2VydChNZXRob2ROb3RGb3VuZCwgLTMyNjAxKTsKKyAgICAgICAgY29tbW9uRXJyb3JzLmlu
c2VydChJbnZhbGlkUGFyYW1zLCAtMzI2MDIpOworICAgICAgICBjb21tb25FcnJvcnMuaW5zZXJ0
KEludGVybmFsRXJyb3IsIC0zMjYwMyk7CisgICAgICAgIGNvbW1vbkVycm9ycy5pbnNlcnQoU2Vy
dmVyRXJyb3IsIC0zMjAwMCk7CisgICAgfQorCisgICAgQVNTRVJUKGVycm9yQ29kZSA+PSAwKTsK
KyAgICBBU1NFUlQoKHVuc2lnbmVkKWVycm9yQ29kZSA8IGNvbW1vbkVycm9ycy5zaXplKCkpOwor
ICAgIEFTU0VSVChjb21tb25FcnJvcnNbZXJyb3JDb2RlXSk7CisKKyAgICBpZiAoIW1faW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBlcnJvciA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgZXJyb3It
PnNldE51bWJlcigiY29kZSIsIGNvbW1vbkVycm9yc1tlcnJvckNvZGVdKTsKKyAgICBlcnJvci0+
c2V0U3RyaW5nKCJtZXNzYWdlIiwgZXJyb3JNZXNzYWdlKTsKKyAgICBpZiAoZGF0YSkKKyAgICAg
ICAgZXJyb3ItPnNldEFycmF5KCJkYXRhIiwgZGF0YSk7CisKKyAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBtZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtZXNzYWdl
LT5zZXRPYmplY3QoImVycm9yIiwgZXJyb3IucmVsZWFzZSgpKTsKKyAgICBpZiAoY2FsbElkKQor
ICAgICAgICBtZXNzYWdlLT5zZXROdW1iZXIoImlkIiwgKmNhbGxJZCk7CisgICAgZWxzZQorICAg
ICAgICBtZXNzYWdlLT5zZXRWYWx1ZSgiaWQiLCBJbnNwZWN0b3JWYWx1ZTo6bnVsbCgpKTsKKwor
ICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQobWVz
c2FnZS0+dG9KU09OU3RyaW5nKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1cm5WYWx1
ZVR5cGUsIHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgRGVmYXVsdFZhbHVlVHlwZT4KK1Jl
dHVyblZhbHVlVHlwZSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0UHJvcGVydHlWYWx1
ZShJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1
ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMsIERlZmF1bHRWYWx1ZVR5cGUg
ZGVmYXVsdFZhbHVlLCBib29sICgqYXNNZXRob2QpKEluc3BlY3RvclZhbHVlKiwgVmFsdWVUeXBl
KiksIGNvbnN0IGNoYXIqIHR5cGVOYW1lKQoreworICAgIEFTU0VSVChwcm90b2NvbEVycm9ycyk7
CisKKyAgICBWYWx1ZVR5cGUgdmFsdWUgPSBkZWZhdWx0VmFsdWU7CisgICAgaWYgKHZhbHVlRm91
bmQpCisgICAgICAgICp2YWx1ZUZvdW5kID0gZmFsc2U7CisKKyAgICBpZiAoIW9iamVjdCkgewor
ICAgICAgICBpZiAoIXZhbHVlRm91bmQpCisgICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVz
aFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiJ3BhcmFtcycgb2JqZWN0IG11c3QgY29udGFpbiByZXF1
aXJlZCBwYXJhbWV0ZXIgJyVzJyB3aXRoIHR5cGUgJyVzJy4iLCBuYW1lLnV0ZjgoKS5kYXRhKCks
IHR5cGVOYW1lKSk7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisKKyAgICBJbnNwZWN0
b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG9iamVjdC0+ZW5kKCk7CisgICAgSW5zcGVj
dG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciB2YWx1ZUl0ZXJhdG9yID0gb2JqZWN0LT5maW5kKG5h
bWUpOworICAgIGlmICh2YWx1ZUl0ZXJhdG9yID09IGVuZCkgeworICAgICAgICBpZiAoIXZhbHVl
Rm91bmQpCisgICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZv
cm1hdCgiUGFyYW1ldGVyICclcycgd2l0aCB0eXBlICclcycgd2FzIG5vdCBmb3VuZC4iLCBuYW1l
LnV0ZjgoKS5kYXRhKCksIHR5cGVOYW1lKSk7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9
CisKKyAgICBpZiAoIWFzTWV0aG9kKHZhbHVlSXRlcmF0b3ItPnZhbHVlLmdldCgpLCAmdmFsdWUp
KSB7CisgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJQ
YXJhbWV0ZXIgJyVzJyBoYXMgd3JvbmcgdHlwZS4gSXQgbXVzdCBiZSAnJXMnLiIsIG5hbWUudXRm
OCgpLmRhdGEoKSwgdHlwZU5hbWUpKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKwor
ICAgIGlmICh2YWx1ZUZvdW5kKQorICAgICAgICAqdmFsdWVGb3VuZCA9IHRydWU7CisKKyAgICBy
ZXR1cm4gdmFsdWU7Cit9CisKK3N0cnVjdCBBc01ldGhvZEJyaWRnZXMgeworICAgIHN0YXRpYyBi
b29sIGFzSW50KEluc3BlY3RvclZhbHVlKiB2YWx1ZSwgaW50KiBvdXRwdXQpIHsgcmV0dXJuIHZh
bHVlLT5hc051bWJlcihvdXRwdXQpOyB9CisgICAgc3RhdGljIGJvb2wgYXNEb3VibGUoSW5zcGVj
dG9yVmFsdWUqIHZhbHVlLCBkb3VibGUqIG91dHB1dCkgeyByZXR1cm4gdmFsdWUtPmFzTnVtYmVy
KG91dHB1dCk7IH0KKyAgICBzdGF0aWMgYm9vbCBhc1N0cmluZyhJbnNwZWN0b3JWYWx1ZSogdmFs
dWUsIFN0cmluZyogb3V0cHV0KSB7IHJldHVybiB2YWx1ZS0+YXNTdHJpbmcob3V0cHV0KTsgfQor
ICAgIHN0YXRpYyBib29sIGFzQm9vbGVhbihJbnNwZWN0b3JWYWx1ZSogdmFsdWUsIGJvb2wqIG91
dHB1dCkgeyByZXR1cm4gdmFsdWUtPmFzQm9vbGVhbihvdXRwdXQpOyB9CisgICAgc3RhdGljIGJv
b2wgYXNPYmplY3QoSW5zcGVjdG9yVmFsdWUqIHZhbHVlLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
Piogb3V0cHV0KSB7IHJldHVybiB2YWx1ZS0+YXNPYmplY3Qob3V0cHV0KTsgfQorICAgIHN0YXRp
YyBib29sIGFzQXJyYXkoSW5zcGVjdG9yVmFsdWUqIHZhbHVlLCBSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+KiBvdXRwdXQpIHsgcmV0dXJuIHZhbHVlLT5hc0FycmF5KG91dHB1dCk7IH0KK307CisKK2lu
dCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0SW50KEluc3BlY3Rvck9iamVjdCogb2Jq
ZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5
KiBwcm90b2NvbEVycm9ycykKK3sKKyAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZTxpbnQsIGlu
dCwgaW50PihvYmplY3QsIG5hbWUsIHZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzLCAwLCBBc01l
dGhvZEJyaWRnZXM6OmFzSW50LCAiTnVtYmVyIik7Cit9CisKK2RvdWJsZSBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjo6Z2V0RG91YmxlKEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBT
dHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVy
cm9ycykKK3sKKyAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZTxkb3VibGUsIGRvdWJsZSwgZG91
YmxlPihvYmplY3QsIG5hbWUsIHZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzLCAwLCBBc01ldGhv
ZEJyaWRnZXM6OmFzRG91YmxlLCAiTnVtYmVyIik7Cit9CisKK1N0cmluZyBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBT
dHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVy
cm9ycykKK3sKKyAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZTxTdHJpbmcsIFN0cmluZywgU3Ry
aW5nPihvYmplY3QsIG5hbWUsIHZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzLCAiIiwgQXNNZXRo
b2RCcmlkZ2VzOjphc1N0cmluZywgIlN0cmluZyIpOworfQorCitib29sIEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyOjpnZXRCb29sZWFuKEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBT
dHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVy
cm9ycykKK3sKKyAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZTxib29sLCBib29sLCBib29sPihv
YmplY3QsIG5hbWUsIHZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzLCBmYWxzZSwgQXNNZXRob2RC
cmlkZ2VzOjphc0Jvb2xlYW4sICJCb29sZWFuIik7Cit9CisKK1Bhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0T2JqZWN0KEluc3BlY3Rvck9i
amVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3Bl
Y3RvckFycmF5KiBwcm90b2NvbEVycm9ycykKK3sKKyAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1
ZTxQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4sIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+LCBJ
bnNwZWN0b3JPYmplY3QqPihvYmplY3QsIG5hbWUsIHZhbHVlRm91bmQsIHByb3RvY29sRXJyb3Jz
LCBudWxscHRyLCBBc01ldGhvZEJyaWRnZXM6OmFzT2JqZWN0LCAiT2JqZWN0Iik7Cit9CisKK1Bh
c3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRB
cnJheShJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2
YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMpCit7CisgICAgcmV0dXJu
IGdldFByb3BlcnR5VmFsdWU8UGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4sIFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4sIEluc3BlY3RvckFycmF5Kj4ob2JqZWN0LCBuYW1lLCB2YWx1ZUZvdW5kLCBw
cm90b2NvbEVycm9ycywgbnVsbHB0ciwgQXNNZXRob2RCcmlkZ2VzOjphc0FycmF5LCAiQXJyYXki
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BF
Q1RPUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlci5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDAwODU2
YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlci5oCkBAIC0wLDAgKzEsMTEzIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcl9oCisjZGVmaW5lIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyX2gKKwor
I2luY2x1ZGUgIkluc3BlY3RvclR5cGVCdWlsZGVyLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQ
dHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyOworY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwordHlwZWRlZiBT
dHJpbmcgRXJyb3JTdHJpbmc7CisKK2NsYXNzIEluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmRE
aXNwYXRjaGVyIDogcHVibGljIFJlZkNvdW50ZWQ8SW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2Vu
ZERpc3BhdGNoZXI+IHsKK3B1YmxpYzoKKyAgICBJbnNwZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5k
RGlzcGF0Y2hlcihJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciAqYmFja2VuZERpc3BhdGNoZXIp
IDogbV9iYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikgeyB9CisgICAgdmlydHVh
bCB+SW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNz
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSkgPSAwOworcHJvdGVjdGVkOgorICAgIFJl
ZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKK307
CisKK2NsYXNzIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIFJlZkNvdW50ZWQ8
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKTsKKyAgICB2aXJ0dWFsIH5JbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQorCisgICAgY2xhc3MgQ2FsbGJhY2tCYXNlOiBwdWJs
aWMgUmVmQ291bnRlZDxDYWxsYmFja0Jhc2U+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIENhbGxi
YWNrQmFzZShQYXNzUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBiYWNrZW5kRGlz
cGF0Y2hlciwgaW50IGlkKTsKKyAgICAgICAgdmlydHVhbCB+Q2FsbGJhY2tCYXNlKCkgeyB9CisK
KyAgICAgICAgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0OworICAgICAgICB2b2lkIHNlbmRGYWlsdXJl
KGNvbnN0IEVycm9yU3RyaW5nJik7CisgICAgICAgIHZvaWQgZGlzYWJsZSgpIHsgbV9hbHJlYWR5
U2VudCA9IHRydWU7IH0KKworICAgIHByb3RlY3RlZDoKKyAgICAgICAgdm9pZCBzZW5kSWZBY3Rp
dmUoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcnRpYWxNZXNzYWdlLCBjb25zdCBFcnJv
clN0cmluZyYgaW52b2NhdGlvbkVycm9yKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0
cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKKyAgICAg
ICAgaW50IG1faWQ7CisgICAgICAgIGJvb2wgbV9hbHJlYWR5U2VudDsKKyAgICB9OworCisgICAg
dm9pZCBjbGVhckZyb250ZW5kKCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IG51bGxw
dHI7IH0KKyAgICBib29sIGlzQWN0aXZlKCkgY29uc3QgeyByZXR1cm4gISFtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbDsgfQorCisgICAgZW51bSBDb21tb25FcnJvckNvZGUgeworICAgICAgICBQ
YXJzZUVycm9yID0gMCwKKyAgICAgICAgSW52YWxpZFJlcXVlc3QsCisgICAgICAgIE1ldGhvZE5v
dEZvdW5kLAorICAgICAgICBJbnZhbGlkUGFyYW1zLAorICAgICAgICBJbnRlcm5hbEVycm9yLAor
ICAgICAgICBTZXJ2ZXJFcnJvcgorICAgIH07CisKKyAgICB2b2lkIHJlZ2lzdGVyRGlzcGF0Y2hl
ckZvckRvbWFpbihjb25zdCBTdHJpbmcmIGRvbWFpbiwgSW5zcGVjdG9yU3VwcGxlbWVudGFsQmFj
a2VuZERpc3BhdGNoZXIqIGRpc3BhdGNoZXIpOworICAgIHZvaWQgZGlzcGF0Y2goY29uc3QgU3Ry
aW5nJiBtZXNzYWdlKTsKKyAgICB2b2lkIHNlbmRSZXNwb25zZShsb25nIGNhbGxJZCwgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCwgY29uc3QgRXJyb3JTdHJpbmcmIGludm9jYXRp
b25FcnJvcik7CisgICAgdm9pZCByZXBvcnRQcm90b2NvbEVycm9yKGNvbnN0IGxvbmcqIGNvbnN0
IGNhbGxJZCwgQ29tbW9uRXJyb3JDb2RlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkgY29u
c3Q7CisgICAgdm9pZCByZXBvcnRQcm90b2NvbEVycm9yKGNvbnN0IGxvbmcqIGNvbnN0IGNhbGxJ
ZCwgQ29tbW9uRXJyb3JDb2RlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgUGFzc1JlZlB0
cjxJbnNwZWN0b3JBcnJheT4gZGF0YSkgY29uc3Q7CisKKyAgICAvLyBGSVhNRTogUmVtb3ZlIHRo
aXMgYnkgYnVpbGRpbmcgYmV0dGVyIGdlbmVyYXRlZCBjb2RlLgorICAgIHZvaWQgc2VuZFJlc3Bv
bnNlKGxvbmcgY2FsbElkLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0LCBQYXNz
UmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycywgY29uc3QgRXJyb3JTdHJpbmcm
IGludm9jYXRpb25FcnJvcik7CisKKyAgICBzdGF0aWMgaW50IGdldEludChJbnNwZWN0b3JPYmpl
Y3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0
b3JBcnJheSogcHJvdG9jb2xFcnJvcnMpOworICAgIHN0YXRpYyBkb3VibGUgZ2V0RG91YmxlKElu
c3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91
bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycyk7CisgICAgc3RhdGljIFN0cmluZyBn
ZXRTdHJpbmcoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9v
bCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKTsKKyAgICBzdGF0
aWMgYm9vbCBnZXRCb29sZWFuKEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcm
IG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycyk7
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBnZXRPYmplY3QoSW5zcGVj
dG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwg
SW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gZ2V0QXJyYXkoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0
cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJy
b3JzKTsKKworcHJpdmF0ZToKKyAgICBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQorCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgUmV0dXJuVmFsdWVUeXBlLCB0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVu
YW1lIERlZmF1bHRWYWx1ZVR5cGU+CisgICAgc3RhdGljIFJldHVyblZhbHVlVHlwZSBnZXRQcm9w
ZXJ0eVZhbHVlKEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJv
b2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycywgRGVmYXVsdFZh
bHVlVHlwZSBkZWZhdWx0VmFsdWUsIGJvb2wgKCphc01ldGhvZCkoSW5zcGVjdG9yVmFsdWUqLCBW
YWx1ZVR5cGUqKSwgY29uc3QgY2hhciogdHlwZU5hbWUpOworCisgICAgSW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKKyAgICBIYXNoTWFwPFN0cmlu
ZywgSW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIqPiBtX2Rpc3BhdGNoZXJz
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXJfaCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQ1NTQWdlbnQuY3BwCmluZGV4IDYwNzdjYTEuLjUxZTQ5MDIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcApAQCAtNjMyLDEyICs2
MzIsMTMgQEAgSW5zcGVjdG9yQ1NTQWdlbnQ6On5JbnNwZWN0b3JDU1NBZ2VudCgpCiB2b2lkIElu
c3BlY3RvckNTU0FnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKiBmcm9udGVuZENoYW5uZWwsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
KiBiYWNrZW5kRGlzcGF0Y2hlcikKIHsKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlciA9IHN0ZDo6
bWFrZV91bmlxdWU8SW5zcGVjdG9yQ1NTRnJvbnRlbmREaXNwYXRjaGVyPihmcm9udGVuZENoYW5u
ZWwpOwotICAgIGJhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckFnZW50KHRoaXMpOworICAgIG1f
YmFja2VuZERpc3BhdGNoZXIgPSBJbnNwZWN0b3JDU1NCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRl
KGJhY2tlbmREaXNwYXRjaGVyLCB0aGlzKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6
d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoKQogewogICAgIG1fZnJvbnRlbmREaXNwYXRj
aGVyID0gbnVsbHB0cjsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLmNsZWFyKCk7CiAKICAgICBy
ZXNldE5vblBlcnNpc3RlbnREYXRhKCk7CiAgICAgU3RyaW5nIGVycm9yU3RyaW5nOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaAppbmRleCBjYmU2YzM2Li45
ZDNiNDBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NT
QWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQu
aApAQCAtNjYsNyArNjYsNyBAQCBjbGFzcyBDaGFuZ2VSZWdpb25PdmVyc2V0VGFzazsKIGNsYXNz
IEluc3BlY3RvckNTU0FnZW50CiAgICAgOiBwdWJsaWMgSW5zcGVjdG9yQmFzZUFnZW50CiAgICAg
LCBwdWJsaWMgSW5zcGVjdG9yRE9NQWdlbnQ6OkRPTUxpc3RlbmVyCi0gICAgLCBwdWJsaWMgSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNTU0NvbW1hbmRIYW5kbGVyCisgICAgLCBwdWJsaWMg
SW5zcGVjdG9yQ1NTQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyCiAgICAgLCBwdWJsaWMgSW5zcGVj
dG9yU3R5bGVTaGVldDo6TGlzdGVuZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3Bl
Y3RvckNTU0FnZW50KTsKIHB1YmxpYzoKQEAgLTE4NCw2ICsxODQsNyBAQCBwcml2YXRlOgogICAg
IHZvaWQgcmVzZXRQc2V1ZG9TdGF0ZXMoKTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0
b3JDU1NGcm9udGVuZERpc3BhdGNoZXI+IG1fZnJvbnRlbmREaXNwYXRjaGVyOworICAgIFJlZlB0
cjxJbnNwZWN0b3JDU1NCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKICAg
ICBJbnNwZWN0b3JET01BZ2VudCogbV9kb21BZ2VudDsKIAogICAgIElkVG9JbnNwZWN0b3JTdHls
ZVNoZWV0IG1faWRUb0luc3BlY3RvclN0eWxlU2hlZXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckNhbnZhc0FnZW50LmNwcAppbmRleCAzZGU4ZDY3Li5mOWY3MmYy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzQWdl
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXNBZ2Vu
dC5jcHAKQEAgLTc2LDEyICs3NiwxMyBAQCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6fkluc3BlY3Rv
ckNhbnZhc0FnZW50KCkKIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmRpZENyZWF0ZUZyb250
ZW5kQW5kQmFja2VuZChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGZyb250ZW5kQ2hhbm5lbCwg
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKQogewogICAgIG1f
ZnJvbnRlbmREaXNwYXRjaGVyID0gc3RkOjptYWtlX3VuaXF1ZTxJbnNwZWN0b3JDYW52YXNGcm9u
dGVuZERpc3BhdGNoZXI+KGZyb250ZW5kQ2hhbm5lbCk7Ci0gICAgYmFja2VuZERpc3BhdGNoZXIt
PnJlZ2lzdGVyQWdlbnQodGhpcyk7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IEluc3BlY3Rv
ckNhbnZhc0JhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoYmFja2VuZERpc3BhdGNoZXIsIHRoaXMp
OwogfQogCiB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5k
QmFja2VuZCgpCiB7CiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXIgPSBudWxscHRyOworICAgIG1f
YmFja2VuZERpc3BhdGNoZXIuY2xlYXIoKTsKIAogICAgIGRpc2FibGUobnVsbHB0cik7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzQWdlbnQu
aCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXNBZ2VudC5oCmluZGV4
IDJlYmM3MWIuLjQ5ZDAzZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDYW52YXNBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JDYW52YXNBZ2VudC5oCkBAIC01Myw3ICs1Myw3IEBAIGNsYXNzIFNjcmlwdE9iamVjdDsK
IAogdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKLWNsYXNzIEluc3BlY3RvckNhbnZhc0Fn
ZW50IDogcHVibGljIEluc3BlY3RvckJhc2VBZ2VudCwgcHVibGljIEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOjpDYW52YXNDb21tYW5kSGFuZGxlciB7CitjbGFzcyBJbnNwZWN0b3JDYW52YXNB
Z2VudCA6IHB1YmxpYyBJbnNwZWN0b3JCYXNlQWdlbnQsIHB1YmxpYyBJbnNwZWN0b3JDYW52YXNC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzT3duUHRy
PEluc3BlY3RvckNhbnZhc0FnZW50PiBjcmVhdGUoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1
bWVudGluZ0FnZW50cywgSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQsIEluamVjdGVkU2Ny
aXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQogICAgIHsKQEAgLTEwMSw2ICsxMDEs
NyBAQCBwcml2YXRlOgogICAgIEluc3BlY3RvclBhZ2VBZ2VudCogbV9wYWdlQWdlbnQ7CiAgICAg
SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBtX2luamVjdGVkU2NyaXB0TWFuYWdlcjsKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8SW5zcGVjdG9yQ2FudmFzRnJvbnRlbmREaXNwYXRjaGVyPiBtX2Zyb250ZW5k
RGlzcGF0Y2hlcjsKKyAgICBSZWZQdHI8SW5zcGVjdG9yQ2FudmFzQmFja2VuZERpc3BhdGNoZXI+
IG1fYmFja2VuZERpc3BhdGNoZXI7CiAgICAgYm9vbCBtX2VuYWJsZWQ7CiAgICAgLy8gQ29udGFp
bnMgYWxsIGZyYW1lcyB3aXRoIGNhbnZhc2VzLCB2YWx1ZSBpcyB0cnVlIG9ubHkgZm9yIGZyYW1l
cyB0aGF0IGhhdmUgYW4gdW5pbnN0cnVtZW50ZWQgY2FudmFzLgogICAgIHR5cGVkZWYgSGFzaE1h
cDxGcmFtZSosIGJvb2w+IEZyYW1lc1dpdGhVbmluc3RydW1lbnRlZENhbnZhc2VzOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnNvbGVBZ2VudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcAppbmRl
eCA2MmI5ZTMyLi5kYWE5YzViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcApAQCAtMTI1LDEyICsxMjUsMTMgQEAgdm9pZCBJbnNw
ZWN0b3JDb25zb2xlQWdlbnQ6OnJlc2V0KCkKIHZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50Ojpk
aWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBmcm9u
dGVuZENoYW5uZWwsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hl
cikKIHsKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlciA9IHN0ZDo6bWFrZV91bmlxdWU8SW5zcGVj
dG9yQ29uc29sZUZyb250ZW5kRGlzcGF0Y2hlcj4oZnJvbnRlbmRDaGFubmVsKTsKLSAgICBiYWNr
ZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJBZ2VudCh0aGlzKTsKKyAgICBtX2JhY2tlbmREaXNwYXRj
aGVyID0gSW5zcGVjdG9yQ29uc29sZUJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoYmFja2VuZERp
c3BhdGNoZXIsIHRoaXMpOwogfQogCiB2b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6d2lsbERl
c3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoKQogewogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyID0g
bnVsbHB0cjsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLmNsZWFyKCk7CiAKICAgICBTdHJpbmcg
ZXJyb3JTdHJpbmc7CiAgICAgZGlzYWJsZSgmZXJyb3JTdHJpbmcpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnNvbGVBZ2VudC5oIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnNvbGVBZ2VudC5oCmluZGV4IDQ1MDRhYmQuLmMw
ZjBhZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb25z
b2xlQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29uc29s
ZUFnZW50LmgKQEAgLTUyLDcgKzUyLDcgQEAgY2xhc3MgU2NyaXB0UHJvZmlsZTsKIAogdHlwZWRl
ZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKLWNsYXNzIEluc3BlY3RvckNvbnNvbGVBZ2VudCA6IHB1
YmxpYyBJbnNwZWN0b3JCYXNlQWdlbnQsIHB1YmxpYyBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cjo6Q29uc29sZUNvbW1hbmRIYW5kbGVyIHsKK2NsYXNzIEluc3BlY3RvckNvbnNvbGVBZ2VudCA6
IHB1YmxpYyBJbnNwZWN0b3JCYXNlQWdlbnQsIHB1YmxpYyBJbnNwZWN0b3JDb25zb2xlQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbnNwZWN0b3JD
b25zb2xlQWdlbnQpOwogcHVibGljOgogICAgIEluc3BlY3RvckNvbnNvbGVBZ2VudChJbnN0cnVt
ZW50aW5nQWdlbnRzKiwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKik7CkBAIC0xMDEsNiArMTAxLDcg
QEAgcHJvdGVjdGVkOgogCiAgICAgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBtX2luamVjdGVkU2Ny
aXB0TWFuYWdlcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yQ29uc29sZUZyb250ZW5k
RGlzcGF0Y2hlcj4gbV9mcm9udGVuZERpc3BhdGNoZXI7CisgICAgUmVmUHRyPEluc3BlY3RvckNv
bnNvbGVCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKICAgICBDb25zb2xl
TWVzc2FnZSogbV9wcmV2aW91c01lc3NhZ2U7CiAgICAgVmVjdG9yPE93blB0cjxDb25zb2xlTWVz
c2FnZT4+IG1fY29uc29sZU1lc3NhZ2VzOwogICAgIGludCBtX2V4cGlyZWRDb25zb2xlTWVzc2Fn
ZUNvdW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRP
TUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5j
cHAKaW5kZXggZTZiY2I0Yy4uMjVlZWQ4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCkBAIC0yMzQsNyArMjM0LDcgQEAgSW5zcGVjdG9yRE9N
QWdlbnQ6On5JbnNwZWN0b3JET01BZ2VudCgpCiB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRD
cmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBmcm9udGVu
ZENoYW5uZWwsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcikK
IHsKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlciA9IHN0ZDo6bWFrZV91bmlxdWU8SW5zcGVjdG9y
RE9NRnJvbnRlbmREaXNwYXRjaGVyPihmcm9udGVuZENoYW5uZWwpOwotICAgIGJhY2tlbmREaXNw
YXRjaGVyLT5yZWdpc3RlckFnZW50KHRoaXMpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXIgPSBJ
bnNwZWN0b3JET01CYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKGJhY2tlbmREaXNwYXRjaGVyLCB0
aGlzKTsKIAogICAgIG1faGlzdG9yeSA9IGFkb3B0UHRyKG5ldyBJbnNwZWN0b3JIaXN0b3J5KCkp
OwogICAgIG1fZG9tRWRpdG9yID0gYWRvcHRQdHIobmV3IERPTUVkaXRvcihtX2hpc3RvcnkuZ2V0
KCkpKTsKQEAgLTI0OSw2ICsyNDksNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRDcmVh
dGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBmcgogdm9pZCBJ
bnNwZWN0b3JET01BZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoKQogewogICAg
IG1fZnJvbnRlbmREaXNwYXRjaGVyID0gbnVsbHB0cjsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LmNsZWFyKCk7CiAKICAgICBtX2hpc3RvcnkuY2xlYXIoKTsKICAgICBtX2RvbUVkaXRvci5jbGVh
cigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFn
ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaAppbmRl
eCAzMWVkNjlkLi4xMTk2Yzk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRE9NQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRE9NQWdlbnQuaApAQCAtOTAsNyArOTAsNyBAQCBzdHJ1Y3QgRXZlbnRMaXN0ZW5lckluZm8g
ewogICAgIGNvbnN0IEV2ZW50TGlzdGVuZXJWZWN0b3IgZXZlbnRMaXN0ZW5lclZlY3RvcjsKIH07
CiAKLWNsYXNzIEluc3BlY3RvckRPTUFnZW50IDogcHVibGljIEluc3BlY3RvckJhc2VBZ2VudCwg
cHVibGljIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpET01Db21tYW5kSGFuZGxlciB7Citj
bGFzcyBJbnNwZWN0b3JET01BZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3JCYXNlQWdlbnQsIHB1Ymxp
YyBJbnNwZWN0b3JET01CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKEluc3BlY3RvckRPTUFnZW50KTsKIHB1YmxpYzoKICAgICBzdHJ1Y3QgRE9NTGlz
dGVuZXIgewpAQCAtMjQ1LDYgKzI0NSw3IEBAIHByaXZhdGU6CiAgICAgSW5zcGVjdG9yT3Zlcmxh
eSogbV9vdmVybGF5OwogICAgIEluc3BlY3RvckNsaWVudCogbV9jbGllbnQ7CiAgICAgc3RkOjp1
bmlxdWVfcHRyPEluc3BlY3RvckRPTUZyb250ZW5kRGlzcGF0Y2hlcj4gbV9mcm9udGVuZERpc3Bh
dGNoZXI7CisgICAgUmVmUHRyPEluc3BlY3RvckRPTUJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tl
bmREaXNwYXRjaGVyOwogICAgIERPTUxpc3RlbmVyKiBtX2RvbUxpc3RlbmVyOwogICAgIE5vZGVU
b0lkTWFwIG1fZG9jdW1lbnROb2RlVG9JZE1hcDsKICAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRy
PE5vZGU+LCBCYWNrZW5kTm9kZUlkPiBOb2RlVG9CYWNrZW5kSWRNYXA7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudC5jcHAKaW5k
ZXggY2ZlNWVlZi4uODlmZjZlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50LmNwcApAQCAtMTEzLDExICsxMTMsMTMgQEAg
dm9pZCBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50OjpkaXNhYmxlKCkKIAogdm9pZCBJbnNwZWN0
b3JET01EZWJ1Z2dlckFnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKiwgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNw
YXRjaGVyKQogewotICAgIGJhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckFnZW50KHRoaXMpOwor
ICAgIG1fYmFja2VuZERpc3BhdGNoZXIgPSBJbnNwZWN0b3JET01EZWJ1Z2dlckJhY2tlbmREaXNw
YXRjaGVyOjpjcmVhdGUoYmFja2VuZERpc3BhdGNoZXIsIHRoaXMpOwogfQogCiB2b2lkIEluc3Bl
Y3RvckRPTURlYnVnZ2VyQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKCkKIHsK
KyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLmNsZWFyKCk7CisKICAgICBkaXNhYmxlKCk7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01EZWJ1Z2dl
ckFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NRGVidWdnZXJB
Z2VudC5oCmluZGV4IGFlMjVhMDMuLjk2Zjg4YTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQuaApAQCAtNTIsNyArNTIsNyBA
QCBjbGFzcyBOb2RlOwogCiB0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKIAotY2xhc3MgSW5z
cGVjdG9yRE9NRGVidWdnZXJBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3JCYXNlQWdlbnQsIHB1Ymxp
YyBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpMaXN0ZW5lciwgcHVibGljIEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyOjpET01EZWJ1Z2dlckNvbW1hbmRIYW5kbGVyIHsKK2NsYXNzIEluc3BlY3Rv
ckRPTURlYnVnZ2VyQWdlbnQgOiBwdWJsaWMgSW5zcGVjdG9yQmFzZUFnZW50LCBwdWJsaWMgSW5z
cGVjdG9yRGVidWdnZXJBZ2VudDo6TGlzdGVuZXIsIHB1YmxpYyBJbnNwZWN0b3JET01EZWJ1Z2dl
ckJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5z
cGVjdG9yRE9NRGVidWdnZXJBZ2VudCk7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NPd25QdHI8
SW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudD4gY3JlYXRlKEluc3RydW1lbnRpbmdBZ2VudHMqLCBJ
bnNwZWN0b3JET01BZ2VudCosIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQqLCBJbnNwZWN0b3JBZ2Vu
dCopOwpAQCAtMTA0LDYgKzEwNCw3IEBAIHByaXZhdGU6CiAKICAgICBJbnNwZWN0b3JET01BZ2Vu
dCogbV9kb21BZ2VudDsKICAgICBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KiBtX2RlYnVnZ2VyQWdl
bnQ7CisgICAgUmVmUHRyPEluc3BlY3RvckRPTURlYnVnZ2VyQmFja2VuZERpc3BhdGNoZXI+IG1f
YmFja2VuZERpc3BhdGNoZXI7CiAgICAgSGFzaE1hcDxOb2RlKiwgdWludDMyX3Q+IG1fZG9tQnJl
YWtwb2ludHM7CiAgICAgSGFzaFNldDxTdHJpbmc+IG1fZXZlbnRMaXN0ZW5lckJyZWFrcG9pbnRz
OwogICAgIEhhc2hTZXQ8U3RyaW5nPiBtX3hockJyZWFrcG9pbnRzOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcAppbmRleCA0
MTlhZjkyLi42NDZkZTIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcApAQCAtNzIsMTIgKzcyLDEzIEBAIEluc3BlY3Rv
ckRPTVN0b3JhZ2VBZ2VudDo6fkluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudCgpCiB2b2lkIEluc3Bl
Y3RvckRPTVN0b3JhZ2VBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCogZnJvbnRlbmRDaGFubmVsLCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlciogYmFja2VuZERpc3BhdGNoZXIpCiB7CiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXIgPSBz
dGQ6Om1ha2VfdW5pcXVlPEluc3BlY3RvckRPTVN0b3JhZ2VGcm9udGVuZERpc3BhdGNoZXI+KGZy
b250ZW5kQ2hhbm5lbCk7Ci0gICAgYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyQWdlbnQodGhp
cyk7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IEluc3BlY3RvckRPTVN0b3JhZ2VCYWNrZW5k
RGlzcGF0Y2hlcjo6Y3JlYXRlKGJhY2tlbmREaXNwYXRjaGVyLCB0aGlzKTsKIH0KIAogdm9pZCBJ
bnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKCkK
IHsKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlciA9IG51bGxwdHI7CisgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci5jbGVhcigpOwogCiAgICAgZGlzYWJsZShudWxscHRyKTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuaAppbmRleCA4
NGFiOTMyLi4yY2QxN2IzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRE9NU3RvcmFnZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5oCkBAIC00OSw3ICs0OSw3IEBAIGNsYXNzIFN0b3JhZ2VB
cmVhOwogCiB0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKIAotY2xhc3MgSW5zcGVjdG9yRE9N
U3RvcmFnZUFnZW50IDogcHVibGljIEluc3BlY3RvckJhc2VBZ2VudCwgcHVibGljIEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjpET01TdG9yYWdlQ29tbWFuZEhhbmRsZXIgeworY2xhc3MgSW5z
cGVjdG9yRE9NU3RvcmFnZUFnZW50IDogcHVibGljIEluc3BlY3RvckJhc2VBZ2VudCwgcHVibGlj
IEluc3BlY3RvckRPTVN0b3JhZ2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogcHVibGljOgog
ICAgIHN0YXRpYyBQYXNzT3duUHRyPEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudD4gY3JlYXRlKElu
c3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIEluc3BlY3RvclBhZ2VBZ2Vu
dCogcGFnZUFnZW50KQogICAgIHsKQEAgLTgyLDYgKzgyLDcgQEAgcHJpdmF0ZToKIAogICAgIElu
c3BlY3RvclBhZ2VBZ2VudCogbV9wYWdlQWdlbnQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEluc3Bl
Y3RvckRPTVN0b3JhZ2VGcm9udGVuZERpc3BhdGNoZXI+IG1fZnJvbnRlbmREaXNwYXRjaGVyOwor
ICAgIFJlZlB0cjxJbnNwZWN0b3JET01TdG9yYWdlQmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2Vu
ZERpc3BhdGNoZXI7CiAgICAgYm9vbCBtX2VuYWJsZWQ7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5jcHAKaW5kZXggN2E3NzQx
NS4uYzU4MDBlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckRhdGFiYXNlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JEYXRhYmFzZUFnZW50LmNwcApAQCAtNTMsNyArNTMsNyBAQAogCiAjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgogCi10eXBlZGVmIFdlYkNvcmU6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpE
YXRhYmFzZUNvbW1hbmRIYW5kbGVyOjpFeGVjdXRlU1FMQ2FsbGJhY2sgRXhlY3V0ZVNRTENhbGxi
YWNrOwordHlwZWRlZiBXZWJDb3JlOjpJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcjo6RXhlY3V0ZVNRTENhbGxiYWNrIEV4ZWN1dGVTUUxDYWxsYmFjazsKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCkBAIC0yMjUsMTIgKzIyNSwxMyBAQCBJbnNwZWN0b3JEYXRhYmFzZUFn
ZW50Ojp+SW5zcGVjdG9yRGF0YWJhc2VBZ2VudCgpCiB2b2lkIEluc3BlY3RvckRhdGFiYXNlQWdl
bnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwq
IGZyb250ZW5kQ2hhbm5lbCwgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNw
YXRjaGVyKQogewogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyID0gc3RkOjptYWtlX3VuaXF1ZTxJ
bnNwZWN0b3JEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlcj4oZnJvbnRlbmRDaGFubmVsKTsKLSAg
ICBiYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJBZ2VudCh0aGlzKTsKKyAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyID0gSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKGJh
Y2tlbmREaXNwYXRjaGVyLCB0aGlzKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUFnZW50
Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZCgpCiB7CiAgICAgbV9mcm9udGVuZERpc3Bh
dGNoZXIgPSBudWxscHRyOworICAgIG1fYmFja2VuZERpc3BhdGNoZXIuY2xlYXIoKTsKIAogICAg
IGRpc2FibGUobnVsbHB0cik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckRhdGFiYXNlQWdlbnQuaAppbmRleCBhMjFiY2E4Li5hMzJmMDY0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50LmgKQEAgLTQ2
LDcgKzQ2LDcgQEAgY2xhc3MgSW5zdHJ1bWVudGluZ0FnZW50czsKIAogdHlwZWRlZiBTdHJpbmcg
RXJyb3JTdHJpbmc7CiAKLWNsYXNzIEluc3BlY3RvckRhdGFiYXNlQWdlbnQgOiBwdWJsaWMgSW5z
cGVjdG9yQmFzZUFnZW50LCBwdWJsaWMgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkRhdGFi
YXNlQ29tbWFuZEhhbmRsZXIgeworY2xhc3MgSW5zcGVjdG9yRGF0YWJhc2VBZ2VudCA6IHB1Ymxp
YyBJbnNwZWN0b3JCYXNlQWdlbnQsIHB1YmxpYyBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NPd25QdHI8SW5zcGVjdG9y
RGF0YWJhc2VBZ2VudD4gY3JlYXRlKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdB
Z2VudHMpCiAgICAgewpAQCAtNzYsNiArNzYsNyBAQCBwcml2YXRlOgogICAgIEluc3BlY3RvckRh
dGFiYXNlUmVzb3VyY2UqIGZpbmRCeUZpbGVOYW1lKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpOwog
CiAgICAgc3RkOjp1bmlxdWVfcHRyPEluc3BlY3RvckRhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVy
PiBtX2Zyb250ZW5kRGlzcGF0Y2hlcjsKKyAgICBSZWZQdHI8SW5zcGVjdG9yRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKICAgICB0eXBlZGVmIEhhc2hNYXA8
U3RyaW5nLCBSZWZQdHI8SW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZT4+IERhdGFiYXNlUmVzb3Vy
Y2VzTWFwOwogICAgIERhdGFiYXNlUmVzb3VyY2VzTWFwIG1fcmVzb3VyY2VzOwogICAgIGJvb2wg
bV9lbmFibGVkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRl
YnVnZ2VyQWdlbnQuY3BwCmluZGV4IDJkZjU4YzMuLmFjMmI3MGUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAKQEAgLTEzOSwx
MiArMTM5LDEzIEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlzYWJsZShFcnJvclN0
cmluZyopCiB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5k
QmFja2VuZChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGZyb250ZW5kQ2hhbm5lbCwgSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKQogewogICAgIG1fZnJvbnRl
bmREaXNwYXRjaGVyID0gc3RkOjptYWtlX3VuaXF1ZTxJbnNwZWN0b3JEZWJ1Z2dlckZyb250ZW5k
RGlzcGF0Y2hlcj4oZnJvbnRlbmRDaGFubmVsKTsKLSAgICBiYWNrZW5kRGlzcGF0Y2hlci0+cmVn
aXN0ZXJBZ2VudCh0aGlzKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyID0gSW5zcGVjdG9yRGVi
dWdnZXJCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKGJhY2tlbmREaXNwYXRjaGVyLCB0aGlzKTsK
IH0KIAogdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5k
QmFja2VuZCgpCiB7CiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXIgPSBudWxscHRyOworICAgIG1f
YmFja2VuZERpc3BhdGNoZXIuY2xlYXIoKTsKIAogICAgIGRpc2FibGUoKTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmggYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oCmluZGV4IDQy
OTUxZGQuLjRiZTYwMDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQuaApAQCAtNjAsNyArNjAsNyBAQCBjbGFzcyBTY3JpcHRWYWx1ZTsK
IAogdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKLWNsYXNzIEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQgOiBwdWJsaWMgSW5zcGVjdG9yQmFzZUFnZW50LCBwdWJsaWMgU2NyaXB0RGVidWdMaXN0
ZW5lciwgcHVibGljIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpEZWJ1Z2dlckNvbW1hbmRI
YW5kbGVyIHsKK2NsYXNzIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQgOiBwdWJsaWMgSW5zcGVjdG9y
QmFzZUFnZW50LCBwdWJsaWMgU2NyaXB0RGVidWdMaXN0ZW5lciwgcHVibGljIEluc3BlY3RvckRl
YnVnZ2VyQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJs
aWM6CiAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGJhY2t0cmFjZU9iamVjdEdyb3VwOwpAQCAtMTY4
LDYgKzE2OCw3IEBAIHByaXZhdGU6CiAKICAgICBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIG1faW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3JEZWJ1Z2dl
ckZyb250ZW5kRGlzcGF0Y2hlcj4gbV9mcm9udGVuZERpc3BhdGNoZXI7CisgICAgUmVmUHRyPElu
c3BlY3RvckRlYnVnZ2VyQmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7CiAg
ICAgSlNDOjpFeGVjU3RhdGUqIG1fcGF1c2VkU2NyaXB0U3RhdGU7CiAgICAgU2NyaXB0VmFsdWUg
bV9jdXJyZW50Q2FsbFN0YWNrOwogICAgIFNjcmlwdHNNYXAgbV9zY3JpcHRzOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckhlYXBQcm9maWxlckFnZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JIZWFwUHJvZmlsZXJBZ2VudC5j
cHAKaW5kZXggOGNjYmYxNS4uMDgxNGEwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckhlYXBQcm9maWxlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9ySGVhcFByb2ZpbGVyQWdlbnQuY3BwCkBAIC04MywxMiArODMs
MTMgQEAgdm9pZCBJbnNwZWN0b3JIZWFwUHJvZmlsZXJBZ2VudDo6cmVzZXRGcm9udGVuZFByb2Zp
bGVzKCkKIHZvaWQgSW5zcGVjdG9ySGVhcFByb2ZpbGVyQWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5k
QW5kQmFja2VuZChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGZyb250ZW5kQ2hhbm5lbCwgSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKQogewogICAgIG1fZnJv
bnRlbmREaXNwYXRjaGVyID0gc3RkOjptYWtlX3VuaXF1ZTxJbnNwZWN0b3JIZWFwUHJvZmlsZXJG
cm9udGVuZERpc3BhdGNoZXI+KGZyb250ZW5kQ2hhbm5lbCk7Ci0gICAgYmFja2VuZERpc3BhdGNo
ZXItPnJlZ2lzdGVyQWdlbnQodGhpcyk7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IEluc3Bl
Y3RvckhlYXBQcm9maWxlckJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoYmFja2VuZERpc3BhdGNo
ZXIsIHRoaXMpOwogfQogCiB2b2lkIEluc3BlY3RvckhlYXBQcm9maWxlckFnZW50Ojp3aWxsRGVz
dHJveUZyb250ZW5kQW5kQmFja2VuZCgpCiB7CiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXIgPSBu
dWxscHRyOworICAgIG1fYmFja2VuZERpc3BhdGNoZXIuY2xlYXIoKTsKIAogICAgIG1fcHJvZmls
ZUhlYWRlcnNSZXF1ZXN0ZWQgPSBmYWxzZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JIZWFwUHJvZmlsZXJBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckhlYXBQcm9maWxlckFnZW50LmgKaW5kZXggMjZjMmQxOS4uY2Mz
Njg2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckhlYXBQ
cm9maWxlckFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckhl
YXBQcm9maWxlckFnZW50LmgKQEAgLTQ5LDcgKzQ5LDcgQEAgY2xhc3MgU2NyaXB0UHJvZmlsZTsK
IAogdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKLWNsYXNzIEluc3BlY3RvckhlYXBQcm9m
aWxlckFnZW50IDogcHVibGljIEluc3BlY3RvckJhc2VBZ2VudCwgcHVibGljIEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjpIZWFwUHJvZmlsZXJDb21tYW5kSGFuZGxlciB7CitjbGFzcyBJbnNw
ZWN0b3JIZWFwUHJvZmlsZXJBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3JCYXNlQWdlbnQsIHB1Ymxp
YyBJbnNwZWN0b3JIZWFwUHJvZmlsZXJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3RvckhlYXBQcm9maWxlckFnZW50KTsgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NPd25QdHI8SW5zcGVjdG9y
SGVhcFByb2ZpbGVyQWdlbnQ+IGNyZWF0ZShJbnN0cnVtZW50aW5nQWdlbnRzKiwgSW5qZWN0ZWRT
Y3JpcHRNYW5hZ2VyKik7CkBAIC04NCw2ICs4NCw3IEBAIHByaXZhdGU6CiAKICAgICBJbmplY3Rl
ZFNjcmlwdE1hbmFnZXIqIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOwogICAgIHN0ZDo6dW5pcXVl
X3B0cjxJbnNwZWN0b3JIZWFwUHJvZmlsZXJGcm9udGVuZERpc3BhdGNoZXI+IG1fZnJvbnRlbmRE
aXNwYXRjaGVyOworICAgIFJlZlB0cjxJbnNwZWN0b3JIZWFwUHJvZmlsZXJCYWNrZW5kRGlzcGF0
Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKICAgICB1bnNpZ25lZCBtX25leHRVc2VySW5pdGlh
dGVkSGVhcFNuYXBzaG90TnVtYmVyOwogICAgIElkVG9IZWFwU25hcHNob3RNYXAgbV9zbmFwc2hv
dHM7CiAgICAgYm9vbCBtX3Byb2ZpbGVIZWFkZXJzUmVxdWVzdGVkOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHAKaW5kZXggMWUy
NzIwNy4uODk2ZGU5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckluZGV4ZWREQkFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwCkBAIC03NiwxMSArNzYsMTEgQEAgdXNpbmcgV2ViQ29y
ZTo6VHlwZUJ1aWxkZXI6OkluZGV4ZWREQjo6S2V5UmFuZ2U7CiB1c2luZyBXZWJDb3JlOjpUeXBl
QnVpbGRlcjo6SW5kZXhlZERCOjpPYmplY3RTdG9yZTsKIHVzaW5nIFdlYkNvcmU6OlR5cGVCdWls
ZGVyOjpJbmRleGVkREI6Ok9iamVjdFN0b3JlSW5kZXg7CiAKLXR5cGVkZWYgV2ViQ29yZTo6SW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkluZGV4ZWREQkNvbW1hbmRIYW5kbGVyOjpSZXF1ZXN0
RGF0YWJhc2VOYW1lc0NhbGxiYWNrIFJlcXVlc3REYXRhYmFzZU5hbWVzQ2FsbGJhY2s7Ci10eXBl
ZGVmIFdlYkNvcmU6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpJbmRleGVkREJDb21tYW5k
SGFuZGxlcjo6UmVxdWVzdERhdGFiYXNlQ2FsbGJhY2sgUmVxdWVzdERhdGFiYXNlQ2FsbGJhY2s7
Ci10eXBlZGVmIFdlYkNvcmU6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpJbmRleGVkREJD
b21tYW5kSGFuZGxlcjo6UmVxdWVzdERhdGFDYWxsYmFjayBSZXF1ZXN0RGF0YUNhbGxiYWNrOwor
dHlwZWRlZiBXZWJDb3JlOjpJbnNwZWN0b3JJbmRleGVkREJCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXI6OlJlcXVlc3REYXRhYmFzZU5hbWVzQ2FsbGJhY2sgUmVxdWVzdERhdGFiYXNlTmFtZXNDYWxs
YmFjazsKK3R5cGVkZWYgV2ViQ29yZTo6SW5zcGVjdG9ySW5kZXhlZERCQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyOjpSZXF1ZXN0RGF0YWJhc2VDYWxsYmFjayBSZXF1ZXN0RGF0YWJhc2VDYWxsYmFj
azsKK3R5cGVkZWYgV2ViQ29yZTo6SW5zcGVjdG9ySW5kZXhlZERCQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyOjpSZXF1ZXN0RGF0YUNhbGxiYWNrIFJlcXVlc3REYXRhQ2FsbGJhY2s7CiB0eXBlZGVm
IFdlYkNvcmU6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UgUmVxdWVz
dENhbGxiYWNrOwotdHlwZWRlZiBXZWJDb3JlOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
SW5kZXhlZERCQ29tbWFuZEhhbmRsZXI6OkNsZWFyT2JqZWN0U3RvcmVDYWxsYmFjayBDbGVhck9i
amVjdFN0b3JlQ2FsbGJhY2s7Cit0eXBlZGVmIFdlYkNvcmU6Okluc3BlY3RvckluZGV4ZWREQkJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcjo6Q2xlYXJPYmplY3RTdG9yZUNhbGxiYWNrIENsZWFyT2Jq
ZWN0U3RvcmVDYWxsYmFjazsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01NjksMTEgKzU2
OSwxMyBAQCBJbnNwZWN0b3JJbmRleGVkREJBZ2VudDo6fkluc3BlY3RvckluZGV4ZWREQkFnZW50
KCkKIAogdm9pZCBJbnNwZWN0b3JJbmRleGVkREJBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRC
YWNrZW5kKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCosIEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyKiBiYWNrZW5kRGlzcGF0Y2hlcikKIHsKLSAgICBiYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0
ZXJBZ2VudCh0aGlzKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyID0gSW5zcGVjdG9ySW5kZXhl
ZERCQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShiYWNrZW5kRGlzcGF0Y2hlciwgdGhpcyk7CiB9
CiAKIHZvaWQgSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRC
YWNrZW5kKCkKIHsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLmNsZWFyKCk7CisKICAgICBkaXNh
YmxlKG51bGxwdHIpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JJbmRleGVkREJBZ2VudC5oCmluZGV4IGVmNDBkYmMuLmJhMzc1OWEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5oCkBAIC00
NCw3ICs0NCw3IEBAIGNsYXNzIEluc3BlY3RvclBhZ2VBZ2VudDsKIAogdHlwZWRlZiBTdHJpbmcg
RXJyb3JTdHJpbmc7CiAKLWNsYXNzIEluc3BlY3RvckluZGV4ZWREQkFnZW50IDogcHVibGljIElu
c3BlY3RvckJhc2VBZ2VudCwgcHVibGljIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpJbmRl
eGVkREJDb21tYW5kSGFuZGxlciB7CitjbGFzcyBJbnNwZWN0b3JJbmRleGVkREJBZ2VudCA6IHB1
YmxpYyBJbnNwZWN0b3JCYXNlQWdlbnQsIHB1YmxpYyBJbnNwZWN0b3JJbmRleGVkREJCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzT3duUHRyPEluc3Bl
Y3RvckluZGV4ZWREQkFnZW50PiBjcmVhdGUoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVu
dGluZ0FnZW50cywgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIs
IEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50KQogICAgIHsKQEAgLTY4LDYgKzY4LDcgQEAg
cHJpdmF0ZToKIAogICAgIEluamVjdGVkU2NyaXB0TWFuYWdlciogbV9pbmplY3RlZFNjcmlwdE1h
bmFnZXI7CiAgICAgSW5zcGVjdG9yUGFnZUFnZW50KiBtX3BhZ2VBZ2VudDsKKyAgICBSZWZQdHI8
SW5zcGVjdG9ySW5kZXhlZERCQmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5wdXRBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9ySW5wdXRBZ2VudC5jcHAKaW5kZXggZjI2ZDcxZC4uN2VjY2I4ZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvcklucHV0QWdlbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnB1dEFnZW50LmNwcApA
QCAtNjMsMTEgKzYzLDEyIEBAIEluc3BlY3RvcklucHV0QWdlbnQ6On5JbnNwZWN0b3JJbnB1dEFn
ZW50KCkKIAogdm9pZCBJbnNwZWN0b3JJbnB1dEFnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJh
Y2tlbmQoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiwgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIqIGJhY2tlbmREaXNwYXRjaGVyKQogewotICAgIGJhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3Rl
ckFnZW50KHRoaXMpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXIgPSBJbnNwZWN0b3JJbnB1dEJh
Y2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoYmFja2VuZERpc3BhdGNoZXIsIHRoaXMpOwogfQogCiB2
b2lkIEluc3BlY3RvcklucHV0QWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKCkK
IHsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLmNsZWFyKCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9y
SW5wdXRBZ2VudDo6ZGlzcGF0Y2hLZXlFdmVudChFcnJvclN0cmluZyogZXJyb3IsIGNvbnN0IFN0
cmluZyYgdHlwZSwgY29uc3QgaW50KiBtb2RpZmllcnMsIGNvbnN0IGRvdWJsZSogdGltZXN0YW1w
LCBjb25zdCBTdHJpbmcqIHRleHQsIGNvbnN0IFN0cmluZyogdW5tb2RpZmllZFRleHQsIGNvbnN0
IFN0cmluZyoga2V5SWRlbnRpZmllciwgY29uc3QgaW50KiB3aW5kb3dzVmlydHVhbEtleUNvZGUs
IGNvbnN0IGludCogbmF0aXZlVmlydHVhbEtleUNvZGUsIGNvbnN0IGludCogbWFjQ2hhckNvZGUs
IGNvbnN0IGJvb2wqIGF1dG9SZXBlYXQsIGNvbnN0IGJvb2wqIGlzS2V5cGFkLCBjb25zdCBib29s
KiBpc1N5c3RlbUtleSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JJbnB1dEFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5w
dXRBZ2VudC5oCmluZGV4IDNmNzFlNzQuLmFjYmEyOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnB1dEFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvcklucHV0QWdlbnQuaApAQCAtNDQsNyArNDQsNyBAQCBjbGFzcyBQ
YWdlOwogCiB0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKIAotY2xhc3MgSW5zcGVjdG9ySW5w
dXRBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3JCYXNlQWdlbnQsIHB1YmxpYyBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjo6SW5wdXRDb21tYW5kSGFuZGxlciB7CitjbGFzcyBJbnNwZWN0b3JJbnB1
dEFnZW50IDogcHVibGljIEluc3BlY3RvckJhc2VBZ2VudCwgcHVibGljIEluc3BlY3RvcklucHV0
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbnNw
ZWN0b3JJbnB1dEFnZW50KTsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc093blB0cjxJbnNwZWN0
b3JJbnB1dEFnZW50PiBjcmVhdGUoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0Fn
ZW50cywgUGFnZSogcGFnZSkKQEAgLTY1LDYgKzY1LDcgQEAgcHJpdmF0ZToKICAgICBJbnNwZWN0
b3JJbnB1dEFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqLCBQYWdlKik7CiAKICAgICBQYWdlKiBt
X3BhZ2U7CisgICAgUmVmUHRyPEluc3BlY3RvcklucHV0QmFja2VuZERpc3BhdGNoZXI+IG1fYmFj
a2VuZERpc3BhdGNoZXI7CiB9OwogCiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JMYXllclRyZWVBZ2VudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQuY3Bw
CmluZGV4IDM1YTUxMWUuLmQyN2Y5MDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JMYXllclRyZWVBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckxheWVyVHJlZUFnZW50LmNwcApAQCAtNjEsMTIgKzYxLDEzIEBAIElu
c3BlY3RvckxheWVyVHJlZUFnZW50Ojp+SW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQoKQogdm9pZCBJ
bnNwZWN0b3JMYXllclRyZWVBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCogZnJvbnRlbmRDaGFubmVsLCBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIpCiB7CiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXIg
PSBzdGQ6Om1ha2VfdW5pcXVlPEluc3BlY3RvckxheWVyVHJlZUZyb250ZW5kRGlzcGF0Y2hlcj4o
ZnJvbnRlbmRDaGFubmVsKTsKLSAgICBiYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJBZ2VudCh0
aGlzKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyID0gSW5zcGVjdG9yTGF5ZXJUcmVlQmFja2Vu
ZERpc3BhdGNoZXI6OmNyZWF0ZShiYWNrZW5kRGlzcGF0Y2hlciwgdGhpcyk7CiB9CiAKIHZvaWQg
SW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKCkK
IHsKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlciA9IG51bGxwdHI7CisgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci5jbGVhcigpOwogCiAgICAgZGlzYWJsZShudWxscHRyKTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JMYXllclRyZWVBZ2VudC5oIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckxheWVyVHJlZUFnZW50LmgKaW5kZXggMjdk
NTVkNy4uYWY1NWE5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckxheWVyVHJlZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckxheWVyVHJlZUFnZW50LmgKQEAgLTQ2LDcgKzQ2LDcgQEAgY2xhc3MgSW5zdHJ1bWVudGlu
Z0FnZW50czsKIAogdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKLWNsYXNzIEluc3BlY3Rv
ckxheWVyVHJlZUFnZW50IDogcHVibGljIEluc3BlY3RvckJhc2VBZ2VudCwgcHVibGljIEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyOjpMYXllclRyZWVDb21tYW5kSGFuZGxlciB7CitjbGFzcyBJ
bnNwZWN0b3JMYXllclRyZWVBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3JCYXNlQWdlbnQsIHB1Ymxp
YyBJbnNwZWN0b3JMYXllclRyZWVCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogcHVibGljOgog
ICAgIHN0YXRpYyBQYXNzT3duUHRyPEluc3BlY3RvckxheWVyVHJlZUFnZW50PiBjcmVhdGUoSW5z
dHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cykKICAgICB7CkBAIC04Nyw2ICs4
Nyw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCB1bmJpbmRQc2V1ZG9FbGVtZW50KFBzZXVkb0VsZW1l
bnQqKTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3JMYXllclRyZWVGcm9udGVuZERp
c3BhdGNoZXI+IG1fZnJvbnRlbmREaXNwYXRjaGVyOworICAgIFJlZlB0cjxJbnNwZWN0b3JMYXll
clRyZWVCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKIAogICAgIEhhc2hN
YXA8Y29uc3QgUmVuZGVyTGF5ZXIqLCBTdHJpbmc+IG1fZG9jdW1lbnRMYXllclRvSWRNYXA7CiAg
ICAgSGFzaE1hcDxTdHJpbmcsIGNvbnN0IFJlbmRlckxheWVyKj4gbV9pZFRvTGF5ZXI7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTWVtb3J5QWdlbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck1lbW9yeUFnZW50LmNwcAppbmRl
eCAzYzI2OWZjLi43NThiN2I0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yTWVtb3J5QWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JNZW1vcnlBZ2VudC5jcHAKQEAgLTY5LDExICs2OSwxMiBAQCBJbnNwZWN0b3JNZW1v
cnlBZ2VudDo6fkluc3BlY3Rvck1lbW9yeUFnZW50KCkKIAogdm9pZCBJbnNwZWN0b3JNZW1vcnlB
Z2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCosIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcikKIHsKLSAg
ICBiYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJBZ2VudCh0aGlzKTsKKyAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyID0gSW5zcGVjdG9yTWVtb3J5QmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShiYWNr
ZW5kRGlzcGF0Y2hlciwgdGhpcyk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yTWVtb3J5QWdlbnQ6Ondp
bGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKCkKIHsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LmNsZWFyKCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yTWVtb3J5QWdlbnQ6OmdldERPTUNvdW50ZXJz
KEVycm9yU3RyaW5nKiwgaW50KiBkb2N1bWVudHMsIGludCogbm9kZXMsIGludCoganNFdmVudExp
c3RlbmVycykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JN
ZW1vcnlBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck1lbW9yeUFn
ZW50LmgKaW5kZXggZjE0ZGJhOS4uZTE5MTBkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3Rvck1lbW9yeUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3Rvck1lbW9yeUFnZW50LmgKQEAgLTQ1LDcgKzQ1LDcgQEAgY2xhc3MgSW5z
dHJ1bWVudGluZ0FnZW50czsKIAogdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKLWNsYXNz
IEluc3BlY3Rvck1lbW9yeUFnZW50IDogcHVibGljIEluc3BlY3RvckJhc2VBZ2VudCwgcHVibGlj
IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpNZW1vcnlDb21tYW5kSGFuZGxlciB7CitjbGFz
cyBJbnNwZWN0b3JNZW1vcnlBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3JCYXNlQWdlbnQsIHB1Ymxp
YyBJbnNwZWN0b3JNZW1vcnlCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKEluc3BlY3Rvck1lbW9yeUFnZW50KTsKIHB1YmxpYzoKICAgICBzdGF0aWMg
UGFzc093blB0cjxJbnNwZWN0b3JNZW1vcnlBZ2VudD4gY3JlYXRlKEluc3RydW1lbnRpbmdBZ2Vu
dHMqIGluc3RydW1lbnRpbmdBZ2VudHMpOwpAQCAtNTgsNiArNTgsOCBAQCBwdWJsaWM6CiAKIHBy
aXZhdGU6CiAgICAgSW5zcGVjdG9yTWVtb3J5QWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyopOwor
CisgICAgUmVmUHRyPEluc3BlY3Rvck1lbW9yeUJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmRE
aXNwYXRjaGVyOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAppbmRleCBlMTM2ZDExLi5lYzNk
MjQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFn
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50
LmNwcApAQCAtMzcxLDEyICszNzEsMTMgQEAgSW5zcGVjdG9yUGFnZUFnZW50OjpJbnNwZWN0b3JQ
YWdlQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywKIHZvaWQg
SW5zcGVjdG9yUGFnZUFnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKiBmcm9udGVuZENoYW5uZWwsIEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyKiBiYWNrZW5kRGlzcGF0Y2hlcikKIHsKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlciA9IHN0
ZDo6bWFrZV91bmlxdWU8SW5zcGVjdG9yUGFnZUZyb250ZW5kRGlzcGF0Y2hlcj4oZnJvbnRlbmRD
aGFubmVsKTsKLSAgICBiYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJBZ2VudCh0aGlzKTsKKyAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyID0gSW5zcGVjdG9yUGFnZUJhY2tlbmREaXNwYXRjaGVyOjpj
cmVhdGUoYmFja2VuZERpc3BhdGNoZXIsIHRoaXMpOwogfQogCiB2b2lkIEluc3BlY3RvclBhZ2VB
Z2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoKQogewogICAgIG1fZnJvbnRlbmRE
aXNwYXRjaGVyID0gbnVsbHB0cjsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLmNsZWFyKCk7CiAK
ICAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgICBkaXNhYmxlKCZlcnJvcik7CkBAIC03ODEsNyAr
NzgyLDcgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNldENvbnRpbnVvdXNQYWludGluZ0Vu
YWJsZWQoRXJyb3JTdHJpbmcqLCBib29sIGVuYWJsZWQKICAgICAgICAgbWFpbkZyYW1lKCktPnZp
ZXcoKS0+aW52YWxpZGF0ZSgpOwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6Z2V0U2Ny
aXB0RXhlY3V0aW9uU3RhdHVzKEVycm9yU3RyaW5nKiwgUGFnZUNvbW1hbmRIYW5kbGVyOjpSZXN1
bHQ6OkVudW0qIHN0YXR1cykKK3ZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpnZXRTY3JpcHRFeGVj
dXRpb25TdGF0dXMoRXJyb3JTdHJpbmcqLCBJbnNwZWN0b3JQYWdlQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyOjpSZXN1bHQ6OkVudW0qIHN0YXR1cykKIHsKICAgICBib29sIGRpc2FibGVkQnlTY3Jp
cHRDb250cm9sbGVyID0gZmFsc2U7CiAgICAgYm9vbCBkaXNhYmxlZEluU2V0dGluZ3MgPSBmYWxz
ZTsKQEAgLTc5MiwxNCArNzkzLDE0IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpnZXRTY3Jp
cHRFeGVjdXRpb25TdGF0dXMoRXJyb3JTdHJpbmcqLCBQYWdlQ29tbWFuZEhhbmRsCiAgICAgfQog
CiAgICAgaWYgKCFkaXNhYmxlZEJ5U2NyaXB0Q29udHJvbGxlcikgewotICAgICAgICAqc3RhdHVz
ID0gUGFnZUNvbW1hbmRIYW5kbGVyOjpSZXN1bHQ6OkFsbG93ZWQ7CisgICAgICAgICpzdGF0dXMg
PSBJbnNwZWN0b3JQYWdlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpSZXN1bHQ6OkFsbG93ZWQ7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoZGlzYWJsZWRJblNldHRpbmdzKQot
ICAgICAgICAqc3RhdHVzID0gUGFnZUNvbW1hbmRIYW5kbGVyOjpSZXN1bHQ6OkRpc2FibGVkOwor
ICAgICAgICAqc3RhdHVzID0gSW5zcGVjdG9yUGFnZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6
UmVzdWx0OjpEaXNhYmxlZDsKICAgICBlbHNlCi0gICAgICAgICpzdGF0dXMgPSBQYWdlQ29tbWFu
ZEhhbmRsZXI6OlJlc3VsdDo6Rm9yYmlkZGVuOworICAgICAgICAqc3RhdHVzID0gSW5zcGVjdG9y
UGFnZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UmVzdWx0OjpGb3JiaWRkZW47CiB9CiAKIHZv
aWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzZXRTY3JpcHRFeGVjdXRpb25EaXNhYmxlZChFcnJvclN0
cmluZyosIGJvb2wgdmFsdWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yUGFnZUFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
UGFnZUFnZW50LmgKaW5kZXggNzY0NWY0NC4uOGY0YmQ0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuaApAQCAtNjcsNyArNjcsNyBAQCBjbGFzcyBU
ZXh0UmVzb3VyY2VEZWNvZGVyOwogCiB0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKIAotY2xh
c3MgSW5zcGVjdG9yUGFnZUFnZW50IDogcHVibGljIEluc3BlY3RvckJhc2VBZ2VudCwgcHVibGlj
IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpQYWdlQ29tbWFuZEhhbmRsZXIgeworY2xhc3Mg
SW5zcGVjdG9yUGFnZUFnZW50IDogcHVibGljIEluc3BlY3RvckJhc2VBZ2VudCwgcHVibGljIElu
c3BlY3RvclBhZ2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKEluc3BlY3RvclBhZ2VBZ2VudCk7CiBwdWJsaWM6CiAgICAgZW51bSBSZXNvdXJjZVR5
cGUgewpAQCAtMTE3LDcgKzExNyw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0U2hv
d0ZQU0NvdW50ZXIoRXJyb3JTdHJpbmcqLCBib29sIHNob3cpOwogICAgIHZpcnR1YWwgdm9pZCBj
YW5Db250aW51b3VzbHlQYWludChFcnJvclN0cmluZyosIGJvb2wqKTsKICAgICB2aXJ0dWFsIHZv
aWQgc2V0Q29udGludW91c1BhaW50aW5nRW5hYmxlZChFcnJvclN0cmluZyosIGJvb2wgZW5hYmxl
ZCk7Ci0gICAgdmlydHVhbCB2b2lkIGdldFNjcmlwdEV4ZWN1dGlvblN0YXR1cyhFcnJvclN0cmlu
ZyosIFBhZ2VDb21tYW5kSGFuZGxlcjo6UmVzdWx0OjpFbnVtKik7CisgICAgdmlydHVhbCB2b2lk
IGdldFNjcmlwdEV4ZWN1dGlvblN0YXR1cyhFcnJvclN0cmluZyosIEluc3BlY3RvclBhZ2VCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlJlc3VsdDo6RW51bSopOwogICAgIHZpcnR1YWwgdm9pZCBz
ZXRTY3JpcHRFeGVjdXRpb25EaXNhYmxlZChFcnJvclN0cmluZyosIGJvb2wpOwogICAgIHZpcnR1
YWwgdm9pZCBzZXRHZW9sb2NhdGlvbk92ZXJyaWRlKEVycm9yU3RyaW5nKiwgY29uc3QgZG91Ymxl
KiwgY29uc3QgZG91YmxlKiwgY29uc3QgZG91YmxlKik7CiAgICAgdmlydHVhbCB2b2lkIGNsZWFy
R2VvbG9jYXRpb25PdmVycmlkZShFcnJvclN0cmluZyopOwpAQCAtMTk4LDYgKzE5OCw3IEBAIHBy
aXZhdGU6CiAgICAgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBtX2luamVjdGVkU2NyaXB0TWFuYWdl
cjsKICAgICBJbnNwZWN0b3JDbGllbnQqIG1fY2xpZW50OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJ
bnNwZWN0b3JQYWdlRnJvbnRlbmREaXNwYXRjaGVyPiBtX2Zyb250ZW5kRGlzcGF0Y2hlcjsKKyAg
ICBSZWZQdHI8SW5zcGVjdG9yUGFnZUJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRj
aGVyOwogICAgIEluc3BlY3Rvck92ZXJsYXkqIG1fb3ZlcmxheTsKICAgICBsb25nIG1fbGFzdFNj
cmlwdElkZW50aWZpZXI7CiAgICAgU3RyaW5nIG1fcGVuZGluZ1NjcmlwdFRvRXZhbHVhdGVPbkxv
YWRPbmNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBy
b2ZpbGVyQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclByb2Zp
bGVyQWdlbnQuY3BwCmluZGV4IGQ2NDY1YTIuLjUyOWNhZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAKQEAgLTMzMiwxMiAr
MzMyLDEzIEBAIHZvaWQgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6cmVzZXRGcm9udGVuZFByb2Zp
bGVzKCkKIHZvaWQgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRC
YWNrZW5kKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZnJvbnRlbmRDaGFubmVsLCBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIpCiB7CiAgICAgbV9mcm9udGVu
ZERpc3BhdGNoZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEluc3BlY3RvclByb2ZpbGVyRnJvbnRlbmRE
aXNwYXRjaGVyPihmcm9udGVuZENoYW5uZWwpOwotICAgIGJhY2tlbmREaXNwYXRjaGVyLT5yZWdp
c3RlckFnZW50KHRoaXMpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXIgPSBJbnNwZWN0b3JQcm9m
aWxlckJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoYmFja2VuZERpc3BhdGNoZXIsIHRoaXMpOwog
fQogCiB2b2lkIEluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRC
YWNrZW5kKCkKIHsKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlciA9IG51bGxwdHI7CisgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci5jbGVhcigpOwogCiAgICAgc3RvcCgpOwogICAgIEVycm9yU3RyaW5n
IGVycm9yOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBy
b2ZpbGVyQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxl
ckFnZW50LmgKaW5kZXggNmVjNzdlYS4uZTA1NTBiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5oCkBAIC01NCw3ICs1NCw3IEBAIGNs
YXNzIFdvcmtlckdsb2JhbFNjb3BlOwogCiB0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKIAot
Y2xhc3MgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3JCYXNlQWdlbnQs
IHB1YmxpYyBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6UHJvZmlsZXJDb21tYW5kSGFuZGxl
ciB7CitjbGFzcyBJbnNwZWN0b3JQcm9maWxlckFnZW50IDogcHVibGljIEluc3BlY3RvckJhc2VB
Z2VudCwgcHVibGljIEluc3BlY3RvclByb2ZpbGVyQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsK
ICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbnNwZWN0b3JQcm9maWxlckFnZW50KTsgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NPd25QdHI8SW5zcGVj
dG9yUHJvZmlsZXJBZ2VudD4gY3JlYXRlKEluc3RydW1lbnRpbmdBZ2VudHMqLCBJbnNwZWN0b3JD
b25zb2xlQWdlbnQqLCBQYWdlKiwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKik7CkBAIC0xMTYsNiAr
MTE2LDcgQEAgcHJpdmF0ZToKICAgICBJbnNwZWN0b3JDb25zb2xlQWdlbnQqIG1fY29uc29sZUFn
ZW50OwogICAgIEluamVjdGVkU2NyaXB0TWFuYWdlciogbV9pbmplY3RlZFNjcmlwdE1hbmFnZXI7
CiAgICAgc3RkOjp1bmlxdWVfcHRyPEluc3BlY3RvclByb2ZpbGVyRnJvbnRlbmREaXNwYXRjaGVy
PiBtX2Zyb250ZW5kRGlzcGF0Y2hlcjsKKyAgICBSZWZQdHI8SW5zcGVjdG9yUHJvZmlsZXJCYWNr
ZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKICAgICBib29sIG1fZW5hYmxlZDsK
ICAgICBib29sIG1fcHJvZmlsZUhlYWRlcnNSZXF1ZXN0ZWQ7CiAgICAgYm9vbCBtX3JlY29yZGlu
Z0NQVVByb2ZpbGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yUmVzb3VyY2VBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
UmVzb3VyY2VBZ2VudC5jcHAKaW5kZXggMjA4ODAyZC4uMzhkY2RhYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmNwcApAQCAtNzks
MTIgKzc5LDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHZvaWQgSW5zcGVjdG9yUmVzb3VyY2VB
Z2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCogZnJvbnRlbmRDaGFubmVsLCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERp
c3BhdGNoZXIpCiB7CiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXIgPSBzdGQ6Om1ha2VfdW5pcXVl
PEluc3BlY3Rvck5ldHdvcmtGcm9udGVuZERpc3BhdGNoZXI+KGZyb250ZW5kQ2hhbm5lbCk7Ci0g
ICAgYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyQWdlbnQodGhpcyk7CisgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlciA9IEluc3BlY3Rvck5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKGJh
Y2tlbmREaXNwYXRjaGVyLCB0aGlzKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50
Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZCgpCiB7CiAgICAgbV9mcm9udGVuZERpc3Bh
dGNoZXIgPSBudWxscHRyOworICAgIG1fYmFja2VuZERpc3BhdGNoZXIuY2xlYXIoKTsKIAogICAg
IEVycm9yU3RyaW5nIGVycm9yOwogICAgIGRpc2FibGUoJmVycm9yKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5oCmluZGV4IGFmZWExZWUu
LjhjMjdmOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JS
ZXNvdXJjZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJl
c291cmNlQWdlbnQuaApAQCAtNzYsNyArNzYsNyBAQCBzdHJ1Y3QgV2ViU29ja2V0RnJhbWU7CiAK
IHR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogCi1jbGFzcyBJbnNwZWN0b3JSZXNvdXJjZUFn
ZW50IDogcHVibGljIEluc3BlY3RvckJhc2VBZ2VudCwgcHVibGljIEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOjpOZXR3b3JrQ29tbWFuZEhhbmRsZXIgeworY2xhc3MgSW5zcGVjdG9yUmVzb3Vy
Y2VBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3JCYXNlQWdlbnQsIHB1YmxpYyBJbnNwZWN0b3JOZXR3
b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc093
blB0cjxJbnNwZWN0b3JSZXNvdXJjZUFnZW50PiBjcmVhdGUoSW5zdHJ1bWVudGluZ0FnZW50cyog
aW5zdHJ1bWVudGluZ0FnZW50cywgSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQsIEluc3Bl
Y3RvckNsaWVudCogY2xpZW50KQogICAgIHsKQEAgLTE1NCw2ICsxNTQsNyBAQCBwcml2YXRlOgog
ICAgIEluc3BlY3RvclBhZ2VBZ2VudCogbV9wYWdlQWdlbnQ7CiAgICAgSW5zcGVjdG9yQ2xpZW50
KiBtX2NsaWVudDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yTmV0d29ya0Zyb250ZW5k
RGlzcGF0Y2hlcj4gbV9mcm9udGVuZERpc3BhdGNoZXI7CisgICAgUmVmUHRyPEluc3BlY3Rvck5l
dHdvcmtCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKICAgICBTdHJpbmcg
bV91c2VyQWdlbnRPdmVycmlkZTsKICAgICBPd25QdHI8TmV0d29ya1Jlc291cmNlc0RhdGE+IG1f
cmVzb3VyY2VzRGF0YTsKICAgICBib29sIG1fZW5hYmxlZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSdW50aW1lQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JSdW50aW1lQWdlbnQuaAppbmRleCAzZTM1MjE5Li45YjU3ZTJi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUnVudGltZUFn
ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJ1bnRpbWVBZ2Vu
dC5oCkBAIC01MSw3ICs1MSw3IEBAIGNsYXNzIFdvcmtlckdsb2JhbFNjb3BlOwogCiB0eXBlZGVm
IFN0cmluZyBFcnJvclN0cmluZzsKIAotY2xhc3MgSW5zcGVjdG9yUnVudGltZUFnZW50IDogcHVi
bGljIEluc3BlY3RvckJhc2VBZ2VudCwgcHVibGljIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
OjpSdW50aW1lQ29tbWFuZEhhbmRsZXIgeworY2xhc3MgSW5zcGVjdG9yUnVudGltZUFnZW50IDog
cHVibGljIEluc3BlY3RvckJhc2VBZ2VudCwgcHVibGljIEluc3BlY3RvclJ1bnRpbWVCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3RvclJ1
bnRpbWVBZ2VudCk7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+SW5zcGVjdG9yUnVudGltZUFnZW50
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxp
bmVBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVB
Z2VudC5jcHAKaW5kZXggZjA0ZGMyMy4uNGM4OGIxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmNwcApAQCAtNjgsMTIgKzY4LDEz
IEBAIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6On5JbnNwZWN0b3JUaW1lbGluZUFnZW50KCkKIHZv
aWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKElu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZnJvbnRlbmRDaGFubmVsLCBJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIpCiB7CiAgICAgbV9mcm9udGVuZERpc3BhdGNo
ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEluc3BlY3RvclRpbWVsaW5lRnJvbnRlbmREaXNwYXRjaGVy
Pihmcm9udGVuZENoYW5uZWwpOwotICAgIGJhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckFnZW50
KHRoaXMpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXIgPSBJbnNwZWN0b3JUaW1lbGluZUJhY2tl
bmREaXNwYXRjaGVyOjpjcmVhdGUoYmFja2VuZERpc3BhdGNoZXIsIHRoaXMpOwogfQogCiB2b2lk
IEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKCkK
IHsKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlciA9IG51bGxwdHI7CisgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci5jbGVhcigpOwogCiAgICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICAgc3RvcCgmZXJy
b3IpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclRpbWVs
aW5lQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFn
ZW50LmgKaW5kZXggNzA3ZTIyNy4uNDVkYzJmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oCkBAIC0xMjIsNyArMTIyLDcgQEAgcHJp
dmF0ZToKIAogY2xhc3MgSW5zcGVjdG9yVGltZWxpbmVBZ2VudAogICAgIDogcHVibGljIEluc3Bl
Y3RvckJhc2VBZ2VudAotICAgICwgcHVibGljIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpU
aW1lbGluZUNvbW1hbmRIYW5kbGVyIHsKKyAgICAsIHB1YmxpYyBJbnNwZWN0b3JUaW1lbGluZUJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVj
dG9yVGltZWxpbmVBZ2VudCk7CiBwdWJsaWM6CiAgICAgZW51bSBJbnNwZWN0b3JUeXBlIHsgUGFn
ZUluc3BlY3RvciwgV29ya2VySW5zcGVjdG9yIH07CkBAIC0yNTksNiArMjU5LDcgQEAgcHJpdmF0
ZToKICAgICBUaW1lbGluZVRpbWVDb252ZXJ0ZXIgbV90aW1lQ29udmVydGVyOwogCiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPEluc3BlY3RvclRpbWVsaW5lRnJvbnRlbmREaXNwYXRjaGVyPiBtX2Zyb250
ZW5kRGlzcGF0Y2hlcjsKKyAgICBSZWZQdHI8SW5zcGVjdG9yVGltZWxpbmVCYWNrZW5kRGlzcGF0
Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKICAgICBkb3VibGUgbV90aW1lc3RhbXBPZmZzZXQ7
CiAKICAgICBWZWN0b3I8VGltZWxpbmVSZWNvcmRFbnRyeT4gbV9yZWNvcmRTdGFjazsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JXb3JrZXJBZ2VudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yV29ya2VyQWdlbnQuY3BwCmluZGV4
IDI1ZDIyOTMuLmY2NDg1NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JXb3JrZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvcldvcmtlckFnZW50LmNwcApAQCAtMTIyLDcgKzEyMiw3IEBAIEluc3BlY3Rvcldvcmtl
ckFnZW50Ojp+SW5zcGVjdG9yV29ya2VyQWdlbnQoKQogdm9pZCBJbnNwZWN0b3JXb3JrZXJBZ2Vu
dDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCog
ZnJvbnRlbmRDaGFubmVsLCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3Bh
dGNoZXIpCiB7CiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPElu
c3BlY3RvcldvcmtlckZyb250ZW5kRGlzcGF0Y2hlcj4oZnJvbnRlbmRDaGFubmVsKTsKLSAgICBi
YWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJBZ2VudCh0aGlzKTsKKyAgICBtX2JhY2tlbmREaXNw
YXRjaGVyID0gSW5zcGVjdG9yV29ya2VyQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShiYWNrZW5k
RGlzcGF0Y2hlciwgdGhpcyk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yV29ya2VyQWdlbnQ6OndpbGxE
ZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKCkKQEAgLTEzMSw2ICsxMzEsNyBAQCB2b2lkIEluc3Bl
Y3RvcldvcmtlckFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZCgpCiAgICAgZGlz
YWJsZShudWxscHRyKTsKIAogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyID0gbnVsbHB0cjsKKyAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLmNsZWFyKCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yV29ya2Vy
QWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyopCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yV29ya2VyQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JXb3JrZXJBZ2VudC5oCmluZGV4IGM4MWNmMGZjLi43ODU1OWRlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yV29ya2VyQWdlbnQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yV29ya2VyQWdlbnQuaApAQCAtNDYs
NyArNDYsNyBAQCBjbGFzcyBXb3JrZXJHbG9iYWxTY29wZVByb3h5OwogCiB0eXBlZGVmIFN0cmlu
ZyBFcnJvclN0cmluZzsKIAotY2xhc3MgSW5zcGVjdG9yV29ya2VyQWdlbnQgOiBwdWJsaWMgSW5z
cGVjdG9yQmFzZUFnZW50LCBwdWJsaWMgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6Oldvcmtl
ckNvbW1hbmRIYW5kbGVyIHsKK2NsYXNzIEluc3BlY3RvcldvcmtlckFnZW50IDogcHVibGljIElu
c3BlY3RvckJhc2VBZ2VudCwgcHVibGljIEluc3BlY3RvcldvcmtlckJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NPd25QdHI8SW5zcGVjdG9yV29ya2Vy
QWdlbnQ+IGNyZWF0ZShJbnN0cnVtZW50aW5nQWdlbnRzKik7CiAgICAgfkluc3BlY3Rvcldvcmtl
ckFnZW50KCk7CkBAIC03NSw2ICs3NSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkZXN0cm95V29y
a2VyRnJvbnRlbmRDaGFubmVscygpOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPEluc3BlY3Rvcldv
cmtlckZyb250ZW5kRGlzcGF0Y2hlcj4gbV9mcm9udGVuZERpc3BhdGNoZXI7CisgICAgUmVmUHRy
PEluc3BlY3RvcldvcmtlckJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwog
ICAgIGJvb2wgbV9lbmFibGVkOwogICAgIGJvb2wgbV9zaG91bGRQYXVzZURlZGljYXRlZFdvcmtl
ck9uU3RhcnQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlUnVu
dGltZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlUnVudGltZUFnZW50
LmNwcAppbmRleCBiODgzYjk4Li41N2IzYjMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvUGFnZVJ1bnRpbWVBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL1BhZ2VSdW50aW1lQWdlbnQuY3BwCkBAIC02NiwxMiArNjYsMTMgQEAgUGFnZVJ1bnRpbWVB
Z2VudDo6flBhZ2VSdW50aW1lQWdlbnQoKQogdm9pZCBQYWdlUnVudGltZUFnZW50OjpkaWRDcmVh
dGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBmcm9udGVuZENo
YW5uZWwsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcikKIHsK
ICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlciA9IHN0ZDo6bWFrZV91bmlxdWU8SW5zcGVjdG9yUnVu
dGltZUZyb250ZW5kRGlzcGF0Y2hlcj4oZnJvbnRlbmRDaGFubmVsKTsKLSAgICBiYWNrZW5kRGlz
cGF0Y2hlci0+cmVnaXN0ZXJBZ2VudCh0aGlzKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyID0g
SW5zcGVjdG9yUnVudGltZUJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoYmFja2VuZERpc3BhdGNo
ZXIsIHRoaXMpOwogfQogCiB2b2lkIFBhZ2VSdW50aW1lQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRl
bmRBbmRCYWNrZW5kKCkKIHsKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlciA9IG51bGxwdHI7Cisg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci5jbGVhcigpOwogCiAgICAgU3RyaW5nIGVycm9yU3RyaW5n
OwogICAgIGRpc2FibGUoJmVycm9yU3RyaW5nKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9QYWdlUnVudGltZUFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
UGFnZVJ1bnRpbWVBZ2VudC5oCmluZGV4IGU2YjQxM2QuLmU4YjMzYjIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlUnVudGltZUFnZW50LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL1BhZ2VSdW50aW1lQWdlbnQuaApAQCAtNzEsNiArNzEsNyBAQCBwcml2
YXRlOgogICAgIFBhZ2UqIG1faW5zcGVjdGVkUGFnZTsKICAgICBJbnNwZWN0b3JQYWdlQWdlbnQq
IG1fcGFnZUFnZW50OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3JSdW50aW1lRnJvbnRl
bmREaXNwYXRjaGVyPiBtX2Zyb250ZW5kRGlzcGF0Y2hlcjsKKyAgICBSZWZQdHI8SW5zcGVjdG9y
UnVudGltZUJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwogICAgIGJvb2wg
bV9tYWluV29ybGRDb250ZXh0Q3JlYXRlZDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9Xb3JrZXJSdW50aW1lQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL1dvcmtlclJ1bnRpbWVBZ2VudC5jcHAKaW5kZXggMTk0YzUwNC4uMGFiOTAzMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dvcmtlclJ1bnRpbWVBZ2VudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dvcmtlclJ1bnRpbWVBZ2VudC5jcHAKQEAg
LTU5LDExICs1OSwxMiBAQCBXb3JrZXJSdW50aW1lQWdlbnQ6On5Xb3JrZXJSdW50aW1lQWdlbnQo
KQogCiB2b2lkIFdvcmtlclJ1bnRpbWVBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5k
KEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCosIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBi
YWNrZW5kRGlzcGF0Y2hlcikKIHsKLSAgICBiYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJBZ2Vu
dCh0aGlzKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyID0gSW5zcGVjdG9yUnVudGltZUJhY2tl
bmREaXNwYXRjaGVyOjpjcmVhdGUoYmFja2VuZERpc3BhdGNoZXIsIHRoaXMpOwogfQogCiB2b2lk
IFdvcmtlclJ1bnRpbWVBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoKQogewor
ICAgIG1fYmFja2VuZERpc3BhdGNoZXIuY2xlYXIoKTsKIH0KIAogSW5qZWN0ZWRTY3JpcHQgV29y
a2VyUnVudGltZUFnZW50OjppbmplY3RlZFNjcmlwdEZvckV2YWwoRXJyb3JTdHJpbmcqIGVycm9y
LCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9Xb3JrZXJSdW50aW1lQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9Xb3JrZXJSdW50aW1lQWdlbnQuaAppbmRleCA2YzMyNmE2Li4zMTcyMjc1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV29ya2VyUnVudGltZUFnZW50LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dvcmtlclJ1bnRpbWVBZ2VudC5oCkBAIC02NCw2ICs2
NCw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIG11dGVDb25zb2xlKCk7CiAgICAgdmly
dHVhbCB2b2lkIHVubXV0ZUNvbnNvbGUoKTsKICAgICBXb3JrZXJHbG9iYWxTY29wZSogbV93b3Jr
ZXJHbG9iYWxTY29wZTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yUnVudGltZUJhY2tlbmREaXNwYXRj
aGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwogICAgIGJvb2wgbV9wYXVzZWQ7CiB9OwogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>